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