From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 76FB8C433F5 for ; Fri, 8 Apr 2022 02:45:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=x4Qe1o0Gt9fA0IGxMqJwhlxxfhha42vlOfxzESRNPYE=; b=B3KBAOEsy0N9iZ rp5ibT2r7I2TijFgXhZruSTNPF9Bd2zIfbJCqIVHoddY4wbdRQ/ptjosQyyFtoONPceipv2hdUWIn zOn/eVjtyN3bpm9Nheq2QeCiNtQ7gfwcv2hMchr7RjSb1DojgmzNi2xn1yfEPFLOoYYFNlG1TRwSl uch30+J6U14qeFO9azPPiCMF+AJ6KodsDxlWAnV6XC9qxgEiyB/+6py8qpMQguWSwhmkoFR773gps TsPWot0NXuGHWI3Qey8ClZqP6CkiXoT4EPvYAxK74JZFbP2CdcMvzn9HPiU1KZyMXxVctpMgikkRS LdeIQHNRi0XYdjwHULNQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ncebX-00EgFD-U2; Fri, 08 Apr 2022 02:44:08 +0000 Received: from szxga03-in.huawei.com ([45.249.212.189]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ncebS-00EgDM-Eb for linux-arm-kernel@lists.infradead.org; Fri, 08 Apr 2022 02:44:06 +0000 Received: from kwepemi100003.china.huawei.com (unknown [172.30.72.56]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4KZMsY1yX8zBrgq; Fri, 8 Apr 2022 10:39:45 +0800 (CST) Received: from kwepemm600017.china.huawei.com (7.193.23.234) by kwepemi100003.china.huawei.com (7.221.188.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 8 Apr 2022 10:43:57 +0800 Received: from [10.174.179.234] (10.174.179.234) by kwepemm600017.china.huawei.com (7.193.23.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Fri, 8 Apr 2022 10:43:56 +0800 Message-ID: Date: Fri, 8 Apr 2022 10:43:55 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: Re: [RFC PATCH -next V2 7/7] arm64: add pagecache reading to machine check safe To: Robin Murphy , Mark Rutland , CC: Andrew Morton , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , Catalin Marinas , Will Deacon , Alexander Viro , , "H. Peter Anvin" , , , , Kefeng Wang References: <20220406091311.3354723-1-tongtiangen@huawei.com> <20220406091311.3354723-8-tongtiangen@huawei.com> From: Tong Tiangen In-Reply-To: X-Originating-IP: [10.174.179.234] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To kwepemm600017.china.huawei.com (7.193.23.234) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220407_194402_882453_11401328 X-CRM114-Status: GOOD ( 28.80 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgrlnKggMjAyMi80LzcgMjM6NTMsIFJvYmluIE11cnBoeSDlhpnpgZM6Cj4gT24gMjAyMi0wNC0w NyAxNTo1NiwgVG9uZyBUaWFuZ2VuIHdyb3RlOgo+Pgo+Pgo+PiDlnKggMjAyMi80LzYgMTk6Mjcs IE1hcmsgUnV0bGFuZCDlhpnpgZM6Cj4+PiBPbiBXZWQsIEFwciAwNiwgMjAyMiBhdCAwOToxMzox MUFNICswMDAwLCBUb25nIFRpYW5nZW4gd3JvdGU6Cj4+Pj4gV2hlbiB1c2VyIHByb2Nlc3MgcmVh ZGluZyBmaWxlLCB0aGUgZGF0YSBpcyBjYWNoZWQgaW4gcGFnZWNhY2hlIGFuZAo+Pj4+IHRoZSBk YXRhIGJlbG9uZ3MgdG8gdGhlIHVzZXIgcHJvY2VzcywgV2hlbiBtYWNoaW5lIGNoZWNrIGVycm9y IGlzCj4+Pj4gZW5jb3VudGVyZWQgZHVyaW5nIHBhZ2VjYWNoZSByZWFkaW5nLCBraWxsaW5nIHRo ZSB1c2VyIHByb2Nlc3MgYW5kCj4+Pj4gaXNvbGF0ZSB0aGUgdXNlciBwYWdlIHdpdGggaGFyZHdh cmUgbWVtb3J5IGVycm9ycyBpcyBhIG1vcmUgcmVhc29uYWJsZQo+Pj4+IGNob2ljZSB0aGFuIGtl cm5lbCBwYW5pYy4KPj4+Pgo+Pj4+IFRoZSBfX2FyY2hfY29weV9tY190b191c2VyKCkgaW4gY29w eV90b191c2VyX21jLlMgaXMgbGFyZ2VseSBib3Jyb3dzCj4+Pj4gZnJvbSBfX2FyY2hfY29weV90 b191c2VyKCkgaW4gY29weV90b191c2VyLlMgYW5kIHRoZSBtYWluIGRpZmZlcmVuY2UKPj4+PiBp cyBfX2FyY2hfY29weV9tY190b191c2VyKCkgYWRkIHRoZSBleHRhYmxlIGVudHJ5IHRvIHN1cHBv cnQgbWFjaGluZQo+Pj4+IGNoZWNrIHNhZmUuCj4+Pgo+Pj4gQXMgd2l0aCBwcmlvciBwYXRjaGVz LCAqd2h5KiBpcyB0aGUgZGlzdGluY3Rpb24gbmVjZXNzYXJ5Pwo+Pj4KPj4+IFRoaXMgcGF0Y2gg YWRkcyBhIGJ1bmNoIG9mIGNvbmRpdGlvbmFsIGxvZ2ljLCBidXQgKnN0cnVjdHVyYWxseSogaXQg Cj4+PiBkb2Vzbid0Cj4+PiBhbHRlciB0aGUgaGFuZGxpbmcgdG8gYmUgc3Vic3RhbnRpYWxseSBk aWZmZXJlbnQgZm9yIHRoZSBNQyBhbmQgCj4+PiBub24tTUMgY2FzZXMuCj4+Pgo+Pj4gVGhpcyBz ZWVtcyBsaWtlIHBvaW50bGVzcyBkdXBsaWNhdGlvbiB0aGF0IGp1c3QgbWFrZXMgaXQgaGFyZGVy IHRvIAo+Pj4gbWFpbnRhaW4KPj4+IHRoaXMgY29kZS4KPj4+Cj4+PiBUaGFua3MsCj4+PiBNYXJr Lgo+Pgo+PiBBZ3JlZWQsIFRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlIGxvb2tzIGEgbGl0dGxlIHVn bHkgYW5kIGhhcmRlciB0byAKPj4gbWFpbnRhaW4uCj4+Cj4+IFRoZSBwdXJwb3NlIG9mIG15IGRv aW5nIHRoaXMgaXMgbm90IGFsbCBjb3B5X3RvX3VzZXIgY2FuIGJlIHJlY292ZXJlZC4KPj4KPj4g QSBtZW1vcnkgZXJyb3IgaXMgY29uc3VtZWQgd2hlbiByZWFkaW5nIHBhZ2VjYWNoZSB1c2luZyBj b3B5X3RvX3VzZXIuCj4+IEkgdGhpbmsgaW4gdGhpcyBzY2VuYXJpbywgb25seSB0aGUgcHJvY2Vz cyBpcyBhZmZlY3RlZCBiZWNhdXNlIGl0IAo+PiBjYW4ndCByZWFkCj4+IHBhZ2VjYWNoZSBkYXRh IGNvcnJlY3RseS4gSnVzdCBraWxsIHRoZSBwcm9jZXNzIGFuZCBkb24ndCBuZWVkIHRoZSB3aG9s ZQo+PiBrZXJuZWwgcGFuaWMuCj4+Cj4+IFNvIEkgbmVlZCB0d28gZGlmZmVyZW50IGNvcHlfdG9f dXNlciBpbXBsZW1lbnRhdGlvbiwgb25lIGlzIGV4aXN0aW5nIAo+PiBfX2FyY2hfY29weV90b191 c2VyLAo+PiB0aGlzIGZ1bmN0aW9uIHdpbGwgcGFuaWMgd2hlbiBjb25zdW1pbmcgbWVtb3J5IGVy cm9ycy4gVGhlIG90aGVyIG9uZSAKPj4gaXMgdGhpcyBuZXcgaGVscGVyCj4+IF9fYXJjaF9jb3B5 X21jX3RvX3VzZXIsIHRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgd2hlbiByZWFkaW5nIHBhZ2VjYWNo ZS4gCj4+IEl0IGNhbiByZWNvdmVyIGZyb20KPj4gY29uc3VtZSBtZW1vcnkgZXJyb3IuCj4gCj4g T0ssIGJ1dCBkbyB3ZSByZWFsbHkgbmVlZCB0d28gYWxtb3N0LWlkZW50aWNhbCBpbXBsZW1lbnRh dGlvbnMgb2YgZXZlcnkgCj4gZnVuY3Rpb24gd2hlcmUgdGhlIG9ubHkgZGlmZmVyZW5jZSBpcyBo b3cgdGhlIGV4Y2VwdGlvbiB0YWJsZSBlbnRyaWVzIAo+IGFyZSBhbm5vdGF0ZWQ/IENvdWxkIHRo ZSBleGNlcHRpb24gaGFuZGxlciBpdHNlbGYganVzdCBmaWd1cmUgb3V0IHdobyAKPiBvd25zIHRo ZSBwYWdlIHdoZXJlIHRoZSBmYXVsdCBvY2N1cnJlZCBhbmQgZGVjaWRlIHdoYXQgYWN0aW9uIHRv IHRha2UgYXMgCj4gYXBwcm9wcmlhdGU/Cj4gCj4gUm9iaW4uCj4gCgpUaGFuayB5b3UsIFJvYmlu LgoKSSBhZGRlZCB0aGlzIGNhbGwgcGF0aCBpbiB0aGlzIHBhdGNoc2V0OiBkb19zZWEoKSAtPiBm aXh1cF9leGNlcHRpb24oKSwgCnRoZSBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgYSBjaGFuY2UgZm9y IHNlYSBmYXVsdCB0byBmaXh1cCAocmVmZXIgcGF0Y2ggCjMvNykuCgpJZiBmaXh1cCBzdWNjZXNz ZnVsLCBwYW5pYyBjYW4gYmUgYXZvaWRlZC4gT3RoZXJ3aXNlLCBwYW5pYyBjYW4gYmUgCmVsaW1p bmF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBvcmlnaW5hbCBsb2dpYy4KCmZpeHVwX2V4Y2VwdGlvbigp IHdpbGwgc2V0IHJlZ3MtPnBjIGFuZCBqdW1wIHRvIHJlZ3MtPnBjIHdoZW4gdGhlIApjb250ZXh0 IHJlY292ZXJ5IG9mIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCgpJZiBtYy1zYWZlLWZpeHVwIGFkZGVk IHRvICBfX2FyY2hfY29weV90b191c2VyKCksICBpbiAqbm9uIHBhZ2VjYWNoZSAKcmVhZGluZyog c2NlbmFyaW8gZW5jb3VudCBtZW1vcnkgZXJyb3Igd2hlbiBjYWxsIF9fYXJjaF9jb3B5X3RvX3Vz ZXIoKSAsIApkb19zZWEoKSAtPiBmaXh1cF9leGNlcHRpb24oKSB3aWxsIG5vdCByZXR1cm4gZmFp bCBhbmQgd2lsbCBtaXNzIHRoZSAKcGFuaWMgbG9naWMgaW4gZG9fc2VhKCkuCgpTbyBJIGFkZCBu ZXcgaGVscGVyIF9fYXJjaF9jb3B5X21jX3RvX3VzZXIoKSAgYW5kIGFkZCBtYy1zYWZlLWZpeHVw IHRvIAp0aGlzIGhlbHBlciwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIHJlcXVpcmVkIHNjZW5h cmlvcy4gQXQgcHJlc2VudCwgCnRoZXJlIGlzIG9ubHkgb25lIHBhZ2VjYWNoZSByZWFkaW5nIHNj ZW5hcmlvLCBvdGhlciBzY2VuYXJpb3MgbmVlZCB0byBiZSAKZGV2ZWxvcGVkLgoKVGhpcyBpcyBt eSBjdXJyZW50IGNvbmZ1c2lvbi4gT2YgY291cnNlLCBJIHdpbGwgdGhpbmsgYWJvdXQgdGhlIHNv bHV0aW9uIAp0byAgc29sdmUgdGhlIGR1cGxpY2F0ZSBjb2RlIHByb2JsZW0uCgpUaGFua3MsClRv bmcuCj4+Cj4+IEluIGZ1dHVyZSwgaWYgZmluZCBhIHNjZW5hcmlvIHVzZSBjb3B5X3RvX3VzZXIg Y2FuIGFsc28gYmUgcmVjb3ZlcmVkLCAKPj4gd2UgY2FuIGFsc28gdXNlIHRoaXMgbWMKPj4gc2Fm ZSBoZWxwZXIgaW5zdGVhZCBpdC4KPj4KPj4gVGhhbmtzLAo+PiBUb25nLgo+Pgo+Pj4KPj4+PiBJ biBfY29weV9wYWdlX3RvX2l0ZXIoKSwgbWFjaGluZSBjaGVjayBzYWZlIG9ubHkgY29uc2lkZXJl ZCBJVEVSX0lPVkVDCj4+Pj4gd2hpY2ggaXMgdXNlZCBieSBwYWdlY2FjaGUgcmVhZGluZy4KPj4+ Pgo+Pj4+IFNpZ25lZC1vZmYtYnk6IFRvbmcgVGlhbmdlbiA8dG9uZ3RpYW5nZW5AaHVhd2VpLmNv bT4KPj4+PiAtLS0KPj4+PiDCoCBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCB8IDE1 ICsrKysrKwo+Pj4+IMKgIGFyY2gvYXJtNjQvbGliL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKg IHzCoCAyICstCj4+Pj4gwqAgYXJjaC9hcm02NC9saWIvY29weV90b191c2VyX21jLlMgfCA3OCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4+IMKgIGluY2x1ZGUvbGludXgvdWlvLmjC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgOSArKystCj4+Pj4gwqAgbGliL2lvdl9pdGVy LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCA4NSAKPj4+PiArKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLQo+Pj4+IMKgIDUgZmlsZXMgY2hhbmdlZCwgMTcwIGlu c2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQo+Pj4+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBh cmNoL2FybTY0L2xpYi9jb3B5X3RvX3VzZXJfbWMuUwo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2Fy Y2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIAo+Pj4+IGIvYXJjaC9hcm02NC9pbmNsdWRl L2FzbS91YWNjZXNzLmgKPj4+PiBpbmRleCAyNGI2NjI0MDdmYmQuLmYwZDVlODExMTY1YSAxMDA2 NDQKPj4+PiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAo+Pj4+ICsrKyBi L2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCj4+Pj4gQEAgLTQ0OCw2ICs0NDgsMjEg QEAgZXh0ZXJuIGxvbmcgc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZGVzdCwgY29uc3QgCj4+Pj4g Y2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCk7Cj4+Pj4gwqAgZXh0ZXJuIF9fbXVzdF9jaGVj ayBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyLCBsb25nIAo+Pj4+IG4p Owo+Pj4+ICsjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NPUFlfTUMKPj4+PiArZXh0ZXJuIHVuc2ln bmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fYXJjaF9jb3B5X21jX3RvX3VzZXIodm9pZCAKPj4+PiBf X3VzZXIgKnRvLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwo+Pj4+ ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCj4+Pj4gK2NvcHlfbWNf dG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcg bikKPj4+PiArewo+Pj4+ICvCoMKgwqAgdWFjY2Vzc190dGJyMF9lbmFibGUoKTsKPj4+PiArwqDC oMKgIG4gPSBfX2FyY2hfY29weV9tY190b191c2VyKF9fdWFjY2Vzc19tYXNrX3B0cih0byksIGZy b20sIG4pOwo+Pj4+ICvCoMKgwqAgdWFjY2Vzc190dGJyMF9kaXNhYmxlKCk7Cj4+Pj4gKwo+Pj4+ ICvCoMKgwqAgcmV0dXJuIG47Cj4+Pj4gK30KPj4+PiArI2RlZmluZSBjb3B5X21jX3RvX3VzZXIg Y29weV9tY190b191c2VyCj4+Pj4gKyNlbmRpZgo+Pj4+ICsKPj4+PiDCoCAjaWZkZWYgQ09ORklH X0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRQo+Pj4+IMKgIHN0cnVjdCBwYWdlOwo+Pj4+IMKg IHZvaWQgbWVtY3B5X3BhZ2VfZmx1c2hjYWNoZShjaGFyICp0bywgc3RydWN0IHBhZ2UgKnBhZ2Us IHNpemVfdCAKPj4+PiBvZmZzZXQsIHNpemVfdCBsZW4pOwo+Pj4+IGRpZmYgLS1naXQgYS9hcmNo L2FybTY0L2xpYi9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvbGliL01ha2VmaWxlCj4+Pj4gaW5kZXgg MjljNTc4NDE0YjEyLi45YjM1NzEyMjdmYjQgMTAwNjQ0Cj4+Pj4gLS0tIGEvYXJjaC9hcm02NC9s aWIvTWFrZWZpbGUKPj4+PiArKysgYi9hcmNoL2FybTY0L2xpYi9NYWtlZmlsZQo+Pj4+IEBAIC0y Myw0ICsyMyw0IEBAIG9iai0kKENPTkZJR19BUk02NF9NVEUpICs9IG10ZS5vCj4+Pj4gwqAgb2Jq LSQoQ09ORklHX0tBU0FOX1NXX1RBR1MpICs9IGthc2FuX3N3X3RhZ3Mubwo+Pj4+IC1vYmotJChD T05GSUdfQVJDSF9IQVNfQ1BZX01DKSArPSBjb3B5X3BhZ2VfbWMubwo+Pj4+ICtvYmotJChDT05G SUdfQVJDSF9IQVNfQ09QWV9NQykgKz0gY29weV9wYWdlX21jLm8gY29weV90b191c2VyX21jLm8K Pj4+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvY29weV90b191c2VyX21jLlMgCj4+Pj4g Yi9hcmNoL2FybTY0L2xpYi9jb3B5X3RvX3VzZXJfbWMuUwo+Pj4+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi45ZDIyOGZmMTU0NDYKPj4+PiAtLS0gL2Rldi9u dWxsCj4+Pj4gKysrIGIvYXJjaC9hcm02NC9saWIvY29weV90b191c2VyX21jLlMKPj4+PiBAQCAt MCwwICsxLDc4IEBACj4+Pj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkgKi8KPj4+PiArLyoKPj4+PiArICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMdGQuCj4+Pj4g KyAqLwo+Pj4+ICsKPj4+PiArI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KPj4+PiArCj4+Pj4g KyNpbmNsdWRlIDxhc20vYXNtLXVhY2Nlc3MuaD4KPj4+PiArI2luY2x1ZGUgPGFzbS9hc3NlbWJs ZXIuaD4KPj4+PiArI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgo+Pj4+ICsKPj4+PiArLyoKPj4+PiAr ICogQ29weSB0byB1c2VyIHNwYWNlIGZyb20gYSBrZXJuZWwgYnVmZmVyIChhbGlnbm1lbnQgaGFu ZGxlZCBieSAKPj4+PiB0aGUgaGFyZHdhcmUpCj4+Pj4gKyAqCj4+Pj4gKyAqIFBhcmFtZXRlcnM6 Cj4+Pj4gKyAqwqDCoMKgIHgwIC0gdG8KPj4+PiArICrCoMKgwqAgeDEgLSBmcm9tCj4+Pj4gKyAq wqDCoMKgIHgyIC0gbgo+Pj4+ICsgKiBSZXR1cm5zOgo+Pj4+ICsgKsKgwqDCoCB4MCAtIGJ5dGVz IG5vdCBjb3BpZWQKPj4+PiArICovCj4+Pj4gK8KgwqDCoCAubWFjcm8gbGRyYjEgcmVnLCBwdHIs IHZhbAo+Pj4+ICvCoMKgwqAgMTAwMDogbGRyYsKgIFxyZWcsIFtccHRyXSwgXHZhbDsKPj4+PiAr wqDCoMKgIF9hc21fZXh0YWJsZV9tYyAxMDAwYiwgOTk5OGY7Cj4+Pj4gK8KgwqDCoCAuZW5kbQo+ Pj4+ICsKPj4+PiArwqDCoMKgIC5tYWNybyBzdHJiMSByZWcsIHB0ciwgdmFsCj4+Pj4gK8KgwqDC oCB1c2VyX2xkc3RfbWMgOTk5OGYsIHN0dHJiLCBccmVnLCBccHRyLCBcdmFsCj4+Pj4gK8KgwqDC oCAuZW5kbQo+Pj4+ICsKPj4+PiArwqDCoMKgIC5tYWNybyBsZHJoMSByZWcsIHB0ciwgdmFsCj4+ Pj4gK8KgwqDCoCAxMDAxOiBsZHJowqAgXHJlZywgW1xwdHJdLCBcdmFsOwo+Pj4+ICvCoMKgwqAg X2FzbV9leHRhYmxlX21jIDEwMDFiLCA5OTk4ZjsKPj4+PiArwqDCoMKgIC5lbmRtCj4+Pj4gKwo+ Pj4+ICvCoMKgwqAgLm1hY3JvIHN0cmgxIHJlZywgcHRyLCB2YWwKPj4+PiArwqDCoMKgIHVzZXJf bGRzdF9tYyA5OTk3Ziwgc3R0cmgsIFxyZWcsIFxwdHIsIFx2YWwKPj4+PiArwqDCoMKgIC5lbmRt Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgLm1hY3JvIGxkcjEgcmVnLCBwdHIsIHZhbAo+Pj4+ICvCoMKg wqAgMTAwMjogbGRyIFxyZWcsIFtccHRyXSwgXHZhbDsKPj4+PiArwqDCoMKgIF9hc21fZXh0YWJs ZV9tYyAxMDAyYiwgOTk5OGY7Cj4+Pj4gK8KgwqDCoCAuZW5kbQo+Pj4+ICsKPj4+PiArwqDCoMKg IC5tYWNybyBzdHIxIHJlZywgcHRyLCB2YWwKPj4+PiArwqDCoMKgIHVzZXJfbGRzdF9tYyA5OTk3 Ziwgc3R0ciwgXHJlZywgXHB0ciwgXHZhbAo+Pj4+ICvCoMKgwqAgLmVuZG0KPj4+PiArCj4+Pj4g K8KgwqDCoCAubWFjcm8gbGRwMSByZWcxLCByZWcyLCBwdHIsIHZhbAo+Pj4+ICvCoMKgwqAgMTAw MzogbGRwIFxyZWcxLCBccmVnMiwgW1xwdHJdLCBcdmFsOwo+Pj4+ICvCoMKgwqAgX2FzbV9leHRh YmxlX21jIDEwMDNiLCA5OTk4ZjsKPj4+PiArwqDCoMKgIC5lbmRtCj4+Pj4gKwo+Pj4+ICvCoMKg wqAgLm1hY3JvIHN0cDEgcmVnMSwgcmVnMiwgcHRyLCB2YWwKPj4+PiArwqDCoMKgIHVzZXJfc3Rw IDk5OTdmLCBccmVnMSwgXHJlZzIsIFxwdHIsIFx2YWwKPj4+PiArwqDCoMKgIC5lbmRtCj4+Pj4g Kwo+Pj4+ICtlbmTCoMKgwqAgLnJlccKgwqDCoCB4NQo+Pj4+ICtzcmNpbsKgwqDCoCAucmVxwqDC oMKgIHgxNQo+Pj4+ICtTWU1fRlVOQ19TVEFSVChfX2FyY2hfY29weV9tY190b191c2VyKQo+Pj4+ ICvCoMKgwqAgYWRkwqDCoMKgIGVuZCwgeDAsIHgyCj4+Pj4gK8KgwqDCoCBtb3bCoMKgwqAgc3Jj aW4sIHgxCj4+Pj4gKyNpbmNsdWRlICJjb3B5X3RlbXBsYXRlLlMiCj4+Pj4gK8KgwqDCoCBtb3bC oMKgwqAgeDAsICMwCj4+Pj4gK8KgwqDCoCByZXQKPj4+PiArCj4+Pj4gK8KgwqDCoCAvLyBFeGNl cHRpb24gZml4dXBzCj4+Pj4gKzk5OTc6wqDCoMKgIGNiesKgwqDCoCB4MCwgOTk5OGbCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC8vIENoZWNrIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uCj4+Pj4gK8Kg wqDCoCBjbXDCoMKgwqAgZHN0LCBkc3Rpbgo+Pj4+ICvCoMKgwqAgYi5uZcKgwqDCoCA5OTk4Zgo+ Pj4+ICvCoMKgwqAgLy8gQmVmb3JlIGJlaW5nIGFic29sdXRlbHkgc3VyZSB3ZSBjb3VsZG4ndCBj b3B5IGFueXRoaW5nLCB0cnkgCj4+Pj4gaGFyZGVyCj4+Pj4gK8KgwqDCoCBsZHJiwqDCoMKgIHRt cDF3LCBbc3JjaW5dCj4+Pj4gK1VTRVIoOTk5OGYsIHN0dHJiIHRtcDF3LCBbZHN0XSkKPj4+PiAr wqDCoMKgIGFkZMKgwqDCoCBkc3QsIGRzdCwgIzEKPj4+PiArOTk5ODrCoMKgwqAgc3ViwqDCoMKg IHgwLCBlbmQsIGRzdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gYnl0ZXMgbm90IGNvcGllZAo+ Pj4+ICvCoMKgwqAgcmV0Cj4+Pj4gK1NZTV9GVU5DX0VORChfX2FyY2hfY29weV9tY190b191c2Vy KQo+Pj4+ICtFWFBPUlRfU1lNQk9MKF9fYXJjaF9jb3B5X21jX3RvX3VzZXIpCj4+Pj4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oCj4+Pj4gaW5k ZXggNzM5Mjg1ZmU1YTJmLi41MzlkOWVlOWIwMzIgMTAwNjQ0Cj4+Pj4gLS0tIGEvaW5jbHVkZS9s aW51eC91aW8uaAo+Pj4+ICsrKyBiL2luY2x1ZGUvbGludXgvdWlvLmgKPj4+PiBAQCAtMTQ3LDEw ICsxNDcsMTcgQEAgc2l6ZV90IF9jb3B5X3RvX2l0ZXIoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90 IAo+Pj4+IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpOwo+Pj4+IMKgIHNpemVfdCBfY29weV9m cm9tX2l0ZXIodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpOwo+ Pj4+IMKgIHNpemVfdCBfY29weV9mcm9tX2l0ZXJfbm9jYWNoZSh2b2lkICphZGRyLCBzaXplX3Qg Ynl0ZXMsIHN0cnVjdCAKPj4+PiBpb3ZfaXRlciAqaSk7Cj4+Pj4gKyNpZmRlZiBDT05GSUdfQVJD SF9IQVNfQ09QWV9NQwo+Pj4+ICtzaXplX3QgY29weV9tY19wYWdlX3RvX2l0ZXIoc3RydWN0IHBh Z2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsIAo+Pj4+IHNpemVfdCBieXRlcywKPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpb3ZfaXRlciAqaSk7Cj4+Pj4gKyNlbHNl Cj4+Pj4gKyNkZWZpbmUgY29weV9tY19wYWdlX3RvX2l0ZXIgY29weV9wYWdlX3RvX2l0ZXIKPj4+ PiArI2VuZGlmCj4+Pj4gKwo+Pj4+IMKgIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGNvcHlfZm9saW9f dG9faXRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCAKPj4+PiBzaXplX3Qgb2Zmc2V0LAo+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSkKPj4+PiDC oCB7Cj4+Pj4gLcKgwqDCoCByZXR1cm4gY29weV9wYWdlX3RvX2l0ZXIoJmZvbGlvLT5wYWdlLCBv ZmZzZXQsIGJ5dGVzLCBpKTsKPj4+PiArwqDCoMKgIHJldHVybiBjb3B5X21jX3BhZ2VfdG9faXRl cigmZm9saW8tPnBhZ2UsIG9mZnNldCwgYnl0ZXMsIGkpOwo+Pj4+IMKgIH0KPj4+PiDCoCBzdGF0 aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjawo+Pj4+IGRpZmYgLS1naXQgYS9saWIvaW92 X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jCj4+Pj4gaW5kZXggNmRkNTMzMGY3YTk5Li4yYzVmM2Ji NjM5MWQgMTAwNjQ0Cj4+Pj4gLS0tIGEvbGliL2lvdl9pdGVyLmMKPj4+PiArKysgYi9saWIvaW92 X2l0ZXIuYwo+Pj4+IEBAIC0xNTcsNiArMTU3LDE5IEBAIHN0YXRpYyBpbnQgY29weW91dCh2b2lk IF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgCj4+Pj4gKmZyb20sIHNpemVfdCBuKQo+Pj4+IMKgwqDC oMKgwqAgcmV0dXJuIG47Cj4+Pj4gwqAgfQo+Pj4+ICsjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NP UFlfTUMKPj4+PiArc3RhdGljIGludCBjb3B5b3V0X21jKHZvaWQgX191c2VyICp0bywgY29uc3Qg dm9pZCAqZnJvbSwgc2l6ZV90IG4pCj4+Pj4gK3sKPj4+PiArwqDCoMKgIGlmIChhY2Nlc3Nfb2so dG8sIG4pKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGluc3RydW1lbnRfY29weV90b191c2VyKHRv LCBmcm9tLCBuKTsKPj4+PiArwqDCoMKgwqDCoMKgwqAgbiA9IGNvcHlfbWNfdG9fdXNlcigoX19m b3JjZSB2b2lkICopIHRvLCBmcm9tLCBuKTsKPj4+PiArwqDCoMKgIH0KPj4+PiArwqDCoMKgIHJl dHVybiBuOwo+Pj4+ICt9Cj4+Pj4gKyNlbHNlCj4+Pj4gKyNkZWZpbmUgY29weW91dF9tYyBjb3B5 b3V0Cj4+Pj4gKyNlbmRpZgo+Pj4+ICsKPj4+PiDCoCBzdGF0aWMgaW50IGNvcHlpbih2b2lkICp0 bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHNpemVfdCBuKQo+Pj4+IMKgIHsKPj4+PiDCoMKg wqDCoMKgIGlmIChzaG91bGRfZmFpbF91c2VyY29weSgpKQo+Pj4+IEBAIC0xNjksNyArMTgyLDcg QEAgc3RhdGljIGludCBjb3B5aW4odm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyIAo+Pj4+ICpm cm9tLCBzaXplX3QgbikKPj4+PiDCoCB9Cj4+Pj4gwqAgc3RhdGljIHNpemVfdCBjb3B5X3BhZ2Vf dG9faXRlcl9pb3ZlYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IAo+Pj4+IG9mZnNldCwgc2l6 ZV90IGJ5dGVzLAo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlvdl9pdGVy ICppKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlvdl9pdGVyICppLCBi b29sIG1jX3NhZmUpCj4+Pj4gwqAgewo+Pj4+IMKgwqDCoMKgwqAgc2l6ZV90IHNraXAsIGNvcHks IGxlZnQsIHdhbnRlZDsKPj4+PiDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92Owo+ Pj4+IEBAIC0xOTQsNyArMjA3LDEwIEBAIHN0YXRpYyBzaXplX3QgY29weV9wYWdlX3RvX2l0ZXJf aW92ZWMoc3RydWN0IAo+Pj4+IHBhZ2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBiCj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGZyb20gPSBrYWRkciArIG9mZnNldDsKPj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgLyogZmlyc3QgY2h1bmssIHVzdWFsbHkgdGhlIG9ubHkgb25lICovCj4+Pj4g LcKgwqDCoMKgwqDCoMKgIGxlZnQgPSBjb3B5b3V0KGJ1ZiwgZnJvbSwgY29weSk7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIGlmIChtY19zYWZlKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxl ZnQgPSBjb3B5b3V0X21jKGJ1ZiwgZnJvbSwgY29weSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGVs c2UKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZWZ0ID0gY29weW91dChidWYsIGZyb20s IGNvcHkpOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBjb3B5IC09IGxlZnQ7Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIHNraXAgKz0gY29weTsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZnJvbSAr PSBjb3B5Owo+Pj4+IEBAIC0yMDQsNyArMjIwLDEwIEBAIHN0YXRpYyBzaXplX3QgY29weV9wYWdl X3RvX2l0ZXJfaW92ZWMoc3RydWN0IAo+Pj4+IHBhZ2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsIHNp emVfdCBiCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW92Kys7Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmID0gaW92LT5pb3ZfYmFzZTsKPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb3B5ID0gbWluKGJ5dGVzLCBpb3YtPmlvdl9sZW4pOwo+Pj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxlZnQgPSBjb3B5b3V0KGJ1ZiwgZnJvbSwgY29weSk7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG1jX3NhZmUpCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBsZWZ0ID0gY29weW91dF9tYyhidWYsIGZyb20sIGNvcHkpOwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGxlZnQgPSBjb3B5b3V0KGJ1ZiwgZnJvbSwgY29weSk7Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29weSAtPSBsZWZ0Owo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNraXAgPSBjb3B5Owo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZy b20gKz0gY29weTsKPj4+PiBAQCAtMjIzLDcgKzI0MiwxMCBAQCBzdGF0aWMgc2l6ZV90IGNvcHlf cGFnZV90b19pdGVyX2lvdmVjKHN0cnVjdCAKPj4+PiBwYWdlICpwYWdlLCBzaXplX3Qgb2Zmc2V0 LCBzaXplX3QgYgo+Pj4+IMKgwqDCoMKgwqAga2FkZHIgPSBrbWFwKHBhZ2UpOwo+Pj4+IMKgwqDC oMKgwqAgZnJvbSA9IGthZGRyICsgb2Zmc2V0Owo+Pj4+IC3CoMKgwqAgbGVmdCA9IGNvcHlvdXQo YnVmLCBmcm9tLCBjb3B5KTsKPj4+PiArwqDCoMKgIGlmIChtY19zYWZlKQo+Pj4+ICvCoMKgwqDC oMKgwqDCoCBsZWZ0ID0gY29weW91dF9tYyhidWYsIGZyb20sIGNvcHkpOwo+Pj4+ICvCoMKgwqAg ZWxzZQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBsZWZ0ID0gY29weW91dChidWYsIGZyb20sIGNvcHkp Owo+Pj4+IMKgwqDCoMKgwqAgY29weSAtPSBsZWZ0Owo+Pj4+IMKgwqDCoMKgwqAgc2tpcCArPSBj b3B5Owo+Pj4+IMKgwqDCoMKgwqAgZnJvbSArPSBjb3B5Owo+Pj4+IEBAIC0yMzIsNyArMjU0LDEw IEBAIHN0YXRpYyBzaXplX3QgY29weV9wYWdlX3RvX2l0ZXJfaW92ZWMoc3RydWN0IAo+Pj4+IHBh Z2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBiCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IGlvdisrOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBidWYgPSBpb3YtPmlvdl9iYXNlOwo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBjb3B5ID0gbWluKGJ5dGVzLCBpb3YtPmlvdl9sZW4pOwo+Pj4+ IC3CoMKgwqDCoMKgwqDCoCBsZWZ0ID0gY29weW91dChidWYsIGZyb20sIGNvcHkpOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAobWNfc2FmZSkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBs ZWZ0ID0gY29weW91dF9tYyhidWYsIGZyb20sIGNvcHkpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBl bHNlCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGVmdCA9IGNvcHlvdXQoYnVmLCBmcm9t LCBjb3B5KTsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY29weSAtPSBsZWZ0Owo+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBza2lwID0gY29weTsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZnJvbSAr PSBjb3B5Owo+Pj4+IEBAIC02NzQsMTUgKzY5OSw2IEBAIHNpemVfdCBfY29weV90b19pdGVyKGNv bnN0IHZvaWQgKmFkZHIsIHNpemVfdCAKPj4+PiBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKQo+ Pj4+IMKgIEVYUE9SVF9TWU1CT0woX2NvcHlfdG9faXRlcik7Cj4+Pj4gwqAgI2lmZGVmIENPTkZJ R19BUkNIX0hBU19DT1BZX01DCj4+Pj4gLXN0YXRpYyBpbnQgY29weW91dF9tYyh2b2lkIF9fdXNl ciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBuKQo+Pj4+IC17Cj4+Pj4gLcKgwqDCoCBp ZiAoYWNjZXNzX29rKHRvLCBuKSkgewo+Pj4+IC3CoMKgwqDCoMKgwqDCoCBpbnN0cnVtZW50X2Nv cHlfdG9fdXNlcih0bywgZnJvbSwgbik7Cj4+Pj4gLcKgwqDCoMKgwqDCoMKgIG4gPSBjb3B5X21j X3RvX3VzZXIoKF9fZm9yY2Ugdm9pZCAqKSB0bywgZnJvbSwgbik7Cj4+Pj4gLcKgwqDCoCB9Cj4+ Pj4gLcKgwqDCoCByZXR1cm4gbjsKPj4+PiAtfQo+Pj4+IC0KPj4+PiDCoCBzdGF0aWMgc2l6ZV90 IGNvcHlfbWNfcGlwZV90b19pdGVyKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywKPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpb3ZfaXRlciAqaSkK Pj4+PiDCoCB7Cj4+Pj4gQEAgLTg0NiwxMCArODYyLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBw YWdlX2NvcHlfc2FuZShzdHJ1Y3QgcGFnZSAKPj4+PiAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6 ZV90IG4pCj4+Pj4gwqAgfQo+Pj4+IMKgIHN0YXRpYyBzaXplX3QgX19jb3B5X3BhZ2VfdG9faXRl cihzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IAo+Pj4+IG9mZnNldCwgc2l6ZV90IGJ5dGVzLAo+ Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlvdl9pdGVyICppKQo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlvdl9pdGVyICppLCBib29sIG1jX3NhZmUp Cj4+Pj4gwqAgewo+Pj4+IMKgwqDCoMKgwqAgaWYgKGxpa2VseShpdGVyX2lzX2lvdmVjKGkpKSkK Pj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGNvcHlfcGFnZV90b19pdGVyX2lvdmVjKHBhZ2Us IG9mZnNldCwgYnl0ZXMsIGkpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gY29weV9wYWdl X3RvX2l0ZXJfaW92ZWMocGFnZSwgb2Zmc2V0LCBieXRlcywgaSwgCj4+Pj4gbWNfc2FmZSk7Cj4+ Pj4gwqDCoMKgwqDCoCBpZiAoaW92X2l0ZXJfaXNfYnZlYyhpKSB8fCBpb3ZfaXRlcl9pc19rdmVj KGkpIHx8IAo+Pj4+IGlvdl9pdGVyX2lzX3hhcnJheShpKSkgewo+Pj4+IMKgwqDCoMKgwqDCoMKg wqDCoCB2b2lkICprYWRkciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgc2l6ZV90IHdhbnRlZCA9IF9jb3B5X3RvX2l0ZXIoa2FkZHIgKyBvZmZzZXQsIGJ5 dGVzLCBpKTsKPj4+PiBAQCAtODc4LDcgKzg5NCw3IEBAIHNpemVfdCBjb3B5X3BhZ2VfdG9faXRl cihzdHJ1Y3QgcGFnZSAqcGFnZSwgCj4+Pj4gc2l6ZV90IG9mZnNldCwgc2l6ZV90IGJ5dGVzLAo+ Pj4+IMKgwqDCoMKgwqAgb2Zmc2V0ICU9IFBBR0VfU0laRTsKPj4+PiDCoMKgwqDCoMKgIHdoaWxl ICgxKSB7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBuID0gX19jb3B5X3BhZ2VfdG9f aXRlcihwYWdlLCBvZmZzZXQsCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBt aW4oYnl0ZXMsIChzaXplX3QpUEFHRV9TSVpFIC0gb2Zmc2V0KSwgaSk7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtaW4oYnl0ZXMsIChzaXplX3QpUEFHRV9TSVpFIC0gb2Zm c2V0KSwgaSwgZmFsc2UpOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXMgKz0gbjsKPj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgYnl0ZXMgLT0gbjsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KCFieXRlcyB8fCAhbikKPj4+PiBAQCAtODkzLDYgKzkwOSw0MSBAQCBzaXplX3QgY29weV9wYWdl X3RvX2l0ZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIAo+Pj4+IHNpemVfdCBvZmZzZXQsIHNpemVfdCBi eXRlcywKPj4+PiDCoCB9Cj4+Pj4gwqAgRVhQT1JUX1NZTUJPTChjb3B5X3BhZ2VfdG9faXRlcik7 Cj4+Pj4gKyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ09QWV9NQwo+Pj4+ICsvKioKPj4+PiArICog Y29weV9tY19wYWdlX3RvX2l0ZXIgLSBjb3B5IHBhZ2UgdG8gaXRlciB3aXRoIHNvdXJjZSBtZW1v cnkgCj4+Pj4gZXJyb3IgZXhjZXB0aW9uIGhhbmRsaW5nLgo+Pj4+ICsgKgo+Pj4+ICsgKiBUaGUg ZmlsZW1hcF9yZWFkIGRlcGxveXMgdGhpcyBmb3IgcGFnZWNhY2hlIHJlYWRpbmcgYW5kIHRoZSBt YWluIAo+Pj4+IGRpZmZlcmVuY2VzIGJldHdlZW4KPj4+PiArICogdGhpcyBhbmQgdHlwaWNhbCBj b3B5X3BhZ2VfdG9faXRlcigpIGlzIGNhbGwgX19jb3B5X3BhZ2VfdG9faXRlciAKPj4+PiB3aXRo IG1jX3NhZmUgdHJ1ZS4KPj4+PiArICoKPj4+PiArICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMg Y29waWVkIChtYXkgYmUgJTApCj4+Pj4gKyAqLwo+Pj4+ICtzaXplX3QgY29weV9tY19wYWdlX3Rv X2l0ZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsIAo+Pj4+IHNpemVfdCBieXRl cywKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpb3ZfaXRlciAqaSkKPj4+ PiArewo+Pj4+ICvCoMKgwqAgc2l6ZV90IHJlcyA9IDA7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaWYg KHVubGlrZWx5KCFwYWdlX2NvcHlfc2FuZShwYWdlLCBvZmZzZXQsIGJ5dGVzKSkpCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4+ICvCoMKgwqAgcGFnZSArPSBvZmZzZXQgLyBQQUdF X1NJWkU7IC8vIGZpcnN0IHN1YnBhZ2UKPj4+PiArwqDCoMKgIG9mZnNldCAlPSBQQUdFX1NJWkU7 Cj4+Pj4gK8KgwqDCoCB3aGlsZSAoMSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzaXplX3QgbiA9 IF9fY29weV9wYWdlX3RvX2l0ZXIocGFnZSwgb2Zmc2V0LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbWluKGJ5dGVzLCAoc2l6ZV90KVBBR0VfU0laRSAtIG9mZnNldCksIGks IHRydWUpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXMgKz0gbjsKPj4+PiArwqDCoMKgwqDCoMKg wqAgYnl0ZXMgLT0gbjsKPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFieXRlcyB8fCAhbikKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+PiArwqDCoMKgwqDCoMKgwqAgb2Zm c2V0ICs9IG47Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChvZmZzZXQgPT0gUEFHRV9TSVpFKSB7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFnZSsrOwo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIG9mZnNldCA9IDA7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+PiArwqDCoMKg IH0KPj4+PiArwqDCoMKgIHJldHVybiByZXM7Cj4+Pj4gK30KPj4+PiArI2VuZGlmCj4+Pj4gKwo+ Pj4+IMKgIHNpemVfdCBjb3B5X3BhZ2VfZnJvbV9pdGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzaXpl X3Qgb2Zmc2V0LCAKPj4+PiBzaXplX3QgYnl0ZXMsCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCj4+Pj4gwqAgewo+Pj4+IC0tIAo+Pj4+IDIuMTgu MC5odWF3ZWkuMjUKPj4+Pgo+Pj4+Cj4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPj4+PiBsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAo+Pj4+ IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+Pj4+IGh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo+Pj4gLgo+Pgo+ PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBsaW51 eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAo+PiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKPj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCj4gLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5l bEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=