From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pve-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9])
	by lore.proxmox.com (Postfix) with ESMTPS id 9605C1FF164
	for <inbox@lore.proxmox.com>; Fri, 23 May 2025 18:00:51 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 751B01E4C8;
	Fri, 23 May 2025 18:00:37 +0200 (CEST)
From: Aaron Lauterer <a.lauterer@proxmox.com>
To: pve-devel@lists.proxmox.com
Date: Fri, 23 May 2025 18:00:13 +0200
Message-Id: <20250523160029.404400-4-a.lauterer@proxmox.com>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250523160029.404400-1-a.lauterer@proxmox.com>
References: <20250523160029.404400-1-a.lauterer@proxmox.com>
MIME-Version: 1.0
X-SPAM-LEVEL: Spam detection results:  0
 AWL -0.030 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: [pve-devel] [PATCH pve9-rrd-migration-tool 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 <pve-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/>
List-Post: <mailto:pve-devel@lists.proxmox.com>
List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: pve-devel-bounces@lists.proxmox.com
Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com>

U2lnbmVkLW9mZi1ieTogQWFyb24gTGF1dGVyZXIgPGEubGF1dGVyZXJAcHJveG1veC5jb20+Ci0t
LQogLmNhcmdvL2NvbmZpZy50b21sICAgICAgfCAgIDggKwogLmdpdGlnbm9yZSAgICAgICAgICAg
ICAgfCAgIDUgKwogQ2FyZ28udG9tbCAgICAgICAgICAgICAgfCAgMjAgKysKIGJ1aWxkLnJzICAg
ICAgICAgICAgICAgIHwgIDI5ICsrKwogc3JjL2xpYi5ycyAgICAgICAgICAgICAgfCAgIDUgKwog
c3JjL21haW4ucnMgICAgICAgICAgICAgfCA1MDQgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKwogc3JjL3BhcmFsbGVsX2hhbmRsZXIucnMgfCAxNjIgKysrKysrKysrKysr
Kwogd3JhcHBlci5oICAgICAgICAgICAgICAgfCAgIDEgKwogOCBmaWxlcyBjaGFuZ2VkLCA3MzQg
aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IC5jYXJnby9jb25maWcudG9tbAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDYXJnby50b21s
CiBjcmVhdGUgbW9kZSAxMDA2NDQgYnVpbGQucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvbGli
LnJzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL21haW4ucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
cmMvcGFyYWxsZWxfaGFuZGxlci5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHdyYXBwZXIuaAoKZGlm
ZiAtLWdpdCBhLy5jYXJnby9jb25maWcudG9tbCBiLy5jYXJnby9jb25maWcudG9tbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDM5Yzk3Ci0tLSAvZGV2L251bGwKKysrIGIv
LmNhcmdvL2NvbmZpZy50b21sCkBAIC0wLDAgKzEsOCBAQAorW3NvdXJjZV0KK1tzb3VyY2UuZGVi
aWFuLXBhY2thZ2VzXQorZGlyZWN0b3J5ID0gIi91c3Ivc2hhcmUvY2FyZ28vcmVnaXN0cnkiCitb
c291cmNlLmNyYXRlcy1pb10KK3JlcGxhY2Utd2l0aCA9ICJkZWJpYW4tcGFja2FnZXMiCisKK1tw
cm9maWxlLnJlbGVhc2VdCitkZWJ1Zz10cnVlCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdp
dGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQxZTYzCi0tLSAv
ZGV2L251bGwKKysrIGIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDUgQEAKKy4vdGFyZ2V0CisuL2J1
aWxkCisKK0NhcmdvLmxvY2sKKwpkaWZmIC0tZ2l0IGEvQ2FyZ28udG9tbCBiL0NhcmdvLnRvbWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1MjNmMwotLS0gL2Rldi9udWxs
CisrKyBiL0NhcmdvLnRvbWwKQEAgLTAsMCArMSwyMCBAQAorW3BhY2thZ2VdCituYW1lID0gInBy
b3htb3hfcnJkX21pZ3JhdGlvbl84LTkiCit2ZXJzaW9uID0gIjAuMS4wIgorZWRpdGlvbiA9ICIy
MDIxIgorYXV0aG9ycyA9IFsKKyAgICAiQWFyb24gTGF1dGVyZXIgPGEubGF1dGVyZXJAcHJveG1v
eC5jb20+IiwKKyAgICAiUHJveG1veCBTdXBwb3J0IFRlYW0gPHN1cHBvcnRAcHJveG1veC5jb20+
IiwKK10KK2xpY2Vuc2UgPSAiQUdQTC0zIgoraG9tZXBhZ2UgPSAiaHR0cHM6Ly93d3cucHJveG1v
eC5jb20iCisKK1tkZXBlbmRlbmNpZXNdCithbnlob3cgPSAiMS4wLjg2IgorcGljby1hcmdzID0g
IjAuNS4wIgorcHJveG1veC1hc3luYyA9ICIwLjQiCitjcm9zc2JlYW0tY2hhbm5lbCA9ICIwLjUi
CisKK1tidWlsZC1kZXBlbmRlbmNpZXNdCitiaW5kZ2VuID0gIjAuNjYuMSIKK3BrZy1jb25maWcg
PSAiMC4zIgpkaWZmIC0tZ2l0IGEvYnVpbGQucnMgYi9idWlsZC5ycwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41NmQwN2NjCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQucnMK
QEAgLTAsMCArMSwyOSBAQAordXNlIHN0ZDo6ZW52OwordXNlIHN0ZDo6cGF0aDo6UGF0aEJ1ZjsK
KworZm4gbWFpbigpIHsKKyAgICBwcmludGxuISgiY2FyZ286cnVzdGMtbGluay1saWI9cnJkIik7
CisKKyAgICBwcmludGxuISgiY2FyZ286cmVydW4taWYtY2hhbmdlZD13cmFwcGVyLmgiKTsKKyAg
ICAvLyBUaGUgYmluZGdlbjo6QnVpbGRlciBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludAorICAgIC8v
IHRvIGJpbmRnZW4sIGFuZCBsZXRzIHlvdSBidWlsZCB1cCBvcHRpb25zIGZvcgorICAgIC8vIHRo
ZSByZXN1bHRpbmcgYmluZGluZ3MuCisKKyAgICBsZXQgYmluZGluZ3MgPSBiaW5kZ2VuOjpCdWls
ZGVyOjpkZWZhdWx0KCkKKyAgICAgICAgLy8gVGhlIGlucHV0IGhlYWRlciB3ZSB3b3VsZCBsaWtl
IHRvIGdlbmVyYXRlCisgICAgICAgIC8vIGJpbmRpbmdzIGZvci4KKyAgICAgICAgLmhlYWRlcigi
d3JhcHBlci5oIikKKyAgICAgICAgLy8gVGVsbCBjYXJnbyB0byBpbnZhbGlkYXRlIHRoZSBidWls
dCBjcmF0ZSB3aGVuZXZlciBhbnkgb2YgdGhlCisgICAgICAgIC8vIGluY2x1ZGVkIGhlYWRlciBm
aWxlcyBjaGFuZ2VkLgorICAgICAgICAucGFyc2VfY2FsbGJhY2tzKEJveDo6bmV3KGJpbmRnZW46
OkNhcmdvQ2FsbGJhY2tzKSkKKyAgICAgICAgLy8gRmluaXNoIHRoZSBidWlsZGVyIGFuZCBnZW5l
cmF0ZSB0aGUgYmluZGluZ3MuCisgICAgICAgIC5nZW5lcmF0ZSgpCisgICAgICAgIC8vIFVud3Jh
cCB0aGUgUmVzdWx0IGFuZCBwYW5pYyBvbiBmYWlsdXJlLgorICAgICAgICAuZXhwZWN0KCJVbmFi
bGUgdG8gZ2VuZXJhdGUgYmluZGluZ3MiKTsKKworICAgIC8vIFdyaXRlIHRoZSBiaW5kaW5ncyB0
byB0aGUgJE9VVF9ESVIvYmluZGluZ3MucnMgZmlsZS4KKyAgICBsZXQgb3V0X3BhdGggPSBQYXRo
QnVmOjpmcm9tKGVudjo6dmFyKCJPVVRfRElSIikudW53cmFwKCkpOworICAgIGJpbmRpbmdzCisg
ICAgICAgIC53cml0ZV90b19maWxlKG91dF9wYXRoLmpvaW4oImJpbmRpbmdzLnJzIikpCisgICAg
ICAgIC5leHBlY3QoIkNvdWxkbid0IHdyaXRlIGJpbmRpbmdzISIpOworfQpkaWZmIC0tZ2l0IGEv
c3JjL2xpYi5ycyBiL3NyYy9saWIucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTM4YTEzYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9saWIucnMKQEAgLTAsMCArMSw1IEBA
CisjIVthbGxvdyhub25fdXBwZXJfY2FzZV9nbG9iYWxzKV0KKyMhW2FsbG93KG5vbl9jYW1lbF9j
YXNlX3R5cGVzKV0KKyMhW2FsbG93KG5vbl9zbmFrZV9jYXNlKV0KKworaW5jbHVkZSEoY29uY2F0
IShlbnYhKCJPVVRfRElSIiksICIvYmluZGluZ3MucnMiKSk7CmRpZmYgLS1naXQgYS9zcmMvbWFp
bi5ycyBiL3NyYy9tYWluLnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQz
ZjE4MWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi5ycwpAQCAtMCwwICsxLDUwNCBAQAor
dXNlIGFueWhvdzo6e2JhaWwsIEVycm9yLCBSZXN1bHR9OwordXNlIHByb3htb3hfcnJkX21pZ3Jh
dGlvbl84Xzk6OntycmRfY2xlYXJfZXJyb3IsIHJyZF9jcmVhdGVfcjIsIHJyZF9nZXRfY29udGV4
dCwgcnJkX2dldF9lcnJvcn07Cit1c2Ugc3RkOjpmZmk6OntDU3RyLCBDU3RyaW5nLCBPc1N0cmlu
Z307Cit1c2Ugc3RkOjpmczsKK3VzZSBzdGQ6Om9zOjp1bml4OjpmZmk6Ok9zU3RyRXh0OwordXNl
IHN0ZDo6b3M6OnVuaXg6OmZzOjpQZXJtaXNzaW9uc0V4dDsKK3VzZSBzdGQ6OnBhdGg6OlBhdGhC
dWY7Cit1c2Ugc3RkOjpzeW5jOjpBcmM7CisKK3VzZSBjcmF0ZTo6cGFyYWxsZWxfaGFuZGxlcjo6
UGFyYWxsZWxIYW5kbGVyOworCitwdWIgbW9kIHBhcmFsbGVsX2hhbmRsZXI7CisKK2NvbnN0IEJB
U0VfRElSOiAmc3RyID0gIi92YXIvbGliL3JyZGNhY2hlZC9kYiI7Citjb25zdCBTT1VSQ0VfU1VC
RElSX05PREU6ICZzdHIgPSAicHZlMi1ub2RlIjsKK2NvbnN0IFNPVVJDRV9TVUJESVJfR1VFU1Q6
ICZzdHIgPSAicHZlMi12bSI7Citjb25zdCBTT1VSQ0VfU1VCRElSX1NUT1JBR0U6ICZzdHIgPSAi
cHZlMi1zdG9yYWdlIjsKK2NvbnN0IFRBUkdFVF9TVUJESVJfTk9ERTogJnN0ciA9ICJwdmU5LW5v
ZGUiOworY29uc3QgVEFSR0VUX1NVQkRJUl9HVUVTVDogJnN0ciA9ICJwdmU5LXZtIjsKK2NvbnN0
IFRBUkdFVF9TVUJESVJfU1RPUkFHRTogJnN0ciA9ICJwdmU5LXN0b3JhZ2UiOworY29uc3QgTUFY
X1RIUkVBRFM6IHVzaXplID0gNDsKK2NvbnN0IFJSRF9TVEVQX1NJWkU6IHVzaXplID0gNjA7CisK
Ky8vIFJSQXMgYXJlIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisvLworLy8gUlJBOkNG
OnhmZjpzdGVwOnJvd3MKKy8vIENGOiBBVkVSQUdFIG9yIE1BWAorLy8geGZmOiAwLjUKKy8vIHN0
ZXBzOiBzdGVwc2l6ZSBpcyBkZWZpbmVkIG9uIHJyZCBmaWxlIGNyZWF0aW9uISBleGFtcGxlOiB3
aXRoIDYwIHNlY29uZHMgc3RlcCBzaXplOgorLy8JZS5nLiAxID0+IDYwIHNlYywgMzAgPT4gMTgw
MCBzZWNvbmRzIG9yIDMwIG1pbgorLy8gcm93czogaG93IG1hbnkgYWdncmVnYXRlZCByb3dzIGFy
ZSBrZXB0LCBhcyBpbiBob3cgZmFyIGJhY2sgaW4gdGltZSB3ZSBzdG9yZSBkYXRhCisvLworLy8g
aG93IG1hbnkgc2Vjb25kcyBhcmUgYWdncmVnYXRlZCBwZXIgUlJBOiBzdGVwcyAqIHN0ZXBzaXpl
ICogcm93cworLy8gaG93IG1hbnkgaG91cnMgYXJlIGFnZ3JlZ2F0ZWQgcGVyIFJSQTogc3RlcHMg
KiBzdGVwc2l6ZSAqIHJvd3MgLyAzNjAwCisvLyBob3cgbWFueSBkYXlzIGFyZSBhZ2dyZWdhdGVk
IHBlciBSUkE6IHN0ZXBzICogc3RlcHNpemUgKiByb3dzIC8gMzYwMCAvIDI0CisvLyBodHRwczov
L29zcy5vZXRpa2VyLmNoL3JyZHRvb2wvdHV0L3JyZC1iZWdpbm5lcnMuZW4uaHRtbCNVbmRlcnN0
YW5kaW5nX2J5X2FuX2V4YW1wbGUKKworY29uc3QgUlJEX1ZNX0RFRjogWyZDU3RyOyAyNV0gPSBb
CisgICAgYyJEUzptYXhjcHU6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpjcHU6R0FVR0U6MTIw
OjA6VSIsCisgICAgYyJEUzptYXhtZW06R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzptZW06R0FV
R0U6MTIwOjA6VSIsCisgICAgYyJEUzptYXhkaXNrOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6
ZGlzazpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOm5ldGluOkRFUklWRToxMjA6MDpVIiwKKyAg
ICBjIkRTOm5ldG91dDpERVJJVkU6MTIwOjA6VSIsCisgICAgYyJEUzpkaXNrcmVhZDpERVJJVkU6
MTIwOjA6VSIsCisgICAgYyJEUzpkaXNrd3JpdGU6REVSSVZFOjEyMDowOlUiLAorICAgIGMiRFM6
bWVtaG9zdDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnByZXNzdXJlY3B1c29tZTpHQVVHRTox
MjA6MDpVIiwKKyAgICBjIkRTOnByZXNzdXJlY3B1ZnVsbDpHQVVHRToxMjA6MDpVIiwKKyAgICBj
IkRTOnByZXNzdXJlaW9zb21lOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6cHJlc3N1cmVpb2Z1
bGw6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpwcmVzc3VyZW1lbW9yeXNvbWU6R0FVR0U6MTIw
OjA6VSIsCisgICAgYyJEUzpwcmVzc3VyZW1lbW9yeWZ1bGw6R0FVR0U6MTIwOjA6VSIsCisgICAg
YyJSUkE6QVZFUkFHRTowLjU6MToxNDQwIiwgICAgLy8gMSBtaW4gKiAxNDQwID0+IDEgZGF5Cisg
ICAgYyJSUkE6QVZFUkFHRTowLjU6MzA6MTQ0MCIsICAgLy8gMzAgbWluICogMTQ0MCA9PiAzMCBk
YXkKKyAgICBjIlJSQTpBVkVSQUdFOjAuNTozNjA6MTQ0MCIsICAvLyA2IGhvdXJzICogMTQ0MCA9
PiAzNjAgZGF5IH4xIHllYXIKKyAgICBjIlJSQTpBVkVSQUdFOjAuNToxMDA4MDo1NzAiLCAvLyAx
IHdlZWsgKiA1NzAgPT4gfjEwIHllYXJzCisgICAgYyJSUkE6TUFYOjAuNToxOjE0NDAiLCAgICAg
ICAgLy8gMSBtaW4gKiAxNDQwID0+IDEgZGF5CisgICAgYyJSUkE6TUFYOjAuNTozMDoxNDQwIiwg
ICAgICAgLy8gMzAgbWluICogMTQ0MCA9PiAzMCBkYXkKKyAgICBjIlJSQTpNQVg6MC41OjM2MDox
NDQwIiwgICAgICAvLyA2IGhvdXJzICogMTQ0MCA9PiAzNjAgZGF5IH4xIHllYXIKKyAgICBjIlJS
QTpNQVg6MC41OjEwMDgwOjU3MCIsICAgICAvLyAxIHdlZWsgKiA1NzAgPT4gfjEwIHllYXJzCitd
OworCitjb25zdCBSUkRfTk9ERV9ERUY6IFsmQ1N0cjsgMjldID0gWworICAgIGMiRFM6bG9hZGF2
ZzpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOm1heGNwdTpHQVVHRToxMjA6MDpVIiwKKyAgICBj
IkRTOmNwdTpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOmlvd2FpdDpHQVVHRToxMjA6MDpVIiwK
KyAgICBjIkRTOm1lbXRvdGFsOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6bWVtdXNlZDpHQVVH
RToxMjA6MDpVIiwKKyAgICBjIkRTOnN3YXB0b3RhbDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRT
OnN3YXB1c2VkOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6cm9vdHRvdGFsOkdBVUdFOjEyMDow
OlUiLAorICAgIGMiRFM6cm9vdHVzZWQ6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpuZXRpbjpE
RVJJVkU6MTIwOjA6VSIsCisgICAgYyJEUzpuZXRvdXQ6REVSSVZFOjEyMDowOlUiLAorICAgIGMi
RFM6bWVtZnJlZTpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOm1lbWJ1ZmZlcnM6R0FVR0U6MTIw
OjA6VSIsCisgICAgYyJEUzptZW1jYWNoZWQ6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzphcmNz
aXplOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6cHJlc3N1cmVjcHVzb21lOkdBVUdFOjEyMDow
OlUiLAorICAgIGMiRFM6cHJlc3N1cmVpb3NvbWU6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpw
cmVzc3VyZWlvZnVsbDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnByZXNzdXJlbWVtb3J5c29t
ZTpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnByZXNzdXJlbWVtb3J5ZnVsbDpHQVVHRToxMjA6
MDpVIiwKKyAgICBjIlJSQTpBVkVSQUdFOjAuNToxOjE0NDAiLCAgICAvLyAxIG1pbiAqIDE0NDAg
PT4gMSBkYXkKKyAgICBjIlJSQTpBVkVSQUdFOjAuNTozMDoxNDQwIiwgICAvLyAzMCBtaW4gKiAx
NDQwID0+IDMwIGRheQorICAgIGMiUlJBOkFWRVJBR0U6MC41OjM2MDoxNDQwIiwgIC8vIDYgaG91
cnMgKiAxNDQwID0+IDM2MCBkYXkgfjEgeWVhcgorICAgIGMiUlJBOkFWRVJBR0U6MC41OjEwMDgw
OjU3MCIsIC8vIDEgd2VlayAqIDU3MCA9PiB+MTAgeWVhcnMKKyAgICBjIlJSQTpNQVg6MC41OjE6
MTQ0MCIsICAgICAgICAvLyAxIG1pbiAqIDE0NDAgPT4gMSBkYXkKKyAgICBjIlJSQTpNQVg6MC41
OjMwOjE0NDAiLCAgICAgICAvLyAzMCBtaW4gKiAxNDQwID0+IDMwIGRheQorICAgIGMiUlJBOk1B
WDowLjU6MzYwOjE0NDAiLCAgICAgIC8vIDYgaG91cnMgKiAxNDQwID0+IDM2MCBkYXkgfjEgeWVh
cgorICAgIGMiUlJBOk1BWDowLjU6MTAwODA6NTcwIiwgICAgIC8vIDEgd2VlayAqIDU3MCA9PiB+
MTAgeWVhcnMKK107CisKK2NvbnN0IFJSRF9TVE9SQUdFX0RFRjogWyZDU3RyOyAxMF0gPSBbCisg
ICAgYyJEUzp0b3RhbDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnVzZWQ6R0FVR0U6MTIwOjA6
VSIsCisgICAgYyJSUkE6QVZFUkFHRTowLjU6MToxNDQwIiwgICAgLy8gMSBtaW4gKiAxNDQwID0+
IDEgZGF5CisgICAgYyJSUkE6QVZFUkFHRTowLjU6MzA6MTQ0MCIsICAgLy8gMzAgbWluICogMTQ0
MCA9PiAzMCBkYXkKKyAgICBjIlJSQTpBVkVSQUdFOjAuNTozNjA6MTQ0MCIsICAvLyA2IGhvdXJz
ICogMTQ0MCA9PiAzNjAgZGF5IH4xIHllYXIKKyAgICBjIlJSQTpBVkVSQUdFOjAuNToxMDA4MDo1
NzAiLCAvLyAxIHdlZWsgKiA1NzAgPT4gfjEwIHllYXJzCisgICAgYyJSUkE6TUFYOjAuNToxOjE0
NDAiLCAgICAgICAgLy8gMSBtaW4gKiAxNDQwID0+IDEgZGF5CisgICAgYyJSUkE6TUFYOjAuNToz
MDoxNDQwIiwgICAgICAgLy8gMzAgbWluICogMTQ0MCA9PiAzMCBkYXkKKyAgICBjIlJSQTpNQVg6
MC41OjM2MDoxNDQwIiwgICAgICAvLyA2IGhvdXJzICogMTQ0MCA9PiAzNjAgZGF5IH4xIHllYXIK
KyAgICBjIlJSQTpNQVg6MC41OjEwMDgwOjU3MCIsICAgICAvLyAxIHdlZWsgKiA1NzAgPT4gfjEw
IHllYXJzCitdOworCitjb25zdCBIRUxQOiAmc3RyID0gIlwKK3Byb3htb3gtcnJkLW1pZ3JhdGlv
biB0b29sCisKK01pZ3JhdGVzIGV4aXN0aW5nIFJSRCBncmFwaCBkYXRhIHRvIHRoZSBuZXcgZm9y
bWF0LgorCitVc2UgdGhpcyBvbmx5IGluIHRoZSBwcm9jZXNzIG9mIHVwZ3JhZGluZyBmcm9tIFBy
b3htb3ggVkUgOCB0byA5IGFjY29yZGluZyB0byB0aGUgdXBncmFkZSBndWlkZSEKKworVVNBR0U6
CisgICAgcHJveG1veC1ycmQtbWlncmF0aW9uIFtPUFRJT05TXQorCisgICAgRkxBR1M6CisgICAg
ICAgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgICBQcmludHMgdGhpcyBoZWxwIGluZm9ybWF0
aW9uCisKKyAgICBPUFRJT05TOgorICAgICAgICAtLWZvcmNlICAgICAgICAgICAgICAgICAgICAg
TWlncmF0ZSwgZXZlbiBpZiB0aGUgdGFyZ2V0IGFscmVhZHkgZXhpc3RzLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB3aWxsIG92ZXJ3cml0ZSBhbnkgbWlncmF0ZWQg
UlJEIGZpbGVzIQorCisgICAgICAgIC0tdGhyZWFkcyBUSFJFQURTICAgICAgICAgICBOdW1iZXIg
b2YgcGFyYWxlbGwgdGhyZWFkcy4gRGVmYXVsdCBmcm9tIDEgdG8gNC4KKworICAgICAgICAtLXRl
c3QgICAgICAgICAgICAgICAgICAgICAgRm9yIGludGVybmFsIHVzZSBvbmx5LgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdHMgcGFyYWxsZWwgZ3Vlc3QgbWlncmF0aW9u
IG9ubHkhCisgICAgICAgIC0tc291cmNlICAgICAgICAgICAgICAgICAgICBGb3IgaW50ZXJuYWwg
dXNlIG9ubHkuIFNvdXJjZSBkaXJlY3RvcnkuCisgICAgICAgIC0tdGFyZ2V0ICAgICAgICAgICAg
ICAgICAgICBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuIFRhcmdldCBkaXJlY3RvcnkuCisgICAgICAi
OworCisjW2Rlcml2ZShEZWJ1ZyldCitzdHJ1Y3QgQXJncyB7CisgICAgZm9yY2U6IGJvb2wsCisg
ICAgdGhyZWFkczogT3B0aW9uPHVzaXplPiwKKyAgICB0ZXN0OiBib29sLAorICAgIHNvdXJjZTog
T3B0aW9uPFBhdGhCdWY+LAorICAgIHRhcmdldDogT3B0aW9uPFBhdGhCdWY+LAorfQorCitmbiBw
YXJzZV9hcmdzKCkgLT4gUmVzdWx0PEFyZ3MsIEVycm9yPiB7CisgICAgbGV0IG11dCBwYXJncyA9
IHBpY29fYXJnczo6QXJndW1lbnRzOjpmcm9tX2VudigpOworCisgICAgLy8gSGVscCBoYXMgYSBo
aWdoZXIgcHJpb3JpdHkgYW5kIHNob3VsZCBiZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisgICAgaWYg
cGFyZ3MuY29udGFpbnMoWyItaCIsICItLWhlbHAiXSkgeworICAgICAgICBwcmludCEoInt9Iiwg
SEVMUCk7CisgICAgICAgIHN0ZDo6cHJvY2Vzczo6ZXhpdCgwKTsKKyAgICB9CisKKyAgICBsZXQg
bXV0IGFyZ3MgPSBBcmdzIHsKKyAgICAgICAgdGhyZWFkczogcGFyZ3Mub3B0X3ZhbHVlX2Zyb21f
c3RyKCItLXRocmVhZHMiKS51bndyYXAoKSwKKyAgICAgICAgZm9yY2U6IGZhbHNlLAorICAgICAg
ICB0ZXN0OiBmYWxzZSwKKyAgICAgICAgc291cmNlOiBwYXJncy5vcHRfdmFsdWVfZnJvbV9zdHIo
Ii0tc291cmNlIikudW53cmFwKCksCisgICAgICAgIHRhcmdldDogcGFyZ3Mub3B0X3ZhbHVlX2Zy
b21fc3RyKCItLXRhcmdldCIpLnVud3JhcCgpLAorICAgIH07CisKKyAgICBpZiBwYXJncy5jb250
YWlucygiLS10ZXN0IikgeworICAgICAgICBhcmdzLnRlc3QgPSB0cnVlOworICAgIH0KKyAgICBp
ZiBwYXJncy5jb250YWlucygiLS1mb3JjZSIpIHsKKyAgICAgICAgYXJncy5mb3JjZSA9IHRydWU7
CisgICAgfQorCisgICAgLy8gSXQncyB1cCB0byB0aGUgY2FsbGVyIHdoYXQgdG8gZG8gd2l0aCB0
aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KKyAgICBsZXQgcmVtYWluaW5nID0gcGFyZ3MuZmluaXNo
KCk7CisgICAgaWYgIXJlbWFpbmluZy5pc19lbXB0eSgpIHsKKyAgICAgICAgYmFpbCEoZm9ybWF0
ISgiV2FybmluZzogdW51c2VkIGFyZ3VtZW50cyBsZWZ0OiB7Oj99IiwgcmVtYWluaW5nKSk7Cisg
ICAgfQorCisgICAgT2soYXJncykKK30KKworZm4gbWFpbigpIHsKKyAgICBsZXQgYXJncyA9IG1h
dGNoIHBhcnNlX2FyZ3MoKSB7CisgICAgICAgIE9rKHYpID0+IHYsCisgICAgICAgIEVycihlKSA9
PiB7CisgICAgICAgICAgICBlcHJpbnRsbiEoIkVycm9yOiB7fS4iLCBlKTsKKyAgICAgICAgICAg
IHN0ZDo6cHJvY2Vzczo6ZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgbXV0
IHNvdXJjZV9kaXJfZ3Vlc3RzOiBQYXRoQnVmID0gW0JBU0VfRElSLCBTT1VSQ0VfU1VCRElSX0dV
RVNUXS5pdGVyKCkuY29sbGVjdCgpOworICAgIGxldCBtdXQgdGFyZ2V0X2Rpcl9ndWVzdHM6IFBh
dGhCdWYgPSBbQkFTRV9ESVIsIFRBUkdFVF9TVUJESVJfR1VFU1RdLml0ZXIoKS5jb2xsZWN0KCk7
CisgICAgbGV0IHNvdXJjZV9kaXJfbm9kZXM6IFBhdGhCdWYgPSBbQkFTRV9ESVIsIFNPVVJDRV9T
VUJESVJfTk9ERV0uaXRlcigpLmNvbGxlY3QoKTsKKyAgICBsZXQgdGFyZ2V0X2Rpcl9ub2Rlczog
UGF0aEJ1ZiA9IFtCQVNFX0RJUiwgVEFSR0VUX1NVQkRJUl9OT0RFXS5pdGVyKCkuY29sbGVjdCgp
OworICAgIGxldCBzb3VyY2VfZGlyX3N0b3JhZ2U6IFBhdGhCdWYgPSBbQkFTRV9ESVIsIFNPVVJD
RV9TVUJESVJfU1RPUkFHRV0uaXRlcigpLmNvbGxlY3QoKTsKKyAgICBsZXQgdGFyZ2V0X2Rpcl9z
dG9yYWdlOiBQYXRoQnVmID0gW0JBU0VfRElSLCBUQVJHRVRfU1VCRElSX1NUT1JBR0VdLml0ZXIo
KS5jb2xsZWN0KCk7CisKKyAgICBpZiBhcmdzLnRlc3QgeworICAgICAgICBzb3VyY2VfZGlyX2d1
ZXN0cyA9IGFyZ3Muc291cmNlLmNsb25lKCkudW53cmFwKCk7CisgICAgICAgIHRhcmdldF9kaXJf
Z3Vlc3RzID0gYXJncy50YXJnZXQuY2xvbmUoKS51bndyYXAoKTsKKyAgICB9CisKKyAgICBpZiAh
YXJncy5mb3JjZSAmJiB0YXJnZXRfZGlyX2d1ZXN0cy5leGlzdHMoKSB7CisgICAgICAgIGVwcmlu
dGxuISgKKyAgICAgICAgICAgICJBYm9ydGluZyEgVGFyZ2V0IHBhdGggZm9yIGd1ZXN0cyBhbHJl
YWR5IGV4aXN0cy4gVXNlICctLWZvcmNlJyB0byBzdGlsbCBtaWdyYXRlLiBJdCB3aWxsIG92ZXJ3
cml0ZSBleGlzdGluZyBmaWxlcyEiCisgICAgICAgICk7CisgICAgICAgIHN0ZDo6cHJvY2Vzczo6
ZXhpdCgxKTsKKyAgICB9CisgICAgaWYgIWFyZ3MuZm9yY2UgJiYgdGFyZ2V0X2Rpcl9ub2Rlcy5l
eGlzdHMoKSB7CisgICAgICAgIGVwcmludGxuISgKKyAgICAgICAgICAgICJBYm9ydGluZyEgVGFy
Z2V0IHBhdGggZm9yIG5vZGVzIGFscmVhZHkgZXhpc3RzLiBVc2UgJy0tZm9yY2UnIHRvIHN0aWxs
IG1pZ3JhdGUuIEl0IHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzISIKKyAgICAgICAgKTsK
KyAgICAgICAgc3RkOjpwcm9jZXNzOjpleGl0KDEpOworICAgIH0KKyAgICBpZiAhYXJncy5mb3Jj
ZSAmJiB0YXJnZXRfZGlyX3N0b3JhZ2UuZXhpc3RzKCkgeworICAgICAgICBlcHJpbnRsbiEoCisg
ICAgICAgICAgICAiQWJvcnRpbmchIFRhcmdldCBwYXRoIGZvciBzdG9yYWdlcyBhbHJlYWR5IGV4
aXN0cy4gVXNlICctLWZvcmNlJyB0byBzdGlsbCBtaWdyYXRlLiBJdCB3aWxsIG92ZXJ3cml0ZSBl
eGlzdGluZyBmaWxlcyEiCisgICAgICAgICk7CisgICAgICAgIHN0ZDo6cHJvY2Vzczo6ZXhpdCgx
KTsKKyAgICB9CisKKyAgICBpZiAhYXJncy50ZXN0IHsKKyAgICAgICAgaWYgbGV0IEVycihlKSA9
IG1pZ3JhdGVfbm9kZXMoc291cmNlX2Rpcl9ub2RlcywgdGFyZ2V0X2Rpcl9ub2RlcykgeworICAg
ICAgICAgICAgZXByaW50bG4hKCJFcnJvciBtaWdyYXRpbmcgbm9kZXM6IHt9IiwgZSk7CisgICAg
ICAgICAgICBzdGQ6OnByb2Nlc3M6OmV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgbGV0
IEVycihlKSA9IG1pZ3JhdGVfc3RvcmFnZShzb3VyY2VfZGlyX3N0b3JhZ2UsIHRhcmdldF9kaXJf
c3RvcmFnZSkgeworICAgICAgICAgICAgZXByaW50bG4hKCJFcnJvciBtaWdyYXRpbmcgc3RvcmFn
ZToge30iLCBlKTsKKyAgICAgICAgICAgIHN0ZDo6cHJvY2Vzczo6ZXhpdCgxKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiBsZXQgRXJyKGUpID0gbWlncmF0ZV9ndWVzdHMoc291cmNlX2Rpcl9n
dWVzdHMsIHRhcmdldF9kaXJfZ3Vlc3RzLCBzZXRfdGhyZWFkcygmYXJncykpIHsKKyAgICAgICAg
ZXByaW50bG4hKCJFcnJvciBtaWdyYXRpbmcgZ3Vlc3RzOiB7fSIsIGUpOworICAgICAgICBzdGQ6
OnByb2Nlc3M6OmV4aXQoMSk7CisgICAgfQorfQorCisvLy8gU2V0IG51bWJlciBvZiB0aHJlYWRz
CisvLy8KKy8vLyBFaXRoZXIgYSBmaXhlZCBwYXJhbWV0ZXIgb3IgZGV0ZXJtaW5pbmcgYSByYW5n
ZSBiZXR3ZWVuIDEgdG8gNCB0aHJlYWRzCisvLy8gIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgQ1BV
IGNvcmVzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLgorZm4gc2V0X3RocmVhZHMoYXJnczogJkFy
Z3MpIC0+IHVzaXplIHsKKyAgICBpZiBhcmdzLnRocmVhZHMuaXNfc29tZSgpIHsKKyAgICAgICAg
cmV0dXJuIGFyZ3MudGhyZWFkcy51bndyYXAoKTsKKyAgICB9CisgICAgLy8gY2hlY2sgZm9yIGEg
d2F5IHRvIGdldCBwaHlzaWNhbCBjb3JlcyBhbmQgbm90IHRocmVhZHM/CisgICAgbGV0IGNwdXM6
IHVzaXplID0gU3RyaW5nOjpmcm9tX3V0ZjhfbG9zc3koCisgICAgICAgIHN0ZDo6cHJvY2Vzczo6
Q29tbWFuZDo6bmV3KCJucHJvYyIpCisgICAgICAgICAgICAub3V0cHV0KCkKKyAgICAgICAgICAg
IC5leHBlY3QoIkVycm9yIHJ1bm5pbmcgbnByb2MiKQorICAgICAgICAgICAgLnN0ZG91dAorICAg
ICAgICAgICAgLmFzX3NsaWNlKCkKKyAgICAgICAgICAgIC50cmltX2FzY2lpKCksCisgICAgKQor
ICAgIC5wYXJzZTo6PHVzaXplPigpCisgICAgLmV4cGVjdCgiQ291bGQgbm90IHBhcnNlIG5wcm9j
IG91dHB1dCIpOworCisgICAgaWYgY3B1cyA8IDMyIHsKKyAgICAgICAgbGV0IHRocmVhZHMgPSBj
cHVzIC8gODsKKyAgICAgICAgaWYgdGhyZWFkcyA9PSAwIHsKKyAgICAgICAgICAgIHJldHVybiAx
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aHJlYWRzOworICAgIH0KKyAgICByZXR1cm4g
TUFYX1RIUkVBRFM7Cit9CisKKy8vLyBNaWdyYXRlIGd1ZXN0IFJSRCBmaWxlcworLy8vCisvLy8g
SW4gcGFyYWxsZWwgdG8gc3BlZWQgdXAgdGhlIHByb2Nlc3MgYXMgbW9zdCB0aW1lIGlzIHNwZW50
IG9uIGNvbnZlcnRpbmcgdGhlCisvLy8gZGF0YSB0byB0aGUgbmV3IGZvcm1hdC4KK2ZuIG1pZ3Jh
dGVfZ3Vlc3RzKAorICAgIHNvdXJjZV9kaXJfZ3Vlc3RzOiBQYXRoQnVmLAorICAgIHRhcmdldF9k
aXJfZ3Vlc3RzOiBQYXRoQnVmLAorICAgIHRocmVhZHM6IHVzaXplLAorKSAtPiBSZXN1bHQ8KCks
IEVycm9yPiB7CisgICAgcHJpbnRsbiEoIk1pZ3JhdGluZyBSUkQgZGF0YSBmb3IgZ3Vlc3Rz4oCm
Iik7CisgICAgcHJpbnRsbiEoIlVzaW5nIHt9IHRocmVhZChzKSIsIHRocmVhZHMpOworCisgICAg
bGV0IG11dCBndWVzdF9zb3VyY2VfZmlsZXM6IFZlYzwoQ1N0cmluZywgT3NTdHJpbmcpPiA9IFZl
Yzo6bmV3KCk7CisKKyAgICBmczo6cmVhZF9kaXIoJnNvdXJjZV9kaXJfZ3Vlc3RzKT8KKyAgICAg
ICAgLmZpbHRlcih8ZnwgZi5pc19vaygpKQorICAgICAgICAubWFwKHxmfCBmLnVud3JhcCgpLnBh
dGgoKSkKKyAgICAgICAgLmZpbHRlcih8ZnwgZi5pc19maWxlKCkpCisgICAgICAgIC5mb3JfZWFj
aCh8ZmlsZXwgeworICAgICAgICAgICAgbGV0IHBhdGggPSBDU3RyaW5nOjpuZXcoZmlsZS5hc19w
YXRoKCkuYXNfb3Nfc3RyKCkuYXNfYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICAuZXhwZWN0KCJD
b3VsZCBub3QgY29udmVydCBwYXRoIHRvIENTdHJpbmcuIik7CisgICAgICAgICAgICBsZXQgZm5h
bWUgPSBmaWxlCisgICAgICAgICAgICAgICAgLmZpbGVfbmFtZSgpCisgICAgICAgICAgICAgICAg
Lm1hcCh8dnwgdi50b19vc19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuZXhwZWN0KCJDb3Vs
ZCBub3QgY29udmVydCBmbmFtZSB0byBPc1N0cmluZy4iKTsKKyAgICAgICAgICAgIGd1ZXN0X3Nv
dXJjZV9maWxlcy5wdXNoKChwYXRoLCBmbmFtZSkpCisgICAgICAgIH0pOworICAgIGlmICF0YXJn
ZXRfZGlyX2d1ZXN0cy5leGlzdHMoKSB7CisgICAgICAgIHByaW50bG4hKCJDcmVhdGluZyBuZXcg
ZGlyZWN0b3J5OiAne30nIiwgdGFyZ2V0X2Rpcl9ndWVzdHMuZGlzcGxheSgpKTsKKyAgICAgICAg
c3RkOjpmczo6Y3JlYXRlX2RpcigmdGFyZ2V0X2Rpcl9ndWVzdHMpPzsKKyAgICB9CisKKyAgICBs
ZXQgdG90YWxfZ3Vlc3RzID0gZ3Vlc3Rfc291cmNlX2ZpbGVzLmxlbigpOworICAgIGxldCBndWVz
dHMgPSBBcmM6Om5ldyhzdGQ6OnN5bmM6OmF0b21pYzo6QXRvbWljVXNpemU6Om5ldygwKSk7Cisg
ICAgbGV0IGd1ZXN0czIgPSBndWVzdHMuY2xvbmUoKTsKKyAgICBsZXQgc3RhcnRfdGltZSA9IHN0
ZDo6dGltZTo6U3lzdGVtVGltZTo6bm93KCk7CisKKyAgICBsZXQgbWlncmF0aW9uX3Bvb2wgPSBQ
YXJhbGxlbEhhbmRsZXI6Om5ldygKKyAgICAgICAgImd1ZXN0IHJyZCBtaWdyYXRpb24iLAorICAg
ICAgICB0aHJlYWRzLAorICAgICAgICBtb3ZlIHwocGF0aCwgZm5hbWUpOiAoQ1N0cmluZywgT3NT
dHJpbmcpfCB7CisgICAgICAgICAgICBsZXQgbXV0IHNvdXJjZTogWypjb25zdCBpODsgMl0gPSBb
c3RkOjpwdHI6Om51bGwoKTsgMl07CisgICAgICAgICAgICBzb3VyY2VbMF0gPSBwYXRoLmFzX3B0
cigpOworCisgICAgICAgICAgICBsZXQgbm9kZV9uYW1lID0gZm5hbWU7CisgICAgICAgICAgICBs
ZXQgbXV0IHRhcmdldF9wYXRoID0gdGFyZ2V0X2Rpcl9ndWVzdHMuY2xvbmUoKTsKKyAgICAgICAg
ICAgIHRhcmdldF9wYXRoLnB1c2gobm9kZV9uYW1lKTsKKworICAgICAgICAgICAgbGV0IHRhcmdl
dF9wYXRoID0gQ1N0cmluZzo6bmV3KHRhcmdldF9wYXRoLnRvX3N0cigpLnVud3JhcCgpKS51bndy
YXAoKTsKKworICAgICAgICAgICAgdW5zYWZlIHsKKyAgICAgICAgICAgICAgICBycmRfZ2V0X2Nv
bnRleHQoKTsKKyAgICAgICAgICAgICAgICBycmRfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAg
ICAgICBsZXQgcmVzID0gcnJkX2NyZWF0ZV9yMigKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0
X3BhdGguYXNfcHRyKCksCisgICAgICAgICAgICAgICAgICAgIFJSRF9TVEVQX1NJWkUgYXMgdTY0
LAorICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgICAgICBzb3VyY2UuYXNfbXV0X3B0cigpLAorICAgICAgICAgICAgICAgICAgICBz
dGQ6OnB0cjo6bnVsbCgpLAorICAgICAgICAgICAgICAgICAgICBSUkRfVk1fREVGLmxlbigpIGFz
IGkzMiwKKyAgICAgICAgICAgICAgICAgICAgUlJEX1ZNX0RFRi5tYXAofHZ8IHYuYXNfcHRyKCkp
LmFzX211dF9wdHIoKSwKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGlmIHJl
cyAhPSAwIHsKKyAgICAgICAgICAgICAgICAgICAgYmFpbCEoCisgICAgICAgICAgICAgICAgICAg
ICAgICAiUlJEIGNyZWF0ZSBFcnJvcjoge30iLAorICAgICAgICAgICAgICAgICAgICAgICAgQ1N0
cjo6ZnJvbV9wdHIocnJkX2dldF9lcnJvcigpKS50b19zdHJpbmdfbG9zc3koKQorICAgICAgICAg
ICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGxldCBjdXJyZW50X2d1ZXN0cyA9IGd1ZXN0czIuZmV0Y2hfYWRkKDEsIHN0ZDo6c3luYzo6
YXRvbWljOjpPcmRlcmluZzo6U2VxQ3N0KTsKKyAgICAgICAgICAgIGlmIGN1cnJlbnRfZ3Vlc3Rz
ID4gMCAmJiBjdXJyZW50X2d1ZXN0cyAlIDIwMCA9PSAwIHsKKyAgICAgICAgICAgICAgICBwcmlu
dGxuISgiTWlncmF0ZWQge30gb2Yge30gZ3Vlc3RzIiwgY3VycmVudF9ndWVzdHMsIHRvdGFsX2d1
ZXN0cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBPaygoKSkKKyAgICAgICAgfSwKKyAg
ICApOworICAgIGxldCBtaWdyYXRpb25fY2hhbm5lbCA9IG1pZ3JhdGlvbl9wb29sLmNoYW5uZWwo
KTsKKworICAgIGZvciBmaWxlIGluIGd1ZXN0X3NvdXJjZV9maWxlcyB7CisgICAgICAgIGxldCBt
aWdyYXRpb25fY2hhbm5lbCA9IG1pZ3JhdGlvbl9jaGFubmVsLmNsb25lKCk7CisgICAgICAgIG1p
Z3JhdGlvbl9jaGFubmVsLnNlbmQoZmlsZSk/OworICAgIH0KKworICAgIGRyb3AobWlncmF0aW9u
X2NoYW5uZWwpOworICAgIG1pZ3JhdGlvbl9wb29sLmNvbXBsZXRlKCk/OworCisgICAgbGV0IGVs
YXBzZWQgPSBzdGFydF90aW1lLmVsYXBzZWQoKT8uYXNfc2Vjc19mNjQoKTsKKyAgICBsZXQgZ3Vl
c3RzID0gZ3Vlc3RzLmxvYWQoc3RkOjpzeW5jOjphdG9taWM6Ok9yZGVyaW5nOjpTZXFDc3QpOwor
ICAgIHByaW50bG4hKCJNaWdyYXRlZCB7fSBndWVzdHMgaW4gezouMn1zIiwgZ3Vlc3RzLCBlbGFw
c2VkLCk7CisKKyAgICBPaygoKSkKK30KKworLy8vIE1pZ3JhdGUgbm9kZSBSUkQgZmlsZXMKKy8v
LworLy8vIEluIHNlcmlhbCBhcyB0aGUgbnVtYmVyIG9mIG5vZGVzIHdpbGwgbm90IGJlIGhpZ2gu
CitmbiBtaWdyYXRlX25vZGVzKHNvdXJjZV9kaXJfbm9kZXM6IFBhdGhCdWYsIHRhcmdldF9kaXJf
bm9kZXM6IFBhdGhCdWYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICBwcmludGxuISgiTWln
cmF0aW5nIFJSRCBkYXRhIGZvciBub2Rlc+KApiIpOworCisgICAgaWYgIXRhcmdldF9kaXJfbm9k
ZXMuZXhpc3RzKCkgeworICAgICAgICBwcmludGxuISgiQ3JlYXRpbmcgbmV3IGRpcmVjdG9yeTog
J3t9JyIsIHRhcmdldF9kaXJfbm9kZXMuZGlzcGxheSgpKTsKKyAgICAgICAgc3RkOjpmczo6Y3Jl
YXRlX2RpcigmdGFyZ2V0X2Rpcl9ub2Rlcyk/OworICAgIH0KKworICAgIGxldCBtdXQgbm9kZV9z
b3VyY2VfZmlsZXM6IFZlYzwoQ1N0cmluZywgT3NTdHJpbmcpPiA9IFZlYzo6bmV3KCk7CisgICAg
ZnM6OnJlYWRfZGlyKCZzb3VyY2VfZGlyX25vZGVzKT8KKyAgICAgICAgLmZpbHRlcih8ZnwgZi5p
c19vaygpKQorICAgICAgICAubWFwKHxmfCBmLnVud3JhcCgpLnBhdGgoKSkKKyAgICAgICAgLmZp
bHRlcih8ZnwgZi5pc19maWxlKCkpCisgICAgICAgIC5mb3JfZWFjaCh8ZmlsZXwgeworICAgICAg
ICAgICAgbGV0IHBhdGggPSBDU3RyaW5nOjpuZXcoZmlsZS5hc19wYXRoKCkuYXNfb3Nfc3RyKCku
YXNfYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICAuZXhwZWN0KCJDb3VsZCBub3QgY29udmVydCBw
YXRoIHRvIENTdHJpbmcuIik7CisgICAgICAgICAgICBsZXQgZm5hbWUgPSBmaWxlCisgICAgICAg
ICAgICAgICAgLmZpbGVfbmFtZSgpCisgICAgICAgICAgICAgICAgLm1hcCh8dnwgdi50b19vc19z
dHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuZXhwZWN0KCJDb3VsZCBub3QgY29udmVydCBmbmFt
ZSB0byBPc1N0cmluZy4iKTsKKyAgICAgICAgICAgIG5vZGVfc291cmNlX2ZpbGVzLnB1c2goKHBh
dGgsIGZuYW1lKSkKKyAgICAgICAgfSk7CisKKyAgICBmb3IgZmlsZSBpbiBub2RlX3NvdXJjZV9m
aWxlcyB7CisgICAgICAgIHByaW50bG4hKCJOb2RlOiAne30nIiwgUGF0aEJ1Zjo6ZnJvbShmaWxl
LjEuY2xvbmUoKSkuZGlzcGxheSgpKTsKKyAgICAgICAgbGV0IG11dCBzb3VyY2U6IFsqY29uc3Qg
aTg7IDJdID0gW3N0ZDo6cHRyOjpudWxsKCk7IDJdOworCisgICAgICAgIHNvdXJjZVswXSA9IGZp
bGUuMC5hc19wdHIoKTsKKworICAgICAgICBsZXQgbm9kZV9uYW1lID0gZmlsZS4xOworICAgICAg
ICBsZXQgbXV0IHRhcmdldF9wYXRoID0gdGFyZ2V0X2Rpcl9ub2Rlcy5jbG9uZSgpOworICAgICAg
ICB0YXJnZXRfcGF0aC5wdXNoKG5vZGVfbmFtZSk7CisKKyAgICAgICAgbGV0IHRhcmdldF9wYXRo
ID0gQ1N0cmluZzo6bmV3KHRhcmdldF9wYXRoLnRvX3N0cigpLnVud3JhcCgpKS51bndyYXAoKTsK
KworICAgICAgICB1bnNhZmUgeworICAgICAgICAgICAgcnJkX2dldF9jb250ZXh0KCk7CisgICAg
ICAgICAgICBycmRfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAgIGxldCByZXMgPSBycmRfY3Jl
YXRlX3IyKAorICAgICAgICAgICAgICAgIHRhcmdldF9wYXRoLmFzX3B0cigpLAorICAgICAgICAg
ICAgICAgIFJSRF9TVEVQX1NJWkUgYXMgdTY0LAorICAgICAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBzb3VyY2UuYXNfbXV0X3B0cigpLAorICAgICAg
ICAgICAgICAgIHN0ZDo6cHRyOjpudWxsKCksCisgICAgICAgICAgICAgICAgUlJEX05PREVfREVG
LmxlbigpIGFzIGkzMiwKKyAgICAgICAgICAgICAgICBSUkRfTk9ERV9ERUYubWFwKHx2fCB2LmFz
X3B0cigpKS5hc19tdXRfcHRyKCksCisgICAgICAgICAgICApOworICAgICAgICAgICAgaWYgcmVz
ICE9IDAgeworICAgICAgICAgICAgICAgIGJhaWwhKAorICAgICAgICAgICAgICAgICAgICAiUlJE
IGNyZWF0ZSBFcnJvcjoge30iLAorICAgICAgICAgICAgICAgICAgICBDU3RyOjpmcm9tX3B0cihy
cmRfZ2V0X2Vycm9yKCkpLnRvX3N0cmluZ19sb3NzeSgpCisgICAgICAgICAgICAgICAgKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludGxuISgiTWlncmF0ZWQgYWxs
IG5vZGVzIik7CisKKyAgICBPaygoKSkKK30KKworLy8vIE1pZ3JhdGUgc3RvcmFnZSBSUkQgZmls
ZXMKKy8vLworLy8vIEluIHNlcmlhbCBhcyB0aGUgbnVtYmVyIG9mIHN0b3JhZ2Ugd2lsbCBub3Qg
YmUgdGhhdCBoaWdoLgorZm4gbWlncmF0ZV9zdG9yYWdlKHNvdXJjZV9kaXJfc3RvcmFnZTogUGF0
aEJ1ZiwgdGFyZ2V0X2Rpcl9zdG9yYWdlOiBQYXRoQnVmKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7
CisgICAgcHJpbnRsbiEoIk1pZ3JhdGluZyBSUkQgZGF0YSBmb3Igc3RvcmFnZXPigKYiKTsKKwor
ICAgIGlmICF0YXJnZXRfZGlyX3N0b3JhZ2UuZXhpc3RzKCkgeworICAgICAgICBwcmludGxuISgi
Q3JlYXRpbmcgbmV3IGRpcmVjdG9yeTogJ3t9JyIsIHRhcmdldF9kaXJfc3RvcmFnZS5kaXNwbGF5
KCkpOworICAgICAgICBzdGQ6OmZzOjpjcmVhdGVfZGlyKCZ0YXJnZXRfZGlyX3N0b3JhZ2UpPzsK
KyAgICB9CisKKyAgICAvLyBzdG9yYWdlIGhhcyBhbm90aGVyIGxheWVyIG9mIGRpcmVjdG9yaWVz
IHBlciBub2RlIG92ZXIgd2hpY2ggd2UgbmVlZCB0byBpdGVyYXRlCisgICAgZnM6OnJlYWRfZGly
KCZzb3VyY2VfZGlyX3N0b3JhZ2UpPworICAgICAgICAuZmlsdGVyKHxmfCBmLmlzX29rKCkpCisg
ICAgICAgIC5tYXAofGZ8IGYudW53cmFwKCkucGF0aCgpKQorICAgICAgICAuZmlsdGVyKHxmfCBm
LmlzX2RpcigpKQorICAgICAgICAudHJ5X2Zvcl9lYWNoKHxub2RlfCB7CisgICAgICAgICAgICBs
ZXQgbXV0IHN0b3JhZ2Vfc291cmNlX2ZpbGVzOiBWZWM8KENTdHJpbmcsIE9zU3RyaW5nKT4gPSBW
ZWM6Om5ldygpOworCisgICAgICAgICAgICBsZXQgbXV0IHNvdXJjZV9ub2RlX3N1YmRpciA9IHNv
dXJjZV9kaXJfc3RvcmFnZS5jbG9uZSgpOworICAgICAgICAgICAgc291cmNlX25vZGVfc3ViZGly
LnB1c2goJm5vZGUuZmlsZV9uYW1lKCkudW53cmFwKCkpOworCisgICAgICAgICAgICBsZXQgbXV0
IHRhcmdldF9ub2RlX3N1YmRpciA9IHRhcmdldF9kaXJfc3RvcmFnZS5jbG9uZSgpOworICAgICAg
ICAgICAgdGFyZ2V0X25vZGVfc3ViZGlyLnB1c2goJm5vZGUuZmlsZV9uYW1lKCkudW53cmFwKCkp
OworCisgICAgICAgICAgICBmczo6Y3JlYXRlX2Rpcih0YXJnZXRfbm9kZV9zdWJkaXIuYXNfcGF0
aCgpKT87CisgICAgICAgICAgICBsZXQgbWV0YWRhdGEgPSB0YXJnZXRfbm9kZV9zdWJkaXIubWV0
YWRhdGEoKT87CisgICAgICAgICAgICBsZXQgbXV0IHBlcm1pc3Npb25zID0gbWV0YWRhdGEucGVy
bWlzc2lvbnMoKTsKKyAgICAgICAgICAgIHBlcm1pc3Npb25zLnNldF9tb2RlKDBvNzU1KTsKKwor
ICAgICAgICAgICAgZnM6OnJlYWRfZGlyKCZzb3VyY2Vfbm9kZV9zdWJkaXIpPworICAgICAgICAg
ICAgICAgIC5maWx0ZXIofGZ8IGYuaXNfb2soKSkKKyAgICAgICAgICAgICAgICAubWFwKHxmfCBm
LnVud3JhcCgpLnBhdGgoKSkKKyAgICAgICAgICAgICAgICAuZmlsdGVyKHxmfCBmLmlzX2ZpbGUo
KSkKKyAgICAgICAgICAgICAgICAuZm9yX2VhY2gofGZpbGV8IHsKKyAgICAgICAgICAgICAgICAg
ICAgbGV0IHBhdGggPSBDU3RyaW5nOjpuZXcoZmlsZS5hc19wYXRoKCkuYXNfb3Nfc3RyKCkuYXNf
Ynl0ZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5leHBlY3QoIkNvdWxkIG5vdCBjb252
ZXJ0IHBhdGggdG8gQ1N0cmluZy4iKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGZuYW1lID0g
ZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgLmZpbGVfbmFtZSgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAubWFwKHx2fCB2LnRvX29zX3N0cmluZygpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgLmV4cGVjdCgiQ291bGQgbm90IGNvbnZlcnQgZm5hbWUgdG8gT3NTdHJpbmcuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Vfc291cmNlX2ZpbGVzLnB1c2goKHBhdGgsIGZuYW1l
KSkKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgZm9yIGZpbGUgaW4gc3RvcmFn
ZV9zb3VyY2VfZmlsZXMgeworICAgICAgICAgICAgICAgIHByaW50bG4hKCJTdG9yYWdlOiAne30n
IiwgUGF0aEJ1Zjo6ZnJvbShmaWxlLjEuY2xvbmUoKSkuZGlzcGxheSgpKTsKKyAgICAgICAgICAg
ICAgICBsZXQgbXV0IHNvdXJjZTogWypjb25zdCBpODsgMl0gPSBbc3RkOjpwdHI6Om51bGwoKTsg
Ml07CisKKyAgICAgICAgICAgICAgICBzb3VyY2VbMF0gPSBmaWxlLjAuYXNfcHRyKCk7CisKKyAg
ICAgICAgICAgICAgICBsZXQgbm9kZV9uYW1lID0gZmlsZS4xOworICAgICAgICAgICAgICAgIGxl
dCBtdXQgdGFyZ2V0X3BhdGggPSB0YXJnZXRfbm9kZV9zdWJkaXIuY2xvbmUoKTsKKyAgICAgICAg
ICAgICAgICB0YXJnZXRfcGF0aC5wdXNoKG5vZGVfbmFtZSk7CisKKyAgICAgICAgICAgICAgICBs
ZXQgdGFyZ2V0X3BhdGggPSBDU3RyaW5nOjpuZXcodGFyZ2V0X3BhdGgudG9fc3RyKCkudW53cmFw
KCkpLnVud3JhcCgpOworCisgICAgICAgICAgICAgICAgdW5zYWZlIHsKKyAgICAgICAgICAgICAg
ICAgICAgcnJkX2dldF9jb250ZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHJyZF9jbGVhcl9l
cnJvcigpOworICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gcnJkX2NyZWF0ZV9yMigKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wYXRoLmFzX3B0cigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUlJEX1NURVBfU0laRSBhcyB1NjQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZS5hc19tdXRfcHRyKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnB0cjo6
bnVsbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgUlJEX1NUT1JBR0VfREVGLmxlbigpIGFz
IGkzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJSRF9TVE9SQUdFX0RFRi5tYXAofHZ8IHYu
YXNfcHRyKCkpLmFzX211dF9wdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgcmVzICE9IDAgeworICAgICAgICAgICAgICAgICAgICAgICAgYmFpbCEo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJSRCBjcmVhdGUgRXJyb3I6IHt9IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU3RyOjpmcm9tX3B0cihycmRfZ2V0X2Vycm9yKCkp
LnRvX3N0cmluZ19sb3NzeSgpCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgT2soKCkpCisgICAgICAgIH0pPzsKKyAgICBwcmludGxuISgiTWlncmF0ZWQgYWxsIG5vZGVz
Iik7CisKKyAgICBPaygoKSkKK30KZGlmZiAtLWdpdCBhL3NyYy9wYXJhbGxlbF9oYW5kbGVyLnJz
IGIvc3JjL3BhcmFsbGVsX2hhbmRsZXIucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzg3NzQyYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wYXJhbGxlbF9oYW5kbGVyLnJz
CkBAIC0wLDAgKzEsMTYyIEBACisvLyEgQSB0aHJlYWQgcG9vbCB3aGljaCBydW4gYSBjbG9zdXJl
IGluIHBhcmFsbGVsLgorCit1c2Ugc3RkOjpzeW5jOjp7QXJjLCBNdXRleH07Cit1c2Ugc3RkOjp0
aHJlYWQ6OkpvaW5IYW5kbGU7CisKK3VzZSBhbnlob3c6OntFcnJvciwgYmFpbCwgZm9ybWF0X2Vy
cn07Cit1c2UgY3Jvc3NiZWFtX2NoYW5uZWw6OntTZW5kZXIsIGJvdW5kZWR9OworCisvLy8gQSBo
YW5kbGUgdG8gc2VuZCBkYXRhIHRvIHRoZSB3b3JrZXIgdGhyZWFkIChpbXBsZW1lbnRzIGNsb25l
KQorcHViIHN0cnVjdCBTZW5kSGFuZGxlPEk+IHsKKyAgICBpbnB1dDogU2VuZGVyPEk+LAorICAg
IGFib3J0OiBBcmM8TXV0ZXg8T3B0aW9uPFN0cmluZz4+PiwKK30KKworLy8vIFJldHVybnMgdGhl
IGZpcnN0IGVycm9yIGhhcHBlbmVkLCBpZiBhbnkKK3B1YiBmbiBjaGVja19hYm9ydChhYm9ydDog
Jk11dGV4PE9wdGlvbjxTdHJpbmc+PikgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgIGxldCBn
dWFyZCA9IGFib3J0LmxvY2soKS51bndyYXAoKTsKKyAgICBpZiBsZXQgU29tZShlcnJfbXNnKSA9
ICYqZ3VhcmQgeworICAgICAgICByZXR1cm4gRXJyKGZvcm1hdF9lcnIhKCJ7fSIsIGVycl9tc2cp
KTsKKyAgICB9CisgICAgT2soKCkpCit9CisKK2ltcGw8STogU2VuZD4gU2VuZEhhbmRsZTxJPiB7
CisgICAgLy8vIFNlbmQgZGF0YSB0byB0aGUgd29ya2VyIHRocmVhZHMKKyAgICBwdWIgZm4gc2Vu
ZCgmc2VsZiwgaW5wdXQ6IEkpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgY2hlY2tf
YWJvcnQoJnNlbGYuYWJvcnQpPzsKKyAgICAgICAgbWF0Y2ggc2VsZi5pbnB1dC5zZW5kKGlucHV0
KSB7CisgICAgICAgICAgICBPaygoKSkgPT4gT2soKCkpLAorICAgICAgICAgICAgRXJyKF8pID0+
IGJhaWwhKCJzZW5kIGZhaWxlZCAtIGNoYW5uZWwgY2xvc2VkIiksCisgICAgICAgIH0KKyAgICB9
Cit9CisKKy8vLyBBIHRocmVhZCBwb29sIHdoaWNoIHJ1biB0aGUgc3VwcGxpZWQgY2xvc3VyZQor
Ly8vCisvLy8gVGhlIHNlbmQgY29tbWFuZCBzZW5kcyBkYXRhIHRvIHRoZSB3b3JrZXIgdGhyZWFk
cy4gSWYgb25lIGhhbmRsZXIKKy8vLyByZXR1cm5zIGFuIGVycm9yLCB3ZSBtYXJrIHRoZSBjaGFu
bmVsIGFzIGZhaWxlZCBhbmQgaXQgaXMgbm8KKy8vLyBsb25nZXIgcG9zc2libGUgdG8gc2VuZCBk
YXRhLgorLy8vCisvLy8gV2hlbiBkb25lLCB0aGUgJ2NvbXBsZXRlKCknIG1ldGhvZCBuZWVkcyB0
byBiZSBjYWxsZWQgdG8gY2hlY2sgZm9yCisvLy8gb3V0c3RhbmRpbmcgZXJyb3JzLgorcHViIHN0
cnVjdCBQYXJhbGxlbEhhbmRsZXI8ST4geworICAgIGhhbmRsZXM6IFZlYzxKb2luSGFuZGxlPCgp
Pj4sCisgICAgbmFtZTogU3RyaW5nLAorICAgIGlucHV0OiBPcHRpb248U2VuZEhhbmRsZTxJPj4s
Cit9CisKK2ltcGw8ST4gQ2xvbmUgZm9yIFNlbmRIYW5kbGU8ST4geworICAgIGZuIGNsb25lKCZz
ZWxmKSAtPiBTZWxmIHsKKyAgICAgICAgU2VsZiB7CisgICAgICAgICAgICBpbnB1dDogc2VsZi5p
bnB1dC5jbG9uZSgpLAorICAgICAgICAgICAgYWJvcnQ6IEFyYzo6Y2xvbmUoJnNlbGYuYWJvcnQp
LAorICAgICAgICB9CisgICAgfQorfQorCitpbXBsPEk6IFNlbmQgKyAnc3RhdGljPiBQYXJhbGxl
bEhhbmRsZXI8ST4geworICAgIC8vLyBDcmVhdGUgYSBuZXcgdGhyZWFkIHBvb2wsIGVhY2ggdGhy
ZWFkIHByb2Nlc3NpbmcgaW5jb21pbmcgZGF0YQorICAgIC8vLyB3aXRoICdoYW5kbGVyX2ZuJy4K
KyAgICBwdWIgZm4gbmV3PEY+KG5hbWU6ICZzdHIsIHRocmVhZHM6IHVzaXplLCBoYW5kbGVyX2Zu
OiBGKSAtPiBTZWxmCisgICAgd2hlcmUKKyAgICAgICAgRjogRm4oSSkgLT4gUmVzdWx0PCgpLCBF
cnJvcj4gKyBTZW5kICsgQ2xvbmUgKyAnc3RhdGljLAorICAgIHsKKyAgICAgICAgbGV0IG11dCBo
YW5kbGVzID0gVmVjOjpuZXcoKTsKKyAgICAgICAgbGV0IChpbnB1dF90eCwgaW5wdXRfcngpID0g
Ym91bmRlZDo6PEk+KHRocmVhZHMpOworCisgICAgICAgIGxldCBhYm9ydCA9IEFyYzo6bmV3KE11
dGV4OjpuZXcoTm9uZSkpOworCisgICAgICAgIGZvciBpIGluIDAuLnRocmVhZHMgeworICAgICAg
ICAgICAgbGV0IGlucHV0X3J4ID0gaW5wdXRfcnguY2xvbmUoKTsKKyAgICAgICAgICAgIGxldCBh
Ym9ydCA9IEFyYzo6Y2xvbmUoJmFib3J0KTsKKyAgICAgICAgICAgIGxldCBoYW5kbGVyX2ZuID0g
aGFuZGxlcl9mbi5jbG9uZSgpOworCisgICAgICAgICAgICBoYW5kbGVzLnB1c2goCisgICAgICAg
ICAgICAgICAgc3RkOjp0aHJlYWQ6OkJ1aWxkZXI6Om5ldygpCisgICAgICAgICAgICAgICAgICAg
IC5uYW1lKGZvcm1hdCEoInt9ICh7fSkiLCBuYW1lLCBpKSkKKyAgICAgICAgICAgICAgICAgICAg
LnNwYXduKG1vdmUgfHwgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBtYXRjaCBpbnB1dF9yeC5yZWN2KCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPayhkYXRhKSA9PiBkYXRhLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFcnIoXykgPT4gcmV0dXJuLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGV0IEVy
cihlcnIpID0gKGhhbmRsZXJfZm4pKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGV0IG11dCBndWFyZCA9IGFib3J0LmxvY2soKS51bndyYXAoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgZ3VhcmQuaXNfbm9uZSgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICpndWFyZCA9IFNvbWUoZXJyLnRvX3N0cmluZygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSkK
KyAgICAgICAgICAgICAgICAgICAgLnVud3JhcCgpLAorICAgICAgICAgICAgKTsKKyAgICAgICAg
fQorICAgICAgICBTZWxmIHsKKyAgICAgICAgICAgIGhhbmRsZXMsCisgICAgICAgICAgICBuYW1l
OiBuYW1lLnRvX3N0cmluZygpLAorICAgICAgICAgICAgaW5wdXQ6IFNvbWUoU2VuZEhhbmRsZSB7
CisgICAgICAgICAgICAgICAgaW5wdXQ6IGlucHV0X3R4LAorICAgICAgICAgICAgICAgIGFib3J0
LAorICAgICAgICAgICAgfSksCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gUmV0dXJucyBh
IGNsb25lYWJsZSBjaGFubmVsIHRvIHNlbmQgZGF0YSB0byB0aGUgd29ya2VyIHRocmVhZHMKKyAg
ICBwdWIgZm4gY2hhbm5lbCgmc2VsZikgLT4gU2VuZEhhbmRsZTxJPiB7CisgICAgICAgIHNlbGYu
aW5wdXQuYXNfcmVmKCkudW53cmFwKCkuY2xvbmUoKQorICAgIH0KKworICAgIC8vLyBTZW5kIGRh
dGEgdG8gdGhlIHdvcmtlciB0aHJlYWRzCisgICAgcHViIGZuIHNlbmQoJnNlbGYsIGlucHV0OiBJ
KSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYuaW5wdXQuYXNfcmVmKCkudW53
cmFwKCkuc2VuZChpbnB1dCk/OworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICAvLy8gV2Fp
dCBmb3Igd29ya2VyIHRocmVhZHMgdG8gY29tcGxldGUgYW5kIGNoZWNrIGZvciBlcnJvcnMKKyAg
ICBwdWIgZm4gY29tcGxldGUobXV0IHNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAg
ICAgbGV0IGlucHV0ID0gc2VsZi5pbnB1dC50YWtlKCkudW53cmFwKCk7CisgICAgICAgIGxldCBh
Ym9ydCA9IEFyYzo6Y2xvbmUoJmlucHV0LmFib3J0KTsKKyAgICAgICAgY2hlY2tfYWJvcnQoJmFi
b3J0KT87CisgICAgICAgIGRyb3AoaW5wdXQpOworCisgICAgICAgIGxldCBtc2dfbGlzdCA9IHNl
bGYuam9pbl90aHJlYWRzKCk7CisKKyAgICAgICAgLy8gYW4gZXJyb3IgbWlnaHQgYmUgZW5jb3Vu
dGVyZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGpvaW4KKyAgICAgICAgY2hlY2tfYWJvcnQoJmFi
b3J0KT87CisKKyAgICAgICAgaWYgbXNnX2xpc3QuaXNfZW1wdHkoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gT2soKCkpOworICAgICAgICB9CisgICAgICAgIEVycihmb3JtYXRfZXJyISgie30iLCBt
c2dfbGlzdC5qb2luKCJcbiIpKSkKKyAgICB9CisKKyAgICBmbiBqb2luX3RocmVhZHMoJm11dCBz
ZWxmKSAtPiBWZWM8U3RyaW5nPiB7CisgICAgICAgIGxldCBtdXQgbXNnX2xpc3QgPSBWZWM6Om5l
dygpOworCisgICAgICAgIGxldCBtdXQgaSA9IDA7CisgICAgICAgIHdoaWxlIGxldCBTb21lKGhh
bmRsZSkgPSBzZWxmLmhhbmRsZXMucG9wKCkgeworICAgICAgICAgICAgaWYgbGV0IEVycihwYW5p
YykgPSBoYW5kbGUuam9pbigpIHsKKyAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShwYW5pY19t
c2cpID0gcGFuaWMuZG93bmNhc3RfcmVmOjo8JnN0cj4oKSB7CisgICAgICAgICAgICAgICAgICAg
IG1zZ19saXN0LnB1c2goZm9ybWF0ISgidGhyZWFkIHt9ICh7aX0pIHBhbmlja2VkOiB7cGFuaWNf
bXNnfSIsIHNlbGYubmFtZSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiBsZXQgU29tZShw
YW5pY19tc2cpID0gcGFuaWMuZG93bmNhc3RfcmVmOjo8U3RyaW5nPigpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbXNnX2xpc3QucHVzaChmb3JtYXQhKCJ0aHJlYWQge30gKHtpfSkgcGFuaWNrZWQ6
IHtwYW5pY19tc2d9Iiwgc2VsZi5uYW1lKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgbXNnX2xpc3QucHVzaChmb3JtYXQhKCJ0aHJlYWQge30gKHtpfSkg
cGFuaWNrZWQiLCBzZWxmLm5hbWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgbXNnX2xpc3QKKyAgICB9
Cit9CisKKy8vIE5vdGU6IFdlIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aHJlYWRzIHdpbGwgYmUgam9p
bmVkCitpbXBsPEk+IERyb3AgZm9yIFBhcmFsbGVsSGFuZGxlcjxJPiB7CisgICAgZm4gZHJvcCgm
bXV0IHNlbGYpIHsKKyAgICAgICAgZHJvcChzZWxmLmlucHV0LnRha2UoKSk7CisgICAgICAgIHdo
aWxlIGxldCBTb21lKGhhbmRsZSkgPSBzZWxmLmhhbmRsZXMucG9wKCkgeworICAgICAgICAgICAg
bGV0IF8gPSBoYW5kbGUuam9pbigpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv
d3JhcHBlci5oIGIvd3JhcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjY0ZDBhYTYKLS0tIC9kZXYvbnVsbAorKysgYi93cmFwcGVyLmgKQEAgLTAsMCArMSBAQAorI2lu
Y2x1ZGUgPHJyZC5oPgotLSAKMi4zOS41CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3Rz
LnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xp
c3RpbmZvL3B2ZS1kZXZlbAo=