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=-15.3 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,USER_AGENT_SANE_1 autolearn=ham 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 A0886C433E0 for ; Mon, 15 Mar 2021 12:36:39 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 25CF864E10 for ; Mon, 15 Mar 2021 12:36:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 25CF864E10 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AEDB389DD5; Mon, 15 Mar 2021 12:36:38 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5724E89DD5 for ; Mon, 15 Mar 2021 12:36:37 +0000 (UTC) IronPort-SDR: RGXsMbolwLnHP7XlOUdk7RfsvTZZBdV4Nds5zJPukpB1jRYLfsSFWa+NHPUj6bpUt9EaWyIhLz sRUwM08F9eAw== X-IronPort-AV: E=McAfee;i="6000,8403,9923"; a="188438353" X-IronPort-AV: E=Sophos;i="5.81,249,1610438400"; d="scan'208";a="188438353" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Mar 2021 05:36:36 -0700 IronPort-SDR: mo4IQJ2S60ZgOIlDDpI0dSW6gwM4J285Y3kTbBZyaxxU3iUy/RCPWZCmkDMwcivj57LEVp+7rr BebyfPf/xJHg== X-IronPort-AV: E=Sophos;i="5.81,249,1610438400"; d="scan'208";a="405158036" Received: from kaleksan-mobl.ger.corp.intel.com (HELO [10.249.43.37]) ([10.249.43.37]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Mar 2021 05:36:35 -0700 To: =?UTF-8?Q?Thomas_Hellstr=c3=b6m_=28Intel=29?= , intel-gfx@lists.freedesktop.org References: <20210311134249.588632-1-maarten.lankhorst@linux.intel.com> <20210311134249.588632-17-maarten.lankhorst@linux.intel.com> <04640842-87f1-daed-5ab2-df8b0ce66a80@shipmail.org> From: Maarten Lankhorst Message-ID: <6c91460d-5b37-9a0b-6639-2728ac47736f@linux.intel.com> Date: Mon, 15 Mar 2021 13:36:33 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 MIME-Version: 1.0 In-Reply-To: <04640842-87f1-daed-5ab2-df8b0ce66a80@shipmail.org> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH v8 16/69] drm/i915: Fix userptr so we do not have to worry about obj->mm.lock, v7. X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T3AgMjAyMS0wMy0xMSBvbSAxODoyNCBzY2hyZWVmIFRob21hcyBIZWxsc3Ryw7ZtIChJbnRlbCk6 Cj4KPiBIaSwgTWFhcnRlbiwKPgo+IE9uIDMvMTEvMjEgMjo0MSBQTSwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4+IEluc3RlYWQgb2YgZG9pbmcgd2hhdCB3ZSBkbyBjdXJyZW50bHksIHdoaWNo IHdpbGwgbmV2ZXIgd29yayB3aXRoCj4+IFBST1ZFX0xPQ0tJTkcsIGRvIHRoZSBzYW1lIGFzIEFN RCBkb2VzLCBhbmQgc29tZXRoaW5nIHNpbWlsYXIgdG8KPj4gcmVsb2NhdGlvbiBzbG93cGF0aC4g V2hlbiBhbGwgbG9ja3MgYXJlIGRyb3BwZWQsIHdlIGFjcXVpcmUgdGhlCj4+IHBhZ2VzIGZvciBw aW5uaW5nLiBXaGVuIHRoZSBsb2NrcyBhcmUgdGFrZW4sIHdlIHRyYW5zZmVyIHRob3NlCj4+IHBh Z2VzIGluIC5nZXRfcGFnZXMoKSB0byB0aGUgYm8uIEFzIGEgZmluYWwgY2hlY2sgYmVmb3JlIGlu c3RhbGxpbmcKPj4gdGhlIGZlbmNlcywgd2UgZW5zdXJlIHRoYXQgdGhlIG1tdSBub3RpZmllciB3 YXMgbm90IGNhbGxlZDsgaWYgaXQgaXMsCj4+IHdlIHJldHVybiAtRUFHQUlOIHRvIHVzZXJzcGFj ZSB0byBzaWduYWwgaXQgaGFzIHRvIHN0YXJ0IG92ZXIuCj4+Cj4+IENoYW5nZXMgc2luY2UgdjE6 Cj4+IC0gVW5iaW5kaW5nIGlzIGRvbmUgaW4gc3VibWl0X2luaXQgb25seS4gc3VibWl0X2JlZ2lu KCkgcmVtb3ZlZC4KPj4gLSBNTVVfTk9URklFUiAtPiBNTVVfTk9USUZJRVIKPj4gQ2hhbmdlcyBz aW5jZSB2MjoKPj4gLSBNYWtlIGk5MTUtPm1tLm5vdGlmaWVyIGEgc3BpbmxvY2suCj4+IENoYW5n ZXMgc2luY2UgdjM6Cj4+IC0gQWRkIFdBUk5fT04gaWYgdGhlcmUgYXJlIGFueSBwYWdlIHJlZmVy ZW5jZXMgbGVmdCwgc2hvdWxkIGhhdmUgYmVlbiAwLgo+PiAtIFJldHVybiAwIG9uIHN1Y2Nlc3Mg aW4gc3VibWl0X2luaXQoKSwgYnVnIGZyb20gc3BpbmxvY2sgY29udmVyc2lvbi4KPj4gLSBSZWxl YXNlIHB2ZWMgb3V0c2lkZSBvZiBub3RpZmllcl9sb2NrIChUaG9tYXMpLgo+PiBDaGFuZ2VzIHNp bmNlIHY0Ogo+PiAtIE1lbnRpb24gd2h5IHdlJ3JlIGNsZWFyaW5nIGViLT5baSArIDFdLnZtYSBp biB0aGUgY29kZS4gKFRob21hcykKPj4gLSBBY3R1YWxseSBjaGVjayBhbGwgaW52YWxpZGF0aW9u cyBpbiBlYl9tb3ZlX3RvX2dwdS4gKFRob21hcykKPj4gLSBEbyBub3Qgd2FpdCB3aGVuIHByb2Nl c3MgaXMgZXhpdGluZyB0byBmaXggZ2VtX2N0eF9wZXJzaXN0ZW5jZS51c2VycHRyLgo+PiBDaGFu Z2VzIHNpbmNlIHY1Ogo+PiAtIENsYXJpZnkgd2h5IGNoZWNrIG9uIFBGX0VYSVRJTkcgaXMgKHRl bXBvcmFyaWx5KSByZXF1aXJlZC4KPj4gQ2hhbmdlcyBzaW5jZSB2NjoKPj4gLSBFbnN1cmUgdXNl cnB0ciB2YWxpZGl0eSBpcyBjaGVja2VkIGluIHNldF9kb21haW4gdGhyb3VnaCBhIHNwZWNpYWwg cGF0aC4KPj4KPj4gU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFu a2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPj4gQWNrZWQtYnk6IERhdmUgQWlybGllIDxhaXJsaWVk QHJlZGhhdC5jb20+Cj4KPiBNb3N0bHkgTEdUTS4gQ29tbWVudHMgLyBzdWdnZXN0aW9ucyBiZWxv dy4KPgo+PiAtLS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kb21haW4u YyAgICB8ICAxOCArLQo+PiAgLi4uL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1ZmZl ci5jICAgIHwgMTAxICsrLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29i amVjdC5oICAgIHwgIDM4ICstCj4+ICAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmpl Y3RfdHlwZXMuaCAgfCAgMTAgKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9wYWdlcy5jICAgICB8ICAgMiArLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3VzZXJwdHIuYyAgIHwgNzk2ICsrKysrKy0tLS0tLS0tLS0tLQo+PiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgIHwgICA5ICstCj4+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICAgfCAgIDUgKy0KPj4gIDggZmlsZXMg Y2hhbmdlZCwgMzk1IGluc2VydGlvbnMoKyksIDU4NCBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kb21haW4uYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kb21haW4uYwo+PiBpbmRleCAyZjQ5ODBiZjc0 MmUuLjc2Y2I5ZjVjNjZhYSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX2RvbWFpbi5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9kb21haW4uYwo+PiBAQCAtNDY4LDE0ICs0NjgsMjggQEAgaTkxNV9nZW1fc2V0X2RvbWFp bl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+PiAgCWlmICghb2Jq KQo+PiAgCQlyZXR1cm4gLUVOT0VOVDsKPj4gIAo+PiArCWlmIChpOTE1X2dlbV9vYmplY3RfaXNf dXNlcnB0cihvYmopKSB7Cj4+ICsJCS8qCj4+ICsJCSAqIFRyeSB0byBncmFiIHVzZXJwdHIgcGFn ZXMsIGlyaXMgdXNlcyBzZXRfZG9tYWluIHRvIGNoZWNrCj4+ICsJCSAqIHVzZXJwdHIgdmFsaWRp dHkKPj4gKwkJICovCj4+ICsJCWVyciA9IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3ZhbGlkYXRl KG9iaik7Cj4+ICsJCWlmICghZXJyKQo+PiArCQkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3dhaXQo b2JqLAo+PiArCQkJCQkJICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUgfAo+PiArCQkJCQkJICAg STkxNV9XQUlUX1BSSU9SSVRZIHwKPj4gKwkJCQkJCSAgICh3cml0ZV9kb21haW4gPyBJOTE1X1dB SVRfQUxMIDogMCksCj4+ICsJCQkJCQkgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4+ICsJCWdv dG8gb3V0Owo+PiArCX0KPj4gKwo+PiAgCS8qCj4+ICAJICogUHJveHkgb2JqZWN0cyBkbyBub3Qg Y29udHJvbCBhY2Nlc3MgdG8gdGhlIGJhY2tpbmcgc3RvcmFnZSwgZXJnbwo+PiAgCSAqIHRoZXkg Y2Fubm90IGJlIHVzZWQgYXMgYSBtZWFucyB0byBtYW5pcHVsYXRlIHRoZSBjYWNoZSBkb21haW4K Pj4gIAkgKiB0cmFja2luZyBmb3IgdGhhdCBiYWNraW5nIHN0b3JhZ2UuIFRoZSBwcm94eSBvYmpl Y3QgaXMgYWx3YXlzCj4+ICAJICogY29uc2lkZXJlZCB0byBiZSBvdXRzaWRlIG9mIGFueSBjYWNo ZSBkb21haW4uCj4+ICAJICovCj4+IC0JaWYgKGk5MTVfZ2VtX29iamVjdF9pc19wcm94eShvYmop ICYmCj4+IC0JICAgICFpOTE1X2dlbV9vYmplY3RfaXNfdXNlcnB0cihvYmopKSB7Cj4+ICsJaWYg KGk5MTVfZ2VtX29iamVjdF9pc19wcm94eShvYmopKSB7Cj4+ICAJCWVyciA9IC1FTlhJTzsKPj4g IAkJZ290byBvdXQ7Cj4+ICAJfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9leGVjYnVmZmVyLmMKPj4gaW5kZXggYzcyNDQwYzEwODc2Li42NGQwZTVmY2NlY2UgMTAw NjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVy LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIu Ywo+PiBAQCAtNTMsMTQgKzUzLDE2IEBAIGVudW0gewo+PiAgLyogX19FWEVDX09CSkVDVF9OT19S RVNFUlZFIGlzIEJJVCgzMSksIGRlZmluZWQgaW4gaTkxNV92bWEuaCAqLwo+PiAgI2RlZmluZSBf X0VYRUNfT0JKRUNUX0hBU19QSU4JCUJJVCgzMCkKPj4gICNkZWZpbmUgX19FWEVDX09CSkVDVF9I QVNfRkVOQ0UJCUJJVCgyOSkKPj4gLSNkZWZpbmUgX19FWEVDX09CSkVDVF9ORUVEU19NQVAJCUJJ VCgyOCkKPj4gLSNkZWZpbmUgX19FWEVDX09CSkVDVF9ORUVEU19CSUFTCUJJVCgyNykKPj4gLSNk ZWZpbmUgX19FWEVDX09CSkVDVF9JTlRFUk5BTF9GTEFHUwkofjB1IDw8IDI3KSAvKiBhbGwgb2Yg dGhlIGFib3ZlICsgKi8KPj4gKyNkZWZpbmUgX19FWEVDX09CSkVDVF9VU0VSUFRSX0lOSVQJQklU KDI4KQo+PiArI2RlZmluZSBfX0VYRUNfT0JKRUNUX05FRURTX01BUAkJQklUKDI3KQo+PiArI2Rl ZmluZSBfX0VYRUNfT0JKRUNUX05FRURTX0JJQVMJQklUKDI2KQo+PiArI2RlZmluZSBfX0VYRUNf T0JKRUNUX0lOVEVSTkFMX0ZMQUdTCSh+MHUgPDwgMjYpIC8qIGFsbCBvZiB0aGUgYWJvdmUgKyAq Lwo+PiAgI2RlZmluZSBfX0VYRUNfT0JKRUNUX1JFU0VSVkVEIChfX0VYRUNfT0JKRUNUX0hBU19Q SU4gfCBfX0VYRUNfT0JKRUNUX0hBU19GRU5DRSkKPj4gIAo+PiAgI2RlZmluZSBfX0VYRUNfSEFT X1JFTE9DCUJJVCgzMSkKPj4gICNkZWZpbmUgX19FWEVDX0VOR0lORV9QSU5ORUQJQklUKDMwKQo+ PiAtI2RlZmluZSBfX0VYRUNfSU5URVJOQUxfRkxBR1MJKH4wdSA8PCAzMCkKPj4gKyNkZWZpbmUg X19FWEVDX1VTRVJQVFJfVVNFRAlCSVQoMjkpCj4+ICsjZGVmaW5lIF9fRVhFQ19JTlRFUk5BTF9G TEFHUwkofjB1IDw8IDI5KQo+PiAgI2RlZmluZSBVUERBVEUJCQlQSU5fT0ZGU0VUX0ZJWEVECj4+ ICAKPj4gICNkZWZpbmUgQkFUQ0hfT0ZGU0VUX0JJQVMgKDI1NioxMDI0KQo+PiBAQCAtODY0LDYg Kzg2NiwyNiBAQCBzdGF0aWMgaW50IGViX2xvb2t1cF92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZm ZXIgKmViKQo+PiAgCQl9Cj4+ICAKPj4gIAkJZWJfYWRkX3ZtYShlYiwgaSwgYmF0Y2gsIHZtYSk7 Cj4+ICsKPj4gKwkJaWYgKGk5MTVfZ2VtX29iamVjdF9pc191c2VycHRyKHZtYS0+b2JqKSkgewo+ PiArCQkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2luaXQodm1hLT5vYmop Owo+PiArCQkJaWYgKGVycikgewo+PiArCQkJCWlmIChpICsgMSA8IGViLT5idWZmZXJfY291bnQp IHsKPj4gKwkJCQkJLyoKPj4gKwkJCQkJICogRXhlY2J1ZmZlciBjb2RlIGV4cGVjdHMgbGFzdCB2 bWEgZW50cnkgdG8gYmUgTlVMTCwKPj4gKwkJCQkJICogc2luY2Ugd2UgYWxyZWFkeSBpbml0aWFs aXplZCB0aGlzIGVudHJ5LAo+PiArCQkJCQkgKiBzZXQgdGhlIG5leHQgdmFsdWUgdG8gTlVMTCBv ciB3ZSBtZXNzIHVwCj4+ICsJCQkJCSAqIGNsZWFudXAgaGFuZGxpbmcuCj4+ICsJCQkJCSAqLwo+ PiArCQkJCQllYi0+dm1hW2kgKyAxXS52bWEgPSBOVUxMOwo+PiArCQkJCX0KPj4gKwo+PiArCQkJ CXJldHVybiBlcnI7Cj4+ICsJCQl9Cj4+ICsKPj4gKwkJCWViLT52bWFbaV0uZmxhZ3MgfD0gX19F WEVDX09CSkVDVF9VU0VSUFRSX0lOSVQ7Cj4+ICsJCQllYi0+YXJncy0+ZmxhZ3MgfD0gX19FWEVD X1VTRVJQVFJfVVNFRDsKPj4gKwkJfQo+PiAgCX0KPj4gIAo+PiAgCWlmICh1bmxpa2VseShlYi0+ YmF0Y2gtPmZsYWdzICYgRVhFQ19PQkpFQ1RfV1JJVEUpKSB7Cj4+IEBAIC05NjUsNyArOTg3LDcg QEAgZWJfZ2V0X3ZtYShjb25zdCBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgdW5zaWduZWQg bG9uZyBoYW5kbGUpCj4+ICAJfQo+PiAgfQo+PiAgCj4+IC1zdGF0aWMgdm9pZCBlYl9yZWxlYXNl X3ZtYXMoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsIGJvb2wgZmluYWwpCj4+ICtzdGF0aWMg dm9pZCBlYl9yZWxlYXNlX3ZtYXMoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsIGJvb2wgZmlu YWwsIGJvb2wgcmVsZWFzZV91c2VycHRyKQo+PiAgewo+PiAgCWNvbnN0IHVuc2lnbmVkIGludCBj b3VudCA9IGViLT5idWZmZXJfY291bnQ7Cj4+ICAJdW5zaWduZWQgaW50IGk7Cj4+IEBAIC05Nzks NiArMTAwMSwxMSBAQCBzdGF0aWMgdm9pZCBlYl9yZWxlYXNlX3ZtYXMoc3RydWN0IGk5MTVfZXhl Y2J1ZmZlciAqZWIsIGJvb2wgZmluYWwpCj4+ICAKPj4gIAkJZWJfdW5yZXNlcnZlX3ZtYShldik7 Cj4+ICAKPj4gKwkJaWYgKHJlbGVhc2VfdXNlcnB0ciAmJiBldi0+ZmxhZ3MgJiBfX0VYRUNfT0JK RUNUX1VTRVJQVFJfSU5JVCkgewo+PiArCQkJZXYtPmZsYWdzICY9IH5fX0VYRUNfT0JKRUNUX1VT RVJQVFJfSU5JVDsKPj4gKwkJCWk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9maW5pKHZt YS0+b2JqKTsKPj4gKwkJfQo+PiArCj4+ICAJCWlmIChmaW5hbCkKPj4gIAkJCWk5MTVfdm1hX3B1 dCh2bWEpOwo+PiAgCX0KPj4gQEAgLTE5MDksNiArMTkzNiwzMSBAQCBzdGF0aWMgaW50IGViX3By ZWZhdWx0X3JlbG9jYXRpb25zKGNvbnN0IHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQo+PiAg CXJldHVybiAwOwo+PiAgfQo+PiAgCj4+ICtzdGF0aWMgaW50IGViX3JlaW5pdF91c2VycHRyKHN0 cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQo+PiArewo+PiArCWNvbnN0IHVuc2lnbmVkIGludCBj b3VudCA9IGViLT5idWZmZXJfY291bnQ7Cj4+ICsJdW5zaWduZWQgaW50IGk7Cj4+ICsJaW50IHJl dDsKPj4gKwo+PiArCWlmIChsaWtlbHkoIShlYi0+YXJncy0+ZmxhZ3MgJiBfX0VYRUNfVVNFUlBU Ul9VU0VEKSkpCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IGNvdW50 OyBpKyspIHsKPj4gKwkJc3RydWN0IGViX3ZtYSAqZXYgPSAmZWItPnZtYVtpXTsKPj4gKwo+PiAr CQlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc191c2VycHRyKGV2LT52bWEtPm9iaikpCj4+ICsJCQlj b250aW51ZTsKPj4gKwo+PiArCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRf aW5pdChldi0+dm1hLT5vYmopOwo+PiArCQlpZiAocmV0KQo+PiArCQkJcmV0dXJuIHJldDsKPj4g Kwo+PiArCQlldi0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9VU0VSUFRSX0lOSVQ7Cj4+ICsJfQo+ PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gIHN0YXRpYyBub2lubGluZSBpbnQgZWJf cmVsb2NhdGVfcGFyc2Vfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKPj4gIAkJCQkJ ICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4+ICB7Cj4+IEBAIC0xOTIzLDcgKzE5NzUsNyBA QCBzdGF0aWMgbm9pbmxpbmUgaW50IGViX3JlbG9jYXRlX3BhcnNlX3Nsb3coc3RydWN0IGk5MTVf ZXhlY2J1ZmZlciAqZWIsCj4+ICAJfQo+PiAgCj4+ICAJLyogV2UgbWF5IHByb2Nlc3MgYW5vdGhl ciBleGVjYnVmZmVyIGR1cmluZyB0aGUgdW5sb2NrLi4uICovCj4+IC0JZWJfcmVsZWFzZV92bWFz KGViLCBmYWxzZSk7Cj4+ICsJZWJfcmVsZWFzZV92bWFzKGViLCBmYWxzZSwgdHJ1ZSk7Cj4+ICAJ aTkxNV9nZW1fd3dfY3R4X2ZpbmkoJmViLT53dyk7Cj4+ICAKPj4gIAlpZiAocnEpIHsKPj4gQEAg LTE5NjQsMTAgKzIwMTYsOCBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGViX3JlbG9jYXRlX3BhcnNl X3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCj4+ICAJCWVyciA9IDA7Cj4+ICAJfQo+ PiAgCj4+IC0jaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgo+PiAgCWlmICghZXJyKQo+PiAtCQlm bHVzaF93b3JrcXVldWUoZWItPmk5MTUtPm1tLnVzZXJwdHJfd3EpOwo+PiAtI2VuZGlmCj4+ICsJ CWVyciA9IGViX3JlaW5pdF91c2VycHRyKGViKTsKPj4gIAo+PiAgZXJyX3JlbG9jazoKPj4gIAlp OTE1X2dlbV93d19jdHhfaW5pdCgmZWItPnd3LCB0cnVlKTsKPj4gQEAgLTIwMjksNyArMjA3OSw3 IEBAIHN0YXRpYyBub2lubGluZSBpbnQgZWJfcmVsb2NhdGVfcGFyc2Vfc2xvdyhzdHJ1Y3QgaTkx NV9leGVjYnVmZmVyICplYiwKPj4gIAo+PiAgZXJyOgo+PiAgCWlmIChlcnIgPT0gLUVERUFETEsp IHsKPj4gLQkJZWJfcmVsZWFzZV92bWFzKGViLCBmYWxzZSk7Cj4+ICsJCWViX3JlbGVhc2Vfdm1h cyhlYiwgZmFsc2UsIGZhbHNlKTsKPj4gIAkJZXJyID0gaTkxNV9nZW1fd3dfY3R4X2JhY2tvZmYo JmViLT53dyk7Cj4+ICAJCWlmICghZXJyKQo+PiAgCQkJZ290byByZXBlYXRfdmFsaWRhdGU7Cj4+ IEBAIC0yMTI2LDcgKzIxNzYsNyBAQCBzdGF0aWMgaW50IGViX3JlbG9jYXRlX3BhcnNlKHN0cnVj dCBpOTE1X2V4ZWNidWZmZXIgKmViKQo+PiAgCj4+ICBlcnI6Cj4+ICAJaWYgKGVyciA9PSAtRURF QURMSykgewo+PiAtCQllYl9yZWxlYXNlX3ZtYXMoZWIsIGZhbHNlKTsKPj4gKwkJZWJfcmVsZWFz ZV92bWFzKGViLCBmYWxzZSwgZmFsc2UpOwo+PiAgCQllcnIgPSBpOTE1X2dlbV93d19jdHhfYmFj a29mZigmZWItPnd3KTsKPj4gIAkJaWYgKCFlcnIpCj4+ICAJCQlnb3RvIHJldHJ5Owo+PiBAQCAt MjIwMSw2ICsyMjUxLDMwIEBAIHN0YXRpYyBpbnQgZWJfbW92ZV90b19ncHUoc3RydWN0IGk5MTVf ZXhlY2J1ZmZlciAqZWIpCj4+ICAJCQkJCQkgICAgICBmbGFncyB8IF9fRVhFQ19PQkpFQ1RfTk9f UkVTRVJWRSk7Cj4+ICAJfQo+PiAgCj4+ICsjaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgo+PiAr CWlmICghZXJyICYmIChlYi0+YXJncy0+ZmxhZ3MgJiBfX0VYRUNfVVNFUlBUUl9VU0VEKSkgewo+ PiArCQlzcGluX2xvY2soJmViLT5pOTE1LT5tbS5ub3RpZmllcl9sb2NrKTsKPj4gKwo+PiArCQkv Kgo+PiArCQkgKiBjb3VudCBpcyBhbHdheXMgYXQgbGVhc3QgMSwgb3RoZXJ3aXNlIF9fRVhFQ19V U0VSUFRSX1VTRUQKPj4gKwkJICogY291bGQgbm90IGhhdmUgYmVlbiBzZXQKPj4gKwkJICovCj4+ ICsJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4+ICsJCQlzdHJ1Y3QgZWJfdm1hICpl diA9ICZlYi0+dm1hW2ldOwo+PiArCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9 IGV2LT52bWEtPm9iajsKPj4gKwo+PiArCQkJaWYgKCFpOTE1X2dlbV9vYmplY3RfaXNfdXNlcnB0 cihvYmopKQo+PiArCQkJCWNvbnRpbnVlOwo+PiArCj4+ICsJCQllcnIgPSBpOTE1X2dlbV9vYmpl Y3RfdXNlcnB0cl9zdWJtaXRfZG9uZShvYmopOwo+PiArCQkJaWYgKGVycikKPj4gKwkJCQlicmVh azsKPj4gKwkJfQo+PiArCj4+ICsJCXNwaW5fdW5sb2NrKCZlYi0+aTkxNS0+bW0ubm90aWZpZXJf bG9jayk7Cj4+ICsJfQo+PiArI2VuZGlmCj4+ICsKPj4gIAlpZiAodW5saWtlbHkoZXJyKSkKPj4g IAkJZ290byBlcnJfc2tpcDsKPj4gIAo+PiBAQCAtMzM0NSw3ICszNDE5LDcgQEAgaTkxNV9nZW1f ZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+PiAgCj4+ICAJZXJyID0gZWJf bG9va3VwX3ZtYXMoJmViKTsKPj4gIAlpZiAoZXJyKSB7Cj4+IC0JCWViX3JlbGVhc2Vfdm1hcygm ZWIsIHRydWUpOwo+PiArCQllYl9yZWxlYXNlX3ZtYXMoJmViLCB0cnVlLCB0cnVlKTsKPj4gIAkJ Z290byBlcnJfZW5naW5lOwo+PiAgCX0KPj4gIAo+PiBAQCAtMzQxNyw2ICszNDkxLDcgQEAgaTkx NV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+PiAgCj4+ICAJdHJh Y2VfaTkxNV9yZXF1ZXN0X3F1ZXVlKGViLnJlcXVlc3QsIGViLmJhdGNoX2ZsYWdzKTsKPj4gIAll cnIgPSBlYl9zdWJtaXQoJmViLCBiYXRjaCk7Cj4+ICsKPj4gIGVycl9yZXF1ZXN0Ogo+PiAgCWk5 MTVfcmVxdWVzdF9nZXQoZWIucmVxdWVzdCk7Cj4+ICAJZXJyID0gZWJfcmVxdWVzdF9hZGQoJmVi LCBlcnIpOwo+PiBAQCAtMzQzNyw3ICszNTEyLDcgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+PiAgCWk5MTVfcmVxdWVzdF9wdXQoZWIucmVxdWVzdCk7 Cj4+ICAKPj4gIGVycl92bWE6Cj4+IC0JZWJfcmVsZWFzZV92bWFzKCZlYiwgdHJ1ZSk7Cj4+ICsJ ZWJfcmVsZWFzZV92bWFzKCZlYiwgdHJ1ZSwgdHJ1ZSk7Cj4+ICAJaWYgKGViLnRyYW1wb2xpbmUp Cj4+ICAJCWk5MTVfdm1hX3VucGluKGViLnRyYW1wb2xpbmUpOwo+PiAgCVdBUk5fT04oZXJyID09 IC1FREVBRExLKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3Qu aAo+PiBpbmRleCA2OTUwOWRiZDAxYzcuLmI1YWY5YzQ0MGFjNSAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaAo+PiBAQCAtNTksNiArNTksNyBAQCBp OTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtX2Zyb21fZGF0YShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSwKPj4gIAkJCQkgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgcmVzb3VyY2Vfc2l6 ZV90IHNpemUpOwo+PiAgCj4+ICBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3Rfb3BzIGk5MTVfZ2VtX3NobWVtX29wczsKPj4gKwo+PiAgdm9pZCBfX2k5MTVfZ2VtX29iamVj dF9yZWxlYXNlX3NobWVtKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4+ICAJCQkJ ICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAo+PiAgCQkJCSAgICAgYm9vbCBuZWVkc19jbGZs dXNoKTsKPj4gQEAgLTI3OCwxMiArMjc5LDYgQEAgaTkxNV9nZW1fb2JqZWN0X25ldmVyX21tYXAo Y29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4gIAlyZXR1cm4gaTkxNV9n ZW1fb2JqZWN0X3R5cGVfaGFzKG9iaiwgSTkxNV9HRU1fT0JKRUNUX05PX01NQVApOwo+PiAgfQo+ PiAgCj4+IC1zdGF0aWMgaW5saW5lIGJvb2wKPj4gLWk5MTVfZ2VtX29iamVjdF9uZWVkc19hc3lu Y19jYW5jZWwoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4gLXsKPj4g LQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3R5cGVfaGFzKG9iaiwgSTkxNV9HRU1fT0JKRUNUX0FT WU5DX0NBTkNFTCk7Cj4+IC19Cj4+IC0KPj4gIHN0YXRpYyBpbmxpbmUgYm9vbAo+PiAgaTkxNV9n ZW1fb2JqZWN0X2lzX2ZyYW1lYnVmZmVyKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCj4+ICB7Cj4+IEBAIC01NzMsMTYgKzU2OCw2IEBAIHZvaWQgX19pOTE1X2dlbV9vYmpl Y3RfZmx1c2hfZnJvbnRidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPj4g IHZvaWQgX19pOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZV9mcm9udGJ1ZmZlcihzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+PiAgCQkJCQkgICAgICBlbnVtIGZiX29wX29yaWdpbiBv cmlnaW4pOwo+PiAgCj4+IC1zdGF0aWMgaW5saW5lIGJvb2wKPj4gLWk5MTVfZ2VtX29iamVjdF9p c191c2VycHRyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+IC17Cj4+IC0jaWZk ZWYgQ09ORklHX01NVV9OT1RJRklFUgo+PiAtCXJldHVybiBvYmotPnVzZXJwdHIubW07Cj4+IC0j ZWxzZQo+PiAtCXJldHVybiBmYWxzZTsKPj4gLSNlbmRpZgo+PiAtfQo+PiAtCj4+ICBzdGF0aWMg aW5saW5lIHZvaWQKPj4gIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9mcm9udGJ1ZmZlcihzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+PiAgCQkJCSAgZW51bSBmYl9vcF9vcmlnaW4gb3Jp Z2luKQo+PiBAQCAtNjAzLDQgKzU4OCwyNSBAQCBpbnQgaTkxNV9nZW1fb2JqZWN0X3JlYWRfZnJv bV9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIHU2NCBvZmZzZXQsCj4+ICAK Pj4gIGJvb2wgaTkxNV9nZW1fb2JqZWN0X2lzX3NobWVtKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopOwo+PiAgCj4+ICsjaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgo+PiAr c3RhdGljIGlubGluZSBib29sCj4+ICtpOTE1X2dlbV9vYmplY3RfaXNfdXNlcnB0cihzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+PiArewo+PiArCXJldHVybiBvYmotPnVzZXJwdHIu bm90aWZpZXIubW07Cj4+ICt9Cj4+ICsKPj4gK2ludCBpOTE1X2dlbV9vYmplY3RfdXNlcnB0cl9z dWJtaXRfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPj4gK2ludCBpOTE1 X2dlbV9vYmplY3RfdXNlcnB0cl9zdWJtaXRfZG9uZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKTsKPj4gK3ZvaWQgaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfc3VibWl0X2Zpbmkoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4+ICtpbnQgaTkxNV9nZW1fb2JqZWN0X3Vz ZXJwdHJfdmFsaWRhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4+ICsjZWxz ZQo+PiArc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX29iamVjdF9pc191c2VycHRyKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopIHsgcmV0dXJuIGZhbHNlOyB9Cj4+ICsKPj4gK3N0 YXRpYyBpbmxpbmUgaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9pbml0KHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopIHsgR0VNX0JVR19PTigxKTsgcmV0dXJuIC1FTk9E RVY7IH0KPj4gK3N0YXRpYyBpbmxpbmUgaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1p dF9kb25lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopIHsgR0VNX0JVR19PTigxKTsg cmV0dXJuIC1FTk9ERVY7IH0KPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9vYmplY3Rf dXNlcnB0cl9zdWJtaXRfZmluaShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKSB7IEdF TV9CVUdfT04oMSk7IH0KPj4gK3N0YXRpYyBpbmxpbmUgaW50IGk5MTVfZ2VtX29iamVjdF91c2Vy cHRyX3ZhbGlkYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopIHsgR0VNX0JVR19P TigxKTsgcmV0dXJuIC1FTk9ERVY7IH0KPj4gKwo+PiArI2VuZGlmCj4+ICsKPj4gICNlbmRpZgo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90 eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5o Cj4+IGluZGV4IDQxNDMyMjYxOTc4MS4uNGMwYTM0MjMxNjIzIDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCj4+IEBAIC03LDYg KzcsOCBAQAo+PiAgI2lmbmRlZiBfX0k5MTVfR0VNX09CSkVDVF9UWVBFU19IX18KPj4gICNkZWZp bmUgX19JOTE1X0dFTV9PQkpFQ1RfVFlQRVNfSF9fCj4+ICAKPj4gKyNpbmNsdWRlIDxsaW51eC9t bXVfbm90aWZpZXIuaD4KPj4gKwo+PiAgI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+Cj4+ICAjaW5j bHVkZSA8dWFwaS9kcm0vaTkxNV9kcm0uaD4KPj4gIAo+PiBAQCAtMzQsNyArMzYsNiBAQCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewo+PiAgI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1Rf SVNfU0hSSU5LQUJMRQlCSVQoMikKPj4gICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0lTX1BST1hZ CUJJVCgzKQo+PiAgI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfTk9fTU1BUAkJQklUKDQpCj4+IC0j ZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwJQklUKDUpCj4+ICAKPj4gIAkvKiBJ bnRlcmZhY2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQgaXRzIGJhY2tpbmcgc3RvcmFnZS4K Pj4gIAkgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlvciB0byB0aGUgdXNlIG9mIHRo ZSBhc3NvY2lhdGVkIHNldAo+PiBAQCAtMjk5LDEwICszMDAsMTEgQEAgc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3Qgewo+PiAgI2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVIKPj4gIAkJc3RydWN0 IGk5MTVfZ2VtX3VzZXJwdHIgewo+PiAgCQkJdWludHB0cl90IHB0cjsKPj4gKwkJCXVuc2lnbmVk IGxvbmcgbm90aWZpZXJfc2VxOwo+PiAgCj4+IC0JCQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1t Owo+PiAtCQkJc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW11X29iamVjdDsKPj4gLQkJCXN0cnVj dCB3b3JrX3N0cnVjdCAqd29yazsKPj4gKwkJCXN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIg bm90aWZpZXI7Cj4+ICsJCQlzdHJ1Y3QgcGFnZSAqKnB2ZWM7Cj4+ICsJCQlpbnQgcGFnZV9yZWY7 Cj4+ICAJCX0gdXNlcnB0cjsKPj4gICNlbmRpZgo+PiAgCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9wYWdlcy5jCj4+IGluZGV4IGJmNjFiODhhMjExMy4uZTdkNzY1MDA3MmM1 IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMu Ywo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYwo+PiBA QCAtMjI2LDcgKzIyNiw3IEBAIGludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4gIAkgKiBnZXRfcGFnZXMgYmFja2VuZHMgd2Ug c2hvdWxkIGJlIGJldHRlciBhYmxlIHRvIGhhbmRsZSB0aGUKPj4gIAkgKiBjYW5jZWxsYXRpb24g b2YgdGhlIGFzeW5jIHRhc2sgaW4gYSBtb3JlIHVuaWZvcm0gbWFubmVyLgo+PiAgCSAqLwo+PiAt CWlmICghcGFnZXMgJiYgIWk5MTVfZ2VtX29iamVjdF9uZWVkc19hc3luY19jYW5jZWwob2JqKSkK Pj4gKwlpZiAoIXBhZ2VzKQo+PiAgCQlwYWdlcyA9IEVSUl9QVFIoLUVJTlZBTCk7Cj4+ICAKPj4g IAlpZiAoIUlTX0VSUihwYWdlcykpCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3VzZXJwdHIuYwo+PiBpbmRleCBiNDY2YWIyZGVmNGQuLjFlNDJmYmM2ODY5NyAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jCj4+IEBAIC0y LDEwICsyLDM5IEBACj4+ICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCj4+ICAgKgo+ PiAgICogQ29weXJpZ2h0IMKpIDIwMTItMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgo+PiArICoKPj4g KyAgKiBCYXNlZCBvbiBhbWRncHVfbW4sIHdoaWNoIGJlYXJzIHRoZSBmb2xsb3dpbmcgbm90aWNl Ogo+PiArICoKPj4gKyAqIENvcHlyaWdodCAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIElu Yy4KPj4gKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCj4+ICsgKgo+PiArICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKPj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUKPj4gKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKPj4gKyAqIHdpdGhvdXQgbGltaXRhdGlv biB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKPj4gKyAq IGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8KPj4gKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwo+PiArICogdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgo+PiArICoKPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4+ICsgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKPj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5G UklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAo+PiArICogVEhFIENPUFlSSUdIVCBIT0xERVJT LCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAo+ PiArICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SCj4+ICsgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCj4+ICsgKiBVU0UgT1Ig T1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+PiArICoKPj4gKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl Cj4+ICsgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucwo+PiArICogb2YgdGhlIFNvZnR3YXJlLgo+PiArICoKPj4g KyAqLwo+PiArLyoKPj4gKyAqIEF1dGhvcnM6Cj4+ICsgKiAgICBDaHJpc3RpYW4gS8O2bmlnIDxj aHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4+ICAgKi8KPj4gIAo+PiAgI2luY2x1ZGUgPGxpbnV4 L21tdV9jb250ZXh0Lmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvbW11X25vdGlmaWVyLmg+Cj4+ICAj aW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+Cj4+ICAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgo+ PiAgI2luY2x1ZGUgPGxpbnV4L3NjaGVkL21tLmg+Cj4+IEBAIC0xNSwzNzMgKzQ0LDEyMSBAQAo+ PiAgI2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdC5oIgo+PiAgI2luY2x1ZGUgImk5MTVfc2NhdHRl cmxpc3QuaCIKPj4gIAo+PiAtI2lmIGRlZmluZWQoQ09ORklHX01NVV9OT1RJRklFUikKPj4gLQo+ PiAtc3RydWN0IGk5MTVfbW1fc3RydWN0IHsKPj4gLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKPj4g LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPj4gLQlzdHJ1Y3QgaTkxNV9tbXVfbm90 aWZpZXIgKm1uOwo+PiAtCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Cj4+IC0Jc3RydWN0IGtyZWYg a3JlZjsKPj4gLQlzdHJ1Y3QgcmN1X3dvcmsgd29yazsKPj4gLX07Cj4+IC0KPj4gLSNpbmNsdWRl IDxsaW51eC9pbnRlcnZhbF90cmVlLmg+Cj4+IC0KPj4gLXN0cnVjdCBpOTE1X21tdV9ub3RpZmll ciB7Cj4+IC0Jc3BpbmxvY2tfdCBsb2NrOwo+PiAtCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Cj4+ IC0Jc3RydWN0IG1tdV9ub3RpZmllciBtbjsKPj4gLQlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgb2Jq ZWN0czsKPj4gLQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tOwo+PiAtfTsKPj4gLQo+PiAtc3Ry dWN0IGk5MTVfbW11X29iamVjdCB7Cj4+IC0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsK Pj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+PiAtCXN0cnVjdCBpbnRlcnZh bF90cmVlX25vZGUgaXQ7Cj4+IC19Owo+PiArI2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVIKPj4g IAo+PiAtc3RhdGljIHZvaWQgYWRkX29iamVjdChzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbykK Pj4gKy8qKgo+PiArICogaTkxNV9nZW1fdXNlcnB0cl9pbnZhbGlkYXRlIC0gY2FsbGJhY2sgdG8g bm90aWZ5IGFib3V0IG1tIGNoYW5nZQo+PiArICoKPj4gKyAqIEBtbmk6IHRoZSByYW5nZSAobW0p IGlzIGFib3V0IHRvIHVwZGF0ZQo+PiArICogQHJhbmdlOiBkZXRhaWxzIG9uIHRoZSBpbnZhbGlk YXRpb24KPj4gKyAqIEBjdXJfc2VxOiBWYWx1ZSB0byBwYXNzIHRvIG1tdV9pbnRlcnZhbF9zZXRf c2VxKCkKPj4gKyAqCj4+ICsgKiBCbG9jayBmb3Igb3BlcmF0aW9ucyBvbiBCT3MgdG8gZmluaXNo IGFuZCBtYXJrIHBhZ2VzIGFzIGFjY2Vzc2VkIGFuZAo+PiArICogcG90ZW50aWFsbHkgZGlydHku Cj4+ICsgKi8KPj4gK3N0YXRpYyBib29sIGk5MTVfZ2VtX3VzZXJwdHJfaW52YWxpZGF0ZShzdHJ1 Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICptbmksCj4+ICsJCQkJCWNvbnN0IHN0cnVjdCBtbXVf bm90aWZpZXJfcmFuZ2UgKnJhbmdlLAo+PiArCQkJCQl1bnNpZ25lZCBsb25nIGN1cl9zZXEpCj4+ ICB7Cj4+IC0JR0VNX0JVR19PTighUkJfRU1QVFlfTk9ERSgmbW8tPml0LnJiKSk7Cj4+IC0JaW50 ZXJ2YWxfdHJlZV9pbnNlcnQoJm1vLT5pdCwgJm1vLT5tbi0+b2JqZWN0cyk7Cj4+IC19Cj4+ICsJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGNvbnRhaW5lcl9vZihtbmksIHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0LCB1c2VycHRyLm5vdGlmaWVyKTsKPj4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7Cj4+ICsJbG9uZyBy Owo+PiAgCj4+IC1zdGF0aWMgdm9pZCBkZWxfb2JqZWN0KHN0cnVjdCBpOTE1X21tdV9vYmplY3Qg Km1vKQo+PiAtewo+PiAtCWlmIChSQl9FTVBUWV9OT0RFKCZtby0+aXQucmIpKQo+PiAtCQlyZXR1 cm47Cj4+ICsJaWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSkKPj4gKwkJ cmV0dXJuIGZhbHNlOwo+PiAgCj4+IC0JaW50ZXJ2YWxfdHJlZV9yZW1vdmUoJm1vLT5pdCwgJm1v LT5tbi0+b2JqZWN0cyk7Cj4+IC0JUkJfQ0xFQVJfTk9ERSgmbW8tPml0LnJiKTsKPj4gLX0KPj4g KwlzcGluX2xvY2soJmk5MTUtPm1tLm5vdGlmaWVyX2xvY2spOwo+PiAgCj4+IC1zdGF0aWMgdm9p ZAo+PiAtX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwgYm9vbCB2YWx1ZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0 ICptbyA9IG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0Owo+PiArCW1tdV9pbnRlcnZhbF9zZXRfc2Vx KG1uaSwgY3VyX3NlcSk7Cj4+ICsKPj4gKwlzcGluX3VubG9jaygmaTkxNS0+bW0ubm90aWZpZXJf bG9jayk7Cj4+ICAKPj4gIAkvKgo+PiAtCSAqIER1cmluZyBtbV9pbnZhbGlkYXRlX3JhbmdlIHdl IG5lZWQgdG8gY2FuY2VsIGFueSB1c2VycHRyIHRoYXQKPj4gLQkgKiBvdmVybGFwcyB0aGUgcmFu Z2UgYmVpbmcgaW52YWxpZGF0ZWQuIERvaW5nIHNvIHJlcXVpcmVzIHRoZQo+PiAtCSAqIHN0cnVj dF9tdXRleCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQo+PiAt CSAqIHJlY3Vyc2lvbiwgdGhlIHVzZXIgbXVzdCBhbGlhcyB0aGUgdXNlcnB0ciBhZGRyZXNzIHNw YWNlIHdpdGgKPj4gLQkgKiBhIEdUVCBtbWFwcGluZyAocG9zc2libGUgd2l0aCBhIE1BUF9GSVhF RCkgLSB0aGVuIHdoZW4gd2UgaGF2ZQo+PiAtCSAqIHRvIGludmFsaWRhdGUgdGhhdCBtbWFwaW5n LCBtbV9pbnZhbGlkYXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCj4+IC0JICogdGhlIHVzZXJwdHIg YWRkcmVzcyAqYW5kKiB0aGUgc3RydWN0X211dGV4IGhlbGQuICBUbyBwcmV2ZW50IHRoYXQKPj4g LQkgKiB3ZSBzZXQgYSBmbGFnIHVuZGVyIHRoZSBpOTE1X21tdV9ub3RpZmllciBzcGlubG9jayB0 byBpbmRpY2F0ZQo+PiAtCSAqIHdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdmFsaWQuCj4+ICsJICog V2UgZG9uJ3Qgd2FpdCB3aGVuIHRoZSBwcm9jZXNzIGlzIGV4aXRpbmcuIFRoaXMgaXMgdmFsaWQK Pj4gKwkgKiBiZWNhdXNlIHRoZSBvYmplY3Qgd2lsbCBiZSBjbGVhbmVkIHVwIGFueXdheS4KPj4g KwkgKgo+PiArCSAqIFRoaXMgaXMgYWxzbyB0ZW1wb3JhcmlseSByZXF1aXJlZCBhcyBhIGhhY2ss IGJlY2F1c2Ugd2UKPj4gKwkgKiBjYW5ub3QgY3VycmVudGx5IGZvcmNlIG5vbi1jb25zaXN0ZW50 IGJhdGNoIGJ1ZmZlcnMgdG8gcHJlZW1wdAo+PiArCSAqIGFuZCByZXNjaGVkdWxlIGJ5IHdhaXRp bmcgb24gaXQsIGhhbmdpbmcgcHJvY2Vzc2VzIG9uIGV4aXQuCj4+ICAJICovCj4+IC0JaWYgKCFt bykKPj4gLQkJcmV0dXJuOwo+PiAtCj4+IC0Jc3Bpbl9sb2NrKCZtby0+bW4tPmxvY2spOwo+PiAt CWlmICh2YWx1ZSkKPj4gLQkJYWRkX29iamVjdChtbyk7Cj4+IC0JZWxzZQo+PiAtCQlkZWxfb2Jq ZWN0KG1vKTsKPj4gLQlzcGluX3VubG9jaygmbW8tPm1uLT5sb2NrKTsKPj4gLX0KPj4gLQo+PiAt c3RhdGljIGludAo+PiAtdXNlcnB0cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBt bXVfbm90aWZpZXIgKl9tbiwKPj4gLQkJCQkgIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFu Z2UgKnJhbmdlKQo+PiAtewo+PiAtCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW4gPQo+PiAt CQljb250YWluZXJfb2YoX21uLCBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIsIG1uKTsKPj4gLQlz dHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICppdDsKPj4gLQl1bnNpZ25lZCBsb25nIGVuZDsKPj4g LQlpbnQgcmV0ID0gMDsKPj4gLQo+PiAtCWlmIChSQl9FTVBUWV9ST09UKCZtbi0+b2JqZWN0cy5y Yl9yb290KSkKPj4gLQkJcmV0dXJuIDA7Cj4+IC0KPj4gLQkvKiBpbnRlcnZhbCByYW5nZXMgYXJl IGluY2x1c2l2ZSwgYnV0IGludmFsaWRhdGUgcmFuZ2UgaXMgZXhjbHVzaXZlICovCj4+IC0JZW5k ID0gcmFuZ2UtPmVuZCAtIDE7Cj4+IC0KPj4gLQlzcGluX2xvY2soJm1uLT5sb2NrKTsKPj4gLQlp dCA9IGludGVydmFsX3RyZWVfaXRlcl9maXJzdCgmbW4tPm9iamVjdHMsIHJhbmdlLT5zdGFydCwg ZW5kKTsKPj4gLQl3aGlsZSAoaXQpIHsKPj4gLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKPj4gLQo+PiAtCQlpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2Up KSB7Cj4+IC0JCQlyZXQgPSAtRUFHQUlOOwo+PiAtCQkJYnJlYWs7Cj4+IC0JCX0KPj4gLQo+PiAt CQkvKgo+PiAtCQkgKiBUaGUgbW11X29iamVjdCBpcyByZWxlYXNlZCBsYXRlIHdoZW4gZGVzdHJv eWluZyB0aGUKPj4gLQkJICogR0VNIG9iamVjdCBzbyBpdCBpcyBlbnRpcmVseSBwb3NzaWJsZSB0 byBnYWluIGEKPj4gLQkJICogcmVmZXJlbmNlIG9uIGFuIG9iamVjdCBpbiB0aGUgcHJvY2VzcyBv ZiBiZWluZyBmcmVlZAo+PiAtCQkgKiBzaW5jZSBvdXIgc2VyaWFsaXNhdGlvbiBpcyB2aWEgdGhl IHNwaW5sb2NrIGFuZCBub3QKPj4gLQkJICogdGhlIHN0cnVjdF9tdXRleCAtIGFuZCBjb25zZXF1 ZW50bHkgdXNlIGl0IGFmdGVyIGl0Cj4+IC0JCSAqIGlzIGZyZWVkIGFuZCB0aGVuIGRvdWJsZSBm cmVlIGl0LiBUbyBwcmV2ZW50IHRoYXQKPj4gLQkJICogdXNlLWFmdGVyLWZyZWUgd2Ugb25seSBh Y3F1aXJlIGEgcmVmZXJlbmNlIG9uIHRoZQo+PiAtCQkgKiBvYmplY3QgaWYgaXQgaXMgbm90IGlu IHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4KPj4gLQkJICovCj4+IC0JCW9iaiA9IGNv bnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpLT5vYmo7Cj4+IC0JCWlm ICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJm9iai0+YmFzZS5yZWZjb3VudCkpIHsKPj4gLQkJCWl0 ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQoaXQsIHJhbmdlLT5zdGFydCwgZW5kKTsKPj4gLQkJ CWNvbnRpbnVlOwo+PiAtCQl9Cj4+IC0JCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7Cj4+IC0KPj4g LQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmosCj4+IC0JCQkJCSAgICAgSTkxNV9H RU1fT0JKRUNUX1VOQklORF9BQ1RJVkUgfAo+PiAtCQkJCQkgICAgIEk5MTVfR0VNX09CSkVDVF9V TkJJTkRfQkFSUklFUik7Cj4+IC0JCWlmIChyZXQgPT0gMCkKPj4gLQkJCXJldCA9IF9faTkxNV9n ZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOwo+PiAtCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7 Cj4+IC0JCWlmIChyZXQpCj4+IC0JCQlyZXR1cm4gcmV0Owo+PiArCWlmIChjdXJyZW50LT5mbGFn cyAmIFBGX0VYSVRJTkcpCj4+ICsJCXJldHVybiB0cnVlOwo+PiAgCj4+IC0JCXNwaW5fbG9jaygm bW4tPmxvY2spOwo+PiAtCj4+IC0JCS8qCj4+IC0JCSAqIEFzIHdlIGRvIG5vdCAoeWV0KSBwcm90 ZWN0IHRoZSBtbXUgZnJvbSBjb25jdXJyZW50IGluc2VydGlvbgo+PiAtCQkgKiBvdmVyIHRoaXMg cmFuZ2UsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoaXMgc2VhcmNoIHdpbGwKPj4gLQkJ ICogdGVybWluYXRlIGdpdmVuIGEgcGF0aG9sb2dpYyB3b3JrbG9hZC4KPj4gLQkJICovCj4+IC0J CWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0cywgcmFuZ2UtPnN0YXJ0 LCBlbmQpOwo+PiAtCX0KPj4gLQlzcGluX3VubG9jaygmbW4tPmxvY2spOwo+PiAtCj4+IC0JcmV0 dXJuIHJldDsKPj4gKwkvKiB3ZSB3aWxsIHVuYmluZCBvbiBuZXh0IHN1Ym1pc3Npb24sIHN0aWxs IGhhdmUgdXNlcnB0ciBwaW5zICovCj4+ICsJciA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3Uo b2JqLT5iYXNlLnJlc3YsIHRydWUsIGZhbHNlLAo+PiArCQkJCSAgICAgIE1BWF9TQ0hFRFVMRV9U SU1FT1VUKTsKPj4gKwlpZiAociA8PSAwKQo+PiArCQlkcm1fZXJyKCZpOTE1LT5kcm0sICIoJWxk KSBmYWlsZWQgdG8gd2FpdCBmb3IgaWRsZVxuIiwgcik7Cj4KPiBJIHRoaW5rLCBzaW5jZSBsaW51 eCA1Ljkgd2hlcmUgYSBmb3JrIGlzIG5vIGxvbmdlciBzZXR0aW5nIHVwIENPVyBvbiBwaW5uZWQg cGFnZXMsIGFuZCB3ZSBkbyBpbiBmYWN0IHN0aWxsIHBpbiBwYWdlcywgSSB0aGluayB0aGlzIGZl bmNlIHdhaXQgc2hvdWxkIGJlIHJlbW92ZWQsIHRvZ2V0aGVyIHdpdGggdGhlIFBGX0VYSVQgc3Bl Y2lhbCBjYXNlLCBhcyBpdCBkb2VzIG5vdCBpbXByb3ZlIG9uIGFueXRoaW5nIGJ1dCBjcmVhdGVz IGhhbmdzIHRoYXQgb25seSBoYW5nY2hlY2sgLyB3YXRjaGRvZyBjYW4gcmVzb2x2ZS4gSWYgd2Us IGluIGZ1dHVyZSB3b3JrIG5vIGxvbmdlciBwaW4gdGhlIHBhZ2VzLCB3aGljaCBpcyB0aGUgZGly ZWN0aW9uIHdlJ3JlIG1vdmluZyB0b3dhcmRzLCBsZXQncyByZS1hZGQgaXQgd2hlbiBuZWVkZWQu Cj4KPj4gIAo+PiArCXJldHVybiB0cnVlOwo+PiAgfQo+PiAgCj4+IC1zdGF0aWMgY29uc3Qgc3Ry dWN0IG1tdV9ub3RpZmllcl9vcHMgaTkxNV9nZW1fdXNlcnB0cl9ub3RpZmllciA9IHsKPj4gLQku aW52YWxpZGF0ZV9yYW5nZV9zdGFydCA9IHVzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFy dCwKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBpOTE1 X2dlbV91c2VycHRyX25vdGlmaWVyX29wcyA9IHsKPj4gKwkuaW52YWxpZGF0ZSA9IGk5MTVfZ2Vt X3VzZXJwdHJfaW52YWxpZGF0ZSwKPj4gIH07Cj4+ICAKPj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV9t bXVfbm90aWZpZXIgKgo+PiAtaTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKHN0cnVjdCBpOTE1X21t X3N0cnVjdCAqbW0pCj4+IC17Cj4+IC0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsKPj4g LQo+PiAtCW1uID0ga21hbGxvYyhzaXplb2YoKm1uKSwgR0ZQX0tFUk5FTCk7Cj4+IC0JaWYgKG1u ID09IE5VTEwpCj4+IC0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+PiAtCj4+IC0Jc3Bpbl9s b2NrX2luaXQoJm1uLT5sb2NrKTsKPj4gLQltbi0+bW4ub3BzID0gJmk5MTVfZ2VtX3VzZXJwdHJf bm90aWZpZXI7Cj4+IC0JbW4tPm9iamVjdHMgPSBSQl9ST09UX0NBQ0hFRDsKPj4gLQltbi0+bW0g PSBtbTsKPj4gLQo+PiAtCXJldHVybiBtbjsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQKPj4g LWk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCj4+IC17Cj4+IC0Jc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW87Cj4+ IC0KPj4gLQltbyA9IGZldGNoX2FuZF96ZXJvKCZvYmotPnVzZXJwdHIubW11X29iamVjdCk7Cj4+ IC0JaWYgKCFtbykKPj4gLQkJcmV0dXJuOwo+PiAtCj4+IC0Jc3Bpbl9sb2NrKCZtby0+bW4tPmxv Y2spOwo+PiAtCWRlbF9vYmplY3QobW8pOwo+PiAtCXNwaW5fdW5sb2NrKCZtby0+bW4tPmxvY2sp Owo+PiAtCWtmcmVlKG1vKTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHN0cnVjdCBpOTE1X21tdV9u b3RpZmllciAqCj4+IC1pOTE1X21tdV9ub3RpZmllcl9maW5kKHN0cnVjdCBpOTE1X21tX3N0cnVj dCAqbW0pCj4+IC17Cj4+IC0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbiwgKm9sZDsKPj4g LQlpbnQgZXJyOwo+PiAtCj4+IC0JbW4gPSBSRUFEX09OQ0UobW0tPm1uKTsKPj4gLQlpZiAobGlr ZWx5KG1uKSkKPj4gLQkJcmV0dXJuIG1uOwo+PiAtCj4+IC0JbW4gPSBpOTE1X21tdV9ub3RpZmll cl9jcmVhdGUobW0pOwo+PiAtCWlmIChJU19FUlIobW4pKQo+PiAtCQlyZXR1cm4gbW47Cj4+IC0K Pj4gLQllcnIgPSBtbXVfbm90aWZpZXJfcmVnaXN0ZXIoJm1uLT5tbiwgbW0tPm1tKTsKPj4gLQlp ZiAoZXJyKSB7Cj4+IC0JCWtmcmVlKG1uKTsKPj4gLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKPj4g LQl9Cj4+IC0KPj4gLQlvbGQgPSBjbXB4Y2hnKCZtbS0+bW4sIE5VTEwsIG1uKTsKPj4gLQlpZiAo b2xkKSB7Cj4+IC0JCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZtbi0+bW4sIG1tLT5tbSk7Cj4+ IC0JCWtmcmVlKG1uKTsKPj4gLQkJbW4gPSBvbGQ7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIG1u Owo+PiAtfQo+PiAtCj4+ICBzdGF0aWMgaW50Cj4+ICBpOTE1X2dlbV91c2VycHRyX2luaXRfX21t dV9ub3RpZmllcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+PiAgewo+PiAtCXN0 cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47Cj4+IC0Jc3RydWN0IGk5MTVfbW11X29iamVjdCAq bW87Cj4+IC0KPj4gLQlpZiAoR0VNX1dBUk5fT04oIW9iai0+dXNlcnB0ci5tbSkpCj4+IC0JCXJl dHVybiAtRUlOVkFMOwo+PiAtCj4+IC0JbW4gPSBpOTE1X21tdV9ub3RpZmllcl9maW5kKG9iai0+ dXNlcnB0ci5tbSk7Cj4+IC0JaWYgKElTX0VSUihtbikpCj4+IC0JCXJldHVybiBQVFJfRVJSKG1u KTsKPj4gLQo+PiAtCW1vID0ga3phbGxvYyhzaXplb2YoKm1vKSwgR0ZQX0tFUk5FTCk7Cj4+IC0J aWYgKCFtbykKPj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4+IC0KPj4gLQltby0+bW4gPSBtbjsKPj4g LQltby0+b2JqID0gb2JqOwo+PiAtCW1vLT5pdC5zdGFydCA9IG9iai0+dXNlcnB0ci5wdHI7Cj4+ IC0JbW8tPml0Lmxhc3QgPSBvYmotPnVzZXJwdHIucHRyICsgb2JqLT5iYXNlLnNpemUgLSAxOwo+ PiAtCVJCX0NMRUFSX05PREUoJm1vLT5pdC5yYik7Cj4+IC0KPj4gLQlvYmotPnVzZXJwdHIubW11 X29iamVjdCA9IG1vOwo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZAo+ PiAtaTkxNV9tbXVfbm90aWZpZXJfZnJlZShzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uLAo+ PiAtCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4+IC17Cj4+IC0JaWYgKG1uID09IE5V TEwpCj4+IC0JCXJldHVybjsKPj4gLQo+PiAtCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZtbi0+ bW4sIG1tKTsKPj4gLQlrZnJlZShtbik7Cj4+IC19Cj4+IC0KPj4gLQo+PiAtc3RhdGljIHN0cnVj dCBpOTE1X21tX3N0cnVjdCAqCj4+IC1fX2k5MTVfbW1fc3RydWN0X2ZpbmQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsIHN0cnVjdCBtbV9zdHJ1Y3QgKnJlYWwpCj4+IC17Cj4+IC0Jc3Ry dWN0IGk5MTVfbW1fc3RydWN0ICppdCwgKm1tID0gTlVMTDsKPj4gLQo+PiAtCXJjdV9yZWFkX2xv Y2soKTsKPj4gLQloYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlX3JjdShpOTE1LT5tbV9zdHJ1Y3RzLAo+ PiAtCQkJCSAgIGl0LCBub2RlLAo+PiAtCQkJCSAgICh1bnNpZ25lZCBsb25nKXJlYWwpCj4+IC0J CWlmIChpdC0+bW0gPT0gcmVhbCAmJiBrcmVmX2dldF91bmxlc3NfemVybygmaXQtPmtyZWYpKSB7 Cj4+IC0JCQltbSA9IGl0Owo+PiAtCQkJYnJlYWs7Cj4+IC0JCX0KPj4gLQlyY3VfcmVhZF91bmxv Y2soKTsKPj4gLQo+PiAtCXJldHVybiBtbTsKPj4gKwlyZXR1cm4gbW11X2ludGVydmFsX25vdGlm aWVyX2luc2VydCgmb2JqLT51c2VycHRyLm5vdGlmaWVyLCBjdXJyZW50LT5tbSwKPj4gKwkJCQkJ ICAgIG9iai0+dXNlcnB0ci5wdHIsIG9iai0+YmFzZS5zaXplLAo+PiArCQkJCQkgICAgJmk5MTVf Z2VtX3VzZXJwdHJfbm90aWZpZXJfb3BzKTsKPj4gIH0KPj4gIAo+PiAtc3RhdGljIGludAo+PiAt aTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbV9zdHJ1Y3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKPj4gK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF91c2VycHRyX2Ryb3BfcmVm KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+ICB7Cj4+ICAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwo+PiAtCXN0cnVjdCBp OTE1X21tX3N0cnVjdCAqbW0sICpuZXc7Cj4+IC0JaW50IHJldCA9IDA7Cj4+IC0KPj4gLQkvKiBE dXJpbmcgcmVsZWFzZSBvZiB0aGUgR0VNIG9iamVjdCB3ZSBob2xkIHRoZSBzdHJ1Y3RfbXV0ZXgu IFRoaXMKPj4gLQkgKiBwcmVjbHVkZXMgdXMgZnJvbSBjYWxsaW5nIG1tcHV0KCkgYXQgdGhhdCB0 aW1lIGFzIHRoYXQgbWF5IGJlCj4+IC0JICogdGhlIGxhc3QgcmVmZXJlbmNlIGFuZCBzbyBjYWxs IGV4aXRfbW1hcCgpLiBleGl0X21tYXAoKSB3aWxsCj4+IC0JICogYXR0ZW1wdCB0byByZWFwIHRo ZSB2bWEsIGFuZCBpZiB3ZSB3ZXJlIGhvbGRpbmcgYSBHVFQgbW1hcAo+PiAtCSAqIHdvdWxkIHRo ZW4gY2FsbCBkcm1fZ2VtX3ZtX2Nsb3NlKCkgYW5kIGF0dGVtcHQgdG8gcmVhY3F1aXJlCj4+IC0J ICogdGhlIHN0cnVjdCBtdXRleC4gU28gaW4gb3JkZXIgdG8gYXZvaWQgdGhhdCByZWN1cnNpb24s IHdlIGhhdmUKPj4gLQkgKiB0byBkZWZlciByZWxlYXNpbmcgdGhlIG1tIHJlZmVyZW5jZSB1bnRp bCBhZnRlciB3ZSBkcm9wIHRoZQo+PiAtCSAqIHN0cnVjdF9tdXRleCwgaS5lLiB3ZSBuZWVkIHRv IHNjaGVkdWxlIGEgd29ya2VyIHRvIGRvIHRoZSBjbGVhbgo+PiAtCSAqIHVwLgo+PiAtCSAqLwo+ PiAtCW1tID0gX19pOTE1X21tX3N0cnVjdF9maW5kKGk5MTUsIGN1cnJlbnQtPm1tKTsKPj4gLQlp ZiAobW0pCj4+IC0JCWdvdG8gb3V0Owo+PiArCXN0cnVjdCBwYWdlICoqcHZlYyA9IE5VTEw7Cj4+ ICAKPj4gLQluZXcgPSBrbWFsbG9jKHNpemVvZigqbW0pLCBHRlBfS0VSTkVMKTsKPj4gLQlpZiAo IW5ldykKPj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4+IC0KPj4gLQlrcmVmX2luaXQoJm5ldy0+a3Jl Zik7Cj4+IC0JbmV3LT5pOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKPj4gLQluZXctPm1t ID0gY3VycmVudC0+bW07Cj4+IC0JbmV3LT5tbiA9IE5VTEw7Cj4+IC0KPj4gLQlzcGluX2xvY2so Jmk5MTUtPm1tX2xvY2spOwo+PiAtCW1tID0gX19pOTE1X21tX3N0cnVjdF9maW5kKGk5MTUsIGN1 cnJlbnQtPm1tKTsKPj4gLQlpZiAoIW1tKSB7Cj4+IC0JCWhhc2hfYWRkX3JjdShpOTE1LT5tbV9z dHJ1Y3RzLAo+PiAtCQkJICAgICAmbmV3LT5ub2RlLAo+PiAtCQkJICAgICAodW5zaWduZWQgbG9u ZyluZXctPm1tKTsKPj4gLQkJbW1ncmFiKGN1cnJlbnQtPm1tKTsKPj4gLQkJbW0gPSBuZXc7Cj4+ ICsJc3Bpbl9sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9sb2NrKTsKPj4gKwlpZiAoIS0tb2JqLT51 c2VycHRyLnBhZ2VfcmVmKSB7Cj4+ICsJCXB2ZWMgPSBvYmotPnVzZXJwdHIucHZlYzsKPj4gKwkJ b2JqLT51c2VycHRyLnB2ZWMgPSBOVUxMOwo+PiAgCX0KPj4gLQlzcGluX3VubG9jaygmaTkxNS0+ bW1fbG9jayk7Cj4+IC0JaWYgKG1tICE9IG5ldykKPj4gLQkJa2ZyZWUobmV3KTsKPj4gKwlHRU1f QlVHX09OKG9iai0+dXNlcnB0ci5wYWdlX3JlZiA8IDApOwo+PiArCXNwaW5fdW5sb2NrKCZpOTE1 LT5tbS5ub3RpZmllcl9sb2NrKTsKPj4gIAo+PiAtb3V0Ogo+PiAtCW9iai0+dXNlcnB0ci5tbSA9 IG1tOwo+PiAtCXJldHVybiByZXQ7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkCj4+IC1fX2k5 MTVfbW1fc3RydWN0X2ZyZWVfX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4+IC17 Cj4+IC0Jc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBl b2YoKm1tKSwgd29yay53b3JrKTsKPj4gLQo+PiAtCWk5MTVfbW11X25vdGlmaWVyX2ZyZWUobW0t Pm1uLCBtbS0+bW0pOwo+PiAtCW1tZHJvcChtbS0+bW0pOwo+PiAtCWtmcmVlKG1tKTsKPj4gLX0K Pj4gLQo+PiAtc3RhdGljIHZvaWQKPj4gLV9faTkxNV9tbV9zdHJ1Y3RfZnJlZShzdHJ1Y3Qga3Jl ZiAqa3JlZikKPj4gLXsKPj4gLQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tID0gY29udGFpbmVy X29mKGtyZWYsIHR5cGVvZigqbW0pLCBrcmVmKTsKPj4gLQo+PiAtCXNwaW5fbG9jaygmbW0tPmk5 MTUtPm1tX2xvY2spOwo+PiAtCWhhc2hfZGVsX3JjdSgmbW0tPm5vZGUpOwo+PiAtCXNwaW5fdW5s b2NrKCZtbS0+aTkxNS0+bW1fbG9jayk7Cj4+IC0KPj4gLQlJTklUX1JDVV9XT1JLKCZtbS0+d29y aywgX19pOTE1X21tX3N0cnVjdF9mcmVlX193b3JrZXIpOwo+PiAtCXF1ZXVlX3JjdV93b3JrKHN5 c3RlbV93cSwgJm1tLT53b3JrKTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQKPj4gLWk5MTVf Z2VtX3VzZXJwdHJfcmVsZWFzZV9fbW1fc3RydWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCj4+IC17Cj4+IC0JaWYgKG9iai0+dXNlcnB0ci5tbSA9PSBOVUxMKQo+PiAtCQlyZXR1 cm47Cj4+ICsJaWYgKHB2ZWMpIHsKPj4gKwkJY29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMg PSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwo+PiAgCj4+IC0Ja3JlZl9wdXQoJm9iai0+ dXNlcnB0ci5tbS0+a3JlZiwgX19pOTE1X21tX3N0cnVjdF9mcmVlKTsKPj4gLQlvYmotPnVzZXJw dHIubW0gPSBOVUxMOwo+PiArCQl1bnBpbl91c2VyX3BhZ2VzKHB2ZWMsIG51bV9wYWdlcyk7Cj4+ ICsJCWtmcmVlKHB2ZWMpOwo+Cj4gSUlSQywgQ1Egc3BvdHRlZCB0aGF0IHdlIHNob3VsZCBoYXZl IGEga3ZmcmVlIGhlcmUgcmlnaHQ/Cj4KPj4gKwl9Cj4+ICB9Cj4+ICAKPj4gLXN0cnVjdCBnZXRf cGFnZXNfd29yayB7Cj4+IC0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cj4+IC0Jc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPj4gLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Cj4+ IC19Owo+PiAtCj4+IC1zdGF0aWMgc3RydWN0IHNnX3RhYmxlICoKPj4gLV9faTkxNV9nZW1fdXNl cnB0cl9hbGxvY19wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+PiAtCQkJ ICAgICAgIHN0cnVjdCBwYWdlICoqcHZlYywgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpCj4+ICtz dGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmopCj4+ICB7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0 b19pOTE1KG9iai0+YmFzZS5kZXYpOwo+PiArCWNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2Vz ID0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKPj4gIAl1bnNpZ25lZCBpbnQgbWF4X3Nl Z21lbnQgPSBpOTE1X3NnX3NlZ21lbnRfc2l6ZSgpOwo+PiAgCXN0cnVjdCBzZ190YWJsZSAqc3Q7 Cj4+ICAJdW5zaWduZWQgaW50IHNnX3BhZ2Vfc2l6ZXM7Cj4+ICAJc3RydWN0IHNjYXR0ZXJsaXN0 ICpzZzsKPj4gKwlzdHJ1Y3QgcGFnZSAqKnB2ZWM7Cj4+ICAJaW50IHJldDsKPj4gIAo+PiAgCXN0 ID0ga21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7Cj4+ICAJaWYgKCFzdCkKPj4gLQkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJ c3Bpbl9sb2NrKCZpOTE1LT5tbS5ub3RpZmllcl9sb2NrKTsKPj4gKwlpZiAoR0VNX1dBUk5fT04o IW9iai0+dXNlcnB0ci5wYWdlX3JlZikpIHsKPj4gKwkJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm5v dGlmaWVyX2xvY2spOwo+PiArCQlyZXQgPSAtRUZBVUxUOwo+PiArCQlnb3RvIGVycl9mcmVlOwo+ PiArCX0KPj4gKwo+PiArCW9iai0+dXNlcnB0ci5wYWdlX3JlZisrOwo+PiArCXB2ZWMgPSBvYmot PnVzZXJwdHIucHZlYzsKPj4gKwlzcGluX3VubG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7 Cj4+ICAKPj4gIGFsbG9jX3RhYmxlOgo+PiAgCXNnID0gX19zZ19hbGxvY190YWJsZV9mcm9tX3Bh Z2VzKHN0LCBwdmVjLCBudW1fcGFnZXMsIDAsCj4+ICAJCQkJCSBudW1fcGFnZXMgPDwgUEFHRV9T SElGVCwgbWF4X3NlZ21lbnQsCj4+ICAJCQkJCSBOVUxMLCAwLCBHRlBfS0VSTkVMKTsKPj4gIAlp ZiAoSVNfRVJSKHNnKSkgewo+PiAtCQlrZnJlZShzdCk7Cj4+IC0JCXJldHVybiBFUlJfQ0FTVChz Zyk7Cj4+ICsJCXJldCA9IFBUUl9FUlIoc2cpOwo+PiArCQlnb3RvIGVycjsKPj4gIAl9Cj4+ICAK Pj4gIAlyZXQgPSBpOTE1X2dlbV9ndHRfcHJlcGFyZV9wYWdlcyhvYmosIHN0KTsKPj4gQEAgLTM5 MywyMDMgKzE3MCwyMCBAQCBfX2k5MTVfZ2VtX3VzZXJwdHJfYWxsb2NfcGFnZXMoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPj4gIAkJCWdvdG8gYWxsb2NfdGFibGU7Cj4+ICAJCX0K Pj4gIAo+PiAtCQlrZnJlZShzdCk7Cj4+IC0JCXJldHVybiBFUlJfUFRSKHJldCk7Cj4+ICsJCWdv dG8gZXJyOwo+PiAgCX0KPj4gIAo+PiAgCXNnX3BhZ2Vfc2l6ZXMgPSBpOTE1X3NnX3BhZ2Vfc2l6 ZXMoc3QtPnNnbCk7Cj4+ICAKPj4gIAlfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMob2JqLCBz dCwgc2dfcGFnZV9zaXplcyk7Cj4+ICAKPj4gLQlyZXR1cm4gc3Q7Cj4+IC19Cj4+IC0KPj4gLXN0 YXRpYyB2b2lkCj4+IC1fX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcihzdHJ1Y3Qg d29ya19zdHJ1Y3QgKl93b3JrKQo+PiAtewo+PiAtCXN0cnVjdCBnZXRfcGFnZXNfd29yayAqd29y ayA9IGNvbnRhaW5lcl9vZihfd29yaywgdHlwZW9mKCp3b3JrKSwgd29yayk7Cj4+IC0Jc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHdvcmstPm9iajsKPj4gLQljb25zdCB1bnNpZ25l ZCBsb25nIG5wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7Cj4+IC0JdW5zaWdu ZWQgbG9uZyBwaW5uZWQ7Cj4+IC0Jc3RydWN0IHBhZ2UgKipwdmVjOwo+PiAtCWludCByZXQ7Cj4+ IC0KPj4gLQlyZXQgPSAtRU5PTUVNOwo+PiAtCXBpbm5lZCA9IDA7Cj4+IC0KPj4gLQlwdmVjID0g a3ZtYWxsb2NfYXJyYXkobnBhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwp Owo+PiAtCWlmIChwdmVjICE9IE5VTEwpIHsKPj4gLQkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBv YmotPnVzZXJwdHIubW0tPm1tOwo+PiAtCQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwo+PiAtCQlp bnQgbG9ja2VkID0gMDsKPj4gLQo+PiAtCQlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc19yZWFkb25s eShvYmopKQo+PiAtCQkJZmxhZ3MgfD0gRk9MTF9XUklURTsKPj4gLQo+PiAtCQlyZXQgPSAtRUZB VUxUOwo+PiAtCQlpZiAobW1nZXRfbm90X3plcm8obW0pKSB7Cj4+IC0JCQl3aGlsZSAocGlubmVk IDwgbnBhZ2VzKSB7Cj4+IC0JCQkJaWYgKCFsb2NrZWQpIHsKPj4gLQkJCQkJbW1hcF9yZWFkX2xv Y2sobW0pOwo+PiAtCQkJCQlsb2NrZWQgPSAxOwo+PiAtCQkJCX0KPj4gLQkJCQlyZXQgPSBwaW5f dXNlcl9wYWdlc19yZW1vdGUKPj4gLQkJCQkJKG1tLAo+PiAtCQkJCQkgb2JqLT51c2VycHRyLnB0 ciArIHBpbm5lZCAqIFBBR0VfU0laRSwKPj4gLQkJCQkJIG5wYWdlcyAtIHBpbm5lZCwKPj4gLQkJ CQkJIGZsYWdzLAo+PiAtCQkJCQkgcHZlYyArIHBpbm5lZCwgTlVMTCwgJmxvY2tlZCk7Cj4+IC0J CQkJaWYgKHJldCA8IDApCj4+IC0JCQkJCWJyZWFrOwo+PiAtCj4+IC0JCQkJcGlubmVkICs9IHJl dDsKPj4gLQkJCX0KPj4gLQkJCWlmIChsb2NrZWQpCj4+IC0JCQkJbW1hcF9yZWFkX3VubG9jayht bSk7Cj4+IC0JCQltbXB1dChtbSk7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0KPj4gLQltdXRleF9sb2Nr X25lc3RlZCgmb2JqLT5tbS5sb2NrLCBJOTE1X01NX0dFVF9QQUdFUyk7Cj4+IC0JaWYgKG9iai0+ dXNlcnB0ci53b3JrID09ICZ3b3JrLT53b3JrKSB7Cj4+IC0JCXN0cnVjdCBzZ190YWJsZSAqcGFn ZXMgPSBFUlJfUFRSKHJldCk7Cj4+IC0KPj4gLQkJaWYgKHBpbm5lZCA9PSBucGFnZXMpIHsKPj4g LQkJCXBhZ2VzID0gX19pOTE1X2dlbV91c2VycHRyX2FsbG9jX3BhZ2VzKG9iaiwgcHZlYywKPj4g LQkJCQkJCQkgICAgICAgbnBhZ2VzKTsKPj4gLQkJCWlmICghSVNfRVJSKHBhZ2VzKSkgewo+PiAt CQkJCXBpbm5lZCA9IDA7Cj4+IC0JCQkJcGFnZXMgPSBOVUxMOwo+PiAtCQkJfQo+PiAtCQl9Cj4+ IC0KPj4gLQkJb2JqLT51c2VycHRyLndvcmsgPSBFUlJfQ0FTVChwYWdlcyk7Cj4+IC0JCWlmIChJ U19FUlIocGFnZXMpKQo+PiAtCQkJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBm YWxzZSk7Cj4+IC0JfQo+PiAtCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKPj4gLQo+PiAt CXVucGluX3VzZXJfcGFnZXMocHZlYywgcGlubmVkKTsKPj4gLQlrdmZyZWUocHZlYyk7Cj4+IC0K Pj4gLQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4+IC0JcHV0X3Rhc2tfc3RydWN0KHdvcmst PnRhc2spOwo+PiAtCWtmcmVlKHdvcmspOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgc3RydWN0IHNn X3RhYmxlICoKPj4gLV9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2NoZWR1bGUoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4gLXsKPj4gLQlzdHJ1Y3QgZ2V0X3BhZ2VzX3dv cmsgKndvcms7Cj4+IC0KPj4gLQkvKiBTcGF3biBhIHdvcmtlciBzbyB0aGF0IHdlIGNhbiBhY3F1 aXJlIHRoZQo+PiAtCSAqIHVzZXIgcGFnZXMgd2l0aG91dCBob2xkaW5nIG91ciBtdXRleC4gQWNj ZXNzCj4+IC0JICogdG8gdGhlIHVzZXIgcGFnZXMgcmVxdWlyZXMgbW1hcF9sb2NrLCBhbmQgd2Ug aGF2ZQo+PiAtCSAqIGEgc3RyaWN0IGxvY2sgb3JkZXJpbmcgb2YgbW1hcF9sb2NrLCBzdHJ1Y3Rf bXV0ZXggLQo+PiAtCSAqIHdlIGFscmVhZHkgaG9sZCBzdHJ1Y3RfbXV0ZXggaGVyZSBhbmQgc28g Y2Fubm90Cj4+IC0JICogY2FsbCBndXAgd2l0aG91dCBlbmNvdW50ZXJpbmcgYSBsb2NrIGludmVy c2lvbi4KPj4gLQkgKgo+PiAtCSAqIFVzZXJzcGFjZSB3aWxsIGtlZXAgb24gcmVwZWF0aW5nIHRo ZSBvcGVyYXRpb24KPj4gLQkgKiAodGhhbmtzIHRvIEVBR0FJTikgdW50aWwgZWl0aGVyIHdlIGhp dCB0aGUgZmFzdAo+PiAtCSAqIHBhdGggb3IgdGhlIHdvcmtlciBjb21wbGV0ZXMuIElmIHRoZSB3 b3JrZXIgaXMKPj4gLQkgKiBjYW5jZWxsZWQgb3Igc3VwZXJzZWRlZCwgdGhlIHRhc2sgaXMgc3Rp bGwgcnVuCj4+IC0JICogYnV0IHRoZSByZXN1bHRzIGlnbm9yZWQuIChUaGlzIGxlYWRzIHRvCj4+ IC0JICogY29tcGxpY2F0aW9ucyB0aGF0IHdlIG1heSBoYXZlIGEgc3RyYXkgb2JqZWN0Cj4+IC0J ICogcmVmY291bnQgdGhhdCB3ZSBuZWVkIHRvIGJlIHdhcnkgb2Ygd2hlbgo+PiAtCSAqIGNoZWNr aW5nIGZvciBleGlzdGluZyBvYmplY3RzIGR1cmluZyBjcmVhdGlvbi4pCj4+IC0JICogSWYgdGhl IHdvcmtlciBlbmNvdW50ZXJzIGFuIGVycm9yLCBpdCByZXBvcnRzCj4+IC0JICogdGhhdCBlcnJv ciBiYWNrIHRvIHRoaXMgZnVuY3Rpb24gdGhyb3VnaAo+PiAtCSAqIG9iai0+dXNlcnB0ci53b3Jr ID0gRVJSX1BUUi4KPj4gLQkgKi8KPj4gLQl3b3JrID0ga21hbGxvYyhzaXplb2YoKndvcmspLCBH RlBfS0VSTkVMKTsKPj4gLQlpZiAod29yayA9PSBOVUxMKQo+PiAtCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPj4gLQo+PiAtCW9iai0+dXNlcnB0ci53b3JrID0gJndvcmstPndvcms7Cj4+IC0K Pj4gLQl3b3JrLT5vYmogPSBpOTE1X2dlbV9vYmplY3RfZ2V0KG9iaik7Cj4+IC0KPj4gLQl3b3Jr LT50YXNrID0gY3VycmVudDsKPj4gLQlnZXRfdGFza19zdHJ1Y3Qod29yay0+dGFzayk7Cj4+IC0K Pj4gLQlJTklUX1dPUksoJndvcmstPndvcmssIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNf d29ya2VyKTsKPj4gLQlxdWV1ZV93b3JrKHRvX2k5MTUob2JqLT5iYXNlLmRldiktPm1tLnVzZXJw dHJfd3EsICZ3b3JrLT53b3JrKTsKPj4gLQo+PiAtCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOwo+ PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+IC17Cj4+IC0JY29uc3QgdW5zaWduZWQgbG9u ZyBudW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwo+PiAtCXN0cnVjdCBt bV9zdHJ1Y3QgKm1tID0gb2JqLT51c2VycHRyLm1tLT5tbTsKPj4gLQlzdHJ1Y3QgcGFnZSAqKnB2 ZWM7Cj4+IC0Jc3RydWN0IHNnX3RhYmxlICpwYWdlczsKPj4gLQlib29sIGFjdGl2ZTsKPj4gLQlp bnQgcGlubmVkOwo+PiAtCXVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSAwOwo+PiAtCj4+IC0JLyog SWYgdXNlcnNwYWNlIHNob3VsZCBlbmdpbmVlciB0aGF0IHRoZXNlIHBhZ2VzIGFyZSByZXBsYWNl ZCBpbgo+PiAtCSAqIHRoZSB2bWEgYmV0d2VlbiB1cyBiaW5kaW5nIHRoaXMgcGFnZSBpbnRvIHRo ZSBHVFQgYW5kIGNvbXBsZXRpb24KPj4gLQkgKiBvZiByZW5kZXJpbmcuLi4gVGhlaXIgbG9zcy4g SWYgdGhleSBjaGFuZ2UgdGhlIG1hcHBpbmcgb2YgdGhlaXIKPj4gLQkgKiBwYWdlcyB0aGV5IG5l ZWQgdG8gY3JlYXRlIGEgbmV3IGJvIHRvIHBvaW50IHRvIHRoZSBuZXcgdm1hLgo+PiAtCSAqCj4+ IC0JICogSG93ZXZlciwgdGhhdCBzdGlsbCBsZWF2ZXMgb3BlbiB0aGUgcG9zc2liaWxpdHkgb2Yg dGhlIHZtYQo+PiAtCSAqIGJlaW5nIGNvcGllZCB1cG9uIGZvcmsuIFdoaWNoIGZhbGxzIHVuZGVy IHRoZSBzYW1lIHVzZXJzcGFjZQo+PiAtCSAqIHN5bmNocm9uaXNhdGlvbiBpc3N1ZSBhcyBhIHJl Z3VsYXIgYm8sIGV4Y2VwdCB0aGF0IHRoaXMgdGltZQo+PiAtCSAqIHRoZSBwcm9jZXNzIG1heSBu b3QgYmUgZXhwZWN0aW5nIHRoYXQgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mCj4+IC0JICogbWVtb3J5 IGlzIHRpZWQgdG8gdGhlIEdQVS4KPj4gLQkgKgo+PiAtCSAqIEZvcnR1bmF0ZWx5LCB3ZSBjYW4g aG9vayBpbnRvIHRoZSBtbXVfbm90aWZpZXIgaW4gb3JkZXIgdG8KPj4gLQkgKiBkaXNjYXJkIHRo ZSBwYWdlIHJlZmVyZW5jZXMgcHJpb3IgdG8gYW55dGhpbmcgbmFzdHkgaGFwcGVuaW5nCj4+IC0J ICogdG8gdGhlIHZtYSAoZGlzY2FyZCBvciBjbG9uaW5nKSB3aGljaCBzaG91bGQgcHJldmVudCB0 aGUgbW9yZQo+PiAtCSAqIGVncmVnaW91cyBjYXNlcyBmcm9tIGNhdXNpbmcgaGFybS4KPj4gLQkg Ki8KPj4gLQo+PiAtCWlmIChvYmotPnVzZXJwdHIud29yaykgewo+PiAtCQkvKiBhY3RpdmUgZmxh ZyBzaG91bGQgc3RpbGwgYmUgaGVsZCBmb3IgdGhlIHBlbmRpbmcgd29yayAqLwo+PiAtCQlpZiAo SVNfRVJSKG9iai0+dXNlcnB0ci53b3JrKSkKPj4gLQkJCXJldHVybiBQVFJfRVJSKG9iai0+dXNl cnB0ci53b3JrKTsKPj4gLQkJZWxzZQo+PiAtCQkJcmV0dXJuIC1FQUdBSU47Cj4+IC0JfQo+PiAt Cj4+IC0JcHZlYyA9IE5VTEw7Cj4+IC0JcGlubmVkID0gMDsKPj4gLQo+PiAtCWlmIChtbSA9PSBj dXJyZW50LT5tbSkgewo+PiAtCQlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnVtX3BhZ2VzLCBzaXpl b2Yoc3RydWN0IHBhZ2UgKiksCj4+IC0JCQkJICAgICAgR0ZQX0tFUk5FTCB8Cj4+IC0JCQkJICAg ICAgX19HRlBfTk9SRVRSWSB8Cj4+IC0JCQkJICAgICAgX19HRlBfTk9XQVJOKTsKPj4gLQkJaWYg KHB2ZWMpIHsKPj4gLQkJCS8qIGRlZmVyIHRvIHdvcmtlciBpZiBtYWxsb2MgZmFpbHMgKi8KPj4g LQkJCWlmICghaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRvbmx5KG9iaikpCj4+IC0JCQkJZ3VwX2Zs YWdzIHw9IEZPTExfV1JJVEU7Cj4+IC0JCQlwaW5uZWQgPSBwaW5fdXNlcl9wYWdlc19mYXN0X29u bHkob2JqLT51c2VycHRyLnB0ciwKPj4gLQkJCQkJCQkgIG51bV9wYWdlcywgZ3VwX2ZsYWdzLAo+ PiAtCQkJCQkJCSAgcHZlYyk7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0KPj4gLQlhY3RpdmUgPSBmYWxz ZTsKPj4gLQlpZiAocGlubmVkIDwgMCkgewo+PiAtCQlwYWdlcyA9IEVSUl9QVFIocGlubmVkKTsK Pj4gLQkJcGlubmVkID0gMDsKPj4gLQl9IGVsc2UgaWYgKHBpbm5lZCA8IG51bV9wYWdlcykgewo+ PiAtCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2NoZWR1bGUob2JqKTsK Pj4gLQkJYWN0aXZlID0gcGFnZXMgPT0gRVJSX1BUUigtRUFHQUlOKTsKPj4gLQl9IGVsc2Ugewo+ PiAtCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhvYmosIHB2ZWMsIG51 bV9wYWdlcyk7Cj4+IC0JCWFjdGl2ZSA9ICFJU19FUlIocGFnZXMpOwo+PiAtCX0KPj4gLQlpZiAo YWN0aXZlKQo+PiAtCQlfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIHRydWUpOwo+ PiAtCj4+IC0JaWYgKElTX0VSUihwYWdlcykpCj4+IC0JCXVucGluX3VzZXJfcGFnZXMocHZlYywg cGlubmVkKTsKPj4gLQlrdmZyZWUocHZlYyk7Cj4+ICsJcmV0dXJuIDA7Cj4+ICAKPj4gLQlyZXR1 cm4gUFRSX0VSUl9PUl9aRVJPKHBhZ2VzKTsKPj4gK2VycjoKPj4gKwlpOTE1X2dlbV9vYmplY3Rf dXNlcnB0cl9kcm9wX3JlZihvYmopOwo+PiArZXJyX2ZyZWU6Cj4+ICsJa2ZyZWUoc3QpOwo+PiAr CXJldHVybiByZXQ7Cj4+ICB9Cj4+ICAKPj4gIHN0YXRpYyB2b2lkCj4+IEBAIC01OTksOSArMTkz LDYgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPj4gIAlzdHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7Cj4+ICAJc3RydWN0IHBhZ2Ug KnBhZ2U7Cj4+ICAKPj4gLQkvKiBDYW5jZWwgYW55IGluZmxpZ2h0IHdvcmsgYW5kIGZvcmNlIHRo ZW0gdG8gcmVzdGFydCB0aGVpciBndXAgKi8KPj4gLQlvYmotPnVzZXJwdHIud29yayA9IE5VTEw7 Cj4+IC0JX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBmYWxzZSk7Cj4+ICAJaWYg KCFwYWdlcykKPj4gIAkJcmV0dXJuOwo+PiAgCj4+IEBAIC02NDEsMTkgKzIzMiwxNjEgQEAgaTkx NV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK Pj4gIAkJfQo+PiAgCj4+ICAJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKPj4gLQkJdW5waW5f dXNlcl9wYWdlKHBhZ2UpOwo+PiAgCX0KPj4gIAlvYmotPm1tLmRpcnR5ID0gZmFsc2U7Cj4+ICAK Pj4gIAlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKPj4gIAlrZnJlZShwYWdlcyk7Cj4+ICsKPj4gKwlp OTE1X2dlbV9vYmplY3RfdXNlcnB0cl9kcm9wX3JlZihvYmopOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3VuYmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLCBib29sIGdldF9wYWdlcykKPj4gK3sKPj4gKwlzdHJ1Y3Qgc2dfdGFibGUg KnBhZ2VzOwo+PiArCWludCBlcnI7Cj4+ICsKPj4gKwllcnIgPSBpOTE1X2dlbV9vYmplY3RfdW5i aW5kKG9iaiwgSTkxNV9HRU1fT0JKRUNUX1VOQklORF9BQ1RJVkUpOwo+PiArCWlmIChlcnIpCj4+ ICsJCXJldHVybiBlcnI7Cj4+ICsKPj4gKwlpZiAoR0VNX1dBUk5fT04oaTkxNV9nZW1fb2JqZWN0 X2hhc19waW5uZWRfcGFnZXMob2JqKSkpCj4+ICsJCXJldHVybiAtRUJVU1k7Cj4+ICsKPj4gKwlt dXRleF9sb2NrX25lc3RlZCgmb2JqLT5tbS5sb2NrLCBJOTE1X01NX0dFVF9QQUdFUyk7Cj4+ICsK Pj4gKwlwYWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7Cj4+ICsJaWYg KCFJU19FUlJfT1JfTlVMTChwYWdlcykpCj4+ICsJCWk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2Vz KG9iaiwgcGFnZXMpOwo+PiArCj4+ICsJaWYgKGdldF9wYWdlcykKPj4gKwkJZXJyID0gX19fX2k5 MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKPj4gKwltdXRleF91bmxvY2soJm9iai0+bW0u bG9jayk7Cj4+ICsKPj4gKwlyZXR1cm4gZXJyOwo+PiArfQo+PiArCj4+ICtpbnQgaTkxNV9nZW1f b2JqZWN0X3VzZXJwdHJfc3VibWl0X2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2Jq LT5iYXNlLmRldik7Cj4+ICsJY29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBvYmotPmJh c2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwo+PiArCXN0cnVjdCBwYWdlICoqcHZlYzsKPj4gKwl1bnNp Z25lZCBpbnQgZ3VwX2ZsYWdzID0gMDsKPj4gKwl1bnNpZ25lZCBsb25nIG5vdGlmaWVyX3NlcTsK Pj4gKwlpbnQgcGlubmVkLCByZXQ7Cj4+ICsKPj4gKwlpZiAob2JqLT51c2VycHRyLm5vdGlmaWVy Lm1tICE9IGN1cnJlbnQtPm1tKQo+PiArCQlyZXR1cm4gLUVGQVVMVDsKPj4gKwo+PiArCXJldCA9 IGk5MTVfZ2VtX29iamVjdF9sb2NrX2ludGVycnVwdGlibGUob2JqLCBOVUxMKTsKPj4gKwlpZiAo cmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJLyogTWFrZSBzdXJlIHVzZXJwdHIgaXMg dW5ib3VuZCBmb3IgbmV4dCBhdHRlbXB0LCBzbyB3ZSBkb24ndCB1c2Ugc3RhbGUgcGFnZXMuICov Cj4+ICsJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfdW5iaW5kKG9iaiwgZmFsc2UpOwo+ PiArCWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1 cm4gcmV0Owo+PiArCj4+ICsJbm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4o Jm9iai0+dXNlcnB0ci5ub3RpZmllcik7Cj4+ICsKPj4gKwlwdmVjID0ga3ZtYWxsb2NfYXJyYXko bnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwo+PiArCWlmICgh cHZlYykKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKwlpZiAoIWk5MTVfZ2VtX29iamVj dF9pc19yZWFkb25seShvYmopKQo+PiArCQlndXBfZmxhZ3MgfD0gRk9MTF9XUklURTsKPj4gKwo+ PiArCXBpbm5lZCA9IHJldCA9IDA7Cj4+ICsJd2hpbGUgKHBpbm5lZCA8IG51bV9wYWdlcykgewo+ PiArCQlyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KG9iai0+dXNlcnB0ci5wdHIgKyBwaW5uZWQg KiBQQUdFX1NJWkUsCj4+ICsJCQkJCSAgbnVtX3BhZ2VzIC0gcGlubmVkLCBndXBfZmxhZ3MsCj4+ ICsJCQkJCSAgJnB2ZWNbcGlubmVkXSk7Cj4+ICsJCWlmIChyZXQgPCAwKQo+PiArCQkJZ290byBv dXQ7Cj4+ICsKPj4gKwkJcGlubmVkICs9IHJldDsKPj4gKwl9Cj4+ICsJcmV0ID0gMDsKPj4gKwo+ PiArCXNwaW5fbG9jaygmaTkxNS0+bW0ubm90aWZpZXJfbG9jayk7Cj4gSSB0aGluayB3ZSBjYW4g aW1wcm92ZSBhIGxvdCBvbiB0aGUgbG9ja2luZyBoZXJlIGJ5IGhhdmluZyB0aGUgb2JqZWN0IGxv Y2sgcHJvdGVjdCB0aGUgb2JqZWN0IHN0YXRlIGFuZCBvbmx5IHRha2UgdGhlIGRyaXZlci13aWRl IG5vdGlmaWVyIGxvY2sgaW4gZXhlY2J1ZiAvIHVzZXJwdHJfaW52YWxpZGF0ZS4gSWYgd2UgaW4g YWRkaXRpb24gdXNlIGFuIHJ3bG9jayBhcyBhIG5vdGlmaWVyIGxvY2sgdGFrZW4gaW4gcmVhZCBt b2RlIGluIGV4ZWNidWYsIGFueSBwb3RlbnRpYWwgZ2xvYmFsIGxvY2sgY29udGVudGlvbiBjYW4g YmUgcHJhY3RpY2FsbHkgZWxpbWluYXRlZC4gQnV0IHRoYXQncyBwZXJoYXBzIGZvciBhIGZ1dHVy ZSBpbXByb3ZlbWVudC4KPj4gKwo+PiArCWlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgmb2Jq LT51c2VycHRyLm5vdGlmaWVyLAo+PiArCQkhb2JqLT51c2VycHRyLnBhZ2VfcmVmID8gbm90aWZp ZXJfc2VxIDoKPj4gKwkJb2JqLT51c2VycHRyLm5vdGlmaWVyX3NlcSkpIHsKPj4gKwkJcmV0ID0g LUVBR0FJTjsKPj4gKwkJZ290byBvdXRfdW5sb2NrOwo+PiArCX0KPj4gKwo+PiArCWlmICghb2Jq LT51c2VycHRyLnBhZ2VfcmVmKyspIHsKPj4gKwkJb2JqLT51c2VycHRyLnB2ZWMgPSBwdmVjOwo+ PiArCQlvYmotPnVzZXJwdHIubm90aWZpZXJfc2VxID0gbm90aWZpZXJfc2VxOwo+PiArCj4+ICsJ CXB2ZWMgPSBOVUxMOwo+PiArCX0KPgo+IEluIGFkZGl0aW9uLCBpZiB3ZSBjYW4gY2FsbCBnZXRf cGFnZXMoKSBoZXJlIHRvIHRha2UgdGhlIHBhZ2VfcmVmLCB3ZSBjYW4gZWxpbWluYXRlIG9uZSBw YWdlX3JlZiBhbmQgdGhlIHVzZSBvZiBfdXNlcnB0cl9zdWJtaXRfZmluaSgpLiBUaGF0IHdvdWxk IG9mIGNvdXJzZSByZXF1aXJlIHRoZSBvYmplY3QgbG9jaywgYnV0IHdlJ2QgYWxyZWFkeSBob2xk IHRoYXQgZm9yIHRoZSBvYmplY3Qgc3RhdGUgYXMgYWJvdmUuCj4KSSBndWVzcyBpdCBjb3VsZCBi ZSBvcHRpbWl6ZWQgYnkgbm90IGRvaW5nIHRoaXMgZGFuY2UuLgoKUGVyaGFwcyB0aGlzPwoKaTkx NV9nZW1fb2JqZWN0X3NldF9wYWdlcyhwdmVjLCBzZXEpCnsKaTkxNV9nZW1fb2JqZWN0X2xvY2tf aW50ZXJydXB0aWJsZSgpOwoKRGlyZWN0bHkgcnVuIHRoZSBzZXRfcGFnZXMoKSBmdW5jdGlvbiBi b2R5IHdpdGggcHZlYyBhbmQgc2Vxbm8gYXMgYXJndW1lbnQuIEl0IHdpbGwgY2hlY2sgZm9yIGNv bGxpc2lvbnMsIGFuZCByZXR1cm4gLUVBR0FJTiBpZiBuZWVkZWQsIDAgaWYgbm90aWZpZXIgc2Vx bm8gd2FzIGFscmVhZHkgc2V0IHRvIHNhbWUuCmdlbV9vYmplY3RfdW5sb2NrKCkKfQoKCj4+ICsK Pj4gK291dF91bmxvY2s6Cj4+ICsJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm5vdGlmaWVyX2xvY2sp Owo+PiArCj4+ICtvdXQ6Cj4+ICsJaWYgKHB2ZWMpIHsKPj4gKwkJdW5waW5fdXNlcl9wYWdlcyhw dmVjLCBwaW5uZWQpOwo+PiArCQlrdmZyZWUocHZlYyk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJu IHJldDsKPj4gK30KPj4gKwo+PiAraW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9k b25lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+ICt7Cj4+ICsJaWYgKG1tdV9p bnRlcnZhbF9yZWFkX3JldHJ5KCZvYmotPnVzZXJwdHIubm90aWZpZXIsCj4+ICsJCQkJICAgIG9i ai0+dXNlcnB0ci5ub3RpZmllcl9zZXEpKSB7Cj4+ICsJCS8qIFdlIGNvbGxpZGVkIHdpdGggdGhl IG1tdSBub3RpZmllciwgbmVlZCB0byByZXRyeSAqLwo+PiArCj4+ICsJCXJldHVybiAtRUFHQUlO Owo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICt2b2lkIGk5MTVfZ2Vt X29iamVjdF91c2VycHRyX3N1Ym1pdF9maW5pKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCj4+ICt7Cj4+ICsJaTkxNV9nZW1fb2JqZWN0X3VzZXJwdHJfZHJvcF9yZWYob2JqKTsKPj4g K30KPj4gKwo+PiAraW50IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3ZhbGlkYXRlKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+ICt7Cj4+ICsJaW50IGVycjsKPj4gKwo+PiArCWVy ciA9IGk5MTVfZ2VtX29iamVjdF91c2VycHRyX3N1Ym1pdF9pbml0KG9iaik7Cj4+ICsJaWYgKGVy cikKPj4gKwkJcmV0dXJuIGVycjsKPj4gKwo+PiArCWVyciA9IGk5MTVfZ2VtX29iamVjdF9sb2Nr X2ludGVycnVwdGlibGUob2JqLCBOVUxMKTsKPj4gKwlpZiAoIWVycikgewo+PiArCQkvKgo+PiAr CQkgKiBTaW5jZSB3ZSBvbmx5IGNoZWNrIHZhbGlkaXR5LCBub3QgdXNlIHRoZSBwYWdlcywKPj4g KwkJICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgd2UgY29sbGlkZSB3aXRoIHRoZSBtbXUgbm90aWZp ZXIsCj4+ICsJCSAqIGFuZCAtRUFHQUlOIGhhbmRsaW5nIGlzIG5vdCByZXF1aXJlZC4KPj4gKwkJ ICovCj4+ICsJCWVyciA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKPj4gKwkJaWYg KCFlcnIpCj4+ICsJCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsKPj4gKwo+PiAr CQlpOTE1X2dlbV9vYmplY3RfdW5sb2NrKG9iaik7Cj4+ICsJfQo+PiArCj4+ICsJaTkxNV9nZW1f b2JqZWN0X3VzZXJwdHJfc3VibWl0X2Zpbmkob2JqKTsKPj4gKwlyZXR1cm4gZXJyOwo+PiAgfQo+ PiAgCj4+ICBzdGF0aWMgdm9pZAo+PiAgaTkxNV9nZW1fdXNlcnB0cl9yZWxlYXNlKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+ICB7Cj4+IC0JaTkxNV9nZW1fdXNlcnB0cl9yZWxl YXNlX19tbXVfbm90aWZpZXIob2JqKTsKPj4gLQlpOTE1X2dlbV91c2VycHRyX3JlbGVhc2VfX21t X3N0cnVjdChvYmopOwo+PiArCUdFTV9XQVJOX09OKG9iai0+dXNlcnB0ci5wYWdlX3JlZik7Cj4+ ICsKPj4gKwltbXVfaW50ZXJ2YWxfbm90aWZpZXJfcmVtb3ZlKCZvYmotPnVzZXJwdHIubm90aWZp ZXIpOwo+PiArCW9iai0+dXNlcnB0ci5ub3RpZmllci5tbSA9IE5VTEw7Cj4+ICB9Cj4+ICAKPj4g IHN0YXRpYyBpbnQKPj4gQEAgLTY4Niw3ICs0MTksNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX3VzZXJwdHJfb3BzID0gewo+PiAgCS5uYW1l ID0gImk5MTVfZ2VtX29iamVjdF91c2VycHRyIiwKPj4gIAkuZmxhZ3MgPSBJOTE1X0dFTV9PQkpF Q1RfSVNfU0hSSU5LQUJMRSB8Cj4+ICAJCSBJOTE1X0dFTV9PQkpFQ1RfTk9fTU1BUCB8Cj4+IC0J CSBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMIHwKPj4gIAkJIEk5MTVfR0VNX09CSkVDVF9J U19QUk9YWSwKPj4gIAkuZ2V0X3BhZ2VzID0gaTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXMsCj4+ ICAJLnB1dF9wYWdlcyA9IGk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzLAo+PiBAQCAtNzkzLDYg KzUyNSw3IEBAIGk5MTVfZ2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK Pj4gIAlpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2NvaGVyZW5jeShvYmosIEk5MTVfQ0FDSEVf TExDKTsKPj4gIAo+PiAgCW9iai0+dXNlcnB0ci5wdHIgPSBhcmdzLT51c2VyX3B0cjsKPj4gKwlv YmotPnVzZXJwdHIubm90aWZpZXJfc2VxID0gVUxPTkdfTUFYOwo+PiAgCWlmIChhcmdzLT5mbGFn cyAmIEk5MTVfVVNFUlBUUl9SRUFEX09OTFkpCj4+ICAJCWk5MTVfZ2VtX29iamVjdF9zZXRfcmVh ZG9ubHkob2JqKTsKPj4gIAo+PiBAQCAtODAwLDkgKzUzMyw3IEBAIGk5MTVfZ2VtX3VzZXJwdHJf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4gIAkgKiBhdCBiaW5kaW5nLiBUaGlzIG1l YW5zIHRoYXQgd2UgbmVlZCB0byBob29rIGludG8gdGhlIG1tdV9ub3RpZmllcgo+PiAgCSAqIGlu IG9yZGVyIHRvIGRldGVjdCBpZiB0aGUgbW11IGlzIGRlc3Ryb3llZC4KPj4gIAkgKi8KPj4gLQly ZXQgPSBpOTE1X2dlbV91c2VycHRyX2luaXRfX21tX3N0cnVjdChvYmopOwo+PiAtCWlmIChyZXQg PT0gMCkKPj4gLQkJcmV0ID0gaTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbXVfbm90aWZpZXIob2Jq KTsKPj4gKwlyZXQgPSBpOTE1X2dlbV91c2VycHRyX2luaXRfX21tdV9ub3RpZmllcihvYmopOwo+ PiAgCWlmIChyZXQgPT0gMCkKPj4gIAkJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGUs ICZvYmotPmJhc2UsICZoYW5kbGUpOwo+PiAgCj4+IEBAIC04MjEsMTUgKzU1Miw3IEBAIGk5MTVf Z2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4gIGludCBpOTE1X2dl bV9pbml0X3VzZXJwdHIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiAgewo+ PiAgI2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVIKPj4gLQlzcGluX2xvY2tfaW5pdCgmZGV2X3By aXYtPm1tX2xvY2spOwo+PiAtCWhhc2hfaW5pdChkZXZfcHJpdi0+bW1fc3RydWN0cyk7Cj4+IC0K Pj4gLQlkZXZfcHJpdi0+bW0udXNlcnB0cl93cSA9Cj4+IC0JCWFsbG9jX3dvcmtxdWV1ZSgiaTkx NS11c2VycHRyLWFjcXVpcmUiLAo+PiAtCQkJCVdRX0hJR0hQUkkgfCBXUV9VTkJPVU5ELAo+PiAt CQkJCTApOwo+PiAtCWlmICghZGV2X3ByaXYtPm1tLnVzZXJwdHJfd3EpCj4+IC0JCXJldHVybiAt RU5PTUVNOwo+PiArCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+bW0ubm90aWZpZXJfbG9jayk7 Cj4+ICAjZW5kaWYKPj4gIAo+PiAgCXJldHVybiAwOwo+PiBAQCAtODM3LDcgKzU2MCw0IEBAIGlu dCBpOTE1X2dlbV9pbml0X3VzZXJwdHIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+PiAgCj4+ICB2b2lkIGk5MTVfZ2VtX2NsZWFudXBfdXNlcnB0cihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICB7Cj4+IC0jaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUgo+ PiAtCWRlc3Ryb3lfd29ya3F1ZXVlKGRldl9wcml2LT5tbS51c2VycHRyX3dxKTsKPj4gLSNlbmRp Zgo+PiAgfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4gaW5kZXggZmM0MWNmNjQ0MmE5Li43 MjkyN2QzNTZjMWEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiBAQCAtNTU4LDEx ICs1NTgsMTAgQEAgc3RydWN0IGk5MTVfZ2VtX21tIHsKPj4gIAo+PiAgI2lmZGVmIENPTkZJR19N TVVfTk9USUZJRVIKPj4gIAkvKioKPj4gLQkgKiBXb3JrcXVldWUgdG8gZmF1bHQgaW4gdXNlcnB0 ciBwYWdlcywgZmx1c2hlZCBieSB0aGUgZXhlY2J1Zgo+PiAtCSAqIHdoZW4gcmVxdWlyZWQgYnV0 IG90aGVyd2lzZSBsZWZ0IHRvIHVzZXJzcGFjZSB0byB0cnkgYWdhaW4KPj4gLQkgKiBvbiBFQUdB SU4uCj4+ICsJICogbm90aWZpZXJfbG9jayBmb3IgbW11IG5vdGlmaWVycywgbWVtb3J5IG1heSBu b3QgYmUgYWxsb2NhdGVkCj4+ICsJICogd2hpbGUgaG9sZGluZyB0aGlzIGxvY2suCj4+ICAJICov Cj4+IC0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnVzZXJwdHJfd3E7Cj4+ICsJc3BpbmxvY2tf dCBub3RpZmllcl9sb2NrOwo+PiAgI2VuZGlmCj4+ICAKPj4gIAkvKiBzaHJpbmtlciBhY2NvdW50 aW5nLCBhbHNvIHVzZWZ1bCBmb3IgdXNlcmxhbmQgZGVidWdnaW5nICovCj4+IEBAIC05NDIsOCAr OTQxLDYgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+PiAgCXN0cnVjdCBpOTE1X2dndHQg Z2d0dDsgLyogVk0gcmVwcmVzZW50aW5nIHRoZSBnbG9iYWwgYWRkcmVzcyBzcGFjZSAqLwo+PiAg Cj4+ICAJc3RydWN0IGk5MTVfZ2VtX21tIG1tOwo+PiAtCURFQ0xBUkVfSEFTSFRBQkxFKG1tX3N0 cnVjdHMsIDcpOwo+PiAtCXNwaW5sb2NrX3QgbW1fbG9jazsKPj4gIAo+PiAgCS8qIEtlcm5lbCBN b2Rlc2V0dGluZyAqLwo+PiAgCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+PiBpbmRleCAyMmJl MWU3YmYyZGQuLjYyODhjZDVkODk4ZSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4+ IEBAIC0xMDUzLDEwICsxMDUzLDggQEAgaW50IGk5MTVfZ2VtX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+PiAgZXJyX3VubG9jazoKPj4gIAlpOTE1X2dlbV9kcmFpbl93 b3JrcXVldWUoZGV2X3ByaXYpOwo+PiAgCj4+IC0JaWYgKHJldCAhPSAtRUlPKSB7Cj4+ICsJaWYg KHJldCAhPSAtRUlPKQo+PiAgCQlpbnRlbF91Y19jbGVhbnVwX2Zpcm13YXJlcygmZGV2X3ByaXYt Pmd0LnVjKTsKPj4gLQkJaTkxNV9nZW1fY2xlYW51cF91c2VycHRyKGRldl9wcml2KTsKPj4gLQl9 Cj4+ICAKPj4gIAlpZiAocmV0ID09IC1FSU8pIHsKPj4gIAkJLyoKPj4gQEAgLTExMTMsNyArMTEx MSw2IEBAIHZvaWQgaTkxNV9nZW1fZHJpdmVyX3JlbGVhc2Uoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+PiAgCWludGVsX3dhX2xpc3RfZnJlZSgmZGV2X3ByaXYtPmd0X3dhX2xp c3QpOwo+PiAgCj4+ICAJaW50ZWxfdWNfY2xlYW51cF9maXJtd2FyZXMoJmRldl9wcml2LT5ndC51 Yyk7Cj4+IC0JaTkxNV9nZW1fY2xlYW51cF91c2VycHRyKGRldl9wcml2KTsKPj4gIAo+PiAgCWk5 MTVfZ2VtX2RyYWluX2ZyZWVkX29iamVjdHMoZGV2X3ByaXYpOwo+PiAgCj4+Cj4+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+IEludGVsLWdmeCBtYWls aW5nIGxpc3QKPj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=