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.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 27336 invoked from network); 6 Aug 2023 22:13:00 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 6 Aug 2023 22:13:00 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1691359980; b=adsW3t5D9Iju0ZBUL9kmkGf4nfSCac2A9SU+KOy5a1S4tgAwmMG3tG/dGWqZuLk/8c9TOf7RgQ m1Ko/6FE0trJt7svQKKeoJGdJePbYzTMUTISsew0fgUy4cyf0cRunIngZWf/pfDIEGz5RfwHrh zZwhwLK7bRRtFjiGYNmWIe8C6TYTlI55HBDLvI90KLlx5dAnB4GXUUIkDxb+kqd4Gkdo/XC4hw lWJfFCytmNDTqStXD1s/ANM9QMV8j8AgpI/Ni2xvN5JobwjfPNn04wtwpfc6SiHfiX4sUDCp3/ 3oCBW3PGCYauk4h8z34aRkgLlZtfj4zt2KghfVZAUCH93A==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-ej1-f44.google.com) smtp.remote-ip=209.85.218.44; dkim=pass header.d=brasslantern-com.20221208.gappssmtp.com header.s=20221208 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1691359980; bh=0t7C3QitttLLKrBcEekhik1auGK1xW+JuPS8Cfz0OcQ=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:MIME-Version: DKIM-Signature:DKIM-Signature; b=bQY9w8AyiFf2AEaEB8Zgaqyxf0FEbgkJvla5c3pIZ1fez/uA2He/82TBS8lEOp32Svt7yW/sQz /NCYb0VBFzfeuBaX1ELsihgwo/vkTZFTOTRkx7jW8FehWQaHsqM3Tvc0rLe07bbnYWs/qGLt5P RZudrN1HTRMpYgwHtHXNyOYgWRWyBszsczOozYJLbW9TOHv8UnAvclFvHK6lobQo2kyUcjojyB r1yujeJdt+wIDTlJic07urf8kh8brgDAPjYay7jSDhxLDxSH8wMMeXdwgeE5tm48XNWgEHag6J lyPT/TFysb6QvcpB9AwYT6DBIXSdLUoFvr250Lg+47sS3Q==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:To:Subject:Message-ID: Date:From:MIME-Version:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=7j2PlBpHcqXbPX+lKfrzKuSPAwO3XJp6yNutd1FcmJE=; b=OGPDeDdzy7QQYxMXqLJyJKA+gw vBDgl5030gfPNinnT+aJ0Cls8lBnV/4Hm4/1t1WTW3o7SKj9R8QJJdKoeENXJvQVQjp5BpC1yfi3L fqpvDhkOk+RbmJkVmbFON8GY9jn+g23SMmsUrS1Ub0TdM1RpgoKQFdf3svXkPpsyS5igdcG2doSrE RUuXbC+6FMjONQzr05WOYdB7W44fYU21U0JZ2nio7ZHO8xgo86CB8m5FvpYqvcVx+l0lAQJ2M2znp BSSjTX6Zgcn3x6QkO0fNJJQL9ybfv4eyrwdzOBsTvc3z/ELisxVpIwg326I3yS86qGmiC8/3t4YGf 9oWs71xw==; Received: by zero.zsh.org with local id 1qSlzf-0006G1-SR; Sun, 06 Aug 2023 22:12:59 +0000 Authentication-Results: zsh.org; iprev=pass (mail-ej1-f44.google.com) smtp.remote-ip=209.85.218.44; dkim=pass header.d=brasslantern-com.20221208.gappssmtp.com header.s=20221208 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none Received: from mail-ej1-f44.google.com ([209.85.218.44]:49321) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1qSlzM-0005wA-BI; Sun, 06 Aug 2023 22:12:41 +0000 Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-99bf8e5ab39so583469266b.2 for ; Sun, 06 Aug 2023 15:12:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20221208.gappssmtp.com; s=20221208; t=1691359960; x=1691964760; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=7j2PlBpHcqXbPX+lKfrzKuSPAwO3XJp6yNutd1FcmJE=; b=W6gie5IMQkOeru8ppX3SzOb7FrFj1vfCMLn1t2j3mVK67/WxrmytltLo5gpM63Msh6 FCt1iZJzsKk78QbtN6hVWha1fY5d3Kzm5PiIyyHHAiBug8Gwd2EAnTOhAY/2FN5T1i5K SH+7Y8EO6tWx3ja+yuoneMhqvieJPYh/hWn/kZ/xmVPr+lzTZS59qlS0XOse7ju14eog /ERnh+ApLE2ruCqa0nQLwo2oB4Sv8zEWvsT5k6ewuT5+QaZHe40n8N5WQUrfXEM3sUPE 3aI3Vfh6UzKiTX9XXGH/oT46cBAy5IWJfGp79G5ybEw3TLJo7wMcnvwIbPIaLuG6Uv8r llPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691359960; x=1691964760; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=7j2PlBpHcqXbPX+lKfrzKuSPAwO3XJp6yNutd1FcmJE=; b=bqgMpPfphO4Hhv2fIMnzH8nlxKppSX4KePfkCoKvyyyJQ6RxONn60CMDfCMA5IvAIf 9WPFSDoHkGLJ01Z8kLw5YrB+Ocntwg+/yxDZ+/wEsfh2DyHJ5L+lBwCEWvpwyq7cbeau rM1YS1lh1t1Iy+hC4dW4F0C4eEbRyXXqAb5UUsk/IcBIEZTmoxDEwO3UcmKlZYHStxd3 h+X0U4/g7T9+1nkvl+FBakD7A7gZZFaCAc1cIpO+bZV1YMMJiNSWVj0izOrpoT+OWd+o gnqDIfZVGMNDVEFRo42vJdpdUasacbQql1b5MoDcbFB6e6e2L/sB7zxqAByA9TI5LKk3 qxMQ== X-Gm-Message-State: AOJu0YyuKnaj2kL7P4SoRl1zmPrQe5x68QvimHhr9lUDKJ1AZQFSIAlc pSh7FXm/1C6OYdz7BSYNwZNGrtx7x42lO34Xq3uPPkPGt7OCbmjuIV0= X-Google-Smtp-Source: AGHT+IHqRjdEoTcfaJILJu4N4SeUQjWmnaSdjsoR8gBAKSI5gC8x95/lhfWIOLzlUqjbGzEUOKhL49NmSVIgdhJ57mc= X-Received: by 2002:a17:907:78cb:b0:994:5340:22f4 with SMTP id kv11-20020a17090778cb00b00994534022f4mr7242659ejc.6.1691359959554; Sun, 06 Aug 2023 15:12:39 -0700 (PDT) MIME-Version: 1.0 From: Bart Schaefer Date: Sun, 6 Aug 2023 15:12:28 -0700 Message-ID: Subject: [PATCH] Improved _shadow / _unshadow To: Zsh hackers list Content-Type: multipart/mixed; boundary="00000000000093c8400602486d3b" X-Seq: 52026 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: --00000000000093c8400602486d3b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Jul 4, 2023 at 12:06=E2=80=AFAM Marlon Richert wrote: > > Perhaps then at least add documentation for _shadow to compsys.yo? I did that the other day (7/26, ChangeLog "unposted (cf. 51899): Doc/Zsh/compsys.yo: document _shadow") and after reading my own documentation, decided I didn't like what it said. Consequently I've produced the attached patch. The most significant visible change is that _unshadow no longer requires any arguments (and ignores any that it gets), instead it just unwinds anything done by the most recent previous call to _shadow. This includes a special case for more than one call to _shadow with the same -s suffix argument, removing my objection to Marlon's _approximate patch in workers/51861. On Thu, Jun 15, 2023 at 7:29=E2=80=AFAM Marlon Richert wrote: > > I would find _shadow useful in my own Zsh code, too, not just completions= . How > about moving it from Completion/ to Functions/? To address this, this patch adds Functions/Misc/mkshadow, which defines wrappers around _shadow and _unshadow. Although I didn't explicitly mention the reasoning in the doc, these are "nofork-ready" in that they return the suffix in $REPLY, so once those patches are applied one can do local suffix=3D${| mkshadow ... } This is actually implemented via _shadow except that it won't clobber an existing $REPLY whereas mkshadow unsets REPLY on the way in. Other changes under the hood: * Use namespaces for the global variables used to track state * Keep track of whether the shadowed command is a function, builtin, or external, so that the placeholder "command@suffix" function is consistently created/removed * Handle many pathological cases such as wanting to shadow the "-" precommand modifier (although there's still no way to fully duplicate the precommand behavior) And, update the doc for all of this. --00000000000093c8400602486d3b Content-Type: text/plain; charset="US-ASCII"; name="improved_shadow.txt" Content-Disposition: attachment; filename="improved_shadow.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lkzz8j3m0 ZGlmZiAtLWdpdCBhL0NvbXBsZXRpb24vQmFzZS9VdGlsaXR5L19zaGFkb3cgYi9Db21wbGV0aW9u L0Jhc2UvVXRpbGl0eS9fc2hhZG93CmluZGV4IDViMGY3OWMzNi4uYjVhOGFjYjI0IDEwMDY0NAot LS0gYS9Db21wbGV0aW9uL0Jhc2UvVXRpbGl0eS9fc2hhZG93CisrKyBiL0NvbXBsZXRpb24vQmFz ZS9VdGlsaXR5L19zaGFkb3cKQEAgLTgsNyArOCw3IEBACiAjICAgIH0KICMgICAgIyBJbnZva2Ug Y2FsbGVycyBvZiBmbmFtZQogIyAgfSBhbHdheXMgewotIyAgICBfdW5zaGFkb3cgZm5hbWUKKyMg ICAgX3Vuc2hhZG93CiAjICB9CiAjIyBBbHRlcm5hdGUgdXNhZ2U6CiAjIHsKQEAgLTE5LDcgKzE5 LDcgQEAKICMgICB9CiAjICAgIyBJbnZva2UgY2FsbGVycyBvZiBmbmFtZQogIyB9IGFsd2F5cyB7 Ci0jICAgX3Vuc2hhZG93IC1zIHN1ZmZpeCBmbmFtZQorIyAgIF91bnNoYWRvdwogIyB9CiAjIwog CkBAIC0zMywzNiArMzMsNjIgQEAgem1vZGxvYWQgenNoL3BhcmFtZXRlciAjIE9yIHdoYXQ/CiAj IFRoaXMgcHJvYmFibHkgbmV2ZXIgY29tZXMgdXAsIGJ1dCBwcm90ZWN0IG91cnNlbGYgZnJvbSBy ZWN1cnNpdmUgY2FsbAogIyBjaGFpbnMgdGhhdCBtYXkgZHVwbGljYXRlIHRoZSB0b3AgZWxlbWVu dHMgb2YgJGZ1bmNzdGFjayBieSBjcmVhdGluZwogIyBhIGNvdW50ZXIgb2YgX3NoYWRvdyBjYWxs cyBhbmQgdXNpbmcgaXQgdG8gbWFrZSBzaGFkb3cgbmFtZXMgdW5pcXVlLgotdHlwZXNldCAtZ0hp IF9zaGFkb3dkZXB0aD0wCitidWlsdGluIHR5cGVzZXQgLWdIaSAuc2hhZG93LmRlcHRoPTAKK2J1 aWx0aW4gdHlwZXNldCAtZ0hhIC5zaGFkb3cuc3RhY2sKIAogIyBDcmVhdGUgYSBjb3B5IG9mIGVh Y2ggZm5hbWUgc28gdGhhdCBhIGNhbGxlciBtYXkgcmVkZWZpbmUKIF9zaGFkb3coKSB7Ci0gIGxv Y2FsIC1BIGZzZng9KCAtcyAke2Z1bmNzdGFja1syXX06JHtmdW5jdHJhY2VbMl19OiQoKF9zaGFk b3dkZXB0aCsxKSkgKQotICBsb2NhbCBmbmFtZQorICBlbXVsYXRlIC1MIHpzaAorICBsb2NhbCAt QSBmc2Z4PSggLXMgJHtmdW5jc3RhY2tbMl19OiR7ZnVuY3RyYWNlWzJdfTokKCguc2hhZG93LmRl cHRoKzEpKSApCisgIGxvY2FsIGZuYW1lIHNoYWRvd25hbWUKKyAgbG9jYWwgLWEgZm5hbWVzCiAg IHpwYXJzZW9wdHMgLUsgLUEgZnNmeCAtRCBzOgogICBmb3IgZm5hbWU7IGRvCi0gICAgbG9jYWwg c2hhZG93bmFtZT0ke2ZuYW1lfUAke2ZzZnhbLXNdfQotICAgICgoICR7K2Z1bmN0aW9uc1skZm5h bWVdfSApKSAmJgotICAgICAgYnVpbHRpbiBmdW5jdGlvbnMgLWMgJGZuYW1lICRzaGFkb3duYW1l CisgICAgc2hhZG93bmFtZT0ke2ZuYW1lfUAke2ZzZnhbLXNdfQorICAgIGlmICgoICR7K2Z1bmN0 aW9uc1skc2hhZG93bmFtZV19ICkpCisgICAgdGhlbgorICAgICAgIyBDYWxsZWQgYWdhaW4gd2l0 aCB0aGUgc2FtZSAtcywganVzdCBpZ25vcmUgaXQKKyAgICAgIGNvbnRpbnVlCisgICAgZWxpZiAo KCAkeytmdW5jdGlvbnNbJGZuYW1lXX0gKSkKKyAgICB0aGVuCisgICAgICBidWlsdGluIGZ1bmN0 aW9ucyAtYyAtLSAkZm5hbWUgJHNoYWRvd25hbWUKKyAgICAgIGZuYW1lcys9KGZAJGZuYW1lKQor ICAgIGVsaWYgKCggJHsrYnVpbHRpbnNbJGZuYW1lXX0gKSkKKyAgICB0aGVuCisgICAgICBldmFs ICJmdW5jdGlvbiAtLSAkc2hhZG93bmFtZSB7IGJ1aWx0aW4gJGZuYW1lIFwiXCRAXCIgfSIKKyAg ICAgIGZuYW1lcys9KGJAJGZuYW1lKQorICAgIGVsc2UKKyAgICAgIGV2YWwgImZ1bmN0aW9uIC0t ICRzaGFkb3duYW1lIHsgY29tbWFuZCAkZm5hbWUgXCJcJEBcIiB9IgorICAgICAgZm5hbWVzKz0o Y0AkZm5hbWUpCisgICAgZmkKICAgZG9uZQotICAoKF9zaGFkb3dkZXB0aCsrKSkKKyAgW1sgLXog JFJFUExZIF1dICYmIFJFUExZPSR7ZnNmeFstc119CisgIGJ1aWx0aW4gc2V0IC1BIC5zaGFkb3cu c3RhY2sgJHtmc2Z4Wy1zXX0gJGZuYW1lcyAtLSAkey5zaGFkb3cuc3RhY2t9CisgICgoLnNoYWRv dy5kZXB0aCsrKSkKIH0KIAogIyBSZW1vdmUgdGhlIHJlZGVmaW5lZCBmdW5jdGlvbiBhbmQgc2hh ZG93aW5nIG5hbWUKIF91bnNoYWRvdygpIHsKLSAgbG9jYWwgLUEgZnNmeD0oIC1zICR7ZnVuY3N0 YWNrWzJdfToke2Z1bmN0cmFjZVsyXX06JHtfc2hhZG93ZGVwdGh9ICkKLSAgbG9jYWwgZm5hbWUK LSAgenBhcnNlb3B0cyAtSyAtQSBmc2Z4IC1EIHM6Ci0gIGZvciBmbmFtZTsgZG8KLSAgICBsb2Nh bCBzaGFkb3duYW1lPSR7Zm5hbWV9QCR7ZnNmeFstc119Ci0gICAgaWYgKCggJHsrZnVuY3Rpb25z WyRzaGFkb3duYW1lXX0gKSk7IHRoZW4KLSAgICAgIGJ1aWx0aW4gZnVuY3Rpb25zIC1jICRzaGFk b3duYW1lICRmbmFtZQotICAgICAgYnVpbHRpbiB1bmZ1bmN0aW9uICRzaGFkb3duYW1lCi0gICAg ZWxpZiAoKCAkeytmdW5jdGlvbnNbJGZuYW1lXX0gKSk7IHRoZW4KLSAgICAgIGJ1aWx0aW4gdW5m dW5jdGlvbiAkZm5hbWUKKyAgZW11bGF0ZSAtTCB6c2gKKyAgbG9jYWwgZm5hbWUgc2hhZG93bmFt ZSBmc2Z4PSR7LnNoYWRvdy5zdGFja1sxXX0KKyAgbG9jYWwgLWEgZm5hbWVzCisgIFtbIC1uICRm c2Z4IF1dIHx8IHJldHVybiAxCisgIHNoaWZ0IC5zaGFkb3cuc3RhY2sKKyAgd2hpbGUgW1sgJHsu c2hhZG93LnN0YWNrWzFdP25vIHNoYWRvd3N9ICE9IC0tIF1dOyBkbworICAgIGZuYW1lPSR7LnNo YWRvdy5zdGFja1sxXSM/QH0KKyAgICBzaGFkb3duYW1lPSR7Zm5hbWV9QCR7ZnNmeH0KKyAgICBp ZiAoKCAkeytmdW5jdGlvbnNbJGZuYW1lXX0gKSk7IHRoZW4KKyAgICAgIGJ1aWx0aW4gdW5mdW5j dGlvbiAtLSAkZm5hbWUKICAgICBmaQorICAgIGNhc2UgJHsuc2hhZG93LnN0YWNrWzFdfSBpbgor ICAgICAgKGZAKikgYnVpbHRpbiBmdW5jdGlvbnMgLWMgLS0gJHNoYWRvd25hbWUgJGZuYW1lIDsm CisgICAgICAoW2JjXUAqKSBidWlsdGluIHVuZnVuY3Rpb24gLS0gJHNoYWRvd25hbWUgOzsKKyAg ICBlc2FjCisgICAgc2hpZnQgLnNoYWRvdy5zdGFjawogICBkb25lCi0gICgoX3NoYWRvd2RlcHRo LS0pKQorICBbWyAteiAkUkVQTFkgXV0gJiYgUkVQTFk9JGZzZngKKyAgc2hpZnQgLnNoYWRvdy5z dGFjaworICAoKC5zaGFkb3cuZGVwdGgtLSkpCiB9CiAKICMgVGhpcyBpcyB0cmlja3kuICBXaGVu IHdlIGNhbGwgX3NoYWRvdyByZWN1cnNpdmVseSBmcm9tIGF1dG9sb2FkLApkaWZmIC0tZ2l0IGEv RG9jL1pzaC9jb21wc3lzLnlvIGIvRG9jL1pzaC9jb21wc3lzLnlvCmluZGV4IDMzYmFlYWI0OS4u M2Y3MDhlYjVhIDEwMDY0NAotLS0gYS9Eb2MvWnNoL2NvbXBzeXMueW8KKysrIGIvRG9jL1pzaC9j b21wc3lzLnlvCkBAIC01MjI5LDEzICs1MjI5LDEyIEBAIGFuZCBoZW5jZSBpcyBub3Qgbm9ybWFs bHkgY2FsbGVkIGV4cGxpY2l0bHkuCiApCiBmaW5kZXgoX3NoYWRvdykKIGZpbmRleChfdW5zaGFk b3cpCi14aXRlbSh0dChfc2hhZG93KSBbIHR0KC1zKSB2YXIoc3VmZml4KSBdIHZhcihjb21tYW5k X25hbWUpIC4uLikKLWl0ZW0odHQoX3Vuc2hhZG93KSBbIHR0KC1zKSB2YXIoc3VmZml4KSBdIHZh cihjb21tYW5kX25hbWUpIC4uLikoCit4aXRlbSh0dChfc2hhZG93KSBbIHR0KC1zKSB2YXIoc3Vm Zml4KSBdIFsgLS0gXSB2YXIoY29tbWFuZF9uYW1lKSAuLi4pCitpdGVtKHR0KF91bnNoYWRvdykp KAogVGhlIHR0KF9zaGFkb3cpIGZ1bmN0aW9uIGNyZWF0ZXMgYSBjb3B5IG9mIGVhY2ggb2YgdGhl IHNoZWxsIGZ1bmN0aW9ucwogaW4gdGhlIHZhcihjb21tYW5kX25hbWUpIGFyZ3VtZW50cy4gIFRo ZSBvcmlnaW5hbCBmdW5jdGlvbnMgY2FuIHRoZW4KLWJlIHJlcGxhY2VkIGJ5IG5ldyBpbXBsZW1l bnRhdGlvbnMuICBBIGxhdGVyIGNhbGwgdG8gdHQoX3Vuc2hhZG93KSwKLXdpdGggdGhlIHNhbWUg dmFyKGNvbW1hbmRfbmFtZSkgbGlzdCwgcmVtb3ZlcyB0aGUgbmV3IGltcGxlbWVudGF0aW9ucywK LWlmIGFueSwgYW5kIHJlc3RvcmVzIHRoZSBvcmlnaW5hbHMuCitiZSByZXBsYWNlZCBieSBuZXcg aW1wbGVtZW50YXRpb25zLiAgQSBsYXRlciBjYWxsIHRvIHR0KF91bnNoYWRvdykKK3JlbW92ZXMg dGhlIG5ldyBpbXBsZW1lbnRhdGlvbnMsIGlmIGFueSwgYW5kIHJlc3RvcmVzIHRoZSBvcmlnaW5h bHMuCiAKIFJlY29tbWVuZGVkIHVzYWdlIGlzIHRvIHBhaXIgdHQoX3NoYWRvdykgYW5kIHR0KF91 bnNoYWRvdykgY2FsbHMgYnkKIHVzZSBvZiBhbiBgdHQoYWx3YXlzKScgYmxvY2s6CkBAIC01MjQ2 LDMwICs1MjQ1LDM4IEBAIGV4YW1wbGUoewogICB9CiAgICMgSW52b2tlIGNhbGxlcnMgb2YgZm5h bWUKIH0gYWx3YXlzIHsKLSAgX3Vuc2hhZG93IGZuYW1lCisgIF91bnNoYWRvdwogfSkKIAotQW55 IHZhcihjb21tYW5kX25hbWUpIG1heSBpbnN0ZWFkIGJlIGEgYnVpbHRpbiwgYnV0IGluIHRoYXQg Y2FzZSBubwotY29weSBpcyBjcmVhdGVkLiAgVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgYW4gaW5p dGlhbCB0dChfc2hhZG93KSBpcwotZm9sbG93ZWQgYnkgY3JlYXRpbmcgYSB3cmFwcGVyIGZ1bmN0 aW9uLCBhbmQgdGhlcmFmdGVyIGFueSBuZXN0ZWQgb3IKLXJlY3Vyc2l2ZSBjYWxscyB0aHVzIGNv cHkgYW5kIHJlcGxhY2UgdGhlIHdyYXBwZXIgZnVuY3Rpb24uCitUaGUgdmFyKHN1ZmZpeCksIGlm IHN1cHBsaWVkLCBpcyBwcmVwZW5kZWQgYnkgYW4gYHR0KEApJyBjaGFyYWN0ZXIgYW5kCit0aGVu IGFwcGVuZGVkIHRvIGVhY2ggdmFyKGNvbW1hbmRfbmFtZSkgdG8gY3JlYXRlIHRoZSBjb3B5LiAg VGh1cworZXhhbXBsZShfc2hhZG93IC1zIFhYIGZvbykKK2NyZWF0ZXMgYSBmdW5jdGlvbiBuYW1l ZCBgdHQoZm9vQFhYKScuICBUaGlzIHByb3ZpZGVzIGEgd2VsbC1rbm93bgorbmFtZSBmb3IgdGhl IG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGlmIHRoZSBuZXcgaW1wbGVtZW50YXRpb24gbmVlZHMK K3RvIGNhbGwgaXQgYXMgYSB3cmFwcGVyLiAgSWYgYSBuZXN0ZWQgY2FsbCB0byAgdHQoX3NoYWRv dykgdXNlcyB0aGUKK3NhbWUgdmFyKHN1ZmZpeCksIGVtKG5vIG5ldyBjb3B5IGlzIG1hZGUpLiAg VGhlIHByZXN1bXB0aW9uIHRodXMgaXMKK3RoYXQgc3VmZml4ZXMgYW5kIG5ldyBpbXBsZW1lbnRh dGlvbnMgY29ycmVzcG9uZCBvbmUgdG8gb25lLgorCitJZiB2YXIoY29tbWFuZF9uYW1lKSBpcyBh IGJ1aWx0aW4gb3IgZXh0ZXJuYWwgY29tbWFuZCwgYW5kIHRoZXJlIGhhcyBiZWVuCitubyBwcmVj ZWRpbmcgdHQoX3NoYWRvdykgcmVwbGFjZW1lbnQgbWFkZSwgdGhlIGZ1bmN0aW9uIHNvIGNyZWF0 ZWQgY2FsbHMKK3RoZSBzaGFkb3dlZCBuYW1lIHByZWZpeGVkIGJ5IHRoZSB0dChidWlsdGluKSBv ciB0dChjb21tYW5kKSBrZXl3b3JkcyBhcworYXBwcm9wcmlhdGUuCiBleGFtcGxlKHsKLSAgX3No YWRvdyBjb21wYWRkCi0gIGNvbXBhZGQgTFBBUigpUlBBUigpIHsgYnVpbHRpbiBjb21wYWRkIC1P IHRtcGFyciAiJEAiIH0KKyAgX3NoYWRvdyAtcyB3cmFwIGNvbXBhZGQKKyAgY29tcGFkZCBMUEFS KClSUEFSKCkgeworICAgICMgY29tcGFkZEB3cmFwIHJ1bnMgYnVpbHRpbiBjb21wYWRkCisgICAg Y29tcGFkZEB3cmFwIC1PIHRtcGFyciAiJEAiIH0KIH0gYWx3YXlzIHsKLSAgX3Vuc2hhZG93IGNv bXBhZGQKKyAgX3Vuc2hhZG93CiB9KQogCi1UaGUgdmFyKHN1ZmZpeCksIGlmIHN1cHBsaWVkLCBp cyBwcmVwZW5kZWQgYnkgYW4gYHR0KEApJyBjaGFyYWN0ZXIgYW5kCi10aGVuIGFwcGVuZGVkIHRv IGVhY2ggdmFyKGNvbW1hbmRfbmFtZSkgdG8gY3JlYXRlIHRoZSBjb3B5LiAgVGh1cwotZXhhbXBs ZShfc2hhZG93IC1zIFhYIGZvbykKLWNyZWF0ZXMgYSBmdW5jdGlvbiBuYW1lZCBgdHQoZm9vQFhY KScgKHVubGVzcyBgdHQoZm9vKScgaXMgYSBidWlsdGluKS4KLU5vdGUgdGhhdCBhIG5lc3RlZCBj YWxsIHRvIHR0KF9zaGFkb3cpIHdpdGggdGhlIHNhbWUgdmFyKHN1ZmZpeCkgbWF5Ci1yZXN1bHQg aW4gbmFtZSBjb2xsaXNpb25zIGFuZCB1bmV4cGVjdGVkIHJlc3VsdHMsIGJ1dCB0aGlzIHByb3Zp ZGVzIGEKLXdlbGwta25vd24gbmFtZSBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGlmIHRoZSBu ZXcgaW1wbGVtZW50YXRpb24KLW5lZWRzIHRvIGNhbGwgaXQgYXMgYSB3cmFwcGVyLiAgVGhlIHNh bWUgdmFyKHN1ZmZpeCkgbXVzdCBiZSB1c2VkIGluCi10aGUgY2FsbCB0byB0dChfdW5zaGFkb3cp LiAgV2hlbiBubyB2YXIoc3VmZml4KSBpcyBwcmVzZW50LAotdHQoX3NoYWRvdykgY3JlYXRlcyBh IHVuaXF1ZSBzdWZmaXggdG8gYXZvaWQgbmFtZSBjb2xsaXNpb25zLgorV2hlbiBubyB2YXIoc3Vm Zml4KSBhcmd1bWVudCBpcyBwcmVzZW50LCB0dChfc2hhZG93KSBjcmVhdGVzIGEgdW5pcXVlCitz dWZmaXggdG8gYXZvaWQgbmFtZSBjb2xsaXNpb25zLgorCitBcmd1bWVudHMgb2YgdHQoX3Vuc2hh ZG93KSBhcmUgaWdub3JlZC4gIEV2ZXJ5IGxpc3RlZCB2YXIoY29tbWFuZF9uYW1lKQorZm9yIHRo ZSBtb3N0IHJlY2VudCBjYWxsIHRvIHR0KF9zaGFkb3cpIGlzIHJlbW92ZWQuICBUaGlzIGRpZmZl cnMgZnJvbQorYW4gZWFybHkgaW1wbGVtZW50YXRpb24gdGhhdCByZXF1aXJlZCB0dChfdW5zaGFk b3cpIHRvIHJlY2VpdmUgdGhlCitzYW1lIHZhcihzdWZmaXgpIGFuZCB2YXIoY29tbWFuZF9uYW1l KSBsaXN0IGFzIHR0KF9zaGFkb3cpLgogKQogZmluZGV4KF9zdG9yZV9jYWNoZSkKIGl0ZW0odHQo X3N0b3JlX2NhY2hlKSB2YXIoY2FjaGVfaWRlbnRpZmllcikgdmFyKHBhcmFtKSAuLi4pKApkaWZm IC0tZ2l0IGEvRG9jL1pzaC9jb250cmliLnlvIGIvRG9jL1pzaC9jb250cmliLnlvCmluZGV4IDk2 ZGU1YWE5Yi4uZWYxMWQ3N2FkIDEwMDY0NAotLS0gYS9Eb2MvWnNoL2NvbnRyaWIueW8KKysrIGIv RG9jL1pzaC9jb250cmliLnlvCkBAIC00MzM2LDYgKzQzMzYsMjcgQEAgZXhhbXBsZShpcy1hdC1s ZWFzdCAzLjEuNi0xNSAmJiBzZXRvcHQgTk9fR0xPQkFMX1JDUwogaXMtYXQtbGVhc3QgMy4xLjAg JiYgc2V0b3B0IEhJU1RfUkVEVUNFX0JMQU5LUwogaXMtYXQtbGVhc3QgMi42LTE3IHx8IHByaW50 ICJZb3UgY2FuJ3QgdXNlIGlzLWF0LWxlYXN0IGhlcmUuIikKICkKK2ZpbmRleChta3NoYWRvdykK K2ZpbmRleChybXNoYWRvdykKK3hpdGVtKHR0KG1rc2hhZG93KSBbIHR0KC1zKSB2YXIoc3VmZml4 KSBdIFsgLS0gXSB2YXIoY29tbWFuZF9uYW1lKSAuLi4pCitpdGVtKHR0KHJtc2hhZG93KSkoCitU aGVzZSBmdW5jdGlvbnMgYXJlIGFuIGludGVyZmFjZSB0byB0aGUgdHQoX3NoYWRvdykgYW5kIHR0 KF91bnNoYWRvdykKK2NvbXBsZXRpb24gdXRpbGl0aWVzIHRvIG1ha2UgdGhlbSBtb3JlIGVhc2ls eSBhY2Nlc3NpYmxlIGluIG90aGVyCitjb250ZXh0cy4gIFVzYWdlIGlzIGV4YWN0bHkgYXMgZm9y IHRoZSBjb21wbGV0aW9uIHV0aWxpdHk6CitleGFtcGxlKHsKKyAgbWtzaGFkb3cgZm5hbWUKKyAg ZnVuY3Rpb24gZm5hbWUgeworICAgICMgRG8geW91ciBuZXcgdGhpbmcKKyAgfQorICAjIEludm9r ZSBjYWxsZXJzIG9mIGZuYW1lCit9IGFsd2F5cyB7CisgIHJtc2hhZG93Cit9KQorCitVcG9uIHJl dHVybiwgdGhlIHZhbHVlIG9mIHR0KCRSRVBMWSkgaXMgdGhlIHN1ZmZpeCB1c2VkIHRvIGNyZWF0 ZSBhCitjb3B5IG9mIHRoZSBvcmlnaW5hbCB2YXIoY29tbWFuZF9uYW1lKSwgc28gdmFyKGNvbW1h bmRfbmFtZSl0dChAJFJFUExZKQoraW52b2tlcyB0aGF0IG9yaWdpbmFsLgorKQogZmluZGV4KG5z bG9va3VwKQogaXRlbSh0dChuc2xvb2t1cCkgWyB2YXIoYXJnKSAuLi4gXSkoCiBUaGlzIHdyYXBw ZXIgZnVuY3Rpb24gZm9yIHRoZSB0dChuc2xvb2t1cCkgY29tbWFuZCByZXF1aXJlcyB0aGUK --00000000000093c8400602486d3b--