From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: A Soare Newsgroups: gmane.emacs.devel Subject: An automaton for indenting the lisp code in linear time Date: Mon, 30 Jun 2008 02:41:36 +0200 (CEST) Message-ID: <5018302.2927441214786496316.JavaMail.www@wwinf4614> Reply-To: alinsoar@voila.fr NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_15601_27409639.1214786496315" X-Trace: ger.gmane.org 1214790882 10909 80.91.229.12 (30 Jun 2008 01:54:42 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 30 Jun 2008 01:54:42 +0000 (UTC) To: "Emacs Dev [emacs-devel]" Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Jun 30 03:55:27 2008 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1KD8c1-0005yl-SU for ged-emacs-devel@m.gmane.org; Mon, 30 Jun 2008 03:55:26 +0200 Original-Received: from localhost ([127.0.0.1]:51814 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KD8bB-00039R-Qc for ged-emacs-devel@m.gmane.org; Sun, 29 Jun 2008 21:54:33 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KD8b7-00037y-8X for emacs-devel@gnu.org; Sun, 29 Jun 2008 21:54:29 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KD8b5-00035S-VI for emacs-devel@gnu.org; Sun, 29 Jun 2008 21:54:28 -0400 Original-Received: from [199.232.76.173] (port=55604 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KD8b5-00035I-Q5 for emacs-devel@gnu.org; Sun, 29 Jun 2008 21:54:27 -0400 Original-Received: from smtp2.voila.fr ([193.252.22.175]:45824 helo=smtp1.voila.fr) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KD8b4-0001wL-Uz for emacs-devel@gnu.org; Sun, 29 Jun 2008 21:54:27 -0400 Original-Received: from me-wanadoo.net (localhost [127.0.0.1]) by mwinf4106.voila.fr (SMTP Server) with ESMTP id 7D6F658022E8 for ; Mon, 30 Jun 2008 03:18:37 +0200 (CEST) Original-Received: from wwinf4614 (wwinf4614 [10.232.13.58]) by mwinf4106.voila.fr (SMTP Server) with ESMTP id 4EB5958001C3 for ; Mon, 30 Jun 2008 02:41:36 +0200 (CEST) X-ME-UUID: 20080630004136322.4EB5958001C3@mwinf4106.voila.fr X-Originating-IP: [93.112.90.5] X-Wum-Nature: EMAIL-NATURE X-WUM-FROM: |~| X-WUM-TO: |~| X-WUM-REPLYTO: |~| X-me-spamlevel: not-spam X-me-spamrating: 40.000000 X-me-spamcause: OK, (-150)(0000)secvtfgvtghiphhivghnthhsucdlqddutddtmdenihdorghmuchlohhokhhinhhguchfohhrkiifrghnthcuthhoucdlqddvtddmnehthhgvuchprhhosghlvghmucdlqdeftddm X-detected-kernel: by monty-python.gnu.org: Linux 2.4-2.6 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:100179 Archived-At: ------=_Part_15601_27409639.1214786496315 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Here I send the old promised automaton for indenting in linear time... I looked in the code of emacs to the function scan_sexps_forward, because I want to write for myself a little web browser, and I saw that its automaton of changing the classes of syntax looks very closely to the automaton that I wrote about 1 year ago to indent the lisp code. That is the reason for which I decided to open the archives and to remember. This code indents a line of code and a whole region in O(n) time complexity; oups! no, sorry, in O(n+l) (the automaton in O(n) + O(l) to use its output to indent), where n is the number of bytes from the beginning of the function to the ending point, and l is the number of lines from the beginning of the function to the ending point. (in the code it's true that (current-column) is called very often, but I can insert a variable `column' that keeps the current column, and it is reset when we meet newline, and grows by 1 when the automaton passes to the next state, and I think that I will modify it to keep the idea of O(n)). This code is very compact; installing it will cut thousands of lines of old code from Emacs. And, besides, it is imcomplete! Here are just the most basics. I can complete it just after I speak with the emacs developers, in order to agree on its behaviour. I do not like to work on in vain. In this period I wish to work for this code, in order to finish it. If I do not work now, I do not know when I can work on. Besides, looking these days to write my web browser, I realised that it would be a good idea embedding this automaton in C. But, again, I do not want to work on it before asking you, because I want this job to have a practical utility, not just to spend time working on this. Here I give you just 2 very samples examples of how this automaton works. It's evident how it works, and these 2 examples are too much! There are a few new things in this code: for example, note the easyness to add indent for comments, constant symbols, and look at the easyness with which I made the indentation of a parameter of a function before the first parameter, not under the second (i.e. one makes now the difference between many kinds of list : not all the lists have the first parameter a function): (defun a (x y z t) ... and not the old behaviour: (defun a (x y z t) ... The problem of indentig of lisp code is a problem of... homotopy: however I deform the code (the spaces at the beginning of the lines), this automaton must always return the same result. Before calling (lisp-indent-automaton), one must have in the upper environment the variables `state' and `indents-lines' initialised with nil. It will return the result in indents-lines. The mapcar of car of indents-lines is a list that contains the correct answer to the homotopy problem. This result must be the same however I deform the code (spaces at the beginning of lines). The mapcar of the cdr is a list with the current indentation. Please, tell me your impressions and... give me to work in order to finish it well :) Alin Soare. ____________________________________________________ Sur le mail Voila, vous pouvez personnaliser l=E2=80=99anti-spam ! http://m= ail.voila.fr ------=_Part_15601_27409639.1214786496315 Content-Type: application/octet-stream; name=indent.el content-transfer-encoding: base64 Content-Disposition: attachment; filename=indent.el CihkZWZ1biBsaXNwLWluZGVudC12YWx1ZSAoKQogICIKICBWRVJTSU9OIDogTkVXCiAgIgogIChj b25kICgoZWx0IHN0YXRlIDMpCiAgICAgICAgIDs7IEluc2lkZSBhIHN0cmluZywgZG9uJ3QgY2hh bmdlIGluZGVudGF0aW9uLgogICAgICAgICBuaWwKICAgICAgICAgKQogICAgICAgICgobnVsbCAo Y2FkciBzdGF0ZSkpCiAgICAgICAgIDs7IG91dHNpZGUgYW4gZXhwcmVzc2lvbiBhbGlnbiB0byB0 aGUgbGVmdCBjb2x1bW4KICAgICAgICAgMAogICAgICAgICApCiAgICAgICAgKChudWxsIGluZGVu dCkKICAgICAgICAgOzsgYW5kIGVtcHR5IHBhcmV0aGVzaXMKICAgICAgICAgKDErIHN0YXJ0LWNv bCkpCiAgICAgICAgKChhbmQgKGludGVnZXJwIGxpc3AtaW5kZW50LW9mZnNldCkKICAgICAgICAg ICAgICAoaW50ZWdlcnAgKGNhZHIgaW5kZW50KSkpCiAgICAgICAgIDs7IGluZGVudCBieSBjb25z dGFudCBvZmZzZXQKICAgICAgICAgKCsgKGNhZHIgaW5kZW50KSBsaXNwLWluZGVudC1vZmZzZXQp CiAgICAgICAgICkKICAgICAgICAoKGxvb2tpbmctYXQgIlxcczxcXHM8XFxzPCIpCiAgICAgICAg IDs7IENvbW1lbnRzIHRoYXQgc3RhcnQgd2l0aCB0aHJlZSBzZW1pY29sb25zIG9yIG1vcmUsIHNo b3VsZAogICAgICAgICA7OyBzdGFydCBhdCB0aGUgbGVmdCBtYXJnaW4KICAgICAgICAgMAogICAg ICAgICApCiAgICAgICAgKChlcSAoY2FyIGluZGVudCkgOmwpCiAgICAgICAgIDs7IGluZGVudCBi ZW5lYXRoIGEgbGlzdAogICAgICAgICAoY2FkZHIgaW5kZW50KQogICAgICAgICApCiAgICAgICAg ICgoYW5kIChlcSAoY2FyIGluZGVudCkgOncpCiAgICAgICAgICAgICAgKHN0cmluZ3AgKGNhZHIg aW5kZW50KSkKICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoICJkZWYiIChjYWRyIGluZGVudCkp CiAgICAgICAgICAgICAgKHplcm9wIChzdHJpbmctbWF0Y2ggImRlZiIgKGNhZHIgaW5kZW50KSkp KQogICAgICAgICA7OyBpbmRlbnQgYSBkZWYtZm9ybQogICAgICAgICAoKyBsaXNwLWJvZHktaW5k ZW50IHN0YXJ0LWNvbCkKICAgICAgICAgKQogICAgICAgICgoYW5kIChlcSAoY2FyIGluZGVudCkg OncpCiAgICAgICAgICAgICAgKHdob2xlbnVtcCAoZ2V0IChpbnRlcm4tc29mdCAoY2FkciBpbmRl bnQpKSAnbGlzcC1pbmRlbnQtZnVuY3Rpb24pKSkKICAgICAgICAgOzsgaGVyZSB0aGVyZSBpcyBh IHNwZWNpYWwgZm9ybQogICAgICAgICAoc2V0cSBvbyAob3IgKGdldCAoaW50ZXJuLXNvZnQgKGNh ZHIgaW5kZW50KSkgJ2xpc3AtaW5kZW50LWZ1bmN0aW9uKQogICAgICAgICAgICAgICAgICAgICAg KGdldCAoaW50ZXJuLXNvZnQgKGNhZHIgaW5kZW50KSkgJ2xpc3AtaW5kZW50LWhvb2spKSkKICAg ICAgICAgKGlmICg+IChsZW5ndGggaW5kZW50KSAoKiAzIG9vKSkKICAgICAgICAgICAgICgrIGxp c3AtYm9keS1pbmRlbnQgc3RhcnQtY29sKQogICAgICAgICAgICgrICgqIDIgbGlzcC1ib2R5LWlu ZGVudCkgc3RhcnQtY29sKSkKICAgICAgICAgKQogICAgICAgICgoYW5kIChlcSAoY2FyIGluZGVu dCkgOncpCiAgICAgICAgICAgICAgKGdldCAoaW50ZXJuLXNvZnQgKGNhZHIgaW5kZW50KSkgJ2xp c3AtaW5kZW50LWhvb2spKQogICAgICAgICA7OyBpbmRlbnQgZGVmaW5lZCBieSBhbm90aGVyIGZ1 bmN0aW9uCiAgICAgICAgIChmdW5jYWxsIChnZXQgKGludGVybi1zb2Z0IChjYWRyIGluZGVudCkp ICdsaXNwLWluZGVudC1ob29rKSkKICAgICAgICAgKQogICAgICAgICgoYW5kIChlcXVhbCAoZm9s bG93aW5nLWNoYXIpID86KQogICAgICAgICAgICAgIG5pbCkKICAgICAgICAgOzsgaW5kZW50IG9m IGEgY29uc3RhbnQgc3ltYm9sCiAgICAgICAgIDs7IG5vdCB5ZWQgZGVmaW5lZAogICAgICAgICAo Y2FkZHIgaW5kZW50KQogICAgICAgICApCiAgICAgICAgKChhbmQgKGVxIChjYXIgaW5kZW50KSA6 dykKICAgICAgICAgICAgICAoPiAobGVuZ3RoIGluZGVudCkgMykpCiAgICAgICAgIDs7IGluZGVu dCBiZW5lYXRoIHRoZSBgaW5kZW50LXdoYXQtYXJndW1lbnQnIHBhcmFtZXRlcgogICAgICAgICAo ZWx0IGluZGVudCAoKyAzICgxLSAoKiAzIGluZGVudC13aGF0LWFyZ3VtZW50KSkpKQogICAgICAg ICApCiAgICAgICAgKHQKICAgICAgICAgOzsgIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgYSBmdW5j dGlvbiBjYWxsCiAgICAgICAgIChjYWRkciBpbmRlbnQpKQogICAgICAgICApKQoKKGRlZnVuIGxp c3AtaW5kZW50LXdoYXQtYXJndW1lbnQgbmlsCiAgKGNvbmQgKChhbmQgKGVxIChjYXIgaW5kZW50 KSA6dykKICAgICAgICAgICAgICAoc3RyaW5ncCAoY2FkciBpbmRlbnQpKQogICAgICAgICAgICAg IChzdHJpbmctbWF0Y2ggImRlZiIgKGNhZHIgaW5kZW50KSkKICAgICAgICAgICAgICAoPSAobGVu Z3RoIGluZGVudCkgOSkKICAgICAgICAgICAgICAoemVyb3AgKHN0cmluZy1tYXRjaCAiZGVmIiAo Y2FkciBpbmRlbnQpKSkpCiAgICAgICAgIDs7IGlmIHRoZSB0aGlyZCBwYXJhbWV0ZXIgb2YgZGVm dW4gaXMgYSBsaXN0LCB0aGVuIHRoaXMgbGlzdAogICAgICAgICA7OyBpcyBub3QgYSBmdW5jdGlv biBjYWxsCiAgICAgICAgIDApCiAgICAgICAgKChvcgogICAgICAgICAgKGFuZCAoPj0gKGxlbmd0 aCBpbmRlbnQpIDYpCiAgICAgICAgICAgICAgIChlcSAoZWx0IGluZGVudCAoLSAobGVuZ3RoIGlu ZGVudCApIDYpKSA6cSkpCiAgICAgICAgICAoYW5kIChlcSAoY2FyIGluZGVudCkgOncpCiAgICAg ICAgICAgICAgIChzdHJpbmdwIChjYWRyIGluZGVudCkpCiAgICAgICAgICAgICAgIChzdHJpbmct ZXF1YWwgInF1b3RlIiAoY2FkciBpbmRlbnQpKSkpCiAgICAgICAgIDs7IGEgcXVvdGVkIGxpc3Qg aXMgbm90IGEgZnVuY3Rpb24gY2FsbAogICAgICAgICAwCiAgICAgICAgICkKICAgICAgICAodAog ICAgICAgICA7OyBmb3IgdGhlIHJlc3QsIGFsd2F5cyBpbmRlbnQgYWZ0ZXIgdGhlIGZpcnN0IHBh cmFtZXRlciBvZgogICAgICAgICA7OyB0aGUgZnVuY3Rpb24uLi4KICAgICAgICAgMSkpKQoKKGRl ZnVuIGxpc3AtaW5kZW50LW5leHQtc3RhdGUgKCZvcHRpb25hbCBuKQogIChwYXJzZS1wYXJ0aWFs LXNleHAgKHBvaW50KSAoKyAob3IgbiAxKSAocG9pbnQpKSAoKSAoKSBzdGF0ZSkpCgooZGVmdW4g bGlzcC1pbmRlbnQtYXV0b21hdG9uICgmb3B0aW9uYWwgZW5kIHN0YXRlIGluZGVudC13aGF0LWFy Z3VtZW50IHN0YXJ0LWNvbCkKICAiCiAgIGFuIGF1dG9tYXRvbiB0byBpbmRlbnQgdGhlIGxpc3Ag Y29kZQogICBWRVJTSU9OOiBORVcKICAiCiAgKGxldCAoCiAgICAgICAgaW5kZW50CiAgICAgICAg aW5kZW50LW5leHQtbGluZS10bwogICAgICAgICkKICAgIChvciBlbmQgKGJlZ2lubmluZy1vZi1s aW5lKSAoc2V0cSBlbmQgKHBvaW50KSkpCiAgICAob3IgaW5kZW50LXdoYXQtYXJndW1lbnQKICAg ICAgICAoc2V0cSBpbmRlbnQtd2hhdC1hcmd1bWVudCAwKSkKICAgIChvciBzdGF0ZSAoYmVnaW5u aW5nLW9mLWRlZnVuKSkKICAgIChhbmQgKG51bGwgc3RhcnQtY29sKSAoc2V0cSBzdGFydC1jb2wg MCkpCiAgICAoY2F0Y2ggJ1NUT1AKICAgICAgKHdoaWxlICg8IChwb2ludCkgZW5kKQogICAgICAg IChjb25kICgoYW5kIChlbHQgc3RhdGUgOCkKICAgICAgICAgICAgICAgICAgICAobm90IChlbHQg c3RhdGUgNCkpKQogICAgICAgICAgICAgICA7OyBpbnNpZGUgYSBzdHJpbmcKICAgICAgICAgICAg ICAgKGFuZCAobG9va2luZy1hdCAiXFxzPiIpCiAgICAgICAgICAgICAgICAgICAgKHNldHEgaW5k ZW50LWxpbmVzIChjb25zIChsaXNwLWluZGVudC12YWx1ZSkgaW5kZW50LWxpbmVzKSkpCiAgICAg ICAgICAgICAgIChzZXRxIHN0YXRlIChsaXNwLWluZGVudC1uZXh0LXN0YXRlKSkKICAgICAgICAg ICAgICAgKQogICAgICAgICAgICAgICgobG9va2luZy1hdCAiXFxzXCIiKQogICAgICAgICAgICAg ICA7OyB0aGUgc3RhcnQgb2YgYSBzdHJpbmcKICAgICAgICAgICAgICAgKHNldHEgaW5kZW50IChh cHBlbmQgaW5kZW50IChsaXN0IDpzICgpIChjdXJyZW50LWNvbHVtbikpKQogICAgICAgICAgICAg ICAgICAgICBzdGF0ZSAobGlzcC1pbmRlbnQtbmV4dC1zdGF0ZSkpCiAgICAgICAgICAgICAgICkK ICAgICAgICAgICAgICAoKGxvb2tpbmctYXQgIlxcc1woIikKICAgICAgICAgICAgICAgOzsgb3Bl biBhIHBhcmVudGhlc2lzCiAgICAgICAgICAgICAgIChsZXQgKChjb2wgKGlmIGluZGVudC1saW5l cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKyAoY3VycmVudC1jb2x1bW4pICgtIChj YWFyIGluZGVudC1saW5lcykgKGNkYXIgaW5kZW50LWxpbmVzKSkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY3VycmVudC1jb2x1bW4pKSkpCiAgICAgICAgICAgICAgICAgKHNldHEgaW5k ZW50IChhcHBlbmQgaW5kZW50IChsaXN0IDpsICgpIGNvbCkpCiAgICAgICAgICAgICAgICAgICAg ICAgc3RhdGUgKGxpc3AtaW5kZW50LWF1dG9tYXRvbiBlbmQgKGxpc3AtaW5kZW50LW5leHQtc3Rh dGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bGlzcC1pbmRlbnQtd2hhdC1hcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbCkpKQogICAgICAgICAgICAgICApCiAgICAgICAgICAg ICAgKChsb29raW5nLWF0ICJcXHNcKSIpCiAgICAgICAgICAgICAgIDs7IGNsb3NlIGEgcGFyZW50 aGVzaXMKICAgICAgICAgICAgICAgKHRocm93ICdTVE9QIChsaXNwLWluZGVudC1uZXh0LXN0YXRl KSkKICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICgobG9va2luZy1hdCAiXFxzICIpCiAg ICAgICAgICAgICAgIDs7IHNwYWNlcyBhcmUgaWdub3JlZAogICAgICAgICAgICAgICAod2hpbGUg KGxvb2tpbmctYXQgIltbOmJsYW5rOl1dIikKICAgICAgICAgICAgICAgICAoc2V0cSBzdGF0ZSAo bGlzcC1pbmRlbnQtbmV4dC1zdGF0ZSkpKQogICAgICAgICAgICAgICApCiAgICAgICAgICAgICAg KChsb29raW5nLWF0ICJcXHN3XFx8XFxzXyIpCiAgICAgICAgICAgICAgIDs7IGEgZnVuY3Rpb24g b3IgYSBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgKGxldCogKChjb2wgKGlmIGluZGVudC1saW5l cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKyAoY3VycmVudC1jb2x1bW4pICgtIChj YWFyIGluZGVudC1saW5lcykgKGNkYXIgaW5kZW50LWxpbmVzKSkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY3VycmVudC1jb2x1bW4pKSkKICAgICAgICAgICAgICAgICAgICAgIHIKICAg ICAgICAgICAgICAgICAgICAgICh3IChjYXRjaCAnV09SRAogICAgICAgICAgICAgICAgICAgICAg ICAgICAod2hpbGUgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHIgKGNvbmNh dCByIChzdHJpbmcgKGZvbGxvd2luZy1jaGFyKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzZXRxIHN0YXRlIChsaXNwLWluZGVudC1uZXh0LXN0YXRlKSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoYW5kIChub3QgKGxvb2tpbmctYXQgIlxcd1xcfFxcc18iKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aHJvdyAnV09SRCByKSkpKSkpCiAgICAgICAg ICAgICAgICAgKHNldHEgaW5kZW50IChhcHBlbmQgaW5kZW50IChsaXN0IDp3IHcgY29sKSkpKQog ICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKChsb29raW5nLWF0ICJcXHM8IikKICAgICAg ICAgICAgICAgOzsgc3RhcnQgb2YgYSBjb21tZW50CiAgICAgICAgICAgICAgIChzZXRxIGluZGVu dCAoYXBwZW5kIGluZGVudCAobGlzdCA6YyAoY3VycmVudC1jb2x1bW4pKSkpCiAgICAgICAgICAg ICAgICh3aGlsZSAobm90IChsb29raW5nLWF0ICJcXHM+IikpCiAgICAgICAgICAgICAgICAgKHNl dHEgc3RhdGUgKGxpc3AtaW5kZW50LW5leHQtc3RhdGUpKSkKICAgICAgICAgICAgICAgKQogICAg ICAgICAgICAgICgobG9va2luZy1hdCAiXFxzXCciKQogICAgICAgICAgICAgICA7OyBxdW90ZQog ICAgICAgICAgICAgICAoc2V0cSBpbmRlbnQgKGFwcGVuZCBpbmRlbnQgKGxpc3QgOnEgKCkgKGN1 cnJlbnQtY29sdW1uKSkpKQogICAgICAgICAgICAgICAoc2V0cSBzdGF0ZSAobGlzcC1pbmRlbnQt bmV4dC1zdGF0ZSkpCiAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAoKGxvb2tpbmctYXQg Ilxcc1xcIikKICAgICAgICAgICAgICAgOzsgYSBzcGVjaWFsIGNoYXJhY3RlcgogICAgICAgICAg ICAgICAoc2V0cSBzdGF0ZSAobGlzcC1pbmRlbnQtbmV4dC1zdGF0ZSAyKSkKICAgICAgICAgICAg ICAgKQogICAgICAgICAgICAgICgobG9va2luZy1hdCAiXFxzPiIpCiAgICAgICAgICAgICAgIDs7 IGVuZCBvZiBsaW5lCiAgICAgICAgICAgICAgIChzZXRxIHN0YXRlIChsaXNwLWluZGVudC1uZXh0 LXN0YXRlKSkKICAgICAgICAgICAgICAgKHdoaWxlIChsb29raW5nLWF0ICJcXHMgIikKICAgICAg ICAgICAgICAgICAoc2V0cSBzdGF0ZSAobGlzcC1pbmRlbnQtbmV4dC1zdGF0ZSkpKQogICAgICAg ICAgICAgICAoc2V0cSBpbmRlbnQtbGluZXMgKGNvbnMgKGNvbnMgKGxpc3AtaW5kZW50LXZhbHVl KSAoY3VycmVudC1jb2x1bW4pKSBpbmRlbnQtbGluZXMpKQogICAgICAgICAgICAgICApCiAgICAg ICAgICAgICAgKHQKICAgICAgICAgICAgICAgKGVycm9yICJvb3BzISB1bmtub3duIGNsYXNzIG9m IHN5bnRheCAhIChpbmRlbnQgZmFpbGVkIGF0IHBvc2l0aW9uICVkKSIgKHBvaW50KSkpKSkpKSkK CihkZWZ1biBpbmRlbnQtZGVmdW4tZXhhbXBsZSBuaWwKICAiCiAgQW4gZXhhbXBsZSBob3cgdG8g dXNlIHRoZSBhdXRvbWF0b25pbiBmb3IgaW5kZW50aWcgYSB3aG9sZSByZWdpb24KICBvZiBsaXNw IGNvZGUgaW4gbGluZWFyIHRpbWUgKGEgZnVuY3Rpb24gZnJvbSB0aGUgYmVnaW5uaW5nIHRvIHRo ZSBwb2ludCkuCiAgIgogIChsZXQqIChpbmRlbnQtbGluZXMKICAgICAgICAgc3RhdGUgCiAgICAg ICAgIGwpCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGxpc3AtaW5kZW50LWF1dG9tYXRvbikK ICAgICAgKGRvbGlzdCAoaSBpbmRlbnQtbGluZXMpCiAgICAgICAgKHdoZW4gKGNvbnNwIGkpCiAg ICAgICAgICAoc2V0cSBsIChwcm9nMiAoYmVnaW5uaW5nLW9mLWxpbmUpIChwb2ludCkpKQogICAg ICAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiW1s6Ymxhbms6XV0iKQogICAgICAgICAgKHdoZW4g KG5vdCAoemVyb3AgKC0gICgtIGwgKHBvaW50KSkgKC0gKGNkciBpKSAoY2FyIGkpKSkpKQogICAg ICAgICAgICAoZGVsZXRlLXJlZ2lvbiBsIChwb2ludCkpCiAgICAgICAgICAgIChpbmRlbnQtdG8g KGNhciBpKSkpKQogICAgICAgIChwcmV2aW91cy1saW5lKSkpKSkKCihkZWZ1biBpbmRlbnQtbGlu ZS1leGFtcGxlIG5pbAogICIKICBBbiBleGFtcGxlIGhvdyB0byBpbmRlbnQgYSBsaW5lIG9mIGNv ZGUgdXNpbmcgdGhlIGF1dG9tYXRvbgogICIKICAobGV0KiAoaW5kZW50LWxpbmVzCiAgICAgICAg IHN0YXRlIAogICAgICAgICBkaWYKICAgICAgICAgKHBvcyAocG9pbnQtbWFya2VyKSkKICAgICAg ICAgKGwgKHByb2cyIChiZWdpbm5pbmctb2YtbGluZSkgKHBvaW50KSkpKQogICAgKHNhdmUtZXhj dXJzaW9uIChsaXNwLWluZGVudC1hdXRvbWF0b24pKQogICAgKGlmIChub3QgKGNvbnNwIChjYXIg aW5kZW50LWxpbmVzKSkpCiAgICAgICAgbmlsCiAgICAgIChzZXRxIGRpZgogICAgICAgICAgICAo Y2F0Y2ggJ0RJRgogICAgICAgICAgICAgIChkb2xpc3QgKGkgKGNkciBpbmRlbnQtbGluZXMpKQog ICAgICAgICAgICAgICAgKGFuZCAoY29uc3AgaSkKICAgICAgICAgICAgICAgICAgICAgKHRocm93 ICdESUYgKC0gKGNkciBpKSAoY2FyIGkpKSkpKSkpCiAgICAgIChza2lwLWNoYXJzLWZvcndhcmQg IltbOmJsYW5rOl1dIikKICAgICAgKHdoZW4gKG5vdCAoemVyb3AgKC0gKCsgKGNhYXIgaW5kZW50 LWxpbmVzKSBkaWYpICgtIChwb2ludCkgbCkpKSkKICAgICAgICAoZGVsZXRlLXJlZ2lvbiBsIChw b2ludCkpCiAgICAgICAgKGluZGVudC10byAoKyAoY2FhciBpbmRlbnQtbGluZXMpIGRpZikpCiAg ICAgICAgKGdvdG8tY2hhciAobWF4IHBvcyAocG9pbnQpKSkpKSkpCgoKCg== ------=_Part_15601_27409639.1214786496315--