From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 7DB9411D4 for ; Fri, 22 Apr 2016 04:06:06 +0200 (CEST) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga102.jf.intel.com with ESMTP; 21 Apr 2016 19:05:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,515,1455004800"; d="scan'208";a="89713811" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga004.fm.intel.com with ESMTP; 21 Apr 2016 19:05:59 -0700 Received: from fmsmsx158.amr.corp.intel.com (10.18.116.75) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.248.2; Thu, 21 Apr 2016 19:05:58 -0700 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by fmsmsx158.amr.corp.intel.com (10.18.116.75) with Microsoft SMTP Server (TLS) id 14.3.248.2; Thu, 21 Apr 2016 19:05:58 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.229]) by shsmsx102.ccr.corp.intel.com ([169.254.2.232]) with mapi id 14.03.0248.002; Fri, 22 Apr 2016 10:05:52 +0800 From: "Liu, Yong" To: "Mo, YufengX" , "dts@dpdk.org" CC: "Mo, YufengX" Thread-Topic: [dts] [PATCH V1]The Quota and Watermark sample application performs forwarding for each packet that is received on a given port, Internally, packets are pulled from the ports by the master logical core and put on a variable length processing pipeline, Thread-Index: AQHRm5UjFIwXDRE8W0u7uydrbRPUZZ+VP3Gg Date: Fri, 22 Apr 2016 02:05:52 +0000 Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E14F065F0@SHSMSX103.ccr.corp.intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZGNhNzBlZDctM2UyYy00MzA5LTg4YzUtOGI2OWEwYmJmNzE0IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6ImVVUWZiMXM2SDFuc2dBVElyV2JOV25RQUZrbUxYTUsxNGZ5WTRwXC9jUjRFPSJ9 x-ctpclassification: CTP_IC 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] [PATCH V1]The Quota and Watermark sample application performs forwarding for each packet that is received on a given port, Internally, packets are pulled from the ports by the master logical core and put on a variable length processing pipeline, 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: Fri, 22 Apr 2016 02:06:07 -0000 QXBwbGllZC4gWXVmZW5nLCBwbGVhc2Ugc2VwYXJhdGUgc3ViamVjdCBhbmQgY29tbWl0IGxvZy4g U3ViamVjdCBzaG91bGQgYmUgc2hvcnQgYW5kIG1lYW5pbmdmdWwuDQoNCj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZHRzIFttYWlsdG86ZHRzLWJvdW5jZXNAZHBkay5vcmdd IE9uIEJlaGFsZiBPZiBZdWZlbiBNbw0KPiBTZW50OiBUaHVyc2RheSwgQXByaWwgMjEsIDIwMTYg MjoxNSBQTQ0KPiBUbzogZHRzQGRwZGsub3JnDQo+IENjOiBNbywgWXVmZW5nWA0KPiBTdWJqZWN0 OiBbZHRzXSBbUEFUQ0ggVjFdVGhlIFF1b3RhIGFuZCBXYXRlcm1hcmsgc2FtcGxlIGFwcGxpY2F0 aW9uDQo+IHBlcmZvcm1zIGZvcndhcmRpbmcgZm9yIGVhY2ggcGFja2V0IHRoYXQgaXMgcmVjZWl2 ZWQgb24gYSBnaXZlbiBwb3J0LA0KPiBJbnRlcm5hbGx5LCBwYWNrZXRzIGFyZSBwdWxsZWQgZnJv bSB0aGUgcG9ydHMgYnkgdGhlIG1hc3RlciBsb2dpY2FsIGNvcmUNCj4gYW5kIHB1dCBvbiBhIHZh cmlhYmxlIGxlbmd0aCBwcm9jZXNzaW5nIHBpcGVsaW5lLCAuLi4NCj4gDQo+IEZyb206IHl1ZmVu Z214IDx5dWZlbmd4Lm1vQGludGVsLmNvbT4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IHl1ZmVuZ214 IDx5dWZlbmd4Lm1vQGludGVsLmNvbT4NCj4gLS0tDQo+ICB0ZXN0X3BsYW5zL3F1b3RhX3dhdGVy bWFya190ZXN0X3BsYW4ucnN0IHwgMTkwICsrKysrKysrKysrKw0KPiAgdGVzdHMvVGVzdFN1aXRl X3F1b3RhX3dhdGVybWFyay5weSAgICAgICB8IDQ4Mg0KPiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrDQo+ICAyIGZpbGVzIGNoYW5nZWQsIDY3MiBpbnNlcnRpb25zKCspDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgdGVzdF9wbGFucy9xdW90YV93YXRlcm1hcmtfdGVzdF9wbGFuLnJzdA0K PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL1Rlc3RTdWl0ZV9xdW90YV93YXRlcm1hcmsucHkN Cj4gDQo+IGRpZmYgLS1naXQgYS90ZXN0X3BsYW5zL3F1b3RhX3dhdGVybWFya190ZXN0X3BsYW4u cnN0DQo+IGIvdGVzdF9wbGFucy9xdW90YV93YXRlcm1hcmtfdGVzdF9wbGFuLnJzdA0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4zZDRjMmVmDQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvdGVzdF9wbGFucy9xdW90YV93YXRlcm1hcmtfdGVzdF9wbGFuLnJzdA0KPiBA QCAtMCwwICsxLDE5MCBAQA0KPiArLi4gQ29weXJpZ2h0IChjKSA8MjAxMz4sIEludGVsIENvcnBv cmF0aW9uDQo+ICsgICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiArDQo+ICsgICBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQN Cj4gKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucw0KPiArICAgYXJlIG1ldDoNCj4gKw0KPiArICAgLSBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KPiAr ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuDQo+ICsNCj4gKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4gKyAgICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluDQo+ICsgICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUNCj4gKyAgICAgZGlzdHJpYnV0aW9uLg0KPiArDQo+ICsgICAtIE5laXRoZXIgdGhlIG5hbWUg b2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCj4gKyAgICAgY29udHJp YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk DQo+ICsgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4NCj4gKw0KPiArICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KPiArICAgIkFTIElTIiBBTkQg QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCj4g KyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTDQo+ICsgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KPiArICAgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KPiArICAgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCj4gKyAg IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUg0KPiArICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQo+ICsgICBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsDQo+ICsgICBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up DQo+ICsgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEDQo+ICsgICBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuDQo+ICsNCj4gKw0KPiArDQo+ICs9PT09PT09PT09PT09PT09PT09PQ0KPiArUXVvdGEgYW5k IFdhdGVyLW1hcmsNCj4gKz09PT09PT09PT09PT09PT09PT09DQo+ICsNCj4gK1RoaXMgZG9jdW1l bnQgcHJvdmlkZXMgdGVzdCBwbGFuIGZvciBiZW5jaG1hcmtpbmcgb2YgdGhlIFF1b3RhIGFuZCBX YXRlci0NCj4gbWFyaw0KPiArc2FtcGxlIGFwcGxpY2F0aW9uLiBUaGlzIGlzIGEgc2ltcGxlIGV4 YW1wbGUgYXBwIGZlYXR1cmluZyBwYWNrZXQNCj4gcHJvY2Vzc2luZw0KPiArdXNpbmcgSW50ZWzC riBEYXRhIFBsYW5lIERldmVsb3BtZW50IEtpdCAoSW50ZWzCriBEUERLKSB0aGF0IHNob3ctY2Fz ZXMgdGhlDQo+IHVzZQ0KPiArb2YgYSBxdW90YSBhcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFj a2V0cyBlbnF1ZXVlL2RlcXVldWUgYXQgYSB0aW1lIGFuZA0KPiBsb3cNCj4gK2FuZCBoaWdoIHdh dGVyLW1hcmtzIHRvIHNpZ25hbCBsb3cgYW5kIGhpZ2ggcmluZyB1c2FnZSByZXNwZWN0aXZlbHku DQo+ICtBZGRpdGlvbmFsbHksIGl0IHNob3dzIGhvdyByaW5nIHdhdGVyLW1hcmtzIGNhbiBiZSB1 c2VkIHRvIGZlZWRiYWNrDQo+IGNvbmdlc3Rpb24NCj4gK25vdGlmaWNhdGlvbnMgdG8gZGF0YSBw cm9kdWNlcnMgYnkgdGVtcG9yYXJpbHkgc3RvcHBpbmcgcHJvY2Vzc2luZw0KPiBvdmVybG9hZGVk DQo+ICtyaW5ncyBhbmQgc2VuZGluZyBFdGhlcm5ldCBmbG93IGNvbnRyb2wgZnJhbWVzLg0KPiAr DQo+ICsNCj4gK1ByZXJlcXVpc2l0ZXMNCj4gKy0tLS0tLS0tLS0tLS0NCj4gKw0KPiArMnggSW50 ZWzCriA4MjU5OSAoTmlhbnRpYykgTklDcyAoMnggMTBHYkUgZnVsbCBkdXBsZXggb3B0aWNhbCBw b3J0cyBwZXINCj4gTklDKQ0KPiArcGx1Z2dlZCBpbnRvIHRoZSBhdmFpbGFibGUgUENJZSBHZW4y IDgtbGFuZSBzbG90cyBpbiB0d28gZGlmZmVyZW50DQo+ICtjb25maWd1cmF0aW9uczoNCj4gKzEu IGNhcmQwIGFuZCBjYXJkMSBhdHRhY2hlZCB0byBzb2NrZXQwLg0KPiArMi4gY2FyZDAgYXR0YWNo ZWQgdG8gc29ja2V0MCBhbmQgY2FyZDEgdG8gc29ja2V0MS4NCj4gKw0KPiArVGVzdCBjYXNlcw0K PiArLS0tLS0tLS0tLQ0KPiArDQo+ICtUaGUgaWRlYSBiZWhpbmQgdGhlIHRlc3RpbmcgcHJvY2Vz cyBpcyB0byBzZW5kIGEgZml4ZWQgbnVtYmVyIG9mIGZyYW1lcw0KPiBmcm9tDQo+ICt0aGUgdHJh ZmZpYyBnZW5lcmF0b3IgdG8gdGhlIERVVCB3aGlsZSB0aGVzZSBhcmUgYmVpbmcgZm9yd2FyZGVk IGJhY2sgYnkNCj4gdGhlDQo+ICthcHAgYW5kIG1lYXN1cmUgc29tZSBvZiBzdGF0aXN0aWNzLiBU aG9zZSBjb25maWd1cmFibGUgcGFyYW1ldGVycyBleHBvc2VkDQo+IGJ5DQo+ICt0aGUgY29udHJv bCBhcHAgd2lsbCBiZSBtb2RpZmllZCB0byBzZWUgaG93IHRoZXNlIGFmZmVjdCBpbnRvIHRoZSBh cHAncw0KPiArcGVyZm9ybWFuY2UuRnVuY3Rpb25hbCB0ZXN0IGlzIG9ubHkgdXNlZCBmb3IgY2hl Y2tpbmcgcGFja2V0IHRyYW5zZmVyDQo+IGZsb3cgd2l0aA0KPiArbG93IHdhdGVybWFyayBwYWNr ZXRzLg0KPiArDQo+ICtUaGUgc3RhdGlzdGljcyB0byBiZSBtZWFzdXJlZCBhcmUgZXhwbGFpbmVk IGJlbG93Lg0KPiArQSB0YWJsZSB3aWxsIGJlIHByZXNlbnRlZCBzaG93aW5nIGFsbCB0aGUgZGlm ZmVyZW50IHBlcm11dGF0aW9ucy4NCj4gKw0KPiArDQo+ICstIFJpbmcgc2l6ZQ0KPiArDQo+ICsg IC0gU2l6ZSBvZiB0aGUgcmluZ3MgdGhhdCBpbnRlcmNvbm5lY3QgdHdvIGFkamFjZW50IGNvcmVz IHdpdGhpbiB0aGUNCj4gKyAgICBwaXBlbGluZS4NCj4gKw0KPiArLSBRdW90YQ0KPiArDQo+ICsg IC0gVmFsdWUgY29udHJvbHMgaG93IG1hbnkgcGFja2V0cyBhcmUgYmVpbmcgbW92ZWQgdGhyb3Vn aCB0aGUgcGlwZWxpbmUNCj4gcGVyDQo+ICsgICAgZW4tcXVldWUgYW5kIGRlLXF1ZXVlLg0KPiAr DQo+ICstIExvdyB3YXRlci1tYXJrDQo+ICsNCj4gKyAgLSBHbG9iYWwgdGhyZXNob2xkIHRoYXQg d2lsbCByZXN1bWUgZW4tcXVldWluZyBvbiBhIHJpbmcgb25jZSBpdHMgdXNhZ2UNCj4gKyAgICBn b2VzIGJlbG93IGl0Lg0KPiArDQo+ICstIEhpZ2ggd2F0ZXItbWFyaw0KPiArDQo+ICsgIC0gVGhy ZXNob2xkIHRoYXQgd2lsbCBzdG9wIGVuLXF1ZXVpbmcgb24gcmluZ3MgZm9yIHdoaWNoIHRoZSB1 c2FnZSBoYXMNCj4gaXQuDQo+ICsNCj4gKy0gRnJhbWVzIHNlbnQNCj4gKw0KPiArICAtIE51bWJl ciBvZiBmcmFtZXMgc2VudCBmcm9tIHRoZSB0cmFmZmljIGdlbmVyYXRvci4NCj4gKw0KPiArLSBG cmFtZXMgcmVjZWl2ZWQNCj4gKw0KPiArICAtIE51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgb24g dGhlIHRyYWZmaWMgZ2VuZXJhdG9yIG9uY2UgdGhleSB3ZXJlDQo+ICsgICAgZm9yd2FyZGVkIGJh Y2sgYnkgdGhlIGFwcC4NCj4gKw0KPiArLSBDb250cm9sIGZsb3cgZnJhbWVzIHJlY2VpdmVkDQo+ ICsNCj4gKyAgLSBOdW1iZXIgb2YgQ29udHJvbCBmbG93IGZyYW1lcyAoUEFVU0UgZnJhbWUgZGVm aW5lZCBieSB0aGUgSUVFRSA4MDIuM3gNCj4gKyAgICBzdGFuZGFyZCkgcmVjZWl2ZWQgb24gdGhl IHRyYWZmaWMgZ2VuZXJhdG9yIFRYIHBvcnQuDQo+ICsNCj4gKy0gVHJhbnNtaXQgcmF0ZSAoTXBw cykNCj4gKw0KPiArICAtIFJhdGUgb2YgdHJhbnNtaXNzaW9uLiBJdCBpcyBjYWxjdWxhdGVkIGRp dmlkaW5nIHRoZSBudW1iZXIgb2Ygc2VudA0KPiArICAgIHBhY2tldHMgb3ZlciB0aGUgdGltZSBp dCB0b29rIHRoZSB0cmFmZmljIGdlbmVyYXRvciB0byBzZW5kIHRoZW0uDQo+ICsNCj4gKw0KPiAr ICArLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLQ0KPiAtLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiArICB8IFJpbmcgc2l6ZSB8IFF1 b3RhIHwgTG93IHdhdGVyLW1hcmsgfCBIaWdoIHdhdGVyLW1hcmsgfCBGcmFtZXMgc2VudCB8DQo+ IEZyYW1lcyByZWNlaXZlZCB8IENvbnRyb2wgZmxvdyBmcmFtZXMgcmVjZWl2ZWQgfCBUcmFuc21p dCByYXRlIChNcHBzKSB8DQo+ICsNCj4gKz09PT09PT09PT09Kz09PT09PT0rPT09PT09PT09PT09 PT09PSs9PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09Kz09PT0NCj4gPT09PT09PT09PT09 PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PSsN Cj4gKyAgfCA2NCAgICAgICAgfCA1ICAgICB8IDEgICAgICAgICAgICAgIHwgNSAgICAgICAgICAg ICAgIHwgMTUwMDAwMDAgICAgfA0KPiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAgICAgICAgICAgICAgICAgICB8DQo+ICsgICstLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstDQo+IC0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rDQo+ICsgIHwgNjQgICAgICAgIHwgNSAgICAgfCAxMCAgICAgICAgICAgICB8IDIwICAgICAg ICAgICAgICB8IDE1MDAwMDAwICAgIHwNCj4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgfA0KPiArICArLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLQ0KPiAtLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tKw0KPiArICB8IDY0ICAgICAgICB8IDUgICAgIHwgMTAgICAgICAgICAgICAgfCA5OSAg ICAgICAgICAgICAgfCAxNTAwMDAwMCAgICB8DQo+IHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwNCj4gKyAgKy0tLS0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0NCj4gLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsNCj4gKyAgfCA2NCAgICAgICAgfCA1ICAgICB8IDYwICAgICAgICAgICAgIHwg OTkgICAgICAgICAgICAgIHwgMTUwMDAwMDAgICAgfA0KPiB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8DQo+ICsgICstLS0tLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstDQo+ IC0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rDQo+ICsgIHwgNjQgICAgICAgIHwgNSAgICAgfCA5MCAgICAgICAgICAg ICB8IDk5ICAgICAgICAgICAgICB8IDE1MDAwMDAwICAgIHwNCj4gfCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfA0KPiArICArLS0tLS0tLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LQ0KPiAtLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tKw0KPiArICB8IDY0ICAgICAgICB8IDUgICAgIHwgMTAgICAgICAg ICAgICAgfCA4MCAgICAgICAgICAgICAgfCAxNTAwMDAwMCAgICB8DQo+IHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwNCj4gKyAgKy0tLS0tLS0t LS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0NCj4gLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gKyAgfCA2NCAgICAgICAgfCA1ICAgICB8IDUwICAg ICAgICAgICAgIHwgODAgICAgICAgICAgICAgIHwgMTUwMDAwMDAgICAgfA0KPiB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8DQo+ICsgICstLS0t LS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstDQo+IC0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ICsNCj4gKw0KPiArVGVzdCBDYXNlIDE6IFF1 b3RhIGFuZCBXYXRlci1tYXJrIG9uZSBzb2NrZXQgKGZ1bmN0aW9uYWwpDQo+ICs9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gK1VzaW5nIE5vLjEgY2FyZCBjb25m aWd1cmF0aW9uLg0KPiArDQo+ICtUaGlzIHRlc3QgY2FzZSBjYWxscyB0aGUgYXBwbGljYXRpb24g dXNpbmcgY29yZXMgYW5kIHBvcnRzIG1hc2tzIHNpbWlsYXINCj4gdG8NCj4gK3RoZSBvbmVzIHNo b3duIGJlbG93Lg0KPiArDQo+ICstIENvcmUgbWFzayBgYDB4RkYwMGBgDQo+ICstIFBvcnQgbWFz ayBgYDB4MjgwYGANCj4gKw0KPiArVGhpcyBjb3JlIG1hc2sgd2lsbCBtYWtlIHVzZSBvZiBlaWdo dCBwaHlzaWNhbCBjb3JlcyB3aXRoaW4gdGhlIHNhbWUNCj4gc29ja2V0Lg0KPiArVGhlIHVzZWQg cG9ydHMgYmVsb25nIHRvIGRpZmZlcmVudCBOSUPigJlzIGF0dGFjaGVkIHRvIHRoZSBzYW1lIHNv Y2tldC4NCj4gKw0KPiArU2FtcGxlIGNvbW1hbmQ6Og0KPiArDQo+ICsgIC4vZXhhbXBsZXMvcXVv dGFfd2F0ZXJtYXJrL3F3L2J1aWxkL3F3IC1jIDB4RkYwMCAtbiA0IC0tIC1wIDB4MjgwDQo+ICsN Cj4gK0FmdGVyIGJvb3QgdXAgcXcgYW5kIHF3Y3RsLCBzZW5kIElQIHBhY2tldHMgYnkgc2NhcHkg d2l0aCBsb3cgd2F0ZXJtYXJrDQo+IHZhbHVlLg0KPiArQ29tbWFuZCBmb3JtYXQ6Og0KPiArICAg c2VuZHAoW0V0aGVyKCkvSVAoKS8oIlgiKjI2KV0qPGxvdyB3YXRlcm1hcmsgdmFsdWU+LCBpZmFj ZT0iPHBvcnQNCj4gbmFtZT4iKQ0KPiArDQo+ICtTYW1wbGUgY29tbWFuZDo6DQo+ICsJc2VuZHAo W0V0aGVyKCkvSVAoKS8oIlgiKjI2KV0qMTAsIGlmYWNlPSJwNzg1cDEiKQ0KPiArDQo+ICtUZXN0 IENhc2UgMjogUXVvdGEgYW5kIFdhdGVyLW1hcmsgb25lIHNvY2tldCAocGVyZm9ybWFuY2UpDQo+ ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gKw0KPiArVGhp cyB0ZXN0IGNhc2UgY2FsbHMgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIGNvcmVzIGFuZCBwb3J0cyBt YXNrcyBzaW1pbGFyDQo+IHRvDQo+ICt0aGUgb25lcyBzaG93biBiZWxvdy4NCj4gKw0KPiArLSBD b3JlIG1hc2sgYGAweEZGMDBgYA0KPiArLSBQb3J0IG1hc2sgYGAweDI4MGBgDQo+ICsNCj4gK1Ro aXMgY29yZSBtYXNrIHdpbGwgbWFrZSB1c2Ugb2YgZWlnaHQgcGh5c2ljYWwgY29yZXMgd2l0aGlu IHRoZSBzYW1lDQo+IHNvY2tldC4NCj4gK1RoZSB1c2VkIHBvcnRzIGJlbG9uZyB0byBkaWZmZXJl bnQgTklD4oCZcyBhdHRhY2hlZCB0byB0aGUgc2FtZSBzb2NrZXQuDQo+ICsNCj4gK1NhbXBsZSBj b21tYW5kOjoNCj4gKw0KPiArICAuL2V4YW1wbGVzL3F1b3RhX3dhdGVybWFyay9xdy9idWlsZC9x dyAtYyAweEZGMDAgLW4gNCAtLSAtcCAweDI4MA0KPiArDQo+ICsNCj4gK1Rlc3QgQ2FzZSAzOiBR dW90YSBhbmQgV2F0ZXItbWFyayB0d28gc29ja2V0cyAocGVyZm9ybWFuY2UpDQo+ICs9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ICsNCj4gKw0KPiArVGhpcyB0 ZXN0IGNhc2UgY2FsbHMgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIGEgY29yZSBhbmQgcG9ydCBtYXNr IHNpbWlsYXINCj4gdG8gdGhlDQo+ICtvbmVzIHNob3duIGJlbG93Lg0KPiArDQo+ICstIENvcmUg bWFzayBgYDB4MEZGMGBgDQo+ICstIFBvcnQgbWFzayBgYDB4MjAyYGANCj4gKw0KPiArVGhpcyBj b3JlIG1hc2sgd2lsbCBtYWtlIHVzZSBvZiBlaWdodCBwaHlzaWNhbCBjb3JlczsgZm91ciB3aXRo aW4gdGhlDQo+IGZpcnN0DQo+ICtzb2NrZXQgYW5kIGZvdXIgb24gdGhlIHNlY29uZCBvbmUuIFRo ZSBSWCBwb3J0IHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlDQo+IGZpcnN0DQo+ICtzb2NrZXQgd2hl cmVhcyB0aGUgVFggaXMgdG8gdGhlIHNlY29uZC4gVGhpcyBjb25maWd1cmF0aW9uIHdpbGwgcHJv dm9rZQ0KPiB0aGUNCj4gK3RyYWZmaWMgZ29pbmcgdGhyb3VnaCB0aGUgcGlwZWxpbmUgcGFzcyB0 aHJvdWdoIHRoZSBgYFFQSWBgIGNoYW5uZWwuDQo+ICsNCj4gK1NhbXBsZSBjb21tYW5kOjoNCj4g Kw0KPiArICAuL2V4YW1wbGVzL3F1b3RhX3dhdGVybWFyay9xdy9idWlsZC9xdyAtYyAweDgxODA3 MDYgLW4gNCAtLSAtcCAweDIwMg0KPiArDQo+ICsNCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL1Rlc3RT dWl0ZV9xdW90YV93YXRlcm1hcmsucHkNCj4gYi90ZXN0cy9UZXN0U3VpdGVfcXVvdGFfd2F0ZXJt YXJrLnB5DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmJhNzI2MmQN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi90ZXN0cy9UZXN0U3VpdGVfcXVvdGFfd2F0ZXJtYXJr LnB5DQo+IEBAIC0wLDAgKzEsNDgyIEBADQo+ICsjIEJTRCBMSUNFTlNFDQo+ICsjDQo+ICsjIENv cHlyaWdodChjKSAyMDEwLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuDQo+ICsjIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ICsjDQo+ICsjIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KPiAr IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMNCj4gKyMgYXJlIG1ldDoNCj4gKyMNCj4gKyMgICAqIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ICsjICAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuDQo+ICsjICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KPiArIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluDQo+ICsjICAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQo+ ICsjICAgICBkaXN0cmlidXRpb24uDQo+ICsjICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVs IENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzDQo+ICsjICAgICBjb250cmlidXRvcnMg bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNCj4gKyMg ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4NCj4gKyMNCj4gKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KPiArIyAiQVMgSVMiIEFORCBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KPiArIyBMSU1J VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1INCj4gKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCj4gKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQo+ICsjIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO T1QNCj4gKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsDQo+ICsjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KPiArIyBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU DQo+ICsjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRQ0KPiArIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KPiArDQo+ICsiIiINCj4gK0RQ REsgVGVzdCBzdWl0ZS4NCj4gKw0KPiArUXVvdGEgJiBXYXRlcm1hcmsgZXhhbXBsZSBhcHAgdGVz dCBjYXNlcy4NCj4gKw0KPiArIiIiDQo+ICtpbXBvcnQgdGltZQ0KPiAraW1wb3J0IGR0cw0KPiAr ZnJvbSB0ZXN0X2Nhc2UgaW1wb3J0IFRlc3RDYXNlDQo+ICtmcm9tIGV0Z2VuIGltcG9ydCBJeGlh UGFja2V0R2VuZXJhdG9yDQo+ICtmcm9tIHBhY2tldCBpbXBvcnQgUGFja2V0LCBzbmlmZl9wYWNr ZXRzLCBsb2FkX3NuaWZmX3BhY2tldHMNCj4gKw0KPiArdGVzdF9jb25maWcgPSB7DQo+ICsgICAg J2ZyYW1lc190b19zZW50JzogMTUgKiAxMCAqKiA2LA0KPiArICAgICdyaW5nX3NpemVzJzogWzY0 LCAyNTYsIDEwMjRdLA0KPiArICAgICdsb3dfaGlnaF93YXRlcm1hcmtzJzogWw0KPiArICAgICAg ICAoMG8xLCAwbzUpLA0KPiArICAgICAgICAoMTAsIDIwKSwNCj4gKyAgICAgICAgKDEwLCA5OSks DQo+ICsgICAgICAgICg2MCwgOTkpLA0KPiArICAgICAgICAoOTAsIDk5KSwNCj4gKyAgICAgICAg KDEwLCA4MCksDQo+ICsgICAgICAgICg1MCwgODApLA0KPiArICAgICAgICAoNzAsIDgwKSwNCj4g KyAgICAgICAgKDcwLCA5MCksDQo+ICsgICAgICAgICg4MCwgOTApDQo+ICsgICAgXSwNCj4gKyAg ICAncXVvdGFfdmFsdWVzJzogWzUsIDMyLCA2MF0sDQo+ICt9DQo+ICsNCj4gKyMNCj4gKyMNCj4g KyMgVGVzdCBjbGFzcy4NCj4gKyMNCj4gKw0KPiArDQo+ICtjbGFzcyBUZXN0UXVvdGFXYXRlcm1h cmsoVGVzdENhc2UsIEl4aWFQYWNrZXRHZW5lcmF0b3IpOg0KPiArDQo+ICsgICAgIw0KPiArICAg ICMNCj4gKyAgICAjDQo+ICsgICAgIyBUZXN0IGNhc2VzLg0KPiArICAgICMNCj4gKw0KPiArICAg IGRlZiBzZXRfdXBfYWxsKHNlbGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgUnVuIGF0 IHRoZSBzdGFydCBvZiBlYWNoIHRlc3Qgc3VpdGUuDQo+ICsNCj4gKyAgICAgICAgUXVvdGEgd2F0 ZXJtYXJrIHByZXJlcXVpc2l0ZXMuDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIHNl bGYudGVzdGVyLmV4dGVuZF9leHRlcm5hbF9wYWNrZXRfZ2VuZXJhdG9yKFRlc3RRdW90YVdhdGVy bWFyaywNCj4gc2VsZikNCj4gKw0KPiArICAgIGRlZiBhZGRfcmVwb3J0X2hlYWRlcnMoc2VsZiwg Y29yZV9tYXNrLCBwb3J0X21hc2spOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgQWRkcyB0 aGUgdGFibGUgaGVhZGVyIGFuZCBzb21lIGluZm8gYWJvdXQgdGhlIGV4ZWN1dGVkIHRlc3QNCj4g KyAgICAgICAgIiIiDQo+ICsgICAgICAgIGR0cy5yZXBvcnQoJ0NvcmUgbWFzazogJXMnICUgY29y ZV9tYXNrKQ0KPiArICAgICAgICBkdHMucmVwb3J0KCdQb3J0IG1hc2s6ICVzJyAlIHBvcnRfbWFz aykNCj4gKyAgICAgICAgZHRzLnJlc3VsdHNfdGFibGVfYWRkX2hlYWRlcihbDQo+ICsgICAgICAg ICAgICAnUmluZyBzaXplJywNCj4gKyAgICAgICAgICAgICdRdW90YScsDQo+ICsgICAgICAgICAg ICAnTG93IHdhdGVyLW1hcmsnLA0KPiArICAgICAgICAgICAgJ0hpZ2ggd2F0ZXItbWFyaycsDQo+ ICsgICAgICAgICAgICAnRnJhbWVzIHNlbnQnLA0KPiArICAgICAgICAgICAgJ0ZyYW1lcyByZWNl aXZlZCcsDQo+ICsgICAgICAgICAgICAnQ29udHJvbCBmbG93IGZyYW1lcyByZWNlaXZlZCcsDQo+ ICsgICAgICAgICAgICAnVHJhbnNtaXQgcmF0ZSAoTXBwcyknDQo+ICsgICAgICAgIF0pDQo+ICsN Cj4gKyAgICBkZWYgc2V0X2FwcF9yaW5nX3NpemUoc2VsZiwgcmluZ19zaXplKToNCj4gKyAgICAg ICAgIiIiDQo+ICsgICAgICAgIENoYW5nZXMgdGhlIHJpbmcgc2l6ZSBieSBtb2RpZnlpbmcgdGhl IGV4YW1wbGUgYXBwIGNvZGUuDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIHNlZF9j b21tYW5kID0gKHIic2VkIC1pDQo+ICdzL15cKC4qUklOR19TSVpFXClccypbWzpkaWdpdDpdXSov XDEgJWQvJyAiICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgciJleGFtcGxlcy9xdW90YV93 YXRlcm1hcmsvaW5jbHVkZS9jb25mLmgiKQ0KPiArICAgICAgICBzZWxmLmR1dC5zZW5kX2V4cGVj dChzZWRfY29tbWFuZCAlIGludChyaW5nX3NpemUpLCAnIyAnKQ0KPiArDQo+ICsgICAgZGVmIGNv bXBpbGVfcXVvdGFfd2F0ZXJtYXJrX2V4YW1wbGVfYXBwcyhzZWxmKToNCj4gKyAgICAgICAgIiIi DQo+ICsgICAgICAgIEJ1aWxkcyB0aGUgZXhhbXBsZSBhcHAgYW5kIGNoZWNrcyBmb3IgZXJyb3Jz Lg0KPiArICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICBvdXQgPSBzZWxmLmR1dC5zZW5kX2V4 cGVjdCgibWFrZSAtQyBleGFtcGxlcy9xdW90YV93YXRlcm1hcmsiLCAiIw0KPiAiKQ0KPiArICAg ICAgICBzZWxmLnZlcmlmeSgiRXJyb3IiIG5vdCBpbiBvdXQgYW5kICJObyBzdWNoIGZpbGUiIG5v dCBpbiBvdXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICJDb21waWxhdGlvbiBlcnJvciIpDQo+ ICsNCj4gKyAgICBkZWYgZXhlY3V0ZV9xd19hcHAoc2VsZiwgY29yZV9tYXNrLCBwb3J0X21hc2ss IG1lbW9yeV9jaGFubmVscyk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBFeGVjdXRlcyB0 aGUgbWFpbiBleGFtcGxlIGFwcCBpbiB0aGUgYmFja2dyb3VuZC4NCj4gKyAgICAgICAgIiIiDQo+ ICsNCj4gKyAgICAgICAgY29tbWFuZCA9ICgnLi9leGFtcGxlcy9xdW90YV93YXRlcm1hcmsvcXcv cXcvJXMvcXcgLWMNCj4ge2NvcmVfbWFza30nICUgc2VsZi50YXJnZXQgKw0KPiArICAgICAgICAg ICAgICAgICAgICcgLW4ge21lbW9yeV9jaGFubmVsc30gLS0gLXAge3BvcnRfbWFza30gMj4mMSA+ DQo+IG91dHB1dC5sb2cgJicpDQo+ICsgICAgICAgIHNlbGYuZHV0LnNlbmRfZXhwZWN0KGNvbW1h bmQuZm9ybWF0KCoqbG9jYWxzKCkpLCAnIyAnKQ0KPiArDQo+ICsgICAgZGVmIGV4ZWN1dGVfcXdj dGxfYXBwKHNlbGYsIG1lbW9yeV9jaGFubmVscyk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAg ICBFeGVjdXRlcyB0aGUgY29udHJvbCBhcHAgYW5kIHJldHVybnMgd2FpdGluZyBmb3IgY29tbWFu ZHMuDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIGNvbW1hbmQgPSAnLi9leGFtcGxl cy9xdW90YV93YXRlcm1hcmsvcXdjdGwvcXdjdGwvJXMvcXdjdGwgLWMgMSAtDQo+IG4gJXMgLS1w cm9jLXR5cGU9c2Vjb25kYXJ5Jw0KPiArICAgICAgICBjb21tYW5kID0gY29tbWFuZCAlIChzZWxm LnRhcmdldCwgc3RyKG1lbW9yeV9jaGFubmVscykpDQo+ICsgICAgICAgIHJlc3VsdCA9IHNlbGYu ZHV0LnNlbmRfZXhwZWN0KGNvbW1hbmQsICdxd2N0bD4gJykNCj4gKyAgICAgICAgc2VsZi52ZXJp ZnkoJ0Vycm9yJyBub3QgaW4gcmVzdWx0LCAncXdjdGwgYXBwIGZhaWxlZCB0byBleGVjdXRlJykN Cj4gKw0KPiArICAgIGRlZiBleGVjdXRlX3F1b3RhX3dhdGVybWFya19leGFtcGxlX2FwcHMoc2Vs ZiwgY29yZV9tYXNrLCBwb3J0X21hc2ssDQo+IG1lbW9yeV9jaGFubmVscyk6DQo+ICsgICAgICAg ICIiIg0KPiArICAgICAgICBFeGVjdXRlIGJvdGggZXhhbXBsZSBhcHBzIGFuZCBjaGVja3MgZm9y IGVycm9ycy4NCj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAgc2VsZi5leGVjdXRlX3F3 X2FwcChjb3JlX21hc2ssIHBvcnRfbWFzaywgbWVtb3J5X2NoYW5uZWxzKQ0KPiArICAgICAgICAj IFdlIHdhaXQgdW50aWwgdGhlIGFwcCBzdGFydHMgYW5kIHdyaXRlcyBpdHMgb3V0cHV0IGRvd24g dG8gdGhlDQo+IGxvZw0KPiArICAgICAgICAjIGZpbGUNCj4gKyAgICAgICAgdGltZS5zbGVlcCgx NSkNCj4gKyAgICAgICAgcmVzdWx0ID0gc2VsZi5kdXQuc2VuZF9leHBlY3QoJ2NhdCBvdXRwdXQu bG9nJywgJyMgJykNCj4gKyAgICAgICAgc2VsZi52ZXJpZnkoJ1VTRVIxOiByZWNlaXZlX3N0YWdl KCkgc3RhcnRlZCcgaW4gcmVzdWx0LA0KPiArICAgICAgICAgICAgICAgICAgICAncXcgYXBwIGZh aWxlZCB0byBleGVjdXRlJykNCj4gKyAgICAgICAgc2VsZi5leGVjdXRlX3F3Y3RsX2FwcChtZW1v cnlfY2hhbm5lbHMpDQo+ICsNCj4gKyAgICBkZWYgY2xvc2VfcXVvdGFfd2F0ZXJtYXJrX2V4YW1w bGVfYXBwcyhzZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIENsb3NlIGNvbnRyb2wg YXBwIHNlbmRpbmcgQ3RybC1ELiBUaGlzIGFwcCBpcyBhbHdheXMgaW4NCj4gZm9yZWdyb3VuZC4N Cj4gKyAgICAgICAgQWxzbyBraWxscyB0aGUgbWFpbiBhcHAgd2hpY2ggaXMgaW4gdGhlIGJhY2tn cm91bmQuDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIHNlbGYuZHV0LnNlbmRfZXhw ZWN0KCdeRCcsICcjICcpDQo+ICsgICAgICAgIHNlbGYuZHV0LnNlbmRfZXhwZWN0KCdraWxsYWxs IHF3JywgJyMgJykNCj4gKw0KPiArICAgIGRlZiBzZW5kX3F3Y3RsX2NvbW1hbmQoc2VsZiwgY29t bWFuZCwgdW5leHBlY3RlZF9vdXRwdXRzKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFNl bmRzIGEgY29tbWFuZCB0byB0aGUgY29udHJvbCBhcHAgYW5kIGNoZWNrcyB0aGUgZ2l2ZW4NCj4g dW5leHBlY3RlZCBvdXRwdXQNCj4gKyAgICAgICAgaXMgbm90IGluIHRoZSBhcHAncyBvdXRwdXQu DQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIHJlc3VsdCA9IHNlbGYuZHV0LnNlbmRf ZXhwZWN0KGNvbW1hbmQsICdxd2N0bD4nKQ0KPiArICAgICAgICBmb3Igb3V0cHV0IGluIHVuZXhw ZWN0ZWRfb3V0cHV0czoNCj4gKyAgICAgICAgICAgIHNlbGYudmVyaWZ5KG91dHB1dCBub3QgaW4g cmVzdWx0LCAiYCVzJyBpcyBpbmNvcnJlY3QiICUNCj4gY29tbWFuZCkNCj4gKw0KPiArICAgIGRl ZiBzZXRfcXVvdGFfdmFsdWUoc2VsZiwgcXVvdGEpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAg ICAgU2V0cyB0aGUgZ2xvYmFsIHF1b3RhIHZhbHVlLg0KPiArICAgICAgICAiIiINCj4gKw0KPiAr ICAgICAgICBzZWxmLnNlbmRfcXdjdGxfY29tbWFuZCgnc2V0IHF1b3RhICVkJyAlIHF1b3RhLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3F1b3RhIG11c3QgYmUgYmV0d2Vl biddKQ0KPiArDQo+ICsgICAgZGVmIHNldF9sb3dfd2F0ZXJtYXJrKHNlbGYsIGxvd193YXRlcm1h cmspOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgU2V0cyB0aGUgZ2xvYmFsIGxvdyB3YXRl cm1hcmsgdmFsdWUuDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIHNlbGYuc2VuZF9x d2N0bF9jb21tYW5kKCdzZXQgbG93X3dhdGVybWFyayAlZCcgJSBsb3dfd2F0ZXJtYXJrLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2xvd193YXRlcm1hcmsgbXVzdCBiZSBi ZXR3ZWVuJ10pDQo+ICsNCj4gKyAgICBkZWYgc2V0X2hpZ2hfd2F0ZXJtYXJrX3NpbmdsZV9jb3Jl X3BvcnQoc2VsZiwgY29yZSwgcG9ydCwNCj4gaGlnaF93YXRlcm1hcmspOg0KPiArICAgICAgICAi IiINCj4gKyAgICAgICAgU2V0cyB0aGUgaGlnaCB3YXRlcm1hcmsgdmFsdWUgZm9yIGEgZ2l2ZW4g cmluZyBpZGVudGlmaWVkIGJ5IGENCj4gY29yZQ0KPiArICAgICAgICBhbmQgcG9ydCBudW1iZXIu DQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIGNvbW1hbmQgPSAnc2V0IGNvcmUlZF9w b3J0JWQgJWQnICUgXA0KPiArICAgICAgICAgICAgICAgICAgKGludChjb3JlKSwgaW50KHBvcnQp LCBpbnQoaGlnaF93YXRlcm1hcmspKQ0KPiArICAgICAgICB1bmV4cGVjdGVkID0gWw0KPiArICAg ICAgICAgICAgJ3JpbmcgaGlnaCB3YXRlcm1hcmsgbXVzdCBiZSBiZXR3ZWVuJywgJ0Nhbm5vdCBm aW5kIHJpbmcnXQ0KPiArICAgICAgICBzZWxmLnNlbmRfcXdjdGxfY29tbWFuZChjb21tYW5kLCB1 bmV4cGVjdGVkKQ0KPiArDQo+ICsgICAgZGVmIHNldF9oaWdoX3dhdGVybWFya19hbGxfY29yZXNf cG9ydHMoc2VsZiwgY29yZXMsIHBvcnRzLA0KPiBoaWdoX3dhdGVybWFyayk6DQo+ICsgICAgICAg ICIiIg0KPiArICAgICAgICBTZXRzIGhpZ2ggd2F0ZXJtYXJrIHZhbHVlIHRvIGEgbGlzdCBvZiBj b3Jlcy9wb3J0cy4gRHVlIHRvIHRoZQ0KPiBhcHAncyB3YXkNCj4gKyAgICAgICAgdG8gd29yayB0 aGUgbGFzdCBjb3JlIGRvZXNuJ3QgaGF2ZSBhbnkgcmluZyB0byBlbnF1ZXVlIGluLCB0aGF0J3MN Cj4gd2h5IHRoZQ0KPiArICAgICAgICBsYXN0IGNvcmUgaXMgYXZvaWRlZC4NCj4gKyAgICAgICAg IiIiDQo+ICsNCj4gKyAgICAgICAgY29yZXMuc29ydChrZXk9bGFtYmRhIGNvcmU6IGludChjb3Jl KSkNCj4gKyAgICAgICAgZm9yIGNvcmUgaW4gY29yZXNbOi0xXToNCj4gKyAgICAgICAgICAgIGZv ciBwb3J0IGluIHBvcnRzOg0KPiArICAgICAgICAgICAgICAgIHNlbGYuc2V0X2hpZ2hfd2F0ZXJt YXJrX3NpbmdsZV9jb3JlX3BvcnQoDQo+ICsgICAgICAgICAgICAgICAgICAgIGNvcmUsIHBvcnQs IGhpZ2hfd2F0ZXJtYXJrKQ0KPiArDQo+ICsgICAgZGVmIHByZXBhcmVfc2NhcHlfcGFja2V0KHNl bGYsIHBrdF9jbnQ9MSk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBDcmVhdGVzIGEgc2lt cGxlIHNjYXB5IHBhY2tldCB0byBydW4gdGhlIHRlc3RzIHdpdGgNCj4gKyAgICAgICAgIiIiDQo+ ICsNCj4gKw0KPiBzZWxmLnRlc3Rlci5zY2FweV9hcHBlbmQoJ2Zsb3c9W0V0aGVyKCkvSVAoKS8o IlgiKjI2KV0qJWQnJXBrdF9jbnQpDQo+ICsgICAgICAgIHNlbGYudGVzdGVyLnNjYXB5X2FwcGVu ZCgnd3JwY2FwKCJmaWxlLnBjYXAiLCBmbG93KScpDQo+ICsgICAgICAgIHNlbGYudGVzdGVyLnNj YXB5X2V4ZWN1dGUoKQ0KPiArDQo+ICsgICAgZGVmIGdldF9wb3J0c19jb25maWcoc2VsZiwgZHV0 X3J4X3BvcnQsIGR1dF90eF9wb3J0KToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIENyZWF0 ZXMgYSB1c2FibGUgZGF0YSBzdHJ1Y3R1cmUgd2hlcmUgdGhlIHBvcnRzIGNvbmZpZ3VyYXRpb24g aXMNCj4gc3RvcmVkLg0KPiArICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICBwb3J0c19jb25m aWcgPSB7fQ0KPiArICAgICAgICBwb3J0c19jb25maWdbJ2R1dF9yeCddID0gZHV0X3J4X3BvcnQN Cj4gKyAgICAgICAgcG9ydHNfY29uZmlnWydkdXRfdHgnXSA9IGR1dF90eF9wb3J0DQo+ICsgICAg ICAgIHBvcnRzX2NvbmZpZ1sNCj4gKyAgICAgICAgICAgICdkdXRfcG9ydF9tYXNrJ10gPSBkdHMu Y3JlYXRlX21hc2soW3BvcnRzX2NvbmZpZ1snZHV0X3R4J10sDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c19jb25maWdbJ2R1dF9yeCddXSkN Cj4gKyAgICAgICAgcG9ydHNfY29uZmlnWyd0ZXN0ZXJfcngnXSA9IHNlbGYudGVzdGVyLmdldF9s b2NhbF9wb3J0KA0KPiArICAgICAgICAgICAgcG9ydHNfY29uZmlnWydkdXRfcngnXSkNCj4gKyAg ICAgICAgcG9ydHNfY29uZmlnWyd0ZXN0ZXJfdHgnXSA9IHNlbGYudGVzdGVyLmdldF9sb2NhbF9w b3J0KA0KPiArICAgICAgICAgICAgcG9ydHNfY29uZmlnWydkdXRfdHgnXSkNCj4gKyAgICAgICAg cmV0dXJuIHBvcnRzX2NvbmZpZw0KPiArDQo+ICsgICAgZGVmIGdlbmVyYXRlX3RnZW5faW5wdXQo c2VsZiwgcG9ydHNfY29uZmlnLCBwa3RfY250PTEpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAg ICAgR2VuZXJhdGVzIHRoZSBhcmd1bWVudCB0aGF0IHRoZSBleHRlcm5hbCB0cmFmZmljIGdlbmVy YXRvcg0KPiBmdW5jdGlvbg0KPiArICAgICAgICB3YWl0cyB0byByZWNlaXZlIGFzIGFyZ3VtZW50 Lg0KPiArICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICBzZWxmLnByZXBhcmVfc2NhcHlfcGFj a2V0KHBrdF9jbnQpDQo+ICsgICAgICAgIHRnZW5faW5wdXQgPSBbW3BvcnRzX2NvbmZpZ1sndGVz dGVyX3R4J10sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHBvcnRzX2NvbmZpZ1sndGVzdGVy X3J4J10sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICdmaWxlLnBjYXAnXV0NCj4gKyAgICAg ICAgcmV0dXJuIHRnZW5faW5wdXQNCj4gKw0KPiArICAgIGRlZiBzZW5kX3BjYXBfcGt0X2J5X3Nj YXB5KHNlbGYsIHRlc3Rlcj1Ob25lLCBmaWxlPScnLCBpbnRmPScnKToNCj4gKyAgICAgICAgaWYg aW50ZiA9PSAnJyBvciBmaWxlID09ICcnIG9yIHRlc3RlciBpcyBOb25lOg0KPiArICAgICAgICAg ICAgcHJpbnQgIkludmFsaWQgb3B0aW9uIGZvciBzZW5kIHBhY2tldCBieSBzY2FweSINCj4gKyAg ICAgICAgICAgIHJldHVybg0KPiArDQo+ICsgICAgICAgIGNvbnRlbnQgPSAncGt0cz1yZHBjYXAo XCIlc1wiKTtzZW5kcChwa3RzLCBpZmFjZT1cIiVzXCIpO2V4aXQoKScgJQ0KPiAoZmlsZSwgaW50 ZikNCj4gKyAgICAgICAgY21kX2ZpbGUgPSAnL3RtcC9zY2FweV8lcy5jbWQnICUgaW50Zg0KPiAr DQo+ICsgICAgICAgIHRlc3Rlci5jcmVhdGVfZmlsZShjb250ZW50LCBjbWRfZmlsZSkNCj4gKyAg ICAgICAgdGVzdGVyLnNlbmRfZXhwZWN0KCJzY2FweSAtYyBzY2FweV8lcy5jbWQgJiIgJSBpbnRm LCAiIyAiKQ0KPiArDQo+ICsgICAgZGVmIGl0ZXJhdGVfdGhyb3VnaF9xd19yaW5nX3NpemVzKHNl bGYsIHBvcnRzX2NvbmZpZywgY29yZV9jb25maWcpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAg ICAgSXQgZ29lcyB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgcmluZyB2YWx1ZXMgY29tcGlsaW5nIHRo ZSBhcHBzLA0KPiBleGVjdXRpbmcNCj4gKyAgICAgICAgdGhlbSwgcnVubmluZyB0aGUgb3RoZXIg dGVzdCBwZXJtdXRhdGlvbnMgYW5kIGZpbmFsbHkgY2xvc2luZyB0aGUNCj4gYXBwcy4NCj4gKyAg ICAgICAgVGhlIHJpbmdzIGFyZSB0aGUgZmlyc3QgdG8gYmUgY292ZXJlZCBiZWNhdXNlIHdlIG5l ZWQgdG8NCj4gYnVpbGQvc3RhcnQvc3RvcA0KPiArICAgICAgICB0aGUgYXBwcyB0byBjaGFuZ2Ug dGhlbS4NCj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAgZHV0X3BvcnRzID0gW3BvcnRz X2NvbmZpZ1snZHV0X3J4J10sIHBvcnRzX2NvbmZpZ1snZHV0X3R4J11dDQo+ICsgICAgICAgIG1l bW9yeV9jaGFubmVscyA9IHNlbGYuZHV0LmdldF9tZW1vcnlfY2hhbm5lbHMoKQ0KPiArICAgICAg ICB0Z2VuX2lucHV0ID0gc2VsZi5nZW5lcmF0ZV90Z2VuX2lucHV0KHBvcnRzX2NvbmZpZykNCj4g Kw0KPiArICAgICAgICBmb3IgcmluZ19zaXplIGluIHRlc3RfY29uZmlnWydyaW5nX3NpemVzJ106 DQo+ICsgICAgICAgICAgICBzZWxmLnNldF9hcHBfcmluZ19zaXplKHJpbmdfc2l6ZSkNCj4gKyAg ICAgICAgICAgIHNlbGYuY29tcGlsZV9xdW90YV93YXRlcm1hcmtfZXhhbXBsZV9hcHBzKCkNCj4g KyAgICAgICAgICAgIHNlbGYuZXhlY3V0ZV9xdW90YV93YXRlcm1hcmtfZXhhbXBsZV9hcHBzKGNv cmVfY29uZmlnWydtYXNrJ10sDQo+ICsNCj4gcG9ydHNfY29uZmlnWydkdXRfcG9ydF9tYXNrJ10s DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtZW1vcnlfY2hhbm5lbHMpDQo+ICsNCj4gc2VsZi5pdGVyYXRlX3Rocm91Z2hfcXdfcXVvdGFf d2F0ZXJtYXJrcyggY29yZV9jb25maWdbJ2NvcmVzJ10sDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXRfcG9ydHMsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Z2VuX2lucHV0 LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmluZ19zaXplKQ0KPiArICAgICAgICAgICAgc2VsZi5jbG9zZV9xdW90YV93YXRlcm1hcmtf ZXhhbXBsZV9hcHBzKCkNCj4gKw0KPiArICAgIGRlZiBpdGVyYXRlX3Rocm91Z2hfcXdfcXVvdGFf d2F0ZXJtYXJrcyhzZWxmLCBjb3JlcywgcG9ydHMsDQo+IHRnZW5faW5wdXQsIHJpbmdfc2l6ZSk6 DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBHb2VzIHRocm91Z2ggdGhlIG90aGVyIHRlc3Qg cGVybXV0YXRpb25zIGNoYW5naW5nIHRoZSBxdW90YSBhbmQNCj4gd2F0ZXItbWFya3MNCj4gKyAg ICAgICAgdmFsdWVzLCBjYWxsaW5nIElYSUEgYW5kIHN0b3JpbmcgdGhlIHJlc3VsdHMgaW4gdGhl IHJlc3VsdCB0YWJsZS4NCj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAgZm9yIHF1b3Rh IGluIHRlc3RfY29uZmlnWydxdW90YV92YWx1ZXMnXToNCj4gKyAgICAgICAgICAgIGZvciBsb3df d2F0ZXJtYXJrLCBoaWdoX3dhdGVybWFyayBpbg0KPiB0ZXN0X2NvbmZpZ1snbG93X2hpZ2hfd2F0 ZXJtYXJrcyddOg0KPiArICAgICAgICAgICAgICAgIHNlbGYuc2V0X3F1b3RhX3ZhbHVlKHF1b3Rh KQ0KPiArICAgICAgICAgICAgICAgIHNlbGYuc2V0X2xvd193YXRlcm1hcmsobG93X3dhdGVybWFy aykNCj4gKyAgICAgICAgICAgICAgICBzZWxmLnNldF9oaWdoX3dhdGVybWFya19hbGxfY29yZXNf cG9ydHMoY29yZXMsIHBvcnRzLA0KPiBoaWdoX3dhdGVybWFyaykNCj4gKyAgICAgICAgICAgICAg ICBzZWxmLm51bV9vZl9mcmFtZXMgPSB0ZXN0X2NvbmZpZ1snZnJhbWVzX3RvX3NlbnQnXQ0KPiAr ICAgICAgICAgICAgICAgIHRlc3Rfc3RhdHMgPQ0KPiBzZWxmLnRlc3Rlci50cmFmZmljX2dlbmVy YXRvcl90aHJvdWdocHV0KHRnZW5faW5wdXQpDQo+ICsNCj4gKyAgICAgICAgICAgICAgICBkdHMu cmVzdWx0c190YWJsZV9hZGRfcm93KFtyaW5nX3NpemUsIHF1b3RhLA0KPiBsb3dfd2F0ZXJtYXJr LCBoaWdoX3dhdGVybWFya10gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGVzdF9zdGF0cykNCj4gKw0KPiArICAgIGRlZiBjaGVja19wYWNrZXRzX3RyYW5z ZmVyKHNlbGYsIHR4X3BvcnQsIHJ4X3BvcnQsIHRnZW5faW5wdXQsDQo+IHBrdF9jbnQ9MSk6DQo+ ICsgICAgICAgICcnJw0KPiArICAgICAgICBjaGVjayBwYWNrZXRzIHRyYW5zbWlzc2lvbiBzdGF0 dXMNCj4gKyAgICAgICAgJycnDQo+ICsgICAgICAgICMgY2hlY2sgZm9yd2FyZGVkIG1hYyBoYXMg YmVlbiBjaGFuZ2VkDQo+ICsgICAgICAgIHJldl9wb3J0ID0gc2VsZi50ZXN0ZXIuZ2V0X2xvY2Fs X3BvcnQocnhfcG9ydCkNCj4gKyAgICAgICAgc2VuZF9wb3J0ID0gc2VsZi50ZXN0ZXIuZ2V0X2xv Y2FsX3BvcnQodHhfcG9ydCkNCj4gKyAgICAgICAgZHN0X21hYyA9IHNlbGYuZHV0LmdldF9tYWNf YWRkcmVzcyhyeF9wb3J0KQ0KPiArICAgICAgICByeF9pbnRmID0gc2VsZi50ZXN0ZXIuZ2V0X2lu dGVyZmFjZShyZXZfcG9ydCkNCj4gKyAgICAgICAgdHhfaW50ZiA9IHNlbGYudGVzdGVyLmdldF9p bnRlcmZhY2Uoc2VuZF9wb3J0KQ0KPiArICAgICAgICAjIHNlbmQgYW5kIHNuaWZmIHBhY2tldA0K PiArICAgICAgICByeF9pbnN0ID0gc25pZmZfcGFja2V0cyhyeF9pbnRmLCB0aW1lb3V0PTUpDQo+ ICsgICAgICAgIHNlbGYuc2VuZF9wY2FwX3BrdF9ieV9zY2FweShzZWxmLnRlc3RlciwgdGdlbl9p bnB1dFswXVsyXSwNCj4gdHhfaW50ZikNCj4gKyAgICAgICAgcGt0cyA9IGxvYWRfc25pZmZfcGFj a2V0cyhyeF9pbnN0KQ0KPiArICAgICAgICBzZWxmLnZlcmlmeShsZW4ocGt0cykgPT0gcGt0X2Nu dCwgIlBhY2tldCBub3QgZm9yd2FyZGVkIGFzDQo+IGV4cGVjdGVkIikNCj4gKw0KPiArICAgICAg ICByZXR1cm4NCj4gKw0KPiArICAgIGRlZiBnZXRfc2V0dGluZ19wYXJhbWV0ZXJzKHNlbGYsIHBh cmFfdHlwZSk6DQo+ICsgICAgICAgICcnJw0KPiArICAgICAgICBnZXQgc2V0dGluZyBwYXJhbWV0 ZXJzIGZyb20gcGVyZm9ybWFuY2Ugc2V0dGluZw0KPiArICAgICAgICAnJycNCj4gKyAgICAgICAg c2V0dGluZ3MgPSB0ZXN0X2NvbmZpZ1twYXJhX3R5cGVdWzoxXQ0KPiArDQo+ICsgICAgICAgIHJl dHVybiBzZXR0aW5ncw0KPiArDQo+ICsgICAgZGVmIGZ1bmNfaXRlcmF0ZV90aHJvdWdoX3F3X3F1 b3RhX3dhdGVybWFya3Moc2VsZiwgY29yZXMsDQo+IHBvcnRzX2NvbmZpZywgcG9ydHMsIHJpbmdf c2l6ZSk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBHb2VzIHRocm91Z2ggdGhlIG90aGVy IHRlc3QgcGVybXV0YXRpb25zIGNoYW5naW5nIHRoZSBxdW90YSBhbmQNCj4gd2F0ZXItbWFya3MN Cj4gKyAgICAgICAgdmFsdWVzLCBzZW5kIHBhY2tldHMgYnkgc2NhcHkgYW5kIGNoZWNrIHBhY2tl dHMgdHJhbnNtaXNzaW9uDQo+IHN0YXR1cy4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGZv ciBxdW90YSBpbiBzZWxmLmdldF9zZXR0aW5nX3BhcmFtZXRlcnMoJ3F1b3RhX3ZhbHVlcycpOg0K PiArICAgICAgICAgICAgZm9yIGxvd193YXRlcm1hcmssIGhpZ2hfd2F0ZXJtYXJrIGluDQo+IHNl bGYuZ2V0X3NldHRpbmdfcGFyYW1ldGVycygnbG93X2hpZ2hfd2F0ZXJtYXJrcycpOg0KPiArICAg ICAgICAgICAgICAgIHNlbGYuc2V0X3F1b3RhX3ZhbHVlKHF1b3RhKQ0KPiArICAgICAgICAgICAg ICAgIHNlbGYuc2V0X2xvd193YXRlcm1hcmsobG93X3dhdGVybWFyaykNCj4gKyAgICAgICAgICAg ICAgICBzZWxmLnNldF9oaWdoX3dhdGVybWFya19hbGxfY29yZXNfcG9ydHMoIGNvcmVzLCBwb3J0 cywNCj4gaGlnaF93YXRlcm1hcmspDQo+ICsgICAgICAgICAgICAgICAgdGdlbl9pbnB1dCA9IHNl bGYuZ2VuZXJhdGVfdGdlbl9pbnB1dChwb3J0c19jb25maWcsDQo+IHBrdF9jbnQ9bG93X3dhdGVy bWFyaykNCj4gKyAgICAgICAgICAgICAgICB0ZXN0X3N0YXRzID0gc2VsZi5jaGVja19wYWNrZXRz X3RyYW5zZmVyKHBvcnRzWzBdLA0KPiBwb3J0c1sxXSwgdGdlbl9pbnB1dCwgcGt0X2NudD1sb3df d2F0ZXJtYXJrKQ0KPiArDQo+ICsgICAgZGVmIGZ1bmNfaXRlcmF0ZV90aHJvdWdoX3F3X3Jpbmdf c2l6ZXMoc2VsZiwgcG9ydHNfY29uZmlnLA0KPiBjb3JlX2NvbmZpZyk6DQo+ICsgICAgICAgICIi Ig0KPiArICAgICAgICBJdCBnb2VzIHRocm91Z2ggdGhlIGRpZmZlcmVudCByaW5nIHZhbHVlcyBj b21waWxpbmcgdGhlIGFwcHMsDQo+IGV4ZWN1dGluZw0KPiArICAgICAgICB0aGVtLCBydW5uaW5n IHRoZSBvdGhlciB0ZXN0IHBlcm11dGF0aW9ucyBhbmQgZmluYWxseSBjbG9zaW5nIHRoZQ0KPiBh cHBzLg0KPiArICAgICAgICBUaGUgcmluZ3MgYXJlIHRoZSBmaXJzdCB0byBiZSBjb3ZlcmVkIGJl Y2F1c2Ugd2UgbmVlZCB0bw0KPiBidWlsZC9zdGFydC9zdG9wDQo+ICsgICAgICAgIHRoZSBhcHBz IHRvIGNoYW5nZSB0aGVtLg0KPiArICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICBkdXRfcG9y dHMgPSBbcG9ydHNfY29uZmlnWydkdXRfcngnXSwgcG9ydHNfY29uZmlnWydkdXRfdHgnXV0NCj4g KyAgICAgICAgbWVtb3J5X2NoYW5uZWxzID0gc2VsZi5kdXQuZ2V0X21lbW9yeV9jaGFubmVscygp DQo+ICsNCj4gKyAgICAgICAgZm9yIHJpbmdfc2l6ZSBpbiBzZWxmLmdldF9zZXR0aW5nX3BhcmFt ZXRlcnMoJ3Jpbmdfc2l6ZXMnKToNCj4gKyAgICAgICAgICAgIHNlbGYuc2V0X2FwcF9yaW5nX3Np emUocmluZ19zaXplKQ0KPiArICAgICAgICAgICAgc2VsZi5jb21waWxlX3F1b3RhX3dhdGVybWFy a19leGFtcGxlX2FwcHMoKQ0KPiArICAgICAgICAgICAgc2VsZi5leGVjdXRlX3F1b3RhX3dhdGVy bWFya19leGFtcGxlX2FwcHMoY29yZV9jb25maWdbJ21hc2snXSwNCj4gKw0KPiBwb3J0c19jb25m aWdbJ2R1dF9wb3J0X21hc2snXSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9jaGFubmVscykNCj4gKw0KPiBzZWxmLmZ1bmNf aXRlcmF0ZV90aHJvdWdoX3F3X3F1b3RhX3dhdGVybWFya3MoIGNvcmVfY29uZmlnWydjb3Jlcydd LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwb3J0c19jb25maWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1dF9wb3J0cywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZ19zaXplKQ0K PiArICAgICAgICAgICAgc2VsZi5jbG9zZV9xdW90YV93YXRlcm1hcmtfZXhhbXBsZV9hcHBzKCkN Cj4gKw0KPiArICAgIGRlZiBjb25maWdfaXhpYV9zdHJlYW0oc2VsZiwgcmF0ZV9wZXJjZW50LCBm bG93cyk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBXb3JrIGFyb3VuZCB0aGF0IG92ZXJy aWRlcyB0aGUgZXRnZW4uY29uZlN0cmVhbSBmdW5jdGlvbiBpbiBvcmRlcg0KPiB0bw0KPiArICAg ICAgICBjaGFuZ2UgdGhlIHdheSB0aGF0IElYSUEgZ2V0cyBjYWxsZWQuDQo+ICsgICAgICAgIElu IHRoaXMgY2FzZSBJWElBIHNlbmRzIGEgZml4ZWQgbnVtYmVyIG9mIHBhY2tldHMgYW5kIHRoZW4g c3RvcHMuDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIHNlbGYuYWRkX3RjbF9jbWQo Iml4R2xvYmFsU2V0RGVmYXVsdCIpDQo+ICsgICAgICAgIHNlbGYuYWRkX3RjbF9jbWQoInN0cmVh bSBjb25maWcgLXJhdGVNb2RlIHVzZVBlcmNlbnRSYXRlIikNCj4gKyAgICAgICAgc2VsZi5hZGRf dGNsX2NtZCgic3RyZWFtIGNvbmZpZyAtcGVyY2VudFBhY2tldFJhdGUgJXMiICUNCj4gcmF0ZV9w ZXJjZW50KQ0KPiArDQo+ICsgICAgICAgICMgV2UgZGVmaW5lIG9uZSBidXJzdCB3aXRoIG51bV9m cmFtZXMgcGFja2V0cyBvbiBpdCBhbmQgd2UgYWxzbw0KPiB3YW50IElYSUENCj4gKyAgICAgICAg IyB0byBzdG9wIG9uY2UgYWxsIG9mIHRoZW0gaGF2ZSBiZWVuIHNlbnQuDQo+ICsgICAgICAgIHNl bGYuYWRkX3RjbF9jbWQoInN0cmVhbSBjb25maWcgLW51bUJ1cnN0cyAxIikNCj4gKyAgICAgICAg c2VsZi5hZGRfdGNsX2NtZCgic3RyZWFtIGNvbmZpZyAtbnVtRnJhbWVzICVkIiAlDQo+IHNlbGYu bnVtX29mX2ZyYW1lcykNCj4gKyAgICAgICAgc2VsZi5hZGRfdGNsX2NtZCgic3RyZWFtIGNvbmZp ZyAtZG1hIHN0b3BTdHJlYW0iKQ0KPiArDQo+ICsgICAgZGVmIGNvbmZpZ3VyZV90cmFuc21pc3Np b24oc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBXb3JrIGFyb3VuZCB0aGF0IHN1 YnN0aXR1dGUgdGhlIGV0Z2VuLlRocm91Z2hwdXQgZnVuY3Rpb24uDQo+ICsgICAgICAgIEl0IG1h a2VzIElYSUEgdG8gc2VuZCBhIGZpeGVkIG51bWJlciBvZiBwYWNrZXRzIGFuZCB3YWl0cyB1bnRp bA0KPiBpcyBkb25lLg0KPiArICAgICAgICBSZXR1cm5zIHNldmVyYWwgc3RhdCB2YWx1ZXMgbmVl ZGVkIGJ5IHRoZSB0ZXN0IGNhc2VzLg0KPiArICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICAj IFRoaXMgYmFzaWNhbGx5IG1lYW5zICJzdGFydCB0aGUgcGFja2V0cyB0cmFuc21pc3Npb24gYW5k IGRvbid0DQo+IHJldHVybg0KPiArICAgICAgICAjIHVudGlsIHlvdSBhcmUgZG9uZSIuIFRoYW5r cyB0byB0aGF0LCBhZnRlciB3ZSAic291cmNlDQo+IGl4aWFDb25maWcudGNsIiB3ZQ0KPiArICAg ICAgICAjIGFyZSAxMDAlIHN1cmUgdGhhdCBhbGwgdGhlIHBhY2tldHMgaGF2ZSBiZWVuIHNlbnQg YW5kIElYSUEgaXMNCj4gcHJldHR5IG11Y2gNCj4gKyAgICAgICAgIyBkb25lIHNvIHdlIGNhbiBy ZWFkIHRoZSBzdGF0cy4NCj4gKyAgICAgICAgc2VsZi5hZGRfdGNsX2NtZCgiaXhTdGFydFRyYW5z bWl0IHBvcnRMaXN0IikNCj4gKyAgICAgICAgc2VsZi5hZGRfdGNsX2NtZCgnYWZ0ZXIgMTAwMCcp DQo+ICsgICAgICAgIHNlbGYuYWRkX3RjbF9jbWQoJ2l4Q2hlY2tUcmFuc21pdERvbmUgcG9ydExp c3QnKQ0KPiArICAgICAgICAjIGVuZCBjb25maWd1cmVfdHJhbnNtaXNzaW9uDQo+ICsNCj4gKyAg ICBkZWYgZ2V0X3RyYW5zbWlzc2lvbl9yZXN1bHRzKHNlbGYsIHJ4X3BvcnRfbGlzdCwgdHhfcG9y dF9saXN0KToNCj4gKyAgICAgICAgZnJhbWVzX3JlY2VpdmVkID0gMA0KPiArICAgICAgICBmb3Ig cG9ydCBpbiByeF9wb3J0X2xpc3Q6DQo+ICsgICAgICAgICAgICBzZWxmLnN0YXRfZ2V0X3N0YXRf YWxsX3N0YXRzKHBvcnQpDQo+ICsgICAgICAgICAgICBmcmFtZXNfcmVjZWl2ZWQgKz0gc2VsZi5n ZXRfZnJhbWVzX3JlY2VpdmVkKCkNCj4gKw0KPiArICAgICAgICBmcmFtZXNfc2VudCA9IDANCj4g KyAgICAgICAgY29udHJvbF9mbG93X3JlY2VpdmVkID0gMA0KPiArICAgICAgICB0cmFuc21pdF9k dXJhdGlvbiA9IDANCj4gKyAgICAgICAgZm9yIHBvcnQgaW4gdHhfcG9ydF9saXN0Og0KPiArICAg ICAgICAgICAgc2VsZi5zdGF0X2dldF9zdGF0X2FsbF9zdGF0cyhwb3J0KQ0KPiArICAgICAgICAg ICAgY29udHJvbF9mbG93X3JlY2VpdmVkICs9IHNlbGYuZ2V0X2Zsb3dfY29udHJvbF9mcmFtZXMo KQ0KPiArICAgICAgICAgICAgZnJhbWVzX3NlbnQgKz0gc2VsZi5nZXRfZnJhbWVzX3NlbnQoKQ0K PiArICAgICAgICAgICAgIyBUaW1lIGluIG5hbm9zZWNvbmRzDQo+ICsgICAgICAgICAgICB0cmFu c21pdF9kdXJhdGlvbiArPSBzZWxmLmdldF90cmFuc21pdF9kdXJhdGlvbigpDQo+ICsNCj4gKyAg ICAgICAgcmF0ZSA9IHNlbGYucGFja2V0XzJfbWlsbHBhY2tldCgNCj4gKyAgICAgICAgICAgIGZy YW1lc19zZW50KSAvIHNlbGYubmFub3NlY18yX3NlYyh0cmFuc21pdF9kdXJhdGlvbikNCj4gKyAg ICAgICAgcmV0dXJuIFtmcmFtZXNfc2VudCwgZnJhbWVzX3JlY2VpdmVkLCBjb250cm9sX2Zsb3df cmVjZWl2ZWQsIHJhdGVdDQo+ICsNCj4gKyAgICBkZWYgbmFub3NlY18yX3NlYyhzZWxmLCBuYW5v X3NlY3MpOg0KPiArICAgICAgICByZXR1cm4gZmxvYXQobmFub19zZWNzKSAvIDEwZTkNCj4gKw0K PiArICAgIGRlZiBwYWNrZXRfMl9taWxscGFja2V0KHNlbGYsIG51bV9vZl9wa3QpOg0KPiArICAg ICAgICByZXR1cm4gZmxvYXQobnVtX29mX3BrdCkgLyAxMGU2DQo+ICsNCj4gKyAgICBkZWYgdGVz dF9xdW90YV93YXRlcm1hcmsoc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBUZXN0 IGNhc2UgdGhhdCBydW5zIHRoZSBkaWZmZXJlbnQgdGVzdCBwZXJtdXRhdGlvbnMgYnkgdXNpbmcN Cj4gY29yZXMgb24NCj4gKyAgICAgICAgYSBzaW5nbGUgc29ja2V0IGFuZCB0d28gcG9ydHMgYXR0 YWNoZWQgdG8gaXQuDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIGR1dF9wb3J0cyA9 IHNlbGYuZHV0LmdldF9wb3J0cyhzZWxmLm5pYywgcGVyZj1UcnVlKQ0KPiArICAgICAgICBzZWxm LnZlcmlmeShsZW4oZHV0X3BvcnRzKSA+PSAyLA0KPiArICAgICAgICAgICAgICAgICAgICAiSW5z dWZmaWNpZW50IHBvcnRzIGZvciBzcGVlZCB0ZXN0aW5nIikNCj4gKyAgICAgICAgcG9ydHNfY29u ZmlnID0gc2VsZi5nZXRfcG9ydHNfY29uZmlnKGR1dF9wb3J0c1swXSwgZHV0X3BvcnRzWzFdKQ0K PiArDQo+ICsgICAgICAgIGNvcmVzX29uZV9zb2NrZXQgPSBzZWxmLmR1dC5nZXRfY29yZV9saXN0 KCcxUy80Qy8xVCcpDQo+ICsgICAgICAgIGNvcmVfY29uZmlnID0gew0KPiArICAgICAgICAgICAg J2NvcmVzJzogY29yZXNfb25lX3NvY2tldCwNCj4gKyAgICAgICAgICAgICdtYXNrJzogZHRzLmNy ZWF0ZV9tYXNrKGNvcmVzX29uZV9zb2NrZXQpDQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAg ICBzZWxmLmZ1bmNfaXRlcmF0ZV90aHJvdWdoX3F3X3Jpbmdfc2l6ZXMocG9ydHNfY29uZmlnLCBj b3JlX2NvbmZpZykNCj4gKw0KPiArICAgIGRlZiB0ZXN0X3BlcmZfcXVvdGFfd2F0ZXJtYXJrX29u ZV9zb2NrZXQoc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBUZXN0IGNhc2UgdGhh dCBydW5zIHRoZSBkaWZmZXJlbnQgdGVzdCBwZXJtdXRhdGlvbnMgYnkgdXNpbmcNCj4gY29yZXMg b24NCj4gKyAgICAgICAgYSBzaW5nbGUgc29ja2V0IGFuZCB0d28gcG9ydHMgYXR0YWNoZWQgdG8g aXQuDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIGR1dF9wb3J0cyA9IHNlbGYuZHV0 LmdldF9wb3J0cyhzZWxmLm5pYywgcGVyZj1UcnVlKQ0KPiArICAgICAgICBzZWxmLnZlcmlmeShs ZW4oZHV0X3BvcnRzKSA+PSAyLCAiSW5zdWZmaWNpZW50IHBvcnRzIGZvciBzcGVlZA0KPiB0ZXN0 aW5nIikNCj4gKyAgICAgICAgcG9ydHNfY29uZmlnID0gc2VsZi5nZXRfcG9ydHNfY29uZmlnKGR1 dF9wb3J0c1syXSwgZHV0X3BvcnRzWzNdKQ0KPiArDQo+ICsgICAgICAgIGNvcmVzX29uZV9zb2Nr ZXQgPSBzZWxmLmR1dC5nZXRfY29yZV9saXN0KCcxUy80Qy8xVCcpDQo+ICsgICAgICAgIGNvcmVf Y29uZmlnID0gew0KPiArICAgICAgICAgICAgJ2NvcmVzJzogICBjb3Jlc19vbmVfc29ja2V0LA0K PiArICAgICAgICAgICAgJ21hc2snOiAgICBkdHMuY3JlYXRlX21hc2soY29yZXNfb25lX3NvY2tl dCkNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIHNlbGYuYWRkX3JlcG9ydF9oZWFkZXJz KCBjb3JlX2NvbmZpZ1snbWFzayddLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcG9ydHNfY29uZmlnWydkdXRfcG9ydF9tYXNrJ10pDQo+ICsgICAgICAgIHNlbGYuaXRlcmF0 ZV90aHJvdWdoX3F3X3Jpbmdfc2l6ZXMocG9ydHNfY29uZmlnLCBjb3JlX2NvbmZpZykNCj4gKyAg ICAgICAgZHRzLnJlc3VsdHNfdGFibGVfcHJpbnQoKQ0KPiArDQo+ICsgICAgZGVmIHRlc3RfcGVy Zl9xdW90YV93YXRlcm1hcmtfdHdvX3NvY2tldHMoc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiAr ICAgICAgICBUZXN0IGNhc2UgdGhhdCBydW5zIHRoZSBkaWZmZXJlbnQgdGVzdCBwZXJtdXRhdGlv bnMgYnkgdXNpbmcNCj4gY29yZXMgb24NCj4gKyAgICAgICAgdHdvIGRpZmZlcmVudCBzb2NrZXRz IHdpdGggYSBwb3J0IGF0dGFjaGVkIHRvIGVhY2ggb25lIG9mIHRoZW0uDQo+ICsgICAgICAgICIi Ig0KPiArDQo+ICsgICAgICAgIGR1dF9wb3J0cyA9IHNlbGYuZHV0LmdldF9wb3J0cyhzZWxmLm5p YywgcGVyZj1UcnVlKQ0KPiArICAgICAgICBzZWxmLnZlcmlmeShsZW4oZHV0X3BvcnRzKSA+PSA0 LCAiSW5zdWZmaWNpZW50IHBvcnRzIGZvciBzcGVlZA0KPiB0ZXN0aW5nIikNCj4gKyAgICAgICAg cG9ydHNfY29uZmlnID0gc2VsZi5nZXRfcG9ydHNfY29uZmlnKGR1dF9wb3J0c1swXSwgZHV0X3Bv cnRzWzNdKQ0KPiArDQo+ICsgICAgICAgIGNvcmVzX3R3b19zb2NrZXRzID0gc2VsZi5kdXQuZ2V0 X2NvcmVfbGlzdCgnMlMvNEMvMVQnKQ0KPiArICAgICAgICBjb3JlX2NvbmZpZyA9IHsNCj4gKyAg ICAgICAgICAgICdjb3Jlcyc6IGNvcmVzX3R3b19zb2NrZXRzLA0KPiArICAgICAgICAgICAgJ21h c2snOiBkdHMuY3JlYXRlX21hc2soY29yZXNfdHdvX3NvY2tldHMpDQo+ICsgICAgICAgIH0NCj4g Kw0KPiArICAgICAgICBzZWxmLmFkZF9yZXBvcnRfaGVhZGVycyggY29yZV9jb25maWdbJ21hc2sn XSwNCj4gcG9ydHNfY29uZmlnWydkdXRfcG9ydF9tYXNrJ10pDQo+ICsgICAgICAgIHNlbGYuaXRl cmF0ZV90aHJvdWdoX3F3X3Jpbmdfc2l6ZXMocG9ydHNfY29uZmlnLCBjb3JlX2NvbmZpZykNCj4g KyAgICAgICAgZHRzLnJlc3VsdHNfdGFibGVfcHJpbnQoKQ0KPiAtLQ0KPiAxLjkuMw0KDQo=