From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Barry OReilly Newsgroups: gmane.emacs.devel Subject: Re: [RFC] Editing Lisp through changing indentation Date: Thu, 29 Aug 2013 15:50:08 -0400 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=089e012953accefa1404e51b69b3 X-Trace: ger.gmane.org 1377805815 8939 80.91.229.3 (29 Aug 2013 19:50:15 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 29 Aug 2013 19:50:15 +0000 (UTC) Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Aug 29 21:50:18 2013 Return-path: Envelope-to: ged-emacs-devel@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 1VF8ER-0001KL-U0 for ged-emacs-devel@m.gmane.org; Thu, 29 Aug 2013 21:50:16 +0200 Original-Received: from localhost ([::1]:45514 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VF8ER-0003mQ-Is for ged-emacs-devel@m.gmane.org; Thu, 29 Aug 2013 15:50:15 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:57444) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VF8EN-0003mE-DS for emacs-devel@gnu.org; Thu, 29 Aug 2013 15:50:12 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VF8EL-0003cR-Pg for emacs-devel@gnu.org; Thu, 29 Aug 2013 15:50:11 -0400 Original-Received: from mail-ob0-x235.google.com ([2607:f8b0:4003:c01::235]:61520) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VF8EL-0003cC-Gd for emacs-devel@gnu.org; Thu, 29 Aug 2013 15:50:09 -0400 Original-Received: by mail-ob0-f181.google.com with SMTP id dn14so966368obc.26 for ; Thu, 29 Aug 2013 12:50:08 -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=RfFpNNPEYOzQal7dZyJ2Dly+XqlfnY+M0qXFGkeHMjc=; b=EnLVQ6lb3osS2na80IxMbi5+aSILkTL7Hle72NvP2ZpsUeSJWXwe+Qt6DbC8rELQjb YNQNIZLFRHQgCQKaCpk9wlmvXtI0b5wItmNN+8ud1roIJSB8MWXHTRo4eKq1Mt+UAMSP P9aU9NpSZyA0ZihNihFfxKk4j1IOSkmFH/SJYrpmgI9SlTNG1QUi/S7ycpvbIgN/VZtf q9tyWviNU3TiEOZT5wVkm6zWcPNX0xQC5BWgqhbeVCTjMgMuxFmPQcP1TAnFnfWVg9kK 3/rHdD+XTgr+HwI9IuxBTQmtM+ei62Iw1ZpmyQi7Hna174RY7cikzA3WY397jT+wSViX oapQ== X-Received: by 10.60.62.101 with SMTP id x5mr3846030oer.24.1377805808890; Thu, 29 Aug 2013 12:50:08 -0700 (PDT) Original-Received: by 10.76.89.194 with HTTP; Thu, 29 Aug 2013 12:50:08 -0700 (PDT) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:4003:c01::235 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 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.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:163091 Archived-At: --089e012953accefa1404e51b69b3 Content-Type: multipart/alternative; boundary=089e012953accefa1104e51b69b1 --089e012953accefa1104e51b69b1 Content-Type: text/plain; charset=ISO-8859-1 > I suggest you start with an ELPA package. If it turns out to be > popular, we can later include it in Emacs. Ok, I'll call it adjust-parens. In ELPA, 'make archive' expects a package ChangeLog, even while existing packages don't have one. $ make archive rm -r archive-tmp rm: cannot remove `archive-tmp': No such file or directory make: [archive-tmp] Error 1 (ignored) mkdir -p archive-tmp cp -a packages/. archive-tmp/packages make process-archive make[1]: Entering directory `/redacted/linux/boreilly/sw/elpa' # FIXME, we could probably speed this up significantly with # rules like "%.tar: ../%/ChangeLog" so we only rebuild the packages # that have indeed changed. cd archive-tmp/packages; \ emacs --batch -l /redacted/linux/boreilly/sw/elpa/admin/archive-contents.el \ -f batch-make-archive Skipping non-package file README Wrote /home/boreilly/l/sw/elpa/archive-tmp/packages/ack/ack-pkg.el Error in adaptive-wrap: (file-error "Opening input file" "no such file or directory" "/home/boreilly/l/sw/elpa/archive-tmp/packages/adaptive-wrap/ChangeLog") make[1]: *** [process-archive] Error 255 make[1]: Leaving directory `/redacted/linux/boreilly/sw/elpa' make: *** [archive] Error 2 I fixed it with this patch (git diff -w): diff --git a/admin/archive-contents.el b/admin/archive-contents.el index 2d588e9..640c285 100644 --- a/admin/archive-contents.el +++ b/admin/archive-contents.el @@ -206,6 +206,7 @@ Rename DIR/PKG.el to PKG-VERS.el, delete DIR, and return the descriptor." (re-search-backward "^;;;.*ends here") (re-search-backward "^(provide") (skip-chars-backward " \t\n") + (when (file-readable-p cl) (insert "\n\n;;;; ChangeLog:\n\n") (let* ((start (point)) (end (copy-marker start t))) @@ -213,7 +214,7 @@ Rename DIR/PKG.el to PKG-VERS.el, delete DIR, and return the descriptor." (goto-char end) (unless (bolp) (insert "\n")) (while (progn (forward-line -1) (>= (point) start)) - (insert ";; "))) + (insert ";; ")))) (set (make-local-variable 'backup-inhibited) t) (basic-save-buffer) ;Less chatty than save-buffer. (kill-buffer))) Shall I commit this? After that, list-packages shows the new adjust-parens package in the local ELPA archive. Here are some ELPA README redlines: diff --git a/README b/README index 097e430..3d01912 100644 --- a/README +++ b/README @@ -29,9 +29,9 @@ each package. *** Add a multi-file package as a directory, packages/NAME. -*** Commit your changes the usual way ("bzr add", "bzr commit", etc). +*** Commit your changes the usual way ("git add", "git commit", etc). -Changes in the Bzr repository do not immediately propagate to the +Changes in the Git repository do not immediately propagate to the user-facing archive (what users see when they do `M-x list-packages'). That is done by deploying the archive. @@ -67,7 +67,7 @@ and adds them to the archive. ** To access a deployed archive -To access the archive via HTPP, have a symlink (say) /var/www/packages +To access the archive via HTTP, have a symlink (say) /var/www/packages pointing to DEST/packages, and set up Emacs with (setq package-archives '(("new-elpa" . "http://foo.com/packages"))) The ELPA README mentions having a "site" build target, but: $ make site make: *** No rule to make target `site'. Stop. If the site target to Make is indeed gone, I'll remove wording from the README about it too. With no objections, I'll commit the above diffs and the attached adjust-parens.el file to ELPA. --089e012953accefa1104e51b69b1 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
> I suggest you start with an ELPA package. If it turns= out to be
> popular, we can later include it in Emacs.

Ok, I&= #39;ll call it adjust-parens.

In ELPA, 'make archive' expect= s a package ChangeLog, even while
existing packages don't have one.

=A0 $ make archive
=A0 rm -= r archive-tmp
=A0 rm: cannot remove `archive-tmp': No such file or d= irectory
=A0 make: [archive-tmp] Error 1 (ignored)
=A0 mkdir -p archi= ve-tmp
=A0 cp -a packages/. archive-tmp/packages
=A0 make=A0 process-archive=A0 make[1]: Entering directory `/redacted/linux/boreilly/sw/elpa'
= =A0 # FIXME, we could probably speed this up significantly with
=A0 # ru= les like "%.tar: ../%/ChangeLog" so we only rebuild the packages<= br> =A0 # that have indeed changed.
=A0 cd archive-tmp/packages; \
=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 emacs --batch -l /redacted/linux/boreilly/sw/el= pa/admin/archive-contents.el \
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 -= f batch-make-archive
=A0 Skipping non-package file README
=A0 Wrote /home/boreilly/l/sw/elpa/archive-tmp/packages/ack/ack-pkg.el
= =A0 Error in adaptive-wrap: (file-error "Opening input file" &quo= t;no such file or directory" "/home/boreilly/l/sw/elpa/archive-tm= p/packages/adaptive-wrap/ChangeLog")
=A0 make[1]: *** [process-archive] Error 255
=A0 make[1]: Leaving direct= ory `/redacted/linux/boreilly/sw/elpa'
=A0 make: *** [archive] Error= 2

I fixed it with this patch (git diff -w):

diff --git a/adm= in/archive-contents.el b/admin/archive-contents.el
index 2d588e9..640c285 100644
--- a/admin/archive-contents.el
+++ b/a= dmin/archive-contents.el
@@ -206,6 +206,7 @@ Rename DIR/PKG.el to PKG-VE= RS.el, delete DIR, and return the descriptor."
=A0=A0=A0=A0=A0=A0 (= re-search-backward "^;;;.*ends here")
=A0=A0=A0=A0=A0=A0 (re-search-backward "^(provide")
=A0=A0=A0= =A0=A0=A0 (skip-chars-backward " \t\n")
+=A0=A0=A0=A0=A0 (when= (file-readable-p cl)
=A0=A0=A0=A0=A0=A0=A0=A0 (insert "\n\n;;;; Ch= angeLog:\n\n")
=A0=A0=A0=A0=A0=A0=A0=A0 (let* ((start (point))
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (end (copy-marker start t)))<= br>@@ -213,7 +214,7 @@ Rename DIR/PKG.el to PKG-VERS.el, delete DIR, and re= turn the descriptor."
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (goto-char end= )
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (unless (bolp) (insert "\n"))=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (while (progn (forward-line -1) (>=3D (po= int) start))
-=A0=A0=A0=A0=A0=A0=A0=A0=A0 (insert ";; ")))
= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (insert ";; "))))
=A0=A0=A0= =A0=A0=A0 (set (make-local-variable 'backup-inhibited) t)
=A0=A0=A0= =A0=A0=A0 (basic-save-buffer)=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ;Le= ss chatty than save-buffer.
=A0=A0=A0=A0=A0=A0 (kill-buffer)))

Shall I commit this?

After= that, list-packages shows the new adjust-parens package in the
local EL= PA archive.

Here are some ELPA README redlines:

diff --git a/= README b/README
index 097e430..3d01912 100644
--- a/README
+++ b/README
@@ -29,9 += 29,9 @@ each package.
=A0
=A0*** Add a multi-file package as a direct= ory, packages/NAME.
=A0
-*** Commit your changes the usual way ("= ;bzr add", "bzr commit", etc).
+*** Commit your changes the usual way ("git add", "git comm= it", etc).
=A0
-Changes in the Bzr repository do not immediately= propagate to the
+Changes in the Git repository do not immediately prop= agate to the
=A0user-facing archive (what users see when they do `M-x list-packages'= ).
=A0That is done by deploying the archive.
=A0
@@ -67,7 +67,7 @@= and adds them to the archive.
=A0
=A0** To access a deployed archive=
=A0
-To access the archive via HTPP, have a symlink (say) /var/www/packages
= +To access the archive via HTTP, have a symlink (say) /var/www/packages
= =A0pointing to DEST/packages, and set up Emacs with
=A0
=A0=A0 (setq = package-archives '(("new-elpa" . "http://foo.com/packages")))

The ELPA README mentions having a "site" build target, but:
=A0 $ make site
=A0 make: *** No rule to make target `site'.= =A0 Stop.

If the site target to Make is indeed gone, I'll remove= wording from
the README about it too.

With no objections, I'll commit the abo= ve diffs and the attached
adjust-parens.el file to ELPA.

--089e012953accefa1104e51b69b1-- --089e012953accefa1404e51b69b3 Content-Type: application/octet-stream; name="adjust-parens.el" Content-Disposition: attachment; filename="adjust-parens.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hkydxwsp0 Ozs7IGFkanVzdC1wYXJlbnMuZWwgLS0tIEluZGVudCBhbmQgZGVkZW50IExpc3AgY29kZSwgYXV0 b21hdGljYWxseSBhZGp1c3QgY2xvc2UgcGFyZW5zIC0qLSBsZXhpY2FsLWJpbmRpbmc6IHQ7IC0q LQoKOzsgQ29weXJpZ2h0IChDKSAyMDEzICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K Cjs7IEF1dGhvcjogQmFycnkgTydSZWlsbHkgPGd1bmRhZXRpYXBvQGdtYWlsLmNvbT4KOzsgVmVy c2lvbjogMS4wCgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7 IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7 IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cjs7Cjs7IFRoaXMgcGFj a2FnZSBwcm92aWRlcyBjb21tYW5kcyBmb3IgaW5kZW50aW5nIGFuZCBkZWRlbnRpbmcgTGlzcAo7 OyBjb2RlIHN1Y2ggdGhhdCBjbG9zZSBwYXJlbnRoZXNlcyBhcmUgYXV0b21hdGljYWxseSBhZGp1 c3RlZCB0byBiZQo7OyBjb25zaXN0ZW50IHdpdGggdGhlIG5ldyBsZXZlbCBvZiBpbmRlbnRhdGlv bi4KOzsKOzsgV2hlbiByZWFkaW5nIExpc3AsIHRoZSBwcm9ncmFtbWVyIHBheXMgYXR0ZW50aW9u IHRvIG9wZW4gcGFyZW5zIGFuZAo7OyB0aGUgY2xvc2UgcGFyZW5zIG9uIHRoZSBzYW1lIGxpbmUu IEJ1dCB3aGVuIGEgc2V4cCBzcGFucyBtb3JlIHRoYW4KOzsgb25lIGxpbmUsIHNoZSBkZWR1Y2Vz IHRoZSBjbG9zZSBwYXJlbiBmcm9tIGluZGVudGF0aW9uIGFsb25lLiBHaXZlbgo7OyB0aGF0J3Mg aG93IHdlIHJlYWQgTGlzcCwgdGhpcyBwYWNrYWdlIGFpbXMgdG8gZW5hYmxlIGVkaXRpbmcgTGlz cAo7OyBzaW1pbGFybHk6IGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRoZSBjbG9zZSBwYXJlbnMgcHJv Z3JhbW1lcnMgaWdub3JlCjs7IHdoZW4gcmVhZGluZy4gQSByZXN1bHQgb2YgdGhpcyBpcyBhbiBl ZGl0aW5nIGV4cGVyaWVuY2Ugc29tZXdoYXQKOzsgbGlrZSBweXRob24tbW9kZSwgd2hpY2ggYWxz byBvZmZlcnMgImluZGVudCIgYW5kICJkZWRlbnQiIGNvbW1hbmRzLgo7OyBUaGVyZSBhcmUgZGlm ZmVyZW5jZXMgYmVjYXVzZSBsaXNwLW1vZGUga25vd3MgbW9yZSBkdWUgdG8gZXhpc3RpbmcKOzsg cGFyZW5zLgo7Owo7OyBUbyB1c2U6Cjs7ICAgKHJlcXVpcmUgJ2FkanVzdC1wYXJlbnMpCjs7Cjs7 IFRoaXMgYmluZHMgdHdvIGtleXMgaW4gTGlzcCBNb2RlOgo7OyAgIChsb2NhbC1zZXQta2V5IChr YmQgIlRBQiIpICdsaXNwLWluZGVudC1hZGp1c3QtcGFyZW5zKQo7OyAgIChsb2NhbC1zZXQta2V5 IChrYmQgIjxiYWNrdGFiPiIpICdsaXNwLWRlZGVudC1hZGp1c3QtcGFyZW5zKQo7Owo7OyBsaXNw LWluZGVudC1hZGp1c3QtcGFyZW5zIHBvdGVudGlhbGx5IGNhbGxzIGluZGVudC1mb3ItdGFiLWNv bW1hbmQKOzsgKHRoZSB1c3VhbCBiaW5kaW5nIGZvciBUQUIgaW4gTGlzcCBNb2RlKS4gVGh1cyBp dCBzaG91bGQgbm90Cjs7IGludGVyZmVyZSB3aXRoIG90aGVyIFRBQiBmZWF0dXJlcyBsaWtlIGNv bXBsZXRpb24tYXQtcG9pbnQuCjs7Cjs7IFNvbWUgZXhhbXBsZXMgZm9sbG93LiB8IGluZGljYXRl cyB0aGUgcG9zaXRpb24gb2YgcG9pbnQuCjs7Cjs7ICAgKGxldCAoKHggMTApICh5IChzb21lLWZ1 bmMgMjApKSkpCjs7ICAgfAo7Owo7OyBBZnRlciBvbmUgVEFCOgo7Owo7OyAgIChsZXQgKCh4IDEw KSAoeSAoc29tZS1mdW5jIDIwKSkpCjs7ICAgICB8KQo7Owo7OyBBZnRlciB0aHJlZSBtb3JlIFRB QjoKOzsKOzsgICAobGV0ICgoeCAxMCkgKHkgKHNvbWUtZnVuYyAyMAo7OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwpKSkpCjs7Cjs7IEFmdGVyIHR3byBTaGlmdC1UQUIgdG8gZGVkZW50 Ogo7Owo7OyAgIChsZXQgKCh4IDEwKSAoeSAoc29tZS1mdW5jIDIwKSkKOzsgICAgICAgICB8KSkK OzsKOzsgV2hlbiBkZWRlbnRpbmcsIHRoZSBzZXhwIG1heSBoYXZlIHNpYmxpbmcgc2V4cHMgb24g bGluZXMgYmVsb3cuIEl0Cjs7IG1ha2VzIGxpdHRsZSBzZW5zZSBmb3IgdGhvc2Ugc2V4cHMgdG8g c3RheSBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiwKOzsgYmVjYXVzZSB0aGV5IGNhbm5vdCBrZWVw IHRoZSBzYW1lIHBhcmVudCBzZXhwIHdpdGhvdXQgYmVpbmcgbW92ZWQKOzsgY29tcGxldGVseS4g VGh1cyB0aGV5IGFyZSBkZWRlbnRlZCB0b28uIEFuIGV4YW1wbGUgb2YgdGhpczoKOzsKOzsgICAo ZGVmdW4gZnVuYyAoKQo7OyAgICAgKHNhdmUtZXhjdXJzaW9uCjs7ICAgICAgIChvdGhlci1mdW5j LTEpCjs7ICAgICAgIHwob3RoZXItZnVuYy0yKQo7OyAgICAgICAob3RoZXItZnVuYy0zKSkpCjs7 Cjs7IEFmdGVyIFNoaWZ0LVRBQjoKOzsKOzsgICAoZGVmdW4gZnVuYyAoKQo7OyAgICAgKHNhdmUt ZXhjdXJzaW9uCjs7ICAgICAgIChvdGhlci1mdW5jLTEpKQo7OyAgICAgfChvdGhlci1mdW5jLTIp Cjs7ICAgICAob3RoZXItZnVuYy0zKSkKOzsKOzsgSWYgeW91IGluZGVudCBhZ2FpbiB3aXRoIFRB QiwgdGhlIHNleHBzIHNpYmxpbmdzIGFyZW4ndCBpbmRlbnRlZDoKOzsKOzsgICAoZGVmdW4gZnVu YyAoKQo7OyAgICAgKHNhdmUtZXhjdXJzaW9uCjs7ICAgICAgIChvdGhlci1mdW5jLTEpCjs7ICAg ICAgIHwob3RoZXItZnVuYy0yKSkKOzsgICAgIChvdGhlci1mdW5jLTMpKQo7Owo7OyBUaHVzIFRB QiBhbmQgU2hpZnQtVEFCIGFyZSBub3QgZXhhY3QgaW52ZXJzZSBvcGVyYXRpb25zIG9mIGVhY2gK Ozsgb3RoZXIsIHRob3VnaCB0aGV5IG9mdGVuIHNlZW0gdG8gYmUuCgo7OzsgQ29kZToKCjs7IEZ1 dHVyZSB3b3JrOgo7OyAgIC0gQ29uc2lkZXIgdGFraW5nIGEgcmVnaW9uIGFzIGlucHV0IGluIG9y ZGVyIHRvIGluZGVudCBhIHNleHAgYW5kCjs7ICAgICBpdHMgc2libGluZ3MgaW4gdGhlIHJlZ2lv bi4gRGVkZW50aW5nIHdvdWxkIG5vdCB0YWtlIGEgcmVnaW9uLgo7OyAgIC0gV3JpdGUgdGVzdHMK CihyZXF1aXJlICdjbCkKCihkZWZ1biBsYXN0LXNleHAtd2l0aC1yZWxhdGl2ZS1kZXB0aCAoZnJv bS1wb3MgdG8tcG9zIHJlbC1kZXB0aCkKICAiUGFyc2luZyBzZXhwcyBmcm9tIEZST00tUE9TIChp bmNsdXNpdmUpIHRvIFRPLVBPUyAoZXhjbHVzaXZlKSwKcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0 aGUgbGFzdCBzZXhwIHRoYXQgaGFkIGRlcHRoIFJFTC1ERVBUSCByZWxhdGl2ZQp0byBGUk9NLVBP Uy4gUmV0dXJucyBuaWwgaWYgUkVMLURFUFRIIGlzIG5vdCByZWFjaGVkLgoKRXhhbXBsZXM6CiAg UmVnaW9uOiAgIGEgKGIgYyAoZCkpIGUgKGYgZyAoaCBpKSkgagoKICBFdmFsdWF0ZTogKGxhc3Qt c2V4cC13aXRoLXJlbGF0aXZlLWRlcHRoIHBvcy1hICgxKyBwb3MtaikgMCkKICBSZXR1cm5zOiAg cG9zaXRpb24gb2YgagoKICBFdmFsdWF0ZTogKGxhc3Qtc2V4cC13aXRoLXJlbGF0aXZlLWRlcHRo IHBvcy1hICgxKyBwb3MtaikgLTEpCiAgUmV0dXJuczogIHBvc2l0aW9uIG9mIChoIGkpCgpUaGlz IGZ1bmN0aW9uIGFzc3VtZXMgRlJPTS1QT1MgaXMgbm90IGluIGEgc3RyaW5nIG9yIGNvbW1lbnQu IgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGdvdG8tY2hhciBmcm9tLXBvcykKICAgIChsZXQgKHRo ZS1sYXN0LXBvcwogICAgICAgICAgKHBhcnNlLXN0YXRlICcoMCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsKSkpCiAgICAgICh3aGlsZSAoPCAocG9pbnQpIHRvLXBvcykKICAgICAgICAo c2V0cSBwYXJzZS1zdGF0ZQogICAgICAgICAgICAgIChwYXJzZS1wYXJ0aWFsLXNleHAgKHBvaW50 KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8tcG9zCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHQgOyBTdG9wIGJlZm9yZSBzZXhwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YXJzZS1zdGF0ZSkpCiAgICAgICAgKGFuZCAobm90IChlcSAocG9pbnQpIHRvLXBvcykpCiAgICAg ICAgICAgICAoZXEgKGNhciBwYXJzZS1zdGF0ZSkgcmVsLWRlcHRoKQogICAgICAgICAgICAgKHNl dHEgdGhlLWxhc3QtcG9zIChwb2ludCkpKQogICAgICAgIDs7IFRoZSBwcmV2aW91cyBwYXJzZSBt YXkgbm90IGFkdmFuY2UuIFRvIGFkdmFuY2UgYW5kIG1haW50YWluCiAgICAgICAgOzsgY29ycmVj dG5lc3Mgb2YgZGVwdGgsIHdlIHBhcnNlIG92ZXIgdGhlIG5leHQgY2hhci4KICAgICAgICAoc2V0 cSBwYXJzZS1zdGF0ZQogICAgICAgICAgICAgIChwYXJzZS1wYXJ0aWFsLXNleHAgKHBvaW50KQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDErIChwb2ludCkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5pbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Utc3RhdGUpKSkK ICAgICAgdGhlLWxhc3QtcG9zKSkpCgooZGVmdW4gYWRqdXN0LWNsb3NlLXBhcmVuLWZvci1pbmRl bnQgKCkKICAiQWRqdXN0IGEgY2xvc2UgcGFyZW50aGVzZXMgb2YgYSBzZXhwIHNvIGFzCmxpc3At aW5kZW50LWFkanVzdC1wYXJlbnMgY2FuIGluZGVudCB0aGF0IG1hbnkgbGV2ZWxzLgoKSWYgYSBj bG9zZSBwYXJlbiB3YXMgbW92ZWQsIHJldHVybnMgYSB0d28gZWxlbWVudCBsaXN0IG9mIHBvc2l0 aW9uczoKd2hlcmUgdGhlIGNsb3NlIHBhcmVuIHdhcyBtb3ZlZCBmcm9tIGFuZCB0aGUgcG9zaXRp b24gZm9sbG93aW5nIHdoZXJlCml0IG1vdmVkIHRvLgoKSWYgdGhlcmUncyBubyBjbG9zZSBwYXJl bnMgdG8gbW92ZSwgZWl0aGVyIHJldHVybiBuaWwgb3IgYWxsb3cKc2Nhbi1lcnJvciB0byBwcm9w b2dhdGUgdXAuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCAoKGRlbGV0ZWQtcGFyZW4tcG9z CiAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAoYmVnaW5uaW5nLW9mLWxp bmUpCiAgICAgICAgICAgICAoYmFja3dhcmQtc2V4cCkKICAgICAgICAgICAgIDs7IEFjY291bnQg Zm9yIGVkZ2UgY2FzZSB3aGVuIHBvaW50IGhhcyBubyBzZXhwIGJlZm9yZSBpdAogICAgICAgICAg ICAgKGlmIChib2JwKQogICAgICAgICAgICAgICAgIG5pbAogICAgICAgICAgICAgICA7OyBJZiB0 aGUgc2V4cCBhdCBwb2ludCBpcyBhIGxpc3QsCiAgICAgICAgICAgICAgIDs7IGRlbGV0ZSBpdHMg Y2xvc2luZyBwYXJlbgogICAgICAgICAgICAgICAod2hlbiAoZXEgKHNjYW4tbGlzdHMgKHBvaW50 KSAxIDApCiAgICAgICAgICAgICAgICAgICAgICAgICAoc2Nhbi1zZXhwcyAocG9pbnQpIDEpKQog ICAgICAgICAgICAgICAgIChmb3J3YXJkLXNleHApCiAgICAgICAgICAgICAgICAgKGRlbGV0ZS1j aGFyIC0xKQogICAgICAgICAgICAgICAgIChwb2ludCkpKSkpKQogICAgICAod2hlbiBkZWxldGVk LXBhcmVuLXBvcwogICAgICAgIChsZXQgKChzZXhwLXRvLWNsb3NlCiAgICAgICAgICAgICAgIChs YXN0LXNleHAtd2l0aC1yZWxhdGl2ZS1kZXB0aCAocG9pbnQpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ24gKGVuZC1vZi1saW5lKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkpCiAgICAgICAgICAo d2hlbiBzZXhwLXRvLWNsb3NlCiAgICAgICAgICAgIChnb3RvLWNoYXIgc2V4cC10by1jbG9zZSkK ICAgICAgICAgICAgKGZvcndhcmQtc2V4cCkpCiAgICAgICAgICA7OyBOb3RlOiB3aGVuIG5vIHNl eHAtdG8tY2xvc2UgZm91bmQsIGxpbmUgaXMgZW1wdHkuIFNvIHB1dAogICAgICAgICAgOzsgY2xv c2UgcGFyZW4gYWZ0ZXIgcG9pbnQuCiAgICAgICAgICAoaW5zZXJ0ICIpIikKICAgICAgICAgIChs aXN0IGRlbGV0ZWQtcGFyZW4tcG9zIChwb2ludCkpKSkpKSkKCihkZWZ1biBhZGp1c3QtY2xvc2Ut cGFyZW4tZm9yLWRlZGVudCAoKQogICJBZGp1c3QgYSBjbG9zZSBwYXJlbnRoZXNlcyBvZiBhIHNl eHAgc28gYXMKbGlzcC1kZWRlbnQtYWRqdXN0LXBhcmVucyBjYW4gZGVkZW50IHRoYXQgbWFueSBs ZXZlbHMuCgpJZiBhIGNsb3NlIHBhcmVuIHdhcyBtb3ZlZCwgcmV0dXJucyBhIHR3byBlbGVtZW50 IGxpc3Qgb2YgcG9zaXRpb25zOgp3aGVyZSB0aGUgY2xvc2UgcGFyZW4gd2FzIG1vdmVkIGZyb20g YW5kIHRoZSBwb3NpdGlvbiBmb2xsb3dpbmcgd2hlcmUKaXQgbW92ZWQgdG8uCgpJZiB0aGVyZSdz IG5vIGNsb3NlIHBhcmVucyB0byBtb3ZlLCBlaXRoZXIgcmV0dXJuIG5pbCBvciBhbGxvdwpzY2Fu LWVycm9yIHRvIHByb3BvZ2F0ZSB1cC4iCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAobGV0ICgoZGVs ZXRlZC1wYXJlbi1wb3MKICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICh3 aGVuICg8IChwb2ludCkKICAgICAgICAgICAgICAgICAgICAgIChwcm9nbiAodXAtbGlzdCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQpKSkKICAgICAgICAgICAgICAgKGRlbGV0 ZS1jaGFyIC0xKQogICAgICAgICAgICAgICAocG9pbnQpKSkpKQogICAgICAod2hlbiBkZWxldGVk LXBhcmVuLXBvcwogICAgICAgIChsZXQgKChzZXhwLXRvLWNsb3NlCiAgICAgICAgICAgICAgIDs7 IE5lZWRzIHRvIHdvcmsgd2hlbiBkZWRlbnRpbmcgaW4gYW4gZW1wdHkgbGlzdCwgaW4KICAgICAg ICAgICAgICAgOzsgd2hpY2ggY2FzZSBiYWNrd2FyZC1zZXhwIHdpbGwgc2lnbmFsIHNjYW4tZXJy b3IgYW5kCiAgICAgICAgICAgICAgIDs7IHNleHAtdG8tY2xvc2Ugd2lsbCBiZSBuaWwuCiAgICAg ICAgICAgICAgIChjb25kaXRpb24tY2FzZSBuaWwKICAgICAgICAgICAgICAgICAgIChwcm9nbiAo YmFja3dhcmQtc2V4cCkKICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQpKQogICAgICAg ICAgICAgICAgIChzY2FuLWVycm9yIG5pbCkpKSkKICAgICAgICAgIDs7IE1vdmUgcG9pbnQgdG8g d2hlcmUgdG8gaW5zZXJ0IGNsb3NlIHBhcmVuCiAgICAgICAgICAoaWYgc2V4cC10by1jbG9zZQog ICAgICAgICAgICAgIChmb3J3YXJkLXNleHApCiAgICAgICAgICAgIChiYWNrd2FyZC11cC1saXN0 KQogICAgICAgICAgICAoZm9yd2FyZC1jaGFyIDEpKQogICAgICAgICAgKGluc2VydCAiKSIpCiAg ICAgICAgICA7OyBUaGUgaW5zZXJ0aW9uIG1ha2VzIGRlbGV0ZWQtcGFyZW4tcG9zIG9mZiBieSAx CiAgICAgICAgICAobGlzdCAoMSsgZGVsZXRlZC1wYXJlbi1wb3MpCiAgICAgICAgICAgICAgICAo cG9pbnQpKSkpKSkpCgooZGVmdW4gYWRqdXN0LXBhcmVucy1wICgpCiAgIldoZXRoZXIgdG8gYWRq dXN0IHBhcmVucy4iCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAobGV0ICgob3JpZy1wb3MgKHBvaW50 KSkpCiAgICAgIChiYWNrLXRvLWluZGVudGF0aW9uKQogICAgICAoYW5kIChub3QgKHVzZS1yZWdp b24tcCkpCiAgICAgICAgICAgKDw9IG9yaWctcG9zIChwb2ludCkpKSkpKQoKKGRlZnVuIGFkanVz dC1wYXJlbnMtYW5kLWluZGVudCAoYWRqdXN0LWZ1bmN0aW9uIHByZWZpeC1hcmcpCiAgIkFkanVz dCBjbG9zZSBwYXJlbnMgYW5kIGluZGVudCB0aGUgcmVnaW9uIG92ZXIgd2hpY2ggdGhlIHBhcmVu cwptb3ZlZC4iCiAgKGxldCAoKHJlZ2lvbi1vZi1jaGFuZ2UgKGxpc3QgKHBvaW50KSAocG9pbnQp KSkpCiAgICAoY2wtbG9vcCBmb3IgaSBmcm9tIDEgdG8gKG9yIHByZWZpeC1hcmcgMSkKICAgICAg ICAgICAgIHdpdGggZmluaXNoZWQgPSBuaWwKICAgICAgICAgICAgIHdoaWxlIChub3QgZmluaXNo ZWQpCiAgICAgICAgICAgICBkbwogICAgICAgICAgICAgKGNvbmRpdGlvbi1jYXNlIGVycgogICAg ICAgICAgICAgICAgIChsZXQgKChjbG9zZS1wYXJlbi1tb3ZlbWVudAogICAgICAgICAgICAgICAg ICAgICAgICAoZnVuY2FsbCBhZGp1c3QtZnVuY3Rpb24pKSkKICAgICAgICAgICAgICAgICAgIChp ZiBjbG9zZS1wYXJlbi1tb3ZlbWVudAogICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHJlZ2lv bi1vZi1jaGFuZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAobWluIChjYXIg cmVnaW9uLW9mLWNoYW5nZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjYXIgY2xvc2UtcGFyZW4tbW92ZW1lbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2FkciBjbG9zZS1wYXJlbi1tb3ZlbWVudCkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1heCAoY2FkciByZWdpb24tb2YtY2hhbmdlKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhciBjbG9zZS1wYXJlbi1tb3ZlbWVudCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWRyIGNsb3NlLXBhcmVu LW1vdmVtZW50KSkpKQogICAgICAgICAgICAgICAgICAgICAoc2V0cSBmaW5pc2hlZCB0KSkpCiAg ICAgICAgICAgICAgIChzY2FuLWVycm9yIChzZXRxIGZpbmlzaGVkIGVycikpKSkKICAgIChhcHBs eSAnaW5kZW50LXJlZ2lvbiByZWdpb24tb2YtY2hhbmdlKSkKICAoYmFjay10by1pbmRlbnRhdGlv bikpCgooZGVmdW4gbGlzcC1pbmRlbnQtYWRqdXN0LXBhcmVucyAoJm9wdGlvbmFsIHByZWZpeC1h cmcpCiAgIkluZGVudCBMaXNwIGNvZGUgdG8gdGhlIG5leHQgbGV2ZWwgd2hpbGUgYWRqdXN0aW5n IHNleHAgYmFsYW5jZWQKZXhwcmVzc2lvbnMgdG8gYmUgY29uc2lzdGVudC4KClRoaXMgY29tbWFu ZCBjYW4gYmUgYm91bmQgdG8gVEFCIGluc3RlYWQgb2YgaW5kZW50LWZvci10YWItY29tbWFuZC4g SXQKcG90ZW50aWFsbHkgY2FsbHMgdGhlIGxhdHRlci4iCiAgKGludGVyYWN0aXZlICJQIikKICAo aWYgKGFkanVzdC1wYXJlbnMtcCkKICAgICAgKGFkanVzdC1wYXJlbnMtYW5kLWluZGVudCAnYWRq dXN0LWNsb3NlLXBhcmVuLWZvci1pbmRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmVmaXgtYXJnKQogICAgKGluZGVudC1mb3ItdGFiLWNvbW1hbmQgcHJlZml4LWFyZykpKQoK KGRlZnVuIGxpc3AtZGVkZW50LWFkanVzdC1wYXJlbnMgKCZvcHRpb25hbCBwcmVmaXgtYXJnKQog ICJEZWRlbnQgTGlzcCBjb2RlIHRvIHRoZSBwcmV2aW91cyBsZXZlbCB3aGlsZSBhZGp1c3Rpbmcg c2V4cApiYWxhbmNlZCBleHByZXNzaW9ucyB0byBiZSBjb25zaXN0ZW50LgoKQmluZGluZyB0byA8 YmFja3RhYj4gKGllIFNoaWZ0LVRhYikgaXMgYSBzZW5zaWJsZSBjaG9pY2UuIgogIChpbnRlcmFj dGl2ZSAiUCIpCiAgKHdoZW4gKGFkanVzdC1wYXJlbnMtcCkKICAgIChhZGp1c3QtcGFyZW5zLWFu ZC1pbmRlbnQgJ2FkanVzdC1jbG9zZS1wYXJlbi1mb3ItZGVkZW50CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHByZWZpeC1hcmcpKSkKCihhZGQtaG9vayAnZW1hY3MtbGlzcC1tb2RlLWhv b2sKICAgICAgICAgIChsYW1iZGEgKCkKICAgICAgICAgICAgKGxvY2FsLXNldC1rZXkgKGtiZCAi VEFCIikgJ2xpc3AtaW5kZW50LWFkanVzdC1wYXJlbnMpCiAgICAgICAgICAgIChsb2NhbC1zZXQt a2V5IChrYmQgIjxiYWNrdGFiPiIpICdsaXNwLWRlZGVudC1hZGp1c3QtcGFyZW5zKSkpCgoocHJv dmlkZSAnYWRqdXN0LXBhcmVucykKCjs7OyBhZGp1c3QtcGFyZW5zLmVsIGVuZHMgaGVyZQo= --089e012953accefa1404e51b69b3--