From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Drew Adams Newsgroups: gmane.emacs.devel Subject: RE: PATCH: isearch-yank-until-match Date: Tue, 20 Aug 2019 15:37:13 -0700 (PDT) Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="__156634063477044057abhmp0005.oracle.com" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="38010"; mail-complaints-to="usenet@blaine.gmane.org" Cc: Karl Fogel , Emacs developers To: Juri Linkov Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Aug 21 00:37:33 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1i0Ckt-0009k2-Ou for ged-emacs-devel@m.gmane.org; Wed, 21 Aug 2019 00:37:31 +0200 Original-Received: from localhost ([::1]:42488 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i0Cks-0003UR-Kg for ged-emacs-devel@m.gmane.org; Tue, 20 Aug 2019 18:37:30 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:37823) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i0Ckl-0003U7-0n for emacs-devel@gnu.org; Tue, 20 Aug 2019 18:37:24 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i0Ckj-0006ZM-2g for emacs-devel@gnu.org; Tue, 20 Aug 2019 18:37:22 -0400 Original-Received: from userp2130.oracle.com ([156.151.31.86]:47650) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i0Cki-0006Xn-NR for emacs-devel@gnu.org; Tue, 20 Aug 2019 18:37:21 -0400 Original-Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x7KMOxT1048372; Tue, 20 Aug 2019 22:37:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : content-type; s=corp-2019-08-05; bh=yIR3I/Qz3bfwNBEEsROFNONnKbCtHG0U8LjcuUS4/r0=; b=fZYcRTCnSp2ChY7eeef6p6b6Cnje/oAkB8qVN6FPNrDkn8P0cl1nMcTi23tKf89EPetX RrQp/MdD3DwCjFU3hXW2u8yHXJF0mxxug0QhAOgGmhSAF08odaTqj9Y/f7vWV5gopbw/ 1f7EA5MvkgctgDEIqes7LNPCtBQEgUeTBGz28YXHMydZt44Cql2U6BwNFMlTD+hKGNsu GGwieqY5+UkZYYzijo8uokzzZWwg05nn5p3NwhvsGYvxB6WdjkRvWq0PM8Uo92xD+VfN jrANE6WlsJdsSfCVz4xoRgxw2bSQOzaqncH0qvRpirsdF1fh6fiCzOB/F8gTrArgIhZI sQ== Original-Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2130.oracle.com with ESMTP id 2ue90thqvy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Aug 2019 22:37:17 +0000 Original-Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x7KMNacV071004; Tue, 20 Aug 2019 22:37:17 GMT Original-Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserp3020.oracle.com with ESMTP id 2ugj7p7vcm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Aug 2019 22:37:16 +0000 Original-Received: from abhmp0005.oracle.com (abhmp0005.oracle.com [141.146.116.11]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id x7KMbE6t004694; Tue, 20 Aug 2019 22:37:15 GMT X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.4873.0 (x86)] X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9355 signatures=668684 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908200206 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9355 signatures=668684 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908200206 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 156.151.31.86 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:239479 Archived-At: --__156634063477044057abhmp0005.oracle.com Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Sorry this message is long. I've tried to make it clear. > C-s C-w C-r C-w messes up the search string. But I > believe this could be fixed. Thx. The attached patch takes care of this, I think. > > Which part(s) do you think should be only optional? >=20 > Changing the behavior of yanking in backward search. > C-r C-w is still useful to yank forward like it does now. > I don't remember when needed to yank backward. > Do you use backward yanking often? This message tries to make things clearer. See the attached patch for fixes and related new features. [As for whether I "use backward yanking often", the answer is no, because it isn't available! ;-) But when searching backward it makes sense to be able to yank buffer text to the left of the search point, prepending (not appending) it to the search string.] --- I see 3 kinds of "yanking" to the search string (there may be more): 1. Yank an arbitrary string. Examples: * text from the kill-ring * secondary-selection text * text from a register 2. Yank consecutive text at the search point from the buffer. Examples: * successive chars * successive words * successive lines * successive chars up to a particular char 3. Yank buffer text from the search point up to an arbitrary buffer position. Examples: * text up to the destination of a movement command/key * text up to the position resulting from a recursive edit In general, these call for, or invite, three different behaviors: 1. An arbitrary string should always be pulled onto the end of the search string, regardless of the current search direction. 2. Consecutive text at point should be pulled onto the front of the search string, where "front" is in the search direction. This means prepend the text when searching backward and append it when searching forward. (If you want to grab both text that precedes the search hit and text that succeeds it then you need to change search directions between the two grabs.) 3. When buffer text from the search point to an arbitrary position is involved we should let that position adjust the search string, to either expand or reduce it. That is, we should not limit such adjustment to extension; we should let the arbitrary position determine whether to extend or retract, as follows: * If the position is outside the search hit then extend the search string to add the buffer text from the hit to the position. * If the position is inside the search hit then reduce the search string to remove the buffer text from the hit to the position. Search direction remains the same, in any case. (That means that, unlike case #2, you don't need to change search direction to grab text both left and right of the search hit.) For case #2, you've asked that respecting search direction be made optional. OK, the attached patch does that (option `isearch-directional-yank'). I don't think there's a good reason not to respect search direction by default, however, so the option value respects direction by default. (Just one opinion.) [FWIW, I think that unless search-direction is respected (prepend/append), yanking text that is consecutive in the forward direction when searching backward is just, well, broken/wrong. That it has always been broken (so no one uses it) is not a good reason to keep the old, wrong behavior by default. The real right thing is to not bother with the option and just always respect search direction for this case #2. But I've respected your request.] The attached patch does those things. Following case #2, it makes these commands respect search direction, provided option `isearch-directional-yank' is non-nil: `isearch-yank-word-or-char' `isearch-yank-char' `isearch-yank-word' `isearch-yank-line', `isearch-yank-until-char' `isearch-yank-until-match' And following case #3, it defines these commands that adjust the search string according to an arbitrary buffer position (inside or outside, cursor movement left or right from the search point): `isearch-yank-to-key-destination' `isearch-yank-through-move' The new commands are these: * `isearch-yank-until-char': A version of Karl's command that respects `isearch-directional-yank'. * `isearch-yank-until-match' (mentioned previously): Yank text up through a match for another pattern. * `isearch-yank-to-key-destination': A version of the imagined command we discussed that lets you use a movement key (e.g. `M-f', `C-b') to adjust the search string. But it works whether the key moves point left or right, and whether the destination is inside or outside the search hit. In addition, you can use a prefix arg with the command. The prefix arg is transferred to the movement key. * `isearch-yank-through-move': Enters a recursive edit, where you can move the cursor any way you like, any number of times, and then exit the recursive edit. The command adjusts the search string according to the resulting cursor position. The last two allow other action, besides just cursor movement. I think this is generally a plus, but I can imagine that someone might disagree. (In that case, `isearch-yank-to-key-destination' could bind `buffer-read-only', to prevent buffer changes. But there's no way to control what a user might do in a recursive edit, AFAIK. E.g., there doesn't seem to be any hook that's used when entering or exiting a recursive edit.) A macro, `define-isearch-yank-movement-command', is used to define the last two. Their only differences are: * `isearch-yank-to-key-destination' reads a key, inhibits field-text motion, disables bindings of the Isearch keymap, and invokes the key's command. * `isearch-yank-through-move' calls `recursive-edit'. As for key bindings, here are my thoughts: * `C-M-.' for `isearch-yank-until-char'. * `C-M-m' (aka `M-RET') for `isearch-yank-until-match'. * `C-M-c' for `isearch-yank-through-move' (_not_ for `isearch-yank-until-char'). `C-M-c' is bound globally to `exit-recursive-edit'. It's how you tell `isearch-yank-through-move' that you're done moving the cursor. It helps to use the same key to start and end the command. And because of that global binding, no (other) Isearch command should be bound to `C-M-c'. (I hadn't considered this before, when I said I was OK with `C-M-c' for `isearch-yank-until-char'.) The only binding I feel strongly about is `C-M-c'. I don't have a suggestion yet about a binding for `isearch-yank-to-key-destination'. ___ P.S. The patch also renames the parameter to `isearch-yank-internal' from JUMPFORM to JUMPFUN, because it's a function, not a form. And it fixes the doc string accordingly: "function", not necessarily "lambda expression". --__156634063477044057abhmp0005.oracle.com Content-Type: application/octet-stream; name="isearch-2019-08-19c.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="isearch-2019-08-19c.patch" ZGlmZiAtdSBpc2VhcmNoLTIwMTktMDgtMTlhLmVsIGlzZWFyY2gtMjAxOS0wOC0xOWMtUEFUQ0gu ZWwKLS0tIGlzZWFyY2gtMjAxOS0wOC0xOWEuZWwJMjAxOS0wOC0xOCAxNzoxMDoxMy42MDk0NDU4 MDAgLTA3MDAKKysrIGlzZWFyY2gtMjAxOS0wOC0xOWMtUEFUQ0guZWwJMjAxOS0wOC0yMCAxNDo1 Mjo0Mi40MTAxODQ5MDAgLTA3MDAKQEAgLTE3Myw2ICsxNzMsMTAgQEAKIGNvbW1hbmQgaGlzdG9y eS4iCiAgIDp0eXBlICdib29sZWFuKQogCisoZGVmY3VzdG9tIGlzZWFyY2gtZGlyZWN0aW9uYWwt eWFuayB0CisgICJOb24tbmlsIGlmIHlhbmtpbmcgY29uc2VjdXRpdmUgdGV4dCBhdCBwb2ludCBy ZXNwZWN0cyBzZWFyY2ggZGlyZWN0aW9uLiIKKyAgOnR5cGUgJ2Jvb2xlYW4pCisKIChkZWZ2YXIg aXNlYXJjaC1tb2RlLWhvb2sgbmlsCiAgICJGdW5jdGlvbihzKSB0byBjYWxsIGFmdGVyIHN0YXJ0 aW5nIHVwIGFuIGluY3JlbWVudGFsIHNlYXJjaC4iKQogCkBAIC03MDYsNiArNzEwLDkgQEAKICAg ICAoZGVmaW5lLWtleSBtYXAgIlxNLVxDLXkiICdpc2VhcmNoLXlhbmstY2hhcikKICAgICAoZGVm aW5lLWtleSBtYXAgICAgIlxDLXkiICdpc2VhcmNoLXlhbmsta2lsbCkKICAgICAoZGVmaW5lLWtl eSBtYXAgIlxNLXNcQy1lIiAnaXNlYXJjaC15YW5rLWxpbmUpCisgICAgKGRlZmluZS1rZXkgbWFw IChrYmQgIkMtTS0uIikgJ2lzZWFyY2gteWFuay11bnRpbC1jaGFyKQorICAgIChkZWZpbmUta2V5 IG1hcCAoa2JkICJDLU0tbSIpICdpc2VhcmNoLXlhbmstdW50aWwtbWF0Y2gpCisgICAgKGRlZmlu ZS1rZXkgbWFwIChrYmQgIkMtTS1jIikgJ2lzZWFyY2gteWFuay10aHJvdWdoLW1vdmUpCiAKICAg ICAoZGVmaW5lLWtleSBtYXAgIlxNLXNcTS08IiAnaXNlYXJjaC1iZWdpbm5pbmctb2YtYnVmZmVy KQogICAgIChkZWZpbmUta2V5IG1hcCAiXE0tc1xNLT4iICdpc2VhcmNoLWVuZC1vZi1idWZmZXIp CkBAIC0xNzMxLDYgKzE3MzgsNjQgQEAKICAgICAgKGlzZWFyY2gtYWJvcnQpICA7OyBvdXRzaWRl IG9mIGxldCB0byByZXN0b3JlIG91dHNpZGUgZ2xvYmFsIHZhbHVlcwogICAgICApKSkKIAorKGRl Zm1hY3JvIGRlZmluZS1pc2VhcmNoLXlhbmstbW92ZW1lbnQtY29tbWFuZCAoY29tbWFuZCBhcmd1 bWVudHMgZG9jLXN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5ncyBhY3Rpb24pCisgICJEZWZpbmUg SXNlYXJjaCBDT01NQU5EIHRvIGFkanVzdCBzZWFyY2ggc3RyaW5nIGJhc2VkIG9uIGN1cnNvciBw b3NpdGlvbi4KK1RoZSBjb21tYW5kIHNob3VsZCBtb3ZlIHRoZSBjdXJzb3IsIHdoaWNoIGlzIGF0 IG9uZSBlbmQgb2YgdGhlIGN1cnJlbnQKK3NlYXJjaCBoaXQsIHRvIGEgbmV3IGxvY2F0aW9uLgor CitUaGUgZXhpc3Rpbmcgc2VhcmNoIHN0cmluZyBpcyBleHBhbmRlZCBvciByZWR1Y2VkIHRvIGlu Y2x1ZGUgdGhlCitidWZmZXIgdGV4dCBmcm9tIHRoZSBzZWFyY2ggaGl0IHRocm91Z2ggdGhlIG5l dyBjdXJzb3IgcG9zaXRpb24uCisKK0FSR1VNRU5UUyBpcyBhIGxpc3Qgb2YgYXJndW1lbnRzIHRv IHRoZSBjb21tYW5kLgorRE9DLVNUUklORyBpcyB0aGUgY29tbWFuZCdzIGRvYyBzdHJpbmcuCitJ TlRFUkFDVElWRSBpcyBgaW50ZXJhdGl2ZScgZm9ybS4KK0JJTkRJTkdTIGlzIGEgbGlzdCBvZiBg bGV0KicgYmluZGluZ3MgYWRkZWQgYXJvdW5kIHRoZSBjb21tYW5kIGNvZGUuCisgIExvY2FsIHZh cmlhYmxlIGBpc2VhcmNoLW5ldy1wb3NpdGlvbicgaXMgYWxzbyBib3VuZCwgYmVmb3JlIHRoZQor ICBCSU5ESU5HUyB5b3UgcHJvdmlkZSAtIHNlZSBBQ1RJT04sIGJlbG93LgorQklORElOR1MgaXMg bWFjcm9leHBhbmRlZCwgc28gaXQgY2FuIGFsc28gYmUgYSBtYWNybyBjYWxsIHRoYXQgZXhwYW5k cwordG8gYSBsaXN0IG9mIGJpbmRpbmdzLgorCitBQ1RJT04gaXMgeW91ciBjb2RlIHRoYXQgbW92 ZXMgdGhlIGN1cnNvci4gIEl0IHNob3VsZCBzZXQgdmFyaWFibGUKK2Bpc2VhcmNoLW5ldy1wb3Np dGlvbicgdG8gdGhlIG5ldyBjdXJzb3IgcG9zaXRpb24uIgorICAobGV0ICgoZndkICAgICAobWFr ZS1zeW1ib2wgImZ3ZCIpKQorICAgICAgICAoYmVnICAgICAobWFrZS1zeW1ib2wgImJlZyIpKQor ICAgICAgICAoZW5kICAgICAobWFrZS1zeW1ib2wgImVuZCIpKQorICAgICAgICAobWluLWJlICAo bWFrZS1zeW1ib2wgIm1pbi1iZSIpKQorICAgICAgICAobWF4LWJlICAobWFrZS1zeW1ib2wgIm1h eC1iZSIpKSkKKyAgICBgKGRlZnVuICxjb21tYW5kICxhcmd1bWVudHMgLGRvYy1zdHJpbmcKKyAg ICAgICAgICAgICxpbnRlcmFjdGl2ZQorICAgICAgICAgICAgKGxldCAoKCxmd2QgIGlzZWFyY2gt Zm9yd2FyZCkKKyAgICAgICAgICAgICAgICAgICgsYmVnICBpc2VhcmNoLW90aGVyLWVuZCkKKyAg ICAgICAgICAgICAgICAgICgsZW5kICAocG9pbnQpKQorICAgICAgICAgICAgICAgICAgaXNlYXJj aC1uZXctcG9zaXRpb24pCisgICAgICAgICAgICAgIChsZXQqICxiaW5kaW5ncworICAgICAgICAg ICAgICAgICxhY3Rpb24KKyAgICAgICAgICAgICAgICAobGV0ICgoLG1pbi1iZSAgKG1pbiAsYmVn ICxlbmQpKQorICAgICAgICAgICAgICAgICAgICAgICgsbWF4LWJlICAobWF4ICxiZWcgLGVuZCkp KQorICAgICAgICAgICAgICAgICAgKHNldHEgaXNlYXJjaC1zdHJpbmcgICAgIChpZiAoPCBpc2Vh cmNoLW5ldy1wb3NpdGlvbiAsYmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKG1pbiBpc2VhcmNoLW5ldy1wb3NpdGlvbiAsbWF4LWJl KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heCBp c2VhcmNoLW5ldy1wb3NpdGlvbiAsbWF4LWJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1pbiBpc2VhcmNoLW5ldy1wb3NpdGlvbiAsbWlu LWJlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXgg aXNlYXJjaC1uZXctcG9zaXRpb24gLG1pbi1iZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg aXNlYXJjaC1tZXNzYWdlICAgIChtYXBjb25jYXQgJ2lzZWFyY2gtdGV4dC1jaGFyLWRlc2NyaXB0 aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpc2VhcmNoLXN0cmluZyAiIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzZWFyY2gtYmFy cmllciAgICAoaWYgKG9yIChhbmQgLGZ3ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoPCBpc2VhcmNoLW5ldy1wb3NpdGlvbiAsYmVnKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQg KG5vdCAsZndkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobm90ICg8IGlzZWFyY2gtbmV3LXBvc2l0aW9uICxiZWcpKSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxlbmQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZWFyY2gtbmV3LXBvc2l0aW9uKQor ICAgICAgICAgICAgICAgICAgICAgICAgaXNlYXJjaC1vdGhlci1lbmQgIChpZiAoPCBpc2VhcmNo LW5ldy1wb3NpdGlvbiAsYmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaWYgLGZ3ZCBpc2VhcmNoLW5ldy1wb3NpdGlvbiAsYmVnKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChub3QgLGZ3ZCkgaXNlYXJj aC1uZXctcG9zaXRpb24gLGJlZykpKQorICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciBpc2Vh cmNoLWJhcnJpZXIpCisgICAgICAgICAgICAgICAgICAoaXNlYXJjaC1oaWdobGlnaHQgaXNlYXJj aC1vdGhlci1lbmQgaXNlYXJjaC1iYXJyaWVyKQorICAgICAgICAgICAgICAgICAgKHdoZW4gaXNl YXJjaC1sYXp5LWhpZ2hsaWdodCAoaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1uZXctbG9vcCkpKSkp KSkpCisKIChkZWZ2YXIgbWluaWJ1ZmZlci1oaXN0b3J5LXN5bWJvbCkgOzsgZnJvbSBleHRlcm5h bCBwYWNrYWdlIGdtaGlzdC5lbAogCiAoZGVmdW4gaXNlYXJjaC1lZGl0LXN0cmluZyAoKQpAQCAt MjQ0Nyw4ICsyNTEyLDkgQEAKICAgKGlzZWFyY2gtcHVzaC1zdGF0ZSkKICAgKGlzZWFyY2gtdXBk YXRlKSkKIAotKGRlZnVuIGlzZWFyY2gteWFuay1zdHJpbmcgKHN0cmluZykKLSAgIlB1bGwgU1RS SU5HIGludG8gc2VhcmNoIHN0cmluZy4iCisoZGVmdW4gaXNlYXJjaC15YW5rLXN0cmluZyAoc3Ry aW5nICZvcHRpb25hbCByZXNwZWN0LWRpcmVjdGlvbikKKyAgIlB1bGwgU1RSSU5HIGludG8gc2Vh cmNoIHN0cmluZy4KK05vbi1uaWwgUkVTUEVDVC1ESVJFQ1RJT04gbWVhbnMgcHJlcGVuZCBTVFJJ TkcgaWYgc2VhcmNoaW5nIGJhY2t3YXJkLiIKICAgOzsgRG93bmNhc2UgdGhlIHN0cmluZyBpZiBu b3Qgc3VwcG9zZWQgdG8gY2FzZS1mb2xkIHlhbmtlZCBzdHJpbmdzLgogICAoaWYgKGFuZCBpc2Vh cmNoLWNhc2UtZm9sZC1zZWFyY2gKIAkgICAoZXEgJ25vdC15YW5rcyBzZWFyY2gtdXBwZXItY2Fz ZSkpCkBAIC0yNDU2LDggKzI1MjIsOSBAQAogICAoaWYgaXNlYXJjaC1yZWdleHAgKHNldHEgc3Ry aW5nIChyZWdleHAtcXVvdGUgc3RyaW5nKSkpCiAgIDs7IERvbid0IG1vdmUgY3Vyc29yIGluIHJl dmVyc2Ugc2VhcmNoLgogICAoc2V0cSBpc2VhcmNoLXlhbmstZmxhZyB0KQotICAoaXNlYXJjaC1w cm9jZXNzLXNlYXJjaC1zdHJpbmcKLSAgIHN0cmluZyAobWFwY29uY2F0ICdpc2VhcmNoLXRleHQt Y2hhci1kZXNjcmlwdGlvbiBzdHJpbmcgIiIpKSkKKyAgKGlzZWFyY2gtcHJvY2Vzcy1zZWFyY2gt c3RyaW5nIHN0cmluZworCQkJCSAobWFwY29uY2F0ICdpc2VhcmNoLXRleHQtY2hhci1kZXNjcmlw dGlvbiBzdHJpbmcgIiIpCisJCQkJIHJlc3BlY3QtZGlyZWN0aW9uKSkKIAogKGRlZnVuIGlzZWFy Y2gteWFuay1raWxsICgpCiAgICJQdWxsIHN0cmluZyBmcm9tIGtpbGwgcmluZyBpbnRvIHNlYXJj aCBzdHJpbmcuIgpAQCAtMjUwOCwxNyArMjU3NSwxOCBAQAogICAoaW50ZXJhY3RpdmUpCiAgIChp c2VhcmNoLXlhbmstc3RyaW5nICh4dGVybS0tcGFzdGVkLXRleHQpKSkKIAotKGRlZnVuIGlzZWFy Y2gteWFuay1pbnRlcm5hbCAoanVtcGZvcm0pCi0gICJQdWxsIHRoZSB0ZXh0IGZyb20gcG9pbnQg dG8gdGhlIHBvaW50IHJlYWNoZWQgYnkgSlVNUEZPUk0uCi1KVU1QRk9STSBpcyBhIGxhbWJkYSBl eHByZXNzaW9uIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzIGFuZCByZXR1cm5zCi1hIGJ1ZmZlciBw b3NpdGlvbiwgcG9zc2libHkgaGF2aW5nIG1vdmVkIHBvaW50IHRvIHRoYXQgcG9zaXRpb24uCi1G b3IgZXhhbXBsZSwgaXQgbWlnaHQgbW92ZSBwb2ludCBmb3J3YXJkIGJ5IGEgd29yZCBhbmQgcmV0 dXJuIHBvaW50LAotb3IgaXQgbWlnaHQgcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9m IHRoZSBsaW5lLiIKKyhkZWZ1biBpc2VhcmNoLXlhbmstaW50ZXJuYWwgKGp1bXBmdW4gJm9wdGlv bmFsIHJlc3BlY3QtZGlyZWN0aW9uKQorICAiUHVsbCB0aGUgdGV4dCBmcm9tIHBvaW50IHRvIHRo ZSBwb2ludCByZWFjaGVkIGJ5IEpVTVBGVU4uCitKVU1QRlVOIGlzIGEgZnVuY3Rpb24gdGhhdCB0 YWtlcyBubyBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBidWZmZXIKK3Bvc2l0aW9uLCBwb3NzaWJs eSBoYXZpbmcgbW92ZWQgcG9pbnQgdG8gdGhhdCBwb3NpdGlvbi4KKworRm9yIGV4YW1wbGUsIEpV TVBGVU4gbWlnaHQgbW92ZSBmb3J3YXJkIGJ5IGEgd29yZCBhbmQgcmV0dXJuIHBvaW50LCBvcgor aXQgbWlnaHQgcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCitO b24tbmlsIFJFU1BFQ1QtRElSRUNUSU9OIG1lYW5zIHByZXBlbmQgdGV4dCBpZiBzZWFyY2hpbmcg YmFja3dhcmQuIgogICAoaXNlYXJjaC15YW5rLXN0cmluZwotICAgKHNhdmUtZXhjdXJzaW9uCi0g ICAgIChhbmQgKG5vdCBpc2VhcmNoLWZvcndhcmQpIGlzZWFyY2gtb3RoZXItZW5kCi0JICAoZ290 by1jaGFyIGlzZWFyY2gtb3RoZXItZW5kKSkKLSAgICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJv cGVydGllcyAocG9pbnQpIChmdW5jYWxsIGp1bXBmb3JtKSkpKSkKKyAgIChzYXZlLWV4Y3Vyc2lv biAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIChwb2ludCkgKGZ1bmNhbGwganVtcGZ1 bikpKQorICAgcmVzcGVjdC1kaXJlY3Rpb24pKQogCiAoZGVmdW4gaXNlYXJjaC15YW5rLWNoYXIt aW4tbWluaWJ1ZmZlciAoJm9wdGlvbmFsIGFyZykKICAgIlB1bGwgbmV4dCBjaGFyYWN0ZXIgZnJv bSBidWZmZXIgaW50byBlbmQgb2Ygc2VhcmNoIHN0cmluZyBpbiBtaW5pYnVmZmVyLiIKQEAgLTI1 MzEsNDQgKzI1OTksMTg5IEBACiAgICAgKGZvcndhcmQtY2hhciBhcmcpKSkKIAogKGRlZnVuIGlz ZWFyY2gteWFuay1jaGFyICgmb3B0aW9uYWwgYXJnKQotICAiUHVsbCBuZXh0IGNoYXJhY3RlciBm cm9tIGJ1ZmZlciBpbnRvIHNlYXJjaCBzdHJpbmcuCi1JZiBvcHRpb25hbCBBUkcgaXMgbm9uLW5p bCwgcHVsbCBpbiB0aGUgbmV4dCBBUkcgY2hhcmFjdGVycy4iCisgICJQdWxsIGNoYXJhY3RlciBm cm9tIGJ1ZmZlciBpbnRvIHNlYXJjaCBzdHJpbmcuCitJZiBgaXNlYXJjaC1kaXJlY3Rpb25hbC15 YW5rJyBpcyBub24tbmlsIHRoZW4gdXNlIG5leHQgY2hhciBmb3IKK2ZvcndhcmQgc2VhcmNoLCBw cmV2aW91cyBjaGFyIGZvciBiYWNrd2FyZCBzZWFyY2guCisKK1dpdGggYSBudW1lcmljIHByZWZp eCBBUkcsIHB1bGwgaW4gQVJHIGNoYXJhY3RlcnMuIgogICAoaW50ZXJhY3RpdmUgInAiKQotICAo aXNlYXJjaC15YW5rLWludGVybmFsIChsYW1iZGEgKCkgKGZvcndhcmQtY2hhciBhcmcpIChwb2lu dCkpKSkKKyAgKGlzZWFyY2gteWFuay1pbnRlcm5hbAorICAgKGxhbWJkYSAoKQorICAgICAoZnVu Y2FsbCAoaWYgKG9yIGlzZWFyY2gtZm9yd2FyZCAgKG5vdCBpc2VhcmNoLWRpcmVjdGlvbmFsLXlh bmspKQorICAgICAgICAgICAgICAgICAgIydmb3J3YXJkLWNoYXIKKyAgICAgICAgICAgICAgICAj J2JhY2t3YXJkLWNoYXIpCisgICAgICAgICAgICAgIGFyZykKKyAgICAgKHBvaW50KSkKKyAgIGlz ZWFyY2gtZGlyZWN0aW9uYWwteWFuaykpCiAKLShkZWZ1biBpc2VhcmNoLS15YW5rLWNoYXItb3It c3ludGF4IChzeW50YXgtbGlzdCBmbikKKyhkZWZ1biBpc2VhcmNoLS15YW5rLWNoYXItb3Itc3lu dGF4IChzeW50YXgtbGlzdCBmbiAmb3B0aW9uYWwgcmVzcGVjdC1kaXJlY3Rpb24pCiAgIChpc2Vh cmNoLXlhbmstaW50ZXJuYWwKICAgIChsYW1iZGEgKCkKICAgICAgKGlmIChvciAobWVtcSAoY2hh ci1zeW50YXggKG9yIChjaGFyLWFmdGVyKSAwKSkgc3ludGF4LWxpc3QpCiAgICAgICAgICAgICAg KG1lbXEgKGNoYXItc3ludGF4IChvciAoY2hhci1hZnRlciAoMSsgKHBvaW50KSkpIDApKQogICAg ICAgICAgICAgICAgICAgIHN5bnRheC1saXN0KSkKIAkgKGZ1bmNhbGwgZm4gMSkKLSAgICAgICAo Zm9yd2FyZC1jaGFyIDEpKQotICAgICAocG9pbnQpKSkpCisgICAgICAgKGlmIChvciBpc2VhcmNo LWZvcndhcmQgIChub3QgcmVzcGVjdC1kaXJlY3Rpb24pKQorICAgICAgICAgICAoZm9yd2FyZC1j aGFyIDEpCisgICAgICAgICAoYmFja3dhcmQtY2hhciAxKSkpCisgICAgIChwb2ludCkpCisgICBy ZXNwZWN0LWRpcmVjdGlvbikpCiAKIChkZWZ1biBpc2VhcmNoLXlhbmstd29yZC1vci1jaGFyICgp CisgICJQdWxsIGNoYXJhY3RlciBvciB3b3JkIGZyb20gYnVmZmVyIGludG8gc2VhcmNoIHN0cmlu Zy4KK0lmIGBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmsnIGlzIG5vbi1uaWwgdGhlbiB5YW5rIG5l eHQgb25lIGZvcgorZm9yd2FyZCBzZWFyY2gsIHByZXZpb3VzIG9uZSBmb3IgYmFja3dhcmQgc2Vh cmNoLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKG9yIGlzZWFyY2gtZm9yd2FyZCAgKG5vdCBp c2VhcmNoLWRpcmVjdGlvbmFsLXlhbmspKQorICAgICAgKGlzZWFyY2gtLXlhbmstY2hhci1vci1z eW50YXggJyg/dykgJ2ZvcndhcmQtd29yZCBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmspCisgICAg KGlzZWFyY2gtLXlhbmstY2hhci1vci1zeW50YXggJyg/dykgJ2JhY2t3YXJkLXdvcmQgJ1JFU1BF Q1QtRElSRUNUSU9OKSkpCisKKyhkZWZ1biBpc2VhcmNoLXlhbmstd29yZC1vci1jaGFyLWZvcndh cmQgKCkKICAgIlB1bGwgbmV4dCBjaGFyYWN0ZXIgb3Igd29yZCBmcm9tIGJ1ZmZlciBpbnRvIHNl YXJjaCBzdHJpbmcuIgogICAoaW50ZXJhY3RpdmUpCi0gIChpc2VhcmNoLS15YW5rLWNoYXItb3It c3ludGF4ICcoP3cpICdmb3J3YXJkLXdvcmQpKQorICAoaXNlYXJjaC0teWFuay1jaGFyLW9yLXN5 bnRheCAnKD93KSAnZm9yd2FyZC13b3JkIGlzZWFyY2gtZGlyZWN0aW9uYWwteWFuaykpCiAKLShk ZWZ1biBpc2VhcmNoLXlhbmstc3ltYm9sLW9yLWNoYXIgKCkKLSAgIlB1bGwgbmV4dCBjaGFyYWN0 ZXIgb3Igc3ltYm9sIGZyb20gYnVmZmVyIGludG8gc2VhcmNoIHN0cmluZy4iCisoZGVmdW4gaXNl YXJjaC15YW5rLXdvcmQtb3ItY2hhci1iYWNrd2FyZCAoKQorICAiUHVsbCBwcmV2aW91cyBjaGFy YWN0ZXIgb3Igd29yZCBmcm9tIGJ1ZmZlciBpbnRvIHNlYXJjaCBzdHJpbmcuIgogICAoaW50ZXJh Y3RpdmUpCi0gIChpc2VhcmNoLS15YW5rLWNoYXItb3Itc3ludGF4ICcoP3cgP18pICdmb3J3YXJk LXN5bWJvbCkpCisgIChpc2VhcmNoLS15YW5rLWNoYXItb3Itc3ludGF4ICcoP3cpICdiYWNrd2Fy ZC13b3JkICdSRVNQRUNULURJUkVDVElPTikpCisKKyhkZWZ1biBpc2VhcmNoLXlhbmstc3ltYm9s LW9yLWNoYXIgKCkKKyAgIlB1bGwgY2hhcmFjdGVyIG9yIHN5bWJvbCBmcm9tIGJ1ZmZlciBpbnRv IHNlYXJjaCBzdHJpbmcuCitJZiBgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rJyBpcyBub24tbmls IHRoZW4gcHVsbCBuZXh0IG9uZSBmb3IKK2ZvcndhcmQgc2VhcmNoLCBwcmV2aW91cyBvbmUgZm9y IGJhY2t3YXJkIHNlYXJjaC4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGlmIChvciBpc2VhcmNoLWZv cndhcmQgIChub3QgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rKSkKKyAgICAgIChpc2VhcmNoLS15 YW5rLWNoYXItb3Itc3ludGF4ICcoP3cgP18pICdmb3J3YXJkLXN5bWJvbCBpc2VhcmNoLWRpcmVj dGlvbmFsLXlhbmspCisgICAgKGlzZWFyY2gtLXlhbmstY2hhci1vci1zeW50YXggJyg/dyA/Xykg J2JhY2t3YXJkLXN5bWJvbCAnUkVTUEVDVC1ESVJFQ1RJT04pKSkKIAogKGRlZnVuIGlzZWFyY2gt eWFuay13b3JkICgmb3B0aW9uYWwgYXJnKQotICAiUHVsbCBuZXh0IHdvcmQgZnJvbSBidWZmZXIg aW50byBzZWFyY2ggc3RyaW5nLgotSWYgb3B0aW9uYWwgQVJHIGlzIG5vbi1uaWwsIHB1bGwgaW4g dGhlIG5leHQgQVJHIHdvcmRzLiIKKyAgIlB1bGwgd29yZCBmcm9tIGJ1ZmZlciBpbnRvIHNlYXJj aCBzdHJpbmcuCitJZiBgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rJyBpcyBub24tbmlsIHRoZW4g cHVsbCBuZXh0IHdvcmQgZm9yCitmb3J3YXJkIHNlYXJjaCwgcHJldmlvdXMgd29yZCBmb3IgYmFj a3dhcmQgc2VhcmNoLgorCitXaXRoIGEgbnVtZXJpYyBwcmVmaXggQVJHLCBwdWxsIGluIEFSRyB3 b3Jkcy4iCiAgIChpbnRlcmFjdGl2ZSAicCIpCi0gIChpc2VhcmNoLXlhbmstaW50ZXJuYWwgKGxh bWJkYSAoKSAoZm9yd2FyZC13b3JkIGFyZykgKHBvaW50KSkpKQorICAoaXNlYXJjaC15YW5rLWlu dGVybmFsCisgICAobGFtYmRhICgpCisgICAgIChmdW5jYWxsIChpZiAob3IgaXNlYXJjaC1mb3J3 YXJkICAobm90IGlzZWFyY2gtZGlyZWN0aW9uYWwteWFuaykpCisgICAgICAgICAgICAgICAgICAj J2ZvcndhcmQtd29yZAorICAgICAgICAgICAgICAgICMnYmFja3dhcmQtd29yZCkKKyAgICAgICAg ICAgICAgYXJnKQorICAgICAocG9pbnQpKQorICAgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rKSkK IAogKGRlZnVuIGlzZWFyY2gteWFuay1saW5lICgmb3B0aW9uYWwgYXJnKQogICAiUHVsbCByZXN0 IG9mIGxpbmUgZnJvbSBidWZmZXIgaW50byBzZWFyY2ggc3RyaW5nLgotSWYgb3B0aW9uYWwgQVJH IGlzIG5vbi1uaWwsIHlhbmsgdGhlIG5leHQgQVJHIGxpbmVzLiIKK0lmIGBpc2VhcmNoLWRpcmVj dGlvbmFsLXlhbmsnIGlzIG5vbi1uaWwgdGhlbiBwdWxsIGluIHJlc3Qgb2YgbGluZSBpbgorc2Vh cmNoIGRpcmVjdGlvbi4KKworV2l0aCBhIG51bWVyaWMgcHJlZml4IEFSRywgcHVsbCBpbiBBUkcg bGluZXMuIgorICAoaW50ZXJhY3RpdmUgInAiKQorICAoaWYgKG9yIGlzZWFyY2gtZm9yd2FyZCAg KG5vdCBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmspKQorICAgICAgKGlzZWFyY2gteWFuay1saW5l LWZvcndhcmQgYXJnKQorICAgIChpc2VhcmNoLXlhbmstbGluZS1iYWNrd2FyZCBhcmcpKSkKKwor KGRlZnVuIGlzZWFyY2gteWFuay1saW5lLWZvcndhcmQgKCZvcHRpb25hbCBhcmcpCisgICJQdWxs IHJlc3Qgb2YgbGluZSwgZ29pbmcgZm9yd2FyZCwgZnJvbSBidWZmZXIgaW50byBzZWFyY2ggc3Ry aW5nLgorV2l0aCBhIG51bWVyaWMgcHJlZml4IEFSRywgcHVsbCBpbiB0aGUgbmV4dCBBUkcgbGlu ZXMuIgorICAoaW50ZXJhY3RpdmUgInAiKQorICAoaXNlYXJjaC15YW5rLWludGVybmFsCisgICAo bGFtYmRhICgpCisgICAgIChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uICB0KSkKKyAg ICAgICAobGluZS1lbmQtcG9zaXRpb24gKGlmIChlb2xwKSAoMSsgYXJnKSBhcmcpKSkpKSkKKwor KGRlZnVuIGlzZWFyY2gteWFuay1saW5lLWJhY2t3YXJkICgmb3B0aW9uYWwgYXJnKQorICAiUHVs bCByZXN0IG9mIGxpbmUsIGdvaW5nIGJhY2t3YXJkLCBmcm9tIGJ1ZmZlciBpbnRvIHNlYXJjaCBz dHJpbmcuCitXaXRoIGEgbnVtZXJpYyBwcmVmaXggQVJHLCBwdWxsIGluIHRoZSBwcmV2aW91cyBB UkcgbGluZXMuIgogICAoaW50ZXJhY3RpdmUgInAiKQogICAoaXNlYXJjaC15YW5rLWludGVybmFs Ci0gICAobGFtYmRhICgpIChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uIHQpKQotCQko bGluZS1lbmQtcG9zaXRpb24gKGlmIChlb2xwKSAoMSsgYXJnKSBhcmcpKSkpKSkKKyAgIChsYW1i ZGEgKCkKKyAgICAgKGxldCAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rpb24gIHQpCisJICAgKGFy ZzIgICAgICAgICAgICAgICAgICAgICAgICgtIDIgYXJnKSkpCisgICAgICAgKGxpbmUtYmVnaW5u aW5nLXBvc2l0aW9uIChpZiAoYm9scCkgKDEtIGFyZzIpIGFyZzIpKSkpCisgICAnUkVTUEVDVC1E SVJFQ1RJT04pKQorCisoZGVmdW4gaXNlYXJjaC15YW5rLXVudGlsLWNoYXIgKGNoYXIpCisgICJQ dWxsIGJ1ZmZlciB0ZXh0LCB1cCB0byBuZXh0IGluc3RhbmNlIG9mIENIQVIsIGludG8gc2VhcmNo IHN0cmluZy4KK1lvdSBhcmUgcHJvbXB0ZWQgZm9yIENIQVIuIgorICAoaW50ZXJhY3RpdmUgImNZ YW5rIHVudGlsIGNoYXJhY3RlcjogIikKKyAgKGlzZWFyY2gteWFuay1pbnRlcm5hbAorICAgKGxh bWJkYSAoKQorICAgICAobGV0ICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiAgdCkpCisgICAg ICAgKGZ1bmNhbGwgKGlmIChvciBpc2VhcmNoLWZvcndhcmQgIChub3QgaXNlYXJjaC1kaXJlY3Rp b25hbC15YW5rKSkKKyAgICAgICAgICAgICAgICAgICAgIydzZWFyY2gtZm9yd2FyZAorICAgICAg ICAgICAgICAgICAgIydzZWFyY2gtYmFja3dhcmQpCisJCShjaGFyLXRvLXN0cmluZyBjaGFyKSkK KyAgICAgICAoaWYgaXNlYXJjaC1mb3J3YXJkIChiYWNrd2FyZC1jaGFyKSAoZm9yd2FyZC1jaGFy KSkKKyAgICAgICAocG9pbnQpKSkKKyAgIGlzZWFyY2gtZGlyZWN0aW9uYWwteWFuaykpCisKKyhk ZWZ1biBpc2VhcmNoLXlhbmstdW50aWwtbWF0Y2ggKGFyZykKKyAgIlB1bGwgdGV4dCwgdGhyb3Vn aCBtYXRjaCBmb3IgYW5vdGhlciBwYXR0ZXJuLCBpbnRvIHNlYXJjaCBzdHJpbmcuCitZb3UgYXJl IHByb21wdGVkIGZvciB0aGUgcGF0dGVybi4KK1dpdGggYSBwcmVmaXggYXJnLCBtYXRjaCB0aGUg cGF0dGVybiBhcyBhIHJlZ2V4cC4iCisgIChpbnRlcmFjdGl2ZSAiUCIpCisgIChsZXQgKChmd2Qg IChvciBpc2VhcmNoLWZvcndhcmQgIChub3QgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rKSkpCisg ICAgICAgIHBhdHRlcm4pCisgICAgKHdpdGgtaXNlYXJjaC1zdXNwZW5kZWQKKyAgICAgKHNldHEg cGF0dGVybiAgKGlmIGFyZyAocmVhZC1yZWdleHAgIk1hdGNoIHJlZ2V4cDogIikgKHJlYWQtc3Ry aW5nICJNYXRjaDogIikpKSkKKyAgICAoaXNlYXJjaC15YW5rLWludGVybmFsCisgICAgIChsYW1i ZGEgKCkKKyAgICAgICAobGV0ICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiAgdCkpCisgICAg ICAgICAoZnVuY2FsbCAoaWYgYXJnCisgICAgICAgICAgICAgICAgICAgICAgKGlmIGZ3ZCAjJ3Nl YXJjaC1mb3J3YXJkLXJlZ2V4cCAjJ3NlYXJjaC1iYWNrd2FyZC1yZWdleHApCisgICAgICAgICAg ICAgICAgICAgIChpZiBmd2QgIydzZWFyY2gtZm9yd2FyZCAjJ3NlYXJjaC1iYWNrd2FyZCkpCisg ICAgICAgICAgICAgICAgICBwYXR0ZXJuKQorICAgICAgICAgKHBvaW50KSkpCisgICAgIGlzZWFy Y2gtZGlyZWN0aW9uYWwteWFuaykpKQorCisoZGVmaW5lLWlzZWFyY2gteWFuay1tb3ZlbWVudC1j b21tYW5kIGlzZWFyY2gteWFuay10by1rZXktZGVzdGluYXRpb24gKGtleSkKKyAgIkFkanVzdCBz ZWFyY2ggdG8gdXNlIHRleHQgZnJvbSBzZWFyY2ggaGl0IHRocm91Z2ggYSBrZXkgZGVzdGluYXRp b24uCitZb3UgYXJlIHByb21wdGVkIGZvciBhIGtleSBzZXF1ZW5jZSB0aGF0IG1vdmVzIHRoZSBj dXJzb3IuICBUaGUga2V5CitjYW4gZG8gYW55dGhpbmcgZWxzZSBhcyB3ZWxsLCBidXQgb25seSB0 aGUgbmV3IGN1cnNvciBwb3NpdGlvbiBpcyB1c2VkCitieSB0aGUgY29tbWFuZC4KKworSWYgaXQg bWFrZXMgc2Vuc2UgZm9yIHRoZSBrZXksIHlvdSBjYW4gdXNlIGEgcHJlZml4IGFyZyB3aXRoIGBc XDxpc2VhcmNoLW1vZGUtbWFwPlwKK1xcW2lzZWFyY2gteWFuay10by1rZXktZGVzdGluYXRpb25d JwordG8gYXBwbHkgdGhlIHByZWZpeCBhcmcgdG8gdGhlIGtleS4gIEZvciBleGFtcGxlLCBgQy11 IDUgXAorXFxbaXNlYXJjaC15YW5rLXRvLWtleS1kZXN0aW5hdGlvbl0gTS1mJworbW92ZXMgdGhl IGN1cnNvciBmb3J3YXJkIDUgd29yZHMgYW5kIGFkanVzdHMgdGhlIHNlYXJjaCBzdHJpbmcKK2Fj Y29yZGluZ2x5LgorCitJZiB0aGUgbmV3IHBvc2l0aW9uIGlzIG91dHNpZGUgdGhlIGV4aXN0aW5n IHNlYXJjaCBoaXQgdGhlbiB0aGUgdGV4dAorZnJvbSB0aGUgc2VhcmNoIGhpdCB0byB0aGUgbmV3 IHBvc2l0aW9uIGlzIGFkZGVkIHRvIHRoZSBzZWFyY2ggc3RyaW5nLgorSWYgdGhlIHBvc2l0aW9u IGlzIGluc2lkZSB0aGUgaGl0LCB0aGVuIHRoZSB0ZXh0IGZyb20gdGhlIGVkZ2Ugb2YgdGhlCito aXQgdGhyb3VnaCB0aGUgbmV3IHBvc2l0aW9uIGlzIHJlbW92ZWQgZnJvbSB0aGUgc2VhcmNoIHN0 cmluZy4iCisgIChpbnRlcmFjdGl2ZSAia0tleSBzZXF1ZW5jZSAodG8gbW92ZSBjdXJzb3IpOiAi KQorICAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rpb24gIHQpCisgICAoaXNlYXJjaC1tb2RlLW1h cCAgICAgICAgICAgbmlsKQorICAgKGNvbW1hbmQgICAgICAgICAgICAgICAgICAgIChvciAobG9j YWwta2V5LWJpbmRpbmcga2V5IHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChnbG9iYWwta2V5LWJpbmRpbmcga2V5IHQpKSkpCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChj YWxsLWludGVyYWN0aXZlbHkgY29tbWFuZCkKKyAgICAoc2V0cSBpc2VhcmNoLW5ldy1wb3NpdGlv biAgKHBvaW50KSkpKQorCisoZGVmaW5lLWlzZWFyY2gteWFuay1tb3ZlbWVudC1jb21tYW5kIGlz ZWFyY2gteWFuay10aHJvdWdoLW1vdmUgKCkKKyAgIkFkanVzdCBzZWFyY2ggdG8gdXNlIHRleHQg ZnJvbSBzZWFyY2ggaGl0IHRocm91Z2ggYSBuZXcgY3Vyc29yIHBvc2l0aW9uLgorWW91IGVudGVy IGEgcmVjdXJzaXZlIGVkaXQgdG8gbW92ZSB0aGUgY3Vyc29yIGFueSB3YXkgeW91IGxpa2UuCitV c2UgXFxbZXhpdC1yZWN1cnNpdmUtZWRpdF0gdG8gcmVzdW1lIHNlYXJjaCB3aXRoIHRoZSBhZGp1 c3RlZCBzZWFyY2ggc3RyaW5nLgorCitJbiB0aGUgcmVjdXJzaXZlIGVkaXQgeW91IGNhbiBkbyBh bnl0aGluZywgYnV0IHRoZSBlZmZlY3QgdXNlZCBieSB0aGUKK2NvbW1hbmQgaXMgb25seSBjdXJz b3IgbW92ZW1lbnQgdG8gYSBuZXcgcG9zaXRpb24uCisKK0lmIHRoZSBuZXcgcG9zaXRpb24gaXMg b3V0c2lkZSB0aGUgZXhpc3Rpbmcgc2VhcmNoIGhpLHQgdGhlbiB0aGUgdGV4dAorZnJvbSB0aGUg c2VhcmNoIGhpdCB0byB0aGUgbmV3IHBvc2l0aW9uIGlzIGFkZGVkIHRvIHRoZSBzZWFyY2ggc3Ry aW5nLgorSWYgdGhlIHBvc2l0aW9uIGlzIGluc2lkZSB0aGUgaGl0LCB0aGVuIHRoZSB0ZXh0IGZy b20gdGhlIGVkZ2Ugb2YgdGhlCitoaXQgdGhyb3VnaCB0aGUgbmV3IHBvc2l0aW9uIGlzIHJlbW92 ZWQgZnJvbSB0aGUgc2VhcmNoIHN0cmluZy4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKCkKKyAgKHdp dGgtaXNlYXJjaC1zdXNwZW5kZWQKKyAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAobWVzc2FnZSAo c3Vic3RpdHV0ZS1jb21tYW5kLWtleXMKKyAgICAgICAgICAgICAgICJSRUNVUlNJVkUgZWRpdC4g YFxcW2V4aXQtcmVjdXJzaXZlLWVkaXRdJyB0byByZXN1bWUgSXNlYXJjaCIpKQorICAgICAocmVj dXJzaXZlLWVkaXQpCisgICAgIChzZXRxIGlzZWFyY2gtbmV3LXBvc2l0aW9uICAocG9pbnQpKSkp KQogCiAoZGVmdW4gaXNlYXJjaC1jaGFyLWJ5LW5hbWUgKCZvcHRpb25hbCBjb3VudCkKICAgIlJl YWQgYSBjaGFyYWN0ZXIgYnkgaXRzIFVuaWNvZGUgbmFtZSBhbmQgYWRkIGl0IHRvIHRoZSBzZWFy Y2ggc3RyaW5nLgpAQCAtMzAxNCw5ICszMjI3LDE2IEBACiAJCSAgICAobWFwY29uY2F0ICdpc2Vh cmNoLXRleHQtY2hhci1kZXNjcmlwdGlvbiBzdHJpbmcgIiIpKSkpCiAgICAgKGlzZWFyY2gtcHJv Y2Vzcy1zZWFyY2gtc3RyaW5nIHN0cmluZyBtZXNzYWdlKSkpCiAKLShkZWZ1biBpc2VhcmNoLXBy b2Nlc3Mtc2VhcmNoLXN0cmluZyAoc3RyaW5nIG1lc3NhZ2UpCi0gIChzZXRxIGlzZWFyY2gtc3Ry aW5nIChjb25jYXQgaXNlYXJjaC1zdHJpbmcgc3RyaW5nKQotCWlzZWFyY2gtbWVzc2FnZSAoY29u Y2F0IGlzZWFyY2gtbWVzc2FnZSBtZXNzYWdlKSkKKyhkZWZ1biBpc2VhcmNoLXByb2Nlc3Mtc2Vh cmNoLXN0cmluZyAoc3RyaW5nIG1lc3NhZ2UgJm9wdGlvbmFsIHJlc3BlY3QtZGlyZWN0aW9uKQor ICAiQWRkIFNUUklORyB0byBgaXNlYXJjaC1zdHJpbmcnIGFuZCBNRVNTQUdFIHRvIGBpc2VhcmNo LW1lc3NhZ2UnLgorQXBwZW5kIFNUUklORyBpZiBzZWFyY2hpbmcgZm9yd2FyZC4gIFByZXBlbmQg aWYgc2VhcmNoaW5nIGJhY2t3YXJkLiIKKyAgKGxldCAoKGZ3ZCAgKG9yIGlzZWFyY2gtZm9yd2Fy ZCAgKG5vdCByZXNwZWN0LWRpcmVjdGlvbikpKSkKKyAgICAoc2V0cSBpc2VhcmNoLXN0cmluZyAg IChpZiBmd2QKKwkJCSAgICAgICAoY29uY2F0IGlzZWFyY2gtc3RyaW5nIHN0cmluZykKKwkJCSAg ICAgKGNvbmNhdCBzdHJpbmcgaXNlYXJjaC1zdHJpbmcpKQorCSAgaXNlYXJjaC1tZXNzYWdlICAo aWYgZndkCisJCQkgICAgICAgKGNvbmNhdCBpc2VhcmNoLW1lc3NhZ2UgbWVzc2FnZSkKKwkJCSAg ICAgKGNvbmNhdCBtZXNzYWdlIGlzZWFyY2gtbWVzc2FnZSkpKSkKICAgKGlzZWFyY2gtc2VhcmNo LWFuZC11cGRhdGUpKQogCiAMCg== --__156634063477044057abhmp0005.oracle.com--