From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 38C6C1FF179 for ; Wed, 26 Nov 2025 18:21:06 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 725CA128E0; Wed, 26 Nov 2025 18:21:18 +0100 (CET) Message-ID: <601f8abd-ea47-4c3b-9930-ff52b8e07675@proxmox.com> Date: Wed, 26 Nov 2025 18:21:13 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox Backup Server development discussion , =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= References: <20251124170423.303300-1-s.rufinatscha@proxmox.com> <20251124170423.303300-3-s.rufinatscha@proxmox.com> <1764167253.w84bii3yf4.astroid@yuna.none> Content-Language: en-US From: Samuel Rufinatscha In-Reply-To: <1764167253.w84bii3yf4.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.244 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_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes 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, proxmox.com] Subject: Re: [pbs-devel] [PATCH proxmox-backup v5 2/4] partial fix #6049: datastore: impl ConfigVersionCache fast path for lookups X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" T24gMTEvMjYvMjUgNDoxNSBQTSwgRmFiaWFuIEdyw7xuYmljaGxlciB3cm90ZToKPiBPbiBOb3Zl bWJlciAyNCwgMjAyNSA2OjA0IHBtLCBTYW11ZWwgUnVmaW5hdHNjaGEgd3JvdGU6Cj4+IFJlcGVh dGVkIC9zdGF0dXMgcmVxdWVzdHMgY2F1c2VkIGxvb2t1cF9kYXRhc3RvcmUoKSB0byByZS1yZWFk IGFuZAo+PiBwYXJzZSBkYXRhc3RvcmUuY2ZnIG9uIGV2ZXJ5IGNhbGwuIFRoZSBpc3N1ZSB3YXMg bWVudGlvbmVkIGluIHJlcG9ydAo+PiAjNjA0OSBbMV0uIGNhcmdvLWZsYW1lZ3JhcGggWzJdIGNv bmZpcm1lZCB0aGF0IHRoZSBob3QgcGF0aCBpcwo+PiBkb21pbmF0ZWQgYnkgcGJzX2NvbmZpZzo6 ZGF0YXN0b3JlOjpjb25maWcoKSAoY29uZmlnIHBhcnNpbmcpLgo+Pgo+PiBUaGlzIHBhdGNoIGlt cGxlbWVudHMgY2FjaGluZyBvZiB0aGUgZ2xvYmFsIGRhdGFzdG9yZS5jZmcgdXNpbmcgdGhlCj4+ IGdlbmVyYXRpb24gbnVtYmVycyBmcm9tIHRoZSBzaGFyZWQgY29uZmlnIHZlcnNpb24gY2FjaGUu IEl0IGNhY2hlcyB0aGUKPj4gZGF0YXN0b3JlLmNmZyBhbG9uZyB3aXRoIHRoZSBnZW5lcmF0aW9u IG51bWJlciBhbmQsIHdoZW4gYSBzdWJzZXF1ZW50Cj4+IGxvb2t1cCBzZWVzIHRoZSBzYW1lIGdl bmVyYXRpb24sIGl0IHJldXNlcyB0aGUgY2FjaGVkIGNvbmZpZyB3aXRob3V0Cj4+IHJlLXJlYWRp bmcgaXQgZnJvbSBkaXNrLiBJZiB0aGUgZ2VuZXJhdGlvbiBkaWZmZXJzCj4+IChvciB0aGUgY2Fj aGUgaXMgdW5hdmFpbGFibGUpLCB0aGUgY29uZmlnIGlzIHJlLXJlYWQgZnJvbSBkaXNrLgo+PiBJ ZiBgdXBkYXRlX2NhY2hlID0gdHJ1ZWAsIHRoZSBuZXcgY29uZmlnIGFuZCBjdXJyZW50IGdlbmVy YXRpb24gYXJlCj4+IHBlcnNpc3RlZCBpbiB0aGUgY2FjaGUuIEluIHRoaXMgY2FzZSwgY2FsbGVy cyBtdXN0IGhvbGQgdGhlIGRhdGFzdG9yZQo+PiBjb25maWcgbG9jayB0byBhdm9pZCByYWNpbmcg d2l0aCBjb25jdXJyZW50IGNvbmZpZyBjaGFuZ2VzLgo+PiBJZiBgdXBkYXRlX2NhY2hlYCBpcyBg ZmFsc2VgIGFuZCBnZW5lcmF0aW9uIGRpZCBub3QgbWF0Y2gsIHRoZSBmcmVzaGx5Cj4+IHJlYWQg Y29uZmlnIGlzIHJldHVybmVkIGJ1dCB0aGUgY2FjaGUgaXMgbGVmdCB1bmNoYW5nZWQuIElmCj4+ IGBDb25maWdWZXJzaW9uQ2FjaGVgIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBjb25maWcgaXMgYWx3 YXlzIHJlYWQgZnJvbQo+PiBkaXNrIGFuZCBgTm9uZWAgaXMgcmV0dXJuZWQgYXMgZ2VuZXJhdGlv bi4KPj4KPj4gQmVoYXZpb3JhbCBub3Rlcwo+Pgo+PiAtIFRoZSBnZW5lcmF0aW9uIGlzIGJ1bXBl ZCB2aWEgdGhlIGV4aXN0aW5nIHNhdmVfY29uZmlnKCkgcGF0aCwgc28KPj4gICAgQVBJLWRyaXZl biBjb25maWcgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQgaW1tZWRpYXRlbHkuCj4+IC0gTWFudWFsIGVk aXRzIHRvIGRhdGFzdG9yZS5jZmcgYXJlIG5vdCBkZXRlY3RlZDsgdGhpcyBpcyBjb3ZlcmVkIGlu IGEKPj4gICAgZGVkaWNhdGVkIHBhdGNoIGluIHRoaXMgc2VyaWVzLgo+PiAtIERhdGFTdG9yZTo6 ZHJvcCBzdGlsbCBwZXJmb3JtcyBhIGNvbmZpZyByZWFkIG9uIHRoZSBjb21tb24gcGF0aDsKPj4g ICAgYWxzbyBjb3ZlcmVkIGluIGEgZGVkaWNhdGVkIHBhdGNoIGluIHRoaXMgc2VyaWVzLgo+Pgo+ PiBMaW5rcwo+Pgo+PiBbMV0gQnVnemlsbGE6IGh0dHBzOi8vYnVnemlsbGEucHJveG1veC5jb20v c2hvd19idWcuY2dpP2lkPTYwNDkKPj4gWzJdIGNhcmdvLWZsYW1lZ3JhcGg6IGh0dHBzOi8vZ2l0 aHViLmNvbS9mbGFtZWdyYXBoLXJzL2ZsYW1lZ3JhcGgKPj4KPj4gRml4ZXM6ICM2MDQ5Cj4+IFNp Z25lZC1vZmYtYnk6IFNhbXVlbCBSdWZpbmF0c2NoYSA8cy5ydWZpbmF0c2NoYUBwcm94bW94LmNv bT4KPiAKPiBzdHlsZSBuaXRzIGJlbG93LCBidXQgb3RoZXJ3aXNlCj4gCj4gUmV2aWV3ZWQtYnk6 IEZhYmlhbiBHcsO8bmJpY2hlciA8Zi5ncnVlbmJpY2hsZXJAcHJveG1veC5jb20+Cj4gCj4+IC0t LQo+PiBDaGFuZ2VzOgo+Pgo+PiAgRnJvbSB2MSDihpIgdjIsIHRoYW5rcyBARmFiaWFuCj4+IC0g TW92ZWQgdGhlIENvbmZpZ1ZlcnNpb25DYWNoZSBjaGFuZ2VzIGludG8gaXRzIG93biBwYXRjaC4K Pj4gLSBJbnRyb2R1Y2VkIHRoZSBnbG9iYWwgc3RhdGljIERBVEFTVE9SRV9DT05GSUdfQ0FDSEUg dG8gc3RvcmUgdGhlCj4+IGZ1bGx5IHBhcnNlZCBkYXRhc3RvcmUuY2ZnIGluc3RlYWQsIGFsb25n IHdpdGggaXRzIGdlbmVyYXRpb24gbnVtYmVyLgo+PiAgICBJbnRyb2R1Y2VkIERhdGFzdG9yZUNv bmZpZ0NhY2hlIHN0cnVjdCB0byBob2xkIGJvdGguCj4+IC0gUmVtb3ZlZCBhbmQgcmVwbGFjZWQg dGhlIENhY2hlZERhdGFzdG9yZUNvbmZpZ1RhZyBmaWVsZCBvZgo+PiAgICBEYXRhU3RvcmVJbXBs IHdpdGggYSBnZW5lcmF0aW9uIG51bWJlciBmaWVsZCBvbmx5IChPcHRpb248dXNpemU+KQo+PiAg ICB0byB2YWxpZGF0ZSBEYXRhU3RvcmVJbXBsIHJldXNlLgo+PiAtIEFkZGVkIERhdGFTdG9yZTo6 ZGF0YXN0b3JlX3NlY3Rpb25fY29uZmlnX2NhY2hlZCgpIGhlbHBlciBmdW5jdGlvbgo+PiAgICB0 byBlbmNhcHN1bGF0ZSB0aGUgY2FjaGluZyBsb2dpYyBhbmQgc2ltcGxpZnkgcmV1c2UuCj4+IC0g TW9kaWZpZWQgRGF0YVN0b3JlOjpsb29rdXBfZGF0YXN0b3JlKCkgdG8gdXNlIHRoZSBuZXcgaGVs cGVyLgo+Pgo+PiAgRnJvbSB2MiDihpIgdjMKPj4gTm8gY2hhbmdlcwo+Pgo+PiAgRnJvbSB2MyDi hpIgdjQsIHRoYW5rcyBARmFiaWFuCj4+IC0gUmVzdHJ1Y3R1cmVkIHRoZSB2ZXJzaW9uIGNhY2hl IGNoZWNrcyBpbgo+PiAgICBkYXRhc3RvcmVfc2VjdGlvbl9jb25maWdfY2FjaGVkKCksIHRvIHNp bXBsaWZ5IHRoZSBsb2dpYy4KPj4gLSBBZGRlZCB1cGRhdGVfY2FjaGUgcGFyYW1ldGVyIHRvIGRh dGFzdG9yZV9zZWN0aW9uX2NvbmZpZ19jYWNoZWQoKSB0bwo+PiAgICBjb250cm9sIGNhY2hlIHVw ZGF0ZXMuCj4+Cj4+ICBGcm9tIHY0IOKGkiB2NQo+PiAtIFJlYmFzZWQgb25seSwgbm8gY2hhbmdl cwo+Pgo+PiAgIHBicy1kYXRhc3RvcmUvQ2FyZ28udG9tbCAgICAgICB8ICAgMSArCj4+ICAgcGJz LWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzIHwgMTM4ICsrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLQo+PiAgIDIgZmlsZXMgY2hhbmdlZCwgMTA1IGluc2VydGlvbnMoKyksIDM0IGRl bGV0aW9ucygtKQo+IAo+IHRoaXMgY291bGQgYmUKPiAKPiAgIDIgZmlsZXMgY2hhbmdlZCwgODAg aW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCj4gCj4gc2VlIGJlbG93LiB0aGlzIG1pZ2h0 IHNvdW5kIG5pdC1waWNreSwgYnV0IGtlZXBpbmcgZGlmZnMgY29uY2lzZSBtYWtlcwo+IHJldmll d2luZyBhIGxvdCBlYXNpZXIgYmVjYXVzZSBvZiB0aGUgaGlnaGVyIHNpZ25hbCB0byBub2lzZSBy YXRpby4uCj4gCj4+Cj4+IGRpZmYgLS1naXQgYS9wYnMtZGF0YXN0b3JlL0NhcmdvLnRvbWwgYi9w YnMtZGF0YXN0b3JlL0NhcmdvLnRvbWwKPj4gaW5kZXggOGNlOTMwYTkuLjQyZjQ5YTdiIDEwMDY0 NAo+PiAtLS0gYS9wYnMtZGF0YXN0b3JlL0NhcmdvLnRvbWwKPj4gKysrIGIvcGJzLWRhdGFzdG9y ZS9DYXJnby50b21sCj4+IEBAIC00MCw2ICs0MCw3IEBAIHByb3htb3gtaW8ud29ya3NwYWNlID0g dHJ1ZQo+PiAgIHByb3htb3gtbGFuZy53b3Jrc3BhY2U9dHJ1ZQo+PiAgIHByb3htb3gtczMtY2xp ZW50ID0geyB3b3Jrc3BhY2UgPSB0cnVlLCBmZWF0dXJlcyA9IFsgImltcGwiIF0gfQo+PiAgIHBy b3htb3gtc2NoZW1hID0geyB3b3Jrc3BhY2UgPSB0cnVlLCBmZWF0dXJlcyA9IFsgImFwaS1tYWNy byIgXSB9Cj4+ICtwcm94bW94LXNlY3Rpb24tY29uZmlnLndvcmtzcGFjZSA9IHRydWUKPj4gICBw cm94bW94LXNlcmRlID0geyB3b3Jrc3BhY2UgPSB0cnVlLCBmZWF0dXJlcyA9IFsgInNlcmRlX2pz b24iIF0gfQo+PiAgIHByb3htb3gtc3lzLndvcmtzcGFjZSA9IHRydWUKPj4gICBwcm94bW94LXN5 c3RlbWQud29ya3NwYWNlID0gdHJ1ZQo+PiBkaWZmIC0tZ2l0IGEvcGJzLWRhdGFzdG9yZS9zcmMv ZGF0YXN0b3JlLnJzIGIvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzCj4+IGluZGV4IDM2 NTUwZmY2Li5jOWNiNWQ2NSAxMDA2NDQKPj4gLS0tIGEvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0 b3JlLnJzCj4+ICsrKyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycwo+PiBAQCAtMzQs NyArMzQsOCBAQCB1c2UgcGJzX2FwaV90eXBlczo6ewo+PiAgICAgICBNYWludGVuYW5jZVR5cGUs IE9wZXJhdGlvbiwgVVBJRCwKPj4gICB9Owo+PiAgIHVzZSBwYnNfY29uZmlnOjpzMzo6UzNfQ0ZH X1RZUEVfSUQ7Cj4+IC11c2UgcGJzX2NvbmZpZzo6QmFja3VwTG9ja0d1YXJkOwo+PiArdXNlIHBi c19jb25maWc6OntCYWNrdXBMb2NrR3VhcmQsIENvbmZpZ1ZlcnNpb25DYWNoZX07Cj4+ICt1c2Ug cHJveG1veF9zZWN0aW9uX2NvbmZpZzo6U2VjdGlvbkNvbmZpZ0RhdGE7Cj4+ICAgCj4+ICAgdXNl IGNyYXRlOjpiYWNrdXBfaW5mbzo6ewo+PiAgICAgICBCYWNrdXBEaXIsIEJhY2t1cEdyb3VwLCBC YWNrdXBJbmZvLCBPTERfTE9DS0lORywgUFJPVEVDVEVEX01BUktFUl9GSUxFTkFNRSwKPj4gQEAg LTQ4LDYgKzQ5LDE3IEBAIHVzZSBjcmF0ZTo6czM6OlMzX0NPTlRFTlRfUFJFRklYOwo+PiAgIHVz ZSBjcmF0ZTo6dGFza190cmFja2luZzo6e3NlbGYsIHVwZGF0ZV9hY3RpdmVfb3BlcmF0aW9uc307 Cj4+ICAgdXNlIGNyYXRlOjp7RGF0YUJsb2IsIExvY2FsRGF0YXN0b3JlTHJ1Q2FjaGV9Owo+PiAg IAo+PiArLy8gQ2FjaGUgZm9yIGZ1bGx5IHBhcnNlZCBkYXRhc3RvcmUuY2ZnCj4+ICtzdHJ1Y3Qg RGF0YXN0b3JlQ29uZmlnQ2FjaGUgewo+PiArICAgIC8vIFBhcnNlZCBkYXRhc3RvcmUuY2ZnIGZp bGUKPj4gKyAgICBjb25maWc6IEFyYzxTZWN0aW9uQ29uZmlnRGF0YT4sCj4+ICsgICAgLy8gR2Vu ZXJhdGlvbiBudW1iZXIgZnJvbSBDb25maWdWZXJzaW9uQ2FjaGUKPj4gKyAgICBsYXN0X2dlbmVy YXRpb246IHVzaXplLAo+PiArfQo+PiArCj4+ICtzdGF0aWMgREFUQVNUT1JFX0NPTkZJR19DQUNI RTogTGF6eUxvY2s8TXV0ZXg8T3B0aW9uPERhdGFzdG9yZUNvbmZpZ0NhY2hlPj4+ID0KPj4gKyAg ICBMYXp5TG9jazo6bmV3KHx8IE11dGV4OjpuZXcoTm9uZSkpOwo+PiArCj4+ICAgc3RhdGljIERB VEFTVE9SRV9NQVA6IExhenlMb2NrPE11dGV4PEhhc2hNYXA8U3RyaW5nLCBBcmM8RGF0YVN0b3Jl SW1wbD4+Pj4gPQo+PiAgICAgICBMYXp5TG9jazo6bmV3KHx8IE11dGV4OjpuZXcoSGFzaE1hcDo6 bmV3KCkpKTsKPj4gICAKPj4gQEAgLTE0OSwxMSArMTYxLDEzIEBAIHB1YiBzdHJ1Y3QgRGF0YVN0 b3JlSW1wbCB7Cj4+ICAgICAgIGxhc3RfZ2Nfc3RhdHVzOiBNdXRleDxHYXJiYWdlQ29sbGVjdGlv blN0YXR1cz4sCj4+ICAgICAgIHZlcmlmeV9uZXc6IGJvb2wsCj4+ICAgICAgIGNodW5rX29yZGVy OiBDaHVua09yZGVyLAo+PiAtICAgIGxhc3RfZGlnZXN0OiBPcHRpb248W3U4OyAzMl0+LAo+PiAg ICAgICBzeW5jX2xldmVsOiBEYXRhc3RvcmVGU3luY0xldmVsLAo+PiAgICAgICBiYWNrZW5kX2Nv bmZpZzogRGF0YXN0b3JlQmFja2VuZENvbmZpZywKPj4gICAgICAgbHJ1X3N0b3JlX2NhY2hpbmc6 IE9wdGlvbjxMb2NhbERhdGFzdG9yZUxydUNhY2hlPiwKPj4gICAgICAgdGhyZWFkX3NldHRpbmdz OiBEYXRhc3RvcmVUaHJlYWRTZXR0aW5ncywKPj4gKyAgICAvLy8gRGF0YXN0b3JlIGdlbmVyYXRp b24gbnVtYmVyIGZyb20gYENvbmZpZ1ZlcnNpb25DYWNoZWAgYXQgY3JlYXRpb24gdGltZSwgdXNl ZCB0bwo+IAo+IGRhdGFzdG9yZS5jZmcgY2FjaGUgZ2VuZXJhdGlvbiBudW1iZXIgYXQgbG9va3Vw IHRpbWUsIHVzZWQgdG8gaW52YWxpZGF0ZQo+IHRoaXMgY2FjaGVkIGBEYXRhU3RvcmVJbXBsYAo+ IAo+IGNyZWF0aW9uIHRpbWUgY291bGQgYWxzbyByZWZlciB0byB0aGUgZGF0YXN0b3JlIGNyZWF0 aW9uIHRpbWUuLgo+CgpHb29kIHBvaW50LCBhZ3JlZSEgV2lsbCBhcHBseSB5b3VyIHN1Z2dlc3Rp b24sIEkgbGlrZSBpdCBtb3JlIDopCgo+PiArICAgIC8vLyB2YWxpZGF0ZSByZXVzZSBvZiB0aGlz IGNhY2hlZCBgRGF0YVN0b3JlSW1wbGAuCj4+ICsgICAgY29uZmlnX2dlbmVyYXRpb246IE9wdGlv bjx1c2l6ZT4sCj4+ICAgfQo+PiAgIAo+PiAgIGltcGwgRGF0YVN0b3JlSW1wbCB7Cj4+IEBAIC0x NjYsMTEgKzE4MCwxMSBAQCBpbXBsIERhdGFTdG9yZUltcGwgewo+PiAgICAgICAgICAgICAgIGxh c3RfZ2Nfc3RhdHVzOiBNdXRleDo6bmV3KEdhcmJhZ2VDb2xsZWN0aW9uU3RhdHVzOjpkZWZhdWx0 KCkpLAo+PiAgICAgICAgICAgICAgIHZlcmlmeV9uZXc6IGZhbHNlLAo+PiAgICAgICAgICAgICAg IGNodW5rX29yZGVyOiBEZWZhdWx0OjpkZWZhdWx0KCksCj4+IC0gICAgICAgICAgICBsYXN0X2Rp Z2VzdDogTm9uZSwKPj4gICAgICAgICAgICAgICBzeW5jX2xldmVsOiBEZWZhdWx0OjpkZWZhdWx0 KCksCj4+ICAgICAgICAgICAgICAgYmFja2VuZF9jb25maWc6IERlZmF1bHQ6OmRlZmF1bHQoKSwK Pj4gICAgICAgICAgICAgICBscnVfc3RvcmVfY2FjaGluZzogTm9uZSwKPj4gICAgICAgICAgICAg ICB0aHJlYWRfc2V0dGluZ3M6IERlZmF1bHQ6OmRlZmF1bHQoKSwKPj4gKyAgICAgICAgICAgIGNv bmZpZ19nZW5lcmF0aW9uOiBOb25lLAo+PiAgICAgICAgICAgfSkKPj4gICAgICAgfQo+PiAgIH0K Pj4gQEAgLTI4Niw2ICszMDAsNTUgQEAgaW1wbCBEYXRhc3RvcmVUaHJlYWRTZXR0aW5ncyB7Cj4g Cj4gc28gdGhpcyBuZXcgaGVscGVyIGlzIGFscmVhZHkgKzQ5IGxpbmVzLCB3aGljaCBtZWFucyBp dCdzIHRoZSBidWxrIG9mCj4gdGhlIGNoYW5nZSBpZiB0aGUgbm9pc2UgYmVsb3cgaXMgcmVtb3Zl ZC4uCj4gCj4+ICAgICAgIH0KPj4gICB9Cj4+ICAgCj4+ICsvLy8gUmV0dXJucyB0aGUgcGFyc2Vk IGRhdGFzdG9yZSBjb25maWcgKGBkYXRhc3RvcmUuY2ZnYCkgYW5kIGl0cwo+PiArLy8vIGdlbmVy YXRpb24uCj4+ICsvLy8KPj4gKy8vLyBVc2VzIGBDb25maWdWZXJzaW9uQ2FjaGVgIHRvIGRldGVj dCBzdGFsZSBlbnRyaWVzOgo+PiArLy8vIC0gSWYgdGhlIGNhY2hlZCBnZW5lcmF0aW9uIG1hdGNo ZXMgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiwgdGhlCj4+ICsvLy8gICBjYWNoZWQgY29uZmlnIGlz IHJldHVybmVkLgo+PiArLy8vIC0gT3RoZXJ3aXNlIHRoZSBjb25maWcgaXMgcmUtcmVhZCBmcm9t IGRpc2suIElmIGB1cGRhdGVfY2FjaGVgIGlzCj4+ICsvLy8gICBgdHJ1ZWAsIHRoZSBuZXcgY29u ZmlnIGFuZCBjdXJyZW50IGdlbmVyYXRpb24gYXJlIHN0b3JlZCBpbiB0aGUKPj4gKy8vLyAgIGNh Y2hlLiBDYWxsZXJzIHRoYXQgc2V0IGB1cGRhdGVfY2FjaGUgPSB0cnVlYCBtdXN0IGhvbGQgdGhl Cj4+ICsvLy8gICBkYXRhc3RvcmUgY29uZmlnIGxvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGggY29u Y3VycmVudCBjb25maWcKPj4gKy8vLyAgIGNoYW5nZXMuCj4+ICsvLy8gLSBJZiBgdXBkYXRlX2Nh Y2hlYCBpcyBgZmFsc2VgLCB0aGUgZnJlc2hseSByZWFkIGNvbmZpZyBpcyByZXR1cm5lZAo+PiAr Ly8vICAgYnV0IHRoZSBjYWNoZSBpcyBsZWZ0IHVuY2hhbmdlZC4KPj4gKy8vLwo+PiArLy8vIElm IGBDb25maWdWZXJzaW9uQ2FjaGVgIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBjb25maWcgaXMgYWx3 YXlzIHJlYWQKPj4gKy8vLyBmcm9tIGRpc2sgYW5kIGBOb25lYCBpcyByZXR1cm5lZCBhcyB0aGUg Z2VuZXJhdGlvbi4KPj4gK2ZuIGRhdGFzdG9yZV9zZWN0aW9uX2NvbmZpZ19jYWNoZWQoCj4+ICsg ICAgdXBkYXRlX2NhY2hlOiBib29sLAo+PiArKSAtPiBSZXN1bHQ8KEFyYzxTZWN0aW9uQ29uZmln RGF0YT4sIE9wdGlvbjx1c2l6ZT4pLCBFcnJvcj4gewo+PiArICAgIGxldCBtdXQgY29uZmlnX2Nh Y2hlID0gREFUQVNUT1JFX0NPTkZJR19DQUNIRS5sb2NrKCkudW53cmFwKCk7Cj4+ICsKPj4gKyAg ICBpZiBsZXQgT2sodmVyc2lvbl9jYWNoZSkgPSBDb25maWdWZXJzaW9uQ2FjaGU6Om5ldygpIHsK Pj4gKyAgICAgICAgbGV0IGN1cnJlbnRfZ2VuID0gdmVyc2lvbl9jYWNoZS5kYXRhc3RvcmVfZ2Vu ZXJhdGlvbigpOwo+PiArICAgICAgICBpZiBsZXQgU29tZShjYWNoZWQpID0gY29uZmlnX2NhY2hl LmFzX3JlZigpIHsKPj4gKyAgICAgICAgICAgIC8vIEZhc3QgcGF0aDogcmUtdXNlIGNhY2hlZCBk YXRhc3RvcmUuY2ZnCj4+ICsgICAgICAgICAgICBpZiBjYWNoZWQubGFzdF9nZW5lcmF0aW9uID09 IGN1cnJlbnRfZ2VuIHsKPj4gKyAgICAgICAgICAgICAgICByZXR1cm4gT2soKGNhY2hlZC5jb25m aWcuY2xvbmUoKSwgU29tZShjYWNoZWQubGFzdF9nZW5lcmF0aW9uKSkpOwo+PiArICAgICAgICAg ICAgfQo+PiArICAgICAgICB9Cj4+ICsgICAgICAgIC8vIFNsb3cgcGF0aDogcmUtcmVhZCBkYXRh c3RvcmUuY2ZnCj4+ICsgICAgICAgIGxldCAoY29uZmlnX3JhdywgX2RpZ2VzdCkgPSBwYnNfY29u ZmlnOjpkYXRhc3RvcmU6OmNvbmZpZygpPzsKPj4gKyAgICAgICAgbGV0IGNvbmZpZyA9IEFyYzo6 bmV3KGNvbmZpZ19yYXcpOwo+PiArCj4+ICsgICAgICAgIGlmIHVwZGF0ZV9jYWNoZSB7Cj4+ICsg ICAgICAgICAgICAqY29uZmlnX2NhY2hlID0gU29tZShEYXRhc3RvcmVDb25maWdDYWNoZSB7Cj4+ ICsgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcuY2xvbmUoKSwKPj4gKyAgICAgICAgICAg ICAgICBsYXN0X2dlbmVyYXRpb246IGN1cnJlbnRfZ2VuLAo+PiArICAgICAgICAgICAgfSk7Cj4+ ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICBPaygoY29uZmlnLCBTb21lKGN1cnJlbnRfZ2Vu KSkpCj4+ICsgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgLy8gRmFsbGJhY2sgcGF0aCwgbm8gY29u ZmlnIHZlcnNpb24gY2FjaGU6IHJlYWQgZGF0YXN0b3JlLmNmZyBhbmQgcmV0dXJuIE5vbmUgYXMg Z2VuZXJhdGlvbgo+PiArICAgICAgICAqY29uZmlnX2NhY2hlID0gTm9uZTsKPj4gKyAgICAgICAg bGV0IChjb25maWdfcmF3LCBfZGlnZXN0KSA9IHBic19jb25maWc6OmRhdGFzdG9yZTo6Y29uZmln KCk/Owo+PiArICAgICAgICBPaygoQXJjOjpuZXcoY29uZmlnX3JhdyksIE5vbmUpKQo+PiArICAg IH0KPj4gK30KPj4gKwo+PiAgIGltcGwgRGF0YVN0b3JlIHsKPj4gICAgICAgLy8gVGhpcyBvbmUg anVzdCBwYW5pY3Mgb24gZXZlcnl0aGluZwo+PiAgICAgICAjW2RvYyhoaWRkZW4pXQo+PiBAQCAt MzYzLDU2ICs0MjYsNjMgQEAgaW1wbCBEYXRhU3RvcmUgewo+PiAgICAgICAgICAgbmFtZTogJnN0 ciwKPj4gICAgICAgICAgIG9wZXJhdGlvbjogT3B0aW9uPE9wZXJhdGlvbj4sCj4+ICAgICAgICkg LT4gUmVzdWx0PEFyYzxEYXRhU3RvcmU+LCBFcnJvcj4gewo+IAo+IHRoZSBjaGFuZ2VzIGhlcmUg Y29udGFpbiBhIGxvdCBvZiBjaHVybiB0aGF0IGlzIG5vdCBuZWVkZWQgZm9yIHRoZQo+IGFjdHVh bCBjaGFuZ2UgdGhhdCBpcyBkb25lIC0gZS5nLiwgdGhlcmUncyBsb3RzIG9mIHZhcmlhYmxlcyBi ZWluZwo+IG5lZWRsZXNzIHJlbmFtZWQuLgo+IAo+PiAtICAgICAgICAvLyBBdm9pZCBUT0NUT1Ug YmV0d2VlbiBjaGVja2luZyBtYWludGVuYW5jZSBtb2RlIGFuZCB1cGRhdGluZyBhY3RpdmUgb3Bl cmF0aW9uIGNvdW50ZXIsIGFzCj4+IC0gICAgICAgIC8vIHdlIHVzZSBpdCB0byBkZWNpZGUgd2hl dGhlciBpdCBpcyBva2F5IHRvIGRlbGV0ZSB0aGUgZGF0YXN0b3JlLgo+PiArICAgICAgICAvLyBB dm9pZCBUT0NUT1UgYmV0d2VlbiBjaGVja2luZyBtYWludGVuYW5jZSBtb2RlIGFuZCB1cGRhdGlu ZyBhY3RpdmUgb3BlcmF0aW9ucy4KPj4gICAgICAgICAgIGxldCBfY29uZmlnX2xvY2sgPSBwYnNf Y29uZmlnOjpkYXRhc3RvcmU6OmxvY2tfY29uZmlnKCk/Owo+PiAgIAo+PiAtICAgICAgICAvLyB3 ZSBjb3VsZCB1c2UgdGhlIENvbmZpZ1ZlcnNpb25DYWNoZSdzIGdlbmVyYXRpb24gZm9yIHN0YWxl bmVzcyBkZXRlY3Rpb24sIGJ1dCAgd2UgbG9hZAo+PiAtICAgICAgICAvLyB0aGUgY29uZmlnIGFu eXdheSAtPiBqdXN0IHVzZSBkaWdlc3QsIGFkZGl0aW9uYWwgYmVuZWZpdDogbWFudWFsIGNoYW5n ZXMgZ2V0IGRldGVjdGVkCj4+IC0gICAgICAgIGxldCAoY29uZmlnLCBkaWdlc3QpID0gcGJzX2Nv bmZpZzo6ZGF0YXN0b3JlOjpjb25maWcoKT87Cj4+IC0gICAgICAgIGxldCBjb25maWc6IERhdGFT dG9yZUNvbmZpZyA9IGNvbmZpZy5sb29rdXAoImRhdGFzdG9yZSIsIG5hbWUpPzsKPj4gKyAgICAg ICAgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGFzdG9yZS5jZmcgZ2VuZXJhdGlvbiBudW1iZXIgYW5k IGNhY2hlZCBjb25maWcKPj4gKyAgICAgICAgbGV0IChzZWN0aW9uX2NvbmZpZywgZ2VuX251bSkg PSBkYXRhc3RvcmVfc2VjdGlvbl9jb25maWdfY2FjaGVkKHRydWUpPzsKPj4gKwo+PiArICAgICAg ICBsZXQgZGF0YXN0b3JlX2NmZzogRGF0YVN0b3JlQ29uZmlnID0gc2VjdGlvbl9jb25maWcubG9v a3VwKCJkYXRhc3RvcmUiLCBuYW1lKT87Cj4gCj4gcmVuYW1pbmcgdGhpcyB2YXJpYWJsZSBoZXJl IGFscmVhZHkgY2F1c2VzIGEgbG90IG9mIG5vaXNlIC0gaWYgeW91Cj4gcmVhbGx5IHdhbnQgdG8g ZG8gdGhhdCwgZG8gaXQgdXAtZnJvbnQgb3IgYXQgdGhlIGVuZCBhcyBjbGVhbnVwIGNvbW1pdAo+ IChkZXBlbmRpbmcgb24gaG93IHN1cmUgeW91IGFyZSB0aGUgY2hhbmdlIGlzIGFncmVlLWFibGUg LSBpZiBpdCdzIGFsbW9zdAo+IGNlcnRhaW4gaXQgaXMgYWNjZXB0ZWQsIHB1dCBpdCB1cCBmcm9u dCwgdGhlbiBpdCBjYW4gZ2V0IGFwcGxpZWQKPiBhbHJlYWR5LiBpZiBub3QsIHB1dCBpdCBhdCB0 aGUgZW5kIC0+IHRoZW4gaXQgY2FuIGJlIHNraXBwZWQgd2l0aG91dAo+IGFmZmVjdGluZyB0aGUg b3RoZXIgcGF0Y2hlcyA7KSkKPiAKPiBidXQgZ29pbmcgZnJvbSBjb25maWcgdG8gZGF0YXN0b3Jl X2NmZyBkb2Vzbid0IG1ha2UgdGhlIGNvZGUgYW55IGNsZWFyZXIKPiAtIHRoZSBsYXR0ZXIgY2Fu IHN0aWxsIHJlZmVyIHRvIHRoZSB3aG9sZSBjb25maWcgKGRhdGFzdG9yZS5jZmcpIG9yIHRoZQo+ IGluZGl2aWR1YWwgZGF0YXN0b3JlJ3Mgc2VjdGlvbiB3aXRoaW4uLiBzaW5jZSB3ZSBoYXZlIG5v IGZ1dGhlciBidXNpbmVzcwo+IHdpdGggdGhlIHdob2xlIHNlY3Rpb24gY29uZmlnIGhlcmUsIEkg dGhpbmsga2VlcGluZyB0aGlzIGFzIGBjb25maWdgIGlzCj4gZmluZS4uCj4gCgpBZ3JlZSwgd2ls bCBjaGFuZ2UgYmFjayEKCkFzIHlvdSBtZW50aW9uZWQsIHRoZSBpZGVhIG9mIHRoZSByZW5hbWUg d2FzIHRvIHNvbWVob3cgYmV0dGVyCmRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgZ2xvYmFsIGRh dGFzdG9yZS5jZmcgYW5kIHRoZSBpbmRpdmlkdWFsCmRhdGFzdG9yZSBjb25maWcuCkFzIHdlIGhh dmUgMiBjb25maWdzIGhlcmUgaW4gdGhlIHNhbWUgYmxvY2ssIEkgdHJpZWQgdG8gYXZvaWQgdG8g cmVseSBvbgoiY29uZmlnIi4gQXMgeW91IHNhaWQgZGF0YXN0b3JlX2NmZwpkb2VzIG5vdCBtYWtl IGl0IG11Y2ggYmV0dGVyLCBvciBjb3VsZCBiZSBtaXNpbnRlcnByZXRlZC4gVWx0aW1hdGl2ZWx5 LApJIGRpcmVjdGx5IGFsaWdlbmQgd2l0aCB0aGUgdHlwZSBuYW1lcyAoZGF0YXN0b3JlX2NmZyBm b3IKRGF0YVN0b3JlQ29uZmlnKS4KCkkgc2VlIHlvdXIgcG9pbnQgYW5kIGFncmVlOgoKc2luY2Ug d2UgaGF2ZSBubyBmdXRoZXIgYnVzaW5lc3MKID4gd2l0aCB0aGUgd2hvbGUgc2VjdGlvbiBjb25m aWcgaGVyZSwgSSB0aGluayBrZWVwaW5nIHRoaXMgYXMgYGNvbmZpZ2AgaXMKID4gZmluZS4uCgpU aGlzIGlzIHRoZSBiZXN0IHNvbHV0aW9uIGhlcmUuCgo+PiArICAgICAgICBsZXQgbWFpbnRlbmFu Y2VfbW9kZSA9IGRhdGFzdG9yZV9jZmcuZ2V0X21haW50ZW5hbmNlX21vZGUoKTsKPj4gKyAgICAg ICAgbGV0IG1vdW50X3N0YXR1cyA9IGdldF9kYXRhc3RvcmVfbW91bnRfc3RhdHVzKCZkYXRhc3Rv cmVfY2ZnKTsKPiAKPiBhbmQgdGhpbmdzIGV4dHJhY3RlZCBpbnRvIHZhcmlhYmxlcyBoZXJlIGRl c3BpdGUgYmVpbmcgdXNlZCBvbmx5IG9uY2UKPiAodGhpcyBhbHNvIGRvZXNuJ3QgY2hhbmdlIGR1 cmluZyB0aGUgcmVzdCBvZiB0aGUgc2VyaWVzKQo+IAoKR29vZCBwb2ludCwgd2lsbCByZW1vdmUh Cgo+PiAgIAo+PiAtICAgICAgICBpZiBsZXQgU29tZShtYWludGVuYW5jZV9tb2RlKSA9IGNvbmZp Zy5nZXRfbWFpbnRlbmFuY2VfbW9kZSgpIHsKPj4gLSAgICAgICAgICAgIGlmIGxldCBFcnIoZXJy b3IpID0gbWFpbnRlbmFuY2VfbW9kZS5jaGVjayhvcGVyYXRpb24pIHsKPj4gKyAgICAgICAgaWYg bGV0IFNvbWUobW0pID0gJm1haW50ZW5hbmNlX21vZGUgewo+IAo+IGJpbmRpbmcgbmFtZSBjaGFu Z2VzCj4gCj4+ICsgICAgICAgICAgICBpZiBsZXQgRXJyKGVycm9yKSA9IG1tLmNoZWNrKG9wZXJh dGlvbi5jbG9uZSgpKSB7Cj4gCj4gbmV3IGNsb25lKCkgaXMgaW50cm9kdWNlZCBidXQgbm90IG5l ZWRlZAoKTmljZSBjYXRjaCEKCj4gCj4+ICAgICAgICAgICAgICAgICAgIGJhaWwhKCJkYXRhc3Rv cmUgJ3tuYW1lfScgaXMgdW5hdmFpbGFibGU6IHtlcnJvcn0iKTsKPj4gICAgICAgICAgICAgICB9 Cj4+ICAgICAgICAgICB9Cj4+ICAgCj4+IC0gICAgICAgIGlmIGdldF9kYXRhc3RvcmVfbW91bnRf c3RhdHVzKCZjb25maWcpID09IFNvbWUoZmFsc2UpIHsKPj4gLSAgICAgICAgICAgIGxldCBtdXQg ZGF0YXN0b3JlX2NhY2hlID0gREFUQVNUT1JFX01BUC5sb2NrKCkudW53cmFwKCk7Cj4+IC0gICAg ICAgICAgICBkYXRhc3RvcmVfY2FjaGUucmVtb3ZlKCZjb25maWcubmFtZSk7Cj4+IC0gICAgICAg ICAgICBiYWlsISgiZGF0YXN0b3JlICd7fScgaXMgbm90IG1vdW50ZWQiLCBjb25maWcubmFtZSk7 Cj4+ICsgICAgICAgIGxldCBtdXQgZGF0YXN0b3JlX2NhY2hlID0gREFUQVNUT1JFX01BUC5sb2Nr KCkudW53cmFwKCk7Cj4gCj4gbW92aW5nIHRoaXMgaXMgZmluZSEKPiAKCkhlbHBzIHRvIGF2b2lk IHRoZSBkdXBsaWNhdGUgY2hlY2tzIDopCgo+PiArCj4+ICsgICAgICAgIGlmIG1vdW50X3N0YXR1 cyA9PSBTb21lKGZhbHNlKSB7Cj4+ICsgICAgICAgICAgICBkYXRhc3RvcmVfY2FjaGUucmVtb3Zl KCZkYXRhc3RvcmVfY2ZnLm5hbWUpOwo+PiArICAgICAgICAgICAgYmFpbCEoImRhdGFzdG9yZSAn e30nIGlzIG5vdCBtb3VudGVkIiwgZGF0YXN0b3JlX2NmZy5uYW1lKTsKPj4gICAgICAgICAgIH0K Pj4gICAKPj4gLSAgICAgICAgbGV0IG11dCBkYXRhc3RvcmVfY2FjaGUgPSBEQVRBU1RPUkVfTUFQ LmxvY2soKS51bndyYXAoKTsKPj4gLSAgICAgICAgbGV0IGVudHJ5ID0gZGF0YXN0b3JlX2NhY2hl LmdldChuYW1lKTsKPiAKPiB0aGlzIGlzIGNoYW5nZWQgdG8gZG9pbmcgaXQgdHdpY2UgYW5kIGNs b25pbmcuLgo+IAoKUmVmYWN0b3JpbmcgdGhpcyEKCj4+IC0KPj4gLSAgICAgICAgLy8gcmV1c2Ug Y2h1bmsgc3RvcmUgc28gdGhhdCB3ZSBrZWVwIHVzaW5nIHRoZSBzYW1lIHByb2Nlc3MgbG9ja2Vy IGluc3RhbmNlIQo+PiAtICAgICAgICBsZXQgY2h1bmtfc3RvcmUgPSBpZiBsZXQgU29tZShkYXRh c3RvcmUpID0gJmVudHJ5IHsKPiAKPiBzdHJ1Y3R1cmUgY2hhbmdlZCBoZXJlIGFuZCBiaW5kaW5n IHJlbmFtZWQsIGV2ZW4gdGhvdWdoIHRoZSBvbGQgb25lIHdvcmtzIGFzLWlzCj4gCgpBZ3JlZSwg d2lsbCByZXZlcnQhCgo+PiAtICAgICAgICAgICAgbGV0IGxhc3RfZGlnZXN0ID0gZGF0YXN0b3Jl Lmxhc3RfZGlnZXN0LmFzX3JlZigpOwo+PiAtICAgICAgICAgICAgaWYgbGV0IFNvbWUodHJ1ZSkg PSBsYXN0X2RpZ2VzdC5tYXAofGxhc3RfZGlnZXN0fCBsYXN0X2RpZ2VzdCA9PSAmZGlnZXN0KSB7 Cj4+IC0gICAgICAgICAgICAgICAgaWYgbGV0IFNvbWUob3BlcmF0aW9uKSA9IG9wZXJhdGlvbiB7 Cj4+IC0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9hY3RpdmVfb3BlcmF0aW9ucyhuYW1lLCBv cGVyYXRpb24sIDEpPzsKPj4gKyAgICAgICAgLy8gUmUtdXNlIERhdGFTdG9yZUltcGwKPj4gKyAg ICAgICAgaWYgbGV0IFNvbWUoZXhpc3RpbmcpID0gZGF0YXN0b3JlX2NhY2hlLmdldChuYW1lKS5j bG9uZWQoKSB7Cj4+ICsgICAgICAgICAgICBpZiBsZXQgKFNvbWUobGFzdF9nZW5lcmF0aW9uKSwg U29tZShnZW5fbnVtKSkgPSAoZXhpc3RpbmcuY29uZmlnX2dlbmVyYXRpb24sIGdlbl9udW0pIHsK Pj4gKyAgICAgICAgICAgICAgICBpZiBsYXN0X2dlbmVyYXRpb24gPT0gZ2VuX251bSB7Cj4gCj4g dGhlc2UgdHdvIGlmcyBjYW4gYmUgY29sbGFwc2VkIGludG8KPiAKPiBpZiBkYXRhc3RvcmUuY29u ZmlnX2dlbmVyYXRpb24gPT0gZ2VuX251bSAmJiBnZW5fbnVtLmlzX3NvbWUoKSB7Cj4gCj4gc2lu Y2Ugd2Ugb25seSB3YW50IHRvIHJldXNlIHRoZSBlbnRyeSBpZiB0aGUgY3VycmVudCBnZW4gbnVt IGlzIHRoZSBzYW1lCj4gYXMgdGhlIGxhc3Qgb25lLgo+IAoKV2lsbCBjb2xsYXBzZSB0aGUgdHdv IGlmcywgZ29vZCBjYXRjaCEKCj4+ICsgICAgICAgICAgICAgICAgICAgIGlmIGxldCBTb21lKG9w KSA9IG9wZXJhdGlvbiB7Cj4gCj4gYmluZGluZyBuZWVkbGVzc2x5IHJlbmFtZWQKPiAKCkFncmVl LCB3aWxsIHJldmVydCEKCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVfYWN0aXZl X29wZXJhdGlvbnMobmFtZSwgb3AsIDEpPzsKPj4gKyAgICAgICAgICAgICAgICAgICAgfQo+PiAr Cj4+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBPayhBcmM6Om5ldyhTZWxmIHsKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIGlubmVyOiBleGlzdGluZywKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIG9wZXJhdGlvbiwKPj4gKyAgICAgICAgICAgICAgICAgICAgfSkpOwo+PiAgICAg ICAgICAgICAgICAgICB9Cj4+IC0gICAgICAgICAgICAgICAgcmV0dXJuIE9rKEFyYzo6bmV3KFNl bGYgewo+PiAtICAgICAgICAgICAgICAgICAgICBpbm5lcjogQXJjOjpjbG9uZShkYXRhc3RvcmUp LAo+PiAtICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sCj4+IC0gICAgICAgICAgICAgICAg fSkpOwo+PiAgICAgICAgICAgICAgIH0KPj4gLSAgICAgICAgICAgIEFyYzo6Y2xvbmUoJmRhdGFz dG9yZS5jaHVua19zdG9yZSkKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIC8vIChSZSli dWlsZCBEYXRhU3RvcmVJbXBsCj4+ICsKPj4gKyAgICAgICAgLy8gUmV1c2UgY2h1bmsgc3RvcmUg c28gdGhhdCB3ZSBrZWVwIHVzaW5nIHRoZSBzYW1lIHByb2Nlc3MgbG9ja2VyIGluc3RhbmNlIQo+ PiArICAgICAgICBsZXQgY2h1bmtfc3RvcmUgPSBpZiBsZXQgU29tZShleGlzdGluZykgPSBkYXRh c3RvcmVfY2FjaGUuZ2V0KG5hbWUpIHsKPj4gKyAgICAgICAgICAgIEFyYzo6Y2xvbmUoJmV4aXN0 aW5nLmNodW5rX3N0b3JlKQo+IAo+IHRoaXMgb25lIGlzIG5vdCBuZWVkZWQgYXQgYWxsLCBjYW4g anVzdCBiZSBjb21iaW5lZCB3aXRoIHRoZSBwcmV2aW91cyBpZgo+IGFzIGJlZm9yZQo+CgpXaWxs IHJlZmFjdG9yIQoKPj4gICAgICAgICAgIH0gZWxzZSB7Cj4+ICAgICAgICAgICAgICAgbGV0IHR1 bmluZzogRGF0YXN0b3JlVHVuaW5nID0gc2VyZGVfanNvbjo6ZnJvbV92YWx1ZSgKPj4gICAgICAg ICAgICAgICAgICAgRGF0YXN0b3JlVHVuaW5nOjpBUElfU0NIRU1BCj4+IC0gICAgICAgICAgICAg ICAgICAgIC5wYXJzZV9wcm9wZXJ0eV9zdHJpbmcoY29uZmlnLnR1bmluZy5hc19kZXJlZigpLnVu d3JhcF9vcigiIikpPywKPj4gKyAgICAgICAgICAgICAgICAgICAgLnBhcnNlX3Byb3BlcnR5X3N0 cmluZyhkYXRhc3RvcmVfY2ZnLnR1bmluZy5hc19kZXJlZigpLnVud3JhcF9vcigiIikpPywKPj4g ICAgICAgICAgICAgICApPzsKPj4gICAgICAgICAgICAgICBBcmM6Om5ldyhDaHVua1N0b3JlOjpv cGVuKAo+PiAgICAgICAgICAgICAgICAgICBuYW1lLAo+PiAtICAgICAgICAgICAgICAgIGNvbmZp Zy5hYnNvbHV0ZV9wYXRoKCksCj4+ICsgICAgICAgICAgICAgICAgZGF0YXN0b3JlX2NmZy5hYnNv bHV0ZV9wYXRoKCksCj4+ICAgICAgICAgICAgICAgICAgIHR1bmluZy5zeW5jX2xldmVsLnVud3Jh cF9vcl9kZWZhdWx0KCksCj4+ICAgICAgICAgICAgICAgKT8pCj4+ICAgICAgICAgICB9Owo+PiAg IAo+PiAtICAgICAgICBsZXQgZGF0YXN0b3JlID0gRGF0YVN0b3JlOjp3aXRoX3N0b3JlX2FuZF9j b25maWcoY2h1bmtfc3RvcmUsIGNvbmZpZywgU29tZShkaWdlc3QpKT87Cj4+ICsgICAgICAgIGxl dCBkYXRhc3RvcmUgPSBEYXRhU3RvcmU6OndpdGhfc3RvcmVfYW5kX2NvbmZpZyhjaHVua19zdG9y ZSwgZGF0YXN0b3JlX2NmZywgZ2VuX251bSk/Owo+PiAgIAo+PiAgICAgICAgICAgbGV0IGRhdGFz dG9yZSA9IEFyYzo6bmV3KGRhdGFzdG9yZSk7Cj4+ICAgICAgICAgICBkYXRhc3RvcmVfY2FjaGUu aW5zZXJ0KG5hbWUudG9fc3RyaW5nKCksIGRhdGFzdG9yZS5jbG9uZSgpKTsKPj4gQEAgLTUxNCw3 ICs1ODQsNyBAQCBpbXBsIERhdGFTdG9yZSB7Cj4+ICAgICAgIGZuIHdpdGhfc3RvcmVfYW5kX2Nv bmZpZygKPj4gICAgICAgICAgIGNodW5rX3N0b3JlOiBBcmM8Q2h1bmtTdG9yZT4sCj4+ICAgICAg ICAgICBjb25maWc6IERhdGFTdG9yZUNvbmZpZywKPj4gLSAgICAgICAgbGFzdF9kaWdlc3Q6IE9w dGlvbjxbdTg7IDMyXT4sCj4+ICsgICAgICAgIGdlbmVyYXRpb246IE9wdGlvbjx1c2l6ZT4sCj4+ ICAgICAgICkgLT4gUmVzdWx0PERhdGFTdG9yZUltcGwsIEVycm9yPiB7Cj4+ICAgICAgICAgICBs ZXQgbXV0IGdjX3N0YXR1c19wYXRoID0gY2h1bmtfc3RvcmUuYmFzZV9wYXRoKCk7Cj4+ICAgICAg ICAgICBnY19zdGF0dXNfcGF0aC5wdXNoKCIuZ2Mtc3RhdHVzIik7Cj4+IEBAIC01NzksMTEgKzY0 OSwxMSBAQCBpbXBsIERhdGFTdG9yZSB7Cj4+ICAgICAgICAgICAgICAgbGFzdF9nY19zdGF0dXM6 IE11dGV4OjpuZXcoZ2Nfc3RhdHVzKSwKPj4gICAgICAgICAgICAgICB2ZXJpZnlfbmV3OiBjb25m aWcudmVyaWZ5X25ldy51bndyYXBfb3IoZmFsc2UpLAo+PiAgICAgICAgICAgICAgIGNodW5rX29y ZGVyOiB0dW5pbmcuY2h1bmtfb3JkZXIudW53cmFwX29yX2RlZmF1bHQoKSwKPj4gLSAgICAgICAg ICAgIGxhc3RfZGlnZXN0LAo+PiAgICAgICAgICAgICAgIHN5bmNfbGV2ZWw6IHR1bmluZy5zeW5j X2xldmVsLnVud3JhcF9vcl9kZWZhdWx0KCksCj4+ICAgICAgICAgICAgICAgYmFja2VuZF9jb25m aWcsCj4+ICAgICAgICAgICAgICAgbHJ1X3N0b3JlX2NhY2hpbmcsCj4+ICAgICAgICAgICAgICAg dGhyZWFkX3NldHRpbmdzLAo+PiArICAgICAgICAgICAgY29uZmlnX2dlbmVyYXRpb246IGdlbmVy YXRpb24sCj4+ICAgICAgICAgICB9KQo+PiAgICAgICB9Cj4+ICAgCj4+IC0tIAo+PiAyLjQ3LjMK Pj4KPj4KPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KPj4gcGJzLWRldmVsIG1haWxpbmcgbGlzdAo+PiBwYnMtZGV2ZWxAbGlzdHMucHJveG1veC5j b20KPj4gaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8v cGJzLWRldmVsCj4+Cj4gCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiBwYnMtZGV2ZWwgbWFpbGluZyBsaXN0Cj4gcGJzLWRldmVsQGxpc3RzLnBy b3htb3guY29tCj4gaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlz dGluZm8vcGJzLWRldmVsCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCnBicy1kZXZlbCBtYWlsaW5nIGxpc3QKcGJzLWRldmVsQGxpc3RzLnByb3htb3gu Y29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3Bi cy1kZXZlbAo=