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 1wbcQI-002i7a-2I for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jun 2026 11:02:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wbcQH-006DDq-24 for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jun 2026 11:02:37 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wbcQH-006DDi-0E for pgsql-hackers@lists.postgresql.org; Mon, 22 Jun 2026 11:02:37 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wbcQE-00000001Zt0-2tLc for pgsql-hackers@lists.postgresql.org; Mon, 22 Jun 2026 11:02:36 +0000 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-5ad4f1cf3cdso4299596e87.1 for ; Mon, 22 Jun 2026 04:02:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782126151; cv=none; d=google.com; s=arc-20240605; b=lL/PjbmioTspOn8wUA4tWjAcl0SAg/x/MI8n8ccZCgHQNt0+ThRtDCJME1WIPTUDd5 G9n9LsybYnlA3e13rJDHwA8KeCK4DEYdzN/UiRo3yfW+GcEz3zfa2uVYYX/I3ZZ/X6mS YxaKdUPX5tSQxlFD9tylmmVtj2ZxbmwM0CO9NO0S1EElsW3Q+0ZCa9J3MBJKWL3rK9vZ aPhnZdfqMpHqLbnOteVIrqSjxfSe292JQccaKOGQ0jrdMU5YfQQE/fes0JrV32L3HjGI tSuTJK/ccpjmGfFLUIHEyx20U6XVuoASI0N/ELbBinf4LI+Ws2J35JVlmOqGdUHo/PG5 Znqg== 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=FWplG3OX9c2kPi/W3HsNDodpYOrKejmcaG8gUHkIOYE=; fh=bBq9M+uX5Qy5aKNGNOIvLlxKBAS82O8oa9t0gHKTFh0=; b=BgMvHzuEPLl534Li/pauzA2VsnlSCZLW/c3kiuRe4OuzopbY9NtGr63UzXxO1hyaLb g5y5STnJaSlcm4RMJBnrz0UcA2f6xhj4VGrGkW9jaNaAYCGQC4LXWNMUxo1yde59xrMJ Enh0qzQrNf24nEyYs4LAtABlDZKZWDb5ExznoDSzGbQWrh5rh4QIZkyrs4mQTBHRtqWT sWsCPbj5vUa6papqkI6ecLHa7w+TxCiGHxHb2PNtuQ5tKM26m8MaOnUydYGpmeuLGX7c UtCDw48SorYd5igl4hQRXaFTb8gDCivnZBHDwv9dIdBWGPds45JvuJQ9Zr+79hhVgSW7 UHxA==; 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=1782126151; x=1782730951; 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=FWplG3OX9c2kPi/W3HsNDodpYOrKejmcaG8gUHkIOYE=; b=P/OeM5Zwpeg7kRayqSVLAr6ckaeWNOPGId2lpQzv/bK/p6FhkwfnHPkQnHrWDhlS6a OfoA1jpHymdD99v+I1I6hN8tEqCFYJETD85LIOPWwg4zXDp8zEPSMs1ZK+8TxO5PzxBS BY2jewbFfDc/8YGdUoljvtFY5jjHgC4TAW5/uxbLP7bsueUJuMkT+1yiDwLWbJ7s4MbN Y9ch2GlXzrUd4OM9M4BVppS/sxPvAr3hlTacifzdBIynJoHQTIUhe2tZl7rrtDPNenic 8MfEvpnosbcwSjetKwXdAWLfJa6G5RU5SUUdPP+g7mRq4LL7aycT0cZrQtC8f+vmJ2pT 0vIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782126151; x=1782730951; 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=FWplG3OX9c2kPi/W3HsNDodpYOrKejmcaG8gUHkIOYE=; b=egyeJbriFGzYArzHnNdHE4dGraCK4Fx5MQeyYyVsAD03oeajsb7GdtVfULxcIs+xpu U5QMIBiR+SUOw6SCj1oA1bGPg2I1rYuwsoZu/4G5H0wv5L6ye/XULbqT0K477CfM8Qfv UAMqtyhcGC1OjSu4sbIPwCXCFRCY2J3ozUGTFyVCVYxUSxu+efDYtHu9mFzxH91L/pAY 5kswImc/vCBCRZH8XMKV6fV3nmP3X2FtVs8n+sDGlLQ6bBxXm6B3bxk6+VxIaznlsvfd 1RaNtksC1inBRAF8FZj0qFikftf1mRcNcUeRK85ZgljJ70FiMgYO5hOCkYqBExn9fdh2 Xzyw== X-Forwarded-Encrypted: i=1; AFNElJ+AMbIDgwBPt1DXbbu5XuL4NAsI5qodCH1Cwhka2I+75mgmf60eChRLHsT78CC/kW8N/wMpWRb9bg2Q/KfO@lists.postgresql.org X-Gm-Message-State: AOJu0YzGPnoG1kmXZ1cPfTVCM1OT4Lw+nzxRskxXwJ8aMAkT8IDLIC+x T47y7TBSh9UEiPA+qioOtkSUHrV7Mh0edPBOVFk24CTIYJZV1PI7l5MYSS2qr2K92o091DeEk4U QZi0mexh286XbT8uLYQyaY3mCfBn3kA== X-Gm-Gg: AfdE7cm1Srg9jkjSkjr1TJhCE5XqW/Kw8281jvN29QqyE54EhCC3zPWx8VqPZwaaLRY Twe03FnuWWSVRyLGoyldFPrlOIBAeKf/W9JgS0sy9b+3x1ViAoQ1mnMR11TMte9BCqZJOwonaVL +1Rn7rnMN8Rwp9/LibrFN/FcsVlb09lPu+PKq0jX6DqzhhxFspEPNZOB+vZjl2RQBXYrf7BGZ3X AO/Q2V3xl72VB4juYpy3vpzbCvE6vQnqLauCO6+H9SdhlthqL/NN7ffzUhnDJEOuEpaDK+g/ecA W5O1fos= X-Received: by 2002:ac2:5b92:0:b0:5aa:7a7d:c7d2 with SMTP id 2adb3069b0e04-5ad57229aa8mr2603509e87.18.1782126150395; Mon, 22 Jun 2026 04:02:30 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Nisha Moond Date: Mon, 22 Jun 2026 16:32:16 +0530 X-Gm-Features: AVVi8Cf-v_SdCanaoKaLsVqMgvGK5Mi8BX3x1TZVo4Iq3osBQjuZLgXySS-WtZo Message-ID: Subject: Re: Proposal: Conflict log history table for Logical Replication To: Amit Kapila Cc: shveta malik , Dilip Kumar , vignesh C , Peter Smith , Masahiko Sawada , Bharath Rupireddy , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000023d76f0654d5946e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000023d76f0654d5946e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Jun 21, 2026 at 7:19=E2=80=AFPM Amit Kapila wrote: > > On Thu, Jun 18, 2026 at 9:33=E2=80=AFAM shveta malik wrote: > > > > On Tue, Jun 16, 2026 at 6:54=E2=80=AFPM Dilip Kumar wrote: > > > > > > IMHO we should just log WARNING and continue the apply worker on > > > conflict insertion failure, lets see what other thinks on this. > > > > > > > I have the same opinion. Allowing CLT to block the apply worker would > > be undesirable; CLT is a history/logs collection feature and should > > not interrupt core logical replication work. > > > > I think the insert can fail in rare cases like disk getting full while > writing WAL or some internal memory ERROR and the ERROR could be > persistent which means the LOG will be filled with the same WARNING if > there are many conflicts. Also, users may not like missing out on > conflict information. So, we can ERROR out and let users fix the > situation. Additionally, the nested try-catch to downgrade ERROR to > WARNING also looks ugly and a source of future bugs and maintenance > burden. The attached patch tries to fix this by ERRORing out on > insertion failure and attaching the required conflict info as a > context of ERROR. The patch also improved the ReportApplyConflict() > non-ERROR paths by displaying the conflict information in server LOGs > before inserting the same into CLT so that if insertion fails, the > complete conflict info can be present in server LOGs. See > v52-1-amit.Improve-error-handling-for-conflict-log-table-ins. > > Additionally, there is another problem with 0003 where when a parallel > apply worker hits an ERROR-level conflict it logs the conflict to the > conflict log table in a new transaction in its error path, after > aborting the failed apply transaction. But the leader detects worker > failure in pa_wait_for_xact_finish() by waiting on the worker's > transaction lock, and AbortOutOfAnyTransaction() releases that lock: > the leader unblocks, sees a non-finished state, raises "lost > connection to the logical replication parallel apply worker", and > tears the worker down -- which can SIGTERM it mid-insert and lose the > conflict log row, besides being a misleading message. The attached > top-up patch v52-2-amit.fix_parallel_apply_logging fixes that by > introducing PARALLEL_TRANS_ERROR state. I reproduced the above issue and verified the fix for it in v52-2-amit.fix_parallel_apply_logging. Here is a TAP test for the same. The attached top-up patch applies on top of the latest v53-0005 patch. -- Thanks, Nisha --00000000000023d76f0654d5946e Content-Type: text/plain; charset="UTF-8"; name="v53_Add-TAP-test-for-parallel-apply-deferred-CLT-ins.txt" Content-Disposition: attachment; filename="v53_Add-TAP-test-for-parallel-apply-deferred-CLT-ins.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqp3ueq10 RnJvbSBiYWU0ZjE2YTdhNmE4MGQyZDI3YmEyNmE3ZWFjNzBiOWRjMDg5Nzg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOaXNoYSBNb29uZCA8bmlzaGEubW9vbmQ0MTJAZ21haWwuY29t PgpEYXRlOiBNb24sIDIyIEp1biAyMDI2IDExOjUwOjEyICswNTMwClN1YmplY3Q6IFtQQVRDSCB2 NTNdIEFkZCBUQVAgdGVzdCBmb3IgcGFyYWxsZWwtYXBwbHkgZGVmZXJyZWQgQ0xUIGluc2VydCBy YWNlCgpUZXN0IHRoZSByYWNlIHdoZXJlLCBvbiBhbiBFUlJPUi1sZXZlbCBjb25mbGljdCwgYSBw YXJhbGxlbCBhcHBseSAoUEEpCndvcmtlciBsb2dzIHRoZSBkZWZlcnJlZCBjb25mbGljdCByb3cg aW4gYSBmcmVzaCB0cmFuc2FjdGlvbiBpbiBpdHMKUEdfQ0FUQ0ggcGF0aC4gIEFib3J0T3V0T2ZB bnlUcmFuc2FjdGlvbigpIGluIHRoZSBQR19DQVRDSCByZWxlYXNlcwp0aGUgd29ya2VyJ3MgdHJh bnNhY3Rpb24gbG9jayBiZWZvcmUgdGhlIGRlZmVycmVkIGluc2VydCBydW5zLCBzbyB0aGUKbGVh ZGVyJ3MgcGFfd2FpdF9mb3JfeGFjdF9maW5pc2goKSB1bmJsb2Nrcywgc2VlcyBhIG5vbi1maW5p c2hlZCBzdGF0ZSwKcmFpc2VzIHRoZSAibG9zdCBjb25uZWN0aW9uIHRvIHRoZSBsb2dpY2FsIHJl cGxpY2F0aW9uIHBhcmFsbGVsCmFwcGx5IHdvcmtlciIsIGFuZCBTSUdURVJNcyB0aGUgUEEgbWlk LWluc2VydCAtLSB0aGUgZGVmZXJyZWQgY29uZmxpY3QKcm93IGlzIGxvc3QuCgpBbHNvIHZlcmlm aWVzIHRoYXQgUEEgY29ycmVjdGx5IGluc2VydHMgdGhlIGNvbmZsaWN0IGludG8gdGhlIENMVCBh bmQgYWxzbwpyZXBvcnRzIGl0IGluIHRoZSBzZXJ2ZXIgbG9nIHdpdGggZml4LgotLS0KIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvY29uZmxpY3QuYyAgICB8ICAgOCArCiBzcmMvdGVz dC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgIDEgKwogLi4uL3QvMDM5 X3BhX2NvbmZsaWN0X2xvZ19sb2NrX3dhaXQucGwgICAgICAgIHwgMjA0ICsrKysrKysrKysrKysr KysrKwogMyBmaWxlcyBjaGFuZ2VkLCAyMTMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzOV9wYV9jb25mbGljdF9sb2dfbG9ja193YWl0 LnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9jb25mbGlj dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9jb25mbGljdC5jCmluZGV4IGMy YzE1ZjA1NWU2Li42ZWM1NzE4MDgxMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9jb25mbGljdC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvY29uZmxpY3QuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5o IgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK KyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Bn X2xzbi5oIgpAQCAtNDg0LDYgKzQ4NSwxMyBAQCBQcm9jZXNzUGVuZGluZ0NvbmZsaWN0TG9nVHVw bGUodm9pZCkKIAlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCVB1c2hBY3RpdmVTbmFwc2hv dChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCisJLyoKKwkgKiBUZXN0IGhvb2s6IHBhdXNl IGhlcmUgc28gYSBUQVAgdGVzdCBjYW4gdGFrZSBhIGNvbmZsaWN0aW5nIGxvY2sgb24KKwkgKiB0 aGUgY29uZmxpY3QgbG9nIHRhYmxlIGJlZm9yZSB0aGlzIHRyYW5zYWN0aW9uIHRyaWVzIHRvIG9w ZW4gaXQuCisJICogU2VlIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzOV9wYV9jb25mbGljdF9s b2dfbG9ja193YWl0LnBsLgorCSAqLworCUlOSkVDVElPTl9QT0lOVCgiY2x0LXBlbmRpbmctZmx1 c2gtYmVmb3JlLW9wZW4iLCBOVUxMKTsKKwogCS8qIE9wZW4gY29uZmxpY3QgbG9nIHRhYmxlIGFu ZCBpbnNlcnQgdGhlIHR1cGxlICovCiAJY29uZmxpY3Rsb2dyZWwgPSBHZXRDb25mbGljdExvZ0Rl c3RBbmRUYWJsZSgmZGVzdCk7CiAJQXNzZXJ0KGNvbmZsaWN0bG9ncmVsKTsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi9tZXNvbi5idWlsZAppbmRleCBlNzFlOTVjNjI5Ny4uMjI1ZjkwYTM3YjMgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9zdWJzY3Jp cHRpb24vbWVzb24uYnVpbGQKQEAgLTQ4LDYgKzQ4LDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3Qv MDM2X3NlcXVlbmNlcy5wbCcsCiAgICAgICAndC8wMzdfZXhjZXB0LnBsJywKICAgICAgICd0LzAz OF93YWxzbmRfc2h1dGRvd25fdGltZW91dC5wbCcsCisgICAgICAndC8wMzlfcGFfY29uZmxpY3Rf bG9nX2xvY2tfd2FpdC5wbCcsCiAgICAgICAndC8xMDBfYnVncy5wbCcsCiAgICAgXSwKICAgfSwK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzOV9wYV9jb25mbGljdF9sb2df bG9ja193YWl0LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM5X3BhX2NvbmZsaWN0X2xv Z19sb2NrX3dhaXQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ2 OWY1YjQzNjU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM5 X3BhX2NvbmZsaWN0X2xvZ19sb2NrX3dhaXQucGwKQEAgLTAsMCArMSwyMDQgQEAKKyMgQ29weXJp Z2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRl c3QgdGhhdCBhIHBhcmFsbGVsIGFwcGx5IChQQSkgd29ya2VyIGNvcnJlY3RseSBpbnNlcnRzIGEg ZGVmZXJyZWQKKyMgY29uZmxpY3QtbG9nIHR1cGxlIGV2ZW4gd2hlbiwgYnkgdGhlIHRpbWUgaXQg cmVhY2hlcworIyBQcm9jZXNzUGVuZGluZ0NvbmZsaWN0TG9nVHVwbGUoKSwgdGhlIGNvbmZsaWN0 IGxvZyB0YWJsZSBpcyBoZWxkIHVuZGVyCisjIEFDQ0VTUyBFWENMVVNJVkUgYnkgYW5vdGhlciBz ZXNzaW9uLgorIworIyBUaGUgd2luZG93IHdlIHdhbnQgdG8gZXhlcmNpc2UgaXMgbmFycm93OiBQ QSBtdXN0IGFscmVhZHkgYmUgcGFzdAorIyBSZXBvcnRBcHBseUNvbmZsaWN0KCkgKHNvIHRoZSBl cnJvciBoYXMgZmlyZWQgYW5kIFBBIGlzIGluIFBHX0NBVENIKSwKKyMgYW5kIHRoZSBsb2NrZXIg bXVzdCB0YWtlIHRoZSBDTFQgbG9jayAqYmVmb3JlKiBQQSByZWFjaGVzIHRoZSBzZWNvbmQKKyMg Q0xUIG9wZW4gaW5zaWRlIFByb2Nlc3NQZW5kaW5nQ29uZmxpY3RMb2dUdXBsZSgpLiAgQW4gaW5q ZWN0aW9uIHBvaW50CisjIHBhdXNlcyBQQSBhdCBleGFjdGx5IHRoYXQgcG9pbnQgc28gdGhlIGxv Y2tlciBjYW4gZ3JhYiB0aGUgbG9jayBmaXJzdDsKKyMgd2l0aG91dCBpdCwgdGhlIGxvY2tlciBl aXRoZXIgdGFrZXMgdGhlIGxvY2sgdG9vIGVhcmx5IChQQSBibG9ja3MgaW4KKyMgdGhlIGlubGlu ZSBDTFQgb3BlbiBpbnNpZGUgUmVwb3J0QXBwbHlDb25mbGljdCwgYmVmb3JlIHRoZSBlcnJvciBo YXMKKyMgZmlyZWQpIG9yIHRvbyBsYXRlIChQQSBpbnNlcnRzIGJlZm9yZSB0aGUgbG9jayBpcyB0 YWtlbikuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsK K3VzZSBUZXN0OjpNb3JlOworCitpZiAoJEVOVntlbmFibGVfaW5qZWN0aW9uX3BvaW50c30gbmUg J3llcycpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnSW5qZWN0aW9uIHBvaW50cyBub3Qgc3VwcG9y dGVkIGJ5IHRoaXMgYnVpbGQnOworfQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgdXAgcHVibGlz aGVyIGFuZCBzdWJzY3JpYmVyLiAgRm9yY2UgZXZlcnkgdHJhbnNhY3Rpb24gdG8gc3RyZWFtIHNv CisjIHRoZSBjb25mbGljdCBpcyBoYW5kbGVkIGJ5IGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHJh dGhlciB0aGFuIHRoZQorIyBsZWFkZXIuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbXkgJG5vZGVfcHViID0g UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1Yi0+ aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWItPmFwcGVuZF9j b25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxeworZGVidWdfbG9naWNhbF9yZXBsaWNhdGlvbl9zdHJl YW1pbmcgPSBpbW1lZGlhdGUKK2xvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW0gPSA2NGtCCit9KTsK KyRub2RlX3B1Yi0+c3RhcnQ7CisKK215ICRub2RlX3N1YiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOworJG5vZGVfc3ViLT5pbml0OworJG5vZGVfc3ViLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXsKK3NoYXJlZF9wcmVsb2FkX2xpYnJhcmll cyA9ICdpbmplY3Rpb25fcG9pbnRzJworbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9 IDQKK21heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyCit9KTsK KyRub2RlX3N1Yi0+c3RhcnQ7CisKKyMgUmVwbGljYXRlZCB0YWJsZTsgdGhlIHByZS1leGlzdGlu ZyByb3cgb24gdGhlIHN1YnNjcmliZXIgaXMgd2hhdCBtYWtlcworIyB0aGUgcHVibGlzaGVyJ3Mg SU5TRVJUIChpZD0xKSB0cmlnZ2VyIGFuIElOU0VSVF9FWElTVFMgY29uZmxpY3QuCiskbm9kZV9w dWItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworCUNSRUFURSBUQUJMRSB0IChpZCBpbnQgUFJJ TUFSWSBLRVksIHZhbCB0ZXh0KTsKKwlBTFRFUiBUQUJMRSB0IFJFUExJQ0EgSURFTlRJVFkgRlVM TDsKKwlDUkVBVEUgUFVCTElDQVRJT04gcCBGT1IgVEFCTEUgdDsKK30pOworCiskbm9kZV9zdWIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworCUNSRUFURSBUQUJMRSB0IChpZCBpbnQgUFJJTUFS WSBLRVksIHZhbCB0ZXh0KTsKKwlJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3ByZS1leGlzdGlu ZycpOworCUNSRUFURSBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsKK30pOworCitteSAkcHVi X2Nvbm5zdHIgPSAkbm9kZV9wdWItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Ciskbm9k ZV9zdWItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcXsKKwlDUkVBVEUgU1VCU0NSSVBUSU9OIHMK KwlDT05ORUNUSU9OICckcHViX2Nvbm5zdHInCisJUFVCTElDQVRJT04gcAorCVdJVEggKHN0cmVh bWluZyA9IHBhcmFsbGVsLAorCSAgICAgIGNvbmZsaWN0X2xvZ19kZXN0aW5hdGlvbiA9ICdhbGwn LAorCSAgICAgIGRpc2FibGVfb25fZXJyb3IgPSB0cnVlKTsKK30pOworCiskbm9kZV9zdWItPndh aXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1YiwgJ3MnKTsKKworIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyMgU2VuZCBhIG5vbi1jb25mbGljdGluZyBJTlNFUlQgYW5kIHRoZW4gd2FpdCB1bnRpbCBw Z19zdWJzY3JpcHRpb25fcmVsCisjIHJlYWNoZXMgJ3InIChyZWFkeSkgb24gZXZlcnkgcmVsYXRp b24uICBwYV9jYW5fc3RhcnQoKSByZXF1aXJlcworIyBBbGxUYWJsZXN5bmNzUmVhZHkoKSwgd2hp Y2ggcmV0dXJucyB0cnVlIG9ubHkgd2hlbiBldmVyeQorIyBwZ19zdWJzY3JpcHRpb25fcmVsIHJv dyBpcyAncicuICBUaGUgJ3MnIChzeW5jZG9uZSkgLT4gJ3InIHRyYW5zaXRpb24KKyMgZmlyZXMg aW5zaWRlIFByb2Nlc3NTeW5jaW5nVGFibGVzRm9yQXBwbHksIHdoaWNoIG9ubHkgZmxpcHMgdGhl IHN0YXRlCisjIHdoZW4gdGhlIGFwcGx5IHdvcmtlcidzIGxhc3RfcmVjZWl2ZWQgTFNOIGhhcyBh ZHZhbmNlZCBwYXN0IHRoZQorIyB0YWJsZXN5bmMgZW5kIExTTiAtLSBzbyB3ZSBuZWVkIGEgdHJp Z2dlcmluZyBjb21taXQgb24gdGhlIHB1Ymxpc2hlcgorIyB0byBkcml2ZSBsYXN0X3JlY2VpdmVk IGZvcndhcmQuICBXaXRob3V0IHRoaXMgc3RlcCwgdGhlIGNvbmZsaWN0IHR4bgorIyBiZWxvdyB3 b3VsZCBhcnJpdmUgd2hpbGUgdGhlIHRhYmxlIGlzIHN0aWxsICdzJywgcGFfY2FuX3N0YXJ0KCkg d291bGQKKyMgcmV0dXJuIGZhbHNlLCB0aGUgbGVhZGVyIHdvdWxkIHNwb29sIHRvIGZpbGUgYW5k IGFwcGx5IHNlcmlhbGx5LCBhbmQKKyMgbm8gcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdvdWxkIGV2 ZXIgc3Bhd24uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJG5vZGVfcHViLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHQgVkFMVUVTICgxMDAwLCAnd2FybXVwJyk7Iik7Ciskbm9kZV9zdWIt PnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KDEpID0gMCBGUk9N IHBnX3N1YnNjcmlwdGlvbl9yZWwgV0hFUkUgc3JzdWJzdGF0ZSBOT1QgSU4gKCdyJyk7IgorKSBv ciBkaWUgInN1YnNjcmlwdGlvbiB0YWJsZXMgZGlkIG5vdCByZWFjaCBSRUFEWSBzdGF0ZSI7CisK KyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisjIExvb2sgdXAgdGhlIHBlci1zdWJzY3JpcHRpb24gQ0xUIG5hbWUu CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorbXkgJHN1Yl9vaWQgPSAkbm9kZV9zdWItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1Qgb2lkIEZST00gcGdfc3Vic2NyaXB0aW9uIFdIRVJFIHN1Ym5hbWUg PSAncyciKTsKK215ICRjbHQgPSAicGdfY29uZmxpY3QucGdfY29uZmxpY3RfbG9nXyRzdWJfb2lk IjsKK25vdGUgImNvbmZsaWN0IGxvZyB0YWJsZSBmb3Igc3Vic2NyaXB0aW9uIHM6ICRjbHQiOwor CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIyBBcm0gdGhlIGluamVjdGlvbiBwb2ludC4gIFRoaXMgcGF1c2Vz IHRoZSBQQSB3b3JrZXIgaW5zaWRlCisjIFByb2Nlc3NQZW5kaW5nQ29uZmxpY3RMb2dUdXBsZSgp IOKAlCBpLmUuICphZnRlciogdGhlIGVycm9yIGhhcyBmaXJlZAorIyBhbmQgdGhlIFBHX0NBVENI IGhhcyBydW4sICpiZWZvcmUqIHRoZSBzZWNvbmQgb3BlbiBvZiB0aGUgQ0xULiAgVGhpcworIyBp cyB0aGUgZXhhY3Qgd2luZG93IHRoZSBkZWZlcnJlZC1pbnNlcnQgcGF0aCBuZWVkcyB0byBiZSB0 ZXN0ZWQgaW4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJG5vZGVfc3ViLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdjbHQtcGVuZGluZy1mbHVzaC1i ZWZvcmUtb3BlbicsICd3YWl0Jyk7Iik7CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERyaXZlIHRoZSBj b25mbGljdC4gIFBBIHJlY2VpdmVzIHRoZSBzdHJlYW1lZCB0eG4sIGhpdHMgSU5TRVJUX0VYSVNU UworIyBpbnNpZGUgUmVwb3J0QXBwbHlDb25mbGljdCAod2hpY2ggb3BlbnMvY2xvc2VzIHRoZSBD TFQgY2xlYW5seSB3aGlsZQorIyBwcmVwYXJpbmcgdGhlIGRlZmVycmVkIHR1cGxlKSwgdGhlbiBl cmVwb3J0KEVSUk9SKSBmaXJlcywgUEdfQ0FUQ0gKKyMgcnVucywgYW5kIFBBIGVudGVycyBQcm9j ZXNzUGVuZGluZ0NvbmZsaWN0TG9nVHVwbGUg4oCUIHdoZXJlIGl0IHBhdXNlcworIyBhdCB0aGUg aW5qZWN0aW9uIHBvaW50LgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK215ICRsb2dfb2Zmc2V0ID0gLXMgJG5v ZGVfc3ViLT5sb2dmaWxlOworCiskbm9kZV9wdWItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxewor CUJFR0lOOworCUlOU0VSVCBJTlRPIHQgU0VMRUNUIGcsIHJlcGVhdCgneCcsIDEwMDApIEZST00g Z2VuZXJhdGVfc2VyaWVzKDIsIDIwMCkgZzsKKwlJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ2Nv bmZsaWN0Jyk7CisJQ09NTUlUOworfSk7CisKKyMgV2FpdCB1bnRpbCBQQSBpcyBwYXJrZWQgYXQg dGhlIGluamVjdGlvbiBwb2ludC4KKyRub2RlX3N1Yi0+d2FpdF9mb3JfZXZlbnQoJ2xvZ2ljYWwg cmVwbGljYXRpb24gcGFyYWxsZWwgd29ya2VyJywKKwknY2x0LXBlbmRpbmctZmx1c2gtYmVmb3Jl LW9wZW4nKTsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTm93IHRha2UgQUNDRVNTIEVYQ0xVU0lWRSBv biB0aGUgQ0xULiAgVFJVTkNBVEUgaXMgcGVybWl0dGVkIG9uIENMVHM7CisjIEF0IHRoaXMgcG9p bnQgdGhlIENMVCBpcyBlbXB0eSwgc28gdGhlIFRSVU5DQVRFIGlzIGVmZmVjdGl2ZWx5IGEgbm8t b3AKKyMgdGhhdCBqdXN0IGFjcXVpcmVzIHRoZSBsb2NrLgorIyBCZWNhdXNlIFBBIGlzIHBhdXNl ZCBhdCB0aGUgaW5qZWN0aW9uIHBvaW50LCB0aGlzIGxvY2sgaXMgZ3VhcmFudGVlZAorIyB0byBi ZSBhY3F1aXJlZCAqYmVmb3JlKiBQQSB0cmllcyB0byBvcGVuIHRoZSBDTFQuCisjIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorbXkgJGxvY2tlciA9ICRub2RlX3N1Yi0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jlcycp OworJGxvY2tlci0+cXVlcnlfdW50aWwocXIvbG9ja2VyX3JlYWR5LywgcXF7CisJXFxlY2hvIGxv Y2tlcl9yZWFkeQorCUJFR0lOOworCVRSVU5DQVRFICRjbHQ7Cit9KTsKKworIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyMgV2FrZSB0aGUgUEEgZnJvbSB0aGUgaW5qZWN0aW9uIHBvaW50LiAgSXQgd2lsbCBub3cg dHJ5IHRvIG9wZW4gdGhlCisjIENMVCBpbnNpZGUgUHJvY2Vzc1BlbmRpbmdDb25mbGljdExvZ1R1 cGxlIGFuZCBibG9jayBvbiB0aGUgbG9jayB0aGUKKyMgbG9ja2VyIHNlc3Npb24gaG9sZHMuCisj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorJG5vZGVfc3ViLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNU IGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdjbHQtcGVuZGluZy1mbHVzaC1iZWZvcmUtb3Blbicp OworCSBTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ2NsdC1wZW5kaW5nLWZsdXNoLWJl Zm9yZS1vcGVuJyk7Iik7CisKKyMgQ29uZmlybSB0aGUgUEEgd29ya2VyIGlzIGFjdHVhbGx5IHBh cmtlZCB3YWl0aW5nIG9uIHRoZSBDTFQgbG9jayDigJQKKyMgdGhpcyB2ZXJpZmllcyB3ZSBhcmUg ZXhlcmNpc2luZyB0aGUgZGVmZXJyZWQtaW5zZXJ0IGxvY2std2FpdCBwYXRoLAorIyBub3QgcmFj aW5nIHBhc3QgaXQuCitteSAkY2x0X29pZCA9ICRub2RlX3N1Yi0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIlNFTEVDVCAnJGNsdCc6OnJlZ2NsYXNzOjpvaWQiKTsKK29rKCAkbm9kZV9zdWItPnBv bGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsIHFxeworCQlTRUxFQ1QgRVhJU1RTICgKKwkJ CVNFTEVDVCAxCisJCQlGUk9NIHBnX2xvY2tzIGwKKwkJCUpPSU4gcGdfc3RhdF9hY3Rpdml0eSBh IE9OIGwucGlkID0gYS5waWQKKwkJCVdIRVJFIE5PVCBsLmdyYW50ZWQKKwkJCSAgQU5EIGwucmVs YXRpb24gPSAkY2x0X29pZAorCQkJICBBTkQgYS5iYWNrZW5kX3R5cGUgPSAnbG9naWNhbCByZXBs aWNhdGlvbiBwYXJhbGxlbCB3b3JrZXInCisJCSk7CisJfSwgJ3QnKSwKKwknUEEgd29ya2VyIGlz IGJsb2NrZWQgb24gdGhlIENMVCBsb2NrIGluc2lkZSBQcm9jZXNzUGVuZGluZ0NvbmZsaWN0TG9n VHVwbGUnKTsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVsZWFzZSB0aGUgbG9jay4gIFBBIHdha2Vz LCBpbnNlcnRzIHRoZSBkZWZlcnJlZCByb3csIGNvbW1pdHMgaXRzCisjIENMVCB0eG4sIHJlLXRo cm93cyB0aGUgb3JpZ2luYWwgZXJyb3IgdG8gdGhlIGxlYWRlciwgYW5kIHRoZSBsZWFkZXIKKyMg ZGlzYWJsZXMgdGhlIHN1YnNjcmlwdGlvbiAoZGlzYWJsZV9vbl9lcnJvciA9IHRydWUpLgorIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyRsb2NrZXItPnF1ZXJ5X3NhZmUoJ0NPTU1JVDsnKTsKK29rKCRsb2NrZXIt PnF1aXQsICdsb2NrZXIgc2Vzc2lvbiBjbG9zZWQgY2xlYW5seScpOworCitvayggJG5vZGVfc3Vi LT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkncG9zdGdyZXMnLAorCQkiU0VMRUNUIHN1YmVuYWJsZWQg PSBmYWxzZSBGUk9NIHBnX3N1YnNjcmlwdGlvbiBXSEVSRSBzdWJuYW1lID0gJ3MnIiwKKwkJJ3Qn KSwKKwknc3Vic2NyaXB0aW9uIGRpc2FibGVkIGFmdGVyIHRoZSBjb25mbGljdCcpOworCisjIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIyBWZXJpZnkgdGhlIGRlZmVycmVkIGNvbmZsaWN0IGxvZyB0dXBsZSBzdXJ2 aXZlZCB0aGUgbG9jayB3YWl0LgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK215ICRyb3dzID0gJG5vZGVfc3Vi LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCopIEZST00gJGNsdCBXSEVS RSBjb25mbGljdF90eXBlID0gJ2luc2VydF9leGlzdHMnIik7Citpcygkcm93cywgJzEnLAorCSdk ZWZlcnJlZCBDTFQgaW5zZXJ0IGJ5IFBBIHdvcmtlciBzdWNjZWVkZWQgYWZ0ZXIgbG9jayByZWxl YXNlJyk7CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsc28gdmVyaWZ5IHRoZSBjb25mbGljdCB3YXMg cmVwb3J0ZWQgaW4gdGhlIHNlcnZlciBsb2cKKyMgKGNvbmZsaWN0X2xvZ19kZXN0aW5hdGlvbiA9 ICdhbGwnIGxvZ3MgdG8gYm90aCB0aGUgdGFibGUgYW5kIHRoZSBsb2cpLgorIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KK215ICRsb2dfY29udGVudHMgPSBzbHVycF9maWxlKCRub2RlX3N1Yi0+bG9nZmlsZSwgJGxv Z19vZmZzZXQpOworbGlrZSgKKwkkbG9nX2NvbnRlbnRzLAorCXFyL0VSUk9SOlxzK2NvbmZsaWN0 IGRldGVjdGVkIG9uIHJlbGF0aW9uICJwdWJsaWNcLnQiOiBjb25mbGljdD1pbnNlcnRfZXhpc3Rz LywKKwknY29uZmxpY3QgcmVwb3J0ZWQgaW4gc2VydmVyIGxvZycpOworCitkb25lX3Rlc3Rpbmco KTsKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --00000000000023d76f0654d5946e--