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: Mamoru TASAKA To: git-commits@fedoraproject.org Subject: [rpms/ruby] rawhide: Update to Ruby 4.0.7 Date: Thu, 17 Sep 2026 13:40:50 GMT Message-ID: <178965245028.1.10630843741407604292.rpms-ruby-b1d0df4cec2e@fedoraproject.org> List-ID: X-Git-Repo: rpms/ruby X-Git-Branch: rawhide X-Git-Rev: b1d0df4cec2e5cabc4fbf9e8737439960a5f9915 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvcnVieQpCcmFuY2gg OiByYXdoaWRlCkNvbW1pdCA6IGIxZDBkZjRjZWMyZTVjYWJjNGZiZjllODczNzQzOTk2MGE1Zjk5 MTUKQXV0aG9yIDogTWFtb3J1IFRBU0FLQSA8bXRhc2FrYUBmZWRvcmFwcm9qZWN0Lm9yZz4KRGF0 ZSAgIDogMjAyNi0wOS0xN1QyMjo0MDowMSswOTowMApTdGF0cyAgOiArMzU5NS8tMTAwNyBpbiA0 IGZpbGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9ydWJ5 L2MvYjFkMGRmNGNlYzJlNWNhYmM0ZmJmOWU4NzM3NDM5OTYwYTVmOTkxNT9icmFuY2g9cmF3aGlk ZQoKTG9nOgpVcGRhdGUgdG8gUnVieSA0LjAuNwoKLS0tCmRpZmYgLS1naXQgYS9ydWJ5LTQuMC43 LXJ1YnlnZW1zLXByOTg3Ny1zdG9wLXZlbmRvcmluZy1yZXNvbHYucGF0Y2ggYi9ydWJ5LTQuMC43 LXJ1YnlnZW1zLXByOTg3Ny1zdG9wLXZlbmRvcmluZy1yZXNvbHYucGF0Y2gKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMxYjNmNwotLS0gL2Rldi9udWxsCisrKyBiL3J1Ynkt NC4wLjctcnVieWdlbXMtcHI5ODc3LXN0b3AtdmVuZG9yaW5nLXJlc29sdi5wYXRjaApAQCAtMCww ICsxLDM1NzkgQEAKK0Zyb20gMGI4ZTBiMWMyOGJjODM5MDk1ZTJjMGU4ODQzMTNmMGY1ZWYxZmM1 MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhpcm9zaGkgU0hJQkFUQSA8aHNidEBy dWJ5LWxhbmcub3JnPgorRGF0ZTogV2VkLCAxNiBTZXAgMjAyNiAwOTozNDowOSArMDkwMAorU3Vi amVjdDogW1BBVENIXSBbcnVieS9ydWJ5Z2Vtc10gU3RvcCB2ZW5kb3JpbmcgcmVzb2x2IGZvciB0 d28gcmVnZXhwcworCitWZW5kb3JlZCBuZXQvaHR0cCBsb2FkZWQgdGhlIHdob2xlIDM1MDAtbGlu ZSBETlMgcmVzb2x2ZXIgb25seSB0byBtYXRjaAorUmVzb2x2OjpJUHY0OjpSZWdleCBhbmQgUmVz b2x2OjpJUHY2OjpSZWdleCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgYW4KK2FkZHJlc3MgbWF5IGJl IHNlbnQgYXMgYSBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uLiBJbmxpbmUgZXF1aXZhbGVudAorcmVn ZXhwcyBpbnN0ZWFkLCBzbyB0aGF0IGEgcmVzb2x2ZXIgUnVieUdlbXMgbmV2ZXIgcmVzb2x2ZXMg d2l0aCBpcyBubworbG9uZ2VyIHNoaXBwZWQgYW5kIG5vIGxvbmdlciBzaG93cyB1cCBhcyBhbiBv dXRkYXRlZCBjb3B5IGluIHNlY3VyaXR5CithdWRpdHMgb2YgdGhlIFJ1YnkgdGFyYmFsbC4KKwor aHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIyMzE3CisKK2h0dHBzOi8vZ2l0aHVi LmNvbS9ydWJ5L3J1YnlnZW1zL2NvbW1pdC85ZjJiZDVmNjZjCisKK0NvLUF1dGhvcmVkLUJ5OiBD bGF1ZGUgT3B1cyA1IDxub3JlcGx5QGFudGhyb3BpYy5jb20+CistLS0KKyBsaWIvcnVieWdlbXMv dmVuZG9yL25ldC1odHRwL2xpYi9uZXQvaHR0cC5yYiB8ICAgMjYgKy0KKyBsaWIvcnVieWdlbXMv dmVuZG9yL3Jlc29sdi9saWIvcmVzb2x2LnJiICAgICB8IDM1MDggLS0tLS0tLS0tLS0tLS0tLS0t CisgMiBmaWxlcyBjaGFuZ2VkLCAyNCBpbnNlcnRpb25zKCspLCAzNTEwIGRlbGV0aW9ucygtKQor IGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWIvcnVieWdlbXMvdmVuZG9yL3Jlc29sdi9saWIvcmVzb2x2 LnJiCisKK2RpZmYgLS1naXQgYS9saWIvcnVieWdlbXMvdmVuZG9yL25ldC1odHRwL2xpYi9uZXQv aHR0cC5yYiBiL2xpYi9ydWJ5Z2Vtcy92ZW5kb3IvbmV0LWh0dHAvbGliL25ldC9odHRwLnJiCitp bmRleCA0ODAwY2QyNWYxM2MyMS4uYjIwNWU0OTczNGVlYmYgMTAwNjQ0CistLS0gYS9saWIvcnVi eWdlbXMvdmVuZG9yL25ldC1odHRwL2xpYi9uZXQvaHR0cC5yYgorKysrIGIvbGliL3J1YnlnZW1z L3ZlbmRvci9uZXQtaHR0cC9saWIvbmV0L2h0dHAucmIKK0BAIC0yMiw3ICsyMiw2IEBACisgCisg cmVxdWlyZV9yZWxhdGl2ZSAnLi4vLi4vLi4vbmV0LXByb3RvY29sL2xpYi9uZXQvcHJvdG9jb2wn CisgcmVxdWlyZV9yZWxhdGl2ZSAnLi4vLi4vLi4vdXJpL2xpYi91cmknCistcmVxdWlyZV9yZWxh dGl2ZSAnLi4vLi4vLi4vcmVzb2x2L2xpYi9yZXNvbHYnCisgYXV0b2xvYWQgOk9wZW5TU0wsICdv cGVuc3NsJworIAorIG1vZHVsZSBHZW06Ok5ldCAgICM6bm9kb2M6CitAQCAtMTUzMSw2ICsxNTMw LDI5IEBAIGRlZiB1c2Vfc3NsPShmbGFnKQorIAorICAgICBTU0xfSVZOQU1FUyA9IFNTTF9BVFRS SUJVVEVTLm1hcCB7IHxhfCAiQCN7YX0iLnRvX3N5bSB9LmZyZWV6ZSAjIDpub2RvYzoKKyAKKysg ICAgIyBSZXNvbHY6OklQdjQ6OlJlZ2V4IGFuZCBSZXNvbHY6OklQdjY6OlJlZ2V4LCBjb3BpZWQg ZnJvbSByZXNvbHYgMC43LjEgcmF0aGVyCisrICAgICMgdGhhbiByZXF1aXJlZCwgc28gdGhhdCBu ZXQvaHR0cCBkb2VzIG5vdCBsb2FkIGEgRE5TIHJlc29sdmVyIGp1c3QgdG8ga2VlcCBhbgorKyAg ICAjIElQIGFkZHJlc3MgbGl0ZXJhbCBvdXQgb2YgdGhlIFNlcnZlciBOYW1lIEluZGljYXRpb24u CisrICAgICMgaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcmVzb2x2L2Jsb2IvdjAuNy4xL2xpYi9y ZXNvbHYucmIKKysgICAgaXB2NF9vY3RldCA9IC8wfDEoPzpbMC05XVswLTldPyk/fDIoPzpbMC00 XVswLTldP3w1WzAtNV0/fFs2LTldKT98WzMtOV1bMC05XT8vCisrICAgIGhleDE2ID0gL1swLTlB LUZhLWZdezEsNH0vCisrICAgIGhleDE2X2dyb3VwID0gLyg/OiN7aGV4MTZ9KD86OiN7aGV4MTZ9 KSopPy8KKysgICAgZG90dGVkX3F1YWQgPSAvXGQrXC5cZCtcLlxkK1wuXGQrLworKyAgICB6b25l X2lkID0gLyVbLTAtOUEtWmEtei5ffl0rLworKworKyAgICBJUFY0X0FERFJFU1MgPSAvXEEoPzoj e2lwdjRfb2N0ZXR9KVwuKD86I3tpcHY0X29jdGV0fSlcLig/OiN7aXB2NF9vY3RldH0pXC4oPzoj e2lwdjRfb2N0ZXR9KVx6LyAjIDpub2RvYzoKKysKKysgICAgSVBWNl9BRERSRVNTID0gL1xBKD86 CisrICAgICAgICAoPzoje2hleDE2fTopezd9I3toZXgxNn0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgYTpiOmM6ZDplOmY6ZzpoCisrICAgICAgfCAje2hleDE2 X2dyb3VwfTo6I3toZXgxNl9ncm91cH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgYTo6YgorKyAgICAgIHwgKD86I3toZXgxNn06KXs2fSN7ZG90dGVkX3F1YWR9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGE6YjpjOmQ6ZTpmOncueC55LnoKKysg ICAgICB8ICN7aGV4MTZfZ3JvdXB9OjooPzoje2hleDE2fTopKiN7ZG90dGVkX3F1YWR9ICAgICAg ICAgICAgICAgICAgICAgICAgIyBhOjpiOncueC55LnoKKysgICAgICB8IFtGZl1bRWVdODAoPzo6 I3toZXgxNn0pezd9I3t6b25lX2lkfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBm ZTgwOmI6YzpkOmU6ZjpnOmglZW0xCisrICAgICAgfCBbRmZdW0VlXTgwOig/OiN7aGV4MTZfZ3Jv dXB9Ojoje2hleDE2X2dyb3VwfXw6I3toZXgxNl9ncm91cH0pPzoje2hleDE2fSN7em9uZV9pZH0g IyBmZTgwOjpiJWVtMQorKyAgICApXHoveCAjIDpub2RvYzoKKysKKysgICAgcHJpdmF0ZV9jb25z dGFudCA6SVBWNF9BRERSRVNTLCA6SVBWNl9BRERSRVNTCisrCisgICAgICMgU2V0cyBvciByZXR1 cm5zIHRoZSBwYXRoIHRvIGEgQ0EgY2VydGlmaWNhdGlvbiBmaWxlIGluIFBFTSBmb3JtYXQuCisg ICAgIGF0dHJfYWNjZXNzb3IgOmNhX2ZpbGUKKyAKK0BAIC0xNzE0LDcgKzE3MzYsNyBAQCBkZWYg Y29ubmVjdAorIAorICAgICAgICAgIyBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpIFJGQyAz NTQ2LzYwNjYKKyAgICAgICAgIGNhc2UgQGFkZHJlc3MKKy0gICAgICAgIHdoZW4gR2VtOjpSZXNv bHY6OklQdjQ6OlJlZ2V4LCBHZW06OlJlc29sdjo6SVB2Njo6UmVnZXgKKysgICAgICAgIHdoZW4g SVBWNF9BRERSRVNTLCBJUFY2X0FERFJFU1MKKyAgICAgICAgICAgIyBkb24ndCBzZXQgU05JLCBh cyBJUCBhZGRyZXNzZXMgaW4gU05JIGlzIG5vdCB2YWxpZAorICAgICAgICAgICAjIHBlciBSRkMg NjA2Niwgc2VjdGlvbiAzLgorIAorZGlmZiAtLWdpdCBhL2xpYi9ydWJ5Z2Vtcy92ZW5kb3IvcmVz b2x2L2xpYi9yZXNvbHYucmIgYi9saWIvcnVieWdlbXMvdmVuZG9yL3Jlc29sdi9saWIvcmVzb2x2 LnJiCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGY5MjJjNzMxYjA1MDI2Li4wMDAw MDAwMDAwMDAwMAorLS0tIGEvbGliL3J1YnlnZW1zL3ZlbmRvci9yZXNvbHYvbGliL3Jlc29sdi5y YgorKysrIC9kZXYvbnVsbAorQEAgLTEsMzQ5OSArMCwwIEBACistIyBmcm96ZW5fc3RyaW5nX2xp dGVyYWw6IHRydWUKKy0KKy1yZXF1aXJlICdzb2NrZXQnCistcmVxdWlyZV9yZWxhdGl2ZSAnLi4v Li4vLi4vdmVuZG9yZWRfdGltZW91dCcKKy1yZXF1aXJlICdpby93YWl0JworLXJlcXVpcmVfcmVs YXRpdmUgJy4uLy4uLy4uL3ZlbmRvcmVkX3NlY3VyZXJhbmRvbScKKy1yZXF1aXJlICdyYmNvbmZp ZycKKy0KKy0jIEdlbTo6UmVzb2x2IGlzIGEgdGhyZWFkLWF3YXJlIEROUyByZXNvbHZlciBsaWJy YXJ5IHdyaXR0ZW4gaW4gUnVieS4gIEdlbTo6UmVzb2x2IGNhbgorLSMgaGFuZGxlIG11bHRpcGxl IEROUyByZXF1ZXN0cyBjb25jdXJyZW50bHkgd2l0aG91dCBibG9ja2luZyB0aGUgZW50aXJlIFJ1 YnkKKy0jIGludGVycHJldGVyLgorLSMKKy0jIFNlZSBhbHNvIHJlc29sdi1yZXBsYWNlLnJiIHRv IHJlcGxhY2UgdGhlIGxpYmMgcmVzb2x2ZXIgd2l0aCBHZW06OlJlc29sdi4KKy0jCistIyBHZW06 OlJlc29sdiBjYW4gbG9vayB1cCB2YXJpb3VzIEROUyByZXNvdXJjZXMgdXNpbmcgdGhlIEROUyBt b2R1bGUgZGlyZWN0bHkuCistIworLSMgRXhhbXBsZXM6CistIworLSMgICBwIEdlbTo6UmVzb2x2 LmdldGFkZHJlc3MgInd3dy5ydWJ5LWxhbmcub3JnIgorLSMgICBwIEdlbTo6UmVzb2x2LmdldG5h bWUgIjIxMC4yNTEuMTIxLjIxNCIKKy0jCistIyAgIEdlbTo6UmVzb2x2OjpETlMub3BlbiBkbyB8 ZG5zfAorLSMgICAgIHJlc3MgPSBkbnMuZ2V0cmVzb3VyY2VzICJ3d3cucnVieS1sYW5nLm9yZyIs IEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6QQorLSMgICAgIHAgcmVzcy5tYXAoJjph ZGRyZXNzKQorLSMgICAgIHJlc3MgPSBkbnMuZ2V0cmVzb3VyY2VzICJydWJ5LWxhbmcub3JnIiwg R2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpNWAorLSMgICAgIHAgcmVzcy5tYXAgeyB8 cnwgW3IuZXhjaGFuZ2UudG9fcywgci5wcmVmZXJlbmNlXSB9CistIyAgIGVuZAorLSMKKy0jCist IyA9PSBCdWdzCistIworLSMgKiBOSVMgaXMgbm90IHN1cHBvcnRlZC4KKy0jICogL2V0Yy9uc3N3 aXRjaC5jb25mIGlzIG5vdCBzdXBwb3J0ZWQuCistCistY2xhc3MgR2VtOjpSZXNvbHYKKy0KKy0g ICMgVGhlIHZlcnNpb24gc3RyaW5nCistICBWRVJTSU9OID0gIjAuNy4wIgorLQorLSAgIyMKKy0g ICMgTG9va3MgdXAgdGhlIGZpcnN0IElQIGFkZHJlc3MgZm9yICtuYW1lKy4KKy0KKy0gIGRlZiBz ZWxmLmdldGFkZHJlc3MobmFtZSkKKy0gICAgRGVmYXVsdFJlc29sdmVyLmdldGFkZHJlc3MobmFt ZSkKKy0gIGVuZAorLQorLSAgIyMKKy0gICMgTG9va3MgdXAgYWxsIElQIGFkZHJlc3MgZm9yICtu YW1lKy4KKy0KKy0gIGRlZiBzZWxmLmdldGFkZHJlc3NlcyhuYW1lKQorLSAgICBEZWZhdWx0UmVz b2x2ZXIuZ2V0YWRkcmVzc2VzKG5hbWUpCistICBlbmQKKy0KKy0gICMjCistICAjIEl0ZXJhdGVz IG92ZXIgYWxsIElQIGFkZHJlc3NlcyBmb3IgK25hbWUrLgorLQorLSAgZGVmIHNlbGYuZWFjaF9h ZGRyZXNzKG5hbWUsICZibG9jaykKKy0gICAgRGVmYXVsdFJlc29sdmVyLmVhY2hfYWRkcmVzcyhu YW1lLCAmYmxvY2spCistICBlbmQKKy0KKy0gICMjCistICAjIExvb2tzIHVwIHRoZSBob3N0bmFt ZSBvZiArYWRkcmVzcysuCistCistICBkZWYgc2VsZi5nZXRuYW1lKGFkZHJlc3MpCistICAgIERl ZmF1bHRSZXNvbHZlci5nZXRuYW1lKGFkZHJlc3MpCistICBlbmQKKy0KKy0gICMjCistICAjIExv b2tzIHVwIGFsbCBob3N0bmFtZXMgZm9yICthZGRyZXNzKy4KKy0KKy0gIGRlZiBzZWxmLmdldG5h bWVzKGFkZHJlc3MpCistICAgIERlZmF1bHRSZXNvbHZlci5nZXRuYW1lcyhhZGRyZXNzKQorLSAg ZW5kCistCistICAjIworLSAgIyBJdGVyYXRlcyBvdmVyIGFsbCBob3N0bmFtZXMgZm9yICthZGRy ZXNzKy4KKy0KKy0gIGRlZiBzZWxmLmVhY2hfbmFtZShhZGRyZXNzLCAmcHJvYykKKy0gICAgRGVm YXVsdFJlc29sdmVyLmVhY2hfbmFtZShhZGRyZXNzLCAmcHJvYykKKy0gIGVuZAorLQorLSAgIyMK Ky0gICMgQ3JlYXRlcyBhIG5ldyBHZW06OlJlc29sdiB1c2luZyArcmVzb2x2ZXJzKy4KKy0gICMK Ky0gICMgSWYgK3Jlc29sdmVycysgaXMgbm90IGdpdmVuLCBhIGhhc2gsIG9yICtuaWwrLCB1c2Vz IGEgSG9zdHMgcmVzb2x2ZXIgYW5kCistICAjIGFuZCBhIEROUyByZXNvbHZlci4gIElmICtyZXNv bHZlcnMrIGlzIGEgaGFzaCwgdXNlcyB0aGUgaGFzaCBhcworLSAgIyBjb25maWd1cmF0aW9uIGZv ciB0aGUgRE5TIHJlc29sdmVyLgorLQorLSAgZGVmIGluaXRpYWxpemUocmVzb2x2ZXJzPShhcmdf bm90X3NldCA9IHRydWU7IG5pbCksIHVzZV9pcHY2OiAoa2V5d29yZF9ub3Rfc2V0ID0gdHJ1ZTsg bmlsKSkKKy0gICAgaWYgIWtleXdvcmRfbm90X3NldCAmJiAhYXJnX25vdF9zZXQKKy0gICAgICB3 YXJuICJTdXBwb3J0IGZvciBzZXBhcmF0ZSB1c2VfaXB2NiBrZXl3b3JkIGlzIGRlcHJlY2F0ZWQs IGFzIGl0IGlzIGlnbm9yZWQgaWYgYW4gYXJndW1lbnQgaXMgcHJvdmlkZWQuIERvIG5vdCBwcm92 aWRlIGEgcG9zaXRpb25hbCBhcmd1bWVudCBpZiB1c2luZyB0aGUgdXNlX2lwdjYga2V5d29yZCBh cmd1bWVudC4iLCB1cGxldmVsOiAxCistICAgIGVuZAorLQorLSAgICBAcmVzb2x2ZXJzID0gY2Fz ZSByZXNvbHZlcnMKKy0gICAgd2hlbiBIYXNoLCBuaWwKKy0gICAgICBbSG9zdHMubmV3LCBETlMu bmV3KEROUzo6Q29uZmlnLmRlZmF1bHRfY29uZmlnX2hhc2gubWVyZ2UocmVzb2x2ZXJzIHx8IHt9 KSldCistICAgIGVsc2UKKy0gICAgICByZXNvbHZlcnMKKy0gICAgZW5kCistICBlbmQKKy0KKy0g ICMjCistICAjIExvb2tzIHVwIHRoZSBmaXJzdCBJUCBhZGRyZXNzIGZvciArbmFtZSsuCistCist ICBkZWYgZ2V0YWRkcmVzcyhuYW1lKQorLSAgICBlYWNoX2FkZHJlc3MobmFtZSkge3xhZGRyZXNz fCByZXR1cm4gYWRkcmVzc30KKy0gICAgcmFpc2UgUmVzb2x2RXJyb3IubmV3KCJubyBhZGRyZXNz IGZvciAje25hbWV9IikKKy0gIGVuZAorLQorLSAgIyMKKy0gICMgTG9va3MgdXAgYWxsIElQIGFk ZHJlc3MgZm9yICtuYW1lKy4KKy0KKy0gIGRlZiBnZXRhZGRyZXNzZXMobmFtZSkKKy0gICAgcmV0 ID0gW10KKy0gICAgZWFjaF9hZGRyZXNzKG5hbWUpIHt8YWRkcmVzc3wgcmV0IDw8IGFkZHJlc3N9 CistICAgIHJldHVybiByZXQKKy0gIGVuZAorLQorLSAgIyMKKy0gICMgSXRlcmF0ZXMgb3ZlciBh bGwgSVAgYWRkcmVzc2VzIGZvciArbmFtZSsuCistCistICBkZWYgZWFjaF9hZGRyZXNzKG5hbWUp CistICAgIGlmIEFkZHJlc3NSZWdleCA9fiBuYW1lCistICAgICAgeWllbGQgbmFtZQorLSAgICAg IHJldHVybgorLSAgICBlbmQKKy0gICAgeWllbGRlZCA9IGZhbHNlCistICAgIEByZXNvbHZlcnMu ZWFjaCB7fHJ8CistICAgICAgci5lYWNoX2FkZHJlc3MobmFtZSkge3xhZGRyZXNzfAorLSAgICAg ICAgeWllbGQgYWRkcmVzcy50b19zCistICAgICAgICB5aWVsZGVkID0gdHJ1ZQorLSAgICAgIH0K Ky0gICAgICByZXR1cm4gaWYgeWllbGRlZAorLSAgICB9CistICBlbmQKKy0KKy0gICMjCistICAj IExvb2tzIHVwIHRoZSBob3N0bmFtZSBvZiArYWRkcmVzcysuCistCistICBkZWYgZ2V0bmFtZShh ZGRyZXNzKQorLSAgICBlYWNoX25hbWUoYWRkcmVzcykge3xuYW1lfCByZXR1cm4gbmFtZX0KKy0g ICAgcmFpc2UgUmVzb2x2RXJyb3IubmV3KCJubyBuYW1lIGZvciAje2FkZHJlc3N9IikKKy0gIGVu ZAorLQorLSAgIyMKKy0gICMgTG9va3MgdXAgYWxsIGhvc3RuYW1lcyBmb3IgK2FkZHJlc3MrLgor LQorLSAgZGVmIGdldG5hbWVzKGFkZHJlc3MpCistICAgIHJldCA9IFtdCistICAgIGVhY2hfbmFt ZShhZGRyZXNzKSB7fG5hbWV8IHJldCA8PCBuYW1lfQorLSAgICByZXR1cm4gcmV0CistICBlbmQK Ky0KKy0gICMjCistICAjIEl0ZXJhdGVzIG92ZXIgYWxsIGhvc3RuYW1lcyBmb3IgK2FkZHJlc3Mr LgorLQorLSAgZGVmIGVhY2hfbmFtZShhZGRyZXNzKQorLSAgICB5aWVsZGVkID0gZmFsc2UKKy0g ICAgQHJlc29sdmVycy5lYWNoIHt8cnwKKy0gICAgICByLmVhY2hfbmFtZShhZGRyZXNzKSB7fG5h bWV8CistICAgICAgICB5aWVsZCBuYW1lLnRvX3MKKy0gICAgICAgIHlpZWxkZWQgPSB0cnVlCist ICAgICAgfQorLSAgICAgIHJldHVybiBpZiB5aWVsZGVkCistICAgIH0KKy0gIGVuZAorLQorLSAg IyMKKy0gICMgSW5kaWNhdGVzIGEgZmFpbHVyZSB0byByZXNvbHZlIGEgbmFtZSBvciBhZGRyZXNz LgorLQorLSAgY2xhc3MgUmVzb2x2RXJyb3IgPCBTdGFuZGFyZEVycm9yOyBlbmQKKy0KKy0gICMj CistICAjIEluZGljYXRlcyBhIHRpbWVvdXQgcmVzb2x2aW5nIGEgbmFtZSBvciBhZGRyZXNzLgor LQorLSAgY2xhc3MgUmVzb2x2VGltZW91dCA8IEdlbTo6VGltZW91dDo6RXJyb3I7IGVuZAorLQor LSAgIyMKKy0gICMgR2VtOjpSZXNvbHY6Okhvc3RzIGlzIGEgaG9zdG5hbWUgcmVzb2x2ZXIgdGhh dCB1c2VzIHRoZSBzeXN0ZW0gaG9zdHMgZmlsZS4KKy0KKy0gIGNsYXNzIEhvc3RzCistICAgIGlm IC9tc3dpbnxjeWd3aW58bWluZ3d8YmNjd2luLyA9fiBSVUJZX1BMQVRGT1JNIHx8IDo6UmJDb25m aWc6OkNPTkZJR1snaG9zdF9vcyddID1+IC9tc3dpbi8KKy0gICAgICBiZWdpbgorLSAgICAgICAg cmVxdWlyZSAnd2luMzIvcmVzb2x2JyB1bmxlc3MgZGVmaW5lZD8oV2luMzI6OlJlc29sdikKKy0g ICAgICAgIGhvc3RzID0gV2luMzI6OlJlc29sdi5nZXRfaG9zdHNfcGF0aCB8fCBJTzo6TlVMTAor LSAgICAgIHJlc2N1ZSBMb2FkRXJyb3IKKy0gICAgICBlbmQKKy0gICAgZW5kCistICAgICMgVGhl IGRlZmF1bHQgZmlsZSBuYW1lIGZvciBob3N0IG5hbWVzCistICAgIERlZmF1bHRGaWxlTmFtZSA9 IGhvc3RzIHx8ICcvZXRjL2hvc3RzJworLQorLSAgICAjIworLSAgICAjIENyZWF0ZXMgYSBuZXcg R2VtOjpSZXNvbHY6Okhvc3RzLCB1c2luZyArZmlsZW5hbWUrIGZvciBpdHMgZGF0YSBzb3VyY2Uu CistCistICAgIGRlZiBpbml0aWFsaXplKGZpbGVuYW1lID0gRGVmYXVsdEZpbGVOYW1lKQorLSAg ICAgIEBmaWxlbmFtZSA9IGZpbGVuYW1lCistICAgICAgQG11dGV4ID0gVGhyZWFkOjpNdXRleC5u ZXcKKy0gICAgICBAaW5pdGlhbGl6ZWQgPSBuaWwKKy0gICAgZW5kCistCistICAgIGRlZiBsYXp5 X2luaXRpYWxpemUgIyA6bm9kb2M6CistICAgICAgQG11dGV4LnN5bmNocm9uaXplIHsKKy0gICAg ICAgIHVubGVzcyBAaW5pdGlhbGl6ZWQKKy0gICAgICAgICAgQG5hbWUyYWRkciA9IHt9CistICAg ICAgICAgIEBhZGRyMm5hbWUgPSB7fQorLSAgICAgICAgICBGaWxlLm9wZW4oQGZpbGVuYW1lLCAn cmInKSB7fGZ8CistICAgICAgICAgICAgZi5lYWNoIHt8bGluZXwKKy0gICAgICAgICAgICAgIGxp bmUuc3ViISgvIy4qLywgJycpCistICAgICAgICAgICAgICBhZGRyLCAqaG9zdG5hbWVzID0gbGlu ZS5zcGxpdCgvXHMrLykKKy0gICAgICAgICAgICAgIG5leHQgdW5sZXNzIGFkZHIKKy0gICAgICAg ICAgICAgIChAYWRkcjJuYW1lW2FkZHJdIHx8PSBbXSkuY29uY2F0KGhvc3RuYW1lcykKKy0gICAg ICAgICAgICAgIGhvc3RuYW1lcy5lYWNoIHt8aG9zdG5hbWV8IChAbmFtZTJhZGRyW2hvc3RuYW1l XSB8fD0gW10pIDw8IGFkZHJ9CistICAgICAgICAgICAgfQorLSAgICAgICAgICB9CistICAgICAg ICAgIEBuYW1lMmFkZHIuZWFjaCB7fG5hbWUsIGFycnwgYXJyLnJldmVyc2UhfQorLSAgICAgICAg ICBAaW5pdGlhbGl6ZWQgPSB0cnVlCistICAgICAgICBlbmQKKy0gICAgICB9CistICAgICAgc2Vs ZgorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBHZXRzIHRoZSBJUCBhZGRyZXNzIG9mICtu YW1lKyBmcm9tIHRoZSBob3N0cyBmaWxlLgorLQorLSAgICBkZWYgZ2V0YWRkcmVzcyhuYW1lKQor LSAgICAgIGVhY2hfYWRkcmVzcyhuYW1lKSB7fGFkZHJlc3N8IHJldHVybiBhZGRyZXNzfQorLSAg ICAgIHJhaXNlIFJlc29sdkVycm9yLm5ldygiI3tAZmlsZW5hbWV9IGhhcyBubyBuYW1lOiAje25h bWV9IikKKy0gICAgZW5kCistCistICAgICMjCistICAgICMgR2V0cyBhbGwgSVAgYWRkcmVzc2Vz IGZvciArbmFtZSsgZnJvbSB0aGUgaG9zdHMgZmlsZS4KKy0KKy0gICAgZGVmIGdldGFkZHJlc3Nl cyhuYW1lKQorLSAgICAgIHJldCA9IFtdCistICAgICAgZWFjaF9hZGRyZXNzKG5hbWUpIHt8YWRk cmVzc3wgcmV0IDw8IGFkZHJlc3N9CistICAgICAgcmV0dXJuIHJldAorLSAgICBlbmQKKy0KKy0g ICAgIyMKKy0gICAgIyBJdGVyYXRlcyBvdmVyIGFsbCBJUCBhZGRyZXNzZXMgZm9yICtuYW1lKyBy ZXRyaWV2ZWQgZnJvbSB0aGUgaG9zdHMgZmlsZS4KKy0KKy0gICAgZGVmIGVhY2hfYWRkcmVzcyhu YW1lLCAmcHJvYykKKy0gICAgICBsYXp5X2luaXRpYWxpemUKKy0gICAgICBAbmFtZTJhZGRyW25h bWVdJi5lYWNoKCZwcm9jKQorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBHZXRzIHRoZSBo b3N0bmFtZSBvZiArYWRkcmVzcysgZnJvbSB0aGUgaG9zdHMgZmlsZS4KKy0KKy0gICAgZGVmIGdl dG5hbWUoYWRkcmVzcykKKy0gICAgICBlYWNoX25hbWUoYWRkcmVzcykge3xuYW1lfCByZXR1cm4g bmFtZX0KKy0gICAgICByYWlzZSBSZXNvbHZFcnJvci5uZXcoIiN7QGZpbGVuYW1lfSBoYXMgbm8g YWRkcmVzczogI3thZGRyZXNzfSIpCistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIEdldHMg YWxsIGhvc3RuYW1lcyBmb3IgK2FkZHJlc3MrIGZyb20gdGhlIGhvc3RzIGZpbGUuCistCistICAg IGRlZiBnZXRuYW1lcyhhZGRyZXNzKQorLSAgICAgIHJldCA9IFtdCistICAgICAgZWFjaF9uYW1l KGFkZHJlc3MpIHt8bmFtZXwgcmV0IDw8IG5hbWV9CistICAgICAgcmV0dXJuIHJldAorLSAgICBl bmQKKy0KKy0gICAgIyMKKy0gICAgIyBJdGVyYXRlcyBvdmVyIGFsbCBob3N0bmFtZXMgZm9yICth ZGRyZXNzKyByZXRyaWV2ZWQgZnJvbSB0aGUgaG9zdHMgZmlsZS4KKy0KKy0gICAgZGVmIGVhY2hf bmFtZShhZGRyZXNzLCAmcHJvYykKKy0gICAgICBsYXp5X2luaXRpYWxpemUKKy0gICAgICBAYWRk cjJuYW1lW2FkZHJlc3NdJi5lYWNoKCZwcm9jKQorLSAgICBlbmQKKy0gIGVuZAorLQorLSAgIyMK Ky0gICMgR2VtOjpSZXNvbHY6OkROUyBpcyBhIEROUyBzdHViIHJlc29sdmVyLgorLSAgIworLSAg IyBJbmZvcm1hdGlvbiB0YWtlbiBmcm9tIHRoZSBmb2xsb3dpbmcgcGxhY2VzOgorLSAgIworLSAg IyAqIFNURDAwMTMKKy0gICMgKiBSRkMgMTAzNQorLSAgIyAqIGZ0cDovL2Z0cC5pc2kuZWR1L2lu LW5vdGVzL2lhbmEvYXNzaWdubWVudHMvZG5zLXBhcmFtZXRlcnMKKy0gICMgKiBldGMuCistCist ICBjbGFzcyBETlMKKy0KKy0gICAgIyMKKy0gICAgIyBEZWZhdWx0IEROUyBQb3J0CistCistICAg IFBvcnQgPSA1MworLQorLSAgICAjIworLSAgICAjIERlZmF1bHQgRE5TIFVEUCBwYWNrZXQgc2l6 ZQorLQorLSAgICBVRFBTaXplID0gNTEyCistCistICAgICMjCistICAgICMgQ3JlYXRlcyBhIG5l dyBETlMgcmVzb2x2ZXIuICBTZWUgR2VtOjpSZXNvbHY6OkROUy5uZXcgZm9yIGFyZ3VtZW50IGRl dGFpbHMuCistICAgICMKKy0gICAgIyBZaWVsZHMgdGhlIGNyZWF0ZWQgRE5TIHJlc29sdmVyIHRv IHRoZSBibG9jaywgaWYgZ2l2ZW4sIG90aGVyd2lzZQorLSAgICAjIHJldHVybnMgaXQuCistCist ICAgIGRlZiBzZWxmLm9wZW4oKmFyZ3MpCistICAgICAgZG5zID0gbmV3KCphcmdzKQorLSAgICAg IHJldHVybiBkbnMgdW5sZXNzIGJsb2NrX2dpdmVuPworLSAgICAgIGJlZ2luCistICAgICAgICB5 aWVsZCBkbnMKKy0gICAgICBlbnN1cmUKKy0gICAgICAgIGRucy5jbG9zZQorLSAgICAgIGVuZAor LSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBDcmVhdGVzIGEgbmV3IEROUyByZXNvbHZlci4K Ky0gICAgIworLSAgICAjICtjb25maWdfaW5mbysgY2FuIGJlOgorLSAgICAjCistICAgICMgbmls OjogVXNlcyAvZXRjL3Jlc29sdi5jb25mLgorLSAgICAjIFN0cmluZzo6IFBhdGggdG8gYSBmaWxl IHVzaW5nIC9ldGMvcmVzb2x2LmNvbmYncyBmb3JtYXQuCistICAgICMgSGFzaDo6IE11c3QgY29u dGFpbiA6bmFtZXNlcnZlciwgOnNlYXJjaCBhbmQgOm5kb3RzIGtleXMuCistICAgICMgOm5hbWVz ZXJ2ZXJfcG9ydCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHBvcnQgbnVtYmVyIG9mIG5hbWVzZXJ2 ZXIgYWRkcmVzcy4KKy0gICAgIyA6cmFpc2VfdGltZW91dF9lcnJvcnMgY2FuIGJlIHVzZWQgdG8g cmFpc2UgdGltZW91dCBlcnJvcnMKKy0gICAgIyBhcyBleGNlcHRpb25zIGluc3RlYWQgb2YgdHJl YXRpbmcgdGhlIHNhbWUgYXMgYW4gTlhET01BSU4gcmVzcG9uc2UuCistICAgICMKKy0gICAgIyBU aGUgdmFsdWUgb2YgOm5hbWVzZXJ2ZXIgc2hvdWxkIGJlIGFuIGFkZHJlc3Mgc3RyaW5nIG9yCist ICAgICMgYW4gYXJyYXkgb2YgYWRkcmVzcyBzdHJpbmdzLgorLSAgICAjIC0gOm5hbWVzZXJ2ZXIg PT4gJzguOC44LjgnCistICAgICMgLSA6bmFtZXNlcnZlciA9PiBbJzguOC44LjgnLCAnOC44LjQu NCddCistICAgICMKKy0gICAgIyBUaGUgdmFsdWUgb2YgOm5hbWVzZXJ2ZXJfcG9ydCBzaG91bGQg YmUgYW4gYXJyYXkgb2YKKy0gICAgIyBwYWlyIG9mIG5hbWVzZXJ2ZXIgYWRkcmVzcyBhbmQgcG9y dCBudW1iZXIuCistICAgICMgLSA6bmFtZXNlcnZlcl9wb3J0ID0+IFtbJzguOC44LjgnLCA1M10s IFsnOC44LjQuNCcsIDUzXV0KKy0gICAgIworLSAgICAjIEV4YW1wbGU6CistICAgICMKKy0gICAg IyAgIEdlbTo6UmVzb2x2OjpETlMubmV3KDpuYW1lc2VydmVyID0+IFsnMjEwLjI1MS4xMjEuMjEn XSwKKy0gICAgIyAgICAgICAgICAgICAgICAgICA6c2VhcmNoID0+IFsncnVieS1sYW5nLm9yZydd LAorLSAgICAjICAgICAgICAgICAgICAgICAgIDpuZG90cyA9PiAxKQorLQorLSAgICBkZWYgaW5p dGlhbGl6ZShjb25maWdfaW5mbz1uaWwpCistICAgICAgQG11dGV4ID0gVGhyZWFkOjpNdXRleC5u ZXcKKy0gICAgICBAY29uZmlnID0gQ29uZmlnLm5ldyhjb25maWdfaW5mbykKKy0gICAgICBAaW5p dGlhbGl6ZWQgPSBuaWwKKy0gICAgZW5kCistCistICAgICMgU2V0cyB0aGUgcmVzb2x2ZXIgdGlt ZW91dHMuICBUaGlzIG1heSBiZSBhIHNpbmdsZSBwb3NpdGl2ZSBudW1iZXIKKy0gICAgIyBvciBh biBhcnJheSBvZiBwb3NpdGl2ZSBudW1iZXJzIHJlcHJlc2VudGluZyB0aW1lb3V0cyBpbiBzZWNv bmRzLgorLSAgICAjIElmIGFuIGFycmF5IGlzIHNwZWNpZmllZCwgYSBETlMgcmVxdWVzdCB3aWxs IHJldHJ5IGFuZCB3YWl0IGZvcgorLSAgICAjIGVhY2ggc3VjY2Vzc2l2ZSBpbnRlcnZhbCBpbiB0 aGUgYXJyYXkgdW50aWwgYSBzdWNjZXNzZnVsIHJlc3BvbnNlCistICAgICMgaXMgcmVjZWl2ZWQu ICBTcGVjaWZ5aW5nICtuaWwrIHJldmVydHMgdG8gdGhlIGRlZmF1bHQgdGltZW91dHM6CistICAg ICMgWyA1LCBzZWNvbmQgPSA1ICogMiAvIG5hbWVzZXJ2ZXJfY291bnQsIDIgKiBzZWNvbmQsIDQg KiBzZWNvbmQgXQorLSAgICAjCistICAgICMgRXhhbXBsZToKKy0gICAgIworLSAgICAjICAgZG5z LnRpbWVvdXRzID0gMworLSAgICAjCistICAgIGRlZiB0aW1lb3V0cz0odmFsdWVzKQorLSAgICAg IEBjb25maWcudGltZW91dHMgPSB2YWx1ZXMKKy0gICAgZW5kCistCistICAgIGRlZiBsYXp5X2lu aXRpYWxpemUgIyA6bm9kb2M6CistICAgICAgQG11dGV4LnN5bmNocm9uaXplIHsKKy0gICAgICAg IHVubGVzcyBAaW5pdGlhbGl6ZWQKKy0gICAgICAgICAgQGNvbmZpZy5sYXp5X2luaXRpYWxpemUK Ky0gICAgICAgICAgQGluaXRpYWxpemVkID0gdHJ1ZQorLSAgICAgICAgZW5kCistICAgICAgfQor LSAgICAgIHNlbGYKKy0gICAgZW5kCistCistICAgICMjCistICAgICMgQ2xvc2VzIHRoZSBETlMg cmVzb2x2ZXIuCistCistICAgIGRlZiBjbG9zZQorLSAgICAgIEBtdXRleC5zeW5jaHJvbml6ZSB7 CistICAgICAgICBpZiBAaW5pdGlhbGl6ZWQKKy0gICAgICAgICAgQGluaXRpYWxpemVkID0gZmFs c2UKKy0gICAgICAgIGVuZAorLSAgICAgIH0KKy0gICAgZW5kCistCistICAgICMjCistICAgICMg R2V0cyB0aGUgSVAgYWRkcmVzcyBvZiArbmFtZSsgZnJvbSB0aGUgRE5TIHJlc29sdmVyLgorLSAg ICAjCistICAgICMgK25hbWUrIGNhbiBiZSBhIEdlbTo6UmVzb2x2OjpETlM6Ok5hbWUgb3IgYSBT dHJpbmcuICBSZXRyaWV2ZWQgYWRkcmVzcyB3aWxsCistICAgICMgYmUgYSBHZW06OlJlc29sdjo6 SVB2NCBvciBHZW06OlJlc29sdjo6SVB2NgorLQorLSAgICBkZWYgZ2V0YWRkcmVzcyhuYW1lKQor LSAgICAgIGVhY2hfYWRkcmVzcyhuYW1lKSB7fGFkZHJlc3N8IHJldHVybiBhZGRyZXNzfQorLSAg ICAgIHJhaXNlIFJlc29sdkVycm9yLm5ldygiRE5TIHJlc3VsdCBoYXMgbm8gaW5mb3JtYXRpb24g Zm9yICN7bmFtZX0iKQorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBHZXRzIGFsbCBJUCBh ZGRyZXNzZXMgZm9yICtuYW1lKyBmcm9tIHRoZSBETlMgcmVzb2x2ZXIuCistICAgICMKKy0gICAg IyArbmFtZSsgY2FuIGJlIGEgR2VtOjpSZXNvbHY6OkROUzo6TmFtZSBvciBhIFN0cmluZy4gIFJl dHJpZXZlZCBhZGRyZXNzZXMgd2lsbAorLSAgICAjIGJlIGEgR2VtOjpSZXNvbHY6OklQdjQgb3Ig R2VtOjpSZXNvbHY6OklQdjYKKy0KKy0gICAgZGVmIGdldGFkZHJlc3NlcyhuYW1lKQorLSAgICAg IHJldCA9IFtdCistICAgICAgZWFjaF9hZGRyZXNzKG5hbWUpIHt8YWRkcmVzc3wgcmV0IDw8IGFk ZHJlc3N9CistICAgICAgcmV0dXJuIHJldAorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBJ dGVyYXRlcyBvdmVyIGFsbCBJUCBhZGRyZXNzZXMgZm9yICtuYW1lKyByZXRyaWV2ZWQgZnJvbSB0 aGUgRE5TCistICAgICMgcmVzb2x2ZXIuCistICAgICMKKy0gICAgIyArbmFtZSsgY2FuIGJlIGEg R2VtOjpSZXNvbHY6OkROUzo6TmFtZSBvciBhIFN0cmluZy4gIFJldHJpZXZlZCBhZGRyZXNzZXMg d2lsbAorLSAgICAjIGJlIGEgR2VtOjpSZXNvbHY6OklQdjQgb3IgR2VtOjpSZXNvbHY6OklQdjYK Ky0KKy0gICAgZGVmIGVhY2hfYWRkcmVzcyhuYW1lKQorLSAgICAgIGlmIHVzZV9pcHY2PworLSAg ICAgICAgZWFjaF9yZXNvdXJjZShuYW1lLCBSZXNvdXJjZTo6SU46OkFBQUEpIHt8cmVzb3VyY2V8 IHlpZWxkIHJlc291cmNlLmFkZHJlc3N9CistICAgICAgZW5kCistICAgICAgZWFjaF9yZXNvdXJj ZShuYW1lLCBSZXNvdXJjZTo6SU46OkEpIHt8cmVzb3VyY2V8IHlpZWxkIHJlc291cmNlLmFkZHJl c3N9CistICAgIGVuZAorLQorLSAgICBkZWYgdXNlX2lwdjY/ICMgOm5vZG9jOgorLSAgICAgIEBj b25maWcubGF6eV9pbml0aWFsaXplIHVubGVzcyBAY29uZmlnLmluc3RhbmNlX3ZhcmlhYmxlX2dl dCg6QGluaXRpYWxpemVkKQorLQorLSAgICAgIHVzZV9pcHY2ID0gQGNvbmZpZy51c2VfaXB2Nj8K Ky0gICAgICB1bmxlc3MgdXNlX2lwdjYubmlsPworLSAgICAgICAgcmV0dXJuIHVzZV9pcHY2Cist ICAgICAgZW5kCistCistICAgICAgYmVnaW4KKy0gICAgICAgIGxpc3QgPSBTb2NrZXQuaXBfYWRk cmVzc19saXN0CistICAgICAgcmVzY3VlIE5vdEltcGxlbWVudGVkRXJyb3IKKy0gICAgICAgIHJl dHVybiB0cnVlCistICAgICAgZW5kCistICAgICAgbGlzdC5hbnk/IHt8YXwgYS5pcHY2PyAmJiAh YS5pcHY2X2xvb3BiYWNrPyAmJiAhYS5pcHY2X2xpbmtsb2NhbD8gfQorLSAgICBlbmQKKy0gICAg cHJpdmF0ZSA6dXNlX2lwdjY/CistCistICAgICMjCistICAgICMgR2V0cyB0aGUgaG9zdG5hbWUg Zm9yICthZGRyZXNzKyBmcm9tIHRoZSBETlMgcmVzb2x2ZXIuCistICAgICMKKy0gICAgIyArYWRk cmVzcysgbXVzdCBiZSBhIEdlbTo6UmVzb2x2OjpJUHY0LCBHZW06OlJlc29sdjo6SVB2NiBvciBh IFN0cmluZy4gIFJldHJpZXZlZAorLSAgICAjIG5hbWUgd2lsbCBiZSBhIEdlbTo6UmVzb2x2OjpE TlM6Ok5hbWUuCistCistICAgIGRlZiBnZXRuYW1lKGFkZHJlc3MpCistICAgICAgZWFjaF9uYW1l KGFkZHJlc3MpIHt8bmFtZXwgcmV0dXJuIG5hbWV9CistICAgICAgcmFpc2UgUmVzb2x2RXJyb3Iu bmV3KCJETlMgcmVzdWx0IGhhcyBubyBpbmZvcm1hdGlvbiBmb3IgI3thZGRyZXNzfSIpCistICAg IGVuZAorLQorLSAgICAjIworLSAgICAjIEdldHMgYWxsIGhvc3RuYW1lcyBmb3IgK2FkZHJlc3Mr IGZyb20gdGhlIEROUyByZXNvbHZlci4KKy0gICAgIworLSAgICAjICthZGRyZXNzKyBtdXN0IGJl IGEgR2VtOjpSZXNvbHY6OklQdjQsIEdlbTo6UmVzb2x2OjpJUHY2IG9yIGEgU3RyaW5nLiAgUmV0 cmlldmVkCistICAgICMgbmFtZXMgd2lsbCBiZSBHZW06OlJlc29sdjo6RE5TOjpOYW1lIGluc3Rh bmNlcy4KKy0KKy0gICAgZGVmIGdldG5hbWVzKGFkZHJlc3MpCistICAgICAgcmV0ID0gW10KKy0g ICAgICBlYWNoX25hbWUoYWRkcmVzcykge3xuYW1lfCByZXQgPDwgbmFtZX0KKy0gICAgICByZXR1 cm4gcmV0CistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIEl0ZXJhdGVzIG92ZXIgYWxsIGhv c3RuYW1lcyBmb3IgK2FkZHJlc3MrIHJldHJpZXZlZCBmcm9tIHRoZSBETlMKKy0gICAgIyByZXNv bHZlci4KKy0gICAgIworLSAgICAjICthZGRyZXNzKyBtdXN0IGJlIGEgR2VtOjpSZXNvbHY6OklQ djQsIEdlbTo6UmVzb2x2OjpJUHY2IG9yIGEgU3RyaW5nLiAgUmV0cmlldmVkCistICAgICMgbmFt ZXMgd2lsbCBiZSBHZW06OlJlc29sdjo6RE5TOjpOYW1lIGluc3RhbmNlcy4KKy0KKy0gICAgZGVm IGVhY2hfbmFtZShhZGRyZXNzKQorLSAgICAgIGNhc2UgYWRkcmVzcworLSAgICAgIHdoZW4gTmFt ZQorLSAgICAgICAgcHRyID0gYWRkcmVzcworLSAgICAgIHdoZW4gSVB2NCwgSVB2NgorLSAgICAg ICAgcHRyID0gYWRkcmVzcy50b19uYW1lCistICAgICAgd2hlbiBJUHY0OjpSZWdleAorLSAgICAg ICAgcHRyID0gSVB2NC5jcmVhdGUoYWRkcmVzcykudG9fbmFtZQorLSAgICAgIHdoZW4gSVB2Njo6 UmVnZXgKKy0gICAgICAgIHB0ciA9IElQdjYuY3JlYXRlKGFkZHJlc3MpLnRvX25hbWUKKy0gICAg ICBlbHNlCistICAgICAgICByYWlzZSBSZXNvbHZFcnJvci5uZXcoImNhbm5vdCBpbnRlcnByZXQg YXMgYWRkcmVzczogI3thZGRyZXNzfSIpCistICAgICAgZW5kCistICAgICAgZWFjaF9yZXNvdXJj ZShwdHIsIFJlc291cmNlOjpJTjo6UFRSKSB7fHJlc291cmNlfCB5aWVsZCByZXNvdXJjZS5uYW1l fQorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBMb29rIHVwIHRoZSArdHlwZWNsYXNzKyBE TlMgcmVzb3VyY2Ugb2YgK25hbWUrLgorLSAgICAjCistICAgICMgK25hbWUrIG11c3QgYmUgYSBH ZW06OlJlc29sdjo6RE5TOjpOYW1lIG9yIGEgU3RyaW5nLgorLSAgICAjCistICAgICMgK3R5cGVj bGFzcysgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLSAgICAjCistICAgICMgKiBH ZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkEKKy0gICAgIyAqIEdlbTo6UmVzb2x2OjpE TlM6OlJlc291cmNlOjpJTjo6QUFBQQorLSAgICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3Vy Y2U6OklOOjpBTlkKKy0gICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6Q05B TUUKKy0gICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6SElORk8KKy0gICAg IyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6TUlORk8KKy0gICAgIyAqIEdlbTo6 UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6TVgKKy0gICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6 OlJlc291cmNlOjpJTjo6TlMKKy0gICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJ Tjo6UFRSCistICAgICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OlNPQQorLSAg ICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpUWFQKKy0gICAgIyAqIEdlbTo6 UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6V0tTCistICAgICMKKy0gICAgIyBSZXR1cm5lZCBy ZXNvdXJjZSBpcyByZXByZXNlbnRlZCBhcyBhIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlIGlu c3RhbmNlLAorLSAgICAjIGkuZS4gR2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpBLgor LQorLSAgICBkZWYgZ2V0cmVzb3VyY2UobmFtZSwgdHlwZWNsYXNzKQorLSAgICAgIGVhY2hfcmVz b3VyY2UobmFtZSwgdHlwZWNsYXNzKSB7fHJlc291cmNlfCByZXR1cm4gcmVzb3VyY2V9CistICAg ICAgcmFpc2UgUmVzb2x2RXJyb3IubmV3KCJETlMgcmVzdWx0IGhhcyBubyBpbmZvcm1hdGlvbiBm b3IgI3tuYW1lfSIpCistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIExvb2tzIHVwIGFsbCAr dHlwZWNsYXNzKyBETlMgcmVzb3VyY2VzIGZvciArbmFtZSsuICBTZWUgI2dldHJlc291cmNlIGZv cgorLSAgICAjIGFyZ3VtZW50IGRldGFpbHMuCistCistICAgIGRlZiBnZXRyZXNvdXJjZXMobmFt ZSwgdHlwZWNsYXNzKQorLSAgICAgIHJldCA9IFtdCistICAgICAgZWFjaF9yZXNvdXJjZShuYW1l LCB0eXBlY2xhc3MpIHt8cmVzb3VyY2V8IHJldCA8PCByZXNvdXJjZX0KKy0gICAgICByZXR1cm4g cmV0CistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIEl0ZXJhdGVzIG92ZXIgYWxsICt0eXBl Y2xhc3MrIEROUyByZXNvdXJjZXMgZm9yICtuYW1lKy4gIFNlZQorLSAgICAjICNnZXRyZXNvdXJj ZSBmb3IgYXJndW1lbnQgZGV0YWlscy4KKy0KKy0gICAgZGVmIGVhY2hfcmVzb3VyY2UobmFtZSwg dHlwZWNsYXNzLCAmcHJvYykKKy0gICAgICBmZXRjaF9yZXNvdXJjZShuYW1lLCB0eXBlY2xhc3Mp IHt8cmVwbHksIHJlcGx5X25hbWV8CistICAgICAgICBleHRyYWN0X3Jlc291cmNlcyhyZXBseSwg cmVwbHlfbmFtZSwgdHlwZWNsYXNzLCAmcHJvYykKKy0gICAgICB9CistICAgIGVuZAorLQorLSAg ICAjIDpzdG9wZG9jOgorLQorLSAgICBkZWYgZmV0Y2hfcmVzb3VyY2UobmFtZSwgdHlwZWNsYXNz KQorLSAgICAgIGxhenlfaW5pdGlhbGl6ZQorLSAgICAgIHRydW5jYXRlZCA9IHt9CistICAgICAg cmVxdWVzdGVycyA9IHt9CistICAgICAgdWRwX3JlcXVlc3RlciA9IGJlZ2luCistICAgICAgICBt YWtlX3VkcF9yZXF1ZXN0ZXIKKy0gICAgICByZXNjdWUgRXJybm86OkVBQ0NFUworLSAgICAgICAg IyBmYWxsIGJhY2sgdG8gVENQCistICAgICAgZW5kCistICAgICAgc2VuZGVycyA9IHt9CistCist ICAgICAgYmVnaW4KKy0gICAgICAgIEBjb25maWcucmVzb2x2KG5hbWUpIGRvIHxjYW5kaWRhdGUs IHRvdXQsIG5hbWVzZXJ2ZXIsIHBvcnR8CistICAgICAgICAgIG1zZyA9IE1lc3NhZ2UubmV3Cist ICAgICAgICAgIG1zZy5yZCA9IDEKKy0gICAgICAgICAgbXNnLmFkZF9xdWVzdGlvbihjYW5kaWRh dGUsIHR5cGVjbGFzcykKKy0KKy0gICAgICAgICAgcmVxdWVzdGVyID0gcmVxdWVzdGVycy5mZXRj aChbbmFtZXNlcnZlciwgcG9ydF0pIGRvCistICAgICAgICAgICAgaWYgIXRydW5jYXRlZFtjYW5k aWRhdGVdICYmIHVkcF9yZXF1ZXN0ZXIKKy0gICAgICAgICAgICAgIHVkcF9yZXF1ZXN0ZXIKKy0g ICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICByZXF1ZXN0ZXJzW1tuYW1lc2VydmVyLCBw b3J0XV0gPSBtYWtlX3RjcF9yZXF1ZXN0ZXIobmFtZXNlcnZlciwgcG9ydCkKKy0gICAgICAgICAg ICBlbmQKKy0gICAgICAgICAgZW5kCistCistICAgICAgICAgIHVubGVzcyBzZW5kZXIgPSBzZW5k ZXJzW1tjYW5kaWRhdGUsIHJlcXVlc3RlciwgbmFtZXNlcnZlciwgcG9ydF1dCistICAgICAgICAg ICAgc2VuZGVyID0gcmVxdWVzdGVyLnNlbmRlcihtc2csIGNhbmRpZGF0ZSwgbmFtZXNlcnZlciwg cG9ydCkKKy0gICAgICAgICAgICBuZXh0IGlmICFzZW5kZXIKKy0gICAgICAgICAgICBzZW5kZXJz W1tjYW5kaWRhdGUsIHJlcXVlc3RlciwgbmFtZXNlcnZlciwgcG9ydF1dID0gc2VuZGVyCistICAg ICAgICAgIGVuZAorLSAgICAgICAgICByZXBseSwgcmVwbHlfbmFtZSA9IHJlcXVlc3Rlci5yZXF1 ZXN0KHNlbmRlciwgdG91dCkKKy0gICAgICAgICAgY2FzZSByZXBseS5yY29kZQorLSAgICAgICAg ICB3aGVuIFJDb2RlOjpOb0Vycm9yCistICAgICAgICAgICAgaWYgcmVwbHkudGMgPT0gMSBhbmQg bm90IFJlcXVlc3Rlcjo6VENQID09PSByZXF1ZXN0ZXIKKy0gICAgICAgICAgICAgICMgUmV0cnkg dmlhIFRDUDoKKy0gICAgICAgICAgICAgIHRydW5jYXRlZFtjYW5kaWRhdGVdID0gdHJ1ZQorLSAg ICAgICAgICAgICAgcmVkbworLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgIHlpZWxk KHJlcGx5LCByZXBseV9uYW1lKQorLSAgICAgICAgICAgIGVuZAorLSAgICAgICAgICAgIHJldHVy bgorLSAgICAgICAgICB3aGVuIFJDb2RlOjpOWERvbWFpbgorLSAgICAgICAgICAgIHJhaXNlIENv bmZpZzo6TlhEb21haW4ubmV3KHJlcGx5X25hbWUudG9fcykKKy0gICAgICAgICAgZWxzZQorLSAg ICAgICAgICAgIHJhaXNlIENvbmZpZzo6T3RoZXJSZXNvbHZFcnJvci5uZXcocmVwbHlfbmFtZS50 b19zKQorLSAgICAgICAgICBlbmQKKy0gICAgICAgIGVuZAorLSAgICAgIGVuc3VyZQorLSAgICAg ICAgdWRwX3JlcXVlc3RlciYuY2xvc2UKKy0gICAgICAgIHJlcXVlc3RlcnMuZWFjaF92YWx1ZSB7 IHxyZXF1ZXN0ZXJ8IHJlcXVlc3RlciYuY2xvc2UgfQorLSAgICAgIGVuZAorLSAgICBlbmQKKy0K Ky0gICAgZGVmIG1ha2VfdWRwX3JlcXVlc3RlciAjIDpub2RvYzoKKy0gICAgICBuYW1lc2VydmVy X3BvcnQgPSBAY29uZmlnLm5hbWVzZXJ2ZXJfcG9ydAorLSAgICAgIGlmIG5hbWVzZXJ2ZXJfcG9y dC5sZW5ndGggPT0gMQorLSAgICAgICAgUmVxdWVzdGVyOjpDb25uZWN0ZWRVRFAubmV3KCpuYW1l c2VydmVyX3BvcnRbMF0pCistICAgICAgZWxzZQorLSAgICAgICAgUmVxdWVzdGVyOjpVbmNvbm5l Y3RlZFVEUC5uZXcoKm5hbWVzZXJ2ZXJfcG9ydCkKKy0gICAgICBlbmQKKy0gICAgZW5kCistCist ICAgIGRlZiBtYWtlX3RjcF9yZXF1ZXN0ZXIoaG9zdCwgcG9ydCkgIyA6bm9kb2M6CistICAgICAg cmV0dXJuIFJlcXVlc3Rlcjo6VENQLm5ldyhob3N0LCBwb3J0KQorLSAgICByZXNjdWUgRXJybm86 OkVDT05OUkVGVVNFRAorLSAgICAgICMgVHJlYXQgYSByZWZ1c2VkIFRDUCBjb25uZWN0aW9uIGF0 dGVtcHQgdG8gYSBuYW1lc2VydmVyIGxpa2UgYSB0aW1lb3V0LAorLSAgICAgICMgYXMgR2VtOjpS ZXNvbHY6OkROUzo6Q29uZmlnI3Jlc29sdiBjb25zaWRlcnMgUmVzb2x2VGltZW91dCBleGNlcHRp b25zIGFzIGEKKy0gICAgICAjIGhpbnQgdG8gdHJ5IHRoZSBuZXh0IG5hbWVzZXJ2ZXI6CistICAg ICAgcmFpc2UgUmVzb2x2VGltZW91dAorLSAgICBlbmQKKy0KKy0gICAgZGVmIGV4dHJhY3RfcmVz b3VyY2VzKG1zZywgbmFtZSwgdHlwZWNsYXNzKSAjIDpub2RvYzoKKy0gICAgICBpZiB0eXBlY2xh c3MgPCBSZXNvdXJjZTo6QU5ZCistICAgICAgICBuMCA9IE5hbWUuY3JlYXRlKG5hbWUpCistICAg ICAgICBtc2cuZWFjaF9yZXNvdXJjZSB7fG4sIHR0bCwgZGF0YXwKKy0gICAgICAgICAgeWllbGQg ZGF0YSBpZiBuMCA9PSBuCistICAgICAgICB9CistICAgICAgZW5kCistICAgICAgeWllbGRlZCA9 IGZhbHNlCistICAgICAgbjAgPSBOYW1lLmNyZWF0ZShuYW1lKQorLSAgICAgIG1zZy5lYWNoX3Jl c291cmNlIHt8biwgdHRsLCBkYXRhfAorLSAgICAgICAgaWYgbjAgPT0gbgorLSAgICAgICAgICBj YXNlIGRhdGEKKy0gICAgICAgICAgd2hlbiB0eXBlY2xhc3MKKy0gICAgICAgICAgICB5aWVsZCBk YXRhCistICAgICAgICAgICAgeWllbGRlZCA9IHRydWUKKy0gICAgICAgICAgd2hlbiBSZXNvdXJj ZTo6Q05BTUUKKy0gICAgICAgICAgICBuMCA9IGRhdGEubmFtZQorLSAgICAgICAgICBlbmQKKy0g ICAgICAgIGVuZAorLSAgICAgIH0KKy0gICAgICByZXR1cm4gaWYgeWllbGRlZAorLSAgICAgIG1z Zy5lYWNoX3Jlc291cmNlIHt8biwgdHRsLCBkYXRhfAorLSAgICAgICAgaWYgbjAgPT0gbgorLSAg ICAgICAgICBjYXNlIGRhdGEKKy0gICAgICAgICAgd2hlbiB0eXBlY2xhc3MKKy0gICAgICAgICAg ICB5aWVsZCBkYXRhCistICAgICAgICAgIGVuZAorLSAgICAgICAgZW5kCistICAgICAgfQorLSAg ICBlbmQKKy0KKy0gICAgZGVmIHNlbGYucmFuZG9tKGFyZykgIyA6bm9kb2M6CistICAgICAgYmVn aW4KKy0gICAgICAgIEdlbTo6U2VjdXJlUmFuZG9tLnJhbmRvbV9udW1iZXIoYXJnKQorLSAgICAg IHJlc2N1ZSBOb3RJbXBsZW1lbnRlZEVycm9yCistICAgICAgICByYW5kKGFyZykKKy0gICAgICBl bmQKKy0gICAgZW5kCistCistICAgIFJlcXVlc3RJRCA9IHt9ICMgOm5vZG9jOgorLSAgICBSZXF1 ZXN0SURNdXRleCA9IFRocmVhZDo6TXV0ZXgubmV3ICMgOm5vZG9jOgorLQorLSAgICBkZWYgc2Vs Zi5hbGxvY2F0ZV9yZXF1ZXN0X2lkKGhvc3QsIHBvcnQpICMgOm5vZG9jOgorLSAgICAgIGlkID0g bmlsCistICAgICAgUmVxdWVzdElETXV0ZXguc3luY2hyb25pemUgeworLSAgICAgICAgaCA9IChS ZXF1ZXN0SURbW2hvc3QsIHBvcnRdXSB8fD0ge30pCistICAgICAgICBiZWdpbgorLSAgICAgICAg ICBpZCA9IHJhbmRvbSgweDAwMDAuLjB4ZmZmZikKKy0gICAgICAgIGVuZCB3aGlsZSBoW2lkXQor LSAgICAgICAgaFtpZF0gPSB0cnVlCistICAgICAgfQorLSAgICAgIGlkCistICAgIGVuZAorLQor LSAgICBkZWYgc2VsZi5mcmVlX3JlcXVlc3RfaWQoaG9zdCwgcG9ydCwgaWQpICMgOm5vZG9jOgor LSAgICAgIFJlcXVlc3RJRE11dGV4LnN5bmNocm9uaXplIHsKKy0gICAgICAgIGtleSA9IFtob3N0 LCBwb3J0XQorLSAgICAgICAgaWYgaCA9IFJlcXVlc3RJRFtrZXldCistICAgICAgICAgIGguZGVs ZXRlIGlkCistICAgICAgICAgIGlmIGguZW1wdHk/CistICAgICAgICAgICAgUmVxdWVzdElELmRl bGV0ZSBrZXkKKy0gICAgICAgICAgZW5kCistICAgICAgICBlbmQKKy0gICAgICB9CistICAgIGVu ZAorLQorLSAgICBjYXNlIFJVQllfUExBVEZPUk0KKy0gICAgd2hlbiAqWworLSAgICAgICMgaHR0 cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYwNTYudHh0CistICAgICAgIyBBcHBlbmRp eCBBLiBTdXJ2ZXkgb2YgdGhlIEFsZ29yaXRobXMgaW4gVXNlIGJ5IFNvbWUgUG9wdWxhciBJbXBs ZW1lbnRhdGlvbnMKKy0gICAgICAvZnJlZWJzZC8sIC9saW51eC8sIC9uZXRic2QvLCAvb3BlbmJz ZC8sIC9zb2xhcmlzLywKKy0gICAgICAvZGFyd2luLywgIyB0aGUgc2FtZSBhcyBGcmVlQlNECist ICAgIF0gdGhlbgorLSAgICAgIGRlZiBzZWxmLmJpbmRfcmFuZG9tX3BvcnQodWRwc29jaywgYmlu ZF9ob3N0PSIwLjAuMC4wIikgIyA6bm9kb2M6CistICAgICAgICB1ZHBzb2NrLmJpbmQoYmluZF9o b3N0LCAwKQorLSAgICAgIGVuZAorLSAgICBlbHNlCistICAgICAgIyBTZXF1ZW50aWFsIHBvcnQg YXNzaWdubWVudAorLSAgICAgIGRlZiBzZWxmLmJpbmRfcmFuZG9tX3BvcnQodWRwc29jaywgYmlu ZF9ob3N0PSIwLjAuMC4wIikgIyA6bm9kb2M6CistICAgICAgICAjIEVwaGVtZXJhbCBwb3J0IG51 bWJlciByYW5nZSByZWNvbW1lbmRlZCBieSBSRkMgNjA1NgorLSAgICAgICAgcG9ydCA9IHJhbmRv bSgxMDI0Li42NTUzNSkKKy0gICAgICAgIHVkcHNvY2suYmluZChiaW5kX2hvc3QsIHBvcnQpCist ICAgICAgcmVzY3VlIEVycm5vOjpFQUREUklOVVNFLCAjIFBPU0lYCistICAgICAgICAgICAgIEVy cm5vOjpFQUNDRVMsICMgU3VuT1M6IFNlZSBQUklWX1NZU19ORlMgaW4gcHJpdmlsZWdlcyg1KQor LSAgICAgICAgICAgICBFcnJubzo6RVBFUk0gIyBGcmVlQlNEOiBzZWN1cml0eS5tYWMucG9ydGFj bC5wb3J0X2hpZ2ggaXMgY29uZmlndXJhYmxlLiAgU2VlIG1hY19wb3J0YWNsKDQpLgorLSAgICAg ICAgcmV0cnkKKy0gICAgICBlbmQKKy0gICAgZW5kCistCistICAgIGNsYXNzIFJlcXVlc3RlciAj IDpub2RvYzoKKy0gICAgICBkZWYgaW5pdGlhbGl6ZQorLSAgICAgICAgQHNlbmRlcnMgPSB7fQor LSAgICAgICAgQHNvY2tzID0gbmlsCistICAgICAgZW5kCistCistICAgICAgZGVmIHJlcXVlc3Qo c2VuZGVyLCB0b3V0KQorLSAgICAgICAgc3RhcnQgPSBQcm9jZXNzLmNsb2NrX2dldHRpbWUoUHJv Y2Vzczo6Q0xPQ0tfTU9OT1RPTklDKQorLSAgICAgICAgdGltZWxpbWl0ID0gc3RhcnQgKyB0b3V0 CistICAgICAgICBiZWdpbgorLSAgICAgICAgICBzZW5kZXIuc2VuZAorLSAgICAgICAgcmVzY3Vl IEVycm5vOjpFSE9TVFVOUkVBQ0gsICMgbXVsdGktaG9tZWQgSVB2NiBtYXkgZ2VuZXJhdGUgdGhp cworLSAgICAgICAgICAgICAgIEVycm5vOjpFTkVUVU5SRUFDSAorLSAgICAgICAgICByYWlzZSBS ZXNvbHZUaW1lb3V0CistICAgICAgICBlbmQKKy0gICAgICAgIHdoaWxlIHRydWUKKy0gICAgICAg ICAgYmVmb3JlX3NlbGVjdCA9IFByb2Nlc3MuY2xvY2tfZ2V0dGltZShQcm9jZXNzOjpDTE9DS19N T05PVE9OSUMpCistICAgICAgICAgIHRpbWVvdXQgPSB0aW1lbGltaXQgLSBiZWZvcmVfc2VsZWN0 CistICAgICAgICAgIGlmIHRpbWVvdXQgPD0gMAorLSAgICAgICAgICAgIHJhaXNlIFJlc29sdlRp bWVvdXQKKy0gICAgICAgICAgZW5kCistICAgICAgICAgIGlmIEBzb2Nrcy5zaXplID09IDEKKy0g ICAgICAgICAgICBzZWxlY3RfcmVzdWx0ID0gQHNvY2tzWzBdLndhaXRfcmVhZGFibGUodGltZW91 dCkgPyBbIEBzb2NrcyBdIDogbmlsCistICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICBzZWxl Y3RfcmVzdWx0ID0gSU8uc2VsZWN0KEBzb2NrcywgbmlsLCBuaWwsIHRpbWVvdXQpCistICAgICAg ICAgIGVuZAorLSAgICAgICAgICBpZiAhc2VsZWN0X3Jlc3VsdAorLSAgICAgICAgICAgIGFmdGVy X3NlbGVjdCA9IFByb2Nlc3MuY2xvY2tfZ2V0dGltZShQcm9jZXNzOjpDTE9DS19NT05PVE9OSUMp CistICAgICAgICAgICAgbmV4dCBpZiBhZnRlcl9zZWxlY3QgPCB0aW1lbGltaXQKKy0gICAgICAg ICAgICByYWlzZSBSZXNvbHZUaW1lb3V0CistICAgICAgICAgIGVuZAorLSAgICAgICAgICBiZWdp bgorLSAgICAgICAgICAgIHJlcGx5LCBmcm9tID0gcmVjdl9yZXBseShzZWxlY3RfcmVzdWx0WzBd KQorLSAgICAgICAgICByZXNjdWUgRXJybm86OkVDT05OUkVGVVNFRCwgIyBHTlUvTGludXgsIEZy ZWVCU0QKKy0gICAgICAgICAgICAgICAgIEVycm5vOjpFQ09OTlJFU0VUICMgV2luZG93cworLSAg ICAgICAgICAgICMgTm8gbmFtZSBzZXJ2ZXIgcnVubmluZyBvbiB0aGUgc2VydmVyPworLSAgICAg ICAgICAgICMgRG9uJ3Qgd2FpdCBhbnltb3JlLgorLSAgICAgICAgICAgIHJhaXNlIFJlc29sdlRp bWVvdXQKKy0gICAgICAgICAgZW5kCistICAgICAgICAgIGJlZ2luCistICAgICAgICAgICAgbXNn ID0gTWVzc2FnZS5kZWNvZGUocmVwbHkpCistICAgICAgICAgIHJlc2N1ZSBEZWNvZGVFcnJvcgor LSAgICAgICAgICAgIG5leHQgIyBicm9rZW4gRE5TIG1lc3NhZ2UgaWdub3JlZAorLSAgICAgICAg ICBlbmQKKy0gICAgICAgICAgaWYgc2VuZGVyID09IHNlbmRlcl9mb3IoZnJvbSwgbXNnKQorLSAg ICAgICAgICAgIGJyZWFrCistICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAjIHVuZXhwZWN0 ZWQgRE5TIG1lc3NhZ2UgaWdub3JlZAorLSAgICAgICAgICBlbmQKKy0gICAgICAgIGVuZAorLSAg ICAgICAgcmV0dXJuIG1zZywgc2VuZGVyLmRhdGEKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYg c2VuZGVyX2ZvcihhZGRyLCBtc2cpCistICAgICAgICBAc2VuZGVyc1tbYWRkcixtc2cuaWRdXQor LSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBjbG9zZQorLSAgICAgICAgc29ja3MgPSBAc29ja3MK Ky0gICAgICAgIEBzb2NrcyA9IG5pbAorLSAgICAgICAgc29ja3MmLmVhY2goJjpjbG9zZSkKKy0g ICAgICBlbmQKKy0KKy0gICAgICBjbGFzcyBTZW5kZXIgIyA6bm9kb2M6CistICAgICAgICBkZWYg aW5pdGlhbGl6ZShtc2csIGRhdGEsIHNvY2spCistICAgICAgICAgIEBtc2cgPSBtc2cKKy0gICAg ICAgICAgQGRhdGEgPSBkYXRhCistICAgICAgICAgIEBzb2NrID0gc29jaworLSAgICAgICAgZW5k CistICAgICAgZW5kCistCistICAgICAgY2xhc3MgVW5jb25uZWN0ZWRVRFAgPCBSZXF1ZXN0ZXIg IyA6bm9kb2M6CistICAgICAgICBkZWYgaW5pdGlhbGl6ZSgqbmFtZXNlcnZlcl9wb3J0KQorLSAg ICAgICAgICBzdXBlcigpCistICAgICAgICAgIEBuYW1lc2VydmVyX3BvcnQgPSBuYW1lc2VydmVy X3BvcnQKKy0gICAgICAgICAgQGluaXRpYWxpemVkID0gZmFsc2UKKy0gICAgICAgICAgQG11dGV4 ID0gVGhyZWFkOjpNdXRleC5uZXcKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIGxhenlf aW5pdGlhbGl6ZQorLSAgICAgICAgICBAbXV0ZXguc3luY2hyb25pemUgeworLSAgICAgICAgICAg IG5leHQgaWYgQGluaXRpYWxpemVkCistICAgICAgICAgICAgQGluaXRpYWxpemVkID0gdHJ1ZQor LSAgICAgICAgICAgIEBzb2Nrc19oYXNoID0ge30KKy0gICAgICAgICAgICBAc29ja3MgPSBbXQor LSAgICAgICAgICAgIEBuYW1lc2VydmVyX3BvcnQuZWFjaCB7fGhvc3QsIHBvcnR8CistICAgICAg ICAgICAgICBpZiBob3N0LmluZGV4KCc6JykKKy0gICAgICAgICAgICAgICAgYmluZF9ob3N0ID0g Ijo6IgorLSAgICAgICAgICAgICAgICBhZiA9IFNvY2tldDo6QUZfSU5FVDYKKy0gICAgICAgICAg ICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgYmluZF9ob3N0ID0gIjAuMC4wLjAiCistICAgICAg ICAgICAgICAgIGFmID0gU29ja2V0OjpBRl9JTkVUCistICAgICAgICAgICAgICBlbmQKKy0gICAg ICAgICAgICAgIG5leHQgaWYgQHNvY2tzX2hhc2hbYmluZF9ob3N0XQorLSAgICAgICAgICAgICAg YmVnaW4KKy0gICAgICAgICAgICAgICAgc29jayA9IFVEUFNvY2tldC5uZXcoYWYpCistICAgICAg ICAgICAgICByZXNjdWUgRXJybm86OkVBRk5PU1VQUE9SVCwgRXJybm86OkVQUk9UT05PU1VQUE9S VAorLSAgICAgICAgICAgICAgICBuZXh0ICMgVGhlIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgdGhl IGFkZHJlc3MgZmFtaWx5LgorLSAgICAgICAgICAgICAgZW5kCistICAgICAgICAgICAgICBAc29j a3MgPDwgc29jaworLSAgICAgICAgICAgICAgQHNvY2tzX2hhc2hbYmluZF9ob3N0XSA9IHNvY2sK Ky0gICAgICAgICAgICAgIHNvY2suZG9fbm90X3JldmVyc2VfbG9va3VwID0gdHJ1ZQorLSAgICAg ICAgICAgICAgRE5TLmJpbmRfcmFuZG9tX3BvcnQoc29jaywgYmluZF9ob3N0KQorLSAgICAgICAg ICAgIH0KKy0gICAgICAgICAgfQorLSAgICAgICAgICBzZWxmCistICAgICAgICBlbmQKKy0KKy0g ICAgICAgIGRlZiByZWN2X3JlcGx5KHJlYWRhYmxlX3NvY2tzKQorLSAgICAgICAgICBsYXp5X2lu aXRpYWxpemUKKy0gICAgICAgICAgcmVwbHksIGZyb20gPSByZWFkYWJsZV9zb2Nrc1swXS5yZWN2 ZnJvbShVRFBTaXplKQorLSAgICAgICAgICByZXR1cm4gcmVwbHksIFtmcm9tWzNdLGZyb21bMV1d CistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBzZW5kZXIobXNnLCBkYXRhLCBob3N0LCBw b3J0PVBvcnQpCistICAgICAgICAgIGhvc3QgPSBBZGRyaW5mby5pcChob3N0KS5pcF9hZGRyZXNz CistICAgICAgICAgIGxhenlfaW5pdGlhbGl6ZQorLSAgICAgICAgICBzb2NrID0gQHNvY2tzX2hh c2hbaG9zdC5pbmRleCgnOicpID8gIjo6IiA6ICIwLjAuMC4wIl0KKy0gICAgICAgICAgcmV0dXJu IG5pbCBpZiAhc29jaworLSAgICAgICAgICBzZXJ2aWNlID0gW2hvc3QsIHBvcnRdCistICAgICAg ICAgIGlkID0gRE5TLmFsbG9jYXRlX3JlcXVlc3RfaWQoaG9zdCwgcG9ydCkKKy0gICAgICAgICAg cmVxdWVzdCA9IG1zZy5lbmNvZGUKKy0gICAgICAgICAgcmVxdWVzdFswLDJdID0gW2lkXS5wYWNr KCduJykKKy0gICAgICAgICAgcmV0dXJuIEBzZW5kZXJzW1tzZXJ2aWNlLCBpZF1dID0KKy0gICAg ICAgICAgICBTZW5kZXIubmV3KHJlcXVlc3QsIGRhdGEsIHNvY2ssIGhvc3QsIHBvcnQpCistICAg ICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBjbG9zZQorLSAgICAgICAgICBAbXV0ZXguc3luY2hy b25pemUgeworLSAgICAgICAgICAgIGlmIEBpbml0aWFsaXplZAorLSAgICAgICAgICAgICAgc3Vw ZXIKKy0gICAgICAgICAgICAgIEBzZW5kZXJzLmVhY2hfa2V5IHt8c2VydmljZSwgaWR8CistICAg ICAgICAgICAgICAgIEROUy5mcmVlX3JlcXVlc3RfaWQoc2VydmljZVswXSwgc2VydmljZVsxXSwg aWQpCistICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICBAaW5pdGlhbGl6ZWQgPSBmYWxz ZQorLSAgICAgICAgICAgIGVuZAorLSAgICAgICAgICB9CistICAgICAgICBlbmQKKy0KKy0gICAg ICAgIGNsYXNzIFNlbmRlciA8IFJlcXVlc3Rlcjo6U2VuZGVyICMgOm5vZG9jOgorLSAgICAgICAg ICBkZWYgaW5pdGlhbGl6ZShtc2csIGRhdGEsIHNvY2ssIGhvc3QsIHBvcnQpCistICAgICAgICAg ICAgc3VwZXIobXNnLCBkYXRhLCBzb2NrKQorLSAgICAgICAgICAgIEBob3N0ID0gaG9zdAorLSAg ICAgICAgICAgIEBwb3J0ID0gcG9ydAorLSAgICAgICAgICBlbmQKKy0gICAgICAgICAgYXR0cl9y ZWFkZXIgOmRhdGEKKy0KKy0gICAgICAgICAgZGVmIHNlbmQKKy0gICAgICAgICAgICByYWlzZSAi QHNvY2sgaXMgbmlsLiIgaWYgQHNvY2submlsPworLSAgICAgICAgICAgIEBzb2NrLnNlbmQoQG1z ZywgMCwgQGhvc3QsIEBwb3J0KQorLSAgICAgICAgICBlbmQKKy0gICAgICAgIGVuZAorLSAgICAg IGVuZAorLQorLSAgICAgIGNsYXNzIENvbm5lY3RlZFVEUCA8IFJlcXVlc3RlciAjIDpub2RvYzoK Ky0gICAgICAgIGRlZiBpbml0aWFsaXplKGhvc3QsIHBvcnQ9UG9ydCkKKy0gICAgICAgICAgc3Vw ZXIoKQorLSAgICAgICAgICBAaG9zdCA9IGhvc3QKKy0gICAgICAgICAgQHBvcnQgPSBwb3J0Cist ICAgICAgICAgIEBtdXRleCA9IFRocmVhZDo6TXV0ZXgubmV3CistICAgICAgICAgIEBpbml0aWFs aXplZCA9IGZhbHNlCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBsYXp5X2luaXRpYWxp emUKKy0gICAgICAgICAgQG11dGV4LnN5bmNocm9uaXplIHsKKy0gICAgICAgICAgICBuZXh0IGlm IEBpbml0aWFsaXplZAorLSAgICAgICAgICAgIEBpbml0aWFsaXplZCA9IHRydWUKKy0gICAgICAg ICAgICBpc19pcHY2ID0gQGhvc3QuaW5kZXgoJzonKQorLSAgICAgICAgICAgIHNvY2sgPSBVRFBT b2NrZXQubmV3KGlzX2lwdjYgPyBTb2NrZXQ6OkFGX0lORVQ2IDogU29ja2V0OjpBRl9JTkVUKQor LSAgICAgICAgICAgIEBzb2NrcyA9IFtzb2NrXQorLSAgICAgICAgICAgIHNvY2suZG9fbm90X3Jl dmVyc2VfbG9va3VwID0gdHJ1ZQorLSAgICAgICAgICAgIEROUy5iaW5kX3JhbmRvbV9wb3J0KHNv Y2ssIGlzX2lwdjYgPyAiOjoiIDogIjAuMC4wLjAiKQorLSAgICAgICAgICAgIHNvY2suY29ubmVj dChAaG9zdCwgQHBvcnQpCistICAgICAgICAgIH0KKy0gICAgICAgICAgc2VsZgorLSAgICAgICAg ZW5kCistCistICAgICAgICBkZWYgcmVjdl9yZXBseShyZWFkYWJsZV9zb2NrcykKKy0gICAgICAg ICAgbGF6eV9pbml0aWFsaXplCistICAgICAgICAgIHJlcGx5ID0gcmVhZGFibGVfc29ja3NbMF0u cmVjdihVRFBTaXplKQorLSAgICAgICAgICByZXR1cm4gcmVwbHksIG5pbAorLSAgICAgICAgZW5k CistCistICAgICAgICBkZWYgc2VuZGVyKG1zZywgZGF0YSwgaG9zdD1AaG9zdCwgcG9ydD1AcG9y dCkKKy0gICAgICAgICAgbGF6eV9pbml0aWFsaXplCistICAgICAgICAgIHVubGVzcyBob3N0ID09 IEBob3N0ICYmIHBvcnQgPT0gQHBvcnQKKy0gICAgICAgICAgICByYWlzZSBSZXF1ZXN0RXJyb3Iu bmV3KCJob3N0L3BvcnQgZG9uJ3QgbWF0Y2g6ICN7aG9zdH06I3twb3J0fSIpCistICAgICAgICAg IGVuZAorLSAgICAgICAgICBpZCA9IEROUy5hbGxvY2F0ZV9yZXF1ZXN0X2lkKEBob3N0LCBAcG9y dCkKKy0gICAgICAgICAgcmVxdWVzdCA9IG1zZy5lbmNvZGUKKy0gICAgICAgICAgcmVxdWVzdFsw LDJdID0gW2lkXS5wYWNrKCduJykKKy0gICAgICAgICAgcmV0dXJuIEBzZW5kZXJzW1tuaWwsaWRd XSA9IFNlbmRlci5uZXcocmVxdWVzdCwgZGF0YSwgQHNvY2tzWzBdKQorLSAgICAgICAgZW5kCist CistICAgICAgICBkZWYgY2xvc2UKKy0gICAgICAgICAgQG11dGV4LnN5bmNocm9uaXplIGRvCist ICAgICAgICAgICAgaWYgQGluaXRpYWxpemVkCistICAgICAgICAgICAgICBzdXBlcgorLSAgICAg ICAgICAgICAgQHNlbmRlcnMuZWFjaF9rZXkge3xmcm9tLCBpZHwKKy0gICAgICAgICAgICAgICAg RE5TLmZyZWVfcmVxdWVzdF9pZChAaG9zdCwgQHBvcnQsIGlkKQorLSAgICAgICAgICAgICAgfQor LSAgICAgICAgICAgICAgQGluaXRpYWxpemVkID0gZmFsc2UKKy0gICAgICAgICAgICBlbmQKKy0g ICAgICAgICAgZW5kCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGNsYXNzIFNlbmRlciA8IFJl cXVlc3Rlcjo6U2VuZGVyICMgOm5vZG9jOgorLSAgICAgICAgICBkZWYgc2VuZAorLSAgICAgICAg ICAgIHJhaXNlICJAc29jayBpcyBuaWwuIiBpZiBAc29jay5uaWw/CistICAgICAgICAgICAgQHNv Y2suc2VuZChAbXNnLCAwKQorLSAgICAgICAgICBlbmQKKy0gICAgICAgICAgYXR0cl9yZWFkZXIg OmRhdGEKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLQorLSAgICAgIGNsYXNzIE1ETlNPbmVT aG90IDwgVW5jb25uZWN0ZWRVRFAgIyA6bm9kb2M6CistICAgICAgICBkZWYgc2VuZGVyKG1zZywg ZGF0YSwgaG9zdCwgcG9ydD1Qb3J0KQorLSAgICAgICAgICBsYXp5X2luaXRpYWxpemUKKy0gICAg ICAgICAgaWQgPSBETlMuYWxsb2NhdGVfcmVxdWVzdF9pZChob3N0LCBwb3J0KQorLSAgICAgICAg ICByZXF1ZXN0ID0gbXNnLmVuY29kZQorLSAgICAgICAgICByZXF1ZXN0WzAsMl0gPSBbaWRdLnBh Y2soJ24nKQorLSAgICAgICAgICBzb2NrID0gQHNvY2tzX2hhc2hbaG9zdC5pbmRleCgnOicpID8g Ijo6IiA6ICIwLjAuMC4wIl0KKy0gICAgICAgICAgcmV0dXJuIEBzZW5kZXJzW2lkXSA9CistICAg ICAgICAgICAgVW5jb25uZWN0ZWRVRFA6OlNlbmRlci5uZXcocmVxdWVzdCwgZGF0YSwgc29jaywg aG9zdCwgcG9ydCkKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHNlbmRlcl9mb3IoYWRk ciwgbXNnKQorLSAgICAgICAgICBsYXp5X2luaXRpYWxpemUKKy0gICAgICAgICAgQHNlbmRlcnNb bXNnLmlkXQorLSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgY2xhc3MgVENQIDwg UmVxdWVzdGVyICMgOm5vZG9jOgorLSAgICAgICAgZGVmIGluaXRpYWxpemUoaG9zdCwgcG9ydD1Q b3J0KQorLSAgICAgICAgICBzdXBlcigpCistICAgICAgICAgIEBob3N0ID0gaG9zdAorLSAgICAg ICAgICBAcG9ydCA9IHBvcnQKKy0gICAgICAgICAgc29jayA9IFRDUFNvY2tldC5uZXcoQGhvc3Qs IEBwb3J0KQorLSAgICAgICAgICBAc29ja3MgPSBbc29ja10KKy0gICAgICAgICAgQHNlbmRlcnMg PSB7fQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgcmVjdl9yZXBseShyZWFkYWJsZV9z b2NrcykKKy0gICAgICAgICAgbGVuID0gcmVhZGFibGVfc29ja3NbMF0ucmVhZCgyKS51bnBhY2so J24nKVswXQorLSAgICAgICAgICByZXBseSA9IEBzb2Nrc1swXS5yZWFkKGxlbikKKy0gICAgICAg ICAgcmV0dXJuIHJlcGx5LCBuaWwKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHNlbmRl cihtc2csIGRhdGEsIGhvc3Q9QGhvc3QsIHBvcnQ9QHBvcnQpCistICAgICAgICAgIHVubGVzcyBo b3N0ID09IEBob3N0ICYmIHBvcnQgPT0gQHBvcnQKKy0gICAgICAgICAgICByYWlzZSBSZXF1ZXN0 RXJyb3IubmV3KCJob3N0L3BvcnQgZG9uJ3QgbWF0Y2g6ICN7aG9zdH06I3twb3J0fSIpCistICAg ICAgICAgIGVuZAorLSAgICAgICAgICBpZCA9IEROUy5hbGxvY2F0ZV9yZXF1ZXN0X2lkKEBob3N0 LCBAcG9ydCkKKy0gICAgICAgICAgcmVxdWVzdCA9IG1zZy5lbmNvZGUKKy0gICAgICAgICAgcmVx dWVzdFswLDJdID0gW3JlcXVlc3QubGVuZ3RoLCBpZF0ucGFjaygnbm4nKQorLSAgICAgICAgICBy ZXR1cm4gQHNlbmRlcnNbW25pbCxpZF1dID0gU2VuZGVyLm5ldyhyZXF1ZXN0LCBkYXRhLCBAc29j a3NbMF0pCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGNsYXNzIFNlbmRlciA8IFJlcXVlc3Rl cjo6U2VuZGVyICMgOm5vZG9jOgorLSAgICAgICAgICBkZWYgc2VuZAorLSAgICAgICAgICAgIEBz b2NrLnByaW50KEBtc2cpCistICAgICAgICAgICAgQHNvY2suZmx1c2gKKy0gICAgICAgICAgZW5k CistICAgICAgICAgIGF0dHJfcmVhZGVyIDpkYXRhCistICAgICAgICBlbmQKKy0KKy0gICAgICAg IGRlZiBjbG9zZQorLSAgICAgICAgICBzdXBlcgorLSAgICAgICAgICBAc2VuZGVycy5lYWNoX2tl eSB7fGZyb20saWR8CistICAgICAgICAgICAgRE5TLmZyZWVfcmVxdWVzdF9pZChAaG9zdCwgQHBv cnQsIGlkKQorLSAgICAgICAgICB9CistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAg ICAjIworLSAgICAgICMgSW5kaWNhdGVzIGEgcHJvYmxlbSB3aXRoIHRoZSBETlMgcmVxdWVzdC4K Ky0KKy0gICAgICBjbGFzcyBSZXF1ZXN0RXJyb3IgPCBTdGFuZGFyZEVycm9yCistICAgICAgZW5k CistICAgIGVuZAorLQorLSAgICBjbGFzcyBDb25maWcgIyA6bm9kb2M6CistICAgICAgZGVmIGlu aXRpYWxpemUoY29uZmlnX2luZm89bmlsKQorLSAgICAgICAgQG11dGV4ID0gVGhyZWFkOjpNdXRl eC5uZXcKKy0gICAgICAgIEBjb25maWdfaW5mbyA9IGNvbmZpZ19pbmZvCistICAgICAgICBAaW5p dGlhbGl6ZWQgPSBuaWwKKy0gICAgICAgIEB0aW1lb3V0cyA9IG5pbAorLSAgICAgIGVuZAorLQor LSAgICAgIGRlZiB0aW1lb3V0cz0odmFsdWVzKQorLSAgICAgICAgaWYgdmFsdWVzCistICAgICAg ICAgIHZhbHVlcyA9IEFycmF5KHZhbHVlcykKKy0gICAgICAgICAgdmFsdWVzLmVhY2ggZG8gfHR8 CistICAgICAgICAgICAgTnVtZXJpYyA9PT0gdCBvciByYWlzZSBBcmd1bWVudEVycm9yLCAiI3t0 Lmluc3BlY3R9IGlzIG5vdCBudW1lcmljIgorLSAgICAgICAgICAgIHQgPiAwLjAgb3IgcmFpc2Ug QXJndW1lbnRFcnJvciwgInRpbWVvdXQ9I3t0fSBtdXN0IGJlIHBvc2l0aXZlIgorLSAgICAgICAg ICBlbmQKKy0gICAgICAgICAgQHRpbWVvdXRzID0gdmFsdWVzCistICAgICAgICBlbHNlCistICAg ICAgICAgIEB0aW1lb3V0cyA9IG5pbAorLSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAg ICAgZGVmIENvbmZpZy5wYXJzZV9yZXNvbHZfY29uZihmaWxlbmFtZSkKKy0gICAgICAgIG5hbWVz ZXJ2ZXIgPSBbXQorLSAgICAgICAgc2VhcmNoID0gbmlsCistICAgICAgICBuZG90cyA9IDEKKy0g ICAgICAgIEZpbGUub3BlbihmaWxlbmFtZSwgJ3JiJykge3xmfAorLSAgICAgICAgICBmLmVhY2gg e3xsaW5lfAorLSAgICAgICAgICAgIGxpbmUuc3ViISgvWyM7XS4qLywgJycpCistICAgICAgICAg ICAga2V5d29yZCwgKmFyZ3MgPSBsaW5lLnNwbGl0KC9ccysvKQorLSAgICAgICAgICAgIG5leHQg dW5sZXNzIGtleXdvcmQKKy0gICAgICAgICAgICBjYXNlIGtleXdvcmQKKy0gICAgICAgICAgICB3 aGVuICduYW1lc2VydmVyJworLSAgICAgICAgICAgICAgbmFtZXNlcnZlci5jb25jYXQoYXJncy5l YWNoKCY6ZnJlZXplKSkKKy0gICAgICAgICAgICB3aGVuICdkb21haW4nCistICAgICAgICAgICAg ICBuZXh0IGlmIGFyZ3MuZW1wdHk/CistICAgICAgICAgICAgICBzZWFyY2ggPSBbYXJnc1swXS5m cmVlemVdCistICAgICAgICAgICAgd2hlbiAnc2VhcmNoJworLSAgICAgICAgICAgICAgbmV4dCBp ZiBhcmdzLmVtcHR5PworLSAgICAgICAgICAgICAgc2VhcmNoID0gYXJncy5lYWNoKCY6ZnJlZXpl KQorLSAgICAgICAgICAgIHdoZW4gJ29wdGlvbnMnCistICAgICAgICAgICAgICBhcmdzLmVhY2gg e3xhcmd8CistICAgICAgICAgICAgICAgIGNhc2UgYXJnCistICAgICAgICAgICAgICAgIHdoZW4g L1xBbmRvdHM6KFxkKylcei8KKy0gICAgICAgICAgICAgICAgICBuZG90cyA9ICQxLnRvX2kKKy0g ICAgICAgICAgICAgICAgZW5kCistICAgICAgICAgICAgICB9CistICAgICAgICAgICAgZW5kCist ICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIHJldHVybiB7IDpuYW1lc2VydmVyID0+ IG5hbWVzZXJ2ZXIuZnJlZXplLCA6c2VhcmNoID0+IHNlYXJjaC5mcmVlemUsIDpuZG90cyA9PiBu ZG90cy5mcmVlemUgfS5mcmVlemUKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgQ29uZmlnLmRl ZmF1bHRfY29uZmlnX2hhc2goZmlsZW5hbWU9Ii9ldGMvcmVzb2x2LmNvbmYiKQorLSAgICAgICAg aWYgRmlsZS5leGlzdD8gZmlsZW5hbWUKKy0gICAgICAgICAgQ29uZmlnLnBhcnNlX3Jlc29sdl9j b25mKGZpbGVuYW1lKQorLSAgICAgICAgZWxzaWYgZGVmaW5lZD8oV2luMzI6OlJlc29sdikKKy0g ICAgICAgICAgc2VhcmNoLCBuYW1lc2VydmVyID0gV2luMzI6OlJlc29sdi5nZXRfcmVzb2x2X2lu Zm8KKy0gICAgICAgICAgY29uZmlnX2hhc2ggPSB7fQorLSAgICAgICAgICBjb25maWdfaGFzaFs6 bmFtZXNlcnZlcl0gPSBuYW1lc2VydmVyIGlmIG5hbWVzZXJ2ZXIKKy0gICAgICAgICAgY29uZmln X2hhc2hbOnNlYXJjaF0gPSBbc2VhcmNoXS5mbGF0dGVuIGlmIHNlYXJjaAorLSAgICAgICAgICBj b25maWdfaGFzaAorLSAgICAgICAgZWxzZQorLSAgICAgICAgICB7fQorLSAgICAgICAgZW5kCist ICAgICAgZW5kCistCistICAgICAgZGVmIGxhenlfaW5pdGlhbGl6ZQorLSAgICAgICAgQG11dGV4 LnN5bmNocm9uaXplIHsKKy0gICAgICAgICAgdW5sZXNzIEBpbml0aWFsaXplZAorLSAgICAgICAg ICAgIEBuYW1lc2VydmVyX3BvcnQgPSBbXQorLSAgICAgICAgICAgIEB1c2VfaXB2NiA9IG5pbAor LSAgICAgICAgICAgIEBzZWFyY2ggPSBuaWwKKy0gICAgICAgICAgICBAbmRvdHMgPSAxCistICAg ICAgICAgICAgY2FzZSBAY29uZmlnX2luZm8KKy0gICAgICAgICAgICB3aGVuIG5pbAorLSAgICAg ICAgICAgICAgY29uZmlnX2hhc2ggPSBDb25maWcuZGVmYXVsdF9jb25maWdfaGFzaAorLSAgICAg ICAgICAgIHdoZW4gU3RyaW5nCistICAgICAgICAgICAgICBjb25maWdfaGFzaCA9IENvbmZpZy5w YXJzZV9yZXNvbHZfY29uZihAY29uZmlnX2luZm8pCistICAgICAgICAgICAgd2hlbiBIYXNoCist ICAgICAgICAgICAgICBjb25maWdfaGFzaCA9IEBjb25maWdfaW5mby5kdXAKKy0gICAgICAgICAg ICAgIGlmIFN0cmluZyA9PT0gY29uZmlnX2hhc2hbOm5hbWVzZXJ2ZXJdCistICAgICAgICAgICAg ICAgIGNvbmZpZ19oYXNoWzpuYW1lc2VydmVyXSA9IFtjb25maWdfaGFzaFs6bmFtZXNlcnZlcl1d CistICAgICAgICAgICAgICBlbmQKKy0gICAgICAgICAgICAgIGlmIFN0cmluZyA9PT0gY29uZmln X2hhc2hbOnNlYXJjaF0KKy0gICAgICAgICAgICAgICAgY29uZmlnX2hhc2hbOnNlYXJjaF0gPSBb Y29uZmlnX2hhc2hbOnNlYXJjaF1dCistICAgICAgICAgICAgICBlbmQKKy0gICAgICAgICAgICBl bHNlCistICAgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLm5ldygiaW52YWxpZCByZXNv bHYgY29uZmlndXJhdGlvbjogI3tAY29uZmlnX2luZm8uaW5zcGVjdH0iKQorLSAgICAgICAgICAg IGVuZAorLSAgICAgICAgICAgIGlmIGNvbmZpZ19oYXNoLmluY2x1ZGU/IDpuYW1lc2VydmVyCist ICAgICAgICAgICAgICBAbmFtZXNlcnZlcl9wb3J0ID0gY29uZmlnX2hhc2hbOm5hbWVzZXJ2ZXJd Lm1hcCB7fG5zfCBbbnMsIFBvcnRdIH0KKy0gICAgICAgICAgICBlbmQKKy0gICAgICAgICAgICBp ZiBjb25maWdfaGFzaC5pbmNsdWRlPyA6bmFtZXNlcnZlcl9wb3J0CistICAgICAgICAgICAgICBA bmFtZXNlcnZlcl9wb3J0ID0gY29uZmlnX2hhc2hbOm5hbWVzZXJ2ZXJfcG9ydF0ubWFwIHt8bnMs IHBvcnR8IFtucywgKHBvcnQgfHwgUG9ydCldIH0KKy0gICAgICAgICAgICBlbmQKKy0gICAgICAg ICAgICBpZiBjb25maWdfaGFzaC5pbmNsdWRlPyA6dXNlX2lwdjYKKy0gICAgICAgICAgICAgIEB1 c2VfaXB2NiA9IGNvbmZpZ19oYXNoWzp1c2VfaXB2Nl0KKy0gICAgICAgICAgICBlbmQKKy0gICAg ICAgICAgICBAc2VhcmNoID0gY29uZmlnX2hhc2hbOnNlYXJjaF0gaWYgY29uZmlnX2hhc2guaW5j bHVkZT8gOnNlYXJjaAorLSAgICAgICAgICAgIEBuZG90cyA9IGNvbmZpZ19oYXNoWzpuZG90c10g aWYgY29uZmlnX2hhc2guaW5jbHVkZT8gOm5kb3RzCistICAgICAgICAgICAgQHJhaXNlX3RpbWVv dXRfZXJyb3JzID0gY29uZmlnX2hhc2hbOnJhaXNlX3RpbWVvdXRfZXJyb3JzXQorLQorLSAgICAg ICAgICAgIGlmIEBuYW1lc2VydmVyX3BvcnQuZW1wdHk/CistICAgICAgICAgICAgICBAbmFtZXNl cnZlcl9wb3J0IDw8IFsnMC4wLjAuMCcsIFBvcnRdCistICAgICAgICAgICAgZW5kCistICAgICAg ICAgICAgaWYgQHNlYXJjaAorLSAgICAgICAgICAgICAgQHNlYXJjaCA9IEBzZWFyY2gubWFwIHt8 YXJnfCBMYWJlbC5zcGxpdChhcmcpIH0KKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAg ICBob3N0bmFtZSA9IFNvY2tldC5nZXRob3N0bmFtZQorLSAgICAgICAgICAgICAgaWYgL1wuLyA9 fiBob3N0bmFtZQorLSAgICAgICAgICAgICAgICBAc2VhcmNoID0gW0xhYmVsLnNwbGl0KCQnKV0K Ky0gICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgQHNlYXJjaCA9IFtbXV0KKy0g ICAgICAgICAgICAgIGVuZAorLSAgICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICAgIGlmICFA bmFtZXNlcnZlcl9wb3J0LmtpbmRfb2Y/KEFycmF5KSB8fAorLSAgICAgICAgICAgICAgIEBuYW1l c2VydmVyX3BvcnQuYW55PyB7fG5zX3BvcnR8CistICAgICAgICAgICAgICAgICAgIShBcnJheSA9 PT0gbnNfcG9ydCkgfHwKKy0gICAgICAgICAgICAgICAgICBuc19wb3J0Lmxlbmd0aCAhPSAyCist ICAgICAgICAgICAgICAgICAgIShTdHJpbmcgPT09IG5zX3BvcnRbMF0pIHx8CistICAgICAgICAg ICAgICAgICAgIShJbnRlZ2VyID09PSBuc19wb3J0WzFdKQorLSAgICAgICAgICAgICAgIH0KKy0g ICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IubmV3KCJpbnZhbGlkIG5hbWVzZXJ2ZXIg Y29uZmlnOiAje0BuYW1lc2VydmVyX3BvcnQuaW5zcGVjdH0iKQorLSAgICAgICAgICAgIGVuZAor LQorLSAgICAgICAgICAgIGlmICFAc2VhcmNoLmtpbmRfb2Y/KEFycmF5KSB8fAorLSAgICAgICAg ICAgICAgICFAc2VhcmNoLmFsbD8ge3xsc3wgbHMuYWxsPyB7fGx8IExhYmVsOjpTdHIgPT09IGwg fSB9CistICAgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLm5ldygiaW52YWxpZCBzZWFy Y2ggY29uZmlnOiAje0BzZWFyY2guaW5zcGVjdH0iKQorLSAgICAgICAgICAgIGVuZAorLQorLSAg ICAgICAgICAgIGlmICFAbmRvdHMua2luZF9vZj8oSW50ZWdlcikKKy0gICAgICAgICAgICAgIHJh aXNlIEFyZ3VtZW50RXJyb3IubmV3KCJpbnZhbGlkIG5kb3RzIGNvbmZpZzogI3tAbmRvdHMuaW5z cGVjdH0iKQorLSAgICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICAgIEBpbml0aWFsaXplZCA9 IHRydWUKKy0gICAgICAgICAgZW5kCistICAgICAgICB9CistICAgICAgICBzZWxmCistICAgICAg ZW5kCistCistICAgICAgZGVmIHNpbmdsZT8KKy0gICAgICAgIGxhenlfaW5pdGlhbGl6ZQorLSAg ICAgICAgaWYgQG5hbWVzZXJ2ZXJfcG9ydC5sZW5ndGggPT0gMQorLSAgICAgICAgICByZXR1cm4g QG5hbWVzZXJ2ZXJfcG9ydFswXQorLSAgICAgICAgZWxzZQorLSAgICAgICAgICByZXR1cm4gbmls CistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgbmFtZXNlcnZlcl9wb3J0 CistICAgICAgICBAbmFtZXNlcnZlcl9wb3J0CistICAgICAgZW5kCistCistICAgICAgZGVmIHVz ZV9pcHY2PworLSAgICAgICAgQHVzZV9pcHY2CistICAgICAgZW5kCistCistICAgICAgZGVmIGdl bmVyYXRlX2NhbmRpZGF0ZXMobmFtZSkKKy0gICAgICAgIGNhbmRpZGF0ZXMgPSBuaWwKKy0gICAg ICAgIG5hbWUgPSBOYW1lLmNyZWF0ZShuYW1lKQorLSAgICAgICAgaWYgbmFtZS5hYnNvbHV0ZT8K Ky0gICAgICAgICAgY2FuZGlkYXRlcyA9IFtuYW1lXQorLSAgICAgICAgZWxzZQorLSAgICAgICAg ICBpZiBAbmRvdHMgPD0gbmFtZS5sZW5ndGggLSAxCistICAgICAgICAgICAgY2FuZGlkYXRlcyA9 IFtOYW1lLm5ldyhuYW1lLnRvX2EpXQorLSAgICAgICAgICBlbHNlCistICAgICAgICAgICAgY2Fu ZGlkYXRlcyA9IFtdCistICAgICAgICAgIGVuZAorLSAgICAgICAgICBjYW5kaWRhdGVzLmNvbmNh dChAc2VhcmNoLm1hcCB7fGRvbWFpbnwgTmFtZS5uZXcobmFtZS50b19hICsgZG9tYWluKX0pCist ICAgICAgICAgIGZuYW1lID0gTmFtZS5jcmVhdGUoIiN7bmFtZX0uIikKKy0gICAgICAgICAgaWYg IWNhbmRpZGF0ZXMuaW5jbHVkZT8oZm5hbWUpCistICAgICAgICAgICAgY2FuZGlkYXRlcyA8PCBm bmFtZQorLSAgICAgICAgICBlbmQKKy0gICAgICAgIGVuZAorLSAgICAgICAgcmV0dXJuIGNhbmRp ZGF0ZXMKKy0gICAgICBlbmQKKy0KKy0gICAgICBJbml0aWFsVGltZW91dCA9IDUKKy0KKy0gICAg ICBkZWYgZ2VuZXJhdGVfdGltZW91dHMKKy0gICAgICAgIHRzID0gW0luaXRpYWxUaW1lb3V0XQor LSAgICAgICAgdHMgPDwgdHNbLTFdICogMiAvIEBuYW1lc2VydmVyX3BvcnQubGVuZ3RoCistICAg ICAgICB0cyA8PCB0c1stMV0gKiAyCistICAgICAgICB0cyA8PCB0c1stMV0gKiAyCistICAgICAg ICByZXR1cm4gdHMKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgcmVzb2x2KG5hbWUpCistICAg ICAgICBjYW5kaWRhdGVzID0gZ2VuZXJhdGVfY2FuZGlkYXRlcyhuYW1lKQorLSAgICAgICAgdGlt ZW91dHMgPSBAdGltZW91dHMgfHwgZ2VuZXJhdGVfdGltZW91dHMKKy0gICAgICAgIHRpbWVvdXRf ZXJyb3IgPSBmYWxzZQorLSAgICAgICAgYmVnaW4KKy0gICAgICAgICAgY2FuZGlkYXRlcy5lYWNo IHt8Y2FuZGlkYXRlfAorLSAgICAgICAgICAgIGJlZ2luCistICAgICAgICAgICAgICB0aW1lb3V0 cy5lYWNoIHt8dG91dHwKKy0gICAgICAgICAgICAgICAgQG5hbWVzZXJ2ZXJfcG9ydC5lYWNoIHt8 bmFtZXNlcnZlciwgcG9ydHwKKy0gICAgICAgICAgICAgICAgICBiZWdpbgorLSAgICAgICAgICAg ICAgICAgICAgeWllbGQgY2FuZGlkYXRlLCB0b3V0LCBuYW1lc2VydmVyLCBwb3J0CistICAgICAg ICAgICAgICAgICAgcmVzY3VlIFJlc29sdlRpbWVvdXQKKy0gICAgICAgICAgICAgICAgICBlbmQK Ky0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgdGlt ZW91dF9lcnJvciA9IHRydWUKKy0gICAgICAgICAgICAgIHJhaXNlIFJlc29sdkVycm9yLm5ldygi RE5TIHJlc29sdiB0aW1lb3V0OiAje25hbWV9IikKKy0gICAgICAgICAgICByZXNjdWUgTlhEb21h aW4KKy0gICAgICAgICAgICBlbmQKKy0gICAgICAgICAgfQorLSAgICAgICAgcmVzY3VlIFJlc29s dkVycm9yCistICAgICAgICAgIHJhaXNlIGlmIEByYWlzZV90aW1lb3V0X2Vycm9ycyAmJiB0aW1l b3V0X2Vycm9yCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAg ICMgSW5kaWNhdGVzIG5vIHN1Y2ggZG9tYWluIHdhcyBmb3VuZC4KKy0KKy0gICAgICBjbGFzcyBO WERvbWFpbiA8IFJlc29sdkVycm9yCistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAj IEluZGljYXRlcyBzb21lIG90aGVyIHVuaGFuZGxlZCByZXNvbHZlciBlcnJvciB3YXMgZW5jb3Vu dGVyZWQuCistCistICAgICAgY2xhc3MgT3RoZXJSZXNvbHZFcnJvciA8IFJlc29sdkVycm9yCist ICAgICAgZW5kCistICAgIGVuZAorLQorLSAgICBtb2R1bGUgT3BDb2RlICMgOm5vZG9jOgorLSAg ICAgIFF1ZXJ5ID0gMAorLSAgICAgIElRdWVyeSA9IDEKKy0gICAgICBTdGF0dXMgPSAyCistICAg ICAgTm90aWZ5ID0gNAorLSAgICAgIFVwZGF0ZSA9IDUKKy0gICAgZW5kCistCistICAgIG1vZHVs ZSBSQ29kZSAjIDpub2RvYzoKKy0gICAgICBOb0Vycm9yID0gMAorLSAgICAgIEZvcm1FcnIgPSAx CistICAgICAgU2VydkZhaWwgPSAyCistICAgICAgTlhEb21haW4gPSAzCistICAgICAgTm90SW1w ID0gNAorLSAgICAgIFJlZnVzZWQgPSA1CistICAgICAgWVhEb21haW4gPSA2CistICAgICAgWVhS UlNldCA9IDcKKy0gICAgICBOWFJSU2V0ID0gOAorLSAgICAgIE5vdEF1dGggPSA5CistICAgICAg Tm90Wm9uZSA9IDEwCistICAgICAgQkFEVkVSUyA9IDE2CistICAgICAgQkFEU0lHID0gMTYKKy0g ICAgICBCQURLRVkgPSAxNworLSAgICAgIEJBRFRJTUUgPSAxOAorLSAgICAgIEJBRE1PREUgPSAx OQorLSAgICAgIEJBRE5BTUUgPSAyMAorLSAgICAgIEJBREFMRyA9IDIxCistICAgIGVuZAorLQor LSAgICAjIworLSAgICAjIEluZGljYXRlcyB0aGF0IHRoZSBETlMgcmVzcG9uc2Ugd2FzIHVuYWJs ZSB0byBiZSBkZWNvZGVkLgorLQorLSAgICBjbGFzcyBEZWNvZGVFcnJvciA8IFN0YW5kYXJkRXJy b3IKKy0gICAgZW5kCistCistICAgICMjCistICAgICMgSW5kaWNhdGVzIHRoYXQgdGhlIEROUyBy ZXF1ZXN0IHdhcyB1bmFibGUgdG8gYmUgZW5jb2RlZC4KKy0KKy0gICAgY2xhc3MgRW5jb2RlRXJy b3IgPCBTdGFuZGFyZEVycm9yCistICAgIGVuZAorLQorLSAgICBtb2R1bGUgTGFiZWwgIyA6bm9k b2M6CistICAgICAgZGVmIHNlbGYuc3BsaXQoYXJnKQorLSAgICAgICAgbGFiZWxzID0gW10KKy0g ICAgICAgIGFyZy5zY2FuKC9bXlwuXSsvKSB7bGFiZWxzIDw8IFN0ci5uZXcoJCYpfQorLSAgICAg ICAgcmV0dXJuIGxhYmVscworLSAgICAgIGVuZAorLQorLSAgICAgIGNsYXNzIFN0ciAjIDpub2Rv YzoKKy0gICAgICAgIGRlZiBpbml0aWFsaXplKHN0cmluZykKKy0gICAgICAgICAgQHN0cmluZyA9 IHN0cmluZworLSAgICAgICAgICAjIGNhc2UgaW5zZW5zaXZpdHkgb2YgRE5TIGxhYmVscyBkb2Vz bid0IGFwcGx5IG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiBbUkZDIDQzNDNdCistICAgICAgICAgICMg VGhpcyBhc3N1bWVzIEBzdHJpbmcgaXMgZ2l2ZW4gaW4gQVNDSUkgY29tcGF0aWJsZSBlbmNvZGlu Zy4KKy0gICAgICAgICAgQGRvd25jYXNlID0gc3RyaW5nLmIuZG93bmNhc2UKKy0gICAgICAgIGVu ZAorLSAgICAgICAgYXR0cl9yZWFkZXIgOnN0cmluZywgOmRvd25jYXNlCistCistICAgICAgICBk ZWYgdG9fcworLSAgICAgICAgICByZXR1cm4gQHN0cmluZworLSAgICAgICAgZW5kCistCistICAg ICAgICBkZWYgaW5zcGVjdAorLSAgICAgICAgICByZXR1cm4gIiM8I3tzZWxmLmNsYXNzfSAje3Nl bGZ9PiIKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmID09KG90aGVyKQorLSAgICAgICAg ICByZXR1cm4gc2VsZi5jbGFzcyA9PSBvdGhlci5jbGFzcyAmJiBAZG93bmNhc2UgPT0gb3RoZXIu ZG93bmNhc2UKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIGVxbD8ob3RoZXIpCistICAg ICAgICAgIHJldHVybiBzZWxmID09IG90aGVyCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRl ZiBoYXNoCistICAgICAgICAgIHJldHVybiBAZG93bmNhc2UuaGFzaAorLSAgICAgICAgZW5kCist ICAgICAgZW5kCistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIEEgcmVwcmVzZW50YXRpb24g b2YgYSBETlMgbmFtZS4KKy0KKy0gICAgY2xhc3MgTmFtZQorLQorLSAgICAgICMjCistICAgICAg IyBDcmVhdGVzIGEgbmV3IEROUyBuYW1lIGZyb20gK2FyZysuICArYXJnKyBjYW4gYmU6CistICAg ICAgIworLSAgICAgICMgTmFtZTo6IHJldHVybnMgK2FyZysuCistICAgICAgIyBTdHJpbmc6OiBD cmVhdGVzIGEgbmV3IE5hbWUuCistCistICAgICAgZGVmIHNlbGYuY3JlYXRlKGFyZykKKy0gICAg ICAgIGNhc2UgYXJnCistICAgICAgICB3aGVuIE5hbWUKKy0gICAgICAgICAgcmV0dXJuIGFyZwor LSAgICAgICAgd2hlbiBTdHJpbmcKKy0gICAgICAgICAgcmV0dXJuIE5hbWUubmV3KExhYmVsLnNw bGl0KGFyZyksIC9cLlx6LyA9fiBhcmcgPyB0cnVlIDogZmFsc2UpCistICAgICAgICBlbHNlCist ICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IubmV3KCJjYW5ub3QgaW50ZXJwcmV0IGFzIERO UyBuYW1lOiAje2FyZy5pbnNwZWN0fSIpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0g ICAgICBkZWYgaW5pdGlhbGl6ZShsYWJlbHMsIGFic29sdXRlPXRydWUpICMgOm5vZG9jOgorLSAg ICAgICAgbGFiZWxzID0gbGFiZWxzLm1hcCB7fGxhYmVsfAorLSAgICAgICAgICBjYXNlIGxhYmVs CistICAgICAgICAgIHdoZW4gU3RyaW5nIHRoZW4gTGFiZWw6OlN0ci5uZXcobGFiZWwpCistICAg ICAgICAgIHdoZW4gTGFiZWw6OlN0ciB0aGVuIGxhYmVsCistICAgICAgICAgIGVsc2UKKy0gICAg ICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLCAidW5leHBlY3RlZCBsYWJlbDogI3tsYWJlbC5p bnNwZWN0fSIKKy0gICAgICAgICAgZW5kCistICAgICAgICB9CistICAgICAgICBAbGFiZWxzID0g bGFiZWxzCistICAgICAgICBAYWJzb2x1dGUgPSBhYnNvbHV0ZQorLSAgICAgIGVuZAorLQorLSAg ICAgIGRlZiBpbnNwZWN0ICMgOm5vZG9jOgorLSAgICAgICAgIiM8I3tzZWxmLmNsYXNzfTogI3tz ZWxmfSN7QGFic29sdXRlID8gJy4nIDogJyd9PiIKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIwor LSAgICAgICMgVHJ1ZSBpZiB0aGlzIG5hbWUgaXMgYWJzb2x1dGUuCistCistICAgICAgZGVmIGFi c29sdXRlPworLSAgICAgICAgcmV0dXJuIEBhYnNvbHV0ZQorLSAgICAgIGVuZAorLQorLSAgICAg IGRlZiA9PShvdGhlcikgIyA6bm9kb2M6CistICAgICAgICByZXR1cm4gZmFsc2UgdW5sZXNzIE5h bWUgPT09IG90aGVyCistICAgICAgICByZXR1cm4gZmFsc2UgdW5sZXNzIEBhYnNvbHV0ZSA9PSBv dGhlci5hYnNvbHV0ZT8KKy0gICAgICAgIHJldHVybiBAbGFiZWxzID09IG90aGVyLnRvX2EKKy0g ICAgICBlbmQKKy0KKy0gICAgICBhbGlhcyBlcWw/ID09ICMgOm5vZG9jOgorLQorLSAgICAgICMj CistICAgICAgIyBSZXR1cm5zIHRydWUgaWYgK290aGVyKyBpcyBhIHN1YmRvbWFpbi4KKy0gICAg ICAjCistICAgICAgIyBFeGFtcGxlOgorLSAgICAgICMKKy0gICAgICAjICAgZG9tYWluID0gR2Vt OjpSZXNvbHY6OkROUzo6TmFtZS5jcmVhdGUoInkueiIpCistICAgICAgIyAgIHAgR2VtOjpSZXNv bHY6OkROUzo6TmFtZS5jcmVhdGUoIncueC55LnoiKS5zdWJkb21haW5fb2Y/KGRvbWFpbikgIz0+ IHRydWUKKy0gICAgICAjICAgcCBHZW06OlJlc29sdjo6RE5TOjpOYW1lLmNyZWF0ZSgieC55Lnoi KS5zdWJkb21haW5fb2Y/KGRvbWFpbikgIz0+IHRydWUKKy0gICAgICAjICAgcCBHZW06OlJlc29s djo6RE5TOjpOYW1lLmNyZWF0ZSgieS56Iikuc3ViZG9tYWluX29mPyhkb21haW4pICM9PiBmYWxz ZQorLSAgICAgICMgICBwIEdlbTo6UmVzb2x2OjpETlM6Ok5hbWUuY3JlYXRlKCJ6Iikuc3ViZG9t YWluX29mPyhkb21haW4pICM9PiBmYWxzZQorLSAgICAgICMgICBwIEdlbTo6UmVzb2x2OjpETlM6 Ok5hbWUuY3JlYXRlKCJ4Lnkuei4iKS5zdWJkb21haW5fb2Y/KGRvbWFpbikgIz0+IGZhbHNlCist ICAgICAgIyAgIHAgR2VtOjpSZXNvbHY6OkROUzo6TmFtZS5jcmVhdGUoIncueiIpLnN1YmRvbWFp bl9vZj8oZG9tYWluKSAjPT4gZmFsc2UKKy0gICAgICAjCistCistICAgICAgZGVmIHN1YmRvbWFp bl9vZj8ob3RoZXIpCistICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLCAibm90IGEgZG9tYWlu IG5hbWU6ICN7b3RoZXIuaW5zcGVjdH0iIHVubGVzcyBOYW1lID09PSBvdGhlcgorLSAgICAgICAg cmV0dXJuIGZhbHNlIGlmIEBhYnNvbHV0ZSAhPSBvdGhlci5hYnNvbHV0ZT8KKy0gICAgICAgIG90 aGVyX2xlbiA9IG90aGVyLmxlbmd0aAorLSAgICAgICAgcmV0dXJuIGZhbHNlIGlmIEBsYWJlbHMu bGVuZ3RoIDw9IG90aGVyX2xlbgorLSAgICAgICAgcmV0dXJuIEBsYWJlbHNbLW90aGVyX2xlbiwg b3RoZXJfbGVuXSA9PSBvdGhlci50b19hCistICAgICAgZW5kCistCistICAgICAgZGVmIGhhc2gg IyA6bm9kb2M6CistICAgICAgICByZXR1cm4gQGxhYmVscy5oYXNoIF4gQGFic29sdXRlLmhhc2gK Ky0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgdG9fYSAjIDpub2RvYzoKKy0gICAgICAgIHJldHVy biBAbGFiZWxzCistICAgICAgZW5kCistCistICAgICAgZGVmIGxlbmd0aCAjIDpub2RvYzoKKy0g ICAgICAgIHJldHVybiBAbGFiZWxzLmxlbmd0aAorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBb XShpKSAjIDpub2RvYzoKKy0gICAgICAgIHJldHVybiBAbGFiZWxzW2ldCistICAgICAgZW5kCist CistICAgICAgIyMKKy0gICAgICAjIHJldHVybnMgdGhlIGRvbWFpbiBuYW1lIGFzIGEgc3RyaW5n LgorLSAgICAgICMKKy0gICAgICAjIFRoZSBkb21haW4gbmFtZSBkb2Vzbid0IGhhdmUgYSB0cmFp bGluZyBkb3QgZXZlbiBpZiB0aGUgbmFtZSBvYmplY3QgaXMKKy0gICAgICAjIGFic29sdXRlLgor LSAgICAgICMKKy0gICAgICAjIEV4YW1wbGU6CistICAgICAgIworLSAgICAgICMgICBwIEdlbTo6 UmVzb2x2OjpETlM6Ok5hbWUuY3JlYXRlKCJ4Lnkuei4iKS50b19zICM9PiAieC55LnoiCistICAg ICAgIyAgIHAgR2VtOjpSZXNvbHY6OkROUzo6TmFtZS5jcmVhdGUoIngueS56IikudG9fcyAjPT4g IngueS56IgorLQorLSAgICAgIGRlZiB0b19zCistICAgICAgICByZXR1cm4gQGxhYmVscy5qb2lu KCcuJykKKy0gICAgICBlbmQKKy0gICAgZW5kCistCistICAgIGNsYXNzIE1lc3NhZ2UgIyA6bm9k b2M6CistICAgICAgQEBpZGVudGlmaWVyID0gLTEKKy0KKy0gICAgICBkZWYgaW5pdGlhbGl6ZShp ZCA9IChAQGlkZW50aWZpZXIgKz0gMSkgJiAweGZmZmYpCistICAgICAgICBAaWQgPSBpZAorLSAg ICAgICAgQHFyID0gMAorLSAgICAgICAgQG9wY29kZSA9IDAKKy0gICAgICAgIEBhYSA9IDAKKy0g ICAgICAgIEB0YyA9IDAKKy0gICAgICAgIEByZCA9IDAgIyByZWN1cnNpb24gZGVzaXJlZAorLSAg ICAgICAgQHJhID0gMCAjIHJlY3Vyc2lvbiBhdmFpbGFibGUKKy0gICAgICAgIEByY29kZSA9IDAK Ky0gICAgICAgIEBxdWVzdGlvbiA9IFtdCistICAgICAgICBAYW5zd2VyID0gW10KKy0gICAgICAg IEBhdXRob3JpdHkgPSBbXQorLSAgICAgICAgQGFkZGl0aW9uYWwgPSBbXQorLSAgICAgIGVuZAor LQorLSAgICAgIGF0dHJfYWNjZXNzb3IgOmlkLCA6cXIsIDpvcGNvZGUsIDphYSwgOnRjLCA6cmQs IDpyYSwgOnJjb2RlCistICAgICAgYXR0cl9yZWFkZXIgOnF1ZXN0aW9uLCA6YW5zd2VyLCA6YXV0 aG9yaXR5LCA6YWRkaXRpb25hbAorLQorLSAgICAgIGRlZiA9PShvdGhlcikKKy0gICAgICAgIHJl dHVybiBAaWQgPT0gb3RoZXIuaWQgJiYKKy0gICAgICAgICAgICAgICBAcXIgPT0gb3RoZXIucXIg JiYKKy0gICAgICAgICAgICAgICBAb3Bjb2RlID09IG90aGVyLm9wY29kZSAmJgorLSAgICAgICAg ICAgICAgIEBhYSA9PSBvdGhlci5hYSAmJgorLSAgICAgICAgICAgICAgIEB0YyA9PSBvdGhlci50 YyAmJgorLSAgICAgICAgICAgICAgIEByZCA9PSBvdGhlci5yZCAmJgorLSAgICAgICAgICAgICAg IEByYSA9PSBvdGhlci5yYSAmJgorLSAgICAgICAgICAgICAgIEByY29kZSA9PSBvdGhlci5yY29k ZSAmJgorLSAgICAgICAgICAgICAgIEBxdWVzdGlvbiA9PSBvdGhlci5xdWVzdGlvbiAmJgorLSAg ICAgICAgICAgICAgIEBhbnN3ZXIgPT0gb3RoZXIuYW5zd2VyICYmCistICAgICAgICAgICAgICAg QGF1dGhvcml0eSA9PSBvdGhlci5hdXRob3JpdHkgJiYKKy0gICAgICAgICAgICAgICBAYWRkaXRp b25hbCA9PSBvdGhlci5hZGRpdGlvbmFsCistICAgICAgZW5kCistCistICAgICAgZGVmIGFkZF9x dWVzdGlvbihuYW1lLCB0eXBlY2xhc3MpCistICAgICAgICBAcXVlc3Rpb24gPDwgW05hbWUuY3Jl YXRlKG5hbWUpLCB0eXBlY2xhc3NdCistICAgICAgZW5kCistCistICAgICAgZGVmIGVhY2hfcXVl c3Rpb24KKy0gICAgICAgIEBxdWVzdGlvbi5lYWNoIHt8bmFtZSwgdHlwZWNsYXNzfAorLSAgICAg ICAgICB5aWVsZCBuYW1lLCB0eXBlY2xhc3MKKy0gICAgICAgIH0KKy0gICAgICBlbmQKKy0KKy0g ICAgICBkZWYgYWRkX2Fuc3dlcihuYW1lLCB0dGwsIGRhdGEpCistICAgICAgICBAYW5zd2VyIDw8 IFtOYW1lLmNyZWF0ZShuYW1lKSwgdHRsLCBkYXRhXQorLSAgICAgIGVuZAorLQorLSAgICAgIGRl ZiBlYWNoX2Fuc3dlcgorLSAgICAgICAgQGFuc3dlci5lYWNoIHt8bmFtZSwgdHRsLCBkYXRhfAor LSAgICAgICAgICB5aWVsZCBuYW1lLCB0dGwsIGRhdGEKKy0gICAgICAgIH0KKy0gICAgICBlbmQK Ky0KKy0gICAgICBkZWYgYWRkX2F1dGhvcml0eShuYW1lLCB0dGwsIGRhdGEpCistICAgICAgICBA YXV0aG9yaXR5IDw8IFtOYW1lLmNyZWF0ZShuYW1lKSwgdHRsLCBkYXRhXQorLSAgICAgIGVuZAor LQorLSAgICAgIGRlZiBlYWNoX2F1dGhvcml0eQorLSAgICAgICAgQGF1dGhvcml0eS5lYWNoIHt8 bmFtZSwgdHRsLCBkYXRhfAorLSAgICAgICAgICB5aWVsZCBuYW1lLCB0dGwsIGRhdGEKKy0gICAg ICAgIH0KKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgYWRkX2FkZGl0aW9uYWwobmFtZSwgdHRs LCBkYXRhKQorLSAgICAgICAgQGFkZGl0aW9uYWwgPDwgW05hbWUuY3JlYXRlKG5hbWUpLCB0dGws IGRhdGFdCistICAgICAgZW5kCistCistICAgICAgZGVmIGVhY2hfYWRkaXRpb25hbAorLSAgICAg ICAgQGFkZGl0aW9uYWwuZWFjaCB7fG5hbWUsIHR0bCwgZGF0YXwKKy0gICAgICAgICAgeWllbGQg bmFtZSwgdHRsLCBkYXRhCistICAgICAgICB9CistICAgICAgZW5kCistCistICAgICAgZGVmIGVh Y2hfcmVzb3VyY2UKKy0gICAgICAgIGVhY2hfYW5zd2VyIHt8bmFtZSwgdHRsLCBkYXRhfCB5aWVs ZCBuYW1lLCB0dGwsIGRhdGF9CistICAgICAgICBlYWNoX2F1dGhvcml0eSB7fG5hbWUsIHR0bCwg ZGF0YXwgeWllbGQgbmFtZSwgdHRsLCBkYXRhfQorLSAgICAgICAgZWFjaF9hZGRpdGlvbmFsIHt8 bmFtZSwgdHRsLCBkYXRhfCB5aWVsZCBuYW1lLCB0dGwsIGRhdGF9CistICAgICAgZW5kCistCist ICAgICAgZGVmIGVuY29kZQorLSAgICAgICAgcmV0dXJuIE1lc3NhZ2VFbmNvZGVyLm5ldyB7fG1z Z3wKKy0gICAgICAgICAgbXNnLnB1dF9wYWNrKCdubm5ubm4nLAorLSAgICAgICAgICAgIEBpZCwK Ky0gICAgICAgICAgICAoQHFyICYgMSkgPDwgMTUgfAorLSAgICAgICAgICAgIChAb3Bjb2RlICYg MTUpIDw8IDExIHwKKy0gICAgICAgICAgICAoQGFhICYgMSkgPDwgMTAgfAorLSAgICAgICAgICAg IChAdGMgJiAxKSA8PCA5IHwKKy0gICAgICAgICAgICAoQHJkICYgMSkgPDwgOCB8CistICAgICAg ICAgICAgKEByYSAmIDEpIDw8IDcgfAorLSAgICAgICAgICAgIChAcmNvZGUgJiAxNSksCistICAg ICAgICAgICAgQHF1ZXN0aW9uLmxlbmd0aCwKKy0gICAgICAgICAgICBAYW5zd2VyLmxlbmd0aCwK Ky0gICAgICAgICAgICBAYXV0aG9yaXR5Lmxlbmd0aCwKKy0gICAgICAgICAgICBAYWRkaXRpb25h bC5sZW5ndGgpCistICAgICAgICAgIEBxdWVzdGlvbi5lYWNoIHt8cXwKKy0gICAgICAgICAgICBu YW1lLCB0eXBlY2xhc3MgPSBxCistICAgICAgICAgICAgbXNnLnB1dF9uYW1lKG5hbWUpCistICAg ICAgICAgICAgbXNnLnB1dF9wYWNrKCdubicsIHR5cGVjbGFzczo6VHlwZVZhbHVlLCB0eXBlY2xh c3M6OkNsYXNzVmFsdWUpCistICAgICAgICAgIH0KKy0gICAgICAgICAgW0BhbnN3ZXIsIEBhdXRo b3JpdHksIEBhZGRpdGlvbmFsXS5lYWNoIHt8cnJ8CistICAgICAgICAgICAgcnIuZWFjaCB7fHJ8 CistICAgICAgICAgICAgICBuYW1lLCB0dGwsIGRhdGEgPSByCistICAgICAgICAgICAgICBtc2cu cHV0X25hbWUobmFtZSkKKy0gICAgICAgICAgICAgIG1zZy5wdXRfcGFjaygnbm5OJywgZGF0YS5j bGFzczo6VHlwZVZhbHVlLCBkYXRhLmNsYXNzOjpDbGFzc1ZhbHVlLCB0dGwpCistICAgICAgICAg ICAgICBtc2cucHV0X2xlbmd0aDE2IHtkYXRhLmVuY29kZV9yZGF0YShtc2cpfQorLSAgICAgICAg ICAgIH0KKy0gICAgICAgICAgfQorLSAgICAgICAgfS50b19zCistICAgICAgZW5kCistCistICAg ICAgY2xhc3MgTWVzc2FnZUVuY29kZXIgIyA6bm9kb2M6CistICAgICAgICBkZWYgaW5pdGlhbGl6 ZQorLSAgICAgICAgICBAZGF0YSA9ICcnLmR1cAorLSAgICAgICAgICBAbmFtZXMgPSB7fQorLSAg ICAgICAgICB5aWVsZCBzZWxmCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiB0b19zCist ICAgICAgICAgIHJldHVybiBAZGF0YQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgcHV0 X2J5dGVzKGQpCistICAgICAgICAgIEBkYXRhIDw8IGQKKy0gICAgICAgIGVuZAorLQorLSAgICAg ICAgZGVmIHB1dF9wYWNrKHRlbXBsYXRlLCAqZCkKKy0gICAgICAgICAgQGRhdGEgPDwgZC5wYWNr KHRlbXBsYXRlKQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgcHV0X2xlbmd0aDE2Cist ICAgICAgICAgIGxlbmd0aF9pbmRleCA9IEBkYXRhLmxlbmd0aAorLSAgICAgICAgICBAZGF0YSA8 PCAiXDBcMCIKKy0gICAgICAgICAgZGF0YV9zdGFydCA9IEBkYXRhLmxlbmd0aAorLSAgICAgICAg ICB5aWVsZAorLSAgICAgICAgICBkYXRhX2VuZCA9IEBkYXRhLmxlbmd0aAorLSAgICAgICAgICBA ZGF0YVtsZW5ndGhfaW5kZXgsIDJdID0gW2RhdGFfZW5kIC0gZGF0YV9zdGFydF0ucGFjaygibiIp CistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBwdXRfc3RyaW5nKGQpCistICAgICAgICAg IHNlbGYucHV0X3BhY2soIkMiLCBkLmxlbmd0aCkKKy0gICAgICAgICAgQGRhdGEgPDwgZAorLSAg ICAgICAgZW5kCistCistICAgICAgICBkZWYgcHV0X3N0cmluZ19saXN0KGRzKQorLSAgICAgICAg ICBkcy5lYWNoIHt8ZHwKKy0gICAgICAgICAgICBzZWxmLnB1dF9zdHJpbmcoZCkKKy0gICAgICAg ICAgfQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgcHV0X25hbWUoZCwgY29tcHJlc3M6 IHRydWUpCistICAgICAgICAgIHB1dF9sYWJlbHMoZC50b19hLCBjb21wcmVzczogY29tcHJlc3Mp CistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBwdXRfbGFiZWxzKGQsIGNvbXByZXNzOiB0 cnVlKQorLSAgICAgICAgICBkLmVhY2hfaW5kZXgge3xpfAorLSAgICAgICAgICAgIGRvbWFpbiA9 IGRbaS4uLTFdCistICAgICAgICAgICAgaWYgY29tcHJlc3MgJiYgaWR4ID0gQG5hbWVzW2RvbWFp bl0KKy0gICAgICAgICAgICAgIHNlbGYucHV0X3BhY2soIm4iLCAweGMwMDAgfCBpZHgpCistICAg ICAgICAgICAgICByZXR1cm4KKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICBpZiBA ZGF0YS5sZW5ndGggPCAweDQwMDAKKy0gICAgICAgICAgICAgICAgQG5hbWVzW2RvbWFpbl0gPSBA ZGF0YS5sZW5ndGgKKy0gICAgICAgICAgICAgIGVuZAorLSAgICAgICAgICAgICAgc2VsZi5wdXRf bGFiZWwoZFtpXSkKKy0gICAgICAgICAgICBlbmQKKy0gICAgICAgICAgfQorLSAgICAgICAgICBA ZGF0YSA8PCAiXDAiCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBwdXRfbGFiZWwoZCkK Ky0gICAgICAgICAgc2VsZi5wdXRfc3RyaW5nKGQudG9fcykKKy0gICAgICAgIGVuZAorLSAgICAg IGVuZAorLQorLSAgICAgIGRlZiBNZXNzYWdlLmRlY29kZShtKQorLSAgICAgICAgbyA9IE1lc3Nh Z2UubmV3KDApCistICAgICAgICBNZXNzYWdlRGVjb2Rlci5uZXcobSkge3xtc2d8CistICAgICAg ICAgIGlkLCBmbGFnLCBxZGNvdW50LCBhbmNvdW50LCBuc2NvdW50LCBhcmNvdW50ID0KKy0gICAg ICAgICAgICBtc2cuZ2V0X3VucGFjaygnbm5ubm5uJykKKy0gICAgICAgICAgby5pZCA9IGlkCist ICAgICAgICAgIG8udGMgPSAoZmxhZyA+PiA5KSAmIDEKKy0gICAgICAgICAgby5yY29kZSA9IGZs YWcgJiAxNQorLSAgICAgICAgICByZXR1cm4gbyB1bmxlc3Mgby50Yy56ZXJvPworLQorLSAgICAg ICAgICBvLnFyID0gKGZsYWcgPj4gMTUpICYgMQorLSAgICAgICAgICBvLm9wY29kZSA9IChmbGFn ID4+IDExKSAmIDE1CistICAgICAgICAgIG8uYWEgPSAoZmxhZyA+PiAxMCkgJiAxCistICAgICAg ICAgIG8ucmQgPSAoZmxhZyA+PiA4KSAmIDEKKy0gICAgICAgICAgby5yYSA9IChmbGFnID4+IDcp ICYgMQorLSAgICAgICAgICAoMS4ucWRjb3VudCkuZWFjaCB7CistICAgICAgICAgICAgbmFtZSwg dHlwZWNsYXNzID0gbXNnLmdldF9xdWVzdGlvbgorLSAgICAgICAgICAgIG8uYWRkX3F1ZXN0aW9u KG5hbWUsIHR5cGVjbGFzcykKKy0gICAgICAgICAgfQorLSAgICAgICAgICAoMS4uYW5jb3VudCku ZWFjaCB7CistICAgICAgICAgICAgbmFtZSwgdHRsLCBkYXRhID0gbXNnLmdldF9ycgorLSAgICAg ICAgICAgIG8uYWRkX2Fuc3dlcihuYW1lLCB0dGwsIGRhdGEpCistICAgICAgICAgIH0KKy0gICAg ICAgICAgKDEuLm5zY291bnQpLmVhY2ggeworLSAgICAgICAgICAgIG5hbWUsIHR0bCwgZGF0YSA9 IG1zZy5nZXRfcnIKKy0gICAgICAgICAgICBvLmFkZF9hdXRob3JpdHkobmFtZSwgdHRsLCBkYXRh KQorLSAgICAgICAgICB9CistICAgICAgICAgICgxLi5hcmNvdW50KS5lYWNoIHsKKy0gICAgICAg ICAgICBuYW1lLCB0dGwsIGRhdGEgPSBtc2cuZ2V0X3JyCistICAgICAgICAgICAgby5hZGRfYWRk aXRpb25hbChuYW1lLCB0dGwsIGRhdGEpCistICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAg ICAgIHJldHVybiBvCistICAgICAgZW5kCistCistICAgICAgY2xhc3MgTWVzc2FnZURlY29kZXIg IyA6bm9kb2M6CistICAgICAgICBkZWYgaW5pdGlhbGl6ZShkYXRhKQorLSAgICAgICAgICBAZGF0 YSA9IGRhdGEKKy0gICAgICAgICAgQGluZGV4ID0gMAorLSAgICAgICAgICBAbGltaXQgPSBkYXRh LmJ5dGVzaXplCistICAgICAgICAgIHlpZWxkIHNlbGYKKy0gICAgICAgIGVuZAorLQorLSAgICAg ICAgZGVmIGluc3BlY3QKKy0gICAgICAgICAgIlwjPCN7c2VsZi5jbGFzc306ICN7QGRhdGEuYnl0 ZXNsaWNlKDAsIEBpbmRleCkuaW5zcGVjdH0gI3tAZGF0YS5ieXRlc2xpY2UoQGluZGV4Li4tMSku aW5zcGVjdH0+IgorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgZ2V0X2xlbmd0aDE2Cist ICAgICAgICAgIGxlbiwgPSBzZWxmLmdldF91bnBhY2soJ24nKQorLSAgICAgICAgICBzYXZlX2xp bWl0ID0gQGxpbWl0CistICAgICAgICAgIEBsaW1pdCA9IEBpbmRleCArIGxlbgorLSAgICAgICAg ICBkID0geWllbGQobGVuKQorLSAgICAgICAgICBpZiBAaW5kZXggPCBAbGltaXQKKy0gICAgICAg ICAgICByYWlzZSBEZWNvZGVFcnJvci5uZXcoImp1bmsgZXhpc3RzIikKKy0gICAgICAgICAgZWxz aWYgQGxpbWl0IDwgQGluZGV4CistICAgICAgICAgICAgcmFpc2UgRGVjb2RlRXJyb3IubmV3KCJs aW1pdCBleGNlZWRlZCIpCistICAgICAgICAgIGVuZAorLSAgICAgICAgICBAbGltaXQgPSBzYXZl X2xpbWl0CistICAgICAgICAgIHJldHVybiBkCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRl ZiBnZXRfYnl0ZXMobGVuID0gQGxpbWl0IC0gQGluZGV4KQorLSAgICAgICAgICByYWlzZSBEZWNv ZGVFcnJvci5uZXcoImxpbWl0IGV4Y2VlZGVkIikgaWYgQGxpbWl0IDwgQGluZGV4ICsgbGVuCist ICAgICAgICAgIGQgPSBAZGF0YS5ieXRlc2xpY2UoQGluZGV4LCBsZW4pCistICAgICAgICAgIEBp bmRleCArPSBsZW4KKy0gICAgICAgICAgcmV0dXJuIGQKKy0gICAgICAgIGVuZAorLQorLSAgICAg ICAgZGVmIGdldF91bnBhY2sodGVtcGxhdGUpCistICAgICAgICAgIGxlbiA9IDAKKy0gICAgICAg ICAgdGVtcGxhdGUuZWFjaF9ieXRlIHt8Ynl0ZXwKKy0gICAgICAgICAgICBieXRlID0gIiVjIiAl IGJ5dGUKKy0gICAgICAgICAgICBjYXNlIGJ5dGUKKy0gICAgICAgICAgICB3aGVuID9jLCA/Qwor LSAgICAgICAgICAgICAgbGVuICs9IDEKKy0gICAgICAgICAgICB3aGVuID9uCistICAgICAgICAg ICAgICBsZW4gKz0gMgorLSAgICAgICAgICAgIHdoZW4gP04KKy0gICAgICAgICAgICAgIGxlbiAr PSA0CistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgcmFpc2UgU3RhbmRhcmRFcnJv ci5uZXcoInVuc3VwcG9ydGVkIHRlbXBsYXRlOiAnI3tieXRlLmNocn0nIGluICcje3RlbXBsYXRl fSciKQorLSAgICAgICAgICAgIGVuZAorLSAgICAgICAgICB9CistICAgICAgICAgIHJhaXNlIERl Y29kZUVycm9yLm5ldygibGltaXQgZXhjZWVkZWQiKSBpZiBAbGltaXQgPCBAaW5kZXggKyBsZW4K Ky0gICAgICAgICAgYXJyID0gQGRhdGEudW5wYWNrKCJAI3tAaW5kZXh9I3t0ZW1wbGF0ZX0iKQor LSAgICAgICAgICBAaW5kZXggKz0gbGVuCistICAgICAgICAgIHJldHVybiBhcnIKKy0gICAgICAg IGVuZAorLQorLSAgICAgICAgZGVmIGdldF9zdHJpbmcKKy0gICAgICAgICAgcmFpc2UgRGVjb2Rl RXJyb3IubmV3KCJsaW1pdCBleGNlZWRlZCIpIGlmIEBsaW1pdCA8PSBAaW5kZXgKKy0gICAgICAg ICAgbGVuID0gQGRhdGEuZ2V0Ynl0ZShAaW5kZXgpCistICAgICAgICAgIHJhaXNlIERlY29kZUVy cm9yLm5ldygibGltaXQgZXhjZWVkZWQiKSBpZiBAbGltaXQgPCBAaW5kZXggKyAxICsgbGVuCist ICAgICAgICAgIGQgPSBAZGF0YS5ieXRlc2xpY2UoQGluZGV4ICsgMSwgbGVuKQorLSAgICAgICAg ICBAaW5kZXggKz0gMSArIGxlbgorLSAgICAgICAgICByZXR1cm4gZAorLSAgICAgICAgZW5kCist CistICAgICAgICBkZWYgZ2V0X3N0cmluZ19saXN0CistICAgICAgICAgIHN0cmluZ3MgPSBbXQor LSAgICAgICAgICB3aGlsZSBAaW5kZXggPCBAbGltaXQKKy0gICAgICAgICAgICBzdHJpbmdzIDw8 IHNlbGYuZ2V0X3N0cmluZworLSAgICAgICAgICBlbmQKKy0gICAgICAgICAgc3RyaW5ncworLSAg ICAgICAgZW5kCistCistICAgICAgICBkZWYgZ2V0X2xpc3QKKy0gICAgICAgICAgW10udGFwIGRv IHx2YWx1ZXN8CistICAgICAgICAgICAgd2hpbGUgQGluZGV4IDwgQGxpbWl0CistICAgICAgICAg ICAgICB2YWx1ZXMgPDwgeWllbGQKKy0gICAgICAgICAgICBlbmQKKy0gICAgICAgICAgZW5kCist ICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBnZXRfbmFtZQorLSAgICAgICAgICByZXR1cm4g TmFtZS5uZXcoc2VsZi5nZXRfbGFiZWxzKQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYg Z2V0X2xhYmVscworLSAgICAgICAgICBwcmV2X2luZGV4ID0gQGluZGV4CistICAgICAgICAgIHNh dmVfaW5kZXggPSBuaWwKKy0gICAgICAgICAgZCA9IFtdCistICAgICAgICAgIHNpemUgPSAtMQor LSAgICAgICAgICB3aGlsZSB0cnVlCistICAgICAgICAgICAgcmFpc2UgRGVjb2RlRXJyb3IubmV3 KCJsaW1pdCBleGNlZWRlZCIpIGlmIEBsaW1pdCA8PSBAaW5kZXgKKy0gICAgICAgICAgICBjYXNl IEBkYXRhLmdldGJ5dGUoQGluZGV4KQorLSAgICAgICAgICAgIHdoZW4gMAorLSAgICAgICAgICAg ICAgQGluZGV4ICs9IDEKKy0gICAgICAgICAgICAgIGlmIHNhdmVfaW5kZXgKKy0gICAgICAgICAg ICAgICAgQGluZGV4ID0gc2F2ZV9pbmRleAorLSAgICAgICAgICAgICAgZW5kCistICAgICAgICAg ICAgICByZXR1cm4gZAorLSAgICAgICAgICAgIHdoZW4gMTkyLi4yNTUKKy0gICAgICAgICAgICAg IGlkeCA9IHNlbGYuZ2V0X3VucGFjaygnbicpWzBdICYgMHgzZmZmCistICAgICAgICAgICAgICBp ZiBwcmV2X2luZGV4IDw9IGlkeAorLSAgICAgICAgICAgICAgICByYWlzZSBEZWNvZGVFcnJvci5u ZXcoIm5vbi1iYWNrd2FyZCBuYW1lIHBvaW50ZXIiKQorLSAgICAgICAgICAgICAgZW5kCistICAg ICAgICAgICAgICBwcmV2X2luZGV4ID0gaWR4CistICAgICAgICAgICAgICBpZiAhc2F2ZV9pbmRl eAorLSAgICAgICAgICAgICAgICBzYXZlX2luZGV4ID0gQGluZGV4CistICAgICAgICAgICAgICBl bmQKKy0gICAgICAgICAgICAgIEBpbmRleCA9IGlkeAorLSAgICAgICAgICAgIGVsc2UKKy0gICAg ICAgICAgICAgIGwgPSBzZWxmLmdldF9sYWJlbAorLSAgICAgICAgICAgICAgZCA8PCBsCistICAg ICAgICAgICAgICBzaXplICs9IDEgKyBsLnN0cmluZy5ieXRlc2l6ZQorLSAgICAgICAgICAgICAg cmFpc2UgRGVjb2RlRXJyb3IubmV3KCJuYW1lIGxhYmVsIGRhdGEgZXhjZWVkIDI1NSBvY3RldHMi KSBpZiBzaXplID4gMjU1CistICAgICAgICAgICAgZW5kCistICAgICAgICAgIGVuZAorLSAgICAg ICAgZW5kCistCistICAgICAgICBkZWYgZ2V0X2xhYmVsCistICAgICAgICAgIHJldHVybiBMYWJl bDo6U3RyLm5ldyhzZWxmLmdldF9zdHJpbmcpCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRl ZiBnZXRfcXVlc3Rpb24KKy0gICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X25hbWUKKy0gICAgICAg ICAgdHlwZSwga2xhc3MgPSBzZWxmLmdldF91bnBhY2soIm5uIikKKy0gICAgICAgICAgcmV0dXJu IG5hbWUsIFJlc291cmNlLmdldF9jbGFzcyh0eXBlLCBrbGFzcykKKy0gICAgICAgIGVuZAorLQor LSAgICAgICAgZGVmIGdldF9ycgorLSAgICAgICAgICBuYW1lID0gc2VsZi5nZXRfbmFtZQorLSAg ICAgICAgICB0eXBlLCBrbGFzcywgdHRsID0gc2VsZi5nZXRfdW5wYWNrKCdubk4nKQorLSAgICAg ICAgICB0eXBlY2xhc3MgPSBSZXNvdXJjZS5nZXRfY2xhc3ModHlwZSwga2xhc3MpCistICAgICAg ICAgIHJlcyA9IHNlbGYuZ2V0X2xlbmd0aDE2IGRvCistICAgICAgICAgICAgYmVnaW4KKy0gICAg ICAgICAgICAgIHR5cGVjbGFzcy5kZWNvZGVfcmRhdGEgc2VsZgorLSAgICAgICAgICAgIHJlc2N1 ZSA9PiBlCistICAgICAgICAgICAgICByYWlzZSBEZWNvZGVFcnJvciwgZS5tZXNzYWdlLCBlLmJh Y2t0cmFjZQorLSAgICAgICAgICAgIGVuZAorLSAgICAgICAgICBlbmQKKy0gICAgICAgICAgcmVz Lmluc3RhbmNlX3ZhcmlhYmxlX3NldCA6QHR0bCwgdHRsCistICAgICAgICAgIHJldHVybiBuYW1l LCB0dGwsIHJlcworLSAgICAgICAgZW5kCistICAgICAgZW5kCistICAgIGVuZAorLQorLSAgICAj IworLSAgICAjIFN2Y1BhcmFtcyBmb3Igc2VydmljZSBiaW5kaW5nIFJScy4gW1JGQzk0NjBdCist CistICAgIGNsYXNzIFN2Y1BhcmFtcworLSAgICAgIGluY2x1ZGUgRW51bWVyYWJsZQorLQorLSAg ICAgICMjCistICAgICAgIyBDcmVhdGUgYSBsaXN0IG9mIFN2Y1BhcmFtcyB3aXRoIHRoZSBnaXZl biBpbml0aWFsIGNvbnRlbnQuCistICAgICAgIworLSAgICAgICMgK3BhcmFtcysgaGFzIHRvIGJl IGFuIGVudW1lcmFibGUgb2YgK1N2Y1BhcmFtK3MuCistICAgICAgIyBJZiBpdHMgY29udGVudCBo YXMgK1N2Y1BhcmFtK3Mgd2l0aCB0aGUgZHVwbGljYXRlIGtleSwKKy0gICAgICAjIHRoZSBvbmUg YXBwZWFycyBsYXN0IHRha2VzIHByZWNlZGVuY2UuCistCistICAgICAgZGVmIGluaXRpYWxpemUo cGFyYW1zID0gW10pCistICAgICAgICBAcGFyYW1zID0ge30KKy0KKy0gICAgICAgIHBhcmFtcy5l YWNoIGRvIHxwYXJhbXwKKy0gICAgICAgICAgYWRkIHBhcmFtCistICAgICAgICBlbmQKKy0gICAg ICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgR2V0IFN2Y1BhcmFtIGZvciB0aGUgZ2l2ZW4g K2tleSsgaW4gdGhpcyBsaXN0LgorLQorLSAgICAgIGRlZiBbXShrZXkpCistICAgICAgICBAcGFy YW1zW2Nhbm9uaWNhbF9rZXkoa2V5KV0KKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAg ICMgR2V0IHRoZSBudW1iZXIgb2YgU3ZjUGFyYW1zIGluIHRoaXMgbGlzdC4KKy0KKy0gICAgICBk ZWYgY291bnQKKy0gICAgICAgIEBwYXJhbXMuY291bnQKKy0gICAgICBlbmQKKy0KKy0gICAgICAj IworLSAgICAgICMgR2V0IHdoZXRoZXIgdGhpcyBsaXN0IGlzIGVtcHR5LgorLQorLSAgICAgIGRl ZiBlbXB0eT8KKy0gICAgICAgIEBwYXJhbXMuZW1wdHk/CistICAgICAgZW5kCistCistICAgICAg IyMKKy0gICAgICAjIEFkZCB0aGUgU3ZjUGFyYW0gK3BhcmFtKyB0byB0aGlzIGxpc3QsIG92ZXJ3 cml0aW5nIHRoZSBleGlzdGluZyBvbmUgd2l0aCB0aGUgc2FtZSBrZXkuCistCistICAgICAgZGVm IGFkZChwYXJhbSkKKy0gICAgICAgIEBwYXJhbXNbcGFyYW0uY2xhc3Mua2V5X251bWJlcl0gPSBw YXJhbQorLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAgICAgIyBSZW1vdmUgdGhlICtTdmNQ YXJhbSsgd2l0aCB0aGUgZ2l2ZW4gK2tleSsgYW5kIHJldHVybiBpdC4KKy0KKy0gICAgICBkZWYg ZGVsZXRlKGtleSkKKy0gICAgICAgIEBwYXJhbXMuZGVsZXRlKGNhbm9uaWNhbF9rZXkoa2V5KSkK Ky0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgRW51bWVyYXRlIHRoZSArU3ZjUGFy YW0rcyBpbiB0aGlzIGxpc3QuCistCistICAgICAgZGVmIGVhY2goJmJsb2NrKQorLSAgICAgICAg cmV0dXJuIGVudW1fZm9yKDplYWNoKSB1bmxlc3MgYmxvY2sKKy0gICAgICAgIEBwYXJhbXMuZWFj aF92YWx1ZSgmYmxvY2spCistICAgICAgZW5kCistCistICAgICAgZGVmIGVuY29kZShtc2cpICMg Om5vZG9jOgorLSAgICAgICAgQHBhcmFtcy5rZXlzLnNvcnQuZWFjaCBkbyB8a2V5fAorLSAgICAg ICAgICBtc2cucHV0X3BhY2soJ24nLCBrZXkpCistICAgICAgICAgIG1zZy5wdXRfbGVuZ3RoMTYg ZG8KKy0gICAgICAgICAgICBAcGFyYW1zLmZldGNoKGtleSkuZW5jb2RlKG1zZykKKy0gICAgICAg ICAgZW5kCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgc2VsZi5kZWNv ZGUobXNnKSAjIDpub2RvYzoKKy0gICAgICAgIHBhcmFtcyA9IG1zZy5nZXRfbGlzdCBkbworLSAg ICAgICAgICBrZXksID0gbXNnLmdldF91bnBhY2soJ24nKQorLSAgICAgICAgICBtc2cuZ2V0X2xl bmd0aDE2IGRvCistICAgICAgICAgICAgU3ZjUGFyYW06OkNsYXNzSGFzaFtrZXldLmRlY29kZSht c2cpCistICAgICAgICAgIGVuZAorLSAgICAgICAgZW5kCistCistICAgICAgICByZXR1cm4gc2Vs Zi5uZXcocGFyYW1zKQorLSAgICAgIGVuZAorLQorLSAgICAgIHByaXZhdGUKKy0KKy0gICAgICBk ZWYgY2Fub25pY2FsX2tleShrZXkpICMgOm5vZG9jOgorLSAgICAgICAgY2FzZSBrZXkKKy0gICAg ICAgIHdoZW4gSW50ZWdlcgorLSAgICAgICAgICBrZXkKKy0gICAgICAgIHdoZW4gL1xBa2V5KFxk Kylcei8KKy0gICAgICAgICAgSW50ZWdlcigkMSkKKy0gICAgICAgIHdoZW4gU3ltYm9sCistICAg ICAgICAgIFN2Y1BhcmFtOjpDbGFzc0hhc2hba2V5XS5rZXlfbnVtYmVyCistICAgICAgICBlbHNl CistICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgJ2tleSBtdXN0IGJlIGVpdGhlciBTdHJpbmcg b3IgU3ltYm9sJworLSAgICAgICAgZW5kCistICAgICAgZW5kCistICAgIGVuZAorLQorLSAgICAj IworLSAgICAjIEJhc2UgY2xhc3MgZm9yIFN2Y1BhcmFtLiBbUkZDOTQ2MF0KKy0KKy0gICAgY2xh c3MgU3ZjUGFyYW0KKy0KKy0gICAgICAjIworLSAgICAgICMgR2V0IHRoZSBwcmVzZW50YXRpb24g bmFtZSBvZiB0aGUgU3ZjUGFyYW1LZXkuCistCistICAgICAgZGVmIHNlbGYua2V5X25hbWUKKy0g ICAgICAgIGNvbnN0X2dldCg6S2V5TmFtZSkKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAg ICAgICMgR2V0IHRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB0aGUgU3ZjUGFyYW1LZXkuCistCist ICAgICAgZGVmIHNlbGYua2V5X251bWJlcgorLSAgICAgICAgY29uc3RfZ2V0KDpLZXlOdW1iZXIp CistICAgICAgZW5kCistCistICAgICAgQ2xhc3NIYXNoID0gSGFzaC5uZXcgZG8gfGgsIGtleXwg IyA6bm9kb2M6CistICAgICAgICBjYXNlIGtleQorLSAgICAgICAgd2hlbiBJbnRlZ2VyCistICAg ICAgICAgIEdlbmVyaWMuY3JlYXRlKGtleSkKKy0gICAgICAgIHdoZW4gL1xBa2V5KD88a2V5Plxk Kylcei8KKy0gICAgICAgICAgR2VuZXJpYy5jcmVhdGUoa2V5LnRvX2ludCkKKy0gICAgICAgIHdo ZW4gU3ltYm9sCistICAgICAgICAgIHJhaXNlIEtleUVycm9yLCAidW5rbm93biBrZXkgI3trZXl9 IgorLSAgICAgICAgZWxzZQorLSAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICdrZXkgbXVzdCBi ZSBlaXRoZXIgU3RyaW5nIG9yIFN5bWJvbCcKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLQor LSAgICAgICMjCistICAgICAgIyBHZW5lcmljIFN2Y1BhcmFtIGFic3RyYWN0IGNsYXNzLgorLQor LSAgICAgIGNsYXNzIEdlbmVyaWMgPCBTdmNQYXJhbQorLQorLSAgICAgICAgIyMKKy0gICAgICAg ICMgU3ZjUGFyYW1WYWx1ZSBpbiB3aXJlLWZvcm1hdCBieXRlIHN0cmluZy4KKy0KKy0gICAgICAg IGF0dHJfcmVhZGVyIDp2YWx1ZQorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgQ3JlYXRlIGdl bmVyaWMgU3ZjUGFyYW0KKy0KKy0gICAgICAgIGRlZiBpbml0aWFsaXplKHZhbHVlKQorLSAgICAg ICAgICBAdmFsdWUgPSB2YWx1ZQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgZW5jb2Rl KG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIG1zZy5wdXRfYnl0ZXMoQHZhbHVlKQorLSAgICAg ICAgZW5kCistCistICAgICAgICBkZWYgc2VsZi5kZWNvZGUobXNnKSAjIDpub2RvYzoKKy0gICAg ICAgICAgcmV0dXJuIHNlbGYubmV3KG1zZy5nZXRfYnl0ZXMpCistICAgICAgICBlbmQKKy0KKy0g ICAgICAgIGRlZiBzZWxmLmNyZWF0ZShrZXlfbnVtYmVyKQorLSAgICAgICAgICBjID0gQ2xhc3Mu bmV3KEdlbmVyaWMpCistICAgICAgICAgIGtleV9uYW1lID0gOiJrZXkje2tleV9udW1iZXJ9Igor LSAgICAgICAgICBjLmNvbnN0X3NldCg6S2V5TmFtZSwga2V5X25hbWUpCistICAgICAgICAgIGMu Y29uc3Rfc2V0KDpLZXlOdW1iZXIsIGtleV9udW1iZXIpCistICAgICAgICAgIHNlbGYuY29uc3Rf c2V0KDoiS2V5I3trZXlfbnVtYmVyfSIsIGMpCistICAgICAgICAgIENsYXNzSGFzaFtrZXlfbmFt ZV0gPSBDbGFzc0hhc2hba2V5X251bWJlcl0gPSBjCistICAgICAgICAgIHJldHVybiBjCistICAg ICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgIm1hbmRhdG9yeSIg U3ZjUGFyYW0gLS0gTWFuZGF0b3J5IGtleXMgaW4gc2VydmljZSBiaW5kaW5nIFJSCistCistICAg ICAgY2xhc3MgTWFuZGF0b3J5IDwgU3ZjUGFyYW0KKy0gICAgICAgIEtleU5hbWUgPSA6bWFuZGF0 b3J5CistICAgICAgICBLZXlOdW1iZXIgPSAwCistICAgICAgICBDbGFzc0hhc2hbS2V5TmFtZV0g PSBDbGFzc0hhc2hbS2V5TnVtYmVyXSA9IHNlbGYgIyA6bm9kb2M6CistCistICAgICAgICAjIwor LSAgICAgICAgIyBNYW5kYXRvcnkga2V5cy4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDprZXlz CistCistICAgICAgICAjIworLSAgICAgICAgIyBJbml0aWFsaXplICJtYW5kYXRvcnkiIFNjdlBh cmFtLgorLQorLSAgICAgICAgZGVmIGluaXRpYWxpemUoa2V5cykKKy0gICAgICAgICAgQGtleXMg PSBrZXlzLm1hcCgmOnRvX2ludCkKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIGVuY29k ZShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBAa2V5cy5zb3J0LmVhY2ggZG8gfGtleXwKKy0g ICAgICAgICAgICBtc2cucHV0X3BhY2soJ24nLCBrZXkpCistICAgICAgICAgIGVuZAorLSAgICAg ICAgZW5kCistCistICAgICAgICBkZWYgc2VsZi5kZWNvZGUobXNnKSAjIDpub2RvYzoKKy0gICAg ICAgICAga2V5cyA9IG1zZy5nZXRfbGlzdCB7IG1zZy5nZXRfdW5wYWNrKCduJylbMF0gfQorLSAg ICAgICAgICByZXR1cm4gc2VsZi5uZXcoa2V5cykKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAor LQorLSAgICAgICMjCistICAgICAgIyAiYWxwbiIgU3ZjUGFyYW0gLS0gQWRkaXRpb25hbCBzdXBw b3J0ZWQgcHJvdG9jb2xzCistCistICAgICAgY2xhc3MgQUxQTiA8IFN2Y1BhcmFtCistICAgICAg ICBLZXlOYW1lID0gOmFscG4KKy0gICAgICAgIEtleU51bWJlciA9IDEKKy0gICAgICAgIENsYXNz SGFzaFtLZXlOYW1lXSA9IENsYXNzSGFzaFtLZXlOdW1iZXJdID0gc2VsZiAjIDpub2RvYzoKKy0K Ky0gICAgICAgICMjCistICAgICAgICAjIFN1cHBvcnRlZCBwcm90b2NvbCBJRHMuCistCistICAg ICAgICBhdHRyX3JlYWRlciA6cHJvdG9jb2xfaWRzCistCistICAgICAgICAjIworLSAgICAgICAg IyBJbml0aWFsaXplICJhbHBuIiBTY3ZQYXJhbS4KKy0KKy0gICAgICAgIGRlZiBpbml0aWFsaXpl KHByb3RvY29sX2lkcykKKy0gICAgICAgICAgQHByb3RvY29sX2lkcyA9IHByb3RvY29sX2lkcy5t YXAoJjp0b19zdHIpCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBlbmNvZGUobXNnKSAj IDpub2RvYzoKKy0gICAgICAgICAgbXNnLnB1dF9zdHJpbmdfbGlzdChAcHJvdG9jb2xfaWRzKQor LSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgc2VsZi5kZWNvZGUobXNnKSAjIDpub2RvYzoK Ky0gICAgICAgICAgcmV0dXJuIHNlbGYubmV3KG1zZy5nZXRfc3RyaW5nX2xpc3QpCistICAgICAg ICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgIm5vLWRlZmF1bHQtYWxw biIgU3ZjUGFyYW0gLS0gTm8gc3VwcG9ydCBmb3IgZGVmYXVsdCBwcm90b2NvbAorLQorLSAgICAg IGNsYXNzIE5vRGVmYXVsdEFMUE4gPCBTdmNQYXJhbQorLSAgICAgICAgS2V5TmFtZSA9IDonbm8t ZGVmYXVsdC1hbHBuJworLSAgICAgICAgS2V5TnVtYmVyID0gMgorLSAgICAgICAgQ2xhc3NIYXNo W0tleU5hbWVdID0gQ2xhc3NIYXNoW0tleU51bWJlcl0gPSBzZWxmICMgOm5vZG9jOgorLQorLSAg ICAgICAgZGVmIGVuY29kZShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICAjIG5vIHBheWxvYWQK Ky0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHNlbGYuZGVjb2RlKG1zZykgIyA6bm9kb2M6 CistICAgICAgICAgIHJldHVybiBzZWxmLm5ldworLSAgICAgICAgZW5kCistICAgICAgZW5kCist CistICAgICAgIyMKKy0gICAgICAjICJwb3J0IiBTdmNQYXJhbSAtLSBQb3J0IGZvciBhbHRlcm5h dGl2ZSBlbmRwb2ludAorLQorLSAgICAgIGNsYXNzIFBvcnQgPCBTdmNQYXJhbQorLSAgICAgICAg S2V5TmFtZSA9IDpwb3J0CistICAgICAgICBLZXlOdW1iZXIgPSAzCistICAgICAgICBDbGFzc0hh c2hbS2V5TmFtZV0gPSBDbGFzc0hhc2hbS2V5TnVtYmVyXSA9IHNlbGYgIyA6bm9kb2M6CistCist ICAgICAgICAjIworLSAgICAgICAgIyBQb3J0IG51bWJlci4KKy0KKy0gICAgICAgIGF0dHJfcmVh ZGVyIDpwb3J0CistCistICAgICAgICAjIworLSAgICAgICAgIyBJbml0aWFsaXplICJwb3J0IiBT Y3ZQYXJhbS4KKy0KKy0gICAgICAgIGRlZiBpbml0aWFsaXplKHBvcnQpCistICAgICAgICAgIEBw b3J0ID0gcG9ydC50b19pbnQKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIGVuY29kZSht c2cpICMgOm5vZG9jOgorLSAgICAgICAgICBtc2cucHV0X3BhY2soJ24nLCBAcG9ydCkKKy0gICAg ICAgIGVuZAorLQorLSAgICAgICAgZGVmIHNlbGYuZGVjb2RlKG1zZykgIyA6bm9kb2M6CistICAg ICAgICAgIHBvcnQsID0gbXNnLmdldF91bnBhY2soJ24nKQorLSAgICAgICAgICByZXR1cm4gc2Vs Zi5uZXcocG9ydCkKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAg ICAgIyAiaXB2NGhpbnQiIFN2Y1BhcmFtIC0tIElQdjQgYWRkcmVzcyBoaW50cworLQorLSAgICAg IGNsYXNzIElQdjRIaW50IDwgU3ZjUGFyYW0KKy0gICAgICAgIEtleU5hbWUgPSA6aXB2NGhpbnQK Ky0gICAgICAgIEtleU51bWJlciA9IDQKKy0gICAgICAgIENsYXNzSGFzaFtLZXlOYW1lXSA9IENs YXNzSGFzaFtLZXlOdW1iZXJdID0gc2VsZiAjIDpub2RvYzoKKy0KKy0gICAgICAgICMjCistICAg ICAgICAjIFNldCBvZiBJUHY0IGFkZHJlc3Nlcy4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDph ZGRyZXNzZXMKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIEluaXRpYWxpemUgImlwdjRoaW50 IiBTY3ZQYXJhbS4KKy0KKy0gICAgICAgIGRlZiBpbml0aWFsaXplKGFkZHJlc3NlcykKKy0gICAg ICAgICAgQGFkZHJlc3NlcyA9IGFkZHJlc3Nlcy5tYXAge3xhZGRyZXNzfCBJUHY0LmNyZWF0ZShh ZGRyZXNzKSB9CistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBlbmNvZGUobXNnKSAjIDpu b2RvYzoKKy0gICAgICAgICAgQGFkZHJlc3Nlcy5lYWNoIGRvIHxhZGRyZXNzfAorLSAgICAgICAg ICAgIG1zZy5wdXRfYnl0ZXMoYWRkcmVzcy5hZGRyZXNzKQorLSAgICAgICAgICBlbmQKKy0gICAg ICAgIGVuZAorLQorLSAgICAgICAgZGVmIHNlbGYuZGVjb2RlKG1zZykgIyA6bm9kb2M6CistICAg ICAgICAgIGFkZHJlc3NlcyA9IG1zZy5nZXRfbGlzdCB7IElQdjQubmV3KG1zZy5nZXRfYnl0ZXMo NCkpIH0KKy0gICAgICAgICAgcmV0dXJuIHNlbGYubmV3KGFkZHJlc3NlcykKKy0gICAgICAgIGVu ZAorLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAgICAgIyAiaXB2NmhpbnQiIFN2Y1BhcmFt IC0tIElQdjYgYWRkcmVzcyBoaW50cworLQorLSAgICAgIGNsYXNzIElQdjZIaW50IDwgU3ZjUGFy YW0KKy0gICAgICAgIEtleU5hbWUgPSA6aXB2NmhpbnQKKy0gICAgICAgIEtleU51bWJlciA9IDYK Ky0gICAgICAgIENsYXNzSGFzaFtLZXlOYW1lXSA9IENsYXNzSGFzaFtLZXlOdW1iZXJdID0gc2Vs ZiAjIDpub2RvYzoKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFNldCBvZiBJUHY2IGFkZHJl c3Nlcy4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDphZGRyZXNzZXMKKy0KKy0gICAgICAgICMj CistICAgICAgICAjIEluaXRpYWxpemUgImlwdjZoaW50IiBTY3ZQYXJhbS4KKy0KKy0gICAgICAg IGRlZiBpbml0aWFsaXplKGFkZHJlc3NlcykKKy0gICAgICAgICAgQGFkZHJlc3NlcyA9IGFkZHJl c3Nlcy5tYXAge3xhZGRyZXNzfCBJUHY2LmNyZWF0ZShhZGRyZXNzKSB9CistICAgICAgICBlbmQK Ky0KKy0gICAgICAgIGRlZiBlbmNvZGUobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgQGFkZHJl c3Nlcy5lYWNoIGRvIHxhZGRyZXNzfAorLSAgICAgICAgICAgIG1zZy5wdXRfYnl0ZXMoYWRkcmVz cy5hZGRyZXNzKQorLSAgICAgICAgICBlbmQKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVm IHNlbGYuZGVjb2RlKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIGFkZHJlc3NlcyA9IG1zZy5n ZXRfbGlzdCB7IElQdjYubmV3KG1zZy5nZXRfYnl0ZXMoMTYpKSB9CistICAgICAgICAgIHJldHVy biBzZWxmLm5ldyhhZGRyZXNzZXMpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAg ICAjIworLSAgICAgICMgImRvaHBhdGgiIFN2Y1BhcmFtIC0tIEROUyBvdmVyIEhUVFBTIHBhdGgg dGVtcGxhdGUgW1JGQzk0NjFdCistCistICAgICAgY2xhc3MgRG9IUGF0aCA8IFN2Y1BhcmFtCist ICAgICAgICBLZXlOYW1lID0gOmRvaHBhdGgKKy0gICAgICAgIEtleU51bWJlciA9IDcKKy0gICAg ICAgIENsYXNzSGFzaFtLZXlOYW1lXSA9IENsYXNzSGFzaFtLZXlOdW1iZXJdID0gc2VsZiAjIDpu b2RvYzoKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFVSSSB0ZW1wbGF0ZSBmb3IgRG9IIHF1 ZXJpZXMuCistCistICAgICAgICBhdHRyX3JlYWRlciA6dGVtcGxhdGUKKy0KKy0gICAgICAgICMj CistICAgICAgICAjIEluaXRpYWxpemUgImRvaHBhdGgiIFNjdlBhcmFtLgorLQorLSAgICAgICAg ZGVmIGluaXRpYWxpemUodGVtcGxhdGUpCistICAgICAgICAgIEB0ZW1wbGF0ZSA9IHRlbXBsYXRl LmVuY29kZSgndXRmLTgnKQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgZW5jb2RlKG1z ZykgIyA6bm9kb2M6CistICAgICAgICAgIG1zZy5wdXRfYnl0ZXMoQHRlbXBsYXRlKQorLSAgICAg ICAgZW5kCistCistICAgICAgICBkZWYgc2VsZi5kZWNvZGUobXNnKSAjIDpub2RvYzoKKy0gICAg ICAgICAgdGVtcGxhdGUgPSBtc2cuZ2V0X2J5dGVzLmZvcmNlX2VuY29kaW5nKCd1dGYtOCcpCist ICAgICAgICAgIHJldHVybiBzZWxmLm5ldyh0ZW1wbGF0ZSkKKy0gICAgICAgIGVuZAorLSAgICAg IGVuZAorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBBIEROUyBxdWVyeSBhYnN0cmFjdCBj bGFzcy4KKy0KKy0gICAgY2xhc3MgUXVlcnkKKy0gICAgICBkZWYgZW5jb2RlX3JkYXRhKG1zZykg IyA6bm9kb2M6CistICAgICAgICByYWlzZSBFbmNvZGVFcnJvci5uZXcoIiN7c2VsZi5jbGFzc30g aXMgcXVlcnkuIikKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgc2VsZi5kZWNvZGVfcmRhdGEo bXNnKSAjIDpub2RvYzoKKy0gICAgICAgIHJhaXNlIERlY29kZUVycm9yLm5ldygiI3tzZWxmLmNs YXNzfSBpcyBxdWVyeS4iKQorLSAgICAgIGVuZAorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAg IyBBIEROUyByZXNvdXJjZSBhYnN0cmFjdCBjbGFzcy4KKy0KKy0gICAgY2xhc3MgUmVzb3VyY2Ug PCBRdWVyeQorLQorLSAgICAgICMjCistICAgICAgIyBSZW1haW5pbmcgVGltZSBUbyBMaXZlIGZv ciB0aGlzIFJlc291cmNlLgorLQorLSAgICAgIGF0dHJfcmVhZGVyIDp0dGwKKy0KKy0gICAgICBD bGFzc0hhc2ggPSBNb2R1bGUubmV3IGRvCistICAgICAgICBtb2R1bGVfZnVuY3Rpb24KKy0KKy0g ICAgICAgIGRlZiBbXT0odHlwZV9jbGFzc192YWx1ZSwga2xhc3MpCistICAgICAgICAgIHR5cGVf dmFsdWUsIGNsYXNzX3ZhbHVlID0gdHlwZV9jbGFzc192YWx1ZQorLSAgICAgICAgICBSZXNvdXJj ZS5jb25zdF9zZXQoOiJUeXBlI3t0eXBlX3ZhbHVlfV9DbGFzcyN7Y2xhc3NfdmFsdWV9Iiwga2xh c3MpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgZW5jb2RlX3JkYXRh KG1zZykgIyA6bm9kb2M6CistICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLm5ldwor LSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBzZWxmLmRlY29kZV9yZGF0YShtc2cpICMgOm5vZG9j OgorLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvci5uZXcKKy0gICAgICBlbmQKKy0K Ky0gICAgICBkZWYgPT0ob3RoZXIpICMgOm5vZG9jOgorLSAgICAgICAgcmV0dXJuIGZhbHNlIHVu bGVzcyBzZWxmLmNsYXNzID09IG90aGVyLmNsYXNzCistICAgICAgICBzX2l2YXJzID0gc2VsZi5p bnN0YW5jZV92YXJpYWJsZXMKKy0gICAgICAgIHNfaXZhcnMuc29ydCEKKy0gICAgICAgIHNfaXZh cnMuZGVsZXRlIDpAdHRsCistICAgICAgICBvX2l2YXJzID0gb3RoZXIuaW5zdGFuY2VfdmFyaWFi bGVzCistICAgICAgICBvX2l2YXJzLnNvcnQhCistICAgICAgICBvX2l2YXJzLmRlbGV0ZSA6QHR0 bAorLSAgICAgICAgcmV0dXJuIHNfaXZhcnMgPT0gb19pdmFycyAmJgorLSAgICAgICAgICBzX2l2 YXJzLmNvbGxlY3Qge3xuYW1lfCBzZWxmLmluc3RhbmNlX3ZhcmlhYmxlX2dldCBuYW1lfSA9PQor LSAgICAgICAgICAgIG9faXZhcnMuY29sbGVjdCB7fG5hbWV8IG90aGVyLmluc3RhbmNlX3Zhcmlh YmxlX2dldCBuYW1lfQorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBlcWw/KG90aGVyKSAjIDpu b2RvYzoKKy0gICAgICAgIHJldHVybiBzZWxmID09IG90aGVyCistICAgICAgZW5kCistCistICAg ICAgZGVmIGhhc2ggIyA6bm9kb2M6CistICAgICAgICBoID0gMAorLSAgICAgICAgdmFycyA9IHNl bGYuaW5zdGFuY2VfdmFyaWFibGVzCistICAgICAgICB2YXJzLmRlbGV0ZSA6QHR0bAorLSAgICAg ICAgdmFycy5lYWNoIHt8bmFtZXwKKy0gICAgICAgICAgaCBePSBzZWxmLmluc3RhbmNlX3Zhcmlh YmxlX2dldChuYW1lKS5oYXNoCistICAgICAgICB9CistICAgICAgICByZXR1cm4gaAorLSAgICAg IGVuZAorLQorLSAgICAgIGRlZiBzZWxmLmdldF9jbGFzcyh0eXBlX3ZhbHVlLCBjbGFzc192YWx1 ZSkgIyA6bm9kb2M6CistICAgICAgICBjYWNoZSA9IDoiVHlwZSN7dHlwZV92YWx1ZX1fQ2xhc3Mj e2NsYXNzX3ZhbHVlfSIKKy0KKy0gICAgICAgIHJldHVybiAoY29uc3RfZGVmaW5lZD8oY2FjaGUp ICYmIGNvbnN0X2dldChjYWNoZSkpIHx8CistICAgICAgICAgICAgICAgR2VuZXJpYy5jcmVhdGUo dHlwZV92YWx1ZSwgY2xhc3NfdmFsdWUpCistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAg ICAjIEEgZ2VuZXJpYyByZXNvdXJjZSBhYnN0cmFjdCBjbGFzcy4KKy0KKy0gICAgICBjbGFzcyBH ZW5lcmljIDwgUmVzb3VyY2UKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIENyZWF0ZXMgYSBu ZXcgZ2VuZXJpYyByZXNvdXJjZS4KKy0KKy0gICAgICAgIGRlZiBpbml0aWFsaXplKGRhdGEpCist ICAgICAgICAgIEBkYXRhID0gZGF0YQorLSAgICAgICAgZW5kCistCistICAgICAgICAjIworLSAg ICAgICAgIyBEYXRhIGZvciB0aGlzIGdlbmVyaWMgcmVzb3VyY2UuCistCistICAgICAgICBhdHRy X3JlYWRlciA6ZGF0YQorLQorLSAgICAgICAgZGVmIGVuY29kZV9yZGF0YShtc2cpICMgOm5vZG9j OgorLSAgICAgICAgICBtc2cucHV0X2J5dGVzKGRhdGEpCistICAgICAgICBlbmQKKy0KKy0gICAg ICAgIGRlZiBzZWxmLmRlY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICByZXR1 cm4gc2VsZi5uZXcobXNnLmdldF9ieXRlcykKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVm IHNlbGYuY3JlYXRlKHR5cGVfdmFsdWUsIGNsYXNzX3ZhbHVlKSAjIDpub2RvYzoKKy0gICAgICAg ICAgYyA9IENsYXNzLm5ldyhHZW5lcmljKQorLSAgICAgICAgICBjLmNvbnN0X3NldCg6VHlwZVZh bHVlLCB0eXBlX3ZhbHVlKQorLSAgICAgICAgICBjLmNvbnN0X3NldCg6Q2xhc3NWYWx1ZSwgY2xh c3NfdmFsdWUpCistICAgICAgICAgIEdlbmVyaWMuY29uc3Rfc2V0KCJUeXBlI3t0eXBlX3ZhbHVl fV9DbGFzcyN7Y2xhc3NfdmFsdWV9IiwgYykKKy0gICAgICAgICAgQ2xhc3NIYXNoW1t0eXBlX3Zh bHVlLCBjbGFzc192YWx1ZV1dID0gYworLSAgICAgICAgICByZXR1cm4gYworLSAgICAgICAgZW5k CistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAjIERvbWFpbiBOYW1lIHJlc291cmNl IGFic3RyYWN0IGNsYXNzLgorLQorLSAgICAgIGNsYXNzIERvbWFpbk5hbWUgPCBSZXNvdXJjZQor LQorLSAgICAgICAgIyMKKy0gICAgICAgICMgQ3JlYXRlcyBhIG5ldyBEb21haW5OYW1lIGZyb20g K25hbWUrLgorLQorLSAgICAgICAgZGVmIGluaXRpYWxpemUobmFtZSkKKy0gICAgICAgICAgQG5h bWUgPSBuYW1lCistICAgICAgICBlbmQKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFRoZSBu YW1lIG9mIHRoaXMgRG9tYWluTmFtZS4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDpuYW1lCist CistICAgICAgICBkZWYgZW5jb2RlX3JkYXRhKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIG1z Zy5wdXRfbmFtZShAbmFtZSkKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHNlbGYuZGVj b2RlX3JkYXRhKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIHJldHVybiBzZWxmLm5ldyhtc2cu Z2V0X25hbWUpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIFN0YW5kYXJk IChjbGFzcyBnZW5lcmljKSBSUnMKKy0KKy0gICAgICBDbGFzc1ZhbHVlID0gbmlsICMgOm5vZG9j OgorLQorLSAgICAgICMjCistICAgICAgIyBBbiBhdXRob3JpdGF0aXZlIG5hbWUgc2VydmVyLgor LQorLSAgICAgIGNsYXNzIE5TIDwgRG9tYWluTmFtZQorLSAgICAgICAgVHlwZVZhbHVlID0gMiAj IDpub2RvYzoKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgVGhlIGNhbm9uaWNh bCBuYW1lIGZvciBhbiBhbGlhcy4KKy0KKy0gICAgICBjbGFzcyBDTkFNRSA8IERvbWFpbk5hbWUK Ky0gICAgICAgIFR5cGVWYWx1ZSA9IDUgIyA6bm9kb2M6CistICAgICAgZW5kCistCistICAgICAg IyMKKy0gICAgICAjIFN0YXJ0IE9mIEF1dGhvcml0eSByZXNvdXJjZS4KKy0KKy0gICAgICBjbGFz cyBTT0EgPCBSZXNvdXJjZQorLQorLSAgICAgICAgVHlwZVZhbHVlID0gNiAjIDpub2RvYzoKKy0K Ky0gICAgICAgICMjCistICAgICAgICAjIENyZWF0ZXMgYSBuZXcgU09BIHJlY29yZC4gIFNlZSB0 aGUgYXR0ciBkb2N1bWVudGF0aW9uIGZvciB0aGUKKy0gICAgICAgICMgZGV0YWlscyBvZiBlYWNo IGFyZ3VtZW50LgorLQorLSAgICAgICAgZGVmIGluaXRpYWxpemUobW5hbWUsIHJuYW1lLCBzZXJp YWwsIHJlZnJlc2gsIHJldHJ5XywgZXhwaXJlLCBtaW5pbXVtKQorLSAgICAgICAgICBAbW5hbWUg PSBtbmFtZQorLSAgICAgICAgICBAcm5hbWUgPSBybmFtZQorLSAgICAgICAgICBAc2VyaWFsID0g c2VyaWFsCistICAgICAgICAgIEByZWZyZXNoID0gcmVmcmVzaAorLSAgICAgICAgICBAcmV0cnkg PSByZXRyeV8KKy0gICAgICAgICAgQGV4cGlyZSA9IGV4cGlyZQorLSAgICAgICAgICBAbWluaW11 bSA9IG1pbmltdW0KKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgTmFt ZSBvZiB0aGUgaG9zdCB3aGVyZSB0aGUgbWFzdGVyIHpvbmUgZmlsZSBmb3IgdGhpcyB6b25lIHJl c2lkZXMuCistCistICAgICAgICBhdHRyX3JlYWRlciA6bW5hbWUKKy0KKy0gICAgICAgICMjCist ICAgICAgICAjIFRoZSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHRoaXMgZG9tYWluIG5hbWUuCist CistICAgICAgICBhdHRyX3JlYWRlciA6cm5hbWUKKy0KKy0gICAgICAgICMjCistICAgICAgICAj IFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgem9uZSBmaWxlLgorLQorLSAgICAgICAgYXR0cl9y ZWFkZXIgOnNlcmlhbAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgSG93IG9mdGVuLCBpbiBz ZWNvbmRzLCBhIHNlY29uZGFyeSBuYW1lIHNlcnZlciBpcyB0byBjaGVjayBmb3IKKy0gICAgICAg ICMgdXBkYXRlcyBmcm9tIHRoZSBwcmltYXJ5IG5hbWUgc2VydmVyLgorLQorLSAgICAgICAgYXR0 cl9yZWFkZXIgOnJlZnJlc2gKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIEhvdyBvZnRlbiwg aW4gc2Vjb25kcywgYSBzZWNvbmRhcnkgbmFtZSBzZXJ2ZXIgaXMgdG8gcmV0cnkgYWZ0ZXIgYQor LSAgICAgICAgIyBmYWlsdXJlIHRvIGNoZWNrIGZvciBhIHJlZnJlc2guCistCistICAgICAgICBh dHRyX3JlYWRlciA6cmV0cnkKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFRpbWUgaW4gc2Vj b25kcyB0aGF0IGEgc2Vjb25kYXJ5IG5hbWUgc2VydmVyIGlzIHRvIHVzZSB0aGUgZGF0YQorLSAg ICAgICAgIyBiZWZvcmUgcmVmcmVzaGluZyBmcm9tIHRoZSBwcmltYXJ5IG5hbWUgc2VydmVyLgor LQorLSAgICAgICAgYXR0cl9yZWFkZXIgOmV4cGlyZQorLQorLSAgICAgICAgIyMKKy0gICAgICAg ICMgVGhlIG1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgdG8gYmUgdXNlZCBmb3IgVFRMIHZhbHVl cyBpbiBSUnMuCistCistICAgICAgICBhdHRyX3JlYWRlciA6bWluaW11bQorLQorLSAgICAgICAg ZGVmIGVuY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBtc2cucHV0X25hbWUo QG1uYW1lKQorLSAgICAgICAgICBtc2cucHV0X25hbWUoQHJuYW1lKQorLSAgICAgICAgICBtc2cu cHV0X3BhY2soJ05OTk5OJywgQHNlcmlhbCwgQHJlZnJlc2gsIEByZXRyeSwgQGV4cGlyZSwgQG1p bmltdW0pCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBzZWxmLmRlY29kZV9yZGF0YSht c2cpICMgOm5vZG9jOgorLSAgICAgICAgICBtbmFtZSA9IG1zZy5nZXRfbmFtZQorLSAgICAgICAg ICBybmFtZSA9IG1zZy5nZXRfbmFtZQorLSAgICAgICAgICBzZXJpYWwsIHJlZnJlc2gsIHJldHJ5 XywgZXhwaXJlLCBtaW5pbXVtID0gbXNnLmdldF91bnBhY2soJ05OTk5OJykKKy0gICAgICAgICAg cmV0dXJuIHNlbGYubmV3KAorLSAgICAgICAgICAgIG1uYW1lLCBybmFtZSwgc2VyaWFsLCByZWZy ZXNoLCByZXRyeV8sIGV4cGlyZSwgbWluaW11bSkKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAor LQorLSAgICAgICMjCistICAgICAgIyBBIFBvaW50ZXIgdG8gYW5vdGhlciBETlMgbmFtZS4KKy0K Ky0gICAgICBjbGFzcyBQVFIgPCBEb21haW5OYW1lCistICAgICAgICBUeXBlVmFsdWUgPSAxMiAj IDpub2RvYzoKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgSG9zdCBJbmZvcm1h dGlvbiByZXNvdXJjZS4KKy0KKy0gICAgICBjbGFzcyBISU5GTyA8IFJlc291cmNlCistCistICAg ICAgICBUeXBlVmFsdWUgPSAxMyAjIDpub2RvYzoKKy0KKy0gICAgICAgICMjCistICAgICAgICAj IENyZWF0ZXMgYSBuZXcgSElORk8gcnVubmluZyArb3MrIG9uICtjcHUrLgorLQorLSAgICAgICAg ZGVmIGluaXRpYWxpemUoY3B1LCBvcykKKy0gICAgICAgICAgQGNwdSA9IGNwdQorLSAgICAgICAg ICBAb3MgPSBvcworLSAgICAgICAgZW5kCistCistICAgICAgICAjIworLSAgICAgICAgIyBDUFUg YXJjaGl0ZWN0dXJlIGZvciB0aGlzIHJlc291cmNlLgorLQorLSAgICAgICAgYXR0cl9yZWFkZXIg OmNwdQorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgT3BlcmF0aW5nIHN5c3RlbSBmb3IgdGhp cyByZXNvdXJjZS4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDpvcworLQorLSAgICAgICAgZGVm IGVuY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBtc2cucHV0X3N0cmluZyhA Y3B1KQorLSAgICAgICAgICBtc2cucHV0X3N0cmluZyhAb3MpCistICAgICAgICBlbmQKKy0KKy0g ICAgICAgIGRlZiBzZWxmLmRlY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBj cHUgPSBtc2cuZ2V0X3N0cmluZworLSAgICAgICAgICBvcyA9IG1zZy5nZXRfc3RyaW5nCistICAg ICAgICAgIHJldHVybiBzZWxmLm5ldyhjcHUsIG9zKQorLSAgICAgICAgZW5kCistICAgICAgZW5k CistCistICAgICAgIyMKKy0gICAgICAjIE1haWxpbmcgbGlzdCBvciBtYWlsYm94IGluZm9ybWF0 aW9uLgorLQorLSAgICAgIGNsYXNzIE1JTkZPIDwgUmVzb3VyY2UKKy0KKy0gICAgICAgIFR5cGVW YWx1ZSA9IDE0ICMgOm5vZG9jOgorLQorLSAgICAgICAgZGVmIGluaXRpYWxpemUocm1haWxieCwg ZW1haWxieCkKKy0gICAgICAgICAgQHJtYWlsYnggPSBybWFpbGJ4CistICAgICAgICAgIEBlbWFp bGJ4ID0gZW1haWxieAorLSAgICAgICAgZW5kCistCistICAgICAgICAjIworLSAgICAgICAgIyBE b21haW4gbmFtZSByZXNwb25zaWJsZSBmb3IgdGhpcyBtYWlsIGxpc3Qgb3IgbWFpbGJveC4KKy0K Ky0gICAgICAgIGF0dHJfcmVhZGVyIDpybWFpbGJ4CistCistICAgICAgICAjIworLSAgICAgICAg IyBNYWlsYm94IHRvIHVzZSBmb3IgZXJyb3IgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgbWFpbCBs aXN0IG9yIG1haWxib3guCistCistICAgICAgICBhdHRyX3JlYWRlciA6ZW1haWxieAorLQorLSAg ICAgICAgZGVmIGVuY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBtc2cucHV0 X25hbWUoQHJtYWlsYngpCistICAgICAgICAgIG1zZy5wdXRfbmFtZShAZW1haWxieCkKKy0gICAg ICAgIGVuZAorLQorLSAgICAgICAgZGVmIHNlbGYuZGVjb2RlX3JkYXRhKG1zZykgIyA6bm9kb2M6 CistICAgICAgICAgIHJtYWlsYnggPSBtc2cuZ2V0X3N0cmluZworLSAgICAgICAgICBlbWFpbGJ4 ID0gbXNnLmdldF9zdHJpbmcKKy0gICAgICAgICAgcmV0dXJuIHNlbGYubmV3KHJtYWlsYngsIGVt YWlsYngpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMg TWFpbCBFeGNoYW5nZXIgcmVzb3VyY2UuCistCistICAgICAgY2xhc3MgTVggPCBSZXNvdXJjZQor LQorLSAgICAgICAgVHlwZVZhbHVlPSAxNSAjIDpub2RvYzoKKy0KKy0gICAgICAgICMjCistICAg ICAgICAjIENyZWF0ZXMgYSBuZXcgTVggcmVjb3JkIHdpdGggK3ByZWZlcmVuY2UrLCBhY2NlcHRp bmcgbWFpbCBhdAorLSAgICAgICAgIyArZXhjaGFuZ2UrLgorLQorLSAgICAgICAgZGVmIGluaXRp YWxpemUocHJlZmVyZW5jZSwgZXhjaGFuZ2UpCistICAgICAgICAgIEBwcmVmZXJlbmNlID0gcHJl ZmVyZW5jZQorLSAgICAgICAgICBAZXhjaGFuZ2UgPSBleGNoYW5nZQorLSAgICAgICAgZW5kCist CistICAgICAgICAjIworLSAgICAgICAgIyBUaGUgcHJlZmVyZW5jZSBmb3IgdGhpcyBNWC4KKy0K Ky0gICAgICAgIGF0dHJfcmVhZGVyIDpwcmVmZXJlbmNlCistCistICAgICAgICAjIworLSAgICAg ICAgIyBUaGUgaG9zdCBvZiB0aGlzIE1YLgorLQorLSAgICAgICAgYXR0cl9yZWFkZXIgOmV4Y2hh bmdlCistCistICAgICAgICBkZWYgZW5jb2RlX3JkYXRhKG1zZykgIyA6bm9kb2M6CistICAgICAg ICAgIG1zZy5wdXRfcGFjaygnbicsIEBwcmVmZXJlbmNlKQorLSAgICAgICAgICBtc2cucHV0X25h bWUoQGV4Y2hhbmdlKQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgc2VsZi5kZWNvZGVf cmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgcHJlZmVyZW5jZSwgPSBtc2cuZ2V0X3Vu cGFjaygnbicpCistICAgICAgICAgIGV4Y2hhbmdlID0gbXNnLmdldF9uYW1lCistICAgICAgICAg IHJldHVybiBzZWxmLm5ldyhwcmVmZXJlbmNlLCBleGNoYW5nZSkKKy0gICAgICAgIGVuZAorLSAg ICAgIGVuZAorLQorLSAgICAgICMjCistICAgICAgIyBVbnN0cnVjdHVyZWQgdGV4dCByZXNvdXJj ZS4KKy0KKy0gICAgICBjbGFzcyBUWFQgPCBSZXNvdXJjZQorLQorLSAgICAgICAgVHlwZVZhbHVl ID0gMTYgIyA6bm9kb2M6CistCistICAgICAgICBkZWYgaW5pdGlhbGl6ZShmaXJzdF9zdHJpbmcs ICpyZXN0X3N0cmluZ3MpCistICAgICAgICAgIEBzdHJpbmdzID0gW2ZpcnN0X3N0cmluZywgKnJl c3Rfc3RyaW5nc10KKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgUmV0 dXJucyBhbiBBcnJheSBvZiBTdHJpbmdzIGZvciB0aGlzIFRYVCByZWNvcmQuCistCistICAgICAg ICBhdHRyX3JlYWRlciA6c3RyaW5ncworLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgUmV0dXJu cyB0aGUgY29uY2F0ZW5hdGVkIHN0cmluZyBmcm9tICtzdHJpbmdzKy4KKy0KKy0gICAgICAgIGRl ZiBkYXRhCistICAgICAgICAgIEBzdHJpbmdzLmpvaW4oIiIpCistICAgICAgICBlbmQKKy0KKy0g ICAgICAgIGRlZiBlbmNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgbXNnLnB1 dF9zdHJpbmdfbGlzdChAc3RyaW5ncykKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHNl bGYuZGVjb2RlX3JkYXRhKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIHN0cmluZ3MgPSBtc2cu Z2V0X3N0cmluZ19saXN0CistICAgICAgICAgIHJldHVybiBzZWxmLm5ldygqc3RyaW5ncykKKy0g ICAgICAgIGVuZAorLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAgICAgIyBMb2NhdGlvbiBy ZXNvdXJjZQorLQorLSAgICAgIGNsYXNzIExPQyA8IFJlc291cmNlCistCistICAgICAgICBUeXBl VmFsdWUgPSAyOSAjIDpub2RvYzoKKy0KKy0gICAgICAgIGRlZiBpbml0aWFsaXplKHZlcnNpb24s IHNzaXplLCBocHJlY2lzaW9uLCB2cHJlY2lzaW9uLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbHRp dHVkZSkKKy0gICAgICAgICAgQHZlcnNpb24gICAgPSB2ZXJzaW9uCistICAgICAgICAgIEBzc2l6 ZSAgICAgID0gR2VtOjpSZXNvbHY6OkxPQzo6U2l6ZS5jcmVhdGUoc3NpemUpCistICAgICAgICAg IEBocHJlY2lzaW9uID0gR2VtOjpSZXNvbHY6OkxPQzo6U2l6ZS5jcmVhdGUoaHByZWNpc2lvbikK Ky0gICAgICAgICAgQHZwcmVjaXNpb24gPSBHZW06OlJlc29sdjo6TE9DOjpTaXplLmNyZWF0ZSh2 cHJlY2lzaW9uKQorLSAgICAgICAgICBAbGF0aXR1ZGUgICA9IEdlbTo6UmVzb2x2OjpMT0M6OkNv b3JkLmNyZWF0ZShsYXRpdHVkZSkKKy0gICAgICAgICAgQGxvbmdpdHVkZSAgPSBHZW06OlJlc29s djo6TE9DOjpDb29yZC5jcmVhdGUobG9uZ2l0dWRlKQorLSAgICAgICAgICBAYWx0aXR1ZGUgICA9 IEdlbTo6UmVzb2x2OjpMT0M6OkFsdC5jcmVhdGUoYWx0aXR1ZGUpCistICAgICAgICBlbmQKKy0K Ky0gICAgICAgICMjCistICAgICAgICAjIFJldHVybnMgdGhlIHZlcnNpb24gdmFsdWUgZm9yIHRo aXMgTE9DIHJlY29yZCB3aGljaCBzaG91bGQgYWx3YXlzIGJlIDAwCistCistICAgICAgICBhdHRy X3JlYWRlciA6dmVyc2lvbgorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgVGhlIHNwaGVyaWNh bCBzaXplIG9mIHRoaXMgTE9DCistICAgICAgICAjIGluIG1ldGVycyB1c2luZyBzY2llbnRpZmlj IG5vdGF0aW9uIGFzIDIgaW50ZWdlcnMgb2YgWGVZCistCistICAgICAgICBhdHRyX3JlYWRlciA6 c3NpemUKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFRoZSBob3Jpem9udGFsIHByZWNpc2lv biB1c2luZyBzc2l6ZSB0eXBlIHZhbHVlcworLSAgICAgICAgIyBpbiBtZXRlcnMgdXNpbmcgc2Np ZW50aWZpYyBub3RhdGlvbiBhcyAyIGludGVnZXJzIG9mIFhlWQorLSAgICAgICAgIyBmb3IgcHJl Y2lzaW9uIHVzZSB2YWx1ZS8yIGUuZy4gMm0gPSArLy0xbQorLQorLSAgICAgICAgYXR0cl9yZWFk ZXIgOmhwcmVjaXNpb24KKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFRoZSB2ZXJ0aWNhbCBw cmVjaXNpb24gdXNpbmcgc3NpemUgdHlwZSB2YWx1ZXMKKy0gICAgICAgICMgaW4gbWV0ZXJzIHVz aW5nIHNjaWVudGlmaWMgbm90YXRpb24gYXMgMiBpbnRlZ2VycyBvZiBYZVkKKy0gICAgICAgICMg Zm9yIHByZWNpc2lvbiB1c2UgdmFsdWUvMiBlLmcuIDJtID0gKy8tMW0KKy0KKy0gICAgICAgIGF0 dHJfcmVhZGVyIDp2cHJlY2lzaW9uCistCistICAgICAgICAjIworLSAgICAgICAgIyBUaGUgbGF0 aXR1ZGUgZm9yIHRoaXMgTE9DIHdoZXJlIDIqKjMxIGlzIHRoZSBlcXVhdG9yCistICAgICAgICAj IGluIHRob3VzYW5kdGhzIG9mIGFuIGFyYyBzZWNvbmQgYXMgYW4gdW5zaWduZWQgMzJiaXQgaW50 ZWdlcgorLQorLSAgICAgICAgYXR0cl9yZWFkZXIgOmxhdGl0dWRlCistCistICAgICAgICAjIwor LSAgICAgICAgIyBUaGUgbG9uZ2l0dWRlIGZvciB0aGlzIExPQyB3aGVyZSAyKiozMSBpcyB0aGUg cHJpbWUgbWVyaWRpYW4KKy0gICAgICAgICMgaW4gdGhvdXNhbmR0aHMgb2YgYW4gYXJjIHNlY29u ZCBhcyBhbiB1bnNpZ25lZCAzMmJpdCBpbnRlZ2VyCistCistICAgICAgICBhdHRyX3JlYWRlciA6 bG9uZ2l0dWRlCistCistICAgICAgICAjIworLSAgICAgICAgIyBUaGUgYWx0aXR1ZGUgb2YgdGhl IExPQyBhYm92ZSBhIHJlZmVyZW5jZSBzcGhlcmUgd2hvc2Ugc3VyZmFjZSBzaXRzIDEwMGttIGJl bG93IHRoZSBXR1M4NCBzcGhlcm9pZAorLSAgICAgICAgIyBpbiBjZW50aW1ldGVycyBhcyBhbiB1 bnNpZ25lZCAzMmJpdCBpbnRlZ2VyCistCistICAgICAgICBhdHRyX3JlYWRlciA6YWx0aXR1ZGUK Ky0KKy0gICAgICAgIGRlZiBlbmNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAg bXNnLnB1dF9ieXRlcyhAdmVyc2lvbikKKy0gICAgICAgICAgbXNnLnB1dF9ieXRlcyhAc3NpemUu c2NhbGFyKQorLSAgICAgICAgICBtc2cucHV0X2J5dGVzKEBocHJlY2lzaW9uLnNjYWxhcikKKy0g ICAgICAgICAgbXNnLnB1dF9ieXRlcyhAdnByZWNpc2lvbi5zY2FsYXIpCistICAgICAgICAgIG1z Zy5wdXRfYnl0ZXMoQGxhdGl0dWRlLmNvb3JkaW5hdGVzKQorLSAgICAgICAgICBtc2cucHV0X2J5 dGVzKEBsb25naXR1ZGUuY29vcmRpbmF0ZXMpCistICAgICAgICAgIG1zZy5wdXRfYnl0ZXMoQGFs dGl0dWRlLmFsdGl0dWRlKQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgc2VsZi5kZWNv ZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgdmVyc2lvbiAgICA9IG1zZy5nZXRf Ynl0ZXMoMSkKKy0gICAgICAgICAgc3NpemUgICAgICA9IG1zZy5nZXRfYnl0ZXMoMSkKKy0gICAg ICAgICAgaHByZWNpc2lvbiA9IG1zZy5nZXRfYnl0ZXMoMSkKKy0gICAgICAgICAgdnByZWNpc2lv biA9IG1zZy5nZXRfYnl0ZXMoMSkKKy0gICAgICAgICAgbGF0aXR1ZGUgICA9IG1zZy5nZXRfYnl0 ZXMoNCkKKy0gICAgICAgICAgbG9uZ2l0dWRlICA9IG1zZy5nZXRfYnl0ZXMoNCkKKy0gICAgICAg ICAgYWx0aXR1ZGUgICA9IG1zZy5nZXRfYnl0ZXMoNCkKKy0gICAgICAgICAgcmV0dXJuIHNlbGYu bmV3KAorLSAgICAgICAgICAgIHZlcnNpb24sCistICAgICAgICAgICAgR2VtOjpSZXNvbHY6OkxP Qzo6U2l6ZS5uZXcoc3NpemUpLAorLSAgICAgICAgICAgIEdlbTo6UmVzb2x2OjpMT0M6OlNpemUu bmV3KGhwcmVjaXNpb24pLAorLSAgICAgICAgICAgIEdlbTo6UmVzb2x2OjpMT0M6OlNpemUubmV3 KHZwcmVjaXNpb24pLAorLSAgICAgICAgICAgIEdlbTo6UmVzb2x2OjpMT0M6OkNvb3JkLm5ldyhs YXRpdHVkZSwibGF0IiksCistICAgICAgICAgICAgR2VtOjpSZXNvbHY6OkxPQzo6Q29vcmQubmV3 KGxvbmdpdHVkZSwibG9uIiksCistICAgICAgICAgICAgR2VtOjpSZXNvbHY6OkxPQzo6QWx0Lm5l dyhhbHRpdHVkZSkKKy0gICAgICAgICAgKQorLSAgICAgICAgZW5kCistICAgICAgZW5kCistCist ICAgICAgIyMKKy0gICAgICAjIEEgUXVlcnkgdHlwZSByZXF1ZXN0aW5nIGFueSBSUi4KKy0KKy0g ICAgICBjbGFzcyBBTlkgPCBRdWVyeQorLSAgICAgICAgVHlwZVZhbHVlID0gMjU1ICMgOm5vZG9j OgorLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAgICAgIyBDQUEgcmVzb3VyY2UgcmVjb3Jk IGRlZmluZWQgaW4gUkZDIDg2NTkKKy0gICAgICAjCistICAgICAgIyBUaGVzZSByZWNvcmRzIGlk ZW50aWZ5IGNlcnRpZmljYXRlIGF1dGhvcml0eSBhbGxvd2VkIHRvIGlzc3VlCistICAgICAgIyBj ZXJ0aWZpY2F0ZXMgZm9yIHRoZSBnaXZlbiBkb21haW4uCistCistICAgICAgY2xhc3MgQ0FBIDwg UmVzb3VyY2UKKy0gICAgICAgIFR5cGVWYWx1ZSA9IDI1NworLQorLSAgICAgICAgIyMKKy0gICAg ICAgICMgQ3JlYXRlcyBhIG5ldyBDQUEgZm9yICtmbGFncyssICt0YWcrIGFuZCArdmFsdWUrLgor LQorLSAgICAgICAgZGVmIGluaXRpYWxpemUoZmxhZ3MsIHRhZywgdmFsdWUpCistICAgICAgICAg IHVubGVzcyAoMC4uMjU1KSA9PT0gZmxhZ3MKKy0gICAgICAgICAgICByYWlzZSBBcmd1bWVudEVy cm9yLm5ldygnZmxhZ3MgbXVzdCBiZSBhbiBJbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjU1JykKKy0g ICAgICAgICAgZW5kCistICAgICAgICAgIHVubGVzcyAoMS4uMTUpID09PSB0YWcuYnl0ZXNpemUK Ky0gICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLm5ldygnbGVuZ3RoIG9mIHRhZyBtdXN0 IGJlIGJldHdlZW4gMSBhbmQgMTUnKQorLSAgICAgICAgICBlbmQKKy0KKy0gICAgICAgICAgQGZs YWdzID0gZmxhZ3MKKy0gICAgICAgICAgQHRhZyA9IHRhZworLSAgICAgICAgICBAdmFsdWUgPSB2 YWx1ZQorLSAgICAgICAgZW5kCistCistICAgICAgICAjIworLSAgICAgICAgIyBGbGFncyBmb3Ig dGhpcyBwcm9wZXJ0eToKKy0gICAgICAgICMgLSBCaXQgMCA6IDAgPSBub3QgY3JpdGljYWwsIDEg PSBjcml0aWNhbAorLQorLSAgICAgICAgYXR0cl9yZWFkZXIgOmZsYWdzCistCistICAgICAgICAj IworLSAgICAgICAgIyBQcm9wZXJ0eSB0YWcgKCJpc3N1ZSIsICJpc3N1ZXdpbGQiLCAiaW9kZWYi Li4uKS4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDp0YWcKKy0KKy0gICAgICAgICMjCistICAg ICAgICAjIFByb3BlcnR5IHZhbHVlLgorLQorLSAgICAgICAgYXR0cl9yZWFkZXIgOnZhbHVlCist CistICAgICAgICAjIworLSAgICAgICAgIyBXaGV0aGVyIHRoZSBjcml0aWNhbCBmbGFnIGlzIHNl dCBvbiB0aGlzIHByb3BlcnR5LgorLQorLSAgICAgICAgZGVmIGNyaXRpY2FsPworLSAgICAgICAg ICBmbGFncyAmIDB4ODAgIT0gMAorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgZW5jb2Rl X3JkYXRhKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIG1zZy5wdXRfcGFjaygnQycsIEBmbGFn cykKKy0gICAgICAgICAgbXNnLnB1dF9zdHJpbmcoQHRhZykKKy0gICAgICAgICAgbXNnLnB1dF9i eXRlcyhAdmFsdWUpCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBzZWxmLmRlY29kZV9y ZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBmbGFncywgPSBtc2cuZ2V0X3VucGFjaygn QycpCistICAgICAgICAgIHRhZyA9IG1zZy5nZXRfc3RyaW5nCistICAgICAgICAgIHZhbHVlID0g bXNnLmdldF9ieXRlcworLSAgICAgICAgICBzZWxmLm5ldyBmbGFncywgdGFnLCB2YWx1ZQorLSAg ICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgQ2xhc3NJbnNlbnNpdGl2ZVR5cGVzID0g WyAjIDpub2RvYzoKKy0gICAgICAgIE5TLCBDTkFNRSwgU09BLCBQVFIsIEhJTkZPLCBNSU5GTywg TVgsIFRYVCwgTE9DLCBBTlksIENBQQorLSAgICAgIF0KKy0KKy0gICAgICAjIworLSAgICAgICMg bW9kdWxlIElOIGNvbnRhaW5zIEFSUEEgSW50ZXJuZXQgc3BlY2lmaWMgUlJzLgorLQorLSAgICAg IG1vZHVsZSBJTgorLQorLSAgICAgICAgQ2xhc3NWYWx1ZSA9IDEgIyA6bm9kb2M6CistCistICAg ICAgICBDbGFzc0luc2Vuc2l0aXZlVHlwZXMuZWFjaCB7fHN8CistICAgICAgICAgIGMgPSBDbGFz cy5uZXcocykKKy0gICAgICAgICAgYy5jb25zdF9zZXQoOlR5cGVWYWx1ZSwgczo6VHlwZVZhbHVl KQorLSAgICAgICAgICBjLmNvbnN0X3NldCg6Q2xhc3NWYWx1ZSwgQ2xhc3NWYWx1ZSkKKy0gICAg ICAgICAgQ2xhc3NIYXNoW1tzOjpUeXBlVmFsdWUsIENsYXNzVmFsdWVdXSA9IGMKKy0gICAgICAg ICAgc2VsZi5jb25zdF9zZXQocy5uYW1lLnN1YigvLio6Oi8sICcnKSwgYykKKy0gICAgICAgIH0K Ky0KKy0gICAgICAgICMjCistICAgICAgICAjIElQdjQgQWRkcmVzcyByZXNvdXJjZQorLQorLSAg ICAgICAgY2xhc3MgQSA8IFJlc291cmNlCistICAgICAgICAgIFR5cGVWYWx1ZSA9IDEKKy0gICAg ICAgICAgQ2xhc3NWYWx1ZSA9IElOOjpDbGFzc1ZhbHVlCistICAgICAgICAgIENsYXNzSGFzaFtb VHlwZVZhbHVlLCBDbGFzc1ZhbHVlXV0gPSBzZWxmICMgOm5vZG9jOgorLQorLSAgICAgICAgICAj IworLSAgICAgICAgICAjIENyZWF0ZXMgYSBuZXcgQSBmb3IgK2FkZHJlc3MrLgorLQorLSAgICAg ICAgICBkZWYgaW5pdGlhbGl6ZShhZGRyZXNzKQorLSAgICAgICAgICAgIEBhZGRyZXNzID0gSVB2 NC5jcmVhdGUoYWRkcmVzcykKKy0gICAgICAgICAgZW5kCistCistICAgICAgICAgICMjCistICAg ICAgICAgICMgVGhlIEdlbTo6UmVzb2x2OjpJUHY0IGFkZHJlc3MgZm9yIHRoaXMgQS4KKy0KKy0g ICAgICAgICAgYXR0cl9yZWFkZXIgOmFkZHJlc3MKKy0KKy0gICAgICAgICAgZGVmIGVuY29kZV9y ZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICAgIG1zZy5wdXRfYnl0ZXMoQGFkZHJlc3Mu YWRkcmVzcykKKy0gICAgICAgICAgZW5kCistCistICAgICAgICAgIGRlZiBzZWxmLmRlY29kZV9y ZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICAgIHJldHVybiBzZWxmLm5ldyhJUHY0Lm5l dyhtc2cuZ2V0X2J5dGVzKDQpKSkKKy0gICAgICAgICAgZW5kCistICAgICAgICBlbmQKKy0KKy0g ICAgICAgICMjCistICAgICAgICAjIFdlbGwgS25vd24gU2VydmljZSByZXNvdXJjZS4KKy0KKy0g ICAgICAgIGNsYXNzIFdLUyA8IFJlc291cmNlCistICAgICAgICAgIFR5cGVWYWx1ZSA9IDExCist ICAgICAgICAgIENsYXNzVmFsdWUgPSBJTjo6Q2xhc3NWYWx1ZQorLSAgICAgICAgICBDbGFzc0hh c2hbW1R5cGVWYWx1ZSwgQ2xhc3NWYWx1ZV1dID0gc2VsZiAjIDpub2RvYzoKKy0KKy0gICAgICAg ICAgZGVmIGluaXRpYWxpemUoYWRkcmVzcywgcHJvdG9jb2wsIGJpdG1hcCkKKy0gICAgICAgICAg ICBAYWRkcmVzcyA9IElQdjQuY3JlYXRlKGFkZHJlc3MpCistICAgICAgICAgICAgQHByb3RvY29s ID0gcHJvdG9jb2wKKy0gICAgICAgICAgICBAYml0bWFwID0gYml0bWFwCistICAgICAgICAgIGVu ZAorLQorLSAgICAgICAgICAjIworLSAgICAgICAgICAjIFRoZSBob3N0IHRoZXNlIHNlcnZpY2Vz IHJ1biBvbi4KKy0KKy0gICAgICAgICAgYXR0cl9yZWFkZXIgOmFkZHJlc3MKKy0KKy0gICAgICAg ICAgIyMKKy0gICAgICAgICAgIyBJUCBwcm90b2NvbCBudW1iZXIgZm9yIHRoZXNlIHNlcnZpY2Vz LgorLQorLSAgICAgICAgICBhdHRyX3JlYWRlciA6cHJvdG9jb2wKKy0KKy0gICAgICAgICAgIyMK Ky0gICAgICAgICAgIyBBIGJpdCBtYXAgb2YgZW5hYmxlZCBzZXJ2aWNlcyBvbiB0aGlzIGhvc3Qu CistICAgICAgICAgICMKKy0gICAgICAgICAgIyBJZiBwcm90b2NvbCBpcyA2IChUQ1ApIHRoZW4g dGhlIDI2dGggYml0IGNvcnJlc3BvbmRzIHRvIHRoZSBTTVRQCistICAgICAgICAgICMgc2Vydmlj ZSAocG9ydCAyNSkuICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gYW4gU01UUCBzZXJ2ZXIgc2hv dWxkCistICAgICAgICAgICMgYmUgbGlzdGVuaW5nIG9uIFRDUCBwb3J0IDI1OyBpZiB6ZXJvLCBT TVRQIHNlcnZpY2UgaXMgbm90CistICAgICAgICAgICMgc3VwcG9ydGVkLgorLQorLSAgICAgICAg ICBhdHRyX3JlYWRlciA6Yml0bWFwCistCistICAgICAgICAgIGRlZiBlbmNvZGVfcmRhdGEobXNn KSAjIDpub2RvYzoKKy0gICAgICAgICAgICBtc2cucHV0X2J5dGVzKEBhZGRyZXNzLmFkZHJlc3Mp CistICAgICAgICAgICAgbXNnLnB1dF9wYWNrKCJuIiwgQHByb3RvY29sKQorLSAgICAgICAgICAg IG1zZy5wdXRfYnl0ZXMoQGJpdG1hcCkKKy0gICAgICAgICAgZW5kCistCistICAgICAgICAgIGRl ZiBzZWxmLmRlY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICAgIGFkZHJlc3Mg PSBJUHY0Lm5ldyhtc2cuZ2V0X2J5dGVzKDQpKQorLSAgICAgICAgICAgIHByb3RvY29sLCA9IG1z Zy5nZXRfdW5wYWNrKCJuIikKKy0gICAgICAgICAgICBiaXRtYXAgPSBtc2cuZ2V0X2J5dGVzCist ICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV3KGFkZHJlc3MsIHByb3RvY29sLCBiaXRtYXApCist ICAgICAgICAgIGVuZAorLSAgICAgICAgZW5kCistCistICAgICAgICAjIworLSAgICAgICAgIyBB biBJUHY2IGFkZHJlc3MgcmVjb3JkLgorLQorLSAgICAgICAgY2xhc3MgQUFBQSA8IFJlc291cmNl CistICAgICAgICAgIFR5cGVWYWx1ZSA9IDI4CistICAgICAgICAgIENsYXNzVmFsdWUgPSBJTjo6 Q2xhc3NWYWx1ZQorLSAgICAgICAgICBDbGFzc0hhc2hbW1R5cGVWYWx1ZSwgQ2xhc3NWYWx1ZV1d ID0gc2VsZiAjIDpub2RvYzoKKy0KKy0gICAgICAgICAgIyMKKy0gICAgICAgICAgIyBDcmVhdGVz IGEgbmV3IEFBQUEgZm9yICthZGRyZXNzKy4KKy0KKy0gICAgICAgICAgZGVmIGluaXRpYWxpemUo YWRkcmVzcykKKy0gICAgICAgICAgICBAYWRkcmVzcyA9IElQdjYuY3JlYXRlKGFkZHJlc3MpCist ICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICAjIworLSAgICAgICAgICAjIFRoZSBHZW06OlJl c29sdjo6SVB2NiBhZGRyZXNzIGZvciB0aGlzIEFBQUEuCistCistICAgICAgICAgIGF0dHJfcmVh ZGVyIDphZGRyZXNzCistCistICAgICAgICAgIGRlZiBlbmNvZGVfcmRhdGEobXNnKSAjIDpub2Rv YzoKKy0gICAgICAgICAgICBtc2cucHV0X2J5dGVzKEBhZGRyZXNzLmFkZHJlc3MpCistICAgICAg ICAgIGVuZAorLQorLSAgICAgICAgICBkZWYgc2VsZi5kZWNvZGVfcmRhdGEobXNnKSAjIDpub2Rv YzoKKy0gICAgICAgICAgICByZXR1cm4gc2VsZi5uZXcoSVB2Ni5uZXcobXNnLmdldF9ieXRlcygx NikpKQorLSAgICAgICAgICBlbmQKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgIyMKKy0gICAg ICAgICMgU1JWIHJlc291cmNlIHJlY29yZCBkZWZpbmVkIGluIFJGQyAyNzgyCistICAgICAgICAj CistICAgICAgICAjIFRoZXNlIHJlY29yZHMgaWRlbnRpZnkgdGhlIGhvc3RuYW1lIGFuZCBwb3J0 IHRoYXQgYSBzZXJ2aWNlIGlzCistICAgICAgICAjIGF2YWlsYWJsZSBhdC4KKy0KKy0gICAgICAg IGNsYXNzIFNSViA8IFJlc291cmNlCistICAgICAgICAgIFR5cGVWYWx1ZSA9IDMzCistICAgICAg ICAgIENsYXNzVmFsdWUgPSBJTjo6Q2xhc3NWYWx1ZQorLSAgICAgICAgICBDbGFzc0hhc2hbW1R5 cGVWYWx1ZSwgQ2xhc3NWYWx1ZV1dID0gc2VsZiAjIDpub2RvYzoKKy0KKy0gICAgICAgICAgIyBD cmVhdGUgYSBTUlYgcmVzb3VyY2UgcmVjb3JkLgorLSAgICAgICAgICAjCistICAgICAgICAgICMg U2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciAjcHJpb3JpdHksICN3ZWlnaHQsICNwb3J0IGFuZCAj dGFyZ2V0CistICAgICAgICAgICMgZm9yICtwcmlvcml0eSssICt3ZWlnaHQrLCArcG9ydCBhbmQg K3RhcmdldCsgcmVzcGVjdGl2ZWx5LgorLQorLSAgICAgICAgICBkZWYgaW5pdGlhbGl6ZShwcmlv cml0eSwgd2VpZ2h0LCBwb3J0LCB0YXJnZXQpCistICAgICAgICAgICAgQHByaW9yaXR5ID0gcHJp b3JpdHkudG9faW50CistICAgICAgICAgICAgQHdlaWdodCA9IHdlaWdodC50b19pbnQKKy0gICAg ICAgICAgICBAcG9ydCA9IHBvcnQudG9faW50CistICAgICAgICAgICAgQHRhcmdldCA9IE5hbWUu Y3JlYXRlKHRhcmdldCkKKy0gICAgICAgICAgZW5kCistCistICAgICAgICAgICMgVGhlIHByaW9y aXR5IG9mIHRoaXMgdGFyZ2V0IGhvc3QuCistICAgICAgICAgICMKKy0gICAgICAgICAgIyBBIGNs aWVudCBNVVNUIGF0dGVtcHQgdG8gY29udGFjdCB0aGUgdGFyZ2V0IGhvc3Qgd2l0aCB0aGUKKy0g ICAgICAgICAgIyBsb3dlc3QtbnVtYmVyZWQgcHJpb3JpdHkgaXQgY2FuIHJlYWNoOyB0YXJnZXQg aG9zdHMgd2l0aCB0aGUgc2FtZQorLSAgICAgICAgICAjIHByaW9yaXR5IFNIT1VMRCBiZSB0cmll ZCBpbiBhbiBvcmRlciBkZWZpbmVkIGJ5IHRoZSB3ZWlnaHQgZmllbGQuCistICAgICAgICAgICMg VGhlIHJhbmdlIGlzIDAtNjU1MzUuICBOb3RlIHRoYXQgaXQgaXMgbm90IHdpZGVseSBpbXBsZW1l bnRlZCBhbmQKKy0gICAgICAgICAgIyBzaG91bGQgYmUgc2V0IHRvIHplcm8uCistCistICAgICAg ICAgIGF0dHJfcmVhZGVyIDpwcmlvcml0eQorLQorLSAgICAgICAgICAjIEEgc2VydmVyIHNlbGVj dGlvbiBtZWNoYW5pc20uCistICAgICAgICAgICMKKy0gICAgICAgICAgIyBUaGUgd2VpZ2h0IGZp ZWxkIHNwZWNpZmllcyBhIHJlbGF0aXZlIHdlaWdodCBmb3IgZW50cmllcyB3aXRoIHRoZQorLSAg ICAgICAgICAjIHNhbWUgcHJpb3JpdHkuIExhcmdlciB3ZWlnaHRzIFNIT1VMRCBiZSBnaXZlbiBh IHByb3BvcnRpb25hdGVseQorLSAgICAgICAgICAjIGhpZ2hlciBwcm9iYWJpbGl0eSBvZiBiZWlu ZyBzZWxlY3RlZC4gVGhlIHJhbmdlIG9mIHRoaXMgbnVtYmVyIGlzCistICAgICAgICAgICMgMC02 NTUzNS4gIERvbWFpbiBhZG1pbmlzdHJhdG9ycyBTSE9VTEQgdXNlIFdlaWdodCAwIHdoZW4gdGhl cmUKKy0gICAgICAgICAgIyBpc24ndCBhbnkgc2VydmVyIHNlbGVjdGlvbiB0byBkbywgdG8gbWFr ZSB0aGUgUlIgZWFzaWVyIHRvIHJlYWQKKy0gICAgICAgICAgIyBmb3IgaHVtYW5zIChsZXNzIG5v aXN5KS4gTm90ZSB0aGF0IGl0IGlzIG5vdCB3aWRlbHkgaW1wbGVtZW50ZWQKKy0gICAgICAgICAg IyBhbmQgc2hvdWxkIGJlIHNldCB0byB6ZXJvLgorLQorLSAgICAgICAgICBhdHRyX3JlYWRlciA6 d2VpZ2h0CistCistICAgICAgICAgICMgVGhlIHBvcnQgb24gdGhpcyB0YXJnZXQgaG9zdCBvZiB0 aGlzIHNlcnZpY2UuCistICAgICAgICAgICMKKy0gICAgICAgICAgIyBUaGUgcmFuZ2UgaXMgMC02 NTUzNS4KKy0KKy0gICAgICAgICAgYXR0cl9yZWFkZXIgOnBvcnQKKy0KKy0gICAgICAgICAgIyBU aGUgZG9tYWluIG5hbWUgb2YgdGhlIHRhcmdldCBob3N0LgorLSAgICAgICAgICAjCistICAgICAg ICAgICMgQSB0YXJnZXQgb2YgIi4iIG1lYW5zIHRoYXQgdGhlIHNlcnZpY2UgaXMgZGVjaWRlZGx5 IG5vdCBhdmFpbGFibGUKKy0gICAgICAgICAgIyBhdCB0aGlzIGRvbWFpbi4KKy0KKy0gICAgICAg ICAgYXR0cl9yZWFkZXIgOnRhcmdldAorLQorLSAgICAgICAgICBkZWYgZW5jb2RlX3JkYXRhKG1z ZykgIyA6bm9kb2M6CistICAgICAgICAgICAgbXNnLnB1dF9wYWNrKCJuIiwgQHByaW9yaXR5KQor LSAgICAgICAgICAgIG1zZy5wdXRfcGFjaygibiIsIEB3ZWlnaHQpCistICAgICAgICAgICAgbXNn LnB1dF9wYWNrKCJuIiwgQHBvcnQpCistICAgICAgICAgICAgbXNnLnB1dF9uYW1lKEB0YXJnZXQs IGNvbXByZXNzOiBmYWxzZSkKKy0gICAgICAgICAgZW5kCistCistICAgICAgICAgIGRlZiBzZWxm LmRlY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICAgIHByaW9yaXR5LCA9IG1z Zy5nZXRfdW5wYWNrKCJuIikKKy0gICAgICAgICAgICB3ZWlnaHQsICAgPSBtc2cuZ2V0X3VucGFj aygibiIpCistICAgICAgICAgICAgcG9ydCwgICAgID0gbXNnLmdldF91bnBhY2soIm4iKQorLSAg ICAgICAgICAgIHRhcmdldCAgICA9IG1zZy5nZXRfbmFtZQorLSAgICAgICAgICAgIHJldHVybiBz ZWxmLm5ldyhwcmlvcml0eSwgd2VpZ2h0LCBwb3J0LCB0YXJnZXQpCistICAgICAgICAgIGVuZAor LSAgICAgICAgZW5kCistCistICAgICAgICAjIworLSAgICAgICAgIyBDb21tb24gaW1wbGVtZW50 YXRpb24gZm9yIFNWQ0ItY29tcGF0aWJsZSByZXNvdXJjZSByZWNvcmRzLgorLQorLSAgICAgICAg Y2xhc3MgU2VydmljZUJpbmRpbmcKKy0KKy0gICAgICAgICAgIyMKKy0gICAgICAgICAgIyBDcmVh dGUgYSBzZXJ2aWNlIGJpbmRpbmcgcmVzb3VyY2UgcmVjb3JkLgorLQorLSAgICAgICAgICBkZWYg aW5pdGlhbGl6ZShwcmlvcml0eSwgdGFyZ2V0LCBwYXJhbXMgPSBbXSkKKy0gICAgICAgICAgICBA cHJpb3JpdHkgPSBwcmlvcml0eS50b19pbnQKKy0gICAgICAgICAgICBAdGFyZ2V0ID0gTmFtZS5j cmVhdGUodGFyZ2V0KQorLSAgICAgICAgICAgIEBwYXJhbXMgPSBTdmNQYXJhbXMubmV3KHBhcmFt cykKKy0gICAgICAgICAgZW5kCistCistICAgICAgICAgICMjCistICAgICAgICAgICMgVGhlIHBy aW9yaXR5IG9mIHRoaXMgdGFyZ2V0IGhvc3QuCistICAgICAgICAgICMKKy0gICAgICAgICAgIyBU aGUgcmFuZ2UgaXMgMC02NTUzNS4KKy0gICAgICAgICAgIyBJZiBzZXQgdG8gMCwgdGhpcyBSUiBp cyBpbiBBbGlhc01vZGUuIE90aGVyd2lzZSwgaXQgaXMgaW4gU2VydmljZU1vZGUuCistCistICAg ICAgICAgIGF0dHJfcmVhZGVyIDpwcmlvcml0eQorLQorLSAgICAgICAgICAjIworLSAgICAgICAg ICAjIFRoZSBkb21haW4gbmFtZSBvZiB0aGUgdGFyZ2V0IGhvc3QuCistCistICAgICAgICAgIGF0 dHJfcmVhZGVyIDp0YXJnZXQKKy0KKy0gICAgICAgICAgIyMKKy0gICAgICAgICAgIyBUaGUgc2Vy dmljZSBwYXJhbWV0ZXJzIGZvciB0aGUgdGFyZ2V0IGhvc3QuCistCistICAgICAgICAgIGF0dHJf cmVhZGVyIDpwYXJhbXMKKy0KKy0gICAgICAgICAgIyMKKy0gICAgICAgICAgIyBXaGV0aGVyIHRo aXMgUlIgaXMgaW4gQWxpYXNNb2RlLgorLQorLSAgICAgICAgICBkZWYgYWxpYXNfbW9kZT8KKy0g ICAgICAgICAgICBzZWxmLnByaW9yaXR5ID09IDAKKy0gICAgICAgICAgZW5kCistCistICAgICAg ICAgICMjCistICAgICAgICAgICMgV2hldGhlciB0aGlzIFJSIGlzIGluIFNlcnZpY2VNb2RlLgor LQorLSAgICAgICAgICBkZWYgc2VydmljZV9tb2RlPworLSAgICAgICAgICAgICFhbGlhc19tb2Rl PworLSAgICAgICAgICBlbmQKKy0KKy0gICAgICAgICAgZGVmIGVuY29kZV9yZGF0YShtc2cpICMg Om5vZG9jOgorLSAgICAgICAgICAgIG1zZy5wdXRfcGFjaygibiIsIEBwcmlvcml0eSkKKy0gICAg ICAgICAgICBtc2cucHV0X25hbWUoQHRhcmdldCwgY29tcHJlc3M6IGZhbHNlKQorLSAgICAgICAg ICAgIEBwYXJhbXMuZW5jb2RlKG1zZykKKy0gICAgICAgICAgZW5kCistCistICAgICAgICAgIGRl ZiBzZWxmLmRlY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICAgIHByaW9yaXR5 LCA9IG1zZy5nZXRfdW5wYWNrKCJuIikKKy0gICAgICAgICAgICB0YXJnZXQgICAgPSBtc2cuZ2V0 X25hbWUKKy0gICAgICAgICAgICBwYXJhbXMgICAgPSBTdmNQYXJhbXMuZGVjb2RlKG1zZykKKy0g ICAgICAgICAgICByZXR1cm4gc2VsZi5uZXcocHJpb3JpdHksIHRhcmdldCwgcGFyYW1zKQorLSAg ICAgICAgICBlbmQKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgU1ZD QiByZXNvdXJjZSByZWNvcmQgW1JGQzk0NjBdCistCistICAgICAgICBjbGFzcyBTVkNCIDwgU2Vy dmljZUJpbmRpbmcKKy0gICAgICAgICAgVHlwZVZhbHVlID0gNjQKKy0gICAgICAgICAgQ2xhc3NW YWx1ZSA9IElOOjpDbGFzc1ZhbHVlCistICAgICAgICAgIENsYXNzSGFzaFtbVHlwZVZhbHVlLCBD bGFzc1ZhbHVlXV0gPSBzZWxmICMgOm5vZG9jOgorLSAgICAgICAgZW5kCistCistICAgICAgICAj IworLSAgICAgICAgIyBIVFRQUyByZXNvdXJjZSByZWNvcmQgW1JGQzk0NjBdCistCistICAgICAg ICBjbGFzcyBIVFRQUyA8IFNlcnZpY2VCaW5kaW5nCistICAgICAgICAgIFR5cGVWYWx1ZSA9IDY1 CistICAgICAgICAgIENsYXNzVmFsdWUgPSBJTjo6Q2xhc3NWYWx1ZQorLSAgICAgICAgICBDbGFz c0hhc2hbW1R5cGVWYWx1ZSwgQ2xhc3NWYWx1ZV1dID0gc2VsZiAjIDpub2RvYzoKKy0gICAgICAg IGVuZAorLSAgICAgIGVuZAorLSAgICBlbmQKKy0gIGVuZAorLQorLSAgIyMKKy0gICMgQSBHZW06 OlJlc29sdjo6RE5TIElQdjQgYWRkcmVzcy4KKy0KKy0gIGNsYXNzIElQdjQKKy0KKy0gICAgUmVn ZXgyNTYgPSAvMAorLSAgICAgICAgICAgICAgIHwxKD86WzAtOV1bMC05XT8pPworLSAgICAgICAg ICAgICAgIHwyKD86WzAtNF1bMC05XT98NVswLTVdP3xbNi05XSk/CistICAgICAgICAgICAgICAg fFszLTldWzAtOV0/L3ggIyA6bm9kb2M6CistCistICAgICMjCistICAgICMgUmVndWxhciBleHBy ZXNzaW9uIElQdjQgYWRkcmVzc2VzIG11c3QgbWF0Y2guCistICAgIFJlZ2V4ID0gL1xBKCN7UmVn ZXgyNTZ9KVwuKCN7UmVnZXgyNTZ9KVwuKCN7UmVnZXgyNTZ9KVwuKCN7UmVnZXgyNTZ9KVx6Lwor LQorLSAgICAjIworLSAgICAjIENyZWF0ZXMgYSBuZXcgSVB2NCBhZGRyZXNzIGZyb20gK2FyZysg d2hpY2ggbWF5IGJlOgorLSAgICAjCistICAgICMgSVB2NDo6IHJldHVybnMgK2FyZysuCistICAg ICMgU3RyaW5nOjogK2FyZysgbXVzdCBtYXRjaCB0aGUgSVB2NDo6UmVnZXggY29uc3RhbnQKKy0K Ky0gICAgZGVmIHNlbGYuY3JlYXRlKGFyZykKKy0gICAgICBjYXNlIGFyZworLSAgICAgIHdoZW4g SVB2NAorLSAgICAgICAgcmV0dXJuIGFyZworLSAgICAgIHdoZW4gUmVnZXgKKy0gICAgICAgIGlm ICgwLi4yNTUpID09PSAoYSA9ICQxLnRvX2kpICYmCistICAgICAgICAgICAoMC4uMjU1KSA9PT0g KGIgPSAkMi50b19pKSAmJgorLSAgICAgICAgICAgKDAuLjI1NSkgPT09IChjID0gJDMudG9faSkg JiYKKy0gICAgICAgICAgICgwLi4yNTUpID09PSAoZCA9ICQ0LnRvX2kpCistICAgICAgICAgIHJl dHVybiBzZWxmLm5ldyhbYSwgYiwgYywgZF0ucGFjaygiQ0NDQyIpKQorLSAgICAgICAgZWxzZQor LSAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLm5ldygiSVB2NCBhZGRyZXNzIHdpdGggaW52 YWxpZCB2YWx1ZTogIiArIGFyZykKKy0gICAgICAgIGVuZAorLSAgICAgIGVsc2UKKy0gICAgICAg IHJhaXNlIEFyZ3VtZW50RXJyb3IubmV3KCJjYW5ub3QgaW50ZXJwcmV0IGFzIElQdjQgYWRkcmVz czogI3thcmcuaW5zcGVjdH0iKQorLSAgICAgIGVuZAorLSAgICBlbmQKKy0KKy0gICAgZGVmIGlu aXRpYWxpemUoYWRkcmVzcykgIyA6bm9kb2M6CistICAgICAgdW5sZXNzIGFkZHJlc3Mua2luZF9v Zj8oU3RyaW5nKQorLSAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgJ0lQdjQgYWRkcmVzcyBt dXN0IGJlIGEgc3RyaW5nJworLSAgICAgIGVuZAorLSAgICAgIHVubGVzcyBhZGRyZXNzLmxlbmd0 aCA9PSA0CistICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLCAiSVB2NCBhZGRyZXNzIGV4cGVj dHMgNCBieXRlcyBidXQgI3thZGRyZXNzLmxlbmd0aH0gYnl0ZXMiCistICAgICAgZW5kCistICAg ICAgQGFkZHJlc3MgPSBhZGRyZXNzCistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIEEgU3Ry aW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSVB2NCBhZGRyZXNzLgorLQorLSAgICAjIworLSAg ICAjIFRoZSByYXcgSVB2NCBhZGRyZXNzIGFzIGEgU3RyaW5nLgorLQorLSAgICBhdHRyX3JlYWRl ciA6YWRkcmVzcworLQorLSAgICBkZWYgdG9fcyAjIDpub2RvYzoKKy0gICAgICByZXR1cm4gc3By aW50ZigiJWQuJWQuJWQuJWQiLCAqQGFkZHJlc3MudW5wYWNrKCJDQ0NDIikpCistICAgIGVuZAor LQorLSAgICBkZWYgaW5zcGVjdCAjIDpub2RvYzoKKy0gICAgICByZXR1cm4gIiM8I3tzZWxmLmNs YXNzfSAje3NlbGZ9PiIKKy0gICAgZW5kCistCistICAgICMjCistICAgICMgVHVybnMgdGhpcyBJ UHY0IGFkZHJlc3MgaW50byBhIEdlbTo6UmVzb2x2OjpETlM6Ok5hbWUuCistCistICAgIGRlZiB0 b19uYW1lCistICAgICAgcmV0dXJuIEROUzo6TmFtZS5jcmVhdGUoCistICAgICAgICAnJWQuJWQu JWQuJWQuaW4tYWRkci5hcnBhLicgJSBAYWRkcmVzcy51bnBhY2soJ0NDQ0MnKS5yZXZlcnNlKQor LSAgICBlbmQKKy0KKy0gICAgZGVmID09KG90aGVyKSAjIDpub2RvYzoKKy0gICAgICByZXR1cm4g QGFkZHJlc3MgPT0gb3RoZXIuYWRkcmVzcworLSAgICBlbmQKKy0KKy0gICAgZGVmIGVxbD8ob3Ro ZXIpICMgOm5vZG9jOgorLSAgICAgIHJldHVybiBzZWxmID09IG90aGVyCistICAgIGVuZAorLQor LSAgICBkZWYgaGFzaCAjIDpub2RvYzoKKy0gICAgICByZXR1cm4gQGFkZHJlc3MuaGFzaAorLSAg ICBlbmQKKy0gIGVuZAorLQorLSAgIyMKKy0gICMgQSBHZW06OlJlc29sdjo6RE5TIElQdjYgYWRk cmVzcy4KKy0KKy0gIGNsYXNzIElQdjYKKy0KKy0gICAgIyMKKy0gICAgIyBJUHY2IGFkZHJlc3Mg Zm9ybWF0IGE6YjpjOmQ6ZTpmOmc6aAorLSAgICBSZWdleF84SGV4ID0gL1xBCistICAgICAgKD86 WzAtOUEtRmEtZl17MSw0fTopezd9CistICAgICAgICAgWzAtOUEtRmEtZl17MSw0fQorLSAgICAg IFx6L3gKKy0KKy0gICAgIyMKKy0gICAgIyBDb21wcmVzc2VkIElQdjYgYWRkcmVzcyBmb3JtYXQg YTo6YgorLQorLSAgICBSZWdleF9Db21wcmVzc2VkSGV4ID0gL1xBCistICAgICAgKCg/OlswLTlB LUZhLWZdezEsNH0oPzo6WzAtOUEtRmEtZl17MSw0fSkqKT8pIDo6CistICAgICAgKCg/OlswLTlB LUZhLWZdezEsNH0oPzo6WzAtOUEtRmEtZl17MSw0fSkqKT8pCistICAgICAgXHoveAorLQorLSAg ICAjIworLSAgICAjIElQdjQgbWFwcGVkIElQdjYgYWRkcmVzcyBmb3JtYXQgYTpiOmM6ZDplOmY6 dy54LnkuegorLQorLSAgICBSZWdleF82SGV4NERlYyA9IC9cQQorLSAgICAgICgoPzpbMC05QS1G YS1mXXsxLDR9Oil7Niw2fSkKKy0gICAgICAoXGQrKVwuKFxkKylcLihcZCspXC4oXGQrKQorLSAg ICAgIFx6L3gKKy0KKy0gICAgIyMKKy0gICAgIyBDb21wcmVzc2VkIElQdjQgbWFwcGVkIElQdjYg YWRkcmVzcyBmb3JtYXQgYTo6Yjp3LngueS56CistCistICAgIFJlZ2V4X0NvbXByZXNzZWRIZXg0 RGVjID0gL1xBCistICAgICAgKCg/OlswLTlBLUZhLWZdezEsNH0oPzo6WzAtOUEtRmEtZl17MSw0 fSkqKT8pIDo6CistICAgICAgKCg/OlswLTlBLUZhLWZdezEsNH06KSopCistICAgICAgKFxkKylc LihcZCspXC4oXGQrKVwuKFxkKykKKy0gICAgICBcei94CistCistICAgICMjCistICAgICMgSVB2 NiBsaW5rIGxvY2FsIGFkZHJlc3MgZm9ybWF0IGZlODA6YjpjOmQ6ZTpmOmc6aCVlbTEKKy0gICAg UmVnZXhfOEhleExpbmtMb2NhbCA9IC9cQQorLSAgICAgIFtGZl1bRWVdODAKKy0gICAgICAoPzo6 WzAtOUEtRmEtZl17MSw0fSl7N30KKy0gICAgICAlWy0wLTlBLVphLXouX35dKworLSAgICAgIFx6 L3gKKy0KKy0gICAgIyMKKy0gICAgIyBDb21wcmVzc2VkIElQdjYgbGluayBsb2NhbCBhZGRyZXNz IGZvcm1hdCBmZTgwOjpiJWVtMQorLQorLSAgICBSZWdleF9Db21wcmVzc2VkSGV4TGlua0xvY2Fs ID0gL1xBCistICAgICAgW0ZmXVtFZV04MDoKKy0gICAgICAoPzoKKy0gICAgICAgICgoPzpbMC05 QS1GYS1mXXsxLDR9KD86OlswLTlBLUZhLWZdezEsNH0pKik/KSA6OgorLSAgICAgICAgKCg/Olsw LTlBLUZhLWZdezEsNH0oPzo6WzAtOUEtRmEtZl17MSw0fSkqKT8pCistICAgICAgICB8CistICAg ICAgICA6KCg/OlswLTlBLUZhLWZdezEsNH0oPzo6WzAtOUEtRmEtZl17MSw0fSkqKT8pCistICAg ICAgKT8KKy0gICAgICA6WzAtOUEtRmEtZl17MSw0fSVbLTAtOUEtWmEtei5ffl0rCistICAgICAg XHoveAorLQorLSAgICAjIworLSAgICAjIEEgY29tcG9zaXRlIElQdjYgYWRkcmVzcyBSZWdleHAu CistCistICAgIFJlZ2V4ID0gLworLSAgICAgICg/OiN7UmVnZXhfOEhleH0pIHwKKy0gICAgICAo Pzoje1JlZ2V4X0NvbXByZXNzZWRIZXh9KSB8CistICAgICAgKD86I3tSZWdleF82SGV4NERlY30p IHwKKy0gICAgICAoPzoje1JlZ2V4X0NvbXByZXNzZWRIZXg0RGVjfSkgfAorLSAgICAgICg/OiN7 UmVnZXhfOEhleExpbmtMb2NhbH0pIHwKKy0gICAgICAoPzoje1JlZ2V4X0NvbXByZXNzZWRIZXhM aW5rTG9jYWx9KQorLSAgICAgIC94CistCistICAgICMjCistICAgICMgQ3JlYXRlcyBhIG5ldyBJ UHY2IGFkZHJlc3MgZnJvbSArYXJnKyB3aGljaCBtYXkgYmU6CistICAgICMKKy0gICAgIyBJUHY2 OjogcmV0dXJucyArYXJnKy4KKy0gICAgIyBTdHJpbmc6OiArYXJnKyBtdXN0IG1hdGNoIG9uZSBv ZiB0aGUgSVB2Njo6UmVnZXgqIGNvbnN0YW50cworLQorLSAgICBkZWYgc2VsZi5jcmVhdGUoYXJn KQorLSAgICAgIGNhc2UgYXJnCistICAgICAgd2hlbiBJUHY2CistICAgICAgICByZXR1cm4gYXJn CistICAgICAgd2hlbiBTdHJpbmcKKy0gICAgICAgIGFkZHJlc3MgPSAnJy5iCistICAgICAgICBp ZiBSZWdleF84SGV4ID1+IGFyZworLSAgICAgICAgICBhcmcuc2NhbigvWzAtOUEtRmEtZl0rLykg e3xoZXh8IGFkZHJlc3MgPDwgW2hleC5oZXhdLnBhY2soJ24nKX0KKy0gICAgICAgIGVsc2lmIFJl Z2V4X0NvbXByZXNzZWRIZXggPX4gYXJnCistICAgICAgICAgIHByZWZpeCA9ICQxCistICAgICAg ICAgIHN1ZmZpeCA9ICQyCistICAgICAgICAgIGExID0gJycuYgorLSAgICAgICAgICBhMiA9ICcn LmIKKy0gICAgICAgICAgcHJlZml4LnNjYW4oL1swLTlBLUZhLWZdKy8pIHt8aGV4fCBhMSA8PCBb aGV4LmhleF0ucGFjaygnbicpfQorLSAgICAgICAgICBzdWZmaXguc2NhbigvWzAtOUEtRmEtZl0r Lykge3xoZXh8IGEyIDw8IFtoZXguaGV4XS5wYWNrKCduJyl9CistICAgICAgICAgIG9taXRsZW4g PSAxNiAtIGExLmxlbmd0aCAtIGEyLmxlbmd0aAorLSAgICAgICAgICBhZGRyZXNzIDw8IGExIDw8 ICJcMCIgKiBvbWl0bGVuIDw8IGEyCistICAgICAgICBlbHNpZiBSZWdleF82SGV4NERlYyA9fiBh cmcKKy0gICAgICAgICAgcHJlZml4LCBhLCBiLCBjLCBkID0gJDEsICQyLnRvX2ksICQzLnRvX2ks ICQ0LnRvX2ksICQ1LnRvX2kKKy0gICAgICAgICAgaWYgKDAuLjI1NSkgPT09IGEgJiYgKDAuLjI1 NSkgPT09IGIgJiYgKDAuLjI1NSkgPT09IGMgJiYgKDAuLjI1NSkgPT09IGQKKy0gICAgICAgICAg ICBwcmVmaXguc2NhbigvWzAtOUEtRmEtZl0rLykge3xoZXh8IGFkZHJlc3MgPDwgW2hleC5oZXhd LnBhY2soJ24nKX0KKy0gICAgICAgICAgICBhZGRyZXNzIDw8IFthLCBiLCBjLCBkXS5wYWNrKCdD Q0NDJykKKy0gICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3Iu bmV3KCJub3QgbnVtZXJpYyBJUHY2IGFkZHJlc3M6ICIgKyBhcmcpCistICAgICAgICAgIGVuZAor LSAgICAgICAgZWxzaWYgUmVnZXhfQ29tcHJlc3NlZEhleDREZWMgPX4gYXJnCistICAgICAgICAg IHByZWZpeCwgc3VmZml4LCBhLCBiLCBjLCBkID0gJDEsICQyLCAkMy50b19pLCAkNC50b19pLCAk NS50b19pLCAkNi50b19pCistICAgICAgICAgIGlmICgwLi4yNTUpID09PSBhICYmICgwLi4yNTUp ID09PSBiICYmICgwLi4yNTUpID09PSBjICYmICgwLi4yNTUpID09PSBkCistICAgICAgICAgICAg YTEgPSAnJy5iCistICAgICAgICAgICAgYTIgPSAnJy5iCistICAgICAgICAgICAgcHJlZml4LnNj YW4oL1swLTlBLUZhLWZdKy8pIHt8aGV4fCBhMSA8PCBbaGV4LmhleF0ucGFjaygnbicpfQorLSAg ICAgICAgICAgIHN1ZmZpeC5zY2FuKC9bMC05QS1GYS1mXSsvKSB7fGhleHwgYTIgPDwgW2hleC5o ZXhdLnBhY2soJ24nKX0KKy0gICAgICAgICAgICBvbWl0bGVuID0gMTIgLSBhMS5sZW5ndGggLSBh Mi5sZW5ndGgKKy0gICAgICAgICAgICBhZGRyZXNzIDw8IGExIDw8ICJcMCIgKiBvbWl0bGVuIDw8 IGEyIDw8IFthLCBiLCBjLCBkXS5wYWNrKCdDQ0NDJykKKy0gICAgICAgICAgZWxzZQorLSAgICAg ICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IubmV3KCJub3QgbnVtZXJpYyBJUHY2IGFkZHJlc3M6 ICIgKyBhcmcpCistICAgICAgICAgIGVuZAorLSAgICAgICAgZWxzZQorLSAgICAgICAgICByYWlz ZSBBcmd1bWVudEVycm9yLm5ldygibm90IG51bWVyaWMgSVB2NiBhZGRyZXNzOiAiICsgYXJnKQor LSAgICAgICAgZW5kCistICAgICAgICByZXR1cm4gSVB2Ni5uZXcoYWRkcmVzcykKKy0gICAgICBl bHNlCistICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLm5ldygiY2Fubm90IGludGVycHJldCBh cyBJUHY2IGFkZHJlc3M6ICN7YXJnLmluc3BlY3R9IikKKy0gICAgICBlbmQKKy0gICAgZW5kCist CistICAgIGRlZiBpbml0aWFsaXplKGFkZHJlc3MpICMgOm5vZG9jOgorLSAgICAgIHVubGVzcyBh ZGRyZXNzLmtpbmRfb2Y/KFN0cmluZykgJiYgYWRkcmVzcy5sZW5ndGggPT0gMTYKKy0gICAgICAg IHJhaXNlIEFyZ3VtZW50RXJyb3IubmV3KCdJUHY2IGFkZHJlc3MgbXVzdCBiZSAxNiBieXRlcycp CistICAgICAgZW5kCistICAgICAgQGFkZHJlc3MgPSBhZGRyZXNzCistICAgIGVuZAorLQorLSAg ICAjIworLSAgICAjIFRoZSByYXcgSVB2NiBhZGRyZXNzIGFzIGEgU3RyaW5nLgorLQorLSAgICBh dHRyX3JlYWRlciA6YWRkcmVzcworLQorLSAgICBkZWYgdG9fcyAjIDpub2RvYzoKKy0gICAgICBz cHJpbnRmKCIleDoleDoleDoleDoleDoleDoleDoleCIsICpAYWRkcmVzcy51bnBhY2soIm5ubm5u bm5uIikpLnN1YigvKF58OikwKDowKSsoOnwkKS8sICc6OicpCistICAgIGVuZAorLQorLSAgICBk ZWYgaW5zcGVjdCAjIDpub2RvYzoKKy0gICAgICByZXR1cm4gIiM8I3tzZWxmLmNsYXNzfSAje3Nl bGZ9PiIKKy0gICAgZW5kCistCistICAgICMjCistICAgICMgVHVybnMgdGhpcyBJUHY2IGFkZHJl c3MgaW50byBhIEdlbTo6UmVzb2x2OjpETlM6Ok5hbWUuCistICAgICMtLQorLSAgICAjIGlwNi5h cnBhIHNob3VsZCBiZSBzZWFyY2hlZCB0b28uIFtSRkMzMTUyXQorLQorLSAgICBkZWYgdG9fbmFt ZQorLSAgICAgIHJldHVybiBETlM6Ok5hbWUubmV3KAorLSAgICAgICAgQGFkZHJlc3MudW5wYWNr KCJIMzIiKVswXS5zcGxpdCgvLykucmV2ZXJzZSArIFsnaXA2JywgJ2FycGEnXSkKKy0gICAgZW5k CistCistICAgIGRlZiA9PShvdGhlcikgIyA6bm9kb2M6CistICAgICAgcmV0dXJuIEBhZGRyZXNz ID09IG90aGVyLmFkZHJlc3MKKy0gICAgZW5kCistCistICAgIGRlZiBlcWw/KG90aGVyKSAjIDpu b2RvYzoKKy0gICAgICByZXR1cm4gc2VsZiA9PSBvdGhlcgorLSAgICBlbmQKKy0KKy0gICAgZGVm IGhhc2ggIyA6bm9kb2M6CistICAgICAgcmV0dXJuIEBhZGRyZXNzLmhhc2gKKy0gICAgZW5kCist ICBlbmQKKy0KKy0gICMjCistICAjIEdlbTo6UmVzb2x2OjpNRE5TIGlzIGEgb25lLXNob3QgTXVs dGljYXN0IEROUyAobUROUykgcmVzb2x2ZXIuICBJdCBibGluZGx5CistICAjIG1ha2VzIHF1ZXJp ZXMgdG8gdGhlIG1ETlMgYWRkcmVzc2VzIHdpdGhvdXQgdW5kZXJzdGFuZGluZyBhbnl0aGluZyBh Ym91dAorLSAgIyBtdWx0aWNhc3QgcG9ydHMuCistICAjCistICAjIEluZm9ybWF0aW9uIHRha2Vu IGZvcm0gdGhlIGZvbGxvd2luZyBwbGFjZXM6CistICAjCistICAjICogUkZDIDY3NjIKKy0KKy0g IGNsYXNzIE1ETlMgPCBETlMKKy0KKy0gICAgIyMKKy0gICAgIyBEZWZhdWx0IG1ETlMgUG9ydAor LQorLSAgICBQb3J0ID0gNTM1MworLQorLSAgICAjIworLSAgICAjIERlZmF1bHQgSVB2NCBtRE5T IGFkZHJlc3MKKy0KKy0gICAgQWRkcmVzc1Y0ID0gJzIyNC4wLjAuMjUxJworLQorLSAgICAjIwor LSAgICAjIERlZmF1bHQgSVB2NiBtRE5TIGFkZHJlc3MKKy0KKy0gICAgQWRkcmVzc1Y2ID0gJ2Zm MDI6OmZiJworLQorLSAgICAjIworLSAgICAjIERlZmF1bHQgbUROUyBhZGRyZXNzZXMKKy0KKy0g ICAgQWRkcmVzc2VzID0gWworLSAgICAgIFtBZGRyZXNzVjQsIFBvcnRdLAorLSAgICAgIFtBZGRy ZXNzVjYsIFBvcnRdLAorLSAgICBdCistCistICAgICMjCistICAgICMgQ3JlYXRlcyBhIG5ldyBv bmUtc2hvdCBNdWx0aWNhc3QgRE5TIChtRE5TKSByZXNvbHZlci4KKy0gICAgIworLSAgICAjICtj b25maWdfaW5mbysgY2FuIGJlOgorLSAgICAjCistICAgICMgbmlsOjoKKy0gICAgIyAgIFVzZXMg dGhlIGRlZmF1bHQgbUROUyBhZGRyZXNzZXMKKy0gICAgIworLSAgICAjIEhhc2g6OgorLSAgICAj ICAgTXVzdCBjb250YWluIDpuYW1lc2VydmVyIG9yIDpuYW1lc2VydmVyX3BvcnQgbGlrZQorLSAg ICAjICAgR2VtOjpSZXNvbHY6OkROUyNpbml0aWFsaXplLgorLQorLSAgICBkZWYgaW5pdGlhbGl6 ZShjb25maWdfaW5mbz1uaWwpCistICAgICAgaWYgY29uZmlnX2luZm8gdGhlbgorLSAgICAgICAg c3VwZXIoeyBuYW1lc2VydmVyX3BvcnQ6IEFkZHJlc3NlcyB9Lm1lcmdlKGNvbmZpZ19pbmZvKSkK Ky0gICAgICBlbHNlCistICAgICAgICBzdXBlcihuYW1lc2VydmVyX3BvcnQ6IEFkZHJlc3NlcykK Ky0gICAgICBlbmQKKy0gICAgZW5kCistCistICAgICMjCistICAgICMgSXRlcmF0ZXMgb3ZlciBh bGwgSVAgYWRkcmVzc2VzIGZvciArbmFtZSsgcmV0cmlldmVkIGZyb20gdGhlIG1ETlMKKy0gICAg IyByZXNvbHZlciwgcHJvdmlkZWQgbmFtZSBlbmRzIHdpdGggImxvY2FsIi4gIElmIHRoZSBuYW1l IGRvZXMgbm90IGVuZCBpbgorLSAgICAjICJsb2NhbCIgbm8gcmVjb3JkcyB3aWxsIGJlIHJldHVy bmVkLgorLSAgICAjCistICAgICMgK25hbWUrIGNhbiBiZSBhIEdlbTo6UmVzb2x2OjpETlM6Ok5h bWUgb3IgYSBTdHJpbmcuICBSZXRyaWV2ZWQgYWRkcmVzc2VzIHdpbGwKKy0gICAgIyBiZSBhIEdl bTo6UmVzb2x2OjpJUHY0IG9yIEdlbTo6UmVzb2x2OjpJUHY2CistCistICAgIGRlZiBlYWNoX2Fk ZHJlc3MobmFtZSkKKy0gICAgICBuYW1lID0gR2VtOjpSZXNvbHY6OkROUzo6TmFtZS5jcmVhdGUo bmFtZSkKKy0KKy0gICAgICByZXR1cm4gdW5sZXNzIG5hbWVbLTFdLnRvX3MgPT0gJ2xvY2FsJwor LQorLSAgICAgIHN1cGVyKG5hbWUpCistICAgIGVuZAorLQorLSAgICBkZWYgbWFrZV91ZHBfcmVx dWVzdGVyICMgOm5vZG9jOgorLSAgICAgIG5hbWVzZXJ2ZXJfcG9ydCA9IEBjb25maWcubmFtZXNl cnZlcl9wb3J0CistICAgICAgUmVxdWVzdGVyOjpNRE5TT25lU2hvdC5uZXcoKm5hbWVzZXJ2ZXJf cG9ydCkKKy0gICAgZW5kCistCistICBlbmQKKy0KKy0gIG1vZHVsZSBMT0MgIyA6bm9kb2M6Cist CistICAgICMjCistICAgICMgQSBHZW06OlJlc29sdjo6TE9DOjpTaXplCistCistICAgIGNsYXNz IFNpemUKKy0KKy0gICAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiBMT0Mgc2l6ZSBtdXN0IG1hdGNo LgorLQorLSAgICAgIFJlZ2V4ID0gL14oXGQrXC4qXGQqKVttXSQvCistCistICAgICAgIyMKKy0g ICAgICAjIENyZWF0ZXMgYSBuZXcgTE9DOjpTaXplIGZyb20gK2FyZysgd2hpY2ggbWF5IGJlOgor LSAgICAgICMKKy0gICAgICAjIExPQzo6U2l6ZTo6IHJldHVybnMgK2FyZysuCistICAgICAgIyBT dHJpbmc6OiArYXJnKyBtdXN0IG1hdGNoIHRoZSBMT0M6OlNpemU6OlJlZ2V4IGNvbnN0YW50Cist CistICAgICAgZGVmIHNlbGYuY3JlYXRlKGFyZykKKy0gICAgICAgIGNhc2UgYXJnCistICAgICAg ICB3aGVuIFNpemUKKy0gICAgICAgICAgcmV0dXJuIGFyZworLSAgICAgICAgd2hlbiBTdHJpbmcK Ky0gICAgICAgICAgc2NhbGFyID0gJycKKy0gICAgICAgICAgaWYgUmVnZXggPX4gYXJnCistICAg ICAgICAgICAgc2NhbGFyID0gWygoJDEudG9fZiooMWUyKSkudG9faS50b19zWzBdLnRvX2kqKDIq KjQpKygoJDEudG9fZiooMWUyKSkudG9faS50b19zLmxlbmd0aC0xKSldLnBhY2soIkMiKQorLSAg ICAgICAgICBlbHNlCistICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvci5uZXcoIm5vdCBh IHByb3Blcmx5IGZvcm1lZCBTaXplIHN0cmluZzogIiArIGFyZykKKy0gICAgICAgICAgZW5kCist ICAgICAgICAgIHJldHVybiBTaXplLm5ldyhzY2FsYXIpCistICAgICAgICBlbHNlCistICAgICAg ICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IubmV3KCJjYW5ub3QgaW50ZXJwcmV0IGFzIFNpemU6ICN7 YXJnLmluc3BlY3R9IikKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLQorLSAgICAgICMgSW50 ZXJuYWwgdXNlOyB1c2Ugc2VsZi5jcmVhdGUuCistICAgICAgZGVmIGluaXRpYWxpemUoc2NhbGFy KQorLSAgICAgICAgQHNjYWxhciA9IHNjYWxhcgorLSAgICAgIGVuZAorLQorLSAgICAgICMjCist ICAgICAgIyBUaGUgcmF3IHNpemUKKy0KKy0gICAgICBhdHRyX3JlYWRlciA6c2NhbGFyCistCist ICAgICAgZGVmIHRvX3MgIyA6bm9kb2M6CistICAgICAgICBzID0gQHNjYWxhci51bnBhY2soIkgy Iikuam9pbi50b19zCistICAgICAgICByZXR1cm4gKChzWzBdLnRvX2kpKigxMCoqKHNbMV0udG9f aS0yKSkpLnRvX3MgPDwgIm0iCistICAgICAgZW5kCistCistICAgICAgZGVmIGluc3BlY3QgIyA6 bm9kb2M6CistICAgICAgICByZXR1cm4gIiM8I3tzZWxmLmNsYXNzfSAje3NlbGZ9PiIKKy0gICAg ICBlbmQKKy0KKy0gICAgICBkZWYgPT0ob3RoZXIpICMgOm5vZG9jOgorLSAgICAgICAgcmV0dXJu IEBzY2FsYXIgPT0gb3RoZXIuc2NhbGFyCistICAgICAgZW5kCistCistICAgICAgZGVmIGVxbD8o b3RoZXIpICMgOm5vZG9jOgorLSAgICAgICAgcmV0dXJuIHNlbGYgPT0gb3RoZXIKKy0gICAgICBl bmQKKy0KKy0gICAgICBkZWYgaGFzaCAjIDpub2RvYzoKKy0gICAgICAgIHJldHVybiBAc2NhbGFy Lmhhc2gKKy0gICAgICBlbmQKKy0KKy0gICAgZW5kCistCistICAgICMjCistICAgICMgQSBHZW06 OlJlc29sdjo6TE9DOjpDb29yZAorLQorLSAgICBjbGFzcyBDb29yZAorLQorLSAgICAgICMgUmVn dWxhciBleHByZXNzaW9uIExPQyBDb29yZCBtdXN0IG1hdGNoLgorLQorLSAgICAgIFJlZ2V4ID0g L14oXGQrKVxzKFxkKylccyhcZCtcLlxkKylccyhbTkVTV10pJC8KKy0KKy0gICAgICAjIworLSAg ICAgICMgQ3JlYXRlcyBhIG5ldyBMT0M6OkNvb3JkIGZyb20gK2FyZysgd2hpY2ggbWF5IGJlOgor LSAgICAgICMKKy0gICAgICAjIExPQzo6Q29vcmQ6OiByZXR1cm5zICthcmcrLgorLSAgICAgICMg U3RyaW5nOjogK2FyZysgbXVzdCBtYXRjaCB0aGUgTE9DOjpDb29yZDo6UmVnZXggY29uc3RhbnQK Ky0KKy0gICAgICBkZWYgc2VsZi5jcmVhdGUoYXJnKQorLSAgICAgICAgY2FzZSBhcmcKKy0gICAg ICAgIHdoZW4gQ29vcmQKKy0gICAgICAgICAgcmV0dXJuIGFyZworLSAgICAgICAgd2hlbiBTdHJp bmcKKy0gICAgICAgICAgY29vcmRpbmF0ZXMgPSAnJworLSAgICAgICAgICBpZiBSZWdleCA9fiBh cmcgJiYgJDEudG9fZiA8IDE4MAorLSAgICAgICAgICAgIG0gPSAkfgorLSAgICAgICAgICAgIGhl bWkgPSAobVs0XVsvW05FXS9dKSB8fCAobVs0XVsvW1NXXS9dKSA/IDEgOiAtMQorLSAgICAgICAg ICAgIGNvb3JkaW5hdGVzID0gWyAoKG1bMV0udG9faSooMzZlNSkpICsgKG1bMl0udG9faSooNmU0 KSkgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1bM10udG9fZiooMWUzKSkpICog aGVtaSsoMioqMzEpIF0ucGFjaygiTiIpCistICAgICAgICAgICAgb3JpZW50YXRpb24gPSBtWzRd Wy9bTlNdL10gPyAnbGF0JyA6ICdsb24nCistICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICBy YWlzZSBBcmd1bWVudEVycm9yLm5ldygibm90IGEgcHJvcGVybHkgZm9ybWVkIENvb3JkIHN0cmlu ZzogIiArIGFyZykKKy0gICAgICAgICAgZW5kCistICAgICAgICAgIHJldHVybiBDb29yZC5uZXco Y29vcmRpbmF0ZXMsb3JpZW50YXRpb24pCistICAgICAgICBlbHNlCistICAgICAgICAgIHJhaXNl IEFyZ3VtZW50RXJyb3IubmV3KCJjYW5ub3QgaW50ZXJwcmV0IGFzIENvb3JkOiAje2FyZy5pbnNw ZWN0fSIpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIEludGVybmFsIHVz ZTsgdXNlIHNlbGYuY3JlYXRlLgorLSAgICAgIGRlZiBpbml0aWFsaXplKGNvb3JkaW5hdGVzLG9y aWVudGF0aW9uKQorLSAgICAgICAgdW5sZXNzIGNvb3JkaW5hdGVzLmtpbmRfb2Y/KFN0cmluZykK Ky0gICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvci5uZXcoIkNvb3JkIG11c3QgYmUgYSAzMmJp dCB1bnNpZ25lZCBpbnRlZ2VyIGluIGhleCBmb3JtYXQ6ICN7Y29vcmRpbmF0ZXMuaW5zcGVjdH0i KQorLSAgICAgICAgZW5kCistICAgICAgICB1bmxlc3Mgb3JpZW50YXRpb24ua2luZF9vZj8oU3Ry aW5nKSAmJiBvcmllbnRhdGlvblsvXmxvbiR8XmxhdCQvXQorLSAgICAgICAgICByYWlzZSBBcmd1 bWVudEVycm9yLm5ldygnQ29vcmQgZXhwZWN0cyBvcmllbnRhdGlvbiB0byBiZSBhIFN0cmluZyBh cmd1bWVudCBvZiAibGF0IiBvciAibG9uIicpCistICAgICAgICBlbmQKKy0gICAgICAgIEBjb29y ZGluYXRlcyA9IGNvb3JkaW5hdGVzCistICAgICAgICBAb3JpZW50YXRpb24gPSBvcmllbnRhdGlv bgorLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAgICAgIyBUaGUgcmF3IGNvb3JkaW5hdGVz CistCistICAgICAgYXR0cl9yZWFkZXIgOmNvb3JkaW5hdGVzCistCistICAgICAgIyMgVGhlIG9y aWVudGF0aW9uIG9mIHRoZSBoZW1pc3BoZXJlIGFzICdsYXQnIG9yICdsb24nCistCistICAgICAg YXR0cl9yZWFkZXIgOm9yaWVudGF0aW9uCistCistICAgICAgZGVmIHRvX3MgIyA6bm9kb2M6Cist ICAgICAgICAgIGMgPSBAY29vcmRpbmF0ZXMudW5wYWNrKCJOIikuam9pbi50b19pCistICAgICAg ICAgIHZhbCAgICAgID0gKGMgLSAoMioqMzEpKS5hYnMKKy0gICAgICAgICAgZnJhY3NlY3MgPSAo dmFsICUgMWUzKS50b19pLnRvX3MKKy0gICAgICAgICAgdmFsICAgICAgPSB2YWwgLyAxZTMKKy0g ICAgICAgICAgc2VjcyAgICAgPSAodmFsICUgNjApLnRvX2kudG9fcworLSAgICAgICAgICB2YWwg ICAgICA9IHZhbCAvIDYwCistICAgICAgICAgIG1pbnMgICAgID0gKHZhbCAlIDYwKS50b19pLnRv X3MKKy0gICAgICAgICAgZGVncyAgICAgPSAodmFsIC8gNjApLnRvX2kudG9fcworLSAgICAgICAg ICBwb3NpID0gKGMgPj0gMioqMzEpCistICAgICAgICAgIGNhc2UgcG9zaQorLSAgICAgICAgICB3 aGVuIHRydWUKKy0gICAgICAgICAgICBoZW1pID0gQG9yaWVudGF0aW9uWy9ebGF0JC9dID8gIk4i IDogIkUiCistICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICBoZW1pID0gQG9yaWVudGF0aW9u Wy9ebG9uJC9dID8gIlciIDogIlMiCistICAgICAgICAgIGVuZAorLSAgICAgICAgICByZXR1cm4g ZGVncyA8PCAiICIgPDwgbWlucyA8PCAiICIgPDwgc2VjcyA8PCAiLiIgPDwgZnJhY3NlY3MgPDwg IiAiIDw8IGhlbWkKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgaW5zcGVjdCAjIDpub2RvYzoK Ky0gICAgICAgIHJldHVybiAiIzwje3NlbGYuY2xhc3N9ICN7c2VsZn0+IgorLSAgICAgIGVuZAor LQorLSAgICAgIGRlZiA9PShvdGhlcikgIyA6bm9kb2M6CistICAgICAgICByZXR1cm4gQGNvb3Jk aW5hdGVzID09IG90aGVyLmNvb3JkaW5hdGVzCistICAgICAgZW5kCistCistICAgICAgZGVmIGVx bD8ob3RoZXIpICMgOm5vZG9jOgorLSAgICAgICAgcmV0dXJuIHNlbGYgPT0gb3RoZXIKKy0gICAg ICBlbmQKKy0KKy0gICAgICBkZWYgaGFzaCAjIDpub2RvYzoKKy0gICAgICAgIHJldHVybiBAY29v cmRpbmF0ZXMuaGFzaAorLSAgICAgIGVuZAorLQorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAg IyBBIEdlbTo6UmVzb2x2OjpMT0M6OkFsdAorLQorLSAgICBjbGFzcyBBbHQKKy0KKy0gICAgICAj IFJlZ3VsYXIgZXhwcmVzc2lvbiBMT0MgQWx0IG11c3QgbWF0Y2guCistCistICAgICAgUmVnZXgg PSAvXihbKy1dKlxkK1wuKlxkKilbbV0kLworLQorLSAgICAgICMjCistICAgICAgIyBDcmVhdGVz IGEgbmV3IExPQzo6QWx0IGZyb20gK2FyZysgd2hpY2ggbWF5IGJlOgorLSAgICAgICMKKy0gICAg ICAjIExPQzo6QWx0OjogcmV0dXJucyArYXJnKy4KKy0gICAgICAjIFN0cmluZzo6ICthcmcrIG11 c3QgbWF0Y2ggdGhlIExPQzo6QWx0OjpSZWdleCBjb25zdGFudAorLQorLSAgICAgIGRlZiBzZWxm LmNyZWF0ZShhcmcpCistICAgICAgICBjYXNlIGFyZworLSAgICAgICAgd2hlbiBBbHQKKy0gICAg ICAgICAgcmV0dXJuIGFyZworLSAgICAgICAgd2hlbiBTdHJpbmcKKy0gICAgICAgICAgYWx0aXR1 ZGUgPSAnJworLSAgICAgICAgICBpZiBSZWdleCA9fiBhcmcKKy0gICAgICAgICAgICBhbHRpdHVk ZSA9IFsoJDEudG9fZiooMWUyKSkrKDFlNyldLnBhY2soIk4iKQorLSAgICAgICAgICBlbHNlCist ICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvci5uZXcoIm5vdCBhIHByb3Blcmx5IGZvcm1l ZCBBbHQgc3RyaW5nOiAiICsgYXJnKQorLSAgICAgICAgICBlbmQKKy0gICAgICAgICAgcmV0dXJu IEFsdC5uZXcoYWx0aXR1ZGUpCistICAgICAgICBlbHNlCistICAgICAgICAgIHJhaXNlIEFyZ3Vt ZW50RXJyb3IubmV3KCJjYW5ub3QgaW50ZXJwcmV0IGFzIEFsdDogI3thcmcuaW5zcGVjdH0iKQor LSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgIyBJbnRlcm5hbCB1c2U7IHVzZSBz ZWxmLmNyZWF0ZS4KKy0gICAgICBkZWYgaW5pdGlhbGl6ZShhbHRpdHVkZSkKKy0gICAgICAgIEBh bHRpdHVkZSA9IGFsdGl0dWRlCistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAjIFRo ZSByYXcgYWx0aXR1ZGUKKy0KKy0gICAgICBhdHRyX3JlYWRlciA6YWx0aXR1ZGUKKy0KKy0gICAg ICBkZWYgdG9fcyAjIDpub2RvYzoKKy0gICAgICAgIGEgPSBAYWx0aXR1ZGUudW5wYWNrKCJOIiku am9pbi50b19pCistICAgICAgICByZXR1cm4gKChhLnRvX2YvMWUyKS0xZTUpLnRvX3MgKyAibSIK Ky0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgaW5zcGVjdCAjIDpub2RvYzoKKy0gICAgICAgIHJl dHVybiAiIzwje3NlbGYuY2xhc3N9ICN7c2VsZn0+IgorLSAgICAgIGVuZAorLQorLSAgICAgIGRl ZiA9PShvdGhlcikgIyA6bm9kb2M6CistICAgICAgICByZXR1cm4gQGFsdGl0dWRlID09IG90aGVy LmFsdGl0dWRlCistICAgICAgZW5kCistCistICAgICAgZGVmIGVxbD8ob3RoZXIpICMgOm5vZG9j OgorLSAgICAgICAgcmV0dXJuIHNlbGYgPT0gb3RoZXIKKy0gICAgICBlbmQKKy0KKy0gICAgICBk ZWYgaGFzaCAjIDpub2RvYzoKKy0gICAgICAgIHJldHVybiBAYWx0aXR1ZGUuaGFzaAorLSAgICAg IGVuZAorLQorLSAgICBlbmQKKy0KKy0gIGVuZAorLQorLSAgIyMKKy0gICMgRGVmYXVsdCByZXNv bHZlciB0byB1c2UgZm9yIEdlbTo6UmVzb2x2IGNsYXNzIG1ldGhvZHMuCistCistICBEZWZhdWx0 UmVzb2x2ZXIgPSBzZWxmLm5ldworLQorLSAgIyMKKy0gICMgUmVwbGFjZXMgdGhlIHJlc29sdmVy cyBpbiB0aGUgZGVmYXVsdCByZXNvbHZlciB3aXRoICtuZXdfcmVzb2x2ZXJzKy4gIFRoaXMKKy0g ICMgYWxsb3dzIHJlc29sdmVycyB0byBiZSBjaGFuZ2VkIGZvciByZXNvbHYtcmVwbGFjZS4KKy0K Ky0gIGRlZiBEZWZhdWx0UmVzb2x2ZXIucmVwbGFjZV9yZXNvbHZlcnMgbmV3X3Jlc29sdmVycwor LSAgICBAcmVzb2x2ZXJzID0gbmV3X3Jlc29sdmVycworLSAgZW5kCistCistICAjIworLSAgIyBB ZGRyZXNzIFJlZ2V4cCB0byB1c2UgZm9yIG1hdGNoaW5nIElQIGFkZHJlc3Nlcy4KKy0KKy0gIEFk ZHJlc3NSZWdleCA9IC8oPzoje0lQdjQ6OlJlZ2V4fSl8KD86I3tJUHY2OjpSZWdleH0pLworLQor LWVuZAoKZGlmZiAtLWdpdCBhL3J1YnktNF8wLXByMTg1MjgtdXBkYXRlLXJlc29sdi0wXzdfMi5w YXRjaCBiL3J1YnktNF8wLXByMTg1MjgtdXBkYXRlLXJlc29sdi0wXzdfMi5wYXRjaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ5ZjBkMi4uMDAwMDAwMAotLS0gYS9ydWJ5LTRfMC1w cjE4NTI4LXVwZGF0ZS1yZXNvbHYtMF83XzIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5ODQg KzAsMCBAQAotRnJvbSA4OGJhMWQ0ZTEzNzBmNDIyMWUwNjBlNGVkNTNlZjE5MTgzNGU1ODM4IE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSGlyb3NoaSBTSElCQVRBIDxoc2J0QHJ1Ynkt bGFuZy5vcmc+Ci1EYXRlOiBUaHUsIDI3IEF1ZyAyMDI2IDEyOjMxOjQ5ICswOTAwCi1TdWJqZWN0 OiBbUEFUQ0hdIEJ1bXAgdXAgcmVzb2x2LTAuNy4yIGZvciBSdWJ5IDQuMAotCi1CYWNrcG9ydCBv ZiB0aGUgQXVndXN0IDIwMjYgcmVzb2x2IHNlY3VyaXR5IHJlbGVhc2UuCi0KLUNWRS0yMDI2LTgw MjEyCi1DVkUtMjAyNi04MDIxMwotCi1Dby1BdXRob3JlZC1CeTogQ2xhdWRlIE9wdXMgNSA8bm9y ZXBseUBhbnRocm9waWMuY29tPgotLS0tCi0gbGliL3Jlc29sdi5yYiAgICAgICAgICAgICAgICAg ICAgIHwgMTE0ICsrKysrKysrKy0tCi0gdGVzdC9yZXNvbHYvdGVzdF9kbnMucmIgICAgICAgICAg IHwgMzE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIHRlc3QvcmVzb2x2L3Rlc3Rf cmVzb3VyY2UucmIgICAgICB8ICA2MSArKysrKysKLSB0ZXN0L3Jlc29sdi90ZXN0X3Jlc291cmNl X2xlYWsucmIgfCAxMDEgKysrKysrKysrKwotIDQgZmlsZXMgY2hhbmdlZCwgNTgyIGluc2VydGlv bnMoKyksIDEzIGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L3Jlc29sdi90 ZXN0X3Jlc291cmNlX2xlYWsucmIKLQotZGlmZiAtLWdpdCBhL2xpYi9yZXNvbHYucmIgYi9saWIv cmVzb2x2LnJiCi1pbmRleCAwZTYyYWFmODUxMDQ5Ni4uYTJmZTY5MmIzOGY2Y2YgMTAwNjQ0Ci0t LS0gYS9saWIvcmVzb2x2LnJiCi0rKysgYi9saWIvcmVzb2x2LnJiCi1AQCAtMzUsNyArMzUsNyBA QAotIGNsYXNzIFJlc29sdgotIAotICAgIyBUaGUgdmVyc2lvbiBzdHJpbmcKLS0gIFZFUlNJT04g PSAiMC43LjAiCi0rICBWRVJTSU9OID0gIjAuNy4yIgotIAotICAgIyMKLSAgICMgTG9va3MgdXAg dGhlIGZpcnN0IElQIGFkZHJlc3MgZm9yICtuYW1lKy4KLUBAIC00ODcsMTMgKzQ4NywxOCBAQCBk ZWYgZWFjaF9uYW1lKGFkZHJlc3MpCi0gICAgICMgKiBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklO OjpBCi0gICAgICMgKiBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpBQUFBCi0gICAgICMgKiBS ZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpBTlkKLSsgICAgIyAqIFJlc29sdjo6RE5TOjpSZXNv dXJjZTo6SU46OkNBQQotICAgICAjICogUmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6Q05BTUUK LSAgICAgIyAqIFJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkhJTkZPCi0rICAgICMgKiBSZXNv bHY6OkROUzo6UmVzb3VyY2U6OklOOjpIVFRQUwotKyAgICAjICogUmVzb2x2OjpETlM6OlJlc291 cmNlOjpJTjo6TE9DCi0gICAgICMgKiBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpNSU5GTwot ICAgICAjICogUmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6TVgKLSAgICAgIyAqIFJlc29sdjo6 RE5TOjpSZXNvdXJjZTo6SU46Ok5TCi0gICAgICMgKiBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklO OjpQVFIKLSAgICAgIyAqIFJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OlNPQQotKyAgICAjICog UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6U1JWCi0rICAgICMgKiBSZXNvbHY6OkROUzo6UmVz b3VyY2U6OklOOjpTVkNCCi0gICAgICMgKiBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpUWFQK LSAgICAgIyAqIFJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OldLUwotICAgICAjCi1AQCAtNzIx LDcgKzcyNiw4IEBAIGRlZiByZXF1ZXN0KHNlbmRlciwgdG91dCkKLSAgICAgICAgICAgYmVnaW4K LSAgICAgICAgICAgICByZXBseSwgZnJvbSA9IHJlY3ZfcmVwbHkoc2VsZWN0X3Jlc3VsdFswXSkK LSAgICAgICAgICAgcmVzY3VlIEVycm5vOjpFQ09OTlJFRlVTRUQsICMgR05VL0xpbnV4LCBGcmVl QlNECi0tICAgICAgICAgICAgICAgICBFcnJubzo6RUNPTk5SRVNFVCAjIFdpbmRvd3MKLSsgICAg ICAgICAgICAgICAgIEVycm5vOjpFQ09OTlJFU0VULCAjIFdpbmRvd3MKLSsgICAgICAgICAgICAg ICAgIEVPRkVycm9yCi0gICAgICAgICAgICAgIyBObyBuYW1lIHNlcnZlciBydW5uaW5nIG9uIHRo ZSBzZXJ2ZXI/Ci0gICAgICAgICAgICAgIyBEb24ndCB3YWl0IGFueW1vcmUuCi0gICAgICAgICAg ICAgcmFpc2UgUmVzb2x2VGltZW91dAotQEAgLTkzMCw4ICs5MzYsMTEgQEAgZGVmIGluaXRpYWxp emUoaG9zdCwgcG9ydD1Qb3J0KQotICAgICAgICAgZW5kCi0gCi0gICAgICAgICBkZWYgcmVjdl9y ZXBseShyZWFkYWJsZV9zb2NrcykKLS0gICAgICAgICAgbGVuID0gcmVhZGFibGVfc29ja3NbMF0u cmVhZCgyKS51bnBhY2soJ24nKVswXQotKyAgICAgICAgICBsZW5fZGF0YSA9IHJlYWRhYmxlX3Nv Y2tzWzBdLnJlYWQoMikKLSsgICAgICAgICAgcmFpc2UgRU9GRXJyb3IgaWYgbGVuX2RhdGEubmls PyB8fCBsZW5fZGF0YS5ieXRlc2l6ZSAhPSAyCi0rICAgICAgICAgIGxlbiA9IGxlbl9kYXRhLnVu cGFjaygnbicpWzBdCi0gICAgICAgICAgIHJlcGx5ID0gQHNvY2tzWzBdLnJlYWQobGVuKQotKyAg ICAgICAgICByYWlzZSBFT0ZFcnJvciBpZiByZXBseS5uaWw/IHx8IHJlcGx5LmJ5dGVzaXplICE9 IGxlbgotICAgICAgICAgICByZXR1cm4gcmVwbHksIG5pbAotICAgICAgICAgZW5kCi0gCi1AQCAt MTI0NCw2ICsxMjUzLDEzIEBAIGRlZiBzZWxmLnNwbGl0KGFyZykKLSAKLSAgICAgICBjbGFzcyBT dHIgIyA6bm9kb2M6Ci0gICAgICAgICBkZWYgaW5pdGlhbGl6ZShzdHJpbmcpCi0rICAgICAgICAg ICMgQSBsYWJlbCBpcyBsaW1pdGVkIHRvIDYzIG9jdGV0cy4gW1JGQyAxMDM1IDIuMy40XSBDaGVj a2luZyBpdCBoZXJlCi0rICAgICAgICAgICMgbWFrZXMgaXQgYW4gaW52YXJpYW50IG9mIHRoZSBv YmplY3Q6IGV2ZXJ5IGxhYmVsLCBob3dldmVyIGl0IHdhcwotKyAgICAgICAgICAjIGJ1aWx0LCBm aXRzIGluIGl0cyBsZW5ndGggb2N0ZXQgYW5kIGNhbm5vdCB3cmFwIGl0LiBDYWxsZXJzIHR1cm4K LSsgICAgICAgICAgIyB0aGlzIGludG8gdGhlIGVycm9yIHRoZWlyIG93biBjb250cmFjdCBwcm9t aXNlcy4KLSsgICAgICAgICAgaWYgc3RyaW5nLmJ5dGVzaXplID4gNjMKLSsgICAgICAgICAgICBy YWlzZSBBcmd1bWVudEVycm9yLCAiRE5TIGxhYmVsIGlzIHRvbyBsb25nICgje3N0cmluZy5ieXRl c2l6ZX0gYnl0ZXMsIG1heCA2Myk6ICN7c3RyaW5nLmluc3BlY3R9IgotKyAgICAgICAgICBlbmQK LSAgICAgICAgICAgQHN0cmluZyA9IHN0cmluZwotICAgICAgICAgICAjIGNhc2UgaW5zZW5zaXZp dHkgb2YgRE5TIGxhYmVscyBkb2Vzbid0IGFwcGx5IG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiBbUkZD IDQzNDNdCi0gICAgICAgICAgICMgVGhpcyBhc3N1bWVzIEBzdHJpbmcgaXMgZ2l2ZW4gaW4gQVND SUkgY29tcGF0aWJsZSBlbmNvZGluZy4KLUBAIC0xMjg5LDcgKzEzMDUsMjYgQEAgZGVmIHNlbGYu Y3JlYXRlKGFyZykKLSAgICAgICAgIHdoZW4gTmFtZQotICAgICAgICAgICByZXR1cm4gYXJnCi0g ICAgICAgICB3aGVuIFN0cmluZwotLSAgICAgICAgICByZXR1cm4gTmFtZS5uZXcoTGFiZWwuc3Bs aXQoYXJnKSwgL1wuXHovID1+IGFyZyA/IHRydWUgOiBmYWxzZSkKLSsgICAgICAgICAgIyBBIGhv c3RuYW1lIGlzIHJ1bnRpbWUgZGF0YSByYXRoZXIgdGhhbiBhIHByb2dyYW1taW5nIG1pc3Rha2Us IHNvCi0rICAgICAgICAgICMgYm90aCBzaXplIGxpbWl0cyBzdXJmYWNlIGFzIFJlc29sdkVycm9y IHRvIHN0YXkgcmVzY3VhYmxlIGFsb25nc2lkZQotKyAgICAgICAgICAjIHRoZSByZXN0IG9mIG5h bWUgcmVzb2x1dGlvbi4gVGhlIHR5cGUgY2hlY2sgYmVsb3cgaXMgYSBjYWxsZXIKLSsgICAgICAg ICAgIyBtaXN0YWtlIGFuZCBrZWVwcyByYWlzaW5nIEFyZ3VtZW50RXJyb3IuCi0rICAgICAgICAg IGJlZ2luCi0rICAgICAgICAgICAgbGFiZWxzID0gTGFiZWwuc3BsaXQoYXJnKQotKyAgICAgICAg ICByZXNjdWUgQXJndW1lbnRFcnJvciA9PiBlCi0rICAgICAgICAgICAgcmFpc2UgUmVzb2x2RXJy b3IubmV3KGUubWVzc2FnZSkKLSsgICAgICAgICAgZW5kCi0rICAgICAgICAgICMgTGFiZWw6OlN0 ciBlbmZvcmNlcyB0aGUgcGVyLWxhYmVsIGxpbWl0LiBPbmx5IHRoZSB0b3RhbCBpcyBrbm93YWJs ZQotKyAgICAgICAgICAjIGhlcmUsIGFuZCBpdCBjb3VudHMgdGhlIGVuY29kZWQgZm9ybSwgc28g c2l6ZSBzdGFydHMgYXQgMSBmb3IgdGhlCi0rICAgICAgICAgICMgcm9vdCBsYWJlbCdzIHRlcm1p bmF0aW5nIHplcm8gb2N0ZXQuIFtSRkMgMTAzNSAyLjMuNCwgMy4xXQotKyAgICAgICAgICBzaXpl ID0gMQotKyAgICAgICAgICBsYWJlbHMuZWFjaCBkbyB8bGFiZWx8Ci0rICAgICAgICAgICAgc2l6 ZSArPSAxICsgbGFiZWwuc3RyaW5nLmJ5dGVzaXplCi0rICAgICAgICAgICAgaWYgc2l6ZSA+IDI1 NQotKyAgICAgICAgICAgICAgcmFpc2UgUmVzb2x2RXJyb3IubmV3KCJETlMgbmFtZSBpcyB0b28g bG9uZyAoI3tzaXplfSBvY3RldHMsIG1heCAyNTUpOiAje2FyZy5pbnNwZWN0fSIpCi0rICAgICAg ICAgICAgZW5kCi0rICAgICAgICAgIGVuZAotKyAgICAgICAgICByZXR1cm4gTmFtZS5uZXcobGFi ZWxzLCAvXC5cei8gPX4gYXJnID8gdHJ1ZSA6IGZhbHNlKQotICAgICAgICAgZWxzZQotICAgICAg ICAgICByYWlzZSBBcmd1bWVudEVycm9yLm5ldygiY2Fubm90IGludGVycHJldCBhcyBETlMgbmFt ZTogI3thcmcuaW5zcGVjdH0iKQotICAgICAgICAgZW5kCi1AQCAtMTQxMSwxMiArMTQ0NiwyNCBA QCBkZWYgPT0ob3RoZXIpCi0gICAgICAgICAgICAgICAgQHJkID09IG90aGVyLnJkICYmCi0gICAg ICAgICAgICAgICAgQHJhID09IG90aGVyLnJhICYmCi0gICAgICAgICAgICAgICAgQHJjb2RlID09 IG90aGVyLnJjb2RlICYmCi0tICAgICAgICAgICAgICAgQHF1ZXN0aW9uID09IG90aGVyLnF1ZXN0 aW9uICYmCi0rICAgICAgICAgICAgICAgcXVlc3Rpb25fZXF1YWw/KG90aGVyLnF1ZXN0aW9uKSAm JgotICAgICAgICAgICAgICAgIEBhbnN3ZXIgPT0gb3RoZXIuYW5zd2VyICYmCi0gICAgICAgICAg ICAgICAgQGF1dGhvcml0eSA9PSBvdGhlci5hdXRob3JpdHkgJiYKLSAgICAgICAgICAgICAgICBA YWRkaXRpb25hbCA9PSBvdGhlci5hZGRpdGlvbmFsCi0gICAgICAgZW5kCi0gCi0rICAgICAgIyBB IHF1ZXN0aW9uIGhvbGRzIHRoZSByZXNvdXJjZSBjbGFzcyBpdHNlbGYsIGFuZCBkZWNvZGluZyBj cmVhdGVzIGEgZnJlc2gKLSsgICAgICAjIGNsYXNzIGZvciBlYWNoIHVua25vd24gdHlwZSwgc28g dGhlIGNsYXNzZXMgY2Fubm90IGJlIGNvbXBhcmVkIGJ5Ci0rICAgICAgIyBpZGVudGl0eSBhbG9u ZS4KLSsgICAgICBwcml2YXRlIGRlZiBxdWVzdGlvbl9lcXVhbD8ob3RoZXJfcXVlc3Rpb24pICMg Om5vZG9jOgotKyAgICAgICAgcmV0dXJuIGZhbHNlIHVubGVzcyBAcXVlc3Rpb24ubGVuZ3RoID09 IG90aGVyX3F1ZXN0aW9uLmxlbmd0aAotKyAgICAgICAgQHF1ZXN0aW9uLnppcChvdGhlcl9xdWVz dGlvbikge3wobmFtZSwgdHlwZWNsYXNzKSwgKG9fbmFtZSwgb190eXBlY2xhc3MpfAotKyAgICAg ICAgICByZXR1cm4gZmFsc2UgdW5sZXNzIG5hbWUgPT0gb19uYW1lICYmCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVzb3VyY2U6OkdlbmVyaWMudHlwZV9jbGFzc19lcXVhbD8odHlw ZWNsYXNzLCBvX3R5cGVjbGFzcykKLSsgICAgICAgIH0KLSsgICAgICAgIHJldHVybiB0cnVlCi0r ICAgICAgZW5kCi0rCi0gICAgICAgZGVmIGFkZF9xdWVzdGlvbihuYW1lLCB0eXBlY2xhc3MpCi0g ICAgICAgICBAcXVlc3Rpb24gPDwgW05hbWUuY3JlYXRlKG5hbWUpLCB0eXBlY2xhc3NdCi0gICAg ICAgZW5kCi1AQCAtMTUyMyw4ICsxNTcwLDE1IEBAIGRlZiBwdXRfbGVuZ3RoMTYKLSAgICAgICAg IGVuZAotIAotICAgICAgICAgZGVmIHB1dF9zdHJpbmcoZCkKLS0gICAgICAgICAgc2VsZi5wdXRf cGFjaygiQyIsIGQubGVuZ3RoKQotLSAgICAgICAgICBAZGF0YSA8PCBkCi0rICAgICAgICAgIHMg PSBkLnRvX3MKLSsgICAgICAgICAgIyBBIGNoYXJhY3Rlci1zdHJpbmcgaXMgcHJlZml4ZWQgYnkg YSBzaW5nbGUgbGVuZ3RoIG9jdGV0LCBzbyBpdCBjYW4KLSsgICAgICAgICAgIyBob2xkIGF0IG1v c3QgMjU1IG9jdGV0cy4gW1JGQyAxMDM1IDMuM10gUmVqZWN0IGFueXRoaW5nIGxvbmdlciB0bwot KyAgICAgICAgICAjIGF2b2lkIHNpbGVudGx5IHRydW5jYXRpbmcgdGhlIGxlbmd0aCB0byBpdHMg bG93IDggYml0cyAobW9kIDI1NikuCi0rICAgICAgICAgIGlmIHMuYnl0ZXNpemUgPiAyNTUKLSsg ICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLCAiY2hhcmFjdGVyLXN0cmluZyBpcyB0b28g bG9uZyAoI3tzLmJ5dGVzaXplfSBieXRlcywgbWF4IDI1NSk6ICN7cy5pbnNwZWN0fSIKLSsgICAg ICAgICAgZW5kCi0rICAgICAgICAgIHNlbGYucHV0X3BhY2soIkMiLCBzLmJ5dGVzaXplKQotKyAg ICAgICAgICBAZGF0YSA8PCBzCi0gICAgICAgICBlbmQKLSAKLSAgICAgICAgIGRlZiBwdXRfc3Ry aW5nX2xpc3QoZHMpCi1AQCAtMTU1NCw3ICsxNjA4LDE3IEBAIGRlZiBwdXRfbGFiZWxzKGQsIGNv bXByZXNzOiB0cnVlKQotICAgICAgICAgZW5kCi0gCi0gICAgICAgICBkZWYgcHV0X2xhYmVsKGQp Ci0tICAgICAgICAgIHNlbGYucHV0X3N0cmluZyhkLnRvX3MpCi0rICAgICAgICAgIHMgPSBkLnRv X3MKLSsgICAgICAgICAgIyBMYWJlbDo6U3RyIGFwcGxpZXMgdGhpcyBsaW1pdCB3aGVuIGEgbGFi ZWwgaXMgYnVpbHQsIHNvIHdoYXQgaXMgbGVmdAotKyAgICAgICAgICAjIGZvciBoZXJlIGlzIGEg cmF3IHN0cmluZyBoYW5kZWQgc3RyYWlnaHQgdG8gcHV0X2xhYmVscy4gVGhlIHR3byB3YXlzCi0r ICAgICAgICAgICMgYW4gb3Zlci1sb25nIGxhYmVsIGdvZXMgd3JvbmcgZGlmZmVyOiA2NCB0byAy NTUgb2N0ZXRzIHdyaXRlIGEgbGVuZ3RoCi0rICAgICAgICAgICMgb2N0ZXQgaW4gdGhlIHJlc2Vy dmVkIG9yIGNvbXByZXNzaW9uIHBvaW50ZXIgcmFuZ2UsIGFuZCAyNTYgb3IgbW9yZQotKyAgICAg ICAgICAjIHdyYXAgaXQgbW9kIDI1Ni4gRWl0aGVyIHdheSB0aGUgZW5jb2RlZCBuYW1lIHN0b3Bz IGJlaW5nIHRoZSBuYW1lIHRoZQotKyAgICAgICAgICAjIGNhbGxlciBhc2tlZCBmb3IuIFtSRkMg MTAzNSAyLjMuNCwgNC4xLjRdCi0rICAgICAgICAgIGlmIHMuYnl0ZXNpemUgPiA2MwotKyAgICAg ICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICJETlMgbGFiZWwgaXMgdG9vIGxvbmcgKCN7cy5i eXRlc2l6ZX0gYnl0ZXMsIG1heCA2Myk6ICN7cy5pbnNwZWN0fSIKLSsgICAgICAgICAgZW5kCi0r ICAgICAgICAgIHNlbGYucHV0X3N0cmluZyhzKQotICAgICAgICAgZW5kCi0gICAgICAgZW5kCi0g Ci1AQCAtMTY4MCw3ICsxNzQ0LDkgQEAgZGVmIGdldF9sYWJlbHMKLSAgICAgICAgICAgcHJldl9p bmRleCA9IEBpbmRleAotICAgICAgICAgICBzYXZlX2luZGV4ID0gbmlsCi0gICAgICAgICAgIGQg PSBbXQotLSAgICAgICAgICBzaXplID0gLTEKLSsgICAgICAgICAgIyBzaXplIGNvdW50cyB0aGUg ZW5jb2RlZCBmb3JtLCBzbyBpdCBzdGFydHMgYXQgMSBmb3IgdGhlIHJvb3QKLSsgICAgICAgICAg IyBsYWJlbCdzIHRlcm1pbmF0aW5nIHplcm8gb2N0ZXQuIFtSRkMgMTAzNSAzLjFdCi0rICAgICAg ICAgIHNpemUgPSAxCi0gICAgICAgICAgIHdoaWxlIHRydWUKLSAgICAgICAgICAgICByYWlzZSBE ZWNvZGVFcnJvci5uZXcoImxpbWl0IGV4Y2VlZGVkIikgaWYgQGxpbWl0IDw9IEBpbmRleAotICAg ICAgICAgICAgIGNhc2UgQGRhdGEuZ2V0Ynl0ZShAaW5kZXgpCi1AQCAtMTcxMSw2ICsxNzc3LDEx IEBAIGRlZiBnZXRfbGFiZWxzCi0gCi0gICAgICAgICBkZWYgZ2V0X2xhYmVsCi0gICAgICAgICAg IHJldHVybiBMYWJlbDo6U3RyLm5ldyhzZWxmLmdldF9zdHJpbmcpCi0rICAgICAgICByZXNjdWUg QXJndW1lbnRFcnJvciA9PiBlCi0rICAgICAgICAgICMgQSBsZW5ndGggb2N0ZXQgb2YgNjQuLjE5 MSBpcyByZXNlcnZlZCByYXRoZXIgdGhhbiBhIGxhYmVsIGxlbmd0aCwKLSsgICAgICAgICAgIyBi dXQgdGhpcyBkZWNvZGVyIHVzZWQgdG8gcmVhZCBpdCBhcyBvbmUuIFtSRkMgMTAzNSA0LjEuNF0g UmVwb3J0IGl0Ci0rICAgICAgICAgICMgdGhlIHdheSB0aGUgcmVzdCBvZiBhIG1hbGZvcm1lZCBt ZXNzYWdlIGlzIHJlcG9ydGVkLgotKyAgICAgICAgICByYWlzZSBEZWNvZGVFcnJvci5uZXcoZS5t ZXNzYWdlKQotICAgICAgICAgZW5kCi0gCi0gICAgICAgICBkZWYgZ2V0X3F1ZXN0aW9uCi1AQCAt MTg5OCw4ICsxOTY5LDkgQEAgZGVmIHNlbGYuY3JlYXRlKGtleV9udW1iZXIpCi0gICAgICAgICAg IGtleV9uYW1lID0gOiJrZXkje2tleV9udW1iZXJ9IgotICAgICAgICAgICBjLmNvbnN0X3NldCg6 S2V5TmFtZSwga2V5X25hbWUpCi0gICAgICAgICAgIGMuY29uc3Rfc2V0KDpLZXlOdW1iZXIsIGtl eV9udW1iZXIpCi0tICAgICAgICAgIHNlbGYuY29uc3Rfc2V0KDoiS2V5I3trZXlfbnVtYmVyfSIs IGMpCi0tICAgICAgICAgIENsYXNzSGFzaFtrZXlfbmFtZV0gPSBDbGFzc0hhc2hba2V5X251bWJl cl0gPSBjCi0rICAgICAgICAgICMgTm90IHJlZ2lzdGVyZWQgaW4gYSBjb25zdGFudCBvciBpbiBD bGFzc0hhc2guIENsYXNzSGFzaCBjcmVhdGVzIGEKLSsgICAgICAgICAgIyBjbGFzcyBmb3IgZXZl cnkgdW5rbm93biBTdmNQYXJhbUtleSwgc28gcmVnaXN0ZXJpbmcgdGhlbQotKyAgICAgICAgICAj IHBlcm1hbmVudGx5IHdvdWxkIGxldCBhIG1hbGljaW91cyByZXNwb25zZSBleGhhdXN0IG1lbW9y eS4KLSAgICAgICAgICAgcmV0dXJuIGMKLSAgICAgICAgIGVuZAotICAgICAgIGVuZAotQEAgLTIy MDYsMTIgKzIyNzgsMjggQEAgZGVmIHNlbGYuZGVjb2RlX3JkYXRhKG1zZykgIyA6bm9kb2M6Ci0g ICAgICAgICAgIHJldHVybiBzZWxmLm5ldyhtc2cuZ2V0X2J5dGVzKQotICAgICAgICAgZW5kCi0g Ci0rICAgICAgICAjIGNyZWF0ZSBtYWtlcyBhIGZyZXNoIGNsYXNzIGZvciBlYWNoIGRlY29kZWQg cmVzb3VyY2UsIHNvIHRoZSB0eXBlIGFuZAotKyAgICAgICAgIyBjbGFzcyB2YWx1ZXMgaGF2ZSB0 byBiZSBjb21wYXJlZCBpbnN0ZWFkIG9mIHRoZSBjbGFzcyBpdHNlbGYuCi0rICAgICAgICBkZWYg c2VsZi50eXBlX2NsYXNzX2VxdWFsPyhrbGFzcywgb3RoZXIpICMgOm5vZG9jOgotKyAgICAgICAg ICByZXR1cm4gdHJ1ZSBpZiBrbGFzcy5lcXVhbD8ob3RoZXIpCi0rICAgICAgICAgIEdlbmVyaWMg PiBrbGFzcyAmJiBHZW5lcmljID4gb3RoZXIgJiYKLSsgICAgICAgICAgICBrbGFzczo6VHlwZVZh bHVlID09IG90aGVyOjpUeXBlVmFsdWUgJiYKLSsgICAgICAgICAgICBrbGFzczo6Q2xhc3NWYWx1 ZSA9PSBvdGhlcjo6Q2xhc3NWYWx1ZQotKyAgICAgICAgZW5kCi0rCi0rICAgICAgICBkZWYgPT0o b3RoZXIpICMgOm5vZG9jOgotKyAgICAgICAgICByZXR1cm4gb3RoZXIuaXNfYT8oR2VuZXJpYykg JiYKLSsgICAgICAgICAgICAgICAgIEdlbmVyaWMudHlwZV9jbGFzc19lcXVhbD8oc2VsZi5jbGFz cywgb3RoZXIuY2xhc3MpICYmCi0rICAgICAgICAgICAgICAgICBAZGF0YSA9PSBvdGhlci5kYXRh Ci0rICAgICAgICBlbmQKLSsKLSAgICAgICAgIGRlZiBzZWxmLmNyZWF0ZSh0eXBlX3ZhbHVlLCBj bGFzc192YWx1ZSkgIyA6bm9kb2M6Ci0gICAgICAgICAgIGMgPSBDbGFzcy5uZXcoR2VuZXJpYykK LSAgICAgICAgICAgYy5jb25zdF9zZXQoOlR5cGVWYWx1ZSwgdHlwZV92YWx1ZSkKLSAgICAgICAg ICAgYy5jb25zdF9zZXQoOkNsYXNzVmFsdWUsIGNsYXNzX3ZhbHVlKQotLSAgICAgICAgICBHZW5l cmljLmNvbnN0X3NldCgiVHlwZSN7dHlwZV92YWx1ZX1fQ2xhc3Mje2NsYXNzX3ZhbHVlfSIsIGMp Ci0tICAgICAgICAgIENsYXNzSGFzaFtbdHlwZV92YWx1ZSwgY2xhc3NfdmFsdWVdXSA9IGMKLSsg ICAgICAgICAgIyBOb3QgcmVnaXN0ZXJlZCBpbiBhIGNvbnN0YW50IG9yIGluIENsYXNzSGFzaC4g Z2V0X2NsYXNzIGNyZWF0ZXMgYQotKyAgICAgICAgICAjIGNsYXNzIGZvciBldmVyeSB1bmtub3du ICh0eXBlLCBjbGFzcykgcGFpciwgc28gcmVnaXN0ZXJpbmcgdGhlbQotKyAgICAgICAgICAjIHBl cm1hbmVudGx5IHdvdWxkIGxldCBhIG1hbGljaW91cyByZXNwb25zZSBleGhhdXN0IG1lbW9yeS4K LSAgICAgICAgICAgcmV0dXJuIGMKLSAgICAgICAgIGVuZAotICAgICAgIGVuZAotZGlmZiAtLWdp dCBhL3Rlc3QvcmVzb2x2L3Rlc3RfZG5zLnJiIGIvdGVzdC9yZXNvbHYvdGVzdF9kbnMucmIKLWlu ZGV4IGQ1ZDI2NDhlMWJjNjQ5Li4zNGFlNGFlYjlhMzNjMyAxMDA2NDQKLS0tLSBhL3Rlc3QvcmVz b2x2L3Rlc3RfZG5zLnJiCi0rKysgYi90ZXN0L3Jlc29sdi90ZXN0X2Rucy5yYgotQEAgLTYzNiw2 ICs2MzYsMjA1IEBAIGRlZiB0ZXN0X3Rvb19sb25nX2FkZHJlc3MKLSAgICAgZW5kCi0gICBlbmQK LSAKLSsgICMgQSBETlMgbGFiZWwgaXMgbGltaXRlZCB0byA2MyBvY3RldHMuIFtSRkMgMTAzNSAy LjMuNF0gV3JpdGluZyBhIGxvbmdlciBsYWJlbAotKyAgIyB0aHJvdWdoIHRoZSBsYWJlbCBwYXRo IG11c3QgcmFpc2UgaW5zdGVhZCBvZiBvdmVyZmxvd2luZyB0aGUgbGVuZ3RoIG9jdGV0LgotKyAg ZGVmIHRlc3RfcHV0X2xhYmVsX3JlamVjdHNfbGFiZWxfb3Zlcl82M19vY3RldHMKLSsgICAgUmVz b2x2OjpETlM6Ok1lc3NhZ2U6Ok1lc3NhZ2VFbmNvZGVyLm5ldyB7fG1zZ3wKLSsgICAgICBhc3Nl cnRfbm90aGluZ19yYWlzZWQgeyBtc2cucHV0X2xhYmVsKCJhIiAqIDYzKSB9Ci0rICAgICAgYXNz ZXJ0X3JhaXNlX3dpdGhfbWVzc2FnZShBcmd1bWVudEVycm9yLCAvRE5TIGxhYmVsIGlzIHRvbyBs b25nLykgZG8KLSsgICAgICAgIG1zZy5wdXRfbGFiZWwoImEiICogNjQpCi0rICAgICAgZW5kCi0r ICAgIH0KLSsgICAgIyBwdXRfbGFiZWxzIGRyaXZlcyBwdXRfbGFiZWwsIHNvIHRoZSBzYW1lIGd1 YXJkIGFwcGxpZXMgdG8gdGhlIG5hbWUgcGF0aC4KLSsgICAgUmVzb2x2OjpETlM6Ok1lc3NhZ2U6 Ok1lc3NhZ2VFbmNvZGVyLm5ldyB7fG1zZ3wKLSsgICAgICBhc3NlcnRfcmFpc2Vfd2l0aF9tZXNz YWdlKEFyZ3VtZW50RXJyb3IsIC9ETlMgbGFiZWwgaXMgdG9vIGxvbmcvKSBkbwotKyAgICAgICAg bXNnLnB1dF9sYWJlbHMoWyJhIiAqIDY0XSkKLSsgICAgICBlbmQKLSsgICAgfQotKyAgZW5kCi0r Ci0rICAjIFRoZSBwZXItbGFiZWwgbGltaXQgaXMgYW4gaW52YXJpYW50IG9mIExhYmVsOjpTdHIs IHNvIG5vIGxhYmVsIG9iamVjdCBjYW4KLSsgICMgZXhpc3QgdGhhdCB3b3VsZCBvdmVyZmxvdyBp dHMgbGVuZ3RoIG9jdGV0LiBbUkZDIDEwMzUgMi4zLjRdCi0rICBkZWYgdGVzdF9sYWJlbF9zdHJf cmVqZWN0c19sYWJlbF9vdmVyXzYzX29jdGV0cwotKyAgICBhc3NlcnRfbm90aGluZ19yYWlzZWQg eyBSZXNvbHY6OkROUzo6TGFiZWw6OlN0ci5uZXcoImEiICogNjMpIH0KLSsgICAgYXNzZXJ0X3Jh aXNlX3dpdGhfbWVzc2FnZShBcmd1bWVudEVycm9yLCAvRE5TIGxhYmVsIGlzIHRvbyBsb25nLykg ZG8KLSsgICAgICBSZXNvbHY6OkROUzo6TGFiZWw6OlN0ci5uZXcoImEiICogNjQpCi0rICAgIGVu ZAotKyAgZW5kCi0rCi0rICAjIEV2ZXJ5IHdheSBvZiBidWlsZGluZyBhIG5hbWUgZ29lcyB0aHJv dWdoIExhYmVsOjpTdHIsIHNvIHRoZSBwYXRocyB0aGF0Ci0rICAjIHNraXAgTmFtZS5jcmVhdGUg YXJlIGNvdmVyZWQgdG9vLgotKyAgZGVmIHRlc3RfbGFiZWxfbGVuZ3RoX2lzX2VuZm9yY2VkX29u X2V2ZXJ5X2NvbnN0cnVjdGlvbl9wYXRoCi0rICAgIGFzc2VydF9yYWlzZV93aXRoX21lc3NhZ2Uo QXJndW1lbnRFcnJvciwgL0ROUyBsYWJlbCBpcyB0b28gbG9uZy8pIGRvCi0rICAgICAgUmVzb2x2 OjpETlM6Ok5hbWUubmV3KFsiYSIgKiA2NF0pCi0rICAgIGVuZAotKyAgICBhc3NlcnRfcmFpc2Vf d2l0aF9tZXNzYWdlKEFyZ3VtZW50RXJyb3IsIC9ETlMgbGFiZWwgaXMgdG9vIGxvbmcvKSBkbwot KyAgICAgIFJlc29sdjo6RE5TOjpMYWJlbC5zcGxpdCgiYSIgKiA2NCkKLSsgICAgZW5kCi0rICAg ICMgQ29uZmlnI2dlbmVyYXRlX2NhbmRpZGF0ZXMgYXBwZW5kcyBzZWFyY2ggZG9tYWlucyB3aXRo IE5hbWUubmV3LCBhbmQgdGhlCi0rICAgICMgc2VhcmNoIGxpc3QgaXRzZWxmIGNvbWVzIGZyb20g TGFiZWwuc3BsaXQsIHNvIGEgcmVzb2x2LmNvbmYgY2FycnlpbmcgYW4KLSsgICAgIyBvdmVyLWxv bmcgbGFiZWwgaXMgcmVqZWN0ZWQgd2hlbiB0aGUgY29uZmlnIGlzIHJlYWQuCi0rICAgIGNvbmZp ZyA9IFJlc29sdjo6RE5TOjpDb25maWcubmV3KG5hbWVzZXJ2ZXI6IFsnMTI3LjAuMC4xJ10sCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaDogWyJhIiAqIDY0XSwg bmRvdHM6IDEpCi0rICAgIGFzc2VydF9yYWlzZV93aXRoX21lc3NhZ2UoQXJndW1lbnRFcnJvciwg L0ROUyBsYWJlbCBpcyB0b28gbG9uZy8pIGRvCi0rICAgICAgY29uZmlnLmxhenlfaW5pdGlhbGl6 ZQotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgZGVmIHRlc3RfbmFtZV9jcmVhdGVfcmVqZWN0c190 b29fbG9uZ19sYWJlbAotKyAgICBhc3NlcnRfbm90aGluZ19yYWlzZWQgeyBSZXNvbHY6OkROUzo6 TmFtZS5jcmVhdGUoImEiICogNjMpIH0KLSsgICAgYXNzZXJ0X3JhaXNlX3dpdGhfbWVzc2FnZShS ZXNvbHY6OlJlc29sdkVycm9yLCAvRE5TIGxhYmVsIGlzIHRvbyBsb25nLykgZG8KLSsgICAgICBS ZXNvbHY6OkROUzo6TmFtZS5jcmVhdGUoImEiICogNjQpCi0rICAgIGVuZAotKyAgZW5kCi0rCi0r ICBkZWYgdGVzdF9uYW1lX2NyZWF0ZV9yZWplY3RzX3Rvb19sb25nX25hbWUKLSsgICAgIyBGaXZl IDYzLW9jdGV0IGxhYmVscyB0b3RhbCAzMjEgZW5jb2RlZCBvY3RldHMsIG92ZXIgdGhlIDI1NSBv Y3RldCBsaW1pdCwKLSsgICAgIyB3aGlsZSBlYWNoIGluZGl2aWR1YWwgbGFiZWwgaXMgc3RpbGwg dmFsaWQuCi0rICAgIHRvb19sb25nID0gKFsiYSIgKiA2M10gKiA1KS5qb2luKCIuIikKLSsgICAg YXNzZXJ0X3JhaXNlX3dpdGhfbWVzc2FnZShSZXNvbHY6OlJlc29sdkVycm9yLCAvRE5TIG5hbWUg aXMgdG9vIGxvbmcvKSBkbwotKyAgICAgIFJlc29sdjo6RE5TOjpOYW1lLmNyZWF0ZSh0b29fbG9u ZykKLSsgICAgZW5kCi0rICBlbmQKLSsKLSsgICMgQSBob3N0bmFtZSBpcyBydW50aW1lIGRhdGEs IHNvIGFuIG92ZXItbG9uZyBvbmUgaGFzIHRvIHN0YXkgcmVzY3VhYmxlIHRoZQotKyAgIyB3YXkg dGhlIHJlc3Qgb2YgbmFtZSByZXNvbHV0aW9uIGlzLiBJdCByZWFjaGVzIE5hbWUuY3JlYXRlIHRo cm91Z2gKLSsgICMgQ29uZmlnI2dlbmVyYXRlX2NhbmRpZGF0ZXMsIHdoaWNoIHJ1bnMgb3V0c2lk ZSBDb25maWcjcmVzb2x2J3Mgb3duIHJlc2N1ZS4KLSsgIGRlZiB0ZXN0X292ZXJzaXplZF9uYW1l X2lzX3Jlc2N1YWJsZV9hc19yZXNvbHZfZXJyb3IKLSsgICAgZG5zID0gUmVzb2x2OjpETlMubmV3 KG5hbWVzZXJ2ZXJfcG9ydDogW1snMTI3LjAuMC4xJywgNTNdXSkKLSsgICAgYXNzZXJ0X3JhaXNl KFJlc29sdjo6UmVzb2x2RXJyb3IpIHsgZG5zLmdldGFkZHJlc3MoImEiICogNjQpIH0KLSsgICAg YXNzZXJ0X3JhaXNlKFJlc29sdjo6UmVzb2x2RXJyb3IpIHsgZG5zLmdldGFkZHJlc3MoKFsiYSIg KiA2M10gKiA1KS5qb2luKCIuIikpIH0KLSsgIGVuc3VyZQotKyAgICBkbnMmLmNsb3NlCi0rICBl bmQKLSsKLSsgICMgQSBsZW5ndGggb2N0ZXQgb2YgNjQuLjE5MSBpcyByZXNlcnZlZCwgbm90IGEg bGFiZWwgbGVuZ3RoLCBidXQgdGhpcyBkZWNvZGVyCi0rICAjIHJlYWQgaXQgYXMgb25lIGFuZCBh Y2NlcHRlZCBsYWJlbHMgbm8gZW5jb2RlciBzaG91bGQgZXZlciBwcm9kdWNlLgotKyAgIyBbUkZD IDEwMzUgNC4xLjRdIFJlamVjdGluZyB0aGVtIGhhcyB0byBsb29rIGxpa2UgYW55IG90aGVyIG1h bGZvcm1lZAotKyAgIyBtZXNzYWdlLCBzbyB0aGUgY2FsbGVyJ3MgcmVzY3VlIERlY29kZUVycm9y IHN0aWxsIGNvdmVycyBpdC4KLSsgIGRlZiB0ZXN0X2RlY29kZV9yZWplY3RzX2xhYmVsX292ZXJf NjNfb2N0ZXRzCi0rICAgIG1lc3NhZ2UgPSAtPihuKSB7Ci0rICAgICAgWzAsIDB4ODE4MCwgMSwg MCwgMCwgMF0ucGFjaygibioiKSArCi0rICAgICAgICBbbl0ucGFjaygiQyIpICsgKCJhIiAqIG4p ICsgIlwwIiArIFsxLCAxXS5wYWNrKCJubiIpCi0rICAgIH0KLSsgICAgYXNzZXJ0X25vdGhpbmdf cmFpc2VkIHsgUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVjb2RlKG1lc3NhZ2UuY2FsbCg2MykpIH0K LSsgICAgWzY0LCAxMDAsIDE5MV0uZWFjaCBkbyB8bnwKLSsgICAgICBhc3NlcnRfcmFpc2Vfd2l0 aF9tZXNzYWdlKFJlc29sdjo6RE5TOjpEZWNvZGVFcnJvciwgL0ROUyBsYWJlbCBpcyB0b28gbG9u Zy8pIGRvCi0rICAgICAgICBSZXNvbHY6OkROUzo6TWVzc2FnZS5kZWNvZGUobWVzc2FnZS5jYWxs KG4pKQotKyAgICAgIGVuZAotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgIyBUaGUgdHlwZSBjaGVj ayBpcyBhIGNhbGxlciBtaXN0YWtlIHJhdGhlciB0aGFuIHJ1bnRpbWUgZGF0YSwgc28gaXQga2Vl cHMKLSsgICMgcmFpc2luZyBBcmd1bWVudEVycm9yLgotKyAgZGVmIHRlc3RfbmFtZV9jcmVhdGVf c3RpbGxfcmFpc2VzX2FyZ3VtZW50X2Vycm9yX2Zvcl93cm9uZ190eXBlCi0rICAgIGFzc2VydF9y YWlzZV93aXRoX21lc3NhZ2UoQXJndW1lbnRFcnJvciwgL2Nhbm5vdCBpbnRlcnByZXQgYXMgRE5T IG5hbWUvKSBkbwotKyAgICAgIFJlc29sdjo6RE5TOjpOYW1lLmNyZWF0ZSgxMjMpCi0rICAgIGVu ZAotKyAgZW5kCi0rCi0rICAjIFRoZSAyNTUgb2N0ZXQgbGltaXQgY291bnRzIHRoZSBlbmNvZGVk IGZvcm0sIGluY2x1ZGluZyBlYWNoIGxhYmVsJ3MgbGVuZ3RoCi0rICAjIG9jdGV0IGFuZCB0aGUg cm9vdCBsYWJlbCdzIHRlcm1pbmF0aW5nIHplcm8gb2N0ZXQuIFtSRkMgMTAzNSAyLjMuNCwgMy4x XQotKyAgIyBTbyB0aGUgbG9uZ2VzdCBsZWdhbCBuYW1lIGVuY29kZXMgdG8gZXhhY3RseSAyNTUg b2N0ZXRzLgotKyAgZGVmIHRlc3RfbmFtZV9jcmVhdGVfdG90YWxfbGVuZ3RoX2JvdW5kYXJ5Ci0r ICAgIGF0X2xpbWl0ID0gKFsiYSIgKiA2M10gKiAzICsgWyJhIiAqIDYxXSkuam9pbigiLiIpCi0r ICAgIG5hbWUgPSBSZXNvbHY6OkROUzo6TmFtZS5jcmVhdGUoYXRfbGltaXQpCi0rICAgIGVuY29k ZWQgPSBSZXNvbHY6OkROUzo6TWVzc2FnZTo6TWVzc2FnZUVuY29kZXIubmV3IHt8bXNnfCBtc2cu cHV0X25hbWUobmFtZSkgfS50b19zCi0rICAgIGFzc2VydF9lcXVhbCgyNTUsIGVuY29kZWQuYnl0 ZXNpemUsICJsb25nZXN0IGxlZ2FsIG5hbWUgZW5jb2RlcyB0byAyNTUgb2N0ZXRzIikKLSsKLSsg ICAgb3Zlcl9saW1pdCA9IChbImEiICogNjNdICogMyArIFsiYSIgKiA2Ml0pLmpvaW4oIi4iKQot KyAgICBhc3NlcnRfcmFpc2Vfd2l0aF9tZXNzYWdlKFJlc29sdjo6UmVzb2x2RXJyb3IsIC9ETlMg bmFtZSBpcyB0b28gbG9uZy8pIGRvCi0rICAgICAgUmVzb2x2OjpETlM6Ok5hbWUuY3JlYXRlKG92 ZXJfbGltaXQpCi0rICAgIGVuZAotKwotKyAgICAjIEZvdXIgNjMtb2N0ZXQgbGFiZWxzIGVuY29k ZSB0byAyNTcgb2N0ZXRzLiBDb3VudGluZyB0aGUgcHJlc2VudGF0aW9uCi0rICAgICMgZm9ybSBp bnN0ZWFkIG9mIHRoZSBlbmNvZGVkIGZvcm0gbGV0cyB0aGVzZSB0d28gZXh0cmEgb2N0ZXRzIHRo cm91Z2guCi0rICAgIGFzc2VydF9yYWlzZV93aXRoX21lc3NhZ2UoUmVzb2x2OjpSZXNvbHZFcnJv ciwgL0ROUyBuYW1lIGlzIHRvbyBsb25nLykgZG8KLSsgICAgICBSZXNvbHY6OkROUzo6TmFtZS5j cmVhdGUoKFsiYSIgKiA2M10gKiA0KS5qb2luKCIuIikpCi0rICAgIGVuZAotKyAgZW5kCi0rCi0r ICAjIFRoZSBkZWNvZGVyIGVuZm9yY2VzIHRoZSBzYW1lIGxpbWl0LCBjb3VudGVkIHRoZSBzYW1l IHdheS4KLSsgIGRlZiB0ZXN0X2dldF9sYWJlbHNfdG90YWxfbGVuZ3RoX2JvdW5kYXJ5Ci0rICAg IGVuY29kZSA9IC0+KGxhYmVscykgewotKyAgICAgIFJlc29sdjo6RE5TOjpNZXNzYWdlOjpNZXNz YWdlRW5jb2Rlci5uZXcge3xtc2d8Ci0rICAgICAgICBtc2cucHV0X2xhYmVscyhsYWJlbHMubWFw IHt8bHwgUmVzb2x2OjpETlM6OkxhYmVsOjpTdHIubmV3KGwpIH0pCi0rICAgICAgfS50b19zCi0r ICAgIH0KLSsKLSsgICAgYXRfbGltaXQgPSBlbmNvZGUuY2FsbChbImEiICogNjNdICogMyArIFsi YSIgKiA2MV0pCi0rICAgIGFzc2VydF9lcXVhbCgyNTUsIGF0X2xpbWl0LmJ5dGVzaXplKQotKyAg ICBSZXNvbHY6OkROUzo6TWVzc2FnZTo6TWVzc2FnZURlY29kZXIubmV3KGF0X2xpbWl0KSB7fG1z Z3wKLSsgICAgICBhc3NlcnRfZXF1YWwoNCwgbXNnLmdldF9sYWJlbHMubGVuZ3RoKQotKyAgICB9 Ci0rCi0rICAgIG92ZXJfbGltaXQgPSBlbmNvZGUuY2FsbChbImEiICogNjNdICogNCkKLSsgICAg YXNzZXJ0X2VxdWFsKDI1Nywgb3Zlcl9saW1pdC5ieXRlc2l6ZSkKLSsgICAgYXNzZXJ0X3JhaXNl X3dpdGhfbWVzc2FnZShSZXNvbHY6OkROUzo6RGVjb2RlRXJyb3IsIC9uYW1lIGxhYmVsIGRhdGEg ZXhjZWVkIDI1NSBvY3RldHMvKSBkbwotKyAgICAgIFJlc29sdjo6RE5TOjpNZXNzYWdlOjpNZXNz YWdlRGVjb2Rlci5uZXcob3Zlcl9saW1pdCkge3xtc2d8IG1zZy5nZXRfbGFiZWxzIH0KLSsgICAg ZW5kCi0rICBlbmQKLSsKLSsgICMgQSBzaW5nbGUgMjYyLW9jdGV0IGxhYmVsIHdob3NlIGJ5dGVz IHN0YXJ0IHdpdGggInRhcmdldFx4MDNjb21ceDAwIi4gVGhlCi0rICAjIG9sZCBlbmNvZGVyIHdy b3RlIHRoZSBsZW5ndGggb2N0ZXQgYXMgMjYyICYgMHhmZiA9PSA2LCBzbyB0aGUgd2lyZSBieXRl cwotKyAgIyBkZWNvZGVkIHRvIHRoZSB1bnJlbGF0ZWQgbmFtZSAidGFyZ2V0LmNvbSIgKHF1ZXJ5 IG5hbWUgY29uZnVzaW9uIC8KLSsgICMgYWxsb3dsaXN0IGJ5cGFzcykuCi0rICBkZWYgdGVzdF9l bmNvZGVyX3JlamVjdHNfbGFiZWxfbGVuZ3RoX3dyYXAKLSsgICAgcG9jX2xhYmVsID0gInRhcmdl dCIuYiArICJceDAzY29tXHgwMCIuYiArICgiYSIuYiAqIDI1MSkKLSsgICAgYXNzZXJ0X2VxdWFs KDI2MiwgcG9jX2xhYmVsLmJ5dGVzaXplKQotKyAgICBhc3NlcnRfZXF1YWwoNiwgcG9jX2xhYmVs LmJ5dGVzaXplICYgMHhmZiwgInByZWNvbmRpdGlvbjogdGhlIGxlbmd0aCBvY3RldCB3cmFwcyB0 byA2IikKLSsKLSsgICAgIyBUaGUgYnl0ZXMgdGhlIGJ1Z2d5IGVuY29kZXIgd291bGQgaGF2ZSBl bWl0dGVkIHJlYWxseSBkbyBkZWNvZGUgdG8gYQotKyAgICAjIGRpZmZlcmVudCBuYW1lLiBUaGlz IGlzIHRoZSB2dWxuZXJhYmlsaXR5IGJlaW5nIGZpeGVkLgotKyAgICB3cmFwcGVkID0gW3BvY19s YWJlbC5ieXRlc2l6ZSAmIDB4ZmZdLnBhY2soIkMiKSArIHBvY19sYWJlbAotKyAgICBSZXNvbHY6 OkROUzo6TWVzc2FnZTo6TWVzc2FnZURlY29kZXIubmV3KHdyYXBwZWQpIHt8bXNnfAotKyAgICAg IGFzc2VydF9lcXVhbCgidGFyZ2V0LmNvbSIsIG1zZy5nZXRfbGFiZWxzLm1hcCgmOnRvX3MpLmpv aW4oIi4iKSkKLSsgICAgfQotKwotKyAgICAjIFRoZSBmaXhlZCBlbmNvZGVyIHJlZnVzZXMgdG8g ZW1pdCBpdCBpbnN0ZWFkIG9mIHNpbGVudGx5IHdyYXBwaW5nLCBzbyBpdAotKyAgICAjIGNhbiBu byBsb25nZXIgcHJvZHVjZSAidGFyZ2V0LmNvbSIgZnJvbSB0aGlzIGlucHV0LgotKyAgICBSZXNv bHY6OkROUzo6TWVzc2FnZTo6TWVzc2FnZUVuY29kZXIubmV3IHt8bXNnfAotKyAgICAgIGFzc2Vy dF9yYWlzZV93aXRoX21lc3NhZ2UoQXJndW1lbnRFcnJvciwgL0ROUyBsYWJlbCBpcyB0b28gbG9u Zy8pIGRvCi0rICAgICAgICBtc2cucHV0X2xhYmVsKHBvY19sYWJlbCkKLSsgICAgICBlbmQKLSsg ICAgfQotKyAgICBhc3NlcnRfcmFpc2Vfd2l0aF9tZXNzYWdlKFJlc29sdjo6UmVzb2x2RXJyb3Is IC9ETlMgbGFiZWwgaXMgdG9vIGxvbmcvKSBkbwotKyAgICAgIFJlc29sdjo6RE5TOjpOYW1lLmNy ZWF0ZShwb2NfbGFiZWwpCi0rICAgIGVuZAotKyAgZW5kCi0rCi0rICAjIEEgY2hhcmFjdGVyLXN0 cmluZyAoZS5nLiBUWFQgcmRhdGEpIGlzIHByZWZpeGVkIGJ5IGEgc2luZ2xlIGxlbmd0aCBvY3Rl dCBhbmQKLSsgICMgbWF5IGxlZ2l0aW1hdGVseSBiZSB1cCB0byAyNTUgb2N0ZXRzLCBzbyB0aGUg NjMgb2N0ZXQgbGFiZWwgbGltaXQgbXVzdCBub3QKLSsgICMgbGVhayBpbnRvIHB1dF9zdHJpbmcu IFtSRkMgMTAzNSAzLjNdCi0rICBkZWYgdGVzdF9wdXRfc3RyaW5nX2FsbG93c19jaGFyYWN0ZXJf c3RyaW5nX3VwX3RvXzI1NQotKyAgICBbNjQsIDIwMCwgMjU1XS5lYWNoIGRvIHxufAotKyAgICAg IHMgPSAiYSIgKiBuCi0rICAgICAgbSA9IFJlc29sdjo6RE5TOjpNZXNzYWdlOjpNZXNzYWdlRW5j b2Rlci5uZXcge3xtc2d8IG1zZy5wdXRfc3RyaW5nKHMpIH0KLSsgICAgICBlbmNvZGVkID0gbS50 b19zCi0rICAgICAgYXNzZXJ0X2VxdWFsKG4sIGVuY29kZWQuZ2V0Ynl0ZSgwKSwgImxlbmd0aCBv Y3RldCBmb3IgI3tufSBieXRlIHN0cmluZyIpCi0rICAgICAgYXNzZXJ0X2VxdWFsKG4gKyAxLCBl bmNvZGVkLmJ5dGVzaXplKQotKyAgICAgIFJlc29sdjo6RE5TOjpNZXNzYWdlOjpNZXNzYWdlRGVj b2Rlci5uZXcoZW5jb2RlZCkge3xtc2d8Ci0rICAgICAgICBhc3NlcnRfZXF1YWwocywgbXNnLmdl dF9zdHJpbmcpCi0rICAgICAgfQotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgZGVmIHRlc3RfdHh0 X3JlY29yZF9yb3VuZHRyaXBfd2l0aF9sb25nX2NoYXJhY3Rlcl9zdHJpbmdzCi0rICAgIHR4dCA9 IFJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OlRYVC5uZXcoImEiICogMjU1LCAiYiIgKiA2NCkK LSsgICAgbSA9IFJlc29sdjo6RE5TOjpNZXNzYWdlLm5ldygwKQotKyAgICBtLmFkZF9hbnN3ZXIo ImV4YW1wbGUuY29tLiIsIDM2MDAsIHR4dCkKLSsgICAgZGVjb2RlZCA9IFJlc29sdjo6RE5TOjpN ZXNzYWdlLmRlY29kZShtLmVuY29kZSkKLSsgICAgXywgXywgcmVzID0gZGVjb2RlZC5hbnN3ZXIu Zmlyc3QKLSsgICAgYXNzZXJ0X2VxdWFsKFsiYSIgKiAyNTUsICJiIiAqIDY0XSwgcmVzLnN0cmlu Z3MpCi0rICBlbmQKLSsKLSsgICMgcHV0X3N0cmluZyBzdGlsbCBndWFyZHMgYWdhaW5zdCB0aGUg bGVuZ3RoIG9jdGV0IHdyYXBwaW5nIHBhc3QgMjU1IG9jdGV0cy4KLSsgIGRlZiB0ZXN0X3B1dF9z dHJpbmdfcmVqZWN0c19vdmVyXzI1NV9vY3RldHMKLSsgICAgYXNzZXJ0X3JhaXNlX3dpdGhfbWVz c2FnZShBcmd1bWVudEVycm9yLCAvY2hhcmFjdGVyLXN0cmluZyBpcyB0b28gbG9uZy8pIGRvCi0r ICAgICAgUmVzb2x2OjpETlM6Ok1lc3NhZ2U6Ok1lc3NhZ2VFbmNvZGVyLm5ldyB7fG1zZ3wgbXNn LnB1dF9zdHJpbmcoImEiICogMjU2KSB9Ci0rICAgIGVuZAotKyAgZW5kCi0rCi0gICBkZWYgYXNz ZXJ0X25vX2ZkX2xlYWsKLSAgICAgc29ja2V0ID0gYXNzZXJ0X3Rocm93KHNlbGYpIGRvIHx0YWd8 Ci0gICAgICAgUmVzb2x2OjpETlMuc3R1Yig6YmluZF9yYW5kb21fcG9ydCwgLT4ocywgKikge3Ro cm93KHRhZywgcyl9KSBkbwotQEAgLTgyMiw0ICsxMDIxLDEyNCBAQCBkZWYgdGVzdF9tdWx0aXBs ZV9zZXJ2ZXJzX3dpdGhfdGltZW91dF9hbmRfdHJ1bmNhdGVkX3RjcF9mYWxsYmFjawotICAgICAg IGVuZAotICAgICBlbmQKLSAgIGVuZAotKwotKyAgZGVmIHRlc3RfdGNwX2Nvbm5lY3Rpb25fY2xv c2VkX2JlZm9yZV9sZW5ndGgKLSsgICAgd2l0aF90Y3AoJzEyNy4wLjAuMScsIDApIGRvIHx0fAot KyAgICAgIF8sIHNlcnZlcl9wb3J0LCBfLCBzZXJ2ZXJfYWRkcmVzcyA9IHQuYWRkcgotKwotKyAg ICAgIHNlcnZlcl90aHJlYWQgPSBUaHJlYWQubmV3IGRvCi0rICAgICAgICBjdCA9IHQuYWNjZXB0 Ci0rICAgICAgICBjdC5yZWN2KDUxMikKLSsgICAgICAgIGN0LmNsb3NlCi0rICAgICAgZW5kCi0r Ci0rICAgICAgY2xpZW50X3RocmVhZCA9IFRocmVhZC5uZXcgZG8KLSsgICAgICAgIHJlcXVlc3Rl ciA9IFJlc29sdjo6RE5TOjpSZXF1ZXN0ZXI6OlRDUC5uZXcoc2VydmVyX2FkZHJlc3MsIHNlcnZl cl9wb3J0KQotKyAgICAgICAgYmVnaW4KLSsgICAgICAgICAgbXNnID0gUmVzb2x2OjpETlM6Ok1l c3NhZ2UubmV3Ci0rICAgICAgICAgIG1zZy5hZGRfcXVlc3Rpb24oJ2V4YW1wbGUub3JnJywgUmVz b2x2OjpETlM6OlJlc291cmNlOjpJTjo6QSkKLSsgICAgICAgICAgc2VuZGVyID0gcmVxdWVzdGVy LnNlbmRlcihtc2csIG1zZykKLSsgICAgICAgICAgYXNzZXJ0X3JhaXNlKFJlc29sdjo6UmVzb2x2 VGltZW91dCkgZG8KLSsgICAgICAgICAgICByZXF1ZXN0ZXIucmVxdWVzdChzZW5kZXIsIDIpCi0r ICAgICAgICAgIGVuZAotKyAgICAgICAgZW5zdXJlCi0rICAgICAgICAgIHJlcXVlc3Rlci5jbG9z ZQotKyAgICAgICAgZW5kCi0rICAgICAgZW5kCi0rCi0rICAgICAgc2VydmVyX3RocmVhZC5qb2lu Ci0rICAgICAgY2xpZW50X3RocmVhZC5qb2luCi0rICAgIGVuZAotKyAgZW5kCi0rCi0rICBkZWYg dGVzdF90Y3BfY29ubmVjdGlvbl9jbG9zZWRfYWZ0ZXJfbGVuZ3RoCi0rICAgIHdpdGhfdGNwKCcx MjcuMC4wLjEnLCAwKSBkbyB8dHwKLSsgICAgICBfLCBzZXJ2ZXJfcG9ydCwgXywgc2VydmVyX2Fk ZHJlc3MgPSB0LmFkZHIKLSsKLSsgICAgICBzZXJ2ZXJfdGhyZWFkID0gVGhyZWFkLm5ldyBkbwot KyAgICAgICAgY3QgPSB0LmFjY2VwdAotKyAgICAgICAgY3QucmVjdig1MTIpCi0rICAgICAgICBj dC5zZW5kKFsxMDBdLnBhY2soJ24nKSwgMCkKLSsgICAgICAgIGN0LmNsb3NlCi0rICAgICAgZW5k Ci0rCi0rICAgICAgY2xpZW50X3RocmVhZCA9IFRocmVhZC5uZXcgZG8KLSsgICAgICAgIHJlcXVl c3RlciA9IFJlc29sdjo6RE5TOjpSZXF1ZXN0ZXI6OlRDUC5uZXcoc2VydmVyX2FkZHJlc3MsIHNl cnZlcl9wb3J0KQotKyAgICAgICAgYmVnaW4KLSsgICAgICAgICAgbXNnID0gUmVzb2x2OjpETlM6 Ok1lc3NhZ2UubmV3Ci0rICAgICAgICAgIG1zZy5hZGRfcXVlc3Rpb24oJ2V4YW1wbGUub3JnJywg UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6QSkKLSsgICAgICAgICAgc2VuZGVyID0gcmVxdWVz dGVyLnNlbmRlcihtc2csIG1zZykKLSsgICAgICAgICAgYXNzZXJ0X3JhaXNlKFJlc29sdjo6UmVz b2x2VGltZW91dCkgZG8KLSsgICAgICAgICAgICByZXF1ZXN0ZXIucmVxdWVzdChzZW5kZXIsIDIp Ci0rICAgICAgICAgIGVuZAotKyAgICAgICAgZW5zdXJlCi0rICAgICAgICAgIHJlcXVlc3Rlci5j bG9zZQotKyAgICAgICAgZW5kCi0rICAgICAgZW5kCi0rCi0rICAgICAgc2VydmVyX3RocmVhZC5q b2luCi0rICAgICAgY2xpZW50X3RocmVhZC5qb2luCi0rICAgIGVuZAotKyAgZW5kCi0rCi0rICBk ZWYgdGVzdF90Y3BfY29ubmVjdGlvbl9jbG9zZWRfd2l0aF9wYXJ0aWFsX2xlbmd0aF9wcmVmaXgK LSsgICAgd2l0aF90Y3AoJzEyNy4wLjAuMScsIDApIGRvIHx0fAotKyAgICAgIF8sIHNlcnZlcl9w b3J0LCBfLCBzZXJ2ZXJfYWRkcmVzcyA9IHQuYWRkcgotKwotKyAgICAgIHNlcnZlcl90aHJlYWQg PSBUaHJlYWQubmV3IGRvCi0rICAgICAgICBjdCA9IHQuYWNjZXB0Ci0rICAgICAgICBjdC5yZWN2 KDUxMikKLSsgICAgICAgIGN0LndyaXRlICJBIiAjIDEgYnl0ZQotKyAgICAgICAgY3QuY2xvc2UK LSsgICAgICBlbmQKLSsKLSsgICAgICBjbGllbnRfdGhyZWFkID0gVGhyZWFkLm5ldyBkbwotKyAg ICAgICAgcmVxdWVzdGVyID0gUmVzb2x2OjpETlM6OlJlcXVlc3Rlcjo6VENQLm5ldyhzZXJ2ZXJf YWRkcmVzcywgc2VydmVyX3BvcnQpCi0rICAgICAgICBiZWdpbgotKyAgICAgICAgICBtc2cgPSBS ZXNvbHY6OkROUzo6TWVzc2FnZS5uZXcKLSsgICAgICAgICAgbXNnLmFkZF9xdWVzdGlvbignZXhh bXBsZS5vcmcnLCBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpBKQotKyAgICAgICAgICBzZW5k ZXIgPSByZXF1ZXN0ZXIuc2VuZGVyKG1zZywgbXNnKQotKyAgICAgICAgICBhc3NlcnRfcmFpc2Uo UmVzb2x2OjpSZXNvbHZUaW1lb3V0KSBkbwotKyAgICAgICAgICAgIHJlcXVlc3Rlci5yZXF1ZXN0 KHNlbmRlciwgMikKLSsgICAgICAgICAgZW5kCi0rICAgICAgICBlbnN1cmUKLSsgICAgICAgICAg cmVxdWVzdGVyLmNsb3NlCi0rICAgICAgICBlbmQKLSsgICAgICBlbmQKLSsKLSsgICAgICBzZXJ2 ZXJfdGhyZWFkLmpvaW4KLSsgICAgICBjbGllbnRfdGhyZWFkLmpvaW4KLSsgICAgZW5kCi0rICBl bmQKLSsKLSsgIGRlZiB0ZXN0X3RjcF9jb25uZWN0aW9uX2Nsb3NlZF93aXRoX3BhcnRpYWxfbWVz c2FnZV9ib2R5Ci0rICAgIHdpdGhfdGNwKCcxMjcuMC4wLjEnLCAwKSBkbyB8dHwKLSsgICAgICBf LCBzZXJ2ZXJfcG9ydCwgXywgc2VydmVyX2FkZHJlc3MgPSB0LmFkZHIKLSsKLSsgICAgICBzZXJ2 ZXJfdGhyZWFkID0gVGhyZWFkLm5ldyBkbwotKyAgICAgICAgY3QgPSB0LmFjY2VwdAotKyAgICAg ICAgY3QucmVjdig1MTIpCi0rICAgICAgICBjdC53cml0ZShbMTBdLnBhY2soJ24nKSkgIyBsZW5n dGggMTAKLSsgICAgICAgIGN0LndyaXRlICIxMjM0NSIgIyA1IGJ5dGVzIChwYXJ0aWFsKQotKyAg ICAgICAgY3QuY2xvc2UKLSsgICAgICBlbmQKLSsKLSsgICAgICBjbGllbnRfdGhyZWFkID0gVGhy ZWFkLm5ldyBkbwotKyAgICAgICAgcmVxdWVzdGVyID0gUmVzb2x2OjpETlM6OlJlcXVlc3Rlcjo6 VENQLm5ldyhzZXJ2ZXJfYWRkcmVzcywgc2VydmVyX3BvcnQpCi0rICAgICAgICBiZWdpbgotKyAg ICAgICAgICBtc2cgPSBSZXNvbHY6OkROUzo6TWVzc2FnZS5uZXcKLSsgICAgICAgICAgbXNnLmFk ZF9xdWVzdGlvbignZXhhbXBsZS5vcmcnLCBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpBKQot KyAgICAgICAgICBzZW5kZXIgPSByZXF1ZXN0ZXIuc2VuZGVyKG1zZywgbXNnKQotKyAgICAgICAg ICBhc3NlcnRfcmFpc2UoUmVzb2x2OjpSZXNvbHZUaW1lb3V0KSBkbwotKyAgICAgICAgICAgIHJl cXVlc3Rlci5yZXF1ZXN0KHNlbmRlciwgMikKLSsgICAgICAgICAgZW5kCi0rICAgICAgICBlbnN1 cmUKLSsgICAgICAgICAgcmVxdWVzdGVyLmNsb3NlCi0rICAgICAgICBlbmQKLSsgICAgICBlbmQK LSsKLSsgICAgICBzZXJ2ZXJfdGhyZWFkLmpvaW4KLSsgICAgICBjbGllbnRfdGhyZWFkLmpvaW4K LSsgICAgZW5kCi0rICBlbmQKLSBlbmQKLWRpZmYgLS1naXQgYS90ZXN0L3Jlc29sdi90ZXN0X3Jl c291cmNlLnJiIGIvdGVzdC9yZXNvbHYvdGVzdF9yZXNvdXJjZS5yYgotaW5kZXggNDM0MzgwMjM2 ZTY3MjEuLmI0ZTU2Y2U0YmI4ZmY1IDEwMDY0NAotLS0tIGEvdGVzdC9yZXNvbHYvdGVzdF9yZXNv dXJjZS5yYgotKysrIGIvdGVzdC9yZXNvbHYvdGVzdF9yZXNvdXJjZS5yYgotQEAgLTI0LDYgKzI0 LDY3IEBAIGRlZiB0ZXN0X2Nvb3JkCi0gICAgIFJlc29sdjo6TE9DOjpDb29yZC5jcmVhdGUoJzEg MiAxLjEgTicpCi0gICBlbmQKLSAKLSsgICMgRGVjb2RpbmcgYW4gdW5rbm93biAodHlwZSwgY2xh c3MpIHBhaXIgYnVpbGRzIGEgZnJlc2ggY2xhc3MgZXZlcnkgdGltZSwgc28KLSsgICMgZXF1YWxp dHkgbXVzdCBub3QgcmVzdCBvbiB0aGUgY2xhc3MgaWRlbnRpdHkuCi0rICBkZWYgdGVzdF9nZW5l cmljX2VxdWFsaXR5Ci0rICAgIHdpcmUgPSBnZW5lcmljX2Fuc3dlcig0MDAwMCwgIlx4MDFceDAy XHgwMyIpCi0rICAgIHJyMSA9IGRlY29kZV9nZW5lcmljKHdpcmUpCi0rICAgIHJyMiA9IGRlY29k ZV9nZW5lcmljKHdpcmUpCi0rCi0rICAgIGFzc2VydF9ub3Rfc2FtZSBycjEuY2xhc3MsIHJyMi5j bGFzcwotKyAgICBhc3NlcnRfZXF1YWwgcnIxLCBycjIKLSsgICAgYXNzZXJ0IHJyMS5lcWw/KHJy MikKLSsgICAgYXNzZXJ0X2VxdWFsIHJyMS5oYXNoLCBycjIuaGFzaAotKyAgICBhc3NlcnRfZXF1 YWwgUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVjb2RlKHdpcmUpLCBSZXNvbHY6OkROUzo6TWVzc2Fn ZS5kZWNvZGUod2lyZSkKLSsgIGVuZAotKwotKyAgIyBBbnkgZGVzY2VuZGFudCBjb3VudHMsIG5v dCBqdXN0IGEgY2xhc3MgY3JlYXRlIHJldHVybmVkLgotKyAgZGVmIHRlc3RfZ2VuZXJpY19lcXVh bGl0eV9iZXR3ZWVuX2Rlc2NlbmRhbnRzCi0rICAgIGdlbmVyaWMgPSBSZXNvbHY6OkROUzo6UmVz b3VyY2U6OkdlbmVyaWMKLSsgICAgZGlyZWN0ID0gZ2VuZXJpYy5jcmVhdGUoNDAwMDAsIDYwMDAw KQotKyAgICBkZXNjZW5kYW50ID0gQ2xhc3MubmV3KGdlbmVyaWMuY3JlYXRlKDQwMDAwLCA2MDAw MCkpCi0rCi0rICAgIGFzc2VydF9lcXVhbCBkaXJlY3QubmV3KCJceDAxXHgwMlx4MDMiKSwgZGVz Y2VuZGFudC5uZXcoIlx4MDFceDAyXHgwMyIpCi0rICAgIGFzc2VydF9lcXVhbCBkZXNjZW5kYW50 Lm5ldygiXHgwMVx4MDJceDAzIiksIGRpcmVjdC5uZXcoIlx4MDFceDAyXHgwMyIpCi0rICAgIGFz c2VydF9lcXVhbCBnZW5lcmljLm5ldygiXHgwMVx4MDJceDAzIiksIGdlbmVyaWMubmV3KCJceDAx XHgwMlx4MDMiKQotKyAgICBhc3NlcnRfbm90X2VxdWFsIGRpcmVjdC5uZXcoIlx4MDFceDAyXHgw MyIpLAotKyAgICAgIENsYXNzLm5ldyhnZW5lcmljLmNyZWF0ZSg0MDAwMSwgNjAwMDApKS5uZXco Ilx4MDFceDAyXHgwMyIpCi0rICBlbmQKLSsKLSsgIGRlZiB0ZXN0X2dlbmVyaWNfaW5lcXVhbGl0 eQotKyAgICByciA9IGRlY29kZV9nZW5lcmljKGdlbmVyaWNfYW5zd2VyKDQwMDAwLCAiXHgwMVx4 MDJceDAzIikpCi0rCi0rICAgIGFzc2VydF9ub3RfZXF1YWwgcnIsIGRlY29kZV9nZW5lcmljKGdl bmVyaWNfYW5zd2VyKDQwMDAxLCAiXHgwMVx4MDJceDAzIikpCi0rICAgIGFzc2VydF9ub3RfZXF1 YWwgcnIsIGRlY29kZV9nZW5lcmljKGdlbmVyaWNfYW5zd2VyKDQwMDAwLCAiXHgwOVx4MDlceDA5 IikpCi0rICAgIGFzc2VydF9ub3RfZXF1YWwgcnIsIFJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46 OkEubmV3KCIxOTIuMTY4LjAuMSIpCi0rICBlbmQKLSsKLSsgICMgQSBxdWVzdGlvbiBob2xkcyB0 aGUgcmVzb3VyY2UgY2xhc3MgaXRzZWxmLCBzbyBpdCBuZWVkcyB0aGUgc2FtZSB0cmVhdG1lbnQu Ci0rICBkZWYgdGVzdF9nZW5lcmljX3F1ZXN0aW9uX2VxdWFsaXR5Ci0rICAgIHdpcmUgPSBnZW5l cmljX3F1ZXN0aW9uKDQwMDAwKQotKwotKyAgICBhc3NlcnRfZXF1YWwgUmVzb2x2OjpETlM6Ok1l c3NhZ2UuZGVjb2RlKHdpcmUpLCBSZXNvbHY6OkROUzo6TWVzc2FnZS5kZWNvZGUod2lyZSkKLSsg ICAgYXNzZXJ0X25vdF9lcXVhbCBSZXNvbHY6OkROUzo6TWVzc2FnZS5kZWNvZGUod2lyZSksCi0r ICAgICAgUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVjb2RlKGdlbmVyaWNfcXVlc3Rpb24oNDAwMDEp KQotKyAgZW5kCi0rCi0rICBwcml2YXRlIGRlZiBoZWFkZXIocWRjb3VudCwgYW5jb3VudCkKLSsg ICAgIlx4MDBceDAwXHgwMFx4MDAiLmIgKyBbcWRjb3VudCwgYW5jb3VudCwgMCwgMF0ucGFjaygn bm5ubicpCi0rICBlbmQKLSsKLSsgIHByaXZhdGUgZGVmIGdlbmVyaWNfYW5zd2VyKHR5cGUsIHJk YXRhKQotKyAgICByZGF0YSA9IHJkYXRhLmIKLSsgICAgKGhlYWRlcigwLCAxKSArICJceDAwIi5i ICsgW3R5cGUsIDYwMDAwLCAwLCByZGF0YS5ieXRlc2l6ZV0ucGFjaygnbm5ObicpICsgcmRhdGEp LmIKLSsgIGVuZAotKwotKyAgcHJpdmF0ZSBkZWYgZ2VuZXJpY19xdWVzdGlvbih0eXBlKQotKyAg ICAoaGVhZGVyKDEsIDApICsgIlx4MDdleGFtcGxlXHgwM2NvbVx4MDAiLmIgKyBbdHlwZSwgNjAw MDBdLnBhY2soJ25uJykpLmIKLSsgIGVuZAotKwotKyAgcHJpdmF0ZSBkZWYgZGVjb2RlX2dlbmVy aWMod2lyZSkKLSsgICAgUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVjb2RlKHdpcmUpLmFuc3dlci5m aXJzdFsyXQotKyAgZW5kCi0rCi0gICBkZWYgdGVzdF9zcnZfbm9fY29tcHJlc3MKLSAgICAgIyBE b21haW4gbmFtZSBpbiBTUlYgUkRBVEEgc2hvdWxkIG5vdCBiZSBjb21wcmVzc2VkCi0gICAgIGlz c3VlMjkgPSAnaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcmVzb2x2L2lzc3Vlcy8yOScKLWRpZmYg LS1naXQgYS90ZXN0L3Jlc29sdi90ZXN0X3Jlc291cmNlX2xlYWsucmIgYi90ZXN0L3Jlc29sdi90 ZXN0X3Jlc291cmNlX2xlYWsucmIKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAw MDAwMDAwMC4uNDYyOGEzZDI4NTc2NzcKLS0tLSAvZGV2L251bGwKLSsrKyBiL3Rlc3QvcmVzb2x2 L3Rlc3RfcmVzb3VyY2VfbGVhay5yYgotQEAgLTAsMCArMSwxMDEgQEAKLSsjIGZyb3plbl9zdHJp bmdfbGl0ZXJhbDogZmFsc2UKLStyZXF1aXJlICd0ZXN0L3VuaXQnCi0rcmVxdWlyZSAncmVzb2x2 JwotKwotKyMgRGVjb2RpbmcgYSByZXNwb25zZSB3aXRoIHVua25vd24gKHR5cGUsIGNsYXNzKSBw YWlycyBvciB1bmtub3duIFN2Y1BhcmFtS2V5cwotKyMgdXNlZCB0byByZWdpc3RlciBhIGdlbmVy YXRlZCBjbGFzcyBwZXJtYW5lbnRseSwgc28gYSBtYWxpY2lvdXMgcmVzcG9uc2UgY291bGQKLSsj IGV4aGF1c3QgbWVtb3J5IGV2ZW4gYWZ0ZXIgdGhlIHJlc3BvbnNlIHdhcyBkaXNjYXJkZWQuCi0r Y2xhc3MgVGVzdFJlc29sdlJlc291cmNlTGVhayA8IFRlc3Q6OlVuaXQ6OlRlc3RDYXNlCi0rICAj IE51bWJlciBvZiBkeW5hbWljYWxseS1yZWdpc3RlcmVkICJUeXBlPG4+X0NsYXNzPG4+IiBjb25z dGFudHMgb24gK21vZCsuCi0rICBkZWYgdHlwZV9jb25zdF9jb3VudChtb2QpCi0rICAgIG1vZC5j b25zdGFudHMoZmFsc2UpLmNvdW50IHsgfGN8IGMudG9fcy5tYXRjaD8oL1xBVHlwZVxkK19DbGFz c1xkK1x6LykgfQotKyAgZW5kCi0rCi0rICBkZWYgc3ZjcGFyYW1fa2V5X2NvbnN0X2NvdW50Ci0r ICAgIFJlc29sdjo6RE5TOjpTdmNQYXJhbTo6R2VuZXJpYy5jb25zdGFudHMoZmFsc2UpLmNvdW50 IHsgfGN8IGMudG9fcy5tYXRjaD8oL1xBS2V5XGQrXHovKSB9Ci0rICBlbmQKLSsKLSsgICMgQSBE TlMgcmVzcG9uc2Ugd2hvc2UgYW5zd2VyIHNlY3Rpb24gaG9sZHMgK2NvdW50KyBSUnMsIGVhY2gg d2l0aCBhIGRpc3RpbmN0Ci0rICAjIHVua25vd24gKHR5cGUsIGNsYXNzKSBwYWlyLgotKyAgZGVm IHVua25vd25fdHlwZWNsYXNzX3Jlc3BvbnNlKGNvdW50KQotKyAgICBib2R5ID0gIiIuYgotKyAg ICBjb3VudC50aW1lcyBkbyB8aXwKLSsgICAgICB0eXBlICA9IDQwMDAwICsgaQotKyAgICAgIGts YXNzID0gNjAwMDAKLSsgICAgICByZGF0YSA9ICJceDAxXHgwMlx4MDMiLmIKLSsgICAgICBib2R5 IDw8ICJceDAwIi5iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOQU1FID0g cm9vdAotKyAgICAgIGJvZHkgPDwgW3R5cGUsIGtsYXNzLCAwLCByZGF0YS5ieXRlc2l6ZV0ucGFj aygnbm5ObicpCi0rICAgICAgYm9keSA8PCByZGF0YQotKyAgICBlbmQKLSsgICAgaGVhZGVyID0g Ilx4MDBceDAwXHgwMFx4MDAiLmIgKyBbMCwgY291bnQsIDAsIDBdLnBhY2soJ25ubm4nKQotKyAg ICAoaGVhZGVyICsgYm9keSkuYgotKyAgZW5kCi0rCi0rICAjIEFuIFNWQ0IgUlIgKHR5cGUgNjQp IGNhcnJ5aW5nICtjb3VudCsgZGlzdGluY3QgdW5rbm93biBTdmNQYXJhbUtleXMuCi0rICBkZWYg dW5rbm93bl9zdmNwYXJhbV9yZXNwb25zZShjb3VudCkKLSsgICAgcmRhdGEgPSAiIi5iCi0rICAg IHJkYXRhIDw8IFsxXS5wYWNrKCduJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg U3ZjUHJpb3JpdHkKLSsgICAgcmRhdGEgPDwgIlx4MDNmb29ceDA3ZXhhbXBsZVx4MDNjb21ceDAw Ii5iICAgICAgICAgICAgIyBUYXJnZXROYW1lCi0rICAgIGNvdW50LnRpbWVzIGRvIHxpfAotKyAg ICAgIGtleSA9IDEwMDAgKyBpCi0rICAgICAgdmFsID0gIngiLmIKLSsgICAgICByZGF0YSA8PCBb a2V5LCB2YWwuYnl0ZXNpemVdLnBhY2soJ25uJykgPDwgdmFsCi0rICAgIGVuZAotKyAgICBoZWFk ZXIgPSAiXHgwMFx4MDBceDAwXHgwMCIuYiArIFswLCAxLCAwLCAwXS5wYWNrKCdubm5uJykKLSsg ICAgbmFtZSAgID0gIlx4MDdleGFtcGxlXHgwM2NvbVx4MDAiLmIKLSsgICAgcnIgICAgID0gbmFt ZSArIFs2NCwgMSwgMCwgcmRhdGEuYnl0ZXNpemVdLnBhY2soJ25uTm4nKSArIHJkYXRhCi0rICAg IChoZWFkZXIgKyBycikuYgotKyAgZW5kCi0rCi0rICBkZWYgdGVzdF91bmtub3duX3R5cGVjbGFz c19kb2VzX25vdF9sZWFrX2NsYXNzZXMKLSsgICAgcmVzb3VyY2UgPSBSZXNvbHY6OkROUzo6UmVz b3VyY2UKLSsgICAgZ2VuZXJpYyAgPSBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OkdlbmVyaWMKLSsK LSsgICAgYmVmb3JlX3Jlc291cmNlID0gdHlwZV9jb25zdF9jb3VudChyZXNvdXJjZSkKLSsgICAg YmVmb3JlX2dlbmVyaWMgID0gdHlwZV9jb25zdF9jb3VudChnZW5lcmljKQotKwotKyAgICBbMTAw LCAxMDAwXS5lYWNoIGRvIHxjb3VudHwKLSsgICAgICBtc2cgPSB1bmtub3duX3R5cGVjbGFzc19y ZXNwb25zZShjb3VudCkKLSsgICAgICAzLnRpbWVzIHsgUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVj b2RlKG1zZykgfQotKyAgICBlbmQKLSsgICAgR0Muc3RhcnQKLSsKLSsgICAgYXNzZXJ0X2VxdWFs IGJlZm9yZV9yZXNvdXJjZSwgdHlwZV9jb25zdF9jb3VudChyZXNvdXJjZSksCi0rICAgICAgJ2Rl Y29kaW5nIHVua25vd24gKHR5cGUsIGNsYXNzKSBSUnMgbXVzdCBub3QgcmVnaXN0ZXIgbmV3IFJl c291cmNlIGNvbnN0YW50cycKLSsgICAgYXNzZXJ0X2VxdWFsIGJlZm9yZV9nZW5lcmljLCB0eXBl X2NvbnN0X2NvdW50KGdlbmVyaWMpLAotKyAgICAgICdkZWNvZGluZyB1bmtub3duICh0eXBlLCBj bGFzcykgUlJzIG11c3Qgbm90IHJlZ2lzdGVyIG5ldyBHZW5lcmljIGNvbnN0YW50cycKLSsgIGVu ZAotKwotKyAgZGVmIHRlc3RfdW5rbm93bl9zdmNwYXJhbV9rZXlfZG9lc19ub3RfbGVha19jbGFz c2VzCi0rICAgIGNsYXNzX2hhc2ggPSBSZXNvbHY6OkROUzo6U3ZjUGFyYW06OkNsYXNzSGFzaAot KwotKyAgICBiZWZvcmVfY29uc3RzID0gc3ZjcGFyYW1fa2V5X2NvbnN0X2NvdW50Ci0rICAgIGJl Zm9yZV9oYXNoICAgPSBjbGFzc19oYXNoLnNpemUKLSsKLSsgICAgWzEwMCwgMTAwMF0uZWFjaCBk byB8Y291bnR8Ci0rICAgICAgbXNnID0gdW5rbm93bl9zdmNwYXJhbV9yZXNwb25zZShjb3VudCkK LSsgICAgICAzLnRpbWVzIHsgUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVjb2RlKG1zZykgfQotKyAg ICBlbmQKLSsgICAgR0Muc3RhcnQKLSsKLSsgICAgYXNzZXJ0X2VxdWFsIGJlZm9yZV9jb25zdHMs IHN2Y3BhcmFtX2tleV9jb25zdF9jb3VudCwKLSsgICAgICAnZGVjb2RpbmcgdW5rbm93biBTdmNQ YXJhbUtleXMgbXVzdCBub3QgcmVnaXN0ZXIgbmV3IEdlbmVyaWMgY29uc3RhbnRzJwotKyAgICBh c3NlcnRfZXF1YWwgYmVmb3JlX2hhc2gsIGNsYXNzX2hhc2guc2l6ZSwKLSsgICAgICAnZGVjb2Rp bmcgdW5rbm93biBTdmNQYXJhbUtleXMgbXVzdCBub3QgZ3JvdyBTdmNQYXJhbTo6Q2xhc3NIYXNo JwotKyAgZW5kCi0rCi0rICAjIERyb3BwaW5nIHRoZSBwZXJtYW5lbnQgcmVnaXN0cmF0aW9uIG11 c3Qgbm90IGJyZWFrIGRlY29kaW5nIG9mIHRoZSB1bmtub3duCi0rICAjIHZhbHVlcyB0aGVtc2Vs dmVzLgotKyAgZGVmIHRlc3RfdW5rbm93bl92YWx1ZXNfc3RpbGxfZGVjb2RlCi0rICAgIG1zZyA9 IFJlc29sdjo6RE5TOjpNZXNzYWdlLmRlY29kZSh1bmtub3duX3R5cGVjbGFzc19yZXNwb25zZSgz KSkKLSsgICAgYXNzZXJ0X2VxdWFsIDMsIG1zZy5hbnN3ZXIuc2l6ZQotKyAgICBfLCBfLCByciA9 IG1zZy5hbnN3ZXIuZmlyc3QKLSsgICAgYXNzZXJ0X2tpbmRfb2YgUmVzb2x2OjpETlM6OlJlc291 cmNlOjpHZW5lcmljLCBycgotKyAgICBhc3NlcnRfZXF1YWwgIlx4MDFceDAyXHgwMyIuYiwgcnIu ZGF0YQotKwotKyAgICBtc2cgPSBSZXNvbHY6OkROUzo6TWVzc2FnZS5kZWNvZGUodW5rbm93bl9z dmNwYXJhbV9yZXNwb25zZSgzKSkKLSsgICAgXywgXywgc3ZjYiA9IG1zZy5hbnN3ZXIuZmlyc3QK LSsgICAgYXNzZXJ0X2VxdWFsIDMsIHN2Y2IucGFyYW1zLmNvdW50Ci0rICAgIGFzc2VydF9lcXVh bCAieCIuYiwgc3ZjYi5wYXJhbXNbOmtleTEwMDBdLnZhbHVlCi0rICBlbmQKLStlbmQKLS0tLSBy dWJ5LTQuMC42Lm9yaWcvbGliL3J1YnlnZW1zL3ZlbmRvci9yZXNvbHYvbGliL3Jlc29sdi5yYgky MDI2LTA3LTE0IDA5OjIyOjEwLjAwMDAwMDAwMCArMDkwMAotKysrIHJ1YnktNC4wLjYvbGliL3J1 YnlnZW1zL3ZlbmRvci9yZXNvbHYvbGliL3Jlc29sdi5yYgkyMDI2LTA5LTAzIDE3OjE2OjE4LjU0 MzAyNTE2NCArMDkwMAotQEAgLTM1LDcgKzM1LDcgQEAKLSBjbGFzcyBHZW06OlJlc29sdgotIAot ICAgIyBUaGUgdmVyc2lvbiBzdHJpbmcKLS0gIFZFUlNJT04gPSAiMC43LjAiCi0rICBWRVJTSU9O ID0gIjAuNy4yIgotIAotICAgIyMKLSAgICMgTG9va3MgdXAgdGhlIGZpcnN0IElQIGFkZHJlc3Mg Zm9yICtuYW1lKy4KLUBAIC00ODcsMTMgKzQ4NywxOCBAQCBkZWYgZWFjaF9uYW1lKGFkZHJlc3Mp Ci0gICAgICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkEKLSAgICAgIyAqIEdl bTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6QUFBQQotICAgICAjICogR2VtOjpSZXNvbHY6 OkROUzo6UmVzb3VyY2U6OklOOjpBTlkKLSsgICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291 cmNlOjpJTjo6Q0FBCi0gICAgICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkNO QU1FCi0gICAgICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkhJTkZPCi0rICAg ICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkhUVFBTCi0rICAgICMgKiBHZW06 OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkxPQwotICAgICAjICogR2VtOjpSZXNvbHY6OkRO Uzo6UmVzb3VyY2U6OklOOjpNSU5GTwotICAgICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3Vy Y2U6OklOOjpNWAotICAgICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpOUwot ICAgICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpQVFIKLSAgICAgIyAqIEdl bTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6U09BCi0rICAgICMgKiBHZW06OlJlc29sdjo6 RE5TOjpSZXNvdXJjZTo6SU46OlNSVgotKyAgICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3Vy Y2U6OklOOjpTVkNCCi0gICAgICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OlRY VAotICAgICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpXS1MKLSAgICAgIwot QEAgLTcyMSw3ICs3MjYsOCBAQCBkZWYgcmVxdWVzdChzZW5kZXIsIHRvdXQpCi0gICAgICAgICAg IGJlZ2luCi0gICAgICAgICAgICAgcmVwbHksIGZyb20gPSByZWN2X3JlcGx5KHNlbGVjdF9yZXN1 bHRbMF0pCi0gICAgICAgICAgIHJlc2N1ZSBFcnJubzo6RUNPTk5SRUZVU0VELCAjIEdOVS9MaW51 eCwgRnJlZUJTRAotLSAgICAgICAgICAgICAgICAgRXJybm86OkVDT05OUkVTRVQgIyBXaW5kb3dz Ci0rICAgICAgICAgICAgICAgICBFcnJubzo6RUNPTk5SRVNFVCwgIyBXaW5kb3dzCi0rICAgICAg ICAgICAgICAgICBFT0ZFcnJvcgotICAgICAgICAgICAgICMgTm8gbmFtZSBzZXJ2ZXIgcnVubmlu ZyBvbiB0aGUgc2VydmVyPwotICAgICAgICAgICAgICMgRG9uJ3Qgd2FpdCBhbnltb3JlLgotICAg ICAgICAgICAgIHJhaXNlIFJlc29sdlRpbWVvdXQKLUBAIC05MzAsOCArOTM2LDExIEBAIGRlZiBp bml0aWFsaXplKGhvc3QsIHBvcnQ9UG9ydCkKLSAgICAgICAgIGVuZAotIAotICAgICAgICAgZGVm IHJlY3ZfcmVwbHkocmVhZGFibGVfc29ja3MpCi0tICAgICAgICAgIGxlbiA9IHJlYWRhYmxlX3Nv Y2tzWzBdLnJlYWQoMikudW5wYWNrKCduJylbMF0KLSsgICAgICAgICAgbGVuX2RhdGEgPSByZWFk YWJsZV9zb2Nrc1swXS5yZWFkKDIpCi0rICAgICAgICAgIHJhaXNlIEVPRkVycm9yIGlmIGxlbl9k YXRhLm5pbD8gfHwgbGVuX2RhdGEuYnl0ZXNpemUgIT0gMgotKyAgICAgICAgICBsZW4gPSBsZW5f ZGF0YS51bnBhY2soJ24nKVswXQotICAgICAgICAgICByZXBseSA9IEBzb2Nrc1swXS5yZWFkKGxl bikKLSsgICAgICAgICAgcmFpc2UgRU9GRXJyb3IgaWYgcmVwbHkubmlsPyB8fCByZXBseS5ieXRl c2l6ZSAhPSBsZW4KLSAgICAgICAgICAgcmV0dXJuIHJlcGx5LCBuaWwKLSAgICAgICAgIGVuZAot IAotQEAgLTEyNDQsNiArMTI1MywxMyBAQCBkZWYgc2VsZi5zcGxpdChhcmcpCi0gCi0gICAgICAg Y2xhc3MgU3RyICMgOm5vZG9jOgotICAgICAgICAgZGVmIGluaXRpYWxpemUoc3RyaW5nKQotKyAg ICAgICAgICAjIEEgbGFiZWwgaXMgbGltaXRlZCB0byA2MyBvY3RldHMuIFtSRkMgMTAzNSAyLjMu NF0gQ2hlY2tpbmcgaXQgaGVyZQotKyAgICAgICAgICAjIG1ha2VzIGl0IGFuIGludmFyaWFudCBv ZiB0aGUgb2JqZWN0OiBldmVyeSBsYWJlbCwgaG93ZXZlciBpdCB3YXMKLSsgICAgICAgICAgIyBi dWlsdCwgZml0cyBpbiBpdHMgbGVuZ3RoIG9jdGV0IGFuZCBjYW5ub3Qgd3JhcCBpdC4gQ2FsbGVy cyB0dXJuCi0rICAgICAgICAgICMgdGhpcyBpbnRvIHRoZSBlcnJvciB0aGVpciBvd24gY29udHJh Y3QgcHJvbWlzZXMuCi0rICAgICAgICAgIGlmIHN0cmluZy5ieXRlc2l6ZSA+IDYzCi0rICAgICAg ICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgIkROUyBsYWJlbCBpcyB0b28gbG9uZyAoI3tzdHJp bmcuYnl0ZXNpemV9IGJ5dGVzLCBtYXggNjMpOiAje3N0cmluZy5pbnNwZWN0fSIKLSsgICAgICAg ICAgZW5kCi0gICAgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKLSAgICAgICAgICAgIyBjYXNlIGlu c2Vuc2l2aXR5IG9mIEROUyBsYWJlbHMgZG9lc24ndCBhcHBseSBub24tQVNDSUkgY2hhcmFjdGVy cy4gW1JGQyA0MzQzXQotICAgICAgICAgICAjIFRoaXMgYXNzdW1lcyBAc3RyaW5nIGlzIGdpdmVu IGluIEFTQ0lJIGNvbXBhdGlibGUgZW5jb2RpbmcuCi1AQCAtMTI4OSw3ICsxMzA1LDI2IEBAIGRl ZiBzZWxmLmNyZWF0ZShhcmcpCi0gICAgICAgICB3aGVuIE5hbWUKLSAgICAgICAgICAgcmV0dXJu IGFyZwotICAgICAgICAgd2hlbiBTdHJpbmcKLS0gICAgICAgICAgcmV0dXJuIE5hbWUubmV3KExh YmVsLnNwbGl0KGFyZyksIC9cLlx6LyA9fiBhcmcgPyB0cnVlIDogZmFsc2UpCi0rICAgICAgICAg ICMgQSBob3N0bmFtZSBpcyBydW50aW1lIGRhdGEgcmF0aGVyIHRoYW4gYSBwcm9ncmFtbWluZyBt aXN0YWtlLCBzbwotKyAgICAgICAgICAjIGJvdGggc2l6ZSBsaW1pdHMgc3VyZmFjZSBhcyBSZXNv bHZFcnJvciB0byBzdGF5IHJlc2N1YWJsZSBhbG9uZ3NpZGUKLSsgICAgICAgICAgIyB0aGUgcmVz dCBvZiBuYW1lIHJlc29sdXRpb24uIFRoZSB0eXBlIGNoZWNrIGJlbG93IGlzIGEgY2FsbGVyCi0r ICAgICAgICAgICMgbWlzdGFrZSBhbmQga2VlcHMgcmFpc2luZyBBcmd1bWVudEVycm9yLgotKyAg ICAgICAgICBiZWdpbgotKyAgICAgICAgICAgIGxhYmVscyA9IExhYmVsLnNwbGl0KGFyZykKLSsg ICAgICAgICAgcmVzY3VlIEFyZ3VtZW50RXJyb3IgPT4gZQotKyAgICAgICAgICAgIHJhaXNlIFJl c29sdkVycm9yLm5ldyhlLm1lc3NhZ2UpCi0rICAgICAgICAgIGVuZAotKyAgICAgICAgICAjIExh YmVsOjpTdHIgZW5mb3JjZXMgdGhlIHBlci1sYWJlbCBsaW1pdC4gT25seSB0aGUgdG90YWwgaXMg a25vd2FibGUKLSsgICAgICAgICAgIyBoZXJlLCBhbmQgaXQgY291bnRzIHRoZSBlbmNvZGVkIGZv cm0sIHNvIHNpemUgc3RhcnRzIGF0IDEgZm9yIHRoZQotKyAgICAgICAgICAjIHJvb3QgbGFiZWwn cyB0ZXJtaW5hdGluZyB6ZXJvIG9jdGV0LiBbUkZDIDEwMzUgMi4zLjQsIDMuMV0KLSsgICAgICAg ICAgc2l6ZSA9IDEKLSsgICAgICAgICAgbGFiZWxzLmVhY2ggZG8gfGxhYmVsfAotKyAgICAgICAg ICAgIHNpemUgKz0gMSArIGxhYmVsLnN0cmluZy5ieXRlc2l6ZQotKyAgICAgICAgICAgIGlmIHNp emUgPiAyNTUKLSsgICAgICAgICAgICAgIHJhaXNlIFJlc29sdkVycm9yLm5ldygiRE5TIG5hbWUg aXMgdG9vIGxvbmcgKCN7c2l6ZX0gb2N0ZXRzLCBtYXggMjU1KTogI3thcmcuaW5zcGVjdH0iKQot KyAgICAgICAgICAgIGVuZAotKyAgICAgICAgICBlbmQKLSsgICAgICAgICAgcmV0dXJuIE5hbWUu bmV3KGxhYmVscywgL1wuXHovID1+IGFyZyA/IHRydWUgOiBmYWxzZSkKLSAgICAgICAgIGVsc2UK LSAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvci5uZXcoImNhbm5vdCBpbnRlcnByZXQgYXMg RE5TIG5hbWU6ICN7YXJnLmluc3BlY3R9IikKLSAgICAgICAgIGVuZAotQEAgLTE0MTEsMTIgKzE0 NDYsMjQgQEAgZGVmID09KG90aGVyKQotICAgICAgICAgICAgICAgIEByZCA9PSBvdGhlci5yZCAm JgotICAgICAgICAgICAgICAgIEByYSA9PSBvdGhlci5yYSAmJgotICAgICAgICAgICAgICAgIEBy Y29kZSA9PSBvdGhlci5yY29kZSAmJgotLSAgICAgICAgICAgICAgIEBxdWVzdGlvbiA9PSBvdGhl ci5xdWVzdGlvbiAmJgotKyAgICAgICAgICAgICAgIHF1ZXN0aW9uX2VxdWFsPyhvdGhlci5xdWVz dGlvbikgJiYKLSAgICAgICAgICAgICAgICBAYW5zd2VyID09IG90aGVyLmFuc3dlciAmJgotICAg ICAgICAgICAgICAgIEBhdXRob3JpdHkgPT0gb3RoZXIuYXV0aG9yaXR5ICYmCi0gICAgICAgICAg ICAgICAgQGFkZGl0aW9uYWwgPT0gb3RoZXIuYWRkaXRpb25hbAotICAgICAgIGVuZAotIAotKyAg ICAgICMgQSBxdWVzdGlvbiBob2xkcyB0aGUgcmVzb3VyY2UgY2xhc3MgaXRzZWxmLCBhbmQgZGVj b2RpbmcgY3JlYXRlcyBhIGZyZXNoCi0rICAgICAgIyBjbGFzcyBmb3IgZWFjaCB1bmtub3duIHR5 cGUsIHNvIHRoZSBjbGFzc2VzIGNhbm5vdCBiZSBjb21wYXJlZCBieQotKyAgICAgICMgaWRlbnRp dHkgYWxvbmUuCi0rICAgICAgcHJpdmF0ZSBkZWYgcXVlc3Rpb25fZXF1YWw/KG90aGVyX3F1ZXN0 aW9uKSAjIDpub2RvYzoKLSsgICAgICAgIHJldHVybiBmYWxzZSB1bmxlc3MgQHF1ZXN0aW9uLmxl bmd0aCA9PSBvdGhlcl9xdWVzdGlvbi5sZW5ndGgKLSsgICAgICAgIEBxdWVzdGlvbi56aXAob3Ro ZXJfcXVlc3Rpb24pIHt8KG5hbWUsIHR5cGVjbGFzcyksIChvX25hbWUsIG9fdHlwZWNsYXNzKXwK LSsgICAgICAgICAgcmV0dXJuIGZhbHNlIHVubGVzcyBuYW1lID09IG9fbmFtZSAmJgotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlOjpHZW5lcmljLnR5cGVfY2xhc3NfZXF1 YWw/KHR5cGVjbGFzcywgb190eXBlY2xhc3MpCi0rICAgICAgICB9Ci0rICAgICAgICByZXR1cm4g dHJ1ZQotKyAgICAgIGVuZAotKwotICAgICAgIGRlZiBhZGRfcXVlc3Rpb24obmFtZSwgdHlwZWNs YXNzKQotICAgICAgICAgQHF1ZXN0aW9uIDw8IFtOYW1lLmNyZWF0ZShuYW1lKSwgdHlwZWNsYXNz XQotICAgICAgIGVuZAotQEAgLTE1MjMsOCArMTU3MCwxNSBAQCBkZWYgcHV0X2xlbmd0aDE2Ci0g ICAgICAgICBlbmQKLSAKLSAgICAgICAgIGRlZiBwdXRfc3RyaW5nKGQpCi0tICAgICAgICAgIHNl bGYucHV0X3BhY2soIkMiLCBkLmxlbmd0aCkKLS0gICAgICAgICAgQGRhdGEgPDwgZAotKyAgICAg ICAgICBzID0gZC50b19zCi0rICAgICAgICAgICMgQSBjaGFyYWN0ZXItc3RyaW5nIGlzIHByZWZp eGVkIGJ5IGEgc2luZ2xlIGxlbmd0aCBvY3RldCwgc28gaXQgY2FuCi0rICAgICAgICAgICMgaG9s ZCBhdCBtb3N0IDI1NSBvY3RldHMuIFtSRkMgMTAzNSAzLjNdIFJlamVjdCBhbnl0aGluZyBsb25n ZXIgdG8KLSsgICAgICAgICAgIyBhdm9pZCBzaWxlbnRseSB0cnVuY2F0aW5nIHRoZSBsZW5ndGgg dG8gaXRzIGxvdyA4IGJpdHMgKG1vZCAyNTYpLgotKyAgICAgICAgICBpZiBzLmJ5dGVzaXplID4g MjU1Ci0rICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgImNoYXJhY3Rlci1zdHJpbmcg aXMgdG9vIGxvbmcgKCN7cy5ieXRlc2l6ZX0gYnl0ZXMsIG1heCAyNTUpOiAje3MuaW5zcGVjdH0i Ci0rICAgICAgICAgIGVuZAotKyAgICAgICAgICBzZWxmLnB1dF9wYWNrKCJDIiwgcy5ieXRlc2l6 ZSkKLSsgICAgICAgICAgQGRhdGEgPDwgcwotICAgICAgICAgZW5kCi0gCi0gICAgICAgICBkZWYg cHV0X3N0cmluZ19saXN0KGRzKQotQEAgLTE1NTQsNyArMTYwOCwxNyBAQCBkZWYgcHV0X2xhYmVs cyhkLCBjb21wcmVzczogdHJ1ZSkKLSAgICAgICAgIGVuZAotIAotICAgICAgICAgZGVmIHB1dF9s YWJlbChkKQotLSAgICAgICAgICBzZWxmLnB1dF9zdHJpbmcoZC50b19zKQotKyAgICAgICAgICBz ID0gZC50b19zCi0rICAgICAgICAgICMgTGFiZWw6OlN0ciBhcHBsaWVzIHRoaXMgbGltaXQgd2hl biBhIGxhYmVsIGlzIGJ1aWx0LCBzbyB3aGF0IGlzIGxlZnQKLSsgICAgICAgICAgIyBmb3IgaGVy ZSBpcyBhIHJhdyBzdHJpbmcgaGFuZGVkIHN0cmFpZ2h0IHRvIHB1dF9sYWJlbHMuIFRoZSB0d28g d2F5cwotKyAgICAgICAgICAjIGFuIG92ZXItbG9uZyBsYWJlbCBnb2VzIHdyb25nIGRpZmZlcjog NjQgdG8gMjU1IG9jdGV0cyB3cml0ZSBhIGxlbmd0aAotKyAgICAgICAgICAjIG9jdGV0IGluIHRo ZSByZXNlcnZlZCBvciBjb21wcmVzc2lvbiBwb2ludGVyIHJhbmdlLCBhbmQgMjU2IG9yIG1vcmUK LSsgICAgICAgICAgIyB3cmFwIGl0IG1vZCAyNTYuIEVpdGhlciB3YXkgdGhlIGVuY29kZWQgbmFt ZSBzdG9wcyBiZWluZyB0aGUgbmFtZSB0aGUKLSsgICAgICAgICAgIyBjYWxsZXIgYXNrZWQgZm9y LiBbUkZDIDEwMzUgMi4zLjQsIDQuMS40XQotKyAgICAgICAgICBpZiBzLmJ5dGVzaXplID4gNjMK LSsgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLCAiRE5TIGxhYmVsIGlzIHRvbyBsb25n ICgje3MuYnl0ZXNpemV9IGJ5dGVzLCBtYXggNjMpOiAje3MuaW5zcGVjdH0iCi0rICAgICAgICAg IGVuZAotKyAgICAgICAgICBzZWxmLnB1dF9zdHJpbmcocykKLSAgICAgICAgIGVuZAotICAgICAg IGVuZAotIAotQEAgLTE2ODAsNyArMTc0NCw5IEBAIGRlZiBnZXRfbGFiZWxzCi0gICAgICAgICAg IHByZXZfaW5kZXggPSBAaW5kZXgKLSAgICAgICAgICAgc2F2ZV9pbmRleCA9IG5pbAotICAgICAg ICAgICBkID0gW10KLS0gICAgICAgICAgc2l6ZSA9IC0xCi0rICAgICAgICAgICMgc2l6ZSBjb3Vu dHMgdGhlIGVuY29kZWQgZm9ybSwgc28gaXQgc3RhcnRzIGF0IDEgZm9yIHRoZSByb290Ci0rICAg ICAgICAgICMgbGFiZWwncyB0ZXJtaW5hdGluZyB6ZXJvIG9jdGV0LiBbUkZDIDEwMzUgMy4xXQot KyAgICAgICAgICBzaXplID0gMQotICAgICAgICAgICB3aGlsZSB0cnVlCi0gICAgICAgICAgICAg cmFpc2UgRGVjb2RlRXJyb3IubmV3KCJsaW1pdCBleGNlZWRlZCIpIGlmIEBsaW1pdCA8PSBAaW5k ZXgKLSAgICAgICAgICAgICBjYXNlIEBkYXRhLmdldGJ5dGUoQGluZGV4KQotQEAgLTE3MTEsNiAr MTc3NywxMSBAQCBkZWYgZ2V0X2xhYmVscwotIAotICAgICAgICAgZGVmIGdldF9sYWJlbAotICAg ICAgICAgICByZXR1cm4gTGFiZWw6OlN0ci5uZXcoc2VsZi5nZXRfc3RyaW5nKQotKyAgICAgICAg cmVzY3VlIEFyZ3VtZW50RXJyb3IgPT4gZQotKyAgICAgICAgICAjIEEgbGVuZ3RoIG9jdGV0IG9m IDY0Li4xOTEgaXMgcmVzZXJ2ZWQgcmF0aGVyIHRoYW4gYSBsYWJlbCBsZW5ndGgsCi0rICAgICAg ICAgICMgYnV0IHRoaXMgZGVjb2RlciB1c2VkIHRvIHJlYWQgaXQgYXMgb25lLiBbUkZDIDEwMzUg NC4xLjRdIFJlcG9ydCBpdAotKyAgICAgICAgICAjIHRoZSB3YXkgdGhlIHJlc3Qgb2YgYSBtYWxm b3JtZWQgbWVzc2FnZSBpcyByZXBvcnRlZC4KLSsgICAgICAgICAgcmFpc2UgRGVjb2RlRXJyb3Iu bmV3KGUubWVzc2FnZSkKLSAgICAgICAgIGVuZAotIAotICAgICAgICAgZGVmIGdldF9xdWVzdGlv bgotQEAgLTE4OTgsOCArMTk2OSw5IEBAIGRlZiBzZWxmLmNyZWF0ZShrZXlfbnVtYmVyKQotICAg ICAgICAgICBrZXlfbmFtZSA9IDoia2V5I3trZXlfbnVtYmVyfSIKLSAgICAgICAgICAgYy5jb25z dF9zZXQoOktleU5hbWUsIGtleV9uYW1lKQotICAgICAgICAgICBjLmNvbnN0X3NldCg6S2V5TnVt YmVyLCBrZXlfbnVtYmVyKQotLSAgICAgICAgICBzZWxmLmNvbnN0X3NldCg6IktleSN7a2V5X251 bWJlcn0iLCBjKQotLSAgICAgICAgICBDbGFzc0hhc2hba2V5X25hbWVdID0gQ2xhc3NIYXNoW2tl eV9udW1iZXJdID0gYwotKyAgICAgICAgICAjIE5vdCByZWdpc3RlcmVkIGluIGEgY29uc3RhbnQg b3IgaW4gQ2xhc3NIYXNoLiBDbGFzc0hhc2ggY3JlYXRlcyBhCi0rICAgICAgICAgICMgY2xhc3Mg Zm9yIGV2ZXJ5IHVua25vd24gU3ZjUGFyYW1LZXksIHNvIHJlZ2lzdGVyaW5nIHRoZW0KLSsgICAg ICAgICAgIyBwZXJtYW5lbnRseSB3b3VsZCBsZXQgYSBtYWxpY2lvdXMgcmVzcG9uc2UgZXhoYXVz dCBtZW1vcnkuCi0gICAgICAgICAgIHJldHVybiBjCi0gICAgICAgICBlbmQKLSAgICAgICBlbmQK LUBAIC0yMjA2LDEyICsyMjc4LDI4IEBAIGRlZiBzZWxmLmRlY29kZV9yZGF0YShtc2cpICMgOm5v ZG9jOgotICAgICAgICAgICByZXR1cm4gc2VsZi5uZXcobXNnLmdldF9ieXRlcykKLSAgICAgICAg IGVuZAotIAotKyAgICAgICAgIyBjcmVhdGUgbWFrZXMgYSBmcmVzaCBjbGFzcyBmb3IgZWFjaCBk ZWNvZGVkIHJlc291cmNlLCBzbyB0aGUgdHlwZSBhbmQKLSsgICAgICAgICMgY2xhc3MgdmFsdWVz IGhhdmUgdG8gYmUgY29tcGFyZWQgaW5zdGVhZCBvZiB0aGUgY2xhc3MgaXRzZWxmLgotKyAgICAg ICAgZGVmIHNlbGYudHlwZV9jbGFzc19lcXVhbD8oa2xhc3MsIG90aGVyKSAjIDpub2RvYzoKLSsg ICAgICAgICAgcmV0dXJuIHRydWUgaWYga2xhc3MuZXF1YWw/KG90aGVyKQotKyAgICAgICAgICBH ZW5lcmljID4ga2xhc3MgJiYgR2VuZXJpYyA+IG90aGVyICYmCi0rICAgICAgICAgICAga2xhc3M6 OlR5cGVWYWx1ZSA9PSBvdGhlcjo6VHlwZVZhbHVlICYmCi0rICAgICAgICAgICAga2xhc3M6OkNs YXNzVmFsdWUgPT0gb3RoZXI6OkNsYXNzVmFsdWUKLSsgICAgICAgIGVuZAotKwotKyAgICAgICAg ZGVmID09KG90aGVyKSAjIDpub2RvYzoKLSsgICAgICAgICAgcmV0dXJuIG90aGVyLmlzX2E/KEdl bmVyaWMpICYmCi0rICAgICAgICAgICAgICAgICBHZW5lcmljLnR5cGVfY2xhc3NfZXF1YWw/KHNl bGYuY2xhc3MsIG90aGVyLmNsYXNzKSAmJgotKyAgICAgICAgICAgICAgICAgQGRhdGEgPT0gb3Ro ZXIuZGF0YQotKyAgICAgICAgZW5kCi0rCi0gICAgICAgICBkZWYgc2VsZi5jcmVhdGUodHlwZV92 YWx1ZSwgY2xhc3NfdmFsdWUpICMgOm5vZG9jOgotICAgICAgICAgICBjID0gQ2xhc3MubmV3KEdl bmVyaWMpCi0gICAgICAgICAgIGMuY29uc3Rfc2V0KDpUeXBlVmFsdWUsIHR5cGVfdmFsdWUpCi0g ICAgICAgICAgIGMuY29uc3Rfc2V0KDpDbGFzc1ZhbHVlLCBjbGFzc192YWx1ZSkKLS0gICAgICAg ICAgR2VuZXJpYy5jb25zdF9zZXQoIlR5cGUje3R5cGVfdmFsdWV9X0NsYXNzI3tjbGFzc192YWx1 ZX0iLCBjKQotLSAgICAgICAgICBDbGFzc0hhc2hbW3R5cGVfdmFsdWUsIGNsYXNzX3ZhbHVlXV0g PSBjCi0rICAgICAgICAgICMgTm90IHJlZ2lzdGVyZWQgaW4gYSBjb25zdGFudCBvciBpbiBDbGFz c0hhc2guIGdldF9jbGFzcyBjcmVhdGVzIGEKLSsgICAgICAgICAgIyBjbGFzcyBmb3IgZXZlcnkg dW5rbm93biAodHlwZSwgY2xhc3MpIHBhaXIsIHNvIHJlZ2lzdGVyaW5nIHRoZW0KLSsgICAgICAg ICAgIyBwZXJtYW5lbnRseSB3b3VsZCBsZXQgYSBtYWxpY2lvdXMgcmVzcG9uc2UgZXhoYXVzdCBt ZW1vcnkuCi0gICAgICAgICAgIHJldHVybiBjCi0gICAgICAgICBlbmQKLSAgICAgICBlbmQKLQoK ZGlmZiAtLWdpdCBhL3J1Ynkuc3BlYyBiL3J1Ynkuc3BlYwppbmRleCBlMWIyYzg1Li4wMTRkMGQ0 IDEwMDY0NAotLS0gYS9ydWJ5LnNwZWMKKysrIGIvcnVieS5zcGVjCkBAIC0xLDYgKzEsNiBAQAog JWdsb2JhbCBtYWpvcl92ZXJzaW9uIDQKICVnbG9iYWwgbWlub3JfdmVyc2lvbiAwCi0lZ2xvYmFs IHRlZW55X3ZlcnNpb24gNgorJWdsb2JhbCB0ZWVueV92ZXJzaW9uIDcKICVnbG9iYWwgbWFqb3Jf bWlub3JfdmVyc2lvbiAle21ham9yX3ZlcnNpb259LiV7bWlub3JfdmVyc2lvbn0KIAogJWdsb2Jh bCBydWJ5X3ZlcnNpb24gJXttYWpvcl9taW5vcl92ZXJzaW9ufS4le3RlZW55X3ZlcnNpb259CkBA IC0zNiwxOSArMzYsMTggQEAKICMjIEJVTkRMRURfR0VNU19WRVJTSU9OUwogCiAjIEJ1bmRsZWQg bGlicmFyaWVzIHZlcnNpb25zCi0lZ2xvYmFsIHJ1YnlnZW1zX3ZlcnNpb24gNC4wLjE2CislZ2xv YmFsIHJ1YnlnZW1zX3ZlcnNpb24gNC4wLjIwCiAlZ2xvYmFsIHJ1YnlnZW1zX21vbGluaWxsb192 ZXJzaW9uIDAuOC4wCiAlZ2xvYmFsIHJ1YnlnZW1zX25ldF9odHRwX3ZlcnNpb24gMC43LjAKICVn bG9iYWwgcnVieWdlbXNfbmV0X3Byb3RvY29sX3ZlcnNpb24gMC4yLjIKICVnbG9iYWwgcnVieWdl bXNfb3B0cGFyc2VfdmVyc2lvbiAwLjguMAotJWdsb2JhbCBydWJ5Z2Vtc19yZXNvbHZfdmVyc2lv biAwLjcuMgogJWdsb2JhbCBydWJ5Z2Vtc19zZWN1cmVyYW5kb21fdmVyc2lvbiAwLjQuMQogJWds b2JhbCBydWJ5Z2Vtc190aW1lb3V0X3ZlcnNpb24gMC40LjQKICVnbG9iYWwgcnVieWdlbXNfdHNv cnRfdmVyc2lvbiAwLjIuMAogJWdsb2JhbCBydWJ5Z2Vtc191cmlfdmVyc2lvbiAxLjEuMQogCiAj IERlZmF1bHQgZ2Vtcy4KLSVnbG9iYWwgYnVuZGxlcl92ZXJzaW9uIDQuMC4xNgorJWdsb2JhbCBi dW5kbGVyX3ZlcnNpb24gNC4wLjIwCiAlZ2xvYmFsIGJ1bmRsZXJfY29ubmVjdGlvbl9wb29sX3Zl cnNpb24gMi41LjQKICVnbG9iYWwgYnVuZGxlcl9maWxldXRpbHNfdmVyc2lvbiAxLjguMAogJWds b2JhbCBidW5kbGVyX25ldF9odHRwX3BlcnNpc3RlbnRfdmVyc2lvbiA0LjAuNgpAQCAtNjIsNyAr NjEsNyBAQAogJWdsb2JhbCBkaWRfeW91X21lYW5fdmVyc2lvbiAyLjAuMAogJWdsb2JhbCBkaWdl c3RfdmVyc2lvbiAzLjIuMQogJWdsb2JhbCBlbmdsaXNoX3ZlcnNpb24gMC44LjEKLSVnbG9iYWwg ZXJiX3ZlcnNpb24gNi4wLjEuMQorJWdsb2JhbCBlcmJfdmVyc2lvbiA2LjAuNwogJWdsb2JhbCBl cnJvcl9oaWdobGlnaHRfdmVyc2lvbiAwLjcuMgogJWdsb2JhbCBldGNfdmVyc2lvbiAxLjQuNgog JWdsb2JhbCBmY250bF92ZXJzaW9uIDEuMy4wCkBAIC0xODksNyArMTg4LDcgQEAKIFN1bW1hcnk6 IEFuIGludGVycHJldGVyIG9mIG9iamVjdC1vcmllbnRlZCBzY3JpcHRpbmcgbGFuZ3VhZ2UKIE5h bWU6IHJ1YnkKIFZlcnNpb246ICV7cnVieV92ZXJzaW9ufSV7P2RldmVsb3BtZW50X3JlbGVhc2V9 Ci1SZWxlYXNlOiAzOSV7P2Rpc3R9CitSZWxlYXNlOiA0MCV7P2Rpc3R9CiAjIExpY2Vuc2VzLCB3 aGljaCBhcmUgbGlrZWx5IG5vdCBpbmNsdWRlZCBpbiBiaW5hcnkgUlBNczoKICMgQXBhY2hlLTIu MDoKICMgICBiZW5jaG1hcmsvZ2MvcmVkYmxhY2sucmIKQEAgLTI5OCwxMCArMjk3LDEyIEBAIFBh dGNoODogcnVieS00LjAuMS1TdXBwb3J0LWN1c3RvbWl6YWJsZS1ydXN0Y19mbGFncy1mb3ItcnVz dGMtYnVpbGRzLnBhdGNoCiAjIEZpeCBlcnJvciB3aXRoIGBnZW0gaW5zdGFsbCAtLWRvY3VtZW50 PXJkb2MscmlgCiAjIEZpeGVkIGluIHJkb2MgNy4xLjAgYnV0IG5vdCBpbiA3LjAuNAogUGF0Y2g5 OiByZG9jLXByMTUzMS1maXgtbXV0aWxwbGUtZG9jdW1lbnQtaW5zdGFsbGF0aW9uLnBhdGNoCi0j IEJhY2twb3J0IGZyb20gcnVieV80XzAgYnJhbmNoIHRvIHVwZGF0ZSByZXNvbHYgdG8gMC43LjIg KGZpeGVzIENWRS0yMDI2LTgwMjEyIENWRS0yMDI2LTgwMjEzKQotIyBodHRwczovL2dpdGh1Yi5j b20vcnVieS9ydWJ5L3B1bGwvMTg1MjgKLSMgQWxzbyBjb3BpZWQgdGhlIHBhdGNoIHRvIGFwcGx5 IHRoZSBmaXggYWxzbyBmb3IgdmVuZG9yZWQgcmVzb2x2Ci1QYXRjaDEwOiBydWJ5LTRfMC1wcjE4 NTI4LXVwZGF0ZS1yZXNvbHYtMF83XzIucGF0Y2gKKyMgU3RvcCB2ZW5kb3JpbmcgcmVzb2x2IGZv ciB0d28gcmVnZXhwcyB0byBzdG9wIHNob3dpbmcgdXAgYXMgYW4gb3V0ZGF0ZWQgY29weSBpbiBz ZWN1cml0eQorIyBhdWRpdHMgb2YgdGhlIFJ1YnkgdGFyYmFsbAorIyBodHRwczovL2dpdGh1Yi5j b20vcnVieS9ydWJ5L2NvbW1pdC8wYjhlMGIxYzI4YmM4MzkwOTVlMmMwZTg4NDMxM2YwZjVlZjFm YzUzCisjIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieWdlbXMvcHVsbC85ODc3L2Nv bW1pdHMvOWYyYmQ1ZjY2Y2Q3ZTcxZWUxNDBlZmI2OGMxOWEzYTI2NjE3MjBhYQorIyBUaGlzIGNo YW5nZSBpcyBpbmNsdWRlZCBpbiBydWJ5Z2VtcyA0LjAuMjEKK1BhdGNoMTA6IHJ1YnktNC4wLjct cnVieWdlbXMtcHI5ODc3LXN0b3AtdmVuZG9yaW5nLXJlc29sdi5wYXRjaAogCiBSZXF1aXJlczog JXtuYW1lfS1saWJzJXs/X2lzYX0gPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KICV7P3dpdGhfcnVi eXBpY2s6U3VnZ2VzdHM6IHJ1YnlwaWNrfQpAQCAtNDA5LDcgKzQxMCw2IEBAIFZlcnNpb246ICAg ICV7cnVieWdlbXNfdmVyc2lvbn0KICMgICBsaWIvcnVieWdlbXMvbmV0LWh0dHAvCiAjICAgbGli L3J1YnlnZW1zL25ldC1wcm90b2NvbC8KICMgICBsaWIvcnVieWdlbXMvb3B0cGFyc2UvCi0jICAg bGliL3J1YnlnZW1zL3Jlc29sdi8KICMgICBsaWIvcnVieWdlbXMvdGltZW91dC8KICMgICBsaWIv cnVieWdlbXMvdHNvcnQvCiAjIE1JVDogbGliL3J1YnlnZW1zL3Jlc29sdmVyL21vbGluaWxsbwpA QCAtNDI4LDcgKzQyOCw2IEBAIFByb3ZpZGVzOiAgIGJ1bmRsZWQocnVieWdlbS1tb2xpbmlsbG8p ID0gJXtydWJ5Z2Vtc19tb2xpbmlsbG9fdmVyc2lvbn0KIFByb3ZpZGVzOiAgIGJ1bmRsZWQocnVi eWdlbS1uZXQtaHR0cCkgPSAle3J1YnlnZW1zX25ldF9odHRwX3ZlcnNpb259CiBQcm92aWRlczog ICBidW5kbGVkKHJ1YnlnZW0tbmV0LXByb3RvY29sKSA9ICV7cnVieWdlbXNfbmV0X3Byb3RvY29s X3ZlcnNpb259CiBQcm92aWRlczogICBidW5kbGVkKHJ1YnlnZW0tb3B0cGFyc2UpID0gJXtydWJ5 Z2Vtc19vcHRwYXJzZV92ZXJzaW9ufQotUHJvdmlkZXM6ICAgYnVuZGxlZChydWJ5Z2VtLXJlc29s dikgPSAle3J1YnlnZW1zX3Jlc29sdl92ZXJzaW9ufQogUHJvdmlkZXM6ICAgYnVuZGxlZChydWJ5 Z2VtLXNlY3VyZXJhbmRvbSkgPSAle3J1YnlnZW1zX3NlY3VyZXJhbmRvbV92ZXJzaW9ufQogUHJv dmlkZXM6ICAgYnVuZGxlZChydWJ5Z2VtLXRpbWVvdXQpID0gJXtydWJ5Z2Vtc190aW1lb3V0X3Zl cnNpb259CiBQcm92aWRlczogICBidW5kbGVkKHJ1YnlnZW0tdHNvcnQpID0gJXtydWJ5Z2Vtc190 c29ydF92ZXJzaW9ufQpAQCAtMTA1NSwxNiArMTA1NCw2IEBAIG1ha2UgLUMgJXtfdnBhdGhfYnVp bGRkaXJ9IC1zIHJ1bnJ1YnkgVEVTVFJVTl9TQ1JJUFQ9Ii1lIFwiIFwKICAgZXhpdCAxIGlmIEdl bTo6T3B0aW9uUGFyc2VyOjpWZXJzaW9uICE9ICcle3J1YnlnZW1zX29wdHBhcnNlX3ZlcnNpb259 JzsgXAogXCIiCiAKLSMgUmVzb2x2LgotbWFrZSAtQyAle192cGF0aF9idWlsZGRpcn0gLXMgcnVu cnVieSBURVNUUlVOX1NDUklQVD0iLWUgXCIgXAotICBtb2R1bGUgR2VtOyBlbmQ7IFwKLSAgcmVx dWlyZSAncmJjb25maWcnOyBcCi0gIHJlcXVpcmUgJ3J1YnlnZW1zL3ZlbmRvci9yZXNvbHYvbGli L3Jlc29sdic7IFwKLSAgcHV0cyAnJSV7cnVieWdlbXNfcmVzb2x2X3ZlcnNpb259OiAle3J1Ynln ZW1zX3Jlc29sdl92ZXJzaW9ufSc7IFwKLSAgcHV0cyAlUVtHZW06OlJlc29sdjo6VkVSU0lPTjog I3tHZW06OlJlc29sdjo6VkVSU0lPTn1dOyBcCi0gIGV4aXQgMSBpZiBHZW06OlJlc29sdjo6VkVS U0lPTiAhPSAnJXtydWJ5Z2Vtc19yZXNvbHZfdmVyc2lvbn0nOyBcCi1cIiIKLQogIyBTZWN1cmVS YW5kb20uCiBtYWtlIC1DICV7X3ZwYXRoX2J1aWxkZGlyfSAtcyBydW5ydWJ5IFRFU1RSVU5fU0NS SVBUPSItZSBcIiBcCiAgIG1vZHVsZSBHZW07IG1vZHVsZSBSYW5kb207IGVuZDsgZW5kOyBcCkBA IC0xOTU1LDYgKzE5NDQsMTAgQEAgbWFrZSAtQyAle192cGF0aF9idWlsZGRpcn0gcnVucnVieSBU RVNUUlVOX1NDUklQVD0iIFwKIAogCiAlY2hhbmdlbG9nCisqIFRodSBTZXAgMTcgMjAyNiBNYW1v cnUgVEFTQUtBIDxtdGFzYWthQGZlZG9yYXByb2plY3Qub3JnPiAtIDQuMC42LTQwCistIFVwZGF0 ZSB0byBSdWJ5IDQuMC43CistIEJhY2twb3J0IHJ1YnlnZW1zIHNpZGUgY2hhbmdlIHRvIHN0b3Ag dmVuZG9yaW5nIHJlc29sdiBpbiBydWJ5Z2VtcyB0cmVlCisKICogVGh1IFNlcCAxMCAyMDI2IEFy anVuIFNoYW5rYXIgPGFyanVuQHJlZGhhdC5jb20+IC0gNC4wLjYtMzkKIC0geDg2XzY0OiBVc2Ug dWNvbnRleHQgYmFzZWQgY29yb3V0aW5lcyBmb3IgQ0VUIGNvbXBhdGliaWxpdHkKIAoKZGlmZiAt LWdpdCBhL3NvdXJjZXMgYi9zb3VyY2VzCmluZGV4IDg0MTVkZmMuLmMyNGFlMTMgMTAwNjQ0Ci0t LSBhL3NvdXJjZXMKKysrIGIvc291cmNlcwpAQCAtMSArMSBAQAotU0hBNTEyIChydWJ5LTQuMC42 LnRhci54eikgPSBjOWMzOTE2NzVhMDk4YjVhMjdkZDY4NzU3MWFiMGExNjRjNzg4Y2JiOGRkY2Jh YjZkMTdhM2U4YjNjNGJhMzg5MzQ2YjJlNmQ3ODA3ZDM4ZGIzZTc0ZDIyNWM3MGUzNzhhMjk2ZDYw ZDBmNDY1Y2IwZmNlYzk3MDIyNDJjODNjNgorU0hBNTEyIChydWJ5LTQuMC43LnRhci54eikgPSBk MWQzNDVjMjViZmY0M2FhODZmNTM2YjIyY2QwNDc0NmE3ZDMzNzIwNzdiZjQ3ZWM3NWVmMTgyMGMw YjQzZDBkYmUzNTczZGQ1ZTVjNTVlZTUxNzc5NmY0NmYwY2RiZDIyYzc1MDZhZWJkMDY1ODEyNDFl ZWZiNWZmZDlkMmU1Zgo=