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 1w9ooc-001mnk-2Q for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 18:36:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9onc-00BHse-0o for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 18:35:48 +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 1w9onb-00BHsW-1v for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 18:35:48 +0000 Received: from mail-yx1-xb12b.google.com ([2607:f8b0:4864:20::b12b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9onZ-00000000tlR-43Ly for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 18:35:47 +0000 Received: by mail-yx1-xb12b.google.com with SMTP id 956f58d0204a3-64eb84d1e37so3274229d50.2 for ; Mon, 06 Apr 2026 11:35:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775500544; cv=none; d=google.com; s=arc-20240605; b=Wo+kaNrWer6UAWcS4VgOfgAhI3H8iAULZa6cANemO+ANVOZRaCDxBtdVZci4WfBEzt MXjZttw1yIJk6gKULMKqS1QNSbcHgkceI58bzQ3/hNVTiVUU4fhmOOK84RoVqru2+2Wv Lt+4y9rvXEN83pddsUVRQJUXr656LeUsc6FPDv7knhDvdLoTJ+0y1Mz2rP17N+NxV18b OHgkt2Jb8YKIMw+7oM/9tVk9OX5bwbBcOHecLszC8zlMHxJAdDQWw+zGND3BkAEigE3d R+1IVh8MITegENFkUkcTTDUII/8t62nwwKHngdCiKreSC8xlWw0N7SiyCIAdse8D0kQX zEBQ== 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=WVHG1nZvpmhsU4LNUJtOHXv1Yby/3Wqh1atTVX97cWU=; fh=0h8qOvadzhfox7FaLubM6RCk62eukN4Vy2rivKoKgEc=; b=QmFz9Ur1H0tZzW4MZ/dxO5O7LrwbtKTOpNJUjPUoh6jR7m9lTFdKkI4pGd8cYeSUHo y/BG7dS471sv9tDWCzFomkG/NWw9ogwkL31KC7TEzvsnF45UdcK0x9iyc0k8RbIOg4VA I0gyKTgZXttKGg3IuZgB4cfDe9y7HKR8QrVWedf7SmmN+8JUkvJeKLDjnQiilHaRogtL po1LmT0hlGgjHvlt9KingMoCMUnkN92d4WMCM6URpwsPY4LvVKt5dJ9p5YJhNT7NLP7w nn4aUGDGWic7IXxlq++4XfVoAipbFBe8nToGSaH6XnE/rU+3BPgokzTZXhO+V4MlIg7P ouvw==; 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=1775500544; x=1776105344; 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=WVHG1nZvpmhsU4LNUJtOHXv1Yby/3Wqh1atTVX97cWU=; b=CsRMaSG61jXKuGmADYQUN3elnGu56oL177W6sIDamZsegwAvuM5+7AvURkjBNlrjGW dA3B9Ch6IjjBPceF0FWOmDyeS2IWVA+p3U+NfYsLPiQLR8HXjtX9uh9901jfWe6nKps5 arzJwQcXjVZeex65fSnvZLP6ddjDGvprkeuqaLw8yyn36WpnFRteZgKqvXttUJZMmdhZ 6qg5Vn2ETXCQR4B7Up7d/7Pi2uITh2Xd54jiLDvEG04L30sV063M06EmV85ksk0Cr0hC 6NcFxwIhR7zdls23ZAKyHMxetXJ0SU9XAQDnijSfiH3VFgxJbpjkKWKl6OP+MIE6jH4O K9pA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775500544; x=1776105344; 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=WVHG1nZvpmhsU4LNUJtOHXv1Yby/3Wqh1atTVX97cWU=; b=pNBAPnqm/RoCUo6HngEzvMCCX7ICjDzLS5AKXCyMyBtksis1812Vi9Hl9o2LKWsBJc IZd8DFvRHH1FhzSUR5d/n0yU1QyWep1+tWYui+feBhAqostslbfnzI6uJMWdBzkrwPXx uPmnaSzDwH5p16aKcPiaB6REDMCM7MqnGsE2ZxvZi1wqlNRDuHI9BQfBcKoQP6pZ42vA VsQqNPTWPUcCHIIbQNEGAKG8VOG0gwFSdn25cHQJxdM2pER62agXEpn62Suq++IIaoY+ dhawmMGC34tTMqeOT/yZdV7+31kczGAJKrltKZXQQtqHk6Uo++1uLcxcdqVZn16OJBPn YJxQ== X-Forwarded-Encrypted: i=1; AJvYcCUXveUgoMYpm/GLVs4RUfYRAvqIIxutOcz1lOhEeiSs7k7z6Q9aHq/gsE8NEZqiDzyQavSFLu1H7njS9p0T@lists.postgresql.org X-Gm-Message-State: AOJu0YykR5aXrr2iXaqWEWeWGnWu58fu1wA+Jd4XefTs0/ULYrM542d0 /9r5Bd+ycCqkH7ejswgkXxJ6nvB6f/6Q6L1tnp0ecxKSOGjxoCbxjJaiDpG9nKSW3xIIa9P+26Y R6gKzQJcJh7lE3xRmAiFrCDA8LfYyFnI= X-Gm-Gg: AeBDievHklvd9ocoTHk2B59AnsHDU8UAaeP3oLN1K75eN4cLb+CJ6LvwlfZC0PsCs7S vCWs/cua2NHC3V/jDELCZme4zCfKCkXIOIF70jo6FxZcaVdgjldD+CTYQP41+mdH3YU9VmuPVnW QiaxkOcNx+N7w1i8LPSACZqRaz/zpiQEy5JKQC32ApgiUbdiFbEiYGOxDmahhDI7BtjMELNO8YD Hc12h0f92KiP/P1twdh3a+JX8+BMDqXMym8DwZAayqqSL05GBOIxzMCzHsSKWZ+Jht6WrAmaNYo FkXeG+gPgsR/k+sEzNY+Y8cYSTTELN/fClyJZqhHMHyoE677RQ== X-Received: by 2002:a05:690e:4397:b0:64c:b81d:2cb7 with SMTP id 956f58d0204a3-6504881bc03mr8762277d50.39.1775500544379; Mon, 06 Apr 2026 11:35:44 -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 11:35:32 -0700 X-Gm-Features: AQROBzDXJoREtP3gPHq_XA5HaOoTRbBBYu6OFlEThCF5ymGnlRXwgD3HAgE37JA 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="0000000000003f46d5064eceef45" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003f46d5064eceef45 Content-Type: multipart/alternative; boundary="0000000000003f46d4064eceef43" --0000000000003f46d4064eceef43 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 6, 2026 at 10:57=E2=80=AFAM Haibo Yan w= rote: > > > On Apr 6, 2026, at 10:51=E2=80=AFAM, Haibo Yan wr= ote: > > > 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 b= e > 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=99= m > 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 loc= ally that the attachment was included, but I can=E2=80=99t see it in the mail th= read. I=E2=80=99m now trying to resend it using a different mail client. Hopefull= y this won=E2=80=99t cause too much disruption for everyone. Haibo --0000000000003f46d4064eceef43 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


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 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 old= er attachment there. But cfbot appears to have picked up mine, so I think i= t 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 extracti= on expression.=C2=A0 It may appear as
+ * either a FuncEx= pr or an OpExpr; accept both forms.
+ */
+ if (IsA(arg, FuncExpr))
+ {
+ FuncExpr =C2=A0=C2=A0*inner =3D (Func= Expr *) arg;
+
+ = inner_funcid =3D inner->funcid;
+ inner_args =3D inner->args;
+ <= /span> location =3D inner->l= ocation;
+ }
+ else if (IsA(arg, OpExpr))=
+ {
+
OpExpr =C2=A0=C2=A0= *inner =3D (OpExpr *) arg;
+
+ <= /span> inner_funcid =3D inner->opfuncid;
+ inner_args =3D inner->a= rgs;
+ locati= on =3D inner->location;
+ }
+ else
= + PG_RETURN_POIN= TER(NULL);

It may also appear as a SubscriptingRef expr= ession if we use subscription over
jsonb.

SELECT test_json['field7']::bool FROM test_js= onb 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 Dmit= ry

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

It stays within the same stage-1 scope, co= vers an equivalent object-field extraction form, and does not introduce any= additional interface surface. Based on your suggestion, I updated the patc= h to recognize the=C2=A0SubscriptingRefrepresentation as well,= so cases like:

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

test_j= son['field7']::bool

test_json['field4&= #39;]::numeric

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

= can follow the same rewrite path as the existing=C2=A0jsonb_object_fi= eld(...)=C2=A0/=C2=A0->=C2=A0cases.

Please see= the updated patch:


<v2-0001-jsonb-optimi= ze-object-field-casts-to-numeric-and-.patch>

Thanks again for the review and suggestion.

Regards,

Hai= bo

It looks like the attachment = may have been dropped in transit. I=E2=80=99m reattaching it here.

Re= gards,

Haibo


This is quite emba= rrassing =E2=80=94 it looks like my attachment got lost somewhere in transi= t. I=E2=80=99m not sure what happened. I did confirm locally that the attac= hment 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. Hopefully this = won=E2=80=99t cause too much disruption for everyone.=C2=A0

Haibo


--0000000000003f46d4064eceef43-- --0000000000003f46d5064eceef45 Content-Type: application/octet-stream; name="v2-0001-jsonb-optimize-object-field-casts-to-numeric-and-bool.patch" Content-Disposition: attachment; filename="v2-0001-jsonb-optimize-object-field-casts-to-numeric-and-bool.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnj5wny0 RnJvbSAzMjczNThjMDhkODAzYmYwYzAwZjdmZTg5N2Y4YzJlYjQ3NWI5N2E3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFRodSwgMiBBcHIgMjAyNiAyMToyMjo1NCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIGpzb25i 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 YXQKaW5kZXggMzU3OWNlYzU3NDQuLjlhNjk4ZWEzMTA0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKQEAgLTQ3OTIsMTAgKzQ3OTIsMTAgQEAKICAgcHJvc3JjID0+ICdudW1lcmljX3BnX2xzbicg fSwKIAogeyBvaWQgPT4gJzM1NTYnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBib29sZWFu JywKLSAgcHJvbmFtZSA9PiAnYm9vbCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBl cyA9PiAnanNvbmInLAorICBwcm9uYW1lID0+ICdib29sJywgcHJvc3VwcG9ydCA9PiAnanNvbmJf Y2FzdF9zdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdqc29u YicsCiAgIHByb3NyYyA9PiAnanNvbmJfYm9vbCcgfSwKIHsgb2lkID0+ICczNDQ5JywgZGVzY3Ig PT4gJ2NvbnZlcnQganNvbmIgdG8gbnVtZXJpYycsCi0gIHByb25hbWUgPT4gJ251bWVyaWMnLCBw cm9yZXR0eXBlID0+ICdudW1lcmljJywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKKyAgcHJvbmFt ZSA9PiAnbnVtZXJpYycsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsIHByb3Jl dHR5cGUgPT4gJ251bWVyaWMnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4g J2pzb25iX251bWVyaWMnIH0sCiB7IG9pZCA9PiAnMzQ1MCcsIGRlc2NyID0+ICdjb252ZXJ0IGpz b25iIHRvIGludDInLAogICBwcm9uYW1lID0+ICdpbnQyJywgcHJvcmV0dHlwZSA9PiAnaW50Mics IHByb2FyZ3R5cGVzID0+ICdqc29uYicsCkBAIC0xMjg1MSw0ICsxMjg1MSwxOCBAQAogICBwcm9u YW1lID0+ICdoYXNob2lkOGV4dGVuZGVkJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsCiAgIHByb2Fy Z3R5cGVzID0+ICdvaWQ4IGludDgnLCBwcm9zcmMgPT4gJ2hhc2hvaWQ4ZXh0ZW5kZWQnIH0sCiAK KworIyBqc29uYiBjYXN0IG9wdGltaXphdGlvbiBzdXBwb3J0IGZ1bmN0aW9ucworeyBvaWQgPT4g Jzk5NTAnLCBkZXNjciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciBqc29uYiBjYXN0cycsCisgIHBy b25hbWUgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywK KyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICdqc29uYl9jYXN0X3N1cHBv cnQnIH0sCit7IG9pZCA9PiAnOTk1MScsIGRlc2NyID0+ICdleHRyYWN0IG51bWVyaWMgZnJvbSBq c29uYiBvYmplY3QgYnkgZmllbGQgbmFtZScsCisgIHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9m aWVsZF9udW1lcmljJywgcHJvcmV0dHlwZSA9PiAnbnVtZXJpYycsCisgIHByb2FyZ3R5cGVzID0+ ICdqc29uYiB0ZXh0JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24sZmllbGRfbmFtZX0nLAor ICBwcm9zcmMgPT4gJ2pzb25iX29iamVjdF9maWVsZF9udW1lcmljJyB9LAoreyBvaWQgPT4gJzk5 NTInLCBkZXNjciA9PiAnZXh0cmFjdCBib29sZWFuIGZyb20ganNvbmIgb2JqZWN0IGJ5IGZpZWxk 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= --0000000000003f46d5064eceef45--