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 C2B551FF16E
	for <inbox@lore.proxmox.com>; Mon, 17 Mar 2025 14:44:15 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id DA84F4448;
	Mon, 17 Mar 2025 14:44:03 +0100 (CET)
Message-ID: <3a9988eb-d50f-440f-816b-e8a8b7353e6c@proxmox.com>
Date: Mon, 17 Mar 2025 14:43:58 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: Lukas Wagner <l.wagner@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
 Alexander Zeidler <a.zeidler@proxmox.com>
References: <20250313151734.258337-1-a.zeidler@proxmox.com>
Content-Language: de-AT, en-US
In-Reply-To: <20250313151734.258337-1-a.zeidler@proxmox.com>
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.009 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
 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
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>

VGhhbmtzIGEgbG90IGZvciB0aGlzIHBhdGNoLCBtdWNoIGFwcHJlY2lhdGVkIQoKT24gIDIwMjUt
MDMtMTMgMTY6MTcsIEFsZXhhbmRlciBaZWlkbGVyIHdyb3RlOgo+IFByZXZpb3VzbHksIG5vdGlm
aWNhdGlvbiB0ZW1wbGF0ZXMgY291bGQgYmUgbW9kaWZpZWQgYnkgdGhlIHVzZXIsIGJ1dAo+IHRo
ZXNlIHdlcmUgb3ZlcndyaXR0ZW4gYWdhaW4gd2l0aCBpbnN0YWxsaW5nIG5ld2VyIHBhY2thZ2Ug
dmVyc2lvbnMgb2YKPiBwdmUtbWFuYWdlciBhbmQgcHJveG1veC1iYWNrdXAuCj4gCj4gTm93IG92
ZXJyaWRlIHRlbXBsYXRlcyBjYW4gYmUgY3JlYXRlZCBjbHVzdGVyLXdpZGUgaW4gdGhlIHBhdGgK
PiDigJwvZXRjL3twdmUscHJveG1veC1iYWNrdXB9L25vdGlmaWNhdGlvbi10ZW1wbGF0ZXMve25h
bWVzcGFjZX3igJ0sIHdoaWNoCj4gYXJlIHVzZWQgd2l0aCBwcmlvcml0eS4gVGhlIGZvbGRlciBz
dHJ1Y3R1cmUgaGFzIHRvIGJlIGNyZWF0ZWQgYW5kCj4gcG9wdWxhdGVkIG1hbnVhbGx5IChlLmcu
IC9ldGMvcHZlL25vdGlmaWNhdGlvbi10ZW1wbGF0ZXMvZGVmYXVsdC8pLgo+IAo+IElmIG92ZXJy
aWRlIHRlbXBsYXRlcyBhcmUgbm90IGV4aXN0aW5nIG9yIHRoZWlyIHJlbmRlcmluZyBmYWlscywg
dGhlCj4gdmVuZG9yIHRlbXBsYXRlcyBpbgo+ICIvdXNyL3NoYXJlL3twdmUtbWFuYWdlcixwcm94
bW94LWJhY2t1cH0vdGVtcGxhdGVzL2RlZmF1bHQvIiBhcmUgdXNlZC4KPiAKPiBTZXF1ZW5jZTog
W292ZXJyaWRlIGh0bWwgLT4gdmVuZG9yIGh0bWwgLT5dIG92ZXJyaWRlIHR4dCAtPiB2ZW5kb3Ig
dHh0Cj4gCj4gQW4gZXJyb3IgaXMgb25seSByZXR1cm5lZCBpZiBub25lIG9mIHRoZSB0ZW1wbGF0
ZSBjYW5kaWRhdGVzIGNvdWxkIGJlCj4gdXNlZC4gVXNpbmcgYW4gb3ZlcnJpZGUgdGVtcGxhdGUg
Z2V0cyBub3QgbG9nZ2VkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBaZWlkbGVyIDxh
LnplaWRsZXJAcHJveG1veC5jb20+Cj4gLS0tCj4gCj4gUXVlc3Rpb25zOgo+IC0gSXMgdGhlcmUg
YW55dGhpbmcgYWdhaW5zdCB0aGUgY2hvc2VuIG92ZXJyaWRlIHBhdGg/CgpJTU8gdGhleSBhcmUg
ZmluZSwgYnV0IHNvbWVib2R5IGVsc2Ugc2hvdWxkIGRvdWJsZS1jaGVjay4KCj4gCj4gVXBjb21p
bmcgKGZyb20gYnVnemlsbGEgcmVwb3J0KToKPiAtIEx1a2FzIFdhZ25lcjogRXhpc3RpbmcgdGVt
cGxhdGVzL3ZhcmlhYmxlcy9oZWxwZXJzIGhhdmUgYmVlbgo+ICAgcmV2aWV3ZWQgdG8gbWFrZSBz
dXJlIHRoYXQgdGhleSBhcmUgT0sgdG8gYmUgcHVibGljIEFQSQoKSSdsbCByZXZpc2l0IHRoZSBl
eGlzdGluZyB0ZW1wbGF0ZXMgaW4gdGhlIG5leHQgZGF5cyBhbmQgc2VlIGlmIHRoZXJlIGlzIGFu
eXRoaW5nCndlIHNob3VsZCBmaXggdXAgYmVmb3JlIGV4cG9zaW5nIHRoaXMgdG8gdGhlIHVzZXIu
IFRoaXMgcGF0Y2gKc2hvdWxkIG5vdCBiZSBtZXJnZWQgdW50aWwgdGhlIGV4aXN0aW5nIHRlbXBs
YXRlcyBoYXZlIGJlZW4gYXVkaXRlZC4KCj4gLSBUaGUgc3RlcHMgbmVlZGVkIHRvIG92ZXJyaWRl
IHRoZSB0ZW1wbGF0ZSBhcmUgYWRkZWQgdG8gdGhlCj4gICBub3RpZmljYXRpb24gZG9jcwo+IC0g
VGVtcGxhdGUgdmFyaWFibGVzIGFuZCBoZWxwZXJzIGFyZSBkb2N1bWVudGVkCj4gCj4gCj4gIHBy
b3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L21vZC5ycyAgfCAgIDMgKy0KPiAgcHJveG1veC1ub3Rp
Znkvc3JjL2NvbnRleHQvcGJzLnJzICB8ICAgOSArKy0KPiAgcHJveG1veC1ub3RpZnkvc3JjL2Nv
bnRleHQvcHZlLnJzICB8ICAxMCArKy0KPiAgcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvdGVz
dC5ycyB8ICAgMSArCj4gIHByb3htb3gtbm90aWZ5L3NyYy9yZW5kZXJlci9tb2QucnMgfCAxMjQg
KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KPiAgNSBmaWxlcyBjaGFuZ2VkLCA5OSBpbnNl
cnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvcHJveG1veC1ub3Rp
Znkvc3JjL2NvbnRleHQvbW9kLnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvbW9kLnJz
Cj4gaW5kZXggYzBhNWExM2IuLmM0NjQ5ZDkxIDEwMDY0NAo+IC0tLSBhL3Byb3htb3gtbm90aWZ5
L3NyYy9jb250ZXh0L21vZC5ycwo+ICsrKyBiL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L21v
ZC5ycwo+IEBAIC0yNCwxMSArMjQsMTIgQEAgcHViIHRyYWl0IENvbnRleHQ6IFNlbmQgKyBTeW5j
ICsgRGVidWcgewo+ICAgICAgZm4gaHR0cF9wcm94eV9jb25maWcoJnNlbGYpIC0+IE9wdGlvbjxT
dHJpbmc+Owo+ICAgICAgLy8vIFJldHVybiBkZWZhdWx0IGNvbmZpZyBmb3IgYnVpbHQtaW4gdGFy
Z2V0cy9tYXRjaGVycy4KPiAgICAgIGZuIGRlZmF1bHRfY29uZmlnKCZzZWxmKSAtPiAmJ3N0YXRp
YyBzdHI7Cj4gLSAgICAvLy8gTG9va3VwIGEgdGVtcGxhdGUgaW4gYSBjZXJ0YWluIChvcHRpb25h
bCkgbmFtZXNwYWNlCj4gKyAgICAvLy8gTG9va3VwIGEgdGVtcGxhdGUgKG9yIGl0cyBvdmVycmlk
ZSkgaW4gYSBjZXJ0YWluIChvcHRpb25hbCkgbmFtZXNwYWNlCj4gICAgICBmbiBsb29rdXBfdGVt
cGxhdGUoCj4gICAgICAgICAgJnNlbGYsCj4gICAgICAgICAgZmlsZW5hbWU6ICZzdHIsCj4gICAg
ICAgICAgbmFtZXNwYWNlOiBPcHRpb248JnN0cj4sCj4gKyAgICAgICAgdXNlX292ZXJyaWRlOiBi
b29sLAo+ICAgICAgKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmluZz4sIEVycm9yPjsKPiAgfQo+ICAK
PiBkaWZmIC0tZ2l0IGEvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvcGJzLnJzIGIvcHJveG1v
eC1ub3RpZnkvc3JjL2NvbnRleHQvcGJzLnJzCj4gaW5kZXggZTgxMDZjNTcuLmRhNGQ5YmEwIDEw
MDY0NAo+IC0tLSBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Bicy5ycwo+ICsrKyBiL3By
b3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Bicy5ycwo+IEBAIC0xMDksOCArMTA5LDE1IEBAIGlt
cGwgQ29udGV4dCBmb3IgUEJTQ29udGV4dCB7Cj4gICAgICAgICAgJnNlbGYsCj4gICAgICAgICAg
ZmlsZW5hbWU6ICZzdHIsCj4gICAgICAgICAgbmFtZXNwYWNlOiBPcHRpb248JnN0cj4sCj4gKyAg
ICAgICAgdXNlX292ZXJyaWRlOiBib29sLAoKVGhlIGBUZW1wbGF0ZVNvdXJjZWAgdHlwZSBJIG1l
bnRpb24gYmVsb3cgd291bGQgYWxzbyBiZSB1c2VkIGhlcmUKaW5zdGVhZCBvZiBhIGJvb2wKCj4g
ICAgICApIC0+IFJlc3VsdDxPcHRpb248U3RyaW5nPiwgRXJyb3I+IHsKPiAtICAgICAgICBsZXQg
cGF0aCA9IFBhdGg6Om5ldygiL3Vzci9zaGFyZS9wcm94bW94LWJhY2t1cC90ZW1wbGF0ZXMiKQo+
ICsgICAgICAgIGxldCBwYXRoID0gaWYgdXNlX292ZXJyaWRlIHsKPiArICAgICAgICAgICAgIi9l
dGMvcHJveG1veC1iYWNrdXAvbm90aWZpY2F0aW9uLXRlbXBsYXRlcyIKPiArICAgICAgICB9IGVs
c2Ugewo+ICsgICAgICAgICAgICAiL3Vzci9zaGFyZS9wcm94bW94LWJhY2t1cC90ZW1wbGF0ZXMi
Cj4gKyAgICAgICAgfTsKPiArCj4gKyAgICAgICAgbGV0IHBhdGggPSBQYXRoOjpuZXcoJnBhdGgp
Cj4gICAgICAgICAgICAgIC5qb2luKG5hbWVzcGFjZS51bndyYXBfb3IoImRlZmF1bHQiKSkKPiAg
ICAgICAgICAgICAgLmpvaW4oZmlsZW5hbWUpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvcHJveG1veC1u
b3RpZnkvc3JjL2NvbnRleHQvcHZlLnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvcHZl
LnJzCj4gaW5kZXggZDQ5YWIyN2MuLjA1YjFiNWI3IDEwMDY0NAo+IC0tLSBhL3Byb3htb3gtbm90
aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycwo+ICsrKyBiL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0
L3B2ZS5ycwo+IEBAIC01OCwxMCArNTgsMTggQEAgaW1wbCBDb250ZXh0IGZvciBQVkVDb250ZXh0
IHsKPiAgICAgICAgICAmc2VsZiwKPiAgICAgICAgICBmaWxlbmFtZTogJnN0ciwKPiAgICAgICAg
ICBuYW1lc3BhY2U6IE9wdGlvbjwmc3RyPiwKPiArICAgICAgICB1c2Vfb3ZlcnJpZGU6IGJvb2ws
Cj4gICAgICApIC0+IFJlc3VsdDxPcHRpb248U3RyaW5nPiwgRXJyb3I+IHsKPiAtICAgICAgICBs
ZXQgcGF0aCA9IFBhdGg6Om5ldygiL3Vzci9zaGFyZS9wdmUtbWFuYWdlci90ZW1wbGF0ZXMiKQo+
ICsgICAgICAgIGxldCBwYXRoID0gaWYgdXNlX292ZXJyaWRlIHsKPiArICAgICAgICAgICAgIi9l
dGMvcHZlL25vdGlmaWNhdGlvbi10ZW1wbGF0ZXMiCj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAg
ICAgICAgICAgIi91c3Ivc2hhcmUvcHZlLW1hbmFnZXIvdGVtcGxhdGVzIgo+ICsgICAgICAgIH07
Cj4gKwo+ICsgICAgICAgIGxldCBwYXRoID0gUGF0aDo6bmV3KCZwYXRoKQo+ICAgICAgICAgICAg
ICAuam9pbihuYW1lc3BhY2UudW53cmFwX29yKCJkZWZhdWx0IikpCj4gICAgICAgICAgICAgIC5q
b2luKGZpbGVuYW1lKTsKPiArCj4gICAgICAgICAgbGV0IHRlbXBsYXRlX3N0cmluZyA9IHByb3ht
b3hfc3lzOjpmczo6ZmlsZV9yZWFkX29wdGlvbmFsX3N0cmluZyhwYXRoKQo+ICAgICAgICAgICAg
ICAubWFwX2Vycih8ZXJyfCBFcnJvcjo6R2VuZXJpYyhmb3JtYXQhKCJjb3VsZCBub3QgbG9hZCB0
ZW1wbGF0ZToge2Vycn0iKSkpPzsKPiAgICAgICAgICBPayh0ZW1wbGF0ZV9zdHJpbmcpCj4gZGlm
ZiAtLWdpdCBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Rlc3QucnMgYi9wcm94bW94LW5v
dGlmeS9zcmMvY29udGV4dC90ZXN0LnJzCj4gaW5kZXggNWRmMjVkMDUuLjZlZmQ4NGM1IDEwMDY0
NAo+IC0tLSBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Rlc3QucnMKPiArKysgYi9wcm94
bW94LW5vdGlmeS9zcmMvY29udGV4dC90ZXN0LnJzCj4gQEAgLTI5LDYgKzI5LDcgQEAgaW1wbCBD
b250ZXh0IGZvciBUZXN0Q29udGV4dCB7Cj4gICAgICAgICAgJnNlbGYsCj4gICAgICAgICAgX2Zp
bGVuYW1lOiAmc3RyLAo+ICAgICAgICAgIF9uYW1lc3BhY2U6IE9wdGlvbjwmc3RyPiwKPiArICAg
ICAgICBfdXNlX292ZXJyaWRlOiBib29sLAo+ICAgICAgKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmlu
Zz4sIEVycm9yPiB7Cj4gICAgICAgICAgT2soU29tZShTdHJpbmc6Om5ldygpKSkKPiAgICAgIH0K
PiBkaWZmIC0tZ2l0IGEvcHJveG1veC1ub3RpZnkvc3JjL3JlbmRlcmVyL21vZC5ycyBiL3Byb3ht
b3gtbm90aWZ5L3NyYy9yZW5kZXJlci9tb2QucnMKPiBpbmRleCBlMDU4ZWEyMi4uYWM1MTliZWUg
MTAwNjQ0Cj4gLS0tIGEvcHJveG1veC1ub3RpZnkvc3JjL3JlbmRlcmVyL21vZC5ycwo+ICsrKyBi
L3Byb3htb3gtbm90aWZ5L3NyYy9yZW5kZXJlci9tb2QucnMKPiBAQCAtMTkxLDcgKzE5MSw3IEBA
IGltcGwgVmFsdWVSZW5kZXJGdW5jdGlvbiB7Cj4gIH0KPiAgCj4gIC8vLyBBdmFpbGFibGUgdGVt
cGxhdGUgdHlwZXMKPiAtI1tkZXJpdmUoQ29weSwgQ2xvbmUpXQo+ICsjW2Rlcml2ZShDb3B5LCBD
bG9uZSwgUGFydGlhbEVxKV0KPiAgcHViIGVudW0gVGVtcGxhdGVUeXBlIHsKPiAgICAgIC8vLyBI
VE1MIGJvZHkgdGVtcGxhdGUKPiAgICAgIEh0bWxCb2R5LAo+IEBAIC0yNTAsNzAgKzI1MCwxMDQg
QEAgaW1wbCBCbG9ja1JlbmRlckZ1bmN0aW9ucyB7Cj4gIH0KPiAgCj4gIGZuIHJlbmRlcl90ZW1w
bGF0ZV9pbXBsKAo+IC0gICAgdGVtcGxhdGU6ICZzdHIsCj4gICAgICBkYXRhOiAmVmFsdWUsCj4g
ICAgICByZW5kZXJlcjogVGVtcGxhdGVUeXBlLAo+IC0pIC0+IFJlc3VsdDxTdHJpbmcsIEVycm9y
PiB7Cj4gLSAgICBsZXQgbXV0IGhhbmRsZWJhcnMgPSBIYW5kbGViYXJzOjpuZXcoKTsKPiAtICAg
IGhhbmRsZWJhcnMucmVnaXN0ZXJfZXNjYXBlX2ZuKHJlbmRlcmVyLmVzY2FwZV9mbigpKTsKPiAr
ICAgIGZpbGVuYW1lOiAmc3RyLAo+ICsgICAgdXNlX292ZXJyaWRlOiBib29sLAo+ICsgICAgaHRt
bF9mYWxsYmFjazogYm9vbCwKPiArKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmluZz4sIEVycm9yPiB7
Cj4gKyAgICBsZXQgdGVtcGxhdGVfc3RyaW5nID0gY29udGV4dDo6Y29udGV4dCgpLmxvb2t1cF90
ZW1wbGF0ZSgmZmlsZW5hbWUsIE5vbmUsIHVzZV9vdmVycmlkZSk/Owo+ICsKPiArICAgIGlmIGxl
dCBTb21lKHRlbXBsYXRlX3N0cmluZykgPSB0ZW1wbGF0ZV9zdHJpbmcgewo+ICsgICAgICAgIGxl
dCBtdXQgaGFuZGxlYmFycyA9IEhhbmRsZWJhcnM6Om5ldygpOwo+ICsgICAgICAgIGhhbmRsZWJh
cnMucmVnaXN0ZXJfZXNjYXBlX2ZuKHJlbmRlcmVyLmVzY2FwZV9mbigpKTsKPiArCj4gKyAgICAg
ICAgbGV0IGJsb2NrX3JlbmRlcl9mbnMgPSByZW5kZXJlci5ibG9ja19yZW5kZXJfZm5zKCk7Cj4g
KyAgICAgICAgYmxvY2tfcmVuZGVyX2Zucy5yZWdpc3Rlcl9oZWxwZXJzKCZtdXQgaGFuZGxlYmFy
cyk7Cj4gIAo+IC0gICAgbGV0IGJsb2NrX3JlbmRlcl9mbnMgPSByZW5kZXJlci5ibG9ja19yZW5k
ZXJfZm5zKCk7Cj4gLSAgICBibG9ja19yZW5kZXJfZm5zLnJlZ2lzdGVyX2hlbHBlcnMoJm11dCBo
YW5kbGViYXJzKTsKPiArICAgICAgICBWYWx1ZVJlbmRlckZ1bmN0aW9uOjpyZWdpc3Rlcl9oZWxw
ZXJzKCZtdXQgaGFuZGxlYmFycyk7Cj4gKwo+ICsgICAgICAgIGhhbmRsZWJhcnMucmVnaXN0ZXJf
aGVscGVyKAo+ICsgICAgICAgICAgICAicmVsYXRpdmUtcGVyY2VudGFnZSIsCj4gKyAgICAgICAg
ICAgIEJveDo6bmV3KGhhbmRsZWJhcnNfcmVsYXRpdmVfcGVyY2VudGFnZV9oZWxwZXIpLAo+ICsg
ICAgICAgICk7Cj4gIAo+IC0gICAgVmFsdWVSZW5kZXJGdW5jdGlvbjo6cmVnaXN0ZXJfaGVscGVy
cygmbXV0IGhhbmRsZWJhcnMpOwo+ICsgICAgICAgIGxldCByZW5kZXJlZF90ZW1wbGF0ZSA9IGhh
bmRsZWJhcnMKPiArICAgICAgICAgICAgLnJlbmRlcl90ZW1wbGF0ZSgmdGVtcGxhdGVfc3RyaW5n
LCBkYXRhKQo+ICsgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBFcnJvcjo6UmVuZGVyRXJyb3Io
ZXJyLmludG8oKSkpPzsKPiAgCj4gLSAgICBoYW5kbGViYXJzLnJlZ2lzdGVyX2hlbHBlcigKPiAt
ICAgICAgICAicmVsYXRpdmUtcGVyY2VudGFnZSIsCj4gLSAgICAgICAgQm94OjpuZXcoaGFuZGxl
YmFyc19yZWxhdGl2ZV9wZXJjZW50YWdlX2hlbHBlciksCj4gLSAgICApOwo+ICsgICAgICAgIGxl
dCBtdXQgcmVuZGVyZWRfdGVtcGxhdGUgPSByZW5kZXJlci5wb3N0cHJvY2VzcyhyZW5kZXJlZF90
ZW1wbGF0ZSk7Cj4gIAo+IC0gICAgbGV0IHJlbmRlcmVkX3RlbXBsYXRlID0gaGFuZGxlYmFycwo+
IC0gICAgICAgIC5yZW5kZXJfdGVtcGxhdGUodGVtcGxhdGUsIGRhdGEpCj4gLSAgICAgICAgLm1h
cF9lcnIofGVycnwgRXJyb3I6OlJlbmRlckVycm9yKGVyci5pbnRvKCkpKT87Cj4gKyAgICAgICAg
aWYgaHRtbF9mYWxsYmFjayB7Cj4gKyAgICAgICAgICAgIHJlbmRlcmVkX3RlbXBsYXRlID0gZm9y
bWF0ISgKPiArICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cHJlPnt9PC9wcmU+PC9ib2R5
PjwvaHRtbD4iLAo+ICsgICAgICAgICAgICAgICAgaGFuZGxlYmFyczo6aHRtbF9lc2NhcGUoJnJl
bmRlcmVkX3RlbXBsYXRlKQo+ICsgICAgICAgICAgICApOwo+ICsgICAgICAgIH0KPiAgCj4gLSAg
ICBPayhyZW5kZXJlZF90ZW1wbGF0ZSkKPiArICAgICAgICBPayhTb21lKHJlbmRlcmVkX3RlbXBs
YXRlKSkKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgT2soTm9uZSkKPiArICAgIH0KPiAgfQo+
ICAKPiAgLy8vIFJlbmRlciBhIHRlbXBsYXRlIHN0cmluZy4KPiAgLy8vCj4gLS8vLyBUaGUgb3V0
cHV0IGZvcm1hdCBjYW4gYmUgY2hvc2VuIHZpYSB0aGUgYHJlbmRlcmVyYCBwYXJhbWV0ZXIgKHNl
ZSBbVGVtcGxhdGVUeXBlXQo+IC0vLy8gZm9yIGF2YWlsYWJsZSBvcHRpb25zKS4KPiArLy8vIFRo
ZSBvdXRwdXQgZm9ybWF0IGNhbiBiZSBjaG9zZW4gdmlhIHRoZSBgdHlgIHBhcmFtZXRlciAoc2Vl
IFtUZW1wbGF0ZVR5cGVdCj4gKy8vLyBmb3IgYXZhaWxhYmxlIG9wdGlvbnMpLiBVc2UgYW4gb3Zl
cnJpZGUgdGVtcGxhdGUgaWYgZXhpc3RpbmcgYW5kIHJlbmRlcmFibGUsCgpJIHRoaW5rIHRoZSBp
bXBlcmF0aXZlIG1vb2Qvdm9pY2UgaXMgYSBiaXQgY29uZnVzaW5nIHRvIGRlc2NyaWJlIHRoZSBm
dW5jdGlvbmFsaXR5IG9mIGEgZnVuY3Rpb24uCkl0IHJlYWRzIGxpa2UgeW91IGFyZSBnaXZpbmcg
YSBjb21tYW5kIHRvIHRoZSByZWFkZXIuCgpIb3cgYWJvdXQgc29tZXRoaW5nIGxpa2U6CgoiVGhl
IGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHJlbmRlciBhbiBvdmVycmlkZSB0ZW1wbGF0ZSBpZiBpdCBl
eGlzdCBhbmQgaXMgcmVuZGVyYWJsZSwgb3RoZXJ3aXNlCml0IHVzZXMgdGhlIG9yaWdpbmFsIHRl
bXBsYXRlLiBJZiB0aGUgW1RlbXBsYXRlVHlwZV0gaXMgYEh0bWxCb2R5YCBidXQgbm8gSFRNTCB0
ZW1wbGF0ZSBjb3VsZCBiZQpmb3VuZCBvciByZW5kZXJlZCwgaXQgZmFsbHMgYmFjayB0byB0aGUg
cGxhaW50ZXh0IHRlbXBsYXRlLCBlbmNhcHN1bGF0aW5nIHRoZSBjb250ZW50IGluCmEgcHJlLWZv
cm1hdHRlZCBIVE1MIGJsb2NrICg8cHJlPikuIgoKPiArLy8vIG90aGVyd2lzZSBmYWxsIGJhY2sg
dG8gb3JpZ2luYWwgdGVtcGxhdGUuIElmIFtUZW1wbGF0ZVR5cGVdIGlzIGBIdG1sQm9keWAgYnV0
IG5vCj4gKy8vLyBIVE1MIHRlbXBsYXRlIGNvdWxkIGJlIHVzZWQsIGZhbGwgYmFjayB0byBwbGFp
bnRleHQgdGVtcGxhdGVzIGFuZCBhZGQgdGhlIHRhZ3MKPiArLy8vIGA8aHRtbD48Ym9keT48cHJl
PmAuCj4gIHB1YiBmbiByZW5kZXJfdGVtcGxhdGUoCj4gICAgICBtdXQgdHk6IFRlbXBsYXRlVHlw
ZSwKPiAgICAgIHRlbXBsYXRlOiAmc3RyLAo+ICAgICAgZGF0YTogJlZhbHVlLAo+ICApIC0+IFJl
c3VsdDxTdHJpbmcsIEVycm9yPiB7Cj4gLSAgICBsZXQgZmlsZW5hbWUgPSBmb3JtYXQhKCJ7dGVt
cGxhdGV9LXtzdWZmaXh9Iiwgc3VmZml4ID0gdHkuZmlsZV9zdWZmaXgoKSk7Cj4gLQo+IC0gICAg
bGV0IHRlbXBsYXRlX3N0cmluZyA9IGNvbnRleHQ6OmNvbnRleHQoKS5sb29rdXBfdGVtcGxhdGUo
JmZpbGVuYW1lLCBOb25lKT87Cj4gLQo+IC0gICAgbGV0ICh0ZW1wbGF0ZV9zdHJpbmcsIGZhbGxi
YWNrKSA9IG1hdGNoICh0ZW1wbGF0ZV9zdHJpbmcsIHR5KSB7Cj4gLSAgICAgICAgKE5vbmUsIFRl
bXBsYXRlVHlwZTo6SHRtbEJvZHkpID0+IHsKPiAtICAgICAgICAgICAgdHkgPSBUZW1wbGF0ZVR5
cGU6OlBsYWludGV4dEJvZHk7Cj4gLSAgICAgICAgICAgIGxldCBwbGFpbnRleHRfZmlsZW5hbWUg
PSBmb3JtYXQhKCJ7dGVtcGxhdGV9LXtzdWZmaXh9Iiwgc3VmZml4ID0gdHkuZmlsZV9zdWZmaXgo
KSk7Cj4gLSAgICAgICAgICAgICgKPiAtICAgICAgICAgICAgICAgIGNvbnRleHQ6OmNvbnRleHQo
KS5sb29rdXBfdGVtcGxhdGUoJnBsYWludGV4dF9maWxlbmFtZSwgTm9uZSk/LAo+IC0gICAgICAg
ICAgICAgICAgdHJ1ZSwKPiAtICAgICAgICAgICAgKQo+ICsgICAgbGV0IG11dCB1c2Vfb3ZlcnJp
ZGUgPSB0cnVlOwo+ICsgICAgbGV0IG11dCBodG1sX2ZhbGxiYWNrID0gZmFsc2U7Cj4gKwo+ICsg
ICAgbG9vcCB7Cj4gKyAgICAgICAgbGV0IGZpbGVuYW1lID0gZm9ybWF0ISgie3RlbXBsYXRlfS17
c3VmZml4fSIsIHN1ZmZpeCA9IHR5LmZpbGVfc3VmZml4KCkpOwo+ICsgICAgICAgIGxldCByZXN1
bHQgPSByZW5kZXJfdGVtcGxhdGVfaW1wbChkYXRhLCB0eSwgJmZpbGVuYW1lLCB1c2Vfb3ZlcnJp
ZGUsIGh0bWxfZmFsbGJhY2spOwo+ICsKPiArICAgICAgICBtYXRjaCByZXN1bHQgewo+ICsgICAg
ICAgICAgICBPayhTb21lKHMpKSA9PiB7Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gT2socyk7
Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgT2soTm9uZSkgPT4ge30KPiArICAgICAg
ICAgICAgRXJyKGVycikgPT4gewo+ICsgICAgICAgICAgICAgICAgbGV0IHNvdXJjZSA9IGlmIHVz
ZV9vdmVycmlkZSB7ICJvdmVycmlkZSIgfSBlbHNlIHsgInZlbmRvciIgfTsKPiArICAgICAgICAg
ICAgICAgIHRyYWNpbmc6OmVycm9yISgiZmFpbGVkIHRvIHJlbmRlciB7c291cmNlfSB0ZW1wbGF0
ZSAne2ZpbGVuYW1lfSc6IHtlcnJ9Iik7Cj4gKyAgICAgICAgICAgIH0KPiAgICAgICAgICB9Cj4g
LSAgICAgICAgKHRlbXBsYXRlX3N0cmluZywgXykgPT4gKHRlbXBsYXRlX3N0cmluZywgZmFsc2Up
LAo+IC0gICAgfTsKPiAtCj4gLSAgICBsZXQgdGVtcGxhdGVfc3RyaW5nID0gdGVtcGxhdGVfc3Ry
aW5nLm9rX29yKEVycm9yOjpHZW5lcmljKGZvcm1hdCEoCj4gLSAgICAgICAgImNvdWxkIG5vdCBs
b2FkIHRlbXBsYXRlICd7dGVtcGxhdGV9JyIKPiAtICAgICkpKT87Cj4gIAo+IC0gICAgbGV0IG11
dCByZW5kZXJlZCA9IHJlbmRlcl90ZW1wbGF0ZV9pbXBsKCZ0ZW1wbGF0ZV9zdHJpbmcsIGRhdGEs
IHR5KT87Cj4gLSAgICByZW5kZXJlZCA9IHR5LnBvc3Rwcm9jZXNzKHJlbmRlcmVkKTsKPiAtCj4g
LSAgICBpZiBmYWxsYmFjayB7Cj4gLSAgICAgICAgcmVuZGVyZWQgPSBmb3JtYXQhKAo+IC0gICAg
ICAgICAgICAiPGh0bWw+PGJvZHk+PHByZT57fTwvcHJlPjwvYm9keT48L2h0bWw+IiwKPiAtICAg
ICAgICAgICAgaGFuZGxlYmFyczo6aHRtbF9lc2NhcGUoJnJlbmRlcmVkKQo+IC0gICAgICAgICk7
Cj4gKyAgICAgICAgbWF0Y2ggKHR5LCB1c2Vfb3ZlcnJpZGUpIHsKPiArICAgICAgICAgICAgKFRl
bXBsYXRlVHlwZTo6SHRtbEJvZHksIHRydWUpID0+IHsKPiArICAgICAgICAgICAgICAgIHVzZV9v
dmVycmlkZSA9IGZhbHNlOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIChUZW1wbGF0
ZVR5cGU6Okh0bWxCb2R5LCBmYWxzZSkgPT4gewo+ICsgICAgICAgICAgICAgICAgdHkgPSBUZW1w
bGF0ZVR5cGU6OlBsYWludGV4dEJvZHk7Cj4gKyAgICAgICAgICAgICAgICB1c2Vfb3ZlcnJpZGUg
PSB0cnVlOwo+ICsgICAgICAgICAgICAgICAgaHRtbF9mYWxsYmFjayA9IHRydWU7Cj4gKyAgICAg
ICAgICAgIH0KPiArICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6UGxhaW50ZXh0Qm9keSwgdHJ1
ZSkgPT4gewo+ICsgICAgICAgICAgICAgICAgdXNlX292ZXJyaWRlID0gZmFsc2U7Cj4gKyAgICAg
ICAgICAgIH0KCkJ0dywgeW91IGNhbiBtYXRjaCBvbiBtdWx0aXBsZSB2YXJpYW50cyBhdCB0aGUg
c2FtZSB0aW1lIHVzaW5nIHRoZSB8IG9wZXJhdG9yLgogICAgICAgICAgIChUZW1wbGF0ZVR5cGU6
Okh0bWxCb2R5IHwgVGVtcGxhdGVUeXBlOjpQbGFpbnRleHRCb2R5IHwgVGVtcGxhdGVUeXBlOjpT
dWJqZWN0LCB0cnVlKSA9PiB7CiAgICAgICAgICAgICAgIHVzZV9vdmVycmlkZSA9IGZhbHNlOwog
ICAgICAgICAgIH0KCkkgdGhpbmsgdGhpcyB3b3VsZCBiZSBuaWNlIHRvIHVzZSBpbiB0aGlzIGNh
c2UsIHRoZXJlIGFyZSBhY3R1YWxseSBvbmx5CjMgZGlzdGluY3QgYm9kaWVzIG9mIHRoZSBtYXRj
aCBhcm1zOgogIC0gc2V0dGluZyBvdmVycmlkZSB0byBmYWxzZQogIC0gYnJlYWtpbmcgZnJvbSB0
aGUgbG9vcAogIC0gc2V0dGluZyB0eSBmb3IgSFRNTC1mcm9tLXBsYWluIGZhbGxiYWNrLCByZXNl
dHRpbmcgb3ZlcnJpZGUgdG8gdHJ1ZQoKPiArICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6UGxh
aW50ZXh0Qm9keSwgZmFsc2UpID0+IHsKPiArICAgICAgICAgICAgICAgIC8vIHJldHVybiBlcnJv
ciwgbm8gb3RoZXIgb3B0aW9ucwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAg
ICAgIH0KPiArICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6U3ViamVjdCwgdHJ1ZSkgPT4gewo+
ICsgICAgICAgICAgICAgICAgdXNlX292ZXJyaWRlID0gZmFsc2U7Cj4gKyAgICAgICAgICAgIH0K
PiArICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6U3ViamVjdCwgZmFsc2UpID0+IGJyZWFrLAo+
ICsgICAgICAgIH0KPiAgICAgIH0KPiAgCj4gLSAgICBPayhyZW5kZXJlZCkKPiArICAgIEVycihF
cnJvcjo6R2VuZXJpYygKPiArICAgICAgICAiZmFpbGVkIHRvIHJlbmRlciBub3RpZmljYXRpb24g
dGVtcGxhdGUsIGFsbCB0ZW1wbGF0ZSBjYW5kaWRhdGVzIGFyZSBlcnJvbmVvdXMgb3IgbWlzc2lu
ZyIKPiArICAgICAgICAgICAgLmludG8oKSwKPiArICAgICkpCj4gIH0KPiAgCj4gICNbY2ZnKHRl
c3QpXQoKClRoZSBvbmx5IHRoaW5nIEkgZG9uJ3QgbGlrZSB0aGF0IG11Y2ggaXMgdGhlIHR3byBi
b29sZWFuIHBhcmFtZXRlcnMgZm9yCmByZW5kZXJfdGVtcGxhdGVfaW1wbGAuLi4gSW4gdGhpcyBj
YXNlIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQKaW4gb25seSBvbmUgcGxhY2UgKGFuZCBp
dCB3aWxsIHByb2JhYmx5IHN0YXkgdGhhdCB3YXkpIGl0IGlzIG5vdCB0aGF0CmJhZCwgYnV0IGJv
b2xlYW4gcGFyYW1ldGVyIGFsd2F5cyBoYXZlIHRoZSBwcm9ibGVtIHRoYXQgdGhleSBjYW4gYmUg
YQpiaXQgZGlmZmljdWx0IHRvIHVuZGVyc3RhbmQgKHlvdSBoYXZlIHRvIGxvb2sgYXQgdGhlIGRl
ZmluaXRpb24gb2YgdGhlCmZ1bmN0aW9uIHRvIGdldCB0aGUgbWVhbmluZykgYW5kIGNhbiBiZSBl
YXNpbHkgbWl4ZWQgdXAgKGUuZy4geW91IGNvdWxkIHN3aXRjaAp0aGUgb3JkZXIgb2YgYm90aCBw
YXJhbWV0ZXJzOyB0aGlzIHdvdWxkIGJlIGhhcmQgdG8gc3BvdCBpbiBhIHJldmlldyBhbmQgdGhl
CmNvbXBpbGVyIGFsc28gZG9lcyBub3QgaGVscCBhdCBhbGwgaW4gdGhpcyBjYXNlLgoKSSB0aGlu
ayB3aGF0IHdlIGNvdWxkIGRvIGhlcmUgaXMgdGhlIGZvbGxvd2luZy4gSGF2ZSBhIAoKcHViIGVu
dW0gVGVtcGxhdGVTb3VyY2UgewogICAgVmVuZG9yLAogICAgT3ZlcnJpZGUKfQoKYW5kIGNoYW5n
ZSB0aGUgJ3VzZV9vdmVycmlkZScgcGFyYW1ldGVyIHRvIGEgJ3NvdXJjZScgcGFyYW1ldGVyLgpZ
b3UgbWF5IHdhbnQgdG8gZGVyaXZlIGBEaXNwbGF5YCBmb3IgdGhlIGBUZW1wbGF0ZVNvdXJjZWAg
ZW51bQpzbyB0aGF0IHlvdSBjYW4gdXNlIGluIHRoZSB0aGUgYHRyYWNpbmc6OmVycm9yIWAgc3Rh
dGVtZW50LgoKQWxzbywgd2UgY291bGQgbWFrZSB0aGUgSFRNTC1mYWxsaW5nLWJhY2stdG8tcGxh
aW50ZXh0IGNhc2UgYSBzZXBhcmF0ZQp2YXJpYW50IGluIGBUZW1wbGF0ZVR5cGVgIGUuZy4gVGVt
cGxhdGVUeXBlOjpIdG1sRnJvbVBsYWludGV4dC4KSW4gdGhlIG1hdGNoIHN0YXRlbWVudCB5b3Ug
Y2FuIHRoZW4ganVzdCBzZXQgdGhlIGB0eWAgYW5kIHNraXAKc2V0dGluZyBgaHRtbF9mYWxsYmFj
a2AgYWxsdG9nZXRoZXIuIEFkZGluZyB0aGUgYDxodG1sPjxwcmU+YApzdHVmZiBjYW4gYmUgbW92
ZWQgdG8gdGhlIGBwb3N0cHJvY2Vzc2AgZnVuY3Rpb24sIHNpbWlsYXIKdG8gaG93IGBTdWJqZWN0
YCBpcyBhbHJlYWR5IHBvc3Rwcm9jZXNzZWQuCgoKLS0gCi0gTHVrYXMKCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcHZlLWRldmVsIG1haWxpbmcgbGlz
dApwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9j
Z2ktYmluL21haWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCg==