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 1vxoGk-00H9zW-1Y for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 15:36:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxoGi-00DKbO-2L for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 15:36:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxoGh-00DKbG-3B for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 15:36:12 +0000 Received: from mail-ot1-x32a.google.com ([2607:f8b0:4864:20::32a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxoGc-00000000OSn-0NrT for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 15:36:11 +0000 Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-7d4c4cacf78so3436854a34.0 for ; Wed, 04 Mar 2026 07:36:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772638565; cv=none; d=google.com; s=arc-20240605; b=cmab3cW9QWeaNbz+TgOUUtFw+mqGd24NwaflGybMLCanbPXBPPlTmCPCToELqOKlXt c7tz/gzKszQDhGmqB8ERBz7ODqqYEwmSg9IOSElvcUBJuryMLHViWppTjRJ5BTbpxKgD zxFiUL32Qn/Sw6f3YpRA+Ryu2DGZylwzWgZbs7WDmUhCFPUYx1aln+C4SgdrwsMVxxSu nKjnf6lbxgBpCjRtpBQVLBjzbOXWlAia7QElrpilegoY5paxUJ7rGH2yFSKsOMCxVuHD 1z1QKTP8I/GzIuepj9c0bONHRviArJdE1RZQ1QJuELAvdatzWtMpzBIfkXRX3AuT8Xqk FtJQ== 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=CZ7jZajAj6EI7kVMOpm/n6gqnrVghIFFhcmNqwAHUow=; fh=pbu1NRpa9kx6BPgKPi1fFykjAzoKXtxhGBh5u6MNF2c=; b=RylT7rsGX+i11I07PORoKQ3kug79lUhC8ZsRn1sMCjnKGBJ0k3hUhC/HiN3VVFPE+T 8pBIWY+0f5mywE/cqeT/e3Cpcs+Hn3ubIif5HElcJ2xjTpJFEs0apdCrZLQtngCh0g5c kZFU5Q+w/ayQLWl6En8wnCKzmvAa8gvw+hUCGD1k7MEkd5guizu01lfRe0vUlU+yy5Ok AVKnUDpeaSBFfbb6BrasomjiePAvl6eBlSdTkk/qvYb6KbVzHAeUpYQvFxw3iPFFHhpA zzPrZc0AscRQMsOX8XW9v7r702C1ZZLqkPXT51eTQmUmYF7mnxtaHHL91qkrzTh+fK3V bdyA==; 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=1772638565; x=1773243365; 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=CZ7jZajAj6EI7kVMOpm/n6gqnrVghIFFhcmNqwAHUow=; b=RMEiSJ7thbSNXbTWPYzA08HgwEHd5us9kMhQlJoLea3qnCxGVdLUIuIwQBKyWHAXX1 AlKYf9qIaJja+emcCoqo5zypmi4uM1B/lXVq8LxgUpn2npmA5sgo4t1rL5Hnt1zlYUCi /+6jjfDPLI5C2ohkCyI7biHT80kCnjbGPFd/emS4aGBpcsI3fhC+dLKoOO3VXQZb36sw ljDcQ4mxJCOTCV0Xqml4csaFN0GPRoZ9IIdtyROmg0mMLRx3SkY57QxbvUSWSnV6vD/Z Vb6Lwh58cQR2kmcZ8YlJP4H271e/zW1gx5lbPvjwG9/4xn1YKCye7e3td9p86qmDkb2a akHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772638565; x=1773243365; 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=CZ7jZajAj6EI7kVMOpm/n6gqnrVghIFFhcmNqwAHUow=; b=tGpT5JbFk3DHLeTj8jWnWZzVLe2lzaeXaKsyY8Nx8xrr8s2ieTyNhHn2myqOuFzAAY DCfMJ8XV6/CWOeccdAKU27UlbAtHnb58EvsILK40paWUtJAO9biNZQstE8SaLSmW+Ijd o/ojUyqx0QScAcSq5yVPVFAVk6lXL27SxoyUTNxCmzHawGihFP9jtBOV+kMcFY5ovAt8 jtN9zuyTyY87v/NWeeyDRyLvEtsDvpM1PCDTeT5IRm/zf9TNRdpTlvyjlaG+5UfOLwFs W6iSjXQ5E0K0nL+ubRR3EjyoQ/v9xAr6Gta21X2YHIDSb7CakD7vFY6fB+24Gaqz3Ipf au9w== X-Forwarded-Encrypted: i=1; AJvYcCVHBBtP3BI7DU88AqczbADEPDEKgFULWgTCdYsi+MsA3dGLc9saQXOnbbz6/QynUnDo5fa9gq1J21PI0+4k@lists.postgresql.org X-Gm-Message-State: AOJu0Yxha6/8DB2WcWT9tJuvtG9deyhUF2x2tedgMVKZdrZuLkK5zV1F zu3L2v3fIrd5sx9Ptd5HXe4TPitaoqeNhhlWJgn9T/fY+yQV2gAPycIE5REbdMV6afb5siRzcQW OUenZz75Rl+S22Y2k4KVDONQq2GoA8lY= X-Gm-Gg: ATEYQzygpHywfnMFbTJycAa0JEZqkESzlMQi0riGxZV0FVZgR4yiSYLNjJ+fSlSBzfR 9GGVPrEd5f13eMXYsZJdO96PwJT1HL0ioI5B/XFSyCgutJgq121EdjelaN3RPFj8GMjtSmC6Puj gnnEw8aiabSvIvsge3MiSGXmMyrbZyDVfQVZmTqEyvEzIuslXF7KuIq1YKyYju5eZCtisRJOzZf PkBb3+iASRQumPXdp4ywQENtQXfznZsiX9fZLcredzonljs6isTjA3STmTPQwC1KNibXKoVyaIb kNEBCA== X-Received: by 2002:a05:6820:4a8d:b0:679:dcb5:b848 with SMTP id 006d021491bc7-67b1e90bbafmr958037eaf.63.1772638565494; Wed, 04 Mar 2026 07:36:05 -0800 (PST) MIME-Version: 1.0 References: <2155281.1767900170@sss.pgh.pa.us> <431484.1768433414@sss.pgh.pa.us> In-Reply-To: From: Dave Cramer Date: Wed, 4 Mar 2026 10:35:48 -0500 X-Gm-Features: AaiRm50qa80vd7nFWIVPjPD2HZd1BrdH8cssG4VveV4wKmtnezNg6y5G3UTMGVE Message-ID: Subject: Re: Proposal to allow setting cursor options on Portals To: Hannu Krosing Cc: Robert Haas , Tom Lane , Jelte Fennema-Nio , Jacob Champion , PostgreSQL Hackers , Heikki Linnakangas Content-Type: multipart/mixed; boundary="000000000000037403064c349467" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000037403064c349467 Content-Type: multipart/alternative; boundary="000000000000037401064c349465" --000000000000037401064c349465 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 4 Mar 2026 at 09:26, Dave Cramer wrote: > > > On Thu, 15 Jan 2026 at 16:06, Hannu Krosing wrote: > >> First, let me say that I very much support getting this into the wire >> protocol. >> >> As for ways to extend the protocol, I have been myself working on >> another patch + extension where one can return extra info in >> ReadyForQuery message >> >> The first things to add are >> * CommitLSN so we can make use of ability to WAIT FOR LSN on replica >> and two connection-pooling helpers >> * a flag telling that there are HOLD CURSORS >> * a flag telling that there are temp tables >> >> This extra feedback is enabled by setting a flag, so no flag -- >> nothing to confuse the client. >> The extras themselves are uniform (length, tag, data) so client can >> ignore any tag they do not recognize. >> >> On Thu, Jan 15, 2026 at 8:11=E2=80=AFPM Dave Cramer wrote: >> > >> > >> > On Thu, 15 Jan 2026 at 14:00, Robert Haas >> wrote: >> >> >> ... >> >> I think what I like least about this proposal is the feeling that >> >> we're about to embark on a long slippery slope of changing the >> >> protocol a little bit in every new PG version. The cancel key thing i= s >> >> a small change, look here's another. If we just keep doing that, we'l= l >> >> end up with either a lot of minor version bumps or a lot of >> >> extensions. I don't foresee a good outcome either way. This is a >> >> widely used, widely adopted protocol. The idea that we can just start >> >> tweaking it a little bit every year and have nothing bad happened >> >> seems wild, regardless of how we do the tweaking. >> >> I think "tweaking ait little bit" and only whhere needed is exactly >> the right approach, if it can be cleanly isolated. >> >> My approach to protocol extension modulation *is* the ability to >> enable different parts of the protocol individually. >> >> For example the protocol extension to allow cursor/portal flags could >> be implemented this way >> >> Client has to set a flag to PROTOCOL_PORTAL_OPTIONS=3Dtrue to tell the >> server that new protocol messages are coming >> - If flag setting fails, client will not send the new protocol messages >> - If flag setting succeeds, then it is ok to send the new messages >> corresponding to the flag. >> >> This way the extra packets are disconnected from protocol version and >> can be enabled/disabled individually and per connection >> >> And it also lets one cleanly backport the change as needed without >> affecting anything else. >> >> > This leaves us with an all or nothing solution, which practically mean= s >> we do nothing, since we have to wait until we have a sufficient backlog = of >> > changes or features to change the protocol. I see that as untenable, >> unless you are now advocating for using extensions for everything ? >> > >> > Dave >> > > I have modified the patch to use protocol options instead of protocol > version > resending with a different patch name as I think the commitfest app won't pick it up with the same name > > See new version attached > --000000000000037401064c349465 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On W= ed, 4 Mar 2026 at 09:26, Dave Cramer <davecramer@gmail.com> wrote:

=

On Thu, 15 Jan = 2026 at 16:06, Hannu Krosing <hannuk@google.com> wrote:
First, let me say that I very much support ge= tting this into the wire protocol.

As for ways to extend the protocol, I have been myself working on
another patch + extension where one can return extra info in
ReadyForQuery message

The first things to add are
* CommitLSN so we can make use of ability to WAIT FOR LSN on replica
and two connection-pooling helpers
* a flag telling that there are HOLD CURSORS
* a flag telling that there are temp tables

This extra feedback is enabled by setting a flag, so no flag --
nothing to confuse the client.
The extras themselves are uniform (length, tag, data) so client can
ignore any tag they do not recognize.

On Thu, Jan 15, 2026 at 8:11=E2=80=AFPM Dave Cramer <davecramer@gmail.com> wrote:<= br> >
>
> On Thu, 15 Jan 2026 at 14:00, Robert Haas <robertmhaas@gmail.com> wrote:
>>
...
>> I think what I like least about this proposal is the feeling that<= br> >> we're about to embark on a long slippery slope of changing the=
>> protocol a little bit in every new PG version. The cancel key thin= g is
>> a small change, look here's another. If we just keep doing tha= t, we'll
>> end up with either a lot of minor version bumps or a lot of
>> extensions. I don't foresee a good outcome either way. This is= a
>> widely used, widely adopted protocol. The idea that we can just st= art
>> tweaking it a little bit every year and have nothing bad happened<= br> >> seems wild, regardless of how we do the tweaking.

I think "tweaking ait=C2=A0 little bit" and only whhere needed is= exactly
the right approach, if it can be cleanly isolated.

My approach to protocol extension modulation *is* the ability to
enable different parts of the protocol individually.

For example the protocol extension to allow cursor/portal flags could
be implemented this way

Client has to set a flag to PROTOCOL_PORTAL_OPTIONS=3Dtrue to tell the
server that new protocol messages are coming
- If flag setting fails, client will not send the new protocol messages
- If flag setting succeeds, then it is ok to send the new messages
corresponding to the flag.

This way the extra packets are disconnected from protocol version and
can be enabled/disabled individually and per connection

And it also lets one cleanly backport the change as needed without
affecting anything else.

> This leaves us with an all or nothing solution, which practically mean= s we do nothing, since we have to wait until we have a sufficient backlog o= f
> changes or features to change the protocol. I see that as untenable, u= nless you are now advocating for using extensions for everything ?
>
> Dave

I have modified the patch to = use protocol options instead of protocol version

resending with a different patch name as I think th= e commitfest app won't pick it up with the same name
=C2=A0

See new version attached=C2=A0
--000000000000037401064c349465-- --000000000000037403064c349467 Content-Type: application/octet-stream; name="0002-wip-holdable-portals.patch" Content-Disposition: attachment; filename="0002-wip-holdable-portals.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmc77y560 RnJvbSAzOTA3OWYyOTU3ZTRiNTBlNWYwOTNkODZkMWUwNTY4ZDU2NDg2ZGVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENyYW1lciA8ZGF2ZWNyYW1lckBnbWFpbC5jb20+CkRh dGU6IEZyaSwgNSBEZWMgMjAyNSAxODoyMDoyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIHdpcCBo b2xkYWJsZSBwb3J0YWxzCgp1cGRhdGUgZG9jcyBmb3IgbmV3IHByb3RvY29sIG1lc3NhZ2UKCmFk ZCBmdW5jdGlvbiBQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMgdG8gYWxsb3cgY3Vyc29ycyB3 aXRoIG9wdGlvbnMgdG8gYmUgY3JlYXRlZCBhbmQgZml4IHRlc3QgdG8gd29yayBwcm9wZXJseQoK QWRkIF9wcV8uaG9sZGFibGVfcG9ydGFsIHByb3RvY29sIG9wdGlvbiBmb3IgaG9sZGFibGUgY3Vy c29ycwoKSW1wbGVtZW50IHN1cHBvcnQgZm9yIGNyZWF0aW5nIGhvbGRhYmxlIHBvcnRhbHMgdmlh IHRoZSBleHRlbmRlZCBxdWVyeQpwcm90b2NvbCB1c2luZyBhIG5ldyBwcm90b2NvbCBvcHRpb24g aW5zdGVhZCBvZiBidW1waW5nIHRoZSBwcm90b2NvbAp2ZXJzaW9uLiBUaGlzIGFsbG93cyBjbGll bnRzIHRvIG9wdC1pbiB0byBzZW5kaW5nIGN1cnNvciBvcHRpb25zIGluCkJpbmQgbWVzc2FnZXMu CgpQcm90b2NvbCBPcHRpb246CiAgX3BxXy5ob2xkYWJsZV9wb3J0YWw9dHJ1ZQoKV2hlbiBlbmFi bGVkLCBjbGllbnRzIGNhbiBpbmNsdWRlIGFuIG9wdGlvbmFsIEludDMyIGN1cnNvciBvcHRpb25z CmZpZWxkIGF0IHRoZSBlbmQgb2YgQmluZCBtZXNzYWdlcy4gVGhlIENVUlNPUl9PUFRfSE9MRCBi aXQgKDB4MDAyMCkKY3JlYXRlcyBhIGhvbGRhYmxlIHBvcnRhbCB0aGF0IHN1cnZpdmVzIHRyYW5z YWN0aW9uIGNvbW1pdC4KCkJlbmVmaXRzOgotIEJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBwcm90 b2NvbCAzLjIKLSBPcHQtaW4gZmVhdHVyZSB2aWEgY29ubmVjdGlvbiBwYXJhbWV0ZXIKLSBVc2Vz IHN0YW5kYXJkIF9wcV8uIHByb3RvY29sIG9wdGlvbiBtZWNoYW5pc20KLSBTZXJ2ZXIgY2FuIG5l Z290aWF0ZSBzdXBwb3J0IHZpYSBOZWdvdGlhdGVQcm90b2NvbFZlcnNpb24KCkJhY2tlbmQgQ2hh bmdlczoKLSBBZGQgaG9sZGFibGVfcG9ydGFsX2VuYWJsZWQgZmxhZyB0byBQb3J0IHN0cnVjdHVy ZQotIFBhcnNlIF9wcV8uaG9sZGFibGVfcG9ydGFsIGluIHN0YXJ0dXAgcGFja2V0IChiYWNrZW5k X3N0YXJ0dXAuYykKLSBDaGVjayBvcHRpb24gZmxhZyBpbnN0ZWFkIG9mIHByb3RvY29sIHZlcnNp b24gaW4gZXhlY19iaW5kX21lc3NhZ2UoKQotIFJlYWQgY3Vyc29yIG9wdGlvbnMgZnJvbSBCaW5k IG1lc3NhZ2Ugb25seSB3aGVuIGVuYWJsZWQKCkNsaWVudCAobGlicHEpIENoYW5nZXM6Ci0gQWRk IGhvbGRhYmxlX3BvcnRhbCBjb25uZWN0aW9uIHBhcmFtZXRlciAoZGVmYXVsdCAiMCIpCi0gQWRk IGhvbGRhYmxlX3BvcnRhbF9lbmFibGVkIGZsYWcgdG8gUEdjb25uIHN0cnVjdHVyZQotIFNlbmQg X3BxXy5ob2xkYWJsZV9wb3J0YWw9dHJ1ZSBpbiBzdGFydHVwIHBhY2tldCB3aGVuIGVuYWJsZWQK LSBJbmNsdWRlIGN1cnNvciBvcHRpb25zIGluIEJpbmQgbWVzc2FnZSB3aGVuIGVuYWJsZWQKLSBV cGRhdGUgUFFzZW5kUXVlcnlQcmVwYXJlZFdpdGhDdXJzb3JPcHRpb25zKCkgYW5kCiAgUFFzZW5k QmluZFdpdGhDdXJzb3JPcHRpb25zKCkgdG8gdXNlIG9wdGlvbiBmbGFnCgpEb2N1bWVudGF0aW9u OgotIERvY3VtZW50IF9wcV8uaG9sZGFibGVfcG9ydGFsIGluIHByb3RvY29sIG9wdGlvbnMgdGFi bGUKLSBEZXNjcmliZSBjdXJzb3Igb3B0aW9ucyBmaWVsZCBpbiBCaW5kIG1lc3NhZ2UgZm9ybWF0 Ci0gRXhwbGFpbiBob2xkYWJsZSBwb3J0YWwgbGlmZWN5Y2xlIGFuZCBiZWhhdmlvcgoKVXNhZ2U6 CiAgY29ubiA9IFBRY29ubmVjdGRiKCJkYm5hbWU9cG9zdGdyZXMgaG9sZGFibGVfcG9ydGFsPTEi KTsKICBQUXNlbmRRdWVyeVByZXBhcmVkV2l0aEN1cnNvck9wdGlvbnMoY29ubiwgc3RtdE5hbWUs IC4uLiwgMHgwMDIwKTsKClRoaXMgcmVwbGFjZXMgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHVz aW5nIHByb3RvY29sIHZlcnNpb24gMy4zLgotLS0KIGRvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21s ICAgICAgICAgICAgICAgICAgICB8ICAzNiArKy0KIHNyYy9iYWNrZW5kL3Rjb3AvYmFja2VuZF9z dGFydHVwLmMgICAgICAgICAgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j ICAgICAgICAgICAgICAgICAgIHwgIDM3ICsrKwogc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUu aCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMu dHh0ICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0 LmMgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jICAg ICAgICAgICAgICAgIHwgMjIyICsrKysrKysrKysrKysrKysrKwogc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtcHJvdG9jb2wzLmMgICAgICAgICAgIHwgICA3ICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBx L2xpYnBxLWZlLmggICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9s aWJwcS1pbnQuaCAgICAgICAgICAgICAgfCAgIDIgKwogLi4uL21vZHVsZXMvbGlicHFfcGlwZWxp bmUvbGlicHFfcGlwZWxpbmUuYyAgIHwgIDkwICsrKysrKysKIDExIGZpbGVzIGNoYW5nZWQsIDQz MCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9wcm90b2NvbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwKaW5kZXggNDlmODE2 NzY3MTIuLjZlOTgwZmIxZDUxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbApAQCAtMzY2LDYgKzM2NiwxNiBAQAog ICAgICA8L3RoZWFkPgogCiAgICAgIDx0Ym9keT4KKyAgICAgIDxyb3c+CisgICAgICA8ZW50cnk+ PGxpdGVyYWw+X3BxXy5ob2xkYWJsZV9wb3J0YWw8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgIDxl bnRyeT5FbmFibGVzIHN1cHBvcnQgZm9yIGN1cnNvciBvcHRpb25zIGluIHRoZSBCaW5kIG1lc3Nh Z2UuCisgICAgICAgIFdoZW4gc2V0IHRvIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LCB0aGUgY2xp ZW50IG1heSBpbmNsdWRlIGFuCisgICAgICAgIG9wdGlvbmFsIGN1cnNvciBvcHRpb25zIGZpZWxk IGluIEJpbmQgbWVzc2FnZXMgdG8gY29udHJvbCBwb3J0YWwKKyAgICAgICAgYmVoYXZpb3IsIHN1 Y2ggYXMgY3JlYXRpbmcgaG9sZGFibGUgcG9ydGFscyB0aGF0IHN1cnZpdmUgdHJhbnNhY3Rpb24K KyAgICAgICAgY29tbWl0LiBTZWUgPHhyZWYgbGlua2VuZD0icHJvdG9jb2wtZmxvdy1leHQtcXVl cnkiLz4gZm9yIGRldGFpbHMuCisgICAgICA8L2VudHJ5PgorICAgICAgPC9yb3c+CisKICAgICAg IDxyb3c+CiAgICAgICA8ZW50cnk+PGxpdGVyYWw+X3BxXy48cmVwbGFjZWFibGU+W25hbWVdPC9y ZXBsYWNlYWJsZT48L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDxlbnRyeT5Bbnkgb3RoZXIgcGFy YW1ldGVyIG5hbWVzIGJlZ2lubmluZyB3aXRoIDxsaXRlcmFsPl9wcV8uPC9saXRlcmFsPiwKQEAg LTExMDEsNiArMTExMSw5IEBAIFNFTENUIDEvMDs8IS0tIHRoaXMgdHlwbyBpcyBpbnRlbnRpb25h bCAtLT4KICAgICBwYXNzIE5VTEwgdmFsdWVzIGZvciB0aGVtIGluIHRoZSBCaW5kIG1lc3NhZ2Uu KQogICAgIEJpbmQgYWxzbyBzcGVjaWZpZXMgdGhlIGZvcm1hdCB0byB1c2UgZm9yIGFueSBkYXRh IHJldHVybmVkCiAgICAgYnkgdGhlIHF1ZXJ5OyB0aGUgZm9ybWF0IGNhbiBiZSBzcGVjaWZpZWQg b3ZlcmFsbCwgb3IgcGVyLWNvbHVtbi4KKyAgICBJZiB0aGUgPGxpdGVyYWw+X3BxXy5ob2xkYWJs ZV9wb3J0YWw8L2xpdGVyYWw+IHByb3RvY29sIG9wdGlvbiBpcyBlbmFibGVkLAorICAgIEJpbmQg Y2FuIG9wdGlvbmFsbHkgaW5jbHVkZSBjdXJzb3Igb3B0aW9ucyB0byBjb250cm9sIHBvcnRhbCBi ZWhhdmlvciwKKyAgICBzdWNoIGFzIGNyZWF0aW5nIGEgaG9sZGFibGUgcG9ydGFsIHRoYXQgc3Vy dml2ZXMgdHJhbnNhY3Rpb24gY29tbWl0LgogICAgIFRoZSByZXNwb25zZSBpcyBlaXRoZXIgQmlu ZENvbXBsZXRlIG9yIEVycm9yUmVzcG9uc2UuCiAgICA8L3BhcmE+CiAKQEAgLTExMjUsNyArMTEz OCwxMSBAQCBTRUxDVCAxLzA7PCEtLSB0aGlzIHR5cG8gaXMgaW50ZW50aW9uYWwgLS0+CiAKICAg IDxwYXJhPgogICAgIElmIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLCBhIG5hbWVkIHBvcnRhbCBvYmpl Y3QgbGFzdHMgdGlsbCB0aGUgZW5kIG9mIHRoZQotICAgIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHVu bGVzcyBleHBsaWNpdGx5IGRlc3Ryb3llZC4gIEFuIHVubmFtZWQgcG9ydGFsIGlzCisgICAgY3Vy cmVudCB0cmFuc2FjdGlvbiwgdW5sZXNzIGV4cGxpY2l0bHkgZGVzdHJveWVkLiAgSG93ZXZlciwg aWYgdGhlCisgICAgPGxpdGVyYWw+X3BxXy5ob2xkYWJsZV9wb3J0YWw8L2xpdGVyYWw+IHByb3Rv Y29sIG9wdGlvbiBpcyBlbmFibGVkIGFuZAorICAgIHRoZSBwb3J0YWwgaXMgY3JlYXRlZCB3aXRo IHRoZSBDVVJTT1JfT1BUX0hPTEQgb3B0aW9uLCB0aGUgcG9ydGFsIGJlY29tZXMKKyAgICA8Zmly c3R0ZXJtPmhvbGRhYmxlPC9maXJzdHRlcm0+IGFuZCBzdXJ2aXZlcyB0cmFuc2FjdGlvbiBjb21t aXQsIHJlbWFpbmluZworICAgIHZhbGlkIHVudGlsIGV4cGxpY2l0bHkgY2xvc2VkIG9yIHRoZSBz ZXNzaW9uIGVuZHMuICBBbiB1bm5hbWVkIHBvcnRhbCBpcwogICAgIGRlc3Ryb3llZCBhdCB0aGUg ZW5kIG9mIHRoZSB0cmFuc2FjdGlvbiwgb3IgYXMgc29vbiBhcyB0aGUgbmV4dCBCaW5kCiAgICAg c3RhdGVtZW50IHNwZWNpZnlpbmcgdGhlIHVubmFtZWQgcG9ydGFsIGFzIGRlc3RpbmF0aW9uIGlz IGlzc3VlZC4gIChOb3RlCiAgICAgdGhhdCBhIHNpbXBsZSBRdWVyeSBtZXNzYWdlIGFsc28gZGVz dHJveXMgdGhlIHVubmFtZWQgcG9ydGFsLikgIE5hbWVkCkBAIC00NDExLDYgKzQ0MjgsMjMgQEAg cHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAiSURFTlRJRllf U1lTVEVNOyIKICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L3Zh cmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT5JbnQzMjwv dGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQ3Vyc29y IG9wdGlvbnMgKG9wdGlvbmFsLCBvbmx5IGlmIDxsaXRlcmFsPl9wcV8uaG9sZGFibGVfcG9ydGFs PC9saXRlcmFsPgorICAgICAgICAgaXMgZW5hYmxlZCkuICBBIGJpdG1hc2sgb2Ygb3B0aW9ucyBm b3IgdGhlIHBvcnRhbCBiZWluZyBjcmVhdGVkLgorICAgICAgICAgQ3VycmVudGx5IGRlZmluZWQg Yml0cyBhcmU6CisgICAgICAgICA8bGl0ZXJhbD4weDAwMDE8L2xpdGVyYWw+IChDVVJTT1JfT1BU X0JJTkFSWSwgc2FtZSBhcyBzZXR0aW5nCisgICAgICAgICByZXN1bHQgZm9ybWF0IGNvZGVzIHRv IGJpbmFyeSksCisgICAgICAgICA8bGl0ZXJhbD4weDAwMjA8L2xpdGVyYWw+IChDVVJTT1JfT1BU X0hPTEQsIGNyZWF0ZXMgYSBob2xkYWJsZQorICAgICAgICAgcG9ydGFsIHRoYXQgc3Vydml2ZXMg dHJhbnNhY3Rpb24gY29tbWl0KS4KKyAgICAgICAgIFRoaXMgZmllbGQgaXMgb3B0aW9uYWw7IGlm IG5vdCBwcmVzZW50LCBubyBjdXJzb3Igb3B0aW9ucyBhcmUgc2V0LgorICAgICAgICAgTmFtZWQg cG9ydGFscyBhcmUgcmVxdWlyZWQgd2hlbiB1c2luZyBDVVJTT1JfT1BUX0hPTEQuCisgICAgICAg IDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAg IDwvdmFyaWFibGVsaXN0PgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvYmFja2VuZF9zdGFydHVwLmMgYi9zcmMvYmFja2Vu ZC90Y29wL2JhY2tlbmRfc3RhcnR1cC5jCmluZGV4IGM1MTcxMTU5MjdjLi4wNTViZWUyODdmNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYworKysgYi9zcmMv YmFja2VuZC90Y29wL2JhY2tlbmRfc3RhcnR1cC5jCkBAIC03NzksMTEgKzc3OSwyNCBAQCBQcm9j ZXNzU3RhcnR1cFBhY2tldChQb3J0ICpwb3J0LCBib29sIHNzbF9kb25lLCBib29sIGdzc19kb25l KQogCQkJewogCQkJCS8qCiAJCQkJICogQW55IG9wdGlvbiBiZWdpbm5pbmcgd2l0aCBfcHFfLiBp cyByZXNlcnZlZCBmb3IgdXNlIGFzIGEKLQkJCQkgKiBwcm90b2NvbC1sZXZlbCBvcHRpb24sIGJ1 dCBhdCBwcmVzZW50IG5vIHN1Y2ggb3B0aW9ucyBhcmUKLQkJCQkgKiBkZWZpbmVkLgorCQkJCSAq IHByb3RvY29sLWxldmVsIG9wdGlvbi4KIAkJCQkgKi8KLQkJCQl1bnJlY29nbml6ZWRfcHJvdG9j b2xfb3B0aW9ucyA9Ci0JCQkJCWxhcHBlbmQodW5yZWNvZ25pemVkX3Byb3RvY29sX29wdGlvbnMs IHBzdHJkdXAobmFtZXB0cikpOworCQkJCWlmIChzdHJjbXAobmFtZXB0ciwgIl9wcV8uaG9sZGFi bGVfcG9ydGFsIikgPT0gMCkKKwkJCQl7CisJCQkJCS8qIEVuYWJsZSBob2xkYWJsZSBwb3J0YWwg c3VwcG9ydCB2aWEgQmluZCBtZXNzYWdlICovCisJCQkJCWlmICghcGFyc2VfYm9vbCh2YWxwdHIs ICZwb3J0LT5ob2xkYWJsZV9wb3J0YWxfZW5hYmxlZCkpCisJCQkJCQllcmVwb3J0KEZBVEFMLAor CQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CQkJIGVycm1zZygiaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyIFwiJXNcIjogXCIlc1wiIiwK KwkJCQkJCQkJCQkiX3BxXy5ob2xkYWJsZV9wb3J0YWwiLAorCQkJCQkJCQkJCXZhbHB0cikpKTsK KwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyogVW5yZWNvZ25pemVkIHByb3RvY29sIG9w dGlvbiAqLworCQkJCQl1bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0aW9ucyA9CisJCQkJCQlsYXBw ZW5kKHVucmVjb2duaXplZF9wcm90b2NvbF9vcHRpb25zLCBwc3RyZHVwKG5hbWVwdHIpKTsKKwkJ CQl9CiAJCQl9CiAJCQllbHNlCiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bv c3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggZDAxYTA5ZGQwYzQu LjRlNGRlODIyMTRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysr IGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xNjMzLDYgKzE2MzMsNyBAQCBleGVj X2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJaW50CQkJbnVtUGFyYW1z OwogCWludAkJCW51bVJGb3JtYXRzOwogCWludDE2CSAgICpyZm9ybWF0cyA9IE5VTEw7CisJaW50 CQkJY3Vyc29yT3B0aW9ucyA9IDA7CiAJQ2FjaGVkUGxhblNvdXJjZSAqcHNyYzsKIAlDYWNoZWRQ bGFuICpjcGxhbjsKIAlQb3J0YWwJCXBvcnRhbDsKQEAgLTIwMDksNiArMjAxMCwxMyBAQCBleGVj X2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJCQlyZm9ybWF0c1tpXSA9 IHBxX2dldG1zZ2ludChpbnB1dF9tZXNzYWdlLCAyKTsKIAl9CiAKKwkvKiBHZXQgY3Vyc29yIG9w dGlvbnMgaWYgcHJlc2VudCAoX3BxXy5ob2xkYWJsZV9wb3J0YWwgZW5hYmxlZCkgKi8KKwlpZiAo TXlQcm9jUG9ydC0+aG9sZGFibGVfcG9ydGFsX2VuYWJsZWQgJiYKKwkJaW5wdXRfbWVzc2FnZS0+ Y3Vyc29yIDwgaW5wdXRfbWVzc2FnZS0+bGVuKQorCXsKKwkJY3Vyc29yT3B0aW9ucyA9IHBxX2dl dG1zZ2ludChpbnB1dF9tZXNzYWdlLCA0KTsKKwkJZWxvZyhERUJVRzEsICJleGVjX2JpbmRfbWVz c2FnZTogcmVhZCBjdXJzb3JPcHRpb25zPTB4JTA0eCBmcm9tIG1lc3NhZ2UiLCBjdXJzb3JPcHRp b25zKTsKKwl9CiAJcHFfZ2V0bXNnZW5kKGlucHV0X21lc3NhZ2UpOwogCiAJLyoKQEAgLTIwNTcs NiArMjA2NSwyNiBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2Up CiAJICovCiAJUG9ydGFsU2V0UmVzdWx0Rm9ybWF0KHBvcnRhbCwgbnVtUkZvcm1hdHMsIHJmb3Jt YXRzKTsKIAorCS8qIEFwcGx5IGN1cnNvciBvcHRpb25zICovCisJaWYgKGN1cnNvck9wdGlvbnMg JiBDVVJTT1JfT1BUX0hPTEQpCisJeworCQllbG9nKERFQlVHMSwgImV4ZWNfYmluZF9tZXNzYWdl OiBhcHBseWluZyBDVVJTT1JfT1BUX0hPTEQgdG8gcG9ydGFsICclcyciLCBwb3J0YWxfbmFtZSk7 CisKKwkJaWYgKHBvcnRhbF9uYW1lWzBdID09ICdcMCcpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfQ1VSU09SX05BTUUpLAorCQkJCQkgZXJybXNnKCJo b2xkYWJsZSBjdXJzb3JzIHJlcXVpcmUgYSBuYW1lZCBwb3J0YWwiKSkpOworCQlpZiAoSW5TZWN1 cml0eVJlc3RyaWN0ZWRPcGVyYXRpb24oKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJCSBlcnJtc2coImNhbm5v dCBjcmVhdGUgY3Vyc29yIFdJVEggSE9MRCBpbiByZXN0cmljdGVkIG9wZXJhdGlvbiIpKSk7CisK KwkJZWxvZyhERUJVRzEsICJleGVjX2JpbmRfbWVzc2FnZTogQ1VSU09SX09QVF9IT0xEIHZhbGlk YXRpb24gcGFzc2VkIGZvciBwb3J0YWwgJyVzJyIsIHBvcnRhbF9uYW1lKTsKKwl9CisKKwlwb3J0 YWwtPmN1cnNvck9wdGlvbnMgPSBjdXJzb3JPcHRpb25zOworCWVsb2coREVCVUcxLCAiZXhlY19i aW5kX21lc3NhZ2U6IHBvcnRhbCAnJXMnIGN1cnNvck9wdGlvbnMgc2V0IHRvIDB4JTA0eCIsIHBv cnRhbF9uYW1lLCBjdXJzb3JPcHRpb25zKTsKKwogCS8qCiAJICogRG9uZSBiaW5kaW5nOyByZW1v dmUgdGhlIHBhcmFtZXRlcnMgZXJyb3IgY2FsbGJhY2suICBFbnRyaWVzIGVtaXR0ZWQKIAkgKiBs YXRlciBkZXRlcm1pbmUgaW5kZXBlbmRlbnRseSB3aGV0aGVyIHRvIGxvZyB0aGUgcGFyYW1ldGVy cyBvciBub3QuCkBAIC00OTQyLDcgKzQ5NzAsMTYgQEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAKIAkJCQkJCQkJcG9ydGFsID0gR2V0UG9y dGFsQnlOYW1lKGNsb3NlX3RhcmdldCk7CiAJCQkJCQkJCWlmIChQb3J0YWxJc1ZhbGlkKHBvcnRh bCkpCisJCQkJCQkJCXsKKwkJCQkJCQkJCWVsb2coREVCVUcxLCAiQ2xvc2UgbWVzc2FnZTogY2xv c2luZyBwb3J0YWwgJyVzJyAoY3Vyc29yT3B0aW9ucz0weCUwNHgpIiwKKwkJCQkJCQkJCQkgY2xv c2VfdGFyZ2V0LCBwb3J0YWwtPmN1cnNvck9wdGlvbnMpOwogCQkJCQkJCQkJUG9ydGFsRHJvcChw b3J0YWwsIGZhbHNlKTsKKwkJCQkJCQkJCWVsb2coREVCVUcxLCAiQ2xvc2UgbWVzc2FnZTogcG9y dGFsICclcycgY2xvc2VkIHN1Y2Nlc3NmdWxseSIsIGNsb3NlX3RhcmdldCk7CisJCQkJCQkJCX0K KwkJCQkJCQkJZWxzZQorCQkJCQkJCQl7CisJCQkJCQkJCQllbG9nKERFQlVHMSwgIkNsb3NlIG1l c3NhZ2U6IHBvcnRhbCAnJXMnIG5vdCBmb3VuZCIsIGNsb3NlX3RhcmdldCk7CisJCQkJCQkJCX0K IAkJCQkJCQl9CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbGlicHEvbGlicHEtYmUuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgK aW5kZXggOTIxYjJkYWE0ZmYuLjFjMTFkNzA2ZWRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9s aWJwcS9saWJwcS1iZS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKQEAgLTE1 MSw2ICsxNTEsNyBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0CiAJY2hhcgkgICAqdXNlcl9uYW1lOwog CWNoYXIJICAgKmNtZGxpbmVfb3B0aW9uczsKIAlMaXN0CSAgICpndWNfb3B0aW9uczsKKwlib29s CSAgICBob2xkYWJsZV9wb3J0YWxfZW5hYmxlZDsJLyogX3BxXy5ob2xkYWJsZV9wb3J0YWwgb3B0 aW9uICovCiAKIAkvKgogCSAqIFRoZSBzdGFydHVwIHBhY2tldCBhcHBsaWNhdGlvbiBuYW1lLCBv bmx5IHVzZWQgaGVyZSBmb3IgdGhlICJjb25uZWN0aW9uCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9leHBvcnRzLnR4dCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0 CmluZGV4IGRiYmFlNjQyZDc2Li5iMDFjMDk0ODU4NSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFj ZXMvbGlicHEvZXhwb3J0cy50eHQKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50 eHQKQEAgLTIxMCwzICsyMTAsNSBAQCBQUWdldEF1dGhEYXRhSG9vayAgICAgICAgIDIwNwogUFFk ZWZhdWx0QXV0aERhdGFIb29rICAgICAyMDgKIFBRZnVsbFByb3RvY29sVmVyc2lvbiAgICAgMjA5 CiBhcHBlbmRQUUV4cEJ1ZmZlclZBICAgICAgIDIxMAorUFFzZW5kUXVlcnlQcmVwYXJlZFdpdGhD dXJzb3JPcHRpb25zIDIxMQorUFFzZW5kQmluZFdpdGhDdXJzb3JPcHRpb25zIDIxMgpkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jIGIvc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtY29ubmVjdC5jCmluZGV4IGI0MmEwY2I0Yzc4Li5hMDYyMjgyMGQ3ZSAxMDA2NDQK LS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwpAQCAtNDE3LDYgKzQxNywxMCBAQCBzdGF0aWMgY29uc3Qg aW50ZXJuYWxQUWNvbm5pbmZvT3B0aW9uIFBRY29ubmluZm9PcHRpb25zW10gPSB7CiAJCSJTU0wt S2V5LUxvZy1GaWxlIiwgIkQiLCA2NCwKIAlvZmZzZXRvZihzdHJ1Y3QgcGdfY29ubiwgc3Nsa2V5 bG9nZmlsZSl9LAogCisJeyJob2xkYWJsZV9wb3J0YWwiLCBOVUxMLCAiMCIsIE5VTEwsCisJCSJI b2xkYWJsZS1Qb3J0YWwiLCAiIiwgMSwKKwlvZmZzZXRvZihzdHJ1Y3QgcGdfY29ubiwgaG9sZGFi bGVfcG9ydGFsKX0sCisKIAkvKiBUZXJtaW5hdGluZyBlbnRyeSAtLS0gTVVTVCBCRSBMQVNUICov CiAJe05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAJTlVMTCwgTlVMTCwgMH0KQEAgLTgzNjksNiAr ODM3MywxMSBAQCBwcVBhcnNlUHJvdG9jb2xWZXJzaW9uKGNvbnN0IGNoYXIgKnZhbHVlLCBQcm90 b2NvbFZlcnNpb24gKnJlc3VsdCwgUEdjb25uICpjb25uLAogCQkqcmVzdWx0ID0gUEdfUFJPVE9D T0woMywgMik7CiAJCXJldHVybiB0cnVlOwogCX0KKwlpZiAoc3RyY21wKHZhbHVlLCAiMy4zIikg PT0gMCkKKwl7CisJCSpyZXN1bHQgPSBQR19QUk9UT0NPTCgzLCAzKTsKKwkJcmV0dXJuIHRydWU7 CisJfQogCiAJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgImludmFsaWQgJXMgdmFsdWU6 IFwiJXNcIiIsCiAJCQkJCQkJY29udGV4dCwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVy ZmFjZXMvbGlicHEvZmUtZXhlYy5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jCmlu ZGV4IDIwM2QzODhiZGJmLi45ZmFjYjYwNmYyMCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtZXhlYy5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWV4ZWMuYwpAQCAt MTY4Miw2ICsxNjgyLDIyOCBAQCBQUXNlbmRRdWVyeVByZXBhcmVkKFBHY29ubiAqY29ubiwKIAkJ CQkJCSAgIHJlc3VsdEZvcm1hdCk7CiB9CiAKK2ludAorUFFzZW5kUXVlcnlQcmVwYXJlZFdpdGhD dXJzb3JPcHRpb25zKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpzdG10TmFt ZSwKKwkJCQkJCQkJCSBpbnQgblBhcmFtcywKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpjb25zdCAq cGFyYW1WYWx1ZXMsCisJCQkJCQkJCQkgY29uc3QgaW50ICpwYXJhbUxlbmd0aHMsCisJCQkJCQkJ CQkgY29uc3QgaW50ICpwYXJhbUZvcm1hdHMsCisJCQkJCQkJCQkgaW50IHJlc3VsdEZvcm1hdCwK KwkJCQkJCQkJCSBjb25zdCBjaGFyICpwb3J0YWxOYW1lLAorCQkJCQkJCQkJIGludCBjdXJzb3JP cHRpb25zKQoreworCVBHY21kUXVldWVFbnRyeSAqZW50cnk7CisKKwlpZiAoIVBRc2VuZFF1ZXJ5 U3RhcnQoY29ubiwgdHJ1ZSkpCisJCXJldHVybiAwOworCisJaWYgKCFzdG10TmFtZSkKKwl7CisJ CWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJzdGF0ZW1lbnQgbmFtZSBpcyBhIG51bGwg cG9pbnRlciIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGN1cnNvck9wdGlvbnMgJiAweDAw MjApICYmICghcG9ydGFsTmFtZSB8fCBwb3J0YWxOYW1lWzBdID09ICdcMCcpKQorCXsKKwkJbGli cHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgImhvbGRhYmxlIGN1cnNvcnMgcmVxdWlyZSBhIG5h bWVkIHBvcnRhbCIpOworCQlyZXR1cm4gMDsKKwl9CisKKwllbnRyeSA9IHBxQWxsb2NDbWRRdWV1 ZUVudHJ5KGNvbm4pOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChw cVB1dE1zZ1N0YXJ0KFBxTXNnX0JpbmQsIGNvbm4pIDwgMCB8fAorCQlwcVB1dHMocG9ydGFsTmFt ZSA/IHBvcnRhbE5hbWUgOiAiIiwgY29ubikgPCAwIHx8CisJCXBxUHV0cyhzdG10TmFtZSwgY29u bikgPCAwKQorCQlnb3RvIHNlbmRGYWlsZWQ7CisKKwlpZiAoblBhcmFtcyA+IDAgJiYgcGFyYW1G b3JtYXRzKQorCXsKKwkJaWYgKHBxUHV0SW50KG5QYXJhbXMsIDIsIGNvbm4pIDwgMCkKKwkJCWdv dG8gc2VuZEZhaWxlZDsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuUGFyYW1zOyBpKyspCisJCQlp ZiAocHFQdXRJbnQocGFyYW1Gb3JtYXRzW2ldLCAyLCBjb25uKSA8IDApCisJCQkJZ290byBzZW5k RmFpbGVkOworCX0KKwllbHNlIGlmIChwcVB1dEludCgwLCAyLCBjb25uKSA8IDApCisJCWdvdG8g c2VuZEZhaWxlZDsKKworCWlmIChwcVB1dEludChuUGFyYW1zLCAyLCBjb25uKSA8IDApCisJCWdv dG8gc2VuZEZhaWxlZDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgblBhcmFtczsgaSsrKQorCXsK KwkJaWYgKHBhcmFtVmFsdWVzICYmIHBhcmFtVmFsdWVzW2ldKQorCQl7CisJCQlpbnQgbGVuID0g cGFyYW1MZW5ndGhzID8gcGFyYW1MZW5ndGhzW2ldIDogc3RybGVuKHBhcmFtVmFsdWVzW2ldKTsK KwkJCWlmIChwcVB1dEludChsZW4sIDQsIGNvbm4pIDwgMCB8fAorCQkJCXBxUHV0bmNoYXIocGFy YW1WYWx1ZXNbaV0sIGxlbiwgY29ubikgPCAwKQorCQkJCWdvdG8gc2VuZEZhaWxlZDsKKwkJfQor CQllbHNlIGlmIChwcVB1dEludCgtMSwgNCwgY29ubikgPCAwKQorCQkJZ290byBzZW5kRmFpbGVk OworCX0KKworCWlmIChwcVB1dEludCgxLCAyLCBjb25uKSA8IDAgfHwKKwkJcHFQdXRJbnQocmVz dWx0Rm9ybWF0LCAyLCBjb25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsKKworCS8qIFNlbmQg Y3Vyc29yIG9wdGlvbnMgaWYgX3BxXy5ob2xkYWJsZV9wb3J0YWwgZW5hYmxlZCAqLworCWlmIChj b25uLT5ob2xkYWJsZV9wb3J0YWxfZW5hYmxlZCkKKwl7CisJCWlmIChwcVB1dEludChjdXJzb3JP cHRpb25zLCA0LCBjb25uKSA8IDApCisJCQlnb3RvIHNlbmRGYWlsZWQ7CisJfQorCisJaWYgKHBx UHV0TXNnRW5kKGNvbm4pIDwgMCkKKwkJZ290byBzZW5kRmFpbGVkOworCisJaWYgKHBxUHV0TXNn U3RhcnQoUHFNc2dfRGVzY3JpYmUsIGNvbm4pIDwgMCB8fAorCQlwcVB1dGMoJ1AnLCBjb25uKSA8 IDAgfHwKKwkJcHFQdXRzKHBvcnRhbE5hbWUgPyBwb3J0YWxOYW1lIDogIiIsIGNvbm4pIDwgMCB8 fAorCQlwcVB1dE1zZ0VuZChjb25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsKKworCWlmIChw cVB1dE1zZ1N0YXJ0KFBxTXNnX0V4ZWN1dGUsIGNvbm4pIDwgMCB8fAorCQlwcVB1dHMocG9ydGFs TmFtZSA/IHBvcnRhbE5hbWUgOiAiIiwgY29ubikgPCAwIHx8CisJCXBxUHV0SW50KDAsIDQsIGNv bm4pIDwgMCB8fAorCQlwcVB1dE1zZ0VuZChjb25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsK KworCWlmIChjb25uLT5waXBlbGluZVN0YXR1cyA9PSBQUV9QSVBFTElORV9PRkYpCisJeworCQlp ZiAocHFQdXRNc2dTdGFydChQcU1zZ19TeW5jLCBjb25uKSA8IDAgfHwKKwkJCXBxUHV0TXNnRW5k KGNvbm4pIDwgMCkKKwkJCWdvdG8gc2VuZEZhaWxlZDsKKwl9CisKKwllbnRyeS0+cXVlcnljbGFz cyA9IFBHUVVFUllfRVhURU5ERUQ7CisKKwlpZiAocHFQaXBlbGluZUZsdXNoKGNvbm4pIDwgMCkK KwkJZ290byBzZW5kRmFpbGVkOworCisJY29ubi0+YXN5bmNTdGF0dXMgPSBQR0FTWU5DX0JVU1k7 CisJcmV0dXJuIDE7CisKK3NlbmRGYWlsZWQ6CisJcHFSZWN5Y2xlQ21kUXVldWVFbnRyeShjb25u LCBlbnRyeSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQUXNlbmRCaW5kV2l0aEN1cnNvck9w dGlvbnMKKyAqCUxpa2UgUFFzZW5kUXVlcnlQcmVwYXJlZFdpdGhDdXJzb3JPcHRpb25zIGJ1dCBz ZW5kcyBvbmx5IEJpbmQrRGVzY3JpYmUsCisgKglub3QgRXhlY3V0ZS4gVGhpcyBhbGxvd3MgY3Jl YXRpbmcgYSBwb3J0YWwgdGhhdCBjYW4gYmUgZXhlY3V0ZWQgbGF0ZXIsCisgKgl3aGljaCBpcyBu ZWNlc3NhcnkgZm9yIHRlc3RpbmcgaG9sZGFibGUgcG9ydGFscyAoZXhlY3V0ZSBhZnRlciBjb21t aXQpLgorICovCitpbnQKK1BRc2VuZEJpbmRXaXRoQ3Vyc29yT3B0aW9ucyhQR2Nvbm4gKmNvbm4s CisJCQkJCQkJIGNvbnN0IGNoYXIgKnN0bXROYW1lLAorCQkJCQkJCSBpbnQgblBhcmFtcywKKwkJ CQkJCQkgY29uc3QgY2hhciAqY29uc3QgKnBhcmFtVmFsdWVzLAorCQkJCQkJCSBjb25zdCBpbnQg KnBhcmFtTGVuZ3RocywKKwkJCQkJCQkgY29uc3QgaW50ICpwYXJhbUZvcm1hdHMsCisJCQkJCQkJ IGludCByZXN1bHRGb3JtYXQsCisJCQkJCQkJIGNvbnN0IGNoYXIgKnBvcnRhbE5hbWUsCisJCQkJ CQkJIGludCBjdXJzb3JPcHRpb25zKQoreworCVBHY21kUXVldWVFbnRyeSAqZW50cnk7CisKKwlp ZiAoIVBRc2VuZFF1ZXJ5U3RhcnQoY29ubiwgdHJ1ZSkpCisJCXJldHVybiAwOworCisJaWYgKCFz dG10TmFtZSkKKwl7CisJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJzdGF0ZW1lbnQg bmFtZSBpcyBhIG51bGwgcG9pbnRlciIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGN1cnNv ck9wdGlvbnMgJiAweDAwMjApICYmICghcG9ydGFsTmFtZSB8fCBwb3J0YWxOYW1lWzBdID09ICdc MCcpKQorCXsKKwkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgImhvbGRhYmxlIGN1cnNv cnMgcmVxdWlyZSBhIG5hbWVkIHBvcnRhbCIpOworCQlyZXR1cm4gMDsKKwl9CisKKwllbnRyeSA9 IHBxQWxsb2NDbWRRdWV1ZUVudHJ5KGNvbm4pOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1 cm4gMDsKKworCWlmIChwcVB1dE1zZ1N0YXJ0KFBxTXNnX0JpbmQsIGNvbm4pIDwgMCB8fAorCQlw cVB1dHMocG9ydGFsTmFtZSA/IHBvcnRhbE5hbWUgOiAiIiwgY29ubikgPCAwIHx8CisJCXBxUHV0 cyhzdG10TmFtZSwgY29ubikgPCAwKQorCQlnb3RvIHNlbmRGYWlsZWQ7CisKKwlpZiAoblBhcmFt cyA+IDAgJiYgcGFyYW1Gb3JtYXRzKQorCXsKKwkJaWYgKHBxUHV0SW50KG5QYXJhbXMsIDIsIGNv bm4pIDwgMCkKKwkJCWdvdG8gc2VuZEZhaWxlZDsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuUGFy YW1zOyBpKyspCisJCQlpZiAocHFQdXRJbnQocGFyYW1Gb3JtYXRzW2ldLCAyLCBjb25uKSA8IDAp CisJCQkJZ290byBzZW5kRmFpbGVkOworCX0KKwllbHNlIGlmIChwcVB1dEludCgwLCAyLCBjb25u KSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsKKworCWlmIChwcVB1dEludChuUGFyYW1zLCAyLCBj b25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxlZDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgblBh cmFtczsgaSsrKQorCXsKKwkJaWYgKHBhcmFtVmFsdWVzICYmIHBhcmFtVmFsdWVzW2ldKQorCQl7 CisJCQlpbnQgbGVuID0gcGFyYW1MZW5ndGhzID8gcGFyYW1MZW5ndGhzW2ldIDogc3RybGVuKHBh cmFtVmFsdWVzW2ldKTsKKwkJCWlmIChwcVB1dEludChsZW4sIDQsIGNvbm4pIDwgMCB8fAorCQkJ CXBxUHV0bmNoYXIocGFyYW1WYWx1ZXNbaV0sIGxlbiwgY29ubikgPCAwKQorCQkJCWdvdG8gc2Vu ZEZhaWxlZDsKKwkJfQorCQllbHNlIGlmIChwcVB1dEludCgtMSwgNCwgY29ubikgPCAwKQorCQkJ Z290byBzZW5kRmFpbGVkOworCX0KKworCWlmIChwcVB1dEludCgxLCAyLCBjb25uKSA8IDAgfHwK KwkJcHFQdXRJbnQocmVzdWx0Rm9ybWF0LCAyLCBjb25uKSA8IDApCisJCWdvdG8gc2VuZEZhaWxl ZDsKKworCS8qIFNlbmQgY3Vyc29yIG9wdGlvbnMgaWYgX3BxXy5ob2xkYWJsZV9wb3J0YWwgZW5h YmxlZCAqLworCWlmIChjb25uLT5ob2xkYWJsZV9wb3J0YWxfZW5hYmxlZCkKKwl7CisJCWlmIChw cVB1dEludChjdXJzb3JPcHRpb25zLCA0LCBjb25uKSA8IDApCisJCQlnb3RvIHNlbmRGYWlsZWQ7 CisJfQorCisJaWYgKHBxUHV0TXNnRW5kKGNvbm4pIDwgMCkKKwkJZ290byBzZW5kRmFpbGVkOwor CisJaWYgKHBxUHV0TXNnU3RhcnQoUHFNc2dfRGVzY3JpYmUsIGNvbm4pIDwgMCB8fAorCQlwcVB1 dGMoJ1AnLCBjb25uKSA8IDAgfHwKKwkJcHFQdXRzKHBvcnRhbE5hbWUgPyBwb3J0YWxOYW1lIDog IiIsIGNvbm4pIDwgMCB8fAorCQlwcVB1dE1zZ0VuZChjb25uKSA8IDApCisJCWdvdG8gc2VuZEZh aWxlZDsKKworCS8qIE5vIEV4ZWN1dGUgbWVzc2FnZSAtIHBvcnRhbCBpcyBjcmVhdGVkIGJ1dCBu b3QgZXhlY3V0ZWQgKi8KKworCWlmIChjb25uLT5waXBlbGluZVN0YXR1cyA9PSBQUV9QSVBFTElO RV9PRkYpCisJeworCQlpZiAocHFQdXRNc2dTdGFydChQcU1zZ19TeW5jLCBjb25uKSA8IDAgfHwK KwkJCXBxUHV0TXNnRW5kKGNvbm4pIDwgMCkKKwkJCWdvdG8gc2VuZEZhaWxlZDsKKwl9CisKKwll bnRyeS0+cXVlcnljbGFzcyA9IFBHUVVFUllfRVhURU5ERUQ7CisKKwlpZiAocHFQaXBlbGluZUZs dXNoKGNvbm4pIDwgMCkKKwkJZ290byBzZW5kRmFpbGVkOworCisJY29ubi0+YXN5bmNTdGF0dXMg PSBQR0FTWU5DX0JVU1k7CisJcmV0dXJuIDE7CisKK3NlbmRGYWlsZWQ6CisJcHFSZWN5Y2xlQ21k UXVldWVFbnRyeShjb25uLCBlbnRyeSk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBQUXNlbmRR dWVyeVN0YXJ0CiAgKglDb21tb24gc3RhcnR1cCBjb2RlIGZvciBQUXNlbmRRdWVyeSBhbmQgc2li bGluZyByb3V0aW5lcwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtcHJvdG9j b2wzLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1wcm90b2NvbDMuYwppbmRleCA4YzFmZGE1 Y2FmMC4uYjY0YTIzMDQ4ZWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXBy b3RvY29sMy5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXByb3RvY29sMy5jCkBAIC0y NTIxLDYgKzI1MjEsMTMgQEAgYnVpbGRfc3RhcnR1cF9wYWNrZXQoY29uc3QgUEdjb25uICpjb25u LCBjaGFyICpwYWNrZXQsCiAJaWYgKGNvbm4tPnB2ZXJzaW9uID09IFBHX1BST1RPQ09MX0dSRUFT RSkKIAkJQUREX1NUQVJUVVBfT1BUSU9OKCJfcHFfLnRlc3RfcHJvdG9jb2xfbmVnb3RpYXRpb24i LCAiIik7CiAKKwkvKiBBZGQgX3BxXy5ob2xkYWJsZV9wb3J0YWwgb3B0aW9uIGlmIGVuYWJsZWQg Ki8KKwlpZiAoY29ubi0+aG9sZGFibGVfcG9ydGFsICYmIGNvbm4tPmhvbGRhYmxlX3BvcnRhbFsw XSA9PSAnMScpCisJeworCQlBRERfU1RBUlRVUF9PUFRJT04oIl9wcV8uaG9sZGFibGVfcG9ydGFs IiwgInRydWUiKTsKKwkJY29ubi0+aG9sZGFibGVfcG9ydGFsX2VuYWJsZWQgPSB0cnVlOworCX0K KwogCS8qIEFkZCBhbnkgZW52aXJvbm1lbnQtZHJpdmVuIEdVQyBzZXR0aW5ncyBuZWVkZWQgKi8K IAlmb3IgKG5leHRfZW8gPSBvcHRpb25zOyBuZXh0X2VvLT5lbnZOYW1lOyBuZXh0X2VvKyspCiAJ ewpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaCBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgKaW5kZXggOTA1ZjJmMzNhYjguLjAwNjA3YTdlZTY3IDEw MDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oCisrKyBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgKQEAgLTUyNSw2ICs1MjUsMTQgQEAgZXh0ZXJuIGludAlQ UXNlbmRRdWVyeVByZXBhcmVkKFBHY29ubiAqY29ubiwKIAkJCQkJCQkJY29uc3QgaW50ICpwYXJh bUxlbmd0aHMsCiAJCQkJCQkJCWNvbnN0IGludCAqcGFyYW1Gb3JtYXRzLAogCQkJCQkJCQlpbnQg cmVzdWx0Rm9ybWF0KTsKK2V4dGVybiBpbnQJUFFzZW5kUXVlcnlQcmVwYXJlZFdpdGhDdXJzb3JP cHRpb25zKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqc3RtdE5hbWUsCisJCQkJCQkJCWludCBu UGFyYW1zLCBjb25zdCBjaGFyICpjb25zdCAqcGFyYW1WYWx1ZXMsCisJCQkJCQkJCWNvbnN0IGlu dCAqcGFyYW1MZW5ndGhzLCBjb25zdCBpbnQgKnBhcmFtRm9ybWF0cywKKwkJCQkJCQkJaW50IHJl c3VsdEZvcm1hdCwgY29uc3QgY2hhciAqcG9ydGFsTmFtZSwgaW50IGN1cnNvck9wdGlvbnMpOwor ZXh0ZXJuIGludAlQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMoUEdjb25uICpjb25uLCBjb25z dCBjaGFyICpzdG10TmFtZSwKKwkJCQkJCQkJaW50IG5QYXJhbXMsIGNvbnN0IGNoYXIgKmNvbnN0 ICpwYXJhbVZhbHVlcywKKwkJCQkJCQkJY29uc3QgaW50ICpwYXJhbUxlbmd0aHMsIGNvbnN0IGlu dCAqcGFyYW1Gb3JtYXRzLAorCQkJCQkJCQlpbnQgcmVzdWx0Rm9ybWF0LCBjb25zdCBjaGFyICpw b3J0YWxOYW1lLCBpbnQgY3Vyc29yT3B0aW9ucyk7CiBleHRlcm4gaW50CVBRc2V0U2luZ2xlUm93 TW9kZShQR2Nvbm4gKmNvbm4pOwogZXh0ZXJuIGludAlQUXNldENodW5rZWRSb3dzTW9kZShQR2Nv bm4gKmNvbm4sIGludCBjaHVua1NpemUpOwogZXh0ZXJuIFBHcmVzdWx0ICpQUWdldFJlc3VsdChQ R2Nvbm4gKmNvbm4pOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50 LmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAppbmRleCBiZDdlYjU5ZjVmOC4u N2ZkZDkyZjIwNDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5o CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCkBAIC00MzAsNiArNDMwLDcg QEAgc3RydWN0IHBnX2Nvbm4KIAljaGFyCSAgICpzY3JhbV9jbGllbnRfa2V5OwkvKiBiYXNlNjQt ZW5jb2RlZCBTQ1JBTSBjbGllbnQga2V5ICovCiAJY2hhcgkgICAqc2NyYW1fc2VydmVyX2tleTsJ LyogYmFzZTY0LWVuY29kZWQgU0NSQU0gc2VydmVyIGtleSAqLwogCWNoYXIJICAgKnNzbGtleWxv Z2ZpbGU7CS8qIHdoZXJlIHNob3VsZCB0aGUgY2xpZW50IHdyaXRlIHNzbCBrZXlsb2dzICovCisJ Y2hhcgkgICAqaG9sZGFibGVfcG9ydGFsOwkvKiBlbmFibGUgX3BxXy5ob2xkYWJsZV9wb3J0YWwg b3B0aW9uICovCiAKIAlib29sCQljYW5jZWxSZXF1ZXN0OwkvKiB0cnVlIGlmIHRoaXMgY29ubmVj dGlvbiBpcyB1c2VkIHRvIHNlbmQgYQogCQkJCQkJCQkgKiBjYW5jZWwgcmVxdWVzdCwgaW5zdGVh ZCBvZiBiZWluZyBhIG5vcm1hbApAQCAtNTA0LDYgKzUwNSw3IEBAIHN0cnVjdCBwZ19jb25uCiAJ aW50CQkJc3ZlcnNpb247CQkvKiBzZXJ2ZXIgdmVyc2lvbiwgZS5nLiA3MDQwMSBmb3IgNy40LjEg Ki8KIAlib29sCQlwdmVyc2lvbl9uZWdvdGlhdGVkOwkvKiB0cnVlIGlmIE5lZ290aWF0ZVByb3Rv Y29sVmVyc2lvbgogCQkJCQkJCQkJCSAqIHdhcyByZWNlaXZlZCAqLworCWJvb2wJCWhvbGRhYmxl X3BvcnRhbF9lbmFibGVkOwkvKiBfcHFfLmhvbGRhYmxlX3BvcnRhbCBvcHRpb24gKi8KIAlib29s CQlhdXRoX3JlcV9yZWNlaXZlZDsJLyogdHJ1ZSBpZiBhbnkgdHlwZSBvZiBhdXRoIHJlcSByZWNl aXZlZCAqLwogCWJvb2wJCXBhc3N3b3JkX25lZWRlZDsJLyogdHJ1ZSBpZiBzZXJ2ZXIgZGVtYW5k ZWQgYSBwYXNzd29yZCAqLwogCWJvb2wJCWdzc2FwaV91c2VkOwkvKiB0cnVlIGlmIGF1dGhlbnRp Y2F0ZWQgdmlhIGdzc2FwaSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9w aXBlbGluZS9saWJwcV9waXBlbGluZS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9waXBlbGlu ZS9saWJwcV9waXBlbGluZS5jCmluZGV4IGFhMGE2YmJlNzYyLi44NzQ4NGRjZmI2NyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9waXBlbGluZS9saWJwcV9waXBlbGluZS5jCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUvbGlicHFfcGlwZWxpbmUuYwpAQCAt MjEwMCw2ICsyMTAwLDkzIEBAIHByb2Nlc3NfcmVzdWx0KFBHY29ubiAqY29ubiwgUEdyZXN1bHQg KnJlcywgaW50IHJlc3VsdHMsIGludCBudW1zZW50KQogCXJldHVybiBnb3RfZXJyb3I7CiB9CiAK Ky8qCisgKiBUZXN0IGhvbGRhYmxlIGN1cnNvcnMgdXNpbmcgcHJvdG9jb2wgMy4zIGN1cnNvciBv cHRpb25zIGluIEJpbmQgbWVzc2FnZS4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfaG9sZGFibGVf Y3Vyc29yKFBHY29ubiAqY29ubikKK3sKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlmcHJpbnRmKHN0 ZGVyciwgImhvbGRhYmxlIGN1cnNvci4uLiAiKTsKKworCS8qIFZlcmlmeSBwcm90b2NvbCAzLjMg Ki8KKwlpZiAoUFFmdWxsUHJvdG9jb2xWZXJzaW9uKGNvbm4pIDwgMzAwMDMpCisJCXBnX2ZhdGFs KCJwcm90b2NvbCAzLjMgcmVxdWlyZWQsIGdvdCAlZCIsIFBRZnVsbFByb3RvY29sVmVyc2lvbihj b25uKSk7CisKKwkvKiBTdGFydCB0cmFuc2FjdGlvbiAqLworCXJlcyA9IFBRZXhlYyhjb25uLCAi QkVHSU4iKTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQor CQlwZ19mYXRhbCgiQkVHSU4gZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQ UWNsZWFyKHJlcyk7CisKKwkvKiBDcmVhdGUgdGVzdCB0YWJsZSAqLworCXJlcyA9IFBRZXhlYyhj b25uLCAiQ1JFQVRFIFRFTVAgVEFCTEUgaG9sZGFibGVfdGVzdChpZCBpbnQpIik7CisJaWYgKFBR cmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdfZmF0YWwoIkNSRUFU RSBUQUJMRSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCVBRY2xlYXIocmVz KTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCAiSU5TRVJUIElOVE8gaG9sZGFibGVfdGVzdCBWQUxV RVMgKDEpLCAoMiksICgzKSIpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NP TU1BTkRfT0spCisJCXBnX2ZhdGFsKCJJTlNFUlQgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdl KGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwkvKiBQcmVwYXJlIHN0YXRlbWVudCAqLworCXJl cyA9IFBRcHJlcGFyZShjb25uLCAiaG9sZHN0bXQiLCAiU0VMRUNUICogRlJPTSBob2xkYWJsZV90 ZXN0IiwgMCwgTlVMTCk7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFO RF9PSykKKwkJcGdfZmF0YWwoIlBSRVBBUkUgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKKwlQUWNsZWFyKHJlcyk7CisKKwkvKiBFbnRlciBwaXBlbGluZSBtb2RlICovCisJaWYg KFBRZW50ZXJQaXBlbGluZU1vZGUoY29ubikgIT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBl bnRlciBwaXBlbGluZSBtb2RlOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCS8qIENy ZWF0ZSBob2xkYWJsZSBwb3J0YWwgdXNpbmcgQmluZCB3aXRoIGN1cnNvciBvcHRpb25zIChubyBF eGVjdXRlKSAqLworCWlmIChQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMoY29ubiwgImhvbGRz dG10IiwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgImhvbGRwb3J0YWwiLCAweDAwMjApICE9IDEp CisJCXBnX2ZhdGFsKCJQUXNlbmRCaW5kV2l0aEN1cnNvck9wdGlvbnMgZmFpbGVkOiAlcyIsIFBR ZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCS8qIENvbW1pdCAtIHBvcnRhbCBzaG91bGQgc3Vydml2 ZSAqLworCWlmIChQUXNlbmRRdWVyeVBhcmFtcyhjb25uLCAiQ09NTUlUIiwgMCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgMCkgIT0gMSkKKwkJcGdfZmF0YWwoIkNPTU1JVCBmYWlsZWQ6ICVzIiwg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJLyogRXhlY3V0ZSBwb3J0YWwgYWZ0ZXIgY29tbWl0 IHVzaW5nIEZFVENIIChwb3J0YWxzIGNyZWF0ZWQgdmlhIEJpbmQgYXJlIGN1cnNvcnMpICovCisJ aWYgKFBRc2VuZFF1ZXJ5UGFyYW1zKGNvbm4sICJGRVRDSCBBTEwgRlJPTSBob2xkcG9ydGFsIiwg MCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCkgIT0gMSkKKwkJcGdfZmF0YWwoIkZFVENIIGZh aWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisKKwkvKiBDbG9zZSBwb3J0YWwgKi8K KwlpZiAoUFFzZW5kUXVlcnlQYXJhbXMoY29ubiwgIkNMT1NFIGhvbGRwb3J0YWwiLCAwLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCAwKSAhPSAxKQorCQlwZ19mYXRhbCgiQ0xPU0UgZmFpbGVkOiAl cyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCWlmIChQUXBpcGVsaW5lU3luYyhjb25uKSAh PSAxKQorCQlwZ19mYXRhbCgicGlwZWxpbmUgc3luYyBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3Nh Z2UoY29ubikpOworCisJLyogR2V0IHJlc3VsdHMgKi8KKwlyZXMgPSBjb25maXJtX3Jlc3VsdF9z dGF0dXMoY29ubiwgUEdSRVNfVFVQTEVTX09LKTsJLyogUm93RGVzY3JpcHRpb24gZnJvbSBCaW5k K0Rlc2NyaWJlICovCisJaWYgKFBRbmZpZWxkcyhyZXMpICE9IDEpCisJCXBnX2ZhdGFsKCJleHBl Y3RlZCAxIGZpZWxkLCBnb3QgJWQiLCBQUW5maWVsZHMocmVzKSk7CisJUFFjbGVhcihyZXMpOwor CWNvbnN1bWVfbnVsbF9yZXN1bHQoY29ubik7CisKKwkvKiBDT01NSVQgcmVzdWx0IHNlZW1zIHRv IGJlIHNraXBwZWQvY29tYmluZWQgLSB0aGlzIGlzIGEgbGlicHEgYmVoYXZpb3IgKi8KKworCXJl cyA9IGNvbmZpcm1fcmVzdWx0X3N0YXR1cyhjb25uLCBQR1JFU19UVVBMRVNfT0spOwkvKiBGRVRD SCBhZnRlciBjb21taXQgKi8KKwlpZiAoUFFudHVwbGVzKHJlcykgIT0gMykKKwkJcGdfZmF0YWwo ImV4cGVjdGVkIDMgcm93cyBhZnRlciBjb21taXQsIGdvdCAlZCIsIFBRbnR1cGxlcyhyZXMpKTsK KwlQUWNsZWFyKHJlcyk7CisJY29uc3VtZV9udWxsX3Jlc3VsdChjb25uKTsKKworCWNvbnN1bWVf cmVzdWx0X3N0YXR1cyhjb25uLCBQR1JFU19DT01NQU5EX09LKTsJLyogQ0xPU0UgKi8KKwljb25z dW1lX251bGxfcmVzdWx0KGNvbm4pOworCisJY29uc3VtZV9yZXN1bHRfc3RhdHVzKGNvbm4sIFBH UkVTX1BJUEVMSU5FX1NZTkMpOworCWNvbnN1bWVfbnVsbF9yZXN1bHQoY29ubik7CisKKwlpZiAo UFFleGl0UGlwZWxpbmVNb2RlKGNvbm4pICE9IDEpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZXhp dCBwaXBlbGluZSBtb2RlOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCWZwcmludGYo c3RkZXJyLCAib2tcbiIpOworfQorCiAKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25zdCBjaGFyICpw cm9nbmFtZSkKQEAgLTIxMTgsNiArMjIwNSw3IEBAIHByaW50X3Rlc3RfbGlzdCh2b2lkKQogewog CXByaW50ZigiY2FuY2VsXG4iKTsKIAlwcmludGYoImRpc2FsbG93ZWRfaW5fcGlwZWxpbmVcbiIp OworCXByaW50ZigiaG9sZGFibGVfY3Vyc29yXG4iKTsKIAlwcmludGYoIm11bHRpX3BpcGVsaW5l c1xuIik7CiAJcHJpbnRmKCJub3N5bmNcbiIpOwogCXByaW50ZigicGlwZWxpbmVfYWJvcnRcbiIp OwpAQCAtMjIyNSw2ICsyMzEzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXRl c3RfY2FuY2VsKGNvbm4pOwogCWVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgImRpc2FsbG93ZWRf aW5fcGlwZWxpbmUiKSA9PSAwKQogCQl0ZXN0X2Rpc2FsbG93ZWRfaW5fcGlwZWxpbmUoY29ubik7 CisJZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAiaG9sZGFibGVfY3Vyc29yIikgPT0gMCkKKwkJ dGVzdF9ob2xkYWJsZV9jdXJzb3IoY29ubik7CiAJZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAi bXVsdGlfcGlwZWxpbmVzIikgPT0gMCkKIAkJdGVzdF9tdWx0aV9waXBlbGluZXMoY29ubik7CiAJ ZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAibm9zeW5jIikgPT0gMCkKLS0gCjIuNTAuMSAoQXBw bGUgR2l0LTE1NSkKCg== --000000000000037403064c349467--