From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 8638A1FF183 for ; Wed, 10 Sep 2025 10:42:45 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id C960B1BB69; Wed, 10 Sep 2025 10:42:49 +0200 (CEST) From: Shannon Sterz To: pdm-devel@lists.proxmox.com Date: Wed, 10 Sep 2025 10:42:15 +0200 Message-ID: <20250910084216.36223-3-s.sterz@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20250910084216.36223-2-s.sterz@proxmox.com> References: <20250910084216.36223-2-s.sterz@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1757493736893 X-SPAM-LEVEL: Spam detection results: 1 AWL -2.834 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 KAM_SOMETLD_ARE_BAD_TLD 5 .bar, .beauty, .buzz, .cam, .casa, .cfd, .club, .date, .guru, .link, .live, .monster, .online, .press, .pw, .quest, .rest, .sbs, .shop, .stream, .top, .trade, .wiki, .work, .xyz TLD abuse PDS_OTHER_BAD_TLD 0.75 Untrustworthy TLDs SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pdm-devel] [PATCH datacenter-manager alpha (f6ca650d) v3 1/3] server: add pdmAtoB upgrade checker script X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" VGVzdGVkLWJ5OiBNaWNoYWVsIEvDtnBwbCA8bS5rb2VwcGxAcHJveG1veC5jb20+ClNpZ25lZC1v ZmYtYnk6IFNoYW5ub24gU3RlcnogPHMuc3RlcnpAcHJveG1veC5jb20+Ci0tLQogQ2FyZ28udG9t bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogTWFrZWZpbGUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogY2xpL3BkbUF0b0IvQ2FyZ28udG9t bCAgICAgICAgICAgICAgICAgICAgfCAgMTUgKwogY2xpL3BkbUF0b0Ivc3JjL21haW4ucnMgICAg ICAgICAgICAgICAgICAgfCAgMTkgKwogZGViaWFuL3Byb3htb3gtZGF0YWNlbnRlci1tYW5hZ2Vy Lmluc3RhbGwgfCAgIDMgKwogbGliL3Byb3htb3gtdXBncmFkZS1jaGVja3MvQ2FyZ28udG9tbCAg ICAgfCAgMTkgKwogbGliL3Byb3htb3gtdXBncmFkZS1jaGVja3Mvc3JjL2xpYi5ycyAgICAgfCA4 NTYgKysrKysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA5MTYgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNsaS9wZG1BdG9CL0NhcmdvLnRvbWwKIGNyZWF0ZSBt b2RlIDEwMDY0NCBjbGkvcGRtQXRvQi9zcmMvbWFpbi5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp Yi9wcm94bW94LXVwZ3JhZGUtY2hlY2tzL0NhcmdvLnRvbWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBs aWIvcHJveG1veC11cGdyYWRlLWNoZWNrcy9zcmMvbGliLnJzCgpkaWZmIC0tZ2l0IGEvQ2FyZ28u dG9tbCBiL0NhcmdvLnRvbWwKaW5kZXggMWU2ZjVhMy4uZDZjMTI0OSAxMDA2NDQKLS0tIGEvQ2Fy Z28udG9tbAorKysgYi9DYXJnby50b21sCkBAIC0yMCwxMCArMjAsMTIgQEAgbWVtYmVycyA9IFsK ICAgICAibGliL3BkbS1jbGllbnQiLAogICAgICJsaWIvcGRtLWNvbmZpZyIsCiAgICAgImxpYi9w ZG0tdWktc2hhcmVkIiwKKyAgICAibGliL3Byb3htb3gtdXBncmFkZS1jaGVja3MiLAoKICAgICAi Y2xpL2NsaWVudCIsCiAgICAgImNsaS9hZG1pbiIsCiAgICAgImNsaS9wcm94bW94LWZpZG8yIiwK KyAgICAiY2xpL3BkbUF0b0IiLAogXQoKIFt3b3Jrc3BhY2UuZGVwZW5kZW5jaWVzXQpAQCAtODcs NiArODksNyBAQCBwZG0tY29uZmlnID0geyBwYXRoID0gImxpYi9wZG0tY29uZmlnIiB9CiBwZG0t Y2xpZW50ID0geyB2ZXJzaW9uID0gIjAuMSIsIHBhdGggPSAibGliL3BkbS1jbGllbnQiIH0KIHBk bS11aS1zaGFyZWQgPSB7IHZlcnNpb24gPSAiMC4xIiwgcGF0aCA9ICJsaWIvcGRtLXVpLXNoYXJl ZCIgfQogcHJveG1veC1maWRvMiA9IHsgcGF0aCA9ICJjbGkvcHJveG1veC1maWRvMiIgfQorcHJv eG1veC11cGdyYWRlLWNoZWNrcyA9IHsgcGF0aCA9ICJsaWIvcHJveG1veC11cGdyYWRlLWNoZWNr cyIgfQoKICMgcmVndWxhciBjcmF0ZXMKIGFueWhvdyA9ICIxLjAiCmRpZmYgLS1naXQgYS9NYWtl ZmlsZSBiL01ha2VmaWxlCmluZGV4IGQxOGZiMGQuLmZiMmU5YmQgMTAwNjQ0Ci0tLSBhL01ha2Vm aWxlCisrKyBiL01ha2VmaWxlCkBAIC00Miw2ICs0Miw3IEBAIFVTUl9CSU4gOj0gXAoKIFVTUl9T QklOIDo9IFwKIAlwcm94bW94LWRhdGFjZW50ZXItbWFuYWdlci1hZG1pbiBcCisJcGRtQXRvQiBc CgogU0VSVklDRV9CSU4gOj0gXAogCXByb3htb3gtZGF0YWNlbnRlci1hcGkgXApkaWZmIC0tZ2l0 IGEvY2xpL3BkbUF0b0IvQ2FyZ28udG9tbCBiL2NsaS9wZG1BdG9CL0NhcmdvLnRvbWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1ZDgzOQotLS0gL2Rldi9udWxsCisrKyBi L2NsaS9wZG1BdG9CL0NhcmdvLnRvbWwKQEAgLTAsMCArMSwxNSBAQAorW3BhY2thZ2VdCituYW1l ID0gInBkbUF0b0IiCitkZXNjcmlwdGlvbiA9ICJQcm94bW94IERhdGFjZW50ZXIgVXBncmFkZSBD aGVja3MiCitob21lcGFnZSA9ICJodHRwczovL3d3dy5wcm94bW94LmNvbSIKK3ZlcnNpb24ud29y a3NwYWNlID0gdHJ1ZQorYXV0aG9ycy53b3Jrc3BhY2UgPSB0cnVlCitlZGl0aW9uLndvcmtzcGFj ZSA9IHRydWUKK2xpY2Vuc2Uud29ya3NwYWNlID0gdHJ1ZQorcmVwb3NpdG9yeS53b3Jrc3BhY2Ug PSB0cnVlCitleGNsdWRlLndvcmtzcGFjZSA9IHRydWUKKworW2RlcGVuZGVuY2llc10KK2FueWhv dy53b3Jrc3BhY2UgPSB0cnVlCitwcm94bW94LXVwZ3JhZGUtY2hlY2tzLndvcmtzcGFjZSA9IHRy dWUKK3BkbS1idWlsZGNmZy53b3Jrc3BhY2UgPSB0cnVlCmRpZmYgLS1naXQgYS9jbGkvcGRtQXRv Qi9zcmMvbWFpbi5ycyBiL2NsaS9wZG1BdG9CL3NyYy9tYWluLnJzCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmZkYjY2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGkvcGRtQXRv Qi9zcmMvbWFpbi5ycwpAQCAtMCwwICsxLDE5IEBACit1c2UgcGRtX2J1aWxkY2ZnOjp7UFJPWE1P WF9QS0dfUkVMRUFTRSwgUFJPWE1PWF9QS0dfVkVSU0lPTn07Cit1c2UgcHJveG1veF91cGdyYWRl X2NoZWNrczo6VXBncmFkZUNoZWNrZXJCdWlsZGVyOworCitmbiBtYWluKCkgLT4gUmVzdWx0PCgp LCBhbnlob3c6OkVycm9yPiB7CisgICAgVXBncmFkZUNoZWNrZXJCdWlsZGVyOjpuZXcoCisgICAg ICAgICJib29rd29ybSIsCisgICAgICAgICJ0cml4aWUiLAorICAgICAgICAicHJveG1veC1kYXRh Y2VudGVyLW1hbmFnZXIiLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAxMSwKKyAg ICAgICAgJmZvcm1hdCEoIntQUk9YTU9YX1BLR19WRVJTSU9OfS57UFJPWE1PWF9QS0dfUkVMRUFT RX0iKSwKKyAgICApCisgICAgLndpdGhfYXB0X3N0YXRlX2ZpbGVfbG9jYXRpb24ocGRtX2J1aWxk Y2ZnOjpBUFRfUEtHX1NUQVRFX0ZOKQorICAgIC5hZGRfc2VydmljZV90b19jaGVja3MoInByb3ht b3gtZGF0YWNlbnRlci1hcGkiKQorICAgIC5hZGRfc2VydmljZV90b19jaGVja3MoInByb3htb3gt ZGF0YWNlbnRlci1wcml2aWxlZ2VkLWFwaSIpCisgICAgLmJ1aWxkKCkKKyAgICAucnVuKCkKK30K ZGlmZiAtLWdpdCBhL2RlYmlhbi9wcm94bW94LWRhdGFjZW50ZXItbWFuYWdlci5pbnN0YWxsIGIv ZGViaWFuL3Byb3htb3gtZGF0YWNlbnRlci1tYW5hZ2VyLmluc3RhbGwKaW5kZXggNzFmOGRhOS4u YzEyYTE5NiAxMDA2NDQKLS0tIGEvZGViaWFuL3Byb3htb3gtZGF0YWNlbnRlci1tYW5hZ2VyLmlu c3RhbGwKKysrIGIvZGViaWFuL3Byb3htb3gtZGF0YWNlbnRlci1tYW5hZ2VyLmluc3RhbGwKQEAg LTEwLDkgKzEwLDEyIEBAIHVzci9saWJleGVjL3Byb3htb3gvcHJveG1veC1kYXRhY2VudGVyLW1h bmFnZXItYmFubmVyCiB1c3IvbGliZXhlYy9wcm94bW94L3Byb3htb3gtZGF0YWNlbnRlci1tYW5h Z2VyLWRhaWx5LXVwZGF0ZQogdXNyL2xpYmV4ZWMvcHJveG1veC9wcm94bW94LWRhdGFjZW50ZXIt cHJpdmlsZWdlZC1hcGkKIHVzci9zYmluL3Byb3htb3gtZGF0YWNlbnRlci1tYW5hZ2VyLWFkbWlu Cit1c3Ivc2Jpbi9wZG1BdG9CCiB1c3Ivc2hhcmUvYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25z L3Byb3htb3gtZGF0YWNlbnRlci1hcGkuYmMKIHVzci9zaGFyZS9iYXNoLWNvbXBsZXRpb24vY29t cGxldGlvbnMvcHJveG1veC1kYXRhY2VudGVyLW1hbmFnZXItYWRtaW4uYmMKIHVzci9zaGFyZS9i YXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMvcHJveG1veC1kYXRhY2VudGVyLXByaXZpbGVnZWQt YXBpLmJjCit1c3Ivc2hhcmUvYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL3BkbUF0b0IuYmMK IHVzci9zaGFyZS96c2gvdmVuZG9yLWNvbXBsZXRpb25zL19wcm94bW94LWRhdGFjZW50ZXItYXBp CiB1c3Ivc2hhcmUvenNoL3ZlbmRvci1jb21wbGV0aW9ucy9fcHJveG1veC1kYXRhY2VudGVyLW1h bmFnZXItYWRtaW4KIHVzci9zaGFyZS96c2gvdmVuZG9yLWNvbXBsZXRpb25zL19wcm94bW94LWRh dGFjZW50ZXItcHJpdmlsZWdlZC1hcGkKK3Vzci9zaGFyZS96c2gvdmVuZG9yLWNvbXBsZXRpb25z L19wZG1BdG9CCmRpZmYgLS1naXQgYS9saWIvcHJveG1veC11cGdyYWRlLWNoZWNrcy9DYXJnby50 b21sIGIvbGliL3Byb3htb3gtdXBncmFkZS1jaGVja3MvQ2FyZ28udG9tbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQ1ODJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3By b3htb3gtdXBncmFkZS1jaGVja3MvQ2FyZ28udG9tbApAQCAtMCwwICsxLDE5IEBACitbcGFja2Fn ZV0KK25hbWUgPSAicHJveG1veC11cGdyYWRlLWNoZWNrcyIKK2Rlc2NyaXB0aW9uID0gIkhlbHBl cnMgdG8gaW1wbGVtZW50IHVwZ3JhZGUgY2hlY2tzIGZvciBQcm94bW94IHByb2R1Y3RzLiIKK3Zl cnNpb24gPSAiMC4xLjAiCisKK2F1dGhvcnMud29ya3NwYWNlID0gdHJ1ZQorZWRpdGlvbi53b3Jr c3BhY2UgPSB0cnVlCitsaWNlbnNlLndvcmtzcGFjZSA9IHRydWUKK3JlcG9zaXRvcnkud29ya3Nw YWNlID0gdHJ1ZQorZXhjbHVkZS53b3Jrc3BhY2UgPSB0cnVlCisKK1tkZXBlbmRlbmNpZXNdCith bnlob3cud29ya3NwYWNlID0gdHJ1ZQorY29uc3RfZm9ybWF0LndvcmtzcGFjZSA9IHRydWUKK3Jl Z2V4LndvcmtzcGFjZSA9IHRydWUKK3Rlcm1jb2xvci53b3Jrc3BhY2UgPSB0cnVlCisKK3Byb3ht b3gtYXB0ID0geyB3b3Jrc3BhY2UgPSB0cnVlLCBmZWF0dXJlcyA9IFsgImNhY2hlIiBdIH0KK3By b3htb3gtYXB0LWFwaS10eXBlcy53b3Jrc3BhY2UgPSB0cnVlCmRpZmYgLS1naXQgYS9saWIvcHJv eG1veC11cGdyYWRlLWNoZWNrcy9zcmMvbGliLnJzIGIvbGliL3Byb3htb3gtdXBncmFkZS1jaGVj a3Mvc3JjL2xpYi5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc1NjZh Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3Byb3htb3gtdXBncmFkZS1jaGVja3Mvc3JjL2xpYi5y cwpAQCAtMCwwICsxLDg1NiBAQAordXNlIHN0ZDo6cGF0aDo6UGF0aDsKK3VzZSBzdGQ6Ontpbzo6 V3JpdGUsIHBhdGg6OlBhdGhCdWZ9OworCit1c2UgYW55aG93Ojp7Zm9ybWF0X2VyciwgRXJyb3J9 OwordXNlIGNvbnN0X2Zvcm1hdDo6Y29uY2F0Y3A7Cit1c2UgcmVnZXg6OlJlZ2V4OwordXNlIHRl cm1jb2xvcjo6e0NvbG9yLCBDb2xvckNob2ljZSwgQ29sb3JTcGVjLCBTdGFuZGFyZFN0cmVhbSwg V3JpdGVDb2xvcn07CisKK3VzZSBwcm94bW94X2FwdDo6cmVwb3NpdG9yaWVzOwordXNlIHByb3ht b3hfYXB0X2FwaV90eXBlczo6e0FQVFJlcG9zaXRvcnlGaWxlLCBBUFRSZXBvc2l0b3J5UGFja2Fn ZVR5cGV9OworCisvLy8gRWFzaWx5IGNyZWF0ZSBhbmQgY29uZmlndXJlIGFuIHVwZ3JhZGUgY2hl Y2tlciBmb3IgUHJveG1veCBwcm9kdWN0cy4KK3B1YiBzdHJ1Y3QgVXBncmFkZUNoZWNrZXJCdWls ZGVyIHsKKyAgICBvbGRfc3VpdGU6IFN0cmluZywKKyAgICBuZXdfc3VpdGU6IFN0cmluZywKKyAg ICBtZXRhX3BhY2thZ2VfbmFtZTogU3RyaW5nLAorICAgIG1pbmltdW1fbWFqb3JfdmVyc2lvbjog dTgsCisgICAgbWluaW11bV9taW5vcl92ZXJzaW9uOiB1OCwKKyAgICBtaW5pbXVtX3BrZ3JlbDog dTgsCisgICAgYXB0X3N0YXRlX2ZpbGU6IE9wdGlvbjxQYXRoQnVmPiwKKyAgICBhcGlfc2VydmVy X3BhY2thZ2U6IE9wdGlvbjxTdHJpbmc+LAorICAgIHJ1bm5pbmdfYXBpX3NlcnZlcl92ZXJzaW9u OiBTdHJpbmcsCisgICAgc2VydmljZXNfbGlzdDogVmVjPFN0cmluZz4sCit9CisKK2ltcGwgVXBn cmFkZUNoZWNrZXJCdWlsZGVyIHsKKyAgICAvLy8gQ3JlYXRlIGEgbmV3IFVwZ3JhZGVDaGVja2Vy QnVpbGRlcgorICAgIC8vLworICAgIC8vLyAqIGBvbGRfc3VpdGVgOiBUaGUgRGViaWFuIHN1aXRl IGJlZm9yZSB0aGUgdXBncmFkZS4KKyAgICAvLy8gKiBgbmV3X3N1aXRlYDogVGhlIERlYmlhbiBz dWl0ZSBhZnRlciB0aGUgdXBncmFkZS4KKyAgICAvLy8gKiBgbWV0YV9wYWNrYWdlX25hbWVgOiBU aGUgbmFtZSBvZiB0aGUgcHJvZHVjdCdzIG1ldGEgcGFja2FnZS4KKyAgICAvLy8gKiBgbWluaW11 bV9tYWpvcl92ZXJzaW9uYDogVGhlIG1pbmltdW0gbWFqb3IgdmVyc2lvbiBiZWZvcmUgdGhlIHVw Z3JhZGUuCisgICAgLy8vICogYG1pbmltdW1fbWlub3JfdmVyc2lvbmA6IFRoZSBtaW5pbXVtIG1p bm9yIHZlcnNpb24gYmVmb3JlIHRoZSB1cGdyYWRlLgorICAgIC8vLyAqIGBtaW5pbXVtX3BrZ3Jl bGA6IFRoZSBtaW5pbXVtIHBhY2thZ2UgcmVsZWFzZSBiZWZvcmUgdGhlIHVwZ3JhZGUuCisgICAg Ly8vICogYHJ1bm5pbmdfYXBpX3NlcnZlcl92ZXJzaW9uYDogVGhlIGN1cnJlbnRseSBydW5uaW5n IEFQSSBzZXJ2ZXIgdmVyc2lvbi4KKyAgICBwdWIgZm4gbmV3KAorICAgICAgICBvbGRfc3VpdGU6 ICZzdHIsCisgICAgICAgIG5ld19zdWl0ZTogJnN0ciwKKyAgICAgICAgbWV0YV9wYWNrYWdlX25h bWU6ICZzdHIsCisgICAgICAgIG1pbmltdW1fbWFqb3JfdmVyc2lvbjogdTgsCisgICAgICAgIG1p bmltdW1fbWlub3JfdmVyc2lvbjogdTgsCisgICAgICAgIG1pbmltdW1fcGtncmVsOiB1OCwKKyAg ICAgICAgcnVubmluZ19hcGlfc2VydmVyX3ZlcnNpb246ICZzdHIsCisgICAgKSAtPiBVcGdyYWRl Q2hlY2tlckJ1aWxkZXIgeworICAgICAgICBVcGdyYWRlQ2hlY2tlckJ1aWxkZXIgeworICAgICAg ICAgICAgb2xkX3N1aXRlOiBvbGRfc3VpdGUuaW50bygpLAorICAgICAgICAgICAgbmV3X3N1aXRl OiBuZXdfc3VpdGUuaW50bygpLAorICAgICAgICAgICAgbWV0YV9wYWNrYWdlX25hbWU6IG1ldGFf cGFja2FnZV9uYW1lLmludG8oKSwKKyAgICAgICAgICAgIG1pbmltdW1fbWFqb3JfdmVyc2lvbiwK KyAgICAgICAgICAgIG1pbmltdW1fbWlub3JfdmVyc2lvbiwKKyAgICAgICAgICAgIG1pbmltdW1f cGtncmVsLAorICAgICAgICAgICAgYXB0X3N0YXRlX2ZpbGU6IE5vbmUsCisgICAgICAgICAgICBh cGlfc2VydmVyX3BhY2thZ2U6IE5vbmUsCisgICAgICAgICAgICBydW5uaW5nX2FwaV9zZXJ2ZXJf dmVyc2lvbjogcnVubmluZ19hcGlfc2VydmVyX3ZlcnNpb24uaW50bygpLAorICAgICAgICAgICAg c2VydmljZXNfbGlzdDogVmVjOjpuZXcoKSwKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBT ZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBBUFQgc3RhdGUgZmlsZS4KKyAgICBwdWIgZm4gc2V0X2Fw dF9zdGF0ZV9maWxlX2xvY2F0aW9uPFA6IEFzUmVmPFBhdGg+PigmbXV0IHNlbGYsIHBhdGg6IFAp IHsKKyAgICAgICAgc2VsZi5hcHRfc3RhdGVfZmlsZSA9IFNvbWUocGF0aC5hc19yZWYoKS5pbnRv KCkpOworICAgIH0KKworICAgIC8vLyBCdWlsZGVyLXN0eWxlIG1ldGhvZCB0byBzZXQgdGhlIGxv Y2F0aW9uIG9mIHRoZSBBUFQgc3RhdGUgZmlsZS4KKyAgICBwdWIgZm4gd2l0aF9hcHRfc3RhdGVf ZmlsZV9sb2NhdGlvbjxQOiBBc1JlZjxQYXRoPj4obXV0IHNlbGYsIHBhdGg6IFApIC0+IFNlbGYg eworICAgICAgICBzZWxmLnNldF9hcHRfc3RhdGVfZmlsZV9sb2NhdGlvbihwYXRoKTsKKyAgICAg ICAgc2VsZgorICAgIH0KKworICAgIC8vLyBTZXQgdGhlIEFQSSBzZXJ2ZXIgcGFja2FnZSBuYW1l LgorICAgIHB1YiBmbiBzZXRfYXBpX3NlcnZlcl9wYWNrYWdlKCZtdXQgc2VsZiwgYXBpX3NlcnZl cl9wYWNrYWdlOiAmc3RyKSB7CisgICAgICAgIHNlbGYuYXB0X3N0YXRlX2ZpbGUgPSBTb21lKGFw aV9zZXJ2ZXJfcGFja2FnZS5pbnRvKCkpOworICAgIH0KKworICAgIC8vLyBCdWlsZGVyLXN0eWxl IG1ldGhvZCB0byBzZXQgdGhlIEFQSSBzZXJ2ZXIgcGFja2FnZSBuYW1lLgorICAgIHB1YiBmbiB3 aXRoX2FwaV9zZXJ2ZXJfcGFja2FnZShtdXQgc2VsZiwgYXBpX3NlcnZlcl9wYWNrYWdlOiAmc3Ry KSAtPiBTZWxmIHsKKyAgICAgICAgc2VsZi5zZXRfYXBpX3NlcnZlcl9wYWNrYWdlKGFwaV9zZXJ2 ZXJfcGFja2FnZSk7CisgICAgICAgIHNlbGYKKyAgICB9CisKKyAgICAvLy8gQWRkIGEgc2Vydmlj ZSB0byB0aGUgbGlzdCBvZiBzZXJ2aWNlcyB0aGF0IHdpbGwgYmUgY2hlY2tlZC4KKyAgICBwdWIg Zm4gYWRkX3NlcnZpY2VfdG9fY2hlY2tzKG11dCBzZWxmLCBzZXJ2aWNlX25hbWU6ICZzdHIpIC0+ IFNlbGYgeworICAgICAgICBzZWxmLnNlcnZpY2VzX2xpc3QucHVzaChzZXJ2aWNlX25hbWUuaW50 bygpKTsKKyAgICAgICAgc2VsZgorICAgIH0KKworICAgIC8vLyBDb25zdHJ1Y3QgdGhlIFVwZ3Jh ZGVDaGVja2VyLCBjb25zdW1lcyB0aGUgVXBncmFkZUNoZWNrZXJCdWlsZGVyCisgICAgcHViIGZu IGJ1aWxkKG11dCBzZWxmKSAtPiBVcGdyYWRlQ2hlY2tlciB7CisgICAgICAgIFVwZ3JhZGVDaGVj a2VyIHsKKyAgICAgICAgICAgIG91dHB1dDogQ29uc29sZU91dHB1dDo6bmV3KCksCisgICAgICAg ICAgICB1cGdyYWRlZDogZmFsc2UsCisgICAgICAgICAgICBvbGRfc3VpdGU6IHNlbGYub2xkX3N1 aXRlLAorICAgICAgICAgICAgbmV3X3N1aXRlOiBzZWxmLm5ld19zdWl0ZSwKKyAgICAgICAgICAg IG1pbmltdW1fbWFqb3JfdmVyc2lvbjogc2VsZi5taW5pbXVtX21ham9yX3ZlcnNpb24sCisgICAg ICAgICAgICBtaW5pbXVtX21pbm9yX3ZlcnNpb246IHNlbGYubWluaW11bV9taW5vcl92ZXJzaW9u LAorICAgICAgICAgICAgbWluaW11bV9wa2dyZWw6IHNlbGYubWluaW11bV9wa2dyZWwsCisgICAg ICAgICAgICBhcHRfc3RhdGVfZmlsZTogc2VsZi5hcHRfc3RhdGVfZmlsZS50YWtlKCkudW53cmFw X29yX2Vsc2UofHwgeworICAgICAgICAgICAgICAgIFBhdGhCdWY6OmZyb20oZm9ybWF0ISgKKyAg ICAgICAgICAgICAgICAgICAgIi92YXIvbGliL3t9L3BrZy1zdGF0ZS5qc29uIiwKKyAgICAgICAg ICAgICAgICAgICAgJnNlbGYubWV0YV9wYWNrYWdlX25hbWUKKyAgICAgICAgICAgICAgICApKQor ICAgICAgICAgICAgfSksCisgICAgICAgICAgICBhcGlfc2VydmVyX3BhY2thZ2U6IHNlbGYKKyAg ICAgICAgICAgICAgICAuYXBpX3NlcnZlcl9wYWNrYWdlCisgICAgICAgICAgICAgICAgLnVud3Jh cF9vcl9lbHNlKHx8IHNlbGYubWV0YV9wYWNrYWdlX25hbWUuY2xvbmUoKSksCisgICAgICAgICAg ICBydW5uaW5nX2FwaV9zZXJ2ZXJfdmVyc2lvbjogc2VsZi5ydW5uaW5nX2FwaV9zZXJ2ZXJfdmVy c2lvbiwKKyAgICAgICAgICAgIG1ldGFfcGFja2FnZV9uYW1lOiBzZWxmLm1ldGFfcGFja2FnZV9u YW1lLAorICAgICAgICAgICAgc2VydmljZXNfbGlzdDogc2VsZi5zZXJ2aWNlc19saXN0LAorICAg ICAgICB9CisgICAgfQorfQorCisvLy8gSGVscGVycyB0byBlYXNpbHkgY29uc3RydWN0IGEgc2V0 IG9mIHVwZ3JhZGUgY2hlY2tzLgorcHViIHN0cnVjdCBVcGdyYWRlQ2hlY2tlciB7CisgICAgb3V0 cHV0OiBDb25zb2xlT3V0cHV0LAorICAgIHVwZ3JhZGVkOiBib29sLAorICAgIG9sZF9zdWl0ZTog U3RyaW5nLAorICAgIG5ld19zdWl0ZTogU3RyaW5nLAorICAgIG1ldGFfcGFja2FnZV9uYW1lOiBT dHJpbmcsCisgICAgbWluaW11bV9tYWpvcl92ZXJzaW9uOiB1OCwKKyAgICBtaW5pbXVtX21pbm9y X3ZlcnNpb246IHU4LAorICAgIG1pbmltdW1fcGtncmVsOiB1OCwKKyAgICBhcHRfc3RhdGVfZmls ZTogUGF0aEJ1ZiwKKyAgICBhcGlfc2VydmVyX3BhY2thZ2U6IFN0cmluZywKKyAgICBydW5uaW5n X2FwaV9zZXJ2ZXJfdmVyc2lvbjogU3RyaW5nLAorICAgIHNlcnZpY2VzX2xpc3Q6IFZlYzxTdHJp bmc+LAorfQorCitpbXBsIFVwZ3JhZGVDaGVja2VyIHsKKyAgICAvLy8gUnVuIGFsbCBjaGVja3Mu CisgICAgcHViIGZuIHJ1bigmbXV0IHNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAg ICAgc2VsZi5jaGVja19wYWNrYWdlcygpPzsKKyAgICAgICAgc2VsZi5jaGVja19taXNjKCk/Owor ICAgICAgICBzZWxmLnN1bW1hcnkoKQorICAgIH0KKworICAgIC8vLyBSdW4gbWlzY2VsbGFuZW91 cyBjaGVja3MuCisgICAgcHViIGZuIGNoZWNrX21pc2MoJm11dCBzZWxmKSAtPiBSZXN1bHQ8KCks IEVycm9yPiB7CisgICAgICAgIHNlbGYub3V0cHV0LnByaW50X2hlYWRlcigiTUlTQ0VMTEFORU9V UyBDSEVDS1MiKT87CisgICAgICAgIHNlbGYuY2hlY2tfc2VydmljZXMoKT87CisgICAgICAgIHNl bGYuY2hlY2tfdGltZV9zeW5jKCk/OworICAgICAgICBzZWxmLmNoZWNrX2FwdF9yZXBvcygpPzsK KyAgICAgICAgc2VsZi5jaGVja19ib290bG9hZGVyKCk/OworICAgICAgICBzZWxmLmNoZWNrX2Rr bXNfbW9kdWxlcygpPzsKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgLy8vIFByaW50IGEg c3VtbWFyeSBvZiBhbGwgY2hlY2tzIHJ1biBzbyBmYXIuCisgICAgcHViIGZuIHN1bW1hcnkoJm11 dCBzZWxmKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYub3V0cHV0LnByaW50 X3N1bW1hcnkoKQorICAgIH0KKworICAgIC8vLyBSdW4gYWxsIHBhY2thZ2UgcmVsYXRlZCBjaGVj a3MuCisgICAgcHViIGZuIGNoZWNrX3BhY2thZ2VzKCZtdXQgc2VsZikgLT4gUmVzdWx0PCgpLCBF cnJvcj4geworICAgICAgICBzZWxmLm91dHB1dC5wcmludF9oZWFkZXIoJmZvcm1hdCEoCisgICAg ICAgICAgICAiQ0hFQ0tJTkcgVkVSU0lPTiBJTkZPUk1BVElPTiBGT1Ige30gUEFDS0FHRVMiLAor ICAgICAgICAgICAgc2VsZi5tZXRhX3BhY2thZ2VfbmFtZS50b191cHBlcmNhc2UoKQorICAgICAg ICApKT87CisKKyAgICAgICAgc2VsZi5jaGVja191cGdyYWRhYmxlX3BhY2thZ2VzKCk/OworCisg ICAgICAgIGxldCBwa2dfdmVyc2lvbnMgPSBwcm94bW94X2FwdDo6Z2V0X3BhY2thZ2VfdmVyc2lv bnMoCisgICAgICAgICAgICAmc2VsZi5tZXRhX3BhY2thZ2VfbmFtZSwKKyAgICAgICAgICAgICZz ZWxmLmFwaV9zZXJ2ZXJfcGFja2FnZSwKKyAgICAgICAgICAgICZzZWxmLnJ1bm5pbmdfYXBpX3Nl cnZlcl92ZXJzaW9uLAorICAgICAgICAgICAgJltdLAorICAgICAgICApPzsKKworICAgICAgICBz ZWxmLmNoZWNrX21ldGFfcGFja2FnZV92ZXJzaW9uKCZwa2dfdmVyc2lvbnMpPzsKKyAgICAgICAg c2VsZi5jaGVja19rZXJuZWxfY29tcGF0KCZwa2dfdmVyc2lvbnMpPzsKKyAgICAgICAgT2soKCkp CisgICAgfQorCisgICAgZm4gY2hlY2tfdXBncmFkYWJsZV9wYWNrYWdlcygmbXV0IHNlbGYpIC0+ IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgc2VsZi5vdXRwdXQubG9nX2luZm8oIkNoZWNr aW5nIGZvciBwYWNrYWdlIHVwZGF0ZXMuLiIpPzsKKworICAgICAgICBsZXQgcmVzdWx0ID0gcHJv eG1veF9hcHQ6Omxpc3RfYXZhaWxhYmxlX2FwdF91cGRhdGUoJnNlbGYuYXB0X3N0YXRlX2ZpbGUp OworICAgICAgICBtYXRjaCByZXN1bHQgeworICAgICAgICAgICAgRXJyKGVycikgPT4geworICAg ICAgICAgICAgICAgIHNlbGYub3V0cHV0LmxvZ193YXJuKGZvcm1hdCEoIntlcnJ9IikpPzsKKyAg ICAgICAgICAgICAgICBzZWxmLm91dHB1dAorICAgICAgICAgICAgICAgICAgICAubG9nX2ZhaWwo InVuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIHBhY2thZ2UgdXBkYXRlcyEiKT87CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBPayhwYWNrYWdlX3N0YXR1cykgPT4geworICAgICAgICAgICAg ICAgIGlmIHBhY2thZ2Vfc3RhdHVzLmlzX2VtcHR5KCkgeworICAgICAgICAgICAgICAgICAgICBz ZWxmLm91dHB1dC5sb2dfcGFzcygiYWxsIHBhY2thZ2VzIHVwLXRvLWRhdGUiKT87CisgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHBrZ3MgPSBwYWNrYWdl X3N0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgLml0ZXIoKQorICAgICAgICAgICAgICAg ICAgICAgICAgLm1hcCh8cGtnfCBwa2cucGFja2FnZS5jbG9uZSgpKQorICAgICAgICAgICAgICAg ICAgICAgICAgLmNvbGxlY3Q6OjxWZWM8U3RyaW5nPj4oKQorICAgICAgICAgICAgICAgICAgICAg ICAgLmpvaW4oIiwgIik7CisgICAgICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0LmxvZ193YXJu KGZvcm1hdCEoCisgICAgICAgICAgICAgICAgICAgICAgICAidXBkYXRlcyBmb3IgdGhlIGZvbGxv d2luZyBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlOlxuICAgICAge3BrZ3N9IiwKKyAgICAgICAgICAg ICAgICAgICAgKSk/OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBmbiBjaGVja19tZXRhX3BhY2thZ2VfdmVy c2lvbigKKyAgICAgICAgJm11dCBzZWxmLAorICAgICAgICBwa2dfdmVyc2lvbnM6ICZbcHJveG1v eF9hcHRfYXBpX3R5cGVzOjpBUFRVcGRhdGVJbmZvXSwKKyAgICApIC0+IFJlc3VsdDwoKSwgRXJy b3I+IHsKKyAgICAgICAgc2VsZi5vdXRwdXQubG9nX2luZm8oZm9ybWF0ISgKKyAgICAgICAgICAg ICJDaGVja2luZyB7fSBwYWNrYWdlIHZlcnNpb24uLiIsCisgICAgICAgICAgICBzZWxmLm1ldGFf cGFja2FnZV9uYW1lCisgICAgICAgICkpPzsKKworICAgICAgICBsZXQgbWV0YV9wa2cgPSBwa2df dmVyc2lvbnMKKyAgICAgICAgICAgIC5pdGVyKCkKKyAgICAgICAgICAgIC5maW5kKHxwa2d8IHBr Zy5wYWNrYWdlLmFzX3N0cigpID09IHNlbGYubWV0YV9wYWNrYWdlX25hbWUpOworCisgICAgICAg IGlmIGxldCBTb21lKG1ldGFfcGtnKSA9IG1ldGFfcGtnIHsKKyAgICAgICAgICAgIGxldCBwa2df dmVyc2lvbiA9IFJlZ2V4OjpuZXcociJeKFxkKylcLihcZCspWy4tXShcZCspIik/OworICAgICAg ICAgICAgbGV0IGNhcHR1cmVzID0gcGtnX3ZlcnNpb24uY2FwdHVyZXMoJm1ldGFfcGtnLm9sZF92 ZXJzaW9uKTsKKyAgICAgICAgICAgIGlmIGxldCBTb21lKGNhcHR1cmVzKSA9IGNhcHR1cmVzIHsK KyAgICAgICAgICAgICAgICBsZXQgbWFqID0gU2VsZjo6ZXh0cmFjdF92ZXJzaW9uX2Zyb21fY2Fw dHVyZXMoMSwgJmNhcHR1cmVzKT87CisgICAgICAgICAgICAgICAgbGV0IG1pbiA9IFNlbGY6OmV4 dHJhY3RfdmVyc2lvbl9mcm9tX2NhcHR1cmVzKDIsICZjYXB0dXJlcyk/OworICAgICAgICAgICAg ICAgIGxldCBwa2dyZWwgPSBTZWxmOjpleHRyYWN0X3ZlcnNpb25fZnJvbV9jYXB0dXJlcygzLCAm Y2FwdHVyZXMpPzsKKworICAgICAgICAgICAgICAgIGxldCBtaW5fdmVyc2lvbiA9IGZvcm1hdCEo CisgICAgICAgICAgICAgICAgICAgICJ7fS57fS57fSIsCisgICAgICAgICAgICAgICAgICAgIHNl bGYubWluaW11bV9tYWpvcl92ZXJzaW9uLCBzZWxmLm1pbmltdW1fbWlub3JfdmVyc2lvbiwgc2Vs Zi5taW5pbXVtX3BrZ3JlbAorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICBp ZiAobWFqID4gc2VsZi5taW5pbXVtX21ham9yX3ZlcnNpb24gJiYgc2VsZi5taW5pbXVtX21ham9y X3ZlcnNpb24gIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGFscGhhIGFuZCBi ZXRhIHZlcnNpb24gdXBncmFkZSBjaGVja3M6CisgICAgICAgICAgICAgICAgICAgIHx8IChzZWxm Lm1pbmltdW1fbWFqb3JfdmVyc2lvbiA9PSAwICYmIG1pbiA+IHNlbGYubWluaW11bV9taW5vcl92 ZXJzaW9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRw dXQubG9nX3Bhc3MoZm9ybWF0ISgiQWxyZWFkeSB1cGdyYWRlZCB0byB7bWFqfS57bWlufSIpKT87 CisgICAgICAgICAgICAgICAgICAgIHNlbGYudXBncmFkZWQgPSB0cnVlOworICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiBtYWogPj0gc2VsZi5taW5pbXVtX21ham9yX3ZlcnNpb24KKyAgICAgICAg ICAgICAgICAgICAgJiYgbWluID49IHNlbGYubWluaW11bV9taW5vcl92ZXJzaW9uCisgICAgICAg ICAgICAgICAgICAgICYmIHBrZ3JlbCA+PSBzZWxmLm1pbmltdW1fcGtncmVsCisgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2dfcGFzcyhmb3JtYXQh KAorICAgICAgICAgICAgICAgICAgICAgICAgIid7fScgaGFzIHZlcnNpb24gPj0ge21pbl92ZXJz aW9ufSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1ldGFfcGFja2FnZV9uYW1lCisg ICAgICAgICAgICAgICAgICAgICkpPzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2dfZmFpbChmb3JtYXQhKAorICAgICAgICAgICAg ICAgICAgICAgICAgIid7fScgcGFja2FnZSBpcyB0b28gb2xkLCBwbGVhc2UgdXBncmFkZSB0byA+ PSB7bWluX3ZlcnNpb259IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWV0YV9wYWNr YWdlX25hbWUKKyAgICAgICAgICAgICAgICAgICAgKSk/OworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXQubG9nX2ZhaWwo Zm9ybWF0ISgKKyAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBtYXRjaCB0aGUgJ3t9JyBw YWNrYWdlIHZlcnNpb24sIFwKKyAgICAgICAgICAgICAgICAgICAgaXMgaXQgaW5zdGFsbGVkPyIs CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWV0YV9wYWNrYWdlX25hbWUKKyAgICAgICAgICAg ICAgICApKT87CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz ZWxmLm91dHB1dAorICAgICAgICAgICAgICAgIC5sb2dfZmFpbChmb3JtYXQhKCIne30nIHBhY2th Z2Ugbm90IGZvdW5kISIsIHNlbGYubWV0YV9wYWNrYWdlX25hbWUpKT87CisgICAgICAgIH0KKyAg ICAgICAgT2soKCkpCisgICAgfQorCisgICAgZm4gaXNfa2VybmVsX3ZlcnNpb25fY29tcGF0aWJs ZSgmc2VsZiwgcnVubmluZ192ZXJzaW9uOiAmc3RyKSAtPiBib29sIHsKKyAgICAgICAgLy8gVE9E TzogcmV3b3JrIHRoaXMgdG8gcGFyc2Ugb3V0IG1hai5taW4ucGF0Y2ggYW5kIGRvIG51bWVyaWNh bCBjb21wYXJpc29uIGFuZCBkZXRlY3QKKyAgICAgICAgLy8gdGhvc2Ugd2l0aCBhICJicG8xMiIg YXMgYmFja3BvcnQga2VybmVscyBmcm9tIHRoZSBvbGRlciByZWxlYXNlLgorICAgICAgICBjb25z dCBNSU5JTVVNX1JFOiAmc3RyID0gciI2XC4oPzoxNFwuKD86WzEtOV1cZCt8WzYtOV0pfDFbNS05 XSlbXn5dKiI7CisgICAgICAgIGNvbnN0IEFSQklUUkFSWV9SRTogJnN0ciA9IHIiKD86MVs0LTld fDJcZCspXC4oPzpbMC05XXxcZHsyLH0pW15+XSotcHZlIjsKKworICAgICAgICBsZXQgcmUgPSBp ZiBzZWxmLnVwZ3JhZGVkIHsKKyAgICAgICAgICAgIGNvbmNhdGNwIShyIl4oPzoiLCBNSU5JTVVN X1JFLCByInwiLCBBUkJJVFJBUllfUkUsIHIiKSQiKQorICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgciJeKD86NlwuKD86Mnw1fDh8MTF8MTQpKSIKKyAgICAgICAgfTsKKyAgICAgICAgbGV0 IHJlID0gUmVnZXg6Om5ldyhyZSkuZXhwZWN0KCJmYWlsZWQgdG8gY29tcGlsZSBrZXJuZWwgY29t cGF0IHJlZ2V4Iik7CisKKyAgICAgICAgcmUuaXNfbWF0Y2gocnVubmluZ192ZXJzaW9uKQorICAg IH0KKworICAgIGZuIGNoZWNrX2tlcm5lbF9jb21wYXQoCisgICAgICAgICZtdXQgc2VsZiwKKyAg ICAgICAgcGtnX3ZlcnNpb25zOiAmW3Byb3htb3hfYXB0X2FwaV90eXBlczo6QVBUVXBkYXRlSW5m b10sCisgICAgKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYub3V0cHV0Lmxv Z19pbmZvKCJDaGVjayBydW5uaW5nIGtlcm5lbCB2ZXJzaW9uLi4iKT87CisKKyAgICAgICAgbGV0 IGtpbnN0YWxsZWQgPSBpZiBzZWxmLnVwZ3JhZGVkIHsKKyAgICAgICAgICAgICJwcm94bW94LWtl cm5lbC02LjE0IgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgInByb3htb3gta2VybmVs LTYuOCIKKyAgICAgICAgfTsKKworICAgICAgICBsZXQgb3V0cHV0ID0gc3RkOjpwcm9jZXNzOjpD b21tYW5kOjpuZXcoInVuYW1lIikuYXJnKCItciIpLm91dHB1dCgpOworICAgICAgICBtYXRjaCBv dXRwdXQgeworICAgICAgICAgICAgRXJyKF9lcnIpID0+IHNlbGYKKyAgICAgICAgICAgICAgICAu b3V0cHV0CisgICAgICAgICAgICAgICAgLmxvZ19mYWlsKCJ1bmFibGUgdG8gZGV0ZXJtaW5lIHJ1 bm5pbmcga2VybmVsIHZlcnNpb24uIik/LAorICAgICAgICAgICAgT2socmV0KSA9PiB7CisgICAg ICAgICAgICAgICAgbGV0IHJ1bm5pbmdfdmVyc2lvbiA9IHN0ZDo6c3RyOjpmcm9tX3V0ZjgoJnJl dC5zdGRvdXRbLi5yZXQuc3Rkb3V0LmxlbigpIC0gMV0pPzsKKyAgICAgICAgICAgICAgICBpZiBz ZWxmLmlzX2tlcm5lbF92ZXJzaW9uX2NvbXBhdGlibGUocnVubmluZ192ZXJzaW9uKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmIHNlbGYudXBncmFkZWQgeworICAgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5vdXRwdXQubG9nX3Bhc3MoZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAicnVubmluZyBuZXcga2VybmVsICd7cnVubmluZ192ZXJzaW9ufScgYWZ0ZXIgdXBncmFk ZS4iCisgICAgICAgICAgICAgICAgICAgICAgICApKT87CisgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2dfcGFzcyhmb3Jt YXQhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJydW5uaW5nIGtlcm5lbCAne3J1bm5p bmdfdmVyc2lvbn0nIGlzIGNvbnNpZGVyZWQgc3VpdGFibGUgZm9yIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1cGdyYWRlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICkpPzsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGxldCBpbnN0YWxsZWRfa2VybmVsID0gcGtnX3ZlcnNpb25zCisgICAgICAgICAg ICAgICAgICAgICAgICAuaXRlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAuZmluZCh8cGtn fCBwa2cucGFja2FnZS5hc19zdHIoKSA9PSBraW5zdGFsbGVkKTsKKyAgICAgICAgICAgICAgICAg ICAgaWYgaW5zdGFsbGVkX2tlcm5lbC5pc19zb21lKCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5vdXRwdXQubG9nX3dhcm4oZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiYSBzdWl0YWJsZSBrZXJuZWwgJ3traW5zdGFsbGVkfScgaXMgaW5zdGFsbGVkLCBidXQg YW4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VpdGFibGUgJ3tydW5uaW5nX3Zl cnNpb259JyBpcyBib290ZWQsIG1pc3NpbmcgcmVib290PyEiLAorICAgICAgICAgICAgICAgICAg ICAgICAgKSk/OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICAgICAgc2VsZi5vdXRwdXQubG9nX3dhcm4oZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAidW5leHBlY3RlZCBydW5uaW5nIGFuZCBpbnN0YWxsZWQga2VybmVsICd7cnVu bmluZ192ZXJzaW9ufScuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICkpPzsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBmbiBleHRyYWN0X3ZlcnNpb25fZnJvbV9j YXB0dXJlcygKKyAgICAgICAgaW5kZXg6IHVzaXplLAorICAgICAgICBjYXB0dXJlczogJnJlZ2V4 OjpDYXB0dXJlcywKKyAgICApIC0+IFJlc3VsdDx1OCwgRXJyb3I+IHsKKyAgICAgICAgaWYgbGV0 IFNvbWUoY2FwdHVyZSkgPSBjYXB0dXJlcy5nZXQoaW5kZXgpIHsKKyAgICAgICAgICAgIGxldCB2 YWwgPSBjYXB0dXJlLmFzX3N0cigpLnBhcnNlOjo8dTg+KCk/OworICAgICAgICAgICAgT2sodmFs KQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgT2soMCkKKyAgICAgICAgfQorICAgIH0K KworICAgIGZuIGNoZWNrX2Jvb3Rsb2FkZXIoJm11dCBzZWxmKSAtPiBSZXN1bHQ8KCksIEVycm9y PiB7CisgICAgICAgIHNlbGYub3V0cHV0CisgICAgICAgICAgICAubG9nX2luZm8oIkNoZWNraW5n IGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbi4uLiIpPzsKKworICAgICAgICBsZXQgc2RfYm9vdF9p bnN0YWxsZWQgPQorICAgICAgICAgICAgUGF0aDo6bmV3KCIvdXNyL3NoYXJlL2RvYy9zeXN0ZW1k LWJvb3QvY2hhbmdlbG9nLkRlYmlhbi5neiIpLmlzX2ZpbGUoKTsKKworICAgICAgICBpZiAhUGF0 aDo6bmV3KCIvc3lzL2Zpcm13YXJlL2VmaSIpLmlzX2RpcigpIHsKKyAgICAgICAgICAgIGlmIHNk X2Jvb3RfaW5zdGFsbGVkIHsKKyAgICAgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2dfd2FybigK KyAgICAgICAgICAgICAgICAgICAgInN5c3RlbWQtYm9vdCBwYWNrYWdlIGluc3RhbGxlZCBvbiBs ZWdhY3ktYm9vdCBzeXN0ZW0gaXMgbm90IFwKKyAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5 LCBjb25zaWRlciByZW1vdmluZyBpdCIsCisgICAgICAgICAgICAgICAgKT87CisgICAgICAgICAg ICAgICAgcmV0dXJuIE9rKCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlbGYub3V0 cHV0CisgICAgICAgICAgICAgICAgLmxvZ19za2lwKCJTeXN0ZW0gYm9vdGVkIGluIGxlZ2FjeS1t b2RlIC0gbm8gbmVlZCBmb3IgYWRkaXRpb25hbCBwYWNrYWdlcy4iKT87CisgICAgICAgICAgICBy ZXR1cm4gT2soKCkpOworICAgICAgICB9CisKKyAgICAgICAgbGV0IG11dCBib290X29rID0gdHJ1 ZTsKKyAgICAgICAgaWYgUGF0aDo6bmV3KCIvZXRjL2tlcm5lbC9wcm94bW94LWJvb3QtdXVpZHMi KS5pc19maWxlKCkgeworICAgICAgICAgICAgLy8gUGFja2FnZSB2ZXJzaW9uIGNoZWNrIG5lZWRz IHRvIGJlIHJ1biBiZWZvcmUKKyAgICAgICAgICAgIGlmICFzZWxmLnVwZ3JhZGVkIHsKKyAgICAg ICAgICAgICAgICBsZXQgb3V0cHV0ID0gc3RkOjpwcm9jZXNzOjpDb21tYW5kOjpuZXcoInByb3ht b3gtYm9vdC10b29sIikKKyAgICAgICAgICAgICAgICAgICAgLmFyZygic3RhdHVzIikKKyAgICAg ICAgICAgICAgICAgICAgLm91dHB1dCgpCisgICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxl cnJ8IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9lcnIhKCJmYWlsZWQgdG8gcmV0 cmlldmUgcHJveG1veC1ib290LXRvb2wgc3RhdHVzIC0ge2Vycn0iKQorICAgICAgICAgICAgICAg ICAgICB9KT87CisgICAgICAgICAgICAgICAgbGV0IHJlID0gUmVnZXg6Om5ldyhyImNvbmZpZ3Vy ZWQgd2l0aDouKiAodWVmaXxzeXN0ZW1kLWJvb3QpIFwodmVyc2lvbnM6IikKKyAgICAgICAgICAg ICAgICAgICAgLmV4cGVjdCgiZmFpbGVkIHRvIHByb3htb3gtYm9vdC10b29sIHN0YXR1cyIpOwor ICAgICAgICAgICAgICAgIGlmIHJlLmlzX21hdGNoKHN0ZDo6c3RyOjpmcm9tX3V0ZjgoJm91dHB1 dC5zdGRvdXQpPykgeworICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dAorICAgICAgICAg ICAgICAgICAgICAgICAgLmxvZ19za2lwKCJub3QgeWV0IHVwZ3JhZGVkLCBzeXN0ZW1kLWJvb3Qg c3RpbGwgbmVlZGVkIGZvciBib290Y3RsIik/OworICAgICAgICAgICAgICAgICAgICByZXR1cm4g T2soKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIGlmICFQYXRoOjpuZXcoIi91c3Ivc2hhcmUvZG9jL2dydWItZWZpLWFt ZDY0L2NoYW5nZWxvZy5EZWJpYW4uZ3oiKS5pc19maWxlKCkgeworICAgICAgICAgICAgICAgIHNl bGYub3V0cHV0LmxvZ193YXJuKAorICAgICAgICAgICAgICAgICAgICAiU3lzdGVtIGJvb3RlZCBp biB1ZWZpIG1vZGUgYnV0IGdydWItZWZpLWFtZDY0IG1ldGEtcGFja2FnZSBub3QgaW5zdGFsbGVk LCBcCisgICAgICAgICAgICAgICAgICAgICBuZXcgZ3J1YiB2ZXJzaW9ucyB3aWxsIG5vdCBiZSBp bnN0YWxsZWQgdG8gL2Jvb3QvZWZpIQorICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbCBncnVi LWVmaS1hbWQ2NC4iLAorICAgICAgICAgICAgICAgICk/OworICAgICAgICAgICAgICAgIGJvb3Rf b2sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIFBhdGg6Om5ldygiL2Jv b3QvZWZpL0VGSS9CT09UL0JPT1RYNjQuZWZpIikuaXNfZmlsZSgpIHsKKyAgICAgICAgICAgICAg ICBsZXQgb3V0cHV0ID0gc3RkOjpwcm9jZXNzOjpDb21tYW5kOjpuZXcoImRlYmNvbmYtc2hvdyIp CisgICAgICAgICAgICAgICAgICAgIC5hcmcoIi0tZGIiKQorICAgICAgICAgICAgICAgICAgICAu YXJnKCJjb25maWdkYiIpCisgICAgICAgICAgICAgICAgICAgIC5hcmcoImdydWItZWZpLWFtZDY0 IikKKyAgICAgICAgICAgICAgICAgICAgLmFyZygiZ3J1Yi1wYyIpCisgICAgICAgICAgICAgICAg ICAgIC5vdXRwdXQoKQorICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXRf ZXJyISgiZmFpbGVkIHRvIHJldHJpZXZlIGRlYmNvbmYgc2V0dGluZ3MgLSB7ZXJyfSIpKT87Cisg ICAgICAgICAgICAgICAgbGV0IHJlID0gUmVnZXg6Om5ldyhyImdydWIyL2ZvcmNlX2VmaV9leHRy YV9yZW1vdmFibGU6ICt0cnVlKD86XG58JCkiKQorICAgICAgICAgICAgICAgICAgICAuZXhwZWN0 KCJmYWlsZWQgdG8gY29tcGlsZSBkYmNvbmZpZyByZWdleCIpOworICAgICAgICAgICAgICAgIGlm ICFyZS5pc19tYXRjaChzdGQ6OnN0cjo6ZnJvbV91dGY4KCZvdXRwdXQuc3Rkb3V0KT8pIHsKKyAg ICAgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXQubG9nX3dhcm4oCisgICAgICAgICAgICAgICAg ICAgICAgICAiUmVtb3ZhYmxlIGJvb3Rsb2FkZXIgZm91bmQgYXQgJy9ib290L2VmaS9FRkkvQk9P VC9CT09UWDY0LmVmaScsIGJ1dCBHUlVCIHBhY2thZ2VzIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgIG5vdCBzZXQgdXAgdG8gdXBkYXRlIGl0IVxuUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpc blwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJ2dydWItZWZpLWFtZDY0IGdydWIyL2Zv cmNlX2VmaV9leHRyYV9yZW1vdmFibGUgYm9vbGVhbiB0cnVlJyB8IGRlYmNvbmYtc2V0LXNlbGVj dGlvbnMgLXYgLXVcblwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZW4gcmVpbnN0YWxsIEdS VUIgd2l0aCAnYXB0IGluc3RhbGwgLS1yZWluc3RhbGwgZ3J1Yi1lZmktYW1kNjQnIgorICAgICAg ICAgICAgICAgICAgICApPzsKKyAgICAgICAgICAgICAgICAgICAgYm9vdF9vayA9IGZhbHNlOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiBz ZF9ib290X2luc3RhbGxlZCB7CisgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2dfZmFpbCgKKyAg ICAgICAgICAgICAgICAic3lzdGVtZC1ib290IG1ldGEtcGFja2FnZSBpbnN0YWxsZWQuIFRoaXMg d2lsbCBjYXVzZSBwcm9ibGVtcyBvbiB1cGdyYWRlcyBvZiBvdGhlciBcCisgICAgICAgICAgICAg ICAgYm9vdC1yZWxhdGVkIHBhY2thZ2VzLlxuXAorICAgICAgICAgICAgICAgIFJlbW92ZSB0aGUg J3N5c3RlbWQtYm9vdCcgcGFja2FnZS5cblwKKyAgICAgICAgICAgICAgICBQbGVhc2UgY29uc3Vs dCB0aGUgdXBncmFkZSBndWlkZSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiEiCisgICAgICAgICAg ICApPzsKKyAgICAgICAgICAgIGJvb3Rfb2sgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp ZiBib290X29rIHsKKyAgICAgICAgICAgIHNlbGYub3V0cHV0CisgICAgICAgICAgICAgICAgLmxv Z19wYXNzKCJib290bG9hZGVyIHBhY2thZ2VzIGluc3RhbGxlZCBjb3JyZWN0bHkiKT87CisgICAg ICAgIH0KKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgZm4gY2hlY2tfYXB0X3JlcG9zKCZt dXQgc2VsZikgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgICAgICBzZWxmLm91dHB1dAorICAg ICAgICAgICAgLmxvZ19pbmZvKCJDaGVja2luZyBmb3IgcGFja2FnZSByZXBvc2l0b3J5IHN1aXRl IG1pc21hdGNoZXMuLiIpPzsKKworICAgICAgICBsZXQgbXV0IHN0cmFuZ2Vfc3VpdGUgPSBmYWxz ZTsKKyAgICAgICAgbGV0IG11dCBtaXNtYXRjaGVzID0gVmVjOjpuZXcoKTsKKyAgICAgICAgbGV0 IG11dCBmb3VuZF9zdWl0ZTogT3B0aW9uPChTdHJpbmcsIFN0cmluZyk+ID0gTm9uZTsKKworICAg ICAgICBsZXQgKHJlcG9fZmlsZXMsIF9yZXBvX2Vycm9ycywgX2RpZ2VzdCkgPSByZXBvc2l0b3Jp ZXM6OnJlcG9zaXRvcmllcygpPzsKKyAgICAgICAgZm9yIHJlcG9fZmlsZSBpbiByZXBvX2ZpbGVz IHsKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcmVwb19maWxlKAorICAgICAgICAgICAgICAgICZt dXQgZm91bmRfc3VpdGUsCisgICAgICAgICAgICAgICAgJm11dCBtaXNtYXRjaGVzLAorICAgICAg ICAgICAgICAgICZtdXQgc3RyYW5nZV9zdWl0ZSwKKyAgICAgICAgICAgICAgICByZXBvX2ZpbGUs CisgICAgICAgICAgICApPzsKKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoIChtaXNtYXRjaGVz LmlzX2VtcHR5KCksIHN0cmFuZ2Vfc3VpdGUpIHsKKyAgICAgICAgICAgICh0cnVlLCBmYWxzZSkg PT4gc2VsZi5vdXRwdXQubG9nX3Bhc3MoImZvdW5kIG5vIHN1aXRlIG1pc21hdGNoIik/LAorICAg ICAgICAgICAgKHRydWUsIHRydWUpID0+IHNlbGYKKyAgICAgICAgICAgICAgICAub3V0cHV0Cisg ICAgICAgICAgICAgICAgLmxvZ19ub3RpY2UoImZvdW5kIG5vIHN1aXRlIG1pc21hdGNoZXMsIGJ1 dCBmb3VuZCBhdCBsZWFzdCBvbmUgc3RyYW5nZSBzdWl0ZSIpPywKKyAgICAgICAgICAgIChmYWxz ZSwgXykgPT4geworICAgICAgICAgICAgICAgIGxldCBtdXQgbWVzc2FnZSA9IFN0cmluZzo6ZnJv bSgKKyAgICAgICAgICAgICAgICAgICAgIkZvdW5kIG1peGVkIG9sZCBhbmQgbmV3IHBhY2thZ2Vz IHJlcG9zaXRvcnkgc3VpdGVzLCBmaXggYmVmb3JlIHVwZ3JhZGluZyFcCisgICAgICAgICAgICAg ICAgICAgIFxuICAgICAgTWlzbWF0Y2hlczoiLAorICAgICAgICAgICAgICAgICk7CisgICAgICAg ICAgICAgICAgZm9yIChzdWl0ZSwgbG9jYXRpb24pIGluIG1pc21hdGNoZXMuaXRlcigpIHsKKyAg ICAgICAgICAgICAgICAgICAgbWVzc2FnZS5wdXNoX3N0cigKKyAgICAgICAgICAgICAgICAgICAg ICAgIGZvcm1hdCEoIlxuICAgICAgZm91bmQgc3VpdGUgJ3tzdWl0ZX0nIGF0ICd7bG9jYXRpb259 JyIpLmFzX3N0cigpLAorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBtZXNzYWdlLnB1c2goJ1xuJyk7CisgICAgICAgICAgICAgICAgc2Vs Zi5vdXRwdXQubG9nX2ZhaWwobWVzc2FnZSk/CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor ICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBmbiBjaGVja19ka21zX21vZHVsZXMoJm11dCBz ZWxmKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIGxldCBrdmVyID0gc3RkOjpwcm9j ZXNzOjpDb21tYW5kOjpuZXcoInVuYW1lIikKKyAgICAgICAgICAgIC5hcmcoIi1yIikKKyAgICAg ICAgICAgIC5vdXRwdXQoKQorICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0X2VyciEo ImZhaWxlZCB0byByZXRyaWV2ZSBydW5uaW5nIGtlcm5lbCB2ZXJzaW9uIC0ge2Vycn0iKSk/Owor CisgICAgICAgIGxldCBvdXRwdXQgPSBzdGQ6OnByb2Nlc3M6OkNvbW1hbmQ6Om5ldygiZGttcyIp CisgICAgICAgICAgICAuYXJnKCJzdGF0dXMiKQorICAgICAgICAgICAgLmFyZygiLWsiKQorICAg ICAgICAgICAgLmFyZyhzdGQ6OnN0cjo6ZnJvbV91dGY4KCZrdmVyLnN0ZG91dCk/KQorICAgICAg ICAgICAgLm91dHB1dCgpOworICAgICAgICBtYXRjaCBvdXRwdXQgeworICAgICAgICAgICAgRXJy KF9lcnIpID0+IHNlbGYub3V0cHV0LmxvZ19za2lwKCJjb3VsZCBub3QgZ2V0IGRrbXMgc3RhdHVz Iik/LAorICAgICAgICAgICAgT2socmV0KSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IG51bV9k a21zX21vZHVsZXMgPSBzdGQ6OnN0cjo6ZnJvbV91dGY4KCZyZXQuc3Rkb3V0KT8ubGluZXMoKS5j b3VudCgpOworICAgICAgICAgICAgICAgIGlmIG51bV9ka21zX21vZHVsZXMgPT0gMCB7CisgICAg ICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0LmxvZ19wYXNzKCJubyBka21zIG1vZHVsZXMgZm91 bmQiKT87CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vs Zi5vdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC5sb2dfd2FybigiZGttcyBtb2R1bGVz IGZvdW5kLCB0aGlzIG1pZ2h0IGNhdXNlIGlzc3VlcyBkdXJpbmcgdXBncmFkZS4iKT87CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIE9rKCgpKQor ICAgIH0KKworICAgIGZuIGNoZWNrX3JlcG9fZmlsZSgKKyAgICAgICAgJm11dCBzZWxmLAorICAg ICAgICBmb3VuZF9zdWl0ZTogJm11dCBPcHRpb248KFN0cmluZywgU3RyaW5nKT4sCisgICAgICAg IG1pc21hdGNoZXM6ICZtdXQgVmVjPChTdHJpbmcsIFN0cmluZyk+LAorICAgICAgICBzdHJhbmdl X3N1aXRlOiAmbXV0IGJvb2wsCisgICAgICAgIHJlcG9fZmlsZTogQVBUUmVwb3NpdG9yeUZpbGUs CisgICAgKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIGZvciByZXBvIGluIHJlcG9f ZmlsZS5yZXBvc2l0b3JpZXMgeworICAgICAgICAgICAgaWYgIXJlcG8uZW5hYmxlZCB8fCByZXBv LnR5cGVzID09IFtBUFRSZXBvc2l0b3J5UGFja2FnZVR5cGU6OkRlYlNyY10geworICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIHN1aXRlIGlu ICZyZXBvLnN1aXRlcyB7CisgICAgICAgICAgICAgICAgbGV0IHN1aXRlID0gbWF0Y2ggc3VpdGUu ZmluZCgmWyctJywgJy8nXVsuLl0pIHsKKyAgICAgICAgICAgICAgICAgICAgU29tZShuKSA9PiAm c3VpdGVbMC4ubl0sCisgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gc3VpdGUsCisgICAgICAg ICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGlmIHN1aXRlICE9IHNlbGYub2xkX3N1aXRl ICYmIHN1aXRlICE9IHNlbGYubmV3X3N1aXRlIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGxv Y2F0aW9uID0gcmVwb19maWxlLnBhdGguY2xvbmUoKS51bndyYXBfb3JfZGVmYXVsdCgpOworICAg ICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dC5sb2dfbm90aWNlKGZvcm1hdCEoCisgICAgICAg ICAgICAgICAgICAgICAgICAiZm91bmQgdW51c3VhbCBzdWl0ZSAne3N1aXRlfScsIG5laXRoZXIg b2xkICd7fScgbm9yIG5ldyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9Jy4uXG4g ICAgICAgIEFmZmVjdGVkIGZpbGUge2xvY2F0aW9ufVxuICAgICAgICBQbGVhc2UgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFzc3VyZSB0aGlzIGlzIHNoaXBwaW5nIGNvbXBhdGlibGUg cGFja2FnZXMgZm9yIHRoZSB1cGdyYWRlISIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxm Lm9sZF9zdWl0ZSwgc2VsZi5uZXdfc3VpdGUKKyAgICAgICAgICAgICAgICAgICAgKSk/OworICAg ICAgICAgICAgICAgICAgICAqc3RyYW5nZV9zdWl0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIGxl dCBTb21lKChyZWYgY3VycmVudF9zdWl0ZSwgcmVmIGN1cnJlbnRfbG9jYXRpb24pKSA9IGZvdW5k X3N1aXRlIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGxvY2F0aW9uID0gcmVwb19maWxlLnBh dGguY2xvbmUoKS51bndyYXBfb3JfZGVmYXVsdCgpOworICAgICAgICAgICAgICAgICAgICBpZiBz dWl0ZSAhPSBjdXJyZW50X3N1aXRlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1pc21h dGNoZXMuaXNfZW1wdHkoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzbWF0Y2hl cy5wdXNoKChjdXJyZW50X3N1aXRlLmNsb25lKCksIGN1cnJlbnRfbG9jYXRpb24uY2xvbmUoKSkp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc21hdGNoZXMucHVzaCgoc3VpdGUudG9f c3RyaW5nKCksIGxvY2F0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc21hdGNoZXMucHVzaCgoc3VpdGUudG9fc3Ry aW5nKCksIGxvY2F0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICBsZXQgbG9jYXRpb24gPSByZXBvX2ZpbGUucGF0aC5jbG9uZSgpLnVud3JhcF9vcl9kZWZhdWx0 KCk7CisgICAgICAgICAgICAgICAgICAgICpmb3VuZF9zdWl0ZSA9IFNvbWUoKHN1aXRlLnRvX3N0 cmluZygpLCBsb2NhdGlvbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBmbiBnZXRfc3lzdGVtZF91bml0 X3N0YXRlKAorICAgICAgICAmc2VsZiwKKyAgICAgICAgdW5pdDogJnN0ciwKKyAgICApIC0+IFJl c3VsdDwoU3lzdGVtZFVuaXRTdGF0ZSwgU3lzdGVtZFVuaXRTdGF0ZSksIEVycm9yPiB7CisgICAg ICAgIGxldCBvdXRwdXQgPSBzdGQ6OnByb2Nlc3M6OkNvbW1hbmQ6Om5ldygic3lzdGVtY3RsIikK KyAgICAgICAgICAgIC5hcmcoImlzLWVuYWJsZWQiKQorICAgICAgICAgICAgLmFyZyh1bml0KQor ICAgICAgICAgICAgLm91dHB1dCgpCisgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXRf ZXJyISgiZmFpbGVkIHRvIGV4ZWN1dGUgLSB7ZXJyfSIpKT87CisKKyAgICAgICAgbGV0IGVuYWJs ZWRfc3RhdGUgPSBtYXRjaCBvdXRwdXQuc3Rkb3V0LmFzX3NsaWNlKCkgeworICAgICAgICAgICAg YiJlbmFibGVkXG4iID0+IFN5c3RlbWRVbml0U3RhdGU6OkVuYWJsZWQsCisgICAgICAgICAgICBi ImRpc2FibGVkXG4iID0+IFN5c3RlbWRVbml0U3RhdGU6OkRpc2FibGVkLAorICAgICAgICAgICAg XyA9PiBTeXN0ZW1kVW5pdFN0YXRlOjpVbmtub3duLAorICAgICAgICB9OworCisgICAgICAgIGxl dCBvdXRwdXQgPSBzdGQ6OnByb2Nlc3M6OkNvbW1hbmQ6Om5ldygic3lzdGVtY3RsIikKKyAgICAg ICAgICAgIC5hcmcoImlzLWFjdGl2ZSIpCisgICAgICAgICAgICAuYXJnKHVuaXQpCisgICAgICAg ICAgICAub3V0cHV0KCkKKyAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdF9lcnIhKCJm YWlsZWQgdG8gZXhlY3V0ZSAtIHtlcnJ9IikpPzsKKworICAgICAgICBsZXQgYWN0aXZlX3N0YXRl ID0gbWF0Y2ggb3V0cHV0LnN0ZG91dC5hc19zbGljZSgpIHsKKyAgICAgICAgICAgIGIiYWN0aXZl XG4iID0+IFN5c3RlbWRVbml0U3RhdGU6OkFjdGl2ZSwKKyAgICAgICAgICAgIGIiaW5hY3RpdmVc biIgPT4gU3lzdGVtZFVuaXRTdGF0ZTo6SW5hY3RpdmUsCisgICAgICAgICAgICBiImZhaWxlZFxu IiA9PiBTeXN0ZW1kVW5pdFN0YXRlOjpGYWlsZWQsCisgICAgICAgICAgICBfID0+IFN5c3RlbWRV bml0U3RhdGU6OlVua25vd24sCisgICAgICAgIH07CisgICAgICAgIE9rKChlbmFibGVkX3N0YXRl LCBhY3RpdmVfc3RhdGUpKQorICAgIH0KKworICAgIGZuIGNoZWNrX3NlcnZpY2VzKCZtdXQgc2Vs ZikgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgICAgICBzZWxmLm91dHB1dC5sb2dfaW5mbyhm b3JtYXQhKAorICAgICAgICAgICAgIkNoZWNraW5nIHt9IGRhZW1vbiBzZXJ2aWNlcy4uIiwKKyAg ICAgICAgICAgIHNlbGYubWV0YV9wYWNrYWdlX25hbWUKKyAgICAgICAgKSk/OworCisgICAgICAg IGZvciBzZXJ2aWNlIGluIHNlbGYuc2VydmljZXNfbGlzdC5hc19zbGljZSgpIHsKKyAgICAgICAg ICAgIG1hdGNoIHNlbGYuZ2V0X3N5c3RlbWRfdW5pdF9zdGF0ZShzZXJ2aWNlKT8geworICAgICAg ICAgICAgICAgIChfLCBTeXN0ZW1kVW5pdFN0YXRlOjpBY3RpdmUpID0+IHsKKyAgICAgICAgICAg ICAgICAgICAgc2VsZi5vdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC5sb2dfcGFzcyhm b3JtYXQhKCJzeXN0ZW1kIHVuaXQgJ3tzZXJ2aWNlfScgaXMgaW4gc3RhdGUgJ2FjdGl2ZSciKSk/ OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAoXywgU3lzdGVtZFVuaXRTdGF0 ZTo6SW5hY3RpdmUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXQubG9nX2Zh aWwoZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAgICAgICAgICJzeXN0ZW1kIHVuaXQgJ3tzZXJ2 aWNlfScgaXMgaW4gc3RhdGUgJ2luYWN0aXZlJ1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcbiAgICBQbGVhc2UgY2hlY2sgdGhlIHNlcnZpY2UgZm9yIGVycm9ycyBhbmQgc3RhcnQgaXQu IiwKKyAgICAgICAgICAgICAgICAgICAgKSk/OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAoXywgU3lzdGVtZFVuaXRTdGF0ZTo6RmFpbGVkKSA9PiB7CisgICAgICAgICAgICAg ICAgICAgIHNlbGYub3V0cHV0LmxvZ19mYWlsKGZvcm1hdCEoCisgICAgICAgICAgICAgICAgICAg ICAgICAic3lzdGVtZCB1bml0ICd7c2VydmljZX0nIGlzIGluIHN0YXRlICdmYWlsZWQnXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIFBsZWFzZSBjaGVjayB0aGUgc2VydmljZSBm b3IgZXJyb3JzIGFuZCBzdGFydCBpdC4iLAorICAgICAgICAgICAgICAgICAgICApKT87CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIChfLCBfKSA9PiB7CisgICAgICAgICAgICAg ICAgICAgIHNlbGYub3V0cHV0LmxvZ19mYWlsKGZvcm1hdCEoCisgICAgICAgICAgICAgICAgICAg ICAgICAic3lzdGVtZCB1bml0ICd7c2VydmljZX0nIGlzIG5vdCBpbiBzdGF0ZSAnYWN0aXZlJ1wK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBQbGVhc2UgY2hlY2sgdGhlIHNlcnZp Y2UgZm9yIGVycm9ycyBhbmQgc3RhcnQgaXQuIiwKKyAgICAgICAgICAgICAgICAgICAgKSk/Owor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBPaygo KSkKKyAgICB9CisKKyAgICBmbiBjaGVja190aW1lX3N5bmMoJm11dCBzZWxmKSAtPiBSZXN1bHQ8 KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYub3V0cHV0CisgICAgICAgICAgICAubG9nX2luZm8o IkNoZWNraW5nIGZvciBzdXBwb3J0ZWQgJiBhY3RpdmUgTlRQIHNlcnZpY2UuLiIpPzsKKyAgICAg ICAgaWYgc2VsZi5nZXRfc3lzdGVtZF91bml0X3N0YXRlKCJzeXN0ZW1kLXRpbWVzeW5jZC5zZXJ2 aWNlIik/LjEgPT0gU3lzdGVtZFVuaXRTdGF0ZTo6QWN0aXZlIHsKKyAgICAgICAgICAgIHNlbGYu b3V0cHV0LmxvZ193YXJuKAorICAgICAgICAgICAgICAgICJzeXN0ZW1kLXRpbWVzeW5jZCBpcyBu b3QgdGhlIGJlc3QgY2hvaWNlIGZvciB0aW1lLWtlZXBpbmcgb24gc2VydmVycywgZHVlIHRvIG9u bHkgXAorICAgICAgICAgICAgICAgIGFwcGx5aW5nIHVwZGF0ZXMgb24gYm9vdC5cCisgICAgICAg ICAgICAgICAgXG4gICAgICAgV2hpbGUgbm90IG5lY2Vzc2FyeSBmb3IgdGhlIHVwZ3JhZGUgaXQn cyByZWNvbW1lbmRlZCB0byB1c2Ugb25lIG9mOlwKKyAgICAgICAgICAgICAgICBcbiAgICAgICAg KiBjaHJvbnkgKERlZmF1bHQgaW4gbmV3IFByb3htb3ggcHJvZHVjdCBpbnN0YWxsYXRpb25zKVwK KyAgICAgICAgICAgICAgICBcbiAgICAgICAgKiBudHBzZWNcCisgICAgICAgICAgICAgICAgXG4g ICAgICAgICogb3Blbm50cGQiCisgICAgICAgICAgICApPzsKKyAgICAgICAgfSBlbHNlIGlmIHNl bGYuZ2V0X3N5c3RlbWRfdW5pdF9zdGF0ZSgibnRwLnNlcnZpY2UiKT8uMSA9PSBTeXN0ZW1kVW5p dFN0YXRlOjpBY3RpdmUgeworICAgICAgICAgICAgc2VsZi5vdXRwdXQubG9nX2luZm8oCisgICAg ICAgICAgICAgICAgIkRlYmlhbiBkZXByZWNhdGVkIGFuZCByZW1vdmVkIHRoZSBudHAgcGFja2Fn ZSBmb3IgQm9va3dvcm0sIGJ1dCB0aGUgc3lzdGVtIFwKKyAgICAgICAgICAgICAgICAgICAgd2ls bCBhdXRvbWF0aWNhbGx5IG1pZ3JhdGUgdG8gdGhlICdudHBzZWMnIHJlcGxhY2VtZW50IHBhY2th Z2Ugb24gdXBncmFkZS4iLAorICAgICAgICAgICAgKT87CisgICAgICAgIH0gZWxzZSBpZiBzZWxm LmdldF9zeXN0ZW1kX3VuaXRfc3RhdGUoImNocm9ueS5zZXJ2aWNlIik/LjEgPT0gU3lzdGVtZFVu aXRTdGF0ZTo6QWN0aXZlCisgICAgICAgICAgICB8fCBzZWxmLmdldF9zeXN0ZW1kX3VuaXRfc3Rh dGUoIm9wZW5udHBkLnNlcnZpY2UiKT8uMSA9PSBTeXN0ZW1kVW5pdFN0YXRlOjpBY3RpdmUKKyAg ICAgICAgICAgIHx8IHNlbGYuZ2V0X3N5c3RlbWRfdW5pdF9zdGF0ZSgibnRwc2VjLnNlcnZpY2Ui KT8uMSA9PSBTeXN0ZW1kVW5pdFN0YXRlOjpBY3RpdmUKKyAgICAgICAgeworICAgICAgICAgICAg c2VsZi5vdXRwdXQKKyAgICAgICAgICAgICAgICAubG9nX3Bhc3MoIkRldGVjdGVkIGFjdGl2ZSB0 aW1lIHN5bmNocm9uaXNhdGlvbiB1bml0Iik/OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgc2VsZi5vdXRwdXQubG9nX3dhcm4oCisgICAgICAgICAgICAgICAgIk5vIChhY3RpdmUpIHRp bWUgc3luY2hyb25pc2F0aW9uIGRhZW1vbiAoTlRQKSBkZXRlY3RlZCwgYnV0IHN5bmNocm9uaXpl ZCBzeXN0ZW1zIFwKKyAgICAgICAgICAgICAgICBhcmUgaW1wb3J0YW50ISIsCisgICAgICAgICAg ICApPzsKKyAgICAgICAgfQorICAgICAgICBPaygoKSkKKyAgICB9Cit9CisKKyNbZGVyaXZlKFBh cnRpYWxFcSldCitlbnVtIFN5c3RlbWRVbml0U3RhdGUgeworICAgIEFjdGl2ZSwKKyAgICBFbmFi bGVkLAorICAgIERpc2FibGVkLAorICAgIEZhaWxlZCwKKyAgICBJbmFjdGl2ZSwKKyAgICBVbmtu b3duLAorfQorCisjW2Rlcml2ZShEZWZhdWx0KV0KK3N0cnVjdCBDb3VudGVycyB7CisgICAgcGFz czogdTY0LAorICAgIHNraXA6IHU2NCwKKyAgICBub3RpY2U6IHU2NCwKKyAgICB3YXJuOiB1NjQs CisgICAgZmFpbDogdTY0LAorfQorCitlbnVtIExvZ0xldmVsIHsKKyAgICBQYXNzLAorICAgIElu Zm8sCisgICAgU2tpcCwKKyAgICBOb3RpY2UsCisgICAgV2FybiwKKyAgICBGYWlsLAorfQorCitz dHJ1Y3QgQ29uc29sZU91dHB1dCB7CisgICAgc3RyZWFtOiBTdGFuZGFyZFN0cmVhbSwKKyAgICBm aXJzdF9oZWFkZXI6IGJvb2wsCisgICAgY291bnRlcnM6IENvdW50ZXJzLAorfQorCitpbXBsIENv bnNvbGVPdXRwdXQgeworICAgIGZuIG5ldygpIC0+IFNlbGYgeworICAgICAgICBTZWxmIHsKKyAg ICAgICAgICAgIHN0cmVhbTogU3RhbmRhcmRTdHJlYW06OnN0ZG91dChDb2xvckNob2ljZTo6QWx3 YXlzKSwKKyAgICAgICAgICAgIGZpcnN0X2hlYWRlcjogdHJ1ZSwKKyAgICAgICAgICAgIGNvdW50 ZXJzOiBDb3VudGVyczo6ZGVmYXVsdCgpLAorICAgICAgICB9CisgICAgfQorCisgICAgZm4gcHJp bnRfaGVhZGVyKCZtdXQgc2VsZiwgbWVzc2FnZTogJnN0cikgLT4gUmVzdWx0PCgpLCBFcnJvcj4g eworICAgICAgICBpZiAhc2VsZi5maXJzdF9oZWFkZXIgeworICAgICAgICAgICAgd3JpdGVsbiEo Jm11dCBzZWxmLnN0cmVhbSk/OworICAgICAgICB9CisgICAgICAgIHNlbGYuZmlyc3RfaGVhZGVy ID0gZmFsc2U7CisgICAgICAgIHdyaXRlbG4hKCZtdXQgc2VsZi5zdHJlYW0sICI9IHttZXNzYWdl fSA9XG4iKT87CisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIGZuIHNldF9jb2xvcigmbXV0 IHNlbGYsIGNvbG9yOiBDb2xvciwgYm9sZDogYm9vbCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewor ICAgICAgICBzZWxmLnN0cmVhbQorICAgICAgICAgICAgLnNldF9jb2xvcihDb2xvclNwZWM6Om5l dygpLnNldF9mZyhTb21lKGNvbG9yKSkuc2V0X2JvbGQoYm9sZCkpPzsKKyAgICAgICAgT2soKCkp CisgICAgfQorCisgICAgZm4gcmVzZXQoJm11dCBzZWxmKSAtPiBSZXN1bHQ8KCksIHN0ZDo6aW86 OkVycm9yPiB7CisgICAgICAgIHNlbGYuc3RyZWFtLnJlc2V0KCkKKyAgICB9CisKKyAgICBmbiBs b2dfbGluZSgmbXV0IHNlbGYsIGxldmVsOiBMb2dMZXZlbCwgbWVzc2FnZTogJnN0cikgLT4gUmVz dWx0PCgpLCBFcnJvcj4geworICAgICAgICBtYXRjaCBsZXZlbCB7CisgICAgICAgICAgICBMb2dM ZXZlbDo6UGFzcyA9PiB7CisgICAgICAgICAgICAgICAgc2VsZi5jb3VudGVycy5wYXNzICs9IDE7 CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfY29sb3IoQ29sb3I6OkdyZWVuLCBmYWxzZSk/Owor ICAgICAgICAgICAgICAgIHdyaXRlbG4hKCZtdXQgc2VsZi5zdHJlYW0sICJQQVNTOiB7fSIsIG1l c3NhZ2UpPzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIExvZ0xldmVsOjpJbmZvID0+IHsK KyAgICAgICAgICAgICAgICB3cml0ZWxuISgmbXV0IHNlbGYuc3RyZWFtLCAiSU5GTzoge30iLCBt ZXNzYWdlKT87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBMb2dMZXZlbDo6U2tpcCA9PiB7 CisgICAgICAgICAgICAgICAgc2VsZi5jb3VudGVycy5za2lwICs9IDE7CisgICAgICAgICAgICAg ICAgd3JpdGVsbiEoJm11dCBzZWxmLnN0cmVhbSwgIlNLSVA6IHt9IiwgbWVzc2FnZSk/OworICAg ICAgICAgICAgfQorICAgICAgICAgICAgTG9nTGV2ZWw6Ok5vdGljZSA9PiB7CisgICAgICAgICAg ICAgICAgc2VsZi5jb3VudGVycy5ub3RpY2UgKz0gMTsKKyAgICAgICAgICAgICAgICBzZWxmLnNl dF9jb2xvcihDb2xvcjo6V2hpdGUsIHRydWUpPzsKKyAgICAgICAgICAgICAgICB3cml0ZWxuISgm bXV0IHNlbGYuc3RyZWFtLCAiTk9USUNFOiB7fSIsIG1lc3NhZ2UpPzsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIExvZ0xldmVsOjpXYXJuID0+IHsKKyAgICAgICAgICAgICAgICBzZWxmLmNv dW50ZXJzLndhcm4gKz0gMTsKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9jb2xvcihDb2xvcjo6 WWVsbG93LCBmYWxzZSk/OworICAgICAgICAgICAgICAgIHdyaXRlbG4hKCZtdXQgc2VsZi5zdHJl YW0sICJXQVJOOiB7fSIsIG1lc3NhZ2UpPzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIExv Z0xldmVsOjpGYWlsID0+IHsKKyAgICAgICAgICAgICAgICBzZWxmLmNvdW50ZXJzLmZhaWwgKz0g MTsKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9jb2xvcihDb2xvcjo6UmVkLCB0cnVlKT87Cisg ICAgICAgICAgICAgICAgd3JpdGVsbiEoJm11dCBzZWxmLnN0cmVhbSwgIkZBSUw6IHt9IiwgbWVz c2FnZSk/OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNlbGYucmVzZXQoKT87 CisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIGZuIGxvZ19wYXNzPFQ6IEFzUmVmPHN0cj4+ KCZtdXQgc2VsZiwgbWVzc2FnZTogVCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgICAgICBz ZWxmLmxvZ19saW5lKExvZ0xldmVsOjpQYXNzLCBtZXNzYWdlLmFzX3JlZigpKQorICAgIH0KKwor ICAgIGZuIGxvZ19pbmZvPFQ6IEFzUmVmPHN0cj4+KCZtdXQgc2VsZiwgbWVzc2FnZTogVCkgLT4g UmVzdWx0PCgpLCBFcnJvcj4geworICAgICAgICBzZWxmLmxvZ19saW5lKExvZ0xldmVsOjpJbmZv LCBtZXNzYWdlLmFzX3JlZigpKQorICAgIH0KKworICAgIGZuIGxvZ19za2lwPFQ6IEFzUmVmPHN0 cj4+KCZtdXQgc2VsZiwgbWVzc2FnZTogVCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgICAg ICBzZWxmLmxvZ19saW5lKExvZ0xldmVsOjpTa2lwLCBtZXNzYWdlLmFzX3JlZigpKQorICAgIH0K KworICAgIGZuIGxvZ19ub3RpY2U8VDogQXNSZWY8c3RyPj4oJm11dCBzZWxmLCBtZXNzYWdlOiBU KSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYubG9nX2xpbmUoTG9nTGV2ZWw6 Ok5vdGljZSwgbWVzc2FnZS5hc19yZWYoKSkKKyAgICB9CisKKyAgICBmbiBsb2dfd2FybjxUOiBB c1JlZjxzdHI+PigmbXV0IHNlbGYsIG1lc3NhZ2U6IFQpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsK KyAgICAgICAgc2VsZi5sb2dfbGluZShMb2dMZXZlbDo6V2FybiwgbWVzc2FnZS5hc19yZWYoKSkK KyAgICB9CisKKyAgICBmbiBsb2dfZmFpbDxUOiBBc1JlZjxzdHI+PigmbXV0IHNlbGYsIG1lc3Nh Z2U6IFQpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgc2VsZi5sb2dfbGluZShMb2dM ZXZlbDo6RmFpbCwgbWVzc2FnZS5hc19yZWYoKSkKKyAgICB9CisKKyAgICBmbiBwcmludF9zdW1t YXJ5KCZtdXQgc2VsZikgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgICAgICBzZWxmLnByaW50 X2hlYWRlcigiU1VNTUFSWSIpPzsKKworICAgICAgICBsZXQgdG90YWwgPSBzZWxmLmNvdW50ZXJz LmZhaWwKKyAgICAgICAgICAgICsgc2VsZi5jb3VudGVycy5wYXNzCisgICAgICAgICAgICArIHNl bGYuY291bnRlcnMubm90aWNlCisgICAgICAgICAgICArIHNlbGYuY291bnRlcnMuc2tpcAorICAg ICAgICAgICAgKyBzZWxmLmNvdW50ZXJzLndhcm47CisKKyAgICAgICAgd3JpdGVsbiEoJm11dCBz ZWxmLnN0cmVhbSwgIlRPVEFMOiAgICAge3RvdGFsfSIpPzsKKyAgICAgICAgc2VsZi5zZXRfY29s b3IoQ29sb3I6OkdyZWVuLCBmYWxzZSk/OworICAgICAgICB3cml0ZWxuISgmbXV0IHNlbGYuc3Ry ZWFtLCAiUEFTU0VEOiAgICB7fSIsIHNlbGYuY291bnRlcnMucGFzcyk/OworICAgICAgICBzZWxm LnJlc2V0KCk/OworICAgICAgICB3cml0ZWxuISgmbXV0IHNlbGYuc3RyZWFtLCAiU0tJUFBFRDog ICB7fSIsIHNlbGYuY291bnRlcnMuc2tpcCk/OworICAgICAgICB3cml0ZWxuISgmbXV0IHNlbGYu c3RyZWFtLCAiTk9USUNFOiAgICB7fSIsIHNlbGYuY291bnRlcnMubm90aWNlKT87CisgICAgICAg IGlmIHNlbGYuY291bnRlcnMud2FybiA+IDAgeworICAgICAgICAgICAgc2VsZi5zZXRfY29sb3Io Q29sb3I6OlllbGxvdywgZmFsc2UpPzsKKyAgICAgICAgICAgIHdyaXRlbG4hKCZtdXQgc2VsZi5z dHJlYW0sICJXQVJOSU5HUzogIHt9Iiwgc2VsZi5jb3VudGVycy53YXJuKT87CisgICAgICAgIH0K KyAgICAgICAgaWYgc2VsZi5jb3VudGVycy5mYWlsID4gMCB7CisgICAgICAgICAgICBzZWxmLnNl dF9jb2xvcihDb2xvcjo6UmVkLCB0cnVlKT87CisgICAgICAgICAgICB3cml0ZWxuISgmbXV0IHNl bGYuc3RyZWFtLCAiRkFJTFVSRVM6ICB7fSIsIHNlbGYuY291bnRlcnMuZmFpbCk/OworICAgICAg ICB9CisgICAgICAgIGlmIHNlbGYuY291bnRlcnMud2FybiA+IDAgfHwgc2VsZi5jb3VudGVycy5m YWlsID4gMCB7CisgICAgICAgICAgICBsZXQgKGNvbG9yLCBib2xkKSA9IGlmIHNlbGYuY291bnRl cnMuZmFpbCA+IDAgeworICAgICAgICAgICAgICAgIChDb2xvcjo6UmVkLCB0cnVlKQorICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAoQ29sb3I6OlllbGxvdywgZmFsc2UpCisg ICAgICAgICAgICB9OworCisgICAgICAgICAgICBzZWxmLnNldF9jb2xvcihjb2xvciwgYm9sZCk/ OworICAgICAgICAgICAgd3JpdGVsbiEoCisgICAgICAgICAgICAgICAgJm11dCBzZWxmLnN0cmVh bSwKKyAgICAgICAgICAgICAgICAiXG5BVFRFTlRJT046IFBsZWFzZSBjaGVjayB0aGUgb3V0cHV0 IGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiEiLAorICAgICAgICAgICAgKT87CisgICAgICAgICAg ICBpZiBzZWxmLmNvdW50ZXJzLmZhaWwgPiAwIHsKKyAgICAgICAgICAgICAgICB3cml0ZWxuISgK KyAgICAgICAgICAgICAgICAgICAgJm11dCBzZWxmLnN0cmVhbSwKKyAgICAgICAgICAgICAgICAg ICAgIlRyeSB0byBzb2x2ZSB0aGUgcHJvYmxlbXMgb25lIGF0IGEgdGltZSBhbmQgcmVydW4gdGhp cyBjaGVja2xpc3QgdG9vbCBhZ2Fpbi4iLAorICAgICAgICAgICAgICAgICk/OworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIHNlbGYucmVzZXQoKT87CisgICAgICAgIE9rKCgpKQor ICAgIH0KK30KKworI1tjZmcodGVzdCldCittb2QgdGVzdHMgeworICAgIHVzZSBzdXBlcjo6KjsK KworICAgIGZuIHRlc3RfaXNfa2VybmVsX3ZlcnNpb25fY29tcGF0aWJsZSgKKyAgICAgICAgZXhw ZWN0ZWRfdmVyc2lvbnM6ICZbJnN0cl0sCisgICAgICAgIHVuZXhwZWN0ZWRfdmVyc2lvbnM6ICZb JnN0cl0sCisgICAgICAgIHVwZ3JhZGVkOiBib29sLAorICAgICkgeworICAgICAgICBsZXQgbXV0 IGNoZWNrZXIgPSBVcGdyYWRlQ2hlY2tlckJ1aWxkZXI6Om5ldygKKyAgICAgICAgICAgICJib29r d29ybSIsCisgICAgICAgICAgICAidHJpeGllIiwKKyAgICAgICAgICAgICJwcm94bW94LWJhY2t1 cCIsCisgICAgICAgICAgICAzLAorICAgICAgICAgICAgNCwKKyAgICAgICAgICAgIDAsCisgICAg ICAgICAgICAicnVubmluZyB2ZXJzaW9uOiAzLjQiLAorICAgICAgICApCisgICAgICAgIC5idWls ZCgpOworCisgICAgICAgIGNoZWNrZXIudXBncmFkZWQgPSB1cGdyYWRlZDsKKworICAgICAgICBm b3IgdmVyc2lvbiBpbiBleHBlY3RlZF92ZXJzaW9ucyB7CisgICAgICAgICAgICBhc3NlcnQhKAor ICAgICAgICAgICAgICAgIGNoZWNrZXIuaXNfa2VybmVsX3ZlcnNpb25fY29tcGF0aWJsZSh2ZXJz aW9uKSwKKyAgICAgICAgICAgICAgICAiY29tcGF0aWJsZSBrZXJuZWwgdmVyc2lvbiAne3ZlcnNp b259JyBkaWQgbm90IHBhc3MgYXMgZXhwZWN0ZWQhIgorICAgICAgICAgICAgKTsKKyAgICAgICAg fQorICAgICAgICBmb3IgdmVyc2lvbiBpbiB1bmV4cGVjdGVkX3ZlcnNpb25zIHsKKyAgICAgICAg ICAgIGFzc2VydCEoCisgICAgICAgICAgICAgICAgIWNoZWNrZXIuaXNfa2VybmVsX3ZlcnNpb25f Y29tcGF0aWJsZSh2ZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAiaW5jb21wYXRpYmxlIGtlcm5l bCB2ZXJzaW9uICd7dmVyc2lvbn0nIHBhc3NlZCBhcyBleHBlY3RlZCEiCisgICAgICAgICAgICAp OworICAgICAgICB9CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfYmVmb3JlX3Vw Z3JhZGVfa2VybmVsX3ZlcnNpb25fY29tcGF0aWJpbGl0eSgpIHsKKyAgICAgICAgbGV0IGV4cGVj dGVkX3ZlcnNpb25zID0gJlsiNi4yLjE2LTIwLXB2ZSIsICI2LjUuMTMtNi1wdmUiLCAiNi44LjEy LTEtcHZlIl07CisgICAgICAgIGxldCB1bmV4cGVjdGVkX3ZlcnNpb25zID0gJlsiNi4xLjEwLTEt cHZlIiwgIjUuMTkuMTctMi1wdmUiXTsKKworICAgICAgICB0ZXN0X2lzX2tlcm5lbF92ZXJzaW9u X2NvbXBhdGlibGUoZXhwZWN0ZWRfdmVyc2lvbnMsIHVuZXhwZWN0ZWRfdmVyc2lvbnMsIGZhbHNl KTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9hZnRlcl91cGdyYWRlX2tlcm5l bF92ZXJzaW9uX2NvbXBhdGliaWxpdHkoKSB7CisgICAgICAgIGxldCBleHBlY3RlZF92ZXJzaW9u cyA9ICZbIjYuMTQuNi0xLXB2ZSIsICI2LjE3LjAtMS1wdmUiXTsKKyAgICAgICAgbGV0IHVuZXhw ZWN0ZWRfdmVyc2lvbnMgPSAmWyI2LjEyLjEtMS1wdmUiLCAiNi4yLjEtMS1wdmUiXTsKKworICAg ICAgICB0ZXN0X2lzX2tlcm5lbF92ZXJzaW9uX2NvbXBhdGlibGUoZXhwZWN0ZWRfdmVyc2lvbnMs IHVuZXhwZWN0ZWRfdmVyc2lvbnMsIHRydWUpOworICAgIH0KK30KLS0KMi40Ny4zCgoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnBkbS1kZXZlbCBtYWls aW5nIGxpc3QKcGRtLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1v eC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3BkbS1kZXZlbAo=