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 1wYXsy-000KD1-2G for pgsql-hackers@arkaria.postgresql.org; Sat, 13 Jun 2026 23:35:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wYXsx-004i8B-19 for pgsql-hackers@arkaria.postgresql.org; Sat, 13 Jun 2026 23:35:31 +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 1wYXsw-004i83-36 for pgsql-hackers@lists.postgresql.org; Sat, 13 Jun 2026 23:35:31 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wYXsu-00000000FW0-2EIq for pgsql-hackers@postgresql.org; Sat, 13 Jun 2026 23:35:30 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-490a76757e5so15146895e9.2 for ; Sat, 13 Jun 2026 16:35:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781393722; x=1781998522; darn=postgresql.org; h=mime-version:subject:references:in-reply-to:message-id:cc:to:from :date:from:to:cc:subject:date:message-id:reply-to; bh=SLqzadBkfpd5OS5dJqgNqvy9QeZkI7HPhN/FlG0jnCo=; b=J/oAO9WYsryjllf6ew1Fye9cKNQf5CxKsplrJjZGFsUQItM07ABl3VjSYFPjpJccmV G0Tl4pmGaoKaGiAZLfQ+5B5rEvR3Y9E8497okaeTSIBUQH9lKraBl3YPfNVmEhnfGlC9 iFQ38u/Tc9RyQ0KgYuNVZ4nO2mR1lmilGm4QFObr/hkK43Ox8j4eiwbHsgsPN0erV70Y +/V6YLl1k0cAisZX6WIfPaCjCEy92p93bGzwdWPFD3CR2WKJfXovkEi9UpFiP8WFUBl1 yeVoF4bQYWknQ5FWezfouMde9orLgniyjmnvgxAEMqHcs6nFvZsOi6+7O+Gco91hZoPV 9Knw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781393722; x=1781998522; h=mime-version:subject:references:in-reply-to:message-id:cc:to:from :date:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=SLqzadBkfpd5OS5dJqgNqvy9QeZkI7HPhN/FlG0jnCo=; b=FNYRv9kX97tFbtrrgUS1tkUJLmCRL6LIrQYwbCqfCwz8v0+s+kdOLLUyU+UV28g2uA qDNV8Rg3bduD4jggzqr91b6AC7+EaT4lzJkvf0SeSn/UWBrPCmVp996x5Upj5glOSlBS G1vE59SkOpa56MvsuQCQW0n/JMrSltgAL0H2ddRttCWL9n2twLRAPHrbzIO/GHMKaWAE HbdCczuy9lgve+La8WwaDhHMxE7LwQdfYs04EwyEr0T4bWBTwIbUujY3Aca8QPq3qh12 D6idYxdheDT2QQ+RBlkx/nXehd1qPzmvfChVdKAd2P4/hj3b6yitxtifRSFmIYKWeFXH 0xYQ== X-Gm-Message-State: AOJu0YzR0BINM9C1RNrOZeTVG8ZdJjCrLP4eVcYx1KBeFV79vrGW6Qn+ xSVyUO9aNUDWy2gy9W4oVzADI7OzuiVJrHlLRYhN7rrz3YEI42rYq68K X-Gm-Gg: Acq92OEXedsY2h2YOj1azRHDZzhLS/N9Fz/aB9xejyIS9J/mGPfDLo8pHmK+OdIOcsa 4GcY8lXR2Y49whuTajg3Fs0JQBtY+0sJTkOJDC2+64FXOf1cIWfXzIu26wPH3S1di9inyjH/CO+ DAaavxYWRV1YemzBVK0vOEApukZZpaw/nWCbS5X/+lR04JZC7Wz/kSf/gxyTcLxqsvBBbwZjmHv pKDClVQ2+2ugBfpcsb4vRoFaa60WtYC+9pBp3H8L3nwSwo8sztGYKG7L+dmlixxpVTaWIjkQvxG 3JgTa6lQLPFvPTluY+lzwQFsqgigtyOIDVf5iUw+9E5sGC/Z5ch1xiT4/Kru7+BgqxYJkdOB0xN UKbG1Zh6G71UCPjTWDSmekhgp+LCI/VfvRKkJsSWENTiBFrrUN2vdbEtfSCHV0RYCZkpiuRroYl Gi/ib0epgRxvN2fe2uUBNClR62WqzvdX+sMJFFr+KEs6CB88K+8g== X-Received: by 2002:a05:600c:c0c3:10b0:490:b724:dbd6 with SMTP id 5b1f17b1804b1-4922005087emr44936245e9.6.1781393722050; Sat, 13 Jun 2026 16:35:22 -0700 (PDT) Received: from [192.168.1.207] ([109.227.133.120]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4922037055csm115536975e9.13.2026.06.13.16.35.20 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 13 Jun 2026 16:35:21 -0700 (PDT) Date: Sun, 14 Jun 2026 01:35:14 +0200 From: Alexander Nestorov To: Andrey Borodin Cc: pgsql-hackers mailing list Message-ID: <80ef3b41-1a71-47a4-a320-29e118d7092c@Spark> In-Reply-To: <18e88767-6c31-402a-887e-37c38b366a6a@Spark> References: <36b4f67d-5975-452c-a6b8-b6407f0924ee@Spark> <4B4B0998-7B43-4893-9603-0AF212036690@yandex-team.ru> <18e88767-6c31-402a-887e-37c38b366a6a@Spark> Subject: Re: [PATCH] btree_gist: add cross-type integer operator support for GiST X-Readdle-Message-ID: 80ef3b41-1a71-47a4-a320-29e118d7092c@Spark MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="6a2de937_431bd7b7_2e1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --6a2de937_431bd7b7_2e1 Content-Type: multipart/alternative; boundary="6a2de937_519b500d_2e1" --6a2de937_519b500d_2e1 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hello Andrey=21 =46ollowing up with the things I owed you: the benchmarks, the consistenc= y check and adding a note for the 2=5E53 case. I added a fast path. Each integer opclass's consistent() / distance() now= detects the =22same type=22 case and calls the original gbt=5Fnum=5Fconsi= stent() / gbt=5Fnum=5Fdistance() directly. To confirm there's no regression I ran a microbenchmark on an -O2 build, = no asserts, single client, over a 500k row int4 GiST index, with the followi= ng options: -c enable=5Fseqscan=3Doff =5C -c enable=5Fbitmapscan=3Doff =5C -c enable=5Fsort=3Doff =5C -c max=5Fparallel=5Fworkers=5Fper=5Fgather=3D0 This is the base for the bench: CREATE EXTENSION I=46 NOT EXISTS btree=5Fgist; DROP TABLE I=46 EXISTS benchg; CREATE TABLE benchg (a int4); INSERT INTO benchg SELECT g =46ROM generate=5Fseries(0, 499999) g; CREATE INDEX benchg=5Fidx ON benchg USING gist (a); VACUUM (ANALYZE, =46REEZE) benchg; And the two workloads: consistent(), full-range index-only count(*): SELECT count(*) =46ROM benchg WHERE a >=3D 0 AND a <=3D 499999; distance(), full KNN ordering (ORDER BY a<->k over all rows): SELECT count(*) =46ROM (SELECT a =46ROM benchg ORDER BY a <-> 250000 LIMI= T 1000000) q; The numbers in ms (12 repetitions, 15s each) before (3e3d7875e95621b02311ea3443e5139e3bce944a) and after my patch: =C2=A0=C2=A0before=C2=A0 =C2=A0consistent=C2=A0 =C2=A0min/med/mean =3D 51= .754 52.718 54.137 ms =C2=A0=C2=A0after=C2=A0=C2=A0 =C2=A0consistent=C2=A0 =C2=A0min/med/mean =3D= 52.042 52.480 52.572 ms =C2=A0=C2=A0-------------------------------------------------------------= ----------- =C2=A0=C2=A0before=C2=A0 =C2=A0distance=C2=A0 =C2=A0 =C2=A0min/med/mean =3D= 76.863 77.177 77.395 ms =C2=A0=C2=A0after=C2=A0=C2=A0 =C2=A0distance=C2=A0 =C2=A0 =C2=A0min/med/m= ean =3D 77.357 77.803 77.980 ms All numbers seem to be within measurement noise, except the consistent-be= fore, which is probably inflated by one slow rep. Regarding the other point, I explored the regression suite path I mention= ed. The consistent() / distance() functions dispatch cross-type queries throu= gh a single static table of supported subtype OIDs (gbt=5Fint=5Fcrosstype=5Fta= ble in btree=5Futils=5Fnum.c). I expose that exact table to SQL, in gbt=5Fint=5F= crosstype=5Fsubtypes(), so there is no hand-maintained second copy of the list. The int=5Fcrosstype.sql regression test then builds the set of cross-type= (lefttype, righttype, strategy) entries that should exist in pg=5Famop fr= om that function, and EXCEPTs it against the cross-type rows actually present in gist=5Fint=7B2,4,8=7D=5Fops: =C2=A0=C2=A0- a pg=5Famop row whose subtype the C dispatch does not handl= e shows up as =C2=A0=C2=A0 =C2=A0=22unexpected in pg=5Famop=22, and =C2=A0=C2=A0- a dispatch entry without the matching pg=5Famop rows shows = up as =C2=A0=C2=A0 =C2=A0=22missing from pg=5Famop=22. Either kind of drift produces a diff under =60make check=60. So adding an= ALTER OPERATOR =46AMILY entry without a matching dispatch entry (or vice versa)= fails the suite (as I mentioned in my previous email, I'm not aware of a way to= do this with amvalidate() without patching core). I'm attaching the new set of patches (this time I include the tests). Best regards=21 --6a2de937_519b500d_2e1 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline
Hello Andrey=21

=46ollowing up with the things I owed you: the benchmarks, the consistenc= y check
and adding a note for the 2=5E53 case.

I added a fast path. Each integer opclass's consistent() / distance() now=
detects the =22same type=22 case and calls the original gbt=5Fnum=5Fconsi= stent() /
gbt=5Fnum=5Fdistance() directly.

To confirm there's no regression I ran a microbenchmark on an -O2 build, = no
asserts, single client, over a 500k row int4 GiST index, with the followi= ng
options:

-c enable=5Fseqscan=3Doff =5C
-c enable=5Fbitmapscan=3Doff =5C
-c enable=5Fsort=3Doff =5C
-c max=5Fparallel=5Fworkers=5Fper=5Fgather=3D0

This is the base for the bench:

CREATE EXTENSION I=46 NOT EXISTS btree=5Fgist;
DROP TABLE I=46 EXISTS benchg;
CREATE TABLE benchg (a int4);
INSERT INTO benchg SELECT g =46ROM generate=5Fseries(0, 499999) g;
CREATE INDEX benchg=5Fidx ON benchg USING gist (a);
VACUUM (ANALYZE, =46REEZE) benchg;

And the two workloads:

consistent(), full-range index-only count(*):
SELECT count(*) =46ROM benchg WHERE a >=3D 0 AND a <=3D 499999;

distance(), full KNN ordering (ORDER BY a<->k over all rows):
= SELECT count(*) =46ROM (SELECT a =46ROM benchg ORDER BY a <-> 25000= 0 LIMIT 1000000) q;

The numbers in ms (12 repetitions, 15s each) before
(3e3d7875e95621b02311ea3443e5139e3bce944a) and after my patch:

&=23160;&=23160;before&=23160; &=23160;consistent&=23160; &=23160;min/med= /mean =3D 51.754 52.718 54.137 ms
&=23160;&=23160;after&=23160;&=23160; &=23160;consistent&=23160; &=23160;= min/med/mean =3D 52.042 52.480 52.572 ms
&=23160;&=23160;---------------------------------------------------------= ---------------
&=23160;&=23160;before&=23160; &=23160;distance&=23160; &=23160; &=23160;= min/med/mean =3D 76.863 77.177 77.395 ms
&=23160;&=23160;after&=23160;&=23160; &=23160;distance&=23160; &=23160; &= =23160;min/med/mean =3D 77.357 77.803 77.980 ms

All numbers seem to be within measurement noise, except the consistent-be= fore,
which is probably inflated by one slow rep.

Regarding the other point, I explored the regression suite path I mention= ed.

The consistent() / distance() functions dispatch cross-type queries throu= gh a
single static table of supported subtype OIDs (gbt=5Fint=5Fcrosstype=5Fta= ble in
btree=5Futils=5Fnum.c). I expose that exact table to SQL, in gbt=5Fint=5F= crosstype=5Fsubtypes(),
so there is no hand-maintained second copy of the list.

The int=5Fcrosstype.sql regression test then builds the set of cross-type=
(lefttype, righttype, strategy) entries that should exist in pg=5Famop fr= om that
function, and EXCEPTs it against the cross-type rows actually present in<= br /> gist=5Fint=7B2,4,8=7D=5Fops:

&=23160;&=23160;- a pg=5Famop row whose subtype the C dispatch does not h= andle shows up as
&=23160;&=23160; &=23160;=22unexpected in pg=5Famop=22, and
&=23160;&=23160;- a dispatch entry without the matching pg=5Famop rows sh= ows up as
&=23160;&=23160; &=23160;=22missing from pg=5Famop=22.

Either kind of drift produces a diff under =60make check=60. So adding an= ALTER
OPERATOR =46AMILY entry without a matching dispatch entry (or vice versa)= fails
the suite (as I mentioned in my previous email, I'm not aware of a way to= do
this with amvalidate() without patching core).

I'm attaching the new set of patches (this time I include the tests).

Best regards=21
--6a2de937_519b500d_2e1-- --6a2de937_431bd7b7_2e1 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Implement-cross-type-operators-for-GiST-indexes.patch" RnJvbSAzNjNiOWMyMjg3NGNkYmI2Y2Y3ODA4OTljNzg0YzgxM2JiMTBmOTRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgTmVzdG9yb3YgPGFsZXhhbmRlcm5zdEBnbWFp bC5jb20+CkRhdGU6IFRodSwgNCBKdW4gMjAyNiAwMDowNjo1NCArMDIwMApTdWJqZWN0OiBbUEFU Q0hdIEltcGxlbWVudCBjcm9zcy10eXBlIG9wZXJhdG9ycyBmb3IgR2lTVCBpbmRleGVzCgotLS0K IGNvbnRyaWIvYnRyZWVfZ2lzdC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBj b250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC0tMS45LS0xLjEwLnNxbCB8IDE0MyArKysrKysr KysrKysrKysrKwogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QuY29udHJvbCAgICAgICAg fCAgIDIgKy0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9pbnQyLmMgICAgICAgICAgICAgIHwg IDcwICsrKysrKy0tCiBjb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50NC5jICAgICAgICAgICAg ICB8ICA3MCArKysrKystLQogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2ludDguYyAgICAgICAg ICAgICAgfCAgNzAgKysrKysrLS0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV91dGlsc19udW0u YyAgICAgICAgIHwgMTYwICsrKysrKysrKysrKysrKysrKysKIGNvbnRyaWIvYnRyZWVfZ2lzdC9i dHJlZV91dGlsc19udW0uaCAgICAgICAgIHwgIDE2ICsrCiBjb250cmliL2J0cmVlX2dpc3QvbWVz b24uYnVpbGQgICAgICAgICAgICAgICB8ICAgMiArCiA5IGZpbGVzIGNoYW5nZWQsIDUwMSBpbnNl cnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2J0 cmVlX2dpc3QvYnRyZWVfZ2lzdC0tMS45LS0xLjEwLnNxbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIv YnRyZWVfZ2lzdC9NYWtlZmlsZSBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9NYWtlZmlsZQppbmRleCBm YmJiY2E5NTU5OC4uMWQwNjY4ZDk3YWIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9N YWtlZmlsZQorKysgYi9jb250cmliL2J0cmVlX2dpc3QvTWFrZWZpbGUKQEAgLTMyLDE5ICszMiwx OSBAQCBPQkpTID0gIFwKIEVYVEVOU0lPTiA9IGJ0cmVlX2dpc3QKIERBVEEgPSBidHJlZV9naXN0 LS0xLjAtLTEuMS5zcWwgXAogICAgICAgIGJ0cmVlX2dpc3QtLTEuMS0tMS4yLnNxbCBidHJlZV9n aXN0LS0xLjItLTEuMy5zcWwgXAogICAgICAgIGJ0cmVlX2dpc3QtLTEuMy0tMS40LnNxbCBidHJl ZV9naXN0LS0xLjQtLTEuNS5zcWwgXAogICAgICAgIGJ0cmVlX2dpc3QtLTEuNS0tMS42LnNxbCBi dHJlZV9naXN0LS0xLjYtLTEuNy5zcWwgXAogICAgICAgIGJ0cmVlX2dpc3QtLTEuNy0tMS44LnNx bCBidHJlZV9naXN0LS0xLjgtLTEuOS5zcWwgXAotICAgICAgIGJ0cmVlX2dpc3QtLTEuOS5zcWwK KyAgICAgICBidHJlZV9naXN0LS0xLjkuc3FsIGJ0cmVlX2dpc3QtLTEuOS0tMS4xMC5zcWwKIFBH RklMRURFU0MgPSAiYnRyZWVfZ2lzdCAtIEItdHJlZSBlcXVpdmFsZW50IEdpU1Qgb3BlcmF0b3Ig Y2xhc3NlcyIKIAogUkVHUkVTUyA9IGluaXQgaW50MiBpbnQ0IGludDggZmxvYXQ0IGZsb2F0OCBj YXNoIG9pZCB0aW1lc3RhbXAgdGltZXN0YW1wdHogXAogICAgICAgICB0aW1lIHRpbWV0eiBkYXRl IGludGVydmFsIG1hY2FkZHIgbWFjYWRkcjggaW5ldCBjaWRyIHRleHQgdmFyY2hhciBjaGFyIFwK ICAgICAgICAgYnl0ZWEgYml0IHZhcmJpdCBudW1lcmljIHV1aWQgbm90X2VxdWFsIGVudW0gYm9v bCBwYXJ0aXRpb25zIFwKLSAgICAgICAgc3RyYXRudW0gd2l0aG91dF9vdmVybGFwcworICAgICAg ICBzdHJhdG51bSBpbnRfY3Jvc3N0eXBlIHdpdGhvdXRfb3ZlcmxhcHMKIAogU0hMSUJfTElOSyAr PSAkKGZpbHRlciAtbG0sICQoTElCUykpCiAKIGlmZGVmIFVTRV9QR1hTCiBQR19DT05GSUcgPSBw Z19jb25maWcKIFBHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QtLTEuOS0tMS4xMC5zcWwgYi9jb250cmli L2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC0tMS45LS0xLjEwLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYzlmZjE5NTUyMDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC0tMS45LS0xLjEwLnNxbApAQCAtMCwwICsxLDE0MyBA QAorLyogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QtLTEuOS0tMS4xMC5zcWwgKi8KKwor LS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlh IEFMVEVSIEVYVEVOU0lPTgorXGVjaG8gVXNlICJBTFRFUiBFWFRFTlNJT04gYnRyZWVfZ2lzdCBV UERBVEUgVE8gJzEuMTAnIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworLS0gQWRkIGNyb3Nz LXR5cGUgb3BlcmF0b3Igc3VwcG9ydCBmb3IgdGhlIGludGVnZXIgdHJpbyAoaW50MiwgaW50NCwg aW50OCkKKy0tIHRvIHRoZSBleGlzdGluZyBHaVNUIG9wZXJhdG9yIGZhbWlsaWVzLgorLS0KKy0t IEdpU1QncyBhbXZhbGlkYXRlIHJlcXVpcmVzIHN1cHBvcnQgZnVuY3Rpb25zIGluIGEgZmFtaWx5 IHRvIGhhdmUgbWF0Y2hpbmcKKy0tIGxlZnQvcmlnaHQgaW5wdXQgdHlwZXMsIHNvIHRoZSBjYXRh bG9nIGFkZGl0aW9ucyBiZWxvdyBhcmUgZGVsaWJlcmF0ZWx5CistLSBwZ19hbW9wLW9ubHkuIFRo ZSBleGlzdGluZyBjb25zaXN0ZW50L2Rpc3RhbmNlIHN1cHBvcnQgZnVuY3Rpb25zIGRpc3BhdGNo CistLSBvbiB0aGUgc3VidHlwZSBPSUQ6IHNhbWUtdHlwZSBxdWVyaWVzIHRha2UgdGhlIG5vcm1h bCBwYXRoLCB3aGlsZSBtaXhlZC13aWR0aAorLS0gaW50ZWdlciBxdWVyaWVzIGFyZSBwcm9tb3Rl ZCB0byBpbnQ2NCBhbmQgY29tcGFyZWQgYnkgdGhlIGludGVnZXIgY3Jvc3MtdHlwZQorLS0gaGVs cGVycyBpbiBidHJlZV91dGlsc19udW0uYy4KKworQ1JFQVRFIEZVTkNUSU9OIGludDJfaW50NF9k aXN0KGludDIsIGludDQpCitSRVRVUk5TIGludDQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5H VUFHRSBDIElNTVVUQUJMRSBTVFJJQ1QgUEFSQUxMRUwgU0FGRTsKKworQ1JFQVRFIEZVTkNUSU9O IGludDRfaW50Ml9kaXN0KGludDQsIGludDIpCitSRVRVUk5TIGludDQKK0FTICdNT0RVTEVfUEFU SE5BTUUnCitMQU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJQ1QgUEFSQUxMRUwgU0FGRTsKKworQ1JF QVRFIEZVTkNUSU9OIGludDJfaW50OF9kaXN0KGludDIsIGludDgpCitSRVRVUk5TIGludDgKK0FT ICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJQ1QgUEFSQUxMRUwg U0FGRTsKKworQ1JFQVRFIEZVTkNUSU9OIGludDhfaW50Ml9kaXN0KGludDgsIGludDIpCitSRVRV Uk5TIGludDgKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJ Q1QgUEFSQUxMRUwgU0FGRTsKKworQ1JFQVRFIEZVTkNUSU9OIGludDRfaW50OF9kaXN0KGludDQs IGludDgpCitSRVRVUk5TIGludDgKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIElN TVVUQUJMRSBTVFJJQ1QgUEFSQUxMRUwgU0FGRTsKKworQ1JFQVRFIEZVTkNUSU9OIGludDhfaW50 NF9kaXN0KGludDgsIGludDQpCitSRVRVUk5TIGludDgKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitM QU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJQ1QgUEFSQUxMRUwgU0FGRTsKKworLS0gSW50cm9zcGVj dGlvbiBoZWxwZXIgZXhwb3NpbmcgdGhlIGludGVnZXIgcXVlcnkgc3VidHlwZXMgdW5kZXJzdG9v ZCBieSB0aGUgQworLS0gY3Jvc3MtdHlwZSBkaXNwYXRjaCAoZ2J0X2ludF9jcm9zc3R5cGVfdGFi bGUgaW4gYnRyZWVfdXRpbHNfbnVtLmMpLiBUaGUKKy0tIHJlZ3Jlc3Npb24gdGVzdHMgdXNlIGl0 IHRvIGFzc2VydCB0aGF0IHRoZSBjcm9zcy10eXBlIHBnX2Ftb3AgZW50cmllcyBiZWxvdworLS0g bmV2ZXIgZHJpZnQgZnJvbSB3aGF0IHRoZSBkaXNwYXRjaCBjYW4gaGFuZGxlLgorQ1JFQVRFIEZV TkNUSU9OIGdidF9pbnRfY3Jvc3N0eXBlX3N1YnR5cGVzKCkKK1JFVFVSTlMgU0VUT0Ygb2lkCitB UyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBJTU1VVEFCTEUgUEFSQUxMRUwgU0FGRTsK KworQ1JFQVRFIE9QRVJBVE9SIDwtPiAoCisJTEVGVEFSRyA9IGludDIsCisJUklHSFRBUkcgPSBp bnQ0LAorCVBST0NFRFVSRSA9IGludDJfaW50NF9kaXN0LAorCUNPTU1VVEFUT1IgPSAnPC0+Jwor KTsKKworQ1JFQVRFIE9QRVJBVE9SIDwtPiAoCisJTEVGVEFSRyA9IGludDQsCisJUklHSFRBUkcg PSBpbnQyLAorCVBST0NFRFVSRSA9IGludDRfaW50Ml9kaXN0LAorCUNPTU1VVEFUT1IgPSAnPC0+ JworKTsKKworQ1JFQVRFIE9QRVJBVE9SIDwtPiAoCisJTEVGVEFSRyA9IGludDIsCisJUklHSFRB UkcgPSBpbnQ4LAorCVBST0NFRFVSRSA9IGludDJfaW50OF9kaXN0LAorCUNPTU1VVEFUT1IgPSAn PC0+JworKTsKKworQ1JFQVRFIE9QRVJBVE9SIDwtPiAoCisJTEVGVEFSRyA9IGludDgsCisJUklH SFRBUkcgPSBpbnQyLAorCVBST0NFRFVSRSA9IGludDhfaW50Ml9kaXN0LAorCUNPTU1VVEFUT1Ig PSAnPC0+JworKTsKKworQ1JFQVRFIE9QRVJBVE9SIDwtPiAoCisJTEVGVEFSRyA9IGludDQsCisJ UklHSFRBUkcgPSBpbnQ4LAorCVBST0NFRFVSRSA9IGludDRfaW50OF9kaXN0LAorCUNPTU1VVEFU T1IgPSAnPC0+JworKTsKKworQ1JFQVRFIE9QRVJBVE9SIDwtPiAoCisJTEVGVEFSRyA9IGludDgs CisJUklHSFRBUkcgPSBpbnQ0LAorCVBST0NFRFVSRSA9IGludDhfaW50NF9kaXN0LAorCUNPTU1V VEFUT1IgPSAnPC0+JworKTsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfaW50Ml9vcHMg VVNJTkcgZ2lzdCBBREQKKwlPUEVSQVRPUgkxCTwgIChpbnQyLCBpbnQ0KSwKKwlPUEVSQVRPUgky CTw9IChpbnQyLCBpbnQ0KSwKKwlPUEVSQVRPUgkzCT0gIChpbnQyLCBpbnQ0KSwKKwlPUEVSQVRP Ugk0CT49IChpbnQyLCBpbnQ0KSwKKwlPUEVSQVRPUgk1CT4gIChpbnQyLCBpbnQ0KSwKKwlPUEVS QVRPUgk2CTw+IChpbnQyLCBpbnQ0KSwKKwlPUEVSQVRPUgkxNQk8LT4gKGludDIsIGludDQpIEZP UiBPUkRFUiBCWSBwZ19jYXRhbG9nLmludGVnZXJfb3BzLAorCU9QRVJBVE9SCTEJPCAgKGludDIs IGludDgpLAorCU9QRVJBVE9SCTIJPD0gKGludDIsIGludDgpLAorCU9QRVJBVE9SCTMJPSAgKGlu dDIsIGludDgpLAorCU9QRVJBVE9SCTQJPj0gKGludDIsIGludDgpLAorCU9QRVJBVE9SCTUJPiAg KGludDIsIGludDgpLAorCU9QRVJBVE9SCTYJPD4gKGludDIsIGludDgpLAorCU9QRVJBVE9SCTE1 CTwtPiAoaW50MiwgaW50OCkgRk9SIE9SREVSIEJZIHBnX2NhdGFsb2cuaW50ZWdlcl9vcHM7CisK K0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X2ludDRfb3BzIFVTSU5HIGdpc3QgQURECisJT1BF UkFUT1IJMQk8ICAoaW50NCwgaW50MiksCisJT1BFUkFUT1IJMgk8PSAoaW50NCwgaW50MiksCisJ T1BFUkFUT1IJMwk9ICAoaW50NCwgaW50MiksCisJT1BFUkFUT1IJNAk+PSAoaW50NCwgaW50Miks CisJT1BFUkFUT1IJNQk+ICAoaW50NCwgaW50MiksCisJT1BFUkFUT1IJNgk8PiAoaW50NCwgaW50 MiksCisJT1BFUkFUT1IJMTUJPC0+IChpbnQ0LCBpbnQyKSBGT1IgT1JERVIgQlkgcGdfY2F0YWxv Zy5pbnRlZ2VyX29wcywKKwlPUEVSQVRPUgkxCTwgIChpbnQ0LCBpbnQ4KSwKKwlPUEVSQVRPUgky CTw9IChpbnQ0LCBpbnQ4KSwKKwlPUEVSQVRPUgkzCT0gIChpbnQ0LCBpbnQ4KSwKKwlPUEVSQVRP Ugk0CT49IChpbnQ0LCBpbnQ4KSwKKwlPUEVSQVRPUgk1CT4gIChpbnQ0LCBpbnQ4KSwKKwlPUEVS QVRPUgk2CTw+IChpbnQ0LCBpbnQ4KSwKKwlPUEVSQVRPUgkxNQk8LT4gKGludDQsIGludDgpIEZP UiBPUkRFUiBCWSBwZ19jYXRhbG9nLmludGVnZXJfb3BzOworCitBTFRFUiBPUEVSQVRPUiBGQU1J TFkgZ2lzdF9pbnQ4X29wcyBVU0lORyBnaXN0IEFERAorCU9QRVJBVE9SCTEJPCAgKGludDgsIGlu dDIpLAorCU9QRVJBVE9SCTIJPD0gKGludDgsIGludDIpLAorCU9QRVJBVE9SCTMJPSAgKGludDgs IGludDIpLAorCU9QRVJBVE9SCTQJPj0gKGludDgsIGludDIpLAorCU9QRVJBVE9SCTUJPiAgKGlu dDgsIGludDIpLAorCU9QRVJBVE9SCTYJPD4gKGludDgsIGludDIpLAorCU9QRVJBVE9SCTE1CTwt PiAoaW50OCwgaW50MikgRk9SIE9SREVSIEJZIHBnX2NhdGFsb2cuaW50ZWdlcl9vcHMsCisJT1BF UkFUT1IJMQk8ICAoaW50OCwgaW50NCksCisJT1BFUkFUT1IJMgk8PSAoaW50OCwgaW50NCksCisJ T1BFUkFUT1IJMwk9ICAoaW50OCwgaW50NCksCisJT1BFUkFUT1IJNAk+PSAoaW50OCwgaW50NCks CisJT1BFUkFUT1IJNQk+ICAoaW50OCwgaW50NCksCisJT1BFUkFUT1IJNgk8PiAoaW50OCwgaW50 NCksCisJT1BFUkFUT1IJMTUJPC0+IChpbnQ4LCBpbnQ0KSBGT1IgT1JERVIgQlkgcGdfY2F0YWxv Zy5pbnRlZ2VyX29wczsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9naXN0 LmNvbnRyb2wgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC5jb250cm9sCmluZGV4IDY5 ZDkzNDFhMGFkLi5lNjA2ZmE2NTUxZCAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0 cmVlX2dpc3QuY29udHJvbAorKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC5jb250 cm9sCkBAIC0xLDYgKzEsNiBAQAogIyBidHJlZV9naXN0IGV4dGVuc2lvbgogY29tbWVudCA9ICdz dXBwb3J0IGZvciBpbmRleGluZyBjb21tb24gZGF0YXR5cGVzIGluIEdpU1QnCi1kZWZhdWx0X3Zl cnNpb24gPSAnMS45JworZGVmYXVsdF92ZXJzaW9uID0gJzEuMTAnCiBtb2R1bGVfcGF0aG5hbWUg PSAnJGxpYmRpci9idHJlZV9naXN0JwogcmVsb2NhdGFibGUgPSB0cnVlCiB0cnVzdGVkID0gdHJ1 ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2ludDIuYyBiL2NvbnRyaWIv YnRyZWVfZ2lzdC9idHJlZV9pbnQyLmMKaW5kZXggY2M0YjMzMTc3ZTMuLmQwMGIyNGQ5YTU3IDEw MDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50Mi5jCisrKyBiL2NvbnRyaWIv YnRyZWVfZ2lzdC9idHJlZV9pbnQyLmMKQEAgLTIsMTIgKzIsMTMgQEAKICAqIGNvbnRyaWIvYnRy ZWVfZ2lzdC9idHJlZV9pbnQyLmMKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNs dWRlICJidHJlZV9naXN0LmgiCiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfbnVtLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgogI2luY2x1ZGUg InV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKIHR5cGVkZWYg c3RydWN0IGludDE2a2V5CiB7CkBAIC03MywxMyArNzQsMTIgQEAgZ2J0X2ludDJrZXlfY21wKGNv bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCiBzdGF0aWMgZmxv YXQ4CiBnYnRfaW50Ml9kaXN0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZv ICpmbGluZm8pCiB7CiAJcmV0dXJuIEdFVF9GTE9BVF9ESVNUQU5DRShpbnQxNiwgYSwgYik7CiB9 CiAKLQogc3RhdGljIGNvbnN0IGdidHJlZV9uaW5mbyB0aW5mbyA9CiB7CiAJZ2J0X3RfaW50MiwK IAlzaXplb2YoaW50MTYpLAogCTQsCQkJCQkJCS8qIHNpemVvZihnYnRyZWVrZXk0KSAqLwogCWdi dF9pbnQyZ3QsCkBAIC0xMDksMTIgKzEwOSw0NiBAQCBpbnQyX2Rpc3QoUEdfRlVOQ1RJT05fQVJH UykKIAogCXJhID0gYWJzKHIpOwogCiAJUEdfUkVUVVJOX0lOVDE2KHJhKTsKIH0KIAorUEdfRlVO Q1RJT05fSU5GT19WMShpbnQyX2ludDRfZGlzdCk7CitEYXR1bQoraW50Ml9pbnQ0X2Rpc3QoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlpbnQzMgkJYSA9IChpbnQzMikgUEdfR0VUQVJHX0lOVDE2KDAp OworCWludDMyCQliID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCWludDMyCQlyOworCisJaWYgKHBn X3N1Yl9zMzJfb3ZlcmZsb3coYSwgYiwgJnIpIHx8CisJCXIgPT0gUEdfSU5UMzJfTUlOKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0Zf UkFOR0UpLAorCQkJCSBlcnJtc2coImludGVnZXIgb3V0IG9mIHJhbmdlIikpKTsKKworCVBHX1JF VFVSTl9JTlQzMihhYnMocikpOworfQorCitQR19GVU5DVElPTl9JTkZPX1YxKGludDJfaW50OF9k aXN0KTsKK0RhdHVtCitpbnQyX2ludDhfZGlzdChQR19GVU5DVElPTl9BUkdTKQoreworCWludDY0 CQlhID0gKGludDY0KSBQR19HRVRBUkdfSU5UMTYoMCk7CisJaW50NjQJCWIgPSBQR19HRVRBUkdf SU5UNjQoMSk7CisJaW50NjQJCXI7CisKKwlpZiAocGdfc3ViX3M2NF9vdmVyZmxvdyhhLCBiLCAm cikgfHwKKwkJciA9PSBQR19JTlQ2NF9NSU4pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9OVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSksCisJCQkJIGVycm1zZygiYmln aW50IG91dCBvZiByYW5nZSIpKSk7CisKKwlQR19SRVRVUk5fSU5UNjQoaTY0YWJzKHIpKTsKK30K KwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK ICAqIEdpU1Qgc3VwcG9ydCBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KIAogRGF0dW0KQEAgLTEzNCw0NyArMTY4LDYxIEBAIGdi dF9pbnQyX2ZldGNoKFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIERhdHVtCiBnYnRfaW50Ml9jb25z aXN0ZW50KFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJR0lTVEVOVFJZICAqZW50cnkgPSAoR0lTVEVO VFJZICopIFBHX0dFVEFSR19QT0lOVEVSKDApOwotCWludDE2CQlxdWVyeSA9IFBHX0dFVEFSR19J TlQxNigxKTsKKwlEYXR1bQkJcXVlcnlEYXR1bSA9IFBHX0dFVEFSR19EQVRVTSgxKTsKIAlTdHJh dGVneU51bWJlciBzdHJhdGVneSA9IChTdHJhdGVneU51bWJlcikgUEdfR0VUQVJHX1VJTlQxNigy KTsKLSNpZmRlZiBOT1RfVVNFRAogCU9pZAkJCXN1YnR5cGUgPSBQR19HRVRBUkdfT0lEKDMpOwot I2VuZGlmCiAJYm9vbAkgICAqcmVjaGVjayA9IChib29sICopIFBHX0dFVEFSR19QT0lOVEVSKDQp OwogCWludDE2S0VZICAgKmtrayA9IChpbnQxNktFWSAqKSBEYXR1bUdldFBvaW50ZXIoZW50cnkt PmtleSk7CisJaW50MTYJCXF1ZXJ5OwogCUdCVF9OVU1LRVlfUiBrZXk7CiAKIAkvKiBBbGwgY2Fz ZXMgc2VydmVkIGJ5IHRoaXMgZnVuY3Rpb24gYXJlIGV4YWN0ICovCiAJKnJlY2hlY2sgPSBmYWxz ZTsKIAogCWtleS5sb3dlciA9IChHQlRfTlVNS0VZICopICZra2stPmxvd2VyOwogCWtleS51cHBl ciA9IChHQlRfTlVNS0VZICopICZra2stPnVwcGVyOwogCi0JUEdfUkVUVVJOX0JPT0woZ2J0X251 bV9jb25zaXN0ZW50KCZrZXksICZxdWVyeSwgJnN0cmF0ZWd5LAotCQkJCQkJCQkJICBHSVNUX0xF QUYoZW50cnkpLCAmdGluZm8sIGZjaW5mby0+ZmxpbmZvKSk7CisJaWYgKGxpa2VseShzdWJ0eXBl ID09IEludmFsaWRPaWQgfHwgc3VidHlwZSA9PSBJTlQyT0lEKSkKKwl7CisJCXF1ZXJ5ID0gRGF0 dW1HZXRJbnQxNihxdWVyeURhdHVtKTsKKwkJUEdfUkVUVVJOX0JPT0woZ2J0X251bV9jb25zaXN0 ZW50KCZrZXksICZxdWVyeSwgJnN0cmF0ZWd5LAorCQkJCQkJCQkJCSAgR0lTVF9MRUFGKGVudHJ5 KSwgJnRpbmZvLAorCQkJCQkJCQkJCSAgZmNpbmZvLT5mbGluZm8pKTsKKwl9CisKKwlQR19SRVRV Uk5fQk9PTChnYnRfaW50X2NvbnNpc3RlbnRfeCgoaW50NjQpIGtray0+bG93ZXIsIChpbnQ2NCkg a2trLT51cHBlciwKKwkJCQkJCQkJCQlxdWVyeURhdHVtLCBzdWJ0eXBlLCAmc3RyYXRlZ3ksCisJ CQkJCQkJCQkJR0lTVF9MRUFGKGVudHJ5KSkpOwogfQogCiBEYXR1bQogZ2J0X2ludDJfZGlzdGFu Y2UoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlHSVNURU5UUlkgICplbnRyeSA9IChHSVNURU5UUlkg KikgUEdfR0VUQVJHX1BPSU5URVIoMCk7Ci0JaW50MTYJCXF1ZXJ5ID0gUEdfR0VUQVJHX0lOVDE2 KDEpOwotI2lmZGVmIE5PVF9VU0VECisJRGF0dW0JCXF1ZXJ5RGF0dW0gPSBQR19HRVRBUkdfREFU VU0oMSk7CiAJT2lkCQkJc3VidHlwZSA9IFBHX0dFVEFSR19PSUQoMyk7Ci0jZW5kaWYKIAlpbnQx NktFWSAgICpra2sgPSAoaW50MTZLRVkgKikgRGF0dW1HZXRQb2ludGVyKGVudHJ5LT5rZXkpOwor CWludDE2CQlxdWVyeTsKIAlHQlRfTlVNS0VZX1Iga2V5OwogCiAJa2V5Lmxvd2VyID0gKEdCVF9O VU1LRVkgKikgJmtray0+bG93ZXI7CiAJa2V5LnVwcGVyID0gKEdCVF9OVU1LRVkgKikgJmtray0+ dXBwZXI7CiAKLQlQR19SRVRVUk5fRkxPQVQ4KGdidF9udW1fZGlzdGFuY2UoJmtleSwgJnF1ZXJ5 LCBHSVNUX0xFQUYoZW50cnkpLAotCQkJCQkJCQkJICAmdGluZm8sIGZjaW5mby0+ZmxpbmZvKSk7 CisJaWYgKGxpa2VseShzdWJ0eXBlID09IEludmFsaWRPaWQgfHwgc3VidHlwZSA9PSBJTlQyT0lE KSkKKwl7CisJCXF1ZXJ5ID0gRGF0dW1HZXRJbnQxNihxdWVyeURhdHVtKTsKKwkJUEdfUkVUVVJO X0ZMT0FUOChnYnRfbnVtX2Rpc3RhbmNlKCZrZXksICZxdWVyeSwgR0lTVF9MRUFGKGVudHJ5KSwK KwkJCQkJCQkJCQkgICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pKTsKKwl9CisKKwlQR19SRVRVUk5f RkxPQVQ4KGdidF9pbnRfZGlzdGFuY2VfeCgoaW50NjQpIGtray0+bG93ZXIsIChpbnQ2NCkga2tr LT51cHBlciwKKwkJCQkJCQkJCQlxdWVyeURhdHVtLCBzdWJ0eXBlKSk7CiB9CiAKIERhdHVtCiBn YnRfaW50Ml91bmlvbihQR19GVU5DVElPTl9BUkdTKQogewogCUdpc3RFbnRyeVZlY3RvciAqZW50 cnl2ZWMgPSAoR2lzdEVudHJ5VmVjdG9yICopIFBHX0dFVEFSR19QT0lOVEVSKDApOwpkaWZmIC0t Z2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2ludDQuYyBiL2NvbnRyaWIvYnRyZWVfZ2lz dC9idHJlZV9pbnQ0LmMKaW5kZXggNDc3OTA1NzhlNmIuLjRkZjkxZjIwNTdjIDEwMDY0NAotLS0g YS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50NC5jCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lz dC9idHJlZV9pbnQ0LmMKQEAgLTEsMTIgKzEsMTMgQEAKIC8qCiAgKiBjb250cmliL2J0cmVlX2dp c3QvYnRyZWVfaW50NC5jCiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogI2luY2x1ZGUgImJ0 cmVlX2dpc3QuaCIKICNpbmNsdWRlICJidHJlZV91dGlsc19udW0uaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tb24vaW50LmgiCiAjaW5jbHVkZSAidXRpbHMv cmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQuaCIKIAogdHlwZWRlZiBzdHJ1Y3Qg aW50MzJrZXkKIHsKQEAgLTcxLDEzICs3MiwxMiBAQCBnYnRfaW50NGtleV9jbXAoY29uc3Qgdm9p ZCAqYSwgY29uc3Qgdm9pZCAqYiwgRm1nckluZm8gKmZsaW5mbykKIHN0YXRpYyBmbG9hdDgKIGdi dF9pbnQ0X2Rpc3QoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgRm1nckluZm8gKmZsaW5m bykKIHsKIAlyZXR1cm4gR0VUX0ZMT0FUX0RJU1RBTkNFKGludDMyLCBhLCBiKTsKIH0KIAotCiBz dGF0aWMgY29uc3QgZ2J0cmVlX25pbmZvIHRpbmZvID0KIHsKIAlnYnRfdF9pbnQ0LAogCXNpemVv ZihpbnQzMiksCiAJOCwJCQkJCQkJLyogc2l6ZW9mKGdidHJlZWtleTgpICovCiAJZ2J0X2ludDRn dCwKQEAgLTEwNywxMiArMTA3LDQ2IEBAIGludDRfZGlzdChQR19GVU5DVElPTl9BUkdTKQogCiAJ cmEgPSBhYnMocik7CiAKIAlQR19SRVRVUk5fSU5UMzIocmEpOwogfQogCitQR19GVU5DVElPTl9J TkZPX1YxKGludDRfaW50Ml9kaXN0KTsKK0RhdHVtCitpbnQ0X2ludDJfZGlzdChQR19GVU5DVElP Tl9BUkdTKQoreworCWludDMyCQlhID0gUEdfR0VUQVJHX0lOVDMyKDApOworCWludDMyCQliID0g KGludDMyKSBQR19HRVRBUkdfSU5UMTYoMSk7CisJaW50MzIJCXI7CisKKwlpZiAocGdfc3ViX3Mz Ml9vdmVyZmxvdyhhLCBiLCAmcikgfHwKKwkJciA9PSBQR19JTlQzMl9NSU4pCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9OVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSks CisJCQkJIGVycm1zZygiaW50ZWdlciBvdXQgb2YgcmFuZ2UiKSkpOworCisJUEdfUkVUVVJOX0lO VDMyKGFicyhyKSk7Cit9CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEoaW50NF9pbnQ4X2Rpc3QpOwor RGF0dW0KK2ludDRfaW50OF9kaXN0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50NjQJCWEgPSAo aW50NjQpIFBHX0dFVEFSR19JTlQzMigwKTsKKwlpbnQ2NAkJYiA9IFBHX0dFVEFSR19JTlQ2NCgx KTsKKwlpbnQ2NAkJcjsKKworCWlmIChwZ19zdWJfczY0X292ZXJmbG93KGEsIGIsICZyKSB8fAor CQlyID09IFBHX0lOVDY0X01JTikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKKwkJCQkgZXJybXNnKCJiaWdpbnQgb3V0 IG9mIHJhbmdlIikpKTsKKworCVBHX1JFVFVSTl9JTlQ2NChpNjRhYnMocikpOworfQorCiAKIC8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR2lT VCBzdXBwb3J0IGZ1bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwogCiBEYXR1bQpAQCAtMTMyLDQ3ICsxNjYsNjEgQEAgZ2J0X2ludDRf ZmV0Y2goUEdfRlVOQ1RJT05fQVJHUykKIH0KIAogRGF0dW0KIGdidF9pbnQ0X2NvbnNpc3RlbnQo UEdfRlVOQ1RJT05fQVJHUykKIHsKIAlHSVNURU5UUlkgICplbnRyeSA9IChHSVNURU5UUlkgKikg UEdfR0VUQVJHX1BPSU5URVIoMCk7Ci0JaW50MzIJCXF1ZXJ5ID0gUEdfR0VUQVJHX0lOVDMyKDEp OworCURhdHVtCQlxdWVyeURhdHVtID0gUEdfR0VUQVJHX0RBVFVNKDEpOwogCVN0cmF0ZWd5TnVt YmVyIHN0cmF0ZWd5ID0gKFN0cmF0ZWd5TnVtYmVyKSBQR19HRVRBUkdfVUlOVDE2KDIpOwotI2lm ZGVmIE5PVF9VU0VECiAJT2lkCQkJc3VidHlwZSA9IFBHX0dFVEFSR19PSUQoMyk7Ci0jZW5kaWYK IAlib29sCSAgICpyZWNoZWNrID0gKGJvb2wgKikgUEdfR0VUQVJHX1BPSU5URVIoNCk7CiAJaW50 MzJLRVkgICAqa2trID0gKGludDMyS0VZICopIERhdHVtR2V0UG9pbnRlcihlbnRyeS0+a2V5KTsK KwlpbnQzMgkJcXVlcnk7CiAJR0JUX05VTUtFWV9SIGtleTsKIAogCS8qIEFsbCBjYXNlcyBzZXJ2 ZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgZXhhY3QgKi8KIAkqcmVjaGVjayA9IGZhbHNlOwogCiAJ a2V5Lmxvd2VyID0gKEdCVF9OVU1LRVkgKikgJmtray0+bG93ZXI7CiAJa2V5LnVwcGVyID0gKEdC VF9OVU1LRVkgKikgJmtray0+dXBwZXI7CiAKLQlQR19SRVRVUk5fQk9PTChnYnRfbnVtX2NvbnNp c3RlbnQoJmtleSwgJnF1ZXJ5LCAmc3RyYXRlZ3ksCi0JCQkJCQkJCQkgIEdJU1RfTEVBRihlbnRy eSksICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pKTsKKwlpZiAobGlrZWx5KHN1YnR5cGUgPT0gSW52 YWxpZE9pZCB8fCBzdWJ0eXBlID09IElOVDRPSUQpKQorCXsKKwkJcXVlcnkgPSBEYXR1bUdldElu dDMyKHF1ZXJ5RGF0dW0pOworCQlQR19SRVRVUk5fQk9PTChnYnRfbnVtX2NvbnNpc3RlbnQoJmtl eSwgJnF1ZXJ5LCAmc3RyYXRlZ3ksCisJCQkJCQkJCQkJICBHSVNUX0xFQUYoZW50cnkpLCAmdGlu Zm8sCisJCQkJCQkJCQkJICBmY2luZm8tPmZsaW5mbykpOworCX0KKworCVBHX1JFVFVSTl9CT09M KGdidF9pbnRfY29uc2lzdGVudF94KChpbnQ2NCkga2trLT5sb3dlciwgKGludDY0KSBra2stPnVw cGVyLAorCQkJCQkJCQkJCXF1ZXJ5RGF0dW0sIHN1YnR5cGUsICZzdHJhdGVneSwKKwkJCQkJCQkJ CQlHSVNUX0xFQUYoZW50cnkpKSk7CiB9CiAKIERhdHVtCiBnYnRfaW50NF9kaXN0YW5jZShQR19G VU5DVElPTl9BUkdTKQogewogCUdJU1RFTlRSWSAgKmVudHJ5ID0gKEdJU1RFTlRSWSAqKSBQR19H RVRBUkdfUE9JTlRFUigwKTsKLQlpbnQzMgkJcXVlcnkgPSBQR19HRVRBUkdfSU5UMzIoMSk7Ci0j aWZkZWYgTk9UX1VTRUQKKwlEYXR1bQkJcXVlcnlEYXR1bSA9IFBHX0dFVEFSR19EQVRVTSgxKTsK IAlPaWQJCQlzdWJ0eXBlID0gUEdfR0VUQVJHX09JRCgzKTsKLSNlbmRpZgogCWludDMyS0VZICAg KmtrayA9IChpbnQzMktFWSAqKSBEYXR1bUdldFBvaW50ZXIoZW50cnktPmtleSk7CisJaW50MzIJ CXF1ZXJ5OwogCUdCVF9OVU1LRVlfUiBrZXk7CiAKIAlrZXkubG93ZXIgPSAoR0JUX05VTUtFWSAq KSAma2trLT5sb3dlcjsKIAlrZXkudXBwZXIgPSAoR0JUX05VTUtFWSAqKSAma2trLT51cHBlcjsK IAotCVBHX1JFVFVSTl9GTE9BVDgoZ2J0X251bV9kaXN0YW5jZSgma2V5LCAmcXVlcnksIEdJU1Rf TEVBRihlbnRyeSksCi0JCQkJCQkJCQkgICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pKTsKKwlpZiAo bGlrZWx5KHN1YnR5cGUgPT0gSW52YWxpZE9pZCB8fCBzdWJ0eXBlID09IElOVDRPSUQpKQorCXsK KwkJcXVlcnkgPSBEYXR1bUdldEludDMyKHF1ZXJ5RGF0dW0pOworCQlQR19SRVRVUk5fRkxPQVQ4 KGdidF9udW1fZGlzdGFuY2UoJmtleSwgJnF1ZXJ5LCBHSVNUX0xFQUYoZW50cnkpLAorCQkJCQkJ CQkJCSAgJnRpbmZvLCBmY2luZm8tPmZsaW5mbykpOworCX0KKworCVBHX1JFVFVSTl9GTE9BVDgo Z2J0X2ludF9kaXN0YW5jZV94KChpbnQ2NCkga2trLT5sb3dlciwgKGludDY0KSBra2stPnVwcGVy LAorCQkJCQkJCQkJCXF1ZXJ5RGF0dW0sIHN1YnR5cGUpKTsKIH0KIAogRGF0dW0KIGdidF9pbnQ0 X3VuaW9uKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJR2lzdEVudHJ5VmVjdG9yICplbnRyeXZlYyA9 IChHaXN0RW50cnlWZWN0b3IgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CmRpZmYgLS1naXQgYS9j b250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50OC5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVl X2ludDguYwppbmRleCBmNDgxMjJjOGQ4NC4uYWUwMTI3M2I3MDkgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvYnRyZWVfZ2lzdC9idHJlZV9pbnQ4LmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVl X2ludDguYwpAQCAtMiwxMiArMiwxMyBAQAogICogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2lu dDguYwogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImJ0cmVlX2dpc3Qu aCIKICNpbmNsdWRlICJidHJlZV91dGlsc19udW0uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKICNpbmNsdWRlICJjb21tb24vaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAj aW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgaW50NjRrZXkK IHsKQEAgLTczLDEzICs3NCwxMiBAQCBnYnRfaW50OGtleV9jbXAoY29uc3Qgdm9pZCAqYSwgY29u c3Qgdm9pZCAqYiwgRm1nckluZm8gKmZsaW5mbykKIHN0YXRpYyBmbG9hdDgKIGdidF9pbnQ4X2Rp c3QoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgRm1nckluZm8gKmZsaW5mbykKIHsKIAly ZXR1cm4gR0VUX0ZMT0FUX0RJU1RBTkNFKGludDY0LCBhLCBiKTsKIH0KIAotCiBzdGF0aWMgY29u c3QgZ2J0cmVlX25pbmZvIHRpbmZvID0KIHsKIAlnYnRfdF9pbnQ4LAogCXNpemVvZihpbnQ2NCks CiAJMTYsCQkJCQkJCS8qIHNpemVvZihnYnRyZWVrZXkxNikgKi8KIAlnYnRfaW50OGd0LApAQCAt MTA5LDEyICsxMDksNDYgQEAgaW50OF9kaXN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlyYSA9IGk2 NGFicyhyKTsKIAogCVBHX1JFVFVSTl9JTlQ2NChyYSk7CiB9CiAKK1BHX0ZVTkNUSU9OX0lORk9f VjEoaW50OF9pbnQyX2Rpc3QpOworRGF0dW0KK2ludDhfaW50Ml9kaXN0KFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJaW50NjQJCWEgPSBQR19HRVRBUkdfSU5UNjQoMCk7CisJaW50NjQJCWIgPSAoaW50 NjQpIFBHX0dFVEFSR19JTlQxNigxKTsKKwlpbnQ2NAkJcjsKKworCWlmIChwZ19zdWJfczY0X292 ZXJmbG93KGEsIGIsICZyKSB8fAorCQlyID09IFBHX0lOVDY0X01JTikKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKKwkJ CQkgZXJybXNnKCJiaWdpbnQgb3V0IG9mIHJhbmdlIikpKTsKKworCVBHX1JFVFVSTl9JTlQ2NChp NjRhYnMocikpOworfQorCitQR19GVU5DVElPTl9JTkZPX1YxKGludDhfaW50NF9kaXN0KTsKK0Rh dHVtCitpbnQ4X2ludDRfZGlzdChQR19GVU5DVElPTl9BUkdTKQoreworCWludDY0CQlhID0gUEdf R0VUQVJHX0lOVDY0KDApOworCWludDY0CQliID0gKGludDY0KSBQR19HRVRBUkdfSU5UMzIoMSk7 CisJaW50NjQJCXI7CisKKwlpZiAocGdfc3ViX3M2NF9vdmVyZmxvdyhhLCBiLCAmcikgfHwKKwkJ ciA9PSBQR19JTlQ2NF9NSU4pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9OVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSksCisJCQkJIGVycm1zZygiYmlnaW50IG91dCBv ZiByYW5nZSIpKSk7CisKKwlQR19SRVRVUk5fSU5UNjQoaTY0YWJzKHIpKTsKK30KKwogCiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdpU1Qg c3VwcG9ydCBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KIAogRGF0dW0KQEAgLTEzNCw0NyArMTY4LDYxIEBAIGdidF9pbnQ4X2Zl dGNoKFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIERhdHVtCiBnYnRfaW50OF9jb25zaXN0ZW50KFBH X0ZVTkNUSU9OX0FSR1MpCiB7CiAJR0lTVEVOVFJZICAqZW50cnkgPSAoR0lTVEVOVFJZICopIFBH X0dFVEFSR19QT0lOVEVSKDApOwotCWludDY0CQlxdWVyeSA9IFBHX0dFVEFSR19JTlQ2NCgxKTsK KwlEYXR1bQkJcXVlcnlEYXR1bSA9IFBHX0dFVEFSR19EQVRVTSgxKTsKIAlTdHJhdGVneU51bWJl ciBzdHJhdGVneSA9IChTdHJhdGVneU51bWJlcikgUEdfR0VUQVJHX1VJTlQxNigyKTsKLSNpZmRl ZiBOT1RfVVNFRAogCU9pZAkJCXN1YnR5cGUgPSBQR19HRVRBUkdfT0lEKDMpOwotI2VuZGlmCiAJ Ym9vbAkgICAqcmVjaGVjayA9IChib29sICopIFBHX0dFVEFSR19QT0lOVEVSKDQpOwogCWludDY0 S0VZICAgKmtrayA9IChpbnQ2NEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoZW50cnktPmtleSk7CisJ aW50NjQJCXF1ZXJ5OwogCUdCVF9OVU1LRVlfUiBrZXk7CiAKIAkvKiBBbGwgY2FzZXMgc2VydmVk IGJ5IHRoaXMgZnVuY3Rpb24gYXJlIGV4YWN0ICovCiAJKnJlY2hlY2sgPSBmYWxzZTsKIAogCWtl eS5sb3dlciA9IChHQlRfTlVNS0VZICopICZra2stPmxvd2VyOwogCWtleS51cHBlciA9IChHQlRf TlVNS0VZICopICZra2stPnVwcGVyOwogCi0JUEdfUkVUVVJOX0JPT0woZ2J0X251bV9jb25zaXN0 ZW50KCZrZXksICZxdWVyeSwgJnN0cmF0ZWd5LAotCQkJCQkJCQkJICBHSVNUX0xFQUYoZW50cnkp LCAmdGluZm8sIGZjaW5mby0+ZmxpbmZvKSk7CisJaWYgKGxpa2VseShzdWJ0eXBlID09IEludmFs aWRPaWQgfHwgc3VidHlwZSA9PSBJTlQ4T0lEKSkKKwl7CisJCXF1ZXJ5ID0gRGF0dW1HZXRJbnQ2 NChxdWVyeURhdHVtKTsKKwkJUEdfUkVUVVJOX0JPT0woZ2J0X251bV9jb25zaXN0ZW50KCZrZXks ICZxdWVyeSwgJnN0cmF0ZWd5LAorCQkJCQkJCQkJCSAgR0lTVF9MRUFGKGVudHJ5KSwgJnRpbmZv LAorCQkJCQkJCQkJCSAgZmNpbmZvLT5mbGluZm8pKTsKKwl9CisKKwlQR19SRVRVUk5fQk9PTChn YnRfaW50X2NvbnNpc3RlbnRfeChra2stPmxvd2VyLCBra2stPnVwcGVyLAorCQkJCQkJCQkJCXF1 ZXJ5RGF0dW0sIHN1YnR5cGUsICZzdHJhdGVneSwKKwkJCQkJCQkJCQlHSVNUX0xFQUYoZW50cnkp KSk7CiB9CiAKIERhdHVtCiBnYnRfaW50OF9kaXN0YW5jZShQR19GVU5DVElPTl9BUkdTKQogewog CUdJU1RFTlRSWSAgKmVudHJ5ID0gKEdJU1RFTlRSWSAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsK LQlpbnQ2NAkJcXVlcnkgPSBQR19HRVRBUkdfSU5UNjQoMSk7Ci0jaWZkZWYgTk9UX1VTRUQKKwlE YXR1bQkJcXVlcnlEYXR1bSA9IFBHX0dFVEFSR19EQVRVTSgxKTsKIAlPaWQJCQlzdWJ0eXBlID0g UEdfR0VUQVJHX09JRCgzKTsKLSNlbmRpZgogCWludDY0S0VZICAgKmtrayA9IChpbnQ2NEtFWSAq KSBEYXR1bUdldFBvaW50ZXIoZW50cnktPmtleSk7CisJaW50NjQJCXF1ZXJ5OwogCUdCVF9OVU1L RVlfUiBrZXk7CiAKIAlrZXkubG93ZXIgPSAoR0JUX05VTUtFWSAqKSAma2trLT5sb3dlcjsKIAlr ZXkudXBwZXIgPSAoR0JUX05VTUtFWSAqKSAma2trLT51cHBlcjsKIAotCVBHX1JFVFVSTl9GTE9B VDgoZ2J0X251bV9kaXN0YW5jZSgma2V5LCAmcXVlcnksIEdJU1RfTEVBRihlbnRyeSksCi0JCQkJ CQkJCQkgICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pKTsKKwlpZiAobGlrZWx5KHN1YnR5cGUgPT0g SW52YWxpZE9pZCB8fCBzdWJ0eXBlID09IElOVDhPSUQpKQorCXsKKwkJcXVlcnkgPSBEYXR1bUdl dEludDY0KHF1ZXJ5RGF0dW0pOworCQlQR19SRVRVUk5fRkxPQVQ4KGdidF9udW1fZGlzdGFuY2Uo JmtleSwgJnF1ZXJ5LCBHSVNUX0xFQUYoZW50cnkpLAorCQkJCQkJCQkJCSAgJnRpbmZvLCBmY2lu Zm8tPmZsaW5mbykpOworCX0KKworCVBHX1JFVFVSTl9GTE9BVDgoZ2J0X2ludF9kaXN0YW5jZV94 KGtray0+bG93ZXIsIGtray0+dXBwZXIsCisJCQkJCQkJCQkJcXVlcnlEYXR1bSwgc3VidHlwZSkp OwogfQogCiBEYXR1bQogZ2J0X2ludDhfdW5pb24oUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlHaXN0 RW50cnlWZWN0b3IgKmVudHJ5dmVjID0gKEdpc3RFbnRyeVZlY3RvciAqKSBQR19HRVRBUkdfUE9J TlRFUigwKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV91dGlsc19udW0u YyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV91dGlsc19udW0uYwppbmRleCAzYWZmZTRjMmM0 Ni4uY2ZmNDdlMmQ4NzYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV91dGls c19udW0uYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfdXRpbHNfbnVtLmMKQEAgLTIs MTIgKzIsMTQgQEAKICAqIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV91dGlsc19udW0uYwogICov CiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImJ0cmVlX2dpc3QuaCIKICNpbmNs dWRlICJidHJlZV91dGlsc19udW0uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNp bmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAidXRpbHMvY2FzaC5oIgogI2luY2x1ZGUgInV0 aWxzL2RhdGUuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKIAogCiBHSVNURU5UUlkg KgpAQCAtMzA0LDEyICszMDYsMTQ0IEBAIGdidF9udW1fY29uc2lzdGVudChjb25zdCBHQlRfTlVN S0VZX1IgKmtleSwKIAkJCXJldHZhbCA9IGZhbHNlOwogCX0KIAogCXJldHVybiByZXR2YWw7CiB9 CiAKKy8qCisgKiBDcm9zcy10eXBlIGRpc3BhdGNoIHRhYmxlIGZvciB0aGUgaW50ZWdlciBvcGNs YXNzZXMuCisgKgorICogVGhpcyBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3Igd2hp Y2ggcXVlcnkgc3VidHlwZXMgdGhlIGludGVnZXIKKyAqIGNyb3NzLXR5cGUgcGF0aCB1bmRlcnN0 YW5kcy4gZ2J0X2ludF9xdWVyeV90b19pbnQ2NCgpIHByb21vdGVzIGV4YWN0bHkgdGhlCisgKiBz dWJ0eXBlcyBsaXN0ZWQgaGVyZSwgYW5kIHRoZSBTUUwtdmlzaWJsZSBnYnRfaW50X2Nyb3NzdHlw ZV9zdWJ0eXBlcygpCisgKiBleHBvc2VzIHRoZSBzYW1lIGxpc3Qgc28gdGhlIHJlZ3Jlc3Npb24g dGVzdHMgY2FuIGFzc2VydCB0aGF0IHRoZSBjcm9zcy10eXBlCisgKiBwZ19hbW9wIGVudHJpZXMg aW4gZ2lzdF9pbnR7Miw0LDh9X29wcyBuZXZlciBkcmlmdCBmcm9tIHdoYXQgdGhlIEMgY29kZSBj YW4KKyAqIGFjdHVhbGx5IGhhbmRsZS4KKyAqLwordHlwZWRlZiBpbnQ2NCAoKmdidF9pbnRfcHJv bW90ZV9mbikgKERhdHVtIHF1ZXJ5KTsKKworc3RhdGljIGludDY0CitnYnRfaW50Ml90b19pbnQ2 NChEYXR1bSBxdWVyeSkKK3sKKwlyZXR1cm4gKGludDY0KSBEYXR1bUdldEludDE2KHF1ZXJ5KTsK K30KKworc3RhdGljIGludDY0CitnYnRfaW50NF90b19pbnQ2NChEYXR1bSBxdWVyeSkKK3sKKwly ZXR1cm4gKGludDY0KSBEYXR1bUdldEludDMyKHF1ZXJ5KTsKK30KKworc3RhdGljIGludDY0Citn YnRfaW50OF90b19pbnQ2NChEYXR1bSBxdWVyeSkKK3sKKwlyZXR1cm4gRGF0dW1HZXRJbnQ2NChx dWVyeSk7Cit9CisKK3R5cGVkZWYgc3RydWN0Cit7CisJT2lkCQkJc3VidHlwZTsKKwlnYnRfaW50 X3Byb21vdGVfZm4gcHJvbW90ZTsKK30JCQlnYnRfaW50X2Nyb3NzdHlwZTsKKworc3RhdGljIGNv bnN0IGdidF9pbnRfY3Jvc3N0eXBlIGdidF9pbnRfY3Jvc3N0eXBlX3RhYmxlW10gPSB7CisJe0lO VDJPSUQsIGdidF9pbnQyX3RvX2ludDY0fSwKKwl7SU5UNE9JRCwgZ2J0X2ludDRfdG9faW50NjR9 LAorCXtJTlQ4T0lELCBnYnRfaW50OF90b19pbnQ2NH0sCit9OworCisvKgorICogUHJvbW90ZSBh IGNyb3NzLXR5cGUgaW50ZWdlciBxdWVyeSB2YWx1ZSB0byBpbnQ2NC4KKyAqCisgKiBBIHN1YnR5 cGUgb3V0c2lkZSBnYnRfaW50X2Nyb3NzdHlwZV90YWJsZSBtZWFucyB0aGUgQyBkaXNwYXRjaCBp cyBvdXQgb2Ygc3luYworICogd2l0aCB0aGUgb3BlcmF0b3ItZmFtaWx5IHJlZ2lzdHJhdGlvbnMg aW4gcGdfYW1vcCwgc28gd2UgdHJlYXQgaXQgYXMgYW4KKyAqIGludGVybmFsIGVycm9yLiAgVGhl IHJlZ3Jlc3Npb24gdGVzdHMgYXNzZXJ0IHRoaXMgbmV2ZXIgaGFwcGVucy4KKyAqLworc3RhdGlj IGludDY0CitnYnRfaW50X3F1ZXJ5X3RvX2ludDY0KERhdHVtIHF1ZXJ5LCBPaWQgc3VidHlwZSkK K3sKKwlpbnQJCQlpOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aG9mKGdidF9pbnRfY3Jvc3N0 eXBlX3RhYmxlKTsgaSsrKQorCXsKKwkJaWYgKGdidF9pbnRfY3Jvc3N0eXBlX3RhYmxlW2ldLnN1 YnR5cGUgPT0gc3VidHlwZSkKKwkJCXJldHVybiBnYnRfaW50X2Nyb3NzdHlwZV90YWJsZVtpXS5w cm9tb3RlKHF1ZXJ5KTsKKwl9CisKKwllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHN1YnR5cGUg JXUgZm9yIGJ0cmVlX2dpc3QgaW50ZWdlciBjcm9zcy10eXBlIGNvbXBhcmlzb24iLAorCQkgc3Vi dHlwZSk7CisJcmV0dXJuIDA7CQkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCit9CisKKy8q CisgKiBnYnRfaW50X2Nyb3NzdHlwZV9zdWJ0eXBlcworICoKKyAqIEV4cG9zZSB0aGUgY29udGVu dHMgb2YgZ2J0X2ludF9jcm9zc3R5cGVfdGFibGUgdG8gU1FMIGFzIGEgc2V0IG9mIHR5cGUgT0lE cy4KKyAqIFRoZSBidHJlZV9naXN0IHJlZ3Jlc3Npb24gdGVzdHMgdXNlIHRoaXMgdG8gY2hlY2sg dGhhdCB0aGUgY3Jvc3MtdHlwZSBwZ19hbW9wCisgKiBlbnRyaWVzIGluIGdpc3RfaW50ezIsNCw4 fV9vcHMgc3RheSBpbiBhZ3JlZW1lbnQgd2l0aCB0aGUgQyBkaXNwYXRjaC4KKyAqLworUEdfRlVO Q1RJT05fSU5GT19WMShnYnRfaW50X2Nyb3NzdHlwZV9zdWJ0eXBlcyk7CitEYXR1bQorZ2J0X2lu dF9jcm9zc3R5cGVfc3VidHlwZXMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRl eHQgKmZ1bmNjdHg7CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCQlmdW5jY3R4ID0gU1JG X0ZJUlNUQ0FMTF9JTklUKCk7CisKKwlmdW5jY3R4ID0gU1JGX1BFUkNBTExfU0VUVVAoKTsKKwor CWlmIChmdW5jY3R4LT5jYWxsX2NudHIgPCBsZW5ndGhvZihnYnRfaW50X2Nyb3NzdHlwZV90YWJs ZSkpCisJeworCQlPaWQJCQlzdWJ0eXBlID0gZ2J0X2ludF9jcm9zc3R5cGVfdGFibGVbZnVuY2N0 eC0+Y2FsbF9jbnRyXS5zdWJ0eXBlOworCisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBPYmpl Y3RJZEdldERhdHVtKHN1YnR5cGUpKTsKKwl9CisKKwlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7 Cit9CisKKy8qCisgKiBDcm9zcy10eXBlIGNvbnNpc3RlbnQgbWV0aG9kIGZvciB0aGUgaW50ZWdl ciBvcGNsYXNzZXMuCisgKgorICogVGhlIGtleSByYW5nZSBbbG93ZXIsIHVwcGVyXSBhbmQgdGhl IHF1ZXJ5IHZhbHVlIGFyZSBhbGwgY29tcGFyZWQgYXMgaW50NjQuCisgKiBUaGUgc3RyYXRlZ3kg bG9naWMgbWlycm9ycyB0aGUgc2FtZS10eXBlIHBhdGggaW4gZ2J0X251bV9jb25zaXN0ZW50KCk6 IHRoZQorICogcXVlcnkgdmFsdWUga2VlcHMgaXRzIG93biB3aWR0aCAobm8gbmFycm93aW5nIHRv IHRoZSBpbmRleGVkIGNvbHVtbiB0eXBlKSwKKyAqIHNvIG91dC1vZi1yYW5nZSBjb25zdGFudHMg YmVoYXZlIGFjY29yZGluZyB0byBub3JtYWwgaW50ZWdlciBjb21wYXJpc29uLgorICovCitib29s CitnYnRfaW50X2NvbnNpc3RlbnRfeChpbnQ2NCBsb3dlciwgaW50NjQgdXBwZXIsIERhdHVtIHF1 ZXJ5LCBPaWQgc3VidHlwZSwKKwkJCQkJIGNvbnN0IFN0cmF0ZWd5TnVtYmVyICpzdHJhdGVneSwg Ym9vbCBpc19sZWFmKQoreworCWludDY0CQlxID0gZ2J0X2ludF9xdWVyeV90b19pbnQ2NChxdWVy eSwgc3VidHlwZSk7CisKKwlzd2l0Y2ggKCpzdHJhdGVneSkKKwl7CisJCWNhc2UgQlRMZXNzRXF1 YWxTdHJhdGVneU51bWJlcjoKKwkJCS8qIHNvbWUgayBpbiBbbG93ZXIsdXBwZXJdIGhhcyBrIDw9 IHEgaWZmIGxvd2VyIDw9IHEgKi8KKwkJCXJldHVybiBsb3dlciA8PSBxOworCQljYXNlIEJUTGVz c1N0cmF0ZWd5TnVtYmVyOgorCQkJLyogbGVhZjoga2V5IDwgcS4gaW50ZXJuYWw6IGxvd2VyIDw9 IHEgKGxvb3NlKSAqLworCQkJcmV0dXJuIGlzX2xlYWYgPyAobG93ZXIgPCBxKSA6IChsb3dlciA8 PSBxKTsKKwkJY2FzZSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXI6CisJCQlpZiAoaXNfbGVhZikKKwkJ CQlyZXR1cm4gbG93ZXIgPT0gcTsKKwkJCS8qIGludGVybmFsOiBsb3dlciA8PSBxIDw9IHVwcGVy ICovCisJCQlyZXR1cm4gKGxvd2VyIDw9IHEgJiYgcSA8PSB1cHBlcik7CisJCWNhc2UgQlRHcmVh dGVyU3RyYXRlZ3lOdW1iZXI6CisJCQkvKiBsZWFmOiBrZXkgPiBxLiBpbnRlcm5hbDogdXBwZXIg Pj0gcSAobG9vc2UpICovCisJCQlyZXR1cm4gaXNfbGVhZiA/ICh1cHBlciA+IHEpIDogKHVwcGVy ID49IHEpOworCQljYXNlIEJUR3JlYXRlckVxdWFsU3RyYXRlZ3lOdW1iZXI6CisJCQlyZXR1cm4g dXBwZXIgPj0gcTsKKwkJY2FzZSBCdHJlZUdpc3ROb3RFcXVhbFN0cmF0ZWd5TnVtYmVyOgorCQkJ cmV0dXJuICEobG93ZXIgPT0gcSAmJiB1cHBlciA9PSBxKTsKKwkJZGVmYXVsdDoKKwkJCXJldHVy biBmYWxzZTsKKwl9Cit9CisKIAogLyoKICAqIFRoZSBHaVNUIGRpc3RhbmNlIG1ldGhvZCAoZm9y IEtOTi1HaXN0KQogICovCiAKIGZsb2F0OApAQCAtMzMxLDEyICs0NjUsMzggQEAgZ2J0X251bV9k aXN0YW5jZShjb25zdCBHQlRfTlVNS0VZX1IgKmtleSwKIAllbHNlCiAJCXJldHZhbCA9IDAuMDsK IAogCXJldHVybiByZXR2YWw7CiB9CiAKKy8qCisgKiBDcm9zcy10eXBlIGRpc3RhbmNlIG1ldGhv ZCBmb3IgdGhlIGludGVnZXIgb3BjbGFzc2VzLgorICoKKyAqIFRoZSBkaXN0YW5jZSBmcm9tIHRo ZSBxdWVyeSB2YWx1ZSB0byB0aGUga2V5IHJhbmdlIGlzIGNvbXB1dGVkIGluIGludDY0IGFuZAor ICogcmV0dXJuZWQgYXMgYSBmbG9hdDgsIG1hdGNoaW5nIHRoZSBzYW1lLXR5cGUgaW50ZWdlciBk aXN0YW5jZSBiZWhhdmlvdXIuCisgKgorICogTm90ZSB0aGF0IHRoZSBzdWJ0cmFjdGlvbiBpcyBw ZXJmb3JtZWQgaW4gZmxvYXQ4LCBzbyB3aGVuIHRoZSBrZXkgYm91bmQgYW5kCisgKiB0aGUgcXVl cnkgdmFsdWUgZGlmZmVyIGJ5IG1vcmUgdGhhbiAyXjUzIHRoZSByZXR1cm5lZCBkaXN0YW5jZSBs b3NlcworICogcHJlY2lzaW9uLiBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgb3JkZXJpbmcgb2YgS05O IHJlc3VsdHMgdGhhdCBhcmUgbmVhcmx5CisgKiBlcXVpZGlzdGFudCBhdCB0aGF0IHNjYWxlOyBp dCBuZXZlciBjaGFuZ2VzIHdoaWNoIHJvd3MgYXJlIHJldHVybmVkLgorICovCitmbG9hdDgKK2di dF9pbnRfZGlzdGFuY2VfeChpbnQ2NCBsb3dlciwgaW50NjQgdXBwZXIsIERhdHVtIHF1ZXJ5LCBP aWQgc3VidHlwZSkKK3sKKwlpbnQ2NAkJcSA9IGdidF9pbnRfcXVlcnlfdG9faW50NjQocXVlcnks IHN1YnR5cGUpOworCisJLyogcXVlcnkgYmVsb3cgdGhlIHJhbmdlOiBkaXN0YW5jZSB0byBsb3dl ciBib3VuZCAqLworCWlmIChsb3dlciA+PSBxKQorCQlyZXR1cm4gZmFicygoZmxvYXQ4KSBsb3dl ciAtIChmbG9hdDgpIHEpOworCS8qIHF1ZXJ5IGFib3ZlIHRoZSByYW5nZTogZGlzdGFuY2UgdG8g dXBwZXIgYm91bmQgKi8KKwlpZiAodXBwZXIgPD0gcSkKKwkJcmV0dXJuIGZhYnMoKGZsb2F0OCkg dXBwZXIgLSAoZmxvYXQ4KSBxKTsKKwkvKiBxdWVyeSBpbnNpZGUgdGhlIHJhbmdlICovCisJcmV0 dXJuIDAuMDsKK30KKwogCiBHSVNUX1NQTElUVkVDICoKIGdidF9udW1fcGlja3NwbGl0KGNvbnN0 IEdpc3RFbnRyeVZlY3RvciAqZW50cnl2ZWMsIEdJU1RfU1BMSVRWRUMgKnYsCiAJCQkJICBjb25z dCBnYnRyZWVfbmluZm8gKnRpbmZvLCBGbWdySW5mbyAqZmxpbmZvKQogewogCU9mZnNldE51bWJl ciBpLApkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3V0aWxzX251bS5oIGIv Y29udHJpYi9idHJlZV9naXN0L2J0cmVlX3V0aWxzX251bS5oCmluZGV4IDUzZTQ3N2Q4YjFlLi5k Mzc4YjBkZjM3ZSAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3V0aWxzX251 bS5oCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV91dGlsc19udW0uaApAQCAtOTUsMTIg Kzk1LDI4IEBAIGV4dGVybiBib29sIGdidF9udW1fY29uc2lzdGVudChjb25zdCBHQlRfTlVNS0VZ X1IgKmtleSwgY29uc3Qgdm9pZCAqcXVlcnksCiAJCQkJCQkJICAgY29uc3QgU3RyYXRlZ3lOdW1i ZXIgKnN0cmF0ZWd5LCBib29sIGlzX2xlYWYsCiAJCQkJCQkJICAgY29uc3QgZ2J0cmVlX25pbmZv ICp0aW5mbywgRm1nckluZm8gKmZsaW5mbyk7CiAKIGV4dGVybiBmbG9hdDggZ2J0X251bV9kaXN0 YW5jZShjb25zdCBHQlRfTlVNS0VZX1IgKmtleSwgY29uc3Qgdm9pZCAqcXVlcnksCiAJCQkJCQkJ ICAgYm9vbCBpc19sZWFmLCBjb25zdCBnYnRyZWVfbmluZm8gKnRpbmZvLCBGbWdySW5mbyAqZmxp bmZvKTsKIAorLyoKKyAqIENyb3NzLXR5cGUgY29uc2lzdGVudC9kaXN0YW5jZSBoZWxwZXJzIGZv ciB0aGUgaW50ZWdlciBvcGNsYXNzZXMKKyAqIChpbnQyL2ludDQvaW50OCkuICBBbGwgdGhyZWUg aW50ZWdlciB3aWR0aHMgcHJvbW90ZSBsb3NzbGVzc2x5IHRvIGludDY0LCBzbworICogYSBjcm9z cy10eXBlIHF1ZXJ5IHJlZHVjZXMgdG8gYSBwbGFpbiBpbnQ2NCBjb21wYXJpc29uIGFuZCB0aGVy ZSBpcyBubyBuZWVkCisgKiBmb3IgdGhlIHBlci10eXBlIGNhbGxiYWNrIG1hY2hpbmVyeSB0aGUg c2FtZS10eXBlIHBhdGggdXNlcy4gIFRoZXNlIGhlbHBlcnMKKyAqIGFyZSBkZWxpYmVyYXRlbHkg aW50ZWdlci1zcGVjaWZpYyByYXRoZXIgdGhhbiBhIGdlbmVyYWwgY3Jvc3MtdHlwZSBmcmFtZXdv cms7CisgKiBvdGhlciB0eXBlIGZhbWlsaWVzIHNob3VsZCBncm93IHRoZWlyIG93biBoZWxwZXJz IHNoYXBlZCB0byB0aGVpciBuZWVkcyBhcworICogdGhlIG5lZWQgYXJpc2VzLgorICovCitleHRl cm4gYm9vbCBnYnRfaW50X2NvbnNpc3RlbnRfeChpbnQ2NCBsb3dlciwgaW50NjQgdXBwZXIsCisJ CQkJCQkJCSBEYXR1bSBxdWVyeSwgT2lkIHN1YnR5cGUsCisJCQkJCQkJCSBjb25zdCBTdHJhdGVn eU51bWJlciAqc3RyYXRlZ3ksIGJvb2wgaXNfbGVhZik7CisKK2V4dGVybiBmbG9hdDggZ2J0X2lu dF9kaXN0YW5jZV94KGludDY0IGxvd2VyLCBpbnQ2NCB1cHBlciwKKwkJCQkJCQkJIERhdHVtIHF1 ZXJ5LCBPaWQgc3VidHlwZSk7CisKIGV4dGVybiBHSVNUX1NQTElUVkVDICpnYnRfbnVtX3BpY2tz cGxpdChjb25zdCBHaXN0RW50cnlWZWN0b3IgKmVudHJ5dmVjLCBHSVNUX1NQTElUVkVDICp2LAog CQkJCQkJCQkJCWNvbnN0IGdidHJlZV9uaW5mbyAqdGluZm8sIEZtZ3JJbmZvICpmbGluZm8pOwog CiBleHRlcm4gR0lTVEVOVFJZICpnYnRfbnVtX2NvbXByZXNzKEdJU1RFTlRSWSAqZW50cnksIGNv bnN0IGdidHJlZV9uaW5mbyAqdGluZm8pOwogCiBleHRlcm4gR0lTVEVOVFJZICpnYnRfbnVtX2Zl dGNoKEdJU1RFTlRSWSAqZW50cnksIGNvbnN0IGdidHJlZV9uaW5mbyAqdGluZm8pOwpkaWZmIC0t Z2l0IGEvY29udHJpYi9idHJlZV9naXN0L21lc29uLmJ1aWxkIGIvY29udHJpYi9idHJlZV9naXN0 L21lc29uLmJ1aWxkCmluZGV4IDJiMWE1NDYzMjg5Li5jNjQwY2I3ZDhkMiAxMDA2NDQKLS0tIGEv Y29udHJpYi9idHJlZV9naXN0L21lc29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9t ZXNvbi5idWlsZApAQCAtNDksMTIgKzQ5LDEzIEBAIGluc3RhbGxfZGF0YSgKICAgJ2J0cmVlX2dp c3QtLTEuNC0tMS41LnNxbCcsCiAgICdidHJlZV9naXN0LS0xLjUtLTEuNi5zcWwnLAogICAnYnRy ZWVfZ2lzdC0tMS42LS0xLjcuc3FsJywKICAgJ2J0cmVlX2dpc3QtLTEuNy0tMS44LnNxbCcsCiAg ICdidHJlZV9naXN0LS0xLjgtLTEuOS5zcWwnLAogICAnYnRyZWVfZ2lzdC0tMS45LnNxbCcsCisg ICdidHJlZV9naXN0LS0xLjktLTEuMTAuc3FsJywKICAga3dhcmdzOiBjb250cmliX2RhdGFfYXJn cywKICkKIAogdGVzdHMgKz0gewogICAnbmFtZSc6ICdidHJlZV9naXN0JywKICAgJ3NkJzogbWVz b24uY3VycmVudF9zb3VyY2VfZGlyKCksCkBAIC04OSwxMCArOTAsMTEgQEAgdGVzdHMgKz0gewog ICAgICAgJ3V1aWQnLAogICAgICAgJ25vdF9lcXVhbCcsCiAgICAgICAnZW51bScsCiAgICAgICAn Ym9vbCcsCiAgICAgICAncGFydGl0aW9ucycsCiAgICAgICAnc3RyYXRudW0nLAorICAgICAgJ2lu dF9jcm9zc3R5cGUnLAogICAgICAgJ3dpdGhvdXRfb3ZlcmxhcHMnLAogICAgIF0sCiAgIH0sCiB9 Ci0tIAoyLjUxLjAKCg== --6a2de937_431bd7b7_2e1 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-Add-tests-for-cross-type-operators-for-GiST-indexes.patch" RnJvbSBlNjIwNDEwODIzOWEyNDU4YmUxMWFhMjI4NmVkZDdiZDAyOWEzNjgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgTmVzdG9yb3YgPGFsZXhhbmRlcm5zdEBnbWFp bC5jb20+CkRhdGU6IFRodSwgNCBKdW4gMjAyNiAwMDowODoyNyArMDIwMApTdWJqZWN0OiBbUEFU Q0hdIEFkZCB0ZXN0cyBmb3IgY3Jvc3MtdHlwZSBvcGVyYXRvcnMgZm9yIEdpU1QgaW5kZXhlcwoK LS0tCiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50X2Nyb3NzdHlwZS5vdXQgfCA1Njgg KysrKysrKysrKysrKysrKysrCiBjb250cmliL2J0cmVlX2dpc3Qvc3FsL2ludF9jcm9zc3R5cGUu c3FsICAgICAgfCAyMzYgKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgODA0IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50X2Ny b3NzdHlwZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2J0cmVlX2dpc3Qvc3FsL2lu dF9jcm9zc3R5cGUuc3FsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVk L2ludF9jcm9zc3R5cGUub3V0IGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludF9jcm9z c3R5cGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZDJiOTBi ZDNmNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnRf Y3Jvc3N0eXBlLm91dApAQCAtMCwwICsxLDU2OCBAQAorLS0gQ3Jvc3MtdHlwZSBvcGVyYXRvciBz dXBwb3J0IGZvciBpbnQyL2ludDQvaW50OCBpbiBHaVNULgorLS0KKy0tIFZlcmlmaWVzIHRoYXQg KGEpIHRoZSBjcm9zcy10eXBlIEItdHJlZS1zdHlsZSBvcGVyYXRvcnMgcmVnaXN0ZXJlZCBpbgor LS0gZ2lzdF9pbnR7Miw0LDh9X29wcyBtYXRjaCB0aGUgcmVzdWx0cyBvZiBzZXFzY2FucyB1c2lu ZyB0aGUgc2FtZSBvcGVyYXRvcgorLS0gZXhwcmVzc2lvbnMsIChiKSB0aGUgS05OIDwtPiBvcGVy YXRvciB3b3JrcyBhY3Jvc3MgdHlwZXMgYW5kIHVzZXMgdGhlCistLSBpbmRleCwgYW5kIChjKSB2 YWx1ZXMgb3V0c2lkZSB0aGUgc21hbGxlciBzdWJ0eXBlJ3MgcmFuZ2UgYXJlIGhhbmRsZWQKKy0t IGFjY29yZGluZyB0byBub3JtYWwgY29tcGFyaXNvbiBzZW1hbnRpY3MsIHdpdGhvdXQgbmFycm93 aW5nIG9yIGVycm9yaW5nLgorLS0KKy0tIENhdGFsb2cgaW52YXJpYW50OiB0aGUgY3Jvc3MtdHlw ZSBwZ19hbW9wIGVudHJpZXMgaW4gZ2lzdF9pbnR7Miw0LDh9X29wcyBtdXN0CistLSBhZ3JlZSwg aW4gYm90aCBkaXJlY3Rpb25zLCB3aXRoIHdoYXQgdGhlIEMgY3Jvc3MtdHlwZSBkaXNwYXRjaCBj YW4gaGFuZGxlLgorLS0gVGhlIHNldCBvZiBzdXBwb3J0ZWQgcXVlcnkgc3VidHlwZXMgaXMgcmVh ZCBmcm9tIHRoZSBDIHNpZGUgdmlhCistLSBnYnRfaW50X2Nyb3NzdHlwZV9zdWJ0eXBlcygpLCBz byB0aGVyZSBpcyBubyBoYW5kLW1haW50YWluZWQgc2Vjb25kIGNvcHkgb2YKKy0tIHRoZSBsaXN0 IGhlcmU6IHJlZ2lzdGVyaW5nIGEgcGdfYW1vcCByb3cgd2hvc2Ugc3VidHlwZSB0aGUgZGlzcGF0 Y2ggZG9lcyBub3QKKy0tIGhhbmRsZSAob3IgZHJvcHBpbmcgYSBkaXNwYXRjaCBlbnRyeSB3aGls ZSBpdHMgcGdfYW1vcCByb3dzIHJlbWFpbiwgb3IgdmljZQorLS0gdmVyc2EpIHNob3dzIHVwIGFz IGEgZGlmZiBiZWxvdy4gQ3Jvc3MtdHlwZSBwZ19hbXByb2Mgcm93cyBtdXN0IGFsc28gc3RheQor LS0gYWJzZW50LCBzaW5jZSB0aGUgZGlzcGF0Y2ggcmV1c2VzIHRoZSBzYW1lLXR5cGUgc3VwcG9y dCBmdW5jdGlvbnMuCistLQorV0lUSCBkaXNwYXRjaF9zdWJ0eXBlcyh0eXApIEFTICgKKyAgICBT RUxFQ1Qgcy5zdWJ0eXBlOjpyZWd0eXBlCisgICAgRlJPTSBnYnRfaW50X2Nyb3NzdHlwZV9zdWJ0 eXBlcygpIEFTIHMoc3VidHlwZSkKKyksCitnaXN0X2ludF9vcGNsYXNzZXMob3BmYW1pbHksIGlu ZGV4dHlwZSkgQVMgKAorICAgIFNFTEVDVCBvcGMub3BjbmFtZTo6dGV4dCwgb3BjLm9wY2ludHlw ZTo6cmVndHlwZQorICAgIEZST00gcGdfb3BjbGFzcyBvcGMKKyAgICAgICAgIEpPSU4gcGdfYW0g YW0gT04gYW0ub2lkID0gb3BjLm9wY21ldGhvZAorICAgIFdIRVJFIGFtLmFtbmFtZSA9ICdnaXN0 JworICAgICAgQU5EIG9wYy5vcGNuYW1lIElOICgnZ2lzdF9pbnQyX29wcycsICdnaXN0X2ludDRf b3BzJywgJ2dpc3RfaW50OF9vcHMnKQorKSwKK2V4cGVjdGVkX3BhaXJzKG9wZmFtaWx5LCBsZWZ0 dHlwZSwgcmlnaHR0eXBlKSBBUyAoCisgICAgU0VMRUNUIG9jLm9wZmFtaWx5LCBvYy5pbmRleHR5 cGUsIGRzLnR5cAorICAgIEZST00gZ2lzdF9pbnRfb3BjbGFzc2VzIG9jCisgICAgICAgICBDUk9T UyBKT0lOIGRpc3BhdGNoX3N1YnR5cGVzIGRzCisgICAgV0hFUkUgZHMudHlwIDw+IG9jLmluZGV4 dHlwZQorKSwKK2V4cGVjdGVkX2Ftb3Aob3BmYW1pbHksIGxlZnR0eXBlLCByaWdodHR5cGUsIHN0 cmF0ZWd5LCBwdXJwb3NlKSBBUyAoCisgICAgU0VMRUNUIG9wZmFtaWx5LCBsZWZ0dHlwZSwgcmln aHR0eXBlLCBzdHJhdGVneSwgcHVycG9zZQorICAgIEZST00gZXhwZWN0ZWRfcGFpcnMKKyAgICAg ICAgIENST1NTIEpPSU4gKFZBTFVFUworICAgICAgICAgICAgICgxLCAncycpLCAoMiwgJ3MnKSwg KDMsICdzJyksICg0LCAncycpLAorICAgICAgICAgICAgICg1LCAncycpLCAoNiwgJ3MnKSwgKDE1 LCAnbycpCisgICAgICAgICApIEFTIHN0cmF0ZWd5X3B1cnBvc2VzKHN0cmF0ZWd5LCBwdXJwb3Nl KQorKSwKK2FjdHVhbF9hbW9wIEFTICgKKyAgICBTRUxFQ1Qgb3BmLm9wZm5hbWU6OnRleHQgQVMg b3BmYW1pbHksCisgICAgICAgICAgIGFtb3AuYW1vcGxlZnR0eXBlOjpyZWd0eXBlIEFTIGxlZnR0 eXBlLAorICAgICAgICAgICBhbW9wLmFtb3ByaWdodHR5cGU6OnJlZ3R5cGUgQVMgcmlnaHR0eXBl LAorICAgICAgICAgICBhbW9wLmFtb3BzdHJhdGVneTo6aW50IEFTIHN0cmF0ZWd5LAorICAgICAg ICAgICBhbW9wLmFtb3BwdXJwb3NlOjp0ZXh0IEFTIHB1cnBvc2UKKyAgICBGUk9NIHBnX2Ftb3Ag YW1vcAorICAgICAgICAgSk9JTiBwZ19vcGZhbWlseSBvcGYgT04gb3BmLm9pZCA9IGFtb3AuYW1v cGZhbWlseQorICAgICAgICAgSk9JTiBwZ19hbSBhbSBPTiBhbS5vaWQgPSBvcGYub3BmbWV0aG9k CisgICAgV0hFUkUgYW0uYW1uYW1lID0gJ2dpc3QnCisgICAgICBBTkQgb3BmLm9wZm5hbWUgSU4g KCdnaXN0X2ludDJfb3BzJywgJ2dpc3RfaW50NF9vcHMnLCAnZ2lzdF9pbnQ4X29wcycpCisgICAg ICBBTkQgYW1vcC5hbW9wbGVmdHR5cGUgPD4gYW1vcC5hbW9wcmlnaHR0eXBlCispCitTRUxFQ1Qg KgorRlJPTSAoCisgICAgU0VMRUNUICdtaXNzaW5nIGZyb20gcGdfYW1vcCcgQVMgc3RhdHVzLCAq CisgICAgRlJPTSAoU0VMRUNUICogRlJPTSBleHBlY3RlZF9hbW9wIEVYQ0VQVCBTRUxFQ1QgKiBG Uk9NIGFjdHVhbF9hbW9wKSBtaXNzaW5nCisgICAgVU5JT04gQUxMCisgICAgU0VMRUNUICd1bmV4 cGVjdGVkIGluIHBnX2Ftb3AnIEFTIHN0YXR1cywgKgorICAgIEZST00gKFNFTEVDVCAqIEZST00g YWN0dWFsX2Ftb3AgRVhDRVBUIFNFTEVDVCAqIEZST00gZXhwZWN0ZWRfYW1vcCkgdW5leHBlY3Rl ZAorKSBkaWZmCitPUkRFUiBCWSBzdGF0dXMsIG9wZmFtaWx5LCBsZWZ0dHlwZTo6dGV4dCwgcmln aHR0eXBlOjp0ZXh0LCBzdHJhdGVneSwgcHVycG9zZTsKKyBzdGF0dXMgfCBvcGZhbWlseSB8IGxl ZnR0eXBlIHwgcmlnaHR0eXBlIHwgc3RyYXRlZ3kgfCBwdXJwb3NlIAorLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisoMCByb3dz KQorCitTRUxFQ1Qgb3BmLm9wZm5hbWUgQVMgb3BmYW1pbHksCisgICAgICAgYW1wcm9jLmFtcHJv Y2xlZnR0eXBlOjpyZWd0eXBlIEFTIGxlZnR0eXBlLAorICAgICAgIGFtcHJvYy5hbXByb2NyaWdo dHR5cGU6OnJlZ3R5cGUgQVMgcmlnaHR0eXBlLAorICAgICAgIGFtcHJvYy5hbXByb2NudW0gQVMg cHJvY251bSwKKyAgICAgICBhbXByb2MuYW1wcm9jOjpyZWdwcm9jIEFTIHByb2MKK0ZST00gcGdf YW1wcm9jIGFtcHJvYworICAgICBKT0lOIHBnX29wZmFtaWx5IG9wZiBPTiBvcGYub2lkID0gYW1w cm9jLmFtcHJvY2ZhbWlseQorICAgICBKT0lOIHBnX2FtIGFtIE9OIGFtLm9pZCA9IG9wZi5vcGZt ZXRob2QKK1dIRVJFIGFtLmFtbmFtZSA9ICdnaXN0JworICBBTkQgb3BmLm9wZm5hbWUgSU4gKCdn aXN0X2ludDJfb3BzJywgJ2dpc3RfaW50NF9vcHMnLCAnZ2lzdF9pbnQ4X29wcycpCisgIEFORCBh bXByb2MuYW1wcm9jbGVmdHR5cGUgPD4gYW1wcm9jLmFtcHJvY3JpZ2h0dHlwZQorT1JERVIgQlkg b3BmLm9wZm5hbWUsCisgICAgICAgICBhbXByb2MuYW1wcm9jbGVmdHR5cGU6OnJlZ3R5cGU6OnRl eHQsCisgICAgICAgICBhbXByb2MuYW1wcm9jcmlnaHR0eXBlOjpyZWd0eXBlOjp0ZXh0LAorICAg ICAgICAgYW1wcm9jLmFtcHJvY251bSwKKyAgICAgICAgIGFtcHJvYy5hbXByb2M6OnJlZ3Byb2M6 OnRleHQ7Cisgb3BmYW1pbHkgfCBsZWZ0dHlwZSB8IHJpZ2h0dHlwZSB8IHByb2NudW0gfCBwcm9j IAorLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0KKygw IHJvd3MpCisKK0NSRUFURSBUQUJMRSBjdF9pMiAoYSBpbnQyKTsKK0NSRUFURSBUQUJMRSBjdF9p NCAoYSBpbnQ0KTsKK0NSRUFURSBUQUJMRSBjdF9pOCAoYSBpbnQ4KTsKK0lOU0VSVCBJTlRPIGN0 X2kyIFNFTEVDVCBnOjppbnQyIEZST00gZ2VuZXJhdGVfc2VyaWVzKC0xMDAsIDEwMCkgZzsKK0lO U0VSVCBJTlRPIGN0X2k0IFNFTEVDVCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKC0xMDAsIDEwMCkg ZzsKK0lOU0VSVCBJTlRPIGN0X2k4IFNFTEVDVCBnOjppbnQ4IEZST00gZ2VuZXJhdGVfc2VyaWVz KC0xMDAsIDEwMCkgZzsKKy0tIEFkZCBzb21lIHZhbHVlcyB0aGF0IGFyZSByZXByZXNlbnRhYmxl IG9ubHkgaW4gd2lkZXIgdHlwZXMsIHRvIGV4ZXJjaXNlCistLSB0aGUgcGF0aCB3aGVyZSB0aGUg Y3Jvc3MtdHlwZSBxdWVyeSBjb25zdGFudCBpcyBvdXQgb2YgcmFuZ2Ugb2YgdGhlIGtleQorLS0g dHlwZS4KK0lOU0VSVCBJTlRPIGN0X2k0IFZBTFVFUyAoMTAwMDAwKSwgKC0xMDAwMDApOworSU5T RVJUIElOVE8gY3RfaTggVkFMVUVTICg1MDAwMDAwMDAwKSwgKC01MDAwMDAwMDAwKTsKK0NSRUFU RSBJTkRFWCBjdF9pMl9pZHggT04gY3RfaTIgVVNJTkcgZ2lzdCAoYSk7CitDUkVBVEUgSU5ERVgg Y3RfaTRfaWR4IE9OIGN0X2k0IFVTSU5HIGdpc3QgKGEpOworQ1JFQVRFIElOREVYIGN0X2k4X2lk eCBPTiBjdF9pOCBVU0lORyBnaXN0IChhKTsKK0FOQUxZWkUgY3RfaTI7CitBTkFMWVpFIGN0X2k0 OworQU5BTFlaRSBjdF9pODsKK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsKK1NFVCBlbmFibGVf Yml0bWFwc2NhbiA9IG9mZjsKKy0tIGludDIga2V5IHggaW50NCBxdWVyeQorU0VMRUNUIGNvdW50 KCopIEZST00gY3RfaTIgV0hFUkUgYSA8ICA1MDo6aW50NDsKKyBjb3VudCAKKy0tLS0tLS0KKyAg IDE1MAorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pMiBXSEVSRSBhIDw9IDUw OjppbnQ0OworIGNvdW50IAorLS0tLS0tLQorICAgMTUxCisoMSByb3cpCisKK1NFTEVDVCBjb3Vu dCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEgPSAgNTA6OmludDQ7CisgY291bnQgCistLS0tLS0tCisg ICAgIDEKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTIgV0hFUkUgYSA+PSA1 MDo6aW50NDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICA1MQorKDEgcm93KQorCitTRUxFQ1QgY291 bnQoKikgRlJPTSBjdF9pMiBXSEVSRSBhID4gIDUwOjppbnQ0OworIGNvdW50IAorLS0tLS0tLQor ICAgIDUwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEgPD4g NTA6OmludDQ7CisgY291bnQgCistLS0tLS0tCisgICAyMDAKKygxIHJvdykKKworLS0gcXVlcnkg b3V0IG9mIGludDIgcmFuZ2U6IG1hdGNoZXMgbm90aGluZyBmb3IgPSwgZXZlcnl0aGluZyBmb3Ig PD4KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEgPSAgMTAwMDAwOjppbnQ0Owor IGNvdW50IAorLS0tLS0tLQorICAgICAwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9N IGN0X2kyIFdIRVJFIGEgPD4gMTAwMDAwOjppbnQ0OworIGNvdW50IAorLS0tLS0tLQorICAgMjAx CisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEgPCAgMTAwMDAw OjppbnQ0OworIGNvdW50IAorLS0tLS0tLQorICAgMjAxCisoMSByb3cpCisKK1NFTEVDVCBjb3Vu dCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEgPiAgMTAwMDAwOjppbnQ0OworIGNvdW50IAorLS0tLS0t LQorICAgICAwCisoMSByb3cpCisKKy0tIGludDIga2V5IHggaW50OCBxdWVyeQorU0VMRUNUIGNv dW50KCopIEZST00gY3RfaTIgV0hFUkUgYSA8ICA1MDo6aW50ODsKKyBjb3VudCAKKy0tLS0tLS0K KyAgIDE1MAorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pMiBXSEVSRSBhIDw9 IDUwOjppbnQ4OworIGNvdW50IAorLS0tLS0tLQorICAgMTUxCisoMSByb3cpCisKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEgPSAgNTA6OmludDg7CisgY291bnQgCistLS0tLS0t CisgICAgIDEKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTIgV0hFUkUgYSA+ PSA1MDo6aW50ODsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICA1MQorKDEgcm93KQorCitTRUxFQ1Qg Y291bnQoKikgRlJPTSBjdF9pMiBXSEVSRSBhID4gIDUwOjppbnQ4OworIGNvdW50IAorLS0tLS0t LQorICAgIDUwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEg PD4gNTA6OmludDg7CisgY291bnQgCistLS0tLS0tCisgICAyMDAKKygxIHJvdykKKworU0VMRUNU IGNvdW50KCopIEZST00gY3RfaTIgV0hFUkUgYSA9ICA1MDAwMDAwMDAwOjppbnQ4OworIGNvdW50 IAorLS0tLS0tLQorICAgICAwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2ky IFdIRVJFIGEgPCAgNTAwMDAwMDAwMDo6aW50ODsKKyBjb3VudCAKKy0tLS0tLS0KKyAgIDIwMQor KDEgcm93KQorCistLSBpbnQ0IGtleSB4IGludDIgcXVlcnkKK1NFTEVDVCBjb3VudCgqKSBGUk9N IGN0X2k0IFdIRVJFIGEgPCAgNTA6OmludDI7CisgY291bnQgCistLS0tLS0tCisgICAxNTEKKygx IHJvdykKKworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTQgV0hFUkUgYSA8PSA1MDo6aW50MjsK KyBjb3VudCAKKy0tLS0tLS0KKyAgIDE1MgorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgRlJP TSBjdF9pNCBXSEVSRSBhID0gIDUwOjppbnQyOworIGNvdW50IAorLS0tLS0tLQorICAgICAxCiso MSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k0IFdIRVJFIGEgPj0gNTA6OmludDI7 CisgY291bnQgCistLS0tLS0tCisgICAgNTIKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEZS T00gY3RfaTQgV0hFUkUgYSA+ICA1MDo6aW50MjsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICA1MQor KDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pNCBXSEVSRSBhIDw+IDUwOjppbnQy OworIGNvdW50IAorLS0tLS0tLQorICAgMjAyCisoMSByb3cpCisKKy0tIGludDQga2V5IHggaW50 OCBxdWVyeQorU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTQgV0hFUkUgYSA8ICA1MDo6aW50ODsK KyBjb3VudCAKKy0tLS0tLS0KKyAgIDE1MQorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgRlJP TSBjdF9pNCBXSEVSRSBhIDw9IDUwOjppbnQ4OworIGNvdW50IAorLS0tLS0tLQorICAgMTUyCiso MSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k0IFdIRVJFIGEgPSAgNTA6OmludDg7 CisgY291bnQgCistLS0tLS0tCisgICAgIDEKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEZS T00gY3RfaTQgV0hFUkUgYSA+PSA1MDo6aW50ODsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICA1Mgor KDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pNCBXSEVSRSBhID4gIDUwOjppbnQ4 OworIGNvdW50IAorLS0tLS0tLQorICAgIDUxCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBG Uk9NIGN0X2k0IFdIRVJFIGEgPD4gNTA6OmludDg7CisgY291bnQgCistLS0tLS0tCisgICAyMDIK KygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTQgV0hFUkUgYSA9ICA1MDAwMDAw MDAwOjppbnQ4OworIGNvdW50IAorLS0tLS0tLQorICAgICAwCisoMSByb3cpCisKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGN0X2k0IFdIRVJFIGEgPCAgNTAwMDAwMDAwMDo6aW50ODsKKyBjb3VudCAK Ky0tLS0tLS0KKyAgIDIwMworKDEgcm93KQorCistLSBpbnQ4IGtleSB4IGludDIgcXVlcnkKK1NF TEVDVCBjb3VudCgqKSBGUk9NIGN0X2k4IFdIRVJFIGEgPCAgNTA6OmludDI7CisgY291bnQgCist LS0tLS0tCisgICAxNTEKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTggV0hF UkUgYSA8PSA1MDo6aW50MjsKKyBjb3VudCAKKy0tLS0tLS0KKyAgIDE1MgorKDEgcm93KQorCitT RUxFQ1QgY291bnQoKikgRlJPTSBjdF9pOCBXSEVSRSBhID0gIDUwOjppbnQyOworIGNvdW50IAor LS0tLS0tLQorICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k4IFdI RVJFIGEgPj0gNTA6OmludDI7CisgY291bnQgCistLS0tLS0tCisgICAgNTIKKygxIHJvdykKKwor U0VMRUNUIGNvdW50KCopIEZST00gY3RfaTggV0hFUkUgYSA+ICA1MDo6aW50MjsKKyBjb3VudCAK Ky0tLS0tLS0KKyAgICA1MQorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pOCBX SEVSRSBhIDw+IDUwOjppbnQyOworIGNvdW50IAorLS0tLS0tLQorICAgMjAyCisoMSByb3cpCisK Ky0tIGludDgga2V5IHggaW50NCBxdWVyeQorU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTggV0hF UkUgYSA8ICA1MDo6aW50NDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgIDE1MQorKDEgcm93KQorCitT RUxFQ1QgY291bnQoKikgRlJPTSBjdF9pOCBXSEVSRSBhIDw9IDUwOjppbnQ0OworIGNvdW50IAor LS0tLS0tLQorICAgMTUyCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k4IFdI RVJFIGEgPSAgNTA6OmludDQ7CisgY291bnQgCistLS0tLS0tCisgICAgIDEKKygxIHJvdykKKwor U0VMRUNUIGNvdW50KCopIEZST00gY3RfaTggV0hFUkUgYSA+PSA1MDo6aW50NDsKKyBjb3VudCAK Ky0tLS0tLS0KKyAgICA1MgorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pOCBX SEVSRSBhID4gIDUwOjppbnQ0OworIGNvdW50IAorLS0tLS0tLQorICAgIDUxCisoMSByb3cpCisK K1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k4IFdIRVJFIGEgPD4gNTA6OmludDQ7CisgY291bnQg CistLS0tLS0tCisgICAyMDIKKygxIHJvdykKKworLS0gQ29uZmlybSB0aGUgaW5kZXggaXMgYWN0 dWFsbHkgdXNlZCBmb3IgYSBjcm9zcy10eXBlIHByZWRpY2F0ZS4KK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k0IFdIRVJFIGEgPSA1MDo6aW50ODsKKyAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAg SW5kZXggT25seSBTY2FuIHVzaW5nIGN0X2k0X2lkeCBvbiBjdF9pNAorICAgICAgICAgSW5kZXgg Q29uZDogKGEgPSAnNTAnOjpiaWdpbnQpCisoMyByb3dzKQorCistLSBDcm9zcy10eXBlIEtOTjog aW50NCBrZXkgb3JkZXJlZCBieSBpbnQyIC8gaW50OCBxdWVyaWVzLgorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIGEgRlJPTSBjdF9pNCBPUkRFUiBCWSBhIDwtPiAnLTEwMCc6OmludDIgTElN SVQgMzsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTGltaXQK KyAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgY3RfaTRfaWR4IG9uIGN0X2k0CisgICAgICAg ICBPcmRlciBCeTogKGEgPC0+ICctMTAwJzo6c21hbGxpbnQpCisoMyByb3dzKQorCitTRUxFQ1Qg YSBGUk9NIGN0X2k0IE9SREVSIEJZIGEgPC0+ICctMTAwJzo6aW50MiBMSU1JVCAzOworICBhICAg CistLS0tLS0KKyAtMTAwCisgIC05OQorICAtOTgKKygzIHJvd3MpCisKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCBhIEZST00gY3RfaTQgT1JERVIgQlkgYSA8LT4gJy0xMDAnOjppbnQ4IExJ TUlUIDM7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0 CisgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGN0X2k0X2lkeCBvbiBjdF9pNAorICAgICAg ICAgT3JkZXIgQnk6IChhIDwtPiAnLTEwMCc6OmJpZ2ludCkKKygzIHJvd3MpCisKK1NFTEVDVCBh IEZST00gY3RfaTQgT1JERVIgQlkgYSA8LT4gJy0xMDAnOjppbnQ4IExJTUlUIDM7CisgIGEgICAK Ky0tLS0tLQorIC0xMDAKKyAgLTk5CisgIC05OAorKDMgcm93cykKKworLS0gQ3Jvc3MtdHlwZSBL Tk46IGludDIga2V5IG9yZGVyZWQgYnkgaW50NCAvIGludDggcXVlcmllcy4KK1NFTEVDVCBhIEZS T00gY3RfaTIgT1JERVIgQlkgYSA8LT4gJy0xMDAnOjppbnQ0IExJTUlUIDM7CisgIGEgICAKKy0t LS0tLQorIC0xMDAKKyAgLTk5CisgIC05OAorKDMgcm93cykKKworU0VMRUNUIGEgRlJPTSBjdF9p MiBPUkRFUiBCWSBhIDwtPiAnLTEwMCc6OmludDggTElNSVQgMzsKKyAgYSAgIAorLS0tLS0tCisg LTEwMAorICAtOTkKKyAgLTk4CisoMyByb3dzKQorCistLSBDcm9zcy10eXBlIEtOTjogaW50OCBr ZXkgb3JkZXJlZCBieSBpbnQyIC8gaW50NCBxdWVyaWVzLgorU0VMRUNUIGEgRlJPTSBjdF9pOCBP UkRFUiBCWSBhIDwtPiAnLTEwMCc6OmludDIgTElNSVQgMzsKKyAgYSAgIAorLS0tLS0tCisgLTEw MAorICAtOTkKKyAgLTk4CisoMyByb3dzKQorCitTRUxFQ1QgYSBGUk9NIGN0X2k4IE9SREVSIEJZ IGEgPC0+ICctMTAwJzo6aW50NCBMSU1JVCAzOworICBhICAgCistLS0tLS0KKyAtMTAwCisgIC05 OQorICAtOTgKKygzIHJvd3MpCisKKy0tIENvbWJpbmVkOiBjcm9zcy10eXBlIFdIRVJFICsgY3Jv c3MtdHlwZSBPUkRFUiBCWSBvbiB0aGUgc2FtZSBpbmRleC4KK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCBhIEZST00gY3RfaTQgV0hFUkUgYSA8IDgwOjppbnQ4IE9SREVSIEJZIGEgPC0+ICct MTAwJzo6aW50OCBMSU1JVCAzOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBMaW1pdAorICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBjdF9pNF9pZHggb24g Y3RfaTQKKyAgICAgICAgIEluZGV4IENvbmQ6IChhIDwgJzgwJzo6YmlnaW50KQorICAgICAgICAg T3JkZXIgQnk6IChhIDwtPiAnLTEwMCc6OmJpZ2ludCkKKyg0IHJvd3MpCisKK1NFTEVDVCBhIEZS T00gY3RfaTQgV0hFUkUgYSA8IDgwOjppbnQ4IE9SREVSIEJZIGEgPC0+ICctMTAwJzo6aW50OCBM SU1JVCAzOworICBhICAgCistLS0tLS0KKyAtMTAwCisgIC05OQorICAtOTgKKygzIHJvd3MpCisK Ky0tIFN0YW5kYWxvbmUgZGlzdGFuY2UtZnVuY3Rpb24gc21va2UgdGVzdHMgKG5vdCBnb2luZyB0 aHJvdWdoIHRoZSBpbmRleCksCistLSBpbmNsdWRpbmcgdGhlIG92ZXJmbG93LWRldGVjdGlvbiBw YXRocy4KK1NFTEVDVCBpbnQyX2ludDRfZGlzdCgzOjppbnQyLCAxMDo6aW50NCk7CisgaW50Ml9p bnQ0X2Rpc3QgCistLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIDcKKygxIHJvdykKKwor U0VMRUNUIGludDRfaW50Ml9kaXN0KC01OjppbnQ0LCA1OjppbnQyKTsKKyBpbnQ0X2ludDJfZGlz dCAKKy0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAxMAorKDEgcm93KQorCitTRUxFQ1Qg aW50Ml9pbnQ4X2Rpc3QoMzo6aW50MiwgMTA6OmludDgpOworIGludDJfaW50OF9kaXN0IAorLS0t LS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICA3CisoMSByb3cpCisKK1NFTEVDVCBpbnQ4X2lu dDJfZGlzdCgxMDA6OmludDgsIC01OjppbnQyKTsKKyBpbnQ4X2ludDJfZGlzdCAKKy0tLS0tLS0t LS0tLS0tLS0KKyAgICAgICAgICAgIDEwNQorKDEgcm93KQorCitTRUxFQ1QgaW50NF9pbnQ4X2Rp c3QoMTAwOjppbnQ0LCA1MDAwMDAwMDAwOjppbnQ4KTsKKyBpbnQ0X2ludDhfZGlzdCAKKy0tLS0t LS0tLS0tLS0tLS0KKyAgICAgNDk5OTk5OTkwMAorKDEgcm93KQorCitTRUxFQ1QgaW50OF9pbnQ0 X2Rpc3QoNTAwMDAwMDAwMDo6aW50OCwgMTAwOjppbnQ0KTsKKyBpbnQ4X2ludDRfZGlzdCAKKy0t LS0tLS0tLS0tLS0tLS0KKyAgICAgNDk5OTk5OTkwMAorKDEgcm93KQorCistLSBPdmVyZmxvdyBk ZXRlY3Rpb246IElOVDMyX01JTiBkaXN0YW5jZSBmcm9tIGEgcG9zaXRpdmUgaW50MiBjYW4ndCBm aXQKKy0tIGluIGludDMyLCBzaG91bGQgZXJyb3IuCitTRUxFQ1QgaW50Ml9pbnQ0X2Rpc3QoMTo6 aW50MiwgLTIxNDc0ODM2NDg6OmludDQpOworRVJST1I6ICBpbnRlZ2VyIG91dCBvZiByYW5nZQor LS0gTGlrZXdpc2UgSU5UNjRfTUlOIGRpc3RhbmNlIGZyb20gYSBwb3NpdGl2ZSBpbnQ0IGNhbid0 IGZpdCBpbiBpbnQ2NC4KK1NFTEVDVCBpbnQ0X2ludDhfZGlzdCgxOjppbnQ0LCAtOTIyMzM3MjAz Njg1NDc3NTgwODo6aW50OCk7CitFUlJPUjogIGJpZ2ludCBvdXQgb2YgcmFuZ2UKKy0tCistLSBN dWx0aS1jb2x1bW4gR2lTVCBpbmRleCB3aXRoIG1peGVkLXR5cGUgcHJlZGljYXRlcy4gVGhpcyBp cyB0aGUKKy0tIG9yaWdpbmFsIG1vdGl2YXRpbmcgY2FzZTogd2l0aG91dCBjcm9zcy10eXBlIG9w ZXJhdG9yIHN1cHBvcnQgdGhlCistLSBwbGFubmVyIGNhbiBvbmx5IHVzZSBvbmUgY29sdW1uIGFz IGFuIEluZGV4IENvbmQgYW5kIGFwcGxpZXMgdGhlCistLSBvdGhlcihzKSBhcyBhIEZpbHRlciBw b3N0LXNjYW4uIEhlcmUgYm90aCBjb2x1bW5zIHNob3VsZCBhcHBlYXIgYXMKKy0tIEluZGV4IENv bmQuCistLQorQ1JFQVRFIFRBQkxFIGN0X211bHRpIChhIGludDQsIGIgaW50OCk7CitJTlNFUlQg SU5UTyBjdF9tdWx0aQorICAgIFNFTEVDVCBnLCAoZyAqIDIpOjppbnQ4IEZST00gZ2VuZXJhdGVf c2VyaWVzKC01MCwgNTApIGc7CitDUkVBVEUgSU5ERVggY3RfbXVsdGlfaWR4IE9OIGN0X211bHRp IFVTSU5HIGdpc3QgKGEsIGIpOworQU5BTFlaRSBjdF9tdWx0aTsKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X211bHRpIFdIRVJFIGEgPSAyNTo6aW50OCBBTkQg YiA9IDUwOjppbnQ0OworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBj dF9tdWx0aV9pZHggb24gY3RfbXVsdGkKKyAgICAgICAgIEluZGV4IENvbmQ6ICgoYSA9ICcyNSc6 OmJpZ2ludCkgQU5EIChiID0gNTApKQorKDMgcm93cykKKworU0VMRUNUIGNvdW50KCopIEZST00g Y3RfbXVsdGkgV0hFUkUgYSA9IDI1OjppbnQ4IEFORCBiID0gNTA6OmludDQ7CisgY291bnQgCist LS0tLS0tCisgICAgIDEKKygxIHJvdykKKworLS0gTWl4ZWQgY3Jvc3MtdHlwZSByYW5nZXMgYWNy b3NzIGJvdGggY29sdW1ucy4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBG Uk9NIGN0X211bHRpIFdIRVJFIGEgPCAxMDo6aW50OCBBTkQgYiA+IDA6OmludDI7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBj dF9tdWx0aV9pZHggb24gY3RfbXVsdGkKKyAgICAgICAgIEluZGV4IENvbmQ6ICgoYSA8ICcxMCc6 OmJpZ2ludCkgQU5EIChiID4gJzAnOjpzbWFsbGludCkpCisoMyByb3dzKQorCitTRUxFQ1QgY291 bnQoKikgRlJPTSBjdF9tdWx0aSBXSEVSRSBhIDwgMTA6OmludDggQU5EIGIgPiAwOjppbnQyOwor IGNvdW50IAorLS0tLS0tLQorICAgICA5CisoMSByb3cpCisKK0RST1AgVEFCTEUgY3RfbXVsdGk7 CitEUk9QIFRBQkxFIGN0X2kyOworRFJPUCBUQUJMRSBjdF9pNDsKK0RST1AgVEFCTEUgY3RfaTg7 CmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3Qvc3FsL2ludF9jcm9zc3R5cGUuc3FsIGIv Y29udHJpYi9idHJlZV9naXN0L3NxbC9pbnRfY3Jvc3N0eXBlLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDM4MDg0ZjE5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL2J0cmVlX2dpc3Qvc3FsL2ludF9jcm9zc3R5cGUuc3FsCkBAIC0wLDAgKzEsMjM2IEBA CistLSBDcm9zcy10eXBlIG9wZXJhdG9yIHN1cHBvcnQgZm9yIGludDIvaW50NC9pbnQ4IGluIEdp U1QuCistLQorLS0gVmVyaWZpZXMgdGhhdCAoYSkgdGhlIGNyb3NzLXR5cGUgQi10cmVlLXN0eWxl IG9wZXJhdG9ycyByZWdpc3RlcmVkIGluCistLSBnaXN0X2ludHsyLDQsOH1fb3BzIG1hdGNoIHRo ZSByZXN1bHRzIG9mIHNlcXNjYW5zIHVzaW5nIHRoZSBzYW1lIG9wZXJhdG9yCistLSBleHByZXNz aW9ucywgKGIpIHRoZSBLTk4gPC0+IG9wZXJhdG9yIHdvcmtzIGFjcm9zcyB0eXBlcyBhbmQgdXNl cyB0aGUKKy0tIGluZGV4LCBhbmQgKGMpIHZhbHVlcyBvdXRzaWRlIHRoZSBzbWFsbGVyIHN1YnR5 cGUncyByYW5nZSBhcmUgaGFuZGxlZAorLS0gYWNjb3JkaW5nIHRvIG5vcm1hbCBjb21wYXJpc29u IHNlbWFudGljcywgd2l0aG91dCBuYXJyb3dpbmcgb3IgZXJyb3JpbmcuCisKKy0tCistLSBDYXRh bG9nIGludmFyaWFudDogdGhlIGNyb3NzLXR5cGUgcGdfYW1vcCBlbnRyaWVzIGluIGdpc3RfaW50 ezIsNCw4fV9vcHMgbXVzdAorLS0gYWdyZWUsIGluIGJvdGggZGlyZWN0aW9ucywgd2l0aCB3aGF0 IHRoZSBDIGNyb3NzLXR5cGUgZGlzcGF0Y2ggY2FuIGhhbmRsZS4KKy0tIFRoZSBzZXQgb2Ygc3Vw cG9ydGVkIHF1ZXJ5IHN1YnR5cGVzIGlzIHJlYWQgZnJvbSB0aGUgQyBzaWRlIHZpYQorLS0gZ2J0 X2ludF9jcm9zc3R5cGVfc3VidHlwZXMoKSwgc28gdGhlcmUgaXMgbm8gaGFuZC1tYWludGFpbmVk IHNlY29uZCBjb3B5IG9mCistLSB0aGUgbGlzdCBoZXJlOiByZWdpc3RlcmluZyBhIHBnX2Ftb3Ag cm93IHdob3NlIHN1YnR5cGUgdGhlIGRpc3BhdGNoIGRvZXMgbm90CistLSBoYW5kbGUgKG9yIGRy b3BwaW5nIGEgZGlzcGF0Y2ggZW50cnkgd2hpbGUgaXRzIHBnX2Ftb3Agcm93cyByZW1haW4sIG9y IHZpY2UKKy0tIHZlcnNhKSBzaG93cyB1cCBhcyBhIGRpZmYgYmVsb3cuIENyb3NzLXR5cGUgcGdf YW1wcm9jIHJvd3MgbXVzdCBhbHNvIHN0YXkKKy0tIGFic2VudCwgc2luY2UgdGhlIGRpc3BhdGNo IHJldXNlcyB0aGUgc2FtZS10eXBlIHN1cHBvcnQgZnVuY3Rpb25zLgorLS0KK1dJVEggZGlzcGF0 Y2hfc3VidHlwZXModHlwKSBBUyAoCisgICAgU0VMRUNUIHMuc3VidHlwZTo6cmVndHlwZQorICAg IEZST00gZ2J0X2ludF9jcm9zc3R5cGVfc3VidHlwZXMoKSBBUyBzKHN1YnR5cGUpCispLAorZ2lz dF9pbnRfb3BjbGFzc2VzKG9wZmFtaWx5LCBpbmRleHR5cGUpIEFTICgKKyAgICBTRUxFQ1Qgb3Bj Lm9wY25hbWU6OnRleHQsIG9wYy5vcGNpbnR5cGU6OnJlZ3R5cGUKKyAgICBGUk9NIHBnX29wY2xh c3Mgb3BjCisgICAgICAgICBKT0lOIHBnX2FtIGFtIE9OIGFtLm9pZCA9IG9wYy5vcGNtZXRob2QK KyAgICBXSEVSRSBhbS5hbW5hbWUgPSAnZ2lzdCcKKyAgICAgIEFORCBvcGMub3BjbmFtZSBJTiAo J2dpc3RfaW50Ml9vcHMnLCAnZ2lzdF9pbnQ0X29wcycsICdnaXN0X2ludDhfb3BzJykKKyksCitl eHBlY3RlZF9wYWlycyhvcGZhbWlseSwgbGVmdHR5cGUsIHJpZ2h0dHlwZSkgQVMgKAorICAgIFNF TEVDVCBvYy5vcGZhbWlseSwgb2MuaW5kZXh0eXBlLCBkcy50eXAKKyAgICBGUk9NIGdpc3RfaW50 X29wY2xhc3NlcyBvYworICAgICAgICAgQ1JPU1MgSk9JTiBkaXNwYXRjaF9zdWJ0eXBlcyBkcwor ICAgIFdIRVJFIGRzLnR5cCA8PiBvYy5pbmRleHR5cGUKKyksCitleHBlY3RlZF9hbW9wKG9wZmFt aWx5LCBsZWZ0dHlwZSwgcmlnaHR0eXBlLCBzdHJhdGVneSwgcHVycG9zZSkgQVMgKAorICAgIFNF TEVDVCBvcGZhbWlseSwgbGVmdHR5cGUsIHJpZ2h0dHlwZSwgc3RyYXRlZ3ksIHB1cnBvc2UKKyAg ICBGUk9NIGV4cGVjdGVkX3BhaXJzCisgICAgICAgICBDUk9TUyBKT0lOIChWQUxVRVMKKyAgICAg ICAgICAgICAoMSwgJ3MnKSwgKDIsICdzJyksICgzLCAncycpLCAoNCwgJ3MnKSwKKyAgICAgICAg ICAgICAoNSwgJ3MnKSwgKDYsICdzJyksICgxNSwgJ28nKQorICAgICAgICAgKSBBUyBzdHJhdGVn eV9wdXJwb3NlcyhzdHJhdGVneSwgcHVycG9zZSkKKyksCithY3R1YWxfYW1vcCBBUyAoCisgICAg U0VMRUNUIG9wZi5vcGZuYW1lOjp0ZXh0IEFTIG9wZmFtaWx5LAorICAgICAgICAgICBhbW9wLmFt b3BsZWZ0dHlwZTo6cmVndHlwZSBBUyBsZWZ0dHlwZSwKKyAgICAgICAgICAgYW1vcC5hbW9wcmln aHR0eXBlOjpyZWd0eXBlIEFTIHJpZ2h0dHlwZSwKKyAgICAgICAgICAgYW1vcC5hbW9wc3RyYXRl Z3k6OmludCBBUyBzdHJhdGVneSwKKyAgICAgICAgICAgYW1vcC5hbW9wcHVycG9zZTo6dGV4dCBB UyBwdXJwb3NlCisgICAgRlJPTSBwZ19hbW9wIGFtb3AKKyAgICAgICAgIEpPSU4gcGdfb3BmYW1p bHkgb3BmIE9OIG9wZi5vaWQgPSBhbW9wLmFtb3BmYW1pbHkKKyAgICAgICAgIEpPSU4gcGdfYW0g YW0gT04gYW0ub2lkID0gb3BmLm9wZm1ldGhvZAorICAgIFdIRVJFIGFtLmFtbmFtZSA9ICdnaXN0 JworICAgICAgQU5EIG9wZi5vcGZuYW1lIElOICgnZ2lzdF9pbnQyX29wcycsICdnaXN0X2ludDRf b3BzJywgJ2dpc3RfaW50OF9vcHMnKQorICAgICAgQU5EIGFtb3AuYW1vcGxlZnR0eXBlIDw+IGFt b3AuYW1vcHJpZ2h0dHlwZQorKQorU0VMRUNUICoKK0ZST00gKAorICAgIFNFTEVDVCAnbWlzc2lu ZyBmcm9tIHBnX2Ftb3AnIEFTIHN0YXR1cywgKgorICAgIEZST00gKFNFTEVDVCAqIEZST00gZXhw ZWN0ZWRfYW1vcCBFWENFUFQgU0VMRUNUICogRlJPTSBhY3R1YWxfYW1vcCkgbWlzc2luZworICAg IFVOSU9OIEFMTAorICAgIFNFTEVDVCAndW5leHBlY3RlZCBpbiBwZ19hbW9wJyBBUyBzdGF0dXMs ICoKKyAgICBGUk9NIChTRUxFQ1QgKiBGUk9NIGFjdHVhbF9hbW9wIEVYQ0VQVCBTRUxFQ1QgKiBG Uk9NIGV4cGVjdGVkX2Ftb3ApIHVuZXhwZWN0ZWQKKykgZGlmZgorT1JERVIgQlkgc3RhdHVzLCBv cGZhbWlseSwgbGVmdHR5cGU6OnRleHQsIHJpZ2h0dHlwZTo6dGV4dCwgc3RyYXRlZ3ksIHB1cnBv c2U7CisKK1NFTEVDVCBvcGYub3BmbmFtZSBBUyBvcGZhbWlseSwKKyAgICAgICBhbXByb2MuYW1w cm9jbGVmdHR5cGU6OnJlZ3R5cGUgQVMgbGVmdHR5cGUsCisgICAgICAgYW1wcm9jLmFtcHJvY3Jp Z2h0dHlwZTo6cmVndHlwZSBBUyByaWdodHR5cGUsCisgICAgICAgYW1wcm9jLmFtcHJvY251bSBB UyBwcm9jbnVtLAorICAgICAgIGFtcHJvYy5hbXByb2M6OnJlZ3Byb2MgQVMgcHJvYworRlJPTSBw Z19hbXByb2MgYW1wcm9jCisgICAgIEpPSU4gcGdfb3BmYW1pbHkgb3BmIE9OIG9wZi5vaWQgPSBh bXByb2MuYW1wcm9jZmFtaWx5CisgICAgIEpPSU4gcGdfYW0gYW0gT04gYW0ub2lkID0gb3BmLm9w Zm1ldGhvZAorV0hFUkUgYW0uYW1uYW1lID0gJ2dpc3QnCisgIEFORCBvcGYub3BmbmFtZSBJTiAo J2dpc3RfaW50Ml9vcHMnLCAnZ2lzdF9pbnQ0X29wcycsICdnaXN0X2ludDhfb3BzJykKKyAgQU5E IGFtcHJvYy5hbXByb2NsZWZ0dHlwZSA8PiBhbXByb2MuYW1wcm9jcmlnaHR0eXBlCitPUkRFUiBC WSBvcGYub3BmbmFtZSwKKyAgICAgICAgIGFtcHJvYy5hbXByb2NsZWZ0dHlwZTo6cmVndHlwZTo6 dGV4dCwKKyAgICAgICAgIGFtcHJvYy5hbXByb2NyaWdodHR5cGU6OnJlZ3R5cGU6OnRleHQsCisg ICAgICAgICBhbXByb2MuYW1wcm9jbnVtLAorICAgICAgICAgYW1wcm9jLmFtcHJvYzo6cmVncHJv Yzo6dGV4dDsKKworQ1JFQVRFIFRBQkxFIGN0X2kyIChhIGludDIpOworQ1JFQVRFIFRBQkxFIGN0 X2k0IChhIGludDQpOworQ1JFQVRFIFRBQkxFIGN0X2k4IChhIGludDgpOworCitJTlNFUlQgSU5U TyBjdF9pMiBTRUxFQ1QgZzo6aW50MiBGUk9NIGdlbmVyYXRlX3NlcmllcygtMTAwLCAxMDApIGc7 CitJTlNFUlQgSU5UTyBjdF9pNCBTRUxFQ1QgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygtMTAwLCAx MDApIGc7CitJTlNFUlQgSU5UTyBjdF9pOCBTRUxFQ1QgZzo6aW50OCBGUk9NIGdlbmVyYXRlX3Nl cmllcygtMTAwLCAxMDApIGc7CisKKy0tIEFkZCBzb21lIHZhbHVlcyB0aGF0IGFyZSByZXByZXNl bnRhYmxlIG9ubHkgaW4gd2lkZXIgdHlwZXMsIHRvIGV4ZXJjaXNlCistLSB0aGUgcGF0aCB3aGVy ZSB0aGUgY3Jvc3MtdHlwZSBxdWVyeSBjb25zdGFudCBpcyBvdXQgb2YgcmFuZ2Ugb2YgdGhlIGtl eQorLS0gdHlwZS4KK0lOU0VSVCBJTlRPIGN0X2k0IFZBTFVFUyAoMTAwMDAwKSwgKC0xMDAwMDAp OworSU5TRVJUIElOVE8gY3RfaTggVkFMVUVTICg1MDAwMDAwMDAwKSwgKC01MDAwMDAwMDAwKTsK KworQ1JFQVRFIElOREVYIGN0X2kyX2lkeCBPTiBjdF9pMiBVU0lORyBnaXN0IChhKTsKK0NSRUFU RSBJTkRFWCBjdF9pNF9pZHggT04gY3RfaTQgVVNJTkcgZ2lzdCAoYSk7CitDUkVBVEUgSU5ERVgg Y3RfaThfaWR4IE9OIGN0X2k4IFVTSU5HIGdpc3QgKGEpOworCitBTkFMWVpFIGN0X2kyOworQU5B TFlaRSBjdF9pNDsKK0FOQUxZWkUgY3RfaTg7CisKK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsK K1NFVCBlbmFibGVfYml0bWFwc2NhbiA9IG9mZjsKKworLS0gaW50MiBrZXkgeCBpbnQ0IHF1ZXJ5 CitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pMiBXSEVSRSBhIDwgIDUwOjppbnQ0OworU0VMRUNU IGNvdW50KCopIEZST00gY3RfaTIgV0hFUkUgYSA8PSA1MDo6aW50NDsKK1NFTEVDVCBjb3VudCgq KSBGUk9NIGN0X2kyIFdIRVJFIGEgPSAgNTA6OmludDQ7CitTRUxFQ1QgY291bnQoKikgRlJPTSBj dF9pMiBXSEVSRSBhID49IDUwOjppbnQ0OworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTIgV0hF UkUgYSA+ICA1MDo6aW50NDsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEgPD4g NTA6OmludDQ7CisKKy0tIHF1ZXJ5IG91dCBvZiBpbnQyIHJhbmdlOiBtYXRjaGVzIG5vdGhpbmcg Zm9yID0sIGV2ZXJ5dGhpbmcgZm9yIDw+CitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pMiBXSEVS RSBhID0gIDEwMDAwMDo6aW50NDsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEg PD4gMTAwMDAwOjppbnQ0OworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTIgV0hFUkUgYSA8ICAx MDAwMDA6OmludDQ7CitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pMiBXSEVSRSBhID4gIDEwMDAw MDo6aW50NDsKKworLS0gaW50MiBrZXkgeCBpbnQ4IHF1ZXJ5CitTRUxFQ1QgY291bnQoKikgRlJP TSBjdF9pMiBXSEVSRSBhIDwgIDUwOjppbnQ4OworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTIg V0hFUkUgYSA8PSA1MDo6aW50ODsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEg PSAgNTA6OmludDg7CitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pMiBXSEVSRSBhID49IDUwOjpp bnQ4OworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTIgV0hFUkUgYSA+ICA1MDo6aW50ODsKK1NF TEVDVCBjb3VudCgqKSBGUk9NIGN0X2kyIFdIRVJFIGEgPD4gNTA6OmludDg7CitTRUxFQ1QgY291 bnQoKikgRlJPTSBjdF9pMiBXSEVSRSBhID0gIDUwMDAwMDAwMDA6OmludDg7CitTRUxFQ1QgY291 bnQoKikgRlJPTSBjdF9pMiBXSEVSRSBhIDwgIDUwMDAwMDAwMDA6OmludDg7CisKKy0tIGludDQg a2V5IHggaW50MiBxdWVyeQorU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTQgV0hFUkUgYSA8ICA1 MDo6aW50MjsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k0IFdIRVJFIGEgPD0gNTA6OmludDI7 CitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pNCBXSEVSRSBhID0gIDUwOjppbnQyOworU0VMRUNU IGNvdW50KCopIEZST00gY3RfaTQgV0hFUkUgYSA+PSA1MDo6aW50MjsKK1NFTEVDVCBjb3VudCgq KSBGUk9NIGN0X2k0IFdIRVJFIGEgPiAgNTA6OmludDI7CitTRUxFQ1QgY291bnQoKikgRlJPTSBj dF9pNCBXSEVSRSBhIDw+IDUwOjppbnQyOworCistLSBpbnQ0IGtleSB4IGludDggcXVlcnkKK1NF TEVDVCBjb3VudCgqKSBGUk9NIGN0X2k0IFdIRVJFIGEgPCAgNTA6OmludDg7CitTRUxFQ1QgY291 bnQoKikgRlJPTSBjdF9pNCBXSEVSRSBhIDw9IDUwOjppbnQ4OworU0VMRUNUIGNvdW50KCopIEZS T00gY3RfaTQgV0hFUkUgYSA9ICA1MDo6aW50ODsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k0 IFdIRVJFIGEgPj0gNTA6OmludDg7CitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pNCBXSEVSRSBh ID4gIDUwOjppbnQ4OworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTQgV0hFUkUgYSA8PiA1MDo6 aW50ODsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k0IFdIRVJFIGEgPSAgNTAwMDAwMDAwMDo6 aW50ODsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k0IFdIRVJFIGEgPCAgNTAwMDAwMDAwMDo6 aW50ODsKKworLS0gaW50OCBrZXkgeCBpbnQyIHF1ZXJ5CitTRUxFQ1QgY291bnQoKikgRlJPTSBj dF9pOCBXSEVSRSBhIDwgIDUwOjppbnQyOworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTggV0hF UkUgYSA8PSA1MDo6aW50MjsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k4IFdIRVJFIGEgPSAg NTA6OmludDI7CitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9pOCBXSEVSRSBhID49IDUwOjppbnQy OworU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTggV0hFUkUgYSA+ICA1MDo6aW50MjsKK1NFTEVD VCBjb3VudCgqKSBGUk9NIGN0X2k4IFdIRVJFIGEgPD4gNTA6OmludDI7CisKKy0tIGludDgga2V5 IHggaW50NCBxdWVyeQorU0VMRUNUIGNvdW50KCopIEZST00gY3RfaTggV0hFUkUgYSA8ICA1MDo6 aW50NDsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X2k4IFdIRVJFIGEgPD0gNTA6OmludDQ7CitT RUxFQ1QgY291bnQoKikgRlJPTSBjdF9pOCBXSEVSRSBhID0gIDUwOjppbnQ0OworU0VMRUNUIGNv dW50KCopIEZST00gY3RfaTggV0hFUkUgYSA+PSA1MDo6aW50NDsKK1NFTEVDVCBjb3VudCgqKSBG Uk9NIGN0X2k4IFdIRVJFIGEgPiAgNTA6OmludDQ7CitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9p OCBXSEVSRSBhIDw+IDUwOjppbnQ0OworCistLSBDb25maXJtIHRoZSBpbmRleCBpcyBhY3R1YWxs eSB1c2VkIGZvciBhIGNyb3NzLXR5cGUgcHJlZGljYXRlLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGNvdW50KCopIEZST00gY3RfaTQgV0hFUkUgYSA9IDUwOjppbnQ4OworCistLSBDcm9z cy10eXBlIEtOTjogaW50NCBrZXkgb3JkZXJlZCBieSBpbnQyIC8gaW50OCBxdWVyaWVzLgorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEgRlJPTSBjdF9pNCBPUkRFUiBCWSBhIDwtPiAnLTEw MCc6OmludDIgTElNSVQgMzsKK1NFTEVDVCBhIEZST00gY3RfaTQgT1JERVIgQlkgYSA8LT4gJy0x MDAnOjppbnQyIExJTUlUIDM7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhIEZST00g Y3RfaTQgT1JERVIgQlkgYSA8LT4gJy0xMDAnOjppbnQ4IExJTUlUIDM7CitTRUxFQ1QgYSBGUk9N IGN0X2k0IE9SREVSIEJZIGEgPC0+ICctMTAwJzo6aW50OCBMSU1JVCAzOworCistLSBDcm9zcy10 eXBlIEtOTjogaW50MiBrZXkgb3JkZXJlZCBieSBpbnQ0IC8gaW50OCBxdWVyaWVzLgorU0VMRUNU IGEgRlJPTSBjdF9pMiBPUkRFUiBCWSBhIDwtPiAnLTEwMCc6OmludDQgTElNSVQgMzsKK1NFTEVD VCBhIEZST00gY3RfaTIgT1JERVIgQlkgYSA8LT4gJy0xMDAnOjppbnQ4IExJTUlUIDM7CisKKy0t IENyb3NzLXR5cGUgS05OOiBpbnQ4IGtleSBvcmRlcmVkIGJ5IGludDIgLyBpbnQ0IHF1ZXJpZXMu CitTRUxFQ1QgYSBGUk9NIGN0X2k4IE9SREVSIEJZIGEgPC0+ICctMTAwJzo6aW50MiBMSU1JVCAz OworU0VMRUNUIGEgRlJPTSBjdF9pOCBPUkRFUiBCWSBhIDwtPiAnLTEwMCc6OmludDQgTElNSVQg MzsKKworLS0gQ29tYmluZWQ6IGNyb3NzLXR5cGUgV0hFUkUgKyBjcm9zcy10eXBlIE9SREVSIEJZ IG9uIHRoZSBzYW1lIGluZGV4LgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEgRlJPTSBj dF9pNCBXSEVSRSBhIDwgODA6OmludDggT1JERVIgQlkgYSA8LT4gJy0xMDAnOjppbnQ4IExJTUlU IDM7CitTRUxFQ1QgYSBGUk9NIGN0X2k0IFdIRVJFIGEgPCA4MDo6aW50OCBPUkRFUiBCWSBhIDwt PiAnLTEwMCc6OmludDggTElNSVQgMzsKKworLS0gU3RhbmRhbG9uZSBkaXN0YW5jZS1mdW5jdGlv biBzbW9rZSB0ZXN0cyAobm90IGdvaW5nIHRocm91Z2ggdGhlIGluZGV4KSwKKy0tIGluY2x1ZGlu ZyB0aGUgb3ZlcmZsb3ctZGV0ZWN0aW9uIHBhdGhzLgorU0VMRUNUIGludDJfaW50NF9kaXN0KDM6 OmludDIsIDEwOjppbnQ0KTsKK1NFTEVDVCBpbnQ0X2ludDJfZGlzdCgtNTo6aW50NCwgNTo6aW50 Mik7CitTRUxFQ1QgaW50Ml9pbnQ4X2Rpc3QoMzo6aW50MiwgMTA6OmludDgpOworU0VMRUNUIGlu dDhfaW50Ml9kaXN0KDEwMDo6aW50OCwgLTU6OmludDIpOworU0VMRUNUIGludDRfaW50OF9kaXN0 KDEwMDo6aW50NCwgNTAwMDAwMDAwMDo6aW50OCk7CitTRUxFQ1QgaW50OF9pbnQ0X2Rpc3QoNTAw MDAwMDAwMDo6aW50OCwgMTAwOjppbnQ0KTsKKworLS0gT3ZlcmZsb3cgZGV0ZWN0aW9uOiBJTlQz Ml9NSU4gZGlzdGFuY2UgZnJvbSBhIHBvc2l0aXZlIGludDIgY2FuJ3QgZml0CistLSBpbiBpbnQz Miwgc2hvdWxkIGVycm9yLgorU0VMRUNUIGludDJfaW50NF9kaXN0KDE6OmludDIsIC0yMTQ3NDgz NjQ4OjppbnQ0KTsKKy0tIExpa2V3aXNlIElOVDY0X01JTiBkaXN0YW5jZSBmcm9tIGEgcG9zaXRp dmUgaW50NCBjYW4ndCBmaXQgaW4gaW50NjQuCitTRUxFQ1QgaW50NF9pbnQ4X2Rpc3QoMTo6aW50 NCwgLTkyMjMzNzIwMzY4NTQ3NzU4MDg6OmludDgpOworCistLQorLS0gTXVsdGktY29sdW1uIEdp U1QgaW5kZXggd2l0aCBtaXhlZC10eXBlIHByZWRpY2F0ZXMuIFRoaXMgaXMgdGhlCistLSBvcmln aW5hbCBtb3RpdmF0aW5nIGNhc2U6IHdpdGhvdXQgY3Jvc3MtdHlwZSBvcGVyYXRvciBzdXBwb3J0 IHRoZQorLS0gcGxhbm5lciBjYW4gb25seSB1c2Ugb25lIGNvbHVtbiBhcyBhbiBJbmRleCBDb25k IGFuZCBhcHBsaWVzIHRoZQorLS0gb3RoZXIocykgYXMgYSBGaWx0ZXIgcG9zdC1zY2FuLiBIZXJl IGJvdGggY29sdW1ucyBzaG91bGQgYXBwZWFyIGFzCistLSBJbmRleCBDb25kLgorLS0KK0NSRUFU RSBUQUJMRSBjdF9tdWx0aSAoYSBpbnQ0LCBiIGludDgpOworSU5TRVJUIElOVE8gY3RfbXVsdGkK KyAgICBTRUxFQ1QgZywgKGcgKiAyKTo6aW50OCBGUk9NIGdlbmVyYXRlX3NlcmllcygtNTAsIDUw KSBnOworQ1JFQVRFIElOREVYIGN0X211bHRpX2lkeCBPTiBjdF9tdWx0aSBVU0lORyBnaXN0IChh LCBiKTsKK0FOQUxZWkUgY3RfbXVsdGk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGN0X211bHRpIFdIRVJFIGEgPSAyNTo6aW50OCBBTkQgYiA9IDUwOjppbnQ0 OworCitTRUxFQ1QgY291bnQoKikgRlJPTSBjdF9tdWx0aSBXSEVSRSBhID0gMjU6OmludDggQU5E IGIgPSA1MDo6aW50NDsKKworLS0gTWl4ZWQgY3Jvc3MtdHlwZSByYW5nZXMgYWNyb3NzIGJvdGgg Y29sdW1ucy4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGN0X211 bHRpIFdIRVJFIGEgPCAxMDo6aW50OCBBTkQgYiA+IDA6OmludDI7CisKK1NFTEVDVCBjb3VudCgq KSBGUk9NIGN0X211bHRpIFdIRVJFIGEgPCAxMDo6aW50OCBBTkQgYiA+IDA6OmludDI7CisKK0RS T1AgVEFCTEUgY3RfbXVsdGk7CisKK0RST1AgVEFCTEUgY3RfaTI7CitEUk9QIFRBQkxFIGN0X2k0 OworRFJPUCBUQUJMRSBjdF9pODsKLS0gCjIuNTEuMAoK --6a2de937_431bd7b7_2e1--