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: Initial fontification in sh-mode with tree-sittter Date: Thu, 27 Oct 2022 16:01:59 -0600 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000034c4905ec0b4bff" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37040"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Oct 28 00:02:57 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 1ooAxk-0009Oj-Jj for ged-emacs-devel@m.gmane-mx.org; Fri, 28 Oct 2022 00:02:56 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ooAx6-0004lE-Lo; Thu, 27 Oct 2022 18:02:16 -0400 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 1ooAx4-0004in-F0 for emacs-devel@gnu.org; Thu, 27 Oct 2022 18:02:14 -0400 Original-Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ooAx2-0002Is-E5 for emacs-devel@gnu.org; Thu, 27 Oct 2022 18:02:14 -0400 Original-Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-13ba9a4430cso4136132fac.11 for ; Thu, 27 Oct 2022 15:02:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=t0I1lNjMz35pI539N/qWiu21sTrV6WKDXdtyjZjEtCo=; b=LSY6m5zU3/FkIC2QRi5XEEP7rE+aFw3Z2xBICde9rPnTOJH4GyetJkuP4U0dSKwcO/ LAL6dcU2099tfz9AsOv/mmz6PeHvTiLyFPLrL1Nm5RqD7nTT+kH5TF0qwOoMipO8dceZ YzkcOIVNVyz12FMHo6NhytVBWifpw4o0M8KUVtpMmPAeC7OhaA1YcApG87nrXYvAPeEw +JSFO1KtuujZFScttxv57RvQ1YWlgVlZI3iNLutmWQ98784lXMuP+E5hBfrKNu0TvfBu mjBnPXUwgc+aSKyRsykqhU7eDMsHYMvTtGhIAB66SlUSTXNrzmpeFTXB0sbzL8w9WF+X BUWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=t0I1lNjMz35pI539N/qWiu21sTrV6WKDXdtyjZjEtCo=; b=MCFzbjxfjhYpdE69uHJFHdC6fzsKj5uw/d8stWut1GRj1l1Lb5MGCU103ZxcarbH17 JGrIFvmCxAtVvH927TjBDo6cdCzxxyRhtqRmZHLgkSkMtXOnJae7vobxfFZ9ky8c69NC vA9x7uTmpdn8wDg/ZbwPZhA3PwpAS5Qe5LcofJeBDcP/Odc+CgpWXp18RpsUs4ebiThl GHOmOds8UeSeVeR6z9XiPex5NP2uMP5WPF5+JeXgj50U+eN8gyFxrNOHoJaa38icprmE wVBlrPZWl1zoWLXraA9/DSWySeNg2/ExNqw+VG5FoZqcXSWNUCLE2ZpLgYQ66K7OKtQh pNug== X-Gm-Message-State: ACrzQf28Vp5gBvTx+rj/Sc+84fdt8CZ8cEUWgI4xGjFFGxKwGA+na3Xh KUC66mJF4P/vMpub0lMzttJhlapAZp/Cn5EXKMCGHV96 X-Google-Smtp-Source: AMsMyM5eUguTRQvdSb5SP3kU8Ej8SwCG+jrS9zjvF5Rb9VlMXMjyrwaHExuz2Bn0aw/NWGm4qtTqabTpnkbdRqPQUd4= X-Received: by 2002:a05:6870:d1d0:b0:12c:cfd2:8285 with SMTP id b16-20020a056870d1d000b0012ccfd28285mr7081297oac.105.1666908130848; Thu, 27 Oct 2022 15:02:10 -0700 (PDT) Received-SPF: pass client-ip=2001:4860:4864:20::2e; envelope-from=jaopaulolc@gmail.com; helo=mail-oa1-x2e.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: , Original-Sender: "Emacs-devel" Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:298644 Archived-At: --000000000000034c4905ec0b4bff Content-Type: multipart/alternative; boundary="000000000000034c4805ec0b4bfd" --000000000000034c4805ec0b4bfd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi everyone, Please find the patch for enabling fontification in sh-mode (currently only for bash) using tree-sitter. I welcome all comments and suggestions to improve the patch. I noticed a weird behavior with heredocs. Take the code below: echo <Hi everyone,

Please find the patch for = enabling fontification in sh-mode (currently only=C2=A0for bash) using tree= -sitter.

I welcome all comments and suggestions to improve the patch= .

I noticed a weird behavior with heredocs. Take the code below:
=
echo <<EOF
<= font face=3D"monospace">This is a here document.
EOF
echo "Do= ne."

My patch correctly=C2=A0fontifies the code above, b= ut if I kill the whole line with the "This is a here document." t= ext, then the sh-heredoc face bleeds out and all the subsequent comments ge= t fontified as part of the heredoc.

A similar behavior happens if tr= ee-sitter is not enabled, if the heredoc is empty then all subsequent comma= nds are fontified as heredoc. However, as soon as anything is added to the = heredoc, then everything goes back to the correct fontification.=C2=A0
<= br>Such "refreshing" does not happen with tree-sitter enabled, bu= t if I execute M-x sh-mode then the buffer = gets refreshed and everything looks good.

What am I doing wrong?
=

--
Jo=C3=A3o Paulo L. de Carvalho
Ph.D Computer Science | =C2=A0IC-U= NICAMP | Campinas , SP - Brazil
Postdoctoral Research Fellow | Universit= y of Alberta | Edmonton, AB - Canada
--000000000000034c4805ec0b4bfd-- --000000000000034c4905ec0b4bff 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_l9rlomz30 RnJvbSA0OGZiNmY4ZTk0OWE4Y2FmNzNiMDcxNGQ2NDc5NDdjMDY5MjYwNzk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Sm89QzM9QTNvPTIwUD0yRT0yMEw9MkU9MjBk ZT0yMENhcnZhbGhvPz0KIDxqYW9wYXVsb2xjQGdtYWlsLmNvbT4KRGF0ZTogVGh1LCAyNyBPY3Qg MjAyMiAxNTo0NTo1NiAtMDYwMApTdWJqZWN0OiBbUEFUQ0hdIEluaXRpYWwgZm9udGlmaWNhdGlv biBpbiBzaC1tb2RlIHdpdGggdHJlZS1zaXR0ZXIKCi0tLQogbGlzcC9wcm9nbW9kZXMvc2gtc2Ny aXB0LmVsIHwgMTQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxl IGNoYW5nZWQsIDEzMyBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9saXNwL3Byb2dtb2Rlcy9zaC1zY3JpcHQuZWwgYi9saXNwL3Byb2dtb2Rlcy9zaC1zY3JpcHQu ZWwKaW5kZXggNTU4YjYyYjIwYS4uYzM2NDVlYjllOSAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9k ZXMvc2gtc2NyaXB0LmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL3NoLXNjcmlwdC5lbApAQCAtMTQ4 LDYgKzE0OCw3IEBACiAgIChyZXF1aXJlICdsZXQtYWxpc3QpCiAgIChyZXF1aXJlICdzdWJyLXgp KQogKHJlcXVpcmUgJ2V4ZWN1dGFibGUpCisocmVxdWlyZSAndHJlZXNpdCkKIAogKGF1dG9sb2Fk ICdjb21pbnQtY29tcGxldGlvbi1hdC1wb2ludCAiY29taW50IikKIChhdXRvbG9hZCAnY29taW50 LWZpbGVuYW1lLWNvbXBsZXRpb24gImNvbWludCIpCkBAIC0xNTM0LDEzICsxNTM1LDYgQEAgc2gt bW9kZQogICA7OyB3ZSBjYW4ndCBsb29rIGlmIHByZXZpb3VzIGxpbmUgZW5kZWQgd2l0aCBgXCcK ICAgKHNldHEtbG9jYWwgY29taW50LXByb21wdC1yZWdleHAgIl5bIFx0XSoiKQogICAoc2V0cS1s b2NhbCBpbWVudS1jYXNlLWZvbGQtc2VhcmNoIG5pbCkKLSAgKHNldHEgZm9udC1sb2NrLWRlZmF1 bHRzCi0JYCgoc2gtZm9udC1sb2NrLWtleXdvcmRzCi0JICAgc2gtZm9udC1sb2NrLWtleXdvcmRz LTEgc2gtZm9udC1sb2NrLWtleXdvcmRzLTIpCi0JICBuaWwgbmlsCi0JICAoKD8vIC4gInciKSAo P34gLiAidyIpICg/LiAuICJ3IikgKD8tIC4gInciKSAoP18gLiAidyIpKSBuaWwKLQkgIChmb250 LWxvY2stc3ludGFjdGljLWZhY2UtZnVuY3Rpb24KLQkgICAuICwjJ3NoLWZvbnQtbG9jay1zeW50 YWN0aWMtZmFjZS1mdW5jdGlvbikpKQogICAoc2V0cS1sb2NhbCBzeW50YXgtcHJvcGVydGl6ZS1m dW5jdGlvbiAjJ3NoLXN5bnRheC1wcm9wZXJ0aXplLWZ1bmN0aW9uKQogICAoYWRkLWhvb2sgJ3N5 bnRheC1wcm9wZXJ0aXplLWV4dGVuZC1yZWdpb24tZnVuY3Rpb25zCiAgICAgICAgICAgICAjJ3N5 bnRheC1wcm9wZXJ0aXplLW11bHRpbGluZSAnYXBwZW5kICdsb2NhbCkKQEAgLTE1ODcsNyArMTU4 MSwyNiBAQCBzaC1tb2RlCiAgICBuaWwgbmlsKQogICAoYWRkLWhvb2sgJ2ZseW1ha2UtZGlhZ25v c3RpYy1mdW5jdGlvbnMgIydzaC1zaGVsbGNoZWNrLWZseW1ha2UgbmlsIHQpCiAgIChhZGQtaG9v ayAnaGFjay1sb2NhbC12YXJpYWJsZXMtaG9vawotICAgICMnc2gtYWZ0ZXItaGFjay1sb2NhbC12 YXJpYWJsZXMgbmlsIHQpKQorICAgICMnc2gtYWZ0ZXItaGFjay1sb2NhbC12YXJpYWJsZXMgbmls IHQpCisKKyAgKGNvbmQKKyAgIDs7IFRyZWUtc2l0dGVyCisgICAoKHRyZWVzaXQtcmVhZHktcCAn c2gtbW9kZSBzaC1zaGVsbCkKKyAgICAoc2V0cS1sb2NhbCBmb250LWxvY2sta2V5d29yZHMtb25s eSB0KQorICAgIChzZXRxLWxvY2FsIHRyZWVzaXQtZm9udC1sb2NrLWZlYXR1cmUtbGlzdAorICAg ICAgICAgICAgICAgICcoKGJhc2ljKSAobW9kZXJhdGUpIChlbGFib3JhdGUpKSkKKyAgICAoc2V0 cS1sb2NhbCB0cmVlc2l0LWZvbnQtbG9jay1zZXR0aW5ncworICAgICAgICAgICAgICAgIHNoLW1v ZGUtLXRyZWVzaXQtc2V0dGluZ3MpCisgICAgKHRyZWVzaXQtbWFqb3ItbW9kZS1zZXR1cCkpCisg ICA7OyBFbGlzcC4KKyAgICh0CisgICAgKHNldHEgZm9udC1sb2NrLWRlZmF1bHRzCisgICAgICAg ICAgYCgoc2gtZm9udC1sb2NrLWtleXdvcmRzCisgICAgICAgICAgICAgc2gtZm9udC1sb2NrLWtl eXdvcmRzLTEgc2gtZm9udC1sb2NrLWtleXdvcmRzLTIpCisgICAgICAgICAgICBuaWwgbmlsCisg ICAgICAgICAgICAoKD8vIC4gInciKSAoP34gLiAidyIpICg/LiAuICJ3IikgKD8tIC4gInciKSAo P18gLiAidyIpKSBuaWwKKyAgICAgICAgICAgIChmb250LWxvY2stc3ludGFjdGljLWZhY2UtZnVu Y3Rpb24KKyAgICAgICAgICAgICAuICwjJ3NoLWZvbnQtbG9jay1zeW50YWN0aWMtZmFjZS1mdW5j dGlvbikpKSkpKQogCiA7OzsjIyNhdXRvbG9hZAogKGRlZmFsaWFzICdzaGVsbC1zY3JpcHQtbW9k ZSAnc2gtbW9kZSkKQEAgLTMxOTEsNiArMzIwNCwxMTUgQEAgc2gtc2hlbGxjaGVjay1mbHltYWtl CiAgICAgICAocHJvY2Vzcy1zZW5kLXJlZ2lvbiBzaC0tc2hlbGxjaGVjay1wcm9jZXNzIChwb2lu dC1taW4pIChwb2ludC1tYXgpKQogICAgICAgKHByb2Nlc3Mtc2VuZC1lb2Ygc2gtLXNoZWxsY2hl Y2stcHJvY2VzcykpKSkKIAotKHByb3ZpZGUgJ3NoLXNjcmlwdCkKLQotOzs7IHNoLXNjcmlwdC5l bCBlbmRzIGhlcmUKKzs7OyBUcmVlLXNpdHRlciBmb250LWxvY2sKKworKGRlZmZhY2Ugc2gtbW9k ZS0tdHJlZXNpdC1zcGVjaWFsLXZhci1uYW1lLWZhY2UKKyAgJygodCAoOmluaGVyaXQgZm9udC1s b2NrLWJ1aWx0aW4tZmFjZSkpKQorICAiRmFjZSBuYW1lIHRvIHVzZSBmb3Igc3BlY2lhbCBgc2gt bW9kZScgdmFyaWFibGVzIChlLmcuIFBBVEgpIikKKworKGRlZmZhY2Ugc2gtbW9kZS0tdHJlZXNp dC1vcGVyYXRvci1mYWNlCisgICcoKHQgKDppbmhlcml0IGZvbnQtbG9jay1idWlsdGluLWZhY2Up KSkKKyAgIkZhY2UgbmFtZSB0byB1c2UgZm9yIGBzaC1tb2RlJyBvcGVyYXRvcnMgKGUuZy4gPDwp IikKKworKGRlZmZhY2Ugc2gtbW9kZS0tdHJlZXNpdC1jYWxsLWZhY2UKKyAgJygodCAoOmluaGVy aXQgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkpKQorICAiRmFjZSBuYW1lIHRvIHVzZSBm b3IgYHNoLW1vZGUnIG5vbi1idWlsdGluIGNvbW1hbmQgY2FsbHMiKQorCisoZGVmdmFyIHNoLW1v ZGUtLXRyZWVzaXQtb3BlcmF0b3JzCisgICcoInwiICJ8JiIgInx8IiAiJiYiICI+IiAiPj4iICI8 IiAiPDwiICI8PC0iICI8PDwiICI9PSIgIiE9IiAiOyIKKyAgICAiOzsiICI7JiIgIjs7JiIpCisg ICJMaXN0IG9mIGBzaC1tb2RlJyBvcGVyYXRvciB0byBmb250aWZ5IikKKworKGRlZnZhciBzaC1t b2RlLS10cmVlc2l0LWtleXdvcmRzCisgICcoImNhc2UiICJkbyIgImRvbmUiICJlbGlmIiAiZWxz ZSIgImVzYWMiICJleHBvcnQiICJmaSIgImZvciIKKyAgICAiZnVuY3Rpb24iICJpZiIgImluIiAi dW5zZXQiICJ3aGlsZSIgInRoZW4iKQorICAiTWluaW1hbCBsaXN0IG9mIGtleXdvcmRzIHRoYXQg YmVsb25nIHRvIHRyZWUtc2l0dGVyLWJhc2gncyBncmFtbWFyLgorCitTb21lIHJlc2VydmVkIHdv cmRzIGFyZSBub3QgcmVjb2duaXplIHRvIGtlZXAgdGhlIGdyYW1tYXIKK3NpbXBsZXIuIFRob3Nl IGFyZSBpZGVudGlmaWVkIHdpdGggcmVnZXgtYmFzZWQgZmlsdGVyZWQgcXVlcmllcy4KKworU2Vl IGBzaC1tb2RlLS10cmVlc2l0LW90aGVyLWtleXdvcmRzJyBhbmQKK2BzaC1tb2RlLS10cmVlc2l0 LXNldHRpbmdzJykuIikKKworKGRlZnVuIHNoLW1vZGUtLXRyZWVzaXQtb3RoZXIta2V5d29yZHMg KCkKKyAgIlJldHVybnMgYSBsaXN0IGBvdGhlcnMnIG9mIGtleS9yZXNlcnZlZCB3b3JkcyB0byBi ZSBmb250aWZpZWQgd2l0aAorcmVnZXgtYmFzZWQgcXVlcmllcyBhcyB0aGV5IGFyZSBub3QgcGFy dCBvZiB0cmVlLXNpdHRlci1iYXNoJ3MKK2dyYW1tYXIuCisKK1NlZSBgc2gtbW9kZS0tdHJlZXNp dC1vdGhlci1rZXl3b3JkcycgYW5kCitgc2gtbW9kZS0tdHJlZXNpdC1zZXR0aW5ncycpLiIKKyAg KGxldCAoKG1pbmltYWwgc2gtbW9kZS0tdHJlZXNpdC1rZXl3b3JkcykKKyAgICAgICAgKGFsbCAo YXBwZW5kIChzaC1mZWF0dXJlIHNoLWxlYWRpbmcta2V5d29yZHMpCisgICAgICAgICAgICAgICAg ICAgICAoc2gtZmVhdHVyZSBzaC1vdGhlci1rZXl3b3JkcykpKQorICAgICAgICAob3RoZXJzKSkK KyAgICAoZG9saXN0IChrZXl3b3JkIGFsbCBvdGhlcnMpCisgICAgICAoaWYgKG5vdCAobWVtYmVy IGtleXdvcmQgbWluaW1hbCkpCisgICAgICAgICAgKHNldHEgb3RoZXJzIChjb25zIGtleXdvcmQg b3RoZXJzKSkpKSkpCisKKyhkZWZ2YXIgc2gtbW9kZS0tdHJlZXNpdC1zZXR0aW5ncworICAodHJl ZXNpdC1mb250LWxvY2stcnVsZXMKKyAgIDpsYW5ndWFnZSBzaC1zaGVsbAorICAgOmZlYXR1cmUg J2Jhc2ljCisgICA6b3ZlcnJpZGUgdAorICAgJyg7OyBmdW5jdGlvbgorICAgICAoZnVuY3Rpb25f ZGVmaW5pdGlvbiBuYW1lOiAod29yZCkgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCisg ICAgIDs7IGNvbW1lbnRzCisgICAgIChjb21tZW50KSBAZm9udC1sb2NrLWNvbW1lbnQtZmFjZQor ICAgICA7OyBzdHJpbmdzIGFuZCBoZXJlZG9jCisgICAgIFsgKHN0cmluZykgKHJhd19zdHJpbmcp IF0gQGZvbnQtbG9jay1zdHJpbmctZmFjZQorICAgICA7OyBoZXJlZG9jcworICAgICBbIChoZXJl ZG9jX3N0YXJ0KSAoaGVyZWRvY19ib2R5KSBdIEBzaC1oZXJlZG9jCisgICAgIDs7IHZhcmlhYmxl cworICAgICAodmFyaWFibGVfbmFtZSkgQGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpCisg ICA6bGFuZ3VhZ2Ugc2gtc2hlbGwKKyAgIDpmZWF0dXJlICdtb2RlcmF0ZQorICAgOm92ZXJyaWRl IHQKKyAgIGAoOzsga2V5d29yZHMKKyAgICAgWyAsQHNoLW1vZGUtLXRyZWVzaXQta2V5d29yZHMg XSBAZm9udC1sb2NrLWtleXdvcmQtZmFjZQorICAgICA7OyByZXNlcnZlZCB3b3JkcworICAgICAo Y29tbWFuZF9uYW1lCisgICAgICAoKHdvcmQpIEBmb250LWxvY2sta2V5d29yZC1mYWNlCisgICAg ICAgKDptYXRjaAorICAgICAgICAsKHJ4LXRvLXN0cmluZworICAgICAgICAgICAgYChzZXEgYm9s CisgICAgICAgICAgICAgICAgICAob3IgLEAoc2gtbW9kZS0tdHJlZXNpdC1vdGhlci1rZXl3b3Jk cykpCisgICAgICAgICAgICAgICAgICBlb2wpKQorICAgICAgICBAZm9udC1sb2NrLWtleXdvcmQt ZmFjZSkpKQorICAgICA7OyBmdW5jdGlvbi9ub24tYnVpbHRpbiBjb21tYW5kIGNhbGxzCisgICAg IChjb21tYW5kX25hbWUgKHdvcmQpIEBzaC1tb2RlLS10cmVlc2l0LWNhbGwtZmFjZSkKKyAgICAg OzsgYnVpbHRpbiBjb21tYW5kcworICAgICAoY29tbWFuZF9uYW1lCisgICAgICAoKHdvcmQpIEBm b250LWxvY2stYnVpbHRpbi1mYWNlCisgICAgICAgKDptYXRjaCAsKGxldCAoKGJ1aWx0aW5zCisg ICAgICAgICAgICAgICAgICAgICAgIChzaC1mZWF0dXJlIHNoLWJ1aWx0aW5zKSkpCisgICAgICAg ICAgICAgICAgICAocngtdG8tc3RyaW5nCisgICAgICAgICAgICAgICAgICAgYChzZXEgYm9sCisg ICAgICAgICAgICAgICAgICAgICAgICAgKG9yICxAYnVpbHRpbnMpCisgICAgICAgICAgICAgICAg ICAgICAgICAgZW9sKSkpCisgICAgICAgICAgICAgICBAZm9udC1sb2NrLWJ1aWx0aW4tZmFjZSkp KQorICAgICA7OyBkZWNsYXJhdGlvbiBjb21tYW5kcworICAgICAoZGVjbGFyYXRpb25fY29tbWFu ZCkgQGZvbnQtbG9jay1idWlsdGluLWZhY2UKKyAgICAgOzsgdmFyaWFibGVzCisgICAgICh2YXJp YWJsZV9uYW1lKSBAZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkKKyAgIDpsYW5ndWFnZSBz aC1zaGVsbAorICAgOmZlYXR1cmUgJ2VsYWJvcmF0ZQorICAgOm92ZXJyaWRlIHQKKyAgIGAoOzsg ZXZlcnl0aGluZyBpbnNpZGUgY29tbWFuZCBzdWJzdGl0dXRpb24KKyAgICAgKGNvbW1hbmRfc3Vi c3RpdHV0aW9uIF8gXyBAc2gtcXVvdGVkLWV4ZWMgXykKKyAgICAgOzsgY29uc3RhbnRzCisgICAg IChjYXNlX2l0ZW0gdmFsdWU6ICh3b3JkKSBAZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpCisgICAg IChmaWxlX2Rlc2NyaXB0b3IpIEBmb250LWxvY2stY29uc3RhbnQtZmFjZQorICAgICA7OyBvcGVy YXRvcnMKKyAgICAgWyAsQHNoLW1vZGUtLXRyZWVzaXQtb3BlcmF0b3JzIF0gQHNoLW1vZGUtLXRy ZWVzaXQtb3BlcmF0b3ItZmFjZQorICAgICA7OyBzcGVjaWFsIHZhcmlhYmxlcworICAgICAoKHZh cmlhYmxlX25hbWUpIEBzaC1tb2RlLS10cmVlc2l0LXNwZWNpYWwtdmFyLW5hbWUtZmFjZQorICAg ICAgKDptYXRjaCAsKGxldCAoKGJ1aWx0aW4tdmFycyAoc2gtZmVhdHVyZSBzaC12YXJpYWJsZXMp KSkKKyAgICAgICAgICAgICAgICAgKHJ4LXRvLXN0cmluZworICAgICAgICAgICAgICAgICAgYChz ZXEgYm9sCisgICAgICAgICAgICAgICAgICAgICAgICAob3IgLEBidWlsdGluLXZhcnMpCisgICAg ICAgICAgICAgICAgICAgICAgICBlb2wpKSkKKyAgICAgICAgICAgICAgQHNoLW1vZGUtLXRyZWVz aXQtc3BlY2lhbC12YXItbmFtZS1mYWNlKSkpKQorICAiVHJlZS1zaXR0ZXIgZm9udC1sb2NrIHNl dHRpbmdzIGZvciBgc2gtbW9kZScuIikKKworKHByb3ZpZGUgJ3NoLW1vZGUpCis7Ozsgc2gtbW9k ZS5lbCBlbmRzIGhlcmUKLS0gCjIuMzEuMQoK --000000000000034c4905ec0b4bff--