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 3BE671FF15F for ; Mon, 2 Dec 2024 13:59:40 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1463A179FD; Mon, 2 Dec 2024 13:59:46 +0100 (CET) From: Shannon Sterz To: pbs-devel@lists.proxmox.com Date: Mon, 2 Dec 2024 13:58:56 +0100 Message-Id: <20241202125859.191455-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.038 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 v2 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 dGVzdHMgdG8gZW5zdXJlIHRoYXQgbWFpbHMgYXJlIGZvcm1hdHRlZApjb3JyZWN0bHkuCgpTaWdu ZWQtb2ZmLWJ5OiBTaGFubm9uIFN0ZXJ6IDxzLnN0ZXJ6QHByb3htb3guY29tPgotLS0KCmNoYW5n ZXMgc2luY2UgdjEgKHRoYW5rcyBAIEx1a2FzIFdhZ25lciA8bC53YWduZXJAcHJveG1veC5jb20+ KToKICAgIC0gbWFrZSBpdCBwb3NzaWJsZSB0byBkaXNhYmxlIHJlY2VpdmVyIHJlZGFjdGlvbgog ICAgLSByZS1zdHJ1Y3R1cmUgdGhlIG1hbCBmb3JtYXR0aW5nIGNvZGU7IG1haW5seSBzcGxpdCBp dCBpbnRvCiAgICAgIG11bHRpcGxlIGZ1bmN0aW9ucyAoYGZvcm1hdF9oZWFkZXJgLCBgZm9ybWF0 X2JvZHlgLAogICAgICBgZm9ybWF0X2F0dGFjaG1lbnRgIGV0Yy4pCiAgICAtIGZpeCBtdWx0aXBs ZSB0eXBvcwoKIENhcmdvLnRvbWwgICAgICAgICAgICAgICAgICB8ICAgMiArCiBwcm94bW94LXNl bmRtYWlsL0NhcmdvLnRvbWwgfCAgMTYgKwogcHJveG1veC1zZW5kbWFpbC9zcmMvbGliLnJzIHwg NzY5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2Vk LCA3ODcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHByb3htb3gtc2VuZG1haWwv Q2FyZ28udG9tbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHByb3htb3gtc2VuZG1haWwvc3JjL2xpYi5y cwoKZGlmZiAtLWdpdCBhL0NhcmdvLnRvbWwgYi9DYXJnby50b21sCmluZGV4IDg0ZmJlOTc5Li5i NjJmY2Q1MCAxMDA2NDQKLS0tIGEvQ2FyZ28udG9tbAorKysgYi9DYXJnby50b21sCkBAIC0zMyw2 ICszMyw3IEBAIG1lbWJlcnMgPSBbCiAgICAgInByb3htb3gtcnJkLWFwaS10eXBlcyIsCiAgICAg InByb3htb3gtc2NoZW1hIiwKICAgICAicHJveG1veC1zZWN0aW9uLWNvbmZpZyIsCisgICAgInBy b3htb3gtc2VuZG1haWwiLAogICAgICJwcm94bW94LXNlcmRlIiwKICAgICAicHJveG1veC1zaGFy ZWQtY2FjaGUiLAogICAgICJwcm94bW94LXNoYXJlZC1tZW1vcnkiLApAQCAtMTM4LDYgKzEzOSw3 IEBAIHByb3htb3gtcmVzdC1zZXJ2ZXIgPSB7IHZlcnNpb24gPSAiMC44LjAiLCBwYXRoID0gInBy b3htb3gtcmVzdC1zZXJ2ZXIiIH0KIHByb3htb3gtcm91dGVyID0geyB2ZXJzaW9uID0gIjMuMC4w IiwgcGF0aCA9ICJwcm94bW94LXJvdXRlciIgfQogcHJveG1veC1zY2hlbWEgPSB7IHZlcnNpb24g PSAiMy4xLjIiLCBwYXRoID0gInByb3htb3gtc2NoZW1hIiB9CiBwcm94bW94LXNlY3Rpb24tY29u ZmlnID0geyB2ZXJzaW9uID0gIjIuMS4wIiwgcGF0aCA9ICJwcm94bW94LXNlY3Rpb24tY29uZmln IiB9Citwcm94bW94LXNlbmRtYWlsID0geyB2ZXJzaW9uID0gIjAuMS4wIiwgcGF0aCA9ICJwcm94 bW94LXNlbmRtYWlsIiB9CiBwcm94bW94LXNlcmRlID0geyB2ZXJzaW9uID0gIjAuMS4xIiwgcGF0 aCA9ICJwcm94bW94LXNlcmRlIiwgZmVhdHVyZXMgPSBbICJzZXJkZV9qc29uIiBdIH0KIHByb3ht b3gtc2hhcmVkLW1lbW9yeSA9IHsgdmVyc2lvbiA9ICIwLjMuMCIsIHBhdGggPSAicHJveG1veC1z aGFyZWQtbWVtb3J5IiB9CiBwcm94bW94LXNvcnRhYmxlLW1hY3JvID0geyB2ZXJzaW9uID0gIjAu MS4zIiwgcGF0aCA9ICJwcm94bW94LXNvcnRhYmxlLW1hY3JvIiB9CmRpZmYgLS1naXQgYS9wcm94 bW94LXNlbmRtYWlsL0NhcmdvLnRvbWwgYi9wcm94bW94LXNlbmRtYWlsL0NhcmdvLnRvbWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjc5MGIzMjRiCi0tLSAvZGV2L251bGwK KysrIGIvcHJveG1veC1zZW5kbWFpbC9DYXJnby50b21sCkBAIC0wLDAgKzEsMTYgQEAKK1twYWNr YWdlXQorbmFtZSA9ICJwcm94bW94LXNlbmRtYWlsIgordmVyc2lvbiA9ICIwLjEuMCIKK2F1dGhv cnMud29ya3NwYWNlID0gdHJ1ZQorZWRpdGlvbi53b3Jrc3BhY2UgPSB0cnVlCitsaWNlbnNlLndv cmtzcGFjZSA9IHRydWUKK3JlcG9zaXRvcnkud29ya3NwYWNlID0gdHJ1ZQoraG9tZXBhZ2Uud29y a3NwYWNlID0gdHJ1ZQorZXhjbHVkZS53b3Jrc3BhY2UgPSB0cnVlCitydXN0LXZlcnNpb24ud29y a3NwYWNlID0gdHJ1ZQorCitbZGVwZW5kZW5jaWVzXQorYW55aG93ID0geyB3b3Jrc3BhY2UgPSB0 cnVlIH0KK2Jhc2U2NCA9IHsgd29ya3NwYWNlID0gdHJ1ZSB9CitwZXJjZW50LWVuY29kaW5nID0g eyB3b3Jrc3BhY2UgPSB0cnVlIH0KK3Byb3htb3gtdGltZSA9IHsgd29ya3NwYWNlID0gdHJ1ZSB9 CmRpZmYgLS1naXQgYS9wcm94bW94LXNlbmRtYWlsL3NyYy9saWIucnMgYi9wcm94bW94LXNlbmRt YWlsL3NyYy9saWIucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmE0MmJi MGNkCi0tLSAvZGV2L251bGwKKysrIGIvcHJveG1veC1zZW5kbWFpbC9zcmMvbGliLnJzCkBAIC0w LDAgKzEsNzY5IEBACisvLyEKKy8vISBUaGlzIGxpYnJhcnkgaW1wbGVtZW50cyB0aGUgW2BNYWls YF0gdHJhaXQgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBzZW5kIGVtYWlscyB3aXRoIGF0dGFjaG1l bnRzCisvLyEgYW5kIGFsdGVybmF0aXZlIGh0bWwgcGFydHMgdG8gb25lIG9yIG11bHRpcGxlIHJl Y2VpdmVycyB2aWEgYGBzZW5kbWFpbGBgLgorLy8hCisKK3VzZSBzdGQ6OmlvOjpXcml0ZTsKK3Vz ZSBzdGQ6OnByb2Nlc3M6OntDb21tYW5kLCBTdGRpb307CisKK3VzZSBhbnlob3c6OntiYWlsLCBD b250ZXh0LCBFcnJvcn07Cit1c2UgcGVyY2VudF9lbmNvZGluZzo6e3V0ZjhfcGVyY2VudF9lbmNv ZGUsIEFzY2lpU2V0LCBDT05UUk9MU307CisKKy8vIENoYXJhY3RlcnMgaW4gdGhpcyBzZXQgd2ls bCBiZSBlbmNvZGVkLCBzbyByZXByb2R1Y2UgdGhlIGludmVyc2Ugb2YgdGhlIHNldCBkZXNjcmli ZWQgYnkgUkZDNTk4NworLy8gU2VjdGlvbiAzLjIuMSBgYXR0ci1jaGFyYCwgYXMgdGhhdCBkZXNj cmliZXMgYWxsIGNoYXJhY3RlcnMgdGhhdCAqKmRvbid0KiogbmVlZCBlbmNvZGluZzoKKy8vCisv LyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzU5ODcjc2VjdGlvbi0z LjIuMQorLy8KKy8vIGBDT05UUk9MU2AgY29udGFpbnMgYWxsIGNvbnRyb2wgY2hhcmFjdGVycyAw eDAwIC0gMHgxZiBhbmQgMHg3ZiBhcyB3ZWxsIGFzIGFsbCBub24tYXNjaWkKKy8vIGNoYXJhY3Rl cnMsIHNvIHdlIG5lZWQgdG8gYWRkIGFsbCBjaGFyYWN0ZXJzIGhlcmUgdGhhdCBhcmVuJ3QgZGVz Y3JpYmVkIGluIGBhdHRyLWNoYXJgIHRoYXQgYXJlCisvLyBpbiB0aGUgcmFuZ2UgMHgyMC0weDdl Citjb25zdCBSRkM1OTg3U0VUOiAmQXNjaWlTZXQgPSAmQ09OVFJPTFMKKyAgICAuYWRkKGInICcp CisgICAgLmFkZChiJyInKQorICAgIC5hZGQoYiclJykKKyAgICAuYWRkKGInJicpCisgICAgLmFk ZChiJ1wnJykKKyAgICAuYWRkKGInKCcpCisgICAgLmFkZChiJyknKQorICAgIC5hZGQoYicqJykK KyAgICAuYWRkKGInLCcpCisgICAgLmFkZChiJy8nKQorICAgIC5hZGQoYic6JykKKyAgICAuYWRk KGInOycpCisgICAgLmFkZChiJzwnKQorICAgIC5hZGQoYic9JykKKyAgICAuYWRkKGInPicpCisg ICAgLmFkZChiJz8nKQorICAgIC5hZGQoYidAJykKKyAgICAuYWRkKGInWycpCisgICAgLmFkZChi J1xcJykKKyAgICAuYWRkKGInXScpCisgICAgLmFkZChiJ3snKQorICAgIC5hZGQoYid9Jyk7CisK K3N0cnVjdCBSZWNpcGllbnQgeworICAgIG5hbWU6IE9wdGlvbjxTdHJpbmc+LAorICAgIGVtYWls OiBTdHJpbmcsCit9CisKK2ltcGwgUmVjaXBpZW50IHsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg dGhlIG5hbWUgb2YgdGhlIHJlY2lwaWVudCBpcyB1bmRlZmluZWQgb3IgY29udGFpbnMgb25seSBh c2NpaSBjaGFyYWN0ZXJzCisgICAgZm4gaXNfYXNjaWkoJnNlbGYpIC0+IGJvb2wgeworICAgICAg ICBzZWxmLm5hbWUuYXNfcmVmKCkubWFwKHxufCBuLmlzX2FzY2lpKCkpLnVud3JhcF9vcih0cnVl KQorICAgIH0KKworICAgIGZuIGZvcm1hdF9yZWNpcGllbnQoJnNlbGYpIC0+IFN0cmluZyB7Cisg ICAgICAgIGlmIGxldCBTb21lKG5hbWUpID0gJnNlbGYubmFtZSB7CisgICAgICAgICAgICBpZiAh bmFtZS5pc19hc2NpaSgpIHsKKyAgICAgICAgICAgICAgICBmb3JtYXQhKCI9P3V0Zi04P0I/e30/ PSA8e30+IiwgYmFzZTY0OjplbmNvZGUobmFtZSksIHNlbGYuZW1haWwpCisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIGZvcm1hdCEoInt9IDx7fT4iLCBuYW1lLCBzZWxmLmVt YWlsKQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VsZi5l bWFpbC50b19zdHJpbmcoKQorICAgICAgICB9CisgICAgfQorfQorCitzdHJ1Y3QgQXR0YWNobWVu dDwnYT4geworICAgIGZpbGVuYW1lOiBTdHJpbmcsCisgICAgbWltZTogU3RyaW5nLAorICAgIGNv bnRlbnQ6ICYnYSBbdThdLAorfQorCitpbXBsPCdhPiBBdHRhY2htZW50PCdhPiB7CisgICAgZm4g Zm9ybWF0X2F0dGFjaG1lbnQoJnNlbGYsIGZpbGVfYm91bmRhcnk6ICZzdHIpIC0+IFN0cmluZyB7 CisgICAgICAgIGxldCBtdXQgYXR0YWNobWVudCA9IFN0cmluZzo6bmV3KCk7CisKKyAgICAgICAg YXR0YWNobWVudC5wdXNoX3N0cigmZm9ybWF0ISgiXG4tLXtmaWxlX2JvdW5kYXJ5fVxuIikpOwor ICAgICAgICBhdHRhY2htZW50LnB1c2hfc3RyKCZmb3JtYXQhKAorICAgICAgICAgICAgIkNvbnRl bnQtVHlwZToge307IG5hbWU9XCJ7fVwiXG4iLAorICAgICAgICAgICAgc2VsZi5taW1lLCBzZWxm LmZpbGVuYW1lCisgICAgICAgICkpOworCisgICAgICAgIC8vIGJvdGggYGZpbGVuYW1lYCBhbmQg YGZpbGVuYW1lKmAgYXJlIGluY2x1ZGVkIGZvciBhZGRpdGlvbmFsIGNvbXBhdGFiaWxpdHkKKyAg ICAgICAgYXR0YWNobWVudC5wdXNoX3N0cigmZm9ybWF0ISgKKyAgICAgICAgICAgICJDb250ZW50 LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cInt9XCI7IGZpbGVuYW1lKj1VVEYt OCcne31cbiIsCisgICAgICAgICAgICBzZWxmLmZpbGVuYW1lLAorICAgICAgICAgICAgdXRmOF9w ZXJjZW50X2VuY29kZSgmc2VsZi5maWxlbmFtZSwgUkZDNTk4N1NFVCkKKyAgICAgICAgKSk7Cisg ICAgICAgIGF0dGFjaG1lbnQucHVzaF9zdHIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJh c2U2NFxuXG4iKTsKKworICAgICAgICAvLyBiYXNlNjQgZW5jb2RlIHRoZSBhdHRhY2htZW50IGFu ZCBoYXJkLXdyYXAgdGhlIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBldmVyeSA3MgorICAgICAgICAv LyBjaGFyYWN0ZXJzLiB0aGlzIGltcHJvdmVzIGNvbXBhdGFiaWxpdHkuCisgICAgICAgIGF0dGFj aG1lbnQucHVzaF9zdHIoCisgICAgICAgICAgICAmYmFzZTY0OjplbmNvZGUoc2VsZi5jb250ZW50 KQorICAgICAgICAgICAgICAgIC5jaGFycygpCisgICAgICAgICAgICAgICAgLmVudW1lcmF0ZSgp CisgICAgICAgICAgICAgICAgLmZsYXRfbWFwKHwoaSwgYyl8IHsKKyAgICAgICAgICAgICAgICAg ICAgaWYgaSAhPSAwICYmIGkgJSA3MiA9PSAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNv bWUoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAu aW50b19pdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgLmNoYWluKHN0ZDo6aXRlcjo6b25jZShj KSkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5jb2xsZWN0Ojo8U3RyaW5n PigpLAorICAgICAgICApOworCisgICAgICAgIGF0dGFjaG1lbnQKKyAgICB9Cit9CisKKy8vLyBU aGlzIHN0cnVjdCBpcyB1c2VkIHRvIGRlZmluZSBtYWlscyB0aGF0IGFyZSB0byBiZSBzZW50IHZp YSB0aGUgYHNlbmRtYWlsYCBjb21tYW5kLgorcHViIHN0cnVjdCBNYWlsPCdhPiB7CisgICAgbWFp bF9hdXRob3I6IFN0cmluZywKKyAgICBtYWlsX2Zyb206IFN0cmluZywKKyAgICBzdWJqZWN0OiBT dHJpbmcsCisgICAgdG86IFZlYzxSZWNpcGllbnQ+LAorICAgIGJvZHlfdHh0OiBTdHJpbmcsCisg ICAgYm9keV9odG1sOiBPcHRpb248U3RyaW5nPiwKKyAgICBhdHRhY2htZW50czogVmVjPEF0dGFj aG1lbnQ8J2E+PiwKKyAgICBtYXNrX3BhcnRpY2lwYW50czogYm9vbCwKK30KKworaW1wbDwnYT4g TWFpbDwnYT4geworICAgIC8vLyBDcmVhdGVzIGEgbmV3IG1haWwgd2l0aCBhIG1haWwgYXV0aG9y LCBmcm9tIGFkZHJlc3MsIHN1YmplY3QgbGluZSBhbmQgYSBwbGFpbiB0ZXh0IGJvZHkuCisgICAg Ly8vCisgICAgLy8vIE5vdGU6IElmIHRoZSBhdXRob3IncyBuYW1lIG9yIHRoZSBzdWJqZWN0IGxp bmUgY29udGFpbnMgVVRGLTggY2hhcmFjdGVycyB0aGV5IHdpbGwgYmUKKyAgICAvLy8gYXBwcm9w cmlhdGVseSBlbmNvZGVkLgorICAgIHB1YiBmbiBuZXcobWFpbF9hdXRob3I6ICZzdHIsIG1haWxf ZnJvbTogJnN0ciwgc3ViamVjdDogJnN0ciwgYm9keV90eHQ6ICZzdHIpIC0+IFNlbGYgeworICAg ICAgICBTZWxmIHsKKyAgICAgICAgICAgIG1haWxfYXV0aG9yOiBtYWlsX2F1dGhvci50b19zdHJp bmcoKSwKKyAgICAgICAgICAgIG1haWxfZnJvbTogbWFpbF9mcm9tLnRvX3N0cmluZygpLAorICAg ICAgICAgICAgc3ViamVjdDogc3ViamVjdC50b19zdHJpbmcoKSwKKyAgICAgICAgICAgIHRvOiBW ZWM6Om5ldygpLAorICAgICAgICAgICAgYm9keV90eHQ6IGJvZHlfdHh0LnRvX3N0cmluZygpLAor ICAgICAgICAgICAgYm9keV9odG1sOiBOb25lLAorICAgICAgICAgICAgYXR0YWNobWVudHM6IFZl Yzo6bmV3KCksCisgICAgICAgICAgICBtYXNrX3BhcnRpY2lwYW50czogdHJ1ZSwKKyAgICAgICAg fQorICAgIH0KKworICAgIC8vLyBBZGRzIGEgcmVjaXBpZW50IHRvIHRoZSBtYWlsIHdpdGhvdXQg c3BlY2lmeWluZyBhIG5hbWUgc2VwYXJhdGVseS4KKyAgICAvLy8KKyAgICAvLy8gTm90ZTogTm8g Zm9ybWF0dGluZyBvciBlbmNvZGluZyB3aWxsIGJlIGRvbmUgaGVyZSwgdGhlIHZhbHVlIHdpbGwg YmUgcGFzc2VkIHRvIHRoZSBgVG86YAorICAgIC8vLyBoZWFkZXIgZGlyZWN0bHkuCisgICAgcHVi IGZuIGFkZF9yZWNpcGllbnQoJm11dCBzZWxmLCBlbWFpbDogJnN0cikgeworICAgICAgICBzZWxm LnRvLnB1c2goUmVjaXBpZW50IHsKKyAgICAgICAgICAgIG5hbWU6IE5vbmUsCisgICAgICAgICAg ICBlbWFpbDogZW1haWwudG9fc3RyaW5nKCksCisgICAgICAgIH0pOworICAgIH0KKworICAgIC8v LyBCdWlsZGVyLXBhdHRlcm4gbWV0aG9kIHRvIGNvbnZlbmllbnRseSBhZGQgYSByZWNpcGllbnQg dG8gYW4gZW1haWwgd2l0aG91dCBzcGVjaWZ5aW5nIGEKKyAgICAvLy8gbmFtZSBzZXBhcmF0ZWx5 LgorICAgIC8vLworICAgIC8vLyBOb3RlOiBObyBmb3JtYXR0aW5nIG9yIGVuY29kaW5nIHdpbGwg YmUgZG9uZSBoZXJlLCB0aGUgdmFsdWUgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBUbzpgCisgICAg Ly8vIGhlYWRlciBkaXJlY3RseS4KKyAgICBwdWIgZm4gd2l0aF9yZWNpcGllbnQobXV0IHNlbGYs IGVtYWlsOiAmc3RyKSAtPiBTZWxmIHsKKyAgICAgICAgc2VsZi5hZGRfcmVjaXBpZW50KGVtYWls KTsKKyAgICAgICAgc2VsZgorICAgIH0KKworICAgIC8vLyBBZGRzIGEgcmVjaXBpZW50IHRvIHRo ZSBtYWlsIHdpdGggYSBuYW1lLgorICAgIC8vLworICAgIC8vLyBOb3RlczoKKyAgICAvLy8KKyAg ICAvLy8gLSBJZiB0aGUgbmFtZSBjb250YWlucyBVVEYtOCBjaGFyYWN0ZXJzIGl0IHdpbGwgYmUg ZW5jb2RlZC4gVGhlbiB0aGUgcG9zc2libHkgZW5jb2RlZCBuYW1lCisgICAgLy8vICAgYW5kIG5v bi1lbmNvZGVkIGVtYWlsIGFkZHJlc3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBUbzpgIGhlYWRl ciBpbiB0aGlzIGZvcm1hdDoKKyAgICAvLy8gICBge2VuY29kZWRfbmFtZX0gPHtlbWFpbH0+YAor ICAgIC8vLyAtIElmIG11bHRpcGxlIHJlY2VpdmVycyBhcmUgc3BlY2lmaWVkLCB0aGV5IHdpbGwg YmUgbWFza2VkIHNvIGFzIG5vdCB0byBkaXNjbG9zZSB0aGVtIHRvCisgICAgLy8vICAgb3RoZXIg cmVjZWl2ZXJzLiBUaGlzIGNhbiBiZSBkaXNhYmxlZCB2aWEgW2BNYWlsOjp1bm1hc2tfcmVjaXBp ZW50c2BdIG9yCisgICAgLy8vICAgW2BNYWlsOjp3aXRoX3VubWFza2VkX3JlY2lwaWVudHNgXS4K KyAgICBwdWIgZm4gYWRkX3JlY2lwaWVudF9hbmRfbmFtZSgmbXV0IHNlbGYsIG5hbWU6ICZzdHIs IGVtYWlsOiAmc3RyKSB7CisgICAgICAgIHNlbGYudG8ucHVzaChSZWNpcGllbnQgeworICAgICAg ICAgICAgbmFtZTogU29tZShuYW1lLnRvX3N0cmluZygpKSwKKyAgICAgICAgICAgIGVtYWlsOiBl bWFpbC50b19zdHJpbmcoKSwKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8vIEJ1aWxkZXIt c3R5bGUgbWV0aG9kIHRvIGNvbnZlbmllbnRseSBhZGQgYSByZWNpcGllbnQgd2l0aCBhIG5hbWUg dG8gYW4gZW1haWwuCisgICAgLy8vCisgICAgLy8vIE5vdGVzOgorICAgIC8vLworICAgIC8vLyAt IElmIHRoZSBuYW1lIGNvbnRhaW5zIFVURi04IGNoYXJhY3RlcnMgaXQgd2lsbCBiZSBlbmNvZGVk LiBUaGVuIHRoZSBwb3NzaWJseSBlbmNvZGVkIG5hbWUKKyAgICAvLy8gICBhbmQgbm9uLWVuY29k ZWQgZW1haWwgYWRkcmVzcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgYFRvOmAgaGVhZGVyIGluIHRo aXMgZm9ybWF0OgorICAgIC8vLyAgIGB7ZW5jb2RlZF9uYW1lfSA8e2VtYWlsfT5gCisgICAgLy8v IC0gSWYgbXVsdGlwbGUgcmVjZWl2ZXJzIGFyZSBzcGVjaWZpZWQsIHRoZXkgd2lsbCBiZSBtYXNr ZWQgc28gYXMgbm90IHRvIGRpc2Nsb3NlIHRoZW0gdG8KKyAgICAvLy8gICBvdGhlciByZWNlaXZl cnMuIFRoaXMgY2FuIGJlIGRpc2FibGVkIHZpYSBbYE1haWw6OnVubWFza19yZWNpcGllbnRzYF0g b3IKKyAgICAvLy8gICBbYE1haWw6OndpdGhfdW5tYXNrZWRfcmVjaXBpZW50c2BdLgorICAgIHB1 YiBmbiB3aXRoX3JlY2lwaWVudF9hbmRfbmFtZShtdXQgc2VsZiwgbmFtZTogJnN0ciwgZW1haWw6 ICZzdHIpIC0+IFNlbGYgeworICAgICAgICBzZWxmLmFkZF9yZWNpcGllbnRfYW5kX25hbWUobmFt ZSwgZW1haWwpOworICAgICAgICBzZWxmCisgICAgfQorCisgICAgLy8vIEFkZHMgYW4gYXR0YWNo bWVudCB3aXRoIGEgc3BlY2lmaWVkIGZpbGUgbmFtZSBhbmQgbWltZS10eXBlIHRvIGFuIGVtYWls LgorICAgIC8vLworICAgIC8vLyBOb3RlOiBBZGRpbmcgYXR0YWNobWVudHMgdHJpZ2dlcnMgYG11 bHRpcGFydC9taXhlZGAgbW9kZS4KKyAgICBwdWIgZm4gYWRkX2F0dGFjaG1lbnQoJm11dCBzZWxm LCBmaWxlbmFtZTogJnN0ciwgbWltZV90eXBlOiAmc3RyLCBjb250ZW50OiAmJ2EgW3U4XSkgewor ICAgICAgICBzZWxmLmF0dGFjaG1lbnRzLnB1c2goQXR0YWNobWVudCB7CisgICAgICAgICAgICBm aWxlbmFtZTogZmlsZW5hbWUudG9fc3RyaW5nKCksCisgICAgICAgICAgICBtaW1lOiBtaW1lX3R5 cGUudG9fc3RyaW5nKCksCisgICAgICAgICAgICBjb250ZW50LAorICAgICAgICB9KTsKKyAgICB9 CisKKyAgICAvLy8gQnVpbGRlci1zdHlsZSBtZXRob2QgdG8gY29udmVuaWVudGx5IGFkZCBhbiBh dHRhY2htZW50IHdpdGggYSBzcGVjaWZpYyBmaWxlbmFtZSBhbmQKKyAgICAvLy8gbWltZS10eXBl IHRvIGFuIGVtYWlsLgorICAgIC8vLworICAgIC8vLyBOb3RlOiBBZGRpbmcgYXR0YWNoZW1lbnRz IHRyaWdnZXJzIGBtdWx0aXBhcnQvbWl4ZWRgIG1vZGUuCisgICAgcHViIGZuIHdpdGhfYXR0YWNo bWVudChtdXQgc2VsZiwgZmlsZW5hbWU6ICZzdHIsIG1pbWVfdHlwZTogJnN0ciwgY29udGVudDog JidhIFt1OF0pIC0+IFNlbGYgeworICAgICAgICBzZWxmLmFkZF9hdHRhY2htZW50KGZpbGVuYW1l LCBtaW1lX3R5cGUsIGNvbnRlbnQpOworICAgICAgICBzZWxmCisgICAgfQorCisgICAgLy8vIFNl dCBhbiBhbHRlcm5hdGl2ZSBIVE1MIHBhcnQuCisgICAgLy8vCisgICAgLy8vIE5vdGU6IFRoaXMg dHJpZ2dlcnMgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWAgbW9kZS4gSWYgYm90aCBhbiBIVE1MIHBh cnQgYW5kIGF0IGxlYXN0IG9uZQorICAgIC8vLyBhdHRhY2htZW50IGFyZSBzcGVjaWZpZWQsIHRo ZSBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYCBwYXJ0IHdpbGwgYmUgbmVzdGVkIHdpdGhpbiB0aGUg Zmlyc3QKKyAgICAvLy8gYG11bHRpcGFydC9taXhlZGAgcGFydC4gVGhpcyBzaG91bGQgZW5zdXJl IHRoYXQgdGhlIEhUTUwgaXMgZGlzcGxheWVkIHByb3Blcmx5IGJ5IGNsaWVudCdzCisgICAgLy8v IHRoYXQgcHJpb3JpdGl6ZSBpdCBvdmVyIHRoZSBwbGFpbiB0ZXh0IHBhcnQgKHNob3VsZCBiZSB0 aGUgZGVmYXVsdCBmb3IgbW9zdCBjbGllbnRzKSB3aGlsZQorICAgIC8vLyBhbHNvIHByb3Blcmx5 IGRpc3BsYXlpbmcgdGhlIGF0dGFjaG1lbnRzLgorICAgIHB1YiBmbiBzZXRfaHRtbF9hbHQoJm11 dCBzZWxmLCBib2R5X2h0bWw6ICZzdHIpIHsKKyAgICAgICAgc2VsZi5ib2R5X2h0bWwucmVwbGFj ZShib2R5X2h0bWwudG9fc3RyaW5nKCkpOworICAgIH0KKworICAgIC8vLyBCdWlsZGVyLXN0eWxl IG1ldGhvZCB0byBhZGQgYW4gYWx0ZXJuYXRpdmUgSFRNTCBwYXJ0LgorICAgIC8vLworICAgIC8v LyBOb3RlOiBUaGlzIHRyaWdnZXJzIGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgIG1vZGUuIElmIGJv dGggYW4gSFRNTCBwYXJ0IGFuZCBhdCBsZWFzdCBvbmUKKyAgICAvLy8gYXR0YWNobWVudCBhcmUg c3BlY2lmaWVkLCB0aGUgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWAgcGFydCB3aWxsIGJlIG5lc3Rl ZCB3aXRoaW4gdGhlIGZpcnN0CisgICAgLy8vIGBtdWx0aXBhcnQvbWl4ZWRgIHBhcnQuIFRoaXMg c2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBIVE1MIGlzIGRpc3BsYXllZCBwcm9wZXJseSBieSBjbGll bnQncworICAgIC8vLyB0aGF0IHByaW9yaXRpemUgaXQgb3ZlciB0aGUgcGxhaW4gdGV4dCBwYXJ0 IChzaG91bGQgYmUgdGhlIGRlZmF1bHQgZm9yIG1vc3QgY2xpZW50cykgd2hpbGUKKyAgICAvLy8g YWxzbyBwcm9wZXJseSBkaXNwbGF5aW5nIHRoZSBhdHRhY2htZW50cy4KKyAgICBwdWIgZm4gd2l0 aF9odG1sX2FsdChtdXQgc2VsZiwgYm9keV9odG1sOiAmc3RyKSAtPiBTZWxmIHsKKyAgICAgICAg c2VsZi5zZXRfaHRtbF9hbHQoYm9keV9odG1sKTsKKyAgICAgICAgc2VsZgorICAgIH0KKworICAg IC8vLyBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBtYWlsIGFy ZSBub3QgbWFza2VkLiBCZWluZyBhYmxlIHRvIHNlZSBhbGwKKyAgICAvLy8gcmVjaXBpZW50cyBv ZiBhIG1haWwgY2FuIGJlIGhlbHBmdWwgaW4sIGZvciBleGFtcGxlLCBub3RpZmljYXRpb24gc2Nl bmFyaW9zLgorICAgIHB1YiBmbiB1bm1hc2tfcmVjaXBpZW50cygmbXV0IHNlbGYpIHsKKyAgICAg ICAgc2VsZi5tYXNrX3BhcnRpY2lwYW50cyA9IGZhbHNlOworICAgIH0KKworICAgIC8vLyBCdWls ZGVyLXN0eWxlIGZ1bmN0aW9uIHRoYXQgZW5zdXJlcyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIG1h aWwgYXJlIG5vdCBtYXNrZWQuIEJlaW5nIGFibGUKKyAgICAvLy8gdG8gc2VlIGFsbCByZWNpcGll bnRzIG9mIGEgbWFpbCBjYW4gYmUgaGVscGZ1bCBpbiwgZm9yIGV4YW1wbGUsIG5vdGlmaWNhdGlv biBzY2VuYXJpb3MuCisgICAgcHViIGZuIHdpdGhfdW5tYXNrZWRfcmVjaXBpZW50cyhtdXQgc2Vs ZikgLT4gU2VsZiB7CisgICAgICAgIHNlbGYudW5tYXNrX3JlY2lwaWVudHMoKTsKKyAgICAgICAg c2VsZgorICAgIH0KKworICAgIC8vLyBTZW5kcyB0aGUgZW1haWwuIFRoaXMgd2lsbCBmYWlsIGlm IG5vIHJlY2lwaWVudHMgaGF2ZSBiZWVuIGFkZGVkLgorICAgIC8vLworICAgIC8vLyBOb3RlOiBB biBgQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkYCBoZWFkZXIgaXMgYWRkZWQgdG8gYXZv aWQgdHJpZ2dlcmluZyBPT08gYW5kCisgICAgLy8vIHNpbWlsYXIgbWFpbHMuCisgICAgcHViIGZu IHNlbmQoJnNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgaWYgc2VsZi50by5p c19lbXB0eSgpIHsKKyAgICAgICAgICAgIGJhaWwhKCJubyByZWNpcGllbnRzIHByb3ZpZGVkIGZv ciB0aGUgbWFpbCwgY2Fubm90IHNlbmQgaXQuIik7CisgICAgICAgIH0KKworICAgICAgICBsZXQg bm93ID0gcHJveG1veF90aW1lOjplcG9jaF9pNjQoKTsKKyAgICAgICAgbGV0IGJvZHkgPSBzZWxm LmZvcm1hdF9tYWlsKG5vdyk/OworCisgICAgICAgIGxldCBtdXQgc2VuZG1haWxfcHJvY2VzcyA9 IENvbW1hbmQ6Om5ldygiL3Vzci9zYmluL3NlbmRtYWlsIikKKyAgICAgICAgICAgIC5hcmcoIi1C IikKKyAgICAgICAgICAgIC5hcmcoIjhCSVRNSU1FIikKKyAgICAgICAgICAgIC5hcmcoIi1mIikK KyAgICAgICAgICAgIC5hcmcoJnNlbGYubWFpbF9mcm9tKQorICAgICAgICAgICAgLmFyZygiLS0i KQorICAgICAgICAgICAgLmFyZ3Moc2VsZi50by5pdGVyKCkubWFwKHxwfCAmcC5lbWFpbCkuY29s bGVjdDo6PFZlYzwmU3RyaW5nPj4oKSkKKyAgICAgICAgICAgIC5zdGRpbihTdGRpbzo6cGlwZWQo KSkKKyAgICAgICAgICAgIC5zcGF3bigpCisgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8ICJj b3VsZCBub3Qgc3Bhd24gc2VuZG1haWwgcHJvY2VzcyIpPzsKKworICAgICAgICBzZW5kbWFpbF9w cm9jZXNzCisgICAgICAgICAgICAuc3RkaW4KKyAgICAgICAgICAgIC5hc19yZWYoKQorICAgICAg ICAgICAgLnVud3JhcCgpCisgICAgICAgICAgICAud3JpdGVfYWxsKGJvZHkuYXNfYnl0ZXMoKSkK KyAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgImNvdWxkbid0IHdyaXRlIHRvIHNlbmRtYWls IHN0ZGluIik/OworCisgICAgICAgIHNlbmRtYWlsX3Byb2Nlc3MKKyAgICAgICAgICAgIC53YWl0 KCkKKyAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgInNlbmRtYWlsIGRpZCBub3QgZXhpdCBz dWNjZXNzZnVsbHkiKT87CisKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgZm4gZm9ybWF0 X21haWwoJnNlbGYsIG5vdzogaTY0KSAtPiBSZXN1bHQ8U3RyaW5nLCBFcnJvcj4geworICAgICAg ICBsZXQgZmlsZV9ib3VuZGFyeSA9IGZvcm1hdCEoIi0tLS1fPV9OZXh0UGFydF8wMDFfe30iLCBu b3cpOworICAgICAgICBsZXQgaHRtbF9ib3VuZGFyeSA9IGZvcm1hdCEoIi0tLS1fPV9OZXh0UGFy dF8wMDJfe30iLCBub3cpOworCisgICAgICAgIGxldCBtdXQgbWFpbCA9IHNlbGYuZm9ybWF0X2hl YWRlcihub3csICZmaWxlX2JvdW5kYXJ5LCAmaHRtbF9ib3VuZGFyeSk/OworCisgICAgICAgIG1h aWwucHVzaF9zdHIoJnNlbGYuZm9ybWF0X2JvZHkoJmZpbGVfYm91bmRhcnksICZodG1sX2JvdW5k YXJ5KT8pOworCisgICAgICAgIGlmICFzZWxmLmF0dGFjaG1lbnRzLmlzX2VtcHR5KCkgeworICAg ICAgICAgICAgbWFpbC5wdXNoX3N0cigKKyAgICAgICAgICAgICAgICAmc2VsZgorICAgICAgICAg ICAgICAgICAgICAuYXR0YWNobWVudHMKKyAgICAgICAgICAgICAgICAgICAgLml0ZXIoKQorICAg ICAgICAgICAgICAgICAgICAubWFwKHxhfCBhLmZvcm1hdF9hdHRhY2htZW50KCZmaWxlX2JvdW5k YXJ5KSkKKyAgICAgICAgICAgICAgICAgICAgLmNvbGxlY3Q6OjxTdHJpbmc+KCksCisgICAgICAg ICAgICApOworICAgICAgICAgICAgbWFpbC5wdXNoX3N0cigmZm9ybWF0ISgiXG4tLXtmaWxlX2Jv dW5kYXJ5fS0tIikpOworICAgICAgICB9CisKKyAgICAgICAgT2sobWFpbCkKKyAgICB9CisKKyAg ICBmbiBmb3JtYXRfaGVhZGVyKAorICAgICAgICAmc2VsZiwKKyAgICAgICAgbm93OiBpNjQsCisg ICAgICAgIGZpbGVfYm91bmRhcnk6ICZzdHIsCisgICAgICAgIGh0bWxfYm91bmRhcnk6ICZzdHIs CisgICAgKSAtPiBSZXN1bHQ8U3RyaW5nLCBFcnJvcj4geworICAgICAgICBsZXQgbXV0IGhlYWRl ciA9IFN0cmluZzo6bmV3KCk7CisKKyAgICAgICAgbGV0IGVuY29kZWRfdG8gPSBpZiBzZWxmLnRv LmxlbigpID4gMSAmJiBzZWxmLm1hc2tfcGFydGljaXBhbnRzIHsKKyAgICAgICAgICAgIC8vIGlm IHRoZSByZWNlaXZlcnMgYXJlIG1hc2tlZCwgd2Uga25vdyB0aGF0IHRoZXkgZG9uJ3QgbmVlZCB0 byBiZSBlbmNvZGVkCisgICAgICAgICAgICBmYWxzZQorICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSByZWNpcGllbnQgdGhhdCBuZWVkcyBlbmNvZGlu ZworICAgICAgICAgICAgc2VsZi50by5pdGVyKCkuYW55KHxyfCAhci5pc19hc2NpaSgpKQorICAg ICAgICB9OworCisgICAgICAgIGlmICFzZWxmLmF0dGFjaG1lbnRzLmlzX2VtcHR5KCkgeworICAg ICAgICAgICAgaGVhZGVyLnB1c2hfc3RyKCJDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDtc biIpOworICAgICAgICAgICAgaGVhZGVyLnB1c2hfc3RyKCZmb3JtYXQhKCJcdGJvdW5kYXJ5PVwi e2ZpbGVfYm91bmRhcnl9XCJcbiIpKTsKKyAgICAgICAgICAgIGhlYWRlci5wdXNoX3N0cigiTUlN RS1WZXJzaW9uOiAxLjBcbiIpOworICAgICAgICB9IGVsc2UgaWYgc2VsZi5ib2R5X2h0bWwuaXNf c29tZSgpIHsKKyAgICAgICAgICAgIGhlYWRlci5wdXNoX3N0cigiQ29udGVudC1UeXBlOiBtdWx0 aXBhcnQvYWx0ZXJuYXRpdmU7XG4iKTsKKyAgICAgICAgICAgIGhlYWRlci5wdXNoX3N0cigmZm9y bWF0ISgiXHRib3VuZGFyeT1cIntodG1sX2JvdW5kYXJ5fVwiXG4iKSk7CisgICAgICAgICAgICBo ZWFkZXIucHVzaF9zdHIoIk1JTUUtVmVyc2lvbjogMS4wXG4iKTsKKyAgICAgICAgfSBlbHNlIGlm ICFzZWxmLnN1YmplY3QuaXNfYXNjaWkoKSB8fCAhc2VsZi5tYWlsX2F1dGhvci5pc19hc2NpaSgp IHx8IGVuY29kZWRfdG8geworICAgICAgICAgICAgaGVhZGVyLnB1c2hfc3RyKCJNSU1FLVZlcnNp b246IDEuMFxuIik7CisgICAgICAgIH0KKworICAgICAgICBsZXQgc3ViamVjdCA9IGlmICFzZWxm LnN1YmplY3QuaXNfYXNjaWkoKSB7CisgICAgICAgICAgICBmb3JtYXQhKCJTdWJqZWN0OiA9P3V0 Zi04P0I/e30/PVxuIiwgYmFzZTY0OjplbmNvZGUoJnNlbGYuc3ViamVjdCkpCisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBmb3JtYXQhKCJTdWJqZWN0OiB7fVxuIiwgc2VsZi5zdWJqZWN0 KQorICAgICAgICB9OworCisgICAgICAgIGhlYWRlci5wdXNoX3N0cigmc3ViamVjdCk7CisKKyAg ICAgICAgbGV0IGZyb20gPSBpZiAhc2VsZi5tYWlsX2F1dGhvci5pc19hc2NpaSgpIHsKKyAgICAg ICAgICAgIGZvcm1hdCEoCisgICAgICAgICAgICAgICAgIkZyb206ID0/dXRmLTg/Qj97fT89IDx7 fT5cbiIsCisgICAgICAgICAgICAgICAgYmFzZTY0OjplbmNvZGUoJnNlbGYubWFpbF9hdXRob3Ip LAorICAgICAgICAgICAgICAgIHNlbGYubWFpbF9mcm9tCisgICAgICAgICAgICApCisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBmb3JtYXQhKCJGcm9tOiB7fSA8e30+XG4iLCBzZWxmLm1h aWxfYXV0aG9yLCBzZWxmLm1haWxfZnJvbSkKKyAgICAgICAgfTsKKworICAgICAgICBoZWFkZXIu cHVzaF9zdHIoJmZyb20pOworCisgICAgICAgIGxldCB0byA9IGlmIHNlbGYudG8ubGVuKCkgPiAx ICYmIHNlbGYubWFza19wYXJ0aWNpcGFudHMgeworICAgICAgICAgICAgLy8gZG9uJ3QgZGlzY2xv c2UgYWxsIHJlY2lwaWVudHMgaWYgdGhlIG1haWwgZ29lcyBvdXQgdG8gbXVsdGlwbGUKKyAgICAg ICAgICAgIGxldCByZWNpcGllbnQgPSBSZWNpcGllbnQgeworICAgICAgICAgICAgICAgIG5hbWU6 IFNvbWUoIlVuZGlzY2xvc2VkIi50b19zdHJpbmcoKSksCisgICAgICAgICAgICAgICAgZW1haWw6 ICJub3JlcGx5Ii50b19zdHJpbmcoKSwKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHJl Y2lwaWVudC5mb3JtYXRfcmVjaXBpZW50KCkKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IHNlbGYudG8KKyAgICAgICAgICAgICAgICAuaXRlcigpCisgICAgICAgICAgICAgICAgLm1hcChS ZWNpcGllbnQ6OmZvcm1hdF9yZWNpcGllbnQpCisgICAgICAgICAgICAgICAgLmNvbGxlY3Q6OjxW ZWM8U3RyaW5nPj4oKQorICAgICAgICAgICAgICAgIC5qb2luKCIsICIpCisgICAgICAgIH07CisK KyAgICAgICAgaGVhZGVyLnB1c2hfc3RyKCJUbzogIik7CisgICAgICAgIGhlYWRlci5wdXNoX3N0 cigmdG8pOworICAgICAgICBoZWFkZXIucHVzaCgnXG4nKTsKKworICAgICAgICBsZXQgcmZjMjgy Ml9kYXRlID0gcHJveG1veF90aW1lOjplcG9jaF90b19yZmMyODIyKG5vdykKKyAgICAgICAgICAg IC53aXRoX2NvbnRleHQofHwgImNvdWxkIG5vdCBjb252ZXJ0IGVwb2NoIHRvIHJmYzI4MjIgZGF0 ZSIpPzsKKyAgICAgICAgaGVhZGVyLnB1c2hfc3RyKCZmb3JtYXQhKCJEYXRlOiB7cmZjMjgyMl9k YXRlfVxuIikpOworICAgICAgICBoZWFkZXIucHVzaF9zdHIoIkF1dG8tU3VibWl0dGVkOiBhdXRv LWdlbmVyYXRlZDtcbiIpOworCisgICAgICAgIE9rKGhlYWRlcikKKyAgICB9CisKKyAgICBmbiBm b3JtYXRfYm9keSgmc2VsZiwgZmlsZV9ib3VuZGFyeTogJnN0ciwgaHRtbF9ib3VuZGFyeTogJnN0 cikgLT4gUmVzdWx0PFN0cmluZywgRXJyb3I+IHsKKyAgICAgICAgbGV0IG11dCBib2R5ID0gU3Ry aW5nOjpuZXcoKTsKKworICAgICAgICBpZiBzZWxmLmJvZHlfaHRtbC5pc19zb21lKCkgJiYgIXNl bGYuYXR0YWNobWVudHMuaXNfZW1wdHkoKSB7CisgICAgICAgICAgICBib2R5LnB1c2hfc3RyKCJc blRoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuXG4iKTsKKyAgICAg ICAgICAgIGJvZHkucHVzaF9zdHIoJmZvcm1hdCEoIlxuLS17ZmlsZV9ib3VuZGFyeX1cbiIpKTsK KyAgICAgICAgICAgIGJvZHkucHVzaF9zdHIoJmZvcm1hdCEoCisgICAgICAgICAgICAgICAgIkNv bnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT1cIntodG1sX2JvdW5k YXJ5fVwiXG4iCisgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIGJvZHkucHVzaF9zdHIoIk1J TUUtVmVyc2lvbjogMS4wXG4iKTsKKyAgICAgICAgICAgIGJvZHkucHVzaF9zdHIoJmZvcm1hdCEo IlxuLS17aHRtbF9ib3VuZGFyeX1cbiIpKTsKKyAgICAgICAgfSBlbHNlIGlmIHNlbGYuYm9keV9o dG1sLmlzX3NvbWUoKSB7CisgICAgICAgICAgICBib2R5LnB1c2hfc3RyKCJcblRoaXMgaXMgYSBt dWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuXG4iKTsKKyAgICAgICAgICAgIGJvZHku cHVzaF9zdHIoJmZvcm1hdCEoIlxuLS17aHRtbF9ib3VuZGFyeX1cbiIpKTsKKyAgICAgICAgfSBl bHNlIGlmIHNlbGYuYm9keV9odG1sLmlzX25vbmUoKSAmJiAhc2VsZi5hdHRhY2htZW50cy5pc19l bXB0eSgpIHsKKyAgICAgICAgICAgIGJvZHkucHVzaF9zdHIoIlxuVGhpcyBpcyBhIG11bHRpLXBh cnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC5cbiIpOworICAgICAgICAgICAgYm9keS5wdXNoX3N0 cigmZm9ybWF0ISgiXG4tLXtmaWxlX2JvdW5kYXJ5fVxuIikpOworICAgICAgICB9CisKKyAgICAg ICAgYm9keS5wdXNoX3N0cigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluO1xuIik7CisgICAgICAg IGJvZHkucHVzaF9zdHIoIlx0Y2hhcnNldD1cIlVURi04XCJcbiIpOworICAgICAgICBib2R5LnB1 c2hfc3RyKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG5cbiIpOworICAgICAgICBi b2R5LnB1c2hfc3RyKCZzZWxmLmJvZHlfdHh0KTsKKworICAgICAgICBpZiBsZXQgU29tZShodG1s KSA9ICZzZWxmLmJvZHlfaHRtbCB7CisgICAgICAgICAgICBib2R5LnB1c2hfc3RyKCZmb3JtYXQh KCJcbi0te2h0bWxfYm91bmRhcnl9XG4iKSk7CisgICAgICAgICAgICBib2R5LnB1c2hfc3RyKCJD b250ZW50LVR5cGU6IHRleHQvaHRtbDtcbiIpOworICAgICAgICAgICAgYm9keS5wdXNoX3N0cigi XHRjaGFyc2V0PVwiVVRGLThcIlxuIik7CisgICAgICAgICAgICBib2R5LnB1c2hfc3RyKCJDb250 ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG5cbiIpOworICAgICAgICAgICAgYm9keS5wdXNo X3N0cihodG1sKTsKKyAgICAgICAgICAgIGJvZHkucHVzaF9zdHIoJmZvcm1hdCEoIlxuLS17aHRt bF9ib3VuZGFyeX0tLSIpKTsKKyAgICAgICAgfQorCisgICAgICAgIE9rKGJvZHkpCisgICAgfQor fQorCisjW2NmZyh0ZXN0KV0KK21vZCB0ZXN0IHsKKyAgICB1c2Ugc3VwZXI6Oio7CisKKyAgICAj W3Rlc3RdCisgICAgZm4gZW1haWxfd2l0aG91dF9yZWNpcGllbnRzX2ZhaWxzKCkgeworICAgICAg ICBsZXQgcmVzdWx0ID0gTWFpbDo6bmV3KCJTZW5kZXIiLCAibWFpbEBleGFtcGxlLmNvbSIsICJo aSIsICJib2R5Iikuc2VuZCgpOworICAgICAgICBhc3NlcnQhKHJlc3VsdC5pc19lcnIoKSk7Cisg ICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHNpbXBsZV9hc2NpaV90ZXh0X21haWwoKSB7Cisg ICAgICAgIGxldCBtYWlsID0gTWFpbDo6bmV3KAorICAgICAgICAgICAgIlNlbmRlciBOYW1lIiwK KyAgICAgICAgICAgICJtYWlsZnJvbUBleGFtcGxlLmNvbSIsCisgICAgICAgICAgICAiU3ViamVj dCBMaW5lIiwKKyAgICAgICAgICAgICJUaGlzIGlzIGp1c3QgYXNjaWkgdGV4dC5cbk5vdGhpbmcg dG9vIHNwZWNpYWwuIiwKKyAgICAgICAgKQorICAgICAgICAud2l0aF9yZWNpcGllbnRfYW5kX25h bWUoIlJlY2VpdmVyIE5hbWUiLCAicmVjZWl2ZXJAZXhhbXBsZS5jb20iKTsKKworICAgICAgICBs ZXQgYm9keSA9IG1haWwuZm9ybWF0X21haWwoMCkuZXhwZWN0KCJjb3VsZCBub3QgZm9ybWF0IG1h aWwiKTsKKworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgYm9keSwKKyAgICAgICAg ICAgIHIjIlN1YmplY3Q6IFN1YmplY3QgTGluZQorRnJvbTogU2VuZGVyIE5hbWUgPG1haWxmcm9t QGV4YW1wbGUuY29tPgorVG86IFJlY2VpdmVyIE5hbWUgPHJlY2VpdmVyQGV4YW1wbGUuY29tPgor RGF0ZTogVGh1LCAwMSBKYW4gMTk3MCAwMTowMDowMCArMDEwMAorQXV0by1TdWJtaXR0ZWQ6IGF1 dG8tZ2VuZXJhdGVkOworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOworCWNoYXJzZXQ9IlVURi04 IgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGlzIGlzIGp1c3QgYXNjaWkg dGV4dC4KK05vdGhpbmcgdG9vIHNwZWNpYWwuIiMKKyAgICAgICAgKQorICAgIH0KKworICAgICNb dGVzdF0KKyAgICBmbiBtdWx0aXBsZV9yZWNlaXZlcl9tYXNrZWQoKSB7CisgICAgICAgIGxldCBt YWlsID0gTWFpbDo6bmV3KAorICAgICAgICAgICAgIlNlbmRlciBOYW1lIiwKKyAgICAgICAgICAg ICJtYWlsZnJvbUBleGFtcGxlLmNvbSIsCisgICAgICAgICAgICAiU3ViamVjdCBMaW5lIiwKKyAg ICAgICAgICAgICJUaGlzIGlzIGp1c3QgYXNjaWkgdGV4dC5cbk5vdGhpbmcgdG9vIHNwZWNpYWwu IiwKKyAgICAgICAgKQorICAgICAgICAud2l0aF9yZWNpcGllbnRfYW5kX25hbWUoIlJlY2VpdmVy IE5hbWUiLCAicmVjZWl2ZXJAZXhhbXBsZS5jb20iKQorICAgICAgICAud2l0aF9yZWNpcGllbnQo InR3b0BleGFtcGxlLmNvbSIpCisgICAgICAgIC53aXRoX3JlY2lwaWVudF9hbmRfbmFtZSgibcOk eCBtw7xzdGVybcOkbm4iLCAibW1AZXhhbXBsZS5jb20iKTsKKworICAgICAgICBsZXQgYm9keSA9 IG1haWwuZm9ybWF0X21haWwoMCkuZXhwZWN0KCJjb3VsZCBub3QgZm9ybWF0IG1haWwiKTsKKwor ICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgYm9keSwKKyAgICAgICAgICAgIHIjIlN1 YmplY3Q6IFN1YmplY3QgTGluZQorRnJvbTogU2VuZGVyIE5hbWUgPG1haWxmcm9tQGV4YW1wbGUu Y29tPgorVG86IFVuZGlzY2xvc2VkIDxub3JlcGx5PgorRGF0ZTogVGh1LCAwMSBKYW4gMTk3MCAw MTowMDowMCArMDEwMAorQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkOworQ29udGVudC1U eXBlOiB0ZXh0L3BsYWluOworCWNoYXJzZXQ9IlVURi04IgorQ29udGVudC1UcmFuc2Zlci1FbmNv ZGluZzogOGJpdAorCitUaGlzIGlzIGp1c3QgYXNjaWkgdGV4dC4KK05vdGhpbmcgdG9vIHNwZWNp YWwuIiMKKyAgICAgICAgKQorICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiBtdWx0aXBsZV9y ZWNlaXZlcl91bm1hc2tlZCgpIHsKKyAgICAgICAgbGV0IG1haWwgPSBNYWlsOjpuZXcoCisgICAg ICAgICAgICAiU2VuZGVyIE5hbWUiLAorICAgICAgICAgICAgIm1haWxmcm9tQGV4YW1wbGUuY29t IiwKKyAgICAgICAgICAgICJTdWJqZWN0IExpbmUiLAorICAgICAgICAgICAgIlRoaXMgaXMganVz dCBhc2NpaSB0ZXh0LlxuTm90aGluZyB0b28gc3BlY2lhbC4iLAorICAgICAgICApCisgICAgICAg IC53aXRoX3JlY2lwaWVudF9hbmRfbmFtZSgiUmVjZWl2ZXIgTmFtZSIsICJyZWNlaXZlckBleGFt cGxlLmNvbSIpCisgICAgICAgIC53aXRoX3JlY2lwaWVudCgidHdvQGV4YW1wbGUuY29tIikKKyAg ICAgICAgLndpdGhfcmVjaXBpZW50X2FuZF9uYW1lKCJtw6R4IG3DvHN0ZXJtw6RubiIsICJtbUBl eGFtcGxlLmNvbSIpCisgICAgICAgIC53aXRoX3VubWFza2VkX3JlY2lwaWVudHMoKTsKKworICAg ICAgICBsZXQgYm9keSA9IG1haWwuZm9ybWF0X21haWwoMCkuZXhwZWN0KCJjb3VsZCBub3QgZm9y bWF0IG1haWwiKTsKKworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgYm9keSwKKyAg ICAgICAgICAgIHIjIk1JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBTdWJqZWN0IExpbmUKK0Zy b206IFNlbmRlciBOYW1lIDxtYWlsZnJvbUBleGFtcGxlLmNvbT4KK1RvOiBSZWNlaXZlciBOYW1l IDxyZWNlaXZlckBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbSwgPT91dGYtOD9CP2JjT2tl Q0J0dzd4emRHVnliY09rYm00PT89IDxtbUBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSwgMDEgSmFu IDE5NzAgMDE6MDA6MDAgKzAxMDAKK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZDsKK0Nv bnRlbnQtVHlwZTogdGV4dC9wbGFpbjsKKwljaGFyc2V0PSJVVEYtOCIKK0NvbnRlbnQtVHJhbnNm ZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyBpcyBqdXN0IGFzY2lpIHRleHQuCitOb3RoaW5nIHRv byBzcGVjaWFsLiIjCisgICAgICAgICkKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gc2lt cGxlX3V0ZjhfdGV4dF9tYWlsKCkgeworICAgICAgICBsZXQgbWFpbCA9IE1haWw6Om5ldygKKyAg ICAgICAgICAgICJVVEYtOCBTZW5kZXIgTmFtZSDwn5OnIiwKKyAgICAgICAgICAgICJkaWZmZXJl bnRmcm9tQGV4YW1wbGUuY29tIiwKKyAgICAgICAgICAgICJTdWJqZWN0IExpbmUg8J+nkSIsCisg ICAgICAgICAgICAiVGhpcyB1dGYtOCBlbWFpbCBzaG91bGQgaGFuZGxlIGVtb2ppc1xu8J+nkfCf k6dcbmFuZCB3ZWlyZCBnZXJtYW4gY2hhcmFjdGVyczogw7bDpMO8w59cbmFuZCBtb3JlLiIsCisg ICAgICAgICkKKyAgICAgICAgLndpdGhfcmVjaXBpZW50X2FuZF9uYW1lKCJSZWNlaXZlciBOYW1l 8J+TqSIsICJyZWNlaXZlckBleGFtcGxlLmNvbSIpOworCisgICAgICAgIGxldCBib2R5ID0gbWFp bC5mb3JtYXRfbWFpbCgxNzMyODA2MjUxKS5leHBlY3QoImNvdWxkIG5vdCBmb3JtYXQgbWFpbCIp OworCisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICBib2R5LAorICAgICAgICAgICAg ciMiTUlNRS1WZXJzaW9uOiAxLjAKK1N1YmplY3Q6ID0/dXRmLTg/Qj9VM1ZpYW1WamRDQk1hVzVs SVBDZnA1RT0/PQorRnJvbTogPT91dGYtOD9CP1ZWUkdMVGdnVTJWdVpHVnlJRTVoYldVZzhKK1Rw dz09Pz0gPGRpZmZlcmVudGZyb21AZXhhbXBsZS5jb20+CitUbzogPT91dGYtOD9CP1VtVmpaV2wy WlhJZ1RtRnRaZkNmazZrPT89IDxyZWNlaXZlckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSwgMjgg Tm92IDIwMjQgMTY6MDQ6MTEgKzAxMDAKK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZDsK K0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsKKwljaGFyc2V0PSJVVEYtOCIKK0NvbnRlbnQtVHJh bnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyB1dGYtOCBlbWFpbCBzaG91bGQgaGFuZGxlIGVt b2ppcwor8J+nkfCfk6cKK2FuZCB3ZWlyZCBnZXJtYW4gY2hhcmFjdGVyczogw7bDpMO8w58KK2Fu ZCBtb3JlLiIjCisgICAgICAgICkKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gbXVsdGlw YXJ0X2h0bWxfYWx0ZXJuYXRpdmUoKSB7CisgICAgICAgIGxldCBtYWlsID0gTWFpbDo6bmV3KAor ICAgICAgICAgICAgIlNlbmRlciBOYW1lIiwKKyAgICAgICAgICAgICJmcm9tQGV4YW1wbGUuY29t IiwKKyAgICAgICAgICAgICJTdWJqZWN0IExpbmUiLAorICAgICAgICAgICAgIkxvcmVtIElwc3Vt IERvbG9yIFNpdFxuQW1ldCIsCisgICAgICAgICkKKyAgICAgICAgLndpdGhfcmVjaXBpZW50KCJy ZWNlaXZlckBleGFtcGxlLmNvbSIpCisgICAgICAgIC53aXRoX2h0bWxfYWx0KCI8aHRtbCBsYW5n PVwiZGUtYXRcIj48aGVhZD48L2hlYWQ+PGJvZHk+XG5cdDxwcmU+XG5cdFx0TG9yZW0gSXBzdW0g RG9sb3IgU2l0IEFtZXRcblx0PC9wcmU+XG48L2JvZHk+PC9odG1sPiIpOworICAgICAgICBsZXQg Ym9keSA9IG1haWwuZm9ybWF0X21haWwoMTczMjgwNjI1MSkuZXhwZWN0KCJjb3VsZCBub3QgZm9y bWF0IG1haWwiKTsKKyAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAgICAgIGJvZHksCisgICAg ICAgICAgICByIyJDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsKKwlib3VuZGFy eT0iLS0tLV89X05leHRQYXJ0XzAwMl8xNzMyODA2MjUxIgorTUlNRS1WZXJzaW9uOiAxLjAKK1N1 YmplY3Q6IFN1YmplY3QgTGluZQorRnJvbTogU2VuZGVyIE5hbWUgPGZyb21AZXhhbXBsZS5jb20+ CitUbzogcmVjZWl2ZXJAZXhhbXBsZS5jb20KK0RhdGU6IFRodSwgMjggTm92IDIwMjQgMTY6MDQ6 MTEgKzAxMDAKK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZDsKKworVGhpcyBpcyBhIG11 bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKworLS0tLS0tXz1fTmV4dFBhcnRfMDAy XzE3MzI4MDYyNTEKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsKKwljaGFyc2V0PSJVVEYtOCIK K0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworTG9yZW0gSXBzdW0gRG9sb3IgU2l0 CitBbWV0CistLS0tLS1fPV9OZXh0UGFydF8wMDJfMTczMjgwNjI1MQorQ29udGVudC1UeXBlOiB0 ZXh0L2h0bWw7CisJY2hhcnNldD0iVVRGLTgiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4 Yml0CisKKzxodG1sIGxhbmc9ImRlLWF0Ij48aGVhZD48L2hlYWQ+PGJvZHk+CisJPHByZT4KKwkJ TG9yZW0gSXBzdW0gRG9sb3IgU2l0IEFtZXQKKwk8L3ByZT4KKzwvYm9keT48L2h0bWw+CistLS0t LS1fPV9OZXh0UGFydF8wMDJfMTczMjgwNjI1MS0tIiMKKyAgICAgICAgKQorICAgIH0KKworICAg ICNbdGVzdF0KKyAgICBmbiBtdWx0aXBhcnRfcGxhaW5fdGV4dF9hdHRhY2htZW50c19taXhlZCgp IHsKKyAgICAgICAgbGV0IGJpbjogW3U4OyA2Ml0gPSBbCisgICAgICAgICAgICAweGRlLCAweGFk LCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAw eGVmLCAweGRlLCAweGFkLAorICAgICAgICAgICAgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhk ZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwK KyAgICAgICAgICAgIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4 ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsCisgICAgICAgICAgICAweGRl LCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAw eGJlLCAweGVmLCAweGRlLCAweGFkLAorICAgICAgICAgICAgMHhiZSwgMHhlZiwgMHhkZSwgMHhh ZCwgMHhiZSwgMHhlZiwKKyAgICAgICAgXTsKKworICAgICAgICBsZXQgbWFpbCA9IE1haWw6Om5l dygKKyAgICAgICAgICAgICJTZW5kZXIgTmFtZSIsCisgICAgICAgICAgICAiZnJvbUBleGFtcGxl LmNvbSIsCisgICAgICAgICAgICAiU3ViamVjdCBMaW5lIiwKKyAgICAgICAgICAgICJMb3JlbSBJ cHN1bSBEb2xvciBTaXRcbkFtZXQiLAorICAgICAgICApCisgICAgICAgIC53aXRoX3JlY2lwaWVu dF9hbmRfbmFtZSgiUmVjZWl2ZXIgTmFtZSIsICJyZWNlaXZlckBleGFtcGxlLmNvbSIpCisgICAg ICAgIC53aXRoX2F0dGFjaG1lbnQoImRlYWRiZWVmLmJpbiIsICJhcHBsaWNhdGlvbi9vY3RldC1z dHJlYW0iLCAmYmluKTsKKworICAgICAgICBsZXQgYm9keSA9IG1haWwuZm9ybWF0X21haWwoMTcz MjgwNjI1MSkuZXhwZWN0KCJjb3VsZCBub3QgZm9ybWF0IG1haWwiKTsKKyAgICAgICAgYXNzZXJ0 X2VxISgKKyAgICAgICAgICAgIGJvZHksCisgICAgICAgICAgICByIyJDb250ZW50LVR5cGU6IG11 bHRpcGFydC9taXhlZDsKKwlib3VuZGFyeT0iLS0tLV89X05leHRQYXJ0XzAwMV8xNzMyODA2MjUx IgorTUlNRS1WZXJzaW9uOiAxLjAKK1N1YmplY3Q6IFN1YmplY3QgTGluZQorRnJvbTogU2VuZGVy IE5hbWUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogUmVjZWl2ZXIgTmFtZSA8cmVjZWl2ZXJAZXhh bXBsZS5jb20+CitEYXRlOiBUaHUsIDI4IE5vdiAyMDI0IDE2OjA0OjExICswMTAwCitBdXRvLVN1 Ym1pdHRlZDogYXV0by1nZW5lcmF0ZWQ7CisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2Ug aW4gTUlNRSBmb3JtYXQuCisKKy0tLS0tLV89X05leHRQYXJ0XzAwMV8xNzMyODA2MjUxCitDb250 ZW50LVR5cGU6IHRleHQvcGxhaW47CisJY2hhcnNldD0iVVRGLTgiCitDb250ZW50LVRyYW5zZmVy LUVuY29kaW5nOiA4Yml0CisKK0xvcmVtIElwc3VtIERvbG9yIFNpdAorQW1ldAorLS0tLS0tXz1f TmV4dFBhcnRfMDAxXzE3MzI4MDYyNTEKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQt c3RyZWFtOyBuYW1lPSJkZWFkYmVlZi5iaW4iCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2ht ZW50OyBmaWxlbmFtZT0iZGVhZGJlZWYuYmluIjsgZmlsZW5hbWUqPVVURi04JydkZWFkYmVlZi5i aW4KK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCiszcTIrNzk2dHZ1L2VyYjd2 M3EzZXJiN3YzcTIrNzk2dHZ1L2VyZDZ0dnUvZXJiN3YzcTIrNzk2dDNxMis3OTZ0dnUvZXJiN3YK KzNxMis3OTZ0dnU4PQorLS0tLS0tXz1fTmV4dFBhcnRfMDAxXzE3MzI4MDYyNTEtLSIjCisgICAg ICAgICkKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gbXVsdGlwYXJ0X3BsYWluX3RleHRf aHRtbF9hbHRlcm5hdGl2ZV9hdHRhY2htZW50cygpIHsKKyAgICAgICAgbGV0IGJpbjogW3U4OyA2 Ml0gPSBbCisgICAgICAgICAgICAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAw eGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLAorICAgICAgICAg ICAgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwg MHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwKKyAgICAgICAgICAgIDB4ZGUsIDB4YWQsIDB4 YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYs IDB4ZGUsIDB4YWQsCisgICAgICAgICAgICAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAw eGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLAorICAg ICAgICAgICAgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwKKyAgICAgICAgXTsK KworICAgICAgICBsZXQgbWFpbCA9IE1haWw6Om5ldygKKyAgICAgICAgICAgICJTZW5kZXIgTmFt ZSIsCisgICAgICAgICAgICAiZnJvbUBleGFtcGxlLmNvbSIsCisgICAgICAgICAgICAiU3ViamVj dCBMaW5lIiwKKyAgICAgICAgICAgICJMb3JlbSBJcHN1bSBEb2xvciBTaXRcbkFtZXQiLAorICAg ICAgICApCisgICAgICAgIC53aXRoX3JlY2lwaWVudF9hbmRfbmFtZSgiUmVjZWl2ZXIgTmFtZSIs ICJyZWNlaXZlckBleGFtcGxlLmNvbSIpCisgICAgICAgIC53aXRoX2F0dGFjaG1lbnQoImRlYWRi ZWVmLmJpbiIsICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCAmYmluKQorICAgICAgICAud2l0 aF9hdHRhY2htZW50KCLwn5CE8J+SgC5iaW4iLCAiaW1hZ2UvYm1wIiwgJmJpbikKKyAgICAgICAg LndpdGhfaHRtbF9hbHQoIjxodG1sIGxhbmc9XCJkZS1hdFwiPjxoZWFkPjwvaGVhZD48Ym9keT5c blx0PHByZT5cblx0XHRMb3JlbSBJcHN1bSBEb2xvciBTaXQgQW1ldFxuXHQ8L3ByZT5cbjwvYm9k eT48L2h0bWw+Iik7CisKKyAgICAgICAgbGV0IGJvZHkgPSBtYWlsLmZvcm1hdF9tYWlsKDE3MzI4 MDYyNTEpLmV4cGVjdCgiY291bGQgbm90IGZvcm1hdCBtYWlsIik7CisKKyAgICAgICAgYXNzZXJ0 X2VxISgKKyAgICAgICAgICAgIGJvZHksCisgICAgICAgICAgICByIyJDb250ZW50LVR5cGU6IG11 bHRpcGFydC9taXhlZDsKKwlib3VuZGFyeT0iLS0tLV89X05leHRQYXJ0XzAwMV8xNzMyODA2MjUx IgorTUlNRS1WZXJzaW9uOiAxLjAKK1N1YmplY3Q6IFN1YmplY3QgTGluZQorRnJvbTogU2VuZGVy IE5hbWUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogUmVjZWl2ZXIgTmFtZSA8cmVjZWl2ZXJAZXhh bXBsZS5jb20+CitEYXRlOiBUaHUsIDI4IE5vdiAyMDI0IDE2OjA0OjExICswMTAwCitBdXRvLVN1 Ym1pdHRlZDogYXV0by1nZW5lcmF0ZWQ7CisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2Ug aW4gTUlNRSBmb3JtYXQuCisKKy0tLS0tLV89X05leHRQYXJ0XzAwMV8xNzMyODA2MjUxCitDb250 ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Ii0tLS1fPV9OZXh0UGFy dF8wMDJfMTczMjgwNjI1MSIKK01JTUUtVmVyc2lvbjogMS4wCisKKy0tLS0tLV89X05leHRQYXJ0 XzAwMl8xNzMyODA2MjUxCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47CisJY2hhcnNldD0iVVRG LTgiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0xvcmVtIElwc3VtIERvbG9y IFNpdAorQW1ldAorLS0tLS0tXz1fTmV4dFBhcnRfMDAyXzE3MzI4MDYyNTEKK0NvbnRlbnQtVHlw ZTogdGV4dC9odG1sOworCWNoYXJzZXQ9IlVURi04IgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu ZzogOGJpdAorCis8aHRtbCBsYW5nPSJkZS1hdCI+PGhlYWQ+PC9oZWFkPjxib2R5PgorCTxwcmU+ CisJCUxvcmVtIElwc3VtIERvbG9yIFNpdCBBbWV0CisJPC9wcmU+Cis8L2JvZHk+PC9odG1sPgor LS0tLS0tXz1fTmV4dFBhcnRfMDAyXzE3MzI4MDYyNTEtLQorLS0tLS0tXz1fTmV4dFBhcnRfMDAx XzE3MzI4MDYyNTEKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtOyBuYW1l PSJkZWFkYmVlZi5iaW4iCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFt ZT0iZGVhZGJlZWYuYmluIjsgZmlsZW5hbWUqPVVURi04JydkZWFkYmVlZi5iaW4KK0NvbnRlbnQt VHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCiszcTIrNzk2dHZ1L2VyYjd2M3EzZXJiN3YzcTIr Nzk2dHZ1L2VyZDZ0dnUvZXJiN3YzcTIrNzk2dDNxMis3OTZ0dnUvZXJiN3YKKzNxMis3OTZ0dnU4 PQorLS0tLS0tXz1fTmV4dFBhcnRfMDAxXzE3MzI4MDYyNTEKK0NvbnRlbnQtVHlwZTogaW1hZ2Uv Ym1wOyBuYW1lPSLwn5CE8J+SgC5iaW4iCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50 OyBmaWxlbmFtZT0i8J+QhPCfkoAuYmluIjsgZmlsZW5hbWUqPVVURi04JyclRjAlOUYlOTAlODQl RjAlOUYlOTIlODAuYmluCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworM3Ey Kzc5NnR2dS9lcmI3djNxM2VyYjd2M3EyKzc5NnR2dS9lcmQ2dHZ1L2VyYjd2M3EyKzc5NnQzcTIr Nzk2dHZ1L2VyYjd2CiszcTIrNzk2dHZ1OD0KKy0tLS0tLV89X05leHRQYXJ0XzAwMV8xNzMyODA2 MjUxLS0iIworICAgICAgICApCisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfZm9y bWF0X21haWxfbXVsdGlwYXJ0KCkgeworICAgICAgICBsZXQgbWFpbCA9IE1haWw6Om5ldygKKyAg ICAgICAgICAgICJGcmVkIE9vYmFyIiwKKyAgICAgICAgICAgICJmb29iYXJAZXhhbXBsZS5jb20i LAorICAgICAgICAgICAgIlRoaXMgaXMgdGhlIHN1YmplY3QiLAorICAgICAgICAgICAgIlRoaXMg aXMgdGhlIHBsYWluIGJvZHkiLAorICAgICAgICApCisgICAgICAgIC53aXRoX3JlY2lwaWVudF9h bmRfbmFtZSgiVG9ueSBFc3QiLCAidGVzdEBleGFtcGxlLmNvbSIpCisgICAgICAgIC53aXRoX2h0 bWxfYWx0KCI8Ym9keT5UaGlzIGlzIHRoZSBIVE1MIGJvZHk8L2JvZHk+Iik7CisKKyAgICAgICAg bGV0IGJvZHkgPSBtYWlsLmZvcm1hdF9tYWlsKDE3MTg5Nzc4NTApLmV4cGVjdCgiY291bGQgbm90 IGZvcm1hdCBtYWlsIik7CisKKyAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAgICAgIGJvZHks CisgICAgICAgICAgICByIyJDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsKKwli b3VuZGFyeT0iLS0tLV89X05leHRQYXJ0XzAwMl8xNzE4OTc3ODUwIgorTUlNRS1WZXJzaW9uOiAx LjAKK1N1YmplY3Q6IFRoaXMgaXMgdGhlIHN1YmplY3QKK0Zyb206IEZyZWQgT29iYXIgPGZvb2Jh ckBleGFtcGxlLmNvbT4KK1RvOiBUb255IEVzdCA8dGVzdEBleGFtcGxlLmNvbT4KK0RhdGU6IEZy aSwgMjEgSnVuIDIwMjQgMTU6NTA6NTAgKzAyMDAKK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVy YXRlZDsKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKwor LS0tLS0tXz1fTmV4dFBhcnRfMDAyXzE3MTg5Nzc4NTAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFp bjsKKwljaGFyc2V0PSJVVEYtOCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKwor VGhpcyBpcyB0aGUgcGxhaW4gYm9keQorLS0tLS0tXz1fTmV4dFBhcnRfMDAyXzE3MTg5Nzc4NTAK K0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOworCWNoYXJzZXQ9IlVURi04IgorQ29udGVudC1UcmFu c2Zlci1FbmNvZGluZzogOGJpdAorCis8Ym9keT5UaGlzIGlzIHRoZSBIVE1MIGJvZHk8L2JvZHk+ CistLS0tLS1fPV9OZXh0UGFydF8wMDJfMTcxODk3Nzg1MC0tIiMKKyAgICAgICAgKTsKKyAgICB9 Cit9Ci0tCjIuMzkuNQoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpwYnMtZGV2ZWwgbWFpbGluZyBsaXN0CnBicy1kZXZlbEBsaXN0cy5wcm94bW94LmNv bQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wYnMt ZGV2ZWwK