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?Augustin_Ch=C3=A9neau_=28BTuin=29?= Newsgroups: gmane.emacs.devel Subject: Re: Questions about tree-sitter Date: Fri, 8 Sep 2023 13:53:37 +0200 Message-ID: <3b3f90e8-a318-4b63-915e-6477701de897@mailo.com> References: <12fe5895-7d34-4f3e-b1cf-aa133b718c24@mailo.com> <52f09345-85c8-4049-b12d-bf8b84b08f75@mailo.com> <2B46C452-DC8B-4BD0-A64B-8773235C1FA8@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------YVttNnCDqYA0rnEh5c7kZ5bu" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="9235"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird Cc: emacs-devel@gnu.org To: Yuan Fu Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Sep 08 13:54:09 2023 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 1qea3t-00029S-J3 for ged-emacs-devel@m.gmane-mx.org; Fri, 08 Sep 2023 13:54:09 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qea3Y-000781-Ko; Fri, 08 Sep 2023 07:53:48 -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 1qea3W-00074o-67 for emacs-devel@gnu.org; Fri, 08 Sep 2023 07:53:46 -0400 Original-Received: from msg-4.mailo.com ([213.182.54.15]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qea3T-000514-4A for emacs-devel@gnu.org; Fri, 08 Sep 2023 07:53:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=mailo.com; s=mailo; t=1694174018; bh=qtseoy5VndkrOr/DmpVi24YGCK2+763JPOhZdjkl9Qc=; h=X-EA-Auth:Content-Type:Message-ID:Date:MIME-Version:From:Subject: To:References:Cc:In-Reply-To; b=nFqdWhnESKDWRrqDy2A0KTaoHOBOCJ7q0yZd9lDvLyLanNKXAEgIz0A88QdCDaSGF wD9RsFCHa/L4EOOyYUMZvogYWuJXoKrDBGN2Nv57QG1utwbKVs5q9RGV0CfoMQlmoc aYF1K6S76r6HGIs4TfH4IgkO5exvadCalup95fc0= Original-Received: by b221-1.in.mailobj.net [192.168.90.21] with ESMTP via ip-20.mailobj.net [213.182.54.20] Fri, 8 Sep 2023 13:53:38 +0200 (CEST) X-EA-Auth: 6OOm4CVMZJVncZg3FAknsF0xxYEJVPhmuHmgX5wHdUWPxeE1dB1woxDbfowcaUMq2JRbjDw6dJa24fdeTOfnnpwecusiyrPq Content-Language: fr, en-US In-Reply-To: <2B46C452-DC8B-4BD0-A64B-8773235C1FA8@gmail.com> Received-SPF: pass client-ip=213.182.54.15; envelope-from=btuin@mailo.com; helo=msg-4.mailo.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, 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:310323 Archived-At: This is a multi-part message in MIME format. --------------YVttNnCDqYA0rnEh5c7kZ5bu Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Le 06/09/2023 à 06:07, Yuan Fu a écrit : > > I added local parser support to master. If everything goes right, you just need to add a :local t flag in treesit-range-rules. Check out the modified bision-ts-mode.el that I hacked up for an example. BTW, it’s vital that you define treesit-language-at-point-function for a multi-language mode. > > Yuan Thanks a lot! I did some tests and it's working pretty well. Do you think it's a good idea to add a prefix to bison feature names in font-lock settings to avoid conflicts with C names (as I did)? I have a few issues though: - I first defined `treesit-language-at-point-function` using `treesit-node-at`. However, `treesit-node-at` itself uses `treesit-language-at-point-function` which causes an infinite recursion. So I instead used `treesit-local-parsers-at` to check if a local parser is used. Is it a good solution? - When I try to indent C code by using c-ts-mode indent rules, I get the following error: Debugger entered--Lisp error: (wrong-type-argument treesit-node-p #) treesit-node-parser(#) treesit--indent-1() treesit-indent-region(1075 1176) indent-region(1075 1176) indent-for-tab-command(nil) funcall-interactively(indent-for-tab-command nil) call-interactively(indent-for-tab-command nil nil) command-execute(indent-for-tab-command) There seems to be a mistake in `treesit--indent-1` in the `cond` at the line `(local-parsers (car local-parsers))`, since a parser is returned while it should be a node. I attached a newer version of bison-ts-mode and a small patch to c-ts-mode so I can reuse its `treesit-font-lock-feature-list`. --------------YVttNnCDqYA0rnEh5c7kZ5bu Content-Type: text/x-emacs-lisp; charset=UTF-8; name="bison-ts-mode.el" Content-Disposition: attachment; filename="bison-ts-mode.el" Content-Transfer-Encoding: base64 Ozs7IGJpc29uLXRzLW1vZGUgLS0tIFRyZWUtc2l0dGVyIG1vZGUgZm9yIEJpc29uIC0qLSBs ZXhpY2FsLWJpbmRpbmc6IHQ7IC0qLQoKOzs7IENvbW1lbnRhcnk6Cgo7OzsgQ29kZToKCihy ZXF1aXJlICd0cmVlc2l0KQoocmVxdWlyZSAnYy10cy1tb2RlKQoKKGRlY2xhcmUtZnVuY3Rp b24gdHJlZXNpdC1wYXJzZXItY3JlYXRlICJ0cmVlc2l0LmMiKQooZGVjbGFyZS1mdW5jdGlv biB0cmVlc2l0LWluZHVjZS1zcGFyc2UtdHJlZSAidHJlZXNpdC5jIikKKGRlY2xhcmUtZnVu Y3Rpb24gdHJlZXNpdC1ub2RlLWNoaWxkLWJ5LWZpZWxkLW5hbWUgInRyZWVzaXQuYyIpCihk ZWNsYXJlLWZ1bmN0aW9uIHRyZWVzaXQtc2VhcmNoLXN1YnRyZWUgInRyZWVzaXQuYyIpCihk ZWNsYXJlLWZ1bmN0aW9uIHRyZWVzaXQtbm9kZS1wYXJlbnQgInRyZWVzaXQuYyIpCihkZWNs YXJlLWZ1bmN0aW9uIHRyZWVzaXQtbm9kZS1uZXh0LXNpYmxpbmcgInRyZWVzaXQuYyIpCihk ZWNsYXJlLWZ1bmN0aW9uIHRyZWVzaXQtbm9kZS10eXBlICJ0cmVlc2l0LmMiKQooZGVjbGFy ZS1mdW5jdGlvbiB0cmVlc2l0LW5vZGUtY2hpbGQgInRyZWVzaXQuYyIpCihkZWNsYXJlLWZ1 bmN0aW9uIHRyZWVzaXQtbm9kZS1lbmQgInRyZWVzaXQuYyIpCihkZWNsYXJlLWZ1bmN0aW9u IHRyZWVzaXQtbm9kZS1zdGFydCAidHJlZXNpdC5jIikKKGRlY2xhcmUtZnVuY3Rpb24gdHJl ZXNpdC1ub2RlLXN0cmluZyAidHJlZXNpdC5jIikKKGRlY2xhcmUtZnVuY3Rpb24gdHJlZXNp dC1xdWVyeS1jb21waWxlICJ0cmVlc2l0LmMiKQooZGVjbGFyZS1mdW5jdGlvbiB0cmVlc2l0 LXF1ZXJ5LWNhcHR1cmUgInRyZWVzaXQuYyIpCihkZWNsYXJlLWZ1bmN0aW9uIHRyZWVzaXQt cGFyc2VyLWFkZC1ub3RpZmllciAidHJlZXNpdC5jIikKKGRlY2xhcmUtZnVuY3Rpb24gdHJl ZXNpdC1wYXJzZXItYnVmZmVyICJ0cmVlc2l0LmMiKQooZGVjbGFyZS1mdW5jdGlvbiB0cmVl c2l0LXBhcnNlci1saXN0ICJ0cmVlc2l0LmMiKQoKCihkZWZ1biB0cmVlc2l0LS1tZXJnZS1m ZWF0dXJlLWxpc3RzIChsMSBsMikKICAiTWVyZ2UgdGhlIGxpc3RzIG9mIGxpc3RzIEwxIGFu ZCBMMi4KVGhlIGZpcnN0IHN1Ymxpc3Qgb2YgTDEgaXMgbWVyZ2VkIHdpdGggdGhlIGZpcnN0 IHN1Ymxpc3Qgb2YgTDIgYW5kIHNvIG9uLgpMMSBhbmQgTDIgZG9uJ3QgbmVlZCB0byBoYXZl IHRoZSBzYW1lIHNpemUuIgogIChsZXQgKChyZXMgKCkpKQogICAgKHdoaWxlIChvciBsMSBs MikKICAgICAgKHNldHEgcmVzIChwdXNoIChuY29uYyAoY2FyIGwxKSAoY2FyIGwyKSkgcmVz KSkKICAgICAgKHNldHEgbDEgKGNkciBsMSkgbDIgKGNkciBsMikpKQogICAgKG5yZXZlcnNl IHJlcykpKQoKCjs7IChkZWZ1biBiaXNvbi10cy0tbGFuZ3VhZ2UtYXQtcG9pbnQtZnVuY3Rp b24gKHBvc2l0aW9uKQo7OyAgICJSZXR1cm4gdGhlIGxhbmd1YWdlIGF0IFBPU0lUSU9OLiIK OzsgICAobGV0KiAoKG5vZGUgKHRyZWVzaXQtbm9kZS1hdCBwb3NpdGlvbikpKQo7OyAJKGlm ICh0cmVlc2l0LXBhcmVudC11bnRpbAo7OyAJCSBub2RlCjs7IAkJIChsYW1iZGEgKG4pIChs ZXQgKCh0eXBlICh0cmVlc2l0LW5vZGUtdHlwZSBuKSkpCjs7IAkJCSAgICAgICAob3IgKGVx dWFsICJjb2RlX2Jsb2NrIiB0eXBlKQo7OyAJCQkJICAgKGVxdWFsICJ1bmRlbGltaXRlZF9j b2RlX2Jsb2NrIiB0eXBlKSkpKQo7OyAJCSB0KQo7OyAJICAgICdjCjs7IAkgICdiaXNvbikp KQoKCihkZWZ1biBiaXNvbi10cy0tbGFuZ3VhZ2UtYXQtcG9pbnQtZnVuY3Rpb24gKHBvc2l0 aW9uKQogICJSZXR1cm4gdGhlIGxhbmd1YWdlIGF0IFBPU0lUSU9OLiIKICAobGV0KiAoKHBh cnNlciAodHJlZXNpdC1sb2NhbC1wYXJzZXJzLWF0IHBvc2l0aW9uKSkpCiAgICAoaWYgcGFy c2VyCgknYwogICAgICAnYmlzb24pKSkKCgooZGVmdW4gYmlzb24tdHMtLWZvbnQtbG9jay1z ZXR0aW5ncyAobGFuZ3VhZ2UpCiAgKHRyZWVzaXQtZm9udC1sb2NrLXJ1bGVzCiAgIDpsYW5n dWFnZSBsYW5ndWFnZQogICA6ZmVhdHVyZSAnYmlzb24tY29tbWVudAogICAnKChjb21tZW50 KSBAZm9udC1sb2NrLWNvbW1lbnQtZmFjZSkKCiAgIDpsYW5ndWFnZSBsYW5ndWFnZQogICA6 ZmVhdHVyZSAnYmlzb24tZGVjbGFyYXRpb24KICAgJygoZGVjbGFyYXRpb24gKGRlY2xhcmF0 aW9uX25hbWUpIEBmb250LWxvY2sta2V5d29yZC1mYWNlKSkKCiAgIDpsYW5ndWFnZSBsYW5n dWFnZQogICA6ZmVhdHVyZSAnYmlzb24tdHlwZQogICAnKCh0eXBlKSBAZm9udC1sb2NrLXR5 cGUtZmFjZSkKCiAgIDpsYW5ndWFnZSBsYW5ndWFnZQogICA6ZmVhdHVyZSAnYmlzb24tZ3Jh bW1hci1ydWxlLXVzYWdlCiAgICcoKGdyYW1tYXJfcnVsZV9pZGVudGlmaWVyKSBAZm9udC1s b2NrLXZhcmlhYmxlLXVzZS1mYWNlKQoKICAgOmxhbmd1YWdlIGxhbmd1YWdlCiAgIDpmZWF0 dXJlICdiaXNvbi1ncmFtbWFyLXJ1bGUtZGVjbGFyYXRpb24KICAgOm92ZXJyaWRlIHQKICAg JygoZ3JhbW1hcl9ydWxlIChncmFtbWFyX3J1bGVfaWRlbnRpZmllcikgIEBmb250LWxvY2st dmFyaWFibGUtbmFtZS1mYWNlKSkKCiAgIDpsYW5ndWFnZSBsYW5ndWFnZQogICA6ZmVhdHVy ZSAnYmlzb24tc3RyaW5nCiAgIDpvdmVycmlkZSB0CiAgICcoKHN0cmluZykgQGZvbnQtbG9j ay1zdHJpbmctZmFjZSkKCiAgIDpsYW5ndWFnZSBsYW5ndWFnZQogICA6ZmVhdHVyZSAnYmlz b24tbGl0ZXJhbAogICA6b3ZlcnJpZGUgdAogICAnKChjaGFyX2xpdGVyYWwpIEBmb250LWxv Y2sta2V5d29yZC1mYWNlCiAgICAgKG51bWJlcl9saXRlcmFsKSBAZm9udC1sb2NrLW51bWJl ci1mYWNlKQoKICAgOmxhbmd1YWdlIGxhbmd1YWdlCiAgIDpmZWF0dXJlICdiaXNvbi1kaXJl Y3RpdmUtZ3JhbW1hci1ydWxlCiAgIDpvdmVycmlkZSB0CiAgICcoKGdyYW1tYXJfcnVsZSAo ZGlyZWN0aXZlX2VtcHR5KSBAZm9udC1sb2NrLWtleXdvcmQtZmFjZSkpCgogICA6bGFuZ3Vh Z2UgbGFuZ3VhZ2UKICAgOmZlYXR1cmUgJ2Jpc29uLW9wZXJhdG9yCiAgIDpvdmVycmlkZSB0 CiAgICcoWyJ8Il0gQGZvbnQtbG9jay1vcGVyYXRvci1mYWNlKQoKICAgOmxhbmd1YWdlIGxh bmd1YWdlCiAgIDpmZWF0dXJlICdiaXNvbi1kZWxpbWl0ZXIKICAgOm92ZXJyaWRlIHQKICAg JyhbIjsiXSBAZm9udC1sb2NrLWRlbGltaXRlci1mYWNlKSkpCgoKKGRlZnZhciBiaXNvbi10 cy1tb2RlLS1mb250LWxvY2stZmVhdHVyZS1saXN0CiAgJygoIGJpc29uLWNvbW1lbnQgYmlz b24tZGVjbGFyYXRpb24gYmlzb24tdHlwZQogICAgICBiaXNvbi1ncmFtbWFyLXJ1bGUtdXNh Z2UgYmlzb24tZ3JhbW1hci1ydWxlLWRlY2xhcmF0aW9uCiAgICAgIGJpc29uLXN0cmluZyBi aXNvbi1saXRlcmFsIGJpc29uLWRpcmVjdGl2ZS1ncmFtbWFyLXJ1bGUKICAgICAgYmlzb24t b3BlcmF0b3IgYmlzb24tZGVsaW1pdGVyKSkpCgoKKGRlZmluZS1kZXJpdmVkLW1vZGUgYmlz b24tdHMtbW9kZSBwcm9nLW1vZGUgIkJpc29uIgogICJBIG1vZGUgZm9yIEJpc29uLiIKICAo d2hlbiAodHJlZXNpdC1yZWFkeS1wICdiaXNvbikKICAgIChzZXRxLWxvY2FsIHRyZWVzaXQt Zm9udC1sb2NrLXNldHRpbmdzCiAgICAgICAgICAgICAgICAoYXBwZW5kIChiaXNvbi10cy0t Zm9udC1sb2NrLXNldHRpbmdzICdiaXNvbikKICAgICAgICAgICAgICAgICAgICAgICAgKGMt dHMtbW9kZS0tZm9udC1sb2NrLXNldHRpbmdzICdjKSkpCgogICAgKHNldHEtbG9jYWwgdHJl ZXNpdC1mb250LWxvY2stZmVhdHVyZS1saXN0CiAgICAgICAgICAgICAgICAodHJlZXNpdC0t bWVyZ2UtZmVhdHVyZS1saXN0cwoJCSBiaXNvbi10cy1tb2RlLS1mb250LWxvY2stZmVhdHVy ZS1saXN0CgkJIGMtdHMtbW9kZS0tZm9udC1sb2NrLWZlYXR1cmUtbGlzdCkpCgogICAgKHNl dHEtbG9jYWwgdHJlZXNpdC1zaW1wbGUtaW5kZW50LXJ1bGVzCiAgICAgICAgICAgICAgICAo Yy10cy1tb2RlLS1nZXQtaW5kZW50LXN0eWxlICdjKSkKCiAgICAoc2V0cS1sb2NhbCB0cmVl c2l0LWxhbmd1YWdlLWF0LXBvaW50LWZ1bmN0aW9uICdiaXNvbi10cy0tbGFuZ3VhZ2UtYXQt cG9pbnQtZnVuY3Rpb24pCgogICAgKHNldHEtbG9jYWwgdHJlZXNpdC1yYW5nZS1zZXR0aW5n cwoJCSh0cmVlc2l0LXJhbmdlLXJ1bGVzCgkJIDplbWJlZCAnYwoJCSA6aG9zdCAnYmlzb24K CQkgOmxvY2FsIHQKCQkgJygodW5kZWxpbWl0ZWRfY29kZV9ibG9jaykgQGNhcHR1cmUpCgkJ ICkpCgogICAgKHRyZWVzaXQtbWFqb3ItbW9kZS1zZXR1cCkpKQoKKHByb3ZpZGUgJ2Jpc29u LXRzLW1vZGUpCjs7OyBiaXNvbi10cy1tb2RlLmVsIGVuZHMgaGVyZQo= --------------YVttNnCDqYA0rnEh5c7kZ5bu Content-Type: text/x-patch; charset=UTF-8; name="0001-Put-font-lock-features-of-c-ts-mode-in-a-variable-to.patch" Content-Disposition: attachment; filename*0="0001-Put-font-lock-features-of-c-ts-mode-in-a-variable-to.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1ZjhkNDQzNWEzMTY4NTVjNjBiOWIyZGI1YzBiYjI5MWEyOGQ0YjMyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/QXVndXN0aW49MjBDaD1DMz1BOW5l YXU/PSA8YnR1aW5AbWFpbG8uY29tPgpEYXRlOiBGcmksIDggU2VwIDIwMjMgMTM6MjA6NTEg KzAyMDAKU3ViamVjdDogW1BBVENIXSBQdXQgZm9udC1sb2NrIGZlYXR1cmVzIG9mIGMtdHMt bW9kZSBpbiBhIHZhcmlhYmxlIHRvIGFsbG93CiByZXVzZQoKLS0tCiBsaXNwL3Byb2dtb2Rl cy9jLXRzLW1vZGUuZWwgfCAxMyArKysrKysrKy0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgOCBp bnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21v ZGVzL2MtdHMtbW9kZS5lbCBiL2xpc3AvcHJvZ21vZGVzL2MtdHMtbW9kZS5lbAppbmRleCA1 YjY5OGViMDlmNC4uYzU1MWY5ZjA2YjQgMTAwNjQ0Ci0tLSBhL2xpc3AvcHJvZ21vZGVzL2Mt dHMtbW9kZS5lbAorKysgYi9saXNwL3Byb2dtb2Rlcy9jLXRzLW1vZGUuZWwKQEAgLTExMjMs NiArMTEyMywxMyBAQCBjLXRzLW1vZGUtLWVtYWNzLXNldC1yYW5nZXMKICAgICAoc2V0cS1s b2NhbCBjLXRzLW1vZGUtLWZvci1lYWNoLXRhaWwtcmFuZ2VzIHNldC1yYW5nZXMpCiAgICAg KHRyZWVzaXQtcGFyc2VyLXNldC1pbmNsdWRlZC1yYW5nZXMgYy1wYXJzZXIgcmV2ZXJzZWQt cmFuZ2VzKSkpCiAKKyhkZWZ2YXIgYy10cy1tb2RlLS1mb250LWxvY2stZmVhdHVyZS1saXN0 CisgICcoKCBjb21tZW50IGRlZmluaXRpb24pCisgICAgKCBrZXl3b3JkIHByZXByb2Nlc3Nv ciBzdHJpbmcgdHlwZSkKKyAgICAoIGFzc2lnbm1lbnQgY29uc3RhbnQgZXNjYXBlLXNlcXVl bmNlIGxhYmVsIGxpdGVyYWwpCisgICAgKCBicmFja2V0IGRlbGltaXRlciBlcnJvciBmdW5j dGlvbiBvcGVyYXRvciBwcm9wZXJ0eSB2YXJpYWJsZSkpKQorCisKIDs7OyBNb2RlcwogCiAo ZGVmdmFyLWtleW1hcCBjLXRzLWJhc2UtbW9kZS1tYXAKQEAgLTEyMTMsMTEgKzEyMjAsNyBA QCBjLXRzLWJhc2UtbW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlb3Mp CiAgICAgICAgICAgICAgICAgICAgYy10cy1tb2RlLS1kZWZ1bi1mb3ItY2xhc3MtaW4taW1l bnUtcCBuaWwpKSkpCiAKLSAgKHNldHEtbG9jYWwgdHJlZXNpdC1mb250LWxvY2stZmVhdHVy ZS1saXN0Ci0gICAgICAgICAgICAgICcoKCBjb21tZW50IGRlZmluaXRpb24pCi0gICAgICAg ICAgICAgICAgKCBrZXl3b3JkIHByZXByb2Nlc3NvciBzdHJpbmcgdHlwZSkKLSAgICAgICAg ICAgICAgICAoIGFzc2lnbm1lbnQgY29uc3RhbnQgZXNjYXBlLXNlcXVlbmNlIGxhYmVsIGxp dGVyYWwpCi0gICAgICAgICAgICAgICAgKCBicmFja2V0IGRlbGltaXRlciBlcnJvciBmdW5j dGlvbiBvcGVyYXRvciBwcm9wZXJ0eSB2YXJpYWJsZSkpKSkKKyAgKHNldHEtbG9jYWwgdHJl ZXNpdC1mb250LWxvY2stZmVhdHVyZS1saXN0IGMtdHMtbW9kZS0tZm9udC1sb2NrLWZlYXR1 cmUtbGlzdCkpCiAKIChkZWZ2YXIgdHJlZXNpdC1sb2FkLW5hbWUtb3ZlcnJpZGUtbGlzdCkK IAotLSAKMi40Mi4wCgo= --------------YVttNnCDqYA0rnEh5c7kZ5bu--