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 [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id F0967384A88A for ; Fri, 10 Sep 2021 18:22:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F0967384A88A Received: from mail-il1-f198.google.com (mail-il1-f198.google.com [209.85.166.198]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-18-56QbeFjzNeSX-bretXpjwg-1; Fri, 10 Sep 2021 14:22:12 -0400 X-MC-Unique: 56QbeFjzNeSX-bretXpjwg-1 Received: by mail-il1-f198.google.com with SMTP id j17-20020a926e11000000b0022487646515so5453153ilc.14 for ; Fri, 10 Sep 2021 11:22:12 -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=XM+NiKDxOyss7ScrJfulSh1wIC2hi6QaBzBKvTj9NBI=; b=aKPac5IK7xQZIu2ppcDoNfc3qG2wpb1D+Bo1ssYCIqgRu0a/1a/G5U8xsxSlFVMrE2 QL3+zCdCv8gpEqVr1YbwfXlMdGKoZ4MgXFeO0QvkuP4nvdtbvtFgPJvvsTkgtiSIG6fI 9pmYLAvCGy481dAFPFVaWINXX7gGvzwfCziiXsq4xUzaDq2aO5bWsN73RD2CBrWTnWSJ I89zp7oUx3Dzg+6SJ6q6O/oJNWrR5qH056UnFnbwmVEN1sgGN7DepOH1TSeXxVqB9Am7 Q7L7g7lfjsKtFd5WZNlw4sVzIsNX8/RgzIS/0MszLAg8NpPjvSETF6S8WbWjykfTTXHv TT4A== X-Gm-Message-State: AOAM530K0pyEbP/5XTHDp00CNP9VvsmjhHjXZOHRCvqeVADUVtpm+BMl epWwFdEIkZrGidI7x2KvruEVYnILPP5xEZAcWrElhvYEjPtPWGfr1nAYO+LpcXXegAB9TvtZGyq X9gY9mdFac8mvUuLZcwBEmeeWZ3w5XoM4nJG9syVKbg== X-Received: by 2002:a92:cb4b:: with SMTP id f11mr7485996ilq.189.1631298131330; Fri, 10 Sep 2021 11:22:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzY1/D9ddc23gIIQFr1TJSf44itAD+dQVdfAoC+kxOl4Pw9fBBxVhoyUJftaHWex+FwZoF4XFTSm5eLHQnzBa4= X-Received: by 2002:a92:cb4b:: with SMTP id f11mr7485984ilq.189.1631298131108; Fri, 10 Sep 2021 11:22:11 -0700 (PDT) MIME-Version: 1.0 References: <20210805165402.GD4195@redhat.com> <35f2073dfeed8f008d42a78bf60b7efcf13164eb.camel@klomp.org> <20210806185459.GE4195@redhat.com> <9ac621fee207ef233873c40843b3d34ced9019cc.camel@klomp.org> In-Reply-To: From: Noah Sanci Date: Fri, 10 Sep 2021 14:22:00 -0400 Message-ID: Subject: Re: [Bug debuginfod/27277] Describe retrieved files when verbose To: Mark Wielaard Cc: elfutils-devel@sourceware.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000a1304b05cba831b3" X-Spam-Status: No, score=-11.5 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, NUMERIC_HTTP_ADDR, 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: Fri, 10 Sep 2021 18:22:17 -0000 --000000000000a1304b05cba831b3 Content-Type: text/plain; charset="UTF-8" Hello, The updated patch is attached. On Wed, Sep 8, 2021 at 4:56 PM Mark Wielaard wrote: > On Fri, Aug 27, 2021 at 02:38:27PM -0400, Noah Sanci via Elfutils-devel wrote: > > From ed7638571f188e346dd466c195b9ebda028d1c65 Mon Sep 17 00:00:00 2001 > > From: Noah Sanci > > Date: Wed, 28 Jul 2021 14:46:05 -0400 > > Subject: [PATCH] debuginfod: PR27277 - Describe retrieved files when verbose > > > > There appear to exist use cases that intend to simply check for the > > existence of content in a debuginfod server, without actually > > downloading it. In HTTP land, the HEAD operation is the natural > > expression of this. > > Instead of implementing a HEAD/describe option, allow users, with enough > > verbosity, to print the HTTP response headers upon retrieving a file. > > Same comment as earlier, but now please also state the debuginfod > changes itself (the extra headers added). Should be good. > > E.g output: > > > > HTTP/1.1 200 OK > > Connection: Keep-Alive > > Content-Length: 2428240 > > Cache-Control: public > > Last-Modified: Sat, 15 May 2021 20:49:51 GMT > > X-FILE: "file name" > > X-FILE-SIZE: "byte length of file" > > I think an actual output example is better than including "place > holder text". Fixed > > diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx > > index 6e182a84..e9b7e76c 100644 > > --- a/debuginfod/debuginfod.cxx > > +++ b/debuginfod/debuginfod.cxx > > @@ -1068,6 +1068,9 @@ handle_buildid_f_match (bool internal_req_t, > > else > > { > > MHD_add_response_header (r, "Content-Type", "application/octet-stream"); > > + std::string file = b_source0.substr(b_source0.find_last_of("/")+1, b_source0.length()); > > + MHD_add_response_header (r, "X-FILE-SIZE", to_string(s.st_size).c_str() ); > > + MHD_add_response_header (r, "X-FILE", file.c_str() ); > > add_mhd_last_modified (r, s.st_mtime); > > if (verbose > 1) > > obatched(clog) << "serving file " << b_source0 << endl; > > @@ -1537,6 +1540,9 @@ handle_buildid_r_match (bool internal_req_p, > > inc_metric ("http_responses_total","result","archive fdcache"); > > > > MHD_add_response_header (r, "Content-Type", "application/octet-stream"); > > + MHD_add_response_header (r, "X-FILE-SIZE", to_string(fs.st_size).c_str()); > > + MHD_add_response_header (r, "X-ARCHIVE", b_source0.c_str()); > > + MHD_add_response_header (r, "X-FILE", b_source1.c_str()); > > add_mhd_last_modified (r, fs.st_mtime); > > if (verbose > 1) > > obatched(clog) << "serving fdcache archive " << b_source0 << " file " << b_source1 << endl; > > @@ -1678,6 +1684,11 @@ handle_buildid_r_match (bool internal_req_p, > > else > > { > > MHD_add_response_header (r, "Content-Type", "application/octet-stream"); > > + std::string file = b_source1.substr(b_source1.find_last_of("/")+1, b_source1.length()); > > + MHD_add_response_header (r, "X-FILE-SIZE", to_string(fs.st_size).c_str()); > > + MHD_add_response_header (r, "X-ARCHIVE", b_source0.c_str()); > > + MHD_add_response_header (r, "X-FILE", file.c_str()); > > + > > add_mhd_last_modified (r, archive_entry_mtime(e)); > > if (verbose > 1) > > obatched(clog) << "serving archive " << b_source0 << " file " << b_source1 << endl; > > This looks good. But I wonder if, since these are headers specific to > debuginfod, they shouldn't be named X-DEBUGINFOD-... Just to make sure > they don't clash with any others a proxy might insert. Fixed > > +2021-08-04 Noah Sanci > > + > > + PR27277 > > + * debuginfod-find.1: Increasing verbosity describes the downloaded > > + file. > > + * debuginfod.8: Describe X-FILE, X-FILE-SIZE, and X-ARCHIVE. > > + > > > diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 > > index 5b0d793c..e9c58fbb 100644 > > --- a/doc/debuginfod.8 > > +++ b/doc/debuginfod.8 > > @@ -256,6 +256,13 @@ Unknown buildid / request combinations result in HTTP error codes. > > This file service resemblance is intentional, so that an installation > > can take advantage of standard HTTP management infrastructure. > > > > +Upon finding a file in an archive or simply in the database, some > > +custom http headers are added to the response. For files in the > > +database X-FILE and X-FILE-SIZE are added. X-FILE is simply the > > +filename and X-FILE-SIZE is the size of the file. For files found > > +in archives, in addition to X-FILE and X-FILE-SIZE, X-ARCHIVE is added. > > +X-ARCHIVE is the name of the the file was found in. > > Probably should mention that the file name is unescaped (not url > encoded). Fixed > The last sentence has too many "the". I think a word is > missing between the last two. Not sure if what I did is considered a fix Thanks, Noah Sanci --000000000000a1304b05cba831b3 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-debuginfod-PR27277-Describe-retrieved-files-when-ver.patch" Content-Disposition: attachment; filename="0002-debuginfod-PR27277-Describe-retrieved-files-when-ver.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kteor0ju0 RnJvbSA5NzlmMTllYjRmZDdhMzVhY2U0ZGRhZmVkMTAzOTIyNTU5YjkzMTIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIFNhbmNpIDxuc2FuY2lAcmVkaGF0LmNvbT4KRGF0ZTog V2VkLCAyOCBKdWwgMjAyMSAxNDo0NjowNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBkZWJ1 Z2luZm9kOiBQUjI3Mjc3IC0gRGVzY3JpYmUgcmV0cmlldmVkIGZpbGVzIHdoZW4KIHZlcmJvc2UK CkFsbG93IHVzZXJzLCB3aXRoIGVub3VnaCB2ZXJib3NpdHksIHRvIHByaW50IHRoZSBIVFRQIHJl c3BvbnNlIGhlYWRlcnMKdXBvbiByZXRyaWV2aW5nIGEgZmlsZS4gVGhlc2UgZmlsZXMgbWF5IGlu Y2x1ZGUgc2V2ZXJhbCBjdXN0b21lIGh0dHAKcmVzcG9uc2UgaGVhZGVycyBzdWNoIGFzIFgtREVC VUdJTkZPRC1GSUxFLCBYLURFQlVHSU5GT0QtU0laRSwgYW5kClgtREVCVUdJTkZPRC1BUkNISVZF LiBUaGVzZSBoZWFkZXJzIGFyZSBhZGRlZCBmcm9tIHRoZSBkYWVtb24sIGluCmRlYnVnaW5mb2Qu Y3h4LgpydW4tZGVidWdpbmZvZC1mZC1wcmVmZXRjaC1jYWNoZXMuc2ggd2FzIHVwZGF0ZWQgc28g dGhhdCBpdCBkb2Vzbid0CnRyaXAgYW5kIGZhaWwgYXMgcHJldmlvdXNseSBncmVwaW5nIGZvciBh IHZhbHVlIHRoYXQgc2hvdWxkIHlpZWxkIHplcm8KY2F1c2VkIGFuIGVycm9yLgpQcmV2aW91c2x5 LCB0YXJnZXRfaGFuZGxlIHdhcyB1c2VkIHRvIGdhdGhlciBDVVJMRV9PSyByZXBvbnNlcy4gVW5k ZXIKc29tZSBjb25kaXRpb25zLCB0YXJnZXRfaGFuZGxlIHdhcyBOVUxMIHdoZW4gd2Ugd2FudGVk IGl0IHRvIHBvaW50IHRvCnRoZSBoYW5kbGUuIFRoaXMgY291bGQgY2F1c2Ugc29tZSBmYWlsdWVy cy4gaW5zdGVhZCBtc2ctPmVhc3lfaGFuZGxlCmlzIHVzZWQsIHdoaWNoIGVuc3VyZXMgdGhlIGNv cnJlY3QgaGFuZGxlIGlzIHVzZWQuCkUuZyBvdXRwdXQ6CgpIVFRQLzEuMSAyMDAgT0sKQ29ubmVj dGlvbjogS2VlcC1BbGl2ZQpDb250ZW50LUxlbmd0aDogNDA5NTA3MgpDYWNoZS1Db250cm9sOiBw dWJsaWMKTGFzdC1Nb2RpZmllZDogVGh1LCAwOSBTZXAgMjAyMSAxOTowNjo0MCBHTVQKWC1GSUxF OiBkZWJ1Z2luZm9kClgtRklMRS1TSVpFOiA0MDk1MDcyCkNvbnRlbnQtVHlwZTogYXBwbGljYXRp b24vb2N0ZXQtc3RyZWFtCkRhdGU6IEZyaSwgMTAgU2VwIDIwMjEgMTY6Mzg6MDYgR01UCgpodHRw czovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yNzI3NwoKU2lnbmVk LW9mZi1ieTogTm9haCBTYW5jaSA8bnNhbmNpQHJlZGhhdC5jb20+Ci0tLQogZGVidWdpbmZvZC9D aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsrKwogZGVidWdpbmZvZC9kZWJ1 Z2luZm9kLWNsaWVudC5jICAgICAgICAgICAgIHwgIDU4ICsrKysrKysrKy0KIGRlYnVnaW5mb2Qv ZGVidWdpbmZvZC5jeHggICAgICAgICAgICAgICAgICB8ICAxMSArKwogZG9jL0NoYW5nZUxvZyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsrCiBkb2MvZGVidWdpbmZvZC1maW5k LjEgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGRvYy9kZWJ1Z2luZm9kLjggICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgOSArKwogdGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDE4ICsrKy0KIHRlc3RzL01ha2VmaWxlLmFtICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMyArLQogdGVzdHMvcnVuLWRlYnVnaW5mb2QtZmQtcHJlZmV0Y2gt Y2FjaGVzLnNoIHwgICA2ICstCiB0ZXN0cy9ydW4tZGVidWdpbmZvZC1yZXNwb25zZS1oZWFkZXJz LnNoICAgfCAxMTggKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy90ZXN0LXN1YnIuc2ggICAg ICAgICAgICAgICAgICAgICAgICAgfCAgMTAgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDI0MSBpbnNl cnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDc1NSB0ZXN0cy9ydW4t ZGVidWdpbmZvZC1yZXNwb25zZS1oZWFkZXJzLnNoCgpkaWZmIC0tZ2l0IGEvZGVidWdpbmZvZC9D aGFuZ2VMb2cgYi9kZWJ1Z2luZm9kL0NoYW5nZUxvZwppbmRleCA3ZTIyMWY1NC4uMWVjODNkZTkg MTAwNjQ0Ci0tLSBhL2RlYnVnaW5mb2QvQ2hhbmdlTG9nCisrKyBiL2RlYnVnaW5mb2QvQ2hhbmdl TG9nCkBAIC0yNiw2ICsyNiwyMiBAQAogCSogZGVidWdpbmZvZC5jeHggKGhhbmRsZXJfY2IpOiBG aXggYWZ0ZXJfeW91IHVuaXF1ZV9zZXQga2V5CiAJdG8gdGhlIGVudGlyZSBpbmNvbWluZyBVUkwu CiAKKzIwMjEtMDgtMDIgIE5vYWggU2FuY2kgIDxuc2FuY2lAcmVkaGF0LmNvbT4KKworCVBSMjcy NzcKKwkqIGRlYnVnaW5mb2QtY2xpZW50LmMgKHN0cnVjdCBkZWJ1Z2luZm9kX2NsaWVudCk6IE5l dyBmaWVsZAorCXdpbm5pbmdfaGVhZGVycy4KKwkoc3RydWN0IGhhbmRsZV9kYXRhKTogTmV3IGZp ZWxkIHJlc3BvbnNlX2RhdGEuCisJKGhlYWRlcl9jYWxsYmFjayk6IFN0b3JlIHJlY2VpdmVkIGhl YWRlcnMgaW4gcmVzcG9uc2VfZGF0YS4KKwkoZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIpOiBBY3Rp dmF0ZSBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLgorCVNhdmUgd2lubmluZyByZXNwb25zZV9kYXRh LgorCShkZWJ1Z2luZm9kX2VuZCk6IGZyZWUgY2xpZW50IHdpbm5pbmcgaGVhZGVycy4KKwkqIGRl YnVnaW5mb2QuY3h4IChoYW5kbGVfYnVpbGRpZF9mX21hdGNoKTogcmVtb3ZlIFgtREVCVUdJTkZP RC1GSUxFCisJcGF0aC4gQWRkIFgtREVCVUdJTkZPRC1GSUxFIGFuZCBYLURFQlVHSU5GT0QtU0la RSBoZWFkZXJzLgorCShoYW5kbGVfYnVpbGRpZF9yX21hdGNoKTogcmVtb3ZlIFgtREVCVUdJTkZP RC1GSUxFIHBhdGguIEFkZAorCVgtREVCVUdJTkZPRC1GSUxFLCBYLURFQlVHSU5GT0QtU0laRQor CWhlYWRlcnMsIGFuZCBYLUFSQ0hJVkUgaGVhZGVycy4KKwogMjAyMS0wNy0yNiAgTm9haCBTYW5j aSAgPG5zYW5jaUByZWRoYXQuY29tPgogCiAJUFIyNzk4MgpkaWZmIC0tZ2l0IGEvZGVidWdpbmZv ZC9kZWJ1Z2luZm9kLWNsaWVudC5jIGIvZGVidWdpbmZvZC9kZWJ1Z2luZm9kLWNsaWVudC5jCmlu ZGV4IGQ0MTcyM2NlLi45YzE2ZTdhMyAxMDA2NDQKLS0tIGEvZGVidWdpbmZvZC9kZWJ1Z2luZm9k LWNsaWVudC5jCisrKyBiL2RlYnVnaW5mb2QvZGVidWdpbmZvZC1jbGllbnQuYwpAQCAtMTI3LDYg KzEyNyw3IEBAIHN0cnVjdCBkZWJ1Z2luZm9kX2NsaWVudAogICAgICB0aW1lb3V0IG9yIG90aGVy IGluZm8gZ290dGVuIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLCB0aGUKICAgICAgaGFuZGxl IGRhdGEsIGV0Yy4gU28gdGhvc2UgZG9uJ3QgaGF2ZSB0byBiZSByZXBhcnNlZCBhbmQKICAgICAg cmVjcmVhdGVkIG9uIGVhY2ggcmVxdWVzdC4gICovCisgIGNoYXIgKiB3aW5uaW5nX2hlYWRlcnM7 CiB9OwogCiAvKiBUaGUgY2FjaGVfY2xlYW5faW50ZXJ2YWxfcyBmaWxlIHdpdGhpbiB0aGUgZGVi dWdpbmZvZCBjYWNoZSBzcGVjaWZpZXMKQEAgLTE4Myw2ICsxODQsOCBAQCBzdHJ1Y3QgaGFuZGxl X2RhdGEKICAgICAgdG8gdGhlIGNhY2hlLiBVc2VkIHRvIGVuc3VyZSB0aGF0IGEgZmlsZSBpcyBu b3QgZG93bmxvYWRlZCBmcm9tCiAgICAgIG11bHRpcGxlIHNlcnZlcnMgdW5uZWNlc3NhcmlseS4g ICovCiAgIENVUkwgKip0YXJnZXRfaGFuZGxlOworICAvKiBSZXNwb25zZSBodHRwIGhlYWRlcnMg Zm9yIHRoaXMgY2xpZW50IGhhbmRsZSwgc2VudCBmcm9tIHRoZSBzZXJ2ZXIgKi8KKyAgY2hhciAq cmVzcG9uc2VfZGF0YTsKIH07CiAKIHN0YXRpYyBzaXplX3QKQEAgLTQ5OSw2ICs1MDIsMzMgQEAg ZGVmYXVsdF9wcm9ncmVzc2ZuIChkZWJ1Z2luZm9kX2NsaWVudCAqYywgbG9uZyBhLCBsb25nIGIp CiB9CiAKIAorc3RhdGljIHNpemVfdAoraGVhZGVyX2NhbGxiYWNrIChjaGFyICogYnVmZmVyLCBz aXplX3Qgc2l6ZSwgc2l6ZV90IG51bWl0ZW1zLCB2b2lkICogdXNlcmRhdGEpCit7CisgIGlmIChz aXplICE9IDEpCisgICAgcmV0dXJuIDA7CisgIC8qIFRlbXBvcmFyeSBidWZmZXIgZm9yIHJlYWxs b2MgKi8KKyAgY2hhciAqdGVtcCA9IE5VTEw7CisgIHNpemVfdCB1c2VybGVuID0gMDsKKyAgaWYg KCooY2hhcioqKXVzZXJkYXRhID09IE5VTEwpCisgICAgeworICAgICAgdGVtcCA9IG1hbGxvYyhu dW1pdGVtcysxKTsKKyAgICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOwor ICAgICAgbWVtc2V0KHRlbXAsICdcMCcsIG51bWl0ZW1zKzEpOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIHVzZXJsZW4gPSBzdHJsZW4oKihjaGFyKiopdXNlcmRhdGEpOworICAgICAgdGVt cCA9IHJlYWxsb2MoKihjaGFyKiopdXNlcmRhdGEsIHVzZXJsZW4gKyBudW1pdGVtcyArIDEpOwor ICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICByZXR1cm4gMDsKKyAgICB9CisgIHN0cm5j YXQodGVtcCwgYnVmZmVyLCBudW1pdGVtcyk7CisgICooY2hhcioqKXVzZXJkYXRhID0gdGVtcDsK KyAgcmV0dXJuIG51bWl0ZW1zOworfQorCiAvKiBRdWVyeSBlYWNoIG9mIHRoZSBzZXJ2ZXIgVVJM cyBmb3VuZCBpbiAkREVCVUdJTkZPRF9VUkxTIGZvciB0aGUgZmlsZQogICAgd2l0aCB0aGUgc3Bl Y2lmaWVkIGJ1aWxkLWlkLCB0eXBlIChkZWJ1Z2luZm8sIGV4ZWN1dGFibGUgb3Igc291cmNlKQog ICAgYW5kIGZpbGVuYW1lLiBmaWxlbmFtZSBtYXkgYmUgTlVMTC4gSWYgZm91bmQsIHJldHVybiBh IGZpbGUKQEAgLTkzNiwxMCArOTY2LDEzIEBAIGRlYnVnaW5mb2RfcXVlcnlfc2VydmVyIChkZWJ1 Z2luZm9kX2NsaWVudCAqYywKIAkgIGN1cmxfZWFzeV9zZXRvcHQgKGRhdGFbaV0uaGFuZGxlLCBD VVJMT1BUX0xPV19TUEVFRF9MSU1JVCwKIAkJCSAgICAxMDAgKiAxMDI0TCk7CiAJfQorICAgICAg ZGF0YVtpXS5yZXNwb25zZV9kYXRhID0gTlVMTDsKICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZGF0 YVtpXS5oYW5kbGUsIENVUkxPUFRfRklMRVRJTUUsIChsb25nKSAxKTsKICAgICAgIGN1cmxfZWFz eV9zZXRvcHQoZGF0YVtpXS5oYW5kbGUsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIChsb25nKSAx KTsKICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZGF0YVtpXS5oYW5kbGUsIENVUkxPUFRfRkFJTE9O RVJST1IsIChsb25nKSAxKTsKICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZGF0YVtpXS5oYW5kbGUs IENVUkxPUFRfTk9TSUdOQUwsIChsb25nKSAxKTsKKyAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZGF0 YVtpXS5oYW5kbGUsIENVUkxPUFRfSEVBREVSRlVOQ1RJT04sIGhlYWRlcl9jYWxsYmFjayk7Cisg ICAgICBjdXJsX2Vhc3lfc2V0b3B0KGRhdGFbaV0uaGFuZGxlLCBDVVJMT1BUX0hFQURFUkRBVEEs ICh2b2lkICopICYoZGF0YVtpXS5yZXNwb25zZV9kYXRhKSk7CiAjaWYgTElCQ1VSTF9WRVJTSU9O X05VTSA+PSAweDA3MmEwMCAvKiA3LjQyLjAgKi8KICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZGF0 YVtpXS5oYW5kbGUsIENVUkxPUFRfUEFUSF9BU19JUywgKGxvbmcpIDEpOwogI2Vsc2UKQEAgLTk2 MSw2ICs5OTQsNyBAQCBkZWJ1Z2luZm9kX3F1ZXJ5X3NlcnZlciAoZGVidWdpbmZvZF9jbGllbnQg KmMsCiAgIGludCBjb21taXR0ZWRfdG8gPSAtMTsKICAgYm9vbCB2ZXJib3NlX3JlcG9ydGVkID0g ZmFsc2U7CiAgIHN0cnVjdCB0aW1lc3BlYyBzdGFydF90aW1lLCBjdXJfdGltZTsKKyAgYy0+d2lu bmluZ19oZWFkZXJzID0gTlVMTDsKICAgaWYgKCBtYXh0aW1lID4gMCAmJiBjbG9ja19nZXR0aW1l KENMT0NLX01PTk9UT05JQ19SQVcsICZzdGFydF90aW1lKSA9PSAtMSkKICAgICB7CiAgICAgICBy YyA9IGVycm5vOwpAQCAtOTk1LDggKzEwMjksMTggQEAgZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIg KGRlYnVnaW5mb2RfY2xpZW50ICpjLAogCSAgICBpZiAoZGF0YVtpXS5oYW5kbGUgIT0gdGFyZ2V0 X2hhbmRsZSkKIAkgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoY3VybG0sIGRhdGFbaV0u aGFuZGxlKTsKIAkgICAgZWxzZQotCSAgICAgIGNvbW1pdHRlZF90byA9IGk7Ci0JfQorICAgICAg ICAgICAgICB7CisJICAgICAgICBjb21taXR0ZWRfdG8gPSBpOworICAgICAgICAgICAgICAgIGlm IChjLT53aW5uaW5nX2hlYWRlcnMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgYy0+d2lubmluZ19oZWFkZXJzID0gZGF0YVtjb21taXR0ZWRfdG9dLnJl c3BvbnNlX2RhdGE7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZmQgPj0gMCAmJiBjLT53aW5u aW5nX2hlYWRlcnMgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICBkcHJpbnRmKHZmZCwg IlxuJXMiLCBjLT53aW5uaW5nX2hlYWRlcnMpOworICAgICAgICAgICAgICAgICAgICBkYXRhW2Nv bW1pdHRlZF90b10ucmVzcG9uc2VfZGF0YSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgIGlmICh2ZmQgPj0gMCAmJiAhdmVy Ym9zZV9yZXBvcnRlZCAmJiBjb21taXR0ZWRfdG8gPj0gMCkKIAl7CkBAIC0xMTYxLDEwICsxMjA1 LDEwIEBAIGRlYnVnaW5mb2RfcXVlcnlfc2VydmVyIChkZWJ1Z2luZm9kX2NsaWVudCAqYywKICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBjaGFyICplZmZlY3RpdmVfdXJsID0g TlVMTDsKICAgICAgICAgICAgICAgICAgIGxvbmcgcmVzcF9jb2RlID0gNTAwOwotICAgICAgICAg ICAgICAgICAgQ1VSTGNvZGUgb2sxID0gY3VybF9lYXN5X2dldGluZm8gKHRhcmdldF9oYW5kbGUs CisgICAgICAgICAgICAgICAgICBDVVJMY29kZSBvazEgPSBjdXJsX2Vhc3lfZ2V0aW5mbyAobXNn LT5lYXN5X2hhbmRsZSwKIAkJCQkJCSAgICBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLAogCQkJCQkJ ICAgICZlZmZlY3RpdmVfdXJsKTsKLSAgICAgICAgICAgICAgICAgIENVUkxjb2RlIG9rMiA9IGN1 cmxfZWFzeV9nZXRpbmZvICh0YXJnZXRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgQ1VSTGNv ZGUgb2syID0gY3VybF9lYXN5X2dldGluZm8gKG1zZy0+ZWFzeV9oYW5kbGUsCiAJCQkJCQkgICAg Q1VSTElORk9fUkVTUE9OU0VfQ09ERSwKIAkJCQkJCSAgICAmcmVzcF9jb2RlKTsKICAgICAgICAg ICAgICAgICAgIGlmKG9rMSA9PSBDVVJMRV9PSyAmJiBvazIgPT0gQ1VSTEVfT0sgJiYgZWZmZWN0 aXZlX3VybCkKQEAgLTEyMzgsNyArMTI4MiwxMCBAQCBkZWJ1Z2luZm9kX3F1ZXJ5X3NlcnZlciAo ZGVidWdpbmZvZF9jbGllbnQgKmMsCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGN1cmxf bXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsbSwgZGF0YVtpXS5oYW5kbGUpOyAvKiBvayB0byByZXBl YXQgKi8KICAgICAgICAgICAgICAgY3VybF9lYXN5X2NsZWFudXAgKGRhdGFbaV0uaGFuZGxlKTsK KyAgICAgICAgICAgICAgZnJlZShkYXRhW2ldLnJlc3BvbnNlX2RhdGEpOwogICAgICAgICAgICAg fQorICAgICAgICAgICAgZnJlZShjLT53aW5uaW5nX2hlYWRlcnMpOworICAgICAgICAgICAgYy0+ d2lubmluZ19oZWFkZXJzID0gTlVMTDsKIAkgICAgZ290byBxdWVyeV9pbl9wYXJhbGxlbDsKIAl9 CiAgICAgICBlbHNlCkBAIC0xMjgxLDYgKzEzMjgsNyBAQCBkZWJ1Z2luZm9kX3F1ZXJ5X3NlcnZl ciAoZGVidWdpbmZvZF9jbGllbnQgKmMsCiAgICAgewogICAgICAgY3VybF9tdWx0aV9yZW1vdmVf aGFuZGxlKGN1cmxtLCBkYXRhW2ldLmhhbmRsZSk7IC8qIG9rIHRvIHJlcGVhdCAqLwogICAgICAg Y3VybF9lYXN5X2NsZWFudXAgKGRhdGFbaV0uaGFuZGxlKTsKKyAgICAgIGZyZWUgKGRhdGFbaV0u cmVzcG9uc2VfZGF0YSk7CiAgICAgfQogCiAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3VybHM7 ICsraSkKQEAgLTEzMDQsNiArMTM1Miw3IEBAIGRlYnVnaW5mb2RfcXVlcnlfc2VydmVyIChkZWJ1 Z2luZm9kX2NsaWVudCAqYywKICAgICB7CiAgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUo Y3VybG0sIGRhdGFbaV0uaGFuZGxlKTsgLyogb2sgdG8gcmVwZWF0ICovCiAgICAgICBjdXJsX2Vh c3lfY2xlYW51cCAoZGF0YVtpXS5oYW5kbGUpOworICAgICAgZnJlZSAoZGF0YVtpXS5yZXNwb25z ZV9kYXRhKTsKICAgICB9CiAKICAgdW5saW5rICh0YXJnZXRfY2FjaGVfdG1wcGF0aCk7CkBAIC0x NDE1LDYgKzE0NjQsNyBAQCBkZWJ1Z2luZm9kX2VuZCAoZGVidWdpbmZvZF9jbGllbnQgKmNsaWVu dCkKIAogICBjdXJsX211bHRpX2NsZWFudXAgKGNsaWVudC0+c2VydmVyX21oYW5kbGUpOwogICBj dXJsX3NsaXN0X2ZyZWVfYWxsIChjbGllbnQtPmhlYWRlcnMpOworICBmcmVlIChjbGllbnQtPndp bm5pbmdfaGVhZGVycyk7CiAgIGZyZWUgKGNsaWVudC0+dXJsKTsKICAgZnJlZSAoY2xpZW50KTsK IH0KZGlmZiAtLWdpdCBhL2RlYnVnaW5mb2QvZGVidWdpbmZvZC5jeHggYi9kZWJ1Z2luZm9kL2Rl YnVnaW5mb2QuY3h4CmluZGV4IDMyNjlmNjU3Li40ZjdhMDlhZCAxMDA2NDQKLS0tIGEvZGVidWdp bmZvZC9kZWJ1Z2luZm9kLmN4eAorKysgYi9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QuY3h4CkBAIC0x MDc1LDYgKzEwNzUsOSBAQCBoYW5kbGVfYnVpbGRpZF9mX21hdGNoIChib29sIGludGVybmFsX3Jl cV90LAogICBlbHNlCiAgICAgewogICAgICAgTUhEX2FkZF9yZXNwb25zZV9oZWFkZXIgKHIsICJD b250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CisgICAgICBzdGQ6OnN0 cmluZyBmaWxlID0gYl9zb3VyY2UwLnN1YnN0cihiX3NvdXJjZTAuZmluZF9sYXN0X29mKCIvIikr MSwgYl9zb3VyY2UwLmxlbmd0aCgpKTsKKyAgICAgIE1IRF9hZGRfcmVzcG9uc2VfaGVhZGVyIChy LCAiWC1ERUJVR0lORk9ELVNJWkUiLCB0b19zdHJpbmcocy5zdF9zaXplKS5jX3N0cigpICk7Cisg ICAgICBNSERfYWRkX3Jlc3BvbnNlX2hlYWRlciAociwgIlgtREVCVUdJTkZPRC1GSUxFIiwgZmls ZS5jX3N0cigpICk7CiAgICAgICBhZGRfbWhkX2xhc3RfbW9kaWZpZWQgKHIsIHMuc3RfbXRpbWUp OwogICAgICAgaWYgKHZlcmJvc2UgPiAxKQogICAgICAgICBvYmF0Y2hlZChjbG9nKSA8PCAic2Vy dmluZyBmaWxlICIgPDwgYl9zb3VyY2UwIDw8IGVuZGw7CkBAIC0xNTQ0LDYgKzE1NDcsOSBAQCBo YW5kbGVfYnVpbGRpZF9yX21hdGNoIChib29sIGludGVybmFsX3JlcV9wLAogICAgICAgaW5jX21l dHJpYyAoImh0dHBfcmVzcG9uc2VzX3RvdGFsIiwicmVzdWx0IiwiYXJjaGl2ZSBmZGNhY2hlIik7 CiAKICAgICAgIE1IRF9hZGRfcmVzcG9uc2VfaGVhZGVyIChyLCAiQ29udGVudC1UeXBlIiwgImFw cGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOworICAgICAgTUhEX2FkZF9yZXNwb25zZV9oZWFkZXIg KHIsICJYLURFQlVHSU5GT0QtU0laRSIsIHRvX3N0cmluZyhmcy5zdF9zaXplKS5jX3N0cigpKTsK KyAgICAgIE1IRF9hZGRfcmVzcG9uc2VfaGVhZGVyIChyLCAiWC1ERUJVR0lORk9ELUFSQ0hJVkUi LCBiX3NvdXJjZTAuY19zdHIoKSk7CisgICAgICBNSERfYWRkX3Jlc3BvbnNlX2hlYWRlciAociwg IlgtREVCVUdJTkZPRC1GSUxFIiwgYl9zb3VyY2UxLmNfc3RyKCkpOwogICAgICAgYWRkX21oZF9s YXN0X21vZGlmaWVkIChyLCBmcy5zdF9tdGltZSk7CiAgICAgICBpZiAodmVyYm9zZSA+IDEpCiAg ICAgICAgIG9iYXRjaGVkKGNsb2cpIDw8ICJzZXJ2aW5nIGZkY2FjaGUgYXJjaGl2ZSAiIDw8IGJf c291cmNlMCA8PCAiIGZpbGUgIiA8PCBiX3NvdXJjZTEgPDwgZW5kbDsKQEAgLTE2ODUsNiArMTY5 MSwxMSBAQCBoYW5kbGVfYnVpbGRpZF9yX21hdGNoIChib29sIGludGVybmFsX3JlcV9wLAogICAg ICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgTUhEX2FkZF9yZXNwb25zZV9oZWFkZXIgKHIs ICJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CisgICAgICAgICAg c3RkOjpzdHJpbmcgZmlsZSA9IGJfc291cmNlMS5zdWJzdHIoYl9zb3VyY2UxLmZpbmRfbGFzdF9v ZigiLyIpKzEsIGJfc291cmNlMS5sZW5ndGgoKSk7CisgICAgICAgICAgTUhEX2FkZF9yZXNwb25z ZV9oZWFkZXIgKHIsICJYLURFQlVHSU5GT0QtU0laRSIsIHRvX3N0cmluZyhmcy5zdF9zaXplKS5j X3N0cigpKTsKKyAgICAgICAgICBNSERfYWRkX3Jlc3BvbnNlX2hlYWRlciAociwgIlgtREVCVUdJ TkZPRC1BUkNISVZFIiwgYl9zb3VyY2UwLmNfc3RyKCkpOworICAgICAgICAgIE1IRF9hZGRfcmVz cG9uc2VfaGVhZGVyIChyLCAiWC1ERUJVR0lORk9ELUZJTEUiLCBmaWxlLmNfc3RyKCkpOworCiAg ICAgICAgICAgYWRkX21oZF9sYXN0X21vZGlmaWVkIChyLCBhcmNoaXZlX2VudHJ5X210aW1lKGUp KTsKICAgICAgICAgICBpZiAodmVyYm9zZSA+IDEpCiAgICAgICAgICAgICBvYmF0Y2hlZChjbG9n KSA8PCAic2VydmluZyBhcmNoaXZlICIgPDwgYl9zb3VyY2UwIDw8ICIgZmlsZSAiIDw8IGJfc291 cmNlMSA8PCBlbmRsOwpkaWZmIC0tZ2l0IGEvZG9jL0NoYW5nZUxvZyBiL2RvYy9DaGFuZ2VMb2cK aW5kZXggYWRhNDgzODMuLmRiM2EzNTg0IDEwMDY0NAotLS0gYS9kb2MvQ2hhbmdlTG9nCisrKyBi L2RvYy9DaGFuZ2VMb2cKQEAgLTE4LDYgKzE4LDE0IEBACiAJKiBNYWtlZmlsZS5hbTogVXBkYXRl ZCB0byBpbmNsdWRlIGRlYnVnaW5mb2QtY2xpZW50LWNvbmZpZy43CiAJKiBtYW4zLCBtYW43OiBT eW1saW5rcyBmb3Igc291cmNlIHRyZWUgbWFuIHBhZ2UgdGVzdGluZy4KIAorMjAyMS0wOC0wNCAg Tm9haCBTYW5jaSAgPG5zYW5jaUByZWRoYXQuY29tPgorCisJUFIyNzI3NworCSogZGVidWdpbmZv ZC1maW5kLjE6IEluY3JlYXNpbmcgdmVyYm9zaXR5IGRlc2NyaWJlcyB0aGUgZG93bmxvYWRlZAor CWZpbGUuCisJKiBkZWJ1Z2luZm9kLjg6IERlc2NyaWJlIFgtREVCVUdJTkZPRC1GSUxFLCBYLURF QlVHSU5GT0QtU0laRSwgYW5kCisJWC1ERUJVR0lORk9ELUFSQ0hJVkUuCisKIDIwMjEtMDctMjYg IE5vYWggU2FuY2kgPG5zYW5jaUByZWRoYXQuY29tPgogCiAJUFIyNzk4MgpkaWZmIC0tZ2l0IGEv ZG9jL2RlYnVnaW5mb2QtZmluZC4xIGIvZG9jL2RlYnVnaW5mb2QtZmluZC4xCmluZGV4IGE2MTY3 M2Y1Li45NTdlYzdlNyAxMDA2NDQKLS0tIGEvZG9jL2RlYnVnaW5mb2QtZmluZC4xCisrKyBiL2Rv Yy9kZWJ1Z2luZm9kLWZpbmQuMQpAQCAtMTEwLDcgKzExMCw4IEBAIGwgbC4KIAogLlRQCiAuQiAi XC12IgotSW5jcmVhc2UgdmVyYm9zaXR5LCBpbmNsdWRpbmcgcHJpbnRpbmcgZnJlcXVlbnQgZG93 bmxvYWQtcHJvZ3Jlc3MgbWVzc2FnZXMuCitJbmNyZWFzZSB2ZXJib3NpdHksIGluY2x1ZGluZyBw cmludGluZyBmcmVxdWVudCBkb3dubG9hZC1wcm9ncmVzcyBtZXNzYWdlcworYW5kIHByaW50aW5n IHRoZSBodHRwIHJlc3BvbnNlIGhlYWRlcnMgZnJvbSB0aGUgc2VydmVyLgogCiAKIC5TSCAiU0VD VVJJVFkiCmRpZmYgLS1naXQgYS9kb2MvZGVidWdpbmZvZC44IGIvZG9jL2RlYnVnaW5mb2QuOApp bmRleCBmOWE0MThkMS4uZmRlMDZiYjggMTAwNjQ0Ci0tLSBhL2RvYy9kZWJ1Z2luZm9kLjgKKysr IGIvZG9jL2RlYnVnaW5mb2QuOApAQCAtMjU4LDYgKzI1OCwxNSBAQCBVbmtub3duIGJ1aWxkaWQg LyByZXF1ZXN0IGNvbWJpbmF0aW9ucyByZXN1bHQgaW4gSFRUUCBlcnJvciBjb2Rlcy4KIFRoaXMg ZmlsZSBzZXJ2aWNlIHJlc2VtYmxhbmNlIGlzIGludGVudGlvbmFsLCBzbyB0aGF0IGFuIGluc3Rh bGxhdGlvbgogY2FuIHRha2UgYWR2YW50YWdlIG9mIHN0YW5kYXJkIEhUVFAgbWFuYWdlbWVudCBp bmZyYXN0cnVjdHVyZS4KIAorVXBvbiBmaW5kaW5nIGEgZmlsZSBpbiBhbiBhcmNoaXZlIG9yIHNp bXBseSBpbiB0aGUgZGF0YWJhc2UsIHNvbWUKK2N1c3RvbSBodHRwIGhlYWRlcnMgYXJlIGFkZGVk IHRvIHRoZSByZXNwb25zZS4gRm9yIGZpbGVzIGluIHRoZQorZGF0YWJhc2UgWC1ERUJVR0lORk9E LUZJTEUgYW5kIFgtREVCVUdJTkZPRC1TSVpFIGFyZSBhZGRlZC4KK1gtREVCVUdJTkZPRC1GSUxF IGlzIHNpbXBseSB0aGUgdW5lc2NhcGVkIGZpbGVuYW1lIGFuZAorWC1ERUJVR0lORk9ELVNJWkUg aXMgdGhlIHNpemUgb2YgdGhlIGZpbGUuIEZvciBmaWxlcyBmb3VuZCBpbiBhcmNoaXZlcywKK2lu IGFkZGl0aW9uIHRvIFgtREVCVUdJTkZPRC1GSUxFIGFuZCBYLURFQlVHSU5GT0QtU0laRSwKK1gt REVCVUdJTkZPRC1BUkNISVZFIGlzIGFkZGVkLiAgWC1ERUJVR0lORk9ELUFSQ0hJVkUgaXMgdGhl IG5hbWUgb2YgdGhlCithcmNoaXZlIHRoZSBmaWxlIHdhcyBmb3VuZCBpbi4KKwogVGhlcmUgYXJl IHRocmVlIHJlcXVlc3RzLiAgSW4gZWFjaCBjYXNlLCB0aGUgYnVpbGRpZCBpcyBlbmNvZGVkIGFz IGEKIGxvd2VyY2FzZSBoZXhhZGVjaW1hbCBzdHJpbmcuICBGb3IgZXhhbXBsZSwgZm9yIGEgcHJv Z3JhbSBcZkkvYmluL2xzXGZQLAogbG9vayBhdCB0aGUgRUxGIG5vdGUgR05VX0JVSUxEX0lEOgpk aWZmIC0tZ2l0IGEvdGVzdHMvQ2hhbmdlTG9nIGIvdGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFhYmU1 NDU2Li4yM2FlZWM0YSAxMDA2NDQKLS0tIGEvdGVzdHMvQ2hhbmdlTG9nCisrKyBiL3Rlc3RzL0No YW5nZUxvZwpAQCAtMTA2LDExICsxMDYsMTIgQEAKIAlydW4tZGVidWdpbmZvZC1xdWVyeS1yZXRy eS5zaCwKIAlydW4tZGVidWdpbmZvZC1yZWdleC5zaCwKIAlydW4tZGVidWdpbmZvZC1zaXpldGlt ZS5zaCwKLQlydW4tZGVidWdpbmZvZC10bXAtaG9tZS5zaCwgYW5kCi0JcnVuLWRlYnVnaW5mb2Qt d3JpdGFibGUuc2gKLQlydW4tZGVidWdpbmZvZC14LWZvcndhcmRlZC1mb3Iuc2gKLQkqIHRlc3Rz L01ha2VmaWxlLmFtOiBBZGRlZCB0aGUgYWJvdmUgbmV3IGZpbGVzIHRvIHRoZSB0ZXN0IHN1aXRl Ci0JKiB0ZXN0cy90ZXN0LXN1YnIuc2g6IEFkZGVkIHNvbWUgZ2VuZXJhbCBmdW5jdGlvbnMgZm9y IGFib3ZlIHRlc3RzCisJcnVuLWRlYnVnaW5mb2QtdG1wLWhvbWUuc2gsCisJcnVuLWRlYnVnaW5m b2Qtd3JpdGFibGUuc2gsIGFuZAorCXJ1bi1kZWJ1Z2luZm9kLXgtZm9yd2FyZGVkLWZvci5zaC4K KwlBbGwgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucyBub3cgdXNlIGEgJ2Jhc2UnIHZhcmlhYmxlIHRv IGF2b2lkIHJhY2VzCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgdGhlIGFib3ZlIG5ldyBmaWxlcyB0 byB0aGUgdGVzdCBzdWl0ZQorCSogdGVzdC1zdWJyLnNoOiBBZGRlZCBzb21lIGdlbmVyYWwgZnVu Y3Rpb25zIGZvciBhYm92ZSB0ZXN0cwogCiAyMDIxLTA4LTI4ICBNYXJrIFdpZWxhYXJkICA8bWFy a0BrbG9tcC5vcmc+CiAKQEAgLTE2MCw2ICsxNjEsMTMgQEAKIAkqIGJhY2t0cmFjZS5jIChjYWxs YmFja192ZXJpZnkpOiBDaGVjayBmb3IgcHRocmVhZF9raWxsIGFzIGZpcnN0CiAJZnJhbWUuIENo YW5nZSBhc3NlcnRzIHRvIGZwcmludGYgcGx1cyBhYm9ydC4KIAorMjAyMS0wOC0wMiAgTm9haCBT YW5jaSAgPG5zYW5jaUByZWRoYXQuY29tPgorCisJUFIyNzI3NworCSogcnVuLWRlYnVnaW5mb2Qt cmVzcG9uc2UtaGVhZGVycy5zaDogQWRkIGEgdGVzdCB0byBlbnN1cmUgdGhhdCBmaWxlIGRlc2Ny aXB0aW9ucworCWFyZSBhY2N1cmF0ZSBmb3IgZmlsZXMgb3V0c2lkZSBvciB3aXRoaW4gYXJjaGl2 ZXMuCisJKiBNYWtlZmlsZS5hbTogQWRkIHJ1bi1kZWJ1Z2luZm9kLXJlc3BvbnNlLWhlYWRlcnMu c2ggdG8gVEVTVFMuCisKIDIwMjEtMDctMjYgIE5vYWggU2FuY2kgIDxuc2FuY2lAcmVkaGF0LmNv bT4KIAogCVBSMjc5ODIKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFr ZWZpbGUuYW0KaW5kZXggYzU4NjQyMmUuLmVmMDk3NTY3IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtl ZmlsZS5hbQorKysgYi90ZXN0cy9NYWtlZmlsZS5hbQpAQCAtMjMxLDcgKzIzMSw4IEBAIFRFU1RT ICs9IHJ1bi1kZWJ1Z2luZm9kLWRsb3Blbi5zaCBcCiAJIHJ1bi1kZWJ1Z2luZm9kLWZlZGVyYXRp b24tc3FsaXRlLnNoIFwKIAkgcnVuLWRlYnVnaW5mb2QtZmVkZXJhdGlvbi1saW5rLnNoIFwKIAkg cnVuLWRlYnVnaW5mb2QtZmVkZXJhdGlvbi1tZXRyaWNzLnNoIFwKLQkgcnVuLWRlYnVnaW5mb2Qt eC1mb3J3YXJkZWQtZm9yLnNoCisJIHJ1bi1kZWJ1Z2luZm9kLXgtZm9yd2FyZGVkLWZvci5zaCBc CisgICAgICAgICBydW4tZGVidWdpbmZvZC1yZXNwb25zZS1oZWFkZXJzLnNoCiBlbmRpZgogZW5k aWYKIApkaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLWRlYnVnaW5mb2QtZmQtcHJlZmV0Y2gtY2FjaGVz LnNoIGIvdGVzdHMvcnVuLWRlYnVnaW5mb2QtZmQtcHJlZmV0Y2gtY2FjaGVzLnNoCmluZGV4IDYx ZmVlOWU5Li5iZWU4OGMxZSAxMDA3NTUKLS0tIGEvdGVzdHMvcnVuLWRlYnVnaW5mb2QtZmQtcHJl ZmV0Y2gtY2FjaGVzLnNoCisrKyBiL3Rlc3RzL3J1bi1kZWJ1Z2luZm9kLWZkLXByZWZldGNoLWNh Y2hlcy5zaApAQCAtNTEsOSArNTEsOSBAQCBncmVwICdwcmVmZXRjaCBmZHMgJyB2bG9nJFBPUlQx ICMkUFJFRkVUQ0hfRkRTCiBncmVwICdwcmVmZXRjaCBtYnMgJyB2bG9nJFBPUlQxICMkUFJFRkVU Q0hfTUJTCiAjIHNlYXJjaCB0aGUgdmxvZyB0byBmaW5kIHdoYXQgbWV0cmljIGNvdW50cyBzaG91 bGQgYmUgYW5kIGNoZWNrIHRoZSBjb3JyZWN0IG1ldHJpY3MKICMgd2VyZSBpbmNyaW1lbnRlZAot d2FpdF9yZWFkeSAkUE9SVDEgJ2ZkY2FjaGVfb3BfY291bnR7b3A9ImVucXVldWUifScgJCggZ3Jl cCAtYyAnaW50ZXJuZWQuKmZyb250PTEnIHZsb2ckUE9SVDEgKQotd2FpdF9yZWFkeSAkUE9SVDEg J2ZkY2FjaGVfb3BfY291bnR7b3A9ImV2aWN0In0nICQoIGdyZXAgLWMgJ2V2aWN0ZWQgYT0uKicg dmxvZyRQT1JUMSApCi13YWl0X3JlYWR5ICRQT1JUMSAnZmRjYWNoZV9vcF9jb3VudHtvcD0icHJl ZmV0Y2hfZW5xdWV1ZSJ9JyAkKCBncmVwIC1jICdpbnRlcm5lZC4qZnJvbnQ9MCcgdmxvZyRQT1JU MSApCit3YWl0X3JlYWR5ICRQT1JUMSAnZmRjYWNoZV9vcF9jb3VudHtvcD0iZW5xdWV1ZSJ9JyAk KCBncmVwIC1jICdpbnRlcm5lZC4qZnJvbnQ9MScgdmxvZyRQT1JUMSB8fCB0cnVlKQord2FpdF9y ZWFkeSAkUE9SVDEgJ2ZkY2FjaGVfb3BfY291bnR7b3A9ImV2aWN0In0nICQoIGdyZXAgLWMgJ2V2 aWN0ZWQgYT0uKicgdmxvZyRQT1JUMSB8fCB0cnVlICkKK3dhaXRfcmVhZHkgJFBPUlQxICdmZGNh Y2hlX29wX2NvdW50e29wPSJwcmVmZXRjaF9lbnF1ZXVlIn0nICQoIGdyZXAgLWMgJ2ludGVybmVk Lipmcm9udD0wJyB2bG9nJFBPUlQxIHx8IHRydWUgKQogd2FpdF9yZWFkeSAkUE9SVDEgJ2ZkY2Fj aGVfb3BfY291bnR7b3A9InByZWZldGNoX2V2aWN0In0nICQoIGdyZXAgLWMgJ2V2aWN0ZWQgZnJv bSBwcmVmZXRjaCBhPS4qZnJvbnQ9MCcgdmxvZyRQT1JUMSB8fCB0cnVlICkKIAoga2lsbCAkUElE MQpkaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLWRlYnVnaW5mb2QtcmVzcG9uc2UtaGVhZGVycy5zaCBi L3Rlc3RzL3J1bi1kZWJ1Z2luZm9kLXJlc3BvbnNlLWhlYWRlcnMuc2gKbmV3IGZpbGUgbW9kZSAx MDA3NTUKaW5kZXggMDAwMDAwMDAuLmE0NThjYTFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMv cnVuLWRlYnVnaW5mb2QtcmVzcG9uc2UtaGVhZGVycy5zaApAQCAtMCwwICsxLDExOCBAQAorIyEv dXNyL2Jpbi9lbnYgYmFzaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBSZWQgSGF0LCBJ bmMuCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVsZnV0aWxzLgorIworIyBUaGlzIGZpbGUgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorIworIyBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisu ICRzcmNkaXIvdGVzdC1zdWJyLnNoICAjIGluY2x1ZGVzIHNldCAtZQorCisjIGZvciB0ZXN0IGNh c2UgZGVidWdnaW5nLCB1bmNvbW1lbnQ6CitzZXQgLXgKKworREI9JHtQV0R9Ly5kZWJ1Z2luZm9k X3RtcC5zcWxpdGUKK3RlbXBmaWxlcyAkREIKK2V4cG9ydCBERUJVR0lORk9EX0NBQ0hFX1BBVEg9 JHtQV0R9Ly5jbGllbnRfY2FjaGUKKworIyBUaGlzIHZhcmlhYmxlIGlzIGVzc2VudGlhbCBhbmQg ZW5zdXJlcyBubyB0aW1lLXJhY2UgZm9yIGNsYWltaW5nIHBvcnRzIG9jY3VycworIyBzZXQgYmFz ZSB0byBhIHVuaXF1ZSBtdWx0aXBsZSBvZiAxMDAgbm90IHVzZWQgaW4gYW55IG90aGVyICdydW4t ZGVidWdpbmZvZC0qJyB0ZXN0CitiYXNlPTk1MDAKK2dldF9wb3J0cworbWtkaXIgRiBSCisKK2Vu diBMRF9MSUJSQVJZX1BBVEg9JGxkcGF0aCBERUJVR0lORk9EX1VSTFM9ICR7YWJzX2J1aWxkZGly fS8uLi9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QgJFZFUkJPU0UgLUYgLVIgLWQgJERCIC1wICRQT1JU MSAtdDAgLWcwIC12IFIgRiA+IHZsb2ckUE9SVDEgMj4mMSAmCitQSUQxPSQhCit0ZW1wZmlsZXMg dmxvZyRQT1JUMQorZXJyZmlsZXMgdmxvZyRQT1JUMQorIyBTZXJ2ZXIgbXVzdCBiZWNvbWUgcmVh ZHkKK3dhaXRfcmVhZHkgJFBPUlQxICdyZWFkeScgMQorZXhwb3J0IERFQlVHSU5GT0RfVVJMUz1o dHRwOi8vMTI3LjAuMC4xOiRQT1JUMS8gICAjIG9yIHdpdGhvdXQgdHJhaWxpbmcgLworIyBDaGVj ayB0aHJlYWQgY29tbSBuYW1lcworcHMgLXEgJFBJRDEgLWUgLUwgLW8gJyVwICVjICVhJyB8IGdy ZXAgZ3Jvb20KK3BzIC1xICRQSUQxIC1lIC1MIC1vICclcCAlYyAlYScgfCBncmVwIHNjYW4KK3Bz IC1xICRQSUQxIC1lIC1MIC1vICclcCAlYyAlYScgfCBncmVwIHRyYXZlcnNlCisKKyMgV2UgdXNl IC10MCBhbmQgLWcwIGhlcmUgdG8gdHVybiBvZmYgdGltZS1iYXNlZCBzY2FubmluZyAmIGdyb29t aW5nLgorIyBGb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UganVzdCBzaWMgU0lHVVNSMSAvIFNJR1VT UjIgYXQgdGhlIHByb2Nlc3MuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIENvbXBpbGUgYSBzaW1w bGUgcHJvZ3JhbSwgc3RyaXAgaXRzIGRlYnVnaW5mbyBhbmQgc2F2ZSB0aGUgYnVpbGQtaWQuCisj IEFsc28gbW92ZSB0aGUgZGVidWdpbmZvIGludG8gYW5vdGhlciBkaXJlY3Rvcnkgc28gdGhhdCBl bGZ1dGlscworIyBjYW5ub3QgZmluZCBpdCB3aXRob3V0IGRlYnVnaW5mb2QuCitlY2hvICJpbnQg bWFpbigpIHsgcmV0dXJuIDA7IH0iID4gJHtQV0R9L3Byb2cuYwordGVtcGZpbGVzIHByb2cuYwor IyBDcmVhdGUgYSBzdWJkaXJlY3RvcnkgdG8gY29uZm91bmQgc291cmNlIHBhdGggbmFtZXMKK21r ZGlyIGZvb2JhcgorZ2NjIC1XbCwtLWJ1aWxkLWlkIC1nIC1vIHByb2cgJHtQV0R9L2Zvb2Jhci8v Ly4vLi4vcHJvZy5jCit0ZXN0cnVuICR7YWJzX3RvcF9idWlsZGRpcn0vc3JjL3N0cmlwIC1nIC1m IHByb2cuZGVidWcgJHtQV0R9L3Byb2cKK0JVSUxESUQ9YGVudiBMRF9MSUJSQVJZX1BBVEg9JGxk cGF0aCAke2Fic19idWlsZGRpcn0vLi4vc3JjL3JlYWRlbGYgXAorICAgICAgICAgIC1hIHByb2cg fCBncmVwICdCdWlsZCBJRCcgfCBjdXQgLWQgJyAnIC1mIDdgCisKK212IHByb2cgRgorbXYgcHJv Zy5kZWJ1ZyBGCitraWxsIC1VU1IxICRQSUQxCisjIFdhaXQgdGlsbCBib3RoIGZpbGVzIGFyZSBp biB0aGUgaW5kZXguCit3YWl0X3JlYWR5ICRQT1JUMSAndGhyZWFkX3dvcmtfdG90YWx7cm9sZT0i dHJhdmVyc2UifScgMQord2FpdF9yZWFkeSAkUE9SVDEgJ3RocmVhZF93b3JrX3BlbmRpbmd7cm9s ZT0ic2NhbiJ9JyAwCit3YWl0X3JlYWR5ICRQT1JUMSAndGhyZWFkX2J1c3l7cm9sZT0ic2NhbiJ9 JyAwCisKK2NwIC1ydnAgJHthYnNfc3JjZGlyfS9kZWJ1Z2luZm9kLXJwbXMgUgoraWYgWyAiJHpz dGQiID0gImZhbHNlIiBdOyB0aGVuICAjIG51a2UgdGhlIHpzdGQgZmVkb3JhIDMxIG9uZXMKKyAg ICBybSAtdnJmIFIvZGVidWdpbmZvZC1ycG1zL2ZlZG9yYTMxCitmaQorCitraWxsIC1VU1IxICRQ SUQxCisjIFdhaXQgdGlsbCBib3RoIGZpbGVzIGFyZSBpbiB0aGUgaW5kZXggYW5kIHNjYW4vaW5k ZXggZnVsbHkgZmluaXNoZWQKK3dhaXRfcmVhZHkgJFBPUlQxICd0aHJlYWRfd29ya190b3RhbHty b2xlPSJ0cmF2ZXJzZSJ9JyAyCit3YWl0X3JlYWR5ICRQT1JUMSAndGhyZWFkX3dvcmtfcGVuZGlu Z3tyb2xlPSJzY2FuIn0nIDAKK3dhaXRfcmVhZHkgJFBPUlQxICd0aHJlYWRfYnVzeXtyb2xlPSJz Y2FuIn0nIDAKKyMgQWxsIHJwbXMgbmVlZCB0byBiZSBpbiB0aGUgaW5kZXgsIGV4Y2VwdCB0aGUg ZHVtbXkgcGVybWlzc2lvbi0wMDAgb25lCitycG1zPSQoZmluZCBSIC1uYW1lIFwqcnBtIHwgZ3Jl cCAtdiBub3RoaW5nIHwgd2MgLWwpCit3YWl0X3JlYWR5ICRQT1JUMSAnc2Nhbm5lZF9maWxlc190 b3RhbHtzb3VyY2U9Ii5ycG0gYXJjaGl2ZSJ9JyAkcnBtcwora2lsbCAtVVNSMSAkUElEMSAgIyB0 d28gaGl0cyBvZiBTSUdVU1IxIG1heSBiZSBuZWVkZWQgdG8gcmVzb2x2ZSAuZGVidWctPmR3ei0+ c3JlZnMKKyMgV2FpdCB0aWxsIGJvdGggZmlsZXMgYXJlIGluIHRoZSBpbmRleCBhbmQgc2Nhbi9p bmRleCBmdWxseSBmaW5pc2hlZAord2FpdF9yZWFkeSAkUE9SVDEgJ3RocmVhZF93b3JrX3RvdGFs e3JvbGU9InRyYXZlcnNlIn0nIDMKK3dhaXRfcmVhZHkgJFBPUlQxICd0aHJlYWRfd29ya19wZW5k aW5ne3JvbGU9InNjYW4ifScgMAord2FpdF9yZWFkeSAkUE9SVDEgJ3RocmVhZF9idXN5e3JvbGU9 InNjYW4ifScgMAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIFBSMjcyNzcKKyMgTWFrZSBhIHNpbXBs ZSByZXF1ZXN0IHRvIHRoZSBkZWJ1Z2luZm9kIHNlcnZlciBhbmQgY2hlY2sgZGVidWdpbmZvZC1m aW5kJ3MgdmxvZyB0byBzZWUgaWYKKyMgdGhlIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXJlIHJlY2Vp dmVkLgorcm0gLXJmICRERUJVR0lORk9EX0NBQ0hFX1BBVEgKK2VudiBERUJVR0lORk9EX1VSTFM9 Imh0dHA6Ly8xMjcuMC4wLjE6IiRQT1JUMSBMRF9MSUJSQVJZX1BBVEg9JGxkcGF0aCAke2Fic190 b3BfYnVpbGRkaXJ9L2RlYnVnaW5mb2QvZGVidWdpbmZvZC1maW5kXAorICAgIC12dnYgZXhlY3V0 YWJsZSBGL3Byb2cgPiB2bG9nLWZpbmQkUE9SVDEuMSAyPiYxCit0ZW1wZmlsZXMgdmxvZy1maW5k JFBPUlQxLjEKK2dyZXAgJ0NvbnRlbnQtTGVuZ3RoOiAnIHZsb2ctZmluZCRQT1JUMS4xCitncmVw ICdDb25uZWN0aW9uOiAnIHZsb2ctZmluZCRQT1JUMS4xCitncmVwICdDYWNoZS1Db250cm9sOiAn IHZsb2ctZmluZCRQT1JUMS4xCitncmVwICdYLURFQlVHSU5GT0QtRklMRTogJyB2bG9nLWZpbmQk UE9SVDEuMQorZ3JlcCAnWC1ERUJVR0lORk9ELVNJWkU6ICcgdmxvZy1maW5kJFBPUlQxLjEKKwor IyBDaGVjayB0byBzZWUgaWYgYW4gZXhlY3V0YWJsZSBmaWxlIGxvY2F0ZWQgaW4gYW4gYXJjaGl2 ZSBwcmludHMgdGhlIGZpbGUncyBkZXNjcmlwdGlvbiBhbmQgYXJjaGl2ZQorZW52IERFQlVHSU5G T0RfVVJMUz0iaHR0cDovLzEyNy4wLjAuMToiJFBPUlQxIExEX0xJQlJBUllfUEFUSD0kbGRwYXRo ICR7YWJzX3RvcF9idWlsZGRpcn0vZGVidWdpbmZvZC9kZWJ1Z2luZm9kLWZpbmRcCisgICAgLXZ2 diBleGVjdXRhYmxlIGMzNjcwOGE3ODYxOGQ1OTdkZWUxNWQwZGM5ODlmMDkzY2E1ZjkxMjAgPiB2 bG9nLWZpbmQkUE9SVDEuMiAyPiYxCit0ZW1wZmlsZXMgdmxvZy1maW5kJFBPUlQxLjIKK2dyZXAg J0NvbnRlbnQtTGVuZ3RoOiAnIHZsb2ctZmluZCRQT1JUMS4yCitncmVwICdDb25uZWN0aW9uOiAn IHZsb2ctZmluZCRQT1JUMS4yCitncmVwICdDYWNoZS1Db250cm9sOiAnIHZsb2ctZmluZCRQT1JU MS4yCitncmVwICdYLURFQlVHSU5GT0QtRklMRTogJyB2bG9nLWZpbmQkUE9SVDEuMgorZ3JlcCAn WC1ERUJVR0lORk9ELVNJWkU6ICcgdmxvZy1maW5kJFBPUlQxLjIKK2dyZXAgJ1gtREVCVUdJTkZP RC1BUkNISVZFOiAnIHZsb2ctZmluZCRQT1JUMS4yCisKK2tpbGwgJFBJRDEKK3dhaXQgJFBJRDEK K1BJRDE9MAorZXhpdCAwCmRpZmYgLS1naXQgYS90ZXN0cy90ZXN0LXN1YnIuc2ggYi90ZXN0cy90 ZXN0LXN1YnIuc2gKaW5kZXggNDFlOTVlMzEuLjk1ZGNiYjI2IDEwMDY0NAotLS0gYS90ZXN0cy90 ZXN0LXN1YnIuc2gKKysrIGIvdGVzdHMvdGVzdC1zdWJyLnNoCkBAIC00Myw5ICs0Myw5IEBAIHJl bW92ZV9maWxlcz0KIGV4aXRfY2xlYW51cCgpCiB7CiAgIHJtIC1yZiAke1BXRH0vLmNsaWVudF9j YWNoZSoKLSAgcm0gLWYgJHJlbW92ZV9maWxlczsgCisgIHJtIC1mICRyZW1vdmVfZmlsZXM7CiAg IGxzIC1hICR7UFdEfQotICBjZCAuLjsgCisgIGNkIC4uOwogICBybWRpciAkdGVzdF9kaXIKIH0K IHRyYXAgZXhpdF9jbGVhbnVwIDAKQEAgLTIyOCw3ICsyMjgsNyBAQCBjbGVhbnVwKCkKIHsKICAg aWYgWyAkUElEMSAtbmUgMCBdOyB0aGVuIGtpbGwgJFBJRDE7IHdhaXQgJFBJRDE7IGZpCiAgIGlm IFsgJFBJRDIgLW5lIDAgXTsgdGhlbiBraWxsICRQSUQyOyB3YWl0ICRQSUQyOyBmaQotICBybSAt cmYgJHtQV0R9Ly5jbGllbnRfY2FjaGUgRiBSIEQgTCBaICR7UFdEfS9mb29iYXIgJHtQV0R9L21v Y2t0cmVlIAorICBybSAtcmYgJHtQV0R9Ly5jbGllbnRfY2FjaGUgRiBSIEQgTCBaICR7UFdEfS9m b29iYXIgJHtQV0R9L21vY2t0cmVlCiAgIGV4aXRfY2xlYW51cAogfQogdHJhcCBjbGVhbnVwIDAg MSAyIDMgNSA5IDE1CkBAIC0zMTYsMTIgKzMxNiwxMiBAQCBhcmNoaXZlX3Rlc3QoKSB7CiAKIGdl dF9wb3J0cygpIHsKICAgd2hpbGUgdHJ1ZTsgZG8KLSAgICBQT1JUMT1gZXhwciAnKCcgJFJBTkRP TSAlIDEwMDAgJyknICsgOTAwMGAKKyAgICBQT1JUMT1gZXhwciAnKCcgJFJBTkRPTSAlIDEwMCAn KScgKyAkYmFzZWAKICAgICBzcyAtYXRuIHwgZmdyZXAgIjokUE9SVDEiIHx8IGJyZWFrCiAgIGRv bmUKICMgU29tZSB0ZXN0cyB3aWxsIHVzZSB0d28gc2VydmVycywgc28gYXNzaWduIHRoZSBzZWNv bmQgdmFyCiAgIHdoaWxlIHRydWU7IGRvCi0gICAgUE9SVDI9YGV4cHIgJygnICRSQU5ET00gJSAx MDAwICcpJyArIDkwMDBgCisgICAgUE9SVDI9YGV4cHIgJygnICRSQU5ET00gJSAxMDAgJyknICsg JGJhc2VgCiAgICAgc3MgLWF0biB8IGZncmVwICI6JFBPUlQyIiAmJiAkUE9SVDEgLW5lICRQT1JU MiB8fCBicmVhawogICBkb25lCiAKLS0gCjIuMzEuMQoK --000000000000a1304b05cba831b3--