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 1vpYcY-00B4p0-0I for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Feb 2026 21:16:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vpYcX-00CYCD-02 for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Feb 2026 21:16:36 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vpYcW-00CYC5-1v for pgsql-hackers@lists.postgresql.org; Mon, 09 Feb 2026 21:16:36 +0000 Received: from mail-pj1-x1043.google.com ([2607:f8b0:4864:20::1043]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vpYcT-00000001sWw-2TgT for pgsql-hackers@lists.postgresql.org; Mon, 09 Feb 2026 21:16:35 +0000 Received: by mail-pj1-x1043.google.com with SMTP id 98e67ed59e1d1-35621ce8a9cso1015445a91.1 for ; Mon, 09 Feb 2026 13:16:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770671791; cv=none; d=google.com; s=arc-20240605; b=lvN0xiq3DBcHXm6SL7bLap1p4Dmnjjxua6f1HI2YYYF/KOsjSFag2jMX+kDe25ELbR i91dOeg+H3zjXuizBiEFiFC4GBKEoztT4QCN+aEPuFnTGLonuU8EhSQvW+Jnzjjc1rV+ NzYijwjJoNwh8CoQHE5MHO5FSEZVUR0FFT8lOiqfp7h0LOMUtm3MuMHdWZxg2DSnWEmN aUS1FqSlvLwMbiix8Is2hIZTF8s1xqhAPtro+C7rb9fIgFJZfn1SEyCfHtx+JurHsc70 riQ54hi5og/HGhixsgse6nyFCRVujwwZWQSElmlCeL6f0m2+MqxRNy8lS6rSCKSZ2Wk/ G70w== 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=LLAMGVKG2zztVAHdRFGGWYjbx61oTWOT7BqDNqLZkNE=; fh=OOGZmdz4uSF9Bkg/rNPXo82PcIIB6KVPuXc4NUGdKZU=; b=lT6uj10Y8E9LuVV1/XXZUS2FSNDRmu5IBhENdb3vaYc0TOI91jtrJX+r3am1s8m/GS 0AEEmA2hPnvm6KFGWYOjR7i8MNfYj3ad0FCiWMfx+jBY6Sn7hsxZ1Bo6M/1OKsl0kNjM GJFyZWnZ4LZP+vtvmE3C1k/pIAxRe34DJ6outhbpvseKvLpUExABTcGdKzAWxgii/wBF bbRMlpRDR8ehcwFCY/ZFjKCaSm707oW8UDMEPvSZ0/KySDdgJMESeWpUcU4g61TbMNfD oWW1rgsGEJ9DMrSx3WbfDf0SWNKw8BeiL/GNLCMmv4BNj2kp46Jbz8W4XNG9JlwjJASY ACMA==; 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=20230601; t=1770671791; x=1771276591; 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=LLAMGVKG2zztVAHdRFGGWYjbx61oTWOT7BqDNqLZkNE=; b=X/Kd1CpSoRzeDlLX6AAMzTPduEOfaBaIUCgZtyCQPJQcEho2X4wDIC5JfjGCUROQWR zv3GEXsaS0y3EUTYKFbfAo0xzbvH5B788y//W0us9ROWB26g4tnDe2lkek2xrL+OVy+Z 5QbN2LR37UAik5MnnEMgaQrVqAlv6yNanM4ARczfA/DnEQqVfdQiVwz8UjZ9/GuzDtDI +UiQPsWuRY+0uVkcGcphhX6TtQF/vd5uuI+5ywuU2WP+/XLSv29EcZ1aqfEQ+XOMWqAW eLiEitVyUVj7OnpnFgT7bkzdHzsFNesXSxWRD+/fiKBWh53FS/pyFf7ZVS/PVP9KupNC A97g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770671791; x=1771276591; 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=LLAMGVKG2zztVAHdRFGGWYjbx61oTWOT7BqDNqLZkNE=; b=uaYHYX2r7tbwu39Ono5Uia+VPjTOKEcQBVyyIL4WqO/UETg0odGwRosn0F5h+quvdK RSmQc4uEggq4p0J+EdSXYwrpSvyvH1oiAOCSBFnhwwsrHVG6wHB7A+r6YRqf9W1uFlf/ MaGVRhjaviKnDTqJFgw06twmICR/LhujFpQvNKQCP/9s/6sIzcJOJL2QJZFjDP7B+NTc gcrvRuhxy4sdFqdElJUdjlm0ffRZuSqSQXtbH47JTi8fIfmrNlkDMRGbJFm0WQciCRx6 VyACFXl0c1wJZPaPgazQmYKBPOgkD5UMxeXJ32EKeMfTT6gHcdQ4/c7T8sHMcnnw0N0d xk3w== X-Gm-Message-State: AOJu0YxPTj+1PoZordCdqZ1hqtk8LDMg3PtX4mciMW9bDWjrjh0TYZji nIQdu7gIK+zj7yK1X07YwzICfM9wl+z33jCPNWBlsc8zR+Dt5c9B67ArFUqZWHSOcY1/PkbcZ7G yXukr9IIicfaPuG9Xrbs3Hh6+2vS0fvU= X-Gm-Gg: AZuq6aJCjI0WDki4hXYP1eCWbYLGDy7abFfmrnco9CtpH1gSIW/xtF/2rzmpCNQ/+On RmwZbrAKXQkVe6tIpITQbOQoGjqWMKARsqtU1i1iTAS4pJrZCvwhL44e0AZuuTkR6GIu2dXz1yb Yk2sXh+eFEepeTXHkjfZBDviisCsma9J281cxkKwL+PTZ7jrMK76PjjUSJORNIbIk/ETs8cRQKY jbCDDN1dlYdM23Mn7xDIP1gpCWBGBzoLISEd5DnJ9wlA5nVdQInmqlzvBR0ivTBJJs7N6SaEQ== X-Received: by 2002:a17:90b:3147:b0:343:e2ba:e8be with SMTP id 98e67ed59e1d1-354b3c7d936mr10260251a91.10.1770671790904; Mon, 09 Feb 2026 13:16:30 -0800 (PST) MIME-Version: 1.0 References: <2cc680c1-12a9-4152-ad31-a1385a9d6912@dunslane.net> In-Reply-To: <2cc680c1-12a9-4152-ad31-a1385a9d6912@dunslane.net> From: Alexandra Wang Date: Mon, 9 Feb 2026 13:15:54 -0800 X-Gm-Features: AZwV_QhCD49Dq7NdKTB9BIrQqR8xDVQSilzFbrwJqXL22vgHzxSMIQLWNEbjUI4 Message-ID: Subject: Re: jsonb subscripting vs SQL/JSON array accessor semantics (SQL:2023) To: Andrew Dunstan Cc: PostgreSQL Hackers , Peter Eisentraut , Jelte Fennema-Nio , pavel.stehule@gmail.com Content-Type: multipart/mixed; boundary="0000000000001cab0a064a6aa753" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001cab0a064a6aa753 Content-Type: multipart/alternative; boundary="0000000000001cab09064a6aa751" --0000000000001cab09064a6aa751 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi all, I've put together patches based on the discussion so far to help move things forward. The current vote seems to be 2:1 in favor of implementing lax mode and numeric truncation while keeping negative subscripts, but I=E2=80=99d like to hear more opinions before we settle on = a direction. On Mon, Feb 2, 2026 at 7:32=E2=80=AFAM Andrew Dunstan = wrote: > > On 2026-01-16 Fr 4:26 PM, Alexandra Wang wrote: >> In all cases above, json_query() follows the SQL/JSON standard >> specification. jsonb subscripting, which predates the standard, >> differs in several ways: >> >> 1. Array access on non-arrays (scalars or objects) does not use 'lax' >> mode wrapping. As a result, "[0]" does not return the original value. >> 2. Non-integer subscripts are not supported. >> 3. Negative subscripts use a PostgreSQL-specific extension. > > I'd be inclined to move to the standard for 1 and 2, and document that > people might need to reindex after an upgrade if they have expression > indexes, but keep supporting negative subscripts. Not sure how feasible > that is exactly. The attached patches implement exactly this: 0001: Add numeric type support with truncation 0002: Add lax mode support for non-array access On Sat, Jan 17, 2026 at 1:54=E2=80=AFAM Jelte Fennema-Nio wrote: >> 3. Negative subscripts use a PostgreSQL-specific extension. > I think there are probably people relying on it. And postgres > behaviour actually seems way more useful than the SQL Standard > behaviour. > > You said DuckDB does the same as Postgres. That doesn't surprise me > much, since DuckDB usually defaults to Postgres behaviour. They don't > care much about being strictly sql standard compliant, if that means > more sensible/useful SQL for their users. And since many of their > users are used to Postgres, they try to stay PostgreSQL compatible in > their SQL (unless they think the postgres behaviour is really > weird/confusing). > > I do wonder what other databases do though. Does Oracle, MySQL or > MSSQL actually follow the standard here? i.e how incompatible is this > behaviour in practice with other databases? I did more research on what other databases do: Lax mode (integer subscript on non-array): Oracle: lax - SELECT jcol[0] on '{"a":1}' returns {"a":1} MySQL: lax - SELECT data->'$[0]' on '{"a":1}' returns {"a":1}, although this is not exactly simplified accessor syntax. DuckDB, MSSQL: no lax (return NULL) Numeric truncation: DuckDB: supports rounding Oracle has odd behavior - jcol[3.0] on '{"a":123}' also returns {"a":123}, same as [0]. Not sure what's happening there. MySQL and MSSQL only accept integers in their JSON path syntax. Negative index support: PostgreSQL, DuckDB: supported (count from end) Oracle, MySQL, MSSQL: not supported On Sat, Jan 17, 2026 at 7:07=E2=80=AFAM Pavel Stehule wrote: > I see some JavaScript philosophy (or HTML) in design of SQL/JSON - > '{[1,2,3]}'[0,1] -> 1 (SQL/JSON) versus -> NULL (Postgres) I believe Pavel is referring to the lax mode behavior that the standard defines for the json simplified accessor, am I right? This is indeed a philosophical difference, and so far the exact syntax is only implemented in Oracle (MySQL also has lax mode behavior, but not exactly using the simplified accessor syntax). If others share this concern about lax mode being too lenient, I'd like to hear it. One thing we didn't discuss explicitly: implementing lax mode also affects assignment behavior. For put-get consistency, if val[0] reads the value, then val[0] =3D 'x' should replace it: UPDATE t SET val[0] =3D '"x"' WHERE val =3D '123'; -- was ERROR, now sets val to "x" UPDATE t SET val['a'][0] =3D '"x"' WHERE val =3D '{"a": "hello"}'; -- val becomes {"a": "x"} Direct subscript assignment is a PostgreSQL extension anyway - Oracle uses JSON_TRANSFORM, MySQL uses JSON_SET, MS SQL uses JSON_MODIFY. So we have some freedom here in defining the semantics. I'd appreciate more votes on whether this direction makes sense, or if there are concerns I've missed. Best, Alex --=20 Alexandra Wang EDB: https://www.enterprisedb.com --0000000000001cab09064a6aa751 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi all,

I've put together patc= hes based on the discussion so far to help move
things forward. The curr= ent vote seems to be 2:1 in favor of
implementing lax mode and numeric t= runcation while keeping negative
subscripts, but I=E2=80=99d like to hea= r more opinions before we settle on a
direction.

On Mon, Feb 2, 2= 026 at 7:32=E2=80=AFAM Andrew Dunstan <andrew@dunslane.net> wrote:
>
> On 2026-01-16 Fr 4= :26 PM, Alexandra Wang wrote:
>> In all cases above, json_query() = follows the SQL/JSON standard
>> specification. jsonb subscripting= , which predates the standard,
>> differs in several ways:
>= >
>> 1. Array access on non-arrays (scalars or objects) does no= t use 'lax'
>> mode wrapping. As a result, "[0]"= does not return the original value.
>> 2. Non-integer subscripts = are not supported.
>> 3. Negative subscripts use a PostgreSQL-spec= ific extension.
>
> I'd be inclined to move to the standard= for 1 and 2, and document that
> people might need to reindex after = an upgrade if they have expression
> indexes, but keep supporting neg= ative subscripts. Not sure how feasible
> that is exactly.

The= attached patches implement exactly this:

0001: Add numeric type sup= port with truncation
0002: Add lax mode support for non-array access
=
On Sat, Jan 17, 2026 at 1:54=E2=80=AFAM Jelte Fennema-Nio <postgres@jeltef.nl> wrote:
>>= ; 3. Negative subscripts use a PostgreSQL-specific extension.
> I thi= nk there are probably people relying on it. And postgres
> behaviour = actually seems way more useful than the SQL Standard
> behaviour.
= >
> You said DuckDB does the same as Postgres. That doesn't su= rprise me
> much, since DuckDB usually defaults to Postgres behaviour= . They don't
> care much about being strictly sql standard compli= ant, if that means
> more sensible/useful SQL for their users. And si= nce many of their
> users are used to Postgres, they try to stay Post= greSQL compatible in
> their SQL (unless they think the postgres beha= viour is really
> weird/confusing).
>
> I do wonder what= other databases do though. Does Oracle, MySQL or
> MSSQL actually fo= llow the standard here? i.e how incompatible is this
> behaviour in p= ractice with other databases?

I did more research on what other data= bases do:

Lax mode (integer subscript on non-array):
=C2=A0 Oracl= e: lax - SELECT jcol[0] on '{"a":1}' returns {"a&quo= t;:1}
=C2=A0 MySQL: lax - SELECT data->'$[0]' on '{"= a":1}' returns {"a":1},
although this is not exactly = simplified accessor syntax.
=C2=A0 DuckDB, MSSQL: no lax (return NULL)
Numeric truncation:
=C2=A0 DuckDB: supports rounding
=C2=A0 Ora= cle has odd behavior - jcol[3.0] on '{"a":123}' also retu= rns
=C2=A0 {"a":123}, same as [0]. Not sure what's happeni= ng there.
=C2=A0 MySQL and MSSQL only accept integers in their JSON path= syntax.

Negative index support:
=C2=A0 PostgreSQL, DuckDB: suppo= rted (count from end)
=C2=A0 Oracle, MySQL, MSSQL: not supported

= On Sat, Jan 17, 2026 at 7:07=E2=80=AFAM Pavel Stehule <pavel.stehule@gmail.com> wrote:
> I = see some JavaScript philosophy (or HTML) in design of SQL/JSON -
> &#= 39;{[1,2,3]}'[0,1] -> 1 (SQL/JSON) versus -> NULL (Postgres)
<= br>I believe Pavel is referring to the lax mode behavior that the
standa= rd defines for the json simplified accessor, am I right? This is
indeed = a philosophical difference, and so far the exact syntax is only
implemen= ted in Oracle (MySQL also has lax mode behavior, but not
exactly using t= he simplified accessor syntax). If others share this
concern about lax m= ode being too lenient, I'd like to hear it.

One thing we didn= 9;t discuss explicitly: implementing lax mode also
affects assignment be= havior. For put-get consistency, if val[0] reads
the value, then val[0] = =3D 'x' should replace it:

UPDATE t SET val[0] =3D '&quo= t;x"' WHERE val =3D '123';
-- was ERROR, now sets val t= o "x"

UPDATE t SET val['a'][0] =3D '"x&qu= ot;' WHERE val =3D '{"a": "hello"}';
-- = val becomes {"a": "x"}

Direct subscript assignme= nt is a PostgreSQL extension anyway - Oracle
uses JSON_TRANSFORM, MySQL = uses JSON_SET, MS SQL uses JSON_MODIFY.=C2=A0 So
we have some freedom he= re in defining the semantics.

I'd appreciate more votes on wheth= er this direction makes sense, or if
there are concerns I've missed.=

Best,
Alex
=
--
Al= exandra Wang
--0000000000001cab09064a6aa751-- --0000000000001cab0a064a6aa753 Content-Type: application/octet-stream; name="v1-0001-Support-numeric-type-for-jsonb-subscripting.patch" Content-Disposition: attachment; filename="v1-0001-Support-numeric-type-for-jsonb-subscripting.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfo6p0n1 RnJvbSAxNmQ1MmQ3OGM1OTk4NDdjOTNjNjg1ZDY2OTQxNTdjNWViZWZmZmU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kcmEgV2FuZyA8YWxleGFuZHJhLndhbmcub3NzQGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzIEZlYiAyMDI2IDEyOjU4OjA3IC0wODAwClN1YmplY3Q6IFtQ QVRDSCB2MSAxLzJdIFN1cHBvcnQgbnVtZXJpYyB0eXBlIGZvciBqc29uYiBzdWJzY3JpcHRpbmcK ClByZXZpb3VzbHksIHVzaW5nIGEgbnVtZXJpYyB2YWx1ZSBhcyBhIGpzb25iIHN1YnNjcmlwdCB3 b3VsZCBlcnJvci4KTm93IG51bWVyaWMgc3Vic2NyaXB0cyBhcmUgYWNjZXB0ZWQgYW5kIHRydW5j YXRlZCB0b3dhcmQgemVybyB0bwpwcm9kdWNlIGFuIGludGVnZXIgaW5kZXguIFRoaXMgbWF0Y2hl cyB0aGUgc2VtYW50aWNzIG9mIGFycmF5IGFjY2VzcwppbiBqc29uX3F1ZXJ5KCkgcGVyIHRoZSBT UUwvSlNPTiBzdGFuZGFyZC4KCkV4YW1wbGVzOgogIFNFTEVDVCAoJ1siYSIsImIiLCJjIl0nOjpq c29uYilbMS43XTsgICAtLSByZXR1cm5zICJiIiAodHJ1bmNhdGVzIHRvIDEpCiAgU0VMRUNUICgn WyJhIiwiYiIsImMiXSc6Ompzb25iKVstMS43XTsgIC0tIHJldHVybnMgImMiICh0cnVuY2F0ZXMg dG8gLTEpCi0tLQogZG9jL3NyYy9zZ21sL2pzb24uc2dtbCAgICAgICAgICAgICAgfCAgNyArKy0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYnN1YnMuYyAgIHwgNzMgKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0IHwgNjkg KysrKysrKysrKysrKysrKysrKysrKysrKy0tCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5z cWwgICAgICB8IDE4ICsrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMTMyIGluc2VydGlvbnMoKyks IDM1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9qc29uLnNnbWwgYi9k b2Mvc3JjL3NnbWwvanNvbi5zZ21sCmluZGV4IDIwNmVhZGI4ZjdiLi5hNTg0YWFiNmFjMSAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2pzb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvanNvbi5z Z21sCkBAIC02MjEsNyArNjIxLDggQEAgU0VMRUNUIGpkb2MtPidndWlkJywgamRvYy0+J25hbWUn IEZST00gYXBpIFdIRVJFIGpkb2MgQEAgJyQudGFnc1sqXSA9PSAicXVpIic7CiAgICBzdWJzY3Jp cHRpbmcgZXhwcmVzc2lvbnMsIGZvbGxvd2luZyB0aGUgc2FtZSBydWxlcyBhcyB0aGUgPGxpdGVy YWw+cGF0aDwvbGl0ZXJhbD4KICAgIGFyZ3VtZW50IGluIHRoZSA8bGl0ZXJhbD5qc29uYl9zZXQ8 L2xpdGVyYWw+IGZ1bmN0aW9uLiBJZiBhIDx0eXBlPmpzb25iPC90eXBlPgogICAgdmFsdWUgaXMg YW4gYXJyYXksIG51bWVyaWMgc3Vic2NyaXB0cyBzdGFydCBhdCB6ZXJvLCBhbmQgbmVnYXRpdmUg aW50ZWdlcnMgY291bnQKLSAgIGJhY2t3YXJkcyBmcm9tIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhl IGFycmF5LiBTbGljZSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgIGJhY2t3YXJk cyBmcm9tIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGFycmF5LiBOb24taW50ZWdlciBudW1lcmlj IHN1YnNjcmlwdHMgYXJlCisgICB0cnVuY2F0ZWQgdG93YXJkIHplcm8uIFNsaWNlIGV4cHJlc3Np b25zIGFyZSBub3Qgc3VwcG9ydGVkLgogICAgVGhlIHJlc3VsdCBvZiBhIHN1YnNjcmlwdGluZyBl eHByZXNzaW9uIGlzIGFsd2F5cyBvZiB0aGUganNvbmIgZGF0YSB0eXBlLgogICA8L3BhcmE+CiAK QEAgLTY2Nyw2ICs2NjgsMTAgQEAgVVBEQVRFIHRhYmxlX25hbWUgU0VUIGpzb25iX2ZpZWxkWydh J11bJ2InXVsnYyddID0gJzEnOwogLS0gc3Vic2NyaXB0aW5nIGlzIGpzb25iLCB0aGUgdmFsdWUg d2UgY29tcGFyZSBpdCBhZ2FpbnN0IG11c3QgYWxzbyBiZSBqc29uYi4KIC0tIFRoZSBkb3VibGUg cXVvdGVzIG1ha2UgInZhbHVlIiBhbHNvIGEgdmFsaWQganNvbmIgc3RyaW5nLgogU0VMRUNUICog RlJPTSB0YWJsZV9uYW1lIFdIRVJFIGpzb25iX2ZpZWxkWydrZXknXSA9ICcidmFsdWUiJzsKKwor LS0gTnVtZXJpYyBzdWJzY3JpcHRzIGFyZSB0cnVuY2F0ZWQgdG93YXJkIHplcm8KK1NFTEVDVCAo J1sxLCAyLCAzXSc6Ompzb25iKVsxLjddOyAgLS0gcmV0dXJucyAyCisKIDwvcHJvZ3JhbWxpc3Rp bmc+CiAKICAgIDx0eXBlPmpzb25iPC90eXBlPiBhc3NpZ25tZW50IHZpYSBzdWJzY3JpcHRpbmcg aGFuZGxlcyBhIGZldyBlZGdlIGNhc2VzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbmJzdWJzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJzdWJzLmMKaW5kZXgg NmJmNTVmMTlkNmEuLmIxMTBkMzAyOThkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbmJzdWJzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25ic3Vicy5jCkBA IC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2V4cHIuaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisjaW5jbHVkZSAi dXRpbHMvbnVtZXJpYy5oIgogCiAKIC8qIFN1YnNjcmlwdGluZ1JlZlN0YXRlLndvcmtzcGFjZSBm b3IganNvbmIgc3Vic2NyaXB0aW5nIGV4ZWN1dGlvbiAqLwpAQCAtNzgsNDEgKzc5LDM0IEBAIGpz b25iX3N1YnNjcmlwdF90cmFuc2Zvcm0oU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsCiAKIAkJCWlm IChzdWJFeHByVHlwZSAhPSBVTktOT1dOT0lEKQogCQkJewotCQkJCU9pZAkJCXRhcmdldHNbMl0g PSB7SU5UNE9JRCwgVEVYVE9JRH07CisJCQkJT2lkCQkJaW50NE9pZCA9IElOVDRPSUQ7CisJCQkJ T2lkCQkJbnVtZXJpY09pZCA9IE5VTUVSSUNPSUQ7CisJCQkJT2lkCQkJdGV4dE9pZCA9IFRFWFRP SUQ7CisJCQkJYm9vbAkJY2FuX2ludDsKKwkJCQlib29sCQljYW5fbnVtZXJpYzsKKwkJCQlib29s CQljYW5fdGV4dDsKIAogCQkJCS8qCi0JCQkJICogSnNvbmIgY2FuIGhhbmRsZSBtdWx0aXBsZSBz dWJzY3JpcHQgdHlwZXMsIGJ1dCBjYXNlcyB3aGVuIGEKLQkJCQkgKiBzdWJzY3JpcHQgY291bGQg YmUgY29lcmNlZCB0byBtdWx0aXBsZSB0YXJnZXQgdHlwZXMgbXVzdCBiZQotCQkJCSAqIGF2b2lk ZWQsIHNpbWlsYXIgdG8gb3ZlcmxvYWRlZCBmdW5jdGlvbnMuIEl0IGNvdWxkIGJlCi0JCQkJICog cG9zc2libHkgZXh0ZW5kIHdpdGgganNvbnBhdGggaW4gdGhlIGZ1dHVyZS4KKwkJCQkgKiBDaGVj ayB3aGljaCB0eXBlcyB0aGUgc3Vic2NyaXB0IGNhbiBiZSBjb2VyY2VkIHRvLiAgV2UKKwkJCQkg KiBwcmVmZXIgSU5UNCBmb3IgaW50ZWdlciB0eXBlcyAoZmFzdCBwYXRoKSwgTlVNRVJJQyBmb3IK KwkJCQkgKiBudW1lcmljIHR5cGVzIChhbGxvd3MgdHJ1bmNhdGlvbiB0b3dhcmQgemVybyBwZXIg U1FML0pTT04KKwkJCQkgKiBzcGVjKSwgYW5kIFRFWFQgZm9yIHRleHQgdHlwZXMgKGZpZWxkIGFj Y2VzcykuCiAJCQkJICovCi0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCi0JCQkJewot CQkJCQlpZiAoY2FuX2NvZXJjZV90eXBlKDEsICZzdWJFeHByVHlwZSwgJnRhcmdldHNbaV0sIENP RVJDSU9OX0lNUExJQ0lUKSkKLQkJCQkJewotCQkJCQkJLyoKLQkJCQkJCSAqIE9uZSB0eXBlIGhh cyBhbHJlYWR5IHN1Y2NlZWRlZCwgaXQgbWVhbnMgdGhlcmUgYXJlCi0JCQkJCQkgKiB0d28gY29l cmNpb24gdGFyZ2V0cyBwb3NzaWJsZSwgZmFpbHVyZS4KLQkJCQkJCSAqLwotCQkJCQkJaWYgKHRh cmdldFR5cGUgIT0gVU5LTk9XTk9JRCkKLQkJCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCi0JCQkJCQkJCQkgZXJybXNnKCJz dWJzY3JpcHQgdHlwZSAlcyBpcyBub3Qgc3VwcG9ydGVkIiwgZm9ybWF0X3R5cGVfYmUoc3ViRXhw clR5cGUpKSwKLQkJCQkJCQkJCSBlcnJoaW50KCJqc29uYiBzdWJzY3JpcHQgbXVzdCBiZSBjb2Vy Y2libGUgdG8gb25seSBvbmUgdHlwZSwgaW50ZWdlciBvciB0ZXh0LiIpLAotCQkJCQkJCQkJIHBh cnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihzdWJFeHByKSkpKTsKLQotCQkJ CQkJdGFyZ2V0VHlwZSA9IHRhcmdldHNbaV07Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQkvKgotCQkJ CSAqIE5vIHN1aXRhYmxlIHR5cGVzIHdlcmUgZm91bmQsIGZhaWx1cmUuCi0JCQkJICovCi0JCQkJ aWYgKHRhcmdldFR5cGUgPT0gVU5LTk9XTk9JRCkKKwkJCQljYW5faW50ID0gY2FuX2NvZXJjZV90 eXBlKDEsICZzdWJFeHByVHlwZSwgJmludDRPaWQsIENPRVJDSU9OX0lNUExJQ0lUKTsKKwkJCQlj YW5fbnVtZXJpYyA9IGNhbl9jb2VyY2VfdHlwZSgxLCAmc3ViRXhwclR5cGUsICZudW1lcmljT2lk LCBDT0VSQ0lPTl9JTVBMSUNJVCk7CisJCQkJY2FuX3RleHQgPSBjYW5fY29lcmNlX3R5cGUoMSwg JnN1YkV4cHJUeXBlLCAmdGV4dE9pZCwgQ09FUkNJT05fSU1QTElDSVQpOworCisJCQkJaWYgKGNh bl9pbnQgJiYgIWNhbl90ZXh0KQorCQkJCQl0YXJnZXRUeXBlID0gSU5UNE9JRDsKKwkJCQllbHNl IGlmIChjYW5fdGV4dCAmJiAhY2FuX2ludCkKKwkJCQkJdGFyZ2V0VHlwZSA9IFRFWFRPSUQ7CisJ CQkJZWxzZSBpZiAoY2FuX251bWVyaWMpCisJCQkJCXRhcmdldFR5cGUgPSBOVU1FUklDT0lEOwor CQkJCWVsc2UKIAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RB VEFUWVBFX01JU01BVENIKSwKIAkJCQkJCQkgZXJybXNnKCJzdWJzY3JpcHQgdHlwZSAlcyBpcyBu b3Qgc3VwcG9ydGVkIiwgZm9ybWF0X3R5cGVfYmUoc3ViRXhwclR5cGUpKSwKLQkJCQkJCQkgZXJy aGludCgianNvbmIgc3Vic2NyaXB0IG11c3QgYmUgY29lcmNpYmxlIHRvIGVpdGhlciBpbnRlZ2Vy IG9yIHRleHQuIiksCisJCQkJCQkJIGVycmhpbnQoImpzb25iIHN1YnNjcmlwdCBtdXN0IGJlIGNv ZXJjaWJsZSB0byBlaXRoZXIgbnVtZXJpYyBvciB0ZXh0LiIpLAogCQkJCQkJCSBwYXJzZXJfZXJy cG9zaXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24oc3ViRXhwcikpKSk7CiAJCQl9CiAJCQllbHNl CkBAIC0xODcsNyArMTgxLDkgQEAganNvbmJfc3Vic2NyaXB0X2NoZWNrX3N1YnNjcmlwdHMoRXhw clN0YXRlICpzdGF0ZSwKIAkgKiBhbiBlbXB0eSBzb3VyY2UuCiAJICovCiAJaWYgKHNic3JlZnN0 YXRlLT5udW11cHBlciA+IDAgJiYgc2JzcmVmc3RhdGUtPnVwcGVycHJvdmlkZWRbMF0gJiYKLQkJ IXNic3JlZnN0YXRlLT51cHBlcmluZGV4bnVsbFswXSAmJiB3b3Jrc3BhY2UtPmluZGV4T2lkWzBd ID09IElOVDRPSUQpCisJCSFzYnNyZWZzdGF0ZS0+dXBwZXJpbmRleG51bGxbMF0gJiYKKwkJKHdv cmtzcGFjZS0+aW5kZXhPaWRbMF0gPT0gSU5UNE9JRCB8fAorCQkgd29ya3NwYWNlLT5pbmRleE9p ZFswXSA9PSBOVU1FUklDT0lEKSkKIAkJd29ya3NwYWNlLT5leHBlY3RBcnJheSA9IHRydWU7CiAK IAkvKiBQcm9jZXNzIHVwcGVyIHN1YnNjcmlwdHMgKi8KQEAgLTIxNyw2ICsyMTMsMjMgQEAganNv bmJfc3Vic2NyaXB0X2NoZWNrX3N1YnNjcmlwdHMoRXhwclN0YXRlICpzdGF0ZSwKIAogCQkJCXdv cmtzcGFjZS0+aW5kZXhbaV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGNzKTsKIAkJCX0KKwkJCWVs c2UgaWYgKHdvcmtzcGFjZS0+aW5kZXhPaWRbaV0gPT0gTlVNRVJJQ09JRCkKKwkJCXsKKwkJCQkv KgorCQkJCSAqIFRydW5jYXRlIG51bWVyaWMgdG93YXJkIHplcm8gcGVyIFNRTC9KU09OIHNwZWMs IHRoZW4KKwkJCQkgKiBjb252ZXJ0IHRvIGludDQgdGV4dCBmb3IgZWxlbWVudCBhY2Nlc3MuCisJ CQkJICovCisJCQkJRGF0dW0JCXRydW5jYXRlZDsKKwkJCQlEYXR1bQkJaW50X3ZhbDsKKwkJCQlj aGFyCSAgICpjczsKKworCQkJCXRydW5jYXRlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIobnVtZXJp Y190cnVuYywKKwkJCQkJCQkJCQkJCXNic3JlZnN0YXRlLT51cHBlcmluZGV4W2ldLAorCQkJCQkJ CQkJCQkJSW50MzJHZXREYXR1bSgwKSk7CisJCQkJaW50X3ZhbCA9IERpcmVjdEZ1bmN0aW9uQ2Fs bDEobnVtZXJpY19pbnQ0LCB0cnVuY2F0ZWQpOworCQkJCWNzID0gRGF0dW1HZXRDU3RyaW5nKERp cmVjdEZ1bmN0aW9uQ2FsbDEoaW50NG91dCwgaW50X3ZhbCkpOworCQkJCXdvcmtzcGFjZS0+aW5k ZXhbaV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGNzKTsKKwkJCX0KIAkJCWVsc2UKIAkJCQl3b3Jr c3BhY2UtPmluZGV4W2ldID0gc2JzcmVmc3RhdGUtPnVwcGVyaW5kZXhbaV07CiAJCX0KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9qc29uYi5vdXQKaW5kZXggNGUyNDY3ODUyZGIuLmYwZWE2NTQ0MzRmIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dApAQCAtNTA3NywxMCArNTA3NywxMSBAQCBz ZWxlY3QgKCdbMSwgIjIiLCBudWxsXSc6Ompzb25iKVsnMSddOwogKDEgcm93KQogCiBzZWxlY3Qg KCdbMSwgIjIiLCBudWxsXSc6Ompzb25iKVsxLjBdOwotRVJST1I6ICBzdWJzY3JpcHQgdHlwZSBu dW1lcmljIGlzIG5vdCBzdXBwb3J0ZWQKLUxJTkUgMTogc2VsZWN0ICgnWzEsICIyIiwgbnVsbF0n Ojpqc29uYilbMS4wXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgotSElOVDogIGpzb25iIHN1YnNjcmlwdCBtdXN0IGJlIGNvZXJjaWJsZSB0byBlaXRoZXIgaW50 ZWdlciBvciB0ZXh0LgorIGpzb25iIAorLS0tLS0tLQorICIyIgorKDEgcm93KQorCiBzZWxlY3Qg KCdbMSwgIjIiLCBudWxsXSc6Ompzb25iKVsyXTsKICBqc29uYiAKIC0tLS0tLS0KQEAgLTU5NTIs MyArNTk1Myw2MyBAQCBzZWxlY3QgKCd7InRleHQiOiAiaGVsbG8ifSc6Ompzb25iKS50ZXh0Owog IHsidGV4dCI6ICJoZWxsbyJ9CiAoMSByb3cpCiAKKy0tIG5vbi1pbnRlZ2VyIG51bWVyaWMgc3Vi c2NyaXB0cworc2VsZWN0ICgnWzEsICIyIiwgbnVsbF0nOjpqc29uYilbMC4wXTsKKyBqc29uYiAK Ky0tLS0tLS0KKyAxCisoMSByb3cpCisKK3NlbGVjdCAoJ1sxLCAiMiIsIG51bGxdJzo6anNvbmIp WzAuOV07CisganNvbmIgCistLS0tLS0tCisgMQorKDEgcm93KQorCitzZWxlY3QgKCdbMSwgIjIi LCBudWxsXSc6Ompzb25iKVsxLjldOworIGpzb25iIAorLS0tLS0tLQorICIyIgorKDEgcm93KQor CitzZWxlY3QgKCdbMSwgIjIiLCBudWxsXSc6Ompzb25iKVstMS4wXTsKKyBqc29uYiAKKy0tLS0t LS0KKyBudWxsCisoMSByb3cpCisKK3NlbGVjdCAoJ1sxLCAiMiIsIG51bGxdJzo6anNvbmIpWy0x LjldOworIGpzb25iIAorLS0tLS0tLQorIG51bGwKKygxIHJvdykKKworc2VsZWN0ICgnWzEsICIy IiwgbnVsbF0nOjpqc29uYilbMTo6bnVtZXJpY107CisganNvbmIgCistLS0tLS0tCisgIjIiCiso MSByb3cpCisKK3NlbGVjdCAoJ1sxLCAiMiIsIG51bGxdJzo6anNvbmIpWzEuNTo6ZmxvYXQ4XTsg LS0gZXJyb3JzCitFUlJPUjogIHN1YnNjcmlwdCB0eXBlIGRvdWJsZSBwcmVjaXNpb24gaXMgbm90 IHN1cHBvcnRlZAorTElORSAxOiBzZWxlY3QgKCdbMSwgIjIiLCBudWxsXSc6Ompzb25iKVsxLjU6 OmZsb2F0OF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0hJ TlQ6ICBqc29uYiBzdWJzY3JpcHQgbXVzdCBiZSBjb2VyY2libGUgdG8gZWl0aGVyIG51bWVyaWMg b3IgdGV4dC4KKy0tIG5vbi1pbnRlZ2VyIG51bWVyaWMgc3Vic2NyaXB0IGFzc2lnbm1lbnQKK2Ny ZWF0ZSB0ZW1wIHRhYmxlIHRlc3RfanNvbmJfbnVtZXJpY19zdWJzY3JpcHQoaWQgaW50LCB2YWwg anNvbmIpOworaW5zZXJ0IGludG8gdGVzdF9qc29uYl9udW1lcmljX3N1YnNjcmlwdCB2YWx1ZXMg KDEsICdbMSwgMiwgM10nKTsKK3VwZGF0ZSB0ZXN0X2pzb25iX251bWVyaWNfc3Vic2NyaXB0IHNl dCB2YWxbMS4wXSA9ICcieCInOworc2VsZWN0ICogZnJvbSB0ZXN0X2pzb25iX251bWVyaWNfc3Vi c2NyaXB0OworIGlkIHwgICAgIHZhbCAgICAgCistLS0tKy0tLS0tLS0tLS0tLS0KKyAgMSB8IFsx LCAieCIsIDNdCisoMSByb3cpCisKK3VwZGF0ZSB0ZXN0X2pzb25iX251bWVyaWNfc3Vic2NyaXB0 IHNldCB2YWxbMS45XSA9ICcieSInOworc2VsZWN0ICogZnJvbSB0ZXN0X2pzb25iX251bWVyaWNf c3Vic2NyaXB0OworIGlkIHwgICAgIHZhbCAgICAgCistLS0tKy0tLS0tLS0tLS0tLS0KKyAgMSB8 IFsxLCAieSIsIDNdCisoMSByb3cpCisKK2Ryb3AgdGFibGUgdGVzdF9qc29uYl9udW1lcmljX3N1 YnNjcmlwdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbAppbmRleCBkMjhlZDFjMWU4NS4uZDdkMjYyMDU1 MzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwKQEAgLTE2MTUsMyArMTYxNSwyMSBAQCBzZWxlY3Qg KCd0cnVlJzo6anNvbmIpOjpib29sOwogc2VsZWN0ICgndHJ1ZSc6Ompzb25iKS5ib29sOwogc2Vs ZWN0ICgneyJ0ZXh0IjogImhlbGxvIn0nOjpqc29uYik6OnRleHQ7CiBzZWxlY3QgKCd7InRleHQi OiAiaGVsbG8ifSc6Ompzb25iKS50ZXh0OworCistLSBub24taW50ZWdlciBudW1lcmljIHN1YnNj cmlwdHMKK3NlbGVjdCAoJ1sxLCAiMiIsIG51bGxdJzo6anNvbmIpWzAuMF07CitzZWxlY3QgKCdb MSwgIjIiLCBudWxsXSc6Ompzb25iKVswLjldOworc2VsZWN0ICgnWzEsICIyIiwgbnVsbF0nOjpq c29uYilbMS45XTsKK3NlbGVjdCAoJ1sxLCAiMiIsIG51bGxdJzo6anNvbmIpWy0xLjBdOworc2Vs ZWN0ICgnWzEsICIyIiwgbnVsbF0nOjpqc29uYilbLTEuOV07CitzZWxlY3QgKCdbMSwgIjIiLCBu dWxsXSc6Ompzb25iKVsxOjpudW1lcmljXTsKK3NlbGVjdCAoJ1sxLCAiMiIsIG51bGxdJzo6anNv bmIpWzEuNTo6ZmxvYXQ4XTsgLS0gZXJyb3JzCisKKy0tIG5vbi1pbnRlZ2VyIG51bWVyaWMgc3Vi c2NyaXB0IGFzc2lnbm1lbnQKK2NyZWF0ZSB0ZW1wIHRhYmxlIHRlc3RfanNvbmJfbnVtZXJpY19z dWJzY3JpcHQoaWQgaW50LCB2YWwganNvbmIpOworaW5zZXJ0IGludG8gdGVzdF9qc29uYl9udW1l cmljX3N1YnNjcmlwdCB2YWx1ZXMgKDEsICdbMSwgMiwgM10nKTsKK3VwZGF0ZSB0ZXN0X2pzb25i X251bWVyaWNfc3Vic2NyaXB0IHNldCB2YWxbMS4wXSA9ICcieCInOworc2VsZWN0ICogZnJvbSB0 ZXN0X2pzb25iX251bWVyaWNfc3Vic2NyaXB0OwordXBkYXRlIHRlc3RfanNvbmJfbnVtZXJpY19z dWJzY3JpcHQgc2V0IHZhbFsxLjldID0gJyJ5Iic7CitzZWxlY3QgKiBmcm9tIHRlc3RfanNvbmJf bnVtZXJpY19zdWJzY3JpcHQ7Citkcm9wIHRhYmxlIHRlc3RfanNvbmJfbnVtZXJpY19zdWJzY3Jp cHQ7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --0000000000001cab0a064a6aa753 Content-Type: application/octet-stream; name="v1-0002-Implement-lax-mode-for-jsonb-subscripting.patch" Content-Disposition: attachment; filename="v1-0002-Implement-lax-mode-for-jsonb-subscripting.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfo6p0e0 RnJvbSA0MDg0OGJiYzlhNDVlMTcxNzI2YTFiNDY1YTAwYTQzOGI2MGQxMTBlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kcmEgV2FuZyA8YWxleGFuZHJhLndhbmcub3NzQGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzIEZlYiAyMDI2IDE0OjM2OjUyIC0wODAwClN1YmplY3Q6IFtQ QVRDSCB2MSAyLzJdIEltcGxlbWVudCBsYXggbW9kZSBmb3IganNvbmIgc3Vic2NyaXB0aW5nCgpK c29uYiBzdWJzY3JpcHRpbmcgcHJlZGF0ZXMgdGhlIFNRTC9KU09OIHN0YW5kYXJkIGFuZCBoYWQg Y3VzdG9tCmJlaGF2aW9yIHRoYXQgZGl2ZXJnZXMgZnJvbSB0aGUgU1FML0pTT04gc2ltcGxpZmll ZCBhY2Nlc3Nvciwgd2hpY2gKaGFzIGlkZW50aWNhbCBzeW50YXguIFRoaXMgY29tbWl0IGFsaWdu cyBqc29uYiBzdWJzY3JpcHRpbmcgd2l0aCB0aGUKU1FML0pTT04gc3RhbmRhcmQgYnkgZW5hYmxp bmcgbGF4IG1vZGUgZm9yIGludGVnZXIgc3Vic2NyaXB0cyBvbgpub24tYXJyYXkgdmFsdWVzLgoK UGVyIFNRTC9KU09OIGxheCBtb2RlLCB3aGVuIGFuIGludGVnZXIgc3Vic2NyaXB0IGlzIGFwcGxp ZWQgdG8gYQpub24tYXJyYXkgdmFsdWUgKG9iamVjdCBvciBzY2FsYXIpLCB0aGUgdmFsdWUgaXMg dHJlYXRlZCBhcyBpZiB3cmFwcGVkCmluIGEgc2luZ2xlLWVsZW1lbnQgYXJyYXkuIEluZGV4IDAg YW5kIC0xIGFyZSBpbi1ib3VuZHMgKGZpcnN0L2xhc3QKZWxlbWVudCBvZiB0aGUgd3JhcHBlZCBh cnJheSksIHdoaWxlIG90aGVyIGluZGljZXMgYXJlIG91dC1vZi1ib3VuZHMuCgpSZWFkIGJlaGF2 aW9yOgogIC0gSW4tYm91bmRzICgwIG9yIC0xKTogcmV0dXJucyB0aGUgdmFsdWUgaXRzZWxmCiAg LSBPdXQtb2YtYm91bmRzOiByZXR1cm5zIE5VTEwKCkV4YW1wbGVzOgogIFNFTEVDVCAoJzEyMyc6 Ompzb25iKVswXTsgICAgICAgIC0tIHdhcyBOVUxMLCBub3cgMTIzCiAgU0VMRUNUICgneyJhIjox fSc6Ompzb25iKVstMV07ICAgLS0gd2FzIE5VTEwsIG5vdyB7ImEiOjF9CiAgU0VMRUNUICgnMTIz Jzo6anNvbmIpWzJdOyAgICAgICAgLS0gc3RpbGwgTlVMTCAob3V0LW9mLWJvdW5kcykKCldyaXRl IGJlaGF2aW9yIGlzIGFsc28gY2hhbmdlZCB0byBtYWludGFpbiBwdXQtZ2V0IGNvbnNpc3RlbmN5 IChpZgpyZWFkaW5nIHZhbFswXSByZXR1cm5zIHRoZSB2YWx1ZSwgdGhlbiB3cml0aW5nIHZhbFsw XSBzaG91bGQgcmVwbGFjZQp0aGF0IHZhbHVlKToKICAtIEluLWJvdW5kcyAoMCBvciAtMSk6IHJl cGxhY2VzIHRoZSB2YWx1ZQogIC0gT3V0LW9mLWJvdW5kczogd3JhcHMgdmFsdWUgaW4gYXJyYXks IHRoZW4gaW5zZXJ0cyBhdCB0aGUgaW5kZXgKCkV4YW1wbGVzOgogIC0tIEluLWJvdW5kcyBhc3Np Z25tZW50ICh3YXMgRVJST1IsIG5vdyByZXBsYWNlcykKICBVUERBVEUgdCBTRVQgdmFsWzBdID0g JyJ4IicgV0hFUkUgdmFsID0gJzEyMyc7IC0tIHJlc3VsdDogdmFsIGJlY29tZXMgIngiCiAgLS0g T3V0LW9mLWJvdW5kcyBhc3NpZ25tZW50ICh3cmFwcyBhbmQgaW5zZXJ0cyB3aXRoIE5VTEwgZ2Fw LAogIC0tIG5vdGUgdGhhdCBmaWxsaW5nIGdhcHMgaXMgZXhzdGluZyBiZWhhdmlvciBmb3IgYXJy YXkgYXNzaWdubWVudCkKICBVUERBVEUgdCBTRVQgdmFsWzJdID0gJyJ4IicgV0hFUkUgdmFsID0g JzEyMyc7IC0tIHJlc3VsdDogdmFsIGJlY29tZXMgWzEyMywgbnVsbCwgIngiXQotLS0KIGRvYy9z cmMvc2dtbC9qc29uLnNnbWwgICAgICAgICAgICAgIHwgIDI1ICsrLQogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb25ic3Vicy5jICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u ZnVuY3MuYyAgIHwgMzIzICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIHNyYy9pbmNsdWRl L3V0aWxzL2pzb25iLmggICAgICAgICAgIHwgICA2ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2pzb25iLm91dCB8IDIyOSArKysrKysrKysrKysrKysrKystLQogc3JjL3Rlc3QvcmVncmVz cy9zcWwvanNvbmIuc3FsICAgICAgfCAgODYgKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNjI2 IGluc2VydGlvbnMoKyksIDUyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9qc29uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvanNvbi5zZ21sCmluZGV4IGE1ODRhYWI2YWMxLi42 YjE3NWQ4ZGM5YSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2pzb24uc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvanNvbi5zZ21sCkBAIC02MjYsNiArNjI2LDE0IEBAIFNFTEVDVCBqZG9jLT4nZ3Vp ZCcsIGpkb2MtPiduYW1lJyBGUk9NIGFwaSBXSEVSRSBqZG9jIEBAICckLnRhZ3NbKl0gPT0gInF1 aSInOwogICAgVGhlIHJlc3VsdCBvZiBhIHN1YnNjcmlwdGluZyBleHByZXNzaW9uIGlzIGFsd2F5 cyBvZiB0aGUganNvbmIgZGF0YSB0eXBlLgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBXaGVu IGFuIGludGVnZXIgc3Vic2NyaXB0IGlzIGFwcGxpZWQgdG8gYSA8dHlwZT5qc29uYjwvdHlwZT4g dmFsdWUgdGhhdCBpcyBub3QKKyAgIGFuIGFycmF5IChpLmUuLCBhbiBvYmplY3Qgb3IgYSBzY2Fs YXIpLCB0aGUgdmFsdWUgaXMgdHJlYXRlZCBhcyBpZiBpdCB3ZXJlIGEKKyAgIHNpbmdsZS1lbGVt ZW50IGFycmF5IHBlciBTUUwvSlNPTiBsYXggbW9kZS4gVGh1cywgaW5kZXggMCBhbmQgLTEgYWNj ZXNzIHRoZQorICAgdmFsdWUgaXRzZWxmLCB3aGlsZSBvdGhlciBpbmRpY2VzIGFyZSBvdXQtb2Yt Ym91bmRzIGFuZCByZXR1cm4KKyAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LgorICA8L3BhcmE+ CisKICAgPHBhcmE+CiAgICA8Y29tbWFuZD5VUERBVEU8L2NvbW1hbmQ+IHN0YXRlbWVudHMgbWF5 IHVzZSBzdWJzY3JpcHRpbmcgaW4gdGhlCiAgICA8bGl0ZXJhbD5TRVQ8L2xpdGVyYWw+IGNsYXVz ZSB0byBtb2RpZnkgPHR5cGU+anNvbmI8L3R5cGU+IHZhbHVlcy4gU3Vic2NyaXB0CkBAIC02MzUs MTAgKzY0MywxMCBAQCBTRUxFQ1QgamRvYy0+J2d1aWQnLCBqZG9jLT4nbmFtZScgRlJPTSBhcGkg V0hFUkUgamRvYyBAQCAnJC50YWdzWypdID09ICJxdWkiJzsKICAgIDxsaXRlcmFsPnZhbFsnYSdd PC9saXRlcmFsPiwgYW5kIDxsaXRlcmFsPnZhbFsnYSddWydiJ108L2xpdGVyYWw+IGlzIGFuCiAg ICBvYmplY3QuIElmIGFueSA8bGl0ZXJhbD52YWxbJ2EnXTwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+ dmFsWydhJ11bJ2InXTwvbGl0ZXJhbD4KICAgIGlzIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGJlIGNy ZWF0ZWQgYXMgYW4gZW1wdHkgb2JqZWN0IGFuZCBmaWxsZWQgYXMKLSAgIG5lY2Vzc2FyeS4gSG93 ZXZlciwgaWYgYW55IDxsaXRlcmFsPnZhbDwvbGl0ZXJhbD4gaXRzZWxmIG9yIG9uZSBvZiB0aGUK LSAgIGludGVybWVkaWFyeSB2YWx1ZXMgaXMgZGVmaW5lZCBhcyBhIG5vbi1vYmplY3Qgc3VjaCBh cyBhIHN0cmluZywgbnVtYmVyLCBvcgotICAgPGxpdGVyYWw+anNvbmI8L2xpdGVyYWw+IDxsaXRl cmFsPm51bGw8L2xpdGVyYWw+LCB0cmF2ZXJzYWwgY2Fubm90IHByb2NlZWQgc28KLSAgIGFuIGVy cm9yIGlzIHJhaXNlZCBhbmQgdGhlIHRyYW5zYWN0aW9uIGFib3J0ZWQuCisgICBuZWNlc3Nhcnku IEhvd2V2ZXIsIGlmIGEgdGV4dCBzdWJzY3JpcHQgKGtleSBhY2Nlc3MpIGlzIGFwcGxpZWQgdG8g YSBub24tb2JqZWN0CisgICA8bGl0ZXJhbD52YWw8L2xpdGVyYWw+LCB0cmF2ZXJzYWwgY2Fubm90 IHByb2NlZWQgc28gYW4gZXJyb3IgaXMgcmFpc2VkLiBJbnRlZ2VyCisgICBzdWJzY3JpcHRzIG9u IGFueSBub24tYXJyYXkgPGxpdGVyYWw+dmFsPC9saXRlcmFsPiB1c2UgbGF4IG1vZGUgYXMgZGVz Y3JpYmVkCisgICBhYm92ZSwgdHJlYXRpbmcgdGhlIHZhbHVlIGFzIGEgc2luZ2xlLWVsZW1lbnQg YXJyYXkuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTY3Miw2ICs2ODAsMTUgQEAgU0VMRUNU ICogRlJPTSB0YWJsZV9uYW1lIFdIRVJFIGpzb25iX2ZpZWxkWydrZXknXSA9ICcidmFsdWUiJzsK IC0tIE51bWVyaWMgc3Vic2NyaXB0cyBhcmUgdHJ1bmNhdGVkIHRvd2FyZCB6ZXJvCiBTRUxFQ1Qg KCdbMSwgMiwgM10nOjpqc29uYilbMS43XTsgIC0tIHJldHVybnMgMgogCistLSBJbnRlZ2VyIHN1 YnNjcmlwdCBvbiBhIG5vbi1hcnJheSB2YWx1ZSAobGF4IG1vZGUpCitTRUxFQ1QgKCd7ImEiOiAx fSc6Ompzb25iKVswXTsgICAgIC0tIHJldHVybnMgeyJhIjogMX0KK1NFTEVDVCAoJyJoZWxsbyIn Ojpqc29uYilbLTFdOyAgICAtLSByZXR1cm5zICJoZWxsbyIKK1NFTEVDVCAoJ3siYSI6IDF9Jzo6 anNvbmIpWzFdOyAgICAgLS0gcmV0dXJucyBOVUxMIChvdXQtb2YtYm91bmRzKQorCistLSBMYXgg bW9kZSBhbHNvIHdvcmtzIGZvciBhc3NpZ25tZW50CitVUERBVEUgdGFibGVfbmFtZSBTRVQganNv bmJfZmllbGRbJ2EnXVswXSA9ICcieCInOworLS0gSWYganNvbmJfZmllbGRbJ2EnXSBpcyAiaGVs bG8iLCBpdCBiZWNvbWVzICJ4IgorCiA8L3Byb2dyYW1saXN0aW5nPgogCiAgICA8dHlwZT5qc29u YjwvdHlwZT4gYXNzaWdubWVudCB2aWEgc3Vic2NyaXB0aW5nIGhhbmRsZXMgYSBmZXcgZWRnZSBj YXNlcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25ic3Vicy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25ic3Vicy5jCmluZGV4IGIxMTBkMzAyOThkLi5lZjI0MGFl NzIzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25ic3Vicy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYnN1YnMuYwpAQCAtMjYxLDcgKzI2MSw4IEBAIGpz b25iX3N1YnNjcmlwdF9mZXRjaChFeHByU3RhdGUgKnN0YXRlLAogCQkJCQkJCQkJICB3b3Jrc3Bh Y2UtPmluZGV4LAogCQkJCQkJCQkJICBzYnNyZWZzdGF0ZS0+bnVtdXBwZXIsCiAJCQkJCQkJCQkg IG9wLT5yZXNudWxsLAotCQkJCQkJCQkJICBmYWxzZSk7CisJCQkJCQkJCQkgIGZhbHNlLAorCQkJ CQkJCQkJICB3b3Jrc3BhY2UtPmluZGV4T2lkKTsKIH0KIAogLyoKQEAgLTMyMCw3ICszMjEsOCBA QCBqc29uYl9zdWJzY3JpcHRfYXNzaWduKEV4cHJTdGF0ZSAqc3RhdGUsCiAJKm9wLT5yZXN2YWx1 ZSA9IGpzb25iX3NldF9lbGVtZW50KGpzb25iU291cmNlLAogCQkJCQkJCQkJICB3b3Jrc3BhY2Ut PmluZGV4LAogCQkJCQkJCQkJICBzYnNyZWZzdGF0ZS0+bnVtdXBwZXIsCi0JCQkJCQkJCQkgICZy ZXBsYWNldmFsdWUpOworCQkJCQkJCQkJICAmcmVwbGFjZXZhbHVlLAorCQkJCQkJCQkJICB3b3Jr c3BhY2UtPmluZGV4T2lkKTsKIAkvKiBUaGUgcmVzdWx0IGlzIG5ldmVyIE5VTEwsIHNvIG5vIG5l ZWQgdG8gY2hhbmdlICpvcC0+cmVzbnVsbCAqLwogfQogCkBAIC0zNTMsNyArMzU1LDggQEAganNv bmJfc3Vic2NyaXB0X2ZldGNoX29sZChFeHByU3RhdGUgKnN0YXRlLAogCQkJCQkJCQkJCQkJICAg c2JzcmVmc3RhdGUtPnVwcGVyaW5kZXgsCiAJCQkJCQkJCQkJCQkgICBzYnNyZWZzdGF0ZS0+bnVt dXBwZXIsCiAJCQkJCQkJCQkJCQkgICAmc2JzcmVmc3RhdGUtPnByZXZudWxsLAotCQkJCQkJCQkJ CQkJICAgZmFsc2UpOworCQkJCQkJCQkJCQkJICAgZmFsc2UsCisJCQkJCQkJCQkJCQkgICBOVUxM KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3Mu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYwppbmRleCBkNWI2NGQ3ZmNhNS4u YWM5ZjRkNTdhY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3Mu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAgLTQ4MCwxNSArNDgw LDI1IEBAIHN0YXRpYyB2b2lkIEl0ZXJhdG9yQ29uY2F0KEpzb25iSXRlcmF0b3IgKippdDEsIEpz b25iSXRlcmF0b3IgKippdDIsCiBzdGF0aWMgdm9pZCBzZXRQYXRoKEpzb25iSXRlcmF0b3IgKipp dCwgY29uc3QgRGF0dW0gKnBhdGhfZWxlbXMsCiAJCQkJCWNvbnN0IGJvb2wgKnBhdGhfbnVsbHMs IGludCBwYXRoX2xlbiwKIAkJCQkJSnNvbmJJblN0YXRlICpzdCwgaW50IGxldmVsLCBKc29uYlZh bHVlICpuZXd2YWwsCi0JCQkJCWludCBvcF90eXBlKTsKKwkJCQkJaW50IG9wX3R5cGUsIGNvbnN0 IE9pZCAqaW5kZXhfb2lkKTsKIHN0YXRpYyB2b2lkIHNldFBhdGhPYmplY3QoSnNvbmJJdGVyYXRv ciAqKml0LCBjb25zdCBEYXR1bSAqcGF0aF9lbGVtcywKIAkJCQkJCSAgY29uc3QgYm9vbCAqcGF0 aF9udWxscywgaW50IHBhdGhfbGVuLCBKc29uYkluU3RhdGUgKnN0LAogCQkJCQkJICBpbnQgbGV2 ZWwsCi0JCQkJCQkgIEpzb25iVmFsdWUgKm5ld3ZhbCwgdWludDMyIG5wYWlycywgaW50IG9wX3R5 cGUpOworCQkJCQkJICBKc29uYlZhbHVlICpuZXd2YWwsIHVpbnQzMiBucGFpcnMsIGludCBvcF90 eXBlLAorCQkJCQkJICBjb25zdCBPaWQgKmluZGV4X29pZCk7CiBzdGF0aWMgdm9pZCBzZXRQYXRo QXJyYXkoSnNvbmJJdGVyYXRvciAqKml0LCBjb25zdCBEYXR1bSAqcGF0aF9lbGVtcywKIAkJCQkJ CSBjb25zdCBib29sICpwYXRoX251bGxzLCBpbnQgcGF0aF9sZW4sIEpzb25iSW5TdGF0ZSAqc3Qs CiAJCQkJCQkgaW50IGxldmVsLAotCQkJCQkJIEpzb25iVmFsdWUgKm5ld3ZhbCwgdWludDMyIG5l bGVtcywgaW50IG9wX3R5cGUpOworCQkJCQkJIEpzb25iVmFsdWUgKm5ld3ZhbCwgdWludDMyIG5l bGVtcywgaW50IG9wX3R5cGUsCisJCQkJCQkgY29uc3QgT2lkICppbmRleF9vaWQpOworc3RhdGlj IEpzb25iICp3cmFwX2NvbnRhaW5lcl9pbl9hcnJheShKc29uYkNvbnRhaW5lciAqY29udGFpbmVy KTsKK3N0YXRpYyBKc29uYiAqd3JhcF9zY2FsYXJfaW5fYXJyYXkoSnNvbmJWYWx1ZSAqc2NhbGFy KTsKK3N0YXRpYyBib29sIGlzX2xheF9zdWJzY3JpcHRfaW5fYm91bmRzKERhdHVtIHN1YnNjcmlw dCwgbG9uZyAqaW5kZXhfb3V0KTsKK3N0YXRpYyB2b2lkIHNldFBhdGhfbGF4X2Fzc2lnbm1lbnQo RGF0dW0gc3Vic2NyaXB0LCBpbnQgbGV2ZWwsIGludCBwYXRoX2xlbiwKKwkJCQkJCQkJICAgSnNv bmJJblN0YXRlICpzdCwgSnNvbmJWYWx1ZSAqbmV3dmFsLCBpbnQgb3BfdHlwZSwKKwkJCQkJCQkJ ICAgSnNvbmIgKnZhbHVlLCBib29sIGlzX3NjYWxhciwKKwkJCQkJCQkJICAgY29uc3QgRGF0dW0g KnBhdGhfZWxlbXMsIGNvbnN0IGJvb2wgKnBhdGhfbnVsbHMsCisJCQkJCQkJCSAgIGNvbnN0IE9p ZCAqaW5kZXhfb2lkKTsKIAogLyogZnVuY3Rpb24gc3VwcG9ydGluZyBpdGVyYXRlX2pzb25fdmFs dWVzICovCiBzdGF0aWMgSnNvblBhcnNlRXJyb3JUeXBlIGl0ZXJhdGVfdmFsdWVzX3NjYWxhcih2 b2lkICpzdGF0ZSwgY2hhciAqdG9rZW4sIEpzb25Ub2tlblR5cGUgdG9rZW50eXBlKTsKQEAgLTE1 MTksNyArMTUyOSw3IEBAIGdldF9qc29uYl9wYXRoX2FsbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bywgYm9vbCBhc190ZXh0KQogCiAJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihwYXRoLCBURVhU T0lELCAmcGF0aHRleHQsICZwYXRobnVsbHMsICZucGF0aCk7CiAKLQlyZXMgPSBqc29uYl9nZXRf ZWxlbWVudChqYiwgcGF0aHRleHQsIG5wYXRoLCAmaXNudWxsLCBhc190ZXh0KTsKKwlyZXMgPSBq c29uYl9nZXRfZWxlbWVudChqYiwgcGF0aHRleHQsIG5wYXRoLCAmaXNudWxsLCBhc190ZXh0LCBO VUxMKTsKIAogCWlmIChpc251bGwpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CkBAIC0xNTI3LDggKzE1 MzcsMTQyIEBAIGdldF9qc29uYl9wYXRoX2FsbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9v bCBhc190ZXh0KQogCQlQR19SRVRVUk5fREFUVU0ocmVzKTsKIH0KIAorLyoKKyAqIENoZWNrIHdo ZXRoZXIgdGhlIHN1YnNjcmlwdCBhdCB0aGUgZ2l2ZW4gbGV2ZWwgaXMgYSBsYXggYXJyYXkgYWNj ZXNzCisgKiAoaW50ZWdlciBvciBudW1lcmljIGluZGV4LCBhcyBvcHBvc2VkIHRvIGEgdGV4dCBr ZXkgZm9yIGZpZWxkIGFjY2VzcykuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraXNfbGF4X2Fy cmF5X2FjY2Vzcyhjb25zdCBPaWQgKmluZGV4X29pZCwgaW50IGxldmVsKQoreworCXJldHVybiBp bmRleF9vaWQgIT0gTlVMTCAmJgorCQkoaW5kZXhfb2lkW2xldmVsXSA9PSBJTlQ0T0lEIHx8IGlu ZGV4X29pZFtsZXZlbF0gPT0gTlVNRVJJQ09JRCk7Cit9CisKKy8qCisgKiBXcmFwIGEganNvbmIg b2JqZWN0IGluIGEgc2luZ2xlLWVsZW1lbnQgYXJyYXkuCisgKiBVc2VkIGZvciBvdXQtb2YtYm91 bmRzIGxheC1tb2RlIGFzc2lnbm1lbnQgKHJlYWRzIHJldHVybiBOVUxMIGluc3RlYWQpLgorICov CitzdGF0aWMgSnNvbmIgKgord3JhcF9jb250YWluZXJfaW5fYXJyYXkoSnNvbmJDb250YWluZXIg KmNvbnRhaW5lcikKK3sKKwlKc29uYkluU3RhdGUgd3JhcFN0YXRlID0gezB9OworCUpzb25iSXRl cmF0b3IgKml0ID0gSnNvbmJJdGVyYXRvckluaXQoY29udGFpbmVyKTsKKwlKc29uYkl0ZXJhdG9y VG9rZW4gdG9rOworCUpzb25iVmFsdWUJdjsKKworCXB1c2hKc29uYlZhbHVlKCZ3cmFwU3RhdGUs IFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisJd2hpbGUgKCh0b2sgPSBKc29uYkl0ZXJhdG9yTmV4 dCgmaXQsICZ2LCBmYWxzZSkpICE9IFdKQl9ET05FKQorCQlwdXNoSnNvbmJWYWx1ZSgmd3JhcFN0 YXRlLCB0b2ssIHRvayA8IFdKQl9CRUdJTl9BUlJBWSA/ICZ2IDogTlVMTCk7CisJcHVzaEpzb25i VmFsdWUoJndyYXBTdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisKKwlyZXR1cm4gSnNvbmJW YWx1ZVRvSnNvbmIod3JhcFN0YXRlLnJlc3VsdCk7Cit9CisKKy8qCisgKiBXcmFwIGEgc2NhbGFy IEpzb25iVmFsdWUgaW4gYSBzaW5nbGUtZWxlbWVudCwgbm9uLXJhdyBhcnJheS4KKyAqIFVzZWQg Zm9yIG91dC1vZi1ib3VuZHMgbGF4LW1vZGUgYXNzaWdubWVudCAocmVhZHMgcmV0dXJuIE5VTEwg aW5zdGVhZCkuCisgKi8KK3N0YXRpYyBKc29uYiAqCit3cmFwX3NjYWxhcl9pbl9hcnJheShKc29u YlZhbHVlICpzY2FsYXIpCit7CisJSnNvbmJWYWx1ZQl3cmFwcGVyOworCisJd3JhcHBlci50eXBl ID0gamJ2QXJyYXk7CisJd3JhcHBlci52YWwuYXJyYXkubkVsZW1zID0gMTsKKwl3cmFwcGVyLnZh bC5hcnJheS5lbGVtcyA9IHNjYWxhcjsKKwl3cmFwcGVyLnZhbC5hcnJheS5yYXdTY2FsYXIgPSBm YWxzZTsKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIoJndyYXBwZXIpOworfQorCisvKgorICog UGFyc2UgYW4gaW50ZWdlciBzdWJzY3JpcHQgYW5kIGNoZWNrIGlmIGl0J3MgaW4tYm91bmRzIGZv ciBhCisgKiBzaW5nbGUtZWxlbWVudCBhcnJheSAoaW5kZXggMCBvciAtMSkuCisgKi8KK3N0YXRp YyBib29sCitpc19sYXhfc3Vic2NyaXB0X2luX2JvdW5kcyhEYXR1bSBzdWJzY3JpcHQsIGxvbmcg KmluZGV4X291dCkKK3sKKwljaGFyCSAgICppbmRleHRleHQgPSBUZXh0RGF0dW1HZXRDU3RyaW5n KHN1YnNjcmlwdCk7CisJY2hhcgkgICAqZW5kcHRyOworCWxvbmcJCWluZGV4OworCisJaW5kZXgg PSBzdHJ0b2woaW5kZXh0ZXh0LCAmZW5kcHRyLCAxMCk7CisJaWYgKGluZGV4X291dCkKKwkJKmlu ZGV4X291dCA9IGluZGV4OworCXJldHVybiAoaW5kZXggPT0gMCB8fCBpbmRleCA9PSAtMSk7Cit9 CisKKy8qCisgKiBIYW5kbGUgbGF4IGFycmF5IGFjY2VzcyBvbiBhIG5vbi1hcnJheSB2YWx1ZSBk dXJpbmcgYXNzaWdubWVudC4KKyAqIFRoZSB2YWx1ZSBtdXN0IGFscmVhZHkgYmUgbWF0ZXJpYWxp emVkIGFzIGEgSnNvbmIuCisgKgorICogRm9yIGluLWJvdW5kcyAoMC8tMSk6IHZpcnR1YWwgd3Jh cCAtIGVpdGhlciBwdXNoIG5ld3ZhbCAodGVybWluYWwpIG9yCisgKiByZWN1cnNlIGF0IGxldmVs KzEgKGludGVybWVkaWF0ZSkuCisgKiBGb3Igb3V0LW9mLWJvdW5kczogYWN0dWFsIHdyYXAgYW5k IHJlY3Vyc2UgYXQgc2FtZSBsZXZlbC4KKyAqLworc3RhdGljIHZvaWQKK3NldFBhdGhfbGF4X2Fz c2lnbm1lbnQoRGF0dW0gc3Vic2NyaXB0LCBpbnQgbGV2ZWwsIGludCBwYXRoX2xlbiwKKwkJCQkJ ICAgSnNvbmJJblN0YXRlICpzdCwgSnNvbmJWYWx1ZSAqbmV3dmFsLCBpbnQgb3BfdHlwZSwKKwkJ CQkJICAgSnNvbmIgKnZhbHVlLCBib29sIGlzX3NjYWxhciwKKwkJCQkJICAgY29uc3QgRGF0dW0g KnBhdGhfZWxlbXMsIGNvbnN0IGJvb2wgKnBhdGhfbnVsbHMsCisJCQkJCSAgIGNvbnN0IE9pZCAq aW5kZXhfb2lkKQoreworCWxvbmcJCWluZGV4OworCUpzb25iSXRlcmF0b3IgKm5ld2l0OworCisJ aWYgKGlzX2xheF9zdWJzY3JpcHRfaW5fYm91bmRzKHN1YnNjcmlwdCwgJmluZGV4KSkKKwl7CisJ CS8qIEluLWJvdW5kczogdmlydHVhbCB3cmFwICovCisJCWlmIChsZXZlbCA9PSBwYXRoX2xlbiAt IDEpCisJCXsKKwkJCS8qIFRlcm1pbmFsOiByZXBsYWNlIHdpdGggbmV3dmFsIGRpcmVjdGx5ICov CisJCQlpZiAobmV3dmFsICE9IE5VTEwgJiYgIShvcF90eXBlICYgSkJfUEFUSF9ERUxFVEUpKQor CQkJCXB1c2hKc29uYlZhbHVlKHN0LCBXSkJfVkFMVUUsIG5ld3ZhbCk7CisJCX0KKwkJZWxzZQor CQl7CisJCQkvKiBJbnRlcm1lZGlhdGU6IHNraXAgdGhpcyBsZXZlbCwgcmVjdXJzZSBhdCBsZXZl bCsxICovCisJCQluZXdpdCA9IEpzb25iSXRlcmF0b3JJbml0KCZ2YWx1ZS0+cm9vdCk7CisJCQlz ZXRQYXRoKCZuZXdpdCwgcGF0aF9lbGVtcywgcGF0aF9udWxscywgcGF0aF9sZW4sCisJCQkJCXN0 LCBsZXZlbCArIDEsIG5ld3ZhbCwgb3BfdHlwZSwgaW5kZXhfb2lkKTsKKwkJfQorCX0KKwllbHNl CisJeworCQkvKiBPdXQtb2YtYm91bmRzOiBhY3R1YWwgd3JhcCAqLworCQlKc29uYgkgICAqd3Jh cHBlZDsKKworCQlpZiAoaXNfc2NhbGFyKQorCQl7CisJCQkvKgorCQkJICogU2NhbGFyIGlzIHN0 b3JlZCBhcyByYXdTY2FsYXIgYXJyYXkgaW4gSnNvbmIuICBFeHRyYWN0IGl0IGJ5CisJCQkgKiBp dGVyYXRpbmc6IFdKQl9CRUdJTl9BUlJBWSwgV0pCX0VMRU0gKHRoZSBzY2FsYXIpLCAuLi4KKwkJ CSAqLworCQkJSnNvbmJJdGVyYXRvciAqZXh0cmFjdF9pdCA9IEpzb25iSXRlcmF0b3JJbml0KCZ2 YWx1ZS0+cm9vdCk7CisJCQlKc29uYlZhbHVlCXNjYWxhcjsKKworCQkJSnNvbmJJdGVyYXRvck5l eHQoJmV4dHJhY3RfaXQsICZzY2FsYXIsIGZhbHNlKTsgLyogV0pCX0JFR0lOX0FSUkFZICovCisJ CQlKc29uYkl0ZXJhdG9yTmV4dCgmZXh0cmFjdF9pdCwgJnNjYWxhciwgZmFsc2UpOyAvKiBXSkJf RUxFTSAqLworCQkJd3JhcHBlZCA9IHdyYXBfc2NhbGFyX2luX2FycmF5KCZzY2FsYXIpOworCQl9 CisJCWVsc2UKKwkJCXdyYXBwZWQgPSB3cmFwX2NvbnRhaW5lcl9pbl9hcnJheSgmdmFsdWUtPnJv b3QpOworCisJCW5ld2l0ID0gSnNvbmJJdGVyYXRvckluaXQoJndyYXBwZWQtPnJvb3QpOworCQlz ZXRQYXRoKCZuZXdpdCwgcGF0aF9lbGVtcywgcGF0aF9udWxscywgcGF0aF9sZW4sCisJCQkJc3Qs IGxldmVsLCBuZXd2YWwsIG9wX3R5cGUsIGluZGV4X29pZCk7CisJfQorfQorCisvKgorICogRmV0 Y2ggYW4gZWxlbWVudCBmcm9tIGEganNvbmIgdmFsdWUgdXNpbmcgYSBwYXRoIG9mIHN1YnNjcmlw dHMuCisgKgorICogSWYgaW5kZXhfb2lkIGlzIG5vbi1OVUxMLCBpdCBwcm92aWRlcyB0aGUgdHlw ZSBPSUQgb2YgZWFjaCBzdWJzY3JpcHQKKyAqIHRvIGVuYWJsZSBTUUwvSlNPTiBsYXggbW9kZTog aW50ZWdlciBzdWJzY3JpcHRzIG9uIG5vbi1hcnJheSB2YWx1ZXMKKyAqIHRyZWF0IHRoZSB2YWx1 ZSBhcyBhIHNpbmdsZS1lbGVtZW50IGFycmF5LiAgSWYgTlVMTCwgbGF4IG1vZGUgaXMgZGlzYWJs ZWQuCisgKi8KIERhdHVtCi1qc29uYl9nZXRfZWxlbWVudChKc29uYiAqamIsIGNvbnN0IERhdHVt ICpwYXRoLCBpbnQgbnBhdGgsIGJvb2wgKmlzbnVsbCwgYm9vbCBhc190ZXh0KQoranNvbmJfZ2V0 X2VsZW1lbnQoSnNvbmIgKmpiLCBjb25zdCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICpp c251bGwsCisJCQkJICBib29sIGFzX3RleHQsIGNvbnN0IE9pZCAqaW5kZXhfb2lkKQogewogCUpz b25iQ29udGFpbmVyICpjb250YWluZXIgPSAmamItPnJvb3Q7CiAJSnNvbmJWYWx1ZSAqamJ2cCA9 IE5VTEw7CkBAIC0xNTQ2LDkgKzE2OTAsMTMgQEAganNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpi LCBjb25zdCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwsIGJvb2wgYXMKIAll bHNlCiAJewogCQlBc3NlcnQoSkJfUk9PVF9JU19BUlJBWShqYikgJiYgSkJfUk9PVF9JU19TQ0FM QVIoamIpKTsKLQkJLyogRXh0cmFjdCB0aGUgc2NhbGFyIHZhbHVlLCBpZiBpdCBpcyB3aGF0IHdl J2xsIHJldHVybiAqLwotCQlpZiAobnBhdGggPD0gMCkKLQkJCWpidnAgPSBnZXRJdGhKc29uYlZh bHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsIDApOworCisJCS8qCisJCSAqIEV4dHJhY3QgdGhl IHNjYWxhciB2YWx1ZS4gIFdlIG5lZWQgdGhpcyBib3RoIHdoZW4gcmV0dXJuaW5nIHRoZQorCQkg KiBzY2FsYXIgZGlyZWN0bHkgKG5wYXRoIDw9IDApIGFuZCBmb3IgbGF4IG1vZGUgaW4tYm91bmRz IGFjY2VzcworCQkgKiB3aGljaCBhbHNvIHJldHVybnMgdGhlIHNjYWxhciAobnBhdGggPiAwLCBp bmRleCAwIG9yIC0xKS4KKwkJICovCisJCWpidnAgPSBnZXRJdGhKc29uYlZhbHVlRnJvbUNvbnRh aW5lcihjb250YWluZXIsIDApOwogCX0KIAogCS8qCkBAIC0xNTc2LDYgKzE3MjQsNDggQEAganNv bmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBjb25zdCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBi b29sICppc251bGwsIGJvb2wgYXMKIAogCWZvciAoaSA9IDA7IGkgPCBucGF0aDsgaSsrKQogCXsK KwkJaWYgKGlzX2xheF9hcnJheV9hY2Nlc3MoaW5kZXhfb2lkLCBpKSAmJiAhaGF2ZV9hcnJheSkK KwkJeworCQkJLyoKKwkJCSAqIFNRTC9KU09OIGxheCBtb2RlOiBpbnRlZ2VyIHN1YnNjcmlwdCBv biBhIG5vbi1hcnJheSB2YWx1ZQorCQkJICogKHNjYWxhciBvciBvYmplY3QpLiAgVmlydHVhbCB3 cmFwOiB0cmVhdCBhcyBzaW5nbGUtZWxlbWVudAorCQkJICogYXJyYXkuICBJbmRleCAwIG9yIC0x IHJldHVybnMgdGhlIHZhbHVlOyBvdGhlciBpbmRpY2VzIHJldHVybgorCQkJICogTlVMTC4KKwkJ CSAqLworCQkJaWYgKGlzX2xheF9zdWJzY3JpcHRfaW5fYm91bmRzKHBhdGhbaV0sIE5VTEwpKQor CQkJeworCQkJCS8qCisJCQkJICogSW4tYm91bmRzIGZvciB2aXJ0dWFsIHNpbmdsZS1lbGVtZW50 IGFycmF5LgorCQkJCSAqLworCQkJCWlmIChpID09IG5wYXRoIC0gMSkKKwkJCQl7CisJCQkJCS8q CisJCQkJCSAqIFRlcm1pbmFsOiByZXR1cm4gY3VycmVudCB2YWx1ZS4gIEZvciBuZXN0ZWQgb2Jq ZWN0cywKKwkJCQkJICogamJ2cCBpcyBhbHJlYWR5IHNldCBmcm9tIHByZXZpb3VzIGl0ZXJhdGlv bi4gIEZvciByb290CisJCQkJCSAqIGxldmVsIG9iamVjdCwgY3JlYXRlIGpidnAgZnJvbSBqYi4g IEZvciBzY2FsYXJzLCBqYnZwCisJCQkJCSAqIGlzIGFscmVhZHkgc2V0LgorCQkJCQkgKi8KKwkJ CQkJaWYgKGhhdmVfb2JqZWN0ICYmIGpidnAgPT0gTlVMTCkKKwkJCQkJeworCQkJCQkJLyogUm9v dCBsZXZlbCBvYmplY3QgKi8KKwkJCQkJCWpidnAgPSBwYWxsb2Moc2l6ZW9mKEpzb25iVmFsdWUp KTsKKwkJCQkJCWpidnAtPnR5cGUgPSBqYnZCaW5hcnk7CisJCQkJCQlqYnZwLT52YWwuYmluYXJ5 LmRhdGEgPSBjb250YWluZXI7CisJCQkJCQlqYnZwLT52YWwuYmluYXJ5LmxlbiA9IFZBUlNJWkUo amIpIC0gVkFSSERSU1o7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIEludGVy bWVkaWF0ZTogY29udGludWUgdG8gbmV4dCBwYXRoIGVsZW1lbnQgKi8KKwkJCQljb250aW51ZTsK KwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBPdXQtb2YtYm91bmRzOiByZXR1cm4gTlVMTCAq LworCQkJCSppc251bGwgPSB0cnVlOworCQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 CisJCQl9CisJCX0KKwogCQlpZiAoaGF2ZV9vYmplY3QpCiAJCXsKIAkJCXRleHQJICAgKnN1YnNj ciA9IERhdHVtR2V0VGV4dFBQKHBhdGhbaV0pOwpAQCAtMTY3NSw5ICsxODY1LDE2IEBAIGpzb25i X2dldF9lbGVtZW50KEpzb25iICpqYiwgY29uc3QgRGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9v bCAqaXNudWxsLCBib29sIGFzCiAJfQogfQogCisvKgorICogQXNzaWduIGEgdmFsdWUgdG8gYSBq c29uYiBlbGVtZW50IGF0IGEgcGF0aCBvZiBzdWJzY3JpcHRzLgorICoKKyAqIElmIGluZGV4X29p ZCBpcyBub24tTlVMTCwgaXQgcHJvdmlkZXMgdGhlIHR5cGUgT0lEIG9mIGVhY2ggc3Vic2NyaXB0 CisgKiB0byBlbmFibGUgU1FML0pTT04gbGF4IG1vZGU6IGludGVnZXIgc3Vic2NyaXB0cyBvbiBu b24tYXJyYXkgdmFsdWVzCisgKiB0cmVhdCB0aGUgdmFsdWUgYXMgYSBzaW5nbGUtZWxlbWVudCBh cnJheS4gIElmIE5VTEwsIGxheCBtb2RlIGlzIGRpc2FibGVkLgorICovCiBEYXR1bQoganNvbmJf c2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBjb25zdCBEYXR1bSAqcGF0aCwgaW50IHBhdGhfbGVuLAot CQkJCSAgSnNvbmJWYWx1ZSAqbmV3dmFsKQorCQkJCSAgSnNvbmJWYWx1ZSAqbmV3dmFsLCBjb25z dCBPaWQgKmluZGV4X29pZCkKIHsKIAlKc29uYkluU3RhdGUgc3RhdGUgPSB7MH07CiAJSnNvbmJJ dGVyYXRvciAqaXQ7CkBAIC0xNjkwLDcgKzE4ODcsNyBAQCBqc29uYl9zZXRfZWxlbWVudChKc29u YiAqamIsIGNvbnN0IERhdHVtICpwYXRoLCBpbnQgcGF0aF9sZW4sCiAKIAlzZXRQYXRoKCZpdCwg cGF0aCwgcGF0aF9udWxscywgcGF0aF9sZW4sICZzdGF0ZSwgMCwgbmV3dmFsLAogCQkJSkJfUEFU SF9DUkVBVEUgfCBKQl9QQVRIX0ZJTExfR0FQUyB8Ci0JCQlKQl9QQVRIX0NPTlNJU1RFTlRfUE9T SVRJT04pOworCQkJSkJfUEFUSF9DT05TSVNURU5UX1BPU0lUSU9OLCBpbmRleF9vaWQpOwogCiAJ cGZyZWUocGF0aF9udWxscyk7CiAKQEAgLTQ4ODYsNyArNTA4Myw3IEBAIGpzb25iX3NldChQR19G VU5DVElPTl9BUkdTKQogCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoJmluLT5yb290KTsKIAogCXNl dFBhdGgoJml0LCBwYXRoX2VsZW1zLCBwYXRoX251bGxzLCBwYXRoX2xlbiwgJnN0LAotCQkJMCwg Jm5ld3ZhbCwgY3JlYXRlID8gSkJfUEFUSF9DUkVBVEUgOiBKQl9QQVRIX1JFUExBQ0UpOworCQkJ MCwgJm5ld3ZhbCwgY3JlYXRlID8gSkJfUEFUSF9DUkVBVEUgOiBKQl9QQVRIX1JFUExBQ0UsIE5V TEwpOwogCiAJUEdfUkVUVVJOX0pTT05CX1AoSnNvbmJWYWx1ZVRvSnNvbmIoc3QucmVzdWx0KSk7 CiB9CkBAIC00OTkwLDcgKzUxODcsNyBAQCBqc29uYl9kZWxldGVfcGF0aChQR19GVU5DVElPTl9B UkdTKQogCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoJmluLT5yb290KTsKIAogCXNldFBhdGgoJml0 LCBwYXRoX2VsZW1zLCBwYXRoX251bGxzLCBwYXRoX2xlbiwgJnN0LAotCQkJMCwgTlVMTCwgSkJf UEFUSF9ERUxFVEUpOworCQkJMCwgTlVMTCwgSkJfUEFUSF9ERUxFVEUsIE5VTEwpOwogCiAJUEdf UkVUVVJOX0pTT05CX1AoSnNvbmJWYWx1ZVRvSnNvbmIoc3QucmVzdWx0KSk7CiB9CkBAIC01MDMy LDcgKzUyMjksNyBAQCBqc29uYl9pbnNlcnQoUEdfRlVOQ1RJT05fQVJHUykKIAlpdCA9IEpzb25i SXRlcmF0b3JJbml0KCZpbi0+cm9vdCk7CiAKIAlzZXRQYXRoKCZpdCwgcGF0aF9lbGVtcywgcGF0 aF9udWxscywgcGF0aF9sZW4sICZzdCwgMCwgJm5ld3ZhbCwKLQkJCWFmdGVyID8gSkJfUEFUSF9J TlNFUlRfQUZURVIgOiBKQl9QQVRIX0lOU0VSVF9CRUZPUkUpOworCQkJYWZ0ZXIgPyBKQl9QQVRI X0lOU0VSVF9BRlRFUiA6IEpCX1BBVEhfSU5TRVJUX0JFRk9SRSwgTlVMTCk7CiAKIAlQR19SRVRV Uk5fSlNPTkJfUChKc29uYlZhbHVlVG9Kc29uYihzdC5yZXN1bHQpKTsKIH0KQEAgLTUxNjYsMTMg KzUzNjMsMTggQEAgSXRlcmF0b3JDb25jYXQoSnNvbmJJdGVyYXRvciAqKml0MSwgSnNvbmJJdGVy YXRvciAqKml0MiwKICAqIGFuZCBhIG5lZ2F0aXZlIGluZGV4IG91dCBvZiB0aGUgcmFuZ2UsIHNv IHRoaXMgYmVoYXZpb3Igd2lsbCBiZSBwcmV2ZW50ZWQKICAqIGFuZCByZXR1cm4gYW4gZXJyb3Iu CiAgKgorICogSWYgaW5kZXhfb2lkIGlzIG5vbi1OVUxMLCBpdCBwcm92aWRlcyB0aGUgdHlwZSBP SUQgb2YgZWFjaCBzdWJzY3JpcHQKKyAqIHRvIGVuYWJsZSBTUUwvSlNPTiBsYXggbW9kZTogaW50 ZWdlciBzdWJzY3JpcHRzIG9uIG5vbi1hcnJheSB2YWx1ZXMKKyAqIHRyZWF0IHRoZSB2YWx1ZSBh cyBhIHNpbmdsZS1lbGVtZW50IGFycmF5LiAgSWYgTlVMTCwgbGF4IG1vZGUgaXMgZGlzYWJsZWQu CisgKgogICogQWxsIHBhdGggZWxlbWVudHMgYmVmb3JlIHRoZSBsYXN0IG11c3QgYWxyZWFkeSBl eGlzdAogICogd2hhdGV2ZXIgYml0cyBpbiBvcF90eXBlIGFyZSBzZXQsIG9yIG5vdGhpbmcgaXMg ZG9uZS4KICAqLwogc3RhdGljIHZvaWQKIHNldFBhdGgoSnNvbmJJdGVyYXRvciAqKml0LCBjb25z dCBEYXR1bSAqcGF0aF9lbGVtcywKIAkJY29uc3QgYm9vbCAqcGF0aF9udWxscywgaW50IHBhdGhf bGVuLAotCQlKc29uYkluU3RhdGUgKnN0LCBpbnQgbGV2ZWwsIEpzb25iVmFsdWUgKm5ld3ZhbCwg aW50IG9wX3R5cGUpCisJCUpzb25iSW5TdGF0ZSAqc3QsIGludCBsZXZlbCwgSnNvbmJWYWx1ZSAq bmV3dmFsLCBpbnQgb3BfdHlwZSwKKwkJY29uc3QgT2lkICppbmRleF9vaWQpCiB7CiAJSnNvbmJW YWx1ZQl2OwogCUpzb25iSXRlcmF0b3JUb2tlbiByOwpAQCAtNTE5MSw2ICs1MzkzLDI2IEBAIHNl dFBhdGgoSnNvbmJJdGVyYXRvciAqKml0LCBjb25zdCBEYXR1bSAqcGF0aF9lbGVtcywKIAl7CiAJ CWNhc2UgV0pCX0JFR0lOX0FSUkFZOgogCisJCQkvKgorCQkJICogU1FML0pTT04gbGF4IG1vZGU6 IGlmIHRoaXMgc3Vic2NyaXB0IGlzIGFuIGVsZW1lbnQgYWNjZXNzCisJCQkgKiAoaW50ZWdlcikg YW5kIHRoZSB2YWx1ZSBpcyBhIHJhdyBzY2FsYXIsIGhhbmRsZSBsYXggYXNzaWdubWVudC4KKwkJ CSAqLworCQkJaWYgKGlzX2xheF9hcnJheV9hY2Nlc3MoaW5kZXhfb2lkLCBsZXZlbCkgJiYgdi52 YWwuYXJyYXkucmF3U2NhbGFyKQorCQkJeworCQkJCUpzb25iVmFsdWUJc2NhbGFyX3Y7CisJCQkJ SnNvbmIJICAgKnNjYWxhcl9qYjsKKworCQkJCS8qIENvbnN1bWUgc2NhbGFyICsgZW5kX2FycmF5 IGZyb20gb3JpZ2luYWwgaXRlcmF0b3IgKi8KKwkJCQlKc29uYkl0ZXJhdG9yTmV4dChpdCwgJnNj YWxhcl92LCBmYWxzZSk7CS8qIFdKQl9FTEVNICovCisJCQkJSnNvbmJJdGVyYXRvck5leHQoaXQs ICZ2LCBmYWxzZSk7CS8qIFdKQl9FTkRfQVJSQVkgKi8KKworCQkJCXNjYWxhcl9qYiA9IEpzb25i VmFsdWVUb0pzb25iKCZzY2FsYXJfdik7CisJCQkJc2V0UGF0aF9sYXhfYXNzaWdubWVudChwYXRo X2VsZW1zW2xldmVsXSwgbGV2ZWwsIHBhdGhfbGVuLAorCQkJCQkJCQkJICAgc3QsIG5ld3ZhbCwg b3BfdHlwZSwgc2NhbGFyX2piLCB0cnVlLAorCQkJCQkJCQkJICAgcGF0aF9lbGVtcywgcGF0aF9u dWxscywgaW5kZXhfb2lkKTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJLyoKIAkJCSAqIElmIGlu c3RydWN0ZWQgY29tcGxhaW4gYWJvdXQgYXR0ZW1wdHMgdG8gcmVwbGFjZSB3aXRoaW4gYSByYXcK IAkJCSAqIHNjYWxhciB2YWx1ZS4gVGhpcyBoYXBwZW5zIGV2ZW4gd2hlbiBjdXJyZW50IGxldmVs IGlzIGVxdWFsIHRvCkBAIC01MjA3LDE1ICs1NDI5LDU3IEBAIHNldFBhdGgoSnNvbmJJdGVyYXRv ciAqKml0LCBjb25zdCBEYXR1bSAqcGF0aF9lbGVtcywKIAogCQkJcHVzaEpzb25iVmFsdWUoc3Qs IHIsIE5VTEwpOwogCQkJc2V0UGF0aEFycmF5KGl0LCBwYXRoX2VsZW1zLCBwYXRoX251bGxzLCBw YXRoX2xlbiwgc3QsIGxldmVsLAotCQkJCQkJIG5ld3ZhbCwgdi52YWwuYXJyYXkubkVsZW1zLCBv cF90eXBlKTsKKwkJCQkJCSBuZXd2YWwsIHYudmFsLmFycmF5Lm5FbGVtcywgb3BfdHlwZSwKKwkJ CQkJCSBpbmRleF9vaWQpOwogCQkJciA9IEpzb25iSXRlcmF0b3JOZXh0KGl0LCAmdiwgZmFsc2Up OwogCQkJQXNzZXJ0KHIgPT0gV0pCX0VORF9BUlJBWSk7CiAJCQlwdXNoSnNvbmJWYWx1ZShzdCwg ciwgTlVMTCk7CiAJCQlicmVhazsKIAkJY2FzZSBXSkJfQkVHSU5fT0JKRUNUOgorCisJCQkvKgor CQkJICogU1FML0pTT04gbGF4IG1vZGU6IGlmIHRoaXMgc3Vic2NyaXB0IGlzIGFuIGVsZW1lbnQg YWNjZXNzCisJCQkgKiAoaW50ZWdlcikgb24gYW4gb2JqZWN0LCBoYW5kbGUgYWNjb3JkaW5nIHRv IHRoZSBpbmRleCB2YWx1ZSBhbmQKKwkJCSAqIHdoZXRoZXIgdGhpcyBpcyBhbiBpbnRlcm1lZGlh dGUgb3IgdGVybWluYWwgc3Vic2NyaXB0LgorCQkJICovCisJCQlpZiAoaXNfbGF4X2FycmF5X2Fj Y2VzcyhpbmRleF9vaWQsIGxldmVsKSkKKwkJCXsKKwkJCQlKc29uYkluU3RhdGUgb2JqU3RhdGUg PSB7MH07CisJCQkJSnNvbmJJdGVyYXRvclRva2VuIHRvazsKKwkJCQlKc29uYlZhbHVlCW9ianY7 CisJCQkJSnNvbmIJICAgKm9iajsKKwkJCQlpbnQJCQlkZXB0aCA9IDE7CisKKwkJCQkvKgorCQkJ CSAqIE1hdGVyaWFsaXplIHRoZSBvYmplY3QgYnkgY29uc3VtaW5nIGZyb20gdGhlIGl0ZXJhdG9y CisJCQkJICogKHRyYWNraW5nIGRlcHRoIHRvIGhhbmRsZSBuZXN0ZWQgb2JqZWN0cy9hcnJheXMp LgorCQkJCSAqLworCQkJCXB1c2hKc29uYlZhbHVlKCZvYmpTdGF0ZSwgV0pCX0JFR0lOX09CSkVD VCwgTlVMTCk7CisJCQkJd2hpbGUgKCh0b2sgPSBKc29uYkl0ZXJhdG9yTmV4dChpdCwgJm9ianYs IGZhbHNlKSkgIT0gV0pCX0RPTkUpCisJCQkJeworCQkJCQlpZiAodG9rID09IFdKQl9CRUdJTl9P QkpFQ1QgfHwgdG9rID09IFdKQl9CRUdJTl9BUlJBWSkKKwkJCQkJCWRlcHRoKys7CisJCQkJCWVs c2UgaWYgKHRvayA9PSBXSkJfRU5EX09CSkVDVCB8fCB0b2sgPT0gV0pCX0VORF9BUlJBWSkKKwkJ CQkJCWRlcHRoLS07CisKKwkJCQkJcHVzaEpzb25iVmFsdWUoJm9ialN0YXRlLCB0b2ssCisJCQkJ CQkJCSAgIHRvayA8IFdKQl9CRUdJTl9BUlJBWSA/ICZvYmp2IDogTlVMTCk7CisKKwkJCQkJaWYg KGRlcHRoID09IDApCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb2JqID0gSnNvbmJWYWx1ZVRv SnNvbmIob2JqU3RhdGUucmVzdWx0KTsKKworCQkJCXNldFBhdGhfbGF4X2Fzc2lnbm1lbnQocGF0 aF9lbGVtc1tsZXZlbF0sIGxldmVsLCBwYXRoX2xlbiwKKwkJCQkJCQkJCSAgIHN0LCBuZXd2YWws IG9wX3R5cGUsIG9iaiwgZmFsc2UsCisJCQkJCQkJCQkgICBwYXRoX2VsZW1zLCBwYXRoX251bGxz LCBpbmRleF9vaWQpOworCQkJCWJyZWFrOworCQkJfQorCiAJCQlwdXNoSnNvbmJWYWx1ZShzdCwg ciwgTlVMTCk7CiAJCQlzZXRQYXRoT2JqZWN0KGl0LCBwYXRoX2VsZW1zLCBwYXRoX251bGxzLCBw YXRoX2xlbiwgc3QsIGxldmVsLAotCQkJCQkJICBuZXd2YWwsIHYudmFsLm9iamVjdC5uUGFpcnMs IG9wX3R5cGUpOworCQkJCQkJICBuZXd2YWwsIHYudmFsLm9iamVjdC5uUGFpcnMsIG9wX3R5cGUs CisJCQkJCQkgIGluZGV4X29pZCk7CiAJCQlyID0gSnNvbmJJdGVyYXRvck5leHQoaXQsICZ2LCB0 cnVlKTsKIAkJCUFzc2VydChyID09IFdKQl9FTkRfT0JKRUNUKTsKIAkJCXB1c2hKc29uYlZhbHVl KHN0LCByLCBOVUxMKTsKQEAgLTUyMjMsNiArNTQ4NywyMSBAQCBzZXRQYXRoKEpzb25iSXRlcmF0 b3IgKippdCwgY29uc3QgRGF0dW0gKnBhdGhfZWxlbXMsCiAJCWNhc2UgV0pCX0VMRU06CiAJCWNh c2UgV0pCX1ZBTFVFOgogCisJCQkvKgorCQkJICogU1FML0pTT04gbGF4IG1vZGU6IGlmIHRoaXMg c3Vic2NyaXB0IGlzIGFuIGVsZW1lbnQgYWNjZXNzCisJCQkgKiAoaW50ZWdlcikgb24gYSBzY2Fs YXIgdmFsdWUsIGhhbmRsZSBsYXggYXNzaWdubWVudC4KKwkJCSAqLworCQkJaWYgKGlzX2xheF9h cnJheV9hY2Nlc3MoaW5kZXhfb2lkLCBsZXZlbCkgJiYKKwkJCQkobGV2ZWwgPD0gcGF0aF9sZW4g LSAxKSkKKwkJCXsKKwkJCQlKc29uYgkgICAqc2NhbGFyX2piID0gSnNvbmJWYWx1ZVRvSnNvbmIo JnYpOworCisJCQkJc2V0UGF0aF9sYXhfYXNzaWdubWVudChwYXRoX2VsZW1zW2xldmVsXSwgbGV2 ZWwsIHBhdGhfbGVuLAorCQkJCQkJCQkJICAgc3QsIG5ld3ZhbCwgb3BfdHlwZSwgc2NhbGFyX2pi LCB0cnVlLAorCQkJCQkJCQkJICAgcGF0aF9lbGVtcywgcGF0aF9udWxscywgaW5kZXhfb2lkKTsK KwkJCQlicmVhazsKKwkJCX0KKwogCQkJLyoKIAkJCSAqIElmIGluc3RydWN0ZWQgY29tcGxhaW4g YWJvdXQgYXR0ZW1wdHMgdG8gcmVwbGFjZSB3aXRoaW4gYQogCQkJICogc2NhbGFyIHZhbHVlLiBU aGlzIGhhcHBlbnMgZXZlbiB3aGVuIGN1cnJlbnQgbGV2ZWwgaXMgZXF1YWwgdG8KQEAgLTUyNTAs NyArNTUyOSw4IEBAIHNldFBhdGgoSnNvbmJJdGVyYXRvciAqKml0LCBjb25zdCBEYXR1bSAqcGF0 aF9lbGVtcywKIHN0YXRpYyB2b2lkCiBzZXRQYXRoT2JqZWN0KEpzb25iSXRlcmF0b3IgKippdCwg Y29uc3QgRGF0dW0gKnBhdGhfZWxlbXMsIGNvbnN0IGJvb2wgKnBhdGhfbnVsbHMsCiAJCQkgIGlu dCBwYXRoX2xlbiwgSnNvbmJJblN0YXRlICpzdCwgaW50IGxldmVsLAotCQkJICBKc29uYlZhbHVl ICpuZXd2YWwsIHVpbnQzMiBucGFpcnMsIGludCBvcF90eXBlKQorCQkJICBKc29uYlZhbHVlICpu ZXd2YWwsIHVpbnQzMiBucGFpcnMsIGludCBvcF90eXBlLAorCQkJICBjb25zdCBPaWQgKmluZGV4 X29pZCkKIHsKIAl0ZXh0CSAgICpwYXRoZWxlbSA9IE5VTEw7CiAJaW50CQkJaTsKQEAgLTUzMTcs NyArNTU5Nyw4IEBAIHNldFBhdGhPYmplY3QoSnNvbmJJdGVyYXRvciAqKml0LCBjb25zdCBEYXR1 bSAqcGF0aF9lbGVtcywgY29uc3QgYm9vbCAqcGF0aF9udWxsCiAJCQl7CiAJCQkJcHVzaEpzb25i VmFsdWUoc3QsIHIsICZrKTsKIAkJCQlzZXRQYXRoKGl0LCBwYXRoX2VsZW1zLCBwYXRoX251bGxz LCBwYXRoX2xlbiwKLQkJCQkJCXN0LCBsZXZlbCArIDEsIG5ld3ZhbCwgb3BfdHlwZSk7CisJCQkJ CQlzdCwgbGV2ZWwgKyAxLCBuZXd2YWwsIG9wX3R5cGUsCisJCQkJCQlpbmRleF9vaWQpOwogCQkJ fQogCQl9CiAJCWVsc2UKQEAgLTUzODgsNyArNTY2OSw4IEBAIHNldFBhdGhPYmplY3QoSnNvbmJJ dGVyYXRvciAqKml0LCBjb25zdCBEYXR1bSAqcGF0aF9lbGVtcywgY29uc3QgYm9vbCAqcGF0aF9u dWxsCiBzdGF0aWMgdm9pZAogc2V0UGF0aEFycmF5KEpzb25iSXRlcmF0b3IgKippdCwgY29uc3Qg RGF0dW0gKnBhdGhfZWxlbXMsIGNvbnN0IGJvb2wgKnBhdGhfbnVsbHMsCiAJCQkgaW50IHBhdGhf bGVuLCBKc29uYkluU3RhdGUgKnN0LCBpbnQgbGV2ZWwsCi0JCQkgSnNvbmJWYWx1ZSAqbmV3dmFs LCB1aW50MzIgbmVsZW1zLCBpbnQgb3BfdHlwZSkKKwkJCSBKc29uYlZhbHVlICpuZXd2YWwsIHVp bnQzMiBuZWxlbXMsIGludCBvcF90eXBlLAorCQkJIGNvbnN0IE9pZCAqaW5kZXhfb2lkKQogewog CUpzb25iVmFsdWUJdjsKIAlpbnQJCQlpZHgsCkBAIC01NDg5LDcgKzU3NzEsOCBAQCBzZXRQYXRo QXJyYXkoSnNvbmJJdGVyYXRvciAqKml0LCBjb25zdCBEYXR1bSAqcGF0aF9lbGVtcywgY29uc3Qg Ym9vbCAqcGF0aF9udWxscwogCQkJfQogCQkJZWxzZQogCQkJCXNldFBhdGgoaXQsIHBhdGhfZWxl bXMsIHBhdGhfbnVsbHMsIHBhdGhfbGVuLAotCQkJCQkJc3QsIGxldmVsICsgMSwgbmV3dmFsLCBv cF90eXBlKTsKKwkJCQkJCXN0LCBsZXZlbCArIDEsIG5ld3ZhbCwgb3BfdHlwZSwKKwkJCQkJCWlu ZGV4X29pZCk7CiAJCX0KIAkJZWxzZQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9qc29uYi5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaAppbmRleCBjYTEzZWZiYTBmYi4u NDhjOGEzY2VjYTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaApAQCAtNDU0LDkgKzQ1NCwxMSBAQCBleHRlcm4gYm9v bCBKc29uYkV4dHJhY3RTY2FsYXIoSnNvbmJDb250YWluZXIgKmpiYywgSnNvbmJWYWx1ZSAqcmVz KTsKIGV4dGVybiBjb25zdCBjaGFyICpKc29uYlR5cGVOYW1lKEpzb25iVmFsdWUgKnZhbCk7CiAK IGV4dGVybiBEYXR1bSBqc29uYl9zZXRfZWxlbWVudChKc29uYiAqamIsIGNvbnN0IERhdHVtICpw YXRoLCBpbnQgcGF0aF9sZW4sCi0JCQkJCQkJICAgSnNvbmJWYWx1ZSAqbmV3dmFsKTsKKwkJCQkJ CQkgICBKc29uYlZhbHVlICpuZXd2YWwsCisJCQkJCQkJICAgY29uc3QgT2lkICppbmRleF9vaWQp OwogZXh0ZXJuIERhdHVtIGpzb25iX2dldF9lbGVtZW50KEpzb25iICpqYiwgY29uc3QgRGF0dW0g KnBhdGgsIGludCBucGF0aCwKLQkJCQkJCQkgICBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCk7 CisJCQkJCQkJICAgYm9vbCAqaXNudWxsLCBib29sIGFzX3RleHQsCisJCQkJCQkJICAgY29uc3Qg T2lkICppbmRleF9vaWQpOwogZXh0ZXJuIGJvb2wgdG9fanNvbmJfaXNfaW1tdXRhYmxlKE9pZCB0 eXBvaWQpOwogZXh0ZXJuIERhdHVtIGpzb25iX2J1aWxkX29iamVjdF93b3JrZXIoaW50IG5hcmdz LCBjb25zdCBEYXR1bSAqYXJncywgY29uc3QgYm9vbCAqbnVsbHMsCiAJCQkJCQkJCQkgICBjb25z dCBPaWQgKnR5cGVzLCBib29sIGFic2VudF9vbl9udWxsLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pz b25iLm91dAppbmRleCBmMGVhNjU0NDM0Zi4uNzFmZGVlOGU3NTkgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvanNvbmIub3V0CkBAIC01MDI1LDcgKzUwMjUsNyBAQCBzZWxlY3QgKCcxMjMnOjpqc29u YilbJ2EnXTsKIHNlbGVjdCAoJzEyMyc6Ompzb25iKVswXTsKICBqc29uYiAKIC0tLS0tLS0KLSAK KyAxMjMKICgxIHJvdykKIAogc2VsZWN0ICgnMTIzJzo6anNvbmIpW05VTExdOwpAQCAtNTA0MSw5 ICs1MDQxLDkgQEAgc2VsZWN0ICgneyJhIjogMX0nOjpqc29uYilbJ2EnXTsKICgxIHJvdykKIAog c2VsZWN0ICgneyJhIjogMX0nOjpqc29uYilbMF07Ci0ganNvbmIgCi0tLS0tLS0tCi0gCisgIGpz b25iICAgCistLS0tLS0tLS0tCisgeyJhIjogMX0KICgxIHJvdykKIAogc2VsZWN0ICgneyJhIjog MX0nOjpqc29uYilbJ25vdF9leGlzdCddOwpAQCAtNTEwOSw3ICs1MTA5LDcgQEAgc2VsZWN0ICgn WzEsICIyIiwgbnVsbF0nOjpqc29uYilbMV1bJ2EnXTsKIHNlbGVjdCAoJ1sxLCAiMiIsIG51bGxd Jzo6anNvbmIpWzFdWzBdOwogIGpzb25iIAogLS0tLS0tLQotIAorICIyIgogKDEgcm93KQogCiBz ZWxlY3QgKCd7ImEiOiAxLCAiYiI6ICJjIiwgImQiOiBbMSwgMiwgM119Jzo6anNvbmIpWydiJ107 CkBAIC01Mjc5LDEwICs1Mjc5LDEwIEBAIHNlbGVjdCAqIGZyb20gdGVzdF9qc29uYl9zdWJzY3Jp cHQ7CiB1cGRhdGUgdGVzdF9qc29uYl9zdWJzY3JpcHQgc2V0IHRlc3RfanNvbiA9IE5VTEwgd2hl cmUgaWQgPSAzOwogdXBkYXRlIHRlc3RfanNvbmJfc3Vic2NyaXB0IHNldCB0ZXN0X2pzb25bMF0g PSAnMSc7CiBzZWxlY3QgKiBmcm9tIHRlc3RfanNvbmJfc3Vic2NyaXB0OwotIGlkIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZXN0X2pzb24gICAgICAgICAgICAgICAgICAgICAgICAgICAK LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0gIDEgfCB7IjAiOiAxLCAiYSI6IFsxLCAyLCAzXSwgImFub3RoZXJfa2V5 IjogbnVsbH0KLSAgMiB8IHsiMCI6IDEsICJhIjogWzEsIDIsIDNdLCAia2V5IjogInZhbHVlIiwg ImFub3RoZXJfa2V5IjogbnVsbH0KKyBpZCB8IHRlc3RfanNvbiAKKy0tLS0rLS0tLS0tLS0tLS0K KyAgMSB8IDEKKyAgMiB8IDEKICAgMyB8IFsxXQogKDMgcm93cykKIApAQCAtNTM1NSw5ICs1MzU1 LDkgQEAgZGVsZXRlIGZyb20gdGVzdF9qc29uYl9zdWJzY3JpcHQ7CiBpbnNlcnQgaW50byB0ZXN0 X2pzb25iX3N1YnNjcmlwdCB2YWx1ZXMgKDEsICd7fScpOwogdXBkYXRlIHRlc3RfanNvbmJfc3Vi c2NyaXB0IHNldCB0ZXN0X2pzb25bMF1bJ2EnXSA9ICcxJzsKIHNlbGVjdCAqIGZyb20gdGVzdF9q c29uYl9zdWJzY3JpcHQ7Ci0gaWQgfCAgICB0ZXN0X2pzb24gICAgCi0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tCi0gIDEgfCB7IjAiOiB7ImEiOiAxfX0KKyBpZCB8IHRlc3RfanNvbiAKKy0tLS0rLS0t LS0tLS0tLS0KKyAgMSB8IHsiYSI6IDF9CiAoMSByb3cpCiAKIC0tIHRoZSBzdGFydCBqc29uYiBp cyBhbiBhcnJheQpAQCAtNTM5Nyw5ICs1Mzk3LDkgQEAgaW5zZXJ0IGludG8gdGVzdF9qc29uYl9z dWJzY3JpcHQgdmFsdWVzICgxLCAne30nKTsKIHVwZGF0ZSB0ZXN0X2pzb25iX3N1YnNjcmlwdCBz ZXQgdGVzdF9qc29uWydhJ11bJ2InXVsxMF0gPSAnMSc7CiB1cGRhdGUgdGVzdF9qc29uYl9zdWJz Y3JpcHQgc2V0IHRlc3RfanNvblsnYSddWzEwXVsxMF0gPSAnMSc7CiBzZWxlY3QgKiBmcm9tIHRl c3RfanNvbmJfc3Vic2NyaXB0OwotIGlkIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9qc29uICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIDEgfCB7 ImEiOiB7ImIiOiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVs bCwgbnVsbCwgbnVsbCwgMV0sICIxMCI6IFtudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBu dWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAxXX19CisgaWQgfCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGVzdF9qc29uICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEgfCB7 ImEiOiBbeyJiIjogW251bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51 bGwsIG51bGwsIG51bGwsIDFdfSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwg bnVsbCwgbnVsbCwgbnVsbCwgW251bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51 bGwsIG51bGwsIG51bGwsIG51bGwsIDFdXX0KICgxIHJvdykKIAogLS0gYW4gZW1wdHkgc3ViIGVs ZW1lbnQKQEAgLTU0MzEsMjMgKzU0MzEsMTUgQEAgdXBkYXRlIHRlc3RfanNvbmJfc3Vic2NyaXB0 IHNldCB0ZXN0X2pzb25bJ2EnXVsnYiddWydjJ10gPSAnMSc7CiBFUlJPUjogIGNhbm5vdCByZXBs YWNlIGV4aXN0aW5nIGtleQogREVUQUlMOiAgVGhlIHBhdGggYXNzdW1lcyBrZXkgaXMgYSBjb21w b3NpdGUgb2JqZWN0LCBidXQgaXQgaXMgYSBzY2FsYXIgdmFsdWUuCiB1cGRhdGUgdGVzdF9qc29u Yl9zdWJzY3JpcHQgc2V0IHRlc3RfanNvblsnYSddWzBdID0gJzEnOwotRVJST1I6ICBjYW5ub3Qg cmVwbGFjZSBleGlzdGluZyBrZXkKLURFVEFJTDogIFRoZSBwYXRoIGFzc3VtZXMga2V5IGlzIGEg Y29tcG9zaXRlIG9iamVjdCwgYnV0IGl0IGlzIGEgc2NhbGFyIHZhbHVlLgogdXBkYXRlIHRlc3Rf anNvbmJfc3Vic2NyaXB0IHNldCB0ZXN0X2pzb25bJ2EnXVswXVsnYyddID0gJzEnOwogRVJST1I6 ICBjYW5ub3QgcmVwbGFjZSBleGlzdGluZyBrZXkKIERFVEFJTDogIFRoZSBwYXRoIGFzc3VtZXMg a2V5IGlzIGEgY29tcG9zaXRlIG9iamVjdCwgYnV0IGl0IGlzIGEgc2NhbGFyIHZhbHVlLgogdXBk YXRlIHRlc3RfanNvbmJfc3Vic2NyaXB0IHNldCB0ZXN0X2pzb25bJ2EnXVswXVswXSA9ICcxJzsK LUVSUk9SOiAgY2Fubm90IHJlcGxhY2UgZXhpc3Rpbmcga2V5Ci1ERVRBSUw6ICBUaGUgcGF0aCBh c3N1bWVzIGtleSBpcyBhIGNvbXBvc2l0ZSBvYmplY3QsIGJ1dCBpdCBpcyBhIHNjYWxhciB2YWx1 ZS4KIC0tIHRyeWluZyByZXBsYWNlIGFzc3VtaW5nIGEgY29tcG9zaXRlIG9iamVjdCwgYnV0IGl0 J3MgYSByYXcgc2NhbGFyCiBkZWxldGUgZnJvbSB0ZXN0X2pzb25iX3N1YnNjcmlwdDsKIGluc2Vy dCBpbnRvIHRlc3RfanNvbmJfc3Vic2NyaXB0IHZhbHVlcyAoMSwgJ251bGwnKTsKIHVwZGF0ZSB0 ZXN0X2pzb25iX3N1YnNjcmlwdCBzZXQgdGVzdF9qc29uWzBdID0gJzEnOwotRVJST1I6ICBjYW5u b3QgcmVwbGFjZSBleGlzdGluZyBrZXkKLURFVEFJTDogIFRoZSBwYXRoIGFzc3VtZXMga2V5IGlz IGEgY29tcG9zaXRlIG9iamVjdCwgYnV0IGl0IGlzIGEgc2NhbGFyIHZhbHVlLgogdXBkYXRlIHRl c3RfanNvbmJfc3Vic2NyaXB0IHNldCB0ZXN0X2pzb25bMF1bMF0gPSAnMSc7Ci1FUlJPUjogIGNh bm5vdCByZXBsYWNlIGV4aXN0aW5nIGtleQotREVUQUlMOiAgVGhlIHBhdGggYXNzdW1lcyBrZXkg aXMgYSBjb21wb3NpdGUgb2JqZWN0LCBidXQgaXQgaXMgYSBzY2FsYXIgdmFsdWUuCiAtLSB0cnkg c29tZSB0aGluZ3Mgd2l0aCBzaG9ydC1oZWFkZXIgYW5kIHRvYXN0ZWQgc3Vic2NyaXB0IHZhbHVl cwogZHJvcCB0YWJsZSB0ZXN0X2pzb25iX3N1YnNjcmlwdDsKIGNyZWF0ZSB0ZW1wIHRhYmxlIHRl c3RfanNvbmJfc3Vic2NyaXB0ICgKQEAgLTYwMTMsMyArNjAwNSwxOTQgQEAgc2VsZWN0ICogZnJv bSB0ZXN0X2pzb25iX251bWVyaWNfc3Vic2NyaXB0OwogKDEgcm93KQogCiBkcm9wIHRhYmxlIHRl c3RfanNvbmJfbnVtZXJpY19zdWJzY3JpcHQ7CistLSBpbnRlZ2VyIHN1YnNjcmlwdCBvbiBub24t YXJyYXkgdmFsdWVzCitzZWxlY3QgKCcxMjMnOjpqc29uYilbMF07CisganNvbmIgCistLS0tLS0t CisgMTIzCisoMSByb3cpCisKK3NlbGVjdCAoJzEyMyc6Ompzb25iKVstMV07CisganNvbmIgCist LS0tLS0tCisgMTIzCisoMSByb3cpCisKK3NlbGVjdCAoJzEyMyc6Ompzb25iKVsxXTsKKyBqc29u YiAKKy0tLS0tLS0KKyAKKygxIHJvdykKKworc2VsZWN0ICgneyJhIjogMX0nOjpqc29uYilbMF07 CisgIGpzb25iICAgCistLS0tLS0tLS0tCisgeyJhIjogMX0KKygxIHJvdykKKworc2VsZWN0ICgn eyJhIjogMX0nOjpqc29uYilbLTFdOworICBqc29uYiAgIAorLS0tLS0tLS0tLQorIHsiYSI6IDF9 CisoMSByb3cpCisKK3NlbGVjdCAoJ3siYSI6IDF9Jzo6anNvbmIpWzFdOworIGpzb25iIAorLS0t LS0tLQorIAorKDEgcm93KQorCistLSBjaGFpbmVkIHN1YnNjcmlwdCB3aXRoIGludGVnZXIgaW5k ZXgKK3NlbGVjdCAoJ3siYSI6IDF9Jzo6anNvbmIpWydhJ11bMF07CisganNvbmIgCistLS0tLS0t CisgMQorKDEgcm93KQorCitzZWxlY3QgKCd7ImEiOiAxfSc6Ompzb25iKVsnYSddWzFdOyAtLSBv dXQtb2YtYm91bmRzCisganNvbmIgCistLS0tLS0tCisgCisoMSByb3cpCisKK3NlbGVjdCAoJ3si YSI6IHsiYiI6IDJ9fSc6Ompzb25iKVsnYSddWzBdOworICBqc29uYiAgIAorLS0tLS0tLS0tLQor IHsiYiI6IDJ9CisoMSByb3cpCisKK3NlbGVjdCAoJ3siYSI6IHsiYiI6IDJ9fSc6Ompzb25iKVsn YSddWzBdWydiJ107CisganNvbmIgCistLS0tLS0tCisgMgorKDEgcm93KQorCistLSBpbnRlZ2Vy IHZzIHRleHQgc3Vic2NyaXB0IG9uIG9iamVjdCB3aXRoIG51bWVyaWMga2V5CitzZWxlY3QgKCd7 IjAiOiAidmFsdWUifSc6Ompzb25iKVswXTsKKyAgICAganNvbmIgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0KKyB7IjAiOiAidmFsdWUifQorKDEgcm93KQorCitzZWxlY3QgKCd7IjAiOiAidmFsdWUi fSc6Ompzb25iKVsnMCddOworICBqc29uYiAgCistLS0tLS0tLS0KKyAidmFsdWUiCisoMSByb3cp CisKK3NlbGVjdCAoJ3siMCI6ICJ2YWx1ZSJ9Jzo6anNvbmIpWzAuMF07CisgICAgIGpzb25iICAg ICAgCistLS0tLS0tLS0tLS0tLS0tCisgeyIwIjogInZhbHVlIn0KKygxIHJvdykKKworLS0gV3Jp dGUgdGVzdHM6IGludGVnZXIgc3Vic2NyaXB0IGFzc2lnbm1lbnQgb24gbm9uLWFycmF5IHZhbHVl cworY3JlYXRlIHRlbXAgdGFibGUgdGVzdF9qc29uYl9sYXgodmFsIGpzb25iKTsKKy0tIGluLWJv dW5kcyBvbiBzY2FsYXIKK2luc2VydCBpbnRvIHRlc3RfanNvbmJfbGF4IHZhbHVlcyAoJzEyMycp OwordXBkYXRlIHRlc3RfanNvbmJfbGF4IHNldCB2YWxbMF0gPSAnIngiJzsKK3NlbGVjdCB2YWwg ZnJvbSB0ZXN0X2pzb25iX2xheDsKKyB2YWwgCistLS0tLQorICJ4IgorKDEgcm93KQorCistLSBp bi1ib3VuZHMgb24gb2JqZWN0Cit0cnVuY2F0ZSB0ZXN0X2pzb25iX2xheDsKK2luc2VydCBpbnRv IHRlc3RfanNvbmJfbGF4IHZhbHVlcyAoJ3siYSI6IDF9Jyk7Cit1cGRhdGUgdGVzdF9qc29uYl9s YXggc2V0IHZhbFstMV0gPSAnIngiJzsKK3NlbGVjdCB2YWwgZnJvbSB0ZXN0X2pzb25iX2xheDsK KyB2YWwgCistLS0tLQorICJ4IgorKDEgcm93KQorCistLSBpbi1ib3VuZHMgb24gbmVzdGVkIG9i amVjdAordHJ1bmNhdGUgdGVzdF9qc29uYl9sYXg7CitpbnNlcnQgaW50byB0ZXN0X2pzb25iX2xh eCB2YWx1ZXMgKCd7ImEiOiB7ImIiOiAxfX0nKTsKK3VwZGF0ZSB0ZXN0X2pzb25iX2xheCBzZXQg dmFsWzBdID0gJyJ4Iic7CitzZWxlY3QgdmFsIGZyb20gdGVzdF9qc29uYl9sYXg7CisgdmFsIAor LS0tLS0KKyAieCIKKygxIHJvdykKKworLS0gb3V0LW9mLWJvdW5kcyB3cmFwcyBpbiBhcnJheQor dHJ1bmNhdGUgdGVzdF9qc29uYl9sYXg7CitpbnNlcnQgaW50byB0ZXN0X2pzb25iX2xheCB2YWx1 ZXMgKCd7ImEiOiAxfScpOwordXBkYXRlIHRlc3RfanNvbmJfbGF4IHNldCB2YWxbMV0gPSAnIngi JzsKK3NlbGVjdCB2YWwgZnJvbSB0ZXN0X2pzb25iX2xheDsKKyAgICAgICB2YWwgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLQorIFt7ImEiOiAxfSwgIngiXQorKDEgcm93KQorCistLSBvdXQtb2Yt Ym91bmRzIG5lZ2F0aXZlIGlzIGVycm9yCit0cnVuY2F0ZSB0ZXN0X2pzb25iX2xheDsKK2luc2Vy dCBpbnRvIHRlc3RfanNvbmJfbGF4IHZhbHVlcyAoJ3siYSI6IDF9Jyk7Cit1cGRhdGUgdGVzdF9q c29uYl9sYXggc2V0IHZhbFstMl0gPSAnIngiJzsKK0VSUk9SOiAgcGF0aCBlbGVtZW50IGF0IHBv c2l0aW9uIDEgaXMgb3V0IG9mIHJhbmdlOiAtMgorc2VsZWN0IHZhbCBmcm9tIHRlc3RfanNvbmJf bGF4OworICAgdmFsICAgIAorLS0tLS0tLS0tLQorIHsiYSI6IDF9CisoMSByb3cpCisKKy0tIGlu dGVnZXIgc3Vic2NyaXB0IHZzIHRleHQgc3Vic2NyaXB0IG9uIG9iamVjdCB3aXRoIG51bWVyaWMg a2V5Cit0cnVuY2F0ZSB0ZXN0X2pzb25iX2xheDsKK2luc2VydCBpbnRvIHRlc3RfanNvbmJfbGF4 IHZhbHVlcyAoJ3siMCI6ICJ2YWx1ZSJ9Jyk7Cit1cGRhdGUgdGVzdF9qc29uYl9sYXggc2V0IHZh bFswXSA9ICcieCInOworc2VsZWN0IHZhbCBmcm9tIHRlc3RfanNvbmJfbGF4OworIHZhbCAKKy0t LS0tCisgIngiCisoMSByb3cpCisKK3RydW5jYXRlIHRlc3RfanNvbmJfbGF4OworaW5zZXJ0IGlu dG8gdGVzdF9qc29uYl9sYXggdmFsdWVzICgneyIwIjogInZhbHVlIn0nKTsKK3VwZGF0ZSB0ZXN0 X2pzb25iX2xheCBzZXQgdmFsWycwJ10gPSAnIngiJzsKK3NlbGVjdCB2YWwgZnJvbSB0ZXN0X2pz b25iX2xheDsKKyAgICB2YWwgICAgIAorLS0tLS0tLS0tLS0tCisgeyIwIjogIngifQorKDEgcm93 KQorCit0cnVuY2F0ZSB0ZXN0X2pzb25iX2xheDsKK2luc2VydCBpbnRvIHRlc3RfanNvbmJfbGF4 IHZhbHVlcyAoJ3siMCI6ICJ2YWx1ZSJ9Jyk7Cit1cGRhdGUgdGVzdF9qc29uYl9sYXggc2V0IHZh bFswLjBdID0gJyJ4Iic7CitzZWxlY3QgdmFsIGZyb20gdGVzdF9qc29uYl9sYXg7CisgdmFsIAor LS0tLS0KKyAieCIKKygxIHJvdykKKworLS0gbnVtZXJpYyBzdWJzY3JpcHQgdHJ1bmNhdGVzIHRv d2FyZCB6ZXJvCit0cnVuY2F0ZSB0ZXN0X2pzb25iX2xheDsKK2luc2VydCBpbnRvIHRlc3RfanNv bmJfbGF4IHZhbHVlcyAoJ3siYSI6IDF9Jyk7Cit1cGRhdGUgdGVzdF9qc29uYl9sYXggc2V0IHZh bFswLjddID0gJyJ4Iic7CitzZWxlY3QgdmFsIGZyb20gdGVzdF9qc29uYl9sYXg7CisgdmFsIAor LS0tLS0KKyAieCIKKygxIHJvdykKKwordHJ1bmNhdGUgdGVzdF9qc29uYl9sYXg7CitpbnNlcnQg aW50byB0ZXN0X2pzb25iX2xheCB2YWx1ZXMgKCd7ImEiOiAxfScpOwordXBkYXRlIHRlc3RfanNv bmJfbGF4IHNldCB2YWxbLTEuN10gPSAnIngiJzsKK3NlbGVjdCB2YWwgZnJvbSB0ZXN0X2pzb25i X2xheDsKKyB2YWwgCistLS0tLQorICJ4IgorKDEgcm93KQorCistLSBjaGFpbmVkIHN1YnNjcmlw dCBvbiBpbnRlcm1lZGlhdGUgbm9uLWFycmF5Cit0cnVuY2F0ZSB0ZXN0X2pzb25iX2xheDsKK2lu c2VydCBpbnRvIHRlc3RfanNvbmJfbGF4IHZhbHVlcyAoJ3siYSI6ICJoZWxsbyJ9Jyk7Cit1cGRh dGUgdGVzdF9qc29uYl9sYXggc2V0IHZhbFsnYSddWzBdID0gJyJ4Iic7CitzZWxlY3QgdmFsIGZy b20gdGVzdF9qc29uYl9sYXg7CisgICAgdmFsICAgICAKKy0tLS0tLS0tLS0tLQorIHsiYSI6ICJ4 In0KKygxIHJvdykKKworZHJvcCB0YWJsZSB0ZXN0X2pzb25iX2xheDsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25i LnNxbAppbmRleCBkN2QyNjIwNTUzNC4uODQ4NjBmNjkxMmIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5z cWwKQEAgLTE2MzMsMyArMTYzMyw4OSBAQCBzZWxlY3QgKiBmcm9tIHRlc3RfanNvbmJfbnVtZXJp Y19zdWJzY3JpcHQ7CiB1cGRhdGUgdGVzdF9qc29uYl9udW1lcmljX3N1YnNjcmlwdCBzZXQgdmFs WzEuOV0gPSAnInkiJzsKIHNlbGVjdCAqIGZyb20gdGVzdF9qc29uYl9udW1lcmljX3N1YnNjcmlw dDsKIGRyb3AgdGFibGUgdGVzdF9qc29uYl9udW1lcmljX3N1YnNjcmlwdDsKKworLS0gaW50ZWdl ciBzdWJzY3JpcHQgb24gbm9uLWFycmF5IHZhbHVlcworc2VsZWN0ICgnMTIzJzo6anNvbmIpWzBd Oworc2VsZWN0ICgnMTIzJzo6anNvbmIpWy0xXTsKK3NlbGVjdCAoJzEyMyc6Ompzb25iKVsxXTsK K3NlbGVjdCAoJ3siYSI6IDF9Jzo6anNvbmIpWzBdOworc2VsZWN0ICgneyJhIjogMX0nOjpqc29u YilbLTFdOworc2VsZWN0ICgneyJhIjogMX0nOjpqc29uYilbMV07CisKKy0tIGNoYWluZWQgc3Vi c2NyaXB0IHdpdGggaW50ZWdlciBpbmRleAorc2VsZWN0ICgneyJhIjogMX0nOjpqc29uYilbJ2En XVswXTsKK3NlbGVjdCAoJ3siYSI6IDF9Jzo6anNvbmIpWydhJ11bMV07IC0tIG91dC1vZi1ib3Vu ZHMKK3NlbGVjdCAoJ3siYSI6IHsiYiI6IDJ9fSc6Ompzb25iKVsnYSddWzBdOworc2VsZWN0ICgn eyJhIjogeyJiIjogMn19Jzo6anNvbmIpWydhJ11bMF1bJ2InXTsKKworLS0gaW50ZWdlciB2cyB0 ZXh0IHN1YnNjcmlwdCBvbiBvYmplY3Qgd2l0aCBudW1lcmljIGtleQorc2VsZWN0ICgneyIwIjog InZhbHVlIn0nOjpqc29uYilbMF07CitzZWxlY3QgKCd7IjAiOiAidmFsdWUifSc6Ompzb25iKVsn MCddOworc2VsZWN0ICgneyIwIjogInZhbHVlIn0nOjpqc29uYilbMC4wXTsKKworLS0gV3JpdGUg dGVzdHM6IGludGVnZXIgc3Vic2NyaXB0IGFzc2lnbm1lbnQgb24gbm9uLWFycmF5IHZhbHVlcwor Y3JlYXRlIHRlbXAgdGFibGUgdGVzdF9qc29uYl9sYXgodmFsIGpzb25iKTsKKworLS0gaW4tYm91 bmRzIG9uIHNjYWxhcgoraW5zZXJ0IGludG8gdGVzdF9qc29uYl9sYXggdmFsdWVzICgnMTIzJyk7 Cit1cGRhdGUgdGVzdF9qc29uYl9sYXggc2V0IHZhbFswXSA9ICcieCInOworc2VsZWN0IHZhbCBm cm9tIHRlc3RfanNvbmJfbGF4OworCistLSBpbi1ib3VuZHMgb24gb2JqZWN0Cit0cnVuY2F0ZSB0 ZXN0X2pzb25iX2xheDsKK2luc2VydCBpbnRvIHRlc3RfanNvbmJfbGF4IHZhbHVlcyAoJ3siYSI6 IDF9Jyk7Cit1cGRhdGUgdGVzdF9qc29uYl9sYXggc2V0IHZhbFstMV0gPSAnIngiJzsKK3NlbGVj dCB2YWwgZnJvbSB0ZXN0X2pzb25iX2xheDsKKworLS0gaW4tYm91bmRzIG9uIG5lc3RlZCBvYmpl Y3QKK3RydW5jYXRlIHRlc3RfanNvbmJfbGF4OworaW5zZXJ0IGludG8gdGVzdF9qc29uYl9sYXgg dmFsdWVzICgneyJhIjogeyJiIjogMX19Jyk7Cit1cGRhdGUgdGVzdF9qc29uYl9sYXggc2V0IHZh bFswXSA9ICcieCInOworc2VsZWN0IHZhbCBmcm9tIHRlc3RfanNvbmJfbGF4OworCistLSBvdXQt b2YtYm91bmRzIHdyYXBzIGluIGFycmF5Cit0cnVuY2F0ZSB0ZXN0X2pzb25iX2xheDsKK2luc2Vy dCBpbnRvIHRlc3RfanNvbmJfbGF4IHZhbHVlcyAoJ3siYSI6IDF9Jyk7Cit1cGRhdGUgdGVzdF9q c29uYl9sYXggc2V0IHZhbFsxXSA9ICcieCInOworc2VsZWN0IHZhbCBmcm9tIHRlc3RfanNvbmJf bGF4OworCistLSBvdXQtb2YtYm91bmRzIG5lZ2F0aXZlIGlzIGVycm9yCit0cnVuY2F0ZSB0ZXN0 X2pzb25iX2xheDsKK2luc2VydCBpbnRvIHRlc3RfanNvbmJfbGF4IHZhbHVlcyAoJ3siYSI6IDF9 Jyk7Cit1cGRhdGUgdGVzdF9qc29uYl9sYXggc2V0IHZhbFstMl0gPSAnIngiJzsKK3NlbGVjdCB2 YWwgZnJvbSB0ZXN0X2pzb25iX2xheDsKKworLS0gaW50ZWdlciBzdWJzY3JpcHQgdnMgdGV4dCBz dWJzY3JpcHQgb24gb2JqZWN0IHdpdGggbnVtZXJpYyBrZXkKK3RydW5jYXRlIHRlc3RfanNvbmJf bGF4OworaW5zZXJ0IGludG8gdGVzdF9qc29uYl9sYXggdmFsdWVzICgneyIwIjogInZhbHVlIn0n KTsKK3VwZGF0ZSB0ZXN0X2pzb25iX2xheCBzZXQgdmFsWzBdID0gJyJ4Iic7CitzZWxlY3QgdmFs IGZyb20gdGVzdF9qc29uYl9sYXg7CisKK3RydW5jYXRlIHRlc3RfanNvbmJfbGF4OworaW5zZXJ0 IGludG8gdGVzdF9qc29uYl9sYXggdmFsdWVzICgneyIwIjogInZhbHVlIn0nKTsKK3VwZGF0ZSB0 ZXN0X2pzb25iX2xheCBzZXQgdmFsWycwJ10gPSAnIngiJzsKK3NlbGVjdCB2YWwgZnJvbSB0ZXN0 X2pzb25iX2xheDsKKwordHJ1bmNhdGUgdGVzdF9qc29uYl9sYXg7CitpbnNlcnQgaW50byB0ZXN0 X2pzb25iX2xheCB2YWx1ZXMgKCd7IjAiOiAidmFsdWUifScpOwordXBkYXRlIHRlc3RfanNvbmJf bGF4IHNldCB2YWxbMC4wXSA9ICcieCInOworc2VsZWN0IHZhbCBmcm9tIHRlc3RfanNvbmJfbGF4 OworCistLSBudW1lcmljIHN1YnNjcmlwdCB0cnVuY2F0ZXMgdG93YXJkIHplcm8KK3RydW5jYXRl IHRlc3RfanNvbmJfbGF4OworaW5zZXJ0IGludG8gdGVzdF9qc29uYl9sYXggdmFsdWVzICgneyJh IjogMX0nKTsKK3VwZGF0ZSB0ZXN0X2pzb25iX2xheCBzZXQgdmFsWzAuN10gPSAnIngiJzsKK3Nl bGVjdCB2YWwgZnJvbSB0ZXN0X2pzb25iX2xheDsKKwordHJ1bmNhdGUgdGVzdF9qc29uYl9sYXg7 CitpbnNlcnQgaW50byB0ZXN0X2pzb25iX2xheCB2YWx1ZXMgKCd7ImEiOiAxfScpOwordXBkYXRl IHRlc3RfanNvbmJfbGF4IHNldCB2YWxbLTEuN10gPSAnIngiJzsKK3NlbGVjdCB2YWwgZnJvbSB0 ZXN0X2pzb25iX2xheDsKKworLS0gY2hhaW5lZCBzdWJzY3JpcHQgb24gaW50ZXJtZWRpYXRlIG5v bi1hcnJheQordHJ1bmNhdGUgdGVzdF9qc29uYl9sYXg7CitpbnNlcnQgaW50byB0ZXN0X2pzb25i X2xheCB2YWx1ZXMgKCd7ImEiOiAiaGVsbG8ifScpOwordXBkYXRlIHRlc3RfanNvbmJfbGF4IHNl dCB2YWxbJ2EnXVswXSA9ICcieCInOworc2VsZWN0IHZhbCBmcm9tIHRlc3RfanNvbmJfbGF4Owor Citkcm9wIHRhYmxlIHRlc3RfanNvbmJfbGF4OwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --0000000000001cab0a064a6aa753--