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 1wSr3q-0009Sk-21 for pgsql-hackers@arkaria.postgresql.org; Fri, 29 May 2026 06:51:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wSr3o-001mI6-0d for pgsql-hackers@arkaria.postgresql.org; Fri, 29 May 2026 06:51:12 +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 1wSr3n-001mHx-2U for pgsql-hackers@lists.postgresql.org; Fri, 29 May 2026 06:51:12 +0000 Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wSr3l-0000000061o-0d2t for pgsql-hackers@lists.postgresql.org; Fri, 29 May 2026 06:51:10 +0000 Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-68b2229b48eso2305161a12.2 for ; Thu, 28 May 2026 23:51:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780037466; cv=none; d=google.com; s=arc-20240605; b=LSDC3vlN0ziCeKfoQzpoWINHSgbCF8H4x5jzerTtALONlw6YDpLp2UK0ocIrGPz9mR I5XgIqq7JikWd8Eass23FtVzRWSnYPLVhu5aGwIXFcuf0HbZuVU1zXra6i+07RQhGJnH LMWfYUQwhV4iI6aXM2ibNaC/YEaSso51ZMce8/b4MuuHlJshDYYYfrMgPK56RzbB6MQ/ 4QDziiRuLWWmXLONfnUobMHWUFSy09nqTVaZ6KOw1k0xRujwCTO2BK3yA+kv88O/27QP pTTfqWAtr5JzwJ/JsbkTIr8xqR6cx6CfT2GzaLiWPbki3GoXpG0An2nLpn0ZKXX675Wd 1PEw== 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=MorhM1X5GMrKKF8Ai4Mzg5xk73D55v/B3A/zUYX5xEU=; fh=PPQOE4Wai/P1KOUG/j1hRvyglaWeDwSZpzS3R9AJLag=; b=G4Tzw8mgHn9PfSpIYuakSXqxlD55w6x/m/naNJVrFnko8oN6Hx+Gq7hdCYqg5wmDqb 1I+jNTFLlkzhVSyfuK4xCmUS2JrO90tbYgNlOwK3CnqAcV1ldBKJ/a9btaNW9atf8tAU KXULi9N23rtZJzbwSEWae+NyWMhmGNmAckVpZykKllCxJlY58DBiyM+LBMf6nHfexHCQ 3DJTANQAZGYPzoClIF8BLENYWDwEGZouU79hsr2ISgJnsMKiEJcwmKvw/7xXUVqCqrKL J1Gvi2iybx9vwaoG7jShnfzGZ3bw96eClyiKuFng1ba2j95CEYHpBL6Zy5bxKtIaInzV Mgsw==; 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=enterprisedb.com; s=google; t=1780037466; x=1780642266; 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=MorhM1X5GMrKKF8Ai4Mzg5xk73D55v/B3A/zUYX5xEU=; b=ONFLHTPlSndl55mzvycwgvQH+EaMJ5J7/J+0uVMZ5bL94KmLBD2ZEFgZon+6csOvlV mw/YyuN63r7ZpdoAMtSwwURbdbKcX6sbQ/378VflSjLZMGl8Jab1sqnFoRAAItNwbcyP 4stvE3/sego4c6vm7Dlj+Mz9eabZBzB6ayh86gFh7X6NG8ClTOEzRfQyanrXM36vRneH Q1wre3LxBjHPx8L4kAdcTXdUDPd+XjQyumwe8/oof9qsXUiLUUp07RorHR848ye9JdsX 0hnGh5V1d9GkCbuOfPSj9hC4s0Upf9xFuTH2WU/5keMeKQu8fgpAYCU9kWc7lB8mpTTL gu0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780037466; x=1780642266; 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=MorhM1X5GMrKKF8Ai4Mzg5xk73D55v/B3A/zUYX5xEU=; b=sXKKl8Ic7DTtOR1HSsPHqw5/843GSCSEAOx0QSBall6rt88h225t2rmuq7Tydx51N6 NHZIMP2DafVlefvpkooJEXu39EycuIbIV6vf3sHr6AhFieYafmYCPUSqf/NdTHM7MHC7 pUVjkLeWamWVs0cRX2K1LujjrNMccvgKh9txrF2QQ/al/oFWYtL0YI3nNJj5FNEgs8/K UinEJL2Bowyy0TnKDM6S8MNC1xyFj46Ri6alb83+MmmquBxvgrjiR7HauaVOzPsaJc+0 uZLhVvaomdsCym/Al2/kCOeB4eukb+mxyLzKwT/DgL77XXVOLXNkNm1NVdft1wBYXrqj jfiQ== X-Gm-Message-State: AOJu0Yw4SH33QxE+evxvZHEx+ssZCs+BDfaqb7VJmMw7rC0xZjZ903Ip O/M+fgjHs1l6kapVBeM+1DoplDcsRobcBeYm6WjQn4Iv14MpAowoQHkO9Z4kn4vq5aVJhPg8w09 Ry3JVHrvx4YrU8y/Yo4rY1LJRyroiFzAFUJgaGeczVzkZ6j2pmO3Ssg== X-Gm-Gg: Acq92OGnk8wJ+ETaKO/L9iVUg27Lka727YxFXyuKPrgE9lobaG93R+RAW25Mn0tu9Pr Wzd4MMKrmvVsYAUTD8r155YKX7G0edzHFcqt+oGipn5xw88qeOvooIp6otKnLxrXMHTFaG8QQeE G9rmcR+GZ6KRqTC1heqMIgzzW0iepa2QbeYdkiAy0DQkqpqAZGtaOAUp8OvgLl9LMeidHADJiVt 0o+44kZbWee268W5jCjp10y+3QO9VgfKOpbq0zLDvkHcRVohjFnPMkYBKlsSS5mONDpfDzsMrZH AOhuH8TwX51LU57btkg= X-Received: by 2002:a05:6402:2486:b0:68b:d10a:a48a with SMTP id 4fb4d7f45d1cf-68c1154e9d4mr752764a12.11.1780037466267; Thu, 28 May 2026 23:51:06 -0700 (PDT) MIME-Version: 1.0 References: <177997571870.313758.10720313850275742354.pgcf@coridan.postgresql.org> In-Reply-To: <177997571870.313758.10720313850275742354.pgcf@coridan.postgresql.org> From: Akshay Joshi Date: Fri, 29 May 2026 12:20:54 +0530 X-Gm-Features: AVHnY4IbmGTZX1LRtGEGiJiGbeG6qhS6-yVSoTHAJHct__6gYNNVlMlph_yx1ig Message-ID: Subject: Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement To: Ilmar Y Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000dd6f0c0652ef44fd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dd6f0c0652ef44fd Content-Type: multipart/alternative; boundary="000000000000dd6f0a0652ef44fb" --000000000000dd6f0a0652ef44fb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the reviews. My original patch (v9) was actually correct. After considering Japin's review comment, I initially thought the extra parentheses weren't necessary, but they are indeed required for handling boolean values properly in non-pretty mode too, so I kept them in USING (%s) / WITH CHECK (%s) for both modes. `pg_get_expr()` only adds outer parentheses for composite expressions (via the deparsers for `OpExpr`, `BoolExpr`, etc.). For atomic top-level nodes like `Const`, `Var`, `current_user`, `NULL`, etc. For example: CREATE POLICY p ON t USING (true); SELECT pg_get_policy_ddl('t', 'p'); -- previously: ... USING true; (syntax error) This is exactly why `pg_dump` always wraps the expression unconditionally; see `src/bin/pg_dump/pg_dump.c`:4473-4477: if (polinfo->polqual !=3D NULL) appendPQExpBuffer(query, " USING (%s)", polinfo->polqual); if (polinfo->polwithcheck !=3D NULL) appendPQExpBuffer(query, " WITH CHECK (%s)", polinfo->polwithcheck)= ; I've also added a round-trip regression test with `USING (true)` / `WITH CHECK (false)` that captures the generated DDL, drops the policies, re-executes the DDL, and verifies the policies are recreated. *v11 Patch attached for review.* On Thu, May 28, 2026 at 7:12=E2=80=AFPM Ilmar Y wrote= : > The following review has been posted through the commitfest application: > make installcheck-world: not tested > Implements feature: tested, failed > Spec compliant: not tested > Documentation: not tested > > Hi, > > I looked at v10, focused on whether the generated CREATE POLICY statement > can be executed again. > > The patch applies cleanly on current master at > 8a86aa313a714adc56c74e4b08793e4e6102b5ca. > > git diff --check reports no issues. > > I built with: > > ./configure --prefix=3D"$PWD/pg-install" --without-readline --without-zli= b > --without-icu > make -s -j8 > make -s install > > make -C src/test/regress check TESTS=3Drowsecurity > > ended up running the full parallel_schedule in this makefile; all 245 tes= ts > passed, including rowsecurity. > > I found one correctness issue in the generated non-pretty DDL. The code > assumes that pg_get_expr_ext(..., false) already returns the parentheses > required by CREATE POLICY syntax, but that is not true for simple boolean > constants. > > For example: > > CREATE TABLE t(a int); > CREATE POLICY p_true ON t USING (true); > SELECT ddl FROM pg_get_policy_ddl('t', 'p_true', 'pretty', 'false') AS dd= l; > > returns: > > CREATE POLICY p_true ON public.t USING true; > > If I drop the policy and execute that generated statement, it fails: > > ERROR: syntax error at or near "true" > LINE 1: CREATE POLICY p_true ON public.t USING true; > ^ > > The same issue reproduces for WITH CHECK: > > CREATE POLICY p_check ON t FOR INSERT WITH CHECK (false); > > is reconstructed as: > > CREATE POLICY p_check ON public.t FOR INSERT WITH CHECK false; > > and executing it fails at "false". > > So I think USING and WITH CHECK need to be parenthesized in non-pretty mo= de > too, or the tests should include a round-trip execution check for generat= ed > DDL with simple boolean expressions. > > I used two small SQL reproducers for the manual checks; the complete repr= o > is > included above. > > I have not reviewed the broader pg_get_*_ddl API design or every possible > policy expression form. > > Regards, > Ilmar Yunusov > > The new status of this patch is: Waiting on Author > --000000000000dd6f0a0652ef44fb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks for the reviews.

My original patch (v9) was= actually correct. After considering Japin's review comment, I initiall= y thought the extra parentheses weren't necessary, but they are indeed = required for handling boolean values properly=C2=A0in non-pretty mode too, = so I kept them in USING (%s) / WITH CHECK (%s) for both modes.

`pg_g= et_expr()` only adds outer parentheses for composite expressions (via the d= eparsers for `OpExpr`, `BoolExpr`, etc.). For atomic top-level nodes like `= Const`, `Var`, `current_user`, `NULL`, etc.
For example:

=C2=A0 = =C2=A0 CREATE POLICY p ON t USING (true);
=C2=A0 =C2=A0 SELECT pg_get_po= licy_ddl('t', 'p'); =C2=A0-- previously: ... USING true; = =C2=A0(syntax error)

This is exactly why `pg_dump` always wraps the = expression unconditionally; see `src/bin/pg_dump/pg_dump.c`:4473-4477:
<= br>=C2=A0 =C2=A0 if (polinfo->polqual !=3D NULL)
=C2=A0 =C2=A0 =C2=A0= =C2=A0 appendPQExpBuffer(query, " USING (%s)", polinfo->polqu= al);
=C2=A0 =C2=A0 if (polinfo->polwithcheck !=3D NULL)
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 appendPQExpBuffer(query, " WITH CHECK (%s)", po= linfo->polwithcheck);

I've also added a round-trip regression= test with `USING (true)` / `WITH CHECK (false)` that captures the generate= d DDL, drops the policies, re-executes the DDL, and verifies the policies a= re recreated.

v11 Patch attached for review.

On Thu, May = 28, 2026 at 7:12=E2=80=AFPM Ilmar Y <tanswis42@gmail.com> wrote:
The following review has been post= ed through the commitfest application:
make installcheck-world:=C2=A0 not tested
Implements feature:=C2=A0 =C2=A0 =C2=A0 =C2=A0tested, failed
Spec compliant:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0not tested
Documentation:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 not tested

Hi,

I looked at v10, focused on whether the generated CREATE POLICY statement can be executed again.

The patch applies cleanly on current master at
8a86aa313a714adc56c74e4b08793e4e6102b5ca.

git diff --check reports no issues.

I built with:

./configure --prefix=3D"$PWD/pg-install" --without-readline --wit= hout-zlib --without-icu
make -s -j8
make -s install

make -C src/test/regress check TESTS=3Drowsecurity

ended up running the full parallel_schedule in this makefile; all 245 tests=
passed, including rowsecurity.

I found one correctness issue in the generated non-pretty DDL.=C2=A0 The co= de
assumes that pg_get_expr_ext(..., false) already returns the parentheses required by CREATE POLICY syntax, but that is not true for simple boolean constants.

For example:

CREATE TABLE t(a int);
CREATE POLICY p_true ON t USING (true);
SELECT ddl FROM pg_get_policy_ddl('t', 'p_true', 'prett= y', 'false') AS ddl;

returns:

CREATE POLICY p_true ON public.t USING true;

If I drop the policy and execute that generated statement, it fails:

ERROR:=C2=A0 syntax error at or near "true"
LINE 1: CREATE POLICY p_true ON public.t USING true;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0^

The same issue reproduces for WITH CHECK:

CREATE POLICY p_check ON t FOR INSERT WITH CHECK (false);

is reconstructed as:

CREATE POLICY p_check ON public.t FOR INSERT WITH CHECK false;

and executing it fails at "false".

So I think USING and WITH CHECK need to be parenthesized in non-pretty mode=
too, or the tests should include a round-trip execution check for generated=
DDL with simple boolean expressions.

I used two small SQL reproducers for the manual checks; the complete repro = is
included above.

I have not reviewed the broader pg_get_*_ddl API design or every possible policy expression form.

Regards,
Ilmar Yunusov

The new status of this patch is: Waiting on Author
--000000000000dd6f0a0652ef44fb-- --000000000000dd6f0c0652ef44fd Content-Type: application/x-patch; name="v11-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch" Content-Disposition: attachment; filename="v11-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpqjackv0 RnJvbSBmNjJlYTM5NGNkZWZlZDVmZTdjNjc2MGNjZWFmMmM3MGY1ZWMwOWNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBGcmksIDIyIE1heSAyMDI2IDE4OjE4OjA3ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2MTFdIEFkZCBwZ19nZXRfcG9saWN5X2RkbCgpIGZ1bmN0aW9uIHRvIHJlY29uc3RydWN0 IENSRUFURQogUE9MSUNZIHN0YXRlbWVudHMuCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlw ZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4 Yml0CgpUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzdGVtIGZ1bmN0aW9uOgogICAgcGdf Z2V0X3BvbGljeV9kZGwodGFibGUgcmVnY2xhc3MsIHBvbGljeV9uYW1lIG5hbWUsCiAgICAgICBW QVJJQURJQyBvcHRpb25zIHRleHRbXSkgUkVUVVJOUyBzZXRvZiB0ZXh0Cgp3aGljaCByZWNvbnN0 cnVjdHMgdGhlIENSRUFURSBQT0xJQ1kgc3RhdGVtZW50IGZvciB0aGUgbmFtZWQgcm93LWxldmVs CnNlY3VyaXR5IHBvbGljeSBvbiB0aGUgc3BlY2lmaWVkIHRhYmxlLiBUaGUgcmVzdWx0IGlzIHJl dHVybmVkIGFzIGEgc2luZ2xlIHJvdy4KwqAKVGhlIHN1cHBvcnRlZCBvcHRpb24gaXM6CgogICAg cHJldHR5IChib29sZWFuKSAtIGZvcm1hdCB0aGUgb3V0cHV0IGZvciByZWFkYWJpbGl0eS4KClVz YWdlIGV4YW1wbGVzOgogICAgLS0gbm9uLXByZXR0eSBmb3JtYXR0ZWQgRERMIChkZWZhdWx0KQog ICAgU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RhYmxlJywgJ3BvbDEnKTsK ICAgIFNFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoMTY1NjQsICdwb2wxJyk7CgogICAg LS0gcHJldHR5IGZvcm1hdHRlZCBEREwKICAgIFNFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9k ZGwoJ3Jsc190YWJsZScsICdwb2wxJywgJ3ByZXR0eScsICd0cnVlJyk7CiAgICBTRUxFQ1QgKiBG Uk9NIHBnX2dldF9wb2xpY3lfZGRsKDE2NTY0LCAncG9sMScsICdwcmV0dHknLCAndHJ1ZScpOwoK UmVmZXJlbmNlOiBQRy0xNjMKQXV0aG9yOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRl cnByaXNlZGIuY29tPgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sICAgICAg ICAgIHwgIDIwICsrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYyAgICAgICAgICB8 IDI2MiArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0ICAgICAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3NlY3Vy aXR5Lm91dCB8IDIxNSArKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jv d3NlY3VyaXR5LnNxbCAgICAgIHwgMTAyICsrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA2MDcg aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5z Z21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKaW5kZXggMDBmNjRmNTBjZWIu LjQ0YmY2NDU1YmIxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbApAQCAtMzk2MSw2ICszOTYx LDI2IEBAIGFjbCAgICAgIHwge3Bvc3RncmVzPWFyd2REeHRtL3Bvc3RncmVzLGZvbz1yL3Bvc3Rn cmVzfQogICAgICAgICA8bGl0ZXJhbD5UQUJMRVNQQUNFPC9saXRlcmFsPi4KICAgICAgICA8L3Bh cmE+PC9lbnRyeT4KICAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9s ZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAg ICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfZ2V0X3BvbGljeV9kZGw8L3ByaW1h cnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X3BvbGlj eV9kZGw8L2Z1bmN0aW9uPgorICAgICAgICAoIDxwYXJhbWV0ZXI+dGFibGU8L3BhcmFtZXRlcj4g PHR5cGU+cmVnY2xhc3M8L3R5cGU+LAorICAgICAgICA8cGFyYW1ldGVyPnBvbGljeV9uYW1lPC9w YXJhbWV0ZXI+IDx0eXBlPm5hbWU8L3R5cGU+CisgICAgICAgIDxvcHRpb25hbD4sIDxsaXRlcmFs PlZBUklBRElDPC9saXRlcmFsPiA8cGFyYW1ldGVyPm9wdGlvbnM8L3BhcmFtZXRlcj4KKyAgICAg ICAgPHR5cGU+dGV4dDwvdHlwZT4gPC9vcHRpb25hbD4gKQorICAgICAgICA8cmV0dXJudmFsdWU+ c2V0b2YgdGV4dDwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgor ICAgICAgICBSZWNvbnN0cnVjdHMgdGhlIDxjb21tYW5kPkNSRUFURSBQT0xJQ1k8L2NvbW1hbmQ+ IHN0YXRlbWVudCBmb3IgdGhlCisgICAgICAgIG5hbWVkIHJvdy1sZXZlbCBzZWN1cml0eSBwb2xp Y3kgb24gdGhlIHNwZWNpZmllZCB0YWJsZS4gIFRoZSByZXN1bHQKKyAgICAgICAgaXMgcmV0dXJu ZWQgYXMgYSBzaW5nbGUgcm93LgorICAgICAgICBUaGUgZm9sbG93aW5nIG9wdGlvbiBpcyBzdXBw b3J0ZWQ6IDxsaXRlcmFsPnByZXR0eTwvbGl0ZXJhbD4KKyAgICAgICAgKGJvb2xlYW4pIGZvciBm b3JtYXR0ZWQgb3V0cHV0LgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CiAg ICAgIDwvdGJvZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRs dXRpbHMuYwppbmRleCBmMzJmY2Q0NTNlZi4uNzI4ZDM2NDg5NzkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9k ZGx1dGlscy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRp b24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19kYl9yb2xlX3NldHRpbmcuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3BvbGljeS5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfdGFibGVzcGFjZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Rh Ymxlc3BhY2UuaCIKICNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgpAQCAtODYsNiArODcsOSBA QCBzdGF0aWMgTGlzdCAqcGdfZ2V0X3RhYmxlc3BhY2VfZGRsX2ludGVybmFsKE9pZCB0c2lkLCBi b29sIHByZXR0eSwgYm9vbCBub19vd25lcgogc3RhdGljIERhdHVtIHBnX2dldF90YWJsZXNwYWNl X2RkbF9zcmYoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIE9pZCB0c2lkLCBib29sIGlzbnVsbCk7 CiBzdGF0aWMgTGlzdCAqcGdfZ2V0X2RhdGFiYXNlX2RkbF9pbnRlcm5hbChPaWQgZGJpZCwgYm9v bCBwcmV0dHksCiAJCQkJCQkJCQkJICBib29sIG5vX293bmVyLCBib29sIG5vX3RhYmxlc3BhY2Up Oworc3RhdGljIExpc3QgKnBnX2dldF9wb2xpY3lfZGRsX2ludGVybmFsKE9pZCB0YWJsZUlELCBj b25zdCBjaGFyICpwb2xpY3lOYW1lLAorCQkJCQkJCQkJCWJvb2wgcHJldHR5KTsKK3N0YXRpYyBj b25zdCBjaGFyICpnZXRfcG9saWN5X2NtZF9uYW1lKGNoYXIgY21kKTsKIAogCiAvKgpAQCAtMTE4 NSwzICsxMTg5LDI2MSBAQCBwZ19nZXRfZGF0YWJhc2VfZGRsKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKIAl9CiB9CisKKy8qCisgKiBnZXRfcG9saWN5X2Nt ZF9uYW1lCisgKgkJTWFwIGEgcGdfcG9saWN5LnBvbGNtZCBjaGFyIHRvIGl0cyBTUUwga2V5d29y ZC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0X3BvbGljeV9jbWRfbmFtZShjaGFyIGNt ZCkKK3sKKwlzd2l0Y2ggKGNtZCkKKwl7CisJCWNhc2UgJyonOgorCQkJcmV0dXJuICJBTEwiOwor CQljYXNlIEFDTF9TRUxFQ1RfQ0hSOgorCQkJcmV0dXJuICJTRUxFQ1QiOworCQljYXNlIEFDTF9J TlNFUlRfQ0hSOgorCQkJcmV0dXJuICJJTlNFUlQiOworCQljYXNlIEFDTF9VUERBVEVfQ0hSOgor CQkJcmV0dXJuICJVUERBVEUiOworCQljYXNlIEFDTF9ERUxFVEVfQ0hSOgorCQkJcmV0dXJuICJE RUxFVEUiOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBwb2xpY3kg Y29tbWFuZDogJWQiLCAoaW50KSBjbWQpOworCX0KK30KKworLyoKKyAqIHBnX2dldF9wb2xpY3lf ZGRsX2ludGVybmFsCisgKgkJR2VuZXJhdGUgdGhlIERETCBzdGF0ZW1lbnQgdG8gcmVjcmVhdGUg YSByb3ctbGV2ZWwgc2VjdXJpdHkgcG9saWN5LgorICoKKyAqIFJldHVybnMgYSBMaXN0IGNvbnRh aW5pbmcgYSBzaW5nbGUgcGFsbG9jJ2Qgc3RyaW5nIHdpdGggdGhlIENSRUFURSBQT0xJQ1kKKyAq IHN0YXRlbWVudC4gIFJldHVybmluZyBhIExpc3Qga2VlcHMgdGhlIGNhbGxpbmcgY29udmVudGlv biBjb25zaXN0ZW50IHdpdGgKKyAqIHRoZSByZXN0IG9mIHRoZSBwZ19nZXRfKl9kZGwgZmFtaWx5 IGV2ZW4gdGhvdWdoIG9ubHkgb25lIHJvdyBpcyBwcm9kdWNlZC4KKyAqLworc3RhdGljIExpc3Qg KgorcGdfZ2V0X3BvbGljeV9kZGxfaW50ZXJuYWwoT2lkIHRhYmxlSUQsIGNvbnN0IGNoYXIgKnBv bGljeU5hbWUsIGJvb2wgcHJldHR5KQoreworCVJlbGF0aW9uCXBnUG9saWN5UmVsOworCUhlYXBU dXBsZQl0dXBsZVBvbGljeTsKKwlGb3JtX3BnX3BvbGljeSBwb2xpY3lGb3JtOworCVNjYW5LZXlE YXRhIHNrZXlbMl07CisJU3lzU2NhbkRlc2Mgc3NjYW47CisJU3RyaW5nSW5mb0RhdGEgYnVmOwor CURhdHVtCQl2YWx1ZURhdHVtOworCWJvb2wJCWF0dHJJc051bGw7CisJY2hhcgkgICAqdGFyZ2V0 VGFibGU7CisJTGlzdAkgICAqc3RhdGVtZW50cyA9IE5JTDsKKworCS8qIFZhbGlkYXRlIHRoYXQg dGhlIHJlbGF0aW9uIGV4aXN0cyAqLworCXsKKwkJY2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxf bmFtZSh0YWJsZUlEKTsKKwkJY2hhcgkgICAqbnNwbmFtZTsKKworCQlpZiAocmVsbmFtZSA9PSBO VUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURf VEFCTEUpLAorCQkJCQkgZXJybXNnKCJyZWxhdGlvbiB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlz dCIsIHRhYmxlSUQpKSk7CisKKwkJbnNwbmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVs X25hbWVzcGFjZSh0YWJsZUlEKSk7CisJCWlmIChuc3BuYW1lID09IE5VTEwpCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9TQ0hFTUEpLAorCQkJCQkg ZXJybXNnKCJzY2hlbWEgZm9yIHJlbGF0aW9uIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwK KwkJCQkJCQl0YWJsZUlEKSkpOworCisJCXRhcmdldFRhYmxlID0gcXVvdGVfcXVhbGlmaWVkX2lk ZW50aWZpZXIobnNwbmFtZSwgcmVsbmFtZSk7CisJCXBmcmVlKHJlbG5hbWUpOworCQlwZnJlZShu c3BuYW1lKTsKKwl9CisKKwlwZ1BvbGljeVJlbCA9IHRhYmxlX29wZW4oUG9saWN5UmVsYXRpb25J ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIFNldCBrZXkgLSBwb2xpY3kncyByZWxhdGlvbiBp ZC4gKi8KKwlTY2FuS2V5SW5pdCgmc2tleVswXSwKKwkJCQlBbnVtX3BnX3BvbGljeV9wb2xyZWxp ZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXRE YXR1bSh0YWJsZUlEKSk7CisKKwkvKiBTZXQga2V5IC0gcG9saWN5J3MgbmFtZS4gKi8KKwlTY2Fu S2V5SW5pdCgmc2tleVsxXSwKKwkJCQlBbnVtX3BnX3BvbGljeV9wb2xuYW1lLAorCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9OQU1FRVEsCisJCQkJQ1N0cmluZ0dldERhdHVtKHBvbGljeU5h bWUpKTsKKworCXNzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnUG9saWN5UmVsLAorCQkJCQkJ CSAgIFBvbGljeVBvbHJlbGlkUG9sbmFtZUluZGV4SWQsIHRydWUsIE5VTEwsIDIsCisJCQkJCQkJ ICAgc2tleSk7CisKKwl0dXBsZVBvbGljeSA9IHN5c3RhYmxlX2dldG5leHQoc3NjYW4pOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZVBvbGljeSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkgZXJybXNnKCJwb2xpY3kg XCIlc1wiIGZvciB0YWJsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJcG9saWN5TmFt ZSwgdGFyZ2V0VGFibGUpKSk7CisKKwlwb2xpY3lGb3JtID0gKEZvcm1fcGdfcG9saWN5KSBHRVRT VFJVQ1QodHVwbGVQb2xpY3kpOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwkvKiBCdWls ZCB0aGUgQ1JFQVRFIFBPTElDWSBzdGF0ZW1lbnQgKi8KKwlhcHBlbmRTdHJpbmdJbmZvKCZidWYs ICJDUkVBVEUgUE9MSUNZICVzIE9OICVzIiwKKwkJCQkJIHF1b3RlX2lkZW50aWZpZXIocG9saWN5 TmFtZSksCisJCQkJCSB0YXJnZXRUYWJsZSk7CisKKwkvKgorCSAqIEVtaXQgQVMgUkVTVFJJQ1RJ VkUgb25seSB3aGVuIGl0IGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdCAoUEVSTUlTU0lWRSkuCisJ ICovCisJaWYgKCFwb2xpY3lGb3JtLT5wb2xwZXJtaXNzaXZlKQorCQlhcHBlbmRfZGRsX29wdGlv bigmYnVmLCBwcmV0dHksIDQsICJBUyBSRVNUUklDVElWRSIpOworCisJLyoKKwkgKiBFbWl0IEZP UiA8Y21kPiBvbmx5IHdoZW4gaXQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0IChBTEwsIGVuY29k ZWQgYXMKKwkgKiAnKicpLgorCSAqLworCWlmIChwb2xpY3lGb3JtLT5wb2xjbWQgIT0gJyonKQor CQlhcHBlbmRfZGRsX29wdGlvbigmYnVmLCBwcmV0dHksIDQsICJGT1IgJXMiLAorCQkJCQkJICBn ZXRfcG9saWN5X2NtZF9uYW1lKHBvbGljeUZvcm0tPnBvbGNtZCkpOworCisJLyoKKwkgKiBFbWl0 IFRPIDxyb2xlcz4gb25seSB3aGVuIGl0IGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdCAoUFVCTElD KS4gIFBVQkxJQworCSAqIGlzIGVuY29kZWQgaW4gcG9scm9sZXMgYXMgYSBzaW5nbGUgSW52YWxp ZE9pZCBlbGVtZW50LCBzbyB3ZSBvbWl0IHRoZQorCSAqIGNsYXVzZSB3aGVuZXZlciBldmVyeSBl bnRyeSBpcyBJbnZhbGlkT2lkLgorCSAqLworCXZhbHVlRGF0dW0gPSBoZWFwX2dldGF0dHIodHVw bGVQb2xpY3ksCisJCQkJCQkJICBBbnVtX3BnX3BvbGljeV9wb2xyb2xlcywKKwkJCQkJCQkgIFJl bGF0aW9uR2V0RGVzY3IocGdQb2xpY3lSZWwpLAorCQkJCQkJCSAgJmF0dHJJc051bGwpOworCWlm ICghYXR0cklzTnVsbCkKKwl7CisJCUFycmF5VHlwZSAgKnBvbGljeV9yb2xlcyA9IERhdHVtR2V0 QXJyYXlUeXBlUENvcHkodmFsdWVEYXR1bSk7CisJCWludAkJCW5pdGVtcyA9IEFSUl9ESU1TKHBv bGljeV9yb2xlcylbMF07CisJCU9pZAkJICAgKnJvbGVzID0gKE9pZCAqKSBBUlJfREFUQV9QVFIo cG9saWN5X3JvbGVzKTsKKwkJU3RyaW5nSW5mb0RhdGEgcm9sZV9uYW1lczsKKworCQlpbml0U3Ry aW5nSW5mbygmcm9sZV9uYW1lcyk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuaXRlbXM7IGkr KykKKwkJeworCQkJaWYgKE9pZElzVmFsaWQocm9sZXNbaV0pKQorCQkJeworCQkJCWNoYXIJICAg KnJvbGVuYW1lID0gR2V0VXNlck5hbWVGcm9tSWQocm9sZXNbaV0sIGZhbHNlKTsKKworCQkJCWlm IChyb2xlX25hbWVzLmxlbiA+IDApCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnJvbGVf bmFtZXMsICIsICIpOworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnJvbGVfbmFtZXMsIHF1 b3RlX2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwkJCX0KKwkJfQorCisJCWlmIChyb2xlX25hbWVz LmxlbiA+IDApCisJCQlhcHBlbmRfZGRsX29wdGlvbigmYnVmLCBwcmV0dHksIDQsICJUTyAlcyIs IHJvbGVfbmFtZXMuZGF0YSk7CisKKwkJcGZyZWUocm9sZV9uYW1lcy5kYXRhKTsKKwkJcGZyZWUo cG9saWN5X3JvbGVzKTsKKwl9CisKKwkvKiBVU0lORyBleHByZXNzaW9uICovCisJdmFsdWVEYXR1 bSA9IGhlYXBfZ2V0YXR0cih0dXBsZVBvbGljeSwKKwkJCQkJCQkgIEFudW1fcGdfcG9saWN5X3Bv bHF1YWwsCisJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBnUG9saWN5UmVsKSwKKwkJCQkJCQkg ICZhdHRySXNOdWxsKTsKKwlpZiAoIWF0dHJJc051bGwpCisJeworCQlEYXR1bQkJZXhwcjsKKwor CQlleHByID0gRGlyZWN0RnVuY3Rpb25DYWxsMyhwZ19nZXRfZXhwcl9leHQsCisJCQkJCQkJCSAg IHZhbHVlRGF0dW0sCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ocG9saWN5Rm9ybS0+cG9s cmVsaWQpLAorCQkJCQkJCQkgICBCb29sR2V0RGF0dW0ocHJldHR5KSk7CisJCWFwcGVuZF9kZGxf b3B0aW9uKCZidWYsIHByZXR0eSwgNCwgIlVTSU5HICglcykiLAorCQkJCQkJICBUZXh0RGF0dW1H ZXRDU3RyaW5nKGV4cHIpKTsKKwl9CisKKwkvKiBXSVRIIENIRUNLIGV4cHJlc3Npb24gKi8KKwl2 YWx1ZURhdHVtID0gaGVhcF9nZXRhdHRyKHR1cGxlUG9saWN5LAorCQkJCQkJCSAgQW51bV9wZ19w b2xpY3lfcG9sd2l0aGNoZWNrLAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ1BvbGljeVJl bCksCisJCQkJCQkJICAmYXR0cklzTnVsbCk7CisJaWYgKCFhdHRySXNOdWxsKQorCXsKKwkJRGF0 dW0JCWV4cHI7CisKKwkJZXhwciA9IERpcmVjdEZ1bmN0aW9uQ2FsbDMocGdfZ2V0X2V4cHJfZXh0 LAorCQkJCQkJCQkgICB2YWx1ZURhdHVtLAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHBv bGljeUZvcm0tPnBvbHJlbGlkKSwKKwkJCQkJCQkJICAgQm9vbEdldERhdHVtKHByZXR0eSkpOwor CQlhcHBlbmRfZGRsX29wdGlvbigmYnVmLCBwcmV0dHksIDQsICJXSVRIIENIRUNLICglcykiLAor CQkJCQkJICBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHIpKTsKKwl9CisKKwlhcHBlbmRTdHJpbmdJ bmZvQ2hhcigmYnVmLCAnOycpOworCisJc3RhdGVtZW50cyA9IGxhcHBlbmQoc3RhdGVtZW50cywg cHN0cmR1cChidWYuZGF0YSkpOworCisJc3lzdGFibGVfZW5kc2Nhbihzc2Nhbik7CisJdGFibGVf Y2xvc2UocGdQb2xpY3lSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJcGZyZWUoYnVmLmRhdGEpOwor CisJcmV0dXJuIHN0YXRlbWVudHM7Cit9CisKKy8qCisgKiBwZ19nZXRfcG9saWN5X2RkbAorICoJ CVJldHVybiBEREwgdG8gcmVjcmVhdGUgYSByb3ctbGV2ZWwgc2VjdXJpdHkgcG9saWN5IGFzIGEg c2luZ2xlIHRleHQgcm93LgorICovCitEYXR1bQorcGdfZ2V0X3BvbGljeV9kZGwoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJTGlzdAkgICAqc3RhdGVt ZW50czsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CisJCU9pZAkJCXRhYmxlSUQ7CisJCU5hbWUJCXBvbGljeU5hbWU7CisJCURkbE9w dGlvbglvcHRzW10gPSB7CisJCQl7InByZXR0eSIsIERETF9PUFRfQk9PTH0sCisJCX07CisKKwkJ ZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisKKwkJaWYgKFBH X0FSR0lTTlVMTCgwKSB8fCBQR19BUkdJU05VTEwoMSkpCisJCXsKKwkJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwkJfQor CisJCXRhYmxlSUQgPSBQR19HRVRBUkdfT0lEKDApOworCQlwb2xpY3lOYW1lID0gUEdfR0VUQVJH X05BTUUoMSk7CisKKwkJcGFyc2VfZGRsX29wdGlvbnMoZmNpbmZvLCAyLCBvcHRzLCBsZW5ndGhv ZihvcHRzKSk7CisKKwkJc3RhdGVtZW50cyA9IHBnX2dldF9wb2xpY3lfZGRsX2ludGVybmFsKHRh YmxlSUQsCisJCQkJCQkJCQkJCQlOYW1lU3RyKCpwb2xpY3lOYW1lKSwKKwkJCQkJCQkJCQkJCW9w dHNbMF0uaXNzZXQgJiYgb3B0c1swXS5ib29sdmFsKTsKKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0g c3RhdGVtZW50czsKKwkJZnVuY2N0eC0+bWF4X2NhbGxzID0gbGlzdF9sZW5ndGgoc3RhdGVtZW50 cyk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCWZ1bmNj dHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCXN0YXRlbWVudHMgPSAoTGlzdCAqKSBmdW5jY3R4 LT51c2VyX2ZjdHg7CisKKwlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgZnVuY2N0eC0+bWF4X2Nh bGxzKQorCXsKKwkJY2hhcgkgICAqc3RtdDsKKworCQlzdG10ID0gbGlzdF9udGgoc3RhdGVtZW50 cywgZnVuY2N0eC0+Y2FsbF9jbnRyKTsKKworCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgQ1N0 cmluZ0dldFRleHREYXR1bShzdG10KSk7CisJfQorCWVsc2UKKwl7CisJCWxpc3RfZnJlZV9kZWVw KHN0YXRlbWVudHMpOworCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJfQorfQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggYmUxNTdhNWZiZTkuLjNlMzJjODlmZDZkIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKQEAgLTg2MTUsNiArODYxNSwxNCBAQAogICBwcm9hcmd0eXBlcyA9PiAn cmVnZGF0YWJhc2UgdGV4dCcsIHByb2FsbGFyZ3R5cGVzID0+ICd7cmVnZGF0YWJhc2UsdGV4dH0n LAogICBwcm9hcmdtb2RlcyA9PiAne2ksdn0nLCBwcm9hcmdkZWZhdWx0cyA9PiAne05VTEx9JywK ICAgcHJvc3JjID0+ICdwZ19nZXRfZGF0YWJhc2VfZGRsJyB9LAoreyBvaWQgPT4gJzY1MTcnLCBk ZXNjciA9PiAnZ2V0IERETCB0byByZWNyZWF0ZSBhIHJvdy1sZXZlbCBzZWN1cml0eSBwb2xpY3kn LAorICBwcm9uYW1lID0+ICdwZ19nZXRfcG9saWN5X2RkbCcsIHByb3Jvd3MgPT4gJzEnLCBwcm92 YXJpYWRpYyA9PiAndGV4dCcsCisgIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0c2V0ID0+ICd0 JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAorICBwcm9uYXJnZGVmYXVsdHMgPT4gJzEnLCBwcm9yZXR0 eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzIG5hbWUgdGV4dCcsCisg IHByb2FsbGFyZ3R5cGVzID0+ICd7cmVnY2xhc3MsbmFtZSx0ZXh0fScsCisgIHByb2FyZ21vZGVz ID0+ICd7aSxpLHZ9JywgcHJvYXJnZGVmYXVsdHMgPT4gJ3tOVUxMfScsCisgIHByb3NyYyA9PiAn cGdfZ2V0X3BvbGljeV9kZGwnIH0sCiB7IG9pZCA9PiAnMjUwOScsCiAgIGRlc2NyID0+ICdkZXBh cnNlIGFuIGVuY29kZWQgZXhwcmVzc2lvbiB3aXRoIHByZXR0eS1wcmludCBvcHRpb24nLAogICBw cm9uYW1lID0+ICdwZ19nZXRfZXhwcicsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9 PiAndGV4dCcsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3NlY3Vy aXR5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2VjdXJpdHkub3V0CmluZGV4 IDNhNWU4MmMzNWJkLi41MDJmOWI4NmY2NCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9yb3dzZWN1cml0eS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y b3dzZWN1cml0eS5vdXQKQEAgLTUxOTUsNiArNTE5NSwyMjEgQEAgcmVzZXQgcmxzX3Rlc3QuYmxh aDsKIGRyb3AgZnVuY3Rpb24gcmxzX2YodGV4dCk7CiBkcm9wIHRhYmxlIHJsc190LCB0ZXN0X3Q7 CiAtLQorLS0gVGVzdCBmb3IgcGdfZ2V0X3BvbGljeV9kZGwodGFibGUsIHBvbGljeV9uYW1lLCBW QVJJQURJQyBvcHRpb25zKSBmdW5jdGlvbi4KKy0tCitDUkVBVEUgVEFCTEUgcmxzX3RibF8xICgK KyAgICBkaWQgICAgICAgICBpbnQgcHJpbWFyeSBrZXksCisgICAgY2lkICAgICAgICAgaW50LAor ICAgIGRsZXZlbCAgICAgIGludCBub3QgbnVsbCwKKyAgICBkYXV0aG9yICAgICBuYW1lLAorICAg IGR0aXRsZSAgICAgIHRleHQKKyk7CitHUkFOVCBBTEwgT04gcmxzX3RibF8xIFRPIHB1YmxpYzsK K0NSRUFURSBUQUJMRSBybHNfdGJsXzIgKAorICAgIHBndXNlciAgICAgIG5hbWUgcHJpbWFyeSBr ZXksCisgICAgc2VjbHYgICAgICAgaW50CispOworR1JBTlQgU0VMRUNUIE9OIHJsc190YmxfMiBU TyBwdWJsaWM7CistLSBUZXN0IFBFUk1JU1NJVkUgYW5kIFJFU1RSSUNUSVZFCitDUkVBVEUgUE9M SUNZIHJsc19wMSBPTiBybHNfdGJsXzEgQVMgUEVSTUlTU0lWRQorICAgIFVTSU5HIChkbGV2ZWwg PD0gKFNFTEVDVCBzZWNsdiBGUk9NIHJsc190YmxfMiBXSEVSRSBwZ3VzZXIgPSBjdXJyZW50X3Vz ZXIpKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3AyIE9OIHJsc190YmxfMSBBUyBSRVNUUklDVElWRSBV U0lORyAoY2lkIDw+IDQ0IEFORCBjaWQgPCA1MCk7CistLSBUZXN0IEZPUiBBTEwgfCBTRUxFQ1Qg fCBJTlNFUlQgfCBVUERBVEUgfCBERUxFVEUKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJsc190 YmxfMSBGT1IgQUxMIFVTSU5HIChkYXV0aG9yID0gY3VycmVudF91c2VyKTsKK0NSRUFURSBQT0xJ Q1kgcmxzX3A0IE9OIHJsc190YmxfMSBGT1IgU0VMRUNUIFVTSU5HIChjaWQgJSAyID0gMCk7CitD UkVBVEUgUE9MSUNZIHJsc19wNSBPTiBybHNfdGJsXzEgRk9SIElOU0VSVCBXSVRIIENIRUNLIChj aWQgJSAyID0gMSk7CitDUkVBVEUgUE9MSUNZIHJsc19wNiBPTiBybHNfdGJsXzEgRk9SIFVQREFU RSBVU0lORyAoY2lkICUgMiA9IDApOworQ1JFQVRFIFBPTElDWSBybHNfcDcgT04gcmxzX3RibF8x IEZPUiBERUxFVEUgVVNJTkcgKGNpZCA8IDgpOworLS0gVGVzdCBUTyB7IHJvbGVfbmFtZSAuLi4g fQorQ1JFQVRFIFBPTElDWSBybHNfcDggT04gcmxzX3RibF8xIFRPIHJlZ3Jlc3NfcmxzX2RhdmUs IHJlZ3Jlc3NfcmxzX2FsaWNlIFVTSU5HICh0cnVlKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A5IE9O IHJsc190YmxfMSBUTyByZWdyZXNzX3Jsc19leGVtcHRfdXNlciBXSVRIIENIRUNLIChjaWQgPSAo U0VMRUNUIHNlY2x2IEZST00gcmxzX3RibF8yKSk7CistLSBOVUxMIGlucHV0cyBzaG91bGQgcmV0 dXJuIG5vIHJvd3MKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKE5VTEws ICdybHNfcDEnKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMAorKDEgcm93KQorCitTRUxFQ1Qg Y291bnQoKikgRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgTlVMTCk7CisgY291 bnQgCistLS0tLS0tCisgICAgIDAKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEZST00gcGdf Z2V0X3BvbGljeV9kZGwoTlVMTCwgTlVMTCk7CisgY291bnQgCistLS0tLS0tCisgICAgIDAKKygx IHJvdykKKworLS0gVGFibGUgZG9lcyBub3QgZXhpc3QKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Bv bGljeV9kZGwoJ25vbmV4aXN0ZW50X3RibCcsICdybHNfcDEnKTsKK0VSUk9SOiAgcmVsYXRpb24g Im5vbmV4aXN0ZW50X3RibCIgZG9lcyBub3QgZXhpc3QKK0xJTkUgMTogU0VMRUNUICogRlJPTSBw Z19nZXRfcG9saWN5X2RkbCgnbm9uZXhpc3RlbnRfdGJsJywgJ3Jsc19wMScpLi4uCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gUG9saWN5IGRvZXMgbm90IGV4 aXN0CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAnbm9uZXhp c3RlbnRfcG9sJyk7CitFUlJPUjogIHBvbGljeSAibm9uZXhpc3RlbnRfcG9sIiBmb3IgdGFibGUg InJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEiIGRvZXMgbm90IGV4aXN0CistLSBJbnZhbGlk IG9wdGlvbiBuYW1lCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEn LCAncmxzX3AxJywgJ2JhZG9wdCcsICd0cnVlJyk7CitFUlJPUjogIHVucmVjb2duaXplZCBvcHRp b246ICJiYWRvcHQiCistLSBJbnZhbGlkIGJvb2xlYW4gdmFsdWUgZm9yIG9wdGlvbgorU0VMRUNU ICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMScsICdwcmV0dHkn LCAnbWF5YmUnKTsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgYm9vbGVhbiBvcHRpb24gInBy ZXR0eSI6IG1heWJlCistLSBEdXBsaWNhdGUgb3B0aW9uCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxJywgJ3ByZXR0eScsICd0cnVlJywgJ3ByZXR0 eScsICdmYWxzZScpOworRVJST1I6ICBvcHRpb24gInByZXR0eSIgaXMgc3BlY2lmaWVkIG1vcmUg dGhhbiBvbmNlCistLSBXaXRob3V0IHByZXR0eSBmb3JtYXR0aW5nIChkZWZhdWx0KQorU0VMRUNU ICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMScpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3AxIE9OIHJlZ3Jlc3Nfcmxz X3NjaGVtYS5ybHNfdGJsXzEgVVNJTkcgKChkbGV2ZWwgPD0gKCBTRUxFQ1QgcmxzX3RibF8yLnNl Y2x2KworICAgIEZST00gcmxzX3RibF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgV0hFUkUg KHJsc190YmxfMi5wZ3VzZXIgPSBDVVJSRU5UX1VTRVIpKSkpOworKDEgcm93KQorCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AyJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJs c19wMiBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIEFTIFJFU1RSSUNUSVZFIFVTSU5H ICgoKGNpZCA8PiA0NCkgQU5EIChjaWQgPCA1MCkpKTsKKygxIHJvdykKKworU0VMRUNUICogRlJP TSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgVVNJTkcg KChkYXV0aG9yID0gQ1VSUkVOVF9VU0VSKSk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDQnKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFBPTElDWSBybHNfcDQgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBGT1IgU0VM RUNUIFVTSU5HICgoKGNpZCAlIDIpID0gMCkpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBn X2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A1Jyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJsc19wNSBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3Ri bF8xIEZPUiBJTlNFUlQgV0lUSCBDSEVDSyAoKChjaWQgJSAyKSA9IDEpKTsKKygxIHJvdykKKwor U0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNicsICdw cmV0dHknLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFBPTElDWSBybHNfcDYgT04g cmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBGT1IgVVBEQVRFIFVTSU5HICgoKGNpZCAlIDIp ID0gMCkpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNf dGJsXzEnLCAncmxzX3A3JywgJ3ByZXR0eScsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJs c19wNyBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIEZPUiBERUxFVEUgVVNJTkcgKChj aWQgPCA4KSk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Js c190YmxfMScsICdybHNfcDgnLCAncHJldHR5JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJsc19wOCBPTiBy ZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIFRPIHJlZ3Jlc3NfcmxzX2RhdmUsIHJlZ3Jlc3Nf cmxzX2FsaWNlIFVTSU5HICh0cnVlKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRf cG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOScsICdwcmV0dHknLCAnZmFsc2UnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3A5IE9OIHJlZ3Jlc3Nf cmxzX3NjaGVtYS5ybHNfdGJsXzEgVE8gcmVncmVzc19ybHNfZXhlbXB0X3VzZXIgV0lUSCBDSEVD SyAoKGNpZCA9ICggU0VMRUNUIHJsc190YmxfMi5zZWNsdisKKyAgICBGUk9NIHJsc190YmxfMikp KTsKKygxIHJvdykKKworLS0gV2l0aCBwcmV0dHkgZm9ybWF0dGluZworXHBzZXQgZm9ybWF0IHVu YWxpZ25lZAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Js c19wMScsICdwcmV0dHknLCAndHJ1ZScpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJ Q1kgcmxzX3AxIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKyAgICBVU0lORyAoZGxl dmVsIDw9ICgoIFNFTEVDVCBybHNfdGJsXzIuc2VjbHYKKyAgIEZST00gcmxzX3RibF8yCisgIFdI RVJFIHJsc190YmxfMi5wZ3VzZXIgPSBDVVJSRU5UX1VTRVIpKSk7CisoMSByb3cpCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AyJywgJ3ByZXR0eScs ICd0cnVlJyk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDIgT04gcmVn cmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorICAgIEFTIFJFU1RSSUNUSVZFCisgICAgVVNJTkcg KGNpZCA8PiA0NCBBTkQgY2lkIDwgNTApOworKDEgcm93KQorU0VMRUNUICogRlJPTSBwZ19nZXRf cG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsICdwcmV0dHknLCAndHJ1ZScpOworcGdf Z2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJlZ3Jlc3NfcmxzX3NjaGVt YS5ybHNfdGJsXzEKKyAgICBVU0lORyAoZGF1dGhvciA9IENVUlJFTlRfVVNFUik7CisoMSByb3cp CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A0Jywg J3ByZXR0eScsICd0cnVlJyk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNf cDQgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorICAgIEZPUiBTRUxFQ1QKKyAgICBV U0lORyAoKGNpZCAlIDIpID0gMCk7CisoMSByb3cpCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xp Y3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A1JywgJ3ByZXR0eScsICd0cnVlJyk7CitwZ19nZXRf cG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDUgT04gcmVncmVzc19ybHNfc2NoZW1hLnJs c190YmxfMQorICAgIEZPUiBJTlNFUlQKKyAgICBXSVRIIENIRUNLICgoY2lkICUgMikgPSAxKTsK KygxIHJvdykKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdy bHNfcDYnLCAncHJldHR5JywgJ3RydWUnKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9M SUNZIHJsc19wNiBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgRk9SIFVQREFU RQorICAgIFVTSU5HICgoY2lkICUgMikgPSAwKTsKKygxIHJvdykKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDcnLCAncHJldHR5JywgJ3RydWUnKTsK K3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19wNyBPTiByZWdyZXNzX3Jsc19z Y2hlbWEucmxzX3RibF8xCisgICAgRk9SIERFTEVURQorICAgIFVTSU5HIChjaWQgPCA4KTsKKygx IHJvdykKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDgnLCAncHJldHR5JywgJ3RydWUnKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZ IHJsc19wOCBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisgICAgVE8gcmVncmVzc19y bHNfZGF2ZSwgcmVncmVzc19ybHNfYWxpY2UKKyAgICBVU0lORyAodHJ1ZSk7CisoMSByb3cpCitT RUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A5JywgJ3By ZXR0eScsICd0cnVlJyk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDkg T04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorICAgIFRPIHJlZ3Jlc3NfcmxzX2V4ZW1w dF91c2VyCisgICAgV0lUSCBDSEVDSyAoY2lkID0gKCggU0VMRUNUIHJsc190YmxfMi5zZWNsdgor ICAgRlJPTSBybHNfdGJsXzIpKSk7CisoMSByb3cpCitccHNldCBmb3JtYXQgYWxpZ25lZAorLS0g Um91bmQtdHJpcDogdGhlIGdlbmVyYXRlZCBEREwgbXVzdCBiZSByZS1leGVjdXRhYmxlLCBpbmNs dWRpbmcgZm9yIGF0b21pYworLS0gYm9vbGVhbiBleHByZXNzaW9ucyB0aGF0IHBnX2dldF9leHBy KCkgZG9lcyBub3QgcGFyZW50aGVzaXplLgorQ1JFQVRFIFRBQkxFIHJsc19ydCAoYSBpbnQpOwor Q1JFQVRFIFBPTElDWSBydF90cnVlIE9OIHJsc19ydCBVU0lORyAodHJ1ZSk7CitDUkVBVEUgUE9M SUNZIHJ0X2ZhbHNlIE9OIHJsc19ydCBGT1IgSU5TRVJUIFdJVEggQ0hFQ0sgKGZhbHNlKTsKK0NS RUFURSBURU1QIFRBQkxFIHJ0X2RkbCBBUworICAgIFNFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgn cmxzX3J0JywgJ3J0X3RydWUnKSBBUyBkZGwKKyAgICBVTklPTiBBTEwKKyAgICBTRUxFQ1QgcGdf Z2V0X3BvbGljeV9kZGwoJ3Jsc19ydCcsICdydF9mYWxzZScpOworRFJPUCBQT0xJQ1kgcnRfdHJ1 ZSBPTiBybHNfcnQ7CitEUk9QIFBPTElDWSBydF9mYWxzZSBPTiBybHNfcnQ7CitTRUxFQ1QgZGRs IEZST00gcnRfZGRsIE9SREVSIEJZIGRkbCBcZ2V4ZWMKK0NSRUFURSBQT0xJQ1kgcnRfZmFsc2Ug T04gcmVncmVzc19ybHNfc2NoZW1hLnJsc19ydCBGT1IgSU5TRVJUIFdJVEggQ0hFQ0sgKGZhbHNl KTsKK0NSRUFURSBQT0xJQ1kgcnRfdHJ1ZSBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3J0IFVT SU5HICh0cnVlKTsKK1NFTEVDVCBwb2xuYW1lIEZST00gcGdfcG9saWN5IFdIRVJFIHBvbHJlbGlk ID0gJ3Jsc19ydCc6OnJlZ2NsYXNzIE9SREVSIEJZIHBvbG5hbWU7CisgcG9sbmFtZSAgCistLS0t LS0tLS0tCisgcnRfZmFsc2UKKyBydF90cnVlCisoMiByb3dzKQorCitEUk9QIFRBQkxFIHJsc19y dDsKKy0tIENsZWFuIHVwIG9iamVjdHMgY3JlYXRlZCBmb3IgdGVzdGluZyBwZ19nZXRfcG9saWN5 X2RkbCBmdW5jdGlvbi4KK0RST1AgUE9MSUNZIHJsc19wMSBPTiBybHNfdGJsXzE7CitEUk9QIFBP TElDWSBybHNfcDIgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3AzIE9OIHJsc190Ymxf MTsKK0RST1AgUE9MSUNZIHJsc19wNCBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDUg T04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A2IE9OIHJsc190YmxfMTsKK0RST1AgUE9M SUNZIHJsc19wNyBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDggT04gcmxzX3RibF8x OworRFJPUCBQT0xJQ1kgcmxzX3A5IE9OIHJsc190YmxfMTsKK0RST1AgVEFCTEUgcmxzX3RibF8x OworRFJPUCBUQUJMRSBybHNfdGJsXzI7CistLQogLS0gQ2xlYW4gdXAgb2JqZWN0cwogLS0KIFJF U0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3Jvd3NlY3VyaXR5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3VyaXR5LnNx bAppbmRleCA2YjM1NjYyNzFkZi4uZDNiMmUyMjZkMDcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3Jvd3NlY3VyaXR5LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dz ZWN1cml0eS5zcWwKQEAgLTI1OTgsNiArMjU5OCwxMDggQEAgcmVzZXQgcmxzX3Rlc3QuYmxhaDsK IGRyb3AgZnVuY3Rpb24gcmxzX2YodGV4dCk7CiBkcm9wIHRhYmxlIHJsc190LCB0ZXN0X3Q7CiAK Ky0tCistLSBUZXN0IGZvciBwZ19nZXRfcG9saWN5X2RkbCh0YWJsZSwgcG9saWN5X25hbWUsIFZB UklBRElDIG9wdGlvbnMpIGZ1bmN0aW9uLgorLS0KK0NSRUFURSBUQUJMRSBybHNfdGJsXzEgKAor ICAgIGRpZCAgICAgICAgIGludCBwcmltYXJ5IGtleSwKKyAgICBjaWQgICAgICAgICBpbnQsCisg ICAgZGxldmVsICAgICAgaW50IG5vdCBudWxsLAorICAgIGRhdXRob3IgICAgIG5hbWUsCisgICAg ZHRpdGxlICAgICAgdGV4dAorKTsKK0dSQU5UIEFMTCBPTiBybHNfdGJsXzEgVE8gcHVibGljOwor Q1JFQVRFIFRBQkxFIHJsc190YmxfMiAoCisgICAgcGd1c2VyICAgICAgbmFtZSBwcmltYXJ5IGtl eSwKKyAgICBzZWNsdiAgICAgICBpbnQKKyk7CitHUkFOVCBTRUxFQ1QgT04gcmxzX3RibF8yIFRP IHB1YmxpYzsKKworLS0gVGVzdCBQRVJNSVNTSVZFIGFuZCBSRVNUUklDVElWRQorQ1JFQVRFIFBP TElDWSBybHNfcDEgT04gcmxzX3RibF8xIEFTIFBFUk1JU1NJVkUKKyAgICBVU0lORyAoZGxldmVs IDw9IChTRUxFQ1Qgc2VjbHYgRlJPTSBybHNfdGJsXzIgV0hFUkUgcGd1c2VyID0gY3VycmVudF91 c2VyKSk7CitDUkVBVEUgUE9MSUNZIHJsc19wMiBPTiBybHNfdGJsXzEgQVMgUkVTVFJJQ1RJVkUg VVNJTkcgKGNpZCA8PiA0NCBBTkQgY2lkIDwgNTApOworCistLSBUZXN0IEZPUiBBTEwgfCBTRUxF Q1QgfCBJTlNFUlQgfCBVUERBVEUgfCBERUxFVEUKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJs c190YmxfMSBGT1IgQUxMIFVTSU5HIChkYXV0aG9yID0gY3VycmVudF91c2VyKTsKK0NSRUFURSBQ T0xJQ1kgcmxzX3A0IE9OIHJsc190YmxfMSBGT1IgU0VMRUNUIFVTSU5HIChjaWQgJSAyID0gMCk7 CitDUkVBVEUgUE9MSUNZIHJsc19wNSBPTiBybHNfdGJsXzEgRk9SIElOU0VSVCBXSVRIIENIRUNL IChjaWQgJSAyID0gMSk7CitDUkVBVEUgUE9MSUNZIHJsc19wNiBPTiBybHNfdGJsXzEgRk9SIFVQ REFURSBVU0lORyAoY2lkICUgMiA9IDApOworQ1JFQVRFIFBPTElDWSBybHNfcDcgT04gcmxzX3Ri bF8xIEZPUiBERUxFVEUgVVNJTkcgKGNpZCA8IDgpOworCistLSBUZXN0IFRPIHsgcm9sZV9uYW1l IC4uLiB9CitDUkVBVEUgUE9MSUNZIHJsc19wOCBPTiBybHNfdGJsXzEgVE8gcmVncmVzc19ybHNf ZGF2ZSwgcmVncmVzc19ybHNfYWxpY2UgVVNJTkcgKHRydWUpOworQ1JFQVRFIFBPTElDWSBybHNf cDkgT04gcmxzX3RibF8xIFRPIHJlZ3Jlc3NfcmxzX2V4ZW1wdF91c2VyIFdJVEggQ0hFQ0sgKGNp ZCA9IChTRUxFQ1Qgc2VjbHYgRlJPTSBybHNfdGJsXzIpKTsKKworLS0gTlVMTCBpbnB1dHMgc2hv dWxkIHJldHVybiBubyByb3dzCitTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19nZXRfcG9saWN5X2Rk bChOVUxMLCAncmxzX3AxJyk7CitTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19nZXRfcG9saWN5X2Rk bCgncmxzX3RibF8xJywgTlVMTCk7CitTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19nZXRfcG9saWN5 X2RkbChOVUxMLCBOVUxMKTsKKworLS0gVGFibGUgZG9lcyBub3QgZXhpc3QKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3BvbGljeV9kZGwoJ25vbmV4aXN0ZW50X3RibCcsICdybHNfcDEnKTsKKy0tIFBv bGljeSBkb2VzIG5vdCBleGlzdAorU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxz X3RibF8xJywgJ25vbmV4aXN0ZW50X3BvbCcpOworCistLSBJbnZhbGlkIG9wdGlvbiBuYW1lCitT RUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxJywgJ2Jh ZG9wdCcsICd0cnVlJyk7CistLSBJbnZhbGlkIGJvb2xlYW4gdmFsdWUgZm9yIG9wdGlvbgorU0VM RUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMScsICdwcmV0 dHknLCAnbWF5YmUnKTsKKy0tIER1cGxpY2F0ZSBvcHRpb24KK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEnLCAncHJldHR5JywgJ3RydWUnLCAncHJl dHR5JywgJ2ZhbHNlJyk7CisKKy0tIFdpdGhvdXQgcHJldHR5IGZvcm1hdHRpbmcgKGRlZmF1bHQp CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxJyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AyJyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AzJyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A0Jyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A1Jyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A2Jywg J3ByZXR0eScsICdmYWxzZScpOworU0VMRUNUICogRlJPTSBwZ19nZXRfcG9saWN5X2RkbCgncmxz X3RibF8xJywgJ3Jsc19wNycsICdwcmV0dHknLCAnZmFsc2UnKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDgnLCAncHJldHR5JywgJ2ZhbHNlJyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A5Jywg J3ByZXR0eScsICdmYWxzZScpOworCistLSBXaXRoIHByZXR0eSBmb3JtYXR0aW5nCitccHNldCBm b3JtYXQgdW5hbGlnbmVkCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJs XzEnLCAncmxzX3AxJywgJ3ByZXR0eScsICd0cnVlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AyJywgJ3ByZXR0eScsICd0cnVlJyk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AzJywgJ3ByZXR0 eScsICd0cnVlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEn LCAncmxzX3A0JywgJ3ByZXR0eScsICd0cnVlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xp Y3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A1JywgJ3ByZXR0eScsICd0cnVlJyk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A2JywgJ3ByZXR0eScs ICd0cnVlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAn cmxzX3A3JywgJ3ByZXR0eScsICd0cnVlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wb2xpY3lf ZGRsKCdybHNfdGJsXzEnLCAncmxzX3A4JywgJ3ByZXR0eScsICd0cnVlJyk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A5JywgJ3ByZXR0eScsICd0 cnVlJyk7CitccHNldCBmb3JtYXQgYWxpZ25lZAorCistLSBSb3VuZC10cmlwOiB0aGUgZ2VuZXJh dGVkIERETCBtdXN0IGJlIHJlLWV4ZWN1dGFibGUsIGluY2x1ZGluZyBmb3IgYXRvbWljCistLSBi b29sZWFuIGV4cHJlc3Npb25zIHRoYXQgcGdfZ2V0X2V4cHIoKSBkb2VzIG5vdCBwYXJlbnRoZXNp emUuCitDUkVBVEUgVEFCTEUgcmxzX3J0IChhIGludCk7CitDUkVBVEUgUE9MSUNZIHJ0X3RydWUg T04gcmxzX3J0IFVTSU5HICh0cnVlKTsKK0NSRUFURSBQT0xJQ1kgcnRfZmFsc2UgT04gcmxzX3J0 IEZPUiBJTlNFUlQgV0lUSCBDSEVDSyAoZmFsc2UpOworQ1JFQVRFIFRFTVAgVEFCTEUgcnRfZGRs IEFTCisgICAgU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfcnQnLCAncnRfdHJ1ZScpIEFT IGRkbAorICAgIFVOSU9OIEFMTAorICAgIFNFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3J0 JywgJ3J0X2ZhbHNlJyk7CitEUk9QIFBPTElDWSBydF90cnVlIE9OIHJsc19ydDsKK0RST1AgUE9M SUNZIHJ0X2ZhbHNlIE9OIHJsc19ydDsKK1NFTEVDVCBkZGwgRlJPTSBydF9kZGwgT1JERVIgQlkg ZGRsIFxnZXhlYworU0VMRUNUIHBvbG5hbWUgRlJPTSBwZ19wb2xpY3kgV0hFUkUgcG9scmVsaWQg PSAncmxzX3J0Jzo6cmVnY2xhc3MgT1JERVIgQlkgcG9sbmFtZTsKK0RST1AgVEFCTEUgcmxzX3J0 OworCistLSBDbGVhbiB1cCBvYmplY3RzIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcGdfZ2V0X3BvbGlj eV9kZGwgZnVuY3Rpb24uCitEUk9QIFBPTElDWSBybHNfcDEgT04gcmxzX3RibF8xOworRFJPUCBQ T0xJQ1kgcmxzX3AyIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wMyBPTiBybHNfdGJs XzE7CitEUk9QIFBPTElDWSBybHNfcDQgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A1 IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNiBPTiBybHNfdGJsXzE7CitEUk9QIFBP TElDWSBybHNfcDcgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A4IE9OIHJsc190Ymxf MTsKK0RST1AgUE9MSUNZIHJsc19wOSBPTiBybHNfdGJsXzE7CitEUk9QIFRBQkxFIHJsc190Ymxf MTsKK0RST1AgVEFCTEUgcmxzX3RibF8yOworCiAtLQogLS0gQ2xlYW4gdXAgb2JqZWN0cwogLS0K LS0gCjIuNTEuMAoK --000000000000dd6f0c0652ef44fd--