From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pbs-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 1441C1FF16F
	for <inbox@lore.proxmox.com>; Tue, 15 Apr 2025 15:14:45 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id CB18B84BD;
	Tue, 15 Apr 2025 15:14:43 +0200 (CEST)
Date: Tue, 15 Apr 2025 15:14:06 +0200
From: Fabian =?iso-8859-1?q?Gr=FCnbichler?= <f.gruenbichler@proxmox.com>
To: Christian Ebner <c.ebner@proxmox.com>,
 Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com>
References: <20250415105416.215805-1-c.ebner@proxmox.com>
 <1744715646.ixpklno696.astroid@yuna.none>
 <574477eb-b29a-44d3-91de-e69b69c20607@proxmox.com>
In-Reply-To: <574477eb-b29a-44d3-91de-e69b69c20607@proxmox.com>
MIME-Version: 1.0
User-Agent: astroid/0.16.0 (https://github.com/astroidmail/astroid)
Message-Id: <1744722423.8wkc6bykj9.astroid@yuna.none>
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.045 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DMARC_MISSING             0.1 Missing DMARC policy
 KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment
 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_PASS               -0.001 SPF: sender matches SPF record
 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See
 http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more
 information. [datastore.rs]
Subject: Re: [pbs-devel] [PATCH v2 proxmox-backup] garbage collection: fix
 rare race in chunk marking phase
X-BeenThere: pbs-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox Backup Server development discussion
 <pbs-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, 
 <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/>
List-Post: <mailto:pbs-devel@lists.proxmox.com>
List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, 
 <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox Backup Server development discussion
 <pbs-devel@lists.proxmox.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: pbs-devel-bounces@lists.proxmox.com
Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com>

T24gQXByaWwgMTUsIDIwMjUgMjo1MCBwbSwgQ2hyaXN0aWFuIEVibmVyIHdyb3RlOgo+IE9uIDQv
MTUvMjUgMTM6NDIsIEZhYmlhbiBHcsO8bmJpY2hsZXIgd3JvdGU6Cj4+IE9uIEFwcmlsIDE1LCAy
MDI1IDEyOjU0IHBtLCBDaHJpc3RpYW4gRWJuZXIgd3JvdGU6Cj4+PiBEdXJpbmcgcGhhc2UgMSBv
ZiBnYXJiYWdlIGNvbGxlY3Rpb24gcmVmZXJlbmNlZCBjaHVua3MgYXJlIG1hcmtlZCBhcwo+Pj4g
aW4gdXNlIGJ5IGl0ZXJhdGluZyBvdmVyIGFsbCBpbmRleCBmaWxlcyBhbmQgdXBkYXRpbmcgdGhl
IGF0aW1lIG9uCj4+PiB0aGUgY2h1bmtzIHJlZmVyZW5jZWQgYnkgdGhlc2UuCj4+Pgo+Pj4gSW4g
YW4gZWRnZSBjYXNlIGZvciBsb25nIHJ1bm5pbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIGpvYnMsIHdo
ZXJlIGEKPj4+IG5ld2x5IGFkZGVkIHNuYXBzaG90IChjcmVhdGVkIGFmdGVyIHRoZSBzdGFydCBv
ZiBHQykgcmV1c2VkIGtub3duCj4+PiBjaHVua3MgZnJvbSBhIHByZXZpb3VzIHNuYXBzaG90LCBi
dXQgdGhlIHByZXZpb3VzIHNuYXBzaG90IGluZGV4Cj4+PiByZWZlcmVuY2luZyB0aGVtIGRpc2Fw
cGVhcmVkIGJlZm9yZSB0aGUgbWFya2luZyBwaGFzZSBjb3VsZCByZWFjaAo+Pj4gdGhhdCBpbmRl
eCAoZS5nLiBwcnVuZWQgYmVjYXVzZSBvbmx5IDEgc25hcHNob3QgdG8gYmUga2VwdCBieQo+Pj4g
cmV0ZW50aW9uIHNldHRpbmcpLCBrbm93biBjaHVua3MgZnJvbSB0aGF0IHByZXZpb3VzIGluZGV4
IGZpbGUgbWlnaHQKPj4+IG5vdCBiZSBtYXJrZWQgKGdpdmVuIHRoYXQgYnkgbm9uZSBvZiB0aGUg
b3RoZXIgaW5kZXggZmlsZXMgaXQgd2FzCj4+PiBtYXJrZWQpLgo+Pj4KPj4+IFNpbmNlIGNvbW1p
dCA3NDM2MWRhOCAoImdhcmJhZ2UgY29sbGVjdGlvbjogZ2VuZXJhdGUgaW5kZXggZmlsZSBsaXN0
Cj4+PiB2aWEgZGF0YXN0b3JlIGl0ZXJhdG9ycyIpIHRoaXMgaXMgZXZlbiBsZXNzIGxpa2VseSBh
cyBub3cgdGhlCj4+PiBpdGVyYXRpb24gcmVhZHMgYWxzbyBpbmRleCBmaWxlcyBhZGRlZCBkdXJp
bmcgcGhhc2UgMSwgYW5kCj4+PiB0aGVyZWZvcmUgZWl0aGVyIHRoZSBuZXcgb3IgdGhlIHByZXZp
b3VzIGluZGV4IGZpbGUgd2lsbCBhY2NvdW50IGZvcgo+Pj4gdGhlc2UgY2h1bmtzICh0aGUgcHJl
dmlvdXMgYmFja3VwIHNuYXBzaG90IGNhbiBvbmx5IGJlIHBydW5kZWQgYWZ0ZXIKPj4+IHRoZSBu
ZXcgb25lIGZpbmlzaGVkLCBzaW5jZSBsb2NrZWQpLiBUaGVyZSByZW1haW5zIGhvd2V2ZXIgYSBz
bWFsbAo+Pj4gcmFjZSB3aW5kb3cgYmV0d2VlbiB0aGUgcmVhZGluZyBvZiB0aGUgc25hcHNob3Rz
IGluIHRoZSBiYWNrdXAgZ3JvdXAKPj4+IGFuZCB0aGUgcmVhZGluZyBvZiB0aGUgYWN0dWFsIGlu
ZGV4IGZpbGVzIGZvciBtYXJraW5nLgo+Pj4KPj4+IEZpeCB0aGlzIHJhY2UgYnk6Cj4+PiAxLiBD
aGVja2luZyBpZiB0aGUgbGFzdCBzbmFwc2hvdCBvZiBhIGdyb3VwIGRpc2FwcGVhcmVkIGFuZCBp
ZiBzbwo+Pj4gMi4gZ2VuZXJhdGUgdGhlIGxpc3QgYWdhaW4sIGxvb2tpbmcgZm9yIG5ldyBpbmRl
eCBmaWxlcyBwcmV2aW91c2x5Cj4+PiAgICAgbm90IGFjY291bnRlZCBmb3IKPj4+IDMuIFRvIGF2
b2lkIHBvc3NpYmxlIGVuZGxlc3MgbG9vcGluZywgbG9jayB0aGUgZ3JvdXAgaWYgdGhlIHNuYXBz
aG90Cj4+PiAgICAgbGlzdCBjaGFuZ2VkIGV2ZW4gYWZ0ZXIgdGhlIDEwdGggdGltZSAod2hpY2gg
d2lsbCBsZWFkIHRvCj4+PiAgICAgY29uY3VycmVudCBvcGVyYXRpb25zIHRvIHRoaXMgZ3JvdXAg
ZmFpbGluZykuCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEVibmVyIDxjLmVibmVy
QHByb3htb3guY29tPgo+Pj4gLS0tCj4+PiBjaGFuZ2VzIHNpbmNlIHZlcnNpb24gMToKPj4+IC0g
cmViYXNlZCBvbnRvIGN1cnJlbnQgbWFzdGVyCj4+Pgo+Pj4gICBwYnMtZGF0YXN0b3JlL3NyYy9k
YXRhc3RvcmUucnMgfCAxMTAgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCj4+PiAg
IDEgZmlsZSBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKPj4+Cj4+
PiBkaWZmIC0tZ2l0IGEvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzIGIvcGJzLWRhdGFz
dG9yZS9zcmMvZGF0YXN0b3JlLnJzCj4+PiBpbmRleCBhYTM4ZTJhYzEuLjc4OGRiZjIxMiAxMDA2
NDQKPj4+IC0tLSBhL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycwo+Pj4gKysrIGIvcGJz
LWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzCj4+PiBAQCAtMTE0Myw0NyArMTE0Myw4NSBAQCBp
bXBsIERhdGFTdG9yZSB7Cj4+PiAgICAgICAgICAgICAgIGxldCBuYW1lc3BhY2UgPSBuYW1lc3Bh
Y2UuY29udGV4dCgiaXRlcmF0aW5nIG5hbWVzcGFjZXMgZmFpbGVkIik/Owo+Pj4gICAgICAgICAg
ICAgICBmb3IgZ3JvdXAgaW4gYXJjX3NlbGYuaXRlcl9iYWNrdXBfZ3JvdXBzKG5hbWVzcGFjZSk/
IHsKPj4+ICAgICAgICAgICAgICAgICAgIGxldCBncm91cCA9IGdyb3VwLmNvbnRleHQoIml0ZXJh
dGluZyBiYWNrdXAgZ3JvdXBzIGZhaWxlZCIpPzsKPj4gCj4+IHByZS1leGlzdGluZy91bnJlbGF0
ZWQgLSB3aGF0IGlmIHRoZSBncm91cCBnb3QgcHJ1bmVkIGF0IHRoZSByaWdodAo+PiBtb21lbnQg
aGVyZT8gc2hvdWxkIHdlIG1heWJlIHJlY2hlY2sgdGhhdCBpdCBleGlzdHMgYW5kIGlnbm9yZSB0
aGUgZXJyb3IKPj4gaW4gdGhhdCBjYXNlPwo+IAo+IEhtbSwgdGhhdCdzIHJpZ2h0Li4uIFNhbWUg
cHJvYmFibHkgYXBwbGllcyB0byB0aGUgbmFtZXNwYWNlIGl0ZXJhdGlvbiAKPiBhYm92ZSBhcyB3
ZWxsLi4uCj4gQnV0IEknbSBub3Qgc3VyZSB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGdyb3VwIGV4
aXN0cyBhbmQgaWdub3JlPyBXaGF0J3MgCj4geW91ciByZWFzb25pbmcgaGVyZT8gQXMgZmFyIGFz
IEkgc2VlIHRoZSB3aG9sZSBzdGF0ZSBvZiB0aGUgaXRlcmF0b3IgCj4gYm9pbHMgZG93biB0byB0
aGUgcmVhZGRpcl9yKCkgY2FsbHMgaW4gbml4OjpkaXI6Okl0ZXI6Om5leHQoKSwgYnV0IG5vdCAK
PiBzdXJlIHdoYXQgc3RhdGUgb25lIGlzIGxvb2tpbmcgYXQgYXQgdGhhdCBtb21lbnQuCgpteSBy
ZWFzb25pbmcgd2FzIHRoYXQgd2Ugbm93IGNoYW5nZWQgdGhlIGJlaGF2aW91ciBzbyB0aGF0IGdy
b3VwcyBhcmUKY29tcGxldGVseSByZW1vdmVkIGlmIHRoZSBsYXN0IHNuYXBzaG90IGlzIHJlbW92
ZWQsIHNvIGlmIHRoYXQgaGFwcGVucwp3aGlsZSBpdGVyYXRpbmcgaXQgd291bGQgYWJvcnQgdGhl
IHdob2xlIEdDLi4gYnV0IHRoYXQgcHJvYmFibHkgYXBwbGllcwptb3JlIHRvIHRoZSBsaXN0X2Jh
Y2t1cHMgY2FsbCBiZWxvdywgYW5kIG5vdCB0byB0aGUgZ3JvdXAgaXRlcmF0b3IKaGVyZS4uCgpm
b3IgbmFtZXNwYWNlcyBJJ2QgYmUgYSBiaXQgbGVzcyB3b3JyaWVkLCBhcyBkZWxldGluZyB0aGVt
IHdoaWxlIGEgR0MgaXMKcnVubmluZyBhbmQgaGl0dGluZyBhIGNvbmZsaWN0IHNob3VsZCBiZSBh
IGZhaXJseSByYXJlIG9jY3VycmVuY2UuLgoKPiAKPj4gCj4+PiAtICAgICAgICAgICAgICAgIGxl
dCBtdXQgc25hcHNob3RzID0gZ3JvdXAubGlzdF9iYWNrdXBzKCkuY29udGV4dCgibGlzdGluZyBz
bmFwc2hvdHMgZmFpbGVkIik/Owo+Pj4gLSAgICAgICAgICAgICAgICAvLyBTb3J0IGJ5IHNuYXBz
aG90IHRpbWVzdGFtcCB0byBpdGVyYXRlIG92ZXIgY29uc2VjdXRpdmUgc25hcHNob3RzIGZvciBl
YWNoIGltYWdlLgo+Pj4gLSAgICAgICAgICAgICAgICBCYWNrdXBJbmZvOjpzb3J0X2xpc3QoJm11
dCBzbmFwc2hvdHMsIHRydWUpOwo+Pj4gLSAgICAgICAgICAgICAgICBmb3Igc25hcHNob3QgaW4g
c25hcHNob3RzIHsKPj4+IC0gICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIHNuYXBzaG90
LmZpbGVzIHsKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIuY2hlY2tfYWJvcnQo
KT87Cj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLmZhaWxfb25fc2h1dGRvd24o
KT87Cj4+PiAtCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG11dCBwYXRoID0gc25h
cHNob3QuYmFja3VwX2Rpci5mdWxsX3BhdGgoKTsKPj4+IC0gICAgICAgICAgICAgICAgICAgICAg
ICBwYXRoLnB1c2goZmlsZSk7Cj4+PiAtCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgbGV0
IGluZGV4ID0gbWF0Y2ggc2VsZi5vcGVuX2luZGV4X3JlYWRlcigmcGF0aCk/IHsKPj4+IC0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU29tZShpbmRleCkgPT4gaW5kZXgsCj4+PiAtICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gewo+Pj4gLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5wcm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpOwo+Pj4gKwo+
Pj4gKyAgICAgICAgICAgICAgICAvLyBBdm9pZCByYWNlIGJldHdlZW4gbGlzdGluZy9tYXJraW5n
IG9mIHNuYXBzaG90cyBieSBHQyBhbmQgcHJ1bmluZyB0aGUgbGFzdAo+Pj4gKyAgICAgICAgICAg
ICAgICAvLyBzbmFwc2hvdCBpbiB0aGUgZ3JvdXAsIGZvbGxvd2luZyBhIG5ldyBzbmFwc2hvdCBj
cmVhdGlvbi4gT3RoZXJ3aXNlIGtub3duIGNodW5rcwo+Pj4gKyAgICAgICAgICAgICAgICAvLyBt
aWdodCBvbmx5IGJlIHJlZmVyZW5jZWQgYnkgdGhlIG5ldyBzbmFwc2hvdCwgc28gaXQgbXVzdCBi
ZSByZWFkIGFzIHdlbGwuCj4+PiArICAgICAgICAgICAgICAgIGxldCBtdXQgcmV0cnlfY291bnRl
ciA9IDA7Cj4+PiArICAgICAgICAgICAgICAgIGxldCBtdXQgcHJvY2Vzc2VkX2dyb3VwX2luZGlj
ZXMgPSBIYXNoU2V0OjpuZXcoKTsKPj4+ICsgICAgICAgICAgICAgICAgbGV0IG11dCBuZWVkc19y
ZXRyeTsKPj4gCj4+IEkgZG9uJ3QgdGhpbmsgd2UgbmVlZCB0aGlzIHZhcmlhYmxlIChzZWUgYmVs
b3cpCj4gCj4gQWNrZWQKPiAKPj4gCj4+PiArICAgICAgICAgICAgICAgIGxvb3Agewo+Pj4gKyAg
ICAgICAgICAgICAgICAgICAgbmVlZHNfcmV0cnkgPSBmYWxzZTsKPj4+ICsgICAgICAgICAgICAg
ICAgICAgIGxldCBfbG9jayA9IGlmIHJldHJ5X2NvdW50ZXIgPT0gMTAgewo+Pj4gKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIExhc3QgcmVzb3J0LCBleGNsdXNpdmVseSBsb2NrIHRoZSBiYWNr
dXAgZ3JvdXAgdG8gbWFrZSBzdXJlIG5vIG5ldwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJhY2t1cHMgY2FuIGJlIHdyaXR0ZW4uIFRoaXMgd2lsbCBvbmx5IHRyaWdnZXIgaWYgbm9u
ZSBvZiB0aGUgcHJldmlvdXMKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRyaWVz
IGNvbnZlcmdlZCBzdWNjZXNzZnVsbHksIHdoaWNoIGlzIHZlcnkgdW5saWtlbHkuCj4+PiArICAg
ICAgICAgICAgICAgICAgICAgICAgU29tZShncm91cC5sb2NrKCkpCj4+IAo+PiB0aGlzIHNob3Vs
ZCBjaGVjayB0aGUgcmVzdWx0PyB0aGlzIHdvdWxkIGFsc28gZmFpbCBpZiBhIGJhY2t1cCBpcwo+
PiBjdXJyZW50bHkgZ29pbmcgb24gKHZlcnkgbGlrZWx5IGlmIHdlIGVuZCB1cCBoZXJlPykgYW5k
IGFib3J0IHRoZSBHQwo+PiB0aGVuLCBidXQgd2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBsb2NrIGEg
Z3JvdXAgd2l0aCBhIHRpbWVvdXQgYXQgdGhlCj4+IG1vbWVudC4uIGJ1dCBtYXliZSB3ZSBjYW4g
d2FpdCBhbmQgc2VlIGlmIHVzZXJzIGFjdHVhbGx5IHJ1biBpbnRvIHRoYXQsCj4+IHdlIGNhbiBh
bHdheXMgZXh0ZW5kIHRoZSBsb2NraW5nIGludGVyZmFjZSB0aGVuLi4KPiAKPiBUcnVlLCBidXQg
c2luY2UgdGhpcyBpcyB2ZXJ5IHVubGlrZWx5IHRvIGhhcHBlbiwgSSB3b3VsZCBvcHQgdG8gZmFp
bCBhbmQgCj4gYWRkIGFuIGVycm9yIGNvbnRleHQgaGVyZSBzbyB0aGlzIGNhbiBlYXNpbHkgYmUg
dHJhY2VkIGJhY2sgdG8gdGhpcyBjb2RlIAo+IHBhdGguCgp5ZXMsIGZvciBub3cgSSdkIHNheSBh
Ym9ydGluZyBHQyB3aXRoIGEgY2xlYXIgZXJyb3IgaGVyZSBpcyBiZXN0LiB3ZQpjYW5ub3Qgc2Fm
ZWx5IGNvbnRpbnVlLi4KCj4gCj4+IAo+PiB3ZSBzaG91bGQgcHJvYmFibHkgYWxzbyBhYm9ydCBp
ZiB3ZSBldmVyIGhpdCBhIHJldHJ5X2NvdW50ZXIgPiAxMCwgc2luY2UKPj4gdGhhdCB3b3VsZCBt
ZWFuIHdlIG1pc3NlZCBzb21lIGJ1ZyBhbmQgdGhpcyBjb3VsZCBsb29wIGZvcmV2ZXIuLgo+IAo+
IEFoIHllcywgZ29vZCBwb2ludCEgV2lsbCBhZGQgYSBiYWlsIGZvciB0aGF0IGNhc2UuCj4gCj4+
IAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKPj4+ICsgICAgICAgICAgICAgICAg
ICAgICAgICBOb25lCj4+PiArICAgICAgICAgICAgICAgICAgICB9Owo+Pj4gKwo+Pj4gKyAgICAg
ICAgICAgICAgICAgICAgbGV0IG11dCBzbmFwc2hvdHMgPSBncm91cC5saXN0X2JhY2t1cHMoKS5j
b250ZXh0KCJsaXN0aW5nIHNuYXBzaG90cyBmYWlsZWQiKT87Cj4+IAo+PiBzYW1lIHF1ZXN0aW9u
IGFzIGFib3ZlIGFwcGxpZXMgaGVyZSBhcyB3ZWxsIC0gd2hhdCBpZiB0aGUgd2hvbGUgZ3JvdXAg
dmFuaXNoZWQ/Cj4gCj4gQWNrZWQsIG11c3QgY2hlY2sKCnNlZSBhYm92ZSAtIHRoaXMgaXMgcHJv
YmFibHkgdGhlIHJlbGV2YW50IHBhcnQgZm9yIGRpc2FwcGVhcmluZyBncm91cHMuCgo+IAo+PiAK
Pj4+ICsgICAgICAgICAgICAgICAgICAgIGxldCBzbmFwc2hvdF9jb3VudCA9IHNuYXBzaG90cy5s
ZW4oKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgIC8vIFNvcnQgYnkgc25hcHNob3QgdGltZXN0
YW1wIHRvIGl0ZXJhdGUgb3ZlciBjb25zZWN1dGl2ZSBzbmFwc2hvdHMgZm9yIGVhY2ggc25hcHNo
b3QuCj4+IAo+PiB0aGlzIGNvbW1lbnQgbWFrZXMgbm8gc2Vuc2UgOykKPj4gCj4+IC8vIGl0ZXJh
dGUgb3ZlciBzb3J0ZWQgc25hcHNob3RzIHRvIGJlbmVmaXQgZnJvbSBjaHVuayBjYWNoaW5nCj4+
IAo+PiBvciBzb21ldGhpbmcgbGlrZSB0aGlzPyBpZiB3ZSB3YW50IHRvIGtlZXAgdGhlIGNvbW1l
bnQgYXQgYWxsLi4KPiAKPiB5ZWFoLCBpbmNvcnJlY3RseSBhZGFwdGVkIHRoZSBwcmUtZXhpc3Rp
bmcgb25lIGhlcmUsIGJ1dCB0aGlzIGRvZXMgbm90IAo+IGdpdmUgbXVjaCBpbnNpZ2h0LCBzbyBs
ZXRzIGRyb3AgaXQuCj4gCj4+IAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgQmFja3VwSW5mbzo6
c29ydF9saXN0KCZtdXQgc25hcHNob3RzLCB0cnVlKTsKPj4+ICsgICAgICAgICAgICAgICAgICAg
IGZvciAoY291bnQsIHNuYXBzaG90KSBpbiBzbmFwc2hvdHMuaW50b19pdGVyKCkuZW51bWVyYXRl
KCkgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIHNuYXBzaG90LmZp
bGVzIHsKPj4gCj4+IHNuYXBzaG90LmZpbGVzIGFsc28gaW5jbHVkZXMgYmxvYnMsIHNob3VsZCB3
ZSBmaWx0ZXIgdGhlbSBoZXJlIHRvIGF2b2lkCj4+IHByb2JsZW1zIGlmIHdlIGFkYXB0IGJlbG93
IHRvIGhhbmRsZSBwYXJ0aWFsL29uZ29pbmcgcHJ1bmluZz8KPiAKPiBZZXMsIG1pZ2h0IGJlIGJl
dHRlciB0byBleGNsdWRlIHRoZXNlIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KPiAKPj4gCj4+PiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5jaGVja19hYm9ydCgpPzsKPj4+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLmZhaWxfb25fc2h1dGRvd24oKT87Cj4+
PiArCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtdXQgcGF0aCA9IHNuYXBz
aG90LmJhY2t1cF9kaXIuZnVsbF9wYXRoKCk7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhdGgucHVzaChmaWxlKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQXZvaWQgcmVwcm9jZXNzaW5nIG9mIGFscmVhZHkgc2VlbiBpbmRleCBmaWxlcyBvbiBy
ZXRyeQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXRyeV9jb3VudGVyID4g
MCAmJiBwcm9jZXNzZWRfZ3JvdXBfaW5kaWNlcy5jb250YWlucygmcGF0aCkgewo+Pj4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgIH07Cj4+PiAtICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRleF9tYXJrX3VzZWRfY2h1bmtzKAo+Pj4gLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwKPj4+IC0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnBhdGgsCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtdXQgY2h1
bmtfbHJ1X2NhY2hlLAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsCj4+
PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlciwKPj4+IC0gICAgICAgICAgICAg
ICAgICAgICAgICApPzsKPj4+IC0KPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICBpZiAhdW5w
cm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpIHsKPj4+IC0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mbyEoIkVuY291bnRlcmVkIG5ldyBpbmRleCBmaWxlICd7cGF0aDo/fScs
IGluY3JlbWVudCB0b3RhbCBpbmRleCBmaWxlIGNvdW50Iik7Cj4+PiAtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4X2NvdW50ICs9IDE7Cj4+PiAtICAgICAgICAgICAgICAgICAgICAg
ICAgfQo+Pj4gICAKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGVyY2VudGFnZSA9
IChwcm9jZXNzZWRfaW5kZXhfZmlsZXMgKyAxKSAqIDEwMCAvIGluZGV4X2NvdW50Owo+Pj4gLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIHBlcmNlbnRhZ2UgPiBsYXN0X3BlcmNlbnRhZ2Ugewo+
Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvISgKPj4+IC0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJtYXJrZWQge3BlcmNlbnRhZ2V9JSAoe30gb2Yge2luZGV4X2Nv
dW50fSBpbmRleCBmaWxlcykiLAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc2VkX2luZGV4X2ZpbGVzICsgMSwKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9wZXJjZW50YWdlID0g
cGVyY2VudGFnZTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0g
bWF0Y2ggc2VsZi5vcGVuX2luZGV4X3JlYWRlcigmcGF0aCk/IHsKPj4+ICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNvbWUoaW5kZXgpID0+IGluZGV4LAo+Pj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgY291bnQgKyAxID09IHNuYXBzaG90X2NvdW50Cj4+PiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzbmFwc2hvdC5iYWNrdXBfZGly
LmZ1bGxfcGF0aCgpLmV4aXN0cygpCj4+IAo+PiB3aGF0IGlmIHRoZSBzbmFwc2hvdCBkaXIgc3Rp
bGwgZXhpc3RzLCBidXQgdGhlIGluZGV4IGRvZXNuJ3Q/IHdvdWxkbid0Cj4+IHRoYXQgYWxzbyBi
ZSBwcm9ibGVtYXRpYz8gSSB0aGluayB3ZSBzaG91bGQgcHJvYmFibHkgc3RhcnQgdGhlIGxvb3Ag
b3Zlcgo+PiBhcyBzb29uIGFzIHNvbWV0aGluZyB1bmV4cGVjdGVkIGlzIGdvaW5nIG9uIHdpdGgg
dGhlIGxhc3Qgc25hcHNob3Qgb2YKPj4gdGhlIGdyb3VwLi4KPiAKPiBBZ3JlZWQsIHBydW5pbmcg
c2hvdWxkIHJlbW92ZSB0aGUgZGlyZWN0b3J5IGFzIGEgd2hvbGUgYnV0IGxldCdzIGJlIAo+IGNv
bnNlcnZhdGl2ZSBoZXJlIHRvIGNvdmVyIGluY29uc2lzdGVudCBzdGF0ZXMgYXMgd2VsbC4KPiAK
Pj4gCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewo+Pj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkc19yZXRyeSA9IHRydWU7Cj4+
IAo+PiBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2Ugc2V0IGl0IHRvIHRydWUsIGFuZCBh
dCB0aGlzIHBvaW50IHdlCj4+IGNvdWxkIGp1c3Qgc3RhcnQgYW5vdGhlciBpdGVyYXRpb24gb2Yg
dGhlIG91dGVyIGxvb3AgdmlhIGxhYmVsZWQKPj4gY29udGludWU/Cj4gCj4gQWgsIHllcyB0aGF0
J3MgaW5kZWVkIGJldHRlciwgdGh4IQo+IAo+PiAKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5wcm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpOwo+PiAKPj4gdGhpcyBjb3VsZCBt
b3ZlIGFib3ZlIHRoZSBpZiB0aGVuCj4gCj4gQWNrZWQKPiAKPj4gCj4+PiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+PiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Cj4+PiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5kZXhfbWFya191c2VkX2NodW5rcygK
Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAo+Pj4gKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJnBhdGgsCj4+PiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmbXV0IGNodW5rX2xydV9jYWNoZSwKPj4+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXR1cywKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmtlciwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT87Cj4+PiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF9ncm91cF9pbmRpY2VzLmluc2VydChwYXRo
LmNsb25lKCkpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhdW5w
cm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpIHsKPj4+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZm8hKCJFbmNvdW50ZXJlZCBuZXcgaW5kZXggZmlsZSAne3BhdGg6
P30nLCBpbmNyZW1lbnQgdG90YWwgaW5kZXggZmlsZSBjb3VudCIpOwo+Pj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhfY291bnQgKz0gMTsKPj4+ICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZXQgcGVyY2VudGFnZSA9IChwcm9jZXNzZWRfaW5kZXhfZmlsZXMgKyAxKSAqIDEwMCAvIGluZGV4
X2NvdW50Owo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwZXJjZW50YWdlID4g
bGFzdF9wZXJjZW50YWdlIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm8hKAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXJrZWQge3Bl
cmNlbnRhZ2V9JSAoe30gb2Yge2luZGV4X2NvdW50fSBpbmRleCBmaWxlcykiLAo+Pj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF9pbmRleF9maWxlcyArIDEs
Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+Pj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGFzdF9wZXJjZW50YWdlID0gcGVyY2VudGFnZTsKPj4+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9jZXNzZWRfaW5kZXhfZmlsZXMgKz0gMTsKPj4+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF9pbmRleF9maWxl
cyArPSAxOwo+Pj4gICAgICAgICAgICAgICAgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgICAg
ICAgICAgICAgIGlmIG5lZWRzX3JldHJ5IHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBy
ZXRyeV9jb3VudGVyICs9IDE7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Cj4+PiArICAgICAgICAgICAgICAgICAgICB9Cj4+IAo+PiB0aGlzIHdob2xlIHRoaW5nIGhlcmUg
Y2FuIGdvIGF3YXkgdGhlbi4uCj4gCj4gQWNrZWQKCgpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpwYnMtZGV2ZWwgbWFpbGluZyBsaXN0CnBicy1kZXZlbEBs
aXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1h
bi9saXN0aW5mby9wYnMtZGV2ZWwK