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 1w9q30-001nzc-0y for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 19:55:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9q2y-00BlTl-2W for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 19:55:45 +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 1w9q2x-00BlTd-31 for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 19:55:44 +0000 Received: from mail-yx1-xb134.google.com ([2607:f8b0:4864:20::b134]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9q2w-00000000uNp-152N for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 19:55:43 +0000 Received: by mail-yx1-xb134.google.com with SMTP id 956f58d0204a3-65009bfdcfdso4473866d50.2 for ; Mon, 06 Apr 2026 12:55:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775505342; cv=none; d=google.com; s=arc-20240605; b=Shk5+Bj+wVV/af/kQXMTDbzCSUfwHRw7+X8qdhHPQiBPnXqzoP01GayT/Xjo8ODacZ nons/PGjCeeMjSKuq2kfbwQYdr/VGo0pLi/0AfwY65XrJOuhg6oYtjayF97N4nzOncpL dwjXgxI6AaWSJlZwR+zdWiLCPjbz94iOfdY6TYt9jtFgzqtfxX0avIwbv1uLYFDq0HSw Lp9xi4LaASGvnAh8riRgWzkWrLs89pjP61JCFNz/ZAD97a8bcmiphZGC16r+d7loETcg GAnVOVgNZOXFn/+j7T1c8IIBWpY/Sfh00J3Hgu3JJkpuSZQoC1vUkN8HiYWW+lrEwRT3 BTiA== 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=3/8BCAeb84rpXM+ymYQ9XbyT4QNKoOEElTaxiurdA/0=; fh=McuIjwbsc4YvL74D3DnWKUJR060tJlzwR1D1SeC0LYs=; b=i4E6FzKKtB2iuMEtYxbY1CNrHeyTncqPu7GDxnNzq8RNRS+hdQV3+8964EMCDVS77E 9fFWbk67GSpPXz5gEH9FTYBunO1MUWzQYBJyyS5A7LjVPc/w+2ZPWJl4bGqMgHd/zBbI o2gXxcBSJ7SENKm7SDdEMXqJ43Jc1UaAkQ0+INVAAdRY5LPUC5vWt04Ftw7F/+bgp8Dw jTHLTqz7eesrWxuQMh6kkWLC+WLk1aZxpjDYu7R/aLRckjVm4w50/s/Csp9GcGqFHhYu 4M71YsMPDNwwKU2JxyDqNxljfrZiBiI+HL2LGwVL9Qk8GgNR2D9EvupmXpTJQiEttEks bNsQ==; 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=1775505342; x=1776110142; 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=3/8BCAeb84rpXM+ymYQ9XbyT4QNKoOEElTaxiurdA/0=; b=a/A65H/qOmJXS5UNEqqEtz7fXzcvNgIhy1rZAh/I3vP63v1ZeuGXl/MUluSwZOVKGc sl6TA0GbqKrTah8FJvJDEviZzt7jl2ldiFLy7Uk6UfrfTnNSrxEaRD/ZIsB9zJB5WBh2 Ls2JeJYnBeM1ijtgQSYTNC71/RGDxSw5ZPaSD+NLskcXhM9P07wdP3zBHgLym6Jc7Mf3 0XxcPslBPbThCsqKlE0aDxovyOyUAol8RaQ3FcMkso4clarIL7wYS7b/i9MF3FWMKn34 qvMcyVzWvVB2Xnc/BjEAB8TKSH1oICCn6xi8q6edBby/h2jpdh89Sc2KQDNHW+fB+BfG o+Bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775505342; x=1776110142; 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=3/8BCAeb84rpXM+ymYQ9XbyT4QNKoOEElTaxiurdA/0=; b=jQH/J59Bhn0gtB6e2RbOSPT7lTvYn2IfjjW7XkNxBcggSfsIB3bAR9PlUD2b4CtFZd B/hyBBf/cHvTuKoiUcDRk/s9Lg21I72g66ZeEIn9OSGyRIvdUKAbMS1I8rWQUVNB4w7V irlMj8mJYdK9LA3Iaz0Dw8qSebSgTY9u7uG4eJaRm0y6Le0Pbwdm8x1820+gMHz5o/wX RkwwxmzeI4of8kFj73H/rq+xB9c+3AgQhpYKoTPKj3ChHpiu+77ZZASTn3/qWwcBcNk3 946JOPjASlh8m8ind5CIq6FDIKHXIHgZC9ygGzCDhjyCrhr1p/hLmMyO1647rpptIkah 3ffQ== X-Forwarded-Encrypted: i=1; AJvYcCXq45PYktADXdsK/BQH04NoMGcAVnZyRG7ON30hw3bTzroKI8VEhRXs0tbHCN+wyfckOqvC/gGiAs6dZznE@lists.postgresql.org X-Gm-Message-State: AOJu0YwGI+LkCIrqXwMWsGeU6KZUgcZOtAvK0V69qrWzSTWgnOvAh4rv TI9dV/6uWgCoQpjAFkAWplilmnDKqixBM/U0Z8gTNUK54hPTgm1I8k+mjeAl4ifG3YInR7VHI40 AhXnbEwoQgNKu4HHRUjR5B+S17wRA6Lc= X-Gm-Gg: AeBDiespNP78sE+xHAk3kxOaLjX5rVLSijIApjeuBZF/CpFnwbqZsdzeljKuGKkvl3+ vLJXlaOwxZj2YrNulIID8/37OUgNPjx6fwuy1ge5z7DUpYniI9hwwAVUebndNBHcJ83ceWFaiPv y72Iy+75FfatOkcKG6fCMTEIhWCYi4Upu4PnqRDKlAAoEHutaeIZF+l8kseGAh9G6BTxiD8wlvg lK3CuuO5wLGeBxnxYhXsRd4AflUDj3P4s78fm2rDke0KufoG0n+eDI84shoXJjbZx53dOYkdou3 DcbGSfh1b5UXXuOpyYz2wRG2oGL3zhhL/63SVIE= X-Received: by 2002:a05:690e:d88:b0:650:23e9:323c with SMTP id 956f58d0204a3-65048867644mr12302669d50.61.1775505341509; Mon, 06 Apr 2026 12:55:41 -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 12:55:29 -0700 X-Gm-Features: AQROBzA55XflXwER9luegCwIxMr8jhtxYIFO9e-A3mgF_jp5DQvFx_5XhHWjJWA 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="0000000000002dabdc064ed00d66" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002dabdc064ed00d66 Content-Type: multipart/alternative; boundary="0000000000002dabda064ed00d64" --0000000000002dabda064ed00d64 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 6, 2026 at 11:35=E2=80=AFAM Haibo Yan w= rote: > > > 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 w= rote: >> >> >> On Apr 6, 2026, at 6:05=E2=80=AFAM, Dmitry Dolgov <9erthalion6@gmail.com= > 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 subscriptio= n >> 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 a= n >> 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-fiel= d >> 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 los= t > somewhere in transit. I=E2=80=99m not sure what happened. I did confirm l= ocally > 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. Hopefu= lly 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 duplicate= objid. I=E2=80=99ve reuploaded a fixed version here. Regards, Haibo --0000000000002dabda064ed00d64 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Mon, Apr 6, 2026 at 11:35=E2=80=AFAM H= aibo Yan <tristan.yim@gmail.com= > wrote:


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

On Apr 6, 2026, at 10:51=E2= =80=AFAM, Haibo Yan <Tristan.Yim@gmail.com> wrote:


On Apr 6, 2026, at 6:05=E2=80=AFAM, Dmitry Dol= gov <9erthali= on6@gmail.com> wrote:

O= n Fri, Apr 03, 2026 at 09:42:20AM -0700, Haibo Yan wrote:
<= br>Thanks for picking it up, the patch looks good.

One small thing: the UI looks a bit odd on my side. It does not s= eem to have picked my attachment, and is instead showing your older attachm= ent 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 express= ion.=C2=A0 It may appear as
+ * either a FuncExpr or an O= pExpr; accept both forms.
+ = */
+ if (IsA= (arg, FuncExpr))
+ {
+ FuncExpr =C2=A0=C2=A0*inner =3D (FuncExpr *) arg= ;
+
+ inne= r_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-= >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 js= on_type =3D 'object';

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


Thank you Dmitry

I = agree that handling=C2=A0SubscriptingRef=C2=A0here is the righ= t thing to do.

It stays within the same stage-1 scope, covers an equi= valent object-field extraction form, and does not introduce any additional = interface surface. Based on your suggestion, I updated the patch to recogni= ze the=C2=A0SubscriptingRefrepresentation as well, so cases li= ke:

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

test_json[&#= 39;field7']::bool

test_json['field4']= ::numeric

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

can follow t= he same rewrite path as the existing=C2=A0jsonb_object_field(...)=C2=A0/=C2=A0->=C2=A0cases.

Please see the updated= patch:


<v2-0001-js= onb-optimize-object-field-casts-to-numeric-and-.patch>
<= div>

Thanks again for the review and suggestion.

Regards,=

Haibo

It looks like the a= ttachment 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 lost 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. Hopefu= lly this won=E2=80=99t cause too much disruption for everyone.=C2=A0
<= br>Haibo


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

Regards,

Haibo=C2=A0
--0000000000002dabda064ed00d64-- --0000000000002dabdc064ed00d66 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_mnnm0xhy0 RnJvbSBmZWM0ZDhhMDVjMGFkMTY3NzZhMzY2M2UyMmRhYmUyZGI4ZTYwMzlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFRodSwgMiBBcHIgMjAyNiAyMToyMjo1NCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjNdIGpzb25i OiBvcHRpbWl6ZSBvYmplY3QtZmllbGQgY2FzdHMgdG8gbnVtZXJpYyBhbmQgYm9vbAoKQWRkIGEg c3VwcG9ydCBmdW5jdGlvbiBmb3IganNvbmItdG8tbnVtZXJpYy9ib29sIGNhc3RzIHRoYXQKcmVj b2duaXplcyBjYXN0cyBvdmVyIGpzb25iIG9iamVjdC1maWVsZCBleHRyYWN0aW9uLCBpbmNsdWRp bmcKanNvbmJfb2JqZWN0X2ZpZWxkKCksIC0+LCBhbmQgc3Vic2NyaXB0aW5nIGJ5IGtleSwgYW5k IHJld3JpdGVzCnRoZW0gdG8gZXhwbGljaXQgdHlwZWQgZXh0cmFjdG9yIGNhbGxzLgoKVGhpcyBr ZWVwcyBvcmRpbmFyeSBTUUwgc3ludGF4IHVuY2hhbmdlZCB3aGlsZSBhdm9pZGluZyBleHRyYQpq c29uYiBzY2FsYXIgd3JhcHBpbmcvdW53cmFwcGluZyBvbiB0aGUgb3B0aW1pemVkIHBhdGguCgpT dGFnZSAxIG9ubHk6IGNvdmVycyBvYmplY3QtZmllbGQgZXh0cmFjdGlvbiB0byBudW1lcmljL2Jv b2wuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgICAgICAgfCAxMjYgKysrKysr KysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyAgIHwgMTM2ICsr KysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgfCAg MTggKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dCB8IDIwNSArKysrKysr KysrKysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwgICAg ICB8ICA2MyArKysrKysrKy0KIDUgZmlsZXMgY2hhbmdlZCwgNTQzIGluc2VydGlvbnMoKyksIDUg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwppbmRleCA4NjRjNWFjMWM4NS4uMWVlMTU2 Nzk3MzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCkBAIC0xNyw2ICsxNyw5IEBACiAjaW5jbHVkZSAi ZnVuY2FwaS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvbm9k ZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvc3VwcG9ydG5vZGVzLmgiCiAjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2luY2x1ZGUgInV0 aWxzL2pzb24uaCIKQEAgLTE4MTYsNiArMTgxOSwxMjkgQEAgY2Fubm90Q2FzdEpzb25iVmFsdWUo ZW51bSBqYnZUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKnNxbHR5cGUsIE5vZGUgKmVzY29udGV4dCkK IAlyZXR1cm4gKERhdHVtKSAwOwogfQogCisvKgorICoganNvbmJfY2FzdF9zdXBwb3J0KCkKKyAq CisgKiBQbGFubmVyIHN1cHBvcnQgZnVuY3Rpb24gZm9yIGpzb25iLXRvLXNjYWxhciBjYXN0IGZ1 bmN0aW9ucywgYXR0YWNoZWQgdmlhCisgKiBwcm9zdXBwb3J0IG9uIHRoZSBqc29uYl9udW1lcmlj IGFuZCBqc29uYl9ib29sIGNhdGFsb2cgZW50cmllcy4KKyAqCisgKiBXaGVuIHRoZSBzb2xlIGFy Z3VtZW50IHRvIHRoZSBjYXN0IGlzIGEganNvbmJfb2JqZWN0X2ZpZWxkKCkgY2FsbCAodGhlIC0+ CisgKiBvcGVyYXRvciksIHdlIHJlcGxhY2UgdGhlIHR3by1zdGVwIGNhc3QoZXh0cmFjdCguLi4p KSBleHByZXNzaW9uIHdpdGggYQorICogc2luZ2xlIHR5cGVkIGV4dHJhY3RvciB0aGF0IHJlYWRz IHRoZSBzY2FsYXIgZGlyZWN0bHkgZnJvbSB0aGUgaW4tbWVtb3J5CisgKiBKc29uYlZhbHVlLCBh dm9pZGluZyBhIHJvdW5kLXRyaXAgdGhyb3VnaCBKc29uYlZhbHVlVG9Kc29uYi4KKyAqCisgKiBG b3IgZXhhbXBsZSwgKGogLT4gJ2EnKTo6bnVtZXJpYyBpcyBwYXJzZWQgYXM6CisgKiAgIGpzb25i X251bWVyaWMoanNvbmJfb2JqZWN0X2ZpZWxkKGosICdhJykpCisgKiBhbmQgaXMgcmV3cml0dGVu IHRvOgorICogICBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYyhqLCAnYScpCisgKi8KK0RhdHVt Citqc29uYl9jYXN0X3N1cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlOb2RlCSAgICpyYXdy ZXEgPSAoTm9kZSAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwlOb2RlCSAgICpyZXQgPSBOVUxM OworCisJaWYgKElzQShyYXdyZXEsIFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkpKQorCXsKKwkJU3Vw cG9ydFJlcXVlc3RTaW1wbGlmeSAqcmVxID0gKFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkgKikgcmF3 cmVxOworCQlGdW5jRXhwciAgICpmZXhwciA9IHJlcS0+ZmNhbGw7CisJCU5vZGUJICAgKmFyZzsK KwkJT2lkCQkJaW5uZXJfZnVuY2lkOworCQlMaXN0CSAgICppbm5lcl9hcmdzOworCQlpbnQJCQls b2NhdGlvbjsKKwkJT2lkCQkJcmVwbGFjZW1lbnRfZnVuY2lkOworCQlPaWQJCQlyZXBsYWNlbWVu dF9yZXR0eXBlOworCQlGdW5jRXhwciAgICpuZXdmZXhwcjsKKworCQkvKiBUaGUgY2FzdCBmdW5j dGlvbiBtdXN0IGhhdmUgZXhhY3RseSBvbmUgYXJndW1lbnQgKi8KKwkJaWYgKGxpc3RfbGVuZ3Ro KGZleHByLT5hcmdzKSAhPSAxKQorCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisKKwkJYXJn ID0gKE5vZGUgKikgbGluaXRpYWwoZmV4cHItPmFyZ3MpOworCisJCS8qCisJCSAqIElkZW50aWZ5 IHRoZSBpbm5lciBleHRyYWN0aW9uIGV4cHJlc3Npb24uICBJdCBtYXkgYXBwZWFyIGFzIGEKKwkJ ICogRnVuY0V4cHIsIGFuIE9wRXhwciwgb3IgYSBTdWJzY3JpcHRpbmdSZWYsIGRlcGVuZGluZyBv biBob3cgdGhlCisJCSAqIGV4cHJlc3Npb24gaXMgcmVwcmVzZW50ZWQgYXQgdGhpcyBwb2ludC4g IEFjY2VwdCB0aGUgc3VwcG9ydGVkCisJCSAqIGZvcm1zLgorCQkgKi8KKwkJaWYgKElzQShhcmcs IEZ1bmNFeHByKSkKKwkJeworCQkJRnVuY0V4cHIgICAqaW5uZXIgPSAoRnVuY0V4cHIgKikgYXJn OworCisJCQlpbm5lcl9mdW5jaWQgPSBpbm5lci0+ZnVuY2lkOworCQkJaW5uZXJfYXJncyA9IGlu bmVyLT5hcmdzOworCQkJbG9jYXRpb24gPSBpbm5lci0+bG9jYXRpb247CisJCX0KKwkJZWxzZSBp ZiAoSXNBKGFyZywgT3BFeHByKSkKKwkJeworCQkJT3BFeHByCSAgICppbm5lciA9IChPcEV4cHIg KikgYXJnOworCisJCQlpbm5lcl9mdW5jaWQgPSBpbm5lci0+b3BmdW5jaWQ7CisJCQlpbm5lcl9h cmdzID0gaW5uZXItPmFyZ3M7CisJCQlsb2NhdGlvbiA9IGlubmVyLT5sb2NhdGlvbjsKKwkJfQor CQllbHNlIGlmIChJc0EoYXJnLCBTdWJzY3JpcHRpbmdSZWYpKQorCQl7CisJCQlTdWJzY3JpcHRp bmdSZWYgKnNic3JlZiA9IChTdWJzY3JpcHRpbmdSZWYgKikgYXJnOworCQkJTm9kZQkgICAqc3Vi c2NyaXB0OworCisJCQkvKgorCQkJICogT25seSBoYW5kbGUgdGhlIG5hcnJvdyBjYXNlIGVxdWl2 YWxlbnQgdG8gb2JqZWN0LWZpZWxkCisJCQkgKiBleHRyYWN0aW9uOiBhIHNpbmdsZSB0ZXh0LXR5 cGVkIHN1YnNjcmlwdCBvbiBhIGpzb25iCisJCQkgKiBjb250YWluZXIsIHdpdGggbm8gc2xpY2Ug YW5kIG5vIGFzc2lnbm1lbnQuCisJCQkgKi8KKwkJCWlmIChzYnNyZWYtPnJlZmNvbnRhaW5lcnR5 cGUgIT0gSlNPTkJPSUQpCisJCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisJCQlpZiAobGlz dF9sZW5ndGgoc2JzcmVmLT5yZWZ1cHBlcmluZGV4cHIpICE9IDEpCisJCQkJUEdfUkVUVVJOX1BP SU5URVIoTlVMTCk7CisJCQlpZiAoc2JzcmVmLT5yZWZsb3dlcmluZGV4cHIgIT0gTklMKQorCQkJ CVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworCQkJaWYgKHNic3JlZi0+cmVmYXNzZ25leHByICE9 IE5VTEwpCisJCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisKKwkJCXN1YnNjcmlwdCA9IChO b2RlICopIGxpbml0aWFsKHNic3JlZi0+cmVmdXBwZXJpbmRleHByKTsKKwkJCWlmIChleHByVHlw ZShzdWJzY3JpcHQpICE9IFRFWFRPSUQpCisJCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisK KwkJCWlubmVyX2Z1bmNpZCA9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEOworCQkJaW5uZXJfYXJncyA9 IGxpc3RfbWFrZTIoc2JzcmVmLT5yZWZleHByLCBzdWJzY3JpcHQpOworCQkJbG9jYXRpb24gPSBl eHByTG9jYXRpb24oYXJnKTsKKwkJfQorCQllbHNlCisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxM KTsKKworCQkvKiBPbmx5IHJld3JpdGUganNvbmJfb2JqZWN0X2ZpZWxkKGpzb25iLCB0ZXh0KTsg dmVyaWZ5IGFyaXR5IHRvbyAqLworCQlpZiAoaW5uZXJfZnVuY2lkICE9IEZfSlNPTkJfT0JKRUNU X0ZJRUxEKQorCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisJCWlmIChsaXN0X2xlbmd0aChp bm5lcl9hcmdzKSAhPSAyKQorCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisKKwkJLyogTWFw IHRoZSBvdXRlciBjYXN0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHR5cGVkIGV4dHJhY3RvciAqLwor CQlpZiAoZmV4cHItPmZ1bmNpZCA9PSBGX05VTUVSSUNfSlNPTkIpCisJCXsKKwkJCXJlcGxhY2Vt ZW50X2Z1bmNpZCA9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEX05VTUVSSUM7CisJCQlyZXBsYWNlbWVu dF9yZXR0eXBlID0gTlVNRVJJQ09JRDsKKwkJfQorCQllbHNlIGlmIChmZXhwci0+ZnVuY2lkID09 IEZfQk9PTF9KU09OQikKKwkJeworCQkJcmVwbGFjZW1lbnRfZnVuY2lkID0gRl9KU09OQl9PQkpF Q1RfRklFTERfQk9PTDsKKwkJCXJlcGxhY2VtZW50X3JldHR5cGUgPSBCT09MT0lEOworCQl9CisJ CWVsc2UKKwkJCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworCisJCS8qIEJ1aWxkIHRoZSByZXBs YWNlbWVudCBmdW5jdGlvbiBjYWxsICovCisJCW5ld2ZleHByID0gbWFrZUZ1bmNFeHByKHJlcGxh Y2VtZW50X2Z1bmNpZCwgcmVwbGFjZW1lbnRfcmV0dHlwZSwKKwkJCQkJCQkJaW5uZXJfYXJncywg SW52YWxpZE9pZCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJQ09FUkNFX0VYUExJQ0lUX0NBTEwpOwor CQluZXdmZXhwci0+bG9jYXRpb24gPSBsb2NhdGlvbjsKKwkJcmV0ID0gKE5vZGUgKikgbmV3ZmV4 cHI7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIocmV0KTsKK30KKwogRGF0dW0KIGpzb25iX2Jv b2woUEdfRlVOQ1RJT05fQVJHUykKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYwppbmRleCA5 N2NjM2Q2MDM0MC4uZmUxMWY1ZWRkNTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAg LTkyMSw2ICs5MjEsMTQyIEBAIGpzb25iX29iamVjdF9maWVsZF90ZXh0KFBHX0ZVTkNUSU9OX0FS R1MpCiAJUEdfUkVUVVJOX05VTEwoKTsKIH0KIAorLyoKKyAqIFR5cGVkIHNjYWxhciBleHRyYWN0 aW9uIGZyb20ganNvbmIgb2JqZWN0IGZpZWxkcy4KKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgZXh0 cmFjdCBhIHR5cGVkIHNjYWxhciBkaXJlY3RseSBmcm9tIHRoZSBpbi1tZW1vcnkKKyAqIEpzb25i VmFsdWUgZm91bmQgYnkga2V5IGxvb2t1cCwgc2tpcHBpbmcgdGhlIGludGVybWVkaWF0ZSBKc29u YgorICogc2VyaWFsaXphdGlvbiB0aGF0IG9jY3VycyB3aXRoIHRoZSB1bm9wdGltaXplZCBjYXN0 LW92ZXItZXh0cmFjdGlvbiBwYXRoLgorICoKKyAqIFRoZXkgbGl2ZSBoZXJlIGFsb25nc2lkZSBq c29uYl9vYmplY3RfZmllbGQoKSBiZWNhdXNlIHRoZXkgc2hhcmUgdGhlCisgKiBzYW1lIGtleS1s b29rdXAgbG9naWMgKGdldEtleUpzb25WYWx1ZUZyb21Db250YWluZXIpLgorICoKKyAqIFJlZ2lz dGVyZWQgaW4gcGdfcHJvYyBhcyBvcmRpbmFyeSBTUUwtY2FsbGFibGUgYnVpbHRpbnM7IGFsc28g c2VydmUgYXMKKyAqIHBsYW5uZXIgcmV3cml0ZSB0YXJnZXRzIGZvciBqc29uYl9jYXN0X3N1cHBv cnQoKSBpbiBqc29uYi5jLgorICoKKyAqIE5VTEwgc2VtYW50aWNzIG1hdGNoIHRoZSBleGlzdGlu ZyBjYXN0IHBhdGg6IGEgbWlzc2luZyBrZXkgb3IgYSBKU09OCisgKiBudWxsIHZhbHVlIGJvdGgg cHJvZHVjZSBTUUwgTlVMTDsgYSB0eXBlIG1pc21hdGNoIHJhaXNlcyBFUlJPUi4KKyAqLworCisv KgorICogTG9vayB1cCBhIGtleSBpbiBhIGpzb25iIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBKc29u YlZhbHVlLCBvciBOVUxMLgorICogUmV0dXJucyBOVUxMICh3aXRob3V0IGVycm9yKSB3aGVuIHRo ZSBpbnB1dCBpcyBub3QgYW4gb2JqZWN0LCB0aGUga2V5CisgKiBpcyBhYnNlbnQsIG9yIHRoZSB2 YWx1ZSBpcyBKU09OIG51bGwuCisgKi8KK3N0YXRpYyBKc29uYlZhbHVlICoKK2pzb25iX29iamVj dF9maWVsZF9sb29rdXAoSnNvbmIgKmpiLCB0ZXh0ICprZXksIEpzb25iVmFsdWUgKnZidWYpCit7 CisJSnNvbmJWYWx1ZSAqdjsKKworCWlmICghSkJfUk9PVF9JU19PQkpFQ1QoamIpKQorCQlyZXR1 cm4gTlVMTDsKKworCXYgPSBnZXRLZXlKc29uVmFsdWVGcm9tQ29udGFpbmVyKCZqYi0+cm9vdCwK KwkJCQkJCQkJCSBWQVJEQVRBX0FOWShrZXkpLAorCQkJCQkJCQkJIFZBUlNJWkVfQU5ZX0VYSERS KGtleSksCisJCQkJCQkJCQkgdmJ1Zik7CisKKwkvKiBNaXNzaW5nIGtleSBvciBKU09OIG51bGwg Ym90aCBtYXAgdG8gU1FMIE5VTEwgKi8KKwlpZiAodiA9PSBOVUxMIHx8IHYtPnR5cGUgPT0gamJ2 TnVsbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdjsKK30KKworLyoKKyAqIFJhaXNlIGEg dHlwZS1taXNtYXRjaCBlcnJvciBmb3IgdHlwZWQgZmllbGQgZXh0cmFjdGlvbi4KKyAqCisgKiBU aGUgbWVzc2FnZSB3b3JkaW5nIG1hdGNoZXMgY2Fubm90Q2FzdEpzb25iVmFsdWUoKSBpbiBqc29u Yi5jIHNvIHRoYXQKKyAqIHRoZSBvcHRpbWl6ZWQgYW5kIHVub3B0aW1pemVkIHBhdGhzIHByb2R1 Y2UgaWRlbnRpY2FsIGVycm9ycy4KKyAqLworc3RhdGljIHZvaWQKK2pzb25iX2ZpZWxkX2Nhc3Rf ZXJyb3IoSnNvbmJWYWx1ZSAqdiwgY29uc3QgY2hhciAqc3FsdHlwZSkKK3sKKwljb25zdCBjaGFy ICpqc29udHlwZTsKKworCXN3aXRjaCAodi0+dHlwZSkKKwl7CisJCWNhc2UgamJ2TnVsbDoKKwkJ CWpzb250eXBlID0gIm51bGwiOworCQkJYnJlYWs7CisJCWNhc2UgamJ2U3RyaW5nOgorCQkJanNv bnR5cGUgPSAic3RyaW5nIjsKKwkJCWJyZWFrOworCQljYXNlIGpidk51bWVyaWM6CisJCQlqc29u dHlwZSA9ICJudW1lcmljIjsKKwkJCWJyZWFrOworCQljYXNlIGpidkJvb2w6CisJCQlqc29udHlw ZSA9ICJib29sZWFuIjsKKwkJCWJyZWFrOworCQljYXNlIGpidkFycmF5OgorCQkJanNvbnR5cGUg PSAiYXJyYXkiOworCQkJYnJlYWs7CisJCWNhc2UgamJ2T2JqZWN0OgorCQkJanNvbnR5cGUgPSAi b2JqZWN0IjsKKwkJCWJyZWFrOworCQljYXNlIGpidkJpbmFyeToKKwkJCWpzb250eXBlID0gImFy cmF5IG9yIG9iamVjdCI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bmtub3duIGpzb25iIHR5cGU6ICVkIiwgKGludCkgdi0+dHlwZSk7CisJCQlqc29udHlwZSA9IE5V TEw7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwl9CisKKwllcmVwb3J0KEVSUk9SLAorCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkgZXJybXNnKCJj YW5ub3QgY2FzdCBqc29uYiAlcyB0byB0eXBlICVzIiwKKwkJCQkJanNvbnR5cGUsIHNxbHR5cGUp KSk7Cit9CisKKy8qCisgKiBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYyAtIGV4dHJhY3QgYSBu dW1lcmljIHZhbHVlIGZyb20gYSBqc29uYiBvYmplY3QKKyAqIGJ5IGZpZWxkIG5hbWUuICBSZXR1 cm5zIE5VTEwgZm9yIG1pc3Npbmcga2V5cyBhbmQgSlNPTiBudWxscy4KKyAqLworRGF0dW0KK2pz b25iX29iamVjdF9maWVsZF9udW1lcmljKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSnNvbmIJICAg KmpiID0gUEdfR0VUQVJHX0pTT05CX1AoMCk7CisJdGV4dAkgICAqa2V5ID0gUEdfR0VUQVJHX1RF WFRfUFAoMSk7CisJSnNvbmJWYWx1ZQl2YnVmOworCUpzb25iVmFsdWUgKnY7CisJTnVtZXJpYwkJ cmV0VmFsdWU7CisKKwl2ID0ganNvbmJfb2JqZWN0X2ZpZWxkX2xvb2t1cChqYiwga2V5LCAmdmJ1 Zik7CisJaWYgKHYgPT0gTlVMTCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCWlmICh2LT50eXBl ICE9IGpidk51bWVyaWMpCisJCWpzb25iX2ZpZWxkX2Nhc3RfZXJyb3IodiwgIm51bWVyaWMiKTsK KworCXJldFZhbHVlID0gRGF0dW1HZXROdW1lcmljQ29weShOdW1lcmljR2V0RGF0dW0odi0+dmFs Lm51bWVyaWMpKTsKKworCVBHX0ZSRUVfSUZfQ09QWShqYiwgMCk7CisJUEdfUkVUVVJOX05VTUVS SUMocmV0VmFsdWUpOworfQorCisvKgorICoganNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2wgLSBleHRy YWN0IGEgYm9vbGVhbiB2YWx1ZSBmcm9tIGEganNvbmIgb2JqZWN0CisgKiBieSBmaWVsZCBuYW1l LiAgUmV0dXJucyBOVUxMIGZvciBtaXNzaW5nIGtleXMgYW5kIEpTT04gbnVsbHMuCisgKi8KK0Rh dHVtCitqc29uYl9vYmplY3RfZmllbGRfYm9vbChQR19GVU5DVElPTl9BUkdTKQoreworCUpzb25i CSAgICpqYiA9IFBHX0dFVEFSR19KU09OQl9QKDApOworCXRleHQJICAgKmtleSA9IFBHX0dFVEFS R19URVhUX1BQKDEpOworCUpzb25iVmFsdWUJdmJ1ZjsKKwlKc29uYlZhbHVlICp2OworCisJdiA9 IGpzb25iX29iamVjdF9maWVsZF9sb29rdXAoamIsIGtleSwgJnZidWYpOworCWlmICh2ID09IE5V TEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlpZiAodi0+dHlwZSAhPSBqYnZCb29sKQorCQlq c29uYl9maWVsZF9jYXN0X2Vycm9yKHYsICJib29sZWFuIik7CisKKwlQR19GUkVFX0lGX0NPUFko amIsIDApOworCVBHX1JFVFVSTl9CT09MKHYtPnZhbC5ib29sZWFuKTsKK30KKwogRGF0dW0KIGpz b25fYXJyYXlfZWxlbWVudChQR19GVU5DVElPTl9BUkdTKQogewpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKaW5kZXggM2VhMTdmYzU2MjkuLmE2MDhmN2EyMzU3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKQEAgLTQ3OTgsMTAgKzQ3OTgsMTAgQEAKICAgcHJvc3JjID0+ICdudW1lcmljX3BnX2xzbicg fSwKIAogeyBvaWQgPT4gJzM1NTYnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBib29sZWFu JywKLSAgcHJvbmFtZSA9PiAnYm9vbCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBl cyA9PiAnanNvbmInLAorICBwcm9uYW1lID0+ICdib29sJywgcHJvc3VwcG9ydCA9PiAnanNvbmJf Y2FzdF9zdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdqc29u YicsCiAgIHByb3NyYyA9PiAnanNvbmJfYm9vbCcgfSwKIHsgb2lkID0+ICczNDQ5JywgZGVzY3Ig PT4gJ2NvbnZlcnQganNvbmIgdG8gbnVtZXJpYycsCi0gIHByb25hbWUgPT4gJ251bWVyaWMnLCBw cm9yZXR0eXBlID0+ICdudW1lcmljJywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKKyAgcHJvbmFt ZSA9PiAnbnVtZXJpYycsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsIHByb3Jl dHR5cGUgPT4gJ251bWVyaWMnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4g J2pzb25iX251bWVyaWMnIH0sCiB7IG9pZCA9PiAnMzQ1MCcsIGRlc2NyID0+ICdjb252ZXJ0IGpz b25iIHRvIGludDInLAogICBwcm9uYW1lID0+ICdpbnQyJywgcHJvcmV0dHlwZSA9PiAnaW50Mics IHByb2FyZ3R5cGVzID0+ICdqc29uYicsCkBAIC0xMjkxMiw0ICsxMjkxMiwxOCBAQAogICBwcm9u YW1lID0+ICdoYXNob2lkOGV4dGVuZGVkJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsCiAgIHByb2Fy Z3R5cGVzID0+ICdvaWQ4IGludDgnLCBwcm9zcmMgPT4gJ2hhc2hvaWQ4ZXh0ZW5kZWQnIH0sCiAK KworIyBqc29uYiBjYXN0IG9wdGltaXphdGlvbiBzdXBwb3J0IGZ1bmN0aW9ucworeyBvaWQgPT4g Jzk5NTAnLCBkZXNjciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciBqc29uYiBjYXN0cycsCisgIHBy b25hbWUgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywK KyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICdqc29uYl9jYXN0X3N1cHBv cnQnIH0sCit7IG9pZCA9PiAnOTk1MycsIGRlc2NyID0+ICdleHRyYWN0IG51bWVyaWMgZnJvbSBq c29uYiBvYmplY3QgYnkgZmllbGQgbmFtZScsCisgIHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9m aWVsZF9udW1lcmljJywgcHJvcmV0dHlwZSA9PiAnbnVtZXJpYycsCisgIHByb2FyZ3R5cGVzID0+ ICdqc29uYiB0ZXh0JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24sZmllbGRfbmFtZX0nLAor ICBwcm9zcmMgPT4gJ2pzb25iX29iamVjdF9maWVsZF9udW1lcmljJyB9LAoreyBvaWQgPT4gJzk5 NTQnLCBkZXNjciA9PiAnZXh0cmFjdCBib29sZWFuIGZyb20ganNvbmIgb2JqZWN0IGJ5IGZpZWxk IG5hbWUnLAorICBwcm9uYW1lID0+ICdqc29uYl9vYmplY3RfZmllbGRfYm9vbCcsIHByb3JldHR5 cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAnanNvbmIgdGV4dCcsIHByb2FyZ25hbWVz ID0+ICd7ZnJvbV9qc29uLGZpZWxkX25hbWV9JywKKyAgcHJvc3JjID0+ICdqc29uYl9vYmplY3Rf ZmllbGRfYm9vbCcgfSwKKwogXQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uYi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dAppbmRleCA0 ZTI0Njc4NTJkYi4uMTFmOWNjY2I2NDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvanNvbmIub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0 CkBAIC00NTgsNyArNDU4LDIwNyBAQCBDUkVBVEUgVEVNUCBUQUJMRSB0ZXN0X2pzb25iICgKIElO U0VSVCBJTlRPIHRlc3RfanNvbmIgVkFMVUVTCiAoJ3NjYWxhcicsJyJhIHNjYWxhciInKSwKICgn YXJyYXknLCdbInplcm8iLCAib25lIiwidHdvIixudWxsLCJmb3VyIiwiZml2ZSIsIFsxLDIsM10s eyJmMSI6OX1dJyksCi0oJ29iamVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIi LCJmaWVsZDMiOm51bGwsICJmaWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6 IHsiZjEiOjl9fScpOworKCdvYmplY3QnLCd7ImZpZWxkMSI6InZhbDEiLCJmaWVsZDIiOiJ2YWwy IiwiZmllbGQzIjpudWxsLCAiZmllbGQ0IjogNCwgImZpZWxkNSI6IFsxLDIsM10sICJmaWVsZDYi OiB7ImYxIjo5fSwgImZpZWxkNyI6IHRydWV9Jyk7CistLSBPcHRpbWl6ZWQgdHlwZWQgZXh0cmFj dGlvbjogdGhlIHBsYW5uZXIgcmV3cml0ZXMgKGotPidrZXknKTo6dHlwZSBpbnRvIGEKKy0tIGRp cmVjdCB0eXBlZCBleHRyYWN0b3IgY2FsbCwgY3VycmVudGx5IGZvciBudW1lcmljIGFuZCBib29s IG9ubHkuCistLSBTZWN0aW9uIDE6IHBsYW5uZXIgcmV3cml0ZSB2ZXJpZmljYXRpb24gKHJld3Jp dHRlbiB0YXJnZXRzKQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3Rf anNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50 ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKHRlc3RfanNv biwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdv YmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBT RUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ3Jyk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJF IGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVt cC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25iX29iamVjdF9maWVsZF9ib29sKHRlc3RfanNv biwgJ2ZpZWxkNyc6OnRleHQpCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdv YmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworLS0gU2VjdGlvbiAxYjogcGxhbm5lciByZXdyaXRl IHZlcmlmaWNhdGlvbiBmb3Igc3Vic2NyaXB0aW5nIHN5bnRheAorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10pOjpudW1lcmljIEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFNlcSBTY2FuIG9uIHBnX3RlbXAudGVzdF9qc29uYgorICAgT3V0cHV0OiBqc29uYl9vYmplY3Rf ZmllbGRfbnVtZXJpYyh0ZXN0X2pzb24sICdmaWVsZDQnOjp0ZXh0KQorICAgRmlsdGVyOiAodGVz dF9qc29uYi5qc29uX3R5cGUgPSAnb2JqZWN0Jzo6dGV4dCkKKygzIHJvd3MpCisKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkNyddKTo6Ym9vbCBG Uk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1dDoganNvbmJfb2JqZWN0 X2ZpZWxkX2Jvb2wodGVzdF9qc29uLCAnZmllbGQ3Jzo6dGV4dCkKKyAgIEZpbHRlcjogKHRlc3Rf anNvbmIuanNvbl90eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dzKQorCistLSBWZXJpZnkg dGhhdCB1bnN1cHBvcnRlZCBjYXN0IHRhcmdldHMgYXJlIE5PVCByZXdyaXR0ZW4gYnkgdGhpcyBw YXRjaC4KKy0tIEludGVnZXIgYW5kIGZsb2F0IGNhc3RzIHJlbWFpbiBvbiB0aGUgb3JpZ2luYWwg anNvbmJfb2JqZWN0X2ZpZWxkICsgY2FzdCBwYXRoLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmludDQgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBnX3RlbXAudGVzdF9qc29uYgor ICAgT3V0cHV0OiAoKHRlc3RfanNvbiAtPiAnZmllbGQ0Jzo6dGV4dCkpOjppbnRlZ2VyCisgICBG aWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykK KworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmll bGQ0Jyk6OmludDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOwor ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2Nh biBvbiBwZ190ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1dDogKCh0ZXN0X2pzb24gLT4gJ2ZpZWxk NCc6OnRleHQpKTo6YmlnaW50CisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdv YmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBT RUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hF UkUganNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVt cC50ZXN0X2pzb25iCisgICBPdXRwdXQ6ICgodGVzdF9qc29uIC0+ICdmaWVsZDQnOjp0ZXh0KSk6 OmRvdWJsZSBwcmVjaXNpb24KKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29i amVjdCc6OnRleHQpCisoMyByb3dzKQorCistLSBTZWN0aW9uIDI6IGNvcnJlY3QgZXhlY3V0aW9u IHRocm91Z2ggdGhlIHJld3JpdHRlbiBwYXRoCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0 Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOwor IG51bWVyaWMgCistLS0tLS0tLS0KKyAgICAgICA0CisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9q c29uIC0+ICdmaWVsZDcnKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0g J29iamVjdCc7CisgYm9vbCAKKy0tLS0tLQorIHQKKygxIHJvdykKKworLS0gU2VjdGlvbiAyYjog Y29ycmVjdCBleGVjdXRpb24gdGhyb3VnaCBzdWJzY3JpcHRpbmcgc3ludGF4CitTRUxFQ1QgKHRl c3RfanNvblsnZmllbGQ0J10pOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsKKyB0ZXN0X2pzb24gCistLS0tLS0tLS0tLQorICAgICAgICAgNAorKDEg cm93KQorCitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ3J10pOjpib29sIEZST00gdGVzdF9qc29u YiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyB0ZXN0X2pzb24gCistLS0tLS0tLS0tLQor IHQKKygxIHJvdykKKworLS0gVW5zdXBwb3J0ZWQgdGFyZ2V0cyBzdGlsbCB3b3JrIGNvcnJlY3Rs eSB0aHJvdWdoIHRoZSBvcmlnaW5hbCBwYXRoCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0 Jyk6OmludDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworIGlu dDQgCistLS0tLS0KKyAgICA0CisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVs ZDQnKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsK KyBmbG9hdDggCistLS0tLS0tLQorICAgICAgNAorKDEgcm93KQorCistLSBTZWN0aW9uIDM6IE5V TEwgc2VtYW50aWNzIChtaXNzaW5nIGtleSwgSlNPTiBudWxsLCBub24tb2JqZWN0IGlucHV0KQor U0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMycpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBX SEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIEpTT04gbnVsbAorIG51bWVyaWMgCistLS0t LS0tLS0KKyAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdub25leGlz dGVudCcpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0 JzsgIC0tIG1pc3Npbmcga2V5CisgbnVtZXJpYyAKKy0tLS0tLS0tLQorICAgICAgICAKKygxIHJv dykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ3gnKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIg V0hFUkUganNvbl90eXBlID0gJ2FycmF5JzsgIC0tIG5vbi1vYmplY3QKKyBudW1lcmljIAorLS0t LS0tLS0tCisgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQz Jyk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0g SlNPTiBudWxsLCBib29sIHBhdGgKKyBib29sIAorLS0tLS0tCisgCisoMSByb3cpCisKKy0tIFNl Y3Rpb24gM2I6IE5VTEwgc2VtYW50aWNzIHRocm91Z2ggc3Vic2NyaXB0aW5nIHN5bnRheAorU0VM RUNUICh0ZXN0X2pzb25bJ2ZpZWxkMyddKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUg anNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBKU09OIG51bGwKKyB0ZXN0X2pzb24gCistLS0tLS0t LS0tLQorICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvblsnbm9uZXhpc3Rl bnQnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3Qn OyAgLS0gbWlzc2luZyBrZXkKKyB0ZXN0X2pzb24gCistLS0tLS0tLS0tLQorICAgICAgICAgIAor KDEgcm93KQorCistLSBTZWN0aW9uIDQ6IHR5cGUtbWlzbWF0Y2ggZXJyb3JzIChzY2FsYXIgYW5k IGNvbnRhaW5lciB0eXBlcykKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6bnVtZXJp YyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJpbmcg dG8gbnVtZXJpYworRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBudW1l cmljCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQxJyk6OmJvb2wgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gc3RyaW5nIHRvIGJvb2wKK0VSUk9SOiAg Y2Fubm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5cGUgYm9vbGVhbgorU0VMRUNUICh0ZXN0X2pz b24gLT4gJ2ZpZWxkNScpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUg PSAnb2JqZWN0JzsgIC0tIGFycmF5IHRvIG51bWVyaWMKK0VSUk9SOiAgY2Fubm90IGNhc3QganNv bmIgYXJyYXkgb3Igb2JqZWN0IHRvIHR5cGUgbnVtZXJpYworLS0gU2VjdGlvbiA0YjogdHlwZS1t aXNtYXRjaCBlcnJvciB0aHJvdWdoIHN1YnNjcmlwdGluZyBzeW50YXgKK1NFTEVDVCAodGVzdF9q c29uWydmaWVsZDEnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9 ICdvYmplY3QnOyAgLS0gc3RyaW5nIHRvIG51bWVyaWMKK0VSUk9SOiAgY2Fubm90IGNhc3QganNv bmIgc3RyaW5nIHRvIHR5cGUgbnVtZXJpYworLS0gU2VjdGlvbiA1OiBkaXJlY3QgY2FsbHMgdG8g dHlwZWQgZXh0cmFjdG9yIGJ1aWx0aW5zCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVy aWMoJ3siYSI6IDF9Jzo6anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAg IDEKKygxIHJvdykKKworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiAz LjE0fSc6Ompzb25iLCAnYScpOworIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAzLjE0CisoMSBy b3cpCisKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfYm9vbCgneyJhIjogdHJ1ZX0nOjpqc29u YiwgJ2EnKTsKKyBqc29uYl9vYmplY3RfZmllbGRfYm9vbCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfYm9vbCgneyJh IjogZmFsc2V9Jzo6anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2wgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCistLSBkaXJlY3QgY2FsbHM6IE5V TEwgc2VtYW50aWNzCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6IDF9 Jzo6anNvbmIsICdtaXNzaW5nJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAKKygx IHJvdykKKworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiBudWxsfSc6 Ompzb25iLCAnYScpOworIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisK K1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfYm9vbCgneyJhIjogdHJ1ZX0nOjpqc29uYiwgJ21p c3NpbmcnKTsKKyBqc29uYl9vYmplY3RfZmllbGRfYm9vbCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworLS0gZGlyZWN0IGNhbGxzOiB0eXBlLW1pc21hdGNoIGVycm9y cworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiAidGV4dCJ9Jzo6anNv bmIsICdhJyk7CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0eXBlIG51bWVy aWMKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfYm9vbCgneyJhIjogMX0nOjpqc29uYiwgJ2En KTsKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgbnVtZXJpYyB0byB0eXBlIGJvb2xlYW4KK1NF TEVDVCBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYygneyJhIjogeyJ4IjoxfX0nOjpqc29uYiwg J2EnKTsgIC0tIGNvbnRhaW5lciB0byBzY2FsYXIKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIg YXJyYXkgb3Igb2JqZWN0IHRvIHR5cGUgbnVtZXJpYwogU0VMRUNUIHRlc3RfanNvbiAtPiAneCcg RlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXInOwogID9jb2x1bW4/IAog LS0tLS0tLS0tLQpAQCAtNTg2LDcgKzc4Niw4IEBAIFNFTEVDVCBqc29uYl9vYmplY3Rfa2V5cyh0 ZXN0X2pzb24pIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKICBm aWVsZDQKICBmaWVsZDUKICBmaWVsZDYKLSg2IHJvd3MpCisgZmllbGQ3CisoNyByb3dzKQogCiAt LSBudWxscwogU0VMRUNUICh0ZXN0X2pzb24tPidmaWVsZDMnKSBJUyBOVUxMIEFTIGV4cGVjdF9m YWxzZSBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9qc29uYi5zcWwKaW5kZXggZDI4ZWQxYzFlODUuLjA5ODM2YmNhMGE5IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv anNvbmIuc3FsCkBAIC0xNTUsNyArMTU1LDY4IEBAIENSRUFURSBURU1QIFRBQkxFIHRlc3RfanNv bmIgKAogSU5TRVJUIElOVE8gdGVzdF9qc29uYiBWQUxVRVMKICgnc2NhbGFyJywnImEgc2NhbGFy IicpLAogKCdhcnJheScsJ1siemVybyIsICJvbmUiLCJ0d28iLG51bGwsImZvdXIiLCJmaXZlIiwg WzEsMiwzXSx7ImYxIjo5fV0nKSwKLSgnb2JqZWN0JywneyJmaWVsZDEiOiJ2YWwxIiwiZmllbGQy IjoidmFsMiIsImZpZWxkMyI6bnVsbCwgImZpZWxkNCI6IDQsICJmaWVsZDUiOiBbMSwyLDNdLCAi ZmllbGQ2IjogeyJmMSI6OX19Jyk7CisoJ29iamVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxk MiI6InZhbDIiLCJmaWVsZDMiOm51bGwsICJmaWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwg ImZpZWxkNiI6IHsiZjEiOjl9LCAiZmllbGQ3IjogdHJ1ZX0nKTsKKworLS0gT3B0aW1pemVkIHR5 cGVkIGV4dHJhY3Rpb246IHRoZSBwbGFubmVyIHJld3JpdGVzIChqLT4na2V5Jyk6OnR5cGUgaW50 byBhCistLSBkaXJlY3QgdHlwZWQgZXh0cmFjdG9yIGNhbGwsIGN1cnJlbnRseSBmb3IgbnVtZXJp YyBhbmQgYm9vbCBvbmx5LgorCistLSBTZWN0aW9uIDE6IHBsYW5uZXIgcmV3cml0ZSB2ZXJpZmlj YXRpb24gKHJld3JpdHRlbiB0YXJnZXRzKQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBT RUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdI RVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBT RUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ3Jyk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJF IGpzb25fdHlwZSA9ICdvYmplY3QnOworCistLSBTZWN0aW9uIDFiOiBwbGFubmVyIHJld3JpdGUg dmVyaWZpY2F0aW9uIGZvciBzdWJzY3JpcHRpbmcgc3ludGF4CitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpIFNFTEVDVCAodGVzdF9qc29uWydmaWVsZDQnXSk6Om51bWVyaWMgRlJPTSB0ZXN0 X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ3J10pOjpib29sIEZST00gdGVzdF9qc29u YiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKworLS0gVmVyaWZ5IHRoYXQgdW5zdXBwb3J0 ZWQgY2FzdCB0YXJnZXRzIGFyZSBOT1QgcmV3cml0dGVuIGJ5IHRoaXMgcGF0Y2guCistLSBJbnRl Z2VyIGFuZCBmbG9hdCBjYXN0cyByZW1haW4gb24gdGhlIG9yaWdpbmFsIGpzb25iX29iamVjdF9m aWVsZCArIGNhc3QgcGF0aC4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0 ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUg PSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0X2pz b24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9 ICdvYmplY3QnOworCistLSBTZWN0aW9uIDI6IGNvcnJlY3QgZXhlY3V0aW9uIHRocm91Z2ggdGhl IHJld3JpdHRlbiBwYXRoCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMg RlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworU0VMRUNUICh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNycpOjpib29sIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUg PSAnb2JqZWN0JzsKKworLS0gU2VjdGlvbiAyYjogY29ycmVjdCBleGVjdXRpb24gdGhyb3VnaCBz dWJzY3JpcHRpbmcgc3ludGF4CitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10pOjpudW1lcmlj IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK1NFTEVDVCAodGVz dF9qc29uWydmaWVsZDcnXSk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9 ICdvYmplY3QnOworCistLSBVbnN1cHBvcnRlZCB0YXJnZXRzIHN0aWxsIHdvcmsgY29ycmVjdGx5 IHRocm91Z2ggdGhlIG9yaWdpbmFsIHBhdGgKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDQn KTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CitTRUxF Q1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUg anNvbl90eXBlID0gJ29iamVjdCc7CisKKy0tIFNlY3Rpb24gMzogTlVMTCBzZW1hbnRpY3MgKG1p c3Npbmcga2V5LCBKU09OIG51bGwsIG5vbi1vYmplY3QgaW5wdXQpCitTRUxFQ1QgKHRlc3RfanNv biAtPiAnZmllbGQzJyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9 ICdvYmplY3QnOyAgLS0gSlNPTiBudWxsCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnbm9uZXhpc3Rl bnQnKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7 ICAtLSBtaXNzaW5nIGtleQorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ3gnKTo6bnVtZXJpYyBGUk9N IHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ2FycmF5JzsgIC0tIG5vbi1vYmplY3QKK1NF TEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDMnKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUg anNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBKU09OIG51bGwsIGJvb2wgcGF0aAorCistLSBTZWN0 aW9uIDNiOiBOVUxMIHNlbWFudGljcyB0aHJvdWdoIHN1YnNjcmlwdGluZyBzeW50YXgKK1NFTEVD VCAodGVzdF9qc29uWydmaWVsZDMnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpz b25fdHlwZSA9ICdvYmplY3QnOyAgLS0gSlNPTiBudWxsCitTRUxFQ1QgKHRlc3RfanNvblsnbm9u ZXhpc3RlbnQnXSk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdv YmplY3QnOyAgLS0gbWlzc2luZyBrZXkKKworLS0gU2VjdGlvbiA0OiB0eXBlLW1pc21hdGNoIGVy cm9ycyAoc2NhbGFyIGFuZCBjb250YWluZXIgdHlwZXMpCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAn ZmllbGQxJyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmpl Y3QnOyAgLS0gc3RyaW5nIHRvIG51bWVyaWMKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEn KTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBz dHJpbmcgdG8gYm9vbAorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNScpOjpudW1lcmljIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIGFycmF5IHRvIG51 bWVyaWMKKworLS0gU2VjdGlvbiA0YjogdHlwZS1taXNtYXRjaCBlcnJvciB0aHJvdWdoIHN1YnNj cmlwdGluZyBzeW50YXgKK1NFTEVDVCAodGVzdF9qc29uWydmaWVsZDEnXSk6Om51bWVyaWMgRlJP TSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gc3RyaW5nIHRvIG51 bWVyaWMKKworLS0gU2VjdGlvbiA1OiBkaXJlY3QgY2FsbHMgdG8gdHlwZWQgZXh0cmFjdG9yIGJ1 aWx0aW5zCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6IDF9Jzo6anNv bmIsICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6IDMuMTR9 Jzo6anNvbmIsICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2woJ3siYSI6IHRy dWV9Jzo6anNvbmIsICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2woJ3siYSI6 IGZhbHNlfSc6Ompzb25iLCAnYScpOworLS0gZGlyZWN0IGNhbGxzOiBOVUxMIHNlbWFudGljcwor U0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiAxfSc6Ompzb25iLCAnbWlz c2luZycpOworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiBudWxsfSc6 Ompzb25iLCAnYScpOworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9ib29sKCd7ImEiOiB0cnVl fSc6Ompzb25iLCAnbWlzc2luZycpOworLS0gZGlyZWN0IGNhbGxzOiB0eXBlLW1pc21hdGNoIGVy cm9ycworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiAidGV4dCJ9Jzo6 anNvbmIsICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2woJ3siYSI6IDF9Jzo6 anNvbmIsICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6IHsi eCI6MX19Jzo6anNvbmIsICdhJyk7ICAtLSBjb250YWluZXIgdG8gc2NhbGFyCiAKIFNFTEVDVCB0 ZXN0X2pzb24gLT4gJ3gnIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFy JzsKIFNFTEVDVCB0ZXN0X2pzb24gLT4gJ3gnIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnYXJyYXknOwotLSAKMi41Mi4wCgo= --0000000000002dabdc064ed00d66--