From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jim Porter Newsgroups: gmane.emacs.bugs Subject: bug#52293: 29.0.50; [PATCH v4] Prevent further cases of duplicated separators in context menus Date: Sun, 2 Jan 2022 22:14:51 -0800 Message-ID: References: <83wnkfw8ud.fsf@gnu.org> <86ilvysyq3.fsf@mail.linkov.net> <834k7ix4ij.fsf@gnu.org> <86pmq6taeb.fsf@mail.linkov.net> <83czm6unfs.fsf@gnu.org> <414be477-34d4-c777-f623-3e0e59c0dd08@gmail.com> <83o85mpaqb.fsf@gnu.org> <8e9b29cd-8700-1a60-1d91-b6995d8f433a@gmail.com> <86czm0eue5.fsf@mail.linkov.net> <8c440269-262a-ba78-6630-d3f90c2fcc19@gmail.com> <86fsqwmig7.fsf@mail.linkov.net> <1c1995a2-c033-51c8-4aa6-7458ad07c75c@gmail.com> <86mtl3629t.fsf@mail.linkov.net> <723c8965-31be-b636-beee-478fb77423ec@gmail.com> <86ee6egs8b.fsf@mail.linkov.net> <86fsq63pli.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------7C0D9B8458D468FAB89D2B2F" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="11715"; mail-complaints-to="usenet@ciao.gmane.io" Cc: "52293@debbugs.gnu.org" <52293@debbugs.gnu.org> To: Juri Linkov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Jan 03 07:16:19 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n4Gdn-0002lK-Bw for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 03 Jan 2022 07:16:19 +0100 Original-Received: from localhost ([::1]:55612 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n4Gdm-0000TT-99 for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 03 Jan 2022 01:16:18 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:50984) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n4GcY-00006J-NA for bug-gnu-emacs@gnu.org; Mon, 03 Jan 2022 01:15:04 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:50720) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n4GcY-0007J1-CF for bug-gnu-emacs@gnu.org; Mon, 03 Jan 2022 01:15:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1n4GcY-0003iT-1r for bug-gnu-emacs@gnu.org; Mon, 03 Jan 2022 01:15:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Jim Porter Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 03 Jan 2022 06:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52293 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 52293-submit@debbugs.gnu.org id=B52293.164119050014267 (code B ref 52293); Mon, 03 Jan 2022 06:15:02 +0000 Original-Received: (at 52293) by debbugs.gnu.org; 3 Jan 2022 06:15:00 +0000 Original-Received: from localhost ([127.0.0.1]:34033 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1n4GcW-0003i2-39 for submit@debbugs.gnu.org; Mon, 03 Jan 2022 01:15:00 -0500 Original-Received: from mail-pg1-f175.google.com ([209.85.215.175]:40790) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1n4GcT-0003hm-Kr for 52293@debbugs.gnu.org; Mon, 03 Jan 2022 01:14:58 -0500 Original-Received: by mail-pg1-f175.google.com with SMTP id l10so29374264pgm.7 for <52293@debbugs.gnu.org>; Sun, 02 Jan 2022 22:14:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:mime-version :in-reply-to:content-language; bh=AMH2qrmk8hhObmcWKG1tXvMKPkUGh7Kc12Bx0qXG7gQ=; b=T2cbcllbsyxHOz6NuY8FzbebEokEzN8J2+a/1OS0FXIqoFJPuJs7QVFyWALFvlUae9 3BI8YRMjNzymTUeXnr5PJP+8kP4ypM92B+AqFPcwfvizGEfTSEpRsqGfOSr5J6VKqTuL O9S0X3ewBGCIhiNAzOOLtjE6JqB5BwYqmUr/W7UMrKsJkbmmKrT+USnJVqFD9Us+Wxzz c3mIALmss9kwLI17x6ZXFsRPiUFfm7X/37VO4uCAucDR7ZV3whh4ulEu1mlVQSDGn7sy NsyjnWZsVPGzY2B4dDrH98Jff0QLdXKeEKX5T2OnLEDQkgjHpSVPUuPkbiH9WNeKSL3l u5WA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :mime-version:in-reply-to:content-language; bh=AMH2qrmk8hhObmcWKG1tXvMKPkUGh7Kc12Bx0qXG7gQ=; b=q6TEKa26nBI378LqqiYxLJhRLQX/YGDPvkjCM2feg+RR1u2sAYpvaAmDKa6kKI/kR5 FhjFYoAuRZ3YOr3lvZGBMSIfRHCVxCZELQGe6xc2YKkFL0MR/DMMvtxmY3rFziF8cl7I X+eH3x1osh5P+/+nEL3HLh6nlliaETkKH6sxZFzEejoLH0TVwVGDTP12su50K+1x1+fT nNnjTSMY4DljxSTS39/8HzyogBMzpepic8eFEk8nTeBCZIYYWQCOWjlIiabSy8XBZR1c FZb6bnV+ztg2f++aTnNLwEx7WscDu+gK8/b9cOQbJfaCqnWlOEhb93vARO/dtoaC28i/ ZSBw== X-Gm-Message-State: AOAM531p558LriKrx3IikLqQJMP+ew4y1n20129uWPIBzQJUihOT4zQf 591IBga2J9NooxEqF2c8gLwb3MAS3DI= X-Google-Smtp-Source: ABdhPJy4ixScgP33/pfzC6YMbYqOcPFyfrU4rUp7ZeE/FUqQp368yucmoWmLX5k3ymxro141CaYgaA== X-Received: by 2002:a63:5d61:: with SMTP id o33mr39837400pgm.341.1641190491587; Sun, 02 Jan 2022 22:14:51 -0800 (PST) Original-Received: from [192.168.1.2] (cpe-76-168-148-233.socal.res.rr.com. [76.168.148.233]) by smtp.googlemail.com with ESMTPSA id b15sm38476970pfl.118.2022.01.02.22.14.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 02 Jan 2022 22:14:50 -0800 (PST) In-Reply-To: <86fsq63pli.fsf@mail.linkov.net> Content-Language: en-US X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:223577 Archived-At: This is a multi-part message in MIME format. --------------7C0D9B8458D468FAB89D2B2F Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 1/2/2022 11:27 AM, Juri Linkov wrote: >> I've attached an updated patch that lets context-menu-functions add items >> to the beginning of the keymap as they currently do, while still removing >> consecutive separators correctly. Since this logic is a bit tricky, it >> could probably use an automated test or two, but before I write some, >> I wanted to check that the strategy I'm using seems reasonable. It's >> probably easiest to explain the logic by just pointing to the patch; >> I added several comments describing the behavior so that reviewers (and >> future readers) should be able to make sense of it. > > Thanks, I suppose it's for master, not for the release branch? Yeah, it's based on top of my previous patches that only landed on master, so the same applies for this one. I don't personally have an issue with if it merged to the release branch, but I also understand that we can't keep adding things to Emacs 28 forever. Attached is an updated patch with unit tests as well as a fix to the behavior from the previous version; in my last patch, it didn't delete the last separator in the menu if it was *before* the "Context Menu" overall prompt string. (This could happen if all the context-menu-functions *only* used `define-key'.) I've fixed that, though it did make the function a bit more complex. I've compensated for that with some more comments and what I hope are pretty thorough tests to make sure everything works as expected. --------------7C0D9B8458D468FAB89D2B2F Content-Type: text/plain; charset=UTF-8; name="0001-Prevent-further-cases-of-duplicated-separators-in-co.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-Prevent-further-cases-of-duplicated-separators-in-co.pa"; filename*1="tch" RnJvbSBkYzJiMDRkNWYyMGVmODYxZTEzYjA4MjBhNDM3Nzk1MWNiNTI4YjUzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFN1biwgMiBKYW4gMjAyMiAyMjowODo1MiAtMDgwMApTdWJqZWN0OiBbUEFU Q0hdIFByZXZlbnQgZnVydGhlciBjYXNlcyBvZiBkdXBsaWNhdGVkIHNlcGFyYXRvcnMgaW4g Y29udGV4dAogbWVudXMKCkluIHNvbWUgY2FzZXMsIGNvbnRleHQgbWVudSBpdGVtcyBhcmUg YWRkZWQgYmVmb3JlIHRoZSBvdmVyYWxsIHByb21wdApzdHJpbmcuICBUaGlzIGNvdWxkIGNh dXNlIG11bHRpcGxlIGNvbnNlY3V0aXZlIHNlcGFyYXRvcnMgdG8gYXBwZWFyIGlmCnRoZXkg InN1cnJvdW5kIiB0aGUgcHJvbXB0IHN0cmluZy4KCiogbGlzcC9tb3VzZS5lbCAoY29udGV4 dC1tZW51LW1hcCk6IEltcHJvdmUgdGhlIGRlLWR1cGxpY2F0aW9uIGxvZ2ljCnRvIGlnbm9y ZSBub24tbWVudS1pdGVtcyB3aGVuIGNoZWNraW5nIGZvciBjb25zZWN1dGl2ZSBzZXBhcmF0 b3JzLgoKKiB0ZXN0L2xpc3AvbW91c2UtdGVzdHMuZWwKKGNvbnRleHQtbWVudS1tYXAtcmVt b3ZlLWNvbnNlY3V0aXZlLXNlcGFyYXRvcnMpCihjb250ZXh0LW1lbnUtbWFwLXJlbW92ZS1j b25zZWN1dGl2ZS1zZXBhcmF0b3JzKTogTmV3IHRlc3RzLgotLS0KIGxpc3AvbW91c2UuZWwg ICAgICAgICAgICB8ICAzNCArKysrLS0tLQogdGVzdC9saXNwL21vdXNlLXRlc3RzLmVsIHwg MTYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAxODMgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvbGlzcC9tb3VzZS5lbCBiL2xpc3AvbW91c2UuZWwKaW5kZXggMTFmZGQzZjYzOS4uNTBm YjExMzdlYyAxMDA2NDQKLS0tIGEvbGlzcC9tb3VzZS5lbAorKysgYi9saXNwL21vdXNlLmVs CkBAIC0zMjksMjEgKzMyOSwyOSBAQCBjb250ZXh0LW1lbnUtbWFwCiAKICAgICA7OyBSZW1v dmUgZHVwbGljYXRlIHNlcGFyYXRvcnMgYXMgd2VsbCBhcyBvbmVzIGF0IHRoZSBiZWdpbm5p bmcgb3IKICAgICA7OyBlbmQgb2YgdGhlIG1lbnUuCi0gICAgKGxldCAoKGwgbWVudSkgc2F3 LWZpcnN0LWl0ZW0pCisgICAgKGxldCAoKGwgbWVudSkgKGxhc3Qtc2F3LXNlcGFyYXRvciB0 KSkKICAgICAgICh3aGlsZSAoYW5kIChjb25zcCBsKQogICAgICAgICAgICAgICAgICAgKGNv bnNwIChjZHIgbCkpKQotICAgICAgICA7OyBJZiB0aGUgbmV4dCBpdGVtIGlzIGEgc2VwYXJh dG9yLCByZW1vdmUgaXQgaWYgMSkgd2UgaGF2ZW4ndAotICAgICAgICA7OyBzZWVuIGFueSBv dGhlciBpdGVtcyB5ZXQsIG9yIDIpIGl0J3MgZm9sbG93ZWQgYnkgZWl0aGVyCi0gICAgICAg IDs7IGFub3RoZXIgc2VwYXJhdG9yIG9yIHRoZSBlbmQgb2YgdGhlIGxpc3QuCi0gICAgICAg IChpZiAoYW5kIChlcXVhbCAoY2RyLXNhZmUgKGNhZHIgbCkpIG1lbnUtYmFyLXNlcGFyYXRv cikKLSAgICAgICAgICAgICAgICAgKG9yIChub3Qgc2F3LWZpcnN0LWl0ZW0pCi0gICAgICAg ICAgICAgICAgICAgICAobnVsbCAoY2FkZHIgbCkpCi0gICAgICAgICAgICAgICAgICAgICAo ZXF1YWwgKGNkci1zYWZlIChjYWRkciBsKSkgbWVudS1iYXItc2VwYXJhdG9yKSkpCi0gICAg ICAgICAgICAoc2V0Y2RyIGwgKGNkZHIgbCkpCi0gICAgICAgICAgOzsgVGhlICJmaXJzdCBp dGVtIiBpcyBhbnkgY29ucyBjZWxsOyB0aGlzIGV4Y2x1ZGVzIHRoZQotICAgICAgICAgIDs7 IGBrZXltYXAnIHN5bWJvbCBhbmQgdGhlIG1lbnUgbmFtZS4KLSAgICAgICAgICAod2hlbiAo Y29uc3AgKGNhZHIgbCkpIChzZXRxIHNhdy1maXJzdC1pdGVtIHQpKQotICAgICAgICAgIChz ZXRxIGwgKGNkciBsKSkpKSkKKyAgICAgICAgKGlmIChlcXVhbCAoY2RyLXNhZmUgKGNhZHIg bCkpIG1lbnUtYmFyLXNlcGFyYXRvcikKKyAgICAgICAgICAgIChwcm9nbgorICAgICAgICAg ICAgICA7OyBUaGUgbmV4dCBpdGVtIGlzIGEgc2VwYXJhdG9yLiAgUmVtb3ZlIGl0IGlmIHRo ZSBsYXN0CisgICAgICAgICAgICAgIDs7IGl0ZW0gd2Ugc2F3IHdhcyBhIHNlcGFyYXRvciB0 b28uCisgICAgICAgICAgICAgIChpZiBsYXN0LXNhdy1zZXBhcmF0b3IKKyAgICAgICAgICAg ICAgICAgIChzZXRjZHIgbCAoY2RkciBsKSkKKyAgICAgICAgICAgICAgICA7OyBJZiB3ZSBk aWRuJ3QgZGVsZXRlIHRoaXMgc2VwYXJhdG9yLCB1cGRhdGUgdGhlIGxhc3QKKyAgICAgICAg ICAgICAgICA7OyBzZXBhcmF0b3Igd2Ugc2F3IHRvIHRoaXMgb25lLgorICAgICAgICAgICAg ICAgIChzZXRxIGxhc3Qtc2F3LXNlcGFyYXRvciBsCisgICAgICAgICAgICAgICAgICAgICAg bCAoY2RyIGwpKSkpCisgICAgICAgICAgOzsgSWYgdGhlIG5leHQgaXRlbSBpcyBhIGNvbnMg Y2VsbCwgd2UgZm91bmQgYSBub24tc2VwYXJhdG9yCisgICAgICAgICAgOzsgaXRlbS4gIERv bid0IHJlbW92ZSB0aGUgbmV4dCBzZXBhcmF0b3Igd2Ugc2VlLiAgV2UKKyAgICAgICAgICA7 OyBzcGVjaWZpY2FsbHkgY2hlY2sgZm9yIGNvbnMgY2VsbHMgdG8gYXZvaWQgdHJlYXRpbmcg dGhlCisgICAgICAgICAgOzsgb3ZlcmFsbCBwcm9tcHQgc3RyaW5nIGFzIGEgbWVudSBpdGVt LgorICAgICAgICAgICh3aGVuIChjb25zcCAoY2FkciBsKSkKKyAgICAgICAgICAgIChzZXRx IGxhc3Qtc2F3LXNlcGFyYXRvciBuaWwpKQorICAgICAgICAgIChzZXRxIGwgKGNkciBsKSkp KQorICAgICAgOzsgSWYgdGhlIGxhc3QgaXRlbSB3ZSBzYXcgd2FzIGEgc2VwYXJhdG9yLCBy ZW1vdmUgaXQuCisgICAgICAod2hlbiAoY29uc3AgbGFzdC1zYXctc2VwYXJhdG9yKQorICAg ICAgICAoc2V0Y2RyIGxhc3Qtc2F3LXNlcGFyYXRvciAoY2RkciBsYXN0LXNhdy1zZXBhcmF0 b3IpKSkpCiAKICAgICAod2hlbiAoZnVuY3Rpb25wIGNvbnRleHQtbWVudS1maWx0ZXItZnVu Y3Rpb24pCiAgICAgICAoc2V0cSBtZW51IChmdW5jYWxsIGNvbnRleHQtbWVudS1maWx0ZXIt ZnVuY3Rpb24gbWVudSBjbGljaykpKQpkaWZmIC0tZ2l0IGEvdGVzdC9saXNwL21vdXNlLXRl c3RzLmVsIGIvdGVzdC9saXNwL21vdXNlLXRlc3RzLmVsCmluZGV4IDU2NDExZDAzNjUuLjk2 MjA2Y2Q5ZjggMTAwNjQ0Ci0tLSBhL3Rlc3QvbGlzcC9tb3VzZS10ZXN0cy5lbAorKysgYi90 ZXN0L2xpc3AvbW91c2UtdGVzdHMuZWwKQEAgLTUyLDUgKzUyLDE2NyBAQCBidWcyNjgxNi1t b3VzZS1mcmFtZS1tb3ZlbWVudAogICAgIChzaG91bGQgKGVxdWFsIChtb3VzZS1wb3NpdGlv bikKICAgICAgICAgICAgICAgICAgICAoY29ucyBmcmFtZSAoY29ucyAwIDApKSkpKSkKIAor KGVydC1kZWZ0ZXN0IGNvbnRleHQtbWVudS1tYXAtcmVtb3ZlLWNvbnNlY3V0aXZlLXNlcGFy YXRvcnMgKCkKKyAgIkNoZWNrIHRoYXQgYGNvbnRleHQtbWVudS1tYXAnIHJlbW92ZXMgY29u c2VjdXRpdmUgc2VwYXJhdG9ycy4iCisgIDs7IEJvdGggc2VwYXJhdG9ycyBhZnRlciB0aGUg b3ZlcmFsbCBwcm9tcHQgc3RyaW5nLgorICAobGV0ICgoY29udGV4dC1tZW51LWZ1bmN0aW9u cworICAgICAgICAgJygobGFtYmRhIChtZW51IF9jbGljaykKKyAgICAgICAgICAgICAoZGVm aW5lLWtleS1hZnRlciBtZW51IFtmb28taXRlbV0gJyhtZW51LWl0ZW0gIkZvbyIgaWRlbnRp dHkpKQorICAgICAgICAgICAgIChkZWZpbmUta2V5LWFmdGVyIG1lbnUgW3NlcGFyYXRvci0x XSBtZW51LWJhci1zZXBhcmF0b3IpCisgICAgICAgICAgICAgKGRlZmluZS1rZXktYWZ0ZXIg bWVudSBbc2VwYXJhdG9yLTJdIG1lbnUtYmFyLXNlcGFyYXRvcikKKyAgICAgICAgICAgICAo ZGVmaW5lLWtleS1hZnRlciBtZW51IFtiYXItaXRlbV0gJyhtZW51LWl0ZW0gIkJhciIgaWRl bnRpdHkpKQorICAgICAgICAgICAgIG1lbnUpKSkpCisgICAgKHNob3VsZCAoZXF1YWwgYChr ZXltYXAKKyAgICAgICAgICAgICAgICAgICAgICJDb250ZXh0IE1lbnUiCisgICAgICAgICAg ICAgICAgICAgICAoZm9vLWl0ZW0gbWVudS1pdGVtICJGb28iIGlkZW50aXR5KQorICAgICAg ICAgICAgICAgICAgICAgKHNlcGFyYXRvci0xIC4gLG1lbnUtYmFyLXNlcGFyYXRvcikKKyAg ICAgICAgICAgICAgICAgICAgIChiYXItaXRlbSBtZW51LWl0ZW0gIkJhciIgaWRlbnRpdHkp KQorICAgICAgICAgICAgICAgICAgIChjb250ZXh0LW1lbnUtbWFwKSkpKQorICA7OyBCb3Ro IHNlcGFyYXRvcnMgYmVmb3JlIHRoZSBvdmVyYWxsIHByb21wdCBzdHJpbmcuCisgIChsZXQg KChjb250ZXh0LW1lbnUtZnVuY3Rpb25zCisgICAgICAgICAnKChsYW1iZGEgKG1lbnUgX2Ns aWNrKQorICAgICAgICAgICAgIChkZWZpbmUta2V5IG1lbnUgW2Jhci1pdGVtXSAnKG1lbnUt aXRlbSAiQmFyIiBpZGVudGl0eSkpCisgICAgICAgICAgICAgKGRlZmluZS1rZXkgbWVudSBb c2VwYXJhdG9yLTJdIG1lbnUtYmFyLXNlcGFyYXRvcikKKyAgICAgICAgICAgICAoZGVmaW5l LWtleSBtZW51IFtzZXBhcmF0b3ItMV0gbWVudS1iYXItc2VwYXJhdG9yKQorICAgICAgICAg ICAgIChkZWZpbmUta2V5IG1lbnUgW2Zvby1pdGVtXSAnKG1lbnUtaXRlbSAiRm9vIiBpZGVu dGl0eSkpCisgICAgICAgICAgICAgbWVudSkpKSkKKyAgICAoc2hvdWxkIChlcXVhbCBgKGtl eW1hcAorICAgICAgICAgICAgICAgICAgICAgKGZvby1pdGVtIG1lbnUtaXRlbSAiRm9vIiBp ZGVudGl0eSkKKyAgICAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3ItMSAuICxtZW51LWJh ci1zZXBhcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAoYmFyLWl0ZW0gbWVudS1pdGVt ICJCYXIiIGlkZW50aXR5KQorICAgICAgICAgICAgICAgICAgICAgIkNvbnRleHQgTWVudSIp CisgICAgICAgICAgICAgICAgICAgKGNvbnRleHQtbWVudS1tYXApKSkpCisgIDs7IEZpcnN0 IHNlcGFyYXRvciBiZWZvcmUgYW5kIHNlY29uZCBzZXBhcmF0b3IgYWZ0ZXIgdGhlIG92ZXJh bGwKKyAgOzsgcHJvbXB0IHN0cmluZy4KKyAgKGxldCAoKGNvbnRleHQtbWVudS1mdW5jdGlv bnMKKyAgICAgICAgICcoKGxhbWJkYSAobWVudSBfY2xpY2spCisgICAgICAgICAgICAgKGRl ZmluZS1rZXktYWZ0ZXIgbWVudSBbc2VwYXJhdG9yLTJdIG1lbnUtYmFyLXNlcGFyYXRvcikK KyAgICAgICAgICAgICAoZGVmaW5lLWtleS1hZnRlciBtZW51IFtiYXItaXRlbV0gJyhtZW51 LWl0ZW0gIkJhciIgaWRlbnRpdHkpKQorICAgICAgICAgICAgIChkZWZpbmUta2V5IG1lbnUg W3NlcGFyYXRvci0xXSBtZW51LWJhci1zZXBhcmF0b3IpCisgICAgICAgICAgICAgKGRlZmlu ZS1rZXkgbWVudSBbZm9vLWl0ZW1dICcobWVudS1pdGVtICJGb28iIGlkZW50aXR5KSkKKyAg ICAgICAgICAgICBtZW51KSkpKQorICAgIChzaG91bGQgKGVxdWFsIGAoa2V5bWFwCisgICAg ICAgICAgICAgICAgICAgICAoZm9vLWl0ZW0gbWVudS1pdGVtICJGb28iIGlkZW50aXR5KQor ICAgICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci0xIC4gLG1lbnUtYmFyLXNlcGFyYXRv cikKKyAgICAgICAgICAgICAgICAgICAgICJDb250ZXh0IE1lbnUiCisgICAgICAgICAgICAg ICAgICAgICAoYmFyLWl0ZW0gbWVudS1pdGVtICJCYXIiIGlkZW50aXR5KSkKKyAgICAgICAg ICAgICAgICAgICAoY29udGV4dC1tZW51LW1hcCkpKSkKKyAgOzsgVGhyZWUgY29uc2VjdXRp dmUgc2VwYXJhdG9ycy4KKyAgKGxldCAoKGNvbnRleHQtbWVudS1mdW5jdGlvbnMKKyAgICAg ICAgICcoKGxhbWJkYSAobWVudSBfY2xpY2spCisgICAgICAgICAgICAgKGRlZmluZS1rZXkt YWZ0ZXIgbWVudSBbZm9vLWl0ZW1dICcobWVudS1pdGVtICJGb28iIGlkZW50aXR5KSkKKyAg ICAgICAgICAgICAoZGVmaW5lLWtleS1hZnRlciBtZW51IFtzZXBhcmF0b3ItMV0gbWVudS1i YXItc2VwYXJhdG9yKQorICAgICAgICAgICAgIChkZWZpbmUta2V5LWFmdGVyIG1lbnUgW3Nl cGFyYXRvci0yXSBtZW51LWJhci1zZXBhcmF0b3IpCisgICAgICAgICAgICAgKGRlZmluZS1r ZXktYWZ0ZXIgbWVudSBbc2VwYXJhdG9yLTNdIG1lbnUtYmFyLXNlcGFyYXRvcikKKyAgICAg ICAgICAgICAoZGVmaW5lLWtleS1hZnRlciBtZW51IFtiYXItaXRlbV0gJyhtZW51LWl0ZW0g IkJhciIgaWRlbnRpdHkpKQorICAgICAgICAgICAgIG1lbnUpKSkpCisgICAgKHNob3VsZCAo ZXF1YWwgYChrZXltYXAKKyAgICAgICAgICAgICAgICAgICAgICJDb250ZXh0IE1lbnUiCisg ICAgICAgICAgICAgICAgICAgICAoZm9vLWl0ZW0gbWVudS1pdGVtICJGb28iIGlkZW50aXR5 KQorICAgICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci0xIC4gLG1lbnUtYmFyLXNlcGFy YXRvcikKKyAgICAgICAgICAgICAgICAgICAgIChiYXItaXRlbSBtZW51LWl0ZW0gIkJhciIg aWRlbnRpdHkpKQorICAgICAgICAgICAgICAgICAgIChjb250ZXh0LW1lbnUtbWFwKSkpKSkK KworKGVydC1kZWZ0ZXN0IGNvbnRleHQtbWVudS1tYXAtcmVtb3ZlLXNlcGFyYXRvcnMtYXQt YmVnaW5uaW5nLW9yLWVuZCAoKQorICAiQ2hlY2sgdGhhdCBgY29udGV4dC1tZW51LW1hcCcg cmVtb3ZlcyBzZXBhcmF0b3JzIGF0IHRoZQorYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgbWVu dS4iCisgIDs7IE1lbnVzIHdpdGggb25seSBzZXBhcmF0b3JzLgorICAobGV0ICgodGVzdC1m dW5jdGlvbnMKKyAgICAgICAgICcoOzsgU2VwYXJhdG9yIGJlZm9yZSB0aGUgb3ZlcmFsbCBw cm9tcHQgc3RyaW5nLgorICAgICAgICAgICAobGFtYmRhIChtZW51IF9jbGljaykKKyAgICAg ICAgICAgICAoZGVmaW5lLWtleSBtZW51IFtzZXBhcmF0b3JdIG1lbnUtYmFyLXNlcGFyYXRv cikKKyAgICAgICAgICAgICBtZW51KQorICAgICAgICAgICA7OyBTZXBhcmF0b3IgYWZ0ZXIg dGhlIG92ZXJhbGwgcHJvbXB0IHN0cmluZy4KKyAgICAgICAgICAgKGxhbWJkYSAobWVudSBf Y2xpY2spCisgICAgICAgICAgICAgKGRlZmluZS1rZXktYWZ0ZXIgbWVudSBbc2VwYXJhdG9y XSBtZW51LWJhci1zZXBhcmF0b3IpCisgICAgICAgICAgICAgbWVudSkKKyAgICAgICAgICAg OzsgQmVnaW4gYW5kIGVuZCBzZXBhcmF0b3JzIGJlZm9yZSB0aGUgb3ZlcmFsbCBwcm9tcHQg c3RyaW5nLgorICAgICAgICAgICAobGFtYmRhIChtZW51IF9jbGljaykKKyAgICAgICAgICAg ICAoZGVmaW5lLWtleSBtZW51IFtlbmQtc2VwYXJhdG9yXSBtZW51LWJhci1zZXBhcmF0b3Ip CisgICAgICAgICAgICAgKGRlZmluZS1rZXkgbWVudSBbYmVnaW4tc2VwYXJhdG9yXSBtZW51 LWJhci1zZXBhcmF0b3IpCisgICAgICAgICAgICAgbWVudSkKKyAgICAgICAgICAgOzsgQmVn aW4gYW5kIGVuZCBzZXBhcmF0b3JzIGFmdGVyIHRoZSBvdmVyYWxsIHByb21wdCBzdHJpbmcu CisgICAgICAgICAgIChsYW1iZGEgKG1lbnUgX2NsaWNrKQorICAgICAgICAgICAgIChkZWZp bmUta2V5LWFmdGVyIG1lbnUgW2JlZ2luLXNlcGFyYXRvcl0gbWVudS1iYXItc2VwYXJhdG9y KQorICAgICAgICAgICAgIChkZWZpbmUta2V5LWFmdGVyIG1lbnUgW2VuZC1zZXBhcmF0b3Jd IG1lbnUtYmFyLXNlcGFyYXRvcikKKyAgICAgICAgICAgICBtZW51KQorICAgICAgICAgICA7 OyBCZWdpbiBzZXBhcmF0b3IgYmVmb3JlIGFuZCBlbmQgc2VwYXJhdG9yIGFmdGVyIHRoZQor ICAgICAgICAgICA7OyBvdmVyYWxsIHByb21wdCBzdHJpbmcuCisgICAgICAgICAgIChsYW1i ZGEgKG1lbnUgX2NsaWNrKQorICAgICAgICAgICAgIChkZWZpbmUta2V5IG1lbnUgW2JlZ2lu LXNlcGFyYXRvcl0gbWVudS1iYXItc2VwYXJhdG9yKQorICAgICAgICAgICAgIChkZWZpbmUt a2V5LWFmdGVyIG1lbnUgW2VuZC1zZXBhcmF0b3JdIG1lbnUtYmFyLXNlcGFyYXRvcikKKyAg ICAgICAgICAgICBtZW51KSkpKQorICAgIChkb2xpc3QgKGZ1biB0ZXN0LWZ1bmN0aW9ucykK KyAgICAgIChsZXQgKChjb250ZXh0LW1lbnUtZnVuY3Rpb25zIChsaXN0IGZ1bikpKQorICAg ICAgICAoc2hvdWxkIChlcXVhbCAnKGtleW1hcCAiQ29udGV4dCBNZW51IikKKyAgICAgICAg ICAgICAgICAgICAgICAgKGNvbnRleHQtbWVudS1tYXApKSkpKSkKKyAgOzsgTWVudXMgd2l0 aCBzZXBhcmF0b3JzIGF0IGJlZ2lubmluZyBhbmQvb3IgZW5kIHdpdGggYSBtZW51LWl0ZW0K KyAgOzsgYmVmb3JlIHRoZSBwcm9tcHQgc3RyaW5nLgorICAobGV0ICgodGVzdC1mdW5jdGlv bnMKKyAgICAgICAgICcoOzsgU2VwYXJhdG9yIGJlZm9yZSB0aGUgb3ZlcmFsbCBwcm9tcHQg c3RyaW5nIGFuZCB0aGUgbWVudS1pdGVtLgorICAgICAgICAgICAobGFtYmRhIChtZW51IF9j bGljaykKKyAgICAgICAgICAgICAoZGVmaW5lLWtleSBtZW51IFtmb28taXRlbV0gJyhtZW51 LWl0ZW0gIkZvbyIgaWRlbnRpdHkpKQorICAgICAgICAgICAgIChkZWZpbmUta2V5IG1lbnUg W3NlcGFyYXRvcl0gbWVudS1iYXItc2VwYXJhdG9yKQorICAgICAgICAgICAgIG1lbnUpCisg ICAgICAgICAgIDs7IFNlcGFyYXRvciBiZWZvcmUgdGhlIG92ZXJhbGwgcHJvbXB0IHN0cmlu ZywgYnV0IGFmdGVyCisgICAgICAgICAgIDs7IHRoZSBtZW51LWl0ZW0uCisgICAgICAgICAg IChsYW1iZGEgKG1lbnUgX2NsaWNrKQorICAgICAgICAgICAgIChkZWZpbmUta2V5IG1lbnUg W3NlcGFyYXRvcl0gbWVudS1iYXItc2VwYXJhdG9yKQorICAgICAgICAgICAgIChkZWZpbmUt a2V5IG1lbnUgW2Zvby1pdGVtXSAnKG1lbnUtaXRlbSAiRm9vIiBpZGVudGl0eSkpCisgICAg ICAgICAgICAgbWVudSkKKyAgICAgICAgICAgOzsgU2VwYXJhdG9yIGF0IHRoZSBlbmQuCisg ICAgICAgICAgIChsYW1iZGEgKG1lbnUgX2NsaWNrKQorICAgICAgICAgICAgIChkZWZpbmUt a2V5IG1lbnUgW2Zvby1pdGVtXSAnKG1lbnUtaXRlbSAiRm9vIiBpZGVudGl0eSkpCisgICAg ICAgICAgICAgKGRlZmluZS1rZXktYWZ0ZXIgbWVudSBbc2VwYXJhdG9yXSBtZW51LWJhci1z ZXBhcmF0b3IpCisgICAgICAgICAgICAgbWVudSkKKyAgICAgICAgICAgOzsgQmVnaW4gc2Vw YXJhdG9yIGJlZm9yZSBhbmQgZW5kIHNlcGFyYXRvciBhZnRlciB0aGUKKyAgICAgICAgICAg Ozsgb3ZlcmFsbCBwcm9tcHQgc3RyaW5nLgorICAgICAgICAgICAobGFtYmRhIChtZW51IF9j bGljaykKKyAgICAgICAgICAgICAoZGVmaW5lLWtleSBtZW51IFtmb28taXRlbV0gJyhtZW51 LWl0ZW0gIkZvbyIgaWRlbnRpdHkpKQorICAgICAgICAgICAgIChkZWZpbmUta2V5IG1lbnUg W2JlZ2luLXNlcGFyYXRvcl0gbWVudS1iYXItc2VwYXJhdG9yKQorICAgICAgICAgICAgIChk ZWZpbmUta2V5LWFmdGVyIG1lbnUgW2VuZC1zZXBhcmF0b3JdIG1lbnUtYmFyLXNlcGFyYXRv cikKKyAgICAgICAgICAgICBtZW51KSkpKQorICAgIChkb2xpc3QgKGZ1biB0ZXN0LWZ1bmN0 aW9ucykKKyAgICAgIChsZXQgKChjb250ZXh0LW1lbnUtZnVuY3Rpb25zIChsaXN0IGZ1bikp KQorICAgICAgICAoc2hvdWxkIChlcXVhbCAnKGtleW1hcCAoZm9vLWl0ZW0gbWVudS1pdGVt ICJGb28iIGlkZW50aXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29u dGV4dCBNZW51IikKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHQtbWVudS1tYXAp KSkpKSkKKyAgOzsgTWVudXMgd2l0aCBzZXBhcmF0b3JzIGF0IGJlZ2lubmluZyBhbmQvb3Ig ZW5kIHdpdGggYSBtZW51LWl0ZW0KKyAgOzsgYWZ0ZXIgdGhlIHByb21wdCBzdHJpbmcuCisg IChsZXQgKCh0ZXN0LWZ1bmN0aW9ucworICAgICAgICAgJyg7OyBTZXBhcmF0b3IgYmVmb3Jl IHRoZSBvdmVyYWxsIHByb21wdCBzdHJpbmcuCisgICAgICAgICAgIChsYW1iZGEgKG1lbnUg X2NsaWNrKQorICAgICAgICAgICAgIChkZWZpbmUta2V5IG1lbnUgW3NlcGFyYXRvcl0gbWVu dS1iYXItc2VwYXJhdG9yKQorICAgICAgICAgICAgIChkZWZpbmUta2V5LWFmdGVyIG1lbnUg W2Zvby1pdGVtXSAnKG1lbnUtaXRlbSAiRm9vIiBpZGVudGl0eSkpCisgICAgICAgICAgICAg bWVudSkKKyAgICAgICAgICAgOzsgU2VwYXJhdG9yIGFmdGVyIHRoZSBvdmVyYWxsIHByb21w dCBzdHJpbmcsIGJ1dCBiZWZvcmUKKyAgICAgICAgICAgOzsgdGhlIG1lbnUtaXRlbS4KKyAg ICAgICAgICAgKGxhbWJkYSAobWVudSBfY2xpY2spCisgICAgICAgICAgICAgKGRlZmluZS1r ZXktYWZ0ZXIgbWVudSBbc2VwYXJhdG9yXSBtZW51LWJhci1zZXBhcmF0b3IpCisgICAgICAg ICAgICAgKGRlZmluZS1rZXktYWZ0ZXIgbWVudSBbZm9vLWl0ZW1dICcobWVudS1pdGVtICJG b28iIGlkZW50aXR5KSkKKyAgICAgICAgICAgICBtZW51KQorICAgICAgICAgICA7OyBTZXBh cmF0b3IgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgKGxhbWJkYSAobWVudSBfY2xpY2spCisg ICAgICAgICAgICAgKGRlZmluZS1rZXktYWZ0ZXIgbWVudSBbZm9vLWl0ZW1dICcobWVudS1p dGVtICJGb28iIGlkZW50aXR5KSkKKyAgICAgICAgICAgICAoZGVmaW5lLWtleS1hZnRlciBt ZW51IFtzZXBhcmF0b3JdIG1lbnUtYmFyLXNlcGFyYXRvcikKKyAgICAgICAgICAgICBtZW51 KQorICAgICAgICAgICA7OyBCZWdpbiBhbmQgZW5kIHNlcGFyYXRvcnMgYWZ0ZXIgdGhlIG92 ZXJhbGwgcHJvbXB0IHN0cmluZy4KKyAgICAgICAgICAgKGxhbWJkYSAobWVudSBfY2xpY2sp CisgICAgICAgICAgICAgKGRlZmluZS1rZXktYWZ0ZXIgbWVudSBbYmVnaW4tc2VwYXJhdG9y XSBtZW51LWJhci1zZXBhcmF0b3IpCisgICAgICAgICAgICAgKGRlZmluZS1rZXktYWZ0ZXIg bWVudSBbZm9vLWl0ZW1dICcobWVudS1pdGVtICJGb28iIGlkZW50aXR5KSkKKyAgICAgICAg ICAgICAoZGVmaW5lLWtleS1hZnRlciBtZW51IFtlbmQtc2VwYXJhdG9yXSBtZW51LWJhci1z ZXBhcmF0b3IpCisgICAgICAgICAgICAgbWVudSkKKyAgICAgICAgICAgOzsgQmVnaW4gc2Vw YXJhdG9yIGJlZm9yZSBhbmQgZW5kIHNlcGFyYXRvciBhZnRlciB0aGUKKyAgICAgICAgICAg Ozsgb3ZlcmFsbCBwcm9tcHQgc3RyaW5nLgorICAgICAgICAgICAobGFtYmRhIChtZW51IF9j bGljaykKKyAgICAgICAgICAgICAoZGVmaW5lLWtleSBtZW51IFtiZWdpbi1zZXBhcmF0b3Jd IG1lbnUtYmFyLXNlcGFyYXRvcikKKyAgICAgICAgICAgICAoZGVmaW5lLWtleS1hZnRlciBt ZW51IFtmb28taXRlbV0gJyhtZW51LWl0ZW0gIkZvbyIgaWRlbnRpdHkpKQorICAgICAgICAg ICAgIChkZWZpbmUta2V5LWFmdGVyIG1lbnUgW2VuZC1zZXBhcmF0b3JdIG1lbnUtYmFyLXNl cGFyYXRvcikKKyAgICAgICAgICAgICBtZW51KSkpKQorICAgIChkb2xpc3QgKGZ1biB0ZXN0 LWZ1bmN0aW9ucykKKyAgICAgIChsZXQgKChjb250ZXh0LW1lbnUtZnVuY3Rpb25zIChsaXN0 IGZ1bikpKQorICAgICAgICAoc2hvdWxkIChlcXVhbCAnKGtleW1hcCAiQ29udGV4dCBNZW51 IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9vLWl0ZW0gbWVudS1pdGVt ICJGb28iIGlkZW50aXR5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHQtbWVu dS1tYXApKSkpKSkpCiAKIDs7OyBtb3VzZS10ZXN0cy5lbCBlbmRzIGhlcmUKLS0gCjIuMjUu MQoK --------------7C0D9B8458D468FAB89D2B2F--