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=