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 [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 07B311FF189 for <inbox@lore.proxmox.com>; Fri, 21 Mar 2025 14:36:39 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id C1F341E8EF; Fri, 21 Mar 2025 14:36:35 +0100 (CET) Mime-Version: 1.0 Date: Fri, 21 Mar 2025 14:36:00 +0100 Message-Id: <D8LZFVSKYZR2.3ITT59170YKMA@proxmox.com> From: "Alexander Zeidler" <a.zeidler@proxmox.com> To: "Lukas Wagner" <l.wagner@proxmox.com>, "Proxmox VE development discussion" <pve-devel@lists.proxmox.com> References: <20250313151734.258337-1-a.zeidler@proxmox.com> <3a9988eb-d50f-440f-816b-e8a8b7353e6c@proxmox.com> In-Reply-To: <3a9988eb-d50f-440f-816b-e8a8b7353e6c@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.086 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_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] [RFC proxmox] fix #6143: notify: allow overriding notification templates 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> T24gTW9uIE1hciAxNywgMjAyNSBhdCAyOjQzIFBNIENFVCwgTHVrYXMgV2FnbmVyIHdyb3RlOgo+ IFRoYW5rcyBhIGxvdCBmb3IgdGhpcyBwYXRjaCwgbXVjaCBhcHByZWNpYXRlZCEKVGhhbmsgeW91 ISBBbGwgb2YgeW91ciBjb21tZW50cyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIG5ldyBwYXRjaDoK aHR0cHM6Ly9sb3JlLnByb3htb3guY29tL3B2ZS1kZXZlbC8yMDI1MDMyMTEzMzM0MS4xNTEzNDAt MS1hLnplaWRsZXJAcHJveG1veC5jb20vCgo+Cj4gT24gIDIwMjUtMDMtMTMgMTY6MTcsIEFsZXhh bmRlciBaZWlkbGVyIHdyb3RlOgo+PiBQcmV2aW91c2x5LCBub3RpZmljYXRpb24gdGVtcGxhdGVz IGNvdWxkIGJlIG1vZGlmaWVkIGJ5IHRoZSB1c2VyLCBidXQKPj4gdGhlc2Ugd2VyZSBvdmVyd3Jp dHRlbiBhZ2FpbiB3aXRoIGluc3RhbGxpbmcgbmV3ZXIgcGFja2FnZSB2ZXJzaW9ucyBvZgo+PiBw dmUtbWFuYWdlciBhbmQgcHJveG1veC1iYWNrdXAuCj4+IAo+PiBOb3cgb3ZlcnJpZGUgdGVtcGxh dGVzIGNhbiBiZSBjcmVhdGVkIGNsdXN0ZXItd2lkZSBpbiB0aGUgcGF0aAo+PiDigJwvZXRjL3tw dmUscHJveG1veC1iYWNrdXB9L25vdGlmaWNhdGlvbi10ZW1wbGF0ZXMve25hbWVzcGFjZX3igJ0s IHdoaWNoCj4+IGFyZSB1c2VkIHdpdGggcHJpb3JpdHkuIFRoZSBmb2xkZXIgc3RydWN0dXJlIGhh cyB0byBiZSBjcmVhdGVkIGFuZAo+PiBwb3B1bGF0ZWQgbWFudWFsbHkgKGUuZy4gL2V0Yy9wdmUv bm90aWZpY2F0aW9uLXRlbXBsYXRlcy9kZWZhdWx0LykuCj4+IAo+PiBJZiBvdmVycmlkZSB0ZW1w bGF0ZXMgYXJlIG5vdCBleGlzdGluZyBvciB0aGVpciByZW5kZXJpbmcgZmFpbHMsIHRoZQo+PiB2 ZW5kb3IgdGVtcGxhdGVzIGluCj4+ICIvdXNyL3NoYXJlL3twdmUtbWFuYWdlcixwcm94bW94LWJh Y2t1cH0vdGVtcGxhdGVzL2RlZmF1bHQvIiBhcmUgdXNlZC4KPj4gCj4+IFNlcXVlbmNlOiBbb3Zl cnJpZGUgaHRtbCAtPiB2ZW5kb3IgaHRtbCAtPl0gb3ZlcnJpZGUgdHh0IC0+IHZlbmRvciB0eHQK Pj4gCj4+IEFuIGVycm9yIGlzIG9ubHkgcmV0dXJuZWQgaWYgbm9uZSBvZiB0aGUgdGVtcGxhdGUg Y2FuZGlkYXRlcyBjb3VsZCBiZQo+PiB1c2VkLiBVc2luZyBhbiBvdmVycmlkZSB0ZW1wbGF0ZSBn ZXRzIG5vdCBsb2dnZWQuCj4+IAo+PiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgWmVpZGxlciA8 YS56ZWlkbGVyQHByb3htb3guY29tPgo+PiAtLS0KPj4gCj4+IFF1ZXN0aW9uczoKPj4gLSBJcyB0 aGVyZSBhbnl0aGluZyBhZ2FpbnN0IHRoZSBjaG9zZW4gb3ZlcnJpZGUgcGF0aD8KPgo+IElNTyB0 aGV5IGFyZSBmaW5lLCBidXQgc29tZWJvZHkgZWxzZSBzaG91bGQgZG91YmxlLWNoZWNrLgo+Cj4+ IAo+PiBVcGNvbWluZyAoZnJvbSBidWd6aWxsYSByZXBvcnQpOgo+PiAtIEx1a2FzIFdhZ25lcjog RXhpc3RpbmcgdGVtcGxhdGVzL3ZhcmlhYmxlcy9oZWxwZXJzIGhhdmUgYmVlbgo+PiAgIHJldmll d2VkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlIE9LIHRvIGJlIHB1YmxpYyBBUEkKPgo+IEkn bGwgcmV2aXNpdCB0aGUgZXhpc3RpbmcgdGVtcGxhdGVzIGluIHRoZSBuZXh0IGRheXMgYW5kIHNl ZSBpZiB0aGVyZSBpcyBhbnl0aGluZwo+IHdlIHNob3VsZCBmaXggdXAgYmVmb3JlIGV4cG9zaW5n IHRoaXMgdG8gdGhlIHVzZXIuIFRoaXMgcGF0Y2gKPiBzaG91bGQgbm90IGJlIG1lcmdlZCB1bnRp bCB0aGUgZXhpc3RpbmcgdGVtcGxhdGVzIGhhdmUgYmVlbiBhdWRpdGVkLgo+Cj4+IC0gVGhlIHN0 ZXBzIG5lZWRlZCB0byBvdmVycmlkZSB0aGUgdGVtcGxhdGUgYXJlIGFkZGVkIHRvIHRoZQo+PiAg IG5vdGlmaWNhdGlvbiBkb2NzCj4+IC0gVGVtcGxhdGUgdmFyaWFibGVzIGFuZCBoZWxwZXJzIGFy ZSBkb2N1bWVudGVkCj4+IAo+PiAKPj4gIHByb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L21vZC5y cyAgfCAgIDMgKy0KPj4gIHByb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Bicy5ycyAgfCAgIDkg KystCj4+ICBwcm94bW94LW5vdGlmeS9zcmMvY29udGV4dC9wdmUucnMgIHwgIDEwICsrLQo+PiAg cHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvdGVzdC5ycyB8ICAgMSArCj4+ICBwcm94bW94LW5v dGlmeS9zcmMvcmVuZGVyZXIvbW9kLnJzIHwgMTI0ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tCj4+ICA1IGZpbGVzIGNoYW5nZWQsIDk5IGluc2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygt KQo+PiAKPj4gZGlmZiAtLWdpdCBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L21vZC5ycyBi L3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L21vZC5ycwo+PiBpbmRleCBjMGE1YTEzYi4uYzQ2 NDlkOTEgMTAwNjQ0Cj4+IC0tLSBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L21vZC5ycwo+ PiArKysgYi9wcm94bW94LW5vdGlmeS9zcmMvY29udGV4dC9tb2QucnMKPj4gQEAgLTI0LDExICsy NCwxMiBAQCBwdWIgdHJhaXQgQ29udGV4dDogU2VuZCArIFN5bmMgKyBEZWJ1ZyB7Cj4+ICAgICAg Zm4gaHR0cF9wcm94eV9jb25maWcoJnNlbGYpIC0+IE9wdGlvbjxTdHJpbmc+Owo+PiAgICAgIC8v LyBSZXR1cm4gZGVmYXVsdCBjb25maWcgZm9yIGJ1aWx0LWluIHRhcmdldHMvbWF0Y2hlcnMuCj4+ ICAgICAgZm4gZGVmYXVsdF9jb25maWcoJnNlbGYpIC0+ICYnc3RhdGljIHN0cjsKPj4gLSAgICAv Ly8gTG9va3VwIGEgdGVtcGxhdGUgaW4gYSBjZXJ0YWluIChvcHRpb25hbCkgbmFtZXNwYWNlCj4+ ICsgICAgLy8vIExvb2t1cCBhIHRlbXBsYXRlIChvciBpdHMgb3ZlcnJpZGUpIGluIGEgY2VydGFp biAob3B0aW9uYWwpIG5hbWVzcGFjZQo+PiAgICAgIGZuIGxvb2t1cF90ZW1wbGF0ZSgKPj4gICAg ICAgICAgJnNlbGYsCj4+ICAgICAgICAgIGZpbGVuYW1lOiAmc3RyLAo+PiAgICAgICAgICBuYW1l c3BhY2U6IE9wdGlvbjwmc3RyPiwKPj4gKyAgICAgICAgdXNlX292ZXJyaWRlOiBib29sLAo+PiAg ICAgICkgLT4gUmVzdWx0PE9wdGlvbjxTdHJpbmc+LCBFcnJvcj47Cj4+ICB9Cj4+ICAKPj4gZGlm ZiAtLWdpdCBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Bicy5ycyBiL3Byb3htb3gtbm90 aWZ5L3NyYy9jb250ZXh0L3Bicy5ycwo+PiBpbmRleCBlODEwNmM1Ny4uZGE0ZDliYTAgMTAwNjQ0 Cj4+IC0tLSBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Bicy5ycwo+PiArKysgYi9wcm94 bW94LW5vdGlmeS9zcmMvY29udGV4dC9wYnMucnMKPj4gQEAgLTEwOSw4ICsxMDksMTUgQEAgaW1w bCBDb250ZXh0IGZvciBQQlNDb250ZXh0IHsKPj4gICAgICAgICAgJnNlbGYsCj4+ICAgICAgICAg IGZpbGVuYW1lOiAmc3RyLAo+PiAgICAgICAgICBuYW1lc3BhY2U6IE9wdGlvbjwmc3RyPiwKPj4g KyAgICAgICAgdXNlX292ZXJyaWRlOiBib29sLAo+Cj4gVGhlIGBUZW1wbGF0ZVNvdXJjZWAgdHlw ZSBJIG1lbnRpb24gYmVsb3cgd291bGQgYWxzbyBiZSB1c2VkIGhlcmUKPiBpbnN0ZWFkIG9mIGEg Ym9vbAo+Cj4+ICAgICAgKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmluZz4sIEVycm9yPiB7Cj4+IC0g ICAgICAgIGxldCBwYXRoID0gUGF0aDo6bmV3KCIvdXNyL3NoYXJlL3Byb3htb3gtYmFja3VwL3Rl bXBsYXRlcyIpCj4+ICsgICAgICAgIGxldCBwYXRoID0gaWYgdXNlX292ZXJyaWRlIHsKPj4gKyAg ICAgICAgICAgICIvZXRjL3Byb3htb3gtYmFja3VwL25vdGlmaWNhdGlvbi10ZW1wbGF0ZXMiCj4+ ICsgICAgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAgICAiL3Vzci9zaGFyZS9wcm94bW94LWJh Y2t1cC90ZW1wbGF0ZXMiCj4+ICsgICAgICAgIH07Cj4+ICsKPj4gKyAgICAgICAgbGV0IHBhdGgg PSBQYXRoOjpuZXcoJnBhdGgpCj4+ICAgICAgICAgICAgICAuam9pbihuYW1lc3BhY2UudW53cmFw X29yKCJkZWZhdWx0IikpCj4+ICAgICAgICAgICAgICAuam9pbihmaWxlbmFtZSk7Cj4+ICAKPj4g ZGlmZiAtLWdpdCBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycyBiL3Byb3htb3gt bm90aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycwo+PiBpbmRleCBkNDlhYjI3Yy4uMDViMWI1YjcgMTAw NjQ0Cj4+IC0tLSBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycwo+PiArKysgYi9w cm94bW94LW5vdGlmeS9zcmMvY29udGV4dC9wdmUucnMKPj4gQEAgLTU4LDEwICs1OCwxOCBAQCBp bXBsIENvbnRleHQgZm9yIFBWRUNvbnRleHQgewo+PiAgICAgICAgICAmc2VsZiwKPj4gICAgICAg ICAgZmlsZW5hbWU6ICZzdHIsCj4+ICAgICAgICAgIG5hbWVzcGFjZTogT3B0aW9uPCZzdHI+LAo+ PiArICAgICAgICB1c2Vfb3ZlcnJpZGU6IGJvb2wsCj4+ICAgICAgKSAtPiBSZXN1bHQ8T3B0aW9u PFN0cmluZz4sIEVycm9yPiB7Cj4+IC0gICAgICAgIGxldCBwYXRoID0gUGF0aDo6bmV3KCIvdXNy L3NoYXJlL3B2ZS1tYW5hZ2VyL3RlbXBsYXRlcyIpCj4+ICsgICAgICAgIGxldCBwYXRoID0gaWYg dXNlX292ZXJyaWRlIHsKPj4gKyAgICAgICAgICAgICIvZXRjL3B2ZS9ub3RpZmljYXRpb24tdGVt cGxhdGVzIgo+PiArICAgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgIi91c3Ivc2hhcmUv cHZlLW1hbmFnZXIvdGVtcGxhdGVzIgo+PiArICAgICAgICB9Owo+PiArCj4+ICsgICAgICAgIGxl dCBwYXRoID0gUGF0aDo6bmV3KCZwYXRoKQo+PiAgICAgICAgICAgICAgLmpvaW4obmFtZXNwYWNl LnVud3JhcF9vcigiZGVmYXVsdCIpKQo+PiAgICAgICAgICAgICAgLmpvaW4oZmlsZW5hbWUpOwo+ PiArCj4+ICAgICAgICAgIGxldCB0ZW1wbGF0ZV9zdHJpbmcgPSBwcm94bW94X3N5czo6ZnM6OmZp bGVfcmVhZF9vcHRpb25hbF9zdHJpbmcocGF0aCkKPj4gICAgICAgICAgICAgIC5tYXBfZXJyKHxl cnJ8IEVycm9yOjpHZW5lcmljKGZvcm1hdCEoImNvdWxkIG5vdCBsb2FkIHRlbXBsYXRlOiB7ZXJy fSIpKSk/Owo+PiAgICAgICAgICBPayh0ZW1wbGF0ZV9zdHJpbmcpCj4+IGRpZmYgLS1naXQgYS9w cm94bW94LW5vdGlmeS9zcmMvY29udGV4dC90ZXN0LnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2Nv bnRleHQvdGVzdC5ycwo+PiBpbmRleCA1ZGYyNWQwNS4uNmVmZDg0YzUgMTAwNjQ0Cj4+IC0tLSBh L3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Rlc3QucnMKPj4gKysrIGIvcHJveG1veC1ub3Rp Znkvc3JjL2NvbnRleHQvdGVzdC5ycwo+PiBAQCAtMjksNiArMjksNyBAQCBpbXBsIENvbnRleHQg Zm9yIFRlc3RDb250ZXh0IHsKPj4gICAgICAgICAgJnNlbGYsCj4+ICAgICAgICAgIF9maWxlbmFt ZTogJnN0ciwKPj4gICAgICAgICAgX25hbWVzcGFjZTogT3B0aW9uPCZzdHI+LAo+PiArICAgICAg ICBfdXNlX292ZXJyaWRlOiBib29sLAo+PiAgICAgICkgLT4gUmVzdWx0PE9wdGlvbjxTdHJpbmc+ LCBFcnJvcj4gewo+PiAgICAgICAgICBPayhTb21lKFN0cmluZzo6bmV3KCkpKQo+PiAgICAgIH0K Pj4gZGlmZiAtLWdpdCBhL3Byb3htb3gtbm90aWZ5L3NyYy9yZW5kZXJlci9tb2QucnMgYi9wcm94 bW94LW5vdGlmeS9zcmMvcmVuZGVyZXIvbW9kLnJzCj4+IGluZGV4IGUwNThlYTIyLi5hYzUxOWJl ZSAxMDA2NDQKPj4gLS0tIGEvcHJveG1veC1ub3RpZnkvc3JjL3JlbmRlcmVyL21vZC5ycwo+PiAr KysgYi9wcm94bW94LW5vdGlmeS9zcmMvcmVuZGVyZXIvbW9kLnJzCj4+IEBAIC0xOTEsNyArMTkx LDcgQEAgaW1wbCBWYWx1ZVJlbmRlckZ1bmN0aW9uIHsKPj4gIH0KPj4gIAo+PiAgLy8vIEF2YWls YWJsZSB0ZW1wbGF0ZSB0eXBlcwo+PiAtI1tkZXJpdmUoQ29weSwgQ2xvbmUpXQo+PiArI1tkZXJp dmUoQ29weSwgQ2xvbmUsIFBhcnRpYWxFcSldCj4+ICBwdWIgZW51bSBUZW1wbGF0ZVR5cGUgewo+ PiAgICAgIC8vLyBIVE1MIGJvZHkgdGVtcGxhdGUKPj4gICAgICBIdG1sQm9keSwKPj4gQEAgLTI1 MCw3MCArMjUwLDEwNCBAQCBpbXBsIEJsb2NrUmVuZGVyRnVuY3Rpb25zIHsKPj4gIH0KPj4gIAo+ PiAgZm4gcmVuZGVyX3RlbXBsYXRlX2ltcGwoCj4+IC0gICAgdGVtcGxhdGU6ICZzdHIsCj4+ICAg ICAgZGF0YTogJlZhbHVlLAo+PiAgICAgIHJlbmRlcmVyOiBUZW1wbGF0ZVR5cGUsCj4+IC0pIC0+ IFJlc3VsdDxTdHJpbmcsIEVycm9yPiB7Cj4+IC0gICAgbGV0IG11dCBoYW5kbGViYXJzID0gSGFu ZGxlYmFyczo6bmV3KCk7Cj4+IC0gICAgaGFuZGxlYmFycy5yZWdpc3Rlcl9lc2NhcGVfZm4ocmVu ZGVyZXIuZXNjYXBlX2ZuKCkpOwo+PiArICAgIGZpbGVuYW1lOiAmc3RyLAo+PiArICAgIHVzZV9v dmVycmlkZTogYm9vbCwKPj4gKyAgICBodG1sX2ZhbGxiYWNrOiBib29sLAo+PiArKSAtPiBSZXN1 bHQ8T3B0aW9uPFN0cmluZz4sIEVycm9yPiB7Cj4+ICsgICAgbGV0IHRlbXBsYXRlX3N0cmluZyA9 IGNvbnRleHQ6OmNvbnRleHQoKS5sb29rdXBfdGVtcGxhdGUoJmZpbGVuYW1lLCBOb25lLCB1c2Vf b3ZlcnJpZGUpPzsKPj4gKwo+PiArICAgIGlmIGxldCBTb21lKHRlbXBsYXRlX3N0cmluZykgPSB0 ZW1wbGF0ZV9zdHJpbmcgewo+PiArICAgICAgICBsZXQgbXV0IGhhbmRsZWJhcnMgPSBIYW5kbGVi YXJzOjpuZXcoKTsKPj4gKyAgICAgICAgaGFuZGxlYmFycy5yZWdpc3Rlcl9lc2NhcGVfZm4ocmVu ZGVyZXIuZXNjYXBlX2ZuKCkpOwo+PiArCj4+ICsgICAgICAgIGxldCBibG9ja19yZW5kZXJfZm5z ID0gcmVuZGVyZXIuYmxvY2tfcmVuZGVyX2ZucygpOwo+PiArICAgICAgICBibG9ja19yZW5kZXJf Zm5zLnJlZ2lzdGVyX2hlbHBlcnMoJm11dCBoYW5kbGViYXJzKTsKPj4gIAo+PiAtICAgIGxldCBi bG9ja19yZW5kZXJfZm5zID0gcmVuZGVyZXIuYmxvY2tfcmVuZGVyX2ZucygpOwo+PiAtICAgIGJs b2NrX3JlbmRlcl9mbnMucmVnaXN0ZXJfaGVscGVycygmbXV0IGhhbmRsZWJhcnMpOwo+PiArICAg ICAgICBWYWx1ZVJlbmRlckZ1bmN0aW9uOjpyZWdpc3Rlcl9oZWxwZXJzKCZtdXQgaGFuZGxlYmFy cyk7Cj4+ICsKPj4gKyAgICAgICAgaGFuZGxlYmFycy5yZWdpc3Rlcl9oZWxwZXIoCj4+ICsgICAg ICAgICAgICAicmVsYXRpdmUtcGVyY2VudGFnZSIsCj4+ICsgICAgICAgICAgICBCb3g6Om5ldyho YW5kbGViYXJzX3JlbGF0aXZlX3BlcmNlbnRhZ2VfaGVscGVyKSwKPj4gKyAgICAgICAgKTsKPj4g IAo+PiAtICAgIFZhbHVlUmVuZGVyRnVuY3Rpb246OnJlZ2lzdGVyX2hlbHBlcnMoJm11dCBoYW5k bGViYXJzKTsKPj4gKyAgICAgICAgbGV0IHJlbmRlcmVkX3RlbXBsYXRlID0gaGFuZGxlYmFycwo+ PiArICAgICAgICAgICAgLnJlbmRlcl90ZW1wbGF0ZSgmdGVtcGxhdGVfc3RyaW5nLCBkYXRhKQo+ PiArICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgRXJyb3I6OlJlbmRlckVycm9yKGVyci5pbnRv KCkpKT87Cj4+ICAKPj4gLSAgICBoYW5kbGViYXJzLnJlZ2lzdGVyX2hlbHBlcigKPj4gLSAgICAg ICAgInJlbGF0aXZlLXBlcmNlbnRhZ2UiLAo+PiAtICAgICAgICBCb3g6Om5ldyhoYW5kbGViYXJz X3JlbGF0aXZlX3BlcmNlbnRhZ2VfaGVscGVyKSwKPj4gLSAgICApOwo+PiArICAgICAgICBsZXQg bXV0IHJlbmRlcmVkX3RlbXBsYXRlID0gcmVuZGVyZXIucG9zdHByb2Nlc3MocmVuZGVyZWRfdGVt cGxhdGUpOwo+PiAgCj4+IC0gICAgbGV0IHJlbmRlcmVkX3RlbXBsYXRlID0gaGFuZGxlYmFycwo+ PiAtICAgICAgICAucmVuZGVyX3RlbXBsYXRlKHRlbXBsYXRlLCBkYXRhKQo+PiAtICAgICAgICAu bWFwX2Vycih8ZXJyfCBFcnJvcjo6UmVuZGVyRXJyb3IoZXJyLmludG8oKSkpPzsKPj4gKyAgICAg ICAgaWYgaHRtbF9mYWxsYmFjayB7Cj4+ICsgICAgICAgICAgICByZW5kZXJlZF90ZW1wbGF0ZSA9 IGZvcm1hdCEoCj4+ICsgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxwcmU+e308L3ByZT48 L2JvZHk+PC9odG1sPiIsCj4+ICsgICAgICAgICAgICAgICAgaGFuZGxlYmFyczo6aHRtbF9lc2Nh cGUoJnJlbmRlcmVkX3RlbXBsYXRlKQo+PiArICAgICAgICAgICAgKTsKPj4gKyAgICAgICAgfQo+ PiAgCj4+IC0gICAgT2socmVuZGVyZWRfdGVtcGxhdGUpCj4+ICsgICAgICAgIE9rKFNvbWUocmVu ZGVyZWRfdGVtcGxhdGUpKQo+PiArICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgIE9rKE5vbmUpCj4+ ICsgICAgfQo+PiAgfQo+PiAgCj4+ICAvLy8gUmVuZGVyIGEgdGVtcGxhdGUgc3RyaW5nLgo+PiAg Ly8vCj4+IC0vLy8gVGhlIG91dHB1dCBmb3JtYXQgY2FuIGJlIGNob3NlbiB2aWEgdGhlIGByZW5k ZXJlcmAgcGFyYW1ldGVyIChzZWUgW1RlbXBsYXRlVHlwZV0KPj4gLS8vLyBmb3IgYXZhaWxhYmxl IG9wdGlvbnMpLgo+PiArLy8vIFRoZSBvdXRwdXQgZm9ybWF0IGNhbiBiZSBjaG9zZW4gdmlhIHRo ZSBgdHlgIHBhcmFtZXRlciAoc2VlIFtUZW1wbGF0ZVR5cGVdCj4+ICsvLy8gZm9yIGF2YWlsYWJs ZSBvcHRpb25zKS4gVXNlIGFuIG92ZXJyaWRlIHRlbXBsYXRlIGlmIGV4aXN0aW5nIGFuZCByZW5k ZXJhYmxlLAo+Cj4gSSB0aGluayB0aGUgaW1wZXJhdGl2ZSBtb29kL3ZvaWNlIGlzIGEgYml0IGNv bmZ1c2luZyB0byBkZXNjcmliZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhIGZ1bmN0aW9uLgo+IEl0 IHJlYWRzIGxpa2UgeW91IGFyZSBnaXZpbmcgYSBjb21tYW5kIHRvIHRoZSByZWFkZXIuCkltcGxl bWVudGVkIGluIG5ldyBwYXRjaC4KCj4KPiBIb3cgYWJvdXQgc29tZXRoaW5nIGxpa2U6Cj4KPiAi VGhlIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHJlbmRlciBhbiBvdmVycmlkZSB0ZW1wbGF0ZSBpZiBp dCBleGlzdCBhbmQgaXMgcmVuZGVyYWJsZSwgb3RoZXJ3aXNlCj4gaXQgdXNlcyB0aGUgb3JpZ2lu YWwgdGVtcGxhdGUuIElmIHRoZSBbVGVtcGxhdGVUeXBlXSBpcyBgSHRtbEJvZHlgIGJ1dCBubyBI VE1MIHRlbXBsYXRlIGNvdWxkIGJlCj4gZm91bmQgb3IgcmVuZGVyZWQsIGl0IGZhbGxzIGJhY2sg dG8gdGhlIHBsYWludGV4dCB0ZW1wbGF0ZSwgZW5jYXBzdWxhdGluZyB0aGUgY29udGVudCBpbgo+ IGEgcHJlLWZvcm1hdHRlZCBIVE1MIGJsb2NrICg8cHJlPikuIgo+Cj4+ICsvLy8gb3RoZXJ3aXNl IGZhbGwgYmFjayB0byBvcmlnaW5hbCB0ZW1wbGF0ZS4gSWYgW1RlbXBsYXRlVHlwZV0gaXMgYEh0 bWxCb2R5YCBidXQgbm8KPj4gKy8vLyBIVE1MIHRlbXBsYXRlIGNvdWxkIGJlIHVzZWQsIGZhbGwg YmFjayB0byBwbGFpbnRleHQgdGVtcGxhdGVzIGFuZCBhZGQgdGhlIHRhZ3MKPj4gKy8vLyBgPGh0 bWw+PGJvZHk+PHByZT5gLgo+PiAgcHViIGZuIHJlbmRlcl90ZW1wbGF0ZSgKPj4gICAgICBtdXQg dHk6IFRlbXBsYXRlVHlwZSwKPj4gICAgICB0ZW1wbGF0ZTogJnN0ciwKPj4gICAgICBkYXRhOiAm VmFsdWUsCj4+ICApIC0+IFJlc3VsdDxTdHJpbmcsIEVycm9yPiB7Cj4+IC0gICAgbGV0IGZpbGVu YW1lID0gZm9ybWF0ISgie3RlbXBsYXRlfS17c3VmZml4fSIsIHN1ZmZpeCA9IHR5LmZpbGVfc3Vm Zml4KCkpOwo+PiAtCj4+IC0gICAgbGV0IHRlbXBsYXRlX3N0cmluZyA9IGNvbnRleHQ6OmNvbnRl eHQoKS5sb29rdXBfdGVtcGxhdGUoJmZpbGVuYW1lLCBOb25lKT87Cj4+IC0KPj4gLSAgICBsZXQg KHRlbXBsYXRlX3N0cmluZywgZmFsbGJhY2spID0gbWF0Y2ggKHRlbXBsYXRlX3N0cmluZywgdHkp IHsKPj4gLSAgICAgICAgKE5vbmUsIFRlbXBsYXRlVHlwZTo6SHRtbEJvZHkpID0+IHsKPj4gLSAg ICAgICAgICAgIHR5ID0gVGVtcGxhdGVUeXBlOjpQbGFpbnRleHRCb2R5Owo+PiAtICAgICAgICAg ICAgbGV0IHBsYWludGV4dF9maWxlbmFtZSA9IGZvcm1hdCEoInt0ZW1wbGF0ZX0te3N1ZmZpeH0i LCBzdWZmaXggPSB0eS5maWxlX3N1ZmZpeCgpKTsKPj4gLSAgICAgICAgICAgICgKPj4gLSAgICAg ICAgICAgICAgICBjb250ZXh0Ojpjb250ZXh0KCkubG9va3VwX3RlbXBsYXRlKCZwbGFpbnRleHRf ZmlsZW5hbWUsIE5vbmUpPywKPj4gLSAgICAgICAgICAgICAgICB0cnVlLAo+PiAtICAgICAgICAg ICAgKQo+PiArICAgIGxldCBtdXQgdXNlX292ZXJyaWRlID0gdHJ1ZTsKPj4gKyAgICBsZXQgbXV0 IGh0bWxfZmFsbGJhY2sgPSBmYWxzZTsKPj4gKwo+PiArICAgIGxvb3Agewo+PiArICAgICAgICBs ZXQgZmlsZW5hbWUgPSBmb3JtYXQhKCJ7dGVtcGxhdGV9LXtzdWZmaXh9Iiwgc3VmZml4ID0gdHku ZmlsZV9zdWZmaXgoKSk7Cj4+ICsgICAgICAgIGxldCByZXN1bHQgPSByZW5kZXJfdGVtcGxhdGVf aW1wbChkYXRhLCB0eSwgJmZpbGVuYW1lLCB1c2Vfb3ZlcnJpZGUsIGh0bWxfZmFsbGJhY2spOwo+ PiArCj4+ICsgICAgICAgIG1hdGNoIHJlc3VsdCB7Cj4+ICsgICAgICAgICAgICBPayhTb21lKHMp KSA9PiB7Cj4+ICsgICAgICAgICAgICAgICAgcmV0dXJuIE9rKHMpOwo+PiArICAgICAgICAgICAg fQo+PiArICAgICAgICAgICAgT2soTm9uZSkgPT4ge30KPj4gKyAgICAgICAgICAgIEVycihlcnIp ID0+IHsKPj4gKyAgICAgICAgICAgICAgICBsZXQgc291cmNlID0gaWYgdXNlX292ZXJyaWRlIHsg Im92ZXJyaWRlIiB9IGVsc2UgeyAidmVuZG9yIiB9Owo+PiArICAgICAgICAgICAgICAgIHRyYWNp bmc6OmVycm9yISgiZmFpbGVkIHRvIHJlbmRlciB7c291cmNlfSB0ZW1wbGF0ZSAne2ZpbGVuYW1l fSc6IHtlcnJ9Iik7Cj4+ICsgICAgICAgICAgICB9Cj4+ICAgICAgICAgIH0KPj4gLSAgICAgICAg KHRlbXBsYXRlX3N0cmluZywgXykgPT4gKHRlbXBsYXRlX3N0cmluZywgZmFsc2UpLAo+PiAtICAg IH07Cj4+IC0KPj4gLSAgICBsZXQgdGVtcGxhdGVfc3RyaW5nID0gdGVtcGxhdGVfc3RyaW5nLm9r X29yKEVycm9yOjpHZW5lcmljKGZvcm1hdCEoCj4+IC0gICAgICAgICJjb3VsZCBub3QgbG9hZCB0 ZW1wbGF0ZSAne3RlbXBsYXRlfSciCj4+IC0gICAgKSkpPzsKPj4gIAo+PiAtICAgIGxldCBtdXQg cmVuZGVyZWQgPSByZW5kZXJfdGVtcGxhdGVfaW1wbCgmdGVtcGxhdGVfc3RyaW5nLCBkYXRhLCB0 eSk/Owo+PiAtICAgIHJlbmRlcmVkID0gdHkucG9zdHByb2Nlc3MocmVuZGVyZWQpOwo+PiAtCj4+ IC0gICAgaWYgZmFsbGJhY2sgewo+PiAtICAgICAgICByZW5kZXJlZCA9IGZvcm1hdCEoCj4+IC0g ICAgICAgICAgICAiPGh0bWw+PGJvZHk+PHByZT57fTwvcHJlPjwvYm9keT48L2h0bWw+IiwKPj4g LSAgICAgICAgICAgIGhhbmRsZWJhcnM6Omh0bWxfZXNjYXBlKCZyZW5kZXJlZCkKPj4gLSAgICAg ICAgKTsKPj4gKyAgICAgICAgbWF0Y2ggKHR5LCB1c2Vfb3ZlcnJpZGUpIHsKPj4gKyAgICAgICAg ICAgIChUZW1wbGF0ZVR5cGU6Okh0bWxCb2R5LCB0cnVlKSA9PiB7Cj4+ICsgICAgICAgICAgICAg ICAgdXNlX292ZXJyaWRlID0gZmFsc2U7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAg ICAoVGVtcGxhdGVUeXBlOjpIdG1sQm9keSwgZmFsc2UpID0+IHsKPj4gKyAgICAgICAgICAgICAg ICB0eSA9IFRlbXBsYXRlVHlwZTo6UGxhaW50ZXh0Qm9keTsKPj4gKyAgICAgICAgICAgICAgICB1 c2Vfb3ZlcnJpZGUgPSB0cnVlOwo+PiArICAgICAgICAgICAgICAgIGh0bWxfZmFsbGJhY2sgPSB0 cnVlOwo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6UGxh aW50ZXh0Qm9keSwgdHJ1ZSkgPT4gewo+PiArICAgICAgICAgICAgICAgIHVzZV9vdmVycmlkZSA9 IGZhbHNlOwo+PiArICAgICAgICAgICAgfQo+CgpJbXBsZW1lbnRlZCBpbiBuZXcgcGF0Y2g6Cj4g QnR3LCB5b3UgY2FuIG1hdGNoIG9uIG11bHRpcGxlIHZhcmlhbnRzIGF0IHRoZSBzYW1lIHRpbWUg dXNpbmcgdGhlIHwgb3BlcmF0b3IuCj4gICAgICAgICAgICAoVGVtcGxhdGVUeXBlOjpIdG1sQm9k eSB8IFRlbXBsYXRlVHlwZTo6UGxhaW50ZXh0Qm9keSB8IFRlbXBsYXRlVHlwZTo6U3ViamVjdCwg dHJ1ZSkgPT4gewo+ICAgICAgICAgICAgICAgIHVzZV9vdmVycmlkZSA9IGZhbHNlOwo+ICAgICAg ICAgICAgfQo+Cj4gSSB0aGluayB0aGlzIHdvdWxkIGJlIG5pY2UgdG8gdXNlIGluIHRoaXMgY2Fz ZSwgdGhlcmUgYXJlIGFjdHVhbGx5IG9ubHkKPiAzIGRpc3RpbmN0IGJvZGllcyBvZiB0aGUgbWF0 Y2ggYXJtczoKPiAgIC0gc2V0dGluZyBvdmVycmlkZSB0byBmYWxzZQo+ICAgLSBicmVha2luZyBm cm9tIHRoZSBsb29wCj4gICAtIHNldHRpbmcgdHkgZm9yIEhUTUwtZnJvbS1wbGFpbiBmYWxsYmFj aywgcmVzZXR0aW5nIG92ZXJyaWRlIHRvIHRydWUKPgo+PiArICAgICAgICAgICAgKFRlbXBsYXRl VHlwZTo6UGxhaW50ZXh0Qm9keSwgZmFsc2UpID0+IHsKPj4gKyAgICAgICAgICAgICAgICAvLyBy ZXR1cm4gZXJyb3IsIG5vIG90aGVyIG9wdGlvbnMKPj4gKyAgICAgICAgICAgICAgICBicmVhazsK Pj4gKyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgIChUZW1wbGF0ZVR5cGU6OlN1YmplY3Qs IHRydWUpID0+IHsKPj4gKyAgICAgICAgICAgICAgICB1c2Vfb3ZlcnJpZGUgPSBmYWxzZTsKPj4g KyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgIChUZW1wbGF0ZVR5cGU6OlN1YmplY3QsIGZh bHNlKSA9PiBicmVhaywKPj4gKyAgICAgICAgfQo+PiAgICAgIH0KPj4gIAo+PiAtICAgIE9rKHJl bmRlcmVkKQo+PiArICAgIEVycihFcnJvcjo6R2VuZXJpYygKPj4gKyAgICAgICAgImZhaWxlZCB0 byByZW5kZXIgbm90aWZpY2F0aW9uIHRlbXBsYXRlLCBhbGwgdGVtcGxhdGUgY2FuZGlkYXRlcyBh cmUgZXJyb25lb3VzIG9yIG1pc3NpbmciCj4+ICsgICAgICAgICAgICAuaW50bygpLAo+PiArICAg ICkpCj4+ICB9Cj4+ICAKPj4gICNbY2ZnKHRlc3QpXQo+Cj4KCkltcGxlbWVudGVkIGluIG5ldyBw YXRjaDoKPiBUaGUgb25seSB0aGluZyBJIGRvbid0IGxpa2UgdGhhdCBtdWNoIGlzIHRoZSB0d28g Ym9vbGVhbiBwYXJhbWV0ZXJzIGZvcgo+IGByZW5kZXJfdGVtcGxhdGVfaW1wbGAuLi4gSW4gdGhp cyBjYXNlIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQKPiBpbiBvbmx5IG9uZSBwbGFjZSAo YW5kIGl0IHdpbGwgcHJvYmFibHkgc3RheSB0aGF0IHdheSkgaXQgaXMgbm90IHRoYXQKPiBiYWQs IGJ1dCBib29sZWFuIHBhcmFtZXRlciBhbHdheXMgaGF2ZSB0aGUgcHJvYmxlbSB0aGF0IHRoZXkg Y2FuIGJlIGEKPiBiaXQgZGlmZmljdWx0IHRvIHVuZGVyc3RhbmQgKHlvdSBoYXZlIHRvIGxvb2sg YXQgdGhlIGRlZmluaXRpb24gb2YgdGhlCj4gZnVuY3Rpb24gdG8gZ2V0IHRoZSBtZWFuaW5nKSBh bmQgY2FuIGJlIGVhc2lseSBtaXhlZCB1cCAoZS5nLiB5b3UgY291bGQgc3dpdGNoCj4gdGhlIG9y ZGVyIG9mIGJvdGggcGFyYW1ldGVyczsgdGhpcyB3b3VsZCBiZSBoYXJkIHRvIHNwb3QgaW4gYSBy ZXZpZXcgYW5kIHRoZQo+IGNvbXBpbGVyIGFsc28gZG9lcyBub3QgaGVscCBhdCBhbGwgaW4gdGhp cyBjYXNlLgo+Cj4gSSB0aGluayB3aGF0IHdlIGNvdWxkIGRvIGhlcmUgaXMgdGhlIGZvbGxvd2lu Zy4gSGF2ZSBhIAo+Cj4gcHViIGVudW0gVGVtcGxhdGVTb3VyY2Ugewo+ICAgICBWZW5kb3IsCj4g ICAgIE92ZXJyaWRlCj4gfQo+Cj4gYW5kIGNoYW5nZSB0aGUgJ3VzZV9vdmVycmlkZScgcGFyYW1l dGVyIHRvIGEgJ3NvdXJjZScgcGFyYW1ldGVyLgo+IFlvdSBtYXkgd2FudCB0byBkZXJpdmUgYERp c3BsYXlgIGZvciB0aGUgYFRlbXBsYXRlU291cmNlYCBlbnVtCj4gc28gdGhhdCB5b3UgY2FuIHVz ZSBpbiB0aGUgdGhlIGB0cmFjaW5nOjplcnJvciFgIHN0YXRlbWVudC4KPgoKSW1wbGVtZW50ZWQg aW4gbmV3IHBhdGNoOgo+IEFsc28sIHdlIGNvdWxkIG1ha2UgdGhlIEhUTUwtZmFsbGluZy1iYWNr LXRvLXBsYWludGV4dCBjYXNlIGEgc2VwYXJhdGUKPiB2YXJpYW50IGluIGBUZW1wbGF0ZVR5cGVg IGUuZy4gVGVtcGxhdGVUeXBlOjpIdG1sRnJvbVBsYWludGV4dC4KPiBJbiB0aGUgbWF0Y2ggc3Rh dGVtZW50IHlvdSBjYW4gdGhlbiBqdXN0IHNldCB0aGUgYHR5YCBhbmQgc2tpcAo+IHNldHRpbmcg YGh0bWxfZmFsbGJhY2tgIGFsbHRvZ2V0aGVyLiBBZGRpbmcgdGhlIGA8aHRtbD48cHJlPmAKPiBz dHVmZiBjYW4gYmUgbW92ZWQgdG8gdGhlIGBwb3N0cHJvY2Vzc2AgZnVuY3Rpb24sIHNpbWlsYXIK PiB0byBob3cgYFN1YmplY3RgIGlzIGFscmVhZHkgcG9zdHByb2Nlc3NlZC4KCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcHZlLWRldmVsIG1haWxpbmcg bGlzdApwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNv bS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCg==