From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id BA0BE1FF15F for ; Mon, 2 Dec 2024 15:17:38 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1814719F45; Mon, 2 Dec 2024 15:17:44 +0100 (CET) From: Shannon Sterz To: pbs-devel@lists.proxmox.com Date: Mon, 2 Dec 2024 15:16:52 +0100 Message-Id: <20241202141655.254472-1-s.sterz@proxmox.com> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.037 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox v3 1/4] sendmail: add sendmail crate X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" YWRkIHRoZSBgcHJveG1veC1zZW5kbWFpbGAgY3JhdGUgdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8g c2VuZCBtYWlscyB2aWEKdGhlIGBzZW5kbWFpbGAgdXRpbGl0eS4gZmVhdHVyZXMgaW5jbHVkZToK Ci0gbXVsdGlwYXJ0L2FsdGVybmF0aXZlIHN1cHBvcnQgZm9yIGh0bWwrcGxhaW4gdGV4dCBtYWls cwotIG11bHRpcGFydC9taXhlZCBzdXBwb3J0IGZvciBtYWlscyB3aXRoIGF0dGFjaG1lbnRzCi0g YXV0b21hdGljIG5lc3Rpbmcgb2YgbXVsdGlwYXJ0L2FsdGVybmF0aXZlIGFuZCBtdWx0aXBhcnQv bWl4ZWQgcGFydHMKLSBtYXNrcyBtdWx0aXBsZSByZWNlaXZlcnMgYnkgZGVmYXVsdCwgY2FuIGJl IGRpc2FibGVkCi0gZW5jb2RpbmcgU3ViamVjdCwgVG8sIEZyb20sIGFuZCBhdHRhY2htZW50IGZp bGUgbmFtZXMgY29ycmVjdGx5Ci0gYWRkaW5nIGFuIGBBdXRvLVN1Ym1pdHRlZGAgaGVhZGVyIHRv IGF2b2lkIHRyaWdnZXJpbmcgYXV0b21hdGVkIG1haWxzCgphbHNvIGluY2x1ZGVzIHNldmVyYWwg dGVzdHMgdG8gZW5zdXJlIHRoYXQgbWFpbHMgYXJlIGZvcm1hdHRlZApjb3JyZWN0bHkuIGRlYmlh biBwYWNrYWdpbmcgaXMgYWxzbyBwcm92aWRlZC4KClNpZ25lZC1vZmYtYnk6IFNoYW5ub24gU3Rl cnogPHMuc3RlcnpAcHJveG1veC5jb20+Ci0tLQoKY2hhbmdlcyBzaW5jZSB2MiAodGhhbmtzIEAg THVrYXMgV2FnbmVyIDxsLndhZ25lckBwcm94bW94LmNvbT4pCiAgICAtIGFkZGVkIGRlYmlhbiBw YWNrYWdpbmcKICAgIC0gY2hhbmdlIGluc3RhbmNlcyBvZiBgcHVzaF9zdHIoJmZvcm1hdCEoLi4p YCBvdmVyIHRvIGB3cml0ZWxuISguLilgCiAgICAgIGFuZCBgd3JpdGUhKC4uKWAKCmNoYW5nZXMg c2luY2UgdjEgKHRoYW5rcyBAIEx1a2FzIFdhZ25lciA8bC53YWduZXJAcHJveG1veC5jb20+KToK ICAgIC0gbWFrZSBpdCBwb3NzaWJsZSB0byBkaXNhYmxlIHJlY2VpdmVyIHJlZGFjdGlvbgogICAg LSByZS1zdHJ1Y3R1cmUgdGhlIG1hbCBmb3JtYXR0aW5nIGNvZGU7IG1haW5seSBzcGxpdCBpdCBp bnRvCiAgICAgIG11bHRpcGxlIGZ1bmN0aW9ucyAoYGZvcm1hdF9oZWFkZXJgLCBgZm9ybWF0X2Jv ZHlgLAogICAgICBgZm9ybWF0X2F0dGFjaG1lbnRgIGV0Yy4pCiAgICAtIGZpeCBtdWx0aXBsZSB0 eXBvcwoKIENhcmdvLnRvbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogcHJv eG1veC1zZW5kbWFpbC9DYXJnby50b21sICAgICAgICAgICB8ICAxNiArCiBwcm94bW94LXNlbmRt YWlsL2RlYmlhbi9jaGFuZ2Vsb2cgICAgIHwgICA1ICsKIHByb3htb3gtc2VuZG1haWwvZGViaWFu L2NvbnRyb2wgICAgICAgfCAgNDMgKysKIHByb3htb3gtc2VuZG1haWwvZGViaWFuL2NvcHlyaWdo dCAgICAgfCAgMTggKwogcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vZGViY2FyZ28udG9tbCB8ICAg NyArCiBwcm94bW94LXNlbmRtYWlsL3NyYy9saWIucnMgICAgICAgICAgIHwgNzc5ICsrKysrKysr KysrKysrKysrKysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDg3MCBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgcHJveG1veC1zZW5kbWFpbC9DYXJnby50b21sCiBjcmVhdGUgbW9k ZSAxMDA2NDQgcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vY2hhbmdlbG9nCiBjcmVhdGUgbW9kZSAx MDA2NDQgcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vY29udHJvbAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHByb3htb3gtc2VuZG1haWwvZGViaWFuL2NvcHlyaWdodAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBy b3htb3gtc2VuZG1haWwvZGViaWFuL2RlYmNhcmdvLnRvbWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBw cm94bW94LXNlbmRtYWlsL3NyYy9saWIucnMKCmRpZmYgLS1naXQgYS9DYXJnby50b21sIGIvQ2Fy Z28udG9tbAppbmRleCA4NGZiZTk3OS4uYjYyZmNkNTAgMTAwNjQ0Ci0tLSBhL0NhcmdvLnRvbWwK KysrIGIvQ2FyZ28udG9tbApAQCAtMzMsNiArMzMsNyBAQCBtZW1iZXJzID0gWwogICAgICJwcm94 bW94LXJyZC1hcGktdHlwZXMiLAogICAgICJwcm94bW94LXNjaGVtYSIsCiAgICAgInByb3htb3gt c2VjdGlvbi1jb25maWciLAorICAgICJwcm94bW94LXNlbmRtYWlsIiwKICAgICAicHJveG1veC1z ZXJkZSIsCiAgICAgInByb3htb3gtc2hhcmVkLWNhY2hlIiwKICAgICAicHJveG1veC1zaGFyZWQt bWVtb3J5IiwKQEAgLTEzOCw2ICsxMzksNyBAQCBwcm94bW94LXJlc3Qtc2VydmVyID0geyB2ZXJz aW9uID0gIjAuOC4wIiwgcGF0aCA9ICJwcm94bW94LXJlc3Qtc2VydmVyIiB9CiBwcm94bW94LXJv dXRlciA9IHsgdmVyc2lvbiA9ICIzLjAuMCIsIHBhdGggPSAicHJveG1veC1yb3V0ZXIiIH0KIHBy b3htb3gtc2NoZW1hID0geyB2ZXJzaW9uID0gIjMuMS4yIiwgcGF0aCA9ICJwcm94bW94LXNjaGVt YSIgfQogcHJveG1veC1zZWN0aW9uLWNvbmZpZyA9IHsgdmVyc2lvbiA9ICIyLjEuMCIsIHBhdGgg PSAicHJveG1veC1zZWN0aW9uLWNvbmZpZyIgfQorcHJveG1veC1zZW5kbWFpbCA9IHsgdmVyc2lv biA9ICIwLjEuMCIsIHBhdGggPSAicHJveG1veC1zZW5kbWFpbCIgfQogcHJveG1veC1zZXJkZSA9 IHsgdmVyc2lvbiA9ICIwLjEuMSIsIHBhdGggPSAicHJveG1veC1zZXJkZSIsIGZlYXR1cmVzID0g WyAic2VyZGVfanNvbiIgXSB9CiBwcm94bW94LXNoYXJlZC1tZW1vcnkgPSB7IHZlcnNpb24gPSAi MC4zLjAiLCBwYXRoID0gInByb3htb3gtc2hhcmVkLW1lbW9yeSIgfQogcHJveG1veC1zb3J0YWJs ZS1tYWNybyA9IHsgdmVyc2lvbiA9ICIwLjEuMyIsIHBhdGggPSAicHJveG1veC1zb3J0YWJsZS1t YWNybyIgfQpkaWZmIC0tZ2l0IGEvcHJveG1veC1zZW5kbWFpbC9DYXJnby50b21sIGIvcHJveG1v eC1zZW5kbWFpbC9DYXJnby50b21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw Li43OTBiMzI0YgotLS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gtc2VuZG1haWwvQ2FyZ28udG9t bApAQCAtMCwwICsxLDE2IEBACitbcGFja2FnZV0KK25hbWUgPSAicHJveG1veC1zZW5kbWFpbCIK K3ZlcnNpb24gPSAiMC4xLjAiCithdXRob3JzLndvcmtzcGFjZSA9IHRydWUKK2VkaXRpb24ud29y a3NwYWNlID0gdHJ1ZQorbGljZW5zZS53b3Jrc3BhY2UgPSB0cnVlCityZXBvc2l0b3J5Lndvcmtz cGFjZSA9IHRydWUKK2hvbWVwYWdlLndvcmtzcGFjZSA9IHRydWUKK2V4Y2x1ZGUud29ya3NwYWNl ID0gdHJ1ZQorcnVzdC12ZXJzaW9uLndvcmtzcGFjZSA9IHRydWUKKworW2RlcGVuZGVuY2llc10K K2FueWhvdyA9IHsgd29ya3NwYWNlID0gdHJ1ZSB9CitiYXNlNjQgPSB7IHdvcmtzcGFjZSA9IHRy dWUgfQorcGVyY2VudC1lbmNvZGluZyA9IHsgd29ya3NwYWNlID0gdHJ1ZSB9Citwcm94bW94LXRp bWUgPSB7IHdvcmtzcGFjZSA9IHRydWUgfQpkaWZmIC0tZ2l0IGEvcHJveG1veC1zZW5kbWFpbC9k ZWJpYW4vY2hhbmdlbG9nIGIvcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vY2hhbmdlbG9nCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi43MWQ3YzlmOAotLS0gL2Rldi9udWxsCisr KyBiL3Byb3htb3gtc2VuZG1haWwvZGViaWFuL2NoYW5nZWxvZwpAQCAtMCwwICsxLDUgQEAKK3J1 c3QtcHJveG1veC1zZW5kbWFpbCAoMC4xLjAtMSkgYm9va3dvcm07IHVyZ2VuY3k9bWVkaXVtCisK KyAgKiBJbml0aWFsIHJlbGVhc2UuCisKKyAtLSBQcm94bW94IFN1cHBvcnQgVGVhbSA8c3VwcG9y dEBwcm94bW94LmNvbT4gIE1vbiwgMDIgRGVjIDIwMjQgMTQ6NDc6NDIgKzAxMDAKZGlmZiAtLWdp dCBhL3Byb3htb3gtc2VuZG1haWwvZGViaWFuL2NvbnRyb2wgYi9wcm94bW94LXNlbmRtYWlsL2Rl Ymlhbi9jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5kZmM4Yjli ZgotLS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gtc2VuZG1haWwvZGViaWFuL2NvbnRyb2wKQEAg LTAsMCArMSw0MyBAQAorU291cmNlOiBydXN0LXByb3htb3gtc2VuZG1haWwKK1NlY3Rpb246IHJ1 c3QKK1ByaW9yaXR5OiBvcHRpb25hbAorQnVpbGQtRGVwZW5kczogZGViaGVscGVyLWNvbXBhdCAo PSAxMyksCisgZGgtc2VxdWVuY2UtY2FyZ28sCisgY2FyZ286bmF0aXZlIDwhbm9jaGVjaz4sCisg cnVzdGM6bmF0aXZlICg+PSAxLjgwKSA8IW5vY2hlY2s+LAorIGxpYnN0ZC1ydXN0LWRldiA8IW5v Y2hlY2s+LAorIGxpYnJ1c3QtYW55aG93LTErZGVmYXVsdC1kZXYgPCFub2NoZWNrPiwKKyBsaWJy dXN0LWJhc2U2NC0wLjEzK2RlZmF1bHQtZGV2IDwhbm9jaGVjaz4sCisgbGlicnVzdC1wZXJjZW50 LWVuY29kaW5nLTIrZGVmYXVsdC1kZXYgKD49IDIuMS1+fikgPCFub2NoZWNrPiwKKyBsaWJydXN0 LXByb3htb3gtdGltZS0yK2RlZmF1bHQtZGV2IDwhbm9jaGVjaz4KK01haW50YWluZXI6IFByb3ht b3ggU3VwcG9ydCBUZWFtIDxzdXBwb3J0QHByb3htb3guY29tPgorU3RhbmRhcmRzLVZlcnNpb246 IDQuNy4wCitWY3MtR2l0OiBnaXQ6Ly9naXQucHJveG1veC5jb20vZ2l0L3Byb3htb3guZ2l0CitW Y3MtQnJvd3NlcjogaHR0cHM6Ly9naXQucHJveG1veC5jb20vP3A9cHJveG1veC5naXQKK0hvbWVw YWdlOiBodHRwczovL3Byb3htb3guY29tCitYLUNhcmdvLUNyYXRlOiBwcm94bW94LXNlbmRtYWls CitSdWxlcy1SZXF1aXJlcy1Sb290OiBubworCitQYWNrYWdlOiBsaWJydXN0LXByb3htb3gtc2Vu ZG1haWwtZGV2CitBcmNoaXRlY3R1cmU6IGFueQorTXVsdGktQXJjaDogc2FtZQorRGVwZW5kczoK KyAke21pc2M6RGVwZW5kc30sCisgbGlicnVzdC1hbnlob3ctMStkZWZhdWx0LWRldiwKKyBsaWJy dXN0LWJhc2U2NC0wLjEzK2RlZmF1bHQtZGV2LAorIGxpYnJ1c3QtcGVyY2VudC1lbmNvZGluZy0y K2RlZmF1bHQtZGV2ICg+PSAyLjEtfn4pLAorIGxpYnJ1c3QtcHJveG1veC10aW1lLTIrZGVmYXVs dC1kZXYKK1Byb3ZpZGVzOgorIGxpYnJ1c3QtcHJveG1veC1zZW5kbWFpbCtkZWZhdWx0LWRldiAo PSAke2JpbmFyeTpWZXJzaW9ufSksCisgbGlicnVzdC1wcm94bW94LXNlbmRtYWlsK21haWwtZm9y d2FyZGVyLWRldiAoPSAke2JpbmFyeTpWZXJzaW9ufSksCisgbGlicnVzdC1wcm94bW94LXNlbmRt YWlsLTAtZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259KSwKKyBsaWJydXN0LXByb3htb3gtc2VuZG1h aWwtMCtkZWZhdWx0LWRldiAoPSAke2JpbmFyeTpWZXJzaW9ufSksCisgbGlicnVzdC1wcm94bW94 LXNlbmRtYWlsLTArbWFpbC1mb3J3YXJkZXItZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259KSwKKyBs aWJydXN0LXByb3htb3gtc2VuZG1haWwtMC4xLWRldiAoPSAke2JpbmFyeTpWZXJzaW9ufSksCisg bGlicnVzdC1wcm94bW94LXNlbmRtYWlsLTAuMStkZWZhdWx0LWRldiAoPSAke2JpbmFyeTpWZXJz aW9ufSksCisgbGlicnVzdC1wcm94bW94LXNlbmRtYWlsLTAuMSttYWlsLWZvcndhcmRlci1kZXYg KD0gJHtiaW5hcnk6VmVyc2lvbn0pLAorIGxpYnJ1c3QtcHJveG1veC1zZW5kbWFpbC0wLjEuMC1k ZXYgKD0gJHtiaW5hcnk6VmVyc2lvbn0pLAorIGxpYnJ1c3QtcHJveG1veC1zZW5kbWFpbC0wLjEu MCtkZWZhdWx0LWRldiAoPSAke2JpbmFyeTpWZXJzaW9ufSksCisgbGlicnVzdC1wcm94bW94LXNl bmRtYWlsLTAuMS4wK21haWwtZm9yd2FyZGVyLWRldiAoPSAke2JpbmFyeTpWZXJzaW9ufSkKK0Rl c2NyaXB0aW9uOiBSdXN0IGNyYXRlICJwcm94bW94LXNlbmRtYWlsIiAtIFJ1c3Qgc291cmNlIGNv ZGUKKyBTb3VyY2UgY29kZSBmb3IgRGViaWFuaXplZCBSdXN0IGNyYXRlICJwcm94bW94LXNlbmRt YWlsIgpkaWZmIC0tZ2l0IGEvcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vY29weXJpZ2h0IGIvcHJv eG1veC1zZW5kbWFpbC9kZWJpYW4vY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwLi4wZDllYWIzZQotLS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gtc2VuZG1haWwv ZGViaWFuL2NvcHlyaWdodApAQCAtMCwwICsxLDE4IEBACitGb3JtYXQ6IGh0dHBzOi8vd3d3LmRl Ymlhbi5vcmcvZG9jL3BhY2thZ2luZy1tYW51YWxzL2NvcHlyaWdodC1mb3JtYXQvMS4wLworCitG aWxlczoKKyAqCitDb3B5cmlnaHQ6IDIwMTkgLSAyMDIzIFByb3htb3ggU2VydmVyIFNvbHV0aW9u cyBHbWJIIDxzdXBwb3J0QHByb3htb3guY29tPgorTGljZW5zZTogQUdQTC0zLjAtb3ItbGF0ZXIK KyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdCB1bmRlcgorIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIFNvZnR3YXJlIEZv dW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55CisgbGF0ZXIgdmVyc2lvbi4KKyAuCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MKKyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05V IEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgZGV0YWlscy4KKyAuCisg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFsb25nCisgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxo dHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9wcm94bW94LXNlbmRt YWlsL2RlYmlhbi9kZWJjYXJnby50b21sIGIvcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vZGViY2Fy Z28udG9tbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYjc4NjRjZGIKLS0t IC9kZXYvbnVsbAorKysgYi9wcm94bW94LXNlbmRtYWlsL2RlYmlhbi9kZWJjYXJnby50b21sCkBA IC0wLDAgKzEsNyBAQAorb3ZlcmxheSA9ICIuIgorY3JhdGVfc3JjX3BhdGggPSAiLi4iCittYWlu dGFpbmVyID0gIlByb3htb3ggU3VwcG9ydCBUZWFtIDxzdXBwb3J0QHByb3htb3guY29tPiIKKwor W3NvdXJjZV0KK3Zjc19naXQgPSAiZ2l0Oi8vZ2l0LnByb3htb3guY29tL2dpdC9wcm94bW94Lmdp dCIKK3Zjc19icm93c2VyID0gImh0dHBzOi8vZ2l0LnByb3htb3guY29tLz9wPXByb3htb3guZ2l0 IgpkaWZmIC0tZ2l0IGEvcHJveG1veC1zZW5kbWFpbC9zcmMvbGliLnJzIGIvcHJveG1veC1zZW5k bWFpbC9zcmMvbGliLnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5lNmNi MjU4ZQotLS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gtc2VuZG1haWwvc3JjL2xpYi5ycwpAQCAt MCwwICsxLDc3OSBAQAorLy8hCisvLyEgVGhpcyBsaWJyYXJ5IGltcGxlbWVudHMgdGhlIFtgTWFp bGBdIHRyYWl0IHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gc2VuZCBlbWFpbHMgd2l0aCBhdHRhY2ht ZW50cworLy8hIGFuZCBhbHRlcm5hdGl2ZSBodG1sIHBhcnRzIHRvIG9uZSBvciBtdWx0aXBsZSBy ZWNlaXZlcnMgdmlhIGBgc2VuZG1haWxgYC4KKy8vIQorCit1c2Ugc3RkOjppbzo6V3JpdGU7Cit1 c2Ugc3RkOjpwcm9jZXNzOjp7Q29tbWFuZCwgU3RkaW99OworCit1c2UgYW55aG93Ojp7YmFpbCwg Q29udGV4dCwgRXJyb3J9OwordXNlIHBlcmNlbnRfZW5jb2Rpbmc6Ont1dGY4X3BlcmNlbnRfZW5j b2RlLCBBc2NpaVNldCwgQ09OVFJPTFN9OworCisvLyBDaGFyYWN0ZXJzIGluIHRoaXMgc2V0IHdp bGwgYmUgZW5jb2RlZCwgc28gcmVwcm9kdWNlIHRoZSBpbnZlcnNlIG9mIHRoZSBzZXQgZGVzY3Jp YmVkIGJ5IFJGQzU5ODcKKy8vIFNlY3Rpb24gMy4yLjEgYGF0dHItY2hhcmAsIGFzIHRoYXQgZGVz Y3JpYmVzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgKipkb24ndCoqIG5lZWQgZW5jb2Rpbmc6CisvLwor Ly8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM1OTg3I3NlY3Rpb24t My4yLjEKKy8vCisvLyBgQ09OVFJPTFNgIGNvbnRhaW5zIGFsbCBjb250cm9sIGNoYXJhY3RlcnMg MHgwMCAtIDB4MWYgYW5kIDB4N2YgYXMgd2VsbCBhcyBhbGwgbm9uLWFzY2lpCisvLyBjaGFyYWN0 ZXJzLCBzbyB3ZSBuZWVkIHRvIGFkZCBhbGwgY2hhcmFjdGVycyBoZXJlIHRoYXQgYXJlbid0IGRl c2NyaWJlZCBpbiBgYXR0ci1jaGFyYCB0aGF0IGFyZQorLy8gaW4gdGhlIHJhbmdlIDB4MjAtMHg3 ZQorY29uc3QgUkZDNTk4N1NFVDogJkFzY2lpU2V0ID0gJkNPTlRST0xTCisgICAgLmFkZChiJyAn KQorICAgIC5hZGQoYiciJykKKyAgICAuYWRkKGInJScpCisgICAgLmFkZChiJyYnKQorICAgIC5h ZGQoYidcJycpCisgICAgLmFkZChiJygnKQorICAgIC5hZGQoYicpJykKKyAgICAuYWRkKGInKicp CisgICAgLmFkZChiJywnKQorICAgIC5hZGQoYicvJykKKyAgICAuYWRkKGInOicpCisgICAgLmFk ZChiJzsnKQorICAgIC5hZGQoYic8JykKKyAgICAuYWRkKGInPScpCisgICAgLmFkZChiJz4nKQor ICAgIC5hZGQoYic/JykKKyAgICAuYWRkKGInQCcpCisgICAgLmFkZChiJ1snKQorICAgIC5hZGQo YidcXCcpCisgICAgLmFkZChiJ10nKQorICAgIC5hZGQoYid7JykKKyAgICAuYWRkKGInfScpOwor CitzdHJ1Y3QgUmVjaXBpZW50IHsKKyAgICBuYW1lOiBPcHRpb248U3RyaW5nPiwKKyAgICBlbWFp bDogU3RyaW5nLAorfQorCitpbXBsIFJlY2lwaWVudCB7CisgICAgLy8gUmV0dXJucyB0cnVlIGlm IHRoZSBuYW1lIG9mIHRoZSByZWNpcGllbnQgaXMgdW5kZWZpbmVkIG9yIGNvbnRhaW5zIG9ubHkg YXNjaWkgY2hhcmFjdGVycworICAgIGZuIGlzX2FzY2lpKCZzZWxmKSAtPiBib29sIHsKKyAgICAg ICAgc2VsZi5uYW1lLmFzX3JlZigpLm1hcCh8bnwgbi5pc19hc2NpaSgpKS51bndyYXBfb3IodHJ1 ZSkKKyAgICB9CisKKyAgICBmbiBmb3JtYXRfcmVjaXBpZW50KCZzZWxmKSAtPiBTdHJpbmcgewor ICAgICAgICBpZiBsZXQgU29tZShuYW1lKSA9ICZzZWxmLm5hbWUgeworICAgICAgICAgICAgaWYg IW5hbWUuaXNfYXNjaWkoKSB7CisgICAgICAgICAgICAgICAgZm9ybWF0ISgiPT91dGYtOD9CP3t9 Pz0gPHt9PiIsIGJhc2U2NDo6ZW5jb2RlKG5hbWUpLCBzZWxmLmVtYWlsKQorICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3JtYXQhKCJ7bmFtZX0gPHt9PiIsIHNlbGYuZW1h aWwpCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZWxmLmVt YWlsLnRvX3N0cmluZygpCisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0cnVjdCBBdHRhY2htZW50 PCdhPiB7CisgICAgZmlsZW5hbWU6IFN0cmluZywKKyAgICBtaW1lOiBTdHJpbmcsCisgICAgY29u dGVudDogJidhIFt1OF0sCit9CisKK2ltcGw8J2E+IEF0dGFjaG1lbnQ8J2E+IHsKKyAgICBmbiBm b3JtYXRfYXR0YWNobWVudCgmc2VsZiwgZmlsZV9ib3VuZGFyeTogJnN0cikgLT4gU3RyaW5nIHsK KyAgICAgICAgdXNlIHN0ZDo6Zm10OjpXcml0ZTsKKworICAgICAgICBsZXQgbXV0IGF0dGFjaG1l bnQgPSBTdHJpbmc6Om5ldygpOworCisgICAgICAgIGxldCBfID0gd3JpdGVsbiEoYXR0YWNobWVu dCwgIlxuLS17ZmlsZV9ib3VuZGFyeX0iKTsKKyAgICAgICAgbGV0IF8gPSB3cml0ZWxuISgKKyAg ICAgICAgICAgIGF0dGFjaG1lbnQsCisgICAgICAgICAgICAiQ29udGVudC1UeXBlOiB7fTsgbmFt ZT1cInt9XCIiLAorICAgICAgICAgICAgc2VsZi5taW1lLCBzZWxmLmZpbGVuYW1lCisgICAgICAg ICk7CisKKyAgICAgICAgLy8gYm90aCBgZmlsZW5hbWVgIGFuZCBgZmlsZW5hbWUqYCBhcmUgaW5j bHVkZWQgZm9yIGFkZGl0aW9uYWwgY29tcGF0YWJpbGl0eQorICAgICAgICBsZXQgXyA9IHdyaXRl bG4hKAorICAgICAgICAgICAgYXR0YWNobWVudCwKKyAgICAgICAgICAgICJDb250ZW50LURpc3Bv c2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cInt9XCI7IGZpbGVuYW1lKj1VVEYtOCcne30i LAorICAgICAgICAgICAgc2VsZi5maWxlbmFtZSwKKyAgICAgICAgICAgIHV0ZjhfcGVyY2VudF9l bmNvZGUoJnNlbGYuZmlsZW5hbWUsIFJGQzU5ODdTRVQpCisgICAgICAgICk7CisgICAgICAgIGF0 dGFjaG1lbnQucHVzaF9zdHIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFxuXG4i KTsKKworICAgICAgICAvLyBiYXNlNjQgZW5jb2RlIHRoZSBhdHRhY2htZW50IGFuZCBoYXJkLXdy YXAgdGhlIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBldmVyeSA3MgorICAgICAgICAvLyBjaGFyYWN0 ZXJzLiB0aGlzIGltcHJvdmVzIGNvbXBhdGFiaWxpdHkuCisgICAgICAgIGF0dGFjaG1lbnQucHVz aF9zdHIoCisgICAgICAgICAgICAmYmFzZTY0OjplbmNvZGUoc2VsZi5jb250ZW50KQorICAgICAg ICAgICAgICAgIC5jaGFycygpCisgICAgICAgICAgICAgICAgLmVudW1lcmF0ZSgpCisgICAgICAg ICAgICAgICAgLmZsYXRfbWFwKHwoaSwgYyl8IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgaSAh PSAwICYmIGkgJSA3MiA9PSAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUoJ1xuJykK KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5v bmUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAuaW50b19pdGVy KCkKKyAgICAgICAgICAgICAgICAgICAgLmNoYWluKHN0ZDo6aXRlcjo6b25jZShjKSkKKyAgICAg ICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5jb2xsZWN0Ojo8U3RyaW5nPigpLAorICAg ICAgICApOworCisgICAgICAgIGF0dGFjaG1lbnQKKyAgICB9Cit9CisKKy8vLyBUaGlzIHN0cnVj dCBpcyB1c2VkIHRvIGRlZmluZSBtYWlscyB0aGF0IGFyZSB0byBiZSBzZW50IHZpYSB0aGUgYHNl bmRtYWlsYCBjb21tYW5kLgorcHViIHN0cnVjdCBNYWlsPCdhPiB7CisgICAgbWFpbF9hdXRob3I6 IFN0cmluZywKKyAgICBtYWlsX2Zyb206IFN0cmluZywKKyAgICBzdWJqZWN0OiBTdHJpbmcsCisg ICAgdG86IFZlYzxSZWNpcGllbnQ+LAorICAgIGJvZHlfdHh0OiBTdHJpbmcsCisgICAgYm9keV9o dG1sOiBPcHRpb248U3RyaW5nPiwKKyAgICBhdHRhY2htZW50czogVmVjPEF0dGFjaG1lbnQ8J2E+ PiwKKyAgICBtYXNrX3BhcnRpY2lwYW50czogYm9vbCwKK30KKworaW1wbDwnYT4gTWFpbDwnYT4g eworICAgIC8vLyBDcmVhdGVzIGEgbmV3IG1haWwgd2l0aCBhIG1haWwgYXV0aG9yLCBmcm9tIGFk ZHJlc3MsIHN1YmplY3QgbGluZSBhbmQgYSBwbGFpbiB0ZXh0IGJvZHkuCisgICAgLy8vCisgICAg Ly8vIE5vdGU6IElmIHRoZSBhdXRob3IncyBuYW1lIG9yIHRoZSBzdWJqZWN0IGxpbmUgY29udGFp bnMgVVRGLTggY2hhcmFjdGVycyB0aGV5IHdpbGwgYmUKKyAgICAvLy8gYXBwcm9wcmlhdGVseSBl bmNvZGVkLgorICAgIHB1YiBmbiBuZXcobWFpbF9hdXRob3I6ICZzdHIsIG1haWxfZnJvbTogJnN0 ciwgc3ViamVjdDogJnN0ciwgYm9keV90eHQ6ICZzdHIpIC0+IFNlbGYgeworICAgICAgICBTZWxm IHsKKyAgICAgICAgICAgIG1haWxfYXV0aG9yOiBtYWlsX2F1dGhvci50b19zdHJpbmcoKSwKKyAg ICAgICAgICAgIG1haWxfZnJvbTogbWFpbF9mcm9tLnRvX3N0cmluZygpLAorICAgICAgICAgICAg c3ViamVjdDogc3ViamVjdC50b19zdHJpbmcoKSwKKyAgICAgICAgICAgIHRvOiBWZWM6Om5ldygp LAorICAgICAgICAgICAgYm9keV90eHQ6IGJvZHlfdHh0LnRvX3N0cmluZygpLAorICAgICAgICAg ICAgYm9keV9odG1sOiBOb25lLAorICAgICAgICAgICAgYXR0YWNobWVudHM6IFZlYzo6bmV3KCks CisgICAgICAgICAgICBtYXNrX3BhcnRpY2lwYW50czogdHJ1ZSwKKyAgICAgICAgfQorICAgIH0K KworICAgIC8vLyBBZGRzIGEgcmVjaXBpZW50IHRvIHRoZSBtYWlsIHdpdGhvdXQgc3BlY2lmeWlu ZyBhIG5hbWUgc2VwYXJhdGVseS4KKyAgICAvLy8KKyAgICAvLy8gTm90ZTogTm8gZm9ybWF0dGlu ZyBvciBlbmNvZGluZyB3aWxsIGJlIGRvbmUgaGVyZSwgdGhlIHZhbHVlIHdpbGwgYmUgcGFzc2Vk IHRvIHRoZSBgVG86YAorICAgIC8vLyBoZWFkZXIgZGlyZWN0bHkuCisgICAgcHViIGZuIGFkZF9y ZWNpcGllbnQoJm11dCBzZWxmLCBlbWFpbDogJnN0cikgeworICAgICAgICBzZWxmLnRvLnB1c2go UmVjaXBpZW50IHsKKyAgICAgICAgICAgIG5hbWU6IE5vbmUsCisgICAgICAgICAgICBlbWFpbDog ZW1haWwudG9fc3RyaW5nKCksCisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vLyBCdWlsZGVy LXBhdHRlcm4gbWV0aG9kIHRvIGNvbnZlbmllbnRseSBhZGQgYSByZWNpcGllbnQgdG8gYW4gZW1h aWwgd2l0aG91dCBzcGVjaWZ5aW5nIGEKKyAgICAvLy8gbmFtZSBzZXBhcmF0ZWx5LgorICAgIC8v LworICAgIC8vLyBOb3RlOiBObyBmb3JtYXR0aW5nIG9yIGVuY29kaW5nIHdpbGwgYmUgZG9uZSBo ZXJlLCB0aGUgdmFsdWUgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBUbzpgCisgICAgLy8vIGhlYWRl ciBkaXJlY3RseS4KKyAgICBwdWIgZm4gd2l0aF9yZWNpcGllbnQobXV0IHNlbGYsIGVtYWlsOiAm c3RyKSAtPiBTZWxmIHsKKyAgICAgICAgc2VsZi5hZGRfcmVjaXBpZW50KGVtYWlsKTsKKyAgICAg ICAgc2VsZgorICAgIH0KKworICAgIC8vLyBBZGRzIGEgcmVjaXBpZW50IHRvIHRoZSBtYWlsIHdp dGggYSBuYW1lLgorICAgIC8vLworICAgIC8vLyBOb3RlczoKKyAgICAvLy8KKyAgICAvLy8gLSBJ ZiB0aGUgbmFtZSBjb250YWlucyBVVEYtOCBjaGFyYWN0ZXJzIGl0IHdpbGwgYmUgZW5jb2RlZC4g VGhlbiB0aGUgcG9zc2libHkgZW5jb2RlZCBuYW1lCisgICAgLy8vICAgYW5kIG5vbi1lbmNvZGVk IGVtYWlsIGFkZHJlc3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBUbzpgIGhlYWRlciBpbiB0aGlz IGZvcm1hdDoKKyAgICAvLy8gICBge2VuY29kZWRfbmFtZX0gPHtlbWFpbH0+YAorICAgIC8vLyAt IElmIG11bHRpcGxlIHJlY2VpdmVycyBhcmUgc3BlY2lmaWVkLCB0aGV5IHdpbGwgYmUgbWFza2Vk IHNvIGFzIG5vdCB0byBkaXNjbG9zZSB0aGVtIHRvCisgICAgLy8vICAgb3RoZXIgcmVjZWl2ZXJz LiBUaGlzIGNhbiBiZSBkaXNhYmxlZCB2aWEgW2BNYWlsOjp1bm1hc2tfcmVjaXBpZW50c2BdIG9y CisgICAgLy8vICAgW2BNYWlsOjp3aXRoX3VubWFza2VkX3JlY2lwaWVudHNgXS4KKyAgICBwdWIg Zm4gYWRkX3JlY2lwaWVudF9hbmRfbmFtZSgmbXV0IHNlbGYsIG5hbWU6ICZzdHIsIGVtYWlsOiAm c3RyKSB7CisgICAgICAgIHNlbGYudG8ucHVzaChSZWNpcGllbnQgeworICAgICAgICAgICAgbmFt ZTogU29tZShuYW1lLnRvX3N0cmluZygpKSwKKyAgICAgICAgICAgIGVtYWlsOiBlbWFpbC50b19z dHJpbmcoKSwKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8vIEJ1aWxkZXItc3R5bGUgbWV0 aG9kIHRvIGNvbnZlbmllbnRseSBhZGQgYSByZWNpcGllbnQgd2l0aCBhIG5hbWUgdG8gYW4gZW1h aWwuCisgICAgLy8vCisgICAgLy8vIE5vdGVzOgorICAgIC8vLworICAgIC8vLyAtIElmIHRoZSBu YW1lIGNvbnRhaW5zIFVURi04IGNoYXJhY3RlcnMgaXQgd2lsbCBiZSBlbmNvZGVkLiBUaGVuIHRo ZSBwb3NzaWJseSBlbmNvZGVkIG5hbWUKKyAgICAvLy8gICBhbmQgbm9uLWVuY29kZWQgZW1haWwg YWRkcmVzcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgYFRvOmAgaGVhZGVyIGluIHRoaXMgZm9ybWF0 OgorICAgIC8vLyAgIGB7ZW5jb2RlZF9uYW1lfSA8e2VtYWlsfT5gCisgICAgLy8vIC0gSWYgbXVs dGlwbGUgcmVjZWl2ZXJzIGFyZSBzcGVjaWZpZWQsIHRoZXkgd2lsbCBiZSBtYXNrZWQgc28gYXMg bm90IHRvIGRpc2Nsb3NlIHRoZW0gdG8KKyAgICAvLy8gICBvdGhlciByZWNlaXZlcnMuIFRoaXMg Y2FuIGJlIGRpc2FibGVkIHZpYSBbYE1haWw6OnVubWFza19yZWNpcGllbnRzYF0gb3IKKyAgICAv Ly8gICBbYE1haWw6OndpdGhfdW5tYXNrZWRfcmVjaXBpZW50c2BdLgorICAgIHB1YiBmbiB3aXRo X3JlY2lwaWVudF9hbmRfbmFtZShtdXQgc2VsZiwgbmFtZTogJnN0ciwgZW1haWw6ICZzdHIpIC0+ IFNlbGYgeworICAgICAgICBzZWxmLmFkZF9yZWNpcGllbnRfYW5kX25hbWUobmFtZSwgZW1haWwp OworICAgICAgICBzZWxmCisgICAgfQorCisgICAgLy8vIEFkZHMgYW4gYXR0YWNobWVudCB3aXRo IGEgc3BlY2lmaWVkIGZpbGUgbmFtZSBhbmQgbWltZS10eXBlIHRvIGFuIGVtYWlsLgorICAgIC8v LworICAgIC8vLyBOb3RlOiBBZGRpbmcgYXR0YWNobWVudHMgdHJpZ2dlcnMgYG11bHRpcGFydC9t aXhlZGAgbW9kZS4KKyAgICBwdWIgZm4gYWRkX2F0dGFjaG1lbnQoJm11dCBzZWxmLCBmaWxlbmFt ZTogJnN0ciwgbWltZV90eXBlOiAmc3RyLCBjb250ZW50OiAmJ2EgW3U4XSkgeworICAgICAgICBz ZWxmLmF0dGFjaG1lbnRzLnB1c2goQXR0YWNobWVudCB7CisgICAgICAgICAgICBmaWxlbmFtZTog ZmlsZW5hbWUudG9fc3RyaW5nKCksCisgICAgICAgICAgICBtaW1lOiBtaW1lX3R5cGUudG9fc3Ry aW5nKCksCisgICAgICAgICAgICBjb250ZW50LAorICAgICAgICB9KTsKKyAgICB9CisKKyAgICAv Ly8gQnVpbGRlci1zdHlsZSBtZXRob2QgdG8gY29udmVuaWVudGx5IGFkZCBhbiBhdHRhY2htZW50 IHdpdGggYSBzcGVjaWZpYyBmaWxlbmFtZSBhbmQKKyAgICAvLy8gbWltZS10eXBlIHRvIGFuIGVt YWlsLgorICAgIC8vLworICAgIC8vLyBOb3RlOiBBZGRpbmcgYXR0YWNoZW1lbnRzIHRyaWdnZXJz IGBtdWx0aXBhcnQvbWl4ZWRgIG1vZGUuCisgICAgcHViIGZuIHdpdGhfYXR0YWNobWVudChtdXQg c2VsZiwgZmlsZW5hbWU6ICZzdHIsIG1pbWVfdHlwZTogJnN0ciwgY29udGVudDogJidhIFt1OF0p IC0+IFNlbGYgeworICAgICAgICBzZWxmLmFkZF9hdHRhY2htZW50KGZpbGVuYW1lLCBtaW1lX3R5 cGUsIGNvbnRlbnQpOworICAgICAgICBzZWxmCisgICAgfQorCisgICAgLy8vIFNldCBhbiBhbHRl cm5hdGl2ZSBIVE1MIHBhcnQuCisgICAgLy8vCisgICAgLy8vIE5vdGU6IFRoaXMgdHJpZ2dlcnMg YG11bHRpcGFydC9hbHRlcm5hdGl2ZWAgbW9kZS4gSWYgYm90aCBhbiBIVE1MIHBhcnQgYW5kIGF0 IGxlYXN0IG9uZQorICAgIC8vLyBhdHRhY2htZW50IGFyZSBzcGVjaWZpZWQsIHRoZSBgbXVsdGlw YXJ0L2FsdGVybmF0aXZlYCBwYXJ0IHdpbGwgYmUgbmVzdGVkIHdpdGhpbiB0aGUgZmlyc3QKKyAg ICAvLy8gYG11bHRpcGFydC9taXhlZGAgcGFydC4gVGhpcyBzaG91bGQgZW5zdXJlIHRoYXQgdGhl IEhUTUwgaXMgZGlzcGxheWVkIHByb3Blcmx5IGJ5IGNsaWVudCdzCisgICAgLy8vIHRoYXQgcHJp b3JpdGl6ZSBpdCBvdmVyIHRoZSBwbGFpbiB0ZXh0IHBhcnQgKHNob3VsZCBiZSB0aGUgZGVmYXVs dCBmb3IgbW9zdCBjbGllbnRzKSB3aGlsZQorICAgIC8vLyBhbHNvIHByb3Blcmx5IGRpc3BsYXlp bmcgdGhlIGF0dGFjaG1lbnRzLgorICAgIHB1YiBmbiBzZXRfaHRtbF9hbHQoJm11dCBzZWxmLCBi b2R5X2h0bWw6ICZzdHIpIHsKKyAgICAgICAgc2VsZi5ib2R5X2h0bWwucmVwbGFjZShib2R5X2h0 bWwudG9fc3RyaW5nKCkpOworICAgIH0KKworICAgIC8vLyBCdWlsZGVyLXN0eWxlIG1ldGhvZCB0 byBhZGQgYW4gYWx0ZXJuYXRpdmUgSFRNTCBwYXJ0LgorICAgIC8vLworICAgIC8vLyBOb3RlOiBU aGlzIHRyaWdnZXJzIGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgIG1vZGUuIElmIGJvdGggYW4gSFRN TCBwYXJ0IGFuZCBhdCBsZWFzdCBvbmUKKyAgICAvLy8gYXR0YWNobWVudCBhcmUgc3BlY2lmaWVk LCB0aGUgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWAgcGFydCB3aWxsIGJlIG5lc3RlZCB3aXRoaW4g dGhlIGZpcnN0CisgICAgLy8vIGBtdWx0aXBhcnQvbWl4ZWRgIHBhcnQuIFRoaXMgc2hvdWxkIGVu c3VyZSB0aGF0IHRoZSBIVE1MIGlzIGRpc3BsYXllZCBwcm9wZXJseSBieSBjbGllbnQncworICAg IC8vLyB0aGF0IHByaW9yaXRpemUgaXQgb3ZlciB0aGUgcGxhaW4gdGV4dCBwYXJ0IChzaG91bGQg YmUgdGhlIGRlZmF1bHQgZm9yIG1vc3QgY2xpZW50cykgd2hpbGUKKyAgICAvLy8gYWxzbyBwcm9w ZXJseSBkaXNwbGF5aW5nIHRoZSBhdHRhY2htZW50cy4KKyAgICBwdWIgZm4gd2l0aF9odG1sX2Fs dChtdXQgc2VsZiwgYm9keV9odG1sOiAmc3RyKSAtPiBTZWxmIHsKKyAgICAgICAgc2VsZi5zZXRf aHRtbF9hbHQoYm9keV9odG1sKTsKKyAgICAgICAgc2VsZgorICAgIH0KKworICAgIC8vLyBUaGlz IGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBtYWlsIGFyZSBub3QgbWFz a2VkLiBCZWluZyBhYmxlIHRvIHNlZSBhbGwKKyAgICAvLy8gcmVjaXBpZW50cyBvZiBhIG1haWwg Y2FuIGJlIGhlbHBmdWwgaW4sIGZvciBleGFtcGxlLCBub3RpZmljYXRpb24gc2NlbmFyaW9zLgor ICAgIHB1YiBmbiB1bm1hc2tfcmVjaXBpZW50cygmbXV0IHNlbGYpIHsKKyAgICAgICAgc2VsZi5t YXNrX3BhcnRpY2lwYW50cyA9IGZhbHNlOworICAgIH0KKworICAgIC8vLyBCdWlsZGVyLXN0eWxl IGZ1bmN0aW9uIHRoYXQgZW5zdXJlcyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIG1haWwgYXJlIG5v dCBtYXNrZWQuIEJlaW5nIGFibGUKKyAgICAvLy8gdG8gc2VlIGFsbCByZWNpcGllbnRzIG9mIGEg bWFpbCBjYW4gYmUgaGVscGZ1bCBpbiwgZm9yIGV4YW1wbGUsIG5vdGlmaWNhdGlvbiBzY2VuYXJp b3MuCisgICAgcHViIGZuIHdpdGhfdW5tYXNrZWRfcmVjaXBpZW50cyhtdXQgc2VsZikgLT4gU2Vs ZiB7CisgICAgICAgIHNlbGYudW5tYXNrX3JlY2lwaWVudHMoKTsKKyAgICAgICAgc2VsZgorICAg IH0KKworICAgIC8vLyBTZW5kcyB0aGUgZW1haWwuIFRoaXMgd2lsbCBmYWlsIGlmIG5vIHJlY2lw aWVudHMgaGF2ZSBiZWVuIGFkZGVkLgorICAgIC8vLworICAgIC8vLyBOb3RlOiBBbiBgQXV0by1T dWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkYCBoZWFkZXIgaXMgYWRkZWQgdG8gYXZvaWQgdHJpZ2dl cmluZyBPT08gYW5kCisgICAgLy8vIHNpbWlsYXIgbWFpbHMuCisgICAgcHViIGZuIHNlbmQoJnNl bGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgaWYgc2VsZi50by5pc19lbXB0eSgp IHsKKyAgICAgICAgICAgIGJhaWwhKCJubyByZWNpcGllbnRzIHByb3ZpZGVkIGZvciB0aGUgbWFp bCwgY2Fubm90IHNlbmQgaXQuIik7CisgICAgICAgIH0KKworICAgICAgICBsZXQgbm93ID0gcHJv eG1veF90aW1lOjplcG9jaF9pNjQoKTsKKyAgICAgICAgbGV0IGJvZHkgPSBzZWxmLmZvcm1hdF9t YWlsKG5vdyk/OworCisgICAgICAgIGxldCBtdXQgc2VuZG1haWxfcHJvY2VzcyA9IENvbW1hbmQ6 Om5ldygiL3Vzci9zYmluL3NlbmRtYWlsIikKKyAgICAgICAgICAgIC5hcmcoIi1CIikKKyAgICAg ICAgICAgIC5hcmcoIjhCSVRNSU1FIikKKyAgICAgICAgICAgIC5hcmcoIi1mIikKKyAgICAgICAg ICAgIC5hcmcoJnNlbGYubWFpbF9mcm9tKQorICAgICAgICAgICAgLmFyZygiLS0iKQorICAgICAg ICAgICAgLmFyZ3Moc2VsZi50by5pdGVyKCkubWFwKHxwfCAmcC5lbWFpbCkuY29sbGVjdDo6PFZl YzwmU3RyaW5nPj4oKSkKKyAgICAgICAgICAgIC5zdGRpbihTdGRpbzo6cGlwZWQoKSkKKyAgICAg ICAgICAgIC5zcGF3bigpCisgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8ICJjb3VsZCBub3Qg c3Bhd24gc2VuZG1haWwgcHJvY2VzcyIpPzsKKworICAgICAgICBzZW5kbWFpbF9wcm9jZXNzCisg ICAgICAgICAgICAuc3RkaW4KKyAgICAgICAgICAgIC5hc19yZWYoKQorICAgICAgICAgICAgLnVu d3JhcCgpCisgICAgICAgICAgICAud3JpdGVfYWxsKGJvZHkuYXNfYnl0ZXMoKSkKKyAgICAgICAg ICAgIC53aXRoX2NvbnRleHQofHwgImNvdWxkbid0IHdyaXRlIHRvIHNlbmRtYWlsIHN0ZGluIik/ OworCisgICAgICAgIHNlbmRtYWlsX3Byb2Nlc3MKKyAgICAgICAgICAgIC53YWl0KCkKKyAgICAg ICAgICAgIC53aXRoX2NvbnRleHQofHwgInNlbmRtYWlsIGRpZCBub3QgZXhpdCBzdWNjZXNzZnVs bHkiKT87CisKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgZm4gZm9ybWF0X21haWwoJnNl bGYsIG5vdzogaTY0KSAtPiBSZXN1bHQ8U3RyaW5nLCBFcnJvcj4geworICAgICAgICB1c2Ugc3Rk OjpmbXQ6OldyaXRlOworCisgICAgICAgIGxldCBmaWxlX2JvdW5kYXJ5ID0gZm9ybWF0ISgiLS0t LV89X05leHRQYXJ0XzAwMV97bm93fSIpOworICAgICAgICBsZXQgaHRtbF9ib3VuZGFyeSA9IGZv cm1hdCEoIi0tLS1fPV9OZXh0UGFydF8wMDJfe25vd30iKTsKKworICAgICAgICBsZXQgbXV0IG1h aWwgPSBzZWxmLmZvcm1hdF9oZWFkZXIobm93LCAmZmlsZV9ib3VuZGFyeSwgJmh0bWxfYm91bmRh cnkpPzsKKyAgICAgICAgbWFpbC5wdXNoX3N0cigmc2VsZi5mb3JtYXRfYm9keSgmZmlsZV9ib3Vu ZGFyeSwgJmh0bWxfYm91bmRhcnkpPyk7CisKKyAgICAgICAgaWYgIXNlbGYuYXR0YWNobWVudHMu aXNfZW1wdHkoKSB7CisgICAgICAgICAgICBtYWlsLnB1c2hfc3RyKAorICAgICAgICAgICAgICAg ICZzZWxmCisgICAgICAgICAgICAgICAgICAgIC5hdHRhY2htZW50cworICAgICAgICAgICAgICAg ICAgICAuaXRlcigpCisgICAgICAgICAgICAgICAgICAgIC5tYXAofGF8IGEuZm9ybWF0X2F0dGFj aG1lbnQoJmZpbGVfYm91bmRhcnkpKQorICAgICAgICAgICAgICAgICAgICAuY29sbGVjdDo6PFN0 cmluZz4oKSwKKyAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgIHdyaXRlIShtYWlsLCAiXG4t LXtmaWxlX2JvdW5kYXJ5fS0tIik/OworICAgICAgICB9CisKKyAgICAgICAgT2sobWFpbCkKKyAg ICB9CisKKyAgICBmbiBmb3JtYXRfaGVhZGVyKAorICAgICAgICAmc2VsZiwKKyAgICAgICAgbm93 OiBpNjQsCisgICAgICAgIGZpbGVfYm91bmRhcnk6ICZzdHIsCisgICAgICAgIGh0bWxfYm91bmRh cnk6ICZzdHIsCisgICAgKSAtPiBSZXN1bHQ8U3RyaW5nLCBFcnJvcj4geworICAgICAgICB1c2Ug c3RkOjpmbXQ6OldyaXRlOworCisgICAgICAgIGxldCBtdXQgaGVhZGVyID0gU3RyaW5nOjpuZXco KTsKKworICAgICAgICBsZXQgZW5jb2RlZF90byA9IGlmIHNlbGYudG8ubGVuKCkgPiAxICYmIHNl bGYubWFza19wYXJ0aWNpcGFudHMgeworICAgICAgICAgICAgLy8gaWYgdGhlIHJlY2VpdmVycyBh cmUgbWFza2VkLCB3ZSBrbm93IHRoYXQgdGhleSBkb24ndCBuZWVkIHRvIGJlIGVuY29kZWQKKyAg ICAgICAgICAgIGZhbHNlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBjaGVjayBp ZiB0aGVyZSBpcyBhIHJlY2lwaWVudCB0aGF0IG5lZWRzIGVuY29kaW5nCisgICAgICAgICAgICBz ZWxmLnRvLml0ZXIoKS5hbnkofHJ8ICFyLmlzX2FzY2lpKCkpCisgICAgICAgIH07CisKKyAgICAg ICAgaWYgIXNlbGYuYXR0YWNobWVudHMuaXNfZW1wdHkoKSB7CisgICAgICAgICAgICBoZWFkZXIu cHVzaF9zdHIoIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkO1xuIik7CisgICAgICAgICAg ICB3cml0ZWxuIShoZWFkZXIsICJcdGJvdW5kYXJ5PVwie2ZpbGVfYm91bmRhcnl9XCIiKT87Cisg ICAgICAgICAgICBoZWFkZXIucHVzaF9zdHIoIk1JTUUtVmVyc2lvbjogMS4wXG4iKTsKKyAgICAg ICAgfSBlbHNlIGlmIHNlbGYuYm9keV9odG1sLmlzX3NvbWUoKSB7CisgICAgICAgICAgICBoZWFk ZXIucHVzaF9zdHIoIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlO1xuIik7Cisg ICAgICAgICAgICB3cml0ZWxuIShoZWFkZXIsICJcdGJvdW5kYXJ5PVwie2h0bWxfYm91bmRhcnl9 XCIiKT87CisgICAgICAgICAgICBoZWFkZXIucHVzaF9zdHIoIk1JTUUtVmVyc2lvbjogMS4wXG4i KTsKKyAgICAgICAgfSBlbHNlIGlmICFzZWxmLnN1YmplY3QuaXNfYXNjaWkoKSB8fCAhc2VsZi5t YWlsX2F1dGhvci5pc19hc2NpaSgpIHx8IGVuY29kZWRfdG8geworICAgICAgICAgICAgaGVhZGVy LnB1c2hfc3RyKCJNSU1FLVZlcnNpb246IDEuMFxuIik7CisgICAgICAgIH0KKworICAgICAgICBp ZiAhc2VsZi5zdWJqZWN0LmlzX2FzY2lpKCkgeworICAgICAgICAgICAgd3JpdGVsbiEoCisgICAg ICAgICAgICAgICAgaGVhZGVyLAorICAgICAgICAgICAgICAgICJTdWJqZWN0OiA9P3V0Zi04P0I/ e30/PSIsCisgICAgICAgICAgICAgICAgYmFzZTY0OjplbmNvZGUoJnNlbGYuc3ViamVjdCkKKyAg ICAgICAgICAgICk/OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd3JpdGVsbiEoaGVh ZGVyLCAiU3ViamVjdDoge30iLCBzZWxmLnN1YmplY3QpPzsKKyAgICAgICAgfTsKKworICAgICAg ICBpZiAhc2VsZi5tYWlsX2F1dGhvci5pc19hc2NpaSgpIHsKKyAgICAgICAgICAgIHdyaXRlbG4h KAorICAgICAgICAgICAgICAgIGhlYWRlciwKKyAgICAgICAgICAgICAgICAiRnJvbTogPT91dGYt OD9CP3t9Pz0gPHt9PiIsCisgICAgICAgICAgICAgICAgYmFzZTY0OjplbmNvZGUoJnNlbGYubWFp bF9hdXRob3IpLAorICAgICAgICAgICAgICAgIHNlbGYubWFpbF9mcm9tCisgICAgICAgICAgICAp PzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdyaXRlbG4hKGhlYWRlciwgIkZyb206 IHt9IDx7fT4iLCBzZWxmLm1haWxfYXV0aG9yLCBzZWxmLm1haWxfZnJvbSk/OworICAgICAgICB9 CisKKyAgICAgICAgbGV0IHRvID0gaWYgc2VsZi50by5sZW4oKSA+IDEgJiYgc2VsZi5tYXNrX3Bh cnRpY2lwYW50cyB7CisgICAgICAgICAgICAvLyBkb24ndCBkaXNjbG9zZSBhbGwgcmVjaXBpZW50 cyBpZiB0aGUgbWFpbCBnb2VzIG91dCB0byBtdWx0aXBsZQorICAgICAgICAgICAgbGV0IHJlY2lw aWVudCA9IFJlY2lwaWVudCB7CisgICAgICAgICAgICAgICAgbmFtZTogU29tZSgiVW5kaXNjbG9z ZWQiLnRvX3N0cmluZygpKSwKKyAgICAgICAgICAgICAgICBlbWFpbDogIm5vcmVwbHkiLnRvX3N0 cmluZygpLAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgcmVjaXBpZW50LmZvcm1hdF9y ZWNpcGllbnQoKQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VsZi50bworICAgICAg ICAgICAgICAgIC5pdGVyKCkKKyAgICAgICAgICAgICAgICAubWFwKFJlY2lwaWVudDo6Zm9ybWF0 X3JlY2lwaWVudCkKKyAgICAgICAgICAgICAgICAuY29sbGVjdDo6PFZlYzxTdHJpbmc+PigpCisg ICAgICAgICAgICAgICAgLmpvaW4oIiwgIikKKyAgICAgICAgfTsKKworICAgICAgICB3cml0ZWxu IShoZWFkZXIsICJUbzoge3RvfSIpPzsKKworICAgICAgICBsZXQgcmZjMjgyMl9kYXRlID0gcHJv eG1veF90aW1lOjplcG9jaF90b19yZmMyODIyKG5vdykKKyAgICAgICAgICAgIC53aXRoX2NvbnRl eHQofHwgImNvdWxkIG5vdCBjb252ZXJ0IGVwb2NoIHRvIHJmYzI4MjIgZGF0ZSIpPzsKKyAgICAg ICAgd3JpdGVsbiEoaGVhZGVyLCAiRGF0ZToge3JmYzI4MjJfZGF0ZX0iKT87CisgICAgICAgIGhl YWRlci5wdXNoX3N0cigiQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkO1xuIik7CisKKyAg ICAgICAgT2soaGVhZGVyKQorICAgIH0KKworICAgIGZuIGZvcm1hdF9ib2R5KCZzZWxmLCBmaWxl X2JvdW5kYXJ5OiAmc3RyLCBodG1sX2JvdW5kYXJ5OiAmc3RyKSAtPiBSZXN1bHQ8U3RyaW5nLCBF cnJvcj4geworICAgICAgICB1c2Ugc3RkOjpmbXQ6OldyaXRlOworCisgICAgICAgIGxldCBtdXQg Ym9keSA9IFN0cmluZzo6bmV3KCk7CisKKyAgICAgICAgaWYgc2VsZi5ib2R5X2h0bWwuaXNfc29t ZSgpICYmICFzZWxmLmF0dGFjaG1lbnRzLmlzX2VtcHR5KCkgeworICAgICAgICAgICAgYm9keS5w dXNoX3N0cigiXG5UaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0Llxu Iik7CisgICAgICAgICAgICB3cml0ZWxuIShib2R5LCAiXG4tLXtmaWxlX2JvdW5kYXJ5fSIpPzsK KyAgICAgICAgICAgIHdyaXRlbG4hKAorICAgICAgICAgICAgICAgIGJvZHksCisgICAgICAgICAg ICAgICAgIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT1cInto dG1sX2JvdW5kYXJ5fVwiIgorICAgICAgICAgICAgKT87CisgICAgICAgICAgICBib2R5LnB1c2hf c3RyKCJNSU1FLVZlcnNpb246IDEuMFxuIik7CisgICAgICAgICAgICB3cml0ZWxuIShib2R5LCAi XG4tLXtodG1sX2JvdW5kYXJ5fSIpPzsKKyAgICAgICAgfSBlbHNlIGlmIHNlbGYuYm9keV9odG1s LmlzX3NvbWUoKSB7CisgICAgICAgICAgICBib2R5LnB1c2hfc3RyKCJcblRoaXMgaXMgYSBtdWx0 aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuXG4iKTsKKyAgICAgICAgICAgIHdyaXRlbG4h KGJvZHksICJcbi0te2h0bWxfYm91bmRhcnl9Iik/OworICAgICAgICB9IGVsc2UgaWYgc2VsZi5i b2R5X2h0bWwuaXNfbm9uZSgpICYmICFzZWxmLmF0dGFjaG1lbnRzLmlzX2VtcHR5KCkgeworICAg ICAgICAgICAgYm9keS5wdXNoX3N0cigiXG5UaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGlu IE1JTUUgZm9ybWF0LlxuIik7CisgICAgICAgICAgICB3cml0ZWxuIShib2R5LCAiXG4tLXtmaWxl X2JvdW5kYXJ5fSIpPzsKKyAgICAgICAgfQorCisgICAgICAgIGJvZHkucHVzaF9zdHIoIkNvbnRl bnQtVHlwZTogdGV4dC9wbGFpbjtcbiIpOworICAgICAgICBib2R5LnB1c2hfc3RyKCJcdGNoYXJz ZXQ9XCJVVEYtOFwiXG4iKTsKKyAgICAgICAgYm9keS5wdXNoX3N0cigiQ29udGVudC1UcmFuc2Zl ci1FbmNvZGluZzogOGJpdFxuXG4iKTsKKyAgICAgICAgYm9keS5wdXNoX3N0cigmc2VsZi5ib2R5 X3R4dCk7CisKKyAgICAgICAgaWYgbGV0IFNvbWUoaHRtbCkgPSAmc2VsZi5ib2R5X2h0bWwgewor ICAgICAgICAgICAgd3JpdGVsbiEoYm9keSwgIlxuLS17aHRtbF9ib3VuZGFyeX0iKT87CisgICAg ICAgICAgICBib2R5LnB1c2hfc3RyKCJDb250ZW50LVR5cGU6IHRleHQvaHRtbDtcbiIpOworICAg ICAgICAgICAgYm9keS5wdXNoX3N0cigiXHRjaGFyc2V0PVwiVVRGLThcIlxuIik7CisgICAgICAg ICAgICBib2R5LnB1c2hfc3RyKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG5cbiIp OworICAgICAgICAgICAgYm9keS5wdXNoX3N0cihodG1sKTsKKyAgICAgICAgICAgIHdyaXRlIShi b2R5LCAiXG4tLXtodG1sX2JvdW5kYXJ5fS0tIik/OworICAgICAgICB9CisKKyAgICAgICAgT2so Ym9keSkKKyAgICB9Cit9CisKKyNbY2ZnKHRlc3QpXQorbW9kIHRlc3QgeworICAgIHVzZSBzdXBl cjo6KjsKKworICAgICNbdGVzdF0KKyAgICBmbiBlbWFpbF93aXRob3V0X3JlY2lwaWVudHNfZmFp bHMoKSB7CisgICAgICAgIGxldCByZXN1bHQgPSBNYWlsOjpuZXcoIlNlbmRlciIsICJtYWlsQGV4 YW1wbGUuY29tIiwgImhpIiwgImJvZHkiKS5zZW5kKCk7CisgICAgICAgIGFzc2VydCEocmVzdWx0 LmlzX2VycigpKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gc2ltcGxlX2FzY2lpX3Rl eHRfbWFpbCgpIHsKKyAgICAgICAgbGV0IG1haWwgPSBNYWlsOjpuZXcoCisgICAgICAgICAgICAi U2VuZGVyIE5hbWUiLAorICAgICAgICAgICAgIm1haWxmcm9tQGV4YW1wbGUuY29tIiwKKyAgICAg ICAgICAgICJTdWJqZWN0IExpbmUiLAorICAgICAgICAgICAgIlRoaXMgaXMganVzdCBhc2NpaSB0 ZXh0LlxuTm90aGluZyB0b28gc3BlY2lhbC4iLAorICAgICAgICApCisgICAgICAgIC53aXRoX3Jl Y2lwaWVudF9hbmRfbmFtZSgiUmVjZWl2ZXIgTmFtZSIsICJyZWNlaXZlckBleGFtcGxlLmNvbSIp OworCisgICAgICAgIGxldCBib2R5ID0gbWFpbC5mb3JtYXRfbWFpbCgwKS5leHBlY3QoImNvdWxk IG5vdCBmb3JtYXQgbWFpbCIpOworCisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICBi b2R5LAorICAgICAgICAgICAgciMiU3ViamVjdDogU3ViamVjdCBMaW5lCitGcm9tOiBTZW5kZXIg TmFtZSA8bWFpbGZyb21AZXhhbXBsZS5jb20+CitUbzogUmVjZWl2ZXIgTmFtZSA8cmVjZWl2ZXJA ZXhhbXBsZS5jb20+CitEYXRlOiBUaHUsIDAxIEphbiAxOTcwIDAxOjAwOjAwICswMTAwCitBdXRv LVN1Ym1pdHRlZDogYXV0by1nZW5lcmF0ZWQ7CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47CisJ Y2hhcnNldD0iVVRGLTgiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1RoaXMg aXMganVzdCBhc2NpaSB0ZXh0LgorTm90aGluZyB0b28gc3BlY2lhbC4iIworICAgICAgICApCisg ICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIG11bHRpcGxlX3JlY2VpdmVyX21hc2tlZCgpIHsK KyAgICAgICAgbGV0IG1haWwgPSBNYWlsOjpuZXcoCisgICAgICAgICAgICAiU2VuZGVyIE5hbWUi LAorICAgICAgICAgICAgIm1haWxmcm9tQGV4YW1wbGUuY29tIiwKKyAgICAgICAgICAgICJTdWJq ZWN0IExpbmUiLAorICAgICAgICAgICAgIlRoaXMgaXMganVzdCBhc2NpaSB0ZXh0LlxuTm90aGlu ZyB0b28gc3BlY2lhbC4iLAorICAgICAgICApCisgICAgICAgIC53aXRoX3JlY2lwaWVudF9hbmRf bmFtZSgiUmVjZWl2ZXIgTmFtZSIsICJyZWNlaXZlckBleGFtcGxlLmNvbSIpCisgICAgICAgIC53 aXRoX3JlY2lwaWVudCgidHdvQGV4YW1wbGUuY29tIikKKyAgICAgICAgLndpdGhfcmVjaXBpZW50 X2FuZF9uYW1lKCJtw6R4IG3DvHN0ZXJtw6RubiIsICJtbUBleGFtcGxlLmNvbSIpOworCisgICAg ICAgIGxldCBib2R5ID0gbWFpbC5mb3JtYXRfbWFpbCgwKS5leHBlY3QoImNvdWxkIG5vdCBmb3Jt YXQgbWFpbCIpOworCisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICBib2R5LAorICAg ICAgICAgICAgciMiU3ViamVjdDogU3ViamVjdCBMaW5lCitGcm9tOiBTZW5kZXIgTmFtZSA8bWFp bGZyb21AZXhhbXBsZS5jb20+CitUbzogVW5kaXNjbG9zZWQgPG5vcmVwbHk+CitEYXRlOiBUaHUs IDAxIEphbiAxOTcwIDAxOjAwOjAwICswMTAwCitBdXRvLVN1Ym1pdHRlZDogYXV0by1nZW5lcmF0 ZWQ7CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47CisJY2hhcnNldD0iVVRGLTgiCitDb250ZW50 LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1RoaXMgaXMganVzdCBhc2NpaSB0ZXh0LgorTm90 aGluZyB0b28gc3BlY2lhbC4iIworICAgICAgICApCisgICAgfQorCisgICAgI1t0ZXN0XQorICAg IGZuIG11bHRpcGxlX3JlY2VpdmVyX3VubWFza2VkKCkgeworICAgICAgICBsZXQgbWFpbCA9IE1h aWw6Om5ldygKKyAgICAgICAgICAgICJTZW5kZXIgTmFtZSIsCisgICAgICAgICAgICAibWFpbGZy b21AZXhhbXBsZS5jb20iLAorICAgICAgICAgICAgIlN1YmplY3QgTGluZSIsCisgICAgICAgICAg ICAiVGhpcyBpcyBqdXN0IGFzY2lpIHRleHQuXG5Ob3RoaW5nIHRvbyBzcGVjaWFsLiIsCisgICAg ICAgICkKKyAgICAgICAgLndpdGhfcmVjaXBpZW50X2FuZF9uYW1lKCJSZWNlaXZlciBOYW1lIiwg InJlY2VpdmVyQGV4YW1wbGUuY29tIikKKyAgICAgICAgLndpdGhfcmVjaXBpZW50KCJ0d29AZXhh bXBsZS5jb20iKQorICAgICAgICAud2l0aF9yZWNpcGllbnRfYW5kX25hbWUoIm3DpHggbcO8c3Rl cm3DpG5uIiwgIm1tQGV4YW1wbGUuY29tIikKKyAgICAgICAgLndpdGhfdW5tYXNrZWRfcmVjaXBp ZW50cygpOworCisgICAgICAgIGxldCBib2R5ID0gbWFpbC5mb3JtYXRfbWFpbCgwKS5leHBlY3Qo ImNvdWxkIG5vdCBmb3JtYXQgbWFpbCIpOworCisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAg ICAgICBib2R5LAorICAgICAgICAgICAgciMiTUlNRS1WZXJzaW9uOiAxLjAKK1N1YmplY3Q6IFN1 YmplY3QgTGluZQorRnJvbTogU2VuZGVyIE5hbWUgPG1haWxmcm9tQGV4YW1wbGUuY29tPgorVG86 IFJlY2VpdmVyIE5hbWUgPHJlY2VpdmVyQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tLCA9 P3V0Zi04P0I/YmNPa2VDQnR3N3h6ZEdWeWJjT2tibTQ9Pz0gPG1tQGV4YW1wbGUuY29tPgorRGF0 ZTogVGh1LCAwMSBKYW4gMTk3MCAwMTowMDowMCArMDEwMAorQXV0by1TdWJtaXR0ZWQ6IGF1dG8t Z2VuZXJhdGVkOworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOworCWNoYXJzZXQ9IlVURi04Igor Q29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGlzIGlzIGp1c3QgYXNjaWkgdGV4 dC4KK05vdGhpbmcgdG9vIHNwZWNpYWwuIiMKKyAgICAgICAgKQorICAgIH0KKworICAgICNbdGVz dF0KKyAgICBmbiBzaW1wbGVfdXRmOF90ZXh0X21haWwoKSB7CisgICAgICAgIGxldCBtYWlsID0g TWFpbDo6bmV3KAorICAgICAgICAgICAgIlVURi04IFNlbmRlciBOYW1lIPCfk6ciLAorICAgICAg ICAgICAgImRpZmZlcmVudGZyb21AZXhhbXBsZS5jb20iLAorICAgICAgICAgICAgIlN1YmplY3Qg TGluZSDwn6eRIiwKKyAgICAgICAgICAgICJUaGlzIHV0Zi04IGVtYWlsIHNob3VsZCBoYW5kbGUg ZW1vamlzXG7wn6eR8J+Tp1xuYW5kIHdlaXJkIGdlcm1hbiBjaGFyYWN0ZXJzOiDDtsOkw7zDn1xu YW5kIG1vcmUuIiwKKyAgICAgICAgKQorICAgICAgICAud2l0aF9yZWNpcGllbnRfYW5kX25hbWUo IlJlY2VpdmVyIE5hbWXwn5OpIiwgInJlY2VpdmVyQGV4YW1wbGUuY29tIik7CisKKyAgICAgICAg bGV0IGJvZHkgPSBtYWlsLmZvcm1hdF9tYWlsKDE3MzI4MDYyNTEpLmV4cGVjdCgiY291bGQgbm90 IGZvcm1hdCBtYWlsIik7CisKKyAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAgICAgIGJvZHks CisgICAgICAgICAgICByIyJNSU1FLVZlcnNpb246IDEuMAorU3ViamVjdDogPT91dGYtOD9CP1Uz VmlhbVZqZENCTWFXNWxJUENmcDVFPT89CitGcm9tOiA9P3V0Zi04P0I/VlZSR0xUZ2dVMlZ1WkdW eUlFNWhiV1VnOEorVHB3PT0/PSA8ZGlmZmVyZW50ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiA9P3V0 Zi04P0I/VW1WalpXbDJaWElnVG1GdFpmQ2ZrNms9Pz0gPHJlY2VpdmVyQGV4YW1wbGUuY29tPgor RGF0ZTogVGh1LCAyOCBOb3YgMjAyNCAxNjowNDoxMSArMDEwMAorQXV0by1TdWJtaXR0ZWQ6IGF1 dG8tZ2VuZXJhdGVkOworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOworCWNoYXJzZXQ9IlVURi04 IgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGlzIHV0Zi04IGVtYWlsIHNo b3VsZCBoYW5kbGUgZW1vamlzCivwn6eR8J+TpworYW5kIHdlaXJkIGdlcm1hbiBjaGFyYWN0ZXJz OiDDtsOkw7zDnworYW5kIG1vcmUuIiMKKyAgICAgICAgKQorICAgIH0KKworICAgICNbdGVzdF0K KyAgICBmbiBtdWx0aXBhcnRfaHRtbF9hbHRlcm5hdGl2ZSgpIHsKKyAgICAgICAgbGV0IG1haWwg PSBNYWlsOjpuZXcoCisgICAgICAgICAgICAiU2VuZGVyIE5hbWUiLAorICAgICAgICAgICAgImZy b21AZXhhbXBsZS5jb20iLAorICAgICAgICAgICAgIlN1YmplY3QgTGluZSIsCisgICAgICAgICAg ICAiTG9yZW0gSXBzdW0gRG9sb3IgU2l0XG5BbWV0IiwKKyAgICAgICAgKQorICAgICAgICAud2l0 aF9yZWNpcGllbnQoInJlY2VpdmVyQGV4YW1wbGUuY29tIikKKyAgICAgICAgLndpdGhfaHRtbF9h bHQoIjxodG1sIGxhbmc9XCJkZS1hdFwiPjxoZWFkPjwvaGVhZD48Ym9keT5cblx0PHByZT5cblx0 XHRMb3JlbSBJcHN1bSBEb2xvciBTaXQgQW1ldFxuXHQ8L3ByZT5cbjwvYm9keT48L2h0bWw+Iik7 CisgICAgICAgIGxldCBib2R5ID0gbWFpbC5mb3JtYXRfbWFpbCgxNzMyODA2MjUxKS5leHBlY3Qo ImNvdWxkIG5vdCBmb3JtYXQgbWFpbCIpOworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAg ICAgYm9keSwKKyAgICAgICAgICAgIHIjIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0 aXZlOworCWJvdW5kYXJ5PSItLS0tXz1fTmV4dFBhcnRfMDAyXzE3MzI4MDYyNTEiCitNSU1FLVZl cnNpb246IDEuMAorU3ViamVjdDogU3ViamVjdCBMaW5lCitGcm9tOiBTZW5kZXIgTmFtZSA8ZnJv bUBleGFtcGxlLmNvbT4KK1RvOiByZWNlaXZlckBleGFtcGxlLmNvbQorRGF0ZTogVGh1LCAyOCBO b3YgMjAyNCAxNjowNDoxMSArMDEwMAorQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkOwor CitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorCistLS0tLS1f PV9OZXh0UGFydF8wMDJfMTczMjgwNjI1MQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOworCWNo YXJzZXQ9IlVURi04IgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitMb3JlbSBJ cHN1bSBEb2xvciBTaXQKK0FtZXQKKy0tLS0tLV89X05leHRQYXJ0XzAwMl8xNzMyODA2MjUxCitD b250ZW50LVR5cGU6IHRleHQvaHRtbDsKKwljaGFyc2V0PSJVVEYtOCIKK0NvbnRlbnQtVHJhbnNm ZXItRW5jb2Rpbmc6IDhiaXQKKworPGh0bWwgbGFuZz0iZGUtYXQiPjxoZWFkPjwvaGVhZD48Ym9k eT4KKwk8cHJlPgorCQlMb3JlbSBJcHN1bSBEb2xvciBTaXQgQW1ldAorCTwvcHJlPgorPC9ib2R5 PjwvaHRtbD4KKy0tLS0tLV89X05leHRQYXJ0XzAwMl8xNzMyODA2MjUxLS0iIworICAgICAgICAp CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIG11bHRpcGFydF9wbGFpbl90ZXh0X2F0dGFj aG1lbnRzX21peGVkKCkgeworICAgICAgICBsZXQgYmluOiBbdTg7IDYyXSA9IFsKKyAgICAgICAg ICAgIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUs IDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsCisgICAgICAgICAgICAweGRlLCAweGFkLCAw eGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVm LCAweGRlLCAweGFkLAorICAgICAgICAgICAgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwg MHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwKKyAg ICAgICAgICAgIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYs IDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsCisgICAgICAgICAgICAweGJlLCAw eGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAorICAgICAgICBdOworCisgICAgICAgIGxldCBt YWlsID0gTWFpbDo6bmV3KAorICAgICAgICAgICAgIlNlbmRlciBOYW1lIiwKKyAgICAgICAgICAg ICJmcm9tQGV4YW1wbGUuY29tIiwKKyAgICAgICAgICAgICJTdWJqZWN0IExpbmUiLAorICAgICAg ICAgICAgIkxvcmVtIElwc3VtIERvbG9yIFNpdFxuQW1ldCIsCisgICAgICAgICkKKyAgICAgICAg LndpdGhfcmVjaXBpZW50X2FuZF9uYW1lKCJSZWNlaXZlciBOYW1lIiwgInJlY2VpdmVyQGV4YW1w bGUuY29tIikKKyAgICAgICAgLndpdGhfYXR0YWNobWVudCgiZGVhZGJlZWYuYmluIiwgImFwcGxp Y2F0aW9uL29jdGV0LXN0cmVhbSIsICZiaW4pOworCisgICAgICAgIGxldCBib2R5ID0gbWFpbC5m b3JtYXRfbWFpbCgxNzMyODA2MjUxKS5leHBlY3QoImNvdWxkIG5vdCBmb3JtYXQgbWFpbCIpOwor ICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgYm9keSwKKyAgICAgICAgICAgIHIjIkNv bnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOworCWJvdW5kYXJ5PSItLS0tXz1fTmV4dFBhcnRf MDAxXzE3MzI4MDYyNTEiCitNSU1FLVZlcnNpb246IDEuMAorU3ViamVjdDogU3ViamVjdCBMaW5l CitGcm9tOiBTZW5kZXIgTmFtZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiBSZWNlaXZlciBOYW1l IDxyZWNlaXZlckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSwgMjggTm92IDIwMjQgMTY6MDQ6MTEg KzAxMDAKK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZDsKKworVGhpcyBpcyBhIG11bHRp LXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKworLS0tLS0tXz1fTmV4dFBhcnRfMDAxXzE3 MzI4MDYyNTEKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsKKwljaGFyc2V0PSJVVEYtOCIKK0Nv bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworTG9yZW0gSXBzdW0gRG9sb3IgU2l0CitB bWV0CistLS0tLS1fPV9OZXh0UGFydF8wMDFfMTczMjgwNjI1MQorQ29udGVudC1UeXBlOiBhcHBs aWNhdGlvbi9vY3RldC1zdHJlYW07IG5hbWU9ImRlYWRiZWVmLmJpbiIKK0NvbnRlbnQtRGlzcG9z aXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJkZWFkYmVlZi5iaW4iOyBmaWxlbmFtZSo9VVRG LTgnJ2RlYWRiZWVmLmJpbgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKzNx Mis3OTZ0dnUvZXJiN3YzcTNlcmI3djNxMis3OTZ0dnUvZXJkNnR2dS9lcmI3djNxMis3OTZ0M3Ey Kzc5NnR2dS9lcmI3dgorM3EyKzc5NnR2dTg9CistLS0tLS1fPV9OZXh0UGFydF8wMDFfMTczMjgw NjI1MS0tIiMKKyAgICAgICAgKQorICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiBtdWx0aXBh cnRfcGxhaW5fdGV4dF9odG1sX2FsdGVybmF0aXZlX2F0dGFjaG1lbnRzKCkgeworICAgICAgICBs ZXQgYmluOiBbdTg7IDYyXSA9IFsKKyAgICAgICAgICAgIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYs IDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4 YWQsCisgICAgICAgICAgICAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJl LCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLAorICAgICAgICAgICAg MHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhh ZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwKKyAgICAgICAgICAgIDB4ZGUsIDB4YWQsIDB4YmUs IDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4 ZGUsIDB4YWQsCisgICAgICAgICAgICAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVm LAorICAgICAgICBdOworCisgICAgICAgIGxldCBtYWlsID0gTWFpbDo6bmV3KAorICAgICAgICAg ICAgIlNlbmRlciBOYW1lIiwKKyAgICAgICAgICAgICJmcm9tQGV4YW1wbGUuY29tIiwKKyAgICAg ICAgICAgICJTdWJqZWN0IExpbmUiLAorICAgICAgICAgICAgIkxvcmVtIElwc3VtIERvbG9yIFNp dFxuQW1ldCIsCisgICAgICAgICkKKyAgICAgICAgLndpdGhfcmVjaXBpZW50X2FuZF9uYW1lKCJS ZWNlaXZlciBOYW1lIiwgInJlY2VpdmVyQGV4YW1wbGUuY29tIikKKyAgICAgICAgLndpdGhfYXR0 YWNobWVudCgiZGVhZGJlZWYuYmluIiwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsICZiaW4p CisgICAgICAgIC53aXRoX2F0dGFjaG1lbnQoIvCfkITwn5KALmJpbiIsICJpbWFnZS9ibXAiLCAm YmluKQorICAgICAgICAud2l0aF9odG1sX2FsdCgiPGh0bWwgbGFuZz1cImRlLWF0XCI+PGhlYWQ+ PC9oZWFkPjxib2R5PlxuXHQ8cHJlPlxuXHRcdExvcmVtIElwc3VtIERvbG9yIFNpdCBBbWV0XG5c dDwvcHJlPlxuPC9ib2R5PjwvaHRtbD4iKTsKKworICAgICAgICBsZXQgYm9keSA9IG1haWwuZm9y bWF0X21haWwoMTczMjgwNjI1MSkuZXhwZWN0KCJjb3VsZCBub3QgZm9ybWF0IG1haWwiKTsKKwor ICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgYm9keSwKKyAgICAgICAgICAgIHIjIkNv bnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOworCWJvdW5kYXJ5PSItLS0tXz1fTmV4dFBhcnRf MDAxXzE3MzI4MDYyNTEiCitNSU1FLVZlcnNpb246IDEuMAorU3ViamVjdDogU3ViamVjdCBMaW5l CitGcm9tOiBTZW5kZXIgTmFtZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiBSZWNlaXZlciBOYW1l IDxyZWNlaXZlckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSwgMjggTm92IDIwMjQgMTY6MDQ6MTEg KzAxMDAKK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZDsKKworVGhpcyBpcyBhIG11bHRp LXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKworLS0tLS0tXz1fTmV4dFBhcnRfMDAxXzE3 MzI4MDYyNTEKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0i LS0tLV89X05leHRQYXJ0XzAwMl8xNzMyODA2MjUxIgorTUlNRS1WZXJzaW9uOiAxLjAKKworLS0t LS0tXz1fTmV4dFBhcnRfMDAyXzE3MzI4MDYyNTEKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsK KwljaGFyc2V0PSJVVEYtOCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworTG9y ZW0gSXBzdW0gRG9sb3IgU2l0CitBbWV0CistLS0tLS1fPV9OZXh0UGFydF8wMDJfMTczMjgwNjI1 MQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7CisJY2hhcnNldD0iVVRGLTgiCitDb250ZW50LVRy YW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKzxodG1sIGxhbmc9ImRlLWF0Ij48aGVhZD48L2hlYWQ+ PGJvZHk+CisJPHByZT4KKwkJTG9yZW0gSXBzdW0gRG9sb3IgU2l0IEFtZXQKKwk8L3ByZT4KKzwv Ym9keT48L2h0bWw+CistLS0tLS1fPV9OZXh0UGFydF8wMDJfMTczMjgwNjI1MS0tCistLS0tLS1f PV9OZXh0UGFydF8wMDFfMTczMjgwNjI1MQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3Rl dC1zdHJlYW07IG5hbWU9ImRlYWRiZWVmLmJpbiIKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFj aG1lbnQ7IGZpbGVuYW1lPSJkZWFkYmVlZi5iaW4iOyBmaWxlbmFtZSo9VVRGLTgnJ2RlYWRiZWVm LmJpbgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKzNxMis3OTZ0dnUvZXJi N3YzcTNlcmI3djNxMis3OTZ0dnUvZXJkNnR2dS9lcmI3djNxMis3OTZ0M3EyKzc5NnR2dS9lcmI3 dgorM3EyKzc5NnR2dTg9CistLS0tLS1fPV9OZXh0UGFydF8wMDFfMTczMjgwNjI1MQorQ29udGVu dC1UeXBlOiBpbWFnZS9ibXA7IG5hbWU9IvCfkITwn5KALmJpbiIKK0NvbnRlbnQtRGlzcG9zaXRp b246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSLwn5CE8J+SgC5iaW4iOyBmaWxlbmFtZSo9VVRGLTgn JyVGMCU5RiU5MCU4NCVGMCU5RiU5MiU4MC5iaW4KK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6 IGJhc2U2NAorCiszcTIrNzk2dHZ1L2VyYjd2M3EzZXJiN3YzcTIrNzk2dHZ1L2VyZDZ0dnUvZXJi N3YzcTIrNzk2dDNxMis3OTZ0dnUvZXJiN3YKKzNxMis3OTZ0dnU4PQorLS0tLS0tXz1fTmV4dFBh cnRfMDAxXzE3MzI4MDYyNTEtLSIjCisgICAgICAgICkKKyAgICB9CisKKyAgICAjW3Rlc3RdCisg ICAgZm4gdGVzdF9mb3JtYXRfbWFpbF9tdWx0aXBhcnQoKSB7CisgICAgICAgIGxldCBtYWlsID0g TWFpbDo6bmV3KAorICAgICAgICAgICAgIkZyZWQgT29iYXIiLAorICAgICAgICAgICAgImZvb2Jh ckBleGFtcGxlLmNvbSIsCisgICAgICAgICAgICAiVGhpcyBpcyB0aGUgc3ViamVjdCIsCisgICAg ICAgICAgICAiVGhpcyBpcyB0aGUgcGxhaW4gYm9keSIsCisgICAgICAgICkKKyAgICAgICAgLndp dGhfcmVjaXBpZW50X2FuZF9uYW1lKCJUb255IEVzdCIsICJ0ZXN0QGV4YW1wbGUuY29tIikKKyAg ICAgICAgLndpdGhfaHRtbF9hbHQoIjxib2R5PlRoaXMgaXMgdGhlIEhUTUwgYm9keTwvYm9keT4i KTsKKworICAgICAgICBsZXQgYm9keSA9IG1haWwuZm9ybWF0X21haWwoMTcxODk3Nzg1MCkuZXhw ZWN0KCJjb3VsZCBub3QgZm9ybWF0IG1haWwiKTsKKworICAgICAgICBhc3NlcnRfZXEhKAorICAg ICAgICAgICAgYm9keSwKKyAgICAgICAgICAgIHIjIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2Fs dGVybmF0aXZlOworCWJvdW5kYXJ5PSItLS0tXz1fTmV4dFBhcnRfMDAyXzE3MTg5Nzc4NTAiCitN SU1FLVZlcnNpb246IDEuMAorU3ViamVjdDogVGhpcyBpcyB0aGUgc3ViamVjdAorRnJvbTogRnJl ZCBPb2JhciA8Zm9vYmFyQGV4YW1wbGUuY29tPgorVG86IFRvbnkgRXN0IDx0ZXN0QGV4YW1wbGUu Y29tPgorRGF0ZTogRnJpLCAyMSBKdW4gMjAyNCAxNTo1MDo1MCArMDIwMAorQXV0by1TdWJtaXR0 ZWQ6IGF1dG8tZ2VuZXJhdGVkOworCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1J TUUgZm9ybWF0LgorCistLS0tLS1fPV9OZXh0UGFydF8wMDJfMTcxODk3Nzg1MAorQ29udGVudC1U eXBlOiB0ZXh0L3BsYWluOworCWNoYXJzZXQ9IlVURi04IgorQ29udGVudC1UcmFuc2Zlci1FbmNv ZGluZzogOGJpdAorCitUaGlzIGlzIHRoZSBwbGFpbiBib2R5CistLS0tLS1fPV9OZXh0UGFydF8w MDJfMTcxODk3Nzg1MAorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7CisJY2hhcnNldD0iVVRGLTgi CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKzxib2R5PlRoaXMgaXMgdGhlIEhU TUwgYm9keTwvYm9keT4KKy0tLS0tLV89X05leHRQYXJ0XzAwMl8xNzE4OTc3ODUwLS0iIworICAg ICAgICApOworICAgIH0KK30KLS0KMi4zOS41CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCnBicy1kZXZlbCBtYWlsaW5nIGxpc3QKcGJzLWRldmVsQGxp c3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFu L2xpc3RpbmZvL3Bicy1kZXZlbAo=