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 1D6971FF17C for <inbox@lore.proxmox.com>; Wed, 2 Apr 2025 18:32:41 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 756C81F601; Wed, 2 Apr 2025 18:32:30 +0200 (CEST) Mime-Version: 1.0 Date: Wed, 02 Apr 2025 18:31:54 +0200 Message-Id: <D8WAP3ORE11I.26S6Y4NV5F0PI@proxmox.com> To: "Proxmox VE development discussion" <pve-devel@lists.proxmox.com> From: "Max Carrara" <m.carrara@proxmox.com> X-Mailer: aerc 0.18.2-0-ge037c095a049 References: <20250326142059.261938-1-m.carrara@proxmox.com> <20250326142059.261938-5-m.carrara@proxmox.com> <1743427728.0lo886zlbq.astroid@yuna.none> In-Reply-To: <1743427728.0lo886zlbq.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.323 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pve-devel] [PATCH v1 pve-storage 4/8] pluginbase: document general plugin methods 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> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> T24gTW9uIE1hciAzMSwgMjAyNSBhdCA1OjEyIFBNIENFU1QsIEZhYmlhbiBHcsO8bmJpY2hsZXIg d3JvdGU6Cj4gT24gTWFyY2ggMjYsIDIwMjUgMzoyMCBwbSwgTWF4IENhcnJhcmEgd3JvdGU6Cj4g PiBBZGQgZG9jc3RyaW5ncyBmb3IgdGhlIGZvbGxvd2luZyBtZXRob2RzOgo+ID4gLSBjaGVja19j b25uZWN0aW9uCj4gPiAtIGFjdGl2YXRlX3N0b3JhZ2UKPiA+IC0gZGVhY3RpdmF0ZV9zdG9yYWdl Cj4gPiAtIHN0YXR1cwo+ID4gLSBjbHVzdGVyX2xvY2tfc3RvcmFnZQo+ID4gLSBwYXJzZV92b2xu YW1lCj4gPiAtIGdldF9zdWJkaXIKPiA+IC0gZmlsZXN5c3RlbV9wYXRoCj4gPiAtIHBhdGgKPiA+ IC0gZmluZF9mcmVlX2Rpc2tuYW1lCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IE1heCBDYXJyYXJh IDxtLmNhcnJhcmFAcHJveG1veC5jb20+Cj4gPiAtLS0KPiA+ICBzcmMvUFZFL1N0b3JhZ2UvUGx1 Z2luQmFzZS5wbSB8IDI1NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAg MSBmaWxlIGNoYW5nZWQsIDI1NSBpbnNlcnRpb25zKCspCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9z cmMvUFZFL1N0b3JhZ2UvUGx1Z2luQmFzZS5wbSBiL3NyYy9QVkUvU3RvcmFnZS9QbHVnaW5CYXNl LnBtCj4gPiBpbmRleCA1ZjdlNmZkLi44YTYxZGMzIDEwMDY0NAo+ID4gLS0tIGEvc3JjL1BWRS9T dG9yYWdlL1BsdWdpbkJhc2UucG0KPiA+ICsrKyBiL3NyYy9QVkUvU3RvcmFnZS9QbHVnaW5CYXNl LnBtCj4gPiBAQCAtMzE3LDUzICszMTcsMzA4IEBAIHN1YiBwcml2YXRlIHsKPiA+ICAKPiA+ICA9 Y3V0Cj4gPiAgCj4gPiArPWhlYWQzICRwbHVnaW4tPmNoZWNrX2Nvbm5lY3Rpb24oJHN0b3JlaWQs IFwlc2NmZykKPiA+ICsKPiA+ICtCPE9QVElPTkFMOj4gTWF5IGJlIGltcGxlbWVudGVkIGluIGEg c3RvcmFnZSBwbHVnaW4uCj4gPiArCj4gPiArUGVyZm9ybXMgYSBjb25uZWN0aW9uIGNoZWNrLgo+ ID4gKwo+ID4gK1RoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgcGx1Z2lucyB0aGF0IHJlcXVpcmUg c29tZSBraW5kIG9mIG5ldHdvcmsgY29ubmVjdGlvbgo+ID4gK29yIHNpbWlsYXIgYW5kIGlzIGNh bGxlZCBiZWZvcmUgQzxMPDwgYWN0aXZhdGVfc3RvcmFnZSgpfC8iJHBsdWdpbi0+YWN0aXZhdGVf c3RvcmFnZSgkc3RvcmVpZCwgXCVzY2ZnLCBcJWNhY2hlKSIgPj4+LgoKVXBmcm9udCBub3RlOiBV bmxlc3MgSSBvdGhlcndpc2UgY29tbWVudCBzb21ldGhpbmcsIEkgYWdyZWUgd2l0aCB5b3UuCkp1 c3Qgc3BhcmluZyBteXNlbGYgZnJvbSB3cml0aW5nIGFuZCB5b3UgZnJvbSByZWFkaW5nIHRvbyBt YW55IEFDS3MgOlAKCj4KPiBUaGlzIG1ldGhvZCBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgbmV0d29y ay1iYXNlZCBzdG9yYWdlcy4gSXQgd2lsbCBiZQo+IGNhbGxlZCBiZWZvcmUgc3RvcmFnZSBhY3Rp dmF0aW9uIGF0dGVtcHRzLiBOb24tbmV0d29yayBzdG9yYWdlcyBzaG91bGQKPiBub3QgaW1wbGVt ZW50IGl0Lgo+Cj4gPiArCj4gPiArUmV0dXJucyBDPDE+IGJ5IGRlZmF1bHQgYW5kIEM8MD4gaWYg dGhlIHN0b3JhZ2UgaXNuJ3Qgb25saW5lIC8gcmVhY2hhYmxlLgo+Cj4gYnkgZGVmYXVsdCBkb2Vz bid0IG1ha2UgYW55IHNlbnNlLCBldmVuIHRob3VnaCBJIGtub3cgd2hhdCB5b3UgbWVhbi4KPgo+ ID4gKwo+ID4gK0M8ZGllPnMgaWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIHBlcmZvcm1pbmcgdGhl IGNvbm5lY3Rpb24gY2hlY2suCj4gPiArCj4gPiArTm90ZSB0aGF0IHRoaXMgbWV0aG9kJ3MgcHVy cG9zZSBpcyB0byBzaW1wbHkgdmVyaWZ5IHRoYXQgdGhlIHN0b3JhZ2UgaXMKPiA+ICtJPHJlYWNo YWJsZT4sIGFuZCBub3QgbmVjZXNzYXJpbHkgdGhhdCBhdXRoZW50aWNhdGlvbiBldGMuIHN1Y2Nl ZWRzLgo+ID4gKwo+ID4gK0ZvciBleGFtcGxlOiBJZiB0aGUgc3RvcmFnZSBpcyBtYWlubHkgYWNj ZXNzZWQgdmlhIFRDUCwgeW91IGNhbiB0cnkgdG8gc2ltcGx5Cj4gPiArb3BlbiBhIFRDUCBjb25u ZWN0aW9uIHRvIHNlZSBpZiBpdCdzIG9ubGluZToKPiA+ICsKPiA+ICsgICAgIyBJbiBjdXN0b20g bW9kdWxlOgo+ID4gKwo+ID4gKyAgICB1c2UgUFZFOjpOZXR3b3JrOwo+ID4gKyAgICB1c2UgcGFy ZW50IHF3KFBWRTo6U3RvcmFnZTo6UGx1Z2luKQo+ID4gKwo+ID4gKyAgICAjIFsuLi5dCj4gPiAr Cj4gPiArICAgIHN1YiBjaGVja19jb25uZWN0aW9uIHsKPiA+ICsJbXkgKCRjbGFzcywgJHN0b3Jl aWQsICRzY2ZnKSA9IEBfOwo+ID4gKwo+ID4gKwlteSAkcG9ydCA9ICRzY2ZnLT57cG9ydH0gfHwg NTQzMjsKPiA+ICsJcmV0dXJuIFBWRTo6TmV0d29yazo6dGNwX3BpbmcoJHNjZmctPntzZXJ2ZXJ9 LCAkcG9ydCwgNSk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICs9Y3V0Cj4gPiArCj4gPiAgc3ViIGNo ZWNrX2Nvbm5lY3Rpb24gewo+ID4gICAgICBteSAoJGNsYXNzLCAkc3RvcmVpZCwgJHNjZmcpID0g QF87Cj4gPiAgCj4gPiAgICAgIHJldHVybiAxOwo+ID4gIH0KPiA+ICAKPiA+ICs9aGVhZDMgJHBs dWdpbi0+YWN0aXZhdGVfc3RvcmFnZSgkc3RvcmVpZCwgXCVzY2ZnLCBcJWNhY2hlKQo+ID4gKwo+ ID4gKz1oZWFkMyAkcGx1Z2luLT5hY3RpdmF0ZV9zdG9yYWdlKC4uLikKPiA+ICsKPiA+ICtCPFJF UVVJUkVEOj4gTXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBldmVyeSBzdG9yYWdlIHBsdWdpbi4KPiA+ ICsKPiA+ICtBY3RpdmF0ZXMgdGhlIHN0b3JhZ2UsIG1ha2luZyBpdCByZWFkeSBmb3IgZnVydGhl ciB1c2UuCj4gPiArCj4gPiArSW4gZXNzZW5jZSwgdGhpcyBtZXRob2QgcGVyZm9ybXMgdGhlIHN0 ZXBzIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBzdG9yYWdlIGNhbiBiZQo+ID4gK3VzZWQgYnkgcmVt YWluaW5nIHBhcnRzIG9mIHRoZSBzeXN0ZW0uCj4KPiB0aGlzIGlzIHN1cGVyZmx1b3VzIChhbGwg b2YgdGhhdCBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUKPiBwcmV2aW91 cyBzZW50ZW5jZSkuCj4KPiA+ICsKPiA+ICtJbiB0aGUgY2FzZSBvZiBmaWxlLWJhc2VkIHN0b3Jh Z2VzLCB0aGlzIHVzdWFsbHkgZW50YWlscyBjcmVhdGluZyB0aGUgZGlyZWN0b3J5Cj4gPiArb2Yg dGhlIG1vdW50cG9pbnQsIG1vdW50aW5nIHRoZSBzdG9yYWdlIGFuZCB0aGVuIGNyZWF0aW5nIHRo ZSBkaXJlY3RvcmllcyBmb3IKPiA+ICt0aGUgZGlmZmVyZW50IGNvbnRlbnQgdHlwZXMgdGhhdCB0 aGUgc3RvcmFnZSBoYXMgZW5hYmxlZC4gU2VlCj4gPiArQzxMPFBWRTo6U3RvcmFnZTo6TkZTUGx1 Z2luPj4gYW5kIEM8TDxQVkU6OlN0b3JhZ2U6OkNJRlNQbHVnaW4+PiBmb3IgZXhhbXBsZXMKPiA+ ICtpbiB0aGF0IHJlZ2FyZC4KPiA+ICsKPiA+ICtPdGhlciB0eXBlcyBvZiBzdG9yYWdlcyB3b3Vs ZCB1c2UgdGhpcyBtZXRob2QgZm9yIGVzdGFibGlzaGluZyBhIGNvbm5lY3Rpb24gdG8KPiA+ICt0 aGUgc3RvcmFnZSBhbmQgYXV0aGVudGljYXRpbmcgd2l0aCBpdCBvciBzaW1pbGFyLiBTZWUgQzxM PFBWRTo6U3RvcmFnZTo6SVNDU0lQbHVnaW4+Pgo+ID4gK2ZvciBhbiBleGFtcGxlLgo+ID4gKwo+ Cj4gSSBhbSBub3Qgc3VyZSB0aGlzIGV4YW1wbGVzIHByb3ZpZGUgbXVjaCBiZW5lZml0IGluIHRo aXMgdmVyYm9zaXR5Li4KPiBtYXliZSBqdXN0IGEgc2luZ2xlIHNlbnRlbmNlIGxpa2UKPgo+IENv bW1vbiBleGFtcGxlcyBvZiBhY3RpdmF0aW9uIG1pZ2h0IGluY2x1ZGUgbW91bnRpbmcgZmlsZXN5 c3RlbXMsCj4gcHJlcGFyaW5nIGRpcmVjdG9yeSB0cmVlcyBvciBlc3RhYmxpc2hpbmcgc2Vzc2lv bnMgd2l0aCBuZXR3b3JrCj4gc3RvcmFnZXMuCj4KPiA+ICtJZiB0aGUgc3RvcmFnZSBkb2Vzbid0 IG5lZWQgdG8gYmUgYWN0aXZhdGVkIGluIHNvbWUgd2F5LCB0aGlzIG1ldGhvZCBjYW4gYmUgYQo+ ID4gK25vLW9wLgo+ID4gKwo+ID4gK0M8ZGllPnMgaW4gY2FzZSBvZiBlcnJvcnMuCj4KPiAqU2hv dWxkKiBkaWU/Cj4KPiA+ICsKPiA+ICtUaGlzIG1ldGhvZCBtYXkgcmV1c2UgTDw8IGNhY2hlZCBp bmZvcm1hdGlvbiB2aWEgQzxcJWNhY2hlPnwvIkNBQ0hJTkcgRVhQRU5TSVZFIE9QRVJBVElPTlMi ID4+Lgo+ID4gKwo+ID4gKz1jdXQKPiA+ICsKPiA+ICBzdWIgYWN0aXZhdGVfc3RvcmFnZSB7Cj4g PiAgICAgIG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJGNhY2hlKSA9IEBfOwo+ID4gICAg ICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFzc1xuIjsKPiA+ICB9Cj4gPiAgCj4gPiAr PWhlYWQzICRwbHVnaW4tPmRlYWN0aXZhdGVfc3RvcmFnZSgkc3RvcmVpZCwgXCVzY2ZnLCBcJWNh Y2hlKQo+ID4gKwo+ID4gKz1oZWFkMyAkcGx1Z2luLT5kZWFjdGl2YXRlX3N0b3JhZ2UoLi4uKQo+ ID4gKwo+ID4gK0I8T1BUSU9OQUw6PiBNYXkgYmUgaW1wbGVtZW50ZWQgaW4gYSBzdG9yYWdlIHBs dWdpbi4KPiA+ICsKPiA+ICtEZWFjdGl2YXRlcyB0aGUgc3RvcmFnZS4gQ291bnRlcnBhcnQgdG8g QzxMPDwgYWN0aXZhdGVfc3RvcmFnZSgpfC8iJHBsdWdpbi0+YWN0aXZhdGVfc3RvcmFnZSguLi4p IiA+Pj4uCj4gPiArCj4gPiArVGhpcyBtZXRob2QgaXMgdXNlZCB0byBtYWtlIHRoZSBzdG9yYWdl IHVuYXZhaWxhYmxlIHRvIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0sCj4gPiArd2hpY2ggdXN1YWxs eSBlbnRhaWxzIHVubW91bnRpbmcgdGhlIHN0b3JhZ2UsIGNsb3NpbmcgYW4gZXN0YWJsaXNoZWQK PiA+ICtjb25uZWN0aW9uLCBvciBzaW1pbGFyLgo+ID4gKwo+ID4gK0RvZXMgbm90aGluZyBieSBk ZWZhdWx0Lgo+ID4gKwo+ID4gK0M8ZGllPnMgaW4gY2FzZSBvZiBlcnJvcnMuCj4KPiAqU2hvdWxk Kgo+Cj4gPiArCj4gPiArVGhpcyBtZXRob2QgbWF5IHJldXNlIEw8PCBjYWNoZWQgaW5mb3JtYXRp b24gdmlhIEM8XCVjYWNoZT58LyJDQUNISU5HIEVYUEVOU0lWRSBPUEVSQVRJT05TIiA+Pi4KPiA+ ICsKPiA+ICtCPE5PVEU6PiBUaGlzIG1ldGhvZCBpcyBjdXJyZW50bHkgbm90IHVzZWQgYnkgb3Vy IEFQSSBkdWUgdG8gaGlzdG9yaWNhbAo+ID4gK3JlYXNvbnMuCj4gPiArCj4gPiArPWN1dAo+ID4g Kwo+ID4gIHN1YiBkZWFjdGl2YXRlX3N0b3JhZ2Ugewo+ID4gICAgICBteSAoJGNsYXNzLCAkc3Rv cmVpZCwgJHNjZmcsICRjYWNoZSkgPSBAXzsKPiA+ICAKPiA+ICAgICAgcmV0dXJuOwo+ID4gIH0K PiA+ICAKPiA+ICs9aGVhZDMgJHBsdWdpbi0+c3RhdHVzKCRzdG9yZWlkLCBcJXNjZmcsIFwlY2Fj aGUpCj4gPiArCj4gPiArPWhlYWQzICRwbHVnaW4tPnN0YXR1cyguLi4pCj4gPiArCj4gPiArQjxS RVFVSVJFRDo+IE11c3QgYmUgaW1wbGVtZW50ZWQgaW4gZXZlcnkgc3RvcmFnZSBwbHVnaW4uCj4g PiArCj4gPiArUmV0dXJucyBhIGxpc3Qgb2Ygc2NhbGFycyBpbiB0aGUgZm9sbG93aW5nIGZvcm06 Cj4gPiArCj4gPiArICAgIG15ICgkdG90YWwsICRhdmFpbGFibGUsICR1c2VkLCAkYWN0aXZlKSA9 ICRwbHVnaW4tPnN0YXR1cygkc3RvcmVpZCwgJHNjZmcsICRjYWNoZSkKPiA+ICsKPiA+ICtUaGlz IGxpc3QgY29udGFpbnMgdGhlIEM8JHRvdGFsPiwgQzwkYXZhaWxhYmxlPiBhbmQgQzwkdXNlZD4g c3RvcmFnZSBjYXBhY2l0eSwKPiA+ICtyZXNwZWN0aXZlbHksIGFzIHdlbGwgYXMgd2hldGhlciB0 aGUgc3RvcmFnZSBpcyBDPCRhY3RpdmU+IG9yIG5vdC4KPgo+IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8g aW5jbHVkZSB0aGUgaW5mb3JtYXRpb24gd2hpY2ggdW5pdCB0aGUgcmV0dXJuZWQKPiBudW1iZXJz IHNob3VsZCBiZSBpbj8KPgo+ID4gKwo+ID4gK1RoaXMgbWV0aG9kIG1heSByZXVzZSBMPDwgY2Fj aGVkIGluZm9ybWF0aW9uIHZpYSBDPFwlY2FjaGU+fC8iQ0FDSElORyBFWFBFTlNJVkUgT1BFUkFU SU9OUyIgPj4uCj4gPiArCj4gPiArPWN1dAo+ID4gKwo+ID4gIHN1YiBzdGF0dXMgewo+ID4gICAg ICBteSAoJGNsYXNzLCAkc3RvcmVpZCwgJHNjZmcsICRjYWNoZSkgPSBAXzsKPiA+ICAgICAgY3Jv YWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiAgfQo+ID4gIAo+ID4gKz1oZWFk MyAkcGx1Z2luLT5jbHVzdGVyX2xvY2tfc3RvcmFnZSgkc3RvcmVpZCwgJHNoYXJlZCwgJHRpbWVv dXQsIFwmZnVuYywgQHBhcmFtKQo+ID4gKwo+ID4gKz1oZWFkMyAkcGx1Z2luLT5jbHVzdGVyX2xv Y2tfc3RvcmFnZSguLi4pCj4gPiArCj4gPiArQjxXQVJOSU5HOj4gVGhpcyBtZXRob2QgaXMgcHJv dmlkZWQgYnkgQzxMPFBWRTo6U3RvcmFnZTo6UGx1Z2luPj4gYW5kCj4gPiArbXVzdCBiZSB1c2Vk IGFzLWlzLiBJdCBpcyBtZXJlbHkgZG9jdW1lbnRlZCBoZXJlIGZvciBpbmZvcm1hbCBwdXJwb3Nl cwo+ID4gK2FuZCBCPG11c3Qgbm90IGJlIG92ZXJyaWRkZW4uPgo+Cj4gc2VlIG15IGNvbW1lbnQg b24gdGhlIGZpcnN0IHBhdGNoLi4gdGhpcyBpcyBub3QgYWN0dWFsbHkgcGFydCBvZiB0aGUKPiBw bHVnaW4gaW50ZXJmYWNlLCBpdCBpcyBhIGhlbHBlciB0aGF0IGlzIGltcGxlbWVudGVkIGJ5Cj4g UFZFOjpTdG9yYWdlOjpQbHVnaW4gZm9yIGhpc3RvcmljYWwgcmVhc29ucyBhbmQgc2hvdWxkIGJl IG1vdmVkCj4gc29tZXdoZXJlIGVsc2UgYW5kIHRoZW4gcmVtb3ZlZCBmcm9tIFBWRTo6U3RvcmFn ZTo6UGx1Z2luIHdoZW4gd2UgZG8gdGhlCj4gbmV4dCBicmVhayBvZiB0aGF0IGluaGVyaXRhbmNl IGhpZXJhcmNoeS4uCj4KPiA+ICsKPiA+ICtMb2NrcyB0aGUgc3RvcmFnZSB3aXRoIHRoZSBnaXZl biBDPCRzdG9yZWlkPiBmb3IgdGhlIGVudGlyZSBob3N0IGFuZCBydW5zIHRoZQo+ID4gK2dpdmVu IEM8XCZmdW5jPiB3aXRoIHRoZSBnaXZlbiBDPEBwYXJhbT5zLCB1bmxvY2tpbmcgdGhlIHN0b3Jh Z2Ugb25jZSBmaW5pc2hlZC4KPiA+ICtJZiB0aGUgc3RvcmFnZSBpcyBDPCRzaGFyZWQ+LCBpdCBp cyBpbnN0ZWFkIGxvY2tlZCBvbiB0aGUgZW50aXJlIGNsdXN0ZXIuIElmCj4gPiArdGhlIHN0b3Jh Z2UgaXMgYWxyZWFkeSBsb2NrZWQsIHdhaXQgZm9yIGF0IG1vc3QgdGhlIG51bWJlciBvZiBzZWNv bmRzIGdpdmVuIGJ5Cj4gPiArQzwkdGltZW91dD4uCj4KPiBBdHRlbXB0cyB0byBhY3F1aXJlIGEg bG9jayBvbiBDPCRzdG9yZWlkPiwgd2FpdGluZyBhdCBtb3N0IEM8JHRpbWVvdXQ+Cj4gc2Vjb25k cyBiZWZvcmUgZ2l2aW5nIHVwLiBJZiBzdWNjZXNzZnVsLCBydW5zIEM8XCZmdW5jPiB3aXRoIHRo ZSBnaXZlbgo+IEM8QHBhcmFtPnMgd2hpbGUgaG9sZGluZyB0aGUgbG9jay4gSWYgQzwkc2hhcmVk PiBpcyBzZXQsIHRoZSBsb2NrCj4gb3BlcmF0aW9uIHdpbGwgYmUgY2x1c3Rlci13aWRlICh3aXRo IGEgdGltZW91dCBmb3IgdGhlIGV4ZWN1dGlvbiBvZgo+IEM8XCZmdW5jPiBvZiA2MCBzZWNvbmRz KS4KPgo+IFRoaXMgbWV0aG9kIG11c3QgYmUgdXNlZCB0byBndWFyZCBhZ2FpbnN0IGNvbmN1cnJl bnQgbW9kaWZpY2F0aW9ucyBvZgo+IHRoZSBzdG9yYWdlIGJ5IG11bHRpcGxlIHRhc2tzIHJ1bm5p bmcgYXQgdGhlIHNhbWUgdGltZSwgaW4gcGFydGljdWxhcgo+IGZvciBhY3Rpb25zIHN1Y2ggYXM6 Cj4gLSBhbGxvY2F0aW5nIG5ldyB2b2x1bWVzIChpbmNsdWRpbmcgY2xvbmVzKSBvciBzbmFwc2hv dHMKPiAtIGRlbGV0aW5nIGV4aXN0aW5nIHZvbHVtZXMgb3Igc25hcHNob3RzCj4gLSByZW5hbWlu ZyBleGlzdGluZyB2b2x1bWVzIG9yIHNuYXBzaG90cwo+Cj4gPiArCj4gPiArVGhpcyBtZXRob2Qg aXMgdXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gdGhlIGdpdmVuIHN0b3JhZ2UsIHByZXZl bnRpbmcKPiA+ICtzaW11bHRhbmVvdXMgbW9kaWZpY2F0aW9uIGZyb20gbXVsdGlwbGUgd29ya2Vy cy4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yCj4gPiArb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSBkYXRh IG9uIHRoZSBzdG9yYWdlIGRpcmVjdGx5LCBsaWtlIGNsb25pbmcgYW5kCj4gPiArYWxsb2NhdGlu ZyBpbWFnZXMuCj4KPgo+ID4gKwo+ID4gKz1jdXQKPiA+ICsKPiA+ICBzdWIgY2x1c3Rlcl9sb2Nr X3N0b3JhZ2Ugewo+ID4gICAgICBteSAoJGNsYXNzLCAkc3RvcmVpZCwgJHNoYXJlZCwgJHRpbWVv dXQsICRmdW5jLCBAcGFyYW0pID0gQF87Cj4gPiAgICAgIGNyb2FrICJpbXBsZW1lbnQgbWUgaW4g c3ViLWNsYXNzXG4iOwo+ID4gIH0KPiA+ICAKPiA+ICs9aGVhZDMgJHBsdWdpbi0+cGFyc2Vfdm9s bmFtZSgkdm9sbmFtZSkKPiA+ICsKPiA+ICtCPFJFUVVJUkVEOj4gTXVzdCBiZSBpbXBsZW1lbnRl ZCBpbiBldmVyeSBzdG9yYWdlIHBsdWdpbi4KPiA+ICsKPiA+ICtQYXJzZXMgQzwkdm9sbmFtZT4s IHJldHVybmluZyBhIGxpc3QgcmVwcmVzZW50aW5nIHRoZSBwYXJ0cyBlbmNvZGVkIGluCj4gPiAr dGhlIHZvbHVtZSBuYW1lOgo+Cj4gcy9wYXJ0cy92b2x1bWUgcHJvcGVydGllcy8gPwo+Cj4gc2hv dWxkIHdlIGluY29ycG9yYXRlIHRoZSBvdXRjb21lIG9mIHRoaXMgZGlzY3Vzc2lvbjoKPgo+IGh0 dHBzOi8vbG9yZS5wcm94bW94LmNvbS9wdmUtZGV2ZWwvcWRuYjN2eXBidWNiY2Y3Y2gyaHNqYmVv M2hxYjViaDR3aG9pbmw1eGdsZ2dwdDdiN3RAaWdyeWZuY2R1cGRwLwoKSG1tLCBJJ2Qgc2F5IHNv LCB5ZWFoLiBUaGUgb3JpZ2luYWwgbWVzc2FnZSBpc24ndCBvbiBsb3JlIGFwcGFyZW50bHksIHNv CkknbGwgc2VlIGlmIEkgY2FuIGRpZyB0aGlzIHVwIGluIG15IG1haWxib3ggbGF0ZXIuCgo+Cj4g Pwo+Cj4gPiArCj4gPiArICAgIG15ICgkdnR5cGUsICRuYW1lLCAkdm1pZCwgJGJhc2VuYW1lLCAk YmFzZXZtaWQsICRpc0Jhc2UsICRmb3JtYXQpCj4gPiArCT0gJHBsdWdpbi0+cGFyc2Vfdm9sbmFt ZSgkdm9sbmFtZSk7Cj4gPiArCj4gPiArTm90IGFsbCBwYXJ0cyBuZWVkIHRvIGJlIGluY2x1ZGVk IGluIHRoZSBsaXN0LiBUaG9zZSBtYXJrZWQgYXMgSTxvcHRpb25hbD4KPiA+ICtpbiB0aGUgbGlz dCBiZWxvdyBtYXkgYmUgc2V0IHRvIEM8dW5kZWY+IGlmIG5vdCBhcHBsaWNhYmxlLgo+ID4gKwo+ ID4gK1RoaXMgbWV0aG9kIG1heSBDPGRpZT4gaW4gY2FzZSBvZiBlcnJvcnMuCj4KPiBzL21heS9z aG91bGQvID8KPgo+ID4gKwo+ID4gKz1vdmVyCj4gPiArCj4gPiArPWl0ZW0gKiBDPDwgJHZ0eXBl ID4+Cj4gPiArCj4gPiArVGhlIGNvbnRlbnQgdHlwZSAoInZvbHVtZSB0eXBlIikgb2YgdGhlIHZv bHVtZSwgZS5nLiBDPCJpbWFnZXMiPiwgQzwiaXNvIj4sCj4gPiArZXRjLgo+Cj4gY29udGVudCB0 eXBlICE9IHZvbHVtZSB0eXBlISB0aGUgdHdvIGFyZSByZWxhdGVkIG9idmlvdXNseSwgYnV0IHRo ZQo+IHZhbHVlcyBhcmUgc3VidGx5IGRpZmZlcmVudCBmb3IgaW1hZ2VzIGZvciBoaXN0b3JpYyBy ZWFzb25zLgoKT2gsIHJpZ2h0LiBUaGFua3MgZm9yIHBvaW50aW5nIHRoaXMgb3V0ISBJJ2xsIHNl ZSBpZiBJIGNhbiBub3RlIGRvd24KdGhvc2UgZGlmZmVyZW5jZXMgc29tZXdoZXJlLgoKPgo+ID4g Kwo+ID4gK1NlZSBDPEw8PCBwbHVnaW5kYXRhKCl8LyIkcGx1Z2luLT5wbHVnaW5kYXRhKCkiID4+ PiBmb3IgYWxsIGNvbnRlbnQgdHlwZXMuCj4gPiArCj4gPiArPWl0ZW0gKiBDPDwgJG5hbWUgPj4K PiA+ICsKPiA+ICtUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSB2b2x1bWUuIFRoaXMgaXMgdXN1YWxs eSB3aGF0IHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UKPiA+ICtpdHNlbGYgdXNlcyB0byBhZGRyZXNz IHRoZSB2b2x1bWUuCj4KPiBJZGVhbGx5LCB0aGlzIG1hcHMgZGlyZWN0bHkgdG8gc29tZSBlbnRp dHkgb24gdGhlIHVuZGVybHlpbmcgc3RvcmFnZS4KPgo+ID4gKwo+ID4gK0ZvciBleGFtcGxlLCBk aXNrcyBmb3IgdmlydHVhbCBtYWNoaW5lcyB0aGF0IGFyZSBzdG9yZWQgb24gTFZNIHRoaW4gcG9v bHMgYXJlCj4gPiArbmFtZWQgQzx2bS0xMDAtZGlzay0wPiwgQzx2bS0xMzM3LWRpc2stMT4sIGV0 Yy4gVGhhdCB3b3VsZCBiZSB0aGUgQzwkbmFtZT4gaW4KPiA+ICt0aGlzIGNhc2UuCj4KPiBUaGlz IGlzIHJhdGhlciBpbXByZWNpc2UsIG1heWJlIGp1c3Qgc2F5Cj4KPiBGb3IgZXhhbXBsZSwgYSBn dWVzdCB2b2x1bWUgbmFtZWQgQzx2bS0xMDAtZGlzay0wPiBzdG9yZWQgb24gYW4gTFZNIHRoaW4K PiBwb29sIHdpbGwgcmVmZXIgdG8gYSB0aGluIExWIG9mIHRoZSBzYW1lIG5hbWUuCj4KPiA+ICsK PiA+ICs9aXRlbSAqIEM8PCAkdm1pZCA+PiAob3B0aW9uYWwpCj4gPiArCj4gPiArVGhlIElEIG9m IHRoZSBndWVzdCB0aGF0IG93bnMgdGhlIHZvbHVtZS4KPgo+IHNob3VsZCBtYXliZSBub3RlIHRo YXQgdGhpcyBtdXN0IGJlIHNldCBmb3IgYGltYWdlc2Agb3IgYGJhY2t1cGAsIGFuZAo+IG11c3Qg bm90IGJlIHNldCBmb3IgdGhlIG90aGVyIHZ0eXBlcz8KPgo+ID4gKwo+ID4gKz1pdGVtICogQzw8 ICRiYXNlbmFtZSA+PiAob3B0aW9uYWwpCj4gPiArCj4gPiArVGhlIEM8JG5hbWU+IG9mIHRoZSB2 b2x1bWUgdGhpcyB2b2x1bWUgaXMgYmFzZWQgb24uIFdoZXRoZXIgdGhpcyBwYXJ0Cj4gPiAraXMg cmV0dXJuZWQgb3Igbm90IGRlcGVuZHMgb24gdGhlIHBsdWdpbiBhbmQgdW5kZXJseWluZyBzdG9y YWdlLgo+Cj4gVGhlIEM8JG5hbWU+IG9mIHRoaXMgdm9sdW1lJ3MgYmFzZSB2b2x1bWUsIGlmIGl0 IGlzIGEgbGlua2VkIGNsb25lLgo+Cj4gPwo+Cj4gPiArT25seSBhcHBsaWVzIHRvIGRpc2sgaW1h Z2VzLgo+ID4gKwo+ID4gK0ZvciBleGFtcGxlLCBvbiBaRlMsIGlmIHRoZSBWTSBpcyBhIGxpbmtl ZCBjbG9uZSwgQzwkYmFzZW5hbWU+IHJlZmVycwo+ID4gK3RvIHRoZSBDPCRuYW1lPiBvZiB0aGUg b3JpZ2luYWwgZGlzayB2b2x1bWUgdGhhdCB0aGUgcGFyc2VkIGRpc2sgdm9sdW1lCj4gPiArY29y cmVzcG9uZHMgdG8uCj4KPiBpdCBpcyBvbmx5IHVzZWQgZm9yIHRoYXQsIGFuZCBoYXMgdGhpcyBz ZW1hbnRpYyBhY3Jvc3MgYWxsIHN0b3JhZ2VzLAo+IHJpZ2h0PwoKQUZBSVIgeWVzLiBCdXQgbm93 IHlvdSBtYWRlIG1lIGNoZWNrIGFnYWluIHNvb24uIDpQCgo+Cj4gPiArCj4gPiArPWl0ZW0gKiBD PDwgJGJhc2V2bWlkID4+IChvcHRpb25hbCkKPiA+ICsKPiA+ICtFcXVpdmFsZW50IHRvIEM8JGJh c2VuYW1lPiwgZXhjZXB0IHRoYXQgQzwkYmFzZXZtaWQ+IHJlZmVycyB0byB0aGUKPiA+ICtDPCR2 bWlkPiBvZiB0aGUgb3JpZ2luYWwgZGlzayB2b2x1bWUgaW5zdGVhZC4KPgo+IHMvb3JpZ2luYWwv YmFzZQo+Cj4gPiArCj4gPiArPWl0ZW0gKiBDPDwgJGlzQmFzZSA+PiAob3B0aW9uYWwpCj4gPiAr Cj4gPiArV2hldGhlciB0aGUgdm9sdW1lIGlzIGEgYmFzZSBkaXNrIGltYWdlLgo+ID4gKwo+ID4g Kz1pdGVtICogQzw8ICRmb3JtYXQgPj4KPiA+ICsKPiA+ICtUaGUgZm9ybWF0IG9mIHRoZSB2b2x1 bWUuIElmIHRoZSB2b2x1bWUgaXMgYSBWTSBkaXNrIChDPCR2dHlwZT4gaXMKPiA+ICtDPCJpbWFn ZXMiPiksIHRoaXMgc2hvdWxkIGJlIHdoYXRldmVyIGZvcm1hdCB0aGUgZGlzayBpcyBpbi4gRm9y IG1vc3QKPiA+ICtvdGhlciBjb250ZW50IHR5cGVzIEM8InJhdyI+IHNob3VsZCBiZSB1c2VkLgo+ Cj4gImltYWdlcyIgaXMgY3VycmVudGx5IGFsc28gZm9yIGNvbnRhaW5lciB2b2x1bWVzLi4gaW1w b3J0IHZvbHVtZXMgYWxzbwo+IGhhdmUgYSBmb3JtYXQuLgoKWWVhaCwgV29sZmdhbmcgYWxzbyB0 b2xkIG1lIHRoaXMgbGFzdCB3ZWVrIGEgbGl0dGxlIGFmdGVyIEkgc2VudCBpbiB0aGlzCnNlcmll cy4gV2lsbCBjb3JyZWN0IHRoZSBkb2NzLgoKPgo+ID4gKwo+ID4gK1NlZSBDPEw8PCBwbHVnaW5k YXRhKCl8LyIkcGx1Z2luLT5wbHVnaW5kYXRhKCkiID4+PiBmb3IgYWxsIGZvcm1hdHMuCj4gPiAr Cj4gPiArPWJhY2sKPiA+ICsKPiA+ICs9Y3V0Cj4gPiArCj4gPiAgc3ViIHBhcnNlX3ZvbG5hbWUg ewo+ID4gICAgICBteSAoJGNsYXNzLCAkdm9sbmFtZSkgPSBAXzsKPiA+ICAgICAgY3JvYWsgImlt cGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiAgfQo+ID4gIAo+ID4gKz1oZWFkMyAkcGx1 Z2luLT5nZXRfc3ViZGlyKFwlc2NmZywgJHZ0eXBlKQo+Cj4gSSBhbSBub3Qgc3VyZSBhYm91dCB0 aGlzIG9uZSBsb25nLXRlcm0uLiB3aGlsZSB0aGUgaW50ZXJmYWNlIGlzIGdlbmVyaWMKPiBlbm91 Z2gsIGl0IGlzIG9ubHkgdXNlZCBmb3IgdGhlIGhlbHBlcnMgaW4gUFZFOjpTdG9yYWdlIHdoaWNo IGFyZSBpbgo+IHR1cm4gdXNlZCBmb3IKPiAtIHVwbG9hZGluZy9kb3dubG9hZCB0aGluZ3MgKHRl bXBsYXRlcywgaXNvIGZpbGVzLCAuLikKPiAtIGNyZWF0aW5nIGJhY2t1cCBhcmNoaXZlcyAob3Ig cmF0aGVyLCBnZXR0aW5nIHRoZSBwYXRoIHRvIHRoZSBkdW1wIGRpcgo+ICAgdG8gY3JlYXRlIHRo ZW0pCj4KPiA+ICsKPiA+ICtCPFNJVFVBVElPTkFMOj4gVGhpcyBtZXRob2QgbXVzdCBiZSBpbXBs ZW1lbnRlZCBmb3IgZmlsZS1iYXNlZCBzdG9yYWdlcy4KPgo+IHMvZmlsZS1iYXNlZC9kaXItYmFz ZWQKPgo+ID8KPgo+ID4gKwo+ID4gK1JldHVybnMgdGhlIHBhdGggdG8gdGhlIHN1Yi1kaXJlY3Rv cnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb250ZW50IHR5cGUKPiA+ICsoQzwkdnR5cGU+ KS4gU2VlIEM8TDw8IHBsdWdpbmRhdGEoKXwvIiRwbHVnaW4tPnBsdWdpbmRhdGEoKSIgPj4+IGZv ciBhbGwKPiA+ICtjb250ZW50IHR5cGVzLgo+Cj4gYWdhaW4sIHRoaXMgaXMgdnR5cGUgbm90IGNv bnRlbnQgdHlwZS4uCj4KPiA+ICsKPiA+ICtUaGUgZGVmYXVsdCBkaXJlY3RvcnkgbGF5b3V0IGlz IHByZWRlZmluZWQgYW5kIG11c3Qgbm90IGJlIGFsdGVyZWQ6Cj4gPiArCj4gPiArICAgIG15ICR2 dHlwZV9zdWJkaXJzID0gewo+ID4gKwlpbWFnZXMgICA9PiAnaW1hZ2VzJywKPiA+ICsJcm9vdGRp ciAgPT4gJ3ByaXZhdGUnLAo+ID4gKwlpc28gICAgICA9PiAndGVtcGxhdGUvaXNvJywKPiA+ICsJ dnp0bXBsICAgPT4gJ3RlbXBsYXRlL2NhY2hlJywKPiA+ICsJYmFja3VwICAgPT4gJ2R1bXAnLAo+ ID4gKwlzbmlwcGV0cyA9PiAnc25pcHBldHMnLAo+ID4gKwlpbXBvcnQgICA9PiAnaW1wb3J0JywK PiA+ICsgICAgfTsKPiA+ICsKPiA+ICtTZWUgYWxzbzogTDxTdG9yYWdlOiBEaXJlY3Rvcnl8Imh0 dHBzOi8vcHZlLnByb3htb3guY29tL3dpa2kvU3RvcmFnZTpfRGlyZWN0b3J5Ij4KPiA+ICsKPiA+ ICs9Y3V0Cj4gPiArCj4gPiAgc3ViIGdldF9zdWJkaXIgewo+ID4gICAgICBteSAoJGNsYXNzLCAk c2NmZywgJHZ0eXBlKSA9IEBfOwo+ID4gICAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1j bGFzc1xuIjsKPiA+ICB9Cj4gPiAgCj4gPiArPWhlYWQzICRwbHVnaW4tPmZpbGVzeXN0ZW1fcGF0 aChcJXNjZmcsICR2b2xuYW1lIFssICRzbmFwbmFtZV0pCj4gPiArCj4gPiArPWhlYWQzICRwbHVn aW4tPmZpbGVzeXN0ZW1fcGF0aCguLi4pCj4gPiArCj4gPiArQjxTSVRVQVRJT05BTDo+IFRoaXMg bWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgZm9yIGZpbGUtYmFzZWQgc3RvcmFnZXMuCj4KPiBm aWxlL2Rpcgo+Cj4gPiArCj4gPiArUmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBvbiB0aGUgZmls ZXN5c3RlbSBmb3IgdGhlIGdpdmVuIHZvbHVtZSBvciBzbmFwc2hvdC4KPiA+ICtJbiBsaXN0IGNv bnRleHQsIHJldHVybnMgcGF0aCwgZ3Vlc3QgSUQgYW5kIGNvbnRlbnQgdHlwZToKPgo+IGNvbnRl bnQvdm9sdW1lCj4KPiBidXQgLSB0aGlzIGlzIG5vdCBhY3R1YWxseSBwYXJ0IG9mIHRoZSBwbHVn aW4gQVBJLiBpdCBqdXN0IGxvb2tzIGxpa2UgaXQKPiBiZWNhdXNlIFBsdWdpbidzIGltcGxlbWVu dGF0aW9uIG9mIHBhdGggKHdoaWNoIGlzIHRoZSBhY3R1YWwgQVBJKSBjYWxscwo+IGl0LCBhbmQg dGh1cyBwbHVnaW5zIGRlcml2ZWQgZnJvbSB0aGF0IGJhc2UgaW1wbGVtZW50IG9yIGNhbGwgaXQg YXMKPiB3ZWxsLgo+Cj4gdGhlIHB1YmxpYyBpbnRlcmZhY2UgaWYgeW91IHdhbnQgYSBmaWxlIG9y IGJsb2NrZGV2IHBhdGggZm9yIGEgZ2l2ZW4KPiB2b2xpZCBpcyBQVkU6OlN0b3JhZ2U6OmFic19m aWxlc3lzdGVtX3BhdGgsIHdoaWNoIGludGVybmFsbHkgYWxzbyBjYWxscwo+IHRoZSBwbHVnaW4n cyBgcGF0aGAgbWV0aG9kLCBub3QgdGhlIG5vbi1wdWJsaWMgYGZpbGVzeXN0ZW1fcGF0aGAuCj4K PiA+ICsKPiA+ICsgICAgbXkgJHBhdGggPSAkcGx1Z2luLT5maWxlc3lzdGVtX3BhdGgoJHNjZmcs ICR2b2xuYW1lLCAkc25hcG5hbWUpCj4gPiArICAgIG15ICgkcGF0aCwgJHZtaWQsICR2dHlwZSkg PSAkcGx1Z2luLT5maWxlc3lzdGVtX3BhdGgoJHNjZmcsICR2b2xuYW1lLCAkc25hcG5hbWUpCj4g PiArCj4gPiArPWN1dAo+ID4gKwo+ID4gIHN1YiBmaWxlc3lzdGVtX3BhdGggewo+ID4gICAgICBt eSAoJGNsYXNzLCAkc2NmZywgJHZvbG5hbWUsICRzbmFwbmFtZSkgPSBAXzsKPiA+ICAgICAgY3Jv YWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiAgfQo+ID4gIAo+ID4gKz1oZWFk MyAkcGx1Z2luLT5wYXRoKFwlc2NmZywgJHZvbG5hbWUsICRzdG9yZWlkIFssICRzbmFwbmFtZV0p Cj4gPiArCj4gPiArQjxSRVFVSVJFRDo+IE11c3QgYmUgaW1wbGVtZW50ZWQgaW4gZXZlcnkgc3Rv cmFnZSBwbHVnaW4uCj4gPiArCj4gPiArUmV0dXJucyBhIHVuaXF1ZSBwYXRoIHRoYXQgcG9pbnRz IHRvIHRoZSBnaXZlbiB2b2x1bWUgb3Igc25hcHNob3QgZGVwZW5kaW5nCj4gPiArb24gdGhlIHVu ZGVybHlpbmcgc3RvcmFnZSBpbXBsZW1lbnRhdGlvbi4gRm9yIGZpbGUtYmFzZWQgc3RvcmFnZXMs IHRoaXMKPiA+ICttZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBhcyBDPEw8PCBmaWxlc3lz dGVtX3BhdGgoKXwvIiRwbHVnaW4tPmZpbGVzeXN0ZW1fcGF0aCguLi4pIiA+Pj4uCj4KPiB0aGlz IGlzIGludmVydGVkIChzZWUgYWJvdmUpLiBpdCBzaG91bGQgYWxzbyBub3RlIHRoYXQgaWYgdGhl cmUgaXMgYW4KPiBhY3R1YWwgcGF0aCBjb3JyZXNwb25kaW5nIHRvIGEgdm9sdW1lLCBpdCBzaG91 bGQgcmV0dXJuIHRoYXQsIGJ1dCB0aGF0Cj4gaXQgY2FuIGFsc28gcmV0dXJuIHNvbWV0aGluZyBl bHNlIHRoYXQgUWVtdSB1bmRlcnN0YW5kcyBpbiBsaWV1IG9mIGEKPiByZWFsIHBhdGguCj4KPiBp ZiBtdWx0aXBsZSBwYXRocyBleGlzdCwgaXQgc2hvdWxkIHJldHVybiB0aGUgbW9zdCBzcGVjaWZp Yy91bmlxdWUgb25lCj4gdG8gYXZvaWQgY29sbGlzaW9ucyBiZXR3ZWVuIG11bHRpcGxlIHBsdWdp biBpbnN0YW5jZXMgb2YgdGhlIHNhbWUKPiBzdG9yYWdlIHR5cGUuCj4KPiA+ICsKPiA+ICs9Y3V0 Cj4gPiArCj4gPiAgc3ViIHBhdGggewo+ID4gICAgICBteSAoJGNsYXNzLCAkc2NmZywgJHZvbG5h bWUsICRzdG9yZWlkLCAkc25hcG5hbWUpID0gQF87Cj4gPiAgICAgIGNyb2FrICJpbXBsZW1lbnQg bWUgaW4gc3ViLWNsYXNzXG4iOwo+ID4gIH0KPiA+ICAKPiA+ICs9aGVhZDMgJHBsdWdpbi0+Zmlu ZF9mcmVlX2Rpc2tuYW1lKCRzdG9yZWlkLCBcJXNjZmcsICR2bWlkIFssICRmbXQsICRhZGRfZm10 X3N1ZmZpeF0pCj4gPiArCj4gPiArPWhlYWQzICRwbHVnaW4tPmZpbmRfZnJlZV9kaXNrbmFtZSgu Li4pCj4gPiArCj4gPiArQjxSRVFVSVJFRDo+IE11c3QgYmUgaW1wbGVtZW50ZWQgaW4gZXZlcnkg c3RvcmFnZSBwbHVnaW4uCj4gPiArCj4gPiArRmluZHMgYW5kIHJldHVybnMgdGhlIG5leHQgYXZh aWxhYmxlIGRpc2sgbmFtZSwgdGhhdCBpcywgdGhlIHZvbHVtZSBuYW1lCj4gPiArKEM8JHZvbG5h bWU+KSBmb3IgYSBuZXcgZGlzayBpbWFnZS4gT3B0aW9uYWxseSwgQzwkZm10PiBzcGVjaWZpZXMg dGhlCj4gPiArZm9ybWF0IG9mIHRoZSBkaXNrIGltYWdlIGFuZCBDPCRhZGRfZm10X3N1ZmZpeD4g ZGVub3RlcyB3aGV0aGVyIEM8JGZtdD4KPiA+ICtzaG91bGQgYmUgYWRkZWQgYXMgc3VmZml4IHRv IHRoZSByZXN1bHRpbmcgbmFtZS4KPgo+IHNpbWlsYXJseSwgdGhpcyBpcyBub3QgYWN0dWFsbHkg cGFydCBvZiB0aGUgcGx1Z2luIEFQSSwgaXQgaXMgYW4KPiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwg b2YgdGhlIGV4aXN0aW5nIHBsdWdpbiBoaWVyYXJjaHkuIGl0IGlzIGN1cnJlbnRseQo+IGNhbGxl ZCBieSBQbHVnaW4ncyBjbG9uZSwgYWxsb2NhdGUgYW5kIHJlbmFtZSBmdW5jdGlvbmFsaXR5LCBz byBpZiB5b3UKPiBkb24ndCBpbXBsZW1lbnQvb3ZlcnJpZGUgaXQgeW91IG5lZWQgdG8gYWxzbyBv dmVycmlkZSB0aG9zZSAod2hpY2ggeW91Cj4gbGlrZWx5IG5lZWQgdG8gZG8gaW4gYW55IGNhc2Uu LikuCj4KPiB0aGVzZSB0d28gYXJlIGFjdHVhbGx5IGEgZ29vZCBleGFtcGxlIG9mIHdoYXQgSSBt ZWFudCB3aXRoIHRoZSBtZXNzaW5lc3MKPiBvZiBQbHVnaW4ucG0gbGVha2luZyBpZiB3ZSBjb250 aW51ZSBkZXJpdmluZyAqYWxsKiBwbHVnaW5zIGZyb20gaXQsCj4gaW5jbHVkaW5nIG5ldyBleHRl cm5hbCBvbmVzLi4KCi4uLiBZZWFoLCB0aGlzIGp1c3QgcmVhZmZpcm1zIG15IHN0YW5jZSB0aGF0 IGEgcHJvcGVyIGludmVzdGlnYXRpdmUgbG9vawphbmQgZG9jdW1lbnRhdGlvbiBmb3IgYWxsIG9m IHRoaXMgKnJlYWxseSogbmVjZXNzYXJ5LiBFdmVuIGFmdGVyIHRoaXMKZGlnaXRhbCBhcmNoYWVv bG9neSB0b3VyIHdlJ3ZlIGFwcGFyZW50bHkgbWlzc2VkIGEgbG90IG9mIGRldGFpbHMsIG9yIGlu CnRoZSBjYXNlIG9mIHRoZSB0d28gbWV0aG9kcyBhYm92ZSwgaW5jbHVkZWQgZGV0YWlscyB0aGF0 IGFyZW4ndCBhY3R1YWxseQpwYXJ0IG9mIHRoZSBwbHVnaW4gQVBJLgoKVGhhbmtzIGZvciBnb2lu ZyB0aHJvdWdoIGFsbCBvZiB0aGlzLCBieSB0aGUgd2F5IC0tIGl0J3MgcmVhbGx5IGhpZ2hseQph cHByZWNpYXRlZCEKCj4KPiA+ICsKPiA+ICs9Y3V0Cj4gPiArCj4gPiAgc3ViIGZpbmRfZnJlZV9k aXNrbmFtZSB7Cj4gPiAgICAgIG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJHZtaWQsICRm bXQsICRhZGRfZm10X3N1ZmZpeCkgPSBAXzsKPiA+ICAgICAgY3JvYWsgImltcGxlbWVudCBtZSBp biBzdWItY2xhc3NcbiI7Cj4gPiAtLSAKPiA+IDIuMzkuNQo+ID4gCj4gPiAKPiA+IAo+ID4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+IHB2ZS1kZXZl bCBtYWlsaW5nIGxpc3QKPiA+IHB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQo+ID4gaHR0cHM6 Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCj4g PiAKPiA+IAo+ID4gCj4KPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCj4gcHZlLWRldmVsIG1haWxpbmcgbGlzdAo+IHB2ZS1kZXZlbEBsaXN0cy5wcm94 bW94LmNvbQo+IGh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3Rp bmZvL3B2ZS1kZXZlbAoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpwdmUtZGV2ZWwgbWFpbGluZyBsaXN0CnB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNv bQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wdmUt ZGV2ZWwK