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 A24C31FF16E
	for <inbox@lore.proxmox.com>; Mon,  3 Mar 2025 17:30:08 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 91F77FCA8;
	Mon,  3 Mar 2025 17:30:03 +0100 (CET)
Message-ID: <2443e9a1-a494-452b-8840-51c301582aa8@proxmox.com>
Date: Mon, 3 Mar 2025 17:29:25 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
To: Gabriel Goller <g.goller@proxmox.com>, pve-devel@lists.proxmox.com
References: <20250214133951.344500-1-g.goller@proxmox.com>
 <20250214133951.344500-3-g.goller@proxmox.com>
Content-Language: en-US
From: Stefan Hanreich <s.hanreich@proxmox.com>
In-Reply-To: <20250214133951.344500-3-g.goller@proxmox.com>
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.673 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] [PATCH proxmox-ve-rs 02/11] add proxmox-frr crate
 with frr types
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>

VGhpcyB1c2VzIHN0dWZmIGZyb20gYSBsYXRlciBwYXRjaCwgZG9lc24ndCBpdD8gU2hvdWxkbid0
IHRoZSBvcmRlciBvZgpwYXRjaGVzIDIgYW5kIDMgYmUgZmxpcHBlZD8KCk9uIDIvMTQvMjUgMTQ6
MzksIEdhYnJpZWwgR29sbGVyIHdyb3RlOgo+IFRoaXMgY3JhdGUgY29udGFpbnMgdHlwZXMgdGhh
dCByZXByZXNlbnQgdGhlIGZyciBjb25maWcuIEZvciBleGFtcGxlIGl0Cj4gY29udGFpbnMgYSBg
Um91dGVyYCBhbmQgYEludGVyZmFjZWAgc3RydWN0LiBUaGlzIEZyci1SZXByZXNlbnRhdGlvbiBj
YW4KPiB0aGVuIGJlIGNvbnZlcnRlZCB0byB0aGUgcmVhbCBmcnIgY29uZmlnLgo+IAo+IENvLWF1
dGhvcmVkLWJ5OiBTdGVmYW4gSGFucmVpY2ggPHMuaGFucmVpY2hAcHJveG1veC5jb20+Cj4gU2ln
bmVkLW9mZi1ieTogR2FicmllbCBHb2xsZXIgPGcuZ29sbGVyQHByb3htb3guY29tPgo+IC0tLQo+
ICBDYXJnby50b21sICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIHByb3htb3gtZnJyL0Nh
cmdvLnRvbWwgICAgICAgIHwgIDI1ICsrKysKPiAgcHJveG1veC1mcnIvc3JjL2NvbW1vbi5ycyAg
ICAgfCAgNTQgKysrKysrKysKPiAgcHJveG1veC1mcnIvc3JjL2xpYi5ycyAgICAgICAgfCAyMjMg
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBwcm94bW94LWZyci9zcmMvb3Bl
bmZhYnJpYy5ycyB8IDEzNyArKysrKysrKysrKysrKysrKysrKysKPiAgcHJveG1veC1mcnIvc3Jj
L29zcGYucnMgICAgICAgfCAxNDggKysrKysrKysrKysrKysrKysrKysrKwo+ICA2IGZpbGVzIGNo
YW5nZWQsIDU4OCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LWZy
ci9DYXJnby50b21sCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LWZyci9zcmMvY29tbW9u
LnJzCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LWZyci9zcmMvbGliLnJzCj4gIGNyZWF0
ZSBtb2RlIDEwMDY0NCBwcm94bW94LWZyci9zcmMvb3BlbmZhYnJpYy5ycwo+ICBjcmVhdGUgbW9k
ZSAxMDA2NDQgcHJveG1veC1mcnIvc3JjL29zcGYucnMKPiAKPiBkaWZmIC0tZ2l0IGEvQ2FyZ28u
dG9tbCBiL0NhcmdvLnRvbWwKPiBpbmRleCBlNDUyYzkzMWU3OGMuLmZmZGExMjMzYjE3YSAxMDA2
NDQKPiAtLS0gYS9DYXJnby50b21sCj4gKysrIGIvQ2FyZ28udG9tbAo+IEBAIC0xLDYgKzEsNyBA
QAo+ICBbd29ya3NwYWNlXQo+ICBtZW1iZXJzID0gWwo+ICAgICAgInByb3htb3gtdmUtY29uZmln
IiwKPiArICAgICJwcm94bW94LWZyciIsCj4gICAgICAicHJveG1veC1uZXR3b3JrLXR5cGVzIiwK
PiAgXQo+ICBleGNsdWRlID0gWwo+IGRpZmYgLS1naXQgYS9wcm94bW94LWZyci9DYXJnby50b21s
IGIvcHJveG1veC1mcnIvQ2FyZ28udG9tbAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg
MDAwMDAwMDAwMDAwLi5iZWE4YTBmOGJhYjMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvcHJveG1v
eC1mcnIvQ2FyZ28udG9tbAo+IEBAIC0wLDAgKzEsMjUgQEAKPiArW3BhY2thZ2VdCj4gK25hbWUg
PSAicHJveG1veC1mcnIiCj4gK3ZlcnNpb24gPSAiMC4xLjAiCj4gK2F1dGhvcnMud29ya3NwYWNl
ID0gdHJ1ZQo+ICtlZGl0aW9uLndvcmtzcGFjZSA9IHRydWUKPiArbGljZW5zZS53b3Jrc3BhY2Ug
PSB0cnVlCj4gK2hvbWVwYWdlLndvcmtzcGFjZSA9IHRydWUKPiArZXhjbHVkZS53b3Jrc3BhY2Ug
PSB0cnVlCj4gK3J1c3QtdmVyc2lvbi53b3Jrc3BhY2UgPSB0cnVlCj4gKwo+ICtbZGVwZW5kZW5j
aWVzXQo+ICt0aGlzZXJyb3IgPSB7IHdvcmtzcGFjZSA9IHRydWUgfQo+ICthbnlob3cgPSAiMSIK
PiArdHJhY2luZyA9ICIwLjEiCj4gKwo+ICtzZXJkZSA9IHsgd29ya3NwYWNlID0gdHJ1ZSwgZmVh
dHVyZXMgPSBbICJkZXJpdmUiIF0gfQo+ICtzZXJkZV93aXRoID0geyB3b3Jrc3BhY2UgPSB0cnVl
IH0KPiAraXRvYSA9ICIxLjAuOSIKPiArCj4gK3Byb3htb3gtdmUtY29uZmlnID0geyBwYXRoID0g
Ii4uL3Byb3htb3gtdmUtY29uZmlnIiwgb3B0aW9uYWwgPSB0cnVlIH0KPiArcHJveG1veC1zZWN0
aW9uLWNvbmZpZyA9IHsgd29ya3NwYWNlID0gdHJ1ZSwgb3B0aW9uYWwgPSB0cnVlIH0KPiArcHJv
eG1veC1uZXR3b3JrLXR5cGVzID0geyBwYXRoID0gIi4uL3Byb3htb3gtbmV0d29yay10eXBlcy8i
IH0KPiArCj4gK1tmZWF0dXJlc10KPiArY29uZmlnLWV4dCA9IFsiZGVwOnByb3htb3gtdmUtY29u
ZmlnIiwgImRlcDpwcm94bW94LXNlY3Rpb24tY29uZmlnIiBdCj4gZGlmZiAtLWdpdCBhL3Byb3ht
b3gtZnJyL3NyYy9jb21tb24ucnMgYi9wcm94bW94LWZyci9zcmMvY29tbW9uLnJzCj4gbmV3IGZp
bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjBkOTliYjRkYTZlMgo+IC0tLSAv
ZGV2L251bGwKPiArKysgYi9wcm94bW94LWZyci9zcmMvY29tbW9uLnJzCj4gQEAgLTAsMCArMSw1
NCBAQAo+ICt1c2Ugc3RkOjp7Zm10OjpEaXNwbGF5LCBzdHI6OkZyb21TdHJ9Owo+ICsKPiArdXNl
IHNlcmRlX3dpdGg6OntEZXNlcmlhbGl6ZUZyb21TdHIsIFNlcmlhbGl6ZURpc3BsYXl9Owo+ICt1
c2UgdGhpc2Vycm9yOjpFcnJvcjsKPiArCj4gKyNbZGVyaXZlKEVycm9yLCBEZWJ1ZyldCj4gK3B1
YiBlbnVtIEZycldvcmRFcnJvciB7Cj4gKyAgICAjW2Vycm9yKCJ3b3JkIGlzIGVtcHR5IildCj4g
KyAgICBJc0VtcHR5LAo+ICsgICAgI1tlcnJvcigid29yZCBjb250YWlucyBpbnZhbGlkIGNoYXJh
Y3RlciIpXQo+ICsgICAgSW52YWxpZENoYXJhY3RlciwKPiArfQo+ICsKPiArI1tkZXJpdmUoQ2xv
bmUsIERlYnVnLCBQYXJ0aWFsRXEsIEVxLCBIYXNoLCBEZXNlcmlhbGl6ZUZyb21TdHIsIFNlcmlh
bGl6ZURpc3BsYXkpXQo+ICtwdWIgc3RydWN0IEZycldvcmQoU3RyaW5nKTsKPiArCj4gK2ltcGwg
RnJyV29yZCB7Cj4gKyAgICBwdWIgZm4gbmV3KG5hbWU6IFN0cmluZykgLT4gUmVzdWx0PFNlbGYs
IEZycldvcmRFcnJvcj4gewo+ICsgICAgICAgIGlmIG5hbWUuaXNfZW1wdHkoKSB7Cj4gKyAgICAg
ICAgICAgIHJldHVybiBFcnIoRnJyV29yZEVycm9yOjpJc0VtcHR5KTsKPiArICAgICAgICB9Cj4g
Kwo+ICsgICAgICAgIGlmIG5hbWUKPiArICAgICAgICAgICAgLmFzX2J5dGVzKCkKPiArICAgICAg
ICAgICAgLml0ZXIoKQo+ICsgICAgICAgICAgICAuYW55KHxjfCAhYy5pc19hc2NpaSgpIHx8IGMu
aXNfYXNjaWlfd2hpdGVzcGFjZSgpKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgcmV0dXJu
IEVycihGcnJXb3JkRXJyb3I6OkludmFsaWRDaGFyYWN0ZXIpOwo+ICsgICAgICAgIH0KPiArCj4g
KyAgICAgICAgT2soU2VsZihuYW1lKSkKPiArICAgIH0KPiArfQo+ICsKPiAraW1wbCBGcm9tU3Ry
IGZvciBGcnJXb3JkIHsKPiArICAgIHR5cGUgRXJyID0gRnJyV29yZEVycm9yOwo+ICsKPiArICAg
IGZuIGZyb21fc3RyKHM6ICZzdHIpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnI+IHsKPiArICAg
ICAgICBGcnJXb3JkOjpuZXcocy50b19zdHJpbmcoKSkKPiArICAgIH0KPiArfQo+ICsKPiAraW1w
bCBEaXNwbGF5IGZvciBGcnJXb3JkIHsKPiArICAgIGZuIGZtdCgmc2VsZiwgZjogJm11dCBzdGQ6
OmZtdDo6Rm9ybWF0dGVyPCdfPikgLT4gc3RkOjpmbXQ6OlJlc3VsdCB7Cj4gKyAgICAgICAgc2Vs
Zi4wLmZtdChmKQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsIEFzUmVmPHN0cj4gZm9yIEZycldv
cmQgewo+ICsgICAgZm4gYXNfcmVmKCZzZWxmKSAtPiAmc3RyIHsKPiArICAgICAgICAmc2VsZi4w
Cj4gKyAgICB9Cj4gK30KPiArCj4gZGlmZiAtLWdpdCBhL3Byb3htb3gtZnJyL3NyYy9saWIucnMg
Yi9wcm94bW94LWZyci9zcmMvbGliLnJzCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw
MDAwMDAwMDAwMDAuLmNlZWY4Mjk5OTYxOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9wcm94bW94
LWZyci9zcmMvbGliLnJzCj4gQEAgLTAsMCArMSwyMjMgQEAKPiArcHViIG1vZCBjb21tb247Cj4g
K3B1YiBtb2Qgb3BlbmZhYnJpYzsKPiArcHViIG1vZCBvc3BmOwo+ICsKPiArdXNlIHN0ZDo6e2Nv
bGxlY3Rpb25zOjp7aGFzaF9tYXA6OkVudHJ5LCBIYXNoTWFwfSwgZm10OjpEaXNwbGF5LCBzdHI6
OkZyb21TdHJ9Owo+ICsKPiArdXNlIGNvbW1vbjo6e0ZycldvcmQsIEZycldvcmRFcnJvcn07Cj4g
K3VzZSBwcm94bW94X3ZlX2NvbmZpZzo6c2RuOjpmYWJyaWM6OmNvbW1vbjo6SG9zdG5hbWU7CgpN
YXliZSBtb3ZlIGl0IHRvIG5ldHdvcmstdHlwZXMsIGlmIGl0IGlzIGFsd2F5cyBuZWVkZWQ/IFNl
ZW1zIGxpa2UgYQpiZXR0ZXIgZml0LiBFc3BlY2lhbGx5IHNpbmNlIHRoZSBkZXBlbmRlbmN5IGlz
IG9wdGlvbmFsLgoKPiArI1tjZmcoZmVhdHVyZSA9ICJjb25maWctZXh0IildCj4gK3VzZSBwcm94
bW94X3ZlX2NvbmZpZzo6c2RuOjpmYWJyaWM6OkZhYnJpY0NvbmZpZzsKPiArCj4gK3VzZSBzZXJk
ZTo6e0Rlc2VyaWFsaXplLCBTZXJpYWxpemV9Owo+ICt1c2Ugc2VyZGVfd2l0aDo6e0Rlc2VyaWFs
aXplRnJvbVN0ciwgU2VyaWFsaXplRGlzcGxheX07Cj4gK3VzZSB0aGlzZXJyb3I6OkVycm9yOwo+
ICsKPiArI1tkZXJpdmUoRXJyb3IsIERlYnVnKV0KPiArcHViIGVudW0gUm91dGVyTmFtZUVycm9y
IHsKPiArICAgICNbZXJyb3IoImludmFsaWQgbmFtZSIpXQo+ICsgICAgSW52YWxpZE5hbWUsCj4g
KyAgICAjW2Vycm9yKCJpbnZhbGlkIGZyciB3b3JkIildCj4gKyAgICBGcnJXb3JkRXJyb3IoI1tm
cm9tXSBGcnJXb3JkRXJyb3IpLAo+ICt9Cj4gKwo+ICsjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFBh
cnRpYWxFcSwgRXEsIEhhc2gsIERlc2VyaWFsaXplLCBTZXJpYWxpemUpXQo+ICtwdWIgZW51bSBS
b3V0ZXIgewo+ICsgICAgT3BlbkZhYnJpYyhvcGVuZmFicmljOjpPcGVuRmFicmljUm91dGVyKSwK
PiArICAgIE9zcGYob3NwZjo6T3NwZlJvdXRlciksCj4gK30KPiArCj4gK2ltcGwgRnJvbTxvcGVu
ZmFicmljOjpPcGVuRmFicmljUm91dGVyPiBmb3IgUm91dGVyIHsKPiArICAgIGZuIGZyb20odmFs
dWU6IG9wZW5mYWJyaWM6Ok9wZW5GYWJyaWNSb3V0ZXIpIC0+IFNlbGYgewo+ICsgICAgICAgIFJv
dXRlcjo6T3BlbkZhYnJpYyh2YWx1ZSkKPiArICAgIH0KPiArfQo+ICsKPiArI1tkZXJpdmUoQ2xv
bmUsIERlYnVnLCBQYXJ0aWFsRXEsIEVxLCBIYXNoLCBEZXNlcmlhbGl6ZUZyb21TdHIsIFNlcmlh
bGl6ZURpc3BsYXkpXQo+ICtwdWIgZW51bSBSb3V0ZXJOYW1lIHsKPiArICAgIE9wZW5GYWJyaWMo
b3BlbmZhYnJpYzo6T3BlbkZhYnJpY1JvdXRlck5hbWUpLAo+ICsgICAgT3NwZihvc3BmOjpPc3Bm
Um91dGVyTmFtZSksCj4gK30KPiArCj4gK2ltcGwgRnJvbTxvcGVuZmFicmljOjpPcGVuRmFicmlj
Um91dGVyTmFtZT4gZm9yIFJvdXRlck5hbWUgewo+ICsgICAgZm4gZnJvbSh2YWx1ZTogb3BlbmZh
YnJpYzo6T3BlbkZhYnJpY1JvdXRlck5hbWUpIC0+IFNlbGYgewo+ICsgICAgICAgIFNlbGY6Ok9w
ZW5GYWJyaWModmFsdWUpCj4gKyAgICB9Cj4gK30KPiArCj4gK2ltcGwgRGlzcGxheSBmb3IgUm91
dGVyTmFtZSB7Cj4gKyAgICBmbiBmbXQoJnNlbGYsIGY6ICZtdXQgc3RkOjpmbXQ6OkZvcm1hdHRl
cjwnXz4pIC0+IHN0ZDo6Zm10OjpSZXN1bHQgewo+ICsgICAgICAgIG1hdGNoIHNlbGYgewo+ICsg
ICAgICAgICAgICBTZWxmOjpPcGVuRmFicmljKHIpID0+IHIuZm10KGYpLAo+ICsgICAgICAgICAg
ICBTZWxmOjpPc3BmKHIpID0+IHIuZm10KGYpLAo+ICsgICAgICAgIH0KPiArICAgIH0KPiArfQo+
ICsKPiAraW1wbCBGcm9tU3RyIGZvciBSb3V0ZXJOYW1lIHsKPiArICAgIHR5cGUgRXJyID0gUm91
dGVyTmFtZUVycm9yOwo+ICsKPiArICAgIGZuIGZyb21fc3RyKHM6ICZzdHIpIC0+IFJlc3VsdDxT
ZWxmLCBTZWxmOjpFcnI+IHsKPiArICAgICAgICBpZiBsZXQgT2socm91dGVyKSA9IHMucGFyc2Uo
KSB7Cj4gKyAgICAgICAgICAgIHJldHVybiBPayhTZWxmOjpPcGVuRmFicmljKHJvdXRlcikpOwo+
ICsgICAgICAgIH0KCmRvZXMgdGhpcyBtYWtlIHNlbnNlIGhlcmU/IGNhbiB3ZSBhY3R1YWxseSBt
YWtlIGEgY2xlYXIgZGlzdGluY3Rpb24gb24Kd2hldGhlciB0aGlzIGlzIGEgT3BlbkZhYnJpYyAv
IE9TUEYgcm91dGVyIG5hbWUgKGFuZCBmb3IgYWxsIG90aGVyCmZ1dHVyZSBSb3V0ZXJOYW1lcykg
ZnJvbSB0aGUgc3RyaW5nIGFsb25lPyBJIHRoaW5rIGl0IG1pZ2h0IGJlIGJldHRlciB0bwpleHBs
aWNpdGx5IGNvbnN0cnVjdCB0aGUgc3BlY2lmaWMgdHlwZSBhbmQgdGhlbiBtYWtlIGEgUm91dGVy
TmFtZSBvdXQgb2YKaXQgYW5kIGRvIG5vdCBpbXBsZW1lbnQgRnJvbVN0ciBhdCBhbGwuIE9yIGdl
dCByaWQgb2YgUm91dGVyTmFtZQphbHRvZ2V0aGVyIChzZWUgYmVsb3cpLgoKSXQncyBhbHNvIGNv
bnN0cnVjdGluZyBhbiBPcGVuRmFicmljIFJvdXRlck5hbWUgYnV0IG5ldmVyIGFuIE9TUEYgcm91
dGVyCm5hbWUuCgo+ICsKPiArICAgICAgICBFcnIoUm91dGVyTmFtZUVycm9yOjpJbnZhbGlkTmFt
ZSkKPiArICAgIH0KPiArfQo+ICsKPiArLy8vIFRoZSBpbnRlcmZhY2UgbmFtZSBpcyB0aGUgc2Ft
ZSBvbiBvc3BmIGFuZCBvcGVuZmFicmljLCBidXQgaXQgaXMgYW4gZW51bSBzbyB3ZSBjYW4gaGF2
ZSB0d28KPiArLy8vIGRpZmZlcmVudCBlbnRyaWVzIGluIHRoZSBoYXNobWFwLiBUaGlzIGFsbG93
cyB1cyB0byBoYXZlIGFuIGludGVyZmFjZSBpbiBhbiBvc3BmIGFuZCBvcGVuZmFicmljCj4gKy8v
LyBmYWJyaWMuCj4gKyNbZGVyaXZlKENsb25lLCBEZWJ1ZywgUGFydGlhbEVxLCBFcSwgRGVzZXJp
YWxpemUsIFNlcmlhbGl6ZSwgSGFzaCldCj4gK3B1YiBlbnVtIEludGVyZmFjZU5hbWUgewo+ICsg
ICAgT3BlbkZhYnJpYyhGcnJXb3JkKSwKPiArICAgIE9zcGYoRnJyV29yZCksCj4gK30KCm1heWJl
IHRoaXMgc2hvdWxkIGJlIGEgc3RydWN0IHJlcHJlc2VudGluZyBhIGxpbnV4IGludGVyZmFjZSBu
YW1lCihudWwtdGVybWluYXRlZCAxNmJ5dGUgc3RyaW5nKSBpbnN0ZWFkIG9mIGFuIEZycldvcmQ/
Cgo+ICtpbXBsIERpc3BsYXkgZm9yIEludGVyZmFjZU5hbWUgewo+ICsgICAgZm4gZm10KCZzZWxm
LCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsK
PiArICAgICAgICBtYXRjaCBzZWxmIHsKPiArICAgICAgICAgICAgSW50ZXJmYWNlTmFtZTo6T3Bl
bkZhYnJpYyhmcnJfd29yZCkgPT4gZnJyX3dvcmQuZm10KGYpLAo+ICsgICAgICAgICAgICBJbnRl
cmZhY2VOYW1lOjpPc3BmKGZycl93b3JkKSA9PiBmcnJfd29yZC5mbXQoZiksCj4gKyAgICAgICAg
fQo+ICsgICAgICAgIAo+ICsgICAgfQo+ICt9Cj4gKwo+ICsjW2Rlcml2ZShDbG9uZSwgRGVidWcs
IFBhcnRpYWxFcSwgRXEsIERlc2VyaWFsaXplLCBTZXJpYWxpemUpXQo+ICtwdWIgZW51bSBJbnRl
cmZhY2Ugewo+ICsgICAgT3BlbkZhYnJpYyhvcGVuZmFicmljOjpPcGVuRmFicmljSW50ZXJmYWNl
KSwKPiArICAgIE9zcGYob3NwZjo6T3NwZkludGVyZmFjZSksCj4gK30KPiArCj4gK2ltcGwgRnJv
bTxvcGVuZmFicmljOjpPcGVuRmFicmljSW50ZXJmYWNlPiBmb3IgSW50ZXJmYWNlIHsKPiArICAg
IGZuIGZyb20odmFsdWU6IG9wZW5mYWJyaWM6Ok9wZW5GYWJyaWNJbnRlcmZhY2UpIC0+IFNlbGYg
ewo+ICsgICAgICAgIFNlbGY6Ok9wZW5GYWJyaWModmFsdWUpCj4gKyAgICB9Cj4gK30KPiArCj4g
K2ltcGwgRnJvbTxvc3BmOjpPc3BmSW50ZXJmYWNlPiBmb3IgSW50ZXJmYWNlIHsKPiArICAgIGZu
IGZyb20odmFsdWU6IG9zcGY6Ok9zcGZJbnRlcmZhY2UpIC0+IFNlbGYgewo+ICsgICAgICAgIFNl
bGY6Ok9zcGYodmFsdWUpCj4gKyAgICB9Cj4gK30KPiArCj4gKyNbZGVyaXZlKENsb25lLCBEZWJ1
ZywgUGFydGlhbEVxLCBFcSwgRGVmYXVsdCwgRGVzZXJpYWxpemUsIFNlcmlhbGl6ZSldCj4gK3B1
YiBzdHJ1Y3QgRnJyQ29uZmlnIHsKPiArICAgIHJvdXRlcjogSGFzaE1hcDxSb3V0ZXJOYW1lLCBS
b3V0ZXI+LAo+ICsgICAgaW50ZXJmYWNlczogSGFzaE1hcDxJbnRlcmZhY2VOYW1lLCBJbnRlcmZh
Y2U+LAoKYXJlIHdlIGV2ZXIgcXVlcnlpbmcgdGhlIGZyciByb3V0ZXIvaW50ZXJmYWNlIGJ5IG5h
bWU/IGp1ZGdpbmcgZnJvbSB0aGUKcHVibGljIEFQSSB3ZSBkb24ndCBhbmQgb25seSBpdGVyYXRl
IG92ZXIgaXQuIHdlIGNvdWxkIG1vdmUgdGhlIG5hbWUKaW50byB0aGUgUm91dGVyL0ludGVyZmFj
ZSB0aGVuLCB0aGlzIHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBuYW1lIGFsd2F5cwpmaXRzIHRoZSBj
b25jcmV0ZSByb3V0ZXIuIFdlIGNvdWxkIHByb2JhYmx5IGFsc28gbWFrZSBjb252ZXJ0aW5nIGZy
b20KdGhlIHNlY3Rpb24gY29uZmlnIGVhc2llciB0aGVuIGFuZCBwb3NzaWJseSBzYXZlIHVzIHRo
ZSB3aG9sZSBSb3V0ZXJOYW1lCnN0cnVjdC4KCkFyZSBkdXBsaWNhdGVzIHBvc3NpYmxlIHdpdGgg
aG93IHRoZSBJRCBpbiB0aGUgU2VjdGlvbkNvbmZpZyB3b3Jrcz8gSWYKd2Ugd2FudCB0byBhdm9p
ZCB0aGF0LCB3ZSBjb3VsZCBwcm9iYWJseSB1c2Ugb3RoZXIgd2F5cy4KCj4gK30KPiArCj4gK2lt
cGwgRnJyQ29uZmlnIHsKPiArICAgIHB1YiBmbiBuZXcoKSAtPiBTZWxmIHsKPiArICAgICAgICBT
ZWxmOjpkZWZhdWx0KCkKPiArICAgIH0KPiArCj4gKyAgICAjW2NmZyhmZWF0dXJlID0gImNvbmZp
Zy1leHQiKV0KPiArICAgIHB1YiBmbiBidWlsZGVyKCkgLT4gRnJyQ29uZmlnQnVpbGRlciB7Cj4g
KyAgICAgICAgRnJyQ29uZmlnQnVpbGRlcjo6ZGVmYXVsdCgpCj4gKyAgICB9CgpzZWUgYWJvdmUg
Zm9yIGlmIHdlIHJlYWxseSBuZWVkIGEgYnVpbGRlciBoZXJlIG9yIGlmIGltcGxlbWVudGluZwpj
b252ZXJzaW9uIHRyYWl0cyBzdWZmaWNlcy4KCj4gKwo+ICsgICAgcHViIGZuIHJvdXRlcigmc2Vs
ZikgLT4gaW1wbCBJdGVyYXRvcjxJdGVtID0gKCZSb3V0ZXJOYW1lLCAmUm91dGVyKT4gKyAnXyB7
Cj4gKyAgICAgICAgc2VsZi5yb3V0ZXIuaXRlcigpCj4gKyAgICB9Cj4gKwo+ICsgICAgcHViIGZu
IGludGVyZmFjZXMoJnNlbGYpIC0+IGltcGwgSXRlcmF0b3I8SXRlbSA9ICgmSW50ZXJmYWNlTmFt
ZSwgJkludGVyZmFjZSk+ICsgJ18gewo+ICsgICAgICAgIHNlbGYuaW50ZXJmYWNlcy5pdGVyKCkK
PiArICAgIH0KPiArfQo+ICsKPiArI1tkZXJpdmUoRGVmYXVsdCldCj4gKyNbY2ZnKGZlYXR1cmUg
PSAiY29uZmlnLWV4dCIpXQo+ICtwdWIgc3RydWN0IEZyckNvbmZpZ0J1aWxkZXIgewo+ICsgICAg
ZmFicmljczogRmFicmljQ29uZmlnLAo+ICsgICAgLy9iZ3A6IE9wdGlvbjxpbnRlcm5hbDo6Qmdw
Q29uZmlnPgo+ICt9Cj4gKwo+ICsjW2NmZyhmZWF0dXJlID0gImNvbmZpZy1leHQiKV0KPiAraW1w
bCBGcnJDb25maWdCdWlsZGVyIHsKPiArICAgIHB1YiBmbiBhZGRfZmFicmljcyhtdXQgc2VsZiwg
ZmFicmljOiBGYWJyaWNDb25maWcpIC0+IEZyckNvbmZpZ0J1aWxkZXIgewo+ICsgICAgICAgIHNl
bGYuZmFicmljcyA9IGZhYnJpYzsKPiArICAgICAgICBzZWxmCj4gKyAgICB9CgpGcm9tPEZhYnJp
Y0NvbmZpZz4gbWlnaHQgYmUgYmV0dGVyIGlmIGl0IHJlcGxhY2VzIHNlbGYuZmFicmljcyAvCmNv
bnN1bWVzIEZhYnJpY0NvbmZpZyBhbnl3YXk/IE1heWJlIGV2ZW4gVHJ5RnJvbTxGYWJyaWNDb25m
aWc+IGZvcgpGcnJDb25maWcgaXRzZWxmPwoKPiArCj4gKyAgICBwdWIgZm4gYnVpbGQoc2VsZiwg
Y3VycmVudF9ub2RlOiAmc3RyKSAtPiBSZXN1bHQ8RnJyQ29uZmlnLCBhbnlob3c6OkVycm9yPiB7
Cj4gKyAgICAgICAgbGV0IG11dCByb3V0ZXI6IEhhc2hNYXA8Um91dGVyTmFtZSwgUm91dGVyPiA9
IEhhc2hNYXA6Om5ldygpOwo+ICsgICAgICAgIGxldCBtdXQgaW50ZXJmYWNlczogSGFzaE1hcDxJ
bnRlcmZhY2VOYW1lLCBJbnRlcmZhY2U+ID0gSGFzaE1hcDo6bmV3KCk7Cj4gKwo+ICsgICAgICAg
IGlmIGxldCBTb21lKG9wZW5mYWJyaWMpID0gc2VsZi5mYWJyaWNzLm9wZW5mYWJyaWMoKSB7Cj4g
KyAgICAgICAgICAgIC8vIG9wZW5mYWJyaWMKPiArICAgICAgICAgICAgb3BlbmZhYnJpYwo+ICsg
ICAgICAgICAgICAgICAgLmZhYnJpY3MoKQo+ICsgICAgICAgICAgICAgICAgLml0ZXIoKQo+ICsg
ICAgICAgICAgICAgICAgLnRyeV9mb3JfZWFjaCh8KGZhYnJpY19pZCwgZmFicmljX2NvbmZpZyl8
IHsKPiArICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZV9jb25maWcgPSBmYWJyaWNfY29uZmln
Lm5vZGVzKCkuZ2V0KCZIb3N0bmFtZTo6bmV3KGN1cnJlbnRfbm9kZSkpOwo+ICsgICAgICAgICAg
ICAgICAgICAgIGlmIGxldCBTb21lKG5vZGVfY29uZmlnKSA9IG5vZGVfY29uZmlnIHsKPiArICAg
ICAgICAgICAgICAgICAgICAgICAgbGV0IG9mciA9IG9wZW5mYWJyaWM6Ok9wZW5GYWJyaWNSb3V0
ZXI6OmZyb20oKGZhYnJpY19jb25maWcsIG5vZGVfY29uZmlnKSk7Cj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCByb3V0ZXJfaXRlbSA9IFJvdXRlcjo6T3BlbkZhYnJpYyhvZnIpOwo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm91dGVyX25hbWUgPSBSb3V0ZXJOYW1lOjpPcGVu
RmFicmljKAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmZhYnJpYzo6T3BlbkZh
YnJpY1JvdXRlck5hbWU6OnRyeV9mcm9tKGZhYnJpY19pZCk/LAo+ICsgICAgICAgICAgICAgICAg
ICAgICAgICApOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXIuaW5zZXJ0KHJvdXRl
cl9uYW1lLmNsb25lKCksIHJvdXRlcl9pdGVtKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZV9jb25maWcuaW50ZXJmYWNlcygpLnRyeV9mb3JfZWFjaCh8aW50ZXJmYWNlfCB7Cj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXV0IG9wZW5mYWJyaWNfaW50ZXJmYWNlOiBv
cGVuZmFicmljOjpPcGVuRmFicmljSW50ZXJmYWNlID0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZmFicmljX2lkLCBpbnRlcmZhY2UpLnRyeV9pbnRvKCk/OwoKVGhlIG9ubHkg
ZmFsbGlibGUgdGhpbmcgaGVyZSBpcyBjb25zdHJ1Y3RpbmcgdGhlIFJvdXRlck5hbWUsIHNvIHdl
IGNvdWxkCmp1c3QgY2xvbmUgaXQgZnJvbSBhYm92ZSBhbmQgbWFrZSBhCk9wZW5GYWJyaWNJbnRl
cmZhY2U6OmZyb21fc2VjdGlvbl9jb25maWcoKSBtZXRob2QgdGhhdCBhY2NlcHRzIHRoZSBuYW1l
Cisgc2VjdGlvbmNvbmZpZyBzdHJ1Y3RzPwoKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIG5vIHNwZWNpZmljIGhlbGxvX2ludGVydmFsIGlzIHNldCwgZ2V0IGRlZmF1bHQgb25l
IGZyb20gZmFicmljCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25maWcKPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9wZW5mYWJyaWNfaW50ZXJmYWNlLmhlbGxv
X2ludGVydmFsKCkuaXNfbm9uZSgpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcGVuZmFicmljX2ludGVyZmFjZQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuc2V0X2hlbGxvX2ludGVydmFsKGZhYnJpY19jb25maWcuaGVsbG9faW50ZXJ2YWwoKS5j
bG9uZSgpKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxldCBpbnRlcmZhY2VfbmFtZSA9IEludGVyZmFjZU5hbWU6Ok9wZW5G
YWJyaWMoRnJyV29yZDo6ZnJvbV9zdHIoaW50ZXJmYWNlLm5hbWUoKSk/KTsKPiArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE9wZW5mYWJyaWMgZG9lc24ndCBhbGxvdyBhbiBpbnRlcmZh
Y2UgdG8gYmUgaW4gbXVsdGlwbGUgb3BlbmZhYnJpYwo+ICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZmFicmljcy4gRnJyIHdpbGwganVzdCBpZ25vcmUgaXQgYW5kIHRha2UgdGhlIGZp
cnN0IG9uZS4KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxldCBFbnRyeTo6VmFj
YW50KGUpID0gaW50ZXJmYWNlcy5lbnRyeShpbnRlcmZhY2VfbmFtZSkgewo+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGUuaW5zZXJ0KG9wZW5mYWJyaWNfaW50ZXJmYWNlLmludG8o
KSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRyYWNpbmc6Ondhcm4hKCJBbiBpbnRlcmZhY2UgY2Fubm90
IGJlIGluIG11bHRpcGxlIG9wZW5mYWJyaWMgZmFicmljcyIpOwo+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKaWYgbGV0IEVycihfKSA9IGludGVyZmFjZXMudHJ5X2luc2VydCguLikg
bWF5YmUgKGlmIHdlIGtlZXAgdGhlIEhhc2hNYXApPwoKPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9rOjo8KCksIGFueWhvdzo6RXJyb3I+KCgpKQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICB9KT87Cj4gKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAg
ICAgICAgICAgICAgdHJhY2luZzo6d2FybiEoIm5vIG5vZGUgY29uZmlndXJhdGlvbiBmb3IgZmFi
cmljIFwie2ZhYnJpY19pZH1cIiDigJMgdGhpcyBmYWJyaWMgaXMgbm90IGNvbmZpZ3VyZWQgZm9y
IHRoaXMgbm9kZS4iKTsKCk1heWJlIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gc3BsaXQgdGhpcyBp
bnRvIHR3byBmdW5jdGlvbnMsIHdoZXJlIHdlCmNvdWxkIGp1c3QgcmV0dXJuIGVhcmx5IGlmIHRo
ZXJlIGlzIG5vIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgbm9kZT8KClRoZW4gaGVyZSBhbiBlYXJs
eSByZXR1cm4gd291bGQgc3VmZmljZSwgc2luY2Ugb3RoZXJ3aXNlIHRoZSBsb2cgZ2V0cwpzcGFt
bWVkIG9uIG5vZGVzIHRoYXQgYXJlIHNpbXBseSBub3QgcGFydCBvZiBhIGZhYnJpYyAod2hpY2gg
aXMKcGVyZmVjdGx5IHZhbGlkKT8KCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBP
azo6PCgpLCBhbnlob3c6OkVycm9yPigoKSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICsg
ICAgICAgICAgICAgICAgICAgIE9rKCgpKQo+ICsgICAgICAgICAgICAgICAgfSk/Owo+ICsgICAg
ICAgIH0KPiArICAgICAgICBpZiBsZXQgU29tZShvc3BmKSA9IHNlbGYuZmFicmljcy5vc3BmKCkg
ewo+ICsgICAgICAgICAgICAvLyBvc3BmCj4gKyAgICAgICAgICAgIG9zcGYuZmFicmljcygpCj4g
KyAgICAgICAgICAgICAgICAuaXRlcigpCj4gKyAgICAgICAgICAgICAgICAudHJ5X2Zvcl9lYWNo
KHwoZmFicmljX2lkLCBmYWJyaWNfY29uZmlnKXwgewo+ICsgICAgICAgICAgICAgICAgICAgIGxl
dCBub2RlX2NvbmZpZyA9IGZhYnJpY19jb25maWcubm9kZXMoKS5nZXQoJkhvc3RuYW1lOjpuZXco
Y3VycmVudF9ub2RlKSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgaWYgbGV0IFNvbWUobm9kZV9j
b25maWcpID0gbm9kZV9jb25maWcgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3Nw
Zl9yb3V0ZXIgPSBvc3BmOjpPc3BmUm91dGVyOjpmcm9tKChmYWJyaWNfY29uZmlnLCBub2RlX2Nv
bmZpZykpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm91dGVyX2l0ZW0gPSBSb3V0
ZXI6Ok9zcGYob3NwZl9yb3V0ZXIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm91
dGVyX25hbWUgPSBSb3V0ZXJOYW1lOjpPc3BmKG9zcGY6Ok9zcGZSb3V0ZXJOYW1lOjpmcm9tKG9z
cGY6OkFyZWE6OnRyeV9mcm9tKGZhYnJpY19pZCk/KSk7Cj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJvdXRlci5pbnNlcnQocm91dGVyX25hbWUuY2xvbmUoKSwgcm91dGVyX2l0ZW0pOwo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlX2NvbmZpZy5pbnRlcmZhY2VzKCkudHJ5X2Zvcl9l
YWNoKHxpbnRlcmZhY2V8IHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvc3Bm
X2ludGVyZmFjZTogb3NwZjo6T3NwZkludGVyZmFjZSA9IChmYWJyaWNfaWQsIGludGVyZmFjZSku
dHJ5X2ludG8oKT87Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGludGVy
ZmFjZV9uYW1lID0gSW50ZXJmYWNlTmFtZTo6T3NwZihGcnJXb3JkOjpmcm9tX3N0cihpbnRlcmZh
Y2UubmFtZSgpKT8pOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3NwZiBvbmx5
IGFsbG93cyBvbmUgYXJlYSBwZXIgaW50ZXJmYWNlLCBzbyBvbmUgaW50ZXJmYWNlIGNhbm5vdCBi
ZQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdHdvIGFyZWFzIChmYWJyaWNz
KS4gVGhvdWdoIGV2ZW4gaWYgdGhpcyBoYXBwZW5zLCBpdCBpcyBub3QgYSBiaWcKPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2JsZW0gYXMgZnJyIGZpbHRlcnMgaXQgb3V0Lgo+
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGV0IEVudHJ5OjpWYWNhbnQoZSkgPSBp
bnRlcmZhY2VzLmVudHJ5KGludGVyZmFjZV9uYW1lKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZS5pbnNlcnQob3NwZl9pbnRlcmZhY2UuaW50bygpKTsKPiArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJhY2luZzo6d2FybiEoIkFuIGludGVyZmFjZSBjYW5ub3QgYmUgaW4gbXVsdGlwbGUg
b3NwZiBhcmVhcyIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT2s6OjwoKSwgYW55aG93OjpFcnJvcj4oKCkpCj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pPzsKPiArICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewo+
ICsgICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nOjp3YXJuISgibm8gbm9kZSBjb25maWd1
cmF0aW9uIGZvciBmYWJyaWMgXCJ7ZmFicmljX2lkfVwiIOKAkyB0aGlzIGZhYnJpYyBpcyBub3Qg
Y29uZmlndXJlZCBmb3IgdGhpcyBub2RlLiIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gT2s6OjwoKSwgYW55aG93OjpFcnJvcj4oKCkpOyAKPiArICAgICAgICAgICAgICAgICAg
ICB9Cj4gKyAgICAgICAgICAgICAgICAgICAgT2soKCkpCj4gKyAgICAgICAgICAgICAgICB9KT87
Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIE9rKEZyckNvbmZpZyB7IHJvdXRlciwgaW50ZXJmYWNl
cyB9KQoKc2FtZSBwb2ludHMgYXMgYWJvdmUgYmFzaWNhbGx5Cgo+ICsgICAgfQo+ICt9Cj4gZGlm
ZiAtLWdpdCBhL3Byb3htb3gtZnJyL3NyYy9vcGVuZmFicmljLnJzIGIvcHJveG1veC1mcnIvc3Jj
L29wZW5mYWJyaWMucnMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw
MC4uMTJjZmM2MTIzNmNiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Byb3htb3gtZnJyL3NyYy9v
cGVuZmFicmljLnJzCj4gQEAgLTAsMCArMSwxMzcgQEAKPiArdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsK
PiArdXNlIHN0ZDo6e2ZtdDo6RGlzcGxheSwgc3RyOjpGcm9tU3RyfTsKPiArCj4gK3VzZSBwcm94
bW94X25ldHdvcmtfdHlwZXM6Om5ldDo6TmV0Owo+ICt1c2Ugc2VyZGU6OntEZXNlcmlhbGl6ZSwg
U2VyaWFsaXplfTsKPiArdXNlIHNlcmRlX3dpdGg6OntEZXNlcmlhbGl6ZUZyb21TdHIsIFNlcmlh
bGl6ZURpc3BsYXl9Owo+ICsKPiArI1tjZmcoZmVhdHVyZSA9ICJjb25maWctZXh0IildCj4gK3Vz
ZSBwcm94bW94X3ZlX2NvbmZpZzo6c2RuOjpmYWJyaWM6Om9wZW5mYWJyaWM6OntzZWxmLCBpbnRl
cm5hbH07Cj4gK3VzZSB0aGlzZXJyb3I6OkVycm9yOwo+ICsKPiArdXNlIGNyYXRlOjpjb21tb246
OkZycldvcmQ7Cj4gK3VzZSBjcmF0ZTo6Um91dGVyTmFtZUVycm9yOwo+ICsKPiArI1tkZXJpdmUo
Q2xvbmUsIERlYnVnLCBQYXJ0aWFsRXEsIEVxLCBIYXNoLCBEZXNlcmlhbGl6ZUZyb21TdHIsIFNl
cmlhbGl6ZURpc3BsYXkpXQo+ICtwdWIgc3RydWN0IE9wZW5GYWJyaWNSb3V0ZXJOYW1lKEZycldv
cmQpOwo+ICsKPiAraW1wbCBGcm9tPEZycldvcmQ+IGZvciBPcGVuRmFicmljUm91dGVyTmFtZSB7
Cj4gKyAgICBmbiBmcm9tKHZhbHVlOiBGcnJXb3JkKSAtPiBTZWxmIHsKPiArICAgICAgICBTZWxm
KHZhbHVlKQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsIE9wZW5GYWJyaWNSb3V0ZXJOYW1lIHsK
PiArICAgIHB1YiBmbiBuZXcobmFtZTogRnJyV29yZCkgLT4gU2VsZiB7Cj4gKyAgICAgICAgU2Vs
ZihuYW1lKQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsIEZyb21TdHIgZm9yIE9wZW5GYWJyaWNS
b3V0ZXJOYW1lIHsKPiArICAgIHR5cGUgRXJyID0gUm91dGVyTmFtZUVycm9yOwo+ICsKPiArICAg
IGZuIGZyb21fc3RyKHM6ICZzdHIpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnI+IHsKPiArICAg
ICAgICBpZiBsZXQgU29tZShuYW1lKSA9IHMuc3RyaXBfcHJlZml4KCJvcGVuZmFicmljICIpIHsK
PiArICAgICAgICAgICAgcmV0dXJuIE9rKFNlbGY6Om5ldygKPiArICAgICAgICAgICAgICAgIEZy
cldvcmQ6OmZyb21fc3RyKG5hbWUpLm1hcF9lcnIofF98IFJvdXRlck5hbWVFcnJvcjo6SW52YWxp
ZE5hbWUpPywKPiArICAgICAgICAgICAgKSk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBF
cnIoUm91dGVyTmFtZUVycm9yOjpJbnZhbGlkTmFtZSkKPiArICAgIH0KPiArfQo+ICsKPiAraW1w
bCBEaXNwbGF5IGZvciBPcGVuRmFicmljUm91dGVyTmFtZSB7Cj4gKyAgICBmbiBmbXQoJnNlbGYs
IGY6ICZtdXQgc3RkOjpmbXQ6OkZvcm1hdHRlcjwnXz4pIC0+IHN0ZDo6Zm10OjpSZXN1bHQgewo+
ICsgICAgICAgIHdyaXRlIShmLCAib3BlbmZhYnJpYyB7fSIsIHNlbGYuMCkKPiArICAgIH0KPiAr
fQo+ICsKPiArI1tkZXJpdmUoQ2xvbmUsIERlYnVnLCBQYXJ0aWFsRXEsIEVxLCBIYXNoLCBEZXNl
cmlhbGl6ZSwgU2VyaWFsaXplKV0KPiArcHViIHN0cnVjdCBPcGVuRmFicmljUm91dGVyIHsKPiAr
ICAgIG5ldDogTmV0LAo+ICt9Cj4gKwo+ICtpbXBsIE9wZW5GYWJyaWNSb3V0ZXIgewo+ICsgICAg
cHViIGZuIG5ldyhuZXQ6IE5ldCkgLT4gU2VsZiB7Cj4gKyAgICAgICAgU2VsZiB7Cj4gKyAgICAg
ICAgICAgIG5ldCwKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcHViIGZuIG5ldCgm
c2VsZikgLT4gJk5ldCB7Cj4gKyAgICAgICAgJnNlbGYubmV0Cj4gKyAgICB9Cj4gK30KPiArCj4g
KyNbZGVyaXZlKENsb25lLCBEZWJ1ZywgUGFydGlhbEVxLCBFcSwgSGFzaCwgRGVzZXJpYWxpemUs
IFNlcmlhbGl6ZSldCj4gK3B1YiBzdHJ1Y3QgT3BlbkZhYnJpY0ludGVyZmFjZSB7Cj4gKyAgICAv
LyBOb3RlOiBhbiBpbnRlcmZhY2UgY2FuIG9ubHkgYmUgYSBwYXJ0IG9mIGEgc2luZ2xlIGZhYnJp
YyAoc28gbm8gdmVjIG5lZWRlZCBoZXJlKQo+ICsgICAgZmFicmljX2lkOiBPcGVuRmFicmljUm91
dGVyTmFtZSwKPiArICAgIHBhc3NpdmU6IE9wdGlvbjxib29sPiwKPiArICAgIGhlbGxvX2ludGVy
dmFsOiBPcHRpb248b3BlbmZhYnJpYzo6SGVsbG9JbnRlcnZhbD4sCj4gKyAgICBjc25wX2ludGVy
dmFsOiBPcHRpb248b3BlbmZhYnJpYzo6Q3NucEludGVydmFsPiwKPiArICAgIGhlbGxvX211bHRp
cGxpZXI6IE9wdGlvbjxvcGVuZmFicmljOjpIZWxsb011bHRpcGxpZXI+LAo+ICt9Cj4gKwo+ICtp
bXBsIE9wZW5GYWJyaWNJbnRlcmZhY2Ugewo+ICsgICAgcHViIGZuIGZhYnJpY19pZCgmc2VsZikg
LT4gJk9wZW5GYWJyaWNSb3V0ZXJOYW1lIHsKPiArICAgICAgICAmc2VsZi5mYWJyaWNfaWQKPiAr
ICAgIH0KPiArICAgIHB1YiBmbiBwYXNzaXZlKCZzZWxmKSAtPiAmT3B0aW9uPGJvb2w+IHsKPiAr
ICAgICAgICAmc2VsZi5wYXNzaXZlCj4gKyAgICB9Cj4gKyAgICBwdWIgZm4gaGVsbG9faW50ZXJ2
YWwoJnNlbGYpIC0+ICZPcHRpb248b3BlbmZhYnJpYzo6SGVsbG9JbnRlcnZhbD4gewo+ICsgICAg
ICAgICZzZWxmLmhlbGxvX2ludGVydmFsCj4gKyAgICB9Cj4gKyAgICBwdWIgZm4gY3NucF9pbnRl
cnZhbCgmc2VsZikgLT4gJk9wdGlvbjxvcGVuZmFicmljOjpDc25wSW50ZXJ2YWw+IHsKPiArICAg
ICAgICAmc2VsZi5jc25wX2ludGVydmFsCj4gKyAgICB9Cj4gKyAgICBwdWIgZm4gaGVsbG9fbXVs
dGlwbGllcigmc2VsZikgLT4gJk9wdGlvbjxvcGVuZmFicmljOjpIZWxsb011bHRpcGxpZXI+IHsK
PiArICAgICAgICAmc2VsZi5oZWxsb19tdWx0aXBsaWVyCj4gKyAgICB9CgpJZiB3ZSBpbXBsZW1l
bnQgQ29weSBmb3IgdGhvc2UgdHlwZXMgaXQncyB1c3VhbGx5IGp1c3QgZWFzaWVyIHRvIHJldHVy
bgp0aGVtIG93bmVkLgoKPiArICAgIHB1YiBmbiBzZXRfaGVsbG9faW50ZXJ2YWwoJm11dCBzZWxm
LCBpbnRlcnZhbDogT3B0aW9uPG9wZW5mYWJyaWM6OkhlbGxvSW50ZXJ2YWw+KSB7CgpuaXQ6IEkg
dXN1YWxseSBsaWtlIGltcGwgSW50bzxPcHRpb248Li4+PiBiZWNhdXNlIGl0IG1ha2VzIHRoZSBB
UEkgbmljZXIKKGRvbid0IGhhdmUgdG8gd3JpdGUgU29tZSguLikgYWxsIHRoZSB0aW1lIC4uLikK
Cj4gKyAgICAgICAgc2VsZi5oZWxsb19pbnRlcnZhbCA9IGludGVydmFsOwo+ICsgICAgfQo+ICt9
Cj4gKwo+ICsjW2Rlcml2ZShFcnJvciwgRGVidWcpXQo+ICtwdWIgZW51bSBPcGVuRmFicmljSW50
ZXJmYWNlRXJyb3Igewo+ICsgICAgI1tlcnJvcigiVW5rbm93biBlcnJvciBjb252ZXJ0aW5nIHRv
IE9wZW5GYWJyaWNJbnRlcmZhY2UiKV0KPiArICAgIFVua25vd25FcnJvciwKPiArICAgICNbZXJy
b3IoIkVycm9yIGNvbnZlcnRpbmcgcm91dGVyIG5hbWUiKV0KPiArICAgIFJvdXRlck5hbWVFcnJv
cigjW2Zyb21dIFJvdXRlck5hbWVFcnJvciksCj4gK30KPiArCj4gKyNbY2ZnKGZlYXR1cmUgPSAi
Y29uZmlnLWV4dCIpXQo+ICtpbXBsIFRyeUZyb208KCZpbnRlcm5hbDo6RmFicmljSWQsICZpbnRl
cm5hbDo6SW50ZXJmYWNlKT4gZm9yIE9wZW5GYWJyaWNJbnRlcmZhY2Ugewo+ICsgICAgdHlwZSBF
cnJvciA9IE9wZW5GYWJyaWNJbnRlcmZhY2VFcnJvcjsKPiArCj4gKyAgICBmbiB0cnlfZnJvbSh2
YWx1ZTogKCZpbnRlcm5hbDo6RmFicmljSWQsICZpbnRlcm5hbDo6SW50ZXJmYWNlKSkgLT4gUmVz
dWx0PFNlbGYsIFNlbGY6OkVycm9yPiB7Cj4gKyAgICAgICAgT2soU2VsZiB7Cj4gKyAgICAgICAg
ICAgIGZhYnJpY19pZDogT3BlbkZhYnJpY1JvdXRlck5hbWU6OnRyeV9mcm9tKHZhbHVlLjApPywK
PiArICAgICAgICAgICAgcGFzc2l2ZTogdmFsdWUuMS5wYXNzaXZlKCksCj4gKyAgICAgICAgICAg
IGhlbGxvX2ludGVydmFsOiB2YWx1ZS4xLmhlbGxvX2ludGVydmFsKCkuY2xvbmUoKSwKPiArICAg
ICAgICAgICAgY3NucF9pbnRlcnZhbDogdmFsdWUuMS5jc25wX2ludGVydmFsKCkuY2xvbmUoKSwK
PiArICAgICAgICAgICAgaGVsbG9fbXVsdGlwbGllcjogdmFsdWUuMS5oZWxsb19tdWx0aXBsaWVy
KCkuY2xvbmUoKSwKCldlIGNhbiBlYXNpbHkgaW1wbGVtZW50IENvcHkgZm9yIHRob3NlIHZhbHVl
cywgc2luY2UgdGhleSdyZSB1MTYuCgo+ICsgICAgICAgIH0pCj4gKyAgICB9Cj4gK30KPiArCj4g
KyNbY2ZnKGZlYXR1cmUgPSAiY29uZmlnLWV4dCIpXQo+ICtpbXBsIFRyeUZyb208JmludGVybmFs
OjpGYWJyaWNJZD4gZm9yIE9wZW5GYWJyaWNSb3V0ZXJOYW1lIHsKPiArICAgIHR5cGUgRXJyb3Ig
PSBSb3V0ZXJOYW1lRXJyb3I7Cj4gKwo+ICsgICAgZm4gdHJ5X2Zyb20odmFsdWU6ICZpbnRlcm5h
bDo6RmFicmljSWQpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnJvcj4gewo+ICsgICAgICAgIE9r
KE9wZW5GYWJyaWNSb3V0ZXJOYW1lOjpuZXcoRnJyV29yZDo6bmV3KHZhbHVlLnRvX3N0cmluZygp
KT8pKQo+ICsgICAgfQo+ICt9Cj4gKwo+ICsjW2NmZyhmZWF0dXJlID0gImNvbmZpZy1leHQiKV0K
PiAraW1wbCBGcm9tPCgmaW50ZXJuYWw6OkZhYnJpY0NvbmZpZywgJmludGVybmFsOjpOb2RlQ29u
ZmlnKT4gZm9yIE9wZW5GYWJyaWNSb3V0ZXIgewo+ICsgICAgZm4gZnJvbSh2YWx1ZTogKCZpbnRl
cm5hbDo6RmFicmljQ29uZmlnLCAmaW50ZXJuYWw6Ok5vZGVDb25maWcpKSAtPiBTZWxmIHsKPiAr
ICAgICAgICBTZWxmIHsKPiArICAgICAgICAgICAgbmV0OiB2YWx1ZS4xLm5ldCgpLnRvX293bmVk
KCksCj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICt9CgpXZSBuZXZlciB1c2UgdmFsdWUuMCBoZXJl
LCBidXQgd2UgbWlnaHQgaWYgd2UgaGF2ZSBzb21lIGdsb2JhbCBvcHRpb25zLApyaWdodD8KCj4g
ZGlmZiAtLWdpdCBhL3Byb3htb3gtZnJyL3NyYy9vc3BmLnJzIGIvcHJveG1veC1mcnIvc3JjL29z
cGYucnMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYTE0ZWYy
YzU1YzI3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Byb3htb3gtZnJyL3NyYy9vc3BmLnJzCj4g
QEAgLTAsMCArMSwxNDggQEAKPiArdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKPiArdXNlIHN0ZDo6bmV0
OjpJcHY0QWRkcjsKPiArdXNlIHN0ZDo6e2ZtdDo6RGlzcGxheSwgc3RyOjpGcm9tU3RyfTsKPiAr
Cj4gK3VzZSBzZXJkZTo6e0Rlc2VyaWFsaXplLCBTZXJpYWxpemV9Owo+ICsKPiArI1tjZmcoZmVh
dHVyZSA9ICJjb25maWctZXh0IildCj4gK3VzZSBwcm94bW94X3ZlX2NvbmZpZzo6c2RuOjpmYWJy
aWM6Om9zcGY6OmludGVybmFsOwo+ICt1c2UgdGhpc2Vycm9yOjpFcnJvcjsKPiArCj4gK3VzZSBj
cmF0ZTo6Y29tbW9uOjp7RnJyV29yZCwgRnJyV29yZEVycm9yfTsKPiArCj4gKy8vLyBUaGUgbmFt
ZSBvZiB0aGUgb3NwZiBmcnIgcm91dGVyLiBUaGVyZSBpcyBvbmx5IG9uZSBvc3BmIGZhYnJpYyBw
b3NzaWJsZSBpbiBmcnIgKGlnbm9yaW5nCj4gKy8vLyBtdWx0aXBsZSBpbnZvY2F0aW9ucyBvZiB0
aGUgb3NwZmQgZGFlbW9uKSBhbmQgdGhlIHNlcGFyYXRpb24gaXMgZG9uZSB3aXRoIGFyZWFzLiBT
dGlsbCwKPiArLy8vIGRpZmZlcmVudCBhcmVhcyBoYXZlIHRoZSBzYW1lIGZyciByb3V0ZXIsIHNv
IHRoZSBuYW1lIG9mIHRoZSByb3V0ZXIgaXMganVzdCAib3NwZiIgaW4gInJvdXRlcgo+ICsvLy8g
b3NwZiIuIFRoaXMgdHlwZSBzdGlsbCBjb250YWlucyB0aGUgQXJlYSBzbyB0aGF0IHdlIGNhbiBp
bnNlcnQgaXQgaW4gdGhlIEhhc2htYXAuCj4gKyNbZGVyaXZlKENsb25lLCBEZWJ1ZywgUGFydGlh
bEVxLCBFcSwgSGFzaCwgRGVzZXJpYWxpemUsIFNlcmlhbGl6ZSldCj4gK3B1YiBzdHJ1Y3QgT3Nw
ZlJvdXRlck5hbWUoQXJlYSk7Cj4gKwo+ICtpbXBsIEZyb208QXJlYT4gZm9yIE9zcGZSb3V0ZXJO
YW1lIHsKPiArICAgIGZuIGZyb20odmFsdWU6IEFyZWEpIC0+IFNlbGYgewo+ICsgICAgICAgIFNl
bGYodmFsdWUpCj4gKyAgICB9Cj4gK30KPiArCj4gK2ltcGwgRGlzcGxheSBmb3IgT3NwZlJvdXRl
ck5hbWUgewo+ICsgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8
J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKPiArICAgICAgICB3cml0ZSEoZiwgIm9zcGYiKQoK
dGhpcyBpcyBtaXNzaW5nIHRoZSBhcmVhLCBvcj8KCj4gKyAgICB9Cj4gK30KPiArCj4gKyNbZGVy
aXZlKEVycm9yLCBEZWJ1ZyldCj4gK3B1YiBlbnVtIEFyZWFQYXJzaW5nRXJyb3Igewo+ICsgICAg
I1tlcnJvcigiSW52YWxpZCBhcmVhIGlkZW5pdGlmaWVyLiBBcmVhIG11c3QgYmUgYSBudW1iZXIg
b3IgYW4gaXB2NCBhZGRyZXNzLiIpXQo+ICsgICAgSW52YWxpZEFyZWEsCj4gKyAgICAjW2Vycm9y
KCJJbnZhbGlkIGFyZWEgaWRlbml0aWZpZXIuIE1pc3NpbmcgJ2FyZWEnIHByZWZpeC4iKV0KPiAr
ICAgIE1pc3NpbmdQcmVmaXgsCj4gKyAgICAjW2Vycm9yKCJFcnJvciBwYXJzaW5nIHRvIEZycldv
cmQiKV0KPiArICAgIEZycldvcmRFcnJvcigjW2Zyb21dIEZycldvcmRFcnJvciksCj4gK30KPiAr
Cj4gKy8vLyBUaGUgT1NQRiBBcmVhLiBNb3N0IGNvbW1vbmx5LCB0aGlzIGlzIGp1c3QgYSBudW1i
ZXIsIGUuZy4gNSwgYnV0IHNvbWV0aW1lcyBhbHNvIGEKPiArLy8vIHBzZXVkby1pcGFkZHJlc3Ms
IGUuZy4gMC4wLjAuMAo+ICsjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFBhcnRpYWxFcSwgRXEsIEhh
c2gsIERlc2VyaWFsaXplLCBTZXJpYWxpemUpXQo+ICtwdWIgc3RydWN0IEFyZWEoRnJyV29yZCk7
Cj4gKwo+ICtpbXBsIFRyeUZyb208RnJyV29yZD4gZm9yIEFyZWEgewo+ICsgICAgdHlwZSBFcnJv
ciA9IEFyZWFQYXJzaW5nRXJyb3I7Cj4gKwo+ICsgICAgZm4gdHJ5X2Zyb20odmFsdWU6IEZycldv
cmQpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnJvcj4gewo+ICsgICAgICAgIEFyZWE6Om5ldyh2
YWx1ZSkKPiArICAgIH0KPiArfQo+ICsKPiAraW1wbCBBcmVhIHsKPiArICAgIHB1YiBmbiBuZXco
bmFtZTogRnJyV29yZCkgLT4gUmVzdWx0PFNlbGYsIEFyZWFQYXJzaW5nRXJyb3I+IHsKPiArICAg
ICAgICBpZiBuYW1lLmFzX3JlZigpLnBhcnNlOjo8aTMyPigpLmlzX29rKCkgfHwgbmFtZS5hc19y
ZWYoKS5wYXJzZTo6PElwdjRBZGRyPigpLmlzX29rKCkgewoKdXNlIHUzMiBoZXJlPyBvdGhlcndp
c2UgYXJlYSBJRCBjYW4gYmUgbmVnYXRpdmUsIHdoaWNoIGlzbid0IGFsbG93ZWQgYWZhaWN0PwoK
PiArICAgICAgICAgICAgT2soU2VsZihuYW1lKSkKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAg
ICAgICAgICBFcnIoQXJlYVBhcnNpbmdFcnJvcjo6SW52YWxpZEFyZWEpCj4gKyAgICAgICAgfQo+
ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsIEZyb21TdHIgZm9yIEFyZWEgewo+ICsgICAgdHlwZSBF
cnIgPSBBcmVhUGFyc2luZ0Vycm9yOwo+ICsKPiArICAgIGZuIGZyb21fc3RyKHM6ICZzdHIpIC0+
IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnI+IHsKPiArICAgICAgICBpZiBsZXQgU29tZShuYW1lKSA9
IHMuc3RyaXBfcHJlZml4KCJhcmVhICIpIHsKPiArICAgICAgICAgICAgcmV0dXJuIFNlbGY6Om5l
dyhGcnJXb3JkOjpmcm9tX3N0cihuYW1lKS5tYXBfZXJyKHxffCBBcmVhUGFyc2luZ0Vycm9yOjpJ
bnZhbGlkQXJlYSk/KTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIEVycihBcmVhUGFyc2lu
Z0Vycm9yOjpNaXNzaW5nUHJlZml4KQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsIERpc3BsYXkg
Zm9yIEFyZWEgewo+ICsgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0
ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKPiArICAgICAgICB3cml0ZSEoZiwgImFyZWEg
e30iLCBzZWxmLjApCj4gKyAgICB9Cj4gK30KPiArCj4gKyNbZGVyaXZlKENsb25lLCBEZWJ1Zywg
UGFydGlhbEVxLCBFcSwgSGFzaCwgRGVzZXJpYWxpemUsIFNlcmlhbGl6ZSldCj4gK3B1YiBzdHJ1
Y3QgT3NwZlJvdXRlciB7Cj4gKyAgICByb3V0ZXJfaWQ6IElwdjRBZGRyLAo+ICt9Cj4gKwo+ICtp
bXBsIE9zcGZSb3V0ZXIgewo+ICsgICAgcHViIGZuIG5ldyhyb3V0ZXJfaWQ6IElwdjRBZGRyKSAt
PiBTZWxmIHsKPiArICAgICAgICBTZWxmIHsgcm91dGVyX2lkIH0KPiArICAgIH0KPiArCj4gKyAg
ICBwdWIgZm4gcm91dGVyX2lkKCZzZWxmKSAtPiAmSXB2NEFkZHIgewo+ICsgICAgICAgICZzZWxm
LnJvdXRlcl9pZAo+ICsgICAgfQo+ICt9Cj4gKwo+ICsjW2Rlcml2ZShFcnJvciwgRGVidWcpXQo+
ICtwdWIgZW51bSBPc3BmSW50ZXJmYWNlUGFyc2luZ0Vycm9yIHsKPiArICAgICNbZXJyb3IoIkVy
cm9yIHBhcnNpbmcgYXJlYSIpXQo+ICsgICAgQXJlYVBhcnNpbmdFcnJvcigjW2Zyb21dIEFyZWFQ
YXJzaW5nRXJyb3IpCj4gK30KPiArCj4gKyNbZGVyaXZlKENsb25lLCBEZWJ1ZywgUGFydGlhbEVx
LCBFcSwgSGFzaCwgRGVzZXJpYWxpemUsIFNlcmlhbGl6ZSldCj4gK3B1YiBzdHJ1Y3QgT3NwZklu
dGVyZmFjZSB7Cj4gKyAgICAvLyBOb3RlOiBhbiBpbnRlcmZhY2UgY2FuIG9ubHkgYmUgYSBwYXJ0
IG9mIGEgc2luZ2xlIGFyZWEoc28gbm8gdmVjIG5lZWRlZCBoZXJlKQo+ICsgICAgYXJlYTogQXJl
YSwKPiArICAgIHBhc3NpdmU6IE9wdGlvbjxib29sPiwKPiArfQo+ICsKPiAraW1wbCBPc3BmSW50
ZXJmYWNlIHsKPiArICAgIHB1YiBmbiBhcmVhKCZzZWxmKSAtPiAmQXJlYSB7Cj4gKyAgICAgICAg
JnNlbGYuYXJlYQo+ICsgICAgfQo+ICsgICAgcHViIGZuIHBhc3NpdmUoJnNlbGYpIC0+ICZPcHRp
b248Ym9vbD4gewo+ICsgICAgICAgICZzZWxmLnBhc3NpdmUKPiArICAgIH0KPiArfQo+ICsKPiAr
I1tjZmcoZmVhdHVyZSA9ICJjb25maWctZXh0IildCj4gK2ltcGwgVHJ5RnJvbTwoJmludGVybmFs
OjpBcmVhLCAmaW50ZXJuYWw6OkludGVyZmFjZSk+IGZvciBPc3BmSW50ZXJmYWNlIHsKPiArICAg
IHR5cGUgRXJyb3IgPSBPc3BmSW50ZXJmYWNlUGFyc2luZ0Vycm9yOwo+ICsKPiArICAgIGZuIHRy
eV9mcm9tKHZhbHVlOiAoJmludGVybmFsOjpBcmVhLCAmaW50ZXJuYWw6OkludGVyZmFjZSkpIC0+
IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnJvcj4gewo+ICsgICAgICAgIE9rKFNlbGYgewo+ICsgICAg
ICAgICAgICBhcmVhOiBBcmVhOjp0cnlfZnJvbSh2YWx1ZS4wKT8sCj4gKyAgICAgICAgICAgIHBh
c3NpdmU6IHZhbHVlLjEucGFzc2l2ZSgpLAo+ICsgICAgICAgIH0pCj4gKyAgICB9Cj4gK30KPiAr
Cj4gKyNbY2ZnKGZlYXR1cmUgPSAiY29uZmlnLWV4dCIpXQo+ICtpbXBsIFRyeUZyb208JmludGVy
bmFsOjpBcmVhPiBmb3IgQXJlYSB7Cj4gKyAgICB0eXBlIEVycm9yID0gQXJlYVBhcnNpbmdFcnJv
cjsKPiArCj4gKyAgICBmbiB0cnlfZnJvbSh2YWx1ZTogJmludGVybmFsOjpBcmVhKSAtPiBSZXN1
bHQ8U2VsZiwgU2VsZjo6RXJyb3I+IHsKPiArICAgICAgICBBcmVhOjpuZXcoRnJyV29yZDo6bmV3
KHZhbHVlLnRvX3N0cmluZygpKT8pCj4gKyAgICB9Cj4gK30KPiArCj4gKyNbY2ZnKGZlYXR1cmUg
PSAiY29uZmlnLWV4dCIpXQo+ICtpbXBsIEZyb208KCZpbnRlcm5hbDo6RmFicmljQ29uZmlnLCAm
aW50ZXJuYWw6Ok5vZGVDb25maWcpPiBmb3IgT3NwZlJvdXRlciB7Cj4gKyAgICBmbiBmcm9tKHZh
bHVlOiAoJmludGVybmFsOjpGYWJyaWNDb25maWcsICZpbnRlcm5hbDo6Tm9kZUNvbmZpZykpIC0+
IFNlbGYgewo+ICsgICAgICAgIFNlbGYgewo+ICsgICAgICAgICAgICByb3V0ZXJfaWQ6IHZhbHVl
LjEucm91dGVyX2lkLAo+ICsgICAgICAgIH0KPiArICAgIH0KPiArfQoKCgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpwdmUtZGV2ZWwgbWFpbGluZyBsaXN0
CnB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2Nn
aS1iaW4vbWFpbG1hbi9saXN0aW5mby9wdmUtZGV2ZWwK