From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?UTF-8?Q?Jo=C3=A3o_Paulo_Labegalini_de_Carvalho?= Newsgroups: gmane.emacs.devel Subject: Re: Initial fontification in sh-mode with tree-sittter Date: Sat, 12 Nov 2022 15:04:26 -0700 Message-ID: References: <6C8B0F8E-DF61-4BC3-B0D0-56DBB66BE637@gmail.com> <7AE71CCA-6F18-4DE6-8608-7D9B3E9E52FB@gmail.com> <9BA853EA-8B7F-41A0-A174-D86DF5CE7788@gmail.com> <83sfj3cfl0.fsf@gnu.org> <03309451-1AEB-458C-88FD-9715CECC27A2@gmail.com> <83mt9bc9ke.fsf@gnu.org> <8335b19ndr.fsf@gnu.org> <39ECD413-BD10-4BF3-90AC-36F02276607E@gmail.com> <8A2361BB-1081-4550-AC29-B9E99BFC2FB8@gmail.com> <42DBD4F5-71D9-434E-B7B4-4E0FF89F934F@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000005390b405ed4d319e" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="21089"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Eli Zaretskii , emacs-devel@gnu.org To: Yuan Fu Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Nov 12 23:05:58 2022 Return-path: Envelope-to: ged-emacs-devel@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 1otydR-0005Ip-Ra for ged-emacs-devel@m.gmane-mx.org; Sat, 12 Nov 2022 23:05:58 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1otycH-0008B4-LP; Sat, 12 Nov 2022 17:04:45 -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 1otycG-0008Ao-3C for emacs-devel@gnu.org; Sat, 12 Nov 2022 17:04:44 -0500 Original-Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1otycD-0006wl-Mx; Sat, 12 Nov 2022 17:04:43 -0500 Original-Received: by mail-ej1-x62e.google.com with SMTP id n12so19996743eja.11; Sat, 12 Nov 2022 14:04:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=FFKSYfFkOHV6SWd2A8N6KX26A+iAeti/MLJ6nAgQWGQ=; b=UHquG73zJj0YyasO6G/BQOTrrT+sTGdilkhtNDb/LN/27icePFkbxcdiXif2hnZMVt DphARTXpnHPbAlSOYgDSjgzt1wwtA1vPz2INbhncNW8MC46BqQbDMhIEotJzaT4saefs Ubd0h8hjKGRgxERKIN+S/hJua0uKl31dx1U50R89paoFJ7+kejeXL7AyY5iSbcnenAYa H2kFadldcgEWQFHt+ksa+zlpldhuBMVgzBrs7IHUu83y9dwlrLrwWtTHSqRayD8gadYX X3yBycrTWV6NJsIVWPM4qLYztG8LrCCnJDcDZK2QOWNOFI7VzxRgSDJtaN8IZaHxznM+ ONnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=FFKSYfFkOHV6SWd2A8N6KX26A+iAeti/MLJ6nAgQWGQ=; b=Cm9Phye1TZ+cwLd63lryeDa0IwDeGJDFA32Q+v2pI45Sjz2YkitK5IDlXqd8oKN5rr ydPriRr2GwQVOXGYcfmsG4s29I9F3JxzgyW7hWIMmkjxedQGxXEziABB/XAB9uHMXffG upiDhlts/sBmQW8fcX+3CObiq4HIEGxm3bGLrLrGcGRUx24Qky9bklRHQIcFvaRCyMxA g84W7alnWr0xRAJTZTd/k2+DWYs/tunzgTezwTbpKS3NiVASwjvLYGWUHaSjKE+hoVlS 8KYTCYtFxQuR8e9+nOoZyD333BOrwANpK42p0qEgRxlmZSiueF2vi9IyBxd9ANBHaZJs 7PuQ== X-Gm-Message-State: ANoB5plDNxxnidHBFN94t5CZ8M2o/k4yZspl4l+YQilb0i+d2anSrG4K yucmYQx/BmiEt06jdbIsDbdxv7xKJHOqsanZB6g= X-Google-Smtp-Source: AA0mqf5vigDOIxD6RmD9TC1rtZw7EuMfR+TtlJc3+rYbK8X12NBhOOmBunPPgTA24fa6APTafcFWQFAi+9japZ7io0s= X-Received: by 2002:a17:906:6592:b0:7ae:9677:d8dd with SMTP id x18-20020a170906659200b007ae9677d8ddmr6187273ejn.71.1668290679356; Sat, 12 Nov 2022 14:04:39 -0800 (PST) In-Reply-To: <42DBD4F5-71D9-434E-B7B4-4E0FF89F934F@gmail.com> Received-SPF: pass client-ip=2a00:1450:4864:20::62e; envelope-from=jaopaulolc@gmail.com; helo=mail-ej1-x62e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 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-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:299682 Archived-At: --0000000000005390b405ed4d319e Content-Type: multipart/alternative; boundary="0000000000005390b205ed4d319c" --0000000000005390b205ed4d319c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable > > I see. This is tree-sitter-bash=E2=80=99s problem. When there are only ne= wlines > between two EOF=E2=80=99s, the parser erroneously marks everything that f= ollows as > heredoc_body. I tried tree-sitter=E2=80=99s online demo and it gives the = same > result[1]. We should report this to tree-sitter-bash=E2=80=99s author. > Sorry for the delay. I confirmed the problem was in the tree-sitter-bash side and submitted a PR to fix it: https://github.com/tree-sitter/tree-sitter-bash/pull/137 Once my fixes are pulled in, there is no change required to my patch. > Also, when defining sh-mode--treesit-settings, instead of using the value > sh-shell as the language, it=E2=80=99s better to just use =E2=80=98bash. = Here is what > happened to me: my default value for sh-shell is fish, so > sh-mode--treesit-settings was defined with language =3D fish. When I open > heredoc-issue.sh, sh-mode parses the shebang and sets sh-shell to bash. > Since bash does have a parser, (treesit-ready-p =E2=80=99sh-mode sh-shell= ) returns > t, and tree-sitter is activated. However when font-lock tries to use the > query, it errors because query tries to load a parser for fish. > I see. I thought that because sh-mode--treesit-settings is executed after the local variable sh-shell is defined, it would always be equal to the detected/file shell type. I am still getting my head around scope in elisp. I did the change and I think it is good to go, unless there is anything else to improve for now. I hope to soon get time to work on imenu, navigation, and indentation for sh-mode & bash with tree-sitter. Please find the corrected patch attached. --=20 Jo=C3=A3o Paulo L. de Carvalho Ph.D Computer Science | IC-UNICAMP | Campinas , SP - Brazil Postdoctoral Research Fellow | University of Alberta | Edmonton, AB - Canad= a joao.carvalho@ic.unicamp.br joao.carvalho@ualberta.ca --0000000000005390b205ed4d319c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I see. This is tree-sitter-bash=E2=80=99s problem. When = there are only newlines between two EOF=E2=80=99s, the parser erroneously m= arks everything that follows as heredoc_body. I tried tree-sitter=E2=80=99s= online demo and it gives the same result[1]. We should report this to tree= -sitter-bash=E2=80=99s author.

Sorry fo= r the delay. I confirmed the problem was in the tree-sitter-bash side and s= ubmitted a PR to fix it:=C2=A0https://github.com/tree-sitter/tree-sitter-bash/pul= l/137
Once my fixes are pulled in, there is no change required to my= patch.
=C2=A0
Also, when defining sh-mode--treesit-settings, instead of using the va= lue sh-shell as the language, it=E2=80=99s better to just use =E2=80=98bash= . Here is what happened to me: my default value for sh-shell is fish, so sh= -mode--treesit-settings was defined with language =3D fish. When I open her= edoc-issue.sh, sh-mode parses the shebang and sets sh-shell to bash. Since = bash does have a parser, (treesit-ready-p =E2=80=99sh-mode sh-shell) return= s t, and tree-sitter is activated. However when font-lock tries to use the = query, it errors because query tries to load a parser for fish.

I see. I thought that because sh-mode--treesit-settings is ex= ecuted after the local variable sh-shell is defined, it would always be equ= al to the detected/file shell type. I am still getting my head around scope= in elisp.

I did the change and I think it is good to go, unless the= re is anything else to improve for now.

I hope to soon get time to w= ork on imenu, navigation, and indentation for sh-mode & bash with tree-= sitter.

Please find the corrected patch attached.

--
Jo=C3=A3o Paulo L. de Carvalho
Ph.D Com= puter Science | =C2=A0IC-UNICAMP | Campinas , SP - Brazil
Postdoctoral R= esearch Fellow | University of Alberta | Edmonton, AB - Canada
=
--0000000000005390b205ed4d319c-- --0000000000005390b405ed4d319e Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Initial-fontification-in-sh-mode-with-tree-sitter.patch" Content-Disposition: attachment; filename="0001-Initial-fontification-in-sh-mode-with-tree-sitter.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_laeh5h1n0 RnJvbSA5OWM3Njc5NzI5NDhhZWE0YzFjNmViYTI3ZmQ3MjA0OTY1NWY4YzMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Sm89QzM9QTNvPTIwUD0yRT0yMEw9MkU9MjBk ZT0yMENhcnZhbGhvPz0KIDxqYW9wYXVsb2xjQGdtYWlsLmNvbT4KRGF0ZTogVGh1LCAyNyBPY3Qg MjAyMiAxNTo0NTo1NiAtMDYwMApTdWJqZWN0OiBbUEFUQ0hdIEluaXRpYWwgZm9udGlmaWNhdGlv biBpbiBzaC1tb2RlIHdpdGggdHJlZS1zaXR0ZXIKCi0tLQogbGlzcC9wcm9nbW9kZXMvc2gtc2Ny aXB0LmVsIHwgMTUzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxl IGNoYW5nZWQsIDE0MiBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9saXNwL3Byb2dtb2Rlcy9zaC1zY3JpcHQuZWwgYi9saXNwL3Byb2dtb2Rlcy9zaC1zY3JpcHQu ZWwKaW5kZXggNTU4YjYyYjIwYS4uMTdmOTM4ZTk1YSAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9k ZXMvc2gtc2NyaXB0LmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL3NoLXNjcmlwdC5lbApAQCAtMTQ4 LDYgKzE0OCw3IEBACiAgIChyZXF1aXJlICdsZXQtYWxpc3QpCiAgIChyZXF1aXJlICdzdWJyLXgp KQogKHJlcXVpcmUgJ2V4ZWN1dGFibGUpCisocmVxdWlyZSAndHJlZXNpdCkKIAogKGF1dG9sb2Fk ICdjb21pbnQtY29tcGxldGlvbi1hdC1wb2ludCAiY29taW50IikKIChhdXRvbG9hZCAnY29taW50 LWZpbGVuYW1lLWNvbXBsZXRpb24gImNvbWludCIpCkBAIC0xNTM0LDEzICsxNTM1LDYgQEAgc2gt bW9kZQogICA7OyB3ZSBjYW4ndCBsb29rIGlmIHByZXZpb3VzIGxpbmUgZW5kZWQgd2l0aCBgXCcK ICAgKHNldHEtbG9jYWwgY29taW50LXByb21wdC1yZWdleHAgIl5bIFx0XSoiKQogICAoc2V0cS1s b2NhbCBpbWVudS1jYXNlLWZvbGQtc2VhcmNoIG5pbCkKLSAgKHNldHEgZm9udC1sb2NrLWRlZmF1 bHRzCi0JYCgoc2gtZm9udC1sb2NrLWtleXdvcmRzCi0JICAgc2gtZm9udC1sb2NrLWtleXdvcmRz LTEgc2gtZm9udC1sb2NrLWtleXdvcmRzLTIpCi0JICBuaWwgbmlsCi0JICAoKD8vIC4gInciKSAo P34gLiAidyIpICg/LiAuICJ3IikgKD8tIC4gInciKSAoP18gLiAidyIpKSBuaWwKLQkgIChmb250 LWxvY2stc3ludGFjdGljLWZhY2UtZnVuY3Rpb24KLQkgICAuICwjJ3NoLWZvbnQtbG9jay1zeW50 YWN0aWMtZmFjZS1mdW5jdGlvbikpKQogICAoc2V0cS1sb2NhbCBzeW50YXgtcHJvcGVydGl6ZS1m dW5jdGlvbiAjJ3NoLXN5bnRheC1wcm9wZXJ0aXplLWZ1bmN0aW9uKQogICAoYWRkLWhvb2sgJ3N5 bnRheC1wcm9wZXJ0aXplLWV4dGVuZC1yZWdpb24tZnVuY3Rpb25zCiAgICAgICAgICAgICAjJ3N5 bnRheC1wcm9wZXJ0aXplLW11bHRpbGluZSAnYXBwZW5kICdsb2NhbCkKQEAgLTE1ODcsNyArMTU4 MSwyOCBAQCBzaC1tb2RlCiAgICBuaWwgbmlsKQogICAoYWRkLWhvb2sgJ2ZseW1ha2UtZGlhZ25v c3RpYy1mdW5jdGlvbnMgIydzaC1zaGVsbGNoZWNrLWZseW1ha2UgbmlsIHQpCiAgIChhZGQtaG9v ayAnaGFjay1sb2NhbC12YXJpYWJsZXMtaG9vawotICAgICMnc2gtYWZ0ZXItaGFjay1sb2NhbC12 YXJpYWJsZXMgbmlsIHQpKQorICAgICMnc2gtYWZ0ZXItaGFjay1sb2NhbC12YXJpYWJsZXMgbmls IHQpCisKKyAgKGNvbmQKKyAgIDs7IFRyZWUtc2l0dGVyCisgICAoKHRyZWVzaXQtcmVhZHktcCAn c2gtbW9kZSBzaC1zaGVsbCkKKyAgICAoc2V0cS1sb2NhbCBmb250LWxvY2sta2V5d29yZHMtb25s eSB0KQorICAgIChzZXRxLWxvY2FsIHRyZWVzaXQtZm9udC1sb2NrLWZlYXR1cmUtbGlzdAorICAg ICAgICAgICAgICAgICcoKGNvbW1lbnRzIGZ1bmN0aW9ucyBzdHJpbmdzIGhlcmVkb2NzKQorICAg ICAgICAgICAgICAgICAgKHZhcmlhYmxlcyBrZXl3b3JkcyBjb21tYW5kcyBkZWNsLWNvbW1hbmRz KQorICAgICAgICAgICAgICAgICAgKGNvbnN0YW50cyBvcGVyYXRvcnMgYnVpbHRpbi12YXJpYWJs ZXMpKSkKKyAgICAoc2V0cS1sb2NhbCB0cmVlc2l0LWZvbnQtbG9jay1zZXR0aW5ncworICAgICAg ICAgICAgICAgIHNoLW1vZGUtLXRyZWVzaXQtc2V0dGluZ3MpCisgICAgKHRyZWVzaXQtbWFqb3It bW9kZS1zZXR1cCkpCisgICA7OyBFbGlzcC4KKyAgICh0CisgICAgKHNldHEgZm9udC1sb2NrLWRl ZmF1bHRzCisgICAgICAgICAgYCgoc2gtZm9udC1sb2NrLWtleXdvcmRzCisgICAgICAgICAgICAg c2gtZm9udC1sb2NrLWtleXdvcmRzLTEgc2gtZm9udC1sb2NrLWtleXdvcmRzLTIpCisgICAgICAg ICAgICBuaWwgbmlsCisgICAgICAgICAgICAoKD8vIC4gInciKSAoP34gLiAidyIpICg/LiAuICJ3 IikgKD8tIC4gInciKSAoP18gLiAidyIpKSBuaWwKKyAgICAgICAgICAgIChmb250LWxvY2stc3lu dGFjdGljLWZhY2UtZnVuY3Rpb24KKyAgICAgICAgICAgICAuICwjJ3NoLWZvbnQtbG9jay1zeW50 YWN0aWMtZmFjZS1mdW5jdGlvbikpKSkpKQogCiA7OzsjIyNhdXRvbG9hZAogKGRlZmFsaWFzICdz aGVsbC1zY3JpcHQtbW9kZSAnc2gtbW9kZSkKQEAgLTMxOTEsNiArMzIwNiwxMjIgQEAgc2gtc2hl bGxjaGVjay1mbHltYWtlCiAgICAgICAocHJvY2Vzcy1zZW5kLXJlZ2lvbiBzaC0tc2hlbGxjaGVj ay1wcm9jZXNzIChwb2ludC1taW4pIChwb2ludC1tYXgpKQogICAgICAgKHByb2Nlc3Mtc2VuZC1l b2Ygc2gtLXNoZWxsY2hlY2stcHJvY2VzcykpKSkKIAotKHByb3ZpZGUgJ3NoLXNjcmlwdCkKLQot Ozs7IHNoLXNjcmlwdC5lbCBlbmRzIGhlcmUKKzs7OyBUcmVlLXNpdHRlciBmb250LWxvY2sKKwor KGRlZnZhciBzaC1tb2RlLS10cmVlc2l0LW9wZXJhdG9ycworICAnKCJ8IiAifCYiICJ8fCIgIiYm IiAiPiIgIj4+IiAiPCIgIjw8IiAiPDwtIiAiPDw8IiAiPT0iICIhPSIgIjsiCisgICAgIjs7IiAi OyYiICI7OyYiKQorICAiTGlzdCBvZiBgc2gtbW9kZScgb3BlcmF0b3IgdG8gZm9udGlmeSIpCisK KyhkZWZ2YXIgc2gtbW9kZS0tdHJlZXNpdC1rZXl3b3JkcworICAnKCJjYXNlIiAiZG8iICJkb25l IiAiZWxpZiIgImVsc2UiICJlc2FjIiAiZXhwb3J0IiAiZmkiICJmb3IiCisgICAgImZ1bmN0aW9u IiAiaWYiICJpbiIgInVuc2V0IiAid2hpbGUiICJ0aGVuIikKKyAgIk1pbmltYWwgbGlzdCBvZiBr ZXl3b3JkcyB0aGF0IGJlbG9uZyB0byB0cmVlLXNpdHRlci1iYXNoJ3MgZ3JhbW1hci4KKworU29t ZSByZXNlcnZlZCB3b3JkcyBhcmUgbm90IHJlY29nbml6ZSB0byBrZWVwIHRoZSBncmFtbWFyCitz aW1wbGVyLiBUaG9zZSBhcmUgaWRlbnRpZmllZCB3aXRoIHJlZ2V4LWJhc2VkIGZpbHRlcmVkIHF1 ZXJpZXMuCisKK1NlZSBgc2gtbW9kZS0tdHJlZXNpdC1vdGhlci1rZXl3b3JkcycgYW5kCitgc2gt bW9kZS0tdHJlZXNpdC1zZXR0aW5ncycpLiIpCisKKyhkZWZ1biBzaC1tb2RlLS10cmVlc2l0LW90 aGVyLWtleXdvcmRzICgpCisgICJSZXR1cm5zIGEgbGlzdCBgb3RoZXJzJyBvZiBrZXkvcmVzZXJ2 ZWQgd29yZHMgdG8gYmUgZm9udGlmaWVkIHdpdGgKK3JlZ2V4LWJhc2VkIHF1ZXJpZXMgYXMgdGhl eSBhcmUgbm90IHBhcnQgb2YgdHJlZS1zaXR0ZXItYmFzaCdzCitncmFtbWFyLgorCitTZWUgYHNo LW1vZGUtLXRyZWVzaXQtb3RoZXIta2V5d29yZHMnIGFuZAorYHNoLW1vZGUtLXRyZWVzaXQtc2V0 dGluZ3MnKS4iCisgIChsZXQgKChtaW5pbWFsIHNoLW1vZGUtLXRyZWVzaXQta2V5d29yZHMpCisg ICAgICAgIChhbGwgKGFwcGVuZCAoc2gtZmVhdHVyZSBzaC1sZWFkaW5nLWtleXdvcmRzKQorICAg ICAgICAgICAgICAgICAgICAgKHNoLWZlYXR1cmUgc2gtb3RoZXIta2V5d29yZHMpKSkKKyAgICAg ICAgKG90aGVycykpCisgICAgKGRvbGlzdCAoa2V5d29yZCBhbGwgb3RoZXJzKQorICAgICAgKGlm IChub3QgKG1lbWJlciBrZXl3b3JkIG1pbmltYWwpKQorICAgICAgICAgIChzZXRxIG90aGVycyAo Y29ucyBrZXl3b3JkIG90aGVycykpKSkpKQorCisoZGVmdW4gc2gtbW9kZS0tdHJlZXNpdC1mb250 aWZ5LWRlY2wtY29tbWFuZCAobm9kZSBvdmVycmlkZSBfc3RhcnQgX2VuZCkKKyAgIkZvbnRpZmll cyBvbmx5IHRoZSBuYW1lIG9mIGRlY2xhcmF0aW9uX2NvbW1hbmQgbm9kZXMuCisKK1RoaXMgaXMg dXNlZCBpbnN0ZWFkIG9mIGBmb250LWxvY2stYnVpbHRpb24tZmFjZScgZGlyZWN0bHkgYmVjYXVz ZQorb3RoZXJ3aXNlIHRoZSB3aG9sZSBjb21tYW5kLCBpbmNsdWRpbmcgdGhlIHZhcmlhYmxlIGFz c2lnbm1lbnQgcGFydCwKK2lzIGZvbnRpZmllZCB3aXRoIHdpdGggYGZvbnQtbG9jay1idWlsdGlu LWZhY2UnLiBBbiBhbHRlcm5hdGl2ZSB0bwordGhpcyB3b3VsZCBiZSB0byBkZWNsYXJhdGlvbl9j b21tYW5kIG5vZGVzIHRvIGhhdmUgYSBgbmFtZTonIGZpZWxkLiIKKyAgKGxldCogKChtYXliZS1k ZWNsLWNtZCAodHJlZXNpdC1ub2RlLXBhcmVudCBub2RlKSkKKyAgICAgICAgIChub2RlLXR5cGUg KHRyZWVzaXQtbm9kZS10eXBlIG1heWJlLWRlY2wtY21kKSkpCisgICAgKHdoZW4gKHN0cmluZz0g bm9kZS10eXBlICJkZWNsYXJhdGlvbl9jb21tYW5kIikKKyAgICAgIChsZXQqICgobmFtZS1ub2Rl IChjYXIgKHRyZWVzaXQtbm9kZS1jaGlsZHJlbiBtYXliZS1kZWNsLWNtZCkpKQorICAgICAgICAg ICAgIChuYW1lLWJlZyAodHJlZXNpdC1ub2RlLXN0YXJ0IG5hbWUtbm9kZSkpCisgICAgICAgICAg ICAgKG5hbWUtZW5kICh0cmVlc2l0LW5vZGUtZW5kIG5hbWUtbm9kZSkpKQorICAgICAgICAocHV0 LXRleHQtcHJvcGVydHkgbmFtZS1iZWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUt ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9udC1sb2NrLWJ1aWx0aW4tZmFjZSkpKSkpCisKKyhkZWZ2YXIgc2gtbW9kZS0t dHJlZXNpdC1zZXR0aW5ncworICAodHJlZXNpdC1mb250LWxvY2stcnVsZXMKKyAgIDpmZWF0dXJl ICdjb21tZW50cworICAgOmxhbmd1YWdlIHNoLXNoZWxsCisgICAnKChjb21tZW50KSBAZm9udC1s b2NrLWNvbW1lbnQtZmFjZSkKKyAgIDpmZWF0dXJlICdmdW5jdGlvbnMKKyAgIDpsYW5ndWFnZSBz aC1zaGVsbAorICAgJygoZnVuY3Rpb25fZGVmaW5pdGlvbiBuYW1lOiAod29yZCkgQGZvbnQtbG9j ay1mdW5jdGlvbi1uYW1lLWZhY2UpKQorICAgOmZlYXR1cmUgJ3N0cmluZ3MKKyAgIDpsYW5ndWFn ZSBzaC1zaGVsbAorICAgJyhbKHN0cmluZykgKHJhd19zdHJpbmcpXSBAZm9udC1sb2NrLXN0cmlu Zy1mYWNlKQorICAgOmZlYXR1cmUgJ2hlcmVkb2NzCisgICA6bGFuZ3VhZ2Ugc2gtc2hlbGwKKyAg ICcoWyhoZXJlZG9jX3N0YXJ0KSAoaGVyZWRvY19ib2R5KV0gQHNoLWhlcmVkb2MpCisgICA6ZmVh dHVyZSAndmFyaWFibGVzCisgICA6bGFuZ3VhZ2Ugc2gtc2hlbGwKKyAgICcoKHZhcmlhYmxlX25h bWUpIEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQorICAgOmZlYXR1cmUgJ2tleXdvcmRz CisgICA6bGFuZ3VhZ2Ugc2gtc2hlbGwKKyAgIGAoOzsga2V5d29yZHMKKyAgICAgWyAsQHNoLW1v ZGUtLXRyZWVzaXQta2V5d29yZHMgXSBAZm9udC1sb2NrLWtleXdvcmQtZmFjZQorICAgICA7OyBy ZXNlcnZlZCB3b3JkcworICAgICAoY29tbWFuZF9uYW1lCisgICAgICAoKHdvcmQpIEBmb250LWxv Y2sta2V5d29yZC1mYWNlCisgICAgICAgKDptYXRjaAorICAgICAgICAsKHJ4LXRvLXN0cmluZwor ICAgICAgICAgICAgYChzZXEgYm9sCisgICAgICAgICAgICAgICAgICAob3IgLEAoc2gtbW9kZS0t dHJlZXNpdC1vdGhlci1rZXl3b3JkcykpCisgICAgICAgICAgICAgICAgICBlb2wpKQorICAgICAg ICBAZm9udC1sb2NrLWtleXdvcmQtZmFjZSkpKSkKKyAgIDpmZWF0dXJlICdjb21tYW5kcworICAg Omxhbmd1YWdlIHNoLXNoZWxsCisgICBgKDs7IGZ1bmN0aW9uL25vbi1idWlsdGluIGNvbW1hbmQg Y2FsbHMKKyAgICAgKGNvbW1hbmRfbmFtZSAod29yZCkgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1l LWZhY2UpCisgICAgIDs7IGJ1aWx0aW4gY29tbWFuZHMKKyAgICAgKGNvbW1hbmRfbmFtZQorICAg ICAgKCh3b3JkKSBAZm9udC1sb2NrLWJ1aWx0aW4tZmFjZQorICAgICAgICg6bWF0Y2ggLChsZXQg KChidWlsdGlucworICAgICAgICAgICAgICAgICAgICAgICAoc2gtZmVhdHVyZSBzaC1idWlsdGlu cykpKQorICAgICAgICAgICAgICAgICAgKHJ4LXRvLXN0cmluZworICAgICAgICAgICAgICAgICAg IGAoc2VxIGJvbAorICAgICAgICAgICAgICAgICAgICAgICAgIChvciAsQGJ1aWx0aW5zKQorICAg ICAgICAgICAgICAgICAgICAgICAgIGVvbCkpKQorICAgICAgICAgICAgICAgQGZvbnQtbG9jay1i dWlsdGluLWZhY2UpKSkpCisgICA6ZmVhdHVyZSAnZGVjbC1jb21tYW5kcworICAgOmxhbmd1YWdl IHNoLXNoZWxsCisgICAnKDs7IGRlY2xhcmF0aW9uIGNvbW1hbmRzCisgICAgIChkZWNsYXJhdGlv bl9jb21tYW5kIF8gQHNoLW1vZGUtLXRyZWVzaXQtZm9udGlmeS1kZWNsLWNvbW1hbmQpKQorICAg OmZlYXR1cmUgJ2NvbnN0YW50cworICAgOmxhbmd1YWdlIHNoLXNoZWxsCisgICAnKChjYXNlX2l0 ZW0gdmFsdWU6ICh3b3JkKSBAZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpCisgICAgIChmaWxlX2Rl c2NyaXB0b3IpIEBmb250LWxvY2stY29uc3RhbnQtZmFjZSkKKyAgIDpmZWF0dXJlICdvcGVyYXRv cnMKKyAgIDpsYW5ndWFnZSBzaC1zaGVsbAorICAgYChbICxAc2gtbW9kZS0tdHJlZXNpdC1vcGVy YXRvcnMgXSBAZm9udC1sb2NrLWJ1aWx0aW4tZmFjZSkKKyAgIDpmZWF0dXJlICdidWlsdGluLXZh cmlhYmxlcworICAgOmxhbmd1YWdlIHNoLXNoZWxsCisgICBgKCgoc3BlY2lhbF92YXJpYWJsZV9u YW1lKSBAZm9udC1sb2NrLWJ1aWx0aW4tZmFjZQorICAgICAgKDptYXRjaCAsKGxldCAoKGJ1aWx0 aW4tdmFycyAoc2gtZmVhdHVyZSBzaC12YXJpYWJsZXMpKSkKKyAgICAgICAgICAgICAgICAgKHJ4 LXRvLXN0cmluZworICAgICAgICAgICAgICAgICAgYChzZXEgYm9sCisgICAgICAgICAgICAgICAg ICAgICAgICAob3IgLEBidWlsdGluLXZhcnMpCisgICAgICAgICAgICAgICAgICAgICAgICBlb2wp KSkKKyAgICAgICAgICAgICAgQGZvbnQtbG9jay1idWlsdGluLWZhY2UpKSkpCisgICJUcmVlLXNp dHRlciBmb250LWxvY2sgc2V0dGluZ3MgZm9yIGBzaC1tb2RlJy4iKQorCisocHJvdmlkZSAnc2gt bW9kZSkKKzs7OyBzaC1tb2RlLmVsIGVuZHMgaGVyZQotLSAKMi4zMS4xCgo= --0000000000005390b405ed4d319e--