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 1w9wrY-001uty-35 for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 03:12:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9wrX-00Dlh4-16 for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 03:12:23 +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 1w9wrW-00Dlgw-2B for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 03:12:23 +0000 Received: from mail-yx1-xb12f.google.com ([2607:f8b0:4864:20::b12f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9wrQ-00000000xbY-2dMD for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 03:12:22 +0000 Received: by mail-yx1-xb12f.google.com with SMTP id 956f58d0204a3-65032e9cf01so4270120d50.3 for ; Mon, 06 Apr 2026 20:12:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775531536; cv=none; d=google.com; s=arc-20240605; b=cShpBYxf1OWf/VKDJoX5bs2IpXk7UBnO2NDsR8WRD8oOLZtxxS+ffP8Rozq24qcmMC y7Blg3TWvdZCrV0TPjtmRkupNYpxYxO1yANcxlN8k4D4kVG6K1fTwsW6ZHDccbmm2NoB kS6wrrJEFvFjFt9mWm9k3uzn6YLDUdHjwIralHdDP568ezeQPx7ri5ZY1UeNj7jXXK1y 5mihIBIsANZRtJsVS116ENOrZhEXTzR8VbDFGsvxG3iLtrJEQwRc3xJVS2c5h5phgD64 BhONkVKnE0eOnxZIXCtQrI0N7yBvXCzNkIU+EoYluxbLWDNr3utRdGXA6p5uiswrQpDq ficA== 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=Q3T4ZLT00rQliuWQ+CE580jU4BuAIrBLMJw0nC4CY5c=; fh=JVdTMnON96NSeHN4ZJyzR2ZnroSpvYZ6iaFfp8klx88=; b=OElrTcQPw9blVUO6WJ1lxwR5vk/jVKwG7GhfXMZ5uVtXWLbggAAv65qEp44se8oirQ IA2qdyIurwqitNSSGF0bjyIr4CoICRdK+TCY7+/0xGdh3dX9hqkwZot5B242h8TT7soZ YGY432ZhhlhNruPUmrTdxOQwDqXKyItKqaLuYemW9aUWco4JF0IlDIIjwYkPzVykil3l P7txlrybb6BNFnSUU37Y8juwNX8ll/MJaR8KuIKWS0wONBixkfvQPv6kSJFvwddKzcs+ +c0czIIbT+Z2t5APy0ahgCmjqaN13CdAUMyUNstx2xiB0nD16mX0o7GlBfXqCQjmAolG 1Q+g==; 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=1775531536; x=1776136336; 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=Q3T4ZLT00rQliuWQ+CE580jU4BuAIrBLMJw0nC4CY5c=; b=KrHXyNmGlhBBIhtYQCuy/JHGEfhAmW2nYtoiREplveLaef0hoRr2AIrVxD3MKfzQL0 2ayYarV3fbdToAa+7QQC3yKLis0osnI5sQWrLSYUvaXA2B9++PRxzVIIaE/O+FPEFHBy mrstDQoUyD9WeBOUaEZdmepWeT69qnYgLUm7MoCx4O1vtXvqUV8qcVakDJeUsZiSJX7p ilTLULxZnjxGCMUooZLsAuf3uIwk11WVHE8m22aijTOcECs9Z82MJKwxdWUJcG5ib9YN u7ZouBqNbVJiJjxHhK9Xp0A6EGQbcFtdNRpqRxqr4ZuekPiL8P4mkc2rQITRFIeD1ApA gpsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775531536; x=1776136336; 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=Q3T4ZLT00rQliuWQ+CE580jU4BuAIrBLMJw0nC4CY5c=; b=AeQNWuK7nakJrE8rEfSQQCpg4jRhAuUo/oF20kj7Ws4WPLq/kNOGPcI4BT5LOI8Il4 MNhZ92uaS4ODLvw8RfKK47f3lpptV64lq+8sqdsWOteWsmnb5Sm+EHIF0m+CgreQ/uJ7 mc2GiyLxgpVJPVwkicltUGWBty8UlqGodzEB0SteLHIksSV+T4jkpgmHBmWuk6Rn5wwT rgD3diAvItCoJGtF4DNw7KFCLVRygEo+mZ6JcyXhs5YdXaYtkXi/IYLKa3q+/gvcWQyn igVe2swl27Qg5FGTI0zADRt8fBoSC8xtj7ka++iGVhkez/fUXEhAqa9vqIhjC54u7Czs igzA== X-Forwarded-Encrypted: i=1; AJvYcCVdwJzGn+lWlx3ygCNPBTfkzNUOQ1rxOMJlEUJ7YOx6UarPGgAdd9VAk3S4jswPadRvlzsC0Rq5rZCDN8D2@lists.postgresql.org X-Gm-Message-State: AOJu0YwN2qS/IllE5ERv/QL9mnPLsjJ8zDwZzZ2851gKzQpC6XdkatAR nlEpdm0SElQQ18/sxFAt2tebSZXP5mx1/hPeIpAN3Sm7ZrCGiEkEuelXYFYIz3w6eK+4M7hB+Yw IWSisTTVDXGINcLGgo/u0RHmqQSdhgZ0= X-Gm-Gg: AeBDietiL9reJxZkOjTQA/Y/UNIY5MC9BKYqrLDuabAKLpxeTaTPHu9u8k1pjahkAWZ Ni9MVLP83jLwqm5HTzIKZvF/Ke1M6TI6KSxm+fgyiU1w+mh67ZCJbhfcL0+kTnvmx8yruo1LxOB C/ajm0zSIcTkdT7QnYVSnCTlO+3w0xipWK9ofANazGYuTcYrkkV1IRiuOW6Qx8aOMilQAH8oEEO 180e+UcLNfPghWxnYJxIN3/Fr6tsnaVEe4OH/cATpsl8phoC7nQ8spCJHDUcBspY8qIZDC2XDJe 2Fl6AgNpzcyD9wDKbPZq67mZQLbKSzVOj/2LZO4= X-Received: by 2002:a05:690e:1205:b0:650:3777:218f with SMTP id 956f58d0204a3-65048693ee1mr13559544d50.13.1775531535917; Mon, 06 Apr 2026 20:12:15 -0700 (PDT) MIME-Version: 1.0 References: <875xx197bp.fsf@163.com> <87ttk0lgcx.fsf@163.com> <8734m5fua1.fsf@163.com> <87a5dx4cfb.fsf@163.com> <7487A577-7BDC-4B94-9FFA-741E95439BFC@gmail.com> <40442A5A-C7BF-4742-9F88-1068686EC174@gmail.com> <2C8D5325-71FB-4A3E-906D-C56C0487AC17@gmail.com> In-Reply-To: From: Haibo Yan Date: Mon, 6 Apr 2026 20:12:04 -0700 X-Gm-Features: AQROBzDlfTSBThC-KZY26q9D18zERUNtXRqc86CIkgNdskK73CToHRMsJtU-KMU Message-ID: Subject: Re: Extract numeric filed in JSONB more effectively To: Dmitry Dolgov <9erthalion6@gmail.com> Cc: David Rowley , Andy Fan , Peter Eisentraut , Amit Langote , Alvaro Herrera , jian he , Chapman Flack , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000007c998b064ed62616" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007c998b064ed62616 Content-Type: multipart/alternative; boundary="0000000000007c998a064ed62614" --0000000000007c998a064ed62614 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 6, 2026 at 12:55=E2=80=AFPM Haibo Yan w= rote: > On Mon, Apr 6, 2026 at 11:35=E2=80=AFAM Haibo Yan = wrote: > >> >> >> On Mon, Apr 6, 2026 at 10:57=E2=80=AFAM Haibo Yan wrote: >> >>> >>> >>> On Apr 6, 2026, at 10:51=E2=80=AFAM, Haibo Yan = wrote: >>> >>> >>> On Apr 6, 2026, at 6:05=E2=80=AFAM, Dmitry Dolgov <9erthalion6@gmail.co= m> wrote: >>> >>> On Fri, Apr 03, 2026 at 09:42:20AM -0700, Haibo Yan wrote: >>> >>> >>> Thanks for picking it up, the patch looks good. >>> >>> One small thing: the UI looks a bit odd on my side. It does not seem to >>> have picked my attachment, and is instead showing your older attachment >>> there. But cfbot appears to have picked up mine, so I think it may just= be >>> a UI issue. >>> >>> >>> It takes some time, as far as I can see currently the correct patch is >>> shown. >>> >>> + /* >>> + * Identify the inner extraction expression. It may appear as >>> + * either a FuncExpr or an OpExpr; accept both forms. >>> + */ >>> + if (IsA(arg, FuncExpr)) >>> + { >>> + FuncExpr *inner =3D (FuncExpr *) arg; >>> + >>> + inner_funcid =3D inner->funcid; >>> + inner_args =3D inner->args; >>> + location =3D inner->location; >>> + } >>> + else if (IsA(arg, OpExpr)) >>> + { >>> + OpExpr *inner =3D (OpExpr *) arg; >>> + >>> + inner_funcid =3D inner->opfuncid; >>> + inner_args =3D inner->args; >>> + location =3D inner->location; >>> + } >>> + else >>> + PG_RETURN_POINTER(NULL); >>> >>> >>> It may also appear as a SubscriptingRef expression if we use >>> subscription over >>> jsonb. >>> >>> SELECT test_json['field7']::bool FROM test_jsonb WHERE json_type =3D >>> 'object'; >>> >>> Seems to be worth handling this case as well, since it doesn't lead to = an >>> interface explosion. >>> >>> >>> >>> Thank you Dmitry >>> >>> I agree that handling SubscriptingRef here is the right thing to do. >>> >>> It stays within the same stage-1 scope, covers an equivalent >>> object-field extraction form, and does not introduce any additional >>> interface surface. Based on your suggestion, I updated the patch to >>> recognize the SubscriptingRefrepresentation as well, so cases like: >>> >>> ---------------------------------------- >>> >>> test_json['field7']::bool >>> >>> test_json['field4']::numeric >>> >>> ---------------------------------------- >>> >>> can follow the same rewrite path as the existing jsonb_object_field(...= ) >>> / -> cases. >>> >>> Please see the updated patch: >>> >>> >>> >>> Thanks again for the review and suggestion. >>> >>> Regards, >>> >>> Haibo >>> >>> It looks like the attachment may have been dropped in transit. I=E2=80= =99m >>> reattaching it here. >>> >>> Regards, >>> >>> Haibo >>> >>> >>> This is quite embarrassing =E2=80=94 it looks like my attachment got lo= st >> somewhere in transit. I=E2=80=99m not sure what happened. I did confirm = locally >> that the attachment was included, but I can=E2=80=99t see it in the mail= thread. >> I=E2=80=99m now trying to resend it using a different mail client. Hopef= ully this >> won=E2=80=99t cause too much disruption for everyone. >> >> Haibo >> > > Sorry =E2=80=94 the previous version failed to build because of a duplica= te objid. > I=E2=80=99ve reuploaded a fixed version here. > > Regards, > Haibo > Since this is my first patch submission, I forgot to include the original author. Thanks to Andy Fan for the suggestion =E2=80=94 I=E2=80=99ve now added him = as a co-author. Regards Haibo --0000000000007c998a064ed62614 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Mon, Apr 6, 2026 at 12:55=E2=80=AFPM H= aibo Yan <tristan.yim@gmail.com= > wrote:
On Mon, Apr 6, 2026 at 11:35=E2=80=AFAM Haibo Yan <tristan.yim@gmail.com> wro= te:


On Mon, Apr 6, 2026 at 10:= 57=E2=80=AFAM Haibo Yan <tristan.yim@gmail.com> wrote:

<= br>
On Apr 6, 2026, at 10:51=E2=80=AFAM, Haib= o Yan <Trista= n.Yim@gmail.com> wrote:


On Apr 6, 2026, at 6:05=E2=80=AFAM, Dmitry Dolgov <9erthalion6@gmail.com<= /a>> wrote:

On Fri, Apr 03,= 2026 at 09:42:20AM -0700, Haibo Yan wrote:

Thanks for = picking it up, the patch looks good.

One s= mall thing: the UI looks a bit odd on my side. It does not seem to have pic= ked my attachment, and is instead showing your older attachment there. But = cfbot appears to have picked up mine, so I think it may just be a UI issue.=

It takes some time, as far as I can see currently the = correct patch is shown.

+ /*=
+ * Identify the inner extraction expression.=C2=A0 It m= ay appear as
+ * either a FuncExpr or an OpExpr; accept= both forms.
+ */
+ if (IsA(arg, FuncE= xpr))
+ {
+ FuncExpr =C2=A0=C2=A0*inner =3D (FuncExpr *) arg;
+
+= inner_funcid = =3D inner->funcid;
+
inner_args =3D inner->args;
+ location =3D inner->location;
+ = }
+ else if (IsA(arg, OpExpr))
+ = {
+ OpExpr =C2=A0=C2=A0*inner =3D (OpExpr *= ) arg;
+
+ inner_funcid =3D inner->opfuncid;
+ inner_args =3D inner->args;
+ location =3D inner->loc= ation;
+ }
+ else
+
PG_RETURN_POINTER(NULL);

It may also appear as a SubscriptingRef expression if we use sub= scription over
jsonb.

SELECT test_json['field7']::bool FROM test_jsonb WHERE json_type = =3D 'object';

Seems to be worth handling this case as well, = since it doesn't lead to an
interface explosion.


Thank you Dmitry

I agree th= at handling=C2=A0SubscriptingRef=C2=A0here is the right thing = to do.

It stays within the same stage-1 scope, covers an equivalent o= bject-field extraction form, and does not introduce any additional interfac= e surface. Based on your suggestion, I updated the patch to recognize the= =C2=A0SubscriptingRefrepresentation as well, so cases like:

----------------------------------------

test_json['fie= ld7']::bool

test_json['field4']::nume= ric

----------------------------------------

can follow the sam= e rewrite path as the existing=C2=A0jsonb_object_field(...)=C2= =A0/=C2=A0->=C2=A0cases.

Please see the updated patch= :


<v2-0001-jsonb-optimize-object-field-casts-to-numeric-and-.patch>

Thanks again for the review and suggestion.=

Regards,

Haibo

It l= ooks like the attachment may have been dropped in transit. I=E2=80=99m reat= taching it here.

Regards,

Haibo



Haibo


Sorry =E2=80=94 the previous version failed to build because of a duplic= ate objid. I=E2=80=99ve reuploaded a fixed version here.

Regards,

Haibo=C2=A0

Since this is my first patch submission, I forgot to = include the original author.

Thanks to Andy Fan for the suggestion = =E2=80=94 I=E2=80=99ve now added him as a co-author.
Regards
Haibo=C2=A0
--0000000000007c998a064ed62614-- --0000000000007c998b064ed62616 Content-Type: application/octet-stream; name="v3-0001-jsonb-optimize-object-field-casts-to-numeric-and-.patch" Content-Disposition: attachment; filename="v3-0001-jsonb-optimize-object-field-casts-to-numeric-and-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mno1ma990 RnJvbSBmMDJiOTZlOTIzNzY3YzM0MmNhMDM2NjhhNzM4NDAyMjNmYjg1M2Y2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFRodSwgMiBBcHIgMjAyNiAyMToyMjo1NCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjNdIGpzb25i OiBvcHRpbWl6ZSBvYmplY3QtZmllbGQgY2FzdHMgdG8gbnVtZXJpYyBhbmQgYm9vbAoKQWRkIGEg c3VwcG9ydCBmdW5jdGlvbiBmb3IganNvbmItdG8tbnVtZXJpYy9ib29sIGNhc3RzIHRoYXQKcmVj b2duaXplcyBjYXN0cyBvdmVyIGpzb25iIG9iamVjdC1maWVsZCBleHRyYWN0aW9uLCBpbmNsdWRp bmcKanNvbmJfb2JqZWN0X2ZpZWxkKCksIC0+LCBhbmQgc3Vic2NyaXB0aW5nIGJ5IGtleSwgYW5k IHJld3JpdGVzCnRoZW0gdG8gZXhwbGljaXQgdHlwZWQgZXh0cmFjdG9yIGNhbGxzLgoKVGhpcyBr ZWVwcyBvcmRpbmFyeSBTUUwgc3ludGF4IHVuY2hhbmdlZCB3aGlsZSBhdm9pZGluZyBleHRyYQpq c29uYiBzY2FsYXIgd3JhcHBpbmcvdW53cmFwcGluZyBvbiB0aGUgb3B0aW1pemVkIHBhdGguCgpT dGFnZSAxIG9ubHk6IGNvdmVycyBvYmplY3QtZmllbGQgZXh0cmFjdGlvbiB0byBudW1lcmljL2Jv b2wuCgpDby1hdXRob3JlZC1ieTogQW5keSBGYW4gPHpoaWh1aWZhbjEyMTNAMTYzLmNvbT4KLS0t CiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyAgICAgICB8IDEyNiArKysrKysrKysrKysr KysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jICAgfCAxMzYgKysrKysrKysr KysrKysrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICB8ICAxOCArKy0K IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0IHwgMjA1ICsrKysrKysrKysrKysr KysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbCAgICAgIHwgIDYz ICsrKysrKysrLQogNSBmaWxlcyBjaGFuZ2VkLCA1NDMgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCmluZGV4IDg2NGM1YWMxYzg1Li4xZWUxNTY3OTczMyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25iLmMKQEAgLTE3LDYgKzE3LDkgQEAKICNpbmNsdWRlICJmdW5jYXBp LmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK KyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3Mu aCIKKyNpbmNsdWRlICJub2Rlcy9zdXBwb3J0bm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvanNv bi5oIgpAQCAtMTgxNiw2ICsxODE5LDEyOSBAQCBjYW5ub3RDYXN0SnNvbmJWYWx1ZShlbnVtIGpi dlR5cGUgdHlwZSwgY29uc3QgY2hhciAqc3FsdHlwZSwgTm9kZSAqZXNjb250ZXh0KQogCXJldHVy biAoRGF0dW0pIDA7CiB9CiAKKy8qCisgKiBqc29uYl9jYXN0X3N1cHBvcnQoKQorICoKKyAqIFBs YW5uZXIgc3VwcG9ydCBmdW5jdGlvbiBmb3IganNvbmItdG8tc2NhbGFyIGNhc3QgZnVuY3Rpb25z LCBhdHRhY2hlZCB2aWEKKyAqIHByb3N1cHBvcnQgb24gdGhlIGpzb25iX251bWVyaWMgYW5kIGpz b25iX2Jvb2wgY2F0YWxvZyBlbnRyaWVzLgorICoKKyAqIFdoZW4gdGhlIHNvbGUgYXJndW1lbnQg dG8gdGhlIGNhc3QgaXMgYSBqc29uYl9vYmplY3RfZmllbGQoKSBjYWxsICh0aGUgLT4KKyAqIG9w ZXJhdG9yKSwgd2UgcmVwbGFjZSB0aGUgdHdvLXN0ZXAgY2FzdChleHRyYWN0KC4uLikpIGV4cHJl c3Npb24gd2l0aCBhCisgKiBzaW5nbGUgdHlwZWQgZXh0cmFjdG9yIHRoYXQgcmVhZHMgdGhlIHNj YWxhciBkaXJlY3RseSBmcm9tIHRoZSBpbi1tZW1vcnkKKyAqIEpzb25iVmFsdWUsIGF2b2lkaW5n IGEgcm91bmQtdHJpcCB0aHJvdWdoIEpzb25iVmFsdWVUb0pzb25iLgorICoKKyAqIEZvciBleGFt cGxlLCAoaiAtPiAnYScpOjpudW1lcmljIGlzIHBhcnNlZCBhczoKKyAqICAganNvbmJfbnVtZXJp Yyhqc29uYl9vYmplY3RfZmllbGQoaiwgJ2EnKSkKKyAqIGFuZCBpcyByZXdyaXR0ZW4gdG86Cisg KiAgIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKGosICdhJykKKyAqLworRGF0dW0KK2pzb25i X2Nhc3Rfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCU5vZGUJICAgKnJhd3JlcSA9IChO b2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCU5vZGUJICAgKnJldCA9IE5VTEw7CisKKwlp ZiAoSXNBKHJhd3JlcSwgU3VwcG9ydFJlcXVlc3RTaW1wbGlmeSkpCisJeworCQlTdXBwb3J0UmVx dWVzdFNpbXBsaWZ5ICpyZXEgPSAoU3VwcG9ydFJlcXVlc3RTaW1wbGlmeSAqKSByYXdyZXE7CisJ CUZ1bmNFeHByICAgKmZleHByID0gcmVxLT5mY2FsbDsKKwkJTm9kZQkgICAqYXJnOworCQlPaWQJ CQlpbm5lcl9mdW5jaWQ7CisJCUxpc3QJICAgKmlubmVyX2FyZ3M7CisJCWludAkJCWxvY2F0aW9u OworCQlPaWQJCQlyZXBsYWNlbWVudF9mdW5jaWQ7CisJCU9pZAkJCXJlcGxhY2VtZW50X3JldHR5 cGU7CisJCUZ1bmNFeHByICAgKm5ld2ZleHByOworCisJCS8qIFRoZSBjYXN0IGZ1bmN0aW9uIG11 c3QgaGF2ZSBleGFjdGx5IG9uZSBhcmd1bWVudCAqLworCQlpZiAobGlzdF9sZW5ndGgoZmV4cHIt PmFyZ3MpICE9IDEpCisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKworCQlhcmcgPSAoTm9k ZSAqKSBsaW5pdGlhbChmZXhwci0+YXJncyk7CisKKwkJLyoKKwkJICogSWRlbnRpZnkgdGhlIGlu bmVyIGV4dHJhY3Rpb24gZXhwcmVzc2lvbi4gIEl0IG1heSBhcHBlYXIgYXMgYQorCQkgKiBGdW5j RXhwciwgYW4gT3BFeHByLCBvciBhIFN1YnNjcmlwdGluZ1JlZiwgZGVwZW5kaW5nIG9uIGhvdyB0 aGUKKwkJICogZXhwcmVzc2lvbiBpcyByZXByZXNlbnRlZCBhdCB0aGlzIHBvaW50LiAgQWNjZXB0 IHRoZSBzdXBwb3J0ZWQKKwkJICogZm9ybXMuCisJCSAqLworCQlpZiAoSXNBKGFyZywgRnVuY0V4 cHIpKQorCQl7CisJCQlGdW5jRXhwciAgICppbm5lciA9IChGdW5jRXhwciAqKSBhcmc7CisKKwkJ CWlubmVyX2Z1bmNpZCA9IGlubmVyLT5mdW5jaWQ7CisJCQlpbm5lcl9hcmdzID0gaW5uZXItPmFy Z3M7CisJCQlsb2NhdGlvbiA9IGlubmVyLT5sb2NhdGlvbjsKKwkJfQorCQllbHNlIGlmIChJc0Eo YXJnLCBPcEV4cHIpKQorCQl7CisJCQlPcEV4cHIJICAgKmlubmVyID0gKE9wRXhwciAqKSBhcmc7 CisKKwkJCWlubmVyX2Z1bmNpZCA9IGlubmVyLT5vcGZ1bmNpZDsKKwkJCWlubmVyX2FyZ3MgPSBp bm5lci0+YXJnczsKKwkJCWxvY2F0aW9uID0gaW5uZXItPmxvY2F0aW9uOworCQl9CisJCWVsc2Ug aWYgKElzQShhcmcsIFN1YnNjcmlwdGluZ1JlZikpCisJCXsKKwkJCVN1YnNjcmlwdGluZ1JlZiAq c2JzcmVmID0gKFN1YnNjcmlwdGluZ1JlZiAqKSBhcmc7CisJCQlOb2RlCSAgICpzdWJzY3JpcHQ7 CisKKwkJCS8qCisJCQkgKiBPbmx5IGhhbmRsZSB0aGUgbmFycm93IGNhc2UgZXF1aXZhbGVudCB0 byBvYmplY3QtZmllbGQKKwkJCSAqIGV4dHJhY3Rpb246IGEgc2luZ2xlIHRleHQtdHlwZWQgc3Vi c2NyaXB0IG9uIGEganNvbmIKKwkJCSAqIGNvbnRhaW5lciwgd2l0aCBubyBzbGljZSBhbmQgbm8g YXNzaWdubWVudC4KKwkJCSAqLworCQkJaWYgKHNic3JlZi0+cmVmY29udGFpbmVydHlwZSAhPSBK U09OQk9JRCkKKwkJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKwkJCWlmIChsaXN0X2xlbmd0 aChzYnNyZWYtPnJlZnVwcGVyaW5kZXhwcikgIT0gMSkKKwkJCQlQR19SRVRVUk5fUE9JTlRFUihO VUxMKTsKKwkJCWlmIChzYnNyZWYtPnJlZmxvd2VyaW5kZXhwciAhPSBOSUwpCisJCQkJUEdfUkVU VVJOX1BPSU5URVIoTlVMTCk7CisJCQlpZiAoc2JzcmVmLT5yZWZhc3NnbmV4cHIgIT0gTlVMTCkK KwkJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKworCQkJc3Vic2NyaXB0ID0gKE5vZGUgKikg bGluaXRpYWwoc2JzcmVmLT5yZWZ1cHBlcmluZGV4cHIpOworCQkJaWYgKGV4cHJUeXBlKHN1YnNj cmlwdCkgIT0gVEVYVE9JRCkKKwkJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKworCQkJaW5u ZXJfZnVuY2lkID0gRl9KU09OQl9PQkpFQ1RfRklFTEQ7CisJCQlpbm5lcl9hcmdzID0gbGlzdF9t YWtlMihzYnNyZWYtPnJlZmV4cHIsIHN1YnNjcmlwdCk7CisJCQlsb2NhdGlvbiA9IGV4cHJMb2Nh dGlvbihhcmcpOworCQl9CisJCWVsc2UKKwkJCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworCisJ CS8qIE9ubHkgcmV3cml0ZSBqc29uYl9vYmplY3RfZmllbGQoanNvbmIsIHRleHQpOyB2ZXJpZnkg YXJpdHkgdG9vICovCisJCWlmIChpbm5lcl9mdW5jaWQgIT0gRl9KU09OQl9PQkpFQ1RfRklFTEQp CisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKwkJaWYgKGxpc3RfbGVuZ3RoKGlubmVyX2Fy Z3MpICE9IDIpCisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKworCQkvKiBNYXAgdGhlIG91 dGVyIGNhc3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdHlwZWQgZXh0cmFjdG9yICovCisJCWlmIChm ZXhwci0+ZnVuY2lkID09IEZfTlVNRVJJQ19KU09OQikKKwkJeworCQkJcmVwbGFjZW1lbnRfZnVu Y2lkID0gRl9KU09OQl9PQkpFQ1RfRklFTERfTlVNRVJJQzsKKwkJCXJlcGxhY2VtZW50X3JldHR5 cGUgPSBOVU1FUklDT0lEOworCQl9CisJCWVsc2UgaWYgKGZleHByLT5mdW5jaWQgPT0gRl9CT09M X0pTT05CKQorCQl7CisJCQlyZXBsYWNlbWVudF9mdW5jaWQgPSBGX0pTT05CX09CSkVDVF9GSUVM RF9CT09MOworCQkJcmVwbGFjZW1lbnRfcmV0dHlwZSA9IEJPT0xPSUQ7CisJCX0KKwkJZWxzZQor CQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisKKwkJLyogQnVpbGQgdGhlIHJlcGxhY2VtZW50 IGZ1bmN0aW9uIGNhbGwgKi8KKwkJbmV3ZmV4cHIgPSBtYWtlRnVuY0V4cHIocmVwbGFjZW1lbnRf ZnVuY2lkLCByZXBsYWNlbWVudF9yZXR0eXBlLAorCQkJCQkJCQlpbm5lcl9hcmdzLCBJbnZhbGlk T2lkLCBJbnZhbGlkT2lkLAorCQkJCQkJCQlDT0VSQ0VfRVhQTElDSVRfQ0FMTCk7CisJCW5ld2Zl eHByLT5sb2NhdGlvbiA9IGxvY2F0aW9uOworCQlyZXQgPSAoTm9kZSAqKSBuZXdmZXhwcjsKKwl9 CisKKwlQR19SRVRVUk5fUE9JTlRFUihyZXQpOworfQorCiBEYXR1bQoganNvbmJfYm9vbChQR19G VU5DVElPTl9BUkdTKQogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25m dW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCmluZGV4IDk3Y2MzZDYw MzQwLi5mZTExZjVlZGQ1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25m dW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYwpAQCAtOTIxLDYg KzkyMSwxNDIgQEAganNvbmJfb2JqZWN0X2ZpZWxkX3RleHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQ R19SRVRVUk5fTlVMTCgpOwogfQogCisvKgorICogVHlwZWQgc2NhbGFyIGV4dHJhY3Rpb24gZnJv bSBqc29uYiBvYmplY3QgZmllbGRzLgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBleHRyYWN0IGEg dHlwZWQgc2NhbGFyIGRpcmVjdGx5IGZyb20gdGhlIGluLW1lbW9yeQorICogSnNvbmJWYWx1ZSBm b3VuZCBieSBrZXkgbG9va3VwLCBza2lwcGluZyB0aGUgaW50ZXJtZWRpYXRlIEpzb25iCisgKiBz ZXJpYWxpemF0aW9uIHRoYXQgb2NjdXJzIHdpdGggdGhlIHVub3B0aW1pemVkIGNhc3Qtb3Zlci1l eHRyYWN0aW9uIHBhdGguCisgKgorICogVGhleSBsaXZlIGhlcmUgYWxvbmdzaWRlIGpzb25iX29i amVjdF9maWVsZCgpIGJlY2F1c2UgdGhleSBzaGFyZSB0aGUKKyAqIHNhbWUga2V5LWxvb2t1cCBs b2dpYyAoZ2V0S2V5SnNvblZhbHVlRnJvbUNvbnRhaW5lcikuCisgKgorICogUmVnaXN0ZXJlZCBp biBwZ19wcm9jIGFzIG9yZGluYXJ5IFNRTC1jYWxsYWJsZSBidWlsdGluczsgYWxzbyBzZXJ2ZSBh cworICogcGxhbm5lciByZXdyaXRlIHRhcmdldHMgZm9yIGpzb25iX2Nhc3Rfc3VwcG9ydCgpIGlu IGpzb25iLmMuCisgKgorICogTlVMTCBzZW1hbnRpY3MgbWF0Y2ggdGhlIGV4aXN0aW5nIGNhc3Qg cGF0aDogYSBtaXNzaW5nIGtleSBvciBhIEpTT04KKyAqIG51bGwgdmFsdWUgYm90aCBwcm9kdWNl IFNRTCBOVUxMOyBhIHR5cGUgbWlzbWF0Y2ggcmFpc2VzIEVSUk9SLgorICovCisKKy8qCisgKiBM b29rIHVwIGEga2V5IGluIGEganNvbmIgb2JqZWN0IGFuZCByZXR1cm4gdGhlIEpzb25iVmFsdWUs IG9yIE5VTEwuCisgKiBSZXR1cm5zIE5VTEwgKHdpdGhvdXQgZXJyb3IpIHdoZW4gdGhlIGlucHV0 IGlzIG5vdCBhbiBvYmplY3QsIHRoZSBrZXkKKyAqIGlzIGFic2VudCwgb3IgdGhlIHZhbHVlIGlz IEpTT04gbnVsbC4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgoranNvbmJfb2JqZWN0X2ZpZWxk X2xvb2t1cChKc29uYiAqamIsIHRleHQgKmtleSwgSnNvbmJWYWx1ZSAqdmJ1ZikKK3sKKwlKc29u YlZhbHVlICp2OworCisJaWYgKCFKQl9ST09UX0lTX09CSkVDVChqYikpCisJCXJldHVybiBOVUxM OworCisJdiA9IGdldEtleUpzb25WYWx1ZUZyb21Db250YWluZXIoJmpiLT5yb290LAorCQkJCQkJ CQkJIFZBUkRBVEFfQU5ZKGtleSksCisJCQkJCQkJCQkgVkFSU0laRV9BTllfRVhIRFIoa2V5KSwK KwkJCQkJCQkJCSB2YnVmKTsKKworCS8qIE1pc3Npbmcga2V5IG9yIEpTT04gbnVsbCBib3RoIG1h cCB0byBTUUwgTlVMTCAqLworCWlmICh2ID09IE5VTEwgfHwgdi0+dHlwZSA9PSBqYnZOdWxsKQor CQlyZXR1cm4gTlVMTDsKKworCXJldHVybiB2OworfQorCisvKgorICogUmFpc2UgYSB0eXBlLW1p c21hdGNoIGVycm9yIGZvciB0eXBlZCBmaWVsZCBleHRyYWN0aW9uLgorICoKKyAqIFRoZSBtZXNz YWdlIHdvcmRpbmcgbWF0Y2hlcyBjYW5ub3RDYXN0SnNvbmJWYWx1ZSgpIGluIGpzb25iLmMgc28g dGhhdAorICogdGhlIG9wdGltaXplZCBhbmQgdW5vcHRpbWl6ZWQgcGF0aHMgcHJvZHVjZSBpZGVu dGljYWwgZXJyb3JzLgorICovCitzdGF0aWMgdm9pZAoranNvbmJfZmllbGRfY2FzdF9lcnJvcihK c29uYlZhbHVlICp2LCBjb25zdCBjaGFyICpzcWx0eXBlKQoreworCWNvbnN0IGNoYXIgKmpzb250 eXBlOworCisJc3dpdGNoICh2LT50eXBlKQorCXsKKwkJY2FzZSBqYnZOdWxsOgorCQkJanNvbnR5 cGUgPSAibnVsbCI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZTdHJpbmc6CisJCQlqc29udHlwZSA9 ICJzdHJpbmciOworCQkJYnJlYWs7CisJCWNhc2UgamJ2TnVtZXJpYzoKKwkJCWpzb250eXBlID0g Im51bWVyaWMiOworCQkJYnJlYWs7CisJCWNhc2UgamJ2Qm9vbDoKKwkJCWpzb250eXBlID0gImJv b2xlYW4iOworCQkJYnJlYWs7CisJCWNhc2UgamJ2QXJyYXk6CisJCQlqc29udHlwZSA9ICJhcnJh eSI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZPYmplY3Q6CisJCQlqc29udHlwZSA9ICJvYmplY3Qi OworCQkJYnJlYWs7CisJCWNhc2UgamJ2QmluYXJ5OgorCQkJanNvbnR5cGUgPSAiYXJyYXkgb3Ig b2JqZWN0IjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVua25vd24g anNvbmIgdHlwZTogJWQiLCAoaW50KSB2LT50eXBlKTsKKwkJCWpzb250eXBlID0gTlVMTDsJLyog a2VlcCBjb21waWxlciBxdWlldCAqLworCX0KKworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCSBlcnJtc2coImNhbm5vdCBj YXN0IGpzb25iICVzIHRvIHR5cGUgJXMiLAorCQkJCQlqc29udHlwZSwgc3FsdHlwZSkpKTsKK30K KworLyoKKyAqIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljIC0gZXh0cmFjdCBhIG51bWVyaWMg dmFsdWUgZnJvbSBhIGpzb25iIG9iamVjdAorICogYnkgZmllbGQgbmFtZS4gIFJldHVybnMgTlVM TCBmb3IgbWlzc2luZyBrZXlzIGFuZCBKU09OIG51bGxzLgorICovCitEYXR1bQoranNvbmJfb2Jq ZWN0X2ZpZWxkX251bWVyaWMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlKc29uYgkgICAqamIgPSBQ R19HRVRBUkdfSlNPTkJfUCgwKTsKKwl0ZXh0CSAgICprZXkgPSBQR19HRVRBUkdfVEVYVF9QUCgx KTsKKwlKc29uYlZhbHVlCXZidWY7CisJSnNvbmJWYWx1ZSAqdjsKKwlOdW1lcmljCQlyZXRWYWx1 ZTsKKworCXYgPSBqc29uYl9vYmplY3RfZmllbGRfbG9va3VwKGpiLCBrZXksICZ2YnVmKTsKKwlp ZiAodiA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJaWYgKHYtPnR5cGUgIT0gamJ2 TnVtZXJpYykKKwkJanNvbmJfZmllbGRfY2FzdF9lcnJvcih2LCAibnVtZXJpYyIpOworCisJcmV0 VmFsdWUgPSBEYXR1bUdldE51bWVyaWNDb3B5KE51bWVyaWNHZXREYXR1bSh2LT52YWwubnVtZXJp YykpOworCisJUEdfRlJFRV9JRl9DT1BZKGpiLCAwKTsKKwlQR19SRVRVUk5fTlVNRVJJQyhyZXRW YWx1ZSk7Cit9CisKKy8qCisgKiBqc29uYl9vYmplY3RfZmllbGRfYm9vbCAtIGV4dHJhY3QgYSBi b29sZWFuIHZhbHVlIGZyb20gYSBqc29uYiBvYmplY3QKKyAqIGJ5IGZpZWxkIG5hbWUuICBSZXR1 cm5zIE5VTEwgZm9yIG1pc3Npbmcga2V5cyBhbmQgSlNPTiBudWxscy4KKyAqLworRGF0dW0KK2pz b25iX29iamVjdF9maWVsZF9ib29sKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSnNvbmIJICAgKmpi ID0gUEdfR0VUQVJHX0pTT05CX1AoMCk7CisJdGV4dAkgICAqa2V5ID0gUEdfR0VUQVJHX1RFWFRf UFAoMSk7CisJSnNvbmJWYWx1ZQl2YnVmOworCUpzb25iVmFsdWUgKnY7CisKKwl2ID0ganNvbmJf b2JqZWN0X2ZpZWxkX2xvb2t1cChqYiwga2V5LCAmdmJ1Zik7CisJaWYgKHYgPT0gTlVMTCkKKwkJ UEdfUkVUVVJOX05VTEwoKTsKKworCWlmICh2LT50eXBlICE9IGpidkJvb2wpCisJCWpzb25iX2Zp ZWxkX2Nhc3RfZXJyb3IodiwgImJvb2xlYW4iKTsKKworCVBHX0ZSRUVfSUZfQ09QWShqYiwgMCk7 CisJUEdfUkVUVVJOX0JPT0wodi0+dmFsLmJvb2xlYW4pOworfQorCiBEYXR1bQoganNvbl9hcnJh eV9lbGVtZW50KFBHX0ZVTkNUSU9OX0FSR1MpCiB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRl eCAzZWExN2ZjNTYyOS4uYTYwOGY3YTIzNTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAt NDc5OCwxMCArNDc5OCwxMCBAQAogICBwcm9zcmMgPT4gJ251bWVyaWNfcGdfbHNuJyB9LAogCiB7 IG9pZCA9PiAnMzU1NicsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGJvb2xlYW4nLAotICBw cm9uYW1lID0+ICdib29sJywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdq c29uYicsCisgIHByb25hbWUgPT4gJ2Jvb2wnLCBwcm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1 cHBvcnQnLCBwcm9yZXR0eXBlID0+ICdib29sJywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAg cHJvc3JjID0+ICdqc29uYl9ib29sJyB9LAogeyBvaWQgPT4gJzM0NDknLCBkZXNjciA9PiAnY29u dmVydCBqc29uYiB0byBudW1lcmljJywKLSAgcHJvbmFtZSA9PiAnbnVtZXJpYycsIHByb3JldHR5 cGUgPT4gJ251bWVyaWMnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAorICBwcm9uYW1lID0+ICdu dW1lcmljJywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywgcHJvcmV0dHlwZSA9 PiAnbnVtZXJpYycsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCiAgIHByb3NyYyA9PiAnanNvbmJf bnVtZXJpYycgfSwKIHsgb2lkID0+ICczNDUwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8g aW50MicsCiAgIHByb25hbWUgPT4gJ2ludDInLCBwcm9yZXR0eXBlID0+ICdpbnQyJywgcHJvYXJn dHlwZXMgPT4gJ2pzb25iJywKQEAgLTEyOTEyLDQgKzEyOTEyLDE4IEBACiAgIHByb25hbWUgPT4g J2hhc2hvaWQ4ZXh0ZW5kZWQnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywKICAgcHJvYXJndHlwZXMg PT4gJ29pZDggaW50OCcsIHByb3NyYyA9PiAnaGFzaG9pZDhleHRlbmRlZCcgfSwKIAorCisjIGpz b25iIGNhc3Qgb3B0aW1pemF0aW9uIHN1cHBvcnQgZnVuY3Rpb25zCit7IG9pZCA9PiAnOTk1MCcs IGRlc2NyID0+ICdwbGFubmVyIHN1cHBvcnQgZm9yIGpzb25iIGNhc3RzJywKKyAgcHJvbmFtZSA9 PiAnanNvbmJfY2FzdF9zdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9h cmd0eXBlcyA9PiAnaW50ZXJuYWwnLCBwcm9zcmMgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcgfSwK K3sgb2lkID0+ICc5OTUzJywgZGVzY3IgPT4gJ2V4dHJhY3QgbnVtZXJpYyBmcm9tIGpzb25iIG9i amVjdCBieSBmaWVsZCBuYW1lJywKKyAgcHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX251 bWVyaWMnLCBwcm9yZXR0eXBlID0+ICdudW1lcmljJywKKyAgcHJvYXJndHlwZXMgPT4gJ2pzb25i IHRleHQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbixmaWVsZF9uYW1lfScsCisgIHByb3Ny YyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMnIH0sCit7IG9pZCA9PiAnOTk1NCcsIGRl c2NyID0+ICdleHRyYWN0IGJvb2xlYW4gZnJvbSBqc29uYiBvYmplY3QgYnkgZmllbGQgbmFtZScs CisgIHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9maWVsZF9ib29sJywgcHJvcmV0dHlwZSA9PiAn Ym9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICdqc29uYiB0ZXh0JywgcHJvYXJnbmFtZXMgPT4gJ3tm cm9tX2pzb24sZmllbGRfbmFtZX0nLAorICBwcm9zcmMgPT4gJ2pzb25iX29iamVjdF9maWVsZF9i b29sJyB9LAorCiBdCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25i Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0CmluZGV4IDRlMjQ2Nzg1 MmRiLi4xMWY5Y2NjYjY0OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9q c29uYi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQKQEAgLTQ1 OCw3ICs0NTgsMjA3IEBAIENSRUFURSBURU1QIFRBQkxFIHRlc3RfanNvbmIgKAogSU5TRVJUIElO VE8gdGVzdF9qc29uYiBWQUxVRVMKICgnc2NhbGFyJywnImEgc2NhbGFyIicpLAogKCdhcnJheScs J1siemVybyIsICJvbmUiLCJ0d28iLG51bGwsImZvdXIiLCJmaXZlIiwgWzEsMiwzXSx7ImYxIjo5 fV0nKSwKLSgnb2JqZWN0JywneyJmaWVsZDEiOiJ2YWwxIiwiZmllbGQyIjoidmFsMiIsImZpZWxk MyI6bnVsbCwgImZpZWxkNCI6IDQsICJmaWVsZDUiOiBbMSwyLDNdLCAiZmllbGQ2IjogeyJmMSI6 OX19Jyk7CisoJ29iamVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIiLCJmaWVs ZDMiOm51bGwsICJmaWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6IHsiZjEi Ojl9LCAiZmllbGQ3IjogdHJ1ZX0nKTsKKy0tIE9wdGltaXplZCB0eXBlZCBleHRyYWN0aW9uOiB0 aGUgcGxhbm5lciByZXdyaXRlcyAoai0+J2tleScpOjp0eXBlIGludG8gYQorLS0gZGlyZWN0IHR5 cGVkIGV4dHJhY3RvciBjYWxsLCBjdXJyZW50bHkgZm9yIG51bWVyaWMgYW5kIGJvb2wgb25seS4K Ky0tIFNlY3Rpb24gMTogcGxhbm5lciByZXdyaXRlIHZlcmlmaWNhdGlvbiAocmV3cml0dGVuIHRh cmdldHMpCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9qc29uIC0+ ICdmaWVsZDQnKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29i amVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNv bmIKKyAgIE91dHB1dDoganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWModGVzdF9qc29uLCAnZmll bGQ0Jzo6dGV4dCkKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29iamVjdCc6 OnRleHQpCisoMyByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAo dGVzdF9qc29uIC0+ICdmaWVsZDcnKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90 eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3Rf anNvbmIKKyAgIE91dHB1dDoganNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2wodGVzdF9qc29uLCAnZmll bGQ3Jzo6dGV4dCkKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29iamVjdCc6 OnRleHQpCisoMyByb3dzKQorCistLSBTZWN0aW9uIDFiOiBwbGFubmVyIHJld3JpdGUgdmVyaWZp Y2F0aW9uIGZvciBzdWJzY3JpcHRpbmcgc3ludGF4CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpIFNFTEVDVCAodGVzdF9qc29uWydmaWVsZDQnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25iX29iamVjdF9maWVsZF9u dW1lcmljKHRlc3RfanNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25i Lmpzb25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ3J10pOjpib29sIEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBT Y2FuIG9uIHBnX3RlbXAudGVzdF9qc29uYgorICAgT3V0cHV0OiBqc29uYl9vYmplY3RfZmllbGRf Ym9vbCh0ZXN0X2pzb24sICdmaWVsZDcnOjp0ZXh0KQorICAgRmlsdGVyOiAodGVzdF9qc29uYi5q c29uX3R5cGUgPSAnb2JqZWN0Jzo6dGV4dCkKKygzIHJvd3MpCisKKy0tIFZlcmlmeSB0aGF0IHVu c3VwcG9ydGVkIGNhc3QgdGFyZ2V0cyBhcmUgTk9UIHJld3JpdHRlbiBieSB0aGlzIHBhdGNoLgor LS0gSW50ZWdlciBhbmQgZmxvYXQgY2FzdHMgcmVtYWluIG9uIHRoZSBvcmlnaW5hbCBqc29uYl9v YmplY3RfZmllbGQgKyBjYXN0IHBhdGguCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNF TEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUg anNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRw dXQ6ICgodGVzdF9qc29uIC0+ICdmaWVsZDQnOjp0ZXh0KSk6OmludGVnZXIKKyAgIEZpbHRlcjog KHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dzKQorCitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6 aW50OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBn X3RlbXAudGVzdF9qc29uYgorICAgT3V0cHV0OiAoKHRlc3RfanNvbiAtPiAnZmllbGQ0Jzo6dGV4 dCkpOjpiaWdpbnQKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29iamVjdCc6 OnRleHQpCisoMyByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAo dGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29u X3R5cGUgPSAnb2JqZWN0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3Rf anNvbmIKKyAgIE91dHB1dDogKCh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCc6OnRleHQpKTo6ZG91Ymxl IHByZWNpc2lvbgorICAgRmlsdGVyOiAodGVzdF9qc29uYi5qc29uX3R5cGUgPSAnb2JqZWN0Jzo6 dGV4dCkKKygzIHJvd3MpCisKKy0tIFNlY3Rpb24gMjogY29ycmVjdCBleGVjdXRpb24gdGhyb3Vn aCB0aGUgcmV3cml0dGVuIHBhdGgKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6bnVt ZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgbnVtZXJp YyAKKy0tLS0tLS0tLQorICAgICAgIDQKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4g J2ZpZWxkNycpOjpib29sIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0 JzsKKyBib29sIAorLS0tLS0tCisgdAorKDEgcm93KQorCistLSBTZWN0aW9uIDJiOiBjb3JyZWN0 IGV4ZWN1dGlvbiB0aHJvdWdoIHN1YnNjcmlwdGluZyBzeW50YXgKK1NFTEVDVCAodGVzdF9qc29u WydmaWVsZDQnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdv YmplY3QnOworIHRlc3RfanNvbiAKKy0tLS0tLS0tLS0tCisgICAgICAgICA0CisoMSByb3cpCisK K1NFTEVDVCAodGVzdF9qc29uWydmaWVsZDcnXSk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJF IGpzb25fdHlwZSA9ICdvYmplY3QnOworIHRlc3RfanNvbiAKKy0tLS0tLS0tLS0tCisgdAorKDEg cm93KQorCistLSBVbnN1cHBvcnRlZCB0YXJnZXRzIHN0aWxsIHdvcmsgY29ycmVjdGx5IHRocm91 Z2ggdGhlIG9yaWdpbmFsIHBhdGgKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50 NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgaW50NCAKKy0t LS0tLQorICAgIDQKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpm bG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworIGZsb2F0 OCAKKy0tLS0tLS0tCisgICAgICA0CisoMSByb3cpCisKKy0tIFNlY3Rpb24gMzogTlVMTCBzZW1h bnRpY3MgKG1pc3Npbmcga2V5LCBKU09OIG51bGwsIG5vbi1vYmplY3QgaW5wdXQpCitTRUxFQ1Qg KHRlc3RfanNvbiAtPiAnZmllbGQzJyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpz b25fdHlwZSA9ICdvYmplY3QnOyAgLS0gSlNPTiBudWxsCisgbnVtZXJpYyAKKy0tLS0tLS0tLQor ICAgICAgICAKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ25vbmV4aXN0ZW50Jyk6 Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0g bWlzc2luZyBrZXkKKyBudW1lcmljIAorLS0tLS0tLS0tCisgICAgICAgIAorKDEgcm93KQorCitT RUxFQ1QgKHRlc3RfanNvbiAtPiAneCcpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBq c29uX3R5cGUgPSAnYXJyYXknOyAgLS0gbm9uLW9iamVjdAorIG51bWVyaWMgCistLS0tLS0tLS0K KyAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDMnKTo6Ym9v bCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBKU09OIG51 bGwsIGJvb2wgcGF0aAorIGJvb2wgCistLS0tLS0KKyAKKygxIHJvdykKKworLS0gU2VjdGlvbiAz YjogTlVMTCBzZW1hbnRpY3MgdGhyb3VnaCBzdWJzY3JpcHRpbmcgc3ludGF4CitTRUxFQ1QgKHRl c3RfanNvblsnZmllbGQzJ10pOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsgIC0tIEpTT04gbnVsbAorIHRlc3RfanNvbiAKKy0tLS0tLS0tLS0tCisg ICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9qc29uWydub25leGlzdGVudCddKTo6 bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBt aXNzaW5nIGtleQorIHRlc3RfanNvbiAKKy0tLS0tLS0tLS0tCisgICAgICAgICAgCisoMSByb3cp CisKKy0tIFNlY3Rpb24gNDogdHlwZS1taXNtYXRjaCBlcnJvcnMgKHNjYWxhciBhbmQgY29udGFp bmVyIHR5cGVzKQorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjpudW1lcmljIEZST00g dGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIHN0cmluZyB0byBudW1l cmljCitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0eXBlIG51bWVyaWMKK1NF TEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUg anNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJpbmcgdG8gYm9vbAorRVJST1I6ICBjYW5ub3Qg Y2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBib29sZWFuCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAn ZmllbGQ1Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmpl Y3QnOyAgLS0gYXJyYXkgdG8gbnVtZXJpYworRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBhcnJh eSBvciBvYmplY3QgdG8gdHlwZSBudW1lcmljCistLSBTZWN0aW9uIDRiOiB0eXBlLW1pc21hdGNo IGVycm9yIHRocm91Z2ggc3Vic2NyaXB0aW5nIHN5bnRheAorU0VMRUNUICh0ZXN0X2pzb25bJ2Zp ZWxkMSddKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVj dCc7ICAtLSBzdHJpbmcgdG8gbnVtZXJpYworRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJp bmcgdG8gdHlwZSBudW1lcmljCistLSBTZWN0aW9uIDU6IGRpcmVjdCBjYWxscyB0byB0eXBlZCBl eHRyYWN0b3IgYnVpbHRpbnMKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYygneyJh IjogMX0nOjpqc29uYiwgJ2EnKTsKKyBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMQorKDEg cm93KQorCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6IDMuMTR9Jzo6 anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIDMuMTQKKygxIHJvdykKKwor U0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9ib29sKCd7ImEiOiB0cnVlfSc6Ompzb25iLCAnYScp OworIGpzb25iX29iamVjdF9maWVsZF9ib29sIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IHQKKygxIHJvdykKKworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9ib29sKCd7ImEiOiBmYWxz ZX0nOjpqc29uYiwgJ2EnKTsKKyBqc29uYl9vYmplY3RfZmllbGRfYm9vbCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKKy0tIGRpcmVjdCBjYWxsczogTlVMTCBzZW1h bnRpY3MKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYygneyJhIjogMX0nOjpqc29u YiwgJ21pc3NpbmcnKTsKKyBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQor CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6IG51bGx9Jzo6anNvbmIs ICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworU0VMRUNU IGpzb25iX29iamVjdF9maWVsZF9ib29sKCd7ImEiOiB0cnVlfSc6Ompzb25iLCAnbWlzc2luZycp OworIGpzb25iX29iamVjdF9maWVsZF9ib29sIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCistLSBkaXJlY3QgY2FsbHM6IHR5cGUtbWlzbWF0Y2ggZXJyb3JzCitTRUxF Q1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6ICJ0ZXh0In0nOjpqc29uYiwgJ2En KTsKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5cGUgbnVtZXJpYworU0VM RUNUIGpzb25iX29iamVjdF9maWVsZF9ib29sKCd7ImEiOiAxfSc6Ompzb25iLCAnYScpOworRVJS T1I6ICBjYW5ub3QgY2FzdCBqc29uYiBudW1lcmljIHRvIHR5cGUgYm9vbGVhbgorU0VMRUNUIGpz b25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiB7IngiOjF9fSc6Ompzb25iLCAnYScpOyAg LS0gY29udGFpbmVyIHRvIHNjYWxhcgorRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBhcnJheSBv ciBvYmplY3QgdG8gdHlwZSBudW1lcmljCiBTRUxFQ1QgdGVzdF9qc29uIC0+ICd4JyBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcic7CiAgP2NvbHVtbj8gCiAtLS0tLS0t LS0tCkBAIC01ODYsNyArNzg2LDggQEAgU0VMRUNUIGpzb25iX29iamVjdF9rZXlzKHRlc3RfanNv bikgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOwogIGZpZWxkNAog IGZpZWxkNQogIGZpZWxkNgotKDYgcm93cykKKyBmaWVsZDcKKyg3IHJvd3MpCiAKIC0tIG51bGxz CiBTRUxFQ1QgKHRlc3RfanNvbi0+J2ZpZWxkMycpIElTIE5VTEwgQVMgZXhwZWN0X2ZhbHNlIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25i LnNxbAppbmRleCBkMjhlZDFjMWU4NS4uMDk4MzZiY2EwYTkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5z cWwKQEAgLTE1NSw3ICsxNTUsNjggQEAgQ1JFQVRFIFRFTVAgVEFCTEUgdGVzdF9qc29uYiAoCiBJ TlNFUlQgSU5UTyB0ZXN0X2pzb25iIFZBTFVFUwogKCdzY2FsYXInLCciYSBzY2FsYXIiJyksCiAo J2FycmF5JywnWyJ6ZXJvIiwgIm9uZSIsInR3byIsbnVsbCwiZm91ciIsImZpdmUiLCBbMSwyLDNd LHsiZjEiOjl9XScpLAotKCdvYmplY3QnLCd7ImZpZWxkMSI6InZhbDEiLCJmaWVsZDIiOiJ2YWwy IiwiZmllbGQzIjpudWxsLCAiZmllbGQ0IjogNCwgImZpZWxkNSI6IFsxLDIsM10sICJmaWVsZDYi OiB7ImYxIjo5fX0nKTsKKygnb2JqZWN0JywneyJmaWVsZDEiOiJ2YWwxIiwiZmllbGQyIjoidmFs MiIsImZpZWxkMyI6bnVsbCwgImZpZWxkNCI6IDQsICJmaWVsZDUiOiBbMSwyLDNdLCAiZmllbGQ2 IjogeyJmMSI6OX0sICJmaWVsZDciOiB0cnVlfScpOworCistLSBPcHRpbWl6ZWQgdHlwZWQgZXh0 cmFjdGlvbjogdGhlIHBsYW5uZXIgcmV3cml0ZXMgKGotPidrZXknKTo6dHlwZSBpbnRvIGEKKy0t IGRpcmVjdCB0eXBlZCBleHRyYWN0b3IgY2FsbCwgY3VycmVudGx5IGZvciBudW1lcmljIGFuZCBi b29sIG9ubHkuCisKKy0tIFNlY3Rpb24gMTogcGxhbm5lciByZXdyaXRlIHZlcmlmaWNhdGlvbiAo cmV3cml0dGVuIHRhcmdldHMpCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAo dGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNv bl90eXBlID0gJ29iamVjdCc7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAo dGVzdF9qc29uIC0+ICdmaWVsZDcnKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90 eXBlID0gJ29iamVjdCc7CisKKy0tIFNlY3Rpb24gMWI6IHBsYW5uZXIgcmV3cml0ZSB2ZXJpZmlj YXRpb24gZm9yIHN1YnNjcmlwdGluZyBzeW50YXgKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikgU0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIg V0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp IFNFTEVDVCAodGVzdF9qc29uWydmaWVsZDcnXSk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJF IGpzb25fdHlwZSA9ICdvYmplY3QnOworCistLSBWZXJpZnkgdGhhdCB1bnN1cHBvcnRlZCBjYXN0 IHRhcmdldHMgYXJlIE5PVCByZXdyaXR0ZW4gYnkgdGhpcyBwYXRjaC4KKy0tIEludGVnZXIgYW5k IGZsb2F0IGNhc3RzIHJlbWFpbiBvbiB0aGUgb3JpZ2luYWwganNvbmJfb2JqZWN0X2ZpZWxkICsg Y2FzdCBwYXRoLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNv biAtPiAnZmllbGQ0Jyk6OmludDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdv YmplY3QnOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAt PiAnZmllbGQ0Jyk6OmludDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmpl Y3QnOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAn ZmllbGQ0Jyk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVj dCc7CisKKy0tIFNlY3Rpb24gMjogY29ycmVjdCBleGVjdXRpb24gdGhyb3VnaCB0aGUgcmV3cml0 dGVuIHBhdGgKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6bnVtZXJpYyBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CitTRUxFQ1QgKHRlc3RfanNvbiAt PiAnZmllbGQ3Jyk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmpl Y3QnOworCistLSBTZWN0aW9uIDJiOiBjb3JyZWN0IGV4ZWN1dGlvbiB0aHJvdWdoIHN1YnNjcmlw dGluZyBzeW50YXgKK1NFTEVDVCAodGVzdF9qc29uWydmaWVsZDQnXSk6Om51bWVyaWMgRlJPTSB0 ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworU0VMRUNUICh0ZXN0X2pzb25b J2ZpZWxkNyddKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVj dCc7CisKKy0tIFVuc3VwcG9ydGVkIHRhcmdldHMgc3RpbGwgd29yayBjb3JyZWN0bHkgdGhyb3Vn aCB0aGUgb3JpZ2luYWwgcGF0aAorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ0 IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK1NFTEVDVCAodGVz dF9qc29uIC0+ICdmaWVsZDQnKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsKKworLS0gU2VjdGlvbiAzOiBOVUxMIHNlbWFudGljcyAobWlzc2luZyBr ZXksIEpTT04gbnVsbCwgbm9uLW9iamVjdCBpbnB1dCkKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdm aWVsZDMnKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVj dCc7ICAtLSBKU09OIG51bGwKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdub25leGlzdGVudCcpOjpu dW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIG1p c3Npbmcga2V5CitTRUxFQ1QgKHRlc3RfanNvbiAtPiAneCcpOjpudW1lcmljIEZST00gdGVzdF9q c29uYiBXSEVSRSBqc29uX3R5cGUgPSAnYXJyYXknOyAgLS0gbm9uLW9iamVjdAorU0VMRUNUICh0 ZXN0X2pzb24gLT4gJ2ZpZWxkMycpOjpib29sIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsgIC0tIEpTT04gbnVsbCwgYm9vbCBwYXRoCisKKy0tIFNlY3Rpb24gM2I6 IE5VTEwgc2VtYW50aWNzIHRocm91Z2ggc3Vic2NyaXB0aW5nIHN5bnRheAorU0VMRUNUICh0ZXN0 X2pzb25bJ2ZpZWxkMyddKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBl ID0gJ29iamVjdCc7ICAtLSBKU09OIG51bGwKK1NFTEVDVCAodGVzdF9qc29uWydub25leGlzdGVu dCddKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7 ICAtLSBtaXNzaW5nIGtleQorCistLSBTZWN0aW9uIDQ6IHR5cGUtbWlzbWF0Y2ggZXJyb3JzIChz Y2FsYXIgYW5kIGNvbnRhaW5lciB0eXBlcykKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEn KTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAt LSBzdHJpbmcgdG8gbnVtZXJpYworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjpib29s IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIHN0cmluZyB0 byBib29sCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ1Jyk6Om51bWVyaWMgRlJPTSB0ZXN0 X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gYXJyYXkgdG8gbnVtZXJpYwor CistLSBTZWN0aW9uIDRiOiB0eXBlLW1pc21hdGNoIGVycm9yIHRocm91Z2ggc3Vic2NyaXB0aW5n IHN5bnRheAorU0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkMSddKTo6bnVtZXJpYyBGUk9NIHRlc3Rf anNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJpbmcgdG8gbnVtZXJpYwor CistLSBTZWN0aW9uIDU6IGRpcmVjdCBjYWxscyB0byB0eXBlZCBleHRyYWN0b3IgYnVpbHRpbnMK K1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYygneyJhIjogMX0nOjpqc29uYiwgJ2En KTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYygneyJhIjogMy4xNH0nOjpqc29u YiwgJ2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfYm9vbCgneyJhIjogdHJ1ZX0nOjpq c29uYiwgJ2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfYm9vbCgneyJhIjogZmFsc2V9 Jzo6anNvbmIsICdhJyk7CistLSBkaXJlY3QgY2FsbHM6IE5VTEwgc2VtYW50aWNzCitTRUxFQ1Qg anNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6IDF9Jzo6anNvbmIsICdtaXNzaW5nJyk7 CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6IG51bGx9Jzo6anNvbmIs ICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2woJ3siYSI6IHRydWV9Jzo6anNv bmIsICdtaXNzaW5nJyk7CistLSBkaXJlY3QgY2FsbHM6IHR5cGUtbWlzbWF0Y2ggZXJyb3JzCitT RUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6ICJ0ZXh0In0nOjpqc29uYiwg J2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfYm9vbCgneyJhIjogMX0nOjpqc29uYiwg J2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYygneyJhIjogeyJ4IjoxfX0n Ojpqc29uYiwgJ2EnKTsgIC0tIGNvbnRhaW5lciB0byBzY2FsYXIKIAogU0VMRUNUIHRlc3RfanNv biAtPiAneCcgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXInOwogU0VM RUNUIHRlc3RfanNvbiAtPiAneCcgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdh cnJheSc7Ci0tIAoyLjUyLjAKCg== --0000000000007c998b064ed62616--