From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id DE13B3858C2C for ; Thu, 9 Sep 2021 17:28:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DE13B3858C2C Received: from mail-il1-f199.google.com (mail-il1-f199.google.com [209.85.166.199]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-439-z3Qlx49XMy-MzgJMCCouaQ-1; Thu, 09 Sep 2021 13:28:33 -0400 X-MC-Unique: z3Qlx49XMy-MzgJMCCouaQ-1 Received: by mail-il1-f199.google.com with SMTP id l4-20020a92d8c40000b02902242b6ea4b3so2679695ilo.8 for ; Thu, 09 Sep 2021 10:28:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=MkzgHAgRrSTISokJP6mQn7oLsvRPbfJc3TWDYfKqjVE=; b=lX9PDtBwRzptwuRRrkxQlqBtSRmb8crn4FyIl+9A9A5ZKIWWN98xTc3lCCQJk7YnV1 WZ+ajQq6dZ+V2o2tz2Z9L9mTwMHWeuP9kXwawvLgo7hNzVTtHE9tClEC5zgK9d2YfWh3 bGy6TvIceiu1uixDl0G0ujy3W/BLuw/3zLXKHU2gBGOg8CsRO0jyRCiZQ2sRJrvNOZCP DjxY0OpjLYohOiuctCL0Z8zASfJ8KHSbSPRXm2hgeZuZhYSJq3vWAbM/ZbHLYvsyiojf mBFiPh+FpqQZ2z2ekth0JA0WgPrgIZ7ra7FiAwcj8StF7arkYj7T79EeaH8s9RjquP3w p+1g== X-Gm-Message-State: AOAM530choAuINJ0aq8jxiP91WiLkmv3fiper1gDsC+Lu97U4tSuSRHv qJLsg9/HEcj2L/UgRtOBzB8W2vR/3iSrQYqPLLWITvWVWgUe8t/pdKV0ozH0yLuO016fB4COP2l BrS0gCwsx3+ubb3wsHJp2m/JnQXgKY3/GsL/P1EfBjA== X-Received: by 2002:a92:1306:: with SMTP id 6mr3051548ilt.183.1631208512936; Thu, 09 Sep 2021 10:28:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw5AFLiUP0FeBEjZ6n4LXUWvgJ2RAyTW4SnLby9N8TKBeSSHjM1J9HobUOpC9MGAO/NR3nb6EJrRxJQwzhFnpY= X-Received: by 2002:a92:1306:: with SMTP id 6mr3051540ilt.183.1631208512730; Thu, 09 Sep 2021 10:28:32 -0700 (PDT) MIME-Version: 1.0 References: <20210826210213.GM416@redhat.com> In-Reply-To: From: Noah Sanci Date: Thu, 9 Sep 2021 13:28:21 -0400 Message-ID: Subject: Re: [Bug debuginfod/28034] client-side %-escape url characters To: Mark Wielaard Cc: "Frank Ch. Eigler" , elfutils-devel@sourceware.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000f5858705cb935329" X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_BADIPHTTP, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Sep 2021 17:28:42 -0000 --000000000000f5858705cb935329 Content-Type: text/plain; charset="UTF-8" Hello, The attached patch %-escapes debuginfod url characters, then unescapes only '/' characters. Previously characters such as '+' were not escaped and caused improper escaping further on in handler_cb. https://sourceware.org/bugzilla/show_bug.cgi?id=28034. On Wed, Sep 8, 2021 at 9:38 AM Mark Wielaard wrote: > /* Initialize each handle. */ > for (int i = 0; i < num_urls; i++) > > So you only need to escape once. You of course then need to make sure > the escaped_string is freed after the loop. Added > We already check that the first char is a '/'. It seems silly to curl > escape that one and then unescape it again. So maybe curl_easy_escape > (data[i].handle, filename + 1, 0) and then change the snprintf pattern > to "%s/%s/%s/%s"? > ^ the slash got readded here. Added > The strlen inside the while loop can also be done outside and then > calculated instead of running strlen on the tail every time. Added > Lastly I assume there are already testcases that cover this > functionality? Just wanting to know how you tested it. Previously, with run-debuginfod-find.sh the test was embedded within other tests. Now the test is independent and has been added to the list of TESTS. Regards, Noah Sanci --000000000000f5858705cb935329 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-debuginfod-PR28034-Percent-escape-debuginfod-urls.patch" Content-Disposition: attachment; filename="0001-debuginfod-PR28034-Percent-escape-debuginfod-urls.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ktd7d0p30 RnJvbSBhMDgwZmQzZmViNzlkNjAxZDg2YzU0Y2Y0Nzk1NjJkNmQ1YmVkMzk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIFNhbmNpIDxuc2FuY2lAcmVkaGF0LmNvbT4KRGF0ZTog VGh1LCA5IFNlcCAyMDIxIDEzOjEwOjMzIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gZGVidWdpbmZv ZDogUFIyODAzNCAtIFBlcmNlbnQgZXNjYXBlIGRlYnVnaW5mb2QgdXJscwoKV2hlbiByZXF1ZXN0 aW5nIHNvbWUgc291cmNlIGZpbGVzLCBzb21lIFVSTC1pbmNvbnZlbmllbnQgY2hhcnMKc29tZXRp bWVzIHBvcCB1cCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byAnKycsICdeJywgYW5kICcm Jy4KRXhhbXBsZSBmcm9tIGYzMyBsaWJzdGRjKys6CiAvYnVpbGRpZC80NGQ4NDg1Y2I3NTUxMmMy Y2E1YzhmNzBhZmJkNDc1Y2FlMzBhZjRmL3NvdXJjZS91c3Ivc3JjL2RlYnVnCiAvZ2NjLTEwLjMu MS0xLmZjMzMueDg2XzY0L29iai14ODZfNjQtcmVkaGF0LWxpbnV4L3g4Nl82NC1yZWRoYXQtbGlu dXgvCiBsaWJzdGRjKystdjMvc3JjL2MrKzExLy4uLy4uLy4uLy4uLy4uL2xpYnN0ZGMrKy12My9z cmMvYysrMTEvCiBjb25kaXRpb25fdmFyaWFibGUuY2MKQXMgdGhpcyBVUkwgaXMgcGFzc2VkIGlu dG8gZGVidWdpbmZvZCdzIGhhbmRsZXJfY2IsIGl0IGFwcGVhcnMgdGhhdCB0aGUKKyBzaWducyBh cmUgaGVscGZ1bGx5IHVuZXNjYXBlZCB0byBzcGFjZXMgYnkgbGlibWljcm9odHRwZCwgd2hpY2gK J2NvdXJzZSBicmVha3MgZXZlcnl0aGluZy4KVG8gY29tYmF0IHRoaXMsIGJlZm9yZSBxdWVyeWlu ZyB0aGUgZGVidWdpbmZvZCBkYWVtb24sIGNsaWVudHMgbm93ICUKZXNjYXBlIHRoZSBzb3VyY2Ug ZmlsZW5hbWUuIFRoaXMgY29udmVydHMgbWFueSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycwppbnRv IHRoZWlyICUtY29kZSBmb3JtYXQsIGluY2x1ZGluZyAnLycgdG8gJTJGLiBXZSB3YW50IHRvIHBy ZXNlcnZlIHRoZQonLycgaW4gdGhlIHVybCwgc28gYWZ0ZXIgY29udmVyc2lvbiByZXBsYWNlICUy RnMgd2l0aCBhICcvJy4KCmh0dHBzOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcu Y2dpP2lkPTI4MDM0CgpTaWduZWQtb2ZmLWJ5OiBOb2FoIFNhbmNpIDxuc2FuY2lAcmVkaGF0LmNv bT4KLS0tCiBkZWJ1Z2luZm9kL2RlYnVnaW5mb2QtY2xpZW50LmMgICAgICAgICB8IDE4ICsrKysr Ky0tCiB0ZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICB8ICA3ICstLQogdGVz dHMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgMiArCiB0ZXN0cy9ydW4tZGVi dWdpbmZvZC1wZXJjZW50LWVzY2FwZS5zaCB8IDYwICsrKysrKysrKysrKysrKysrKysrKysrKysr CiA0IGZpbGVzIGNoYW5nZWQsIDc5IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA3NTUgdGVzdHMvcnVuLWRlYnVnaW5mb2QtcGVyY2VudC1lc2NhcGUuc2gKCmRp ZmYgLS1naXQgYS9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QtY2xpZW50LmMgYi9kZWJ1Z2luZm9kL2Rl YnVnaW5mb2QtY2xpZW50LmMKaW5kZXggZDQxNzIzY2UuLjc3Y2E4NDRiIDEwMDY0NAotLS0gYS9k ZWJ1Z2luZm9kL2RlYnVnaW5mb2QtY2xpZW50LmMKKysrIGIvZGVidWdpbmZvZC9kZWJ1Z2luZm9k LWNsaWVudC5jCkBAIC04ODMsNiArODgzLDEwIEBAIGRlYnVnaW5mb2RfcXVlcnlfc2VydmVyIChk ZWJ1Z2luZm9kX2NsaWVudCAqYywKICAgICAgIGRhdGFbaV0uZXJyYnVmWzBdID0gJ1wwJzsKICAg ICB9CiAKKyAgY2hhciAqZXNjYXBlZF9zdHJpbmc7CisgIGlmIChmaWxlbmFtZSkKKyAgICBlc2Nh cGVkX3N0cmluZyA9IGN1cmxfZWFzeV9lc2NhcGUoJnRhcmdldF9oYW5kbGUsIGZpbGVuYW1lKzEs IDApOworCiAgIC8qIEluaXRpYWxpemUgZWFjaCBoYW5kbGUuICAqLwogICBmb3IgKGludCBpID0g MDsgaSA8IG51bV91cmxzOyBpKyspCiAgICAgewpAQCAtOTA0LDE2ICs5MDgsMjMgQEAgZGVidWdp bmZvZF9xdWVyeV9zZXJ2ZXIgKGRlYnVnaW5mb2RfY2xpZW50ICpjLAogICAgICAgaWYgKGZpbGVu YW1lKSAvKiBtdXN0IHN0YXJ0IHdpdGggLyAqLwogICAgICAgICB7CiAgICAgICAgICAgLyogUFIy ODAzNCBlc2NhcGUgY2hhcmFjdGVycyBpbiBjb21wbGV0ZWQgdXJsIHRvICVoaCBmb3JtYXQuICov Ci0gICAgICAgICAgY2hhciAqZXNjYXBlZF9zdHJpbmc7Ci0gICAgICAgICAgZXNjYXBlZF9zdHJp bmcgPSBjdXJsX2Vhc3lfZXNjYXBlKGRhdGFbaV0uaGFuZGxlLCBmaWxlbmFtZSwgMCk7CisgICAg ICAgICAgY2hhciAqbG9jID0gZXNjYXBlZF9zdHJpbmc7CiAgICAgICAgICAgaWYgKCFlc2NhcGVk X3N0cmluZykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmMgPSAtRU5PTUVNOwogICAg ICAgICAgICAgICBnb3RvIG91dDI7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICBzaXplX3Qg ZXNjYXBlZF9zdHJsZW4gPSBzdHJsZW4oZXNjYXBlZF9zdHJpbmcpOworICAgICAgICAgIHdoaWxl ICgobG9jID0gc3Ryc3RyKGxvYywgIiUyRiIpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBsb2NbMF0gPSAnLyc7CisgICAgICAgICAgICAgICAgLy8gcHVsbCB0aGUgc3RyaW5nIGJh Y2sgYWZ0ZXIgcmVwbGFjZW1lbnQKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGxvYysxLCBsb2Mr Myxlc2NhcGVkX3N0cmxlbiAtIChsb2MgLSBlc2NhcGVkX3N0cmluZyArIDIpICk7CisgICAgICAg ICAgICAgICAgZXNjYXBlZF9zdHJsZW4gLT0yOworICAgICAgICAgICAgfQogICAgICAgICAgIHNu cHJpbnRmKGRhdGFbaV0udXJsLCBQQVRIX01BWCwgIiVzLyVzLyVzLyVzIiwgc2VydmVyX3VybCwK ICAgICAgICAgICAgICAgICAgICBidWlsZF9pZF9ieXRlcywgdHlwZSwgZXNjYXBlZF9zdHJpbmcp OwotICAgICAgICAgIGN1cmxfZnJlZShlc2NhcGVkX3N0cmluZyk7CiAgICAgICAgIH0KICAgICAg IGVsc2UKICAgICAgICAgc25wcmludGYoZGF0YVtpXS51cmwsIFBBVEhfTUFYLCAiJXMvJXMvJXMi LCBzZXJ2ZXJfdXJsLCBidWlsZF9pZF9ieXRlcywgdHlwZSk7CkBAIC05NTMsNiArOTY0LDcgQEAg ZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIgKGRlYnVnaW5mb2RfY2xpZW50ICpjLAogICAgICAgY3Vy bF9tdWx0aV9hZGRfaGFuZGxlKGN1cmxtLCBkYXRhW2ldLmhhbmRsZSk7CiAgICAgfQogCisgIGlm IChmaWxlbmFtZSkgY3VybF9mcmVlKGVzY2FwZWRfc3RyaW5nKTsKICAgLyogUXVlcnkgc2VydmVy cyBpbiBwYXJhbGxlbC4gICovCiAgIGlmICh2ZmQgPj0gMCkKICAgICBkcHJpbnRmICh2ZmQsICJx dWVyeSAlZCB1cmxzIGluIHBhcmFsbGVsXG4iLCBudW1fdXJscyk7CmRpZmYgLS1naXQgYS90ZXN0 cy9DaGFuZ2VMb2cgYi90ZXN0cy9DaGFuZ2VMb2cKaW5kZXggODVkY2E0NDIuLmI4NGY0MjBjIDEw MDY0NAotLS0gYS90ZXN0cy9DaGFuZ2VMb2cKKysrIGIvdGVzdHMvQ2hhbmdlTG9nCkBAIC0xMzIs MTEgKzEzMiw4IEBACiAyMDIxLTA3LTE2ICBOb2FoIFNhbmNpICA8bnNhbmNpQHJlZGhhdC5jb20+ CiAKIAlQUjI4MDM0Ci0JKiBydW4tZGVidWdpbmZvZC1maW5kLnNoOiBBZGRlZCBhIHRlc3QgZW5z dXJpbmcgZmlsZXMgd2l0aCAlCi0JZXNjYXBhYmxlIGNoYXJhY3RlcnMgaW4gdGhlaXIgcGF0aHMg YXJlIGFjY2Vzc2libGUuIFRoZSB0ZXN0Ci0JaXRzZWxmIGlzIGNoYW5naW5nIHRoZSBuYW1lIG9m IGEgYmluYXJ5IGtub3duIHByZXZpb3VzbHkgYXMgcHJvZyB0bwotCXArciVvJGcuIEdlbmVyYWwg b3BlcmF0aW9ucyBzdWNoIGFzIGFjY2Vzc2luZyBwK3IlbyRnIGFjdHMgYXMgdGhlCi0JdGVzdCBm b3IgJS1lc2NhcGUgY2hlY2tpbmcuCisJKiBydW4tZGVidWdpbmZvZC1wZXJjZW50LWVzY2FwZS5z aDogQWRkZWQgYSB0ZXN0IGVuc3VyaW5nIGZpbGVzIHdpdGggJQorCWVzY2FwYWJsZSBjaGFyYWN0 ZXJzIGluIHRoZWlyIHBhdGhzIGFyZSBhY2Nlc3NpYmxlLgogCiAyMDIxLTA3LTIxICBOb2FoIFNh bmNpIDxuc2FuY2lAcmVkaGF0LmNvbT4KIApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0g Yi90ZXN0cy9NYWtlZmlsZS5hbQppbmRleCBjNTg2NDIyZS4uZWUxN2QzYjEgMTAwNjQ0Ci0tLSBh L3Rlc3RzL01ha2VmaWxlLmFtCisrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0yMzEsNiArMjMx LDcgQEAgVEVTVFMgKz0gcnVuLWRlYnVnaW5mb2QtZGxvcGVuLnNoIFwKIAkgcnVuLWRlYnVnaW5m b2QtZmVkZXJhdGlvbi1zcWxpdGUuc2ggXAogCSBydW4tZGVidWdpbmZvZC1mZWRlcmF0aW9uLWxp bmsuc2ggXAogCSBydW4tZGVidWdpbmZvZC1mZWRlcmF0aW9uLW1ldHJpY3Muc2ggXAorICAgICAg ICAgcnVuLWRlYnVnaW5mb2QtcGVyY2VudC1lc2NhcGUuc2ggXAogCSBydW4tZGVidWdpbmZvZC14 LWZvcndhcmRlZC1mb3Iuc2gKIGVuZGlmCiBlbmRpZgpAQCAtNTE1LDYgKzUxNiw3IEBAIEVYVFJB X0RJU1QgPSBydW4tYXJleHRyYWN0LnNoIHJ1bi1hcnN5bXRlc3Quc2ggcnVuLWFyLnNoIFwKIAkg ICAgIHJ1bi1kZWJ1Z2luZm9kLWFyY2hpdmUtZ3Jvb20uc2ggXAogCSAgICAgcnVuLWRlYnVnaW5m b2QtYXJjaGl2ZS1yZW5hbWUuc2ggXAogICAgICAgICAgICAgIHJ1bi1kZWJ1Z2luZm9kLWFyY2hp dmUtdGVzdC5zaCBcCisgICAgICAgICAgICAgcnVuLWRlYnVnaW5mb2QtcGVyY2VudC1lc2NhcGUu c2ggXAogCSAgICAgZGVidWdpbmZvZC1ycG1zL2ZlZG9yYTMwL2hlbGxvMi0xLjAtMi5zcmMucnBt IFwKIAkgICAgIGRlYnVnaW5mb2QtcnBtcy9mZWRvcmEzMC9oZWxsbzItMS4wLTIueDg2XzY0LnJw bSBcCiAJICAgICBkZWJ1Z2luZm9kLXJwbXMvZmVkb3JhMzAvaGVsbG8yLWRlYnVnaW5mby0xLjAt Mi54ODZfNjQucnBtIFwKZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi1kZWJ1Z2luZm9kLXBlcmNlbnQt ZXNjYXBlLnNoIGIvdGVzdHMvcnVuLWRlYnVnaW5mb2QtcGVyY2VudC1lc2NhcGUuc2gKbmV3IGZp bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAuLmY3ZDhkYzY2Ci0tLSAvZGV2L251bGwKKysr IGIvdGVzdHMvcnVuLWRlYnVnaW5mb2QtcGVyY2VudC1lc2NhcGUuc2gKQEAgLTAsMCArMSw2MCBA QAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBSZWQg SGF0LCBJbmMuCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVsZnV0aWxzLgorIworIyBUaGlzIGZp bGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorIworIyBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCisuICRzcmNkaXIvZGVidWdpbmZvZC1zdWJyLnNoICAjIGluY2x1ZGVzIHNldCAtZQorIyBm b3IgdGVzdCBjYXNlIGRlYnVnZ2luZywgdW5jb21tZW50Ogorc2V0IC14Cit1bnNldCBWQUxHUklO RF9DTUQKKyMgVGhpcyB2YXJpYWJsZSBpcyBlc3NlbnRpYWwgYW5kIGVuc3VyZXMgbm8gdGltZS1y YWNlIGZvciBjbGFpbWluZyBwb3J0cyBvY2N1cnMKKyMgc2V0IGJhc2UgdG8gYSB1bmlxdWUgbXVs dGlwbGUgb2YgMTAwIG5vdCB1c2VkIGluIGFueSBvdGhlciAncnVuLWRlYnVnaW5mb2QtKicgdGVz dAorYmFzZT0xMDAwMAorZ2V0X3BvcnRzCitEQj0ke1BXRH0vLmRlYnVnaW5mb2RfdG1wLnNxbGl0 ZQordGVtcGZpbGVzICREQgorbWtkaXIgRgorZW52IExEX0xJQlJBUllfUEFUSD0kbGRwYXRoICR7 YWJzX2J1aWxkZGlyfS8uLi9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QgJFZFUkJPU0UgXAorICAgIC1G IC1SIC1kICREQiAtcCAkUE9SVDEgLXQwIC1nMCAtdiBSICR7UFdEfS9GID4gdmxvZyRQT1JUMSAy PiYxICYKK1BJRDE9JCEKK3RlbXBmaWxlcyB2bG9nJFBPUlQxCitlcnJmaWxlcyB2bG9nJFBPUlQx CisjIFNlcnZlciBtdXN0IGJlY29tZSByZWFkeQord2FpdF9yZWFkeSAkUE9SVDEgJ3JlYWR5JyAx CisjIEJlIHBhdGllbnQgd2hlbiBydW4gb24gYSBidXN5IG1hY2hpbmUgdGhpbmdzIG1pZ2h0IHRh a2UgYSBiaXQuCisKKyMgQnVpbGQgYSBub24tc3RyaXBwZWQgYmluYXJ5CitlY2hvICJpbnQgbWFp bigpIHsgcmV0dXJuIDA7IH0iID4gJHtQV0R9L0YvcCsrclwkXCNvXl5nLmMKK2djYyAtV2wsLS1i dWlsZC1pZCAtZyAtbyAke1BXRH0vRi9wKytyXCRcI29eXmcgJHtQV0R9L0YvcCsrclwkXCNvXl5n LmMKK0JVSUxESUQ9YGVudiBMRF9MSUJSQVJZX1BBVEg9JGxkcGF0aCAke2Fic19idWlsZGRpcn0v Li4vc3JjL3JlYWRlbGYgXAorICAgICAgICAgIC1hICR7UFdEfS9GL3ArK3JcXCRcI29eXmcgfCBn cmVwICdCdWlsZCBJRCcgfCBjdXQgLWQgJyAnIC1mIDdgCit0ZW1wZmlsZXMgJHtQV0R9L0YvcCsr clwkXCNvXl5nLmMgJHtQV0R9L0YvcCsrclwkXCNvXl5nCitraWxsIC1VU1IxICRQSUQxCisjIE5v dyB0aGVyZSBzaG91bGQgYmUgMSBmaWxlcyBpbiB0aGUgaW5kZXgKK3dhaXRfcmVhZHkgJFBPUlQx ICd0aHJlYWRfd29ya190b3RhbHtyb2xlPSJ0cmF2ZXJzZSJ9JyAxCit3YWl0X3JlYWR5ICRQT1JU MSAndGhyZWFkX3dvcmtfcGVuZGluZ3tyb2xlPSJzY2FuIn0nIDAKK3dhaXRfcmVhZHkgJFBPUlQx ICd0aHJlYWRfYnVzeXtyb2xlPSJzY2FuIn0nIDAKK3JtIC1yZiAkREVCVUdJTkZPRF9DQUNIRV9Q QVRIICMgY2xlYW4gaXQgZnJvbSBwcmV2aW91cyB0ZXN0cworbHMgRgorZW52IERFQlVHSU5GT0Rf Q0FDSEVfUEFUSD0ke1BXRH0vLmNsaWVudF9jYWNoZSBERUJVR0lORk9EX1VSTFM9Imh0dHA6Ly8x MjcuMC4wLjE6JFBPUlQxIiBcCisgICAgTERfTElCUkFSWV9QQVRIPSRsZHBhdGggJHthYnNfdG9w X2J1aWxkZGlyfS9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QtZmluZCAtdnZ2IHNvdXJjZSBGL3ArK3Jc JFwjb15eZyAke2Fic19idWlsZGRpcn0vRi9wKytyXCRcI29eXmcuYyA+IHZsb2cxIDI+JjEgfHwg dHJ1ZQordGVtcGZpbGVzIHZsb2cxCitncmVwICdGL3AlMkIlMkJyJTI0JTIzbyU1RSU1RWcuYycg dmxvZzEKKwora2lsbCAkUElEMQord2FpdCAkUElEMQorUElEMT0wCitleGl0IDAKLS0gCjIuMzEu MQoK --000000000000f5858705cb935329--