From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pdm-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68])
	by lore.proxmox.com (Postfix) with ESMTPS id D94F31FF1C6
	for <inbox@lore.proxmox.com>; Fri, 18 Apr 2025 10:32:55 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 07384383DC;
	Fri, 18 Apr 2025 10:32:53 +0200 (CEST)
From: Lukas Wagner <l.wagner@proxmox.com>
To: pdm-devel@lists.proxmox.com
Date: Fri, 18 Apr 2025 10:32:05 +0200
Message-Id: <20250418083210.74982-2-l.wagner@proxmox.com>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250418083210.74982-1-l.wagner@proxmox.com>
References: <20250418083210.74982-1-l.wagner@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
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_PASS               -0.001 SPF: sender matches SPF record
Subject: [pdm-devel] [PATCH proxmox-datacenter-manager v4 1/6] remote tasks:
 implement improved cache for remote tasks
X-BeenThere: pdm-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox Datacenter Manager development discussion
 <pdm-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pdm-devel>, 
 <mailto:pdm-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pdm-devel/>
List-Post: <mailto:pdm-devel@lists.proxmox.com>
List-Help: <mailto:pdm-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel>, 
 <mailto:pdm-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox Datacenter Manager development discussion
 <pdm-devel@lists.proxmox.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: pdm-devel-bounces@lists.proxmox.com
Sender: "pdm-devel" <pdm-devel-bounces@lists.proxmox.com>

VGhpcyBjb21taXQgYWRkcyBhIG5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgYSBjYWNoZSBmb3IgcmVt
b3RlIHRhc2tzLCBvbmUKdGhhdCBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJp
c3RpY3MgaW4gZm9yIHByZXR0eSBtdWNoIGFsbAp1c2UgY2FzZXMuCgpJbiBnZW5lcmFsIHN0b3Jh
Z2Ugd29ya3MgcHJldHR5IHNpbWlsYXIgdG8gdGhlIHRhc2sgYXJjaGl2ZSB3ZSBhbHJlYWR5Cmhh
dmUgZm9yIChsb2NhbCkgUERNIHRhc2tzLgoKcm9vdEBwZG0tZGV2Oi92YXIvY2FjaGUvcHJveG1v
eC1kYXRhY2VudGVyLW1hbmFnZXIvcmVtb3RlLXRhc2tzIyBscyAtbAp0b3RhbCA0MAotcnctci0t
ci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgICAgIDAgTWFyIDEzIDEzOjE4IGFjdGl2ZQotcnctci0t
ci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgIDE2NzYgTWFyIDExIDE0OjUxIGFyY2hpdmUuMTc0MTM1
NTQ2Mgotcnctci0tci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgICAgIDAgTWFyIDExIDE0OjUxIGFy
Y2hpdmUuMTc0MTQ0MTg2Mgotcnctci0tci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgIDI1MzggTWFy
IDExIDE0OjUxIGFyY2hpdmUuMTc0MTUyODI2Mgotcnctci0tci0tIDEgd3d3LWRhdGEgd3d3LWRh
dGEgIDg0MjggTWFyIDExIDE1OjA3IGFyY2hpdmUuMTc0MTYxNDY2Mgotcnctci0tci0tIDEgd3d3
LWRhdGEgd3d3LWRhdGEgMTE3NDAgTWFyIDEzIDEwOjE4IGFyY2hpdmUuMTc0MTcwMTA2Mgotcnct
ci0tci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgIDMzNjQgTWFyIDEzIDEzOjE4IGFyY2hpdmUuMTc0
MTc4ODI3MAotcnctci0tci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgICAyODcgTWFyIDEzIDEzOjE4
IHN0YXRlCgpUYXNrcyBhcmUgc3RvcmVkIGluIHRoZSAnYWN0aXZlJyBhbmQgbXVsdGlwbGUgJ2Fy
Y2hpdmUnIGZpbGVzLiBSdW5uaW5nCnRhc2tzIGFyZSBwbGFjZWQgaW50byB0aGUgJ2FjdGl2ZScg
ZmlsZSwgdGFza3MgdGhhdCBhcmUgZmluaXNoZWQgYXJlCnBlcnNpc3RlZCBpbnRvIG9uZSBvZiB0
aGUgYXJjaGl2ZSBmaWxlcy4gVGhlIGFyY2hpdmUgZmlsZXMgYXJlIHN1ZmZpeGVkCndpdGggYSBV
TklYIHRpbWVzdGFtcCB3aGljaCBzZXJ2ZXMgYXMgYSBsb3dlci1ib3VuZCBmb3Igc3RhcnQgdGlt
ZXMgZm9yCnRhc2tzIHN0b3JlZCBpbiB0aGlzIGZpbGUuIEVuY29kaW5nIHRoaXMgbG93ZXItYm91
bmQgaW4gdGhlIGZpbGUgbmFtZQppbnN0ZWFkIG9mIHVzaW5nIGEgbW9yZSB0cmFkaXRpb25hbCBp
bmNyZWFzaW5nIGZpbGUgaW5kZXggKC4xLCAuMiwgLjMpCmdpdmVzIHVzIHRoZSBiZW5lZml0IHRo
YXQgd2UgY2FuIGRlY2lkZSBpbiB3aGljaCBmaWxlIGEgbmV3bHkgYXJyaXZlZAp0YXNrcyBiZWxv
bmdzIGZyb20gYSBzaW5nbGUgcmVhZGRpciBjYWxsLCB3aXRob3V0IGV2ZW4gcmVhZGluZyB0aGUg
ZmlsZQppdHNlbGYuCgpUaGUgc2l6ZSBvZiB0aGUgZW50aXJlIGFyY2hpdmUgY2FuIGJlIGNvbnRy
b2xsZWQgYnkgZG9pbmcgZmlsZQoncm90YXRpb24nLCB3aGVyZSB0aGUgYXJjaGl2ZSBmaWxlIHdp
dGggdGhlIG9sZGVzdCB0aW1lc3RhbXAgaXMgZGVsZXRlZAphbmQgYSBuZXcgZmlsZSB3aXRoIHRo
ZSBjdXJyZW50IHRpbWVzdGFtcCBpcyBhZGRlZC4gSWYgJ3JvdGF0aW9uJwpoYXBwZW5zIGF0IGZp
eGVkIGludGVydmFscyAoZS5nLiBvbmNlIGRhaWx5KSwgdGhpcyBnaXZlcyB1cyBhCmNvbmZpZ3Vy
YWJsZSBudW1iZXIgb2YgZGF5cyBvZiB0YXNrIGhpc3RvcnkuIFRoZXJlIGlzIG5vIGRpcmVjdCBj
YXAgZm9yCnRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MsIGJ1dCB0aGlzIGNvdWxkIGJlIGVhc2ls
eSBhZGRlZCBieSBjaGVja2luZwp0aGUgc2l6ZSBvZiB0aGUgbW9zdCByZWNlbnQgYXJjaGl2ZSBm
aWxlIGFuZCBieSByb3RhdGluZyBlYXJseSBpZiBhCnRocmVzaG9sZCBpcyBleGNlZWRlZC4KClRo
ZSBmb3JtYXQgaW5zaWRlIHRoZSBmaWxlcyBpcyBhbHNvIHNpbWlsYXIgdG8gdGhlIGxvY2FsIHRh
c2sgYXJjaGl2ZSwKd2l0aCBvbmUgdGFzayBjb3JyZXNwb25kaW5nIHRvIG9uZSBsaW5lIGluIHRo
ZSBmaWxlLiBPbmUga2V5IGRpZmZlcmVuY2UKaXMgdGhhdCBoZXJlIGVhY2ggbGluZSBpcyBhIEpT
T04gb2JqZWN0LCB0aGF0IGlzIHRvIG1ha2UgaXQgZWFzaWVyIHRvCmFkZCBhZGRpdGlvbmFsIGRh
dGEgbGF0ZXIsIGlmIG5lZWRlZC4gVGhlIEpTT04gb2JqZWN0IGNvbnRhaW5zIHRoZSB0YXNrcwpV
UElELCBzdGF0dXMsIGVuZHRpbWUgYW5kIHN0YXJ0dGltZSAodGhlIHN0YXJ0dGltZSBpcyB0ZWNo
bmljYWxseSBhbHNvCmVuY29kZWQgaW4gdGhlIFVQSUQsIGJ1dCBoYXZpbmcgaXQgYXMgYSBzZXBh
cmF0ZSB2YWx1ZSBzaW1wbGlmaWVkIGEKY291cGxlIG9mIHRoaW5ncykgRWFjaCBmaWxlIGlzIHNv
cnRlZCBieSB0aGUgdGFzaydzIHN0YXJ0IHRpbWUsIHRoZQp5b3VuZ2VzdCB0YXNrIGNvbWluZyBm
aXJzdC4KCk9uZSBrZXkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgdGFzayBjYWNoZSBhbmQgdGhl
IGxvY2FsIHRhc2sgYXJjaGl2ZSBpcwp0aGF0IHdlIG5lZWQgdG8gaGFuZGxlIHRhc2tzIGNvbWlu
ZyBpbiBvdXQtb2Ytb3JkZXIsIGUuZy4gaWYgcmVtb3Rlcwp3ZXJlIG5vdCByZWFjaGFibGUgZm9y
IGEgY2VydGFpbiB0aW1lLiBUbyBtYWludGFpbiB0aGUgb3JkZXJpbmcgaW4gdGhlCmZpbGUsIHdl
IGhhdmUgdG8gbWVyZ2UgdGhlIG5ld2x5IGFycml2ZWQgdGFza3MgaW50byB0aGUgZXhpc3Rpbmcg
dGFzawpmaWxlLiBUaGlzIHdhcyBpbXBsZW1lbnRlZCBpbiBhIHdheSB0aGF0IGF2b2lkcyByZWFk
aW5nIHRoZSBlbnRpcmUgZmlsZQppbnRvIG1lbW9yeSBhdCBvbmNlLCBleHBsb2l0aW5nIHRoZSBm
YWN0IHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZQpleGlzdGluZyBmaWxlIGFyZSBhbHJlYWR5IHNv
cnRlZC4gVGhpcyBhbGxvd3MgdG8gZG8gYSB6aXBwZXIvbWVyZ2Utc29ydApsaWtlIGFwcHJvYWNo
IChzZWUgTWVyZ2VUYXNrSXRlcmF0b3IgZm9yIGRldGFpbHMpLiBUaGUgZXhpc3RpbmcgZmlsZSBp
cwpvbmx5IHJlYWQgbGluZS1ieS1saW5lIGFuZCBmaW5hbGx5IHJlcGxhY2VkIGF0b21pY2FsbHku
CgpUaGUgY2FjaGUgYWxzbyBoYXMgYSBzZXBhcmF0ZSBzdGF0ZSBmaWxlLCBjb250YWluaW5nIGFk
ZGl0aW9uYWwKaW5mb3JtYXRpb24sIGUuZy4gY3V0LW9mZiB0aW1lc3RhbXBzIGZvciB0aGUgcG9s
bGluZyB0YXNrLiBTb21lIG9mIHRoZQpkYXRhIGluIHRoZSBzdGF0ZWZpbGUgaXMgdGVjaG5pY2Fs
bHkgYWxzbyBjb250YWluZWQgaW4gdGhlIGFyY2hpdmUKZmlsZXMsIGJ1dCByZWFkaW5nIHRoZSBz
dGF0ZSBmaWxlIGlzIG11Y2ggZmFzdGVyLgoKVGhpcyBjb21taXQgYWxzbyBhZGRzIGFuIGVsYWJv
cmF0ZSBzdWl0ZSBvZiB1bml0IHRlc3RzIGZvciB0aGlzIG5ldwpjYWNoZS4gV2hpbGUgYWRkaW5n
IHNvbWUgYWRkaXRpb25hbCB3b3JrIHVwIGZyb250LCB0aGV5IHBhaWQgb2ZmCnRoZW1zZWx2ZXMg
ZHVyaW5nIGRldmVsb3BtZW50IHF1aXRlIHF1aWNrbHksIHNpbmNlIHRoZSBvdmVyYWxsIGFwcHJv
YWNoCmZvciB0aGUgY2FjaGUgY2hhbmdlZCBhIGNvdXBsZSBvZiB0aW1lcy4gVGhlIHRlc3Qgc3Vp
dGUgZ2F2ZSBtZQpjb25maWRlbmNlIHRoYXQgdGhlIGRlc2lnbiBjaGFuZ2VzIGRpZG4ndCBzY3Jl
dyBhbnl0aGluZyB1cCwgY2F0Y2hpbmcgYQpjb3VwbGUgb2YgYnVncyBpbiB0aGUgcHJvY2Vzcy4K
CkZpbmFsbHksIHNvbWUgY29uY3JldGUgbnVtYmVycyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1w
cm92bWVudHMuCkJlbmNobWFya2luZyB3YXMgZG9uZSB1c2luZyB0aGUgJ2Zha2UtcmVtb3RlJyBm
ZWF0dXJlLiBUaGVyZSB3ZXJlIDEwMApyZW1vdGVzLCAxMCBQVkUgbm9kZXMgcGVyIHJlbW90ZS4g
VGhlIHRhc2sgY2FjaGUgY29udGFpbmVkCmFib3V0IDEuNSBtaWxsaW9uIHRhc2tzLgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlICAgICAgICAgYWZ0
ZXIKbGlzdCBvZiBhY3RpdmUgdGFza3MgKCopOiAgICAgICAgICAgICAgICAgICAgIH4xLjNzICAg
ICAgICAgfjMwMMK1cwpsaXN0IG9mIDUwMCB0YXNrcywgb2Zmc2V0IDAgKCoqKTogICAgICAgICAg
ICAgfjEuM3MgICAgICAgIH4xNDUwwrVzCmxpc3Qgb2YgNTAwIHRhc2tzLCBvZmZzZXQgMSBtaWxs
aW9uICgqKiopOiAgICB+MS4zcyAgICAgICAgIH4xNzVtcwpTaXplIG9uIGRpc2s6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfjUwME1CICAgICAgICB+MjAwTUIKCigqKTogIFJlcXVl
c3RlZCBieSB0aGUgVUkgZXZlcnkgM3MKKCoqKTogUmVxdWVzdGVkIGJ5IHRoZSBVSSB3aGVuIHZp
c2l0aW5nIFJlbW90ZXMgPiBUYXNrcwooKioqKTogRS5nLiB3aGVuIHNjcm9sbGluZyB0b3dhcmRz
IHRoZSBib3R0b20gb2YgJ1JlbW90ZXMgPiBUYXNrcycKCkluIHRoZSBvbGQgaW1wbGVtZW50YXRp
b24sIHRoZSBhcmNoaXZlIGZpbGUgd2FzICphbHdheXMqIGZ1bGx5CmRlc2VyaWFsaXplZCBhbmQg
bG9hZGVkIGludG8gUkFNLCB0aGlzIGlzIHRoZSByZWFzb24gd2h5IHRoZSB0aW1lIG5lZWRlZApp
cyBwcmV0dHkgaWRlbnRpYWwgZm9yIGFsbCBzY2VuYXJpb3MuIFRoZSBuZXcgaW1wbGVtZW50YXRp
b24gcmVhZHMgdGhlCmFyY2hpdmUgZmlsZXMgb25seSBsaW5lIGJ5IGxpbmUsIGFuZCBvbmx5IDUw
MCB0YXNrcyB3ZXJlIGxvYWRlZCBpbnRvIFJBTQphdCB0aGUgc2FtZSB0aW1lLiBUaGUgaGlnaGVy
IHRoZSBvZmZzZXQsIHRoZSBtb3JlIGFyY2hpdmUgbGluZXMvZmlsZXMgd2UKaGF2ZSB0byBzY2Fu
LCB3aGljaCBpbmNyZWFzZXMgdGhlIHRpbWUgbmVlZGVkIHRvIGFjY2VzcyB0aGUgZGF0YS4gVGhl
CnRhc2tzIGFyZSBzb3J0ZWQgZGVzY2VuZGluZyBieSBzdGFydHRpbWUsIGFzIGEgcmVzdWx0IHRo
ZSByZXF1ZXN0cyBnZXQKc2xvd2VyIHRoZSBmdXJ0aGVyIHlvdSBnbyBiYWNrIGluIGhpc3Rvcnku
CgpTaWduZWQtb2ZmLWJ5OiBMdWthcyBXYWduZXIgPGwud2FnbmVyQHByb3htb3guY29tPgotLS0K
Ck5vdGVzOgogICAgQ2hhbmdlcyBzaW5jZSB2MzoKICAgICAgLSBJbmNsdWRlZCBiZW5jaG1hcmsg
cmVzdWx0cyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UKICAgICAgLSBEcm9wIGBwdWJgIGZvciBUYXNr
Q2FjaGU6OndyaXRlX3N0YXRlCiAgICAKICAgIENoYW5nZXMgc2luY2UgdjI6CiAgICAgIC0gSW5j
b3Jwb3JhdGUgZmVlZGJhY2sgZnJvbSBXb2xmYW5nICh0aHghKQogICAgICAgICAtIGVsaW1pbmF0
ZSBvbmUgLmNsb25lKCkKICAgICAgICAgLSBnZXRfdGFza3Nfd2l0aF9sb2NrOiBkaXJlY3RseSBj
cmVhdGUgaXRlcmF0b3Igb3ZlciBQYXRoQnVmCiAgICAgICAgICAgaW5zdGVhZCBvZiBmaXJzdCBj
cmVhdGluZyBBcmNoaXZlRmlsZSB2ZWMgYW5kIHRoZSBtYXBwaW5nCiAgICAgICAgIC0gRml4ZWQg
VE9DVE9VIHJhY2UgY29uZGl0aW9uIChjaGVja2VkIFBhdGg6OmV4aXN0cyBpbnN0ZWFkIG9mCiAg
ICAgICAgICAgdHJ5aW5nIHRoZSBhY3R1YWwgb3BlcmF0aW9uIGFuZCByZWFjdGluZyB0byBFcnJv
cktpbmQ6Ok5vdEZvdW5kKQogICAgICAgICAtIGhhbmRsZSBlcnJvciB3aGVuIHJlcGxhY2luZyAn
YWN0aXZlJyBmaWxlCiAgICAgICAgIC0gdW5saW5rIHRlbXAgZmlsZSB3aGVuIHJlcGxhY2luZyB0
aGUgYXJjaGl2ZSBmaWxlIGRpZCBub3Qgd29yawogICAgICAgICAtIGF2b2lkIFVURjggZGVjb2Rp
bmcgd2hlcmUgbm90IHJlYWxseSBuZWNlc3NhcnkKICAgICAgLSBBZGRlZCBhIGNvdXBsZSBvZiAu
Y29udGV4dCgpLy53aXRoX2NvbnRleHQoKSBmb3IgYmV0dGVyIGVycm9yCiAgICAgICAgbWVzc2Fn
ZXMKICAgICAgLSBFeHRyYWN0ZWQgdGhlIGZpbGUgbmFtZXMgaW50byBjb25zdHMKICAgICAgLSBG
aXhlZCBzb21lIGNsaXBweSBpc3N1ZXMgKC5jbG9uZSgpIGZvciBDcmVhdGVPcHRpb25zIC0gd2hl
bgogICAgICAgIHRoaXMgc2VyaWVzIHdhcyB3cml0dGVuLCBDcmVhdGVPcHRpb25zIHdlcmUgbm90
IENvcHkgeWV0KQoKIHNlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL21vZC5ycyAgICAgICAgfCAgICAy
ICsKIHNlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL3Rhc2tfY2FjaGUucnMgfCAxMDIyICsrKysrKysr
KysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTAyNCBpbnNlcnRpb25zKCspCiBj
cmVhdGUgbW9kZSAxMDA2NDQgc2VydmVyL3NyYy9yZW1vdGVfdGFza3MvdGFza19jYWNoZS5ycwoK
ZGlmZiAtLWdpdCBhL3NlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL21vZC5ycyBiL3NlcnZlci9zcmMv
cmVtb3RlX3Rhc2tzL21vZC5ycwppbmRleCA3ZGVkNTQwOC4uMjA2MmYyYjcgMTAwNjQ0Ci0tLSBh
L3NlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL21vZC5ycworKysgYi9zZXJ2ZXIvc3JjL3JlbW90ZV90
YXNrcy9tb2QucnMKQEAgLTE4LDYgKzE4LDggQEAgdXNlIHRva2lvOjp0YXNrOjpKb2luSGFuZGxl
OwogCiB1c2UgY3JhdGU6OnthcGk6OnB2ZSwgdGFza191dGlsc307CiAKK21vZCB0YXNrX2NhY2hl
OworCiAvLy8gR2V0IHRhc2tzIGZvciBhbGwgcmVtb3RlcwogLy8gRklYTUU6IGZpbHRlciBmb3Ig
cHJpdmlsZWdlcwogcHViIGFzeW5jIGZuIGdldF90YXNrcyhtYXhfYWdlOiBpNjQsIGZpbHRlcnM6
IFRhc2tGaWx0ZXJzKSAtPiBSZXN1bHQ8VmVjPFRhc2tMaXN0SXRlbT4sIEVycm9yPiB7CmRpZmYg
LS1naXQgYS9zZXJ2ZXIvc3JjL3JlbW90ZV90YXNrcy90YXNrX2NhY2hlLnJzIGIvc2VydmVyL3Ny
Yy9yZW1vdGVfdGFza3MvdGFza19jYWNoZS5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMC4uZjhkZDgyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2ZXIvc3JjL3JlbW90ZV90
YXNrcy90YXNrX2NhY2hlLnJzCkBAIC0wLDAgKzEsMTAyMiBAQAorLy8hIFRhc2sgY2FjaGUgaW1w
bGVtZW50YXRpb24sIGJhc2VkIG9uIHJvdGF0aW5nIGZpbGVzLgorCit1c2Ugc3RkOjp7CisgICAg
Y21wOjpPcmRlcmluZywKKyAgICBjb2xsZWN0aW9uczo6e0hhc2hNYXAsIEhhc2hTZXR9LAorICAg
IGZzOjpGaWxlLAorICAgIGlvOjp7QnVmUmVhZCwgQnVmUmVhZGVyLCBCdWZXcml0ZXIsIEVycm9y
S2luZCwgTGluZXMsIFdyaXRlfSwKKyAgICBpdGVyOjpQZWVrYWJsZSwKKyAgICBwYXRoOjp7UGF0
aCwgUGF0aEJ1Zn0sCisgICAgdGltZTo6RHVyYXRpb24sCit9OworCit1c2UgYW55aG93Ojp7Q29u
dGV4dCwgRXJyb3J9OwordXNlIHByb3htb3hfc3lzOjpmczo6Q3JlYXRlT3B0aW9uczsKK3VzZSBz
ZXJkZTo6e0Rlc2VyaWFsaXplLCBTZXJpYWxpemV9OworCit1c2UgcGRtX2FwaV90eXBlczo6UmVt
b3RlVXBpZDsKKworLy8vIEZpbGVuYW1lIGZvciB0aGUgZmlsZSBjb250YWluaW5nIHJ1bm5pbmcg
dGFza3MuCitjb25zdCBBQ1RJVkVfRklMRU5BTUU6ICZzdHIgPSAiYWN0aXZlIjsKKy8vLyBGaWxl
bmFtZSBwcmVmaXggZm9yIGFyY2hpdmUgZmlsZXMuCitjb25zdCBBUkNISVZFX0ZJTEVOQU1FX1BS
RUZJWDogJnN0ciA9ICJhcmNoaXZlLiI7CisvLy8gRmlsZW5hbWUgZm9yIHRoZSBzdGF0ZSBmaWxl
LgorY29uc3QgU1RBVEVfRklMRU5BTUU6ICZzdHIgPSAic3RhdGUiOworLy8vIEZpbGVuYW1lIG9m
IHRoZSBhcmNoaXZlIGxvY2tmaWxlLgorY29uc3QgTE9DS0ZJTEVfRklMRU5BTUU6ICZzdHIgPSAi
LmxvY2siOworCisvLy8gSXRlbSB3aGljaCBjYW4gYmUgcHV0IGludG8gdGhlIHRhc2sgY2FjaGUu
CisjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFNlcmlhbGl6ZSwgRGVzZXJpYWxpemUsIEhhc2gsIFBh
cnRpYWxFcSwgRXEpXQorcHViIHN0cnVjdCBUYXNrQ2FjaGVJdGVtIHsKKyAgICAvLy8gVGhlIHRh
c2sncyBVUElECisgICAgcHViIHVwaWQ6IFJlbW90ZVVwaWQsCisgICAgLy8vIFRoZSB0aW1lIGF0
IHdoaWNoIHRoZSB0YXNrIHdhcyBzdGFydGVkIChzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2No
KS4KKyAgICAvLy8gVGVjaG5pY2FsbHkgdGhpcyBpcyBhbHNvIGNvbnRhaW5lZCB3aXRoaW4gdGhl
IFVQSUQsIGR1cGxpY2F0aW5nIGl0IGhlcmUKKyAgICAvLy8gYWxsb3dzIHVzIHRvIGRpcmVjdGx5
IGFjY2VzcyBpdCB3aGVuIHNvcnRpbmcgaW4gbmV3IHRhc2tzLCB3aXRob3V0IGhhdmluZworICAg
IC8vLyB0byBwYXJzZSB0aGUgVVBJRC4KKyAgICBwdWIgc3RhcnR0aW1lOiBpNjQsCisgICAgI1tz
ZXJkZShza2lwX3NlcmlhbGl6aW5nX2lmID0gIk9wdGlvbjo6aXNfbm9uZSIpXQorICAgIC8vLyBU
aGUgdGFzaydzIHN0YXR1cy4KKyAgICBwdWIgc3RhdHVzOiBPcHRpb248U3RyaW5nPiwKKyAgICAj
W3NlcmRlKHNraXBfc2VyaWFsaXppbmdfaWYgPSAiT3B0aW9uOjppc19ub25lIildCisgICAgLy8v
IFRoZSB0YXNrJ3MgZW5kdGltZSAoc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaCkuCisgICAg
cHViIGVuZHRpbWU6IE9wdGlvbjxpNjQ+LAorfQorCisvLy8gU3RhdGUgbmVlZGVkIGZvciB0YXNr
IHBvbGxpbmcuCisjW2Rlcml2ZShTZXJpYWxpemUsIERlc2VyaWFsaXplLCBEZWZhdWx0KV0KKyNb
c2VyZGUocmVuYW1lX2FsbCA9ICJrZWJhYi1jYXNlIildCitwdWIgc3RydWN0IFN0YXRlIHsKKyAg
ICAvLy8gTWFwIG9mIHJlbW90ZSAtPiBtb3N0IHJlY2VudCB0YXNrIHN0YXJ0dGltZSAoVU5JWCBl
cG9jaCkgaW4gdGhlIGFyY2hpdmUuCisgICAgLy8vIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSBjdXQt
b2ZmIHdoZW4gcmVxdWVzdGluZyBuZXcgdGFzayBkYXRhLgorICAgIHB1YiBtb3N0X3JlY2VudF9h
cmNoaXZlX3N0YXJ0dGltZTogSGFzaE1hcDxTdHJpbmcsIGk2ND4sCisgICAgLy8vIE9sZGVzdCBy
dW5uaW5nIHRhc2suIFVzZWZ1bCBhcyBhbm90aGVyIGN1dC1vZmYgZm9yIGZldGNoaW5nIHRhc2tz
LgorICAgIC8vLyBUaGUgdGltZXN0YW1wIGlzIGJhc2VkIG9uIHNlY29uZHMgc2luY2UgdGhlIFVO
SVggZXBvY2guCisgICAgcHViIG9sZGVzdF9hY3RpdmVfdGFzazogSGFzaE1hcDxTdHJpbmcsIGk2
ND4sCisgICAgLy8vIFRyYWNrZWQgdGFza3MgcGVyIHJlbW90ZS4KKyAgICBwdWIgdHJhY2tlZF90
YXNrczogSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8UmVtb3RlVXBpZD4+LAorfQorCisvLy8gQ2Fj
aGUgZm9yIHJlbW90ZSB0YXNrcy4KKyNbZGVyaXZlKENsb25lKV0KK3B1YiBzdHJ1Y3QgVGFza0Nh
Y2hlIHsKKyAgICAvLy8gUGF0aCB3aGVyZSB0aGUgY2FjaGUncyBmaWxlcyBzaG91bGQgYmUgcGxh
Y2VkLgorICAgIGJhc2VfcGF0aDogUGF0aEJ1ZiwKKyAgICAvLy8gRmlsZSBwZXJtaXNzaW9ucyBm
b3IgdGhlIGNhY2hlJ3MgZmlsZXMuCisgICAgY3JlYXRlX29wdGlvbnM6IENyZWF0ZU9wdGlvbnMs
Cit9CisKKy8vLyBUYXNrcyB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgY2FjaGUgdmlhIFtg
VGFza0NhY2hlOjphZGRfdGFza3NgXS4KK3B1YiBzdHJ1Y3QgQWRkVGFza3MgeworICAgIC8vLyBV
cGRhdGUgdGhlIHJlbW90ZSdzIGVudHJ5IGluIHRoZSBzdGF0ZWZpbGUgd2hpY2ggY29udGFpbnMg
dGhlCisgICAgLy8vIHRpbWVzdGFtcCBvZiB0aGUgbW9zdCByZWNlbnQgKmZpbmlzaGVkKiB0YXNr
IGZyb20gdGhlIHRhc2sgYXJjaGl2ZS4KKyAgICBwdWIgdXBkYXRlX21vc3RfcmVjZW50X2FyY2hp
dmVfdGltZXN0YW1wOiBib29sLAorICAgIC8vLyBUaGUgdGFza3MgdG8gYWRkLgorICAgIHB1YiB0
YXNrczogVmVjPFRhc2tDYWNoZUl0ZW0+LAorfQorCisvLy8gTG9jayBmb3IgdGhlIGNhY2hlLgor
I1thbGxvdyhkZWFkX2NvZGUpXQorcHViIHN0cnVjdCBUYXNrQ2FjaGVMb2NrKEZpbGUpOworCisv
Ly8gV2hpY2ggdGFza3MgdG8gZmV0Y2ggZnJvbSB0aGUgYXJjaGl2ZS4KK3B1YiBlbnVtIEdldFRh
c2tzIHsKKyAgICAvLy8gR2V0IGFsbCB0YXNrcywgZmluaXNoZWQgYW5kIHJ1bm5pbmcuCisgICAg
QWxsLAorICAgIC8vLyBPbmx5IGdldCBydW5uaW5nIChhY3RpdmUpIHRhc2tzLgorICAgIEFjdGl2
ZSwKKyAgICAjW2NmZyh0ZXN0KV0gLy8gVXNlZCBieSB0ZXN0cywgbWlnaHQgYmUgdXNlZCBieSBw
cm9kdWN0aW9uIGNvZGUgaW4gdGhlIGZ1dHVyZQorICAgIC8vLyBPbmx5IGdldCBmaW5pc2hlZCAo
YXJjaGl2ZWQpIHRhc2tzLgorICAgIEFyY2hpdmVkLAorfQorCitpbXBsIFRhc2tDYWNoZSB7Cisg
ICAgLy8vIENyZWF0ZSBhIG5ldyB0YXNrIGNhY2hlIGluc3RhbmNlLgorICAgIC8vLworICAgIC8v
LyBSZW1lbWJlciB0byBjYWxsIGBpbml0YCBvciBgbmV3X2ZpbGVgIHRvIGNyZWF0ZSBpbml0aWFs
IGFyY2hpdmUgZmlsZXMgYmVmb3JlCisgICAgLy8vIGFkZGluZyBhbnkgdGFza3MuCisgICAgcHVi
IGZuIG5ldzxQOiBBc1JlZjxQYXRoPj4ocGF0aDogUCwgY3JlYXRlX29wdGlvbnM6IENyZWF0ZU9w
dGlvbnMpIC0+IFJlc3VsdDxTZWxmLCBFcnJvcj4geworICAgICAgICBPayhTZWxmIHsKKyAgICAg
ICAgICAgIGJhc2VfcGF0aDogcGF0aC5hc19yZWYoKS5pbnRvKCksCisgICAgICAgICAgICBjcmVh
dGVfb3B0aW9ucywKKyAgICAgICAgfSkKKyAgICB9CisKKyAgICAvLy8gQ3JlYXRlIGluaXRpYWwg
dGFzayBhcmNoaXZlcyB0aGF0IGNhbiBiZSBiYWNrZmlsbGVkIHdpdGggdGhlCisgICAgLy8vIHJl
Y2VudCB0YXNrIGhpc3RvcnkgZnJvbSBhIHJlbW90ZS4KKyAgICAvLy8KKyAgICAvLy8gVGhpcyBm
dW5jdGlvbiBvbmx5IGhhcyBhbiBlZmZlY3QgaWYgdGhlcmUgYXJlIG5vIGFyY2hpdmUgZmlsZXMg
eWV0LgorICAgIHB1YiBmbiBpbml0KCZzZWxmLCBub3c6IGk2NCwgbnVtYmVyX29mX2ZpbGVzOiB1
NjQsIHBlcmlvZF9wZXJfZmlsZTogdTY0KSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAg
IGxldCBfbG9jayA9IHNlbGYubG9jayh0cnVlKS5jb250ZXh0KCJmYWlsZWQgdG8gbG9jayBhcmNo
aXZlIik/OworCisgICAgICAgIGlmIHNlbGYuYXJjaGl2ZV9maWxlcygpPy5pc19lbXB0eSgpIHsK
KyAgICAgICAgICAgIGZvciBpIGluIDAuLm51bWJlcl9vZl9maWxlcyB7CisgICAgICAgICAgICAg
ICAgc2VsZi5uZXdfZmlsZShub3cgLSAoaSAqIHBlcmlvZF9wZXJfZmlsZSkgYXMgaTY0KT87Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICAv
Ly8gU3RhcnQgYSBuZXcgYXJjaGl2ZSBmaWxlIHdpdGggYSBnaXZlbiB0aW1lc3RhbXAuCisgICAg
Ly8vIGBub3dgIGlzIHN1cHBvc2VkIHRvIGJlIGEgVU5JWCB0aW1lc3RhbXAgKHNlY29uZHMpLgor
ICAgIGZuIG5ld19maWxlKCZzZWxmLCBub3c6IGk2NCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewor
ICAgICAgICBsZXQgbmV3X3BhdGggPSBzZWxmCisgICAgICAgICAgICAuYmFzZV9wYXRoCisgICAg
ICAgICAgICAuam9pbihmb3JtYXQhKCJ7QVJDSElWRV9GSUxFTkFNRV9QUkVGSVh9e25vd30iKSk7
CisgICAgICAgIGxldCBtdXQgZmlsZSA9IEZpbGU6OmNyZWF0ZSgmbmV3X3BhdGgpPzsKKyAgICAg
ICAgc2VsZi5jcmVhdGVfb3B0aW9ucy5hcHBseV90bygmbXV0IGZpbGUsICZuZXdfcGF0aCk/Owor
CisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIC8vLyBMb2NrIHRoZSBjYWNoZS4KKyAgICBm
biBsb2NrKCZzZWxmLCBleGNsdXNpdmU6IGJvb2wpIC0+IFJlc3VsdDxUYXNrQ2FjaGVMb2NrLCBF
cnJvcj4geworICAgICAgICBsZXQgbG9ja2ZpbGUgPSBzZWxmLmJhc2VfcGF0aC5qb2luKExPQ0tG
SUxFX0ZJTEVOQU1FKTsKKworICAgICAgICBsZXQgZmQgPSBwcm94bW94X3N5czo6ZnM6Om9wZW5f
ZmlsZV9sb2NrZWQoCisgICAgICAgICAgICBsb2NrZmlsZSwKKyAgICAgICAgICAgIER1cmF0aW9u
Ojpmcm9tX3NlY3MoMTUpLAorICAgICAgICAgICAgZXhjbHVzaXZlLAorICAgICAgICAgICAgc2Vs
Zi5jcmVhdGVfb3B0aW9ucywKKyAgICAgICAgKT87CisKKyAgICAgICAgT2soVGFza0NhY2hlTG9j
ayhmZCkpCisgICAgfQorCisgICAgLy8vIFJvdGF0ZSB0YXNrIGFyY2hpdmUgaWYgdGhlIHRoZSBu
ZXdlc3QgYXJjaGl2ZSBmaWxlIGlzIG9sZGVyIHRoYW4gYHJvdGF0ZV9hZnRlcmAuCisgICAgLy8v
CisgICAgLy8vIFRoZSBvbGRlc3QgYXJjaGl2ZSBmaWxlcyBhcmUgcmVtb3ZlZCBpZiB0aGUgdG90
YWwgbnVtYmVyIG9mIGFyY2hpdmUgZmlsZXMgZXhjZWVkcworICAgIC8vLyBgbWF4X2ZpbGVzYC4g
YG5vd2AgaXMgc3VwcG9zZWQgdG8gYmUgYSBVTklYIHRpbWVzdGFtcCAoc2Vjb25kcykuCisgICAg
Ly8vCisgICAgLy8vIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgYW4gZXhjbHVzaXZlIGxvY2ssIGRv
bid0IGNhbGwgaWYgeW91IGFscmVhZHkgaG9sZCBhIGxvY2suCisgICAgcHViIGZuIHJvdGF0ZSgm
c2VsZiwgbm93OiBpNjQsIHJvdGF0ZV9hZnRlcjogdTY0LCBtYXhfZmlsZXM6IHU2NCkgLT4gUmVz
dWx0PGJvb2wsIEVycm9yPiB7CisgICAgICAgIGxldCBfbG9jayA9IHNlbGYubG9jayh0cnVlKS5j
b250ZXh0KCJmYWlsZWQgdG8gbG9jayBhcmNoaXZlIik/OworICAgICAgICBsZXQgbXV0IGRpZF9y
b3RhdGUgPSBmYWxzZTsKKworICAgICAgICBsZXQgbXV0IGJvdW5kcyA9IHNlbGYuYXJjaGl2ZV9m
aWxlcygpPzsKKworICAgICAgICBtYXRjaCBib3VuZHMuZmlyc3QoKSB7CisgICAgICAgICAgICBT
b21lKGJvdW5kKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgbm93ID4gYm91bmQuc3RhcnR0aW1l
ICYmIG5vdyAtIGJvdW5kLnN0YXJ0dGltZSA+IHJvdGF0ZV9hZnRlciBhcyBpNjQgeworICAgICAg
ICAgICAgICAgICAgICBzZWxmLm5ld19maWxlKG5vdyk/OworICAgICAgICAgICAgICAgICAgICBk
aWRfcm90YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBOb25lID0+IHsKKyAgICAgICAgICAgICAgICBzZWxmLm5ld19maWxlKG5vdyk/Owor
ICAgICAgICAgICAgICAgIGRpZF9yb3RhdGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgd2hpbGUgYm91bmRzLmxlbigpID49IG1heF9maWxlcyBhcyB1c2l6ZSB7
CisgICAgICAgICAgICAvLyBVbndyYXAgaXMgc2FmZSBiZWNhdXNlIG9mIHRoZSBsZW5ndGggY2hl
Y2sgYWJvdmUKKyAgICAgICAgICAgIGxldCB0b19yZW1vdmUgPSBib3VuZHMucG9wKCkudW53cmFw
KCk7CisgICAgICAgICAgICBzdGQ6OmZzOjpyZW1vdmVfZmlsZSgmdG9fcmVtb3ZlLmZpbGUpCisg
ICAgICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCBmb3JtYXQhKCJmYWlsZWQgdG8gcmVtb3Zl
IHt9IiwgdG9fcmVtb3ZlLmZpbGUuZGlzcGxheSgpKSk/OworICAgICAgICB9CisKKyAgICAgICAg
T2soZGlkX3JvdGF0ZSkKKyAgICB9CisKKyAgICAvLy8gQWRkIG5ldyB0YXNrcyB0byB0aGUgdGFz
ayBhcmNoaXZlLgorICAgIC8vLworICAgIC8vLyBSdW5uaW5nIHRhc2tzICh0YXNrcyB3aXRob3V0
IGFuIGVuZHRpbWUpIGFyZSBwbGFjZWQgaW50byB0aGUgJ2FjdGl2ZScgZmlsZSBpbiB0aGUKKyAg
ICAvLy8gdGFzayBjYWNoZSBiYXNlIGRpcmVjdG9yeS4gRmluaXNoZWQgdGFza3MgYXJlIHNvcnRl
ZCBpbnRvIGBhcmNoaXZlLjxzdGFydGltZT5gIGFyY2hpdmUKKyAgICAvLy8gZmlsZXMsIHdoZXJl
IGA8c3RhcnR0aW1lcz5gIGRlbm90ZXMgdGhlIGxvd2VzdCBwZXJtaXR0ZWQgc3RhcnQgdGltZSB0
aW1lc3RhbXAgZm9yIGEgZ2l2ZW4KKyAgICAvLy8gYXJjaGl2ZSBmaWxlLiBJZiBhIHRhc2sgd2hp
Y2ggd2FzIGFkZGVkIGFzIHJ1bm5pbmcgcHJldmlvdXNseSBpcyBhZGRlZCBhZ2FpbiwgdGhpcyB0
aW1lIGluCisgICAgLy8vIGEgZmluaXNoZWQgc3RhdGUsIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9t
IHRoZSBgYWN0aXZlYCBmaWxlIGFuZCBhbHNvIHNvcnRlZCBpbnRvCisgICAgLy8vIG9uZSBvZiB0
aGUgYXJjaGl2ZSBmaWxlcy4KKyAgICAvLy8gU2FtZSBnb2VzIGZvciB0aGUgbGlzdCBvZiB0cmFj
a2VkIHRhc2tzOyB0aGUgZW50cnkgaW4gdGhlIHN0YXRlIGZpbGUgd2lsbCBiZSByZW1vdmVkLgor
ICAgIC8vLworICAgIC8vLyBDcmFzaCBjb25zaXN0ZW5jeToKKyAgICAvLy8KKyAgICAvLy8gVGhl
IHN0YXRlIGZpbGUsIHdoaWNoIGNvbnRhaW5zIHRoZSBjdXQtb2ZmIHRpbWVzdGFtcHMgZm9yIGZ1
dHVyZSB0YXNrIGZldGNoaW5nLCBpcyB1cGRhdGVkIGF0IHRoZQorICAgIC8vLyBlbmQgYWZ0ZXIg
YWxsIHRhc2tzIGhhdmUgYmVlbiBhZGRlZCBpbnRvIHRoZSBhcmNoaXZlLiBBZGRpbmcgdGFza3Mg
aXMgYW4gaWRlbXBvdGVudAorICAgIC8vLyBvcGVyYXRpb247IGFkZGluZyB0aGUgKnNhbWUqIHRh
c2sgbXVsdGlwbGUgdGltZXMgZG9lcyBub3QgbGVhZCB0byBkdXBsaWNhdGVkIGVudHJpZXMgaW4g
dGhlCisgICAgLy8vIHRhc2sgYXJjaGl2ZS4gSW5kaXZpZHVhbCBhcmNoaXZlIGZpbGVzIGFyZSB1
cGRhdGVkIGF0b21pY2FsbHksIGJ1dCBzaW5jZQorICAgIC8vLyBhZGRpbmcgdGFza3MgY2FuIGlu
dm9sdmUgdXBkYXRpbmcgbXVsdGlwbGUgYXJjaGl2ZSBmaWxlcywgdGhlIGFyY2hpdmUgY291bGQg
ZW5kIHVwCisgICAgLy8vIGluIGEgcGFydGlhbGx5LXVwZGF0ZWQsIGluY29uc2lzdGVudCBzdGF0
ZSBpbiBjYXNlIG9mIGEgY3Jhc2guCisgICAgLy8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBzdGF0ZSBm
aWxlIHdpdGggdGhlIGN1dC1vZmYgdGltZXN0YW1wcyBpcyB1cGRhdGVkIGxhc3QsCisgICAgLy8v
IHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgYXJjaGl2ZSBzaG91bGQgYmUgcmVzdG9yZWQgYXQgdGhl
IG5leHQgdXBkYXRlIGN5Y2xlIG9mIHRoZSBhcmNoaXZlLgorICAgIHB1YiBmbiBhZGRfdGFza3Mo
JnNlbGYsIG11dCBhZGRlZDogSGFzaE1hcDxTdHJpbmcsIEFkZFRhc2tzPikgLT4gUmVzdWx0PCgp
LCBFcnJvcj4geworICAgICAgICBsZXQgbG9jayA9IHNlbGYubG9jayh0cnVlKS5jb250ZXh0KCJm
YWlsZWQgdG8gbG9jayBhcmNoaXZlIik/OworCisgICAgICAgIC8vIEdldCBhIGZsYXQgYFZlY2Ag
b2YgYWxsIG5ldyB0YXNrcworICAgICAgICBsZXQgdGFza3M6IFZlYzxfPiA9IGFkZGVkCisgICAg
ICAgICAgICAuaXRlcl9tdXQoKQorICAgICAgICAgICAgLmZsYXRfbWFwKHwoXywgdGFza3MpfCBz
dGQ6Om1lbTo6dGFrZSgmbXV0IHRhc2tzLnRhc2tzKSkKKyAgICAgICAgICAgIC5jb2xsZWN0KCk7
CisKKyAgICAgICAgbGV0IHVwZGF0ZV9zdGF0ZV9mb3JfcmVtb3RlOiBIYXNoTWFwPFN0cmluZywg
Ym9vbD4gPSBhZGRlZAorICAgICAgICAgICAgLmludG9faXRlcigpCisgICAgICAgICAgICAubWFw
KHwocmVtb3RlLCBhZGRfdGFza3MpfCAocmVtb3RlLCBhZGRfdGFza3MudXBkYXRlX21vc3RfcmVj
ZW50X2FyY2hpdmVfdGltZXN0YW1wKSkKKyAgICAgICAgICAgIC5jb2xsZWN0KCk7CisKKyAgICAg
ICAgbGV0IG11dCB0YXNrX2l0ZXIgPSBzZWxmCisgICAgICAgICAgICAuZ2V0X3Rhc2tzX3dpdGhf
bG9jayhHZXRUYXNrczo6QWN0aXZlLCBsb2NrKQorICAgICAgICAgICAgLmNvbnRleHQoImZhaWxl
ZCB0byBjcmVhdGUgYXJjaGl2ZSBpdGVyYXRvciBmb3IgYWN0aXZlIHRhc2tzIik/OworCisgICAg
ICAgIGxldCBtdXQgYWN0aXZlX3Rhc2tzID0KKyAgICAgICAgICAgIEhhc2hTZXQ6OmZyb21faXRl
cih0YXNrX2l0ZXIuZmxhdF9tYXAofGFjdGl2ZV90YXNrfCBtYXRjaCBhY3RpdmVfdGFzayB7Cisg
ICAgICAgICAgICAgICAgT2sodGFzaykgPT4gU29tZSgodGFzay51cGlkLCB0YXNrLnN0YXJ0dGlt
ZSkpLAorICAgICAgICAgICAgICAgIEVycihlcnIpID0+IHsKKyAgICAgICAgICAgICAgICAgICAg
bG9nOjplcnJvciEoImZhaWxlZCB0byByZWFkIHRhc2sgY2FjaGUgZW50cnkgZnJvbSBhY3RpdmUg
ZmlsZToge2Vycn0iKTsKKyAgICAgICAgICAgICAgICAgICAgTm9uZQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0pKTsKKworICAgICAgICAvLyBDb25zdW1lIHRoZSBpdGVyYXRvciB0
byBnZXQgYmFjayB0aGUgbG9jay4gVGhlIGxvY2sgaXMgaGVsZAorICAgICAgICAvLyB1bnRpbCBf
bG9jayBpcyBmaW5hbGx5IGRyb3BwZWQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uCisgICAg
ICAgIGxldCBfbG9jayA9IHRhc2tfaXRlci5pbnRvX2xvY2soKTsKKworICAgICAgICBsZXQgbXV0
IG5ld19maW5pc2hlZF90YXNrcyA9IFZlYzo6bmV3KCk7CisKKyAgICAgICAgZm9yIHRhc2sgaW4g
dGFza3MgeworICAgICAgICAgICAgaWYgdGFzay5lbmR0aW1lLmlzX25vbmUoKSB7CisgICAgICAg
ICAgICAgICAgYWN0aXZlX3Rhc2tzLmluc2VydCgodGFzay51cGlkLCB0YXNrLnN0YXJ0dGltZSkp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuZXdfZmluaXNoZWRfdGFz
a3MucHVzaCh0YXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxldCBt
dXQgc3RhdGUgPSBzZWxmLnJlYWRfc3RhdGUoKTsKKworICAgICAgICBuZXdfZmluaXNoZWRfdGFz
a3Muc29ydF9ieShjb21wYXJlX3Rhc2tzX3JldmVyc2UpOworICAgICAgICBzZWxmLm1lcmdlX3Rh
c2tzX2ludG9fYXJjaGl2ZSgKKyAgICAgICAgICAgIG5ld19maW5pc2hlZF90YXNrcywKKyAgICAg
ICAgICAgICZtdXQgYWN0aXZlX3Rhc2tzLAorICAgICAgICAgICAgdXBkYXRlX3N0YXRlX2Zvcl9y
ZW1vdGUsCisgICAgICAgICAgICAmbXV0IHN0YXRlLAorICAgICAgICApPzsKKyAgICAgICAgc2Vs
Zi51cGRhdGVfb2xkZXN0X2FjdGl2ZSgmYWN0aXZlX3Rhc2tzLCAmbXV0IHN0YXRlKTsKKworICAg
ICAgICBsZXQgbXV0IGFjdGl2ZTogVmVjPFRhc2tDYWNoZUl0ZW0+ID0gYWN0aXZlX3Rhc2tzCisg
ICAgICAgICAgICAuaW50b19pdGVyKCkKKyAgICAgICAgICAgIC5tYXAofCh1cGlkLCBzdGFydHRp
bWUpfCBUYXNrQ2FjaGVJdGVtIHsKKyAgICAgICAgICAgICAgICB1cGlkLAorICAgICAgICAgICAg
ICAgIHN0YXJ0dGltZSwKKyAgICAgICAgICAgICAgICBzdGF0dXM6IE5vbmUsCisgICAgICAgICAg
ICAgICAgZW5kdGltZTogTm9uZSwKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAuY29sbGVj
dCgpOworCisgICAgICAgIGFjdGl2ZS5zb3J0X2J5KGNvbXBhcmVfdGFza3NfcmV2ZXJzZSk7Cisg
ICAgICAgIHNlbGYud3JpdGVfYWN0aXZlX3Rhc2tzKGFjdGl2ZS5pbnRvX2l0ZXIoKSkKKyAgICAg
ICAgICAgIC5jb250ZXh0KCJmYWlsZWQgdG8gd3JpdGUgYWN0aXZlIHRhc2sgZmlsZSB3aGVuIGFk
ZGluZyB0YXNrcyIpPzsKKyAgICAgICAgc2VsZi53cml0ZV9zdGF0ZShzdGF0ZSkKKyAgICAgICAg
ICAgIC5jb250ZXh0KCJmYWlsZWQgdG8gdXBkYXRlIHRhc2sgYXJjaGl2ZSBzdGF0ZSBmaWxlIHdo
ZW4gYWRkaW5nIHRhc2tzIik/OworCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIC8vLyBV
cGRhdGUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgb2xkZXN0IHJ1bm5pbmcgdGFzayBpbiBgc3RhdGVg
LgorICAgIGZuIHVwZGF0ZV9vbGRlc3RfYWN0aXZlKCZzZWxmLCBhY3RpdmVfdGFza3M6ICZIYXNo
U2V0PChSZW1vdGVVcGlkLCBpNjQpPiwgc3RhdGU6ICZtdXQgU3RhdGUpIHsKKyAgICAgICAgLy8g
VXBkYXRlIHRoZSBzdGF0ZSB3aXRoIHRpbWVzdGFtcCBvZiB0aGUgb2xkZXN0IHJ1bm5pbmcgdGFz
aywKKyAgICAgICAgLy8gd2UgYWxzbyB1c2UgdGhpcyBhcyBjdXQtb2ZmIHdoZW4gZmV0Y2hpbmcg
dGFza3MsIHNvIHdlCisgICAgICAgIC8vIGZvciBzdXJlIGtub3cgd2hlbiBhIHRhc2sgZmluaXNo
ZXMuCisgICAgICAgIGxldCBtdXQgb2xkZXN0X2FjdGl2ZV90YXNrX3Blcl9yZW1vdGUgPSBIYXNo
TWFwOjpuZXcoKTsKKyAgICAgICAgZm9yICh1cGlkLCBzdGFydGltZSkgaW4gYWN0aXZlX3Rhc2tz
Lml0ZXIoKSB7CisgICAgICAgICAgICBvbGRlc3RfYWN0aXZlX3Rhc2tfcGVyX3JlbW90ZQorICAg
ICAgICAgICAgICAgIC5lbnRyeSh1cGlkLnJlbW90ZSgpLnRvX293bmVkKCkpCisgICAgICAgICAg
ICAgICAgLmFuZF9tb2RpZnkofHRpbWV8ICp0aW1lID0gKCpzdGFydGltZSkubWluKCp0aW1lKSkK
KyAgICAgICAgICAgICAgICAub3JfaW5zZXJ0KCpzdGFydGltZSk7CisgICAgICAgIH0KKyAgICAg
ICAgc3RhdGUub2xkZXN0X2FjdGl2ZV90YXNrID0gb2xkZXN0X2FjdGl2ZV90YXNrX3Blcl9yZW1v
dGU7CisgICAgfQorCisgICAgLy8vIE1lcmdlIGEgbGlzdCBvZiAqZmluaXNoZWQqIHRhc2tzIGlu
dG8gdGhlIHJlbW90ZSB0YXNrIGFyY2hpdmUgZmlsZXMuCisgICAgLy8vIFRoZSBsaXN0IG9mIHRh
c2sgaW4gYHRhc2tzYCAqbXVzdCogYmUgc29ydGVkIGJ5IHRoZWlyIHRpbWVzdGFtcCBhbmQgVVBJ
RCAoZGVzY2VuZGluZyBieQorICAgIC8vLyB0aW1lc3RhbXAsIGFzY2VuZGluZyBieSBVUElEKS4K
KyAgICAvLy8KKyAgICAvLy8gVGhlIHRhc2sgYXJjaGl2ZSBzaG91bGQgYmUgbG9ja2VkIHdoZW4g
Y2FsbGluZyB0aGlzLgorICAgIGZuIG1lcmdlX3Rhc2tzX2ludG9fYXJjaGl2ZSgKKyAgICAgICAg
JnNlbGYsCisgICAgICAgIHRhc2tzOiBWZWM8VGFza0NhY2hlSXRlbT4sCisgICAgICAgIGFjdGl2
ZV90YXNrczogJm11dCBIYXNoU2V0PChSZW1vdGVVcGlkLCBpNjQpPiwKKyAgICAgICAgdXBkYXRl
X3N0YXRlX2Zvcl9yZW1vdGU6IEhhc2hNYXA8U3RyaW5nLCBib29sPiwKKyAgICAgICAgc3RhdGU6
ICZtdXQgU3RhdGUsCisgICAgKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIGRlYnVn
X2Fzc2VydCEodGFza3MKKyAgICAgICAgICAgIC5pdGVyKCkKKyAgICAgICAgICAgIC5pc19zb3J0
ZWRfYnkofGEsIGJ8IGNvbXBhcmVfdGFza3MoYSwgYikuaXNfZ2UoKSkpOworCisgICAgICAgIGxl
dCBmaWxlcyA9IHNlbGYKKyAgICAgICAgICAgIC5hcmNoaXZlX2ZpbGVzKCkKKyAgICAgICAgICAg
IC5jb250ZXh0KCJmYWlsZWQgdG8gcmVhZCBhY2hpdmUgZmlsZXMiKT87CisKKyAgICAgICAgbGV0
IG11dCBmaWxlcyA9IGZpbGVzLml0ZXIoKS5wZWVrYWJsZSgpOworCisgICAgICAgIGxldCBtdXQg
Y3VycmVudCA9IGZpbGVzLm5leHQoKTsKKyAgICAgICAgbGV0IG11dCBuZXh0ID0gZmlsZXMucGVl
aygpOworCisgICAgICAgIGxldCBtdXQgdGFza3NfZm9yX2N1cnJlbnRfZmlsZSA9IFZlYzo6bmV3
KCk7CisKKyAgICAgICAgLy8gVGFza3MgYXJlIHNvcnRlZCB5b3VuZ2VzdCB0byBvbGRlc3QgKGJp
Z2dlc3Qgc3RhcnR0aW1lIGZpcnN0KQorICAgICAgICBmb3IgbXV0IHRhc2sgaW4gdGFza3Mgewor
ICAgICAgICAgICAgLy8gVXNpbmcgYSBwYXJ0aWFsIG1vdmUgdG8gYXZvaWQgaGF2aW5nIHRvIGNs
b25lIHRhc2sudXBpZAorICAgICAgICAgICAgbGV0IHVwaWRfYW5kX3N0YXJ0dGltZSA9ICh0YXNr
LnVwaWQsIHRhc2suc3RhcnR0aW1lKTsKKyAgICAgICAgICAgIGFjdGl2ZV90YXNrcy5yZW1vdmUo
JnVwaWRfYW5kX3N0YXJ0dGltZSk7CisgICAgICAgICAgICB0YXNrLnVwaWQgPSB1cGlkX2FuZF9z
dGFydHRpbWUuMDsKKworICAgICAgICAgICAgaWYgbGV0IFNvbWUodHJhY2tlZF90YXNrcykgPSBz
dGF0ZS50cmFja2VkX3Rhc2tzLmdldF9tdXQodGFzay51cGlkLnJlbW90ZSgpKSB7CisgICAgICAg
ICAgICAgICAgdHJhY2tlZF90YXNrcy5yZW1vdmUoJnRhc2sudXBpZCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIGxldCBTb21lKHRydWUpID0gdXBkYXRlX3N0YXRlX2Zvcl9yZW1v
dGUuZ2V0KHRhc2sudXBpZC5yZW1vdGUoKSkgeworICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0
aGUgbW9zdCByZWNlbnQgc3RhcnRpbWUgcGVyIHJlbW90ZSwgdGhlIHRhc2sgcG9sbGluZyBsb2dp
YyB1c2VzIGl0IGFzIGEKKyAgICAgICAgICAgICAgICAvLyBjdXQtb2ZmLgorICAgICAgICAgICAg
ICAgIHN0YXRlCisgICAgICAgICAgICAgICAgICAgIC5tb3N0X3JlY2VudF9hcmNoaXZlX3N0YXJ0
dGltZQorICAgICAgICAgICAgICAgICAgICAuZW50cnkodGFzay51cGlkLnJlbW90ZSgpLnRvX293
bmVkKCkpCisgICAgICAgICAgICAgICAgICAgIC5hbmRfbW9kaWZ5KHx0aW1lfCAqdGltZSA9ICh0
YXNrLnN0YXJ0dGltZSkubWF4KCp0aW1lKSkKKyAgICAgICAgICAgICAgICAgICAgLm9yX2luc2Vy
dCh0YXNrLnN0YXJ0dGltZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNraXAg
YWhlYWQgdW50aWwgd2UgaGF2ZSBmb3VuZCB0aGUgY29ycmVjdCBmaWxlLgorICAgICAgICAgICAg
d2hpbGUgbmV4dC5pc19zb21lKCkgeworICAgICAgICAgICAgICAgIGlmIGxldCBTb21lKGN1cnJl
bnQpID0gY3VycmVudCB7CisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2suc3RhcnR0aW1lID49
IGN1cnJlbnQuc3RhcnR0aW1lIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBuZXh0IGVudHJ5
J3MgY3V0LW9mZiBpcyBsYXJnZXIgdGhlbiB0aGUgdGFzaydzIHN0YXJ0IHRpbWUsIHRoYXQgbWVh
bnMKKyAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2FudCB0byBmaW5hbGl6ZWQgdGhlIGN1cnJl
bnQgZmlsZSBieSBtZXJnaW5nIGFsbCB0YXNrcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8v
IHNob3VsZCBiZSBzdG9yZWQgaW4gaXQuLi4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXJn
ZV9zaW5nbGVfYXJjaGl2ZV9maWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptZW06
OnRha2UoJm11dCB0YXNrc19mb3JfY3VycmVudF9maWxlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICZjdXJyZW50LmZpbGUsCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAg
ICAgICAgLndpdGhfY29udGV4dCh8fCB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQh
KCJmYWlsZWQgdG8gbWVyZ2UgYXJjaGl2ZSBmaWxlIHt9IiwgY3VycmVudC5maWxlLmRpc3BsYXko
KSkKKyAgICAgICAgICAgICAgICAgICAgfSk/OworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIC4uLiBhbmQgdGhlIHRoZSBgY3VycmVudGAgZmlsZSB0byB0aGUgbmV4dCBl
bnRyeS4KKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gZmlsZXMubmV4dCgpOworICAgICAgICAg
ICAgICAgIG5leHQgPSBmaWxlcy5wZWVrKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIGxldCBTb21lKGN1cnJlbnQpID0gY3VycmVudCB7CisgICAgICAgICAgICAgICAgaWYgdGFz
ay5zdGFydHRpbWUgPCBjdXJyZW50LnN0YXJ0dGltZSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRh
c2tzX2Zvcl9jdXJyZW50X2ZpbGUucHVzaCh0YXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE1lcmdlIHRhc2tzIGZvciB0aGUgbGFzdCBmaWxlLgorICAgICAgICBpZiBsZXQgU29tZShjdXJy
ZW50KSA9IGN1cnJlbnQgeworICAgICAgICAgICAgc2VsZi5tZXJnZV9zaW5nbGVfYXJjaGl2ZV9m
aWxlKHRhc2tzX2Zvcl9jdXJyZW50X2ZpbGUsICZjdXJyZW50LmZpbGUpCisgICAgICAgICAgICAg
ICAgLndpdGhfY29udGV4dCh8fCB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCEoImZhaWxl
ZCB0byBtZXJnZSBhcmNoaXZlIGZpbGUge30iLCBjdXJyZW50LmZpbGUuZGlzcGxheSgpKQorICAg
ICAgICAgICAgICAgIH0pPzsKKyAgICAgICAgfQorCisgICAgICAgIE9rKCgpKQorICAgIH0KKwor
ICAgIC8vLyBBZGQgYSBuZXcgdHJhY2tlZCB0YXNrLgorICAgIC8vLworICAgIC8vLyBUaGlzIHdp
bGwgaW5zZXJ0IHRoZSB0YXNrIGluIHRoZSBsaXN0IG9mIHRyYWNrZWQgdGFza3MgaW4gdGhlIHN0
YXRlIGZpbGUsCisgICAgLy8vIGFzIHdlbGwgYXMgY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBgYWN0
aXZlYCBmaWxlLgorICAgIC8vLworICAgIC8vLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVxdWVzdCBh
biBleGNsdXNpdmUgbG9jayBmb3IgdGhlIHRhc2sgY2FjaGUsCisgICAgLy8vIGRvIG5vdCBjYWxs
IGlmIHlvdSBhcmUgYWxyZWFkeSBob2xkaW5nIGEgbG9jay4KKyAgICBwdWIgZm4gYWRkX3RyYWNr
ZWRfdGFzaygmc2VsZiwgdGFzazogVGFza0NhY2hlSXRlbSkgLT4gUmVzdWx0PCgpLCBFcnJvcj4g
eworICAgICAgICBsZXQgbG9jayA9IHNlbGYubG9jayh0cnVlKS5jb250ZXh0KCJmYWlsZWQgdG8g
bG9jayBhcmNoaXZlIik/OworCisgICAgICAgIGxldCBtdXQgdGFza3MgPSBWZWM6Om5ldygpOwor
ICAgICAgICBsZXQgbXV0IHRhc2tfaXRlciA9IHNlbGYKKyAgICAgICAgICAgIC5nZXRfdGFza3Nf
d2l0aF9sb2NrKEdldFRhc2tzOjpBY3RpdmUsIGxvY2spCisgICAgICAgICAgICAuY29udGV4dCgi
ZmFpbGVkIHRvIGNyZWF0ZSBhY3RpdmUgdGFzayBpdGVyYXRvciIpPzsKKworICAgICAgICBmb3Ig
dGFzayBpbiAmbXV0IHRhc2tfaXRlciB7CisgICAgICAgICAgICBtYXRjaCB0YXNrIHsKKyAgICAg
ICAgICAgICAgICBPayh0YXNrKSA9PiB0YXNrcy5wdXNoKHRhc2spLAorICAgICAgICAgICAgICAg
IEVycihlcnIpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoCisgICAgICAg
ICAgICAgICAgICAgICAgICAiY291bGQgbm90IHJlYWQgZXhpc3RpbmcgdGFzayBjYWNoZSBlbnRy
eSBmcm9tICdhY3RpdmUnIGZpbGU6IHtlcnJ9IgorICAgICAgICAgICAgICAgICAgICApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRhc2tz
LnB1c2godGFzay5jbG9uZSgpKTsKKyAgICAgICAgdGFza3Muc29ydF9ieShjb21wYXJlX3Rhc2tz
X3JldmVyc2UpOworCisgICAgICAgIGxldCBfbG9jayA9IHRhc2tfaXRlci5pbnRvX2xvY2soKTsK
KworICAgICAgICBsZXQgbXV0IHN0YXRlID0gc2VsZi5yZWFkX3N0YXRlKCk7CisKKyAgICAgICAg
c3RhdGUKKyAgICAgICAgICAgIC5vbGRlc3RfYWN0aXZlX3Rhc2sKKyAgICAgICAgICAgIC5lbnRy
eSh0YXNrLnVwaWQucmVtb3RlKCkudG9fb3duZWQoKSkKKyAgICAgICAgICAgIC5hbmRfbW9kaWZ5
KHxhfCAqYSA9ICgqYSkubWluKHRhc2suc3RhcnR0aW1lKSkKKyAgICAgICAgICAgIC5vcl9pbnNl
cnQodGFzay5zdGFydHRpbWUpOworCisgICAgICAgIGxldCB0cmFja2VkX3Blcl9yZW1vdGUgPSBz
dGF0ZQorICAgICAgICAgICAgLnRyYWNrZWRfdGFza3MKKyAgICAgICAgICAgIC5lbnRyeSh0YXNr
LnVwaWQucmVtb3RlKCkudG9fb3duZWQoKSkKKyAgICAgICAgICAgIC5vcl9kZWZhdWx0KCk7Cisg
ICAgICAgIHRyYWNrZWRfcGVyX3JlbW90ZS5pbnNlcnQodGFzay51cGlkKTsKKworICAgICAgICBz
ZWxmLndyaXRlX2FjdGl2ZV90YXNrcyh0YXNrcy5pbnRvX2l0ZXIoKSkKKyAgICAgICAgICAgIC5j
b250ZXh0KCJmYWlsZWQgdG8gd3JpdGUgYWN0aXZlIHRhc2tzIGZpbGUgd2hlbiBhZGRpbmcgdHJh
Y2tlZCB0YXNrIik/OworICAgICAgICBzZWxmLndyaXRlX3N0YXRlKHN0YXRlKQorICAgICAgICAg
ICAgLmNvbnRleHQoImZhaWxlZCB0byB3cml0ZSBzdGF0ZSBmaWxlIHdoZW4gYWRkaW5nIHRyYWNr
ZWQgdGFza3MiKT87CisKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgLy8vIEl0ZXJhdGUg
b3ZlciBjYWNoZWQgdGFza3MuCisgICAgLy8vCisgICAgLy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBy
ZXF1ZXN0IGEgbm9uLWV4Y2x1c2l2ZSByZWFkLWxvY2ssIGRvbid0IGNhbGwgaWYKKyAgICAvLy8g
eW91IGFscmVhZHkgaG9sZCBhIGxvY2sgZm9yIHRoaXMgY2FjaGUuIFNlZSBbYFNlbGY6OmdldF90
YXNrc193aXRoX2xvY2tgXS4KKyAgICBwdWIgZm4gZ2V0X3Rhc2tzKCZzZWxmLCBtb2RlOiBHZXRU
YXNrcykgLT4gUmVzdWx0PFRhc2tBcmNoaXZlSXRlcmF0b3IsIEVycm9yPiB7CisgICAgICAgIGxl
dCBsb2NrID0gc2VsZgorICAgICAgICAgICAgLmxvY2soZmFsc2UpCisgICAgICAgICAgICAuY29u
dGV4dCgiZ2V0X3Rhc2tzOiBmYWlsZWQgdG8gYWNxdWlyZSBsb2NrIik/OworICAgICAgICBzZWxm
LmdldF90YXNrc193aXRoX2xvY2sobW9kZSwgbG9jaykKKyAgICAgICAgICAgIC5jb250ZXh0KCJm
YWlsZWQgdG8gY3JlYXRlIHRhc2sgYXJjaGl2ZSBpdGVyYXRvciIpCisgICAgfQorCisgICAgLy8v
IEl0ZXJhdGUgb3ZlciBjYWNoZWQgdGFza3MuCisgICAgLy8vCisgICAgLy8vIFRoaXMgZnVuY3Rp
b24gcmVxdWlyZXMgeW91IHRvIHBhc3MgYSBsb2NrLiBJZiB5b3Ugd2FudCB0byBjb250aW51ZSB0
byBob2xkIHRoZSBsb2NrCisgICAgLy8vIGFmdGVyIGl0ZXJhdGluZywgeW91IGNhbiBjb25zdW1l
IHRoZSBpdGVyYXRvciBieSBjYWxsaW5nCisgICAgLy8vIFtgVGFza0FyY2hpdmVJdGVyYXRvcjo6
aW50b19sb2NrYF0sIHlpZWxkaW5nIHRoZSBvcmlnaW5hbCBsb2NrLgorICAgIHB1YiBmbiBnZXRf
dGFza3Nfd2l0aF9sb2NrKAorICAgICAgICAmc2VsZiwKKyAgICAgICAgbW9kZTogR2V0VGFza3Ms
CisgICAgICAgIGxvY2s6IFRhc2tDYWNoZUxvY2ssCisgICAgKSAtPiBSZXN1bHQ8VGFza0FyY2hp
dmVJdGVyYXRvciwgRXJyb3I+IHsKKyAgICAgICAgbWF0Y2ggbW9kZSB7CisgICAgICAgICAgICBH
ZXRUYXNrczo6QWxsID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgYXJjaGl2ZV9maWxlcyA9IHNl
bGYuYXJjaGl2ZV9maWxlcygpPy5pbnRvX2l0ZXIoKS5tYXAofHBhaXJ8IHBhaXIuZmlsZSk7Cisg
ICAgICAgICAgICAgICAgbGV0IGFsbF9maWxlcyA9IFtzZWxmLmJhc2VfcGF0aC5qb2luKEFDVElW
RV9GSUxFTkFNRSldCisgICAgICAgICAgICAgICAgICAgIC5pbnRvX2l0ZXIoKQorICAgICAgICAg
ICAgICAgICAgICAuY2hhaW4oYXJjaGl2ZV9maWxlcyk7CisKKyAgICAgICAgICAgICAgICBPayhU
YXNrQXJjaGl2ZUl0ZXJhdG9yOjpuZXcoQm94OjpuZXcoYWxsX2ZpbGVzKSwgbG9jaykpCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBHZXRUYXNrczo6QWN0aXZlID0+IHsKKyAgICAgICAgICAg
ICAgICBsZXQgZmlsZXMgPSBbc2VsZi5iYXNlX3BhdGguam9pbihBQ1RJVkVfRklMRU5BTUUpXTsK
KyAgICAgICAgICAgICAgICBPayhUYXNrQXJjaGl2ZUl0ZXJhdG9yOjpuZXcoQm94OjpuZXcoZmls
ZXMuaW50b19pdGVyKCkpLCBsb2NrKSkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICNbY2Zn
KHRlc3QpXQorICAgICAgICAgICAgR2V0VGFza3M6OkFyY2hpdmVkID0+IHsKKyAgICAgICAgICAg
ICAgICBsZXQgZmlsZXMgPSBzZWxmLmFyY2hpdmVfZmlsZXMoKT87CisKKyAgICAgICAgICAgICAg
ICBPayhUYXNrQXJjaGl2ZUl0ZXJhdG9yOjpuZXcoCisgICAgICAgICAgICAgICAgICAgIEJveDo6
bmV3KGZpbGVzLmludG9faXRlcigpLm1hcCh8cGFpcnwgcGFpci5maWxlKSksCisgICAgICAgICAg
ICAgICAgICAgIGxvY2ssCisgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vLyBXcml0ZSB0aGUgcHJvdmlkZWQgdGFza3MgdG8gdGhlICdh
Y3RpdmUnIGZpbGUuCisgICAgLy8vCisgICAgLy8vIFRoZSB0YXNrcyBhcmUgZmlyc3Qgd3JpdHRl
biB0byBhIHRlbXBvcmFyeSBmaWxlLCB3aGljaCBpcyB0aGVuIHVzZWQKKyAgICAvLy8gdG8gYXRv
bWljYWxseSByZXBsYWNlIHRoZSBvcmlnaW5hbC4KKyAgICBmbiB3cml0ZV9hY3RpdmVfdGFza3Mo
JnNlbGYsIHRhc2tzOiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSBUYXNrQ2FjaGVJdGVtPikgLT4gUmVz
dWx0PCgpLCBFcnJvcj4geworICAgICAgICBsZXQgKGZkLCBwYXRoKSA9IHByb3htb3hfc3lzOjpm
czo6bWFrZV90bXBfZmlsZSgKKyAgICAgICAgICAgIHNlbGYuYmFzZV9wYXRoLmpvaW4oQUNUSVZF
X0ZJTEVOQU1FKSwKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX29wdGlvbnMsCisgICAgICAgICk/
OworICAgICAgICBsZXQgbXV0IGZkID0gQnVmV3JpdGVyOjpuZXcoZmQpOworCisgICAgICAgIFNl
bGY6OndyaXRlX3Rhc2tzKCZtdXQgZmQsIHRhc2tzKT87CisKKyAgICAgICAgaWYgbGV0IEVycihl
cnIpID0gZmQuZmx1c2goKSB7CisgICAgICAgICAgICBsb2c6OmVycm9yISgiY291bGQgbm90IGZs
dXNoICdhY3RpdmUnIGZpbGU6IHtlcnJ9Iik7CisgICAgICAgIH0KKyAgICAgICAgZHJvcChmZCk7
CisKKyAgICAgICAgbGV0IHRhcmdldCA9IHNlbGYuYmFzZV9wYXRoLmpvaW4oQUNUSVZFX0ZJTEVO
QU1FKTsKKworICAgICAgICBsZXQgcmVzID0gc3RkOjpmczo6cmVuYW1lKCZwYXRoLCAmdGFyZ2V0
KS53aXRoX2NvbnRleHQofHwgeworICAgICAgICAgICAgZm9ybWF0ISgKKyAgICAgICAgICAgICAg
ICAiZmFpbGVkIHRvIHJlcGxhY2Uge30gd2l0aCB7fSIsCisgICAgICAgICAgICAgICAgdGFyZ2V0
LmRpc3BsYXkoKSwKKyAgICAgICAgICAgICAgICBwYXRoLmRpc3BsYXkoKSwKKyAgICAgICAgICAg
ICkKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgbGV0IEVycihlcnIpID0gcmVzIHsKKyAgICAg
ICAgICAgIGlmIGxldCBFcnIoZXJyKSA9IHN0ZDo6ZnM6OnJlbW92ZV9maWxlKCZwYXRoKSB7Cisg
ICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImZhaWxlZCB0byBjbGVhbnVwIHRlbXBvcmFyeSBm
aWxlIHt9OiB7ZXJyfSIsIHBhdGguZGlzcGxheSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIEVycihlcnIpOworICAgICAgICB9CisKKyAgICAgICAgT2soKCkpCisgICAg
fQorCisgICAgLy8vIFJlYWQgdGhlIHN0YXRlIGZpbGUuCisgICAgLy8vIElmIHRoZSBzdGF0ZSBm
aWxlIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGV4aXN0LCB0aGUgZGVmYXVsdCAoZW1w
dHkpIHN0YXRlCisgICAgLy8vIGlzIHJldHVybmVkLgorICAgIC8vLyBBIGxvY2sgaXMgb25seSBu
ZWNlc3NhcnkgaWYgdGhlIHJldHVybmVkIHN0YXRlIGlzIG1vZGlmaWVkIGFuZCBsYXRlciBwYXNz
ZWQKKyAgICAvLy8gdG8gW2BTZWxmOjp3cml0ZV9zdGF0ZWBdLiBJbiBjYXNlIG9mIGEgcmVhZC1v
bmx5IGFjY2VzcyBubyBsb2NrIGlzIG5lY2Vzc2FyeSwgYXMKKyAgICAvLy8gdGhlIHN0YXRlIGZp
bGUgaXMgYWx3YXlzIHJlcGxhY2VkIGF0b21pY2FsbHkuCisgICAgcHViIGZuIHJlYWRfc3RhdGUo
JnNlbGYpIC0+IFN0YXRlIHsKKyAgICAgICAgZm4gZG9fcmVhZF9zdGF0ZShwYXRoOiAmUGF0aCkg
LT4gUmVzdWx0PFN0YXRlLCBFcnJvcj4geworICAgICAgICAgICAgbWF0Y2ggc3RkOjpmczo6cmVh
ZChwYXRoKSB7CisgICAgICAgICAgICAgICAgT2soY29udGVudCkgPT4gc2VyZGVfanNvbjo6ZnJv
bV9zbGljZSgmY29udGVudCkubWFwX2Vycih8ZXJyfCBlcnIuaW50bygpKSwKKyAgICAgICAgICAg
ICAgICBFcnIoZXJyKSBpZiBlcnIua2luZCgpID09IEVycm9yS2luZDo6Tm90Rm91bmQgPT4gT2so
RGVmYXVsdDo6ZGVmYXVsdCgpKSwKKyAgICAgICAgICAgICAgICBFcnIoZXJyKSA9PiBFcnIoZXJy
LmludG8oKSksCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsZXQgcGF0aCA9
IHNlbGYuYmFzZV9wYXRoLmpvaW4oU1RBVEVfRklMRU5BTUUpOworICAgICAgICBkb19yZWFkX3N0
YXRlKCZwYXRoKS51bndyYXBfb3JfZWxzZSh8ZXJyfCB7CisgICAgICAgICAgICBsb2c6OmVycm9y
ISgiY291bGQgbm90IHJlYWQgc3RhdGUgZmlsZToge2Vycn0iKTsKKyAgICAgICAgICAgIERlZmF1
bHQ6OmRlZmF1bHQoKQorICAgICAgICB9KQorICAgIH0KKworICAgIC8vLyBXcml0ZSB0aGUgc3Rh
dGUgZmlsZS4KKyAgICAvLy8gVGhlIHRhc2sgYXJjaGl2ZSBzaG91bGQgYmUgbG9ja2VkIGZvciB3
cml0aW5nIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICAgIGZuIHdyaXRlX3N0YXRlKCZz
ZWxmLCBzdGF0ZTogU3RhdGUpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgbGV0IHBh
dGggPSBzZWxmLmJhc2VfcGF0aC5qb2luKFNUQVRFX0ZJTEVOQU1FKTsKKworICAgICAgICBsZXQg
ZGF0YSA9IHNlcmRlX2pzb246OnRvX3ZlY19wcmV0dHkoJnN0YXRlKT87CisKKyAgICAgICAgcHJv
eG1veF9zeXM6OmZzOjpyZXBsYWNlX2ZpbGUocGF0aCwgJmRhdGEsIHNlbGYuY3JlYXRlX29wdGlv
bnMsIHRydWUpPzsKKworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICAvLy8gUmV0dXJucyBh
IGxpc3Qgb2YgZXhpc3RpbmcgYXJjaGl2ZSBmaWxlcywgdG9nZXRoZXIgd2l0aCB0aGVpciByZXNw
ZWN0aXZlCisgICAgLy8vIGN1dC1vZmYgdGltZXN0YW1wLiBUaGUgcmVzdWx0IGlzIHNvcnRlZCBh
c2NlbmRpbmcgYnkgY3V0LW9mZiB0aW1lc3RhbXAgKG1vc3QgcmVjZW50IG9uZQorICAgIC8vLyBm
aXJzdCkuCisgICAgLy8vIFRoZSB0YXNrIGFyY2hpdmUgc2hvdWxkIGJlIGxvY2tlZCBmb3IgcmVh
ZGluZyB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgICBmbiBhcmNoaXZlX2ZpbGVzKCZz
ZWxmKSAtPiBSZXN1bHQ8VmVjPEFyY2hpdmVGaWxlPiwgRXJyb3I+IHsKKyAgICAgICAgbGV0IG11
dCBuYW1lcyA9IFZlYzo6bmV3KCk7CisKKyAgICAgICAgZm9yIGVudHJ5IGluIHN0ZDo6ZnM6OnJl
YWRfZGlyKCZzZWxmLmJhc2VfcGF0aCk/IHsKKyAgICAgICAgICAgIGxldCBlbnRyeSA9IGVudHJ5
PzsKKworICAgICAgICAgICAgaWYgbGV0IFNvbWUoZW5kdGltZSkgPSBlbnRyeQorICAgICAgICAg
ICAgICAgIC5wYXRoKCkKKyAgICAgICAgICAgICAgICAuZmlsZV9uYW1lKCkKKyAgICAgICAgICAg
ICAgICAuYW5kX3RoZW4ofHN8IHMudG9fc3RyKCkpCisgICAgICAgICAgICAgICAgLmFuZF90aGVu
KHxzfCBzLnN0cmlwX3ByZWZpeChBUkNISVZFX0ZJTEVOQU1FX1BSRUZJWCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbWF0Y2ggZW5kdGltZS5wYXJzZSgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgT2soc3RhcnR0aW1lKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
cy5wdXNoKEFyY2hpdmVGaWxlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHRp
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogZW50cnkucGF0aCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgRXJyKGVycikgPT4gbG9nOjplcnJvciEoCisgICAgICAgICAgICAgICAgICAg
ICAgICAiY291bGQgbm90IHBhcnNlIGFyY2hpdmUgdGltZXN0YW1wIGZvciBmaWxlIHt9OiB7ZXJy
fSIsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5wYXRoKCkuZGlzcGxheSgpCisgICAg
ICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgbmFtZXMuc29ydF9ieV9rZXkofGV8IC1lLnN0YXJ0dGltZSk7CisK
KyAgICAgICAgT2sobmFtZXMpCisgICAgfQorCisgICAgLy8vIE1lcmdlIGB0YXNrc2Agd2l0aCBh
biBleGlzdGluZyBhcmNoaXZlIGZpbGUuCisgICAgLy8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0
aGF0IGB0YXNrc2AgYW5kIHRoZSBwcmUtZXhpc3RpbmcgY29udGVudHMgb2YgdGhlIGFyY2hpdmUK
KyAgICAvLy8gZmlsZSBhcmUgYm90aCBzb3J0ZWQgZGVzY2VuZGluZyBieSBzdGFydGltZSAobW9z
dCByZWNlbnQgdGFza3MgY29tZSBmaXJzdCkuCisgICAgLy8vIFRoZSB0YXNrIGFyY2hpdmUgbXVz
dCBiZSBsb2NrZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICAgZm4gbWVyZ2Vfc2lu
Z2xlX2FyY2hpdmVfZmlsZSgKKyAgICAgICAgJnNlbGYsCisgICAgICAgIHRhc2tzOiBWZWM8VGFz
a0NhY2hlSXRlbT4sCisgICAgICAgIGZpbGU6ICZQYXRoLAorICAgICkgLT4gUmVzdWx0PCgpLCBF
cnJvcj4geworICAgICAgICBpZiB0YXNrcy5pc19lbXB0eSgpIHsKKyAgICAgICAgICAgIHJldHVy
biBPaygoKSk7CisgICAgICAgIH0KKworICAgICAgICBsZXQgKGZkLCBuZXdfcGF0aCkgPSBwcm94
bW94X3N5czo6ZnM6Om1ha2VfdG1wX2ZpbGUoZmlsZSwgc2VsZi5jcmVhdGVfb3B0aW9ucyk/Owor
ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IEJ1ZldyaXRlcjo6bmV3KGZkKTsKKworICAgICAgICBt
YXRjaCBGaWxlOjpvcGVuKGZpbGUpIHsKKyAgICAgICAgICAgIE9rKGZpbGUpID0+IHsKKyAgICAg
ICAgICAgICAgICBsZXQgYXJjaGl2ZV9yZWFkZXIgPSBCdWZSZWFkZXI6Om5ldyhmaWxlKTsKKyAg
ICAgICAgICAgICAgICBsZXQgYXJjaGl2ZV9pdGVyID0gQXJjaGl2ZUl0ZXJhdG9yOjpuZXcoYXJj
aGl2ZV9yZWFkZXIpCisgICAgICAgICAgICAgICAgICAgIC5mbGF0X21hcCh8aXRlbXwgbWF0Y2gg
aXRlbSB7CisgICAgICAgICAgICAgICAgICAgICAgICBPayhpdGVtKSA9PiBTb21lKGl0ZW0pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgRXJyKGVycikgPT4geworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvZzo6ZXJyb3IhKCJjb3VsZCBub3QgcmVhZCB0YXNrIGNhY2hlIGl0ZW0gd2hp
bGUgbWVyZ2luZzoge2Vycn0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lCisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pCisgICAgICAg
ICAgICAgICAgICAgIC5wZWVrYWJsZSgpOworICAgICAgICAgICAgICAgIGxldCB0YXNrX2l0ZXIg
PSB0YXNrcy5pbnRvX2l0ZXIoKS5wZWVrYWJsZSgpOworCisgICAgICAgICAgICAgICAgU2VsZjo6
d3JpdGVfdGFza3MoJm11dCB3cml0ZXIsIE1lcmdlVGFza0l0ZXJhdG9yOjpuZXcoYXJjaGl2ZV9p
dGVyLCB0YXNrX2l0ZXIpKT87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFcnIoZXJyKSBp
ZiBlcnIua2luZCgpID09IEVycm9yS2luZDo6Tm90Rm91bmQgPT4geworICAgICAgICAgICAgICAg
IFNlbGY6OndyaXRlX3Rhc2tzKCZtdXQgd3JpdGVyLCB0YXNrcy5pbnRvX2l0ZXIoKSk/OworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgRXJyKGVycikgPT4gcmV0dXJuIEVycihlcnIuaW50bygp
KSwKKyAgICAgICAgfQorCisgICAgICAgIGlmIGxldCBFcnIoZXJyKSA9IHdyaXRlci5mbHVzaCgp
IHsKKyAgICAgICAgICAgIGxvZzo6ZXJyb3IhKCJjb3VsZCBub3QgZmx1c2ggQnVmV3JpdGVyIGZv
ciB7ZmlsZTo/fToge2Vycn0iKTsKKyAgICAgICAgfQorICAgICAgICBkcm9wKHdyaXRlcik7CisK
KyAgICAgICAgaWYgbGV0IEVycihlcnIpID0gc3RkOjpmczo6cmVuYW1lKCZuZXdfcGF0aCwgZmls
ZSkud2l0aF9jb250ZXh0KHx8IHsKKyAgICAgICAgICAgIGZvcm1hdCEoCisgICAgICAgICAgICAg
ICAgImZhaWxlZCB0byByZXBsYWNlIHt9IHdpdGgge30iLAorICAgICAgICAgICAgICAgIGZpbGUu
ZGlzcGxheSgpLAorICAgICAgICAgICAgICAgIG5ld19wYXRoLmRpc3BsYXkoKQorICAgICAgICAg
ICAgKQorICAgICAgICB9KSB7CisgICAgICAgICAgICBpZiBsZXQgRXJyKGVycikgPSBzdGQ6OmZz
OjpyZW1vdmVfZmlsZSgmbmV3X3BhdGgpIHsKKyAgICAgICAgICAgICAgICBsb2c6OmVycm9yISgK
KyAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBjbGVhbiB1cCB0ZW1wb3JhcnkgZmlsZSB7
fToge2Vycn0iLAorICAgICAgICAgICAgICAgICAgICBuZXdfcGF0aC5kaXNwbGF5KCkKKyAgICAg
ICAgICAgICAgICApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gRXJyKGVy
cik7CisgICAgICAgIH0KKworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICAvLy8gV3JpdGUg
YW4gaXRlcmF0b3Igb2YgW2BUYXNrQ2FjaGVJdGVtYF0gdG8gYSBzb21ldGhpbmcgdGhhdCBpbXBs
ZW1lbnRzIFtgV3JpdGVgXS4KKyAgICAvLy8gVGhlIGluZGl2aWR1YWwgaXRlbXMgYXJlIGVuY29k
ZWQgYXMgSlNPTiBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCisgICAgLy8vIFRoZSB0YXNrIGFyY2hp
dmUgc2hvdWxkIGJlIGxvY2tlZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgICBmbiB3
cml0ZV90YXNrcygKKyAgICAgICAgd3JpdGVyOiAmbXV0IGltcGwgV3JpdGUsCisgICAgICAgIHRh
c2tzOiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSBUYXNrQ2FjaGVJdGVtPiwKKyAgICApIC0+IFJlc3Vs
dDwoKSwgRXJyb3I+IHsKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3MgeworICAgICAgICAgICAg
c2VyZGVfanNvbjo6dG9fd3JpdGVyKCZtdXQgKndyaXRlciwgJnRhc2spPzsKKyAgICAgICAgICAg
IHdyaXRlbG4hKHdyaXRlcik/OworICAgICAgICB9CisKKyAgICAgICAgT2soKCkpCisgICAgfQor
fQorCisvLy8gQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc29ydGluZyB0YXNrcy4KKy8vLyBUaGUg
dGFza3MgYXJlIGNvbXBhcmVkIGJhc2VkIG9uIHRoZSB0YXNrJ3Mgc3RhcnQgdGltZSwgZmFsbGlu
ZworLy8vIGJhY2sgdG8gdGhlIHRhc2sncyBVUElEIGFzIGEgc2Vjb25kYXJ5IGNyaXRlcmlvbiBp
biBjYXNlIHRoZQorLy8vIHN0YXJ0IHRpbWVzIGFyZSBlcXVhbC4KK3B1YiBmbiBjb21wYXJlX3Rh
c2tzKGE6ICZUYXNrQ2FjaGVJdGVtLCBiOiAmVGFza0NhY2hlSXRlbSkgLT4gT3JkZXJpbmcgewor
ICAgIGEuc3RhcnR0aW1lCisgICAgICAgIC5jbXAoJmIuc3RhcnR0aW1lKQorICAgICAgICAudGhl
bl93aXRoKHx8IGIudXBpZC50b19zdHJpbmcoKS5jbXAoJmEudXBpZC50b19zdHJpbmcoKSkpCit9
CisKKy8vLyBDb21wYXJpc29uIGZ1bmN0aW9uIGZvciBzb3J0aW5nIHRhc2tzLCByZXZlcnNlZAor
Ly8vIFRoZSB0YXNrcyBhcmUgY29tcGFyZWQgYmFzZWQgb24gdGhlIHRhc2sncyBzdGFydCB0aW1l
LCBmYWxsaW5nCisvLy8gYmFjayB0byB0aGUgdGFzaydzIFVQSUQgYXMgYSBzZWNvbmRhcnkgY3Jp
dGVyaW9uIGluIGNhc2UgdGhlCisvLy8gc3RhcnQgdGltZXMgYXJlIGVxdWFsLgorcHViIGZuIGNv
bXBhcmVfdGFza3NfcmV2ZXJzZShhOiAmVGFza0NhY2hlSXRlbSwgYjogJlRhc2tDYWNoZUl0ZW0p
IC0+IE9yZGVyaW5nIHsKKyAgICBjb21wYXJlX3Rhc2tzKGEsIGIpLnJldmVyc2UoKQorfQorCisv
Ly8gSXRlcmF0b3Igb3ZlciB0aGUgdGFzayBhcmNoaXZlLgorcHViIHN0cnVjdCBUYXNrQXJjaGl2
ZUl0ZXJhdG9yIHsKKyAgICAvLy8gQXJjaGl2ZSBmaWxlcyB0byByZWFkLgorICAgIGZpbGVzOiBC
b3g8ZHluIEl0ZXJhdG9yPEl0ZW0gPSBQYXRoQnVmPj4sCisgICAgLy8vIEFyY2hpdmUgaXRlcmF0
b3Igd2UgYXJlIGN1cnJlbnRseSB1c2luZywgaWYgYW55CisgICAgY3VycmVudDogT3B0aW9uPEFy
Y2hpdmVJdGVyYXRvcjxCdWZSZWFkZXI8RmlsZT4+PiwKKyAgICAvLy8gTG9jayBmb3IgdGhpcyBh
cmNoaXZlLgorICAgIGxvY2s6IFRhc2tDYWNoZUxvY2ssCit9CisKK2ltcGwgVGFza0FyY2hpdmVJ
dGVyYXRvciB7CisgICAgLy8vIENyZWF0ZSBhIG5ldyB0YXNrIGFyY2hpdmUgaXRlcmF0b3IuCisg
ICAgcHViIGZuIG5ldyhmaWxlczogQm94PGR5biBJdGVyYXRvcjxJdGVtID0gUGF0aEJ1Zj4+LCBs
b2NrOiBUYXNrQ2FjaGVMb2NrKSAtPiBTZWxmIHsKKyAgICAgICAgU2VsZiB7CisgICAgICAgICAg
ICBmaWxlcywKKyAgICAgICAgICAgIGN1cnJlbnQ6IE5vbmUsCisgICAgICAgICAgICBsb2NrLAor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8vIFJldHVybiB0aGUgdGFzayBhcmNoaXZlIGxvY2ss
IGNvbnN1bWluZyBgc2VsZmAuCisgICAgcHViIGZuIGludG9fbG9jayhzZWxmKSAtPiBUYXNrQ2Fj
aGVMb2NrIHsKKyAgICAgICAgc2VsZi5sb2NrCisgICAgfQorfQorCitpbXBsIEl0ZXJhdG9yIGZv
ciAmbXV0IFRhc2tBcmNoaXZlSXRlcmF0b3IgeworICAgIHR5cGUgSXRlbSA9IFJlc3VsdDxUYXNr
Q2FjaGVJdGVtLCBFcnJvcj47CisKKyAgICBmbiBuZXh0KCZtdXQgc2VsZikgLT4gT3B0aW9uPFNl
bGY6Okl0ZW0+IHsKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBtYXRjaCAmbXV0IHNlbGYu
Y3VycmVudCB7CisgICAgICAgICAgICAgICAgU29tZShjdXJyZW50KSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgIGxldCBuZXh0ID0gY3VycmVudC5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIG5leHQuaXNfc29tZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5jdXJyZW50ID0gTm9uZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBOb25lID0+ICdpbm5lcjogbG9vcCB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFJldHVybnMgYE5vbmVgIGlmIG5vIG1vcmUgZmlsZXMgYXJlIGF2YWlsYWJs
ZSwgc3RvcHBpbmcgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dF9maWxl
ID0gc2VsZi5maWxlcy5uZXh0KCk/OworCisgICAgICAgICAgICAgICAgICAgIG1hdGNoIEZpbGU6
Om9wZW4oJm5leHRfZmlsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgT2soZmlsZSkgPT4g
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcmNoaXZlX3JlYWRlciA9IEJ1ZlJl
YWRlcjo6bmV3KGZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcmNoaXZl
X2l0ZXIgPSBBcmNoaXZlSXRlcmF0b3I6Om5ldyhhcmNoaXZlX3JlYWRlcik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gU29tZShhcmNoaXZlX2l0ZXIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICdpbm5lcjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIEVycihlcnIpID0+IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2c6OmVycm9yISgiY291bGQgbm90IG9wZW4ge25leHRfZmls
ZTo/fSB3aGlsZSBpdGVyYXRpb24gb3ZlciB0YXNrIGFyY2hpdmUgZmlsZXMsIHNraXBwaW5nOiB7
ZXJyfSIpCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
CisvLy8gQXJjaGl2ZSBmaWxlLgorI1tkZXJpdmUoQ2xvbmUsIERlYnVnKV0KK3N0cnVjdCBBcmNo
aXZlRmlsZSB7CisgICAgLy8vIFRoZSBwYXRoIHRvIHRoZSBhcmNoaXZlIGZpbGUuCisgICAgZmls
ZTogUGF0aEJ1ZiwKKyAgICAvLy8gVGhlIGFyY2hpdmUncyBsb3dlc3QgcGVybWl0dGVkIHN0YXJ0
dGltZSAoc2Vjb25kcyBzaW5jZSBVTklYIGVwb2NoKS4KKyAgICBzdGFydHRpbWU6IGk2NCwKK30K
KworLy8vIEl0ZXJhdG9yIHRoYXQgbWVyZ2VzIHR3byBfc29ydGVkXyBgSXRlcmF0b3I8SXRlbSA9
IFRhc2tDYWNoZUl0ZW0+YCwgcmV0dXJuaW5nIHRoZSBpdGVtcworLy8vIGZyb20gYm90aCBpdGVy
YXRvcnMgc29ydGVkLgorLy8vIFRoZSB0d28gaXRlcmF0b3JzIGFyZSBleHBlY3RlZCB0byBiZSBz
b3J0ZWQgZGVzY2VuZGluZ2x5IGJhc2VkIG9uIHRoZSB0YXNrJ3Mgc3RhcnR0aW1lIGFuZAorLy8v
IGFzY2VuZGluZ2x5IGJhc2VkIG9uIHRoZSB0YXNrJ3MgVVBJRCdzIHN0cmluZyByZXByZXNlbnRh
dGlvbi4gVGhpcyBjYW4gYmUKKy8vLyBhY2hpZXZlZCBieSB1c2luZyB0aGUgW2Bjb21wYXJlX3Rh
c2tzX3JldmVyc2VgXSBmdW5jdGlvbiB3aGVuIHNvcnRpbmcgYW4gYXJyYXkgb2YgdGFza3MuCitw
dWIgc3RydWN0IE1lcmdlVGFza0l0ZXJhdG9yPFQ6IEl0ZXJhdG9yPEl0ZW0gPSBUYXNrQ2FjaGVJ
dGVtPiwgVTogSXRlcmF0b3I8SXRlbSA9IFRhc2tDYWNoZUl0ZW0+PiB7CisgICAgbGVmdDogUGVl
a2FibGU8VD4sCisgICAgcmlnaHQ6IFBlZWthYmxlPFU+LAorfQorCitpbXBsPFQsIFU+IE1lcmdl
VGFza0l0ZXJhdG9yPFQsIFU+Cit3aGVyZQorICAgIFQ6IEl0ZXJhdG9yPEl0ZW0gPSBUYXNrQ2Fj
aGVJdGVtPiwKKyAgICBVOiBJdGVyYXRvcjxJdGVtID0gVGFza0NhY2hlSXRlbT4sCit7CisgICAg
Ly8vIENyZWF0ZSBhIG5ldyBtZXJnaW5nIGl0ZXJhdG9yLgorICAgIHB1YiBmbiBuZXcobGVmdDog
UGVla2FibGU8VD4sIHJpZ2h0OiBQZWVrYWJsZTxVPikgLT4gU2VsZiB7CisgICAgICAgIFNlbGYg
eyBsZWZ0LCByaWdodCB9CisgICAgfQorfQorCitpbXBsPFQsIFU+IEl0ZXJhdG9yIGZvciBNZXJn
ZVRhc2tJdGVyYXRvcjxULCBVPgord2hlcmUKKyAgICBUOiBJdGVyYXRvcjxJdGVtID0gVGFza0Nh
Y2hlSXRlbT4sCisgICAgVTogSXRlcmF0b3I8SXRlbSA9IFRhc2tDYWNoZUl0ZW0+LAoreworICAg
IHR5cGUgSXRlbSA9IFQ6Okl0ZW07CisKKyAgICBmbiBuZXh0KCZtdXQgc2VsZikgLT4gT3B0aW9u
PFQ6Okl0ZW0+IHsKKyAgICAgICAgbGV0IG9yZGVyID0gbWF0Y2ggKHNlbGYubGVmdC5wZWVrKCks
IHNlbGYucmlnaHQucGVlaygpKSB7CisgICAgICAgICAgICAoU29tZShsKSwgU29tZShyKSkgPT4g
U29tZShjb21wYXJlX3Rhc2tzKGwsIHIpKSwKKyAgICAgICAgICAgIChTb21lKF8pLCBOb25lKSA9
PiBTb21lKE9yZGVyaW5nOjpHcmVhdGVyKSwKKyAgICAgICAgICAgIChOb25lLCBTb21lKF8pKSA9
PiBTb21lKE9yZGVyaW5nOjpMZXNzKSwKKyAgICAgICAgICAgIChOb25lLCBOb25lKSA9PiBOb25l
LAorICAgICAgICB9OworCisgICAgICAgIG1hdGNoIG9yZGVyIHsKKyAgICAgICAgICAgIFNvbWUo
T3JkZXJpbmc6OkdyZWF0ZXIpID0+IHNlbGYubGVmdC5uZXh0KCksCisgICAgICAgICAgICBTb21l
KE9yZGVyaW5nOjpMZXNzKSA9PiBzZWxmLnJpZ2h0Lm5leHQoKSwKKyAgICAgICAgICAgIFNvbWUo
T3JkZXJpbmc6OkVxdWFsKSA9PiB7CisgICAgICAgICAgICAgICAgLy8gRGVkdXAgYnkgY29uc3Vt
aW5nIHRoZSBvdGhlciBpdGVyYXRvciBhcyB3ZWxsCisgICAgICAgICAgICAgICAgbGV0IF8gPSBz
ZWxmLnJpZ2h0Lm5leHQoKTsKKyAgICAgICAgICAgICAgICBzZWxmLmxlZnQubmV4dCgpCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBOb25lID0+IE5vbmUsCisgICAgICAgIH0KKyAgICB9Cit9
CisKKy8vLyBJdGVyYXRvciBmb3IgYSBzaW5nbGUgdGFzayBhcmNoaXZlIGZpbGUuCisvLy8KKy8v
LyBUaGlzIGl0ZXJhdG9yIGltcGxlbWVudHMgYEl0ZXJhdG9yPEl0ZW0gPSBSZXN1bHQ8VGFza0Nh
Y2hlSXRlbSwgRXJyb3I+YC4gV2hlbiBpdGVyYXRpbmcsCisvLy8gdGFza3MgYXJlIHJlYWQgbGlu
ZSBieSBsaW5lLCB3aXRob3V0IGxlYWRpbmcgdGhlIGVudGlyZSBhcmNoaXZlIGZpbGUgaW50byBt
ZW1vcnkuCitwdWIgc3RydWN0IEFyY2hpdmVJdGVyYXRvcjxUPiB7CisgICAgaXRlcjogTGluZXM8
VD4sCit9CisKK2ltcGw8VDogQnVmUmVhZD4gQXJjaGl2ZUl0ZXJhdG9yPFQ+IHsKKyAgICAvLy8g
Q3JlYXRlIGEgbmV3IGl0ZXJhdG9yLgorICAgIHB1YiBmbiBuZXcoZmlsZTogVCkgLT4gU2VsZiB7
CisgICAgICAgIGxldCByZWFkZXIgPSBmaWxlLmxpbmVzKCk7CisKKyAgICAgICAgU2VsZiB7IGl0
ZXI6IHJlYWRlciB9CisgICAgfQorfQorCitpbXBsPFQ6IEJ1ZlJlYWQ+IEl0ZXJhdG9yIGZvciBB
cmNoaXZlSXRlcmF0b3I8VD4geworICAgIHR5cGUgSXRlbSA9IFJlc3VsdDxUYXNrQ2FjaGVJdGVt
LCBFcnJvcj47CisKKyAgICBmbiBuZXh0KCZtdXQgc2VsZikgLT4gT3B0aW9uPFNlbGY6Okl0ZW0+
IHsKKyAgICAgICAgc2VsZi5pdGVyLm5leHQoKS5tYXAofHJlc3VsdHwgeworICAgICAgICAgICAg
cmVzdWx0CisgICAgICAgICAgICAgICAgLmFuZF90aGVuKHxsaW5lfCBPayhzZXJkZV9qc29uOjpm
cm9tX3N0cigmbGluZSk/KSkKKyAgICAgICAgICAgICAgICAubWFwX2VycihJbnRvOjppbnRvKQor
ICAgICAgICB9KQorICAgIH0KK30KKworI1tjZmcodGVzdCldCittb2QgdGVzdHMgeworICAgIHVz
ZSBzdGQ6OmlvOjpDdXJzb3I7CisKKyAgICB1c2UgY3JhdGU6OnRlc3Rfc3VwcG9ydDo6dGVtcDo6
TmFtZWRUZW1wRGlyOworCisgICAgdXNlIHN1cGVyOjoqOworCisgICAgI1t0ZXN0XQorICAgIGZu
IGFyY2hpdmVfaXRlcmF0b3IoKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIGxldCBm
aWxlID0gciMiCisgICAgICAgICAgICB7InVwaWQiOiJwdmUtcmVtb3RlIVVQSUQ6cHZlOjAwMDM5
RTREOjAwMjYzOEI4OjY3QjRBOUQxOnN0b3BhbGw6OnJvb3RAcGFtOiIsInN0YXR1cyI6Ik9LIiwi
ZW5kdGltZSI6MTIzNDUsICJzdGFydHRpbWUiOiAxMjM0fQorICAgICAgICAgICAgeyJ1cGlkIjoi
cGJzLXJlbW90ZSFVUElEOnBiczowMDAwMDJCMjowMDAwMDE1ODowMDAwMDAwMDo2NzREODI4Qzps
b2dyb3RhdGU6OnJvb3RAcGFtOiIsInN0YXR1cyI6Ik9LIiwiZW5kdGltZSI6MTIzNDUsICJzdGFy
dHRpbWUiOiAxMjM0fQorICAgICAgICAgICAgaW52YWxpZCIjCisgICAgICAgICAgICAudHJpbV9z
dGFydCgpOworCisgICAgICAgIGxldCBjdXJzb3IgPSBDdXJzb3I6Om5ldyhmaWxlLmFzX2J5dGVz
KCkpOworICAgICAgICBsZXQgbXV0IGl0ZXIgPSBBcmNoaXZlSXRlcmF0b3I6Om5ldyhjdXJzb3Ip
OworCisgICAgICAgIGFzc2VydF9lcSEoaXRlci5uZXh0KCkudW53cmFwKCkudW53cmFwKCkudXBp
ZC5yZW1vdGUoKSwgInB2ZS1yZW1vdGUiKTsKKyAgICAgICAgYXNzZXJ0X2VxIShpdGVyLm5leHQo
KS51bndyYXAoKS51bndyYXAoKS51cGlkLnJlbW90ZSgpLCAicGJzLXJlbW90ZSIpOworICAgICAg
ICBhc3NlcnQhKGl0ZXIubmV4dCgpLnVud3JhcCgpLmlzX2VycigpKTsKKyAgICAgICAgYXNzZXJ0
IShpdGVyLm5leHQoKS5pc19ub25lKCkpOworCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAg
IGZuIHRhc2soc3RhcnR0aW1lOiBpNjQsIGVuZGVkOiBib29sKSAtPiBUYXNrQ2FjaGVJdGVtIHsK
KyAgICAgICAgbGV0IChzdGF0dXMsIGVuZHRpbWUpID0gaWYgZW5kZWQgeworICAgICAgICAgICAg
KFNvbWUoIk9LIi5pbnRvKCkpLCBTb21lKHN0YXJ0dGltZSArIDEwKSkKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIChOb25lLCBOb25lKQorICAgICAgICB9OworCisgICAgICAgIFRhc2tD
YWNoZUl0ZW0geworICAgICAgICAgICAgdXBpZDogZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAi
cHZlLXJlbW90ZSFVUElEOnB2ZTowMDAzOUU0RDowMDI2MzhCODp7c3RhcnR0aW1lOjA4WH06c3Rv
cGFsbDo6cm9vdEBwYW06IgorICAgICAgICAgICAgKQorICAgICAgICAgICAgLnBhcnNlKCkKKyAg
ICAgICAgICAgIC51bndyYXAoKSwKKyAgICAgICAgICAgIHN0YXJ0dGltZSwKKyAgICAgICAgICAg
IHN0YXR1cywKKyAgICAgICAgICAgIGVuZHRpbWUsCisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
biBhc3NlcnRfc3RhcnR0aW1lcyhjYWNoZTogJlRhc2tDYWNoZSwgc3RhcnR0aW1lczogJltpNjRd
KSB7CisgICAgICAgIGxldCB0YXNrczogVmVjPGk2ND4gPSBjYWNoZQorICAgICAgICAgICAgLmdl
dF90YXNrcyhHZXRUYXNrczo6QWxsKQorICAgICAgICAgICAgLnVud3JhcCgpCisgICAgICAgICAg
ICAubWFwKHx0YXNrfCB0YXNrLnVud3JhcCgpLnN0YXJ0dGltZSkKKyAgICAgICAgICAgIC5jb2xs
ZWN0KCk7CisKKyAgICAgICAgYXNzZXJ0X2VxISgmdGFza3MsIHN0YXJ0dGltZXMpOworICAgIH0K
KworICAgIGZuIGFkZF90YXNrcyhjYWNoZTogJlRhc2tDYWNoZSwgdGFza3M6IFZlYzxUYXNrQ2Fj
aGVJdGVtPikgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgICAgICBsZXQgcGFyYW0gPSBBZGRU
YXNrcyB7CisgICAgICAgICAgICB1cGRhdGVfbW9zdF9yZWNlbnRfYXJjaGl2ZV90aW1lc3RhbXA6
IHRydWUsCisgICAgICAgICAgICB0YXNrcywKKyAgICAgICAgfTsKKyAgICAgICAgbGV0IG11dCBh
ID0gSGFzaE1hcDo6bmV3KCk7CisgICAgICAgIGEuaW5zZXJ0KCJwdmUtcmVtb3RlIi5pbnRvKCks
IHBhcmFtKTsKKworICAgICAgICBjYWNoZS5hZGRfdGFza3MoYSkKKyAgICB9CisKKyAgICAjW3Rl
c3RdCisgICAgZm4gdGVzdF9hZGRfdGFza3MoKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAg
ICAgIGxldCB0bXBfZGlyID0gTmFtZWRUZW1wRGlyOjpuZXcoKT87CisgICAgICAgIGxldCBjYWNo
ZSA9IFRhc2tDYWNoZTo6bmV3KHRtcF9kaXIucGF0aCgpLCBDcmVhdGVPcHRpb25zOjpuZXcoKSku
dW53cmFwKCk7CisKKyAgICAgICAgY2FjaGUubmV3X2ZpbGUoMTAwMCk/OworICAgICAgICBhc3Nl
cnRfZXEhKGNhY2hlLmFyY2hpdmVfZmlsZXMoKT8ubGVuKCksIDEpOworCisgICAgICAgIGFkZF90
YXNrcygmY2FjaGUsIHZlYyFbdGFzaygxMDAwLCB0cnVlKSwgdGFzaygxMDAxLCB0cnVlKV0pPzsK
KworICAgICAgICBjYWNoZS5yb3RhdGUoMTUwMCwgMCwgMyk/OworICAgICAgICBhc3NlcnRfZXEh
KGNhY2hlLmFyY2hpdmVfZmlsZXMoKT8ubGVuKCksIDIpOworCisgICAgICAgIGFkZF90YXNrcygm
Y2FjaGUsIHZlYyFbdGFzaygxNTAwLCB0cnVlKSwgdGFzaygxNTAxLCB0cnVlKV0pPzsKKyAgICAg
ICAgYWRkX3Rhc2tzKCZjYWNoZSwgdmVjIVt0YXNrKDEyMDAsIHRydWUpLCB0YXNrKDEzMDAsIHRy
dWUpXSk/OworCisgICAgICAgIGNhY2hlLnJvdGF0ZSgyMDAwLCAwLCAzKT87CisgICAgICAgIGFz
c2VydF9lcSEoY2FjaGUuYXJjaGl2ZV9maWxlcygpPy5sZW4oKSwgMyk7CisKKyAgICAgICAgYWRk
X3Rhc2tzKCZjYWNoZSwgdmVjIVt0YXNrKDIwMDAsIHRydWUpXSk/OworICAgICAgICBhZGRfdGFz
a3MoJmNhY2hlLCB2ZWMhW3Rhc2soMTUwMiwgdHJ1ZSldKT87CisgICAgICAgIGFkZF90YXNrcygm
Y2FjaGUsIHZlYyFbdGFzaygxMDAyLCB0cnVlKV0pPzsKKworICAgICAgICAvLyBUaGVzZSBhcmUg
YmVmb3JlIHRoZSBjdXQtb2ZmIG9mIDEwMDAsIHNvIHRoZXkgd2lsbCBiZSBkaXNjYXJkZWQuCisg
ICAgICAgIGFkZF90YXNrcygmY2FjaGUsIHZlYyFbdGFzayg4MDAsIHRydWUpLCB0YXNrKDkwMCwg
dHJ1ZSldKT87CisKKyAgICAgICAgLy8gVGhpcyBvbmUgc2hvdWxkIGJlIGRlZHVwZWQKKyAgICAg
ICAgYWRkX3Rhc2tzKCZjYWNoZSwgdmVjIVt0YXNrKDEwMDAsIHRydWUpXSk/OworCisgICAgICAg
IGFzc2VydF9zdGFydHRpbWVzKAorICAgICAgICAgICAgJmNhY2hlLAorICAgICAgICAgICAgJlsy
MDAwLCAxNTAyLCAxNTAxLCAxNTAwLCAxMzAwLCAxMjAwLCAxMDAyLCAxMDAxLCAxMDAwXSwKKyAg
ICAgICAgKTsKKworICAgICAgICBjYWNoZS5yb3RhdGUoMjUwMCwgMCwgMyk/OworCisgICAgICAg
IGFzc2VydF9lcSEoY2FjaGUuYXJjaGl2ZV9maWxlcygpPy5sZW4oKSwgMyk7CisKKyAgICAgICAg
YXNzZXJ0X3N0YXJ0dGltZXMoJmNhY2hlLCAmWzIwMDAsIDE1MDIsIDE1MDEsIDE1MDBdKTsKKwor
ICAgICAgICBjYWNoZS5yb3RhdGUoMzAwMCwgMCwgMyk/OworICAgICAgICBhc3NlcnRfZXEhKGNh
Y2hlLmFyY2hpdmVfZmlsZXMoKT8ubGVuKCksIDMpOworCisgICAgICAgIGFzc2VydF9zdGFydHRp
bWVzKCZjYWNoZSwgJlsyMDAwXSk7CisKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgI1t0
ZXN0XQorICAgIGZuIHRlc3RfYWN0aXZlX3Rhc2tzX2FyZV9taWdyYXRlZF90b19hcmNoaXZlKCkg
LT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgICAgICBsZXQgdG1wX2RpciA9IE5hbWVkVGVtcERp
cjo6bmV3KCk/OworICAgICAgICBsZXQgY2FjaGUgPSBUYXNrQ2FjaGU6Om5ldyh0bXBfZGlyLnBh
dGgoKSwgQ3JlYXRlT3B0aW9uczo6bmV3KCkpLnVud3JhcCgpOworCisgICAgICAgIGNhY2hlLm5l
d19maWxlKDEwMDApPzsKKyAgICAgICAgYWRkX3Rhc2tzKCZjYWNoZSwgdmVjIVt0YXNrKDEwMDAs
IGZhbHNlKSwgdGFzaygxMDAxLCBmYWxzZSldKT87CisgICAgICAgIGFzc2VydF9lcSEoY2FjaGUu
Z2V0X3Rhc2tzKEdldFRhc2tzOjpBY3RpdmUpPy5jb3VudCgpLCAyKTsKKworICAgICAgICBsZXQg
c3RhdGUgPSBjYWNoZS5yZWFkX3N0YXRlKCk7CisgICAgICAgIGFzc2VydF9lcSEoKnN0YXRlLm9s
ZGVzdF9hY3RpdmVfdGFzay5nZXQoInB2ZS1yZW1vdGUiKS51bndyYXAoKSwgMTAwMCk7CisKKyAg
ICAgICAgYWRkX3Rhc2tzKCZjYWNoZSwgdmVjIVt0YXNrKDEwMDAsIHRydWUpLCB0YXNrKDEwMDEs
IHRydWUpXSk/OworCisgICAgICAgIGFzc2VydF9zdGFydHRpbWVzKCZjYWNoZSwgJlsxMDAxLCAx
MDAwXSk7CisKKyAgICAgICAgYXNzZXJ0X2VxIShjYWNoZS5nZXRfdGFza3MoR2V0VGFza3M6OkFj
dGl2ZSk/LmNvdW50KCksIDApOworCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgICNbdGVz
dF0KKyAgICBmbiB0ZXN0X2luaXQoKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIGxl
dCB0bXBfZGlyID0gTmFtZWRUZW1wRGlyOjpuZXcoKT87CisgICAgICAgIGxldCBjYWNoZSA9IFRh
c2tDYWNoZTo6bmV3KHRtcF9kaXIucGF0aCgpLCBDcmVhdGVPcHRpb25zOjpuZXcoKSkudW53cmFw
KCk7CisKKyAgICAgICAgY2FjaGUuaW5pdCgxMDAwLCAzLCAxMDApPzsKKyAgICAgICAgYXNzZXJ0
X2VxIShjYWNoZS5hcmNoaXZlX2ZpbGVzKCk/LmxlbigpLCAzKTsKKworICAgICAgICBhZGRfdGFz
a3MoCisgICAgICAgICAgICAmY2FjaGUsCisgICAgICAgICAgICB2ZWMhWworICAgICAgICAgICAg
ICAgIHRhc2soMTA1MCwgdHJ1ZSksCisgICAgICAgICAgICAgICAgdGFzayg5NTAsIHRydWUpLAor
ICAgICAgICAgICAgICAgIHRhc2soODUwLCB0cnVlKSwKKyAgICAgICAgICAgICAgICB0YXNrKDc1
MCwgdHJ1ZSksIC8vIFRoaXMgb25lIGlzIGRpc2NhcmRlZAorICAgICAgICAgICAgXSwKKyAgICAg
ICAgKT87CisKKyAgICAgICAgYXNzZXJ0X2VxIShjYWNoZS5nZXRfdGFza3MoR2V0VGFza3M6OkFy
Y2hpdmVkKT8uY291bnQoKSwgMyk7CisKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgI1t0
ZXN0XQorICAgIGZuIHRlc3RfdHJhY2tpbmdfdGFza3MoKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7
CisgICAgICAgIGxldCB0bXBfZGlyID0gTmFtZWRUZW1wRGlyOjpuZXcoKT87CisgICAgICAgIGxl
dCBjYWNoZSA9IFRhc2tDYWNoZTo6bmV3KHRtcF9kaXIucGF0aCgpLCBDcmVhdGVPcHRpb25zOjpu
ZXcoKSkudW53cmFwKCk7CisKKyAgICAgICAgY2FjaGUuaW5pdCgxMDAwLCAzLCAxMDApPzsKKwor
ICAgICAgICBjYWNoZS5hZGRfdHJhY2tlZF90YXNrKHRhc2soMTA1MCwgZmFsc2UpKT87CisKKyAg
ICAgICAgYXNzZXJ0X2VxIShjYWNoZS5nZXRfdGFza3MoR2V0VGFza3M6OkFjdGl2ZSk/LmNvdW50
KCksIDEpOworICAgICAgICBjYWNoZS5hZGRfdHJhY2tlZF90YXNrKHRhc2soMTA2MCwgZmFsc2Up
KT87CisgICAgICAgIGFzc2VydF9lcSEoY2FjaGUuZ2V0X3Rhc2tzKEdldFRhc2tzOjpBY3RpdmUp
Py5jb3VudCgpLCAyKTsKKworICAgICAgICBsZXQgc3RhdGUgPSBjYWNoZS5yZWFkX3N0YXRlKCk7
CisgICAgICAgIGFzc2VydF9lcSEoc3RhdGUudHJhY2tlZF90YXNrcy5nZXQoInB2ZS1yZW1vdGUi
KS51bndyYXAoKS5sZW4oKSwgMik7CisgICAgICAgIGFzc2VydF9lcSEoKnN0YXRlLm9sZGVzdF9h
Y3RpdmVfdGFzay5nZXQoInB2ZS1yZW1vdGUiKS51bndyYXAoKSwgMTA1MCk7CisKKyAgICAgICAg
Ly8gTWFyayBmaXJzdCB0YXNrIGFzIGZpbmlzaGVkCisgICAgICAgIGFkZF90YXNrcygmY2FjaGUs
IHZlYyFbdGFzaygxMDUwLCB0cnVlKV0pPzsKKworICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmdl
dF90YXNrcyhHZXRUYXNrczo6QWN0aXZlKT8uY291bnQoKSwgMSk7CisgICAgICAgIGFzc2VydF9l
cSEoY2FjaGUuZ2V0X3Rhc2tzKEdldFRhc2tzOjpBcmNoaXZlZCk/LmNvdW50KCksIDEpOworCisg
ICAgICAgIC8vIE1hcmsgc2Vjb25kIHRhc2sgYXMgZmluaXNoZWQKKyAgICAgICAgYWRkX3Rhc2tz
KCZjYWNoZSwgdmVjIVt0YXNrKDEwNjAsIHRydWUpXSk/OworCisgICAgICAgIGFzc2VydF9lcSEo
Y2FjaGUuZ2V0X3Rhc2tzKEdldFRhc2tzOjpBY3RpdmUpPy5jb3VudCgpLCAwKTsKKyAgICAgICAg
YXNzZXJ0X2VxIShjYWNoZS5nZXRfdGFza3MoR2V0VGFza3M6OkFyY2hpdmVkKT8uY291bnQoKSwg
Mik7CisKKyAgICAgICAgT2soKCkpCisgICAgfQorfQotLSAKMi4zOS41CgoKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnBkbS1kZXZlbCBtYWlsaW5nIGxp
c3QKcGRtLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20v
Y2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3BkbS1kZXZlbAo=