From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 27715 invoked from network); 24 Jun 2021 21:49:28 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 24 Jun 2021 21:49:28 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1624571368; b=b2nUPVZuI7v/IfneFeI9Y6M81H6ykA//koH6bhHzI/skaw84XenYBwaHAseZ77Xapiqb3w75kn MeHQKDpoBAMfqrFqPUCwxIvtA5zGaNfTang7EtuV7Uzk50NzT5+k7IQORu4bS0VUvaCe+yD6PC msO6SjsPZfv2h/dS5cHkaEMugsCyTkRBu0Q7yzFEwYbdlkhcVTzMqj7l88Xhs/p1ZIE9gzWSOl auLxguo3rTY5T9gxvkdaDYtBgk/3H/3br8+0M5E6Vp/NJooDzwWfs3HssHcmPxnwzB91uKUq5i Z3U4i3utjkVIayql8Ge2/jq8fdPe24DeQYtUB1jkG+KfyQ==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-lj1-f172.google.com) smtp.remote-ip=209.85.208.172; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1624571368; bh=49990JYjB2p9L87iucHM94rrieJlXAtfTqVev2zN04M=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:DKIM-Signature:DKIM-Signature; b=fwV6epWqpkZQWjA+ZoSEKfH3nG0vBnTrrtiR3o/FpCvJ1OWp2axxuNb6I/+rAh6bF7bftTBK9U H5/RaTaPZH8Pdg+qDRReD0yU5a/Ny024eoN44nW2bb0HKc9UtrDCNnQ5bQIhOvK0W0R55toxx7 5M+dI/LSIXslafhgDlGCZO0O36qstDxSD9nBfSdD7k+woIx+NolMPDlAxaK6Lx1OOr4dY5oaYN hh9LJU4bRAaI9aTWBGV/D32X9jJbBzhOjbcr7ladDZ665UdIB8pvlPv+hg1vaPEXzdgzfM5e2X jux0VgsrvpeLylD5vxmcC3WVuDn5JTozFmHPXugM1t+w2w==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID :Date:From:In-Reply-To:References:MIME-Version:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=T212EmhfarTouKdthLTy9st5s9nO3Nxwrskvox3/O6M=; b=kWzCSCiMuxsgmL3X7iA6vzmrsl zMeM052NALeN3lPJ4FFmayzpvw42SWCvfdGViUjhJBMwF3bWsutKxNnWsg+seATAbQT8C07Srdz/2 FZdzGm9o5r5e6eS/PTuxl9OYLi5z2XxjUHDTezz5tM1y2oZwS6orQPDjAkdGZI2Sx8BDOWSYwTV/U Zyv8ip7SSectMUuYWvdrvb6p397n1hG7B3yxGZPfH2Co0w1wbMtfopci0Q+Fv0/P6hHrH0LAHT9zL 63OWzLGF/piVVim3qox6eeBhVdRV72U1upU8UBASBRZjMhIUlV2gwhy/cUlq2bvAfDlG5a3Dc29tK ZadrBrZg==; Received: from authenticated user by zero.zsh.org with local id 1lwXDx-000BDl-UR; Thu, 24 Jun 2021 21:49:26 +0000 Authentication-Results: zsh.org; iprev=pass (mail-lj1-f172.google.com) smtp.remote-ip=209.85.208.172; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-lj1-f172.google.com ([209.85.208.172]:37460) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1lwXDR-000Ato-M0; Thu, 24 Jun 2021 21:48:54 +0000 Received: by mail-lj1-f172.google.com with SMTP id k8so9734633lja.4 for ; Thu, 24 Jun 2021 14:48:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=T212EmhfarTouKdthLTy9st5s9nO3Nxwrskvox3/O6M=; b=rUj4t+HOhbdZbbVlWZALkCPREovNYS0blLp/dc1MMnCimZKKTSy9AVFKQ7KZqbYHq9 evE40Y1BL8sa1aqDufr0gd9b0II5Ye+1JqTweeUfnEQPhzlLGevlkp9NrHy/35HZWvTU /OSA0sM4Ih3cocxXgv5VS8KAfYRKKc9R6zLz4g0LciuqTziEPPkeYMxMEB1JEmD6/Hph vR+NuYygL/JNfFVr6Z53zdHVrFOcHcuRqYMS4x0CwdH+46REU3yHAzRBEUzKMfP4uTj4 dZar4DhEtSEx/Z2jNAi6tfVvtKXjoF4xNak8WsVUP5E60hqywHB9DG2uTHB2s3NhHsvU b8KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=T212EmhfarTouKdthLTy9st5s9nO3Nxwrskvox3/O6M=; b=tDx/Gl9xyjK9rB86l4gBhBF48aOnOKJVH3v42/pimQeVutBeVF63PSw6ofeyAdMqNN xOAamf+xCn7uoCR2TAu7kZVOdYDq14d6Us6AFZswwAP6OHjCNMSEudeNRFgNOe+0ZSYb eUN86/32ZQFXCXqOCKmJjhMuKtaF01KHTth28kjq27mYUysgExINv2Vf5yGGIKH5XTo9 VqzbqJb1/Wuc2zBbb1liUnNbZv3rULoMfdfgNlMUP43BnX88eqxwfh+C55CJdavH38ah poelGknOWzlzUOODQoJARCdQwULqtEGLPaIS1By6a2b65tBb9OKeYUP1sdCO6xaAYmtP On1Q== X-Gm-Message-State: AOAM532fHG49/8abxhts5+o06SsyLvCh7EEEEhYmGu0rE7lWHb8IveSu YD81OFa+lhaNmxyLr560gxJZ3GnkQIIQch0ANHMPWb7LkaE= X-Google-Smtp-Source: ABdhPJzeYXS4c0evfJq1PPARuiaQ7JmLu8/QGmZKT0A4HlcP4oCOXbhhqyFGCPyoOF5ulqBq5v/xTRmxcGD2dNaiE8k= X-Received: by 2002:a05:651c:115:: with SMTP id a21mr5548168ljb.270.1624571332692; Thu, 24 Jun 2021 14:48:52 -0700 (PDT) MIME-Version: 1.0 References: <9c56f50a-d061-4175-958a-6f89f6bae822@www.fastmail.com> <20210624183006.GA16386@tarpaulin.shahaf.local2> In-Reply-To: <20210624183006.GA16386@tarpaulin.shahaf.local2> From: Marlon Richert Date: Fri, 25 Jun 2021 00:48:16 +0300 Message-ID: Subject: Re: Does add-zle-hook-widget violate the contract of ZLE hook widgets? To: Daniel Shahaf Cc: Zsh hackers list Content-Type: multipart/mixed; boundary="00000000000032a46205c589fd45" X-Seq: 49119 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: --00000000000032a46205c589fd45 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jun 24, 2021 at 9:30 PM Daniel Shahaf wrot= e: > > Marlon Richert wrote on Thu, Jun 24, 2021 at 13:34:00 +0300: > > On Thu, Jun 24, 2021 at 1:06 PM Daniel Shahaf = wrote: > > > > > > Marlon Richert wrote on Wed, 23 Jun 2021 20:30 +00:00: > > > > foo implements a perfectly fine zle-line-init widget. It obeys the > > > > contract laid out at > > > > https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Special= -Widgets, > > > > which says nothing about return values. > > > > > > That has two possible interpretations: > > > > > > - Hook functions may set $? however they want > > > > > > - Hook functions should set $? to zero on success and to non-zero > > > otherwise > > > > > > In favour of the first interpretation is that the manual's language > > > doesn't explicitly rule it out and compatibility with hook functions > > > that predate add-zle-hook-widget and don't set $? as > > > add-zle-hook-widget expects. > > > > > > In favour of the second interpretation is that those semantics are th= e > > > default, ubiquitous, baked into the language's syntax, and extensible > > > (same thing as "This bit must be zero" in wire protocol specification= s). > > > > > > I'm voting for the second interpretation. > > > > > > I suppose we could've added something to NEWS/README when add-zle-hoo= k-widget > > > was introduced, if only because this is an interoperability issue (fo= o > > > and bar may be have separate maintainers). > > > > I think this should be mentioned permanently in the manual, exactly > > because we see foo and bar from separate maintainers in the wild. > > I'm ambivalent about this. > > On the one hand, as mentioned, "set $? correctly" is a ground rule that > shouldn't need to be made explicit everywhere it matters. I don't want > to create an expectation that where the manual _doesn't_ explicitly > specify that $? should be set correctly, $?'s value doesn't matter. > > On the one hand, someone who uses =C2=ABzle -N zle-line-init foo=C2=BB ma= y not be > aware of a-z-h-w and of the fact that the return value does have an > effect. > > In balance, I think I would rather see it documented globally that $? > should always be set to zero/non-zero unless explicitly specified > otherwise. Makes sense? That makes sense, but then, it should also be documented what that actually means. If your function returns zero/non-zero, what is expected to happen? Does this always happen? Or are there different classes of functions with different results for zero/non-zero? I can already think of two examples that contradict each other: * In hook functions, callee returning NON-zero causes the caller to refrain from calling more functions. * In completion functions, callee returning ZERO causes the caller to refrain from calling more functions. Those two behave exactly opposite of each other. My point being, I think this is best spelled out everywhere. Zero/non-zero don't always appear to mean the same thing between caller and callee. Clearly it matters, but it doesn't appear to always matter in the same way. > > > > Should that `|| return` be removed? > > > No, because that would break the case of _deliberately_ returning non= -zero > > > from one a-z-h-w hook to prevent further a-z-h-w hooks from running. > > > Granted, that's not a documented promise, but there's no reason to br= eak > > > it, either. > > > > For hooks added through azhw, yes. But hooks added through zle -N > > zle- have no reason to expect that their return value has any > > effect. > > > > I did give some reasons in my previous reply; and compare how drivers > should use their turn indicators even when they don't see anyone on the > road. That's because it's convention everywhere that you signal in the direction to which you turn. However, what convention we're supposed to follow for return values in Zsh is not quite as clear. See my contradictory examples above. > > How about if azhw would ignore the return value _only_ of any > > pre-existing zle -N zle-X widget? For example, this part of the azhw > > code could be modified to wrap the original widget function in a > > function that always returns zero: > > At this point, given that the current behaviour has appeared in stable > releases for 4.5 years now and is _a priori_ preferable, I think it's > better to document the current behaviour and move on. So, basically, an > addition to the incompatible changes section in README (for 5.9) that > describes the change in 5.3. WDYT? I'm fine with that. That documentation needs to be findable, though, from the docs for both zle -N zle-X and azhw. > > Also, regardless of the above, the documentation in > > https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Special-Wid= gets > > could be updated to guide the user towards azhw. > > +1. Anyone interested in writing a patch? Done. See attachment. > > If we are happy with the behavior as-is, then this should be > > documented. In particular, 3rd-party developers should be strongly > > encouraged to use azhw and not zle -N zle-X. > > Some sort of "Best practices for third-party plugin maintainers" > document might be a good idea. Could make it a bit more general and > also answer "Where do I install my completion function to?" for > third-party packages (e.g., _curl) and so on. It could start as > additions to the FAQ. I don't know if the FAQ is the right place. At least, I have never found that document to be useful. =C2=AF\_(=E3=83=84)_/=C2=AF I would pref= er to see these things in the manual. How about putting the actual info in the manual, but link to it from the FAQ? I consider the manual to be Zsh's Single Source of Truth. Better to maintain everything there and not repeat ourselves. --00000000000032a46205c589fd45 Content-Type: text/plain; charset="US-ASCII"; name="0001-Document-important-points-for-ZLE-hook-widgets.txt" Content-Disposition: attachment; filename="0001-Document-important-points-for-ZLE-hook-widgets.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kqbfkox50 RnJvbSA5Y2JjNDlmNDRhOGUxZmZlMGVjZDM3Mzc4ZWQ4MWZjMDA5MGFiNDExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJsb24gUmljaGVydCA8bWFybG9uLnJpY2hlcnRAZ21haWwu Y29tPgpEYXRlOiBGcmksIDI1IEp1biAyMDIxIDAwOjM5OjExICswMzAwClN1YmplY3Q6IFtQQVRD SF0gRG9jdW1lbnQgaW1wb3J0YW50IHBvaW50cyBmb3IgWkxFIGhvb2sgd2lkZ2V0cwoKVW5kZXIg WkxFOgoqIFdhcm4gYWdhaW5zdCBvdmVycmlkaW5nIGV4aXN0aW5nIGhvb2sgd2lkZ2V0cy4KKiBS ZWZlciB0byBgYWRkLXpsZS1ob29rLXdpZGdldGAuCgpVbmRlciBgYWRkLXpsZS1ob29rLXdpZGdl dGA6CiogTm90ZSBhYm91dCByZXR1cm4gdmFsdWVzLgotLS0KIERvYy9ac2gvY29udHJpYi55byB8 IDU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KIERvYy9a c2gvbWFudWFsLnlvICB8ICA2ICsrKystCiBEb2MvWnNoL3psZS55byAgICAgfCAyOCArKysrKysr KysrKysrKysrKystLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDI4IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0RvYy9ac2gvY29udHJpYi55byBiL0RvYy9ac2gvY29u dHJpYi55bwppbmRleCBlNzQ1MjgzNDEuLjQ2YTlhYzA4ZCAxMDA2NDQKLS0tIGEvRG9jL1pzaC9j b250cmliLnlvCisrKyBiL0RvYy9ac2gvY29udHJpYi55bwpAQCAtMTAsNyArMTAsMTEgQEAgdGhl c2UgYXJlIGRvY3VtZW50ZWQgaGVyZS4gIEZvciBkb2N1bWVudGF0aW9uIG9uIG90aGVyIGNvbnRy aWJ1dGVkIGl0ZW1zCiBzdWNoIGFzIHNoZWxsIGZ1bmN0aW9ucywgbG9vayBmb3IgY29tbWVudHMg aW4gdGhlIGZ1bmN0aW9uIHNvdXJjZSBmaWxlcy4KIAogc3RhcnRtZW51KCkKLW1lbnUoVXRpbGl0 aWVzKQorbWVudShBY2Nlc3NpbmcgT24tTGluZSBIZWxwKQorbWVudShSZWNvbXBpbGluZyBGdW5j dGlvbnMpCittZW51KEtleWJvYXJkIERlZmluaXRpb24pCittZW51KER1bXBpbmcgU2hlbGwgU3Rh dGUpCittZW51KE1hbmlwdWxhdGluZyBIb29rIEZ1bmN0aW9ucykKIG1lbnUoUmVjZW50IERpcmVj dG9yaWVzKQogbWVudShPdGhlciBEaXJlY3RvcnkgRnVuY3Rpb25zKQogbWVudShWZXJzaW9uIENv bnRyb2wgSW5mb3JtYXRpb24pCkBAIC0yMywxMCArMjcsOCBAQCBtZW51KFVzZXIgQ29uZmlndXJh dGlvbiBGdW5jdGlvbnMpCiBtZW51KE90aGVyIEZ1bmN0aW9ucykKIGVuZG1lbnUoKQogCi10ZXhp bm9kZShVdGlsaXRpZXMpKFJlY2VudCBEaXJlY3RvcmllcykoKShVc2VyIENvbnRyaWJ1dGlvbnMp Ci1zZWN0KFV0aWxpdGllcykKLQotc3Vic2VjdChBY2Nlc3NpbmcgT24tTGluZSBIZWxwKQordGV4 aW5vZGUoQWNjZXNzaW5nIE9uLUxpbmUgSGVscCkoUmVjb21waWxpbmcgRnVuY3Rpb25zKSgpKFVz ZXIgQ29udHJpYnV0aW9ucykKK3NlY3QoQWNjZXNzaW5nIE9uLUxpbmUgSGVscCkKIGNpbmRleCho ZWxwZmlsZXMgdXRpbGl0eSkKIAogVGhlIGtleSBzZXF1ZW5jZSB0dChFU0MgaCkgaXMgbm9ybWFs bHkgYm91bmQgYnkgWkxFIHRvIGV4ZWN1dGUgdGhlCkBAIC04MCw3ICs4Miw4IEBAIGlmbnptYW4o bm9kZXJlZihQYXJhbWV0ZXJzIFVzZWQgQnkgVGhlIFNoZWxsKSlcCiBpbnN0YWxsYXRpb247IGlm IGl0IGlzIG5vdCwgY29weSB0dChGdW5jdGlvbnMvTWlzYy9ydW4taGVscCkgdG8gYW4KIGFwcHJv cHJpYXRlIGRpcmVjdG9yeS4KIAotc3Vic2VjdChSZWNvbXBpbGluZyBGdW5jdGlvbnMpCit0ZXhp bm9kZShSZWNvbXBpbGluZyBGdW5jdGlvbnMpKEtleWJvYXJkIERlZmluaXRpb24pKEFjY2Vzc2lu ZyBPbi1MaW5lIEhlbHApKFVzZXIgQ29udHJpYnV0aW9ucykKK3NlY3QoUmVjb21waWxpbmcgRnVu Y3Rpb25zKQogY2luZGV4KGZ1bmN0aW9ucywgcmVjb21waWxpbmcpCiBjaW5kZXgoenJlY29tcGls ZSB1dGlsaXR5KQogCkBAIC0xNjgsNyArMTcxLDggQEAgT25jZSB0aGUgZGlnZXN0cyBoYXZlIGJl ZW4gY3JlYXRlZCBhbmQgeW91ciB0dChmcGF0aCkgbW9kaWZpZWQgdG8gcmVmZXIgdG8KIHRoZW0s IHlvdSBjYW4ga2VlcCB0aGVtIHVwIHRvIGRhdGUgYnkgcnVubmluZyB0dCh6cmVjb21waWxlKSB3 aXRoIG5vCiBhcmd1bWVudHMuCiAKLXN1YnNlY3QoS2V5Ym9hcmQgRGVmaW5pdGlvbikKK3RleGlu b2RlKEtleWJvYXJkIERlZmluaXRpb24pKER1bXBpbmcgU2hlbGwgU3RhdGUpKFJlY29tcGlsaW5n IEZ1bmN0aW9ucykoVXNlciBDb250cmlidXRpb25zKQorc2VjdChLZXlib2FyZCBEZWZpbml0aW9u KQogY2luZGV4KGtleWJvYXJkIGRlZmluaXRpb24pCiAKIGZpbmRleCh6a2JkKQpAQCAtMjExLDcg KzIxNSw4IEBAIGlmbnptYW4obm9kZXJlZihQYXJhbWV0ZXJzIFVzZWQgQnkgVGhlIFNoZWxsKSlc CiBpbnN0YWxsYXRpb247IGlmIGl0IGlzIG5vdCwgY29weSB0dChGdW5jdGlvbnMvTWlzYy96a2Jk KSB0byBhbgogYXBwcm9wcmlhdGUgZGlyZWN0b3J5LgogCi1zdWJzZWN0KER1bXBpbmcgU2hlbGwg U3RhdGUpCit0ZXhpbm9kZShEdW1waW5nIFNoZWxsIFN0YXRlKShNYW5pcHVsYXRpbmcgSG9vayBG dW5jdGlvbnMpKEtleWJvYXJkIERlZmluaXRpb24pKFVzZXIgQ29udHJpYnV0aW9ucykKK3NlY3Qo RHVtcGluZyBTaGVsbCBTdGF0ZSkKIGNpbmRleChyZXBvcnRlciB1dGlsaXR5KQogCiBPY2Nhc2lv bmFsbHkgeW91IG1heSBlbmNvdW50ZXIgd2hhdCBhcHBlYXJzIHRvIGJlIGEgYnVnIGluIHRoZSBz aGVsbCwKQEAgLTI4Nyw3ICsyOTIsOCBAQCBhbnkgcHJlZml4LCBldmVuIGEgc2luZ2xlIGxldHRl cjsgdGh1cyB0dChhKSBpcyB0aGUgc2FtZSBhcyB0dChhbGlhc2VzKSwKIHR0KHopIGlzIHRoZSBz YW1lIGFzIHR0KHpzdHlsZXMpLCBldGMuCiBlbmRpdGVtKCkKIAotc3Vic2VjdChNYW5pcHVsYXRp bmcgSG9vayBGdW5jdGlvbnMpCit0ZXhpbm9kZShNYW5pcHVsYXRpbmcgSG9vayBGdW5jdGlvbnMp KFJlY2VudCBEaXJlY3RvcmllcykoRHVtcGluZyBTaGVsbCBTdGF0ZSkoVXNlciBDb250cmlidXRp b25zKQorc2VjdChNYW5pcHVsYXRpbmcgSG9vayBGdW5jdGlvbnMpCiBjaW5kZXgoaG9vayBmdW5j dGlvbiB1dGlsaXR5KQogCiBzdGFydGl0ZW0oKQpAQCAtMzMwLDggKzMzNiw4IEBAIG9wdGlvbnMg dHQoLVV6KSBhcmUgYXBwcm9wcmlhdGUuCiBmaW5kZXgoYWRkLXpsZS1ob29rLXdpZGdldCkKIGl0 ZW0odHQoYWRkLXpsZS1ob29rLXdpZGdldCkgWyB0dCgtTCkgfCB0dCgtZEQpIF0gWyB0dCgtVXpr KSBdIHZhcihob29rKSB2YXIod2lkZ2V0bmFtZSkpKAogU2V2ZXJhbCB3aWRnZXQgbmFtZXMgYXJl IHNwZWNpYWwgdG8gdGhlIGxpbmUgZWRpdG9yLCBhcyBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24K LWlmbnptYW4oU3BlY2lhbCBXaWRnZXRzLCBub2RlcmVmKFpsZSBXaWRnZXRzKSlcCi1pZnptYW4o U3BlY2lhbCBXaWRnZXRzLCBzZWUgem1hbnJlZih6c2h6bGUpKSwKK2lmbnptYW4oSG9vayBXaWRn ZXRzLCBub2RlcmVmKFpsZSBXaWRnZXRzKSlcCitpZnptYW4oSG9vayBXaWRnZXRzLCBzZWUgem1h bnJlZih6c2h6bGUpKSwKIGluIHRoYXQgdGhleSBhcmUgYXV0b21hdGljYWxseSBjYWxsZWQgYXQg c3BlY2lmaWMgcG9pbnRzIGR1cmluZyBlZGl0aW5nLgogVW5saWtlIGZ1bmN0aW9uIGhvb2tzLCB0 aGVzZSBkbyBub3QgdXNlIGEgcHJlZGVmaW5lZCBhcnJheSBvZiBvdGhlciBuYW1lcwogdG8gY2Fs bCBhdCB0aGUgc2FtZSBwb2ludDsgdGhlIHNoZWxsIGZ1bmN0aW9uIHR0KGFkZC16bGUtaG9vay13 aWRnZXQpCkBAIC0zNDAsOCArMzQ2LDggQEAgdGhvc2UgYWRkaXRpb25hbCB3aWRnZXRzLgogCiB2 YXIoaG9vaykgaXMgb25lIG9mIHR0KGlzZWFyY2gtZXhpdCksIHR0KGlzZWFyY2gtdXBkYXRlKSwK IHR0KGxpbmUtcHJlLXJlZHJhdyksIHR0KGxpbmUtaW5pdCksIHR0KGxpbmUtZmluaXNoKSwgdHQo aGlzdG9yeS1saW5lLXNldCksCi1vciB0dChrZXltYXAtc2VsZWN0KSwgY29ycmVzcG9uZGluZyB0 byBlYWNoIG9mIHRoZSBzcGVjaWFsIHdpZGdldHMKLXR0KHpsZS1pc2VhcmNoLWV4aXQpLCBldGMu ICBUaGUgc3BlY2lhbCB3aWRnZXQgbmFtZXMgYXJlIGFsc28gYWNjZXB0ZWQKK29yIHR0KGtleW1h cC1zZWxlY3QpLCBjb3JyZXNwb25kaW5nIHRvIGVhY2ggb2YgdGhlIHNwZWNpYWwgaG9vayB3aWRn ZXQgbmFtZXMKK3R0KHpsZS1pc2VhcmNoLWV4aXQpLCBldGMuICBUaGUgYWN0dWFsIGhvb2sgd2lk Z2V0IG5hbWVzIGFyZSBhbHNvIGFjY2VwdGVkCiBhcyB0aGUgdmFyKGhvb2spIGFyZ3VtZW50Lgog CiB2YXIod2lkZ2V0bmFtZSkgaXMgdGhlIG5hbWUgb2YgYSBaTEUgd2lkZ2V0LiAgSWYgbm8gb3B0 aW9ucyBhcmUgZ2l2ZW4gdGhpcwpAQCAtMzU0LDYgKzM2MCwxMCBAQCBOb3RlIHRoYXQgdGhpcyBt ZWFucyB0aGF0IHRoZSBgdHQoV0lER0VUKScgc3BlY2lhbCBwYXJhbWV0ZXIgdHJhY2tzIHRoZQog dmFyKHdpZGdldG5hbWUpIHdoZW4gdGhlIHdpZGdldCBmdW5jdGlvbiBpcyBjYWxsZWQsIHJhdGhl ciB0aGFuIHRyYWNraW5nCiB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBzcGVjaWFsIGhv b2sgd2lkZ2V0LgogCitBbHNvIG5vdGUgdGhhdCwgZm9yIGVhY2ggaG9vaywgd2hlbiBhbnkgcmVn aXN0ZXJlZCBob29rIHdpZ2RldCByZXR1cm5zIAorbm9uLXplcm8sIHR0KGFkZC16bGUtaG9vay13 aWRnZXQpIHdpbGwgZXhpdCBhbmQgbm90IGNhbGwgYW55IHN1YnNlcXVlbnQgCit3aWRnZXRzLgor CiBJZiB0aGUgb3B0aW9uIHR0KC1kKSBpcyBnaXZlbiwgdGhlIHZhcih3aWRnZXRuYW1lKSBpcyBy ZW1vdmVkIGZyb20KIHRoZSBhcnJheSBvZiB3aWRnZXRzIHRvIGJlIGV4ZWN1dGVkLgogCkBAIC0z NzgsNyArMzg4LDcgQEAgaG9va3MsIHRoZW4gYWxsIGhvb2tzIHNob3VsZCBiZSBtYW5hZ2VkIG9u bHkgdmlhIHRoaXMgZnVuY3Rpb24uCiApCiBlbmRpdGVtKCkKIAotdGV4aW5vZGUoUmVjZW50IERp cmVjdG9yaWVzKShPdGhlciBEaXJlY3RvcnkgRnVuY3Rpb25zKShVdGlsaXRpZXMpKFVzZXIgQ29u dHJpYnV0aW9ucykKK3RleGlub2RlKFJlY2VudCBEaXJlY3RvcmllcykoT3RoZXIgRGlyZWN0b3J5 IEZ1bmN0aW9ucykoTWFuaXB1bGF0aW5nIEhvb2sgRnVuY3Rpb25zKShVc2VyIENvbnRyaWJ1dGlv bnMpCiBjaW5kZXgocmVjZW50IGRpcmVjdG9yaWVzLCBtYWludGFpbmluZyBsaXN0IG9mKQogY2lu ZGV4KGRpcmVjdG9yaWVzLCBtYWludGFpbmluZyBsaXN0IG9mIHJlY2VudCkKIGZpbmRleChjZHIp CkBAIC00MzU3LDkgKzQzNjcsMTAgQEAgVGhlIHJldHVybiBzdGF0dXMgaXMgMCBpZiBhdCBsZWFz dCBvbmUgbWF0Y2ggd2FzIHBlcmZvcm1lZCwgZWxzZSAxLgogZmluZGV4KHJ1bi1oZWxwKQogaXRl bSh0dChydW4taGVscCkgdmFyKGNtZCkpKAogVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBi ZSBpbnZva2VkIGJ5IHRoZSB0dChydW4taGVscCkgWkxFIHdpZGdldCwKLWluIHBsYWNlIG9mIHRo ZSBkZWZhdWx0IGFsaWFzLiAgU2VlIGBBY2Nlc3NpbmcgT24tTGluZSBIZWxwJwotaWZ6bWFuKGFi b3ZlKVwKLWlmbnptYW4oKG5vZGVyZWYoVXRpbGl0aWVzKSkpIGZvciBzZXR1cCBpbnN0cnVjdGlv bnMuCitpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdCBhbGlhcy4gIFNlZQoraWZ6bWFuKHNlZSB0aGUg YmYoQWNjZXNzaW5nIE9uLUxpbmUgSGVscCkgc2VjdGlvbiBhYm92ZSlcCitpZm56bWFuKG5vZGVy ZWYoQWNjZXNzaW5nIE9uLUxpbmUgSGVscCkpCitmb3Igc2V0dXAgaW5zdHJ1Y3Rpb25zLgogCiBJ biB0aGUgZGlzY3Vzc2lvbiB3aGljaCBmb2xsb3dzLCBpZiB2YXIoY21kKSBpcyBhIGZpbGUgc3lz dGVtIHBhdGgsIGl0IGlzCiBmaXJzdCByZWR1Y2VkIHRvIGl0cyByaWdodG1vc3QgY29tcG9uZW50 ICh0aGUgZmlsZSBuYW1lKS4KQEAgLTQ1NzksOSArNDU5MCwxMCBAQCBhcHBlYXIgaW4gdGhlIHpz aCBkaXN0cmlidXRpb24sIGJ1dCBjYW4gYmUgY3JlYXRlZCBieSBsaW5raW5nIHR0KHptdikgdG8K IHRoZSBuYW1lcyB0dCh6Y3ApIGFuZCB0dCh6bG4pIGluIHNvbWUgZGlyZWN0b3J5IGluIHlvdXIg dHQoZnBhdGgpLgogKQogaXRlbSh0dCh6a2JkKSkoCi1TZWUgYEtleWJvYXJkIERlZmluaXRpb24n Ci1pZnptYW4oYWJvdmUpXAotaWZuem1hbigobm9kZXJlZihVdGlsaXRpZXMpKSkuCitTZWUKK2lm em1hbihzZWUgdGhlIGJmKEtleWJvYXJkIERlZmluaXRpb24pIHNlY3Rpb24gYWJvdmUpXAoraWZu em1hbihub2RlcmVmKEtleWJvYXJkIERlZmluaXRpb24pKVwKKy4KICkKIGZpbmRleCh6bXYpCiBy ZWRlZihTUEFDRVMpKDApKHR0KGlmenRleGkoTk9UUkFOUyhAIEAgQCBAICkpaWZuenRleGkoICAg ICkpKQpAQCAtNDY2NCw5ICs0Njc2LDEwIEBAIHR0KHptdikgc291cmNlIGZpbGUsIHVzdWFsbHkg bG9jYXRlZCBpbiBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIG5hbWVkIGluCiB5b3VyIHR0KGZwYXRo KSwgb3IgaW4gdHQoRnVuY3Rpb25zL01pc2Mvem12KSBpbiB0aGUgenNoIGRpc3RyaWJ1dGlvbi4K ICkKIGl0ZW0odHQoenJlY29tcGlsZSkpKAotU2VlIGBSZWNvbXBpbGluZyBGdW5jdGlvbnMnCi1p ZnptYW4oYWJvdmUpXAotaWZuem1hbigobm9kZXJlZihVdGlsaXRpZXMpKSkuCitTZWUKK2lmem1h bihzZWUgdGhlIGJmKFJlY29tcGlsaW5nIEZ1bmN0aW9ucykgc2VjdGlvbiBhYm92ZSlcCitpZm56 bWFuKG5vZGVyZWYoUmVjb21waWxpbmcgRnVuY3Rpb25zKSlcCisuCiApCiBmaW5kZXgoenN0eWxl KykKIGl0ZW0odHQoenN0eWxlKykgdmFyKGNvbnRleHQpIHZhcihzdHlsZSkgdmFyKHZhbHVlKSBb IHR0KCspIHZhcihzdWJjb250ZXh0KSB2YXIoc3R5bGUpIHZhcih2YWx1ZSkgLi4uIF0pKApkaWZm IC0tZ2l0IGEvRG9jL1pzaC9tYW51YWwueW8gYi9Eb2MvWnNoL21hbnVhbC55bwppbmRleCA1MTYw MWFkYmQuLmNiN2NkN2MyYiAxMDA2NDQKLS0tIGEvRG9jL1pzaC9tYW51YWwueW8KKysrIGIvRG9j L1pzaC9tYW51YWwueW8KQEAgLTE2Miw3ICsxNjIsMTEgQEAgbWVudShNaXNjZWxsYW5lb3VzIEZl YXR1cmVzKQogCiBVc2VyIENvbnRyaWJ1dGlvbnMKIAotbWVudShVdGlsaXRpZXMpCittZW51KEFj Y2Vzc2luZyBPbi1MaW5lIEhlbHApCittZW51KFJlY29tcGlsaW5nIEZ1bmN0aW9ucykKK21lbnUo S2V5Ym9hcmQgRGVmaW5pdGlvbikKK21lbnUoRHVtcGluZyBTaGVsbCBTdGF0ZSkKK21lbnUoTWFu aXB1bGF0aW5nIEhvb2sgRnVuY3Rpb25zKQogbWVudShSZWNlbnQgRGlyZWN0b3JpZXMpCiBtZW51 KE90aGVyIERpcmVjdG9yeSBGdW5jdGlvbnMpCiBtZW51KFZlcnNpb24gQ29udHJvbCBJbmZvcm1h dGlvbikKZGlmZiAtLWdpdCBhL0RvYy9ac2gvemxlLnlvIGIvRG9jL1pzaC96bGUueW8KaW5kZXgg OTY5NGExZjc0Li5kNTc2M2I0OTEgMTAwNjQ0Ci0tLSBhL0RvYy9ac2gvemxlLnlvCisrKyBiL0Rv Yy9ac2gvemxlLnlvCkBAIC0xMTM2LDExICsxMTM2LDMxIEBAIGV4YW1wbGUoaWYgW1sgJFpMRV9T VEFURSA9PSAqZ2xvYmFsaGlzdG9yeSppbnNlcnQqIF1dOyB0aGVuIC4uLjsgZmkpCiApCiBlbmRp dGVtKCkKIAotc3Vic2VjdChTcGVjaWFsIFdpZGdldHMpCitzdWJzZWN0KEhvb2sgV2lkZ2V0cykK IAotVGhlcmUgYXJlIGEgZmV3IHVzZXItZGVmaW5lZCB3aWRnZXRzIHdoaWNoIGFyZSBzcGVjaWFs IHRvIHRoZSBzaGVsbC4KLUlmIHRoZXkgZG8gbm90IGV4aXN0LCBubyBzcGVjaWFsIGFjdGlvbiBp cyB0YWtlbi4gIFRoZSBlbnZpcm9ubWVudAotcHJvdmlkZWQgaXMgaWRlbnRpY2FsIHRvIHRoYXQg Zm9yIGFueSBvdGhlciBlZGl0aW5nIHdpZGdldC4KK1RoZXJlIGFyZSBhIGZldyB3aWRnZXQgbmFt ZXMgdGhhdCBhcmUgc3BlY2lhbCB0byB0aGUgc2hlbGwsIHdpdGggZWFjaCBuYW1lIAorY29ycmVz cG9uZGluZyB0byBhIFpMRSBldmVudCBob29rLiBGb3IgZWFjaCBob29rIG5hbWUsIGlmIGEgdXNl ci1kZWZpbmVkIHdpZGdldCAKK2V4aXN0cyB3aXRoIHRoZSBuYW1lLCB0aGlzIHdpZGdldCBpcyBj YWxsZWQgYXV0b21hdGljYWxseSB3aGVuIGFuIGV2ZW50IAorYXNzb2NpYXRlZCB3aXRoIHRoZSBo b29rIG9jY3VycywgYXMgZGVzY3JpYmVkIGZvciBob29rIG5hbWUsIGJlbG93LiBJZiBubyAKK3dp ZGdldCB3aXRoIGEgcGFydGljdWxhciBob29rIG5hbWUgZXhpdHMsIHRoZW4gbm8gYWN0aW9uIGlz IHRha2VuIGZvciB0aGUgCithc3NvY2lhdGVkIGV2ZW50cy4gT3RoZXJ3aXNlLCB0aGUgZW52aXJv bm1lbnQgaW4gd2hpY2ggYSBob29rIHdpZGdldCBydW5zIGlzIAoraWRlbnRpY2FsIHRvIHRoYXQg Zm9yIGFueSBvdGhlciB3aWRnZXQuCisKK1BsZWFzZSBub3RlOgorc3RhcnRpdGVtaXplKCkKK2l0 ZW1peihXaGVuIGEgd2lkZ2V0IHdpdGggcGFydGljdWxhciBuYW1lIGlzIGNyZWF0ZWQsIGl0IHJl cGxhY2VzIGFueSBleGlzdGluZyAKK3dpZGdldCB3aXRoIHRoZSBzYW1lIG5hbWUsIHJlZ2FyZGxl c3Mgb2Ygd2hldGhlciB0aGF0IG5hbWUgaXMgc3BlY2lhbCB0byBzaGVsbC4KK0JlIGF3YXJlIG9m IHRoaXMgd2hlbiB1c2luZyB0dCh6bGUgLU4pIHRvIGNyZWF0ZSBhIGhvb2sgd2lkZ2V0LCBhcyB5 b3UgbWlnaHQKK2JlIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGhvb2sgd2lkZ2V0IHdpdGggdGhl IHNhbWUgbmFtZSB0aGF0J3MgYWxyZWFkeSBpbgorcGxhY2UuKQoraXRlbWl6KElmIHlvdXIgaW50 ZW50aW9uIGlzIG5vdCB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgaG9vayB3aWRnZXQsIGJ1dCAK K3JhdGhlciB0byBhZGQgYW5vdGhlciB3aWRnZXQgZm9yIHRoZSBzYW1lIGhvb2ssIHRoZW4geW91 IHNob3VsZCBzdHJvbmdseSAKK2NvbnNpZGVyIHVzaW5nIHRoZSB0dChhZGQtemxlLWhvb2std2lk Z2V0KSBmdW5jdGlvbiwgd2hpY2ggZW5hYmxlcyBtdWx0aXBsZSAKK3dpZGdldCBmdW5jdGlvbnMg dG8gYmUgZGVmaW5lZCBmb3IgdGhlIHNhbWUgWkxFIGhvb2suIFNlZQoraWZ6bWFuKHRoZSBzdWJz ZWN0aW9uIE1hbmlwdWxhdGluZyBIb29rIEZ1bmN0aW9ucyBpbiB6bWFucmVmKHpzaG1pc2MpKVwK K2lmbnptYW4obm9kZXJlZihNYW5pcHVsYXRpbmcgSG9vayBGdW5jdGlvbnMpKQorZm9yIG1vcmUg aW5mby4pCitlbmRpdGVtaXplKCkKIAogc3RhcnRpdGVtKCkKIHRpbmRleCh6bGUtaXNlYXJjaC1l eGl0KQotLSAKMi4zMC4xIChBcHBsZSBHaXQtMTMwKQoK --00000000000032a46205c589fd45--