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.94.2) (envelope-from ) id 1sTf1N-0012zS-2T for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Jul 2024 10:02:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sTf1L-00H4HK-DR for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Jul 2024 10:02:55 +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.94.2) (envelope-from ) id 1sTf1K-00H4HB-PY for pgsql-hackers@lists.postgresql.org; Tue, 16 Jul 2024 10:02:55 +0000 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sTf1H-002K3b-0n for pgsql-hackers@lists.postgresql.org; Tue, 16 Jul 2024 10:02:53 +0000 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-2eede876fccso40073011fa.1 for ; Tue, 16 Jul 2024 03:02:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721124169; x=1721728969; 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=wwEximD6FPUFSEj3tdWXGFdHzOqCqFPkbPW3adB6JVE=; b=ldOPxZUJDOr1t/MtAzTOVJ4WTYupfG73KW9vvgMhRSNJdw8ZhabwnzMc23L4ZN80rU 9DT6cIp0chwXBk6ZthGQqhImawGVMMWVdGn3hNTufcKQYLJLsiUcSO6C3C9OFyLnL3tf 1RDcIodRb6g5mSzj4VmXDprULbJiCjvgCP8TIVi+a2WQBDwskQGCY0tphkJTMwcmXLWT RHcNJVI8MUX23ykqJyrsXkVysQ+mz4gGpkIjlK4ETaR0oVgKqZ3XSCIOsN5EqmuCzb8Y kIhUCHsKLPNLvjt/PUccgI0jyG0JK2dhouSDUHqW2MafZVnSUeXG3//V/roLYcRD3lhn TGYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721124169; x=1721728969; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=wwEximD6FPUFSEj3tdWXGFdHzOqCqFPkbPW3adB6JVE=; b=u9RuS/kbrzyQeJSzyhZB8UmhVPiExir1SV78XfPuwbPiWy5lDeKuuVObtoM3IxAgnR RUS8yrryI3LNlgYH5yRZNddT7rowjjC9ycr1AvgzjgoopG1dlKaaNqIWo8QrVgeJhG6v R2x/jblpOuptE4jTno8/3DB8xNie0wOPQt9riZE54jCE3v4FNyRg4Vg1lZJ0/WiY3wwc G3khksgXmqTTyrDRocfzSCujsfszvizps995YKXE37k8H/pVa4G2Ww2t/j8c4A5cvHH+ dydmwkv9nOglA5H5AIGsEkAEEFVNkN1GI61DfmpfqIw1q0lK3RjhiBZW50J4Ke7wQDL6 s9Zg== X-Forwarded-Encrypted: i=1; AJvYcCVuhC2QFGRk4WqnQiAIV2rDHrVkJk24hpeutFSCkzgoF1YqBXat1F2n1gdznKJfaNtsv5a66C9FoznHst+R4PpvqFDC38shWN5HLhvyiIo6AWbw X-Gm-Message-State: AOJu0YzmbLCmhC3Y+yBKYLRL2yxxXQ6f43XYhr9u5GzAhLTI6808nFJa wtYotTM1LqIOCQxlOCcfmtiiltgftVepgGOtBsTUGfAUOGaUtuJaWXHp9LEbs6LZJrNJkNMRVdW vq40PJ7FC/Zt59Mj6baqi1js4l4AMy39m X-Google-Smtp-Source: AGHT+IELiLtSLD7iv7nI385isukxUGOZmpWoi0zVBKaxaos4rlkN5GPnMgLawn1PDUKAEdjwydoT+RskDmkvF9RCVkY= X-Received: by 2002:a2e:889a:0:b0:2ee:9115:f535 with SMTP id 38308e7fff4ca-2eef41da86amr11806781fa.33.1721124168877; Tue, 16 Jul 2024 03:02:48 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Peter Smith Date: Tue, 16 Jul 2024 20:02:21 +1000 Message-ID: Subject: Re: Slow catchup of 2PC (twophase) transactions on replica in LR To: "Hayato Kuroda (Fujitsu)" Cc: Amit Kapila , "Zhijie Hou (Fujitsu)" , "pgsql-hackers@lists.postgresql.org" , Vitaly Davydov , Ajin Cherian Content-Type: multipart/mixed; boundary="000000000000b3635f061d5a7249" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b3635f061d5a7249 Content-Type: multipart/alternative; boundary="000000000000b3635e061d5a7247" --000000000000b3635e061d5a7247 Content-Type: text/plain; charset="UTF-8" Hi, here are some review comments for patch v18-0001. ====== doc/src/sgml/protocol.sgml nitpick - Although it is no fault of your patch, IMO it would be nicer for the TWO_PHASE description (of CREATE REPLICATION SLOT) to also be in the same consistent order as what you have (e.g. below FAILOVER). So I moved it. ====== src/backend/access/transam/twophase.c LookupGXactBySubid: nitpick - add a blank line before return ====== src/backend/commands/subscriptioncmds.c CommonChecksForFailoverAndTwophase: nitpick - added Assert for the generic-looking "option" parameter name nitpick - modified comment about transaction block ~~~ 1. AlterSubscription + * Workers may still survive even if the subscription has + * been disabled. They may read the pg_subscription + * catalog and detect that the twophase parameter is + * updated, which causes the assertion failure. Ensure + * workers have already been exited to avoid it. "which causes the assertion failure" -- what assertion failure is that? The comment is not very clear. ~ nitpick - in comment /twophase/two_phase/ nitpick - typo /acoordingly/accordingly/ ====== src/backend/replication/logical/launcher.c logicalrep_workers_find: nitpick - /require_lock/acquire_lock/ nitpick - take the Assert out of the else. ====== src/backend/replication/slot.c nitpick - refactor the code to check (failover) only one time. See the nitpicks attachment. ~ 2. ParseAlterReplSlotOptions nitpick -- IMO the ParseAlterReplSlotOptions(). function does more harm than good here by adding the unnecessary complexity of messing around with multiple parameters that are passed-by-reference. All this would be simpler if it was just coded inline in the AlterReplicationSlot() function, which is the only caller. I've refactored all this to demonstrate (see nitpicks attachment) ====== src/include/replication/worker_internal.h nitpick - /require_lock/acquire_lock/ ====== src/test/regress/sql/subscription.sql nitpick - tweak comments ====== src/test/subscription/t/021_twophase.pl nitpick - change comment style to indicate each test part better. ====== 99. Please also see the attached diffs patch which implements any nitpicks mentioned above. ====== Kind Regards, Peter Smith. Fujitsu Australia --000000000000b3635e061d5a7247 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi, here are some review comments for patch v18-0001.
<= br>=3D=3D=3D=3D=3D=3D
doc/src/sgml/protocol.sgml

nitpick - Althou= gh it is no fault of your patch, IMO it would be nicer for the TWO_PHASE de= scription (of CREATE REPLICATION SLOT) to also be in the same consistent or= der as what you have (e.g. below FAILOVER). So I moved it.

=3D=3D=3D= =3D=3D=3D
src/backend/access/transam/twophase.c =C2=A0 =C2=A0

Lo= okupGXactBySubid:
nitpick - add a blank line before return

=3D=3D= =3D=3D=3D=3D
src/backend/commands/subscriptioncmds.c =C2=A0

Comm= onChecksForFailoverAndTwophase:
nitpick - added Assert for the generic-l= ooking "option" parameter name
nitpick - modified comment abou= t transaction block

~~~

1. AlterSubscription
+ * Work= ers may still survive even if the subscription has
+ * been disable= d. They may read the pg_subscription
+ * catalog and detect that th= e twophase parameter is
+ * updated, which causes the assertion fai= lure. Ensure
+ * workers have already been exited to avoid it.
<= br>"which causes the assertion failure" -- what assertion failure= is that? The comment is not very clear.

~

nitpick - in comm= ent /twophase/two_phase/
nitpick - typo /acoordingly/accordingly/
=3D=3D=3D=3D=3D=3D
src/backend/replication/logical/launcher.c

lo= gicalrep_workers_find:
nitpick - /require_lock/acquire_lock/
nitpick = - take the Assert out of the else.

=3D=3D=3D=3D=3D=3D
src/backend= /replication/slot.c =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0

nitpic= k - refactor the code to check (failover) only one time. See the nitpicks a= ttachment.

~

2. ParseAlterReplSlotOptions

nitpick -- I= MO the ParseAlterReplSlotOptions(). function does more harm than good here = by adding the unnecessary complexity of messing around with multiple parame= ters that are passed-by-reference. All this would be simpler if it was just= coded inline in the AlterReplicationSlot() function, which is the only cal= ler. I've refactored all this to demonstrate (see nitpicks attachment)<= br>
=3D=3D=3D=3D=3D=3D
src/include/replication/worker_internal.h
=
nitpick - /require_lock/acquire_lock/

=3D=3D=3D=3D=3D=3D
src/= test/regress/sql/subscription.sql =C2=A0 =C2=A0

nitpick - tweak com= ments

=3D=3D=3D=3D=3D=3D
src/test/subscription/t/021_twophase.pl =C2=A0

nitpick - change comme= nt style to indicate each test part better.

=3D=3D=3D=3D=3D=3D
99= .
Please also see the attached diffs patch which implements any nitpicks= mentioned above.

=3D=3D=3D=3D=3D=3D
Kind Regards,
Peter Smith= .
Fujitsu Australia
--000000000000b3635e061d5a7247-- --000000000000b3635f061d5a7249 Content-Type: text/plain; charset="US-ASCII"; name="PS_NITPICKS_20240716_2PC_v180001.txt" Content-Disposition: attachment; filename="PS_NITPICKS_20240716_2PC_v180001.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lyo8v0k80 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3By b3RvY29sLnNnbWwKaW5kZXggM2FjNGE0Yi4uY2JhNjY2MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL3Byb3RvY29sLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwKQEAgLTIw NTAsMjEgKzIwNTAsNiBAQCBwc3FsICJkYm5hbWU9cG9zdGdyZXMgcmVwbGljYXRpb249ZGF0YWJh c2UiIC1jICJJREVOVElGWV9TWVNURU07IgogCiAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAg IDx2YXJsaXN0ZW50cnk+Ci0gICAgICAgIDx0ZXJtPjxsaXRlcmFsPlRXT19QSEFTRSBbIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBsYWNlYWJsZT4gXTwvbGl0ZXJh bD48L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgIDxwYXJhPgotICAgICAgICAg IElmIHRydWUsIHRoaXMgbG9naWNhbCByZXBsaWNhdGlvbiBzbG90IHN1cHBvcnRzIGRlY29kaW5n IG9mIHR3by1waGFzZQotICAgICAgICAgIGNvbW1pdC4gV2l0aCB0aGlzIG9wdGlvbiwgY29tbWFu ZHMgcmVsYXRlZCB0byB0d28tcGhhc2UgY29tbWl0IHN1Y2ggYXMKLSAgICAgICAgICA8bGl0ZXJh bD5QUkVQQVJFIFRSQU5TQUNUSU9OPC9saXRlcmFsPiwgPGxpdGVyYWw+Q09NTUlUIFBSRVBBUkVE PC9saXRlcmFsPgotICAgICAgICAgIGFuZCA8bGl0ZXJhbD5ST0xMQkFDSyBQUkVQQVJFRDwvbGl0 ZXJhbD4gYXJlIGRlY29kZWQgYW5kIHRyYW5zbWl0dGVkLgotICAgICAgICAgIFRoZSB0cmFuc2Fj dGlvbiB3aWxsIGJlIGRlY29kZWQgYW5kIHRyYW5zbWl0dGVkIGF0Ci0gICAgICAgICAgPGxpdGVy YWw+UFJFUEFSRSBUUkFOU0FDVElPTjwvbGl0ZXJhbD4gdGltZS4KLSAgICAgICAgICBUaGUgZGVm YXVsdCBpcyBmYWxzZS4KLSAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgIDx0 ZXJtPjxsaXRlcmFsPlJFU0VSVkVfV0FMIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmJvb2xlYW48L3JlcGxhY2VhYmxlPiBdPC9saXRlcmFsPjwvdGVybT4KICAgICAgICAgPGxpc3Rp dGVtPgogICAgICAgICAgPHBhcmE+CkBAIC0yMTA0LDYgKzIwODksMjEgQEAgcHNxbCAiZGJuYW1l PXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAiSURFTlRJRllfU1lTVEVNOyIKICAg ICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgIDx0ZXJtPjxsaXRlcmFsPlRXT19Q SEFTRSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBsYWNlYWJs ZT4gXTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJh PgorICAgICAgICAgIElmIHRydWUsIHRoaXMgbG9naWNhbCByZXBsaWNhdGlvbiBzbG90IHN1cHBv cnRzIGRlY29kaW5nIG9mIHR3by1waGFzZQorICAgICAgICAgIGNvbW1pdC4gV2l0aCB0aGlzIG9w dGlvbiwgY29tbWFuZHMgcmVsYXRlZCB0byB0d28tcGhhc2UgY29tbWl0IHN1Y2ggYXMKKyAgICAg ICAgICA8bGl0ZXJhbD5QUkVQQVJFIFRSQU5TQUNUSU9OPC9saXRlcmFsPiwgPGxpdGVyYWw+Q09N TUlUIFBSRVBBUkVEPC9saXRlcmFsPgorICAgICAgICAgIGFuZCA8bGl0ZXJhbD5ST0xMQkFDSyBQ UkVQQVJFRDwvbGl0ZXJhbD4gYXJlIGRlY29kZWQgYW5kIHRyYW5zbWl0dGVkLgorICAgICAgICAg IFRoZSB0cmFuc2FjdGlvbiB3aWxsIGJlIGRlY29kZWQgYW5kIHRyYW5zbWl0dGVkIGF0CisgICAg ICAgICAgPGxpdGVyYWw+UFJFUEFSRSBUUkFOU0FDVElPTjwvbGl0ZXJhbD4gdGltZS4KKyAgICAg ICAgICBUaGUgZGVmYXVsdCBpcyBmYWxzZS4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgIDwvdmFyaWFibGVsaXN0Pgog CiAgICAgICA8cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3 b3BoYXNlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCmluZGV4IDM1 YmNlNjguLmYzYzZlMWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3 b3BoYXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpAQCAt Mjc0MSw1ICsyNzQxLDYgQEAgTG9va3VwR1hhY3RCeVN1YmlkKE9pZCBzdWJpZCkKIAkJfQogCX0K IAlMV0xvY2tSZWxlYXNlKFR3b1BoYXNlU3RhdGVMb2NrKTsKKwogCXJldHVybiBmb3VuZDsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCA2OTk1YTYyLi4zNzAz Y2Y2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC0xMDc2LDYg KzEwNzYsOCBAQCBDaGVja0FsdGVyU3ViT3B0aW9uKFN1YnNjcmlwdGlvbiAqc3ViLCBjb25zdCBj aGFyICpvcHRpb24sIGJvb2wgaXNUb3BMZXZlbCkKIHsKIAlTdHJpbmdJbmZvRGF0YSBjbWQ7CiAK KwlBc3NlcnQoc3Ryc3RyKCJ0d29fcGhhc2UsZmFpbG92ZXIiLCBvcHRpb24pKTsKKwogCWlmICgh c3ViLT5zbG90bmFtZSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX09C SkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKQEAgLTEwOTgsOCArMTEwMCw4IEBAIENo ZWNrQWx0ZXJTdWJPcHRpb24oU3Vic2NyaXB0aW9uICpzdWIsIGNvbnN0IGNoYXIgKm9wdGlvbiwg Ym9vbCBpc1RvcExldmVsKQogCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIkFMVEVSIFNVQlNDUklQ VElPTiAuLi4gU0VUICglcykiLCBvcHRpb24pOwogCiAJLyoKLQkgKiBUaGUgY2hhbmdlZCBvcHRp b24gb2YgdGhlIHNsb3QgY2FuJ3QgYmUgcm9sbGVkIGJhY2s6IHByZXZlbnQgd2UgYXJlIGluCi0J ICogdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorCSAqIFRoZSBjaGFuZ2VkIG9wdGlvbiBvZiB0aGUg c2xvdCBjYW4ndCBiZSByb2xsZWQgYmFjaywgc28gZGlzYWxsb3cgaWYgd2UKKwkgKiBhcmUgaW4g YSB0cmFuc2FjdGlvbiBibG9jay4KIAkgKi8KIAlQcmV2ZW50SW5UcmFuc2FjdGlvbkJsb2NrKGlz VG9wTGV2ZWwsIGNtZC5kYXRhKTsKIApAQCAtMTI4Miw3ICsxMjg0LDcgQEAgQWx0ZXJTdWJzY3Jp cHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJ CQkJCS8qCiAJCQkJCSAqIFdvcmtlcnMgbWF5IHN0aWxsIHN1cnZpdmUgZXZlbiBpZiB0aGUgc3Vi c2NyaXB0aW9uIGhhcwogCQkJCQkgKiBiZWVuIGRpc2FibGVkLiBUaGV5IG1heSByZWFkIHRoZSBw Z19zdWJzY3JpcHRpb24KLQkJCQkJICogY2F0YWxvZyBhbmQgZGV0ZWN0IHRoYXQgdGhlIHR3b3Bo YXNlIHBhcmFtZXRlciBpcworCQkJCQkgKiBjYXRhbG9nIGFuZCBkZXRlY3QgdGhhdCB0aGUgdHdv X3BoYXNlIHBhcmFtZXRlciBpcwogCQkJCQkgKiB1cGRhdGVkLCB3aGljaCBjYXVzZXMgdGhlIGFz c2VydGlvbiBmYWlsdXJlLiBFbnN1cmUKIAkJCQkJICogd29ya2VycyBoYXZlIGFscmVhZHkgYmVl biBleGl0ZWQgdG8gYXZvaWQgaXQuCiAJCQkJCSAqLwpAQCAtMTMwNCw3ICsxMzA2LDcgQEAgQWx0 ZXJTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclN1YnNjcmlwdGlvblN0bXQg KnN0bXQsCiAJCQkJCQkJCSBlcnJtc2coImNhbm5vdCBkaXNhYmxlIHR3b19waGFzZSB3aGVuIHBy ZXBhcmVkIHRyYW5zYWN0aW9ucyBhcmUgcHJlc2VudCIpLAogCQkJCQkJCQkgZXJyaGludCgiUmVz b2x2ZSB0aGVzZSB0cmFuc2FjdGlvbnMgYW5kIHRyeSBhZ2Fpbi4iKSkpOwogCi0JCQkJCS8qIENo YW5nZSBzeXN0ZW0gY2F0YWxvZyBhY29vcmRpbmdseSAqLworCQkJCQkvKiBDaGFuZ2Ugc3lzdGVt IGNhdGFsb2cgYWNjb3JkaW5nbHkgKi8KIAkJCQkJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9u X3N1YnR3b3BoYXNlc3RhdGUgLSAxXSA9CiAJCQkJCQlDaGFyR2V0RGF0dW0ob3B0cy50d29waGFz ZSA/CiAJCQkJCQkJCQkgTE9HSUNBTFJFUF9UV09QSEFTRV9TVEFURV9QRU5ESU5HIDoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwppbmRleCA0NTc0NGI3Li5jNTY2 ZDUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVy LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCkBAIC0y NzIsMTUgKzI3MiwxNSBAQCBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE9pZCBzdWJpZCwgT2lkIHJl bGlkLCBib29sIG9ubHlfcnVubmluZykKICAqIHRoZSBzdWJzY3JpcHRpb24sIGluc3RlYWQgb2Yg anVzdCBvbmUuCiAgKi8KIExpc3QgKgotbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1Ymlk LCBib29sIG9ubHlfcnVubmluZywgYm9vbCByZXF1aXJlX2xvY2spCitsb2dpY2FscmVwX3dvcmtl cnNfZmluZChPaWQgc3ViaWQsIGJvb2wgb25seV9ydW5uaW5nLCBib29sIGFjcXVpcmVfbG9jaykK IHsKIAlpbnQJCQlpOwogCUxpc3QJICAgKnJlcyA9IE5JTDsKIAotCWlmIChyZXF1aXJlX2xvY2sp CisJaWYgKGFjcXVpcmVfbG9jaykKIAkJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9j aywgTFdfU0hBUkVEKTsKLQllbHNlCi0JCUFzc2VydChMV0xvY2tIZWxkQnlNZShMb2dpY2FsUmVw V29ya2VyTG9jaykpOworCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lKExvZ2ljYWxSZXBXb3JrZXJM b2NrKSk7CiAKIAkvKiBTZWFyY2ggZm9yIGF0dGFjaGVkIHdvcmtlciBmb3IgYSBnaXZlbiBzdWJz Y3JpcHRpb24gaWQuICovCiAJZm9yIChpID0gMDsgaSA8IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9u X3dvcmtlcnM7IGkrKykKQEAgLTI5MSw3ICsyOTEsNyBAQCBsb2dpY2FscmVwX3dvcmtlcnNfZmlu ZChPaWQgc3ViaWQsIGJvb2wgb25seV9ydW5uaW5nLCBib29sIHJlcXVpcmVfbG9jaykKIAkJCXJl cyA9IGxhcHBlbmQocmVzLCB3KTsKIAl9CiAKLQlpZiAocmVxdWlyZV9sb2NrKQorCWlmIChhY3F1 aXJlX2xvY2spCiAJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwogCiAJcmV0 dXJuIHJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRleCAyZjE2N2EyLi5lNzVmMjRiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vc2xvdC5jCkBAIC04NDIsMjMgKzg0MiwyNSBAQCBSZXBsaWNhdGlvblNsb3RB bHRlcihjb25zdCBjaGFyICpuYW1lLCBib29sICpmYWlsb3ZlciwgYm9vbCAqdHdvX3BoYXNlKQog CQkJCQkJICAgIiBvbiB0aGUgc3RhbmRieSIpKTsKIAl9CiAKLQkvKgotCSAqIERvIG5vdCBhbGxv dyB1c2VycyB0byBlbmFibGUgZmFpbG92ZXIgZm9yIHRlbXBvcmFyeSBzbG90cyBhcyB3ZSBkbyBu b3QKLQkgKiBzdXBwb3J0IHN5bmNpbmcgdGVtcG9yYXJ5IHNsb3RzIHRvIHRoZSBzdGFuZGJ5Lgot CSAqLwotCWlmIChmYWlsb3ZlciAmJiAqZmFpbG92ZXIgJiYKLQkJTXlSZXBsaWNhdGlvblNsb3Qt PmRhdGEucGVyc2lzdGVuY3kgPT0gUlNfVEVNUE9SQVJZKQorCWlmIChmYWlsb3ZlcikKKwl7CisJ CS8qCisJCSAqIERvIG5vdCBhbGxvdyB1c2VycyB0byBlbmFibGUgZmFpbG92ZXIgZm9yIHRlbXBv cmFyeSBzbG90cyBhcyB3ZSBkbyBub3QKKwkJICogc3VwcG9ydCBzeW5jaW5nIHRlbXBvcmFyeSBz bG90cyB0byB0aGUgc3RhbmRieS4KKwkJICovCisJCWlmICgqZmFpbG92ZXIgJiYgTXlSZXBsaWNh dGlvblNsb3QtPmRhdGEucGVyc2lzdGVuY3kgPT0gUlNfVEVNUE9SQVJZKQogCQllcmVwb3J0KEVS Uk9SLAogCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCWVy cm1zZygiY2Fubm90IGVuYWJsZSBmYWlsb3ZlciBmb3IgYSB0ZW1wb3JhcnkgcmVwbGljYXRpb24g c2xvdCIpKTsKIAotCWlmIChmYWlsb3ZlciAmJiBNeVJlcGxpY2F0aW9uU2xvdC0+ZGF0YS5mYWls b3ZlciAhPSAqZmFpbG92ZXIpCi0JewotCQlTcGluTG9ja0FjcXVpcmUoJk15UmVwbGljYXRpb25T bG90LT5tdXRleCk7Ci0JCU15UmVwbGljYXRpb25TbG90LT5kYXRhLmZhaWxvdmVyID0gKmZhaWxv dmVyOwotCQlTcGluTG9ja1JlbGVhc2UoJk15UmVwbGljYXRpb25TbG90LT5tdXRleCk7CisJCWlm IChNeVJlcGxpY2F0aW9uU2xvdC0+ZGF0YS5mYWlsb3ZlciAhPSAqZmFpbG92ZXIpCisJCXsKKwkJ CVNwaW5Mb2NrQWNxdWlyZSgmTXlSZXBsaWNhdGlvblNsb3QtPm11dGV4KTsKKwkJCU15UmVwbGlj YXRpb25TbG90LT5kYXRhLmZhaWxvdmVyID0gKmZhaWxvdmVyOworCQkJU3BpbkxvY2tSZWxlYXNl KCZNeVJlcGxpY2F0aW9uU2xvdC0+bXV0ZXgpOwogCi0JCXVwZGF0ZV9zbG90ID0gdHJ1ZTsKKwkJ CXVwZGF0ZV9zbG90ID0gdHJ1ZTsKKwkJfQogCX0KIAogCWlmICh0d29fcGhhc2UgJiYgTXlSZXBs aWNhdGlvblNsb3QtPmRhdGEudHdvX3BoYXNlICE9ICp0d29fcGhhc2UpCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3dhbHNlbmRlci5jCmluZGV4IDA0ZjY1ZTAuLmFmOGU5NTggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3dhbHNlbmRlci5jCkBAIC0xNDA1LDU2ICsxNDA1LDQyIEBAIERyb3BSZXBsaWNhdGlvblNs b3QoRHJvcFJlcGxpY2F0aW9uU2xvdENtZCAqY21kKQogCVJlcGxpY2F0aW9uU2xvdERyb3AoY21k LT5zbG90bmFtZSwgIWNtZC0+d2FpdCk7CiB9CiAKKwogLyoKLSAqIFByb2Nlc3MgZXh0cmEgb3B0 aW9ucyBnaXZlbiB0byBBTFRFUl9SRVBMSUNBVElPTl9TTE9ULgorICogQ2hhbmdlIHRoZSBkZWZp bml0aW9uIG9mIGEgcmVwbGljYXRpb24gc2xvdC4KICAqLwogc3RhdGljIHZvaWQKLVBhcnNlQWx0 ZXJSZXBsU2xvdE9wdGlvbnMoQWx0ZXJSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCwKLQkJCQkJCSAg Ym9vbCAqZmFpbG92ZXJfZ2l2ZW4sIGJvb2wgKmZhaWxvdmVyLAotCQkJCQkJICBib29sICp0d29f cGhhc2VfZ2l2ZW4sIGJvb2wgKnR3b19waGFzZSkKK0FsdGVyUmVwbGljYXRpb25TbG90KEFsdGVy UmVwbGljYXRpb25TbG90Q21kICpjbWQpCiB7Ci0JKmZhaWxvdmVyX2dpdmVuID0gZmFsc2U7Ci0J KnR3b19waGFzZV9naXZlbiA9IGZhbHNlOworCWJvb2wJCWZhaWxvdmVyX2dpdmVuID0gZmFsc2U7 CisJYm9vbAkJdHdvX3BoYXNlX2dpdmVuID0gZmFsc2U7CisJYm9vbAkJZmFpbG92ZXI7CisJYm9v bAkJdHdvX3BoYXNlOwogCiAJLyogUGFyc2Ugb3B0aW9ucyAqLwogCWZvcmVhY2hfcHRyKERlZkVs ZW0sIGRlZmVsLCBjbWQtPm9wdGlvbnMpCiAJewogCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAiZmFpbG92ZXIiKSA9PSAwKQogCQl7Ci0JCQlpZiAoKmZhaWxvdmVyX2dpdmVuKQorCQkJaWYg KGZhaWxvdmVyX2dpdmVuKQogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJD T0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJCQkgZXJybXNnKCJjb25mbGljdGluZyBvciByZWR1bmRh bnQgb3B0aW9ucyIpKSk7Ci0JCQkqZmFpbG92ZXJfZ2l2ZW4gPSB0cnVlOwotCQkJKmZhaWxvdmVy ID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7CisJCQlmYWlsb3Zlcl9naXZlbiA9IHRydWU7CisJCQlm YWlsb3ZlciA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOwogCQl9CiAJCWVsc2UgaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgInR3b19waGFzZSIpID09IDApCiAJCXsKLQkJCWlmICgqdHdvX3BoYXNl X2dpdmVuKQorCQkJaWYgKHR3b19waGFzZV9naXZlbikKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCQkJIGVycm1zZygiY29uZmxp Y3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMiKSkpOwotCQkJKnR3b19waGFzZV9naXZlbiA9IHRy dWU7Ci0JCQkqdHdvX3BoYXNlID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7CisJCQl0d29fcGhhc2Vf Z2l2ZW4gPSB0cnVlOworCQkJdHdvX3BoYXNlID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7CiAJCX0K IAkJZWxzZQogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvcHRpb246ICVzIiwgZGVmZWwt PmRlZm5hbWUpOwogCX0KLX0KLQotLyoKLSAqIENoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiBhIHJl cGxpY2F0aW9uIHNsb3QuCi0gKi8KLXN0YXRpYyB2b2lkCi1BbHRlclJlcGxpY2F0aW9uU2xvdChB bHRlclJlcGxpY2F0aW9uU2xvdENtZCAqY21kKQotewotCWJvb2wJCWZhaWxvdmVyX2dpdmVuOwot CWJvb2wJCXR3b19waGFzZV9naXZlbjsKLQlib29sCQlmYWlsb3ZlcjsKLQlib29sCQl0d29fcGhh c2U7Ci0KLQlQYXJzZUFsdGVyUmVwbFNsb3RPcHRpb25zKGNtZCwgJmZhaWxvdmVyX2dpdmVuLCAm ZmFpbG92ZXIsCi0JCQkJCQkJICAmdHdvX3BoYXNlX2dpdmVuLCAmdHdvX3BoYXNlKTsKIAogCVJl cGxpY2F0aW9uU2xvdEFsdGVyKGNtZC0+c2xvdG5hbWUsCiAJCQkJCQkgZmFpbG92ZXJfZ2l2ZW4g PyAmZmFpbG92ZXIgOiBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v d29ya2VyX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJu YWwuaAppbmRleCA5OTBmNTI0Li45NjQ2MjYxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaApAQCAtMjQxLDcgKzI0MSw3IEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxy ZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCk7CiBleHRlcm4gTG9naWNhbFJlcFdvcmtlciAqbG9n aWNhbHJlcF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwKIAkJCQkJCQkJCQkJCWJv b2wgb25seV9ydW5uaW5nKTsKIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3dvcmtlcnNfZmluZChP aWQgc3ViaWQsIGJvb2wgb25seV9ydW5uaW5nLAotCQkJCQkJCQkJIGJvb2wgcmVxdWlyZV9sb2Nr KTsKKwkJCQkJCQkJCSBib29sIGFjcXVpcmVfbG9jayk7CiBleHRlcm4gYm9vbCBsb2dpY2FscmVw X3dvcmtlcl9sYXVuY2goTG9naWNhbFJlcFdvcmtlclR5cGUgd3R5cGUsCiAJCQkJCQkJCQkgT2lk IGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKIAkJCQkJCQkJCSBPaWQgdXNl cmlkLCBPaWQgcmVsaWQsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1 YnNjcmlwdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5v dXQKaW5kZXggNTFmYTRiOS4uNDBlMWEwNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c3Vic2NyaXB0aW9uLm91dApAQCAtMzc3LDcgKzM3Nyw3IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSBy ZXBsaWNhdGlvbiwgeW91IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90 LCBlCiAgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAg ICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IHAgICAgICAgICAgICAgICAg fCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgdCAgICAgICAgICAgICAgICAgfCBmICAgICAg ICAgICAgIHwgZiAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAotLS0gV2UgY2FuIGFsdGVyIHN0cmVhbWluZyB3 aGVuIHR3b19waGFzZSBlbmFibGVkCistLSB3ZSBjYW4gYWx0ZXIgc3RyZWFtaW5nIHdoZW4gdHdv X3BoYXNlIGlzIGVuYWJsZWQKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VU IChzdHJlYW1pbmcgPSB0cnVlKTsKIFxkUnMrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24uc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbAppbmRleCBhMzg4NmQ3Li5iNjRmNDE5IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24uc3FsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwKQEAgLTI1Niw3ICsyNTYsNyBAQCBDUkVBVEUg U1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QnIFBVQgogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09O TkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHVi IFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgdHdvX3BoYXNlID0gdHJ1ZSk7CiAKIFxkUnMrCi0tLSBX ZSBjYW4gYWx0ZXIgc3RyZWFtaW5nIHdoZW4gdHdvX3BoYXNlIGVuYWJsZWQKKy0tIHdlIGNhbiBh bHRlciBzdHJlYW1pbmcgd2hlbiB0d29fcGhhc2UgaXMgZW5hYmxlZAogQUxURVIgU1VCU0NSSVBU SU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IHRydWUpOwogCiBcZFJzKwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIxX3R3b3BoYXNlLnBsIGIvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDIxX3R3b3BoYXNlLnBsCmluZGV4IDRlOGY2MjcuLjY2MjY1Yzcg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMV90d29waGFzZS5wbAorKysg Yi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjFfdHdvcGhhc2UucGwKQEAgLTM3MSw4ICszNzEs OCBAQCBpcygkcmVzdWx0LCBxcSgyKSwgJ3JlcGxpY2F0ZWQgZGF0YSBpbiBzdWJzY3JpYmVyIHRh YmxlJyk7CiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgU1VC U0NSSVBUSU9OIHRhcF9zdWIiKTsKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwot IyBEaXNhYmxlIHRoZSBzdWJzY3JpcHRpb24gYW5kIGFsdGVyIGl0IHRvIHR3b19waGFzZSA9IGZh bHNlLAotIyB0aGVuIHZlcmlmeSB0aGF0IHRoZSBhbHRlcmVkIHN1YnNjcmlwdGlvbiByZWZsZWN0 cyB0aGUgdHdvX3BoYXNlIG9wdGlvbi4KKyMgQWx0ZXIgdGhlIHN1YnNjcmlwdGlvbiB0byB0d29f cGhhc2UgPSBmYWxzZS4KKyMgVmVyaWZ5IHRoYXQgdGhlIGFsdGVyZWQgc3Vic2NyaXB0aW9uIHJl ZmxlY3RzIHRoZSB0d29fcGhhc2Ugb3B0aW9uLgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwogCiAjIEFsdGVyIHN1YnNjcmlwdGlvbiB0d29fcGhhc2UgdG8gZmFsc2UKQEAgLTM5NSw3 ICszOTUsMTAgQEAgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAogKTsKIGlzKCRyZXN1bHQsIHFxKGQpLCAndHdvLXBoYXNlIHNob3VsZCBiZSBkaXNhYmxl ZCcpOwogCi0jIE5vdyBkbyBhIHByZXBhcmUgb24gdGhlIHB1Ymxpc2hlciBhbmQgbWFrZSBzdXJl IHRoYXQgaXQgaXMgbm90IHJlcGxpY2F0ZWQuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisjIE5vdyBkbyBhIHByZXBhcmUgb24gdGhlIHB1Ymxpc2hlci4KKyMgVmVyaWZ5IHRoYXQg aXQgaXMgbm90IHJlcGxpY2F0ZWQuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKIAkncG9zdGdyZXMnLCBxcXsKICAgICBCRUdJTjsK QEAgLTQxMSw3ICs0MTQsMTAgQEAgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAogCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsi KTsKIGlzKCRyZXN1bHQsIHFxKDApLCAnc2hvdWxkIGJlIG5vIHByZXBhcmVkIHRyYW5zYWN0aW9u cyBvbiBzdWJzY3JpYmVyJyk7CiAKLSMgTm93IGNvbW1pdCB0aGUgaW5zZXJ0IGFuZCB2ZXJpZnkg dGhhdCBpdCBpcyByZXBsaWNhdGVkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IE5vdyBjb21taXQgdGhlIGluc2VydC4KKyMgVmVyaWZ5IHRoYXQgaXQgaXMgcmVwbGljYXRlZC4K KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ25ld2dpZCc7Iik7CiAKICMgV2FpdCBm b3IgdGhlIHN1YnNjcmliZXIgdG8gY2F0Y2h1cApAQCAtNDIyLDcgKzQyOCwxMCBAQCAkcmVzdWx0 ID0KICAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgRlJPTSB0YWJfY29weTsiKTsKIGlzKCRyZXN1bHQsIHFxKDMpLCAncmVwbGljYXRlZCBk YXRhIGluIHN1YnNjcmliZXIgdGFibGUnKTsKIAotIyBBbHRlciBzdWJzY3JpcHRpb24gdHdvX3Bo YXNlIHRvIHRydWUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWx0ZXIgdGhl IHN1YnNjcmlwdGlvbiB0byB0d29fcGhhc2UgPSB0cnVlLgorIyBWZXJpZnkgdGhhdCB0aGUgYWx0 ZXJlZCBzdWJzY3JpcHRpb24gcmVmbGVjdHMgdGhlIHR3b19waGFzZSBvcHRpb24uCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKICAgICAiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfY29weSBESVNBQkxFOyIp OwogJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAo= --000000000000b3635f061d5a7249--