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 AD5D21FF16E
	for <inbox@lore.proxmox.com>; Mon,  3 Mar 2025 16:08:22 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 01D9DE5E2;
	Mon,  3 Mar 2025 16:08:16 +0100 (CET)
Message-ID: <32b866b7-6faa-4fb3-98ce-3333ceab14e1@proxmox.com>
Date: Mon, 3 Mar 2025 16:08:11 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
 Gabriel Goller <g.goller@proxmox.com>
References: <20250214133951.344500-1-g.goller@proxmox.com>
 <20250214133951.344500-2-g.goller@proxmox.com>
Content-Language: en-US
From: Stefan Hanreich <s.hanreich@proxmox.com>
In-Reply-To: <20250214133951.344500-2-g.goller@proxmox.com>
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.674 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 01/11] add crate with common
 network 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>

TWF5YmUgd2Ugc2hvdWxkIHRoaW5rIGFib3V0IGludGVybmFsbHkgcmVwcmVzZW50aW5nIHRoZSBO
ZXR3b3JrIEVudGl0eQpUaXRsZSBhbmQgaXRzIHBhcnRzIGFzIGJ5dGVzIHJhdGhlciB0aGFuIHN0
cmluZ3M/IFNvIFt1ODsgbl0/IFNpbmNlIGluCnByYWN0aWNlIGl0J3MgZXhhY3RseSB0aGF0LiBJ
IHRoaW5rIHRoaXMgd291bGQgc2ltcGxpZnkgYSBsb3Qgb2YgdGhlCm1ldGhvZHMgaGVyZSwgYW5k
IG9ic29sZXRlIHNvbWUgc3R1ZmYgbGlrZSBlLmcuIGxlbmd0aCB2YWxpZGF0aW9uLiBJJ3ZlCm5v
dGVkIHNvbWUgcGFydHMgYmVsb3cgd2hlcmUgSSB0aGluayB3ZSBjb3VsZCBiZW5lZml0IGZyb20g
dGhhdC4KCldlIGNvdWxkIGFsc28gcHJvdmlkZSBjb252ZXJzaW9uIG1ldGhvZHMgZm9yIE1BQyBh
ZGRyZXNzZXMgZWFzaWx5IHRoZW4sCmFsdGhvdWdoIElQIGFkZHJlc3NlcyBtaWdodCBiZSBhIGJp
dCBhd2t3YXJkIHNpbmNlIHRoZXkgbWFwIHRvIG5ldHdvcmsKZW50aXR5IHRpdGxlcyBhcyBiaW5h
cnktY29kZWQgZGVjaW1hbCBhbmQgdGhlcmUncyBubyBzdGQgc3VwcG9ydCBmb3IKdGhhdCBzbyB3
ZSdkIGhhdmUgdG8gYnJldyBvdXIgb3duIGNvbnZlcnNpb25zLi4uCgpBbHNvLCB0aGVvcmV0aWNh
bGx5LCB0aGUgQXJlYSBJRCBpcyBvZiB2YXJpYWJsZSBsZW5ndGgsIGJ1dCBmb3Igb3VyIHVzZQpj
YXNlIHRoZSBjdXJyZW50IGFkZGl0aW9uYWwgY29uc3RyYWludHMgYXJlIGZpbmUgaW1vIGFuZCBu
b3Qgd29ydGggdGhlCmhhc3NsZSBvZiBpbXBsZW1lbnRpbmcgdmFyaWFibGUgbGVuZ3RoIEFyZWEg
SURzLiBNaWdodCBiZSBnb29kIHRvIG5vdGUKdGhpcyB0aG91Z2guCgpPbiAyLzE0LzI1IDE0OjM5
LCBHYWJyaWVsIEdvbGxlciB3cm90ZToKPiBUaGUgbmV3IHByb3htb3gtbmV0d29yay10eXBlcyBj
cmF0ZSBob2xkcyBzb21lIGNvbW1vbiB0eXBlcyB0aGF0IGFyZQo+IHVzZWQgYnkgcHJveG1veC1m
cnIsIHByb3htb3gtdmUtY29uZmlnIGFuZCBwcm94bW94LXBlcmwtcnMuIFRoZXNlIHR5cGVzCj4g
YXJlIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHByb3htb3gtZnJyIHRvIGJlIGEgZGVwZW5k
ZW5jeSBvZgo+IHByb3htb3gtdmUtY29uZmlnIG9yIHZpY2UtdmVyc2EgKG9yIGF0IGxlYXN0IGl0
IHNob3VsZCBiZSBmZWF0dXJlLWdhdGVkKS4KPiBUaGV5IHNob3VsZCBiZSBpbmRlcGVuZGVudC4K
PiAKPiBTaWduZWQtb2ZmLWJ5OiBHYWJyaWVsIEdvbGxlciA8Zy5nb2xsZXJAcHJveG1veC5jb20+
Cj4gLS0tCj4gIENhcmdvLnRvbWwgICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICsKPiAgcHJv
eG1veC1uZXR3b3JrLXR5cGVzL0NhcmdvLnRvbWwgfCAgMTUgKysKPiAgcHJveG1veC1uZXR3b3Jr
LXR5cGVzL3NyYy9saWIucnMgfCAgIDEgKwo+ICBwcm94bW94LW5ldHdvcmstdHlwZXMvc3JjL25l
dC5ycyB8IDIzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDQgZmlsZXMgY2hh
bmdlZCwgMjYxIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHByb3htb3gtbmV0
d29yay10eXBlcy9DYXJnby50b21sCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LW5ldHdv
cmstdHlwZXMvc3JjL2xpYi5ycwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcHJveG1veC1uZXR3b3Jr
LXR5cGVzL3NyYy9uZXQucnMKPiAKPiBkaWZmIC0tZ2l0IGEvQ2FyZ28udG9tbCBiL0NhcmdvLnRv
bWwKPiBpbmRleCBkYzdmMzEyZmI4YTkuLmU0NTJjOTMxZTc4YyAxMDA2NDQKPiAtLS0gYS9DYXJn
by50b21sCj4gKysrIGIvQ2FyZ28udG9tbAo+IEBAIC0xLDYgKzEsNyBAQAo+ICBbd29ya3NwYWNl
XQo+ICBtZW1iZXJzID0gWwo+ICAgICAgInByb3htb3gtdmUtY29uZmlnIiwKPiArICAgICJwcm94
bW94LW5ldHdvcmstdHlwZXMiLAo+ICBdCj4gIGV4Y2x1ZGUgPSBbCj4gICAgICAiYnVpbGQiLAo+
IEBAIC0xNSwzICsxNiw4IEBAIGhvbWVwYWdlID0gImh0dHBzOi8vcHJveG1veC5jb20iCj4gIGV4
Y2x1ZGUgPSBbICJkZWJpYW4iIF0KPiAgcnVzdC12ZXJzaW9uID0gIjEuODIiCj4gIAo+ICtbd29y
a3NwYWNlLmRlcGVuZGVuY2llc10KPiArcHJveG1veC1zZWN0aW9uLWNvbmZpZyA9ICIyLjEuMSIK
PiArc2VyZGUgPSAiMSIKPiArc2VyZGVfd2l0aCA9ICIzLjguMSIKPiArdGhpc2Vycm9yID0gIjEu
MC41OSIKPiBkaWZmIC0tZ2l0IGEvcHJveG1veC1uZXR3b3JrLXR5cGVzL0NhcmdvLnRvbWwgYi9w
cm94bW94LW5ldHdvcmstdHlwZXMvQ2FyZ28udG9tbAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g
aW5kZXggMDAwMDAwMDAwMDAwLi45M2Y0ZGY4N2E1OWYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv
cHJveG1veC1uZXR3b3JrLXR5cGVzL0NhcmdvLnRvbWwKPiBAQCAtMCwwICsxLDE1IEBACj4gK1tw
YWNrYWdlXQo+ICtuYW1lID0gInByb3htb3gtbmV0d29yay10eXBlcyIKPiArdmVyc2lvbiA9ICIw
LjEuMCIKPiArYXV0aG9ycy53b3Jrc3BhY2UgPSB0cnVlCj4gK2VkaXRpb24ud29ya3NwYWNlID0g
dHJ1ZQo+ICtsaWNlbnNlLndvcmtzcGFjZSA9IHRydWUKPiAraG9tZXBhZ2Uud29ya3NwYWNlID0g
dHJ1ZQo+ICtleGNsdWRlLndvcmtzcGFjZSA9IHRydWUKPiArcnVzdC12ZXJzaW9uLndvcmtzcGFj
ZSA9IHRydWUKPiArCj4gK1tkZXBlbmRlbmNpZXNdCj4gK3RoaXNlcnJvciA9IHsgd29ya3NwYWNl
ID0gdHJ1ZSB9Cj4gK2FueWhvdyA9ICIxIgo+ICtzZXJkZSA9IHsgd29ya3NwYWNlID0gdHJ1ZSwg
ZmVhdHVyZXMgPSBbICJkZXJpdmUiIF0gfQo+ICtzZXJkZV93aXRoID0geyB3b3Jrc3BhY2UgPSB0
cnVlIH0KPiBkaWZmIC0tZ2l0IGEvcHJveG1veC1uZXR3b3JrLXR5cGVzL3NyYy9saWIucnMgYi9w
cm94bW94LW5ldHdvcmstdHlwZXMvc3JjL2xpYi5ycwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g
aW5kZXggMDAwMDAwMDAwMDAwLi5mOWZhZjJmZjY1NDIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv
cHJveG1veC1uZXR3b3JrLXR5cGVzL3NyYy9saWIucnMKPiBAQCAtMCwwICsxIEBACj4gK3B1YiBt
b2QgbmV0Owo+IGRpZmYgLS1naXQgYS9wcm94bW94LW5ldHdvcmstdHlwZXMvc3JjL25ldC5ycyBi
L3Byb3htb3gtbmV0d29yay10eXBlcy9zcmMvbmV0LnJzCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK
PiBpbmRleCAwMDAwMDAwMDAwMDAuLjVmZGJlMzkyMDgwMAo+IC0tLSAvZGV2L251bGwKPiArKysg
Yi9wcm94bW94LW5ldHdvcmstdHlwZXMvc3JjL25ldC5ycwo+IEBAIC0wLDAgKzEsMjM5IEBACj4g
K3VzZSBzdGQ6OntmbXQ6OkRpc3BsYXksIHN0cjo6RnJvbVN0cn07Cj4gKwo+ICt1c2Ugc2VyZGU6
OlNlcmlhbGl6ZTsKPiArdXNlIHNlcmRlX3dpdGg6OntEZXNlcmlhbGl6ZUZyb21TdHIsIFNlcmlh
bGl6ZURpc3BsYXl9Owo+ICt1c2UgdGhpc2Vycm9yOjpFcnJvcjsKPiArCj4gKyNbZGVyaXZlKEVy
cm9yLCBEZWJ1ZyldCj4gK3B1YiBlbnVtIE5ldEVycm9yIHsKPiArICAgICNbZXJyb3IoIlNvbWUg
b2N0ZXRzIGFyZSBtaXNzaW5nIildCj4gKyAgICBXcm9uZ0xlbmd0aCwKPiArICAgICNbZXJyb3Io
IlRoZSBORVQgc2VsZWN0b3IgbXVzdCBiZSB0d28gY2hhcmFjdGVycyB3aWRlIGFuZCBiZSAwMCIp
XQo+ICsgICAgSW52YWxpZE5ldFNlbGVjdG9yLAo+ICsgICAgI1tlcnJvcigiSW52YWxpZCBBRkkg
KHdyb25nIHNpemUgb3IgcG9zaXRpb24pIildCj4gKyAgICBJbnZhbGlkQUZJLAo+ICsgICAgI1tl
cnJvcigiSW52YWxpZCBBcmVhICh3cm9uZyBzaXplIG9yIHBvc2l0aW9uKSIpXQo+ICsgICAgSW52
YWxpZEFyZWEsCj4gKyAgICAjW2Vycm9yKCJJbnZhbGlkIFN5c3RlbUlkICh3cm9uZyBzaXplIG9y
IHBvc2l0aW9uKSIpXQo+ICsgICAgSW52YWxpZFN5c3RlbUlkLAo+ICt9Cj4gKwo+ICsvLy8gQWRk
cmVzcyBGYW1pbHkgYXV0aG9yaXR5IElkZW50aWZpZXIgLSA0OSBUaGUgQUZJIHZhbHVlIDQ5IGlz
IHdoYXQgSVMtSVMgKGFuZCBvcGVuZmFicmljKSB1c2VzCj4gKy8vLyBmb3IgcHJpdmF0ZSBhZGRy
ZXNzaW5nLgo+ICsjW2Rlcml2ZSgKPiArICAgIERlYnVnLCBEZXNlcmlhbGl6ZUZyb21TdHIsIFNl
cmlhbGl6ZURpc3BsYXksIENsb25lLCBIYXNoLCBQYXJ0aWFsRXEsIEVxLCBQYXJ0aWFsT3JkLCBP
cmQsCj4gKyldCj4gK3N0cnVjdCBOZXRBRkkoU3RyaW5nKTsKPiArCj4gK2ltcGwgRGVmYXVsdCBm
b3IgTmV0QUZJIHsKPiArICAgIGZuIGRlZmF1bHQoKSAtPiBTZWxmIHsKPiArICAgICAgICBTZWxm
KCI0OSIudG9fb3duZWQoKSkKPiArICAgIH0KPiArfQo+ICsKPiAraW1wbCBEaXNwbGF5IGZvciBO
ZXRBRkkgewo+ICsgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8
J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKPiArICAgICAgICB3cml0ZSEoZiwgInt9Iiwgc2Vs
Zi4wKQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsIEZyb21TdHIgZm9yIE5ldEFGSSB7Cj4gKyAg
ICB0eXBlIEVyciA9IE5ldEVycm9yOwo+ICsKPiArICAgIGZuIGZyb21fc3RyKHM6ICZzdHIpIC0+
IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnI+IHsKPiArICAgICAgICBpZiBzLmxlbigpICE9IDIgewo+
ICsgICAgICAgICAgICBFcnIoTmV0RXJyb3I6OkludmFsaWRBRkkpCj4gKyAgICAgICAgfSBlbHNl
IHsKPiArICAgICAgICAgICAgT2soU2VsZihzLnRvX293bmVkKCkpKQo+ICsgICAgICAgIH0KPiAr
ICAgIH0KPiArfQo+ICsKPiArLy8vIEFyZWEgaWRlbnRpZmllcjogMDAwMSBJUy1JUyBhcmVhIG51
bWJlciAobnVtZXJpY2FsIGFyZWEgMSkKPiArLy8vIFRoZSBzZWNvbmQgcGFydCAoc3lzdGVtKSBv
ZiB0aGUgYG5ldGAgaWRlbnRpZmllci4gRXZlcnkgbm9kZSBoYXMgdG8gaGF2ZSBhIGRpZmZlcmVu
dCBzeXN0ZW0KPiArLy8vIG51bWJlci4KPiArI1tkZXJpdmUoRGVidWcsIERlc2VyaWFsaXplRnJv
bVN0ciwgU2VyaWFsaXplLCBDbG9uZSwgSGFzaCwgUGFydGlhbEVxLCBFcSwgUGFydGlhbE9yZCwg
T3JkKV0KPiArc3RydWN0IE5ldEFyZWEoU3RyaW5nKTsKPiArCj4gK2ltcGwgRGVmYXVsdCBmb3Ig
TmV0QXJlYSB7Cj4gKyAgICBmbiBkZWZhdWx0KCkgLT4gU2VsZiB7Cj4gKyAgICAgICAgU2VsZigi
MDAwMSIudG9fb3duZWQoKSkKPiArICAgIH0KPiArfQo+ICsKPiAraW1wbCBEaXNwbGF5IGZvciBO
ZXRBcmVhIHsKPiArICAgIGZuIGZtdCgmc2VsZiwgZjogJm11dCBzdGQ6OmZtdDo6Rm9ybWF0dGVy
PCdfPikgLT4gc3RkOjpmbXQ6OlJlc3VsdCB7Cj4gKyAgICAgICAgd3JpdGUhKGYsICJ7fSIsIHNl
bGYuMCkKPiArICAgIH0KPiArfQo+ICsKPiAraW1wbCBGcm9tU3RyIGZvciBOZXRBcmVhIHsKPiAr
ICAgIHR5cGUgRXJyID0gTmV0RXJyb3I7Cj4gKwo+ICsgICAgZm4gZnJvbV9zdHIoczogJnN0cikg
LT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycj4gewo+ICsgICAgICAgIGlmIHMubGVuKCkgIT0gNCB7
Cj4gKyAgICAgICAgICAgIEVycihOZXRFcnJvcjo6SW52YWxpZEFyZWEpCj4gKyAgICAgICAgfSBl
bHNlIHsKPiArICAgICAgICAgICAgT2soU2VsZihzLnRvX293bmVkKCkpKQo+ICsgICAgICAgIH0K
PiArICAgIH0KPiArfQo+ICsKPiArLy8vIFN5c3RlbSBpZGVudGlmaWVyOiAxOTIxLjY4MDAuMTAw
MiAtIGZvciBzeXN0ZW0gaWRlbnRpZmllcnMgd2UgcmVjb21tZW5kIHRvIHVzZSBJUCBhZGRyZXNz
IG9yCj4gKy8vLyBNQUMgYWRkcmVzcyBvZiB0aGUgcm91dGVyIGl0c2VsZi4gVGhlIHdheSB0byBj
b25zdHJ1Y3QgdGhpcyBpcyB0byBrZWVwIGFsbCBvZiB0aGUgemVyb2VzIG9mIHRoZQo+ICsvLy8g
cm91dGVyIElQIGFkZHJlc3MsIGFuZCB0aGVuIGNoYW5nZSB0aGUgcGVyaW9kcyBmcm9tIGJlaW5n
IGV2ZXJ5IHRocmVlIG51bWJlcnMgdG8gZXZlcnkgZm91cgo+ICsvLy8gbnVtYmVycy4gVGhlIGFk
ZHJlc3MgdGhhdCBpcyBsaXN0ZWQgaGVyZSBpcyAxOTIuMTY4LjEuMiwgd2hpY2ggaWYgZXhwYW5k
ZWQgd2lsbCB0dXJuIGludG8KPiArLy8vIDE5Mi4xNjguMDAxLjAwMi4gVGhlbiBhbGwgb25lIGhh
cyB0byBkbyBpcyBtb3ZlIHRoZSBkb3RzIHRvIGhhdmUgZm91ciBudW1iZXJzIGluc3RlYWQgb2Yg
dGhyZWUuCj4gKy8vLyBUaGlzIGdpdmVzIHVzIDE5MjEuNjgwMC4xMDAyLgo+ICsjW2Rlcml2ZShE
ZWJ1ZywgRGVzZXJpYWxpemVGcm9tU3RyLCBTZXJpYWxpemUsIENsb25lLCBIYXNoLCBQYXJ0aWFs
RXEsIEVxLCBQYXJ0aWFsT3JkLCBPcmQpXQo+ICtzdHJ1Y3QgTmV0U3lzdGVtSWQoU3RyaW5nKTsK
PiArCj4gK2ltcGwgRGlzcGxheSBmb3IgTmV0U3lzdGVtSWQgewo+ICsgICAgZm4gZm10KCZzZWxm
LCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsK
PiArICAgICAgICB3cml0ZSEoZiwgInt9Iiwgc2VsZi4wKQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtp
bXBsIEZyb21TdHIgZm9yIE5ldFN5c3RlbUlkIHsKPiArICAgIHR5cGUgRXJyID0gTmV0RXJyb3I7
Cj4gKwo+ICsgICAgZm4gZnJvbV9zdHIoczogJnN0cikgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVy
cj4gewo+ICsgICAgICAgIGlmIHMuc3BsaXQoIi4iKS5jb3VudCgpICE9IDMgfHwgcy5zcGxpdCgi
LiIpLmFueSh8b2N0ZXR8IG9jdGV0LmxlbigpICE9IDQpIHsKCndvdWxkIHNpbXBsaWZ5IHRob3Nl
IGNoZWNrcyBhIGxvdCBpbW8uIGFuZCB3b3VsZCBhbHNvIGJlIGEgbW9yZSBuYXR1cmFsCnJlcHJl
c2VudGF0aW9uIHNpbmNlIHRoZSBub21lbmNsYXR1cmUgaGVyZSAob2N0ZXRzLCBidXQgbGVuID09
IDQpIGlzIGEKYml0IG1pc2xlYWRpbmcgYXMgd2VsbC4uCgo+ICsgICAgICAgICAgICBFcnIoTmV0
RXJyb3I6OkludmFsaWRBcmVhKQo+ICsgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIE9r
KFNlbGYocy50b19vd25lZCgpKSkKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gK30KPiArCj4gKy8v
LyBORVQgc2VsZWN0b3I6IDAwIE11c3QgYWx3YXlzIGJlIDAwLiBUaGlzIHNldHRpbmcgaW5kaWNh
dGVzIOKAnHRoaXMgc3lzdGVt4oCdIG9yIOKAnGxvY2FsIHN5c3RlbS7igJ0KPiArI1tkZXJpdmUo
RGVidWcsIERlc2VyaWFsaXplRnJvbVN0ciwgU2VyaWFsaXplLCBDbG9uZSwgSGFzaCwgUGFydGlh
bEVxLCBFcSwgUGFydGlhbE9yZCwgT3JkKV0KPiArc3RydWN0IE5ldFNlbGVjdG9yKFN0cmluZyk7
Cj4gKwo+ICtpbXBsIERlZmF1bHQgZm9yIE5ldFNlbGVjdG9yIHsKPiArICAgIGZuIGRlZmF1bHQo
KSAtPiBTZWxmIHsKPiArICAgICAgICBTZWxmKCIwMCIudG9fb3duZWQoKSkKPiArICAgIH0KPiAr
fQo+ICsKPiAraW1wbCBEaXNwbGF5IGZvciBOZXRTZWxlY3RvciB7Cj4gKyAgICBmbiBmbXQoJnNl
bGYsIGY6ICZtdXQgc3RkOjpmbXQ6OkZvcm1hdHRlcjwnXz4pIC0+IHN0ZDo6Zm10OjpSZXN1bHQg
ewo+ICsgICAgICAgIHdyaXRlIShmLCAie30iLCBzZWxmLjApCj4gKyAgICB9Cj4gK30KPiArCj4g
K2ltcGwgRnJvbVN0ciBmb3IgTmV0U2VsZWN0b3Igewo+ICsgICAgdHlwZSBFcnIgPSBOZXRFcnJv
cjsKPiArCj4gKyAgICBmbiBmcm9tX3N0cihzOiAmc3RyKSAtPiBSZXN1bHQ8U2VsZiwgU2VsZjo6
RXJyPiB7Cj4gKyAgICAgICAgaWYgcy5sZW4oKSAhPSAyIHsKPiArICAgICAgICAgICAgRXJyKE5l
dEVycm9yOjpJbnZhbGlkTmV0U2VsZWN0b3IpCj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAg
ICAgICAgT2soU2VsZihzLnRvX293bmVkKCkpKQo+ICsgICAgICAgIH0KPiArICAgIH0KPiArfQo+
ICsKPiArLy8vIFRoZSBmaXJzdCBwYXJ0IChhcmVhKSBvZiB0aGUgYG5ldGAgaWRlbnRpZmllci4g
VGhlIGVudGlyZSBPcGVuRmFicmljIGZhYnJpYyBoYXMgdG8gaGF2ZSB0aGUKPiArLy8vIHNhbWUg
YXJlYS4KPiArLy8vIGYuZS46ICI0OS4wMDAxIgo+ICsjW2Rlcml2ZSgKPiArICAgIERlYnVnLCBE
ZXNlcmlhbGl6ZUZyb21TdHIsIFNlcmlhbGl6ZURpc3BsYXksIENsb25lLCBIYXNoLCBQYXJ0aWFs
RXEsIEVxLCBQYXJ0aWFsT3JkLCBPcmQsCj4gKyldCj4gK3B1YiBzdHJ1Y3QgTmV0IHsKPiArICAg
IGFmaTogTmV0QUZJLAo+ICsgICAgYXJlYTogTmV0QXJlYSwKPiArICAgIHN5c3RlbTogTmV0U3lz
dGVtSWQsCj4gKyAgICBzZWxlY3RvcjogTmV0U2VsZWN0b3IsCj4gK30KPiArCj4gK2ltcGwgRnJv
bVN0ciBmb3IgTmV0IHsKPiArICAgIHR5cGUgRXJyID0gTmV0RXJyb3I7Cj4gKwo+ICsgICAgZm4g
ZnJvbV9zdHIoczogJnN0cikgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycj4gewo+ICsgICAgICAg
IGlmIHMuc3BsaXQoIi4iKS5jb3VudCgpICE9IDYgewo+ICsgICAgICAgICAgICByZXR1cm4gRXJy
KE5ldEVycm9yOjpXcm9uZ0xlbmd0aCk7Cj4gKyAgICAgICAgfQoKcGFyc2luZyBoZXJlIGNvdWxk
IGJlIGdyZWF0bHkgc2ltcGxpZmllZCBpbW8gaWYgd2UgY29udmVydCBldmVyeXRoaW5nIHRvIHU4
Cgo+ICsgICAgICAgIGxldCBtdXQgaXRlciA9IHMuc3BsaXQoIi4iKTsKPiArICAgICAgICBsZXQg
YWZpID0gaXRlci5uZXh0KCkub2tfb3IoTmV0RXJyb3I6Oldyb25nTGVuZ3RoKT87Cj4gKyAgICAg
ICAgbGV0IGFyZWEgPSBpdGVyLm5leHQoKS5va19vcihOZXRFcnJvcjo6V3JvbmdMZW5ndGgpPzsK
PiArICAgICAgICBsZXQgc3lzdGVtID0gZm9ybWF0ISgKPiArICAgICAgICAgICAgInt9Lnt9Lnt9
IiwKPiArICAgICAgICAgICAgaXRlci5uZXh0KCkub2tfb3IoTmV0RXJyb3I6Oldyb25nTGVuZ3Ro
KT8sCj4gKyAgICAgICAgICAgIGl0ZXIubmV4dCgpLm9rX29yKE5ldEVycm9yOjpXcm9uZ0xlbmd0
aCk/LAo+ICsgICAgICAgICAgICBpdGVyLm5leHQoKS5va19vcihOZXRFcnJvcjo6V3JvbmdMZW5n
dGgpPwo+ICsgICAgICAgICk7Cj4gKyAgICAgICAgbGV0IHNlbGVjdG9yID0gaXRlci5uZXh0KCku
b2tfb3IoTmV0RXJyb3I6Oldyb25nTGVuZ3RoKT87Cj4gKyAgICAgICAgT2soU2VsZiB7Cj4gKyAg
ICAgICAgICAgIGFmaTogYWZpLnBhcnNlKCk/LAo+ICsgICAgICAgICAgICBhcmVhOiBhcmVhLnBh
cnNlKCk/LAo+ICsgICAgICAgICAgICBzeXN0ZW06IHN5c3RlbS5wYXJzZSgpPywKPiArICAgICAg
ICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLnBhcnNlKCk/LAo+ICsgICAgICAgIH0pCj4gKyAgICB9
Cj4gK30KPiArCj4gK2ltcGwgRGlzcGxheSBmb3IgTmV0IHsKPiArICAgIGZuIGZtdCgmc2VsZiwg
ZjogJm11dCBzdGQ6OmZtdDo6Rm9ybWF0dGVyPCdfPikgLT4gc3RkOjpmbXQ6OlJlc3VsdCB7Cj4g
KyAgICAgICAgd3JpdGUhKAo+ICsgICAgICAgICAgICBmLAo+ICsgICAgICAgICAgICAie30ue30u
e30ue30iLAo+ICsgICAgICAgICAgICBzZWxmLmFmaSwgc2VsZi5hcmVhLCBzZWxmLnN5c3RlbSwg
c2VsZi5zZWxlY3Rvcgo+ICsgICAgICAgICkKPiArICAgIH0KPiArfQo+ICsKPiArI1tjZmcodGVz
dCldCj4gK21vZCB0ZXN0cyB7Cj4gKyAgICB1c2Ugc3VwZXI6Oio7Cj4gKwo+ICsgICAgI1t0ZXN0
XQo+ICsgICAgZm4gdGVzdF9uZXRfZnJvbV9zdHIoKSB7Cj4gKyAgICAgICAgbGV0IGlucHV0ID0g
IjQ5LjAwMDEuMTkyMS42ODAwLjEwMDIuMDAiOwo+ICsgICAgICAgIGxldCBuZXQgPSBpbnB1dC5w
YXJzZTo6PE5ldD4oKS5leHBlY3QoInRoaXMgbmV0IHNob3VsZCBwYXJzZSIpOwo+ICsgICAgICAg
IGFzc2VydF9lcSEobmV0LmFmaSwgTmV0QUZJKCI0OSIudG9fb3duZWQoKSkpOwo+ICsgICAgICAg
IGFzc2VydF9lcSEobmV0LmFyZWEsIE5ldEFyZWEoIjAwMDEiLnRvX293bmVkKCkpKTsKPiArICAg
ICAgICBhc3NlcnRfZXEhKG5ldC5zeXN0ZW0sIE5ldFN5c3RlbUlkKCIxOTIxLjY4MDAuMTAwMiIu
dG9fb3duZWQoKSkpOwo+ICsgICAgICAgIGFzc2VydF9lcSEobmV0LnNlbGVjdG9yLCBOZXRTZWxl
Y3RvcigiMDAiLnRvX293bmVkKCkpKTsKPiArCj4gKyAgICAgICAgbGV0IGlucHV0ID0gIjQ1LjAy
MDAuMDEwMC4xMDAxLjAwMTAuMDEiOwo+ICsgICAgICAgIGxldCBuZXQgPSBpbnB1dC5wYXJzZTo6
PE5ldD4oKS5leHBlY3QoInRoaXMgbmV0IHNob3VsZCBwYXJzZSIpOwo+ICsgICAgICAgIGFzc2Vy
dF9lcSEobmV0LmFmaSwgTmV0QUZJKCI0NSIudG9fb3duZWQoKSkpOwo+ICsgICAgICAgIGFzc2Vy
dF9lcSEobmV0LmFyZWEsIE5ldEFyZWEoIjAyMDAiLnRvX293bmVkKCkpKTsKPiArICAgICAgICBh
c3NlcnRfZXEhKG5ldC5zeXN0ZW0sIE5ldFN5c3RlbUlkKCIwMTAwLjEwMDEuMDAxMCIudG9fb3du
ZWQoKSkpOwo+ICsgICAgICAgIGFzc2VydF9lcSEobmV0LnNlbGVjdG9yLCBOZXRTZWxlY3Rvcigi
MDEiLnRvX293bmVkKCkpKTsKPiArICAgIH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0
ZXN0X25ldF9mcm9tX3N0cl9mYWlsZWQoKSB7Cj4gKyAgICAgICAgbGV0IGlucHV0ID0gIjQ5LjAw
MDEuMTkyMS42ODAwLjEwMDIuMDAwIjsKPiArICAgICAgICBhc3NlcnQhKG1hdGNoZXMhKAo+ICsg
ICAgICAgICAgICBpbnB1dC5wYXJzZTo6PE5ldD4oKSwKPiArICAgICAgICAgICAgRXJyKE5ldEVy
cm9yOjpJbnZhbGlkTmV0U2VsZWN0b3IpCj4gKyAgICAgICAgKSk7Cj4gKwo+ICsgICAgICAgIGxl
dCBpbnB1dCA9ICI0OS4wMDAxLjE5MjEuNjgwMC4xMDAyLjAwLjAwIjsKPiArICAgICAgICBhc3Nl
cnQhKG1hdGNoZXMhKGlucHV0LnBhcnNlOjo8TmV0PigpLCBFcnIoTmV0RXJyb3I6Oldyb25nTGVu
Z3RoKSkpOwo+ICsKPiArICAgICAgICBsZXQgaW5wdXQgPSAiNDkuMDAwMS4xOTIxLjY4MDAuMTAw
MDIuMDAiOwo+ICsgICAgICAgIGFzc2VydCEobWF0Y2hlcyEoaW5wdXQucGFyc2U6OjxOZXQ+KCks
IEVycihOZXRFcnJvcjo6SW52YWxpZEFyZWEpKSk7Cj4gKwo+ICsgICAgICAgIGxldCBpbnB1dCA9
ICI0MDkuMDAwMS4xOTIxLjY4MDAuMTAwMi4wMCI7Cj4gKyAgICAgICAgYXNzZXJ0IShtYXRjaGVz
IShpbnB1dC5wYXJzZTo6PE5ldD4oKSwgRXJyKE5ldEVycm9yOjpJbnZhbGlkQUZJKSkpOwo+ICsK
PiArICAgICAgICBsZXQgaW5wdXQgPSAiNDkuMDAwMDEuMTkyMS42ODAwLjEwMDIuMDAiOwo+ICsg
ICAgICAgIGFzc2VydCEobWF0Y2hlcyEoaW5wdXQucGFyc2U6OjxOZXQ+KCksIEVycihOZXRFcnJv
cjo6SW52YWxpZEFyZWEpKSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4g
dGVzdF9uZXRfZGlzcGxheSgpIHsKPiArICAgICAgICBsZXQgbmV0ID0gTmV0IHsKPiArICAgICAg
ICAgICAgYWZpOiBOZXRBRkkoIjQ5Ii50b19vd25lZCgpKSwKPiArICAgICAgICAgICAgYXJlYTog
TmV0QXJlYSgiMDAwMSIudG9fb3duZWQoKSksCj4gKyAgICAgICAgICAgIHN5c3RlbTogTmV0U3lz
dGVtSWQoIjE5MjEuNjgwMC4xMDAyIi50b19vd25lZCgpKSwKPiArICAgICAgICAgICAgc2VsZWN0
b3I6IE5ldFNlbGVjdG9yKCIwMCIudG9fb3duZWQoKSksCj4gKyAgICAgICAgfTsKPiArICAgICAg
ICBhc3NlcnRfZXEhKGZvcm1hdCEoIntuZXR9IiksICI0OS4wMDAxLjE5MjEuNjgwMC4xMDAyLjAw
Iik7Cj4gKyAgICB9Cj4gK30KPiArCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnBy
b3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3Rp
bmZvL3B2ZS1kZXZlbAo=