From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 9347E5693 for ; Mon, 1 Jun 2015 11:15:25 +0200 (CEST) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP; 01 Jun 2015 02:15:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,531,1427785200"; d="scan'208";a="579885792" Received: from pgsmsx105.gar.corp.intel.com ([10.221.44.96]) by orsmga003.jf.intel.com with ESMTP; 01 Jun 2015 02:15:19 -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; Mon, 1 Jun 2015 17:15:16 +0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.23]) by shsmsx102.ccr.corp.intel.com ([169.254.2.109]) with mapi id 14.03.0224.002; Mon, 1 Jun 2015 17:15:15 +0800 From: "Liu, Yong" To: "Zhang, XiaonanX" , "dts@dpdk.org" Thread-Topic: [dts] [PATCH] Support IP reassembly Thread-Index: AQHQmOpB74XVd1qYwkiv6sZZGRxZx52XZQpg Date: Mon, 1 Jun 2015 09:15:14 +0000 Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E10E3675B@SHSMSX103.ccr.corp.intel.com> References: <1432778472-24669-1-git-send-email-xiaonanx.zhang@intel.com> In-Reply-To: <1432778472-24669-1-git-send-email-xiaonanx.zhang@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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] Support IP reassembly 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: Mon, 01 Jun 2015 09:15:27 -0000 VGhhbmtzLCBhcHBsaWVkIGluIDEuMSBicmFuY2guDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gRnJvbTogZHRzIFttYWlsdG86ZHRzLWJvdW5jZXNAZHBkay5vcmddIE9uIEJlaGFs ZiBPZiBYaWFvbmFuIFpoYW5nDQo+IFNlbnQ6IFRodXJzZGF5LCBNYXkgMjgsIDIwMTUgMTA6MDEg QU0NCj4gVG86IGR0c0BkcGRrLm9yZw0KPiBTdWJqZWN0OiBbZHRzXSBbUEFUQ0hdIFN1cHBvcnQg SVAgcmVhc3NlbWJseQ0KPiANCj4gRnJvbTogWmhhbmd4aWFvbmFuIDx4aWFvbmFueC56aGFuZ0Bp bnRlbC5jb20+DQo+IA0KPiBBZGQgSVBWNCByZWFzc2VtYmx5IHRlc3QgY2FzZSBhbmQgdGVzdCBw bGFuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBUYW5nSGFpZmVuZyA8aGFpZmVuZ3gudGFuZ0BpbnRl bC5jb20+DQo+IC0tLQ0KPiAgdGVzdF9wbGFucy9pcHY0X3JlYXNzZW1ibHlfdGVzdF9wbGFuLnJz dCB8ICAyMzMgKysrKysrKysrKysrDQo+ICB0ZXN0cy9UZXN0U3VpdGVfaXB2NF9yZWFzc2VtYmx5 LnB5ICAgICAgIHwgIDU3OQ0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIDIg ZmlsZXMgY2hhbmdlZCwgODEyIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgdGVzdF9wbGFucy9pcHY0X3JlYXNzZW1ibHlfdGVzdF9wbGFuLnJzdA0K PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL1Rlc3RTdWl0ZV9pcHY0X3JlYXNzZW1ibHkucHkN Cj4gDQo+IGRpZmYgLS1naXQgYS90ZXN0X3BsYW5zL2lwdjRfcmVhc3NlbWJseV90ZXN0X3BsYW4u cnN0DQo+IGIvdGVzdF9wbGFucy9pcHY0X3JlYXNzZW1ibHlfdGVzdF9wbGFuLnJzdA0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi45MWJhNzkyDQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvdGVzdF9wbGFucy9pcHY0X3JlYXNzZW1ibHlfdGVzdF9wbGFuLnJzdA0KPiBA QCAtMCwwICsxLDIzMyBAQA0KPiArLi4gQ29weXJpZ2h0IChjKSA8MjAxMz4sIEludGVsIENvcnBv 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+ICs9PT09PT09PT09PT09DQo+ICtJUCBSZWFzc2VtYmx5DQo+ ICs9PT09PT09PT09PT09DQo+ICsNCj4gK1RoaXMgZG9jdW1lbnQgcHJvdmlkZXMgYSB0ZXN0IHBs YW4gZm9yIGJlbmNobWFya2luZyBvZiB0aGUgSVAgUmVhc3NlbWJseQ0KPiArc2FtcGxlIGFwcGxp Y2F0aW9uLiBUaGlzIGlzIGEgc2ltcGxlIGV4YW1wbGUgYXBwIGZlYXR1cmluZyBwYWNrZXQNCj4g cHJvY2Vzc2luZw0KPiArdXNpbmcgSW50ZWzCriBEYXRhIFBsYW5lIERldmVsb3BtZW50IEtpdCAo SW50ZWzCriBEUERLKSB0aGF0IHNob3ctY2FzZXMgdGhlDQo+IHVzZQ0KPiArb2YgSVAgZnJhZ21l bnRlZCBwYWNrZXRzIHJlYXNzZW1ibHkuDQo+ICsNCj4gKw0KPiArDQo+ICtQcmVyZXF1aXNpdGVz DQo+ICstLS0tLS0tLS0tLS0tDQo+ICsNCj4gK1N1cHBvcnQgaWdiX3VpbyBhbmQgdmZpbyBkcml2 ZXIsIGlmIHVzZWQgdmZpbywga2VybmVsIG5lZWQgMy42KyBhbmQNCj4gZW5hYmxlIHZ0LWQgaW4g Ymlvcy4NCj4gK1doZW4gdXNlZCB2ZmlvICwgdXNlZCAibW9kcHJvYmUgdmZpbyIgYW5kICJtb2Rw cm9iZSB2ZmlvLXBjaSIgaW5zbW9kDQo+IHZmaW9kIGRyaXZlciwgdGhlbiB1c2VkDQo+ICsiLi90 b29scy9kcGRrX25pY19iaW5kLnB5IC0tYmluZD12ZmlvLXBjaSBkZXZpY2VfYnVzX2lkIiB0byBi aW5kIHZmaW8NCj4gZHJpdmVyIHRvIHRlc3QgZHJpdmVyLg0KPiArDQo+ICsxeCBJbnRlbMKuIDgy NTk5IChOaWFudGljKSBOSUNzICgxeCAxMEdiRSBmdWxsIGR1cGxleCBvcHRpY2FsIHBvcnRzIHBl cg0KPiBOSUMpDQo+ICtwbHVnZ2VkIGludG8gdGhlIGF2YWlsYWJsZSBQQ0llIEdlbjIgOC1sYW5l IHNsb3RzLg0KPiArDQo+ICsNCj4gK1Rlc3QgQ2FzZTogU2VuZCAxSyBwYWNrZXRzLCA0IGZyYWdt ZW50cyBlYWNoIGFuZCAxSyBtYXhmbG93cw0KPiArPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ICsNCj4gK1NhbXBsZSBjb21tYW5k OjoNCj4gKw0KPiArICAuL2V4YW1wbGVzL2lwX3JlYXNzZW1ibHkvYnVpbGQvaXBfcmVhc3NlbWJs eSAtYyAweDIgLW4gNCAtLSAtUCAtcCAweDIgLQ0KPiAtY29uZmlnICIoMSwwLDEpIiAtLW1heGZs b3dzPTEwMjQgLS1mbG93dHRsPTEwcw0KPiArDQo+ICtTZW5kcyAxSyBwYWNrZXRzIHNwbGl0IGlu IDQgZnJhZ21lbnRzIGVhY2ggd2l0aCBhIGBgbWF4Zmxvd3NgYCBvZiAxSy4NCj4gKw0KPiArSXQg ZXhwZWN0czoNCj4gKw0KPiArICAtIDRLIElQIHBhY2tldHMgdG8gYmUgc2VudCB0byB0aGUgRFVU Lg0KPiArICAtIDFLIFRDUCBwYWNrZXRzIGJlaW5nIGZvcndhcmRlZCBiYWNrIHRvIHRoZSBURVNU RVIuDQo+ICsgIC0gMUsgcGFja2V0cyB3aXRoIGEgdmFsaWQgVENQIGNoZWNrc3VtLg0KPiArDQo+ ICsNCj4gK1Rlc3QgQ2FzZTogU2VuZCAySyBwYWNrZXRzLCA0IGZyYWdtZW50cyBlYWNoIGFuZCAx SyBtYXhmbG93cw0KPiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQo+ICsNCj4gK1NhbXBsZSBjb21tYW5kOjoNCj4gKw0KPiArICAu L2V4YW1wbGVzL2lwX3JlYXNzZW1ibHkvYnVpbGQvaXBfcmVhc3NlbWJseSAtYyAweDIgLW4gNCAt LSAtUCAtcCAweDIgLQ0KPiAtY29uZmlnICIoMSwwLDEpIiAtLW1heGZsb3dzPTEwMjQgLS1mbG93 dHRsPTEwcw0KPiArDQo+ICtTZW5kcyAySyBwYWNrZXRzIHNwbGl0IGluIDQgZnJhZ21lbnRzIGVh Y2ggd2l0aCBhIGBgbWF4Zmxvd3NgYCBvZiAxSy4NCj4gKw0KPiArSXQgZXhwZWN0czoNCj4gKw0K PiArICAtIDhLIElQIHBhY2tldHMgdG8gYmUgc2VudCB0byB0aGUgRFVULg0KPiArICAtIDFLIFRD UCBwYWNrZXRzIGJlaW5nIGZvcndhcmRlZCBiYWNrIHRvIHRoZSBURVNURVIuDQo+ICsgIC0gMUsg cGFja2V0cyB3aXRoIGEgdmFsaWQgVENQIGNoZWNrc3VtLg0KPiArDQo+ICsNCj4gK1Rlc3QgQ2Fz ZTogU2VuZCA0SyBwYWNrZXRzLCA3IGZyYWdtZW50cyBlYWNoIGFuZCA0SyBtYXhmbG93cw0KPiAr PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQo+ICsNCj4gK1NhbXBsZSBjb21tYW5kOjoNCj4gKw0KPiArICAuL2V4YW1wbGVzL2lwX3Jl YXNzZW1ibHkvYnVpbGQvaXBfcmVhc3NlbWJseSAtYyAweDIgLW4gNCAtLSAtUCAtcCAweDIgLQ0K PiAtY29uZmlnICIoMSwwLDEpIiAtLW1heGZsb3dzPTQwOTYgLS1mbG93dHRsPTEwcw0KPiArDQo+ ICtNb2RpZmllcyB0aGUgc2FtcGxlIGFwcCBzb3VyY2UgY29kZSB0byBlbmFibGUgdXAgdG8gNyBm cmFnbWVudHMgcGVyDQo+IHBhY2tldC4NCj4gK1NlbmRzIDRLIHBhY2tldHMgc3BsaXQgaW4gNyBm cmFnbWVudHMgZWFjaCB3aXRoIGEgYGBtYXhmbG93c2BgIG9mIDRLLg0KPiArDQo+ICtJdCBleHBl Y3RzOg0KPiArDQo+ICsgIC0gMjhLIElQIHBhY2tldHMgdG8gYmUgc2VudCB0byB0aGUgRFVULg0K PiArICAtIDRLIFRDUCBwYWNrZXRzIGJlaW5nIGZvcndhcmRlZCBiYWNrIHRvIHRoZSBURVNURVIu DQo+ICsgIC0gNEsgcGFja2V0cyB3aXRoIGEgdmFsaWQgVENQIGNoZWNrc3VtLg0KPiArDQo+ICsN Cj4gK1Rlc3QgQ2FzZTogU2VuZCArMUsgcGFja2V0cyBhbmQgdHRsIDNzOyB3YWl0ICt0dGw7IHNl bmQgMUsgcGFja2V0cw0KPiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ICsNCj4gK1NhbXBsZSBjb21tYW5kOjoNCj4g Kw0KPiArICAuL2V4YW1wbGVzL2lwX3JlYXNzZW1ibHkvYnVpbGQvaXBfcmVhc3NlbWJseSAtYyAw eDIgLW4gNCAtLSAtUCAtcCAweDIgLQ0KPiAtY29uZmlnICIoMSwwLDEpIiAtLW1heGZsb3dzPTEw MjQgLS1mbG93dHRsPTNzDQo+ICsNCj4gK1NlbmRzIDExMDAgcGFja2V0cyBzcGxpdCBpbiA0IGZy YWdtZW50cyBlYWNoLg0KPiArDQo+ICtJdCBleHBlY3RzOg0KPiArDQo+ICsgIC0gNDQwMCBJUCBw YWNrZXRzIHRvIGJlIHNlbnQgdG8gdGhlIERVVC4NCj4gKyAgLSAxSyBUQ1AgcGFja2V0cyBiZWlu ZyBmb3J3YXJkZWQgYmFjayB0byB0aGUgVEVTVEVSLg0KPiArICAtIDFLIHBhY2tldHMgd2l0aCBh IHZhbGlkIFRDUCBjaGVja3N1bS4NCj4gKw0KPiArDQo+ICtUaGVuIHdhaXRzIHVudGlsIHRoZSBg YGZsb3d0dGxgYCB0aW1lb3V0IGFuZCBzZW5kcyAxSyBwYWNrZXRzLg0KPiArDQo+ICtJdCBleHBl Y3RzOg0KPiArDQo+ICsgIC0gNEsgSVAgcGFja2V0cyB0byBiZSBzZW50IHRvIHRoZSBEVVQuDQo+ ICsgIC0gMUsgVENQIHBhY2tldHMgYmVpbmcgZm9yd2FyZGVkIGJhY2sgdG8gdGhlIFRFU1RFUi4N Cj4gKyAgLSAxSyBwYWNrZXRzIHdpdGggYSB2YWxpZCBUQ1AgY2hlY2tzdW0uDQo+ICsNCj4gKw0K PiArVGVzdCBDYXNlOiBTZW5kIG1vcmUgcGFja2V0cyB0aGFuIG1heGZsb3dzOyBvbmx5IG1heGZs b3dzIHBhY2tldHMgYXJlDQo+IGZvcndhcmRlZCBiYWNrDQo+ICs9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ ID09PT09PT09PT09DQo+ICsNCj4gK1NhbXBsZSBjb21tYW5kOjoNCj4gKw0KPiArICAuL2V4YW1w bGVzL2lwX3JlYXNzZW1ibHkvYnVpbGQvaXBfcmVhc3NlbWJseSAtYyAweDIgLW4gNCAtLSAtUCAt cCAweDIgLQ0KPiAtY29uZmlnICIoMSwwLDEpIiAtLW1heGZsb3dzPTEwMjMgLS1mbG93dHRsPTVz DQo+ICsNCj4gK1NlbmRzIDFLIHBhY2tldHMgd2l0aCBgYG1heGZsb3dzYGAgZXF1YWwgdG8gMTAy My4NCj4gKw0KPiArSXQgZXhwZWN0czoNCj4gKw0KPiArICAtIDQwOTIgSVAgcGFja2V0cyB0byBi ZSBzZW50IHRvIHRoZSBEVVQuDQo+ICsgIC0gMTAyMyBUQ1AgcGFja2V0cyBiZWluZyBmb3J3YXJk ZWQgYmFjayB0byB0aGUgVEVTVEVSLg0KPiArICAtIDEwMjMgcGFja2V0cyB3aXRoIGEgdmFsaWQg VENQIGNoZWNrc3VtLg0KPiArDQo+ICtUaGVuIHNlbmRzIDEwMjMgcGFja2V0cy4NCj4gKw0KPiAr SXQgZXhwZWN0czoNCj4gKw0KPiArICAtIDQwOTIgSVAgcGFja2V0cyB0byBiZSBzZW50IHRvIHRo ZSBEVVQuDQo+ICsgIC0gMTAyMyBUQ1AgcGFja2V0cyBiZWluZyBmb3J3YXJkZWQgYmFjayB0byB0 aGUgVEVTVEVSLg0KPiArICAtIDEwMjMgcGFja2V0cyB3aXRoIGEgdmFsaWQgVENQIGNoZWNrc3Vt Lg0KPiArDQo+ICtGaW5hbGx5IHdhaXRzIHVudGlsIHRoZSBgYGZsb3d0dGxgYCB0aW1lb3V0IGFu ZCByZS1zZW5kIDFLIHBhY2tldHMuDQo+ICsNCj4gK0l0IGV4cGVjdHM6DQo+ICsNCj4gKyAgLSA0 MDkyIElQIHBhY2tldHMgdG8gYmUgc2VudCB0byB0aGUgRFVULg0KPiArICAtIDEwMjMgVENQIHBh Y2tldHMgYmVpbmcgZm9yd2FyZGVkIGJhY2sgdG8gdGhlIFRFU1RFUi4NCj4gKyAgLSAxMDIzIHBh Y2tldHMgd2l0aCBhIHZhbGlkIFRDUCBjaGVja3N1bS4NCj4gKw0KPiArDQo+ICtUZXN0IENhc2U6 IFNlbmQgbW9yZSBmcmFnbWVudHMgdGhhbiBzdXBwb3J0ZWQNCj4gKz09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiArDQo+ICtTYW1wbGUgY29tbWFuZDo6DQo+ ICsNCj4gKyAgLi9leGFtcGxlcy9pcF9yZWFzc2VtYmx5L2J1aWxkL2lwX3JlYXNzZW1ibHkgLWMg MHgyIC1uIDQgLS0gLVAgLXAgMHgyIC0NCj4gLWNvbmZpZyAiKDEsMCwxKSIgLS1tYXhmbG93cz0x MDI0IC0tZmxvd3R0bD0xMHMNCj4gKw0KPiArU2VuZHMgMSBwYWNrZXQgc3BsaXQgaW4gNSBmcmFn bWVudHMgd2hpbGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZA0KPiArZnJhZ21lbnRz IHBlciBwYWNrZXQgaXMgNC4NCj4gKw0KPiArSXQgZXhwZWN0czoNCj4gKw0KPiArICAtIDUgSVAg cGFja2V0cyB0byBiZSBzZW50IHRvIHRoZSBEVVQuDQo+ICsgIC0gMCBUQ1AgcGFja2V0cyBiZWlu ZyBmb3J3YXJkZWQgYmFjayB0byB0aGUgVEVTVEVSLg0KPiArICAtIDAgcGFja2V0cyB3aXRoIGEg dmFsaWQgVENQIGNoZWNrc3VtLg0KPiArDQo+ICsNCj4gKw0KPiArVGVzdCBDYXNlOiBTZW5kIDMg ZnJhbWVzIGFuZCBkZWxheSB0aGUgNHRoOyBubyBmcmFtZXMgYXJlIGZvcndhcmRlZCBiYWNrDQo+ ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCj4gKw0KPiArU2FtcGxlIGNvbW1hbmQ6Og0KPiArDQo+ICsgIC4v ZXhhbXBsZXMvaXBfcmVhc3NlbWJseS9idWlsZC9pcF9yZWFzc2VtYmx5IC1jIDB4MiAtbiA0IC0t IC1QIC1wIDB4MiAtDQo+IC1jb25maWcgIigxLDAsMSkiIC0tbWF4Zmxvd3M9MTAyNCAtLWZsb3d0 dGw9M3MNCj4gKw0KPiArQ3JlYXRlcyAxIHBhY2tldCBzcGxpdCBpbiA0IGZyYWdtZW50cy4gU2Vu ZHMgdGhlIGZpcnN0IDMgZnJhZ21lbnRzIGFuZA0KPiB3YWl0cw0KPiArdW50aWwgdGhlIGBgZmxv d3R0bGBgIHRpbWVvdXQuIFRoZW4gc2VuZHMgdGhlIDR0aCBmcmFnbWVudC4NCj4gKw0KPiArSXQg ZXhwZWN0czoNCj4gKw0KPiArICAtIDQgSVAgcGFja2V0cyB0byBiZSBzZW50IHRvIHRoZSBEVVQu DQo+ICsgIC0gMCBUQ1AgcGFja2V0cyBiZWluZyBmb3J3YXJkZWQgYmFjayB0byB0aGUgVEVTVEVS Lg0KPiArICAtIDAgcGFja2V0cyB3aXRoIGEgdmFsaWQgVENQIGNoZWNrc3VtLg0KPiArDQo+ICsN Cj4gKw0KPiArVGVzdCBDYXNlOiBTZW5kIGp1bWJvIGZyYW1lcw0KPiArPT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KPiArDQo+ICtTYW1wbGUgY29tbWFuZDo6DQo+ICsNCj4gKyAgLi9leGFt cGxlcy9pcF9yZWFzc2VtYmx5L2J1aWxkL2lwX3JlYXNzZW1ibHkgLWMgMHgyIC1uIDQgLS0gLVAg LXAgMHgyIC0NCj4gLWNvbmZpZyAiKDEsMCwxKSIgLS1tYXhmbG93cz0xMDI0IC0tZmxvd3R0bD0x MHMgLS1lbmFibGUtanVtYm8gLS1tYXgtcGt0LQ0KPiBsZW49OTUwMA0KPiArDQo+ICtTZXRzIHRo ZSBOSUMgTVRVIHRvIDkwMDAgYW5kIHNlbmRzIDFLIHBhY2tldHMgb2YgODkwMEIgc3BsaXQgaW4g NA0KPiBmcmFnbWVudHMgb2YNCj4gKzI1MDBCIGF0IHRoZSBtb3N0LiBUaGUgcmVhc3NlbWJsZWQg cGFja2V0IHNpemUgd2lsbCBub3QgYmUgYmlnZ2VyIHRoYW4NCj4gdGhlDQo+ICtNVFUgcHJldmlv dXNseSBkZWZpbmVkLg0KPiArDQo+ICtJdCBleHBlY3RzOg0KPiArDQo+ICsgIC0gNEsgSVAgcGFj a2V0cyB0byBiZSBzZW50IHRvIHRoZSBEVVQuDQo+ICsgIC0gMUsgVENQIHBhY2tldHMgYmVpbmcg Zm9yd2FyZGVkIGJhY2sgdG8gdGhlIFRFU1RFUi4NCj4gKyAgLSAxSyBwYWNrZXRzIHdpdGggYSB2 YWxpZCBUQ1AgY2hlY2tzdW0uDQo+ICsNCj4gKw0KPiArVGVzdCBDYXNlOiBTZW5kIGp1bWJvIGZy YW1lcyB3aXRob3V0IGVuYWJsZSB0aGVtIGluIHRoZSBhcHANCj4gKz09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ICsNCj4gK1NhbXBs ZSBjb21tYW5kOjoNCj4gKw0KPiArICAuL2V4YW1wbGVzL2lwX3JlYXNzZW1ibHkvYnVpbGQvaXBf cmVhc3NlbWJseSAtYyAweDIgLW4gNCAtLSAtUCAtcCAweDIgLQ0KPiAtY29uZmlnICIoMSwwLDEp IiAtLW1heGZsb3dzPTEwMjQgLS1mbG93dHRsPTEwcw0KPiArDQo+ICtTZW5kcyBqdW1ibyBwYWNr ZXRzIGluIHRoZSBzYW1lIHdheSB0aGUgcHJldmlvdXMgdGVzdCBjYXNlIGRvZXMgYnV0DQo+IHdp dGhvdXQNCj4gK2VuYWJsaW5nIHN1cHBvcnQgd2l0aGluIHRoZSBzYW1wbGUgYXBwLg0KPiArDQo+ ICtJdCBleHBlY3RzOg0KPiArDQo+ICsgIC0gNEsgSVAgcGFja2V0cyB0byBiZSBzZW50IHRvIHRo ZSBEVVQuDQo+ICsgIC0gMCBUQ1AgcGFja2V0cyBiZWluZyBmb3J3YXJkZWQgYmFjayB0byB0aGUg VEVTVEVSLg0KPiArICAtIDAgcGFja2V0cyB3aXRoIGEgdmFsaWQgVENQIGNoZWNrc3VtLg0KPiAr DQo+ICsNCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL1Rlc3RTdWl0ZV9pcHY0X3JlYXNzZW1ibHkucHkN Cj4gYi90ZXN0cy9UZXN0U3VpdGVfaXB2NF9yZWFzc2VtYmx5LnB5DQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmUyNDU3NmMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi90ZXN0cy9UZXN0U3VpdGVfaXB2NF9yZWFzc2VtYmx5LnB5DQo+IEBAIC0wLDAgKzEsNTc5IEBA DQo+ICsjIDxDT1BZUklHSFRfVEFHPg0KPiArDQo+ICsiIiINCj4gK0RQREsgVGVzdCBzdWl0ZS4N Cj4gKw0KPiArVGVzdCB0aGUgSVAgcmVhc3NlbWJseSBmZWF0dXJlDQo+ICsNCj4gKyIiIg0KPiAr DQo+ICtpbXBvcnQgb3MNCj4gK2ltcG9ydCB0aW1lDQo+ICtmcm9tIHNjYXB5LnV0aWxzIGltcG9y dCBzdHJ1Y3QsIHNvY2tldCwgUGNhcFdyaXRlcg0KPiArZnJvbSBzY2FweS5sYXllcnMuaW5ldCBp bXBvcnQgRXRoZXIsIElQLCBUQ1AsIGZyYWdtZW50DQo+ICtmcm9tIHNjYXB5LnJvdXRlIGltcG9y dCAqDQo+ICsNCj4gK2ltcG9ydCBkdHMNCj4gK2Zyb20gdGVzdF9jYXNlIGltcG9ydCBUZXN0Q2Fz ZQ0KPiArDQo+ICsNCj4gK2NsYXNzIElwUmVhc3NlbWJseVRlc3RDb25maWcob2JqZWN0KToNCj4g Kw0KPiArICAgICIiIg0KPiArICAgIEhlbHBlciBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyBhbGwg dGhlIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUNCj4gZGlmZmVyZW50DQo+ICsgICAgdGVzdCBjYXNl cyBjb21wb25lbnRzLg0KPiArICAgICIiIg0KPiArDQo+ICsgICAgIw0KPiArICAgICMNCj4gKyAg ICAjIFV0aWxpdHkgbWV0aG9kcyBhbmQgb3RoZXIgbm9uLXRlc3QgY29kZS4NCj4gKyAgICAjDQo+ ICsNCj4gKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlLCAqKmt3YXJncyk6DQo+ICsg ICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlDQo+ICsgICAgICAgIHNlbGYuaW5pdCgp DQo+ICsgICAgICAgIGZvciBuYW1lIGluIGt3YXJnczoNCj4gKyAgICAgICAgICAgIHNldGF0dHIo c2VsZiwgbmFtZSwga3dhcmdzW25hbWVdKQ0KPiArDQo+ICsgICAgZGVmIGluaXQoc2VsZik6DQo+ ICsgICAgICAgIHNlbGYuY3B1X2NvbmZpZygpDQo+ICsgICAgICAgIHNlbGYucG9ydHNfY29uZmln KCkNCj4gKyAgICAgICAgc2VsZi5leGFtcGxlX2FwcF9jb25maWcoKQ0KPiArICAgICAgICBzZWxm LnBhY2tldHNfY29uZmlnKCkNCj4gKw0KPiArICAgIGRlZiBjcHVfY29uZmlnKHNlbGYpOg0KPiAr ICAgICAgICBzZWxmLmNvcmVfbGlzdCA9IHNlbGYudGVzdF9jYXNlLmR1dC5nZXRfY29yZV9saXN0 KCcxUy8xQy8xVCcpDQo+ICsgICAgICAgIHNlbGYuY29yZV9tYXNrID0gZHRzLmNyZWF0ZV9tYXNr KHNlbGYuY29yZV9saXN0KQ0KPiArICAgICAgICBzZWxmLm1lbW9yeV9jaGFubmVscyA9IHNlbGYu dGVzdF9jYXNlLmR1dC5nZXRfbWVtb3J5X2NoYW5uZWxzKCkNCj4gKw0KPiArICAgIGRlZiBwb3J0 c19jb25maWcoc2VsZik6DQo+ICsgICAgICAgIGR1dF9wb3J0cyA9IHNlbGYudGVzdF9jYXNlLmR1 dC5nZXRfcG9ydHMoc2VsZi50ZXN0X2Nhc2UubmljKQ0KPiArICAgICAgICBkdXRfcG9ydCA9IGR1 dF9wb3J0c1swXQ0KPiArICAgICAgICB0ZXN0ZXJfcG9ydCA9IHNlbGYudGVzdF9jYXNlLnRlc3Rl ci5nZXRfbG9jYWxfcG9ydChkdXRfcG9ydCkNCj4gKyAgICAgICAgc2VsZi50ZXN0ZXJfaWZhY2Ug PQ0KPiBzZWxmLnRlc3RfY2FzZS50ZXN0ZXIuZ2V0X2ludGVyZmFjZSh0ZXN0ZXJfcG9ydCkNCj4g KyAgICAgICAgc2VsZi5kdXRfcG9ydF9tYXNrID0gZHRzLmNyZWF0ZV9tYXNrKFtkdXRfcG9ydF0p DQo+ICsgICAgICAgIHNlbGYucXVldWVfY29uZmlnID0gJyh7fSx7fSx7fSknLmZvcm1hdChkdXRf cG9ydCwgJzAnLA0KPiBzZWxmLmNvcmVfbGlzdFswXSkNCj4gKw0KPiArICAgIGRlZiBleGFtcGxl X2FwcF9jb25maWcoc2VsZik6DQo+ICsgICAgICAgIHNlbGYubWF4Zmxvd3MgPSAxMDI0DQo+ICsg ICAgICAgIHNlbGYuZmxvd3R0bCA9ICcxMHMnDQo+ICsgICAgICAgIHNlbGYuZXh0cmFfYXJncyA9 ICcnDQo+ICsNCj4gKyAgICBkZWYgcGFja2V0c19jb25maWcoc2VsZik6DQo+ICsgICAgICAgIHNl bGYucGNhcF9maWxlID0gJ2ZpbGUucGNhcCcNCj4gKyAgICAgICAgc2VsZi5udW1iZXJfb2ZfZnJh bWVzID0gMTAyNA0KPiArICAgICAgICBzZWxmLmZyYWdzX3Blcl9mcmFtZSA9IDQNCj4gKyAgICAg ICAgc2VsZi5zcmNfaXAgPSAnMi4xLjEuMCcNCj4gKyAgICAgICAgc2VsZi5kc3RfaXAgPSAnMS4x LjEuMTExJw0KPiArICAgICAgICBzZWxmLnBheWxvYWRfc2l6ZSA9IDE0MA0KPiArICAgICAgICBz ZWxmLmZyYWdtZW50X3NpemUgPSA0MA0KPiArICAgICAgICBzZWxmLm1hY19zcmMgPSAnREU6QUQ6 QkU6RUY6MDI6MDEnDQo+ICsgICAgICAgIHNlbGYubWFjX2RzdCA9ICdERTpBRDpCRTpFRjowMTow MicNCj4gKyAgICAgICAgc2VsZi50Y3Bfc3JjX3BvcnQgPSAxMjM0DQo+ICsgICAgICAgIHNlbGYu dGNwX2RzdF9wb3J0ID0gNDMyMQ0KPiArICAgICAgICBzZWxmLmlkZW50aWZpY2F0aW9uID0gMQ0K PiArDQo+ICsjDQo+ICsjDQo+ICsjIFRlc3QgY2xhc3MuDQo+ICsjDQo+ICsNCj4gKw0KPiArY2xh c3MgVGVzdElwUmVhc3NlbWJseShUZXN0Q2FzZSk6DQo+ICsNCj4gKyAgICAjDQo+ICsgICAgIw0K PiArICAgICMNCj4gKyAgICAjIFRlc3QgY2FzZXMuDQo+ICsgICAgIw0KPiArDQo+ICsgICAgZGVm IHNldF9tYXhfbnVtX29mX2ZyYWdtZW50cyhzZWxmLCBudW1fb2ZfZnJhZ21lbnRzPTQpOg0KPiAr ICAgICAgICAiIiINCj4gKyAgICAgICAgQ2hhbmdlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJh bWVzIGJ5IG1vZGlmeWluZyB0aGUgZXhhbXBsZSBhcHANCj4gY29kZS4NCj4gKyAgICAgICAgIiIi DQo+ICsNCj4gKyAgICAgICAgIyBzZWRfY29tbWFuZCA9IChyInNlZCAtaQ0KPiAncy9cKFxzKk1B WF9GUkFHX05VTVxzKj1cKVxzKltbOmRpZ2l0Ol1dKi9cMSAlZC8nICIgKw0KPiArICAgICAgICAj ICAgICAgICAgICAgICAgciJleGFtcGxlcy9pcF9yZWFzc2VtYmx5L2lwdjRfcnNtYmwuaCIpDQo+ ICsgICAgICAgICMgc2VsZi5kdXQuc2VuZF9leHBlY3QoInNlZCAtaQ0KPiAncy9DT05GSUdfUlRF X0xJQlJURV9JUF9GUkFHX01BWF9GUkFHPS4qJC9DT05GSUdfUlRFX0xJQlJURV9JUF9GUkFHX01B WF9GUg0KPiBBRz0lcy8nIC4vY29uZmlnL2NvbW1vbl9saW51eGFwcCIgJWludChudW1fb2ZfZnJh Z21lbnRzKSwgIiMgIikNCj4gKyAgICAgICAgIyBzZWxmLmR1dC5zZW5kX2V4cGVjdChzZWRfY29t bWFuZCAlIGludChudW1fb2ZfZnJhZ21lbnRzKSwgJyMnLA0KPiA2MCkNCj4gKw0KPiArICAgICAg ICBzZWxmLmR1dC5zZW5kX2V4cGVjdCgic2VkIC1pDQo+ICdzL0NPTkZJR19SVEVfTElCUlRFX0lQ X0ZSQUdfTUFYX0ZSQUc9LiokL0NPTkZJR19SVEVfTElCUlRFX0lQX0ZSQUdfTUFYX0ZSDQo+IEFH PSVzLycgLi9jb25maWcvY29tbW9uX2xpbnV4YXBwIiAlIGludChudW1fb2ZfZnJhZ21lbnRzKSwg IiMgIikNCj4gKyAgICAgICAgc2VsZi5kdXQuc2VuZF9leHBlY3QoImV4cG9ydCBSVEVfVEFSR0VU PSIgKyBzZWxmLnRhcmdldCwgIiMiKQ0KPiArICAgICAgICBzZWxmLmR1dC5zZW5kX2V4cGVjdCgi ZXhwb3J0IFJURV9TREs9YHB3ZGAiLCAiIyIpDQo+ICsgICAgICAgIHNlbGYuZHV0LnNlbmRfZXhw ZWN0KCJybSAtcmYgJXMiICUgc2VsZi50YXJnZXQsICIjICIsIDUpDQo+ICsgICAgICAgIHNlbGYu ZHV0LmJ1aWxkX2luc3RhbGxfZHBkayhzZWxmLnRhcmdldCkNCj4gKw0KPiArICAgIGRlZiBzZXRf dGVzdGVyX2lmYWNlX210dShzZWxmLCBpZmFjZSwgbXR1PTE1MDApOg0KPiArICAgICAgICAiIiIN Cj4gKyAgICAgICAgU2V0IHRoZSBpbnRlcmZhY2UgTVRVIHZhbHVlLg0KPiArICAgICAgICAiIiIN Cj4gKw0KPiArICAgICAgICBjb21tYW5kID0gJ2lwIGxpbmsgc2V0IG10dSB7bXR1fSBkZXYge2lm YWNlfScNCj4gKyAgICAgICAgc2VsZi50ZXN0ZXIuc2VuZF9leHBlY3QoY29tbWFuZC5mb3JtYXQo Kipsb2NhbHMoKSksICcjJykNCj4gKw0KPiArICAgIGRlZiBjb21waWxlX2V4YW1wbGVfYXBwKHNl bGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgQnVpbGRzIHRoZSBleGFtcGxlIGFwcCBh bmQgY2hlY2tzIGZvciBlcnJvcnMuDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIHNl bGYuZHV0LnNlbmRfZXhwZWN0KCdybSAtcmYgZXhhbXBsZXMvaXBfcmVhc3NlbWJseS9idWlsZCcs ICcjJykNCj4gKyAgICAgICAgb3V0ID0gc2VsZi5kdXQuYnVpbGRfZHBka19hcHBzKCdleGFtcGxl cy9pcF9yZWFzc2VtYmx5JykNCj4gKyMgICAgICAgIHNlbGYudmVyaWZ5KCdFcnJvcicgbm90IGlu IG91dCBhbmQgJ05vIHN1Y2ggZmlsZScgbm90IGluIG91dCwNCj4gKyMgICAgICAgICAgICAgICAg ICAgICdDb21waWxhdGlvbiBlcnJvcicpDQo+ICsNCj4gKyAgICBkZWYgZXhlY3V0ZV9leGFtcGxl X2FwcChzZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIEV4ZWN1dGUgdGhlIGV4YW1w bGUgYXBwIGFuZCBjaGVja3MgZm9yIGVycm9ycy4NCj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAg ICAgICAgY29tbWFuZCA9ICgnLi9leGFtcGxlcy9pcF9yZWFzc2VtYmx5L2J1aWxkL2lwX3JlYXNz ZW1ibHkgLWMNCj4ge2NvcmVfbWFza30gJyArDQo+ICsgICAgICAgICAgICAgICAgICAgJy1uIHtt ZW1vcnlfY2hhbm5lbHN9IC0tICAtcCB7ZHV0X3BvcnRfbWFza30gJyArDQo+ICsgICAgICAgICAg ICAgICAgICAgJy0tbWF4Zmxvd3M9e21heGZsb3dzfSAtLWZsb3d0dGw9e2Zsb3d0dGx9DQo+IHtl eHRyYV9hcmdzfScpDQo+ICsgICAgICAgIHNlbGYuZHV0LnNlbmRfZXhwZWN0KGNvbW1hbmQuZm9y bWF0KCoqc2VsZi50ZXN0X2NvbmZpZy5fX2RpY3RfXyksDQo+ICdJUF9SU01CTDogJykNCj4gKw0K PiArICAgIGRlZiB0Y3BfaXB2NF9mcmFnbWVudHMoc2VsZiwgc3JjX2lwLCBpZGVudGlmaWVyKToN Cj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFVzaW5nIHRoZSBTY2FweSBBUEkgZ2VuZXJhdGVz IGEgcGFja2V0IHdpdGggdGhlIGdpdmVuDQo+IGNvbmZpZ3VyYXRpb24NCj4gKyAgICAgICAgYW5k IHJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgZnJhZ21lbnRlZCBwYWNrZXRzLg0KPiArICAgICAg ICAiIiINCj4gKw0KPiArICAgICAgICBwYWNrZXQgPSBFdGhlcigpIC8gSVAoKSAvIFRDUCgpIC8g KCJYIiAqDQo+IHNlbGYudGVzdF9jb25maWcucGF5bG9hZF9zaXplKQ0KPiArICAgICAgICBwYWNr ZXRbRXRoZXJdLnNyYyA9IHNlbGYudGVzdF9jb25maWcubWFjX3NyYw0KPiArICAgICAgICBwYWNr ZXRbRXRoZXJdLmRzdCA9IHNlbGYudGVzdF9jb25maWcubWFjX2RzdA0KPiArICAgICAgICBwYWNr ZXRbSVBdLnNyYyA9IHNyY19pcA0KPiArICAgICAgICBwYWNrZXRbSVBdLmRzdCA9IHNlbGYudGVz dF9jb25maWcuZHN0X2lwDQo+ICsgICAgICAgIHBhY2tldFtJUF0uaWQgPSBpZGVudGlmaWVyDQo+ ICsgICAgICAgIHBhY2tldFtUQ1BdLnNwb3J0ID0gc2VsZi50ZXN0X2NvbmZpZy50Y3Bfc3JjX3Bv cnQNCj4gKyAgICAgICAgcGFja2V0W1RDUF0uZHBvcnQgPSBzZWxmLnRlc3RfY29uZmlnLnRjcF9k c3RfcG9ydA0KPiArICAgICAgICByZXR1cm4gZnJhZ21lbnQocGFja2V0LCBmcmFnc2l6ZT1zZWxm LnRlc3RfY29uZmlnLmZyYWdtZW50X3NpemUpDQo+ICsNCj4gKyAgICBkZWYgaW5jcmVtZW50X2lw X2FkZHJlc3Moc2VsZiwgYWRkciwgdmFsKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFJl dHVybnMgdGhlIG5leHQgdmFsaWQgSVAgYWRkcmVzcyBmcm9tIGEgZ2l2ZW4gb25lLCBsaWtlDQo+ ICsgICAgICAgIDEwLjEuMS4yNTQgLT4gMTAuMS4xLjI1NSAtPiAxMC4xLjIuMCAtPiAxMC4xLjIu MQ0KPiArICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICBpcDJpbnQgPSBsYW1iZGEgaXBzdHI6 IHN0cnVjdC51bnBhY2soJyFJJywNCj4gc29ja2V0LmluZXRfYXRvbihpcHN0cikpWzBdDQo+ICsg ICAgICAgIHggPSBpcDJpbnQoYWRkcikNCj4gKyAgICAgICAgaW50MmlwID0gbGFtYmRhIG46IHNv Y2tldC5pbmV0X250b2Eoc3RydWN0LnBhY2soJyFJJywgbikpDQo+ICsgICAgICAgIHJldHVybiBp bnQyaXAoeCArIDEpDQo+ICsNCj4gKyAgICBkZWYgY3JlYXRlX2ZyYWdtZW50cyhzZWxmKToNCj4g KyAgICAgICAgIiIiDQo+ICsgICAgICAgIFJldHVybnMgYSBsaXN0IG9mIGZyYWdtZW50ZWQgSVAg cGFja2V0cyBieSBjcmVhdGluZyBvbmUgcGFja2V0IGF0DQo+IHRoZQ0KPiArICAgICAgICB0aW1l LCBmcmFnbWVudGluZyBpdCBhbmQgYWRkaW5nIGl0IHRvIGEgbGlzdC4NCj4gKyAgICAgICAgSXQg dGFrZXMgdGhlIHBhY2tldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbiBjb25maWd1cmF0aW9u Lg0KPiArICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICBhbGxfZnJhZ21lbnRzID0gW10NCj4g KyAgICAgICAgc3JjX2lwID0gc2VsZi50ZXN0X2NvbmZpZy5zcmNfaXANCj4gKyAgICAgICAgZm9y IF8gaW4gcmFuZ2Uoc2VsZi50ZXN0X2NvbmZpZy5udW1iZXJfb2ZfZnJhbWVzKToNCj4gKyAgICAg ICAgICAgIHNyY19pcCA9IHNlbGYuaW5jcmVtZW50X2lwX2FkZHJlc3Moc3JjX2lwLCAxKQ0KPiAr ICAgICAgICAgICAgaWRlbnRpZmllciA9IHNlbGYudGVzdF9jb25maWcuaWRlbnRpZmljYXRpb24g JSAweDEwMDAwDQo+ICsgICAgICAgICAgICBmcmFnbWVudHMgPSBzZWxmLnRjcF9pcHY0X2ZyYWdt ZW50cyhzcmNfaXAsIGlkZW50aWZpZXIpDQo+ICsgICAgICAgICAgICBhbGxfZnJhZ21lbnRzLmV4 dGVuZChmcmFnbWVudHMpDQo+ICsgICAgICAgICAgICBzZWxmLnRlc3RfY29uZmlnLmlkZW50aWZp Y2F0aW9uICs9IDENCj4gKyAgICAgICAgcmV0dXJuIGFsbF9mcmFnbWVudHMNCj4gKw0KPiArICAg IGRlZiB3cml0ZV9zaHVmZmxlZF9wY2FwKHNlbGYsIGZyYWdtZW50cyk6DQo+ICsgICAgICAgICIi Ig0KPiArICAgICAgICBSZWNlaXZlcyBhIGxpc3Qgb2YgZnJhZ21lbnRlZCBwYWNrZXRzIGFuZCB3 cml0ZXMgdGhlbSBpbnRvIGEgUENBUA0KPiBmaWxlDQo+ICsgICAgICAgIHVzaW5nIHRoZSBTY2Fw eSBBUEkuDQo+ICsgICAgICAgIEJlZm9yZSBzYXZpbmcgdGhlIGZyYW1lcyB0byBhIGZpbGUgaXQg d2lsbCByZW9yZGVyIHRoZW0gbGlrZSB0aGlzOg0KPiArDQo+ICsgICAgICAgIHBrdDAtZnJhZzMg LT4gcGt0MS1mcmFnMyAtPiBwa3QyLWZyYWczIC0+IC4uLiAtPiBwa3ROLWZyYWczIC0+DQo+ICsg ICAgICAgIHBrdDAtZnJhZzIgLT4gcGt0MS1mcmFnMiAtPiBwa3QyLWZyYWcyIC0+IC4uLiAtPiBw a3ROLWZyYWcyIC0+DQo+ICsgICAgICAgIHBrdDAtZnJhZzEgLT4gcGt0MS1mcmFnMSAtPiBwa3Qy LWZyYWcxIC0+IC4uLiAtPiBwa3ROLWZyYWcxIC0+DQo+ICsgICAgICAgIHBrdDAtZnJhZzAgLT4g cGt0MS1mcmFnMCAtPiBwa3QyLWZyYWcwIC0+IC4uLiAtPiBwa3ROLWZyYWcwLg0KPiArICAgICAg ICAiIiINCj4gKw0KPiArICAgICAgICB3cml0ZXIgPSBQY2FwV3JpdGVyKHNlbGYudGVzdF9jb25m aWcucGNhcF9maWxlKQ0KPiArICAgICAgICByb3VuZHMgPSBzZWxmLnRlc3RfY29uZmlnLmZyYWdz X3Blcl9mcmFtZQ0KPiArICAgICAgICB3aGlsZSByb3VuZHMgPiAwOg0KPiArICAgICAgICAgICAg aW5kZXggPSByb3VuZHMgLSAxDQo+ICsgICAgICAgICAgICByb3VuZHMgLT0gMQ0KPiArICAgICAg ICAgICAgd2hpbGUgaW5kZXggPCBsZW4oZnJhZ21lbnRzKToNCj4gKyAgICAgICAgICAgICAgICB3 cml0ZXIud3JpdGUoZnJhZ21lbnRzW2luZGV4XSkNCj4gKyAgICAgICAgICAgICAgICBpbmRleCAr PSBzZWxmLnRlc3RfY29uZmlnLmZyYWdzX3Blcl9mcmFtZQ0KPiArICAgICAgICB3cml0ZXIuY2xv c2UoKQ0KPiArDQo+ICsgICAgZGVmIGNyZWF0ZV9wY2FwX2ZpbGUoc2VsZik6DQo+ICsgICAgICAg ICIiIg0KPiArICAgICAgICBHZW5lcmF0ZXMgYSB2YWxpZCBQQ0FQIGZpbGUgd2l0aCB0aGUgZ2l2 ZW4gY29uZmlndXJhdGlvbi4NCj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAgZnJhZ21l bnRzID0gc2VsZi5jcmVhdGVfZnJhZ21lbnRzKCkNCj4gKyAgICAgICAgc2VsZi53cml0ZV9zaHVm ZmxlZF9wY2FwKGZyYWdtZW50cykNCj4gKw0KPiArICAgIGRlZiBzY2FweV9zZW5kX3BhY2tldHMo c2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBDYWxsaW5nIHNjYXB5IGZyb20gdGhl IHRlc3RlciBib2FyZCBzZW5kcyB0aGUgZ2VuZXJhdGVkIFBDQVAgZmlsZQ0KPiB0bw0KPiArICAg ICAgICB0aGUgRFVUDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIHNlbGYudGVzdGVy LnNjYXB5X2FwcGVuZCgncGNhcCA9IHJkcGNhcCgiJXMiKScgJQ0KPiBzZWxmLnRlc3RfY29uZmln LnBjYXBfZmlsZSkNCj4gKyAgICAgICAgc2VsZi50ZXN0ZXIuc2NhcHlfYXBwZW5kKCdzZW5kcChw Y2FwLCBpZmFjZT0iJXMiKScgJQ0KPiBzZWxmLnRlc3RfY29uZmlnLnRlc3Rlcl9pZmFjZSkNCj4g KyAgICAgICAgc2VsZi50ZXN0ZXIuc2NhcHlfZXhlY3V0ZSgpDQo+ICsgICAgICAgIHRpbWUuc2xl ZXAoNSkNCj4gKw0KPiArICAgIGRlZiBzZW5kX3BhY2tldHMoc2VsZik6DQo+ICsgICAgICAgICIi Ig0KPiArICAgICAgICBHb2VzIHRyaG91Z2ggYWxsIHRoZSBzdGVwcyB0byBzZW5kIHBhY2tldHMg ZnJvbSB0aGUgdGVzdGVyIHRvIHRoZQ0KPiBzZWxmLmR1dC4NCj4gKyAgICAgICAgR2VuZXJhdGVz IHRoZSBQQ0FQIGZpbGUsIHBsYWNlIGl0IGludG8gdGhlIHRlc3RlciBib2FyZCwgY2FsbHMNCj4g c2NhcHkgYW5kDQo+ICsgICAgICAgIGZpbmFsbHkgcmVtb3ZlcyB0aGUgUENBUCBmaWxlLg0KPiAr ICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICBzZWxmLmNyZWF0ZV9wY2FwX2ZpbGUoKQ0KPiAr ICAgICAgICBzZWxmLnRlc3Rlci5zZXNzaW9uLmNvcHlfZmlsZV90byhzZWxmLnRlc3RfY29uZmln LnBjYXBfZmlsZSkNCj4gKyAgICAgICAgc2VsZi5zY2FweV9zZW5kX3BhY2tldHMoKQ0KPiArICAg ICAgICBvcy5yZW1vdmUoc2VsZi50ZXN0X2NvbmZpZy5wY2FwX2ZpbGUpDQo+ICsgICAgICAgIHRp bWUuc2xlZXAoNSkNCj4gKw0KPiArICAgIGRlZiB0Y3BkdW1wX3N0YXJ0X3NuaWZmaW5nKHNlbGYp Og0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgU3RhcnRzIHRjcGR1bXAgaW4gdGhlIGJhY2tn cm91bmQgdG8gc25pZmYgdGhlIHRlc3RlciBpbnRlcmZhY2UNCj4gd2hlcmUNCj4gKyAgICAgICAg dGhlIHBhY2tldHMgYXJlIHRyYW5zbWl0dGVkIHRvIGFuZCBmcm9tIHRoZSBzZWxmLmR1dC4NCj4g KyAgICAgICAgQWxsIHRoZSBjYXB0dXJlZCBwYWNrZXRzIGFyZSBnb2luZyB0byBiZSBzdG9yZWQg aW4gYSBmaWxlIGZvciBhDQo+ICsgICAgICAgIHBvc3QtYW5hbHlzaXMuDQo+ICsgICAgICAgICIi Ig0KPiArDQo+ICsgICAgICAgIGNvbW1hbmQgPSAoJ3RjcGR1bXAgLXcgdGNwZHVtcC5wY2FwIC1p ICVzIDI+dGNwZHVtcC5vdXQgJicgJQ0KPiArICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdF9j b25maWcudGVzdGVyX2lmYWNlKQ0KPiArICAgICAgICBzZWxmLnRlc3Rlci5zZW5kX2V4cGVjdCgn cm0gLWYgdGNwZHVtcC5wY2FwJywgJyMnKQ0KPiArICAgICAgICBzZWxmLnRlc3Rlci5zZW5kX2V4 cGVjdChjb21tYW5kLCAnIycpDQo+ICsNCj4gKyAgICBkZWYgdGNwZHVtcF9zdG9wX3NuaWZmKHNl bGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgU3RvcHMgdGhlIHRjcGR1bXAgcHJvY2Vz cyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kLg0KPiArICAgICAgICAiIiINCj4gKw0KPiArICAg ICAgICBzZWxmLnRlc3Rlci5zZW5kX2V4cGVjdCgna2lsbGFsbCB0Y3BkdW1wJywgJyMnKQ0KPiAr ICAgICAgICAjIEZvciB0aGUgW3BpZF0rIERvbmUgdGNwZHVtcC4uLiBtZXNzYWdlIGFmdGVyIGtp bGxpbmcgdGhlDQo+IHByb2Nlc3MNCj4gKyAgICAgICAgc2VsZi50ZXN0ZXIuc2VuZF9leHBlY3Qo J2NhdCB0Y3BkdW1wLm91dCcsICcjJykNCj4gKyAgICAgICAgdGltZS5zbGVlcCgzKQ0KPiArDQo+ ICsgICAgZGVmIHRjcGR1bXBfY29tbWFuZChzZWxmLCBjb21tYW5kKToNCj4gKyAgICAgICAgIiIi DQo+ICsgICAgICAgIFNlbmRzIGEgdGNwZHVtcCByZWxhdGVkIGNvbW1hbmQgYW5kIHJldHVybnMg YW4gaW50ZWdlciBmcm9tIHRoZQ0KPiBvdXRwdXQNCj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAg ICAgICAgcmVzdWx0ID0gc2VsZi50ZXN0ZXIuc2VuZF9leHBlY3QoY29tbWFuZCwgJyMnKQ0KPiAr ICAgICAgICByZXR1cm4gaW50KHJlc3VsdC5zdHJpcCgpKQ0KPiArDQo+ICsgICAgZGVmIG51bWJl cl9vZl9yZWNlaXZlZF9wYWNrZXRzKHNlbGYsIHRjcF9wb3J0KToNCj4gKyAgICAgICAgIiIiDQo+ ICsgICAgICAgIEJ5IHJlYWRpbmcgdGhlIGZpbGUgZ2VuZXJhdGVkIGJ5IHRjcGR1bXAgaXQgY291 bnRzIGhvdyBtYW55DQo+IHBhY2tldHMgd2VyZQ0KPiArICAgICAgICBmb3J3YXJkZWQgYnkgdGhl IHNhbXBsZSBhcHAgYW5kIHJlY2VpdmVkIGluIHRoZSBzZWxmLnRlc3Rlci4gVGhlDQo+IHNhbXBs ZSBhcHANCj4gKyAgICAgICAgd2lsbCBhZGQgYSBrbm93biBNQUMgYWRkcmVzcyBmb3IgdGhlIHRl c3QgdG8gbG9vayBmb3IuDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIGNvbW1hbmQg PSAoJ3RjcGR1bXAgLW5uIC1lIC12IC1yIHRjcGR1bXAucGNhcCB0Y3AgZHN0IHBvcnQNCj4ge3Rj cF9wb3J0fSAyPi9kZXYvbnVsbCB8ICcgKw0KPiArICAgICAgICAgICAgICAgICAgICdncmVwIC1j IDAyOjAwOjAwOjAwOjAwJykgICMgTUFDIGFkZHJlc3MgdXNlZCBieSB0aGUNCj4gZXhhbXBsZSBh cHANCj4gKyAgICAgICAgcmV0dXJuIHNlbGYudGNwZHVtcF9jb21tYW5kKGNvbW1hbmQuZm9ybWF0 KCoqbG9jYWxzKCkpKQ0KPiArDQo+ICsgICAgZGVmIG51bWJlcl9vZl9zZW50X3BhY2tldHMoc2Vs ZiwgbWFjX3NyYyk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBCeSByZWFkaW5nIHRoZSBm aWxlIGdlbmVyYXRlZCBieSB0Y3BkdW1wIGl0IGNvdW50cyBob3cgbWFueQ0KPiBwYWNrZXRzIHdl cmUNCj4gKyAgICAgICAgc2VudCB0byB0aGUgRFVUIHNlYXJjaGluZyBmb3IgYSBnaXZlbiBNQUMg YWRkcmVzcy4NCj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAgY29tbWFuZCA9ICgndGNw ZHVtcCAtbm4gLWUgLXYgLXIgdGNwZHVtcC5wY2FwIDI+L2Rldi9udWxsIHwgJyArDQo+ICsgICAg ICAgICAgICAgICAgICAgJ2dyZXAgLWMgLWkge21hY19zcmN9JykNCj4gKyAgICAgICAgcmV0dXJu IHNlbGYudGNwZHVtcF9jb21tYW5kKGNvbW1hbmQuZm9ybWF0KCoqbG9jYWxzKCkpKQ0KPiArDQo+ ICsgICAgZGVmIG51bWJlcl9vZl90Y3BfdmFsaWRfY2hlY2tzdW0oc2VsZiwgdGNwX3BvcnQpOg0K PiArICAgICAgICAiIiINCj4gKyAgICAgICAgQnkgcmVhZGluZyB0aGUgZmlsZSBnZW5lcmF0ZWQg YnkgdGNwZHVtcCBpdCBjb3VudHMgaG93IG1hbnkNCj4gcGFja2V0cyBoYXZlDQo+ICsgICAgICAg IGEgdmFsaWQgVENQIGNoZWNrc3VtIG9yIGhvdyBtYW55IHBhY2tldHMgd2VyZSBjb3JyZWN0bHkg YXNzZW1ibGVkLg0KPiArICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICBjb21tYW5kID0gKCd0 Y3BkdW1wIC1ubiAtZSAtdiAtciB0Y3BkdW1wLnBjYXAgdGNwIGRzdCBwb3J0DQo+IHt0Y3BfcG9y dH0gMj4vZGV2L251bGwgfCAnICsNCj4gKyAgICAgICAgICAgICAgICAgICAnZ3JlcCAtYyAtRSAi Y2tzdW0uKmNvcnJlY3QiJykNCj4gKyAgICAgICAgcmV0dXJuIHNlbGYudGNwZHVtcF9jb21tYW5k KGNvbW1hbmQuZm9ybWF0KCoqbG9jYWxzKCkpKQ0KPiArDQo+ICsgICAgZGVmIHNlbmRfbl9zaWZm X3BhY2tldHMoc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBTZW5kcyB0aGUgcGFj a2V0cyB3aGlsZSB0Y3BkdW1wIGlzIHNuaWZmaW5nIG9uIHRoZSBiYWNrZ3JvdW5kLg0KPiArICAg ICAgICAiIiINCj4gKw0KPiArICAgICAgICBzZWxmLnRjcGR1bXBfc3RhcnRfc25pZmZpbmcoKQ0K PiArICAgICAgICBzZWxmLnNlbmRfcGFja2V0cygpDQo+ICsgICAgICAgIHNlbGYudGNwZHVtcF9z dG9wX3NuaWZmKCkNCj4gKw0KPiArICAgIGRlZiB2ZXJpZnlfc2VudF9wYWNrZXRzKHNlbGYsIGV4 cGVjdGVkKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFZlcmlmaWVzIGlmIHRoZSBudW1i ZXIgb2Ygc2VudCBwYWNrZXRzIGlzIHRoZSBleHBlY3RlZC4NCj4gKyAgICAgICAgIiIiDQo+ICsN Cj4gKyAgICAgICAgc2VudF9wYWNrZXRzID0NCj4gc2VsZi5udW1iZXJfb2Zfc2VudF9wYWNrZXRz KHNlbGYudGVzdF9jb25maWcubWFjX3NyYykNCj4gKyAgICAgICAgcHJpbnQgJ3NlbnQgcGFja2V0 czogJWQgLSBleHBlY3RlZDogJWQnICUgKHNlbnRfcGFja2V0cywgZXhwZWN0ZWQpDQo+ICsgICAg ICAgIHNlbGYudmVyaWZ5KHNlbnRfcGFja2V0cyA9PSBleHBlY3RlZCwgJ05vdCBhbGwgZnJhZ21l bnRzIGhhdmUNCj4gYmVlbiBzZW50JykNCj4gKw0KPiArICAgIGRlZiB2ZXJpZnlfcmVjZWl2ZWRf cGFja2V0cyhzZWxmLCBleHBlY3RlZCk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBWZXJp ZmllcyBpZiB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgaXMgdGhlIGV4cGVjdGVkLg0K PiArICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICByZWNlaXZlZF9wYWNrZXRzID0NCj4gc2Vs Zi5udW1iZXJfb2ZfcmVjZWl2ZWRfcGFja2V0cyhzZWxmLnRlc3RfY29uZmlnLnRjcF9kc3RfcG9y dCkNCj4gKyAgICAgICAgcHJpbnQgJ3JlY2VpdmVkIHBhY2tldHM6ICVkIC0gZXhwZWN0ZWQ6ICVk JyAlIChyZWNlaXZlZF9wYWNrZXRzLA0KPiBleHBlY3RlZCkNCj4gKyAgICAgICAgc2VsZi52ZXJp ZnkocmVjZWl2ZWRfcGFja2V0cyA9PSBleHBlY3RlZCwNCj4gKyAgICAgICAgICAgICAgICAgICAg J05vdCBhbGwgZnJhbWVzIGhhdmUgYmVlbiBmb3J3YXJkZWQnKQ0KPiArDQo+ICsgICAgZGVmIHZl cmlmeV90Y3BfdmFsaWRfY2hlY2tzdW0oc2VsZiwgZXhwZWN0ZWQpOg0KPiArICAgICAgICAiIiIN Cj4gKyAgICAgICAgVmVyaWZpZXMgaWYgdGhlIG51bWJlciBvZiBwYWNrZXRzIHdpdGggYSB2YWxp ZCBUQ1AgY2hlY2tzdW0gaXMNCj4gdGhlIGV4cGVjdGVkLg0KPiArICAgICAgICAiIiINCj4gKw0K PiArICAgICAgICB0Y3BfdmFsaWRfY2hlY2tzdW0gPQ0KPiBzZWxmLm51bWJlcl9vZl90Y3BfdmFs aWRfY2hlY2tzdW0oc2VsZi50ZXN0X2NvbmZpZy50Y3BfZHN0X3BvcnQpDQo+ICsgICAgICAgIHBy aW50ICd0Y3AgdmFsaWQ6ICVkIC0gZXhwZWN0ZWQ6ICVkJyAlICh0Y3BfdmFsaWRfY2hlY2tzdW0s DQo+IGV4cGVjdGVkKQ0KPiArICAgICAgICBzZWxmLnZlcmlmeSh0Y3BfdmFsaWRfY2hlY2tzdW0g PT0gZXhwZWN0ZWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICdOb3QgYWxsIFRDUCBwYWNrZXRz IGhhdmUgdmFsaWQgY2hlY2tzdW0nKQ0KPiArDQo+ICsgICAgZGVmIHZlcmlmeV9hbGxfd2l0aF9t YXhmbG93cyhzZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFJ1bnMgYSBjb21tb24g dmVyaWZpY2F0aW9uIGFtb25nIGRpZmZlcmVudCB0ZXN0IGNhc2VzIHdlcmUgdGhlDQo+IG51bWJl cg0KPiArICAgICAgICBvZiBzZW50IHBhY2tldHMgaXMgYmlnZ2VyIHRoYW4gdGhlIG1heGZsb3dz IHZhbHVlIHdoaWNoIG1lYW5zDQo+IHRoYXQNCj4gKyAgICAgICAgb25seSBtYXhmbG93cyBwYWNr ZXRzIGFyZSBleHBlY3RlZCB0byBiZSByZWNlaXZlZCBhbmQgdmFsaWQuDQo+ICsgICAgICAgICIi Ig0KPiArDQo+ICsgICAgICAgIHNlbGYudmVyaWZ5X3NlbnRfcGFja2V0cyhzZWxmLnRlc3RfY29u ZmlnLm51bWJlcl9vZl9mcmFtZXMgKg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VsZi50ZXN0X2NvbmZpZy5mcmFnc19wZXJfZnJhbWUpDQo+ICsgICAgICAgIHNlbGYudmVy aWZ5X3JlY2VpdmVkX3BhY2tldHMoc2VsZi50ZXN0X2NvbmZpZy5tYXhmbG93cykNCj4gKyAgICAg ICAgc2VsZi52ZXJpZnlfdGNwX3ZhbGlkX2NoZWNrc3VtKHNlbGYudGVzdF9jb25maWcubWF4Zmxv d3MpDQo+ICsNCj4gKyAgICBkZWYgdmVyaWZ5X2FsbChzZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ ICsgICAgICAgIFJ1bnMgYSBjb21tb24gdmVyaWZpY2F0aW9uIGFtb25nIGRpZmZlcmVudCB0ZXN0 IGNhc2VzIHdlcmUgdGhlDQo+IG51bWJlcg0KPiArICAgICAgICBvZiBzZW50IHBhY2tldHMgaXMg ZXF1YWwgdG8gdGhlIG1heGZsb3dzIHZhbHVlLiBJdCBleHBlY3RzIHRvDQo+IHJlY2VpdmUNCj4g KyAgICAgICAgdGhlIHNhbWUgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IHdlcmUgc2VudC4NCj4gKyAg ICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAgc2VsZi52ZXJpZnlfc2VudF9wYWNrZXRzKHNlbGYu dGVzdF9jb25maWcubnVtYmVyX29mX2ZyYW1lcyAqDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLnRlc3RfY29uZmlnLmZyYWdzX3Blcl9mcmFtZSkNCj4gKyAgICAgICAg c2VsZi52ZXJpZnlfcmVjZWl2ZWRfcGFja2V0cyhzZWxmLnRlc3RfY29uZmlnLm51bWJlcl9vZl9m cmFtZXMpDQo+ICsgICAgICAgIHNlbGYudmVyaWZ5X3RjcF92YWxpZF9jaGVja3N1bShzZWxmLnRl c3RfY29uZmlnLm51bWJlcl9vZl9mcmFtZXMpDQo+ICsNCj4gKyAgICBkZWYgc2V0X3VwX2FsbChz ZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFJ1biBhdCB0aGUgc3RhcnQgb2YgZWFj aCB0ZXN0IHN1aXRlLg0KPiArDQo+ICsNCj4gKyAgICAgICAgQnVpbGRzIHRoZSBzYW1wbGUgYXBw IGFuZCBzZXQgdGhlIHNoZWxsIHByb21wdCB0byBhIGtub3duIGFuZA0KPiB2YWx1ZS4NCj4gKyAg ICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAgc2VsZi50ZXN0ZXIuc2VuZF9leHBlY3QoJ2V4cG9y dCBQUzE9IiMgIicsICcjJykNCj4gKyAgICAgICAgc2VsZi5jb21waWxlX2V4YW1wbGVfYXBwKCkN Cj4gKw0KPiArICAgIGRlZiB0ZXN0X3NlbmRfMUtfZnJhbWVzX3NwbGl0X2luXzRfYW5kXzFLX21h eGZsb3dzKHNlbGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgU2VuZHMgMUsgZnJhbWVz IHNwbGl0IGluIDQgZnJhZ21lbnRzIGVhY2ggdXNpbmcNCj4gKyAgICAgICAgMUsgbWF4Zmxvd3Mu DQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIHNlbGYudGVzdF9jb25maWcgPSBJcFJl YXNzZW1ibHlUZXN0Q29uZmlnKHNlbGYpDQo+ICsNCj4gKyAgICAgICAgc2VsZi5leGVjdXRlX2V4 YW1wbGVfYXBwKCkNCj4gKyAgICAgICAgc2VsZi5zZW5kX25fc2lmZl9wYWNrZXRzKCkNCj4gKw0K PiArICAgICAgICBzZWxmLnZlcmlmeV9hbGwoKQ0KPiArDQo+ICsgICAgZGVmIHRlc3Rfc2VuZF8y S19mcmFtZXNfc3BsaXRfaW5fNF9hbmRfMUtfbWF4Zmxvd3Moc2VsZik6DQo+ICsgICAgICAgICIi Ig0KPiArICAgICAgICBTZW5kcyAySyBmcmFtZXMgd2hpbGUgdGhlIG1heGZsb3cgdmFsdWUgaXMg b25seSAxSy4NCj4gKyAgICAgICAgT25seSAxSyBmcmFtZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGZv cndhcmRlZC4NCj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAgc2VsZi50ZXN0X2NvbmZp ZyA9IElwUmVhc3NlbWJseVRlc3RDb25maWcoc2VsZiwNCj4gbnVtYmVyX29mX2ZyYW1lcz0yMDQ4 KQ0KPiArDQo+ICsgICAgICAgIHNlbGYuZXhlY3V0ZV9leGFtcGxlX2FwcCgpDQo+ICsgICAgICAg IHNlbGYuc2VuZF9uX3NpZmZfcGFja2V0cygpDQo+ICsNCj4gKyAgICAgICAgc2VsZi52ZXJpZnlf YWxsX3dpdGhfbWF4Zmxvd3MoKQ0KPiArDQo+ICsgICAgZGVmIHRlc3Rfc2VuZF80S19mcmFtZXNf c3BsaXRfaW5fN19hbmRfNEtfbWF4Zmxvd3Moc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAg ICAgICBTZW5kcyA0SyBmcmFtZXMgc3BsaXQgaW50byA3IGZyYWdtZW50cyBlYWNoLg0KPiArICAg ICAgICAiIiINCj4gKw0KPiArICAgICAgICBzZWxmLnRlc3RfY29uZmlnID0gSXBSZWFzc2VtYmx5 VGVzdENvbmZpZyhzZWxmLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBudW1iZXJfb2ZfZnJhbWVzPTQwOTYsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdzX3Blcl9mcmFtZT03LA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2Fk X3NpemU9MjMwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtYXhmbG93cz00MDk2LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmbG93dHRsPSc0MHMnKQ0KPiArDQo+ICsgICAgICAgIHRyeToN Cj4gKyAgICAgICAgICAgIHNlbGYuc2V0X21heF9udW1fb2ZfZnJhZ21lbnRzKDcpDQo+ICsgICAg ICAgICAgICBzZWxmLmNvbXBpbGVfZXhhbXBsZV9hcHAoKQ0KPiArICAgICAgICAgICAgc2VsZi5l eGVjdXRlX2V4YW1wbGVfYXBwKCkNCj4gKyAgICAgICAgICAgIHNlbGYuc2VuZF9uX3NpZmZfcGFj a2V0cygpDQo+ICsgICAgICAgICAgICBzZWxmLnZlcmlmeV9hbGwoKQ0KPiArICAgICAgICAgICAg c2VsZi5kdXQuc2VuZF9leHBlY3QoJ15DJywgJyMgJykNCj4gKyAgICAgICAgICAgIHRpbWUuc2xl ZXAoNSkNCj4gKyAgICAgICAgICAgIHNlbGYuc2V0X21heF9udW1fb2ZfZnJhZ21lbnRzKDQpDQo+ ICsgICAgICAgICAgICB0aW1lLnNsZWVwKDUpDQo+ICsNCj4gKyAgICAgICAgZXhjZXB0IEV4Y2Vw dGlvbiBhcyBlOg0KPiArICAgICAgICAgICAgc2VsZi5kdXQuc2VuZF9leHBlY3QoJ15DJywgJyMg JykNCj4gKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMikNCj4gKyAgICAgICAgICAgIHNlbGYuc2V0 X21heF9udW1fb2ZfZnJhZ21lbnRzKCkNCj4gKyAgICAgICAgICAgIHNlbGYuY29tcGlsZV9leGFt cGxlX2FwcCgpDQo+ICsgICAgICAgICAgICByYWlzZSBlDQo+ICsNCj4gKyAgICBkZWYgdGVzdF9w YWNrZXRzX2FyZV9mb3J3YXJkZWRfYWZ0ZXJfdHRsX3RpbWVvdXQoc2VsZik6DQo+ICsgICAgICAg ICIiIg0KPiArICAgICAgICBTZW5kcyArMUsgZnJhbWVzIHdpdGggMUsgbWF4Zmx3b3MgLSBleHBl Y3RzIG9ubHkNCj4gKyAgICAgICAgMUsgZnJhbWVzIHRvIGJlIGZvcndhcmRlZC4gVGhlbiBpdCB3 YWl0cyB1bnRpbCBmbG93dHRsIHRpbWVvdXQNCj4gYW5kDQo+ICsgICAgICAgIHNlbmRzIDFLIGZy YW1lcy4gMUsgZnJhbWVzIG11c3QgYmUgZm9yd2FyZGVkIGJhY2suDQo+ICsgICAgICAgICIiIg0K PiArDQo+ICsgICAgICAgIHNlbGYudGVzdF9jb25maWcgPSBJcFJlYXNzZW1ibHlUZXN0Q29uZmln KHNlbGYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG51bWJlcl9vZl9mcmFtZXM9MTEwMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZmxvd3R0bD0nM3MnKQ0KPiArDQo+ICsgICAgICAgIHNl bGYuZXhlY3V0ZV9leGFtcGxlX2FwcCgpDQo+ICsNCj4gKyAgICAgICAgc2VsZi5zZW5kX25fc2lm Zl9wYWNrZXRzKCkNCj4gKyAgICAgICAgc2VsZi52ZXJpZnlfYWxsX3dpdGhfbWF4Zmxvd3MoKQ0K PiArDQo+ICsgICAgICAgIHRpbWUuc2xlZXAoNSkNCj4gKw0KPiArICAgICAgICBzZWxmLnRlc3Rf Y29uZmlnLm51bWJlcl9vZl9mcmFtZXMgPSAxMDI0DQo+ICsgICAgICAgIHNlbGYuc2VuZF9uX3Np ZmZfcGFja2V0cygpDQo+ICsgICAgICAgIHNlbGYudmVyaWZ5X2FsbCgpDQo+ICsNCj4gKyAgICBk ZWYgdGVzdF9vbmx5X21heGZsb3dzX3BhY2tldHNfYXJlX2ZvcndhcmRlZChzZWxmKToNCj4gKyAg ICAgICAgIiIiDQo+ICsgICAgICAgIFVzaW5nIGEgbWF4ZmxvdyBvZiAxMDIzIHNlbmRzIDFLIGZy YW1lcyBleHBlY3RpbmcgMTAyMyBiYWNrLg0KPiArICAgICAgICBUaGVuIHNlbmRzIDEwMjMgZnJh bWVzLCBleHBlY3RpbmcgMTAyMyBiYWNrIGFnYWluLiBBbmQgYWZ0ZXIgdGhlDQo+IGZsb3d0dGwN Cj4gKyAgICAgICAgdGltZW91dCBzZW5kcyAxSyBmcmFtZXMgZXhwZWN0aW5nIGFsbCBvZiB0aGVt IHRvIGJlIGZvcndhcmRlZA0KPiBiYWNrLg0KPiArICAgICAgICAiIiINCj4gKw0KPiArICAgICAg ICBzZWxmLnRlc3RfY29uZmlnID0gSXBSZWFzc2VtYmx5VGVzdENvbmZpZyhzZWxmLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhmbG93cz0x MDIzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmbG93dHRsPSc1cycpDQo+ICsNCj4gKyAgICAgICAgc2VsZi5leGVjdXRlX2V4YW1wbGVfYXBw KCkNCj4gKw0KPiArICAgICAgICBzZWxmLnNlbmRfbl9zaWZmX3BhY2tldHMoKQ0KPiArICAgICAg ICBzZWxmLnZlcmlmeV9hbGxfd2l0aF9tYXhmbG93cygpDQo+ICsNCj4gKyAgICAgICAgc2VsZi50 ZXN0X2NvbmZpZy5udW1iZXJfb2ZfZnJhbWVzID0gMTAyMw0KPiArICAgICAgICBzZWxmLnNlbmRf bl9zaWZmX3BhY2tldHMoKQ0KPiArICAgICAgICBzZWxmLnZlcmlmeV9hbGwoKQ0KPiArDQo+ICsg ICAgICAgIHRpbWUuc2xlZXAoNSkNCj4gKw0KPiArICAgICAgICBzZWxmLnRlc3RfY29uZmlnLm51 bWJlcl9vZl9mcmFtZXMgPSAxMDI0DQo+ICsgICAgICAgIHNlbGYuc2VuZF9uX3NpZmZfcGFja2V0 cygpDQo+ICsgICAgICAgIHNlbGYudmVyaWZ5X2FsbF93aXRoX21heGZsb3dzKCkNCj4gKw0KPiAr ICAgIGRlZiB0ZXN0X3NlbmRfbW9yZV9mcmFnbWVudHNfdGhhbl9zdXBwb3J0ZWQoc2VsZik6DQo+ ICsgICAgICAgICIiIg0KPiArICAgICAgICBTZW5kcyAxIGZyYW1lIHNwbGl0IGluIDUgZnJhZ21l bnRzLiBTaW5jZSB0aGUgbWF4IG51bWJlciBvZg0KPiArICAgICAgICBmcmFnbWVudHMgaXMgc2V0 IHRvIDQgYnkgZGVmYXVsdCwgdGhlIHBhY2tldCBjYW4ndCBiZSBmb3J3YXJkZWQNCj4gYmFjay4N Cj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAgc2VsZi50ZXN0X2NvbmZpZyA9IElwUmVh c3NlbWJseVRlc3RDb25maWcoc2VsZiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX2ZyYW1lcz0xLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnc19wZXJfZnJhbWU9NSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5 bG9hZF9zaXplPTE4MCkNCj4gKyAgICAgICAgc2VsZi5leGVjdXRlX2V4YW1wbGVfYXBwKCkNCj4g Kw0KPiArICAgICAgICBzZWxmLnNlbmRfbl9zaWZmX3BhY2tldHMoKQ0KPiArDQo+ICsgICAgICAg IHNlbGYudmVyaWZ5X3NlbnRfcGFja2V0cyhzZWxmLnRlc3RfY29uZmlnLm51bWJlcl9vZl9mcmFt ZXMgKg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X2NvbmZp Zy5mcmFnc19wZXJfZnJhbWUpDQo+ICsgICAgICAgIHNlbGYudmVyaWZ5X3JlY2VpdmVkX3BhY2tl dHMoMCkNCj4gKyAgICAgICAgc2VsZi52ZXJpZnlfdGNwX3ZhbGlkX2NoZWNrc3VtKDApDQo+ICsN Cj4gKyAgICBkZWYgdGVzdF9zZW5kX2RlbGF5ZWRfZnJhZ21lbnRfcGFja2V0X2lzX2ZvcndhcmRl ZChzZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIENyZWF0ZXMgMSBmcmFtZSBzcGxp dCBpbiA0LiBTZW5kcyAzIGZyYWdtZW50cyBmaXJzdCwgd2FpdHMNCj4gKyAgICAgICAgZm9yIHRo ZSBmbG93dHRsIHRvIHRpbWVvdXQgYW5kIHRoZW4gc2VuZHMgdGhlIDR0aC4gVGhlIHBhY2tldA0K PiBjYW4ndA0KPiArICAgICAgICBiZSBmb3J3YXJkZWQgYmFjay4NCj4gKyAgICAgICAgIiIiDQo+ ICsNCj4gKyAgICAgICAgc2VsZi50ZXN0X2NvbmZpZyA9IElwUmVhc3NlbWJseVRlc3RDb25maWco c2VsZiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnVtYmVyX29mX2ZyYW1lcz0xLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmbG93dHRsPSczcycpDQo+ICsNCj4gKyAgICAgICAgc2VsZi5l eGVjdXRlX2V4YW1wbGVfYXBwKCkNCj4gKyAgICAgICAgc2VsZi50Y3BkdW1wX3N0YXJ0X3NuaWZm aW5nKCkNCj4gKw0KPiArICAgICAgICBmcmFnbWVudHMgPSBzZWxmLmNyZWF0ZV9mcmFnbWVudHMo KQ0KPiArICAgICAgICBzZWxmLndyaXRlX3NodWZmbGVkX3BjYXAoZnJhZ21lbnRzWzozXSkNCj4g KyAgICAgICAgc2VsZi50ZXN0ZXIuc2Vzc2lvbi5jb3B5X2ZpbGVfdG8oc2VsZi50ZXN0X2NvbmZp Zy5wY2FwX2ZpbGUpDQo+ICsgICAgICAgIHNlbGYuc2NhcHlfc2VuZF9wYWNrZXRzKCkNCj4gKyAg ICAgICAgb3MucmVtb3ZlKHNlbGYudGVzdF9jb25maWcucGNhcF9maWxlKQ0KPiArDQo+ICsgICAg ICAgIHRpbWUuc2xlZXAoMykNCj4gKw0KPiArICAgICAgICBzZWxmLndyaXRlX3NodWZmbGVkX3Bj YXAoZnJhZ21lbnRzWzM6XSkNCj4gKyAgICAgICAgc2VsZi50ZXN0ZXIuc2Vzc2lvbi5jb3B5X2Zp bGVfdG8oc2VsZi50ZXN0X2NvbmZpZy5wY2FwX2ZpbGUpDQo+ICsgICAgICAgIHNlbGYuc2NhcHlf c2VuZF9wYWNrZXRzKCkNCj4gKyAgICAgICAgb3MucmVtb3ZlKHNlbGYudGVzdF9jb25maWcucGNh cF9maWxlKQ0KPiArDQo+ICsgICAgICAgIHNlbGYudGNwZHVtcF9zdG9wX3NuaWZmKCkNCj4gKw0K PiArICAgICAgICBzZWxmLnZlcmlmeV9zZW50X3BhY2tldHMoc2VsZi50ZXN0X2NvbmZpZy5udW1i ZXJfb2ZfZnJhbWVzICoNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu dGVzdF9jb25maWcuZnJhZ3NfcGVyX2ZyYW1lKQ0KPiArICAgICAgICBzZWxmLnZlcmlmeV9yZWNl aXZlZF9wYWNrZXRzKDApDQo+ICsgICAgICAgIHNlbGYudmVyaWZ5X3RjcF92YWxpZF9jaGVja3N1 bSgwKQ0KPiArDQo+ICsgICAgZGVmIHRlc3Rfc2VuZF9qdW1ib19mcmFtZXMoc2VsZik6DQo+ICsg ICAgICAgICIiIg0KPiArICAgICAgICBTZW5kcyAxSyBqdW1ibyBmcmFtZXMgdXNpbmcgdGhlIHJp Z2h0IGNvbmZpZ3VyYXRpb24uDQo+ICsgICAgICAgIEV4cGVjdHMgYWxsIHRoZSBmcmFtZXMgdG8g YmUgZm9yd2FyZGVkIGJhY2suDQo+ICsgICAgICAgICIiIg0KPiArDQo+ICsgICAgICAgIG10dSA9 IDkwMDANCj4gKyAgICAgICAgc2VsZi50ZXN0X2NvbmZpZyA9IElwUmVhc3NlbWJseVRlc3RDb25m aWcoc2VsZiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGF5bG9hZF9zaXplPW10dSAtIDEwMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRfc2l6ZT0yNTAwKQ0KPiArICAgICAg ICB0cnk6DQo+ICsgICAgICAgICAgICBzZWxmLnNldF90ZXN0ZXJfaWZhY2VfbXR1KHNlbGYudGVz dF9jb25maWcudGVzdGVyX2lmYWNlLCBtdHUpDQo+ICsgICAgICAgICAgICBzZWxmLmV4ZWN1dGVf ZXhhbXBsZV9hcHAoKQ0KPiArICAgICAgICAgICAgc2VsZi5zZW5kX25fc2lmZl9wYWNrZXRzKCkN Cj4gKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2FsbCgpDQo+ICsgICAgICAgIGV4Y2VwdCBFeGNl cHRpb24gYXMgZToNCj4gKyAgICAgICAgICAgIHNlbGYuc2V0X3Rlc3Rlcl9pZmFjZV9tdHUoc2Vs Zi50ZXN0X2NvbmZpZy50ZXN0ZXJfaWZhY2UpDQo+ICsgICAgICAgICAgICByYWlzZSBlDQo+ICsN Cj4gKyAgICBkZWYgdGVzdF9zZW5kX2p1bWJvX2ZyYW1lc193aXRoX3dyb25nX2FyZ3VtZW50cyhz ZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFNlbmRzIDFLIGp1bWJvIGZyYW1lcyB3 aXRob3V0IGVuYWJsaW5nIHRoZSBqdW1ibyBmcmFtZXMNCj4gKyAgICAgICAgd2l0aGluIHRoZSBz YW1wbGUgYXBwLiBFeHBlY3RzIHplcm8gZnJhbWVzIHRvIGJlIGZvcndhcmRlZCBiYWNrLg0KPiAr ICAgICAgICAiIiINCj4gKw0KPiArICAgICAgICBtdHUgPSA5MDAwDQo+ICsgICAgICAgIHNlbGYu dGVzdF9jb25maWcgPSBJcFJlYXNzZW1ibHlUZXN0Q29uZmlnKHNlbGYsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRfc2l6ZT1tdHUg LSAxMDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZyYWdtZW50X3NpemU9MjUwMCkNCj4gKyAgICAgICAgdHJ5Og0KPiArICAgICAgICAgICAg c2VsZi5zZXRfdGVzdGVyX2lmYWNlX210dShzZWxmLnRlc3RfY29uZmlnLnRlc3Rlcl9pZmFjZSwg bXR1KQ0KPiArICAgICAgICAgICAgc2VsZi5zZXRfbWF4X251bV9vZl9mcmFnbWVudHMoNCkNCj4g KyAgICAgICAgICAgIHNlbGYuY29tcGlsZV9leGFtcGxlX2FwcCgpDQo+ICsgICAgICAgICAgICBz ZWxmLmV4ZWN1dGVfZXhhbXBsZV9hcHAoKQ0KPiArICAgICAgICAgICAgc2VsZi5zZW5kX25fc2lm Zl9wYWNrZXRzKCkNCj4gKw0KPiArICAgICAgICAgICAgc2VsZi52ZXJpZnlfc2VudF9wYWNrZXRz KHNlbGYudGVzdF9jb25maWcubnVtYmVyX29mX2ZyYW1lcyAqDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X2NvbmZpZy5mcmFnc19wZXJfZnJhbWUpDQo+ ICsgICAgICAgICAgICBzZWxmLnZlcmlmeV9hbGwoKQ0KPiArICAgICAgICBleGNlcHQgRXhjZXB0 aW9uIGFzIGU6DQo+ICsgICAgICAgICAgICBzZWxmLnNldF90ZXN0ZXJfaWZhY2VfbXR1KHNlbGYu dGVzdF9jb25maWcudGVzdGVyX2lmYWNlKQ0KPiArICAgICAgICAgICAgcmFpc2UgZQ0KPiArDQo+ ICsgICAgZGVmIHRlYXJfZG93bihzZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFJ1 biBhZnRlciBlYWNoIHRlc3QgY2FzZS4NCj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAg c2VsZi5kdXQuc2VuZF9leHBlY3QoJ15DJywgJyMgJykNCj4gKw0KPiArICAgIGRlZiB0ZWFyX2Rv d25fYWxsKHNlbGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgUnVuIGFmdGVyIGVhY2gg dGVzdCBzdWl0ZS4NCj4gKyAgICAgICAgIiIiDQo+ICsNCj4gKyAgICAgICAgc2VsZi5kdXQua2ls bF9hbGwoKQ0KPiAtLQ0KPiAxLjcuNw0KDQo=