From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Konstantin Kharlamov Newsgroups: gmane.emacs.bugs Subject: bug#68579: [PATCH v2] Support a local repo as URL in treesit-language-source-alist Date: Sat, 27 Jan 2024 21:53:15 +0300 Message-ID: References: <0ffc2f474cf84ed3c63aa82091c967807e5ca0e6.camel@yandex.ru> <20240120115637.25253-1-Hi-Angel@yandex.ru> <86sf2j86co.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-h2jzGW51O0AfQBORfJBb" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="17954"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Evolution 3.50.3 Cc: 68579@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Jan 27 19:54:04 2024 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 1rTnoa-0004VJ-OM for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 27 Jan 2024 19:54:04 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rTnoS-0003av-Qu; Sat, 27 Jan 2024 13:53:56 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rTnoQ-0003al-Oh for bug-gnu-emacs@gnu.org; Sat, 27 Jan 2024 13:53:54 -0500 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rTnoQ-0002Ud-Gp for bug-gnu-emacs@gnu.org; Sat, 27 Jan 2024 13:53:54 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rTnoX-0001Kz-Lc for bug-gnu-emacs@gnu.org; Sat, 27 Jan 2024 13:54:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Konstantin Kharlamov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 27 Jan 2024 18:54:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 68579 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 68579-submit@debbugs.gnu.org id=B68579.17063816124747 (code B ref 68579); Sat, 27 Jan 2024 18:54:01 +0000 Original-Received: (at 68579) by debbugs.gnu.org; 27 Jan 2024 18:53:32 +0000 Original-Received: from localhost ([127.0.0.1]:55938 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rTno3-0001E9-1O for submit@debbugs.gnu.org; Sat, 27 Jan 2024 13:53:31 -0500 Original-Received: from forward500c.mail.yandex.net ([178.154.239.208]:40284) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rTnnz-0001Bi-5E for 68579@debbugs.gnu.org; Sat, 27 Jan 2024 13:53:29 -0500 Original-Received: from mail-nwsmtp-smtp-production-main-63.sas.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-63.sas.yp-c.yandex.net [IPv6:2a02:6b8:c14:6e01:0:640:627f:0]) by forward500c.mail.yandex.net (Yandex) with ESMTP id BA92660F05; Sat, 27 Jan 2024 21:53:16 +0300 (MSK) Original-Received: by mail-nwsmtp-smtp-production-main-63.sas.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id FrbdqlS4ReA0-mYvVFSQU; Sat, 27 Jan 2024 21:53:16 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1706381596; bh=URlZO+6bwY7Lh2JlirXvAyIot0Rl7zA0ABIvctwA1fU=; h=In-Reply-To:Cc:References:To:From:Date:Subject:Message-ID; b=h5jWIdbybgy3r0JSV8cCw15/M3qt7vO7+VtwfHdIM7EAhd+8I86X3L1t/lbXf7WNK JheOgUvlUGmLoIaWD5s/rh+Tmnu8j4ya2aVUZB9Rql1L77zV6/2KUWa7e+F7iS2sVU QCWi9pXTleNJc0RSv+fj8dqHjrvhZjxp8J2JYDkE= Authentication-Results: mail-nwsmtp-smtp-production-main-63.sas.yp-c.yandex.net; dkim=pass header.i=@yandex.ru In-Reply-To: <86sf2j86co.fsf@gnu.org> 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-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:279031 Archived-At: --=-h2jzGW51O0AfQBORfJBb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, 2024-01-27 at 11:37 +0200, Eli Zaretskii wrote: > > From: Konstantin Kharlamov > > Date: Sat, 20 Jan 2024 14:56:29 +0300 > >=20 > > Sometimes people may need to bisect to find specific revision in a > > grammar repo. In this case they'd want to point the URL to the > > local > > repo to avoid cloning it on every rebuild. So add support for full > > path in treesit-language-source-alist. > >=20 > > * lisp/treesit.el (treesit--install-language-grammar-1): Test if > > URL > > starts with / meaning that the URL is a local path.=C2=A0 Then if it is= , > > avoid cloning the repo and removing the path on success. > > (treesit--git-clone-repo): Factor out the code for cloning to a > > separate > > function. > > (treesit--git-checkout-branch): A helper to checkout the revision > > for > > cases where we didn't clone the repo but want it to point the > > revision. > > --- >=20 > Thanks, but could you please send the patch as attachments created > with "git format-patch", and include only the stuff you think should > be in the patch and the commit log message? >=20 > Also, I have a few minor comments below. >=20 > > ++++ > > +** 'treesit-install-language-grammar' can handle local directory > > as URL. > > +It is now possible to pass a directory of a local repository as > > URL > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 > ^^^^^^ > I think you mean "instead of a URL" there. Right, sorry, I was thinking of "URL" being the name of the argument, but your text sure is clearer. > > +inside 'treesit-language-source-alist', so that calling > > +'treesit-install-language-grammar' would avoid cloning the > > repository. > > +It may be useful for example for the purposes of bisecting a > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 ^ > Commas missing there. >=20 > > --- a/lisp/treesit.el > > +++ b/lisp/treesit.el > > @@ -3410,14 +3410,16 @@ treesit-explore-mode > > =C2=A0;;; Install & build language grammar > > =C2=A0 > > =C2=A0(defvar treesit-language-source-alist nil > > -=C2=A0 "Configuration for downloading and installing tree-sitter > > language grammars. > > +=C2=A0 "Configuration for downloading and installing tree-sitter > > language > > +grammars. The grammar can also be built from a local directory if > > +URL is an existing local path to the repo. >=20 > The first line of a doc string should be a single complete sentence > (because various apropos commands display only the first lines of doc > strings). Ah, okay, in this case I'm a bit confused regarding what you wanted me to do by asking to provide a small description of the workflow. I've documented that URL arg may accept a local dir. I can put this new sentence to a separate paragraph, but I'm not sure it reads too well, given the same information is provided one paragraph below. I've reverted this change for now. > > =C2=A0The value should be an alist where each element has the form > > =C2=A0 > > =C2=A0=C2=A0=C2=A0=C2=A0 (LANG . (URL REVISION SOURCE-DIR CC C++)) > > =C2=A0 > > =C2=A0Only LANG and URL are mandatory.=C2=A0 LANG is the language symbo= l. > > -URL is the Git repository URL for the grammar. > > +URL is the Git repository URL or directory name for the grammar. >=20 > Suggest to reword: >=20 > =C2=A0 URL is the URL of the grammar's Git repository or a directory wher= e > =C2=A0 the repository has been cloned. >=20 > Thanks. Thanks! Patch is attached, everything is addressed except one question above. I also fixed "one space" to two spaces" in one place in the commit description. --=-h2jzGW51O0AfQBORfJBb Content-Disposition: attachment; filename="1.patch" Content-Type: text/x-patch; name="1.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA4N2E4OTg0MzY2YWI4NDNmNmEyOGEzMGE3NGNmNTE5MzAxOTc4YmQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLb25zdGFudGluIEtoYXJsYW1vdiA8SGktQW5nZWxAeWFuZGV4 LnJ1PgpEYXRlOiBGcmksIDE5IEphbiAyMDI0IDEwOjMzOjQ3ICswMzAwClN1YmplY3Q6IFtQQVRD SF0gU3VwcG9ydCBhIGxvY2FsIHJlcG8gYXMgVVJMIGluIHRyZWVzaXQtbGFuZ3VhZ2Utc291cmNl LWFsaXN0CgpTb21ldGltZXMgcGVvcGxlIG1heSBuZWVkIHRvIGJpc2VjdCB0byBmaW5kIHNwZWNp ZmljIHJldmlzaW9uIGluIGEKZ3JhbW1hciByZXBvLiAgSW4gdGhpcyBjYXNlIHRoZXknZCB3YW50 IHRvIHBvaW50IHRoZSBVUkwgdG8gdGhlIGxvY2FsCnJlcG8gdG8gYXZvaWQgY2xvbmluZyBpdCBv biBldmVyeSByZWJ1aWxkLiAgU28gYWRkIHN1cHBvcnQgZm9yIGZ1bGwKcGF0aCBpbiB0cmVlc2l0 LWxhbmd1YWdlLXNvdXJjZS1hbGlzdC4KCiogbGlzcC90cmVlc2l0LmVsICh0cmVlc2l0LS1pbnN0 YWxsLWxhbmd1YWdlLWdyYW1tYXItMSk6IFRlc3QgaWYgVVJMCnN0YXJ0cyB3aXRoIC8gbWVhbmlu ZyB0aGF0IHRoZSBVUkwgaXMgYSBsb2NhbCBwYXRoLiAgVGhlbiBpZiBpdCBpcywKYXZvaWQgY2xv bmluZyB0aGUgcmVwbyBhbmQgcmVtb3ZpbmcgdGhlIHBhdGggb24gc3VjY2Vzcy4KKHRyZWVzaXQt LWdpdC1jbG9uZS1yZXBvKTogRmFjdG9yIG91dCB0aGUgY29kZSBmb3IgY2xvbmluZyB0byBhIHNl cGFyYXRlCmZ1bmN0aW9uLgoodHJlZXNpdC0tZ2l0LWNoZWNrb3V0LWJyYW5jaCk6IEEgaGVscGVy IHRvIGNoZWNrb3V0IHRoZSByZXZpc2lvbiBmb3IKY2FzZXMgd2hlcmUgd2UgZGlkbid0IGNsb25l IHRoZSByZXBvIGJ1dCB3YW50IGl0IHRvIHBvaW50IHRoZQpyZXZpc2lvbi4KLS0tCiBldGMvTkVX UyAgICAgICAgfCAgOCArKysrKysrKwogbGlzcC90cmVlc2l0LmVsIHwgNDYgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA0MiBp bnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ldGMvTkVXUyBiL2V0 Yy9ORVdTCmluZGV4IDczNWEwNWY2NTc5Li45YmRjM2FmNWU3MSAxMDA2NDQKLS0tIGEvZXRjL05F V1MKKysrIGIvZXRjL05FV1MKQEAgLTE4MzIsNiArMTgzMiwxNCBAQCBUaGUgJ3Rlc3QnIHBhcmFt ZXRlciBpcyBvbWl0dGVkIGlmIGl0IGlzICdlcWwnICh0aGUgZGVmYXVsdCksIGFzIGlzCiAnZGF0 YScgaWYgZW1wdHkuICAncmVoYXNoLXNpemUnLCAncmVoYXNoLXRocmVzaG9sZCcgYW5kICdzaXpl JyBhcmUKIGFsd2F5cyBvbWl0dGVkLCBhbmQgaWdub3JlZCBpZiBwcmVzZW50IHdoZW4gdGhlIG9i amVjdCBpcyByZWFkIGJhY2sgaW4uCiAKKysrKworKiogJ3RyZWVzaXQtaW5zdGFsbC1sYW5ndWFn ZS1ncmFtbWFyJyBjYW4gaGFuZGxlIGxvY2FsIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIFVSTC4KK0l0 IGlzIG5vdyBwb3NzaWJsZSB0byBwYXNzIGEgZGlyZWN0b3J5IG9mIGEgbG9jYWwgcmVwb3NpdG9y eSBhcyBVUkwKK2luc2lkZSAndHJlZXNpdC1sYW5ndWFnZS1zb3VyY2UtYWxpc3QnLCBzbyB0aGF0 IGNhbGxpbmcKKyd0cmVlc2l0LWluc3RhbGwtbGFuZ3VhZ2UtZ3JhbW1hcicgd291bGQgYXZvaWQg Y2xvbmluZyB0aGUgcmVwb3NpdG9yeS4KK0l0IG1heSBiZSB1c2VmdWwsIGZvciBleGFtcGxlLCBm b3IgdGhlIHB1cnBvc2VzIG9mIGJpc2VjdGluZyBhCit0cmVlc2l0dGVyIGdyYW1tYXIuCisKIAwK ICogQ2hhbmdlcyBpbiBFbWFjcyAzMC4xIG9uIE5vbi1GcmVlIE9wZXJhdGluZyBTeXN0ZW1zCiAK ZGlmZiAtLWdpdCBhL2xpc3AvdHJlZXNpdC5lbCBiL2xpc3AvdHJlZXNpdC5lbAppbmRleCBjOGI0 NzNjN2JiOC4uYjFmOWQ1NTE0NDIgMTAwNjQ0Ci0tLSBhL2xpc3AvdHJlZXNpdC5lbAorKysgYi9s aXNwL3RyZWVzaXQuZWwKQEAgLTM0MTcsNyArMzQxNyw4IEBAIHRyZWVzaXQtbGFuZ3VhZ2Utc291 cmNlLWFsaXN0CiAgICAgKExBTkcgLiAoVVJMIFJFVklTSU9OIFNPVVJDRS1ESVIgQ0MgQysrKSkK IAogT25seSBMQU5HIGFuZCBVUkwgYXJlIG1hbmRhdG9yeS4gIExBTkcgaXMgdGhlIGxhbmd1YWdl IHN5bWJvbC4KLVVSTCBpcyB0aGUgR2l0IHJlcG9zaXRvcnkgVVJMIGZvciB0aGUgZ3JhbW1hci4K K1VSTCBpcyB0aGUgVVJMIG9mIHRoZSBncmFtbWFyJ3MgR2l0IHJlcG9zaXRvcnkgb3IgYSBkaXJl Y3RvcnkKK3doZXJlIHRoZSByZXBvc2l0b3J5IGhhcyBiZWVuIGNsb25lZC4KIAogUkVWSVNJT04g aXMgdGhlIEdpdCB0YWcgb3IgYnJhbmNoIG9mIHRoZSBkZXNpcmVkIHZlcnNpb24sCiBkZWZhdWx0 aW5nIHRvIHRoZSBsYXRlc3QgZGVmYXVsdCBicmFuY2guCkBAIC0zNTUxLDYgKzM1NTIsMjYgQEAg dHJlZXNpdC0tY2FsbC1wcm9jZXNzLXNpZ25hbAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGJ1ZmZlci1zdHJpbmcpKSkKICAgICAoZXJhc2UtYnVmZmVyKSkpCiAKKyhkZWZ1biB0 cmVlc2l0LS1naXQtY2hlY2tvdXQtYnJhbmNoIChyZXBvLWRpciByZXZpc2lvbikKKyAgIkNoZWNr b3V0IFJFVklTSU9OIGluIGEgcmVwbyBsb2NhdGVkIGluIFJFUE8tRElSLiIKKyAgKHRyZWVzaXQt LWNhbGwtcHJvY2Vzcy1zaWduYWwKKyAgICJnaXQiIG5pbCB0IG5pbCAiLUMiIHJlcG8tZGlyICJj aGVja291dCIgcmV2aXNpb24pKQorCisoZGVmdW4gdHJlZXNpdC0tZ2l0LWNsb25lLXJlcG8gKHVy bCByZXZpc2lvbiB3b3JrZGlyKQorICAiQ2xvbmUgcmVwbyBwb2ludGVkIGJ5IFVSTCBhdCBjb21t aXQgUkVWSVNJT04gdG8gV09SS0RJUi4KKworUkVWSVNJT04gbWF5IGJlIG5pbCwgaW4gd2hpY2gg Y2FzZSB0aGUgY2xvbmVkIHJlcG8gd2lsbCBiZSBhdCBpdHMKK2RlZmF1bHQgYnJhbmNoLiIKKyAg KG1lc3NhZ2UgIkNsb25pbmcgcmVwb3NpdG9yeSIpCisgIDs7IGdpdCBjbG9uZSB4eHggLS1kZXB0 aCAxIC0tcXVpZXQgWy1iIHl5eV0gd29ya2RpcgorICAoaWYgcmV2aXNpb24KKyAgICAgICh0cmVl c2l0LS1jYWxsLXByb2Nlc3Mtc2lnbmFsCisgICAgICAgImdpdCIgbmlsIHQgbmlsICJjbG9uZSIg dXJsICItLWRlcHRoIiAiMSIgIi0tcXVpZXQiCisgICAgICAgIi1iIiByZXZpc2lvbiB3b3JrZGly KQorICAgICh0cmVlc2l0LS1jYWxsLXByb2Nlc3Mtc2lnbmFsCisgICAgICJnaXQiIG5pbCB0IG5p bCAiY2xvbmUiIHVybCAiLS1kZXB0aCIgIjEiICItLXF1aWV0IgorICAgICB3b3JrZGlyKSkpCisK IChkZWZ1biB0cmVlc2l0LS1pbnN0YWxsLWxhbmd1YWdlLWdyYW1tYXItMQogICAgIChvdXQtZGly IGxhbmcgdXJsICZvcHRpb25hbCByZXZpc2lvbiBzb3VyY2UtZGlyIGNjIGMrKykKICAgIkluc3Rh bGwgYW5kIGNvbXBpbGUgYSB0cmVlLXNpdHRlciBsYW5ndWFnZSBncmFtbWFyIGxpYnJhcnkuCkBA IC0zNTY0LDggKzM1ODUsMTIgQEAgdHJlZXNpdC0taW5zdGFsbC1sYW5ndWFnZS1ncmFtbWFyLTEK IGB0cmVlc2l0LWxhbmd1YWdlLXNvdXJjZS1hbGlzdCcuICBJZiBhbnl0aGluZyBnb2VzIHdyb25n LCB0aGlzCiBmdW5jdGlvbiBzaWduYWxzIGFuIGVycm9yLiIKICAgKGxldCogKChsYW5nIChzeW1i b2wtbmFtZSBsYW5nKSkKKyAgICAgICAgIChtYXliZS1yZXBvLWRpciAoZXhwYW5kLWZpbGUtbmFt ZSB1cmwpKQorICAgICAgICAgKHVybC1pcy1kaXIgKGZpbGUtYWNjZXNzaWJsZS1kaXJlY3Rvcnkt cCBtYXliZS1yZXBvLWRpcikpCiAgICAgICAgICAoZGVmYXVsdC1kaXJlY3RvcnkgKG1ha2UtdGVt cC1maWxlICJ0cmVlc2l0LXdvcmtkaXIiIHQpKQotICAgICAgICAgKHdvcmtkaXIgKGV4cGFuZC1m aWxlLW5hbWUgInJlcG8iKSkKKyAgICAgICAgICh3b3JrZGlyIChpZiB1cmwtaXMtZGlyCisgICAg ICAgICAgICAgICAgICAgICAgbWF5YmUtcmVwby1kaXIKKyAgICAgICAgICAgICAgICAgICAgKGV4 cGFuZC1maWxlLW5hbWUgInJlcG8iKSkpCiAgICAgICAgICAoc291cmNlLWRpciAoZXhwYW5kLWZp bGUtbmFtZSAob3Igc291cmNlLWRpciAic3JjIikgd29ya2RpcikpCiAgICAgICAgICAoY2MgKG9y IGNjIChzZXEtZmluZCAjJ2V4ZWN1dGFibGUtZmluZCAnKCJjYyIgImdjYyIgImM5OSIpKQogICAg ICAgICAgICAgICAgICA7OyBJZiBubyBDIGNvbXBpbGVyIGZvdW5kLCBqdXN0IHVzZSBjYyBhbmQg bGV0CkBAIC0zNTgwLDE1ICszNjA1LDEwIEBAIHRyZWVzaXQtLWluc3RhbGwtbGFuZ3VhZ2UtZ3Jh bW1hci0xCiAgICAgICAgICAobGliLW5hbWUgKGNvbmNhdCAibGlidHJlZS1zaXR0ZXItIiBsYW5n IHNvZXh0KSkpCiAgICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgICh3aXRoLXRlbXAtYnVmZmVy Ci0gICAgICAgICAgKG1lc3NhZ2UgIkNsb25pbmcgcmVwb3NpdG9yeSIpCi0gICAgICAgICAgOzsg Z2l0IGNsb25lIHh4eCAtLWRlcHRoIDEgLS1xdWlldCBbLWIgeXl5XSB3b3JrZGlyCi0gICAgICAg ICAgKGlmIHJldmlzaW9uCi0gICAgICAgICAgICAgICh0cmVlc2l0LS1jYWxsLXByb2Nlc3Mtc2ln bmFsCi0gICAgICAgICAgICAgICAiZ2l0IiBuaWwgdCBuaWwgImNsb25lIiB1cmwgIi0tZGVwdGgi ICIxIiAiLS1xdWlldCIKLSAgICAgICAgICAgICAgICItYiIgcmV2aXNpb24gd29ya2RpcikKLSAg ICAgICAgICAgICh0cmVlc2l0LS1jYWxsLXByb2Nlc3Mtc2lnbmFsCi0gICAgICAgICAgICAgImdp dCIgbmlsIHQgbmlsICJjbG9uZSIgdXJsICItLWRlcHRoIiAiMSIgIi0tcXVpZXQiCi0gICAgICAg ICAgICAgd29ya2RpcikpCisgICAgICAgICAgKGlmIHVybC1pcy1kaXIKKyAgICAgICAgICAgICAg KHdoZW4gcmV2aXNpb24KKyAgICAgICAgICAgICAgICAodHJlZXNpdC0tZ2l0LWNoZWNrb3V0LWJy YW5jaCB3b3JrZGlyIHJldmlzaW9uKSkKKyAgICAgICAgICAgICh0cmVlc2l0LS1naXQtY2xvbmUt cmVwbyB1cmwgcmV2aXNpb24gd29ya2RpcikpCiAgICAgICAgICAgOzsgV2UgbmVlZCB0byBnbyBp bnRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGJlY2F1c2Ugc29tZQogICAgICAgICAgIDs7IGhlYWRl ciBmaWxlcyB1c2UgcmVsYXRpdmUgcGF0aCAoI2luY2x1ZGUgIi4uL3h4eCIpLgogICAgICAgICAg IDs7IGNkICIke3NvdXJjZWRpcn0iCkBAIC0zNjM1LDcgKzM2NTUsOSBAQCB0cmVlc2l0LS1pbnN0 YWxsLWxhbmd1YWdlLWdyYW1tYXItMQogICAgICAgICAgICAgOzsgSWdub3JlIGVycm9ycywgaW4g Y2FzZSB0aGUgb2xkIHZlcnNpb24gaXMgc3RpbGwgdXNlZC4KICAgICAgICAgICAgIChpZ25vcmUt ZXJyb3JzIChkZWxldGUtZmlsZSBvbGQtZm5hbWUpKSkKICAgICAgICAgICAobWVzc2FnZSAiTGli cmFyeSBpbnN0YWxsZWQgdG8gJXMvJXMiIG91dC1kaXIgbGliLW5hbWUpKQotICAgICAgKHdoZW4g KGZpbGUtZXhpc3RzLXAgd29ya2RpcikKKyAgICAgIDs7IFJlbW92ZSB3b3JrZGlyIGlmIGl0J3Mg bm90IGEgcmVwbyBvd25lZCBieSB1c2VyIGFuZCB3ZQorICAgICAgOzsgbWFuYWdlZCB0byBjcmVh dGUgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLgorICAgICAgKHdoZW4gKGFuZCAobm90IHVybC1pcy1k aXIpIChmaWxlLWV4aXN0cy1wIHdvcmtkaXIpKQogICAgICAgICAoZGVsZXRlLWRpcmVjdG9yeSB3 b3JrZGlyIHQpKSkpKQogCiA7OzsgRXRjCi0tIAoyLjQzLjAKCg== --=-h2jzGW51O0AfQBORfJBb--