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 X-Spam-Level: X-Spam-Status: No, score=-17.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45C44C433E0 for ; Wed, 23 Dec 2020 13:44:53 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D3B9D2313E for ; Wed, 23 Dec 2020 13:44:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D3B9D2313E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id A344F86812; Wed, 23 Dec 2020 13:44:52 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id dSeDzFsUlai0; Wed, 23 Dec 2020 13:44:50 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by whitealder.osuosl.org (Postfix) with ESMTP id 689DA86752; Wed, 23 Dec 2020 13:44:50 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4C775C1825; Wed, 23 Dec 2020 13:44:50 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 48850C0893 for ; Wed, 23 Dec 2020 13:44:49 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 3D295867FA for ; Wed, 23 Dec 2020 13:44:49 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qvjmYHeRr7GZ for ; Wed, 23 Dec 2020 13:44:47 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by whitealder.osuosl.org (Postfix) with ESMTP id 5508186752 for ; Wed, 23 Dec 2020 13:44:47 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 923461042; Wed, 23 Dec 2020 05:44:46 -0800 (PST) Received: from [10.57.34.90] (unknown [10.57.34.90]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B75E33F66E; Wed, 23 Dec 2020 05:44:44 -0800 (PST) Subject: Re: [PATCH v2 1/7] iommu/io-pgtable: Introduce dynamic io-pgtable fmt registration To: isaacm@codeaurora.org References: <1608597876-32367-1-git-send-email-isaacm@codeaurora.org> <1608597876-32367-2-git-send-email-isaacm@codeaurora.org> <4f388512-c3df-e9fc-ebd4-624ab36a6858@arm.com> <8b48b371811a170053e2ca810ab63abf@codeaurora.org> From: Robin Murphy Message-ID: <64657a85-e2d5-e13f-d6b5-9d68c4142b80@arm.com> Date: Wed, 23 Dec 2020 13:44:43 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: <8b48b371811a170053e2ca810ab63abf@codeaurora.org> Content-Language: en-GB Cc: freedreno@lists.freedesktop.org, kernel-team@android.com, pdaly@codeaurora.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, iommu@lists.linux-foundation.org, will@kernel.org, linux-arm-kernel@lists.infradead.org, pratikp@codeaurora.org X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" T24gMjAyMC0xMi0yMiAxOTo1NCwgaXNhYWNtQGNvZGVhdXJvcmEub3JnIHdyb3RlOgo+IE9uIDIw MjAtMTItMjIgMTE6MjcsIFJvYmluIE11cnBoeSB3cm90ZToKPj4gT24gMjAyMC0xMi0yMiAwMDo0 NCwgSXNhYWMgSi4gTWFuamFycmVzIHdyb3RlOgo+Pj4gVGhlIGlvLXBndGFibGUgY29kZSBjb25z dHJ1Y3RzIGFuIGFycmF5IG9mIGluaXQgZnVuY3Rpb25zIGZvciBlYWNoCj4+PiBwYWdlIHRhYmxl IGZvcm1hdCBhdCBjb21waWxlIHRpbWUuIFRoaXMgaXMgbm90IGlkZWFsLCBhcyB0aGlzCj4+PiBp bmNyZWFzZXMgdGhlIGZvb3RwcmludCBvZiB0aGUgaW8tcGd0YWJsZSBjb2RlLCBhcyB3ZWxsIGFz IHByZXZlbnRzCj4+PiBpby1wZ3RhYmxlIGZvcm1hdHMgZnJvbSBiZWluZyBidWlsdCBhcyBrZXJu ZWwgbW9kdWxlcy4KPj4+Cj4+PiBJbiBwcmVwYXJhdGlvbiBmb3IgbW9kdWxhcml6aW5nIHRoZSBp by1wZ3RhYmxlIGZvcm1hdHMsIHN3aXRjaCB0byBhCj4+PiBkeW5hbWljIHJlZ2lzdHJhdGlvbiBz Y2hlbWUsIHdoZXJlIGVhY2ggaW8tcGd0YWJsZSBmb3JtYXQgY2FuIHJlZ2lzdGVyCj4+PiB0aGVp ciBpbml0IGZ1bmN0aW9ucyB3aXRoIHRoZSBpby1wZ3RhYmxlIGNvZGUgYXQgYm9vdCBvciBtb2R1 bGUKPj4+IGluc2VydGlvbiB0aW1lLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IElzYWFjIEouIE1h bmphcnJlcyA8aXNhYWNtQGNvZGVhdXJvcmEub3JnPgo+Pj4gLS0tCj4+PiDCoCBkcml2ZXJzL2lv bW11L2lvLXBndGFibGUtYXJtLXY3cy5jIHwgMzQgKysrKysrKysrKysrKy0KPj4+IMKgIGRyaXZl cnMvaW9tbXUvaW8tcGd0YWJsZS1hcm0uY8KgwqDCoMKgIHwgOTAgCj4+PiArKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0KPj4+IMKgIGRyaXZlcnMvaW9tbXUvaW8tcGd0YWJsZS5j wqDCoMKgwqDCoMKgwqDCoCB8IDk0IAo+Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0KPj4+IMKgIGluY2x1ZGUvbGludXgvaW8tcGd0YWJsZS5owqDCoMKgwqDCoMKgwqDC oCB8IDUxICsrKysrKysrKysrKystLS0tLS0tLQo+Pj4gwqAgNCBmaWxlcyBjaGFuZ2VkLCAyMDkg aW5zZXJ0aW9ucygrKSwgNjAgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvaW9tbXUvaW8tcGd0YWJsZS1hcm0tdjdzLmMgCj4+PiBiL2RyaXZlcnMvaW9tbXUvaW8tcGd0 YWJsZS1hcm0tdjdzLmMKPj4+IGluZGV4IDFkOTJhYzkuLjg5YWFkMmYgMTAwNjQ0Cj4+PiAtLS0g YS9kcml2ZXJzL2lvbW11L2lvLXBndGFibGUtYXJtLXY3cy5jCj4+PiArKysgYi9kcml2ZXJzL2lv bW11L2lvLXBndGFibGUtYXJtLXY3cy5jCj4+PiBAQCAtMjgsNiArMjgsNyBAQAo+Pj4gwqAgI2lu Y2x1ZGUgPGxpbnV4L2lvbW11Lmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4+ PiDCoCAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4KPj4+IMKgICNpbmNsdWRlIDxs aW51eC9zbGFiLmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KPj4+IEBAIC04 MzUsNyArODM2LDggQEAgc3RhdGljIHN0cnVjdCBpb19wZ3RhYmxlIAo+Pj4gKmFybV92N3NfYWxs b2NfcGd0YWJsZShzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcgKmNmZywKPj4+IMKgwqDCoMKgwqAgcmV0 dXJuIE5VTEw7Cj4+PiDCoCB9Cj4+PiDCoCAtc3RydWN0IGlvX3BndGFibGVfaW5pdF9mbnMgaW9f cGd0YWJsZV9hcm1fdjdzX2luaXRfZm5zID0gewo+Pj4gK3N0YXRpYyBzdHJ1Y3QgaW9fcGd0YWJs ZV9pbml0X2ZucyBpb19wZ3RhYmxlX2FybV92N3NfaW5pdF9mbnMgPSB7Cj4+PiArwqDCoMKgIC5m bXTCoMKgwqAgPSBBUk1fVjdTLAo+Pj4gwqDCoMKgwqDCoCAuYWxsb2PCoMKgwqAgPSBhcm1fdjdz X2FsbG9jX3BndGFibGUsCj4+PiDCoMKgwqDCoMKgIC5mcmVlwqDCoMKgID0gYXJtX3Y3c19mcmVl X3BndGFibGUsCj4+PiDCoCB9Owo+Pj4gQEAgLTk4Miw1ICs5ODQsMzMgQEAgc3RhdGljIGludCBf X2luaXQgYXJtX3Y3c19kb19zZWxmdGVzdHModm9pZCkKPj4+IMKgwqDCoMKgwqAgcHJfaW5mbygi c2VsZiB0ZXN0IG9rXG4iKTsKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+PiDCoCB9Cj4+PiAt c3Vic3lzX2luaXRjYWxsKGFybV92N3NfZG9fc2VsZnRlc3RzKTsKPj4+ICsjZWxzZQo+Pj4gK3N0 YXRpYyBpbnQgYXJtX3Y3c19kb19zZWxmdGVzdHModm9pZCkKPj4+ICt7Cj4+PiArwqDCoMKgIHJl dHVybiAwOwo+Pj4gK30KPj4+IMKgICNlbmRpZgo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgX19pbml0 IGFybV92N3NfaW5pdCh2b2lkKQo+Pj4gK3sKPj4+ICvCoMKgwqAgaW50IHJldDsKPj4+ICsKPj4+ ICvCoMKgwqAgcmV0ID0gaW9fcGd0YWJsZV9vcHNfcmVnaXN0ZXIoJmlvX3BndGFibGVfYXJtX3Y3 c19pbml0X2Zucyk7Cj4+PiArwqDCoMKgIGlmIChyZXQgPCAwKSB7Cj4+PiArwqDCoMKgwqDCoMKg wqAgcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgQVJNIFY3UyBmb3JtYXRcbiIpOwo+Pgo+PiBT dXBlci1uaXQ6IEkgdGhpbmsgInY3cyIgc2hvdWxkIHByb2JhYmx5IGJlIGxvd2VyY2FzZSB0aGVy ZS4gQWxzbwo+PiBnZW5lcmFsIGNvbnNpc3RlbmN5IFdSVCB0byBzaG93aW5nIHRoZSBlcnJvciBj b2RlIGFuZCB3aGV0aGVyIG9yIG5vdAo+PiB0byBhYmJyZXZpYXRlICJmb3JtYXQiIHdvdWxkIGJl IG5pY2UuCj4+Cj4gT2ssIEkgY2FuIGZpeCB0aGlzIGFjY29yZGluZ2x5Lgo+IAo+Pj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgcmV0 ID0gYXJtX3Y3c19kb19zZWxmdGVzdHMoKTsKPj4+ICvCoMKgwqAgaWYgKHJldCA8IDApCj4+PiAr wqDCoMKgwqDCoMKgwqAgaW9fcGd0YWJsZV9vcHNfdW5yZWdpc3RlcigmaW9fcGd0YWJsZV9hcm1f djdzX2luaXRfZm5zKTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICt9Cj4+PiAr Y29yZV9pbml0Y2FsbChhcm1fdjdzX2luaXQpOwo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIF9fZXhp dCBhcm1fdjdzX2V4aXQodm9pZCkKPj4+ICt7Cj4+PiArwqDCoMKgIGlvX3BndGFibGVfb3BzX3Vu cmVnaXN0ZXIoJmlvX3BndGFibGVfYXJtX3Y3c19pbml0X2Zucyk7Cj4+PiArfQo+Pj4gK21vZHVs ZV9leGl0KGFybV92N3NfZXhpdCk7Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pby1w Z3RhYmxlLWFybS5jIAo+Pj4gYi9kcml2ZXJzL2lvbW11L2lvLXBndGFibGUtYXJtLmMKPj4+IGlu ZGV4IDg3ZGVmNTguLmZmMGVhMmYgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2lvbW11L2lvLXBn dGFibGUtYXJtLmMKPj4+ICsrKyBiL2RyaXZlcnMvaW9tbXUvaW8tcGd0YWJsZS1hcm0uYwo+Pj4g QEAgLTEzLDYgKzEzLDcgQEAKPj4+IMKgICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KPj4+IMKg ICNpbmNsdWRlIDxsaW51eC9pby1wZ3RhYmxlLmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+Pj4gwqAgI2luY2x1ZGUgPGxp bnV4L3NpemVzLmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+Pj4gwqAgI2luY2x1 ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+PiBAQCAtMTA0MywyOSArMTA0NCwzMiBAQCBhcm1fbWFsaV9s cGFlX2FsbG9jX3BndGFibGUoc3RydWN0IAo+Pj4gaW9fcGd0YWJsZV9jZmcgKmNmZywgdm9pZCAq Y29va2llKQo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4+IMKgIH0KPj4+IMKgIC1zdHJ1 Y3QgaW9fcGd0YWJsZV9pbml0X2ZucyBpb19wZ3RhYmxlX2FybV82NF9scGFlX3MxX2luaXRfZm5z ID0gewo+Pj4gLcKgwqDCoCAuYWxsb2PCoMKgwqAgPSBhcm1fNjRfbHBhZV9hbGxvY19wZ3RhYmxl X3MxLAo+Pj4gLcKgwqDCoCAuZnJlZcKgwqDCoCA9IGFybV9scGFlX2ZyZWVfcGd0YWJsZSwKPj4+ IC19Owo+Pj4gLQo+Pj4gLXN0cnVjdCBpb19wZ3RhYmxlX2luaXRfZm5zIGlvX3BndGFibGVfYXJt XzY0X2xwYWVfczJfaW5pdF9mbnMgPSB7Cj4+PiAtwqDCoMKgIC5hbGxvY8KgwqDCoCA9IGFybV82 NF9scGFlX2FsbG9jX3BndGFibGVfczIsCj4+PiAtwqDCoMKgIC5mcmVlwqDCoMKgID0gYXJtX2xw YWVfZnJlZV9wZ3RhYmxlLAo+Pj4gLX07Cj4+PiAtCj4+PiAtc3RydWN0IGlvX3BndGFibGVfaW5p dF9mbnMgaW9fcGd0YWJsZV9hcm1fMzJfbHBhZV9zMV9pbml0X2ZucyA9IHsKPj4+IC3CoMKgwqAg LmFsbG9jwqDCoMKgID0gYXJtXzMyX2xwYWVfYWxsb2NfcGd0YWJsZV9zMSwKPj4+IC3CoMKgwqAg LmZyZWXCoMKgwqAgPSBhcm1fbHBhZV9mcmVlX3BndGFibGUsCj4+PiAtfTsKPj4+IC0KPj4+IC1z dHJ1Y3QgaW9fcGd0YWJsZV9pbml0X2ZucyBpb19wZ3RhYmxlX2FybV8zMl9scGFlX3MyX2luaXRf Zm5zID0gewo+Pj4gLcKgwqDCoCAuYWxsb2PCoMKgwqAgPSBhcm1fMzJfbHBhZV9hbGxvY19wZ3Rh YmxlX3MyLAo+Pj4gLcKgwqDCoCAuZnJlZcKgwqDCoCA9IGFybV9scGFlX2ZyZWVfcGd0YWJsZSwK Pj4+IC19Owo+Pj4gLQo+Pj4gLXN0cnVjdCBpb19wZ3RhYmxlX2luaXRfZm5zIGlvX3BndGFibGVf YXJtX21hbGlfbHBhZV9pbml0X2ZucyA9IHsKPj4+IC3CoMKgwqAgLmFsbG9jwqDCoMKgID0gYXJt X21hbGlfbHBhZV9hbGxvY19wZ3RhYmxlLAo+Pj4gLcKgwqDCoCAuZnJlZcKgwqDCoCA9IGFybV9s cGFlX2ZyZWVfcGd0YWJsZSwKPj4+ICtzdGF0aWMgc3RydWN0IGlvX3BndGFibGVfaW5pdF9mbnMg aW9fcGd0YWJsZV9hcm1fbHBhZV9pbml0X2Zuc1tdID0gewo+Pj4gK8KgwqDCoCB7Cj4+PiArwqDC oMKgwqDCoMKgwqAgLmZtdMKgwqDCoCA9IEFSTV8zMl9MUEFFX1MxLAo+Pj4gK8KgwqDCoMKgwqDC oMKgIC5hbGxvY8KgwqDCoCA9IGFybV8zMl9scGFlX2FsbG9jX3BndGFibGVfczEsCj4+PiArwqDC oMKgwqDCoMKgwqAgLmZyZWXCoMKgwqAgPSBhcm1fbHBhZV9mcmVlX3BndGFibGUsCj4+PiArwqDC oMKgIH0sCj4+PiArwqDCoMKgIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCAuZm10wqDCoMKgID0gQVJN XzMyX0xQQUVfUzIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmFsbG9jwqDCoMKgID0gYXJtXzMyX2xw YWVfYWxsb2NfcGd0YWJsZV9zMiwKPj4+ICvCoMKgwqDCoMKgwqDCoCAuZnJlZcKgwqDCoCA9IGFy bV9scGFlX2ZyZWVfcGd0YWJsZSwKPj4+ICvCoMKgwqAgfSwKPj4+ICvCoMKgwqAgewo+Pj4gK8Kg wqDCoMKgwqDCoMKgIC5mbXTCoMKgwqAgPSBBUk1fNjRfTFBBRV9TMSwKPj4+ICvCoMKgwqDCoMKg wqDCoCAuYWxsb2PCoMKgwqAgPSBhcm1fNjRfbHBhZV9hbGxvY19wZ3RhYmxlX3MxLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgIC5mcmVlwqDCoMKgID0gYXJtX2xwYWVfZnJlZV9wZ3RhYmxlLAo+Pj4gK8Kg wqDCoCB9LAo+Pj4gK8KgwqDCoCB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLmZtdMKgwqDCoCA9IEFS TV82NF9MUEFFX1MyLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5hbGxvY8KgwqDCoCA9IGFybV82NF9s cGFlX2FsbG9jX3BndGFibGVfczIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmZyZWXCoMKgwqAgPSBh cm1fbHBhZV9mcmVlX3BndGFibGUsCj4+PiArwqDCoMKgIH0sCj4+PiArwqDCoMKgIHsKPj4+ICvC oMKgwqDCoMKgwqDCoCAuZm10wqDCoMKgID0gQVJNX01BTElfTFBBRSwKPj4+ICvCoMKgwqDCoMKg wqDCoCAuYWxsb2PCoMKgwqAgPSBhcm1fbWFsaV9scGFlX2FsbG9jX3BndGFibGUsCj4+PiArwqDC oMKgwqDCoMKgwqAgLmZyZWXCoMKgwqAgPSBhcm1fbHBhZV9mcmVlX3BndGFibGUsCj4+PiArwqDC oMKgIH0sCj4+PiDCoCB9Owo+Pj4gwqDCoMKgICNpZmRlZiBDT05GSUdfSU9NTVVfSU9fUEdUQUJM RV9MUEFFX1NFTEZURVNUCj4+PiBAQCAtMTI1MCw1ICsxMjU0LDQzIEBAIHN0YXRpYyBpbnQgX19p bml0IGFybV9scGFlX2RvX3NlbGZ0ZXN0cyh2b2lkKQo+Pj4gwqDCoMKgwqDCoCBwcl9pbmZvKCJz ZWxmdGVzdDogY29tcGxldGVkIHdpdGggJWQgUEFTUyAlZCBGQUlMXG4iLCBwYXNzLCBmYWlsKTsK Pj4+IMKgwqDCoMKgwqAgcmV0dXJuIGZhaWwgPyAtRUZBVUxUIDogMDsKPj4+IMKgIH0KPj4+IC1z dWJzeXNfaW5pdGNhbGwoYXJtX2xwYWVfZG9fc2VsZnRlc3RzKTsKPj4+ICsjZWxzZQo+Pj4gK3N0 YXRpYyBpbnQgX19pbml0IGFybV9scGFlX2RvX3NlbGZ0ZXN0cyh2b2lkKQo+Pj4gK3sKPj4+ICvC oMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gwqAgI2VuZGlmCj4+PiArCj4+PiArc3RhdGljIGlu dCBfX2luaXQgYXJtX2xwYWVfaW5pdCh2b2lkKQo+Pj4gK3sKPj4+ICvCoMKgwqAgaW50IHJldCwg aTsKPj4+ICsKPj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW9fcGd0YWJs ZV9hcm1fbHBhZV9pbml0X2Zucyk7IGkrKykgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IAo+ Pj4gaW9fcGd0YWJsZV9vcHNfcmVnaXN0ZXIoJmlvX3BndGFibGVfYXJtX2xwYWVfaW5pdF9mbnNb aV0pOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKSB7Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBBUk0gTFBBRSBmbXQ6ICVkXG4i KTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2lvX3BndGFibGVfcmVnaXN0 ZXI7Cj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKg IHJldCA9IGFybV9scGFlX2RvX3NlbGZ0ZXN0cygpOwo+Pj4gK8KgwqDCoCBpZiAocmV0IDwgMCkK Pj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9pb19wZ3RhYmxlX3JlZ2lzdGVyOwo+Pj4gKwo+ Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICsKPj4+ICtlcnJfaW9fcGd0YWJsZV9yZWdpc3RlcjoK Pj4+ICvCoMKgwqAgZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKQo+Pgo+PiBQZXJzb25hbGx5 IEkgZmluZCAid2hpbGUgKGktLSkiIGEgYml0IGNsZWFyZXIgZm9yIHRoaXMga2luZCBvZgo+PiB1 bndpbmRpbmcsIGJ1dCBtYXliZSBwb3N0LWRlY3JlbWVudCBpc24ndCB0byBldmVyeW9uZSdzIHRh c3RlLgo+Pgo+IEknbSBub3QgcGFydGljdWxhcmx5IGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50IGFw cHJvYWNoLCBzbyBhIHdoaWxlIGxvb3AKPiBpcyBva2F5IHdpdGggbWUgOikuCj4gCj4+PiArwqDC oMKgwqDCoMKgwqAgaW9fcGd0YWJsZV9vcHNfdW5yZWdpc3RlcigmaW9fcGd0YWJsZV9hcm1fbHBh ZV9pbml0X2Zuc1tpXSk7Cj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArfQo+Pj4gK2NvcmVf aW5pdGNhbGwoYXJtX2xwYWVfaW5pdCk7Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgX19leGl0IGFy bV9scGFlX2V4aXQodm9pZCkKPj4+ICt7Cj4+PiArwqDCoMKgIGludCBpOwo+Pj4gKwo+Pj4gK8Kg wqDCoCBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpb19wZ3RhYmxlX2FybV9scGFlX2luaXRf Zm5zKTsgaSsrKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlvX3BndGFibGVfb3BzX3VucmVnaXN0ZXIo JmlvX3BndGFibGVfYXJtX2xwYWVfaW5pdF9mbnNbaV0pOwo+Pj4gK30KPj4+ICttb2R1bGVfZXhp dChhcm1fbHBhZV9leGl0KTsKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lvLXBndGFi bGUuYyBiL2RyaXZlcnMvaW9tbXUvaW8tcGd0YWJsZS5jCj4+PiBpbmRleCA5NDM5NGM4Li4yYzZl YjJlIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9pb21tdS9pby1wZ3RhYmxlLmMKPj4+ICsrKyBi L2RyaXZlcnMvaW9tbXUvaW8tcGd0YWJsZS5jCj4+PiBAQCAtMTAsMzMgKzEwLDQ1IEBACj4+PiDC oCAjaW5jbHVkZSA8bGludXgvYnVnLmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvaW8tcGd0YWJs ZS5oPgo+Pj4gwqAgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51 eC9yd2xvY2suaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+Pj4gwqAgI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+Cj4+PiDCoCAtc3RhdGljIGNvbnN0IHN0cnVjdCBpb19wZ3RhYmxlX2lu aXRfZm5zICoKPj4+IC1pb19wZ3RhYmxlX2luaXRfdGFibGVbSU9fUEdUQUJMRV9OVU1fRk1UU10g PSB7Cj4+PiAtI2lmZGVmIENPTkZJR19JT01NVV9JT19QR1RBQkxFX0xQQUUKPj4+IC3CoMKgwqAg W0FSTV8zMl9MUEFFX1MxXSA9ICZpb19wZ3RhYmxlX2FybV8zMl9scGFlX3MxX2luaXRfZm5zLAo+ Pj4gLcKgwqDCoCBbQVJNXzMyX0xQQUVfUzJdID0gJmlvX3BndGFibGVfYXJtXzMyX2xwYWVfczJf aW5pdF9mbnMsCj4+PiAtwqDCoMKgIFtBUk1fNjRfTFBBRV9TMV0gPSAmaW9fcGd0YWJsZV9hcm1f NjRfbHBhZV9zMV9pbml0X2ZucywKPj4+IC3CoMKgwqAgW0FSTV82NF9MUEFFX1MyXSA9ICZpb19w Z3RhYmxlX2FybV82NF9scGFlX3MyX2luaXRfZm5zLAo+Pj4gLcKgwqDCoCBbQVJNX01BTElfTFBB RV0gPSAmaW9fcGd0YWJsZV9hcm1fbWFsaV9scGFlX2luaXRfZm5zLAo+Pj4gLSNlbmRpZgo+Pj4g LSNpZmRlZiBDT05GSUdfSU9NTVVfSU9fUEdUQUJMRV9BUk1WN1MKPj4+IC3CoMKgwqAgW0FSTV9W N1NdID0gJmlvX3BndGFibGVfYXJtX3Y3c19pbml0X2ZucywKPj4+IC0jZW5kaWYKPj4+ICtzdHJ1 Y3QgaW9fcGd0YWJsZV9pbml0X2Zuc19ub2RlIHsKPj4+ICvCoMKgwqAgc3RydWN0IGlvX3BndGFi bGVfaW5pdF9mbnMgKmZuczsKPj4+ICvCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+Pj4g wqAgfTsKPj4+IMKgICtzdGF0aWMgTElTVF9IRUFEKGlvX3BndGFibGVfaW5pdF9mbnNfbGlzdCk7 Cj4+PiArc3RhdGljIERFRklORV9SV0xPQ0soaW9fcGd0YWJsZV9pbml0X2Zuc19saXN0X2xvY2sp Owo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgaW9fcGd0YWJsZV9pbml0X2ZucyAqaW9fcGd0YWJs ZV9nZXRfaW5pdF9mbnMoZW51bSAKPj4+IGlvX3BndGFibGVfZm10IGZtdCkKPj4+ICt7Cj4+PiAr wqDCoMKgIHN0cnVjdCBpb19wZ3RhYmxlX2luaXRfZm5zX25vZGUgKml0ZXI7Cj4+PiArwqDCoMKg IHN0cnVjdCBpb19wZ3RhYmxlX2luaXRfZm5zICpmbnMgPSBOVUxMOwo+Pj4gKwo+Pj4gK8KgwqDC oCByZWFkX2xvY2soJmlvX3BndGFibGVfaW5pdF9mbnNfbGlzdF9sb2NrKTsKPj4+ICvCoMKgwqAg bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmaW9fcGd0YWJsZV9pbml0X2Zuc19saXN0LCBsaXN0 KQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChpdGVyLT5mbnMtPmZtdCA9PSBmbXQpIHsKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZucyA9IGl0ZXItPmZuczsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICvCoMKgwqAgcmVhZF91 bmxvY2soJmlvX3BndGFibGVfaW5pdF9mbnNfbGlzdF9sb2NrKTsKPj4+ICsKPj4+ICvCoMKgwqAg cmV0dXJuIGZuczsKPj4+ICt9Cj4+Cj4+IEkgdGhpbmsgaXQgd291bGQgYmUgYSBsb3QgZWFzaWVy IHRvIHN0aWNrIHdpdGggYSBzaW1wbGUgYXJyYXkgaW5kZXhlZAo+PiBieSBlbnVtIC0gdGhhdCB3 YXkgeW91IGNhbiBqdXN0IHNldC9jbGVhci90ZXN0IGVudHJpZXMgd2l0aG91dCBuZWVkaW5nCj4+ IHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcuIEJhc2ljYWxseSBqdXN0IHJlbW92ZSB0aGUgY29uc3Qg YW5kIHRoZQo+PiBpbml0aWFsaXNlcnMgZnJvbSB0aGUgZXhpc3Rpbmcgb25lIDspCj4+Cj4+IChh bmQgaWYgeW91IHRoaW5rIHlvdSdyZSBjb25jZXJuZWQgYWJvdXQgbWVtb3J5LCBjb25zaWRlciB0 aGF0IGp1c3QKPj4gdGhlIGxpc3QgaGVhZCBwbHVzIGxvY2sgaXMgYWxyZWFkeSBoYWxmIHRoZSBz aXplIG9mIHRoZSB0YWJsZSkKPj4KPj4gT3RoZXIgdGhhbiB0aGF0LCBJIHRoaW5rIHRoaXMgYWxs IGxvb2tzIHByZXR0eSBwcm9taXNpbmcgLSBJJ2Qgc3VnZ2VzdAo+PiBzZW5kaW5nIGEgbm9uLVJG QyBhZnRlciByYzEgc28gdGhhdCBpdCBnZXRzIGV2ZXJ5b25lJ3MgcHJvcGVyCj4+IGF0dGVudGlv bi4KPj4KPj4gVGhhbmtzLAo+PiBSb2Jpbi4KPj4KPiAKPiBUaGFua3MgZm9yIGFsbCBvZiB0aGUg ZmVlZGJhY2shIFdpdGggcmVzcGVjdCB0byB0aGUgY29tbWVudCBhYm91dCAKPiBrZWVwaW5nIHRo ZSBjdXJyZW50IGFycmF5LAo+IGRvbid0IHdlIG5lZWQgc29tZSBzb3J0IG9mIGxvY2sgdG8gcHJv dGVjdCBhY2Nlc3MgdG8gdGhlIGRhdGEgc3RydWN0dXJlIAo+IChlLmcuIGNvbmN1cnJlbnQgYWNj ZXNzCj4gaWYgYWRkaW5nIHR3byBvcHMgZm9yIHRoZSBzYW1lIGZvcm1hdCk/IE9yIGRvIHlvdSBt ZWFuIHRoYXQgd2Ugc2hvdWxkIAo+IHVzZSBhdG9taWMgb3BlcmF0aW9ucyB0bwo+IGhhbmRsZSB0 aGlzIGNsZWFubHk/CgpJIGRvbid0IHRoaW5rIGFueSByYWNlcyBhcmUgcmVhbGlzdGljYWxseSBw b3NzaWJsZSAtIGJ1aWx0LWluIGluaXRjYWxscyAKc2hvdWxkIHJ1biBzZXF1ZW50aWFsbHksIHdo aWxlIG1vZHVsZSBpbml0IHNob3VsZCBiZSBzZXJpYWxpc2VkIGJ5IHRoZSAKbW9kdWxlIGxvYWRl ciBsb2NrLCBzbyByZWdpc3RyYXRpb25zIHNob3VsZCBuZXZlciBiZSBhYmxlIHRvIHJhY2UgCmFn YWluc3QgZWFjaCBvdGhlci4gQW5kIGlmIHRoZXJlIGNvdWxkIGJlIGEgcmFjZSBiZXR3ZWVuIHJl Z2lzdGVyaW5nIGEgCmZvcm1hdCBhbmQgc29tZWJvZHkgdHJ5aW5nIHRvIHVzZSBpdCwgdGhlbiBz b21ldGhpbmcncyBmdW5kYW1lbnRhbGx5IAp3cm9uZyBhbnl3YXkgLSBzdXJlIHdlIGNvdWxkIHVz ZSBSRUFEX09OQ0UvV1JJVEVfT05DRSBmb3IgYWNjZXNzaW5nIHRoZSAKdGFibGUsIGJ1dCB0aGF0 IHdvdWxkIGJlIGJhc2ljYWxseSBiZSBhZG1pdHRpbmcgdGhhdCB3ZSd2ZSBmYWlsZWQgYXQgdGhl IApwcmltYXJ5IHB1cnBvc2Ugb2YgbWFraW5nIHN1cmUgZm9ybWF0cyBhcmUgbG9hZGVkICpiZWZv cmUqIHRoZSB1c2VycyAKdGhhdCBkZXBlbmQgb24gdGhlbS4KCldpdGggYSBkaXJlY3RseS1pbmRl eGVkIHRhYmxlIHRoZXJlJ3Mgbm8gY29udGVudGlvbiBiZXR3ZWVuIGxvb2tpbmcgdXAgCm9uZSBm b3JtYXQgYW5kIHJlZ2lzdGVyaW5nIGFub3RoZXIgdW5yZWxhdGVkIGZvcm1hdCwgdW5saWtlIHdp dGggYSBsaXN0LgoKUm9iaW4uCgo+IAo+IFRoYW5rcywKPiBJc2FhYwo+Pj4gKwo+Pj4gwqAgc3Ry dWN0IGlvX3BndGFibGVfb3BzICphbGxvY19pb19wZ3RhYmxlX29wcyhlbnVtIGlvX3BndGFibGVf Zm10IGZtdCwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBpb19wZ3RhYmxlX2NmZyAqY2ZnLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdm9pZCAqY29va2llKQo+Pj4gwqAgewo+ Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW9fcGd0YWJsZSAqaW9wOwo+Pj4gLcKgwqDCoCBjb25zdCBz dHJ1Y3QgaW9fcGd0YWJsZV9pbml0X2ZucyAqZm5zOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgaW9fcGd0 YWJsZV9pbml0X2ZucyAqZm5zOwo+Pj4gwqDCoMKgwqDCoMKgwqAgaWYgKGZtdCA+PSBJT19QR1RB QkxFX05VTV9GTVRTKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+Pj4gwqAg LcKgwqDCoCBmbnMgPSBpb19wZ3RhYmxlX2luaXRfdGFibGVbZm10XTsKPj4+ICvCoMKgwqAgZm5z ID0gaW9fcGd0YWJsZV9nZXRfaW5pdF9mbnMoZm10KTsKPj4+IMKgwqDCoMKgwqAgaWYgKCFmbnMp Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+PiDCoCBAQCAtNTksMTIgKzcx LDY0IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX2lvX3BndGFibGVfb3BzKTsKPj4+IMKgIHZv aWQgZnJlZV9pb19wZ3RhYmxlX29wcyhzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMgKm9wcykKPj4+IMKg IHsKPj4+IMKgwqDCoMKgwqAgc3RydWN0IGlvX3BndGFibGUgKmlvcDsKPj4+ICvCoMKgwqAgc3Ry dWN0IGlvX3BndGFibGVfaW5pdF9mbnMgKmZuczsKPj4+IMKgwqDCoMKgwqDCoMKgIGlmICghb3Bz KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+IMKgwqDCoMKgwqDCoMKgIGlvcCA9 IGlvX3BndGFibGVfb3BzX3RvX3BndGFibGUob3BzKTsKPj4+IMKgwqDCoMKgwqAgaW9fcGd0YWJs ZV90bGJfZmx1c2hfYWxsKGlvcCk7Cj4+PiAtwqDCoMKgIGlvX3BndGFibGVfaW5pdF90YWJsZVtp b3AtPmZtdF0tPmZyZWUoaW9wKTsKPj4+ICvCoMKgwqAgZm5zID0gaW9fcGd0YWJsZV9nZXRfaW5p dF9mbnMoaW9wLT5mbXQpOwo+Pj4gK8KgwqDCoCBpZiAoZm5zKQo+Pj4gK8KgwqDCoMKgwqDCoMKg IGZucy0+ZnJlZShpb3ApOwo+Pj4gwqAgfQo+Pj4gwqAgRVhQT1JUX1NZTUJPTF9HUEwoZnJlZV9p b19wZ3RhYmxlX29wcyk7Cj4+PiArCj4+PiAraW50IGlvX3BndGFibGVfb3BzX3JlZ2lzdGVyKHN0 cnVjdCBpb19wZ3RhYmxlX2luaXRfZm5zICppbml0X2ZucykKPj4+ICt7Cj4+PiArwqDCoMKgIHN0 cnVjdCBpb19wZ3RhYmxlX2luaXRfZm5zX25vZGUgKml0ZXIsICpmbnNfbm9kZTsKPj4+ICvCoMKg wqAgaW50IHJldCA9IDA7Cj4+PiArCj4+PiArwqDCoMKgIGlmICghaW5pdF9mbnMgfHwgaW5pdF9m bnMtPmZtdCA+PSBJT19QR1RBQkxFX05VTV9GTVRTIHx8Cj4+PiArwqDCoMKgwqDCoMKgwqAgIWlu aXRfZm5zLT5hbGxvYyB8fCAhaW5pdF9mbnMtPmZyZWUpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArwqDCoMKgIGZuc19ub2RlID0ga3phbGxvYyhzaXplb2Yo KmZuc19ub2RlKSwgR0ZQX0tFUk5FTCk7Cj4+PiArwqDCoMKgIGlmICghZm5zX25vZGUpCj4+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+PiArCj4+PiArwqDCoMKgIHdyaXRlX2xv Y2soJmlvX3BndGFibGVfaW5pdF9mbnNfbGlzdF9sb2NrKTsKPj4+ICvCoMKgwqAgbGlzdF9mb3Jf ZWFjaF9lbnRyeShpdGVyLCAmaW9fcGd0YWJsZV9pbml0X2Zuc19saXN0LCBsaXN0KQo+Pj4gK8Kg wqDCoMKgwqDCoMKgIGlmIChpdGVyLT5mbnMtPmZtdCA9PSBpbml0X2Zucy0+Zm10KSB7Cj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUVYSVNUOwo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAga2ZyZWUoZm5zX25vZGUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoIXJldCkgewo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGZuc19ub2RlLT5mbnMgPSBpbml0X2ZuczsKPj4+ICvCoMKgwqDC oMKgwqDCoCBJTklUX0xJU1RfSEVBRCgmZm5zX25vZGUtPmxpc3QpOwo+Pj4gK8KgwqDCoMKgwqDC oMKgIGxpc3RfYWRkX3RhaWwoJmZuc19ub2RlLT5saXN0LCAmaW9fcGd0YWJsZV9pbml0X2Zuc19s aXN0KTsKPj4+ICvCoMKgwqAgfQo+Pj4gK8KgwqDCoCB3cml0ZV91bmxvY2soJmlvX3BndGFibGVf aW5pdF9mbnNfbGlzdF9sb2NrKTsKPj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICt9Cj4+PiAr RVhQT1JUX1NZTUJPTF9HUEwoaW9fcGd0YWJsZV9vcHNfcmVnaXN0ZXIpOwo+Pj4gKwo+Pj4gK3Zv aWQgaW9fcGd0YWJsZV9vcHNfdW5yZWdpc3RlcihzdHJ1Y3QgaW9fcGd0YWJsZV9pbml0X2ZucyAq aW5pdF9mbnMpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3QgaW9fcGd0YWJsZV9pbml0X2Zuc19u b2RlICppdGVyLCAqdG1wOwo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoIWluaXRfZm5zKQo+Pj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybjsKPj4+ICsKPj4+ICvCoMKgwqAgd3JpdGVfbG9jaygmaW9fcGd0 YWJsZV9pbml0X2Zuc19saXN0X2xvY2spOwo+Pj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUoaXRlciwgdG1wLCAmaW9fcGd0YWJsZV9pbml0X2Zuc19saXN0LCAKPj4+IGxpc3QpCj4+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKGl0ZXItPmZucyA9PSBpbml0X2Zucykgewo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbGlzdF9kZWwoJml0ZXItPmxpc3QpOwo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAga2ZyZWUoaXRlcik7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVh azsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgIHdyaXRlX3VubG9jaygmaW9fcGd0 YWJsZV9pbml0X2Zuc19saXN0X2xvY2spOwo+Pj4gK30KPj4+ICtFWFBPUlRfU1lNQk9MX0dQTChp b19wZ3RhYmxlX29wc191bnJlZ2lzdGVyKTsKPj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L2lvLXBndGFibGUuaCBiL2luY2x1ZGUvbGludXgvaW8tcGd0YWJsZS5oCj4+PiBpbmRleCBlYTcy N2ViLi40NWIzNjdjZSAxMDA2NDQKPj4+IC0tLSBhL2luY2x1ZGUvbGludXgvaW8tcGd0YWJsZS5o Cj4+PiArKysgYi9pbmNsdWRlL2xpbnV4L2lvLXBndGFibGUuaAo+Pj4gQEAgLTE2Myw2ICsxNjMs MzggQEAgc3RydWN0IGlvX3BndGFibGVfb3BzIHsKPj4+IMKgIH07Cj4+PiDCoMKgwqAgLyoqCj4+ PiArICogc3RydWN0IGlvX3BndGFibGVfaW5pdF9mbnMgLSBBbGxvYy9mcmVlIGEgc2V0IG9mIHBh Z2UgdGFibGVzIGZvciBhCj4+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhcnRpY3VsYXIgZm9ybWF0Lgo+Pj4gKyAqCj4+PiAr ICogQGZtdDrCoMKgIFRoZSBwYWdlIHRhYmxlIGZvcm1hdC4KPj4+ICsgKiBAYWxsb2M6IEFsbG9j YXRlIGEgc2V0IG9mIHBhZ2UgdGFibGVzIGRlc2NyaWJlZCBieSBjZmcuCj4+PiArICogQGZyZWU6 wqAgRnJlZSB0aGUgcGFnZSB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoIGlvcC4KPj4+ICsgKi8KPj4+ ICtzdHJ1Y3QgaW9fcGd0YWJsZV9pbml0X2ZucyB7Cj4+PiArwqDCoMKgIGVudW0gaW9fcGd0YWJs ZV9mbXQgZm10Owo+Pj4gK8KgwqDCoCBzdHJ1Y3QgaW9fcGd0YWJsZSAqKCphbGxvYykoc3RydWN0 IGlvX3BndGFibGVfY2ZnICpjZmcsIHZvaWQgCj4+PiAqY29va2llKTsKPj4+ICvCoMKgwqAgdm9p ZCAoKmZyZWUpKHN0cnVjdCBpb19wZ3RhYmxlICppb3ApOwo+Pj4gK307Cj4+PiArCj4+PiArLyoq Cj4+PiArICogaW9fcGd0YWJsZV9vcHNfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIHRoZSBwYWdlIHRh YmxlIHJvdXRpbmVzIGZvciAKPj4+IGEgcGFnZSB0YWJsZQo+Pj4gKyAqwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9ybWF0Lgo+Pj4gKyAq Cj4+PiArICogQGluaXRfZm5zOiBUaGUgZnVuY3Rpb25zIGZvciBhbGxvY2F0aW5nIGFuZCBmcmVl aW5nIHRoZSBwYWdlIAo+Pj4gdGFibGVzIG9mCj4+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGEgcGFydGljdWxhciBmb3JtYXQuCj4+PiArICovCj4+PiAraW50IGlvX3BndGFibGVfb3BzX3Jl Z2lzdGVyKHN0cnVjdCBpb19wZ3RhYmxlX2luaXRfZm5zICppbml0X2Zucyk7Cj4+PiArCj4+PiAr LyoqCj4+PiArICogaW9fcGd0YWJsZV9vcHNfdW5yZWdpc3RlcigpIC0gVW5yZWdpc3RlciB0aGUg cGFnZSB0YWJsZSByb3V0aW5lcyAKPj4+IGZvciBhIHBhZ2UKPj4+ICsgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0YWJsZSBmb3Jt YXQuCj4+PiArICoKPj4+ICsgKiBAaW5pdF9mbnM6IFRoZSBmdW5jdGlvbnMgZm9yIGFsbG9jYXRp bmcgYW5kIGZyZWVpbmcgdGhlIHBhZ2UgCj4+PiB0YWJsZXMgb2YKPj4+ICsgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYSBwYXJ0aWN1bGFyIGZvcm1hdC4KPj4+ICsgKi8KPj4+ICt2b2lkIGlvX3Bn dGFibGVfb3BzX3VucmVnaXN0ZXIoc3RydWN0IGlvX3BndGFibGVfaW5pdF9mbnMgKmluaXRfZm5z KTsKPj4+ICsKPj4+ICsvKioKPj4+IMKgwqAgKiBhbGxvY19pb19wZ3RhYmxlX29wcygpIC0gQWxs b2NhdGUgYSBwYWdlIHRhYmxlIGFsbG9jYXRvciBmb3IgdXNlIAo+Pj4gYnkgYW4gSU9NTVUuCj4+ PiDCoMKgICoKPj4+IMKgwqAgKiBAZm10OsKgwqDCoCBUaGUgcGFnZSB0YWJsZSBmb3JtYXQuCj4+ PiBAQCAtMjMzLDIzICsyNjUsNCBAQCBpb19wZ3RhYmxlX3RsYl9hZGRfcGFnZShzdHJ1Y3QgaW9f cGd0YWJsZSAqaW9wLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlvcC0+Y2ZnLnRsYi0+dGxiX2Fk ZF9wYWdlKGdhdGhlciwgaW92YSwgZ3JhbnVsZSwgCj4+PiBpb3AtPmNvb2tpZSk7Cj4+PiDCoCB9 Cj4+PiDCoCAtLyoqCj4+PiAtICogc3RydWN0IGlvX3BndGFibGVfaW5pdF9mbnMgLSBBbGxvYy9m cmVlIGEgc2V0IG9mIHBhZ2UgdGFibGVzIGZvciBhCj4+PiAtICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhcnRpY3VsYXIgZm9ybWF0 Lgo+Pj4gLSAqCj4+PiAtICogQGFsbG9jOiBBbGxvY2F0ZSBhIHNldCBvZiBwYWdlIHRhYmxlcyBk ZXNjcmliZWQgYnkgY2ZnLgo+Pj4gLSAqIEBmcmVlOsKgIEZyZWUgdGhlIHBhZ2UgdGFibGVzIGFz c29jaWF0ZWQgd2l0aCBpb3AuCj4+PiAtICovCj4+PiAtc3RydWN0IGlvX3BndGFibGVfaW5pdF9m bnMgewo+Pj4gLcKgwqDCoCBzdHJ1Y3QgaW9fcGd0YWJsZSAqKCphbGxvYykoc3RydWN0IGlvX3Bn dGFibGVfY2ZnICpjZmcsIHZvaWQgCj4+PiAqY29va2llKTsKPj4+IC3CoMKgwqAgdm9pZCAoKmZy ZWUpKHN0cnVjdCBpb19wZ3RhYmxlICppb3ApOwo+Pj4gLX07Cj4+PiAtCj4+PiAtZXh0ZXJuIHN0 cnVjdCBpb19wZ3RhYmxlX2luaXRfZm5zIGlvX3BndGFibGVfYXJtXzMyX2xwYWVfczFfaW5pdF9m bnM7Cj4+PiAtZXh0ZXJuIHN0cnVjdCBpb19wZ3RhYmxlX2luaXRfZm5zIGlvX3BndGFibGVfYXJt XzMyX2xwYWVfczJfaW5pdF9mbnM7Cj4+PiAtZXh0ZXJuIHN0cnVjdCBpb19wZ3RhYmxlX2luaXRf Zm5zIGlvX3BndGFibGVfYXJtXzY0X2xwYWVfczFfaW5pdF9mbnM7Cj4+PiAtZXh0ZXJuIHN0cnVj dCBpb19wZ3RhYmxlX2luaXRfZm5zIGlvX3BndGFibGVfYXJtXzY0X2xwYWVfczJfaW5pdF9mbnM7 Cj4+PiAtZXh0ZXJuIHN0cnVjdCBpb19wZ3RhYmxlX2luaXRfZm5zIGlvX3BndGFibGVfYXJtX3Y3 c19pbml0X2ZuczsKPj4+IC1leHRlcm4gc3RydWN0IGlvX3BndGFibGVfaW5pdF9mbnMgaW9fcGd0 YWJsZV9hcm1fbWFsaV9scGFlX2luaXRfZm5zOwo+Pj4gLQo+Pj4gwqAgI2VuZGlmIC8qIF9fSU9f UEdUQUJMRV9IICovCj4+Pgo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwo+PiBsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAo+PiBsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKPj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCj4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBpb21tdSBtYWlsaW5nIGxpc3QKPiBpb21t dUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwo+IGh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0 aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lvbW11Cl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmlvbW11IG1haWxpbmcgbGlzdAppb21tdUBsaXN0cy5saW51 eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1h bi9saXN0aW5mby9pb21tdQ==