From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7EC2CA04B5; Fri, 30 Oct 2020 11:45:17 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5B04DC804; Fri, 30 Oct 2020 11:45:16 +0100 (CET) Received: from mailgw01.pantheon.sk (mailgw01.pantheon.sk [46.229.239.26]) by dpdk.org (Postfix) with ESMTP id 8529BC7FC for ; Fri, 30 Oct 2020 11:45:14 +0100 (CET) Received: from mailgw01.pantheon.sk (localhost.localdomain [127.0.0.1]) by mailgw01.pantheon.sk (Proxmox) with ESMTP id 3DE17202746; Fri, 30 Oct 2020 11:45:13 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pantheon.tech; h=cc:cc:content-transfer-encoding:content-type:content-type :date:from:from:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=dkim; bh=LCUbWxc+i0rX7sSSp/eo udg0HKIMcIJCg1qtSQZVo08=; b=sIM8bRvbN/7aVcfA88hZ6SyTLuSxcVXReutt 08uaPwtrty2+AK3kTM5M4W+7t90ELHvYhTzFXSQ5AlPaiZLXRIRupoIAi7AR+n1e S1Ay6oNvH0Hp6Xo2EZNLmpkNs6CBc6IQDa1IgndWo2wt9jW2Or3TxiRndCB6Ec8J EcodpvhZAvTQk6wtvugFEWF5ISMd8M8TOeCiMFrMxx8hONF5iZF0KcijT6PWLZvn rsYIXd2xovuIAIKkNAJ6nVV+SqpMatfgaoDGWsCsv8DZZlTfYtwqmdzl2H6i6VqA 2gSgUS2A1rptXrJRxcpGYrxog/wJikxax91zLQezVleEfNybMA== From: =?utf-8?B?SnVyYWogTGlua2XFoQ==?= To: Honnappa Nagarahalli , "bruce.richardson@intel.com" , Ruifeng Wang , Phil Yang , "vcchunga@amazon.com" , Dharmik Thakkar , "jerinjacobk@gmail.com" , "hemant.agrawal@nxp.com" CC: "dev@dpdk.org" , nd , nd Thread-Topic: [PATCH v4 2/6] build: refactor Arm build Thread-Index: AQHWqUuKFo5iH2etR0SB+T0fGtDV/qmtM/GAgAEGs2CAAM1KgIAA66ZQ Date: Fri, 30 Oct 2020 10:45:12 +0000 Message-ID: <57446a00a9a948c1836b2732eb921945@pantheon.tech> References: <1603280261-20206-1-git-send-email-juraj.linkes@pantheon.tech> <1603464488-25493-1-git-send-email-juraj.linkes@pantheon.tech> <1603464488-25493-3-git-send-email-juraj.linkes@pantheon.tech> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.101.4.10] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v4 2/6] build: refactor Arm build X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSG9ubmFwcGEgTmFnYXJh aGFsbGkgPEhvbm5hcHBhLk5hZ2FyYWhhbGxpQGFybS5jb20+DQo+IFNlbnQ6IFRodXJzZGF5LCBP Y3RvYmVyIDI5LCAyMDIwIDk6NTQgUE0NCj4gVG86IEp1cmFqIExpbmtlxaEgPGp1cmFqLmxpbmtl c0BwYW50aGVvbi50ZWNoPjsgYnJ1Y2UucmljaGFyZHNvbkBpbnRlbC5jb207DQo+IFJ1aWZlbmcg V2FuZyA8UnVpZmVuZy5XYW5nQGFybS5jb20+OyBQaGlsIFlhbmcgPFBoaWwuWWFuZ0Bhcm0uY29t PjsNCj4gdmNjaHVuZ2FAYW1hem9uLmNvbTsgRGhhcm1payBUaGFra2FyIDxEaGFybWlrLlRoYWtr YXJAYXJtLmNvbT47DQo+IGplcmluamFjb2JrQGdtYWlsLmNvbTsgaGVtYW50LmFncmF3YWxAbnhw LmNvbQ0KPiBDYzogZGV2QGRwZGsub3JnOyBuZCA8bmRAYXJtLmNvbT47IEhvbm5hcHBhIE5hZ2Fy YWhhbGxpDQo+IDxIb25uYXBwYS5OYWdhcmFoYWxsaUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+ DQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjQgMi82XSBidWlsZDogcmVmYWN0b3IgQXJtIGJ1aWxk DQo+IA0KPiA+ID4gPHNuaXA+DQo+ID4gPg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvY29uZmlnL2Fy bS9tZXNvbi5idWlsZCBiL2NvbmZpZy9hcm0vbWVzb24uYnVpbGQgaW5kZXgNCj4gPiA+ID4gNDkx ODQyY2FkLi42YzMxYWIxNjcgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2NvbmZpZy9hcm0vbWVzb24u YnVpbGQNCj4gPiA+ID4gKysrIGIvY29uZmlnL2FybS9tZXNvbi5idWlsZA0KPiA+ID4gPiBAQCAt MywxMiArMywxMiBAQA0KPiA+ID4gPiAgIyBDb3B5cmlnaHQoYykgMjAxNyBDYXZpdW0sIEluYw0K PiA+ID4gPiAgIyBDb3B5cmlnaHQoYykgMjAyMCBQQU5USEVPTi50ZWNoIHMuci5vLg0KPiA+ID4g Pg0KPiA+ID4gPiAtIyBmb3IgY2hlY2tpbmcgZGVmaW5lcyB3ZSBuZWVkIHRvIHVzZSB0aGUgY29y cmVjdCBjb21waWxlciBmbGFncw0KPiA+ID4gPiAtbWFyY2hfb3B0ID0gJy1tYXJjaD1AMEAnLmZv cm1hdChtYWNoaW5lKQ0KPiA+ID4gPiAtDQo+ID4gPiA+ICsjIHNldCBhcm1fZm9yY2VfbmF0aXZl X21hcmNoIGlmIHlvdSB3YW50IHRvIHVzZSBtYWNoaW5lIGFyZ3MNCj4gPiA+ID4gK2JlbG93ICMg aW5zdGVhZCBvZiBkaXNjb3ZlcmVkIHZhbHVlczsgb25seSB3b3JrcyB3aGVuIGRvaW5nIGFuDQo+ ID4gPiA+ICthY3R1YWwgbmF0aXZlIGJ1aWxkDQo+ID4gPiA+ICBhcm1fZm9yY2VfbmF0aXZlX21h cmNoID0gZmFsc2UNCj4gPiA+ID4gLWFybV9mb3JjZV9nZW5lcmljX21hcmNoID0gKG1hY2hpbmUg PT0gJ2dlbmVyaWMnKQ0KPiA+ID4gPiArbmF0aXZlX21hY2hpbmVfYXJncyA9IFsnLW1hcmNoPW5h dGl2ZScsICctbXR1bmU9bmF0aXZlJ10NCj4gPiA+ID4NCj4gPiA+DQo+ID4gPiBbLi4uXQ0KPiA+ ID4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtbWFjaGluZV9hcmdzX2RlZmF1bHQgPSBbDQo+ID4gPiA+ IC0JWydkZWZhdWx0JywgWyctbWFyY2g9YXJtdjgtYStjcmMnLCAnLW1vdXRsaW5lLWF0b21pY3Mn XV0sDQo+ID4gPiA+IC0JWyduYXRpdmUnLCBbJy1tYXJjaD1uYXRpdmUnXV0sDQo+ID4gPiA+IC0J WycweGQwMycsIFsnLW1jcHU9Y29ydGV4LWE1MyddXSwNCj4gPiA+ID4gLQlbJzB4ZDA0JywgWyct bWNwdT1jb3J0ZXgtYTM1J11dLA0KPiA+ID4gPiAtCVsnMHhkMDcnLCBbJy1tY3B1PWNvcnRleC1h NTcnXV0sDQo+ID4gPiA+IC0JWycweGQwOCcsIFsnLW1jcHU9Y29ydGV4LWE3MiddXSwNCj4gPiA+ ID4gLQlbJzB4ZDA5JywgWyctbWNwdT1jb3J0ZXgtYTczJ11dLA0KPiA+ID4gPiAtCVsnMHhkMGEn LCBbJy1tY3B1PWNvcnRleC1hNzUnXV0sDQo+ID4gPiA+IC0JWycweGQwYicsIFsnLW1jcHU9Y29y dGV4LWE3NiddXSwNCj4gPiA+ID4gLQlbJzB4ZDBjJywgWyctbWFyY2g9YXJtdjguMi1hK2NyYytj cnlwdG8nLCAnLW1jcHU9bmVvdmVyc2UtbjEnXSwNCj4gPiA+ID4gZmxhZ3NfbjFzZHBfZXh0cmFd XQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC1tYWNoaW5lX2FyZ3NfY2F2aXVtID0gWw0KPiA+ID4gPiAt CVsnZGVmYXVsdCcsIFsnLW1hcmNoPWFybXY4LWErY3JjK2NyeXB0bycsJy1tY3B1PXRodW5kZXJ4 J11dLA0KPiA+ID4gPiAtCVsnbmF0aXZlJywgWyctbWFyY2g9bmF0aXZlJ11dLA0KPiA+ID4gPiAt CVsnMHhhMScsIFsnLW1jcHU9dGh1bmRlcnh0ODgnXSwgZmxhZ3NfdGh1bmRlcnhfZXh0cmFdLA0K PiA+ID4gPiAtCVsnMHhhMicsIFsnLW1jcHU9dGh1bmRlcnh0ODEnXSwgZmxhZ3NfdGh1bmRlcnhf ZXh0cmFdLA0KPiA+ID4gPiAtCVsnMHhhMycsIFsnLW1jcHU9dGh1bmRlcnh0ODMnXSwgZmxhZ3Nf dGh1bmRlcnhfZXh0cmFdLA0KPiA+ID4gPiAtCVsnMHhhZicsIFsnLW1hcmNoPWFybXY4LjEtYStj cmMrY3J5cHRvJywnLW1jcHU9dGh1bmRlcngydDk5J10sDQo+ID4gPiA+IGZsYWdzX3RodW5kZXJ4 Ml9leHRyYV0sDQo+ID4gPiA+IC0JWycweGIyJywgWyctbWFyY2g9YXJtdjguMi1hK2NyYytjcnlw dG8rbHNlJywnLW1jcHU9b2N0ZW9udHgyJ10sDQo+ID4gPiA+IGZsYWdzX29jdGVvbnR4Ml9leHRy YV1dDQo+ID4gPiA+IC0NCj4gPiA+ID4gLW1hY2hpbmVfYXJnc19lbWFnID0gWw0KPiA+ID4gPiAt CVsnZGVmYXVsdCcsIFsnLW1hcmNoPWFybXY4LWErY3JjK2NyeXB0bycsICctbXR1bmU9ZW1hZydd XSwNCj4gPiA+ID4gLQlbJ25hdGl2ZScsIFsnLW1hcmNoPW5hdGl2ZSddXV0NCj4gPiA+ID4gKwlb J1JURV9VU0VfQzExX01FTV9NT0RFTCcsIHRydWVdDQo+ID4gPiA+ICtdDQo+ID4gPiA+ICsjIGFy bSBjb25maWcgKGltcGxlbWVudGVyIDB4NDEpIGlzIHRoZSBkZWZhdWx0IGNvbmZpZw0KPiA+ID4g PiArcG5fY29uZmlnX2RlZmF1bHQNCj4gPiA+IFdoYXQgZG9lcyBpdCBtZWFuIGJ5ICdkZWZhdWx0 JyBoZXJlPyBJIGFtIHNvbWV3aGF0IGNvbmZ1c2VkIGJldHdlZW4NCj4gPiAnZGVmYXVsdCcNCj4g PiA+IGFuZCAnZ2VuZXJpYycuIFdlIHNob3VsZCBsb29rIHRvIHJlbW92ZSAnZGVmYXVsdCcgYXMg bXVjaCBhcw0KPiA+ID4gcG9zc2libGUgYW5kIHN0aWNrIHdpdGggJ2dlbmVyaWMnLg0KPiA+ID4N Cj4gPg0KPiA+IFRoaXMgZGVmYXVsdCBtZWFucyB3aGF0IGRlZmF1bHQgbWVhbnMsIG5vIHNwZWNp YWwgbWVhbmluZywgdGhhdCBpcyBpZg0KPiA+IHRoZXJlIGlzbid0IGEgbW9yZSBzcGVjaWZpYyBj b25maWd1cmF0aW9uLCBkZWZhdWx0IHRvIHRoaXMgb25lLiBJdCdzDQo+ID4gcG9zc2libGUgdGhh dCBnZW5lcmljIGlzIGJldHRlciwgYnV0IG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIHVzaW5n DQo+ID4gc29tZXRoaW5nIGVsc2UgdGhhbiBkZWZhdWx0IG9yIGdlbmVyaWMgbWlnaHQgYmUgdGhl IGJlc3QgdG8gYXZvaWQNCj4gPiBjb25mdXNpb24uIFBvc3NpYmx5IGp1c3QgcGFydF9udW1iZXJf YXJtLCB3aGljaCB3aWxsIG1ha2UgaXQgaW4gbGluZSB3aXRoIHRoZQ0KPiBvdGhlciB2YXIgbmFt ZXMuDQo+IEFncmVlLCBiZXR0ZXIgdG8gY2FsbCBpdCAncGFydF9udW1iZXJfYXJtJy4NCj4gDQo+ ID4NCj4gPiA+ID4gKz0gew0KPiA+ID4gPiArCSdnZW5lcmljJzogW1snLW1hcmNoPWFybXY4LWEr Y3JjJywgJy1tb3V0bGluZS1hdG9taWNzJ11dLA0KPiA+ID4gSSBsaWtlIHRoYXQgd2UgaGF2ZSB0 YWtlbiBvdXQgJ25hdGl2ZScgZnJvbSB0aGlzIGxpc3QuIFdvdWxkIGl0IGJlDQo+ID4gPiBwb3Nz aWJsZSB0byB0YWtlIG91dCAnZ2VuZXJpYycgZnJvbSB0aGlzIGFuZCBvdGhlcnMgYmVsb3cuIFRo aXMgaXMNCj4gPiA+IGJlY2F1c2UgdGhlIGJpbmFyeSBidWlsdCB3aXRoICdnZW5lcmljJyBidWls ZCBzaG91bGQgcnVuIG9uIGFueSBBcm0NCj4gPiA+IHBsYXRmb3JtLiBUaGVyZSBpcyBubyBkZXBl bmRlbmN5IG9uIGFueSB1bmRlcmx5aW5nIHBsYXRmb3JtLg0KPiA+ID4NCj4gPg0KPiA+IFRoaXMg YWN0dWFsbHkgbWVhbnMgZ2VuZXJpYyBwYXJ0IGZvciB0aGUgaW1wbGVtZW50ZXIsIG5vdCBnZW5l cmljIGZvcg0KPiA+IGV2ZXJ5dGhpbmcuIEkgdW5kZXJzdGFuZCB0aGlzIGlzIGhlcmUgdG8gcHJv ZHVjZSBiaW5hcmllcyB0aGF0IHdvdWxkDQo+ID4gcnVuIG9uIGV2ZXJ5dGhpbmcgZnJvbSB0aGF0 IGltcGVsZW1ldGVyIChpbiBsaW5lIG9mIHdoYXQgeW91IG1lbnRpb24NCj4gPiBiZWxvdywgdGhp cyB3b3VsZCBiZSBpbXBsZW1lbnRlci1nZW5lcmljIGNvbmZpZ3VyYXRpb24sIGEgZm91cnRoDQo+ ID4gY2F0ZWdvcnkpLiBJbiBteSBwYXRjaHNldCwgaXQncyBhbHNvIGEgZmFsbGJhY2sgd2hlbiBi dWlsZGluZyBmb3IgYW4NCj4gPiB1bmtub3duIHBhcnQgbnVtYmVyIGZyb20gdGhlIGltcGxlbWVu dGVyLg0KPiBXZSBkbyBub3QgbmVlZCBpbXBsZW1lbnRlci1nZW5lcmljIGJpbmFyaWVzL2J1aWxk LiBIb3dldmVyLCB3ZSB3aWxsIGhhdmUNCj4gc29tZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGNvbW1v biBhY3Jvc3MgYWxsIHRoZSBwYXJ0IG51bWJlcnMgZnJvbSB0aGF0DQo+IGltcGxlbWVudGVyIChw cm9iYWJseSB3ZSBzaG91bGQgbm90IGNhbGwgaXQgYXMgJ2ltcGxlbWVudGVyLWdlbmVyaWMnIHRv IGF2b2lkDQo+IGNvbmZ1c2lvbi4gTWF5IGJlICdpbXBsZW1lbnRlci1jb21tb24tZmxhZ3MnIG9y ICdpbXBsZW1lbnRlci1mbGFncy1leHRyYScpLg0KPiBUaG9zZSBwYXJhbWV0ZXJzIGNhbiBiZSB1 c2VkIGZvciBldmVyeSBwYXJ0IG51bWJlci4NCg0KVGhlc2UgYXJlIGN1cnJlbnRseSBuYW1lZCBm bGFnc188aW1wbGVtZW50ZXI+IHN1Y2ggYXMgZmxhZ3NfYXJtIGFuZCBmbGFnc19jYXZpdW0uIFdl IGNvdWxkIHJlbmFtZSB0aGVtIHRvIGltcGxlbWVudGVyX2ZsYWdzXzxpbXBsZW1lbnRlcj4uDQoN Cj4gDQo+IElmIHdlIGtub3cgdGhlIGltcGxlbWVudGVyLCB3ZSB3aWxsIGhhdmUgdGhlIHBhcnQg bnVtYmVyIGFzIHdlbGwgKHRoaXMgaXMgcGFydCBvZg0KPiB0aGUgQXJtIGFyY2hpdGVjdHVyZSBk ZWZpbml0aW9uKS4gVW5rbm93biBwYXJ0IG51bWJlciBzaG91bGQgcmVzdWx0IGluIGFuIGVycm9y DQo+IG1lc3NhZ2UuDQo+IA0KDQpZZXMsIHdlJ2xsIGFsd2F5cyBoYXZlIGJvdGguIEJ1dCB0aGVy ZSBhcmUgc3RpbGwgYSBjb3VwbGUgb2YgY29ybmVyIGNhc2VzIHdpdGggbmF0aXZlIGJ1aWxkcywg d2hpY2ggc2hvdWxkIGFsd2F5cyB3b3JrOg0KMS4gV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgaW1wbGVt ZW50ZXIgKGkuZS4gdGhlcmUncyBubyB2YXJpYWJsZSB3aXRoIG5hbWUgaW1wbGVtZW50ZXJfPGlt cGxlbWVudGVyX2lkPikuIEluIHRoaXMgY2FzZSwgd2hhdCBkbyBkZWZhdWx0IHRvPyBUaGUgZ2Vu ZXJpYyBidWlsZCwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgYmVoYXZpb3I/DQoyLiBXZSBzdXBwb3J0 IHRoZSBpbXBsZW1lbnRlciwgYnV0IHdlIGRvbid0IHN1cHBvcnQgdGhlIHBhcnQgbnVtYmVyLiBJ biB0aGlzIGNhc2UsIHdlIGNhbiBqdXN0IHVzZSBuYXRpdmUgbWFjaGluZSBhcmdzICgtbWFyY2g9 bmF0aXZlKSBhbmQgdXNlIG9ubHkgaW1wbGVtZW50ZXIgc3BlY2lmaWMgZmxhZ3MuDQoNCkZvciBn ZW5lcmljLCBzb2Mtc3BlY2lmYyBhbmQgY3Jvc3MgYnVpbGRzIGl0IG1ha2VzIHNlbnNlIHRvIGVy cm9yIHdpdGggdWtub3duIGltcGxlbWVudGVyL3BhcnQgbnVtYmVyLCBzaW5jZSB3ZSB3b3VsZG4n dCBrbm93IHdoYXQgdG8gYnVpbGQgb3RoZXJ3aXNlLg0KDQo+ID4NCj4gPiBTaW5jZSB0aGlzIGlz IG5vdCBnZW5lcmljIGZvciBldmVyeXRoaW5nLCBvbmx5IGZvciB0aGUgaW1wbGVtZW50ZXIsDQo+ ID4gd2UncmUgbGFja2luZyB0aGUgdHJ1ZSBjb21tb24gZGVmYXVsdCBtYWNoaW5lIGFyZ3MgZm9y IGV2ZXJ5dGhpbmcuDQo+ID4NCj4gPiA+ID4gKwknMHhkMDMnOiBbWyctbWNwdT1jb3J0ZXgtYTUz J11dLA0KPiA+ID4gPiArCScweGQwNCc6IFtbJy1tY3B1PWNvcnRleC1hMzUnXV0sDQo+ID4gPiA+ ICsJJzB4ZDA3JzogW1snLW1jcHU9Y29ydGV4LWE1NyddXSwNCj4gPiA+ID4gKwknMHhkMDgnOiBb WyctbWNwdT1jb3J0ZXgtYTcyJ11dLA0KPiA+ID4gPiArCScweGQwOSc6IFtbJy1tY3B1PWNvcnRl eC1hNzMnXV0sDQo+ID4gPiA+ICsJJzB4ZDBhJzogW1snLW1jcHU9Y29ydGV4LWE3NSddXSwNCj4g PiA+ID4gKwknMHhkMGInOiBbWyctbWNwdT1jb3J0ZXgtYTc2J11dLA0KPiA+ID4gPiArCScweGQw Yyc6IFtbJy1tYXJjaD1hcm12OC4yLWErY3JjK2NyeXB0bycsICctbWNwdT1uZW92ZXJzZS1uMSdd LA0KPiA+ID4gPiArZmxhZ3NfbjFzZHBfZXh0cmFdDQo+ID4gPiAnZmxhZ3NfbjFzZHBfZXh0cmEn IGRvZXMgbm90IGZpdCBoZXJlLiBGb3IgdGhlIHBhcnQgbnVtYmVyICcweGQwYycNCj4gPiA+IHRo ZXJlIGNvdWxkIGJlIG11bHRpcGxlIFNvQ3MgKE4xU0RQIGlzIG9uZSBvZiB0aGVtKS4gU28sIGlm IHRoZSBTb0MNCj4gPiA+IGlzIG5vdCBrbm93biwgYnV0IGlmIHdlIGtub3cgdGhhdCB0aGUgQ1BV IGlzIE4xLCB0aGVuIHdlIHNob3VsZA0KPiA+ID4gYnVpbGQgYSBOMS0NCj4gPiBHZW5lcmljIGJ1 aWxkLg0KPiA+DQo+ID4gVGhpcyBzaG91bGQgYmUgY29yZS1nZW5lcmljIGNvbmZpZ3VyYXRpb24s IEkgY2FuIHJlbmFtZSBpdCB0bw0KPiA+IGZsYWdzX24xZ2VuZXJpY19leHRyYS4NCj4gQWdyZWUu DQo+IA0KPiA+DQo+ID4gPiBTbywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlcmUgYXJlIDMga2lu ZHMgb2YgYmluYXJpZXM6DQo+ID4gPiAxKSBnZW5lcmljIC0gYmVzdCBwb3J0YWJpbGl0eSAtICAo cG9zc2libHkpIGxlYXN0IG9wdGltaXplZCBmb3IgYQ0KPiA+ID4gZ2l2ZW4gcGxhdGZvcm0NCj4g PiA+IDIpIENvcmUtR2VuZXJpYyAoZm9yIGV4OiBOMS1nZW5lcmljKSAtIFBvcnRhYmxlIG9uIGFs bCBOMSBiYXNlZCBTb0NzDQo+ID4gPiBvbmx5IC0gT3B0aW1pemVkIGZvciBOMSBjb3Jlcw0KPiA+ ID4gMykgU29DIHNwZWNpZmljIC0gKHBvc3NpYmx5KSBOb3QgcG9ydGFibGUgLSBNb3N0IG9wdGlt aXplZCBmb3IgdGhlDQo+ID4gPiBTb0MNCj4gPiA+DQo+ID4NCj4gPiBUaGUgZm91cnRoIGNhdGVn b3J5IEkgbWVudGlvbmVkIGFib3ZlLCBpbXBsZW1lbnRlci1nZW5lcmljLCBpcyB1c2VkIGluDQo+ ID4gaG93DQo+IFdlIHNob3VsZCBub3QgaGF2ZSB0aGlzIGNhdGVnb3J5Lg0KPiANCj4gPiB0aGUg YXJtIGNvbmZpZ3VyYXRpb24gaXMgY3VycmVudGx5IHByb2Nlc3NlZDoNCj4gPiAxKSBkZWZhdWx0 IGNvbmZpZ3VyYXRpb24NCj4gPiBBZGRlZCB0by9vdmVyd3JpdHRlbiBieQ0KPiA+IDIpIGltcGxl bWVudGVyIGNvbmZpZ3VyYXRpb24gKG9uZSBvZiB3aGljaCBpcyB0aGUgY29uZmlndXJhdGlvbiBm b3INCj4gPiBnZW5lcmljDQo+ID4gYnVpbGQpIEFkZGVkIHRvL292ZXJ3cml0dGVuIGJ5DQo+IFRo aXMgc2hvdWxkIGJlIGp1c3QgcGFyYW1ldGVycyB0aGF0IGFyZSBjb21tb24gYWNyb3NzIGFsbCB0 aGUgcGFydCBudW1iZXJzIG9mDQo+IHRoYXQgaW1wbGVtZW50ZXIgKGZvciBleDogUlRFX0NBQ0hF X0xJTkVfU0laRSA9IDEyOCksIG5vdCBhIGJ1aWxkLg0KPiANCg0KSXQncyBub3QgYSBidWlsZCwg anVzdCBob3cgdGhlIGNvbmZpZ2F0aW9uIGlzIG9yZ2FuaXplZCBhbmQgcHJvY2Vzc2VkLCBhcyBp biB3ZSBhcHBseSB0aGUgY29tbW9uIGRlZmF1bHQgZmxhZ3MsIHRoZW4gaW1wbGVtZW50ZXIgZmxh Z3MsIHRoZW4gcGFydCBudW1iZXIgZmxhZ3MgYW5kIHRoZW4gc29jIGZsYWdzLCBvdmVyd3JpdGlu ZyBmbGFncyBpbiBhbGwgb2YgdGhlIHN0ZXBzLg0KDQo+ID4gMykgcGFydCBudW1iZXIgKG9yIGNv cmUtZ2VuZXJpYykgY29uZmlndXJhdGlvbiBBZGRlZCB0by9vdmVyd3JpdHRlbiBieQ0KPiA+IDQp IFNvQyBjb25maWd1cmF0aW9uICh3aGF0IHdlJ3JlIGFkZGluZyBub3cpDQo+ID4NCj4gPiBJdCdz IG5vdCBvcmdhbml6ZWQgYXMgY2xlYW5seSAtIHRoZSBtYWNoaW5lIGFyZ3MgY29udGFpbiBib3Ro IDIpIGFuZCAzKS4NCj4gPiBEZXBlbmRpbmcgb24gd2hhdCB3ZSB3YW50IHRvIGRvIHdpdGggdGhl ICdnZW5lcmljJyBwYXJ0IG51bWJlciBJJ2xsDQo+ID4gYWRqdXN0IHRoZSBjb25maWcgb3JnYW5p emF0aW9uLg0KPiA+DQo+ID4gPiAgfSBwbl9jb25maWdfY2F2aXVtID0gew0KPiA+ID4gPiArCSdn ZW5lcmljJzogW1snLW1hcmNoPWFybXY4LWErY3JjK2NyeXB0bycsICctbWNwdT10aHVuZGVyeCdd XSwNCj4gPiA+ICdnZW5lcmljJyBkb2VzIG5vdCBtYWtlIHNlbnNlIGhlcmUuDQo+ID4gPg0KPiA+ ID4gPiArCScweGExJzogW1snLW1jcHU9dGh1bmRlcnh0ODgnXSwgZmxhZ3NfdGh1bmRlcnhfZXh0 cmFdLA0KPiA+ID4gPiArCScweGEyJzogW1snLW1jcHU9dGh1bmRlcnh0ODEnXSwgZmxhZ3NfdGh1 bmRlcnhfZXh0cmFdLA0KPiA+ID4gPiArCScweGEzJzogW1snLW1jcHU9dGh1bmRlcnh0ODMnXSwg ZmxhZ3NfdGh1bmRlcnhfZXh0cmFdLA0KPiA+ID4gPiArCScweGFmJzogW1snLW1hcmNoPWFybXY4 LjEtYStjcmMrY3J5cHRvJywnLW1jcHU9dGh1bmRlcngydDk5J10sDQo+ID4gPiA+IGZsYWdzX3Ro dW5kZXJ4Ml9leHRyYV0sDQo+ID4gPiA+ICsJJzB4YjInOiBbWyctbWFyY2g9YXJtdjguMi1hK2Ny YytjcnlwdG8rbHNlJywnLW1jcHU9b2N0ZW9udHgyJ10sDQo+ID4gPiA+ICtmbGFnc19vY3Rlb250 eDJfZXh0cmFdLCB9IHBuX2NvbmZpZ19lbWFnID0gew0KPiA+ID4gPiArCSdnZW5lcmljJzogW1sn LW1hcmNoPWFybXY4LWErY3JjK2NyeXB0bycsICctbXR1bmU9ZW1hZyddXSB9DQo+ID4gPiBTYW1l IGhlcmUuDQo+ID4gPiBJIHVuZGVyc3RhbmQgdGhhdCB0aGlzIGlzIGNvbWluZyBmcm9tIHRoZSBl eGlzdGluZyBjb2RlLiBCdXQsIEkNCj4gPiA+IHRoaW5rIHdlIHNob3VsZCB0cnkgdG8gc2V0IGl0 IHJpZ2h0Lg0KPiA+ID4NCj4gPg0KPiA+IFRoZSBnZW5lcmljIGNvbmZpZyBmb3IgdGhlc2UgbWFr ZXMgc2Vuc2UgaWYgYSBmb3VydGggY2F0ZWdvcnksDQo+ID4gaW1wbGVtZW50ZXItIGdlbmVyaWMg bWFrZXMgc2Vuc2UuDQo+ID4gRm9yIGV4YW1wbGUsIGZvciBwYXJ0X251bWJlcl9jb25maWdfZW1h ZyB0aGlzIG1lYW5zOiBmb3IgaW1wbGVtZW50ZXINCj4gPiBfMHg1MCAoQW1wZXJlIENvbXB1dGlu ZykgdXNlIHRoZSBnZW5lcmljIG1hY2hpbmUgYXJncyBpZiB0aGVyZSdzDQo+ID4gbm90aGluZyBt b3JlIHNwZWNpZmljICh3aGljaCB0aGVyZSBpc24ndCAtIG5vIG90aGVyIHBhcnQgbnVtYmVyKS4N Cj4gVGhlcmUgc2hvdWxkIGJlIGEgcGFydCBudW1iZXIgZm9yIHRoaXMuIE5vdCBzdXJlIHdoeSBp dCBpcyBub3QgcHJlc2VudCBoZXJlLiBJIHdpbGwNCj4gZmluZCBvdXQgdGhlIGluZm8uDQo+IA0K PiA+DQo+ID4gPiA+DQo+ID4gPiA+ICAjIyBBcm0gaW1wbGVtZW50ZXIgSUQgKEFSTSBEREkgMDQ4 N0MuYSwgU2VjdGlvbiBHNy4yLjEwNiwgUGFnZQ0KPiA+ID4gPiBHNy01MzIxKQ0KPiA+ID4gTml0 LCBXb3VsZCBiZSBnb29kIHRvIHJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBkb2MNCj4gPiA+ DQo+ID4NCj4gPiBJcyB0aGF0IGJlY2F1c2UgdGhlIGRvY3MgbWVudGlvbmVkIGhlcmUgbWF5IG5v dCBiZSB0aGUgbW9zdCByZWNlbnQ/IEl0DQo+ID4gd2FzIHVzZWZ1bCB0byBtZSBpbiB1bmRlcnN0 YW5kaW5nIHdoZXJlIHRoZSBpbXBsZW1lbnRlci9wYXJ0IG51bWJlcg0KPiA+IHZhbHVlcyBjb21l IGZyb20uDQo+IFllcywgbWFpbmx5IGJlY2F1c2UgdGhlIHNwZWMgZ2V0cyB1cGRhdGVkLiBJbnN0 ZWFkIHlvdSBjb3VsZCBzYXkgIlJlZmVyIHRvDQo+IE1JRFIgaW4gQXJtIEFyY2hpdGVjdHVyZSBS ZWZlcmVuY2UgTWFudWFsIikNCj4gDQoNCk9rLCBJJ2xsIG1ha2UgdGhpcyBjaGFuZ2UuDQoNCj4g Pg0KPiA+ID4gPiAtaW1wbF9nZW5lcmljID0gWydHZW5lcmljIGFybXY4JywgZmxhZ3NfZ2VuZXJp YywNCj4gPiA+ID4gbWFjaGluZV9hcmdzX2RlZmF1bHRdDQo+ID4gPiA+IC1pbXBsXzB4NDEgPSBb J0FybScsIGZsYWdzX2FybSwgbWFjaGluZV9hcmdzX2RlZmF1bHRdDQo+ID4gPiA+IC1pbXBsXzB4 NDIgPSBbJ0Jyb2FkY29tJywgZmxhZ3NfZ2VuZXJpYywgbWFjaGluZV9hcmdzX2RlZmF1bHRdDQo+ ID4gPiA+IC1pbXBsXzB4NDMgPSBbJ0Nhdml1bScsIGZsYWdzX2Nhdml1bSwgbWFjaGluZV9hcmdz X2Nhdml1bV0NCj4gPiA+ID4gLWltcGxfMHg0NCA9IFsnREVDJywgZmxhZ3NfZ2VuZXJpYywgbWFj aGluZV9hcmdzX2RlZmF1bHRdDQo+ID4gPiA+IC1pbXBsXzB4NDkgPSBbJ0luZmluZW9uJywgZmxh Z3NfZ2VuZXJpYywgbWFjaGluZV9hcmdzX2RlZmF1bHRdDQo+ID4gPiA+IC1pbXBsXzB4NGQgPSBb J01vdG9yb2xhJywgZmxhZ3NfZ2VuZXJpYywgbWFjaGluZV9hcmdzX2RlZmF1bHRdDQo+ID4gPiA+ IC1pbXBsXzB4NGUgPSBbJ05WSURJQScsIGZsYWdzX2dlbmVyaWMsIG1hY2hpbmVfYXJnc19kZWZh dWx0XQ0KPiA+ID4gPiAtaW1wbF8weDUwID0gWydBbXBlcmUgQ29tcHV0aW5nJywgZmxhZ3NfZW1h ZywgbWFjaGluZV9hcmdzX2VtYWddDQo+ID4gPiA+IC1pbXBsXzB4NTEgPSBbJ1F1YWxjb21tJywg ZmxhZ3NfZ2VuZXJpYywgbWFjaGluZV9hcmdzX2RlZmF1bHRdDQo+ID4gPiA+IC1pbXBsXzB4NTMg PSBbJ1NhbXN1bmcnLCBmbGFnc19nZW5lcmljLCBtYWNoaW5lX2FyZ3NfZGVmYXVsdF0NCj4gPiA+ ID4gLWltcGxfMHg1NiA9IFsnTWFydmVsbCBBUk1BREEnLCBmbGFnc19hcm1hZGEsDQo+ID4gPiA+ IG1hY2hpbmVfYXJnc19kZWZhdWx0XQ0KPiA+ID4gPiAtaW1wbF8weDY5ID0gWydJbnRlbCcsIGZs YWdzX2dlbmVyaWMsIG1hY2hpbmVfYXJnc19kZWZhdWx0XQ0KPiA+ID4gPiAtaW1wbF9kcGFhID0g WydOWFAgRFBBQScsIGZsYWdzX2RwYWEsIG1hY2hpbmVfYXJnc19kZWZhdWx0XQ0KPiA+ID4gPiAr aW1wbF9nZW5lcmljID0gWydHZW5lcmljIGFybXY4JywgZmxhZ3NfZ2VuZXJpYywNCj4gPiA+ID4g K3BuX2NvbmZpZ19kZWZhdWx0XQ0KPiA+ID4gPiAraW1wbF8weDQxID0gWydBcm0nLCBmbGFnc19h cm0sIHBuX2NvbmZpZ19kZWZhdWx0XQ0KPiA+ID4gPiAraW1wbF8weDQyID0gWydCcm9hZGNvbScs IGZsYWdzX2dlbmVyaWMsIHBuX2NvbmZpZ19kZWZhdWx0XQ0KPiA+ID4gPiAraW1wbF8weDQzID0g WydDYXZpdW0nLCBmbGFnc19jYXZpdW0sIHBuX2NvbmZpZ19jYXZpdW1dDQo+ID4gPiA+ICtpbXBs XzB4NDQgPSBbJ0RFQycsIGZsYWdzX2dlbmVyaWMsIHBuX2NvbmZpZ19kZWZhdWx0XQ0KPiA+ID4g PiAraW1wbF8weDQ5ID0gWydJbmZpbmVvbicsIGZsYWdzX2dlbmVyaWMsIHBuX2NvbmZpZ19kZWZh dWx0XQ0KPiA+ID4gPiAraW1wbF8weDRkID0gWydNb3Rvcm9sYScsIGZsYWdzX2dlbmVyaWMsIHBu X2NvbmZpZ19kZWZhdWx0XQ0KPiA+ID4gPiAraW1wbF8weDRlID0gWydOVklESUEnLCBmbGFnc19n ZW5lcmljLCBwbl9jb25maWdfZGVmYXVsdF0NCj4gPiA+ID4gK2ltcGxfMHg1MCA9IFsnQW1wZXJl IENvbXB1dGluZycsIGZsYWdzX2VtYWcsIHBuX2NvbmZpZ19lbWFnXQ0KPiA+ID4gPiAraW1wbF8w eDUxID0gWydRdWFsY29tbScsIGZsYWdzX2dlbmVyaWMsIHBuX2NvbmZpZ19kZWZhdWx0XQ0KPiA+ ID4gPiAraW1wbF8weDUzID0gWydTYW1zdW5nJywgZmxhZ3NfZ2VuZXJpYywgcG5fY29uZmlnX2Rl ZmF1bHRdDQo+ID4gPiA+ICtpbXBsXzB4NTYgPSBbJ01hcnZlbGwgQVJNQURBJywgZmxhZ3NfYXJt YWRhLCBwbl9jb25maWdfZGVmYXVsdF0NCj4gPiA+ID4gK2ltcGxfMHg2OSA9IFsnSW50ZWwnLCBm bGFnc19nZW5lcmljLCBwbl9jb25maWdfZGVmYXVsdF0gaW1wbF9kcGFhDQo+ID4gPiA+ICs9IFsn TlhQIERQQUEnLCBmbGFnc19kcGFhLCBwbl9jb25maWdfZGVmYXVsdF0NCj4gPiA+ID4NCj4gPiA+ ID4gIGRwZGtfY29uZi5zZXQoJ1JURV9BUkNIX0FSTScsIDEpDQo+ID4gPiA+ICBkcGRrX2NvbmYu c2V0KCdSVEVfRk9SQ0VfSU5UUklOU0lDUycsIDEpDQo+ID4gPiA+DQo+ID4gPiA+ICBpZiBkcGRr X2NvbmYuZ2V0KCdSVEVfQVJDSF8zMicpDQo+ID4gPiA+ICsJIyBhcm12NyBidWlsZA0KPiA+ID4g PiAgCWRwZGtfY29uZi5zZXQoJ1JURV9DQUNIRV9MSU5FX1NJWkUnLCA2NCkNCj4gPiA+ID4gIAlk cGRrX2NvbmYuc2V0KCdSVEVfQVJDSF9BUk12NycsIDEpDQo+ID4gPiA+ICAJIyB0aGUgbWluaW11 bSBhcmNoaXRlY3R1cmUgc3VwcG9ydGVkLCBhcm12Ny1hLCBuZWVkcyB0aGUgZm9sbG93aW5nLA0K PiA+ID4gPiAgCSMgbWsvbWFjaGluZS9hcm12N2EvcnRlLnZhcnMubWsgc2V0cyBpdCB0b28NCj4g PiA+ID4gIAltYWNoaW5lX2FyZ3MgKz0gJy1tZnB1PW5lb24nDQo+ID4gPiA+ICBlbHNlDQo+ID4g PiA+IC0JZHBka19jb25mLnNldCgnUlRFX0NBQ0hFX0xJTkVfU0laRScsIDEyOCkNCj4gPiA+ID4g LQlkcGRrX2NvbmYuc2V0KCdSVEVfQVJDSF9BUk02NCcsIDEpDQo+ID4gPiA+ICsJIyBhYXJjaDY0 IGJ1aWxkDQo+ID4gPiA+ICsJaWYgbm90IG1lc29uLmlzX2Nyb3NzX2J1aWxkKCkNCj4gPiA+ID4g KwkJaWYgbWFjaGluZSA9PSAnZ2VuZXJpYycNCj4gPiA+ID4gKwkJCSMgZGVmYXVsdCBidWlsZA0K PiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5e Xl5eXl5eIEdlbmVyaWMgYnVpbGQ/DQo+ID4gPg0KPiA+DQo+ID4gQWxyZWFkeSBhZGRyZXNzZWQg aW4gdGhlIG5leHQgdmVyc2lvbi4NCj4gPg0KPiA+ID4gPiArCQkJaW1wbF9jb25maWcgPSBpbXBs X2dlbmVyaWMNCj4gPiA+ID4gKwkJCXBhcnRfbnVtYmVyID0gJ2dlbmVyaWMnDQo+ID4gPiA+ICsJ CWVsc2UNCj4gPiA+ID4gKwkJCSMgbmF0aXZlIGJ1aWxkDQo+ID4gPiA+ICsJCQkjIFRoZSBzY3Jp cHQgcmV0dXJucyBbJ0ltcGxlbWVudGVyJywgJ1ZhcmlhbnQnLA0KPiA+ID4gPiAnQXJjaGl0ZWN0 dXJlJywNCj4gPiA+ID4gKwkJCSMgJ1ByaW1hcnkgUGFydCBudW1iZXInLCAnUmV2aXNpb24nXQ0K PiA+ID4gPiArCQkJZGV0ZWN0X3ZlbmRvciA9IGZpbmRfcHJvZ3JhbShqb2luX3BhdGhzKA0KPiA+ ID4gPiArCQkJCQltZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwNCj4gPiA+ID4gJ2FybXY4X21h Y2hpbmUucHknKSkNCj4gPiA+ID4gKwkJCWNtZCA9IHJ1bl9jb21tYW5kKGRldGVjdF92ZW5kb3Iu cGF0aCgpKQ0KPiA+ID4gPiArCQkJaWYgY21kLnJldHVybmNvZGUoKSA9PSAwDQo+ID4gPiA+ICsJ CQkJY21kX291dHB1dCA9DQo+ID4gPiA+IGNtZC5zdGRvdXQoKS50b19sb3dlcigpLnN0cmlwKCku c3BsaXQoJyAnKQ0KPiA+ID4gPiArCQkJZW5kaWYNCj4gPiA+ID4gKwkJCWlmIGFybV9mb3JjZV9u YXRpdmVfbWFyY2ggPT0gdHJ1ZQ0KPiA+ID4gPiArCQkJCXBhcnRfbnVtYmVyID0gJ25hdGl2ZScN Cj4gPiA+ID4gKwkJCWVsc2UNCj4gPiA+ID4gKwkJCQlwYXJ0X251bWJlciA9IGNtZF9vdXRwdXRb M10NCj4gPiA+ID4gKwkJCWVuZGlmDQo+ID4gPiA+ICsJCQkjIFNldCB0byBnZW5lcmljIGltcGxl bWVudGVyIGlmIGltcGxlbWVudGVyIGlzIG5vdA0KPiA+ID4gPiBmb3VuZA0KPiA+ID4gPiArCQkJ aW1wbF9jb25maWcgPSBnZXRfdmFyaWFibGUoJ2ltcGxfJyArIGNtZF9vdXRwdXRbMF0sDQo+ID4g PiA+ICdpbXBsX2dlbmVyaWMnKQ0KPiA+ID4gPiArCQllbmRpZg0KPiA+ID4gPiArCWVsc2UNCj4g PiA+ID4gKwkJIyBjcm9zcyBidWlsZA0KPiA+ID4gPiArCQlpbXBsX2lkID0gbWVzb24uZ2V0X2Ny b3NzX3Byb3BlcnR5KCdpbXBsZW1lbnRlcl9pZCcsDQo+ID4gPiA+ICdnZW5lcmljJykNCj4gPiA+ ID4gKwkJcGFydF9udW1iZXIgPSBtZXNvbi5nZXRfY3Jvc3NfcHJvcGVydHkoJ3BhcnRfbnVtYmVy JywNCj4gPiA+ID4gJ2dlbmVyaWMnKQ0KPiA+ID4gPiArCQlpbXBsX2NvbmZpZyA9IGdldF92YXJp YWJsZSgnaW1wbF8nICsgaW1wbF9pZCkNCj4gPiA+ID4gKwllbmRpZg0KPiA+ID4gPg0KPiA+ID4g PiAtCW1hY2hpbmUgPSBbXQ0KPiA+ID4gPiAtCWNtZF9nZW5lcmljID0gWydnZW5lcmljJywgJycs ICcnLCAnZGVmYXVsdCcsICcnXQ0KPiA+ID4gPiAtCWNtZF9vdXRwdXQgPSBjbWRfZ2VuZXJpYyAj IFNldCBnZW5lcmljIGJ5IGRlZmF1bHQNCj4gPiA+ID4gLQltYWNoaW5lX2FyZ3MgPSBbXSAjIENs ZWFyIHByZXZpb3VzIG1hY2hpbmUgYXJncw0KPiA+ID4gPiAtCWlmIGFybV9mb3JjZV9nZW5lcmlj X21hcmNoIGFuZCBub3QgbWVzb24uaXNfY3Jvc3NfYnVpbGQoKQ0KPiA+ID4gPiAtCQltYWNoaW5l ID0gaW1wbF9nZW5lcmljDQo+ID4gPiA+IC0JCWltcGxfcG4gPSAnZGVmYXVsdCcNCj4gPiA+ID4g KwltZXNzYWdlKCdBcm0gaW1wbGVtZW50ZXI6ICcgKyBpbXBsX2NvbmZpZ1swXSkNCj4gPiA+ID4g KwltZXNzYWdlKCdBcm0gcGFydCBudW1iZXI6ICcgKyBwYXJ0X251bWJlcikNCj4gPiA+ID4gKw0K PiA+ID4gPiArCWltcGxlbWVudGVyX2ZsYWdzID0gaW1wbF9jb25maWdbMV0NCj4gPiA+ID4gKwlw YXJ0X251bWJlcl9jb25maWcgPSBpbXBsX2NvbmZpZ1syXQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJ aWYgcGFydF9udW1iZXJfY29uZmlnLmhhc19rZXkocGFydF9udW1iZXIpDQo+ID4gPiA+ICsJCSMg dXNlIHRoZSBzcGVjaWZpZWQgcGFydF9udW1iZXIgbWFjaGluZSBhcmdzIGlmIGZvdW5kDQo+ID4g PiA+ICsJCXBhcnRfbnVtYmVyX2NvbmZpZyA9IHBhcnRfbnVtYmVyX2NvbmZpZ1twYXJ0X251bWJl cl0NCj4gPiA+ID4gKwllbGlmIHBhcnRfbnVtYmVyID09ICduYXRpdmUnDQo+ID4gPiA+ICsJCSMg dXNlIG5hdGl2ZSBtYWNoaW5lIGFyZ3MNCj4gPiA+ID4gKwkJcGFydF9udW1iZXJfY29uZmlnID0g W1tuYXRpdmVfbWFjaGluZV9hcmdzXV0NCj4gPiA+ID4gIAllbGlmIG5vdCBtZXNvbi5pc19jcm9z c19idWlsZCgpDQo+ID4gPiA+IC0JCSMgVGhlIHNjcmlwdCByZXR1cm5zIFsnSW1wbGVtZW50ZXIn LCAnVmFyaWFudCcsICdBcmNoaXRlY3R1cmUnLA0KPiA+ID4gPiAtCQkjICdQcmltYXJ5IFBhcnQg bnVtYmVyJywgJ1JldmlzaW9uJ10NCj4gPiA+ID4gLQkJZGV0ZWN0X3ZlbmRvciA9IGZpbmRfcHJv Z3JhbShqb2luX3BhdGhzKA0KPiA+ID4gPiAtCQkJCW1lc29uLmN1cnJlbnRfc291cmNlX2Rpcigp LA0KPiA+ID4gPiAnYXJtdjhfbWFjaGluZS5weScpKQ0KPiA+ID4gPiAtCQljbWQgPSBydW5fY29t bWFuZChkZXRlY3RfdmVuZG9yLnBhdGgoKSkNCj4gPiA+ID4gLQkJaWYgY21kLnJldHVybmNvZGUo KSA9PSAwDQo+ID4gPiA+IC0JCQljbWRfb3V0cHV0ID0gY21kLnN0ZG91dCgpLnRvX2xvd2VyKCku c3RyaXAoKS5zcGxpdCgnDQo+ID4gPiA+ICcpDQo+ID4gPiA+IC0JCWVuZGlmDQo+ID4gPiA+IC0J CSMgU2V0IHRvIGdlbmVyaWMgaWYgdmFyaWFibGUgaXMgbm90IGZvdW5kDQo+ID4gPiA+IC0JCW1h Y2hpbmUgPSBnZXRfdmFyaWFibGUoJ2ltcGxfJyArIGNtZF9vdXRwdXRbMF0sIFsnZ2VuZXJpYydd KQ0KPiA+ID4gPiAtCQlpZiBtYWNoaW5lWzBdID09ICdnZW5lcmljJw0KPiA+ID4gPiAtCQkJbWFj aGluZSA9IGltcGxfZ2VuZXJpYw0KPiA+ID4gPiAtCQkJY21kX291dHB1dCA9IGNtZF9nZW5lcmlj DQo+ID4gPiA+IC0JCWVuZGlmDQo+ID4gPiA+IC0JCWltcGxfcG4gPSBjbWRfb3V0cHV0WzNdDQo+ ID4gPiA+IC0JCWlmIGFybV9mb3JjZV9uYXRpdmVfbWFyY2ggPT0gdHJ1ZQ0KPiA+ID4gPiAtCQkJ aW1wbF9wbiA9ICduYXRpdmUnDQo+ID4gPiA+IC0JCWVuZGlmDQo+ID4gPiA+ICsJCSMgZGVmYXVs dCB0byBnZW5lcmljIG1hY2hpbmUgYXJncyBpZiBwYXJ0X251bWJlciBpcyBub3QgZm91bmQNCj4g PiA+ID4gKwkJIyBhbmQgbm90IGZvcmNpbmcgbmF0aXZlIG1hY2hpbmUgYXJncw0KPiA+ID4gPiAr CQkjIGJ1dCBkb24ndCBkZWZhdWx0IGluIGNyb3NzLWJ1aWxkczsgaWYgcGFydF9udW1iZXIgaXMg c3BlY2lmaWVkDQo+ID4gPiA+ICsJCSMgaW5jb3JyZWN0bHkgaW4gYSBjcm9zcy1maWxlLCBpdCBu ZWVkcyB0byBiZSBmaXhlZCB0aGVyZQ0KPiA+ID4gPiArCQlwYXJ0X251bWJlcl9jb25maWcgPSBw YXJ0X251bWJlcl9jb25maWdbJ2dlbmVyaWMnXQ0KPiA+ID4gPiAgCWVsc2UNCj4gPiA+ID4gLQkJ aW1wbF9pZCA9IG1lc29uLmdldF9jcm9zc19wcm9wZXJ0eSgnaW1wbGVtZW50b3JfaWQnLA0KPiA+ ID4gPiAnZ2VuZXJpYycpDQo+ID4gPiA+IC0JCWltcGxfcG4gPSBtZXNvbi5nZXRfY3Jvc3NfcHJv cGVydHkoJ2ltcGxlbWVudG9yX3BuJywNCj4gPiA+ID4gJ2RlZmF1bHQnKQ0KPiA+ID4gPiAtCQlt YWNoaW5lID0gZ2V0X3ZhcmlhYmxlKCdpbXBsXycgKyBpbXBsX2lkKQ0KPiA+ID4gPiArCQkjIGNy b3NzIGJ1aWxkIGFuZCBwYXJ0IG51bWJlciBpcyBub3QgaW4gcGFydF9udW1iZXJfY29uZmlnDQo+ ID4gPiA+ICsJCWVycm9yKCdDcm9zcyBidWlsZCBwYXJ0IG51bWJlciAwQDAgbm90DQo+ID4gPiA+ IGZvdW5kLicuZm9ybWF0KHBhcnRfbnVtYmVyKSkNCj4gPiA+ID4gIAllbmRpZg0KPiA+ID4gPg0K PiA+ID4gPiAtCSMgQXBwbHkgQ29tbW9uIERlZmF1bHRzLiBUaGVzZSBzZXR0aW5ncyBtYXkgYmUg b3ZlcndyaXR0ZW4gYnkNCj4gPiA+ID4gbWFjaGluZQ0KPiA+ID4gPiAtCSMgc2V0dGluZ3MgbGF0 ZXIuDQo+ID4gPiA+IC0JZm9yZWFjaCBmbGFnOiBmbGFnc19jb21tb25fZGVmYXVsdA0KPiA+ID4g PiAtCQlpZiBmbGFnLmxlbmd0aCgpID4gMA0KPiA+ID4gPiAtCQkJZHBka19jb25mLnNldChmbGFn WzBdLCBmbGFnWzFdKQ0KPiA+ID4gPiArCWRwZGtfZmxhZ3MgPSBmbGFnc19jb21tb25fZGVmYXVs dCArIGltcGxlbWVudGVyX2ZsYWdzDQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiBwYXJ0X251bWJl cl9jb25maWcubGVuZ3RoKCkgPiAxDQo+ID4gPiA+ICsJCWRwZGtfZmxhZ3MgKz0gcGFydF9udW1i ZXJfY29uZmlnWzFdDQo+ID4gPiA+ICsJZW5kaWYNCj4gPiA+ID4gKw0KPiA+ID4gPiArCW1hY2hp bmVfYXJncyA9IFtdICMgQ2xlYXIgcHJldmlvdXMgbWFjaGluZSBhcmdzDQo+ID4gPiA+ICsJZm9y ZWFjaCBmbGFnOiBwYXJ0X251bWJlcl9jb25maWdbMF0NCj4gPiA+ID4gKwkJaWYgY2MuaGFzX2Fy Z3VtZW50KGZsYWcpDQo+ID4gPiA+ICsJCQltYWNoaW5lX2FyZ3MgKz0gZmxhZw0KPiA+ID4gPiAg CQllbmRpZg0KPiA+ID4gPiAgCWVuZGZvcmVhY2gNCj4gPiA+ID4NCj4gPiA+ID4gLQltZXNzYWdl KCdJbXBsZW1lbnRlciA6ICcgKyBtYWNoaW5lWzBdKQ0KPiA+ID4gPiAtCWZvcmVhY2ggZmxhZzog bWFjaGluZVsxXQ0KPiA+ID4gPiArCWZvcmVhY2ggZmxhZzogZHBka19mbGFncw0KPiA+ID4gPiAg CQlpZiBmbGFnLmxlbmd0aCgpID4gMA0KPiA+ID4gPiAgCQkJZHBka19jb25mLnNldChmbGFnWzBd LCBmbGFnWzFdKQ0KPiA+ID4gPiAgCQllbmRpZg0KPiA+ID4gPiAgCWVuZGZvcmVhY2gNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtCWZvcmVhY2ggbWFyZzogbWFjaGluZVsyXQ0KPiA+ID4gPiAtCQlpZiBt YXJnWzBdID09IGltcGxfcG4NCj4gPiA+ID4gLQkJCWZvcmVhY2ggZmxhZzogbWFyZ1sxXQ0KPiA+ ID4gPiAtCQkJCWlmIGNjLmhhc19hcmd1bWVudChmbGFnKQ0KPiA+ID4gPiAtCQkJCQltYWNoaW5l X2FyZ3MgKz0gZmxhZw0KPiA+ID4gPiAtCQkJCWVuZGlmDQo+ID4gPiA+IC0JCQllbmRmb3JlYWNo DQo+ID4gPiA+IC0JCQkjIEFwcGx5IGFueSBleHRyYSBtYWNoaW5lIHNwZWNpZmljIGZsYWdzLg0K PiA+ID4gPiAtCQkJZm9yZWFjaCBmbGFnOiBtYXJnLmdldCgyLCBmbGFnc19kZWZhdWx0X2V4dHJh KQ0KPiA+ID4gPiAtCQkJCWlmIGZsYWcubGVuZ3RoKCkgPiAwDQo+ID4gPiA+IC0JCQkJCWRwZGtf Y29uZi5zZXQoZmxhZ1swXSwgZmxhZ1sxXSkNCj4gPiA+ID4gLQkJCQllbmRpZg0KPiA+ID4gPiAt CQkJZW5kZm9yZWFjaA0KPiA+ID4gPiAtCQllbmRpZg0KPiA+ID4gPiAtCWVuZGZvcmVhY2gNCj4g PiA+ID4gIGVuZGlmDQo+ID4gPiA+IC1tZXNzYWdlKG1hY2hpbmVfYXJncykNCj4gPiA+ID4gKw0K PiA+ID4gPiArbWVzc2FnZSgnVXNpbmcgbWFjaGluZSBhcmdzOiBAMEAnLmZvcm1hdChtYWNoaW5l X2FyZ3MpKQ0KPiA+ID4gPg0KPiA+ID4gPiAgaWYgKGNjLmdldF9kZWZpbmUoJ19fQVJNX05FT04n LCBhcmdzOiBtYWNoaW5lX2FyZ3MpICE9ICcnIG9yDQo+ID4gPiA+ICAgICAgY2MuZ2V0X2RlZmlu ZSgnX19hYXJjaDY0X18nLCBhcmdzOiBtYWNoaW5lX2FyZ3MpICE9ICcnKQ0KPiA+ID4gPiAtLQ0K PiA+ID4gPiAyLjIwLjENCg0K