From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, T_PDS_OTHER_BAD_TLD autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 10494 invoked from network); 28 Jul 2020 10:53:32 -0000 Received: from ns1.primenet.com.au (HELO primenet.com.au) (203.24.36.2) by inbox.vuxu.org with ESMTPUTF8; 28 Jul 2020 10:53:32 -0000 Received: (qmail 7505 invoked by alias); 28 Jul 2020 10:53:25 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: Sender: zsh-workers@zsh.org X-Seq: 46275 Received: (qmail 16654 invoked by uid 1010); 28 Jul 2020 10:53:25 -0000 X-Qmail-Scanner-Diagnostics: from mail-il1-f171.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.102.3/25884. spamassassin: 3.4.4. Clear:RC:0(209.85.166.171):SA:0(-2.0/5.0):. Processed in 1.431356 secs); 28 Jul 2020 10:53:25 -0000 X-Envelope-From: roman.perepelitsa@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 209.85.166.171 as permitted sender) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=bQXazucROLmcWTe7V9O2GWwzPJgrQBJf+gt+ZgQtHZ8=; b=roUvD3NbUSbRNrReC26XNXjKLiW5NvTWUVXS107JRWMFl0j6YrleGWviJ3eVLvYZAL P/8SpcK6loMw9xGlKgWsgobFll9WhLNdslSxD++hn7KRIanVcWRKF+uoQyMLsVOJJGpR q6YhSlLRA9ynVO3fBsv7XeYY9E1Ne2RPg+Buwcc6QJ8O7zxsYkoMwgEdw3CePY/4/vgy IxqYuojfL5J1owYOaWoqEzvzSnOEf7zSf+idSkwovqG1foObATqXJEHGojICN29igdBJ bS6AjMb4JcqZmLbxxMsrG8CuwgHR5dJ0cdBMbJzEcKNGe2IoF8hch6BPA9Ecv0MFIiBz dafQ== X-Gm-Message-State: AOAM532vxD2kQZ9XPWTk+QlZt1/66BW7BeIGZzYNS/z5BruLvmea4WeH 16zwaK78apZ4EO0LHSVrg5DeAPiOI5gn5Aapmkk= X-Google-Smtp-Source: ABdhPJyKdXiTkNQ4E24p06IGlj9mqlvkHAdpAdwh9Re38vqcMSTvoes0tT0o12QKcfQq0xuzKwNZ363tLpyXaxAuYpQ= X-Received: by 2002:a92:6e05:: with SMTP id j5mr6955658ilc.169.1595933570429; Tue, 28 Jul 2020 03:52:50 -0700 (PDT) MIME-Version: 1.0 References: <35bf1c7b-163f-4baf-9d5a-c1d7e72459ec@www.fastmail.com> <20200728075343.2cfb1ebf@tarpaulin.shahaf.local2> <727383568.664238.1595924724485@mail2.virginmedia.com> In-Reply-To: <727383568.664238.1595924724485@mail2.virginmedia.com> From: Roman Perepelitsa Date: Tue, 28 Jul 2020 12:52:38 +0200 Message-ID: Subject: Re: 5.8: LTO exposes some new issues To: Peter Stephenson Cc: Zsh hackers list Content-Type: multipart/mixed; boundary="0000000000008e304b05ab7e3dfa" --0000000000008e304b05ab7e3dfa Content-Type: text/plain; charset="UTF-8" On Tue, Jul 28, 2020 at 10:26 AM Peter Stephenson wrote: > > > On 28 July 2020 at 08:53 Daniel Shahaf wrote: > > > > It's clearly correct, but as written, the patch loses the distinction > > that these members are private to hashtable.c and should not be accessed > > by other parts of the code. Could you address that, please? If > > there's an easy way to have the compiler enforce this restriction, > > great; else, we can at least add a comment. > > One way is to have a "struct { ... } private" substructure, > which it makes it clear what's going on within the code (though comments > are obviously useful, too). How about this? The diff is a bit larger but the code is fairly straightforward. Only hashtable.c has access to internal fields, just like before the patch. In a nutshell, struct hashtable has only public data members. Within hashtable.c there is struct hashtableimpl, which has struct hashtable as the first data member. C allows casting a pointer to a struct to a pointer to its first data member and back without violating aliasing rules. Thus hashtable.c can cast struct hashtable* to struct hashtableimpl* in order to get access to internal fields. Roman. --0000000000008e304b05ab7e3dfa Content-Type: text/plain; charset="US-ASCII"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kd5tkqtw0 ZGlmZiAtLWdpdCBhL1NyYy9oYXNodGFibGUuYyBiL1NyYy9oYXNodGFibGUuYwppbmRleCBlMjEw ZGRlY2EuLmU0OWY0ZTFkYSAxMDA2NDQKLS0tIGEvU3JjL2hhc2h0YWJsZS5jCisrKyBiL1NyYy9o YXNodGFibGUuYwpAQCAtMjgsMjUgKzI4LDI3IEBACiAgKi8KIAogI2luY2x1ZGUgIi4uL2NvbmZp Zy5oIgorI2luY2x1ZGUgInpzaC5tZGgiCisjaW5jbHVkZSAiaGFzaHRhYmxlLnBybyIKKwordHlw ZWRlZiBzdHJ1Y3Qgc2NhbnN0YXR1cyAqU2NhblN0YXR1czsKK3R5cGVkZWYgc3RydWN0IGhhc2h0 YWJsZWltcGwqIEhhc2hUYWJsZUltcGw7CisKK3N0cnVjdCBoYXNodGFibGVpbXBsIHsKKyAgICBz dHJ1Y3QgaGFzaHRhYmxlIHB1YjsKKworICAgIC8qIEhBU0hUQUJMRSBJTlRFUk5BTCBNRU1CRVJT ICovCisgICAgU2NhblN0YXR1cyBzY2FuOwkJLyogc3RhdHVzIG9mIGEgc2NhbiBvdmVyIHRoaXMg aGFzaHRhYmxlICAgICAqLwogCiAjaWZkZWYgWlNIX0hBU0hfREVCVUcKLSMgZGVmaW5lIEhBU0hU QUJMRV9ERUJVR19NRU1CRVJTIFwKLSAgICAvKiBNZW1iZXJzIG9mIHN0cnVjdCBoYXNodGFibGUg dXNlZCBmb3IgZGVidWdnaW5nIGhhc2ggdGFibGVzICovIFwKLSAgICBIYXNoVGFibGUgbmV4dCwg bGFzdDsJLyogbGlua2VkIGxpc3Qgb2YgYWxsIGhhc2ggdGFibGVzICAgICAgICAgICAqLyBcCi0g ICAgY2hhciAqdGFibGVuYW1lOwkJLyogc3RyaW5nIGNvbnRhaW5pbmcgbmFtZSBvZiB0aGUgaGFz aCB0YWJsZSAqLyBcCisgICAgLyogSEFTSFRBQkxFIERFQlVHIE1FTUJFUlMgKi8KKyAgICBIYXNo VGFibGVJbXBsIG5leHQsIGxhc3Q7CS8qIGxpbmtlZCBsaXN0IG9mIGFsbCBoYXNoIHRhYmxlcyAg ICAgICAgICAgKi8KKyAgICBjaGFyICp0YWJsZW5hbWU7CQkvKiBzdHJpbmcgY29udGFpbmluZyBu YW1lIG9mIHRoZSBoYXNoIHRhYmxlICovCiAgICAgUHJpbnRUYWJsZVN0YXRzIHByaW50aW5mbzsJ LyogcG9pbnRlciB0byBmdW5jdGlvbiB0byBwcmludCB0YWJsZSBzdGF0cyAqLwotI2Vsc2UgLyog IVpTSF9IQVNIX0RFQlVHICovCi0jIGRlZmluZSBIQVNIVEFCTEVfREVCVUdfTUVNQkVSUwogI2Vu ZGlmIC8qICFaU0hfSEFTSF9ERUJVRyAqLworfTsKIAotI2RlZmluZSBIQVNIVEFCTEVfSU5URVJO QUxfTUVNQkVSUyBcCi0gICAgU2NhblN0YXR1cyBzY2FuOwkJLyogc3RhdHVzIG9mIGEgc2NhbiBv dmVyIHRoaXMgaGFzaHRhYmxlICAgICAqLyBcCi0gICAgSEFTSFRBQkxFX0RFQlVHX01FTUJFUlMK LQotdHlwZWRlZiBzdHJ1Y3Qgc2NhbnN0YXR1cyAqU2NhblN0YXR1czsKLQotI2luY2x1ZGUgInpz aC5tZGgiCi0jaW5jbHVkZSAiaGFzaHRhYmxlLnBybyIKK3N0YXRpYyBpbmxpbmUgSGFzaFRhYmxl SW1wbCBpbXBsKEhhc2hUYWJsZSBodCkgeyByZXR1cm4gKEhhc2hUYWJsZUltcGwpaHQ7IH0KIAog LyogU3RydWN0dXJlIGZvciByZWNvcmRpbmcgc3RhdHVzIG9mIGEgaGFzaHRhYmxlIHNjYW4gaW4g cHJvZ3Jlc3MuICBXaGVuIGEgKgogICogc2NhbiBzdGFydHMsIHRoZSAuc2NhbiBtZW1iZXIgb2Yg dGhlIGhhc2h0YWJsZSBzdHJ1Y3R1cmUgcG9pbnRzIHRvIG9uZSAgKgpAQCAtNzEsNyArNzMsOCBA QCBzdHJ1Y3Qgc2NhbnN0YXR1cyB7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CiAKICNpZmRlZiBaU0hfSEFTSF9ERUJVRwotc3RhdGljIEhhc2hUYWJsZSBmaXJzdGh0LCBsYXN0 aHQ7CitzdGF0aWMgdm9pZCBwcmludGhhc2h0YWJpbmZvKEhhc2hUYWJsZSBodCk7CitzdGF0aWMg SGFzaFRhYmxlSW1wbCBmaXJzdGh0LCBsYXN0aHQ7CiAjZW5kaWYgLyogWlNIX0hBU0hfREVCVUcg Ki8KIAogLyogR2VuZXJpYyBoYXNoIGZ1bmN0aW9uICovCkBAIC05NCw5ICs5Nyw5IEBAIGhhc2hl cihjb25zdCBjaGFyICpzdHIpCiBtb2RfZXhwb3J0IEhhc2hUYWJsZQogbmV3aGFzaHRhYmxlKGlu dCBzaXplLCBVTlVTRUQoY2hhciBjb25zdCAqbmFtZSksIFVOVVNFRChQcmludFRhYmxlU3RhdHMg cHJpbnRpbmZvKSkKIHsKLSAgICBIYXNoVGFibGUgaHQ7CisgICAgSGFzaFRhYmxlSW1wbCBodDsK IAotICAgIGh0ID0gKEhhc2hUYWJsZSkgenNoY2FsbG9jKHNpemVvZiAqaHQpOworICAgIGh0ID0g KEhhc2hUYWJsZUltcGwpIHpzaGNhbGxvYyhzaXplb2YgKmh0KTsKICNpZmRlZiBaU0hfSEFTSF9E RUJVRwogICAgIGh0LT5uZXh0ID0gTlVMTDsKICAgICBpZighZmlyc3RodCkKQEAgLTEwOCwxMiAr MTExLDEyIEBAIG5ld2hhc2h0YWJsZShpbnQgc2l6ZSwgVU5VU0VEKGNoYXIgY29uc3QgKm5hbWUp LCBVTlVTRUQoUHJpbnRUYWJsZVN0YXRzIHByaW50aW5mCiAgICAgaHQtPnByaW50aW5mbyA9IHBy aW50aW5mbyA/IHByaW50aW5mbyA6IHByaW50aGFzaHRhYmluZm87CiAgICAgaHQtPnRhYmxlbmFt ZSA9IHp0cmR1cChuYW1lKTsKICNlbmRpZiAvKiBaU0hfSEFTSF9ERUJVRyAqLwotICAgIGh0LT5u b2RlcyA9IChIYXNoTm9kZSAqKSB6c2hjYWxsb2Moc2l6ZSAqIHNpemVvZihIYXNoTm9kZSkpOwot ICAgIGh0LT5oc2l6ZSA9IHNpemU7Ci0gICAgaHQtPmN0ID0gMDsKKyAgICBodC0+cHViLm5vZGVz ID0gKEhhc2hOb2RlICopIHpzaGNhbGxvYyhzaXplICogc2l6ZW9mKEhhc2hOb2RlKSk7CisgICAg aHQtPnB1Yi5oc2l6ZSA9IHNpemU7CisgICAgaHQtPnB1Yi5jdCA9IDA7CiAgICAgaHQtPnNjYW4g PSBOVUxMOwotICAgIGh0LT5zY2FudGFiID0gTlVMTDsKLSAgICByZXR1cm4gaHQ7CisgICAgaHQt PnB1Yi5zY2FudGFiID0gTlVMTDsKKyAgICByZXR1cm4gJmh0LT5wdWI7CiB9CiAKIC8qIERlbGV0 ZSBhIGhhc2ggdGFibGUuICBBZnRlciB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIHVzZWQsIGFueSAq CkBAIC0xMjUsMTggKzEyOCwxOCBAQCBkZWxldGVoYXNodGFibGUoSGFzaFRhYmxlIGh0KQogewog ICAgIGh0LT5lbXB0eXRhYmxlKGh0KTsKICNpZmRlZiBaU0hfSEFTSF9ERUJVRwotICAgIGlmKGh0 LT5uZXh0KQotCWh0LT5uZXh0LT5sYXN0ID0gaHQtPmxhc3Q7CisgICAgaWYoaW1wbChodCktPm5l eHQpCisJaW1wbChodCktPm5leHQtPmxhc3QgPSBpbXBsKGh0KS0+bGFzdDsKICAgICBlbHNlCi0J bGFzdGh0ID0gaHQtPmxhc3Q7Ci0gICAgaWYoaHQtPmxhc3QpCi0JaHQtPmxhc3QtPm5leHQgPSBo dC0+bmV4dDsKKwlsYXN0aHQgPSBpbXBsKGh0KS0+bGFzdDsKKyAgICBpZihpbXBsKGh0KS0+bGFz dCkKKwlpbXBsKGh0KS0+bGFzdC0+bmV4dCA9IGltcGwoaHQpLT5uZXh0OwogICAgIGVsc2UKLQlm aXJzdGh0ID0gaHQtPm5leHQ7Ci0gICAgenNmcmVlKGh0LT50YWJsZW5hbWUpOworCWZpcnN0aHQg PSBpbXBsKGh0KS0+bmV4dDsKKyAgICB6c2ZyZWUoaW1wbChodCktPnRhYmxlbmFtZSk7CiAjZW5k aWYgLyogWlNIX0hBU0hfREVCVUcgKi8KICAgICB6ZnJlZShodC0+bm9kZXMsIGh0LT5oc2l6ZSAq IHNpemVvZihIYXNoTm9kZSkpOwotICAgIHpmcmVlKGh0LCBzaXplb2YoKmh0KSk7CisgICAgemZy ZWUoaHQsIHNpemVvZihzdHJ1Y3QgaGFzaHRhYmxlaW1wbCkpOwogfQogCiAvKiBBZGQgYSBub2Rl IHRvIGEgaGFzaCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTE3NSw3ICsx NzgsNyBAQCBhZGRoYXNobm9kZTIoSGFzaFRhYmxlIGh0LCBjaGFyICpuYW0sIHZvaWQgKm5vZGVw dHIpCiAgICAgaWYgKCFocCkgewogCWhuLT5uZXh0ID0gTlVMTDsKIAlodC0+bm9kZXNbaGFzaHZh bF0gPSBobjsKLQlpZiAoKytodC0+Y3QgPj0gaHQtPmhzaXplICogMiAmJiAhaHQtPnNjYW4pCisJ aWYgKCsraHQtPmN0ID49IGh0LT5oc2l6ZSAqIDIgJiYgIWltcGwoaHQpLT5zY2FuKQogCSAgICBl eHBhbmRoYXNodGFibGUoaHQpOwogCXJldHVybiBOVUxMOwogICAgIH0KQEAgLTE4NSwxNSArMTg4 LDE1IEBAIGFkZGhhc2hub2RlMihIYXNoVGFibGUgaHQsIGNoYXIgKm5hbSwgdm9pZCAqbm9kZXB0 cikKIAlodC0+bm9kZXNbaGFzaHZhbF0gPSBobjsKIAlyZXBsYWNpbmc6CiAJaG4tPm5leHQgPSBo cC0+bmV4dDsKLQlpZihodC0+c2NhbikgewotCSAgICBpZihodC0+c2Nhbi0+c29ydGVkKSB7Ci0J CUhhc2hOb2RlICpoYXNodGFiID0gaHQtPnNjYW4tPnUucy5oYXNodGFiOworCWlmKGltcGwoaHQp LT5zY2FuKSB7CisJICAgIGlmKGltcGwoaHQpLT5zY2FuLT5zb3J0ZWQpIHsKKwkJSGFzaE5vZGUg Kmhhc2h0YWIgPSBpbXBsKGh0KS0+c2Nhbi0+dS5zLmhhc2h0YWI7CiAJCWludCBpOwotCQlmb3Io aSA9IGh0LT5zY2FuLT51LnMuY3Q7IGktLTsgKQorCQlmb3IoaSA9IGltcGwoaHQpLT5zY2FuLT51 LnMuY3Q7IGktLTsgKQogCQkgICAgaWYoaGFzaHRhYltpXSA9PSBocCkKIAkJCWhhc2h0YWJbaV0g PSBobjsKLQkgICAgfSBlbHNlIGlmKGh0LT5zY2FuLT51LnUgPT0gaHApCi0JCWh0LT5zY2FuLT51 LnUgPSBobjsKKwkgICAgfSBlbHNlIGlmKGltcGwoaHQpLT5zY2FuLT51LnUgPT0gaHApCisJCWlt cGwoaHQpLT5zY2FuLT51LnUgPSBobjsKIAl9CiAJcmV0dXJuIGhwOwogICAgIH0KQEAgLTIxMSw3 ICsyMTQsNyBAQCBhZGRoYXNobm9kZTIoSGFzaFRhYmxlIGh0LCBjaGFyICpuYW0sIHZvaWQgKm5v ZGVwdHIpCiAgICAgLyogZWxzZSBqdXN0IGFkZCBpdCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qg Ki8KICAgICBobi0+bmV4dCA9IGh0LT5ub2Rlc1toYXNodmFsXTsKICAgICBodC0+bm9kZXNbaGFz aHZhbF0gPSBobjsKLSAgICBpZiAoKytodC0+Y3QgPj0gaHQtPmhzaXplICogMiAmJiAhaHQtPnNj YW4pCisgICAgaWYgKCsraHQtPmN0ID49IGh0LT5oc2l6ZSAqIDIgJiYgIWltcGwoaHQpLT5zY2Fu KQogICAgICAgICBleHBhbmRoYXNodGFibGUoaHQpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAt Mjg0LDE1ICsyODcsMTUgQEAgcmVtb3ZlaGFzaG5vZGUoSGFzaFRhYmxlIGh0LCBjb25zdCBjaGFy ICpuYW0pCiAJaHQtPm5vZGVzW2hhc2h2YWxdID0gaHAtPm5leHQ7CiAJZ290aXQ6CiAJaHQtPmN0 LS07Ci0JaWYoaHQtPnNjYW4pIHsKLQkgICAgaWYoaHQtPnNjYW4tPnNvcnRlZCkgewotCQlIYXNo Tm9kZSAqaGFzaHRhYiA9IGh0LT5zY2FuLT51LnMuaGFzaHRhYjsKKwlpZihpbXBsKGh0KS0+c2Nh bikgeworCSAgICBpZihpbXBsKGh0KS0+c2Nhbi0+c29ydGVkKSB7CisJCUhhc2hOb2RlICpoYXNo dGFiID0gaW1wbChodCktPnNjYW4tPnUucy5oYXNodGFiOwogCQlpbnQgaTsKLQkJZm9yKGkgPSBo dC0+c2Nhbi0+dS5zLmN0OyBpLS07ICkKKwkJZm9yKGkgPSBpbXBsKGh0KS0+c2Nhbi0+dS5zLmN0 OyBpLS07ICkKIAkJICAgIGlmKGhhc2h0YWJbaV0gPT0gaHApCiAJCQloYXNodGFiW2ldID0gTlVM TDsKLQkgICAgfSBlbHNlIGlmKGh0LT5zY2FuLT51LnUgPT0gaHApCi0JCWh0LT5zY2FuLT51LnUg PSBocC0+bmV4dDsKKwkgICAgfSBlbHNlIGlmKGltcGwoaHQpLT5zY2FuLT51LnUgPT0gaHApCisJ CWltcGwoaHQpLT5zY2FuLT51LnUgPSBocC0+bmV4dDsKIAl9CiAJcmV0dXJuIGhwOwogICAgIH0K QEAgLTM5OSw3ICs0MDIsNyBAQCBzY2FubWF0Y2h0YWJsZShIYXNoVGFibGUgaHQsIFBhdHByb2cg cHByb2csIGludCBzb3J0ZWQsCiAJc3Quc29ydGVkID0gMTsKIAlzdC51LnMuaGFzaHRhYiA9IGhu c29ydHRhYjsKIAlzdC51LnMuY3QgPSBjdDsKLQlodC0+c2NhbiA9ICZzdDsKKwlpbXBsKGh0KS0+ c2NhbiA9ICZzdDsKIAogCWZvciAoaHRwID0gaG5zb3J0dGFiLCBpID0gMDsgaSA8IGN0OyBpKyss IGh0cCsrKSB7CiAJICAgIGlmICgoIWZsYWdzMSB8fCAoKCpodHApLT5mbGFncyAmIGZsYWdzMSkp ICYmCkBAIC00MTAsMTMgKzQxMywxMyBAQCBzY2FubWF0Y2h0YWJsZShIYXNoVGFibGUgaHQsIFBh dHByb2cgcHByb2csIGludCBzb3J0ZWQsCiAJICAgIH0KIAl9CiAKLQlodC0+c2NhbiA9IE5VTEw7 CisJaW1wbChodCktPnNjYW4gPSBOVUxMOwogICAgIH0gZWxzZSB7CiAJaW50IGksIGhzaXplID0g aHQtPmhzaXplOwogCUhhc2hOb2RlICpub2RlcyA9IGh0LT5ub2RlczsKIAogCXN0LnNvcnRlZCA9 IDA7Ci0JaHQtPnNjYW4gPSAmc3Q7CisJaW1wbChodCktPnNjYW4gPSAmc3Q7CiAKIAlmb3IgKGkg PSAwOyBpIDwgaHNpemU7IGkrKykKIAkgICAgZm9yIChzdC51LnUgPSBub2Rlc1tpXTsgc3QudS51 OyApIHsKQEAgLTQyOSw3ICs0MzIsNyBAQCBzY2FubWF0Y2h0YWJsZShIYXNoVGFibGUgaHQsIFBh dHByb2cgcHByb2csIGludCBzb3J0ZWQsCiAJCX0KIAkgICAgfQogCi0JaHQtPnNjYW4gPSBOVUxM OworCWltcGwoaHQpLT5zY2FuID0gTlVMTDsKICAgICB9CiAKICAgICByZXR1cm4gbWF0Y2g7CkBA IC01MzEsNyArNTM0LDcgQEAgcHJpbnRoYXNodGFiaW5mbyhIYXNoVGFibGUgaHQpCiAgICAgaW50 IGNoYWlubGVuW01BWERFUFRIICsgMV07CiAgICAgaW50IGksIHRtcGNvdW50LCB0b3RhbDsKIAot ICAgIHByaW50ZigibmFtZSBvZiB0YWJsZSAgIDogJXNcbiIsICAgaHQtPnRhYmxlbmFtZSk7Cisg ICAgcHJpbnRmKCJuYW1lIG9mIHRhYmxlICAgOiAlc1xuIiwgICBpbXBsKGh0KS0+dGFibGVuYW1l KTsKICAgICBwcmludGYoInNpemUgb2Ygbm9kZXNbXSA6ICVkXG4iLCAgIGh0LT5oc2l6ZSk7CiAg ICAgcHJpbnRmKCJudW1iZXIgb2Ygbm9kZXMgOiAlZFxuXG4iLCBodC0+Y3QpOwogCkBAIC01NjAs MTIgKzU2MywxMiBAQCBwcmludGhhc2h0YWJpbmZvKEhhc2hUYWJsZSBodCkKIGludAogYmluX2hh c2hpbmZvKFVOVVNFRChjaGFyICpuYW0pLCBVTlVTRUQoY2hhciAqKmFyZ3MpLCBVTlVTRUQoT3B0 aW9ucyBvcHMpLCBVTlVTRUQoaW50IGZ1bmMpKQogewotICAgIEhhc2hUYWJsZSBodDsKKyAgICBI YXNoVGFibGVJbXBsIGh0OwogCiAgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgICBxdWV1ZV9zaWduYWxzKCk7CiAg ICAgZm9yKGh0ID0gZmlyc3RodDsgaHQ7IGh0ID0gaHQtPm5leHQpIHsKLQlodC0+cHJpbnRpbmZv KGh0KTsKKwlodC0+cHJpbnRpbmZvKCZodC0+cHViKTsKIAlwcmludGYoIi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgIH0KICAgICB1 bnF1ZXVlX3NpZ25hbHMoKTsKZGlmZiAtLWdpdCBhL1NyYy96c2guaCBiL1NyYy96c2guaAppbmRl eCBjNDhiZTRmZmQuLjYxMDFjZjI0MiAxMDA2NDQKLS0tIGEvU3JjL3pzaC5oCisrKyBiL1NyYy96 c2guaApAQCAtMTIwNCwxMCArMTIwNCw2IEBAIHN0cnVjdCBoYXNodGFibGUgewogICAgIEZyZWVO b2RlRnVuYyBmcmVlbm9kZTsJLyogcG9pbnRlciB0byBmdW5jdGlvbiB0byBmcmVlIGEgbm9kZSAg ICAgICAgICovCiAgICAgU2NhbkZ1bmMgcHJpbnRub2RlOwkJLyogcG9pbnRlciB0byBmdW5jdGlv biB0byBwcmludCBhIG5vZGUgICAgICAgICovCiAgICAgU2NhblRhYkZ1bmMgc2NhbnRhYjsJLyog cG9pbnRlciB0byBmdW5jdGlvbiB0byBzY2FuIHRhYmxlICAgICAgICAgICovCi0KLSNpZmRlZiBI QVNIVEFCTEVfSU5URVJOQUxfTUVNQkVSUwotICAgIEhBU0hUQUJMRV9JTlRFUk5BTF9NRU1CRVJT CS8qIGludGVybmFsIHVzZSBpbiBoYXNodGFibGUuYyAgICAgICAgICAgICAgICAqLwotI2VuZGlm CiB9OwogCiAvKiBnZW5lcmljIGhhc2ggdGFibGUgbm9kZSAqLwo= --0000000000008e304b05ab7e3dfa--