From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 5D80C1FF18C for <inbox@lore.proxmox.com>; Mon, 12 May 2025 10:38:13 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 41F4E37ACB; Mon, 12 May 2025 10:38:32 +0200 (CEST) Message-ID: <cf8752be-f877-4832-9a06-1ad4f71993b6@proxmox.com> Date: Mon, 12 May 2025 10:38:25 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Lou.Lecrivain@wdz.de, pve-devel@lists.proxmox.com References: <20250506090041.53080-1-h.duerr@proxmox.com> <FR2PPF45D006270C594040B87F6E418E7548588A@FR2PPF45D006270.DEUP281.PROD.OUTLOOK.COM> <93bc24cc-2465-4ed2-b62f-d12305d5add3@proxmox.com> <FR2PPF45D0062706987369A6C23E8E8DF74858AA@FR2PPF45D006270.DEUP281.PROD.OUTLOOK.COM> Content-Language: en-US From: Hannes Duerr <h.duerr@proxmox.com> In-Reply-To: <FR2PPF45D0062706987369A6C23E8E8DF74858AA@FR2PPF45D006270.DEUP281.PROD.OUTLOOK.COM> X-SPAM-LEVEL: Spam detection results: 0 AWL -1.348 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_MAILER 2 Automated Mailer Tag Left in Email RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [nautobotplugin.pm, netboxplugin.pm, phpipamplugin.pm, plugin.pm, pveplugin.pm, networktocode.com, ipams.pm] Subject: Re: [pve-devel] SPAM: RE: [!!ACHTUNG extern!!] - Re: SPAM: [PATCH pve-network v4 1/2] ipam: add Nautobot plugin - range workaround questions X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Cc: jonatan.crystall@gwdg.de Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> Ck9uIDUvOS8yNSAxMTozNCwgTG91LkxlY3JpdmFpbkB3ZHouZGUgd3JvdGU6Cj4gUmUsCj4KPiBP aywgdGhhbmtzIGZvciBjbGFyaWZ5aW5nLiBJbmRlZWQgdGhlIG9mZnNldCBwYXJhbWV0ZXIgaXMg aW5lZmZlY3RpdmUgKEkgaGF2ZSBsb29rZWQgYXQgdGhlIE5hdXRvYm90IGNvZGUgdGhpcyBtb3Ju aW5nKS4gVGJxaCBJIGRvbid0IHJlYWxseSBsaWtlIGhhdmluZyB0byBjcmVhdGUgdGhlbiBkZWxl dGUgYW4gb2JqZWN0IGluIE5hdXRvYm90IGZvciB0aGlzLCBidXQgSSBndWVzcyB0aGVyZSdzIG5v IG90aGVyIHdheSwgZ2l2ZW4gdGhlIGxpbWl0YXRpb25zIHdlJ3JlIGZhY2VkIHdpdGguCj4KPiBB bHRlcm5hdGl2ZWx5IGFzIGEgbWlkZGxlIGdyb3VuZCAoYW5kIEkgdGhpbmsgdGhpcyB3b3VsZCBi ZSBtdWNoIHF1aWNrZXIgdGhhbiBpbXBsZW1lbnRpbmcgSVAgcmFuZ2VzIGluIE5hdXRvYm90KSwg d2UgY291bGQgaW1wbGVtZW50IHRoZSBvZmZzZXQgcGFyYW1ldGVyIGluIE5hdXRvYm90IGFuZCBj aGFuZ2UgdGhlIG9yaWdpbmFsIHdvcmthcm91bmQgY29kZSB0byBmaXQgdGhpcywgYW5kIHRoZW4g cmVxdWlyZSBhIG1pbmltYWwgTmF1dG9ib3QgdmVyc2lvbiAoZm9yIHJhbmdlcyBvciB0aGUgd2hv bGUgcGx1Z2luKS4gQnV0IElNTyB0aGlzIGRvZXNuJ3QgbWVhbiB3ZSBjYW4ndCBtZXJnZSB0aGlz LiBXZSBjb3VsZCBjaGFuZ2UgaXQgYWZ0ZXJ3YXJkcy4KeWVzIEkgdW5kZXJzdGFuZCB0aGF0IGl0 J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBuaWNlc3Qgc29sdXRpb24sIGJ1dAppbnR1aXRpdmVseSBJ IHByZWZlcnJlZCB0byBpbXBsZW1lbnQgaXQgdGhpcyB3YXkgYW5kIGhhdmUgbm8gQVBJCnZlcnNp b24gcmVzdHJpY3Rpb25zIHRoYW4gdG8gaW1wbGVtZW50IHRoZSBvZmZzZXQgcGFyYW1ldGVyLiBC dXQgSQp3b3VsZG4ndCBoYXZlIGFueSBoYXJkIGZlZWxpbmdzIGFib3V0IGFkYXB0aW5nIHRoZSBj b2RlIGlmIE5hdXRvYm90CnN1cHBvcnRzIHRoZSBvZmZzZXQgcGFyYW1ldGVyIGFuZCBwZW9wbGUg cHJlZmVyIGl0IHRoYXQgd2F5LgpIYXZlIHlvdSBhbHJlYWR5IHRlc3RlZCB0aGUgbmV3IGltcGxl bWVudGF0aW9uPwo+IEkgaGF2ZSBubyBvdGhlciByZW1hcmtzLiBUaGFua3MgYWdhaW4gZm9yIHlv dXIgd29yay4KPgo+IEJSCj4gTG91Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+IERlIDrCoEhhbm5lcyBEdWVyciA8aC5kdWVyckBwcm94bW94LmNvbT4KPiBFbnZv ecOpIDrCoHZlbmRyZWRpIDkgbWFpIDIwMjUgMTA6NDYKPiDDgCA6wqBMZWNyaXZhaW4sIExvdSAo V0RaKSA8TG91LkxlY3JpdmFpbkB3ZHouZGU+OyBwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20g PHB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbT4KPiBPYmpldCA6wqBbISFBQ0hUVU5HIGV4dGVy biEhXSAtIFJlOiBTUEFNOiBbUEFUQ0ggcHZlLW5ldHdvcmsgdjQgMS8yXSBpcGFtOiBhZGQgTmF1 dG9ib3QgcGx1Z2luIC0gcmFuZ2Ugd29ya2Fyb3VuZCBxdWVzdGlvbnMKPiAgIAo+Cj4gT24gNS83 LzI1IDExOjE3LCBMb3UuTGVjcml2YWluQHdkei5kZcKgd3JvdGU6Cj4gSGFubmVzLAo+Cj4gVGhh bmsgeW91IGZvciBoZWxwaW5nIHdpdGggZ2V0dGluZyB0aGUgTmV0Ym94IHBsdWdpbiBpbiBnb29k IHNoYXBlLCBpdCdzIGFwcHJlY2lhdGVkLCByZWFsbHkgOikKPgo+IEkganVzdCBoYXZlIHR3byBx dWVzdGlvbnMgcmVnYXJkaW5nIHRoZSBsYWNrIG9mIHJhbmdlIHN1cHBvcnQgaW4gTmF1dG9ib3Q6 Cj4gLSBXYXMgdGhlcmUgYW4gaXNzdWUgd2l0aCB0aGUgb3JpZ2luYWwgd29ya2Fyb3VuZCBjb2Rl PyBJIGZpbmQgdGhpcyBvbmUgd2F5IG1vcmUgY29tcGxleCwKPiAgIMKgIGJ1dCBhbHNvIEkgZ3Vl c3MgSSBjb3VsZCd2ZSBtaXNzZWQgc29tZSBjb3JuZXIgY2FzZShzKS4KPiBZZXMsIHRoZXJlIHdh cyB0aGUgcHJvYmxlbSB0aGF0IHRoZSBvbGQgdmVyc2lvbiB3b3VsZCBwb3NzaWJseSBvdXRwdXQK PiBpbnZhbGlkIGZyZWUgSVAgYWRkcmVzc2VzIGlmIHRoZSBJUCByYW5nZSBkaWQgbm90IHN0YXJ0 IGRpcmVjdGx5IGF0Cj4gdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJlZml4LiBBc3N1bWluZyB5b3Ug aGF2ZSAxOTIuMTY4LjAuMC8xNiBhcwo+IHByZWZpeCwgYWxsIElQIGFkZHJlc3NlcyBhcmUgc3Rp bGwgZnJlZSBhbmQgeW91IHdhbnQgZnJlZSBpcCBhZGRyZXNzZXMKPiBpbiB0aGUgcmFuZ2UgMTky LjE2OC42LjEvMTYgLSAxOTIuMTY4LjcuMjU1LzE2IHRoZW4gdGhlIG9sZAo+IGltcGxlbWVudGF0 aW9uIHdvdWxkIHN0aWxsIGhhdmUgcmVjZWl2ZWQgdGhlIGFkZHJlc3Nlcwo+IDE5Mi4xNjguMC5b MC01MF0vMjQgZnJvbSB0aGUgQVBJLiBUaGlzIGNvdWxkIGhhdmUgYmVlbiByZW1lZGllZCBieSBh bgo+IG9mZnNldCBwYXJhbWV0ZXIsIGJ1dCB0aGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhl IEFQSSBlbmRwb2ludC4KPiBJbmNyZWFzaW5nIHRoZSBgbGltaXRgIGlzIGFsc28gbm90IGFuIG9w dGlvbiwgYXMgdGhlcmUgaXMgYSBtYXhpbXVtCj4gbGltaXQgb2YgMTAwMCBhbmQgeW91IGNhbiBz dGlsbCBydW4gaW50byBwcm9ibGVtcy4KPiBJIGhhdmUgdGhlcmVmb3JlIG9wdGVkIGZvciB0aGUg Y3VycmVudCBpbXBsZW1lbnRhdGlvbi4KPgo+Cj4gLSBXaGF0IGhhcHBlbnMgaWYgd2UgdXNlIGEg cHJlZml4IHdpdGggYSBDSURSIGdyZWF0ZXIgdGhhbiAvMjQgaW4gSVB2NCBvciAvMTIwIGluIElQ djY/Cj4gICDCoCBEb2VzIG5vdCBiZWluZyBhYmxlIHRvIHNsaWNlIGl0IG1lYW5zIHRoYXQgcmFu Z2VzIHdpdGggc21hbGwgcHJlZml4ZXMgc3VjaCBhcyB0aGVzZQo+ICAgwqAgd291bGQgYmUgZm9y YmlkZGVuL25vdCB3b3JraW5nPwo+IE5vLCBhbGwgcHJlZml4ZXMgc2hvdWxkIHdvcmsuIEZvciBz bWFsbGVyIHByZWZpeGVzIHN1Y2ggYXMgLzI2LCB3ZQo+IHN0aWxsIGNyZWF0ZSBhIC8yNCBwb29s IGFuZCBzZWFyY2ggaXQgZm9yIGZyZWUgaXBzLCBidXQgdGhlbiBjaGVjawo+IGFnYWluIHdoZXRo ZXIgdGhlIGlwIGlzIGFjdHVhbGx5IGluIHRoZSBkZXNpcmVkIHJhbmdlIGluIC8yNi4KPgo+IEJS Cj4gTG91Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IERlIDrC oEhhbm5lcyBEdWVyciA8aC5kdWVyckBwcm94bW94LmNvbT4KPiBFbnZvecOpIDrCoG1hcmRpIDYg bWFpIDIwMjUgMTE6MDAKPiDDgCA6wqBwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20gPHB2ZS1k ZXZlbEBsaXN0cy5wcm94bW94LmNvbT4KPiBDY8KgOsKgSGFubmVzIER1ZXJyIDxoLmR1ZXJyQHBy b3htb3guY29tPjsgTGVjcml2YWluLCBMb3UgKFdEWikgPExvdS5MZWNyaXZhaW5Ad2R6LmRlPgo+ IE9iamV0IDrCoFshIUFDSFRVTkcgZXh0ZXJuISFdIC0gW1BBVENIIHB2ZS1uZXR3b3JrIHY0IDEv Ml0gaXBhbTogYWRkIE5hdXRvYm90IHBsdWdpbgo+ICAgCj4gTmF1dG9ib3QgaXMgYSBuZXR3b3Jr IHNvdXJjZSBvZiB0cnV0aCBbMF0gYW5kIGFzIHN1Y2ggdGhpcyBwbHVnaW4gb2ZmZXJzCj4gdGhl IHBvc3NpYmlsaXR5IHRvIGF1dG9tYXRpY2FsbHkgZW50ZXIgSVAgYWRkcmVzc2VzIGFuZCBzdWJu ZXRzCj4gKHByZWZpeGVzIGluIE5hdXRvYm90IGphcmdvbikgaW50byBOYXV0b2JvdCBhcyBzb29u IGFzIHRoZXkgYXJlIGNyZWF0ZWQKPiBpbiBQcm94bW94IFZFLgo+Cj4gTGltaXRhdGlvbnM6Cj4g KiBUaGUgSVBBTSBwbHVnaW4gY3VycmVudGx5IGRvZXMgbm90IHJlY29nbml6ZSB3aGV0aGVyIFZN cy9DVHMgYXJlCj4gIMKgIGFjdGl2ZS9vbmxpbmUgYW5kIGluaXRpYWxseSBzZXRzIHRoZSBzdGF0 dXMgdG8gQWN0aXZlIGJ1dCB3aGVuIHRoZQo+ICDCoCBWTXMvQ1RzIGFyZSBzd2l0Y2hlZCBvZmYg dGhlIHN0YXR1cyBpcyBub3QgZGVhY3RpdmF0ZWQuCj4gKiBOYXV0b2JvdCBkb2VzIG5vdCBzdXBw b3J0IHJhbmdlcyB0aGF0IGNhbiBiZSBzZWFyY2hlZCBmb3IgZnJlZSBpcAo+ICDCoCBhZGRyZXNz ZXMsIHNvIHdlIG1hcCBhcyBtYW55IHBvb2wgcHJlZml4ZXMgdGhhdCB3ZSBzZWFyY2ggdW50aWwg d2UKPiAgwqAgaGF2ZSBzZWFyY2hlZCB0aGUgZW50aXJlIHJhbmdlIGZvciBmcmVlIGlwIGFkZHJl c3Nlcwo+ICogTmF1dG9ib3QgaGFzIHRoZSBwb3NzaWJpbGl0eSB0byBtYXAgRE5TIG5hbWVzIHRv IElQIGFkZHJlc3Nlcy4KPiAgwqAgSG93ZXZlciwgc2luY2Ugd2UgaGF2ZSBubyBzdGFuZGFyZGl6 ZWQgd2F5IHRvIHNldCB0aGUgRE5TIG5hbWVzIGluCj4gIMKgIFByb3htb3ggVkUgKGZvciBjb250 YWluZXJzIHRoZSBjb250YWluZXIgbmFtZSBpbiBQcm94bW94IFZFIGlzIHNldCBhcwo+ICDCoCB0 aGUgaG9zdCBuYW1lIGluIHRoZSBjb250YWluZXIsIGJ1dCB0aGlzIGlzIG5vdCBwb3NzaWJsZSBm b3IgVk1zKSB3ZQo+ICDCoCByZWZyYWluIGZyb20gc2V0dGluZyBhIEROUyBuYW1lIGF0IHRoZSBt b21lbnQuCj4gKiBOYXV0b2JvdCBkb2VzIG5vdCBoYXZlIGEgZmllbGQgaW4gSVAgYWRkcmVzcyBv YmplY3RzIGZvciBhIE1BQyBhZGRyZXNzCj4gIMKgIG9yIHRvIG1hcmsgdGhlbSBhcyBnYXRld2F5 LCBzbyB3ZSB3cml0ZSB0aGlzIGluIHRoZSBjb21tZW50Lgo+Cj4gWzBdIGh0dHBzOi8vbmV0d29y a3RvY29kZS5jb20vbmF1dG9ib3QvCj4KPiBDby1hdXRob3JlZC1ieTogbG91IGxlY3JpdmFpbiA8 bG91LmxlY3JpdmFpbkB3ZHouZGU+Cj4gU2lnbmVkLW9mZi1ieTogSGFubmVzIER1ZXJyIDxoLmR1 ZXJyQHByb3htb3guY29tPgo+IC0tLQo+Cj4gTm90ZXM6Cj4gIMKgwqDCoCBDaGFuZ2VzIGZyb20g djMgLT4gdjQ6Cj4gIMKgwqDCoCAqIE1lcmdlIHRoZSBjaGVjayBmb3IgZW1wdHkgcHJlZml4ZXMv c3VibmV0cyBpbnRvIHRoaXMgY29tbWl0Cj4gIMKgwqDCoCAqIENyZWF0ZSBuYXV0b2JvdF9hcGlf cmVxdWVzdCB0byB1bmlmeSBBUEkgY2FsbHMKPiAgwqDCoMKgICogYWRkIHVwZGF0ZV9zdWJuZXQg ZnVuY3Rpb24KPiAgwqDCoMKgICogZml4IGFkZF9yYW5nZV9uZXh0X2ZyZWVpcAo+ICDCoMKgwqAg KiBmaXggYW5kIHVuaWZ5IGVycm9yIGhhbmRsaW5nCj4gIMKgwqDCoCAqIEZpeCBwZXJsIHN0eWxl Cj4KPiAgwqBzcmMvUFZFL0FQSTIvTmV0d29yay9TRE4vSXBhbXMucG3CoMKgwqDCoMKgwqDCoMKg wqDCoCB8wqDCoCAxICsKPiAgwqBzcmMvUFZFL05ldHdvcmsvU0ROL0lwYW1zLnBtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMgKwo+ICDCoHNyYy9QVkUvTmV0d29yay9TRE4v SXBhbXMvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArLQo+ICDCoHNyYy9QVkUv TmV0d29yay9TRE4vSXBhbXMvTmF1dG9ib3RQbHVnaW4ucG0gfCA1MTMgKysrKysrKysrKysrKysr KysrKysKPiAgwqA0IGZpbGVzIGNoYW5nZWQsIDUxOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCj4gIMKgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9QVkUvTmV0d29yay9TRE4vSXBhbXMvTmF1 dG9ib3RQbHVnaW4ucG0KPgo+IGRpZmYgLS1naXQgYS9zcmMvUFZFL0FQSTIvTmV0d29yay9TRE4v SXBhbXMucG0gYi9zcmMvUFZFL0FQSTIvTmV0d29yay9TRE4vSXBhbXMucG0KPiBpbmRleCAyN2Vh ZDAyLi44MDc0NTEyIDEwMDY0NAo+IC0tLSBhL3NyYy9QVkUvQVBJMi9OZXR3b3JrL1NETi9JcGFt cy5wbQo+ICsrKyBiL3NyYy9QVkUvQVBJMi9OZXR3b3JrL1NETi9JcGFtcy5wbQo+IEBAIC0xMiw2 ICsxMiw3IEBAIHVzZSBQVkU6Ok5ldHdvcms6OlNETjo6SXBhbXM6OlBsdWdpbjsKPiAgwqB1c2Ug UFZFOjpOZXR3b3JrOjpTRE46OklwYW1zOjpQVkVQbHVnaW47Cj4gIMKgdXNlIFBWRTo6TmV0d29y azo6U0ROOjpJcGFtczo6UGhwSXBhbVBsdWdpbjsKPiAgwqB1c2UgUFZFOjpOZXR3b3JrOjpTRE46 OklwYW1zOjpOZXRib3hQbHVnaW47Cj4gK3VzZSBQVkU6Ok5ldHdvcms6OlNETjo6SXBhbXM6Ok5h dXRvYm90UGx1Z2luOwo+ICDCoHVzZSBQVkU6Ok5ldHdvcms6OlNETjo6RGhjcDsKPiAgwqB1c2Ug UFZFOjpOZXR3b3JrOjpTRE46OlZuZXRzOwo+ICDCoHVzZSBQVkU6Ok5ldHdvcms6OlNETjo6Wm9u ZXM7Cj4gZGlmZiAtLWdpdCBhL3NyYy9QVkUvTmV0d29yay9TRE4vSXBhbXMucG0gYi9zcmMvUFZF L05ldHdvcmsvU0ROL0lwYW1zLnBtCj4gaW5kZXggYzY4OWI4Zi4uMmVjYjc1ZSAxMDA2NDQKPiAt LS0gYS9zcmMvUFZFL05ldHdvcmsvU0ROL0lwYW1zLnBtCj4gKysrIGIvc3JjL1BWRS9OZXR3b3Jr L1NETi9JcGFtcy5wbQo+IEBAIC0xMiwxMSArMTIsMTQgQEAgdXNlIFBWRTo6TmV0d29yazsKPiAg IAo+ICDCoHVzZSBQVkU6Ok5ldHdvcms6OlNETjo6SXBhbXM6OlBWRVBsdWdpbjsKPiAgwqB1c2Ug UFZFOjpOZXR3b3JrOjpTRE46OklwYW1zOjpOZXRib3hQbHVnaW47Cj4gK3VzZSBQVkU6Ok5ldHdv cms6OlNETjo6SXBhbXM6Ok5hdXRvYm90UGx1Z2luOwo+ICDCoHVzZSBQVkU6Ok5ldHdvcms6OlNE Tjo6SXBhbXM6OlBocElwYW1QbHVnaW47Cj4gIMKgdXNlIFBWRTo6TmV0d29yazo6U0ROOjpJcGFt czo6UGx1Z2luOwo+ICAgCj4gKwo+ICDCoFBWRTo6TmV0d29yazo6U0ROOjpJcGFtczo6UFZFUGx1 Z2luLT5yZWdpc3RlcigpOwo+ICDCoFBWRTo6TmV0d29yazo6U0ROOjpJcGFtczo6TmV0Ym94UGx1 Z2luLT5yZWdpc3RlcigpOwo+ICtQVkU6Ok5ldHdvcms6OlNETjo6SXBhbXM6Ok5hdXRvYm90UGx1 Z2luLT5yZWdpc3RlcigpOwo+ICDCoFBWRTo6TmV0d29yazo6U0ROOjpJcGFtczo6UGhwSXBhbVBs dWdpbi0+cmVnaXN0ZXIoKTsKPiAgwqBQVkU6Ok5ldHdvcms6OlNETjo6SXBhbXM6OlBsdWdpbi0+ aW5pdCgpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL3NyYy9QVkUvTmV0d29yay9TRE4vSXBhbXMvTWFr ZWZpbGUgYi9zcmMvUFZFL05ldHdvcmsvU0ROL0lwYW1zL01ha2VmaWxlCj4gaW5kZXggNGU3ZDY1 Zi4uNzVlNWI5YSAxMDA2NDQKPiAtLS0gYS9zcmMvUFZFL05ldHdvcmsvU0ROL0lwYW1zL01ha2Vm aWxlCj4gKysrIGIvc3JjL1BWRS9OZXR3b3JrL1NETi9JcGFtcy9NYWtlZmlsZQo+IEBAIC0xLDQg KzEsNCBAQAo+IC1TT1VSQ0VTPVBsdWdpbi5wbSBQaHBJcGFtUGx1Z2luLnBtIE5ldGJveFBsdWdp bi5wbSBQVkVQbHVnaW4ucG0KPiArU09VUkNFUz1QbHVnaW4ucG0gUGhwSXBhbVBsdWdpbi5wbSBO ZXRib3hQbHVnaW4ucG0gUFZFUGx1Z2luLnBtIE5hdXRvYm90UGx1Z2luLnBtCj4gICAKPiAgIAo+ ICDCoFBFUkw1RElSPSR7REVTVERJUn0vdXNyL3NoYXJlL3Blcmw1Cj4gZGlmZiAtLWdpdCBhL3Ny Yy9QVkUvTmV0d29yay9TRE4vSXBhbXMvTmF1dG9ib3RQbHVnaW4ucG0gYi9zcmMvUFZFL05ldHdv cmsvU0ROL0lwYW1zL05hdXRvYm90UGx1Z2luLnBtCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi4yODk3MDI1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3NyYy9QVkUvTmV0 d29yay9TRE4vSXBhbXMvTmF1dG9ib3RQbHVnaW4ucG0KPiBAQCAtMCwwICsxLDUxMyBAQAo+ICtw YWNrYWdlIFBWRTo6TmV0d29yazo6U0ROOjpJcGFtczo6TmF1dG9ib3RQbHVnaW47Cj4gKwo+ICt1 c2Ugc3RyaWN0Owo+ICt1c2Ugd2FybmluZ3M7Cj4gK3VzZSBQVkU6OklOb3RpZnk7Cj4gK3VzZSBQ VkU6OkNsdXN0ZXI7Cj4gK3VzZSBQVkU6OlRvb2xzOwo+ICt1c2UgTmV0QWRkcjo6SVA7Cj4gK3Vz ZSBOZXQ6OlN1Ym5ldCBxdyhzdWJuZXRfbWF0Y2hlcik7Cj4gKwo+ICt1c2UgYmFzZSgnUFZFOjpO ZXR3b3JrOjpTRE46OklwYW1zOjpQbHVnaW4nKTsKPiArCj4gK3N1YiB0eXBlIHsKPiArwqDCoMKg IHJldHVybiAnbmF1dG9ib3QnOwo+ICt9Cj4gKwo+ICtzdWIgcHJvcGVydGllcyB7Cj4gK8KgwqDC oCByZXR1cm4gewo+ICvCoMKgwqDCoMKgwqAgbmFtZXNwYWNlID0+IHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqAgdHlwZSA9PiAnc3RyaW5nJywKPiArwqDCoMKgwqDCoMKgIH0sCj4gK8KgwqDCoCB9 Owo+ICt9Cj4gKwo+ICtzdWIgb3B0aW9ucyB7Cj4gK8KgwqDCoCByZXR1cm4gewo+ICvCoMKgwqDC oMKgwqAgdXJsID0+IHsgb3B0aW9uYWwgPT4gMCB9LAo+ICvCoMKgwqDCoMKgwqAgdG9rZW4gPT4g eyBvcHRpb25hbCA9PiAwIH0sCj4gK8KgwqDCoMKgwqDCoCBuYW1lc3BhY2UgPT4geyBvcHRpb25h bCA9PiAwIH0sCj4gK8KgwqDCoMKgwqDCoCBmaW5nZXJwcmludCA9PiB7IG9wdGlvbmFsID0+IDEg fSwKPiArwqDCoMKgIH07Cj4gK30KPiArCj4gK3N1YiBkZWZhdWx0X2lwX3N0YXR1cyB7Cj4gK8Kg wqDCoCByZXR1cm4gJ0FjdGl2ZSc7Cj4gK30KPiArCj4gK3N1YiBuYXV0b2JvdF9hcGlfcmVxdWVz dCB7Cj4gK8KgwqDCoCBteSAoJGNvbmZpZywgJG1ldGhvZCwgJHBhdGgsICRwYXJhbXMpID0gQF87 Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIFBWRTo6TmV0d29yazo6U0ROOjphcGlfcmVxdWVzdCgKPiAr wqDCoMKgwqDCoMKgICRtZXRob2QsCj4gK8KgwqDCoMKgwqDCoCAiJGNvbmZpZy0+e3VybH0ke3Bh dGh9IiwKPiArwqDCoMKgwqDCoMKgIFsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgJ0NvbnRlbnQt VHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCAnQXV0aG9yaXphdGlvbicgPT4gInRva2VuICRjb25maWctPnt0b2tlbn0iLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAnQWNjZXB0JyA9PiAiYXBwbGljYXRpb24vanNvbiIKPiAr wqDCoMKgwqDCoMKgIF0sCj4gK8KgwqDCoMKgwqDCoCAkcGFyYW1zLAo+ICvCoMKgwqDCoMKgwqAg JGNvbmZpZy0+e2ZpbmdlcnByaW50fSwKPiArwqDCoMKgICk7Cj4gK30KPiArCj4gK3N1YiBhZGRf c3VibmV0IHsKPiArwqDCoMKgIG15ICgkY2xhc3MsICRjb25maWcsIHVuZGVmLCAkc3VibmV0LCAk bm9lcnIpID0gQF87Cj4gKwo+ICvCoMKgwqAgbXkgJGNpZHIgPSAkc3VibmV0LT57Y2lkcn07Cj4g K8KgwqDCoCBteSAkbmFtZXNwYWNlID0gJGNvbmZpZy0+e25hbWVzcGFjZX07Cj4gKwo+ICvCoMKg wqAgbXkgJGludGVybmFsaWQgPSBnZXRfcHJlZml4X2lkKCRjb25maWcsICRjaWRyLCAkbm9lcnIp Owo+ICvCoMKgwqAgaWYgKCRpbnRlcm5hbGlkKSB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1cm4gaWYg JG5vZXJyOwo+ICvCoMKgwqDCoMKgwqAgZGllICJjb3VsZCBub3QgYWRkIHRoZSBzdWJuZXQgJHN1 Ym5ldCBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzIGluIG5hdXRvYm90XG4iCj4gK8KgwqDCoCB9 Cj4gKwo+ICvCoMKgwqAgbXkgJHBhcmFtcyA9IHsKPiArwqDCoMKgwqDCoMKgIHByZWZpeCA9PiAk Y2lkciwKPiArwqDCoMKgwqDCoMKgIG5hbWVzcGFjZSA9PiAkbmFtZXNwYWNlLAo+ICvCoMKgwqDC oMKgwqAgc3RhdHVzID0+IGRlZmF1bHRfaXBfc3RhdHVzKCkKPiArwqDCoMKgIH07Cj4gKwo+ICvC oMKgwqAgZXZhbCB7Cj4gK8KgwqDCoMKgwqDCoCBuYXV0b2JvdF9hcGlfcmVxdWVzdCgkY29uZmln LCAiUE9TVCIsICIvaXBhbS9wcmVmaXhlcy8iLCAkcGFyYW1zKTsKPiArwqDCoMKgIH07Cj4gK8Kg wqDCoCBpZiAoJEApIHsKPiArwqDCoMKgwqDCoMKgIHJldHVybiBpZiAkbm9lcnI7Cj4gK8KgwqDC oMKgwqDCoCBkaWUgImVycm9yIGFkZGluZyB0aGUgc3VibmV0ICRzdWJuZXQgdG8gbmF1dG9ib3Qg JEBcbiI7Cj4gK8KgwqDCoCB9Cj4gK30KPiArCj4gK3N1YiB1cGRhdGVfc3VibmV0IHsKPiArwqDC oMKgIG15ICgkY2xhc3MsICRwbHVnaW5fY29uZmlnLCAkc3VibmV0aWQsICRzdWJuZXQsICRvbGRf c3VibmV0LCAkbm9lcnIpID0gQF87Cj4gK8KgwqDCoCAjIGRoY3AgcmFuZ2VzIGFyZSBub3Qgc3Vw cG9ydGVkIGluIG5hdXRvYm90IHNvIHdlIGRvbid0IGhhdmUgdG8gdXBkYXRlIHRoZW0KPiArfQo+ ICsKPiArc3ViIGRlbF9zdWJuZXQgewo+ICvCoMKgwqAgbXkgKCRjbGFzcywgJGNvbmZpZywgJHN1 Ym5ldGlkLCAkc3VibmV0LCAkbm9lcnIpID0gQF87Cj4gKwo+ICvCoMKgwqAgbXkgJGNpZHIgPSAk c3VibmV0LT57Y2lkcn07Cj4gKwo+ICvCoMKgwqAgbXkgJGludGVybmFsaWQgPSBnZXRfcHJlZml4 X2lkKCRjb25maWcsICRjaWRyLCAkbm9lcnIpOwo+ICvCoMKgwqAgaWYgKCEkaW50ZXJuYWxpZCkg ewo+ICvCoMKgwqDCoMKgwqAgd2FybigiY291bGQgbm90IGZpbmQgZGVsZXRlIHRoZSBzdWJuZXQg JGNpZHIgYmVjYXVzZSBpdCBkb2VzIG5vdCBleGlzdCBpbiBuYXV0b2JvdFxuIik7Cj4gK8KgwqDC oMKgwqDCoCByZXR1cm47Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgaWYgKCFzdWJuZXRfaXNf ZGVsZXRhYmxlKCRjb25maWcsICRzdWJuZXRpZCwgJHN1Ym5ldCwgJGludGVybmFsaWQsICRub2Vy cikpIHsKPiArwqDCoMKgwqDCoMKgIHJldHVybiBpZiAkbm9lcnI7Cj4gK8KgwqDCoMKgwqDCoCBk aWUgImNvdWxkIG5vdCBkZWxldGUgdGhlIHN1Ym5ldCAkY2lkciwgaXQgc3RpbGwgY29udGFpbnMg aXAgYWRkcmVzc2VzIVxuIjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCAjIGRlbGV0ZSBhc3Nv Y2lhdGVkIGdhdGV3YXkgSVAgYWRkcmVzc2VzCj4gK8KgwqDCoCAkY2xhc3MtPmVtcHR5X3N1Ym5l dCggJGNvbmZpZywgJHN1Ym5ldGlkLCAkc3VibmV0LCAkaW50ZXJuYWxpZCwgJG5vZXJyKTsKPiAr Cj4gK8KgwqDCoCBldmFsIHsKPiArwqDCoMKgwqDCoMKgIG5hdXRvYm90X2FwaV9yZXF1ZXN0KCRj b25maWcsICJERUxFVEUiLCAiL2lwYW0vcHJlZml4ZXMvJGludGVybmFsaWQvIik7Cj4gK8KgwqDC oCB9Owo+ICvCoMKgwqAgaWYgKCRAKSB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1cm4gaWYgJG5vZXJy Owo+ICvCoMKgwqDCoMKgwqAgZGllICJlcnJvciBkZWxldGluZyBzdWJuZXQgZnJvbSBuYXV0b2Jv dDogJEBcbiI7Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCByZXR1cm4gMTsKPiArfQo+ICsKPiArc3Vi IGFkZF9pcCB7Cj4gK8KgwqDCoCBteSAoJGNsYXNzLCAkY29uZmlnLCB1bmRlZiwgJHN1Ym5ldCwg JGlwLCAkaG9zdG5hbWUsICRtYWMsIHVuZGVmLAo+ICvCoMKgwqDCoMKgwqAgJGlzX2dhdGV3YXks ICRub2VycikgPSBAXzsKPiArCj4gK8KgwqDCoCBteSAkbWFzayA9ICRzdWJuZXQtPnttYXNrfTsK PiArwqDCoMKgIG15ICRuYW1lc3BhY2UgPSAkY29uZmlnLT57bmFtZXNwYWNlfTsKPiArCj4gK8Kg wqDCoCBteSAkZGVzY3JpcHRpb24gPSB1bmRlZjsKPiArwqDCoMKgIGlmICgkaXNfZ2F0ZXdheSkg ewo+ICvCoMKgwqDCoMKgwqAgJGRlc2NyaXB0aW9uID0gJ2dhdGV3YXknOwo+ICvCoMKgwqAgfSBl bHNpZiAoJG1hYykgewo+ICvCoMKgwqDCoMKgwqAgJGRlc2NyaXB0aW9uID0gIm1hYzokbWFjIjsK PiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBteSAkcGFyYW1zID0gewo+ICvCoMKgwqDCoMKgwqAg YWRkcmVzcyA9PiAiJGlwLyRtYXNrIiwKPiArwqDCoMKgwqDCoMKgIHR5cGUgPT4gImRoY3AiLAo+ ICvCoMKgwqDCoMKgwqAgZGVzY3JpcHRpb24gPT4gJGRlc2NyaXB0aW9uLAo+ICvCoMKgwqDCoMKg wqAgbmFtZXNwYWNlID0+ICRuYW1lc3BhY2UsCj4gK8KgwqDCoMKgwqDCoCBzdGF0dXMgPT4gZGVm YXVsdF9pcF9zdGF0dXMoKQo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBldmFsIHsKPiArwqDC oMKgwqDCoMKgIG5hdXRvYm90X2FwaV9yZXF1ZXN0KCRjb25maWcsICJQT1NUIiwgIi9pcGFtL2lw LWFkZHJlc3Nlcy8iLCAkcGFyYW1zKTsKPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgaWYgKCRA KSB7Cj4gK8KgwqDCoMKgwqDCoCBpZiAoJGlzX2dhdGV3YXkpIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgZGllICJlcnJvciBhZGQgc3VibmV0IGlwIHRvIGlwYW06IGlwICRpcCBhbHJlYWR5IGV4 aXN0OiAkQCIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAhaXNfaXBfZ2F0ZXdh eSgkY29uZmlnLCAkaXAsICRub2Vycik7Cj4gK8KgwqDCoMKgwqDCoCB9IGVsc2lmICghJG5vZXJy KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGRpZSAiZXJyb3IgYWRkIHN1Ym5ldCBpcCB0byBp cGFtOiBpcCBhbHJlYWR5IGV4aXN0OiAkQCI7Cj4gK8KgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9 Cj4gK30KPiArCj4gK3N1YiBhZGRfbmV4dF9mcmVlaXAgewo+ICvCoMKgwqAgbXkgKCRjbGFzcywg JGNvbmZpZywgdW5kZWYsICRzdWJuZXQsICRob3N0bmFtZSwgJG1hYywgdW5kZWYsICRub2Vycikg PSBAXzsKPiArCj4gK8KgwqDCoCBteSAkY2lkciA9ICRzdWJuZXQtPntjaWRyfTsKPiArwqDCoMKg IG15ICRuYW1lc3BhY2UgPSAkY29uZmlnLT57bmFtZXNwYWNlfTsKPiArCj4gK8KgwqDCoCBteSAk aW50ZXJuYWxpZCA9IGdldF9wcmVmaXhfaWQoJGNvbmZpZywgJGNpZHIsICRub2Vycik7Cj4gK8Kg wqDCoCBpZiAoIWRlZmluZWQoJGludGVybmFsaWQpKSB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1cm4g aWYgJG5vZXJyOwo+ICvCoMKgwqDCoMKgwqAgZGllICJjb3VsZCBub3QgZmluZCBwcmVmaXggJGNp ZHIgaW4gbmF1dG9ib3RcbiI7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgbXkgJGRlc2NyaXB0 aW9uID0gdW5kZWY7Cj4gK8KgwqDCoCAkZGVzY3JpcHRpb24gPSAibWFjOiRtYWMiIGlmICRtYWM7 Cj4gKwo+ICvCoMKgwqAgbXkgJHBhcmFtcyA9IHsKPiArwqDCoMKgwqDCoMKgIHR5cGUgPT4gImRo Y3AiLAo+ICvCoMKgwqDCoMKgwqAgZGVzY3JpcHRpb24gPT4gJGRlc2NyaXB0aW9uLAo+ICvCoMKg wqDCoMKgwqAgbmFtZXNwYWNlID0+ICRuYW1lc3BhY2UsCj4gK8KgwqDCoMKgwqDCoCBzdGF0dXMg PT4gZGVmYXVsdF9pcF9zdGF0dXMoKQo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBteSAkcmVz cG9uc2UgPSBldmFsIHsKPiArwqDCoMKgwqDCoMKgIHJldHVybiBuYXV0b2JvdF9hcGlfcmVxdWVz dCgKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgJGNvbmZpZywKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqAgIlBPU1QiLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAiL2lwYW0vcHJlZml4ZXMvJGludGVy bmFsaWQvYXZhaWxhYmxlLWlwcy8iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAkcGFyYW1zCj4g K8KgwqDCoMKgwqDCoCApOwo+ICvCoMKgwqAgfTsKPiArwqDCoMKgIGlmICgkQCB8fCAhJHJlc3Bv bnNlKSB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1cm4gaWYgJG5vZXJyOwo+ICvCoMKgwqDCoMKgwqAg ZGllICJjb3VsZCBub3QgYWxsb2NhdGUgaXAgaW4gc3VibmV0ICRjaWRyOiAkQFxuIjsKPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCBteSAkaXAgPSBOZXRBZGRyOjpJUC0+bmV3KCRyZXNwb25zZS0+ e2FkZHJlc3N9KTsKPiArCj4gK8KgwqDCoCByZXR1cm4gJGlwLT5hZGRyOwo+ICt9Cj4gKwo+ICtz dWIgYWRkX3JhbmdlX25leHRfZnJlZWlwIHsKPiArwqDCoMKgIG15ICgkY2xhc3MsICRjb25maWcs ICRzdWJuZXQsICRyYW5nZSwgJGRhdGEsICRub2VycikgPSBAXzsKPiArCj4gK8KgwqDCoCBteSAk Y2lkciA9IE5ldEFkZHI6OklQLT5uZXcoJHN1Ym5ldC0+e2NpZHJ9KTsKPiArwqDCoMKgIG15ICRu YW1lc3BhY2UgPSAkY29uZmlnLT57bmFtZXNwYWNlfTsKPiArCj4gK8KgwqDCoCAjIE5hdXRvYm90 IGRvZXMgbm90IHN1cHBvcnQgSVAgcmFuZ2VzIG9ubHkgcHJlZml4ZXMuCj4gK8KgwqDCoCAjIFdl IHRoZXJlZm9yZSBkaXZpZGUgdGhlIHJhbmdlIGludG8gc21hbGxlciBwb29sLXByZWZpeGVzLAo+ ICvCoMKgwqAgIyBlYWNoIGNvbnRhaW5pbmcgMjU2IGFkZHJlc3NlcywgYW5kIHNlYXJjaCBmb3Ig YXZhaWxhYmxlIElQcyBpbiB0aGVtCj4gK8KgwqDCoCBteSAkcHJlZml4X3NpemUgPSAkY2lkci0+ dmVyc2lvbiA9PSA0ID8gMjQgOiAxMjA7Cj4gK8KgwqDCoCBteSAkaW5jcmVtZW50ID0gMjU2Owo+ ICvCoMKgwqAgbXkgJGZvdW5kX2lwID0gdW5kZWY7Cj4gKwo+ICvCoMKgwqAgbXkgJHN0YXJ0X3Jh bmdlID0gTmV0QWRkcjo6SVAtPm5ldygkcmFuZ2UtPnsnc3RhcnQtYWRkcmVzcyd9LCAkcHJlZml4 X3NpemUpOwo+ICvCoMKgwqAgbXkgJGVuZF9yYW5nZSA9IE5ldEFkZHI6OklQLT5uZXcoJHJhbmdl LT57J2VuZC1hZGRyZXNzJ30sICRwcmVmaXhfc2l6ZSk7Cj4gK8KgwqDCoCBteSAkbWF0Y2hlciA9 IHN1Ym5ldF9tYXRjaGVyKCRlbmRfcmFuZ2UtPmNpZHIpOwo+ICvCoMKgwqAgbXkgJGN1cnJlbnRf aXAgPSAkc3RhcnRfcmFuZ2U7Cj4gKwo+ICvCoMKgwqAgd2hpbGUgKDEpIHsKPiArwqDCoMKgwqDC oMKgIG15ICRjdXJyZW50X2NpZHIgPSAkY3VycmVudF9pcC0+YWRkciAuICIvJHByZWZpeF9zaXpl IjsKPiArCj4gK8KgwqDCoMKgwqDCoCBteSAkcGFyYW1zID0gewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCBwcmVmaXggPT4gJGN1cnJlbnRfY2lkciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmFt ZXNwYWNlID0+ICRuYW1lc3BhY2UsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHN0YXR1cyA9PiBk ZWZhdWx0X2lwX3N0YXR1cygpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCB0eXBlID0+ICJwb29s Igo+ICvCoMKgwqDCoMKgwqAgfTsKPiArCj4gK8KgwqDCoMKgwqDCoCAjIGNyZWF0ZSB0ZW1wb3Jh cnkgcG9vbCBwcmVmaXgKPiArwqDCoMKgwqDCoMKgIG15ICR0ZW1wX3ByZWZpeCA9IGV2YWwgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gbmF1dG9ib3RfYXBpX3JlcXVlc3QoJGNvbmZp ZywgIlBPU1QiLCAiL2lwYW0vcHJlZml4ZXMvIiwgJHBhcmFtcyk7Cj4gK8KgwqDCoMKgwqDCoCB9 Owo+ICsKPiArwqDCoMKgwqDCoMKgICMgc2tpcCBpZiBpdCBpcyBub3QgcG9zc2libGUgdG8gY3Jl YXRlIGl0Cj4gK8KgwqDCoMKgwqDCoCBuZXh0IGlmICRAOwo+ICsKPiArwqDCoMKgwqDCoMKgIG15 ICR0ZW1wX3ByZWZpeF9pZCA9ICR0ZW1wX3ByZWZpeC0+e2lkfTsKPiArCj4gK8KgwqDCoMKgwqDC oCAjIEZldGNoIGF2YWlsYWJsZSBJUHMgZnJvbSB0aGUgdGVtcG9yYXJ5IHBvb2wgYW5kIGZpbmQg YSBtYXRjaGluZyBJUAo+ICvCoMKgwqDCoMKgwqAgbXkgJHJlc3VsdCA9IGV2YWwgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gbmF1dG9ib3RfYXBpX3JlcXVlc3QoCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJGNvbmZpZywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiR0VUIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiL2lwYW0vcHJlZml4 ZXMvJHRlbXBfcHJlZml4X2lkL2F2YWlsYWJsZS1pcHMvP2xpbWl0PSRpbmNyZW1lbnQiCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgICk7Cj4gK8KgwqDCoMKgwqDCoCB9Owo+ICsKPiArwqDCoMKgwqDC oMKgICMgc2VhcmNoIGxpc3QgZm9yIElQcyBpbiBhY3R1YWwgcmFuZ2UKPiArwqDCoMKgwqDCoMKg IGlmICghJEApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yZWFjaCBteSAkZW50cnkgKEAk cmVzdWx0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXkgJGlwID0gTmV0QWRk cjo6SVAtPm5ldygkZW50cnktPnthZGRyZXNzfSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIyBjb21wYXJpc29uIGlzIG9ubHkgcG9zc2libGUgYmVjYXVzZSB0aGV5IGFyZSBpbiB0 aGUgc2FtZSBzdWJuZXQKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoJHN0YXJ0 X3JhbmdlIDw9ICRpcCAmJiAkaXAgPD0gJGVuZF9yYW5nZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJGZvdW5kX2lwID0gJGlwLT5hZGRyOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGFzdDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgIH0KPiAr Cj4gK8KgwqDCoMKgwqDCoCAjIERlbGV0ZSB0ZW1wb3JhcnkgcHJlZml4IHBvb2wKPiArwqDCoMKg wqDCoMKgIGV2YWwgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYXV0b2JvdF9hcGlfcmVxdWVz dCgkY29uZmlnLCAiREVMRVRFIiwgIi9pcGFtL3ByZWZpeGVzLyR0ZW1wX3ByZWZpeF9pZC8iKTsK PiArwqDCoMKgwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqDCoMKgwqAgbGFzdCBpZiAkZm91bmRfaXA7 Cj4gKwo+ICvCoMKgwqDCoMKgwqAgIyB3ZSBzZWFyY2hlZCB0aGUgbGFzdCBwb29sIHByZWZpeAo+ ICvCoMKgwqDCoMKgwqAgbGFzdCBpZiAkbWF0Y2hlci0+KCRjdXJyZW50X2lwLT5hZGRyKTsKPiAr Cj4gK8KgwqDCoMKgwqDCoCAkY3VycmVudF9pcCA9ICRjdXJyZW50X2lwLT5wbHVzKCRpbmNyZW1l bnQpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGlmICghJGZvdW5kX2lwKSB7Cj4gK8KgwqDC oMKgwqDCoCByZXR1cm4gaWYgJG5vZXJyOwo+ICvCoMKgwqDCoMKgwqAgZGllICJjb3VsZCBub3Qg YWxsb2NhdGUgaXAgaW4gdGhlIHJhbmdlICIgLiAkc3RhcnRfcmFuZ2UtPmFkZHIgLiAiIC0gIgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAuICRlbmRfcmFuZ2UtPmFkZHIgLiAiOiAkQFxuIjsKPiAr wqDCoMKgIH0KPiArCj4gK8KgwqDCoCAkY2xhc3MtPmFkZF9pcCgkY29uZmlnLCB1bmRlZiwgJHN1 Ym5ldCwgJGZvdW5kX2lwLCAkZGF0YS0+e2hvc3RuYW1lfSwgJGRhdGEtPnttYWN9LCB1bmRlZiwg MCwgJG5vZXJyKTsKPiArCj4gK8KgwqDCoCByZXR1cm4gJGZvdW5kX2lwOwo+ICt9Cj4gKwo+ICtz dWIgdXBkYXRlX2lwIHsKPiArwqDCoMKgIG15ICgkY2xhc3MsICRjb25maWcsICRzdWJuZXRpZCwg JHN1Ym5ldCwgJGlwLCAkaG9zdG5hbWUsICRtYWMsCj4gK8KgwqDCoMKgwqDCoCB1bmRlZiwgJGlz X2dhdGV3YXksICRub2VycikgPSBAXzsKPiArCj4gK8KgwqDCoCBteSAkbWFzayA9ICRzdWJuZXQt PnttYXNrfTsKPiArwqDCoMKgIG15ICRuYW1lc3BhY2UgPSAkY29uZmlnLT57bmFtZXNwYWNlfTsK PiArCj4gK8KgwqDCoCBteSAkZGVzY3JpcHRpb24gPSB1bmRlZjsKPiArwqDCoMKgIGlmICgkaXNf Z2F0ZXdheSkgewo+ICvCoMKgwqDCoMKgwqAgJGRlc2NyaXB0aW9uID0gJ2dhdGV3YXknCj4gK8Kg wqDCoCB9IGVsc2lmICgkbWFjKSB7Cj4gK8KgwqDCoMKgwqDCoCAkZGVzY3JpcHRpb24gPSAibWFj OiRtYWMiOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIG15ICRwYXJhbXMgPSB7Cj4gK8KgwqDC oMKgwqDCoCBhZGRyZXNzID0+ICIkaXAvJG1hc2siLAo+ICvCoMKgwqDCoMKgwqAgdHlwZSA9PiAi ZGhjcCIsCj4gK8KgwqDCoMKgwqDCoCBkZXNjcmlwdGlvbiA9PiAkZGVzY3JpcHRpb24sCj4gK8Kg wqDCoMKgwqDCoCBuYW1lc3BhY2UgPT4gJG5hbWVzcGFjZSwKPiArwqDCoMKgwqDCoMKgIHN0YXR1 cyA9PiBkZWZhdWx0X2lwX3N0YXR1cygpCj4gK8KgwqDCoCB9Owo+ICsKPiArwqDCoMKgIG15ICRp cF9pZCA9IGdldF9pcF9pZCgkY29uZmlnLCAkaXAsICRub2Vycik7Cj4gK8KgwqDCoCBpZiAoIWRl ZmluZWQoJGlwX2lkKSkgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGlmICRub2VycjsKPiArwqDC oMKgwqDCoMKgIGRpZSAiY291bGQgbm90IGZpbmQgdGhlIGlwICRpcCBpbiBuYXV0b2JvdFxuIjsK PiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBldmFsIHsKPiArwqDCoMKgwqDCoMKgIG5hdXRvYm90 X2FwaV9yZXF1ZXN0KCRjb25maWcsICJQQVRDSCIsICIvaXBhbS9pcC1hZGRyZXNzZXMvJGlwX2lk LyIsICRwYXJhbXMpOwo+ICvCoMKgwqAgfTsKPiArwqDCoMKgIGlmICgkQCkgewo+ICvCoMKgwqDC oMKgwqAgcmV0dXJuIGlmICRub2VycjsKPiArwqDCoMKgwqDCoMKgIGRpZSAiZXJyb3IgdXBkYXRp bmcgaXAgJGlwOiAkQCI7Cj4gK8KgwqDCoCB9Cj4gK30KPiArCj4gKwo+ICtzdWIgZGVsX2lwIHsK PiArwqDCoMKgIG15ICgkY2xhc3MsICRjb25maWcsIHVuZGVmLCB1bmRlZiwgJGlwLCAkbm9lcnIp ID0gQF87Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIGlmICEkaXA7Cj4gKwo+ICvCoMKgwqAgbXkgJGlw X2lkID0gZ2V0X2lwX2lkKCRjb25maWcsICRpcCwgJG5vZXJyKTsKPiArwqDCoMKgIGlmICghZGVm aW5lZCgkaXBfaWQpKSB7Cj4gK8KgwqDCoMKgwqDCoCB3YXJuKCJjb3VsZCBub3QgZmluZCB0aGUg aXAgJGlwIGluIG5hdXRvYm90XG4iKTsKPiArwqDCoMKgwqDCoMKgIHJldHVybjsKPiArwqDCoMKg IH0KPiArCj4gK8KgwqDCoCBldmFsIHsKPiArwqDCoMKgwqDCoMKgIG5hdXRvYm90X2FwaV9yZXF1 ZXN0KCRjb25maWcsICJERUxFVEUiLCAiL2lwYW0vaXAtYWRkcmVzc2VzLyRpcF9pZC8iKTsKPiAr wqDCoMKgIH07Cj4gK8KgwqDCoCBpZiAoJEApIHsKPiArwqDCoMKgwqDCoMKgIHJldHVybiBpZiAk bm9lcnI7Cj4gK8KgwqDCoMKgwqDCoCBkaWUgImVycm9yIGRlbGV0aW5nIGlwICRpcCA6ICRAXG4i Owo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldHVybiAxOwo+ICt9Cj4gKwo+ICtzdWIgZW1w dHlfc3VibmV0IHsKPiArwqDCoMKgIG15ICgkY2xhc3MsICRjb25maWcsICRzdWJuZXRpZCwgJHN1 Ym5ldCwgJHN1Ym5ldHV1aWQsICRub2VycikgPSBAXzsKPiArCj4gK8KgwqDCoCBteSAkbmFtZXNw YWNlID0gJGNvbmZpZy0+e25hbWVzcGFjZX07Cj4gKwo+ICvCoMKgwqAgbXkgJHJlc3BvbnNlID0g ZXZhbCB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1cm4gbmF1dG9ib3RfYXBpX3JlcXVlc3QoCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgICRjb25maWcsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICJHRVQi LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAiL2lwYW0vaXAtYWRkcmVzc2VzLz9uYW1lc3BhY2U9 JG5hbWVzcGFjZSZwYXJlbnQ9JHN1Ym5ldHV1aWQiCj4gK8KgwqDCoMKgwqDCoCApOwo+ICvCoMKg wqAgfTsKPiArwqDCoMKgIGlmICgkQCkgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGlmICRub2Vy cjsKPiArwqDCoMKgwqDCoMKgIGRpZSAiY291bGQgbm90IGZpbmQgdGhlIHN1Ym5ldCAkc3VibmV0 IGluIG5hdXRvYm90OiAkQFxuIjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBmb3IgbXkgJGlw IChAeyRyZXNwb25zZS0+e3Jlc3VsdHN9fSkgewo+ICvCoMKgwqDCoMKgwqAgZGVsX2lwKCRjbGFz cywgJGNvbmZpZywgdW5kZWYsIHVuZGVmLCAkaXAtPntob3N0fSwgJG5vZXJyKTsKPiArwqDCoMKg IH0KPiArCj4gK8KgwqDCoCByZXR1cm4gMTsKPiArfQo+ICsKPiArc3ViIHN1Ym5ldF9pc19kZWxl dGFibGUgewo+ICvCoMKgwqAgbXkgKCRjb25maWcsICRzdWJuZXRpZCwgJHN1Ym5ldCwgJHN1Ym5l dHV1aWQsICRub2VycikgPSBAXzsKPiArCj4gK8KgwqDCoCBteSAkbmFtZXNwYWNlID0gJGNvbmZp Zy0+e25hbWVzcGFjZX07Cj4gKwo+ICvCoMKgwqAgbXkgJHJlc3BvbnNlID0gZXZhbCB7Cj4gK8Kg wqDCoMKgwqDCoCByZXR1cm4gbmF1dG9ib3RfYXBpX3JlcXVlc3QoCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgICRjb25maWcsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICJHRVQiLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCAiL2lwYW0vaXAtYWRkcmVzc2VzLz9uYW1lc3BhY2U9JG5hbWVzcGFjZSZw YXJlbnQ9JHN1Ym5ldHV1aWQiCj4gK8KgwqDCoMKgwqDCoCApOwo+ICvCoMKgwqAgfTsKPiArwqDC oMKgIGlmICgkQCkgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGlmICRub2VycjsKPiArwqDCoMKg wqDCoMKgIGRpZSAiZXJyb3IgcXVlcnlpbmcgcHJlZml4ICRzdWJuZXQ6ICRAXG4iOwo+ICvCoMKg wqAgfQo+ICvCoMKgwqAgbXkgJG5faXBzID0gc2NhbGFyICRyZXNwb25zZS0+e3Jlc3VsdHN9LT5A KjsKPiArCj4gK8KgwqDCoCAjIGxlYXN0IGNvc3RseSBjaGVjayBvcGVyYXRpb24gMXN0Cj4gK8Kg wqDCoCByZXR1cm4gMSBpZiAoJG5faXBzID09IDApOwo+ICsKPiArwqDCoMKgIGZvciBteSAkaXAg KHZhbHVlcyAkcmVzcG9uc2UtPntyZXN1bHRzfS0+QCopIHsKPiArwqDCoMKgwqDCoMKgIGlmICgh aXNfaXBfZ2F0ZXdheSgkY29uZmlnLCAkaXAtPntob3N0fSwgJG5vZXJyKSkgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCAjIHNvbWUgcmVtYWluaW5nIElQIGlzIG5vdCBhIGdhdGV3YXkgc28gd2Ug Y2FuJ3QgZGVsZXRlIHRoZSBzdWJuZXQKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7 Cj4gK8KgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCAjYWxsIHJlbWFpbmluZyBJ UHMgYXJlIGdhdGV3YXlzCj4gK8KgwqDCoCByZXR1cm4gMTsKPiArfQo+ICsKPiArc3ViIHZlcmlm eV9hcGkgewo+ICvCoMKgwqAgbXkgKCRjbGFzcywgJGNvbmZpZykgPSBAXzsKPiArCj4gK8KgwqDC oCBteSAkbmFtZXNwYWNlID0gJGNvbmZpZy0+e25hbWVzcGFjZX07Cj4gKwo+ICvCoMKgwqAgIyBj aGVjayBpZiB0aGUgbmFtZXNwYWNlIGFuZCB0aGUgc3RhdHVzICJBY3RpdmUiIGV4aXN0Cj4gK8Kg wqDCoCBldmFsIHsKPiArwqDCoMKgwqDCoMKgIGdldF9uYW1lc3BhY2VfaWQoJGNvbmZpZywgJG5h bWVzcGFjZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gZGllICJuYW1lc3BhY2UgJG5hbWVz cGFjZSBkb2VzIG5vdCBleGlzdCI7Cj4gK8KgwqDCoMKgwqDCoCBnZXRfc3RhdHVzX2lkKCRjb25m aWcsIGRlZmF1bHRfaXBfc3RhdHVzKCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIGRpZSAi dGhlIHN0YXR1cyAiIC4gZGVmYXVsdF9pcF9zdGF0dXMoKSAuICIgZG9lcyBub3QgZXhpc3QiOwo+ ICvCoMKgwqAgfTsKPiArwqDCoMKgIGlmICgkQCkgewo+ICvCoMKgwqDCoMKgwqAgZGllICJjb3Vs ZCBub3QgdXNlIG5hdXRvYm90IGFwaTogJEBcbiI7Cj4gK8KgwqDCoCB9Cj4gK30KPiArCj4gK3N1 YiBnZXRfaXBzX2Zyb21fbWFjIHsKPiArwqDCoMKgIG15ICgkY2xhc3MsICRjb25maWcsICRtYWMs ICR6b25lKSA9IEBfOwo+ICsKPiArwqDCoMKgIG15ICRpcDQgPSB1bmRlZjsKPiArwqDCoMKgIG15 ICRpcDYgPSB1bmRlZjsKPiArCj4gK8KgwqDCoCBteSAkZGF0YSA9IGV2YWwgewo+ICvCoMKgwqDC oMKgwqAgbmF1dG9ib3RfYXBpX3JlcXVlc3QoJGNvbmZpZywgIkdFVCIsICIvaXBhbS9pcC1hZGRy ZXNzZXMvP3E9JG1hYyIpOwo+ICvCoMKgwqAgfTsKPiArwqDCoMKgIGlmICgkQCkgewo+ICvCoMKg wqDCoMKgwqAgZGllICJjb3VsZCBub3QgcXVlcnkgaXAgYWRkcmVzcyBlbnRyeSBmb3IgbWFjICRt YWM6ICRAIjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBmb3IgbXkgJGlwIChAeyRkYXRhLT57 cmVzdWx0c319KSB7Cj4gK8KgwqDCoMKgwqDCoCBpZiAoJGlwLT57aXBfdmVyc2lvbn0gPT0gNCAm JiAhJGlwNCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAoJGlwNCwgdW5kZWYpID0gc3BsaXQo L1wvLywgJGlwLT57YWRkcmVzc30pOwo+ICvCoMKgwqDCoMKgwqAgfQo+ICsKPiArwqDCoMKgwqDC oMKgIGlmICgkaXAtPntpcF92ZXJzaW9ufSA9PSA2ICYmICEkaXA2KSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgICgkaXA2LCB1bmRlZikgPSBzcGxpdCgvXC8vLCAkaXAtPnthZGRyZXNzfSk7Cj4g K8KgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuICgkaXA0LCAk aXA2KTsKPiArfQo+ICsKPiArc3ViIG9uX3VwZGF0ZV9ob29rIHsKPiArwqDCoMKgIG15ICgkY2xh c3MsICRjb25maWcpID0gQF87Cj4gKwo+ICvCoMKgwqAgUFZFOjpOZXR3b3JrOjpTRE46OklwYW1z OjpOYXV0b2JvdFBsdWdpbjo6dmVyaWZ5X2FwaSgkY2xhc3MsICRjb25maWcpOwo+ICt9Cj4gKwo+ ICtzdWIgZ2V0X2lwX2lkIHsKPiArwqDCoMKgIG15ICgkY29uZmlnLCAkaXAsICRub2VycikgPSBA XzsKPiArCj4gK8KgwqDCoCBteSAkcmVzdWx0ID0gZXZhbCB7Cj4gK8KgwqDCoMKgwqDCoCByZXR1 cm4gbmF1dG9ib3RfYXBpX3JlcXVlc3QoJGNvbmZpZywgIkdFVCIsICIvaXBhbS9pcC1hZGRyZXNz ZXMvP2FkZHJlc3M9JGlwIik7Cj4gK8KgwqDCoCB9Owo+ICvCoMKgwqAgaWYgKCRAKSB7Cj4gK8Kg wqDCoMKgwqDCoCByZXR1cm4gaWYgJG5vZXJyOwo+ICvCoMKgwqDCoMKgwqAgZGllICJlcnJvciB3 aGlsZSBxdWVyeWluZyBmb3IgaXAgJGlwIGlkOiAkQFxuIjsKPiArwqDCoMKgIH0KPiArCj4gK8Kg wqDCoCBteSAkZGF0YSA9IEB7JHJlc3VsdC0+e3Jlc3VsdHN9fVswXTsKPiArwqDCoMKgIHJldHVy biAkZGF0YS0+e2lkfTsKPiArfQo+ICsKPiArc3ViIGdldF9wcmVmaXhfaWQgewo+ICvCoMKgwqAg bXkgKCRjb25maWcsICRjaWRyLCAkbm9lcnIpID0gQF87Cj4gKwo+ICvCoMKgwqAgbXkgJHJlc3Vs dCA9IGV2YWwgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIG5hdXRvYm90X2FwaV9yZXF1ZXN0KCRj b25maWcsICJHRVQiLCAiL2lwYW0vcHJlZml4ZXMvP3ByZWZpeD0kY2lkciIpOwo+ICvCoMKgwqAg fTsKPiArwqDCoMKgIGlmICgkQCkgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGlmICRub2VycjsK PiArwqDCoMKgwqDCoMKgIGRpZSAiZXJyb3Igd2hpbGUgcXVlcnlpbmcgZm9yIGNpZHIgJGNpZHIg cHJlZml4IGlkOiAkQFxuIjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBteSAkZGF0YSA9IEB7 JHJlc3VsdC0+e3Jlc3VsdHN9fVswXTsKPiArwqDCoMKgIHJldHVybiAkZGF0YS0+e2lkfTsKPiAr fQo+ICsKPiArc3ViIGdldF9uYW1lc3BhY2VfaWQgewo+ICvCoMKgwqAgbXkgKCRjb25maWcsICRu YW1lc3BhY2UsICRub2VycikgPSBAXzsKPiArCj4gK8KgwqDCoCBteSAkcmVzdWx0ID0gZXZhbCB7 Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBuYXV0b2JvdF9hcGlfcmVxdWVzdCgkY29uZmlnLCAi R0VUIiwgIi9pcGFtL25hbWVzcGFjZXMvP25hbWU9JG5hbWVzcGFjZSIpOwo+ICvCoMKgwqAgfTsK PiArwqDCoMKgIGlmICgkQCkgewo+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGlmICRub2VycjsKPiAr wqDCoMKgwqDCoMKgIGRpZSAiZXJyb3Igd2hpbGUgcXVlcnlpbmcgZm9yIG5hbWVzcGFjZSAkbmFt ZXNwYWNlIGlkOiAkQFxuIjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBteSAkZGF0YSA9IEB7 JHJlc3VsdC0+e3Jlc3VsdHN9fVswXTsKPiArwqDCoMKgIHJldHVybiAkZGF0YS0+e2lkfTsKPiAr fQo+ICsKPiArc3ViIGdldF9zdGF0dXNfaWQgewo+ICvCoMKgwqAgbXkgKCRjb25maWcsICRzdGF0 dXMsICRub2VycikgPSBAXzsKPiArCj4gK8KgwqDCoCBteSAkcmVzdWx0ID0gZXZhbCB7Cj4gK8Kg wqDCoMKgwqDCoCByZXR1cm4gbmF1dG9ib3RfYXBpX3JlcXVlc3QoJGNvbmZpZywgIkdFVCIsICIv ZXh0cmFzL3N0YXR1c2VzLz9uYW1lPSRzdGF0dXMiKTsKPiArwqDCoMKgIH07Cj4gK8KgwqDCoCBp ZiAoJEApIHsKPiArwqDCoMKgwqDCoMKgIHJldHVybiBpZiAkbm9lcnI7Cj4gK8KgwqDCoMKgwqDC oCBkaWUgImVycm9yIHdoaWxlIHF1ZXJ5aW5nIGZvciBzdGF0dXMgJHN0YXR1cyBpZDogJEBcbiI7 Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgbXkgJGRhdGEgPSBAeyRyZXN1bHQtPntyZXN1bHRz fX1bMF07Cj4gK8KgwqDCoCByZXR1cm4gJGRhdGEtPntpZH07Cj4gK30KPiArCj4gK3N1YiBpc19p cF9nYXRld2F5IHsKPiArwqDCoMKgIG15ICgkY29uZmlnLCAkaXAsICRub2VycikgPSBAXzsKPiAr Cj4gK8KgwqDCoCBteSAkcmVzdWx0ID0gZXZhbCB7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBu YXV0b2JvdF9hcGlfcmVxdWVzdCgkY29uZmlnLCAiR0VUIiwgIi9pcGFtL2lwLWFkZHJlc3Nlcy8/ YWRkcmVzcz0kaXAiKTsKPiArwqDCoMKgIH07Cj4gK8KgwqDCoCBpZiAoJEApIHsKPiArwqDCoMKg wqDCoMKgIHJldHVybiBpZiAkbm9lcnI7Cj4gK8KgwqDCoMKgwqDCoCBkaWUgImVycm9yIHdoaWxl IGNoZWNraW5nIGlmICRpcCBpcyBhIGdhdGV3YXk6ICRAXG4iOwo+ICvCoMKgwqAgfQo+ICsKPiAr wqDCoMKgIG15ICRkYXRhID0gQHskcmVzdWx0LT57cmVzdWx0c319WzBdOwo+ICvCoMKgwqAgcmV0 dXJuICRkYXRhLT57ZGVzY3JpcHRpb259IGVxICdnYXRld2F5JzsKPiArfQo+ICsKPiArMTsKPiAt LQo+IDIuMzkuNQo+Cj4KPgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnByb3htb3gu Y29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2 ZS1kZXZlbAo=