From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Tianxiang Xiong Newsgroups: gmane.emacs.devel Subject: Re: Performance issue w/ `cl-loop`s `collect...into` Date: Sun, 8 Apr 2018 12:58:10 -0700 Message-ID: References: <41631665-6cd6-7096-8866-5ab9559a14ef@gmail.com> <1d5b85f5-62cd-f2f3-0b71-9e2a2cf2ef9e@gmail.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="001a11484dc67ea48f05695bb50e" X-Trace: blaine.gmane.org 1523217379 17383 195.159.176.226 (8 Apr 2018 19:56:19 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 8 Apr 2018 19:56:19 +0000 (UTC) Cc: Emacs developers To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Apr 08 21:56:15 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1f5GQ8-0004MV-54 for ged-emacs-devel@m.gmane.org; Sun, 08 Apr 2018 21:56:12 +0200 Original-Received: from localhost ([::1]:51747 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f5GSD-00064w-Qb for ged-emacs-devel@m.gmane.org; Sun, 08 Apr 2018 15:58:21 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:42642) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f5GS6-00064E-B0 for emacs-devel@gnu.org; Sun, 08 Apr 2018 15:58:16 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f5GS5-0000tg-00 for emacs-devel@gnu.org; Sun, 08 Apr 2018 15:58:14 -0400 Original-Received: from mail-wm0-x22a.google.com ([2a00:1450:400c:c09::22a]:39918) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1f5GS4-0000tQ-JJ for emacs-devel@gnu.org; Sun, 08 Apr 2018 15:58:12 -0400 Original-Received: by mail-wm0-x22a.google.com with SMTP id f125so12030477wme.4 for ; Sun, 08 Apr 2018 12:58:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Mjc/6ayetwZakK0peK8vekA0Ue6R00rubc5qRP02Ii4=; b=IY61lppxBs9TxBz46ZZkNlcKaWT5gR0K9mQc6XZfA2OWsZNoo5yu0sWtgpJswZxyha re48vIJa+scglOROVCJi3EDXqeUA55WYFudGyZb6s7/u1f1do11avIZ6erdVZ5yTD8dd +bktdLuWa2ItfIRSCjP/mPN6r1yW4mqG1x5el9yKjAvJRK73mdw9u3mCpk9kwtaq+uEo GeqCzwpYPt2Ja10yfIMr0SgYjDOFBTrETpsnEOMtIqRkOPQVpTeh7zeuTh7AC1vRn5Au bu6YXTbhjJ+l9ncDTLt+UEocB5o2QWU4UsORGG+i9r7WNNPavewwc8QWW30SR4EJLcDD hh1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Mjc/6ayetwZakK0peK8vekA0Ue6R00rubc5qRP02Ii4=; b=nnfbDSYaptGeFFyajYRX9lW16UMnW1MbOdPbSRAvsTPVkuKf+nAuFX7oxZjWZGQbNI SRMxIPoktEOrfA+KUFWJTWdmBjUtB5Gb8aX2nDiuWR1n7Snoz+uPsBapNoO4xKPZVCZt wFCREKG2b4dzO05jLPJvuwidbuPe7GeUoUUbuGvGUKZM2WoL7WZj8R5iLTghWVf4NBZM v/gHsybnNtH6I5brLfsxp5OHBB84ouZYOvVX85t7Y2pH+7nFKquECaKr7gn1BbZj0VLx YS34WN8K5QVd2zRy7LOhwmneQ/829iy2qPBsYW5GX7YqcSVxJEA2MWuGOoVmVXSNKm0F wUUA== X-Gm-Message-State: ALQs6tBV30jxE/co4gsHHD2sA0QIj7QHnm1vygc93HqfLkAxp9Pep6NI kmgqd4LdWIZeun5xwZlqM1IphBY2ZjLdYLjNiYI= X-Google-Smtp-Source: AIpwx4/6NomGynmzayeFkbViDJSe2jg5btvT1gDNdp3NScU437k6IJAekYNbsL3kjolvB/ZgWt5QsDfZS4LQFYrEQUM= X-Received: by 10.80.244.133 with SMTP id s5mr18773679edm.23.1523217491457; Sun, 08 Apr 2018 12:58:11 -0700 (PDT) Original-Received: by 10.80.203.195 with HTTP; Sun, 8 Apr 2018 12:58:10 -0700 (PDT) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22a X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 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" Xref: news.gmane.org gmane.emacs.devel:224435 Archived-At: --001a11484dc67ea48f05695bb50e Content-Type: multipart/alternative; boundary="001a11484dc67ea48c05695bb50c" --001a11484dc67ea48c05695bb50c Content-Type: text/plain; charset="UTF-8" Here's a first attempt at a patch, if someone'd take a look. On Sun, Apr 8, 2018 at 9:07 AM, Stefan Monnier wrote: > > I'd *guess* the fix would be applied in `cl--parse-loop-clause`? > > Perhaps Stefan could give some pointers? > > Maybe I'm one of the least unknowledgeable about this code, but it's > still pretty obscure for me, sorry, > > > Stefan > > > --001a11484dc67ea48c05695bb50c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Here's a first attempt at a patch, if someone'd ta= ke a look.

O= n Sun, Apr 8, 2018 at 9:07 AM, Stefan Monnier <monnier@iro.umontrea= l.ca> wrote:
> I'd *= guess* the fix would be applied in `cl--parse-loop-clause`?
> Perhaps Stefan could give some pointers?

Maybe I'm one of the least unknowledgeable about this code, but = it's
still pretty obscure for me, sorry,


=C2=A0 =C2=A0 =C2=A0 =C2=A0 Stefan



--001a11484dc67ea48c05695bb50c-- --001a11484dc67ea48f05695bb50e Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Optimize-collect.into.patch" Content-Disposition: attachment; filename="0001-Optimize-collect.into.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jfr8bwjy0 RnJvbSBjOTg2Nzk2NzBhZDU0MTAxN2FhYWE5OGE1Y2ZlNGMzNjExNmY3MWM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaWFueGlhbmcgWGlvbmcgPHRpYW54aWFuZy54aW9uZ0BnbWFp bC5jb20+CkRhdGU6IFN1biwgOCBBcHIgMjAxOCAxMjozNjo0MSAtMDcwMApTdWJqZWN0OiBbUEFU Q0hdIE9wdGltaXplIGBjb2xsZWN0Li4uaW50b2AKCkF2b2lkIE8obl4yKSBuY29uYy1pbmcgYnkg a2VlcGluZyB0cmFjayBvZiB0YWlsIG9mIGNvbGxlY3Rpb24uCi0tLQogbGlzcC9lbWFjcy1saXNw L2NsLW1hY3MuZWwgfCAxMjcgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNzMgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvbGlzcC9lbWFjcy1saXNwL2NsLW1hY3MuZWwgYi9saXNwL2VtYWNzLWxp c3AvY2wtbWFjcy5lbAppbmRleCA5NjAwMjMwYzA3Li41MjNiZmM1YTlhIDEwMDY0NAotLS0gYS9s aXNwL2VtYWNzLWxpc3AvY2wtbWFjcy5lbAorKysgYi9saXNwL2VtYWNzLWxpc3AvY2wtbWFjcy5l bApAQCAtMTUzNyw1OSArMTUzNyw2MyBAQCBjbC0tcGFyc2UtbG9vcC1jbGF1c2UKIAkocHVzaCBg KD49IChzZXRxICx0ZW1wICgxLSAsdGVtcCkpIDApIGNsLS1sb29wLWJvZHkpKSkKIAogICAgICAo KG1lbXEgd29yZCAnKGNvbGxlY3QgY29sbGVjdGluZykpCi0gICAgICAobGV0ICgod2hhdCAocG9w IGNsLS1sb29wLWFyZ3MpKQotCSAgICAodmFyIChjbC0tbG9vcC1oYW5kbGUtYWNjdW0gbmlsICdu cmV2ZXJzZSkpKQotCShpZiAoZXEgdmFyIGNsLS1sb29wLWFjY3VtLXZhcikKLQkgICAgKHB1c2gg YChwcm9nbiAocHVzaCAsd2hhdCAsdmFyKSB0KSBjbC0tbG9vcC1ib2R5KQotCSAgKHB1c2ggYChw cm9nbgotICAgICAgICAgICAgICAgICAgIChzZXRxICx2YXIgKG5jb25jICx2YXIgKGxpc3QgLHdo YXQpKSkKLSAgICAgICAgICAgICAgICAgICB0KQotICAgICAgICAgICAgICAgIGNsLS1sb29wLWJv ZHkpKSkpCisgICAgICAobGV0ICgod2hhdCAocG9wIGNsLS1sb29wLWFyZ3MpKSkKKyAgICAgICAg KGNsLW11bHRpcGxlLXZhbHVlLWJpbmQgKHZhciB2YXItdGFpbCkKKyAgICAgICAgICAgIChjbC0t bG9vcC1oYW5kbGUtYWNjdW0gbmlsICducmV2ZXJzZSkKKyAgICAgICAgICAoaWYgKGVxIHZhciBj bC0tbG9vcC1hY2N1bS12YXIpCisgICAgICAgICAgICAgIChwdXNoIGAocHJvZ24gKHB1c2ggLHdo YXQgLHZhcikgdCkgY2wtLWxvb3AtYm9keSkKKyAgICAgICAgICAgIChwdXNoIGAocHJvZ24KKyAg ICAgICAgICAgICAgICAgICAgIChpZiAobnVsbCAsdmFyLXRhaWwpCisgICAgICAgICAgICAgICAg ICAgICAgICAgKHNldHEgLHZhciAobGlzdCAsd2hhdCkgLHZhci10YWlsIChsYXN0ICx2YXIpKQor ICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSAsdmFyLXRhaWwgKHNldGNkciAsdmFyLXRhaWwg KGxpc3QgLHdoYXQpKSkpCisgICAgICAgICAgICAgICAgICAgICB0KQorICAgICAgICAgICAgICAg ICAgY2wtLWxvb3AtYm9keSkpKSkpCiAKICAgICAgKChtZW1xIHdvcmQgJyhuY29uYyBuY29uY2lu ZyBhcHBlbmQgYXBwZW5kaW5nKSkKLSAgICAgIChsZXQgKCh3aGF0IChwb3AgY2wtLWxvb3AtYXJn cykpCi0JICAgICh2YXIgKGNsLS1sb29wLWhhbmRsZS1hY2N1bSBuaWwgJ25yZXZlcnNlKSkpCi0J KHB1c2ggYChwcm9nbgotICAgICAgICAgICAgICAgICAoc2V0cSAsdmFyCi0gICAgICAgICAgICAg ICAgICAgICAgICwoaWYgKGVxIHZhciBjbC0tbG9vcC1hY2N1bS12YXIpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgYChuY29uYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCwo aWYgKG1lbXEgd29yZCAnKG5jb25jIG5jb25jaW5nKSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMnbnJldmVyc2UgIydyZXZlcnNlKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICx3aGF0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHZhcikKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgYCgsKGlmIChtZW1xIHdvcmQgJyhuY29uYyBuY29uY2lu ZykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJ25jb25jICMnYXBwZW5kKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICx2YXIgLHdoYXQpKSkKLSAgICAgICAgICAgICAg ICAgdCkKLSAgICAgICAgICAgICAgY2wtLWxvb3AtYm9keSkpKQorICAgICAgKGxldCAoKHdoYXQg KHBvcCBjbC0tbG9vcC1hcmdzKSkpCisJKGNsLWRlc3RydWN0dXJpbmctYmluZCAodmFyKSAoY2wt LWxvb3AtaGFuZGxlLWFjY3VtIG5pbCAnbnJldmVyc2UpCisgICAgICAgICAgKHB1c2ggYChwcm9n bgorICAgICAgICAgICAgICAgICAgIChzZXRxICx2YXIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAsKGlmIChlcSB2YXIgY2wtLWxvb3AtYWNjdW0tdmFyKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYChuY29uYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLChpZiAo bWVtcSB3b3JkICcobmNvbmMgbmNvbmNpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjJ25yZXZlcnNlICMncmV2ZXJzZSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICx3aGF0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsdmFyKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAoLChpZiAobWVtcSB3b3JkICcobmNvbmMgbmNv bmNpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJ25jb25jICMnYXBw ZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHZhciAsd2hhdCkpKQorICAgICAg ICAgICAgICAgICAgIHQpCisgICAgICAgICAgICAgICAgY2wtLWxvb3AtYm9keSkpKSkKIAogICAg ICAoKG1lbXEgd29yZCAnKGNvbmNhdCBjb25jYXRpbmcpKQotICAgICAgKGxldCAoKHdoYXQgKHBv cCBjbC0tbG9vcC1hcmdzKSkKLQkgICAgKHZhciAoY2wtLWxvb3AtaGFuZGxlLWFjY3VtICIiKSkp Ci0JKHB1c2ggYChwcm9nbiAoY2wtY2FsbGYgY29uY2F0ICx2YXIgLHdoYXQpIHQpIGNsLS1sb29w LWJvZHkpKSkKKyAgICAgIChsZXQgKCh3aGF0IChwb3AgY2wtLWxvb3AtYXJncykpKQorCShjbC1k ZXN0cnVjdHVyaW5nLWJpbmQgKHZhcikgKGNsLS1sb29wLWhhbmRsZS1hY2N1bSAiIiBuaWwgJ3N0 cmluZykKKyAgICAgICAgICAocHVzaCBgKHByb2duIChjbC1jYWxsZiBjb25jYXQgLHZhciAsd2hh dCkgdCkgY2wtLWxvb3AtYm9keSkpKSkKIAogICAgICAoKG1lbXEgd29yZCAnKHZjb25jYXQgdmNv bmNhdGluZykpCi0gICAgICAobGV0ICgod2hhdCAocG9wIGNsLS1sb29wLWFyZ3MpKQotCSAgICAo dmFyIChjbC0tbG9vcC1oYW5kbGUtYWNjdW0gW10pKSkKLQkocHVzaCBgKHByb2duIChjbC1jYWxs ZiB2Y29uY2F0ICx2YXIgLHdoYXQpIHQpIGNsLS1sb29wLWJvZHkpKSkKKyAgICAgIChsZXQgKCh3 aGF0IChwb3AgY2wtLWxvb3AtYXJncykpKQorCShjbC1kZXN0cnVjdHVyaW5nLWJpbmQgKHZhcikg KGNsLS1sb29wLWhhbmRsZS1hY2N1bSBbXSBuaWwgJ3ZlY3RvcikKKyAgICAgICAgICAocHVzaCBg KHByb2duIChjbC1jYWxsZiB2Y29uY2F0ICx2YXIgLHdoYXQpIHQpIGNsLS1sb29wLWJvZHkpKSkp CiAKICAgICAgKChtZW1xIHdvcmQgJyhzdW0gc3VtbWluZykpCi0gICAgICAobGV0ICgod2hhdCAo cG9wIGNsLS1sb29wLWFyZ3MpKQotCSAgICAodmFyIChjbC0tbG9vcC1oYW5kbGUtYWNjdW0gMCkp KQotCShwdXNoIGAocHJvZ24gKGNsLWluY2YgLHZhciAsd2hhdCkgdCkgY2wtLWxvb3AtYm9keSkp KQorICAgICAgKGxldCAoKHdoYXQgKHBvcCBjbC0tbG9vcC1hcmdzKSkpCisJKGNsLWRlc3RydWN0 dXJpbmctYmluZCAodmFyKSAoY2wtLWxvb3AtaGFuZGxlLWFjY3VtIDAgbmlsICdudW1iZXIpCisg ICAgICAgICAgKHB1c2ggYChwcm9nbiAoY2wtaW5jZiAsdmFyICx3aGF0KSB0KSBjbC0tbG9vcC1i b2R5KSkpKQogCiAgICAgICgobWVtcSB3b3JkICcoY291bnQgY291bnRpbmcpKQotICAgICAgKGxl dCAoKHdoYXQgKHBvcCBjbC0tbG9vcC1hcmdzKSkKLQkgICAgKHZhciAoY2wtLWxvb3AtaGFuZGxl LWFjY3VtIDApKSkKLQkocHVzaCBgKHByb2duIChpZiAsd2hhdCAoY2wtaW5jZiAsdmFyKSkgdCkg Y2wtLWxvb3AtYm9keSkpKQorICAgICAgKGxldCAoKHdoYXQgKHBvcCBjbC0tbG9vcC1hcmdzKSkp CisJKGNsLWRlc3RydWN0dXJpbmctYmluZCAodmFyKSAoY2wtLWxvb3AtaGFuZGxlLWFjY3VtIDAg bmlsICdudW1iZXIpCisgICAgICAgICAgKHB1c2ggYChwcm9nbiAoaWYgLHdoYXQgKGNsLWluY2Yg LHZhcikpIHQpIGNsLS1sb29wLWJvZHkpKSkpCiAKICAgICAgKChtZW1xIHdvcmQgJyhtaW5pbWl6 ZSBtaW5pbWl6aW5nIG1heGltaXplIG1heGltaXppbmcpKQogICAgICAgKHB1c2ggYChwcm9nbiAs KG1hY3JvZXhwLWxldDIgbWFjcm9leHAtY29weWFibGUtcCB0ZW1wCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocG9wIGNsLS1sb29wLWFyZ3MpCi0gICAgICAgICAgICAgICAg ICAgICAgIChsZXQqICgodmFyIChjbC0tbG9vcC1oYW5kbGUtYWNjdW0gbmlsKSkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChmdW5jIChpbnRlcm4gKHN1YnN0cmluZyAoc3ltYm9sLW5h bWUgd29yZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwIDMpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgYChzZXRxICx2YXIgKGlm ICx2YXIgKCxmdW5jICx2YXIgLHRlbXApICx0ZW1wKSkpKQorICAgICAgICAgICAgICAgICAgICAg ICAobGV0ICgoZnVuYyAoaW50ZXJuIChzdWJzdHJpbmcgKHN5bWJvbC1uYW1lIHdvcmQpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDMpKSkp CisgICAgICAgICAgICAgICAgICAgICAgICAgKGNsLWRlc3RydWN0dXJpbmctYmluZCAodmFyKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2wtLWxvb3AtaGFuZGxlLWFjY3VtIG5pbCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGAoc2V0cSAsdmFyIChpZiAsdmFyICgsZnVuYyAs dmFyICx0ZW1wKSAsdGVtcCkpKSkpCiAgICAgICAgICAgICAgICAgICAgIHQpCiAgICAgICAgICAg ICBjbC0tbG9vcC1ib2R5KSkKIApAQCAtMTcyNiwyMiArMTczMCwzNyBAQCBjbC0tbG9vcC1sZXQK ICAgICAgIGAoLChpZiBwYXIgJ2xldCAnbGV0KikKICAgICAgICAgLChuY29uYyAobnJldmVyc2Ug dGVtcHMpIChucmV2ZXJzZSBuZXcpKSAsQGJvZHkpKSkpCiAKLShkZWZ1biBjbC0tbG9vcC1oYW5k bGUtYWNjdW0gKGRlZiAmb3B0aW9uYWwgZnVuYykgOyB1c2VzIGxvb3AtKgotICAoaWYgKGVxIChj YXIgY2wtLWxvb3AtYXJncykgJ2ludG8pCisoZGVmdW4gY2wtLWxvb3AtaGFuZGxlLWFjY3VtIChk ZWYgJm9wdGlvbmFsIGZ1bmMgdHlwZSkgOyB1c2VzIGxvb3AtKgorICAoc2V0cSB0eXBlIChvciB0 eXBlICdsaXN0KSkKKyAgKGxldCAoKGludG9wIChlcSAoY2FyIGNsLS1sb29wLWFyZ3MpICdpbnRv KSkpCisgICAgKGNvbmQKKyAgICAgKChhbmQgaW50b3AgKGVxICdsaXN0IHR5cGUpKQorICAgICAg KGxldCogKCh2YXIgKGNsLS1wb3AyIGNsLS1sb29wLWFyZ3MpKQorICAgICAgICAgICAgICh2YXIt dGFpbCAoZ2Vuc3ltIChjb25jYXQgKHN5bWJvbC1uYW1lIHZhcikgIi10YWlsLSIpKSkpCisgICAg ICAgIChpZiAobWVtcSB2YXIgY2wtLWxvb3AtYWNjdW0tdmFycykKKyAgICAgICAgICAgIChwdXNo IGAoKCx2YXItdGFpbCAsKGxhc3QgZGVmKSkpIGNsLS1sb29wLWJpbmRpbmdzKQorICAgICAgICAg IChwdXNoIGAoKCx2YXIgLGRlZikpIGNsLS1sb29wLWJpbmRpbmdzKQorICAgICAgICAgIChwdXNo IGAoKCx2YXItdGFpbCAsKGxhc3QgZGVmKSkpIGNsLS1sb29wLWJpbmRpbmdzKQorICAgICAgICAg IChwdXNoIHZhciBjbC0tbG9vcC1hY2N1bS12YXJzKSkKKyAgICAgICAgKGxpc3QgdmFyIHZhci10 YWlsKSkpCisKKyAgICAgKChhbmQgaW50b3AgKG5vdCAoZXEgJ2xpc3QgdHlwZSkpKQogICAgICAg KGxldCAoKHZhciAoY2wtLXBvcDIgY2wtLWxvb3AtYXJncykpKQotCShvciAobWVtcSB2YXIgY2wt LWxvb3AtYWNjdW0tdmFycykKLQkgICAgKHByb2duIChwdXNoIChsaXN0IChsaXN0IHZhciBkZWYp KSBjbC0tbG9vcC1iaW5kaW5ncykKLQkJICAgKHB1c2ggdmFyIGNsLS1sb29wLWFjY3VtLXZhcnMp KSkKLQl2YXIpCi0gICAgKG9yIGNsLS1sb29wLWFjY3VtLXZhcgotCShwcm9nbgotCSAgKHB1c2gg KGxpc3QgKGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgY2wtLWxvb3AtYWNjdW0t dmFyIChtYWtlLXN5bWJvbCAiLS1jbC12YXItLSIpKQotICAgICAgICAgICAgICAgICAgICAgICBk ZWYpKQotICAgICAgICAgICAgICAgIGNsLS1sb29wLWJpbmRpbmdzKQotCSAgKHNldHEgY2wtLWxv b3AtcmVzdWx0IChpZiBmdW5jIChsaXN0IGZ1bmMgY2wtLWxvb3AtYWNjdW0tdmFyKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLS1sb29wLWFjY3VtLXZhcikpCi0JICBjbC0t bG9vcC1hY2N1bS12YXIpKSkpCisgICAgICAgIChvciAobWVtcSB2YXIgY2wtLWxvb3AtYWNjdW0t dmFycykKKyAgICAgICAgICAgIChwcm9nbiAocHVzaCBgKCgsdmFyICxkZWYpKSBjbC0tbG9vcC1i aW5kaW5ncykKKyAgICAgICAgICAgICAgICAgICAocHVzaCB2YXIgY2wtLWxvb3AtYWNjdW0tdmFy cykpKQorICAgICAgICAobGlzdCB2YXIpKSkKKworICAgICAodCAoaWYgY2wtLWxvb3AtYWNjdW0t dmFyCisgICAgICAgICAgICAobGlzdCBjbC0tbG9vcC1hY2N1bS12YXIpCisgICAgICAgICAgKHBy b2duCisgICAgICAgICAgICAocHVzaCAobGlzdCAobGlzdAorICAgICAgICAgICAgICAgICAgICAg ICAgIChzZXRxIGNsLS1sb29wLWFjY3VtLXZhciAobWFrZS1zeW1ib2wgIi0tY2wtdmFyLS0iKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICBkZWYpKQorICAgICAgICAgICAgICAgICAgY2wtLWxv b3AtYmluZGluZ3MpCisgICAgICAgICAgICAoc2V0cSBjbC0tbG9vcC1yZXN1bHQgKGlmIGZ1bmMg KGxpc3QgZnVuYyBjbC0tbG9vcC1hY2N1bS12YXIpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjbC0tbG9vcC1hY2N1bS12YXIpKQorICAgICAgICAgICAgKGxpc3QgY2wtLWxv b3AtYWNjdW0tdmFyKSkpKSkpKQogCiAoZGVmdW4gY2wtLWxvb3AtYnVpbGQtYW5kcyAoY2xhdXNl cykKICAgIlJldHVybiB2YXJpb3VzIHJlcHJlc2VudGF0aW9ucyBvZiAoYW5kIC4gQ0xBVVNFUyku Ci0tIAoyLjE0LjMKCg== --001a11484dc67ea48f05695bb50e--