GNU bug report logs - #74423
Low level key events

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Severity: wishlist; Reported by: Cecilio Pardo <cpardo@HIDDEN>; dated Mon, 18 Nov 2024 20:36:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 4 Jan 2025 04:56:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 03 23:56:04 2025
Received: from localhost ([127.0.0.1]:52970 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tTwCh-0000tr-CX
	for submit <at> debbugs.gnu.org; Fri, 03 Jan 2025 23:56:03 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:63226)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1tTwCd-0000tJ-3q
 for 74423 <at> debbugs.gnu.org; Fri, 03 Jan 2025 23:56:01 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 0AD83440CF4;
 Fri,  3 Jan 2025 23:55:52 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1735966550;
 bh=6OFTmN76rrqJg49/MJWDIYKBUnyg9dVNUi7iW2eyJ9A=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=SBVzCp99zvUEw3YRKn+3uZ98hZk1dmqU3UVlUArvD3e8N+9SzJ0JK5xl/pmgudkxL
 H+Uu5H6G2X1op1r0769EevKcTc8O7XcgC5iudEg3N85AIrvv3wDaiSNHwYeFfduUlF
 XoztAanJmD5tI7GTT742g4WDVq62zprYH+RtM3jSmBbAW1+Os9Y0itNL62XRco+09p
 6njeAw+e7Hs6NzyE2Pt7IQTZ1NWcR5NhG7W1U0iFiQ72QMB29Tau653TQeDU5qbTVW
 qHKhi0xNquyASlj4feVIaSHbo76j9cVEQNv4pjYUX8biWvmkC3dMoISWq2gnwcnGJl
 v0LuNM2LYAyhA==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 1FE32440CDE;
 Fri,  3 Jan 2025 23:55:50 -0500 (EST)
Received: from alfajor (104-195-200-87.cpe.teksavvy.com [104.195.200.87])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id D4484120070;
 Fri,  3 Jan 2025 23:55:49 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>
Subject: Re: bug#74423: Low level key events
In-Reply-To: <e8833e75-c05f-43e2-81b4-464b9236211d@HIDDEN> (Cecilio
 Pardo's message of "Thu, 2 Jan 2025 16:42:34 +0100")
Message-ID: <jwvpll3jlft.fsf-monnier+emacs@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN>
 <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN>
 <867c8ezny3.fsf@HIDDEN>
 <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN>
 <86bjxev7ng.fsf@HIDDEN>
 <343e2854-a16e-4718-894a-470b733ae91f@HIDDEN>
 <jwvseqgbd1y.fsf-monnier+emacs@HIDDEN>
 <e8833e75-c05f-43e2-81b4-464b9236211d@HIDDEN>
Date: Fri, 03 Jan 2025 23:55:49 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.026 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, Eli Zaretskii <eliz@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> In this new version I changed the way events are handled.
> Now llk-handle generates input events to be used with normal
> keymaps, instead of running a command. The function llk-bind
> activates event generation for a key and a combination of
> events press, release, double, triple.

I really like what I see.  As I think I mentioned, I had made a related
effort in local patches, but I couldn't figure out back then how to make
the low-level events useful.

I wouldn't be surprised if such low-level events remain limited in their
use, but I suspect that some specific uses of them could become very
popular.

I haven't seen many opinions of late on your code (other than my
own), sadly.  I think we need some more reviewers here.

> You suggested to auto generate the keysym table, but we
> would still need a table to relate the Windows keys to the X
> equivalent.

I don't doubt some part has to be done manually, but I think we should
strive to make it via code as much as possible.

E.g. on each platform we should try to provide a programmatic way to map
the integer key to/from a meaningful system-specific string or symbol
(at least, to the extent that the underlying system provides such
a functionality).

Mapping between those symbols in different systems will likely be (at
least partly) manual, inevitably, but I'm hoping this can be
significantly smaller (especially I'm hoping we can "align" the
system-specific symbols such that many are already identical between the
different systems).

Finally it's not 100% indispensable to have unified symbols that work
identically on all systems: users could also just use the system-specific
names.  They'd need a mapping between them only for code/configuration
that is used with different systems.  So it's only really important when
those names start to be used in libraries.

> +@cindex @code{low-level-key} event
> +@item (low-level-key @var{is-key-press} @var{key} @var{modifier} @var{time} @var{frame})
> +This event is sent on the physical press or release of keys, only on
> +systems where it is supported, currently X, MS-Windows and PGTK, and
> +only if the variable @code{enable-low-level-key-events} has a
> +non-@code{nil} value.  See its documentation for the values to use, that
> +can activate the events for all or some keys.
> +
> +@var{is-key-press} is @code{t} for a key press, @code{nil} for a key
> +release.  @var{time} is the event's time in milliseconds, as reported by
> +the underlying platform, and should only be used to measure time
> +intervals between events of this same kind.

[ This made me wonder if those timestamps can be compared between
  events coming from different X11 servers.  ]

> @var{frame} is the frame +receiving the event.

Any chance this could be changed to a window?
[ What does it even mean?
  Usually we associate keyboard events with the `window-point` of the
  currently selected window (and they don't come with the information
  attached), whereas we associated mouse events with the
  position of the mouse cursor.
  But when I do `down-meta down-mouse-1 up-mouse-1 up-meta` to generate
  a `M-mouse-1` event, the events on the `meta` key end up associated
  with the position of the mouse cursor even tho they come from
  the keyboard.  ]

> @var{modifier} is @code{nil} if the key is not a
> +modifier key, @code{t} if it is, but it is unknown which one, or one of
> +@code{shift}, @code{control}, @code{meta}, @code{alt}, @code{super},
> +@code{hyper}.

In the docstring you mention that PGTK can't distinguish modifiers.
It would be useful here to mention here also the kinds of reasons why we
might get just `t`: can it happen for some keys and not others, or is it
the case for all the events of a given kind of terminal?

> Loading @file{low-level-key.el} sets a handler
> +that can generate normal input events for key press, release and multi
> +tap.  See the function @code{llk-bind}.

Any other ELisp code could do a similar task, tho.  So, I'd probably
present it a bit differently, like:

    Because generating these events for all keys would interfere with
    normal keyboard input, they are by default filtered out by a binding in
    `special-event-map`.
    @file{low-level-key.el} is a package that lets you configure
    which of those events to turn into normal input events.  It is also
    able to recognize some specific patterns such a (multi) taps.

[ BTW, you might like to explain what is a (multi) tap here, as well.  ]

> +(cl-defstruct (low-level-key (:type list))

I recommend you add `(:constructor nil)` and `(:copier nil)` so the
macro doesn't auto-define `make-low-level-key` and
`copy-low-level-key` functions.

> +(defvar llk-bindings nil
> +  "List of bindings for low level key events (press/release/tap).
> +Use the `llk-bind' function to add bindings.  See its documentation for
> +a description of the binding information.")

[ Seeing how it's used, I suggest you use a hash-table instead of
  a list.  ]

> +EVENTS are symbols that activate one event. Possible values are `press',
> +`release', `double' and `triple'.

Any reason why there isn't an option to emit an event for a single
press+release?

> +  (llk-bind xk-shift-l \\='double)
> +
> +will generate the event `double-xk-shift-l', than can be bound to a
> +command with:

AFAICT the event will be named `double-key-xk-shift-l`.
Did I miss something?
[ I like this "key-" in the event name, FWIW, so I suggest to keep the
  code but fix the doc rather than the reverse.  Tho, if we can drop
  the `xk-`, I'd be happier yet.
  Maybe the generated event names should have "llk-" in them
  instead of "key-".  ]

> +(defun describe-low-level-key ()
> +  "Wait for key press and describe the low-level key event it generates."
> +  (interactive)
> +  (define-key special-event-map [low-level-key] 'llk--describe))

This is brittle.  I don't really have a better suggestion, sadly, but it
deserves a comment.

> +(setq llk-bindings nil)

Why?

Also the file lacks the usual end of file marker (and the call to `provide`).

I'll try and take a look at the C code later.


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 2 Jan 2025 15:42:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jan 02 10:42:47 2025
Received: from localhost ([127.0.0.1]:46201 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tTNLR-0007gK-4w
	for submit <at> debbugs.gnu.org; Thu, 02 Jan 2025 10:42:47 -0500
Received: from mail.imayhem.com ([82.223.54.191]:39079
 helo=zealous-pike.82-223-54-191.plesk.page)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <cpardo@HIDDEN>)
 id 1tTNLN-0007g0-C5
 for 74423 <at> debbugs.gnu.org; Thu, 02 Jan 2025 10:42:43 -0500
Received: from [192.168.68.102] (111.red-88-21-7.staticip.rima-tde.net
 [88.21.7.111])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id 0D8E88012A; 
 Thu,  2 Jan 2025 15:42:35 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 88.21.7.111) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[192.168.68.102]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Content-Type: multipart/mixed; boundary="------------eNHcmXNQvtsRN3BsZgn4RNX3"
Message-ID: <e8833e75-c05f-43e2-81b4-464b9236211d@HIDDEN>
Date: Thu, 2 Jan 2025 16:42:34 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74423: Low level key events
To: Stefan Monnier <monnier@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN> <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN> <867c8ezny3.fsf@HIDDEN>
 <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN> <86bjxev7ng.fsf@HIDDEN>
 <343e2854-a16e-4718-894a-470b733ae91f@HIDDEN>
 <jwvseqgbd1y.fsf-monnier+emacs@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <jwvseqgbd1y.fsf-monnier+emacs@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, Eli Zaretskii <eliz@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is a multi-part message in MIME format.
--------------eNHcmXNQvtsRN3BsZgn4RNX3
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hello,

In this new version I changed the way events are handled.
Now llk-handle generates input events to be used with normal
keymaps, instead of running a command. The function llk-bind
activates event generation for a key and a combination of
events press, release, double, triple.

I also made changes following your notes, such as:

- Clarification on the event's time, documentation of
   keysyms variables moved, don't limit to GUI systems.
- cl-defstruct for the event payload.
- Format and naming conventions.
- Default timeout to mouse double click timeout.

You suggested to auto generate the keysym table, but we
would still need a table to relate the Windows keys to the X
equivalent.

--------------eNHcmXNQvtsRN3BsZgn4RNX3
Content-Type: text/plain; charset=UTF-8;
 name="0001-Send-events-for-key-presses-and-key-releases.patch"
Content-Disposition: attachment;
 filename="0001-Send-events-for-key-presses-and-key-releases.patch"
Content-Transfer-Encoding: base64

RnJvbSA5ZjQ4ZGEzNzU3MWNmOTIxYzg1OGIwMWI5ZDc2ZTdkMTc5ODYyNWZlIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDZWNpbGlvIFBhcmRvIDxjcGFyZG9AaW1heWhlbS5j
b20+CkRhdGU6IE1vbiwgMiBEZWMgMjAyNCAxNzozMDo0MiArMDEwMApTdWJqZWN0OiBbUEFU
Q0hdIFNlbmQgZXZlbnRzIGZvciBrZXkgcHJlc3NlcyBhbmQga2V5IHJlbGVhc2VzLgoKRGV0
ZWN0IGRvdWJsZS90cmlwbGUgdGFwcy4KCiogZG9jL2xpc3ByZWYvY29tbWFuZHMudGV4aTog
QWRkZWQgaW5mb3JtYXRpb24gYWJvdXQgbmV3IGV2ZW50LgoqIHNyYy9ndGt1dGlsLmMgKHhn
X2NyZWF0ZV9mcmFtZV93aWRnZXRzKTogTW9kaWZpZWQgdG8gaGFuZGxlIGtleQpyZWxlYXNl
IGV2ZW50cy4KKHhnX21heWJlX3NlbmRfbG93X2xldmVsX2tleV9ldmVudCk6IE5ldyBmdW5j
dGlvbiB0aGF0IHNlbmRzIGtleQpldmVudHMuCih4Z193aWRnZXRfa2V5X3ByZXNzX2V2ZW50
X2NiKTogTW9kaWZpZWQgdG8gc2VuZCBsb3cgbGV2ZWwga2V5IGV2ZW50cy4KKHhnX3dpZGdl
dF9rZXlfcmVsZWFzZV9ldmVudF9jYik6IE5ldyBmdW5jdGlvbiB0byBzZW5kIGxvdyBsZXZl
bCBrZXkKZXZlbnRzIG9uIGtleSByZWxlYXNlLgoqIHNyYy9rZXlib2FyZC5jIChrYmRfYnVm
ZmVyX2dldF9ldmVudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBsb3cgbGV2ZWwKa2V5Ym9hcmQg
ZXZlbnRzLgoobWFrZV9saXNweV9ldmVudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBsb3cgbGV2
ZWwga2V5Ym9hcmQgZXZlbnRzLgooa2JkX2xvd19sZXZlbF9rZXlfaXNfZW5hYmxlZCk6IE5l
dyBmdW5jdGlvbiB0byBkZWNpZGUgaWYgYSBwYXJ0aWN1bGFyCmtleSBzaG91bGQgZ2VuZXJh
dGUgZXZlbnRzLCBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb24uCihzeW1zX29mX2tleWJvYXJk
KTogQWRkZWQgc3ltYm9scyBhbmQgdmFyaWFsYmxlcy4KKGtleXNfb2Zfa2V5Ym9hcmQpOiBN
b2RpZmllZCB0byBtYXAgbG93IGxldmVsIGtleSBldmVudHMgdG8KJ3NwZWNpYWwtZXZlbnQt
bWFwJy4KKiBzcmMva2V5Ym9hcmQuaDogTW9kaWZpZWQgd2l0aCBmdW5jdGlvbiBwcm90b3R5
cGUuCiogc3JjL3BndGt0ZXJtLmMgKHBndGtfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2
ZW50KTogTmV3IGZ1bmN0aW9uCnRoYXQgc2VuZHMga2V5IGV2ZW50cy4KKGtleV9wcmVzc19l
dmVudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBsb3cgbGV2ZWwga2V5Ym9hcmQgZXZlbnRzLgoo
a2V5X3JlbGVhc2VfZXZlbnQpOiBNb2RpZmllZCB0byBoYW5kbGUgbG93IGxldmVsIGtleWJv
YXJkIGV2ZW50cy4KKiBzcmMvdGVybWhvb2tzLmg6IE1vZGlmaWVkIHRvIGRlZmluZSBjb25z
dGFudC4KKiBzcmMvdzMyZm5zLmMgKHczMl93bmRfcHJvYyk6IE1vZGlmaWVkIHRvIGdlbmVy
YXRlIGxvdyBsZXZlbCBrZXkKZXZlbnRzLgoqIHNyYy93MzJ0ZXJtLmMgKHczMl9yZWFkX3Nv
Y2tldCk6IE1vZGlmaWVkIHRvIGdlbmVyYXRlIGxvdyBsZXZlbCBrZXkKZXZlbnRzLgoqIHNy
Yy93MzJ0ZXJtLmg6IE1vZGlmaWVkIHRvIGRlZmluZSBjb25zdGFudHMuCiogc3JjL3h0ZXJt
LmMgKHhfZ2V0X21vZGlmaWVyX2Zvcl9rZXljb2RlKTogTmV3IGZ1bmN0aW9uIHRvIGRlY2lk
ZQp3aGljaCAoaWYgYW55KSBtb2RpZmllciBjb3JyZXNwb25kcyB0byBhIGdpdmVuIGtleS4K
KHhfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50KTogTmV3IGZ1bmN0aW9uIHRoYXQg
c2VuZHMga2V5CmV2ZW50cy4KKGhhbmRsZV9vbmVfeGV2ZW50KTogTW9kaWZpZWQgdG8gaGFu
ZGxlIGxvdyBsZXZlbCBrZXkgZXZlbnRzLgooc3ltc19vZl94dGVybSk6IE1vZGlmaWVkIHRv
IGRlZmluZSBzeW1ib2wuCiogc3JjL3h0ZXJtLmg6IE1vZGlmaWVkIHdpdGggZnVuY3Rpb24g
cHJvdG90eXBlCiogbGlzcC9sb3ctbGV2ZWwta2V5LmVsIChOZXcgZmlsZSkuCihsb3ctbGV2
ZWwta2V5KTogU3RydWN0IHdpdGggZXZlbnQgZGF0YS4KKGxsay1iaW5kaW5ncyk6IFVzZXIg
YmluZGluZ3MgZm9yIGxvdyBsZXZlbCBrZXkgZXZlbnRzLgoobGxrLXRhcC10aW1lb3V0KTog
VXNlciBvcHRpb24uCihsbGsta2V5c3ltcyk6IExpc3Qgb2YgYXZhaWxhYmxlIGtleXN5bXMu
CihsbGstLWRlZmluZS14ayk6IE1hY3JvIGZvciBkZWZpbmluZyBrZXlzeW1zLgoobGxrLS1k
ZWZpbmUta2V5c3ltcyk6IEJ1aWxkIGxsay1rZXlzeW1zLgoobGxrLWJpbmQpOiBGdW5jdGlv
biB0byBjcmVhdGUgYSBiaW5kaW5nLgoobGxrLS1ldmVudC1oaXN0b3J5LWZvci10YXApOiBF
dmVudCBoaXN0b3J5IGZvciB0YXAgZGV0ZWN0aW9uLgoobGxrLS1kZXRlY3Qtbi10YXApOiBG
dW5jdGlvbiB0byBkZXRlY3QgdGFwcy4KKGRlc2NyaWJlLWxvdy1sZXZlbC1rZXkpOiBDb21t
YW5kIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhIGtleS4KKGxsay0tZGVzY3JpYmUpOiBT
aG93IGhlbHAgYnVmZmVyIHdpdGggaW5mb3JtYXRpb24KYWJvdXQgYW4gZXZlbnQuCihsbGst
aGFuZGxlKTogSGFuZGxlciBmb3Iga2V5IGV2ZW50cy4KKGxsay0tZ2VuZXJhdGUtZXZlbnQp
OiBHZW5lcmF0ZSBpbnB1dCBldmVudCBmb3Iga2V5LgoobGxrLS1nZW5lcmF0ZS1ldmVudHMp
OiBHZW5lcmF0ZSBpbnB1dCBldmVudHMgZm9yIGtleS4KLS0tCiBkb2MvbGlzcHJlZi9jb21t
YW5kcy50ZXhpIHwgIDI1ICsrKwogbGlzcC9sb3ctbGV2ZWwta2V5LmVsICAgICB8IDM3MyAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2d0a3V0aWwuYyAg
ICAgICAgICAgICB8ICA4MSArKysrKysrKysKIHNyYy9rZXlib2FyZC5jICAgICAgICAgICAg
fCAgNjAgKysrKysrCiBzcmMva2V5Ym9hcmQuaCAgICAgICAgICAgIHwgICAxICsKIHNyYy9w
Z3RrdGVybS5jICAgICAgICAgICAgfCAgNTUgKysrKysrCiBzcmMvdGVybWhvb2tzLmggICAg
ICAgICAgIHwgICAxICsKIHNyYy93MzJmbnMuYyAgICAgICAgICAgICAgfCAgMTEgKysKIHNy
Yy93MzJ0ZXJtLmMgICAgICAgICAgICAgfCAgNDkgKysrKysKIHNyYy93MzJ0ZXJtLmggICAg
ICAgICAgICAgfCAgIDMgKy0KIHNyYy94dGVybS5jICAgICAgICAgICAgICAgfCAxNDIgKysr
KysrKysrKysrKysrCiBzcmMveHRlcm0uaCAgICAgICAgICAgICAgIHwgICAyICsKIDEyIGZp
bGVzIGNoYW5nZWQsIDgwMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgbGlzcC9sb3ctbGV2ZWwta2V5LmVsCgpkaWZmIC0tZ2l0IGEvZG9jL2xp
c3ByZWYvY29tbWFuZHMudGV4aSBiL2RvYy9saXNwcmVmL2NvbW1hbmRzLnRleGkKaW5kZXgg
N2NjMzJhN2ZkYjMuLjIzYzMzMTJkYmNiIDEwMDY0NAotLS0gYS9kb2MvbGlzcHJlZi9jb21t
YW5kcy50ZXhpCisrKyBiL2RvYy9saXNwcmVmL2NvbW1hbmRzLnRleGkKQEAgLTI2NTgsNiAr
MjY1OCwzMSBAQCBNaXNjIEV2ZW50cwogcmVzcGVjdGl2ZWx5LiAgVGhleSBhcmUgdXN1YWxs
eSBpbnRlcnByZXRlZCBhcyBiZWluZyByZWxhdGl2ZSB0byB0aGUKIHNpemUgb2YgdGhlIG9i
amVjdCBiZW5lYXRoIHRoZSBnZXN0dXJlOiBpbWFnZSwgd2luZG93LCBldGMuCiAKK0BjaW5k
ZXggQGNvZGV7bG93LWxldmVsLWtleX0gZXZlbnQKK0BpdGVtIChsb3ctbGV2ZWwta2V5IEB2
YXJ7aXMta2V5LXByZXNzfSBAdmFye2tleX0gQHZhcnttb2RpZmllcn0gQHZhcnt0aW1lfSBA
dmFye2ZyYW1lfSkKK1RoaXMgZXZlbnQgaXMgc2VudCBvbiB0aGUgcGh5c2ljYWwgcHJlc3Mg
b3IgcmVsZWFzZSBvZiBrZXlzLCBvbmx5IG9uCitzeXN0ZW1zIHdoZXJlIGl0IGlzIHN1cHBv
cnRlZCwgY3VycmVudGx5IFgsIE1TLVdpbmRvd3MgYW5kIFBHVEssIGFuZAorb25seSBpZiB0
aGUgdmFyaWFibGUgQGNvZGV7ZW5hYmxlLWxvdy1sZXZlbC1rZXktZXZlbnRzfSBoYXMgYQor
bm9uLUBjb2Rle25pbH0gdmFsdWUuICBTZWUgaXRzIGRvY3VtZW50YXRpb24gZm9yIHRoZSB2
YWx1ZXMgdG8gdXNlLCB0aGF0CitjYW4gYWN0aXZhdGUgdGhlIGV2ZW50cyBmb3IgYWxsIG9y
IHNvbWUga2V5cy4KKworQHZhcntpcy1rZXktcHJlc3N9IGlzIEBjb2Rle3R9IGZvciBhIGtl
eSBwcmVzcywgQGNvZGV7bmlsfSBmb3IgYSBrZXkKK3JlbGVhc2UuICBAdmFye3RpbWV9IGlz
IHRoZSBldmVudCdzIHRpbWUgaW4gbWlsbGlzZWNvbmRzLCBhcyByZXBvcnRlZCBieQordGhl
IHVuZGVybHlpbmcgcGxhdGZvcm0sIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIHRvIG1lYXN1
cmUgdGltZQoraW50ZXJ2YWxzIGJldHdlZW4gZXZlbnRzIG9mIHRoaXMgc2FtZSBraW5kLiAg
QHZhcntmcmFtZX0gaXMgdGhlIGZyYW1lCityZWNlaXZpbmcgdGhlIGV2ZW50LiAgQHZhcntt
b2RpZmllcn0gaXMgQGNvZGV7bmlsfSBpZiB0aGUga2V5IGlzIG5vdCBhCittb2RpZmllciBr
ZXksIEBjb2Rle3R9IGlmIGl0IGlzLCBidXQgaXQgaXMgdW5rbm93biB3aGljaCBvbmUsIG9y
IG9uZSBvZgorQGNvZGV7c2hpZnR9LCBAY29kZXtjb250cm9sfSwgQGNvZGV7bWV0YX0sIEBj
b2Rle2FsdH0sIEBjb2Rle3N1cGVyfSwKK0Bjb2Rle2h5cGVyfS4KKworQHZhcntrZXl9LCBh
biBpbnRlZ2VyLCBpZGVudGlmaWVzIHRoZSBrZXkgcHJlc3NlZCBvciByZWxlYXNlZC4gIFRo
aXMKK251bWJlciBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKK1RoaXMgaXMgYSBzcGVjaWFs
IGV2ZW50IChAcHhyZWZ7U3BlY2lhbCBFdmVudHN9KSwgaWdub3JlZCBieQorZGVmYXVsdC4g
TG9hZGluZyBAZmlsZXtsb3ctbGV2ZWwta2V5LmVsfSBzZXRzIGEgaGFuZGxlcgordGhhdCBj
YW4gZ2VuZXJhdGUgbm9ybWFsIGlucHV0IGV2ZW50cyBmb3Iga2V5IHByZXNzLCByZWxlYXNl
IGFuZCBtdWx0aQordGFwLiAgU2VlIHRoZSBmdW5jdGlvbiBAY29kZXtsbGstYmluZH0uCisK
IEBjaW5kZXggQGNvZGV7cHJlZWRpdC10ZXh0fSBldmVudAogQGl0ZW0gKHByZWVkaXQtdGV4
dCBAdmFye2FyZ30pCiBUaGlzIGV2ZW50IGlzIHNlbnQgd2hlbiBhIHN5c3RlbSBpbnB1dCBt
ZXRob2QgdGVsbHMgRW1hY3MgdG8gZGlzcGxheQpkaWZmIC0tZ2l0IGEvbGlzcC9sb3ctbGV2
ZWwta2V5LmVsIGIvbGlzcC9sb3ctbGV2ZWwta2V5LmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi44YThkOTEyOTc3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xp
c3AvbG93LWxldmVsLWtleS5lbApAQCAtMCwwICsxLDM3MyBAQAorOzs7IGxvdy1sZXZlbC1r
ZXkuZWwgLS0tIEhhbmRsaW5nIG9mIGtleSBwcmVzcy9yZWxlYXNlIGV2ZW50cyAgICAtKi0g
bGV4aWNhbC1iaW5kaW5nOiB0IC0qLQorCis7OyBDb3B5cmlnaHQgKEMpIDIwMjUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdO
VSBFbWFjcy4KKworOzsgR05VIEVtYWNzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl
bnNlLCBvcgorOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworOzsg
R05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCis7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOzsgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworOzsgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7IGFsb25n
IHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGlj
ZW5zZXMvPi4KKworOzs7IENvbW1lbnRhcnk6CisKKzs7IEVtYWNzIGNhbiBzZW5kIGxvdy1s
ZXZlbCBrZXkgZXZlbnRzLCB0aGF0IGNvcnJlc3BvbmQgdG8ga2V5IHByZXNzZXMKKzs7IGFu
ZCByZWxlYXNlcy4gVGhlc2UgZXZlbnRzIGFyZSBieSBkZWZhdWx0IGRpc2FibGVkLgorCis7
OyBXaGVuIGVuYWJsZWQgYnkgc2V0dGluZyBgZW5hYmxlLWxvdy1sZXZlbC1rZXktZXZlbnRz
JyB0byBhIG5vbi1uaWwKKzs7IHZhbHVlLCBlbWFjcyB3aWxsIGJlZ2luIHNlbmRpbmcgdGhl
bSwgYW5kIHRoZXkgd2lsbCBiZSBpZ25vcmVkIGFzCis7OyBsb3ctbGV2ZWwta2V5IGlzIGJv
dW5kIHRvIGBpZ25vcmUnIG9uIGBzcGVjaWFsLWV2ZW50LW1hcCcuCisKKzs7IFRoaXMgZmls
ZSBzZXRzIGEgaGFuZGxlciBmb3IgdGhlbSAoYGxsay1oYW5kbGUnKSB3aGljaCBnZW5lcmF0
ZXMKKzs7IGlucHV0IGV2ZW50cyBmb3Iga2V5IHByZXNzZXMsIGtleSByZWxlYXNlcyBhbmQg
ZG91YmxlIGFuZCB0cmlwbGUKKzs7IHRhcHMuICBUaGVzZSBldmVudHMgY2FuIGJlIGJvdW5k
IHRvIGNvbW1hbmRzIG9uIG5vcm1hbCBrZXltYXBzLgorCis7OyBCZWNhdXNlIGdlbmVyYXRp
bmcgdGhlc2UgZXZlbnRzIGZvciBhbGwga2V5cyB3b3VsZCBpbnRlcmZlcmUgd2l0aAorOzsg
bm9ybWFsIGtleWJvYXJkIGlucHV0LCB0aGV5IG11c3QgYmUgYWN0aXZhdGVkIGluZGl2aWR1
YWxseSBieSBjYWxsaW5nCis7OyB0aGUgZnVuY3Rpb24gYGxsay1iaW5kJy4KKworOzsgVGhl
IGxvdy1sZXZlbC1rZXkgZXZlbnQgcGF5bG9hZCBpcyBkZXNjcmliZWQgYnkgdGhlICdsb3ct
bGV2ZWwta2V5JworOzsgc3RydWN0LiAgVXNlICdjbC1kZXNjcmliZS10eXBlJyB0byBnZXQg
bW9yZSBpbmZvcm1hdGlvbiBhYm91dCBpdC4KKzs7Cis7OyBBZnRlciBsb2FkaW5nIHRoaXMg
ZmlsZSBhbmQgc2V0dGluZyBhIG5vbi1uaWwgdmFsdWUgZm9yCis7OyAnZW5hYmxlLWxvdy1s
ZXZlbC1rZXktZXZlbnRzJywgZXZlbnRzIGJlZ2luIHRvIGJlIGhhbmRsZWQgYnkKKzs7ICds
bGstaGFuZGxlJywgd2hpY2ggdHJpZXMgdG8gZGV0ZWN0IG4tdGFwcywgYW5kIGNyZWF0ZXMg
aW5wdXQKKzs7IGV2ZW50cy4gU2VlICdsbGstYmluZCcuCisKKzs7IENvZGU6CisKKyhyZXF1
aXJlICdjbC1saWIpCisKKyhkZWZ2YXIgbGxrLXRhcC10aW1lb3V0IChsZXQgKCh0aW1lICht
b3VzZS1kb3VibGUtY2xpY2stdGltZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAo
aWYgKD4gdGltZSAwKSB0aW1lIDgwMCkpCisgICJUaW1lIGluIG1pbGxpc2Vjb25kcyBiZXR3
ZWVuIGtleSBwcmVzc2VzL3JlbGVhc2VzIHRvIGNvbnNpZGVyIGEgZG91YmxlIHRhcC4KK0Zv
ciB0cmlwbGUgdGFwcywgdGhlIHRpbWUgaXMgdHdpY2UgdGhpcyB2YWx1ZS4iKQorCisoY2wt
ZGVmc3RydWN0IChsb3ctbGV2ZWwta2V5ICg6dHlwZSBsaXN0KSkKKyAgIlN0cnVjdHVyZSBm
b3IgbG93IGxldmVsIGtleSBldmVudHMuCitSZWNlaXZlZCBhcyBsb3ctbGV2ZWwta2V5IG9u
IGBzcGVjaWFsLWV2ZW50LW1hcCcuIgorICAoZXZlbnQtdHlwZSBuaWwgOnR5cGUgc3ltYm9s
CisgICA6ZG9jdW1lbnRhdGlvbiAiVHlwZSBvZiBldmVudDogbG93LWxldmVsLWtleSIpCisg
IChpcy1rZXktcHJlc3MgbmlsIDp0eXBlIGJvb2xlYW4KKyAgIDpkb2N1bWVudGF0aW9uICJ0
IGlmIHRoZSBrZXkgaGFzIGJlZW4gcHJlc3NlZCwgbmlsIGlmIGl0IGhhcyBiZWVuIHJlbGVh
c2VkLiIpCisgIChrZXkgbmlsIDp0eXBlIGludGVnZXIKKyAgIDpkb2N1bWVudGF0aW9uICJU
aGUga2V5c3ltIG51bWJlci4iKQorICAobW9kaWZpZXIgbmlsIDp0eXBlIHN5bWJvbAorICAg
OmRvY3VtZW50YXRpb24gIk1vZGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleS4gIEl0
IGlzIG5pbCBpZiB0aGUga2V5IGlzCitub3QgYSBtb2RpZmllci4gIEl0IGNhbiBiZSBvbmUg
b2YgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBzaGlmdCwgY29udHJvbCwgbWV0YSwKK3N1cGVy
LCBoeXBlciwgYWx0LiAgSXQgY2FuIGFsc28gYmUgdCBpZiB0aGUga2V5IGlzIGEgbW9kaWZp
ZXIgYnV0IGl0IGNhbid0IGJlCitpZGVudGlmaWVkLCBhcyBpbiB0aGUgUEdUSyBiYWNrZW5k
LiIpCisgICh0aW1lIG5pbCA6dHlwZSBpbnRlZ2VyCisgICA6ZG9jdW1lbnRhdGlvbiAiVGlt
ZXN0YW1wIGluIG1pbGxpc2Vjb25kcyBvZiB0aGUgZXZlbnQuIikKKyAgKGZyYW1lIG5pbCA6
dHlwZSBmcmFtZQorICAgOmRvY3VtZW50YXRpb24gIkZyYW1lIHdoZXJlIHRoZSBldmVudCBo
YXBwZW5lZC4iKSkKKworKGRlZnZhciBsbGstYmluZGluZ3MgbmlsCisgICJMaXN0IG9mIGJp
bmRpbmdzIGZvciBsb3cgbGV2ZWwga2V5IGV2ZW50cyAocHJlc3MvcmVsZWFzZS90YXApLgor
CitVc2UgdGhlIGBsbGstYmluZCcgZnVuY3Rpb24gdG8gYWRkIGJpbmRpbmdzLiAgU2VlIGl0
cyBkb2N1bWVudGF0aW9uIGZvcgorYSBkZXNjcmlwdGlvbiBvZiB0aGUgYmluZGluZyBpbmZv
cm1hdGlvbi4iKQorCisoZGVmdmFyIGxsay1rZXlzeW1zIG5pbAorICAiTGlzdCBvZiBrZXlz
eW1zIGFuZCB0aGVpciBuYW1lcy4KK0VhY2ggZWxlbWVudCBoYXMgdGhlIGZvcm0gKENPREUg
LiBLRVlTWU0pLCB3aGVyZSBjb2RlIGlzIGEgTlVNQkVSIGFuZAorS0VZU1lNIGEgc3ltYm9s
LCBzdWNoIGFzIGB4ay1zaGlmdC1sJyIpCisKKzs7IFRPRE8gZG9jc3RyaW5nLgorKGRlZnVu
IGxsay1iaW5kIChrZXkgJnJlc3QgZXZlbnRzKQorICAiQWN0aXZhdGVzIGxvdyBsZXZlbCBl
dmVudCBnZW5lcmF0aW9uIGZvciBhIGtleS4KKworS0VZIGNhbiBiZSBhIG51bWJlciBvciBh
IHN5bWJvbC4gIFRoZSBzeW1ib2xzIGBzaGlmdCcsIGBjb250cm9sJywKK2BtZXRhJywgYHN1
cGVyJywgYGh5cGVyJywgYGFsdCcgYWN0aXZhdGUgZXZlbnRzIGZvciB0aGUgY29ycmVzcG9u
ZGluZworbW9kaWZpZXIga2V5cy4gIEEgbnVtYmVyIGFjdGl2YXRlcyBldmVudHMgZm9yIHRo
ZSBjb3JyZXNwb25kaW5nIEtleVN5bS4KKworRVZFTlRTIGFyZSBzeW1ib2xzIHRoYXQgYWN0
aXZhdGUgb25lIGV2ZW50LiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBwcmVzcycsCitgcmVsZWFz
ZScsIGBkb3VibGUnIGFuZCBgdHJpcGxlJy4KKworU2VlIGBsbGsta2V5c3ltcycgZm9yIGEg
bGlzdCBvZiBrbm93biB2YWx1ZXMgZm9yIEtFWSBhbmQgdGhlaXIgbmFtZXMuCitGb3IgZWFj
aCBvZiB0aG9zZSwgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIHZhcmlhYmxlLiAgSXQgaXMg
YmV0dGVyIHRvCit1c2UgdGhlIHZhcmlhYmxlcyB0byBzcGVjaWZ5IGtleXMsIGFzIG51bWVy
aWNhbCB2YWx1ZXMgYXJlCitwbGF0Zm9ybS1kZXBlbmRlbnQuICBUaGUgbmFtZXMgYXJlIHBh
cmFsbGVsIHRvIHRob3NlIGZvciBLZXlTeW1zIG9uIFgsCithcyBkZWZpbmVkIGluIGB4a2V5
c3ltZGVmLmgnLiBGb3IgZXhhbXBsZSwgYFhLX1NoaWZ0X0wnICh0aGUgbGVmdCBzaGlmdAor
a2V5KSwgY29ycmVzcG9uZHMgdG8gYHhrLXNoaWZ0LWwnLgorCitUaGUgYHhrZXlzeW1kZWYu
aCcgZmlsZSBkZWZpbmVzIGRpZmZlcmVudCBLZXlTeW1zIGZvciBjYXBpdGFsIGFuZCBzbWFs
bAordmVyc2lvbnMgb2YgbGF0aW4gbGV0dGVycy4gIEZvciB0aGlzIGV2ZW50LCBvbmx5IHRo
ZSBjYXBpdGFsIHZlcnNpb24gaXMKK3VzZWQsIHdpdGggdGhlIHZhcmlhYmxlcyBgeGstYScs
IGB4ay1iJywgZXRjLgorCitMb3cgbGV2ZWwga2V5IGV2ZW50cyBtdXN0IGJlIGVuYWJsZWQg
d2l0aCB0aGUgdmFyaWFibGUKK2BlbmFibGUtbG93LWxldmVsLWtleS1ldmVudHMnLgorCitP
bmNlIGEga2V5IGlzIGFjdGl2YXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24sIGlucHV0IGV2ZW50
cyB3aWxsIGJlCitnZW5lcmF0ZWQgZm9yIHRoZW0sIGFuZCBjYW4gYmUgYm91bmQgdG8gY29t
bWFuZHMgdXNpbmcgbm9ybWFsIGtleW1hcHMuCisKK0ZvciBleGFtcGxlLCBhY3RpdmF0aW5n
IHRoZSBkb3VibGUgdGFwIGZvciB0aGUgbGVmdCBzaGlmdCBrZXk6CisKKyAgKGxsay1iaW5k
IHhrLXNoaWZ0LWwgXFw9J2RvdWJsZSkKKword2lsbCBnZW5lcmF0ZSB0aGUgZXZlbnQgYGRv
dWJsZS14ay1zaGlmdC1sJywgdGhhbiBjYW4gYmUgYm91bmQgdG8gYQorY29tbWFuZCB3aXRo
OgorCisgIChrZXltYXAtZ2xvYmFsLXNldCBbZG91YmxlLXhrLXNoaWZ0LWxdIENPTU1BTkQp
CisKK1ByZWZpeGVzIGZvciBldmVudHMgYXJlIGBwcmVzcy1rZXktJywgYHJlbGVhc2Uta2V5
LScsIGBkb3VibGUtJyBhbmQKK2B0cmlwbGUtJy4KKworSWYgeW91IHVzZSBhIEtleVN5bSBu
dW1iZXIgdGhhdCBpcyBub3Qgb24gYGxsay1rZXlzeW1zJywgdGhlIGV2ZW50cyB3aWxsCit1
c2UgaXRzIG51bWVyaWNhbCB2YWx1ZS4iCisgIChzZXRxIGxsay1iaW5kaW5ncworICAgICAg
ICAoY2wtZGVsZXRlLWlmIChsYW1iZGEgKHgpIChlcSAoY2FyIHgpIGtleSkpIGxsay1iaW5k
aW5ncykpCisgIChwdXNoIChhcHBlbmQgKGxpc3Qga2V5KSBldmVudHMpIGxsay1iaW5kaW5n
cykpCisKKzs7IFdlIHN0b3JlIHRoZSBsYXN0IGV2ZW50cyAoa2V5L21vZGlmaWVyIGlzLXBy
ZXNzIHRpbWVzdGFtcCkgaGVyZSB0bworOzsgdGVzdCBmb3IgbXVsdGl0YXAuICBUaGlzIGlz
IG5vdCB0aGUgdXNlIHRoZSBsb3ctbGV2ZWwta2V5IHN0cnVjdC4KKyhkZWZ2YXIgbGxrLS1l
dmVudC1oaXN0b3J5LWZvci10YXAgbmlsCisgICJJbnRlcm5hbCB2YXJpYWJsZSBmb3IgZGV0
ZWN0aW5nIHRhcHMuIikKKworKGRlZnVuIGxsay0tZGV0ZWN0LW4tdGFwIChuIHRpbWVvdXQp
CisgICJJbnRlcm5hbCBmdW5jdGlvbiB0byBkZXRlY3Qgbi10YXAga2V5cy4iCisgIDs7IE9u
bHkgY2FyZSBhYm91dCBsYXN0IDJ4TiBldmVudHMKKyAgKG50YWtlICgqIDIgbikgbGxrLS1l
dmVudC1oaXN0b3J5LWZvci10YXApCisgIDs7IElmIHdlIGhhdmU6CisgIDs7IC0gRXhhY3Rs
eSAyICogbiBldmVudHMuCisgIDs7IC0gZG93biwgdXAsIGRvd24sIHVwLCAuLi4KKyAgOzsg
LSBub3QgdHdvIG11Y2ggdGltZSBiZXR3ZWVuIGZpcnN0IGFuZCBsYXN0CisgIChhbmQgKGVx
ICgqIDIgbikgKGxlbmd0aCBsbGstLWV2ZW50LWhpc3RvcnktZm9yLXRhcCkpCisgICAgICAg
KGNsLWV2ZXJ5ICMnZXEKKyAgICAgICAgICAgICAgICAgKG50YWtlICgqIDIgbikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIChsaXN0IG5pbCB0IG5pbCB0IG5pbCB0IG5pbCB0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgdCBuaWwgdCBuaWwgdCBuaWwgdCkpCisg
ICAgICAgICAgICAgICAgIChtYXBjYXIgJ2NsLXNlY29uZCBsbGstLWV2ZW50LWhpc3Rvcnkt
Zm9yLXRhcCkpCisgICAgICAgKDwgKC0gKGNsLXRoaXJkIChjbC1maXJzdCBsbGstLWV2ZW50
LWhpc3RvcnktZm9yLXRhcCkpCisgICAgICAgICAgICAgKGNsLXRoaXJkIChjYXIgKGxhc3Qg
bGxrLS1ldmVudC1oaXN0b3J5LWZvci10YXApKSkpCisgICAgICAgICAgdGltZW91dCkKKyAg
ICAgICAocHJvZ24gKHNldHEgbGxrLS1ldmVudC1oaXN0b3J5LWZvci10YXAgbmlsKSB0KSkp
CisKKyhkZWZ1biBsbGstLWdlbmVyYXRlLWV2ZW50IChrZXkgZXZlbnQtdHlwZSkKKyAgKHdo
ZW4gKG51bWJlcnAga2V5KQorICAgIChsZXQgKChzeW0gKGNkciAoYXNzb2Mga2V5IGxsay1r
ZXlzeW1zKSkpKQorICAgICAgKHdoZW4gc3ltCisgICAgICAgIChzZXRxIGtleSBzeW0pKSkp
CisgIChwdXNoIChpbnRlcm4gKGZvcm1hdCAiJXMtJXMiIGV2ZW50LXR5cGUga2V5KSkKKyAg
ICAgICAgICAgICAgICAgdW5yZWFkLWNvbW1hbmQtZXZlbnRzKSkKKworKGRlZnVuIGxsay0t
Z2VuZXJhdGUtZXZlbnRzIChrZXkgaXMtcHJlc3MgYmluZGluZyB0aW1lc3RhbXApCisgIChp
ZiBpcy1wcmVzcworICAgICAgKHdoZW4gKG1lbWJlciAncHJlc3MgYmluZGluZykKKyAgICAg
ICAgKGxsay0tZ2VuZXJhdGUtZXZlbnQga2V5ICdwcmVzcy1rZXkpKQorICAgICh3aGVuICht
ZW1iZXIgJ3JlbGVhc2UgYmluZGluZykKKyAgICAgIChsbGstLWdlbmVyYXRlLWV2ZW50IGtl
eSAncmVsZWFzZS1rZXkpKSkKKworICAobGV0ICgoZG91YmxlIChtZW1iZXIgJ2RvdWJsZSBi
aW5kaW5nKSkKKyAgICAgICAgKHRyaXBsZSAobWVtYmVyICd0cmlwbGUgYmluZGluZykpKQor
ICAgIDs7IGEgbm9uLXRhcCBrZXkgY2xlYXJzIHRoZSBldmVudCBoaXN0b3J5LgorICAgIChp
ZiAob3IgZG91YmxlIHRyaXBsZSkKKyAgICAgICAgKHByb2duCisgICAgICAgICAgOzsgQ2xl
YXIgdGhlIGV2ZW50IGhpc3RvcnkgaWYgaXQgaGFzIGV2ZW50cyBmcm9tIGFub3RoZXIga2V5
LgorICAgICAgICAgICh1bmxlc3MgKGVxdWFsIChjYXIgKGNhciBsbGstLWV2ZW50LWhpc3Rv
cnktZm9yLXRhcCkpIGtleSkKKyAgICAgICAgICAgIChzZXRxIGxsay0tZXZlbnQtaGlzdG9y
eS1mb3ItdGFwIG5pbCkpCisgICAgICAgICAgKHB1c2ggKGxpc3Qga2V5IGlzLXByZXNzIHRp
bWVzdGFtcCkgbGxrLS1ldmVudC1oaXN0b3J5LWZvci10YXApCisgICAgICAgICAgKGFuZCBk
b3VibGUKKyAgICAgICAgICAgICAgIChsbGstLWRldGVjdC1uLXRhcCAyIGxsay10YXAtdGlt
ZW91dCkKKyAgICAgICAgICAgICAgIChsbGstLWdlbmVyYXRlLWV2ZW50IGtleSAnZG91Ymxl
LWtleSkpCisgICAgICAgICAgKGFuZCB0cmlwbGUKKyAgICAgICAgICAgICAgIChsbGstLWRl
dGVjdC1uLXRhcCAzICgqIDIgbGxrLXRhcC10aW1lb3V0KSkKKyAgICAgICAgICAgICAgIChs
bGstLWdlbmVyYXRlLWV2ZW50IGtleSAndHJpcGxlLWtleSkpKQorICAgICAgOzsgQSBub24t
dGFwIGtleSBjbGVhcnMgdGhlIGV2ZW50IGhpc3RvcnkuCisgICAgICAoc2V0cSBsbGstLWV2
ZW50LWhpc3RvcnktZm9yLXRhcCBuaWwpKSkpCisKKyhkZWZ1biBsbGstaGFuZGxlICgpCisg
IChpbnRlcmFjdGl2ZSkKKyAgKGxldCogKChrZXkgKGxvdy1sZXZlbC1rZXkta2V5IGxhc3Qt
aW5wdXQtZXZlbnQpKQorICAgICAgICAgKG1vZGlmaWVyIChsb3ctbGV2ZWwta2V5LW1vZGlm
aWVyIGxhc3QtaW5wdXQtZXZlbnQpKQorICAgICAgICAgKHRpbWVzdGFtcCAobG93LWxldmVs
LWtleS10aW1lIGxhc3QtaW5wdXQtZXZlbnQpKQorICAgICAgICAgKGlzLXByZXNzIChsb3ct
bGV2ZWwta2V5LWlzLWtleS1wcmVzcyBsYXN0LWlucHV0LWV2ZW50KSkKKyAgICAgICAgIChi
aW5kaW5nIChhc3NvYyBrZXkgbGxrLWJpbmRpbmdzKSkKKyAgICAgICAgIChiaW5kaW5nLW1v
ZGlmaWVyIChhc3NvYyBtb2RpZmllciBsbGstYmluZGluZ3MpKSkKKyAgICAoaWYgYmluZGlu
ZworICAgICAgICAobGxrLS1nZW5lcmF0ZS1ldmVudHMga2V5IGlzLXByZXNzIGJpbmRpbmcg
dGltZXN0YW1wKQorICAgICAgKHdoZW4gYmluZGluZy1tb2RpZmllcgorICAgICAgICAobGxr
LS1nZW5lcmF0ZS1ldmVudHMgbW9kaWZpZXIgaXMtcHJlc3MgYmluZGluZy1tb2RpZmllciB0
aW1lc3RhbXApKSkpKQorCisoZGVmbWFjcm8gbGxrLS1kZWZpbmUteGsgKG5hbWUgeC1rZXlz
eW0gdzMyLWtleXN5bSkKKyAgIkludGVybmFsIG1hY3JvIHRvIGRlZmluZSBrZXlzeW1zLiIK
KyAgYChsZXQgKChrc3ltIChwY2FzZSAod2luZG93LXN5c3RlbSkKKyAgICAgICAgICAgICAg
ICAgKChvciAncGd0ayAneCkgLHgta2V5c3ltKQorICAgICAgICAgICAgICAgICAoJ3czMiAs
dzMyLWtleXN5bSkpKSkKKyAgICAgKGRlZmNvbnN0ICxuYW1lIGtzeW0gIkNvbnN0YW50IGZv
ciBhIGtleXN5bSB2YWx1ZS4iKQorICAgICAocHVzaCAoY29ucyBrc3ltICcsbmFtZSkgbGxr
LWtleXN5bXMpKSkKKworKGRlZnVuIGxsay0tZGVmaW5lLWtleXN5bXMgKCkKKyAgIkluaXRp
YWxpemUgdGhlIGtleXN5bSBsaXN0LCBgbGxrLWtleXN5bXMnLiIKKyAgKHNldHEgbGxrLWtl
eXN5bXMgbmlsKQorCisgIDs7IHR0eSBrZXlzCisgIChsbGstLWRlZmluZS14ayB4ay1iYWNr
c3BhY2UgICAjeGZmMDggI3gwOCkgOzsgWEtfQmFja1NwYWNlIFZLX0JBQ0sKKyAgKGxsay0t
ZGVmaW5lLXhrIHhrLXRhYiAgICAgICAgICN4ZmYwOSAjeDA5KSA7OyBYS19UYWIgVktfVEFC
CisgIChsbGstLWRlZmluZS14ayB4ay1jbGVhciAgICAgICAjeGZmMGIgI3gwQykgOzsgWEtf
Q2xlYXIgVktfQ0xFQVIKKyAgKGxsay0tZGVmaW5lLXhrIHhrLXJldHVybiAgICAgICN4ZmYw
ZCAjeDBEKSA7OyBYS19SZXR1cm4gVktfUkVUVVJOCisgIChsbGstLWRlZmluZS14ayB4ay1w
YXVzZSAgICAgICAjeGZmMTMgI3gxMykgOzsgWEtfUGF1c2UgVktfUEFVU0UKKyAgKGxsay0t
ZGVmaW5lLXhrIHhrLXNjcm9sbC1sb2NrICN4ZmYxNCAjeDkxKSA7OyBYS19TY3JvbGxfTG9j
ayBWS19TQ1JPTEwKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWVzY2FwZSAgICAgICN4ZmYxQiAj
eDFCKSA7OyBYS19Fc2NhcGUgVktfRVNDQVBFCisgIChsbGstLWRlZmluZS14ayB4ay1kZWxl
dGUgICAgICAjeGZmZmYgI3gyRSkgOzsgWEtfRGVsZXRlIFZLX0RFTEVURQorCisgIDs7IEN1
cnNvciBjb250cm9sIGFuZCBtb3Rpb24KKyAgKGxsay0tZGVmaW5lLXhrIHhrLWhvbWUgICAg
ICAgICN4ZmY1MCAjeDI0KSA7OyBYS19Ib21lIFZLX0hPTUUKKyAgKGxsay0tZGVmaW5lLXhr
IHhrLWxlZnQgICAgICAgICN4ZmY1MSAjeDI1KSA7OyBYS19MZWZ0IFZLX0xFRlQKKyAgKGxs
ay0tZGVmaW5lLXhrIHhrLXVwICAgICAgICAgICN4ZmY1MiAjeDI2KSA7OyBYS19VcCBWS19V
UAorICAobGxrLS1kZWZpbmUteGsgeGstcmlnaHQgICAgICAgI3hmZjUzICN4MjcpIDs7IFhL
X1JpZ2h0IFZLX1JJR0hUCisgIChsbGstLWRlZmluZS14ayB4ay1kb3duICAgICAgICAjeGZm
NTQgI3gyOCkgOzsgWEtfRG93biBWS19ET1dOCisgIChsbGstLWRlZmluZS14ayB4ay1wYWdl
LXVwICAgICAjeGZmNTUgI3gyMSkgOzsgWEtfUGFnZV9VcCBWS19QUklPUgorICAobGxrLS1k
ZWZpbmUteGsgeGstcGFnZS1kb3duICAgI3hmZjU2ICN4MjIpIDs7IFhLX1BhZ2VfRG93biBW
S19ORVhUCisgIChsbGstLWRlZmluZS14ayB4ay1lbmQgICAgICAgICAjeGZmNTcgI3gyMykg
OzsgWEtfRW5kIFZLX0VORAorICAobGxrLS1kZWZpbmUteGsgeGstYmVnaW4gICAgICAgI3hm
ZjU4ICN4MjQpIDs7IFhLX0JlZ2luIFZLX0hPTUUKKworICA7OyBTcGVjaWFsIFdpbmRvd3Mg
a2V5Ym9hcmQga2V5cworICAobGxrLS1kZWZpbmUteGsgeGstd2luLWwgICAgICAgI3hGRjVC
ICN4NUIpIDs7IFhLX1dpbl9MIFZLX0xXSU4KKyAgKGxsay0tZGVmaW5lLXhrIHhrLXdpbi1y
ICAgICAgICN4RkY1QyAjeDVDKSA7OyBYS19XaW5fUiBWS19SV0lOCisgIChsbGstLWRlZmlu
ZS14ayB4ay1hcHAgICAgICAgICAjeEZGNUQgI3g1RCkgOzsgWEtfQXBwIFZLX0FQUFMKKwor
ICA7OyBNaXNjIGZ1bmN0aW9ucworICAobGxrLS1kZWZpbmUteGsgeGstc2VsZWN0ICAgICAg
I3hmZjYwICN4MjkpIDs7IFhLX1NlbGVjdCBWS19TRUxFQ1QKKyAgKGxsay0tZGVmaW5lLXhr
IHhrLXByaW50ICAgICAgICN4ZmY2MSAjeDJBKSA7OyBYS19QcmludCBWS19QUklOVAorICAo
bGxrLS1kZWZpbmUteGsgeGstaW5zZXJ0ICAgICAgI3hmZjY0ICN4MkQpIDs7IFhLX0luc2Vy
dCBWS19JTlNFUlQKKyAgKGxsay0tZGVmaW5lLXhrIHhrLW51bS1sb2NrICAgICN4ZmY3ZiAj
eDkwKSA7OyBYS19OdW1fTG9jayBWS19OVU1MT0NLCisKKyAgOzsgS2V5cGFkCisgIDs7IFRP
RE86IENoZWNrIHZhbHVlcyBmb3IgTVMtV2luZG93cworICAobGxrLS1kZWZpbmUteGsgeGst
a3AtZW50ZXIgICAgI3hmZjhkIG5pbCkgIDs7IFhLX0tQX0VudGVyID8/PworICAobGxrLS1k
ZWZpbmUteGsgeGsta3AtbXVsdGlwbHkgI3hmZmFhIG5pbCkgIDs7IFhLX0tQX011bHRpcGx5
ID8/PworICAobGxrLS1kZWZpbmUteGsgeGsta3AtYWRkICAgICAgI3hmZmFiIG5pbCkgIDs7
IFhLX0tQX0FkZCA/Pz8KKyAgKGxsay0tZGVmaW5lLXhrIHhrLWtwLXN1YnRyYWN0ICN4ZmZh
ZCBuaWwpICA7OyBYS19LUF9TdWJ0cmFjdCA/Pz8KKyAgKGxsay0tZGVmaW5lLXhrIHhrLWtw
LWRlY2ltYWwgICN4ZmZhZSBuaWwpICA7OyBYS19LUF9EZWNpbWFsID8/PworICAobGxrLS1k
ZWZpbmUteGsgeGsta3AtZGl2aWRlICAgI3hmZmFmIG5pbCkgIDs7IFhLX0tQX0RpdmlkZSA/
Pz8KKyAgKGxsay0tZGVmaW5lLXhrIHhrLWtwLTAgICAgICAgICN4ZmZiMCAjeDYwKSA7OyBY
S19LUF8wIFZLX05VTVBBRDAKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWtwLTEgICAgICAgICN4
ZmZiMSAjeDYxKSA7OyBYS19LUF8xIFZLX05VTVBBRDEKKyAgKGxsay0tZGVmaW5lLXhrIHhr
LWtwLTIgICAgICAgICN4ZmZiMiAjeDYyKSA7OyBYS19LUF8yIFZLX05VTVBBRDIKKyAgKGxs
ay0tZGVmaW5lLXhrIHhrLWtwLTMgICAgICAgICN4ZmZiMyAjeDYzKSA7OyBYS19LUF8zIFZL
X05VTVBBRDMKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWtwLTQgICAgICAgICN4ZmZiNCAjeDY0
KSA7OyBYS19LUF80IFZLX05VTVBBRDQKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWtwLTUgICAg
ICAgICN4ZmZiNSAjeDY1KSA7OyBYS19LUF81IFZLX05VTVBBRDUKKyAgKGxsay0tZGVmaW5l
LXhrIHhrLWtwLTYgICAgICAgICN4ZmZiNiAjeDY2KSA7OyBYS19LUF82IFZLX05VTVBBRDYK
KyAgKGxsay0tZGVmaW5lLXhrIHhrLWtwLTcgICAgICAgICN4ZmZiNyAjeDY3KSA7OyBYS19L
UF83IFZLX05VTVBBRDcKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWtwLTggICAgICAgICN4ZmZi
OCAjeDY4KSA7OyBYS19LUF84IFZLX05VTVBBRDgKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWtw
LTkgICAgICAgICN4ZmZiOSAjeDY5KSA7OyBYS19LUF85IFZLX05VTVBBRDkKKworICA7OyBG
dW5jdGlvbiBrZXlzCisgIChsbGstLWRlZmluZS14ayB4ay1mMSAgICAgICAgICAjeGZmYmUg
I3g3MCkgOzsgWEtfRjEgVktfRjEKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWYyICAgICAgICAg
ICN4ZmZiZiAjeDcxKSA7OyBYS19GMiBWS19GMgorICAobGxrLS1kZWZpbmUteGsgeGstZjMg
ICAgICAgICAgI3hmZmMwICN4NzIpIDs7IFhLX0YzIFZLX0YzCisgIChsbGstLWRlZmluZS14
ayB4ay1mNCAgICAgICAgICAjeGZmYzEgI3g3MykgOzsgWEtfRjQgVktfRjQKKyAgKGxsay0t
ZGVmaW5lLXhrIHhrLWY1ICAgICAgICAgICN4ZmZjMiAjeDc0KSA7OyBYS19GNSBWS19GNQor
ICAobGxrLS1kZWZpbmUteGsgeGstZjYgICAgICAgICAgI3hmZmMzICN4NzUpIDs7IFhLX0Y2
IFZLX0Y2CisgIChsbGstLWRlZmluZS14ayB4ay1mNyAgICAgICAgICAjeGZmYzQgI3g3Nikg
OzsgWEtfRjcgVktfRjcKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWY4ICAgICAgICAgICN4ZmZj
NSAjeDc3KSA7OyBYS19GOCBWS19GOAorICAobGxrLS1kZWZpbmUteGsgeGstZjkgICAgICAg
ICAgI3hmZmM2ICN4NzgpIDs7IFhLX0Y5IFZLX0Y5CisgIChsbGstLWRlZmluZS14ayB4ay1m
MTAgICAgICAgICAjeGZmYzcgI3g3OSkgOzsgWEtfRjEwIFZLX0YxMAorICAobGxrLS1kZWZp
bmUteGsgeGstZjExICAgICAgICAgI3hmZmM4ICN4N0EpIDs7IFhLX0YxMSBWS19GMTEKKyAg
KGxsay0tZGVmaW5lLXhrIHhrLWYxMiAgICAgICAgICN4ZmZjOSAjeDdCKSA7OyBYS19GMTIg
VktfRjEyCisgIChsbGstLWRlZmluZS14ayB4ay1mMTMgICAgICAgICAjeGZmY2EgI3g3Qykg
OzsgWEtfRjEzIFZLX0YxMworICAobGxrLS1kZWZpbmUteGsgeGstZjE0ICAgICAgICAgI3hm
ZmNiICN4N0QpIDs7IFhLX0YxNCBWS19GMTQKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWYxNSAg
ICAgICAgICN4ZmZjYyAjeDdFKSA7OyBYS19GMTUgVktfRjE1CisgIChsbGstLWRlZmluZS14
ayB4ay1mMTYgICAgICAgICAjeGZmY2QgI3g3RikgOzsgWEtfRjE2IFZLX0YxNgorICAobGxr
LS1kZWZpbmUteGsgeGstZjE3ICAgICAgICAgI3hmZmNlICN4ODApIDs7IFhLX0YxNyBWS19G
MTcKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWYxOCAgICAgICAgICN4ZmZjZiAjeDgxKSA7OyBY
S19GMTggVktfRjE4CisgIChsbGstLWRlZmluZS14ayB4ay1mMTkgICAgICAgICAjeGZmZDAg
I3g4MikgOzsgWEtfRjE5IFZLX0YxOQorICAobGxrLS1kZWZpbmUteGsgeGstZjIwICAgICAg
ICAgI3hmZmQxICN4ODMpIDs7IFhLX0YyMCBWS19GMjAKKyAgKGxsay0tZGVmaW5lLXhrIHhr
LWYyMSAgICAgICAgICN4ZmZkMiAjeDg0KSA7OyBYS19GMjEgVktfRjIxCisgIChsbGstLWRl
ZmluZS14ayB4ay1mMjIgICAgICAgICAjeGZmZDMgI3g4NSkgOzsgWEtfRjIyIFZLX0YyMgor
ICAobGxrLS1kZWZpbmUteGsgeGstZjIzICAgICAgICAgI3hmZmQ0ICN4ODYpIDs7IFhLX0Yy
MyBWS19GMjMKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWYyNCAgICAgICAgICN4ZmZkNSAjeDg3
KSA7OyBYS19GMjQgVktfRjI0CisKKyAgOzsgTW9kaWZpZXIga2V5cworICAobGxrLS1kZWZp
bmUteGsgeGstc2hpZnQtbCAgICAgI3hmZmUxICN4QTApIDs7IFhLX1NoaWZ0X0wgVktfTFNI
SUZUCisgIChsbGstLWRlZmluZS14ayB4ay1zaGlmdC1yICAgICAjeGZmZTIgI3hBMSkgOzsg
WEtfU2hpZnRfUiBWS19SU0hJRlQKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWNvbnRyb2wtbCAg
ICN4ZmZlMyAjeEEyKSA7OyBYS19Db250cm9sX0wgVktfTENPTlRST0wKKyAgKGxsay0tZGVm
aW5lLXhrIHhrLWNvbnRyb2wtciAgICN4ZmZlNCAjeEEzKSA7OyBYS19Db250cm9sX1IgVktf
UkNPTlRST0wKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWNhcHMtbG9jayAgICN4ZmZlNSAjeDE0
KSA7OyBYS19DYXBzX0xvY2sgVktfQ0FQSVRBTAorICAobGxrLS1kZWZpbmUteGsgeGstbWV0
YS1sICAgICAgI3hmZmU3IG5pbCkgIDs7IFhLX01ldGFfTAorICAobGxrLS1kZWZpbmUteGsg
eGstbWV0YS1yICAgICAgI3hmZmVlIG5pbCkgIDs7IFhLX01ldGFfUgorICAobGxrLS1kZWZp
bmUteGsgeGstYWx0LWwgICAgICAgI3hmZmU5ICN4QTQpIDs7IFhLX0FsdF9MIFZLX0xNRU5V
CisgIChsbGstLWRlZmluZS14ayB4ay1hbHQtciAgICAgICAjeGZmZWEgI3hBNSkgOzsgWEtf
QWx0X1IgVktfUk1FTlUKKyAgKGxsay0tZGVmaW5lLXhrIHhrLXN1cGVyLWwgICAgICN4ZmZl
YiBuaWwpICA7OyBYS19TdXBlcl9MCisgIChsbGstLWRlZmluZS14ayB4ay1zdXBlci1yICAg
ICAjeGZmZWMgbmlsKSAgOzsgWEtfU3VwZXJfUgorICAobGxrLS1kZWZpbmUteGsgeGstaHlw
ZXItbCAgICAgI3hmZmVkIG5pbCkgIDs7IFhLX0h5cGVyX0wKKyAgKGxsay0tZGVmaW5lLXhr
IHhrLWh5cGVyLXIgICAgICN4ZmZlZSBuaWwpICA7OyBYS19IeXBlcl9SCisKKyAgOzsgTGF0
aW4gMQorICA7OyBGb3IgbnVtYmVycyBhbmQgbGV0dGVycywgTVMtV2luZG93cyBkb2VzIG5v
dCBkZWZpbmUgY29uc3RhbnQgbmFtZXMuCisgIDs7IFgxMSBkZWZpbmVzIGRpc3RpbmN0IGtl
eXN5bXMgZm9yIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlCisgIDs7IGxldHRlcnMuICBXZSB1
c2Ugb25seSB0aGUgdXBwZXJjYXNlIG9uZXMuICBFdmVudHMgd2l0aCBsb3dlcmNhc2UKKyAg
OzsgbGV0dGVycyBhcmUgY29udmVydGVkIHRvIHVwcGVyY2FzZS4KKyAgKGxsay0tZGVmaW5l
LXhrIHhrLXNwYWNlICAgICAgICN4MDAyMCAjeDIwKSA7OyBYS19zcGFjZSBWS19TUEFDRQor
ICAobGxrLS1kZWZpbmUteGsgeGstMCAgICAgICAgICAgI3gwMDMwICN4MzApIDs7IFhLXzAK
KyAgKGxsay0tZGVmaW5lLXhrIHhrLTEgICAgICAgICAgICN4MDAzMSAjeDMxKSA7OyBYS18x
CisgIChsbGstLWRlZmluZS14ayB4ay0yICAgICAgICAgICAjeDAwMzIgI3gzMikgOzsgWEtf
MgorICAobGxrLS1kZWZpbmUteGsgeGstMyAgICAgICAgICAgI3gwMDMzICN4MzMpIDs7IFhL
XzMKKyAgKGxsay0tZGVmaW5lLXhrIHhrLTQgICAgICAgICAgICN4MDAzNCAjeDM0KSA7OyBY
S180CisgIChsbGstLWRlZmluZS14ayB4ay01ICAgICAgICAgICAjeDAwMzUgI3gzNSkgOzsg
WEtfNQorICAobGxrLS1kZWZpbmUteGsgeGstNiAgICAgICAgICAgI3gwMDM2ICN4MzYpIDs7
IFhLXzYKKyAgKGxsay0tZGVmaW5lLXhrIHhrLTcgICAgICAgICAgICN4MDAzNyAjeDM3KSA7
OyBYS183CisgIChsbGstLWRlZmluZS14ayB4ay04ICAgICAgICAgICAjeDAwMzggI3gzOCkg
OzsgWEtfOAorICAobGxrLS1kZWZpbmUteGsgeGstOSAgICAgICAgICAgI3gwMDM5ICN4Mzkp
IDs7IFhLXzkKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWEgICAgICAgICAgICN4MDA0MSAjeDQx
KSA7OyBYS19BCisgIChsbGstLWRlZmluZS14ayB4ay1iICAgICAgICAgICAjeDAwNDIgI3g0
MikgOzsgWEtfQgorICAobGxrLS1kZWZpbmUteGsgeGstYyAgICAgICAgICAgI3gwMDQzICN4
NDMpIDs7IFhLX0MKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWQgICAgICAgICAgICN4MDA0NCAj
eDQ0KSA7OyBYS19ECisgIChsbGstLWRlZmluZS14ayB4ay1lICAgICAgICAgICAjeDAwNDUg
I3g0NSkgOzsgWEtfRQorICAobGxrLS1kZWZpbmUteGsgeGstZiAgICAgICAgICAgI3gwMDQ2
ICN4NDYpIDs7IFhLX0YKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWcgICAgICAgICAgICN4MDA0
NyAjeDQ3KSA7OyBYS19HCisgIChsbGstLWRlZmluZS14ayB4ay1oICAgICAgICAgICAjeDAw
NDggI3g0OCkgOzsgWEtfSAorICAobGxrLS1kZWZpbmUteGsgeGstaSAgICAgICAgICAgI3gw
MDQ5ICN4NDkpIDs7IFhLX0kKKyAgKGxsay0tZGVmaW5lLXhrIHhrLWogICAgICAgICAgICN4
MDA0QSAjeDRBKSA7OyBYS19KCisgIChsbGstLWRlZmluZS14ayB4ay1rICAgICAgICAgICAj
eDAwNEIgI3g0QikgOzsgWEtfSworICAobGxrLS1kZWZpbmUteGsgeGstbCAgICAgICAgICAg
I3gwMDRDICN4NEMpIDs7IFhLX0wKKyAgKGxsay0tZGVmaW5lLXhrIHhrLW0gICAgICAgICAg
ICN4MDA0RCAjeDREKSA7OyBYS19NCisgIChsbGstLWRlZmluZS14ayB4ay1uICAgICAgICAg
ICAjeDAwNEUgI3g0RSkgOzsgWEtfTgorICAobGxrLS1kZWZpbmUteGsgeGstbyAgICAgICAg
ICAgI3gwMDRGICN4NEYpIDs7IFhLX08KKyAgKGxsay0tZGVmaW5lLXhrIHhrLXAgICAgICAg
ICAgICN4MDA1MCAjeDUwKSA7OyBYS19QCisgIChsbGstLWRlZmluZS14ayB4ay1xICAgICAg
ICAgICAjeDAwNTEgI3g1MSkgOzsgWEtfUQorICAobGxrLS1kZWZpbmUteGsgeGstciAgICAg
ICAgICAgI3gwMDUyICN4NTIpIDs7IFhLX1IKKyAgKGxsay0tZGVmaW5lLXhrIHhrLXMgICAg
ICAgICAgICN4MDA1MyAjeDUzKSA7OyBYS19TCisgIChsbGstLWRlZmluZS14ayB4ay10ICAg
ICAgICAgICAjeDAwNTQgI3g1NCkgOzsgWEtfVAorICAobGxrLS1kZWZpbmUteGsgeGstdSAg
ICAgICAgICAgI3gwMDU1ICN4NTUpIDs7IFhLX1UKKyAgKGxsay0tZGVmaW5lLXhrIHhrLXYg
ICAgICAgICAgICN4MDA1NiAjeDU2KSA7OyBYS19WCisgIChsbGstLWRlZmluZS14ayB4ay13
ICAgICAgICAgICAjeDAwNTcgI3g1NykgOzsgWEtfVworICAobGxrLS1kZWZpbmUteGsgeGst
eCAgICAgICAgICAgI3gwMDU4ICN4NTgpIDs7IFhLX1gKKyAgKGxsay0tZGVmaW5lLXhrIHhr
LXkgICAgICAgICAgICN4MDA1OSAjeDU5KSA7OyBYS19ZCisgIChsbGstLWRlZmluZS14ayB4
ay16ICAgICAgICAgICAjeDAwNUEgI3g1QSkpOzsgWEtfWgorCisoZGVmdW4gZGVzY3JpYmUt
bG93LWxldmVsLWtleSAoKQorICAiV2FpdCBmb3Iga2V5IHByZXNzIGFuZCBkZXNjcmliZSB0
aGUgbG93LWxldmVsIGtleSBldmVudCBpdCBnZW5lcmF0ZXMuIgorICAoaW50ZXJhY3RpdmUp
CisgIChkZWZpbmUta2V5IHNwZWNpYWwtZXZlbnQtbWFwIFtsb3ctbGV2ZWwta2V5XSAnbGxr
LS1kZXNjcmliZSkpCisKKyhkZWZ1biBsbGstLWRlc2NyaWJlICgpCisgICJJbnRlcm5hbCBm
dW5jdGlvbiBmb3IgYHNwZWNpYWwtZXZlbnQtbWFwJyB0byBkZXNjcmliZSBsb3cgbGV2ZWwg
a2V5IGV2ZW50cy4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHdoZW4gKGxvdy1sZXZlbC1rZXkt
aXMta2V5LXByZXNzIGxhc3QtaW5wdXQtZXZlbnQpCisgICAgKGRlZmluZS1rZXkgc3BlY2lh
bC1ldmVudC1tYXAgW2xvdy1sZXZlbC1rZXldICdsbGstaGFuZGxlKQorICAgICh3aXRoLWhl
bHAtd2luZG93IChoZWxwLWJ1ZmZlcikKKyAgICAgIChpbnNlcnQgIlxuIikKKyAgICAgIChs
ZXQqICgoeGsgKGxvdy1sZXZlbC1rZXkta2V5IGxhc3QtaW5wdXQtZXZlbnQpKQorICAgICAg
ICAgICAgIChzeW0gKGFzc29jIHhrIGxsay1rZXlzeW1zKSkpCisgICAgICAgIChpbnNlcnQg
KGZvcm1hdCAiS2V5c3ltIG51bWJlcjogJWQgKCN4JVgpLFxuIiB4ayB4aykpCisgICAgICAg
IChpZiBzeW0KKyAgICAgICAgICAgIChpbnNlcnQgKGZvcm1hdCAid2hpY2ggY29ycmVzcG9u
ZHMgdG8gbmFtZWQga2V5ICVzLlxuXG4iIChjZHIgc3ltKSkpCisgICAgICAgICAgKGluc2Vy
dCAid2hpY2ggZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkga25vd24gbmFtZWQga2V5Llxu
XG4iKSkKKyAgICAgICAgKGlmIChsb3ctbGV2ZWwta2V5LW1vZGlmaWVyIGxhc3QtaW5wdXQt
ZXZlbnQpCisgICAgICAgICAgICAoaW5zZXJ0IChmb3JtYXQgIlRoaXMga2V5IGNvcnJlc3Bv
bmRzIHRvIHRoZSAlcyBtb2RpZmllci5cblxuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChsb3ctbGV2ZWwta2V5LW1vZGlmaWVyIGxhc3QtaW5wdXQtZXZlbnQpKSkKKyAgICAg
ICAgICAoaW5zZXJ0ICJUaGlzIGtleSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgbW9kaWZp
ZXIuXG5cbiIpKQorICAgICAgICAoaW5zZXJ0ICJTZWUgdGhlIHZhbHVlIG9mIHRoZSBgbGxr
LWtleXN5bXMnIHZhcmlhYmxlIGZvciBhIGxpc3Qgb2Yga25vd24ga2V5cy5cbiIpKSkpKQor
CisobGxrLS1kZWZpbmUta2V5c3ltcykKKyhkZWZpbmUta2V5IHNwZWNpYWwtZXZlbnQtbWFw
IFtsb3ctbGV2ZWwta2V5XSAnbGxrLWhhbmRsZSkKKyhzZXRxIGxsay1iaW5kaW5ncyBuaWwp
CmRpZmYgLS1naXQgYS9zcmMvZ3RrdXRpbC5jIGIvc3JjL2d0a3V0aWwuYwppbmRleCAwZTlk
ZDRkZmUxMS4uNjdjMmM0MjZiOWUgMTAwNjQ0Ci0tLSBhL3NyYy9ndGt1dGlsLmMKKysrIGIv
c3JjL2d0a3V0aWwuYwpAQCAtOTgsNiArOTgsNyBAQCBHX0RFRklORV9UWVBFIChFbWFjc01l
bnVCYXIsIGVtYWNzX21lbnVfYmFyLCBHVEtfVFlQRV9NRU5VX0JBUikKIHN0YXRpYyB2b2lk
IHhnX2ltX2NvbnRleHRfcHJlZWRpdF9jaGFuZ2VkIChHdGtJTUNvbnRleHQgKiwgZ3BvaW50
ZXIpOwogc3RhdGljIHZvaWQgeGdfaW1fY29udGV4dF9wcmVlZGl0X2VuZCAoR3RrSU1Db250
ZXh0ICosIGdwb2ludGVyKTsKIHN0YXRpYyBib29sIHhnX3dpZGdldF9rZXlfcHJlc3NfZXZl
bnRfY2IgKEd0a1dpZGdldCAqLCBHZGtFdmVudCAqLCBncG9pbnRlcik7CitzdGF0aWMgYm9v
bCB4Z193aWRnZXRfa2V5X3JlbGVhc2VfZXZlbnRfY2IgKEd0a1dpZGdldCAqLCBHZGtFdmVu
dCAqLCBncG9pbnRlcik7CiAjZW5kaWYKIAogI2lmIEdUS19DSEVDS19WRVJTSU9OICgzLCAx
MCwgMCkKQEAgLTE3NDksNiArMTc1MCwxMiBAQCB4Z19jcmVhdGVfZnJhbWVfd2lkZ2V0cyAo
c3RydWN0IGZyYW1lICpmKQogICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAod2ZpeGVk
KSwgImtleS1wcmVzcy1ldmVudCIsCiAJCSAgICBHX0NBTExCQUNLICh4Z193aWRnZXRfa2V5
X3ByZXNzX2V2ZW50X2NiKSwKIAkJICAgIE5VTEwpOworCisgIGdfc2lnbmFsX2Nvbm5lY3Qg
KEdfT0JKRUNUICh3Zml4ZWQpLCAia2V5LXJlbGVhc2UtZXZlbnQiLAorCQkgICAgR19DQUxM
QkFDSyAoeGdfd2lkZ2V0X2tleV9yZWxlYXNlX2V2ZW50X2NiKSwKKwkJICAgIE5VTEwpOwor
CisKICNlbmRpZgogCiAgIHsKQEAgLTYzNzYsNiArNjM4Myw1MyBAQCB4Z19pbV9jb250ZXh0
X3ByZWVkaXRfZW5kIChHdGtJTUNvbnRleHQgKmltYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQog
ICBrYmRfYnVmZmVyX3N0b3JlX2V2ZW50ICgmaW5ldik7CiB9CiAKKyNpZm5kZWYgSEFWRV9Y
SU5QVVQyCitzdGF0aWMgdm9pZAoreGdfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50
IChzdHJ1Y3QgZnJhbWUgKmYsCisJCQkJICAgR2RrRXZlbnQgKnhldikKK3sKKyAgR2RrRXZl
bnRLZXkgeGtleSA9IHhldi0+a2V5OworICBib29sIGlzX3ByZXNzOworICBMaXNwX09iamVj
dCBrZXksIG1vZGlmaWVyOworICB1bmlvbiBidWZmZXJlZF9pbnB1dF9ldmVudCBpbmV2Owor
CisgIGlmIChOSUxQIChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzKSkKKyAgICByZXR1
cm47CisKKyAgc3dpdGNoICh4ZXYtPnR5cGUpCisgICAgeworICAgIGNhc2UgR0RLX0tFWV9Q
UkVTUzoKKyAgICAgIGlzX3ByZXNzID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug
R0RLX0tFWV9SRUxFQVNFOgorICAgICAgaXNfcHJlc3MgPSBmYWxzZTsKKyAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm47CisgICAgfQorCisgIG1vZGlmaWVyID0g
eF9nZXRfbW9kaWZpZXJfZm9yX2tleWNvZGUgKEZSQU1FX09VVFBVVF9EQVRBIChmKS0+ZGlz
cGxheV9pbmZvLAorCQkJCQkgeGV2LT5rZXkuaGFyZHdhcmVfa2V5Y29kZSk7CisKKyAgaW50
IGtleXN5bSA9IHhrZXkua2V5dmFsOworCisgIGlmIChrZXlzeW0gPj0gR0RLX0tFWV9hICYm
IGtleXN5bSA8PSBHREtfS0VZX3opCisgICAga2V5c3ltIC09IEdES19LRVlfYSAtIEdES19L
RVlfQTsKKworICBpZiAoIWtiZF9sb3dfbGV2ZWxfa2V5X2lzX2VuYWJsZWQgKGtleXN5bSwg
bW9kaWZpZXIpKQorICAgIHJldHVybjsKKworICBrZXkgPSBtYWtlX2ZpeG51bSAoa2V5c3lt
KTsKKworICBFVkVOVF9JTklUIChpbmV2LmllKTsKKyAgWFNFVEZSQU1FIChpbmV2LmllLmZy
YW1lX29yX3dpbmRvdywgZik7CisgIGluZXYuaWUua2luZCA9IExPV19MRVZFTF9LRVlfRVZF
TlQ7CisgIGluZXYuaWUudGltZXN0YW1wID0geGtleS50aW1lOworICBpbmV2LmllLmFyZyA9
IGxpc3QzIChpc19wcmVzcyA/IFF0IDogUW5pbCwga2V5LCBtb2RpZmllcik7CisgIGtiZF9i
dWZmZXJfc3RvcmVfYnVmZmVyZWRfZXZlbnQgKCZpbmV2LCAmeGdfcGVuZGluZ19xdWl0X2V2
ZW50KTsKK30KKyNlbmRpZgorCiBzdGF0aWMgYm9vbAogeGdfd2lkZ2V0X2tleV9wcmVzc19l
dmVudF9jYiAoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50ICpldmVudCwKIAkJCSAgICAg
IGdwb2ludGVyIHVzZXJfZGF0YSkKQEAgLTY0MDQsNiArNjQ1OCwxMCBAQCB4Z193aWRnZXRf
a2V5X3ByZXNzX2V2ZW50X2NiIChHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQgKmV2ZW50
LAogICBpZiAoIWYpCiAgICAgcmV0dXJuIHRydWU7CiAKKyNpZm5kZWYgSEFWRV9YSU5QVVQy
CisgICAgeGdfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50IChmLCBldmVudCk7Cisj
ZW5kaWYKKwogICBpZiAocG9wdXBfYWN0aXZhdGVkICgpKQogICAgIHJldHVybiB0cnVlOwog
CkBAIC02NTU3LDYgKzY2MTUsMjkgQEAgeGdfd2lkZ2V0X2tleV9wcmVzc19ldmVudF9jYiAo
R3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50ICpldmVudCwKICAgcmV0dXJuIHRydWU7CiB9
CiAKK3N0YXRpYyBib29sCit4Z193aWRnZXRfa2V5X3JlbGVhc2VfZXZlbnRfY2IgKEd0a1dp
ZGdldCAqd2lkZ2V0LCBHZGtFdmVudCAqZXZlbnQsCisJCQkJZ3BvaW50ZXIgdXNlcl9kYXRh
KQoreworI2lmbmRlZiBIQVZFX1hJTlBVVDIKKyAgTGlzcF9PYmplY3QgdGFpbCwgdGVtOwor
ICBzdHJ1Y3QgZnJhbWUgKmYgPSBOVUxMOworCisgIEZPUl9FQUNIX0ZSQU1FICh0YWlsLCB0
ZW0pCisgICAgeworICAgICAgaWYgKEZSQU1FX1hfUCAoWEZSQU1FICh0ZW0pKQorCSAgJiYg
KEZSQU1FX0dUS19XSURHRVQgKFhGUkFNRSAodGVtKSkgPT0gd2lkZ2V0KSkKKwl7CisJICBm
ID0gWEZSQU1FICh0ZW0pOworCSAgYnJlYWs7CisJfQorICAgIH0KKyAgaWYgKGYpCisgICAg
eGdfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50IChmLCBldmVudCk7CisjZW5kaWYK
KyAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wKIHhnX2ZpbHRlcl9rZXkgKHN0cnVjdCBmcmFt
ZSAqZnJhbWUsIFhFdmVudCAqeGtleSkKIHsKZGlmZiAtLWdpdCBhL3NyYy9rZXlib2FyZC5j
IGIvc3JjL2tleWJvYXJkLmMKaW5kZXggZjM2MjQzZGQ0NDIuLjNiOTk0YTAzMmUwIDEwMDY0
NAotLS0gYS9zcmMva2V5Ym9hcmQuYworKysgYi9zcmMva2V5Ym9hcmQuYwpAQCAtNDI3Myw2
ICs0MjczLDcgQEAga2JkX2J1ZmZlcl9nZXRfZXZlbnQgKEtCT0FSRCAqKmticCwKICAgICAg
IGNhc2UgQ09ORklHX0NIQU5HRURfRVZFTlQ6CiAgICAgICBjYXNlIEZPQ1VTX09VVF9FVkVO
VDoKICAgICAgIGNhc2UgU0VMRUNUX1dJTkRPV19FVkVOVDoKKyAgICAgIGNhc2UgTE9XX0xF
VkVMX0tFWV9FVkVOVDoKICAgICAgICAgewogICAgICAgICAgIG9iaiA9IG1ha2VfbGlzcHlf
ZXZlbnQgKCZldmVudC0+aWUpOwogICAgICAgICAgIGtiZF9mZXRjaF9wdHIgPSBuZXh0X2ti
ZF9ldmVudCAoZXZlbnQpOwpAQCAtNzExNywxMiArNzExOCw0NyBAQCBtYWtlX2xpc3B5X2V2
ZW50IChzdHJ1Y3QgaW5wdXRfZXZlbnQgKmV2ZW50KQogICAgIGNhc2UgUFJFRURJVF9URVhU
X0VWRU5UOgogICAgICAgcmV0dXJuIGxpc3QyIChRcHJlZWRpdF90ZXh0LCBldmVudC0+YXJn
KTsKIAorICAgIGNhc2UgTE9XX0xFVkVMX0tFWV9FVkVOVDoKKyAgICAgIHJldHVybiBsaXN0
biAoNiwgUWxvd19sZXZlbF9rZXksCisJCSAgICBYQ0FSIChldmVudC0+YXJnKSwgLyogUHJl
c3Mgb3IgcmVsZWFzZS4gICovCisJCSAgICBYQ0FSIChYQ0RSIChldmVudC0+YXJnKSksIC8q
IFRoZSBrZXkgc3ltYm9sLiAgKi8KKwkJICAgIFhDQVIgKFhDRFIgKFhDRFIgKGV2ZW50LT5h
cmcpKSksIC8qIFRoZSBtb2RpZmllci4gICovCisJCSAgICBtYWtlX2ZpeG51bSAoZXZlbnQt
PnRpbWVzdGFtcCksCisJCSAgICBldmVudC0+ZnJhbWVfb3Jfd2luZG93KTsKKwogICAgICAg
LyogVGhlICdraW5kJyBmaWVsZCBvZiB0aGUgZXZlbnQgaXMgc29tZXRoaW5nIHdlIGRvbid0
IHJlY29nbml6ZS4gICovCiAgICAgZGVmYXVsdDoKICAgICAgIGVtYWNzX2Fib3J0ICgpOwog
ICAgIH0KIH0KIAorYm9vbAora2JkX2xvd19sZXZlbF9rZXlfaXNfZW5hYmxlZCAoaW50IGtl
eXN5bSwgTGlzcF9PYmplY3QgbW9kaWZpZXIpCit7CisgIGlmIChWZW5hYmxlX2xvd19sZXZl
bF9rZXlfZXZlbnRzID09IFF0KQorICAgIHJldHVybiB0cnVlOworCisgIGlmIChWZW5hYmxl
X2xvd19sZXZlbF9rZXlfZXZlbnRzID09IFFuaWwpCisgICAgcmV0dXJuIGZhbHNlOworCisg
IGlmIChGSVhOVU1QIChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzKSkKKyAgICByZXR1
cm4ga2V5c3ltID09IFhGSVhOVU0gKFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMpOwor
CisgIGlmIChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzID09IFFtb2RpZmllcnMpCisg
ICAgcmV0dXJuIG1vZGlmaWVyICE9IFFuaWw7CisKKyAgZm9yIChMaXNwX09iamVjdCBlID0g
VmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50czsgQ09OU1AgKGUpOyBlID0gWENEUiAoZSkp
CisgICAgeworICAgICAgTGlzcF9PYmplY3QgYyA9IFhDQVIgKGUpOworICAgICAgaWYgKEZJ
WE5VTVAgKGMpICYmIFhGSVhOVU0gKGMpID09IGtleXN5bSkKKwlyZXR1cm4gdHJ1ZTsKKyAg
ICAgIGlmIChjID09IFFtb2RpZmllcnMgJiYgbW9kaWZpZXIgIT0gUW5pbCkKKwlyZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgTGlzcF9PYmpl
Y3QKIG1ha2VfbGlzcHlfbW92ZW1lbnQgKHN0cnVjdCBmcmFtZSAqZnJhbWUsIExpc3BfT2Jq
ZWN0IGJhcl93aW5kb3csIGVudW0gc2Nyb2xsX2Jhcl9wYXJ0IHBhcnQsCiAJCSAgICAgTGlz
cF9PYmplY3QgeCwgTGlzcF9PYmplY3QgeSwgVGltZSB0KQpAQCAtMTI5MzAsNiArMTI5NjYs
MjggQEAgc3ltc19vZl9rZXlib2FyZCAodm9pZCkKICAgREVGU1lNIChRZmlsZV9ub3RpZnks
ICJmaWxlLW5vdGlmeSIpOwogI2VuZGlmIC8qIFVTRV9GSUxFX05PVElGWSAqLwogCisKKyAg
REVGU1lNIChRbW9kaWZpZXJzLCAibW9kaWZpZXJzIik7CisKKyAgREVGVkFSX0xJU1AgKCJl
bmFibGUtbG93LWxldmVsLWtleS1ldmVudHMiLCBWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZl
bnRzLAorCSAgICAgICBkb2M6IC8qIElmIG5vbi1uaWwsIHJlY2VwdGlvbiBvZiBsb3ctbGV2
ZWwga2V5IGV2ZW50cyBpcyBlbmFibGVkLgorCitUaGUgdmFsdWUgY29uZmlndXJlcyB0aGUg
c2V0IG9mIGtleXMgdGhhdCBhcmUgaGFuZGxlZDoKKworSWYgdCwgc2VuZCBldmVudHMgZm9y
IGFsbCBrZXlzLgorCitJZiBhIG51bWJlciwgc2VuZCBldmVudHMgZm9yIHRoZSBjb3JyZXNw
b25kaW5nIGtleXN5bS4gIFRoaXMgbnVtYmVycyBhcmUKK3BsYXRmb3JtIGRlcGVuZGVudGUu
ICBTZWUgYGxsay1rZXlzeW1zJy4KKworSWYgYSBzeW1ib2wsIGEgcHJlZGVmaW5lZCBzZXQg
b2Yga2V5cyBpcyBzZWxlY3RlZC4gIFRoZSBvbmx5IGN1cnJlbnRseQordmFsaWQgc3ltYm9s
IGlzICdtb2RpZmllcnMuCisKK0lmIGEgbGlzdCBvZiBudW1iZXJzIGFuZC9vciBzeW1ib2xz
LCB0aGUgY29ycmVzcG9uZGluZyBrZXlzeW1zIGFuZCBzZXRzCithcmUgc2VsZWN0ZWQuICAq
Lyk7CisgIFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMgPSBRbmlsOworCisgIERFRlNZ
TSAoUWxvd19sZXZlbF9rZXksICJsb3ctbGV2ZWwta2V5Iik7CisKICAgREVGU1lNIChRdG91
Y2hfZW5kLCAidG91Y2gtZW5kIik7CiAKICAgLyogTWVudSBhbmQgdG9vbCBiYXIgaXRlbSBw
YXJ0cy4gICovCkBAIC0xNDAxNyw2ICsxNDA3NSw4IEBAIGtleXNfb2Zfa2V5Ym9hcmQgKHZv
aWQpCiAJCQkgICAgImhhbmRsZS1mb2N1cy1vdXQiKTsKICAgaW5pdGlhbF9kZWZpbmVfbGlz
cHlfa2V5IChWc3BlY2lhbF9ldmVudF9tYXAsICJtb3ZlLWZyYW1lIiwKIAkJCSAgICAiaGFu
ZGxlLW1vdmUtZnJhbWUiKTsKKyAgaW5pdGlhbF9kZWZpbmVfbGlzcHlfa2V5IChWc3BlY2lh
bF9ldmVudF9tYXAsICJsb3ctbGV2ZWwta2V5IiwKKwkJCSAgICAiaWdub3JlIik7CiB9CiAK
IC8qIE1hcmsgdGhlIHBvaW50ZXJzIGluIHRoZSBrYm9hcmQgb2JqZWN0cy4KZGlmZiAtLWdp
dCBhL3NyYy9rZXlib2FyZC5oIGIvc3JjL2tleWJvYXJkLmgKaW5kZXggYzFiYjk2NmQ0ODUu
LmYwMjg1ZjE0YTI4IDEwMDY0NAotLS0gYS9zcmMva2V5Ym9hcmQuaAorKysgYi9zcmMva2V5
Ym9hcmQuaApAQCAtNTExLDYgKzUxMSw3IEBAIGtiZF9idWZmZXJfc3RvcmVfZXZlbnRfaG9s
ZCAoc3RydWN0IGlucHV0X2V2ZW50ICpldmVudCwKIGV4dGVybiBMaXNwX09iamVjdCBtZW51
X2l0ZW1fZXZhbF9wcm9wZXJ0eSAoTGlzcF9PYmplY3QpOwogZXh0ZXJuIGJvb2wga2JkX2J1
ZmZlcl9ldmVudHNfd2FpdGluZyAodm9pZCk7CiBleHRlcm4gdm9pZCBhZGRfdXNlcl9zaWdu
YWwgKGludCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBib29sIGtiZF9sb3dfbGV2ZWxfa2V5
X2lzX2VuYWJsZWQgKGludCwgTGlzcF9PYmplY3QpOwogCiBleHRlcm4gaW50IHR0eV9yZWFk
X2F2YWlsX2lucHV0IChzdHJ1Y3QgdGVybWluYWwgKiwgc3RydWN0IGlucHV0X2V2ZW50ICop
OwogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyB0aW1lcl9jaGVjayAodm9pZCk7CmRpZmYgLS1n
aXQgYS9zcmMvcGd0a3Rlcm0uYyBiL3NyYy9wZ3RrdGVybS5jCmluZGV4IDQxM2NiZDg2YzBk
Li4zNzA4YzRlYTdmYyAxMDA2NDQKLS0tIGEvc3JjL3BndGt0ZXJtLmMKKysrIGIvc3JjL3Bn
dGt0ZXJtLmMKQEAgLTUyMDEsNiArNTIwMSw1NiBAQCBwZ3RrX2VucXVldWVfcHJlZWRpdCAo
c3RydWN0IGZyYW1lICpmLCBMaXNwX09iamVjdCBwcmVlZGl0KQogICBldnFfZW5xdWV1ZSAo
JmluZXYpOwogfQogCitzdGF0aWMgdm9pZAorcGd0a19tYXliZV9zZW5kX2xvd19sZXZlbF9r
ZXlfZXZlbnQgKHN0cnVjdCBmcmFtZSAqZiwgR2RrRXZlbnQgKmV2ZW50KQoreworICBHZGtF
dmVudEtleSB4a2V5ID0gZXZlbnQtPmtleTsKKyAgYm9vbCBpc19wcmVzczsKKyAgTGlzcF9P
YmplY3Qga2V5LCBtb2RpZmllcjsKKyAgdW5pb24gYnVmZmVyZWRfaW5wdXRfZXZlbnQgaW5l
djsKKworICBpZiAoTklMUCAoVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cykpCisgICAg
cmV0dXJuOworCisgIHN3aXRjaCAoZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2UgR0RL
X0tFWV9QUkVTUzoKKyAgICAgIGlzX3ByZXNzID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgR0RLX0tFWV9SRUxFQVNFOgorICAgICAgaXNfcHJlc3MgPSBmYWxzZTsKKyAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIFdl
IGRvbid0IHN1cHBvcnQgbW9kaWZpZXIgaWRlbnRpZmljYXRpb24gb24gUEdUSy4gV2Ugb25s
eSBjYW4gdGVsbAorICAgIGlmIHRoZSBrZXkgY29ycmVzcG9uZHMgdG8gYSBtb2RpZmllciBv
ciBub3QsIHdoaWNoIGlzIHVzZWQgZm9yCisgICAgZmlsdGVyaW5nIGVuYWJsZWQga2V5cyB3
aXRoIGtiZF9sb3dfbGV2ZWxfa2V5X2lzX2VuYWJsZWQuICAqLworICBtb2RpZmllciA9IGV2
ZW50LT5rZXkuaXNfbW9kaWZpZXIgPyBRdCA6IFFuaWw7CisKKyAgaW50IGtleXN5bSA9IHhr
ZXkua2V5dmFsOworCisgIGlmIChrZXlzeW0gPj0gR0RLX0tFWV9hICYmIGtleXN5bSA8PSBH
REtfS0VZX3opCisgICAga2V5c3ltIC09IEdES19LRVlfYSAtIEdES19LRVlfQTsKKyAgaWYg
KCFrYmRfbG93X2xldmVsX2tleV9pc19lbmFibGVkIChrZXlzeW0sIG1vZGlmaWVyKSkKKyAg
ICByZXR1cm47CisKKyAgaWYgKCFmKQorICAgIGYgPSBwZ3RrX2FueV93aW5kb3dfdG9fZnJh
bWUgKGV2ZW50LT5rZXkud2luZG93KTsKKyAgaWYgKCFmKQorICAgIHJldHVybjsKKworICBr
ZXkgPSBtYWtlX2ZpeG51bSAoa2V5c3ltKTsKKworICBFVkVOVF9JTklUIChpbmV2LmllKTsK
KyAgWFNFVEZSQU1FIChpbmV2LmllLmZyYW1lX29yX3dpbmRvdywgZik7CisgIGluZXYuaWUu
a2luZCA9IExPV19MRVZFTF9LRVlfRVZFTlQ7CisgIGluZXYuaWUudGltZXN0YW1wID0gZXZl
bnQtPmtleS50aW1lOworICBpbmV2LmllLmFyZyA9IGxpc3QzIChpc19wcmVzcyA/IFF0IDog
UW5pbCwga2V5LCBtb2RpZmllcik7CisgIGV2cV9lbnF1ZXVlICgmaW5ldik7Cit9CisKIHN0
YXRpYyBnYm9vbGVhbgoga2V5X3ByZXNzX2V2ZW50IChHdGtXaWRnZXQgKndpZGdldCwgR2Rr
RXZlbnQgKmV2ZW50LCBncG9pbnRlciAqdXNlcl9kYXRhKQogewpAQCAtNTIxMSw2ICs1MjYx
LDkgQEAga2V5X3ByZXNzX2V2ZW50IChHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQgKmV2
ZW50LCBncG9pbnRlciAqdXNlcl9kYXRhKQogICBzdHJ1Y3QgcGd0a19kaXNwbGF5X2luZm8g
KmRweWluZm87CiAKICAgZiA9IHBndGtfYW55X3dpbmRvd190b19mcmFtZSAoZ3RrX3dpZGdl
dF9nZXRfd2luZG93ICh3aWRnZXQpKTsKKworICBwZ3RrX21heWJlX3NlbmRfbG93X2xldmVs
X2tleV9ldmVudCAoZiwgZXZlbnQpOworCiAgIEVWRU5UX0lOSVQgKGluZXYuaWUpOwogICBo
bGluZm8gPSBNT1VTRV9ITF9JTkZPIChmKTsKICAgbmJ5dGVzID0gMDsKQEAgLTU0NTQsNiAr
NTUwNyw4IEBAIGtleV9yZWxlYXNlX2V2ZW50IChHdGtXaWRnZXQgKndpZGdldCwKICAgR2Rr
RGlzcGxheSAqZGlzcGxheTsKICAgc3RydWN0IHBndGtfZGlzcGxheV9pbmZvICpkcHlpbmZv
OwogCisgIHBndGtfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50IChOVUxMLCBldmVu
dCk7CisKICAgZGlzcGxheSA9IGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKHdpZGdldCk7CiAg
IGRweWluZm8gPSBwZ3RrX2Rpc3BsYXlfaW5mb19mb3JfZGlzcGxheSAoZGlzcGxheSk7CiAK
ZGlmZiAtLWdpdCBhL3NyYy90ZXJtaG9va3MuaCBiL3NyYy90ZXJtaG9va3MuaAppbmRleCBi
MzI4MDRhNTdiMy4uZjc1YzExOWE5ZGEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXJtaG9va3MuaAor
KysgYi9zcmMvdGVybWhvb2tzLmgKQEAgLTM0Nyw2ICszNDcsNyBAQCAjZGVmaW5lIEVNQUNT
X1RFUk1IT09LU19ICiAgIC8qIEluIGEgTk9USUZJQ0FUSU9OX0VWRU5ULCAuYXJnIGlzIGEg
bGFtYmRhIHRvIGV2YWx1YXRlLiAgKi8KICAgLCBOT1RJRklDQVRJT05fRVZFTlQKICNlbmRp
ZiAvKiBIQVZFX0FORFJPSUQgKi8KKyAgLCBMT1dfTEVWRUxfS0VZX0VWRU5UCiB9OwogCiAv
KiBCaXQgd2lkdGggb2YgYW4gZW51bSBldmVudF9raW5kIHRhZyBhdCB0aGUgc3RhcnQgb2Yg
c3RydWN0cyBhbmQgdW5pb25zLiAgKi8KZGlmZiAtLWdpdCBhL3NyYy93MzJmbnMuYyBiL3Ny
Yy93MzJmbnMuYwppbmRleCBjNzk2M2QyYzYxNi4uNDk1MTZkM2JjN2YgMTAwNjQ0Ci0tLSBh
L3NyYy93MzJmbnMuYworKysgYi9zcmMvdzMyZm5zLmMKQEAgLTQ2NjksNiArNDY2OSwxMSBA
QCB3MzJfd25kX3Byb2MgKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQ
QVJBTSBsUGFyYW0pCiAgICAgY2FzZSBXTV9LRVlVUDoKICAgICBjYXNlIFdNX1NZU0tFWVVQ
OgogICAgICAgcmVjb3JkX2tleXVwICh3UGFyYW0sIGxQYXJhbSk7CisgICAgICBpZiAoIU5J
TFAgKFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMpKQorCXsKKwkgIHNpZ25hbF91c2Vy
X2lucHV0ICgpOworCSAgbXlfcG9zdF9tc2cgKCZ3bXNnLCBod25kLCBXTV9FTUFDU19MT1df
TEVWRUxfS0VZLCB3UGFyYW0sIGxQYXJhbSk7CisJfQogICAgICAgZ290byBkZmx0OwogCiAg
ICAgY2FzZSBXTV9LRVlET1dOOgpAQCAtNDY5NSw2ICs0NzAwLDEyIEBAIHczMl93bmRfcHJv
YyAoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkK
ICAgICAgIGlmICh3MzJfdXNlX2ZhbGxiYWNrX3dtX2NoYXJzX21ldGhvZCkKIAl3UGFyYW0g
PSBtYXBfa2V5cGFkX2tleXMgKHdQYXJhbSwgKGxQYXJhbSAmIDB4MTAwMDAwMEwpICE9IDAp
OwogCisgICAgICBpZiAoIU5JTFAgKFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMpKQor
CXsKKwkgIHNpZ25hbF91c2VyX2lucHV0ICgpOworCSAgbXlfcG9zdF9tc2cgKCZ3bXNnLCBo
d25kLCBXTV9FTUFDU19MT1dfTEVWRUxfS0VZLCB3UGFyYW0sIGxQYXJhbSk7CisJfQorCiAg
ICAgICB3aW5kb3dzX3RyYW5zbGF0ZSA9IDA7CiAKICAgICAgIHN3aXRjaCAod1BhcmFtKQpk
aWZmIC0tZ2l0IGEvc3JjL3czMnRlcm0uYyBiL3NyYy93MzJ0ZXJtLmMKaW5kZXggYzgxNzc5
Yjg1MTcuLmZmYzViNmJhNTIyIDEwMDY0NAotLS0gYS9zcmMvdzMydGVybS5jCisrKyBiL3Ny
Yy93MzJ0ZXJtLmMKQEAgLTUyNzAsNiArNTI3MCw1NSBAQCB3MzJfcmVhZF9zb2NrZXQgKHN0
cnVjdCB0ZXJtaW5hbCAqdGVybWluYWwsCiAJICAgIH0KIAkgIGJyZWFrOwogCisJY2FzZSBX
TV9FTUFDU19MT1dfTEVWRUxfS0VZOgorCSAgV09SRCBrZXlfZmxhZ3MgPSBISVdPUkQgKG1z
Zy5tc2cubFBhcmFtKTsKKwkgIEJPT0wgaXNfd21fa2V5dXAgPSBrZXlfZmxhZ3MgJiBLRl9V
UDsKKworCSAgaWYgKGlzX3dtX2tleXVwIHx8IChrZXlfZmxhZ3MgJiBLRl9SRVBFQVQpID09
IDApIC8qIFdNX0tFWURPV04sIG5vdCByZXBlYXRpbmcuICAqLworCSAgICB7CisJICAgICAg
V09SRCBzY2FuX2NvZGUgPSBMT0JZVEUgKGtleV9mbGFncyk7CisJICAgICAgaWYgKGtleV9m
bGFncyAmIEtGX0VYVEVOREVEKQorCQlzY2FuX2NvZGUgPSBNQUtFV09SRCAoc2Nhbl9jb2Rl
LCAweEUwKTsKKworCSAgICAgIFVJTlQgdHJhbnNsYXRlZCA9IE1hcFZpcnR1YWxLZXkgKHNj
YW5fY29kZSwgTUFQVktfVlNDX1RPX1ZLX0VYKTsKKwkgICAgICBXT1JEIHZrID0gTE9XT1JE
IChtc2cubXNnLndQYXJhbSk7CisJICAgICAgaWYgKHRyYW5zbGF0ZWQpCisJCXZrID0gTE9X
T1JEICh0cmFuc2xhdGVkKTsKKworCSAgICAgIExpc3BfT2JqZWN0IGtleSA9IG1ha2VfZml4
bnVtICh2ayk7CisJICAgICAgTGlzcF9PYmplY3QgbW9kaWZpZXIgPSBRbmlsOworCisJICAg
ICAgc3dpdGNoICh2aykKKwkJeworCQljYXNlIFZLX0xTSElGVDoKKwkJY2FzZSBWS19SU0hJ
RlQ6CisJCSAgbW9kaWZpZXIgPSBRc2hpZnQ7CisJCSAgYnJlYWs7CisJCWNhc2UgVktfTENP
TlRST0w6CisJCWNhc2UgVktfUkNPTlRST0w6CisJCSAgbW9kaWZpZXIgPSBRY3RybDsKKwkJ
ICBicmVhazsKKwkJY2FzZSBWS19MTUVOVToKKwkJY2FzZSBWS19STUVOVToKKwkJICBtb2Rp
ZmllciA9IFFtZXRhOworCQkgIGJyZWFrOworCQl9CisKKwkgICAgICBpZiAoa2JkX2xvd19s
ZXZlbF9rZXlfaXNfZW5hYmxlZCAodmssIG1vZGlmaWVyKSkKKwkJeworCQkgIGYgPSB3MzJf
d2luZG93X3RvX2ZyYW1lIChkcHlpbmZvLCBtc2cubXNnLmh3bmQpOworCQkgIGluZXYua2lu
ZCA9IExPV19MRVZFTF9LRVlfRVZFTlQ7CisJCSAgWFNFVEZSQU1FIChpbmV2LmZyYW1lX29y
X3dpbmRvdywgZik7CisJCSAgaW5ldi50aW1lc3RhbXAgPSBtc2cubXNnLnRpbWU7CisJCSAg
aW5ldi5hcmcgPSBsaXN0MyAoaXNfd21fa2V5dXAgPyBRbmlsIDogUXQsIGtleSwgbW9kaWZp
ZXIpOworCQkgIGtiZF9idWZmZXJfc3RvcmVfZXZlbnRfaG9sZCAoJmluZXYsIGhvbGRfcXVp
dCk7CisJCX0KKworCSAgICAgIGluZXYua2luZCA9IE5PX0VWRU5UOworCisJICAgIH0KKwkg
IGJyZWFrOworCiAgICAgICAgIGNhc2UgV01fVU5JQ0hBUjoKIAljYXNlIFdNX1NZU0NIQVI6
CiAJY2FzZSBXTV9DSEFSOgpkaWZmIC0tZ2l0IGEvc3JjL3czMnRlcm0uaCBiL3NyYy93MzJ0
ZXJtLmgKaW5kZXggMjQ4M2NhOTAzNmMuLjcyOTA1MzFhM2FjIDEwMDY0NAotLS0gYS9zcmMv
dzMydGVybS5oCisrKyBiL3NyYy93MzJ0ZXJtLmgKQEAgLTcxMyw3ICs3MTMsOCBAQCAjZGVm
aW5lIFdNX0VNQUNTX0ZJTEVOT1RJRlkgICAgICAgICAgICAoV01fRU1BQ1NfU1RBUlQgKyAy
NSkKICNkZWZpbmUgV01fRU1BQ1NfSU1FX1NUQVRVUyAgICAgICAgICAgIChXTV9FTUFDU19T
VEFSVCArIDI2KQogI2RlZmluZSBXTV9FTUFDU19EUkFHT1ZFUiAgICAgICAgICAgICAgKFdN
X0VNQUNTX1NUQVJUICsgMjcpCiAjZGVmaW5lIFdNX0VNQUNTX0RST1AgICAgICAgICAgICAg
ICAgICAoV01fRU1BQ1NfU1RBUlQgKyAyOCkKLSNkZWZpbmUgV01fRU1BQ1NfRU5EICAgICAg
ICAgICAgICAgICAgIChXTV9FTUFDU19TVEFSVCArIDI5KQorI2RlZmluZSBXTV9FTUFDU19M
T1dfTEVWRUxfS0VZICAgICAgICAgKFdNX0VNQUNTX1NUQVJUICsgMjkpCisjZGVmaW5lIFdN
X0VNQUNTX0VORCAgICAgICAgICAgICAgICAgICAoV01fRU1BQ1NfU1RBUlQgKyAzMCkKIAog
I2RlZmluZSBXTkRfRk9OVFdJRFRIX0lOREVYICAgICgwKQogI2RlZmluZSBXTkRfTElORUhF
SUdIVF9JTkRFWCAgICg0KQpkaWZmIC0tZ2l0IGEvc3JjL3h0ZXJtLmMgYi9zcmMveHRlcm0u
YwppbmRleCAwMWUzYTkzMWFlOS4uNTFhZjVmY2FiMjIgMTAwNjQ0Ci0tLSBhL3NyYy94dGVy
bS5jCisrKyBiL3NyYy94dGVybS5jCkBAIC0xNzgzOSw2ICsxNzgzOSwxNDEgQEAgI2RlZmlu
ZSBTVE9SRV9LRVlTWU1fRk9SX0RFQlVHKGtleXN5bSkgKCh2b2lkKTApCiAKIHN0YXRpYyBz
dHJ1Y3QgeF9kaXNwbGF5X2luZm8gKm5leHRfbm9vcF9kcHlpbmZvOwogCitMaXNwX09iamVj
dAoreF9nZXRfbW9kaWZpZXJfZm9yX2tleWNvZGUgKHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAq
ZHB5aW5mbywKKwkJCSAgICBpbnQga2V5Y29kZSkKK3sKKyNpZmRlZiBIQVZFX1hLQgorICBp
ZiAoZHB5aW5mby0+eGtiX2Rlc2MpCisgICAgZm9yIChpbnQgbW9kID0gMDsgbW9kIDwgWGti
TnVtTW9kaWZpZXJzOyBtb2QrKykKKyAgICAgIHsKKwlpbnQgbWFzayA9ICgxIDw8IG1vZCk7
CisJaWYgKGRweWluZm8tPnhrYl9kZXNjLT5tYXAtPm1vZG1hcFtrZXljb2RlXSAmIG1hc2sp
CisJICB7CisJICAgIGlmIChtYXNrID09IFNoaWZ0TWFzaykKKwkgICAgICByZXR1cm4gUXNo
aWZ0OworCSAgICBpZiAobWFzayA9PSBDb250cm9sTWFzaykKKwkgICAgICByZXR1cm4gUWN0
cmw7CisJICAgIGlmIChtYXNrID09IGRweWluZm8tPm1ldGFfbW9kX21hc2spCisJICAgICAg
cmV0dXJuIFFtZXRhOworCSAgICBpZiAobWFzayA9PSBkcHlpbmZvLT5hbHRfbW9kX21hc2sp
CisJICAgICAgcmV0dXJuIFFhbHQ7CisJICAgIGlmIChtYXNrID09IGRweWluZm8tPnN1cGVy
X21vZF9tYXNrKQorCSAgICAgIHJldHVybiBRc3VwZXI7CisJICAgIGlmIChtYXNrID09IGRw
eWluZm8tPmh5cGVyX21vZF9tYXNrKQorCSAgICAgIHJldHVybiBRaHlwZXI7CisJICB9Cisg
ICAgICB9CisjZW5kaWYKKyAgWE1vZGlmaWVyS2V5bWFwICptYXAgPSBkcHlpbmZvLT5tb2Rt
YXA7CisgIGlmIChtYXApCisgICAgZm9yIChpbnQgbW9kID0gMDsgbW9kIDwgODsgbW9kKysp
CisgICAgICB7CisJaW50IG1hc2sgPSAoMSA8PCBtb2QpOworICAgICAgICBmb3IgKGludCBr
ZXkgPSAwOyBrZXkgPCBtYXAtPm1heF9rZXlwZXJtb2Q7IGtleSsrKQorCSAgaWYgKG1hcC0+
bW9kaWZpZXJtYXBbbW9kICogbWFwLT5tYXhfa2V5cGVybW9kICsga2V5XSA9PSBrZXljb2Rl
KQorCSAgICB7CisJICAgICAgaWYgKG1hc2sgPT0gU2hpZnRNYXNrKQorCQlyZXR1cm4gUXNo
aWZ0OworCSAgICAgIGlmIChtYXNrID09IENvbnRyb2xNYXNrKQorCQlyZXR1cm4gUWN0cmw7
CisJICAgICAgaWYgKG1hc2sgPT0gZHB5aW5mby0+bWV0YV9tb2RfbWFzaykKKwkJcmV0dXJu
IFFtZXRhOworCSAgICAgIGlmIChtYXNrID09IGRweWluZm8tPmFsdF9tb2RfbWFzaykKKwkJ
cmV0dXJuIFFhbHQ7CisJICAgICAgaWYgKG1hc2sgPT0gZHB5aW5mby0+c3VwZXJfbW9kX21h
c2spCisJCXJldHVybiBRc3VwZXI7CisJICAgICAgaWYgKG1hc2sgPT0gZHB5aW5mby0+aHlw
ZXJfbW9kX21hc2spCisJCXJldHVybiBRaHlwZXI7CisJICAgIH0KKyAgICAgIH0KKyAgcmV0
dXJuIFFuaWw7Cit9CisKK3N0YXRpYyB2b2lkCit4X21heWJlX3NlbmRfbG93X2xldmVsX2tl
eV9ldmVudCAoc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvLAorCQkJCSAgY29uc3Qg
WEV2ZW50ICp4ZXYsIHN0cnVjdCBmcmFtZSAqZikKK3sKKyAgWEtleUV2ZW50IHhrZXk7Cisg
IGJvb2wgaXNfcHJlc3M7CisgIEtleVN5bSBrZXlzeW07CisgIExpc3BfT2JqZWN0IGtleSwg
bW9kaWZpZXI7CisgIHN0cnVjdCBpbnB1dF9ldmVudCBpZTsKKworICBpZiAoTklMUCAoVmVu
YWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cykpCisgICAgcmV0dXJuOworCisgIHN3aXRjaCAo
eGV2LT50eXBlKQorICAgIHsKKyAgICBjYXNlIEtleVByZXNzOgorICAgICAgaXNfcHJlc3Mg
PSB0cnVlOworICAgICAgeGtleSA9IHhldi0+eGtleTsKKyAgICAgIGJyZWFrOworICAgIGNh
c2UgS2V5UmVsZWFzZToKKyAgICAgIGlzX3ByZXNzID0gZmFsc2U7CisgICAgICB4a2V5ID0g
eGV2LT54a2V5OworICAgICAgYnJlYWs7CisjaWZkZWYgSEFWRV9YSU5QVVQyCisgICAgY2Fz
ZSBHZW5lcmljRXZlbnQ6CisgICAgICBYSURldmljZUV2ZW50ICp4aWV2ID0geGV2LT54Y29v
a2llLmRhdGE7CisgICAgICBzd2l0Y2ggKHhldi0+eGdlbmVyaWMuZXZ0eXBlKQorCXsKKwlj
YXNlIFhJX0tleVByZXNzOgorCSAgaXNfcHJlc3MgPSB0cnVlOworCSAgYnJlYWs7CisJY2Fz
ZSBYSV9LZXlSZWxlYXNlOgorCSAgaXNfcHJlc3MgPSBmYWxzZTsKKwkgIGJyZWFrOworCWRl
ZmF1bHQ6CisJICByZXR1cm47CisJfQorCisgICAgICB4a2V5LnNlcmlhbCA9IHhpZXYtPnNl
cmlhbDsKKyAgICAgIHhrZXkuc2VuZF9ldmVudCA9IHhpZXYtPnNlbmRfZXZlbnQ7CisgICAg
ICB4a2V5LmRpc3BsYXkgPSB4aWV2LT5kaXNwbGF5OworICAgICAgeGtleS53aW5kb3cgPSB4
aWV2LT5ldmVudDsKKyAgICAgIHhrZXkucm9vdCA9IHhpZXYtPnJvb3Q7CisgICAgICB4a2V5
LnN1YndpbmRvdyA9IHhpZXYtPmNoaWxkOworICAgICAgeGtleS50aW1lID0geGlldi0+dGlt
ZTsKKyAgICAgIHhrZXkueCA9IHhpZXYtPmV2ZW50X3g7CisgICAgICB4a2V5LnkgPSB4aWV2
LT5ldmVudF95OworICAgICAgeGtleS54X3Jvb3QgPSB4aWV2LT5yb290X3g7CisgICAgICB4
a2V5Lnlfcm9vdCA9IHhpZXYtPnJvb3RfeTsKKyAgICAgIHhrZXkuc3RhdGUgPSB4aWV2LT5t
b2RzLmVmZmVjdGl2ZTsKKyAgICAgIHhrZXkua2V5Y29kZSA9IHhpZXYtPmRldGFpbDsKKyAg
ICAgIHhrZXkuc2FtZV9zY3JlZW4gPSAxOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBk
ZWZhdWx0OgorICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoIWYpCisgICAgZiA9IHhf
YW55X3dpbmRvd190b19mcmFtZSAoZHB5aW5mbywgeGtleS53aW5kb3cpOworICBpZiAoIWYp
CisgICAgcmV0dXJuOworCisgIFhMb29rdXBTdHJpbmcgKCZ4a2V5LCBOVUxMLCAwLCAma2V5
c3ltLCBOVUxMKTsKKworICBtb2RpZmllciA9IHhfZ2V0X21vZGlmaWVyX2Zvcl9rZXljb2Rl
IChkcHlpbmZvLCB4a2V5LmtleWNvZGUpOworCisgIC8qIENvbnZlcnQgbG93ZXJjYXNlIGxh
dGluIGxldHRlciB0byB1cHBlcmNhc2UuICAqLworICBpZiAoa2V5c3ltID49IFhLX2EgJiYg
a2V5c3ltIDw9IFhLX3opCisgICAga2V5c3ltIC09IFhLX2EgLSBYS19BOworCisgIGlmICgh
a2JkX2xvd19sZXZlbF9rZXlfaXNfZW5hYmxlZCAoa2V5c3ltLCBtb2RpZmllcikpCisgICAg
cmV0dXJuOworCisgIGtleSA9IG1ha2VfZml4bnVtIChrZXlzeW0pOworCisgIEVWRU5UX0lO
SVQgKGllKTsKKyAgWFNFVEZSQU1FIChpZS5mcmFtZV9vcl93aW5kb3csIGYpOworICBpZS5r
aW5kID0gTE9XX0xFVkVMX0tFWV9FVkVOVDsKKyAgaWUudGltZXN0YW1wID0geGtleS50aW1l
OworICBpZS5hcmcgPSBsaXN0MyAoaXNfcHJlc3MgPyBRdCA6IFFuaWwsIGtleSwgbW9kaWZp
ZXIpOworICBrYmRfYnVmZmVyX3N0b3JlX2V2ZW50ICgmaWUpOworfQorCiAvKiBGaWx0ZXIg
ZXZlbnRzIGZvciB0aGUgY3VycmVudCBYIGlucHV0IG1ldGhvZC4KICAgIERQWUlORk8gaXMg
dGhlIGRpc3BsYXkgdGhpcyBldmVudCBpcyBmb3IuCiAgICBFVkVOVCBpcyB0aGUgWCBldmVu
dCB0byBmaWx0ZXIuCkBAIC0yMDIwNSw2ICsyMDM0MCw3IEBAIGhhbmRsZV9vbmVfeGV2ZW50
IChzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRweWluZm8sCiAgICAgICBnb3RvIE9USEVSOwog
CiAgICAgY2FzZSBLZXlQcmVzczoKKyAgICAgIHhfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5
X2V2ZW50IChkcHlpbmZvLCBldmVudCwgYW55KTsKICAgICAgIHhfZGlzcGxheV9zZXRfbGFz
dF91c2VyX3RpbWUgKGRweWluZm8sIGV2ZW50LT54a2V5LnRpbWUsCiAJCQkJICAgIGV2ZW50
LT54a2V5LnNlbmRfZXZlbnQsCiAJCQkJICAgIHRydWUpOwpAQCAtMjA3MTQsNiArMjA4NTAs
NyBAQCBoYW5kbGVfb25lX3hldmVudCAoc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZv
LAogI2VuZGlmCiAKICAgICBjYXNlIEtleVJlbGVhc2U6CisgICAgICB4X21heWJlX3NlbmRf
bG93X2xldmVsX2tleV9ldmVudCAoZHB5aW5mbywgZXZlbnQsIGFueSk7CiAjaWZkZWYgSEFW
RV9YX0kxOE4KICAgICAgIC8qIERvbid0IGRpc3BhdGNoIHRoaXMgZXZlbnQgc2luY2UgWHRE
aXNwYXRjaEV2ZW50IGNhbGxzCiAgICAgICAgICBYRmlsdGVyRXZlbnQsIGFuZCB0d28gY2Fs
bHMgaW4gYSByb3cgbWF5IGZyZWV6ZSB0aGUKQEAgLTIzOTY5LDYgKzI0MTA2LDggQEAgaGFu
ZGxlX29uZV94ZXZlbnQgKHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywKIAkgICAg
ICBzdHJ1Y3QgeGlfZGV2aWNlX3QgKmRldmljZSwgKnNvdXJjZTsKIAkgICAgICBYS2V5UHJl
c3NlZEV2ZW50IHhrZXk7CiAKKwkgICAgICB4X21heWJlX3NlbmRfbG93X2xldmVsX2tleV9l
dmVudCAoZHB5aW5mbywgZXZlbnQsIGFueSk7CisKIAkgICAgICBjb2RpbmcgPSBRbGF0aW5f
MTsKIAogCSAgICAgIC8qIFRoZSBjb2RlIHVuZGVyIHRoaXMgbGFiZWwgaXMgcXVpdGUgZGVz
dWx0b3J5LiAgVGhlcmUKQEAgLTI0NTg1LDYgKzI0NzI0LDggQEAgaGFuZGxlX29uZV94ZXZl
bnQgKHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywKICNlbmRpZgogCiAJICBjYXNl
IFhJX0tleVJlbGVhc2U6CisJICAgIHhfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50
IChkcHlpbmZvLCBldmVudCwgYW55KTsKKwogI2lmIGRlZmluZWQgSEFWRV9YX0kxOE4gfHwg
ZGVmaW5lZCBVU0VfR1RLIHx8IGRlZmluZWQgVVNFX0xVQ0lECiAJICAgIHsKIAkgICAgICBY
S2V5UHJlc3NlZEV2ZW50IHhrZXk7CkBAIC0zMjY2MSw2ICszMjgwMiw3IEBAIHN5bXNfb2Zf
eHRlcm0gKHZvaWQpCiAgIFZ4X3Rvb2xraXRfc2Nyb2xsX2JhcnMgPSBRbmlsOwogI2VuZGlm
CiAKKyAgREVGU1lNIChRc2hpZnQsICJzaGlmdCIpOwogICBERUZTWU0gKFFtb2RpZmllcl92
YWx1ZSwgIm1vZGlmaWVyLXZhbHVlIik7CiAgIERFRlNZTSAoUWN0cmwsICJjdHJsIik7CiAg
IEZwdXQgKFFjdHJsLCBRbW9kaWZpZXJfdmFsdWUsIG1ha2VfZml4bnVtIChjdHJsX21vZGlm
aWVyKSk7CmRpZmYgLS1naXQgYS9zcmMveHRlcm0uaCBiL3NyYy94dGVybS5oCmluZGV4IDdj
MmZhZGJmMDk0Li41NzM1ZTlkZmUxOSAxMDA2NDQKLS0tIGEvc3JjL3h0ZXJtLmgKKysrIGIv
c3JjL3h0ZXJtLmgKQEAgLTE5MDYsNiArMTkwNiw4IEBAIHhfbXV0YWJsZV9jb2xvcm1hcCAo
WFZpc3VhbEluZm8gKnZpc3VhbCkKIGV4dGVybiB2b2lkIHRlYXJfZG93bl94X2JhY2tfYnVm
ZmVyIChzdHJ1Y3QgZnJhbWUgKmYpOwogZXh0ZXJuIHZvaWQgaW5pdGlhbF9zZXRfdXBfeF9i
YWNrX2J1ZmZlciAoc3RydWN0IGZyYW1lICpmKTsKIAorZXh0ZXJuIExpc3BfT2JqZWN0IHhf
Z2V0X21vZGlmaWVyX2Zvcl9rZXljb2RlIChzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKiwgaW50
KTsKKwogLyogRGVmaW5lZCBpbiB4Zm5zLmMuICAqLwogZXh0ZXJuIHZvaWQgeF9yZWFsX3Bv
c2l0aW9ucyAoc3RydWN0IGZyYW1lICosIGludCAqLCBpbnQgKik7CiBleHRlcm4gdm9pZCB4
X2NoYW5nZV90YWJfYmFyX2hlaWdodCAoc3RydWN0IGZyYW1lICosIGludCk7Ci0tIAoyLjM1
LjEud2luZG93cy4yCgo=

--------------eNHcmXNQvtsRN3BsZgn4RNX3--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.
Severity set to 'wishlist' from 'normal' Request was from Stefan Kangas <stefankangas@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 26 Dec 2024 14:54:26 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 26 09:54:26 2024
Received: from localhost ([127.0.0.1]:40598 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQpFp-0001kH-VP
	for submit <at> debbugs.gnu.org; Thu, 26 Dec 2024 09:54:26 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:49404)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <monnier@HIDDEN>) id 1tQpFn-0001k2-Cb
 for 74423 <at> debbugs.gnu.org; Thu, 26 Dec 2024 09:54:24 -0500
Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 72DCD10004A;
 Thu, 26 Dec 2024 09:54:17 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1735224856;
 bh=f3YkOMiYHpvpP3YxXVv+QTx8FOLB18iQp3Lf2cuOiik=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=VaXQUxb/Tl9D7hbMGmqMDPs0/308+TTPleGM3bGp5mwcdvY1mvVQ+wmoYP4+v+S83
 nMF3OFfibmxH++Kq8cXFsfrZ/YkCj8syvrcNXyRqSmHurmhyDQAiGBf0kBpJsRGHcO
 7brCkTg4Fuj8m2tyIeKsfuSO0xGKbmQqBYUbMTLi5/MXCozss1krzlGzmea6+BRfl8
 UzQDvHIXJt96UHoyho6YM/DuTXO5hpr8epKNEQWGmhEP94rRJ5N8lneblj2akcl8Zq
 P7u1a0wjQCKevQku4dOatg1LUX5mcroDs1txjrqFJDVe7CS0k3yWHVlfQ+4WS+7DXA
 TcDBLUx3EsU/Q==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id BDE95100035;
 Thu, 26 Dec 2024 09:54:16 -0500 (EST)
Received: from pastel (104-195-225-43.cpe.teksavvy.com [104.195.225.43])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 8A04B12056E;
 Thu, 26 Dec 2024 09:54:16 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>
Subject: Re: bug#74423: Low level key events
In-Reply-To: <b3e7839a-3fac-49e4-a507-fc34f6a71aa4@HIDDEN> (Cecilio
 Pardo's message of "Thu, 26 Dec 2024 11:16:11 +0100")
Message-ID: <jwved1ucxgi.fsf-monnier+emacs@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN>
 <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN>
 <867c8ezny3.fsf@HIDDEN>
 <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN>
 <86bjxev7ng.fsf@HIDDEN>
 <343e2854-a16e-4718-894a-470b733ae91f@HIDDEN>
 <jwvseqgbd1y.fsf-monnier+emacs@HIDDEN>
 <b3e7839a-3fac-49e4-a507-fc34f6a71aa4@HIDDEN>
Date: Thu, 26 Dec 2024 09:54:15 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.652 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, Eli Zaretskii <eliz@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> How can we make sure that only the user configures this, and external
> packages do not?

I can't think of a good reason why we would actively want to prevent
external packages from touching this.  At least not via technical means.

As a matter of fact, I think we'd welcome packages dedicated to
configuring this: your code is currently layered as a C part which
provides the low-level events and an ELisp part which constructs useful
semantics out of it, but that ELisp part can be thought of as a separate
package, so we already have an example of useful "external" package
configuring this.  Another package could provide an alternative way to
use those low-level events.

As for "normal" packages (say major modes), I suspect they will tend to
naturally refrain from touching it because it's not
available everywhere.

We may document guidelines about those low-level events alongside our
conventions for key bindings, OTOH.


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 26 Dec 2024 10:16:18 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 26 05:16:18 2024
Received: from localhost ([127.0.0.1]:40162 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQkug-0005oU-AF
	for submit <at> debbugs.gnu.org; Thu, 26 Dec 2024 05:16:18 -0500
Received: from mail.imayhem.com ([82.223.54.191]:38293
 helo=zealous-pike.82-223-54-191.plesk.page)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <cpardo@HIDDEN>) id 1tQkuf-0005oG-Gl
 for 74423 <at> debbugs.gnu.org; Thu, 26 Dec 2024 05:16:17 -0500
Received: from [10.0.12.81] (66.red-2-136-43.staticip.rima-tde.net
 [2.136.43.66])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id A9A278011A; 
 Thu, 26 Dec 2024 10:16:11 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 2.136.43.66) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[10.0.12.81]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Message-ID: <b3e7839a-3fac-49e4-a507-fc34f6a71aa4@HIDDEN>
Date: Thu, 26 Dec 2024 11:16:11 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74423: Low level key events
To: Stefan Monnier <monnier@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN> <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN> <867c8ezny3.fsf@HIDDEN>
 <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN> <86bjxev7ng.fsf@HIDDEN>
 <343e2854-a16e-4718-894a-470b733ae91f@HIDDEN>
 <jwvseqgbd1y.fsf-monnier+emacs@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <jwvseqgbd1y.fsf-monnier+emacs@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, Eli Zaretskii <eliz@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 22/12/2024 5:31, Stefan Monnier wrote:

> I'm not expert in the C level part of that code, so I provide
> feedback below only for the Lisp-facing part.

Thanks a lot for the review.  I'm working on it.

> Maybe instead of focusing on running a command, `llk-handle` and
> `llk-bind` should concentrate on generating "normal" events that are
> then looked up in the normal keymaps.
> 
> So the user would use them only to specify which events should be
> recognized and which should be ignored.  Then the user can use the
> standard keymaps to declare what to do in response to `double-xk-shift-l`.
> WDYT?

Yes, I think that's better.  I did it the other way to keep it as 
separate as possible from normal events, as some people thought this was 
a bad idea.

How can we make sure that only the user configures this, and external 
packages do not?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 22 Dec 2024 04:31:48 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Dec 21 23:31:48 2024
Received: from localhost ([127.0.0.1]:48660 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tPDd3-0003j8-ML
	for submit <at> debbugs.gnu.org; Sat, 21 Dec 2024 23:31:48 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:48365)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <monnier@HIDDEN>) id 1tPDd0-0003it-Qk
 for 74423 <at> debbugs.gnu.org; Sat, 21 Dec 2024 23:31:44 -0500
Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 27FB3100055;
 Sat, 21 Dec 2024 23:31:36 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1734841894;
 bh=gp6XnOjpAkHphxn+M78n5QISoexG8Zqg7VSEyZ0J2PQ=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=DbkgGzQyi5+CgsxgRGx7YAFDrf0GKVRu99yitthzFtG8JlDTjTT1gBAXDF7uAL0Sj
 A2A+QxboPubykdxE+VmEV0XWYyTdke29iDN8josc1THJRR0BatT+xE+meiEWwpS2Tj
 0TV+vD1xYO3UlGMrwl2wWeYuRNDJlIy7Bsc60XwMhkb1o8hzT9WoBAap2vkeKwq9qL
 NX08h/t/HodX4UQeQZfaKSJ5eyjoP2DHAP2OBugCqqC/fAeOup1rPkvqcJzYdFXZac
 WX6bi8ouLD0+OG1dS2t12QHMQno2FHzOgq85Ge5O1ErMQQdGXKcisbqgycPq648IGZ
 wGKZU1rSxSwZg==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id A3E9F100043;
 Sat, 21 Dec 2024 23:31:34 -0500 (EST)
Received: from asado (unknown [199.119.74.1])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 8C32712014F;
 Sat, 21 Dec 2024 23:31:33 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>
Subject: Re: bug#74423: Low level key events
In-Reply-To: <343e2854-a16e-4718-894a-470b733ae91f@HIDDEN> (Cecilio
 Pardo's message of "Wed, 18 Dec 2024 11:59:16 +0100")
Message-ID: <jwvseqgbd1y.fsf-monnier+emacs@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN>
 <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN>
 <867c8ezny3.fsf@HIDDEN>
 <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN>
 <86bjxev7ng.fsf@HIDDEN>
 <343e2854-a16e-4718-894a-470b733ae91f@HIDDEN>
Date: Sat, 21 Dec 2024 23:31:31 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, Eli Zaretskii <eliz@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi, this is shaping up quite nicely, AFAICT.
I'm not expert in the C level part of that code, so I provide
feedback below only for the Lisp-facing part.


        Stefan


> --- a/doc/lispref/commands.texi
> +++ b/doc/lispref/commands.texi
> @@ -2658,6 +2658,38 @@ Misc Events
>  respectively.  They are usually interpreted as being relative to the
>  size of the object beneath the gesture: image, window, etc.
>  
> +@cindex @code{low-level-key} event
> +@item (low-level-key @var{is-key-press} @var{key} @var{modifier} @var{time} @var{frame})
> +This event is sent on the physical press or release of keys, only on GUI
> +systems, currently X, MS-Windows and PGTK, and only if the variable
> +@code{enable-low-level-key-events} has a non-@code{nil} value.  See its
> +documentation for the values it can take, that allow to filter which
> +keys should generate this kind of event.

Rather than saying it's sent "only on GUI systems", I'd say sent "only
on systems where it is supported": I wouldn't be surprised to hear that
some terminal emulators offer ways to support it.

> +@var{is-key-press} is @code{t} for a key press, @code{nil} for a key release.
> +@var{time} is the event's time in milliseconds, @var{frame} is the
> +frame receiving it.

Please clarify the origin of the event's time (or if possible make it
a valid/normal Emacs time object).

> +@var{key}, an integer, identifies the key pressed or released.  This
> +number is platform dependent, but there are variables for most keys that
> +can be used in place of the numbers to identify them.  For example, the
> +variable @code{xk-backspace} identifies the @key{backspace} key.

I get the impression that those variables/constants may be
replaced/complemented in the future with alternatives, such as functions
that convert the key number to a symbol, or functions that test whether
the key number is within some set of keys described as symbols, ...
So the documentation of the meaning of those key numbers via associated
variables/constants should probably be placed elsewhere.

> +These variables are initialized by calling the function @code{llk-init}.
> +This function also binds a handler to this event, which allows to detect

[ "Allow" is transitive, so you need to say "allows us" or "allows users"
  or something like (or use some other formulation altogether).  ]

> --- /dev/null
> +++ b/lisp/low-level-key.el
> @@ -0,0 +1,342 @@
> +;;; -*- lexical-binding: t -*-

Please follow our convention for the first line of ELisp files, and then
include our usual copyright+license blurb.

> +;; The physical-key event is like this:
> +;; (low-level-key IS-KEY-PRESS KEY MODIFIER TIME FRAME)

> +;; IS-KEY-PRESS is t if the key has been pressed, nil if it has been released.
> +;; KEY is the keysym number.
> +;; MODIFIER is the modifier associated with this key.  It is nil if the key is
> +;; not a modifier.  It can be one of the following symbols: shift, control, meta,
> +;; super, hyper, alt.  It can also be t if the key is a modifier but it can't be
> +;; identified, as in the PGTK backend.
> +;; TIME is the timestamp in milliseconds of the event.
> +;; FRAME is the frame where the event happened.

I suggest you replace that text with a `cl-defstruct` (where you can
include the same information but in a way that's available via
`cl-describe-type`).  And then you can stop using `cl-third` and use
proper accessors instead.

> +(defvar llk-bindings nil
> +  "List of bindings for low level key events (press/release/tap).
> +
> +Use the `llk-bind' function to add bindings.  See its documentation for
> +a description of the binding information.")

AFAICT this is a list of elements of the form `(tab KEY FUNCTION)`.
Why not drop the `tap` and make it a "normal" keymap?

> +(defvar llk-tap-count 2
> +  "Number or key press/releases to consider a tap.")

Shouldn't `llk-tap-count` be specified individually for each binding?

> +(defvar llk-tap-timeout 1000
> +  "Time (ms) between consecutive key presses/releases to consider a tap.")

Default it to `mouse-double-click-time` (and maybe double it for triple
taps)?

> +(defvar llk-tap-keys
> +  '(xk-shift-l xk-shift-r xk-control-l xk-control-r meta)
> +  "Keys that can generate taps.")

This seems redundant with `llk-bindings`.

> +(defvar llk-describe-next-press nil
> +  "Internal variable to mark that next key press should be described.")

Use a "--" in the var's name for internal variables.

> +(defmacro define-xk (name x-keysym w32-keysym)
> +  "Internal macro to define keysyms."

Same thing for macros.

> +  `(let ((ksym (pcase (window-system)
> +                 ('pgtk ,x-keysym)
> +                 ('x ,x-keysym)
> +                 ('w32 ,w32-keysym))))

You can combine the first two branches into:

                    ((or 'pgtk 'x) ,x-keysym)

> +  ;; tty keys
> +  (define-xk xk-backspace   #xff08 #x08) ;; XK_BackSpace VK_BACK
> +  (define-xk xk-tab         #xff09 #x09) ;; XK_Tab VK_TAB
> +  (define-xk xk-clear       #xff0b #x0C) ;; XK_Clear VK_CLEAR
> +  (define-xk xk-return      #xff0d #x0D) ;; XK_Return VK_RETURN
> +  (define-xk xk-pause       #xff13 #x13) ;; XK_Pause VK_PAUSE
> +  (define-xk xk-scroll-lock #xff14 #x91) ;; XK_Scroll_Lock VK_SCROLL
> +  (define-xk xk-escape      #xff1B #x1B) ;; XK_Escape VK_ESCAPE
> +  (define-xk xk-delete      #xffff #x2E) ;; XK_Delete VK_DELETE
> +
> +  ;; Cursor control and motion
> +  (define-xk xk-home        #xff50 #x24) ;; XK_Home VK_HOME
> +  (define-xk xk-left        #xff51 #x25) ;; XK_Left VK_LEFT
> +  (define-xk xk-up          #xff52 #x26) ;; XK_Up VK_UP
> +  (define-xk xk-right       #xff53 #x27) ;; XK_Right VK_RIGHT
> +  (define-xk xk-down        #xff54 #x28) ;; XK_Down VK_DOWN
> +  (define-xk xk-page-up     #xff55 #x21) ;; XK_Page_Up VK_PRIOR
> +  (define-xk xk-page-down   #xff56 #x22) ;; XK_Page_Down VK_NEXT
> +  (define-xk xk-end         #xff57 #x23) ;; XK_End VK_END
> +  (define-xk xk-begin       #xff58 #x24) ;; XK_Begin VK_HOME
> +
> +  ;; Special Windows keyboard keys
> +  (define-xk xk-win-l       #xFF5B #x5B) ;; XK_Win_L VK_LWIN
> +  (define-xk xk-win-r       #xFF5C #x5C) ;; XK_Win_R VK_RWIN
> +  (define-xk xk-app         #xFF5D #x5D) ;; XK_App VK_APPS
> +
> +  ;; Misc functions
> +  (define-xk xk-select      #xff60 #x29) ;; XK_Select VK_SELECT
> +  (define-xk xk-print       #xff61 #x2A) ;; XK_Print VK_PRINT
> +  (define-xk xk-insert      #xff64 #x2D) ;; XK_Insert VK_INSERT
> +  (define-xk xk-num-lock    #xff7f #x90) ;; XK_Num_Lock VK_NUMLOCK
> +
> +  ;; Keypad
> +  ;; TODO: Check values for MS-Windows
> +  (define-xk xk-kp-enter    #xff8d nil) ;; XK_KP_Enter ???
> +  (define-xk xk-kp-multiply #xffaa nil) ;; XK_KP_Multiply ???
> +  (define-xk xk-kp-add      #xffab nil) ;; XK_KP_Add ???
> +  (define-xk xk-kp-subtract #xffad nil) ;; XK_KP_Subtract ???
> +  (define-xk xk-kp-decimal  #xffae nil) ;; XK_KP_Decimal ???
> +  (define-xk xk-kp-divide   #xffaf nil) ;; XK_KP_Divide ???
> +  (define-xk xk-kp-0        #xffb0 #x60) ;; XK_KP_0 VK_NUMPAD0
> +  (define-xk xk-kp-1        #xffb1 #x61) ;; XK_KP_1 VK_NUMPAD1
> +  (define-xk xk-kp-2        #xffb2 #x62) ;; XK_KP_2 VK_NUMPAD2
> +  (define-xk xk-kp-3        #xffb3 #x63) ;; XK_KP_3 VK_NUMPAD3
> +  (define-xk xk-kp-4        #xffb4 #x64) ;; XK_KP_4 VK_NUMPAD4
> +  (define-xk xk-kp-5        #xffb5 #x65) ;; XK_KP_5 VK_NUMPAD5
> +  (define-xk xk-kp-6        #xffb6 #x66) ;; XK_KP_6 VK_NUMPAD6
> +  (define-xk xk-kp-7        #xffb7 #x67) ;; XK_KP_7 VK_NUMPAD7
> +  (define-xk xk-kp-8        #xffb8 #x68) ;; XK_KP_8 VK_NUMPAD8
> +  (define-xk xk-kp-9        #xffb9 #x69) ;; XK_KP_9 VK_NUMPAD9
> +
> +  ;; Function keys
> +  (define-xk xk-f1          #xffbe #x70) ;; XK_F1 VK_F1
> +  (define-xk xk-f2          #xffbf #x71) ;; XK_F2 VK_F2
> +  (define-xk xk-f3          #xffc0 #x72) ;; XK_F3 VK_F3
> +  (define-xk xk-f4          #xffc1 #x73) ;; XK_F4 VK_F4
> +  (define-xk xk-f5          #xffc2 #x74) ;; XK_F5 VK_F5
> +  (define-xk xk-f6          #xffc3 #x75) ;; XK_F6 VK_F6
> +  (define-xk xk-f7          #xffc4 #x76) ;; XK_F7 VK_F7
> +  (define-xk xk-f8          #xffc5 #x77) ;; XK_F8 VK_F8
> +  (define-xk xk-f9          #xffc6 #x78) ;; XK_F9 VK_F9
> +  (define-xk xk-f10         #xffc7 #x79) ;; XK_F10 VK_F10
> +  (define-xk xk-f11         #xffc8 #x7A) ;; XK_F11 VK_F11
> +  (define-xk xk-f12         #xffc9 #x7B) ;; XK_F12 VK_F12
> +  (define-xk xk-f13         #xffca #x7C) ;; XK_F13 VK_F13
> +  (define-xk xk-f14         #xffcb #x7D) ;; XK_F14 VK_F14
> +  (define-xk xk-f15         #xffcc #x7E) ;; XK_F15 VK_F15
> +  (define-xk xk-f16         #xffcd #x7F) ;; XK_F16 VK_F16
> +  (define-xk xk-f17         #xffce #x80) ;; XK_F17 VK_F17
> +  (define-xk xk-f18         #xffcf #x81) ;; XK_F18 VK_F18
> +  (define-xk xk-f19         #xffd0 #x82) ;; XK_F19 VK_F19
> +  (define-xk xk-f20         #xffd1 #x83) ;; XK_F20 VK_F20
> +  (define-xk xk-f21         #xffd2 #x84) ;; XK_F21 VK_F21
> +  (define-xk xk-f22         #xffd3 #x85) ;; XK_F22 VK_F22
> +  (define-xk xk-f23         #xffd4 #x86) ;; XK_F23 VK_F23
> +  (define-xk xk-f24         #xffd5 #x87) ;; XK_F24 VK_F24
> +
> +  ;; Modifier keys
> +  (define-xk xk-shift-l     #xffe1 #xA0) ;; XK_Shift_L VK_LSHIFT
> +  (define-xk xk-shift-r     #xffe2 #xA1) ;; XK_Shift_R VK_RSHIFT
> +  (define-xk xk-control-l   #xffe3 #xA2) ;; XK_Control_L VK_LCONTROL
> +  (define-xk xk-control-r   #xffe4 #xA3) ;; XK_Control_R VK_RCONTROL
> +  (define-xk xk-caps-lock   #xffe5 #x14) ;; XK_Caps_Lock VK_CAPITAL
> +  (define-xk xk-metal-l     #xffe7 nil) ;; XK_Meta_L
> +  (define-xk xk-metal-t     #xffee nil) ;; XK_Meta_R
> +  (define-xk xk-alt-l       #xffe9 #xA4) ;; XK_Alt_L VK_LMENU
> +  (define-xk xk-alt-r       #xffea #xA5) ;; XK_Alt_R VK_RMENU
> +  (define-xk xk-super-l     #xffeb nil) ;; XK_Super_L
> +  (define-xk xk-super-r     #xffec nil) ;; XK_Super_R
> +  (define-xk xk-hyper-l     #xffed nil) ;; XK_Hyper_L
> +  (define-xk xk-hyper-r     #xffee nil) ;; XK_Hyper_R
> +
> +  ;; Latin 1
> +  ;; For numbers and letters, MS-Windows does not define constant names.
> +  ;; X11 defines distinct keysyms for lowercase and uppercase
> +  ;; letters.  We use only the uppercase ones.  Events with lowercase
> +  ;; letters are converted to uppercase.
> +  (define-xk xk-space       #x0020 #x20) ;; XK_space VK_SPACE
> +  (define-xk xk-0           #x0030 #x30) ;; XK_0
> +  (define-xk xk-1           #x0031 #x31) ;; XK_1
> +  (define-xk xk-2           #x0032 #x32) ;; XK_2
> +  (define-xk xk-3           #x0033 #x33) ;; XK_3
> +  (define-xk xk-4           #x0034 #x34) ;; XK_4
> +  (define-xk xk-5           #x0035 #x35) ;; XK_5
> +  (define-xk xk-6           #x0036 #x36) ;; XK_6
> +  (define-xk xk-7           #x0037 #x37) ;; XK_7
> +  (define-xk xk-8           #x0038 #x38) ;; XK_8
> +  (define-xk xk-9           #x0039 #x39) ;; XK_9
> +  (define-xk xk-a           #x0041 #x41) ;; XK_A
> +  (define-xk xk-b           #x0042 #x42) ;; XK_B
> +  (define-xk xk-c           #x0043 #x43) ;; XK_C
> +  (define-xk xk-d           #x0044 #x44) ;; XK_D
> +  (define-xk xk-e           #x0045 #x45) ;; XK_E
> +  (define-xk xk-f           #x0046 #x46) ;; XK_F
> +  (define-xk xk-g           #x0047 #x47) ;; XK_G
> +  (define-xk xk-h           #x0048 #x48) ;; XK_H
> +  (define-xk xk-i           #x0049 #x49) ;; XK_I
> +  (define-xk xk-j           #x004A #x4A) ;; XK_J
> +  (define-xk xk-k           #x004B #x4B) ;; XK_K
> +  (define-xk xk-l           #x004C #x4C) ;; XK_L
> +  (define-xk xk-m           #x004D #x4D) ;; XK_M
> +  (define-xk xk-n           #x004E #x4E) ;; XK_N
> +  (define-xk xk-o           #x004F #x4F) ;; XK_O
> +  (define-xk xk-p           #x0050 #x50) ;; XK_P
> +  (define-xk xk-q           #x0051 #x51) ;; XK_Q
> +  (define-xk xk-r           #x0052 #x52) ;; XK_R
> +  (define-xk xk-s           #x0053 #x53) ;; XK_S
> +  (define-xk xk-t           #x0054 #x54) ;; XK_T
> +  (define-xk xk-u           #x0055 #x55) ;; XK_U
> +  (define-xk xk-v           #x0056 #x56) ;; XK_V
> +  (define-xk xk-w           #x0057 #x57) ;; XK_W
> +  (define-xk xk-x           #x0058 #x58) ;; XK_X
> +  (define-xk xk-y           #x0059 #x59) ;; XK_Y
> +  (define-xk xk-z           #x005A #x5A));; XK_Z

These tables should be somehow auto-generated, IMO.

> +(defun llk-init ()
> +  "Initialize low level key events.
> +
> +Fills the `llk-keysyms' list, and binds the `low-level-key' event
> +to the `llk-handle' function.  Resets the `llk-bindings' list.
> +Besides calling this function, you need to set `enable-low-level-key-events'
> +to a non-nil value."

Does the user need to know about those things it does?
Would there be any harm to call it automatically when the package is
loaded, or the first time `llk-bind` is called?  IOW, please try and
make it unnecessary for the caller to know and call this function (and
then make it internal with a "--" in its name).

> +  (interactive)

Why interactive?

> +(defsubst event-is-key-press (event)
> +  "Return the value of the IS-KEY-PRESS field of the EVENT, a low level key event."
> +  (declare (side-effect-free t))
> +  (if (consp event) (nth 1 event)))
> +
> +(defsubst event-keysym (event)
> +  "Return the value of the KEY field of the EVENT, a low level key event."
> +  (declare (side-effect-free t))
> +  (if (consp event) (nth 2 event)))
> +
> +(defsubst event-modifier (event)
> +  "Return the value of the MODIFIER field of the EVENT, a low level key event."
> +  (declare (side-effect-free t))
> +  (if (consp event) (nth 3 event)))
> +
> +(defsubst event-time (event)
> +  "Return the value of the TIME field of the EVENT, a low level key event."
> +  (declare (side-effect-free t))
> +  (if (consp event) (nth 4 event)))

I think the `cl-defstruct` will define those functions for you (with
a different name, but I think it's OK because these aren't applicable
to other events anyway).

> +;; We store the last events (key/modifier is-press timestamp) here to
> +;; test for multitap.
> +(defvar llk-events nil
> +  "Internal variable for detecting taps.")

"--"

> +;; If positive, return key (xk-shift-l, etc) else return nil.
> +(defun llk-detect-n-tap (n timeout)
> +  "Internal function to detect n-tap keys."

"--"

I think it should not take `n` as an argument and instead it should
automatically discover how many times the key has been tapped and
generate events of the form `double-xk-shift-l`,  `triple-xk-shift-l`,
`tap-xk-shift-l`.

> +           (cl-every 'eq

Please #' to quote function names.  Here and elsewhere.

> +(defun describe-low-level-key ()
> +  "Wait for key press and describe the low level key event it generates."
> +  (interactive)
> +  (setq llk-describe-next-press t))

Can we get rid of `llk-describe-next-press` and instead temporarily

    (define-key special-event-map [low-level-key] 'llk--describe)

or something like that?

> +(defun llk-handle ()
> +  "Internal function to handle low level key events."
> +  (interactive)
> +  (if (and (event-is-key-press last-input-event)
> +           llk-describe-next-press)
> +      (llk-show-event-description)
> +    (let ((tap-key (llk-detect-n-tap
> +                    llk-tap-count
> +                    llk-tap-timeout)))
> +      (when tap-key
> +        (let ((func (cl-third
> +                     (seq-find
> +                      (lambda (b)
> +                        (and (eq (cl-first b) 'tap)
> +                             (eq (cl-second b) tap-key)))
> +                      llk-bindings))))
> +          (cond
> +           ((commandp func) (call-interactively func))

Maybe instead of focusing on running a command, `llk-handle` and
`llk-bind` should concentrate on generating "normal" events that are
then looked up in the normal keymaps.

So the user would use them only to specify which events should be
recognized and which should be ignored.  Then the user can use the
standard keymaps to declare what to do in response to `double-xk-shift-l`.
WDYT?

> +           ((functionp func) (funcall func))))))))

Why?


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 18 Dec 2024 10:59:38 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 18 05:59:38 2024
Received: from localhost ([127.0.0.1]:33618 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tNrm5-0004Re-LH
	for submit <at> debbugs.gnu.org; Wed, 18 Dec 2024 05:59:38 -0500
Received: from mail.imayhem.com ([82.223.54.191]:48129
 helo=zealous-pike.82-223-54-191.plesk.page)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <cpardo@HIDDEN>) id 1tNrlz-0004RA-56
 for 74423 <at> debbugs.gnu.org; Wed, 18 Dec 2024 05:59:27 -0500
Received: from [192.168.68.103] (111.red-88-21-7.staticip.rima-tde.net
 [88.21.7.111])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id 528BA80135; 
 Wed, 18 Dec 2024 10:59:17 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 88.21.7.111) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[192.168.68.103]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Content-Type: multipart/mixed; boundary="------------Ho0Ev8LvMd4RGoiUOUnpb8B7"
Message-ID: <343e2854-a16e-4718-894a-470b733ae91f@HIDDEN>
Date: Wed, 18 Dec 2024 11:59:16 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74423: Low level key events
To: Eli Zaretskii <eliz@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN> <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN> <867c8ezny3.fsf@HIDDEN>
 <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN> <86bjxev7ng.fsf@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <86bjxev7ng.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is a multi-part message in MIME format.
--------------Ho0Ev8LvMd4RGoiUOUnpb8B7
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

On 14/12/2024 12:14, Eli Zaretskii wrote:

> Aren't these events sent only if enable-low-level-key-events is
> non-nil?  If so, this should be documented, and the variable itself
> should be documented.

Fixed this and the style mistakes.


--------------Ho0Ev8LvMd4RGoiUOUnpb8B7
Content-Type: text/plain; charset=UTF-8;
 name="0001-Send-events-for-key-presses-and-key-releases.patch"
Content-Disposition: attachment;
 filename="0001-Send-events-for-key-presses-and-key-releases.patch"
Content-Transfer-Encoding: base64

RnJvbSA5ZTdkMjE5NTQzYjJkZDQyNDcyNzEyNTkxMGVjNzExZjFhYTZjYjU1IE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDZWNpbGlvIFBhcmRvIDxjcGFyZG9AaW1heWhlbS5j
b20+CkRhdGU6IE1vbiwgMiBEZWMgMjAyNCAxNzozMDo0MiArMDEwMApTdWJqZWN0OiBbUEFU
Q0hdIFNlbmQgZXZlbnRzIGZvciBrZXkgcHJlc3NlcyBhbmQga2V5IHJlbGVhc2VzLgoKRGV0
ZWN0IGRvdWJsZS90cmlwbGUgdGFwcy4KCiogZG9jL2xpc3ByZWYvY29tbWFuZHMudGV4aTog
QWRkZWQgaW5mb3JtYXRpb24gYWJvdXQgbmV3IGV2ZW50LgoqIHNyYy9ndGt1dGlsLmMgKHhn
X2NyZWF0ZV9mcmFtZV93aWRnZXRzKTogTW9kaWZpZWQgdG8gaGFuZGxlIGtleQpyZWxlYXNl
IGV2ZW50cy4KKHhnX21heWJlX3NlbmRfbG93X2xldmVsX2tleV9ldmVudCk6IE5ldyBmdW5j
dGlvbiB0aGF0IHNlbmRzIGtleQpldmVudHMuCih4Z193aWRnZXRfa2V5X3ByZXNzX2V2ZW50
X2NiKTogTW9kaWZpZWQgdG8gc2VuZCBsb3cgbGV2ZWwga2V5IGV2ZW50cy4KKHhnX3dpZGdl
dF9rZXlfcmVsZWFzZV9ldmVudF9jYik6IE5ldyBmdW5jdGlvbiB0byBzZW5kIGxvdyBsZXZl
bCBrZXkKZXZlbnRzIG9uIGtleSByZWxlYXNlLgoqIHNyYy9rZXlib2FyZC5jIChrYmRfYnVm
ZmVyX2dldF9ldmVudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBsb3cgbGV2ZWwKa2V5Ym9hcmQg
ZXZlbnRzLgoobWFrZV9saXNweV9ldmVudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBsb3cgbGV2
ZWwga2V5Ym9hcmQgZXZlbnRzLgooa2JkX2xvd19sZXZlbF9rZXlfaXNfZW5hYmxlZCk6IE5l
dyBmdW5jdGlvbiB0byBkZWNpZGUgaWYgYSBwYXJ0aWN1bGFyCmtleSBzaG91bGQgZ2VuZXJh
dGUgZXZlbnRzLCBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb24uCihzeW1zX29mX2tleWJvYXJk
KTogQWRkZWQgc3ltYm9scyBhbmQgdmFyaWFsYmxlcy4KKGtleXNfb2Zfa2V5Ym9hcmQpOiBN
b2RpZmllZCB0byBtYXAgbG93IGxldmVsIGtleSBldmVudHMgdG8KJ3NwZWNpYWwtZXZlbnQt
bWFwJy4KKiBzcmMva2V5Ym9hcmQuaDogTW9kaWZpZWQgd2l0aCBmdW5jdGlvbiBwcm90b3R5
cGUuCiogc3JjL3BndGt0ZXJtLmMgKHBndGtfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2
ZW50KTogTmV3IGZ1bmN0aW9uCnRoYXQgc2VuZHMga2V5IGV2ZW50cy4KKGtleV9wcmVzc19l
dmVudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBsb3cgbGV2ZWwga2V5Ym9hcmQgZXZlbnRzLgoo
a2V5X3JlbGVhc2VfZXZlbnQpOiBNb2RpZmllZCB0byBoYW5kbGUgbG93IGxldmVsIGtleWJv
YXJkIGV2ZW50cy4KKiBzcmMvdGVybWhvb2tzLmg6IE1vZGlmaWVkIHRvIGRlZmluZSBjb25z
dGFudC4KKiBzcmMvdzMyZm5zLmMgKHczMl93bmRfcHJvYyk6IE1vZGlmaWVkIHRvIGdlbmVy
YXRlIGxvdyBsZXZlbCBrZXkKZXZlbnRzLgoqIHNyYy93MzJ0ZXJtLmMgKHczMl9yZWFkX3Nv
Y2tldCk6IE1vZGlmaWVkIHRvIGdlbmVyYXRlIGxvdyBsZXZlbCBrZXkKZXZlbnRzLgoqIHNy
Yy93MzJ0ZXJtLmg6IE1vZGlmaWVkIHRvIGRlZmluZSBjb25zdGFudHMuCiogc3JjL3h0ZXJt
LmMgKHhfZ2V0X21vZGlmaWVyX2Zvcl9rZXljb2RlKTogTmV3IGZ1bmN0aW9uIHRvIGRlY2lk
ZQp3aGljaCAoaWYgYW55KSBtb2RpZmllciBjb3JyZXNwb25kcyB0byBhIGdpdmVuIGtleS4K
KHhfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50KTogTmV3IGZ1bmN0aW9uIHRoYXQg
c2VuZHMga2V5CmV2ZW50cy4KKGhhbmRsZV9vbmVfeGV2ZW50KTogTW9kaWZpZWQgdG8gaGFu
ZGxlIGxvdyBsZXZlbCBrZXkgZXZlbnRzLgooc3ltc19vZl94dGVybSk6IE1vZGlmaWVkIHRv
IGRlZmluZSBzeW1ib2wuCiogc3JjL3h0ZXJtLmg6IE1vZGlmaWVkIHdpdGggZnVuY3Rpb24g
cHJvdG90eXBlCiogbGlzcC9sb3ctbGV2ZWwta2V5LmVsIChOZXcgZmlsZSkuCihsbGstYmlu
ZGluZ3MpOiBVc2VyIGJpbmRpbmdzIGZvciBsb3cgbGV2ZWwga2V5IGV2ZW50cy4KKGxsay10
YXAtY291bnQpOiBVc2VyIG9wdGlvbi4KKGxsay10YXAtdGltZW91dCk6IFVzZXIgb3B0aW9u
LgoobGxrLXRhcC1rZXlzKTogVXNlciBvcHRpb24uCihsbGsta2V5c3ltcyk6IExpc3Qgb2Yg
YXZhaWxhYmxlIGtleXN5bXMuCihkZWZpbmUteGspOiBNYWNybyBmb3IgZGVmaW5pbmcga2V5
c3ltcy4KKGxsay1kZWZpbmUta2V5c3ltcyk6IEJ1aWxkIGxsay1rZXlzeW1zLgoobGxrLWlu
aXQpOiBGdW5jdGlvbiB0byBpbml0aWFsaXplIGxvdyBsZXZlbCBrZXkgaGFuZGxpbmcuCihl
dmVudC1pcy1rZXktcHJlc3MpOiBHZXQgZmllbGQgZnJvbSBldmVudC4KKGV2ZW50LWtleXN5
bSk6IEdldCBmaWVsZCBmcm9tIGV2ZW50LgooZXZlbnQtbW9kaWZpZXIpOiBHZXQgZmllbGQg
ZnJvbSBldmVudC4KKGV2ZW50LXRpbWUpOiBHZXQgZmllbGQgZnJvbSBldmVudC4KKGxsay1i
aW5kKTogRnVuY3Rpb24gdG8gY3JlYXRlIGEgYmluZGluZy4KKGxsay1ldmVudHMpOiBFdmVu
dCBoaXN0b3J5IGZvciB0YXAgZGV0ZWN0aW9uLgoobGxrLWRldGVjdC1uLXRhcCk6IEZ1bmN0
aW9uIHRvIGRldGVjdCB0YXBzLgooZGVzY3JpYmUtbG93LWxldmVsLWtleSk6IENvbW1hbmQg
dG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGEga2V5LgoobGxrLXNob3ctZXZlbnQtZGVzY3Jp
cHRpb24pOiBTaG93IGhlbHAgYnVmZmVyIHdpdGggaW5mb3JtYXRpb24KYWJvdXQgYW4gZXZl
bnQuCihsbGstaGFuZGxlKTogSGFuZGxlciBmb3Iga2V5IGV2ZW50cy4KLS0tCiBkb2MvbGlz
cHJlZi9jb21tYW5kcy50ZXhpIHwgIDMyICsrKysKIGxpc3AvbG93LWxldmVsLWtleS5lbCAg
ICAgfCAzNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9n
dGt1dGlsLmMgICAgICAgICAgICAgfCAgODEgKysrKysrKysrCiBzcmMva2V5Ym9hcmQuYyAg
ICAgICAgICAgIHwgIDY1ICsrKysrKysrCiBzcmMva2V5Ym9hcmQuaCAgICAgICAgICAgIHwg
ICAxICsKIHNyYy9wZ3RrdGVybS5jICAgICAgICAgICAgfCAgNTUgKysrKysrCiBzcmMvdGVy
bWhvb2tzLmggICAgICAgICAgIHwgICAxICsKIHNyYy93MzJmbnMuYyAgICAgICAgICAgICAg
fCAgMTEgKysKIHNyYy93MzJ0ZXJtLmMgICAgICAgICAgICAgfCAgNDkgKysrKysrCiBzcmMv
dzMydGVybS5oICAgICAgICAgICAgIHwgICAzICstCiBzcmMveHRlcm0uYyAgICAgICAgICAg
ICAgIHwgMTQyICsrKysrKysrKysrKysrKysKIHNyYy94dGVybS5oICAgICAgICAgICAgICAg
fCAgIDIgKwogMTIgZmlsZXMgY2hhbmdlZCwgNzgzIGluc2VydGlvbnMoKyksIDEgZGVsZXRp
b24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaXNwL2xvdy1sZXZlbC1rZXkuZWwKCmRpZmYg
LS1naXQgYS9kb2MvbGlzcHJlZi9jb21tYW5kcy50ZXhpIGIvZG9jL2xpc3ByZWYvY29tbWFu
ZHMudGV4aQppbmRleCBkZjgyNjZhNzE1Ny4uODhkZDZkNGJhYTAgMTAwNjQ0Ci0tLSBhL2Rv
Yy9saXNwcmVmL2NvbW1hbmRzLnRleGkKKysrIGIvZG9jL2xpc3ByZWYvY29tbWFuZHMudGV4
aQpAQCAtMjY1OCw2ICsyNjU4LDM4IEBAIE1pc2MgRXZlbnRzCiByZXNwZWN0aXZlbHkuICBU
aGV5IGFyZSB1c3VhbGx5IGludGVycHJldGVkIGFzIGJlaW5nIHJlbGF0aXZlIHRvIHRoZQog
c2l6ZSBvZiB0aGUgb2JqZWN0IGJlbmVhdGggdGhlIGdlc3R1cmU6IGltYWdlLCB3aW5kb3cs
IGV0Yy4KIAorQGNpbmRleCBAY29kZXtsb3ctbGV2ZWwta2V5fSBldmVudAorQGl0ZW0gKGxv
dy1sZXZlbC1rZXkgQHZhcntpcy1rZXktcHJlc3N9IEB2YXJ7a2V5fSBAdmFye21vZGlmaWVy
fSBAdmFye3RpbWV9IEB2YXJ7ZnJhbWV9KQorVGhpcyBldmVudCBpcyBzZW50IG9uIHRoZSBw
aHlzaWNhbCBwcmVzcyBvciByZWxlYXNlIG9mIGtleXMsIG9ubHkgb24gR1VJCitzeXN0ZW1z
LCBjdXJyZW50bHkgWCwgTVMtV2luZG93cyBhbmQgUEdUSywgYW5kIG9ubHkgaWYgdGhlIHZh
cmlhYmxlCitAY29kZXtlbmFibGUtbG93LWxldmVsLWtleS1ldmVudHN9IGhhcyBhIG5vbi1A
Y29kZXtuaWx9IHZhbHVlLiAgU2VlIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHZhbHVl
cyBpdCBjYW4gdGFrZSwgdGhhdCBhbGxvdyB0byBmaWx0ZXIgd2hpY2gKK2tleXMgc2hvdWxk
IGdlbmVyYXRlIHRoaXMga2luZCBvZiBldmVudC4KKworQHZhcntpcy1rZXktcHJlc3N9IGlz
IEBjb2Rle3R9IGZvciBhIGtleSBwcmVzcywgQGNvZGV7bmlsfSBmb3IgYSBrZXkgcmVsZWFz
ZS4KK0B2YXJ7dGltZX0gaXMgdGhlIGV2ZW50J3MgdGltZSBpbiBtaWxsaXNlY29uZHMsIEB2
YXJ7ZnJhbWV9IGlzIHRoZQorZnJhbWUgcmVjZWl2aW5nIGl0LiAgQHZhcnttb2RpZmllcn0g
aXMgQGNvZGV7bmlsfSBpZiB0aGUga2V5IGlzIG5vdCBhCittb2RpZmllciBrZXksIEBjb2Rl
e3R9IGlmIGl0IGlzLCBidXQgaXQgaXMgdW5rbm93biB3aGljaCBvbmUsIG9yIG9uZSBvZgor
QGNvZGV7c2hpZnR9LCBAY29kZXtjb250cm9sfSwgQGNvZGV7bWV0YX0sIEBjb2Rle2FsdH0s
IEBjb2Rle3N1cGVyfSwKK0Bjb2Rle2h5cGVyfS4KKworQHZhcntrZXl9LCBhbiBpbnRlZ2Vy
LCBpZGVudGlmaWVzIHRoZSBrZXkgcHJlc3NlZCBvciByZWxlYXNlZC4gIFRoaXMKK251bWJl
ciBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQsIGJ1dCB0aGVyZSBhcmUgdmFyaWFibGVzIGZvciBt
b3N0IGtleXMgdGhhdAorY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIG51bWJlcnMgdG8g
aWRlbnRpZnkgdGhlbS4gIEZvciBleGFtcGxlLCB0aGUKK3ZhcmlhYmxlIEBjb2Rle3hrLWJh
Y2tzcGFjZX0gaWRlbnRpZmllcyB0aGUgQGtleXtiYWNrc3BhY2V9IGtleS4KKworVGhlIG5h
bWVzIGFyZSBwYXJhbGxlbCB0byB0aG9zZSBmb3IgS2V5U3ltcyBvbiBYLCBhcyBkZWZpbmVk
IGluCitAZmlsZXt4a2V5c3ltZGVmLmh9LiAgRm9yIGV4YW1wbGUsIEBjb2Rle1hLX1NoaWZ0
X0x9ICh0aGUgbGVmdCBzaGlmdAora2V5KSwgY29ycmVzcG9uZHMgdG8gQGNvZGV7eGstc2hp
ZnQtbH0uICBUaGUgQGZpbGV7eGtleXN5bWRlZi5ofSBmaWxlCitkZWZpbmVzIGRpZmZlcmVu
dCBLZXlTeW1zIGZvciBjYXBpdGFsIGFuZCBzbWFsbCB2ZXJzaW9ucyBvZiBsZXR0ZXJzLgor
Rm9yIHRoaXMgZXZlbnQsIG9ubHkgdGhlIGNhcGl0YWwgdmVyc2lvbiBpcyB1c2VkLCB3aXRo
IHRoZSB2YXJpYWJsZXMKK0Bjb2Rle3hrLWF9LCBAY29kZXt4ay1ifSwgZXRjLgorCitUaGVz
ZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIEBj
b2Rle2xsay1pbml0fS4KK1RoaXMgZnVuY3Rpb24gYWxzbyBiaW5kcyBhIGhhbmRsZXIgdG8g
dGhpcyBldmVudCwgd2hpY2ggYWxsb3dzIHRvIGRldGVjdAorZG91YmxlIHRhcHMgb24ga2V5
cyAobm9ybWFsbHkgbW9kaWZpZXIga2V5cykgYW5kIGJpbmQgY29tbWFuZHMgb3IKK2Z1bmN0
aW9ucyB0byBiZSBydW4uICBTZWUgdGhlIGZ1bmN0aW9uIEBjb2Rle2xsay1iaW5kfS4KKwog
QGNpbmRleCBAY29kZXtwcmVlZGl0LXRleHR9IGV2ZW50CiBAaXRlbSAocHJlZWRpdC10ZXh0
IEB2YXJ7YXJnfSkKIFRoaXMgZXZlbnQgaXMgc2VudCB3aGVuIGEgc3lzdGVtIGlucHV0IG1l
dGhvZCB0ZWxscyBFbWFjcyB0byBkaXNwbGF5CmRpZmYgLS1naXQgYS9saXNwL2xvdy1sZXZl
bC1rZXkuZWwgYi9saXNwL2xvdy1sZXZlbC1rZXkuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmJjOTMxMWY4MmQwCi0tLSAvZGV2L251bGwKKysrIGIvbGlz
cC9sb3ctbGV2ZWwta2V5LmVsCkBAIC0wLDAgKzEsMzQyIEBACis7OzsgLSotIGxleGljYWwt
YmluZGluZzogdCAtKi0KKworOzsgVGhlIHBoeXNpY2FsLWtleSBldmVudCBpcyBsaWtlIHRo
aXM6Cis7OyAobG93LWxldmVsLWtleSBJUy1LRVktUFJFU1MgS0VZIE1PRElGSUVSIFRJTUUg
RlJBTUUpCis7OyBJUy1LRVktUFJFU1MgaXMgdCBpZiB0aGUga2V5IGhhcyBiZWVuIHByZXNz
ZWQsIG5pbCBpZiBpdCBoYXMgYmVlbiByZWxlYXNlZC4KKzs7IEtFWSBpcyB0aGUga2V5c3lt
IG51bWJlci4KKzs7IE1PRElGSUVSIGlzIHRoZSBtb2RpZmllciBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBrZXkuICBJdCBpcyBuaWwgaWYgdGhlIGtleSBpcworOzsgbm90IGEgbW9kaWZpZXIu
ICBJdCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogc2hpZnQsIGNvbnRy
b2wsIG1ldGEsCis7OyBzdXBlciwgaHlwZXIsIGFsdC4gIEl0IGNhbiBhbHNvIGJlIHQgaWYg
dGhlIGtleSBpcyBhIG1vZGlmaWVyIGJ1dCBpdCBjYW4ndCBiZQorOzsgaWRlbnRpZmllZCwg
YXMgaW4gdGhlIFBHVEsgYmFja2VuZC4KKzs7IFRJTUUgaXMgdGhlIHRpbWVzdGFtcCBpbiBt
aWxsaXNlY29uZHMgb2YgdGhlIGV2ZW50LgorOzsgRlJBTUUgaXMgdGhlIGZyYW1lIHdoZXJl
IHRoZSBldmVudCBoYXBwZW5lZC4KKzs7Cis7OyBBZnRlciBjYWxsaW5nICdsbGstaW5pdCcg
YW5kIHNldHRpbmcgYSBub24tbmlsIHZhbHVlIGZvcgorOzsgJ2VuYWJsZS1sb3ctbGV2ZWwt
a2V5LWV2ZW50cycsIGV2ZW50cyBiZWdpbiB0byBiZSBoYW5kbGVkIGJ5ICdsbGstaGFuZGxl
cicsCis7OyB3aGljaCB0cmllcyB0byBkZXRlY3Qgbi10YXBzIGFuZCBjYWxscyB0aGUgY29y
cmVzcG9uZGluZyBmdW5jdGlvbi4KKzs7Cis7OyBUbyBpbXBsZW1lbnQgb3RoZXIgZnVuY3Rp
b25hbGl0aWVzLCB5b3UgY2FuIHJlcGxhY2UgbGxrLWhhbmRsZXIgd2l0aAorOzsgeW91ciBv
d24gZnVuY3Rpb24uCisKKyhyZXF1aXJlICdjbC1saWIpCisKKzs7IFVzZXIgb3B0aW9ucwor
CisoZGVmdmFyIGxsay1iaW5kaW5ncyBuaWwKKyAgIkxpc3Qgb2YgYmluZGluZ3MgZm9yIGxv
dyBsZXZlbCBrZXkgZXZlbnRzIChwcmVzcy9yZWxlYXNlL3RhcCkuCisKK1VzZSB0aGUgYGxs
ay1iaW5kJyBmdW5jdGlvbiB0byBhZGQgYmluZGluZ3MuICBTZWUgaXRzIGRvY3VtZW50YXRp
b24gZm9yCithIGRlc2NyaXB0aW9uIG9mIHRoZSBiaW5kaW5nIGluZm9ybWF0aW9uLiIpCisK
KyhkZWZ2YXIgbGxrLXRhcC1jb3VudCAyCisgICJOdW1iZXIgb3Iga2V5IHByZXNzL3JlbGVh
c2VzIHRvIGNvbnNpZGVyIGEgdGFwLiIpCisKKyhkZWZ2YXIgbGxrLXRhcC10aW1lb3V0IDEw
MDAKKyAgIlRpbWUgKG1zKSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGtleSBwcmVzc2VzL3JlbGVh
c2VzIHRvIGNvbnNpZGVyIGEgdGFwLiIpCisKKyhkZWZ2YXIgbGxrLXRhcC1rZXlzCisgICco
eGstc2hpZnQtbCB4ay1zaGlmdC1yIHhrLWNvbnRyb2wtbCB4ay1jb250cm9sLXIgbWV0YSkK
KyAgIktleXMgdGhhdCBjYW4gZ2VuZXJhdGUgdGFwcy4iKQorCisoZGVmdmFyIGxsay1rZXlz
eW1zIG5pbAorICAiTGlzdCBvZiBrZXlzeW0gbnVtYmVycyBhbmQgdGhlaXIgY29ycmVzcG9u
ZGluZyBzeW1ib2xzLgorCitFYWNoIGVsZW1lbnQgaGFzIHRoZSBmb3JtIChLRVlTWU0gLiBT
WU1CT0wpLiAgVGhlIHZhcmlhYmxlIHZhbHVlIGZvcgorZWFjaCBzeW1ib2wgaXMgdGhlIGtl
eXN5bS4gIFRoaXMgbGlzdCBpcyBpbml0aWFsaXplZCBieSBgbGxrLWluaXQnLiIpCisKKyhk
ZWZ2YXIgbGxrLWRlc2NyaWJlLW5leHQtcHJlc3MgbmlsCisgICJJbnRlcm5hbCB2YXJpYWJs
ZSB0byBtYXJrIHRoYXQgbmV4dCBrZXkgcHJlc3Mgc2hvdWxkIGJlIGRlc2NyaWJlZC4iKQor
CisoZGVmbWFjcm8gZGVmaW5lLXhrIChuYW1lIHgta2V5c3ltIHczMi1rZXlzeW0pCisgICJJ
bnRlcm5hbCBtYWNybyB0byBkZWZpbmUga2V5c3ltcy4iCisgIGAobGV0ICgoa3N5bSAocGNh
c2UgKHdpbmRvdy1zeXN0ZW0pCisgICAgICAgICAgICAgICAgICgncGd0ayAseC1rZXlzeW0p
CisgICAgICAgICAgICAgICAgICgneCAseC1rZXlzeW0pCisgICAgICAgICAgICAgICAgICgn
dzMyICx3MzIta2V5c3ltKSkpKQorICAgICAoZGVmY29uc3QgLG5hbWUga3N5bSAiQ29uc3Rh
bnQgZm9yIGEga2V5c3ltIHZhbHVlLiIpCisgICAgIChwdXNoIChjb25zIGtzeW0gJyxuYW1l
KSBsbGsta2V5c3ltcykpKQorCisoZGVmdW4gbGxrLWRlZmluZS1rZXlzeW1zICgpCisgICJJ
bml0aWFsaXplIHRoZSBrZXlzeW0gbGlzdCwgYGxsay1rZXlzeW1zJy4KKworQ2FsbGVkIGZy
b20gYGxsay1pbml0Jy4iCisgIChzZXRxIGxsay1rZXlzeW1zIG5pbCkKKworICA7OyB0dHkg
a2V5cworICAoZGVmaW5lLXhrIHhrLWJhY2tzcGFjZSAgICN4ZmYwOCAjeDA4KSA7OyBYS19C
YWNrU3BhY2UgVktfQkFDSworICAoZGVmaW5lLXhrIHhrLXRhYiAgICAgICAgICN4ZmYwOSAj
eDA5KSA7OyBYS19UYWIgVktfVEFCCisgIChkZWZpbmUteGsgeGstY2xlYXIgICAgICAgI3hm
ZjBiICN4MEMpIDs7IFhLX0NsZWFyIFZLX0NMRUFSCisgIChkZWZpbmUteGsgeGstcmV0dXJu
ICAgICAgI3hmZjBkICN4MEQpIDs7IFhLX1JldHVybiBWS19SRVRVUk4KKyAgKGRlZmluZS14
ayB4ay1wYXVzZSAgICAgICAjeGZmMTMgI3gxMykgOzsgWEtfUGF1c2UgVktfUEFVU0UKKyAg
KGRlZmluZS14ayB4ay1zY3JvbGwtbG9jayAjeGZmMTQgI3g5MSkgOzsgWEtfU2Nyb2xsX0xv
Y2sgVktfU0NST0xMCisgIChkZWZpbmUteGsgeGstZXNjYXBlICAgICAgI3hmZjFCICN4MUIp
IDs7IFhLX0VzY2FwZSBWS19FU0NBUEUKKyAgKGRlZmluZS14ayB4ay1kZWxldGUgICAgICAj
eGZmZmYgI3gyRSkgOzsgWEtfRGVsZXRlIFZLX0RFTEVURQorCisgIDs7IEN1cnNvciBjb250
cm9sIGFuZCBtb3Rpb24KKyAgKGRlZmluZS14ayB4ay1ob21lICAgICAgICAjeGZmNTAgI3gy
NCkgOzsgWEtfSG9tZSBWS19IT01FCisgIChkZWZpbmUteGsgeGstbGVmdCAgICAgICAgI3hm
ZjUxICN4MjUpIDs7IFhLX0xlZnQgVktfTEVGVAorICAoZGVmaW5lLXhrIHhrLXVwICAgICAg
ICAgICN4ZmY1MiAjeDI2KSA7OyBYS19VcCBWS19VUAorICAoZGVmaW5lLXhrIHhrLXJpZ2h0
ICAgICAgICN4ZmY1MyAjeDI3KSA7OyBYS19SaWdodCBWS19SSUdIVAorICAoZGVmaW5lLXhr
IHhrLWRvd24gICAgICAgICN4ZmY1NCAjeDI4KSA7OyBYS19Eb3duIFZLX0RPV04KKyAgKGRl
ZmluZS14ayB4ay1wYWdlLXVwICAgICAjeGZmNTUgI3gyMSkgOzsgWEtfUGFnZV9VcCBWS19Q
UklPUgorICAoZGVmaW5lLXhrIHhrLXBhZ2UtZG93biAgICN4ZmY1NiAjeDIyKSA7OyBYS19Q
YWdlX0Rvd24gVktfTkVYVAorICAoZGVmaW5lLXhrIHhrLWVuZCAgICAgICAgICN4ZmY1NyAj
eDIzKSA7OyBYS19FbmQgVktfRU5ECisgIChkZWZpbmUteGsgeGstYmVnaW4gICAgICAgI3hm
ZjU4ICN4MjQpIDs7IFhLX0JlZ2luIFZLX0hPTUUKKworICA7OyBTcGVjaWFsIFdpbmRvd3Mg
a2V5Ym9hcmQga2V5cworICAoZGVmaW5lLXhrIHhrLXdpbi1sICAgICAgICN4RkY1QiAjeDVC
KSA7OyBYS19XaW5fTCBWS19MV0lOCisgIChkZWZpbmUteGsgeGstd2luLXIgICAgICAgI3hG
RjVDICN4NUMpIDs7IFhLX1dpbl9SIFZLX1JXSU4KKyAgKGRlZmluZS14ayB4ay1hcHAgICAg
ICAgICAjeEZGNUQgI3g1RCkgOzsgWEtfQXBwIFZLX0FQUFMKKworICA7OyBNaXNjIGZ1bmN0
aW9ucworICAoZGVmaW5lLXhrIHhrLXNlbGVjdCAgICAgICN4ZmY2MCAjeDI5KSA7OyBYS19T
ZWxlY3QgVktfU0VMRUNUCisgIChkZWZpbmUteGsgeGstcHJpbnQgICAgICAgI3hmZjYxICN4
MkEpIDs7IFhLX1ByaW50IFZLX1BSSU5UCisgIChkZWZpbmUteGsgeGstaW5zZXJ0ICAgICAg
I3hmZjY0ICN4MkQpIDs7IFhLX0luc2VydCBWS19JTlNFUlQKKyAgKGRlZmluZS14ayB4ay1u
dW0tbG9jayAgICAjeGZmN2YgI3g5MCkgOzsgWEtfTnVtX0xvY2sgVktfTlVNTE9DSworCisg
IDs7IEtleXBhZAorICA7OyBUT0RPOiBDaGVjayB2YWx1ZXMgZm9yIE1TLVdpbmRvd3MKKyAg
KGRlZmluZS14ayB4ay1rcC1lbnRlciAgICAjeGZmOGQgbmlsKSA7OyBYS19LUF9FbnRlciA/
Pz8KKyAgKGRlZmluZS14ayB4ay1rcC1tdWx0aXBseSAjeGZmYWEgbmlsKSA7OyBYS19LUF9N
dWx0aXBseSA/Pz8KKyAgKGRlZmluZS14ayB4ay1rcC1hZGQgICAgICAjeGZmYWIgbmlsKSA7
OyBYS19LUF9BZGQgPz8/CisgIChkZWZpbmUteGsgeGsta3Atc3VidHJhY3QgI3hmZmFkIG5p
bCkgOzsgWEtfS1BfU3VidHJhY3QgPz8/CisgIChkZWZpbmUteGsgeGsta3AtZGVjaW1hbCAg
I3hmZmFlIG5pbCkgOzsgWEtfS1BfRGVjaW1hbCA/Pz8KKyAgKGRlZmluZS14ayB4ay1rcC1k
aXZpZGUgICAjeGZmYWYgbmlsKSA7OyBYS19LUF9EaXZpZGUgPz8/CisgIChkZWZpbmUteGsg
eGsta3AtMCAgICAgICAgI3hmZmIwICN4NjApIDs7IFhLX0tQXzAgVktfTlVNUEFEMAorICAo
ZGVmaW5lLXhrIHhrLWtwLTEgICAgICAgICN4ZmZiMSAjeDYxKSA7OyBYS19LUF8xIFZLX05V
TVBBRDEKKyAgKGRlZmluZS14ayB4ay1rcC0yICAgICAgICAjeGZmYjIgI3g2MikgOzsgWEtf
S1BfMiBWS19OVU1QQUQyCisgIChkZWZpbmUteGsgeGsta3AtMyAgICAgICAgI3hmZmIzICN4
NjMpIDs7IFhLX0tQXzMgVktfTlVNUEFEMworICAoZGVmaW5lLXhrIHhrLWtwLTQgICAgICAg
ICN4ZmZiNCAjeDY0KSA7OyBYS19LUF80IFZLX05VTVBBRDQKKyAgKGRlZmluZS14ayB4ay1r
cC01ICAgICAgICAjeGZmYjUgI3g2NSkgOzsgWEtfS1BfNSBWS19OVU1QQUQ1CisgIChkZWZp
bmUteGsgeGsta3AtNiAgICAgICAgI3hmZmI2ICN4NjYpIDs7IFhLX0tQXzYgVktfTlVNUEFE
NgorICAoZGVmaW5lLXhrIHhrLWtwLTcgICAgICAgICN4ZmZiNyAjeDY3KSA7OyBYS19LUF83
IFZLX05VTVBBRDcKKyAgKGRlZmluZS14ayB4ay1rcC04ICAgICAgICAjeGZmYjggI3g2OCkg
OzsgWEtfS1BfOCBWS19OVU1QQUQ4CisgIChkZWZpbmUteGsgeGsta3AtOSAgICAgICAgI3hm
ZmI5ICN4NjkpIDs7IFhLX0tQXzkgVktfTlVNUEFEOQorCisgIDs7IEZ1bmN0aW9uIGtleXMK
KyAgKGRlZmluZS14ayB4ay1mMSAgICAgICAgICAjeGZmYmUgI3g3MCkgOzsgWEtfRjEgVktf
RjEKKyAgKGRlZmluZS14ayB4ay1mMiAgICAgICAgICAjeGZmYmYgI3g3MSkgOzsgWEtfRjIg
VktfRjIKKyAgKGRlZmluZS14ayB4ay1mMyAgICAgICAgICAjeGZmYzAgI3g3MikgOzsgWEtf
RjMgVktfRjMKKyAgKGRlZmluZS14ayB4ay1mNCAgICAgICAgICAjeGZmYzEgI3g3MykgOzsg
WEtfRjQgVktfRjQKKyAgKGRlZmluZS14ayB4ay1mNSAgICAgICAgICAjeGZmYzIgI3g3NCkg
OzsgWEtfRjUgVktfRjUKKyAgKGRlZmluZS14ayB4ay1mNiAgICAgICAgICAjeGZmYzMgI3g3
NSkgOzsgWEtfRjYgVktfRjYKKyAgKGRlZmluZS14ayB4ay1mNyAgICAgICAgICAjeGZmYzQg
I3g3NikgOzsgWEtfRjcgVktfRjcKKyAgKGRlZmluZS14ayB4ay1mOCAgICAgICAgICAjeGZm
YzUgI3g3NykgOzsgWEtfRjggVktfRjgKKyAgKGRlZmluZS14ayB4ay1mOSAgICAgICAgICAj
eGZmYzYgI3g3OCkgOzsgWEtfRjkgVktfRjkKKyAgKGRlZmluZS14ayB4ay1mMTAgICAgICAg
ICAjeGZmYzcgI3g3OSkgOzsgWEtfRjEwIFZLX0YxMAorICAoZGVmaW5lLXhrIHhrLWYxMSAg
ICAgICAgICN4ZmZjOCAjeDdBKSA7OyBYS19GMTEgVktfRjExCisgIChkZWZpbmUteGsgeGst
ZjEyICAgICAgICAgI3hmZmM5ICN4N0IpIDs7IFhLX0YxMiBWS19GMTIKKyAgKGRlZmluZS14
ayB4ay1mMTMgICAgICAgICAjeGZmY2EgI3g3QykgOzsgWEtfRjEzIFZLX0YxMworICAoZGVm
aW5lLXhrIHhrLWYxNCAgICAgICAgICN4ZmZjYiAjeDdEKSA7OyBYS19GMTQgVktfRjE0Cisg
IChkZWZpbmUteGsgeGstZjE1ICAgICAgICAgI3hmZmNjICN4N0UpIDs7IFhLX0YxNSBWS19G
MTUKKyAgKGRlZmluZS14ayB4ay1mMTYgICAgICAgICAjeGZmY2QgI3g3RikgOzsgWEtfRjE2
IFZLX0YxNgorICAoZGVmaW5lLXhrIHhrLWYxNyAgICAgICAgICN4ZmZjZSAjeDgwKSA7OyBY
S19GMTcgVktfRjE3CisgIChkZWZpbmUteGsgeGstZjE4ICAgICAgICAgI3hmZmNmICN4ODEp
IDs7IFhLX0YxOCBWS19GMTgKKyAgKGRlZmluZS14ayB4ay1mMTkgICAgICAgICAjeGZmZDAg
I3g4MikgOzsgWEtfRjE5IFZLX0YxOQorICAoZGVmaW5lLXhrIHhrLWYyMCAgICAgICAgICN4
ZmZkMSAjeDgzKSA7OyBYS19GMjAgVktfRjIwCisgIChkZWZpbmUteGsgeGstZjIxICAgICAg
ICAgI3hmZmQyICN4ODQpIDs7IFhLX0YyMSBWS19GMjEKKyAgKGRlZmluZS14ayB4ay1mMjIg
ICAgICAgICAjeGZmZDMgI3g4NSkgOzsgWEtfRjIyIFZLX0YyMgorICAoZGVmaW5lLXhrIHhr
LWYyMyAgICAgICAgICN4ZmZkNCAjeDg2KSA7OyBYS19GMjMgVktfRjIzCisgIChkZWZpbmUt
eGsgeGstZjI0ICAgICAgICAgI3hmZmQ1ICN4ODcpIDs7IFhLX0YyNCBWS19GMjQKKworICA7
OyBNb2RpZmllciBrZXlzCisgIChkZWZpbmUteGsgeGstc2hpZnQtbCAgICAgI3hmZmUxICN4
QTApIDs7IFhLX1NoaWZ0X0wgVktfTFNISUZUCisgIChkZWZpbmUteGsgeGstc2hpZnQtciAg
ICAgI3hmZmUyICN4QTEpIDs7IFhLX1NoaWZ0X1IgVktfUlNISUZUCisgIChkZWZpbmUteGsg
eGstY29udHJvbC1sICAgI3hmZmUzICN4QTIpIDs7IFhLX0NvbnRyb2xfTCBWS19MQ09OVFJP
TAorICAoZGVmaW5lLXhrIHhrLWNvbnRyb2wtciAgICN4ZmZlNCAjeEEzKSA7OyBYS19Db250
cm9sX1IgVktfUkNPTlRST0wKKyAgKGRlZmluZS14ayB4ay1jYXBzLWxvY2sgICAjeGZmZTUg
I3gxNCkgOzsgWEtfQ2Fwc19Mb2NrIFZLX0NBUElUQUwKKyAgKGRlZmluZS14ayB4ay1tZXRh
bC1sICAgICAjeGZmZTcgbmlsKSA7OyBYS19NZXRhX0wKKyAgKGRlZmluZS14ayB4ay1tZXRh
bC10ICAgICAjeGZmZWUgbmlsKSA7OyBYS19NZXRhX1IKKyAgKGRlZmluZS14ayB4ay1hbHQt
bCAgICAgICAjeGZmZTkgI3hBNCkgOzsgWEtfQWx0X0wgVktfTE1FTlUKKyAgKGRlZmluZS14
ayB4ay1hbHQtciAgICAgICAjeGZmZWEgI3hBNSkgOzsgWEtfQWx0X1IgVktfUk1FTlUKKyAg
KGRlZmluZS14ayB4ay1zdXBlci1sICAgICAjeGZmZWIgbmlsKSA7OyBYS19TdXBlcl9MCisg
IChkZWZpbmUteGsgeGstc3VwZXItciAgICAgI3hmZmVjIG5pbCkgOzsgWEtfU3VwZXJfUgor
ICAoZGVmaW5lLXhrIHhrLWh5cGVyLWwgICAgICN4ZmZlZCBuaWwpIDs7IFhLX0h5cGVyX0wK
KyAgKGRlZmluZS14ayB4ay1oeXBlci1yICAgICAjeGZmZWUgbmlsKSA7OyBYS19IeXBlcl9S
CisKKyAgOzsgTGF0aW4gMQorICA7OyBGb3IgbnVtYmVycyBhbmQgbGV0dGVycywgTVMtV2lu
ZG93cyBkb2VzIG5vdCBkZWZpbmUgY29uc3RhbnQgbmFtZXMuCisgIDs7IFgxMSBkZWZpbmVz
IGRpc3RpbmN0IGtleXN5bXMgZm9yIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlCisgIDs7IGxl
dHRlcnMuICBXZSB1c2Ugb25seSB0aGUgdXBwZXJjYXNlIG9uZXMuICBFdmVudHMgd2l0aCBs
b3dlcmNhc2UKKyAgOzsgbGV0dGVycyBhcmUgY29udmVydGVkIHRvIHVwcGVyY2FzZS4KKyAg
KGRlZmluZS14ayB4ay1zcGFjZSAgICAgICAjeDAwMjAgI3gyMCkgOzsgWEtfc3BhY2UgVktf
U1BBQ0UKKyAgKGRlZmluZS14ayB4ay0wICAgICAgICAgICAjeDAwMzAgI3gzMCkgOzsgWEtf
MAorICAoZGVmaW5lLXhrIHhrLTEgICAgICAgICAgICN4MDAzMSAjeDMxKSA7OyBYS18xCisg
IChkZWZpbmUteGsgeGstMiAgICAgICAgICAgI3gwMDMyICN4MzIpIDs7IFhLXzIKKyAgKGRl
ZmluZS14ayB4ay0zICAgICAgICAgICAjeDAwMzMgI3gzMykgOzsgWEtfMworICAoZGVmaW5l
LXhrIHhrLTQgICAgICAgICAgICN4MDAzNCAjeDM0KSA7OyBYS180CisgIChkZWZpbmUteGsg
eGstNSAgICAgICAgICAgI3gwMDM1ICN4MzUpIDs7IFhLXzUKKyAgKGRlZmluZS14ayB4ay02
ICAgICAgICAgICAjeDAwMzYgI3gzNikgOzsgWEtfNgorICAoZGVmaW5lLXhrIHhrLTcgICAg
ICAgICAgICN4MDAzNyAjeDM3KSA7OyBYS183CisgIChkZWZpbmUteGsgeGstOCAgICAgICAg
ICAgI3gwMDM4ICN4MzgpIDs7IFhLXzgKKyAgKGRlZmluZS14ayB4ay05ICAgICAgICAgICAj
eDAwMzkgI3gzOSkgOzsgWEtfOQorICAoZGVmaW5lLXhrIHhrLWEgICAgICAgICAgICN4MDA0
MSAjeDQxKSA7OyBYS19BCisgIChkZWZpbmUteGsgeGstYiAgICAgICAgICAgI3gwMDQyICN4
NDIpIDs7IFhLX0IKKyAgKGRlZmluZS14ayB4ay1jICAgICAgICAgICAjeDAwNDMgI3g0Mykg
OzsgWEtfQworICAoZGVmaW5lLXhrIHhrLWQgICAgICAgICAgICN4MDA0NCAjeDQ0KSA7OyBY
S19ECisgIChkZWZpbmUteGsgeGstZSAgICAgICAgICAgI3gwMDQ1ICN4NDUpIDs7IFhLX0UK
KyAgKGRlZmluZS14ayB4ay1mICAgICAgICAgICAjeDAwNDYgI3g0NikgOzsgWEtfRgorICAo
ZGVmaW5lLXhrIHhrLWcgICAgICAgICAgICN4MDA0NyAjeDQ3KSA7OyBYS19HCisgIChkZWZp
bmUteGsgeGstaCAgICAgICAgICAgI3gwMDQ4ICN4NDgpIDs7IFhLX0gKKyAgKGRlZmluZS14
ayB4ay1pICAgICAgICAgICAjeDAwNDkgI3g0OSkgOzsgWEtfSQorICAoZGVmaW5lLXhrIHhr
LWogICAgICAgICAgICN4MDA0QSAjeDRBKSA7OyBYS19KCisgIChkZWZpbmUteGsgeGstayAg
ICAgICAgICAgI3gwMDRCICN4NEIpIDs7IFhLX0sKKyAgKGRlZmluZS14ayB4ay1sICAgICAg
ICAgICAjeDAwNEMgI3g0QykgOzsgWEtfTAorICAoZGVmaW5lLXhrIHhrLW0gICAgICAgICAg
ICN4MDA0RCAjeDREKSA7OyBYS19NCisgIChkZWZpbmUteGsgeGstbiAgICAgICAgICAgI3gw
MDRFICN4NEUpIDs7IFhLX04KKyAgKGRlZmluZS14ayB4ay1vICAgICAgICAgICAjeDAwNEYg
I3g0RikgOzsgWEtfTworICAoZGVmaW5lLXhrIHhrLXAgICAgICAgICAgICN4MDA1MCAjeDUw
KSA7OyBYS19QCisgIChkZWZpbmUteGsgeGstcSAgICAgICAgICAgI3gwMDUxICN4NTEpIDs7
IFhLX1EKKyAgKGRlZmluZS14ayB4ay1yICAgICAgICAgICAjeDAwNTIgI3g1MikgOzsgWEtf
UgorICAoZGVmaW5lLXhrIHhrLXMgICAgICAgICAgICN4MDA1MyAjeDUzKSA7OyBYS19TCisg
IChkZWZpbmUteGsgeGstdCAgICAgICAgICAgI3gwMDU0ICN4NTQpIDs7IFhLX1QKKyAgKGRl
ZmluZS14ayB4ay11ICAgICAgICAgICAjeDAwNTUgI3g1NSkgOzsgWEtfVQorICAoZGVmaW5l
LXhrIHhrLXYgICAgICAgICAgICN4MDA1NiAjeDU2KSA7OyBYS19WCisgIChkZWZpbmUteGsg
eGstdyAgICAgICAgICAgI3gwMDU3ICN4NTcpIDs7IFhLX1cKKyAgKGRlZmluZS14ayB4ay14
ICAgICAgICAgICAjeDAwNTggI3g1OCkgOzsgWEtfWAorICAoZGVmaW5lLXhrIHhrLXkgICAg
ICAgICAgICN4MDA1OSAjeDU5KSA7OyBYS19ZCisgIChkZWZpbmUteGsgeGsteiAgICAgICAg
ICAgI3gwMDVBICN4NUEpKTs7IFhLX1oKKworKGRlZnVuIGxsay1pbml0ICgpCisgICJJbml0
aWFsaXplIGxvdyBsZXZlbCBrZXkgZXZlbnRzLgorCitGaWxscyB0aGUgYGxsay1rZXlzeW1z
JyBsaXN0LCBhbmQgYmluZHMgdGhlIGBsb3ctbGV2ZWwta2V5JyBldmVudAordG8gdGhlIGBs
bGstaGFuZGxlJyBmdW5jdGlvbi4gIFJlc2V0cyB0aGUgYGxsay1iaW5kaW5ncycgbGlzdC4K
K0Jlc2lkZXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB5b3UgbmVlZCB0byBzZXQgYGVuYWJs
ZS1sb3ctbGV2ZWwta2V5LWV2ZW50cycKK3RvIGEgbm9uLW5pbCB2YWx1ZS4iCisgIChpbnRl
cmFjdGl2ZSkKKyAgKGxsay1kZWZpbmUta2V5c3ltcykKKyAgKGRlZmluZS1rZXkgc3BlY2lh
bC1ldmVudC1tYXAgW2xvdy1sZXZlbC1rZXldICdsbGstaGFuZGxlKQorICAoc2V0cSBsbGst
YmluZGluZ3MgbmlsKSkKKworKGRlZnN1YnN0IGV2ZW50LWlzLWtleS1wcmVzcyAoZXZlbnQp
CisgICJSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBJUy1LRVktUFJFU1MgZmllbGQgb2YgdGhl
IEVWRU5ULCBhIGxvdyBsZXZlbCBrZXkgZXZlbnQuIgorICAoZGVjbGFyZSAoc2lkZS1lZmZl
Y3QtZnJlZSB0KSkKKyAgKGlmIChjb25zcCBldmVudCkgKG50aCAxIGV2ZW50KSkpCisKKyhk
ZWZzdWJzdCBldmVudC1rZXlzeW0gKGV2ZW50KQorICAiUmV0dXJuIHRoZSB2YWx1ZSBvZiB0
aGUgS0VZIGZpZWxkIG9mIHRoZSBFVkVOVCwgYSBsb3cgbGV2ZWwga2V5IGV2ZW50LiIKKyAg
KGRlY2xhcmUgKHNpZGUtZWZmZWN0LWZyZWUgdCkpCisgIChpZiAoY29uc3AgZXZlbnQpIChu
dGggMiBldmVudCkpKQorCisoZGVmc3Vic3QgZXZlbnQtbW9kaWZpZXIgKGV2ZW50KQorICAi
UmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgTU9ESUZJRVIgZmllbGQgb2YgdGhlIEVWRU5ULCBh
IGxvdyBsZXZlbCBrZXkgZXZlbnQuIgorICAoZGVjbGFyZSAoc2lkZS1lZmZlY3QtZnJlZSB0
KSkKKyAgKGlmIChjb25zcCBldmVudCkgKG50aCAzIGV2ZW50KSkpCisKKyhkZWZzdWJzdCBl
dmVudC10aW1lIChldmVudCkKKyAgIlJldHVybiB0aGUgdmFsdWUgb2YgdGhlIFRJTUUgZmll
bGQgb2YgdGhlIEVWRU5ULCBhIGxvdyBsZXZlbCBrZXkgZXZlbnQuIgorICAoZGVjbGFyZSAo
c2lkZS1lZmZlY3QtZnJlZSB0KSkKKyAgKGlmIChjb25zcCBldmVudCkgKG50aCA0IGV2ZW50
KSkpCisKKzs7IEZvciBleGFtcGxlOgorOzsgQmluZCBrZXkgdGFwIHRvIGNvbW1hbmQKKzs7
ICAgIChsbGstYmluZCAndGFwICd4ay1zaGlmdC1sICdkZWxldGUtb3RoZXItd2luZG93cykK
Kzs7IEJpbmQgbW9kaWZpZXIgdGFwIHRvIGNvbW1hbmQKKzs7ICAgICAobGxrLWJpbmQgJ3Rh
cCAnc2hpZnQgJ2RlbGV0ZS1vdGhlci13aW5kb3dzKQorOzsgQmluZCB0YXAgdG8gaHlwZXIg
bW9kaWZpZXIKKzs7ICAgICAgKGxsay1iaW5kICd0YXAgJ3hrLXNoaWZ0LXIgKGxhbWJkYSAo
KQorOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZSAiSC0uLi4iKQor
OzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSB1bnJlYWQtY29tbWFuZC1l
dmVudHMKKzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZCAo
ZXZlbnQtYXBwbHktaHlwZXItbW9kaWZpZXIgbmlsKSBuaWwpKSkpCis7OyBDYW4gYmluZCB0
byBhIGNvbW1hbmQgb3IgZnVuY3Rpb24KKyhkZWZ1biBsbGstYmluZCAoYWN0aW9uIGtleSBm
dW5jdGlvbikKKyAgIkJpbmQgYSBjb21tYW5kIG9yIGZ1bmN0aW9uIHRvIGEgbG93IGxldmVs
IGtleSBldmVudC4KKworVGhlIG9ubHkgYWN0aW9uIHN1cHBvcnRlZCBjdXJyZW50bHkgaXMg
YHRhcCcuICBUaGUga2V5IGNhbiBiZSBhIGtleXN5bQorc3ltYm9sLCBvciBhIG1vZGlmaWVy
IHN5bWJvbCAoc2hpZnQsIGNvbnRyb2wsIGFsdCwgbWV0YSwgaHlwZXIsIHN1cGVyKS4KK0lm
IHRoZXJlIGlzIG5vIGtleXN5bSBzeW1ib2wgZm9yIGEga2V5LCB1c2UgdGhlIGtleXN5bSBu
dW1iZXIuIgorICAocHVzaCAobGlzdCBhY3Rpb24ga2V5IGZ1bmN0aW9uKSBsbGstYmluZGlu
Z3MpKQorCis7OyBXZSBzdG9yZSB0aGUgbGFzdCBldmVudHMgKGtleS9tb2RpZmllciBpcy1w
cmVzcyB0aW1lc3RhbXApIGhlcmUgdG8KKzs7IHRlc3QgZm9yIG11bHRpdGFwLgorKGRlZnZh
ciBsbGstZXZlbnRzIG5pbAorICAiSW50ZXJuYWwgdmFyaWFibGUgZm9yIGRldGVjdGluZyB0
YXBzLiIpCisKKzs7IElmIHBvc2l0aXZlLCByZXR1cm4ga2V5ICh4ay1zaGlmdC1sLCBldGMp
IGVsc2UgcmV0dXJuIG5pbC4KKyhkZWZ1biBsbGstZGV0ZWN0LW4tdGFwIChuIHRpbWVvdXQp
CisgICJJbnRlcm5hbCBmdW5jdGlvbiB0byBkZXRlY3Qgbi10YXAga2V5cy4iCisgIChsZXQg
KGtleQorICAgICAgICAoaXMtcHJlc3MgKGV2ZW50LWlzLWtleS1wcmVzcyBsYXN0LWlucHV0
LWV2ZW50KSkKKyAgICAgICAgOzsgY29udmVydCBudW1iZXIgdG8ga2V5c3ltIHN5bWJvbAor
ICAgICAgICAoa2V5c3ltIChjZHIgKGFzc29jIChldmVudC1rZXlzeW0gbGFzdC1pbnB1dC1l
dmVudCkgbGxrLWtleXN5bXMpKSkKKyAgICAgICAgKHRpbWVzdGFtcCAoZXZlbnQtdGltZSBs
YXN0LWlucHV0LWV2ZW50KSkKKyAgICAgICAgKG1vZGlmaWVyIChldmVudC1tb2RpZmllciBs
YXN0LWlucHV0LWV2ZW50KSkpCisKKyAgICA7OyBpZiBlaHRlIGlzIG5vIHN5bWJvbCBmb3Ig
dGhpcyBrZXksIHVzZSBpdHMga2V5c3ltIG51bWJlcgorICAgICh1bmxlc3Mga2V5c3ltIChz
ZXRxIGtleXN5bSAoZXZlbnQta2V5c3ltIGxhc3QtaW5wdXQtZXZlbnQpKSkKKworICAgIDs7
IGxvb2sgaW4gbGxrLXRhcC1rZXlzIGZvciB0aGUga2V5LCB0aGVuIHRoZSBtb2RpZmllcgor
ICAgIChpZiAobWVtYmVyIGtleXN5bSBsbGstdGFwLWtleXMpCisgICAgICAgIChzZXRxIGtl
eSBrZXlzeW0pCisgICAgICAoaWYgKG1lbWJlciBtb2RpZmllciBsbGstdGFwLWtleXMpCisg
ICAgICAgICAgKHNldHEga2V5IG1vZGlmaWVyKSkpCisKKyAgICAoaWYgKG5vdCBrZXkpCisg
ICAgICAgIDs7IEtleSBub3QgaW4gdGFwIGxpc3QsIGNsZWFyIGhpc3RvcnkKKyAgICAgICAg
KHNldHEgbGxrLWV2ZW50cyBuaWwpCisgICAgICA7OyBDbGVhciBpdCBhbHNvIGlmIHRoZSBm
aXJzdCBlbGVtZW50IGlzIGZyb20gYSBkaWZmZXJlbnQga2V5CisgICAgICAoYW5kIGxsay1l
dmVudHMKKyAgICAgICAgICAgKG5vdCAoZXF1YWwgKGNhciAoY2FyIGxsay1ldmVudHMpKSBr
ZXkpKQorICAgICAgICAgICAoc2V0cSBsbGstZXZlbnRzIG5pbCkpCisgICAgICAocHVzaCAo
bGlzdCBrZXkgaXMtcHJlc3MgdGltZXN0YW1wKSBsbGstZXZlbnRzKQorICAgICAgOzsgT25s
eSBjYXJlIGFib3V0IGxhc3QgMnhOIGV2ZW50cworICAgICAgKG50YWtlICgqIDIgbikgbGxr
LWV2ZW50cykKKyAgICAgIDs7IElmIHdlIGhhdmU6CisgICAgICA7OyAtIEV4YWN0bHkgMiAq
IG4gZXZlbnRzLgorICAgICAgOzsgLSBkb3duLCB1cCwgZG93biwgdXAsIC4uLgorICAgICAg
OzsgLSBub3QgdHdvIG11Y2ggdGltZSBiZXR3ZWVuIGZpcnN0IGFuZCBsYXN0CisgICAgICAo
YW5kIChlcSAoKiAyIG4pIChsZW5ndGggbGxrLWV2ZW50cykpCisgICAgICAgICAgIChjbC1l
dmVyeSAnZXEKKyAgICAgICAgICAgICAgICAgICAgIChudGFrZSAoKiAyIG4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGxpc3QgbmlsIHQgbmlsIHQgbmlsIHQgbmlsIHQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgdCBuaWwgdCBuaWwgdCBuaWwg
dCkpCisgICAgICAgICAgICAgICAgICAgICAobWFwY2FyICdjbC1zZWNvbmQgbGxrLWV2ZW50
cykpCisgICAgICAgICAgICg8ICgtIChjbC10aGlyZCAoY2wtZmlyc3QgbGxrLWV2ZW50cykp
CisgICAgICAgICAgICAgICAgIChjbC10aGlyZCAoY2FyIChsYXN0IGxsay1ldmVudHMpKSkp
CisgICAgICAgICAgICAgIHRpbWVvdXQpCisgICAgICAgICAgIChwcm9nbgorICAgICAgICAg
ICAgIChzZXRxIGxsay1ldmVudHMgbmlsKQorICAgICAgICAgICAgIGtleSkpKSkpCisKKyhk
ZWZ1biBkZXNjcmliZS1sb3ctbGV2ZWwta2V5ICgpCisgICJXYWl0IGZvciBrZXkgcHJlc3Mg
YW5kIGRlc2NyaWJlIHRoZSBsb3cgbGV2ZWwga2V5IGV2ZW50IGl0IGdlbmVyYXRlcy4iCisg
IChpbnRlcmFjdGl2ZSkKKyAgKHNldHEgbGxrLWRlc2NyaWJlLW5leHQtcHJlc3MgdCkpCisK
KyhkZWZ1biBsbGstc2hvdy1ldmVudC1kZXNjcmlwdGlvbiAoKQorICAiU2hvdyBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgbGFzdCBsb3cgbGV2ZWwga2V5IGV2ZW50LiIKKyAgKHNldHEgbGxr
LWRlc2NyaWJlLW5leHQtcHJlc3MgbmlsKQorICAod2l0aC1oZWxwLXdpbmRvdyAoaGVscC1i
dWZmZXIpCisgICAgKGluc2VydCAiXG4iKQorICAgIChsZXQqICgoeGsgKGV2ZW50LWtleXN5
bSBsYXN0LWlucHV0LWV2ZW50KSkKKyAgICAgICAgICAgKHN5bSAoYXNzb2MgeGsgbGxrLWtl
eXN5bXMpKSkKKyAgICAgIChpbnNlcnQgKGZvcm1hdCAiS2V5c3ltIG51bWJlcjogJWQgKCN4
JVgpLFxuIiB4ayB4aykpCisgICAgICAoaWYgc3ltCisgICAgICAgICAgKGluc2VydCAoZm9y
bWF0ICJ3aGljaCBjb3JyZXNwb25kcyB0byBuYW1lZCBrZXkgJXMuXG5cbiIgKGNkciBzeW0p
KSkKKyAgICAgICAgKGluc2VydCAid2hpY2ggZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkg
a25vd24gbmFtZWQga2V5LlxuXG4iKSkKKyAgICAgIChpZiAoZXZlbnQtbW9kaWZpZXIgbGFz
dC1pbnB1dC1ldmVudCkKKyAgICAgICAgICAoaW5zZXJ0IChmb3JtYXQgIlRoaXMga2V5IGNv
cnJlc3BvbmRzIHRvIHRoZSAlcyBtb2RpZmllci5cblxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZXZlbnQtbW9kaWZpZXIgbGFzdC1pbnB1dC1ldmVudCkpKQorICAgICAgICAo
aW5zZXJ0ICJUaGlzIGtleSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgbW9kaWZpZXIuXG5c
biIpKQorICAgICAgKGluc2VydCAiU2VlIHRoZSB2YWx1ZSBvZiB0aGUgYGxsay1rZXlzeW1z
JyB2YXJpYWJsZSBmb3IgYSBsaXN0IG9mIGtub3duIGtleXMuXG4iKSkpKQorCisoZGVmdW4g
bGxrLWhhbmRsZSAoKQorICAiSW50ZXJuYWwgZnVuY3Rpb24gdG8gaGFuZGxlIGxvdyBsZXZl
bCBrZXkgZXZlbnRzLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKGFuZCAoZXZlbnQtaXMt
a2V5LXByZXNzIGxhc3QtaW5wdXQtZXZlbnQpCisgICAgICAgICAgIGxsay1kZXNjcmliZS1u
ZXh0LXByZXNzKQorICAgICAgKGxsay1zaG93LWV2ZW50LWRlc2NyaXB0aW9uKQorICAgIChs
ZXQgKCh0YXAta2V5IChsbGstZGV0ZWN0LW4tdGFwCisgICAgICAgICAgICAgICAgICAgIGxs
ay10YXAtY291bnQKKyAgICAgICAgICAgICAgICAgICAgbGxrLXRhcC10aW1lb3V0KSkpCisg
ICAgICAod2hlbiB0YXAta2V5CisgICAgICAgIChsZXQgKChmdW5jIChjbC10aGlyZAorICAg
ICAgICAgICAgICAgICAgICAgKHNlcS1maW5kCisgICAgICAgICAgICAgICAgICAgICAgKGxh
bWJkYSAoYikKKyAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGVxIChjbC1maXJzdCBi
KSAndGFwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXEgKGNsLXNlY29uZCBi
KSB0YXAta2V5KSkpCisgICAgICAgICAgICAgICAgICAgICAgbGxrLWJpbmRpbmdzKSkpKQor
ICAgICAgICAgIChjb25kCisgICAgICAgICAgICgoY29tbWFuZHAgZnVuYykgKGNhbGwtaW50
ZXJhY3RpdmVseSBmdW5jKSkKKyAgICAgICAgICAgKChmdW5jdGlvbnAgZnVuYykgKGZ1bmNh
bGwgZnVuYykpKSkpKSkpCmRpZmYgLS1naXQgYS9zcmMvZ3RrdXRpbC5jIGIvc3JjL2d0a3V0
aWwuYwppbmRleCBkNTc2MjdmMTUyZi4uODZkNDMyMWNmMzUgMTAwNjQ0Ci0tLSBhL3NyYy9n
dGt1dGlsLmMKKysrIGIvc3JjL2d0a3V0aWwuYwpAQCAtOTgsNiArOTgsNyBAQCBHX0RFRklO
RV9UWVBFIChFbWFjc01lbnVCYXIsIGVtYWNzX21lbnVfYmFyLCBHVEtfVFlQRV9NRU5VX0JB
UikKIHN0YXRpYyB2b2lkIHhnX2ltX2NvbnRleHRfcHJlZWRpdF9jaGFuZ2VkIChHdGtJTUNv
bnRleHQgKiwgZ3BvaW50ZXIpOwogc3RhdGljIHZvaWQgeGdfaW1fY29udGV4dF9wcmVlZGl0
X2VuZCAoR3RrSU1Db250ZXh0ICosIGdwb2ludGVyKTsKIHN0YXRpYyBib29sIHhnX3dpZGdl
dF9rZXlfcHJlc3NfZXZlbnRfY2IgKEd0a1dpZGdldCAqLCBHZGtFdmVudCAqLCBncG9pbnRl
cik7CitzdGF0aWMgYm9vbCB4Z193aWRnZXRfa2V5X3JlbGVhc2VfZXZlbnRfY2IgKEd0a1dp
ZGdldCAqLCBHZGtFdmVudCAqLCBncG9pbnRlcik7CiAjZW5kaWYKIAogI2lmIEdUS19DSEVD
S19WRVJTSU9OICgzLCAxMCwgMCkKQEAgLTE3NDksNiArMTc1MCwxMiBAQCB4Z19jcmVhdGVf
ZnJhbWVfd2lkZ2V0cyAoc3RydWN0IGZyYW1lICpmKQogICBnX3NpZ25hbF9jb25uZWN0IChH
X09CSkVDVCAod2ZpeGVkKSwgImtleS1wcmVzcy1ldmVudCIsCiAJCSAgICBHX0NBTExCQUNL
ICh4Z193aWRnZXRfa2V5X3ByZXNzX2V2ZW50X2NiKSwKIAkJICAgIE5VTEwpOworCisgIGdf
c2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3Zml4ZWQpLCAia2V5LXJlbGVhc2UtZXZlbnQi
LAorCQkgICAgR19DQUxMQkFDSyAoeGdfd2lkZ2V0X2tleV9yZWxlYXNlX2V2ZW50X2NiKSwK
KwkJICAgIE5VTEwpOworCisKICNlbmRpZgogCiAgIHsKQEAgLTYzNzYsNiArNjM4Myw1MyBA
QCB4Z19pbV9jb250ZXh0X3ByZWVkaXRfZW5kIChHdGtJTUNvbnRleHQgKmltYywgZ3BvaW50
ZXIgdXNlcl9kYXRhKQogICBrYmRfYnVmZmVyX3N0b3JlX2V2ZW50ICgmaW5ldik7CiB9CiAK
KyNpZm5kZWYgSEFWRV9YSU5QVVQyCitzdGF0aWMgdm9pZAoreGdfbWF5YmVfc2VuZF9sb3df
bGV2ZWxfa2V5X2V2ZW50IChzdHJ1Y3QgZnJhbWUgKmYsCisJCQkJICAgR2RrRXZlbnQgKnhl
dikKK3sKKyAgR2RrRXZlbnRLZXkgeGtleSA9IHhldi0+a2V5OworICBib29sIGlzX3ByZXNz
OworICBMaXNwX09iamVjdCBrZXksIG1vZGlmaWVyOworICB1bmlvbiBidWZmZXJlZF9pbnB1
dF9ldmVudCBpbmV2OworCisgIGlmIChOSUxQIChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZl
bnRzKSkKKyAgICByZXR1cm47CisKKyAgc3dpdGNoICh4ZXYtPnR5cGUpCisgICAgeworICAg
IGNhc2UgR0RLX0tFWV9QUkVTUzoKKyAgICAgIGlzX3ByZXNzID0gdHJ1ZTsKKyAgICAgIGJy
ZWFrOworICAgIGNhc2UgR0RLX0tFWV9SRUxFQVNFOgorICAgICAgaXNfcHJlc3MgPSBmYWxz
ZTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm47CisgICAgfQor
CisgIG1vZGlmaWVyID0geF9nZXRfbW9kaWZpZXJfZm9yX2tleWNvZGUgKEZSQU1FX09VVFBV
VF9EQVRBIChmKS0+ZGlzcGxheV9pbmZvLAorCQkJCQkgeGV2LT5rZXkuaGFyZHdhcmVfa2V5
Y29kZSk7CisKKyAgaW50IGtleXN5bSA9IHhrZXkua2V5dmFsOworCisgIGlmIChrZXlzeW0g
Pj0gR0RLX0tFWV9hICYmIGtleXN5bSA8PSBHREtfS0VZX3opCisgICAga2V5c3ltIC09IEdE
S19LRVlfYSAtIEdES19LRVlfQTsKKworICBpZiAoIWtiZF9sb3dfbGV2ZWxfa2V5X2lzX2Vu
YWJsZWQgKGtleXN5bSwgbW9kaWZpZXIpKQorICAgIHJldHVybjsKKworICBrZXkgPSBtYWtl
X2ZpeG51bSAoa2V5c3ltKTsKKworICBFVkVOVF9JTklUIChpbmV2LmllKTsKKyAgWFNFVEZS
QU1FIChpbmV2LmllLmZyYW1lX29yX3dpbmRvdywgZik7CisgIGluZXYuaWUua2luZCA9IExP
V19MRVZFTF9LRVlfRVZFTlQ7CisgIGluZXYuaWUudGltZXN0YW1wID0geGtleS50aW1lOwor
ICBpbmV2LmllLmFyZyA9IGxpc3QzIChpc19wcmVzcyA/IFF0IDogUW5pbCwga2V5LCBtb2Rp
Zmllcik7CisgIGtiZF9idWZmZXJfc3RvcmVfYnVmZmVyZWRfZXZlbnQgKCZpbmV2LCAmeGdf
cGVuZGluZ19xdWl0X2V2ZW50KTsKK30KKyNlbmRpZgorCiBzdGF0aWMgYm9vbAogeGdfd2lk
Z2V0X2tleV9wcmVzc19ldmVudF9jYiAoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50ICpl
dmVudCwKIAkJCSAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKQEAgLTY0MDQsNiArNjQ1OCwx
MCBAQCB4Z193aWRnZXRfa2V5X3ByZXNzX2V2ZW50X2NiIChHdGtXaWRnZXQgKndpZGdldCwg
R2RrRXZlbnQgKmV2ZW50LAogICBpZiAoIWYpCiAgICAgcmV0dXJuIHRydWU7CiAKKyNpZm5k
ZWYgSEFWRV9YSU5QVVQyCisgICAgeGdfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50
IChmLCBldmVudCk7CisjZW5kaWYKKwogICBpZiAocG9wdXBfYWN0aXZhdGVkICgpKQogICAg
IHJldHVybiB0cnVlOwogCkBAIC02NTU3LDYgKzY2MTUsMjkgQEAgeGdfd2lkZ2V0X2tleV9w
cmVzc19ldmVudF9jYiAoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50ICpldmVudCwKICAg
cmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sCit4Z193aWRnZXRfa2V5X3JlbGVhc2Vf
ZXZlbnRfY2IgKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCAqZXZlbnQsCisJCQkJZ3Bv
aW50ZXIgdXNlcl9kYXRhKQoreworI2lmbmRlZiBIQVZFX1hJTlBVVDIKKyAgTGlzcF9PYmpl
Y3QgdGFpbCwgdGVtOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBOVUxMOworCisgIEZPUl9FQUNI
X0ZSQU1FICh0YWlsLCB0ZW0pCisgICAgeworICAgICAgaWYgKEZSQU1FX1hfUCAoWEZSQU1F
ICh0ZW0pKQorCSAgJiYgKEZSQU1FX0dUS19XSURHRVQgKFhGUkFNRSAodGVtKSkgPT0gd2lk
Z2V0KSkKKwl7CisJICBmID0gWEZSQU1FICh0ZW0pOworCSAgYnJlYWs7CisJfQorICAgIH0K
KyAgaWYgKGYpCisgICAgeGdfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50IChmLCBl
dmVudCk7CisjZW5kaWYKKyAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wKIHhnX2ZpbHRlcl9r
ZXkgKHN0cnVjdCBmcmFtZSAqZnJhbWUsIFhFdmVudCAqeGtleSkKIHsKZGlmZiAtLWdpdCBh
L3NyYy9rZXlib2FyZC5jIGIvc3JjL2tleWJvYXJkLmMKaW5kZXggNmQyOGRjYTlhZWIuLmVh
YTg0ZjUwMzI3IDEwMDY0NAotLS0gYS9zcmMva2V5Ym9hcmQuYworKysgYi9zcmMva2V5Ym9h
cmQuYwpAQCAtNDI3NCw2ICs0Mjc0LDcgQEAga2JkX2J1ZmZlcl9nZXRfZXZlbnQgKEtCT0FS
RCAqKmticCwKICAgICAgIGNhc2UgQ09ORklHX0NIQU5HRURfRVZFTlQ6CiAgICAgICBjYXNl
IEZPQ1VTX09VVF9FVkVOVDoKICAgICAgIGNhc2UgU0VMRUNUX1dJTkRPV19FVkVOVDoKKyAg
ICAgIGNhc2UgTE9XX0xFVkVMX0tFWV9FVkVOVDoKICAgICAgICAgewogICAgICAgICAgIG9i
aiA9IG1ha2VfbGlzcHlfZXZlbnQgKCZldmVudC0+aWUpOwogICAgICAgICAgIGtiZF9mZXRj
aF9wdHIgPSBuZXh0X2tiZF9ldmVudCAoZXZlbnQpOwpAQCAtNzExOCwxMiArNzExOSw0NyBA
QCBtYWtlX2xpc3B5X2V2ZW50IChzdHJ1Y3QgaW5wdXRfZXZlbnQgKmV2ZW50KQogICAgIGNh
c2UgUFJFRURJVF9URVhUX0VWRU5UOgogICAgICAgcmV0dXJuIGxpc3QyIChRcHJlZWRpdF90
ZXh0LCBldmVudC0+YXJnKTsKIAorICAgIGNhc2UgTE9XX0xFVkVMX0tFWV9FVkVOVDoKKyAg
ICAgIHJldHVybiBsaXN0biAoNiwgUWxvd19sZXZlbF9rZXksCisJCSAgICBYQ0FSIChldmVu
dC0+YXJnKSwgLyogUHJlc3Mgb3IgcmVsZWFzZS4gICovCisJCSAgICBYQ0FSIChYQ0RSIChl
dmVudC0+YXJnKSksIC8qIFRoZSBrZXkgc3ltYm9sLiAgKi8KKwkJICAgIFhDQVIgKFhDRFIg
KFhDRFIgKGV2ZW50LT5hcmcpKSksIC8qIFRoZSBtb2RpZmllci4gICovCisJCSAgICBtYWtl
X2ZpeG51bSAoZXZlbnQtPnRpbWVzdGFtcCksCisJCSAgICBldmVudC0+ZnJhbWVfb3Jfd2lu
ZG93KTsKKwogICAgICAgLyogVGhlICdraW5kJyBmaWVsZCBvZiB0aGUgZXZlbnQgaXMgc29t
ZXRoaW5nIHdlIGRvbid0IHJlY29nbml6ZS4gICovCiAgICAgZGVmYXVsdDoKICAgICAgIGVt
YWNzX2Fib3J0ICgpOwogICAgIH0KIH0KIAorYm9vbAora2JkX2xvd19sZXZlbF9rZXlfaXNf
ZW5hYmxlZCAoaW50IGtleXN5bSwgTGlzcF9PYmplY3QgbW9kaWZpZXIpCit7CisgIGlmIChW
ZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzID09IFF0KQorICAgIHJldHVybiB0cnVlOwor
CisgIGlmIChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzID09IFFuaWwpCisgICAgcmV0
dXJuIGZhbHNlOworCisgIGlmIChGSVhOVU1QIChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZl
bnRzKSkKKyAgICByZXR1cm4ga2V5c3ltID09IFhGSVhOVU0gKFZlbmFibGVfbG93X2xldmVs
X2tleV9ldmVudHMpOworCisgIGlmIChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzID09
IFFtb2RpZmllcnMpCisgICAgcmV0dXJuIG1vZGlmaWVyICE9IFFuaWw7CisKKyAgZm9yIChM
aXNwX09iamVjdCBlID0gVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50czsgQ09OU1AgKGUp
OyBlID0gWENEUiAoZSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3QgYyA9IFhDQVIgKGUp
OworICAgICAgaWYgKEZJWE5VTVAgKGMpICYmIFhGSVhOVU0gKGMpID09IGtleXN5bSkKKwly
ZXR1cm4gdHJ1ZTsKKyAgICAgIGlmIChjID09IFFtb2RpZmllcnMgJiYgbW9kaWZpZXIgIT0g
UW5pbCkKKwlyZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQorCiBz
dGF0aWMgTGlzcF9PYmplY3QKIG1ha2VfbGlzcHlfbW92ZW1lbnQgKHN0cnVjdCBmcmFtZSAq
ZnJhbWUsIExpc3BfT2JqZWN0IGJhcl93aW5kb3csIGVudW0gc2Nyb2xsX2Jhcl9wYXJ0IHBh
cnQsCiAJCSAgICAgTGlzcF9PYmplY3QgeCwgTGlzcF9PYmplY3QgeSwgVGltZSB0KQpAQCAt
MTI5MzEsNiArMTI5NjcsMzMgQEAgc3ltc19vZl9rZXlib2FyZCAodm9pZCkKICAgREVGU1lN
IChRZmlsZV9ub3RpZnksICJmaWxlLW5vdGlmeSIpOwogI2VuZGlmIC8qIFVTRV9GSUxFX05P
VElGWSAqLwogCisKKyAgREVGU1lNIChRbW9kaWZpZXJzLCAibW9kaWZpZXJzIik7CisKKyAg
REVGVkFSX0xJU1AgKCJlbmFibGUtbG93LWxldmVsLWtleS1ldmVudHMiLCBWZW5hYmxlX2xv
d19sZXZlbF9rZXlfZXZlbnRzLAorCSAgICAgICBkb2M6IC8qIElmIG5vbi1uaWwsIHJlY2Vw
dGlvbiBvZiBsb3ctbGV2ZWwga2V5IGV2ZW50cyBpcyBlbmFibGVkLgorCitUaGUgdmFsdWUg
Y29uZmlndXJlcyB0aGUgc2V0IG9mIGtleXMgdGhhdCBhcmUgaGFuZGxlZDoKKworSWYgdCwg
c2VuZCBldmVudHMgZm9yIGFsbCBrZXlzLgorCitJZiBhIG51bWJlciwgc2VuZCBldmVudHMg
Zm9yIHRoZSBjb3JyZXNwb25kaW5nIGtleXN5bS4gIFdoZW4gY2FsbGluZworYGxsay1pbml0
JywgYSBzZXQgb2YgdmFyaWFibGVzIHdpdGggdGhlIHhrLSBwcmVmaXggaXMgaW5pdGlhbGl6
ZWQgd2l0aAordGhlIG51bWVyaWMgdmFsdWVzIGZvciBrZXlzeW1zLiAgQmVjYXVzZSB0aGlz
IG51bWJlciBhcmUgcGxhdGZvcm0KK2RlcGVuZGVudCwgb25seSB0aGUgdmFyaWFibGVzIHNo
b3VsZCBiZSB1c2VkIHRvIHJlZmVyIHRvIGEga2V5LiAgRm9yCitleGFtcGxlLCB0aGUgJ3hr
LWJhY2tzcGFjZScgdmFyaWFibGUgcmVmZXIgdG8gdGhlIGJhY2tzcGFjZSBrZXksIHdpdGgK
K3RoZSBudW1lcmljIHZhbHVlIDB4ZmYwOCBvbiBYLCBhbmQgdGhlIDB4MDggb24gTVMtV2lu
ZG93cy4gIFlvdSBjYW4gc2VlCithbGwgZGVmaW5lZCB2YXJpYWJsZXMgb24gdGhlIHZhcmlh
YmxlIGBsbGsta2V5c3ltcycuCisKK0lmIGEgc3ltYm9sLCBhIHByZWRlZmluZWQgc2V0IG9m
IGtleXMgaXMgc2VsZWN0ZWQuICBUaGUgb25seSBjdXJyZW50bHkKK3ZhbGlkIHN5bWJvbCBp
cyAnbW9kaWZpZXJzLgorCitJZiBhIGxpc3Qgb2YgbnVtYmVycyBhbmQvb3Igc3ltYm9scywg
dGhlIGNvcnJlc3BvbmRpbmcga2V5c3ltcyBhbmQgc2V0cworYXJlIHNlbGVjdGVkLiAgKi8p
OworICBWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzID0gUW5pbDsKKworICBERUZTWU0g
KFFsb3dfbGV2ZWxfa2V5LCAibG93LWxldmVsLWtleSIpOworCiAgIERFRlNZTSAoUXRvdWNo
X2VuZCwgInRvdWNoLWVuZCIpOwogCiAgIC8qIE1lbnUgYW5kIHRvb2wgYmFyIGl0ZW0gcGFy
dHMuICAqLwpAQCAtMTQwMTgsNiArMTQwODEsOCBAQCBrZXlzX29mX2tleWJvYXJkICh2b2lk
KQogCQkJICAgICJoYW5kbGUtZm9jdXMtb3V0Iik7CiAgIGluaXRpYWxfZGVmaW5lX2xpc3B5
X2tleSAoVnNwZWNpYWxfZXZlbnRfbWFwLCAibW92ZS1mcmFtZSIsCiAJCQkgICAgImhhbmRs
ZS1tb3ZlLWZyYW1lIik7CisgIGluaXRpYWxfZGVmaW5lX2xpc3B5X2tleSAoVnNwZWNpYWxf
ZXZlbnRfbWFwLCAibG93LWxldmVsLWtleSIsCisJCQkgICAgImlnbm9yZSIpOwogfQogCiAv
KiBNYXJrIHRoZSBwb2ludGVycyBpbiB0aGUga2JvYXJkIG9iamVjdHMuCmRpZmYgLS1naXQg
YS9zcmMva2V5Ym9hcmQuaCBiL3NyYy9rZXlib2FyZC5oCmluZGV4IDM4NzUwMWM5Zjg4Li44
M2Y5YTBmMTQxYSAxMDA2NDQKLS0tIGEvc3JjL2tleWJvYXJkLmgKKysrIGIvc3JjL2tleWJv
YXJkLmgKQEAgLTUxMSw2ICs1MTEsNyBAQCBrYmRfYnVmZmVyX3N0b3JlX2V2ZW50X2hvbGQg
KHN0cnVjdCBpbnB1dF9ldmVudCAqZXZlbnQsCiBleHRlcm4gTGlzcF9PYmplY3QgbWVudV9p
dGVtX2V2YWxfcHJvcGVydHkgKExpc3BfT2JqZWN0KTsKIGV4dGVybiBib29sIGtiZF9idWZm
ZXJfZXZlbnRzX3dhaXRpbmcgKHZvaWQpOwogZXh0ZXJuIHZvaWQgYWRkX3VzZXJfc2lnbmFs
IChpbnQsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gYm9vbCBrYmRfbG93X2xldmVsX2tleV9p
c19lbmFibGVkIChpbnQsIExpc3BfT2JqZWN0KTsKIAogZXh0ZXJuIGludCB0dHlfcmVhZF9h
dmFpbF9pbnB1dCAoc3RydWN0IHRlcm1pbmFsICosIHN0cnVjdCBpbnB1dF9ldmVudCAqKTsK
IGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgdGltZXJfY2hlY2sgKHZvaWQpOwpkaWZmIC0tZ2l0
IGEvc3JjL3BndGt0ZXJtLmMgYi9zcmMvcGd0a3Rlcm0uYwppbmRleCAwNzk5NDUxMjZlMC4u
ZmJhODFmNWVjMGUgMTAwNjQ0Ci0tLSBhL3NyYy9wZ3RrdGVybS5jCisrKyBiL3NyYy9wZ3Rr
dGVybS5jCkBAIC01MjAxLDYgKzUyMDEsNTYgQEAgcGd0a19lbnF1ZXVlX3ByZWVkaXQgKHN0
cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmplY3QgcHJlZWRpdCkKICAgZXZxX2VucXVldWUgKCZp
bmV2KTsKIH0KIAorc3RhdGljIHZvaWQKK3BndGtfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5
X2V2ZW50IChzdHJ1Y3QgZnJhbWUgKmYsIEdka0V2ZW50ICpldmVudCkKK3sKKyAgR2RrRXZl
bnRLZXkgeGtleSA9IGV2ZW50LT5rZXk7CisgIGJvb2wgaXNfcHJlc3M7CisgIExpc3BfT2Jq
ZWN0IGtleSwgbW9kaWZpZXI7CisgIHVuaW9uIGJ1ZmZlcmVkX2lucHV0X2V2ZW50IGluZXY7
CisKKyAgaWYgKE5JTFAgKFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMpKQorICAgIHJl
dHVybjsKKworICBzd2l0Y2ggKGV2ZW50LT50eXBlKQorICAgIHsKKyAgICBjYXNlIEdES19L
RVlfUFJFU1M6CisgICAgICBpc19wcmVzcyA9IHRydWU7CisgICAgICBicmVhazsKKyAgICBj
YXNlIEdES19LRVlfUkVMRUFTRToKKyAgICAgIGlzX3ByZXNzID0gZmFsc2U7CisgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBXZSBk
b24ndCBzdXBwb3J0IG1vZGlmaWVyIGlkZW50aWZpY2F0aW9uIG9uIFBHVEsuIFdlIG9ubHkg
Y2FuIHRlbGwKKyAgICBpZiB0aGUga2V5IGNvcnJlc3BvbmRzIHRvIGEgbW9kaWZpZXIgb3Ig
bm90LCB3aGljaCBpcyB1c2VkIGZvcgorICAgIGZpbHRlcmluZyBlbmFibGVkIGtleXMgd2l0
aCBrYmRfbG93X2xldmVsX2tleV9pc19lbmFibGVkLiAgKi8KKyAgbW9kaWZpZXIgPSBldmVu
dC0+a2V5LmlzX21vZGlmaWVyID8gUXQgOiBRbmlsOworCisgIGludCBrZXlzeW0gPSB4a2V5
LmtleXZhbDsKKworICBpZiAoa2V5c3ltID49IEdES19LRVlfYSAmJiBrZXlzeW0gPD0gR0RL
X0tFWV96KQorICAgIGtleXN5bSAtPSBHREtfS0VZX2EgLSBHREtfS0VZX0E7CisgIGlmICgh
a2JkX2xvd19sZXZlbF9rZXlfaXNfZW5hYmxlZCAoa2V5c3ltLCBtb2RpZmllcikpCisgICAg
cmV0dXJuOworCisgIGlmICghZikKKyAgICBmID0gcGd0a19hbnlfd2luZG93X3RvX2ZyYW1l
IChldmVudC0+a2V5LndpbmRvdyk7CisgIGlmICghZikKKyAgICByZXR1cm47CisKKyAga2V5
ID0gbWFrZV9maXhudW0gKGtleXN5bSk7CisKKyAgRVZFTlRfSU5JVCAoaW5ldi5pZSk7Cisg
IFhTRVRGUkFNRSAoaW5ldi5pZS5mcmFtZV9vcl93aW5kb3csIGYpOworICBpbmV2LmllLmtp
bmQgPSBMT1dfTEVWRUxfS0VZX0VWRU5UOworICBpbmV2LmllLnRpbWVzdGFtcCA9IGV2ZW50
LT5rZXkudGltZTsKKyAgaW5ldi5pZS5hcmcgPSBsaXN0MyAoaXNfcHJlc3MgPyBRdCA6IFFu
aWwsIGtleSwgbW9kaWZpZXIpOworICBldnFfZW5xdWV1ZSAoJmluZXYpOworfQorCiBzdGF0
aWMgZ2Jvb2xlYW4KIGtleV9wcmVzc19ldmVudCAoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2
ZW50ICpldmVudCwgZ3BvaW50ZXIgKnVzZXJfZGF0YSkKIHsKQEAgLTUyMTEsNiArNTI2MSw5
IEBAIGtleV9wcmVzc19ldmVudCAoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50ICpldmVu
dCwgZ3BvaW50ZXIgKnVzZXJfZGF0YSkKICAgc3RydWN0IHBndGtfZGlzcGxheV9pbmZvICpk
cHlpbmZvOwogCiAgIGYgPSBwZ3RrX2FueV93aW5kb3dfdG9fZnJhbWUgKGd0a193aWRnZXRf
Z2V0X3dpbmRvdyAod2lkZ2V0KSk7CisKKyAgcGd0a19tYXliZV9zZW5kX2xvd19sZXZlbF9r
ZXlfZXZlbnQgKGYsIGV2ZW50KTsKKwogICBFVkVOVF9JTklUIChpbmV2LmllKTsKICAgaGxp
bmZvID0gTU9VU0VfSExfSU5GTyAoZik7CiAgIG5ieXRlcyA9IDA7CkBAIC01NDU0LDYgKzU1
MDcsOCBAQCBrZXlfcmVsZWFzZV9ldmVudCAoR3RrV2lkZ2V0ICp3aWRnZXQsCiAgIEdka0Rp
c3BsYXkgKmRpc3BsYXk7CiAgIHN0cnVjdCBwZ3RrX2Rpc3BsYXlfaW5mbyAqZHB5aW5mbzsK
IAorICBwZ3RrX21heWJlX3NlbmRfbG93X2xldmVsX2tleV9ldmVudCAoTlVMTCwgZXZlbnQp
OworCiAgIGRpc3BsYXkgPSBndGtfd2lkZ2V0X2dldF9kaXNwbGF5ICh3aWRnZXQpOwogICBk
cHlpbmZvID0gcGd0a19kaXNwbGF5X2luZm9fZm9yX2Rpc3BsYXkgKGRpc3BsYXkpOwogCmRp
ZmYgLS1naXQgYS9zcmMvdGVybWhvb2tzLmggYi9zcmMvdGVybWhvb2tzLmgKaW5kZXggZDZh
OTMwMGJhYzkuLjk2NmE2NDkyZjY5IDEwMDY0NAotLS0gYS9zcmMvdGVybWhvb2tzLmgKKysr
IGIvc3JjL3Rlcm1ob29rcy5oCkBAIC0zNDcsNiArMzQ3LDcgQEAgI2RlZmluZSBFTUFDU19U
RVJNSE9PS1NfSAogICAvKiBJbiBhIE5PVElGSUNBVElPTl9FVkVOVCwgLmFyZyBpcyBhIGxh
bWJkYSB0byBldmFsdWF0ZS4gICovCiAgICwgTk9USUZJQ0FUSU9OX0VWRU5UCiAjZW5kaWYg
LyogSEFWRV9BTkRST0lEICovCisgICwgTE9XX0xFVkVMX0tFWV9FVkVOVAogfTsKIAogLyog
Qml0IHdpZHRoIG9mIGFuIGVudW0gZXZlbnRfa2luZCB0YWcgYXQgdGhlIHN0YXJ0IG9mIHN0
cnVjdHMgYW5kIHVuaW9ucy4gICovCmRpZmYgLS1naXQgYS9zcmMvdzMyZm5zLmMgYi9zcmMv
dzMyZm5zLmMKaW5kZXggZTI0NTViOTI3MWUuLjFkMThiZjQwOGUxIDEwMDY0NAotLS0gYS9z
cmMvdzMyZm5zLmMKKysrIGIvc3JjL3czMmZucy5jCkBAIC00NjY5LDYgKzQ2NjksMTEgQEAg
dzMyX3duZF9wcm9jIChIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhcmFtKQogICAgIGNhc2UgV01fS0VZVVA6CiAgICAgY2FzZSBXTV9TWVNLRVlVUDoK
ICAgICAgIHJlY29yZF9rZXl1cCAod1BhcmFtLCBsUGFyYW0pOworICAgICAgaWYgKCFOSUxQ
IChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzKSkKKwl7CisJICBzaWduYWxfdXNlcl9p
bnB1dCAoKTsKKwkgIG15X3Bvc3RfbXNnICgmd21zZywgaHduZCwgV01fRU1BQ1NfTE9XX0xF
VkVMX0tFWSwgd1BhcmFtLCBsUGFyYW0pOworCX0KICAgICAgIGdvdG8gZGZsdDsKIAogICAg
IGNhc2UgV01fS0VZRE9XTjoKQEAgLTQ2OTUsNiArNDcwMCwxMiBAQCB3MzJfd25kX3Byb2Mg
KEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAg
ICAgICBpZiAodzMyX3VzZV9mYWxsYmFja193bV9jaGFyc19tZXRob2QpCiAJd1BhcmFtID0g
bWFwX2tleXBhZF9rZXlzICh3UGFyYW0sIChsUGFyYW0gJiAweDEwMDAwMDBMKSAhPSAwKTsK
IAorICAgICAgaWYgKCFOSUxQIChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzKSkKKwl7
CisJICBzaWduYWxfdXNlcl9pbnB1dCAoKTsKKwkgIG15X3Bvc3RfbXNnICgmd21zZywgaHdu
ZCwgV01fRU1BQ1NfTE9XX0xFVkVMX0tFWSwgd1BhcmFtLCBsUGFyYW0pOworCX0KKwogICAg
ICAgd2luZG93c190cmFuc2xhdGUgPSAwOwogCiAgICAgICBzd2l0Y2ggKHdQYXJhbSkKZGlm
ZiAtLWdpdCBhL3NyYy93MzJ0ZXJtLmMgYi9zcmMvdzMydGVybS5jCmluZGV4IGUxOGYzOWRk
MmE4Li5hMmUwYTRiMGZhMCAxMDA2NDQKLS0tIGEvc3JjL3czMnRlcm0uYworKysgYi9zcmMv
dzMydGVybS5jCkBAIC01MjcwLDYgKzUyNzAsNTUgQEAgdzMyX3JlYWRfc29ja2V0IChzdHJ1
Y3QgdGVybWluYWwgKnRlcm1pbmFsLAogCSAgICB9CiAJICBicmVhazsKIAorCWNhc2UgV01f
RU1BQ1NfTE9XX0xFVkVMX0tFWToKKwkgIFdPUkQga2V5X2ZsYWdzID0gSElXT1JEIChtc2cu
bXNnLmxQYXJhbSk7CisJICBCT09MIGlzX3dtX2tleXVwID0ga2V5X2ZsYWdzICYgS0ZfVVA7
CisKKwkgIGlmIChpc193bV9rZXl1cCB8fCAoa2V5X2ZsYWdzICYgS0ZfUkVQRUFUKSA9PSAw
KSAvKiBXTV9LRVlET1dOLCBub3QgcmVwZWF0aW5nLiAgKi8KKwkgICAgeworCSAgICAgIFdP
UkQgc2Nhbl9jb2RlID0gTE9CWVRFIChrZXlfZmxhZ3MpOworCSAgICAgIGlmIChrZXlfZmxh
Z3MgJiBLRl9FWFRFTkRFRCkKKwkJc2Nhbl9jb2RlID0gTUFLRVdPUkQgKHNjYW5fY29kZSwg
MHhFMCk7CisKKwkgICAgICBVSU5UIHRyYW5zbGF0ZWQgPSBNYXBWaXJ0dWFsS2V5IChzY2Fu
X2NvZGUsIE1BUFZLX1ZTQ19UT19WS19FWCk7CisJICAgICAgV09SRCB2ayA9IExPV09SRCAo
bXNnLm1zZy53UGFyYW0pOworCSAgICAgIGlmICh0cmFuc2xhdGVkKQorCQl2ayA9IExPV09S
RCAodHJhbnNsYXRlZCk7CisKKwkgICAgICBMaXNwX09iamVjdCBrZXkgPSBtYWtlX2ZpeG51
bSAodmspOworCSAgICAgIExpc3BfT2JqZWN0IG1vZGlmaWVyID0gUW5pbDsKKworCSAgICAg
IHN3aXRjaCAodmspCisJCXsKKwkJY2FzZSBWS19MU0hJRlQ6CisJCWNhc2UgVktfUlNISUZU
OgorCQkgIG1vZGlmaWVyID0gUXNoaWZ0OworCQkgIGJyZWFrOworCQljYXNlIFZLX0xDT05U
Uk9MOgorCQljYXNlIFZLX1JDT05UUk9MOgorCQkgIG1vZGlmaWVyID0gUWN0cmw7CisJCSAg
YnJlYWs7CisJCWNhc2UgVktfTE1FTlU6CisJCWNhc2UgVktfUk1FTlU6CisJCSAgbW9kaWZp
ZXIgPSBRbWV0YTsKKwkJICBicmVhazsKKwkJfQorCisJICAgICAgaWYgKGtiZF9sb3dfbGV2
ZWxfa2V5X2lzX2VuYWJsZWQgKHZrLCBtb2RpZmllcikpCisJCXsKKwkJICBmID0gdzMyX3dp
bmRvd190b19mcmFtZSAoZHB5aW5mbywgbXNnLm1zZy5od25kKTsKKwkJICBpbmV2LmtpbmQg
PSBMT1dfTEVWRUxfS0VZX0VWRU5UOworCQkgIFhTRVRGUkFNRSAoaW5ldi5mcmFtZV9vcl93
aW5kb3csIGYpOworCQkgIGluZXYudGltZXN0YW1wID0gbXNnLm1zZy50aW1lOworCQkgIGlu
ZXYuYXJnID0gbGlzdDMgKGlzX3dtX2tleXVwID8gUW5pbCA6IFF0LCBrZXksIG1vZGlmaWVy
KTsKKwkJICBrYmRfYnVmZmVyX3N0b3JlX2V2ZW50X2hvbGQgKCZpbmV2LCBob2xkX3F1aXQp
OworCQl9CisKKwkgICAgICBpbmV2LmtpbmQgPSBOT19FVkVOVDsKKworCSAgICB9CisJICBi
cmVhazsKKwogICAgICAgICBjYXNlIFdNX1VOSUNIQVI6CiAJY2FzZSBXTV9TWVNDSEFSOgog
CWNhc2UgV01fQ0hBUjoKZGlmZiAtLWdpdCBhL3NyYy93MzJ0ZXJtLmggYi9zcmMvdzMydGVy
bS5oCmluZGV4IGNhZDlmY2Y4Y2IxLi44OGY3ZGZlZWY4YiAxMDA2NDQKLS0tIGEvc3JjL3cz
MnRlcm0uaAorKysgYi9zcmMvdzMydGVybS5oCkBAIC03MTMsNyArNzEzLDggQEAgI2RlZmlu
ZSBXTV9FTUFDU19GSUxFTk9USUZZICAgICAgICAgICAgKFdNX0VNQUNTX1NUQVJUICsgMjUp
CiAjZGVmaW5lIFdNX0VNQUNTX0lNRV9TVEFUVVMgICAgICAgICAgICAoV01fRU1BQ1NfU1RB
UlQgKyAyNikKICNkZWZpbmUgV01fRU1BQ1NfRFJBR09WRVIgICAgICAgICAgICAgIChXTV9F
TUFDU19TVEFSVCArIDI3KQogI2RlZmluZSBXTV9FTUFDU19EUk9QICAgICAgICAgICAgICAg
ICAgKFdNX0VNQUNTX1NUQVJUICsgMjgpCi0jZGVmaW5lIFdNX0VNQUNTX0VORCAgICAgICAg
ICAgICAgICAgICAoV01fRU1BQ1NfU1RBUlQgKyAyOSkKKyNkZWZpbmUgV01fRU1BQ1NfTE9X
X0xFVkVMX0tFWSAgICAgICAgIChXTV9FTUFDU19TVEFSVCArIDI5KQorI2RlZmluZSBXTV9F
TUFDU19FTkQgICAgICAgICAgICAgICAgICAgKFdNX0VNQUNTX1NUQVJUICsgMzApCiAKICNk
ZWZpbmUgV05EX0ZPTlRXSURUSF9JTkRFWCAgICAoMCkKICNkZWZpbmUgV05EX0xJTkVIRUlH
SFRfSU5ERVggICAoNCkKZGlmZiAtLWdpdCBhL3NyYy94dGVybS5jIGIvc3JjL3h0ZXJtLmMK
aW5kZXggMGMyMGQzOGIwZjcuLjcyNzE1ZTBlZDczIDEwMDY0NAotLS0gYS9zcmMveHRlcm0u
YworKysgYi9zcmMveHRlcm0uYwpAQCAtMTc4NDAsNiArMTc4NDAsMTQxIEBAICNkZWZpbmUg
U1RPUkVfS0VZU1lNX0ZPUl9ERUJVRyhrZXlzeW0pICgodm9pZCkwKQogCiBzdGF0aWMgc3Ry
dWN0IHhfZGlzcGxheV9pbmZvICpuZXh0X25vb3BfZHB5aW5mbzsKIAorTGlzcF9PYmplY3QK
K3hfZ2V0X21vZGlmaWVyX2Zvcl9rZXljb2RlIChzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRw
eWluZm8sCisJCQkgICAgaW50IGtleWNvZGUpCit7CisjaWZkZWYgSEFWRV9YS0IKKyAgaWYg
KGRweWluZm8tPnhrYl9kZXNjKQorICAgIGZvciAoaW50IG1vZCA9IDA7IG1vZCA8IFhrYk51
bU1vZGlmaWVyczsgbW9kKyspCisgICAgICB7CisJaW50IG1hc2sgPSAoMSA8PCBtb2QpOwor
CWlmIChkcHlpbmZvLT54a2JfZGVzYy0+bWFwLT5tb2RtYXBba2V5Y29kZV0gJiBtYXNrKQor
CSAgeworCSAgICBpZiAobWFzayA9PSBTaGlmdE1hc2spCisJICAgICAgcmV0dXJuIFFzaGlm
dDsKKwkgICAgaWYgKG1hc2sgPT0gQ29udHJvbE1hc2spCisJICAgICAgcmV0dXJuIFFjdHJs
OworCSAgICBpZiAobWFzayA9PSBkcHlpbmZvLT5tZXRhX21vZF9tYXNrKQorCSAgICAgIHJl
dHVybiBRbWV0YTsKKwkgICAgaWYgKG1hc2sgPT0gZHB5aW5mby0+YWx0X21vZF9tYXNrKQor
CSAgICAgIHJldHVybiBRYWx0OworCSAgICBpZiAobWFzayA9PSBkcHlpbmZvLT5zdXBlcl9t
b2RfbWFzaykKKwkgICAgICByZXR1cm4gUXN1cGVyOworCSAgICBpZiAobWFzayA9PSBkcHlp
bmZvLT5oeXBlcl9tb2RfbWFzaykKKwkgICAgICByZXR1cm4gUWh5cGVyOworCSAgfQorICAg
ICAgfQorI2VuZGlmCisgIFhNb2RpZmllcktleW1hcCAqbWFwID0gZHB5aW5mby0+bW9kbWFw
OworICBpZiAobWFwKQorICAgIGZvciAoaW50IG1vZCA9IDA7IG1vZCA8IDg7IG1vZCsrKQor
ICAgICAgeworCWludCBtYXNrID0gKDEgPDwgbW9kKTsKKyAgICAgICAgZm9yIChpbnQga2V5
ID0gMDsga2V5IDwgbWFwLT5tYXhfa2V5cGVybW9kOyBrZXkrKykKKwkgIGlmIChtYXAtPm1v
ZGlmaWVybWFwW21vZCAqIG1hcC0+bWF4X2tleXBlcm1vZCArIGtleV0gPT0ga2V5Y29kZSkK
KwkgICAgeworCSAgICAgIGlmIChtYXNrID09IFNoaWZ0TWFzaykKKwkJcmV0dXJuIFFzaGlm
dDsKKwkgICAgICBpZiAobWFzayA9PSBDb250cm9sTWFzaykKKwkJcmV0dXJuIFFjdHJsOwor
CSAgICAgIGlmIChtYXNrID09IGRweWluZm8tPm1ldGFfbW9kX21hc2spCisJCXJldHVybiBR
bWV0YTsKKwkgICAgICBpZiAobWFzayA9PSBkcHlpbmZvLT5hbHRfbW9kX21hc2spCisJCXJl
dHVybiBRYWx0OworCSAgICAgIGlmIChtYXNrID09IGRweWluZm8tPnN1cGVyX21vZF9tYXNr
KQorCQlyZXR1cm4gUXN1cGVyOworCSAgICAgIGlmIChtYXNrID09IGRweWluZm8tPmh5cGVy
X21vZF9tYXNrKQorCQlyZXR1cm4gUWh5cGVyOworCSAgICB9CisgICAgICB9CisgIHJldHVy
biBRbmlsOworfQorCitzdGF0aWMgdm9pZAoreF9tYXliZV9zZW5kX2xvd19sZXZlbF9rZXlf
ZXZlbnQgKHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywKKwkJCQkgIGNvbnN0IFhF
dmVudCAqeGV2LCBzdHJ1Y3QgZnJhbWUgKmYpCit7CisgIFhLZXlFdmVudCB4a2V5OworICBi
b29sIGlzX3ByZXNzOworICBLZXlTeW0ga2V5c3ltOworICBMaXNwX09iamVjdCBrZXksIG1v
ZGlmaWVyOworICBzdHJ1Y3QgaW5wdXRfZXZlbnQgaWU7CisKKyAgaWYgKE5JTFAgKFZlbmFi
bGVfbG93X2xldmVsX2tleV9ldmVudHMpKQorICAgIHJldHVybjsKKworICBzd2l0Y2ggKHhl
di0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBLZXlQcmVzczoKKyAgICAgIGlzX3ByZXNzID0g
dHJ1ZTsKKyAgICAgIHhrZXkgPSB4ZXYtPnhrZXk7CisgICAgICBicmVhazsKKyAgICBjYXNl
IEtleVJlbGVhc2U6CisgICAgICBpc19wcmVzcyA9IGZhbHNlOworICAgICAgeGtleSA9IHhl
di0+eGtleTsKKyAgICAgIGJyZWFrOworI2lmZGVmIEhBVkVfWElOUFVUMgorICAgIGNhc2Ug
R2VuZXJpY0V2ZW50OgorICAgICAgWElEZXZpY2VFdmVudCAqeGlldiA9IHhldi0+eGNvb2tp
ZS5kYXRhOworICAgICAgc3dpdGNoICh4ZXYtPnhnZW5lcmljLmV2dHlwZSkKKwl7CisJY2Fz
ZSBYSV9LZXlQcmVzczoKKwkgIGlzX3ByZXNzID0gdHJ1ZTsKKwkgIGJyZWFrOworCWNhc2Ug
WElfS2V5UmVsZWFzZToKKwkgIGlzX3ByZXNzID0gZmFsc2U7CisJICBicmVhazsKKwlkZWZh
dWx0OgorCSAgcmV0dXJuOworCX0KKworICAgICAgeGtleS5zZXJpYWwgPSB4aWV2LT5zZXJp
YWw7CisgICAgICB4a2V5LnNlbmRfZXZlbnQgPSB4aWV2LT5zZW5kX2V2ZW50OworICAgICAg
eGtleS5kaXNwbGF5ID0geGlldi0+ZGlzcGxheTsKKyAgICAgIHhrZXkud2luZG93ID0geGll
di0+ZXZlbnQ7CisgICAgICB4a2V5LnJvb3QgPSB4aWV2LT5yb290OworICAgICAgeGtleS5z
dWJ3aW5kb3cgPSB4aWV2LT5jaGlsZDsKKyAgICAgIHhrZXkudGltZSA9IHhpZXYtPnRpbWU7
CisgICAgICB4a2V5LnggPSB4aWV2LT5ldmVudF94OworICAgICAgeGtleS55ID0geGlldi0+
ZXZlbnRfeTsKKyAgICAgIHhrZXkueF9yb290ID0geGlldi0+cm9vdF94OworICAgICAgeGtl
eS55X3Jvb3QgPSB4aWV2LT5yb290X3k7CisgICAgICB4a2V5LnN0YXRlID0geGlldi0+bW9k
cy5lZmZlY3RpdmU7CisgICAgICB4a2V5LmtleWNvZGUgPSB4aWV2LT5kZXRhaWw7CisgICAg
ICB4a2V5LnNhbWVfc2NyZWVuID0gMTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVm
YXVsdDoKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKCFmKQorICAgIGYgPSB4X2Fu
eV93aW5kb3dfdG9fZnJhbWUgKGRweWluZm8sIHhrZXkud2luZG93KTsKKyAgaWYgKCFmKQor
ICAgIHJldHVybjsKKworICBYTG9va3VwU3RyaW5nICgmeGtleSwgTlVMTCwgMCwgJmtleXN5
bSwgTlVMTCk7CisKKyAgbW9kaWZpZXIgPSB4X2dldF9tb2RpZmllcl9mb3Jfa2V5Y29kZSAo
ZHB5aW5mbywgeGtleS5rZXljb2RlKTsKKworICAvKiBDb252ZXJ0IGxvd2VyY2FzZSBsYXRp
biBsZXR0ZXIgdG8gdXBwZXJjYXNlLiAgKi8KKyAgaWYgKGtleXN5bSA+PSBYS19hICYmIGtl
eXN5bSA8PSBYS196KQorICAgIGtleXN5bSAtPSBYS19hIC0gWEtfQTsKKworICBpZiAoIWti
ZF9sb3dfbGV2ZWxfa2V5X2lzX2VuYWJsZWQgKGtleXN5bSwgbW9kaWZpZXIpKQorICAgIHJl
dHVybjsKKworICBrZXkgPSBtYWtlX2ZpeG51bSAoa2V5c3ltKTsKKworICBFVkVOVF9JTklU
IChpZSk7CisgIFhTRVRGUkFNRSAoaWUuZnJhbWVfb3Jfd2luZG93LCBmKTsKKyAgaWUua2lu
ZCA9IExPV19MRVZFTF9LRVlfRVZFTlQ7CisgIGllLnRpbWVzdGFtcCA9IHhrZXkudGltZTsK
KyAgaWUuYXJnID0gbGlzdDMgKGlzX3ByZXNzID8gUXQgOiBRbmlsLCBrZXksIG1vZGlmaWVy
KTsKKyAga2JkX2J1ZmZlcl9zdG9yZV9ldmVudCAoJmllKTsKK30KKwogLyogRmlsdGVyIGV2
ZW50cyBmb3IgdGhlIGN1cnJlbnQgWCBpbnB1dCBtZXRob2QuCiAgICBEUFlJTkZPIGlzIHRo
ZSBkaXNwbGF5IHRoaXMgZXZlbnQgaXMgZm9yLgogICAgRVZFTlQgaXMgdGhlIFggZXZlbnQg
dG8gZmlsdGVyLgpAQCAtMjAyMDYsNiArMjAzNDEsNyBAQCBoYW5kbGVfb25lX3hldmVudCAo
c3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvLAogICAgICAgZ290byBPVEhFUjsKIAog
ICAgIGNhc2UgS2V5UHJlc3M6CisgICAgICB4X21heWJlX3NlbmRfbG93X2xldmVsX2tleV9l
dmVudCAoZHB5aW5mbywgZXZlbnQsIGFueSk7CiAgICAgICB4X2Rpc3BsYXlfc2V0X2xhc3Rf
dXNlcl90aW1lIChkcHlpbmZvLCBldmVudC0+eGtleS50aW1lLAogCQkJCSAgICBldmVudC0+
eGtleS5zZW5kX2V2ZW50LAogCQkJCSAgICB0cnVlKTsKQEAgLTIwNzE1LDYgKzIwODUxLDcg
QEAgaGFuZGxlX29uZV94ZXZlbnQgKHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywK
ICNlbmRpZgogCiAgICAgY2FzZSBLZXlSZWxlYXNlOgorICAgICAgeF9tYXliZV9zZW5kX2xv
d19sZXZlbF9rZXlfZXZlbnQgKGRweWluZm8sIGV2ZW50LCBhbnkpOwogI2lmZGVmIEhBVkVf
WF9JMThOCiAgICAgICAvKiBEb24ndCBkaXNwYXRjaCB0aGlzIGV2ZW50IHNpbmNlIFh0RGlz
cGF0Y2hFdmVudCBjYWxscwogICAgICAgICAgWEZpbHRlckV2ZW50LCBhbmQgdHdvIGNhbGxz
IGluIGEgcm93IG1heSBmcmVlemUgdGhlCkBAIC0yMzk3MCw2ICsyNDEwNyw4IEBAIGhhbmRs
ZV9vbmVfeGV2ZW50IChzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRweWluZm8sCiAJICAgICAg
c3RydWN0IHhpX2RldmljZV90ICpkZXZpY2UsICpzb3VyY2U7CiAJICAgICAgWEtleVByZXNz
ZWRFdmVudCB4a2V5OwogCisJICAgICAgeF9tYXliZV9zZW5kX2xvd19sZXZlbF9rZXlfZXZl
bnQgKGRweWluZm8sIGV2ZW50LCBhbnkpOworCiAJICAgICAgY29kaW5nID0gUWxhdGluXzE7
CiAKIAkgICAgICAvKiBUaGUgY29kZSB1bmRlciB0aGlzIGxhYmVsIGlzIHF1aXRlIGRlc3Vs
dG9yeS4gIFRoZXJlCkBAIC0yNDU4Niw2ICsyNDcyNSw4IEBAIGhhbmRsZV9vbmVfeGV2ZW50
IChzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRweWluZm8sCiAjZW5kaWYKIAogCSAgY2FzZSBY
SV9LZXlSZWxlYXNlOgorCSAgICB4X21heWJlX3NlbmRfbG93X2xldmVsX2tleV9ldmVudCAo
ZHB5aW5mbywgZXZlbnQsIGFueSk7CisKICNpZiBkZWZpbmVkIEhBVkVfWF9JMThOIHx8IGRl
ZmluZWQgVVNFX0dUSyB8fCBkZWZpbmVkIFVTRV9MVUNJRAogCSAgICB7CiAJICAgICAgWEtl
eVByZXNzZWRFdmVudCB4a2V5OwpAQCAtMzI2NjIsNiArMzI4MDMsNyBAQCBzeW1zX29mX3h0
ZXJtICh2b2lkKQogICBWeF90b29sa2l0X3Njcm9sbF9iYXJzID0gUW5pbDsKICNlbmRpZgog
CisgIERFRlNZTSAoUXNoaWZ0LCAic2hpZnQiKTsKICAgREVGU1lNIChRbW9kaWZpZXJfdmFs
dWUsICJtb2RpZmllci12YWx1ZSIpOwogICBERUZTWU0gKFFjdHJsLCAiY3RybCIpOwogICBG
cHV0IChRY3RybCwgUW1vZGlmaWVyX3ZhbHVlLCBtYWtlX2ZpeG51bSAoY3RybF9tb2RpZmll
cikpOwpkaWZmIC0tZ2l0IGEvc3JjL3h0ZXJtLmggYi9zcmMveHRlcm0uaAppbmRleCA4ZDVj
OTkxNzc0OS4uNjZlMDUyZTdhY2QgMTAwNjQ0Ci0tLSBhL3NyYy94dGVybS5oCisrKyBiL3Ny
Yy94dGVybS5oCkBAIC0xOTA2LDYgKzE5MDYsOCBAQCB4X211dGFibGVfY29sb3JtYXAgKFhW
aXN1YWxJbmZvICp2aXN1YWwpCiBleHRlcm4gdm9pZCB0ZWFyX2Rvd25feF9iYWNrX2J1ZmZl
ciAoc3RydWN0IGZyYW1lICpmKTsKIGV4dGVybiB2b2lkIGluaXRpYWxfc2V0X3VwX3hfYmFj
a19idWZmZXIgKHN0cnVjdCBmcmFtZSAqZik7CiAKK2V4dGVybiBMaXNwX09iamVjdCB4X2dl
dF9tb2RpZmllcl9mb3Jfa2V5Y29kZSAoc3RydWN0IHhfZGlzcGxheV9pbmZvICosIGludCk7
CisKIC8qIERlZmluZWQgaW4geGZucy5jLiAgKi8KIGV4dGVybiB2b2lkIHhfcmVhbF9wb3Np
dGlvbnMgKHN0cnVjdCBmcmFtZSAqLCBpbnQgKiwgaW50ICopOwogZXh0ZXJuIHZvaWQgeF9j
aGFuZ2VfdGFiX2Jhcl9oZWlnaHQgKHN0cnVjdCBmcmFtZSAqLCBpbnQpOwotLSAKMi4zNS4x
LndpbmRvd3MuMgoK

--------------Ho0Ev8LvMd4RGoiUOUnpb8B7--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 14 Dec 2024 11:14:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Dec 14 06:14:29 2024
Received: from localhost ([127.0.0.1]:45725 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tMQ6O-00039o-L0
	for submit <at> debbugs.gnu.org; Sat, 14 Dec 2024 06:14:29 -0500
Received: from eggs.gnu.org ([209.51.188.92]:57718)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1tMQ6K-00039B-Hf
 for 74423 <at> debbugs.gnu.org; Sat, 14 Dec 2024 06:14:26 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tMQ6D-0005pQ-89; Sat, 14 Dec 2024 06:14:17 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=bd12ye0f1HZWgzvGLgLhBO9LtOMyofVwdtFvFWTTN/U=; b=rLPZvTaf3RQi
 oW7dT6mJA47evr54LrnIMtmVeZdj3GOT5zX2j1+tjesqY75KegrR3UhKYAHOxAHgxERgpoQtBHoQv
 XrGlgg11kI66m4Cc+MgaCxPF8nIRhVa73bkstN2wikX1fBZjiP8944vzNbZYuGP+veJqIv1H31kVQ
 AGf9aPK4cv1XOcN80Gdsvivgyi7C2qKDaqeqpMDrl7vyayE1NiBRuCGVyZ8OunwIeG/y8H2iJarUK
 fNOlZOalIxsykKEPjWtkRqUTDvfE3sbLNO1JUAIk4uXNkzdl3mCDSGdKgUoIFK6mlI8jJe5o/D7c1
 jzUffk/UVzwqkk20aTGcCw==;
Date: Sat, 14 Dec 2024 13:14:11 +0200
Message-Id: <86bjxev7ng.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN> (message from
 Cecilio Pardo on Fri, 13 Dec 2024 23:55:18 +0100)
Subject: Re: bug#74423: Low level key events
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN> <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN> <867c8ezny3.fsf@HIDDEN>
 <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Fri, 13 Dec 2024 23:55:18 +0100
> Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, monnier@HIDDEN
> From: Cecilio Pardo <cpardo@HIDDEN>
> 
> This new version includes a manual entry, and corrected doc strings and 
> comments.

Thanks, a few minor comments.

> +@cindex @code{low-level-key} event
> +@item (low-level-key @var{is-key-press} @var{key} @var{modifier} @var{time} @var{frame})
> +This event is sent on the physical press or release of keys, only on GUI
> +systems, currently X, MS-Windows and PGTK.

Aren't these events sent only if enable-low-level-key-events is
non-nil?  If so, this should be documented, and the variable itself
should be documented.

> +@var{is-key-press} is @code{t} for a key press, @code{nil} for a key release.
> +@var{time} is the event's time in milliseconds, @var{frame} is the
> +frame receiving it. @var{modifier} is @code{nil} if the key is not a
                     ^^
Two spaces between sentences.

> +  DEFVAR_LISP ("enable-low-level-key-events", Venable_low_level_key_events,
> +	       doc: /* If non-nil, reception of low-level key events is enabled.
> +
> +The value configures the set of keys that are handled:
> +
> +If t, send events for all keys.
> +
> +If a number, send events for the corresponding keysym.  When calling
> +'llk-init', a set of variables with the xk- prefix is initialized with
   ^^^^^^^^^^
In doc strings, we quote symbols `like this'.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 14 Dec 2024 09:26:33 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Dec 14 04:26:33 2024
Received: from localhost ([127.0.0.1]:45424 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tMOPw-0006Do-VA
	for submit <at> debbugs.gnu.org; Sat, 14 Dec 2024 04:26:33 -0500
Received: from mail.imayhem.com ([82.223.54.191]:49977
 helo=zealous-pike.82-223-54-191.plesk.page)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <cpardo@HIDDEN>) id 1tMOPu-0006DV-Bx
 for 74423 <at> debbugs.gnu.org; Sat, 14 Dec 2024 04:26:31 -0500
Received: from [192.168.68.102] (111.red-88-21-7.staticip.rima-tde.net
 [88.21.7.111])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id 2F30D80184; 
 Sat, 14 Dec 2024 09:26:24 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 88.21.7.111) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[192.168.68.102]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Message-ID: <ecd8b7b6-6dfc-434f-a922-896414cf5ce7@HIDDEN>
Date: Sat, 14 Dec 2024 10:26:23 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74423: Low level key events
To: Po Lu <luangruo@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN> <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN> <867c8ezny3.fsf@HIDDEN>
 <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN> <87ldwjqd1e.fsf@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <87ldwjqd1e.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: 74423 <at> debbugs.gnu.org, Eli Zaretskii <eliz@HIDDEN>,
 monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 14/12/2024 2:16, Po Lu wrote:
> Cecilio Pardo <cpardo@HIDDEN> writes:
> 
>> +#ifndef HAVE_XINPUT2
>> +static void
>> +xg_maybe_send_low_level_key_event (struct frame *f,
>> +				   GdkEvent *xev)
>> +{
>> +  GdkEventKey xkey = xev->key;

> Why is this !HAVE_XINPUT2?  GTK input method support exists
> independently of XInput 2.

When XInput 2 is active, we get the event through it (XI_KeyPress) 
first. That gives the information we need. The GTK code is used when 
there is no XInput and use_native_input is active.






Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 14 Dec 2024 01:17:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 13 20:17:11 2024
Received: from localhost ([127.0.0.1]:44857 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tMGmN-0008P2-0B
	for submit <at> debbugs.gnu.org; Fri, 13 Dec 2024 20:17:11 -0500
Received: from [66.163.191.206] (port=43194
 helo=sonic312-25.consmr.mail.ne1.yahoo.com)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <luangruo@HIDDEN>) id 1tMGmJ-0008OI-GV
 for 74423 <at> debbugs.gnu.org; Fri, 13 Dec 2024 20:17:10 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
 t=1734139015; bh=uo9I+srJwYo1FwkONd0I20DXr/OyjzvPTAgbLbgFIRI=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To;
 b=n14dAkHTPoihZovsBmyWdP6uCpmxcgIE4+k+ToEidT5PvzxTX9S8S+IwJSQPfsewswndKf6H3atQJENRpgS7CMqJJrx4jErbaL9zZndTseK2NWhEYcGyJh6uukkurH0Fya4lLr5rvfCcRi90H/IABmED7S/F7XxlgkCBKYnB4t732EV+3/aBKbk5KA0/7khABI34JD3a5IJOYKq54tCN002u8Rgnvp/PTg/F1k/K2FL0ij9htroCQrZF5jysqAySEifXVR18ZxkxoROpe//CSJHbKQTIxmoV6HLEm2ktfQRBYFT0VjfyI6/DT5X7kZw1Mi1GxoqN/EaUJGmX2ELiRA==
X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
 t=1734139015; bh=RE3qA52TYjIjfdFVeaTtPaZpEzhKt0c2ng8ze/F3Q0a=;
 h=X-Sonic-MF:From:To:Subject:Date:From:Subject;
 b=gh1HYbXm2CjRD5ACcPSww77zoYbep+zXq7qgrut8HDFDv6ADxjVSI3vnFyCVwEFLjb0UnWaWjUKflidgIJe7/BKGk8tm0PyQZoUHEDkgoqzGPXXDS4UKwQfwWvUcXmDAcfzygEyGR0Z89FGOCAjOeqGkMZAEI2ggoKnoaf8EItqdsuXcwnpjkHtRcPDKj/eJ8wviXRjXsUVBBfZ8Eyjj+GCUUTX08mWiP7toGbwdmtEKu1qQasSZdRjyMjZ5d32jUpUM354c28j5VYk9LD8tUaQhulLqzH5YxpWgLhtnPfYjdyBIbAYuamuQ3NAuimSWYY0I3us5jJuQHsmPgfyGSw==
X-YMail-OSG: ScvB8qEVM1kjCvGTgOMIYIhPaRFyGe3OQ6Rdm.5OTuqDFE3A6jFiSINJ8xk0SG9
 8EGKTbhEcalahfXXAWllB68sBU6o61FansyO0SIpK7XMD25U2Vgpvxcw1otqL2oZfbZwDRqMPHuE
 6jHzoTvPiZFeDP79drbIEoy.FZccT51vX_haW.YuXPUL2sJ3jd5aUYl6w_eLmiHyDjbtfexGmNkZ
 jh4c59WlMPQbuKjNe_JerKw9dbIbzo0HlpqlhQm9AhM3WVooFlQwpOuLZa_5JVyZ44Wc54y3lFXL
 _sJfBOH5tQWXVXd3HJ7UT_eatSvyIbNZJX.dQcj4soYPuKLspYIF4VUMmkOOoD2Xw2E1RS30GT70
 nTOqh12j4mjS9k5rqHPUgB8W_kpUs6Voz2cHFY8anEfGG84DceXfC9b_xDY1_h56tUpoIEOTJ1c5
 BYfnA8Yi7BQxOlFvS1uSFpOoklh_3vvFQ5WV5Rkq9N0PKNnqcwiewrstu5KZbDb621LVC7USIzK2
 JppkiLfZl59g1QtESQC.wihtFbk_KWv3wRpN6qvzIWha4LEsoDfXqed8ER3lCBQOugw_ZW3dyNid
 gx1YwuEIa7HslxO2384WJ.ELUh5bwEKUWk6Z7.7wzAdFicU2hLgK3ZvmbOGsH1aSJ3Ai8wga3nP7
 zkvUacRQ1Y7tVcCG_YLaMEu8t2o8Avc1JaV.wsPm0WMInmKu2asVLuzV8nRN1FpwJ8hN8LqbJqaA
 q56O1iyZvzvmYcjA5e_1A_sbacLTDildsRFG_dYYgYuAnj7G06Fa3bbeE0qW4YBGZ_Ys1uDVKr_9
 i7YJpPIXEsr1E2T8ohwcjmIg7TxdFF1VEbUb4HfaUXemibeLGMmqXY0GPGFdRe2fttk_17QZTf2h
 zeSpNZSGSE_Um5vGVsi2OaAF6jKJkb8Oi4yK7qRk6ulx0YWBRO4txa_cju90OpWcYCM0Enuq2L5m
 WHbreh6kz_fwJbGZ.CEla5AE8mxzX6WyVjVj7RGqIOQQjlKMwGvkCb4pzG5C7QRjPuhW2CV34rvb
 XciU6Bya_WSziBlAPU10zPddNlpqUGtf9Uo9.DALbJKaw6_GcBwSeqocZDrAuM4Y13.AY.IHXEUJ
 pW0n9pDTIfWBaZy3EQqskhsHsclLt4AIRSQeOD0SotVi8P5cihWLddu_Q7xoe5U0fAlKeJKgExgk
 Y0mr1D2rgx9.VNS8GKl9EEpojRZL2KV8RF7bbP1fWzvvS4vJTkcwKMXSSvQD9fD6jjOSNJu2L8YC
 0mfkQvrwvrwFHdbBV170YvCN8GXyMOAy.aogdvFwXArC99LSrJbK_tvZc5aYt2NK2M.VhUNubQr1
 Y3EpJ8V_HQNxaWNZ1SHUhMxuPcTivv.XHISZDpx0js8XWIchuiMH7Bevgml8_xgkvV58RvL9lma5
 .yvXtcp43uENLqCvPtxAoOoHl.cDD6JVJA6P.uTECK7CrLnFahT5rfaQ6yvw4Qvwckd6cJ6gBnXy
 4fRiDdfMdE7Uu35IO2CIh4cA7Uc.8PvNznOZvBznz9vpBByxErYIyNwddugfpNRD7rMyXDJhChAA
 VL0.J.Dqf1uCDCvd5AkVHtOobGfNMpi6oTl.g2XkRt_ePUB17ZNkBgVerTRQQvUzKQpenZk0ws_P
 GbkLbA1ed15xkaW8qXpBtntMz3a9PzJGis8UY.yZaLAetWEw8R7zVp7CEkU6YzGo0.V6uiB_hJrM
 XveyyHznDIUtsqSC5biHQdsq_fC5.LA1_4jT2.5B4395ReZkGdVNQSXZi2sGBUaXPDnE1Y05Yt_d
 1_OAzovPusGp9kjEo4gwyv8f9pnDnFeeb1wGCBZDG1EQAL8SB2i8dq61TFD4lnp_ZoGdAaQJOHtZ
 24D1LjpLPVoEtqzeW13NeHMzOsJxRVuKvWJFh9EAtjL.wt7Q2.7y2KjhpxuD7U6gQsSoCdPUYHR6
 79vW17IXUm3EvXH2EeahdZRfTQ6y9WZDxe93044oeAa76YH03XmavM5mOK40EK4YTSqPuNs2H8LZ
 BXz5aYgPnLqV9BolQXVohb4zIJiygyYRUknhT9F21ewtKXdiZph2lMn6iF0VRVjlu8IagaDvJCbH
 D12z7aldvqFDLWGGhD8iqJojlBu4nvB0n4FpAyUCNLBY.HctEUsO6Hp9cEwJN70JCL4v6FVZXEBc
 ouy.t4J2Qf2SFYS.BAMsAKfq1K0hYPxJHXyKjcsI99bXSxqkpmHvf3N_ulDZcUThXuhcel7a._Nm
 pkLIauPxUkocs4O4OtVZ5l8Tr4nPn96S25L8NVxo0c7AcR3RhSi6AOGso
X-Sonic-MF: <luangruo@HIDDEN>
X-Sonic-ID: 22b03926-2eab-4c0a-8ded-915aef95437a
Received: from sonic.gate.mail.ne1.yahoo.com by
 sonic312.consmr.mail.ne1.yahoo.com with HTTP; Sat, 14 Dec 2024 01:16:55 +0000
Received: by hermes--production-sg3-5b7954b588-wvg78 (Yahoo Inc. Hermes SMTP
 Server) with ESMTPA ID 33346bddb3cfa286c1b5c31d84f311fe; 
 Sat, 14 Dec 2024 01:16:50 +0000 (UTC)
From: Po Lu <luangruo@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>
Subject: Re: bug#74423: Low level key events
In-Reply-To: <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN> (Cecilio
 Pardo's message of "Fri, 13 Dec 2024 23:55:18 +0100")
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN>
 <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN>
 <867c8ezny3.fsf@HIDDEN>
 <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN>
Date: Sat, 14 Dec 2024 09:16:45 +0800
Message-ID: <87ldwjqd1e.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Mailer: WebService/1.1.23040
 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo
Content-Length: 1336
X-Spam-Score: 2.3 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview: Cecilio Pardo writes: > +#ifndef HAVE_XINPUT2 > +static void
 > +xg_maybe_send_low_level_key_event (struct frame *f, > + GdkEvent *xev)
 > +{ > + GdkEventKey xkey = xev->key; > + bool is_press; > + Lisp_Object
 key, modifier; [...] 
 Content analysis details:   (2.3 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
 provider (luangruo[at]yahoo.com)
 0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 1.0 FORGED_YAHOO_RCVD      'From' yahoo.com does not match 'Received'
 headers
 -0.0 SPF_PASS               SPF: sender matches SPF record
 -0.0 RCVD_IN_MSPIKE_H2      RBL: Average reputation (+2)
 [66.163.191.206 listed in wl.mailspike.net]
 0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The
 query to Validity was blocked.  See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243
 for more information.
 [66.163.191.206 listed in bl.score.senderscore.com]
 -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/,
 no trust [66.163.191.206 listed in list.dnswl.org]
 0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE:
 The query to Validity was blocked.  See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243
 for more information.
 [66.163.191.206 listed in sa-trusted.bondedsender.org]
 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS
X-Debbugs-Envelope-To: 74423
Cc: 74423 <at> debbugs.gnu.org, Eli Zaretskii <eliz@HIDDEN>,
 monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 1.3 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  Cecilio Pardo writes: > +#ifndef HAVE_XINPUT2 > +static void
    > +xg_maybe_send_low_level_key_event (struct frame *f, > + GdkEvent *xev)
    > +{ > + GdkEventKey xkey = xev->key; > + bool is_press; > + Lisp_Object
   key, modifier; [...] 
 
 Content analysis details:   (1.3 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE:
                             The query to Validity was blocked.  See
                             https://knowledge.validity.com/hc/en-us/articles/20961730681243
                              for more information.
                             [66.163.191.206 listed in sa-accredit.habeas.com]
 -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/,
                              no trust
                             [66.163.191.206 listed in list.dnswl.org]
  0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The
                             query to Validity was blocked.  See
                             https://knowledge.validity.com/hc/en-us/articles/20961730681243
                              for more information.
                            [66.163.191.206 listed in bl.score.senderscore.com]
 -0.0 RCVD_IN_MSPIKE_H2      RBL: Average reputation (+2)
                             [66.163.191.206 listed in wl.mailspike.net]
  0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
                             provider (luangruo[at]yahoo.com)
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
  1.0 FORGED_YAHOO_RCVD      'From' yahoo.com does not match 'Received'
                             headers
 -0.0 SPF_PASS               SPF: sender matches SPF record
  1.3 RDNS_NONE              Delivered to internal network by a host with no rDNS
 -1.0 MAILING_LIST_MULTI     Multiple indicators imply a widely-seen list
                             manager

Cecilio Pardo <cpardo@HIDDEN> writes:

> +#ifndef HAVE_XINPUT2
> +static void
> +xg_maybe_send_low_level_key_event (struct frame *f,
> +				   GdkEvent *xev)
> +{
> +  GdkEventKey xkey = xev->key;
> +  bool is_press;
> +  Lisp_Object key, modifier;
> +  union buffered_input_event inev;
> +
> +  if (NILP (Venable_low_level_key_events))
> +    return;
> +
> +  switch (xev->type)
> +    {
> +    case GDK_KEY_PRESS:
> +      is_press = true;
> +      break;
> +    case GDK_KEY_RELEASE:
> +      is_press = false;
> +      break;
> +    default:
> +      return;
> +    }
> +
> +  modifier = x_get_modifier_for_keycode (FRAME_OUTPUT_DATA (f)->display_info,
> +					 xev->key.hardware_keycode);
> +
> +  int keysym = xkey.keyval;
> +
> +  if (keysym >= GDK_KEY_a && keysym <= GDK_KEY_z)
> +    keysym -= GDK_KEY_a - GDK_KEY_A;
> +
> +  if (!kbd_low_level_key_is_enabled (keysym, modifier))
> +    return;
> +
> +  key = make_fixnum (keysym);
> +
> +  EVENT_INIT (inev.ie);
> +  XSETFRAME (inev.ie.frame_or_window, f);
> +  inev.ie.kind = LOW_LEVEL_KEY_EVENT;
> +  inev.ie.timestamp = xkey.time;
> +  inev.ie.arg = list3 (is_press ? Qt : Qnil, key, modifier);
> +  kbd_buffer_store_buffered_event (&inev, &xg_pending_quit_event);
> +}
> +#endif

Why is this !HAVE_XINPUT2?  GTK input method support exists
independently of XInput 2.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 13 Dec 2024 22:55:34 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 13 17:55:34 2024
Received: from localhost ([127.0.0.1]:44527 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tMEZI-0001BE-2y
	for submit <at> debbugs.gnu.org; Fri, 13 Dec 2024 17:55:34 -0500
Received: from mail.imayhem.com ([82.223.54.191]:57887
 helo=zealous-pike.82-223-54-191.plesk.page)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <cpardo@HIDDEN>) id 1tMEZC-0001At-GZ
 for 74423 <at> debbugs.gnu.org; Fri, 13 Dec 2024 17:55:30 -0500
Received: from [192.168.68.102] (111.red-88-21-7.staticip.rima-tde.net
 [88.21.7.111])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id 055E380155; 
 Fri, 13 Dec 2024 22:55:19 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 88.21.7.111) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[192.168.68.102]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Content-Type: multipart/mixed; boundary="------------sxrzhc8vUyFc3eu2Z97hOBFd"
Message-ID: <c0bd3bff-4546-4169-9e5d-ba60ef059b6c@HIDDEN>
Date: Fri, 13 Dec 2024 23:55:18 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74423: Low level key events
To: Eli Zaretskii <eliz@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN> <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN> <867c8ezny3.fsf@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <867c8ezny3.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is a multi-part message in MIME format.
--------------sxrzhc8vUyFc3eu2Z97hOBFd
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

This new version includes a manual entry, and corrected doc strings and 
comments.


--------------sxrzhc8vUyFc3eu2Z97hOBFd
Content-Type: text/plain; charset=UTF-8;
 name="0001-Send-events-for-key-presses-and-key-releases.patch"
Content-Disposition: attachment;
 filename="0001-Send-events-for-key-presses-and-key-releases.patch"
Content-Transfer-Encoding: base64

RnJvbSBmMjM4MWZmMzgxNTczODdjNGIzZThjYTM1MDA5Njc1OTc2ZmQ5NzE3IE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDZWNpbGlvIFBhcmRvIDxjcGFyZG9AaW1heWhlbS5j
b20+CkRhdGU6IE1vbiwgMiBEZWMgMjAyNCAxNzozMDo0MiArMDEwMApTdWJqZWN0OiBbUEFU
Q0hdIFNlbmQgZXZlbnRzIGZvciBrZXkgcHJlc3NlcyBhbmQga2V5IHJlbGVhc2VzLgoKRGV0
ZWN0IGRvdWJsZS90cmlwbGUgdGFwcy4KCiogZG9jL2xpc3ByZWYvY29tbWFuZHMudGV4aTog
QWRkZWQgaW5mb3JtYXRpb24gYWJvdXQgbmV3IGV2ZW50LgoqIHNyYy9ndGt1dGlsLmMgKHhn
X2NyZWF0ZV9mcmFtZV93aWRnZXRzKTogTW9kaWZpZWQgdG8gaGFuZGxlIGtleQpyZWxlYXNl
IGV2ZW50cy4KKHhnX21heWJlX3NlbmRfbG93X2xldmVsX2tleV9ldmVudCk6IE5ldyBmdW5j
dGlvbiB0aGF0IHNlbmRzIGtleQpldmVudHMuCih4Z193aWRnZXRfa2V5X3ByZXNzX2V2ZW50
X2NiKTogTW9kaWZpZWQgdG8gc2VuZCBsb3cgbGV2ZWwga2V5IGV2ZW50cy4KKHhnX3dpZGdl
dF9rZXlfcmVsZWFzZV9ldmVudF9jYik6IE5ldyBmdW5jdGlvbiB0byBzZW5kIGxvdyBsZXZl
bCBrZXkKZXZlbnRzIG9uIGtleSByZWxlYXNlLgoqIHNyYy9rZXlib2FyZC5jIChrYmRfYnVm
ZmVyX2dldF9ldmVudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBsb3cgbGV2ZWwKa2V5Ym9hcmQg
ZXZlbnRzLgoobWFrZV9saXNweV9ldmVudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBsb3cgbGV2
ZWwga2V5Ym9hcmQgZXZlbnRzLgooa2JkX2xvd19sZXZlbF9rZXlfaXNfZW5hYmxlZCk6IE5l
dyBmdW5jdGlvbiB0byBkZWNpZGUgaWYgYSBwYXJ0aWN1bGFyCmtleSBzaG91bGQgZ2VuZXJh
dGUgZXZlbnRzLCBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb24uCihzeW1zX29mX2tleWJvYXJk
KTogQWRkZWQgc3ltYm9scyBhbmQgdmFyaWFsYmxlcy4KKGtleXNfb2Zfa2V5Ym9hcmQpOiBN
b2RpZmllZCB0byBtYXAgbG93IGxldmVsIGtleSBldmVudHMgdG8KJ3NwZWNpYWwtZXZlbnQt
bWFwJy4KKiBzcmMva2V5Ym9hcmQuaDogTW9kaWZpZWQgd2l0aCBmdW5jdGlvbiBwcm90b3R5
cGUuCiogc3JjL3BndGt0ZXJtLmMgKHBndGtfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2
ZW50KTogTmV3IGZ1bmN0aW9uCnRoYXQgc2VuZHMga2V5IGV2ZW50cy4KKGtleV9wcmVzc19l
dmVudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBsb3cgbGV2ZWwga2V5Ym9hcmQgZXZlbnRzLgoo
a2V5X3JlbGVhc2VfZXZlbnQpOiBNb2RpZmllZCB0byBoYW5kbGUgbG93IGxldmVsIGtleWJv
YXJkIGV2ZW50cy4KKiBzcmMvdGVybWhvb2tzLmg6IE1vZGlmaWVkIHRvIGRlZmluZSBjb25z
dGFudC4KKiBzcmMvdzMyZm5zLmMgKHczMl93bmRfcHJvYyk6IE1vZGlmaWVkIHRvIGdlbmVy
YXRlIGxvdyBsZXZlbCBrZXkKZXZlbnRzLgoqIHNyYy93MzJ0ZXJtLmMgKHczMl9yZWFkX3Nv
Y2tldCk6IE1vZGlmaWVkIHRvIGdlbmVyYXRlIGxvdyBsZXZlbCBrZXkKZXZlbnRzLgoqIHNy
Yy93MzJ0ZXJtLmg6IE1vZGlmaWVkIHRvIGRlZmluZSBjb25zdGFudHMuCiogc3JjL3h0ZXJt
LmMgKHhfZ2V0X21vZGlmaWVyX2Zvcl9rZXljb2RlKTogTmV3IGZ1bmN0aW9uIHRvIGRlY2lk
ZQp3aGljaCAoaWYgYW55KSBtb2RpZmllciBjb3JyZXNwb25kcyB0byBhIGdpdmVuIGtleS4K
KHhfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50KTogTmV3IGZ1bmN0aW9uIHRoYXQg
c2VuZHMga2V5CmV2ZW50cy4KKGhhbmRsZV9vbmVfeGV2ZW50KTogTW9kaWZpZWQgdG8gaGFu
ZGxlIGxvdyBsZXZlbCBrZXkgZXZlbnRzLgooc3ltc19vZl94dGVybSk6IE1vZGlmaWVkIHRv
IGRlZmluZSBzeW1ib2wuCiogc3JjL3h0ZXJtLmg6IE1vZGlmaWVkIHdpdGggZnVuY3Rpb24g
cHJvdG90eXBlCiogbGlzcC9sb3ctbGV2ZWwta2V5LmVsIChOZXcgZmlsZSkuCihsbGstYmlu
ZGluZ3MpOiBVc2VyIGJpbmRpbmdzIGZvciBsb3cgbGV2ZWwga2V5IGV2ZW50cy4KKGxsay10
YXAtY291bnQpOiBVc2VyIG9wdGlvbi4KKGxsay10YXAtdGltZW91dCk6IFVzZXIgb3B0aW9u
LgoobGxrLXRhcC1rZXlzKTogVXNlciBvcHRpb24uCihsbGsta2V5c3ltcyk6IExpc3Qgb2Yg
YXZhaWxhYmxlIGtleXN5bXMuCihkZWZpbmUteGspOiBNYWNybyBmb3IgZGVmaW5pbmcga2V5
c3ltcy4KKGxsay1kZWZpbmUta2V5c3ltcyk6IEJ1aWxkIGxsay1rZXlzeW1zLgoobGxrLWlu
aXQpOiBGdW5jdGlvbiB0byBpbml0aWFsaXplIGxvdyBsZXZlbCBrZXkgaGFuZGxpbmcuCihl
dmVudC1pcy1rZXktcHJlc3MpOiBHZXQgZmllbGQgZnJvbSBldmVudC4KKGV2ZW50LWtleXN5
bSk6IEdldCBmaWVsZCBmcm9tIGV2ZW50LgooZXZlbnQtbW9kaWZpZXIpOiBHZXQgZmllbGQg
ZnJvbSBldmVudC4KKGV2ZW50LXRpbWUpOiBHZXQgZmllbGQgZnJvbSBldmVudC4KKGxsay1i
aW5kKTogRnVuY3Rpb24gdG8gY3JlYXRlIGEgYmluZGluZy4KKGxsay1ldmVudHMpOiBFdmVu
dCBoaXN0b3J5IGZvciB0YXAgZGV0ZWN0aW9uLgoobGxrLWRldGVjdC1uLXRhcCk6IEZ1bmN0
aW9uIHRvIGRldGVjdCB0YXBzLgooZGVzY3JpYmUtbG93LWxldmVsLWtleSk6IENvbW1hbmQg
dG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGEga2V5LgoobGxrLXNob3ctZXZlbnQtZGVzY3Jp
cHRpb24pOiBTaG93IGhlbHAgYnVmZmVyIHdpdGggaW5mb3JtYXRpb24KYWJvdXQgYW4gZXZl
bnQuCihsbGstaGFuZGxlKTogSGFuZGxlciBmb3Iga2V5IGV2ZW50cy4KLS0tCiBkb2MvbGlz
cHJlZi9jb21tYW5kcy50ZXhpIHwgIDI5ICsrKysKIGxpc3AvbG93LWxldmVsLWtleS5lbCAg
ICAgfCAzNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9n
dGt1dGlsLmMgICAgICAgICAgICAgfCAgODEgKysrKysrKysrCiBzcmMva2V5Ym9hcmQuYyAg
ICAgICAgICAgIHwgIDY1ICsrKysrKysrCiBzcmMva2V5Ym9hcmQuaCAgICAgICAgICAgIHwg
ICAxICsKIHNyYy9wZ3RrdGVybS5jICAgICAgICAgICAgfCAgNTUgKysrKysrCiBzcmMvdGVy
bWhvb2tzLmggICAgICAgICAgIHwgICAxICsKIHNyYy93MzJmbnMuYyAgICAgICAgICAgICAg
fCAgMTEgKysKIHNyYy93MzJ0ZXJtLmMgICAgICAgICAgICAgfCAgNDkgKysrKysrCiBzcmMv
dzMydGVybS5oICAgICAgICAgICAgIHwgICAzICstCiBzcmMveHRlcm0uYyAgICAgICAgICAg
ICAgIHwgMTQyICsrKysrKysrKysrKysrKysKIHNyYy94dGVybS5oICAgICAgICAgICAgICAg
fCAgIDIgKwogMTIgZmlsZXMgY2hhbmdlZCwgNzgwIGluc2VydGlvbnMoKyksIDEgZGVsZXRp
b24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaXNwL2xvdy1sZXZlbC1rZXkuZWwKCmRpZmYg
LS1naXQgYS9kb2MvbGlzcHJlZi9jb21tYW5kcy50ZXhpIGIvZG9jL2xpc3ByZWYvY29tbWFu
ZHMudGV4aQppbmRleCBkZjgyNjZhNzE1Ny4uOGExZjE3Njg5YzkgMTAwNjQ0Ci0tLSBhL2Rv
Yy9saXNwcmVmL2NvbW1hbmRzLnRleGkKKysrIGIvZG9jL2xpc3ByZWYvY29tbWFuZHMudGV4
aQpAQCAtMjY1OCw2ICsyNjU4LDM1IEBAIE1pc2MgRXZlbnRzCiByZXNwZWN0aXZlbHkuICBU
aGV5IGFyZSB1c3VhbGx5IGludGVycHJldGVkIGFzIGJlaW5nIHJlbGF0aXZlIHRvIHRoZQog
c2l6ZSBvZiB0aGUgb2JqZWN0IGJlbmVhdGggdGhlIGdlc3R1cmU6IGltYWdlLCB3aW5kb3cs
IGV0Yy4KIAorQGNpbmRleCBAY29kZXtsb3ctbGV2ZWwta2V5fSBldmVudAorQGl0ZW0gKGxv
dy1sZXZlbC1rZXkgQHZhcntpcy1rZXktcHJlc3N9IEB2YXJ7a2V5fSBAdmFye21vZGlmaWVy
fSBAdmFye3RpbWV9IEB2YXJ7ZnJhbWV9KQorVGhpcyBldmVudCBpcyBzZW50IG9uIHRoZSBw
aHlzaWNhbCBwcmVzcyBvciByZWxlYXNlIG9mIGtleXMsIG9ubHkgb24gR1VJCitzeXN0ZW1z
LCBjdXJyZW50bHkgWCwgTVMtV2luZG93cyBhbmQgUEdUSy4KKworQHZhcntpcy1rZXktcHJl
c3N9IGlzIEBjb2Rle3R9IGZvciBhIGtleSBwcmVzcywgQGNvZGV7bmlsfSBmb3IgYSBrZXkg
cmVsZWFzZS4KK0B2YXJ7dGltZX0gaXMgdGhlIGV2ZW50J3MgdGltZSBpbiBtaWxsaXNlY29u
ZHMsIEB2YXJ7ZnJhbWV9IGlzIHRoZQorZnJhbWUgcmVjZWl2aW5nIGl0LiBAdmFye21vZGlm
aWVyfSBpcyBAY29kZXtuaWx9IGlmIHRoZSBrZXkgaXMgbm90IGEKK21vZGlmaWVyIGtleSwg
QGNvZGV7dH0gaWYgaXQgaXMsIGJ1dCBpdCBpcyB1bmtub3duIHdoaWNoIG9uZSwgb3Igb25l
IG9mCitAY29kZXtzaGlmdH0sIEBjb2Rle2NvbnRyb2x9LCBAY29kZXttZXRhfSwgQGNvZGV7
YWx0fSwgQGNvZGV7c3VwZXJ9LAorQGNvZGV7aHlwZXJ9LgorCitAdmFye2tleX0sIGFuIGlu
dGVnZXIsIGlkZW50aWZpZXMgdGhlIGtleSBwcmVzc2VkIG9yIHJlbGVhc2VkLiAgVGhpcwor
bnVtYmVyIGlzIHBsYXRmb3JtIGRlcGVuZGVudCwgYnV0IHRoZXJlIGFyZSB2YXJpYWJsZXMg
Zm9yIG1vc3Qga2V5cyB0aGF0CitjYW4gYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUgbnVtYmVy
cyB0byBpZGVudGlmeSB0aGVtLiAgRm9yIGV4YW1wbGUsIHRoZQordmFyaWFibGUgQGNvZGV7
eGstYmFja3NwYWNlfSBpZGVudGlmaWVzIHRoZSBAa2V5e2JhY2tzcGFjZX0ga2V5LgorCitU
aGUgbmFtZXMgYXJlIHBhcmFsbGVsIHRvIHRob3NlIGZvciBLZXlTeW1zIG9uIFgsIGFzIGRl
ZmluZWQgaW4KK0BmaWxle3hrZXlzeW1kZWYuaH0uICBGb3IgZXhhbXBsZSwgQGNvZGV7WEtf
U2hpZnRfTH0gKHRoZSBsZWZ0IHNoaWZ0CitrZXkpLCBjb3JyZXNwb25kcyB0byBAY29kZXt4
ay1zaGlmdC1sfS4gIFRoZSBAZmlsZXt4a2V5c3ltZGVmLmh9IGZpbGUKK2RlZmluZXMgZGlm
ZmVyZW50IEtleVN5bXMgZm9yIGNhcGl0YWwgYW5kIHNtYWxsIHZlcnNpb25zIG9mIGxldHRl
cnMuCitGb3IgdGhpcyBldmVudCwgb25seSB0aGUgY2FwaXRhbCB2ZXJzaW9uIGlzIHVzZWQs
IHdpdGggdGhlIHZhcmlhYmxlcworQGNvZGV7eGstYX0sIEBjb2Rle3hrLWJ9LCBldGMuCisK
K1RoZXNlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYnkgY2FsbGluZyB0aGUgZnVuY3Rp
b24gQGNvZGV7bGxrLWluaXR9LgorVGhpcyBmdW5jdGlvbiBhbHNvIGJpbmRzIGEgaGFuZGxl
ciB0byB0aGlzIGV2ZW50LCB3aGljaCBhbGxvd3MgdG8gZGV0ZWN0Citkb3VibGUgdGFwcyBv
biBrZXlzIChub3JtYWxseSBtb2RpZmllciBrZXlzKSBhbmQgYmluZCBjb21tYW5kcyBvcgor
ZnVuY3Rpb25zIHRvIGJlIHJ1bi4gIFNlZSB0aGUgZnVuY3Rpb24gQGNvZGV7bGxrLWJpbmR9
LgorCiBAY2luZGV4IEBjb2Rle3ByZWVkaXQtdGV4dH0gZXZlbnQKIEBpdGVtIChwcmVlZGl0
LXRleHQgQHZhcnthcmd9KQogVGhpcyBldmVudCBpcyBzZW50IHdoZW4gYSBzeXN0ZW0gaW5w
dXQgbWV0aG9kIHRlbGxzIEVtYWNzIHRvIGRpc3BsYXkKZGlmZiAtLWdpdCBhL2xpc3AvbG93
LWxldmVsLWtleS5lbCBiL2xpc3AvbG93LWxldmVsLWtleS5lbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmM5MzExZjgyZDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9saXNwL2xvdy1sZXZlbC1rZXkuZWwKQEAgLTAsMCArMSwzNDIgQEAKKzs7OyAtKi0gbGV4
aWNhbC1iaW5kaW5nOiB0IC0qLQorCis7OyBUaGUgcGh5c2ljYWwta2V5IGV2ZW50IGlzIGxp
a2UgdGhpczoKKzs7IChsb3ctbGV2ZWwta2V5IElTLUtFWS1QUkVTUyBLRVkgTU9ESUZJRVIg
VElNRSBGUkFNRSkKKzs7IElTLUtFWS1QUkVTUyBpcyB0IGlmIHRoZSBrZXkgaGFzIGJlZW4g
cHJlc3NlZCwgbmlsIGlmIGl0IGhhcyBiZWVuIHJlbGVhc2VkLgorOzsgS0VZIGlzIHRoZSBr
ZXlzeW0gbnVtYmVyLgorOzsgTU9ESUZJRVIgaXMgdGhlIG1vZGlmaWVyIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIGtleS4gIEl0IGlzIG5pbCBpZiB0aGUga2V5IGlzCis7OyBub3QgYSBtb2Rp
Zmllci4gIEl0IGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBzaGlmdCwg
Y29udHJvbCwgbWV0YSwKKzs7IHN1cGVyLCBoeXBlciwgYWx0LiAgSXQgY2FuIGFsc28gYmUg
dCBpZiB0aGUga2V5IGlzIGEgbW9kaWZpZXIgYnV0IGl0IGNhbid0IGJlCis7OyBpZGVudGlm
aWVkLCBhcyBpbiB0aGUgUEdUSyBiYWNrZW5kLgorOzsgVElNRSBpcyB0aGUgdGltZXN0YW1w
IGluIG1pbGxpc2Vjb25kcyBvZiB0aGUgZXZlbnQuCis7OyBGUkFNRSBpcyB0aGUgZnJhbWUg
d2hlcmUgdGhlIGV2ZW50IGhhcHBlbmVkLgorOzsKKzs7IEFmdGVyIGNhbGxpbmcgJ2xsay1p
bml0JyBhbmQgc2V0dGluZyBhIG5vbi1uaWwgdmFsdWUgZm9yCis7OyAnZW5hYmxlLWxvdy1s
ZXZlbC1rZXktZXZlbnRzJywgZXZlbnRzIGJlZ2luIHRvIGJlIGhhbmRsZWQgYnkgJ2xsay1o
YW5kbGVyJywKKzs7IHdoaWNoIHRyaWVzIHRvIGRldGVjdCBuLXRhcHMgYW5kIGNhbGxzIHRo
ZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uLgorOzsKKzs7IFRvIGltcGxlbWVudCBvdGhlciBm
dW5jdGlvbmFsaXRpZXMsIHlvdSBjYW4gcmVwbGFjZSBsbGstaGFuZGxlciB3aXRoCis7OyB5
b3VyIG93biBmdW5jdGlvbi4KKworKHJlcXVpcmUgJ2NsLWxpYikKKworOzsgVXNlciBvcHRp
b25zCisKKyhkZWZ2YXIgbGxrLWJpbmRpbmdzIG5pbAorICAiTGlzdCBvZiBiaW5kaW5ncyBm
b3IgbG93IGxldmVsIGtleSBldmVudHMgKHByZXNzL3JlbGVhc2UvdGFwKS4KKworVXNlIHRo
ZSBgbGxrLWJpbmQnIGZ1bmN0aW9uIHRvIGFkZCBiaW5kaW5ncy4gIFNlZSBpdHMgZG9jdW1l
bnRhdGlvbiBmb3IKK2EgZGVzY3JpcHRpb24gb2YgdGhlIGJpbmRpbmcgaW5mb3JtYXRpb24u
IikKKworKGRlZnZhciBsbGstdGFwLWNvdW50IDIKKyAgIk51bWJlciBvciBrZXkgcHJlc3Mv
cmVsZWFzZXMgdG8gY29uc2lkZXIgYSB0YXAuIikKKworKGRlZnZhciBsbGstdGFwLXRpbWVv
dXQgMTAwMAorICAiVGltZSAobXMpIGJldHdlZW4gY29uc2VjdXRpdmUga2V5IHByZXNzZXMv
cmVsZWFzZXMgdG8gY29uc2lkZXIgYSB0YXAuIikKKworKGRlZnZhciBsbGstdGFwLWtleXMK
KyAgJyh4ay1zaGlmdC1sIHhrLXNoaWZ0LXIgeGstY29udHJvbC1sIHhrLWNvbnRyb2wtciBt
ZXRhKQorICAiS2V5cyB0aGF0IGNhbiBnZW5lcmF0ZSB0YXBzLiIpCisKKyhkZWZ2YXIgbGxr
LWtleXN5bXMgbmlsCisgICJMaXN0IG9mIGtleXN5bSBudW1iZXJzIGFuZCB0aGVpciBjb3Jy
ZXNwb25kaW5nIHN5bWJvbHMuCisKK0VhY2ggZWxlbWVudCBoYXMgdGhlIGZvcm0gKEtFWVNZ
TSAuIFNZTUJPTCkuICBUaGUgdmFyaWFibGUgdmFsdWUgZm9yCitlYWNoIHN5bWJvbCBpcyB0
aGUga2V5c3ltLiAgVGhpcyBsaXN0IGlzIGluaXRpYWxpemVkIGJ5IGBsbGstaW5pdCcuIikK
KworKGRlZnZhciBsbGstZGVzY3JpYmUtbmV4dC1wcmVzcyBuaWwKKyAgIkludGVybmFsIHZh
cmlhYmxlIHRvIG1hcmsgdGhhdCBuZXh0IGtleSBwcmVzcyBzaG91bGQgYmUgZGVzY3JpYmVk
LiIpCisKKyhkZWZtYWNybyBkZWZpbmUteGsgKG5hbWUgeC1rZXlzeW0gdzMyLWtleXN5bSkK
KyAgIkludGVybmFsIG1hY3JvIHRvIGRlZmluZSBrZXlzeW1zLiIKKyAgYChsZXQgKChrc3lt
IChwY2FzZSAod2luZG93LXN5c3RlbSkKKyAgICAgICAgICAgICAgICAgKCdwZ3RrICx4LWtl
eXN5bSkKKyAgICAgICAgICAgICAgICAgKCd4ICx4LWtleXN5bSkKKyAgICAgICAgICAgICAg
ICAgKCd3MzIgLHczMi1rZXlzeW0pKSkpCisgICAgIChkZWZjb25zdCAsbmFtZSBrc3ltICJD
b25zdGFudCBmb3IgYSBrZXlzeW0gdmFsdWUuIikKKyAgICAgKHB1c2ggKGNvbnMga3N5bSAn
LG5hbWUpIGxsay1rZXlzeW1zKSkpCisKKyhkZWZ1biBsbGstZGVmaW5lLWtleXN5bXMgKCkK
KyAgIkluaXRpYWxpemUgdGhlIGtleXN5bSBsaXN0LCBgbGxrLWtleXN5bXMnLgorCitDYWxs
ZWQgZnJvbSBgbGxrLWluaXQnLiIKKyAgKHNldHEgbGxrLWtleXN5bXMgbmlsKQorCisgIDs7
IHR0eSBrZXlzCisgIChkZWZpbmUteGsgeGstYmFja3NwYWNlICAgI3hmZjA4ICN4MDgpIDs7
IFhLX0JhY2tTcGFjZSBWS19CQUNLCisgIChkZWZpbmUteGsgeGstdGFiICAgICAgICAgI3hm
ZjA5ICN4MDkpIDs7IFhLX1RhYiBWS19UQUIKKyAgKGRlZmluZS14ayB4ay1jbGVhciAgICAg
ICAjeGZmMGIgI3gwQykgOzsgWEtfQ2xlYXIgVktfQ0xFQVIKKyAgKGRlZmluZS14ayB4ay1y
ZXR1cm4gICAgICAjeGZmMGQgI3gwRCkgOzsgWEtfUmV0dXJuIFZLX1JFVFVSTgorICAoZGVm
aW5lLXhrIHhrLXBhdXNlICAgICAgICN4ZmYxMyAjeDEzKSA7OyBYS19QYXVzZSBWS19QQVVT
RQorICAoZGVmaW5lLXhrIHhrLXNjcm9sbC1sb2NrICN4ZmYxNCAjeDkxKSA7OyBYS19TY3Jv
bGxfTG9jayBWS19TQ1JPTEwKKyAgKGRlZmluZS14ayB4ay1lc2NhcGUgICAgICAjeGZmMUIg
I3gxQikgOzsgWEtfRXNjYXBlIFZLX0VTQ0FQRQorICAoZGVmaW5lLXhrIHhrLWRlbGV0ZSAg
ICAgICN4ZmZmZiAjeDJFKSA7OyBYS19EZWxldGUgVktfREVMRVRFCisKKyAgOzsgQ3Vyc29y
IGNvbnRyb2wgYW5kIG1vdGlvbgorICAoZGVmaW5lLXhrIHhrLWhvbWUgICAgICAgICN4ZmY1
MCAjeDI0KSA7OyBYS19Ib21lIFZLX0hPTUUKKyAgKGRlZmluZS14ayB4ay1sZWZ0ICAgICAg
ICAjeGZmNTEgI3gyNSkgOzsgWEtfTGVmdCBWS19MRUZUCisgIChkZWZpbmUteGsgeGstdXAg
ICAgICAgICAgI3hmZjUyICN4MjYpIDs7IFhLX1VwIFZLX1VQCisgIChkZWZpbmUteGsgeGst
cmlnaHQgICAgICAgI3hmZjUzICN4MjcpIDs7IFhLX1JpZ2h0IFZLX1JJR0hUCisgIChkZWZp
bmUteGsgeGstZG93biAgICAgICAgI3hmZjU0ICN4MjgpIDs7IFhLX0Rvd24gVktfRE9XTgor
ICAoZGVmaW5lLXhrIHhrLXBhZ2UtdXAgICAgICN4ZmY1NSAjeDIxKSA7OyBYS19QYWdlX1Vw
IFZLX1BSSU9SCisgIChkZWZpbmUteGsgeGstcGFnZS1kb3duICAgI3hmZjU2ICN4MjIpIDs7
IFhLX1BhZ2VfRG93biBWS19ORVhUCisgIChkZWZpbmUteGsgeGstZW5kICAgICAgICAgI3hm
ZjU3ICN4MjMpIDs7IFhLX0VuZCBWS19FTkQKKyAgKGRlZmluZS14ayB4ay1iZWdpbiAgICAg
ICAjeGZmNTggI3gyNCkgOzsgWEtfQmVnaW4gVktfSE9NRQorCisgIDs7IFNwZWNpYWwgV2lu
ZG93cyBrZXlib2FyZCBrZXlzCisgIChkZWZpbmUteGsgeGstd2luLWwgICAgICAgI3hGRjVC
ICN4NUIpIDs7IFhLX1dpbl9MIFZLX0xXSU4KKyAgKGRlZmluZS14ayB4ay13aW4tciAgICAg
ICAjeEZGNUMgI3g1QykgOzsgWEtfV2luX1IgVktfUldJTgorICAoZGVmaW5lLXhrIHhrLWFw
cCAgICAgICAgICN4RkY1RCAjeDVEKSA7OyBYS19BcHAgVktfQVBQUworCisgIDs7IE1pc2Mg
ZnVuY3Rpb25zCisgIChkZWZpbmUteGsgeGstc2VsZWN0ICAgICAgI3hmZjYwICN4MjkpIDs7
IFhLX1NlbGVjdCBWS19TRUxFQ1QKKyAgKGRlZmluZS14ayB4ay1wcmludCAgICAgICAjeGZm
NjEgI3gyQSkgOzsgWEtfUHJpbnQgVktfUFJJTlQKKyAgKGRlZmluZS14ayB4ay1pbnNlcnQg
ICAgICAjeGZmNjQgI3gyRCkgOzsgWEtfSW5zZXJ0IFZLX0lOU0VSVAorICAoZGVmaW5lLXhr
IHhrLW51bS1sb2NrICAgICN4ZmY3ZiAjeDkwKSA7OyBYS19OdW1fTG9jayBWS19OVU1MT0NL
CisKKyAgOzsgS2V5cGFkCisgIDs7IFRPRE86IENoZWNrIHZhbHVlcyBmb3IgTVMtV2luZG93
cworICAoZGVmaW5lLXhrIHhrLWtwLWVudGVyICAgICN4ZmY4ZCBuaWwpIDs7IFhLX0tQX0Vu
dGVyID8/PworICAoZGVmaW5lLXhrIHhrLWtwLW11bHRpcGx5ICN4ZmZhYSBuaWwpIDs7IFhL
X0tQX011bHRpcGx5ID8/PworICAoZGVmaW5lLXhrIHhrLWtwLWFkZCAgICAgICN4ZmZhYiBu
aWwpIDs7IFhLX0tQX0FkZCA/Pz8KKyAgKGRlZmluZS14ayB4ay1rcC1zdWJ0cmFjdCAjeGZm
YWQgbmlsKSA7OyBYS19LUF9TdWJ0cmFjdCA/Pz8KKyAgKGRlZmluZS14ayB4ay1rcC1kZWNp
bWFsICAjeGZmYWUgbmlsKSA7OyBYS19LUF9EZWNpbWFsID8/PworICAoZGVmaW5lLXhrIHhr
LWtwLWRpdmlkZSAgICN4ZmZhZiBuaWwpIDs7IFhLX0tQX0RpdmlkZSA/Pz8KKyAgKGRlZmlu
ZS14ayB4ay1rcC0wICAgICAgICAjeGZmYjAgI3g2MCkgOzsgWEtfS1BfMCBWS19OVU1QQUQw
CisgIChkZWZpbmUteGsgeGsta3AtMSAgICAgICAgI3hmZmIxICN4NjEpIDs7IFhLX0tQXzEg
VktfTlVNUEFEMQorICAoZGVmaW5lLXhrIHhrLWtwLTIgICAgICAgICN4ZmZiMiAjeDYyKSA7
OyBYS19LUF8yIFZLX05VTVBBRDIKKyAgKGRlZmluZS14ayB4ay1rcC0zICAgICAgICAjeGZm
YjMgI3g2MykgOzsgWEtfS1BfMyBWS19OVU1QQUQzCisgIChkZWZpbmUteGsgeGsta3AtNCAg
ICAgICAgI3hmZmI0ICN4NjQpIDs7IFhLX0tQXzQgVktfTlVNUEFENAorICAoZGVmaW5lLXhr
IHhrLWtwLTUgICAgICAgICN4ZmZiNSAjeDY1KSA7OyBYS19LUF81IFZLX05VTVBBRDUKKyAg
KGRlZmluZS14ayB4ay1rcC02ICAgICAgICAjeGZmYjYgI3g2NikgOzsgWEtfS1BfNiBWS19O
VU1QQUQ2CisgIChkZWZpbmUteGsgeGsta3AtNyAgICAgICAgI3hmZmI3ICN4NjcpIDs7IFhL
X0tQXzcgVktfTlVNUEFENworICAoZGVmaW5lLXhrIHhrLWtwLTggICAgICAgICN4ZmZiOCAj
eDY4KSA7OyBYS19LUF84IFZLX05VTVBBRDgKKyAgKGRlZmluZS14ayB4ay1rcC05ICAgICAg
ICAjeGZmYjkgI3g2OSkgOzsgWEtfS1BfOSBWS19OVU1QQUQ5CisKKyAgOzsgRnVuY3Rpb24g
a2V5cworICAoZGVmaW5lLXhrIHhrLWYxICAgICAgICAgICN4ZmZiZSAjeDcwKSA7OyBYS19G
MSBWS19GMQorICAoZGVmaW5lLXhrIHhrLWYyICAgICAgICAgICN4ZmZiZiAjeDcxKSA7OyBY
S19GMiBWS19GMgorICAoZGVmaW5lLXhrIHhrLWYzICAgICAgICAgICN4ZmZjMCAjeDcyKSA7
OyBYS19GMyBWS19GMworICAoZGVmaW5lLXhrIHhrLWY0ICAgICAgICAgICN4ZmZjMSAjeDcz
KSA7OyBYS19GNCBWS19GNAorICAoZGVmaW5lLXhrIHhrLWY1ICAgICAgICAgICN4ZmZjMiAj
eDc0KSA7OyBYS19GNSBWS19GNQorICAoZGVmaW5lLXhrIHhrLWY2ICAgICAgICAgICN4ZmZj
MyAjeDc1KSA7OyBYS19GNiBWS19GNgorICAoZGVmaW5lLXhrIHhrLWY3ICAgICAgICAgICN4
ZmZjNCAjeDc2KSA7OyBYS19GNyBWS19GNworICAoZGVmaW5lLXhrIHhrLWY4ICAgICAgICAg
ICN4ZmZjNSAjeDc3KSA7OyBYS19GOCBWS19GOAorICAoZGVmaW5lLXhrIHhrLWY5ICAgICAg
ICAgICN4ZmZjNiAjeDc4KSA7OyBYS19GOSBWS19GOQorICAoZGVmaW5lLXhrIHhrLWYxMCAg
ICAgICAgICN4ZmZjNyAjeDc5KSA7OyBYS19GMTAgVktfRjEwCisgIChkZWZpbmUteGsgeGst
ZjExICAgICAgICAgI3hmZmM4ICN4N0EpIDs7IFhLX0YxMSBWS19GMTEKKyAgKGRlZmluZS14
ayB4ay1mMTIgICAgICAgICAjeGZmYzkgI3g3QikgOzsgWEtfRjEyIFZLX0YxMgorICAoZGVm
aW5lLXhrIHhrLWYxMyAgICAgICAgICN4ZmZjYSAjeDdDKSA7OyBYS19GMTMgVktfRjEzCisg
IChkZWZpbmUteGsgeGstZjE0ICAgICAgICAgI3hmZmNiICN4N0QpIDs7IFhLX0YxNCBWS19G
MTQKKyAgKGRlZmluZS14ayB4ay1mMTUgICAgICAgICAjeGZmY2MgI3g3RSkgOzsgWEtfRjE1
IFZLX0YxNQorICAoZGVmaW5lLXhrIHhrLWYxNiAgICAgICAgICN4ZmZjZCAjeDdGKSA7OyBY
S19GMTYgVktfRjE2CisgIChkZWZpbmUteGsgeGstZjE3ICAgICAgICAgI3hmZmNlICN4ODAp
IDs7IFhLX0YxNyBWS19GMTcKKyAgKGRlZmluZS14ayB4ay1mMTggICAgICAgICAjeGZmY2Yg
I3g4MSkgOzsgWEtfRjE4IFZLX0YxOAorICAoZGVmaW5lLXhrIHhrLWYxOSAgICAgICAgICN4
ZmZkMCAjeDgyKSA7OyBYS19GMTkgVktfRjE5CisgIChkZWZpbmUteGsgeGstZjIwICAgICAg
ICAgI3hmZmQxICN4ODMpIDs7IFhLX0YyMCBWS19GMjAKKyAgKGRlZmluZS14ayB4ay1mMjEg
ICAgICAgICAjeGZmZDIgI3g4NCkgOzsgWEtfRjIxIFZLX0YyMQorICAoZGVmaW5lLXhrIHhr
LWYyMiAgICAgICAgICN4ZmZkMyAjeDg1KSA7OyBYS19GMjIgVktfRjIyCisgIChkZWZpbmUt
eGsgeGstZjIzICAgICAgICAgI3hmZmQ0ICN4ODYpIDs7IFhLX0YyMyBWS19GMjMKKyAgKGRl
ZmluZS14ayB4ay1mMjQgICAgICAgICAjeGZmZDUgI3g4NykgOzsgWEtfRjI0IFZLX0YyNAor
CisgIDs7IE1vZGlmaWVyIGtleXMKKyAgKGRlZmluZS14ayB4ay1zaGlmdC1sICAgICAjeGZm
ZTEgI3hBMCkgOzsgWEtfU2hpZnRfTCBWS19MU0hJRlQKKyAgKGRlZmluZS14ayB4ay1zaGlm
dC1yICAgICAjeGZmZTIgI3hBMSkgOzsgWEtfU2hpZnRfUiBWS19SU0hJRlQKKyAgKGRlZmlu
ZS14ayB4ay1jb250cm9sLWwgICAjeGZmZTMgI3hBMikgOzsgWEtfQ29udHJvbF9MIFZLX0xD
T05UUk9MCisgIChkZWZpbmUteGsgeGstY29udHJvbC1yICAgI3hmZmU0ICN4QTMpIDs7IFhL
X0NvbnRyb2xfUiBWS19SQ09OVFJPTAorICAoZGVmaW5lLXhrIHhrLWNhcHMtbG9jayAgICN4
ZmZlNSAjeDE0KSA7OyBYS19DYXBzX0xvY2sgVktfQ0FQSVRBTAorICAoZGVmaW5lLXhrIHhr
LW1ldGFsLWwgICAgICN4ZmZlNyBuaWwpIDs7IFhLX01ldGFfTAorICAoZGVmaW5lLXhrIHhr
LW1ldGFsLXQgICAgICN4ZmZlZSBuaWwpIDs7IFhLX01ldGFfUgorICAoZGVmaW5lLXhrIHhr
LWFsdC1sICAgICAgICN4ZmZlOSAjeEE0KSA7OyBYS19BbHRfTCBWS19MTUVOVQorICAoZGVm
aW5lLXhrIHhrLWFsdC1yICAgICAgICN4ZmZlYSAjeEE1KSA7OyBYS19BbHRfUiBWS19STUVO
VQorICAoZGVmaW5lLXhrIHhrLXN1cGVyLWwgICAgICN4ZmZlYiBuaWwpIDs7IFhLX1N1cGVy
X0wKKyAgKGRlZmluZS14ayB4ay1zdXBlci1yICAgICAjeGZmZWMgbmlsKSA7OyBYS19TdXBl
cl9SCisgIChkZWZpbmUteGsgeGstaHlwZXItbCAgICAgI3hmZmVkIG5pbCkgOzsgWEtfSHlw
ZXJfTAorICAoZGVmaW5lLXhrIHhrLWh5cGVyLXIgICAgICN4ZmZlZSBuaWwpIDs7IFhLX0h5
cGVyX1IKKworICA7OyBMYXRpbiAxCisgIDs7IEZvciBudW1iZXJzIGFuZCBsZXR0ZXJzLCBN
Uy1XaW5kb3dzIGRvZXMgbm90IGRlZmluZSBjb25zdGFudCBuYW1lcy4KKyAgOzsgWDExIGRl
ZmluZXMgZGlzdGluY3Qga2V5c3ltcyBmb3IgbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2UKKyAg
OzsgbGV0dGVycy4gIFdlIHVzZSBvbmx5IHRoZSB1cHBlcmNhc2Ugb25lcy4gIEV2ZW50cyB3
aXRoIGxvd2VyY2FzZQorICA7OyBsZXR0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNl
LgorICAoZGVmaW5lLXhrIHhrLXNwYWNlICAgICAgICN4MDAyMCAjeDIwKSA7OyBYS19zcGFj
ZSBWS19TUEFDRQorICAoZGVmaW5lLXhrIHhrLTAgICAgICAgICAgICN4MDAzMCAjeDMwKSA7
OyBYS18wCisgIChkZWZpbmUteGsgeGstMSAgICAgICAgICAgI3gwMDMxICN4MzEpIDs7IFhL
XzEKKyAgKGRlZmluZS14ayB4ay0yICAgICAgICAgICAjeDAwMzIgI3gzMikgOzsgWEtfMgor
ICAoZGVmaW5lLXhrIHhrLTMgICAgICAgICAgICN4MDAzMyAjeDMzKSA7OyBYS18zCisgIChk
ZWZpbmUteGsgeGstNCAgICAgICAgICAgI3gwMDM0ICN4MzQpIDs7IFhLXzQKKyAgKGRlZmlu
ZS14ayB4ay01ICAgICAgICAgICAjeDAwMzUgI3gzNSkgOzsgWEtfNQorICAoZGVmaW5lLXhr
IHhrLTYgICAgICAgICAgICN4MDAzNiAjeDM2KSA7OyBYS182CisgIChkZWZpbmUteGsgeGst
NyAgICAgICAgICAgI3gwMDM3ICN4MzcpIDs7IFhLXzcKKyAgKGRlZmluZS14ayB4ay04ICAg
ICAgICAgICAjeDAwMzggI3gzOCkgOzsgWEtfOAorICAoZGVmaW5lLXhrIHhrLTkgICAgICAg
ICAgICN4MDAzOSAjeDM5KSA7OyBYS185CisgIChkZWZpbmUteGsgeGstYSAgICAgICAgICAg
I3gwMDQxICN4NDEpIDs7IFhLX0EKKyAgKGRlZmluZS14ayB4ay1iICAgICAgICAgICAjeDAw
NDIgI3g0MikgOzsgWEtfQgorICAoZGVmaW5lLXhrIHhrLWMgICAgICAgICAgICN4MDA0MyAj
eDQzKSA7OyBYS19DCisgIChkZWZpbmUteGsgeGstZCAgICAgICAgICAgI3gwMDQ0ICN4NDQp
IDs7IFhLX0QKKyAgKGRlZmluZS14ayB4ay1lICAgICAgICAgICAjeDAwNDUgI3g0NSkgOzsg
WEtfRQorICAoZGVmaW5lLXhrIHhrLWYgICAgICAgICAgICN4MDA0NiAjeDQ2KSA7OyBYS19G
CisgIChkZWZpbmUteGsgeGstZyAgICAgICAgICAgI3gwMDQ3ICN4NDcpIDs7IFhLX0cKKyAg
KGRlZmluZS14ayB4ay1oICAgICAgICAgICAjeDAwNDggI3g0OCkgOzsgWEtfSAorICAoZGVm
aW5lLXhrIHhrLWkgICAgICAgICAgICN4MDA0OSAjeDQ5KSA7OyBYS19JCisgIChkZWZpbmUt
eGsgeGstaiAgICAgICAgICAgI3gwMDRBICN4NEEpIDs7IFhLX0oKKyAgKGRlZmluZS14ayB4
ay1rICAgICAgICAgICAjeDAwNEIgI3g0QikgOzsgWEtfSworICAoZGVmaW5lLXhrIHhrLWwg
ICAgICAgICAgICN4MDA0QyAjeDRDKSA7OyBYS19MCisgIChkZWZpbmUteGsgeGstbSAgICAg
ICAgICAgI3gwMDREICN4NEQpIDs7IFhLX00KKyAgKGRlZmluZS14ayB4ay1uICAgICAgICAg
ICAjeDAwNEUgI3g0RSkgOzsgWEtfTgorICAoZGVmaW5lLXhrIHhrLW8gICAgICAgICAgICN4
MDA0RiAjeDRGKSA7OyBYS19PCisgIChkZWZpbmUteGsgeGstcCAgICAgICAgICAgI3gwMDUw
ICN4NTApIDs7IFhLX1AKKyAgKGRlZmluZS14ayB4ay1xICAgICAgICAgICAjeDAwNTEgI3g1
MSkgOzsgWEtfUQorICAoZGVmaW5lLXhrIHhrLXIgICAgICAgICAgICN4MDA1MiAjeDUyKSA7
OyBYS19SCisgIChkZWZpbmUteGsgeGstcyAgICAgICAgICAgI3gwMDUzICN4NTMpIDs7IFhL
X1MKKyAgKGRlZmluZS14ayB4ay10ICAgICAgICAgICAjeDAwNTQgI3g1NCkgOzsgWEtfVAor
ICAoZGVmaW5lLXhrIHhrLXUgICAgICAgICAgICN4MDA1NSAjeDU1KSA7OyBYS19VCisgIChk
ZWZpbmUteGsgeGstdiAgICAgICAgICAgI3gwMDU2ICN4NTYpIDs7IFhLX1YKKyAgKGRlZmlu
ZS14ayB4ay13ICAgICAgICAgICAjeDAwNTcgI3g1NykgOzsgWEtfVworICAoZGVmaW5lLXhr
IHhrLXggICAgICAgICAgICN4MDA1OCAjeDU4KSA7OyBYS19YCisgIChkZWZpbmUteGsgeGst
eSAgICAgICAgICAgI3gwMDU5ICN4NTkpIDs7IFhLX1kKKyAgKGRlZmluZS14ayB4ay16ICAg
ICAgICAgICAjeDAwNUEgI3g1QSkpOzsgWEtfWgorCisoZGVmdW4gbGxrLWluaXQgKCkKKyAg
IkluaXRpYWxpemUgbG93IGxldmVsIGtleSBldmVudHMuCisKK0ZpbGxzIHRoZSBgbGxrLWtl
eXN5bXMnIGxpc3QsIGFuZCBiaW5kcyB0aGUgYGxvdy1sZXZlbC1rZXknIGV2ZW50Cit0byB0
aGUgYGxsay1oYW5kbGUnIGZ1bmN0aW9uLiAgUmVzZXRzIHRoZSBgbGxrLWJpbmRpbmdzJyBs
aXN0LgorQmVzaWRlcyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHlvdSBuZWVkIHRvIHNldCBg
ZW5hYmxlLWxvdy1sZXZlbC1rZXktZXZlbnRzJwordG8gYSBub24tbmlsIHZhbHVlLiIKKyAg
KGludGVyYWN0aXZlKQorICAobGxrLWRlZmluZS1rZXlzeW1zKQorICAoZGVmaW5lLWtleSBz
cGVjaWFsLWV2ZW50LW1hcCBbbG93LWxldmVsLWtleV0gJ2xsay1oYW5kbGUpCisgIChzZXRx
IGxsay1iaW5kaW5ncyBuaWwpKQorCisoZGVmc3Vic3QgZXZlbnQtaXMta2V5LXByZXNzIChl
dmVudCkKKyAgIlJldHVybiB0aGUgdmFsdWUgb2YgdGhlIElTLUtFWS1QUkVTUyBmaWVsZCBv
ZiB0aGUgRVZFTlQsIGEgbG93IGxldmVsIGtleSBldmVudC4iCisgIChkZWNsYXJlIChzaWRl
LWVmZmVjdC1mcmVlIHQpKQorICAoaWYgKGNvbnNwIGV2ZW50KSAobnRoIDEgZXZlbnQpKSkK
KworKGRlZnN1YnN0IGV2ZW50LWtleXN5bSAoZXZlbnQpCisgICJSZXR1cm4gdGhlIHZhbHVl
IG9mIHRoZSBLRVkgZmllbGQgb2YgdGhlIEVWRU5ULCBhIGxvdyBsZXZlbCBrZXkgZXZlbnQu
IgorICAoZGVjbGFyZSAoc2lkZS1lZmZlY3QtZnJlZSB0KSkKKyAgKGlmIChjb25zcCBldmVu
dCkgKG50aCAyIGV2ZW50KSkpCisKKyhkZWZzdWJzdCBldmVudC1tb2RpZmllciAoZXZlbnQp
CisgICJSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBNT0RJRklFUiBmaWVsZCBvZiB0aGUgRVZF
TlQsIGEgbG93IGxldmVsIGtleSBldmVudC4iCisgIChkZWNsYXJlIChzaWRlLWVmZmVjdC1m
cmVlIHQpKQorICAoaWYgKGNvbnNwIGV2ZW50KSAobnRoIDMgZXZlbnQpKSkKKworKGRlZnN1
YnN0IGV2ZW50LXRpbWUgKGV2ZW50KQorICAiUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgVElN
RSBmaWVsZCBvZiB0aGUgRVZFTlQsIGEgbG93IGxldmVsIGtleSBldmVudC4iCisgIChkZWNs
YXJlIChzaWRlLWVmZmVjdC1mcmVlIHQpKQorICAoaWYgKGNvbnNwIGV2ZW50KSAobnRoIDQg
ZXZlbnQpKSkKKworOzsgRm9yIGV4YW1wbGU6Cis7OyBCaW5kIGtleSB0YXAgdG8gY29tbWFu
ZAorOzsgICAgKGxsay1iaW5kICd0YXAgJ3hrLXNoaWZ0LWwgJ2RlbGV0ZS1vdGhlci13aW5k
b3dzKQorOzsgQmluZCBtb2RpZmllciB0YXAgdG8gY29tbWFuZAorOzsgICAgIChsbGstYmlu
ZCAndGFwICdzaGlmdCAnZGVsZXRlLW90aGVyLXdpbmRvd3MpCis7OyBCaW5kIHRhcCB0byBo
eXBlciBtb2RpZmllcgorOzsgICAgICAobGxrLWJpbmQgJ3RhcCAneGstc2hpZnQtciAobGFt
YmRhICgpCis7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlICJILS4u
LiIpCis7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHVucmVhZC1jb21t
YW5kLWV2ZW50cworOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBw
ZW5kIChldmVudC1hcHBseS1oeXBlci1tb2RpZmllciBuaWwpIG5pbCkpKSkKKzs7IENhbiBi
aW5kIHRvIGEgY29tbWFuZCBvciBmdW5jdGlvbgorKGRlZnVuIGxsay1iaW5kIChhY3Rpb24g
a2V5IGZ1bmN0aW9uKQorICAiQmluZCBhIGNvbW1hbmQgb3IgZnVuY3Rpb24gdG8gYSBsb3cg
bGV2ZWwga2V5IGV2ZW50LgorCitUaGUgb25seSBhY3Rpb24gc3VwcG9ydGVkIGN1cnJlbnRs
eSBpcyBgdGFwJy4gIFRoZSBrZXkgY2FuIGJlIGEga2V5c3ltCitzeW1ib2wsIG9yIGEgbW9k
aWZpZXIgc3ltYm9sIChzaGlmdCwgY29udHJvbCwgYWx0LCBtZXRhLCBoeXBlciwgc3VwZXIp
LgorSWYgdGhlcmUgaXMgbm8ga2V5c3ltIHN5bWJvbCBmb3IgYSBrZXksIHVzZSB0aGUga2V5
c3ltIG51bWJlci4iCisgIChwdXNoIChsaXN0IGFjdGlvbiBrZXkgZnVuY3Rpb24pIGxsay1i
aW5kaW5ncykpCisKKzs7IFdlIHN0b3JlIHRoZSBsYXN0IGV2ZW50cyAoa2V5L21vZGlmaWVy
IGlzLXByZXNzIHRpbWVzdGFtcCkgaGVyZSB0bworOzsgdGVzdCBmb3IgbXVsdGl0YXAuCiso
ZGVmdmFyIGxsay1ldmVudHMgbmlsCisgICJJbnRlcm5hbCB2YXJpYWJsZSBmb3IgZGV0ZWN0
aW5nIHRhcHMuIikKKworOzsgSWYgcG9zaXRpdmUsIHJldHVybiBrZXkgKHhrLXNoaWZ0LWws
IGV0YykgZWxzZSByZXR1cm4gbmlsLgorKGRlZnVuIGxsay1kZXRlY3Qtbi10YXAgKG4gdGlt
ZW91dCkKKyAgIkludGVybmFsIGZ1bmN0aW9uIHRvIGRldGVjdCBuLXRhcCBrZXlzLiIKKyAg
KGxldCAoa2V5CisgICAgICAgIChpcy1wcmVzcyAoZXZlbnQtaXMta2V5LXByZXNzIGxhc3Qt
aW5wdXQtZXZlbnQpKQorICAgICAgICA7OyBjb252ZXJ0IG51bWJlciB0byBrZXlzeW0gc3lt
Ym9sCisgICAgICAgIChrZXlzeW0gKGNkciAoYXNzb2MgKGV2ZW50LWtleXN5bSBsYXN0LWlu
cHV0LWV2ZW50KSBsbGsta2V5c3ltcykpKQorICAgICAgICAodGltZXN0YW1wIChldmVudC10
aW1lIGxhc3QtaW5wdXQtZXZlbnQpKQorICAgICAgICAobW9kaWZpZXIgKGV2ZW50LW1vZGlm
aWVyIGxhc3QtaW5wdXQtZXZlbnQpKSkKKworICAgIDs7IGlmIGVodGUgaXMgbm8gc3ltYm9s
IGZvciB0aGlzIGtleSwgdXNlIGl0cyBrZXlzeW0gbnVtYmVyCisgICAgKHVubGVzcyBrZXlz
eW0gKHNldHEga2V5c3ltIChldmVudC1rZXlzeW0gbGFzdC1pbnB1dC1ldmVudCkpKQorCisg
ICAgOzsgbG9vayBpbiBsbGstdGFwLWtleXMgZm9yIHRoZSBrZXksIHRoZW4gdGhlIG1vZGlm
aWVyCisgICAgKGlmIChtZW1iZXIga2V5c3ltIGxsay10YXAta2V5cykKKyAgICAgICAgKHNl
dHEga2V5IGtleXN5bSkKKyAgICAgIChpZiAobWVtYmVyIG1vZGlmaWVyIGxsay10YXAta2V5
cykKKyAgICAgICAgICAoc2V0cSBrZXkgbW9kaWZpZXIpKSkKKworICAgIChpZiAobm90IGtl
eSkKKyAgICAgICAgOzsgS2V5IG5vdCBpbiB0YXAgbGlzdCwgY2xlYXIgaGlzdG9yeQorICAg
ICAgICAoc2V0cSBsbGstZXZlbnRzIG5pbCkKKyAgICAgIDs7IENsZWFyIGl0IGFsc28gaWYg
dGhlIGZpcnN0IGVsZW1lbnQgaXMgZnJvbSBhIGRpZmZlcmVudCBrZXkKKyAgICAgIChhbmQg
bGxrLWV2ZW50cworICAgICAgICAgICAobm90IChlcXVhbCAoY2FyIChjYXIgbGxrLWV2ZW50
cykpIGtleSkpCisgICAgICAgICAgIChzZXRxIGxsay1ldmVudHMgbmlsKSkKKyAgICAgIChw
dXNoIChsaXN0IGtleSBpcy1wcmVzcyB0aW1lc3RhbXApIGxsay1ldmVudHMpCisgICAgICA7
OyBPbmx5IGNhcmUgYWJvdXQgbGFzdCAyeE4gZXZlbnRzCisgICAgICAobnRha2UgKCogMiBu
KSBsbGstZXZlbnRzKQorICAgICAgOzsgSWYgd2UgaGF2ZToKKyAgICAgIDs7IC0gRXhhY3Rs
eSAyICogbiBldmVudHMuCisgICAgICA7OyAtIGRvd24sIHVwLCBkb3duLCB1cCwgLi4uCisg
ICAgICA7OyAtIG5vdCB0d28gbXVjaCB0aW1lIGJldHdlZW4gZmlyc3QgYW5kIGxhc3QKKyAg
ICAgIChhbmQgKGVxICgqIDIgbikgKGxlbmd0aCBsbGstZXZlbnRzKSkKKyAgICAgICAgICAg
KGNsLWV2ZXJ5ICdlcQorICAgICAgICAgICAgICAgICAgICAgKG50YWtlICgqIDIgbikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCBuaWwgdCBuaWwgdCBuaWwgdCBuaWwg
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCB0IG5pbCB0IG5pbCB0
IG5pbCB0KSkKKyAgICAgICAgICAgICAgICAgICAgIChtYXBjYXIgJ2NsLXNlY29uZCBsbGst
ZXZlbnRzKSkKKyAgICAgICAgICAgKDwgKC0gKGNsLXRoaXJkIChjbC1maXJzdCBsbGstZXZl
bnRzKSkKKyAgICAgICAgICAgICAgICAgKGNsLXRoaXJkIChjYXIgKGxhc3QgbGxrLWV2ZW50
cykpKSkKKyAgICAgICAgICAgICAgdGltZW91dCkKKyAgICAgICAgICAgKHByb2duCisgICAg
ICAgICAgICAgKHNldHEgbGxrLWV2ZW50cyBuaWwpCisgICAgICAgICAgICAga2V5KSkpKSkK
KworKGRlZnVuIGRlc2NyaWJlLWxvdy1sZXZlbC1rZXkgKCkKKyAgIldhaXQgZm9yIGtleSBw
cmVzcyBhbmQgZGVzY3JpYmUgdGhlIGxvdyBsZXZlbCBrZXkgZXZlbnQgaXQgZ2VuZXJhdGVz
LiIKKyAgKGludGVyYWN0aXZlKQorICAoc2V0cSBsbGstZGVzY3JpYmUtbmV4dC1wcmVzcyB0
KSkKKworKGRlZnVuIGxsay1zaG93LWV2ZW50LWRlc2NyaXB0aW9uICgpCisgICJTaG93IGlu
Zm9ybWF0aW9uIGFib3V0IHRoZSBsYXN0IGxvdyBsZXZlbCBrZXkgZXZlbnQuIgorICAoc2V0
cSBsbGstZGVzY3JpYmUtbmV4dC1wcmVzcyBuaWwpCisgICh3aXRoLWhlbHAtd2luZG93ICho
ZWxwLWJ1ZmZlcikKKyAgICAoaW5zZXJ0ICJcbiIpCisgICAgKGxldCogKCh4ayAoZXZlbnQt
a2V5c3ltIGxhc3QtaW5wdXQtZXZlbnQpKQorICAgICAgICAgICAoc3ltIChhc3NvYyB4ayBs
bGsta2V5c3ltcykpKQorICAgICAgKGluc2VydCAoZm9ybWF0ICJLZXlzeW0gbnVtYmVyOiAl
ZCAoI3glWCksXG4iIHhrIHhrKSkKKyAgICAgIChpZiBzeW0KKyAgICAgICAgICAoaW5zZXJ0
IChmb3JtYXQgIndoaWNoIGNvcnJlc3BvbmRzIHRvIG5hbWVkIGtleSAlcy5cblxuIiAoY2Ry
IHN5bSkpKQorICAgICAgICAoaW5zZXJ0ICJ3aGljaCBkb2VzIG5vdCBjb3JyZXNwb25kIHRv
IGFueSBrbm93biBuYW1lZCBrZXkuXG5cbiIpKQorICAgICAgKGlmIChldmVudC1tb2RpZmll
ciBsYXN0LWlucHV0LWV2ZW50KQorICAgICAgICAgIChpbnNlcnQgKGZvcm1hdCAiVGhpcyBr
ZXkgY29ycmVzcG9uZHMgdG8gdGhlICVzIG1vZGlmaWVyLlxuXG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIChldmVudC1tb2RpZmllciBsYXN0LWlucHV0LWV2ZW50KSkpCisgICAg
ICAgIChpbnNlcnQgIlRoaXMga2V5IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBtb2RpZmll
ci5cblxuIikpCisgICAgICAoaW5zZXJ0ICJTZWUgdGhlIHZhbHVlIG9mIHRoZSBgbGxrLWtl
eXN5bXMnIHZhcmlhYmxlIGZvciBhIGxpc3Qgb2Yga25vd24ga2V5cy5cbiIpKSkpCisKKyhk
ZWZ1biBsbGstaGFuZGxlICgpCisgICJJbnRlcm5hbCBmdW5jdGlvbiB0byBoYW5kbGUgbG93
IGxldmVsIGtleSBldmVudHMuIgorICAoaW50ZXJhY3RpdmUpCisgIChpZiAoYW5kIChldmVu
dC1pcy1rZXktcHJlc3MgbGFzdC1pbnB1dC1ldmVudCkKKyAgICAgICAgICAgbGxrLWRlc2Ny
aWJlLW5leHQtcHJlc3MpCisgICAgICAobGxrLXNob3ctZXZlbnQtZGVzY3JpcHRpb24pCisg
ICAgKGxldCAoKHRhcC1rZXkgKGxsay1kZXRlY3Qtbi10YXAKKyAgICAgICAgICAgICAgICAg
ICAgbGxrLXRhcC1jb3VudAorICAgICAgICAgICAgICAgICAgICBsbGstdGFwLXRpbWVvdXQp
KSkKKyAgICAgICh3aGVuIHRhcC1rZXkKKyAgICAgICAgKGxldCAoKGZ1bmMgKGNsLXRoaXJk
CisgICAgICAgICAgICAgICAgICAgICAoc2VxLWZpbmQKKyAgICAgICAgICAgICAgICAgICAg
ICAobGFtYmRhIChiKQorICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoZXEgKGNsLWZp
cnN0IGIpICd0YXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcSAoY2wtc2Vj
b25kIGIpIHRhcC1rZXkpKSkKKyAgICAgICAgICAgICAgICAgICAgICBsbGstYmluZGluZ3Mp
KSkpCisgICAgICAgICAgKGNvbmQKKyAgICAgICAgICAgKChjb21tYW5kcCBmdW5jKSAoY2Fs
bC1pbnRlcmFjdGl2ZWx5IGZ1bmMpKQorICAgICAgICAgICAoKGZ1bmN0aW9ucCBmdW5jKSAo
ZnVuY2FsbCBmdW5jKSkpKSkpKSkKZGlmZiAtLWdpdCBhL3NyYy9ndGt1dGlsLmMgYi9zcmMv
Z3RrdXRpbC5jCmluZGV4IGQ1NzYyN2YxNTJmLi44NmQ0MzIxY2YzNSAxMDA2NDQKLS0tIGEv
c3JjL2d0a3V0aWwuYworKysgYi9zcmMvZ3RrdXRpbC5jCkBAIC05OCw2ICs5OCw3IEBAIEdf
REVGSU5FX1RZUEUgKEVtYWNzTWVudUJhciwgZW1hY3NfbWVudV9iYXIsIEdUS19UWVBFX01F
TlVfQkFSKQogc3RhdGljIHZvaWQgeGdfaW1fY29udGV4dF9wcmVlZGl0X2NoYW5nZWQgKEd0
a0lNQ29udGV4dCAqLCBncG9pbnRlcik7CiBzdGF0aWMgdm9pZCB4Z19pbV9jb250ZXh0X3By
ZWVkaXRfZW5kIChHdGtJTUNvbnRleHQgKiwgZ3BvaW50ZXIpOwogc3RhdGljIGJvb2wgeGdf
d2lkZ2V0X2tleV9wcmVzc19ldmVudF9jYiAoR3RrV2lkZ2V0ICosIEdka0V2ZW50ICosIGdw
b2ludGVyKTsKK3N0YXRpYyBib29sIHhnX3dpZGdldF9rZXlfcmVsZWFzZV9ldmVudF9jYiAo
R3RrV2lkZ2V0ICosIEdka0V2ZW50ICosIGdwb2ludGVyKTsKICNlbmRpZgogCiAjaWYgR1RL
X0NIRUNLX1ZFUlNJT04gKDMsIDEwLCAwKQpAQCAtMTc0OSw2ICsxNzUwLDEyIEBAIHhnX2Ny
ZWF0ZV9mcmFtZV93aWRnZXRzIChzdHJ1Y3QgZnJhbWUgKmYpCiAgIGdfc2lnbmFsX2Nvbm5l
Y3QgKEdfT0JKRUNUICh3Zml4ZWQpLCAia2V5LXByZXNzLWV2ZW50IiwKIAkJICAgIEdfQ0FM
TEJBQ0sgKHhnX3dpZGdldF9rZXlfcHJlc3NfZXZlbnRfY2IpLAogCQkgICAgTlVMTCk7CisK
KyAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdmaXhlZCksICJrZXktcmVsZWFzZS1l
dmVudCIsCisJCSAgICBHX0NBTExCQUNLICh4Z193aWRnZXRfa2V5X3JlbGVhc2VfZXZlbnRf
Y2IpLAorCQkgICAgTlVMTCk7CisKKwogI2VuZGlmCiAKICAgewpAQCAtNjM3Niw2ICs2Mzgz
LDUzIEBAIHhnX2ltX2NvbnRleHRfcHJlZWRpdF9lbmQgKEd0a0lNQ29udGV4dCAqaW1jLCBn
cG9pbnRlciB1c2VyX2RhdGEpCiAgIGtiZF9idWZmZXJfc3RvcmVfZXZlbnQgKCZpbmV2KTsK
IH0KIAorI2lmbmRlZiBIQVZFX1hJTlBVVDIKK3N0YXRpYyB2b2lkCit4Z19tYXliZV9zZW5k
X2xvd19sZXZlbF9rZXlfZXZlbnQgKHN0cnVjdCBmcmFtZSAqZiwKKwkJCQkgICBHZGtFdmVu
dCAqeGV2KQoreworICBHZGtFdmVudEtleSB4a2V5ID0geGV2LT5rZXk7CisgIGJvb2wgaXNf
cHJlc3M7CisgIExpc3BfT2JqZWN0IGtleSwgbW9kaWZpZXI7CisgIHVuaW9uIGJ1ZmZlcmVk
X2lucHV0X2V2ZW50IGluZXY7CisKKyAgaWYgKE5JTFAgKFZlbmFibGVfbG93X2xldmVsX2tl
eV9ldmVudHMpKQorICAgIHJldHVybjsKKworICBzd2l0Y2ggKHhldi0+dHlwZSkKKyAgICB7
CisgICAgY2FzZSBHREtfS0VZX1BSRVNTOgorICAgICAgaXNfcHJlc3MgPSB0cnVlOworICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHREtfS0VZX1JFTEVBU0U6CisgICAgICBpc19wcmVzcyA9
IGZhbHNlOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgbW9kaWZpZXIgPSB4X2dldF9tb2RpZmllcl9mb3Jfa2V5Y29kZSAoRlJBTUVf
T1VUUFVUX0RBVEEgKGYpLT5kaXNwbGF5X2luZm8sCisJCQkJCSB4ZXYtPmtleS5oYXJkd2Fy
ZV9rZXljb2RlKTsKKworICBpbnQga2V5c3ltID0geGtleS5rZXl2YWw7CisKKyAgaWYgKGtl
eXN5bSA+PSBHREtfS0VZX2EgJiYga2V5c3ltIDw9IEdES19LRVlfeikKKyAgICBrZXlzeW0g
LT0gR0RLX0tFWV9hIC0gR0RLX0tFWV9BOworCisgIGlmICgha2JkX2xvd19sZXZlbF9rZXlf
aXNfZW5hYmxlZCAoa2V5c3ltLCBtb2RpZmllcikpCisgICAgcmV0dXJuOworCisgIGtleSA9
IG1ha2VfZml4bnVtIChrZXlzeW0pOworCisgIEVWRU5UX0lOSVQgKGluZXYuaWUpOworICBY
U0VURlJBTUUgKGluZXYuaWUuZnJhbWVfb3Jfd2luZG93LCBmKTsKKyAgaW5ldi5pZS5raW5k
ID0gTE9XX0xFVkVMX0tFWV9FVkVOVDsKKyAgaW5ldi5pZS50aW1lc3RhbXAgPSB4a2V5LnRp
bWU7CisgIGluZXYuaWUuYXJnID0gbGlzdDMgKGlzX3ByZXNzID8gUXQgOiBRbmlsLCBrZXks
IG1vZGlmaWVyKTsKKyAga2JkX2J1ZmZlcl9zdG9yZV9idWZmZXJlZF9ldmVudCAoJmluZXYs
ICZ4Z19wZW5kaW5nX3F1aXRfZXZlbnQpOworfQorI2VuZGlmCisKIHN0YXRpYyBib29sCiB4
Z193aWRnZXRfa2V5X3ByZXNzX2V2ZW50X2NiIChHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZl
bnQgKmV2ZW50LAogCQkJICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQpAQCAtNjQwNCw2ICs2
NDU4LDEwIEBAIHhnX3dpZGdldF9rZXlfcHJlc3NfZXZlbnRfY2IgKEd0a1dpZGdldCAqd2lk
Z2V0LCBHZGtFdmVudCAqZXZlbnQsCiAgIGlmICghZikKICAgICByZXR1cm4gdHJ1ZTsKIAor
I2lmbmRlZiBIQVZFX1hJTlBVVDIKKyAgICB4Z19tYXliZV9zZW5kX2xvd19sZXZlbF9rZXlf
ZXZlbnQgKGYsIGV2ZW50KTsKKyNlbmRpZgorCiAgIGlmIChwb3B1cF9hY3RpdmF0ZWQgKCkp
CiAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTY1NTcsNiArNjYxNSwyOSBAQCB4Z193aWRnZXRf
a2V5X3ByZXNzX2V2ZW50X2NiIChHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQgKmV2ZW50
LAogICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wKK3hnX3dpZGdldF9rZXlfcmVs
ZWFzZV9ldmVudF9jYiAoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50ICpldmVudCwKKwkJ
CQlncG9pbnRlciB1c2VyX2RhdGEpCit7CisjaWZuZGVmIEhBVkVfWElOUFVUMgorICBMaXNw
X09iamVjdCB0YWlsLCB0ZW07CisgIHN0cnVjdCBmcmFtZSAqZiA9IE5VTEw7CisKKyAgRk9S
X0VBQ0hfRlJBTUUgKHRhaWwsIHRlbSkKKyAgICB7CisgICAgICBpZiAoRlJBTUVfWF9QIChY
RlJBTUUgKHRlbSkpCisJICAmJiAoRlJBTUVfR1RLX1dJREdFVCAoWEZSQU1FICh0ZW0pKSA9
PSB3aWRnZXQpKQorCXsKKwkgIGYgPSBYRlJBTUUgKHRlbSk7CisJICBicmVhazsKKwl9Cisg
ICAgfQorICBpZiAoZikKKyAgICB4Z19tYXliZV9zZW5kX2xvd19sZXZlbF9rZXlfZXZlbnQg
KGYsIGV2ZW50KTsKKyNlbmRpZgorICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbAogeGdfZmls
dGVyX2tleSAoc3RydWN0IGZyYW1lICpmcmFtZSwgWEV2ZW50ICp4a2V5KQogewpkaWZmIC0t
Z2l0IGEvc3JjL2tleWJvYXJkLmMgYi9zcmMva2V5Ym9hcmQuYwppbmRleCA2ZDI4ZGNhOWFl
Yi4uY2YxM2U1ZTdlNjMgMTAwNjQ0Ci0tLSBhL3NyYy9rZXlib2FyZC5jCisrKyBiL3NyYy9r
ZXlib2FyZC5jCkBAIC00Mjc0LDYgKzQyNzQsNyBAQCBrYmRfYnVmZmVyX2dldF9ldmVudCAo
S0JPQVJEICoqa2JwLAogICAgICAgY2FzZSBDT05GSUdfQ0hBTkdFRF9FVkVOVDoKICAgICAg
IGNhc2UgRk9DVVNfT1VUX0VWRU5UOgogICAgICAgY2FzZSBTRUxFQ1RfV0lORE9XX0VWRU5U
OgorICAgICAgY2FzZSBMT1dfTEVWRUxfS0VZX0VWRU5UOgogICAgICAgICB7CiAgICAgICAg
ICAgb2JqID0gbWFrZV9saXNweV9ldmVudCAoJmV2ZW50LT5pZSk7CiAgICAgICAgICAga2Jk
X2ZldGNoX3B0ciA9IG5leHRfa2JkX2V2ZW50IChldmVudCk7CkBAIC03MTE4LDEyICs3MTE5
LDQ3IEBAIG1ha2VfbGlzcHlfZXZlbnQgKHN0cnVjdCBpbnB1dF9ldmVudCAqZXZlbnQpCiAg
ICAgY2FzZSBQUkVFRElUX1RFWFRfRVZFTlQ6CiAgICAgICByZXR1cm4gbGlzdDIgKFFwcmVl
ZGl0X3RleHQsIGV2ZW50LT5hcmcpOwogCisgICAgY2FzZSBMT1dfTEVWRUxfS0VZX0VWRU5U
OgorICAgICAgcmV0dXJuIGxpc3RuICg2LCBRbG93X2xldmVsX2tleSwKKwkJICAgIFhDQVIg
KGV2ZW50LT5hcmcpLCAvKiBQcmVzcyBvciByZWxlYXNlLiAgKi8KKwkJICAgIFhDQVIgKFhD
RFIgKGV2ZW50LT5hcmcpKSwgLyogVGhlIGtleSBzeW1ib2wuICAqLworCQkgICAgWENBUiAo
WENEUiAoWENEUiAoZXZlbnQtPmFyZykpKSwgLyogVGhlIG1vZGlmaWVyLiAgKi8KKwkJICAg
IG1ha2VfZml4bnVtIChldmVudC0+dGltZXN0YW1wKSwKKwkJICAgIGV2ZW50LT5mcmFtZV9v
cl93aW5kb3cpOworCiAgICAgICAvKiBUaGUgJ2tpbmQnIGZpZWxkIG9mIHRoZSBldmVudCBp
cyBzb21ldGhpbmcgd2UgZG9uJ3QgcmVjb2duaXplLiAgKi8KICAgICBkZWZhdWx0OgogICAg
ICAgZW1hY3NfYWJvcnQgKCk7CiAgICAgfQogfQogCitib29sCitrYmRfbG93X2xldmVsX2tl
eV9pc19lbmFibGVkIChpbnQga2V5c3ltLCBMaXNwX09iamVjdCBtb2RpZmllcikKK3sKKyAg
aWYgKFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMgPT0gUXQpCisgICAgcmV0dXJuIHRy
dWU7CisKKyAgaWYgKFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMgPT0gUW5pbCkKKyAg
ICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKEZJWE5VTVAgKFZlbmFibGVfbG93X2xldmVsX2tl
eV9ldmVudHMpKQorICAgIHJldHVybiBrZXlzeW0gPT0gWEZJWE5VTSAoVmVuYWJsZV9sb3df
bGV2ZWxfa2V5X2V2ZW50cyk7CisKKyAgaWYgKFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVu
dHMgPT0gUW1vZGlmaWVycykKKyAgICByZXR1cm4gbW9kaWZpZXIgIT0gUW5pbDsKKworICBm
b3IgKExpc3BfT2JqZWN0IGUgPSBWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzOyBDT05T
UCAoZSk7IGUgPSBYQ0RSIChlKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCBjID0gWENB
UiAoZSk7CisgICAgICBpZiAoRklYTlVNUCAoYykgJiYgWEZJWE5VTSAoYykgPT0ga2V5c3lt
KQorCXJldHVybiB0cnVlOworICAgICAgaWYgKGMgPT0gUW1vZGlmaWVycyAmJiBtb2RpZmll
ciAhPSBRbmlsKQorCXJldHVybiB0cnVlOworICAgIH0KKworICByZXR1cm4gZmFsc2U7Cit9
CisKIHN0YXRpYyBMaXNwX09iamVjdAogbWFrZV9saXNweV9tb3ZlbWVudCAoc3RydWN0IGZy
YW1lICpmcmFtZSwgTGlzcF9PYmplY3QgYmFyX3dpbmRvdywgZW51bSBzY3JvbGxfYmFyX3Bh
cnQgcGFydCwKIAkJICAgICBMaXNwX09iamVjdCB4LCBMaXNwX09iamVjdCB5LCBUaW1lIHQp
CkBAIC0xMjkzMSw2ICsxMjk2NywzMyBAQCBzeW1zX29mX2tleWJvYXJkICh2b2lkKQogICBE
RUZTWU0gKFFmaWxlX25vdGlmeSwgImZpbGUtbm90aWZ5Iik7CiAjZW5kaWYgLyogVVNFX0ZJ
TEVfTk9USUZZICovCiAKKworICBERUZTWU0gKFFtb2RpZmllcnMsICJtb2RpZmllcnMiKTsK
KworICBERUZWQVJfTElTUCAoImVuYWJsZS1sb3ctbGV2ZWwta2V5LWV2ZW50cyIsIFZlbmFi
bGVfbG93X2xldmVsX2tleV9ldmVudHMsCisJICAgICAgIGRvYzogLyogSWYgbm9uLW5pbCwg
cmVjZXB0aW9uIG9mIGxvdy1sZXZlbCBrZXkgZXZlbnRzIGlzIGVuYWJsZWQuCisKK1RoZSB2
YWx1ZSBjb25maWd1cmVzIHRoZSBzZXQgb2Yga2V5cyB0aGF0IGFyZSBoYW5kbGVkOgorCitJ
ZiB0LCBzZW5kIGV2ZW50cyBmb3IgYWxsIGtleXMuCisKK0lmIGEgbnVtYmVyLCBzZW5kIGV2
ZW50cyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcga2V5c3ltLiAgV2hlbiBjYWxsaW5nCisnbGxr
LWluaXQnLCBhIHNldCBvZiB2YXJpYWJsZXMgd2l0aCB0aGUgeGstIHByZWZpeCBpcyBpbml0
aWFsaXplZCB3aXRoCit0aGUgbnVtZXJpYyB2YWx1ZXMgZm9yIGtleXN5bXMuICBCZWNhdXNl
IHRoaXMgbnVtYmVyIGFyZSBwbGF0Zm9ybQorZGVwZW5kZW50LCBvbmx5IHRoZSB2YXJpYWJs
ZXMgc2hvdWxkIGJlIHVzZWQgdG8gcmVmZXIgdG8gYSBrZXkuICBGb3IKK2V4YW1wbGUsIHRo
ZSAneGstYmFja3NwYWNlJyB2YXJpYWJsZSByZWZlciB0byB0aGUgYmFja3NwYWNlIGtleSwg
d2l0aAordGhlIG51bWVyaWMgdmFsdWUgMHhmZjA4IG9uIFgsIGFuZCB0aGUgMHgwOCBvbiBN
Uy1XaW5kb3dzLiAgWW91IGNhbiBzZWUKK2FsbCBkZWZpbmVkIHZhcmlhYmxlcyBvbiB0aGUg
dmFyaWFibGUgJ2xsay1rZXlzeW1zJy4KKworSWYgYSBzeW1ib2wsIGEgcHJlZGVmaW5lZCBz
ZXQgb2Yga2V5cyBpcyBzZWxlY3RlZC4gIFRoZSBvbmx5IGN1cnJlbnRseQordmFsaWQgc3lt
Ym9sIGlzICdtb2RpZmllcnMuCisKK0lmIGEgbGlzdCBvZiBudW1iZXJzIGFuZC9vciBzeW1i
b2xzLCB0aGUgY29ycmVzcG9uZGluZyBrZXlzeW1zIGFuZCBzZXRzCithcmUgc2VsZWN0ZWQu
ICAqLyk7CisgIFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMgPSBRbmlsOworCisgIERF
RlNZTSAoUWxvd19sZXZlbF9rZXksICJsb3ctbGV2ZWwta2V5Iik7CisKICAgREVGU1lNIChR
dG91Y2hfZW5kLCAidG91Y2gtZW5kIik7CiAKICAgLyogTWVudSBhbmQgdG9vbCBiYXIgaXRl
bSBwYXJ0cy4gICovCkBAIC0xNDAxOCw2ICsxNDA4MSw4IEBAIGtleXNfb2Zfa2V5Ym9hcmQg
KHZvaWQpCiAJCQkgICAgImhhbmRsZS1mb2N1cy1vdXQiKTsKICAgaW5pdGlhbF9kZWZpbmVf
bGlzcHlfa2V5IChWc3BlY2lhbF9ldmVudF9tYXAsICJtb3ZlLWZyYW1lIiwKIAkJCSAgICAi
aGFuZGxlLW1vdmUtZnJhbWUiKTsKKyAgaW5pdGlhbF9kZWZpbmVfbGlzcHlfa2V5IChWc3Bl
Y2lhbF9ldmVudF9tYXAsICJsb3ctbGV2ZWwta2V5IiwKKwkJCSAgICAiaWdub3JlIik7CiB9
CiAKIC8qIE1hcmsgdGhlIHBvaW50ZXJzIGluIHRoZSBrYm9hcmQgb2JqZWN0cy4KZGlmZiAt
LWdpdCBhL3NyYy9rZXlib2FyZC5oIGIvc3JjL2tleWJvYXJkLmgKaW5kZXggMzg3NTAxYzlm
ODguLjgzZjlhMGYxNDFhIDEwMDY0NAotLS0gYS9zcmMva2V5Ym9hcmQuaAorKysgYi9zcmMv
a2V5Ym9hcmQuaApAQCAtNTExLDYgKzUxMSw3IEBAIGtiZF9idWZmZXJfc3RvcmVfZXZlbnRf
aG9sZCAoc3RydWN0IGlucHV0X2V2ZW50ICpldmVudCwKIGV4dGVybiBMaXNwX09iamVjdCBt
ZW51X2l0ZW1fZXZhbF9wcm9wZXJ0eSAoTGlzcF9PYmplY3QpOwogZXh0ZXJuIGJvb2wga2Jk
X2J1ZmZlcl9ldmVudHNfd2FpdGluZyAodm9pZCk7CiBleHRlcm4gdm9pZCBhZGRfdXNlcl9z
aWduYWwgKGludCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBib29sIGtiZF9sb3dfbGV2ZWxf
a2V5X2lzX2VuYWJsZWQgKGludCwgTGlzcF9PYmplY3QpOwogCiBleHRlcm4gaW50IHR0eV9y
ZWFkX2F2YWlsX2lucHV0IChzdHJ1Y3QgdGVybWluYWwgKiwgc3RydWN0IGlucHV0X2V2ZW50
ICopOwogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyB0aW1lcl9jaGVjayAodm9pZCk7CmRpZmYg
LS1naXQgYS9zcmMvcGd0a3Rlcm0uYyBiL3NyYy9wZ3RrdGVybS5jCmluZGV4IDA3OTk0NTEy
NmUwLi5mYmE4MWY1ZWMwZSAxMDA2NDQKLS0tIGEvc3JjL3BndGt0ZXJtLmMKKysrIGIvc3Jj
L3BndGt0ZXJtLmMKQEAgLTUyMDEsNiArNTIwMSw1NiBAQCBwZ3RrX2VucXVldWVfcHJlZWRp
dCAoc3RydWN0IGZyYW1lICpmLCBMaXNwX09iamVjdCBwcmVlZGl0KQogICBldnFfZW5xdWV1
ZSAoJmluZXYpOwogfQogCitzdGF0aWMgdm9pZAorcGd0a19tYXliZV9zZW5kX2xvd19sZXZl
bF9rZXlfZXZlbnQgKHN0cnVjdCBmcmFtZSAqZiwgR2RrRXZlbnQgKmV2ZW50KQoreworICBH
ZGtFdmVudEtleSB4a2V5ID0gZXZlbnQtPmtleTsKKyAgYm9vbCBpc19wcmVzczsKKyAgTGlz
cF9PYmplY3Qga2V5LCBtb2RpZmllcjsKKyAgdW5pb24gYnVmZmVyZWRfaW5wdXRfZXZlbnQg
aW5ldjsKKworICBpZiAoTklMUCAoVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cykpCisg
ICAgcmV0dXJuOworCisgIHN3aXRjaCAoZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2Ug
R0RLX0tFWV9QUkVTUzoKKyAgICAgIGlzX3ByZXNzID0gdHJ1ZTsKKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR0RLX0tFWV9SRUxFQVNFOgorICAgICAgaXNfcHJlc3MgPSBmYWxzZTsKKyAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8q
IFdlIGRvbid0IHN1cHBvcnQgbW9kaWZpZXIgaWRlbnRpZmljYXRpb24gb24gUEdUSy4gV2Ug
b25seSBjYW4gdGVsbAorICAgIGlmIHRoZSBrZXkgY29ycmVzcG9uZHMgdG8gYSBtb2RpZmll
ciBvciBub3QsIHdoaWNoIGlzIHVzZWQgZm9yCisgICAgZmlsdGVyaW5nIGVuYWJsZWQga2V5
cyB3aXRoIGtiZF9sb3dfbGV2ZWxfa2V5X2lzX2VuYWJsZWQuICAqLworICBtb2RpZmllciA9
IGV2ZW50LT5rZXkuaXNfbW9kaWZpZXIgPyBRdCA6IFFuaWw7CisKKyAgaW50IGtleXN5bSA9
IHhrZXkua2V5dmFsOworCisgIGlmIChrZXlzeW0gPj0gR0RLX0tFWV9hICYmIGtleXN5bSA8
PSBHREtfS0VZX3opCisgICAga2V5c3ltIC09IEdES19LRVlfYSAtIEdES19LRVlfQTsKKyAg
aWYgKCFrYmRfbG93X2xldmVsX2tleV9pc19lbmFibGVkIChrZXlzeW0sIG1vZGlmaWVyKSkK
KyAgICByZXR1cm47CisKKyAgaWYgKCFmKQorICAgIGYgPSBwZ3RrX2FueV93aW5kb3dfdG9f
ZnJhbWUgKGV2ZW50LT5rZXkud2luZG93KTsKKyAgaWYgKCFmKQorICAgIHJldHVybjsKKwor
ICBrZXkgPSBtYWtlX2ZpeG51bSAoa2V5c3ltKTsKKworICBFVkVOVF9JTklUIChpbmV2Lmll
KTsKKyAgWFNFVEZSQU1FIChpbmV2LmllLmZyYW1lX29yX3dpbmRvdywgZik7CisgIGluZXYu
aWUua2luZCA9IExPV19MRVZFTF9LRVlfRVZFTlQ7CisgIGluZXYuaWUudGltZXN0YW1wID0g
ZXZlbnQtPmtleS50aW1lOworICBpbmV2LmllLmFyZyA9IGxpc3QzIChpc19wcmVzcyA/IFF0
IDogUW5pbCwga2V5LCBtb2RpZmllcik7CisgIGV2cV9lbnF1ZXVlICgmaW5ldik7Cit9CisK
IHN0YXRpYyBnYm9vbGVhbgoga2V5X3ByZXNzX2V2ZW50IChHdGtXaWRnZXQgKndpZGdldCwg
R2RrRXZlbnQgKmV2ZW50LCBncG9pbnRlciAqdXNlcl9kYXRhKQogewpAQCAtNTIxMSw2ICs1
MjYxLDkgQEAga2V5X3ByZXNzX2V2ZW50IChHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQg
KmV2ZW50LCBncG9pbnRlciAqdXNlcl9kYXRhKQogICBzdHJ1Y3QgcGd0a19kaXNwbGF5X2lu
Zm8gKmRweWluZm87CiAKICAgZiA9IHBndGtfYW55X3dpbmRvd190b19mcmFtZSAoZ3RrX3dp
ZGdldF9nZXRfd2luZG93ICh3aWRnZXQpKTsKKworICBwZ3RrX21heWJlX3NlbmRfbG93X2xl
dmVsX2tleV9ldmVudCAoZiwgZXZlbnQpOworCiAgIEVWRU5UX0lOSVQgKGluZXYuaWUpOwog
ICBobGluZm8gPSBNT1VTRV9ITF9JTkZPIChmKTsKICAgbmJ5dGVzID0gMDsKQEAgLTU0NTQs
NiArNTUwNyw4IEBAIGtleV9yZWxlYXNlX2V2ZW50IChHdGtXaWRnZXQgKndpZGdldCwKICAg
R2RrRGlzcGxheSAqZGlzcGxheTsKICAgc3RydWN0IHBndGtfZGlzcGxheV9pbmZvICpkcHlp
bmZvOwogCisgIHBndGtfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50IChOVUxMLCBl
dmVudCk7CisKICAgZGlzcGxheSA9IGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKHdpZGdldCk7
CiAgIGRweWluZm8gPSBwZ3RrX2Rpc3BsYXlfaW5mb19mb3JfZGlzcGxheSAoZGlzcGxheSk7
CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXJtaG9va3MuaCBiL3NyYy90ZXJtaG9va3MuaAppbmRl
eCBkNmE5MzAwYmFjOS4uOTY2YTY0OTJmNjkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXJtaG9va3Mu
aAorKysgYi9zcmMvdGVybWhvb2tzLmgKQEAgLTM0Nyw2ICszNDcsNyBAQCAjZGVmaW5lIEVN
QUNTX1RFUk1IT09LU19ICiAgIC8qIEluIGEgTk9USUZJQ0FUSU9OX0VWRU5ULCAuYXJnIGlz
IGEgbGFtYmRhIHRvIGV2YWx1YXRlLiAgKi8KICAgLCBOT1RJRklDQVRJT05fRVZFTlQKICNl
bmRpZiAvKiBIQVZFX0FORFJPSUQgKi8KKyAgLCBMT1dfTEVWRUxfS0VZX0VWRU5UCiB9Owog
CiAvKiBCaXQgd2lkdGggb2YgYW4gZW51bSBldmVudF9raW5kIHRhZyBhdCB0aGUgc3RhcnQg
b2Ygc3RydWN0cyBhbmQgdW5pb25zLiAgKi8KZGlmZiAtLWdpdCBhL3NyYy93MzJmbnMuYyBi
L3NyYy93MzJmbnMuYwppbmRleCBlMjQ1NWI5MjcxZS4uMWQxOGJmNDA4ZTEgMTAwNjQ0Ci0t
LSBhL3NyYy93MzJmbnMuYworKysgYi9zcmMvdzMyZm5zLmMKQEAgLTQ2NjksNiArNDY2OSwx
MSBAQCB3MzJfd25kX3Byb2MgKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0pCiAgICAgY2FzZSBXTV9LRVlVUDoKICAgICBjYXNlIFdNX1NZU0tF
WVVQOgogICAgICAgcmVjb3JkX2tleXVwICh3UGFyYW0sIGxQYXJhbSk7CisgICAgICBpZiAo
IU5JTFAgKFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMpKQorCXsKKwkgIHNpZ25hbF91
c2VyX2lucHV0ICgpOworCSAgbXlfcG9zdF9tc2cgKCZ3bXNnLCBod25kLCBXTV9FTUFDU19M
T1dfTEVWRUxfS0VZLCB3UGFyYW0sIGxQYXJhbSk7CisJfQogICAgICAgZ290byBkZmx0Owog
CiAgICAgY2FzZSBXTV9LRVlET1dOOgpAQCAtNDY5NSw2ICs0NzAwLDEyIEBAIHczMl93bmRf
cHJvYyAoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJh
bSkKICAgICAgIGlmICh3MzJfdXNlX2ZhbGxiYWNrX3dtX2NoYXJzX21ldGhvZCkKIAl3UGFy
YW0gPSBtYXBfa2V5cGFkX2tleXMgKHdQYXJhbSwgKGxQYXJhbSAmIDB4MTAwMDAwMEwpICE9
IDApOwogCisgICAgICBpZiAoIU5JTFAgKFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMp
KQorCXsKKwkgIHNpZ25hbF91c2VyX2lucHV0ICgpOworCSAgbXlfcG9zdF9tc2cgKCZ3bXNn
LCBod25kLCBXTV9FTUFDU19MT1dfTEVWRUxfS0VZLCB3UGFyYW0sIGxQYXJhbSk7CisJfQor
CiAgICAgICB3aW5kb3dzX3RyYW5zbGF0ZSA9IDA7CiAKICAgICAgIHN3aXRjaCAod1BhcmFt
KQpkaWZmIC0tZ2l0IGEvc3JjL3czMnRlcm0uYyBiL3NyYy93MzJ0ZXJtLmMKaW5kZXggZTE4
ZjM5ZGQyYTguLmEyZTBhNGIwZmEwIDEwMDY0NAotLS0gYS9zcmMvdzMydGVybS5jCisrKyBi
L3NyYy93MzJ0ZXJtLmMKQEAgLTUyNzAsNiArNTI3MCw1NSBAQCB3MzJfcmVhZF9zb2NrZXQg
KHN0cnVjdCB0ZXJtaW5hbCAqdGVybWluYWwsCiAJICAgIH0KIAkgIGJyZWFrOwogCisJY2Fz
ZSBXTV9FTUFDU19MT1dfTEVWRUxfS0VZOgorCSAgV09SRCBrZXlfZmxhZ3MgPSBISVdPUkQg
KG1zZy5tc2cubFBhcmFtKTsKKwkgIEJPT0wgaXNfd21fa2V5dXAgPSBrZXlfZmxhZ3MgJiBL
Rl9VUDsKKworCSAgaWYgKGlzX3dtX2tleXVwIHx8IChrZXlfZmxhZ3MgJiBLRl9SRVBFQVQp
ID09IDApIC8qIFdNX0tFWURPV04sIG5vdCByZXBlYXRpbmcuICAqLworCSAgICB7CisJICAg
ICAgV09SRCBzY2FuX2NvZGUgPSBMT0JZVEUgKGtleV9mbGFncyk7CisJICAgICAgaWYgKGtl
eV9mbGFncyAmIEtGX0VYVEVOREVEKQorCQlzY2FuX2NvZGUgPSBNQUtFV09SRCAoc2Nhbl9j
b2RlLCAweEUwKTsKKworCSAgICAgIFVJTlQgdHJhbnNsYXRlZCA9IE1hcFZpcnR1YWxLZXkg
KHNjYW5fY29kZSwgTUFQVktfVlNDX1RPX1ZLX0VYKTsKKwkgICAgICBXT1JEIHZrID0gTE9X
T1JEIChtc2cubXNnLndQYXJhbSk7CisJICAgICAgaWYgKHRyYW5zbGF0ZWQpCisJCXZrID0g
TE9XT1JEICh0cmFuc2xhdGVkKTsKKworCSAgICAgIExpc3BfT2JqZWN0IGtleSA9IG1ha2Vf
Zml4bnVtICh2ayk7CisJICAgICAgTGlzcF9PYmplY3QgbW9kaWZpZXIgPSBRbmlsOworCisJ
ICAgICAgc3dpdGNoICh2aykKKwkJeworCQljYXNlIFZLX0xTSElGVDoKKwkJY2FzZSBWS19S
U0hJRlQ6CisJCSAgbW9kaWZpZXIgPSBRc2hpZnQ7CisJCSAgYnJlYWs7CisJCWNhc2UgVktf
TENPTlRST0w6CisJCWNhc2UgVktfUkNPTlRST0w6CisJCSAgbW9kaWZpZXIgPSBRY3RybDsK
KwkJICBicmVhazsKKwkJY2FzZSBWS19MTUVOVToKKwkJY2FzZSBWS19STUVOVToKKwkJICBt
b2RpZmllciA9IFFtZXRhOworCQkgIGJyZWFrOworCQl9CisKKwkgICAgICBpZiAoa2JkX2xv
d19sZXZlbF9rZXlfaXNfZW5hYmxlZCAodmssIG1vZGlmaWVyKSkKKwkJeworCQkgIGYgPSB3
MzJfd2luZG93X3RvX2ZyYW1lIChkcHlpbmZvLCBtc2cubXNnLmh3bmQpOworCQkgIGluZXYu
a2luZCA9IExPV19MRVZFTF9LRVlfRVZFTlQ7CisJCSAgWFNFVEZSQU1FIChpbmV2LmZyYW1l
X29yX3dpbmRvdywgZik7CisJCSAgaW5ldi50aW1lc3RhbXAgPSBtc2cubXNnLnRpbWU7CisJ
CSAgaW5ldi5hcmcgPSBsaXN0MyAoaXNfd21fa2V5dXAgPyBRbmlsIDogUXQsIGtleSwgbW9k
aWZpZXIpOworCQkgIGtiZF9idWZmZXJfc3RvcmVfZXZlbnRfaG9sZCAoJmluZXYsIGhvbGRf
cXVpdCk7CisJCX0KKworCSAgICAgIGluZXYua2luZCA9IE5PX0VWRU5UOworCisJICAgIH0K
KwkgIGJyZWFrOworCiAgICAgICAgIGNhc2UgV01fVU5JQ0hBUjoKIAljYXNlIFdNX1NZU0NI
QVI6CiAJY2FzZSBXTV9DSEFSOgpkaWZmIC0tZ2l0IGEvc3JjL3czMnRlcm0uaCBiL3NyYy93
MzJ0ZXJtLmgKaW5kZXggY2FkOWZjZjhjYjEuLjg4ZjdkZmVlZjhiIDEwMDY0NAotLS0gYS9z
cmMvdzMydGVybS5oCisrKyBiL3NyYy93MzJ0ZXJtLmgKQEAgLTcxMyw3ICs3MTMsOCBAQCAj
ZGVmaW5lIFdNX0VNQUNTX0ZJTEVOT1RJRlkgICAgICAgICAgICAoV01fRU1BQ1NfU1RBUlQg
KyAyNSkKICNkZWZpbmUgV01fRU1BQ1NfSU1FX1NUQVRVUyAgICAgICAgICAgIChXTV9FTUFD
U19TVEFSVCArIDI2KQogI2RlZmluZSBXTV9FTUFDU19EUkFHT1ZFUiAgICAgICAgICAgICAg
KFdNX0VNQUNTX1NUQVJUICsgMjcpCiAjZGVmaW5lIFdNX0VNQUNTX0RST1AgICAgICAgICAg
ICAgICAgICAoV01fRU1BQ1NfU1RBUlQgKyAyOCkKLSNkZWZpbmUgV01fRU1BQ1NfRU5EICAg
ICAgICAgICAgICAgICAgIChXTV9FTUFDU19TVEFSVCArIDI5KQorI2RlZmluZSBXTV9FTUFD
U19MT1dfTEVWRUxfS0VZICAgICAgICAgKFdNX0VNQUNTX1NUQVJUICsgMjkpCisjZGVmaW5l
IFdNX0VNQUNTX0VORCAgICAgICAgICAgICAgICAgICAoV01fRU1BQ1NfU1RBUlQgKyAzMCkK
IAogI2RlZmluZSBXTkRfRk9OVFdJRFRIX0lOREVYICAgICgwKQogI2RlZmluZSBXTkRfTElO
RUhFSUdIVF9JTkRFWCAgICg0KQpkaWZmIC0tZ2l0IGEvc3JjL3h0ZXJtLmMgYi9zcmMveHRl
cm0uYwppbmRleCAwYzIwZDM4YjBmNy4uNzI3MTVlMGVkNzMgMTAwNjQ0Ci0tLSBhL3NyYy94
dGVybS5jCisrKyBiL3NyYy94dGVybS5jCkBAIC0xNzg0MCw2ICsxNzg0MCwxNDEgQEAgI2Rl
ZmluZSBTVE9SRV9LRVlTWU1fRk9SX0RFQlVHKGtleXN5bSkgKCh2b2lkKTApCiAKIHN0YXRp
YyBzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKm5leHRfbm9vcF9kcHlpbmZvOwogCitMaXNwX09i
amVjdAoreF9nZXRfbW9kaWZpZXJfZm9yX2tleWNvZGUgKHN0cnVjdCB4X2Rpc3BsYXlfaW5m
byAqZHB5aW5mbywKKwkJCSAgICBpbnQga2V5Y29kZSkKK3sKKyNpZmRlZiBIQVZFX1hLQgor
ICBpZiAoZHB5aW5mby0+eGtiX2Rlc2MpCisgICAgZm9yIChpbnQgbW9kID0gMDsgbW9kIDwg
WGtiTnVtTW9kaWZpZXJzOyBtb2QrKykKKyAgICAgIHsKKwlpbnQgbWFzayA9ICgxIDw8IG1v
ZCk7CisJaWYgKGRweWluZm8tPnhrYl9kZXNjLT5tYXAtPm1vZG1hcFtrZXljb2RlXSAmIG1h
c2spCisJICB7CisJICAgIGlmIChtYXNrID09IFNoaWZ0TWFzaykKKwkgICAgICByZXR1cm4g
UXNoaWZ0OworCSAgICBpZiAobWFzayA9PSBDb250cm9sTWFzaykKKwkgICAgICByZXR1cm4g
UWN0cmw7CisJICAgIGlmIChtYXNrID09IGRweWluZm8tPm1ldGFfbW9kX21hc2spCisJICAg
ICAgcmV0dXJuIFFtZXRhOworCSAgICBpZiAobWFzayA9PSBkcHlpbmZvLT5hbHRfbW9kX21h
c2spCisJICAgICAgcmV0dXJuIFFhbHQ7CisJICAgIGlmIChtYXNrID09IGRweWluZm8tPnN1
cGVyX21vZF9tYXNrKQorCSAgICAgIHJldHVybiBRc3VwZXI7CisJICAgIGlmIChtYXNrID09
IGRweWluZm8tPmh5cGVyX21vZF9tYXNrKQorCSAgICAgIHJldHVybiBRaHlwZXI7CisJICB9
CisgICAgICB9CisjZW5kaWYKKyAgWE1vZGlmaWVyS2V5bWFwICptYXAgPSBkcHlpbmZvLT5t
b2RtYXA7CisgIGlmIChtYXApCisgICAgZm9yIChpbnQgbW9kID0gMDsgbW9kIDwgODsgbW9k
KyspCisgICAgICB7CisJaW50IG1hc2sgPSAoMSA8PCBtb2QpOworICAgICAgICBmb3IgKGlu
dCBrZXkgPSAwOyBrZXkgPCBtYXAtPm1heF9rZXlwZXJtb2Q7IGtleSsrKQorCSAgaWYgKG1h
cC0+bW9kaWZpZXJtYXBbbW9kICogbWFwLT5tYXhfa2V5cGVybW9kICsga2V5XSA9PSBrZXlj
b2RlKQorCSAgICB7CisJICAgICAgaWYgKG1hc2sgPT0gU2hpZnRNYXNrKQorCQlyZXR1cm4g
UXNoaWZ0OworCSAgICAgIGlmIChtYXNrID09IENvbnRyb2xNYXNrKQorCQlyZXR1cm4gUWN0
cmw7CisJICAgICAgaWYgKG1hc2sgPT0gZHB5aW5mby0+bWV0YV9tb2RfbWFzaykKKwkJcmV0
dXJuIFFtZXRhOworCSAgICAgIGlmIChtYXNrID09IGRweWluZm8tPmFsdF9tb2RfbWFzaykK
KwkJcmV0dXJuIFFhbHQ7CisJICAgICAgaWYgKG1hc2sgPT0gZHB5aW5mby0+c3VwZXJfbW9k
X21hc2spCisJCXJldHVybiBRc3VwZXI7CisJICAgICAgaWYgKG1hc2sgPT0gZHB5aW5mby0+
aHlwZXJfbW9kX21hc2spCisJCXJldHVybiBRaHlwZXI7CisJICAgIH0KKyAgICAgIH0KKyAg
cmV0dXJuIFFuaWw7Cit9CisKK3N0YXRpYyB2b2lkCit4X21heWJlX3NlbmRfbG93X2xldmVs
X2tleV9ldmVudCAoc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvLAorCQkJCSAgY29u
c3QgWEV2ZW50ICp4ZXYsIHN0cnVjdCBmcmFtZSAqZikKK3sKKyAgWEtleUV2ZW50IHhrZXk7
CisgIGJvb2wgaXNfcHJlc3M7CisgIEtleVN5bSBrZXlzeW07CisgIExpc3BfT2JqZWN0IGtl
eSwgbW9kaWZpZXI7CisgIHN0cnVjdCBpbnB1dF9ldmVudCBpZTsKKworICBpZiAoTklMUCAo
VmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cykpCisgICAgcmV0dXJuOworCisgIHN3aXRj
aCAoeGV2LT50eXBlKQorICAgIHsKKyAgICBjYXNlIEtleVByZXNzOgorICAgICAgaXNfcHJl
c3MgPSB0cnVlOworICAgICAgeGtleSA9IHhldi0+eGtleTsKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgS2V5UmVsZWFzZToKKyAgICAgIGlzX3ByZXNzID0gZmFsc2U7CisgICAgICB4a2V5
ID0geGV2LT54a2V5OworICAgICAgYnJlYWs7CisjaWZkZWYgSEFWRV9YSU5QVVQyCisgICAg
Y2FzZSBHZW5lcmljRXZlbnQ6CisgICAgICBYSURldmljZUV2ZW50ICp4aWV2ID0geGV2LT54
Y29va2llLmRhdGE7CisgICAgICBzd2l0Y2ggKHhldi0+eGdlbmVyaWMuZXZ0eXBlKQorCXsK
KwljYXNlIFhJX0tleVByZXNzOgorCSAgaXNfcHJlc3MgPSB0cnVlOworCSAgYnJlYWs7CisJ
Y2FzZSBYSV9LZXlSZWxlYXNlOgorCSAgaXNfcHJlc3MgPSBmYWxzZTsKKwkgIGJyZWFrOwor
CWRlZmF1bHQ6CisJICByZXR1cm47CisJfQorCisgICAgICB4a2V5LnNlcmlhbCA9IHhpZXYt
PnNlcmlhbDsKKyAgICAgIHhrZXkuc2VuZF9ldmVudCA9IHhpZXYtPnNlbmRfZXZlbnQ7Cisg
ICAgICB4a2V5LmRpc3BsYXkgPSB4aWV2LT5kaXNwbGF5OworICAgICAgeGtleS53aW5kb3cg
PSB4aWV2LT5ldmVudDsKKyAgICAgIHhrZXkucm9vdCA9IHhpZXYtPnJvb3Q7CisgICAgICB4
a2V5LnN1YndpbmRvdyA9IHhpZXYtPmNoaWxkOworICAgICAgeGtleS50aW1lID0geGlldi0+
dGltZTsKKyAgICAgIHhrZXkueCA9IHhpZXYtPmV2ZW50X3g7CisgICAgICB4a2V5LnkgPSB4
aWV2LT5ldmVudF95OworICAgICAgeGtleS54X3Jvb3QgPSB4aWV2LT5yb290X3g7CisgICAg
ICB4a2V5Lnlfcm9vdCA9IHhpZXYtPnJvb3RfeTsKKyAgICAgIHhrZXkuc3RhdGUgPSB4aWV2
LT5tb2RzLmVmZmVjdGl2ZTsKKyAgICAgIHhrZXkua2V5Y29kZSA9IHhpZXYtPmRldGFpbDsK
KyAgICAgIHhrZXkuc2FtZV9zY3JlZW4gPSAxOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAg
ICBkZWZhdWx0OgorICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoIWYpCisgICAgZiA9
IHhfYW55X3dpbmRvd190b19mcmFtZSAoZHB5aW5mbywgeGtleS53aW5kb3cpOworICBpZiAo
IWYpCisgICAgcmV0dXJuOworCisgIFhMb29rdXBTdHJpbmcgKCZ4a2V5LCBOVUxMLCAwLCAm
a2V5c3ltLCBOVUxMKTsKKworICBtb2RpZmllciA9IHhfZ2V0X21vZGlmaWVyX2Zvcl9rZXlj
b2RlIChkcHlpbmZvLCB4a2V5LmtleWNvZGUpOworCisgIC8qIENvbnZlcnQgbG93ZXJjYXNl
IGxhdGluIGxldHRlciB0byB1cHBlcmNhc2UuICAqLworICBpZiAoa2V5c3ltID49IFhLX2Eg
JiYga2V5c3ltIDw9IFhLX3opCisgICAga2V5c3ltIC09IFhLX2EgLSBYS19BOworCisgIGlm
ICgha2JkX2xvd19sZXZlbF9rZXlfaXNfZW5hYmxlZCAoa2V5c3ltLCBtb2RpZmllcikpCisg
ICAgcmV0dXJuOworCisgIGtleSA9IG1ha2VfZml4bnVtIChrZXlzeW0pOworCisgIEVWRU5U
X0lOSVQgKGllKTsKKyAgWFNFVEZSQU1FIChpZS5mcmFtZV9vcl93aW5kb3csIGYpOworICBp
ZS5raW5kID0gTE9XX0xFVkVMX0tFWV9FVkVOVDsKKyAgaWUudGltZXN0YW1wID0geGtleS50
aW1lOworICBpZS5hcmcgPSBsaXN0MyAoaXNfcHJlc3MgPyBRdCA6IFFuaWwsIGtleSwgbW9k
aWZpZXIpOworICBrYmRfYnVmZmVyX3N0b3JlX2V2ZW50ICgmaWUpOworfQorCiAvKiBGaWx0
ZXIgZXZlbnRzIGZvciB0aGUgY3VycmVudCBYIGlucHV0IG1ldGhvZC4KICAgIERQWUlORk8g
aXMgdGhlIGRpc3BsYXkgdGhpcyBldmVudCBpcyBmb3IuCiAgICBFVkVOVCBpcyB0aGUgWCBl
dmVudCB0byBmaWx0ZXIuCkBAIC0yMDIwNiw2ICsyMDM0MSw3IEBAIGhhbmRsZV9vbmVfeGV2
ZW50IChzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRweWluZm8sCiAgICAgICBnb3RvIE9USEVS
OwogCiAgICAgY2FzZSBLZXlQcmVzczoKKyAgICAgIHhfbWF5YmVfc2VuZF9sb3dfbGV2ZWxf
a2V5X2V2ZW50IChkcHlpbmZvLCBldmVudCwgYW55KTsKICAgICAgIHhfZGlzcGxheV9zZXRf
bGFzdF91c2VyX3RpbWUgKGRweWluZm8sIGV2ZW50LT54a2V5LnRpbWUsCiAJCQkJICAgIGV2
ZW50LT54a2V5LnNlbmRfZXZlbnQsCiAJCQkJICAgIHRydWUpOwpAQCAtMjA3MTUsNiArMjA4
NTEsNyBAQCBoYW5kbGVfb25lX3hldmVudCAoc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlp
bmZvLAogI2VuZGlmCiAKICAgICBjYXNlIEtleVJlbGVhc2U6CisgICAgICB4X21heWJlX3Nl
bmRfbG93X2xldmVsX2tleV9ldmVudCAoZHB5aW5mbywgZXZlbnQsIGFueSk7CiAjaWZkZWYg
SEFWRV9YX0kxOE4KICAgICAgIC8qIERvbid0IGRpc3BhdGNoIHRoaXMgZXZlbnQgc2luY2Ug
WHREaXNwYXRjaEV2ZW50IGNhbGxzCiAgICAgICAgICBYRmlsdGVyRXZlbnQsIGFuZCB0d28g
Y2FsbHMgaW4gYSByb3cgbWF5IGZyZWV6ZSB0aGUKQEAgLTIzOTcwLDYgKzI0MTA3LDggQEAg
aGFuZGxlX29uZV94ZXZlbnQgKHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywKIAkg
ICAgICBzdHJ1Y3QgeGlfZGV2aWNlX3QgKmRldmljZSwgKnNvdXJjZTsKIAkgICAgICBYS2V5
UHJlc3NlZEV2ZW50IHhrZXk7CiAKKwkgICAgICB4X21heWJlX3NlbmRfbG93X2xldmVsX2tl
eV9ldmVudCAoZHB5aW5mbywgZXZlbnQsIGFueSk7CisKIAkgICAgICBjb2RpbmcgPSBRbGF0
aW5fMTsKIAogCSAgICAgIC8qIFRoZSBjb2RlIHVuZGVyIHRoaXMgbGFiZWwgaXMgcXVpdGUg
ZGVzdWx0b3J5LiAgVGhlcmUKQEAgLTI0NTg2LDYgKzI0NzI1LDggQEAgaGFuZGxlX29uZV94
ZXZlbnQgKHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywKICNlbmRpZgogCiAJICBj
YXNlIFhJX0tleVJlbGVhc2U6CisJICAgIHhfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2
ZW50IChkcHlpbmZvLCBldmVudCwgYW55KTsKKwogI2lmIGRlZmluZWQgSEFWRV9YX0kxOE4g
fHwgZGVmaW5lZCBVU0VfR1RLIHx8IGRlZmluZWQgVVNFX0xVQ0lECiAJICAgIHsKIAkgICAg
ICBYS2V5UHJlc3NlZEV2ZW50IHhrZXk7CkBAIC0zMjY2Miw2ICszMjgwMyw3IEBAIHN5bXNf
b2ZfeHRlcm0gKHZvaWQpCiAgIFZ4X3Rvb2xraXRfc2Nyb2xsX2JhcnMgPSBRbmlsOwogI2Vu
ZGlmCiAKKyAgREVGU1lNIChRc2hpZnQsICJzaGlmdCIpOwogICBERUZTWU0gKFFtb2RpZmll
cl92YWx1ZSwgIm1vZGlmaWVyLXZhbHVlIik7CiAgIERFRlNZTSAoUWN0cmwsICJjdHJsIik7
CiAgIEZwdXQgKFFjdHJsLCBRbW9kaWZpZXJfdmFsdWUsIG1ha2VfZml4bnVtIChjdHJsX21v
ZGlmaWVyKSk7CmRpZmYgLS1naXQgYS9zcmMveHRlcm0uaCBiL3NyYy94dGVybS5oCmluZGV4
IDhkNWM5OTE3NzQ5Li42NmUwNTJlN2FjZCAxMDA2NDQKLS0tIGEvc3JjL3h0ZXJtLmgKKysr
IGIvc3JjL3h0ZXJtLmgKQEAgLTE5MDYsNiArMTkwNiw4IEBAIHhfbXV0YWJsZV9jb2xvcm1h
cCAoWFZpc3VhbEluZm8gKnZpc3VhbCkKIGV4dGVybiB2b2lkIHRlYXJfZG93bl94X2JhY2tf
YnVmZmVyIChzdHJ1Y3QgZnJhbWUgKmYpOwogZXh0ZXJuIHZvaWQgaW5pdGlhbF9zZXRfdXBf
eF9iYWNrX2J1ZmZlciAoc3RydWN0IGZyYW1lICpmKTsKIAorZXh0ZXJuIExpc3BfT2JqZWN0
IHhfZ2V0X21vZGlmaWVyX2Zvcl9rZXljb2RlIChzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKiwg
aW50KTsKKwogLyogRGVmaW5lZCBpbiB4Zm5zLmMuICAqLwogZXh0ZXJuIHZvaWQgeF9yZWFs
X3Bvc2l0aW9ucyAoc3RydWN0IGZyYW1lICosIGludCAqLCBpbnQgKik7CiBleHRlcm4gdm9p
ZCB4X2NoYW5nZV90YWJfYmFyX2hlaWdodCAoc3RydWN0IGZyYW1lICosIGludCk7Ci0tIAoy
LjM1LjEud2luZG93cy4yCgo=

--------------sxrzhc8vUyFc3eu2Z97hOBFd--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 7 Dec 2024 21:52:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Dec 07 16:52:20 2024
Received: from localhost ([127.0.0.1]:48798 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tK2iq-0005cO-Ct
	for submit <at> debbugs.gnu.org; Sat, 07 Dec 2024 16:52:20 -0500
Received: from lists.gnu.org ([209.51.188.17]:51352)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <cpardo@HIDDEN>) id 1tK2io-0005cC-BS
 for submit <at> debbugs.gnu.org; Sat, 07 Dec 2024 16:52:18 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <cpardo@HIDDEN>)
 id 1tK2io-0001CD-3A
 for bug-gnu-emacs@HIDDEN; Sat, 07 Dec 2024 16:52:18 -0500
Received: from mail.imayhem.com ([82.223.54.191]
 helo=zealous-pike.82-223-54-191.plesk.page)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <cpardo@HIDDEN>)
 id 1tK2il-0005Bt-GS
 for bug-gnu-emacs@HIDDEN; Sat, 07 Dec 2024 16:52:17 -0500
Received: from [192.168.68.104] (111.red-88-21-7.staticip.rima-tde.net
 [88.21.7.111])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id 5EFF480102
 for <bug-gnu-emacs@HIDDEN>; Sat,  7 Dec 2024 21:52:09 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 88.21.7.111) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[192.168.68.104]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Message-ID: <7284332b-1cdb-4ceb-ae02-a79eda2503fc@HIDDEN>
Date: Sat, 7 Dec 2024 22:52:08 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74423: Low level key events
To: bug-gnu-emacs@HIDDEN
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN> <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN> <867c8ezny3.fsf@HIDDEN>
 <87ttbhhbf9.fsf@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <87ttbhhbf9.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Received-SPF: pass client-ip=82.223.54.191; envelope-from=cpardo@HIDDEN;
 helo=zealous-pike.82-223-54-191.plesk.page
X-Spam_score_int: -18
X-Spam_score: -1.9
X-Spam_bar: -
X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9,
 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.3 (-)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.3 (--)

On 06/12/2024 2:01, Po Lu:

> I suggest calling XKeysymToString rather than interning the numerical
> value of keysyms received.  This gives users some indication of the
> identity of these keysyms without tediously referring to (at times
> vendor-specific) keysymdef.h files.

Do you mean replacing variable names like xk-backspace, xk-tab with the 
strings returned by XKeysymToString?






Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 6 Dec 2024 01:01:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 05 20:01:52 2024
Received: from localhost ([127.0.0.1]:41455 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tJMjA-0006BJ-7M
	for submit <at> debbugs.gnu.org; Thu, 05 Dec 2024 20:01:52 -0500
Received: from sonic311-25.consmr.mail.ne1.yahoo.com ([66.163.188.206]:34409)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <luangruo@HIDDEN>) id 1tJMj5-0006B1-LT
 for 74423 <at> debbugs.gnu.org; Thu, 05 Dec 2024 20:01:51 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
 t=1733446902; bh=wot3N9HJoiOKKiXzVLp1AHhbn16sqh+MK1T/zx+0l68=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To;
 b=gkl6hw1ipDIIzceQPWApKU7i0A5J6KZPgmCvRUxd8KIjIkzknreLy9S15kXKRcodGnRbn8QXWY0YIzDtETZrVvx0Z2Vhi5fFoEVCD6vL9C8cTSOo/YjcMUVD1In9wWsxBIa4QL1vpt4Joyf/xBcl+i4p5+ZCpLcuUPh8CtY2FE2HUj+O95g03QNTmEVLlu9zQSNFt6D+kE42l/GT3s1qh6iDKWF4kNAEObpXqYQgIQbVcXPe66e2YImSW2bt9Ot1UpIF1IefC1+5QLNEvsfQwc3tkFTOrcPy8TbZORvYWFXn01BJOrJKhNWhYFEjWJTMly6DxOWVTn9cPVBkDEQ3+g==
X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
 t=1733446902; bh=8gGcnD6+loDkOU4gGEPjIFVKG7MEiEaoiEx0pMdThrh=;
 h=X-Sonic-MF:From:To:Subject:Date:From:Subject;
 b=eGdl1xKk7nr/kvAsi/X6K8QbgQN7Wdaohw8a4ypCN0U0UFW8tH6ZbTBD+N9KGv10f+rHlJoWgWpMmSnHeiP69fHepvk8PPrvW1XzAK4s+iq5fJt03aVWWSJY88o9hA8hOJRgFbiXiBg6doMxC4U5I02SU4r6zUcrBKfRjDsLV0u8wjMggv3CJIBEn8uf0lQMLq1aOHgyF2C8hLz5M1/fmOHwOQiV+MLqlbEuRJ/ROLVQrxwPPI54iHhPtlPVAFZD5S2xlsbvRbj7QUsqpyfme9nYWfiEuQhHSOrZajjf9MYTJb3TE2cjaVoW6NVexR6Afs6rc08OISrHPIBK2Y5uQQ==
X-YMail-OSG: CYuItG4VM1mpDNXAV92p0cu4K2cVCWw04qsTUign1DV5vI1bQ9LWZKlXksyIaS2
 uF_wSBL0grsocKVq4xkfc3Qqp8nnOis3TBHxMLUj707u_ymi1VyDzpAVSYhYB88VhHkZIImzH__0
 E7k35.U13Mc8PoaTWvgBH.V6zr4shllKeBRHBqzTYTa3DNukP_XNfUCek407zbwvDFmzL42Oktka
 hja26mwcRcpsTZ2IebDgoPQjHfAK3UZDaItQk_3WcmwUh8SDkp2.B1u9JZ4wi2eAxMTh1NvXu6VQ
 egJ9VcwB1kbbwKC7j7vVLnZG2FQeO5MTxx25KNCXkqTIObjcd47j_jRNxzlrN8KBI.msyhwne5EE
 SwUixeer5jMpXQiLEETS3oepFzj0hs.aCSI06BLerPCRgMNLJ6CVt3.duWTrHDo9_d86SIY48o5t
 0MQN8qWUesUq2aLcWxrm19w9jTb3m3EH9uuzLsD3mTzwajm5OuYjWuRhPvuipoIkuKAwaO2Q6E7Y
 h0ozSQpKGlJkI0WUvHXarlRFXnGZ63j5JYG6tZM0PHODbp3MFUoV.AzQDgs_JxfCirpezrsl_uJd
 sdPCQtPzEXvjiht8Rgr_g_F9dau8V.bvHxbLyBfdgUEOlij9aE4uD04c5alnwtYxPK79hA5qj2GN
 rOltTOjwh.kza_qVYguRudtijUiMmN1LHu_gOF.bk.QlmVHzERKrnvYih7zuwu4NOIS98MqlyorI
 AZAul49FW_2gm9uzXkwXZO1p66fqYiuD4CBW7l1u0c7afgBJu.n7LSrxH0QIb5Ja3sSXCkAMtLea
 3sEdYiN7g4BNy6QjKA80uK97PXq2lrRqWXCeUBQS7eAjPHV0R65Vkx1C2.1h5M2zkg4skyOJ7FIj
 OTKaBgijInLrbhvH1qeYy99ob2f_x9AEvnYBQSuOtyacjHmb.i2JioWnZRwlEzUuA04mfCGtM6s8
 stYig_2R6APss_whYPEJdWBKQULpsjWz0275w10pvR1lBQDgVmUD7mfhcwz7bgaEoyzViBJWtv1t
 7WpawZtmtvYf1LBIMyPPIi5P9YdngAjGwVF7wrZYJDr03hPdP0elynVPdHXpvcLJWXz56fb9BJlZ
 i3T7xniMS4hjbC4XZCdoAUdbUCIajIcsezcJbnvwva.SU7jim13BwRePteFLCmFHWpP_EdkGXMEW
 VrDmFdA5sZGmqp35ih5K1qq36TQ5.i_8iEkX3RIR6apgVtf4K7GtJ9ZpbqEMl3z63O8FrtI1SLnr
 KcyhAgsCkoPtRjLxA1onPDe_cskIyyiK1dsyJBBy5MaqTq0lizeUaCWC59xmR3lMOg8sx8ByZRLA
 5ofdBX3ujg6eTt9esXl8XRbEAC.hqGukln7dfJmnANyZtPLfxNxtWxpAViKMw6V6q0H3iJ0nsRa0
 .2zQFh_.DyUqzjx6xvUqfFiif4xAf1_an7qn_gpM91OvFHbvBoI.d7tVyfC9rCcnqLC_dEcCi4OR
 N0DqtFoZaqPYFHzbsue351IODAEC325V4cA9YYiCWsNUtZHMUtnSVIb23Hsfa.Jp2YGrOYjWxPTJ
 gQecRmDfHODpHbteMGqkeIyuWyI81mUQ150bv0L.R3B7eP7.OcRGsbGYcUl1o.27eIle9PaBhlmO
 Se6OZlB1m5JhKbBpNWE8x5I5qMp8sfB7eL1iDsqOov5aIdRvq9O6WXwfoVu9cQNBOZE7UfEgO.eW
 TAKBwAe_JsUaF08lfTx52Bo9xRFZFGvDt5b2sXG0F2EY84osMllUsK058_evqRwECP61_3DdvoWG
 .Ksk8n7h1gVy102.BVzqiX6LT1drJUTnX4Bv3TPWZ62DnN6z.EuWkj_CoVNJjKoLEW1gi9BmFHWy
 9QL_xz.QR8OHlbflkgkFivRgWW9pvtXEhzY64rRAmQv.J2zrEPSd6QKwBXOZG38SzUL11BctQvmR
 Sww809wdGmB1DQM2N6mGW_29REUmgWljPznHJQJiuw8YQtEPA8LiCd_cQZlgnCOruwiKKlyu5SsL
 uHgHc5NBHsRPpU4igb6SjSuZyEtppkfvxqkIdEDk4FuTTElimsC9YtsVpBVyvyKnoVhau1xBo_6C
 CpiwIO20ClC6mu.VJA4vu9nrWJN5Y9CsUD77ZXxFSQv7oL4s_ESN40feT9XK7u5eQfvZOpkR45Zk
 veRFLT7ZS29HR3kQgcAYGTsV.RlcdKsZ1.qi5rDyKaah49doUcDnANkbYAVBnqHlxv99JZbQx0sC
 S3bDNdyjuilZPBO4K4b9eJ..WRp6hoywLuGaG.BNiwNJJLhae1h4pA7G8
X-Sonic-MF: <luangruo@HIDDEN>
X-Sonic-ID: 3af35865-82eb-4e4d-94d0-14a11474d139
Received: from sonic.gate.mail.ne1.yahoo.com by
 sonic311.consmr.mail.ne1.yahoo.com with HTTP; Fri, 6 Dec 2024 01:01:42 +0000
Received: by hermes--production-sg3-5b7954b588-bd2kk (Yahoo Inc. Hermes SMTP
 Server) with ESMTPA ID 1c6f5a6351711b82c513ede023a0beb1; 
 Fri, 06 Dec 2024 01:01:35 +0000 (UTC)
From: Po Lu <luangruo@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#74423: Low level key events
In-Reply-To: <867c8ezny3.fsf@HIDDEN> (Eli Zaretskii's message of "Thu, 05 Dec
 2024 07:41:24 +0200")
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN>
 <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN>
 <867c8ezny3.fsf@HIDDEN>
Date: Fri, 06 Dec 2024 09:01:30 +0800
Message-ID: <87ttbhhbf9.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Mailer: WebService/1.1.23040
 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo
Content-Length: 2578
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: 74423 <at> debbugs.gnu.org, Cecilio Pardo <cpardo@HIDDEN>,
 monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

>> Date: Wed, 4 Dec 2024 22:25:32 +0100
>> Cc: monnier@HIDDEN, luangruo@HIDDEN, 74423 <at> debbugs.gnu.org
>> From: Cecilio Pardo <cpardo@HIDDEN>
>> 
>> On 04/12/2024 21:01, Eli Zaretskii wrote:
>> >> +  DEFVAR_LISP ("enable-low-level-key-events", Venable_low_level_key_events,
>> >> +	       doc: /* If non-nil, reception of low-level key events is enabled.
>> >> +
>> >> +The value configures the set of keys that are handled:
>> >> +
>> >> +If t, send events for all keys.
>> >> +
>> >> +If a number, send events for the corresponding keysym.  When calling
>> >> +'llk-init', a set of variables with the xk- prefix is initialized with
>> >> +the numeric values for keysyms.  This numbers are platform dependent.
>> > 
>> > This seems to say that it is impossible to make the value do the same
>> > on all platforms?  If so, I think it's less useful than it could be,
>> > because Emacs generally tries to abstract platform-specific issues as
>> > much as possible, to facilitate platform-independent Lisp programs
>> > that work the same on all supported systems.
>> > 
>> > Also, there's no information here where to find the list of these xk-
>> > numbers.
>> 
>> Those are variables, like xk-shift-l, xk-a, xk-f1. There is also
>> llk-keysyms, that has a list of all xk-* symbols and their numeric values.
>> 
>> llk-init initializes all of these variables, using numbers that are 
>> platform dependent (XK_* constant KeySyms for X, VK_* "virtual keys" for 
>> windows. GDK keys match X keys.
>> 
>> Numbers are different, but users should use the variables, not the 
>> numbers, for binding and comparing to event values.
>
> This should be explicitly told in the doc string.  Also, if the xk-*
> variables are platform-independent, the rule to map their names to
> keyboard keys should be explained somewhere, perhaps in the manual, so
> that Lisp programmers could easily know how to identify the keys which
> they stand for.
>
>> I can translate the Windows numbers to the X equivalents, so that they 
>> are equal on both platforms.
>
> I'm not sure this is needed, if the xk-* names are the same.
>
>> In any case, I will document this better, with a manual change
>> proposal.
>
> Thanks.  This facility definitely needs to be in the ELisp manual
> before we install it.

I suggest calling XKeysymToString rather than interning the numerical
value of keysyms received.  This gives users some indication of the
identity of these keysyms without tediously referring to (at times
vendor-specific) keysymdef.h files.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 5 Dec 2024 05:43:48 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 05 00:43:48 2024
Received: from localhost ([127.0.0.1]:37770 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tJ4eR-0007vJ-PU
	for submit <at> debbugs.gnu.org; Thu, 05 Dec 2024 00:43:48 -0500
Received: from eggs.gnu.org ([209.51.188.92]:40458)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1tJ4eO-0007uw-MW
 for 74423 <at> debbugs.gnu.org; Thu, 05 Dec 2024 00:43:45 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tJ4cB-0003AC-UB; Thu, 05 Dec 2024 00:41:27 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=a3bEC1iroRYNkMH3JLrqAgX8+oFcHBmHcgriZfpmboQ=; b=pQSwtGBrG0by
 NX2NU+5+AkRE/U324frYRPEdOzVijNl6gU237tjoOofMANye8f3HG7DvFpASkT2yiI6DKEPQ5ILvd
 JJFMUIlMq0zlW3rEOpgKcl8VGysy/ESgWnkyLg3VTP90dvD97SYtHUWa3C64MuBq1njzGMv1KuxYW
 D/lwO419hSzfAywdDSEMcK6+mSJe6egvfCqAyy4PjckaVo15bRpm2eWuaNrfoerFPPhn/x97Tjfrb
 88GgvExv+GrLEo/29p61StcIzfjewUQ6Q6R8ZF+m7RWuhRl3jNXP9bueY2z/LqRu5BgusJlgOx12D
 vGV1f15HS1I3ZX80F+Ayvw==;
Date: Thu, 05 Dec 2024 07:41:24 +0200
Message-Id: <867c8ezny3.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN> (message from
 Cecilio Pardo on Wed, 4 Dec 2024 22:25:32 +0100)
Subject: Re: bug#74423: Low level key events
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN> <868qsvz07i.fsf@HIDDEN>
 <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Wed, 4 Dec 2024 22:25:32 +0100
> Cc: monnier@HIDDEN, luangruo@HIDDEN, 74423 <at> debbugs.gnu.org
> From: Cecilio Pardo <cpardo@HIDDEN>
> 
> On 04/12/2024 21:01, Eli Zaretskii wrote:
> >> +  DEFVAR_LISP ("enable-low-level-key-events", Venable_low_level_key_events,
> >> +	       doc: /* If non-nil, reception of low-level key events is enabled.
> >> +
> >> +The value configures the set of keys that are handled:
> >> +
> >> +If t, send events for all keys.
> >> +
> >> +If a number, send events for the corresponding keysym.  When calling
> >> +'llk-init', a set of variables with the xk- prefix is initialized with
> >> +the numeric values for keysyms.  This numbers are platform dependent.
> > 
> > This seems to say that it is impossible to make the value do the same
> > on all platforms?  If so, I think it's less useful than it could be,
> > because Emacs generally tries to abstract platform-specific issues as
> > much as possible, to facilitate platform-independent Lisp programs
> > that work the same on all supported systems.
> > 
> > Also, there's no information here where to find the list of these xk-
> > numbers.
> 
> Those are variables, like xk-shift-l, xk-a, xk-f1. There is also
> llk-keysyms, that has a list of all xk-* symbols and their numeric values.
> 
> llk-init initializes all of these variables, using numbers that are 
> platform dependent (XK_* constant KeySyms for X, VK_* "virtual keys" for 
> windows. GDK keys match X keys.
> 
> Numbers are different, but users should use the variables, not the 
> numbers, for binding and comparing to event values.

This should be explicitly told in the doc string.  Also, if the xk-*
variables are platform-independent, the rule to map their names to
keyboard keys should be explained somewhere, perhaps in the manual, so
that Lisp programmers could easily know how to identify the keys which
they stand for.

> I can translate the Windows numbers to the X equivalents, so that they 
> are equal on both platforms.

I'm not sure this is needed, if the xk-* names are the same.

> In any case, I will document this better, with a manual change
> proposal.

Thanks.  This facility definitely needs to be in the ELisp manual
before we install it.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 4 Dec 2024 21:25:41 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 04 16:25:41 2024
Received: from localhost ([127.0.0.1]:37083 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tIwsO-0000Qb-IQ
	for submit <at> debbugs.gnu.org; Wed, 04 Dec 2024 16:25:40 -0500
Received: from mail.imayhem.com ([82.223.54.191]:42839
 helo=zealous-pike.82-223-54-191.plesk.page)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <cpardo@HIDDEN>) id 1tIwsL-0000QJ-Hq
 for 74423 <at> debbugs.gnu.org; Wed, 04 Dec 2024 16:25:38 -0500
Received: from [192.168.68.104] (111.red-88-21-7.staticip.rima-tde.net
 [88.21.7.111])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id BFD0780108; 
 Wed,  4 Dec 2024 21:25:31 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 88.21.7.111) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[192.168.68.104]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Message-ID: <162dada7-ad54-4ca5-8f11-d55dd6dccb3c@HIDDEN>
Date: Wed, 4 Dec 2024 22:25:32 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74423: Low level key events
To: Eli Zaretskii <eliz@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN> <868qsvz07i.fsf@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <868qsvz07i.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 04/12/2024 21:01, Eli Zaretskii wrote:
>> +  DEFVAR_LISP ("enable-low-level-key-events", Venable_low_level_key_events,
>> +	       doc: /* If non-nil, reception of low-level key events is enabled.
>> +
>> +The value configures the set of keys that are handled:
>> +
>> +If t, send events for all keys.
>> +
>> +If a number, send events for the corresponding keysym.  When calling
>> +'llk-init', a set of variables with the xk- prefix is initialized with
>> +the numeric values for keysyms.  This numbers are platform dependent.
> 
> This seems to say that it is impossible to make the value do the same
> on all platforms?  If so, I think it's less useful than it could be,
> because Emacs generally tries to abstract platform-specific issues as
> much as possible, to facilitate platform-independent Lisp programs
> that work the same on all supported systems.
> 
> Also, there's no information here where to find the list of these xk-
> numbers.

Those are variables, like xk-shift-l, xk-a, xk-f1. There is also
llk-keysyms, that has a list of all xk-* symbols and their numeric values.

llk-init initializes all of these variables, using numbers that are 
platform dependent (XK_* constant KeySyms for X, VK_* "virtual keys" for 
windows. GDK keys match X keys.

Numbers are different, but users should use the variables, not the 
numbers, for binding and comparing to event values.

I can translate the Windows numbers to the X equivalents, so that they 
are equal on both platforms. In any case, I will document this better, 
with a manual change proposal.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 4 Dec 2024 20:02:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 04 15:02:08 2024
Received: from localhost ([127.0.0.1]:36972 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tIvZY-0004dB-Cl
	for submit <at> debbugs.gnu.org; Wed, 04 Dec 2024 15:02:08 -0500
Received: from eggs.gnu.org ([209.51.188.92]:57954)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1tIvZV-0004cc-TB
 for 74423 <at> debbugs.gnu.org; Wed, 04 Dec 2024 15:02:06 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tIvZM-0007Bn-Uk; Wed, 04 Dec 2024 15:01:58 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=VaJGnGERExV7SU0TEX1sxXtZ62ytI+bhJWmeUDGxmDI=; b=hIJXRoQuZc+B
 36SFQjqlWwK8utc9F+01624SvVf2ngEDUTmjj508MXweblxIqpG1Yv8tEebGmMEdAg5ul0UZ5zh67
 w+W6K1XWyNKNKjIKb5yubSwJndEBIkAZo2LyFsgDQblP+p8ITEkcuUgb0MmiFgPOhtVeG/RXRQphN
 9ABbfGC0O8XRwOmL8b0iwaZOeqjM7F1TzlrQdCbRd+1nt6NJnIBvLE3GvkRvhMSCUG1V5bwDRKrFp
 6aUL3BFZfxDQNrqu5YGov8X7mpV+35X0RVXx4EZlm5ag08ozRoOqwmGBkABa2lWSL9qRiR7OV6vqN
 X1yj8OCwgQdsBxzWSmWWhw==;
Date: Wed, 04 Dec 2024 22:01:53 +0200
Message-Id: <868qsvz07i.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN> (message from
 Cecilio Pardo on Mon, 2 Dec 2024 17:54:03 +0100)
Subject: Re: bug#74423: Low level key events
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
 <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74423
Cc: luangruo@HIDDEN, 74423 <at> debbugs.gnu.org, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Mon, 2 Dec 2024 17:54:03 +0100
> Cc: 74423 <at> debbugs.gnu.org
> From: Cecilio Pardo <cpardo@HIDDEN>
> 
> Here is a new version of the patch. Sorry it took so long. It
> addresses most of the notes I got:

Thanks.  There are several minor issues with this (first line of doc
strings not a single complete sentence, one space between sentences,
etc.), but I guess this is too early for such details.

Other than that, I have only one comment:

> +  DEFVAR_LISP ("enable-low-level-key-events", Venable_low_level_key_events,
> +	       doc: /* If non-nil, reception of low-level key events is enabled.
> +
> +The value configures the set of keys that are handled:
> +
> +If t, send events for all keys.
> +
> +If a number, send events for the corresponding keysym.  When calling
> +'llk-init', a set of variables with the xk- prefix is initialized with
> +the numeric values for keysyms.  This numbers are platform dependent.

This seems to say that it is impossible to make the value do the same
on all platforms?  If so, I think it's less useful than it could be,
because Emacs generally tries to abstract platform-specific issues as
much as possible, to facilitate platform-independent Lisp programs
that work the same on all supported systems.

Also, there's no information here where to find the list of these xk-
numbers.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 2 Dec 2024 16:54:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Dec 02 11:54:19 2024
Received: from localhost ([127.0.0.1]:56362 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tI9ge-00033s-GQ
	for submit <at> debbugs.gnu.org; Mon, 02 Dec 2024 11:54:18 -0500
Received: from mail.imayhem.com ([82.223.54.191]:36863
 helo=zealous-pike.82-223-54-191.plesk.page)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <cpardo@HIDDEN>) id 1tI9gY-000333-IW
 for 74423 <at> debbugs.gnu.org; Mon, 02 Dec 2024 11:54:13 -0500
Received: from [192.168.68.104] (111.red-88-21-7.staticip.rima-tde.net
 [88.21.7.111])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id DB4AF80147; 
 Mon,  2 Dec 2024 16:54:04 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 88.21.7.111) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[192.168.68.104]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Content-Type: multipart/mixed; boundary="------------kdIRyaCiBUPUB4DSQ0iPV24t"
Message-ID: <b0b914a0-b454-41b0-aa3d-d9e243c210f5@HIDDEN>
Date: Mon, 2 Dec 2024 17:54:03 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74423: Low level key events
To: Stefan Monnier <monnier@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 Po Lu <luangruo@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
 <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: 74423 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is a multi-part message in MIME format.
--------------kdIRyaCiBUPUB4DSQ0iPV24t
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Here is a new version of the patch. Sorry it took so long. It
addresses most of the notes I got:

Notes by Po Lu:
   - I think now the associated modifier for a key is computed
     properly, with or without XKB for plain X, and for gtk.
   - 'ralt' not generated for ISO_Level3_Shift. This will have to stay
     like this. What we know about the keys if what the system lets us.
   - Don't call x_any_window_to_frame if already called for the event.

Notes by Eli:
   - Change testing for Venable_low_level_key_events. This variable now
     is more complex.

Notes by Stefan:
   - Created and used event-* functions to access event.
   - Only one event with both pieces of information.
   - Selection of keys. Now the variable enable-low-level-key-events
     can be used to select exactly which keys we want to process.
   - About creating lisp object in handle_one_xevent, it is done in
     other events too.

The lisp interface is as follows:
   - A list of variables with keysym values is initialized (xk-*), so the
     user can select keys, not just modifiers.
   - Users can bind globally commands or functions with llk-bind to taps.
   - To use a tapped key as a new modifier, this works:
     (llk-bind 'tap 'xk-shift-r (lambda ()
                (message "H-...")
                (setq unread-command-events
                   (append (event-apply-hyper-modifier nil) nil))))
   - Added the function describe-low-level-key to see what
     keysym/modifier it triggers.


This is implemented for X, pgtkw and MS-Windows.
The pgtj implementation detects that a key is a modifier to filter it, 
but can't decide which one it its.



--------------kdIRyaCiBUPUB4DSQ0iPV24t
Content-Type: text/plain; charset=UTF-8;
 name="0001-Send-event-for-key-presses-and-key-releases.patch"
Content-Disposition: attachment;
 filename="0001-Send-event-for-key-presses-and-key-releases.patch"
Content-Transfer-Encoding: base64

RnJvbSA4NjMwNjhmNGUxZTE4N2JhMzMzODJjMGRlYmI4Y2FlZTViYmU1Y2JlIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDZWNpbGlvIFBhcmRvIDxjcGFyZG9AaW1heWhlbS5j
b20+CkRhdGU6IE1vbiwgMiBEZWMgMjAyNCAxNzozMDo0MiArMDEwMApTdWJqZWN0OiBbUEFU
Q0hdIFNlbmQgZXZlbnQgZm9yIGtleSBwcmVzc2VzIGFuZCBrZXkgcmVsZWFzZXMuCgpEZXRl
Y3QgZG91YmxlL3RyaXBlIHRhcHMuCgoqIHNyYy9ndGt1dGlsLmMgKHhnX2NyZWF0ZV9mcmFt
ZV93aWRnZXRzKTogTW9kaWZpZWQgdG8gaGFuZGxlIGtleQpyZWxlYXNlIGV2ZW50cy4KKHhn
X21heWJlX3NlbmRfbG93X2xldmVsX2tleV9ldmVudCk6IE5ldyBmdW5jdGlvbiB0aGF0IHNl
bmRzIGtleQpldmVudHMuCih4Z193aWRnZXRfa2V5X3ByZXNzX2V2ZW50X2NiKTogTW9kaWZp
ZWQgdG8gc2VuZCBsb3cgbGV2ZWwga2V5IGV2ZW50cy4KKHhnX3dpZGdldF9rZXlfcmVsZWFz
ZV9ldmVudF9jYik6TmV3IGZ1bmN0aW9uIHRvIHNlbmQgbG93IGxldmVsIGtleQpldmVudHMg
b24ga2V5IHJlbGVhc2UuCiogc3JjL2tleWJvYXJkLmMgKGtiZF9idWZmZXJfZ2V0X2V2ZW50
KTogTW9kaWZpZWQgdG8gaGFuZGxlIGxvdyBsZXZlbAprZXlib2FyZCBldmVudHMuCihtYWtl
X2xpc3B5X2V2ZW50KTogTW9kaWZpZWQgdG8gaGFuZGxlIGxvdyBsZXZlbCBrZXlib2FyZCBl
dmVudHMuCihrYmRfbG93X2xldmVsX2tleV9pc19lbmFibGVkKTogTmV3IGZ1bmN0aW9uIHRv
IGRlY2ljZSBpZiBhIHBhcnRpY3VsYXIKa2V5IHNob3VsZCBnZW5lcmF0ZSBldmVudHMsIGxv
b2tpbmcgYXQgY29uZmlndXJhdGlvbiwKKHN5bXNfb2Zfa2V5Ym9hcmQpOiBBZGRlZCBzeW1i
b2xzIGFuZCB2YXJpYWxibGVzLgooa2V5c19vZl9rZXlib2FyZCk6IE1vZGlmaWVkIHRvIG1h
cCBsb3cgbGV2ZWwga2V5IGV2ZW50cyB0bwonc3BlY2lhbC1ldmVudC1tYXAnLgoqIHNyYy9r
ZXlib2FyZC5oOiBNb2RpZmllZCB3aXRoIGZ1bmN0aW9uIHByb3RvdHlwZS4KKiBzcmMvcGd0
a3Rlcm0uYyAocGd0a19tYXliZV9zZW5kX2xvd19sZXZlbF9rZXlfZXZlbnQpOiBOZXcgZnVu
Y3Rpb24KdGhhdCBzZW5kcyBrZXkgZXZlbnRzLgooa2V5X3ByZXNzX2V2ZW50KTogTW9kaWZp
ZWQgdG8gaGFuZGxlIGxvdyBsZXZlbCBrZXlib2FyZCBldmVudHMuCihrZXlfcmVsZWFzZV9l
dmVudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBsb3cgbGV2ZWwga2V5Ym9hcmQgZXZlbnRzLgoq
IHNyYy90ZXJtaG9va3MuaDogTW9kaWZpZWQgdG8gZGVmaW5lIGNvbnN0YW50LgoqIHNyYy93
MzJmbnMuYyAodzMyX3duZF9wcm9jKTogTW9kaWZpZWQgdG8gZ2VuZXJhdGUgbG93IGxldmVs
IGtleQpldmVudHMuCiogc3JjL3czMnRlcm0uYyAodzMyX3JlYWRfc29ja2V0KTogTW9kaWZp
ZWQgdG8gZ2VuZXJhdGUgbG93IGxldmVsIGtleQpldmVudHMuCiogc3JjL3czMnRlcm0uaCAo
V01fRU1BQ1NfSU1FX1NUQVRVUyk6IE1vZGlmaWVkIHRvIGRlZmluZSBjb25zdGFudHMuCiog
c3JjL3h0ZXJtLmMgKHhfZ2V0X21vZGlmaWVyX2Zvcl9rZXljb2RlKTogTmV3IGZ1bmN0aW9u
IHRvIGRlY2lkZQp3aGljaCAoaWYgYW55KSBtb2RpZmllciBjb3JyZXNwb25kcyB0byBhIGdp
dmVuIGtleS4KKHhfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50KTogTmV3IGZ1bmN0
aW9uIHRoYXQgc2VuZHMga2V5CmV2ZW50cy4KKGhhbmRsZV9vbmVfeGV2ZW50KTogTW9kaWZp
ZWQgdG8gaGFuZGxlIGxvdyBsZXZlbCBrZXkgZXZlbnRzLgooc3ltc19vZl94dGVybSk6IE1v
ZGlmaWVkIHRvIGRlZmluZGUgc3ltYm9sLgoqIHNyYy94dGVybS5oOiBNb2RpZmllZCB3aXRo
IGZ1bmN0aW9uIHByb3RvdHlwZQoqIGxpc3AvbG93LWxldmVsLWtleS5lbCAoTmV3IGZpbGUp
LgoobGxrLWJpbmRpbmdzKTogVXNlciBiaW5kaW5ncyBmb3IgbG93IGxldmVsIGtleSBldmVu
dHMuCihsbGstdGFwLWNvdW50KTogVXNlciBvcHRpb24uCihsbGstdGFwLXRpbWVvdXQpOiBV
c2VyIG9wdGlvbi4KKGxsay10YXAta2V5cyk6IFVzZXIgb3B0aW9uLgoobGxrLWtleXN5bXMp
OiBMaXN0IG9mIGF2YWlsYWJsZSBrZXlzeW1zLgooZGVmaW5lLXhrKTogTWFjcm8gZm9yIGRl
ZmluaW5nIGtleXN5bXMuCihsbGstZGVmaW5lLWtleXN5bXMpOiBCdWlsZCBsbGsta2V5c3lt
cy4KKGxsay1pbml0KTogRnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBsb3cgbGV2ZWwga2V5IGhh
bmRsaW5nLgooZXZlbnQtaXMta2V5LXByZXNzKTogR2V0IGZpZWxkIGZyb20gZXZlbnQuCihl
dmVudC1rZXlzeW0pOiBHZXQgZmllbGQgZnJvbSBldmVudC4KKGV2ZW50LW1vZGlmaWVyKTog
R2V0IGZpZWxkIGZyb20gZXZlbnQuCihldmVudC10aW1lKTogR2V0IGZpZWxkIGZyb20gZXZl
bnQuCihsbGstYmluZCk6IEZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGJpbmRpbmcuCihsbGstZXZl
bnRzKTogRXZlbnQgaGlzdG9yeSBmb3IgdGFwIGRldGVjdGlvbi4KKGxsay1kZXRlY3Qtbi10
YXApOiBGdW5jdGlvbiB0byBkZXRlY3QgdGFwcy4KKGRlc2NyaWJlLWxvdy1sZXZlbC1rZXkp
OiBDb21tYW5kIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhIGtleS4KKGxsay1zaG93LWV2
ZW50LWRlc2NyaXB0aW9uKTogU2hvdyBoZWxwIGJ1ZmZlciB3aXRoIGluZm9ybWF0aW9uCmFi
b3V0IGFuIGV2ZW50LgoobGxrLWhhbmRsZSk6IEhhbmRsZXIgZm9yIGtleSBldmVudHMuCi0t
LQogbGlzcC9sb3ctbGV2ZWwta2V5LmVsIHwgMzM1ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKwogc3JjL2d0a3V0aWwuYyAgICAgICAgIHwgIDgxICsrKysr
KysrKysKIHNyYy9rZXlib2FyZC5jICAgICAgICB8ICA2MSArKysrKysrKwogc3JjL2tleWJv
YXJkLmggICAgICAgIHwgICAxICsKIHNyYy9wZ3RrdGVybS5jICAgICAgICB8ICA1NSArKysr
KysrCiBzcmMvdGVybWhvb2tzLmggICAgICAgfCAgIDEgKwogc3JjL3czMmZucy5jICAgICAg
ICAgIHwgIDExICsrCiBzcmMvdzMydGVybS5jICAgICAgICAgfCAgNDkgKysrKysrCiBzcmMv
dzMydGVybS5oICAgICAgICAgfCAgIDMgKy0KIHNyYy94dGVybS5jICAgICAgICAgICB8IDE0
MiArKysrKysrKysrKysrKysrKysKIHNyYy94dGVybS5oICAgICAgICAgICB8ICAgMiArCiAx
MSBmaWxlcyBjaGFuZ2VkLCA3NDAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGxpc3AvbG93LWxldmVsLWtleS5lbAoKZGlmZiAtLWdpdCBhL2xp
c3AvbG93LWxldmVsLWtleS5lbCBiL2xpc3AvbG93LWxldmVsLWtleS5lbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODVjZGFhYWYwZjQKLS0tIC9kZXYvbnVs
bAorKysgYi9saXNwL2xvdy1sZXZlbC1rZXkuZWwKQEAgLTAsMCArMSwzMzUgQEAKKzs7OyAt
Ki0gbGV4aWNhbC1iaW5kaW5nOiB0IC0qLQorCis7OyBUaGUgcGh5c2ljYWwta2V5IGV2ZW50
IGlzIGxpa2UgdGhpczoKKzs7IChwaHlzaWNhbC1rZXkgSVMtS0VZLVBSRVNTIEtFWSBNT0RJ
RklFUiBUSU1FIEZSQU1FKQorOzsgSVMtS0VZLVBSRVNTIGlzIHQgaWYgdGhlIGtleSBoYXMg
YmVlbiBwcmVzc2VkLCBuaWwgaWYgaXQgaGFzIGJlZW4gcmVsZWFzZWQuCis7OyBLRVkgaXMg
dGhlIGtleXN5bSBudW1iZXIuCis7OyBNT0RJRklFUiBpcyB0aGUgbW9kaWZpZXIgYXNzb2Np
YXRlZCB3aXRoIHRoaXMga2V5LiBJdCBpcyBuaWwgaWYgdGhlIGtleSBpcworOzsgbm90IGEg
bW9kaWZpZXIuIEl0IGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBzaGlm
dCwgY29udHJvbCwgbWV0YSwKKzs7IHN1cGVyLCBoeXBlciwgYWx0LiBJdCBjYW4gYWxzbyBi
ZSB0IGlmIHRoZSBrZXkgaXMgYSBtb2RpZmllciBidXQgaXQgY2FuJ3QgYmUKKzs7IGlkZW50
aWZpZWQuCis7OyBUSU1FIGlzIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIG9mIHRo
ZSBldmVudC4KKzs7IEZSQU1FIGlzIHRoZSBmcmFtZSB3aGVyZSB0aGUgZXZlbnQgaGFwcGVu
ZWQuCis7OworOzsgQWZ0ZXIgY2FsbGluZyAnbGxrLWluaXQnIGFuZCBzZXR0aW5nIGEgbm9u
LW5pbCB2YWx1ZSBmb3IKKzs7ICdlbmFibGUtbG93LWxldmVsLWtleS1ldmVudHMnLCBldmVu
dHMgYmVnaW4gdG8gYmUgaGFuZGxlZCBieSAnbGxrLWhhbmRsZXInLAorOzsgd2hpY2ggdHJp
ZXMgdG8gZGV0ZWN0IG4tdGFwcyBhbmQgY2FsbHMgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rp
b24uCisKKyhyZXF1aXJlICdjbC1saWIpCisKKzs7IFVzZXIgb3B0aW9ucworCisoZGVmdmFy
IGxsay1iaW5kaW5ncyBuaWwKKyAgIkJpbmRpbmdzIGZvciBsb3cgbGV2ZWwga2V5IGV2ZW50
cyAocHJlc3MvcmVsZWFzZS90YXApLgorVXNlIHRoZSBgbGxrLWJpbmQnIGZ1bmN0aW9uIHRv
IGFkZCBiaW5kaW5ncy4gIFNlZSBpdHMgZG9jdW1lbnRhdGlvbiBmb3IKK2EgZGVzY3JpcHRp
b24gb2YgdGhlIGJpbmRpbmcgaW5mb3JtYXRpb24uIikKKworKGRlZnZhciBsbGstdGFwLWNv
dW50IDIKKyAgIk51bWJlciBvciBrZXkgcHJlc3MvcmVsZWFzZXMgdG8gY29uc2lkZXIgYSB0
YXAuIikKKworKGRlZnZhciBsbGstdGFwLXRpbWVvdXQgMTAwMAorICAiVGltZSBpbiBtaWxs
aXNlY29uZHMgYmV0d2VlbiBjb25zZWN1dGl2ZSBrZXkgcHJlc3Nlcy9yZWxlYXNlcyB0bwor
Y29uc2lkZXIgYSB0YXAuIikKKworKGRlZnZhciBsbGstdGFwLWtleXMKKyAgJyh4ay1zaGlm
dC1sIHhrLXNoaWZ0LXIgeGstY29udHJvbC1sIHhrLWNvbnRyb2wtciBtZXRhKQorICAiS2V5
cyB0aGF0IGNhbiBnZW5lcmF0ZSB0YXBzLiIpCisKKyhkZWZ2YXIgbGxrLWtleXN5bXMgbmls
CisgICJMaXN0IG9mIGtleXN5bSBudW1iZXJzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHN5
bWJvbHMuCitFYWNoIGVsZW1lbnQgaGFzIHRoZSBmb3JtIChLRVlTWU0gLiBTWU1CT0wpLiAg
VGhlIHZhcmlhYmxlIHZhbHVlIGZvcgorZWFjaCBzeW1ib2wgaXMgdGhlIGtleXN5bS4gIFRo
aXMgbGlzdCBpcyBpbml0aWFsaXplZCBieSBgbGxrLWluaXQnLiIpCisKKyhkZWZ2YXIgbGxr
LWRlc2NyaWJlLW5leHQtcHJlc3MgbmlsCisgICJJbnRlcm5hbCB2YXJpYWJsZSB0byBtYXJr
IHRoYXQgbmV4dCBrZXkgcHJlc3Mgc2hvdWxkIGJlIGRlc2NyaWJlZC4iKQorCisoZGVmbWFj
cm8gZGVmaW5lLXhrIChuYW1lIHgta2V5c3ltIHczMi1rZXlzeW0pCisgICJJbnRlcm5hbCBt
YWNybyB0byBkZWZpbmUga2V5c3ltcy4iCisgIGAobGV0ICgoa3N5bSAocGNhc2UgKHdpbmRv
dy1zeXN0ZW0pCisgICAgICAgICAgICAgICAgICgncGd0ayAseC1rZXlzeW0pCisgICAgICAg
ICAgICAgICAgICgneCAseC1rZXlzeW0pCisgICAgICAgICAgICAgICAgICgndzMyICx3MzIt
a2V5c3ltKSkpKQorICAgICAoZGVmY29uc3QgLG5hbWUga3N5bSAiQ29uc3RhbnQgZm9yIGEg
a2V5c3ltIHZhbHVlLiIpCisgICAgIChwdXNoIChjb25zIGtzeW0gJyxuYW1lKSBsbGsta2V5
c3ltcykpKQorCisoZGVmdW4gbGxrLWRlZmluZS1rZXlzeW1zICgpCisgICJJbml0aWFsaXpl
IHRoZSBrZXlzeW0gbGlzdCwgYGxsay1rZXlzeW1zJy4gIENhbGxlZCBmcm9tIGBsbGstaW5p
dCcuIgorICAoc2V0cSBsbGsta2V5c3ltcyBuaWwpCisKKyAgOzsgdHR5IGtleXMKKyAgKGRl
ZmluZS14ayB4ay1iYWNrc3BhY2UgICAjeGZmMDggI3gwOCkgOzsgWEtfQmFja1NwYWNlIFZL
X0JBQ0sKKyAgKGRlZmluZS14ayB4ay10YWIgICAgICAgICAjeGZmMDkgI3gwOSkgOzsgWEtf
VGFiIFZLX1RBQgorICAoZGVmaW5lLXhrIHhrLWNsZWFyICAgICAgICN4ZmYwYiAjeDBDKSA7
OyBYS19DbGVhciBWS19DTEVBUgorICAoZGVmaW5lLXhrIHhrLXJldHVybiAgICAgICN4ZmYw
ZCAjeDBEKSA7OyBYS19SZXR1cm4gVktfUkVUVVJOCisgIChkZWZpbmUteGsgeGstcGF1c2Ug
ICAgICAgI3hmZjEzICN4MTMpIDs7IFhLX1BhdXNlIFZLX1BBVVNFCisgIChkZWZpbmUteGsg
eGstc2Nyb2xsLWxvY2sgI3hmZjE0ICN4OTEpIDs7IFhLX1Njcm9sbF9Mb2NrIFZLX1NDUk9M
TAorICAoZGVmaW5lLXhrIHhrLWVzY2FwZSAgICAgICN4ZmYxQiAjeDFCKSA7OyBYS19Fc2Nh
cGUgVktfRVNDQVBFCisgIChkZWZpbmUteGsgeGstZGVsZXRlICAgICAgI3hmZmZmICN4MkUp
IDs7IFhLX0RlbGV0ZSBWS19ERUxFVEUKKworICA7OyBDdXJzb3IgY29udHJvbCBhbmQgbW90
aW9uCisgIChkZWZpbmUteGsgeGstaG9tZSAgICAgICAgI3hmZjUwICN4MjQpIDs7IFhLX0hv
bWUgVktfSE9NRQorICAoZGVmaW5lLXhrIHhrLWxlZnQgICAgICAgICN4ZmY1MSAjeDI1KSA7
OyBYS19MZWZ0IFZLX0xFRlQKKyAgKGRlZmluZS14ayB4ay11cCAgICAgICAgICAjeGZmNTIg
I3gyNikgOzsgWEtfVXAgVktfVVAKKyAgKGRlZmluZS14ayB4ay1yaWdodCAgICAgICAjeGZm
NTMgI3gyNykgOzsgWEtfUmlnaHQgVktfUklHSFQKKyAgKGRlZmluZS14ayB4ay1kb3duICAg
ICAgICAjeGZmNTQgI3gyOCkgOzsgWEtfRG93biBWS19ET1dOCisgIChkZWZpbmUteGsgeGst
cGFnZS11cCAgICAgI3hmZjU1ICN4MjEpIDs7IFhLX1BhZ2VfVXAgVktfUFJJT1IKKyAgKGRl
ZmluZS14ayB4ay1wYWdlLWRvd24gICAjeGZmNTYgI3gyMikgOzsgWEtfUGFnZV9Eb3duIFZL
X05FWFQKKyAgKGRlZmluZS14ayB4ay1lbmQgICAgICAgICAjeGZmNTcgI3gyMykgOzsgWEtf
RW5kIFZLX0VORAorICAoZGVmaW5lLXhrIHhrLWJlZ2luICAgICAgICN4ZmY1OCAjeDI0KSA7
OyBYS19CZWdpbiBWS19IT01FCisKKyAgOzsgU3BlY2lhbCBXaW5kb3dzIGtleWJvYXJkIGtl
eXMKKyAgKGRlZmluZS14ayB4ay13aW4tbCAgICAgICAjeEZGNUIgI3g1QikgOzsgWEtfV2lu
X0wgVktfTFdJTgorICAoZGVmaW5lLXhrIHhrLXdpbi1yICAgICAgICN4RkY1QyAjeDVDKSA7
OyBYS19XaW5fUiBWS19SV0lOCisgIChkZWZpbmUteGsgeGstYXBwICAgICAgICAgI3hGRjVE
ICN4NUQpIDs7IFhLX0FwcCBWS19BUFBTCisKKyAgOzsgTWlzYyBmdW5jdGlvbnMKKyAgKGRl
ZmluZS14ayB4ay1zZWxlY3QgICAgICAjeGZmNjAgI3gyOSkgOzsgWEtfU2VsZWN0IFZLX1NF
TEVDVAorICAoZGVmaW5lLXhrIHhrLXByaW50ICAgICAgICN4ZmY2MSAjeDJBKSA7OyBYS19Q
cmludCBWS19QUklOVAorICAoZGVmaW5lLXhrIHhrLWluc2VydCAgICAgICN4ZmY2NCAjeDJE
KSA7OyBYS19JbnNlcnQgVktfSU5TRVJUCisgIChkZWZpbmUteGsgeGstbnVtLWxvY2sgICAg
I3hmZjdmICN4OTApIDs7IFhLX051bV9Mb2NrIFZLX05VTUxPQ0sKKworICA7OyBLZXlwYWQK
KyAgOzsgVE9ETzogQ2hlY2sgdmFsdWVzIGZvciBNUy1XaW5kb3dzCisgIChkZWZpbmUteGsg
eGsta3AtZW50ZXIgICAgI3hmZjhkIG5pbCkgOzsgWEtfS1BfRW50ZXIgPz8/CisgIChkZWZp
bmUteGsgeGsta3AtbXVsdGlwbHkgI3hmZmFhIG5pbCkgOzsgWEtfS1BfTXVsdGlwbHkgPz8/
CisgIChkZWZpbmUteGsgeGsta3AtYWRkICAgICAgI3hmZmFiIG5pbCkgOzsgWEtfS1BfQWRk
ID8/PworICAoZGVmaW5lLXhrIHhrLWtwLXN1YnRyYWN0ICN4ZmZhZCBuaWwpIDs7IFhLX0tQ
X1N1YnRyYWN0ID8/PworICAoZGVmaW5lLXhrIHhrLWtwLWRlY2ltYWwgICN4ZmZhZSBuaWwp
IDs7IFhLX0tQX0RlY2ltYWwgPz8/CisgIChkZWZpbmUteGsgeGsta3AtZGl2aWRlICAgI3hm
ZmFmIG5pbCkgOzsgWEtfS1BfRGl2aWRlID8/PworICAoZGVmaW5lLXhrIHhrLWtwLTAgICAg
ICAgICN4ZmZiMCAjeDYwKSA7OyBYS19LUF8wIFZLX05VTVBBRDAKKyAgKGRlZmluZS14ayB4
ay1rcC0xICAgICAgICAjeGZmYjEgI3g2MSkgOzsgWEtfS1BfMSBWS19OVU1QQUQxCisgIChk
ZWZpbmUteGsgeGsta3AtMiAgICAgICAgI3hmZmIyICN4NjIpIDs7IFhLX0tQXzIgVktfTlVN
UEFEMgorICAoZGVmaW5lLXhrIHhrLWtwLTMgICAgICAgICN4ZmZiMyAjeDYzKSA7OyBYS19L
UF8zIFZLX05VTVBBRDMKKyAgKGRlZmluZS14ayB4ay1rcC00ICAgICAgICAjeGZmYjQgI3g2
NCkgOzsgWEtfS1BfNCBWS19OVU1QQUQ0CisgIChkZWZpbmUteGsgeGsta3AtNSAgICAgICAg
I3hmZmI1ICN4NjUpIDs7IFhLX0tQXzUgVktfTlVNUEFENQorICAoZGVmaW5lLXhrIHhrLWtw
LTYgICAgICAgICN4ZmZiNiAjeDY2KSA7OyBYS19LUF82IFZLX05VTVBBRDYKKyAgKGRlZmlu
ZS14ayB4ay1rcC03ICAgICAgICAjeGZmYjcgI3g2NykgOzsgWEtfS1BfNyBWS19OVU1QQUQ3
CisgIChkZWZpbmUteGsgeGsta3AtOCAgICAgICAgI3hmZmI4ICN4NjgpIDs7IFhLX0tQXzgg
VktfTlVNUEFEOAorICAoZGVmaW5lLXhrIHhrLWtwLTkgICAgICAgICN4ZmZiOSAjeDY5KSA7
OyBYS19LUF85IFZLX05VTVBBRDkKKworICA7OyBGdW5jdGlvbiBrZXlzCisgIChkZWZpbmUt
eGsgeGstZjEgICAgICAgICAgI3hmZmJlICN4NzApIDs7IFhLX0YxIFZLX0YxCisgIChkZWZp
bmUteGsgeGstZjIgICAgICAgICAgI3hmZmJmICN4NzEpIDs7IFhLX0YyIFZLX0YyCisgIChk
ZWZpbmUteGsgeGstZjMgICAgICAgICAgI3hmZmMwICN4NzIpIDs7IFhLX0YzIFZLX0YzCisg
IChkZWZpbmUteGsgeGstZjQgICAgICAgICAgI3hmZmMxICN4NzMpIDs7IFhLX0Y0IFZLX0Y0
CisgIChkZWZpbmUteGsgeGstZjUgICAgICAgICAgI3hmZmMyICN4NzQpIDs7IFhLX0Y1IFZL
X0Y1CisgIChkZWZpbmUteGsgeGstZjYgICAgICAgICAgI3hmZmMzICN4NzUpIDs7IFhLX0Y2
IFZLX0Y2CisgIChkZWZpbmUteGsgeGstZjcgICAgICAgICAgI3hmZmM0ICN4NzYpIDs7IFhL
X0Y3IFZLX0Y3CisgIChkZWZpbmUteGsgeGstZjggICAgICAgICAgI3hmZmM1ICN4NzcpIDs7
IFhLX0Y4IFZLX0Y4CisgIChkZWZpbmUteGsgeGstZjkgICAgICAgICAgI3hmZmM2ICN4Nzgp
IDs7IFhLX0Y5IFZLX0Y5CisgIChkZWZpbmUteGsgeGstZjEwICAgICAgICAgI3hmZmM3ICN4
NzkpIDs7IFhLX0YxMCBWS19GMTAKKyAgKGRlZmluZS14ayB4ay1mMTEgICAgICAgICAjeGZm
YzggI3g3QSkgOzsgWEtfRjExIFZLX0YxMQorICAoZGVmaW5lLXhrIHhrLWYxMiAgICAgICAg
ICN4ZmZjOSAjeDdCKSA7OyBYS19GMTIgVktfRjEyCisgIChkZWZpbmUteGsgeGstZjEzICAg
ICAgICAgI3hmZmNhICN4N0MpIDs7IFhLX0YxMyBWS19GMTMKKyAgKGRlZmluZS14ayB4ay1m
MTQgICAgICAgICAjeGZmY2IgI3g3RCkgOzsgWEtfRjE0IFZLX0YxNAorICAoZGVmaW5lLXhr
IHhrLWYxNSAgICAgICAgICN4ZmZjYyAjeDdFKSA7OyBYS19GMTUgVktfRjE1CisgIChkZWZp
bmUteGsgeGstZjE2ICAgICAgICAgI3hmZmNkICN4N0YpIDs7IFhLX0YxNiBWS19GMTYKKyAg
KGRlZmluZS14ayB4ay1mMTcgICAgICAgICAjeGZmY2UgI3g4MCkgOzsgWEtfRjE3IFZLX0Yx
NworICAoZGVmaW5lLXhrIHhrLWYxOCAgICAgICAgICN4ZmZjZiAjeDgxKSA7OyBYS19GMTgg
VktfRjE4CisgIChkZWZpbmUteGsgeGstZjE5ICAgICAgICAgI3hmZmQwICN4ODIpIDs7IFhL
X0YxOSBWS19GMTkKKyAgKGRlZmluZS14ayB4ay1mMjAgICAgICAgICAjeGZmZDEgI3g4Mykg
OzsgWEtfRjIwIFZLX0YyMAorICAoZGVmaW5lLXhrIHhrLWYyMSAgICAgICAgICN4ZmZkMiAj
eDg0KSA7OyBYS19GMjEgVktfRjIxCisgIChkZWZpbmUteGsgeGstZjIyICAgICAgICAgI3hm
ZmQzICN4ODUpIDs7IFhLX0YyMiBWS19GMjIKKyAgKGRlZmluZS14ayB4ay1mMjMgICAgICAg
ICAjeGZmZDQgI3g4NikgOzsgWEtfRjIzIFZLX0YyMworICAoZGVmaW5lLXhrIHhrLWYyNCAg
ICAgICAgICN4ZmZkNSAjeDg3KSA7OyBYS19GMjQgVktfRjI0CisKKyAgOzsgTW9kaWZpZXIg
a2V5cworICAoZGVmaW5lLXhrIHhrLXNoaWZ0LWwgICAgICN4ZmZlMSAjeEEwKSA7OyBYS19T
aGlmdF9MIFZLX0xTSElGVAorICAoZGVmaW5lLXhrIHhrLXNoaWZ0LXIgICAgICN4ZmZlMiAj
eEExKSA7OyBYS19TaGlmdF9SIFZLX1JTSElGVAorICAoZGVmaW5lLXhrIHhrLWNvbnRyb2wt
bCAgICN4ZmZlMyAjeEEyKSA7OyBYS19Db250cm9sX0wgVktfTENPTlRST0wKKyAgKGRlZmlu
ZS14ayB4ay1jb250cm9sLXIgICAjeGZmZTQgI3hBMykgOzsgWEtfQ29udHJvbF9SIFZLX1JD
T05UUk9MCisgIChkZWZpbmUteGsgeGstY2Fwcy1sb2NrICAgI3hmZmU1ICN4MTQpIDs7IFhL
X0NhcHNfTG9jayBWS19DQVBJVEFMCisgIChkZWZpbmUteGsgeGstbWV0YWwtbCAgICAgI3hm
ZmU3IG5pbCkgOzsgWEtfTWV0YV9MCisgIChkZWZpbmUteGsgeGstbWV0YWwtdCAgICAgI3hm
ZmVlIG5pbCkgOzsgWEtfTWV0YV9SCisgIChkZWZpbmUteGsgeGstYWx0LWwgICAgICAgI3hm
ZmU5ICN4QTQpIDs7IFhLX0FsdF9MIFZLX0xNRU5VCisgIChkZWZpbmUteGsgeGstYWx0LXIg
ICAgICAgI3hmZmVhICN4QTUpIDs7IFhLX0FsdF9SIFZLX1JNRU5VCisgIChkZWZpbmUteGsg
eGstc3VwZXItbCAgICAgI3hmZmViIG5pbCkgOzsgWEtfU3VwZXJfTAorICAoZGVmaW5lLXhr
IHhrLXN1cGVyLXIgICAgICN4ZmZlYyBuaWwpIDs7IFhLX1N1cGVyX1IKKyAgKGRlZmluZS14
ayB4ay1oeXBlci1sICAgICAjeGZmZWQgbmlsKSA7OyBYS19IeXBlcl9MCisgIChkZWZpbmUt
eGsgeGstaHlwZXItciAgICAgI3hmZmVlIG5pbCkgOzsgWEtfSHlwZXJfUgorCisgIDs7IExh
dGluIDEKKyAgOzsgRm9yIG51bWJlcnMgYW5kIGxldHRlcnMsIE1TLVdpbmRvd3MgZG9lcyBu
b3QgZGVmaW5lIGNvbnN0YW50IG5hbWVzLgorICA7OyBYMTEgZGVmaW5lcyBkaXN0aW5jdCBr
ZXlzeW1zIGZvciBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZQorICA7OyBsZXR0ZXJzLiBXZSB1
c2Ugb25seSB0aGUgdXBwZXJjYXNlIG9uZXMuIEV2ZW50cyB3aXRoIGxvd2VyY2FzZQorICA7
OyBsZXR0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLgorICAoZGVmaW5lLXhrIHhr
LXNwYWNlICAgICAgICN4MDAyMCAjeDIwKSA7OyBYS19zcGFjZSBWS19TUEFDRQorICAoZGVm
aW5lLXhrIHhrLTAgICAgICAgICAgICN4MDAzMCAjeDMwKSA7OyBYS18wCisgIChkZWZpbmUt
eGsgeGstMSAgICAgICAgICAgI3gwMDMxICN4MzEpIDs7IFhLXzEKKyAgKGRlZmluZS14ayB4
ay0yICAgICAgICAgICAjeDAwMzIgI3gzMikgOzsgWEtfMgorICAoZGVmaW5lLXhrIHhrLTMg
ICAgICAgICAgICN4MDAzMyAjeDMzKSA7OyBYS18zCisgIChkZWZpbmUteGsgeGstNCAgICAg
ICAgICAgI3gwMDM0ICN4MzQpIDs7IFhLXzQKKyAgKGRlZmluZS14ayB4ay01ICAgICAgICAg
ICAjeDAwMzUgI3gzNSkgOzsgWEtfNQorICAoZGVmaW5lLXhrIHhrLTYgICAgICAgICAgICN4
MDAzNiAjeDM2KSA7OyBYS182CisgIChkZWZpbmUteGsgeGstNyAgICAgICAgICAgI3gwMDM3
ICN4MzcpIDs7IFhLXzcKKyAgKGRlZmluZS14ayB4ay04ICAgICAgICAgICAjeDAwMzggI3gz
OCkgOzsgWEtfOAorICAoZGVmaW5lLXhrIHhrLTkgICAgICAgICAgICN4MDAzOSAjeDM5KSA7
OyBYS185CisgIChkZWZpbmUteGsgeGstYSAgICAgICAgICAgI3gwMDQxICN4NDEpIDs7IFhL
X0EKKyAgKGRlZmluZS14ayB4ay1iICAgICAgICAgICAjeDAwNDIgI3g0MikgOzsgWEtfQgor
ICAoZGVmaW5lLXhrIHhrLWMgICAgICAgICAgICN4MDA0MyAjeDQzKSA7OyBYS19DCisgIChk
ZWZpbmUteGsgeGstZCAgICAgICAgICAgI3gwMDQ0ICN4NDQpIDs7IFhLX0QKKyAgKGRlZmlu
ZS14ayB4ay1lICAgICAgICAgICAjeDAwNDUgI3g0NSkgOzsgWEtfRQorICAoZGVmaW5lLXhr
IHhrLWYgICAgICAgICAgICN4MDA0NiAjeDQ2KSA7OyBYS19GCisgIChkZWZpbmUteGsgeGst
ZyAgICAgICAgICAgI3gwMDQ3ICN4NDcpIDs7IFhLX0cKKyAgKGRlZmluZS14ayB4ay1oICAg
ICAgICAgICAjeDAwNDggI3g0OCkgOzsgWEtfSAorICAoZGVmaW5lLXhrIHhrLWkgICAgICAg
ICAgICN4MDA0OSAjeDQ5KSA7OyBYS19JCisgIChkZWZpbmUteGsgeGstaiAgICAgICAgICAg
I3gwMDRBICN4NEEpIDs7IFhLX0oKKyAgKGRlZmluZS14ayB4ay1rICAgICAgICAgICAjeDAw
NEIgI3g0QikgOzsgWEtfSworICAoZGVmaW5lLXhrIHhrLWwgICAgICAgICAgICN4MDA0QyAj
eDRDKSA7OyBYS19MCisgIChkZWZpbmUteGsgeGstbSAgICAgICAgICAgI3gwMDREICN4NEQp
IDs7IFhLX00KKyAgKGRlZmluZS14ayB4ay1uICAgICAgICAgICAjeDAwNEUgI3g0RSkgOzsg
WEtfTgorICAoZGVmaW5lLXhrIHhrLW8gICAgICAgICAgICN4MDA0RiAjeDRGKSA7OyBYS19P
CisgIChkZWZpbmUteGsgeGstcCAgICAgICAgICAgI3gwMDUwICN4NTApIDs7IFhLX1AKKyAg
KGRlZmluZS14ayB4ay1xICAgICAgICAgICAjeDAwNTEgI3g1MSkgOzsgWEtfUQorICAoZGVm
aW5lLXhrIHhrLXIgICAgICAgICAgICN4MDA1MiAjeDUyKSA7OyBYS19SCisgIChkZWZpbmUt
eGsgeGstcyAgICAgICAgICAgI3gwMDUzICN4NTMpIDs7IFhLX1MKKyAgKGRlZmluZS14ayB4
ay10ICAgICAgICAgICAjeDAwNTQgI3g1NCkgOzsgWEtfVAorICAoZGVmaW5lLXhrIHhrLXUg
ICAgICAgICAgICN4MDA1NSAjeDU1KSA7OyBYS19VCisgIChkZWZpbmUteGsgeGstdiAgICAg
ICAgICAgI3gwMDU2ICN4NTYpIDs7IFhLX1YKKyAgKGRlZmluZS14ayB4ay13ICAgICAgICAg
ICAjeDAwNTcgI3g1NykgOzsgWEtfVworICAoZGVmaW5lLXhrIHhrLXggICAgICAgICAgICN4
MDA1OCAjeDU4KSA7OyBYS19YCisgIChkZWZpbmUteGsgeGsteSAgICAgICAgICAgI3gwMDU5
ICN4NTkpIDs7IFhLX1kKKyAgKGRlZmluZS14ayB4ay16ICAgICAgICAgICAjeDAwNUEgI3g1
QSkpOzsgWEtfWgorCisoZGVmdW4gbGxrLWluaXQgKCkKKyAgIkluaXRpYWxpemUgbG93LWxl
dmVsIGtleSBldmVudHMuCitGaWxscyB0aGUgYGxsay1rZXlzeW1zJyBsaXN0LCBhbmQgYmlu
ZHMgdGhlIGBsb3ctbGV2ZWwta2V5JyBldmVudAordG8gdGhlIGBsbGstaGFuZGxlJyBmdW5j
dGlvbi4gIFJlc2V0cyB0aGUgYGxsay1iaW5kaW5ncycgbGlzdC4KK0Jlc2lkZXMgY2FsbGlu
ZyB0aGlzIGZ1bmN0aW9uLCB5b3UgbmVlZCB0byBzZXQgYGVuYWJsZS1sb3ctbGV2ZWwta2V5
LWV2ZW50cycKK3RvIGEgbm9uLW5pbCB2YWx1ZSIKKyAgKGludGVyYWN0aXZlKQorICAobGxr
LWRlZmluZS1rZXlzeW1zKQorICAoZGVmaW5lLWtleSBzcGVjaWFsLWV2ZW50LW1hcCBbbG93
LWxldmVsLWtleV0gJ2xsay1oYW5kbGUpCisgIChzZXRxIGxsay1iaW5kaW5ncyBuaWwpKQor
CisoZGVmc3Vic3QgZXZlbnQtaXMta2V5LXByZXNzIChldmVudCkKKyAgIlJldHVybiB0aGUg
dmFsdWUgb2YgdGhlIElTLUtFWS1QUkVTUyBmaWVsZCBvZiB0aGUgRVZFTlQsIGEgbG93IGxl
dmVsIGtleSBldmVudC4iCisgIChkZWNsYXJlIChzaWRlLWVmZmVjdC1mcmVlIHQpKQorICAo
aWYgKGNvbnNwIGV2ZW50KSAobnRoIDEgZXZlbnQpKSkKKworKGRlZnN1YnN0IGV2ZW50LWtl
eXN5bSAoZXZlbnQpCisgICJSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBLRVkgZmllbGQgb2Yg
dGhlIEVWRU5ULCBhIGxvdyBsZXZlbCBrZXkgZXZlbnQuIgorICAoZGVjbGFyZSAoc2lkZS1l
ZmZlY3QtZnJlZSB0KSkKKyAgKGlmIChjb25zcCBldmVudCkgKG50aCAyIGV2ZW50KSkpCisK
KyhkZWZzdWJzdCBldmVudC1tb2RpZmllciAoZXZlbnQpCisgICJSZXR1cm4gdGhlIHZhbHVl
IG9mIHRoZSBNT0RJRklFUiBmaWVsZCBvZiB0aGUgRVZFTlQsIGEgbG93IGxldmVsIGtleSBl
dmVudC4iCisgIChkZWNsYXJlIChzaWRlLWVmZmVjdC1mcmVlIHQpKQorICAoaWYgKGNvbnNw
IGV2ZW50KSAobnRoIDMgZXZlbnQpKSkKKworKGRlZnN1YnN0IGV2ZW50LXRpbWUgKGV2ZW50
KQorICAiUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgVElNRSBmaWVsZCBvZiB0aGUgRVZFTlQs
IGEgbG93IGxldmVsIGtleSBldmVudC4iCisgIChkZWNsYXJlIChzaWRlLWVmZmVjdC1mcmVl
IHQpKQorICAoaWYgKGNvbnNwIGV2ZW50KSAobnRoIDQgZXZlbnQpKSkKKworOzsgRm9yIGV4
YW1wbGU6Cis7OyBCaW5kIGtleSB0YXAgdG8gY29tbWFuZAorOzsgICAgKGxsay1iaW5kICd0
YXAgJ3hrLXNoaWZ0LWwgJ2RlbGV0ZS1vdGhlci13aW5kb3dzKQorOzsgQmluZCBtb2RpZmly
eSB0YXAgdG8gY29tbWFuZAorOzsgICAgIChsbGstYmluZCAndGFwICdzaGlmdCAnZGVsZXRl
LW90aGVyLXdpbmRvd3MpCis7OyBCaW5kIHRhcCB0byBoeXBlciBtb2RpZmllcgorOzsgICAg
ICAobGxrLWJpbmQgJ3RhcCAneGstc2hpZnQtciAobGFtYmRhICgpCis7OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtZXNzYWdlICJILS4uLiIpCis7OyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzZXRxIHVucmVhZC1jb21tYW5kLWV2ZW50cworOzsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIChldmVudC1hcHBseS1oeXBl
ci1tb2RpZmllciBuaWwpIG5pbCkpKSkKKzs7IENhbiBiaW5kIHRvIGEgY29tbWFuZCBvciBm
dW5jdGlvbgorKGRlZnVuIGxsay1iaW5kIChhY3Rpb24ga2V5IGZ1bmN0aW9uKQorICAiQmlu
ZCBhIGNvbW1hbmQgYSBmdW5jdGlvbiB0byBhIGxvdyBsZXZlbCBrZXkgZXZlbnQuCitUaGUg
b25seSBhY3Rpb24gc3VwcG9ydGVkIGN1cnJlbnRseSBpcyBgdGFwJy4gVGhlIGtleSBjYW4g
YmUgYSBrZXlzeW0KK3N5bWJvbCwgb3IgYSBtb2RpZmllciBzeW1ib2wgKHNoaWZ0LCBjb250
cm9sLCBhbHQsIG1ldGEsIGh5cGVyLCBzdXBlcikuCitJZiB0aGVyZSBpcyBubyBrZXlzeW0g
c3ltYm9sIGZvciBhIGtleSwgdXNlIHRoZSBrZXlzeW0gbnVtYmVyLiAgIgorICAocHVzaCAo
bGlzdCBhY3Rpb24ga2V5IGZ1bmN0aW9uKSBsbGstYmluZGluZ3MpKQorCis7OyBXZSBzdG9y
ZSB0aGUgbGFzdCBldmVudHMgKGtleS9tb2RpZmllciBpcy1wcmVzcyB0aW1lc3RhbXApIGhl
cmUgdG8KKzs7IHRlc3QgZm9yIG11bHRpdGFwLgorKGRlZnZhciBsbGstZXZlbnRzIG5pbAor
ICAiSW50ZXJuYWwgdmFyaWFibGUgZm9yIGRldGVjdGluZyB0YXBzLiIpCisKKzs7IElmIHBv
c2l0aXZlLCByZXR1cm4ga2V5ICh4ay1zaGlmdC1sLCBldGMpIGVsc2UgcmV0dXJuIG5pbC4K
KyhkZWZ1biBsbGstZGV0ZWN0LW4tdGFwIChuIHRpbWVvdXQpCisgICJJbnRlcm5hbCBmdW5j
dGlvbiB0byBkZXRlY3Qgbi10YXAga2V5cy4iCisgIChsZXQgKGtleQorICAgICAgICAoaXMt
cHJlc3MgKGV2ZW50LWlzLWtleS1wcmVzcyBsYXN0LWlucHV0LWV2ZW50KSkKKyAgICAgICAg
OzsgY29udmVydCBudW1iZXIgdG8ga2V5c3ltIHN5bWJvbAorICAgICAgICAoa2V5c3ltIChj
ZHIgKGFzc29jIChldmVudC1rZXlzeW0gbGFzdC1pbnB1dC1ldmVudCkgbGxrLWtleXN5bXMp
KSkKKyAgICAgICAgKHRpbWVzdGFtcCAoZXZlbnQtdGltZSBsYXN0LWlucHV0LWV2ZW50KSkK
KyAgICAgICAgKG1vZGlmaWVyIChldmVudC1tb2RpZmllciBsYXN0LWlucHV0LWV2ZW50KSkp
CisKKyAgICA7OyBpZiBlaHRlIGlzIG5vIHN5bWJvbCBmb3IgdGhpcyBrZXksIHVzZSBpdHMg
a2V5c3ltIG51bWJlcgorICAgICh1bmxlc3Mga2V5c3ltIChzZXRxIGtleXN5bSAoZXZlbnQt
a2V5c3ltIGxhc3QtaW5wdXQtZXZlbnQpKSkKKworICAgIDs7IGxvb2sgaW4gbGxrLXRhcC1r
ZXlzIGZvciB0aGUga2V5LCB0aGVuIHRoZSBtb2RpZmllcgorICAgIChpZiAobWVtYmVyIGtl
eXN5bSBsbGstdGFwLWtleXMpCisgICAgICAgIChzZXRxIGtleSBrZXlzeW0pCisgICAgICAo
aWYgKG1lbWJlciBtb2RpZmllciBsbGstdGFwLWtleXMpCisgICAgICAgICAgKHNldHEga2V5
IG1vZGlmaWVyKSkpCisKKyAgICAoaWYgKG5vdCBrZXkpCisgICAgICAgIDs7IEtleSBub3Qg
aW4gdGFwIGxpc3QsIGNsZWFyIGhpc3RvcnkKKyAgICAgICAgKHNldHEgbGxrLWV2ZW50cyBu
aWwpCisgICAgICA7OyBDbGVhciBpdCBhbHNvIGlmIHRoZSBmaXJzdCBlbGVtZW50IGlzIGZy
b20gYSBkaWZmZXJlbnQga2V5CisgICAgICAoYW5kIGxsay1ldmVudHMKKyAgICAgICAgICAg
KG5vdCAoZXF1YWwgKGNhciAoY2FyIGxsay1ldmVudHMpKSBrZXkpKQorICAgICAgICAgICAo
c2V0cSBsbGstZXZlbnRzIG5pbCkpCisgICAgICAocHVzaCAobGlzdCBrZXkgaXMtcHJlc3Mg
dGltZXN0YW1wKSBsbGstZXZlbnRzKQorICAgICAgOzsgT25seSBjYXJlIGFib3V0IGxhc3Qg
MnhOIGV2ZW50cworICAgICAgKG50YWtlICgqIDIgbikgbGxrLWV2ZW50cykKKyAgICAgIDs7
IElmIHdlIGhhdmU6CisgICAgICA7OyAtIEV4YWN0bHkgMiAqIG4gZXZlbnRzLgorICAgICAg
OzsgLSBkb3duLCB1cCwgZG93biwgdXAsIC4uLgorICAgICAgOzsgLSBub3QgdHdvIG11Y2gg
dGltZSBiZXR3ZWVuIGZpcnN0IGFuZCBsYXN0CisgICAgICAoYW5kIChlcSAoKiAyIG4pIChs
ZW5ndGggbGxrLWV2ZW50cykpCisgICAgICAgICAgIChjbC1ldmVyeSAnZXEKKyAgICAgICAg
ICAgICAgICAgICAgIChudGFrZSAoKiAyIG4pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGxpc3QgbmlsIHQgbmlsIHQgbmlsIHQgbmlsIHQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuaWwgdCBuaWwgdCBuaWwgdCBuaWwgdCkpCisgICAgICAgICAgICAg
ICAgICAgICAobWFwY2FyICdjbC1zZWNvbmQgbGxrLWV2ZW50cykpCisgICAgICAgICAgICg8
ICgtIChjbC10aGlyZCAoY2wtZmlyc3QgbGxrLWV2ZW50cykpCisgICAgICAgICAgICAgICAg
IChjbC10aGlyZCAoY2FyIChsYXN0IGxsay1ldmVudHMpKSkpCisgICAgICAgICAgICAgIHRp
bWVvdXQpCisgICAgICAgICAgIChwcm9nbgorICAgICAgICAgICAgIChzZXRxIGxsay1ldmVu
dHMgbmlsKQorICAgICAgICAgICAgIGtleSkpKSkpCisKKyhkZWZ1biBkZXNjcmliZS1sb3ct
bGV2ZWwta2V5ICgpCisgICJXYWl0IGZvciB0aGUgbmV4dCBrZXkgcHJlc3MgYW5kIGRlc2Ny
aWJlIHRoZSBsb3cgbGV2ZWwga2V5IGV2ZW50IGl0CitnZW5lcmF0ZXMuIgorICAoaW50ZXJh
Y3RpdmUpCisgIChzZXRxIGxsay1kZXNjcmliZS1uZXh0LXByZXNzIHQpKQorCisoZGVmdW4g
bGxrLXNob3ctZXZlbnQtZGVzY3JpcHRpb24gKCkKKyAgIlNob2UgaW5mb3JtYXRpb24gYWJv
dXQgdGhlIGxhc3QgbG93IGxldmVsIGtleSBldmVudC4iCisgIChzZXRxIGxsay1kZXNjcmli
ZS1uZXh0LXByZXNzIG5pbCkKKyAgKHdpdGgtaGVscC13aW5kb3cgKGhlbHAtYnVmZmVyKQor
ICAgIChpbnNlcnQgIlxuIikKKyAgICAobGV0KiAoKHhrIChldmVudC1rZXlzeW0gbGFzdC1p
bnB1dC1ldmVudCkpCisgICAgICAgICAgIChzeW0gKGFzc29jIHhrIGxsay1rZXlzeW1zKSkp
CisgICAgICAoaW5zZXJ0IChmb3JtYXQgIktleXN5bSBudW1iZXI6ICVkICgjeCVYKSxcbiIg
eGsgeGspKQorICAgICAgKGlmIHN5bQorICAgICAgICAgIChpbnNlcnQgKGZvcm1hdCAid2hp
Y2ggY29ycmVzcG9uZHMgdG8gbmFtZWQga2V5ICVzLlxuXG4iIChjZHIgc3ltKSkpCisgICAg
ICAgIChpbnNlcnQgIndoaWNoIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55IGtub3duIG5h
bWVkIGtleS5cblxuIikpCisgICAgICAoaWYgKGV2ZW50LW1vZGlmaWVyIGxhc3QtaW5wdXQt
ZXZlbnQpCisgICAgICAgICAgKGluc2VydCAoZm9ybWF0ICJUaGlzIGtleSBjb3JyZXNwb25k
cyB0byB0aGUgJXMgbW9kaWZpZXIuXG5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
KGV2ZW50LW1vZGlmaWVyIGxhc3QtaW5wdXQtZXZlbnQpKSkKKyAgICAgICAgKGluc2VydCAi
VGhpcyBrZXkgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIG1vZGlmaWVyLlxuXG4iKSkKKyAg
ICAgIChpbnNlcnQgIlNlZSB0aGUgdmFsdWUgb2YgdGhlIGBsbGsta2V5c3ltcycgdmFyaWFi
bGUgZm9yIGEgbGlzdCBvZiBrbm93biBrZXlzLlxuIikpKSkKKworKGRlZnVuIGxsay1oYW5k
bGUgKCkKKyAgIkludGVybmFsIGZ1bmN0aW9uIHRvIGhhbmRsZSBsb3cgbGV2ZWwga2V5IGV2
ZW50cy4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGlmIChhbmQgKGV2ZW50LWlzLWtleS1wcmVz
cyBsYXN0LWlucHV0LWV2ZW50KQorICAgICAgICAgICBsbGstZGVzY3JpYmUtbmV4dC1wcmVz
cykKKyAgICAgIChsbGstc2hvdy1ldmVudC1kZXNjcmlwdGlvbikKKyAgICAobGV0ICgodGFw
LWtleSAobGxrLWRldGVjdC1uLXRhcAorICAgICAgICAgICAgICAgICAgICBsbGstdGFwLWNv
dW50CisgICAgICAgICAgICAgICAgICAgIGxsay10YXAtdGltZW91dCkpKQorICAgICAgKHdo
ZW4gdGFwLWtleQorICAgICAgICAobGV0ICgoZnVuYyAoY2wtdGhpcmQKKyAgICAgICAgICAg
ICAgICAgICAgIChzZXEtZmluZAorICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGIp
CisgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIChlcSAoY2wtZmlyc3QgYikgJ3RhcCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxIChjbC1zZWNvbmQgYikgdGFwLWtl
eSkpKQorICAgICAgICAgICAgICAgICAgICAgIGxsay1iaW5kaW5ncykpKSkKKyAgICAgICAg
ICAoY29uZAorICAgICAgICAgICAoKGNvbW1hbmRwIGZ1bmMpIChjYWxsLWludGVyYWN0aXZl
bHkgZnVuYykpCisgICAgICAgICAgICgoZnVuY3Rpb25wIGZ1bmMpIChmdW5jYWxsIGZ1bmMp
KSkpKSkpKQpkaWZmIC0tZ2l0IGEvc3JjL2d0a3V0aWwuYyBiL3NyYy9ndGt1dGlsLmMKaW5k
ZXggZDU3NjI3ZjE1MmYuLjg2ZDQzMjFjZjM1IDEwMDY0NAotLS0gYS9zcmMvZ3RrdXRpbC5j
CisrKyBiL3NyYy9ndGt1dGlsLmMKQEAgLTk4LDYgKzk4LDcgQEAgR19ERUZJTkVfVFlQRSAo
RW1hY3NNZW51QmFyLCBlbWFjc19tZW51X2JhciwgR1RLX1RZUEVfTUVOVV9CQVIpCiBzdGF0
aWMgdm9pZCB4Z19pbV9jb250ZXh0X3ByZWVkaXRfY2hhbmdlZCAoR3RrSU1Db250ZXh0ICos
IGdwb2ludGVyKTsKIHN0YXRpYyB2b2lkIHhnX2ltX2NvbnRleHRfcHJlZWRpdF9lbmQgKEd0
a0lNQ29udGV4dCAqLCBncG9pbnRlcik7CiBzdGF0aWMgYm9vbCB4Z193aWRnZXRfa2V5X3By
ZXNzX2V2ZW50X2NiIChHdGtXaWRnZXQgKiwgR2RrRXZlbnQgKiwgZ3BvaW50ZXIpOworc3Rh
dGljIGJvb2wgeGdfd2lkZ2V0X2tleV9yZWxlYXNlX2V2ZW50X2NiIChHdGtXaWRnZXQgKiwg
R2RrRXZlbnQgKiwgZ3BvaW50ZXIpOwogI2VuZGlmCiAKICNpZiBHVEtfQ0hFQ0tfVkVSU0lP
TiAoMywgMTAsIDApCkBAIC0xNzQ5LDYgKzE3NTAsMTIgQEAgeGdfY3JlYXRlX2ZyYW1lX3dp
ZGdldHMgKHN0cnVjdCBmcmFtZSAqZikKICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1Qg
KHdmaXhlZCksICJrZXktcHJlc3MtZXZlbnQiLAogCQkgICAgR19DQUxMQkFDSyAoeGdfd2lk
Z2V0X2tleV9wcmVzc19ldmVudF9jYiksCiAJCSAgICBOVUxMKTsKKworICBnX3NpZ25hbF9j
b25uZWN0IChHX09CSkVDVCAod2ZpeGVkKSwgImtleS1yZWxlYXNlLWV2ZW50IiwKKwkJICAg
IEdfQ0FMTEJBQ0sgKHhnX3dpZGdldF9rZXlfcmVsZWFzZV9ldmVudF9jYiksCisJCSAgICBO
VUxMKTsKKworCiAjZW5kaWYKIAogICB7CkBAIC02Mzc2LDYgKzYzODMsNTMgQEAgeGdfaW1f
Y29udGV4dF9wcmVlZGl0X2VuZCAoR3RrSU1Db250ZXh0ICppbWMsIGdwb2ludGVyIHVzZXJf
ZGF0YSkKICAga2JkX2J1ZmZlcl9zdG9yZV9ldmVudCAoJmluZXYpOwogfQogCisjaWZuZGVm
IEhBVkVfWElOUFVUMgorc3RhdGljIHZvaWQKK3hnX21heWJlX3NlbmRfbG93X2xldmVsX2tl
eV9ldmVudCAoc3RydWN0IGZyYW1lICpmLAorCQkJCSAgIEdka0V2ZW50ICp4ZXYpCit7Cisg
IEdka0V2ZW50S2V5IHhrZXkgPSB4ZXYtPmtleTsKKyAgYm9vbCBpc19wcmVzczsKKyAgTGlz
cF9PYmplY3Qga2V5LCBtb2RpZmllcjsKKyAgdW5pb24gYnVmZmVyZWRfaW5wdXRfZXZlbnQg
aW5ldjsKKworICBpZiAoTklMUCAoVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cykpCisg
ICAgcmV0dXJuOworCisgIHN3aXRjaCAoeGV2LT50eXBlKQorICAgIHsKKyAgICBjYXNlIEdE
S19LRVlfUFJFU1M6CisgICAgICBpc19wcmVzcyA9IHRydWU7CisgICAgICBicmVhazsKKyAg
ICBjYXNlIEdES19LRVlfUkVMRUFTRToKKyAgICAgIGlzX3ByZXNzID0gZmFsc2U7CisgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuOworICAgIH0KKworICBtb2Rp
ZmllciA9IHhfZ2V0X21vZGlmaWVyX2Zvcl9rZXljb2RlIChGUkFNRV9PVVRQVVRfREFUQSAo
ZiktPmRpc3BsYXlfaW5mbywKKwkJCQkJIHhldi0+a2V5LmhhcmR3YXJlX2tleWNvZGUpOwor
CisgIGludCBrZXlzeW0gPSB4a2V5LmtleXZhbDsKKworICBpZiAoa2V5c3ltID49IEdES19L
RVlfYSAmJiBrZXlzeW0gPD0gR0RLX0tFWV96KQorICAgIGtleXN5bSAtPSBHREtfS0VZX2Eg
LSBHREtfS0VZX0E7CisKKyAgaWYgKCFrYmRfbG93X2xldmVsX2tleV9pc19lbmFibGVkIChr
ZXlzeW0sIG1vZGlmaWVyKSkKKyAgICByZXR1cm47CisKKyAga2V5ID0gbWFrZV9maXhudW0g
KGtleXN5bSk7CisKKyAgRVZFTlRfSU5JVCAoaW5ldi5pZSk7CisgIFhTRVRGUkFNRSAoaW5l
di5pZS5mcmFtZV9vcl93aW5kb3csIGYpOworICBpbmV2LmllLmtpbmQgPSBMT1dfTEVWRUxf
S0VZX0VWRU5UOworICBpbmV2LmllLnRpbWVzdGFtcCA9IHhrZXkudGltZTsKKyAgaW5ldi5p
ZS5hcmcgPSBsaXN0MyAoaXNfcHJlc3MgPyBRdCA6IFFuaWwsIGtleSwgbW9kaWZpZXIpOwor
ICBrYmRfYnVmZmVyX3N0b3JlX2J1ZmZlcmVkX2V2ZW50ICgmaW5ldiwgJnhnX3BlbmRpbmdf
cXVpdF9ldmVudCk7Cit9CisjZW5kaWYKKwogc3RhdGljIGJvb2wKIHhnX3dpZGdldF9rZXlf
cHJlc3NfZXZlbnRfY2IgKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCAqZXZlbnQsCiAJ
CQkgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCkBAIC02NDA0LDYgKzY0NTgsMTAgQEAgeGdf
d2lkZ2V0X2tleV9wcmVzc19ldmVudF9jYiAoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50
ICpldmVudCwKICAgaWYgKCFmKQogICAgIHJldHVybiB0cnVlOwogCisjaWZuZGVmIEhBVkVf
WElOUFVUMgorICAgIHhnX21heWJlX3NlbmRfbG93X2xldmVsX2tleV9ldmVudCAoZiwgZXZl
bnQpOworI2VuZGlmCisKICAgaWYgKHBvcHVwX2FjdGl2YXRlZCAoKSkKICAgICByZXR1cm4g
dHJ1ZTsKIApAQCAtNjU1Nyw2ICs2NjE1LDI5IEBAIHhnX3dpZGdldF9rZXlfcHJlc3NfZXZl
bnRfY2IgKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCAqZXZlbnQsCiAgIHJldHVybiB0
cnVlOwogfQogCitzdGF0aWMgYm9vbAoreGdfd2lkZ2V0X2tleV9yZWxlYXNlX2V2ZW50X2Ni
IChHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQgKmV2ZW50LAorCQkJCWdwb2ludGVyIHVz
ZXJfZGF0YSkKK3sKKyNpZm5kZWYgSEFWRV9YSU5QVVQyCisgIExpc3BfT2JqZWN0IHRhaWws
IHRlbTsKKyAgc3RydWN0IGZyYW1lICpmID0gTlVMTDsKKworICBGT1JfRUFDSF9GUkFNRSAo
dGFpbCwgdGVtKQorICAgIHsKKyAgICAgIGlmIChGUkFNRV9YX1AgKFhGUkFNRSAodGVtKSkK
KwkgICYmIChGUkFNRV9HVEtfV0lER0VUIChYRlJBTUUgKHRlbSkpID09IHdpZGdldCkpCisJ
eworCSAgZiA9IFhGUkFNRSAodGVtKTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisgIGlmIChm
KQorICAgIHhnX21heWJlX3NlbmRfbG93X2xldmVsX2tleV9ldmVudCAoZiwgZXZlbnQpOwor
I2VuZGlmCisgIHJldHVybiB0cnVlOworfQorCiBib29sCiB4Z19maWx0ZXJfa2V5IChzdHJ1
Y3QgZnJhbWUgKmZyYW1lLCBYRXZlbnQgKnhrZXkpCiB7CmRpZmYgLS1naXQgYS9zcmMva2V5
Ym9hcmQuYyBiL3NyYy9rZXlib2FyZC5jCmluZGV4IDZkMjhkY2E5YWViLi40NDJiZjdjZWUz
NCAxMDA2NDQKLS0tIGEvc3JjL2tleWJvYXJkLmMKKysrIGIvc3JjL2tleWJvYXJkLmMKQEAg
LTQyNzQsNiArNDI3NCw3IEBAIGtiZF9idWZmZXJfZ2V0X2V2ZW50IChLQk9BUkQgKiprYnAs
CiAgICAgICBjYXNlIENPTkZJR19DSEFOR0VEX0VWRU5UOgogICAgICAgY2FzZSBGT0NVU19P
VVRfRVZFTlQ6CiAgICAgICBjYXNlIFNFTEVDVF9XSU5ET1dfRVZFTlQ6CisgICAgICBjYXNl
IExPV19MRVZFTF9LRVlfRVZFTlQ6CiAgICAgICAgIHsKICAgICAgICAgICBvYmogPSBtYWtl
X2xpc3B5X2V2ZW50ICgmZXZlbnQtPmllKTsKICAgICAgICAgICBrYmRfZmV0Y2hfcHRyID0g
bmV4dF9rYmRfZXZlbnQgKGV2ZW50KTsKQEAgLTcxMTgsMTIgKzcxMTksNDcgQEAgbWFrZV9s
aXNweV9ldmVudCAoc3RydWN0IGlucHV0X2V2ZW50ICpldmVudCkKICAgICBjYXNlIFBSRUVE
SVRfVEVYVF9FVkVOVDoKICAgICAgIHJldHVybiBsaXN0MiAoUXByZWVkaXRfdGV4dCwgZXZl
bnQtPmFyZyk7CiAKKyAgICBjYXNlIExPV19MRVZFTF9LRVlfRVZFTlQ6CisgICAgICByZXR1
cm4gbGlzdG4gKDYsIFFsb3dfbGV2ZWxfa2V5LAorCQkgICAgWENBUiAoZXZlbnQtPmFyZyks
IC8qIFByZXNzIG9yIHJlbGVhc2UuICAqLworCQkgICAgWENBUiAoWENEUiAoZXZlbnQtPmFy
ZykpLCAvKiBUaGUga2V5IHN5bWJvbC4gICovCisJCSAgICBYQ0FSIChYQ0RSIChYQ0RSIChl
dmVudC0+YXJnKSkpLCAvKiBUaGUgbW9kaWZpZXIuICAqLworCQkgICAgbWFrZV9maXhudW0g
KGV2ZW50LT50aW1lc3RhbXApLAorCQkgICAgZXZlbnQtPmZyYW1lX29yX3dpbmRvdyk7CisK
ICAgICAgIC8qIFRoZSAna2luZCcgZmllbGQgb2YgdGhlIGV2ZW50IGlzIHNvbWV0aGluZyB3
ZSBkb24ndCByZWNvZ25pemUuICAqLwogICAgIGRlZmF1bHQ6CiAgICAgICBlbWFjc19hYm9y
dCAoKTsKICAgICB9CiB9CiAKK2Jvb2wKK2tiZF9sb3dfbGV2ZWxfa2V5X2lzX2VuYWJsZWQg
KGludCBrZXlzeW0sIExpc3BfT2JqZWN0IG1vZGlmaWVyKQoreworICBpZiAoVmVuYWJsZV9s
b3dfbGV2ZWxfa2V5X2V2ZW50cyA9PSBRdCkKKyAgICByZXR1cm4gdHJ1ZTsKKworICBpZiAo
VmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cyA9PSBRbmlsKQorICAgIHJldHVybiBmYWxz
ZTsKKworICBpZiAoRklYTlVNUCAoVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cykpCisg
ICAgcmV0dXJuIGtleXN5bSA9PSBYRklYTlVNIChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZl
bnRzKTsKKworICBpZiAoVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cyA9PSBRbW9kaWZp
ZXJzKQorICAgIHJldHVybiBtb2RpZmllciAhPSBRbmlsOworCisgIGZvciAoTGlzcF9PYmpl
Y3QgZSA9IFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHM7IENPTlNQIChlKTsgZSA9IFhD
RFIgKGUpKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IGMgPSBYQ0FSIChlKTsKKyAgICAg
IGlmIChGSVhOVU1QIChjKSAmJiBYRklYTlVNIChjKSA9PSBrZXlzeW0pCisJcmV0dXJuIHRy
dWU7CisgICAgICBpZiAoYyA9PSBRbW9kaWZpZXJzICYmIG1vZGlmaWVyICE9IFFuaWwpCisJ
cmV0dXJuIHRydWU7CisgICAgfQorCisgIHJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIExp
c3BfT2JqZWN0CiBtYWtlX2xpc3B5X21vdmVtZW50IChzdHJ1Y3QgZnJhbWUgKmZyYW1lLCBM
aXNwX09iamVjdCBiYXJfd2luZG93LCBlbnVtIHNjcm9sbF9iYXJfcGFydCBwYXJ0LAogCQkg
ICAgIExpc3BfT2JqZWN0IHgsIExpc3BfT2JqZWN0IHksIFRpbWUgdCkKQEAgLTEyOTMxLDYg
KzEyOTY3LDI5IEBAIHN5bXNfb2Zfa2V5Ym9hcmQgKHZvaWQpCiAgIERFRlNZTSAoUWZpbGVf
bm90aWZ5LCAiZmlsZS1ub3RpZnkiKTsKICNlbmRpZiAvKiBVU0VfRklMRV9OT1RJRlkgKi8K
IAorCisgIERFRlNZTSAoUW1vZGlmaWVycywgIm1vZGlmaWVycyIpOworCisgIERFRlZBUl9M
SVNQICgiZW5hYmxlLWxvdy1sZXZlbC1rZXktZXZlbnRzIiwgVmVuYWJsZV9sb3dfbGV2ZWxf
a2V5X2V2ZW50cywKKwkgICAgICAgZG9jOiAvKiBJZiBub24tbmlsLCByZWNlcHRpb24gb2Yg
bG93LWxldmVsIGtleSBldmVudHMgaXMgZW5hYmxlZC4KKworVGhlIHZhbHVlIGNvbmZpZ3Vy
ZXMgdGhlIHNldCBvZiBrZXlzIHRoYXQgYXJlIGhhbmRsZWQ6CisKK0lmIHQsIHNlbmQgZXZl
bnRzIGZvciBhbGwga2V5cy4KKworSWYgYSBudW1iZXIsIHNlbmQgZXZlbnRzIGZvciB0aGUg
Y29ycmVzcG9uZGluZyBrZXlzeW0uICBXaGVuIGNhbGxpbmcKKydsbGstaW5pdCcsIGEgc2V0
IG9mIHZhcmlhYmxlcyB3aXRoIHRoZSB4ay0gcHJlZml4IGlzIGluaXRpYWxpemVkIHdpdGgK
K3RoZSBudW1lcmljIHZhbHVlcyBmb3Iga2V5c3ltcy4gIFRoaXMgbnVtYmVycyBhcmUgcGxh
dGZvcm0gZGVwZW5kZW50LgorCitJZiBhIHN5bWJvbCwgYSBwcmVkZWZpbmVkIHNldCBvZiBr
ZXlzIGlzIHNlbGVjdGVkLiAgVGhlIG9ubHkgY3VycmVudGx5Cit2YWxpZCBzeW1ib2wgaXMg
J21vZGlmaWVycy4KKworSWYgYSBsaXN0IG9mIG51bWJlcnMgYW5kL29yIHN5bWJvbHMsIHRo
ZSBjb3JyZXNwb25kaW5nIGtleXN5bXMgYW5kIHNldHMKK2FyZSBzZWxlY3RlZC4gICovKTsK
KyAgVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cyA9IFFuaWw7CisKKyAgREVGU1lNIChR
bG93X2xldmVsX2tleSwgImxvdy1sZXZlbC1rZXkiKTsKKwogICBERUZTWU0gKFF0b3VjaF9l
bmQsICJ0b3VjaC1lbmQiKTsKIAogICAvKiBNZW51IGFuZCB0b29sIGJhciBpdGVtIHBhcnRz
LiAgKi8KQEAgLTE0MDE4LDYgKzE0MDc3LDggQEAga2V5c19vZl9rZXlib2FyZCAodm9pZCkK
IAkJCSAgICAiaGFuZGxlLWZvY3VzLW91dCIpOwogICBpbml0aWFsX2RlZmluZV9saXNweV9r
ZXkgKFZzcGVjaWFsX2V2ZW50X21hcCwgIm1vdmUtZnJhbWUiLAogCQkJICAgICJoYW5kbGUt
bW92ZS1mcmFtZSIpOworICBpbml0aWFsX2RlZmluZV9saXNweV9rZXkgKFZzcGVjaWFsX2V2
ZW50X21hcCwgImxvdy1sZXZlbC1rZXkiLAorCQkJICAgICJpZ25vcmUiKTsKIH0KIAogLyog
TWFyayB0aGUgcG9pbnRlcnMgaW4gdGhlIGtib2FyZCBvYmplY3RzLgpkaWZmIC0tZ2l0IGEv
c3JjL2tleWJvYXJkLmggYi9zcmMva2V5Ym9hcmQuaAppbmRleCAzODc1MDFjOWY4OC4uODNm
OWEwZjE0MWEgMTAwNjQ0Ci0tLSBhL3NyYy9rZXlib2FyZC5oCisrKyBiL3NyYy9rZXlib2Fy
ZC5oCkBAIC01MTEsNiArNTExLDcgQEAga2JkX2J1ZmZlcl9zdG9yZV9ldmVudF9ob2xkIChz
dHJ1Y3QgaW5wdXRfZXZlbnQgKmV2ZW50LAogZXh0ZXJuIExpc3BfT2JqZWN0IG1lbnVfaXRl
bV9ldmFsX3Byb3BlcnR5IChMaXNwX09iamVjdCk7CiBleHRlcm4gYm9vbCBrYmRfYnVmZmVy
X2V2ZW50c193YWl0aW5nICh2b2lkKTsKIGV4dGVybiB2b2lkIGFkZF91c2VyX3NpZ25hbCAo
aW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIGJvb2wga2JkX2xvd19sZXZlbF9rZXlfaXNf
ZW5hYmxlZCAoaW50LCBMaXNwX09iamVjdCk7CiAKIGV4dGVybiBpbnQgdHR5X3JlYWRfYXZh
aWxfaW5wdXQgKHN0cnVjdCB0ZXJtaW5hbCAqLCBzdHJ1Y3QgaW5wdXRfZXZlbnQgKik7CiBl
eHRlcm4gc3RydWN0IHRpbWVzcGVjIHRpbWVyX2NoZWNrICh2b2lkKTsKZGlmZiAtLWdpdCBh
L3NyYy9wZ3RrdGVybS5jIGIvc3JjL3BndGt0ZXJtLmMKaW5kZXggMDc5OTQ1MTI2ZTAuLmZi
YTgxZjVlYzBlIDEwMDY0NAotLS0gYS9zcmMvcGd0a3Rlcm0uYworKysgYi9zcmMvcGd0a3Rl
cm0uYwpAQCAtNTIwMSw2ICs1MjAxLDU2IEBAIHBndGtfZW5xdWV1ZV9wcmVlZGl0IChzdHJ1
Y3QgZnJhbWUgKmYsIExpc3BfT2JqZWN0IHByZWVkaXQpCiAgIGV2cV9lbnF1ZXVlICgmaW5l
dik7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ3RrX21heWJlX3NlbmRfbG93X2xldmVsX2tleV9l
dmVudCAoc3RydWN0IGZyYW1lICpmLCBHZGtFdmVudCAqZXZlbnQpCit7CisgIEdka0V2ZW50
S2V5IHhrZXkgPSBldmVudC0+a2V5OworICBib29sIGlzX3ByZXNzOworICBMaXNwX09iamVj
dCBrZXksIG1vZGlmaWVyOworICB1bmlvbiBidWZmZXJlZF9pbnB1dF9ldmVudCBpbmV2Owor
CisgIGlmIChOSUxQIChWZW5hYmxlX2xvd19sZXZlbF9rZXlfZXZlbnRzKSkKKyAgICByZXR1
cm47CisKKyAgc3dpdGNoIChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBHREtfS0VZ
X1BSRVNTOgorICAgICAgaXNfcHJlc3MgPSB0cnVlOworICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHREtfS0VZX1JFTEVBU0U6CisgICAgICBpc19wcmVzcyA9IGZhbHNlOworICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogV2UgZG9u
J3Qgc3VwcG9ydCBtb2RpZmllciBpZGVudGlmaWNhdGlvbiBvbiBQR1RLLiBXZSBvbmx5IGNh
biB0ZWxsCisgICAgaWYgdGhlIGtleSBjb3JyZXNwb25kcyB0byBhIG1vZGlmaWVyIG9yIG5v
dCwgd2hpY2ggaXMgdXNlZCBmb3IKKyAgICBmaWx0ZXJpbmcgZW5hYmxlZCBrZXlzIHdpdGgg
a2JkX2xvd19sZXZlbF9rZXlfaXNfZW5hYmxlZC4gICovCisgIG1vZGlmaWVyID0gZXZlbnQt
PmtleS5pc19tb2RpZmllciA/IFF0IDogUW5pbDsKKworICBpbnQga2V5c3ltID0geGtleS5r
ZXl2YWw7CisKKyAgaWYgKGtleXN5bSA+PSBHREtfS0VZX2EgJiYga2V5c3ltIDw9IEdES19L
RVlfeikKKyAgICBrZXlzeW0gLT0gR0RLX0tFWV9hIC0gR0RLX0tFWV9BOworICBpZiAoIWti
ZF9sb3dfbGV2ZWxfa2V5X2lzX2VuYWJsZWQgKGtleXN5bSwgbW9kaWZpZXIpKQorICAgIHJl
dHVybjsKKworICBpZiAoIWYpCisgICAgZiA9IHBndGtfYW55X3dpbmRvd190b19mcmFtZSAo
ZXZlbnQtPmtleS53aW5kb3cpOworICBpZiAoIWYpCisgICAgcmV0dXJuOworCisgIGtleSA9
IG1ha2VfZml4bnVtIChrZXlzeW0pOworCisgIEVWRU5UX0lOSVQgKGluZXYuaWUpOworICBY
U0VURlJBTUUgKGluZXYuaWUuZnJhbWVfb3Jfd2luZG93LCBmKTsKKyAgaW5ldi5pZS5raW5k
ID0gTE9XX0xFVkVMX0tFWV9FVkVOVDsKKyAgaW5ldi5pZS50aW1lc3RhbXAgPSBldmVudC0+
a2V5LnRpbWU7CisgIGluZXYuaWUuYXJnID0gbGlzdDMgKGlzX3ByZXNzID8gUXQgOiBRbmls
LCBrZXksIG1vZGlmaWVyKTsKKyAgZXZxX2VucXVldWUgKCZpbmV2KTsKK30KKwogc3RhdGlj
IGdib29sZWFuCiBrZXlfcHJlc3NfZXZlbnQgKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVu
dCAqZXZlbnQsIGdwb2ludGVyICp1c2VyX2RhdGEpCiB7CkBAIC01MjExLDYgKzUyNjEsOSBA
QCBrZXlfcHJlc3NfZXZlbnQgKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCAqZXZlbnQs
IGdwb2ludGVyICp1c2VyX2RhdGEpCiAgIHN0cnVjdCBwZ3RrX2Rpc3BsYXlfaW5mbyAqZHB5
aW5mbzsKIAogICBmID0gcGd0a19hbnlfd2luZG93X3RvX2ZyYW1lIChndGtfd2lkZ2V0X2dl
dF93aW5kb3cgKHdpZGdldCkpOworCisgIHBndGtfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5
X2V2ZW50IChmLCBldmVudCk7CisKICAgRVZFTlRfSU5JVCAoaW5ldi5pZSk7CiAgIGhsaW5m
byA9IE1PVVNFX0hMX0lORk8gKGYpOwogICBuYnl0ZXMgPSAwOwpAQCAtNTQ1NCw2ICs1NTA3
LDggQEAga2V5X3JlbGVhc2VfZXZlbnQgKEd0a1dpZGdldCAqd2lkZ2V0LAogICBHZGtEaXNw
bGF5ICpkaXNwbGF5OwogICBzdHJ1Y3QgcGd0a19kaXNwbGF5X2luZm8gKmRweWluZm87CiAK
KyAgcGd0a19tYXliZV9zZW5kX2xvd19sZXZlbF9rZXlfZXZlbnQgKE5VTEwsIGV2ZW50KTsK
KwogICBkaXNwbGF5ID0gZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAod2lkZ2V0KTsKICAgZHB5
aW5mbyA9IHBndGtfZGlzcGxheV9pbmZvX2Zvcl9kaXNwbGF5IChkaXNwbGF5KTsKIApkaWZm
IC0tZ2l0IGEvc3JjL3Rlcm1ob29rcy5oIGIvc3JjL3Rlcm1ob29rcy5oCmluZGV4IGQ2YTkz
MDBiYWM5Li45NjZhNjQ5MmY2OSAxMDA2NDQKLS0tIGEvc3JjL3Rlcm1ob29rcy5oCisrKyBi
L3NyYy90ZXJtaG9va3MuaApAQCAtMzQ3LDYgKzM0Nyw3IEBAICNkZWZpbmUgRU1BQ1NfVEVS
TUhPT0tTX0gKICAgLyogSW4gYSBOT1RJRklDQVRJT05fRVZFTlQsIC5hcmcgaXMgYSBsYW1i
ZGEgdG8gZXZhbHVhdGUuICAqLwogICAsIE5PVElGSUNBVElPTl9FVkVOVAogI2VuZGlmIC8q
IEhBVkVfQU5EUk9JRCAqLworICAsIExPV19MRVZFTF9LRVlfRVZFTlQKIH07CiAKIC8qIEJp
dCB3aWR0aCBvZiBhbiBlbnVtIGV2ZW50X2tpbmQgdGFnIGF0IHRoZSBzdGFydCBvZiBzdHJ1
Y3RzIGFuZCB1bmlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3czMmZucy5jIGIvc3JjL3cz
MmZucy5jCmluZGV4IGUyNDU1YjkyNzFlLi4xZDE4YmY0MDhlMSAxMDA2NDQKLS0tIGEvc3Jj
L3czMmZucy5jCisrKyBiL3NyYy93MzJmbnMuYwpAQCAtNDY2OSw2ICs0NjY5LDExIEBAIHcz
Ml93bmRfcHJvYyAoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFN
IGxQYXJhbSkKICAgICBjYXNlIFdNX0tFWVVQOgogICAgIGNhc2UgV01fU1lTS0VZVVA6CiAg
ICAgICByZWNvcmRfa2V5dXAgKHdQYXJhbSwgbFBhcmFtKTsKKyAgICAgIGlmICghTklMUCAo
VmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cykpCisJeworCSAgc2lnbmFsX3VzZXJfaW5w
dXQgKCk7CisJICBteV9wb3N0X21zZyAoJndtc2csIGh3bmQsIFdNX0VNQUNTX0xPV19MRVZF
TF9LRVksIHdQYXJhbSwgbFBhcmFtKTsKKwl9CiAgICAgICBnb3RvIGRmbHQ7CiAKICAgICBj
YXNlIFdNX0tFWURPV046CkBAIC00Njk1LDYgKzQ3MDAsMTIgQEAgdzMyX3duZF9wcm9jIChI
V05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAg
ICAgaWYgKHczMl91c2VfZmFsbGJhY2tfd21fY2hhcnNfbWV0aG9kKQogCXdQYXJhbSA9IG1h
cF9rZXlwYWRfa2V5cyAod1BhcmFtLCAobFBhcmFtICYgMHgxMDAwMDAwTCkgIT0gMCk7CiAK
KyAgICAgIGlmICghTklMUCAoVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cykpCisJewor
CSAgc2lnbmFsX3VzZXJfaW5wdXQgKCk7CisJICBteV9wb3N0X21zZyAoJndtc2csIGh3bmQs
IFdNX0VNQUNTX0xPV19MRVZFTF9LRVksIHdQYXJhbSwgbFBhcmFtKTsKKwl9CisKICAgICAg
IHdpbmRvd3NfdHJhbnNsYXRlID0gMDsKIAogICAgICAgc3dpdGNoICh3UGFyYW0pCmRpZmYg
LS1naXQgYS9zcmMvdzMydGVybS5jIGIvc3JjL3czMnRlcm0uYwppbmRleCBlMThmMzlkZDJh
OC4uYTJlMGE0YjBmYTAgMTAwNjQ0Ci0tLSBhL3NyYy93MzJ0ZXJtLmMKKysrIGIvc3JjL3cz
MnRlcm0uYwpAQCAtNTI3MCw2ICs1MjcwLDU1IEBAIHczMl9yZWFkX3NvY2tldCAoc3RydWN0
IHRlcm1pbmFsICp0ZXJtaW5hbCwKIAkgICAgfQogCSAgYnJlYWs7CiAKKwljYXNlIFdNX0VN
QUNTX0xPV19MRVZFTF9LRVk6CisJICBXT1JEIGtleV9mbGFncyA9IEhJV09SRCAobXNnLm1z
Zy5sUGFyYW0pOworCSAgQk9PTCBpc193bV9rZXl1cCA9IGtleV9mbGFncyAmIEtGX1VQOwor
CisJICBpZiAoaXNfd21fa2V5dXAgfHwgKGtleV9mbGFncyAmIEtGX1JFUEVBVCkgPT0gMCkg
LyogV01fS0VZRE9XTiwgbm90IHJlcGVhdGluZy4gICovCisJICAgIHsKKwkgICAgICBXT1JE
IHNjYW5fY29kZSA9IExPQllURSAoa2V5X2ZsYWdzKTsKKwkgICAgICBpZiAoa2V5X2ZsYWdz
ICYgS0ZfRVhURU5ERUQpCisJCXNjYW5fY29kZSA9IE1BS0VXT1JEIChzY2FuX2NvZGUsIDB4
RTApOworCisJICAgICAgVUlOVCB0cmFuc2xhdGVkID0gTWFwVmlydHVhbEtleSAoc2Nhbl9j
b2RlLCBNQVBWS19WU0NfVE9fVktfRVgpOworCSAgICAgIFdPUkQgdmsgPSBMT1dPUkQgKG1z
Zy5tc2cud1BhcmFtKTsKKwkgICAgICBpZiAodHJhbnNsYXRlZCkKKwkJdmsgPSBMT1dPUkQg
KHRyYW5zbGF0ZWQpOworCisJICAgICAgTGlzcF9PYmplY3Qga2V5ID0gbWFrZV9maXhudW0g
KHZrKTsKKwkgICAgICBMaXNwX09iamVjdCBtb2RpZmllciA9IFFuaWw7CisKKwkgICAgICBz
d2l0Y2ggKHZrKQorCQl7CisJCWNhc2UgVktfTFNISUZUOgorCQljYXNlIFZLX1JTSElGVDoK
KwkJICBtb2RpZmllciA9IFFzaGlmdDsKKwkJICBicmVhazsKKwkJY2FzZSBWS19MQ09OVFJP
TDoKKwkJY2FzZSBWS19SQ09OVFJPTDoKKwkJICBtb2RpZmllciA9IFFjdHJsOworCQkgIGJy
ZWFrOworCQljYXNlIFZLX0xNRU5VOgorCQljYXNlIFZLX1JNRU5VOgorCQkgIG1vZGlmaWVy
ID0gUW1ldGE7CisJCSAgYnJlYWs7CisJCX0KKworCSAgICAgIGlmIChrYmRfbG93X2xldmVs
X2tleV9pc19lbmFibGVkICh2aywgbW9kaWZpZXIpKQorCQl7CisJCSAgZiA9IHczMl93aW5k
b3dfdG9fZnJhbWUgKGRweWluZm8sIG1zZy5tc2cuaHduZCk7CisJCSAgaW5ldi5raW5kID0g
TE9XX0xFVkVMX0tFWV9FVkVOVDsKKwkJICBYU0VURlJBTUUgKGluZXYuZnJhbWVfb3Jfd2lu
ZG93LCBmKTsKKwkJICBpbmV2LnRpbWVzdGFtcCA9IG1zZy5tc2cudGltZTsKKwkJICBpbmV2
LmFyZyA9IGxpc3QzIChpc193bV9rZXl1cCA/IFFuaWwgOiBRdCwga2V5LCBtb2RpZmllcik7
CisJCSAga2JkX2J1ZmZlcl9zdG9yZV9ldmVudF9ob2xkICgmaW5ldiwgaG9sZF9xdWl0KTsK
KwkJfQorCisJICAgICAgaW5ldi5raW5kID0gTk9fRVZFTlQ7CisKKwkgICAgfQorCSAgYnJl
YWs7CisKICAgICAgICAgY2FzZSBXTV9VTklDSEFSOgogCWNhc2UgV01fU1lTQ0hBUjoKIAlj
YXNlIFdNX0NIQVI6CmRpZmYgLS1naXQgYS9zcmMvdzMydGVybS5oIGIvc3JjL3czMnRlcm0u
aAppbmRleCBjYWQ5ZmNmOGNiMS4uODhmN2RmZWVmOGIgMTAwNjQ0Ci0tLSBhL3NyYy93MzJ0
ZXJtLmgKKysrIGIvc3JjL3czMnRlcm0uaApAQCAtNzEzLDcgKzcxMyw4IEBAICNkZWZpbmUg
V01fRU1BQ1NfRklMRU5PVElGWSAgICAgICAgICAgIChXTV9FTUFDU19TVEFSVCArIDI1KQog
I2RlZmluZSBXTV9FTUFDU19JTUVfU1RBVFVTICAgICAgICAgICAgKFdNX0VNQUNTX1NUQVJU
ICsgMjYpCiAjZGVmaW5lIFdNX0VNQUNTX0RSQUdPVkVSICAgICAgICAgICAgICAoV01fRU1B
Q1NfU1RBUlQgKyAyNykKICNkZWZpbmUgV01fRU1BQ1NfRFJPUCAgICAgICAgICAgICAgICAg
IChXTV9FTUFDU19TVEFSVCArIDI4KQotI2RlZmluZSBXTV9FTUFDU19FTkQgICAgICAgICAg
ICAgICAgICAgKFdNX0VNQUNTX1NUQVJUICsgMjkpCisjZGVmaW5lIFdNX0VNQUNTX0xPV19M
RVZFTF9LRVkgICAgICAgICAoV01fRU1BQ1NfU1RBUlQgKyAyOSkKKyNkZWZpbmUgV01fRU1B
Q1NfRU5EICAgICAgICAgICAgICAgICAgIChXTV9FTUFDU19TVEFSVCArIDMwKQogCiAjZGVm
aW5lIFdORF9GT05UV0lEVEhfSU5ERVggICAgKDApCiAjZGVmaW5lIFdORF9MSU5FSEVJR0hU
X0lOREVYICAgKDQpCmRpZmYgLS1naXQgYS9zcmMveHRlcm0uYyBiL3NyYy94dGVybS5jCmlu
ZGV4IDBjMjBkMzhiMGY3Li43MjcxNWUwZWQ3MyAxMDA2NDQKLS0tIGEvc3JjL3h0ZXJtLmMK
KysrIGIvc3JjL3h0ZXJtLmMKQEAgLTE3ODQwLDYgKzE3ODQwLDE0MSBAQCAjZGVmaW5lIFNU
T1JFX0tFWVNZTV9GT1JfREVCVUcoa2V5c3ltKSAoKHZvaWQpMCkKIAogc3RhdGljIHN0cnVj
dCB4X2Rpc3BsYXlfaW5mbyAqbmV4dF9ub29wX2RweWluZm87CiAKK0xpc3BfT2JqZWN0Cit4
X2dldF9tb2RpZmllcl9mb3Jfa2V5Y29kZSAoc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlp
bmZvLAorCQkJICAgIGludCBrZXljb2RlKQoreworI2lmZGVmIEhBVkVfWEtCCisgIGlmIChk
cHlpbmZvLT54a2JfZGVzYykKKyAgICBmb3IgKGludCBtb2QgPSAwOyBtb2QgPCBYa2JOdW1N
b2RpZmllcnM7IG1vZCsrKQorICAgICAgeworCWludCBtYXNrID0gKDEgPDwgbW9kKTsKKwlp
ZiAoZHB5aW5mby0+eGtiX2Rlc2MtPm1hcC0+bW9kbWFwW2tleWNvZGVdICYgbWFzaykKKwkg
IHsKKwkgICAgaWYgKG1hc2sgPT0gU2hpZnRNYXNrKQorCSAgICAgIHJldHVybiBRc2hpZnQ7
CisJICAgIGlmIChtYXNrID09IENvbnRyb2xNYXNrKQorCSAgICAgIHJldHVybiBRY3RybDsK
KwkgICAgaWYgKG1hc2sgPT0gZHB5aW5mby0+bWV0YV9tb2RfbWFzaykKKwkgICAgICByZXR1
cm4gUW1ldGE7CisJICAgIGlmIChtYXNrID09IGRweWluZm8tPmFsdF9tb2RfbWFzaykKKwkg
ICAgICByZXR1cm4gUWFsdDsKKwkgICAgaWYgKG1hc2sgPT0gZHB5aW5mby0+c3VwZXJfbW9k
X21hc2spCisJICAgICAgcmV0dXJuIFFzdXBlcjsKKwkgICAgaWYgKG1hc2sgPT0gZHB5aW5m
by0+aHlwZXJfbW9kX21hc2spCisJICAgICAgcmV0dXJuIFFoeXBlcjsKKwkgIH0KKyAgICAg
IH0KKyNlbmRpZgorICBYTW9kaWZpZXJLZXltYXAgKm1hcCA9IGRweWluZm8tPm1vZG1hcDsK
KyAgaWYgKG1hcCkKKyAgICBmb3IgKGludCBtb2QgPSAwOyBtb2QgPCA4OyBtb2QrKykKKyAg
ICAgIHsKKwlpbnQgbWFzayA9ICgxIDw8IG1vZCk7CisgICAgICAgIGZvciAoaW50IGtleSA9
IDA7IGtleSA8IG1hcC0+bWF4X2tleXBlcm1vZDsga2V5KyspCisJICBpZiAobWFwLT5tb2Rp
Zmllcm1hcFttb2QgKiBtYXAtPm1heF9rZXlwZXJtb2QgKyBrZXldID09IGtleWNvZGUpCisJ
ICAgIHsKKwkgICAgICBpZiAobWFzayA9PSBTaGlmdE1hc2spCisJCXJldHVybiBRc2hpZnQ7
CisJICAgICAgaWYgKG1hc2sgPT0gQ29udHJvbE1hc2spCisJCXJldHVybiBRY3RybDsKKwkg
ICAgICBpZiAobWFzayA9PSBkcHlpbmZvLT5tZXRhX21vZF9tYXNrKQorCQlyZXR1cm4gUW1l
dGE7CisJICAgICAgaWYgKG1hc2sgPT0gZHB5aW5mby0+YWx0X21vZF9tYXNrKQorCQlyZXR1
cm4gUWFsdDsKKwkgICAgICBpZiAobWFzayA9PSBkcHlpbmZvLT5zdXBlcl9tb2RfbWFzaykK
KwkJcmV0dXJuIFFzdXBlcjsKKwkgICAgICBpZiAobWFzayA9PSBkcHlpbmZvLT5oeXBlcl9t
b2RfbWFzaykKKwkJcmV0dXJuIFFoeXBlcjsKKwkgICAgfQorICAgICAgfQorICByZXR1cm4g
UW5pbDsKK30KKworc3RhdGljIHZvaWQKK3hfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2
ZW50IChzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRweWluZm8sCisJCQkJICBjb25zdCBYRXZl
bnQgKnhldiwgc3RydWN0IGZyYW1lICpmKQoreworICBYS2V5RXZlbnQgeGtleTsKKyAgYm9v
bCBpc19wcmVzczsKKyAgS2V5U3ltIGtleXN5bTsKKyAgTGlzcF9PYmplY3Qga2V5LCBtb2Rp
ZmllcjsKKyAgc3RydWN0IGlucHV0X2V2ZW50IGllOworCisgIGlmIChOSUxQIChWZW5hYmxl
X2xvd19sZXZlbF9rZXlfZXZlbnRzKSkKKyAgICByZXR1cm47CisKKyAgc3dpdGNoICh4ZXYt
PnR5cGUpCisgICAgeworICAgIGNhc2UgS2V5UHJlc3M6CisgICAgICBpc19wcmVzcyA9IHRy
dWU7CisgICAgICB4a2V5ID0geGV2LT54a2V5OworICAgICAgYnJlYWs7CisgICAgY2FzZSBL
ZXlSZWxlYXNlOgorICAgICAgaXNfcHJlc3MgPSBmYWxzZTsKKyAgICAgIHhrZXkgPSB4ZXYt
PnhrZXk7CisgICAgICBicmVhazsKKyNpZmRlZiBIQVZFX1hJTlBVVDIKKyAgICBjYXNlIEdl
bmVyaWNFdmVudDoKKyAgICAgIFhJRGV2aWNlRXZlbnQgKnhpZXYgPSB4ZXYtPnhjb29raWUu
ZGF0YTsKKyAgICAgIHN3aXRjaCAoeGV2LT54Z2VuZXJpYy5ldnR5cGUpCisJeworCWNhc2Ug
WElfS2V5UHJlc3M6CisJICBpc19wcmVzcyA9IHRydWU7CisJICBicmVhazsKKwljYXNlIFhJ
X0tleVJlbGVhc2U6CisJICBpc19wcmVzcyA9IGZhbHNlOworCSAgYnJlYWs7CisJZGVmYXVs
dDoKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIHhrZXkuc2VyaWFsID0geGlldi0+c2VyaWFs
OworICAgICAgeGtleS5zZW5kX2V2ZW50ID0geGlldi0+c2VuZF9ldmVudDsKKyAgICAgIHhr
ZXkuZGlzcGxheSA9IHhpZXYtPmRpc3BsYXk7CisgICAgICB4a2V5LndpbmRvdyA9IHhpZXYt
PmV2ZW50OworICAgICAgeGtleS5yb290ID0geGlldi0+cm9vdDsKKyAgICAgIHhrZXkuc3Vi
d2luZG93ID0geGlldi0+Y2hpbGQ7CisgICAgICB4a2V5LnRpbWUgPSB4aWV2LT50aW1lOwor
ICAgICAgeGtleS54ID0geGlldi0+ZXZlbnRfeDsKKyAgICAgIHhrZXkueSA9IHhpZXYtPmV2
ZW50X3k7CisgICAgICB4a2V5Lnhfcm9vdCA9IHhpZXYtPnJvb3RfeDsKKyAgICAgIHhrZXku
eV9yb290ID0geGlldi0+cm9vdF95OworICAgICAgeGtleS5zdGF0ZSA9IHhpZXYtPm1vZHMu
ZWZmZWN0aXZlOworICAgICAgeGtleS5rZXljb2RlID0geGlldi0+ZGV0YWlsOworICAgICAg
eGtleS5zYW1lX3NjcmVlbiA9IDE7CisgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1
bHQ6CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmICghZikKKyAgICBmID0geF9hbnlf
d2luZG93X3RvX2ZyYW1lIChkcHlpbmZvLCB4a2V5LndpbmRvdyk7CisgIGlmICghZikKKyAg
ICByZXR1cm47CisKKyAgWExvb2t1cFN0cmluZyAoJnhrZXksIE5VTEwsIDAsICZrZXlzeW0s
IE5VTEwpOworCisgIG1vZGlmaWVyID0geF9nZXRfbW9kaWZpZXJfZm9yX2tleWNvZGUgKGRw
eWluZm8sIHhrZXkua2V5Y29kZSk7CisKKyAgLyogQ29udmVydCBsb3dlcmNhc2UgbGF0aW4g
bGV0dGVyIHRvIHVwcGVyY2FzZS4gICovCisgIGlmIChrZXlzeW0gPj0gWEtfYSAmJiBrZXlz
eW0gPD0gWEtfeikKKyAgICBrZXlzeW0gLT0gWEtfYSAtIFhLX0E7CisKKyAgaWYgKCFrYmRf
bG93X2xldmVsX2tleV9pc19lbmFibGVkIChrZXlzeW0sIG1vZGlmaWVyKSkKKyAgICByZXR1
cm47CisKKyAga2V5ID0gbWFrZV9maXhudW0gKGtleXN5bSk7CisKKyAgRVZFTlRfSU5JVCAo
aWUpOworICBYU0VURlJBTUUgKGllLmZyYW1lX29yX3dpbmRvdywgZik7CisgIGllLmtpbmQg
PSBMT1dfTEVWRUxfS0VZX0VWRU5UOworICBpZS50aW1lc3RhbXAgPSB4a2V5LnRpbWU7Cisg
IGllLmFyZyA9IGxpc3QzIChpc19wcmVzcyA/IFF0IDogUW5pbCwga2V5LCBtb2RpZmllcik7
CisgIGtiZF9idWZmZXJfc3RvcmVfZXZlbnQgKCZpZSk7Cit9CisKIC8qIEZpbHRlciBldmVu
dHMgZm9yIHRoZSBjdXJyZW50IFggaW5wdXQgbWV0aG9kLgogICAgRFBZSU5GTyBpcyB0aGUg
ZGlzcGxheSB0aGlzIGV2ZW50IGlzIGZvci4KICAgIEVWRU5UIGlzIHRoZSBYIGV2ZW50IHRv
IGZpbHRlci4KQEAgLTIwMjA2LDYgKzIwMzQxLDcgQEAgaGFuZGxlX29uZV94ZXZlbnQgKHN0
cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywKICAgICAgIGdvdG8gT1RIRVI7CiAKICAg
ICBjYXNlIEtleVByZXNzOgorICAgICAgeF9tYXliZV9zZW5kX2xvd19sZXZlbF9rZXlfZXZl
bnQgKGRweWluZm8sIGV2ZW50LCBhbnkpOwogICAgICAgeF9kaXNwbGF5X3NldF9sYXN0X3Vz
ZXJfdGltZSAoZHB5aW5mbywgZXZlbnQtPnhrZXkudGltZSwKIAkJCQkgICAgZXZlbnQtPnhr
ZXkuc2VuZF9ldmVudCwKIAkJCQkgICAgdHJ1ZSk7CkBAIC0yMDcxNSw2ICsyMDg1MSw3IEBA
IGhhbmRsZV9vbmVfeGV2ZW50IChzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRweWluZm8sCiAj
ZW5kaWYKIAogICAgIGNhc2UgS2V5UmVsZWFzZToKKyAgICAgIHhfbWF5YmVfc2VuZF9sb3df
bGV2ZWxfa2V5X2V2ZW50IChkcHlpbmZvLCBldmVudCwgYW55KTsKICNpZmRlZiBIQVZFX1hf
STE4TgogICAgICAgLyogRG9uJ3QgZGlzcGF0Y2ggdGhpcyBldmVudCBzaW5jZSBYdERpc3Bh
dGNoRXZlbnQgY2FsbHMKICAgICAgICAgIFhGaWx0ZXJFdmVudCwgYW5kIHR3byBjYWxscyBp
biBhIHJvdyBtYXkgZnJlZXplIHRoZQpAQCAtMjM5NzAsNiArMjQxMDcsOCBAQCBoYW5kbGVf
b25lX3hldmVudCAoc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvLAogCSAgICAgIHN0
cnVjdCB4aV9kZXZpY2VfdCAqZGV2aWNlLCAqc291cmNlOwogCSAgICAgIFhLZXlQcmVzc2Vk
RXZlbnQgeGtleTsKIAorCSAgICAgIHhfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50
IChkcHlpbmZvLCBldmVudCwgYW55KTsKKwogCSAgICAgIGNvZGluZyA9IFFsYXRpbl8xOwog
CiAJICAgICAgLyogVGhlIGNvZGUgdW5kZXIgdGhpcyBsYWJlbCBpcyBxdWl0ZSBkZXN1bHRv
cnkuICBUaGVyZQpAQCAtMjQ1ODYsNiArMjQ3MjUsOCBAQCBoYW5kbGVfb25lX3hldmVudCAo
c3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvLAogI2VuZGlmCiAKIAkgIGNhc2UgWElf
S2V5UmVsZWFzZToKKwkgICAgeF9tYXliZV9zZW5kX2xvd19sZXZlbF9rZXlfZXZlbnQgKGRw
eWluZm8sIGV2ZW50LCBhbnkpOworCiAjaWYgZGVmaW5lZCBIQVZFX1hfSTE4TiB8fCBkZWZp
bmVkIFVTRV9HVEsgfHwgZGVmaW5lZCBVU0VfTFVDSUQKIAkgICAgewogCSAgICAgIFhLZXlQ
cmVzc2VkRXZlbnQgeGtleTsKQEAgLTMyNjYyLDYgKzMyODAzLDcgQEAgc3ltc19vZl94dGVy
bSAodm9pZCkKICAgVnhfdG9vbGtpdF9zY3JvbGxfYmFycyA9IFFuaWw7CiAjZW5kaWYKIAor
ICBERUZTWU0gKFFzaGlmdCwgInNoaWZ0Iik7CiAgIERFRlNZTSAoUW1vZGlmaWVyX3ZhbHVl
LCAibW9kaWZpZXItdmFsdWUiKTsKICAgREVGU1lNIChRY3RybCwgImN0cmwiKTsKICAgRnB1
dCAoUWN0cmwsIFFtb2RpZmllcl92YWx1ZSwgbWFrZV9maXhudW0gKGN0cmxfbW9kaWZpZXIp
KTsKZGlmZiAtLWdpdCBhL3NyYy94dGVybS5oIGIvc3JjL3h0ZXJtLmgKaW5kZXggOGQ1Yzk5
MTc3NDkuLjY2ZTA1MmU3YWNkIDEwMDY0NAotLS0gYS9zcmMveHRlcm0uaAorKysgYi9zcmMv
eHRlcm0uaApAQCAtMTkwNiw2ICsxOTA2LDggQEAgeF9tdXRhYmxlX2NvbG9ybWFwIChYVmlz
dWFsSW5mbyAqdmlzdWFsKQogZXh0ZXJuIHZvaWQgdGVhcl9kb3duX3hfYmFja19idWZmZXIg
KHN0cnVjdCBmcmFtZSAqZik7CiBleHRlcm4gdm9pZCBpbml0aWFsX3NldF91cF94X2JhY2tf
YnVmZmVyIChzdHJ1Y3QgZnJhbWUgKmYpOwogCitleHRlcm4gTGlzcF9PYmplY3QgeF9nZXRf
bW9kaWZpZXJfZm9yX2tleWNvZGUgKHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqLCBpbnQpOwor
CiAvKiBEZWZpbmVkIGluIHhmbnMuYy4gICovCiBleHRlcm4gdm9pZCB4X3JlYWxfcG9zaXRp
b25zIChzdHJ1Y3QgZnJhbWUgKiwgaW50ICosIGludCAqKTsKIGV4dGVybiB2b2lkIHhfY2hh
bmdlX3RhYl9iYXJfaGVpZ2h0IChzdHJ1Y3QgZnJhbWUgKiwgaW50KTsKLS0gCjIuMzUuMS53
aW5kb3dzLjIKCg==

--------------kdIRyaCiBUPUB4DSQ0iPV24t--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 23 Nov 2024 12:08:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Nov 23 07:08:37 2024
Received: from localhost ([127.0.0.1]:56923 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tEowH-00037p-1v
	for submit <at> debbugs.gnu.org; Sat, 23 Nov 2024 07:08:37 -0500
Received: from mail.imayhem.com ([82.223.54.191]:38121
 helo=zealous-pike.82-223-54-191.plesk.page)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <cpardo@HIDDEN>) id 1tEowD-00037Y-U8
 for 74423 <at> debbugs.gnu.org; Sat, 23 Nov 2024 07:08:35 -0500
Received: from [192.168.68.104] (111.red-88-21-7.staticip.rima-tde.net
 [88.21.7.111])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id 90F8080127; 
 Sat, 23 Nov 2024 12:08:25 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 88.21.7.111) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[192.168.68.104]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Message-ID: <dce2177f-bf03-4da3-94cd-ac1bd9f26dfc@HIDDEN>
Date: Sat, 23 Nov 2024 13:08:24 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74423: Low level key events
To: Po Lu <luangruo@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN> <87ttc4hzmb.fsf@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <87ttc4hzmb.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: 74423 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 19/11/2024 0:49, Po Lu wrote:

> You are computing the modifier event to be generated incorrectly.  You
> should search the modifier map (dpyinfo->modmap) for columns containing
> received keysyms, and compare modifier bits derived from the rows where
> they appear against meta_mod_mask, shift_lock_mask, alt_mod_mask,
> super_mod_mask, and hyper_mod_mask in the display structure, or CtrlMask
> and ShiftMask.

Thanks for the guidance. Does this look ok?


Lisp_Object
x_get_modifier_for_keycode (struct x_display_info *dpyinfo,
			    int keycode)
{
#ifdef HAVE_XKB
   if (dpyinfo->xkb_desc)
     for (int mod = 0; mod < XkbNumModifiers; mod++)
       {
	int mask = (1 << mod);
	if (dpyinfo->xkb_desc->map->modmap[keycode] & mask)
	  {
	    if (mask == ShiftMask)
	      return Qshift;
	    if (mask == ControlMask)
	      return Qctrl;
	    if (mask == dpyinfo->meta_mod_mask)
	      return Qmeta;
	    if (mask == dpyinfo->alt_mod_mask)
	      return Qalt;
	    if (mask == dpyinfo->super_mod_mask)
	      return Qsuper;
	    if (mask == dpyinfo->hyper_mod_mask)
	      return Qhyper;
	  }
       }
#endif
   XModifierKeymap *map = dpyinfo->modmap;
   if (map)
     for (int mod = 0; mod < 8; mod++)
       {
	int mask = (1 << mod);
         for (int key = 0; key < map->max_keypermod; key++)
	  if (map->modifiermap[mod * map->max_keypermod + key] == keycode)
	    {
	      if (mask == ShiftMask)
		return Qshift;
	      if (mask == ControlMask)
		return Qctrl;
	      if (mask == dpyinfo->meta_mod_mask)
		return Qmeta;
	      if (mask == dpyinfo->alt_mod_mask)
		return Qalt;
	      if (mask == dpyinfo->super_mod_mask)
		return Qsuper;
	      if (mask == dpyinfo->hyper_mod_mask)
		return Qhyper;
	    }
       }
   return Qnil;
}





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 20 Nov 2024 04:21:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 19 23:21:19 2024
Received: from localhost ([127.0.0.1]:44821 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tDcDP-0003pl-F9
	for submit <at> debbugs.gnu.org; Tue, 19 Nov 2024 23:21:19 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:41626)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <monnier@HIDDEN>) id 1tDcDM-0003pS-68
 for 74423 <at> debbugs.gnu.org; Tue, 19 Nov 2024 23:21:17 -0500
Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 54EE68093F;
 Tue, 19 Nov 2024 23:21:09 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1732076468;
 bh=u/dlODuMNVgCgj7eJr94SIpIsmXAVObelSgDWwbkYwM=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=Hsz6SJbByqYiPLJhXpTNmqBBjicWYaWnhgp72MiA/DXXKSSHHJFCKJ1moRdOa9xAy
 PdOXu+V9kaGQlB1W84uHf4mpGmu3FNBCdk/Z67D/DjbI1QAW6Oh3BxyLOnYYAH2wsZ
 h8v15FDZISqPoOk6zXtj8yawzl5odG8AFHM3kQLN/RhXjdH7wS0o4ZCLNrW89xt78X
 tkbTkVUq7PH+Iq7+3xDBk+wlZlaXUYDhv4bNcu5/7ibg7z5bkzsTKE8VbY78+He46Y
 HH+1OaBNdWv3mIBeBbItBOEAt40vOya4vHisOkkkrxo8T7r8sznmllLnADaMn3hxOB
 wkq5He0RNEPCQ==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 7091C80394;
 Tue, 19 Nov 2024 23:21:08 -0500 (EST)
Received: from pastel (104-195-225-43.cpe.teksavvy.com [104.195.225.43])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 41DA712038D;
 Tue, 19 Nov 2024 23:21:08 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>
Subject: Re: bug#74423: Low level key events
In-Reply-To: <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN> (Cecilio
 Pardo's message of "Tue, 19 Nov 2024 21:05:06 +0100")
Message-ID: <jwvplmqtuh1.fsf-monnier+emacs@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
 <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
Date: Tue, 19 Nov 2024 23:21:07 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL 0.001 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74423
Cc: 74423 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

>> Move that code to a function, so you can get rid of this `hyper`
>> special case.  BTW, any reason why you couldn't use
>> `event-apply-hyper-modifier`?
> No, no reason. I will change that.

To be clear: I don't know that it works here.

>> I think the list of low-level keys handled here should not be hard-coded.
>> IOW, maybe `enable-low-level-keys` should not be a boolean but
>> a list/map/table indicating which keys to handle.
> I was sending the keys for which I have an immediate use case. Using a list
> looks got, adding some special symbols to choose groups, such as "all
> modifier keys".

I was also thinking that maybe the list/table could be used to avoid
having to define in the C code what is a "modifier key" and things
like that.

>> So, IIUC you might generate 2 low-level events for a single key press?
>> Why?
> We want to allow to detect modifier keys, regardless of the key that is
> used.  For example, when you press Shift_L we generate an event for 'lshift
> and other (of different type) for the modifier 'shift.

But my question is about the fact that you generate two events, not
about the two pieces of information.
IOW you could also generate a single event with both pieces of
information (and if use the "normal" keymaps instead of
`special-event-map` then you might even have a `function-key-map` rule
which converts a `Shift_L` down to a `shift` if there was no binding for
the `Shift_L` event).


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 19 Nov 2024 20:05:18 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 19 15:05:18 2024
Received: from localhost ([127.0.0.1]:44132 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tDUTO-0007Vx-Bv
	for submit <at> debbugs.gnu.org; Tue, 19 Nov 2024 15:05:18 -0500
Received: from mail.imayhem.com ([82.223.54.191]:38879
 helo=zealous-pike.82-223-54-191.plesk.page)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <cpardo@HIDDEN>) id 1tDUTL-0007VV-QK
 for 74423 <at> debbugs.gnu.org; Tue, 19 Nov 2024 15:05:17 -0500
Received: from [192.168.68.104] (111.red-88-21-7.staticip.rima-tde.net
 [88.21.7.111])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id BC5C7800F3; 
 Tue, 19 Nov 2024 20:05:08 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 88.21.7.111) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[192.168.68.104]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Message-ID: <705fabb8-1ea0-4894-8c32-05097ab822c9@HIDDEN>
Date: Tue, 19 Nov 2024 21:05:06 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74423: Low level key events
To: Stefan Monnier <monnier@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
 <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: 74423 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 19/11/2024 17:43, Stefan Monnier wrote:

>> +         ((functionp func) (funcall func))
>> +         ((eq 'hyper func)
>> +          (message "H-...")
>> +          (let ((r (read-event)))
>> +            (setq unread-command-events
>> +                  (list (event-apply-modifier
>> +                         r 'hyper 24 "H-"))))))))))
> 
> Move that code to a function, so you can get rid of this `hyper`
> special case.  BTW, any reason why you couldn't use
> `event-apply-hyper-modifier`?

No, no reason. I will change that.

> I think the list of low-level keys handled here should not be hard-coded.
> IOW, maybe `enable-low-level-keys` should not be a boolean but
> a list/map/table indicating which keys to handle.

I was sending the keys for which I have an immediate use case. Using a 
list looks got, adding some special symbols to choose groups, such as 
"all modifier keys".

> So, IIUC you might generate 2 low-level events for a single key press?
> Why?

We want to allow to detect modifier keys, regardless of the key that is 
used. For example, when you press Shift_L we generate an event for 
'lshift and other (of different type) for the modifier 'shift.

> Other note: in the distant past (back around Emacs-21) I seem to
> remember Gerd making changes to the event structure so as to avoid
> allocating Lisp objects for this code.  I think it was related to
> problems due to running this low-level event-handler code from within
> a C signal handler, which is a practice was have since stopped, luckily,
> but maybe there are still good reasons to try and avoid involving
> allocating objects into the Lisp heap in this low-level code.

I will look into this.

Thanks for your comments!






Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 19 Nov 2024 16:43:22 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 19 11:43:22 2024
Received: from localhost ([127.0.0.1]:43814 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tDRJx-0006yk-Se
	for submit <at> debbugs.gnu.org; Tue, 19 Nov 2024 11:43:22 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:62784)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <monnier@HIDDEN>) id 1tDRJv-0006yW-D5
 for 74423 <at> debbugs.gnu.org; Tue, 19 Nov 2024 11:43:20 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id CBC28444FC9;
 Tue, 19 Nov 2024 11:43:12 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1732034591;
 bh=x0U5QRphRWOBhk3qTb+t1GYb3TTKXwrTBdou9IHDK4k=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=TGxWCQ7QfpmZFyNlgQgVwZe7NIYKAS+KWhrwf+CCz8DtRFcwAfQHuLW+l5kw1FVV9
 s3Vkynne5Pb6M27mgIvciUE5R+7KKyGwy0M/af5AL2Q7/+Pu5wxagEZHQCG9mG7z61
 NxIu2luKuze2gwpQjBYOSG2YHPEUIioZgtHy8GSFX5aLfUf+25l8JhQjvZbuByXJ4/
 hQp7ZPo9uROQPK5CzBsWIoBnfiLzFxZ7cA7kuWeTQCjGLYuDNlgeuEMGZ/dJLJ1zQp
 YwUTOE+XU5wUION6r7yX1HjFOHNLXR8U7BL1ZBqoFFIUNZx4wELGGNgn0G0fK3hG/+
 Xxhq0NKJ56ILQ==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 46EB5444FC1;
 Tue, 19 Nov 2024 11:43:11 -0500 (EST)
Received: from lechazo (lechon.iro.umontreal.ca [132.204.27.242])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 35F50120370;
 Tue, 19 Nov 2024 11:43:11 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>
Subject: Re: bug#74423: Low level key events
In-Reply-To: <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN> (Cecilio
 Pardo's message of "Mon, 18 Nov 2024 21:35:40 +0100")
Message-ID: <jwv4j43jisn.fsf-monnier+emacs@HIDDEN>
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
Date: Tue, 19 Nov 2024 11:43:08 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL 0.203 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74423
Cc: 74423 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> It provides events for press/release of keys, independently of the normal
> keyboard events. These events are bound int the special-event-map. Some l=
isp
> is included to implement detection of multiple tapping on keys, and runni=
ng
> commands or simulating modifiers.

I hadn't followed the discussion over at emacs-devel, but this is cool.
I used to have a local patch which generated extra events for all key
presses/releases.  I never wrote any useful Lisp-level code for it
(all I had were bindings to ignore those events so Emacs was still
usable =F0=9F=99=82), but I really think it would make for fun new hacks.

I haven't had time to look at your whole patch, but here are some comments.

> +  (let ((key (cl-third last-input-event)))

Please try and use `event-*` functions.  If none serve (as will often be
the case), define local "replacements" until they can be promoted to
`subr.el`.

> +         ((functionp func) (funcall func))
> +         ((eq 'hyper func)
> +          (message "H-...")
> +          (let ((r (read-event)))
> +            (setq unread-command-events
> +                  (list (event-apply-modifier
> +                         r 'hyper 24 "H-"))))))))))

Move that code to a function, so you can get rid of this `hyper`
special case.  BTW, any reason why you couldn't use
`event-apply-hyper-modifier`?

[ BTW, this becomes more ... interesting ... when you want to be able to
  cumulative that for several modifiers, in which case your `read-event`
  might return an event which is not the one to which you want to add
  `H-`.  ]

> +  switch (keysym)
> +    {
> +    case GDK_KEY_Shift_L: key =3D Qlshift; break;
> +    case GDK_KEY_Shift_R: key =3D Qrshift; break;
> +    case GDK_KEY_Control_L: key =3D Qlctrl; break;
> +    case GDK_KEY_Control_R: key =3D Qrctrl; break;
> +    case GDK_KEY_Alt_L: key =3D Qlalt; break;
> +    case GDK_KEY_Alt_R: key =3D Qralt; break;
> +    default:
> +      key =3D Qnil;
> +    }
> +
> +   switch (keysym)
> +    {
> +    case GDK_KEY_Shift_L:
> +    case GDK_KEY_Shift_R:
> +      modifier =3D Qshift;
> +      break;
> +    case GDK_KEY_Control_L:
> +    case GDK_KEY_Control_R:
> +      modifier =3D Vx_ctrl_keysym;
> +      if (NILP (modifier))
> +	modifier =3D Qctrl;
> +      break;
> +    case GDK_KEY_Alt_L:
> +    case GDK_KEY_Alt_R:
> +      modifier =3D Vx_meta_keysym;
> +      if (NILP (modifier))
> +	modifier =3D Qalt;
> +      break;
> +    case GDK_KEY_Meta_L:
> +    case GDK_KEY_Meta_R:
> +      modifier =3D Vx_meta_keysym;
> +      if (NILP (modifier))
> +	modifier =3D Qmeta;
> +      break;
> +    case GDK_KEY_Hyper_L:
> +    case GDK_KEY_Hyper_R:
> +      modifier =3D Vx_hyper_keysym;
> +      if (NILP (modifier))
> +	modifier =3D Qhyper;
> +      break;
> +    case GDK_KEY_Super_L:
> +    case GDK_KEY_Super_R:
> +      modifier =3D Vx_super_keysym;
> +      if (NILP (modifier))
> +	modifier =3D Qsuper;
> +      break;
> +    default:
> +      modifier =3D Qnil;
> +    }

I think the list of low-level keys handled here should not be hard-coded.
IOW, maybe `enable-low-level-keys` should not be a boolean but
a list/map/table indicating which keys to handle.

> +  if (!NILP (key))
> +    {
> +      EVENT_INIT (inev.ie);
> +      XSETFRAME (inev.ie.frame_or_window, f);
> +      inev.ie.kind =3D LOW_LEVEL_KEY_EVENT;
> +      inev.ie.timestamp =3D xkey.time;
> +      inev.ie.arg =3D list2 (is_press ? Qt : Qnil, key);
> +      kbd_buffer_store_buffered_event (&inev, &xg_pending_quit_event);
> +    }
> +
> +  if (!NILP (modifier))
> +    {
> +      EVENT_INIT (inev.ie);
> +      XSETFRAME (inev.ie.frame_or_window, f);
> +      inev.ie.kind =3D LOW_LEVEL_MODIFIER_KEY_EVENT;
> +      inev.ie.timestamp =3D xkey.time;
> +      inev.ie.arg =3D list2 (is_press ? Qt : Qnil, modifier);
> +      kbd_buffer_store_buffered_event (&inev, &xg_pending_quit_event);
> +    }
> +}

So, IIUC you might generate 2 low-level events for a single key press?
Why?

Other note: in the distant past (back around Emacs-21) I seem to
remember Gerd making changes to the event structure so as to avoid
allocating Lisp objects for this code.  I think it was related to
problems due to running this low-level event-handler code from within
a C signal handler, which is a practice was have since stopped, luckily,
but maybe there are still good reasons to try and avoid involving
allocating objects into the Lisp heap in this low-level code.


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 19 Nov 2024 15:29:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 19 10:29:13 2024
Received: from localhost ([127.0.0.1]:43672 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tDQAC-0003ZL-KG
	for submit <at> debbugs.gnu.org; Tue, 19 Nov 2024 10:29:12 -0500
Received: from eggs.gnu.org ([209.51.188.92]:32918)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1tDQA9-0003Z5-QN
 for 74423 <at> debbugs.gnu.org; Tue, 19 Nov 2024 10:29:10 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tDQA2-0007ci-Gf; Tue, 19 Nov 2024 10:29:02 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=00rfOvUGulpPowx1DN4JifuMT1rz9RLWJYkR48FS9D4=; b=gtX3lteCA7Nh
 Gd0S1o0nRaR4zx3+u+Pslj7gSqlUARZzoz0465PZIhRYulfhIvh8LfctbnPcdLh1g3wwCBmnkO4Ek
 lA6zC+LiftRpq0MxCHXxXZmK8PD8IJHJhLPAWf4E8YJd5r4K5uu2O2aSEMJGrPVUPDdD0p3hdRUE7
 eiJh7GQn6v3zIgge/VaORijGuMu01bvX+528Cp5SMF7SQKv61NVXGbJuv4jNLbLzDwFKwwhTrFQKI
 GJqUpSGnWPz3qgt/HNjc79A/2aXiQsGbJfoo3UoZlROfOKiqlr0IDuGd6VVcVPWjxBzCnTsX1XZma
 6yilzsBboaRxnJa5kZiGIA==;
Date: Tue, 19 Nov 2024 17:29:00 +0200
Message-Id: <86ttc3tf7n.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>,
 Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN> (message from
 Cecilio Pardo on Mon, 18 Nov 2024 21:35:40 +0100)
Subject: Re: bug#74423: Low level key events
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN> <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74423
Cc: 74423 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Mon, 18 Nov 2024 21:35:40 +0100
> From: Cecilio Pardo <cpardo@HIDDEN>
> 
> Here is a still incomplete patch for this, renamed from "physical 
> keyboard events", following up to
> https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00085.html
> 
> It provides events for press/release of keys, independently of the 
> normal keyboard events. These events are bound int the 
> special-event-map. Some lisp is included to implement detection of 
> multiple tapping on keys, and running commands or simulating modifiers.

Thanks, I have some minor comments, and also added Stefan to the
discussion, in case he will also have comments.

> +  if (!Venable_low_level_key_events)

You treat this variable as a C boolean, i.e. assume it was defined
with DEFVAR_BOOL, but in that case our convention is to call the C
variables without the leading 'V'.  OTOH, if you envision that this
variable could be something other than nil or t in Lisp, then you need
to use NILP here.

> +  DEFVAR_LISP ("enable-low-level-key-events", Venable_low_level_key_events,
> +	       doc: /* Enabled the recepcion of low level key events.
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"If non-nil, reception of low-level key events is enabled."

> +static void
> +pgtk_maybe_send_low_level_key_event (GdkEvent *event)
> +{
> +  if (!Venable_low_level_key_events)
> +    return;

Same problem with the test here.

> --- a/src/w32fns.c
> +++ b/src/w32fns.c
> @@ -4669,6 +4669,11 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
>      case WM_KEYUP:
>      case WM_SYSKEYUP:
>        record_keyup (wParam, lParam);
> +      if (Venable_low_level_key_events)
> +	{
> +	  signal_user_input ();
> +	  my_post_msg( &wmsg, hwnd, WM_EMACS_LOW_LEVEL_KEY, wParam, lParam );
> +	}

And here (and in several other places in the patch).




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at 74423 <at> debbugs.gnu.org:


Received: (at 74423) by debbugs.gnu.org; 18 Nov 2024 23:49:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Nov 18 18:49:19 2024
Received: from localhost ([127.0.0.1]:39732 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tDBUd-0001mH-Ap
	for submit <at> debbugs.gnu.org; Mon, 18 Nov 2024 18:49:19 -0500
Received: from sonic305-22.consmr.mail.ne1.yahoo.com ([66.163.185.148]:42475)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <luangruo@HIDDEN>) id 1tDBUb-0001m3-3d
 for 74423 <at> debbugs.gnu.org; Mon, 18 Nov 2024 18:49:18 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
 t=1731973749; bh=ttAABeWMdbRhbjs7VJmQqYowkdTubale70Qoe3SS8cE=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To;
 b=T4NeX2OKm6CQa9H8BxXTxMEadwtDi5CHwJuGBUggV+k8LFPsa178qvXs7osYZRQRe64zELMoVmizqA+QI++UBT0zeE6Cm+e4hqXNcDKo0lcxX41PMG3r/qGSdlP6jmpMav+1ITEmd8Cdb5BECWRRV/BoJBRwII9AFaOln169prxtTBqtPsJB9VWzsRhCFXTV+bZc0nFbYSAkwd/n4rhFnfYcCew36nTAAD4NXIXElcioTM6ZhDBpWvMuBwStzkhYSOL8vLxeY7psCkwrZba0qwHZcj/Aa2SqTA+MfGzVdQohEMM159qGTQemNW//2FhGe97gatzrguiRae33ByR2ew==
X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
 t=1731973749; bh=3g/Vak+BIlFUa0ik4g6CjBCIllzvJ8b3MjfrvD7EjYy=;
 h=X-Sonic-MF:From:To:Subject:Date:From:Subject;
 b=olqugtH3IWzqiok6b5ltVF7+xDdPeAwk0r2BQoke6CoE8j4F01ApYttmkE9Y3fcxBzpjBIAsrP2FjqCWPMhgGVYXD+VQqomj/vsYDqvT7E3hUaSrw5iMBDkv+u6mFNoaI+ecBrcExa3aR6pSGe6fEyi9bnUruCQU7ZqAH/zy6zIOIrgw5fMYxF+HbM+Ro+OaRzUrZrhhk84lmsm1jUSV5gmfayOfpDUdE/rjCvN1eXy0obbCeLhRuZT78RpZaEaCe498hCTECMPt5hY+kuGD0BFm9xKwup0hs+rK3aK1x1vXBd3w4TId/SqjpChl4e5ZZzNWlyxdgwZyWBS6XqnE/g==
X-YMail-OSG: JtHSyI0VM1lX7hhGFstzzjml2T0g5a3MDpKDJJ58qm0CvC0ByZIja7fhPuaGvc5
 oS6zTI6CCQgZMhRv_fpijtxsnnrFpOVCmVDPLupLVuy3gCLUHd4kR18EL1MZt2BNWhfaz.mzK8u5
 5AFK6f.40DbJMUfgbFowdxz7Dkico9ZPC8d1kheoTLuPF1uWfXGMaWim849_ODZkZxROyWOGza1l
 1Q9UCr1K6KWKgiPoCYLMQ.6NPXCdxLPzYKV50uanXH5YnDdqypC.mu1bsKfTFYKHqOmu9Ge5XXK1
 _lQxIrt2mqGmL05YJ8ZF2SERBX0O73KffwFVKFry8_ry5hYf6EsqU5OSv7o8C2BzWZqFE47SyNeq
 Rw8g8_rOXE9E2VdeMgQIVzRtdGOdMCf4CF7QODLKeJxPXPM_sZaQ0KEhG0V.CeiMG4xAU_vCVLxz
 gcAZOOMGBVteVn8frbEl4WNAtSn7VcQBsfSCzMbVplwPuAAjSA1WpX2Cy0mkXc3aA0.zG67yG8Nq
 mq8Sro5pq4Qvc9BW8ffm61nWodSFNR_O_qIyG9wPgJOJIxd3bE6svwkif61jy_eTPA27WB2ZGmPB
 pVpsdPBVnyi5wfGRgKoijNsCHnRIld19UTOXOxVwthTUs.xNmZ.HnWBoVzXBSWCcdt4WEhRvhQb9
 IQnoRG3udPIY1FsYGw6gsHWL8jvK16fFIl7HPYms9QmqAIFkXR9_YvunuxZt8N9Tp8X1_cilrLDz
 aj32WZC82TzPOu09GCouGlh06WYsrwqfBnirvx2CLpnb_lvBRJguVz89iWgiF3s4b8jP0FtJVReN
 sh_p1PfOCcG47n2521jSYKKY9YtMgYI6utB8bMPJq5ZhLozx3F5ox.ZEgsLYPAG3KxISuOxOS8QE
 VwOo6gupqjR9i.Uw_CQvtFm4xIj3RANUpNVJ6ywmskrA8MnrWLFq4yS_N_IuTrsNybodwNgxXIwN
 ncV6voNWD175q0Tmkaj.a.ybDbzZvhfXnNhOxSvvPRiFVmPDL7.BeB3JrRZMO5YXoZnqu5r5kSt9
 xfx_ukNjF4xaxR60QS9bNY6m1tv5g6Gb3MHpJiYOUsZ46dsmLkya8vwyYd5eBBwNtLCzZ7izAP.x
 Jt1dtcQZ778A2ffNXsQOz6I9cMRNbxEH58_mIhRqApkRxgjYCxNlyDkwA27xRze03nE8_uT7eaAK
 w4dtUwbYm5rMuTnDrgwmfhAyjCYQNeSUvTqdppet897NUq9xGeeodKB91yc1_MsGcoijJW8O6ey1
 Iowv9RvTqgvWMCJXBBUfx9UUjIQVmRfQoKtF4Vs1sNL6SLxVPHp_i6A9Waw964pwXp174R4UN97E
 0OwGlQ7LMMYzDu0FGnXgZETj7ZOBeLUmO66ldBHA6COTxGzU7KKRYtjIJhzAqKTcz37crtcR2Td0
 8I0QykdAba6SZJONSMJWaXeXIJ.3YxpJ9DXyVILSY78idPqWLo6FQjiqyFOtdTM94X3pwvrejz1p
 j.qYqTY0vJyBWZJ_4.k1xoTNz4IBGi3MPbS4JyWij39GL3fSWHo08OTZkOroXkvi2LVe1CXc.b8O
 LDj2UPfcMmYj4VST_cbHrd5QrmXKt51Wg6BaSXPo7ja2FhTkcDA2Zo6zO2nMPlqtzO9gXtyyhVpd
 rMu8kiMDoJfgOVxqDk_a49UrA8Ss4.XTBV.6YSdBkpzE3LZPqV39Z9IUJG.VZpyR2ac2X02fTo2Q
 dl0EEe7uy53VEh_CO79kW0uK1GMRTXutaZ8AF3M8CLXIRBk8oG_Jmr3WOwNqYKI_mhXJCsQWm67R
 7inHz7DOyhbYOw_DDQdsKuu8MUOHV2ihmpYs4D9sLV9z0wri6k5sgn_BR9B0ibntsz_0NJZyLPpS
 xiE8P3GIX1HIjlTQRTg.n0MsQiVO.rreRf_rY9F9vQTAY0z82QuzQ8o8_E_tpueYs0Yd5CIvXeIR
 fkYJ97mC78t9hZWN5E_7y4umkrCuiyoFAri.cUl49isFxMqmyu6g3SndqnTjCdjLAoD7GEHgNjz7
 d6kv.KW544zK6pRyZ9U4E43o7T.HKVOYVcqJNwCajHveDOhR7IpRIUUQhTX9hTki0Cg3UH_uXpoX
 CFkhZgMe7DuV6H95N6Rc56m3WCCwfBJlQKF1agajhx8034AWFN4z7DiATexxdBGxZCEQigUrSUvn
 aszC3CvdJEdf1q5Tu5Dv2wL9F3GMYc3zUtp.FQ_QmwyeZCul1pxxzzh1RIn4HseZ9GkynrRE8hzm
 RYkaXCOY8FjNXvTci4I8MFhKZtUK4D5d3JWMD3qSSPBWHdmIEOocgbf0-
X-Sonic-MF: <luangruo@HIDDEN>
X-Sonic-ID: 3cc06c86-8e89-47fe-a847-8c3487786ba1
Received: from sonic.gate.mail.ne1.yahoo.com by
 sonic305.consmr.mail.ne1.yahoo.com with HTTP; Mon, 18 Nov 2024 23:49:09 +0000
Received: by hermes--production-sg3-5b7954b588-2czcw (Yahoo Inc. Hermes SMTP
 Server) with ESMTPA ID e1b6994a9d0bab8ead690504911ef7e4; 
 Mon, 18 Nov 2024 23:49:04 +0000 (UTC)
From: Po Lu <luangruo@HIDDEN>
To: Cecilio Pardo <cpardo@HIDDEN>
Subject: Re: bug#74423: Low level key events
In-Reply-To: <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN> (Cecilio
 Pardo's message of "Mon, 18 Nov 2024 21:35:40 +0100")
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
 <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
Date: Tue, 19 Nov 2024 07:49:00 +0800
Message-ID: <87ttc4hzmb.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Mailer: WebService/1.1.22941
 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo
Content-Length: 5934
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74423
Cc: 74423 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Cecilio Pardo <cpardo@HIDDEN> writes:

> +   switch (keysym)
> +    {
> +    case GDK_KEY_Shift_L:
> +    case GDK_KEY_Shift_R:
> +      modifier = Qshift;
> +      break;
> +    case GDK_KEY_Control_L:
> +    case GDK_KEY_Control_R:
> +      modifier = Vx_ctrl_keysym;
> +      if (NILP (modifier))
> +	modifier = Qctrl;
> +      break;
> +    case GDK_KEY_Alt_L:
> +    case GDK_KEY_Alt_R:
> +      modifier = Vx_meta_keysym;
> +      if (NILP (modifier))
> +	modifier = Qalt;
> +      break;
> +    case GDK_KEY_Meta_L:
> +    case GDK_KEY_Meta_R:
> +      modifier = Vx_meta_keysym;
> +      if (NILP (modifier))
> +	modifier = Qmeta;
> +      break;
> +    case GDK_KEY_Hyper_L:
> +    case GDK_KEY_Hyper_R:
> +      modifier = Vx_hyper_keysym;
> +      if (NILP (modifier))
> +	modifier = Qhyper;
> +      break;
> +    case GDK_KEY_Super_L:
> +    case GDK_KEY_Super_R:
> +      modifier = Vx_super_keysym;
> +      if (NILP (modifier))
> +	modifier = Qsuper;
> +      break;
> +    default:
> +      modifier = Qnil;
> +    }

This is not the proper means of establishing the modifier bound to a key
symbol in GTK, but I cannot immediately tell you what the alternative is.

> +	  my_post_msg( &wmsg, hwnd, WM_EMACS_LOW_LEVEL_KEY, wParam, lParam );
> +	}

> +	  my_post_msg( &wmsg, hwnd, WM_EMACS_LOW_LEVEL_KEY, wParam, lParam );
> +	}

Stylistic issues.

> +static void
> +x_maybe_send_low_level_key_event (struct x_display_info *dpyinfo,
> +				  const XEvent *xev)
> +{
> +  XKeyEvent xkey;
> +  bool is_press;
> +  KeySym keysym;
> +  Lisp_Object key, modifier;
> +  struct input_event ie;
> +
> +  if (!Venable_low_level_key_events)
> +    return;
> +
> +  switch (xev->type)
> +    {
> +    case KeyPress:
> +      is_press = true;
> +      xkey = xev->xkey;
> +      break;
> +    case KeyRelease:
> +      is_press = false;
> +      xkey = xev->xkey;
> +      break;
> +#ifdef HAVE_XINPUT2
> +    case GenericEvent:
> +      XIDeviceEvent *xiev = xev->xcookie.data;
> +      switch (xev->xgeneric.evtype)
> +	{
> +	case XI_KeyPress:
> +	  is_press = true;
> +	  break;
> +	case XI_KeyRelease:
> +	  is_press = false;
> +	  break;
> +	default:
> +	  return;
> +	}
> +
> +      xkey.serial = xiev->serial;
> +      xkey.send_event = xiev->send_event;
> +      xkey.display = xiev->display;
> +      xkey.window = xiev->event;
> +      xkey.root = xiev->root;
> +      xkey.subwindow = xiev->child;
> +      xkey.time = xiev->time;
> +      xkey.x = xiev->event_x;
> +      xkey.y = xiev->event_y;
> +      xkey.x_root = xiev->root_x;
> +      xkey.y_root = xiev->root_y;
> +      xkey.state = xiev->mods.effective;
> +      xkey.keycode = xiev->detail;
> +      xkey.same_screen = 1;
> +      break;
> +#endif
> +    default:
> +      return;
> +    }
> +
> +  struct frame *f = x_any_window_to_frame (dpyinfo, xkey.window);
> +  if (!f)
> +    return;
> +
> +  XLookupString (&xkey, NULL, 0, &keysym, NULL);
> +
> +  switch (keysym)
> +    {
> +    case XK_Shift_L: key = Qlshift; break;
> +    case XK_Shift_R: key = Qrshift; break;
> +    case XK_Control_L: key = Qlctrl; break;
> +    case XK_Control_R: key = Qrctrl; break;
> +    case XK_Alt_L: key = Qlalt; break;
> +    case XK_Alt_R: key = Qralt; break;
> +    default:
> +      key = Qnil;
> +    }

This doesn't generate `ralt' events on my system, as that key produces
the keysym ISO_Level3_Shift/

> +   switch (keysym)
> +    {
> +    case XK_Shift_L:
> +    case XK_Shift_R:
> +      modifier = Qshift;
> +      break;
> +    case XK_Control_L:
> +    case XK_Control_R:
> +      modifier = Vx_ctrl_keysym;
> +      if (NILP (modifier))
> +	modifier = Qctrl;
> +      break;
> +    case XK_Alt_L:
> +    case XK_Alt_R:
> +      modifier = Vx_meta_keysym;
> +      if (NILP (modifier))
> +	modifier = Qalt;
> +      break;
> +    case XK_Meta_L:
> +    case XK_Meta_R:
> +      modifier = Vx_meta_keysym;
> +      if (NILP (modifier))
> +	modifier = Qmeta;
> +      break;
> +    case XK_Hyper_L:
> +    case XK_Hyper_R:
> +      modifier = Vx_hyper_keysym;
> +      if (NILP (modifier))
> +	modifier = Qhyper;
> +      break;
> +    case XK_Super_L:
> +    case XK_Super_R:
> +      modifier = Vx_super_keysym;
> +      if (NILP (modifier))
> +	modifier = Qsuper;
> +      break;
> +    default:
> +      modifier = Qnil;
> +    }

You are computing the modifier event to be generated incorrectly.  You
should search the modifier map (dpyinfo->modmap) for columns containing
received keysyms, and compare modifier bits derived from the rows where
they appear against meta_mod_mask, shift_lock_mask, alt_mod_mask,
super_mod_mask, and hyper_mod_mask in the display structure, or CtrlMask
and ShiftMask.

>      case KeyPress:
> +      x_maybe_send_low_level_key_event (dpyinfo, event);
>        x_display_set_last_user_time (dpyinfo, event->xkey.time,
>  				    event->xkey.send_event,
>  				    true);
> @@ -20715,6 +20853,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
>  #endif
>  
>      case KeyRelease:
> +      x_maybe_send_low_level_key_event (dpyinfo, event);
>  #ifdef HAVE_X_I18N
>        /* Don't dispatch this event since XtDispatchEvent calls
>           XFilterEvent, and two calls in a row may freeze the
> @@ -23970,6 +24109,8 @@ handle_one_xevent (struct x_display_info *dpyinfo,
>  	      struct xi_device_t *device, *source;
>  	      XKeyPressedEvent xkey;
>  
> +	      x_maybe_send_low_level_key_event (dpyinfo, event);
> +
>  	      coding = Qlatin_1;
>  
>  	      /* The code under this label is quite desultory.  There
> @@ -24586,6 +24727,8 @@ handle_one_xevent (struct x_display_info *dpyinfo,
>  #endif
>  
>  	  case XI_KeyRelease:
> +	    x_maybe_send_low_level_key_event (dpyinfo, event);

Would you rearrange the locations of calls to x_any_window_to_frame in
handle_one_xevent so that you need not redundantly call the same
function in x_maybe_send_low_level_key_event?

Thanks for your interest in Emacs.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 18 Nov 2024 20:35:56 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Nov 18 15:35:56 2024
Received: from localhost ([127.0.0.1]:39370 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tD8TS-0001Fn-Lk
	for submit <at> debbugs.gnu.org; Mon, 18 Nov 2024 15:35:56 -0500
Received: from lists.gnu.org ([209.51.188.17]:48072)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <cpardo@HIDDEN>) id 1tD8TP-0001Fe-96
 for submit <at> debbugs.gnu.org; Mon, 18 Nov 2024 15:35:52 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <cpardo@HIDDEN>)
 id 1tD8TP-0000IX-2a
 for bug-gnu-emacs@HIDDEN; Mon, 18 Nov 2024 15:35:51 -0500
Received: from mail.imayhem.com ([82.223.54.191]
 helo=zealous-pike.82-223-54-191.plesk.page)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <cpardo@HIDDEN>)
 id 1tD8TJ-0001EA-CS
 for bug-gnu-emacs@HIDDEN; Mon, 18 Nov 2024 15:35:50 -0500
Received: from [192.168.68.104] (111.red-88-21-7.staticip.rima-tde.net
 [88.21.7.111])
 by zealous-pike.82-223-54-191.plesk.page (Postfix) with ESMTPSA id 43ACD800CD
 for <bug-gnu-emacs@HIDDEN>; Mon, 18 Nov 2024 20:35:41 +0000 (UTC)
Authentication-Results: zealous-pike.82-223-54-191.plesk.page;
 spf=pass (sender IP is 88.21.7.111) smtp.mailfrom=cpardo@HIDDEN
 smtp.helo=[192.168.68.104]
Received-SPF: pass (zealous-pike.82-223-54-191.plesk.page: connection is
 authenticated)
Content-Type: multipart/mixed; boundary="------------NfVipp8PWcB7slQ6v5g6HUD0"
Message-ID: <d5c72818-e907-43f5-853a-89ec01264157@HIDDEN>
Date: Mon, 18 Nov 2024 21:35:40 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Low level key events
To: bug-gnu-emacs@HIDDEN
References: <fb50ec11-7aec-481e-8a3a-ecdcf22eb7c0@HIDDEN>
 <31bdc55d-8c13-4de0-9cef-bd6cc4fb033f@HIDDEN>
 <s1r8qtzsvbe.fsf@HIDDEN>
Content-Language: es-ES
From: Cecilio Pardo <cpardo@HIDDEN>
In-Reply-To: <s1r8qtzsvbe.fsf@HIDDEN>
Received-SPF: pass client-ip=82.223.54.191; envelope-from=cpardo@HIDDEN;
 helo=zealous-pike.82-223-54-191.plesk.page
X-Spam_score_int: -18
X-Spam_score: -1.9
X-Spam_bar: -
X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9,
 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.3 (-)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.3 (--)

This is a multi-part message in MIME format.
--------------NfVipp8PWcB7slQ6v5g6HUD0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Here is a still incomplete patch for this, renamed from "physical 
keyboard events", following up to
https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00085.html

It provides events for press/release of keys, independently of the 
normal keyboard events. These events are bound int the 
special-event-map. Some lisp is included to implement detection of 
multiple tapping on keys, and running commands or simulating modifiers.

Currently, only modifier keys are available, because other keys would 
send their own normal event. This could change when an use case for 
other keys appears.

To provide events for 'logical' modifiers Ctrl, Meta, etc., now there is 
a new event low-level-modifier, in addition to low-level-key. If you 
press Shift_L, two events will be generated, one for 'shift as 
low-level-modifier, and one for 'lshift as low-level-key. The lisp part 
handles those events separately.

I added a variable that enables/disables everything, 
enable-low-level-key-events.

This are some of Po Lu's notes on the previous patch:

> [...] Emacs must not depend on XKB for such a basic feature.

Fixed.

> Please find some means of generating such events by saving them into the
> keyboard event buffer defined in handle_ome_xevent.

As we may generate two events, that is not possible.

> x_filter_events is not the proper location for this call.  It is only
> invoked to filter an event through the active GTK or X input method
> context, and it is not invoked if Emacs is configured not to open input
> method contexts, or they are unavailable by happenstance.

Done. If XINPUT is enabled, the XI_KeyPress event used, over the gtk 
one. If not, the gtk event is used unless there is no input method. In 
this case KeyPress event is used.

The pgtk version is not updated.





--------------NfVipp8PWcB7slQ6v5g6HUD0
Content-Type: text/plain; charset=UTF-8;
 name="0001-Add-events-for-key-press-and-key-release-on-gui-syst.patch"
Content-Disposition: attachment;
 filename*0="0001-Add-events-for-key-press-and-key-release-on-gui-syst.pa";
 filename*1="tch"
Content-Transfer-Encoding: base64

RnJvbSBkMjQwM2Q5ZmExNGI0OTgyNjNhYmIyNDIzMjRjMjE0NDFhNDI0NmFhIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDZWNpbGlvIFBhcmRvIDxjcGFyZG9AaW1heWhlbS5j
b20+CkRhdGU6IE1vbiwgMjggT2N0IDIwMjQgMjM6NTc6MzUgKzAxMDAKU3ViamVjdDogW1BB
VENIXSBBZGQgZXZlbnRzIGZvciBrZXkgcHJlc3MgYW5kIGtleSByZWxlYXNlIG9uIGd1aSBz
eXN0ZW1zLgoKQW5kIGRldGVjdGlvbiBvZiBkb3VibGUvdHJpcGxlIHRhcHMgb24gbW9kaWZp
ZXIga2V5cy4KCiogbGlzcC9sb3ctbGV2ZWwta2V5LmVsIChsbGstdGFwLXRpbWVvdXQpOgoo
bGxrLXRhcC1jb3VudCk6CihsbGstdGFwLWtleXMpOgoobGxrLWJpbmRpbmdzKToKKGxsay1t
b2RpZmllci1iaW5kaW5ncyk6CihsbGstaW5pdCk6CihsbGstYmluZCk6CihsbGstbW9kaWZp
ZXItYmluZCk6CihsbGstZXZlbnRzKToKKGxsay1tb2RpZmllci1ldmVudHMpOgoobGxtLWhh
bmRsZSk6Ciogc3JjL2d0a3V0aWwuYyAoeGdfY3JlYXRlX2ZyYW1lX3dpZGdldHMpOgooeGdf
bWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50KToKKHhnX3dpZGdldF9rZXlfcHJlc3Nf
ZXZlbnRfY2IpOgooeGdfd2lkZ2V0X2tleV9yZWxlYXNlX2V2ZW50X2NiKToKKiBzcmMveHRl
cm0uYyAoeF9tYXliZV9zZW5kX3BoeXNpY2FsX2tleV9ldmVudCk6Cih4X2ZpbHRlcl9ldmVu
dCk6CihoYW5kbGVfb25lX3hldmVudCk6CihzeW1zX29mX3h0ZXJtKToKLS0tCiBsaXNwL2xv
dy1sZXZlbC1rZXkuZWwgfCAxNDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysKIHNyYy9ndGt1dGlsLmMgICAgICAgICB8IDEzMyArKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKwogc3JjL2tleWJvYXJkLmMgICAgICAgIHwgIDM4ICsr
KysrKysrKysrCiBzcmMvcGd0a3Rlcm0uYyAgICAgICAgfCAgMzcgKysrKysrKysrKysKIHNy
Yy90ZXJtaG9va3MuaCAgICAgICB8ICAgMiArCiBzcmMvdzMyZm5zLmMgICAgICAgICAgfCAg
MTEgKysrKwogc3JjL3czMnRlcm0uYyAgICAgICAgIHwgIDY5ICsrKysrKysrKysrKysrKysr
KysrCiBzcmMvdzMydGVybS5oICAgICAgICAgfCAgIDMgKy0KIHNyYy94dGVybS5jICAgICAg
ICAgICB8IDE0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK
IDkgZmlsZXMgY2hhbmdlZCwgNTc3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBsaXNwL2xvdy1sZXZlbC1rZXkuZWwKCmRpZmYgLS1naXQgYS9s
aXNwL2xvdy1sZXZlbC1rZXkuZWwgYi9saXNwL2xvdy1sZXZlbC1rZXkuZWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYzOWMwODJkYTE1Ci0tLSAvZGV2L251
bGwKKysrIGIvbGlzcC9sb3ctbGV2ZWwta2V5LmVsCkBAIC0wLDAgKzEsMTQxIEBACis7Ozsg
LSotIGxleGljYWwtYmluZGluZzogdCAtKi0KKyhyZXF1aXJlICdjbC1saWIpCisKKzs7IFVz
ZXIgb3B0aW9ucworKGRlZnZhciBsbGstdGFwLXRpbWVvdXQgMTAwMCkKKyhkZWZ2YXIgbGxr
LXRhcC1jb3VudCAyKQorKGRlZnZhciBsbGstdGFwLWtleXMKKyAgJyhsc2hpZnQgcnNoaWZ0
IGxjdHJsIHJjdHJsIGxhbHQgcmFsdCBzaGlmdCBjdHJsIGFsdCkpCisoZGVmdmFyIGxsay1i
aW5kaW5ncyBuaWwpCisoZGVmdmFyIGxsbS1iaW5kaW5ncyBuaWwpCisKKyhkZWZ1biBsbGst
aW5pdCAoKQorICAoaW50ZXJhY3RpdmUpCisgIChkZWZpbmUta2V5IHNwZWNpYWwtZXZlbnQt
bWFwIFtsb3ctbGV2ZWwta2V5XSAnbGxrLWhhbmRsZSkKKyAgKGRlZmluZS1rZXkgc3BlY2lh
bC1ldmVudC1tYXAgW2xvdy1sZXZlbC1tb2RpZmllcl0gJ2xsbS1oYW5kbGUpCisKKyAgKHNl
dHEgbGxrLWJpbmRpbmdzIG5pbCkKKyAgKHNldHEgbGxtLWJpbmRpbmdzIG5pbCkKKworICA7
OyAobGxtLWJpbmQgJ3RhcCAnc2hpZnQgJ2RlbGV0ZS1vdGhlci13aW5kb3dzKQorICA7OyAo
bGxrLWJpbmQgJ3RhcCAnbGN0cmwgJ2h5cGVyKQorICAoc2V0cSBlbmFibGUtbG93LWxldmVs
LWtleS1ldmVudHMgdCkpCisKKzs7IEZvciBleGFtcGxlOgorOzsgKGxsay1hZGQtYmluZGlu
ZyAndGFwICdsc2hpZnQgJ2RlbGV0ZS1vdGhlci13aW5kb3dzKQorOzsgQ2FuIGJpbmQgdG8g
YSBjb21tYW5kLCBhIGZ1bmN0aW9uIG9yIHRoZSBzeW1ib2wgJ2h5cGVyLgorKGRlZnVuIGxs
ay1iaW5kIChhY3Rpb24ga2V5IGZ1bmN0aW9uKQorICAocHVzaCAobGlzdCBhY3Rpb24ga2V5
IGZ1bmN0aW9uKSBsbGstYmluZGluZ3MpKQorCisoZGVmdW4gbGxtLWJpbmQgKGFjdGlvbiBr
ZXkgZnVuY3Rpb24pCisgIChwdXNoIChsaXN0IGFjdGlvbiBrZXkgZnVuY3Rpb24pIGxsbS1i
aW5kaW5ncykpCisKKzs7IFdlIHN0b3JlIHRoZSBsYXN0IGV2ZW50cyBoZXJlIHRvIHRlc3Qg
Zm9yIG11bHRpdGFwLgorKGRlZnZhciBsbGstZXZlbnRzIG5pbCkKKyhkZWZ2YXIgbGxtLWV2
ZW50cyBuaWwpCisKKzs7IElmIHBvc2l0aXZlLCByZXR1cm4ga2V5ICgnbHNoaWZ0LCBldGMp
IGVsc2UgcmV0dXJuIG5pbC4KKyhkZWZ1biBsbGstZGV0ZWN0LW4tdGFwIChuIHRpbWVvdXQp
CisgIDs7IFRoZSBwaHlzaWNhbC1rZXkgZXZlbnQgaXMgbGlrZSB0aGlzOgorICA7OyAocGh5
c2ljYWwta2V5IHQgbHNoaWZ0IDkwMTk2MjY1ICM8ZnJhbWU+KQorICA7OyBUaGUgc2Vjb25k
IGVsZW1lbnQgaXMgdCBmb3IgYSBrZXkgcHJlc3MsIG5pbCBmb3IgYSBrZXkgcmVsZWFzZQor
ICA7OyBUaGUgZm91cnRoIGVsZW1lbnQgaXMgdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzCisg
IDs7IFRoZSBmaWZ0aCBpcyB0aGUgZnJhbWUsIHdlIGRvbid0IHVzZSBpdCB5ZXQuCisKKyAg
KGxldCAoKGtleSAoY2wtdGhpcmQgbGFzdC1pbnB1dC1ldmVudCkpKQorICAgIChpZiAobm90
IChtZW1iZXIga2V5IGxsay10YXAta2V5cykpCisgICAgICAgIDs7IEtleSBub3QgaW4gdGFw
IGxpc3QsIGNsZWFyIGhpc3RvcnkKKyAgICAgICAgKHNldHEgbGxrLWV2ZW50cyBuaWwpCisg
ICAgICA7OyBDbGVhciBpdCBhbHNvIGlmIHRoZSBmaXJzdCBlbGVtZW50IGlzIGZyb20gYSBk
aWZmZXJlbnQga2V5CisgICAgICAoYW5kIGxsay1ldmVudHMKKyAgICAgICAgICAgKG5vdCAo
ZXF1YWwgKGNsLXRoaXJkIChjYXIgbGxrLWV2ZW50cykpIGtleSkpCisgICAgICAgICAgIChz
ZXRxIGxsay1ldmVudHMgbmlsKSkKKyAgICAgIChwdXNoIGxhc3QtaW5wdXQtZXZlbnQgbGxr
LWV2ZW50cykKKyAgICAgIDs7IE9ubHkgY2FyZSBhYm91dCBsYXN0IDJ4TiBldmVudHMKKyAg
ICAgIChudGFrZSAoKiAyIG4pIGxsay1ldmVudHMpCisgICAgICA7OyBJZiB3ZSBoYXZlOgor
ICAgICAgOzsgLSBFeGFjdGx5IDIgKiBuIGV2ZW50cy4KKyAgICAgIDs7IC0gZG93biwgdXAs
IGRvd24sIHVwLCAuLi4KKyAgICAgIDs7IC0gbm90IHR3byBtdWNoIHRpbWUgYmV0d2VlbiBm
aXJzdCBhbmQgbGFzdAorICAgICAgKGFuZCAoZXEgKCogMiBuKSAobGVuZ3RoIGxsay1ldmVu
dHMpKQorICAgICAgICAgICAoY2wtZXZlcnkgJ2VxCisgICAgICAgICAgICAgICAgICAgICAo
bnRha2UgKCogMiBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IG5pbCB0
IG5pbCB0IG5pbCB0IG5pbCB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmlsIHQgbmlsIHQgbmlsIHQgbmlsIHQpKQorICAgICAgICAgICAgICAgICAgICAgKG1hcGNh
ciAnY2wtc2Vjb25kIGxsay1ldmVudHMpKQorICAgICAgICAgICAoPCAoLSAoY2wtZm91cnRo
IChjbC1maXJzdCBsbGstZXZlbnRzKSkKKyAgICAgICAgICAgICAgICAgKGNsLWZvdXJ0aCAo
Y2FyIChsYXN0IGxsay1ldmVudHMpKSkpCisgICAgICAgICAgICAgIHRpbWVvdXQpCisgICAg
ICAgICAgIChwcm9nbgorICAgICAgICAgICAgIChzZXRxIGxsay1ldmVudHMgbmlsKQorICAg
ICAgICAgICAgIGtleSkpKSkpCisKKworOzsgdGhpcyBmdW5jdGlvbiBpcyBhIGNvcHkgb2Yg
bGxrLWRldGVjdC1uLXRhcCwgYnV0IGZvciBsbG0tZXZlbnRzCisoZGVmdW4gbGxtLWRldGVj
dC1uLXRhcCAobiB0aW1lb3V0KQorICAobGV0ICgoa2V5IChjbC10aGlyZCBsYXN0LWlucHV0
LWV2ZW50KSkpCisgICAgKGlmIChub3QgKG1lbWJlciBrZXkgbGxrLXRhcC1rZXlzKSkKKyAg
ICAgICAgKHNldHEgbGxtLWV2ZW50cyBuaWwpCisgICAgICAoYW5kIGxsbS1ldmVudHMKKyAg
ICAgICAgICAgKG5vdCAoZXF1YWwgKGNsLXRoaXJkIChjYXIgbGxtLWV2ZW50cykpIGtleSkp
CisgICAgICAgICAgIChzZXRxIGxsbS1ldmVudHMgbmlsKSkKKyAgICAgIChwdXNoIGxhc3Qt
aW5wdXQtZXZlbnQgbGxtLWV2ZW50cykKKyAgICAgIChudGFrZSAoKiAyIG4pIGxsbS1ldmVu
dHMpCisgICAgICAoYW5kIChlcSAoKiAyIG4pIChsZW5ndGggbGxtLWV2ZW50cykpCisgICAg
ICAgICAgIChjbC1ldmVyeSAnZXEKKyAgICAgICAgICAgICAgICAgICAgIChudGFrZSAoKiAy
IG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgbmlsIHQgbmlsIHQgbmls
IHQgbmlsIHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgdCBuaWwg
dCBuaWwgdCBuaWwgdCkpCisgICAgICAgICAgICAgICAgICAgICAobWFwY2FyICdjbC1zZWNv
bmQgbGxtLWV2ZW50cykpCisgICAgICAgICAgICg8ICgtIChjbC1mb3VydGggKGNsLWZpcnN0
IGxsbS1ldmVudHMpKQorICAgICAgICAgICAgICAgICAoY2wtZm91cnRoIChjYXIgKGxhc3Qg
bGxtLWV2ZW50cykpKSkKKyAgICAgICAgICAgICAgdGltZW91dCkKKyAgICAgICAgICAgKHBy
b2duCisgICAgICAgICAgICAgKHNldHEgbGxtLWV2ZW50cyBuaWwpCisgICAgICAgICAgICAg
a2V5KSkpKSkKKworKGRlZnVuIGxsay1oYW5kbGUgKCkKKyAgKGludGVyYWN0aXZlKQorCisg
IChsZXQgKCh0YXAta2V5IChsbGstZGV0ZWN0LW4tdGFwCisgICAgICAgICAgICAgICAgICBs
bGstdGFwLWNvdW50CisgICAgICAgICAgICAgICAgICBsbGstdGFwLXRpbWVvdXQpKSkKKyAg
ICAod2hlbiB0YXAta2V5CisgICAgICAobGV0ICgoZnVuYyAoY2wtdGhpcmQKKyAgICAgICAg
ICAgICAgICAgICAoc2VxLWZpbmQKKyAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoYikK
KyAgICAgICAgICAgICAgICAgICAgICAoYW5kIChlcSAoY2wtZmlyc3QgYikgJ3RhcCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChlcSAoY2wtc2Vjb25kIGIpIHRhcC1rZXkpKSkK
KyAgICAgICAgICAgICAgICAgICAgbGxrLWJpbmRpbmdzKSkpKQorICAgICAgICAoY29uZAor
ICAgICAgICAgKChjb21tYW5kcCBmdW5jKSAoY2FsbC1pbnRlcmFjdGl2ZWx5IGZ1bmMpKQor
ICAgICAgICAgKChmdW5jdGlvbnAgZnVuYykgKGZ1bmNhbGwgZnVuYykpCisgICAgICAgICAo
KGVxICdoeXBlciBmdW5jKQorICAgICAgICAgIChtZXNzYWdlICJILS4uLiIpCisgICAgICAg
ICAgKGxldCAoKHIgKHJlYWQtZXZlbnQpKSkKKyAgICAgICAgICAgIChzZXRxIHVucmVhZC1j
b21tYW5kLWV2ZW50cworICAgICAgICAgICAgICAgICAgKGxpc3QgKGV2ZW50LWFwcGx5LW1v
ZGlmaWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgciAnaHlwZXIgMjQgIkgtIikpKSkp
KSkpKSkKKworKGRlZnVuIGxsbS1oYW5kbGUoKQorICAoaW50ZXJhY3RpdmUpCisKKyAgKGxl
dCAoKHRhcC1rZXkgKGxsbS1kZXRlY3Qtbi10YXAKKyAgICAgICAgICAgICAgICAgIGxsay10
YXAtY291bnQKKyAgICAgICAgICAgICAgICAgIGxsay10YXAtdGltZW91dCkpKQorICAgICh3
aGVuIHRhcC1rZXkKKyAgICAgIChsZXQgKChmdW5jIChjbC10aGlyZAorICAgICAgICAgICAg
ICAgICAgIChzZXEtZmluZAorICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChiKQorICAg
ICAgICAgICAgICAgICAgICAgIChhbmQgKGVxIChjbC1maXJzdCBiKSAndGFwKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGVxIChjbC1zZWNvbmQgYikgdGFwLWtleSkpKQorICAg
ICAgICAgICAgICAgICAgICBsbG0tYmluZGluZ3MpKSkpCisgICAgICAgIChjb25kCisgICAg
ICAgICAoKGNvbW1hbmRwIGZ1bmMpIChjYWxsLWludGVyYWN0aXZlbHkgZnVuYykpCisgICAg
ICAgICAoKGZ1bmN0aW9ucCBmdW5jKSAoZnVuY2FsbCBmdW5jKSkKKyAgICAgICAgICgoZXEg
J2h5cGVyIGZ1bmMpCisgICAgICAgICAgKG1lc3NhZ2UgIkgtLi4uIikKKyAgICAgICAgICAo
bGV0ICgociAocmVhZC1ldmVudCkpKQorICAgICAgICAgICAgKHNldHEgdW5yZWFkLWNvbW1h
bmQtZXZlbnRzCisgICAgICAgICAgICAgICAgICAobGlzdCAoZXZlbnQtYXBwbHktbW9kaWZp
ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICByICdoeXBlciAyNCAiSC0iKSkpKSkpKSkp
KQpkaWZmIC0tZ2l0IGEvc3JjL2d0a3V0aWwuYyBiL3NyYy9ndGt1dGlsLmMKaW5kZXggZDU3
NjI3ZjE1MmYuLjZjYTRlMzEzOTI5IDEwMDY0NAotLS0gYS9zcmMvZ3RrdXRpbC5jCisrKyBi
L3NyYy9ndGt1dGlsLmMKQEAgLTk4LDYgKzk4LDcgQEAgR19ERUZJTkVfVFlQRSAoRW1hY3NN
ZW51QmFyLCBlbWFjc19tZW51X2JhciwgR1RLX1RZUEVfTUVOVV9CQVIpCiBzdGF0aWMgdm9p
ZCB4Z19pbV9jb250ZXh0X3ByZWVkaXRfY2hhbmdlZCAoR3RrSU1Db250ZXh0ICosIGdwb2lu
dGVyKTsKIHN0YXRpYyB2b2lkIHhnX2ltX2NvbnRleHRfcHJlZWRpdF9lbmQgKEd0a0lNQ29u
dGV4dCAqLCBncG9pbnRlcik7CiBzdGF0aWMgYm9vbCB4Z193aWRnZXRfa2V5X3ByZXNzX2V2
ZW50X2NiIChHdGtXaWRnZXQgKiwgR2RrRXZlbnQgKiwgZ3BvaW50ZXIpOworc3RhdGljIGJv
b2wgeGdfd2lkZ2V0X2tleV9yZWxlYXNlX2V2ZW50X2NiIChHdGtXaWRnZXQgKiwgR2RrRXZl
bnQgKiwgZ3BvaW50ZXIpOwogI2VuZGlmCiAKICNpZiBHVEtfQ0hFQ0tfVkVSU0lPTiAoMywg
MTAsIDApCkBAIC0xNzQ5LDYgKzE3NTAsMTIgQEAgeGdfY3JlYXRlX2ZyYW1lX3dpZGdldHMg
KHN0cnVjdCBmcmFtZSAqZikKICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdmaXhl
ZCksICJrZXktcHJlc3MtZXZlbnQiLAogCQkgICAgR19DQUxMQkFDSyAoeGdfd2lkZ2V0X2tl
eV9wcmVzc19ldmVudF9jYiksCiAJCSAgICBOVUxMKTsKKworICBnX3NpZ25hbF9jb25uZWN0
IChHX09CSkVDVCAod2ZpeGVkKSwgImtleS1yZWxlYXNlLWV2ZW50IiwKKwkJICAgIEdfQ0FM
TEJBQ0sgKHhnX3dpZGdldF9rZXlfcmVsZWFzZV9ldmVudF9jYiksCisJCSAgICBOVUxMKTsK
KworCiAjZW5kaWYKIAogICB7CkBAIC02Mzc2LDYgKzYzODMsMTA1IEBAIHhnX2ltX2NvbnRl
eHRfcHJlZWRpdF9lbmQgKEd0a0lNQ29udGV4dCAqaW1jLCBncG9pbnRlciB1c2VyX2RhdGEp
CiAgIGtiZF9idWZmZXJfc3RvcmVfZXZlbnQgKCZpbmV2KTsKIH0KIAorc3RhdGljIHZvaWQK
K3hnX21heWJlX3NlbmRfbG93X2xldmVsX2tleV9ldmVudCAoc3RydWN0IGZyYW1lICpmLAor
CQkJCSAgIEdka0V2ZW50ICp4ZXYpCit7CisgIEdka0V2ZW50S2V5IHhrZXkgPSB4ZXYtPmtl
eTsKKyAgYm9vbCBpc19wcmVzczsKKyAgaW50IGtleXN5bTsKKyAgTGlzcF9PYmplY3Qga2V5
LCBtb2RpZmllcjsKKyAgdW5pb24gYnVmZmVyZWRfaW5wdXRfZXZlbnQgaW5ldjsKKworICBp
ZiAoIVZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMpCisgICAgcmV0dXJuOworICBzd2l0
Y2ggKHhldi0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBHREtfS0VZX1BSRVNTOgorICAgICAg
aXNfcHJlc3MgPSB0cnVlOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfS0VZX1JFTEVB
U0U6CisgICAgICBpc19wcmVzcyA9IGZhbHNlOworICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAga2V5c3ltID0geGtleS5rZXl2YWw7CisK
KyAgc3dpdGNoIChrZXlzeW0pCisgICAgeworICAgIGNhc2UgR0RLX0tFWV9TaGlmdF9MOiBr
ZXkgPSBRbHNoaWZ0OyBicmVhazsKKyAgICBjYXNlIEdES19LRVlfU2hpZnRfUjoga2V5ID0g
UXJzaGlmdDsgYnJlYWs7CisgICAgY2FzZSBHREtfS0VZX0NvbnRyb2xfTDoga2V5ID0gUWxj
dHJsOyBicmVhazsKKyAgICBjYXNlIEdES19LRVlfQ29udHJvbF9SOiBrZXkgPSBRcmN0cmw7
IGJyZWFrOworICAgIGNhc2UgR0RLX0tFWV9BbHRfTDoga2V5ID0gUWxhbHQ7IGJyZWFrOwor
ICAgIGNhc2UgR0RLX0tFWV9BbHRfUjoga2V5ID0gUXJhbHQ7IGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICBrZXkgPSBRbmlsOworICAgIH0KKworICAgc3dpdGNoIChrZXlzeW0pCisg
ICAgeworICAgIGNhc2UgR0RLX0tFWV9TaGlmdF9MOgorICAgIGNhc2UgR0RLX0tFWV9TaGlm
dF9SOgorICAgICAgbW9kaWZpZXIgPSBRc2hpZnQ7CisgICAgICBicmVhazsKKyAgICBjYXNl
IEdES19LRVlfQ29udHJvbF9MOgorICAgIGNhc2UgR0RLX0tFWV9Db250cm9sX1I6CisgICAg
ICBtb2RpZmllciA9IFZ4X2N0cmxfa2V5c3ltOworICAgICAgaWYgKE5JTFAgKG1vZGlmaWVy
KSkKKwltb2RpZmllciA9IFFjdHJsOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfS0VZ
X0FsdF9MOgorICAgIGNhc2UgR0RLX0tFWV9BbHRfUjoKKyAgICAgIG1vZGlmaWVyID0gVnhf
bWV0YV9rZXlzeW07CisgICAgICBpZiAoTklMUCAobW9kaWZpZXIpKQorCW1vZGlmaWVyID0g
UWFsdDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLX0tFWV9NZXRhX0w6CisgICAgY2Fz
ZSBHREtfS0VZX01ldGFfUjoKKyAgICAgIG1vZGlmaWVyID0gVnhfbWV0YV9rZXlzeW07Cisg
ICAgICBpZiAoTklMUCAobW9kaWZpZXIpKQorCW1vZGlmaWVyID0gUW1ldGE7CisgICAgICBi
cmVhazsKKyAgICBjYXNlIEdES19LRVlfSHlwZXJfTDoKKyAgICBjYXNlIEdES19LRVlfSHlw
ZXJfUjoKKyAgICAgIG1vZGlmaWVyID0gVnhfaHlwZXJfa2V5c3ltOworICAgICAgaWYgKE5J
TFAgKG1vZGlmaWVyKSkKKwltb2RpZmllciA9IFFoeXBlcjsKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgR0RLX0tFWV9TdXBlcl9MOgorICAgIGNhc2UgR0RLX0tFWV9TdXBlcl9SOgorICAg
ICAgbW9kaWZpZXIgPSBWeF9zdXBlcl9rZXlzeW07CisgICAgICBpZiAoTklMUCAobW9kaWZp
ZXIpKQorCW1vZGlmaWVyID0gUXN1cGVyOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgIG1vZGlmaWVyID0gUW5pbDsKKyAgICB9CisKKyAgaWYgKCFOSUxQIChrZXkpKQor
ICAgIHsKKyAgICAgIEVWRU5UX0lOSVQgKGluZXYuaWUpOworICAgICAgWFNFVEZSQU1FIChp
bmV2LmllLmZyYW1lX29yX3dpbmRvdywgZik7CisgICAgICBpbmV2LmllLmtpbmQgPSBMT1df
TEVWRUxfS0VZX0VWRU5UOworICAgICAgaW5ldi5pZS50aW1lc3RhbXAgPSB4a2V5LnRpbWU7
CisgICAgICBpbmV2LmllLmFyZyA9IGxpc3QyIChpc19wcmVzcyA/IFF0IDogUW5pbCwga2V5
KTsKKyAgICAgIGtiZF9idWZmZXJfc3RvcmVfYnVmZmVyZWRfZXZlbnQgKCZpbmV2LCAmeGdf
cGVuZGluZ19xdWl0X2V2ZW50KTsKKyAgICB9CisKKyAgaWYgKCFOSUxQIChtb2RpZmllcikp
CisgICAgeworICAgICAgRVZFTlRfSU5JVCAoaW5ldi5pZSk7CisgICAgICBYU0VURlJBTUUg
KGluZXYuaWUuZnJhbWVfb3Jfd2luZG93LCBmKTsKKyAgICAgIGluZXYuaWUua2luZCA9IExP
V19MRVZFTF9NT0RJRklFUl9LRVlfRVZFTlQ7CisgICAgICBpbmV2LmllLnRpbWVzdGFtcCA9
IHhrZXkudGltZTsKKyAgICAgIGluZXYuaWUuYXJnID0gbGlzdDIgKGlzX3ByZXNzID8gUXQg
OiBRbmlsLCBtb2RpZmllcik7CisgICAgICBrYmRfYnVmZmVyX3N0b3JlX2J1ZmZlcmVkX2V2
ZW50ICgmaW5ldiwgJnhnX3BlbmRpbmdfcXVpdF9ldmVudCk7CisgICAgfQorfQorCiBzdGF0
aWMgYm9vbAogeGdfd2lkZ2V0X2tleV9wcmVzc19ldmVudF9jYiAoR3RrV2lkZ2V0ICp3aWRn
ZXQsIEdka0V2ZW50ICpldmVudCwKIAkJCSAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKQEAg
LTY0MDQsNiArNjUxMCwxMCBAQCB4Z193aWRnZXRfa2V5X3ByZXNzX2V2ZW50X2NiIChHdGtX
aWRnZXQgKndpZGdldCwgR2RrRXZlbnQgKmV2ZW50LAogICBpZiAoIWYpCiAgICAgcmV0dXJu
IHRydWU7CiAKKyNpZm5kZWYgSEFWRV9YSU5QVVQyCisgICAgeGdfbWF5YmVfc2VuZF9sb3df
bGV2ZWxfa2V5X2V2ZW50IChmLCBldmVudCk7CisjZW5kaWYKKwogICBpZiAocG9wdXBfYWN0
aXZhdGVkICgpKQogICAgIHJldHVybiB0cnVlOwogCkBAIC02NTU3LDYgKzY2NjcsMjkgQEAg
eGdfd2lkZ2V0X2tleV9wcmVzc19ldmVudF9jYiAoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2
ZW50ICpldmVudCwKICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sCit4Z193aWRn
ZXRfa2V5X3JlbGVhc2VfZXZlbnRfY2IgKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCAq
ZXZlbnQsCisJCQkJZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworI2lmbmRlZiBIQVZFX1hJTlBV
VDIKKyAgTGlzcF9PYmplY3QgdGFpbCwgdGVtOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBOVUxM
OworCisgIEZPUl9FQUNIX0ZSQU1FICh0YWlsLCB0ZW0pCisgICAgeworICAgICAgaWYgKEZS
QU1FX1hfUCAoWEZSQU1FICh0ZW0pKQorCSAgJiYgKEZSQU1FX0dUS19XSURHRVQgKFhGUkFN
RSAodGVtKSkgPT0gd2lkZ2V0KSkKKwl7CisJICBmID0gWEZSQU1FICh0ZW0pOworCSAgYnJl
YWs7CisJfQorICAgIH0KKyAgaWYgKGYpCisgICAgeGdfbWF5YmVfc2VuZF9sb3dfbGV2ZWxf
a2V5X2V2ZW50IChmLCBldmVudCk7CisjZW5kaWYKKyAgcmV0dXJuIHRydWU7Cit9CisKIGJv
b2wKIHhnX2ZpbHRlcl9rZXkgKHN0cnVjdCBmcmFtZSAqZnJhbWUsIFhFdmVudCAqeGtleSkK
IHsKZGlmZiAtLWdpdCBhL3NyYy9rZXlib2FyZC5jIGIvc3JjL2tleWJvYXJkLmMKaW5kZXgg
NmQyOGRjYTlhZWIuLjUzMmExZDVkYmZlIDEwMDY0NAotLS0gYS9zcmMva2V5Ym9hcmQuYwor
KysgYi9zcmMva2V5Ym9hcmQuYwpAQCAtNDI3NCw2ICs0Mjc0LDggQEAga2JkX2J1ZmZlcl9n
ZXRfZXZlbnQgKEtCT0FSRCAqKmticCwKICAgICAgIGNhc2UgQ09ORklHX0NIQU5HRURfRVZF
TlQ6CiAgICAgICBjYXNlIEZPQ1VTX09VVF9FVkVOVDoKICAgICAgIGNhc2UgU0VMRUNUX1dJ
TkRPV19FVkVOVDoKKyAgICAgIGNhc2UgTE9XX0xFVkVMX0tFWV9FVkVOVDoKKyAgICAgIGNh
c2UgTE9XX0xFVkVMX01PRElGSUVSX0tFWV9FVkVOVDoKICAgICAgICAgewogICAgICAgICAg
IG9iaiA9IG1ha2VfbGlzcHlfZXZlbnQgKCZldmVudC0+aWUpOwogICAgICAgICAgIGtiZF9m
ZXRjaF9wdHIgPSBuZXh0X2tiZF9ldmVudCAoZXZlbnQpOwpAQCAtNzExOCw2ICs3MTIwLDIy
IEBAIG1ha2VfbGlzcHlfZXZlbnQgKHN0cnVjdCBpbnB1dF9ldmVudCAqZXZlbnQpCiAgICAg
Y2FzZSBQUkVFRElUX1RFWFRfRVZFTlQ6CiAgICAgICByZXR1cm4gbGlzdDIgKFFwcmVlZGl0
X3RleHQsIGV2ZW50LT5hcmcpOwogCisgICAgY2FzZSBMT1dfTEVWRUxfS0VZX0VWRU5UOgor
ICAgICAgcmV0dXJuIGxpc3RuICg1LAorCQkgICAgUWxvd19sZXZlbF9rZXksCisJCSAgICBY
Q0FSIChldmVudC0+YXJnKSwgLyogUHJlc3Mgb3IgcmVsZWFzZS4gICovCisJCSAgICBYQ0FS
IChYQ0RSIChldmVudC0+YXJnKSksIC8qIFRoZSBrZXkgc3ltYm9sLiAgKi8KKwkJICAgIG1h
a2VfZml4bnVtIChldmVudC0+dGltZXN0YW1wKSwKKwkJICAgIGV2ZW50LT5mcmFtZV9vcl93
aW5kb3cpOworCisgICAgY2FzZSBMT1dfTEVWRUxfTU9ESUZJRVJfS0VZX0VWRU5UOgorICAg
ICAgcmV0dXJuIGxpc3RuICg1LAorCQkgICAgUWxvd19sZXZlbF9tb2RpZmllciwKKwkJICAg
IFhDQVIgKGV2ZW50LT5hcmcpLCAvKiBQcmVzcyBvciByZWxlYXNlLiAgKi8KKwkJICAgIFhD
QVIgKFhDRFIgKGV2ZW50LT5hcmcpKSwgLyogVGhlIGtleSBzeW1ib2wuICAqLworCQkgICAg
bWFrZV9maXhudW0gKGV2ZW50LT50aW1lc3RhbXApLAorCQkgICAgZXZlbnQtPmZyYW1lX29y
X3dpbmRvdyk7CisKICAgICAgIC8qIFRoZSAna2luZCcgZmllbGQgb2YgdGhlIGV2ZW50IGlz
IHNvbWV0aGluZyB3ZSBkb24ndCByZWNvZ25pemUuICAqLwogICAgIGRlZmF1bHQ6CiAgICAg
ICBlbWFjc19hYm9ydCAoKTsKQEAgLTEyOTMxLDYgKzEyOTQ5LDIwIEBAIHN5bXNfb2Zfa2V5
Ym9hcmQgKHZvaWQpCiAgIERFRlNZTSAoUWZpbGVfbm90aWZ5LCAiZmlsZS1ub3RpZnkiKTsK
ICNlbmRpZiAvKiBVU0VfRklMRV9OT1RJRlkgKi8KIAorICBERUZWQVJfTElTUCAoImVuYWJs
ZS1sb3ctbGV2ZWwta2V5LWV2ZW50cyIsIFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMs
CisJICAgICAgIGRvYzogLyogRW5hYmxlZCB0aGUgcmVjZXBjaW9uIG9mIGxvdyBsZXZlbCBr
ZXkgZXZlbnRzLgorVGhpcyBpbmNsdWRlcyAnbG93LWxldmVsLWtleScgYW5kICdsb3ctbGV2
ZWwtbW9kaWZpZXInIGV2ZW50cy4gICovKTsKKyAgVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2
ZW50cyA9IGZhbHNlOworCisgIERFRlNZTSAoUWxvd19sZXZlbF9rZXksICJsb3ctbGV2ZWwt
a2V5Iik7CisgIERFRlNZTSAoUWxvd19sZXZlbF9tb2RpZmllciwgImxvdy1sZXZlbC1tb2Rp
ZmllciIpOworICBERUZTWU0gKFFsc2hpZnQsICJsc2hpZnQiKTsKKyAgREVGU1lNIChRcnNo
aWZ0LCAicnNoaWZ0Iik7CisgIERFRlNZTSAoUWxjdHJsLCAibGN0cmwiKTsKKyAgREVGU1lN
IChRcmN0cmwsICJyY3RybCIpOworICBERUZTWU0gKFFsYWx0LCAibGFsdCIpOworICBERUZT
WU0gKFFyYWx0LCAicmFsdCIpOworCiAgIERFRlNZTSAoUXRvdWNoX2VuZCwgInRvdWNoLWVu
ZCIpOwogCiAgIC8qIE1lbnUgYW5kIHRvb2wgYmFyIGl0ZW0gcGFydHMuICAqLwpAQCAtMTQw
MTgsNiArMTQwNTAsMTIgQEAga2V5c19vZl9rZXlib2FyZCAodm9pZCkKIAkJCSAgICAiaGFu
ZGxlLWZvY3VzLW91dCIpOwogICBpbml0aWFsX2RlZmluZV9saXNweV9rZXkgKFZzcGVjaWFs
X2V2ZW50X21hcCwgIm1vdmUtZnJhbWUiLAogCQkJICAgICJoYW5kbGUtbW92ZS1mcmFtZSIp
OworICBpbml0aWFsX2RlZmluZV9saXNweV9rZXkgKFZzcGVjaWFsX2V2ZW50X21hcCwgImxv
dy1sZXZlbC1rZXkiLAorCQkJICAgICJpZ25vcmUiKTsKKyAgaW5pdGlhbF9kZWZpbmVfbGlz
cHlfa2V5IChWc3BlY2lhbF9ldmVudF9tYXAsICJsb3ctbGV2ZWwtbW9kaWZpZXIiLAorCQkJ
ICAgICJpZ25vcmUiKTsKKworCiB9CiAKIC8qIE1hcmsgdGhlIHBvaW50ZXJzIGluIHRoZSBr
Ym9hcmQgb2JqZWN0cy4KZGlmZiAtLWdpdCBhL3NyYy9wZ3RrdGVybS5jIGIvc3JjL3BndGt0
ZXJtLmMKaW5kZXggMDc5OTQ1MTI2ZTAuLjcwOTFlOWVmNGMzIDEwMDY0NAotLS0gYS9zcmMv
cGd0a3Rlcm0uYworKysgYi9zcmMvcGd0a3Rlcm0uYwpAQCAtNTIwMSw2ICs1MjAxLDM5IEBA
IHBndGtfZW5xdWV1ZV9wcmVlZGl0IChzdHJ1Y3QgZnJhbWUgKmYsIExpc3BfT2JqZWN0IHBy
ZWVkaXQpCiAgIGV2cV9lbnF1ZXVlICgmaW5ldik7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ3Rr
X21heWJlX3NlbmRfbG93X2xldmVsX2tleV9ldmVudCAoR2RrRXZlbnQgKmV2ZW50KQorewor
ICBpZiAoIVZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMpCisgICAgcmV0dXJuOworCisg
IExpc3BfT2JqZWN0IGtleTsKKyAgc3dpdGNoIChldmVudC0+a2V5LmtleXZhbCkKKyAgICB7
CisgICAgY2FzZSBHREtfS0VZX1NoaWZ0X0w6IGtleSA9IFFsc2hpZnQ7IGJyZWFrOworICAg
IGNhc2UgR0RLX0tFWV9TaGlmdF9SOiBrZXkgPSBRcnNoaWZ0OyBicmVhazsKKyAgICBjYXNl
IEdES19LRVlfQ29udHJvbF9MOiBrZXkgPSBRbGN0cmw7IGJyZWFrOworICAgIGNhc2UgR0RL
X0tFWV9Db250cm9sX1I6IGtleSA9IFFyY3RybDsgYnJlYWs7CisgICAgY2FzZSBHREtfS0VZ
X0FsdF9MOiBrZXkgPSBRbGFsdDsgYnJlYWs7CisgICAgY2FzZSBHREtfS0VZX0FsdF9SOiBr
ZXkgPSBRcmFsdDsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybjsKKyAgICB9
CisgIGJvb2wga2V5cHJlc3MgPSBldmVudC0+a2V5LnR5cGUgPT0gR0RLX0tFWV9QUkVTUzsK
KyAgc3RydWN0IGZyYW1lICpmID0gcGd0a19hbnlfd2luZG93X3RvX2ZyYW1lIChldmVudC0+
a2V5LndpbmRvdyk7CisgIGlmICghZikKKyAgICByZXR1cm47CisKKyAgdW5pb24gYnVmZmVy
ZWRfaW5wdXRfZXZlbnQgaW5ldjsKKworICBFVkVOVF9JTklUIChpbmV2LmllKTsKKyAgWFNF
VEZSQU1FIChpbmV2LmllLmZyYW1lX29yX3dpbmRvdywgZik7CisgIGluZXYuaWUua2luZCA9
IExPV19MRVZFTF9LRVlfRVZFTlQ7CisgIGluZXYuaWUudGltZXN0YW1wID0gZXZlbnQtPmtl
eS50aW1lOworICBpbmV2LmllLmFyZyA9IGxpc3QyIChrZXlwcmVzcyA/IFF0IDogUW5pbCwg
a2V5KTsKKyAgZXZxX2VucXVldWUgKCZpbmV2KTsKK30KKwogc3RhdGljIGdib29sZWFuCiBr
ZXlfcHJlc3NfZXZlbnQgKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCAqZXZlbnQsIGdw
b2ludGVyICp1c2VyX2RhdGEpCiB7CkBAIC01MjEwLDYgKzUyNDMsOCBAQCBrZXlfcHJlc3Nf
ZXZlbnQgKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCAqZXZlbnQsIGdwb2ludGVyICp1
c2VyX2RhdGEpCiAgIHN0cnVjdCBmcmFtZSAqZjsKICAgc3RydWN0IHBndGtfZGlzcGxheV9p
bmZvICpkcHlpbmZvOwogCisgIHBndGtfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50
KGV2ZW50KTsKKwogICBmID0gcGd0a19hbnlfd2luZG93X3RvX2ZyYW1lIChndGtfd2lkZ2V0
X2dldF93aW5kb3cgKHdpZGdldCkpOwogICBFVkVOVF9JTklUIChpbmV2LmllKTsKICAgaGxp
bmZvID0gTU9VU0VfSExfSU5GTyAoZik7CkBAIC01NDU0LDYgKzU0ODksOCBAQCBrZXlfcmVs
ZWFzZV9ldmVudCAoR3RrV2lkZ2V0ICp3aWRnZXQsCiAgIEdka0Rpc3BsYXkgKmRpc3BsYXk7
CiAgIHN0cnVjdCBwZ3RrX2Rpc3BsYXlfaW5mbyAqZHB5aW5mbzsKIAorICBwZ3RrX21heWJl
X3NlbmRfbG93X2xldmVsX2tleV9ldmVudChldmVudCk7CisKICAgZGlzcGxheSA9IGd0a193
aWRnZXRfZ2V0X2Rpc3BsYXkgKHdpZGdldCk7CiAgIGRweWluZm8gPSBwZ3RrX2Rpc3BsYXlf
aW5mb19mb3JfZGlzcGxheSAoZGlzcGxheSk7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXJtaG9v
a3MuaCBiL3NyYy90ZXJtaG9va3MuaAppbmRleCBkNmE5MzAwYmFjOS4uMDA2Yjc0ODA5YTMg
MTAwNjQ0Ci0tLSBhL3NyYy90ZXJtaG9va3MuaAorKysgYi9zcmMvdGVybWhvb2tzLmgKQEAg
LTM0Nyw2ICszNDcsOCBAQCAjZGVmaW5lIEVNQUNTX1RFUk1IT09LU19ICiAgIC8qIEluIGEg
Tk9USUZJQ0FUSU9OX0VWRU5ULCAuYXJnIGlzIGEgbGFtYmRhIHRvIGV2YWx1YXRlLiAgKi8K
ICAgLCBOT1RJRklDQVRJT05fRVZFTlQKICNlbmRpZiAvKiBIQVZFX0FORFJPSUQgKi8KKyAg
LCBMT1dfTEVWRUxfS0VZX0VWRU5UCisgICwgTE9XX0xFVkVMX01PRElGSUVSX0tFWV9FVkVO
VAogfTsKIAogLyogQml0IHdpZHRoIG9mIGFuIGVudW0gZXZlbnRfa2luZCB0YWcgYXQgdGhl
IHN0YXJ0IG9mIHN0cnVjdHMgYW5kIHVuaW9ucy4gICovCmRpZmYgLS1naXQgYS9zcmMvdzMy
Zm5zLmMgYi9zcmMvdzMyZm5zLmMKaW5kZXggZTI0NTViOTI3MWUuLmYxODUwYTVmMmYzIDEw
MDY0NAotLS0gYS9zcmMvdzMyZm5zLmMKKysrIGIvc3JjL3czMmZucy5jCkBAIC00NjY5LDYg
KzQ2NjksMTEgQEAgdzMyX3duZF9wcm9jIChIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAgIGNhc2UgV01fS0VZVVA6CiAgICAgY2FzZSBX
TV9TWVNLRVlVUDoKICAgICAgIHJlY29yZF9rZXl1cCAod1BhcmFtLCBsUGFyYW0pOworICAg
ICAgaWYgKFZlbmFibGVfbG93X2xldmVsX2tleV9ldmVudHMpCisJeworCSAgc2lnbmFsX3Vz
ZXJfaW5wdXQgKCk7CisJICBteV9wb3N0X21zZyggJndtc2csIGh3bmQsIFdNX0VNQUNTX0xP
V19MRVZFTF9LRVksIHdQYXJhbSwgbFBhcmFtICk7CisJfQogICAgICAgZ290byBkZmx0Owog
CiAgICAgY2FzZSBXTV9LRVlET1dOOgpAQCAtNDY5NSw2ICs0NzAwLDEyIEBAIHczMl93bmRf
cHJvYyAoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJh
bSkKICAgICAgIGlmICh3MzJfdXNlX2ZhbGxiYWNrX3dtX2NoYXJzX21ldGhvZCkKIAl3UGFy
YW0gPSBtYXBfa2V5cGFkX2tleXMgKHdQYXJhbSwgKGxQYXJhbSAmIDB4MTAwMDAwMEwpICE9
IDApOwogCisgICAgICBpZiAoVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cykKKwl7CisJ
ICBzaWduYWxfdXNlcl9pbnB1dCAoKTsKKwkgIG15X3Bvc3RfbXNnKCAmd21zZywgaHduZCwg
V01fRU1BQ1NfTE9XX0xFVkVMX0tFWSwgd1BhcmFtLCBsUGFyYW0gKTsKKwl9CisKICAgICAg
IHdpbmRvd3NfdHJhbnNsYXRlID0gMDsKIAogICAgICAgc3dpdGNoICh3UGFyYW0pCmRpZmYg
LS1naXQgYS9zcmMvdzMydGVybS5jIGIvc3JjL3czMnRlcm0uYwppbmRleCBlMThmMzlkZDJh
OC4uOWZhZTk3MDFkYWYgMTAwNjQ0Ci0tLSBhL3NyYy93MzJ0ZXJtLmMKKysrIGIvc3JjL3cz
MnRlcm0uYwpAQCAtNTI3MCw2ICs1MjcwLDc1IEBAIHczMl9yZWFkX3NvY2tldCAoc3RydWN0
IHRlcm1pbmFsICp0ZXJtaW5hbCwKIAkgICAgfQogCSAgYnJlYWs7CiAKKwljYXNlIFdNX0VN
QUNTX0xPV19MRVZFTF9LRVk6CisJICBXT1JEIGtleV9mbGFncyA9IEhJV09SRCAobXNnLm1z
Zy5sUGFyYW0pOworCSAgQk9PTCBpc193bV9rZXl1cCA9IGtleV9mbGFncyAmIEtGX1VQOwor
CisJICBpZiAoaXNfd21fa2V5dXAgfHwgKGtleV9mbGFncyAmIEtGX1JFUEVBVCkgPT0gMCkg
LyogV01fS0VZRE9XTiwgbm90IHJlcGVhdGluZy4gICovCisJICAgIHsKKwkgICAgICBXT1JE
IHNjYW5fY29kZSA9IExPQllURSAoa2V5X2ZsYWdzKTsKKwkgICAgICBpZiAoa2V5X2ZsYWdz
ICYgS0ZfRVhURU5ERUQpCisJCXNjYW5fY29kZSA9IE1BS0VXT1JEIChzY2FuX2NvZGUsIDB4
RTApOworCisJICAgICAgVUlOVCB0cmFuc2xhdGVkID0gTWFwVmlydHVhbEtleSAoc2Nhbl9j
b2RlLCBNQVBWS19WU0NfVE9fVktfRVgpOworCSAgICAgIFdPUkQgdmsgPSBMT1dPUkQgKG1z
Zy5tc2cud1BhcmFtKTsKKwkgICAgICBpZiAodHJhbnNsYXRlZCkKKwkJdmsgPSBMT1dPUkQg
KHRyYW5zbGF0ZWQpOworCisJICAgICAgTGlzcF9PYmplY3Qga2V5ID0gUW5pbDsKKwkgICAg
ICBMaXNwX09iamVjdCBtb2RpZmllciA9IFFuaWw7CisKKwkgICAgICBzd2l0Y2ggKHZrKQor
CQl7CisJCWNhc2UgVktfTFNISUZUOiBrZXkgPSBRbHNoaWZ0OyBicmVhazsKKwkJY2FzZSBW
S19SU0hJRlQ6IGtleSA9IFFyc2hpZnQ7IGJyZWFrOworCQljYXNlIFZLX0xDT05UUk9MOiBr
ZXkgPSBRbGN0cmw7IGJyZWFrOworCQljYXNlIFZLX1JDT05UUk9MOiBrZXkgPSBRcmN0cmw7
IGJyZWFrOworCQljYXNlIFZLX0xNRU5VOiBrZXkgPSBRbGFsdDsgYnJlYWs7CisJCWNhc2Ug
VktfUk1FTlU6IGtleSA9IFFyYWx0OyBicmVhazsKKwkJfQorCisJICAgICAgc3dpdGNoICh2
aykKKwkJeworCQljYXNlIFZLX0xTSElGVDoKKwkJY2FzZSBWS19SU0hJRlQ6CisJCSAgbW9k
aWZpZXIgPSBRc2hpZnQ7CisJCSAgYnJlYWs7CisJCWNhc2UgVktfTENPTlRST0w6CisJCWNh
c2UgVktfUkNPTlRST0w6CisJCSAgbW9kaWZpZXIgPSBRY3RybDsKKwkJICBicmVhazsKKwkJ
Y2FzZSBWS19MTUVOVToKKwkJY2FzZSBWS19STUVOVToKKwkJICBtb2RpZmllciA9IFFtZXRh
OworCQkgIGJyZWFrOworCQl9CisKKwkgICAgICBpZiAoIU5JTFAgKGtleSkpCisJCXsKKwkJ
ICBmID0gdzMyX3dpbmRvd190b19mcmFtZSAoZHB5aW5mbywgbXNnLm1zZy5od25kKTsKKwkJ
ICBpbmV2LmtpbmQgPSBMT1dfTEVWRUxfS0VZX0VWRU5UOworCQkgIFhTRVRGUkFNRSAoaW5l
di5mcmFtZV9vcl93aW5kb3csIGYpOworCQkgIGluZXYudGltZXN0YW1wID0gbXNnLm1zZy50
aW1lOworCQkgIGluZXYuYXJnID0gbGlzdDIgKGlzX3dtX2tleXVwID8gUW5pbCA6IFF0LCBr
ZXkpOworCQkgIGtiZF9idWZmZXJfc3RvcmVfZXZlbnRfaG9sZCAoJmluZXYsIGhvbGRfcXVp
dCk7CisKKwkJfQorCisJICAgICAgaWYgKCFOSUxQIChtb2RpZmllcikpCisJCXsKKwkJICBm
ID0gdzMyX3dpbmRvd190b19mcmFtZSAoZHB5aW5mbywgbXNnLm1zZy5od25kKTsKKwkJICBp
bmV2LmtpbmQgPSBMT1dfTEVWRUxfTU9ESUZJRVJfS0VZX0VWRU5UOworCQkgIFhTRVRGUkFN
RSAoaW5ldi5mcmFtZV9vcl93aW5kb3csIGYpOworCQkgIGluZXYudGltZXN0YW1wID0gbXNn
Lm1zZy50aW1lOworCQkgIGluZXYuYXJnID0gbGlzdDIgKGlzX3dtX2tleXVwID8gUW5pbCA6
IFF0LCBtb2RpZmllcik7CisJCSAga2JkX2J1ZmZlcl9zdG9yZV9ldmVudF9ob2xkICgmaW5l
diwgaG9sZF9xdWl0KTsKKwkJfQorCSAgICAgIGluZXYua2luZCA9IE5PX0VWRU5UOworCisJ
ICAgIH0KKwkgIGJyZWFrOworCiAgICAgICAgIGNhc2UgV01fVU5JQ0hBUjoKIAljYXNlIFdN
X1NZU0NIQVI6CiAJY2FzZSBXTV9DSEFSOgpkaWZmIC0tZ2l0IGEvc3JjL3czMnRlcm0uaCBi
L3NyYy93MzJ0ZXJtLmgKaW5kZXggY2FkOWZjZjhjYjEuLjg4ZjdkZmVlZjhiIDEwMDY0NAot
LS0gYS9zcmMvdzMydGVybS5oCisrKyBiL3NyYy93MzJ0ZXJtLmgKQEAgLTcxMyw3ICs3MTMs
OCBAQCAjZGVmaW5lIFdNX0VNQUNTX0ZJTEVOT1RJRlkgICAgICAgICAgICAoV01fRU1BQ1Nf
U1RBUlQgKyAyNSkKICNkZWZpbmUgV01fRU1BQ1NfSU1FX1NUQVRVUyAgICAgICAgICAgIChX
TV9FTUFDU19TVEFSVCArIDI2KQogI2RlZmluZSBXTV9FTUFDU19EUkFHT1ZFUiAgICAgICAg
ICAgICAgKFdNX0VNQUNTX1NUQVJUICsgMjcpCiAjZGVmaW5lIFdNX0VNQUNTX0RST1AgICAg
ICAgICAgICAgICAgICAoV01fRU1BQ1NfU1RBUlQgKyAyOCkKLSNkZWZpbmUgV01fRU1BQ1Nf
RU5EICAgICAgICAgICAgICAgICAgIChXTV9FTUFDU19TVEFSVCArIDI5KQorI2RlZmluZSBX
TV9FTUFDU19MT1dfTEVWRUxfS0VZICAgICAgICAgKFdNX0VNQUNTX1NUQVJUICsgMjkpCisj
ZGVmaW5lIFdNX0VNQUNTX0VORCAgICAgICAgICAgICAgICAgICAoV01fRU1BQ1NfU1RBUlQg
KyAzMCkKIAogI2RlZmluZSBXTkRfRk9OVFdJRFRIX0lOREVYICAgICgwKQogI2RlZmluZSBX
TkRfTElORUhFSUdIVF9JTkRFWCAgICg0KQpkaWZmIC0tZ2l0IGEvc3JjL3h0ZXJtLmMgYi9z
cmMveHRlcm0uYwppbmRleCAwYzIwZDM4YjBmNy4uOTcwMjhjMzIzMzYgMTAwNjQ0Ci0tLSBh
L3NyYy94dGVybS5jCisrKyBiL3NyYy94dGVybS5jCkBAIC0xNzg0MCw2ICsxNzg0MCwxNDMg
QEAgI2RlZmluZSBTVE9SRV9LRVlTWU1fRk9SX0RFQlVHKGtleXN5bSkgKCh2b2lkKTApCiAK
IHN0YXRpYyBzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKm5leHRfbm9vcF9kcHlpbmZvOwogCitz
dGF0aWMgdm9pZAoreF9tYXliZV9zZW5kX2xvd19sZXZlbF9rZXlfZXZlbnQgKHN0cnVjdCB4
X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywKKwkJCQkgIGNvbnN0IFhFdmVudCAqeGV2KQorewor
ICBYS2V5RXZlbnQgeGtleTsKKyAgYm9vbCBpc19wcmVzczsKKyAgS2V5U3ltIGtleXN5bTsK
KyAgTGlzcF9PYmplY3Qga2V5LCBtb2RpZmllcjsKKyAgc3RydWN0IGlucHV0X2V2ZW50IGll
OworCisgIGlmICghVmVuYWJsZV9sb3dfbGV2ZWxfa2V5X2V2ZW50cykKKyAgICByZXR1cm47
CisKKyAgc3dpdGNoICh4ZXYtPnR5cGUpCisgICAgeworICAgIGNhc2UgS2V5UHJlc3M6Cisg
ICAgICBpc19wcmVzcyA9IHRydWU7CisgICAgICB4a2V5ID0geGV2LT54a2V5OworICAgICAg
YnJlYWs7CisgICAgY2FzZSBLZXlSZWxlYXNlOgorICAgICAgaXNfcHJlc3MgPSBmYWxzZTsK
KyAgICAgIHhrZXkgPSB4ZXYtPnhrZXk7CisgICAgICBicmVhazsKKyNpZmRlZiBIQVZFX1hJ
TlBVVDIKKyAgICBjYXNlIEdlbmVyaWNFdmVudDoKKyAgICAgIFhJRGV2aWNlRXZlbnQgKnhp
ZXYgPSB4ZXYtPnhjb29raWUuZGF0YTsKKyAgICAgIHN3aXRjaCAoeGV2LT54Z2VuZXJpYy5l
dnR5cGUpCisJeworCWNhc2UgWElfS2V5UHJlc3M6CisJICBpc19wcmVzcyA9IHRydWU7CisJ
ICBicmVhazsKKwljYXNlIFhJX0tleVJlbGVhc2U6CisJICBpc19wcmVzcyA9IGZhbHNlOwor
CSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIHhrZXkuc2Vy
aWFsID0geGlldi0+c2VyaWFsOworICAgICAgeGtleS5zZW5kX2V2ZW50ID0geGlldi0+c2Vu
ZF9ldmVudDsKKyAgICAgIHhrZXkuZGlzcGxheSA9IHhpZXYtPmRpc3BsYXk7CisgICAgICB4
a2V5LndpbmRvdyA9IHhpZXYtPmV2ZW50OworICAgICAgeGtleS5yb290ID0geGlldi0+cm9v
dDsKKyAgICAgIHhrZXkuc3Vid2luZG93ID0geGlldi0+Y2hpbGQ7CisgICAgICB4a2V5LnRp
bWUgPSB4aWV2LT50aW1lOworICAgICAgeGtleS54ID0geGlldi0+ZXZlbnRfeDsKKyAgICAg
IHhrZXkueSA9IHhpZXYtPmV2ZW50X3k7CisgICAgICB4a2V5Lnhfcm9vdCA9IHhpZXYtPnJv
b3RfeDsKKyAgICAgIHhrZXkueV9yb290ID0geGlldi0+cm9vdF95OworICAgICAgeGtleS5z
dGF0ZSA9IHhpZXYtPm1vZHMuZWZmZWN0aXZlOworICAgICAgeGtleS5rZXljb2RlID0geGll
di0+ZGV0YWlsOworICAgICAgeGtleS5zYW1lX3NjcmVlbiA9IDE7CisgICAgICBicmVhazsK
KyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm47CisgICAgfQorCisgIHN0cnVj
dCBmcmFtZSAqZiA9IHhfYW55X3dpbmRvd190b19mcmFtZSAoZHB5aW5mbywgeGtleS53aW5k
b3cpOworICBpZiAoIWYpCisgICAgcmV0dXJuOworCisgIFhMb29rdXBTdHJpbmcgKCZ4a2V5
LCBOVUxMLCAwLCAma2V5c3ltLCBOVUxMKTsKKworICBzd2l0Y2ggKGtleXN5bSkKKyAgICB7
CisgICAgY2FzZSBYS19TaGlmdF9MOiBrZXkgPSBRbHNoaWZ0OyBicmVhazsKKyAgICBjYXNl
IFhLX1NoaWZ0X1I6IGtleSA9IFFyc2hpZnQ7IGJyZWFrOworICAgIGNhc2UgWEtfQ29udHJv
bF9MOiBrZXkgPSBRbGN0cmw7IGJyZWFrOworICAgIGNhc2UgWEtfQ29udHJvbF9SOiBrZXkg
PSBRcmN0cmw7IGJyZWFrOworICAgIGNhc2UgWEtfQWx0X0w6IGtleSA9IFFsYWx0OyBicmVh
azsKKyAgICBjYXNlIFhLX0FsdF9SOiBrZXkgPSBRcmFsdDsgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgIGtleSA9IFFuaWw7CisgICAgfQorCisgICBzd2l0Y2ggKGtleXN5bSkKKyAg
ICB7CisgICAgY2FzZSBYS19TaGlmdF9MOgorICAgIGNhc2UgWEtfU2hpZnRfUjoKKyAgICAg
IG1vZGlmaWVyID0gUXNoaWZ0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBYS19Db250cm9s
X0w6CisgICAgY2FzZSBYS19Db250cm9sX1I6CisgICAgICBtb2RpZmllciA9IFZ4X2N0cmxf
a2V5c3ltOworICAgICAgaWYgKE5JTFAgKG1vZGlmaWVyKSkKKwltb2RpZmllciA9IFFjdHJs
OworICAgICAgYnJlYWs7CisgICAgY2FzZSBYS19BbHRfTDoKKyAgICBjYXNlIFhLX0FsdF9S
OgorICAgICAgbW9kaWZpZXIgPSBWeF9tZXRhX2tleXN5bTsKKyAgICAgIGlmIChOSUxQICht
b2RpZmllcikpCisJbW9kaWZpZXIgPSBRYWx0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBY
S19NZXRhX0w6CisgICAgY2FzZSBYS19NZXRhX1I6CisgICAgICBtb2RpZmllciA9IFZ4X21l
dGFfa2V5c3ltOworICAgICAgaWYgKE5JTFAgKG1vZGlmaWVyKSkKKwltb2RpZmllciA9IFFt
ZXRhOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYS19IeXBlcl9MOgorICAgIGNhc2UgWEtf
SHlwZXJfUjoKKyAgICAgIG1vZGlmaWVyID0gVnhfaHlwZXJfa2V5c3ltOworICAgICAgaWYg
KE5JTFAgKG1vZGlmaWVyKSkKKwltb2RpZmllciA9IFFoeXBlcjsKKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgWEtfU3VwZXJfTDoKKyAgICBjYXNlIFhLX1N1cGVyX1I6CisgICAgICBtb2Rp
ZmllciA9IFZ4X3N1cGVyX2tleXN5bTsKKyAgICAgIGlmIChOSUxQIChtb2RpZmllcikpCisJ
bW9kaWZpZXIgPSBRc3VwZXI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
bW9kaWZpZXIgPSBRbmlsOworICAgIH0KKworICBpZiAoIU5JTFAgKGtleSkpCisgICAgewor
ICAgICAgRVZFTlRfSU5JVCAoaWUpOworICAgICAgWFNFVEZSQU1FIChpZS5mcmFtZV9vcl93
aW5kb3csIGYpOworICAgICAgaWUua2luZCA9IExPV19MRVZFTF9LRVlfRVZFTlQ7CisgICAg
ICBpZS50aW1lc3RhbXAgPSB4a2V5LnRpbWU7CisgICAgICBpZS5hcmcgPSBsaXN0MiAoaXNf
cHJlc3MgPyBRdCA6IFFuaWwsIGtleSk7CisgICAgICBrYmRfYnVmZmVyX3N0b3JlX2V2ZW50
ICgmaWUpOworICAgIH0KKworICBpZiAoIU5JTFAgKG1vZGlmaWVyKSkKKyAgICB7CisgICAg
ICBFVkVOVF9JTklUIChpZSk7CisgICAgICBYU0VURlJBTUUgKGllLmZyYW1lX29yX3dpbmRv
dywgZik7CisgICAgICBpZS5raW5kID0gTE9XX0xFVkVMX01PRElGSUVSX0tFWV9FVkVOVDsK
KyAgICAgIGllLnRpbWVzdGFtcCA9IHhrZXkudGltZTsKKyAgICAgIGllLmFyZyA9IGxpc3Qy
IChpc19wcmVzcyA/IFF0IDogUW5pbCwga2V5KTsKKyAgICAgIGtiZF9idWZmZXJfc3RvcmVf
ZXZlbnQgKCZpZSk7CisgICAgfQorfQorCiAvKiBGaWx0ZXIgZXZlbnRzIGZvciB0aGUgY3Vy
cmVudCBYIGlucHV0IG1ldGhvZC4KICAgIERQWUlORk8gaXMgdGhlIGRpc3BsYXkgdGhpcyBl
dmVudCBpcyBmb3IuCiAgICBFVkVOVCBpcyB0aGUgWCBldmVudCB0byBmaWx0ZXIuCkBAIC0y
MDIwNiw2ICsyMDM0Myw3IEBAIGhhbmRsZV9vbmVfeGV2ZW50IChzdHJ1Y3QgeF9kaXNwbGF5
X2luZm8gKmRweWluZm8sCiAgICAgICBnb3RvIE9USEVSOwogCiAgICAgY2FzZSBLZXlQcmVz
czoKKyAgICAgIHhfbWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50IChkcHlpbmZvLCBl
dmVudCk7CiAgICAgICB4X2Rpc3BsYXlfc2V0X2xhc3RfdXNlcl90aW1lIChkcHlpbmZvLCBl
dmVudC0+eGtleS50aW1lLAogCQkJCSAgICBldmVudC0+eGtleS5zZW5kX2V2ZW50LAogCQkJ
CSAgICB0cnVlKTsKQEAgLTIwNzE1LDYgKzIwODUzLDcgQEAgaGFuZGxlX29uZV94ZXZlbnQg
KHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywKICNlbmRpZgogCiAgICAgY2FzZSBL
ZXlSZWxlYXNlOgorICAgICAgeF9tYXliZV9zZW5kX2xvd19sZXZlbF9rZXlfZXZlbnQgKGRw
eWluZm8sIGV2ZW50KTsKICNpZmRlZiBIQVZFX1hfSTE4TgogICAgICAgLyogRG9uJ3QgZGlz
cGF0Y2ggdGhpcyBldmVudCBzaW5jZSBYdERpc3BhdGNoRXZlbnQgY2FsbHMKICAgICAgICAg
IFhGaWx0ZXJFdmVudCwgYW5kIHR3byBjYWxscyBpbiBhIHJvdyBtYXkgZnJlZXplIHRoZQpA
QCAtMjM5NzAsNiArMjQxMDksOCBAQCBoYW5kbGVfb25lX3hldmVudCAoc3RydWN0IHhfZGlz
cGxheV9pbmZvICpkcHlpbmZvLAogCSAgICAgIHN0cnVjdCB4aV9kZXZpY2VfdCAqZGV2aWNl
LCAqc291cmNlOwogCSAgICAgIFhLZXlQcmVzc2VkRXZlbnQgeGtleTsKIAorCSAgICAgIHhf
bWF5YmVfc2VuZF9sb3dfbGV2ZWxfa2V5X2V2ZW50IChkcHlpbmZvLCBldmVudCk7CisKIAkg
ICAgICBjb2RpbmcgPSBRbGF0aW5fMTsKIAogCSAgICAgIC8qIFRoZSBjb2RlIHVuZGVyIHRo
aXMgbGFiZWwgaXMgcXVpdGUgZGVzdWx0b3J5LiAgVGhlcmUKQEAgLTI0NTg2LDYgKzI0NzI3
LDggQEAgaGFuZGxlX29uZV94ZXZlbnQgKHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5m
bywKICNlbmRpZgogCiAJICBjYXNlIFhJX0tleVJlbGVhc2U6CisJICAgIHhfbWF5YmVfc2Vu
ZF9sb3dfbGV2ZWxfa2V5X2V2ZW50IChkcHlpbmZvLCBldmVudCk7CisKICNpZiBkZWZpbmVk
IEhBVkVfWF9JMThOIHx8IGRlZmluZWQgVVNFX0dUSyB8fCBkZWZpbmVkIFVTRV9MVUNJRAog
CSAgICB7CiAJICAgICAgWEtleVByZXNzZWRFdmVudCB4a2V5OwpAQCAtMzI2NjIsNiArMzI4
MDUsNyBAQCBzeW1zX29mX3h0ZXJtICh2b2lkKQogICBWeF90b29sa2l0X3Njcm9sbF9iYXJz
ID0gUW5pbDsKICNlbmRpZgogCisgIERFRlNZTSAoUXNoaWZ0LCAic2hpZnQiKTsKICAgREVG
U1lNIChRbW9kaWZpZXJfdmFsdWUsICJtb2RpZmllci12YWx1ZSIpOwogICBERUZTWU0gKFFj
dHJsLCAiY3RybCIpOwogICBGcHV0IChRY3RybCwgUW1vZGlmaWVyX3ZhbHVlLCBtYWtlX2Zp
eG51bSAoY3RybF9tb2RpZmllcikpOwotLSAKMi4zNS4xLndpbmRvd3MuMgoK

--------------NfVipp8PWcB7slQ6v5g6HUD0--




Acknowledgement sent to Cecilio Pardo <cpardo@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#74423; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sun, 12 Jan 2025 05:45:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.