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 9E1911FF187 for ; Fri, 2 Jan 2026 17:07:41 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id AB6B5EADF; Fri, 2 Jan 2026 17:08:51 +0100 (CET) From: Samuel Rufinatscha To: pbs-devel@lists.proxmox.com Date: Fri, 2 Jan 2026 17:07:45 +0100 Message-ID: <20260102160750.285157-7-s.rufinatscha@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260102160750.285157-1-s.rufinatscha@proxmox.com> References: <20260102160750.285157-1-s.rufinatscha@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1767370060777 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.186 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 POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox v3 2/4] proxmox-access-control: cache verified API token secrets 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" Q3VycmVudGx5LCBldmVyeSB0b2tlbi1iYXNlZCBBUEkgcmVxdWVzdCByZWFkcyB0aGUgdG9rZW4u c2hhZG93IGZpbGUgYW5kCnJ1bnMgdGhlIGV4cGVuc2l2ZSBwYXNzd29yZCBoYXNoIHZlcmlmaWNh dGlvbiBmb3IgdGhlIGdpdmVuIHRva2VuCnNlY3JldC4gVGhpcyBpc3N1ZSB3YXMgZmlyc3Qgb2Jz ZXJ2ZWQgYXMgcGFydCBvZiBwcm9maWxpbmcgdGhlIFBCUwovc3RhdHVzIGVuZHBvaW50IChzZWUg YnVnICM3MDE3IFsxXSkgYW5kIGlzIHJlcXVpcmVkIGZvciB0aGUgZmFjdG9yZWQKb3V0IHByb3ht b3hfYWNjZXNzX2NvbnRyb2wgdG9rZW5fc2hhZG93IGltcGxlbWVudGF0aW9uIHRvby4KClRoaXMg cGF0Y2ggaW50cm9kdWNlcyBhbiBpbi1tZW1vcnkgY2FjaGUgb2Ygc3VjY2Vzc2Z1bGx5IHZlcmlm aWVkIHRva2VuCnNlY3JldHMuIFN1YnNlcXVlbnQgcmVxdWVzdHMgZm9yIHRoZSBzYW1lIHRva2Vu K3NlY3JldCBjb21iaW5hdGlvbiBvbmx5CnBlcmZvcm0gYSBjb21wYXJpc29uIHVzaW5nIG9wZW5z c2w6Om1lbWNtcDo6ZXEgYW5kIGF2b2lkIHJlLXJ1bm5pbmcgdGhlCnBhc3N3b3JkIGhhc2guIFRo ZSBjYWNoZSBpcyB1cGRhdGVkIHdoZW4gYSB0b2tlbiBzZWNyZXQgaXMgc2V0IGFuZApjbGVhcmVk IHdoZW4gYSB0b2tlbiBpcyBkZWxldGVkLiBOb3RlLCB0aGlzIGRvZXMgTk9UIGluY2x1ZGUgbWFu dWFsCmNvbmZpZyBjaGFuZ2VzLCB3aGljaCB3aWxsIGJlIGNvdmVyZWQgaW4gYSBzdWJzZXF1ZW50 IHBhdGNoLgoKVGhpcyBwYXRjaCBpcyBwYXJ0IG9mIHRoZSBzZXJpZXMgd2hpY2ggZml4ZXMgYnVn ICM3MDE3IFsxXS4KClsxXSBodHRwczovL2J1Z3ppbGxhLnByb3htb3guY29tL3Nob3dfYnVnLmNn aT9pZD03MDE3CgpTaWduZWQtb2ZmLWJ5OiBTYW11ZWwgUnVmaW5hdHNjaGEgPHMucnVmaW5hdHNj aGFAcHJveG1veC5jb20+Ci0tLQpDaGFuZ2VzIGZyb20gdjEgdG8gdjI6CgoqIFJlcGxhY2UgT25j ZUNlbGwgd2l0aCBMYXp5TG9jaywgYW5kIHN0ZDo6c3luYzo6UndMb2NrIHdpdGgKcGFya2luZ19s b3Q6OlJ3TG9jay4KKiBBZGQgQVBJX01VVEFUSU9OX0dFTkVSQVRJT04gYW5kIGd1YXJkIGNhY2hl IGluc2VydHMKdG8gcHJldmVudCDigJx6b21iaWUgaW5zZXJ0c+KAnSBhY3Jvc3MgY29uY3VycmVu dCBzZXQvZGVsZXRlLgoqIFJlZmFjdG9yIGNhY2hlIG9wZXJhdGlvbnMgaW50byBjYWNoZV90cnlf c2VjcmV0X21hdGNoZXMsCmNhY2hlX3RyeV9pbnNlcnRfc2VjcmV0LCBhbmQgY2VudHJhbGl6ZSB3 cml0ZS1zaWRlIGJlaGF2aW9yIGluCmFwcGx5X2FwaV9tdXRhdGlvbi4KKiBTd2l0Y2ggZmFzdC1w YXRoIGNhY2hlIGFjY2VzcyB0byB0cnlfcmVhZC90cnlfd3JpdGUgKGJlc3QtZWZmb3J0KS4KCkNo YW5nZXMgZnJvbSB2MiB0byB2MzoKCiogUmVwbGFjZWQgcHJvY2Vzcy1sb2NhbCBjYWNoZSBpbnZh bGlkYXRpb24gKEF0b21pY1U2NApBUElfTVVUQVRJT05fR0VORVJBVElPTikgd2l0aCBhIGNyb3Nz LXByb2Nlc3Mgc2hhcmVkIGdlbmVyYXRpb24gdmlhCkNvbmZpZ1ZlcnNpb25DYWNoZS4KKiBWYWxp ZGF0ZSBzaGFyZWQgZ2VuZXJhdGlvbiBiZWZvcmUvYWZ0ZXIgdGhlIGNvbnN0YW50LXRpbWUgc2Vj cmV0CmNvbXBhcmU7IG9ubHkgaW5zZXJ0IGludG8gY2FjaGUgaWYgdGhlIGdlbmVyYXRpb24gaXMg dW5jaGFuZ2VkLgoqIGludmFsaWRhdGVfY2FjaGVfc3RhdGUoKSBvbiBpbnNlcnQgaWYgc2hhcmVk IGdlbmVyYXRpb24gY2hhbmdlZC4KCiBDYXJnby50b21sICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogcHJveG1veC1hY2Nlc3MtY29udHJvbC9DYXJnby50b21sICAgICAg ICAgIHwgICAxICsKIHByb3htb3gtYWNjZXNzLWNvbnRyb2wvc3JjL3Rva2VuX3NoYWRvdy5ycyB8 IDE1NCArKysrKysrKysrKysrKysrKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgMTU1IGluc2VydGlv bnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9DYXJnby50b21sIGIvQ2FyZ28udG9t bAppbmRleCAyN2E2OWFmYS4uNTlhMmVjOTMgMTAwNjQ0Ci0tLSBhL0NhcmdvLnRvbWwKKysrIGIv Q2FyZ28udG9tbApAQCAtMTEyLDYgKzExMiw3IEBAIG5hdGl2ZS10bHMgPSAiMC4yIgogbml4ID0g IjAuMjkiCiBvcGVuc3NsID0gIjAuMTAiCiBwYW0tc3lzID0gIjAuNSIKK3BhcmtpbmdfbG90ID0g IjAuMTIiCiBwZXJjZW50LWVuY29kaW5nID0gIjIuMSIKIHBpbi11dGlscyA9ICIwLjEuMCIKIHBy b2MtbWFjcm8yID0gIjEuMCIKZGlmZiAtLWdpdCBhL3Byb3htb3gtYWNjZXNzLWNvbnRyb2wvQ2Fy Z28udG9tbCBiL3Byb3htb3gtYWNjZXNzLWNvbnRyb2wvQ2FyZ28udG9tbAppbmRleCBlYzE4OTY2 NC4uMWRlMjg0MmMgMTAwNjQ0Ci0tLSBhL3Byb3htb3gtYWNjZXNzLWNvbnRyb2wvQ2FyZ28udG9t bAorKysgYi9wcm94bW94LWFjY2Vzcy1jb250cm9sL0NhcmdvLnRvbWwKQEAgLTE2LDYgKzE2LDcg QEAgYW55aG93LndvcmtzcGFjZSA9IHRydWUKIGNvbnN0X2Zvcm1hdC53b3Jrc3BhY2UgPSB0cnVl CiBuaXggPSB7IHdvcmtzcGFjZSA9IHRydWUsIG9wdGlvbmFsID0gdHJ1ZSB9CiBvcGVuc3NsID0g eyB3b3Jrc3BhY2UgPSB0cnVlLCBvcHRpb25hbCA9IHRydWUgfQorcGFya2luZ19sb3Qud29ya3Nw YWNlID0gdHJ1ZQogcmVnZXgud29ya3NwYWNlID0gdHJ1ZQogaGV4ID0geyB3b3Jrc3BhY2UgPSB0 cnVlLCBvcHRpb25hbCA9IHRydWUgfQogc2VyZGUud29ya3NwYWNlID0gdHJ1ZQpkaWZmIC0tZ2l0 IGEvcHJveG1veC1hY2Nlc3MtY29udHJvbC9zcmMvdG9rZW5fc2hhZG93LnJzIGIvcHJveG1veC1h Y2Nlc3MtY29udHJvbC9zcmMvdG9rZW5fc2hhZG93LnJzCmluZGV4IGM1ODZkODM0Li44OTUzMDlk MiAxMDA2NDQKLS0tIGEvcHJveG1veC1hY2Nlc3MtY29udHJvbC9zcmMvdG9rZW5fc2hhZG93LnJz CisrKyBiL3Byb3htb3gtYWNjZXNzLWNvbnRyb2wvc3JjL3Rva2VuX3NoYWRvdy5ycwpAQCAtMSwx MyArMSwyOCBAQAogdXNlIHN0ZDo6Y29sbGVjdGlvbnM6Okhhc2hNYXA7Cit1c2Ugc3RkOjpzeW5j OjpMYXp5TG9jazsKIAogdXNlIGFueWhvdzo6e2JhaWwsIGZvcm1hdF9lcnIsIEVycm9yfTsKK3Vz ZSBwYXJraW5nX2xvdDo6UndMb2NrOwogdXNlIHNlcmRlX2pzb246Ontmcm9tX3ZhbHVlLCBWYWx1 ZX07CiAKIHVzZSBwcm94bW94X2F1dGhfYXBpOjp0eXBlczo6QXV0aGlkOwogdXNlIHByb3htb3hf cHJvZHVjdF9jb25maWc6OntvcGVuX2FwaV9sb2NrZmlsZSwgcmVwbGFjZV9jb25maWcsIEFwaUxv Y2tHdWFyZH07CiAKK3VzZSBjcmF0ZTo6aW5pdDo6YWNjZXNzX2NvbmY7CiB1c2UgY3JhdGU6Omlu aXQ6OmltcGxfZmVhdHVyZTo6e3Rva2VuX3NoYWRvdywgdG9rZW5fc2hhZG93X2xvY2t9OwogCisv Ly8gR2xvYmFsIGluLW1lbW9yeSBjYWNoZSBmb3Igc3VjY2Vzc2Z1bGx5IHZlcmlmaWVkIEFQSSB0 b2tlbiBzZWNyZXRzLgorLy8vIFRoZSBjYWNoZSBzdG9yZXMgcGxhaW4gdGV4dCBzZWNyZXRzIGZv ciB0b2tlbiBBdXRoaWRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4KKy8vLyB2ZXJpZmllZCBhZ2Fp bnN0IHRoZSBoYXNoZWQgdmFsdWVzIGluIGB0b2tlbi5zaGFkb3dgLiBUaGlzIGFsbG93cyBmb3Ig Y2hlYXAKKy8vLyBzdWJzZXF1ZW50IGF1dGhlbnRpY2F0aW9ucyBmb3IgdGhlIHNhbWUgdG9rZW4r c2VjcmV0IGNvbWJpbmF0aW9uLCBhdm9pZGluZworLy8vIHJlY29tcHV0aW5nIHRoZSBwYXNzd29y ZCBoYXNoIG9uIGV2ZXJ5IHJlcXVlc3QuCitzdGF0aWMgVE9LRU5fU0VDUkVUX0NBQ0hFOiBMYXp5 TG9jazxSd0xvY2s8QXBpVG9rZW5TZWNyZXRDYWNoZT4+ID0gTGF6eUxvY2s6Om5ldyh8fCB7Cisg ICAgUndMb2NrOjpuZXcoQXBpVG9rZW5TZWNyZXRDYWNoZSB7CisgICAgICAgIHNlY3JldHM6IEhh c2hNYXA6Om5ldygpLAorICAgICAgICBzaGFyZWRfZ2VuOiAwLAorICAgIH0pCit9KTsKKwogLy8g R2V0IGV4Y2x1c2l2ZSBsb2NrCiBmbiBsb2NrX2NvbmZpZygpIC0+IFJlc3VsdDxBcGlMb2NrR3Vh cmQsIEVycm9yPiB7CiAgICAgb3Blbl9hcGlfbG9ja2ZpbGUodG9rZW5fc2hhZG93X2xvY2soKSwg Tm9uZSwgdHJ1ZSkKQEAgLTM2LDkgKzUxLDI3IEBAIHB1YiBmbiB2ZXJpZnlfc2VjcmV0KHRva2Vu aWQ6ICZBdXRoaWQsIHNlY3JldDogJnN0cikgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewogICAgICAg ICBiYWlsISgibm90IGFuIEFQSSB0b2tlbiBJRCIpOwogICAgIH0KIAorICAgIC8vIEZhc3QgcGF0 aAorICAgIGlmIGNhY2hlX3RyeV9zZWNyZXRfbWF0Y2hlcyh0b2tlbmlkLCBzZWNyZXQpIHsKKyAg ICAgICAgcmV0dXJuIE9rKCgpKTsKKyAgICB9CisKKyAgICAvLyBTbG93IHBhdGgKKyAgICAvLyBG aXJzdCwgY2FwdHVyZSB0aGUgc2hhcmVkIGdlbmVyYXRpb24gYmVmb3JlIGRvaW5nIHRoZSBoYXNo IHZlcmlmaWNhdGlvbi4KKyAgICBsZXQgZ2VuX2JlZm9yZSA9IHRva2VuX3NoYWRvd19zaGFyZWRf Z2VuKCk7CisKICAgICBsZXQgZGF0YSA9IHJlYWRfZmlsZSgpPzsKICAgICBtYXRjaCBkYXRhLmdl dCh0b2tlbmlkKSB7Ci0gICAgICAgIFNvbWUoaGFzaGVkX3NlY3JldCkgPT4gcHJveG1veF9zeXM6 OmNyeXB0Ojp2ZXJpZnlfY3J5cHRfcHcoc2VjcmV0LCBoYXNoZWRfc2VjcmV0KSwKKyAgICAgICAg U29tZShoYXNoZWRfc2VjcmV0KSA9PiB7CisgICAgICAgICAgICBwcm94bW94X3N5czo6Y3J5cHQ6 OnZlcmlmeV9jcnlwdF9wdyhzZWNyZXQsIGhhc2hlZF9zZWNyZXQpPzsKKworICAgICAgICAgICAg Ly8gVHJ5IHRvIGNhY2hlIG9ubHkgaWYgbm90aGluZyBjaGFuZ2VkIHdoaWxlIHZlcmlmeWluZyB0 aGUgc2VjcmV0LgorICAgICAgICAgICAgaWYgbGV0IFNvbWUoZ2VuKSA9IGdlbl9iZWZvcmUgewor ICAgICAgICAgICAgICAgIGNhY2hlX3RyeV9pbnNlcnRfc2VjcmV0KHRva2VuaWQuY2xvbmUoKSwg c2VjcmV0LnRvX293bmVkKCksIGdlbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE9r KCgpKQorICAgICAgICB9CiAgICAgICAgIE5vbmUgPT4gYmFpbCEoImludmFsaWQgQVBJIHRva2Vu IiksCiAgICAgfQogfQpAQCAtNTYsNiArODksOCBAQCBwdWIgZm4gc2V0X3NlY3JldCh0b2tlbmlk OiAmQXV0aGlkLCBzZWNyZXQ6ICZzdHIpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKICAgICBkYXRh Lmluc2VydCh0b2tlbmlkLmNsb25lKCksIGhhc2hlZF9zZWNyZXQpOwogICAgIHdyaXRlX2ZpbGUo ZGF0YSk/OwogCisgICAgYXBwbHlfYXBpX211dGF0aW9uKHRva2VuaWQsIFNvbWUoc2VjcmV0KSk7 CisKICAgICBPaygoKSkKIH0KIApAQCAtNzEsNiArMTA2LDggQEAgcHViIGZuIGRlbGV0ZV9zZWNy ZXQodG9rZW5pZDogJkF1dGhpZCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewogICAgIGRhdGEucmVt b3ZlKHRva2VuaWQpOwogICAgIHdyaXRlX2ZpbGUoZGF0YSk/OwogCisgICAgYXBwbHlfYXBpX211 dGF0aW9uKHRva2VuaWQsIE5vbmUpOworCiAgICAgT2soKCkpCiB9CiAKQEAgLTgxLDMgKzExOCwx MTggQEAgcHViIGZuIGdlbmVyYXRlX2FuZF9zZXRfc2VjcmV0KHRva2VuaWQ6ICZBdXRoaWQpIC0+ IFJlc3VsdDxTdHJpbmcsIEVycm9yPiB7CiAgICAgc2V0X3NlY3JldCh0b2tlbmlkLCAmc2VjcmV0 KT87CiAgICAgT2soc2VjcmV0KQogfQorCitzdHJ1Y3QgQXBpVG9rZW5TZWNyZXRDYWNoZSB7Cisg ICAgLy8vIEtleXMgYXJlIHRva2VuIEF1dGhpZHMsIHZhbHVlcyBhcmUgdGhlIGNvcnJlc3BvbmRp bmcgcGxhaW4gdGV4dCBzZWNyZXRzLgorICAgIC8vLyBFbnRyaWVzIGFyZSBhZGRlZCBhZnRlciBh IHN1Y2Nlc3NmdWwgb24tZGlzayB2ZXJpZmljYXRpb24gaW4KKyAgICAvLy8gYHZlcmlmeV9zZWNy ZXRgIG9yIHdoZW4gYSBuZXcgdG9rZW4gc2VjcmV0IGlzIGdlbmVyYXRlZCBieQorICAgIC8vLyBg Z2VuZXJhdGVfYW5kX3NldF9zZWNyZXRgLiBVc2VkIHRvIGF2b2lkIHJlcGVhdGVkCisgICAgLy8v IHBhc3N3b3JkLWhhc2ggY29tcHV0YXRpb24gb24gc3Vic2VxdWVudCBhdXRoZW50aWNhdGlvbnMu CisgICAgc2VjcmV0czogSGFzaE1hcDxBdXRoaWQsIENhY2hlZFNlY3JldD4sCisgICAgLy8vIFNo YXJlZCBnZW5lcmF0aW9uIHRvIGRldGVjdCBtdXRhdGlvbnMgb2YgdGhlIHVuZGVybHlpbmcgdG9r ZW4uc2hhZG93IGZpbGUuCisgICAgc2hhcmVkX2dlbjogdXNpemUsCit9CisKKy8vLyBDYWNoZWQg c2VjcmV0Lgorc3RydWN0IENhY2hlZFNlY3JldCB7CisgICAgc2VjcmV0OiBTdHJpbmcsCit9CisK K2ZuIGNhY2hlX3RyeV9pbnNlcnRfc2VjcmV0KHRva2VuaWQ6IEF1dGhpZCwgc2VjcmV0OiBTdHJp bmcsIHNoYXJlZF9nZW5fYmVmb3JlOiB1c2l6ZSkgeworICAgIGxldCBTb21lKG11dCBjYWNoZSkg PSBUT0tFTl9TRUNSRVRfQ0FDSEUudHJ5X3dyaXRlKCkgZWxzZSB7CisgICAgICAgIHJldHVybjsK KyAgICB9OworCisgICAgbGV0IFNvbWUoc2hhcmVkX2dlbl9ub3cpID0gdG9rZW5fc2hhZG93X3No YXJlZF9nZW4oKSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOworICAgIH07CisKKyAgICAvLyBJZiB0 aGlzIHByb2Nlc3MgbWlzc2VkIGEgZ2VuZXJhdGlvbiBidW1wLCBpdHMgY2FjaGUgaXMgc3RhbGUu CisgICAgaWYgY2FjaGUuc2hhcmVkX2dlbiAhPSBzaGFyZWRfZ2VuX25vdyB7CisgICAgICAgIGlu dmFsaWRhdGVfY2FjaGVfc3RhdGUoJm11dCBjYWNoZSk7CisgICAgICAgIGNhY2hlLnNoYXJlZF9n ZW4gPSBzaGFyZWRfZ2VuX25vdzsKKyAgICB9CisKKyAgICAvLyBJZiBhIG11dGF0aW9uIGhhcHBl bmVkIHdoaWxlIHdlIHdlcmUgdmVyaWZ5aW5nIHRoZSBzZWNyZXQsIGRvIG5vdCBpbnNlcnQuCisg ICAgaWYgc2hhcmVkX2dlbl9ub3cgPT0gc2hhcmVkX2dlbl9iZWZvcmUgeworICAgICAgICBjYWNo ZS5zZWNyZXRzLmluc2VydCh0b2tlbmlkLCBDYWNoZWRTZWNyZXQgeyBzZWNyZXQgfSk7CisgICAg fQorfQorCisvLyBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gdG9rZW4gc2VjcmV0IGFnYWluc3Qg dGhlIGNhY2hlZCBzZWNyZXQuCisvLyBDaGVja3MgdGhlIGdlbmVyYXRpb24gYmVmb3JlIGFuZCBh ZnRlciB0aGUgY29uc3RhbnQtdGltZSBjb21wYXJlIHRvIGF2b2lkIGEKKy8vIFRPQ1RPVSB3aW5k b3cuIElmIGFub3RoZXIgcHJvY2VzcyByb3RhdGVzL2RlbGV0ZXMgYSB0b2tlbiB3aGlsZSB3ZSdy ZSB2YWxpZGF0aW5nCisvLyB0aGUgY2FjaGVkIHNlY3JldCwgdGhlIGdlbmVyYXRpb24gd2lsbCBj aGFuZ2UsIGFuZCB3ZQorLy8gbXVzdCBub3QgdHJ1c3QgdGhlIGNhY2hlIGZvciB0aGlzIHJlcXVl c3QuCitmbiBjYWNoZV90cnlfc2VjcmV0X21hdGNoZXModG9rZW5pZDogJkF1dGhpZCwgc2VjcmV0 OiAmc3RyKSAtPiBib29sIHsKKyAgICBsZXQgU29tZShjYWNoZSkgPSBUT0tFTl9TRUNSRVRfQ0FD SEUudHJ5X3JlYWQoKSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAg bGV0IFNvbWUoZW50cnkpID0gY2FjaGUuc2VjcmV0cy5nZXQodG9rZW5pZCkgZWxzZSB7CisgICAg ICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgbGV0IGNhY2hlX2dlbiA9IGNhY2hlLnNo YXJlZF9nZW47CisKKyAgICBsZXQgU29tZShnZW4xKSA9IHRva2VuX3NoYWRvd19zaGFyZWRfZ2Vu KCkgZWxzZSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIGlmIGdlbjEgIT0g Y2FjaGVfZ2VuIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGxldCBlcSA9 IG9wZW5zc2w6Om1lbWNtcDo6ZXEoZW50cnkuc2VjcmV0LmFzX2J5dGVzKCksIHNlY3JldC5hc19i eXRlcygpKTsKKworICAgIGxldCBTb21lKGdlbjIpID0gdG9rZW5fc2hhZG93X3NoYXJlZF9nZW4o KSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBlcSAmJiBnZW4y ID09IGNhY2hlX2dlbgorfQorCitmbiBhcHBseV9hcGlfbXV0YXRpb24odG9rZW5pZDogJkF1dGhp ZCwgbmV3X3NlY3JldDogT3B0aW9uPCZzdHI+KSB7CisgICAgLy8gU2lnbmFsIGNhY2hlIGludmFs aWRhdGlvbiB0byBvdGhlciBwcm9jZXNzZXMgKGJlc3QtZWZmb3J0KS4KKyAgICBsZXQgbmV3X3No YXJlZF9nZW4gPSBidW1wX3Rva2VuX3NoYWRvd19zaGFyZWRfZ2VuKCk7CisKKyAgICBsZXQgbXV0 IGNhY2hlID0gVE9LRU5fU0VDUkVUX0NBQ0hFLndyaXRlKCk7CisKKyAgICAvLyBJZiB3ZSBjYW5u b3QgcmVhZC9idW1wIHRoZSBzaGFyZWQgZ2VuZXJhdGlvbiwgd2UgY2Fubm90IHNhZmVseSB0cnVz dCB0aGUgY2FjaGUuCisgICAgbGV0IFNvbWUoZ2VuKSA9IG5ld19zaGFyZWRfZ2VuIGVsc2Ugewor ICAgICAgICBpbnZhbGlkYXRlX2NhY2hlX3N0YXRlKCZtdXQgY2FjaGUpOworICAgICAgICBjYWNo ZS5zaGFyZWRfZ2VuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH07CisKKyAgICAvLyBVcGRh dGUgdG8gdGhlIHBvc3QtbXV0YXRpb24gZ2VuZXJhdGlvbi4KKyAgICBjYWNoZS5zaGFyZWRfZ2Vu ID0gZ2VuOworCisgICAgLy8gQXBwbHkgdGhlIG5ldyBtdXRhdGlvbi4KKyAgICBtYXRjaCBuZXdf c2VjcmV0IHsKKyAgICAgICAgU29tZShzZWNyZXQpID0+IHsKKyAgICAgICAgICAgIGNhY2hlLnNl Y3JldHMuaW5zZXJ0KAorICAgICAgICAgICAgICAgIHRva2VuaWQuY2xvbmUoKSwKKyAgICAgICAg ICAgICAgICBDYWNoZWRTZWNyZXQgeworICAgICAgICAgICAgICAgICAgICBzZWNyZXQ6IHNlY3Jl dC50b19vd25lZCgpLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICApOworICAgICAg ICB9CisgICAgICAgIE5vbmUgPT4geworICAgICAgICAgICAgY2FjaGUuc2VjcmV0cy5yZW1vdmUo dG9rZW5pZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vLyBHZXQgdGhlIGN1cnJlbnQgc2hh cmVkIGdlbmVyYXRpb24uCitmbiB0b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpIC0+IE9wdGlvbjx1 c2l6ZT4geworICAgIGFjY2Vzc19jb25mKCkudG9rZW5fc2hhZG93X2NhY2hlX2dlbmVyYXRpb24o KQorfQorCisvLy8gQnVtcCBhbmQgcmV0dXJuIHRoZSBuZXcgc2hhcmVkIGdlbmVyYXRpb24uCitm biBidW1wX3Rva2VuX3NoYWRvd19zaGFyZWRfZ2VuKCkgLT4gT3B0aW9uPHVzaXplPiB7CisgICAg YWNjZXNzX2NvbmYoKS5pbmNyZW1lbnRfdG9rZW5fc2hhZG93X2NhY2hlX2dlbmVyYXRpb24oKS5v aygpLm1hcCh8cHJldnwgcHJldiArIDEpCit9CisKKy8vLyBJbnZhbGlkYXRlcyB0aGUgY2FjaGUg c3RhdGUgYW5kIG9ubHkga2VlcHMgdGhlIHNoYXJlZCBnZW5lcmF0aW9uLgorZm4gaW52YWxpZGF0 ZV9jYWNoZV9zdGF0ZShjYWNoZTogJm11dCBBcGlUb2tlblNlY3JldENhY2hlKSB7CisgICAgY2Fj aGUuc2VjcmV0cy5jbGVhcigpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLS0gCjIu NDcuMwoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpw YnMtZGV2ZWwgbWFpbGluZyBsaXN0CnBicy1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczov L2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wYnMtZGV2ZWwK