From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 1C0511FF16B for ; Tue, 15 Jul 2025 16:33:02 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 7F811806C; Tue, 15 Jul 2025 16:32:36 +0200 (CEST) From: Aaron Lauterer To: pve-devel@lists.proxmox.com Date: Tue, 15 Jul 2025 16:31:49 +0200 Message-Id: <20250715143218.1548306-6-a.lauterer@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250715143218.1548306-1-a.lauterer@proxmox.com> References: <20250715143218.1548306-1-a.lauterer@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.017 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_MSPIKE_H2 0.001 Average reputation (+2) SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH pve9-rrd-migration-tool v3 1/1] introduce rrd migration tool for pve8 -> pve9 X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" U2lnbmVkLW9mZi1ieTogQWFyb24gTGF1dGVyZXIgPGEubGF1dGVyZXJAcHJveG1veC5jb20+Ci0t LQogLmNhcmdvL2NvbmZpZy50b21sICAgICAgfCAgIDUgKwogLmdpdGlnbm9yZSAgICAgICAgICAg ICAgfCAgIDUgKwogQ2FyZ28udG9tbCAgICAgICAgICAgICAgfCAgMjAgKysKIGJ1aWxkLnJzICAg ICAgICAgICAgICAgIHwgIDI5ICsrKwogc3JjL2xpYi5ycyAgICAgICAgICAgICAgfCAgIDUgKwog c3JjL21haW4ucnMgICAgICAgICAgICAgfCA1MDIgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogc3JjL3BhcmFsbGVsX2hhbmRsZXIucnMgfCAxNjIgKysrKysrKysrKysr Kwogd3JhcHBlci5oICAgICAgICAgICAgICAgfCAgIDEgKwogOCBmaWxlcyBjaGFuZ2VkLCA3Mjkg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IC5jYXJnby9jb25maWcudG9tbAogY3Jl YXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDYXJnby50b21s CiBjcmVhdGUgbW9kZSAxMDA2NDQgYnVpbGQucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvbGli LnJzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL21haW4ucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvcGFyYWxsZWxfaGFuZGxlci5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHdyYXBwZXIuaAoKZGlm ZiAtLWdpdCBhLy5jYXJnby9jb25maWcudG9tbCBiLy5jYXJnby9jb25maWcudG9tbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjViNmU0Ci0tLSAvZGV2L251bGwKKysrIGIv LmNhcmdvL2NvbmZpZy50b21sCkBAIC0wLDAgKzEsNSBAQAorW3NvdXJjZV0KK1tzb3VyY2UuZGVi aWFuLXBhY2thZ2VzXQorZGlyZWN0b3J5ID0gIi91c3Ivc2hhcmUvY2FyZ28vcmVnaXN0cnkiCitb c291cmNlLmNyYXRlcy1pb10KK3JlcGxhY2Utd2l0aCA9ICJkZWJpYW4tcGFja2FnZXMiCmRpZmYg LS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi43NzQxZTYzCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGlnbm9yZQpAQCAtMCww ICsxLDUgQEAKKy4vdGFyZ2V0CisuL2J1aWxkCisKK0NhcmdvLmxvY2sKKwpkaWZmIC0tZ2l0IGEv Q2FyZ28udG9tbCBiL0NhcmdvLnRvbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZDM1MjNmMwotLS0gL2Rldi9udWxsCisrKyBiL0NhcmdvLnRvbWwKQEAgLTAsMCArMSwyMCBA QAorW3BhY2thZ2VdCituYW1lID0gInByb3htb3hfcnJkX21pZ3JhdGlvbl84LTkiCit2ZXJzaW9u ID0gIjAuMS4wIgorZWRpdGlvbiA9ICIyMDIxIgorYXV0aG9ycyA9IFsKKyAgICAiQWFyb24gTGF1 dGVyZXIgPGEubGF1dGVyZXJAcHJveG1veC5jb20+IiwKKyAgICAiUHJveG1veCBTdXBwb3J0IFRl YW0gPHN1cHBvcnRAcHJveG1veC5jb20+IiwKK10KK2xpY2Vuc2UgPSAiQUdQTC0zIgoraG9tZXBh Z2UgPSAiaHR0cHM6Ly93d3cucHJveG1veC5jb20iCisKK1tkZXBlbmRlbmNpZXNdCithbnlob3cg PSAiMS4wLjg2IgorcGljby1hcmdzID0gIjAuNS4wIgorcHJveG1veC1hc3luYyA9ICIwLjQiCitj cm9zc2JlYW0tY2hhbm5lbCA9ICIwLjUiCisKK1tidWlsZC1kZXBlbmRlbmNpZXNdCitiaW5kZ2Vu ID0gIjAuNjYuMSIKK3BrZy1jb25maWcgPSAiMC4zIgpkaWZmIC0tZ2l0IGEvYnVpbGQucnMgYi9i dWlsZC5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQwN2NjCi0tLSAv ZGV2L251bGwKKysrIGIvYnVpbGQucnMKQEAgLTAsMCArMSwyOSBAQAordXNlIHN0ZDo6ZW52Owor dXNlIHN0ZDo6cGF0aDo6UGF0aEJ1ZjsKKworZm4gbWFpbigpIHsKKyAgICBwcmludGxuISgiY2Fy Z286cnVzdGMtbGluay1saWI9cnJkIik7CisKKyAgICBwcmludGxuISgiY2FyZ286cmVydW4taWYt Y2hhbmdlZD13cmFwcGVyLmgiKTsKKyAgICAvLyBUaGUgYmluZGdlbjo6QnVpbGRlciBpcyB0aGUg bWFpbiBlbnRyeSBwb2ludAorICAgIC8vIHRvIGJpbmRnZW4sIGFuZCBsZXRzIHlvdSBidWlsZCB1 cCBvcHRpb25zIGZvcgorICAgIC8vIHRoZSByZXN1bHRpbmcgYmluZGluZ3MuCisKKyAgICBsZXQg YmluZGluZ3MgPSBiaW5kZ2VuOjpCdWlsZGVyOjpkZWZhdWx0KCkKKyAgICAgICAgLy8gVGhlIGlu cHV0IGhlYWRlciB3ZSB3b3VsZCBsaWtlIHRvIGdlbmVyYXRlCisgICAgICAgIC8vIGJpbmRpbmdz IGZvci4KKyAgICAgICAgLmhlYWRlcigid3JhcHBlci5oIikKKyAgICAgICAgLy8gVGVsbCBjYXJn byB0byBpbnZhbGlkYXRlIHRoZSBidWlsdCBjcmF0ZSB3aGVuZXZlciBhbnkgb2YgdGhlCisgICAg ICAgIC8vIGluY2x1ZGVkIGhlYWRlciBmaWxlcyBjaGFuZ2VkLgorICAgICAgICAucGFyc2VfY2Fs bGJhY2tzKEJveDo6bmV3KGJpbmRnZW46OkNhcmdvQ2FsbGJhY2tzKSkKKyAgICAgICAgLy8gRmlu aXNoIHRoZSBidWlsZGVyIGFuZCBnZW5lcmF0ZSB0aGUgYmluZGluZ3MuCisgICAgICAgIC5nZW5l cmF0ZSgpCisgICAgICAgIC8vIFVud3JhcCB0aGUgUmVzdWx0IGFuZCBwYW5pYyBvbiBmYWlsdXJl LgorICAgICAgICAuZXhwZWN0KCJVbmFibGUgdG8gZ2VuZXJhdGUgYmluZGluZ3MiKTsKKworICAg IC8vIFdyaXRlIHRoZSBiaW5kaW5ncyB0byB0aGUgJE9VVF9ESVIvYmluZGluZ3MucnMgZmlsZS4K KyAgICBsZXQgb3V0X3BhdGggPSBQYXRoQnVmOjpmcm9tKGVudjo6dmFyKCJPVVRfRElSIikudW53 cmFwKCkpOworICAgIGJpbmRpbmdzCisgICAgICAgIC53cml0ZV90b19maWxlKG91dF9wYXRoLmpv aW4oImJpbmRpbmdzLnJzIikpCisgICAgICAgIC5leHBlY3QoIkNvdWxkbid0IHdyaXRlIGJpbmRp bmdzISIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2xpYi5ycyBiL3NyYy9saWIucnMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM4YTEzYQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9saWIucnMKQEAgLTAsMCArMSw1IEBACisjIVthbGxvdyhub25fdXBwZXJfY2FzZV9nbG9iYWxz KV0KKyMhW2FsbG93KG5vbl9jYW1lbF9jYXNlX3R5cGVzKV0KKyMhW2FsbG93KG5vbl9zbmFrZV9j YXNlKV0KKworaW5jbHVkZSEoY29uY2F0IShlbnYhKCJPVVRfRElSIiksICIvYmluZGluZ3MucnMi KSk7CmRpZmYgLS1naXQgYS9zcmMvbWFpbi5ycyBiL3NyYy9tYWluLnJzCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNmY5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFp bi5ycwpAQCAtMCwwICsxLDUwMiBAQAordXNlIGFueWhvdzo6e2JhaWwsIEVycm9yLCBSZXN1bHR9 OwordXNlIHByb3htb3hfcnJkX21pZ3JhdGlvbl84Xzk6OntycmRfY2xlYXJfZXJyb3IsIHJyZF9j cmVhdGVfcjIsIHJyZF9nZXRfY29udGV4dCwgcnJkX2dldF9lcnJvcn07Cit1c2Ugc3RkOjpmZmk6 OntDU3RyLCBDU3RyaW5nLCBPc1N0cmluZ307Cit1c2Ugc3RkOjpmczsKK3VzZSBzdGQ6Om9zOjp1 bml4OjpmZmk6Ok9zU3RyRXh0OwordXNlIHN0ZDo6b3M6OnVuaXg6OmZzOjpQZXJtaXNzaW9uc0V4 dDsKK3VzZSBzdGQ6OnBhdGg6OlBhdGhCdWY7Cit1c2Ugc3RkOjpzeW5jOjpBcmM7CisKK3VzZSBj cmF0ZTo6cGFyYWxsZWxfaGFuZGxlcjo6UGFyYWxsZWxIYW5kbGVyOworCitwdWIgbW9kIHBhcmFs bGVsX2hhbmRsZXI7CisKK2NvbnN0IEJBU0VfRElSOiAmc3RyID0gIi92YXIvbGliL3JyZGNhY2hl ZC9kYiI7Citjb25zdCBTT1VSQ0VfU1VCRElSX05PREU6ICZzdHIgPSAicHZlMi1ub2RlIjsKK2Nv bnN0IFNPVVJDRV9TVUJESVJfR1VFU1Q6ICZzdHIgPSAicHZlMi12bSI7Citjb25zdCBTT1VSQ0Vf U1VCRElSX1NUT1JBR0U6ICZzdHIgPSAicHZlMi1zdG9yYWdlIjsKK2NvbnN0IFRBUkdFVF9TVUJE SVJfTk9ERTogJnN0ciA9ICJwdmUtbm9kZS05LjAiOworY29uc3QgVEFSR0VUX1NVQkRJUl9HVUVT VDogJnN0ciA9ICJwdmUtdm0tOS4wIjsKK2NvbnN0IFRBUkdFVF9TVUJESVJfU1RPUkFHRTogJnN0 ciA9ICJwdmUtc3RvcmFnZS05LjAiOworY29uc3QgTUFYX1RIUkVBRFM6IHVzaXplID0gNDsKK2Nv bnN0IFJSRF9TVEVQX1NJWkU6IHVzaXplID0gNjA7CisKKy8vIFJSQXMgYXJlIGRlZmluZWQgaW4g dGhlIGZvbGxvd2luZyB3YXk6CisvLworLy8gUlJBOkNGOnhmZjpzdGVwOnJvd3MKKy8vIENGOiBB VkVSQUdFIG9yIE1BWAorLy8geGZmOiAwLjUKKy8vIHN0ZXBzOiBzdGVwc2l6ZSBpcyBkZWZpbmVk IG9uIHJyZCBmaWxlIGNyZWF0aW9uISBleGFtcGxlOiB3aXRoIDYwIHNlY29uZHMgc3RlcCBzaXpl OgorLy8JZS5nLiAxID0+IDYwIHNlYywgMzAgPT4gMTgwMCBzZWNvbmRzIG9yIDMwIG1pbgorLy8g cm93czogaG93IG1hbnkgYWdncmVnYXRlZCByb3dzIGFyZSBrZXB0LCBhcyBpbiBob3cgZmFyIGJh Y2sgaW4gdGltZSB3ZSBzdG9yZSBkYXRhCisvLworLy8gaG93IG1hbnkgc2Vjb25kcyBhcmUgYWdn cmVnYXRlZCBwZXIgUlJBOiBzdGVwcyAqIHN0ZXBzaXplICogcm93cworLy8gaG93IG1hbnkgaG91 cnMgYXJlIGFnZ3JlZ2F0ZWQgcGVyIFJSQTogc3RlcHMgKiBzdGVwc2l6ZSAqIHJvd3MgLyAzNjAw CisvLyBob3cgbWFueSBkYXlzIGFyZSBhZ2dyZWdhdGVkIHBlciBSUkE6IHN0ZXBzICogc3RlcHNp emUgKiByb3dzIC8gMzYwMCAvIDI0CisvLyBodHRwczovL29zcy5vZXRpa2VyLmNoL3JyZHRvb2wv dHV0L3JyZC1iZWdpbm5lcnMuZW4uaHRtbCNVbmRlcnN0YW5kaW5nX2J5X2FuX2V4YW1wbGUKKwor Y29uc3QgUlJEX1ZNX0RFRjogWyZDU3RyOyAyNV0gPSBbCisgICAgYyJEUzptYXhjcHU6R0FVR0U6 MTIwOjA6VSIsCisgICAgYyJEUzpjcHU6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzptYXhtZW06 R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzptZW06R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpt YXhkaXNrOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6ZGlzazpHQVVHRToxMjA6MDpVIiwKKyAg ICBjIkRTOm5ldGluOkRFUklWRToxMjA6MDpVIiwKKyAgICBjIkRTOm5ldG91dDpERVJJVkU6MTIw OjA6VSIsCisgICAgYyJEUzpkaXNrcmVhZDpERVJJVkU6MTIwOjA6VSIsCisgICAgYyJEUzpkaXNr d3JpdGU6REVSSVZFOjEyMDowOlUiLAorICAgIGMiRFM6bWVtaG9zdDpHQVVHRToxMjA6MDpVIiwK KyAgICBjIkRTOnByZXNzdXJlY3B1c29tZTpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnByZXNz dXJlY3B1ZnVsbDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnByZXNzdXJlaW9zb21lOkdBVUdF OjEyMDowOlUiLAorICAgIGMiRFM6cHJlc3N1cmVpb2Z1bGw6R0FVR0U6MTIwOjA6VSIsCisgICAg YyJEUzpwcmVzc3VyZW1lbW9yeXNvbWU6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpwcmVzc3Vy ZW1lbW9yeWZ1bGw6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJSUkE6QVZFUkFHRTowLjU6MToxNDQw IiwgICAgLy8gMSBtaW4gKiAxNDQwID0+IDEgZGF5CisgICAgYyJSUkE6QVZFUkFHRTowLjU6MzA6 MTQ0MCIsICAgLy8gMzAgbWluICogMTQ0MCA9PiAzMCBkYXkKKyAgICBjIlJSQTpBVkVSQUdFOjAu NTozNjA6MTQ0MCIsICAvLyA2IGhvdXJzICogMTQ0MCA9PiAzNjAgZGF5IH4xIHllYXIKKyAgICBj IlJSQTpBVkVSQUdFOjAuNToxMDA4MDo1NzAiLCAvLyAxIHdlZWsgKiA1NzAgPT4gfjEwIHllYXJz CisgICAgYyJSUkE6TUFYOjAuNToxOjE0NDAiLCAgICAgICAgLy8gMSBtaW4gKiAxNDQwID0+IDEg ZGF5CisgICAgYyJSUkE6TUFYOjAuNTozMDoxNDQwIiwgICAgICAgLy8gMzAgbWluICogMTQ0MCA9 PiAzMCBkYXkKKyAgICBjIlJSQTpNQVg6MC41OjM2MDoxNDQwIiwgICAgICAvLyA2IGhvdXJzICog MTQ0MCA9PiAzNjAgZGF5IH4xIHllYXIKKyAgICBjIlJSQTpNQVg6MC41OjEwMDgwOjU3MCIsICAg ICAvLyAxIHdlZWsgKiA1NzAgPT4gfjEwIHllYXJzCitdOworCitjb25zdCBSUkRfTk9ERV9ERUY6 IFsmQ1N0cjsgMjddID0gWworICAgIGMiRFM6bG9hZGF2ZzpHQVVHRToxMjA6MDpVIiwKKyAgICBj IkRTOm1heGNwdTpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOmNwdTpHQVVHRToxMjA6MDpVIiwK KyAgICBjIkRTOmlvd2FpdDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOm1lbXRvdGFsOkdBVUdF OjEyMDowOlUiLAorICAgIGMiRFM6bWVtdXNlZDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnN3 YXB0b3RhbDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnN3YXB1c2VkOkdBVUdFOjEyMDowOlUi LAorICAgIGMiRFM6cm9vdHRvdGFsOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6cm9vdHVzZWQ6 R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpuZXRpbjpERVJJVkU6MTIwOjA6VSIsCisgICAgYyJE UzpuZXRvdXQ6REVSSVZFOjEyMDowOlUiLAorICAgIGMiRFM6bWVtZnJlZTpHQVVHRToxMjA6MDpV IiwKKyAgICBjIkRTOmFyY3NpemU6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpwcmVzc3VyZWNw dXNvbWU6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpwcmVzc3VyZWlvc29tZTpHQVVHRToxMjA6 MDpVIiwKKyAgICBjIkRTOnByZXNzdXJlaW9mdWxsOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6 cHJlc3N1cmVtZW1vcnlzb21lOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6cHJlc3N1cmVtZW1v cnlmdWxsOkdBVUdFOjEyMDowOlUiLAorICAgIGMiUlJBOkFWRVJBR0U6MC41OjE6MTQ0MCIsICAg IC8vIDEgbWluICogMTQ0MCA9PiAxIGRheQorICAgIGMiUlJBOkFWRVJBR0U6MC41OjMwOjE0NDAi LCAgIC8vIDMwIG1pbiAqIDE0NDAgPT4gMzAgZGF5CisgICAgYyJSUkE6QVZFUkFHRTowLjU6MzYw OjE0NDAiLCAgLy8gNiBob3VycyAqIDE0NDAgPT4gMzYwIGRheSB+MSB5ZWFyCisgICAgYyJSUkE6 QVZFUkFHRTowLjU6MTAwODA6NTcwIiwgLy8gMSB3ZWVrICogNTcwID0+IH4xMCB5ZWFycworICAg IGMiUlJBOk1BWDowLjU6MToxNDQwIiwgICAgICAgIC8vIDEgbWluICogMTQ0MCA9PiAxIGRheQor ICAgIGMiUlJBOk1BWDowLjU6MzA6MTQ0MCIsICAgICAgIC8vIDMwIG1pbiAqIDE0NDAgPT4gMzAg ZGF5CisgICAgYyJSUkE6TUFYOjAuNTozNjA6MTQ0MCIsICAgICAgLy8gNiBob3VycyAqIDE0NDAg PT4gMzYwIGRheSB+MSB5ZWFyCisgICAgYyJSUkE6TUFYOjAuNToxMDA4MDo1NzAiLCAgICAgLy8g MSB3ZWVrICogNTcwID0+IH4xMCB5ZWFycworXTsKKworY29uc3QgUlJEX1NUT1JBR0VfREVGOiBb JkNTdHI7IDEwXSA9IFsKKyAgICBjIkRTOnRvdGFsOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6 dXNlZDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIlJSQTpBVkVSQUdFOjAuNToxOjE0NDAiLCAgICAv LyAxIG1pbiAqIDE0NDAgPT4gMSBkYXkKKyAgICBjIlJSQTpBVkVSQUdFOjAuNTozMDoxNDQwIiwg ICAvLyAzMCBtaW4gKiAxNDQwID0+IDMwIGRheQorICAgIGMiUlJBOkFWRVJBR0U6MC41OjM2MDox NDQwIiwgIC8vIDYgaG91cnMgKiAxNDQwID0+IDM2MCBkYXkgfjEgeWVhcgorICAgIGMiUlJBOkFW RVJBR0U6MC41OjEwMDgwOjU3MCIsIC8vIDEgd2VlayAqIDU3MCA9PiB+MTAgeWVhcnMKKyAgICBj IlJSQTpNQVg6MC41OjE6MTQ0MCIsICAgICAgICAvLyAxIG1pbiAqIDE0NDAgPT4gMSBkYXkKKyAg ICBjIlJSQTpNQVg6MC41OjMwOjE0NDAiLCAgICAgICAvLyAzMCBtaW4gKiAxNDQwID0+IDMwIGRh eQorICAgIGMiUlJBOk1BWDowLjU6MzYwOjE0NDAiLCAgICAgIC8vIDYgaG91cnMgKiAxNDQwID0+ IDM2MCBkYXkgfjEgeWVhcgorICAgIGMiUlJBOk1BWDowLjU6MTAwODA6NTcwIiwgICAgIC8vIDEg d2VlayAqIDU3MCA9PiB+MTAgeWVhcnMKK107CisKK2NvbnN0IEhFTFA6ICZzdHIgPSAiXAorcHJv eG1veC1ycmQtbWlncmF0aW9uIHRvb2wKKworTWlncmF0ZXMgZXhpc3RpbmcgUlJEIGdyYXBoIGRh dGEgdG8gdGhlIG5ldyBmb3JtYXQuCisKK1VzZSB0aGlzIG9ubHkgaW4gdGhlIHByb2Nlc3Mgb2Yg dXBncmFkaW5nIGZyb20gUHJveG1veCBWRSA4IHRvIDkgYWNjb3JkaW5nIHRvIHRoZSB1cGdyYWRl IGd1aWRlIQorCitVU0FHRToKKyAgICBwcm94bW94LXJyZC1taWdyYXRpb24gW09QVElPTlNdCisK KyAgICBGTEFHUzoKKyAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgIFByaW50cyB0 aGlzIGhlbHAgaW5mb3JtYXRpb24KKworICAgIE9QVElPTlM6CisgICAgICAgIC0tZm9yY2UgICAg ICAgICAgICAgICAgICAgICBNaWdyYXRlLCBldmVuIGlmIHRoZSB0YXJnZXQgYWxyZWFkeSBleGlz dHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgb3Zlcndy aXRlIGFueSBtaWdyYXRlZCBSUkQgZmlsZXMhCisKKyAgICAgICAgLS10aHJlYWRzIFRIUkVBRFMg ICAgICAgICAgIE51bWJlciBvZiBwYXJhbGVsbCB0aHJlYWRzLiBEZWZhdWx0IGZyb20gMSB0byA0 LgorCisgICAgICAgIC0tdGVzdCAgICAgICAgICAgICAgICAgICAgICBGb3IgaW50ZXJuYWwgdXNl IG9ubHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0cyBwYXJhbGxl bCBndWVzdCBtaWdyYXRpb24gb25seSEKKyAgICAgICAgLS1zb3VyY2UgICAgICAgICAgICAgICAg ICAgIEZvciBpbnRlcm5hbCB1c2Ugb25seS4gU291cmNlIGRpcmVjdG9yeS4KKyAgICAgICAgLS10 YXJnZXQgICAgICAgICAgICAgICAgICAgIEZvciBpbnRlcm5hbCB1c2Ugb25seS4gVGFyZ2V0IGRp cmVjdG9yeS4KKyAgICAgICI7CisKKyNbZGVyaXZlKERlYnVnKV0KK3N0cnVjdCBBcmdzIHsKKyAg ICBmb3JjZTogYm9vbCwKKyAgICB0aHJlYWRzOiBPcHRpb248dXNpemU+LAorICAgIHRlc3Q6IGJv b2wsCisgICAgc291cmNlOiBPcHRpb248UGF0aEJ1Zj4sCisgICAgdGFyZ2V0OiBPcHRpb248UGF0 aEJ1Zj4sCit9CisKK2ZuIHBhcnNlX2FyZ3MoKSAtPiBSZXN1bHQ8QXJncywgRXJyb3I+IHsKKyAg ICBsZXQgbXV0IHBhcmdzID0gcGljb19hcmdzOjpBcmd1bWVudHM6OmZyb21fZW52KCk7CisKKyAg ICAvLyBIZWxwIGhhcyBhIGhpZ2hlciBwcmlvcml0eSBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgc2Vw YXJhdGVseS4KKyAgICBpZiBwYXJncy5jb250YWlucyhbIi1oIiwgIi0taGVscCJdKSB7CisgICAg ICAgIHByaW50ISgie30iLCBIRUxQKTsKKyAgICAgICAgc3RkOjpwcm9jZXNzOjpleGl0KDApOwor ICAgIH0KKworICAgIGxldCBtdXQgYXJncyA9IEFyZ3MgeworICAgICAgICB0aHJlYWRzOiBwYXJn cy5vcHRfdmFsdWVfZnJvbV9zdHIoIi0tdGhyZWFkcyIpLnVud3JhcCgpLAorICAgICAgICBmb3Jj ZTogZmFsc2UsCisgICAgICAgIHRlc3Q6IGZhbHNlLAorICAgICAgICBzb3VyY2U6IHBhcmdzLm9w dF92YWx1ZV9mcm9tX3N0cigiLS1zb3VyY2UiKS51bndyYXAoKSwKKyAgICAgICAgdGFyZ2V0OiBw YXJncy5vcHRfdmFsdWVfZnJvbV9zdHIoIi0tdGFyZ2V0IikudW53cmFwKCksCisgICAgfTsKKwor ICAgIGlmIHBhcmdzLmNvbnRhaW5zKCItLXRlc3QiKSB7CisgICAgICAgIGFyZ3MudGVzdCA9IHRy dWU7CisgICAgfQorICAgIGlmIHBhcmdzLmNvbnRhaW5zKCItLWZvcmNlIikgeworICAgICAgICBh cmdzLmZvcmNlID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBJdCdzIHVwIHRvIHRoZSBjYWxsZXIg d2hhdCB0byBkbyB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorICAgIGxldCByZW1haW5p bmcgPSBwYXJncy5maW5pc2goKTsKKyAgICBpZiAhcmVtYWluaW5nLmlzX2VtcHR5KCkgeworICAg ICAgICBiYWlsIShmb3JtYXQhKCJXYXJuaW5nOiB1bnVzZWQgYXJndW1lbnRzIGxlZnQ6IHs6P30i LCByZW1haW5pbmcpKTsKKyAgICB9CisKKyAgICBPayhhcmdzKQorfQorCitmbiBtYWluKCkgewor ICAgIGxldCBhcmdzID0gbWF0Y2ggcGFyc2VfYXJncygpIHsKKyAgICAgICAgT2sodikgPT4gdiwK KyAgICAgICAgRXJyKGUpID0+IHsKKyAgICAgICAgICAgIGVwcmludGxuISgiRXJyb3I6IHt9LiIs IGUpOworICAgICAgICAgICAgc3RkOjpwcm9jZXNzOjpleGl0KDEpOworICAgICAgICB9CisgICAg fTsKKworICAgIGxldCBtdXQgc291cmNlX2Rpcl9ndWVzdHM6IFBhdGhCdWYgPSBbQkFTRV9ESVIs IFNPVVJDRV9TVUJESVJfR1VFU1RdLml0ZXIoKS5jb2xsZWN0KCk7CisgICAgbGV0IG11dCB0YXJn ZXRfZGlyX2d1ZXN0czogUGF0aEJ1ZiA9IFtCQVNFX0RJUiwgVEFSR0VUX1NVQkRJUl9HVUVTVF0u aXRlcigpLmNvbGxlY3QoKTsKKyAgICBsZXQgc291cmNlX2Rpcl9ub2RlczogUGF0aEJ1ZiA9IFtC QVNFX0RJUiwgU09VUkNFX1NVQkRJUl9OT0RFXS5pdGVyKCkuY29sbGVjdCgpOworICAgIGxldCB0 YXJnZXRfZGlyX25vZGVzOiBQYXRoQnVmID0gW0JBU0VfRElSLCBUQVJHRVRfU1VCRElSX05PREVd Lml0ZXIoKS5jb2xsZWN0KCk7CisgICAgbGV0IHNvdXJjZV9kaXJfc3RvcmFnZTogUGF0aEJ1ZiA9 IFtCQVNFX0RJUiwgU09VUkNFX1NVQkRJUl9TVE9SQUdFXS5pdGVyKCkuY29sbGVjdCgpOworICAg IGxldCB0YXJnZXRfZGlyX3N0b3JhZ2U6IFBhdGhCdWYgPSBbQkFTRV9ESVIsIFRBUkdFVF9TVUJE SVJfU1RPUkFHRV0uaXRlcigpLmNvbGxlY3QoKTsKKworICAgIGlmIGFyZ3MudGVzdCB7CisgICAg ICAgIHNvdXJjZV9kaXJfZ3Vlc3RzID0gYXJncy5zb3VyY2UuY2xvbmUoKS51bndyYXAoKTsKKyAg ICAgICAgdGFyZ2V0X2Rpcl9ndWVzdHMgPSBhcmdzLnRhcmdldC5jbG9uZSgpLnVud3JhcCgpOwor ICAgIH0KKworICAgIGlmICFhcmdzLmZvcmNlICYmIHRhcmdldF9kaXJfZ3Vlc3RzLmV4aXN0cygp IHsKKyAgICAgICAgZXByaW50bG4hKAorICAgICAgICAgICAgIkFib3J0aW5nISBUYXJnZXQgcGF0 aCBmb3IgZ3Vlc3RzIGFscmVhZHkgZXhpc3RzLiBVc2UgJy0tZm9yY2UnIHRvIHN0aWxsIG1pZ3Jh dGUuIEl0IHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzISIKKyAgICAgICAgKTsKKyAgICAg ICAgc3RkOjpwcm9jZXNzOjpleGl0KDEpOworICAgIH0KKyAgICBpZiAhYXJncy5mb3JjZSAmJiB0 YXJnZXRfZGlyX25vZGVzLmV4aXN0cygpIHsKKyAgICAgICAgZXByaW50bG4hKAorICAgICAgICAg ICAgIkFib3J0aW5nISBUYXJnZXQgcGF0aCBmb3Igbm9kZXMgYWxyZWFkeSBleGlzdHMuIFVzZSAn LS1mb3JjZScgdG8gc3RpbGwgbWlncmF0ZS4gSXQgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgZmls ZXMhIgorICAgICAgICApOworICAgICAgICBzdGQ6OnByb2Nlc3M6OmV4aXQoMSk7CisgICAgfQor ICAgIGlmICFhcmdzLmZvcmNlICYmIHRhcmdldF9kaXJfc3RvcmFnZS5leGlzdHMoKSB7CisgICAg ICAgIGVwcmludGxuISgKKyAgICAgICAgICAgICJBYm9ydGluZyEgVGFyZ2V0IHBhdGggZm9yIHN0 b3JhZ2VzIGFscmVhZHkgZXhpc3RzLiBVc2UgJy0tZm9yY2UnIHRvIHN0aWxsIG1pZ3JhdGUuIEl0 IHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzISIKKyAgICAgICAgKTsKKyAgICAgICAgc3Rk Ojpwcm9jZXNzOjpleGl0KDEpOworICAgIH0KKworICAgIGlmICFhcmdzLnRlc3QgeworICAgICAg ICBpZiBsZXQgRXJyKGUpID0gbWlncmF0ZV9ub2Rlcyhzb3VyY2VfZGlyX25vZGVzLCB0YXJnZXRf ZGlyX25vZGVzKSB7CisgICAgICAgICAgICBlcHJpbnRsbiEoIkVycm9yIG1pZ3JhdGluZyBub2Rl czoge30iLCBlKTsKKyAgICAgICAgICAgIHN0ZDo6cHJvY2Vzczo6ZXhpdCgxKTsKKyAgICAgICAg fQorICAgICAgICBpZiBsZXQgRXJyKGUpID0gbWlncmF0ZV9zdG9yYWdlKHNvdXJjZV9kaXJfc3Rv cmFnZSwgdGFyZ2V0X2Rpcl9zdG9yYWdlKSB7CisgICAgICAgICAgICBlcHJpbnRsbiEoIkVycm9y IG1pZ3JhdGluZyBzdG9yYWdlOiB7fSIsIGUpOworICAgICAgICAgICAgc3RkOjpwcm9jZXNzOjpl eGl0KDEpOworICAgICAgICB9CisgICAgfQorICAgIGlmIGxldCBFcnIoZSkgPSBtaWdyYXRlX2d1 ZXN0cyhzb3VyY2VfZGlyX2d1ZXN0cywgdGFyZ2V0X2Rpcl9ndWVzdHMsIHNldF90aHJlYWRzKCZh cmdzKSkgeworICAgICAgICBlcHJpbnRsbiEoIkVycm9yIG1pZ3JhdGluZyBndWVzdHM6IHt9Iiwg ZSk7CisgICAgICAgIHN0ZDo6cHJvY2Vzczo6ZXhpdCgxKTsKKyAgICB9Cit9CisKKy8vLyBTZXQg bnVtYmVyIG9mIHRocmVhZHMKKy8vLworLy8vIEVpdGhlciBhIGZpeGVkIHBhcmFtZXRlciBvciBk ZXRlcm1pbmluZyBhIHJhbmdlIGJldHdlZW4gMSB0byA0IHRocmVhZHMKKy8vLyAgYmFzZWQgb24g dGhlIG51bWJlciBvZiBDUFUgY29yZXMgYXZhaWxhYmxlIGluIHRoZSBzeXN0ZW0uCitmbiBzZXRf dGhyZWFkcyhhcmdzOiAmQXJncykgLT4gdXNpemUgeworICAgIGlmIGFyZ3MudGhyZWFkcy5pc19z b21lKCkgeworICAgICAgICByZXR1cm4gYXJncy50aHJlYWRzLnVud3JhcCgpOworICAgIH0KKyAg ICAvLyBjaGVjayBmb3IgYSB3YXkgdG8gZ2V0IHBoeXNpY2FsIGNvcmVzIGFuZCBub3QgdGhyZWFk cz8KKyAgICBsZXQgY3B1czogdXNpemUgPSBTdHJpbmc6OmZyb21fdXRmOF9sb3NzeSgKKyAgICAg ICAgc3RkOjpwcm9jZXNzOjpDb21tYW5kOjpuZXcoIm5wcm9jIikKKyAgICAgICAgICAgIC5vdXRw dXQoKQorICAgICAgICAgICAgLmV4cGVjdCgiRXJyb3IgcnVubmluZyBucHJvYyIpCisgICAgICAg ICAgICAuc3Rkb3V0CisgICAgICAgICAgICAuYXNfc2xpY2UoKQorICAgICAgICAgICAgLnRyaW1f YXNjaWkoKSwKKyAgICApCisgICAgLnBhcnNlOjo8dXNpemU+KCkKKyAgICAuZXhwZWN0KCJDb3Vs ZCBub3QgcGFyc2UgbnByb2Mgb3V0cHV0Iik7CisKKyAgICBpZiBjcHVzIDwgMzIgeworICAgICAg ICBsZXQgdGhyZWFkcyA9IGNwdXMgLyA4OworICAgICAgICBpZiB0aHJlYWRzID09IDAgeworICAg ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRocmVhZHM7Cisg ICAgfQorICAgIHJldHVybiBNQVhfVEhSRUFEUzsKK30KKworLy8vIE1pZ3JhdGUgZ3Vlc3QgUlJE IGZpbGVzCisvLy8KKy8vLyBJbiBwYXJhbGxlbCB0byBzcGVlZCB1cCB0aGUgcHJvY2VzcyBhcyBt b3N0IHRpbWUgaXMgc3BlbnQgb24gY29udmVydGluZyB0aGUKKy8vLyBkYXRhIHRvIHRoZSBuZXcg Zm9ybWF0LgorZm4gbWlncmF0ZV9ndWVzdHMoCisgICAgc291cmNlX2Rpcl9ndWVzdHM6IFBhdGhC dWYsCisgICAgdGFyZ2V0X2Rpcl9ndWVzdHM6IFBhdGhCdWYsCisgICAgdGhyZWFkczogdXNpemUs CispIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICBwcmludGxuISgiTWlncmF0aW5nIFJSRCBk YXRhIGZvciBndWVzdHPigKYiKTsKKyAgICBwcmludGxuISgiVXNpbmcge30gdGhyZWFkKHMpIiwg dGhyZWFkcyk7CisKKyAgICBsZXQgbXV0IGd1ZXN0X3NvdXJjZV9maWxlczogVmVjPChDU3RyaW5n LCBPc1N0cmluZyk+ID0gVmVjOjpuZXcoKTsKKworICAgIGZzOjpyZWFkX2Rpcigmc291cmNlX2Rp cl9ndWVzdHMpPworICAgICAgICAuZmlsdGVyKHxmfCBmLmlzX29rKCkpCisgICAgICAgIC5tYXAo fGZ8IGYudW53cmFwKCkucGF0aCgpKQorICAgICAgICAuZmlsdGVyKHxmfCBmLmlzX2ZpbGUoKSkK KyAgICAgICAgLmZvcl9lYWNoKHxmaWxlfCB7CisgICAgICAgICAgICBsZXQgcGF0aCA9IENTdHJp bmc6Om5ldyhmaWxlLmFzX3BhdGgoKS5hc19vc19zdHIoKS5hc19ieXRlcygpKQorICAgICAgICAg ICAgICAgIC5leHBlY3QoIkNvdWxkIG5vdCBjb252ZXJ0IHBhdGggdG8gQ1N0cmluZy4iKTsKKyAg ICAgICAgICAgIGxldCBmbmFtZSA9IGZpbGUKKyAgICAgICAgICAgICAgICAuZmlsZV9uYW1lKCkK KyAgICAgICAgICAgICAgICAubWFwKHx2fCB2LnRvX29zX3N0cmluZygpKQorICAgICAgICAgICAg ICAgIC5leHBlY3QoIkNvdWxkIG5vdCBjb252ZXJ0IGZuYW1lIHRvIE9zU3RyaW5nLiIpOworICAg ICAgICAgICAgZ3Vlc3Rfc291cmNlX2ZpbGVzLnB1c2goKHBhdGgsIGZuYW1lKSkKKyAgICAgICAg fSk7CisgICAgaWYgIXRhcmdldF9kaXJfZ3Vlc3RzLmV4aXN0cygpIHsKKyAgICAgICAgcHJpbnRs biEoIkNyZWF0aW5nIG5ldyBkaXJlY3Rvcnk6ICd7fSciLCB0YXJnZXRfZGlyX2d1ZXN0cy5kaXNw bGF5KCkpOworICAgICAgICBzdGQ6OmZzOjpjcmVhdGVfZGlyKCZ0YXJnZXRfZGlyX2d1ZXN0cyk/ OworICAgIH0KKworICAgIGxldCB0b3RhbF9ndWVzdHMgPSBndWVzdF9zb3VyY2VfZmlsZXMubGVu KCk7CisgICAgbGV0IGd1ZXN0cyA9IEFyYzo6bmV3KHN0ZDo6c3luYzo6YXRvbWljOjpBdG9taWNV c2l6ZTo6bmV3KDApKTsKKyAgICBsZXQgZ3Vlc3RzMiA9IGd1ZXN0cy5jbG9uZSgpOworICAgIGxl dCBzdGFydF90aW1lID0gc3RkOjp0aW1lOjpTeXN0ZW1UaW1lOjpub3coKTsKKworICAgIGxldCBt aWdyYXRpb25fcG9vbCA9IFBhcmFsbGVsSGFuZGxlcjo6bmV3KAorICAgICAgICAiZ3Vlc3QgcnJk IG1pZ3JhdGlvbiIsCisgICAgICAgIHRocmVhZHMsCisgICAgICAgIG1vdmUgfChwYXRoLCBmbmFt ZSk6IChDU3RyaW5nLCBPc1N0cmluZyl8IHsKKyAgICAgICAgICAgIGxldCBtdXQgc291cmNlOiBb KmNvbnN0IGk4OyAyXSA9IFtzdGQ6OnB0cjo6bnVsbCgpOyAyXTsKKyAgICAgICAgICAgIHNvdXJj ZVswXSA9IHBhdGguYXNfcHRyKCk7CisKKyAgICAgICAgICAgIGxldCBub2RlX25hbWUgPSBmbmFt ZTsKKyAgICAgICAgICAgIGxldCBtdXQgdGFyZ2V0X3BhdGggPSB0YXJnZXRfZGlyX2d1ZXN0cy5j bG9uZSgpOworICAgICAgICAgICAgdGFyZ2V0X3BhdGgucHVzaChub2RlX25hbWUpOworCisgICAg ICAgICAgICBsZXQgdGFyZ2V0X3BhdGggPSBDU3RyaW5nOjpuZXcodGFyZ2V0X3BhdGgudG9fc3Ry KCkudW53cmFwKCkpLnVud3JhcCgpOworCisgICAgICAgICAgICB1bnNhZmUgeworICAgICAgICAg ICAgICAgIHJyZF9nZXRfY29udGV4dCgpOworICAgICAgICAgICAgICAgIHJyZF9jbGVhcl9lcnJv cigpOworICAgICAgICAgICAgICAgIGxldCByZXMgPSBycmRfY3JlYXRlX3IyKAorICAgICAgICAg ICAgICAgICAgICB0YXJnZXRfcGF0aC5hc19wdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgUlJE X1NURVBfU0laRSBhcyB1NjQsCisgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAg ICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5hc19tdXRfcHRyKCksCisgICAg ICAgICAgICAgICAgICAgIHN0ZDo6cHRyOjpudWxsKCksCisgICAgICAgICAgICAgICAgICAgIFJS RF9WTV9ERUYubGVuKCkgYXMgaTMyLAorICAgICAgICAgICAgICAgICAgICBSUkRfVk1fREVGLm1h cCh8dnwgdi5hc19wdHIoKSkuYXNfbXV0X3B0cigpLAorICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICAgICAgaWYgcmVzICE9IDAgeworICAgICAgICAgICAgICAgICAgICBiYWlsISgKKyAg ICAgICAgICAgICAgICAgICAgICAgICJSUkQgY3JlYXRlIEVycm9yOiB7fSIsCisgICAgICAgICAg ICAgICAgICAgICAgICBDU3RyOjpmcm9tX3B0cihycmRfZ2V0X2Vycm9yKCkpLnRvX3N0cmluZ19s b3NzeSgpCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgbGV0IGN1cnJlbnRfZ3Vlc3RzID0gZ3Vlc3RzMi5mZXRjaF9h ZGQoMSwgc3RkOjpzeW5jOjphdG9taWM6Ok9yZGVyaW5nOjpTZXFDc3QpOworICAgICAgICAgICAg aWYgY3VycmVudF9ndWVzdHMgPiAwICYmIGN1cnJlbnRfZ3Vlc3RzICUgMjAwID09IDAgeworICAg ICAgICAgICAgICAgIHByaW50bG4hKCJNaWdyYXRlZCB7fSBvZiB7fSBndWVzdHMiLCBjdXJyZW50 X2d1ZXN0cywgdG90YWxfZ3Vlc3RzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9rKCgp KQorICAgICAgICB9LAorICAgICk7CisgICAgbGV0IG1pZ3JhdGlvbl9jaGFubmVsID0gbWlncmF0 aW9uX3Bvb2wuY2hhbm5lbCgpOworCisgICAgZm9yIGZpbGUgaW4gZ3Vlc3Rfc291cmNlX2ZpbGVz IHsKKyAgICAgICAgbGV0IG1pZ3JhdGlvbl9jaGFubmVsID0gbWlncmF0aW9uX2NoYW5uZWwuY2xv bmUoKTsKKyAgICAgICAgbWlncmF0aW9uX2NoYW5uZWwuc2VuZChmaWxlKT87CisgICAgfQorCisg ICAgZHJvcChtaWdyYXRpb25fY2hhbm5lbCk7CisgICAgbWlncmF0aW9uX3Bvb2wuY29tcGxldGUo KT87CisKKyAgICBsZXQgZWxhcHNlZCA9IHN0YXJ0X3RpbWUuZWxhcHNlZCgpPy5hc19zZWNzX2Y2 NCgpOworICAgIGxldCBndWVzdHMgPSBndWVzdHMubG9hZChzdGQ6OnN5bmM6OmF0b21pYzo6T3Jk ZXJpbmc6OlNlcUNzdCk7CisgICAgcHJpbnRsbiEoIk1pZ3JhdGVkIHt9IGd1ZXN0cyBpbiB7Oi4y fXMiLCBndWVzdHMsIGVsYXBzZWQsKTsKKworICAgIE9rKCgpKQorfQorCisvLy8gTWlncmF0ZSBu b2RlIFJSRCBmaWxlcworLy8vCisvLy8gSW4gc2VyaWFsIGFzIHRoZSBudW1iZXIgb2Ygbm9kZXMg d2lsbCBub3QgYmUgaGlnaC4KK2ZuIG1pZ3JhdGVfbm9kZXMoc291cmNlX2Rpcl9ub2RlczogUGF0 aEJ1ZiwgdGFyZ2V0X2Rpcl9ub2RlczogUGF0aEJ1ZikgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewor ICAgIHByaW50bG4hKCJNaWdyYXRpbmcgUlJEIGRhdGEgZm9yIG5vZGVz4oCmIik7CisKKyAgICBp ZiAhdGFyZ2V0X2Rpcl9ub2Rlcy5leGlzdHMoKSB7CisgICAgICAgIHByaW50bG4hKCJDcmVhdGlu ZyBuZXcgZGlyZWN0b3J5OiAne30nIiwgdGFyZ2V0X2Rpcl9ub2Rlcy5kaXNwbGF5KCkpOworICAg ICAgICBzdGQ6OmZzOjpjcmVhdGVfZGlyKCZ0YXJnZXRfZGlyX25vZGVzKT87CisgICAgfQorCisg ICAgbGV0IG11dCBub2RlX3NvdXJjZV9maWxlczogVmVjPChDU3RyaW5nLCBPc1N0cmluZyk+ID0g VmVjOjpuZXcoKTsKKyAgICBmczo6cmVhZF9kaXIoJnNvdXJjZV9kaXJfbm9kZXMpPworICAgICAg ICAuZmlsdGVyKHxmfCBmLmlzX29rKCkpCisgICAgICAgIC5tYXAofGZ8IGYudW53cmFwKCkucGF0 aCgpKQorICAgICAgICAuZmlsdGVyKHxmfCBmLmlzX2ZpbGUoKSkKKyAgICAgICAgLmZvcl9lYWNo KHxmaWxlfCB7CisgICAgICAgICAgICBsZXQgcGF0aCA9IENTdHJpbmc6Om5ldyhmaWxlLmFzX3Bh dGgoKS5hc19vc19zdHIoKS5hc19ieXRlcygpKQorICAgICAgICAgICAgICAgIC5leHBlY3QoIkNv dWxkIG5vdCBjb252ZXJ0IHBhdGggdG8gQ1N0cmluZy4iKTsKKyAgICAgICAgICAgIGxldCBmbmFt ZSA9IGZpbGUKKyAgICAgICAgICAgICAgICAuZmlsZV9uYW1lKCkKKyAgICAgICAgICAgICAgICAu bWFwKHx2fCB2LnRvX29zX3N0cmluZygpKQorICAgICAgICAgICAgICAgIC5leHBlY3QoIkNvdWxk IG5vdCBjb252ZXJ0IGZuYW1lIHRvIE9zU3RyaW5nLiIpOworICAgICAgICAgICAgbm9kZV9zb3Vy Y2VfZmlsZXMucHVzaCgocGF0aCwgZm5hbWUpKQorICAgICAgICB9KTsKKworICAgIGZvciBmaWxl IGluIG5vZGVfc291cmNlX2ZpbGVzIHsKKyAgICAgICAgcHJpbnRsbiEoIk5vZGU6ICd7fSciLCBQ YXRoQnVmOjpmcm9tKGZpbGUuMS5jbG9uZSgpKS5kaXNwbGF5KCkpOworICAgICAgICBsZXQgbXV0 IHNvdXJjZTogWypjb25zdCBpODsgMl0gPSBbc3RkOjpwdHI6Om51bGwoKTsgMl07CisKKyAgICAg ICAgc291cmNlWzBdID0gZmlsZS4wLmFzX3B0cigpOworCisgICAgICAgIGxldCBub2RlX25hbWUg PSBmaWxlLjE7CisgICAgICAgIGxldCBtdXQgdGFyZ2V0X3BhdGggPSB0YXJnZXRfZGlyX25vZGVz LmNsb25lKCk7CisgICAgICAgIHRhcmdldF9wYXRoLnB1c2gobm9kZV9uYW1lKTsKKworICAgICAg ICBsZXQgdGFyZ2V0X3BhdGggPSBDU3RyaW5nOjpuZXcodGFyZ2V0X3BhdGgudG9fc3RyKCkudW53 cmFwKCkpLnVud3JhcCgpOworCisgICAgICAgIHVuc2FmZSB7CisgICAgICAgICAgICBycmRfZ2V0 X2NvbnRleHQoKTsKKyAgICAgICAgICAgIHJyZF9jbGVhcl9lcnJvcigpOworICAgICAgICAgICAg bGV0IHJlcyA9IHJyZF9jcmVhdGVfcjIoCisgICAgICAgICAgICAgICAgdGFyZ2V0X3BhdGguYXNf cHRyKCksCisgICAgICAgICAgICAgICAgUlJEX1NURVBfU0laRSBhcyB1NjQsCisgICAgICAgICAg ICAgICAgMCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIHNvdXJjZS5hc19t dXRfcHRyKCksCisgICAgICAgICAgICAgICAgc3RkOjpwdHI6Om51bGwoKSwKKyAgICAgICAgICAg ICAgICBSUkRfTk9ERV9ERUYubGVuKCkgYXMgaTMyLAorICAgICAgICAgICAgICAgIFJSRF9OT0RF X0RFRi5tYXAofHZ8IHYuYXNfcHRyKCkpLmFzX211dF9wdHIoKSwKKyAgICAgICAgICAgICk7Cisg ICAgICAgICAgICBpZiByZXMgIT0gMCB7CisgICAgICAgICAgICAgICAgYmFpbCEoCisgICAgICAg ICAgICAgICAgICAgICJSUkQgY3JlYXRlIEVycm9yOiB7fSIsCisgICAgICAgICAgICAgICAgICAg IENTdHI6OmZyb21fcHRyKHJyZF9nZXRfZXJyb3IoKSkudG9fc3RyaW5nX2xvc3N5KCkKKyAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHByaW50 bG4hKCJNaWdyYXRlZCBhbGwgbm9kZXMiKTsKKworICAgIE9rKCgpKQorfQorCisvLy8gTWlncmF0 ZSBzdG9yYWdlIFJSRCBmaWxlcworLy8vCisvLy8gSW4gc2VyaWFsIGFzIHRoZSBudW1iZXIgb2Yg c3RvcmFnZSB3aWxsIG5vdCBiZSB0aGF0IGhpZ2guCitmbiBtaWdyYXRlX3N0b3JhZ2Uoc291cmNl X2Rpcl9zdG9yYWdlOiBQYXRoQnVmLCB0YXJnZXRfZGlyX3N0b3JhZ2U6IFBhdGhCdWYpIC0+IFJl c3VsdDwoKSwgRXJyb3I+IHsKKyAgICBwcmludGxuISgiTWlncmF0aW5nIFJSRCBkYXRhIGZvciBz dG9yYWdlc+KApiIpOworCisgICAgaWYgIXRhcmdldF9kaXJfc3RvcmFnZS5leGlzdHMoKSB7Cisg ICAgICAgIHByaW50bG4hKCJDcmVhdGluZyBuZXcgZGlyZWN0b3J5OiAne30nIiwgdGFyZ2V0X2Rp cl9zdG9yYWdlLmRpc3BsYXkoKSk7CisgICAgICAgIHN0ZDo6ZnM6OmNyZWF0ZV9kaXIoJnRhcmdl dF9kaXJfc3RvcmFnZSk/OworICAgIH0KKworICAgIC8vIHN0b3JhZ2UgaGFzIGFub3RoZXIgbGF5 ZXIgb2YgZGlyZWN0b3JpZXMgcGVyIG5vZGUgb3ZlciB3aGljaCB3ZSBuZWVkIHRvIGl0ZXJhdGUK KyAgICBmczo6cmVhZF9kaXIoJnNvdXJjZV9kaXJfc3RvcmFnZSk/CisgICAgICAgIC5maWx0ZXIo fGZ8IGYuaXNfb2soKSkKKyAgICAgICAgLm1hcCh8ZnwgZi51bndyYXAoKS5wYXRoKCkpCisgICAg ICAgIC5maWx0ZXIofGZ8IGYuaXNfZGlyKCkpCisgICAgICAgIC50cnlfZm9yX2VhY2gofG5vZGV8 IHsKKyAgICAgICAgICAgIGxldCBtdXQgc3RvcmFnZV9zb3VyY2VfZmlsZXM6IFZlYzwoQ1N0cmlu ZywgT3NTdHJpbmcpPiA9IFZlYzo6bmV3KCk7CisKKyAgICAgICAgICAgIGxldCBtdXQgc291cmNl X25vZGVfc3ViZGlyID0gc291cmNlX2Rpcl9zdG9yYWdlLmNsb25lKCk7CisgICAgICAgICAgICBz b3VyY2Vfbm9kZV9zdWJkaXIucHVzaCgmbm9kZS5maWxlX25hbWUoKS51bndyYXAoKSk7CisKKyAg ICAgICAgICAgIGxldCBtdXQgdGFyZ2V0X25vZGVfc3ViZGlyID0gdGFyZ2V0X2Rpcl9zdG9yYWdl LmNsb25lKCk7CisgICAgICAgICAgICB0YXJnZXRfbm9kZV9zdWJkaXIucHVzaCgmbm9kZS5maWxl X25hbWUoKS51bndyYXAoKSk7CisKKyAgICAgICAgICAgIGZzOjpjcmVhdGVfZGlyKHRhcmdldF9u b2RlX3N1YmRpci5hc19wYXRoKCkpPzsKKyAgICAgICAgICAgIGxldCBtZXRhZGF0YSA9IHRhcmdl dF9ub2RlX3N1YmRpci5tZXRhZGF0YSgpPzsKKyAgICAgICAgICAgIGxldCBtdXQgcGVybWlzc2lv bnMgPSBtZXRhZGF0YS5wZXJtaXNzaW9ucygpOworICAgICAgICAgICAgcGVybWlzc2lvbnMuc2V0 X21vZGUoMG83NTUpOworCisgICAgICAgICAgICBmczo6cmVhZF9kaXIoJnNvdXJjZV9ub2RlX3N1 YmRpcik/CisgICAgICAgICAgICAgICAgLmZpbHRlcih8ZnwgZi5pc19vaygpKQorICAgICAgICAg ICAgICAgIC5tYXAofGZ8IGYudW53cmFwKCkucGF0aCgpKQorICAgICAgICAgICAgICAgIC5maWx0 ZXIofGZ8IGYuaXNfZmlsZSgpKQorICAgICAgICAgICAgICAgIC5mb3JfZWFjaCh8ZmlsZXwgewor ICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IENTdHJpbmc6Om5ldyhmaWxlLmFzX3BhdGgo KS5hc19vc19zdHIoKS5hc19ieXRlcygpKQorICAgICAgICAgICAgICAgICAgICAgICAgLmV4cGVj dCgiQ291bGQgbm90IGNvbnZlcnQgcGF0aCB0byBDU3RyaW5nLiIpOworICAgICAgICAgICAgICAg ICAgICBsZXQgZm5hbWUgPSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAuZmlsZV9uYW1l KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAofHZ8IHYudG9fb3Nfc3RyaW5nKCkpCisg ICAgICAgICAgICAgICAgICAgICAgICAuZXhwZWN0KCJDb3VsZCBub3QgY29udmVydCBmbmFtZSB0 byBPc1N0cmluZy4iKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZV9zb3VyY2VfZmlsZXMu cHVzaCgocGF0aCwgZm5hbWUpKQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBm b3IgZmlsZSBpbiBzdG9yYWdlX3NvdXJjZV9maWxlcyB7CisgICAgICAgICAgICAgICAgcHJpbnRs biEoIlN0b3JhZ2U6ICd7fSciLCBQYXRoQnVmOjpmcm9tKGZpbGUuMS5jbG9uZSgpKS5kaXNwbGF5 KCkpOworICAgICAgICAgICAgICAgIGxldCBtdXQgc291cmNlOiBbKmNvbnN0IGk4OyAyXSA9IFtz dGQ6OnB0cjo6bnVsbCgpOyAyXTsKKworICAgICAgICAgICAgICAgIHNvdXJjZVswXSA9IGZpbGUu MC5hc19wdHIoKTsKKworICAgICAgICAgICAgICAgIGxldCBub2RlX25hbWUgPSBmaWxlLjE7Cisg ICAgICAgICAgICAgICAgbGV0IG11dCB0YXJnZXRfcGF0aCA9IHRhcmdldF9ub2RlX3N1YmRpci5j bG9uZSgpOworICAgICAgICAgICAgICAgIHRhcmdldF9wYXRoLnB1c2gobm9kZV9uYW1lKTsKKwor ICAgICAgICAgICAgICAgIGxldCB0YXJnZXRfcGF0aCA9IENTdHJpbmc6Om5ldyh0YXJnZXRfcGF0 aC50b19zdHIoKS51bndyYXAoKSkudW53cmFwKCk7CisKKyAgICAgICAgICAgICAgICB1bnNhZmUg eworICAgICAgICAgICAgICAgICAgICBycmRfZ2V0X2NvbnRleHQoKTsKKyAgICAgICAgICAgICAg ICAgICAgcnJkX2NsZWFyX2Vycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIGxldCByZXMgPSBy cmRfY3JlYXRlX3IyKAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3BhdGguYXNfcHRy KCksCisgICAgICAgICAgICAgICAgICAgICAgICBSUkRfU1RFUF9TSVpFIGFzIHU2NCwKKyAgICAg ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg ICAgICAgICAgICAgICAgICAgc291cmNlLmFzX211dF9wdHIoKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgIHN0ZDo6cHRyOjpudWxsKCksCisgICAgICAgICAgICAgICAgICAgICAgICBSUkRfU1RP UkFHRV9ERUYubGVuKCkgYXMgaTMyLAorICAgICAgICAgICAgICAgICAgICAgICAgUlJEX1NUT1JB R0VfREVGLm1hcCh8dnwgdi5hc19wdHIoKSkuYXNfbXV0X3B0cigpLAorICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgICAgICAgICBpZiByZXMgIT0gMCB7CisgICAgICAgICAgICAg ICAgICAgICAgICBiYWlsISgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlJEIGNyZWF0 ZSBFcnJvcjoge30iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTdHI6OmZyb21fcHRy KHJyZF9nZXRfZXJyb3IoKSkudG9fc3RyaW5nX2xvc3N5KCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBPaygoKSkKKyAgICAgICAgfSk/OworICAgIHByaW50bG4hKCJN aWdyYXRlZCBhbGwgbm9kZXMiKTsKKworICAgIE9rKCgpKQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Bh cmFsbGVsX2hhbmRsZXIucnMgYi9zcmMvcGFyYWxsZWxfaGFuZGxlci5ycwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODc3NDJhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Bh cmFsbGVsX2hhbmRsZXIucnMKQEAgLTAsMCArMSwxNjIgQEAKKy8vISBBIHRocmVhZCBwb29sIHdo aWNoIHJ1biBhIGNsb3N1cmUgaW4gcGFyYWxsZWwuCisKK3VzZSBzdGQ6OnN5bmM6OntBcmMsIE11 dGV4fTsKK3VzZSBzdGQ6OnRocmVhZDo6Sm9pbkhhbmRsZTsKKwordXNlIGFueWhvdzo6e0Vycm9y LCBiYWlsLCBmb3JtYXRfZXJyfTsKK3VzZSBjcm9zc2JlYW1fY2hhbm5lbDo6e1NlbmRlciwgYm91 bmRlZH07CisKKy8vLyBBIGhhbmRsZSB0byBzZW5kIGRhdGEgdG8gdGhlIHdvcmtlciB0aHJlYWQg KGltcGxlbWVudHMgY2xvbmUpCitwdWIgc3RydWN0IFNlbmRIYW5kbGU8ST4geworICAgIGlucHV0 OiBTZW5kZXI8ST4sCisgICAgYWJvcnQ6IEFyYzxNdXRleDxPcHRpb248U3RyaW5nPj4+LAorfQor CisvLy8gUmV0dXJucyB0aGUgZmlyc3QgZXJyb3IgaGFwcGVuZWQsIGlmIGFueQorcHViIGZuIGNo ZWNrX2Fib3J0KGFib3J0OiAmTXV0ZXg8T3B0aW9uPFN0cmluZz4+KSAtPiBSZXN1bHQ8KCksIEVy cm9yPiB7CisgICAgbGV0IGd1YXJkID0gYWJvcnQubG9jaygpLnVud3JhcCgpOworICAgIGlmIGxl dCBTb21lKGVycl9tc2cpID0gJipndWFyZCB7CisgICAgICAgIHJldHVybiBFcnIoZm9ybWF0X2Vy ciEoInt9IiwgZXJyX21zZykpOworICAgIH0KKyAgICBPaygoKSkKK30KKworaW1wbDxJOiBTZW5k PiBTZW5kSGFuZGxlPEk+IHsKKyAgICAvLy8gU2VuZCBkYXRhIHRvIHRoZSB3b3JrZXIgdGhyZWFk cworICAgIHB1YiBmbiBzZW5kKCZzZWxmLCBpbnB1dDogSSkgLT4gUmVzdWx0PCgpLCBFcnJvcj4g eworICAgICAgICBjaGVja19hYm9ydCgmc2VsZi5hYm9ydCk/OworICAgICAgICBtYXRjaCBzZWxm LmlucHV0LnNlbmQoaW5wdXQpIHsKKyAgICAgICAgICAgIE9rKCgpKSA9PiBPaygoKSksCisgICAg ICAgICAgICBFcnIoXykgPT4gYmFpbCEoInNlbmQgZmFpbGVkIC0gY2hhbm5lbCBjbG9zZWQiKSwK KyAgICAgICAgfQorICAgIH0KK30KKworLy8vIEEgdGhyZWFkIHBvb2wgd2hpY2ggcnVuIHRoZSBz dXBwbGllZCBjbG9zdXJlCisvLy8KKy8vLyBUaGUgc2VuZCBjb21tYW5kIHNlbmRzIGRhdGEgdG8g dGhlIHdvcmtlciB0aHJlYWRzLiBJZiBvbmUgaGFuZGxlcgorLy8vIHJldHVybnMgYW4gZXJyb3Is IHdlIG1hcmsgdGhlIGNoYW5uZWwgYXMgZmFpbGVkIGFuZCBpdCBpcyBubworLy8vIGxvbmdlciBw b3NzaWJsZSB0byBzZW5kIGRhdGEuCisvLy8KKy8vLyBXaGVuIGRvbmUsIHRoZSAnY29tcGxldGUo KScgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCB0byBjaGVjayBmb3IKKy8vLyBvdXRzdGFuZGlu ZyBlcnJvcnMuCitwdWIgc3RydWN0IFBhcmFsbGVsSGFuZGxlcjxJPiB7CisgICAgaGFuZGxlczog VmVjPEpvaW5IYW5kbGU8KCk+PiwKKyAgICBuYW1lOiBTdHJpbmcsCisgICAgaW5wdXQ6IE9wdGlv bjxTZW5kSGFuZGxlPEk+PiwKK30KKworaW1wbDxJPiBDbG9uZSBmb3IgU2VuZEhhbmRsZTxJPiB7 CisgICAgZm4gY2xvbmUoJnNlbGYpIC0+IFNlbGYgeworICAgICAgICBTZWxmIHsKKyAgICAgICAg ICAgIGlucHV0OiBzZWxmLmlucHV0LmNsb25lKCksCisgICAgICAgICAgICBhYm9ydDogQXJjOjpj bG9uZSgmc2VsZi5hYm9ydCksCisgICAgICAgIH0KKyAgICB9Cit9CisKK2ltcGw8STogU2VuZCAr ICdzdGF0aWM+IFBhcmFsbGVsSGFuZGxlcjxJPiB7CisgICAgLy8vIENyZWF0ZSBhIG5ldyB0aHJl YWQgcG9vbCwgZWFjaCB0aHJlYWQgcHJvY2Vzc2luZyBpbmNvbWluZyBkYXRhCisgICAgLy8vIHdp dGggJ2hhbmRsZXJfZm4nLgorICAgIHB1YiBmbiBuZXc8Rj4obmFtZTogJnN0ciwgdGhyZWFkczog dXNpemUsIGhhbmRsZXJfZm46IEYpIC0+IFNlbGYKKyAgICB3aGVyZQorICAgICAgICBGOiBGbihJ KSAtPiBSZXN1bHQ8KCksIEVycm9yPiArIFNlbmQgKyBDbG9uZSArICdzdGF0aWMsCisgICAgewor ICAgICAgICBsZXQgbXV0IGhhbmRsZXMgPSBWZWM6Om5ldygpOworICAgICAgICBsZXQgKGlucHV0 X3R4LCBpbnB1dF9yeCkgPSBib3VuZGVkOjo8ST4odGhyZWFkcyk7CisKKyAgICAgICAgbGV0IGFi b3J0ID0gQXJjOjpuZXcoTXV0ZXg6Om5ldyhOb25lKSk7CisKKyAgICAgICAgZm9yIGkgaW4gMC4u dGhyZWFkcyB7CisgICAgICAgICAgICBsZXQgaW5wdXRfcnggPSBpbnB1dF9yeC5jbG9uZSgpOwor ICAgICAgICAgICAgbGV0IGFib3J0ID0gQXJjOjpjbG9uZSgmYWJvcnQpOworICAgICAgICAgICAg bGV0IGhhbmRsZXJfZm4gPSBoYW5kbGVyX2ZuLmNsb25lKCk7CisKKyAgICAgICAgICAgIGhhbmRs ZXMucHVzaCgKKyAgICAgICAgICAgICAgICBzdGQ6OnRocmVhZDo6QnVpbGRlcjo6bmV3KCkKKyAg ICAgICAgICAgICAgICAgICAgLm5hbWUoZm9ybWF0ISgie30gKHt9KSIsIG5hbWUsIGkpKQorICAg ICAgICAgICAgICAgICAgICAuc3Bhd24obW92ZSB8fCB7CisgICAgICAgICAgICAgICAgICAgICAg ICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IG1hdGNoIGlu cHV0X3J4LnJlY3YoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9rKGRhdGEp ID0+IGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihfKSA9PiByZXR1 cm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiBsZXQgRXJyKGVycikgPSAoaGFuZGxlcl9mbikoZGF0YSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXV0IGd1YXJkID0gYWJvcnQubG9jaygpLnVud3Jh cCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBndWFyZC5pc19ub25lKCkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmd1YXJkID0gU29tZShlcnIu dG9fc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICAudW53cmFwKCksCisgICAgICAg ICAgICApOworICAgICAgICB9CisgICAgICAgIFNlbGYgeworICAgICAgICAgICAgaGFuZGxlcywK KyAgICAgICAgICAgIG5hbWU6IG5hbWUudG9fc3RyaW5nKCksCisgICAgICAgICAgICBpbnB1dDog U29tZShTZW5kSGFuZGxlIHsKKyAgICAgICAgICAgICAgICBpbnB1dDogaW5wdXRfdHgsCisgICAg ICAgICAgICAgICAgYWJvcnQsCisgICAgICAgICAgICB9KSwKKyAgICAgICAgfQorICAgIH0KKwor ICAgIC8vLyBSZXR1cm5zIGEgY2xvbmVhYmxlIGNoYW5uZWwgdG8gc2VuZCBkYXRhIHRvIHRoZSB3 b3JrZXIgdGhyZWFkcworICAgIHB1YiBmbiBjaGFubmVsKCZzZWxmKSAtPiBTZW5kSGFuZGxlPEk+ IHsKKyAgICAgICAgc2VsZi5pbnB1dC5hc19yZWYoKS51bndyYXAoKS5jbG9uZSgpCisgICAgfQor CisgICAgLy8vIFNlbmQgZGF0YSB0byB0aGUgd29ya2VyIHRocmVhZHMKKyAgICBwdWIgZm4gc2Vu ZCgmc2VsZiwgaW5wdXQ6IEkpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgc2VsZi5p bnB1dC5hc19yZWYoKS51bndyYXAoKS5zZW5kKGlucHV0KT87CisgICAgICAgIE9rKCgpKQorICAg IH0KKworICAgIC8vLyBXYWl0IGZvciB3b3JrZXIgdGhyZWFkcyB0byBjb21wbGV0ZSBhbmQgY2hl Y2sgZm9yIGVycm9ycworICAgIHB1YiBmbiBjb21wbGV0ZShtdXQgc2VsZikgLT4gUmVzdWx0PCgp LCBFcnJvcj4geworICAgICAgICBsZXQgaW5wdXQgPSBzZWxmLmlucHV0LnRha2UoKS51bndyYXAo KTsKKyAgICAgICAgbGV0IGFib3J0ID0gQXJjOjpjbG9uZSgmaW5wdXQuYWJvcnQpOworICAgICAg ICBjaGVja19hYm9ydCgmYWJvcnQpPzsKKyAgICAgICAgZHJvcChpbnB1dCk7CisKKyAgICAgICAg bGV0IG1zZ19saXN0ID0gc2VsZi5qb2luX3RocmVhZHMoKTsKKworICAgICAgICAvLyBhbiBlcnJv ciBtaWdodCBiZSBlbmNvdW50ZXJlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgam9pbgorICAgICAg ICBjaGVja19hYm9ydCgmYWJvcnQpPzsKKworICAgICAgICBpZiBtc2dfbGlzdC5pc19lbXB0eSgp IHsKKyAgICAgICAgICAgIHJldHVybiBPaygoKSk7CisgICAgICAgIH0KKyAgICAgICAgRXJyKGZv cm1hdF9lcnIhKCJ7fSIsIG1zZ19saXN0LmpvaW4oIlxuIikpKQorICAgIH0KKworICAgIGZuIGpv aW5fdGhyZWFkcygmbXV0IHNlbGYpIC0+IFZlYzxTdHJpbmc+IHsKKyAgICAgICAgbGV0IG11dCBt c2dfbGlzdCA9IFZlYzo6bmV3KCk7CisKKyAgICAgICAgbGV0IG11dCBpID0gMDsKKyAgICAgICAg d2hpbGUgbGV0IFNvbWUoaGFuZGxlKSA9IHNlbGYuaGFuZGxlcy5wb3AoKSB7CisgICAgICAgICAg ICBpZiBsZXQgRXJyKHBhbmljKSA9IGhhbmRsZS5qb2luKCkgeworICAgICAgICAgICAgICAgIGlm IGxldCBTb21lKHBhbmljX21zZykgPSBwYW5pYy5kb3duY2FzdF9yZWY6Ojwmc3RyPigpIHsKKyAg ICAgICAgICAgICAgICAgICAgbXNnX2xpc3QucHVzaChmb3JtYXQhKCJ0aHJlYWQge30gKHtpfSkg cGFuaWNrZWQ6IHtwYW5pY19tc2d9Iiwgc2VsZi5uYW1lKSk7CisgICAgICAgICAgICAgICAgfSBl bHNlIGlmIGxldCBTb21lKHBhbmljX21zZykgPSBwYW5pYy5kb3duY2FzdF9yZWY6OjxTdHJpbmc+ KCkgeworICAgICAgICAgICAgICAgICAgICBtc2dfbGlzdC5wdXNoKGZvcm1hdCEoInRocmVhZCB7 fSAoe2l9KSBwYW5pY2tlZDoge3BhbmljX21zZ30iLCBzZWxmLm5hbWUpKTsKKyAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtc2dfbGlzdC5wdXNoKGZvcm1hdCEo InRocmVhZCB7fSAoe2l9KSBwYW5pY2tlZCIsIHNlbGYubmFtZSkpOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgKz0gMTsKKyAgICAgICAgfQorICAgICAg ICBtc2dfbGlzdAorICAgIH0KK30KKworLy8gTm90ZTogV2UgbWFrZSBzdXJlIHRoYXQgYWxsIHRo cmVhZHMgd2lsbCBiZSBqb2luZWQKK2ltcGw8ST4gRHJvcCBmb3IgUGFyYWxsZWxIYW5kbGVyPEk+ IHsKKyAgICBmbiBkcm9wKCZtdXQgc2VsZikgeworICAgICAgICBkcm9wKHNlbGYuaW5wdXQudGFr ZSgpKTsKKyAgICAgICAgd2hpbGUgbGV0IFNvbWUoaGFuZGxlKSA9IHNlbGYuaGFuZGxlcy5wb3Ao KSB7CisgICAgICAgICAgICBsZXQgXyA9IGhhbmRsZS5qb2luKCk7CisgICAgICAgIH0KKyAgICB9 Cit9CmRpZmYgLS1naXQgYS93cmFwcGVyLmggYi93cmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNjRkMGFhNgotLS0gL2Rldi9udWxsCisrKyBiL3dyYXBwZXIuaApA QCAtMCwwICsxIEBACisjaW5jbHVkZSA8cnJkLmg+Ci0tIAoyLjM5LjUKCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcHZlLWRldmVsIG1haWxpbmcgbGlz dApwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9j Z2ktYmluL21haWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCg==