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 1wJbBu-00035l-0U for pgsql-hackers@arkaria.postgresql.org; Sun, 03 May 2026 18:05:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wJbBp-0048h9-1E for pgsql-hackers@arkaria.postgresql.org; Sun, 03 May 2026 18:05:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wJbBo-0048h0-2O for pgsql-hackers@lists.postgresql.org; Sun, 03 May 2026 18:05:13 +0000 Received: from mail-vk1-xa36.google.com ([2607:f8b0:4864:20::a36]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wJbBm-0000000014T-0ek0 for pgsql-hackers@lists.postgresql.org; Sun, 03 May 2026 18:05:11 +0000 Received: by mail-vk1-xa36.google.com with SMTP id 71dfb90a1353d-56f75445470so2135328e0c.2 for ; Sun, 03 May 2026 11:05:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777831510; cv=none; d=google.com; s=arc-20240605; b=hAaFb5EP4d6cvM3D0IORmVQfkKqDTbfQ6Z3n2P0rRsm8SjBmJFVMH++hJhdskLfYRY WSzUBpfrjvv2DvqKiRjdHLyWl5e1puN1lPKS1ZPEzRyxA8xJd+UsjZVTUzl4mhJtlZ62 NpPpnZ2ea78KHoz8FKnciIODokEk1lw95FEuPgkukAJLFgi07LbFKukHP279wj3uObck G3qZi0Hg2XPjrwz9gXgvGaauDoK7a5xgRiDW/gc8VPZV0IrUekKQ9BK0PpA6/0rBKBJB eXrhfrTQnSsddOvLNVBIve1E0yHwG2sfQcwUgJFkkOfZ3hFZG1lKbgdDudMHRCTGwyKN OK9w== 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=ZkDYU9RGJ3U1RZvQByM+DnsvkB1G9wIjonXm2C/fPEA=; fh=MEmjsdAJTKjkbe0s6Y43Y9zkWesMumtjLQFYF5LNtzg=; b=Su/YOzLere/qPr5dwddnjF346Tr+RIqHRtY1Kg2uFOkmRm5Scwjmowf7wgVENpQPcZ XQQlfz69CRQGJQ0Gr9YtCyPDraPHEhoIgn8XpXm0jSeaRJTGdDPHFypBXgfRG8bRcmSb mcs9nhgvFHaj7f6q2wVcxDr4gR99xXlMLrbYkiycsliG9Gew+ZM7c9RKi1g/5jrtKLgm woXyXloUQwdyRFgpqgvyA+gOwQvVR4wuJa76ZulmrAMso7xrNIHJASSzpDMj6BecsnVN M4oVmKl5w9ESWlI+UdZS6byYvY2EcMhgcXU7ux7A0edKa+uow93apJ2m3CWlA9h8fzpW MQyg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777831510; x=1778436310; 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=ZkDYU9RGJ3U1RZvQByM+DnsvkB1G9wIjonXm2C/fPEA=; b=HEoTAgNLp2DP3pejNkDZuosd6T28zE6JyXtxQfTXudHCV5Mi7IFu353lPUxV7g8NB5 E4HdZPLqKOt8JOWH4lMgsLhFcj3PwGGlKbiFCQIITWsRRlwTv4ruc28i3tzKCsmdRidp egtM7F5eX3R85nGjYOD8TvhPZ6uQKbvfoji7EhDkAEFFq73gIrK1w8ZK4Q/Qs1NxXOei we2A6pn8a3SOElNxI2+boALEKLhqYLmUNyc6la6LgZz7TKxlLrN+5Axm7+HfUBR4boLl xNxV3r8avJ7y4f8hgT0F2Hkik6m8VpU+BA6wrsFzeWp8hBIvTxAltZiWOtQyrcTvMPI2 8+/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777831510; x=1778436310; 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=ZkDYU9RGJ3U1RZvQByM+DnsvkB1G9wIjonXm2C/fPEA=; b=YKv+5ZVXbkg3bMEHz6VDT257G1JaeehIdYywzDGpH1M/rod9wIcQazuRKIHw3k5VCK Qms2CnGHHf2kFmaJfZpqCeBFiGMvR22MI/zDHOdv47Kyp6TuX6q1eBmCbwPFeR6UF4g5 iGViRcumuxOOhm+5nuAlaMAjRegoSfTd1ukPrP/tSaMGVc8s4zEBRE5QFBMyq+XtQQvA V1go56ReaEH4YLCCAQV38WmbmQnY3EHMbL9RjDXbCfkAWJR5+bypT4YozbQCEzxsMcfI 8GfD7Wc169HKRLPoJBv2mGRcvHG2wuJYu3onrp5XTFb8FCyTPxGpo/sqeMnI73BePdtl ISXA== X-Forwarded-Encrypted: i=1; AFNElJ9t/XHWuk+LLs9YS8KNSzonDxxfF4sozeLUIMlupcYNjCuFRmz359M7AVSNQ/pbzX654DhuNBYI+Sn5OUg+@lists.postgresql.org X-Gm-Message-State: AOJu0YyEUN8FDEfE8UMeicNAKsor8nanPrZSH8EMxAA8djeEdvSNt0ly +tcNZXIatDiKT5gvHDCmGNEZGYmdU7wOfIbWSWTpJAtS2Kztqy7W8cmgzJkbMBwWl+VJiEHWdPi MAZIIj3aT1pmkbl67+0R+EZVMPfLgW9U= X-Gm-Gg: AeBDietQOX/wzrCvQ8CvTu9RNtzjOszhcxxm1Grm7JtwDtMr4EzJaE90jf4mf8g8hZz iciwwAIC6giEo2eFb/0Ctnb+zj2JoahOT7t2hpLNiuQinu2zvK/LkQ3GoRf/BZRBTdyf+JEMnAz uP52W4vdoKO9p+HVe/YCzDHK6lOdwWx2QmcrIsT8aZcn8Gl1vznHXhD0vyJn8mbuv2VzbTfJ9lj JfcVSkJ8WVCeYU8DLjWbjq06D6mBfFi/wb8cIBO9jmuK1L4IlZTjOh6EgqcYssgGE9FS4DG2u43 DxldeBXr5fOUPwlNng== X-Received: by 2002:a05:6123:41:b0:570:2ace:c14a with SMTP id 71dfb90a1353d-5750c291cc4mr3192667e0c.0.1777831509717; Sun, 03 May 2026 11:05:09 -0700 (PDT) MIME-Version: 1.0 References: <20260414152425.879493d6202956e23afeae03@sraoss.co.jp> <20260428181420.2288f18ed3aa42cef2a7c7ca@sraoss.co.jp> In-Reply-To: <20260428181420.2288f18ed3aa42cef2a7c7ca@sraoss.co.jp> From: SATYANARAYANA NARLAPURAM Date: Sun, 3 May 2026 11:04:59 -0700 X-Gm-Features: AVHnY4Itg0_Vu6NtMV0xaG7cOBy_TUsvrT15ftPxOk6nVfejkvb6fcv0yiU_OM8 Message-ID: Subject: Re: Infinite Autovacuum loop caused by failing virtual generated column expression To: Yugo Nagata Cc: Dean Rasheed , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000009b8f430650eda7c1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009b8f430650eda7c1 Content-Type: multipart/alternative; boundary="0000000000009b8f410650eda7bf" --0000000000009b8f410650eda7bf Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Tue, Apr 28, 2026 at 2:14=E2=80=AFAM Yugo Nagata w= rote: > On Tue, 14 Apr 2026 00:16:42 -0700 > SATYANARAYANA NARLAPURAM wrote: > > > Hi > > > > On Mon, Apr 13, 2026 at 11:24=E2=80=AFPM Yugo Nagata > wrote: > > > > > On Sat, 11 Apr 2026 17:33:13 +0100 > > > Dean Rasheed wrote: > > > > > > > On Fri, 10 Apr 2026 at 21:19, SATYANARAYANA NARLAPURAM > > > > wrote: > > > > > > > > > > PG19 added support for stats on virtual generated columns [1]. > > > Creating extended statistics on a virtual generated column whose > expression > > > can raise an error leads to ANALYZE failing repeatedly, and autovacuu= m > > > retrying indefinitely. This floods the server logs and also wastes > > > resources. Vacuum analyze on that column (without extended stats) > succeeds. > > > > > > > > > > > > > True, though this is nothing new. The same thing can happen with > > > > expression statistics on an expression that raises an error, which > has > > > > been possible since PG14. > > > > > > Yes, this issue is not new, and I=E2=80=99m not aware of a way to pre= vent it a > > > priori. > > > > > > > > > > > > In order to avoid retry storms, I think we have two options. (1) > > > skipping the offending row from the sample, (2) skipping the extended > stats > > > computation for that table with a warning message. At least this avoi= d > > > autovacuum infinite retry. Attached a draft patch for the option (2). > > > Thoughts? > > > > > > > > > > > > > I'm not sure. The default retry interval is 1 minute, so it won't > > > > exactly be a flood of messages. Also, if the error only occurs for = a > > > > small subset of rows, it's possible that retrying might succeed. > > > > > > I think it would be good to skip ANALYZE for the extended statistics > that > > > cause > > > errors and just emit a warning, rather than aborting ANALYZE for the > > > entire table. > > > It seems reasonable to treat this as the user=E2=80=99s responsibilit= y to > notice > > > the warning > > > and address the underlying issue. > > > > > > > Yugo, thanks for the comments. Could you please review the v1 patch whe= n > you > > get a chance. It is in the direction you suggested. > > I've looked into the patch and have some comments. > > The child ResourceOwner is created and released in > BuildRelationExtStatistics(), > but I don't think it is necessary if we add other PG_TRY block in > make_build_data() > and compute_expr_stats(). For example in make_build_data(): > > + PG_TRY(); > + { > + datum =3D ExecEvalExpr(exprstate, > + > GetPerTupleExprContext(estate), > + > &isnull); > + } > + PG_CATCH(); > + { > + ExecDropSingleTupleTableSlot(slot); > + FreeExecutorState(estate); > + PG_RE_THROW(); > + } > + PG_END_TRY(); > Thanks, for reviewing the patch. Agreed, please find the updated patch. > Also, we could add tests for extended statistics that do not involve > virtual generated > columns, since those are not the cause root of the issue. In addition, it > might be useful > to verify that non-skipped extended statistics are still computed > successfully. > For example: > > +CREATE TABLE expr_err (a int); > +INSERT INTO expr_err VALUES (1), (2), (3); > +CREATE STATISTICS expr_err_s1 ON ((a/0)) FROM expr_err; > +CREATE STATISTICS expr_err_s2 ON (a/0),(a+1) FROM expr_err; > +CREATE STATISTICS expr_err_s3 ON ((a+1)) FROM expr_err; > +ANALYZE expr_err; -- should warn, not fail > +SELECT statistics_name from pg_stats_ext x > + WHERE tablename =3D 'expr_err' ORDER BY ROW(x.*); > Added these tests as well in the v2 patch. Thanks, Satya --0000000000009b8f410650eda7bf Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Tue, Apr 28, = 2026 at 2:14=E2=80=AFAM Yugo Nagata <nagata@sraoss.co.jp> wrote:
On Tue, 14 Apr 2026 00:16:42 -0700
SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com> wrote:

> Hi
>
> On Mon, Apr 13, 2026 at 11:24=E2=80=AFPM Yugo Nagata <nagata@sraoss.co.jp> wro= te:
>
> > On Sat, 11 Apr 2026 17:33:13 +0100
> > Dean Rasheed <dean.a.rasheed@gmail.com> wrote:
> >
> > > On Fri, 10 Apr 2026 at 21:19, SATYANARAYANA NARLAPURAM
> > > <satyanarlapuram@gmail.com> wrote:
> > > >
> > > > PG19 added support for stats on virtual generated colum= ns [1].
> > Creating extended statistics on a virtual generated column whose = expression
> > can raise an error leads to ANALYZE failing repeatedly, and autov= acuum
> > retrying indefinitely. This floods the server logs and also waste= s
> > resources. Vacuum analyze on that column (without extended stats)= succeeds.
> > > >
> > >
> > > True, though this is nothing new. The same thing can happen = with
> > > expression statistics on an expression that raises an error,= which has
> > > been possible since PG14.
> >
> > Yes, this issue is not new, and I=E2=80=99m not aware of a way to= prevent it a
> > priori.
> >
> > >
> > > > In order to avoid retry storms, I think we have two opt= ions. (1)
> > skipping the offending row from the sample, (2) skipping the exte= nded stats
> > computation for that table with a warning message. At least this = avoid
> > autovacuum infinite retry. Attached a draft patch for the option = (2).
> > Thoughts?
> > > >
> > >
> > > I'm not sure. The default retry interval is 1 minute, so= it won't
> > > exactly be a flood of messages. Also, if the error only occu= rs for a
> > > small subset of rows, it's possible that retrying might = succeed.
> >
> > I think it would be good to skip ANALYZE for the extended statist= ics that
> > cause
> > errors and just emit a warning, rather than aborting ANALYZE for = the
> > entire table.
> > It seems reasonable to treat this as the user=E2=80=99s responsib= ility to notice
> > the warning
> > and address the underlying issue.
> >
>
> Yugo, thanks for the comments. Could you please review the v1 patch wh= en you
> get a chance. It is in the direction you suggested.

I've looked into the patch and have some comments.

The child ResourceOwner is created and released in BuildRelationExtStatisti= cs(),
but I don't think it is necessary if we add other PG_TRY block in make_= build_data()
and compute_expr_stats(). For example in make_build_data():

+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0PG_TRY();
+=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 =C2=A0 =C2=A0 =C2=A0 =C2=A0datum =3D ExecEvalExpr(exprstate,
+=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 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 GetPerTupleExprContext(estate),
+=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 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &isnull);
+=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 =C2=A0 =C2=A0 =C2= =A0 =C2=A0PG_CATCH();
+=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 =C2=A0 =C2=A0 =C2=A0 =C2=A0ExecDropSingleTupleTableSlot(slot); +=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=A0FreeExecutorState(estate);
+=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=A0PG_RE_THROW();
+=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=A0PG_END_TRY();

Thanks, for rev= iewing the patch. Agreed, please find the updated patch.
=C2=A0
Also, we could add tests for extended statistics that do not involve virtua= l generated
columns, since those are not the cause root of the issue. In addition, it m= ight be useful
to verify that non-skipped extended statistics are still computed successfu= lly.
For example:

+CREATE TABLE expr_err (a int);
+INSERT INTO expr_err VALUES (1), (2), (3);
+CREATE STATISTICS expr_err_s1 ON ((a/0)) FROM expr_err;
+CREATE STATISTICS expr_err_s2 ON (a/0),(a+1) FROM expr_err;
+CREATE STATISTICS expr_err_s3 ON ((a+1)) FROM expr_err;
+ANALYZE expr_err;=C2=A0 -- should warn, not fail
+SELECT statistics_name from pg_stats_ext x
+=C2=A0 =C2=A0 WHERE tablename =3D 'expr_err' ORDER BY ROW(x.*);
=C2=A0
Added these tests as well in the v2 pat= ch.

=C2=A0Thanks,
Satya
--0000000000009b8f410650eda7bf-- --0000000000009b8f430650eda7c1 Content-Type: application/octet-stream; name="v2-0001-Fix-ANALYZE-crash-on-extended-stats-with-virtual-gen.patch" Content-Disposition: attachment; filename="v2-0001-Fix-ANALYZE-crash-on-extended-stats-with-virtual-gen.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_moq2yx500 RnJvbSA2YTI3MDVkMjA4NGFiZDliNmIzMDRjNDYwY2YxN2E0Yzk2YzFmZGFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXR5YSBOYXJsYXB1cmFtIDxzYXR5YW5hcmxhcHVyYW1AZ21h aWwuY29tPgpEYXRlOiBTdW4sIDMgTWF5IDIwMjYgMTc6Mzc6MjQgKzAwMDAKU3ViamVjdDogW1BB VENIXSBGaXggQU5BTFlaRSBjcmFzaCBvbiBleHRlbmRlZCBzdGF0cyB3aXRoIHZpcnR1YWwgZ2Vu ZXJhdGVkCiBjb2x1bW5zCgpXaGVuIGEgdGFibGUgaGFzIGV4dGVuZGVkIHN0YXRpc3RpY3MgaW52 b2x2aW5nIGV4cHJlc3Npb25zIG9uIHZpcnR1YWwKZ2VuZXJhdGVkIGNvbHVtbnMsIEFOQUxZWkUg Y2FuIGZhaWwgaWYgZXZhbHVhdGluZyB0aG9zZSBleHByZXNzaW9ucwpyYWlzZXMgYW4gZXJyb3Ig KGUuZy4gZGl2aXNpb24gYnkgemVybykuIFRoaXMgaGFwcGVucyBiZWNhdXNlIHRoZQpnZW5lcmF0 ZWQgY29sdW1uIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGRpcmVjdGx5IGR1cmluZyBzdGF0aXN0 aWNzCmNvbXB1dGF0aW9uLgoKRml4IGJ5IHdyYXBwaW5nIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBp biBQR19UUlkvUEdfQ0FUQ0ggYmxvY2tzOgoKLSBJbiBtYWtlX2J1aWxkX2RhdGEoKSBhbmQgY29t cHV0ZV9leHByX3N0YXRzKCksIGFkZCBQR19UUlkgYmxvY2tzCiAgdGhhdCBjbGVhbiB1cCBleGVj dXRvciByZXNvdXJjZXMgKHNsb3QsIGVzdGF0ZSkgYmVmb3JlIHJlLXRocm93aW5nLAogIHByZXZl bnRpbmcgcmVzb3VyY2UgbGVha3Mgb24gZXJyb3IuCgotIEluIEJ1aWxkUmVsYXRpb25FeHRTdGF0 aXN0aWNzKCksIGNhdGNoIGVycm9ycyBmcm9tIGV4cHJlc3Npb24KICBldmFsdWF0aW9uLCBpc3N1 ZSBhIFdBUk5JTkcgd2l0aCB0aGUgc3RhdGlzdGljcyBvYmplY3QgbmFtZSBhbmQKICBlcnJvciBk ZXRhaWxzLCB0aGVuIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIHJlbWFpbmluZyBzdGF0aXN0aWNz CiAgb2JqZWN0cy4KClRoaXMgZW5zdXJlcyBBTkFMWVpFIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkg ZXZlbiB3aGVuIHNvbWUgZXh0ZW5kZWQKc3RhdGlzdGljcyBvYmplY3RzIGNhbm5vdCBiZSBjb21w dXRlZCBkdWUgdG8gZXhwcmVzc2lvbiBldmFsdWF0aW9uCmVycm9ycy4KLS0tCiBzcmMvYmFja2Vu ZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMgfCAyMzggKysrKysrKysrKysrKysrLS0tLS0t LS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQgfCAgMjkgKysrCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsICAgICAgfCAgMjAgKysKIDMgZmlsZXMg Y2hhbmdlZCwgMTk1IGluc2VydGlvbnMoKyksIDkyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYyBiL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYwppbmRleCAyYjgzMzU1ZC4uODhjZWE4MWIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYworKysgYi9zcmMv YmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKQEAgLTE5NCw0MSArMTk0LDczIEBA IEJ1aWxkUmVsYXRpb25FeHRTdGF0aXN0aWNzKFJlbGF0aW9uIG9uZXJlbCwgYm9vbCBpbmgsIGRv dWJsZSB0b3RhbHJvd3MsCiAJCWlmIChzdGF0dGFyZ2V0ID09IDApCiAJCQljb250aW51ZTsKIAot CQkvKiBldmFsdWF0ZSBleHByZXNzaW9ucyAoaWYgdGhlIHN0YXRpc3RpY3Mgb2JqZWN0IGhhcyBh bnkpICovCi0JCWRhdGEgPSBtYWtlX2J1aWxkX2RhdGEob25lcmVsLCBzdGF0LCBudW1yb3dzLCBy b3dzLCBzdGF0cywgc3RhdHRhcmdldCk7Ci0KLQkJLyogY29tcHV0ZSBzdGF0aXN0aWMgb2YgZWFj aCByZXF1ZXN0ZWQgdHlwZSAqLwotCQlmb3JlYWNoKGxjMiwgc3RhdC0+dHlwZXMpCisJCS8qCisJ CSAqIFdyYXAgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGFuZCBzdGF0cyBjb21wdXRhdGlvbiBpbiBQ R19UUlkgc28KKwkJICogdGhhdCBlcnJvcnMgZnJvbSBldmFsdWF0aW5nIGV4cHJlc3Npb25zIChl LmcuIGRpdmlzaW9uIGJ5IHplcm8KKwkJICogaW4gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucykg ZG9uJ3QgY2F1c2UgQU5BTFlaRSB0byBmYWlsCisJCSAqIGVudGlyZWx5LiAgU2tpcCB0aGUgc3Rh dGlzdGljcyBvYmplY3QgYW5kIGlzc3VlIGEgV0FSTklORworCQkgKiBpbnN0ZWFkLgorCQkgKi8K KwkJUEdfVFJZKCk7CiAJCXsKLQkJCWNoYXIJCXQgPSAoY2hhcikgbGZpcnN0X2ludChsYzIpOwot Ci0JCQlpZiAodCA9PSBTVEFUU19FWFRfTkRJU1RJTkNUKQotCQkJCW5kaXN0aW5jdCA9IHN0YXRl eHRfbmRpc3RpbmN0X2J1aWxkKHRvdGFscm93cywgZGF0YSk7Ci0JCQllbHNlIGlmICh0ID09IFNU QVRTX0VYVF9ERVBFTkRFTkNJRVMpCi0JCQkJZGVwZW5kZW5jaWVzID0gc3RhdGV4dF9kZXBlbmRl bmNpZXNfYnVpbGQoZGF0YSk7Ci0JCQllbHNlIGlmICh0ID09IFNUQVRTX0VYVF9NQ1YpCi0JCQkJ bWN2ID0gc3RhdGV4dF9tY3ZfYnVpbGQoZGF0YSwgdG90YWxyb3dzLCBzdGF0dGFyZ2V0KTsKLQkJ CWVsc2UgaWYgKHQgPT0gU1RBVFNfRVhUX0VYUFJFU1NJT05TKQorCQkJLyogZXZhbHVhdGUgZXhw cmVzc2lvbnMgKGlmIHRoZSBzdGF0aXN0aWNzIGhhcyBhbnkpICovCisJCQlkYXRhID0gbWFrZV9i dWlsZF9kYXRhKG9uZXJlbCwgc3RhdCwgbnVtcm93cywgcm93cywKKwkJCQkJCQkJICAgc3RhdHMs IHN0YXR0YXJnZXQpOworCisJCQkvKiBjb21wdXRlIHN0YXRpc3RpYyBvZiBlYWNoIHJlcXVlc3Rl ZCB0eXBlICovCisJCQlmb3JlYWNoKGxjMiwgc3RhdC0+dHlwZXMpCiAJCQl7Ci0JCQkJQW5sRXhw ckRhdGEgKmV4cHJkYXRhOwotCQkJCWludAkJCW5leHByczsKKwkJCQljaGFyCQl0ID0gKGNoYXIp IGxmaXJzdF9pbnQobGMyKTsKKworCQkJCWlmICh0ID09IFNUQVRTX0VYVF9ORElTVElOQ1QpCisJ CQkJCW5kaXN0aW5jdCA9IHN0YXRleHRfbmRpc3RpbmN0X2J1aWxkKHRvdGFscm93cywgZGF0YSk7 CisJCQkJZWxzZSBpZiAodCA9PSBTVEFUU19FWFRfREVQRU5ERU5DSUVTKQorCQkJCQlkZXBlbmRl bmNpZXMgPSBzdGF0ZXh0X2RlcGVuZGVuY2llc19idWlsZChkYXRhKTsKKwkJCQllbHNlIGlmICh0 ID09IFNUQVRTX0VYVF9NQ1YpCisJCQkJCW1jdiA9IHN0YXRleHRfbWN2X2J1aWxkKGRhdGEsIHRv dGFscm93cywgc3RhdHRhcmdldCk7CisJCQkJZWxzZSBpZiAodCA9PSBTVEFUU19FWFRfRVhQUkVT U0lPTlMpCisJCQkJeworCQkJCQlBbmxFeHByRGF0YSAqZXhwcmRhdGE7CisJCQkJCWludAkJCW5l eHByczsKIAotCQkJCS8qIHNob3VsZCBub3QgaGFwcGVuLCB0aGFua3MgdG8gY2hlY2tzIHdoZW4g ZGVmaW5pbmcgc3RhdHMgKi8KLQkJCQlpZiAoIXN0YXQtPmV4cHJzKQotCQkJCQllbG9nKEVSUk9S LCAicmVxdWVzdGVkIGV4cHJlc3Npb24gc3RhdHMsIGJ1dCB0aGVyZSBhcmUgbm8gZXhwcmVzc2lv bnMiKTsKKwkJCQkJLyogc2hvdWxkIG5vdCBoYXBwZW4sIHRoYW5rcyB0byBjaGVja3Mgd2hlbiBk ZWZpbmluZyBzdGF0cyAqLworCQkJCQlpZiAoIXN0YXQtPmV4cHJzKQorCQkJCQkJZWxvZyhFUlJP UiwgInJlcXVlc3RlZCBleHByZXNzaW9uIHN0YXRzLCBidXQgdGhlcmUgYXJlIG5vIGV4cHJlc3Np b25zIik7CiAKLQkJCQlleHByZGF0YSA9IGJ1aWxkX2V4cHJfZGF0YShzdGF0LT5leHBycywgc3Rh dHRhcmdldCk7Ci0JCQkJbmV4cHJzID0gbGlzdF9sZW5ndGgoc3RhdC0+ZXhwcnMpOworCQkJCQll eHByZGF0YSA9IGJ1aWxkX2V4cHJfZGF0YShzdGF0LT5leHBycywgc3RhdHRhcmdldCk7CisJCQkJ CW5leHBycyA9IGxpc3RfbGVuZ3RoKHN0YXQtPmV4cHJzKTsKIAotCQkJCWNvbXB1dGVfZXhwcl9z dGF0cyhvbmVyZWwsIGV4cHJkYXRhLCBuZXhwcnMsIHJvd3MsIG51bXJvd3MpOworCQkJCQljb21w dXRlX2V4cHJfc3RhdHMob25lcmVsLCBleHByZGF0YSwgbmV4cHJzLAorCQkJCQkJCQkJICAgcm93 cywgbnVtcm93cyk7CiAKLQkJCQlleHByc3RhdHMgPSBzZXJpYWxpemVfZXhwcl9zdGF0cyhleHBy ZGF0YSwgbmV4cHJzKTsKKwkJCQkJZXhwcnN0YXRzID0gc2VyaWFsaXplX2V4cHJfc3RhdHMoZXhw cmRhdGEsIG5leHBycyk7CisJCQkJfQogCQkJfQotCQl9CiAKLQkJLyogc3RvcmUgdGhlIHN0YXRp c3RpY3MgaW4gdGhlIGNhdGFsb2cgKi8KLQkJc3RhdGV4dF9zdG9yZShzdGF0LT5zdGF0T2lkLCBp bmgsCi0JCQkJCSAgbmRpc3RpbmN0LCBkZXBlbmRlbmNpZXMsIG1jdiwgZXhwcnN0YXRzLCBzdGF0 cyk7CisJCQkvKiBzdG9yZSB0aGUgc3RhdGlzdGljcyBpbiB0aGUgY2F0YWxvZyAqLworCQkJc3Rh dGV4dF9zdG9yZShzdGF0LT5zdGF0T2lkLCBpbmgsCisJCQkJCQkgIG5kaXN0aW5jdCwgZGVwZW5k ZW5jaWVzLCBtY3YsIGV4cHJzdGF0cywgc3RhdHMpOworCQl9CisJCVBHX0NBVENIKCk7CisJCXsK KwkJCUVycm9yRGF0YSAgKmVkYXRhOworCisJCQkvKiBTYXZlIHRoZSBlcnJvciwgaXNzdWUgYSBX QVJOSU5HIGFuZCBjb250aW51ZSAqLworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN4dCk7CisJ CQllZGF0YSA9IENvcHlFcnJvckRhdGEoKTsKKwkJCUZsdXNoRXJyb3JTdGF0ZSgpOworCisJCQll cmVwb3J0KFdBUk5JTkcsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfV0FSTklORyksCisJCQkJCSBl cnJtc2coInNraXBwaW5nIHN0YXRpc3RpY3Mgb2JqZWN0IFwiJXMuJXNcIiBmb3IgcmVsYXRpb24g XCIlcy4lc1wiIiwKKwkJCQkJCQlzdGF0LT5zY2hlbWEsIHN0YXQtPm5hbWUsCisJCQkJCQkJZ2V0 X25hbWVzcGFjZV9uYW1lKG9uZXJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UpLAorCQkJCQkJCVJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKG9uZXJlbCkpLAorCQkJCQkgZXJyZGV0YWlsKCIlcyIsIGVk YXRhLT5tZXNzYWdlKSkpOworCisJCQlGcmVlRXJyb3JEYXRhKGVkYXRhKTsKKwkJfQorCQlQR19F TkRfVFJZKCk7CiAKIAkJLyogZm9yIHJlcG9ydGluZyBwcm9ncmVzcyAqLwogCQlwZ3N0YXRfcHJv Z3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0FOQUxZWkVfRVhUX1NUQVRTX0NPTVBVVEVELApA QCAtMjE4NSw0NiArMjIxNyw1OCBAQCBjb21wdXRlX2V4cHJfc3RhdHMoUmVsYXRpb24gb25lcmVs LCBBbmxFeHByRGF0YSAqZXhwcmRhdGEsIGludCBuZXhwcnMsCiAJCWV4cHJudWxscyA9IChib29s ICopIHBhbGxvYyhudW1yb3dzICogc2l6ZW9mKGJvb2wpKTsKIAogCQl0Y250ID0gMDsKLQkJZm9y IChpID0gMDsgaSA8IG51bXJvd3M7IGkrKykKKwkJUEdfVFJZKCk7CiAJCXsKLQkJCURhdHVtCQlk YXR1bTsKLQkJCWJvb2wJCWlzbnVsbDsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1yb3dzOyBpKysp CisJCQl7CisJCQkJRGF0dW0JCWRhdHVtOworCQkJCWJvb2wJCWlzbnVsbDsKIAotCQkJLyoKLQkJ CSAqIFJlc2V0IHRoZSBwZXItdHVwbGUgY29udGV4dCBlYWNoIHRpbWUsIHRvIHJlY2xhaW0gYW55 IGNydWZ0Ci0JCQkgKiBsZWZ0IGJlaGluZCBieSBldmFsdWF0aW5nIHRoZSBzdGF0aXN0aWNzIGV4 cHJlc3Npb25zLgotCQkJICovCi0JCQlSZXNldEV4cHJDb250ZXh0KGVjb250ZXh0KTsKKwkJCQkv KgorCQkJCSAqIFJlc2V0IHRoZSBwZXItdHVwbGUgY29udGV4dCBlYWNoIHRpbWUsIHRvIHJlY2xh aW0gYW55CisJCQkJICogY3J1ZnQgbGVmdCBiZWhpbmQgYnkgZXZhbHVhdGluZyB0aGUgc3RhdGlz dGljcworCQkJCSAqIGV4cHJlc3Npb25zLgorCQkJCSAqLworCQkJCVJlc2V0RXhwckNvbnRleHQo ZWNvbnRleHQpOwogCi0JCQkvKiBTZXQgdXAgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbiAqLwot CQkJRXhlY1N0b3JlSGVhcFR1cGxlKHJvd3NbaV0sIHNsb3QsIGZhbHNlKTsKKwkJCQkvKiBTZXQg dXAgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbiAqLworCQkJCUV4ZWNTdG9yZUhlYXBUdXBsZShy b3dzW2ldLCBzbG90LCBmYWxzZSk7CiAKLQkJCS8qCi0JCQkgKiBFdmFsdWF0ZSB0aGUgZXhwcmVz c2lvbi4gV2UgZG8gdGhpcyBpbiB0aGUgcGVyLXR1cGxlIGNvbnRleHQgc28KLQkJCSAqIGFzIG5v dCB0byBsZWFrIG1lbW9yeSwgYW5kIHRoZW4gY29weSB0aGUgcmVzdWx0IGludG8gdGhlCi0JCQkg KiBjb250ZXh0IGNyZWF0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZ1bmN0aW9uLgotCQkJ ICovCi0JCQlkYXR1bSA9IEV4ZWNFdmFsRXhwclN3aXRjaENvbnRleHQoZXhwcnN0YXRlLAotCQkJ CQkJCQkJCQkgIEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRlKSwKLQkJCQkJCQkJCQkJICAm aXNudWxsKTsKLQkJCWlmIChpc251bGwpCi0JCQl7Ci0JCQkJZXhwcnZhbHNbdGNudF0gPSAoRGF0 dW0pIDA7Ci0JCQkJZXhwcm51bGxzW3RjbnRdID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsK LQkJCQkvKiBNYWtlIHN1cmUgd2UgY29weSB0aGUgZGF0YSBpbnRvIHRoZSBjb250ZXh0LiAqLwot CQkJCUFzc2VydChDdXJyZW50TWVtb3J5Q29udGV4dCA9PSBleHByX2NvbnRleHQpOworCQkJCS8q CisJCQkJICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24uIFdlIGRvIHRoaXMgaW4gdGhlIHBlci10 dXBsZQorCQkJCSAqIGNvbnRleHQgc28gYXMgbm90IHRvIGxlYWsgbWVtb3J5LCBhbmQgdGhlbiBj b3B5IHRoZQorCQkJCSAqIHJlc3VsdCBpbnRvIHRoZSBjb250ZXh0IGNyZWF0ZWQgYXQgdGhlIGJl Z2lubmluZyBvZgorCQkJCSAqIHRoaXMgZnVuY3Rpb24uCisJCQkJICovCisJCQkJZGF0dW0gPSBF eGVjRXZhbEV4cHJTd2l0Y2hDb250ZXh0KGV4cHJzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgR2V0UGVy VHVwbGVFeHByQ29udGV4dChlc3RhdGUpLAorCQkJCQkJCQkJCQkJICAmaXNudWxsKTsKKwkJCQlp ZiAoaXNudWxsKQorCQkJCXsKKwkJCQkJZXhwcnZhbHNbdGNudF0gPSAoRGF0dW0pIDA7CisJCQkJ CWV4cHJudWxsc1t0Y250XSA9IHRydWU7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8q IE1ha2Ugc3VyZSB3ZSBjb3B5IHRoZSBkYXRhIGludG8gdGhlIGNvbnRleHQuICovCisJCQkJCUFz c2VydChDdXJyZW50TWVtb3J5Q29udGV4dCA9PSBleHByX2NvbnRleHQpOwogCi0JCQkJZXhwcnZh bHNbdGNudF0gPSBkYXR1bUNvcHkoZGF0dW0sCi0JCQkJCQkJCQkJICAgc3RhdHMtPmF0dHJ0eXBl LT50eXBieXZhbCwKLQkJCQkJCQkJCQkgICBzdGF0cy0+YXR0cnR5cGUtPnR5cGxlbik7Ci0JCQkJ ZXhwcm51bGxzW3RjbnRdID0gZmFsc2U7Ci0JCQl9CisJCQkJCWV4cHJ2YWxzW3RjbnRdID0gZGF0 dW1Db3B5KGRhdHVtLAorCQkJCQkJCQkJCQkgICBzdGF0cy0+YXR0cnR5cGUtPnR5cGJ5dmFsLAor CQkJCQkJCQkJCQkgICBzdGF0cy0+YXR0cnR5cGUtPnR5cGxlbik7CisJCQkJCWV4cHJudWxsc1t0 Y250XSA9IGZhbHNlOworCQkJCX0KIAotCQkJdGNudCsrOworCQkJCXRjbnQrKzsKKwkJCX0KKwkJ fQorCQlQR19DQVRDSCgpOworCQl7CisJCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNs b3QpOworCQkJRnJlZUV4ZWN1dG9yU3RhdGUoZXN0YXRlKTsKKwkJCVBHX1JFX1RIUk9XKCk7CiAJ CX0KKwkJUEdfRU5EX1RSWSgpOwogCiAJCS8qCiAJCSAqIE5vdyB3ZSBjYW4gY29tcHV0ZSB0aGUg c3RhdGlzdGljcyBmb3IgdGhlIGV4cHJlc3Npb24gY29sdW1ucy4KQEAgLTI2MjQsNDYgKzI2Njgs NTYgQEAgbWFrZV9idWlsZF9kYXRhKFJlbGF0aW9uIHJlbCwgU3RhdEV4dEVudHJ5ICpzdGF0LCBp bnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAogCS8qIFNldCB1cCBleHByZXNzaW9uIGV2YWx1 YXRpb24gc3RhdGUgKi8KIAlleHByc3RhdGVzID0gRXhlY1ByZXBhcmVFeHByTGlzdChzdGF0LT5l eHBycywgZXN0YXRlKTsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1yb3dzOyBpKyspCisJUEdfVFJZ KCk7CiAJewotCQkvKgotCQkgKiBSZXNldCB0aGUgcGVyLXR1cGxlIGNvbnRleHQgZWFjaCB0aW1l LCB0byByZWNsYWltIGFueSBjcnVmdCBsZWZ0Ci0JCSAqIGJlaGluZCBieSBldmFsdWF0aW5nIHRo ZSBzdGF0aXN0aWNzIG9iamVjdCBleHByZXNzaW9ucy4KLQkJICovCi0JCVJlc2V0RXhwckNvbnRl eHQoZWNvbnRleHQpOwotCi0JCS8qIFNldCB1cCBmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uICov Ci0JCUV4ZWNTdG9yZUhlYXBUdXBsZShyb3dzW2ldLCBzbG90LCBmYWxzZSk7Ci0KLQkJaWR4ID0g Ym1zX251bV9tZW1iZXJzKHN0YXQtPmNvbHVtbnMpOwotCQlmb3JlYWNoKGxjLCBleHByc3RhdGVz KQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtcm93czsgaSsrKQogCQl7Ci0JCQlEYXR1bQkJZGF0dW07 Ci0JCQlib29sCQlpc251bGw7Ci0JCQlFeHByU3RhdGUgICpleHByc3RhdGUgPSAoRXhwclN0YXRl ICopIGxmaXJzdChsYyk7Ci0KIAkJCS8qCi0JCQkgKiBYWFggVGhpcyBwcm9iYWJseSBsZWFrcyBt ZW1vcnkuIE1heWJlIHdlIHNob3VsZCB1c2UKLQkJCSAqIEV4ZWNFdmFsRXhwclN3aXRjaENvbnRl eHQgYnV0IHRoZW4gd2UgbmVlZCB0byBjb3B5IHRoZSByZXN1bHQKLQkJCSAqIHNvbWV3aGVyZSBl bHNlLgorCQkJICogUmVzZXQgdGhlIHBlci10dXBsZSBjb250ZXh0IGVhY2ggdGltZSwgdG8gcmVj bGFpbSBhbnkgY3J1ZnQKKwkJCSAqIGxlZnQgYmVoaW5kIGJ5IGV2YWx1YXRpbmcgdGhlIHN0YXRp c3RpY3Mgb2JqZWN0IGV4cHJlc3Npb25zLgogCQkJICovCi0JCQlkYXR1bSA9IEV4ZWNFdmFsRXhw cihleHByc3RhdGUsCi0JCQkJCQkJCSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVzdGF0ZSksCi0J CQkJCQkJCSAmaXNudWxsKTsKLQkJCWlmIChpc251bGwpCi0JCQl7Ci0JCQkJcmVzdWx0LT52YWx1 ZXNbaWR4XVtpXSA9IChEYXR1bSkgMDsKLQkJCQlyZXN1bHQtPm51bGxzW2lkeF1baV0gPSB0cnVl OwotCQkJfQotCQkJZWxzZQorCQkJUmVzZXRFeHByQ29udGV4dChlY29udGV4dCk7CisKKwkJCS8q IFNldCB1cCBmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uICovCisJCQlFeGVjU3RvcmVIZWFwVHVw bGUocm93c1tpXSwgc2xvdCwgZmFsc2UpOworCisJCQlpZHggPSBibXNfbnVtX21lbWJlcnMoc3Rh dC0+Y29sdW1ucyk7CisJCQlmb3JlYWNoKGxjLCBleHByc3RhdGVzKQogCQkJewotCQkJCXJlc3Vs dC0+dmFsdWVzW2lkeF1baV0gPSBkYXR1bTsKLQkJCQlyZXN1bHQtPm51bGxzW2lkeF1baV0gPSBm YWxzZTsKLQkJCX0KKwkJCQlEYXR1bQkJZGF0dW07CisJCQkJYm9vbAkJaXNudWxsOworCQkJCUV4 cHJTdGF0ZSAgKmV4cHJzdGF0ZSA9IChFeHByU3RhdGUgKikgbGZpcnN0KGxjKTsKIAotCQkJaWR4 Kys7CisJCQkJLyoKKwkJCQkgKiBYWFggVGhpcyBwcm9iYWJseSBsZWFrcyBtZW1vcnkuIE1heWJl IHdlIHNob3VsZCB1c2UKKwkJCQkgKiBFeGVjRXZhbEV4cHJTd2l0Y2hDb250ZXh0IGJ1dCB0aGVu IHdlIG5lZWQgdG8gY29weSB0aGUKKwkJCQkgKiByZXN1bHQgc29tZXdoZXJlIGVsc2UuCisJCQkJ ICovCisJCQkJZGF0dW0gPSBFeGVjRXZhbEV4cHIoZXhwcnN0YXRlLAorCQkJCQkJCQkJIEdldFBl clR1cGxlRXhwckNvbnRleHQoZXN0YXRlKSwKKwkJCQkJCQkJCSAmaXNudWxsKTsKKwkJCQlpZiAo aXNudWxsKQorCQkJCXsKKwkJCQkJcmVzdWx0LT52YWx1ZXNbaWR4XVtpXSA9IChEYXR1bSkgMDsK KwkJCQkJcmVzdWx0LT5udWxsc1tpZHhdW2ldID0gdHJ1ZTsKKwkJCQl9CisJCQkJZWxzZQorCQkJ CXsKKwkJCQkJcmVzdWx0LT52YWx1ZXNbaWR4XVtpXSA9IGRhdHVtOworCQkJCQlyZXN1bHQtPm51 bGxzW2lkeF1baV0gPSBmYWxzZTsKKwkJCQl9CisKKwkJCQlpZHgrKzsKKwkJCX0KIAkJfQogCX0K KwlQR19DQVRDSCgpOworCXsKKwkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsK KwkJRnJlZUV4ZWN1dG9yU3RhdGUoZXN0YXRlKTsKKwkJUEdfUkVfVEhST1coKTsKKwl9CisJUEdf RU5EX1RSWSgpOwogCiAJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKIAlGcmVl RXhlY3V0b3JTdGF0ZShlc3RhdGUpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zdGF0c19leHQub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQu b3V0CmluZGV4IDM3MDcwYzFhLi40Mzg5MmY0ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zdGF0c19leHQub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c3RhdHNfZXh0Lm91dApAQCAtMzIwNyw2ICszMjA3LDE0IEBAIFNFTEVDVCAqIEZST00gY2hlY2tf ZXN0aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gdmlydHVhbF9nZW5fc3RhdHMgV0hFUkUgdyA9 IDAnCiAoMSByb3cpCiAKIERST1AgVEFCTEUgdmlydHVhbF9nZW5fc3RhdHM7CistLSBleHRlbmRl ZCBzdGF0aXN0aWNzIG9uIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgd2hvc2UgZXhwcmVzc2lv bnMgY2FuIGVycm9yCitDUkVBVEUgVEFCTEUgdmlydHVhbF9nZW5fZXJyIChhIGludCwgYiBpbnQg R0VORVJBVEVEIEFMV0FZUyBBUyAoYSAvIDApIFZJUlRVQUwpOworSU5TRVJUIElOVE8gdmlydHVh bF9nZW5fZXJyIFZBTFVFUyAoMSksICgyKSwgKDMpOworQ1JFQVRFIFNUQVRJU1RJQ1MgdmlydHVh bF9nZW5fZXJyX3MgT04gYSwgYiBGUk9NIHZpcnR1YWxfZ2VuX2VycjsKK0FOQUxZWkUgdmlydHVh bF9nZW5fZXJyOyAgLS0gc2hvdWxkIHdhcm4sIG5vdCBmYWlsCitXQVJOSU5HOiAgc2tpcHBpbmcg c3RhdGlzdGljcyBvYmplY3QgInB1YmxpYy52aXJ0dWFsX2dlbl9lcnJfcyIgZm9yIHJlbGF0aW9u ICJwdWJsaWMudmlydHVhbF9nZW5fZXJyIgorREVUQUlMOiAgZGl2aXNpb24gYnkgemVybworRFJP UCBUQUJMRSB2aXJ0dWFsX2dlbl9lcnI7CiAtLSBQZXJtaXNzaW9uIHRlc3RzLiBVc2VycyBzaG91 bGQgbm90IGJlIGFibGUgdG8gc2VlIHNwZWNpZmljIGRhdGEgdmFsdWVzIGluCiAtLSB0aGUgZXh0 ZW5kZWQgc3RhdGlzdGljcywgaWYgdGhleSBsYWNrIHBlcm1pc3Npb24gdG8gc2VlIHRob3NlIHZh bHVlcyBpbgogLS0gdGhlIHVuZGVybHlpbmcgdGFibGUuCkBAIC0zNzA5LDMgKzM3MTcsMjQgQEAg U0VMRUNUIHJhbmdlX2xlbmd0aF9oaXN0b2dyYW0sIHJhbmdlX2VtcHR5X2ZyYWMsIHJhbmdlX2Jv dW5kc19oaXN0b2dyYW0KICgxIHJvdykKIAogRFJPUCBUQUJMRSBzdGF0c19leHRfdGJsX3Jhbmdl OworLS0gRXhwcmVzc2lvbiBzdGF0aXN0aWNzIHdpdGggZXJyb3JzIChub3QgaW52b2x2aW5nIHZp cnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMpLgorLS0gRXJyb3JzIGR1cmluZyBleHByZXNzaW9uIGV2 YWx1YXRpb24gc2hvdWxkIHByb2R1Y2UgYSBXQVJOSU5HLCBub3QgYSBmYWlsdXJlLAorLS0gYW5k IG5vbi1lcnJvcmluZyBzdGF0aXN0aWNzIG9iamVjdHMgc2hvdWxkIHN0aWxsIGJlIGNvbXB1dGVk LgorQ1JFQVRFIFRBQkxFIGV4cHJfZXJyIChhIGludCk7CitJTlNFUlQgSU5UTyBleHByX2VyciBW QUxVRVMgKDEpLCAoMiksICgzKTsKK0NSRUFURSBTVEFUSVNUSUNTIGV4cHJfZXJyX3MxIE9OICgo YS8wKSkgRlJPTSBleHByX2VycjsKK0NSRUFURSBTVEFUSVNUSUNTIGV4cHJfZXJyX3MyIE9OIChh LzApLChhKzEpIEZST00gZXhwcl9lcnI7CitDUkVBVEUgU1RBVElTVElDUyBleHByX2Vycl9zMyBP TiAoKGErMSkpIEZST00gZXhwcl9lcnI7CitBTkFMWVpFIGV4cHJfZXJyOyAgLS0gc2hvdWxkIHdh cm4sIG5vdCBmYWlsCitXQVJOSU5HOiAgc2tpcHBpbmcgc3RhdGlzdGljcyBvYmplY3QgInB1Ymxp Yy5leHByX2Vycl9zMSIgZm9yIHJlbGF0aW9uICJwdWJsaWMuZXhwcl9lcnIiCitERVRBSUw6ICBk aXZpc2lvbiBieSB6ZXJvCitXQVJOSU5HOiAgc2tpcHBpbmcgc3RhdGlzdGljcyBvYmplY3QgInB1 YmxpYy5leHByX2Vycl9zMiIgZm9yIHJlbGF0aW9uICJwdWJsaWMuZXhwcl9lcnIiCitERVRBSUw6 ICBkaXZpc2lvbiBieSB6ZXJvCitTRUxFQ1Qgc3RhdGlzdGljc19uYW1lIGZyb20gcGdfc3RhdHNf ZXh0IHgKKyAgICBXSEVSRSB0YWJsZW5hbWUgPSAnZXhwcl9lcnInIE9SREVSIEJZIFJPVyh4Liop OworIHN0YXRpc3RpY3NfbmFtZSAKKy0tLS0tLS0tLS0tLS0tLS0tCisgZXhwcl9lcnJfczMKKygx IHJvdykKKworRFJPUCBUQUJMRSBleHByX2VycjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3N0YXRzX2V4dC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3Fs CmluZGV4IDNjYzYwMTJiLi5mNzhmZDkwMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvc3RhdHNfZXh0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3Fs CkBAIC0xNjA4LDYgKzE2MDgsMTMgQEAgU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93 cygnU0VMRUNUICogRlJPTSB2aXJ0dWFsX2dlbl9zdGF0cyBXSEVSRSB3ID0gMCcKIAogRFJPUCBU QUJMRSB2aXJ0dWFsX2dlbl9zdGF0czsKIAorLS0gZXh0ZW5kZWQgc3RhdGlzdGljcyBvbiB2aXJ0 dWFsIGdlbmVyYXRlZCBjb2x1bW5zIHdob3NlIGV4cHJlc3Npb25zIGNhbiBlcnJvcgorQ1JFQVRF IFRBQkxFIHZpcnR1YWxfZ2VuX2VyciAoYSBpbnQsIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMg KGEgLyAwKSBWSVJUVUFMKTsKK0lOU0VSVCBJTlRPIHZpcnR1YWxfZ2VuX2VyciBWQUxVRVMgKDEp LCAoMiksICgzKTsKK0NSRUFURSBTVEFUSVNUSUNTIHZpcnR1YWxfZ2VuX2Vycl9zIE9OIGEsIGIg RlJPTSB2aXJ0dWFsX2dlbl9lcnI7CitBTkFMWVpFIHZpcnR1YWxfZ2VuX2VycjsgIC0tIHNob3Vs ZCB3YXJuLCBub3QgZmFpbAorRFJPUCBUQUJMRSB2aXJ0dWFsX2dlbl9lcnI7CisKIC0tIFBlcm1p c3Npb24gdGVzdHMuIFVzZXJzIHNob3VsZCBub3QgYmUgYWJsZSB0byBzZWUgc3BlY2lmaWMgZGF0 YSB2YWx1ZXMgaW4KIC0tIHRoZSBleHRlbmRlZCBzdGF0aXN0aWNzLCBpZiB0aGV5IGxhY2sgcGVy bWlzc2lvbiB0byBzZWUgdGhvc2UgdmFsdWVzIGluCiAtLSB0aGUgdW5kZXJseWluZyB0YWJsZS4K QEAgLTE5MDgsMyArMTkxNSwxNiBAQCBTRUxFQ1QgcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSwgcmFu Z2VfZW1wdHlfZnJhYywgcmFuZ2VfYm91bmRzX2hpc3RvZ3JhbQogICAgRlJPTSBwZ19zdGF0c19l eHRfZXhwcnMKICAgIFdIRVJFIHN0YXRpc3RpY3NfbmFtZSA9ICdzdGF0c19leHRfcmFuZ2UnOwog RFJPUCBUQUJMRSBzdGF0c19leHRfdGJsX3JhbmdlOworCistLSBFeHByZXNzaW9uIHN0YXRpc3Rp Y3Mgd2l0aCBlcnJvcnMgKG5vdCBpbnZvbHZpbmcgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyku CistLSBFcnJvcnMgZHVyaW5nIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBzaG91bGQgcHJvZHVjZSBh IFdBUk5JTkcsIG5vdCBhIGZhaWx1cmUsCistLSBhbmQgbm9uLWVycm9yaW5nIHN0YXRpc3RpY3Mg b2JqZWN0cyBzaG91bGQgc3RpbGwgYmUgY29tcHV0ZWQuCitDUkVBVEUgVEFCTEUgZXhwcl9lcnIg KGEgaW50KTsKK0lOU0VSVCBJTlRPIGV4cHJfZXJyIFZBTFVFUyAoMSksICgyKSwgKDMpOworQ1JF QVRFIFNUQVRJU1RJQ1MgZXhwcl9lcnJfczEgT04gKChhLzApKSBGUk9NIGV4cHJfZXJyOworQ1JF QVRFIFNUQVRJU1RJQ1MgZXhwcl9lcnJfczIgT04gKGEvMCksKGErMSkgRlJPTSBleHByX2VycjsK K0NSRUFURSBTVEFUSVNUSUNTIGV4cHJfZXJyX3MzIE9OICgoYSsxKSkgRlJPTSBleHByX2VycjsK K0FOQUxZWkUgZXhwcl9lcnI7ICAtLSBzaG91bGQgd2Fybiwgbm90IGZhaWwKK1NFTEVDVCBzdGF0 aXN0aWNzX25hbWUgZnJvbSBwZ19zdGF0c19leHQgeAorICAgIFdIRVJFIHRhYmxlbmFtZSA9ICdl eHByX2VycicgT1JERVIgQlkgUk9XKHguKik7CitEUk9QIFRBQkxFIGV4cHJfZXJyOwotLSAKMi40 My4wCgo= --0000000000009b8f430650eda7c1--