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 1vzs0F-001Ogr-1k for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Mar 2026 07:59:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vzs0D-0025M1-2e for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Mar 2026 07:59:42 +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 1vzs0D-0025Lt-1T for pgsql-hackers@lists.postgresql.org; Tue, 10 Mar 2026 07:59:42 +0000 Received: from mail-yw1-x112b.google.com ([2607:f8b0:4864:20::112b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vzs0B-00000001w0B-186e for pgsql-hackers@lists.postgresql.org; Tue, 10 Mar 2026 07:59:41 +0000 Received: by mail-yw1-x112b.google.com with SMTP id 00721157ae682-798374d0f44so178523737b3.0 for ; Tue, 10 Mar 2026 00:59:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773129577; cv=none; d=google.com; s=arc-20240605; b=cfdFKXwL3TTrpW502NQxz+MIsQ/LloZ+b+N7nY3mZ2AKNMU+67qQ6V7ckBDv1h2/ZT fLKrCFmN6MFjrBE1bNDyqsVxhEKbxuQSupz0VRAmTRtQ0U+sQsVakbJd8IZ+fFPTEIHp cyL8UnmH2NXxRkze29bEUBNwqNHOUZeqNsGFFznTFzxkMg/oFUP2XvDaVDCh7Z84of+G GondssYIKyNZfCdUaM44e4kHJGdpXTXfE1MbsyTMvZodKmnUdGSRVjvMKz+IMQV7nPKz sJFNXTctjc/oDe43TKM9nuQ27zRXpq06Eum7J0mD1C1GSH+K+SkVYMuQInAyKFLkFDjt 5t0g== 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=Vn7i618MeM689aaOSvjTJ0vaT7+q0eM4feyWJieemcs=; fh=YhmxPC0NYagsxVMppzYMgO0XMWsRSWzMegLjmIklu8U=; b=TwagIvZZjDxBrB9ufIpMxr4QxqhmPJ7H8KYi6mc0cWBh0tO5uFydTtkWdFx98SlV+R IKBjtVda26Gr8qCleVRjkGCMOKtly/fK22L90hfABogS5EZiKvhUy+PyE56vgQQzzMrK nbSKkoBFNsxVEXjMU81+u/KSBMygpgj8H4kvNMd/LNI+ImT6lRHsAk0tcd7dwDw1xDTj kuf30cQ3PkirwwBrHDWYEB3v5SirtOqMPK7xW+PX4CxonDMzgeUDtPTSrkHTZYfl+6bh joiOYpkOBbo6YJ4ldE8d6HRyrJ79DQkkCvL2bvSsDZI0L/3aZS6gwLAdGUqagEvLsZjo Iwgw==; 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=1773129577; x=1773734377; 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=Vn7i618MeM689aaOSvjTJ0vaT7+q0eM4feyWJieemcs=; b=WLQHNMmClqhvJn2ZrO1d29Rot7Lqw5l9vqpPvUcFIa2SEmVJSC7W7SKI9sOByJ1v1r 1Idtgi71fvcBMNTXZ7BhqiDoFE5QncQEVyuZUXewsOH9xdz/HnZsGNMcmzPMVNAzuIRj v/2zYQfaE3I2HwAA8U4l6HbPP8FuNe5y256f1gDkyjPDpN01+Sp0znLGkVYrUDD9fJNK 6JxESCnh5z8p5wMrEluVaMa7r4Qht7saMVPeMEezjz6ZgCcXYvqL4TiBoyPfSVOsMWDC Sktg/Mk8ShnbyUiuKJgFwdz4stjOFYNmTi8sYpHXhTzqnXVMqzDm0AozjXcVJE4Qs13u VnIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773129577; x=1773734377; 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=Vn7i618MeM689aaOSvjTJ0vaT7+q0eM4feyWJieemcs=; b=heuUAgXtMHQBBKST0KlJZQYV4lshXHtuU2XOIEvLlKpa9zHQzFZjRhKLeBEKU8krpw 050w0AooEPEAXlcWtazXb8VM4FiSGhfUO+FmsSyqmbyelp5RubpbXngV4ODI6dv9kZJB JvRTP1swt1AXpyjm/iZcJGwyLLRxP1+W6V7Gjk2jAGSfCzBw26o3mMRKTMiGv4KEFs3c uEdqA5jpZfoomYp+KewCMBem4WrmEYMuHa4WRmOXGfBNe7eDb5HJtesifVE93GhaKVqo o2DYjCjPU9FL7NMX6XvOFlnl2IN4QgftycOKmBjE0QcvS/xyg9RPdKYDlAXy01YlT7GP 2A+A== X-Gm-Message-State: AOJu0Yw7uREXuevtnf88rMdlc6fDVBMT4799zbR8Crc5quq15wPMEZqH Mud/qLgP30t1pMBLybK57H63DHxNodCjNQbT3+nPlotQ4fAOwtIp0GVLhXjZgMBCNh7ZLifDNkI J/PoAaWsmxL0HKlTI+wp/FViRvrHrpAeecG8y X-Gm-Gg: ATEYQzyQ5gh6C7D2U7rm6dxSU150SNrLnYN3Vg0VYBnEDA3qpWiK5sp8ASNxa0zA7gp F2tJnhw9MnjaXEkl5JVmWmPdgRGAvOEVeXSi3l7UW8aXgpkuJ3PuGnvoYgESTuP8tnVwynZk0Bp TQUq/pZjl9OL9VuGbWgGRIODchYAr3Oy3a18uD3GmE6Yu7h1/xmGVTBXjfpPAk8p+wg06ydLjSJ wGsEv0vn3BoGcfVNEeYaqUDXA3JyrMym+x03iqTE4vx1HX7XXkUmJ0eMvtKngkR52wjBh0CEFdh iNXItXTVC+s6/SNcCCTcDNjTAK0mYcrxuMuNxkEom4jRclnRF00mdGFRDo2SFyQzlXMhqSzOIhU V/CPCIvHAtLUx7tFU8r/9dz8fjG8OfkQ46XIBq7XsD2dhuyCywuZMTMZrKA== X-Received: by 2002:a05:690e:15d1:b0:63f:96d7:a369 with SMTP id 956f58d0204a3-64d5a14b791mr1894464d50.28.1773129577161; Tue, 10 Mar 2026 00:59:37 -0700 (PDT) MIME-Version: 1.0 References: <204196.1769893114@sss.pgh.pa.us> In-Reply-To: From: Pavel Stehule Date: Tue, 10 Mar 2026 08:58:59 +0100 X-Gm-Features: AaiRm512thSlhH0GHCEoQS9Ewo2uLgN8dwHm-yFRhC7ERKYYOrZ0Fh_WQBK1FIU Message-ID: Subject: Re: slow SELECT expr INTO var in plpgsql To: Tom Lane Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000009725e2064ca6e66d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009725e2064ca6e66d Content-Type: multipart/alternative; boundary="0000000000009725e1064ca6e66b" --0000000000009725e1064ca6e66b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi ne 1. 2. 2026 v 6:09 odes=C3=ADlatel Pavel Stehule napsal: > > > so 31. 1. 2026 v 21:58 odes=C3=ADlatel Tom Lane napsa= l: > >> Pavel Stehule writes: >> > I remember the old discussion about this issue, and I thought that the >> > performance of SELECT INTO and assignment should be almost the same. I >> > repeated these tests on pg 9.4, 11 and master (asserts are disabled) >> with >> > interesting results >> >> > release, assign time, select into time >> > 9.4, 2900 ms, 20800 ms >> > 11, 2041 ms, 16243 ms >> > master, 534ms, 15438 ms >> >> Yeah, we've sweated a good deal about optimizing plpgsql assignment, >> but SELECT INTO is always done the hard way. >> >> I experimented a little bit with converting simple-expression >> SELECT INTO into an assignment, as attached. It does reclaim >> nearly all of the performance difference: for me, these two >> test cases now take about 276 vs 337 ms. However, I'm concerned >> about the side-effects of substituting this other code path; >> there's a lot of potential minor differences in behavior. >> Two that you can see in the regression test changes are: >> >> * SELECT INTO is tracked by pg_stat_statements, assignments aren't. >> >> * The context report for an error can be different, because >> _SPI_error_callback() doesn't get used. >> >> We could probably eliminate the context-report difference by setting >> up a custom error context callback in this new code path, but the >> difference in pg_stat_statements output would be hard to mask. >> There may be other discrepancies as well, such as variations in >> error message wording. >> >> Probably no one would notice such details if it had been like that >> all along, but would they complain about a change? I dunno. >> > > This patch looks well. I can confirm massive speedup. > > I don't remember any report related to change of implementation of assign > statement before, and I think it can be similar with this patch. > > In this specific case, I think so users suppose SELECT INTO is translated > to assignment by default. And there are a lot of documents on the net tha= t > describe the transformation of the assignment statement to SELECT - so I > think there is some grey zone where optimization can do some magic. More = - > the statistics for function execution can be covered by track_functions. > Do you plan to push this patch? Unfortunately there is not any discussion about side effects. I wrote a version with dedicated error context callback, so there will be differences only in pg_stat_statements. It is true, so this should be hard to mask. Maybe this difference can be just documented - like "`SELECT expr INTO variable` can be optimized and executed by a direct expression executor, and then this query will not be visible in pg_stat_statement." Regards Pavel > Regards > > Pavel > > > >> >> regards, tom lane >> >> --0000000000009725e1064ca6e66b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

ne 1. 2. 2026 v=C2=A06:09 ode= s=C3=ADlatel Pavel Stehule <p= avel.stehule@gmail.com> napsal:
<= br>

so 31. 1. 2026 v=C2=A021:58 odes=C3=ADlatel Tom Lane <tgl@sss.pgh.pa.us> napsal:
Pavel Stehule <= ;pavel.stehule= @gmail.com> writes:
> I remember the old discussion about this issue, and I thought that the=
> performance of SELECT INTO and assignment should be almost the same. I=
> repeated these tests on pg 9.4, 11 and master (asserts are disabled) w= ith
> interesting results

> release, assign time, select into time
> 9.4, 2900 ms, 20800 ms
> 11, 2041 ms, 16243 ms
> master, 534ms, 15438 ms

Yeah, we've sweated a good deal about optimizing plpgsql assignment, but SELECT INTO is always done the hard way.

I experimented a little bit with converting simple-expression
SELECT INTO into an assignment, as attached.=C2=A0 It does reclaim
nearly all of the performance difference: for me, these two
test cases now take about 276 vs 337 ms.=C2=A0 However, I'm concerned about the side-effects of substituting this other code path;
there's a lot of potential minor differences in behavior.
Two that you can see in the regression test changes are:

* SELECT INTO is tracked by pg_stat_statements, assignments aren't.

* The context report for an error can be different, because
_SPI_error_callback() doesn't get used.

We could probably eliminate the context-report difference by setting
up a custom error context callback in this new code path, but the
difference in pg_stat_statements output would be hard to mask.
There may be other discrepancies as well, such as variations in
error message wording.

Probably no one would notice such details if it had been like that
all along, but would they complain about a change?=C2=A0 I dunno.

This patch looks well. I can confirm massive spe= edup.=C2=A0

I don't remember any report relate= d to change of implementation of assign statement before, and I think it ca= n be similar with this patch.=C2=A0

In this specif= ic case, I think so users suppose SELECT INTO is translated to assignment= =C2=A0by default. And there are a lot of documents on the net that describe= the transformation of the assignment statement to SELECT - so I think ther= e is some grey zone where optimization can do some magic. More - the statis= tics for function execution can be covered=C2=A0by track_functions.

Do you plan to push this p= atch? Unfortunately there is not any discussion about side effects.

I wrote a version with dedicated error context callback, so th= ere will be differences only in pg_stat_statements. It is true, so this sho= uld be hard to mask. Maybe this difference can be just documented - like &q= uot;`SELECT expr INTO variable` can be optimized and executed by a direct e= xpression executor, and then this query will not be visible in pg_stat_stat= ement."

Regards

Pavel




Regards

Pavel

=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 regards, tom lane

--0000000000009725e1064ca6e66b-- --0000000000009725e2064ca6e66d Content-Type: text/x-patch; charset="US-ASCII"; name="0001-optimize-select-into-v2.patch" Content-Disposition: attachment; filename="0001-optimize-select-into-v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmkbjl1a0 RnJvbSBiZjU4NzRiOWM5YmYyNzM5MzVkYmM2MTYwNGM2NzY3NTcyZDBlOGIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAib2tib2JAZ2l0aHViLmNvbSIgPHBhdmVsLnN0ZWh1bGVAZ21h aWwuY29tPgpEYXRlOiBUdWUsIDEwIE1hciAyMDI2IDA4OjM3OjM4ICswMTAwClN1YmplY3Q6IFtQ QVRDSF0gb3B0aW16ZSBzZWxlY3QgaW50bwoKLS0tCiAuLi4vZXhwZWN0ZWQvbGV2ZWxfdHJhY2tp bmcub3V0ICAgICAgICAgICAgICAgfCAgOCArLS0KIC4uLi9wZ19zdGF0X3N0YXRlbWVudHMvZXhw ZWN0ZWQvcGxhbmNhY2hlLm91dCB8ICA2ICstCiBzcmMvcGwvcGxwZ3NxbC9zcmMvZXhwZWN0ZWQv cGxwZ3NxbF9jYWNoZS5vdXQgfCAgMyArLQogc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYyAg ICAgICAgICAgICAgICAgIHwgNjYgKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2Vk LCA3MiBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC9sZXZlbF90cmFja2luZy5vdXQgYi9jb250cmli L3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC9sZXZlbF90cmFja2luZy5vdXQKaW5kZXggYTE1 ZDg5N2U1OWIuLjgzMmQ2NWU5N2NhIDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVt ZW50cy9leHBlY3RlZC9sZXZlbF90cmFja2luZy5vdXQKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvZXhwZWN0ZWQvbGV2ZWxfdHJhY2tpbmcub3V0CkBAIC0xNTAwLDEyICsxNTAwLDEx IEBAIFNFTEVDVCBQTFVTX09ORSgxKTsKIFNFTEVDVCBjYWxscywgcm93cywgcXVlcnkgRlJPTSBw Z19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7CiAgY2FsbHMgfCBy b3dzIHwgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAg CiAtLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0gICAgIDIgfCAgICAyIHwgU0VMRUNUIChpICsgJDIgKyAkMyk6OklOVEVH RVIKICAgICAgMiB8ICAgIDIgfCBTRUxFQ1QgKGkgKyAkMik6OklOVEVHRVIgTElNSVQgJDMKICAg ICAgMiB8ICAgIDIgfCBTRUxFQ1QgUExVU19PTkUoJDEpCiAgICAgIDIgfCAgICAyIHwgU0VMRUNU IFBMVVNfVFdPKCQxKQogICAgICAxIHwgICAgMSB8IFNFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNf cmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0Ci0oNSByb3dzKQorKDQgcm93cykKIAogLS0gaW1tdXRh YmxlIFNRTCBmdW5jdGlvbiAtLS0gY2FuIGJlIGV4ZWN1dGVkIGF0IHBsYW4gdGltZQogQ1JFQVRF IEZVTkNUSU9OIFBMVVNfVEhSRUUoaSBJTlRFR0VSKSBSRVRVUk5TIElOVEVHRVIgQVMKQEAgLTE1 MjUsMTUgKzE1MjQsMTQgQEAgU0VMRUNUIFBMVVNfVEhSRUUoMTApOwogU0VMRUNUIHRvcGxldmVs LCBjYWxscywgcm93cywgcXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVl cnkgQ09MTEFURSAiQyI7CiAgdG9wbGV2ZWwgfCBjYWxscyB8IHJvd3MgfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSBmICAgICAgICB8ICAgICAyIHwgICAgMiB8IFNFTEVDVCAoaSArICQyICsgJDMpOjpJTlRFR0VS CiAgZiAgICAgICAgfCAgICAgMiB8ICAgIDIgfCBTRUxFQ1QgKGkgKyAkMik6OklOVEVHRVIgTElN SVQgJDMKICB0ICAgICAgICB8ICAgICAyIHwgICAgMiB8IFNFTEVDVCBQTFVTX09ORSgkMSkKICB0 ICAgICAgICB8ICAgICAyIHwgICAgMiB8IFNFTEVDVCBQTFVTX1RIUkVFKCQxKQogIHQgICAgICAg IHwgICAgIDIgfCAgICAyIHwgU0VMRUNUIFBMVVNfVFdPKCQxKQotIHQgICAgICAgIHwgICAgIDEg fCAgICA1IHwgU0VMRUNUIGNhbGxzLCByb3dzLCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50 cyBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIgorIHQgICAgICAgIHwgICAgIDEgfCAgICA0IHwg U0VMRUNUIGNhbGxzLCByb3dzLCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBPUkRFUiBC WSBxdWVyeSBDT0xMQVRFICJDIgogIGYgICAgICAgIHwgICAgIDIgfCAgICAyIHwgU0VMRUNUIGkg KyAkMiBMSU1JVCAkMwogIHQgICAgICAgIHwgICAgIDEgfCAgICAxIHwgU0VMRUNUIHBnX3N0YXRf c3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQKLSg4IHJvd3MpCisoNyByb3dzKQog CiBTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKICB0 IApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGxhbmNh Y2hlLm91dCBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVjdGVkL3BsYW5jYWNoZS5v dXQKaW5kZXggZTE1MmRlOWY1NTEuLjMyYmY5MTNiMjg2IDEwMDY0NAotLS0gYS9jb250cmliL3Bn X3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC9wbGFuY2FjaGUub3V0CisrKyBiL2NvbnRyaWIvcGdf c3RhdF9zdGF0ZW1lbnRzL2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQKQEAgLTE1OSwxMSArMTU5LDEw IEBAIFNFTEVDVCBjYWxscywgZ2VuZXJpY19wbGFuX2NhbGxzLCBjdXN0b21fcGxhbl9jYWxscywg dG9wbGV2ZWwsIHF1ZXJ5IEZST00gcGdfc3RhCiAgY2FsbHMgfCBnZW5lcmljX3BsYW5fY2FsbHMg fCBjdXN0b21fcGxhbl9jYWxscyB8IHRvcGxldmVsIHwgICAgICAgICAgICAgICAgICAgICAgIHF1 ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIDIgfCAgICAgICAgICAgICAgICAgIDAg fCAgICAgICAgICAgICAgICAgMCB8IHQgICAgICAgIHwgQ0FMTCBzZWxlY3Rfb25lX3Byb2MoJDEp Ci0gICAgIDQgfCAgICAgICAgICAgICAgICAgIDIgfCAgICAgICAgICAgICAgICAgMiB8IGYgICAg ICAgIHwgU0VMRUNUICQxCiAgICAgIDEgfCAgICAgICAgICAgICAgICAgIDAgfCAgICAgICAgICAg ICAgICAgMCB8IHQgICAgICAgIHwgU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElT IE5PVCBOVUxMIEFTIHQKICAgICAgMiB8ICAgICAgICAgICAgICAgICAgMCB8ICAgICAgICAgICAg ICAgICAwIHwgdCAgICAgICAgfCBTRUxFQ1Qgc2VsZWN0X29uZV9mdW5jKCQxKQogICAgICAyIHwg ICAgICAgICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgIDAgfCB0ICAgICAgICB8IFNFVCBw bGFuX2NhY2hlX21vZGUgVE8gJDEKLSg1IHJvd3MpCisoNCByb3dzKQogCiAtLQogLS0gRVhQTEFJ TiBbQU5BTFlaRV0gRVhFQ1VURSArIGZ1bmN0aW9ucy9wcm9jZWR1cmVzCkBAIC0yMTEsMTAgKzIx MCw5IEBAIFNFTEVDVCBjYWxscywgZ2VuZXJpY19wbGFuX2NhbGxzLCBjdXN0b21fcGxhbl9jYWxs cywgdG9wbGV2ZWwsIHF1ZXJ5IEZST00gcGdfc3RhCiAgICAgIDIgfCAgICAgICAgICAgICAgICAg IDAgfCAgICAgICAgICAgICAgICAgMCB8IHQgICAgICAgIHwgRVhQTEFJTiAoQU5BTFlaRSwgQ09T VFMgT0ZGLCBTVU1NQVJZIE9GRiwgVElNSU5HIE9GRiwgQlVGRkVSUyBPRkYpIFNFTEVDVCBzZWxl Y3Rfb25lX2Z1bmMoJDEpCiAgICAgIDQgfCAgICAgICAgICAgICAgICAgIDAgfCAgICAgICAgICAg ICAgICAgMCB8IGYgICAgICAgIHwgRVhQTEFJTiAoQU5BTFlaRSwgQ09TVFMgT0ZGLCBTVU1NQVJZ IE9GRiwgVElNSU5HIE9GRiwgQlVGRkVSUyBPRkYpIFNFTEVDVCBzZWxlY3Rfb25lX2Z1bmMoJDEp OwogICAgICAyIHwgICAgICAgICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgIDAgfCB0ICAg ICAgICB8IEVYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIHNlbGVjdF9vbmVfZnVuYygkMSkKLSAg ICAgNCB8ICAgICAgICAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgICAyIHwgZiAgICAgICAg fCBTRUxFQ1QgJDEKICAgICAgMSB8ICAgICAgICAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAg ICAwIHwgdCAgICAgICAgfCBTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9U IE5VTEwgQVMgdAogICAgICAyIHwgICAgICAgICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAg IDAgfCB0ICAgICAgICB8IFNFVCBwbGFuX2NhY2hlX21vZGUgVE8gJDEKLSg3IHJvd3MpCisoNiBy b3dzKQogCiBSRVNFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2s7CiAtLQpkaWZmIC0tZ2l0IGEv c3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfY2FjaGUub3V0IGIvc3JjL3BsL3Bs cGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfY2FjaGUub3V0CmluZGV4IDlkZjE4OGNlNTZiLi42 MDFlMWZmM2JjMSAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdz cWxfY2FjaGUub3V0CisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX2Nh Y2hlLm91dApAQCAtNTUsOCArNTUsNyBAQCBzZWxlY3Qgc2hvd19yZXN1bHRfdHlwZSgnc2VsZWN0 IDEgYXMgYScpOwogLS0gKGJ1dCBpZiBkZWJ1Z19kaXNjYXJkX2NhY2hlcyBpcyBvbiwgaXQgd2ls bCBzdWNjZWVkKQogc2VsZWN0IHNob3dfcmVzdWx0X3R5cGUoJ3NlbGVjdCAyLjAgYXMgYScpOwog RVJST1I6ICB0eXBlIG9mIHBhcmFtZXRlciA1IChudW1lcmljKSBkb2VzIG5vdCBtYXRjaCB0aGF0 IHdoZW4gcHJlcGFyaW5nIHRoZSBwbGFuIChpbnRlZ2VyKQotQ09OVEVYVDogIFNRTCBzdGF0ZW1l bnQgInNlbGVjdCBwZ190eXBlb2Yoci5hKSIKLVBML3BnU1FMIGZ1bmN0aW9uIHNob3dfcmVzdWx0 X3R5cGUodGV4dCkgbGluZSA3IGF0IFNRTCBzdGF0ZW1lbnQKK0NPTlRFWFQ6ICBQTC9wZ1NRTCBm dW5jdGlvbiBzaG93X3Jlc3VsdF90eXBlKHRleHQpIGxpbmUgNyBhdCBTUUwgc3RhdGVtZW50CiAt LSBidXQgaXQncyBPSyBpZiB3ZSBmb3JjZSBwbGFuIHJlYnVpbGRpbmcKIGRpc2NhcmQgcGxhbnM7 CiBzZWxlY3Qgc2hvd19yZXN1bHRfdHlwZSgnc2VsZWN0IDIuMCBhcyBhJyk7CmRpZmYgLS1naXQg YS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4 ZWMuYwppbmRleCA4NDU1MmUzMmM4Ny4uYjE0ZGJjNzcxNDcgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9w bHBnc3FsL3NyYy9wbF9leGVjLmMKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYwpA QCAtMTMwMSw2ICsxMzAxLDE5IEBAIHBscGdzcWxfZXhlY19lcnJvcl9jYWxsYmFjayh2b2lkICph cmcpCiAJCQkJICAgZXN0YXRlLT5mdW5jLT5mbl9zaWduYXR1cmUpOwogfQogCisvKgorICogVGhp cyBlcnJvciBjYWxsYmFjayBpcyB1c2VkIHdoZW4gY2FzZSBTRUxFQ1QgZXhwciBJTlRPIHZhcgor ICovCitzdGF0aWMgdm9pZAorcGxwZ3NxbF9leGVjc3FsX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFy ZykKK3sKKwlQTHBnU1FMX2V4cHIgKmV4cHIgPSAoUExwZ1NRTF9leHByICopIGFyZzsKKworCUFz c2VydChleHByKTsKKworCWVycmNvbnRleHQoIlNRTCBzdGF0ZW1lbnQgXCIlc1wiIiwgZXhwci0+ cXVlcnkpOworfQorCiAKIC8qIC0tLS0tLS0tLS0KICAqIFN1cHBvcnQgZnVuY3Rpb24gZm9yIGlu aXRpYWxpemluZyBsb2NhbCBleGVjdXRpb24gdmFyaWFibGVzCkBAIC00MjUzLDYgKzQyNjYsNTkg QEAgZXhlY19zdG10X2V4ZWNzcWwoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAkJc3RtdC0+ bW9kX3N0bXRfc2V0ID0gdHJ1ZTsKIAl9CiAKKwkvKgorCSAqIFNvbWUgdXNlcnMgd3JpdGUgIlNF TEVDVCBleHByIElOVE8gdmFyIiBpbnN0ZWFkIG9mICJ2YXIgOj0gZXhwciIuICBJZgorCSAqIHRo ZSBleHByZXNzaW9uIGlzIHNpbXBsZSBhbmQgdGhlIElOVE8gdGFyZ2V0IGlzIGEgc2luZ2xlIHZh cmlhYmxlLCB3ZQorCSAqIGNhbiBieXBhc3MgU1BJIGFuZCBjYWxsIEV4ZWNFdmFsRXhwcigpIGRp cmVjdGx5LiAgKGV4ZWNfYXNzaWduX2V4cHIKKwkgKiB3b3VsZCBhY3R1YWxseSB3b3JrIGZvciBu b24tc2ltcGxlIGV4cHJlc3Npb25zIHRvbywgYnV0IHN1Y2ggYW4KKwkgKiBleHByZXNzaW9uIG1p Z2h0IHJldHVybiBtb3JlIG9yIGxlc3MgdGhhbiBvbmUgcm93LCBjb21wbGljYXRpbmcgbWF0dGVy cworCSAqIGdyZWF0bHkuICBUaGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIHdpbiBpcyBzbWFsbCBp ZiBpdCdzIG5vbi1zaW1wbGUsCisJICogYW5kIGFueSBlcnJvcnMgd2UgbWlnaHQgaXNzdWUgd291 bGQgbGlrZWx5IGxvb2sgZGlmZmVyZW50LCBzbyBhdm9pZAorCSAqIHVzaW5nIHRoaXMgY29kZSBw YXRoIGZvciBub24tc2ltcGxlIGNhc2VzLikKKwkgKi8KKwlpZiAoZXhwci0+ZXhwcl9zaW1wbGVf ZXhwciAmJiBzdG10LT5pbnRvKQorCXsKKwkJUExwZ1NRTF9kYXR1bSAqdGFyZ2V0ID0gZXN0YXRl LT5kYXR1bXNbc3RtdC0+dGFyZ2V0LT5kbm9dOworCisJCWlmICh0YXJnZXQtPmR0eXBlID09IFBM UEdTUUxfRFRZUEVfUk9XKQorCQl7CisJCQlQTHBnU1FMX3JvdyAqcm93ID0gKFBMcGdTUUxfcm93 ICopIHRhcmdldDsKKworCQkJaWYgKHJvdy0+bmZpZWxkcyA9PSAxKQorCQkJeworCQkJCUVycm9y Q29udGV4dENhbGxiYWNrIHBsZXJyY29udGV4dDsKKworCQkJCS8qCisJCQkJICogU2V0dXAgZXJy b3IgdHJhY2ViYWNrIHN1cHBvcnQgZm9yIHJlcG9ydGluZyBTUUwgc3RhdGVtZW50CisJCQkJICog aW4gY29udGV4dC4KKwkJCQkgKi8KKwkJCQlwbGVycmNvbnRleHQuY2FsbGJhY2sgPSBwbHBnc3Fs X2V4ZWNzcWxfZXJyb3JfY2FsbGJhY2s7CisJCQkJcGxlcnJjb250ZXh0LmFyZyA9IGV4cHI7CisJ CQkJcGxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJCQllcnJv cl9jb250ZXh0X3N0YWNrID0gJnBsZXJyY29udGV4dDsKKworCQkJCS8qIEV2YWx1YXRlIHRoZSBl eHByZXNzaW9uIGFuZCBhc3NpZ24gdG8gdGhlIElOVE8gdGFyZ2V0ICovCisJCQkJZXhlY19hc3Np Z25fZXhwcihlc3RhdGUsIGVzdGF0ZS0+ZGF0dW1zW3Jvdy0+dmFybm9zWzBdXSwKKwkJCQkJCQkJ IGV4cHIpOworCisJCQkJLyoKKwkJCQkgKiBXZSBtdXN0IGR1cGxpY2F0ZSB0aGUgb3RoZXIgZWZm ZWN0cyBvZiB0aGUgY29kZSBiZWxvdywgYXMKKwkJCQkgKiB3ZWxsLiAgV2Uga25vdyB0aGF0IGV4 YWN0bHkgb25lIHJvdyB3YXMgcmV0dXJuZWQsIHNvIGl0CisJCQkJICogZG9lc24ndCBtYXR0ZXIg d2hldGhlciB0aGUgSU5UTyB3YXMgU1RSSUNUIG9yIG5vdC4KKwkJCQkgKi8KKwkJCQlleGVjX3Nl dF9mb3VuZChlc3RhdGUsIHRydWUpOworCQkJCWVzdGF0ZS0+ZXZhbF9wcm9jZXNzZWQgPSAxOwor CisJCQkJLyoKKwkJCQkgKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sKKwkJCQkgKi8KKwkJ CQllcnJvcl9jb250ZXh0X3N0YWNrID0gcGxlcnJjb250ZXh0LnByZXZpb3VzOworCisJCQkJcmV0 dXJuIFBMUEdTUUxfUkNfT0s7CisJCQl9CisJCX0KKwl9CisKIAkvKgogCSAqIFNldCB1cCBQYXJh bUxpc3RJbmZvIHRvIHBhc3MgdG8gZXhlY3V0b3IKIAkgKi8KLS0gCjIuNTMuMAoK --0000000000009725e2064ca6e66d--