Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wU4wP-000vr4-10 for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Jun 2026 15:52:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wU4wO-00AWb3-09 for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Jun 2026 15:52:36 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wU4wN-00AWav-29 for pgsql-hackers@lists.postgresql.org; Mon, 01 Jun 2026 15:52:35 +0000 Received: from mail-vs1-xe34.google.com ([2607:f8b0:4864:20::e34]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wU4wK-00000000gYt-46E2 for pgsql-hackers@lists.postgresql.org; Mon, 01 Jun 2026 15:52:35 +0000 Received: by mail-vs1-xe34.google.com with SMTP id ada2fe7eead31-6c50579dc4aso844966137.0 for ; Mon, 01 Jun 2026 08:52:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780329151; cv=none; d=google.com; s=arc-20240605; b=Eqg56hZvoqy+6qVTYg79mXokOHh+hQ7H0t0+FoDXMSiDHdC0fYGD/qI10dVQauvZEI u/8ydCHalkFpV1cLceCX876E25xG6eRk2iiWzDbMOpYB3BJinY/nKkVXgRZLNqb7inA/ DaedifgxzFPuQSFCfVFBqAkEQaQcunC8o0QrjKPUQoralm7FGRx9NCVbHcy+5pD7xhwi gp4Q/deuGTm0ds/UZ7j5UIcjCsGv+IrtebkN1Wh6rJTigZ7zVxz4wA+HlwaEvrDK1oTP gPUz602q9jzt33CV/jAYq95817jZUJh05n89WhFj05v8paM2hw7v/kOAXkFsCEW3nRX2 kKEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=2EtpJLPkGYKSva4F75O1hFp259YU4+473HFBae2ykuM=; fh=mUI0sG64Yg3pLNhFwPOHMgBN1cF4Xk/w3KBaXLBCwZo=; b=SsS0ODQ2HzvA5a2gsjDlTJEm/VoVBI++SQioNi5YVTsiWLNUrG1ElYLSIy7FfFLWyk 64M2OjgkQsYmH9T91yvhxHwxiGNzv765dcw26/HqMoqORIOseeLLX4LbELtCfQttDkgv HeA3cMx4xSzIr2d0cG/idiI7pgZRiESn8vQ6CSBtiOIumIJ361IKlVZzzGGnAcRS771e 8is5Sz0/xIpWKEUxdIEAbWUYBGVEFbjL8RmKjYCHa5poLNTBjcZZQZkenWaD+IHX0zUM c79bcQ34ehAaMH/1vyy2orWqMVciBGtnCIE6YzjI/hYFu1i6s9dX8lrgtiNSbigOQRhM hprQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780329151; x=1780933951; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=2EtpJLPkGYKSva4F75O1hFp259YU4+473HFBae2ykuM=; b=fEgbGR+tOA5ZjMuNbwEa4Rq/i6A6NjROQHaz4RnHjif0TpNlwhl9est/KKWuYPwHyA pzs9Tm9UaC6sTk1NA3YGucXch4uQO8gYzKW55G0Hhyu8mk1OlqLmcLDNQ36l/p2PrcVk lgohIsPZJUZY2wjxPWn5bum+GPQmtssB6DvKchn5T+iFHpcAP9B2Tz+pIMUS9czlc27S LGYwyBfK1wiztAZtKnDdoFHAbhPwcPe3vSvpGOiDXkyl2GMUKAAeblW3vaJSrlIrGPX7 PHb5Ya6B1USFbVD2JZc7GLRFHZndyp7tc1VlCT6tjt7qK/DguJXC3dkJ9vIwWYxqzvSx ERdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780329151; x=1780933951; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=2EtpJLPkGYKSva4F75O1hFp259YU4+473HFBae2ykuM=; b=N6LJUkdyQvcpDY/6JMZSxfcQLEWl9kunvC5gxQMxkcH367QvGZyMKA4qpRu264iWkM vP29mcXAEN5ILsPYmOl56td45FUBwyJD90AnMXT1N947O8hZqfQd7rkoLJij8wuc/Wto yhusLzOyu2zBrQIf5CgBMcX4AUvOBlfZaDwaUj4AIiucYu0jVFndz0QoymKeSvaeyKre MdVY7LawUwUW2xmN+EWvC152ZH7wCq3Z3NOEs+pVrWhRXWAB7H0l+GpKdieTx57e7tUa YhibPi9E0z+XZAI39AGvhLMqLKqKv1cWkluVJhYdt5MmRrExf8opRAwUMRc5h5ldMRKN WaeQ== X-Forwarded-Encrypted: i=1; AFNElJ/QzeKnq/u5XyWlEkHb5znTeLwsR5iR98sW9vMjQ+hPYmzbKP1XIXdrTT8/nYwb0A+iwkkV7QIFFGp5T2HJ@lists.postgresql.org X-Gm-Message-State: AOJu0YyNoWcAiaaETEfU4n8VhbbwTMmwGvVPWvbciL9lt6Z4auzfX1+o VkRTECTjSx+6+gtNMSOfNJxGexf3BnD6Ihu8YXx0HZ53v+ksd3r6RUexWjkgc8KHHGPcLjAZhJO FGvR2ZIgpm81iOhol2B9pOYXUeon7PLosUZn5ap0Vug== X-Gm-Gg: Acq92OGOGEGEnZp5pvk45A1yeLS6kQFWskydLxjCDIiMkTrCkACZa5AW/bvDBzwvHix wFSH6p4w+nTQRcTRrcZTkFAsQLMdnyysvH1KS5scDFGLyrGr9wySGU4YynyLLQBM6pm+mEjcaBr b3IrGyg3rwZMSro62cAuZnJ32ftUiEPMyDRGA/FZ2M0Nn3E0YU6TXR2lGH4ZyaHrRSAl8EUqc8A 5nqTGh1G177gUKM7SsEhcHiumqZRseJshhEFFUM9WwDFipeTeFepQ7FDBUpdsicCfq7qoedSXnv sORG1fVkdQyghGekZUlhH9H3JeApzieef4LSNfbiwsj2EyDmz1Hi0Ry0861OUdjJfdFZns8duYM GawSJ5iSAxFaOJw7+Zg/TJZRzNR4ohYt2GgVT5letFNUPxJFkn28oIV+8dsgvZzgKfLrAiTkp6X pjYeUhlVtfyx3k5Qwda2Z9AuER2ur4OZQL X-Received: by 2002:a05:6102:4194:b0:632:29a5:2b28 with SMTP id ada2fe7eead31-6c694f4ef7emr5178812137.6.1780329150821; Mon, 01 Jun 2026 08:52:30 -0700 (PDT) MIME-Version: 1.0 References: <7B7172F4-DB02-4259-997B-6AEF5ADF7FCE@gmail.com> In-Reply-To: <7B7172F4-DB02-4259-997B-6AEF5ADF7FCE@gmail.com> From: jian he Date: Mon, 1 Jun 2026 23:51:54 +0800 X-Gm-Features: AVHnY4KCzHedvFnU-xb4_8HA2BgNdO_NJEeDHSZLvSS1rJJrXY74pXIE-ACwhPw Message-ID: Subject: Re: Fix bug of CHECK constraint enforceability recursion To: Chao Li Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , "L. pgsql-hackers" , Andrew Dunstan Content-Type: multipart/mixed; boundary="0000000000009e5d7f0653332ead" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009e5d7f0653332ead Content-Type: text/plain; charset="UTF-8" Hi. I did some refactoring based on your v3, I didn't change your comments. I don't think ATGetEquivalentCheckConstraintOid is necessary. ATCheckCheckConstrHasEnforcedParent, AlterCheckConstrEnforceabilityRecurse is enough for this context. + changing_conids = lappend_oid(list_copy(changing_conids), + currcon->oid); Refactor changing_conids to List ** to allow direct modification, aligning with existing code conventions. CREATE TABLE ... PARTITION OF automatically copies the parent's status, and ALTER TABLE ... ATTACH PARTITION already rejects cases where the parent is enforced but the child is not. If we also reject directly altering a partition's constraint enforcement status, then we need no longer worry about cases where parent being enforced while a child is not. Therefore, invoking ATCheckCheckConstrHasEnforcedParent just once for table partitioning is safe. -- jian https://www.enterprisedb.com/ --0000000000009e5d7f0653332ead Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-Prevent-inherited-CHECK-constraints-from-being-weakened.patch" Content-Disposition: attachment; filename="v4-0001-Prevent-inherited-CHECK-constraints-from-being-weakened.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpvdxlev0 RnJvbSA1MzYwNGJkOWI1ZjkxNjQwMDBhZDRiMzZlODU5ZjNkZjdiNjA2Yzg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMSBKdW4gMjAyNiAyMTowMDo1NCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjQg MS8xXSBQcmV2ZW50IGluaGVyaXRlZCBDSEVDSyBjb25zdHJhaW50cyBmcm9tIGJlaW5nCiB3ZWFr ZW5lZAoKRGlzYWxsb3cgbWFya2luZyBhbiBpbmhlcml0ZWQgQ0hFQ0sgY29uc3RyYWludCBhcyBO T1QgRU5GT1JDRUQgd2hlbiBhbgplcXVpdmFsZW50IHBhcmVudCBjb25zdHJhaW50IHJlbWFpbnMg RU5GT1JDRUQuIFRoaXMgcHJldmVudHMgQUxURVIKQ09OU1RSQUlOVCBmcm9tIHByb2R1Y2luZyBh IGNoaWxkIGNvbnN0cmFpbnQgdGhhdCBpcyB3ZWFrZXIgdGhhbiBvbmUgb2YKaXRzIGluaGVyaXRl ZCBwYXJlbnQgZGVmaW5pdGlvbnMuCgpXaGVuIHJlY3Vyc2l2ZWx5IGFsdGVyaW5nIGEgQ0hFQ0sg Y29uc3RyYWludCB0byBOT1QgRU5GT1JDRUQsIGNvbGxlY3QgdGhlCmVxdWl2YWxlbnQgY29uc3Ry YWludHMgaW4gdGhlIGFmZmVjdGVkIGluaGVyaXRhbmNlIHN1YnRyZWUgYW5kIGlnbm9yZQp0aG9z ZSBwYXJlbnQgY29uc3RyYWludHMgd2hpbGUgY2hlY2tpbmcgZGVzY2VuZGFudHMuIElmIGEgZGVz Y2VuZGFudCBhbHNvCmluaGVyaXRzIGFuIGVxdWl2YWxlbnQgRU5GT1JDRUQgY29uc3RyYWludCBm cm9tIGEgcGFyZW50IG91dHNpZGUgdGhlCmN1cnJlbnQgQUxURVIsIGtlZXAgdGhlIGRlc2NlbmRh bnQgRU5GT1JDRUQgYnkgbWVyZ2luZyB0byB0aGUgc3RyaWN0ZXIKc3RhdGUuCgpBZGQgcmVncmVz c2lvbiBjb3ZlcmFnZSBmb3IgZGlyZWN0IGNoaWxkIEFMVEVSLCBPTkxZIEFMVEVSLCBtaXhlZC1w YXJlbnQKaW5oZXJpdGFuY2UsIGFuZCBhIGNvbW1vbi1hbmNlc3RvciBkaWFtb25kIHdoZXJlIGFs bCBlcXVpdmFsZW50IGluaGVyaXRlZApjb25zdHJhaW50cyBjYW4gYmUgY2hhbmdlZCB0b2dldGhl ci4KCkF1dGhvcjogQ2hhbyBMaSA8bGljQGhpZ2hnby5jb20+ClJldmlld2VkLWJ5OgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0U3NEM1N0ZBLTFERDAtNEM4RS04RkIxLTUzODAzNDc1 MjU5MkBnbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAg ICAgICB8IDE4NSArKysrKysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2NvbnN0cmFpbnRzLm91dCB8ICAxMiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9p bmhlcml0Lm91dCAgICAgfCAgNTYgKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29uc3Ry YWludHMuc3FsICAgICAgfCAgIDUgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2luaGVyaXQuc3Fs ICAgICAgICAgIHwgIDM0ICsrKysKIDUgZmlsZXMgY2hhbmdlZCwgMjgyIGluc2VydGlvbnMoKyks IDEwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggYTE4NDUyNDBh OTguLjc1YWRlMDUzYjM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNDM3LDYgKzQz Nyw3IEBAIHN0YXRpYyBib29sIEFURXhlY0FsdGVyRktDb25zdHJFbmZvcmNlYWJpbGl0eShMaXN0 ICoqd3F1ZXVlLCBBVEFsdGVyQ29uc3RyYWludCAqCiBzdGF0aWMgYm9vbCBBVEV4ZWNBbHRlckNo ZWNrQ29uc3RyRW5mb3JjZWFiaWxpdHkoTGlzdCAqKndxdWV1ZSwgQVRBbHRlckNvbnN0cmFpbnQg KmNtZGNvbiwKIAkJCQkJCQkJCQkJCSBSZWxhdGlvbiBjb25yZWwsIEhlYXBUdXBsZSBjb250dXBs ZSwKIAkJCQkJCQkJCQkJCSBib29sIHJlY3Vyc2UsIGJvb2wgcmVjdXJzaW5nLAorCQkJCQkJCQkJ CQkJIExpc3QgKipjaGFuZ2luZ19jb25pZHMsCiAJCQkJCQkJCQkJCQkgTE9DS01PREUgbG9ja21v ZGUpOwogc3RhdGljIGJvb2wgQVRFeGVjQWx0ZXJDb25zdHJEZWZlcnJhYmlsaXR5KExpc3QgKip3 cXVldWUsIEFUQWx0ZXJDb25zdHJhaW50ICpjbWRjb24sCiAJCQkJCQkJCQkJICAgUmVsYXRpb24g Y29ucmVsLCBSZWxhdGlvbiB0Z3JlbCwgUmVsYXRpb24gcmVsLApAQCAtNDU5LDYgKzQ2MCw3IEBA IHN0YXRpYyB2b2lkIEFsdGVyRktDb25zdHJFbmZvcmNlYWJpbGl0eVJlY3Vyc2UoTGlzdCAqKndx dWV1ZSwgQVRBbHRlckNvbnN0cmFpbnQKIHN0YXRpYyB2b2lkIEFsdGVyQ2hlY2tDb25zdHJFbmZv cmNlYWJpbGl0eVJlY3Vyc2UoTGlzdCAqKndxdWV1ZSwgQVRBbHRlckNvbnN0cmFpbnQgKmNtZGNv biwKIAkJCQkJCQkJCQkJCSAgUmVsYXRpb24gY29ucmVsLCBPaWQgY29ucmVsaWQsCiAJCQkJCQkJ CQkJCQkgIGJvb2wgcmVjdXJzZSwgYm9vbCByZWN1cnNpbmcsCisJCQkJCQkJCQkJCQkgIExpc3Qg KipjaGFuZ2luZ19jb25pZHMsCiAJCQkJCQkJCQkJCQkgIExPQ0tNT0RFIGxvY2ttb2RlKTsKIHN0 YXRpYyB2b2lkIEFsdGVyQ29uc3RyRGVmZXJyYWJpbGl0eVJlY3Vyc2UoTGlzdCAqKndxdWV1ZSwg QVRBbHRlckNvbnN0cmFpbnQgKmNtZGNvbiwKIAkJCQkJCQkJCQkJUmVsYXRpb24gY29ucmVsLCBS ZWxhdGlvbiB0Z3JlbCwgUmVsYXRpb24gcmVsLApAQCAtNDY2LDYgKzQ2OCwxMCBAQCBzdGF0aWMg dm9pZCBBbHRlckNvbnN0ckRlZmVycmFiaWxpdHlSZWN1cnNlKExpc3QgKip3cXVldWUsIEFUQWx0 ZXJDb25zdHJhaW50ICpjbQogCQkJCQkJCQkJCQlMaXN0ICoqb3RoZXJyZWxpZHMsIExPQ0tNT0RF IGxvY2ttb2RlKTsKIHN0YXRpYyB2b2lkIEFsdGVyQ29uc3RyVXBkYXRlQ29uc3RyYWludEVudHJ5 KEFUQWx0ZXJDb25zdHJhaW50ICpjbWRjb24sIFJlbGF0aW9uIGNvbnJlbCwKIAkJCQkJCQkJCQkJ IEhlYXBUdXBsZSBjb250dXBsZSk7CitzdGF0aWMgYm9vbCBBVENoZWNrQ2hlY2tDb25zdHJIYXNF bmZvcmNlZFBhcmVudChSZWxhdGlvbiBjb25yZWwsIFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJ CUhlYXBUdXBsZSBjb250dXBsZSwKKwkJCQkJCQkJCQkJCUxpc3QgKipjaGFuZ2luZ19jb25pZHMs CisJCQkJCQkJCQkJCQlPaWQgKmVuZm9yY2VkX3BhcmVudG9pZCk7CiBzdGF0aWMgT2JqZWN0QWRk cmVzcyBBVEV4ZWNWYWxpZGF0ZUNvbnN0cmFpbnQoTGlzdCAqKndxdWV1ZSwKIAkJCQkJCQkJCQkJ ICBSZWxhdGlvbiByZWwsIGNoYXIgKmNvbnN0ck5hbWUsCiAJCQkJCQkJCQkJCSAgYm9vbCByZWN1 cnNlLCBib29sIHJlY3Vyc2luZywgTE9DS01PREUgbG9ja21vZGUpOwpAQCAtNDc3LDYgKzQ4Myw3 IEBAIHN0YXRpYyB2b2lkIFF1ZXVlQ2hlY2tDb25zdHJhaW50VmFsaWRhdGlvbihMaXN0ICoqd3F1 ZXVlLCBSZWxhdGlvbiBjb25yZWwsIFJlbGF0CiBzdGF0aWMgdm9pZCBRdWV1ZU5OQ29uc3RyYWlu dFZhbGlkYXRpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gY29ucmVsLCBSZWxhdGlvbiByZWws CiAJCQkJCQkJCQkJSGVhcFR1cGxlIGNvbnR1cGxlLCBib29sIHJlY3Vyc2UsIGJvb2wgcmVjdXJz aW5nLAogCQkJCQkJCQkJCUxPQ0tNT0RFIGxvY2ttb2RlKTsKK3N0YXRpYyBib29sIGNvbnN0cmFp bnRzX2VxdWl2YWxlbnQoSGVhcFR1cGxlIGEsIEhlYXBUdXBsZSBiLCBUdXBsZURlc2MgdHVwbGVE ZXNjKTsKIHN0YXRpYyBpbnQJdHJhbnNmb3JtQ29sdW1uTmFtZUxpc3QoT2lkIHJlbElkLCBMaXN0 ICpjb2xMaXN0LAogCQkJCQkJCQkJaW50MTYgKmF0dG51bXMsIE9pZCAqYXR0dHlwaWRzLCBPaWQg KmF0dGNvbGxpZHMpOwogc3RhdGljIGludAl0cmFuc2Zvcm1Ga2V5R2V0UHJpbWFyeUtleShSZWxh dGlvbiBwa3JlbCwgT2lkICppbmRleE9pZCwKQEAgLTEyNDgyLDkgKzEyNDg5LDEzIEBAIEFURXhl Y0FsdGVyQ29uc3RyYWludEludGVybmFsKExpc3QgKip3cXVldWUsIEFUQWx0ZXJDb25zdHJhaW50 ICpjbWRjb24sCiAJCQkJCQkJCQkJCQkJCUludmFsaWRPaWQsIEludmFsaWRPaWQsCiAJCQkJCQkJ CQkJCQkJCUludmFsaWRPaWQsIEludmFsaWRPaWQpOwogCQllbHNlIGlmIChjdXJyY29uLT5jb250 eXBlID09IENPTlNUUkFJTlRfQ0hFQ0spCisJCXsKKwkJCUxpc3QJICAgKmNoYW5naW5nX2Nvbmlk cyA9IE5JTDsKKwogCQkJY2hhbmdlZCA9IEFURXhlY0FsdGVyQ2hlY2tDb25zdHJFbmZvcmNlYWJp bGl0eSh3cXVldWUsIGNtZGNvbiwgY29ucmVsLAogCQkJCQkJCQkJCQkJCQkgICBjb250dXBsZSwg cmVjdXJzZSwgZmFsc2UsCi0JCQkJCQkJCQkJCQkJCSAgIGxvY2ttb2RlKTsKKwkJCQkJCQkJCQkJ CQkJICAgJmNoYW5naW5nX2NvbmlkcywgbG9ja21vZGUpOworCQl9CiAJfQogCWVsc2UgaWYgKGNt ZGNvbi0+YWx0ZXJEZWZlcnJhYmlsaXR5ICYmCiAJCQkgQVRFeGVjQWx0ZXJDb25zdHJEZWZlcnJh YmlsaXR5KHdxdWV1ZSwgY21kY29uLCBjb25yZWwsIHRncmVsLCByZWwsCkBAIC0xMjY3MSw3ICsx MjY4Miw5IEBAIEFURXhlY0FsdGVyRktDb25zdHJFbmZvcmNlYWJpbGl0eShMaXN0ICoqd3F1ZXVl LCBBVEFsdGVyQ29uc3RyYWludCAqY21kY29uLAogc3RhdGljIGJvb2wKIEFURXhlY0FsdGVyQ2hl Y2tDb25zdHJFbmZvcmNlYWJpbGl0eShMaXN0ICoqd3F1ZXVlLCBBVEFsdGVyQ29uc3RyYWludCAq Y21kY29uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGNvbnJlbCwgSGVhcFR1cGxlIGNvbnR1cGxlLAot CQkJCQkJCQkJIGJvb2wgcmVjdXJzZSwgYm9vbCByZWN1cnNpbmcsIExPQ0tNT0RFIGxvY2ttb2Rl KQorCQkJCQkJCQkJIGJvb2wgcmVjdXJzZSwgYm9vbCByZWN1cnNpbmcsCisJCQkJCQkJCQkgTGlz dCAqKmNoYW5naW5nX2NvbmlkcywKKwkJCQkJCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSkKIHsKIAlG b3JtX3BnX2NvbnN0cmFpbnQgY3VycmNvbjsKIAlSZWxhdGlvbglyZWw7CkBAIC0xMjY5Myw2ICsx MjcwNiw2NiBAQCBBVEV4ZWNBbHRlckNoZWNrQ29uc3RyRW5mb3JjZWFiaWxpdHkoTGlzdCAqKndx dWV1ZSwgQVRBbHRlckNvbnN0cmFpbnQgKmNtZGNvbiwKIAkgKi8KIAlyZWwgPSB0YWJsZV9vcGVu KGN1cnJjb24tPmNvbnJlbGlkLCBOb0xvY2spOwogCisJLyoKKwkgKiBXaGVuIHNldHRpbmcgYSBj b25zdHJhaW50IHRvIE5PVCBFTkZPUkNFRCwgY2hlY2sgd2hldGhlciBhbnkgbWF0Y2hpbmcKKwkg KiBwYXJlbnQgY29uc3RyYWludCByZW1haW5zIEVORk9SQ0VEIGFuZCBpcyBub3QgcGFydCBvZiB0 aGlzIEFMVEVSLgorCSAqCisJICogRm9yIGEgZGlyZWN0IEFMVEVSIG9mIGFuIGluaGVyaXRlZCBj b25zdHJhaW50LCByZWplY3QgdGhlIGNvbW1hbmQsCisJICogYmVjYXVzZSB0aGUgY2hpbGQgY2Fu bm90IGJlIHdlYWtlbmVkIHdoaWxlIGl0cyBwYXJlbnQgcmVtYWlucyBlbmZvcmNlZC4KKwkgKgor CSAqIER1cmluZyByZWN1cnNpb24sIGFub3RoZXIgcGFyZW50IG91dHNpZGUgdGhpcyBBTFRFUiBt YXkgc3RpbGwgZW5mb3JjZQorCSAqIHRoZSBzYW1lIGNvbnN0cmFpbnQuIEluIHRoYXQgY2FzZSwg a2VlcCB0aGUgY2hpbGQgY29uc3RyYWludCBFTkZPUkNFRAorCSAqIHNvIHRoYXQgaXRzIG1lcmdl ZCBlbmZvcmNlYWJpbGl0eSBzdGlsbCByZWZsZWN0cyB0aGUgcmVtYWluaW5nIGVuZm9yY2VkCisJ ICogcGFyZW50LgorCSAqLworCWlmICghY21kY29uLT5pc19lbmZvcmNlZCkKKwl7CisJCU9pZAkJ CWVuZm9yY2VkX3BhcmVudG9pZCA9IEludmFsaWRPaWQ7CisKKwkJYm9vbAkJZW5mb3JjZWRfcGFy ZW50X2NvbnN0ciA9IGZhbHNlOworCisJCS8qCisJCSAqIEZvciBwYXJ0aXRpb25lZCB0YWJsZXMs IGEgb25lLXRpbWUgdmVyaWZpY2F0aW9uIGlzIG5lZWRlZCB0byBlbnN1cmUKKwkJICogdGhhdCBh IHBhcnRpdGlvbidzIGNvbnN0cmFpbnQgY2Fubm90IGJlIG1hcmtlZCBhcyB1bmVuZm9yY2VkIGlm IHRoZQorCQkgKiBwYXJlbnQncyBjb25zdHJhaW50IHJlbWFpbnMgZW5mb3JjZWQuCisJCSAqCisJ CSAqIEZvciB0cmFkaXRpb25hbCB0YWJsZSBpbmhlcml0YW5jZSwgaWYgYSBjb25zdHJhaW50IGlz IHVuZW5mb3JjZWQKKwkJICogYnV0IGl0cyBwYXJlbnQgY29uc3RyYWludCBpcyBlbmZvcmNlZCwg Ym90aCB0aGlzIGNvbnN0cmFpbnQgYW5kIGl0cworCQkgKiBkZXNjZW5kYW50cyBtdXN0IGJlIG1h cmtlZCBhcyBlbmZvcmNlZC4KKwkJICovCisJCWlmICgocmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0 aW9uICYmICFyZWN1cnNpbmcpIHx8CisJCQkoIXJlbC0+cmRfcmVsLT5yZWxpc3BhcnRpdGlvbiAm JiByZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKSkKKwkJ eworCQkJZW5mb3JjZWRfcGFyZW50X2NvbnN0ciA9IEFUQ2hlY2tDaGVja0NvbnN0ckhhc0VuZm9y Y2VkUGFyZW50KGNvbnJlbCwgcmVsLCBjb250dXBsZSwKKwkJCQkJCQkJCQkJCQkJCQkJCSBjaGFu Z2luZ19jb25pZHMsCisJCQkJCQkJCQkJCQkJCQkJCQkgJmVuZm9yY2VkX3BhcmVudG9pZCk7CisK KwkJCWlmIChlbmZvcmNlZF9wYXJlbnRfY29uc3RyKQorCQkJCWNtZGNvbi0+aXNfZW5mb3JjZWQg PSB0cnVlOworCQl9CisKKwkJaWYgKGVuZm9yY2VkX3BhcmVudF9jb25zdHIgJiYgIXJlY3Vyc2lu ZykKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVD VF9ERUZJTklUSU9OKSwKKwkJCQkJZXJybXNnKCJjYW5ub3QgbWFyayBpbmhlcml0ZWQgY29uc3Ry YWludCBcIiVzXCIgYXMgTk9UIEVORk9SQ0VEIGJlY2F1c2UgIgorCQkJCQkJICAgIm1hdGNoaW5n IGNvbnN0cmFpbnQgb24gcGFyZW50IHRhYmxlIFwiJXNcIiBpcyBFTkZPUkNFRCIsCisJCQkJCQkg ICBOYW1lU3RyKGN1cnJjb24tPmNvbm5hbWUpLAorCQkJCQkJICAgZ2V0X3JlbF9uYW1lKGVuZm9y Y2VkX3BhcmVudG9pZCkpKTsKKworCQkvKgorCQkgKiBCdWlsZCB0aGUgc2V0IG9mIGVxdWl2YWxl bnQgQ0hFQ0sgY29uc3RyYWludHMgdGhhdCB0aGlzIGNvbW1hbmQKKwkJICogd2lsbCBhdHRlbXB0 IHRvIGNoYW5nZSBiZWZvcmUgdmlzaXRpbmcgZGVzY2VuZGFudHMuIEVhY2ggZGVzY2VuZGFudAor CQkgKiBpcyBjb21wYXJlZCB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0IGNvbnN0cmFpbnQsIG5vdCBv bmx5IGJ5IG5hbWUuCisJCSAqIFRoZSByb290IGl0c2VsZiBoYXMgYWxyZWFkeSBiZWVuIGNoZWNr ZWQgYWJvdmUuCisJCSAqLworCQkqY2hhbmdpbmdfY29uaWRzID0gbGFwcGVuZF9vaWQoKmNoYW5n aW5nX2NvbmlkcywgY3VycmNvbi0+b2lkKTsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSB0byB0aGUg bWVyZ2VkIGVuZm9yY2VhYmlsaXR5IGlmIG5lZWRlZC4gVGhpcyBtYXkgZGlmZmVyIGZyb20gdGhl CisJICogcmVxdWVzdGVkIGVuZm9yY2VhYmlsaXR5IHdoZW4gYW5vdGhlciBtYXRjaGluZyBwYXJl bnQgY29uc3RyYWludAorCSAqIHJlbWFpbnMgZW5mb3JjZWQuCisJICovCiAJaWYgKGN1cnJjb24t PmNvbmVuZm9yY2VkICE9IGNtZGNvbi0+aXNfZW5mb3JjZWQpCiAJewogCQlBbHRlckNvbnN0clVw ZGF0ZUNvbnN0cmFpbnRFbnRyeShjbWRjb24sIGNvbnJlbCwgY29udHVwbGUpOwpAQCAtMTI3MDIs NyArMTI3NzUsOCBAQCBBVEV4ZWNBbHRlckNoZWNrQ29uc3RyRW5mb3JjZWFiaWxpdHkoTGlzdCAq KndxdWV1ZSwgQVRBbHRlckNvbnN0cmFpbnQgKmNtZGNvbiwKIAkvKgogCSAqIE5vdGUgdGhhdCB3 ZSBtdXN0IHJlY3Vyc2UgZXZlbiB3aGVuIHRyeWluZyB0byBjaGFuZ2UgYSBjaGVjayBjb25zdHJh aW50CiAJICogdG8gbm90IGVuZm9yY2VkIGlmIGl0IGlzIGFscmVhZHkgbm90IGVuZm9yY2VkLCBp biBjYXNlIGRlc2NlbmRhbnQKLQkgKiBjb25zdHJhaW50cyBtaWdodCBiZSBlbmZvcmNlZCBhbmQg bmVlZCB0byBiZSBjaGFuZ2VkIHRvIG5vdCBlbmZvcmNlZC4KKwkgKiBjb25zdHJhaW50cyBtaWdo dCBiZSBlbmZvcmNlZCBhbmQgbmVlZCB0byBiZSBjaGFuZ2VkIHRvIG5vdCBlbmZvcmNlZCwKKwkg KiB1bmxlc3MgdGhleSBzdGlsbCBpbmhlcml0IGFuIGVuZm9yY2VkIGNvbnN0cmFpbnQgZnJvbSBh bm90aGVyIHBhcmVudC4KIAkgKiBDb252ZXJzZWx5LCB3ZSBzaG91bGQgZG8gbm90aGluZyBpZiBh IGNvbnN0cmFpbnQgaXMgYmVpbmcgc2V0IHRvCiAJICogZW5mb3JjZWQgYW5kIGlzIGFscmVhZHkg ZW5mb3JjZWQsIGFzIGRlc2NlbmRhbnQgY29uc3RyYWludHMgY2Fubm90IGJlCiAJICogZGlmZmVy ZW50IGluIHRoYXQgY2FzZS4KQEAgLTEyNzM3LDYgKzEyODExLDcgQEAgQVRFeGVjQWx0ZXJDaGVj a0NvbnN0ckVuZm9yY2VhYmlsaXR5KExpc3QgKip3cXVldWUsIEFUQWx0ZXJDb25zdHJhaW50ICpj bWRjb24sCiAKIAkJCUFsdGVyQ2hlY2tDb25zdHJFbmZvcmNlYWJpbGl0eVJlY3Vyc2Uod3F1ZXVl LCBjbWRjb24sIGNvbnJlbCwKIAkJCQkJCQkJCQkJCSAgY2hpbGRvaWQsIGZhbHNlLCB0cnVlLAor CQkJCQkJCQkJCQkJICBjaGFuZ2luZ19jb25pZHMsCiAJCQkJCQkJCQkJCQkgIGxvY2ttb2RlKTsK IAkJfQogCX0KQEAgLTEyNzg4LDYgKzEyODYzLDcgQEAgc3RhdGljIHZvaWQKIEFsdGVyQ2hlY2tD b25zdHJFbmZvcmNlYWJpbGl0eVJlY3Vyc2UoTGlzdCAqKndxdWV1ZSwgQVRBbHRlckNvbnN0cmFp bnQgKmNtZGNvbiwKIAkJCQkJCQkJCSAgUmVsYXRpb24gY29ucmVsLCBPaWQgY29ucmVsaWQsCiAJ CQkJCQkJCQkgIGJvb2wgcmVjdXJzZSwgYm9vbCByZWN1cnNpbmcsCisJCQkJCQkJCQkgIExpc3Qg KipjaGFuZ2luZ19jb25pZHMsCiAJCQkJCQkJCQkgIExPQ0tNT0RFIGxvY2ttb2RlKQogewogCVN5 c1NjYW5EZXNjIHBzY2FuOwpAQCAtMTI4MTYsMTIgKzEyODkyLDExMyBAQCBBbHRlckNoZWNrQ29u c3RyRW5mb3JjZWFiaWxpdHlSZWN1cnNlKExpc3QgKip3cXVldWUsIEFUQWx0ZXJDb25zdHJhaW50 ICpjbWRjb24sCiAJCQkJZXJybXNnKCJjb25zdHJhaW50IFwiJXNcIiBvZiByZWxhdGlvbiBcIiVz XCIgZG9lcyBub3QgZXhpc3QiLAogCQkJCQkgICBjbWRjb24tPmNvbm5hbWUsIGdldF9yZWxfbmFt ZShjb25yZWxpZCkpKTsKIAorCWlmICghY21kY29uLT5pc19lbmZvcmNlZCkKKwl7CisJCUZvcm1f cGdfY29uc3RyYWludCBjdXJyY29uOworCisJCWN1cnJjb24gPSAoRm9ybV9wZ19jb25zdHJhaW50 KSBHRVRTVFJVQ1QoY2hpbGR0dXApOworCisJCWlmIChjdXJyY29uLT5jb25lbmZvcmNlZCkKKwkJ CSpjaGFuZ2luZ19jb25pZHMgPSBsaXN0X2FwcGVuZF91bmlxdWVfb2lkKCpjaGFuZ2luZ19jb25p ZHMsCisJCQkJCQkJCQkJCQkJICBjdXJyY29uLT5vaWQpOworCX0KKwogCUFURXhlY0FsdGVyQ2hl Y2tDb25zdHJFbmZvcmNlYWJpbGl0eSh3cXVldWUsIGNtZGNvbiwgY29ucmVsLCBjaGlsZHR1cCwK LQkJCQkJCQkJCQkgcmVjdXJzZSwgcmVjdXJzaW5nLCBsb2NrbW9kZSk7CisJCQkJCQkJCQkJIHJl Y3Vyc2UsIHJlY3Vyc2luZywgY2hhbmdpbmdfY29uaWRzLAorCQkJCQkJCQkJCSBsb2NrbW9kZSk7 CiAKIAlzeXN0YWJsZV9lbmRzY2FuKHBzY2FuKTsKIH0KIAorLyoKKyAqIFdoZW4gc2V0dGluZyBh biBpbmhlcml0ZWQgQ0hFQ0sgY29uc3RyYWludCB0byBOT1QgRU5GT1JDRUQsIGxvb2sgZm9yIGEK KyAqIG1hdGNoaW5nIHBhcmVudCBjb25zdHJhaW50IHRoYXQgcmVtYWlucyBFTkZPUkNFRCBhbmQg aXMgbm90IHBhcnQgb2YgdGhlIHNhbWUKKyAqIEFMVEVSLgorICovCitzdGF0aWMgYm9vbAorQVRD aGVja0NoZWNrQ29uc3RySGFzRW5mb3JjZWRQYXJlbnQoUmVsYXRpb24gY29ucmVsLCBSZWxhdGlv biByZWwsCisJCQkJCQkJCQlIZWFwVHVwbGUgY29udHVwbGUsCisJCQkJCQkJCQlMaXN0ICoqY2hh bmdpbmdfY29uaWRzLAorCQkJCQkJCQkJT2lkICplbmZvcmNlZF9wYXJlbnRvaWQpCit7CisJRm9y bV9wZ19jb25zdHJhaW50IGN1cnJjb247CisJUmVsYXRpb24JaW5ocmVsOworCVN5c1NjYW5EZXNj IHNjYW47CisJU2NhbktleURhdGEgc2tleTsKKwlIZWFwVHVwbGUJaW5oZXJpdHNUdXBsZTsKKwor CWN1cnJjb24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29udHVwbGUpOworCUFz c2VydChjdXJyY29uLT5jb250eXBlID09IENPTlNUUkFJTlRfQ0hFQ0spOworCisJaWYgKGN1cnJj b24tPmNvbmluaGNvdW50IDw9IDApCisJCXJldHVybiBmYWxzZTsKKworCWluaHJlbCA9IHRhYmxl X29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJU2NhbktleUlu aXQoJnNrZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxpZCwKKwkJCQlCVEVxdWFsU3Ry YXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJl bGlkKHJlbCkpKTsKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaHJlbCwgSW5oZXJpdHNS ZWxpZFNlcW5vSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZza2V5KTsKKworCXdo aWxlIChIZWFwVHVwbGVJc1ZhbGlkKGluaGVyaXRzVHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNj YW4pKSkKKwl7CisJCU9pZAkJCXBhcmVudG9pZDsKKwkJU3lzU2NhbkRlc2MgcHNjYW47CisJCVNj YW5LZXlEYXRhIHBrZXlbM107CisJCUhlYXBUdXBsZQlwYXJlbnR0dXA7CisKKwkJcGFyZW50b2lk ID0gKChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QoaW5oZXJpdHNUdXBsZSkpLT5pbmhwYXJl bnQ7CisKKwkJU2NhbktleUluaXQoJnBrZXlbMF0sCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9j b25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmpl Y3RJZEdldERhdHVtKHBhcmVudG9pZCkpOworCQlTY2FuS2V5SW5pdCgmcGtleVsxXSwKKwkJCQkJ QW51bV9wZ19jb25zdHJhaW50X2NvbnR5cGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0oSW52YWxpZE9pZCkpOworCQlTY2FuS2V5 SW5pdCgmcGtleVsyXSwKKwkJCQkJQW51bV9wZ19jb25zdHJhaW50X2Nvbm5hbWUsCisJCQkJCUJU RXF1YWxTdHJhdGVneU51bWJlciwgRl9OQU1FRVEsCisJCQkJCU5hbWVHZXREYXR1bSgmY3VycmNv bi0+Y29ubmFtZSkpOworCisJCXBzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvbnJlbCwgQ29u c3RyYWludFJlbGlkVHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJICAgdHJ1ZSwgTlVMTCwgMywg cGtleSk7CisKKwkJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQocGFyZW50dHVwID0gc3lzdGFibGVf Z2V0bmV4dChwc2NhbikpKQorCQl7CisJCQlGb3JtX3BnX2NvbnN0cmFpbnQgcGFyZW50Y29uOwor CisJCQlwYXJlbnRjb24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QocGFyZW50dHVw KTsKKworCQkJaWYgKGxpc3RfbWVtYmVyX29pZCgqY2hhbmdpbmdfY29uaWRzLCBwYXJlbnRjb24t Pm9pZCkgfHwKKwkJCQlwYXJlbnRjb24tPmNvbnR5cGUgIT0gQ09OU1RSQUlOVF9DSEVDSyB8fAor CQkJCXBhcmVudGNvbi0+Y29ubm9pbmhlcml0IHx8CisJCQkJIXBhcmVudGNvbi0+Y29uZW5mb3Jj ZWQpCisJCQkJY29udGludWU7CisKKwkJCWlmIChjb25zdHJhaW50c19lcXVpdmFsZW50KHBhcmVu dHR1cCwgY29udHVwbGUsCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldERlc2NyKGNvbnJlbCkpKQor CQkJeworCQkJCSplbmZvcmNlZF9wYXJlbnRvaWQgPSBwYXJlbnRvaWQ7CisJCQkJc3lzdGFibGVf ZW5kc2Nhbihwc2Nhbik7CisJCQkJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwkJCQl0YWJsZV9j bG9zZShpbmhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJ CX0KKworCQlzeXN0YWJsZV9lbmRzY2FuKHBzY2FuKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2Fu KHNjYW4pOworCXRhYmxlX2Nsb3NlKGluaHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVy biBmYWxzZTsKK30KKwogLyoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29uc3RyYWludCdzIGRl ZmVycmFiaWxpdHkgaXMgYWx0ZXJlZC4KICAqCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29u c3RyYWludHMub3V0CmluZGV4IGU1NGZlYzdmYjU3Li5iNjQ5ZDEwZTM2YiAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50cy5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50cy5vdXQKQEAgLTQ0Niw4ICs0NDYsMTIgQEAgYWx0 ZXIgdGFibGUgcGFydGVkX2NoXzIgYWx0ZXIgY29uc3RyYWludCBjY18yIGVuZm9yY2VkOyAtLWVy cm9yCiBFUlJPUjogIGNoZWNrIGNvbnN0cmFpbnQgImNjXzIiIG9mIHJlbGF0aW9uICJwYXJ0ZWRf Y2hfMiIgaXMgdmlvbGF0ZWQgYnkgc29tZSByb3cKIGRlbGV0ZSBmcm9tIHBhcnRlZF9jaCB3aGVy ZSBhID0gMTY7CiBhbHRlciB0YWJsZSBwYXJ0ZWRfY2hfMiBhbHRlciBjb25zdHJhaW50IGNjXzIg ZW5mb3JjZWQ7Ci1hbHRlciB0YWJsZSBwYXJ0ZWRfY2hfMiBhbHRlciBjb25zdHJhaW50IGNjIG5v dCBlbmZvcmNlZDsKLWFsdGVyIHRhYmxlIHBhcnRlZF9jaF8yIGFsdGVyIGNvbnN0cmFpbnQgY2Nf MSBub3QgZW5mb3JjZWQ7CithbHRlciB0YWJsZSBwYXJ0ZWRfY2hfMiBhbHRlciBjb25zdHJhaW50 IGNjIG5vdCBlbmZvcmNlZDsgLS0gZXJyb3IKK0VSUk9SOiAgY2Fubm90IG1hcmsgaW5oZXJpdGVk IGNvbnN0cmFpbnQgImNjIiBhcyBOT1QgRU5GT1JDRUQgYmVjYXVzZSBtYXRjaGluZyBjb25zdHJh aW50IG9uIHBhcmVudCB0YWJsZSAicGFydGVkX2NoIiBpcyBFTkZPUkNFRAorYWx0ZXIgdGFibGUg b25seSBwYXJ0ZWRfY2hfMiBhbHRlciBjb25zdHJhaW50IGNjIG5vdCBlbmZvcmNlZDsgLS0gZXJy b3IKK0VSUk9SOiAgY2Fubm90IG1hcmsgaW5oZXJpdGVkIGNvbnN0cmFpbnQgImNjIiBhcyBOT1Qg RU5GT1JDRUQgYmVjYXVzZSBtYXRjaGluZyBjb25zdHJhaW50IG9uIHBhcmVudCB0YWJsZSAicGFy dGVkX2NoIiBpcyBFTkZPUkNFRAorYWx0ZXIgdGFibGUgcGFydGVkX2NoXzIgYWx0ZXIgY29uc3Ry YWludCBjY18xIG5vdCBlbmZvcmNlZDsgLS0gZXJyb3IKK0VSUk9SOiAgY2Fubm90IG1hcmsgaW5o ZXJpdGVkIGNvbnN0cmFpbnQgImNjXzEiIGFzIE5PVCBFTkZPUkNFRCBiZWNhdXNlIG1hdGNoaW5n IGNvbnN0cmFpbnQgb24gcGFyZW50IHRhYmxlICJwYXJ0ZWRfY2giIGlzIEVORk9SQ0VECiBhbHRl ciB0YWJsZSBwYXJ0ZWRfY2hfMiBhbHRlciBjb25zdHJhaW50IGNjXzIgbm90IGVuZm9yY2VkOwog LS1jaGVjayB0aGVzZSBDSEVDSyBjb25zdHJhaW50IHN0YXR1cyBhZ2Fpbgogc2VsZWN0ICogZnJv bSBjaGVja19jb25zdHJhaW50X3N0YXR1czsKQEAgLTQ1NywxMiArNDYxLDEyIEBAIHNlbGVjdCAq IGZyb20gY2hlY2tfY29uc3RyYWludF9zdGF0dXM7CiAgY2MgICAgICB8IHBhcnRlZF9jaF8xICB8 IHQgICAgICAgICAgIHwgdAogIGNjICAgICAgfCBwYXJ0ZWRfY2hfMTEgfCB0ICAgICAgICAgICB8 IHQKICBjYyAgICAgIHwgcGFydGVkX2NoXzEyIHwgdCAgICAgICAgICAgfCB0Ci0gY2MgICAgICB8 IHBhcnRlZF9jaF8yICB8IGYgICAgICAgICAgIHwgZgorIGNjICAgICAgfCBwYXJ0ZWRfY2hfMiAg fCB0ICAgICAgICAgICB8IHQKICBjY18xICAgIHwgcGFydGVkX2NoICAgIHwgdCAgICAgICAgICAg fCB0CiAgY2NfMSAgICB8IHBhcnRlZF9jaF8xICB8IHQgICAgICAgICAgIHwgdAogIGNjXzEgICAg fCBwYXJ0ZWRfY2hfMTEgfCB0ICAgICAgICAgICB8IHQKICBjY18xICAgIHwgcGFydGVkX2NoXzEy IHwgdCAgICAgICAgICAgfCB0Ci0gY2NfMSAgICB8IHBhcnRlZF9jaF8yICB8IGYgICAgICAgICAg IHwgZgorIGNjXzEgICAgfCBwYXJ0ZWRfY2hfMiAgfCB0ICAgICAgICAgICB8IHQKICBjY18yICAg IHwgcGFydGVkX2NoXzIgIHwgZiAgICAgICAgICAgfCBmCiAoMTEgcm93cykKIApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmhlcml0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvaW5oZXJpdC5vdXQKaW5kZXggM2Q4ZThkOGFmZDIuLjViODcwODNhODcwIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luaGVyaXQub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5oZXJpdC5vdXQKQEAgLTE0NzksNiArMTQ3OSw2MiBA QCBOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIDMgb3RoZXIgb2JqZWN0cwogREVUQUlMOiAgZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBwMV9jMQogZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwMV9jMgog ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwMV9jMworLS0gYW4gaW5oZXJpdGVkIENIRUNLIGNvbnN0 cmFpbnQgY2Fubm90IGJlIE5PVCBFTkZPUkNFRCB1bmRlciBhbiBFTkZPUkNFRCBwYXJlbnQKK2Ny ZWF0ZSB0YWJsZSBwMShmMSBpbnQgY29uc3RyYWludCBwMV9hX2NoZWNrIGNoZWNrIChmMSA+IDAp IGVuZm9yY2VkKTsKK2NyZWF0ZSB0YWJsZSBwMV9jMSgpIGluaGVyaXRzKHAxKTsKK2FsdGVyIHRh YmxlIHAxX2MxIGFsdGVyIGNvbnN0cmFpbnQgcDFfYV9jaGVjayBub3QgZW5mb3JjZWQ7IC0tIGVy cm9yCitFUlJPUjogIGNhbm5vdCBtYXJrIGluaGVyaXRlZCBjb25zdHJhaW50ICJwMV9hX2NoZWNr IiBhcyBOT1QgRU5GT1JDRUQgYmVjYXVzZSBtYXRjaGluZyBjb25zdHJhaW50IG9uIHBhcmVudCB0 YWJsZSAicDEiIGlzIEVORk9SQ0VECithbHRlciB0YWJsZSBwMSBhbHRlciBjb25zdHJhaW50IHAx X2FfY2hlY2sgbm90IGVuZm9yY2VkOyAtLSBvaworYWx0ZXIgdGFibGUgcDFfYzEgYWx0ZXIgY29u c3RyYWludCBwMV9hX2NoZWNrIG5vdCBlbmZvcmNlZDsgLS0gb2sKK2Ryb3AgdGFibGUgcDEgY2Fz Y2FkZTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcDFfYzEKKy0tIHJlY3Vyc2l2 ZSBOT1QgRU5GT1JDRUQgbWVyZ2VzIHdpdGggRU5GT1JDRUQgY29uc3RyYWludHMgZnJvbSBvdGhl ciBwYXJlbnRzCitjcmVhdGUgdGFibGUgcDEoYSBpbnQgY29uc3RyYWludCBwMV9hX2NoZWNrIGNo ZWNrIChhID4gMCkgZW5mb3JjZWQpOworY3JlYXRlIHRhYmxlIHAyKGEgaW50IGNvbnN0cmFpbnQg cDFfYV9jaGVjayBjaGVjayAoYSA+IDApIGVuZm9yY2VkKTsKK2NyZWF0ZSB0YWJsZSBwMV9jMSgp IGluaGVyaXRzIChwMSwgcDIpOworTk9USUNFOiAgbWVyZ2luZyBtdWx0aXBsZSBpbmhlcml0ZWQg ZGVmaW5pdGlvbnMgb2YgY29sdW1uICJhIgorYWx0ZXIgdGFibGUgcDEgYWx0ZXIgY29uc3RyYWlu dCBwMV9hX2NoZWNrIG5vdCBlbmZvcmNlZDsgLS0gb2sKK3NlbGVjdCAgY29ubmFtZSwgY29uZW5m b3JjZWQsIGNvbnZhbGlkYXRlZCwgY29ucmVsaWQ6OnJlZ2NsYXNzCitmcm9tICAgIHBnX2NvbnN0 cmFpbnQKK3doZXJlICAgY29ubmFtZSA9ICdwMV9hX2NoZWNrJyBhbmQgY29udHlwZSA9ICdjJwor b3JkZXIgYnkgY29ucmVsaWQ6OnJlZ2NsYXNzOjp0ZXh0IGNvbGxhdGUgIkMiOworICBjb25uYW1l ICAgfCBjb25lbmZvcmNlZCB8IGNvbnZhbGlkYXRlZCB8IGNvbnJlbGlkIAorLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHAxX2FfY2hlY2sgfCBm ICAgICAgICAgICB8IGYgICAgICAgICAgICB8IHAxCisgcDFfYV9jaGVjayB8IHQgICAgICAgICAg IHwgdCAgICAgICAgICAgIHwgcDFfYzEKKyBwMV9hX2NoZWNrIHwgdCAgICAgICAgICAgfCB0ICAg ICAgICAgICAgfCBwMgorKDMgcm93cykKKworYWx0ZXIgdGFibGUgcDFfYzEgYWx0ZXIgY29uc3Ry YWludCBwMV9hX2NoZWNrIG5vdCBlbmZvcmNlZDsgLS0gZXJyb3IKK0VSUk9SOiAgY2Fubm90IG1h cmsgaW5oZXJpdGVkIGNvbnN0cmFpbnQgInAxX2FfY2hlY2siIGFzIE5PVCBFTkZPUkNFRCBiZWNh dXNlIG1hdGNoaW5nIGNvbnN0cmFpbnQgb24gcGFyZW50IHRhYmxlICJwMiIgaXMgRU5GT1JDRUQK K2FsdGVyIHRhYmxlIHAyIGFsdGVyIGNvbnN0cmFpbnQgcDFfYV9jaGVjayBub3QgZW5mb3JjZWQ7 IC0tIG9rCithbHRlciB0YWJsZSBwMV9jMSBhbHRlciBjb25zdHJhaW50IHAxX2FfY2hlY2sgbm90 IGVuZm9yY2VkOyAtLSBvay4gU2luY2UgdHdvIHBhcmVudHMgYXJlIG5vdCBlbmZvcmNlZCB0b28u Citkcm9wIHRhYmxlIHAxLCBwMiBjYXNjYWRlOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBwMV9jMQorLS0gcmVjdXJzaXZlIE5PVCBFTkZPUkNFRCBjYW4gY2hhbmdlIGFsbCBtYXRj aGluZyBlbmZvcmNlZCBwYXJlbnRzIHRvZ2V0aGVyCitjcmVhdGUgdGFibGUgZ3AoYSBpbnQgY29u c3RyYWludCBncF9hX2NoZWNrIGNoZWNrIChhID4gMCkgZW5mb3JjZWQpOworY3JlYXRlIHRhYmxl IHAxKCkgaW5oZXJpdHMgKGdwKTsKK2NyZWF0ZSB0YWJsZSBwMigpIGluaGVyaXRzIChncCk7Citj cmVhdGUgdGFibGUgcDFfYzEoKSBpbmhlcml0cyAocDEsIHAyKTsKK05PVElDRTogIG1lcmdpbmcg bXVsdGlwbGUgaW5oZXJpdGVkIGRlZmluaXRpb25zIG9mIGNvbHVtbiAiYSIKK2FsdGVyIHRhYmxl IGdwIGFsdGVyIGNvbnN0cmFpbnQgZ3BfYV9jaGVjayBub3QgZW5mb3JjZWQ7IC0tIG9rCitzZWxl Y3QgIGNvbm5hbWUsIGNvbmVuZm9yY2VkLCBjb252YWxpZGF0ZWQsIGNvbnJlbGlkOjpyZWdjbGFz cworZnJvbSAgICBwZ19jb25zdHJhaW50Cit3aGVyZSAgIGNvbm5hbWUgPSAnZ3BfYV9jaGVjaycg YW5kIGNvbnR5cGUgPSAnYycKK29yZGVyIGJ5IGNvbnJlbGlkOjpyZWdjbGFzczo6dGV4dCBjb2xs YXRlICJDIjsKKyAgY29ubmFtZSAgIHwgY29uZW5mb3JjZWQgfCBjb252YWxpZGF0ZWQgfCBjb25y ZWxpZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyBncF9hX2NoZWNrIHwgZiAgICAgICAgICAgfCBmICAgICAgICAgICAgfCBncAorIGdwX2Ff Y2hlY2sgfCBmICAgICAgICAgICB8IGYgICAgICAgICAgICB8IHAxCisgZ3BfYV9jaGVjayB8IGYg ICAgICAgICAgIHwgZiAgICAgICAgICAgIHwgcDFfYzEKKyBncF9hX2NoZWNrIHwgZiAgICAgICAg ICAgfCBmICAgICAgICAgICAgfCBwMgorKDQgcm93cykKKworZHJvcCB0YWJsZSBncCBjYXNjYWRl OworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byAzIG90aGVyIG9iamVjdHMKK0RFVEFJTDogIGRy b3AgY2FzY2FkZXMgdG8gdGFibGUgcDEKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcDIKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgcDFfYzEKIC0tZm9yICJubyBpbmhlcml0IiBjaGVjayBjb25zdHJh aW50LCBpdCB3aWxsIG5vdCByZWN1cnNlIHRvIGNoaWxkIHRhYmxlCiBjcmVhdGUgdGFibGUgcDEo ZjEgaW50IGNvbnN0cmFpbnQgcDFfYV9jaGVjayBjaGVjayAoZjEgPiAwKSBubyBpbmhlcml0IG5v dCBlbmZvcmNlZCk7CiBjcmVhdGUgdGFibGUgcDFfYzEoZjEgaW50IGNvbnN0cmFpbnQgcDFfYV9j aGVjayBjaGVjayAoZjEgPiAwKSBub3QgZW5mb3JjZWQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29uc3RyYWludHMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29uc3Ry YWludHMuc3FsCmluZGV4IGRjMTMzYjEyNGJiLi4yNmE5YWM3OGM5NiAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvY29uc3RyYWludHMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NvbnN0cmFpbnRzLnNxbApAQCAtMzA5LDggKzMwOSw5IEBAIHNlbGVjdCAqIGZyb20gY2hl Y2tfY29uc3RyYWludF9zdGF0dXM7CiBhbHRlciB0YWJsZSBwYXJ0ZWRfY2hfMiBhbHRlciBjb25z dHJhaW50IGNjXzIgZW5mb3JjZWQ7IC0tZXJyb3IKIGRlbGV0ZSBmcm9tIHBhcnRlZF9jaCB3aGVy ZSBhID0gMTY7CiBhbHRlciB0YWJsZSBwYXJ0ZWRfY2hfMiBhbHRlciBjb25zdHJhaW50IGNjXzIg ZW5mb3JjZWQ7Ci1hbHRlciB0YWJsZSBwYXJ0ZWRfY2hfMiBhbHRlciBjb25zdHJhaW50IGNjIG5v dCBlbmZvcmNlZDsKLWFsdGVyIHRhYmxlIHBhcnRlZF9jaF8yIGFsdGVyIGNvbnN0cmFpbnQgY2Nf MSBub3QgZW5mb3JjZWQ7CithbHRlciB0YWJsZSBwYXJ0ZWRfY2hfMiBhbHRlciBjb25zdHJhaW50 IGNjIG5vdCBlbmZvcmNlZDsgLS0gZXJyb3IKK2FsdGVyIHRhYmxlIG9ubHkgcGFydGVkX2NoXzIg YWx0ZXIgY29uc3RyYWludCBjYyBub3QgZW5mb3JjZWQ7IC0tIGVycm9yCithbHRlciB0YWJsZSBw YXJ0ZWRfY2hfMiBhbHRlciBjb25zdHJhaW50IGNjXzEgbm90IGVuZm9yY2VkOyAtLSBlcnJvcgog YWx0ZXIgdGFibGUgcGFydGVkX2NoXzIgYWx0ZXIgY29uc3RyYWludCBjY18yIG5vdCBlbmZvcmNl ZDsKIAogLS1jaGVjayB0aGVzZSBDSEVDSyBjb25zdHJhaW50IHN0YXR1cyBhZ2FpbgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5oZXJpdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9pbmhlcml0LnNxbAppbmRleCA4Zjk4NjkwNDM4OS4uNjc5YjBiMmQ5NjkgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2luaGVyaXQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2luaGVyaXQuc3FsCkBAIC01MzUsNiArNTM1LDQwIEBAIHdoZXJlICAgY29ubmFtZSA9 ICdpbmhfY2hlY2tfY29uc3RyYWludDMnIGFuZCBjb250eXBlID0gJ2MnCiBvcmRlciBieSBjb25y ZWxpZDo6cmVnY2xhc3M6OnRleHQgY29sbGF0ZSAiQyI7CiBkcm9wIHRhYmxlIHAxIGNhc2NhZGU7 CiAKKy0tIGFuIGluaGVyaXRlZCBDSEVDSyBjb25zdHJhaW50IGNhbm5vdCBiZSBOT1QgRU5GT1JD RUQgdW5kZXIgYW4gRU5GT1JDRUQgcGFyZW50CitjcmVhdGUgdGFibGUgcDEoZjEgaW50IGNvbnN0 cmFpbnQgcDFfYV9jaGVjayBjaGVjayAoZjEgPiAwKSBlbmZvcmNlZCk7CitjcmVhdGUgdGFibGUg cDFfYzEoKSBpbmhlcml0cyhwMSk7CithbHRlciB0YWJsZSBwMV9jMSBhbHRlciBjb25zdHJhaW50 IHAxX2FfY2hlY2sgbm90IGVuZm9yY2VkOyAtLSBlcnJvcgorYWx0ZXIgdGFibGUgcDEgYWx0ZXIg Y29uc3RyYWludCBwMV9hX2NoZWNrIG5vdCBlbmZvcmNlZDsgLS0gb2sKK2FsdGVyIHRhYmxlIHAx X2MxIGFsdGVyIGNvbnN0cmFpbnQgcDFfYV9jaGVjayBub3QgZW5mb3JjZWQ7IC0tIG9rCitkcm9w IHRhYmxlIHAxIGNhc2NhZGU7CisKKy0tIHJlY3Vyc2l2ZSBOT1QgRU5GT1JDRUQgbWVyZ2VzIHdp dGggRU5GT1JDRUQgY29uc3RyYWludHMgZnJvbSBvdGhlciBwYXJlbnRzCitjcmVhdGUgdGFibGUg cDEoYSBpbnQgY29uc3RyYWludCBwMV9hX2NoZWNrIGNoZWNrIChhID4gMCkgZW5mb3JjZWQpOwor Y3JlYXRlIHRhYmxlIHAyKGEgaW50IGNvbnN0cmFpbnQgcDFfYV9jaGVjayBjaGVjayAoYSA+IDAp IGVuZm9yY2VkKTsKK2NyZWF0ZSB0YWJsZSBwMV9jMSgpIGluaGVyaXRzIChwMSwgcDIpOworYWx0 ZXIgdGFibGUgcDEgYWx0ZXIgY29uc3RyYWludCBwMV9hX2NoZWNrIG5vdCBlbmZvcmNlZDsgLS0g b2sKK3NlbGVjdCAgY29ubmFtZSwgY29uZW5mb3JjZWQsIGNvbnZhbGlkYXRlZCwgY29ucmVsaWQ6 OnJlZ2NsYXNzCitmcm9tICAgIHBnX2NvbnN0cmFpbnQKK3doZXJlICAgY29ubmFtZSA9ICdwMV9h X2NoZWNrJyBhbmQgY29udHlwZSA9ICdjJworb3JkZXIgYnkgY29ucmVsaWQ6OnJlZ2NsYXNzOjp0 ZXh0IGNvbGxhdGUgIkMiOworYWx0ZXIgdGFibGUgcDFfYzEgYWx0ZXIgY29uc3RyYWludCBwMV9h X2NoZWNrIG5vdCBlbmZvcmNlZDsgLS0gZXJyb3IKK2FsdGVyIHRhYmxlIHAyIGFsdGVyIGNvbnN0 cmFpbnQgcDFfYV9jaGVjayBub3QgZW5mb3JjZWQ7IC0tIG9rCithbHRlciB0YWJsZSBwMV9jMSBh bHRlciBjb25zdHJhaW50IHAxX2FfY2hlY2sgbm90IGVuZm9yY2VkOyAtLSBvay4gU2luY2UgdHdv IHBhcmVudHMgYXJlIG5vdCBlbmZvcmNlZCB0b28uCitkcm9wIHRhYmxlIHAxLCBwMiBjYXNjYWRl OworCistLSByZWN1cnNpdmUgTk9UIEVORk9SQ0VEIGNhbiBjaGFuZ2UgYWxsIG1hdGNoaW5nIGVu Zm9yY2VkIHBhcmVudHMgdG9nZXRoZXIKK2NyZWF0ZSB0YWJsZSBncChhIGludCBjb25zdHJhaW50 IGdwX2FfY2hlY2sgY2hlY2sgKGEgPiAwKSBlbmZvcmNlZCk7CitjcmVhdGUgdGFibGUgcDEoKSBp bmhlcml0cyAoZ3ApOworY3JlYXRlIHRhYmxlIHAyKCkgaW5oZXJpdHMgKGdwKTsKK2NyZWF0ZSB0 YWJsZSBwMV9jMSgpIGluaGVyaXRzIChwMSwgcDIpOworYWx0ZXIgdGFibGUgZ3AgYWx0ZXIgY29u c3RyYWludCBncF9hX2NoZWNrIG5vdCBlbmZvcmNlZDsgLS0gb2sKK3NlbGVjdCAgY29ubmFtZSwg Y29uZW5mb3JjZWQsIGNvbnZhbGlkYXRlZCwgY29ucmVsaWQ6OnJlZ2NsYXNzCitmcm9tICAgIHBn X2NvbnN0cmFpbnQKK3doZXJlICAgY29ubmFtZSA9ICdncF9hX2NoZWNrJyBhbmQgY29udHlwZSA9 ICdjJworb3JkZXIgYnkgY29ucmVsaWQ6OnJlZ2NsYXNzOjp0ZXh0IGNvbGxhdGUgIkMiOworZHJv cCB0YWJsZSBncCBjYXNjYWRlOworCiAtLWZvciAibm8gaW5oZXJpdCIgY2hlY2sgY29uc3RyYWlu dCwgaXQgd2lsbCBub3QgcmVjdXJzZSB0byBjaGlsZCB0YWJsZQogY3JlYXRlIHRhYmxlIHAxKGYx IGludCBjb25zdHJhaW50IHAxX2FfY2hlY2sgY2hlY2sgKGYxID4gMCkgbm8gaW5oZXJpdCBub3Qg ZW5mb3JjZWQpOwogY3JlYXRlIHRhYmxlIHAxX2MxKGYxIGludCBjb25zdHJhaW50IHAxX2FfY2hl Y2sgY2hlY2sgKGYxID4gMCkgbm90IGVuZm9yY2VkKTsKLS0gCjIuMzQuMQoK --0000000000009e5d7f0653332ead--