From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id B957F5A37 for ; Tue, 19 May 2015 07:46:42 +0200 (CEST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP; 18 May 2015 22:46:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,456,1427785200"; d="scan'208";a="696955453" Received: from pgsmsx105.gar.corp.intel.com ([10.221.44.96]) by orsmga001.jf.intel.com with ESMTP; 18 May 2015 22:46:38 -0700 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by PGSMSX105.gar.corp.intel.com (10.221.44.96) with Microsoft SMTP Server (TLS) id 14.3.224.2; Tue, 19 May 2015 13:46:36 +0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.94]) by shsmsx102.ccr.corp.intel.com ([169.254.2.109]) with mapi id 14.03.0224.002; Tue, 19 May 2015 13:46:34 +0800 From: "Jiajia, SunX" To: "Liu, Yong" , "dts@dpdk.org" Thread-Topic: =?utf-8?B?W2R0c10gW+KAmGR0cy12MeKAmSA0LzldIEFkZCBWTSBjbGFzcyBhbmQgdGhl?= =?utf-8?B?IHZpcnR1YWwgRFVUIGNsYXNzIGFuZCB0aGUgdmlydHVhbCByZXNvdXJjZSBt?= =?utf-8?Q?odule?= Thread-Index: AQHQkSiTI/NJVS1gg0G1VkBjFYCbup2BPMoAgAFP+HA= Date: Tue, 19 May 2015 05:46:33 +0000 Message-ID: References: <1431925646-1314-1-git-send-email-sunx.jiajia@intel.com> <1431925646-1314-5-git-send-email-sunx.jiajia@intel.com> <86228AFD5BCD8E4EBFD2B90117B5E81E10DE4D1B@SHSMSX103.ccr.corp.intel.com> In-Reply-To: <86228AFD5BCD8E4EBFD2B90117B5E81E10DE4D1B@SHSMSX103.ccr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-cr-hashedpuzzle: ebQ= CbX9 DKey DWMT EMMu FfRI Fn/1 GiTt GyD4 HFrX HXxm IRwC KRRA KS0i La4G LseC; 1; ZAB0AHMAQABkAHAAZABrAC4AbwByAGcA; Sosha1_v1; 7; {B0BB4B41-1E42-4B3C-BC26-03FB4BFD4F49}; cwB1AG4AeAAuAGoAaQBhAGoAaQBhAEAAaQBuAHQAZQBsAC4AYwBvAG0A; Tue, 19 May 2015 05:46:30 GMT; UgBFADoAIABbAGQAdABzAF0AIABbABggZAB0AHMALQB2ADEAGSAgADQALwA5AF0AIABBAGQAZAAgAFYATQAgAGMAbABhAHMAcwAgAGEAbgBkACAAdABoAGUAIAB2AGkAcgB0AHUAYQBsACAARABVAFQAIABjAGwAYQBzAHMAIABhAG4AZAAgAHQAaABlACAAdgBpAHIAdAB1AGEAbAAgAHIAZQBzAG8AdQByAGMAZQAgAG0AbwBkAHUAbABlAA== x-cr-puzzleid: {B0BB4B41-1E42-4B3C-BC26-03FB4BFD4F49} x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dts] =?utf-8?b?W+KAmGR0cy12MeKAmSA0LzldIEFkZCBWTSBjbGFzcyBhbmQg?= =?utf-8?q?the_virtual_DUT_class_and_the_virtual_resource_module?= X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 May 2015 05:46:44 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTGl1LCBZb25nDQo+IFNl bnQ6IE1vbmRheSwgTWF5IDE4LCAyMDE1IDk6NTggUE0NCj4gVG86IEppYWppYSwgU3VuWDsgZHRz QGRwZGsub3JnDQo+IFN1YmplY3Q6IFJFOiBbZHRzXSBb4oCYZHRzLXYx4oCZIDQvOV0gQWRkIFZN IGNsYXNzIGFuZCB0aGUgdmlydHVhbCBEVVQNCj4gY2xhc3MgYW5kIHRoZSB2aXJ0dWFsIHJlc291 cmNlIG1vZHVsZQ0KPiANCj4gSmlhamlhLCBwbGVhc2Ugc2VlIG15IGNvbW1lbnRzIGJlbG93Lg0K PiBUaGlzIHBhdGNoIGlzIHNvIGh1Z2UgYW5kIHdoZW4gZWRpdCB0aGlzIGVtYWlsIHNvbWV0aW1l IG15IG91dGxvb2sgaGFuZw0KPiB1cC4gQ2FuIHlvdSBzZXBhcmF0ZWQgdGhpcyBwYXRjaCBpbnRv IHR3byBvciB0aHJlZSBwYXRjaGVzPw0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiA+IEZyb206IGR0cyBbbWFpbHRvOmR0cy1ib3VuY2VzQGRwZGsub3JnXSBPbiBCZWhhbGYg T2Ygc2ppYWppYXgNCj4gPiBTZW50OiBNb25kYXksIE1heSAxOCwgMjAxNSAxOjA3IFBNDQo+ID4g VG86IGR0c0BkcGRrLm9yZw0KPiA+IFN1YmplY3Q6IFtkdHNdIFvigJhkdHMtdjHigJkgNC85XSBB ZGQgVk0gY2xhc3MgYW5kIHRoZSB2aXJ0dWFsIERVVCBjbGFzcw0KPiBhbmQNCj4gPiB0aGUgdmly dHVhbCByZXNvdXJjZSBtb2R1bGUNCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IHNqaWFqaWF4IDxz dW54LmppYWppYUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIGZyYW1ld29yay9xZW11X2t2bS5w eSAgICAgIHwgOTEyDQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrDQo+ID4gIGZyYW1ld29yay92aXJ0X2Jhc2UucHkgICAgIHwgMjUwICsrKysrKysrKysr KysNCj4gPiAgZnJhbWV3b3JrL3ZpcnRfZHV0LnB5ICAgICAgfCAyMzkgKysrKysrKysrKysrDQo+ ID4gIGZyYW1ld29yay92aXJ0X3Jlc291cmNlLnB5IHwgNDg2ICsrKysrKysrKysrKysrKysrKysr KysrKw0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDE4ODcgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZnJhbWV3b3JrL3FlbXVfa3ZtLnB5DQo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBmcmFtZXdvcmsvdmlydF9iYXNlLnB5DQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcmFt ZXdvcmsvdmlydF9kdXQucHkNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGZyYW1ld29yay92aXJ0 X3Jlc291cmNlLnB5DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZnJhbWV3b3JrL3FlbXVfa3ZtLnB5 IGIvZnJhbWV3b3JrL3FlbXVfa3ZtLnB5DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBp bmRleCAwMDAwMDAwLi41ZjVmNjY1DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2ZyYW1l d29yay9xZW11X2t2bS5weQ0KPiA+IEBAIC0wLDAgKzEsOTEyIEBADQo+ID4gKyMgPENPUFlSSUdI VF9UQUc+DQo+ID4gKw0KPiA+ICtpbXBvcnQgdGltZQ0KPiA+ICtpbXBvcnQgcmUNCj4gPiAraW1w b3J0IG9zDQo+ID4gKw0KPiA+ICtmcm9tIHZpcnRfYmFzZSBpbXBvcnQgVmlydEJhc2UNCj4gPiAr ZnJvbSBleGNlcHRpb24gaW1wb3J0IFN0YXJ0Vk1GYWlsZWRFeGNlcHRpb24NCj4gPiArDQo+ID4g KyMgVGhpcyBuYW1lIGlzIGRlcmljdGx5IGRlZmluZWQgaW4gdGhlIHFlbXUgZ3Vlc3Qgc2VyaXZj ZQ0KPiA+ICsjIFNvIHlvdSBjYW4gbm90IGNoYW5nZSBpdCBleGNlcHQgaXQgaXMgY2hhbmdlZCBi eSB0aGUgc2VydmljZQ0KPiA+ICtRR0FfREVWX05BTUUgPSAnb3JnLnFlbXUuZ3Vlc3RfYWdlbnQu MCcNCj4gPiArIyBUaGlzIHBhdGggZGVmaW5lcyBhbiBzb2NrZXQgcGF0aCBvbiB0aGUgaG9zdCBj b25uZWN0ZWQgd2l0aA0KPiA+ICsjIGEgc3BlY2lmaWVkIFZNDQo+ID4gK1FHQV9TT0NLX1BBVEhf VEVNUExBVEUgPSAnL3RtcC8lKHZtX25hbWUpc19xZ2EwLnNvY2snDQo+ID4gKw0KPiA+ICsNCj4g PiArY2xhc3MgUUVNVUt2bShWaXJ0QmFzZSk6DQo+ID4gKw0KPiA+ICsgICAgREVGQVVMVF9CUklE R0UgPSAnYnIwJw0KPiA+ICsgICAgUUVNVV9JRlVQID0gIiIiIyEvYmluL3NoDQo+ID4gKw0KPiA+ ICtzZXQgLXgNCj4gPiArDQo+ID4gK3N3aXRjaD0lKHN3aXRjaClzDQo+ID4gKw0KPiA+ICtpZiBb IC1uICIkMSIgXTt0aGVuDQo+ID4gKyAgICB0dW5jdGwgLXQgJDENCj4gPiArICAgIGlwIGxpbmsg c2V0ICQxIHVwDQo+ID4gKyAgICBzbGVlcCAwLjVzDQo+ID4gKyAgICBicmN0bCBhZGRpZiAkc3dp dGNoICQxDQo+ID4gKyAgICBleGl0IDANCj4gPiArZWxzZQ0KPiA+ICsgICAgZWNobyAiRXJyb3I6 IG5vIGludGVyZmFjZSBzcGVjaWZpZWQiDQo+ID4gKyAgICBleGl0IDENCj4gPiArZmkNCj4gPiAr IiIiDQo+IA0KPiBJZiB0aGlzIGZpbGUgbm90IGNoYW5nZWQsIGNhbiBiZSBqdXN0IG1vdmVkIGlu dG8gZGVwIGZvbGRlci4gVGhpcyB3aWxsDQo+IG1ha2UgdGhpcyBtb2R1bGUgbW9yZSBjbGVhci4N Cj4gDQoNCk9rLCBpdCB3aWxsIGJlIG1vdmVkIGludG8gdGhlIGRlcCBmb2xkZXIgaW4gdGhlIG5l eHQgdmVyc2lvbi4NCg0KPiA+ICsgICAgUUVNVV9JRlVQX1BBVEggPSAnL2V0Yy9xZW11LWlmdXAn DQo+ID4gKw0KPiA+ICsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGR1dCwgdm1fbmFtZSwgc3VpdGVf bmFtZSk6DQo+ID4gKyAgICAgICAgc3VwZXIoUUVNVUt2bSwgc2VsZikuX19pbml0X18oZHV0LCB2 bV9uYW1lLCBzdWl0ZV9uYW1lKQ0KPiBDYW4gd2UgYXV0by1kZXRlY3RlZCBzdWl0ZSBuYW1lPyBJ biB0ZXN0IGNhc2Ugd2Ugc2hvdWxkIG5vdCB1c2UgaGFyZA0KPiBjb2RlIHN1aXRlIG5hbWUuDQo+ IA0KPiA+ICsgICAgICAgIHNlbGYuc2V0X3ZtX25hbWUoc2VsZi52bV9uYW1lKQ0KPiA+ICsgICAg ICAgIHNlbGYuc2V0X3ZtX2VuYWJsZV9rdm0oKQ0KPiA+ICsgICAgICAgIHNlbGYuc2V0X3ZtX3Fn YSgpDQo+ID4gKyAgICAgICAgc2VsZi5zZXRfdm1fZGFlbW9uKCkNCj4gPiArDQo+IA0KPiBJdCdz IGJldHRlciB0byB1c2Ugb25lIGZ1bmN0aW9uICJzZXRfdm1fZGVmYXVsdCIgdG8gcmVwbGFjZSB0 aGVzZQ0KPiBmdW5jdGlvbnMuDQo+IA0KDQpPaywgaXQgd2lsbCBiZSBjaGFuZ2VkLg0KDQo+ID4g KyAgICAgICAgIyBpbml0aWFsaXplIHFlbXUgZW11bGF0b3IsIGV4YW1wbGU6IHFlbXUtc3lzdGVt LXg4Nl82NA0KPiA+ICsgICAgICAgIHNlbGYucWVtdV9lbXVsYXRvciA9IHNlbGYuZ2V0X3FlbXVf ZW11bGF0b3IoKQ0KPiA+ICsNCj4gPiArICAgICAgICAjIGluaXRpYWxpemUgcWVtdSBib290IGNv bW1hbmQgbGluZQ0KPiA+ICsgICAgICAgICMgZXhhbXBsZTogcWVtdS1zeXN0ZW0teDg2XzY0IC1u YW1lIHZtMSAtbSAyMDQ4IC12bmMgOjEgLQ0KPiA+IGRhZW1vbml6ZQ0KPiA+ICsgICAgICAgIHNl bGYud2hvbGVfcWVtdV9rdm1fYm9vdF9saW5lID0gJycNCj4gPiArDQo+IA0KPiBUaGUgbmFtZSBp cyB0b28gbG9uZywgcGxlYXNlIG5hcnJvdyBpdCBsaWtlICJzZWxmLnFlbXVfY29tbW1hbmRsaW5l Ii4NCj4gDQoNCk9rLCBJIHdpbGwgdHJ5Lg0KDQo+ID4gKyAgICAgICAgc2VsZi5pbml0X3ZtX3Jl cXVlc3RfcmVzb3VyY2UoKQ0KPiANCj4gUGxlYXNlIGFkZCBzb21lIGRlc2NyaXB0aW9uIG9mIHRo aXMgZnVuY3Rpb24uDQoNCkl0IHdpbGwgYmUgZG9uZSBuZXh0IHZlcnNpb24uDQoNCj4gPiArDQo+ ID4gKyAgICAgICAgUUdBX0NMSV9QQVRIID0gJy1yIGRlcC9RTVAvJw0KPiA+ICsgICAgICAgIHNl bGYuaG9zdF9zZXNzaW9uLmNvcHlfZmlsZV90byhRR0FfQ0xJX1BBVEgpDQo+ID4gKw0KPiA+ICsg ICAgZGVmIGluaXRfdm1fcmVxdWVzdF9yZXNvdXJjZShzZWxmKToNCj4gPiArICAgICAgICAiIiIN Cj4gPiArICAgICAgICBpbml0aWFsaXplIHZjcHVzIHdoYXQgd2lsbCBiZSBwaW5uZWQgdG8gdGhl IFZNLg0KPiA+ICsgICAgICAgIElmIHNwZWNpZnkgdGhpcyBwYXJhbSwgdGhlIHNwZWNpZmllZCB2 Y3B1cyB3aWxsDQo+ID4gKyAgICAgICAgYmUgcGlubmVkIHRvIFZNIGJ5IHRoZSBjb21tYW5kICd0 YXNrc2V0JyB3aGVuDQo+ID4gKyAgICAgICAgc3RhcnRpbmcgdGhlIFZNLg0KPiA+ICsgICAgICAg IGV4YW1wbGU6DQo+ID4gKyAgICAgICAgICAgIHZjcHVzX3Bpbm5lZF90b192bSA9ICcxIDIgMyA0 Jw0KPiA+ICsgICAgICAgICAgICB0YXNrc2V0IC1jIDEsMiwzLDQgcWVtdS1ib290LWNvbW1hbmQt bGluZQ0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIHNlbGYudmNwdXNfcGlubmVkX3Rv X3ZtID0gJycNCj4gPiArDQo+ID4gKyAgICAgICAgIyBpbml0aWFsaXplIGFzc2lnbmVkIFBDSQ0K PiA+ICsgICAgICAgIHNlbGYuYXNzaWduZWRfcGNpcyA9IFtdDQo+ID4gKw0KPiA+ICsgICAgZGVm IGdldF92aXJ0X3R5cGUoc2VsZik6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgR2V0 IHRoZSB2aXJ0dWFsIHR5cGUuDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgcmV0dXJu ICdLVk0nDQo+ID4gKw0KPiA+ICsgICAgZGVmIGdldF9xZW11X2VtdWxhdG9yKHNlbGYpOg0KPiA+ ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIEdldCB0aGUgcWVtdSBlbXVsYXRvciBiYXNlZCBv biB0aGUgY3JiLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGFyY2ggPSBzZWxmLmhv c3Rfc2Vzc2lvbi5zZW5kX2V4cGVjdCgndW5hbWUgLW0nLCAnIyAnKQ0KPiA+ICsgICAgICAgIHJl dHVybiAncWVtdS1zeXN0ZW0tJyArIGFyY2gNCj4gPiArDQo+ID4gKyAgICBkZWYgc2V0X3FlbXVf ZW11bGF0b3Ioc2VsZiwgcWVtdV9lbXVsYXRvcik6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAg ICAgICAgU2V0IHRoZSBxZW11IGVtdWxhdG9yIGV4cGxpY2l0bHkuDQo+ID4gKyAgICAgICAgIiIi DQo+ID4gKyAgICAgICAgb3V0ID0gc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9leHBlY3QoDQo+ID4g KyAgICAgICAgICAgICd3aGVyZWlzICVzJyAlIHN0cihxZW11X2VtdWxhdG9yKSwgJ1suKicpDQo+ ID4gKyAgICAgICAgY29tbWFuZF9wYXRocyA9IG91dC5zcGxpdCgnOicpWzE6XQ0KPiA+ICsgICAg ICAgIGlmIGNvbW1hbmRfcGF0aHNbMF0ubHN0cmlwKCk6DQo+ID4gKyAgICAgICAgICAgIHByaW50 ICJObyBlbXVsYXRvciBbICVzIF0gb24gdGhlIERVVCBbICVzIF0iICUgXA0KPiA+ICsgICAgICAg ICAgICAgICAgKHFlbXVfZW11bGF0b3IsIHNlbGYuaG9zdF9kdXQuZ2V0X2lwX2FkZHJlc3MoKSkN Cj4gPiArICAgICAgICAgICAgcmV0dXJuIE5vbmUNCj4gPiArICAgICAgICBzZWxmLnFlbXVfZW11 bGF0b3IgPSBxZW11X2VtdWxhdG9yDQo+ID4gKw0KPiBUaGlzIGZ1bmN0aW9uIG5vdCBjYWxsZWQg YnkgZHRzLiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGZvciBleHBsaWNhdGVkDQo+IHFlbXUgYmluYXJ5 LCB0aGVyZSdzIG5vIG1lYW5pbmdmdWwgdG8gdXNlICJ3aGVyZWlzIiBmaW5kIHFlbXUuDQo+IA0K DQpZZXMsIHlvdSBhcmUgcmlnaHQsIEkgd2lsbCB0cnkgdG8gZmluZCBhbm90aGVyIHRvb2wgdG8g cmVwbGFjZSBpdC4NCg0KPiA+ICsgICAgZGVmIGhhc192aXJ0dWFsX2FiaWxpdHkoc2VsZik6DQo+ ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgQ2hlY2sgaWYgaG9zdCBoYXMgdGhlIHZpcnR1 YWwgYWJpbGl0eS4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBvdXQgPSBzZWxmLmhv c3Rfc2Vzc2lvbi5zZW5kX2V4cGVjdCgnbHNtb2QgfCBncmVwIGt2bScsICcjICcpDQo+ID4gKyAg ICAgICAgaWYgJ2t2bScgaW4gb3V0IGFuZCAna3ZtX2ludGVsJyBpbiBvdXQ6DQo+ID4gKyAgICAg ICAgICAgIHJldHVybiBUcnVlDQo+ID4gKyAgICAgICAgZWxzZToNCj4gPiArICAgICAgICAgICAg cmV0dXJuIEZhbHNlDQo+ID4gKw0KPiANCj4gV2Ugc2hvdWxkIGFsc28gY2hlY2sgd2hldGhlciAi dm14IiBzdXBwb3J0ZWQgaW4gY3B1aW5mby4NCj4gDQoNClJpZ2h0LCBJIGxvc2UgaXQsIEkgd2ls bCBhZGQgaXQgaW4gdGhlIG5leHQgdmVyc2lvbi4NCg0KPiA+ICsgICAgZGVmIGVuYWJsZV92aXJ0 dWFsX2FiaWxpdHkoc2VsZik6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgTG9hZCB0 aGUgdmlydXRhbCBtb2R1bGUgb2Yga2VybmVsIHRvIGVuYWJsZSB0aGUgdmlydXRhbA0KPiBhYmls aXR5Lg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIHNlbGYuaG9zdF9zZXNzaW9uLnNl bmRfZXhwZWN0KCdtb2Rwcm9iZSBrdm0nLCAnIyAnKQ0KPiA+ICsgICAgICAgIHNlbGYuaG9zdF9z ZXNzaW9uLnNlbmRfZXhwZWN0KCdtb2Rwcm9iZSBrdm1faW50ZWwnLCAnIyAnKQ0KPiA+ICsgICAg ICAgIHJldHVybiBUcnVlDQo+ID4gKw0KPiA+ICsgICAgZGVmIGRpc2tfaW1hZ2VfaXNfb2soc2Vs ZiwgaW1hZ2UpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIENoZWNrIGlmIHRoZSBp bWFnZSBpcyBPSyBhbmQgbm8gZXJyb3IuDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAg cGFzcw0KPiA+ICsNCj4gPiArICAgIGRlZiBpbWFnZV9pc191c2VkKHNlbGYsIGltYWdlX3BhdGgp Og0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIENoZWNrIGlmIHRoZSBpbWFnZSBoYXMg YmVlbiB1c2VkIG9uIHRoZSBob3N0Lg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIHFl bXVfY21kX2xpbmVzID0gc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9leHBlY3QoDQo+ID4gKyAgICAg ICAgICAgICJwcyBhdXggfCBncmVwIHFlbXUgfCBncmVwIC12IGdyZXAiLCAiIyAiKQ0KPiA+ICsN Cj4gPiArICAgICAgICBpbWFnZV9uYW1lX2ZsYWcgPSAnLycgKyBpbWFnZV9wYXRoLnN0cmlwKCku c3BsaXQoJy8nKVstMV0gKw0KPiAnICcNCj4gPiArICAgICAgICBpZiBpbWFnZV9wYXRoIGluIHFl bXVfY21kX2xpbmVzIG9yIFwNCj4gPiArICAgICAgICAgICAgICAgIGltYWdlX25hbWVfZmxhZyBp biBxZW11X2NtZF9saW5lczoNCj4gPiArICAgICAgICAgICAgcmV0dXJuIFRydWUNCj4gPiArICAg ICAgICByZXR1cm4gRmFsc2UNCj4gPiArDQo+ID4gKyAgICBkZWYgX19hZGRfYm9vdF9saW5lKHNl bGYsIG9wdGlvbl9ib290X2xpbmUpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIEFk ZCBib290IG9wdGlvbiBpbnRvIHRoZSBib290IGxpbmUuDQo+ID4gKyAgICAgICAgIiIiDQo+ID4g KyAgICAgICAgc2VwYXJhdG9yID0gJyAnDQo+ID4gKyAgICAgICAgc2VsZi53aG9sZV9xZW11X2t2 bV9ib290X2xpbmUgKz0gc2VwYXJhdG9yICsNCj4gb3B0aW9uX2Jvb3RfbGluZQ0KPiA+ICsNCj4g PiArICAgIGRlZiBzZXRfdm1fZW5hYmxlX2t2bShzZWxmLCBlbmFibGU9J3llcycpOg0KPiA+ICsg ICAgICAgICIiIg0KPiA+ICsgICAgICAgIFNldCBWTSBib290IG9wdGlvbiB0byBlbmFibGUgdGhl IG9wdGlvbiAnZW5hYmxlLWt2bScuDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgc2Vs Zi5wYXJhbXMuYXBwZW5kKHsnZW5hYmxlX2t2bSc6IFt7J2VuYWJsZSc6ICclcycgJQ0KPiBlbmFi bGV9XX0pDQo+ID4gKw0KPiA+ICsgICAgZGVmIGFkZF92bV9lbmFibGVfa3ZtKHNlbGYsICoqb3B0 aW9ucyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgJ2VuYWJsZSc6ICd5ZXMnDQo+ ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgaWYgJ2VuYWJsZScgaW4gb3B0aW9ucy5rZXlz KCkgYW5kIFwNCj4gPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ2VuYWJsZSddID09ICd5ZXMn Og0KPiA+ICsgICAgICAgICAgICBlbmFibGVfa3ZtX2Jvb3RfbGluZSA9ICctZW5hYmxlLWt2bScN Cj4gPiArICAgICAgICAgICAgc2VsZi5fX2FkZF9ib290X2xpbmUoZW5hYmxlX2t2bV9ib290X2xp bmUpDQo+ID4gKw0KPiA+ICsgICAgZGVmIHNldF92bV9uYW1lKHNlbGYsIHZtX25hbWUpOg0KPiA+ ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIFNldCBWTSBuYW1lLg0KPiA+ICsgICAgICAgICIi Ig0KPiA+ICsgICAgICAgIHNlbGYucGFyYW1zLmFwcGVuZCh7J25hbWUnOiBbeyduYW1lJzogJyVz JyAlIHZtX25hbWV9XX0pDQo+ID4gKw0KPiA+ICsgICAgZGVmIGFkZF92bV9uYW1lKHNlbGYsICoq b3B0aW9ucyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgbmFtZTogdm0xDQo+ID4g KyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgaWYgJ25hbWUnIGluIG9wdGlvbnMua2V5cygpIGFu ZCBcDQo+ID4gKyAgICAgICAgICAgICAgICBvcHRpb25zWyduYW1lJ106DQo+ID4gKyAgICAgICAg ICAgIG5hbWVfYm9vdF9saW5lID0gJy1uYW1lICVzJyAlIG9wdGlvbnNbJ25hbWUnXQ0KPiA+ICsg ICAgICAgICAgICBzZWxmLl9fYWRkX2Jvb3RfbGluZShuYW1lX2Jvb3RfbGluZSkNCj4gPiArDQo+ ID4gKyAgICBkZWYgYWRkX3ZtX2NwdShzZWxmLCAqKm9wdGlvbnMpOg0KPiA+ICsgICAgICAgICIi Ig0KPiA+ICsgICAgICAgIG1vZGVsOiBbaG9zdCB8IGNvcmUyZHVvIHwgLi4uXQ0KPiA+ICsgICAg ICAgICAgICAgICB1c2FnZToNCj4gPiArICAgICAgICAgICAgICAgICAgICBjaG9vc2UgbW9kZWwg dmFsdWUgZnJvbSB0aGUgY29tbWFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBxZW11 LXN5c3RlbS14ODZfNjQgLWNwdSBoZWxwDQo+ID4gKyAgICAgICAgbnVtYmVyOiAnNCcgI251bWJl ciBvZiB2Y3B1cw0KPiA+ICsgICAgICAgIGNwdXBpbjogJzMgNCA1IDYnICMgaG9zdCBjcHUgbGlz dA0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGlmICdtb2RlbCcgaW4gb3B0aW9ucy5r ZXlzKCkgYW5kIFwNCj4gPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ21vZGVsJ106DQo+ID4g KyAgICAgICAgICAgIGNwdV9ib290X2xpbmUgPSAnLWNwdSAlcycgJSBvcHRpb25zWydtb2RlbCdd DQo+ID4gKyAgICAgICAgICAgIHNlbGYuX19hZGRfYm9vdF9saW5lKGNwdV9ib290X2xpbmUpDQo+ ID4gKyAgICAgICAgaWYgJ251bWJlcicgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwNCj4gPiArICAg ICAgICAgICAgICAgIG9wdGlvbnNbJ251bWJlciddOg0KPiA+ICsgICAgICAgICAgICBzbXBfY21k X2xpbmUgPSAnLXNtcCAlZCcgJSBpbnQob3B0aW9uc1snbnVtYmVyJ10pDQo+ID4gKyAgICAgICAg ICAgIHNlbGYuX19hZGRfYm9vdF9saW5lKHNtcF9jbWRfbGluZSkNCj4gPiArICAgICAgICBpZiAn Y3B1cGluJyBpbiBvcHRpb25zLmtleXMoKSBhbmQgXA0KPiA+ICsgICAgICAgICAgICAgICAgb3B0 aW9uc1snY3B1cGluJ106DQo+ID4gKyAgICAgICAgICAgIHNlbGYudmNwdXNfcGlubmVkX3RvX3Zt ID0gc3RyKG9wdGlvbnNbJ2NwdXBpbiddKQ0KPiA+ICsNCj4gPiArICAgIGRlZiBhZGRfdm1fbWVt KHNlbGYsICoqb3B0aW9ucyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgc2l6ZTog MTAyNA0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGlmICdzaXplJyBpbiBvcHRpb25z LmtleXMoKToNCj4gPiArICAgICAgICAgICAgbWVtX2Jvb3RfbGluZSA9ICctbSAlcycgJSBvcHRp b25zWydzaXplJ10NCj4gPiArICAgICAgICAgICAgc2VsZi5fX2FkZF9ib290X2xpbmUobWVtX2Jv b3RfbGluZSkNCj4gPiArDQo+ID4gKyAgICBkZWYgYWRkX3ZtX2Rpc2soc2VsZiwgKipvcHRpb25z KToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBmaWxlOiAvaG9tZS9pbWFnZS90ZXN0 LmltZw0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGlmICdmaWxlJyBpbiBvcHRpb25z LmtleXMoKToNCj4gPiArICAgICAgICAgICAgZGlza19ib290X2xpbmUgPSAnLWRyaXZlIGZpbGU9 JXMnICUgb3B0aW9uc1snZmlsZSddDQo+ID4gKyAgICAgICAgICAgIHNlbGYuX19hZGRfYm9vdF9s aW5lKGRpc2tfYm9vdF9saW5lKQ0KPiA+ICsNCj4gPiArICAgIGRlZiBhZGRfdm1fbmV0KHNlbGYs ICoqb3B0aW9ucyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgQWRkIFZNIG5ldCBk ZXZpY2UuDQo+ID4gKyAgICAgICAgdHlwZTogW25pYyB8IHVzZXIgfCB0YXAgfCBicmlkZ2UgfCAu Li5dDQo+ID4gKyAgICAgICAgb3B0X1t2bGFuIHwgZmQgfCBiciB8IG1hYyB8IC4uLl0NCj4gPiAr ICAgICAgICAgICAgbm90ZTp0aGUgc3ViLW9wdGlvbiB3aWxsIGJlIGRlY2lkZWQgYWNjb3JkaW5n IHRvIHRoZSBuZXQNCj4gdHlwZS4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBpZiAn dHlwZScgaW4gb3B0aW9ucy5rZXlzKCk6DQo+ID4gKyAgICAgICAgICAgIGlmICdvcHRfdmxhbicg bm90IGluIG9wdGlvbnMua2V5cygpOg0KPiA+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1snb3B0 X3ZsYW4nXSA9ICcwJw0KPiA+ICsgICAgICAgICAgICBpZiBvcHRpb25zWyd0eXBlJ10gPT0gJ25p Yyc6DQo+ID4gKyAgICAgICAgICAgICAgICBzZWxmLl9fYWRkX3ZtX25ldF9uaWMoKipvcHRpb25z KQ0KPiA+ICsgICAgICAgICAgICBpZiBvcHRpb25zWyd0eXBlJ10gPT0gJ3VzZXInOg0KPiA+ICsg ICAgICAgICAgICAgICAgc2VsZi5fX2FkZF92bV9uZXRfdXNlcigqKm9wdGlvbnMpDQo+ID4gKyAg ICAgICAgICAgIGlmIG9wdGlvbnNbJ3R5cGUnXSA9PSAndGFwJzoNCj4gPiArICAgICAgICAgICAg ICAgIHNlbGYuX19hZGRfdm1fbmV0X3RhcCgqKm9wdGlvbnMpDQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICBpZiBvcHRpb25zWyd0eXBlJ10gPT0gJ3VzZXInOg0KPiA+ICsgICAgICAgICAgICAgICAg c2VsZi5uZXRfdHlwZSA9ICdob3N0ZndkJw0KPiA+ICsgICAgICAgICAgICBlbGlmIG9wdGlvbnNb J3R5cGUnXSBpbiBbJ3RhcCcsICdicmlkZ2UnXToNCj4gPiArICAgICAgICAgICAgICAgIHNlbGYu bmV0X3R5cGUgPSAnYnJpZGdlJw0KPiA+ICsNCj4gDQo+IEVsZW1lbnQgIm5ldF90eXBlIiBub3Qg dXNlZCwgd2h5IGFkZCB0aGlzIGhlcmU/DQo+IA0KDQpXaGVuIHRyeWluZyB0byBnZXQgR3Vlc3Qg SVAsIGl0IHdpbGwgYmUgdXNlZC4gDQoNCj4gPiArICAgIGRlZiBfX2FkZF92bV9uZXRfbmljKHNl bGYsICoqb3B0aW9ucyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgdHlwZTogbmlj DQo+ID4gKyAgICAgICAgb3B0X3ZsYW46IDANCj4gPiArICAgICAgICAgICAgbm90ZTogRGVmYXVs dCBpcyAwLg0KPiA+ICsgICAgICAgIG9wdF9tYWNhZGRyOiAwMDowMDowMDowMDowMTowMQ0KPiA+ ICsgICAgICAgICAgICBub3RlOiBpZiBjcmVhdGluZyBhIG5pYywgaXRgcyBiZXR0ZXIgdG8gc3Bl Y2lmeSBhIE1BQywNCj4gPiArICAgICAgICAgICAgICAgICAgZWxzZSBpdCB3aWxsIGdldCBhIHJh bmRvbSBudW1iZXIuDQo+ID4gKyAgICAgICAgb3B0X21vZGVsOlsiZTEwMDAiIHwgInZpcnRpbyIg fCAiaTgyNTUxIiB8IC4uLl0NCj4gPiArICAgICAgICAgICAgbm90ZTogRGVmYXVsdCBpcyBlMTAw MC4NCj4gPiArICAgICAgICBvcHRfbmFtZTogJ25pYzEnDQo+ID4gKyAgICAgICAgb3B0X2FkZHI6 ICcnDQo+ID4gKyAgICAgICAgICAgIG5vdGU6IFBDSSBjYXJkcyBvbmx5Lg0KPiA+ICsgICAgICAg IG9wdF92ZWN0b3JzOg0KPiA+ICsgICAgICAgICAgICBub3RlOiBUaGlzIG9wdGlvbiBjdXJyZW50 bHkgb25seSBhZmZlY3RzIHZpcnRpbyBjYXJkcy4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAg ICAgICBuZXRfYm9vdF9saW5lID0gJy1uZXQgbmljJw0KPiA+ICsgICAgICAgIHNlcGFyYXRvciA9 ICcsJw0KPiA+ICsgICAgICAgIGlmICdvcHRfdmxhbicgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwN Cj4gPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ29wdF92bGFuJ106DQo+ID4gKyAgICAgICAg ICAgIG5ldF9ib290X2xpbmUgKz0gc2VwYXJhdG9yICsgJ3ZsYW49JXMnICUNCj4gb3B0aW9uc1sn b3B0X3ZsYW4nXQ0KPiA+ICsNCj4gPiArICAgICAgICAjIGFkZCBNQUMgaW5mbw0KPiA+ICsgICAg ICAgIGlmICdvcHRfbWFjYWRkcicgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwNCj4gPiArICAgICAg ICAgICAgICAgIG9wdGlvbnNbJ29wdF9tYWNhZGRyJ106DQo+ID4gKyAgICAgICAgICAgIG1hYyA9 IG9wdGlvbnNbJ29wdF9tYWNhZGRyJ10NCj4gPiArICAgICAgICBlbHNlOg0KPiA+ICsgICAgICAg ICAgICBtYWMgPSBzZWxmLmdlbmVyYXRlX3VuaXF1ZV9tYWMoKQ0KPiA+ICsgICAgICAgIG5ldF9i b290X2xpbmUgKz0gc2VwYXJhdG9yICsgJ21hY2FkZHI9JXMnICUgbWFjDQo+ID4gKw0KPiA+ICsg ICAgICAgIGlmICdvcHRfbW9kZWwnIGluIG9wdGlvbnMua2V5cygpIGFuZCBcDQo+ID4gKyAgICAg ICAgICAgICAgICBvcHRpb25zWydvcHRfbW9kZWwnXToNCj4gPiArICAgICAgICAgICAgbmV0X2Jv b3RfbGluZSArPSBzZXBhcmF0b3IgKyAnbW9kZWw9JXMnICUNCj4gb3B0aW9uc1snb3B0X21vZGVs J10NCj4gPiArICAgICAgICBpZiAnb3B0X25hbWUnIGluIG9wdGlvbnMua2V5cygpIGFuZCBcDQo+ ID4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydvcHRfbmFtZSddOg0KPiA+ICsgICAgICAgICAg ICBuZXRfYm9vdF9saW5lICs9IHNlcGFyYXRvciArICduYW1lPSVzJyAlDQo+IG9wdGlvbnNbJ29w dF9uYW1lJ10NCj4gPiArICAgICAgICBpZiAnb3B0X2FkZHInIGluIG9wdGlvbnMua2V5cygpIGFu ZCBcDQo+ID4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydvcHRfYWRkciddOg0KPiA+ICsgICAg ICAgICAgICBuZXRfYm9vdF9saW5lICs9IHNlcGFyYXRvciArICdhZGRyPSVzJyAlDQo+IG9wdGlv bnNbJ29wdF9hZGRyJ10NCj4gPiArICAgICAgICBpZiAnb3B0X3ZlY3RvcnMnIGluIG9wdGlvbnMu a2V5cygpIGFuZCBcDQo+ID4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydvcHRfdmVjdG9ycydd Og0KPiA+ICsgICAgICAgICAgICBuZXRfYm9vdF9saW5lICs9IHNlcGFyYXRvciArICd2ZWN0b3Jz PSVzJyAlDQo+ID4gb3B0aW9uc1snb3B0X3ZlY3RvcnMnXQ0KPiA+ICsNCj4gPiArICAgICAgICBp ZiBzZWxmLl9fc3RyaW5nX2hhc19tdWx0aV9maWVsZHMobmV0X2Jvb3RfbGluZSwgc2VwYXJhdG9y KToNCj4gPiArICAgICAgICAgICAgc2VsZi5fX2FkZF9ib290X2xpbmUobmV0X2Jvb3RfbGluZSkN Cj4gPiArDQo+ID4gKyAgICBkZWYgX19hZGRfdm1fbmV0X3VzZXIoc2VsZiwgKipvcHRpb25zKToN Cj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICB0eXBlOiB1c2VyDQo+ID4gKyAgICAgICAg b3B0X3ZsYW46IDANCj4gPiArICAgICAgICAgICAgbm90ZTogZGVmYXVsdCBpcyAwLg0KPiA+ICsg ICAgICAgIG9wdF9ob3N0ZndkOiBbdGNwfHVkcF06W2hvc3RhZGRyXTpob3N0cG9ydC0NCj4gW2d1 ZXN0YWRkcl06Z3Vlc3Rwb3J0DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgbmV0X2Jv b3RfbGluZSA9ICctbmV0IHVzZXInDQo+ID4gKyAgICAgICAgc2VwYXJhdG9yID0gJywnDQo+ID4g KyAgICAgICAgaWYgJ29wdF92bGFuJyBpbiBvcHRpb25zLmtleXMoKSBhbmQgXA0KPiA+ICsgICAg ICAgICAgICAgICAgb3B0aW9uc1snb3B0X3ZsYW4nXToNCj4gPiArICAgICAgICAgICAgbmV0X2Jv b3RfbGluZSArPSBzZXBhcmF0b3IgKyAndmxhbj0lcycgJQ0KPiBvcHRpb25zWydvcHRfdmxhbidd DQo+ID4gKyAgICAgICAgaWYgJ29wdF9ob3N0ZndkJyBpbiBvcHRpb25zLmtleXMoKSBhbmQgXA0K PiA+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1snb3B0X2hvc3Rmd2QnXToNCj4gPiArICAgICAg ICAgICAgc2VsZi5fX2NoZWNrX25ldF91c2VyX29wdF9ob3N0ZndkKG9wdGlvbnNbJ29wdF9ob3N0 ZndkJ10pDQo+ID4gKyAgICAgICAgICAgIG9wdF9ob3N0ZndkID0gb3B0aW9uc1snb3B0X2hvc3Rm d2QnXQ0KPiA+ICsgICAgICAgIGVsc2U6DQo+ID4gKyAgICAgICAgICAgIG9wdF9ob3N0ZndkID0g Jzo6LTonDQo+ID4gKyAgICAgICAgaG9zdGZ3ZF9saW5lID0gc2VsZi5fX3BhcnNlX25ldF91c2Vy X29wdF9ob3N0ZndkKG9wdF9ob3N0ZndkKQ0KPiA+ICsgICAgICAgIG5ldF9ib290X2xpbmUgKz0g c2VwYXJhdG9yICsgJ2hvc3Rmd2Q9JXMnICUgaG9zdGZ3ZF9saW5lDQo+ID4gKw0KPiA+ICsgICAg ICAgIGlmIHNlbGYuX19zdHJpbmdfaGFzX211bHRpX2ZpZWxkcyhuZXRfYm9vdF9saW5lLCBzZXBh cmF0b3IpOg0KPiA+ICsgICAgICAgICAgICBzZWxmLl9fYWRkX2Jvb3RfbGluZShuZXRfYm9vdF9s aW5lKQ0KPiA+ICsNCj4gPiArICAgIGRlZiBfX2NoZWNrX25ldF91c2VyX29wdF9ob3N0ZndkKHNl bGYsIG9wdF9ob3N0ZndkKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBVc2UgcmVn dWxhciBleHByZXNzaW9uIHRvIGNoZWNrIGlmIGhvc3Rmd2QgdmFsdWUgZm9ybWF0IGlzDQo+ID4g Y29ycmVjdC4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICByZWd4X2lwID0gJ1xkezEs M31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM30nDQo+ID4gKyAgICAgICAgcmVneF9ob3N0Zndk ID0gcidbInRjcCIgfCAidWRwIl0/OiVzPzpcZCstJXM/OlxkKycgJQ0KPiAocmVneF9pcCwNCj4g PiByZWd4X2lwKQ0KPiA+ICsgICAgICAgIGlmIG5vdCByZS5tYXRjaChyZWd4X2hvc3Rmd2QsIG9w dF9ob3N0ZndkKToNCj4gPiArICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJPcHRpb24gb3B0 X2hvc3Rmd2QgZm9ybWF0IGlzIG5vdA0KPiBjb3JyZWN0LFxuIg0KPiA+ICsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJpdCBpcyAlcyxcbiAiICUgb3B0X2hvc3Rmd2QgKw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIml0IHNob3VsZCBiZQ0KPiBbdGNwfHVkcF06 W2hvc3RhZGRyXTpob3N0cG9ydC0iDQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIltndWVzdGFkZHJdOmd1ZXN0cG9ydC5cbiIpDQo+ID4gKw0KPiA+ICsgICAgZGVmIF9f cGFyc2VfbmV0X3VzZXJfb3B0X2hvc3Rmd2Qoc2VsZiwgb3B0X2hvc3Rmd2QpOg0KPiA+ICsgICAg ICAgICIiIg0KPiA+ICsgICAgICAgIFBhcnNlIHRoZSBib290IG9wdGlvbiAnaG9zdGZ3ZCcuDQo+ ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgc2VwYXJhdG9yID0gJzonDQo+ID4gKyAgICAg ICAgZmllbGQgPSBsYW1iZGEgb3B0aW9uLCBpbmRleCwgc2VwYXJhdG9yPSc6JzogXA0KPiA+ICsg ICAgICAgICAgICBvcHRpb24uc3BsaXQoc2VwYXJhdG9yKVtpbmRleF0NCj4gPiArDQo+ID4gKyAg ICAgICAgIyBnZXQgdGhlIGZvcndvcmQgdHlwZQ0KPiA+ICsgICAgICAgIGZ3ZF90eXBlID0gZmll bGQob3B0X2hvc3Rmd2QsIDApDQo+ID4gKyAgICAgICAgaWYgbm90IGZ3ZF90eXBlOg0KPiA+ICsg ICAgICAgICAgICBmd2RfdHlwZSA9ICd0Y3AnDQo+ID4gKw0KPiA+ICsgICAgICAgICMgZ2V0IHRo ZSBob3N0IGFkZHINCj4gPiArICAgICAgICBob3N0X2FkZHIgPSBmaWVsZChvcHRfaG9zdGZ3ZCwg MSkNCj4gPiArICAgICAgICBpZiBub3QgaG9zdF9hZGRyOg0KPiA+ICsgICAgICAgICAgICBob3N0 X2FkZHIgPSBzdHIoc2VsZi5ob3N0X2R1dC5nZXRfaXBfYWRkcmVzcygpKQ0KPiA+ICsNCj4gPiAr ICAgICAgICAjIGdldCB0aGUgaG9zdCBwb3J0IGluIHRoZSBvcHRpb24NCj4gPiArICAgICAgICBo b3N0X3BvcnQgPSBmaWVsZChvcHRfaG9zdGZ3ZCwgMikuc3BsaXQoJy0nKVswXQ0KPiA+ICsgICAg ICAgIGlmIG5vdCBob3N0X3BvcnQ6DQo+ID4gKyAgICAgICAgICAgIGhvc3RfcG9ydCA9IHN0cihz ZWxmLnZpcnRfcG9vbC5hbGxvY19wb3J0KHNlbGYudm1fbmFtZSkpDQo+ID4gKyAgICAgICAgc2Vs Zi5yZWRpcl9wb3J0ID0gaG9zdF9wb3J0DQo+ID4gKw0KPiA+ICsgICAgICAgICMgZ2V0IHRoZSBn dWVzdCBhZGRyDQo+ID4gKyAgICAgICAgdHJ5Og0KPiA+ICsgICAgICAgICAgICBndWVzdF9hZGRy ID0gc3RyKGZpZWxkKG9wdF9ob3N0ZndkLCAyKS5zcGxpdCgnLScpWzFdKQ0KPiA+ICsgICAgICAg IGV4Y2VwdCBJbmRleEVycm9yIGFzIGU6DQo+ID4gKyAgICAgICAgICAgIGd1ZXN0X2FkZHIgPSAn Jw0KPiA+ICsNCj4gPiArICAgICAgICAjIGdldCB0aGUgZ3Vlc3QgcG9ydCBpbiB0aGUgb3B0aW9u DQo+ID4gKyAgICAgICAgZ3Vlc3RfcG9ydCA9IHN0cihmaWVsZChvcHRfaG9zdGZ3ZCwgMykpDQo+ ID4gKyAgICAgICAgaWYgbm90IGd1ZXN0X3BvcnQ6DQo+ID4gKyAgICAgICAgICAgIGd1ZXN0X3Bv cnQgPSAnMjInDQo+ID4gKw0KPiA+ICsgICAgICAgIGhvc3Rmd2RfbGluZSA9IGZ3ZF90eXBlICsg c2VwYXJhdG9yICsgXA0KPiA+ICsgICAgICAgICAgICBob3N0X2FkZHIgKyBzZXBhcmF0b3IgKyBc DQo+ID4gKyAgICAgICAgICAgIGhvc3RfcG9ydCArIFwNCj4gPiArICAgICAgICAgICAgJy0nICsg XA0KPiA+ICsgICAgICAgICAgICBndWVzdF9hZGRyICsgc2VwYXJhdG9yICsgXA0KPiA+ICsgICAg ICAgICAgICBndWVzdF9wb3J0DQo+ID4gKw0KPiA+ICsgICAgICAgICMgaW5pdCB0aGUgcmVkaXJl Y3QgaW5jb21pbmcgVENQIG9yIFVEUCBjb25uZWN0aW9ucw0KPiA+ICsgICAgICAgICMganVzdCBj b21iaW5lIGhvc3QgYWRkcmVzcyBhbmQgaG9zdCBwb3J0LCBpdCBpcyBlbm91Z2gNCj4gPiArICAg ICAgICAjIGZvciB1c2luZyBzc2ggdG8gY29ubmVjdCB3aXRoIFZNDQo+ID4gKyAgICAgICAgc2Vs Zi5ob3N0ZndkX2FkZHIgPSBob3N0X2FkZHIgKyBzZXBhcmF0b3IgKyBob3N0X3BvcnQNCj4gPiAr DQo+ID4gKyAgICAgICAgcmV0dXJuIGhvc3Rmd2RfbGluZQ0KPiA+ICsNCj4gPiArICAgIGRlZiBf X2FkZF92bV9uZXRfdGFwKHNlbGYsICoqb3B0aW9ucyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4g KyAgICAgICAgdHlwZTogdGFwDQo+ID4gKyAgICAgICAgb3B0X3ZsYW46IDANCj4gPiArICAgICAg ICAgICAgbm90ZTogZGVmYXVsdCBpcyAwLg0KPiA+ICsgICAgICAgIG9wdF9icjogYnIwDQo+ID4g KyAgICAgICAgICAgIG5vdGU6IGlmIGNob29zaW5nIHRhcCwgbmVlZCB0byBzcGVjaWZ5IGJyaWRn ZSBuYW1lLA0KPiA+ICsgICAgICAgICAgICAgICAgICBlbHNlIGl0IHdpbGwgYmUgYnIwLg0KPiA+ ICsgICAgICAgIG9wdF9zY3JpcHQ6IFFFTVVfSUZVUF9QQVRIDQo+ID4gKyAgICAgICAgICAgIG5v dGU6IGlmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHQgaXMgc2VsZi5RRU1VX0lGVVBfUEFUSC4NCj4g PiArICAgICAgICBvcHRfZG93bnNjcmlwdDogUUVNVV9JRkRPV05fUEFUSA0KPiA+ICsgICAgICAg ICAgICBub3RlOiBpZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0IGlzIHNlbGYuUUVNVV9JRkRPV05f UEFUSC4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBuZXRfYm9vdF9saW5lID0gJy1u ZXQgdGFwJw0KPiA+ICsgICAgICAgIHNlcGFyYXRvciA9ICcsJw0KPiA+ICsNCj4gPiArICAgICAg ICAjIGFkZCBicmlkZ2UgaW5mbw0KPiA+ICsgICAgICAgIGlmICdvcHRfYnInIGluIG9wdGlvbnMu a2V5cygpIGFuZCBcDQo+ID4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydvcHRfYnInXToNCj4g PiArICAgICAgICAgICAgYnJpZGdlID0gb3B0aW9uc1snb3B0X2JyJ10NCj4gPiArICAgICAgICBl bHNlOg0KPiA+ICsgICAgICAgICAgICBicmlkZ2UgPSBzZWxmLkRFRkFVTFRfQlJJREdFDQo+ID4g KyAgICAgICAgc2VsZi5fX2dlbmVyYXRlX25ldF9jb25maWdfc2NyaXB0KHN0cihicmlkZ2UpKQ0K PiA+ICsNCj4gPiArICAgICAgICBpZiAnb3B0X3ZsYW4nIGluIG9wdGlvbnMua2V5cygpIGFuZCBc DQo+ID4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydvcHRfdmxhbiddOg0KPiA+ICsgICAgICAg ICAgICBuZXRfYm9vdF9saW5lICs9IHNlcGFyYXRvciArICd2bGFuPSVzJyAlDQo+IG9wdGlvbnNb J29wdF92bGFuJ10NCj4gPiArDQo+ID4gKyAgICAgICAgIyBhZGQgbmV0d29yayBjb25maWd1cmUg c2NyaXB0IHBhdGgNCj4gPiArICAgICAgICBpZiAnb3B0X3NjcmlwdCcgaW4gb3B0aW9ucy5rZXlz KCkgYW5kIFwNCj4gPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ29wdF9zY3JpcHQnXToNCj4g PiArICAgICAgICAgICAgc2NyaXB0X3BhdGggPSBvcHRpb25zWydvcHRfc2NyaXB0J10NCj4gPiAr ICAgICAgICBlbHNlOg0KPiA+ICsgICAgICAgICAgICBzY3JpcHRfcGF0aCA9IHNlbGYuUUVNVV9J RlVQX1BBVEgNCj4gPiArICAgICAgICBuZXRfYm9vdF9saW5lICs9IHNlcGFyYXRvciArICdzY3Jp cHQ9JXMnICUgc2NyaXB0X3BhdGgNCj4gPiArDQo+ID4gKyAgICAgICAgIyBhZGQgbmV0d29yayBj b25maWd1cmUgZG93bnNjcmlwdCBwYXRoDQo+ID4gKyAgICAgICAgaWYgJ29wdF9kb3duc2NyaXB0 JyBpbiBvcHRpb25zLmtleXMoKSBhbmQgXA0KPiA+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1sn b3B0X2Rvd25zY3JpcHQnXToNCj4gPiArICAgICAgICAgICAgbmV0X2Jvb3RfbGluZSArPSBzZXBh cmF0b3IgKyBcDQo+ID4gKyAgICAgICAgICAgICAgICAnZG93bnNjcmlwdD0lcycgJSBvcHRpb25z WydvcHRfZG93bnNjcmlwdCddDQo+ID4gKw0KPiA+ICsgICAgICAgIGlmIHNlbGYuX19zdHJpbmdf aGFzX211bHRpX2ZpZWxkcyhuZXRfYm9vdF9saW5lLCBzZXBhcmF0b3IpOg0KPiA+ICsgICAgICAg ICAgICBzZWxmLl9fYWRkX2Jvb3RfbGluZShuZXRfYm9vdF9saW5lKQ0KPiA+ICsNCj4gPiArICAg IGRlZiBfX2dlbmVyYXRlX25ldF9jb25maWdfc2NyaXB0KHNlbGYsIHN3aXRjaD1ERUZBVUxUX0JS SURHRSk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgR2VuZXJhdGUgYSBzY3JpcHQg Zm9yIHFlbXUgZW11bGF0b3IgdG8gYnVpbGQgYSB0YXAgZGV2aWNlDQo+ID4gKyAgICAgICAgYmV0 d2VlbiBob3N0IGFuZCBndWVzdC4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBxZW11 X2lmdXAgPSBzZWxmLlFFTVVfSUZVUCAlIHsnc3dpdGNoJzogc3dpdGNofQ0KPiA+ICsgICAgICAg IGZpbGVfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5RRU1VX0lGVVBfUEFUSCkNCj4gPiAr ICAgICAgICB0bXBfZmlsZV9wYXRoID0gJy90bXAvJXMnICUgZmlsZV9uYW1lDQo+ID4gKyAgICAg ICAgc2VsZi5ob3N0X2R1dC5jcmVhdGVfZmlsZShxZW11X2lmdXAsIHRtcF9maWxlX3BhdGgpDQo+ ID4gKyAgICAgICAgc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9leHBlY3QoJ212IC1mIH4vJXMgJXMn ICUgKGZpbGVfbmFtZSwNCj4gPiArDQo+ID4gc2VsZi5RRU1VX0lGVVBfUEFUSCksICcjICcpDQo+ ID4gKyAgICAgICAgc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9leHBlY3QoDQo+ID4gKyAgICAgICAg ICAgICdjaG1vZCAreCAlcycgJSBzZWxmLlFFTVVfSUZVUF9QQVRILCAnIyAnKQ0KPiA+ICsNCj4g PiArICAgIGRlZiBzZXRfdm1fZGV2aWNlKHNlbGYsIGRyaXZlcj0ncGNpLWFzc2lnbicsICoqcHJv cHMpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIFNldCBWTSBkZXZpY2Ugd2l0aCBz cGVjaWZpZWQgZHJpdmVyLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIHByb3BzWydk cml2ZXInXSA9IGRyaXZlcg0KPiA+ICsgICAgICAgIGluZGV4ID0gc2VsZi5maW5kX29wdGlvbl9p bmRleCgnZGV2aWNlJykNCj4gPiArICAgICAgICBpZiBpbmRleDoNCj4gPiArICAgICAgICAgICAg c2VsZi5wYXJhbXNbaW5kZXhdWydkZXZpY2UnXS5hcHBlbmQocHJvcHMpDQo+ID4gKyAgICAgICAg ZWxzZToNCj4gPiArICAgICAgICAgICAgc2VsZi5wYXJhbXMuYXBwZW5kKHsnZGV2aWNlJzogW3By b3BzXX0pDQo+ID4gKw0KPiA+ICsgICAgZGVmIGFkZF92bV9kZXZpY2Uoc2VsZiwgKipvcHRpb25z KToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBkcml2ZXI6IFtwY2ktYXNzaWduIHwg dmlydGlvLW5ldC1wY2kgfCAuLi5dDQo+ID4gKyAgICAgICAgcHJvcF9baG9zdCB8IGFkZHIgfCAu Li5dOiB2YWx1ZQ0KPiA+ICsgICAgICAgICAgICBub3RlOnRoZSBzdWItcHJvcGVydHkgd2lsbCBi ZSBkZWNpZGVkIGFjY29yZGluZyB0byB0aGUNCj4gZHJpdmVyLg0KPiA+ICsgICAgICAgICIiIg0K PiA+ICsgICAgICAgIGlmICdkcml2ZXInIGluIG9wdGlvbnMua2V5cygpIGFuZCBcDQo+ID4gKyAg ICAgICAgICAgICAgICBvcHRpb25zWydkcml2ZXInXToNCj4gPiArICAgICAgICAgICAgaWYgb3B0 aW9uc1snZHJpdmVyJ10gPT0gJ3BjaS1hc3NpZ24nOg0KPiA+ICsgICAgICAgICAgICAgICAgc2Vs Zi5fX2FkZF92bV9wY2lfYXNzaWduKCoqb3B0aW9ucykNCj4gPiArICAgICAgICAgICAgZWxpZiBv cHRpb25zWydkcml2ZXInXSA9PSAndmlydGlvLW5ldC1wY2knOg0KPiA+ICsgICAgICAgICAgICAg ICAgc2VsZi5fX2FkZF92bV92aXJ0aW9fbmV0X3BjaSgqKm9wdGlvbnMpDQo+ID4gKw0KPiA+ICsg ICAgZGVmIF9fYWRkX3ZtX3BjaV9hc3NpZ24oc2VsZiwgKipvcHRpb25zKToNCj4gPiArICAgICAg ICAiIiINCj4gPiArICAgICAgICBkcml2ZXI6IHBjaS1hc3NpZ24NCj4gPiArICAgICAgICBwcm9w X2hvc3Q6IDA4OjAwLjANCj4gPiArICAgICAgICBwcm9wX2FkZHI6IDAwOjAwOjAwOjAwOjAxOjAy DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgZGV2X2Jvb3RfbGluZSA9ICctZGV2aWNl IHBjaS1hc3NpZ24nDQo+ID4gKyAgICAgICAgc2VwYXJhdG9yID0gJywnDQo+ID4gKyAgICAgICAg aWYgJ3Byb3BfaG9zdCcgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwNCj4gPiArICAgICAgICAgICAg ICAgIG9wdGlvbnNbJ3Byb3BfaG9zdCddOg0KPiA+ICsgICAgICAgICAgICBkZXZfYm9vdF9saW5l ICs9IHNlcGFyYXRvciArICdob3N0PSVzJyAlDQo+IG9wdGlvbnNbJ3Byb3BfaG9zdCddDQo+ID4g KyAgICAgICAgaWYgJ3Byb3BfYWRkcicgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwNCj4gPiArICAg ICAgICAgICAgICAgIG9wdGlvbnNbJ3Byb3BfYWRkciddOg0KPiA+ICsgICAgICAgICAgICBkZXZf Ym9vdF9saW5lICs9IHNlcGFyYXRvciArICdhZGRyPSVzJyAlDQo+IG9wdGlvbnNbJ3Byb3BfYWRk ciddDQo+ID4gKyAgICAgICAgICAgIHNlbGYuYXNzaWduZWRfcGNpcy5hcHBlbmQob3B0aW9uc1sn cHJvcF9hZGRyJ10pDQo+ID4gKw0KPiA+ICsgICAgICAgIGlmIHNlbGYuX19zdHJpbmdfaGFzX211 bHRpX2ZpZWxkcyhkZXZfYm9vdF9saW5lLCBzZXBhcmF0b3IpOg0KPiA+ICsgICAgICAgICAgICBz ZWxmLl9fYWRkX2Jvb3RfbGluZShkZXZfYm9vdF9saW5lKQ0KPiA+ICsNCj4gPiArICAgIGRlZiBf X2FkZF92bV92aXJ0aW9fbmV0X3BjaShzZWxmLCAqKm9wdGlvbnMpOg0KPiA+ICsgICAgICAgICIi Ig0KPiA+ICsgICAgICAgIGRyaXZlcjogdmlydGlvLW5ldC1wY2kNCj4gPiArICAgICAgICBwcm9w X25ldGRldjogbXluZXQxDQo+ID4gKyAgICAgICAgcHJvcF9pZDogbmV0MQ0KPiA+ICsgICAgICAg IHByb3BfbWFjOiAwMDowMDowMDowMDowMTowMw0KPiA+ICsgICAgICAgIHByb3BfYnVzOiBwY2ku MA0KPiA+ICsgICAgICAgIHByb3BfYWRkcjogMHgzDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAg ICAgICAgZGV2X2Jvb3RfbGluZSA9ICctZGV2aWNlIHZpcnRpby1uZXQtcGNpJw0KPiA+ICsgICAg ICAgIHNlcGFyYXRvciA9ICcsJw0KPiA+ICsgICAgICAgIGlmICdwcm9wX25ldGRldicgaW4gb3B0 aW9ucy5rZXlzKCkgYW5kIFwNCj4gPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ3Byb3BfbmV0 ZGV2J106DQo+ID4gKyAgICAgICAgICAgIGRldl9ib290X2xpbmUgKz0gc2VwYXJhdG9yICsgJ25l dGRldj0lcycgJQ0KPiA+IG9wdGlvbnNbJ3Byb3BfbmV0ZGV2J10NCj4gPiArICAgICAgICBpZiAn cHJvcF9pZCcgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwNCj4gPiArICAgICAgICAgICAgICAgIG9w dGlvbnNbJ3Byb3BfaWQnXToNCj4gPiArICAgICAgICAgICAgZGV2X2Jvb3RfbGluZSArPSBzZXBh cmF0b3IgKyAnaWQ9JXMnICUgb3B0aW9uc1sncHJvcF9pZCddDQo+ID4gKyAgICAgICAgaWYgJ3By b3BfbWFjJyBpbiBvcHRpb25zLmtleXMoKSBhbmQgXA0KPiA+ICsgICAgICAgICAgICAgICAgb3B0 aW9uc1sncHJvcF9tYWMnXToNCj4gPiArICAgICAgICAgICAgZGV2X2Jvb3RfbGluZSArPSBzZXBh cmF0b3IgKyAnbWFjPSVzJyAlDQo+IG9wdGlvbnNbJ3Byb3BfbWFjJ10NCj4gPiArICAgICAgICBp ZiAncHJvcF9idXMnIGluIG9wdGlvbnMua2V5cygpIGFuZCBcDQo+ID4gKyAgICAgICAgICAgICAg ICBvcHRpb25zWydwcm9wX2J1cyddOg0KPiA+ICsgICAgICAgICAgICBkZXZfYm9vdF9saW5lICs9 IHNlcGFyYXRvciArICdidXM9JXMnICUNCj4gb3B0aW9uc1sncHJvcF9idXMnXQ0KPiA+ICsgICAg ICAgIGlmICdwcm9wX2FkZHInIGluIG9wdGlvbnMua2V5cygpIGFuZCBcDQo+ID4gKyAgICAgICAg ICAgICAgICBvcHRpb25zWydwcm9wX2FkZHInXToNCj4gPiArICAgICAgICAgICAgZGV2X2Jvb3Rf bGluZSArPSBzZXBhcmF0b3IgKyAnYWRkcj0lcycgJQ0KPiBvcHRpb25zWydwcm9wX2FkZHInXQ0K PiA+ICsNCj4gPiArICAgICAgICBpZiBzZWxmLl9fc3RyaW5nX2hhc19tdWx0aV9maWVsZHMoc2Vs Ziwgc3RyaW5nLCBzZXBhcmF0b3IpOg0KPiA+ICsgICAgICAgICAgICBzZWxmLl9fYWRkX2Jvb3Rf bGluZShkZXZfYm9vdF9saW5lKQ0KPiA+ICsNCj4gDQo+IFdoYXQncyB0aGUgbmVlZCAgdG8gY2hl Y2sgbXVsdGlfZmllbGRzPyBJcyBpdCBlbm91Z2ggdG8gY2hlY2sgd2hldGhlcg0KPiBjb25maWd1 cmF0aW9uIGF2YWlsYWJsZT8NCj4gDQoNCkZpcnN0LCB0aGlzIGZ1bmN0aW9uIGdldHMgZXJyb3Ig cGFyYW1zLCB0aGlzIGlzc3VlIGlzIG5vdCB0ZXN0ZWQsIHRoZSBwYXJhbXMgc2hvdWxkDQoJYmUg J2Rldl9ib290X2xpbmUnIGFuZCAnc2VwYXJhdG9yJy4NCg0KU2Vjb25kLCBiZWNhdXNlICdkZXZf Ym9vdF9saW5lJyBpcyBpbml0aWFsaXplZCB3aXRoICctZGV2aWNlIHZpcnRpby1uZXQtcGNpJywg YW5kIHRoZQ0KCXNlcGFyYXRvciBpcyAnLCcsIHRob3VnaCB0aGVyZSBpcyBub3QgYW4gb3B0aW9u LCB0aGUgJ2Rldl9ib290X2xpbmUnIGlzIG5vdCBOVUxMLA0KCWlmIHRoZXJlIGlzIG5vIGp1ZGdt ZW50IHRvIHRoZSBwYXJhbSwgd2UgZG9uYHQga25vdyBpZiB0aGVyZSBpcyBhIGRlZmluaXRpb24g b2YgDQoJdmlydGlvIGRldmljZSBpbiB0aGUgY29uZmlndXJhdGlvbi4NCg0KPiA+ICsgICAgZGVm IF9fc3RyaW5nX2hhc19tdWx0aV9maWVsZHMoc2VsZiwgc3RyaW5nLCBzZXBhcmF0b3IsDQo+IGZp ZWxkX251bT0yKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBDaGVjayBpZiBzdHJp bmcgaGFzIG11bHRpcGxlIGZpZWxkcyB3aGljaCBpcyBzcGxpdGVkIHdpdGgNCj4gPiArICAgICAg ICBzcGVjaWZpZWQgc2VwYXJhdG9yLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGZp ZWxkcyA9IHN0cmluZy5zcGxpdChzZXBhcmF0b3IpDQo+ID4gKyAgICAgICAgbnVtYmVyID0gMA0K PiA+ICsgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6DQo+ID4gKyAgICAgICAgICAgIGlmIGZp ZWxkOg0KPiA+ICsgICAgICAgICAgICAgICAgbnVtYmVyICs9IDENCj4gPiArICAgICAgICBpZiBu dW1iZXIgPj0gZmllbGRfbnVtOg0KPiA+ICsgICAgICAgICAgICByZXR1cm4gVHJ1ZQ0KPiA+ICsg ICAgICAgIGVsc2U6DQo+ID4gKyAgICAgICAgICAgIHJldHVybiBGYWxzZQ0KPiA+ICsNCj4gPiAr ICAgIGRlZiBhZGRfdm1fbW9uaXRvcihzZWxmLCAqKm9wdGlvbnMpOg0KPiA+ICsgICAgICAgICIi Ig0KPiA+ICsgICAgICAgIHBvcnQ6IDYwNjEgICAjIGlmIGFkZGluZyBtb25pdG9yIHRvIHZtLCBu ZWVkIHRvIHNwZWNpY3kNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHBvcnQsIGVs c2UgaXQgd2lsbCBnZXQgYSBmcmVlIHBvcnQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBv biB0aGUgaG9zdCBtYWNoaW5lLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGlmICdw b3J0JyBpbiBvcHRpb25zLmtleXMoKToNCj4gPiArICAgICAgICAgICAgaWYgb3B0aW9uc1sncG9y dCddOg0KPiA+ICsgICAgICAgICAgICAgICAgcG9ydCA9IG9wdGlvbnNbJ3BvcnQnXQ0KPiA+ICsg ICAgICAgICAgICBlbHNlOg0KPiA+ICsgICAgICAgICAgICAgICAgcG9ydCA9IHNlbGYudmlydF9w b29sLmFsbG9jX3BvcnQoc2VsZi52bV9uYW1lKQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgbW9u aXRvcl9ib290X2xpbmUgPSAnLW1vbml0b3IgdGNwOjolZCxzZXJ2ZXIsbm93YWl0JyAlDQo+ID4g aW50KHBvcnQpDQo+ID4gKyAgICAgICAgICAgIHNlbGYuX19hZGRfYm9vdF9saW5lKG1vbml0b3Jf Ym9vdF9saW5lKQ0KPiA+ICsNCj4gPiArICAgIGRlZiBzZXRfdm1fcWdhKHNlbGYsIGVuYWJsZT0n eWVzJyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgU2V0IFZNIHFlbXUtZ3Vlc3Qt YWdlbnQuDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgaW5kZXggPSBzZWxmLmZpbmRf b3B0aW9uX2luZGV4KCdxZ2EnKQ0KPiA+ICsgICAgICAgIGlmIGluZGV4Og0KPiA+ICsgICAgICAg ICAgICBzZWxmLnBhcmFtc1tpbmRleF0gPSB7J3FnYSc6IFt7J2VuYWJsZSc6ICclcycgJSBlbmFi bGV9XX0NCj4gPiArICAgICAgICBlbHNlOg0KPiA+ICsgICAgICAgICAgICBzZWxmLnBhcmFtcy5h cHBlbmQoeydxZ2EnOiBbeydlbmFibGUnOiAnJXMnICUgZW5hYmxlfV19KQ0KPiA+ICsgICAgICAg IFFHQV9TT0NLX1BBVEggPSBRR0FfU09DS19QQVRIX1RFTVBMQVRFICUgeyd2bV9uYW1lJzoNCj4g c2VsZi52bV9uYW1lfQ0KPiA+ICsgICAgICAgIHNlbGYucWdhX3NvY2tfcGF0aCA9IFFHQV9TT0NL X1BBVEgNCj4gPiArDQo+ID4gKyAgICBkZWYgYWRkX3ZtX3FnYShzZWxmLCAqKm9wdGlvbnMpOg0K PiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGVuYWJsZTogJ3llcycNCj4gPiArICAgICAg ICAiIiINCj4gPiArICAgICAgICBRR0FfREVWX0lEID0gJyUodm1fbmFtZSlzX3FnYTAnICUgeyd2 bV9uYW1lJzogc2VsZi52bV9uYW1lfQ0KPiA+ICsgICAgICAgIFFHQV9TT0NLX1BBVEggPSBRR0Ff U09DS19QQVRIX1RFTVBMQVRFICUgeyd2bV9uYW1lJzoNCj4gc2VsZi52bV9uYW1lfQ0KPiA+ICsN Cj4gPiArICAgICAgICBzZXBhcmF0b3IgPSAnICcNCj4gPiArDQo+ID4gKyAgICAgICAgaWYgJ2Vu YWJsZScgaW4gb3B0aW9ucy5rZXlzKCk6DQo+ID4gKyAgICAgICAgICAgIGlmIG9wdGlvbnNbJ2Vu YWJsZSddID09ICd5ZXMnOg0KPiA+ICsgICAgICAgICAgICAgICAgcWdhX2Jvb3RfYmxvY2sgPSAn LWNoYXJkZXYNCj4gPiBzb2NrZXQscGF0aD0lKFNPQ0tfUEFUSClzLHNlcnZlcixub3dhaXQsaWQ9 JShJRClzJyArIFwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJh dG9yICsgJy1kZXZpY2UgdmlydGlvLXNlcmlhbCcNCj4gKw0KPiA+IHNlcGFyYXRvciArIFwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1kZXZpY2UNCj4gPiB2aXJ0c2Vy aWFscG9ydCxjaGFyZGV2PSUoSUQpcyxuYW1lPSUoREVWX05BTUUpcycNCj4gPiArICAgICAgICAg ICAgICAgIHFnYV9ib290X2xpbmUgPSBxZ2FfYm9vdF9ibG9jayAlIHsnU09DS19QQVRIJzoNCj4g PiBRR0FfU09DS19QQVRILA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdERVZfTkFNRSc6DQo+ID4gUUdBX0RFVl9OQU1FLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJRCc6IFFHQV9E RVZfSUR9DQo+ID4gKyAgICAgICAgICAgICAgICBzZWxmLl9fYWRkX2Jvb3RfbGluZShxZ2FfYm9v dF9saW5lKQ0KPiA+ICsgICAgICAgICAgICAgICAgc2VsZi5xZ2Ffc29ja19wYXRoID0gUUdBX1NP Q0tfUEFUSA0KPiA+ICsgICAgICAgICAgICBlbHNlOg0KPiA+ICsgICAgICAgICAgICAgICAgc2Vs Zi5xZ2Ffc29ja19wYXRoID0gJycNCj4gPiArDQo+ID4gKyAgICBkZWYgYWRkX3ZtX3NlcmlhbF9w b3J0KHNlbGYsICoqb3B0aW9ucyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgZW5h YmxlOiAneWVzJw0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIFNFUkFJTF9TT0NLX1BB VEggPSAiL3RtcC8lc19zZXJpYWwuc29jayIgJSBzZWxmLnZtX25hbWUNCj4gPiArICAgICAgICBp ZiAnZW5hYmxlJyBpbiBvcHRpb25zLmtleXMoKToNCj4gPiArICAgICAgICAgICAgaWYgb3B0aW9u c1snZW5hYmxlJ10gPT0gJ3llcyc6DQo+ID4gKyAgICAgICAgICAgICAgICBzZXJpYWxfYm9vdF9s aW5lID0gJy1zZXJpYWwgdW5peDolcyxzZXJ2ZXIsbm93YWl0JyAlDQo+ID4gU0VSSUFMX1NPQ0tf UEFUSA0KPiA+ICsgICAgICAgICAgICAgICAgc2VsZi5fX2FkZF9ib290X2xpbmUoc2VyaWFsX2Jv b3RfbGluZSkNCj4gPiArICAgICAgICAgICAgZWxzZToNCj4gPiArICAgICAgICAgICAgICAgIHBh c3MNCj4gPiArDQo+ID4gKyAgICBkZWYgYWRkX3ZtX3ZuYyhzZWxmLCAqKm9wdGlvbnMpOg0KPiA+ ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGRpc3BsYXlOdW06IDENCj4gPiArICAgICAgICAi IiINCj4gPiArICAgICAgICBpZiAnZGlzcGxheU51bScgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwN Cj4gPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ2Rpc3BsYXlOdW0nXToNCj4gPiArICAgICAg ICAgICAgZGlzcGxheV9udW0gPSBvcHRpb25zWydkaXNwbGF5TnVtJ10NCj4gPiArICAgICAgICBl bHNlOg0KPiA+ICsgICAgICAgICAgICBkaXNwbGF5X251bSA9IHNlbGYudmlydF9wb29sLmFsbG9j X3ZuY19udW0oc2VsZi52bV9uYW1lKQ0KPiA+ICsNCj4gPiArICAgICAgICB2bmNfYm9vdF9saW5l ID0gJy12bmMgOiVkJyAlIGludChkaXNwbGF5X251bSkNCj4gPiArICAgICAgICBzZWxmLl9fYWRk X2Jvb3RfbGluZSh2bmNfYm9vdF9saW5lKQ0KPiA+ICsNCj4gPiArICAgIGRlZiBzZXRfdm1fZGFl bW9uKHNlbGYsIGVuYWJsZT0neWVzJyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAg U2V0IFZNIGRhZW1vbiBvcHRpb24uDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgaW5k ZXggPSBzZWxmLmZpbmRfb3B0aW9uX2luZGV4KCdkYWVtb24nKQ0KPiA+ICsgICAgICAgIGlmIGlu ZGV4Og0KPiA+ICsgICAgICAgICAgICBzZWxmLnBhcmFtc1tpbmRleF0gPSB7J2RhZW1vbic6IFt7 J2VuYWJsZSc6ICclcycgJQ0KPiBlbmFibGV9XX0NCj4gPiArICAgICAgICBlbHNlOg0KPiA+ICsg ICAgICAgICAgICBzZWxmLnBhcmFtcy5hcHBlbmQoeydkYWVtb24nOiBbeydlbmFibGUnOiAnJXMn ICUNCj4gZW5hYmxlfV19KQ0KPiA+ICsNCj4gPiArICAgIGRlZiBhZGRfdm1fZGFlbW9uKHNlbGYs ICoqb3B0aW9ucyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgZW5hYmxlOiAneWVz Jw0KPiA+ICsgICAgICAgICAgICBub3RlOg0KPiA+ICsgICAgICAgICAgICAgICAgQnkgZGVmYXVs dCBWTSB3aWxsIHN0YXJ0IHdpdGggdGhlIGRhZW1vbml6ZSBzdGF0dXMuDQo+ID4gKyAgICAgICAg ICAgICAgICBOb3Qgc3VwcG9ydCBzdGFydGluZyBpdCBvbiB0aGUgc3RkaW4gbm93Lg0KPiA+ICsg ICAgICAgICIiIg0KPiA+ICsgICAgICAgIGlmICdkYWVtb24nIGluIG9wdGlvbnMua2V5cygpIGFu ZCBcDQo+ID4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydlbmFibGUnXSA9PSAnbm8nOg0KPiA+ ICsgICAgICAgICAgICBwYXNzDQo+ID4gKyAgICAgICAgZWxzZToNCj4gPiArICAgICAgICAgICAg ZGFlbW9uX2Jvb3RfbGluZSA9ICctZGFlbW9uaXplJw0KPiA+ICsgICAgICAgICAgICBzZWxmLl9f YWRkX2Jvb3RfbGluZShkYWVtb25fYm9vdF9saW5lKQ0KPiA+ICsNCj4gPiArICAgIGRlZiBzdGFy dF92bShzZWxmKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBTdGFydCBWTS4NCj4g PiArICAgICAgICAiIiINCj4gPiArICAgICAgICBxZW11X2VtdWxhdG9yID0gc2VsZi5xZW11X2Vt dWxhdG9yDQo+ID4gKw0KPiA+ICsgICAgICAgIHNlbGYuX19hbGxvY19hc3NpZ25lZF9wY2lzKCkN Cj4gPiArDQo+ID4gKyAgICAgICAgaWYgc2VsZi52Y3B1c19waW5uZWRfdG9fdm0uc3RyaXAoKToN Cj4gPiArICAgICAgICAgICAgdmNwdXMgPSBzZWxmLl9fYWxsb2NfdmNwdXMoKQ0KPiA+ICsNCj4g PiArICAgICAgICAgICAgaWYgdmNwdXMuc3RyaXAoKToNCj4gPiArICAgICAgICAgICAgICAgIHdo b2xlX3FlbXVfa3ZtX2Jvb3RfbGluZSA9ICd0YXNrc2V0IC1jICVzICcgJSB2Y3B1cw0KPiArIFwN Cj4gPiArICAgICAgICAgICAgICAgICAgICBxZW11X2VtdWxhdG9yICsgJyAnICsgXA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgIHNlbGYud2hvbGVfcWVtdV9rdm1fYm9vdF9saW5lDQo+IA0KPiBJ ZiBoZXJlIG9ubHkgdG8gZ2V0IHZjcHVzIGZvciB1c2FnZSwgYmV0dGVyIHRvIHVzZSBmdW5jdGlv biByZXBsYWNlDQo+IGNvZGVzIGhlcmUuDQo+IA0KDQpPaywgSSB3aWxsIGRvIGl0IG5leHQgdmVy c2lvbi4NCg0KPiA+ICsgICAgICAgIGVsc2U6DQo+ID4gKyAgICAgICAgICAgIHdob2xlX3FlbXVf a3ZtX2Jvb3RfbGluZSA9IHFlbXVfZW11bGF0b3IgKyAnICcgKyBcDQo+ID4gKyAgICAgICAgICAg ICAgICBzZWxmLndob2xlX3FlbXVfa3ZtX2Jvb3RfbGluZQ0KPiA+ICsNCj4gPiArICAgICAgICAj IFN0YXJ0IFZNIHVzaW5nIHRoZSBxZW11IGNvbW1hbmQNCj4gPiArICAgICAgICBvdXQgPSBzZWxm Lmhvc3Rfc2Vzc2lvbi5zZW5kX2V4cGVjdCh3aG9sZV9xZW11X2t2bV9ib290X2xpbmUsDQo+ICcj DQo+ID4gJykNCj4gPiArICAgICAgICB0aW1lLnNsZWVwKDMwKQ0KPiA+ICsgICAgICAgIGlmIG91 dDoNCj4gPiArICAgICAgICAgICAgcmFpc2UgU3RhcnRWTUZhaWxlZEV4Y2VwdGlvbihvdXQpDQo+ ID4gKw0KPiA+ICsgICAgZGVmIF9fYWxsb2NfdmNwdXMoc2VsZik6DQo+ID4gKyAgICAgICAgIiIi DQo+ID4gKyAgICAgICAgQWxsb2NhdGUgdmlydHVhbCBDUFVzIGZvciBWTS4NCj4gPiArICAgICAg ICAiIiINCj4gPiArICAgICAgICByZXFfY3B1cyA9IHNlbGYudmNwdXNfcGlubmVkX3RvX3ZtLnNw bGl0KCkNCj4gPiArICAgICAgICBjcHVzID0gc2VsZi52aXJ0X3Bvb2wuYWxsb2NfY3B1KHZtPXNl bGYudm1fbmFtZSwNCj4gPiBjb3JlbGlzdD1yZXFfY3B1cykNCj4gPiArDQo+ID4gKyAgICAgICAg dmNwdXNfcGlubmVkX3RvX3ZtID0gJycNCj4gPiArICAgICAgICBmb3IgY3B1IGluIGNwdXM6DQo+ ID4gKyAgICAgICAgICAgIHZjcHVzX3Bpbm5lZF90b192bSArPSAnLCcgKyBjcHUNCj4gPiArICAg ICAgICB2Y3B1c19waW5uZWRfdG9fdm0gPSB2Y3B1c19waW5uZWRfdG9fdm0ubHN0cmlwKCcsJykN Cj4gPiArDQo+ID4gKyAgICAgICAgaWYgbGVuKHJlcV9jcHVzKSAhPSBsZW4oY3B1cyk6DQo+ID4g KyAgICAgICAgICAgIHByaW50ICJXQVJOSU5HOiBKdXN0IHBpbiB2Y3B1cyBbICVzIF0gdG8gVk0h IiAlDQo+ID4gdmNwdXNfcGlubmVkX3RvX3ZtDQo+ID4gKw0KPiANCj4gSWYgY2Fubm90IGFsbG9j YXRlIGNwdXMsIHNob3VsZCByYWlzZSBmYWlsdXJlLg0KPiANCg0KTWF5YmUgaXQgaXMgYmV0dGVy IHRvIHJhaXNlIGZhaWx1cmUsIGlmIHRoZSB1c2VyIG11c3QgbmVlZCB0byBnZXQgDQp0aGUgY3B1 cywgT2ssIEkgd2lsbCBkbyBpdCBuZXh0IHZlcnNpb24uDQoNCj4gPiArICAgICAgICByZXR1cm4g dmNwdXNfcGlubmVkX3RvX3ZtDQo+ID4gKw0KPiA+ICsgICAgZGVmIF9fYWxsb2NfYXNzaWduZWRf cGNpcyhzZWxmKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBSZWNvcmQgdGhlIFBD SSBkZXZpY2UgaW5mbw0KPiA+ICsgICAgICAgIFN0cnVjdDoge2RldiBwY2k6IHsnaXNfdmYnOiBb VHJ1ZSB8IEZhbHNlXSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZl9wY2kn OiBwY2l9fQ0KPiA+ICsgICAgICAgIGV4YW1wbGU6DQo+ID4gKyAgICAgICAgICAgIHsnMDg6MTAu MCc6eydpc192Zic6VHJ1ZSwgJ3BmX3BjaSc6IDA4OjAwLjB9fQ0KPiA+ICsgICAgICAgICIiIg0K PiA+ICsgICAgICAgIGFzc2lnbmVkX3BjaXNfaW5mbyA9IHt9DQo+ID4gKyAgICAgICAgZm9yIHBj aSBpbiBzZWxmLmFzc2lnbmVkX3BjaXM6DQo+ID4gKyAgICAgICAgICAgIGFzc2lnbmVkX3BjaXNf aW5mb1twY2ldID0ge30NCj4gPiArICAgICAgICAgICAgaWYgc2VsZi5fX2lzX3ZmX3BjaShwY2kp Og0KPiA+ICsgICAgICAgICAgICAgICAgYXNzaWduZWRfcGNpc19pbmZvW3BjaV1bJ2lzX3ZmJ10g PSBUcnVlDQo+ID4gKyAgICAgICAgICAgICAgICBwZl9wY2kgPSBzZWxmLl9fbWFwX3ZmX3RvX3Bm KHBjaSkNCj4gPiArICAgICAgICAgICAgICAgIGFzc2dpbmVkX3BjaXNfaW5mb1twY2ldWydwZl9w Y2knXSA9IHBmX3BjaQ0KPiA+ICsgICAgICAgICAgICAgICAgaWYgc2VsZi52aXJ0X3Bvb2wuYWxs b2NfdmZfZnJvbV9wZih2bT1zZWxmLnZtX25hbWUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBmX3BjaT1wZl9wY2ksDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpbcGNpXSk6DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHNlbGYuX19nZXRfdmZfcG9ydChwY2kpDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgcG9ydC51bmJpbmRfZHJpdmVyKCkNCj4gPiArICAgICAg ICAgICAgICAgICAgICBwb3J0LmJpbmRfZHJpdmVyKCdwY2ktc3R1YicpDQo+ID4gKyAgICAgICAg ICAgIGVsc2U6DQo+ID4gKyAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgaWYgYW55IFZGIG9m IHNwZWNpZmllZCBQRiBoYXMgYmVlbg0KPiA+ICsgICAgICAgICAgICAgICAgIyB1c2VkLCByYWlz ZSBleGNlcHRpb24NCj4gPiArICAgICAgICAgICAgICAgIHZmX3BjaSA9IHNlbGYuX192Zl9oYXNf YmVlbl9hc3NpbmdlZChwY2ksDQo+ID4gKiphc3NpbmdlZF9wY2lzX2luZm8pDQo+ID4gKyAgICAg ICAgICAgICAgICBpZiB2Zl9wY2k6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhj ZXB0aW9uKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IEEgVkYgWyVzXSBn ZW5lcmF0ZWQgYnkgUEYgWyVzXSBoYXMNCj4gIiAlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICh2Zl9wY2ksIHBjaSkgKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAiYmVlbiBh c3NpZ25lZCB0byBWTSwgc28gdGhpcyBQRiBjYW4gbm90IGJlDQo+ICIgKw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAiYXNzaWduZWQgdG8gVk0gYWdhaW4hIikNCj4gPiArICAgICAgICAg ICAgICAgICMgZ2V0IHRoZSBwb3J0IGluc3RhbmNlIG9mIFBGDQo+ID4gKyAgICAgICAgICAgICAg ICBwb3J0ID0gc2VsZi5fX2dldF9uZXRfZGV2aWNlX2J5X3BjaShwY2kpDQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgICAgaWYgc2VsZi52aXJ0X3Bvb2wuYWxsb2NfcGYodm09c2VsZi52bV9uYW1l LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKltwY2ld KToNCj4gPiArICAgICAgICAgICAgICAgICAgICBwb3J0LnVuYmluZF9kcml2ZXIoKQ0KPiA+ICsN Cj4gPiArICAgIGRlZiBfX2lzX3ZmX3BjaShzZWxmLCBkZXZfcGNpKToNCj4gPiArICAgICAgICAi IiINCj4gPiArICAgICAgICBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIFBDSSBkZXYgaXMgYSBWRi4N Cj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBmb3IgcG9ydF9pbmZvIGluIHNlbGYuaG9z dF9kdXQucG9ydHNfaW5mbzoNCj4gPiArICAgICAgICAgICAgaWYgJ3NyaW92X3Zmc19wY2knIGlu IHBvcnRfaW5mby5rZXlzKCk6DQo+ID4gKyAgICAgICAgICAgICAgICBpZiBkZXZfcGNpIGluIHBv cnRfaW5mb1snc3Jpb3ZfdmZzX3BjaSddOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgIHJldHVy biBUcnVlDQo+ID4gKyAgICAgICAgcmV0dXJuIEZhbHNlDQo+ID4gKw0KPiANCj4gVmYgcGNpIGRl dmljZSBzaG91bGQgYmUgaGFuZGxlZCBpbiB2aXJ0X2R1dCBtb2R1bGUgYW5kIHNoYXJlZCB3aXRo DQo+IGRpZmZlcmVudCB0eXBlcyBvZiB2aXJ0dWFsaXphdGlvbiBoeXBlcnZpc29yLg0KPiANCg0K RG8geW91IG1lYW4gSSBzaG91bGQgbW92ZSB0aGlzIGZ1bmN0aW9uIHRvIG90aGVyIG1vZHVsZT8N Cg0KPiA+ICsgICAgZGVmIF9fbWFwX3ZmX3RvX3BmKHNlbGYsIGRldl9wY2kpOg0KPiA+ICsgICAg ICAgICIiIg0KPiA+ICsgICAgICAgIE1hcCB0aGUgc3BlY2lmaWVkIFZGIHRvIFBGLg0KPiA+ICsg ICAgICAgICIiIg0KPiA+ICsgICAgICAgIGZvciBwb3J0X2luZm8gaW4gc2VsZi5ob3N0X2R1dC5w b3J0c19pbmZvOg0KPiA+ICsgICAgICAgICAgICBpZiAnc3Jpb3ZfdmZzX3BjaScgaW4gcG9ydF9p bmZvLmtleXMoKToNCj4gPiArICAgICAgICAgICAgICAgIGlmIGRldl9wY2kgaW4gcG9ydF9pbmZv Wydzcmlvdl92ZnNfcGNpJ106DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvcnRf aW5mb1sncGNpJ10NCj4gPiArICAgICAgICByZXR1cm4gTm9uZQ0KPiA+ICsNCj4gU2FtZSBhcyBh Ym92ZS4NCj4gDQo+ID4gKyAgICBkZWYgX19nZXRfdmZfcG9ydChzZWxmLCBkZXZfcGNpKToNCj4g PiArICAgICAgICAiIiINCj4gPiArICAgICAgICBHZXQgdGhlIE5ldERldmljZSBpbnN0YW5jZSBv ZiBzcGVjaWZpZWQgVkYuDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgZm9yIHBvcnRf aW5mbyBpbiBzZWxmLmhvc3RfZHV0LnBvcnRzX2luZm86DQo+ID4gKyAgICAgICAgICAgIGlmICd2 ZnNfcG9ydCcgaW4gcG9ydF9pbmZvLmtleXMoKToNCj4gPiArICAgICAgICAgICAgICAgIGZvciBw b3J0IGluIHBvcnRfaW5mb1sndmZzX3BvcnQnXToNCj4gPiArICAgICAgICAgICAgICAgICAgICBp ZiBkZXZfcGNpID09IHBvcnQucGNpOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gcG9ydA0KPiA+ICsgICAgICAgIHJldHVybiBOb25lDQo+ID4gKw0KPiANCj4gU2FtZSBhcyBh Ym92ZS4NCj4gPiArICAgIGRlZiBfX3ZmX2hhc19iZWVuX2Fzc2lnbmVkKHNlbGYsIHBmX3BjaSwg Kiphc3NpZ25lZF9wY2lzX2luZm8pOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIENo ZWNrIGlmIHRoZSBzcGVjaWZpZWQgVkYgaGFzIGJlZW4gdXNlZC4NCj4gPiArICAgICAgICAiIiIN Cj4gPiArICAgICAgICBmb3IgcGNpIGluIGFzc2lnbmVkX3BjaXNfaW5mby5rZXlzKCk6DQo+ID4g KyAgICAgICAgICAgIGlmIGFzc2lnbmVkX3BjaXNfaW5mb1twY2ldWydpc192ZiddIGFuZCBcDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgYXNzaWduZWRfcGNpc19pbmZvW3BjaV1bJ3BmX3BjaSdd ID09IHBmX3BjaToNCj4gPiArICAgICAgICAgICAgICAgIHJldHVybiBwY2kNCj4gPiArICAgICAg ICByZXR1cm4gRmFsc2UNCj4gPiArDQo+IFZGIGRldmljZSBjYW7igJl0IGJlIHNoYXJlZCB3aXRo IFZNcywgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW4gcmVzb3VyY2UNCj4gbW9kdWxlLg0KPiAN Cj4gPiArICAgIGRlZiBfX2dldF9uZXRfZGV2aWNlX2J5X3BjaShzZWxmLCBuZXRfZGV2aWNlX3Bj aSk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgR2V0IE5ldERldmljZSBpbnN0YW5j ZSBieSB0aGUgc3BlY2lmaWVkIFBDSSBidXMgbnVtYmVyLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ ICsgICAgICAgIHBvcnRfaW5mbyA9IHNlbGYuaG9zdF9kdXQuZ2V0X3BvcnRfaW5mbyhuZXRfZGV2 aWNlX3BjaSkNCj4gPiArICAgICAgICByZXR1cm4gcG9ydF9pbmZvWydwb3J0J10NCj4gPiArDQo+ IA0KPiBWZiBwY2kgZGV2aWNlIHNob3VsZCBiZSBoYW5kbGVkIGluIHZpcnRfZHV0IG1vZHVsZSBh bmQgc2hhcmVkIHdpdGgNCj4gZGlmZmVyZW50IHR5cGVzIG9mIHZpcnR1YWxpemF0aW9uIGh5cGVy dmlzb3IuDQo+IA0KPiA+ICsgICAgZGVmIGdldF92bV9pcChzZWxmKToNCj4gPiArICAgICAgICAi IiINCj4gPiArICAgICAgICBHZXQgVk0gSVAuDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAg ICAgZ2V0X3ZtX2lwID0gZ2V0YXR0cihzZWxmLCAiZ2V0X3ZtX2lwXyVzIiAlIHNlbGYubmV0X3R5 cGUpDQo+ID4gKyAgICAgICAgcmV0dXJuIGdldF92bV9pcCgpDQo+ID4gKw0KPiA+ICsgICAgZGVm IGdldF92bV9pcF9ob3N0ZndkKHNlbGYpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAg IEdldCBJUCB3aGljaCBWTSBpcyBjb25uZWN0ZWQgYnkgaG9zdGZ3ZC4NCj4gPiArICAgICAgICAi IiINCj4gPiArICAgICAgICByZXR1cm4gc2VsZi5ob3N0ZndkX2FkZHINCj4gPiArDQo+ID4gKyAg ICBkZWYgZ2V0X3ZtX2lwX2JyaWRnZShzZWxmKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAg ICAgICBHZXQgSVAgd2hpY2ggVk0gaXMgY29ubmVjdGVkIGJ5IGJyaWRnZS4NCj4gPiArICAgICAg ICAiIiINCj4gPiArICAgICAgICBvdXQgPSBzZWxmLl9fY29udHJvbF9zZXNzaW9uKCdwaW5nJywg JzYwJykNCj4gPiArICAgICAgICBpZiBub3Qgb3V0Og0KPiA+ICsgICAgICAgICAgICB0aW1lLnNs ZWVwKDEwKQ0KPiA+ICsgICAgICAgICAgICBvdXQgPSBzZWxmLl9fY29udHJvbF9zZXNzaW9uKCdp ZmNvbmZpZycpDQo+ID4gKyAgICAgICAgICAgIGlwcyA9IHJlLmZpbmRhbGwocidpbmV0IChcZCtc LlxkK1wuXGQrXC5cZCspJywgb3V0KQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgaWYgJzEyNy4w LjAuMScgaW4gaXBzOg0KPiA+ICsgICAgICAgICAgICAgICAgaXBzLnJlbW92ZSgnMTI3LjAuMC4x JykNCj4gPiArDQo+ID4gKyAgICAgICAgICAgIG51bSA9IDMNCj4gPiArICAgICAgICAgICAgZm9y IGlwIGluIGlwczoNCj4gPiArICAgICAgICAgICAgICAgIG91dCA9IHNlbGYuaG9zdF9zZXNzaW9u LnNlbmRfZXhwZWN0KA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICdwaW5nIC1jICVkICVzJyAl IChudW0sIGlwKSwgJyMgJykNCj4gPiArICAgICAgICAgICAgICAgIGlmICcwJSBwYWNrZXQgbG9z cycgaW4gb3V0Og0KPiA+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBpcA0KPiANCj4gVGhl IGZpcnN0IHBpbmdlZCBpbnRlcmZhY2Ugd2lsbCBiZSB0aGUgaW50ZXJmYWNlIG9mIGJyaWRnZSwg Y2FuIHdlIG1ha2UNCj4gc3VyZSB0aGF0Pw0KDQpJIHRoaW5rIGl0IGlzIGVub3VnaCBmb3IgdXMg dG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBjb25uZWN0aW9uIGJldHdlZW4gaG9zdCANCmFuZCBndWVz dC4NCg0KPiA+ICsgICAgICAgIHJldHVybiAnJw0KPiA+ICsNCj4gPiArICAgIGRlZiBfX2NvbnRy b2xfc2Vzc2lvbihzZWxmLCBjb21tYW5kLCAqYXJncyk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4g KyAgICAgICAgVXNlIHRoZSBxZW11IGd1ZXN0IGFnZW50IHNlcnZpY2UgdG8gY29udHJvbCBWTS4N Cj4gPiArICAgICAgICBOb3RlOg0KPiA+ICsgICAgICAgICAgICA6Y29tbWFuZDogdGhlcmUgYXJl IHRoZXNlIGNvbW1hbmRzIGFzIGJlbG93Og0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNh dCwgZnNmcmVlemUsIGZzdHJpbSwgaGFsdCwgaWZjb25maWcsIGluZm8sXA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIHBpbmcsIHBvd2VyZG93biwgcmVib290LCBzaHV0ZG93biwgc3VzcGVu ZA0KPiA+ICsgICAgICAgICAgICA6YXJnczogZ2l2ZSBkaWZmZXJlbnQgYXJncyBieSB0aGUgZGlm ZmVyZW50IGNvbW1hbmRzLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGlmIG5vdCBz ZWxmLnFnYV9zb2NrX3BhdGg6DQo+ID4gKyAgICAgICAgICAgIHNlbGYuaG9zdF9sb2dnZXIuaW5m bygNCj4gPiArICAgICAgICAgICAgICAgICJObyBRR0Egc2VydmljZSBiZXR3ZWVuIGhvc3QgWyAl cyBdIGFuZCBndWVzdA0KPiBbICVzIF0iICUNCj4gPiArICAgICAgICAgICAgICAgIChzZWxmLmhv c3RfZHV0Lk5hbWUsIHNlbGYudm1fbmFtZSkpDQo+ID4gKyAgICAgICAgICAgIHJldHVybiBOb25l DQo+ID4gKw0KPiA+ICsgICAgICAgIGNtZF9oZWFkID0gJ34vUU1QLycgKyBcDQo+ID4gKyAgICAg ICAgICAgICJxZW11LWdhLWNsaWVudCAiICsgXA0KPiA+ICsgICAgICAgICAgICAiLS1hZGRyZXNz PSVzICVzIiAlIFwNCj4gPiArICAgICAgICAgICAgKHNlbGYucWdhX3NvY2tfcGF0aCwgY29tbWFu ZCkNCj4gPiArDQo+ID4gKyAgICAgICAgY21kID0gY21kX2hlYWQNCj4gPiArICAgICAgICBmb3Ig YXJnIGluIGFyZ3M6DQo+ID4gKyAgICAgICAgICAgIGNtZCA9IGNtZF9oZWFkICsgJyAnICsgc3Ry KGFyZykNCj4gPiArDQo+ID4gKyAgICAgICAgb3V0ID0gc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9l eHBlY3QoY21kLCAnIyAnKQ0KPiA+ICsNCj4gPiArICAgICAgICByZXR1cm4gb3V0DQo+ID4gKw0K PiA+ICsgICAgZGVmIHN0b3Aoc2VsZik6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAg U3RvcCBWTS4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBzZWxmLl9fY29udHJvbF9z ZXNzaW9uKCdwb3dlcmRvd24nKQ0KPiANCj4gSGVyZSdzIG5lZWQgZnVuY3Rpb24gdG8gY2hlY2sg d2hldGhlciBzaHV0ZG93biBzdWNjZXNzZnVsbHkuDQo+IA0KDQpPaywgaXQgd2lsbCBiZSBkb25l Lg0KDQo+ID4gKyAgICAgICAgdGltZS5zbGVlcCg1KQ0KPiA+ICsgICAgICAgIHNlbGYudmlydF9w b29sLmZyZWVfYWxsX3Jlc291cmNlKHNlbGYudm1fbmFtZSkNCj4gPiArDQo+ID4gKw0KPiA+ICtp ZiBfX25hbWVfXyA9PSAiX19tYWluX18iOg0KPiA+ICsgICAgaW1wb3J0IHN1YnByb2Nlc3MNCj4g PiArICAgIGltcG9ydCBzeXMNCj4gPiArICAgIGltcG9ydCBwZGINCj4gPiArICAgIGZyb20gc2Vy aWFsaXplciBpbXBvcnQgU2VyaWFsaXplcg0KPiA+ICsgICAgZnJvbSBjcmJzIGltcG9ydCBjcmJz DQo+ID4gKyAgICBmcm9tIHRlc3RlciBpbXBvcnQgVGVzdGVyDQo+ID4gKyAgICBmcm9tIGR1dCBp bXBvcnQgRHV0DQo+ID4gKyAgICBpbXBvcnQgZHRzDQo+ID4gKyAgICBmcm9tIHZpcnRfcHJveHkg aW1wb3J0IFZpcnRQcm94eQ0KPiA+ICsNCj4gPiArICAgIGNvbW1hbmQgPSAiaWZjb25maWcgYnIw Ig0KPiA+ICsgICAgc3VicCA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZC5zcGxpdCgpLCBzdGRv dXQ9c3VicHJvY2Vzcy5QSVBFKQ0KPiA+ICsgICAgc3VicC53YWl0KCkNCj4gPiArDQo+ID4gKyAg ICBpbnRmX2luZm8gPSBzdWJwLnN0ZG91dC5yZWFkbGluZXMoKQ0KPiA+ICsgICAgZm9yIGxpbmVf aW5mbyBpbiBpbnRmX2luZm86DQo+ID4gKyAgICAgICAgcmVneCA9IHJlLnNlYXJjaChyJ2luZXQg KFxkK1wuXGQrXC5cZCtcLlxkKyknLCBsaW5lX2luZm8pDQo+ID4gKyAgICAgICAgaWYgcmVneDoN Cj4gPiArICAgICAgICAgICAgZHV0SVAgPSByZWd4Lmdyb3VwKDEpDQo+ID4gKyAgICAgICAgICAg IGJyZWFrDQo+ID4gKw0KPiA+ICsgICAgcHJpbnQgIkRFQlVHOiBkdXRJcDogIiwgZHV0SVANCj4g PiArDQo+ID4gKyAgICAjIGxvb2sgdXAgaW4gY3JicyAtIHRvIGZpbmQgdGhlIG1hdGNoaW5nIElQ DQo+ID4gKyAgICBjcmJJbnN0ID0gTm9uZQ0KPiA+ICsgICAgZm9yIGNyYiBpbiBjcmJzOg0KPiA+ ICsgICAgICAgIGlmIGNyYlsnSVAnXSA9PSBkdXRJUDoNCj4gPiArICAgICAgICAgICAgY3JiSW5z dCA9IGNyYg0KPiA+ICsgICAgICAgICAgICBicmVhaw0KPiA+ICsNCj4gPiArICAgICMgb25seSBy dW4gb24gdGhlIGR1dCBpbiBrbm93biBjcmJzDQo+ID4gKyAgICBpZiBjcmJJbnN0IGlzIE5vbmU6 DQo+ID4gKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJObyBhdmFpbGFibGUgY3JiIGluc3RhbmNl ISEhIikNCj4gPiArDQo+ID4gKyAgICAjIGluaXRpYWxpemUgdGhlIGR1dCBhbmQgdGVzdGVyDQo+ ID4gKyAgICBzZXJpYWxpemVyID0gU2VyaWFsaXplcigpDQo+ID4gKyAgICBzZXJpYWxpemVyLnNl dF9zZXJpYWxpemVkX2ZpbGVuYW1lKCcuLi8uJXMuY2FjaGUnICUNCj4gY3JiSW5zdFsnSVAnXSkN Cj4gPiArICAgIHNlcmlhbGl6ZXIubG9hZF9mcm9tX2ZpbGUoKQ0KPiA+ICsNCj4gPiArICAgIHJl YWRfY2FjaGUgPSBOb25lDQo+ID4gKyAgICBza2lwX3NldHVwID0gTm9uZQ0KPiA+ICsNCj4gPiAr ICAgIHByb2plY3QgPSAiZHBkayINCj4gPiArICAgIGR0cy5QYWNrYWdlID0gJ2RlcC9kcGRrLnRh ci5neicNCj4gPiArICAgIGR1dCA9IGR0cy5nZXRfcHJvamVjdF9vYmoocHJvamVjdCwgRHV0LCBj cmJJbnN0LCBzZXJpYWxpemVyKQ0KPiA+ICsgICAgdGVzdGVyID0gZHRzLmdldF9wcm9qZWN0X29i aihwcm9qZWN0LCBUZXN0ZXIsIGNyYkluc3QsDQo+IHNlcmlhbGl6ZXIpDQo+ID4gKyAgICBkdXQu dGVzdGVyID0gdGVzdGVyDQo+ID4gKyAgICBkdXQuYmFzZV9kaXIgPSAnZHBkaycNCj4gPiArICAg IGR1dC5zZXRfbmljX3R5cGUoJ25pYW50aWMnKQ0KPiA+ICsgICAgdGVzdGVyLmR1dCA9IGR1dA0K PiA+ICsNCj4gPiArICAgIHRlc3Rlci5zZXRfdGVzdF90eXBlcyhUcnVlLCBGYWxzZSkNCj4gPiAr ICAgIGR1dC5zZXRfdGVzdF90eXBlcyhUcnVlLCBGYWxzZSkNCj4gPiArDQo+ID4gKyAgICB0ZXN0 ZXIuc2V0X3NwZWVkdXBfb3B0aW9ucyhyZWFkX2NhY2hlLCBza2lwX3NldHVwKQ0KPiA+ICsgICAg dGVzdGVyLnRlc3Rlcl9wcmVyZXF1aXNpdGVzKCkNCj4gPiArICAgIGR1dC5zZXRfc3BlZWR1cF9v cHRpb25zKHJlYWRfY2FjaGUsIHNraXBfc2V0dXApDQo+ID4gKyAgICBkdXQuZHV0X3ByZXJlcXVp c2l0ZXMoKQ0KPiA+ICsNCj4gPiArICAgICMgdGVzdCB0aGF0IGdlbmVyYXRpbmcgYW5kIGRlc3Ry b3lpbmcgVkYNCj4gPiArICAgIHBvcnQwID0gZHV0LnBvcnRzX2luZm9bMF1bJ3BvcnQnXQ0KPiA+ ICsgICAgZHV0LmdlbmVyYXRlX3NyaW92X3Zmc19ieV9wb3J0KDAsIDQpDQo+ID4gKyAgICBwcmlu dCAicG9ydCAwIHNyaW92IHZmczogIiwgZHV0LnBvcnRzX2luZm9bMF0NCj4gPiArDQo+ID4gKyAg ICBkdXQuZGVzdHJveV9zcmlvdl92ZnNfYnlfcG9ydCgwKQ0KPiA+ICsNCj4gPiArICAgIHRpbWUu c2xlZXAoMikNCj4gPiArDQo+ID4gKyAgICAjIHRlc3QgdGhhdCBiaW5kaW5nIGFuZCB1bmJpbmcg dGhlIE5JQw0KPiA+ICsgICAgcG9ydDBfcGNpID0gZHV0LnBvcnRzX2luZm9bMF1bJ3BjaSddDQo+ ID4gKyAgICBwb3J0MC51bmJpbmRfZHJpdmVyKCkNCj4gPiArDQo+ID4gKyAgICBkdXQubG9nZ2Vy LmluZm8oIkpVU1QgVEVTVElORyEhISIpDQo+ID4gKw0KPiA+ICsgICAgIyBTdGFydCBWTSBieSB0 aGUgcWVtdSBrdm0gY29uZmlnIGZpbGUNCj4gPiArICAgIHZtMSA9IFFFTVVLdm0oZHV0LCAndm0x JywgJ3BtZF9zcmlvdicpDQo+ID4gKyAgICBwcmludCAiVk0gY29uZmlnIHBhcmFtczoiDQo+ID4g KyAgICBwcmludCB2bTEucGFyYW1zDQo+ID4gKyAgICB2bTFfZHV0ID0gdm0xLnN0YXJ0KCkNCj4g PiArDQo+ID4gKyAgICB0cnk6DQo+ID4gKyAgICAgICAgaG9zdF9pcCA9IHZtMS5zZXNzaW9uLnNl bmRfZXhwZWN0KCJpZmNvbmZpZyIsICcjICcpDQo+ID4gKyAgICAgICAgcHJpbnQgIkhvc3QgSVA6 Ig0KPiA+ICsgICAgICAgIHByaW50IGhvc3RfaXANCj4gPiArDQo+ID4gKyAgICAgICAgdm0xX2lw ID0gdm0xLmdldF92bV9pcCgpDQo+ID4gKyAgICAgICAgcHJpbnQgIlZNMSBJUDoiDQo+ID4gKyAg ICAgICAgcHJpbnQgdm0xX2lwDQo+ID4gKw0KPiA+ICsgICAgICAgIHByaW50ICJWTTEgUENJIGRl dmljZToiDQo+ID4gKyAgICAgICAgcHJpbnQgdm1fZHV0LnNlc3Npb24uc2VuZF9leHBlY3QoJ2xz cGNpIC1ubiB8IGdyZXAgLWkgZXRoJywNCj4gJyMgJykNCj4gPiArICAgIGV4Y2VwdCBFeGNlcHRp b24gYXMgZToNCj4gPiArICAgICAgICBwcmludCBlDQo+ID4gKyAgICAgICAgdm0xX2R1dC5zdG9w KCkNCj4gPiArICAgICAgICBwb3J0MC5iaW5kX2RyaXZlcigpDQo+ID4gKyAgICAjIFN0b3AgVk0N Cj4gPiArICAgIHZtMS5zdG9wKCkNCj4gPiArICAgIHBvcnQwLmJpbmRfZHJpdmVyKCkNCj4gPiAr DQo+ID4gKyAgICBkdXQuaG9zdF9sb2dnZXIubG9nZ2VyX2V4aXQoKQ0KPiA+ICsgICAgZHV0Lmxv Z2dlci5sb2dnZXJfZXhpdCgpDQo+ID4gKyAgICB0ZXN0ZXIubG9nZ2VyLmxvZ2dlcl9leGl0KCkN Cj4gPiArDQo+ID4gKyAgICBwcmludCAiU3RhcnQgYW5kIHN0b3AgVk0gb3ZlciEiDQo+ID4gZGlm ZiAtLWdpdCBhL2ZyYW1ld29yay92aXJ0X2Jhc2UucHkgYi9mcmFtZXdvcmsvdmlydF9iYXNlLnB5 DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi42MjVjMzA5DQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2ZyYW1ld29yay92aXJ0X2Jhc2UucHkNCj4gPiBA QCAtMCwwICsxLDI1MCBAQA0KPiA+ICsjIDxDT1BZUklHSFRfVEFHPg0KPiA+ICsNCj4gPiArZnJv bSByYW5kb20gaW1wb3J0IHJhbmRpbnQNCj4gPiArZnJvbSBpdGVydG9vbHMgaW1wb3J0IGltYXAN Cj4gPiArDQo+ID4gK2ltcG9ydCBkdHMNCj4gPiArZnJvbSBkdXQgaW1wb3J0IER1dA0KPiA+ICtm cm9tIGNvbmZpZyBpbXBvcnQgVmlydENvbmYNCj4gPiArZnJvbSBjb25maWcgaW1wb3J0IFZJUlRD T05GDQo+ID4gK2Zyb20gbG9nZ2VyIGltcG9ydCBnZXRMb2dnZXINCj4gPiArZnJvbSBzZXR0aW5n cyBpbXBvcnQgQ09ORklHX1JPT1RfUEFUSA0KPiA+ICtmcm9tIHZpcnRfZHV0IGltcG9ydCBWaXJ0 RHV0DQo+ID4gKw0KPiA+ICsNCj4gPiArY2xhc3MgVmlydEJhc2Uob2JqZWN0KToNCj4gPiArDQo+ ID4gKyAgICAiIiINCj4gPiArICAgIEJhc2ljIG1vZHVsZSBmb3IgY3VzdG9tZXIgc3BlY2lhbCB2 aXJ0dWFsIHR5cGUuIFRoaXMgbW9kdWxlDQo+IGltcGxlbWVudA0KPiA+IGZ1bmN0aW9ucw0KPiA+ ICsgICAgY29uZmlndXJhdGVkIGFuZCBjb21wb3NlZCB0aGUgVk0gYm9vdCBjb21tYW5kLiBXaXRo IHRoZXNlDQo+IGZ1bmN0aW9uLA0KPiA+IHdlIGNhbiBnZXQNCj4gPiArICAgIGFuZCBzZXQgdGhl IFZNIGJvb3QgY29tbWFuZCwgYW5kIGluc3RhbnRpYXRlIHRoZSBWTS4NCj4gPiArICAgICIiIg0K PiA+ICsNCj4gPiArICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkdXQsIHZtX25hbWUsIHN1aXRlX25h bWUpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIEluaXRpYWxpemUgdGhlIFZpcnRC YXNlLg0KPiA+ICsgICAgICAgIGR1dDogdGhlIGluc3RhbmNlIG9mIER1dA0KPiA+ICsgICAgICAg IHZtX25hbWU6IHRoZSBuYW1lIG9mIFZNIHdoaWNoIHlvdSBoYXZlIGNvbmZpdXJlZCBpbiB0aGUN Cj4gY29uZmlndXJlDQo+ID4gKyAgICAgICAgc3VpdGVfbmFtZTogdGhlIG5hbWUgb2YgdGVzdCBz dWl0ZQ0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIHNlbGYuaG9zdF9kdXQgPSBkdXQN Cj4gPiArICAgICAgICBzZWxmLnZtX25hbWUgPSB2bV9uYW1lDQo+ID4gKyAgICAgICAgc2VsZi5z dWl0ZSA9IHN1aXRlX25hbWUNCj4gPiArDQo+ID4gKyAgICAgICAgIyBpbml0IHRoZSBob3N0IHNl c3Npb24gYW5kIGxvZ2dlciBmb3IgVk0NCj4gPiArICAgICAgICBzZWxmLmhvc3RfZHV0LmluaXRf aG9zdF9zZXNzaW9uKCkNCj4gPiArDQo+ID4gKyAgICAgICAgIyByZXBsYWNlIGR1dCBzZXNzaW9u DQo+ID4gKyAgICAgICAgc2VsZi5ob3N0X3Nlc3Npb24gPSBzZWxmLmhvc3RfZHV0Lmhvc3Rfc2Vz c2lvbg0KPiA+ICsgICAgICAgIHNlbGYuaG9zdF9sb2dnZXIgPSBzZWxmLmhvc3RfZHV0LmxvZ2dl cg0KPiA+ICsNCj4gPiArICAgICAgICAjIGluaXQgdGhlIGhvc3QgcmVzb3VjZSBwb29sIGZvciBW TQ0KPiA+ICsgICAgICAgIHNlbGYudmlydF9wb29sID0gc2VsZi5ob3N0X2R1dC52aXJ0X3Bvb2wN Cj4gPiArDQo+ID4gKyAgICAgICAgaWYgbm90IHNlbGYuaGFzX3ZpcnR1YWxfYWJpbGl0eSgpOg0K PiA+ICsgICAgICAgICAgICBpZiBub3Qgc2VsZi5lbmFibGVfdmlydHVhbF9hYmlsaXR5KCk6DQo+ ID4gKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIkR1dCBbICVzIF0gY2Fubm90IGhhdmUgdGhlIHZpcnR1YWwgYWJpbGl0eSEhISIpDQo+ ID4gKw0KPiANCj4gV2UgbmVlZCBoYW5kbGUgdGhvc2UgZXhjZXB0aW9uIGluIHZpcnR1YWxpemF0 aW9uIG1vZHVsZS4NCj4gDQoNCkkgZG9uYHQgdGhpbmsgaXQgc2hvdWxkIGJlIGhhbmRsZWQgaGVy ZSwgYmVjYXVzZSB0aGUgdmlydHVhbCBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQNCmluIHRoZSBjYXNl cywgaWYgd2UgaGFuZGxlIHRoaXMgZXhjZXB0aW9uLCBob3cgdG8ga25vdyBpZiB0aGUgdmlydHVh bCBtb2R1bGUgaXMgDQppbml0aWFsaXplZCBzdWNjZXNzZnVsbHk/DQoNCk9yIHdlIHNob3VsZCBk ZWZpbmUgYSBndWlkZWxpbmUsIGFsbCBleGNlcHRpb25zIGluIHRoZSBmcmFtZXdvcmsgc2hvdWxk IGJlIGhhbmRsZWQgaXRzZWxmLA0KSWYgZmFpbGVkLCBqdXN0IHJldHVybiBOb25lLCBlbHNlIHJl dHVybiB0aGUgY29ycmVjdCByZXN1bHQuIFdoYXQgZG8geW91IHRoaW5rPw0KDQo+ID4gKyAgICAg ICAgc2VsZi52aXJ0X3R5cGUgPSBzZWxmLmdldF92aXJ0X3R5cGUoKQ0KPiA+ICsgICAgICAgIHNl bGYubG9hZF9nbG9iYWxfY29uZmlnKCkNCj4gPiArICAgICAgICBzZWxmLmxvYWRfbG9jYWxfY29u ZmlnKHN1aXRlX25hbWUpDQo+ID4gKw0KPiA+ICsgICAgZGVmIGdldF92aXJ0X3R5cGUoc2VsZik6 DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgR2V0IHRoZSB2aXJ0dWFsIHR5cGUsIHN1 Y2ggYXMgS1ZNLCBYRU4gb3IgTElCVklSVC4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAg ICBOb3RJbXBsZW1lbnRlZA0KPiA+ICsNCj4gPiArICAgIGRlZiBoYXNfdmlydHVhbF9hYmlsaXR5 KHNlbGYpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIENoZWNrIGlmIHRoZSBob3N0 IGhhdmUgdGhlIGFiaWxpdHkgb2YgdmlydHVhbGl6YXRpb24uDQo+ID4gKyAgICAgICAgIiIiDQo+ ID4gKyAgICAgICAgTm90SW1wbGVtZW50ZWQNCj4gPiArDQo+ID4gKyAgICBkZWYgZW5hYmxlX3Zp cnR1YWxfYWJpbGl0eShzZWxmKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBFbmFs YmUgdGhlIHZpcnR1YWwgYWJpbGl0eSBvbiB0aGUgRFVULg0KPiA+ICsgICAgICAgICIiIg0KPiA+ ICsgICAgICAgIE5vdEltcGxlbWVudGVkDQo+ID4gKw0KPiA+ICsgICAgZGVmIGxvYWRfZ2xvYmFs X2NvbmZpZyhzZWxmKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBMb2FkIGdsb2Jh bCBjb25maWd1cmUgaW4gdGhlIHBhdGggRFRTX1JPT1RfUEFIVC9jb25mLg0KPiA+ICsgICAgICAg ICIiIg0KPiA+ICsgICAgICAgIGNvbmYgPSBWaXJ0Q29uZihWSVJUQ09ORikNCj4gPiArICAgICAg ICBjb25mLmxvYWRfdmlydF9jb25maWcoc2VsZi52aXJ0X3R5cGUpDQo+ID4gKyAgICAgICAgc2Vs Zi5wYXJhbXMgPSBjb25mLmdldF92aXJ0X2NvbmZpZygpDQo+ID4gKw0KPiBOZWVkIGFkZCBjaGVj ayB3aGV0aGVyIGNvbmZpZ3VyYXRpb24gZmlsZSBsb2FkIHN1Y2Nlc3NmdWxseS4NCj4gDQoNClll cywgaXQgc2hvdWxkIGJlIGRvbmUuDQoNCj4gPiArICAgIGRlZiBsb2FkX2xvY2FsX2NvbmZpZyhz ZWxmLCBzdWl0ZV9uYW1lKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBMb2FkIGxv Y2FsIGNvbmZpZ3VyZSBpbiB0aGUgcGF0aCBEVFNfUk9PVF9QQVRIL2NvbmYuDQo+ID4gKyAgICAg ICAgIiIiDQo+ID4gKyAgICAgICAgIyBsb2FkIGxvY2FsIGNvbmZpZ3VyYXRpb24gYnkgc3VpdGUg YW5kIHZtIG5hbWUNCj4gPiArICAgICAgICBjb25mID0gVmlydENvbmYoQ09ORklHX1JPT1RfUEFU SCArIHN1aXRlX25hbWUgKyAnLmNmZycpDQo+ID4gKyAgICAgICAgY29uZi5sb2FkX3ZpcnRfY29u ZmlnKHNlbGYudm1fbmFtZSkNCj4gPiArICAgICAgICBsb2NhbHBhcmFtcyA9IGNvbmYuZ2V0X3Zp cnRfY29uZmlnKCkNCj4gDQo+IE5lZWQgYWRkIGNoZWNrIHdoZXRoZXIgY29uZmlndXJhdGlvbiBm aWxlIGxvYWQgc3VjY2Vzc2Z1bGx5Lg0KDQpZZXMsIGl0IHNob3VsZCBiZSBkb25lLg0KDQo+ID4g KyAgICAgICAgIyByZXBsYWNlIGdsb2JhbCBjb25maWd1cmF0aW9ucyB3aXRoIGxvY2FsIGNvbmZp Z3VyYXRpb25zDQo+ID4gKyAgICAgICAgZm9yIHBhcmFtIGluIGxvY2FscGFyYW1zOg0KPiA+ICsg ICAgICAgICAgICBpZiAnbWVtJyBpbiBwYXJhbS5rZXlzKCk6DQo+ID4gKyAgICAgICAgICAgICAg ICBzZWxmLl9fc2F2ZV9sb2NhbF9jb25maWcoJ21lbScsIHBhcmFtWydtZW0nXSkNCj4gPiArICAg ICAgICAgICAgICAgIGNvbnRpbnVlDQo+ID4gKyAgICAgICAgICAgIGlmICdjcHUnIGluIHBhcmFt LmtleXMoKToNCj4gPiArICAgICAgICAgICAgICAgIHNlbGYuX19zYXZlX2xvY2FsX2NvbmZpZygn Y3B1JywgcGFyYW1bJ2NwdSddKQ0KPiA+ICsgICAgICAgICAgICAgICAgY29udGludWUNCj4gPiAr ICAgICAgICAgICAgIyBzYXZlIGxvY2FsIGNvbmZpZ3VyYXRpb25zDQo+ID4gKyAgICAgICAgICAg IHNlbGYucGFyYW1zLmFwcGVuZChwYXJhbSkNCj4gPiArDQo+ID4gKyAgICBkZWYgX19zYXZlX2xv Y2FsX2NvbmZpZyhzZWxmLCBrZXksIHZhbHVlKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAg ICAgICBTYXZlIHRoZSBsb2NhbCBjb25maWcgaW50byB0aGUgZ2xvYmFsIGRpY3Qgc2VsZi5wYXJh bS4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBmb3IgcGFyYW0gaW4gc2VsZi5wYXJh bXM6DQo+ID4gKyAgICAgICAgICAgIGlmIGtleSBpbiBwYXJhbS5rZXlzKCk6DQo+ID4gKyAgICAg ICAgICAgICAgICBwYXJhbVtrZXldID0gdmFsdWUNCj4gPiArDQo+ID4gKyAgICBkZWYgY29tcG9z ZV9ib290X3BhcmFtKHNlbGYpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIENvbXBv c2UgYWxsIGJvb3QgcGFyYW0gZm9yIHN0YXJ0aW5nIHRoZSBWTS4NCj4gPiArICAgICAgICAiIiIN Cj4gPiArICAgICAgICBmb3IgcGFyYW0gaW4gc2VsZi5wYXJhbXM6DQo+ID4gKyAgICAgICAgICAg IGtleSA9IHBhcmFtLmtleXMoKVswXQ0KPiA+ICsgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtW2tl eV0NCj4gPiArICAgICAgICAgICAgdHJ5Og0KPiA+ICsgICAgICAgICAgICAgICAgcGFyYW1fZnVu YyA9IGdldGF0dHIoc2VsZiwgJ2FkZF92bV8nICsga2V5KQ0KPiA+ICsgICAgICAgICAgICAgICAg aWYgY2FsbGFibGUocGFyYW1fZnVuYyk6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgZm9yIG9w dGlvbiBpbiB2YWx1ZToNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fZnVuYygq Km9wdGlvbikNCj4gPiArICAgICAgICAgICAgICAgIGVsc2U6DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgcHJpbnQgIlZpcnQgJXMgZnVuY3Rpb24gbm90IGltcGxlbWVudGVkISEhIiAlDQo+IGtl eQ0KPiA+ICsgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQo+ID4gKyAgICAgICAg ICAgICAgICBwcmludCAiRmFpbGVkOiAiLCBlDQo+ID4gKw0KPiANCj4gRnVuY3Rpb24gY2FsbCBm YWlsZWQgc2hvdWxkIGxvZyB3aXRoIGVycm9yLg0KDQpPaywgaXQgd2lsbCBiZSBkb25lLg0KDQo+ IA0KPiA+ICsgICAgZGVmIGZpbmRfb3B0aW9uX2luZGV4KHNlbGYsIG9wdGlvbik6DQo+ID4gKyAg ICAgICAgIiIiDQo+ID4gKyAgICAgICAgRmluZCB0aGUgYm9vdCBvcHRpb24gaW4gdGhlIHBhcmFt cyB3aGljaCBpcyBnZW5lcmF0ZWQgZnJvbQ0KPiA+ICsgICAgICAgIHRoZSBnbG9iYWwgYW5kIGxv Y2FsIGNvbmZpZ3VyZXMsIGFuZCB0aGlzIGZ1bmN0aW9uIHdpbGwNCj4gPiArICAgICAgICByZXR1 cm4gdGhlIGluZGV4IGJ5IHdoaWNoIG9wdGlvbiBjYW4gYmUgaW5kZXhlZCBpbiB0aGUNCj4gPiAr ICAgICAgICBwYXJhbSBsaXN0Lg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGluZGV4 ID0gMA0KPiA+ICsgICAgICAgIGZvciBwYXJhbSBpbiBzZWxmLnBhcmFtczoNCj4gPiArICAgICAg ICAgICAga2V5ID0gcGFyYW0ua2V5cygpWzBdDQo+ID4gKyAgICAgICAgICAgIGlmIGtleS5zdHJp cCgpID09IG9wdGlvbi5zdHJpcCgpOg0KPiA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4 DQo+ID4gKyAgICAgICAgICAgIGluZGV4ICs9IDENCj4gPiArDQo+ID4gKyAgICAgICAgcmV0dXJu IE5vbmUNCj4gPiArDQo+ID4gKyAgICBkZWYgZ2VuZXJhdGVfdW5pcXVlX21hYyhzZWxmKToNCj4g PiArICAgICAgICAiIiINCj4gPiArICAgICAgICBHZW5lcmF0ZSBhIHVuaXF1ZSBNQUMgYmFzZWQg b24gdGhlIERVVC4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBtYWNfaGVhZCA9ICcw MDowMDowMDonDQo+ID4gKyAgICAgICAgbWFjX3RhaWwgPSAnOicuam9pbigNCj4gPiArICAgICAg ICAgICAgWyclMDJ4JyAlIHggZm9yIHggaW4gaW1hcChsYW1iZGEgeDpyYW5kaW50KDAsIDI1NSks DQo+ID4gcmFuZ2UoMykpXSkNCj4gPiArICAgICAgICByZXR1cm4gbWFjX2hlYWQgKyBtYWNfdGFp bA0KPiA+ICsNCj4gPiArICAgIGRlZiBnZXRfdm1faXAoc2VsZik6DQo+ID4gKyAgICAgICAgIiIi DQo+ID4gKyAgICAgICAgR2V0IHRoZSBWTSBJUC4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAg ICAgICBOb3RJbXBsZW1lbnRlZA0KPiA+ICsNCj4gPiArICAgIGRlZiBzdGFydChzZWxmKToNCj4g PiArICAgICAgICAiIiINCj4gPiArICAgICAgICBTdGFydCBWTSBhbmQgaW5zdGFudGlhdGUgdGhl IFZNIHdpdGggVmlydER1dC4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBzZWxmLmNv bXBvc2VfYm9vdF9wYXJhbSgpDQo+ID4gKyAgICAgICAgdHJ5Og0KPiA+ICsgICAgICAgICAgICBz ZWxmLnN0YXJ0X3ZtKCkNCj4gPiArICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQo+ID4g KyAgICAgICAgICAgIHNlbGYuaG9zdF9sb2dnZXIuZXJyb3IoZSkNCj4gPiArICAgICAgICAgICAg cmV0dXJuIE5vbmUNCj4gPiArICAgICAgICB0cnk6DQo+ID4gKyAgICAgICAgICAgIHZtX2R1dCA9 IHNlbGYuaW5zdGFudGlhdGVfdm1fZHV0KCkNCj4gPiArICAgICAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6DQo+ID4gKyAgICAgICAgICAgIHNlbGYuaG9zdF9sb2dnZXIuZXJyb3IoZSkNCj4gPiAr ICAgICAgICAgICAgc2VsZi5zdG9wKCkNCj4gQWZ0ZXIgc3RvcCB2bSwgbmVlZCBjbGVhbiB1cCBy ZXNvdXJjZSBsaWtlIFZGcyBhbmQgY29yZXMuDQo+IA0KDQpJdCBzaG91bGQgYmUgZG9uZSwgdGhp cyBuZWVkIHNvbWUgZWZmb3J0cy4NCg0KPiA+ICsgICAgICAgICAgICByZXR1cm4gTm9uZQ0KPiA+ ICsgICAgICAgIHJldHVybiB2bV9kdXQNCj4gPiArDQo+ID4gKyAgICBkZWYgc3RhcnRfdm0oc2Vs Zik6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgU3RhcnQgVk0uDQo+ID4gKyAgICAg ICAgIiIiDQo+ID4gKyAgICAgICAgTm90SW1wbGVtZW50ZWQNCj4gPiArDQo+ID4gKyAgICBkZWYg aW5zdGFudGlhdGVfdm1fZHV0KHNlbGYpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAg IEluc3RhbnRpYXRlIHRoZSBEdXQgY2xhc3MgZm9yIFZNLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ ICsgICAgICAgIGNyYiA9IHNlbGYuaG9zdF9kdXQuY3JiLmNvcHkoKQ0KPiA+ICsgICAgICAgIGNy YlsnYnlwYXNzIGNvcmUwJ10gPSBGYWxzZQ0KPiA+ICsgICAgICAgIHZtX2lwID0gc2VsZi5nZXRf dm1faXAoKQ0KPiBOZWVkIGNoZWNrIHdoZXRoZXIgdm1faXAgdmFsaWQuDQo+IA0KDQpJdCBzaG91 bGQgYmUgZG9uZS4NCg0KPiA+ICsgICAgICAgIGNyYlsnSVAnXSA9IHZtX2lwDQo+ID4gKyAgICAg ICAgaWYgJzonIG5vdCBpbiB2bV9pcDoNCj4gPiArICAgICAgICAgICAgcmVtb3RlX2lwID0gdm1f aXAuc3RyaXAoKQ0KPiA+ICsgICAgICAgICAgICByZWRpcmVjdF9wb3J0ID0gJycNCj4gPiArICAg ICAgICBlbHNlOg0KPiA+ICsgICAgICAgICAgICByZW1vdGVfYWRkciA9IHZtX2lwLnNwbGl0KCc6 JykNCj4gPiArICAgICAgICAgICAgcmVtb3RlX2lwID0gcmVtb3RlX2FkZHJbMF0uc3RyaXAoKQ0K PiA+ICsgICAgICAgICAgICByZWRpcmVjdF9wb3J0ID0gcmVtb3RlX2FkZHJbMV0uc3RyaXAoKQ0K PiA+ICsgICAgICAgIHNlbGYuX19yZW1vdmVfb2xkX3JzYV9rZXkocmVtb3RlX2lwLCByZWRpcmVj dF9wb3J0KQ0KPiA+ICsNCj4gDQo+IFRoZXNlIGNvZGUgY2FuIGJlIG1vdmVkIHRvIGZ1bmN0aW9u ICJfX3JlbW92ZV9vbGRfcnNhX2tleSIuDQo+IA0KDQpZZXMsIGl0IGlzIGJldHRlci4NCg0KPiA+ ICsgICAgICAgIHNlcmlhbGl6ZXIgPSBzZWxmLmhvc3RfZHV0LnNlcmlhbGl6ZXINCj4gPiArDQo+ ID4gKyAgICAgICAgdHJ5Og0KPiA+ICsgICAgICAgICAgICB2bV9kdXQgPSBWaXJ0RHV0KA0KPiA+ ICsgICAgICAgICAgICAgICAgY3JiLA0KPiA+ICsgICAgICAgICAgICAgICAgc2VyaWFsaXplciwN Cj4gPiArICAgICAgICAgICAgICAgIHNlbGYudmlydF90eXBlLA0KPiA+ICsgICAgICAgICAgICAg ICAgc2VsZi52bV9uYW1lLA0KPiA+ICsgICAgICAgICAgICAgICAgc2VsZi5zdWl0ZSkNCj4gPiAr ICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQo+ID4gKyAgICAgICAgICAgIHJhaXNlIEV4 Y2VwdGlvbihlKQ0KPiANCj4gSWYgVmlydER1dCBpbnN0YW50aWF0aW9uIGZhaWxlZCwgIGZ1bmN0 aW9uIGluc3RhbnRpYXRlX3ZtX2R1dCBzaG91bGQNCj4gcmV0dXJuIGZhaWx1cmUgYW5kIHNob3Vs ZCBub3QgcnVuIHJlbWFpbmluZyBjb2Rlcy4NCj4gDQoNClllcywgZG8geW91IG1lYW4gSSBqdXN0 IG5lZWQgdG8gbG9nIHRoZSBlcnJvciBpbmZvIGFuZCByZXR1cm4gZmFpbHVyZT8NCg0KPiA+ICsg ICAgICAgIHZtX2R1dC5uaWNfdHlwZSA9ICdhbnknDQo+ID4gKyAgICAgICAgdm1fZHV0LnRlc3Rl ciA9IHNlbGYuaG9zdF9kdXQudGVzdGVyDQo+ID4gKyAgICAgICAgdm1fZHV0Lmhvc3RfZHV0ID0g c2VsZi5ob3N0X2R1dA0KPiA+ICsgICAgICAgIHZtX2R1dC5ob3N0X3Nlc3Npb24gPSBzZWxmLmhv c3Rfc2Vzc2lvbg0KPiA+ICsNCj4gPiArICAgICAgICByZWFkX2NhY2hlID0gRmFsc2UNCj4gPiAr ICAgICAgICBza2lwX3NldHVwID0gc2VsZi5ob3N0X2R1dC5za2lwX3NldHVwDQo+ID4gKyAgICAg ICAgYmFzZV9kaXIgPSBzZWxmLmhvc3RfZHV0LmJhc2VfZGlyDQo+ID4gKyAgICAgICAgdm1fZHV0 LnNldF9zcGVlZHVwX29wdGlvbnMocmVhZF9jYWNoZSwgc2tpcF9zZXR1cCkNCj4gPiArICAgICAg ICBmdW5jX29ubHkgPSBzZWxmLmhvc3RfZHV0LndhbnRfZnVuY190ZXN0cw0KPiA+ICsgICAgICAg IHBlcmZfb25seSA9IHNlbGYuaG9zdF9kdXQud2FudF9wZXJmX3Rlc3RzDQo+ID4gKyAgICAgICAg dm1fZHV0LnNldF90ZXN0X3R5cGVzKGZ1bmNfdGVzdHM9ZnVuY19vbmx5LA0KPiBwZXJmX3Rlc3Rz PXBlcmZfb25seSkNCj4gPiArICAgICAgICAjIGJhc2VfZGlyIHNob3VsZCBiZSBzZXQgYmVmb3Jl IHByZXJlcXVpc2l0ZXMNCj4gPiArICAgICAgICB2bV9kdXQuc2V0X2RpcmVjdG9yeShiYXNlX2Rp cikNCj4gPiArDQo+ID4gKyAgICAgICAgIyBzZXR0aW5nIHVwIGRwZGsgaW4gdm0sIG11c3QgY2Fs bCBhdCBsYXN0DQo+ID4gKyAgICAgICAgdm1fZHV0LnByZXJlcXVpc2l0ZXMoZHRzLlBhY2thZ2Us IGR0cy5QYXRjaGVzKQ0KPiA+ICsNCj4gUHJlcmVxdWlzaXRlcyBtYXliZSBmYWlsZWQsIG5lZWQg YWRkIGNoZWNrIGhlcmUuDQo+IA0KPiA+ICsgICAgICAgIHRhcmdldCA9IHNlbGYuaG9zdF9kdXQu dGFyZ2V0DQo+ID4gKyAgICAgICAgaWYgdGFyZ2V0Og0KPiA+ICsgICAgICAgICAgICB2bV9kdXQu c2V0X3RhcmdldCh0YXJnZXQpDQo+ID4gKyAgICAgICAgZWxzZToNCj4gPiArICAgICAgICAgICAg cmFpc2UgRXhjZXB0aW9uKCJDYW5ub3QgZ2V0IHRoZSBIT1NUIERVVCB0ZXN0IHRhcmdldCEiKQ0K PiA+ICsNCj4gPiArICAgICAgICByZXR1cm4gdm1fZHV0DQo+ID4gKw0KPiA+ICsgICAgZGVmIF9f cmVtb3ZlX29sZF9yc2Ffa2V5KHNlbGYsIHJlbW90ZV9pcCwgcmVkaXJlY3RfcG9ydCk6DQo+ID4g KyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgUmVtb3ZlIHRoZSBvbGQgUlNBIGtleSBvZiBzcGVj aWZpZWQgcmVtb3RlIElQLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIHJzYV9rZXlf cGF0aCA9ICJ+Ly5zc2gva25vd25faG9zdHMiDQo+ID4gKyAgICAgICAgaWYgcmVkaXJlY3RfcG9y dDoNCj4gPiArICAgICAgICAgICAgcmVtb3ZlX3JzYV9rZXlfY21kID0gInNlZCAtaSAnL15cWyVz XF06JWQvZCcgJXMiICUgXA0KPiA+ICsgICAgICAgICAgICAgICAgKHJlbW90ZV9pcC5zdHJpcCgp LCBpbnQoDQo+ID4gKyAgICAgICAgICAgICAgICAgcmVkaXJlY3RfcG9ydCksIHJzYV9rZXlfcGF0 aCkNCj4gPiArICAgICAgICBlbHNlOg0KPiA+ICsgICAgICAgICAgICByZW1vdmVfcnNhX2tleV9j bWQgPSAic2VkIC1pICcvXiVzL2QnICVzIiAlIFwNCj4gPiArICAgICAgICAgICAgICAgIChyZW1v dGVfaXAuc3RyaXAoKSwgcnNhX2tleV9wYXRoKQ0KPiA+ICsgICAgICAgIHNlbGYuaG9zdF9kdXQu dGVzdGVyLnNlbmRfZXhwZWN0KHJlbW92ZV9yc2Ffa2V5X2NtZCwgIiMgIikNCj4gPiArDQo+ID4g KyAgICBkZWYgc3RvcChzZWxmKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBTdG9w IHRoZSBWTSBieSB0aGUgbmFtZSBvZiBWTS4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAg ICBOb3RJbXBsZW1lbnRlZA0KPiA+IGRpZmYgLS1naXQgYS9mcmFtZXdvcmsvdmlydF9kdXQucHkg Yi9mcmFtZXdvcmsvdmlydF9kdXQucHkNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDAwMDAwMDAuLjEwNzMyNTMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZnJhbWV3 b3JrL3ZpcnRfZHV0LnB5DQo+ID4gQEAgLTAsMCArMSwyMzkgQEANCj4gPiArIyBCU0QgTElDRU5T RQ0KPiA+ICsjDQo+ID4gKyMgQ29weXJpZ2h0KGMpIDIwMTAtMjAxNSBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArIyBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ ICsjDQo+ID4gKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ID4gKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQo+ID4gKyMgYXJlIG1ldDoN Cj4gPiArIw0KPiA+ICsjICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KPiA+ICsjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQo+ID4gKyMgICAqIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCj4g Y29weXJpZ2h0DQo+ID4gKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KPiBpbg0KPiA+ICsjICAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQo+ID4gKyMgICAg IGRpc3RyaWJ1dGlvbi4NCj4gPiArIyAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jw b3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KPiA+ICsjICAgICBjb250cmlidXRvcnMgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQo+IGRlcml2ZWQNCj4gPiAr IyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLg0KPiA+ICsjDQo+ID4gKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EDQo+IENPTlRSSUJVVE9SUw0KPiA+ICsjICJBUyBJUyIg QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U DQo+ID4gKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MNCj4gRk9SDQo+ID4gKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KPiBDT1BZUklHSFQNCj4gPiArIyBP V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwN Cj4gSU5DSURFTlRBTCwNCj4gPiArIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQo+ID4gKyMgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRg0KPiBVU0UsDQo+ ID4gKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS IENBVVNFRCBBTkQgT04NCj4gQU5ZDQo+ID4gKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1INCj4gVE9SVA0KPiA+ICsjIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFDQo+IFVTRQ0KPiA+ICsjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSA0KPiBEQU1BR0UuDQo+ID4gKw0KPiA+ICtpbXBvcnQgb3MN Cj4gPiAraW1wb3J0IHJlDQo+ID4gK2ltcG9ydCB0aW1lDQo+ID4gK2ltcG9ydCBkdHMNCj4gPiAr aW1wb3J0IHNldHRpbmdzDQo+ID4gK2Zyb20gY29uZmlnIGltcG9ydCBQb3J0Q29uZg0KPiA+ICtm cm9tIHNldHRpbmdzIGltcG9ydCBOSUNTLCBMT0dfTkFNRV9TRVANCj4gPiArZnJvbSBzc2hfY29u bmVjdGlvbiBpbXBvcnQgU1NIQ29ubmVjdGlvbg0KPiA+ICtmcm9tIHByb2plY3RfZHBkayBpbXBv cnQgRFBES2R1dA0KPiA+ICtmcm9tIGR1dCBpbXBvcnQgRHV0DQo+ID4gK2Zyb20gbmV0X2Rldmlj ZSBpbXBvcnQgTmV0RGV2aWNlDQo+ID4gK2Zyb20gbG9nZ2VyIGltcG9ydCBnZXRMb2dnZXINCj4g PiArDQo+ID4gKw0KPiA+ICtjbGFzcyBWaXJ0RHV0KERQREtkdXQpOg0KPiA+ICsNCj4gPiArICAg ICIiIg0KPiA+ICsgICAgQSBjb25uZWN0aW9uIHRvIHRoZSBDUkIgdW5kZXIgdGVzdC4NCj4gPiAr ICAgIFRoaXMgY2xhc3Mgc2VuZHMgY29tbWFuZHMgdG8gdGhlIENSQiBhbmQgdmFsaWRhdGVzIHRo ZSByZXNwb25zZXMuDQo+IEl0DQo+ID4gaXMNCj4gPiArICAgIGltcGxlbWVudGVkIHVzaW5nIGVp dGhlciBzc2ggZm9yIGxpbnV4YXBwIG9yIHRoZSB0ZXJtaW5hbCBzZXJ2ZXINCj4gZm9yDQo+ID4g KyAgICBiYXJlbWV0YWwuDQo+ID4gKyAgICBBbGwgb3BlcmF0aW9ucyBhcmUgaW4gZmFjdCBkZWxl Z2F0ZWQgdG8gYW4gaW5zdGFuY2Ugb2YgZWl0aGVyDQo+ID4gQ1JCTGludXhBcHANCj4gPiArICAg IG9yIENSQkJhcmVNZXRhbC4NCj4gPiArICAgICIiIg0KPiA+ICsNCj4gPiArICAgIGRlZiBfX2lu aXRfXyhzZWxmLCBjcmIsIHNlcmlhbGl6ZXIsIHZpcnR0eXBlLCB2bV9uYW1lLCBzdWl0ZSk6DQo+ ID4gKyAgICAgICAgc3VwZXIoRHV0LCBzZWxmKS5fX2luaXRfXyhjcmIsIHNlcmlhbGl6ZXIpDQo+ ID4gKyAgICAgICAgc2VsZi52bV9pcCA9IHNlbGYuZ2V0X2lwX2FkZHJlc3MoKQ0KPiA+ICsgICAg ICAgIHNlbGYuTkFNRSA9ICd2aXJ0ZHV0JyArIExPR19OQU1FX1NFUCArICclcycgJSBzZWxmLnZt X2lwDQo+ID4gKyAgICAgICAgIyBsb2FkIHBvcnQgY29uZmlnIGZyb20gc3VpdGUgY2ZnDQo+ID4g KyAgICAgICAgc2VsZi5zdWl0ZSA9IHN1aXRlDQo+ID4gKyAgICAgICAgc2VsZi5sb2dnZXIgPSBn ZXRMb2dnZXIoc2VsZi5OQU1FKQ0KPiA+ICsgICAgICAgIHNlbGYubG9nZ2VyLmNvbmZpZ19leGVj dXRpb24oJ3ZtZHV0JykNCj4gPiArICAgICAgICBzZWxmLnNlc3Npb24gPSBTU0hDb25uZWN0aW9u KHNlbGYudm1faXAsIHNlbGYuTkFNRSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNlbGYuZ2V0X3Bhc3N3b3JkKCkpDQo+ID4gKyAgICAgICAgc2VsZi5zZXNzaW9u LmluaXRfbG9nKHNlbGYubG9nZ2VyKQ0KPiA+ICsNCj4gPiArICAgICAgICAjIGlmIHJlZGlyZWN0 IHNzaCBwb3J0LCB0aGVyZSdzIG9ubHkgb25lIHNlc3Npb24gZW5hYmxlZA0KPiA+ICsgICAgICAg IHNlbGYuYWx0X3Nlc3Npb24gPSBTU0hDb25uZWN0aW9uKHNlbGYudm1faXAsIHNlbGYuTkFNRSAr DQo+ICdfYWx0JywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzZWxmLmdldF9wYXNzd29yZCgpKQ0KPiA+ICsgICAgICAgIHNlbGYuYWx0X3Nlc3Npb24uaW5p dF9sb2coc2VsZi5sb2dnZXIpDQo+ID4gKw0KPiA+ICsgICAgICAgIHNlbGYubnVtYmVyX29mX2Nv cmVzID0gMA0KPiA+ICsgICAgICAgIHNlbGYudGVzdGVyID0gTm9uZQ0KPiA+ICsgICAgICAgIHNl bGYuY29yZXMgPSBbXQ0KPiA+ICsgICAgICAgIHNlbGYuYXJjaGl0ZWN0dXJlID0gTm9uZQ0KPiA+ ICsgICAgICAgIHNlbGYucG9ydHNfaW5mbyA9IE5vbmUNCj4gPiArICAgICAgICBzZWxmLnBvcnRz X21hcCA9IFtdDQo+ID4gKyAgICAgICAgc2VsZi52aXJ0dHlwZSA9IHZpcnR0eXBlDQo+ID4gKyAg ICAgICAgc2VsZi52bXR5cGUgPSAnJw0KPiA+ICsgICAgICAgIGlmIHNlbGYudmlydHR5cGUgPT0g J1hFTic6DQo+ID4gKyAgICAgICAgICAgIHNlbGYudm10eXBlID0gJ2RvbXUnDQo+IA0KPiBDaGFu Z2UgdmlydHR5cGUgdG8gdmlydF90eXBlLCBhbmQgd2h5IG5vdCBjaGVjayBvbmx5IGJ5IHZpcnRf dHlwZT8NCj4gV2hhdCdzIHRoZSBkaWZmZXJlbmNlIG9mIHZtdHlwZT8NCj4gDQoNCkkgbmVlZCB0 byBjaGVjayBpdCB3aXRoIEh1aWxvbmcuDQoNCj4gPiArICAgICAgICAgICAgc2VsZi52aXJ0dHlw ZSA9ICdob3N0Jw0KPiA+ICsNCj4gPiArICAgIGRlZiBzZXRfbmljX3R5cGUoc2VsZiwgbmljX3R5 cGUpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIFNldCBDUkIgTklDUyByZWFkeSB0 byB2YWxpZGF0ZWQuDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgc2VsZi5uaWNfdHlw ZSA9IG5pY190eXBlDQo+ID4gKyAgICAgICAgIyB2bV9kdXQgY29uZmlnIHdpbGwgbG9hZCBmcm9t IHZtIGNvbmZpZ3VyYXRpb24gZmlsZQ0KPiA+ICsNCj4gPiArICAgIGRlZiBsb2FkX3BvcnRjb25m KHNlbGYpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIExvYWQgcG9ydCBjb25maWcg Zm9yIHRoaXMgdmlydHVhbCBtYWNoaW5lDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAg cmV0dXJuDQo+ID4gKw0KPiA+ICsgICAgZGVmIHNldF90YXJnZXQoc2VsZiwgdGFyZ2V0KToNCj4g PiArICAgICAgICAiIiINCj4gPiArICAgICAgICBTZXQgZW52IHZhcmlhYmxlLCB0aGVzZSBoYXZl IHRvIGJlIHNldHVwIGFsbCB0aGUgdGltZS4gU29tZQ0KPiB0ZXN0cw0KPiA+ICsgICAgICAgIG5l ZWQgdG8gY29tcGlsZSBleGFtcGxlIGFwcHMgYnkgdGhlbXNlbHZlcyBhbmQgd2lsbCBmYWlsDQo+ ID4gb3RoZXJ3aXNlLg0KPiA+ICsgICAgICAgIFNldCBodWdlcGFnZSBvbiBEVVQgYW5kIGluc3Rh bGwgbW9kdWxlcyByZXF1aXJlZCBieSBEUERLLg0KPiA+ICsgICAgICAgIENvbmZpZ3VyZSBkZWZh dWx0IGl4Z2JlIFBNRCBmdW5jdGlvbi4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBz ZWxmLnNldF90b29sY2hhaW4odGFyZ2V0KQ0KPiA+ICsNCj4gPiArICAgICAgICAjIHNldCBlbnYg dmFyaWFibGUNCj4gPiArICAgICAgICAjIFRoZXNlIGhhdmUgdG8gYmUgc2V0dXAgYWxsIHRoZSB0 aW1lLiBTb21lIHRlc3RzIG5lZWQgdG8NCj4gY29tcGlsZQ0KPiA+ICsgICAgICAgICMgZXhhbXBs ZSBhcHBzIGJ5IHRoZW1zZWx2ZXMgYW5kIHdpbGwgZmFpbCBvdGhlcndpc2UuDQo+ID4gKyAgICAg ICAgc2VsZi5zZW5kX2V4cGVjdCgiZXhwb3J0IFJURV9UQVJHRVQ9IiArIHRhcmdldCwgIiMiKQ0K PiA+ICsgICAgICAgIHNlbGYuc2VuZF9leHBlY3QoImV4cG9ydCBSVEVfU0RLPWBwd2RgIiwgIiMi KQ0KPiA+ICsNCj4gPiArICAgICAgICBpZiBub3Qgc2VsZi5za2lwX3NldHVwOg0KPiA+ICsgICAg ICAgICAgICBzZWxmLmJ1aWxkX2luc3RhbGxfZHBkayh0YXJnZXQpDQo+ID4gKw0KPiA+ICsgICAg ICAgIHNlbGYuc2V0dXBfbWVtb3J5KGh1Z2VwYWdlcz01MTIpDQo+IDUxMk0gbWF5YmUgbm90IGF2 YWlsYWJsZSwgdGhpcyB2YWx1ZSBzaG91bGQgY2FsY3VsYXRlZCBieSB2aXJ0dWFsDQo+IG1hY2hp bmUgbWVtb3J5IHNpemUgb3IgdmFsdWUgc3RyaXBwZWQgZnJvbSBjb25maWd1cmF0aW9uIGZpbGUu DQo+IA0KDQpZb3UgYXJlIHJpZ2h0LCBpdCB3aWxsIGJlIGRvbmUgbmV4dCB2ZXJzaW9uLg0KDQo+ ID4gKyAgICAgICAgc2VsZi5zZXR1cF9tb2R1bGVzKHRhcmdldCkNCj4gPiArDQo+ID4gKyAgICAg ICAgc2VsZi5iaW5kX2ludGVyZmFjZXNfbGludXgoJ2lnYl91aW8nKQ0KPiANCj4gTW9kdWxlIHNo b3VsZCBhbHNvIHN0cmlwcGVkIGZyb20gY29uZmlndXJhdGlvbiBmaWxlLg0KPiANCg0KV2hhdGBz IG1lYW5pbmc/DQoNCj4gPiArDQo+ID4gKyAgICBkZWYgcHJlcmVxdWlzaXRlcyhzZWxmLCBwa2dO YW1lLCBwYXRjaCk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgUHJlcmVxdWVzdCBm dW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBleGVjdXRlIGFueSB0ZXN0DQo+IGNhc2Uu DQo+ID4gKyAgICAgICAgV2lsbCBjYWxsIGZ1bmN0aW9uIHRvIHNjYW4gYWxsIGxjb3JlJ3MgaW5m b3JtYXRpb24gd2hpY2ggb24NCj4gRFVULg0KPiA+ICsgICAgICAgIFRoZW4gY2FsbCBwY2kgc2Nh biBmdW5jdGlvbiB0byBjb2xsZWN0IG5pYyBkZXZpY2UNCj4gaW5mb3JtYXRpb24uDQo+ID4gKyAg ICAgICAgQXQgbGFzdCBzZXR1cCBEVVQnIGVudmlyb25tZW50IGZvciB2YWxpZGF0aW9uLg0KPiA+ ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIHNlbGYucHJlcGFyZV9wYWNrYWdlKHBrZ05hbWUs IHBhdGNoKQ0KPiA+ICsNCj4gPiArICAgICAgICBzZWxmLnNlbmRfZXhwZWN0KCJjZCAlcyIgJSBz ZWxmLmJhc2VfZGlyLCAiIyAiKQ0KPiA+ICsgICAgICAgIHNlbGYuaG9zdF9zZXNzaW9uLnNlbmRf ZXhwZWN0KCJjZCAlcyIgJSBzZWxmLmJhc2VfZGlyLCAiIyAiKQ0KPiA+ICsgICAgICAgIHNlbGYu c2VuZF9leHBlY3QoImFsaWFzIGxzPSdscyAtLWNvbG9yPW5vbmUnIiwgIiMiKQ0KPiA+ICsNCj4g PiArICAgICAgICBpZiBzZWxmLmdldF9vc190eXBlKCkgPT0gJ2ZyZWVic2QnOg0KPiA+ICsgICAg ICAgICAgICBzZWxmLnNlbmRfZXhwZWN0KCdhbGlhcyBtYWtlPWdtYWtlJywgJyMgJykNCj4gPiAr ICAgICAgICAgICAgc2VsZi5zZW5kX2V4cGVjdCgnYWxpYXMgc2VkPWdzZWQnLCAnIyAnKQ0KPiA+ ICsNCj4gV2UgZG8gbm90IHN1cHBvcnQgZnJlZWJzZCBndWVzdCwgdGhvc2UgY29kZSBzaG91bGQg cmVtb3ZlZC4NCj4gDQoNCkl0IHdpbGwgYmUgZG9uZS4NCg0KPiA+ICsgICAgICAgIHNlbGYuaW5p dF9jb3JlX2xpc3QoKQ0KPiA+ICsgICAgICAgIHNlbGYucGNpX2RldmljZXNfaW5mb3JtYXRpb24o KQ0KPiA+ICsNCj4gPiArICAgICAgICAjIHNjYW4gcG9ydHMgYmVmb3JlIHJlc3RvcmUgaW50ZXJm YWNlDQo+ID4gKyAgICAgICAgc2VsZi5zY2FuX3BvcnRzKCkNCj4gPiArICAgICAgICAjIHJlc3Rv cmUgZHV0IHBvcnRzIHRvIGtlcm5lbA0KPiA+ICsgICAgICAgIGlmIHNlbGYudm10eXBlICE9ICdk b211JzoNCj4gPiArICAgICAgICAgICAgc2VsZi5yZXN0b3JlX2ludGVyZmFjZXMoKQ0KPiA+ICsg ICAgICAgIGVsc2U6DQo+ID4gKyAgICAgICAgICAgIHNlbGYucmVzdG9yZV9pbnRlcmZhY2VzX2Rv bXUoKQ0KPiA+ICsgICAgICAgICMgcmVzY2FuIHBvcnRzIGFmdGVyIGludGVyZmFjZSB1cA0KPiBE dXBsaWNhdGVkIGNvbmNlcHQgd2l0aCB2aXJ0X3R5cGUuIElmIGZ1bmN0aW9ucyBkaWZmZXJlbnQg YmV0d2Vlbg0KPiBoeXBlcnZpc29ycywgd2UgbmVlZCBpbXBsZW1lbnRlZCB0aGVtIGluIHFlbXVf e3ZpcnRfdHlwZX0uDQo+IA0KDQpSaWdodCwgaXQgd2lsbCBiZSBkb25lLg0KDQoNCj4gPiArICAg ICAgICBzZWxmLnJlc2Nhbl9wb3J0cygpDQo+ID4gKw0KPiA+ICsgICAgICAgICMgbm8gbmVlZCB0 byByZXNjYW4gcG9ydHMgZm9yIGd1ZXN0IG9zIGp1c3QgYm9vdHVwDQo+ID4gKyAgICAgICAgIyBs b2FkIHBvcnQgaW5mb3IgZnJvbSBjb25maWcgZmlsZQ0KPiA+ICsgICAgICAgIHNlbGYubG9hZF9w b3J0Y29uZigpDQo+ID4gKw0KPiBOZWVkIGNoZWNrIHdoZXRoZXIgbG9hZCBmYWlsZWQuDQo+IA0K DQpSaWdodCwgaXQgd2lsbCBiZSBkb25lLg0KDQo+ID4gKyAgICAgICAgIyBlbmFibGUgdGVzdGVy IHBvcnQgaXB2Ng0KPiA+ICsgICAgICAgIHNlbGYuaG9zdF9kdXQuZW5hYmxlX3Rlc3Rlcl9pcHY2 KCkNCj4gPiArICAgICAgICBzZWxmLm1vdW50X3Byb2NmcygpDQo+ID4gKyAgICAgICAgIyBhdXRv IGRldGVjdCBuZXR3b3JrIHRvcG9sb2d5DQo+ID4gKyAgICAgICAgc2VsZi5tYXBfYXZhaWxhYmxl X3BvcnRzKCkNCj4gPiArICAgICAgICAjIGRpc2FibGUgdGVzdGVyIHBvcnQgaXB2Ng0KPiA+ICsg ICAgICAgIHNlbGYuaG9zdF9kdXQuZGlzYWJsZV90ZXN0ZXJfaXB2NigpDQo+ID4gKw0KPiA+ICsg ICAgICAgICMgcHJpbnQgbGF0ZXN0IHBvcnRzX2luZm8NCj4gPiArICAgICAgICBmb3IgcG9ydF9p bmZvIGluIHNlbGYucG9ydHNfaW5mbzoNCj4gPiArICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5m byhwb3J0X2luZm8pDQo+ID4gKw0KPiA+ICsgICAgZGVmIHJlc3RvcmVfaW50ZXJmYWNlc19kb211 KHNlbGYpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIFJlc3RvcmUgTGludXggaW50 ZXJmYWNlcy4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBmb3IgcG9ydCBpbiBzZWxm LnBvcnRzX2luZm86DQo+ID4gKyAgICAgICAgICAgIHBjaV9idXMgPSBwb3J0WydwY2knXQ0KPiA+ ICsgICAgICAgICAgICBwY2lfaWQgPSBwb3J0Wyd0eXBlJ10NCj4gPiArICAgICAgICAgICAgZHJp dmVyID0gc2V0dGluZ3MuZ2V0X25pY19kcml2ZXIocGNpX2lkKQ0KPiA+ICsgICAgICAgICAgICBp ZiBkcml2ZXIgaXMgbm90IE5vbmU6DQo+ID4gKyAgICAgICAgICAgICAgICBhZGRyX2FycmF5ID0g cGNpX2J1cy5zcGxpdCgnOicpDQo+ID4gKyAgICAgICAgICAgICAgICBidXNfaWQgPSBhZGRyX2Fy cmF5WzBdDQo+ID4gKyAgICAgICAgICAgICAgICBkZXZmdW5faWQgPSBhZGRyX2FycmF5WzFdDQo+ ID4gKyAgICAgICAgICAgICAgICBwb3J0ID0gTmV0RGV2aWNlKHNlbGYsIGJ1c19pZCwgZGV2ZnVu X2lkKQ0KPiANCj4gUG9ydCBvYmplY3QgaXMgdGVtcG9yYXJ5IHVzZWQsIHdoeSB1c2UgTmV0RGV2 aWNlIG1vZHVsZSBjcmVhdGUgYW5vdGhlcg0KPiBvbmU/IFdlIGNhbiBqdXN0IHVzZSBwb3J0Wydw b3J0J10gdG8gdXNlIE5ldERldmljZSBvYmplY3QuDQoNClJpZ2h0LCBpdCB3aWxsIGJlIHJlcGxh Y2VkLg0KDQo+ID4gKyAgICAgICAgICAgICAgICBpdGYgPSBwb3J0LmdldF9pbnRlcmZhY2VfbmFt ZSgpDQo+ID4gKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfZXhwZWN0KCJpZmNvbmZpZyAlcyB1 cCIgJSBpdGYsICIjICIpDQo+ID4gKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDMwKQ0KPiAN Cj4gU2xlZXAgMzAgc2Vjb25kcyBpcyB0b28gbG9uZyBhbmQgZXZlcnkgcG9ydCB3aWxsIHdhaXQg c28gbG9uZy4gSXMgdGhlcmUNCj4gYW55IG5lZWQgdG8gd2FpdCBzbyBsb25nPyBXZSBzaG91bGQg Y2FsbCBhbGwgcG9ydHMgdXAgYW5kIHRoZW4gd2FpdCBmZXcNCj4gc2Vjb25kcy4NCg0KSSB3aWxs IGNoZWNrIGl0Lg0KDQo+ID4gKyAgICAgICAgICAgICAgICBwcmludCBzZWxmLnNlbmRfZXhwZWN0 KCJpcCBsaW5rIGxzICVzIiAlIGl0ZiwgIiMgIikNCj4gPiArICAgICAgICAgICAgZWxzZToNCj4g PiArICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIk5PVCBGT1VORCBEUklWRVIgRk9SIFBPUlQgKCVzfCVzKSEhISIgJQ0KPiAocGNpX2J1 cywNCj4gPiBwY2lfaWQpKQ0KPiA+ICsNCj4gPiArICAgIGRlZiBwY2lfZGV2aWNlc19pbmZvcm1h dGlvbihzZWxmKToNCj4gPiArICAgICAgICBzZWxmLnBjaV9kZXZpY2VzX2luZm9ybWF0aW9uX3Vu Y2FjaGVkKCkNCj4gPiArDQo+ID4gKyAgICBkZWYgZ2V0X21lbW9yeV9jaGFubmVscyhzZWxmKToN Cj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBWaXJ0dWFsIG1hY2hpbmUgaGFzIG5vIG1l bW9yeSBjaGFubmVsIGNvbmNlcHQsIHNvIGFsd2F5cw0KPiByZXR1cm4gMQ0KPiA+ICsgICAgICAg ICIiIg0KPiA+ICsgICAgICAgIHJldHVybiAxDQo+ID4gKw0KPiA+ICsgICAgZGVmIGNoZWNrX3Bv cnRzX2F2YWlsYWJsZShzZWxmLCBwY2lfYnVzLCBwY2lfaWQpOg0KPiA+ICsgICAgICAgICIiIg0K PiA+ICsgICAgICAgIENoZWNrIHRoYXQgd2hldGhlciBhdXRvIHNjYW5uZWQgcG9ydHMgcmVhZHkg dG8gdXNlDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgcGNpX2FkZHIgPSAiJXM6JXMi ICUgKHBjaV9idXMsIHBjaV9pZCkNCj4gPiArICAgICAgICBpZiBwY2lfaWQgPT0gIjgwODY6MTAw ZSI6DQo+ID4gKyAgICAgICAgICAgIHJldHVybiBGYWxzZQ0KPiANCj4gV2h5IGUxMDAwIGRlZmF1 bHQgcGNpX2lkIGlzIGludmFsaWRlZCwgbmVlZCBjb21tZW50cyBoZXJlLg0KPiANCg0KT2ssIGl0 IHdpbGwgYmUgY2hlY2tlZC4NCg0KPiA+ICsgICAgICAgIHJldHVybiBUcnVlDQo+ID4gKyAgICAg ICAgIyBwY2lfYWRkciA9ICIlczolcyIgJSAocGNpX2J1cywgcGNpX2lkKQ0KPiA+ICsgICAgICAg ICMgaWYgc2VsZi5uaWNfdHlwZSA9PSAnYW55JzoNCj4gPiArICAgICAgICAjIGxvYWQgdm0gcG9y dCBjb25mIG5lZWQgYW5vdGhlciBmdW5jdGlvbg0KPiA+ICsgICAgICAgICMgbmVlZCBhZGQgdml0 cnVhbCBmdW5jdGlvbiBkZXZpY2UgaW50byBOSUNTDQo+IA0KPiBNaXNzaW5nIGZ1bmN0aW9ucyBo ZXJlLg0KPiANCg0KSXQgc2hvdWxkIGJlIGNoZWNrZWQgaGVyZS4NCg0KPiA+ICsNCj4gPiArICAg IGRlZiBzY2FuX3BvcnRzKHNlbGYpOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIFNj YW4gcG9ydHMgaW5mb3JtYXRpb24sIGZvciB2bSB3aWxsIGFsd2F5cyBzY2FuDQo+ID4gKyAgICAg ICAgIiIiDQo+ID4gKyAgICAgICAgc2VsZi5zY2FuX3BvcnRzX3VuY2FjaGVkKCkNCj4gPiArDQo+ ID4gKyAgICBkZWYgc2Nhbl9wb3J0c191bmNhY2hlZChzZWxmKToNCj4gPiArICAgICAgICAiIiIN Cj4gPiArICAgICAgICBTY2FuIHBvcnRzIGFuZCBjb2xsZWN0IHBvcnQncyBwY2kgaWQsIG1hYyBh ZHJlc3MsIGlwdjYNCj4gYWRkcmVzcy4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBz Y2FuX3BvcnRzX3VuY2FjaGVkID0gZ2V0YXR0cigNCj4gPiArICAgICAgICAgICAgc2VsZiwgJ3Nj YW5fcG9ydHNfdW5jYWNoZWRfJXMnICUgc2VsZi5nZXRfb3NfdHlwZSgpKQ0KPiA+ICsgICAgICAg IHJldHVybiBzY2FuX3BvcnRzX3VuY2FjaGVkKCkNCj4gPiArDQo+ID4gKyAgICBkZWYgbWFwX2F2 YWlsYWJsZV9wb3J0cyhzZWxmKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBMb2Fk IG9yIGdlbmVyYXRlIG5ldHdvcmsgY29ubmVjdGlvbiBtYXBwaW5nIGxpc3QuDQo+ID4gKyAgICAg ICAgIiIiDQo+ID4gKyAgICAgICAgc2VsZi5tYXBfYXZhaWxhYmxlX3BvcnRzX3VuY2FjaGVkKCkN Cj4gPiArICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCJEVVQgUE9SVCBNQVA6ICIgKyBzdHIo c2VsZi5wb3J0c19tYXApKQ0KPiA+ICsNCj4gPiArICAgIGRlZiBzZW5kX3Bpbmc2KHNlbGYsIGxv Y2FsUG9ydCwgaXB2NiwgbWFjPScnKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBT ZW5kIHBpbmc2IHBhY2tldCBmcm9tIGxvY2FsIHBvcnQgd2l0aCBkZXN0aW5hdGlvbiBpcHY2DQo+ IGFkZHJlc3MuDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgaWYgc2VsZi5wb3J0c19p bmZvW2xvY2FsUG9ydF1bJ3R5cGUnXSA9PSAnaXhpYSc6DQo+ID4gKyAgICAgICAgICAgIHBhc3MN Cj4gPiArICAgICAgICBlbHNlOg0KPiA+ICsgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2V4 cGVjdCgicGluZzYgLXcgMSAtYyAxIC1BIC1JICVzICVzIiAlDQo+ID4gKHNlbGYucG9ydHNfaW5m b1tsb2NhbFBvcnRdWydpbnRmJ10sIGlwdjYpLCAiIyAiLCAxMCkNCj4gPiBkaWZmIC0tZ2l0IGEv ZnJhbWV3b3JrL3ZpcnRfcmVzb3VyY2UucHkgYi9mcmFtZXdvcmsvdmlydF9yZXNvdXJjZS5weQ0K PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uODU2ZjlkYw0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9mcmFtZXdvcmsvdmlydF9yZXNvdXJjZS5weQ0KPiA+ IEBAIC0wLDAgKzEsNDg2IEBADQo+ID4gKyMhL3Vzci9iaW4vcHl0aG9uDQo+ID4gKyMgQlNEIExJ Q0VOU0UNCj4gPiArIw0KPiA+ICsjIENvcHlyaWdodChjKSAyMDEwLTIwMTUgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4N Cj4gPiArIw0KPiA+ICsjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KPiA+ICsjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KPiA+ICsjIGFyZSBt ZXQ6DQo+ID4gKyMNCj4gPiArIyAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4gPiArIyAgICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KPiA+ICsjICAg KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl DQo+IGNvcHlyaWdodA0KPiA+ICsjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCj4gaW4NCj4gPiArIyAgICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KPiA+ICsj ICAgICBkaXN0cmlidXRpb24uDQo+ID4gKyMgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwg Q29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCj4gPiArIyAgICAgY29udHJpYnV0b3Jz IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KPiBkZXJpdmVkDQo+ ID4gKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4NCj4gPiArIw0KPiA+ICsjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORA0KPiBDT05UUklCVVRPUlMNCj4gPiArIyAiQVMg SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVA0KPiA+ICsjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTDQo+IEZPUg0KPiA+ICsjIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCj4gQ09QWVJJR0hUDQo+ID4g KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsDQo+IElOQ0lERU5UQUwsDQo+ID4gKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KPiA+ICsjIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YNCj4gVVNF LA0KPiA+ICsjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X RVZFUiBDQVVTRUQgQU5EIE9ODQo+IEFOWQ0KPiA+ICsjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SDQo+IFRPUlQNCj4gPiArIyAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRQ0KPiBVU0UNCj4gPiArIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gNCj4gREFNQUdFLg0KPiA+ICtmcm9tIHJhbmRvbSBp bXBvcnQgcmFuZGludA0KPiA+ICsNCj4gPiArZnJvbSB1dGlscyBpbXBvcnQgZ2V0X29ial9mdW5j cw0KPiA+ICsNCj4gPiArSU5JVF9GUkVFX1BPUlQgPSA2MDYwDQo+ID4gKw0KPiA+ICsNCj4gPiAr Y2xhc3MgVmlydFJlc291cmNlKG9iamVjdCk6DQo+ID4gKw0KPiA+ICsgICAgIiIiDQo+ID4gKyAg ICBDbGFzcyBoYW5kbGUgZHV0IHJlc291cmNlLCBsaWtlIGNwdSwgbWVtb3J5LCBuZXQgZGV2aWNl cw0KPiA+ICsgICAgIiIiDQo+ID4gKw0KPiA+ICsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGR1dCk6 DQo+ID4gKyAgICAgICAgc2VsZi5kdXQgPSBkdXQNCj4gPiArDQo+ID4gKyAgICAgICAgc2VsZi5j b3JlcyA9IFtpbnQoY29yZVsndGhyZWFkJ10pIGZvciBjb3JlIGluIGR1dC5jb3Jlc10NCj4gPiAr ICAgICAgICAjIGluaXRpYWxpemVkIHVudXNlZCBjb3Jlcw0KPiA+ICsgICAgICAgIHNlbGYudW51 c2VkX2NvcmVzID0gc2VsZi5jb3Jlc1s6XQ0KPiA+ICsgICAgICAgICMgaW5pdGlhbGl6ZWQgdXNl ZCBjb3Jlcw0KPiA+ICsgICAgICAgIHNlbGYudXNlZF9jb3JlcyA9IFstMV0gKiBsZW4oc2VsZi51 bnVzZWRfY29yZXMpDQo+ID4gKw0KPiBOZWVkIG1hY3JvIElOVkwgcmVwbGFjZSBvZiAiLTEiLg0K PiANCg0KT2suDQoNCj4gPiArICAgICAgICBzZWxmLnBvcnRzX2luZm8gPSBkdXQucG9ydHNfaW5m bw0KPiA+ICsgICAgICAgICMgaW5pdGlhbGl6ZWQgdW51c2VkIHBvcnRzDQo+ID4gKyAgICAgICAg c2VsZi5wb3J0cyA9IFtwb3J0WydwY2knXSBmb3IgcG9ydCBpbiBkdXQucG9ydHNfaW5mb10NCj4g PiArICAgICAgICBzZWxmLnVudXNlZF9wb3J0cyA9IHNlbGYucG9ydHNbOl0NCj4gPiArICAgICAg ICAjIGluaXRpYWxpemVkIHVzZWQgcG9ydHMNCj4gPiArICAgICAgICBzZWxmLnVzZWRfcG9ydHMg PSBbJ3VudXNlZCddICogbGVuKHNlbGYudW51c2VkX3BvcnRzKQ0KPiA+ICsNCj4gPiArICAgICAg ICAjIGluaXRpYWxpemVkIHZmIHBvcnRzDQo+ID4gKyAgICAgICAgc2VsZi52ZnNfaW5mbyA9IFtd DQo+ID4gKyAgICAgICAgc2VsZi52ZnMgPSBbXQ0KPiA+ICsgICAgICAgIHNlbGYudW51c2VkX3Zm cyA9IFtdDQo+ID4gKyAgICAgICAgc2VsZi51c2VkX3ZmcyA9IFtdDQo+ID4gKw0KPiA+ICsgICAg ICAgICMgc2F2ZSBhbGxvY2F0ZWQgY29yZXMgYW5kIHJlbGF0ZWQgdm0NCj4gPiArICAgICAgICBz ZWxmLmFsbG9jYXRlZF9pbmZvID0ge30NCj4gPiArDQo+ID4gKyAgICBkZWYgX19wb3J0X3VzZWQo c2VsZiwgcGNpKToNCj4gPiArICAgICAgICBpbmRleCA9IHNlbGYucG9ydHMuaW5kZXgocGNpKQ0K PiBBZGQgY2hlY2sgbm90IGZvdW5kIHRoZSBwY2kgZGV2aWNlLg0KPiANCg0KWWVzLCBpdCB3aWxs IGJlIGFkZGVkLg0KDQo+ID4gKyAgICAgICAgc2VsZi51c2VkX3BvcnRzW2luZGV4XSA9IHBjaQ0K PiA+ICsgICAgICAgIHNlbGYudW51c2VkX3BvcnRzW2luZGV4XSA9ICd1c2VkJw0KPiA+ICsNCj4g PiArICAgIGRlZiBfX3BvcnRfdW51c2VkKHNlbGYsIHBjaSk6DQo+ID4gKyAgICAgICAgaW5kZXgg PSBzZWxmLnBvcnRzLmluZGV4KHBjaSkNCj4gQWRkIGNoZWNrIG5vdCBmb3VuZCB0aGUgcGNpIGRl dmljZS4NCg0KWWVzLCBpdCB3aWxsIGJlIGFkZGVkLg0KDQo+ID4gKyAgICAgICAgc2VsZi51bnVz ZWRfcG9ydHNbaW5kZXhdID0gcGNpDQo+ID4gKyAgICAgICAgc2VsZi51c2VkX3BvcnRzW2luZGV4 XSA9ICd1bnVzZWQnDQo+ID4gKw0KPiA+ICsgICAgZGVmIF9fcG9ydF9vbl9zb2NrZXQoc2VsZiwg cGNpLCBzb2NrZXQpOg0KPiA+ICsgICAgICAgIGZvciBwb3J0IGluIHNlbGYucG9ydHNfaW5mbzoN Cj4gPiArICAgICAgICAgICAgaWYgcG9ydFsncGNpJ10gPT0gcGNpOg0KPiA+ICsgICAgICAgICAg ICAgICAgaWYgc29ja2V0IGlzIC0xOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBU cnVlDQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgaWYgcG9ydFsnbnVtYSddID09IHNvY2tl dDoNCj4gPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQ0KPiA+ICsgICAgICAgICAg ICAgICAgZWxzZToNCj4gPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UNCj4gPiAr DQo+ID4gKyAgICAgICAgcmV0dXJuIEZhbHNlDQo+ID4gKw0KPiA+ICsgICAgZGVmIF9fdmZfdXNl ZChzZWxmLCBwY2kpOg0KPiA+ICsgICAgICAgIGluZGV4ID0gc2VsZi52ZnMuaW5kZXgocGNpKQ0K PiBBZGQgY2hlY2sgbm90IGZvdW5kIHRoZSBwY2kgZGV2aWNlLg0KDQpZZXMsIGl0IHdpbGwgYmUg YWRkZWQuDQoNCj4gPiArICAgICAgICBzZWxmLnVzZWRfdmZzW2luZGV4XSA9IHBjaQ0KPiA+ICsg ICAgICAgIHNlbGYudW51c2VkX3Zmc1tpbmRleF0gPSAndXNlZCcNCj4gPiArDQo+ID4gKyAgICBk ZWYgX192Zl91bnVzZWQoc2VsZiwgcGNpKToNCj4gPiArICAgICAgICBpbmRleCA9IHNlbGYudmZz LmluZGV4KHBjaSkNCj4gQWRkIGNoZWNrIG5vdCBmb3VuZCB0aGUgcGNpIGRldmljZS4NCg0KWWVz LCBpdCB3aWxsIGJlIGFkZGVkLg0KDQo+ID4gKyAgICAgICAgc2VsZi51c2VkX3Zmc1tpbmRleF0g PSAndW51c2VkJw0KPiA+ICsgICAgICAgIHNlbGYudW51c2VkX3Zmc1tpbmRleF0gPSBwY2kNCj4g PiArDQo+ID4gKyAgICBkZWYgX19jb3JlX3VzZWQoc2VsZiwgY29yZSk6DQo+ID4gKyAgICAgICAg Y29yZSA9IGludChjb3JlKQ0KPiA+ICsgICAgICAgIGluZGV4ID0gc2VsZi5jb3Jlcy5pbmRleChj b3JlKQ0KPiBBZGQgY2hlY2sgbm90IGZvdW5kIGNvcmUuDQoNClllcywgaXQgd2lsbCBiZSBhZGRl ZC4NCg0KPiA+ICsgICAgICAgIHNlbGYudXNlZF9jb3Jlc1tpbmRleF0gPSBjb3JlDQo+ID4gKyAg ICAgICAgc2VsZi51bnVzZWRfY29yZXNbaW5kZXhdID0gLTENCj4gPiArDQo+ID4gKyAgICBkZWYg X19jb3JlX3VudXNlZChzZWxmLCBjb3JlKToNCj4gPiArICAgICAgICBjb3JlID0gaW50KGNvcmUp DQo+ID4gKyAgICAgICAgaW5kZXggPSBzZWxmLmNvcmVzLmluZGV4KGNvcmUpDQo+IEFkZCBjaGVj ayBub3QgZm91bmQgY29yZS4NCg0KWWVzLCBpdCB3aWxsIGJlIGFkZGVkLg0KDQo+ID4gKyAgICAg ICAgc2VsZi51bnVzZWRfY29yZXNbaW5kZXhdID0gY29yZQ0KPiA+ICsgICAgICAgIHNlbGYudXNl ZF9jb3Jlc1tpbmRleF0gPSAtMQ0KPiA+ICsNCj4gPiArICAgIGRlZiBfX2NvcmVfb25fc29ja2V0 KHNlbGYsIGNvcmUsIHNvY2tldCk6DQo+ID4gKyAgICAgICAgZm9yIGR1dF9jb3JlIGluIHNlbGYu ZHV0LmNvcmVzOg0KPiA+ICsgICAgICAgICAgICBpZiBpbnQoZHV0X2NvcmVbJ3RocmVhZCddKSA9 PSBjb3JlOg0KPiA+ICsgICAgICAgICAgICAgICAgaWYgc29ja2V0IGlzIC0xOg0KPiA+ICsgICAg ICAgICAgICAgICAgICAgIHJldHVybiBUcnVlDQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAg aWYgaW50KGR1dF9jb3JlWydzb2NrZXQnXSkgPT0gc29ja2V0Og0KPiA+ICsgICAgICAgICAgICAg ICAgICAgIHJldHVybiBUcnVlDQo+ID4gKyAgICAgICAgICAgICAgICBlbHNlOg0KPiA+ICsgICAg ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQ0KPiA+ICsNCj4gPiArICAgICAgICByZXR1cm4g RmFsc2UNCj4gPiArDQo+ID4gKyAgICBkZWYgX19jb3JlX2lzdXNlZChzZWxmLCBjb3JlKToNCj4g PiArICAgICAgICBpbmRleCA9IHNlbGYuY29yZXMuaW5kZXgoY29yZSkNCj4gPiArICAgICAgICBp ZiBzZWxmLnVzZWRfY29yZXNbaW5kZXhdICE9IC0xOg0KPiA+ICsgICAgICAgICAgICByZXR1cm4g VHJ1ZQ0KPiA+ICsgICAgICAgIGVsc2U6DQo+ID4gKyAgICAgICAgICAgIHJldHVybiBGYWxzZQ0K PiA+ICsNCj4gPiArICAgIGRlZiByZXNlcnZlX2NwdShzZWxmLCBjb3JlbWFzaz0nJyk6DQo+ID4g KyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgUmVzZXJ2ZSBkcGRrIHVzZWQgY3B1cyBieSBtYXNr DQo+ID4gKyAgICAgICAgIiIiDQo+IEFkZCBjb21tZW50cyBob3cgdG8gY2FsY3VsYXRlIGNwdXMu DQo+IA0KDQpPaywgaXQgd2lsbCBiZSBhZGRlZC4NCg0KPiA+ICsgICAgICAgIHZhbCA9IGludChj b3JlbWFzaywgYmFzZT0xNikNCj4gPiArICAgICAgICBjcHVzID0gW10NCj4gPiArICAgICAgICBp bmRleCA9IDANCj4gPiArICAgICAgICB3aGlsZSB2YWwgIT0gMDoNCj4gPiArICAgICAgICAgICAg aWYgdmFsICYgMHgxOg0KPiA+ICsgICAgICAgICAgICAgICAgY3B1cy5hcHBlbmQoaW5kZXgpDQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICB2YWwgPSB2YWwgPj4gMQ0KPiA+ICsgICAgICAgICAgICBp bmRleCArPSAxDQo+ID4gKw0KPiA+ICsgICAgICAgIGZvciBjcHUgaW4gY3B1czoNCj4gPiArICAg ICAgICAgICAgc2VsZi5fX2NvcmVfdXNlZChjcHUpDQo+ID4gKw0KPiA+ICsgICAgZGVmIGFsbG9j X2NwdShzZWxmLCB2bT0nJywgbnVtYmVyPS0xLCBzb2NrZXQ9LTEsIGNvcmVsaXN0PU5vbmUpOg0K PiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIFRoZXJlJ3JlIHR3byBvcHRpb25zIGZvciBy ZXF1ZXN0IGNwdSByZXNvdWNlIGZvciB2bS4NCj4gPiArICAgICAgICBJZiBudW1iZXIgaXMgbm90 IC0xLCBqdXN0IGFsbG9jYXRlIGNwdSBmcm9tIG5vdCB1c2VkIGNvcmVzLg0KPiA+ICsgICAgICAg IElmIGxpc3QgaXMgbm90IE5vbmUsIHdpbGwgYWxsb2NhdGUgY3B1IGFmdGVyIGNoZWNrZWQuDQo+ ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgY29yZXMgPSBbXQ0KPiA+ICsNCj4gPiArICAg ICAgICBpZiB2bSA9PSAnJzoNCj4gPiArICAgICAgICAgICAgcHJpbnQgIkFsbG9jIGNwdSByZXF1 ZXN0IHZpdHVhbCBtYWNoaW5lIG5hbWUhISEiDQo+ID4gKyAgICAgICAgICAgIHJldHVybiBjb3Jl cw0KPiA+ICsNCj4gPiArICAgICAgICBpZiBudW1iZXIgIT0gLTE6DQo+ID4gKyAgICAgICAgICAg IGZvciBjb3JlIGluIHNlbGYudW51c2VkX2NvcmVzOg0KPiA+ICsgICAgICAgICAgICAgICAgaWYg Y29yZSAhPSAtMSBhbmQgbnVtYmVyICE9IDA6DQo+IC0xIHNob3VsZCBiZSByZXBsYWNlZCBieSBt YWNybyBJTlZBTC4NCg0KT2ssIGl0IHdpbGwgYmUgYWRkZWQuDQoNCj4gPiArICAgICAgICAgICAg ICAgICAgICBpZiBzZWxmLl9fY29yZV9vbl9zb2NrZXQoY29yZSwgc29ja2V0KSBpcyBUcnVlOg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY29yZV91c2VkKGNvcmUpDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzLmFwcGVuZChzdHIoY29yZSkpDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAtIDENCj4gPiArICAgICAgICAg ICAgaWYgbnVtYmVyICE9IDA6DQo+ID4gKyAgICAgICAgICAgICAgICBwcmludCAiQ2FuJ3QgYWxs b2NhdGVkIHJlcXVlc3RlZCBjcHUhISEiDQo+ID4gKw0KPiBTaG91bGQgcmV0dXJuIGVycm9yIGFu ZCBmcmVlIHVzZWQgY29yZXMuDQoNCk9rLCBpdCB3aWxsIGJlIGFkZGVkLg0KDQo+IA0KPiA+ICsg ICAgICAgIGlmIGNvcmVsaXN0IGlzIG5vdCBOb25lOg0KPiA+ICsgICAgICAgICAgICBmb3IgY29y ZSBpbiBjb3JlbGlzdDoNCj4gPiArICAgICAgICAgICAgICAgIGlmIHNlbGYuX19jb3JlX2lzdXNl ZChpbnQoY29yZSkpIGlzIFRydWU6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNv cmUgJXMgaGFzIGJlZW4gdXNlZCEhISIgJSBjb3JlDQo+IFNob3VsZCByZXR1cm4gZXJyb3IgaGVy ZS4NCj4gPiArICAgICAgICAgICAgICAgIGVsc2U6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg aWYgc2VsZi5fX2NvcmVfb25fc29ja2V0KGludChjb3JlKSwgc29ja2V0KSBpcw0KPiBUcnVlOg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY29yZV91c2VkKGludChjb3JlKSkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMuYXBwZW5kKGNvcmUpDQo+ID4gKw0K PiA+ICsgICAgICAgIGlmIHZtIG5vdCBpbiBzZWxmLmFsbG9jYXRlZF9pbmZvOg0KPiA+ICsgICAg ICAgICAgICBzZWxmLmFsbG9jYXRlZF9pbmZvW3ZtXSA9IHt9DQo+ID4gKw0KPiA+ICsgICAgICAg IHNlbGYuYWxsb2NhdGVkX2luZm9bdm1dWydjb3JlcyddID0gY29yZXMNCj4gPiArICAgICAgICBy ZXR1cm4gY29yZXMNCj4gPiArDQo+ID4gKyAgICBkZWYgX192bV9oYXNfcmVzb3VyY2Uoc2VsZiwg dm0sIHJlc291cmNlPScnKToNCj4gPiArICAgICAgICBpZiB2bSA9PSAnJzoNCj4gPiArICAgICAg ICAgICAgc2VsZi5kdXQubG9nZ2VyLmluZm8oIlZNIG5hbWUgY2FubnQgYmUgTlVMTCEhISIpDQo+ ID4gKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVk0gbmFtZSBjYW5udCBiZSBOVUxMISEh IikNCj4gDQo+IEhvdyB0byBoYW5kbGUgdGhpcyBleGNlcHRpb24/DQo+IA0KPiA+ICsgICAgICAg IGlmIHZtIG5vdCBpbiBzZWxmLmFsbG9jYXRlZF9pbmZvOg0KPiA+ICsgICAgICAgICAgICBzZWxm LmR1dC5sb2dnZXIuaW5mbygNCj4gPiArICAgICAgICAgICAgICAgICJUaGVyZSBpcyBubyByZXNv dXJjZSBhbGxvY2F0ZWQgdG8gVk0gWyVzXS4iICUgdm0pDQo+ID4gKyAgICAgICAgICAgIHJldHVy biBGYWxzZQ0KPiA+ICsgICAgICAgIGlmIHJlc291cmNlID09ICcnOg0KPiA+ICsgICAgICAgICAg ICByZXR1cm4gVHJ1ZQ0KPiA+ICsgICAgICAgIGlmIHJlc291cmNlIG5vdCBpbiBzZWxmLmFsbG9j YXRlZF9pbmZvW3ZtXToNCj4gPiArICAgICAgICAgICAgc2VsZi5kdXQubG9nZ2VyLmluZm8oDQo+ ID4gKyAgICAgICAgICAgICAgICAiVGhlcmUgaXMgbm8gcmVzb3VyY2UgWyVzXSBhbGxvY2F0ZWQg dG8gVk0gWyVzXSAiICUNCj4gPiArICAgICAgICAgICAgICAgIChyZXNvdXJjZSwgdm0pKQ0KPiA+ ICsgICAgICAgICAgICByZXR1cm4gRmFsc2UNCj4gPiArICAgICAgICByZXR1cm4gVHJ1ZQ0KPiA+ ICsNCj4gPiArICAgIGRlZiBmcmVlX2NwdShzZWxmLCB2bSk6DQo+ID4gKyAgICAgICAgaWYgc2Vs Zi5fX3ZtX2hhc19yZXNvdXJjZSh2bSwgJ2NvcmVzJyk6DQo+ID4gKyAgICAgICAgICAgIGZvciBj b3JlIGluIHNlbGYuYWxsb2NhdGVkX2luZm9bdm1dWydjb3JlcyddOg0KPiA+ICsgICAgICAgICAg ICAgICAgc2VsZi5fX2NvcmVfdW51c2VkKGNvcmUpDQo+ID4gKyAgICAgICAgICAgIHNlbGYuYWxs b2NhdGVkX2luZm9bdm1dLnBvcCgnY29yZXMnKQ0KPiA+ICsNCj4gPiArICAgIGRlZiBhbGxvY19w ZihzZWxmLCB2bT0nJywgbnVtYmVyPS0xLCBzb2NrZXQ9LTEsIHBmbGlzdD1bXSk6DQo+ID4gKyAg ICAgICAgIiIiDQo+ID4gKyAgICAgICAgVGhlcmUncmUgdHdvIG9wdGlvbnMgZm9yIHJlcXVlc3Qg cGYgZGV2aWNlcyBmb3Igdm0uDQo+ID4gKyAgICAgICAgSWYgbnVtYmVyIGlzIG5vdCAtMSwganVz dCBhbGxvY2F0ZSBwZiBkZXZpY2UgZnJvbSBub3QgdXNlZA0KPiBwZnMuDQo+ID4gKyAgICAgICAg SWYgbGlzdCBpcyBub3QgTm9uZSwgd2lsbCBhbGxvY2F0ZSBwZiBkZXZpY2VzIGFmdGVyIGNoZWNr ZWQuDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgcG9ydHMgPSBbXQ0KPiA+ICsNCj4g PiArICAgICAgICBpZiBudW1iZXIgIT0gLTE6DQo+ID4gKyAgICAgICAgICAgIGZvciBwY2kgaW4g c2VsZi51bnVzZWRfcG9ydHM6DQo+ID4gKyAgICAgICAgICAgICAgICBpZiBwY2kgIT0gJ3VudXNl ZCcgYW5kIG51bWJlciAhPSAwOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX19w b3J0X29uX3NvY2tldChwY2ksIHNvY2tldCkgaXMgVHJ1ZToNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgc2VsZi5fX3BvcnRfdXNlZChwY2kpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIHBvcnRzLmFwcGVuZChwY2kpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIG51bWJl ciA9IG51bWJlciAtIDENCj4gPiArICAgICAgICAgICAgaWYgbnVtYmVyICE9IDA6DQo+ID4gKyAg ICAgICAgICAgICAgICBwcmludCAiQ2FuJ3QgYWxsb2NhdGVkIHJlcXVlc3RlZCBQRiBkZXZpY2Vz ISEhIg0KPiA+ICsNCj4gU2hvdWxkIGZyZWUgdXNlZCBwb3J0cyBhbmQgcmV0dXJuIGVycm9yLg0K PiANCj4gPiArICAgICAgICBpZiBwZmxpc3QgaXMgbm90IE5vbmU6DQo+ID4gKyAgICAgICAgICAg IGZvciBwY2kgaW4gcGZsaXN0Og0KPiA+ICsgICAgICAgICAgICAgICAgaWYgc2VsZi5fX3BvcnRf aXN1c2VkKHBjaSkgaXMgVHJ1ZToNCj4gPiArICAgICAgICAgICAgICAgICAgICBwcmludCAiUG9y dCAlcyBoYXMgYmVlbiB1c2VkISEhIiAlIHBjaQ0KPiANCj4gU2hvdWxkIHJldHVybiBlcnJvci4N Cj4gPiArICAgICAgICAgICAgICAgIGVsc2U6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgaWYg c2VsZi5fX3BvcnRfb25fc29ja2V0KHBjaSwgc29ja2V0KSBpcyBUcnVlOg0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICBzZWxmLl9fcG9ydF91c2VkKGNvcmUpDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgIHBvcnRzLmFwcGVuZChjb3JlKQ0KPiA+ICsNCj4gPiArICAgICAgICBpZiB2 bSBub3QgaW4gc2VsZi5hbGxvY2F0ZWRfaW5mbzoNCj4gPiArICAgICAgICAgICAgc2VsZi5hbGxv Y2F0ZWRfaW5mb1t2bV0gPSB7fQ0KPiA+ICsNCj4gPiArICAgICAgICBzZWxmLmFsbG9jYXRlZF9p bmZvW3ZtXVsncG9ydHMnXSA9IHBvcnRzDQo+ID4gKyAgICAgICAgcmV0dXJuIHBvcnRzDQo+ID4g Kw0KPiA+ICsgICAgZGVmIGZyZWVfcGYoc2VsZiwgdm0pOg0KPiA+ICsgICAgICAgIGlmIHNlbGYu X192bV9oYXNfcmVzb3VyY2Uodm0sICdwb3J0cycpOg0KPiA+ICsgICAgICAgICAgICBmb3IgcGNp IGluIHNlbGYuYWxsb2NhdGVkX2luZm9bdm1dWydwb3J0cyddOg0KPiA+ICsgICAgICAgICAgICAg ICAgc2VsZi5fX3BvcnRfdW51c2VkKHBjaSkNCj4gPiArICAgICAgICAgICAgc2VsZi5hbGxvY2F0 ZWRfaW5mb1t2bV0ucG9wKCdwb3J0cycpDQo+ID4gKw0KPiA+ICsgICAgZGVmIGFsbG9jX3ZmX2Zy b21fcGYoc2VsZiwgdm09JycsIHBmX3BjaT0nJywgbnVtYmVyPS0xLA0KPiB2Zmxpc3Q9W10pOg0K PiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIFRoZXJlJ3JlIHR3byBvcHRpb25zIGZvciBy ZXF1ZXN0IHZmIGRldmljZXMgb2YgcGYgZGV2aWNlLg0KPiA+ICsgICAgICAgIElmIG51bWJlciBp cyBub3QgLTEsIGp1c3QgYWxsb2NhdGUgdmYgZGV2aWNlIGZyb20gbm90IHVzZWQNCj4gdmZzLg0K PiA+ICsgICAgICAgIElmIGxpc3QgaXMgbm90IE5vbmUsIHdpbGwgYWxsb2NhdGUgdmYgZGV2aWNl cyBhZnRlciBjaGVja2VkLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIHZmcyA9IFtd DQo+ID4gKyAgICAgICAgaWYgdm0gPT0gJyc6DQo+ID4gKyAgICAgICAgICAgIHByaW50ICJBbGxv YyBWRiByZXF1ZXN0IHZpdHVhbCBtYWNoaW5lIG5hbWUhISEiDQo+ID4gKyAgICAgICAgICAgIHJl dHVybiB2ZnMNCj4gPiArDQo+ID4gKyAgICAgICAgaWYgcGZfcGNpID09ICcnOg0KPiA+ICsgICAg ICAgICAgICBwcmludCAiQWxsb2MgVkYgcmVxdWVzdCBQRiBwY2kgYWRkcmVzcyEhISINCj4gPiAr ICAgICAgICAgICAgcmV0dXJuIHZmcw0KPiA+ICsNCj4gPiArICAgICAgICBmb3IgdmZfaW5mbyBp biBzZWxmLnZmc19pbmZvOg0KPiA+ICsgICAgICAgICAgICBpZiB2Zl9pbmZvWydwZl9wY2knXSA9 PSBwZl9wY2k6DQo+ID4gKyAgICAgICAgICAgICAgICBpZiB2Zl9pbmZvWydwY2knXSBpbiB2Zmxp c3Q6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgdmZzLmFwcGVuZCh2Zl9pbmZvWydwY2knXSkN Cj4gPiArICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KPiA+ICsNCj4gPiArICAgICAgICAg ICAgICAgIGlmIG51bWJlciA+IDA6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgdmZzLmFwcGVu ZCh2Zl9pbmZvWydwY2knXSkNCj4gPiArICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1i ZXIgLSAxDQo+ID4gKw0KPiA+ICsgICAgICAgIGZvciB2ZiBpbiB2ZnM6DQo+ID4gKyAgICAgICAg ICAgIHNlbGYuX192Zl91c2VkKHZmKQ0KPiA+ICsNCj4gPiArICAgICAgICBpZiB2bSBub3QgaW4g c2VsZi5hbGxvY2F0ZWRfaW5mbzoNCj4gPiArICAgICAgICAgICAgc2VsZi5hbGxvY2F0ZWRfaW5m b1t2bV0gPSB7fQ0KPiA+ICsNCj4gPiArICAgICAgICBzZWxmLmFsbG9jYXRlZF9pbmZvW3ZtXVsn dmZzJ10gPSB2ZnMNCj4gPiArICAgICAgICByZXR1cm4gdmZzDQo+ID4gKw0KPiA+ICsgICAgZGVm IGZyZWVfdmYoc2VsZiwgdm0pOg0KPiA+ICsgICAgICAgIGlmIHNlbGYuX192bV9oYXNfcmVzb3Vy Y2Uodm0sICd2ZnMnKToNCj4gPiArICAgICAgICAgICAgZm9yIHBjaSBpbiBzZWxmLmFsbG9jYXRl ZF9pbmZvW3ZtXVsndmZzJ106DQo+ID4gKyAgICAgICAgICAgICAgICBzZWxmLl9fdmZfdW51c2Vk KHBjaSkNCj4gPiArICAgICAgICAgICAgc2VsZi5hbGxvY2F0ZWRfaW5mb1t2bV0ucG9wKCd2ZnMn KQ0KPiA+ICsNCj4gPiArICAgIGRlZiBhZGRfdmZfb25fcGYoc2VsZiwgcGZfcGNpPScnLCB2Zmxp c3Q9W10pOg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIEFkZCB2ZiBkZXZpY2VzIGdl bmVyYXRlZCBieSBzcGVjaWZpZWQgcGYgZGV2aWNlcy4NCj4gPiArICAgICAgICAiIiINCj4gPiAr ICAgICAgICAjIGFkZCB2ZnMgaW50byB2ZiBpbmZvIGxpc3QNCj4gPiArICAgICAgICB2ZnMgPSBb XQ0KPiA+ICsgICAgICAgIGZvciB2ZiBpbiB2Zmxpc3Q6DQo+ID4gKyAgICAgICAgICAgIGlmIHZm IG5vdCBpbiBzZWxmLnZmczoNCj4gPiArICAgICAgICAgICAgICAgIHNlbGYudmZzX2luZm8uYXBw ZW5kKHsncGNpJzogdmYsICdwZl9wY2knOiBwZl9wY2l9KQ0KPiA+ICsgICAgICAgICAgICAgICAg dmZzLmFwcGVuZCh2ZikNCj4gPiArICAgICAgICB1c2VkX3ZmcyA9IFsndW51c2VkJ10gKiBsZW4o dmZsaXN0KQ0KPiA+ICsgICAgICAgIHNlbGYudW51c2VkX3ZmcyArPSB2ZnMNCj4gPiArICAgICAg ICBzZWxmLnVzZWRfdmZzICs9IHVzZWRfdmZzDQo+ID4gKyAgICAgICAgc2VsZi52ZnMgKz0gdmZz DQo+ID4gKw0KPiA+ICsgICAgZGVmIGRlbF92Zl9vbl9wZihzZWxmLCBwZl9wY2k9JycsIHZmbGlz dD1bXSk6DQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgUmVtb3ZlIHZmIGRldmljZXMg Z2VuZXJhdGVkIGJ5IHNwZWNpZmllZCBwZiBkZXZpY2VzLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ ICsgICAgICAgIHZmcyA9IFtdDQo+ID4gKyAgICAgICAgZm9yIHZmIGluIHZmbGlzdDoNCj4gPiAr ICAgICAgICAgICAgZm9yIHZmc19pbmZvIGluIHNlbGYudmZzX2luZm86DQo+ID4gKyAgICAgICAg ICAgICAgICBpZiB2ZnNfaW5mb1sncGNpJ10gPT0gdmY6DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgdmZzLmFwcGVuZCh2ZikNCj4gPiArDQo+ID4gKyAgICAgICAgZm9yIHZmIGluIHZmczoNCj4g PiArICAgICAgICAgICAgdHJ5Og0KPiA+ICsgICAgICAgICAgICAgICAgaW5kZXggPSBzZWxmLnZm cy5pbmRleCh2ZikNCj4gPiArICAgICAgICAgICAgZXhjZXB0Og0KPiA+ICsgICAgICAgICAgICAg ICAgY29udGludWUNCj4gPiArICAgICAgICAgICAgZGVsIHNlbGYudmZzX2luZm9baW5kZXhdDQo+ ID4gKyAgICAgICAgICAgIGRlbCBzZWxmLnVudXNlZF92ZnNbaW5kZXhdDQo+ID4gKyAgICAgICAg ICAgIGRlbCBzZWxmLnVzZWRfdmZzW2luZGV4XQ0KPiA+ICsgICAgICAgICAgICBkZWwgc2VsZi52 ZnNbaW5kZXhdDQo+ID4gKw0KPiA+ICsgICAgZGVmIGFsbG9jX3BvcnQoc2VsZiwgdm09JycpOg0K PiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIEFsbG9jYXRlIHVudXNlZCBob3N0IHBvcnQg Zm9yIHZtDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgaWYgdm0gPT0gJyc6DQo+ID4g KyAgICAgICAgICAgIHByaW50ICJBbGxvYyBob3N0IHBvcnQgcmVxdWVzdCB2aXR1YWwgbWFjaGlu ZSBuYW1lISEhIg0KPiA+ICsgICAgICAgICAgICByZXR1cm4gTm9uZQ0KPiA+ICsNCj4gPiArICAg ICAgICBwb3J0X3N0YXJ0ID0gSU5JVF9GUkVFX1BPUlQgKyByYW5kaW50KDEsIDEwMCkNCj4gPiAr ICAgICAgICBwb3J0X3N0ZXAgPSByYW5kaW50KDEsIDEwKQ0KPiA+ICsgICAgICAgIHBvcnQgPSBO b25lDQo+ID4gKyAgICAgICAgY291bnQgPSAyMA0KPiA+ICsgICAgICAgIHdoaWxlIFRydWU6DQo+ ID4gKyAgICAgICAgICAgIGlmIHNlbGYuZHV0LmNoZWNrX3BvcnRfb2NjdXBpZWQocG9ydF9zdGFy dCkgaXMgRmFsc2U6DQo+ID4gKyAgICAgICAgICAgICAgICBwb3J0ID0gcG9ydF9zdGFydA0KPiA+ ICsgICAgICAgICAgICAgICAgYnJlYWsNCj4gPiArICAgICAgICAgICAgY291bnQgLT0gMQ0KPiA+ ICsgICAgICAgICAgICBpZiBjb3VudCA8IDA6DQo+ID4gKyAgICAgICAgICAgICAgICBwcmludCAn Tm8gYXZhaWxhYmxlIHBvcnQgb24gdGhlIGhvc3QhISEnDQo+ID4gKyAgICAgICAgICAgICAgICBi cmVhaw0KPiA+ICsgICAgICAgICAgICBwb3J0X3N0YXJ0ICs9IHBvcnRfc3RlcA0KPiA+ICsNCj4g PiArICAgICAgICBpZiB2bSBub3QgaW4gc2VsZi5hbGxvY2F0ZWRfaW5mbzoNCj4gPiArICAgICAg ICAgICAgc2VsZi5hbGxvY2F0ZWRfaW5mb1t2bV0gPSB7fQ0KPiA+ICsNCj4gPiArICAgICAgICBz ZWxmLmFsbG9jYXRlZF9pbmZvW3ZtXVsnaG9zdHBvcnQnXSA9IHBvcnQNCj4gPiArICAgICAgICBy ZXR1cm4gcG9ydA0KPiA+ICsNCj4gPiArICAgIGRlZiBmcmVlX3BvcnQoc2VsZiwgdm0pOg0KPiA+ ICsgICAgICAgIGlmIHNlbGYuX192bV9oYXNfcmVzb3VyY2Uodm0sICdob3N0cG9ydCcpOg0KPiA+ ICsgICAgICAgICAgICBzZWxmLmFsbG9jYXRlZF9pbmZvW3ZtXS5wb3AoJ2hvc3Rwb3J0JykNCj4g PiArDQo+ID4gKyAgICBkZWYgYWxsb2Nfdm5jX251bShzZWxmLCB2bT0nJyk6DQo+ID4gKyAgICAg ICAgIiIiDQo+ID4gKyAgICAgICAgQWxsb2NhdGUgdW51c2VkIGhvc3QgVk5DIGRpc3BsYXkgbnVt YmVyIGZvciBWTS4NCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBpZiB2bSA9PSAnJzoN Cj4gPiArICAgICAgICAgICAgcHJpbnQgIkFsbG9jIHZuYyBkaXNwbGF5IG51bWJlciByZXF1ZXN0 IHZpdHVhbCBtYWNoaW5lDQo+ID4gbmFtZSEhISINCj4gPiArICAgICAgICAgICAgcmV0dXJuIE5v bmUNCj4gPiArDQo+ID4gKyAgICAgICAgbWF4X3ZuY19kaXNwbGF5X251bSA9IHNlbGYuZHV0Lmdl dF9tYXhpbWFsX3ZuY19udW0oKQ0KPiA+ICsgICAgICAgIGZyZWVfdm5jX2Rpc3BsYXlfbnVtID0g bWF4X3ZuY19kaXNwbGF5X251bSArIDENCj4gPiArDQo+ID4gKyAgICAgICAgaWYgdm0gbm90IGlu IHNlbGYuYWxsb2NhdGVkX2luZm86DQo+ID4gKyAgICAgICAgICAgIHNlbGYuYWxsb2NhdGVkX2lu Zm9bdm1dID0ge30NCj4gPiArDQo+ID4gKyAgICAgICAgc2VsZi5hbGxvY2F0ZWRfaW5mb1t2bV1b J3ZuY19kaXNwbGF5X251bSddID0NCj4gZnJlZV92bmNfZGlzcGxheV9udW0NCj4gPiArDQo+ID4g KyAgICAgICAgcmV0dXJuIGZyZWVfdm5jX2Rpc3BsYXlfbnVtDQo+ID4gKw0KPiA+ICsgICAgZGVm IGZyZWVfdm5jX251bShzZWxmLCB2bSk6DQo+ID4gKyAgICAgICAgaWYgc2VsZi5fX3ZtX2hhc19y ZXNvdXJjZSh2bSwgJ3ZuY19kaXNwbGF5X251bScpOg0KPiA+ICsgICAgICAgICAgICBzZWxmLmFs bG9jYXRlZF9pbmZvW3ZtXS5wb3AoJ3ZuY19kaXNwbGF5X251bScpDQo+ID4gKw0KPiA+ICsgICAg ZGVmIGZyZWVfYWxsX3Jlc291cmNlKHNlbGYsIHZtKToNCj4gPiArICAgICAgICBhbGxfZnJlZV9m dW5jcyA9IGdldF9vYmpfZnVuY3Moc2VsZiwgcidmcmVlXycpDQo+ID4gKyAgICAgICAgZm9yIGZ1 bmMgaW4gYWxsX2ZyZWVfZnVuY3M6DQo+ID4gKyAgICAgICAgICAgIGlmIGZ1bmMuX19uYW1lX18g PT0gJ2ZyZWVfYWxsX3Jlc291cmNlJzoNCj4gPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlDQo+ ID4gKyAgICAgICAgICAgIGZ1bmModm0pDQo+ID4gKyAgICAgICAgaWYgc2VsZi5fX3ZtX2hhc19y ZXNvdXJjZSh2bSk6DQo+ID4gKyAgICAgICAgICAgIHNlbGYuYWxsb2NhdGVkX2luZm8ucG9wKHZt KQ0KPiA+ICsNCj4gPiArICAgIGRlZiBnZXRfY3B1X29uX3ZtKHNlbGYsIHZtPScnKToNCj4gPiAr ICAgICAgICAiIiINCj4gPiArICAgICAgICBSZXR1cm4gY29yZSBsaXN0IG9uIHNwZWNpZmlkIFZN Lg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGlmIHZtIGluIHNlbGYuYWxsb2NhdGVk X2luZm86DQo+ID4gKyAgICAgICAgICAgIGlmICJjb3JlcyIgaW4gc2VsZi5hbGxvY2F0ZWRfaW5m b1t2bV06DQo+ID4gKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5hbGxvY2F0ZWRfaW5mb1t2 bV1bJ2NvcmVzJ10NCj4gPiArDQo+IFNvIG1hbnkgZHVwbGljYXRlZCBjb2RlcyBpbiBnZXRfP19v bl92bSBmdW5jdGlvbnMsIHNob3VsZCB1c2Ugc2ltcGxlDQo+IGZ1bmN0aW9uIHJlcGxhY2Ugb2Yg dGhlbS4NCj4gDQo+ID4gKyAgICBkZWYgZ2V0X3Zmc19vbl92bShzZWxmLCB2bT0nJyk6DQo+ID4g KyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgUmV0dXJuIHZmIGRldmljZSBsaXN0IG9uIHNwZWNp ZmlkIFZNLg0KPiA+ICsgICAgICAgICIiIg0KPiA+ICsgICAgICAgIGlmIHZtIGluIHNlbGYuYWxs b2NhdGVkX2luZm86DQo+ID4gKyAgICAgICAgICAgIGlmICd2ZnMnIGluIHNlbGYuYWxsb2NhdGVk X2luZm9bdm1dOg0KPiA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuYWxsb2NhdGVkX2lu Zm9bdm1dWyd2ZnMnXQ0KPiA+ICsNCj4gPiArICAgIGRlZiBnZXRfcGZzX29uX3ZtKHNlbGYsIHZt PScnKToNCj4gPiArICAgICAgICAiIiINCj4gPiArICAgICAgICBSZXR1cm4gcGYgZGV2aWNlIGxp c3Qgb24gc3BlY2lmaWQgVk0uDQo+ID4gKyAgICAgICAgIiIiDQo+ID4gKyAgICAgICAgaWYgdm0g aW4gc2VsZi5hbGxvY2F0ZWRfaW5mbzoNCj4gPiArICAgICAgICAgICAgaWYgJ3BvcnRzJyBpbiBz ZWxmLmFsbG9jYXRlZF9pbmZvW3ZtXToNCj4gPiArICAgICAgICAgICAgICAgIHJldHVybiBzZWxm LmFsbG9jYXRlZF9pbmZvW3ZtXVsncG9ydHMnXQ0KPiA+ICsNCj4gPiArDQo+ID4gK2NsYXNzIHNp bXBsZV9kdXQob2JqZWN0KToNCj4gPiArDQo+ID4gKyAgICBkZWYgX19pbml0X18oc2VsZik6DQo+ ID4gKyAgICAgICAgc2VsZi5wb3J0c19pbmZvID0gW10NCj4gPiArICAgICAgICBzZWxmLmNvcmVz ID0gW10NCj4gPiArDQo+ID4gKyAgICBkZWYgY2hlY2tfcG9ydF9vY2N1cGllZChzZWxmLCBwb3J0 KToNCj4gPiArICAgICAgICByZXR1cm4gRmFsc2UNCj4gPiArDQo+ID4gK2lmIF9fbmFtZV9fID09 ICJfX21haW5fXyI6DQo+ID4gKyAgICBkdXQgPSBzaW1wbGVfZHV0KCkNCj4gPiArICAgIGR1dC5j b3JlcyA9IFt7J3RocmVhZCc6ICcxJywgJ3NvY2tldCc6ICcwJ30sIHsndGhyZWFkJzogJzInLA0K PiAnc29ja2V0JzoNCj4gPiAnMCd9LA0KPiA+ICsgICAgICAgICAgICAgICAgIHsndGhyZWFkJzog JzMnLCAnc29ja2V0JzogJzAnfSwgeyd0aHJlYWQnOiAnNCcsDQo+ICdzb2NrZXQnOg0KPiA+ICcw J30sDQo+ID4gKyAgICAgICAgICAgICAgICAgeyd0aHJlYWQnOiAnNScsICdzb2NrZXQnOiAnMCd9 LCB7J3RocmVhZCc6ICc2JywNCj4gJ3NvY2tldCc6DQo+ID4gJzAnfSwNCj4gPiArICAgICAgICAg ICAgICAgICB7J3RocmVhZCc6ICc3JywgJ3NvY2tldCc6ICcxJ30sIHsndGhyZWFkJzogJzgnLA0K PiAnc29ja2V0JzoNCj4gPiAnMSd9LA0KPiA+ICsgICAgICAgICAgICAgICAgIHsndGhyZWFkJzog JzknLCAnc29ja2V0JzogJzEnfSwgeyd0aHJlYWQnOiAnMTAnLA0KPiA+ICdzb2NrZXQnOiAnMSd9 LA0KPiA+ICsgICAgICAgICAgICAgICAgIHsndGhyZWFkJzogJzExJywgJ3NvY2tldCc6ICcxJ30s IHsndGhyZWFkJzogJzEyJywNCj4gPiAnc29ja2V0JzogJzEnfV0NCj4gPiArDQo+ID4gKyAgICBk dXQucG9ydHNfaW5mbyA9IFt7J2ludGYnOiAncDc4NnAxJywgJ3NvdXJjZSc6ICdjZmcnLCAnbWFj JzoNCj4gPiAnOTA6ZTI6YmE6Njk6ZTU6ZTQnLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICdwY2knOiAnMDg6MDAuMCcsICdudW1hJzogMCwgJ2lwdjYnOg0KPiA+ICdmZTgwOjo5MmUyOmJh ZmY6ZmU2OTplNWU0JywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAncGVlcic6ICdJWElB OjYuNScsICd0eXBlJzogJzgwODY6MTBmYid9LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg eydpbnRmJzogJ3A3ODZwMicsICdzb3VyY2UnOiAnY2ZnJywgJ21hYyc6DQo+ID4gJzkwOmUyOmJh OjY5OmU1OmU1JywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAncGNpJzogJzA4OjAwLjEn LCAnbnVtYSc6IDAsICdpcHY2JzoNCj4gPiAnZmU4MDo6OTJlMjpiYWZmOmZlNjk6ZTVlNScsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgJ3BlZXInOiAnSVhJQTo2LjYnLCAndHlwZSc6ICc4 MDg2OjEwZmInfSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHsnaW50Zic6ICdwNzg3cDEn LCAnc291cmNlJzogJ2NmZycsICdtYWMnOg0KPiA+ICc5MDplMjpiYTo2OTplNTplNicsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgJ3BjaSc6ICc4NDowMC4wJywgJ251bWEnOiAxLCAnaXB2 Nic6DQo+ID4gJ2ZlODA6OjkyZTI6YmFmZjpmZTY5OmU1ZTYnLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICdwZWVyJzogJ0lYSUE6Ni43JywgJ3R5cGUnOiAnODA4NjoxMGZiJ30sDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICB7J2ludGYnOiAncDc4N3AyJywgJ3NvdXJjZSc6ICdjZmcn LCAnbWFjJzoNCj4gPiAnOTA6ZTI6YmE6Njk6ZTU6ZTcnLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICdwY2knOiAnODQ6MDAuMScsICdudW1hJzogMSwgJ2lwdjYnOg0KPiA+ICdmZTgwOjo5 MmUyOmJhZmY6ZmU2OTplNWU3JywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAncGVlcic6 ICdJWElBOjYuOCcsICd0eXBlJzogJzgwODY6MTBmYid9XQ0KPiA+ICsNCj4gPiArICAgIHZpcnRf cG9vbCA9IFZpcnRSZXNvdXJjZShkdXQpDQo+ID4gKyAgICBwcmludCAiQWxsb2MgdHdvIFBGIGRl dmljZXMgb24gc29ja2V0IDEgZnJvbSBWTSINCj4gPiArICAgIHByaW50IHZpcnRfcG9vbC5hbGxv Y19wZih2bT0ndGVzdDEnLCBudW1iZXI9Miwgc29ja2V0PTEpDQo+ID4gKw0KPiA+ICsgICAgdmly dF9wb29sLmFkZF92Zl9vbl9wZihwZl9wY2k9JzA4OjAwLjAnLCB2Zmxpc3Q9Ww0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAnMDg6MTAuMCcsICcwODoxMC4yJywgJzA4OjEwLjQnLA0K PiAnMDg6MTAuNiddKQ0KPiA+ICsgICAgdmlydF9wb29sLmFkZF92Zl9vbl9wZihwZl9wY2k9JzA4 OjAwLjEnLCB2Zmxpc3Q9Ww0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDg6MTAu MScsICcwODoxMC4zJywgJzA4OjEwLjUnLA0KPiAnMDg6MTAuNyddKQ0KPiA+ICsgICAgcHJpbnQg IkFkZCBWRiBkZXZpY2VzIHRvIHJlc291cmNlIHBvb2wiDQo+ID4gKyAgICBwcmludCB2aXJ0X3Bv b2wudmZzX2luZm8NCj4gPiArDQo+ID4gKyAgICBwcmludCAiQWxsb2MgVkYgZGV2aWNlIGZyb20g cmVzb3VyY2UgcG9vbCINCj4gPiArICAgIHByaW50IHZpcnRfcG9vbC5hbGxvY192Zl9mcm9tX3Bm KHZtPSd0ZXN0MScsIHBmX3BjaT0nMDg6MDAuMCcsDQo+ID4gbnVtYmVyPTIpDQo+ID4gKyAgICBw cmludCB2aXJ0X3Bvb2wudXNlZF92ZnMNCj4gPiArICAgIHByaW50ICJBbGxvYyBWRiBkZXZpY2Ug ZnJvbSByZXNvdXJjZSBwb29sIg0KPiA+ICsgICAgcHJpbnQgdmlydF9wb29sLmFsbG9jX3ZmX2Zy b21fcGYodm09J3Rlc3QyJywgcGZfcGNpPScwODowMC4xJywNCj4gPiB2Zmxpc3Q9WycwODoxMC4z JywgJzA4OjEwLjUnXSkNCj4gPiArICAgIHByaW50IHZpcnRfcG9vbC51c2VkX3Zmcw0KPiA+ICsN Cj4gPiArICAgIHByaW50ICJEZWwgVkYgZGV2aWNlcyBmcm9tIHJlc291cmNlIHBvb2wiDQo+ID4g KyAgICB2aXJ0X3Bvb2wuZGVsX3ZmX29uX3BmKHBmX3BjaT0nMDg6MDAuMCcsIHZmbGlzdD1bJzA4 OjEwLjQnLA0KPiA+ICcwODoxMC4yJ10pDQo+ID4gKyAgICBwcmludCB2aXJ0X3Bvb2wudmZzX2lu Zm8NCj4gPiArDQo+ID4gKyAgICB2aXJ0X3Bvb2wucmVzZXJ2ZV9jcHUoJ2UnKQ0KPiA+ICsgICAg cHJpbnQgIlJlc2VydmUgdGhyZWUgY29yZXMgZnJvbSByZXNvdXJjZSBwb29sIg0KPiA+ICsgICAg cHJpbnQgdmlydF9wb29sLnVudXNlZF9jb3Jlcw0KPiA+ICsgICAgcHJpbnQgIkFsbG9jIHR3byBj b3JlcyBvbiBzb2NrZXQxIGZvciBWTS10ZXN0MSINCj4gPiArICAgIHByaW50IHZpcnRfcG9vbC5h bGxvY19jcHUodm09InRlc3QxIiwgbnVtYmVyPTIsIHNvY2tldD0xKQ0KPiA+ICsgICAgcHJpbnQg IkFsbG9jIHR3byBjb3JlcyBpbiBsaXN0IGZvciBWTS10ZXN0MiINCj4gPiArICAgIHByaW50IHZp cnRfcG9vbC5hbGxvY19jcHUodm09InRlc3QyIiwgY29yZWxpc3Q9Wyc0JywgJzUnXSkNCj4gPiAr ICAgIHByaW50ICJBbGxvYyB0d28gY29yZXMgZm9yIFZNLXRlc3QzIg0KPiA+ICsgICAgcHJpbnQg dmlydF9wb29sLmFsbG9jX2NwdSh2bT0idGVzdDMiLCBudW1iZXI9MikNCj4gPiArICAgIHByaW50 ICJBbGxvYyBwb3J0IGZvciBWTS10ZXN0MSINCj4gPiArICAgIHByaW50IHZpcnRfcG9vbC5hbGxv Y19wb3J0KHZtPSd0ZXN0MScpDQo+ID4gKyAgICBwcmludCAiQWxsb2MgaW5mb3JtYXRpb24gYWZ0 ZXIgYWxsY2F0ZWQiDQo+ID4gKyAgICBwcmludCB2aXJ0X3Bvb2wuYWxsb2NhdGVkX2luZm8NCj4g PiArDQo+ID4gKyAgICBwcmludCAiR2V0IGNvcmVzIG9uIFZNLXRlc3QxIg0KPiA+ICsgICAgcHJp bnQgdmlydF9wb29sLmdldF9jcHVfb25fdm0oInRlc3QxIikNCj4gPiArICAgIHByaW50ICJHZXQg cGZzIG9uIFZNLXRlc3QxIg0KPiA+ICsgICAgcHJpbnQgdmlydF9wb29sLmdldF9wZnNfb25fdm0o InRlc3QxIikNCj4gPiArICAgIHByaW50ICJHZXQgdmZzIG9uIFZNLXRlc3QyIg0KPiA+ICsgICAg cHJpbnQgdmlydF9wb29sLmdldF92ZnNfb25fdm0oInRlc3QyIikNCj4gPiAtLQ0KPiA+IDEuOS4w DQoNCg==