From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Ryan Crum Newsgroups: gmane.emacs.bugs Subject: bug#12634: Patch for pretty-printing in json.el Date: Tue, 30 Oct 2012 17:04:52 -0400 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001636c92cfd2994f304cd4d234f X-Trace: ger.gmane.org 1351631141 13268 80.91.229.3 (30 Oct 2012 21:05:41 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 30 Oct 2012 21:05:41 +0000 (UTC) Cc: 12634@debbugs.gnu.org To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Oct 30 22:05:50 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1TTJ0O-0002WG-6T for geb-bug-gnu-emacs@m.gmane.org; Tue, 30 Oct 2012 22:05:48 +0100 Original-Received: from localhost ([::1]:38392 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TTJ0F-0000Rj-0h for geb-bug-gnu-emacs@m.gmane.org; Tue, 30 Oct 2012 17:05:39 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:60938) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TTJ0B-0000Rd-HQ for bug-gnu-emacs@gnu.org; Tue, 30 Oct 2012 17:05:36 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TTJ04-0006MT-KN for bug-gnu-emacs@gnu.org; Tue, 30 Oct 2012 17:05:35 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:58182) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TTJ04-0006MP-GA for bug-gnu-emacs@gnu.org; Tue, 30 Oct 2012 17:05:28 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1TTJ2X-0002HH-M4 for bug-gnu-emacs@gnu.org; Tue, 30 Oct 2012 17:08:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Ryan Crum Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 30 Oct 2012 21:08:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 12634 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 12634-submit@debbugs.gnu.org id=B12634.13516312518716 (code B ref 12634); Tue, 30 Oct 2012 21:08:01 +0000 Original-Received: (at 12634) by debbugs.gnu.org; 30 Oct 2012 21:07:31 +0000 Original-Received: from localhost ([127.0.0.1]:40200 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TTJ22-0002GX-FM for submit@debbugs.gnu.org; Tue, 30 Oct 2012 17:07:30 -0400 Original-Received: from mail-wi0-f180.google.com ([209.85.212.180]:40267) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TTJ1z-0002GO-69 for 12634@debbugs.gnu.org; Tue, 30 Oct 2012 17:07:28 -0400 Original-Received: by mail-wi0-f180.google.com with SMTP id hm4so552361wib.15 for <12634@debbugs.gnu.org>; Tue, 30 Oct 2012 14:04:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=7szhEfW/6DgjmwW9TdsIOeN8F+/U2vuB4NPCfu0/dgI=; b=bRGNX4mJBUpytEtUK193TiNi/HysRh1aQHdGJ3wBVCH3R6OqLjYYlhV9QOPceDuulx hGbm6j/ww41dqbmC+t+L0mT3Yv1WrXPDdPvpOOODfZAfEMcmvIKRTZZk2rK/a96QwnSw 8FkibeNjfjV5F1FhyYlvBKbCdzyJP+FGDiOrAOqTAksLPt7yH2IgPl1fbXVGoSHItmz9 wfn51U7DoTGruoBeJDAQDxuRIgdpI35DyU/Z/Sg9azO3P7iz22AKS1fg2ACWNqK8os/x G3LebR+5CatszauffvbMQ/SOF+Jf7Jv5ZG0lOkMLp43zoZTcGRMsltFfODITPe9YUwMh rqiQ== Original-Received: by 10.216.193.136 with SMTP id k8mr17972490wen.188.1351631092945; Tue, 30 Oct 2012 14:04:52 -0700 (PDT) Original-Received: by 10.194.44.40 with HTTP; Tue, 30 Oct 2012 14:04:52 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 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.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:66252 Archived-At: --001636c92cfd2994f304cd4d234f Content-Type: multipart/alternative; boundary=001636c92cfd2994ed04cd4d234d --001636c92cfd2994ed04cd4d234d Content-Type: text/plain; charset=UTF-8 OK, let's try this again. New patch attached. On Tue, Oct 30, 2012 at 4:03 PM, Stefan Monnier wrote: > - Your patch does not apply to the trunk version of json.el where > alist/plist keys are encoded with a new json-encode-key. > Oops. Fixed. > > - I don't understand this helper function. Why not store the leading "\n" > directly in json-encoding-current-indentation so that > we can use json-encoding-current-indentation directly instead of > calling json--current-whitespace? > Yeah, I see what you mean. Fixed. > > - BTW your patch calls json-encoding-current-indentation as a function in > json-encode-plist. > Foggy-headed. Fixed. > > - OTOH, I wouldn't mind a helper function/macro to consolidate all the > > (let ((json-encoding-current-indentation > (if json-encoding-pretty-print > (concat json-encoding-current-indentation > json-encoding-default-indentation) > ""))) > > in a single spot. > I created a little macro for this (json--with-indentation). > > - Why use ", " rather than "," for json-encoding-default-separator? > Vestigial code from a much older version of this patch. Fixed. > > - json-encoding-default-separator is a bad name since it holds the > *current* separator, rather than the default. > Renamed to json-encoding-separator. This was also vestigial (at one point it only used line-breaks if lists were beyond a certain length; overly complex). > - Why (format "%s" (json--current-whitespace)) rather than > (json--current-whitespace)? > Yeah, good question. Fixed. --001636c92cfd2994ed04cd4d234d Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable OK, let's try this again.

New patch attached.

On Tue, Oct 30, 2012 at 4:03 PM, Stefan Monnier <= monnier@iro.umontreal.ca> wrote:
- Your patch does not apply to the trunk version of json.el where
=C2=A0 alist/plist keys are encoded with a new json-encode-key.

Oops. Fixed.
=C2=A0

- I don't understand this helper function. =C2=A0Why not store the lead= ing "\n"
=C2=A0 directly in json-encoding-current-indentation so that
=C2=A0 we can use json-encoding-current-indentation directly instead of
=C2=A0 calling json--current-whitespace?

Yeah, I s= ee what you mean. Fixed.
=C2=A0

- BTW your patch calls json-encoding-current-indentation as a function in =C2=A0 json-encode-plist.

Foggy-headed. Fixed.
= =C2=A0

- OTOH, I wouldn't mind a helper function/macro to consolidate all the<= br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((json-encoding-current-indentation=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(if json-enco= ding-pretty-print
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0(concat json-encoding-current-indentation
=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=A0json-encoding-default-indentation)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"= ")))

=C2=A0 in a single spot.

I created a little macro = for this (json--with-indentation).
=C2=A0

- Why use ", " rather than "," for json-encoding-defaul= t-separator?

Vestigial code from a much older vers= ion of this patch. Fixed.
=C2=A0

- json-encoding-default-separator is a bad name since it holds the
=C2=A0 *current* separator, rather than the default.
<= br>Renamed to json-encoding-separator. This was also vestigial (at one poin= t it only used line-breaks if lists were beyond a certain length; overly co= mplex).
=C2=A0
- Why (format "%s" (json--current-whitespace)) rather than
=C2=A0 (json--current-whitespace)?

Yeah, good ques= tion. Fixed.

--001636c92cfd2994ed04cd4d234d-- --001636c92cfd2994f304cd4d234f Content-Type: application/octet-stream; name="json-pretty-printing.diff" Content-Disposition: attachment; filename="json-pretty-printing.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h8xi792o0 KioqIGEvanNvbi5lbAotLS0gYi9qc29uLmVsCioqKioqKioqKioqKioqKgoqKiogMyw5ICoqKioK ICA7OyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KICAKICA7OyBBdXRob3I6IEVkd2FyZCBPJ0Nvbm5vciA8dGVkQG9jb25ub3IuY3g+CiEgOzsg VmVyc2lvbjogMS4zCiAgOzsgS2V5d29yZHM6IGNvbnZlbmllbmNlCiAgCiAgOzsgVGhpcyBmaWxl IGlzIHBhcnQgb2YgR05VIEVtYWNzLgotLS0gMyw5IC0tLS0KICA7OyBDb3B5cmlnaHQgKEMpIDIw MDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAKICA7OyBBdXRob3I6IEVk d2FyZCBPJ0Nvbm5vciA8dGVkQG9jb25ub3IuY3g+CiEgOzsgVmVyc2lvbjogMS40CiAgOzsgS2V5 d29yZHM6IGNvbnZlbmllbmNlCiAgCiAgOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNz LgoqKioqKioqKioqKioqKioKKioqIDQ4LDUzICoqKioKLS0tIDQ4LDU0IC0tLS0KICA7OyAyMDA2 LTEyLTI5IC0gWEVtYWNzIHN1cHBvcnQsIGZyb20gQWlkYW4gS2Vob2UgPGtlaG9lYUBwYXJoYXNh cmQubmV0Pi4KICA7OyAyMDA4LTAyLTIxIC0gSW5zdGFsbGVkIGluIEdOVSBFbWFjcy4KICA7OyAy MDExLTEwLTE3IC0gUGF0Y2ggYGpzb24tYWxpc3QtcCcgYW5kIGBqc29uLXBsaXN0LXAnIHRvIGF2 b2lkIHJlY3Vyc2lvbiAtdHp6CisgOzsgMjAxMi0xMC0yNSAtIEFkZGVkIHByZXR0eS1wcmludGVk IHJlZm9ybWF0dGluZyAtUnlhbiBDcnVtIChyeWFuQHJ5YW5jcnVtLm9yZykKICAKICA7OzsgQ29k ZToKICAKKioqKioqKioqKioqKioqCioqKiA5OSwxMDQgKioqKiBJZiB0aGlzIGhhcyB0aGUgc2Ft ZSB2YWx1ZSBhcyBganNvbi1mYWxzZScsIHlvdSBtaWdodCBub3QgYmUgYWJsZSB0bwotLS0gMTAw LDEyNCAtLS0tCiAgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBmYWxzZScgYW5kIGBudWxs Jy4gIENvbnNpZGVyIGxldC1iaW5kaW5nCiAgdGhpcyBhcm91bmQgeW91ciBjYWxsIHRvIGBqc29u LXJlYWQnIGluc3RlYWQgb2YgYHNldHEnaW5nIGl0LiIpCiAgCisgKGRlZnZhciBqc29uLWVuY29k aW5nLXNlcGFyYXRvciAiLCIKKyAgICJWYWx1ZSB0byB1c2UgYXMgYW4gZWxlbWVudCBzZXBlcmF0 b3Igd2hlbiBlbmNvZGluZy4iKQorIAorIChkZWZ2YXIganNvbi1lbmNvZGluZy1kZWZhdWx0LWlu ZGVudGF0aW9uICIgICIKKyAgICJUaGUgZGVmYXVsdCBpbmRlbnRhdGlvbiBsZXZlbCBmb3IgZW5j b2RpbmcuIFVzZWQgb25seSB3aGVuCisgYGpzb24tZW5jb2RpbmctcHJldHR5LXByaW50JyBpcyBu b24tbmlsLiIpCisgCisgKGRlZnZhciBqc29uLWVuY29kaW5nLWN1cnJlbnQtaW5kZW50YXRpb24g IlxuIgorICAgIkludGVybmFsbHkgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGlu ZGVudGF0aW9uIGxldmVsIG9mCisgZW5jb2RpbmcuIFVzZWQgb25seSB3aGVuIGBqc29uLWVuY29k aW5nLXByZXR0eS1wcmludCcgaXMgbm9uLW5pbC4iKQorIAorIChkZWZ2YXIganNvbi1lbmNvZGlu Zy1wcmV0dHktcHJpbnQgbmlsCisgICAiU2V0dGluZyB0aGlzIHRvIG5vbi1uaWwgd2lsbCByZXN1 bHQgaW4gdGhlIG91dHB1dCBvZiBganNvbi1lbmNvZGUnCisgdG8gYmUgcHJldHR5LXByaW50ZWQu IikKKyAKKyAoZGVmdmFyIGpzb24tZW5jb2RpbmctbGlzcC1zdHlsZS1jbG9zaW5ncyBuaWwKKyAg ICJTZXR0aW5nIHRoaXMgdG8gYHQnIHdpbGwgY2F1c2UgXSBhbmQgfSBjbG9zaW5ncyB0byBoYXBw ZW4gbGlzcC1zdHlsZSwKKyB3aXRob3V0IGluZGVudGF0aW9uLiIpCisgCiAgDAogIAogIDs7OyBV dGlsaXRpZXMKKioqKioqKioqKioqKioqCioqKiAxMjQsMTI5ICoqKiogdGhpcyBhcm91bmQgeW91 ciBjYWxsIHRvIGBqc29uLXJlYWQnIGluc3RlYWQgb2YgYHNldHEnaW5nIGl0LiIpCi0tLSAxNDQs MTU3IC0tLS0KICAgICAgICAgICAgICAgICAgICdub3QtcGxpc3QpKSkKICAgIChudWxsIGxpc3Qp KQogIAorIChkZWZtYWNybyBqc29uLS13aXRoLWluZGVudGF0aW9uIChib2R5KQorICAgYChsZXQg KChqc29uLWVuY29kaW5nLWN1cnJlbnQtaW5kZW50YXRpb24KKyAgICAgICAgICAgKGlmIGpzb24t ZW5jb2RpbmctcHJldHR5LXByaW50CisgICAgICAgICAgICAgICAoY29uY2F0IGpzb24tZW5jb2Rp bmctY3VycmVudC1pbmRlbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICBqc29uLWVuY29k aW5nLWRlZmF1bHQtaW5kZW50YXRpb24pCisgICAgICAgICAgICAgIiIpKSkKKyAgICAgICxib2R5 KSkKKyAKICA7OyBSZWFkZXIgdXRpbGl0aWVzCiAgCiAgKGRlZnN1YnN0IGpzb24tYWR2YW5jZSAo Jm9wdGlvbmFsIG4pCioqKioqKioqKioqKioqKgoqKiogNDAyLDQ0MiAqKioqIFBsZWFzZSBzZWUg dGhlIGRvY3VtZW50YXRpb24gb2YgYGpzb24tb2JqZWN0LXR5cGUnIGFuZCBganNvbi1rZXktdHlw ZScuIgogIAogIChkZWZ1biBqc29uLWVuY29kZS1oYXNoLXRhYmxlIChoYXNoLXRhYmxlKQogICAg IlJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgSEFTSC1UQUJMRS4iCiEgICAoZm9ybWF0 ICJ7JXN9IgogICAgICAgICAgICAoanNvbi1qb2luCiAgICAgICAgICAgICAobGV0IChyKQohICAg ICAgICAgICAgICAobWFwaGFzaAohICAgICAgICAgICAgICAgKGxhbWJkYSAoayB2KQohICAgICAg ICAgICAgICAgICAocHVzaCAoZm9ybWF0ICIlczolcyIKISAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoanNvbi1lbmNvZGUta2V5IGspCiEgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGpzb24tZW5jb2RlIHYpKQohICAgICAgICAgICAgICAgICAgICAgICByKSkKISAgICAgICAg ICAgICAgIGhhc2gtdGFibGUpCiAgICAgICAgICAgICAgIHIpCiEgICAgICAgICAgICAiLCAiKSkp CiAgCiAgOzsgTGlzdCBlbmNvZGluZyAoaW5jbHVkaW5nIGFsaXN0cyBhbmQgcGxpc3RzKQogIAog IChkZWZ1biBqc29uLWVuY29kZS1hbGlzdCAoYWxpc3QpCiAgICAiUmV0dXJuIGEgSlNPTiByZXBy ZXNlbnRhdGlvbiBvZiBBTElTVC4iCiEgICAoZm9ybWF0ICJ7JXN9IgohICAgICAgICAgICAoanNv bi1qb2luIChtYXBjYXIgKGxhbWJkYSAoY29ucykKISAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGZvcm1hdCAiJXM6JXMiCiEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGpzb24tZW5jb2RlLWtleSAoY2FyIGNvbnMpKQohICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChqc29uLWVuY29kZSAoY2RyIGNvbnMpKSkpCiEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhbGlzdCkKISAgICAgICAgICAgICAgICAgICAgICAiLCAiKSkp CiAgCiAgKGRlZnVuIGpzb24tZW5jb2RlLXBsaXN0IChwbGlzdCkKICAgICJSZXR1cm4gYSBKU09O IHJlcHJlc2VudGF0aW9uIG9mIFBMSVNULiIKICAgIChsZXQgKHJlc3VsdCkKISAgICAgKHdoaWxl IHBsaXN0CiEgICAgICAgKHB1c2ggKGNvbmNhdCAoanNvbi1lbmNvZGUta2V5IChjYXIgcGxpc3Qp KQohICAgICAgICAgICAgICAgICAgICAgIjoiCiEgICAgICAgICAgICAgICAgICAgICAoanNvbi1l bmNvZGUgKGNhZHIgcGxpc3QpKSkKISAgICAgICAgICAgICByZXN1bHQpCiEgICAgICAgKHNldHEg cGxpc3QgKGNkZHIgcGxpc3QpKSkKISAgICAgKGNvbmNhdCAieyIgKGpzb24tam9pbiAobnJldmVy c2UgcmVzdWx0KSAiLCAiKSAifSIpKSkKICAKICAoZGVmdW4ganNvbi1lbmNvZGUtbGlzdCAobGlz dCkKICAgICJSZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIExJU1QuCi0tLSA0MzAsNDk3 IC0tLS0KICAKICAoZGVmdW4ganNvbi1lbmNvZGUtaGFzaC10YWJsZSAoaGFzaC10YWJsZSkKICAg ICJSZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIEhBU0gtVEFCTEUuIgohICAgKGZvcm1h dCAoaWYganNvbi1lbmNvZGluZy1wcmV0dHktcHJpbnQgInslcyVzfSIgInslc30iKQogICAgICAg ICAgICAoanNvbi1qb2luCiAgICAgICAgICAgICAobGV0IChyKQohICAgICAgICAgICAgICAoanNv bi0td2l0aC1pbmRlbnRhdGlvbgohICAgICAgICAgICAgICAgIChtYXBoYXNoCiEgICAgICAgICAg ICAgICAgIChsYW1iZGEgKGsgdikKISAgICAgICAgICAgICAgICAgICAocHVzaCAoZm9ybWF0CiEg ICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBqc29uLWVuY29kaW5nLXByZXR0eS1wcmludAoh ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzJXM6ICVzIgohICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIlcyVzOiVzIikKISAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi1l bmNvZGluZy1jdXJyZW50LWluZGVudGF0aW9uCiEgICAgICAgICAgICAgICAgICAgICAgICAgIChq c29uLWVuY29kZS1rZXkgaykKISAgICAgICAgICAgICAgICAgICAgICAgICAgKGpzb24tZW5jb2Rl IHYpKQohICAgICAgICAgICAgICAgICAgICAgICAgIHIpKQohICAgICAgICAgICAgICAgICBoYXNo LXRhYmxlKSkKICAgICAgICAgICAgICAgcikKISAgICAgICAgICAgIGpzb24tZW5jb2Rpbmctc2Vw YXJhdG9yKQohICAgICAgICAgICAoaWYganNvbi1lbmNvZGluZy1saXNwLXN0eWxlLWNsb3Npbmdz CiEgICAgICAgICAgICAgICAiIgohICAgICAgICAgICAgICAganNvbi1lbmNvZGluZy1jdXJyZW50 LWluZGVudGF0aW9uKSkpCiAgCiAgOzsgTGlzdCBlbmNvZGluZyAoaW5jbHVkaW5nIGFsaXN0cyBh bmQgcGxpc3RzKQogIAogIChkZWZ1biBqc29uLWVuY29kZS1hbGlzdCAoYWxpc3QpCiAgICAiUmV0 dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBBTElTVC4iCiEgICAoZm9ybWF0IChpZiBqc29u LWVuY29kaW5nLXByZXR0eS1wcmludCAieyVzJXN9IiAieyVzfSIpCiEgICAgICAgICAgIChqc29u LWpvaW4KISAgICAgICAgICAgIChqc29uLS13aXRoLWluZGVudGF0aW9uCiEgICAgICAgICAgICAg IChtYXBjYXIgKGxhbWJkYSAoY29ucykKISAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQg KGlmIGpzb24tZW5jb2RpbmctcHJldHR5LXByaW50CiEgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiJXMlczogJXMiCiEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IiVzJXM6JXMiKQohICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLWVuY29kaW5n LWN1cnJlbnQtaW5kZW50YXRpb24KISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpz b24tZW5jb2RlLWtleSAoY2FyIGNvbnMpKQohICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoanNvbi1lbmNvZGUgKGNkciBjb25zKSkpKQohICAgICAgICAgICAgICAgICAgICAgIGFsaXN0 KSkKISAgICAgICAgICAgICAgICAgICAgICBqc29uLWVuY29kaW5nLXNlcGFyYXRvcikKISAgICAg ICAgICAgKGlmIGpzb24tZW5jb2RpbmctbGlzcC1zdHlsZS1jbG9zaW5ncwohICAgICAgICAgICAg ICAgIiIKISAgICAgICAgICAgICBqc29uLWVuY29kaW5nLWN1cnJlbnQtaW5kZW50YXRpb24pKSkK ICAKICAoZGVmdW4ganNvbi1lbmNvZGUtcGxpc3QgKHBsaXN0KQogICAgIlJldHVybiBhIEpTT04g cmVwcmVzZW50YXRpb24gb2YgUExJU1QuIgogICAgKGxldCAocmVzdWx0KQohICAgICAoanNvbi0t d2l0aC1pbmRlbnRhdGlvbgohICAgICAgICh3aGlsZSBwbGlzdAohICAgICAgICAgKHB1c2ggKGNv bmNhdAohICAgICAgICAgICAgICAgIGpzb24tZW5jb2RpbmctY3VycmVudC1pbmRlbnRhdGlvbgoh ICAgICAgICAgICAgICAgIChqc29uLWVuY29kZS1rZXkgKGNhciBwbGlzdCkpCiEgICAgICAgICAg ICAgICAgKGlmIGpzb24tZW5jb2RpbmctcHJldHR5LXByaW50CiEgICAgICAgICAgICAgICAgICAg ICI6ICIKISAgICAgICAgICAgICAgICAgICI6IikKISAgICAgICAgICAgICAgICAoanNvbi1lbmNv ZGUgKGNhZHIgcGxpc3QpKSkKISAgICAgICAgICAgICAgIHJlc3VsdCkKISAgICAgICAgIChzZXRx IHBsaXN0IChjZGRyIHBsaXN0KSkpKQohICAgICAoY29uY2F0ICJ7IgohICAgICAgICAgICAgIChq c29uLWpvaW4gKG5yZXZlcnNlIHJlc3VsdCkganNvbi1lbmNvZGluZy1zZXBhcmF0b3IpCiEgICAg ICAgICAgICAgKGlmIChhbmQganNvbi1lbmNvZGluZy1wcmV0dHktcHJpbnQKISAgICAgICAgICAg ICAgICAgICAgICAobm90IGpzb24tZW5jb2RpbmctbGlzcC1zdHlsZS1jbG9zaW5ncykpCiEgICAg ICAgICAgICAgICAgIGpzb24tZW5jb2RpbmctY3VycmVudC1pbmRlbnRhdGlvbgohICAgICAgICAg ICAgICAgIiIpCiEgICAgICAgICAgICAgIn0iKSkpCiAgCiAgKGRlZnVuIGpzb24tZW5jb2RlLWxp c3QgKGxpc3QpCiAgICAiUmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBMSVNULgoqKioq KioqKioqKioqKioKKioqIDQ3NSw0ODEgKioqKiBiZWNvbWUgSlNPTiBvYmplY3RzLiIKICAKICAo ZGVmdW4ganNvbi1lbmNvZGUtYXJyYXkgKGFycmF5KQogICAgIlJldHVybiBhIEpTT04gcmVwcmVz ZW50YXRpb24gb2YgQVJSQVkuIgohICAgKGNvbmNhdCAiWyIgKG1hcGNvbmNhdCAnanNvbi1lbmNv ZGUgYXJyYXkgIiwgIikgIl0iKSkKICAKICAMCiAgCi0tLSA1MzAsNTUzIC0tLS0KICAKICAoZGVm dW4ganNvbi1lbmNvZGUtYXJyYXkgKGFycmF5KQogICAgIlJldHVybiBhIEpTT04gcmVwcmVzZW50 YXRpb24gb2YgQVJSQVkuIgohICAgKGlmIChhbmQganNvbi1lbmNvZGluZy1wcmV0dHktcHJpbnQK ISAgICAgICAgICAgICg+IChsZW5ndGggYXJyYXkpIDApKQohICAgICAgIChjb25jYXQKISAgICAg ICAgKGxldCAoKGpzb24tZW5jb2RpbmctY3VycmVudC1pbmRlbnRhdGlvbgohICAgICAgICAgICAg ICAgKGNvbmNhdCBqc29uLWVuY29kaW5nLWN1cnJlbnQtaW5kZW50YXRpb24KISAgICAgICAgICAg ICAgICAgICAgICAganNvbi1lbmNvZGluZy1kZWZhdWx0LWluZGVudGF0aW9uKSkpCiEgICAgICAg ICAgKGNvbmNhdCAoZm9ybWF0ICJbJXMiIGpzb24tZW5jb2RpbmctY3VycmVudC1pbmRlbnRhdGlv bikKISAgICAgICAgICAgICAgICAgIChqc29uLWpvaW4gKG1hcGNhciAnanNvbi1lbmNvZGUgYXJy YXkpCiEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgIiVzJXMiCiEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi1lbmNvZGluZy1zZXBhcmF0b3IKISAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLWVuY29kaW5nLWN1cnJlbnQt aW5kZW50YXRpb24pKSkpCiEgICAgICAgIChmb3JtYXQgIiVzXSIKISAgICAgICAgICAgICAgICAo aWYganNvbi1lbmNvZGluZy1saXNwLXN0eWxlLWNsb3NpbmdzCiEgICAgICAgICAgICAgICAgICAg ICIiCiEgICAgICAgICAgICAgICAgICBqc29uLWVuY29kaW5nLWN1cnJlbnQtaW5kZW50YXRpb24p KSkKISAgICAgKGNvbmNhdCAiWyIKISAgICAgICAgICAgICAobWFwY29uY2F0ICdqc29uLWVuY29k ZSBhcnJheSBqc29uLWVuY29kaW5nLXNlcGFyYXRvcikKISAgICAgICAgICAgICAiXSIpKSkKICAK ICAMCiAgCioqKioqKioqKioqKioqKgoqKiogNTQyLDU0NyAqKioqIEFkdmFuY2VzIHBvaW50IGp1 c3QgcGFzdCBKU09OIG9iamVjdC4iCi0tLSA2MTQsNjQyIC0tLS0KICAgICAgICAgICgobGlzdHAg b2JqZWN0KSAgICAgICAgKGpzb24tZW5jb2RlLWxpc3Qgb2JqZWN0KSkKICAgICAgICAgICh0ICAg ICAgICAgICAgICAgICAgICAgKHNpZ25hbCAnanNvbi1lcnJvciAobGlzdCBvYmplY3QpKSkpKQog IAorIDs7IFByZXR0eSBwcmludGluZworIAorIChkZWZ1biBqc29uLXByZXR0eS1wcmludC1idWZm ZXIgKCkKKyAgICJQcmV0dHktcHJpbnQgY3VycmVudCBidWZmZXIuIgorICAgKGludGVyYWN0aXZl KQorICAgKGxldCogKChqc29uLWVuY29kaW5nLXByZXR0eS1wcmludCB0KQorICAgICAgICAgIChq c29uLXN0cmluZyAoanNvbi1lbmNvZGUgKGpzb24tcmVhZC1mcm9tLXN0cmluZyAoYnVmZmVyLXN0 cmluZykpKSkKKyAgICAgICAgICAoYnVmIChjdXJyZW50LWJ1ZmZlcikpKQorICAgICAod2l0aC1j dXJyZW50LWJ1ZmZlciBidWYKKyAgICAgICAoZXJhc2UtYnVmZmVyKQorICAgICAgIChpbnNlcnQg anNvbi1zdHJpbmcpKSkpCisgCisgKGRlZnVuIGpzb24tcHJldHR5LXByaW50ICgpCisgICAiUHJl dHR5LXByaW50IHNlbGVjdGVkIHJlZ2lvbi4iCisgICAoaW50ZXJhY3RpdmUpCisgICAodW5sZXNz IG1hcmstYWN0aXZlCisgICAgIChlcnJvciAiTm8gcmVnaW9uIHNlbGVjdGVkLiIpKQorICAgKGxl dCAoKGJlZ2luIChyZWdpb24tYmVnaW5uaW5nKSkKKyAgICAgICAgIChlbmQgKHJlZ2lvbi1lbmQp KQorICAgICAgICAgKGpzb24tZW5jb2RpbmctcHJldHR5LXByaW50IHQpKQorICAgICAoa2lsbC1y ZWdpb24gYmVnaW4gZW5kKQorICAgICAoaW5zZXJ0IChqc29uLWVuY29kZSAoanNvbi1yZWFkLWZy b20tc3RyaW5nIChjdXJyZW50LWtpbGwgMCkpKSkpKQorIAogIChwcm92aWRlICdqc29uKQogIAog IDs7OyBqc29uLmVsIGVuZHMgaGVyZQo= --001636c92cfd2994f304cd4d234f--