From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 331B2C433EF for ; Wed, 6 Jul 2022 16:21:10 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7C830113B81; Wed, 6 Jul 2022 16:21:09 +0000 (UTC) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 96340113B81; Wed, 6 Jul 2022 16:21:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657124468; x=1688660468; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=MMZI4DJ4aEEU+bfnheeAqmy2PM9Vo/YuGkQYCfbk4go=; b=YkMebS54tEkP3sOpU5KOi0XK0fVfkr5bvAEqjRK7+S9Eci3PTjsNT0P8 SFlADcPwCWp6NPTYuYREQI4RWTs93zRLMGzpwQ1VnyqSYvWeCYOfa1ZcK eAvSrupL3EAj8MitynuVWea1yamkw+rOxVP1YMiXP9LUF9S8j1Sisy7fa xs38Qo7JSEentiXUbtOhENC1Zob2X+UQIPwLOiHlD/AZklYNcae9iRPv2 rwXIl3jb2zQC6ppqKlvBsuOWRMla/2GdAS+eSR87Omd7a+9LqLq8mm9hs VCaUoHyqogTenSwYTHxS89oIhFhotFfdiY3gxcDlzxFASFKcSFqDvSN23 Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10400"; a="263588162" X-IronPort-AV: E=Sophos;i="5.92,250,1650956400"; d="scan'208";a="263588162" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jul 2022 09:21:08 -0700 X-IronPort-AV: E=Sophos;i="5.92,250,1650956400"; d="scan'208";a="661035834" Received: from jhogberg-mobl1.ger.corp.intel.com (HELO [10.249.254.57]) ([10.249.254.57]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jul 2022 09:21:05 -0700 Message-ID: <8a21c7a72aeb74f80bd471496c3dcd7b6dcd1df1.camel@linux.intel.com> From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Niranjana Vishwanathapura , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Wed, 06 Jul 2022 18:21:03 +0200 In-Reply-To: <20220701225055.8204-3-niranjana.vishwanathapura@intel.com> References: <20220701225055.8204-1-niranjana.vishwanathapura@intel.com> <20220701225055.8204-3-niranjana.vishwanathapura@intel.com> Organization: Intel Sweden AB, Registration Number: 556189-6027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.44.3 (3.44.3-1.fc36) MIME-Version: 1.0 Subject: Re: [Intel-gfx] [RFC 02/10] drm/i915/vm_bind: Bind and unbind mappings 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: paulo.r.zanoni@intel.com, matthew.auld@intel.com, daniel.vetter@intel.com, christian.koenig@amd.com Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gRnJpLCAyMDIyLTA3LTAxIGF0IDE1OjUwIC0wNzAwLCBOaXJhbmphbmEgVmlzaHdhbmF0aGFw dXJhIHdyb3RlOgo+IEJpbmQgYW5kIHVuYmluZCB0aGUgbWFwcGluZ3MgdXBvbiBWTV9CSU5EIGFu ZCBWTV9VTkJJTkQgY2FsbHMuCj4gCj4gU2lnbmVkLW9mZi1ieTogTmlyYW5qYW5hIFZpc2h3YW5h dGhhcHVyYQo+IDxuaXJhbmphbmEudmlzaHdhbmF0aGFwdXJhQGludGVsLmNvbT4KPiBTaWduZWQt b2ZmLWJ5OiBQcmF0aGFwIEt1bWFyIFZhbHNhbiA8cHJhdGhhcC5rdW1hci52YWxzYW5AaW50ZWwu Y29tPgo+IC0tLQo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGXCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9jcmVhdGUuY8KgwqDCoCB8wqAgMTAgKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaMKgwqDCoCB8wqDCoCAyICsKPiDCoGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV92bV9iaW5kLmjCoMKgIHzCoCAzOCArKysKPiDCoC4uLi9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fdm1fYmluZF9vYmplY3QuY8KgwqDCoCB8IDIzMwo+ICsrKysr KysrKysrKysrKysrKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3R0LmPCoMKg wqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA3ICsKPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2d0dC5owqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgOSArCj4gwqBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2RyaXZlci5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTEgKy0KPiDC oGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHzCoMKgIDcgKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmjCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgLQo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV92bWFfdHlwZXMuaMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgOCArCj4gwqAxMSBmaWxlcyBj aGFuZ2VkLCAzMTggaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3ZtX2JpbmQuaAo+IMKg Y3JlYXRlIG1vZGUgMTAwNjQ0Cj4gZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Zt X2JpbmRfb2JqZWN0LmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggNTIyZWY5YjRh ZmYzLi40ZTE2MjdlOTZjNmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC0xNjUsNiAr MTY1LDcgQEAgZ2VtLXkgKz0gXAo+IMKgwqDCoMKgwqDCoMKgwqBnZW0vaTkxNV9nZW1fdHRtX21v dmUubyBcCj4gwqDCoMKgwqDCoMKgwqDCoGdlbS9pOTE1X2dlbV90dG1fcG0ubyBcCj4gwqDCoMKg wqDCoMKgwqDCoGdlbS9pOTE1X2dlbV91c2VycHRyLm8gXAo+ICvCoMKgwqDCoMKgwqDCoGdlbS9p OTE1X2dlbV92bV9iaW5kX29iamVjdC5vIFwKPiDCoMKgwqDCoMKgwqDCoMKgZ2VtL2k5MTVfZ2Vt X3dhaXQubyBcCj4gwqDCoMKgwqDCoMKgwqDCoGdlbS9pOTE1X2dlbWZzLm8KPiDCoGk5MTUteSAr PSBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jcmVh dGUuYwo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NyZWF0ZS5jCj4gaW5k ZXggMzM2NzNmZTdlZTBhLi45MjdhODdlNWVjNTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NyZWF0ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX2NyZWF0ZS5jCj4gQEAgLTE1LDEwICsxNSwxMCBAQAo+IMKgI2luY2x1 ZGUgImk5MTVfdHJhY2UuaCIKPiDCoCNpbmNsdWRlICJpOTE1X3VzZXJfZXh0ZW5zaW9ucy5oIgo+ IMKgCj4gLXN0YXRpYyB1MzIgb2JqZWN0X21heF9wYWdlX3NpemUoc3RydWN0IGludGVsX21lbW9y eV9yZWdpb24KPiAqKnBsYWNlbWVudHMsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IG5fcGxhY2VtZW50 cykKPiArdTMyIGk5MTVfZ2VtX29iamVjdF9tYXhfcGFnZV9zaXplKHN0cnVjdCBpbnRlbF9tZW1v cnlfcmVnaW9uCj4gKipwbGFjZW1lbnRzLAoKS2VybmVsZG9jLgoKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25l ZCBpbnQgbl9wbGFjZW1lbnRzKQo+IMKgewo+IC3CoMKgwqDCoMKgwqDCoHUzMiBtYXhfcGFnZV9z aXplID0gMDsKPiArwqDCoMKgwqDCoMKgwqB1MzIgbWF4X3BhZ2Vfc2l6ZSA9IEk5MTVfR1RUX1BB R0VfU0laRV80SzsKPiDCoMKgwqDCoMKgwqDCoMKgaW50IGk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDC oMKgZm9yIChpID0gMDsgaSA8IG5fcGxhY2VtZW50czsgaSsrKSB7Cj4gQEAgLTI4LDcgKzI4LDYg QEAgc3RhdGljIHUzMiBvYmplY3RfbWF4X3BhZ2Vfc2l6ZShzdHJ1Y3QKPiBpbnRlbF9tZW1vcnlf cmVnaW9uICoqcGxhY2VtZW50cywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1h eF9wYWdlX3NpemUgPSBtYXhfdCh1MzIsIG1heF9wYWdlX3NpemUsIG1yLQo+ID5taW5fcGFnZV9z aXplKTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgR0VNX0JVR19P TighbWF4X3BhZ2Vfc2l6ZSk7Cj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBtYXhfcGFnZV9zaXpl Owo+IMKgfQoKU2hvdWxkIHRoaXMgY2hhbmdlIGJlIHNlcGFyYXRlZCBvdXQ/IEl0J3Mgbm90IGlt bWVkaWF0ZWx5IGNsZWFyIHRvIGEKcmV2aWV3ZXIgd2h5IGl0IGlzIGluY2x1ZGVkLgoKPiDCoAo+ IEBAIC05OSw3ICs5OCw4IEBAIF9faTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV91c2VyX2V4dChzdHJ1 Y3QKPiBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1NjQgc2l6ZSwKPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqBpOTE1X2dlbV9mbHVzaF9mcmVlX29iamVjdHMoaTkxNSk7Cj4gwqAKPiAtwqDCoMKgwqDC oMKgwqBzaXplID0gcm91bmRfdXAoc2l6ZSwgb2JqZWN0X21heF9wYWdlX3NpemUocGxhY2VtZW50 cywKPiBuX3BsYWNlbWVudHMpKTsKPiArwqDCoMKgwqDCoMKgwqBzaXplID0gcm91bmRfdXAoc2l6 ZSwKPiBpOTE1X2dlbV9vYmplY3RfbWF4X3BhZ2Vfc2l6ZShwbGFjZW1lbnRzLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IG5f cGxhY2VtZW50cykpOwo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoc2l6ZSA9PSAwKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gwqAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCj4g Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKPiBpbmRleCA2ZjBh M2NlMzU1NjcuLjY1MGRlMjIyNDg0MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fb2JqZWN0LmgKPiBAQCAtNDcsNiArNDcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg aTkxNV9nZW1fb2JqZWN0X3NpemVfMmJpZyh1NjQKPiBzaXplKQo+IMKgfQo+IMKgCj4gwqB2b2lk IGk5MTVfZ2VtX2luaXRfX29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ ICt1MzIgaTkxNV9nZW1fb2JqZWN0X21heF9wYWdlX3NpemUoc3RydWN0IGludGVsX21lbW9yeV9y ZWdpb24KPiAqKnBsYWNlbWVudHMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IG5fcGxhY2VtZW50 cyk7Cj4gwqAKPiDCoHZvaWQgaTkxNV9vYmplY3RzX21vZHVsZV9leGl0KHZvaWQpOwo+IMKgaW50 IGk5MTVfb2JqZWN0c19tb2R1bGVfaW5pdCh2b2lkKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3ZtX2JpbmQuaAo+IGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3ZtX2JpbmQuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi42NDJjZGI1NTlmMTcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3ZtX2JpbmQuaAo+IEBAIC0wLDAgKzEsMzggQEAK PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLwo+ICsvKgo+ICsgKiBDb3B5cmln aHQgwqkgMjAyMiBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19JOTE1 X0dFTV9WTV9CSU5EX0gKPiArI2RlZmluZSBfX0k5MTVfR0VNX1ZNX0JJTkRfSAo+ICsKPiArI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCj4gKwo+ICsjZGVmaW5lIGFzc2VydF92bV9iaW5kX2hlbGQodm0p wqDCoCBsb2NrZGVwX2Fzc2VydF9oZWxkKCYodm0pLQo+ID52bV9iaW5kX2xvY2spCj4gKwo+ICtz dGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1fdm1fYmluZF9sb2NrKHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2UKPiAqdm0pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBtdXRleF9sb2NrKCZ2bS0+dm1f YmluZF9sb2NrKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQKPiAraTkxNV9nZW1fdm1f YmluZF9sb2NrX2ludGVycnVwdGlibGUoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4g K3sKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2bS0+ dm1fYmluZF9sb2NrKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGk5MTVfZ2VtX3Zt X2JpbmRfdW5sb2NrKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UKPiAqdm0pCj4gK3sKPiArwqDC oMKgwqDCoMKgwqBtdXRleF91bmxvY2soJnZtLT52bV9iaW5kX2xvY2spOwo+ICt9Cj4gKwoKS2Vy bmVsZG9jIGZvciB0aGUgaW5saW5lcy4KCj4gK3N0cnVjdCBpOTE1X3ZtYSAqCj4gK2k5MTVfZ2Vt X3ZtX2JpbmRfbG9va3VwX3ZtYShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwgdTY0IHZh KTsKPiArdm9pZCBpOTE1X2dlbV92bV9iaW5kX3JlbW92ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwg Ym9vbAo+IHJlbGVhc2Vfb2JqKTsKPiAraW50IGk5MTVfZ2VtX3ZtX2JpbmRfb2JqKHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1fdm1fYmluZCAqdmEsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9maWxl ICpmaWxlKTsKPiAraW50IGk5MTVfZ2VtX3ZtX3VuYmluZF9vYmooc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1fdm1fdW5iaW5kICp2YSk7Cj4gKwo+ICsjZW5k aWYgLyogX19JOTE1X0dFTV9WTV9CSU5EX0ggKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3ZtX2JpbmRfb2JqZWN0LmMKPiBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV92bV9iaW5kX29iamVjdC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQzY2ViNGRjY2E2Ywo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdm1fYmluZF9vYmplY3QuYwo+ IEBAIC0wLDAgKzEsMjMzIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiAr LyoKPiArICogQ29weXJpZ2h0IMKpIDIwMjIgSW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ ICsjaW5jbHVkZSA8bGludXgvaW50ZXJ2YWxfdHJlZV9nZW5lcmljLmg+Cj4gKwo+ICsjaW5jbHVk ZSAiZ2VtL2k5MTVfZ2VtX3ZtX2JpbmQuaCIKPiArI2luY2x1ZGUgImd0L2dlbjhfZW5naW5lX2Nz LmgiCj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfZ2VtX2d0 dC5oIgo+ICsKPiArI2RlZmluZSBTVEFSVChub2RlKSAoKG5vZGUpLT5zdGFydCkKPiArI2RlZmlu ZSBMQVNUKG5vZGUpICgobm9kZSktPmxhc3QpCj4gKwo+ICtJTlRFUlZBTF9UUkVFX0RFRklORShz dHJ1Y3QgaTkxNV92bWEsIHJiLCB1NjQsIF9fc3VidHJlZV9sYXN0LAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTVEFSVCwgTEFTVCwgc3RhdGljIGlubGluZSwgaTkx NV92bV9iaW5kX2l0KQo+ICsKPiArI3VuZGVmIFNUQVJUCj4gKyN1bmRlZiBMQVNUCj4gKwo+ICsv KioKPiArICogRE9DOiBWTV9CSU5EL1VOQklORCBpb2N0bHMKPiArICoKPiArICogRFJNX0k5MTVf R0VNX1ZNX0JJTkQvVU5CSU5EIGlvY3RscyBhbGxvd3MgVU1EIHRvIGJpbmQvdW5iaW5kIEdFTQo+ IGJ1ZmZlcgo+ICsgKiBvYmplY3RzIChCT3MpIG9yIHNlY3Rpb25zIG9mIGEgQk9zIGF0IHNwZWNp ZmllZCBHUFUgdmlydHVhbAo+IGFkZHJlc3NlcyBvbiBhCj4gKyAqIHNwZWNpZmllZCBhZGRyZXNz IHNwYWNlIChWTSkuIE11bHRpcGxlIG1hcHBpbmdzIGNhbiBtYXAgdG8gdGhlCj4gc2FtZSBwaHlz aWNhbAo+ICsgKiBwYWdlcyBvZiBhbiBvYmplY3QgKGFsaWFzaW5nKS4gVGhlc2UgbWFwcGluZ3Mg KGFsc28gcmVmZXJyZWQgdG8KPiBhcyBwZXJzaXN0ZW50Cj4gKyAqIG1hcHBpbmdzKSB3aWxsIGJl IHBlcnNpc3RlbnQgYWNyb3NzIG11bHRpcGxlIEdQVSBzdWJtaXNzaW9ucwo+IChleGVjYnVmIGNh bGxzKQo+ICsgKiBpc3N1ZWQgYnkgdGhlIFVNRCwgd2l0aG91dCB1c2VyIGhhdmluZyB0byBwcm92 aWRlIGEgbGlzdCBvZiBhbGwKPiByZXF1aXJlZAo+ICsgKiBtYXBwaW5ncyBkdXJpbmcgZWFjaCBz dWJtaXNzaW9uIChhcyByZXF1aXJlZCBieSBvbGRlciBleGVjYnVmCj4gbW9kZSkuCj4gKyAqCj4g KyAqIFRoZSBWTV9CSU5EL1VOQklORCBjYWxscyBhbGxvdyBVTURzIHRvIHJlcXVlc3QgYSB0aW1l bGluZSBvdXQKPiBmZW5jZSBmb3IKPiArICogc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uIG9mIGJp bmQvdW5iaW5kIG9wZXJhdGlvbi4KPiArICoKPiArICogVk1fQklORCBmZWF0dXJlIGlzIGFkdmVy dGlzZWQgdG8gdXNlciB2aWEKPiBJOTE1X1BBUkFNX1ZNX0JJTkRfVkVSU0lPTi4KPiArICogVXNl ciBoYXMgdG8gb3B0LWluIGZvciBWTV9CSU5EIG1vZGUgb2YgYmluZGluZyBmb3IgYW4gYWRkcmVz cwo+IHNwYWNlIChWTSkKPiArICogZHVyaW5nIFZNIGNyZWF0aW9uIHRpbWUgdmlhIEk5MTVfVk1f Q1JFQVRFX0ZMQUdTX1VTRV9WTV9CSU5ECj4gZXh0ZW5zaW9uLgo+ICsgKgo+ICsgKiBWTV9CSU5E L1VOQklORCBpb2N0bCBjYWxscyBleGVjdXRlZCBvbiBkaWZmZXJlbnQgQ1BVIHRocmVhZHMKPiBj b25jdXJyZW50bHkKPiArICogYXJlIG5vdCBvcmRlcmVkLiBGdXJ0aGVybW9yZSwgcGFydHMgb2Yg dGhlIFZNX0JJTkQvVU5CSU5ECj4gb3BlcmF0aW9ucyBjYW4gYmUKPiArICogZG9uZSBhc3luY2hy b25vdXNseSwgd2hlbiB2YWxpZCBvdXQgZmVuY2UgaXMgc3BlY2lmaWVkLgo+ICsgKgo+ICsgKiBW TV9CSU5EIGxvY2tpbmcgb3JkZXIgaXMgYXMgYmVsb3cuCj4gKyAqCj4gKyAqIDEpIExvY2stQTog QSB2bV9iaW5kIG11dGV4IHdpbGwgcHJvdGVjdCB2bV9iaW5kIGxpc3RzLiBUaGlzIGxvY2sKPiBp cyB0YWtlbiBpbgo+ICsgKsKgwqDCoCB2bV9iaW5kL3ZtX3VuYmluZCBpb2N0bCBjYWxscywgaW4g dGhlIGV4ZWNidWYgcGF0aCBhbmQgd2hpbGUKPiByZWxlYXNpbmcgdGhlCj4gKyAqwqDCoMKgIG1h cHBpbmcuCj4gKyAqCj4gKyAqwqDCoMKgIEluIGZ1dHVyZSwgd2hlbiBHUFUgcGFnZSBmYXVsdHMg YXJlIHN1cHBvcnRlZCwgd2UgY2FuCj4gcG90ZW50aWFsbHkgdXNlIGEKPiArICrCoMKgwqAgcndz ZW0gaW5zdGVhZCwgc28gdGhhdCBtdWx0aXBsZSBwYWdlIGZhdWx0IGhhbmRsZXJzIGNhbiB0YWtl Cj4gdGhlIHJlYWQKPiArICrCoMKgwqAgc2lkZSBsb2NrIHRvIGxvb2t1cCB0aGUgbWFwcGluZyBh bmQgaGVuY2UgY2FuIHJ1biBpbiBwYXJhbGxlbC4KPiArICrCoMKgwqAgVGhlIG9sZGVyIGV4ZWNi dWYgbW9kZSBvZiBiaW5kaW5nIGRvIG5vdCBuZWVkIHRoaXMgbG9jay4KPiArICoKPiArICogMikg TG9jay1COiBUaGUgb2JqZWN0J3MgZG1hLXJlc3YgbG9jayB3aWxsIHByb3RlY3QgaTkxNV92bWEg c3RhdGUKPiBhbmQgbmVlZHMKPiArICrCoMKgwqAgdG8gYmUgaGVsZCB3aGlsZSBiaW5kaW5nL3Vu YmluZGluZyBhIHZtYSBpbiB0aGUgYXN5bmMgd29ya2VyCj4gYW5kIHdoaWxlCj4gKyAqwqDCoMKg IHVwZGF0aW5nIGRtYS1yZXN2IGZlbmNlIGxpc3Qgb2YgYW4gb2JqZWN0LiBOb3RlIHRoYXQgcHJp dmF0ZQo+IEJPcyBvZiBhIFZNCj4gKyAqwqDCoMKgIHdpbGwgYWxsIHNoYXJlIGEgZG1hLXJlc3Yg b2JqZWN0Lgo+ICsgKgo+ICsgKsKgwqDCoCBUaGUgZnV0dXJlIHN5c3RlbSBhbGxvY2F0b3Igc3Vw cG9ydCB3aWxsIHVzZSB0aGUgSE1NCj4gcHJlc2NyaWJlZCBsb2NraW5nCj4gKyAqwqDCoMKgIGlu c3RlYWQuCgpJIGRvbid0IHRoaW5rIHRoZSBsYXN0IHNlbnRlbmNlIGlzIHJlbGV2YW50IGZvciB0 aGlzIHNlcmllcy4gQWxzbywgYXJlCnRoZXJlIGFueSBvdGhlciBtZW50aW9ucyBmb3IgTG9ja3Mg QSwgQiBhbmQgQz8gSWYgbm90LCBjYW4gd2UgZGl0Y2gKdGhhdCBuYW1pbmc/Cgo+ICsgKgo+ICsg KiAzKSBMb2NrLUM6IFNwaW5sb2NrL3MgdG8gcHJvdGVjdCBzb21lIG9mIHRoZSBWTSdzIGxpc3Rz IGxpa2UgdGhlCj4gbGlzdCBvZgo+ICsgKsKgwqDCoCBpbnZhbGlkYXRlZCB2bWFzIChkdWUgdG8g ZXZpY3Rpb24gYW5kIHVzZXJwdHIgaW52YWxpZGF0aW9uKQo+IGV0Yy4KPiArICovCj4gKwo+ICtz dHJ1Y3QgaTkxNV92bWEgKgo+ICtpOTE1X2dlbV92bV9iaW5kX2xvb2t1cF92bWEoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sIHU2NCB2YSkKCktlcm5lbGRvYyBmb3IgdGhlIGV4dGVybiBm dW5jdGlvbnMuCgoKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCAq dGVtcDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgYXNzZXJ0X3ZtX2JpbmRfaGVsZCh2bSk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoHZtYSA9IGk5MTVfdm1fYmluZF9pdF9pdGVyX2ZpcnN0KCZ2bS0+dmEs IHZhLCB2YSk7Cj4gK8KgwqDCoMKgwqDCoMKgLyogV29ya2luZyBhcm91bmQgY29tcGlsZXIgZXJy b3IsIHJlbW92ZSBsYXRlciAqLwoKSXMgdGhpcyBzdGlsbCByZWxldmFudD8gV2hhdCBjb21waWxl ciBlcnJvciBpcyBzZWVuIGhlcmU/Cgo+ICvCoMKgwqDCoMKgwqDCoGlmICh2bWEpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRlbXAgPSBpOTE1X3ZtX2JpbmRfaXRfaXRlcl9uZXh0 KHZtYSwgdmEgKyB2bWEtPnNpemUsCj4gLTEpOwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB2bWE7 Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9nZW1fdm1fYmluZF9yZW1vdmUoc3RydWN0IGk5MTVfdm1h ICp2bWEsIGJvb2wgcmVsZWFzZV9vYmopCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBhc3NlcnRfdm1f YmluZF9oZWxkKHZtYS0+dm0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWxpc3RfZW1wdHko JnZtYS0+dm1fYmluZF9saW5rKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBs aXN0X2RlbF9pbml0KCZ2bWEtPnZtX2JpbmRfbGluayk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGk5MTVfdm1fYmluZF9pdF9yZW1vdmUodm1hLCAmdm1hLT52bS0+dmEpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogUmVsZWFzZSBvYmplY3QgKi8KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJlbGVhc2Vfb2JqKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaTkxNV92bWFfcHV0KHZtYSk7 CgppOTE1X3ZtYV9wdXQoKSBoZXJlIGlzIGNvbmZ1c2luZy4gQ2FuIHdlIHVzZSBpOTE1X2dlbV9v YmplY3RfcHV0KCkgdG8KZnVydGhlciBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIHBlcnNpc3RlbnQg dm1hcyBhY3R1YWxseSB0YWtlIGEKcmVmZXJlbmNlIG9uIHRoZSBvYmplY3Q/Cgo+ICvCoMKgwqDC oMKgwqDCoH0KPiArfQo+ICsKPiAraW50IGk5MTVfZ2VtX3ZtX3VuYmluZF9vYmooc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1fdm1fdW5iaW5kICp2YSkKPiAr ewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJl dDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgdmEtPnN0YXJ0ID0gZ2VuOF9ub25jYW5vbmljYWxfYWRk cih2YS0+c3RhcnQpOwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGk5MTVfZ2VtX3ZtX2JpbmRfbG9j a19pbnRlcnJ1cHRpYmxlKHZtKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqB2 bWEgPSBpOTE1X2dlbV92bV9iaW5kX2xvb2t1cF92bWEodm0sIHZhLT5zdGFydCk7Cj4gK8KgwqDC oMKgwqDCoMKgaWYgKCF2bWEpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gLUVOT0VOVDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXRfdW5s b2NrOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHZtYS0+c2l6 ZSAhPSB2YS0+bGVuZ3RoKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSAt RUlOVkFMOwo+ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaTkxNV9nZW1fdm1fYmluZF9yZW1vdmUodm1hLCBmYWxzZSk7Cj4gKwo+ICtvdXRfdW5s b2NrOgo+ICvCoMKgwqDCoMKgwqDCoGk5MTVfZ2VtX3ZtX2JpbmRfdW5sb2NrKHZtKTsKPiArwqDC oMKgwqDCoMKgwqBpZiAocmV0IHx8ICF2bWEpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIERlc3Ryb3kgdm1hIGFuZCB0 aGVuIHJlbGVhc2Ugb2JqZWN0ICovCj4gK8KgwqDCoMKgwqDCoMKgb2JqID0gdm1hLT5vYmo7Cj4g K8KgwqDCoMKgwqDCoMKgcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2xvY2sob2JqLCBOVUxMKTsKPiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gcmV0OwoKVGhpcyBjYWxsIG5ldmVyIHJldHVybnMgYW4gZXJyb3IgYW5kIHdlIGNvdWxk IEdFTV9XQVJOX09OKC4uLiksIG9yCih2b2lkKSB0byBhbm5vdGF0ZSB0aGF0IHRoZSByZXR1cm4g dmFsdWUgaXMgd2lsZnVsbHkgaWdub3JlZC4KCj4gKwo+ICvCoMKgwqDCoMKgwqDCoGk5MTVfdm1h X2Rlc3Ryb3kodm1hKTsKPiArwqDCoMKgwqDCoMKgwqBpOTE1X2dlbV9vYmplY3RfdW5sb2NrKG9i aik7Cj4gK8KgwqDCoMKgwqDCoMKgaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsKPiArwqDC oMKgwqDCoMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAq dm1fYmluZF9nZXRfdm1hKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UKPiAqdm0sCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0Cj4gKm9iaiwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X2dlbV92bV9iaW5kCj4gKnZhKQo+ICt7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGk5MTVfZ2d0dF92aWV3IHZpZXc7Cj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHZhLT5zdGFy dCA9IGdlbjhfbm9uY2Fub25pY2FsX2FkZHIodmEtPnN0YXJ0KTsKPiArwqDCoMKgwqDCoMKgwqB2 bWEgPSBpOTE1X2dlbV92bV9iaW5kX2xvb2t1cF92bWEodm0sIHZhLT5zdGFydCk7Cj4gK8KgwqDC oMKgwqDCoMKgaWYgKHZtYSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IEVSUl9QVFIoLUVFWElTVCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHZpZXcudHlwZSA9IEk5MTVf R0dUVF9WSUVXX1BBUlRJQUw7Cj4gK8KgwqDCoMKgwqDCoMKgdmlldy5wYXJ0aWFsLm9mZnNldCA9 IHZhLT5vZmZzZXQgPj4gUEFHRV9TSElGVDsKPiArwqDCoMKgwqDCoMKgwqB2aWV3LnBhcnRpYWwu c2l6ZSA9IHZhLT5sZW5ndGggPj4gUEFHRV9TSElGVDsKCklJUkMsIHRoaXMgdm1hIHZpZXcgaXMg bm90IGhhbmRsZWQgY29ycmVjdGx5IGluIHRoZSB2bWEgY29kZSwgdGhhdCBvbmx5CnVuZGVyc3Rh bmRzIHZpZXdzIGZvciBnZ3R0IGJpbmRpbmdzLgoKCj4gK8KgwqDCoMKgwqDCoMKgdm1hID0gaTkx NV92bWFfaW5zdGFuY2Uob2JqLCB2bSwgJnZpZXcpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19F UlIodm1hKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHZtYTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgdm1hLT5zdGFydCA9IHZhLT5zdGFydDsKPiArwqDCoMKgwqDCoMKg wqB2bWEtPmxhc3QgPSB2YS0+c3RhcnQgKyB2YS0+bGVuZ3RoIC0gMTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIHZtYTsKPiArfQo+ICsKPiAraW50IGk5MTVfZ2VtX3ZtX2JpbmRfb2JqKHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1fdm1fYmluZCAqdmEsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRy bV9maWxlICpmaWxlKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iajsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaTkxNV92bWEgKnZtYSA9IE5VTEw7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGk5MTVfZ2VtX3d3X2N0eCB3dzsKPiArwqDCoMKgwqDC oMKgwqB1NjQgcGluX2ZsYWdzOwo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQgPSAwOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBpZiAoIXZtLT52bV9iaW5kX21vZGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiAtRU9QTk9UU1VQUDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgb2Jq ID0gaTkxNV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlLCB2YS0+aGFuZGxlKTsKPiArwqDCoMKgwqDC oMKgwqBpZiAoIW9iaikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F Tk9FTlQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghdmEtPmxlbmd0aCB8fAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCAhSVNfQUxJR05FRCh2YS0+b2Zmc2V0IHwgdmEtPmxlbmd0aCwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGk5MTVfZ2VtX29iamVj dF9tYXhfcGFnZV9zaXplKG9iai0KPiA+bW0ucGxhY2VtZW50cywKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2JqLQo+ID5tbS5uX3BsYWNlbWVudHMp KSB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByYW5nZV9vdmVyZmxvd3NfdCh1NjQsIHZhLT5v ZmZzZXQsIHZhLT5sZW5ndGgsIG9iai0KPiA+YmFzZS5zaXplKSkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgPSAtRUlOVkFMOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBnb3RvIHB1dF9vYmo7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDC oMKgwqByZXQgPSBpOTE1X2dlbV92bV9iaW5kX2xvY2tfaW50ZXJydXB0aWJsZSh2bSk7Cj4gK8Kg wqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290 byBwdXRfb2JqOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2bWEgPSB2bV9iaW5kX2dldF92bWEodm0s IG9iaiwgdmEpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIodm1hKSkgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKHZtYSk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gdW5sb2NrX3ZtOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiAr Cj4gK8KgwqDCoMKgwqDCoMKgaTkxNV9nZW1fd3dfY3R4X2luaXQoJnd3LCB0cnVlKTsKPiArwqDC oMKgwqDCoMKgwqBwaW5fZmxhZ3MgPSB2YS0+c3RhcnQgfCBQSU5fT0ZGU0VUX0ZJWEVEIHwgUElO X1VTRVI7Cj4gK3JldHJ5Ogo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGk5MTVfZ2VtX29iamVjdF9s b2NrKHZtYS0+b2JqLCAmd3cpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0X3d3Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBy ZXQgPSBpOTE1X3ZtYV9waW5fd3codm1hLCAmd3csIDAsIDAsIHBpbl9mbGFncyk7Cj4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBv dXRfd3c7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIE1ha2UgaXQgZXZpY3RhYmxlICovCj4gK8Kg wqDCoMKgwqDCoMKgX19pOTE1X3ZtYV91bnBpbih2bWEpOwoKQSBjb25zaWRlcmFibGUgZWZmb3J0 IGhhcyBiZWVuIHB1dCBpbnRvIGF2b2lkaW5nIHNob3J0IHRlcm0gdm1hIHBpbnMgaW4KaTkxNS4g V2Ugc2hvdWxkIGFkZCBhbiBpbnRlcmZhY2UgbGlrZSBpOTE1X3ZtYV9iaW5kX3d3KCkgdGhhdCBh dm9pZHMKdGhlIHBpbiBhbHRvZ2hldGhlci4KCj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfYWRk X3RhaWwoJnZtYS0+dm1fYmluZF9saW5rLCAmdm0tPnZtX2JvdW5kX2xpc3QpOwo+ICvCoMKgwqDC oMKgwqDCoGk5MTVfdm1fYmluZF9pdF9pbnNlcnQodm1hLCAmdm0tPnZhKTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgLyogSG9sZCBvYmplY3QgcmVmZXJlbmNlIHVudGlsIHZtX3VuYmluZCAqLwo+ICvC oMKgwqDCoMKgwqDCoGk5MTVfZ2VtX29iamVjdF9nZXQodm1hLT5vYmopOwo+ICtvdXRfd3c6Cj4g K8KgwqDCoMKgwqDCoMKgaWYgKHJldCA9PSAtRURFQURMSykgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXQgPSBpOTE1X2dlbV93d19jdHhfYmFja29mZigmd3cpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcmV0cnk7Cj4gK8KgwqDCoMKgwqDCoMKg fQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpOTE1X3ZtYV9kZXN0cm95KHZtYSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGk5MTVf Z2VtX3d3X2N0eF9maW5pKCZ3dyk7CgpDb3VsZCB1c2UgZm9yX2k5MTVfZ2VtX3d3KCk/Cgo+ICt1 bmxvY2tfdm06Cj4gK8KgwqDCoMKgwqDCoMKgaTkxNV9nZW1fdm1fYmluZF91bmxvY2sodm0pOwo+ ICtwdXRfb2JqOgo+ICvCoMKgwqDCoMKgwqDCoGk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2d0dC5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndHQuYwo+IGluZGV4IGI2NzgzMTgzM2M5YS4uMTM1ZGM0YTc2NzI0IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0dC5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfZ3R0LmMKPiBAQCAtMTc2LDYgKzE3Niw4IEBAIGludCBpOTE1X3Zt X2xvY2tfb2JqZWN0cyhzdHJ1Y3QKPiBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+IMKgdm9pZCBp OTE1X2FkZHJlc3Nfc3BhY2VfZmluaShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiDC oHsKPiDCoMKgwqDCoMKgwqDCoMKgZHJtX21tX3Rha2Vkb3duKCZ2bS0+bW0pOwo+ICvCoMKgwqDC oMKgwqDCoEdFTV9CVUdfT04oIVJCX0VNUFRZX1JPT1QoJnZtLT52YS5yYl9yb290KSk7Cj4gK8Kg wqDCoMKgwqDCoMKgbXV0ZXhfZGVzdHJveSgmdm0tPnZtX2JpbmRfbG9jayk7Cj4gwqB9Cj4gwqAK PiDCoC8qKgo+IEBAIC0yODIsNiArMjg0LDExIEBAIHZvaWQgaTkxNV9hZGRyZXNzX3NwYWNlX2lu aXQoc3RydWN0Cj4gaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwgaW50IHN1YmNsYXNzKQo+IMKgCj4g wqDCoMKgwqDCoMKgwqDCoElOSVRfTElTVF9IRUFEKCZ2bS0+Ym91bmRfbGlzdCk7Cj4gwqDCoMKg wqDCoMKgwqDCoElOSVRfTElTVF9IRUFEKCZ2bS0+dW5ib3VuZF9saXN0KTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgdm0tPnZhID0gUkJfUk9PVF9DQUNIRUQ7Cj4gK8KgwqDCoMKgwqDCoMKgSU5JVF9M SVNUX0hFQUQoJnZtLT52bV9iaW5kX2xpc3QpOwo+ICvCoMKgwqDCoMKgwqDCoElOSVRfTElTVF9I RUFEKCZ2bS0+dm1fYm91bmRfbGlzdCk7Cj4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfaW5pdCgmdm0t PnZtX2JpbmRfbG9jayk7Cj4gwqB9Cj4gwqAKPiDCoHZvaWQgKl9fcHhfdmFkZHIoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKnApCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2d0dC5oCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndHQuaAo+ IGluZGV4IGM4MTJhYTk3MDhhZS4uZDRhNmNlNjUyNTFkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0dC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3R0LmgKPiBAQCAtMjU5LDYgKzI1OSwxNSBAQCBzdHJ1Y3QgaTkxNV9hZGRyZXNz X3NwYWNlIHsKPiDCoMKgwqDCoMKgwqDCoMKgICovCj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBs aXN0X2hlYWQgdW5ib3VuZF9saXN0Owo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDC oMKgwqDCoMKgICogTGlzdCBvZiBWTV9CSU5EIG9iamVjdHMuCj4gK8KgwqDCoMKgwqDCoMKgICov CgpQcm9wZXIga2VybmVsZG9jICsgaW50ZWwgbG9ja2luZyBndWlkZWxpbmVzIGNvbW1lbnRzLCBw bGVhc2UuCgo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtdXRleCB2bV9iaW5kX2xvY2s7wqAgLyog UHJvdGVjdHMgdm1fYmluZCBsaXN0cyAqLwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsaXN0X2hl YWQgdm1fYmluZF9saXN0Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsaXN0X2hlYWQgdm1fYm91 bmRfbGlzdDsKPiArwqDCoMKgwqDCoMKgwqAvKiB2YSB0cmVlIG9mIHBlcnNpc3RlbnQgdm1hcyAq Lwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByYl9yb290X2NhY2hlZCB2YTsKPiArCj4gwqDCoMKg wqDCoMKgwqDCoC8qIEdsb2JhbCBHVFQgKi8KPiDCoMKgwqDCoMKgwqDCoMKgYm9vbCBpc19nZ3R0 OjE7Cj4gwqAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcml2ZXIu Ywo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcml2ZXIuYwo+IGluZGV4IGNjZjk5MGRm ZDk5Yi4uNzc2YWI3ODQ0ZjYwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJpdmVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RyaXZlci5jCj4g QEAgLTY4LDYgKzY4LDcgQEAKPiDCoCNpbmNsdWRlICJnZW0vaTkxNV9nZW1faW9jdGxzLmgiCj4g wqAjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX21tYW4uaCIKPiDCoCNpbmNsdWRlICJnZW0vaTkxNV9n ZW1fcG0uaCIKPiArI2luY2x1ZGUgImdlbS9pOTE1X2dlbV92bV9iaW5kLmgiCj4gwqAjaW5jbHVk ZSAiZ3QvaW50ZWxfZ3QuaCIKPiDCoCNpbmNsdWRlICJndC9pbnRlbF9ndF9wbS5oIgo+IMKgI2lu Y2x1ZGUgImd0L2ludGVsX3JjNi5oIgo+IEBAIC0xNzgzLDEzICsxNzg0LDE2IEBAIHN0YXRpYyBp bnQgaTkxNV9nZW1fdm1fYmluZF9pb2N0bChzdHJ1Y3QKPiBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9nZW1fdm1fYmlu ZCAqYXJncyA9IGRhdGE7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtOwo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKg dm0gPSBpOTE1X2dlbV92bV9sb29rdXAoZmlsZS0+ZHJpdmVyX3ByaXYsIGFyZ3MtPnZtX2lkKTsK PiDCoMKgwqDCoMKgwqDCoMKgaWYgKHVubGlrZWx5KCF2bSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT0VOVDsKPiDCoAo+ICvCoMKgwqDCoMKgwqDCoHJldCA9 IGk5MTVfZ2VtX3ZtX2JpbmRfb2JqKHZtLCBhcmdzLCBmaWxlKTsKPiArCj4gwqDCoMKgwqDCoMKg wqDCoGk5MTVfdm1fcHV0KHZtKTsKPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgaW50IGk5MTVf Z2VtX3ZtX3VuYmluZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkCj4gKmRhdGEs Cj4gQEAgLTE3OTcsMTMgKzE4MDEsMTYgQEAgc3RhdGljIGludCBpOTE1X2dlbV92bV91bmJpbmRf aW9jdGwoc3RydWN0Cj4gZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+IMKgewo+IMKgwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX3VuYmluZCAqYXJncyA9IGRhdGE7Cj4g wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtOwo+ICvCoMKgwqDC oMKgwqDCoGludCByZXQ7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgdm0gPSBpOTE1X2dlbV92bV9s b29rdXAoZmlsZS0+ZHJpdmVyX3ByaXYsIGFyZ3MtPnZtX2lkKTsKPiDCoMKgwqDCoMKgwqDCoMKg aWYgKHVubGlrZWx5KCF2bSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gLUVOT0VOVDsKPiDCoAo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGk5MTVfZ2VtX3ZtX3VuYmlu ZF9vYmoodm0sIGFyZ3MpOwo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgaTkxNV92bV9wdXQodm0pOwo+ IC3CoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkx NV9pb2N0bHNbXSA9IHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92 bWEuYwo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYwo+IGluZGV4IDQzMzM5ZWNh YmQ3My4uZDMyNGUyOWNlZjBhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfdm1hLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCj4gQEAgLTI5 LDYgKzI5LDcgQEAKPiDCoCNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2Zyb250YnVmZmVyLmgiCj4g wqAjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX2xtZW0uaCIKPiDCoCNpbmNsdWRlICJnZW0vaTkxNV9n ZW1fdGlsaW5nLmgiCj4gKyNpbmNsdWRlICJnZW0vaTkxNV9nZW1fdm1fYmluZC5oIgo+IMKgI2lu Y2x1ZGUgImd0L2ludGVsX2VuZ2luZS5oIgo+IMKgI2luY2x1ZGUgImd0L2ludGVsX2VuZ2luZV9o ZWFydGJlYXQuaCIKPiDCoCNpbmNsdWRlICJndC9pbnRlbF9ndC5oIgo+IEBAIC0yMzQsNiArMjM1 LDcgQEAgdm1hX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IMKgwqDC oMKgwqDCoMKgwqBzcGluX3VubG9jaygmb2JqLT52bWEubG9jayk7Cj4gwqDCoMKgwqDCoMKgwqDC oG11dGV4X3VubG9jaygmdm0tPm11dGV4KTsKPiDCoAo+ICvCoMKgwqDCoMKgwqDCoElOSVRfTElT VF9IRUFEKCZ2bWEtPnZtX2JpbmRfbGluayk7Cj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiB2bWE7 Cj4gwqAKPiDCoGVycl91bmxvY2s6Cj4gQEAgLTI5MCw3ICsyOTIsNiBAQCBpOTE1X3ZtYV9pbnN0 YW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdAo+ICpvYmosCj4gwqB7Cj4gwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgR0VNX0JV R19PTih2aWV3ICYmICFpOTE1X2lzX2dndHRfb3JfZHB0KHZtKSk7Cj4gwqDCoMKgwqDCoMKgwqDC oEdFTV9CVUdfT04oIWtyZWZfcmVhZCgmdm0tPnJlZikpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDC oHNwaW5fbG9jaygmb2JqLT52bWEubG9jayk7Cj4gQEAgLTE2NjAsNiArMTY2MSwxMCBAQCBzdGF0 aWMgdm9pZCByZWxlYXNlX3JlZmVyZW5jZXMoc3RydWN0IGk5MTVfdm1hCj4gKnZtYSwgYm9vbCB2 bV9kZGVzdHJveSkKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBzcGluX3VubG9jaygmb2JqLT52bWEu bG9jayk7Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqBpOTE1X2dlbV92bV9iaW5kX2xvY2sodm1hLT52 bSk7Cj4gK8KgwqDCoMKgwqDCoMKgaTkxNV9nZW1fdm1fYmluZF9yZW1vdmUodm1hLCB0cnVlKTsK PiArwqDCoMKgwqDCoMKgwqBpOTE1X2dlbV92bV9iaW5kX3VubG9jayh2bWEtPnZtKTsKPiArCgpU aGUgdm0gbWlnaHQgYmUgZGVzdHJveWVkIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KCkZyb20gd2hh dCBJIHVuZGVyc3RhbmQgd2UgY2FuIGRlc3Ryb3kgdGhlIHZtYSBmcm9tIHRocmVlIGNhbGwgc2l0 ZXM6CjEpIFZNX1VOQklORCAtPiBUaGUgdm1hIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9t IHRoZSB2bV9iaW5kCmFkZHJlc3Mgc3BhY2UsCjIpIG9iamVjdCBkZXN0cnVjdGlvbiAtPiBzaW5j ZSB0aGUgdm1hIGhhcyBhbiBvYmplY3QgcmVmZXJlbmNlIHdoaWxlIGluCnRoZSB2bV9iaW5kIGFk ZHJlc3Mgc3BhY2UsIGl0IG11c3QgYWxzbyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZQphZGRy ZXNzIHNwYWNlIGlmIGNhbGxlZCBmcm9tIG9iamVjdCBkZXN0cnVjdGlvbi4KMykgdm0gZGVzdHJ1 Y3Rpb24uIFN1Z2dlc3Rpb24gaXMgdG8gY2FsbCBWTV9VTkJJTkQgZnJvbSB1bmRlciB0aGUKdm1f YmluZCBsb2NrIGVhcmx5IGluIHZtIGRlc3RydWN0aW9uLiAKClRoZW4gdGhlIGFib3ZlIGFkZGVk IGNvZGUgY2FuIGJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggYW4gYXNzZXJ0CnRoYXQgdGhl IHZtX2JpbmQgYWRkcmVzcyBzcGFjZSBSQl9OT0RFIGlzIGluZGVlZCBlbXB0eS4KCgo+IMKgwqDC oMKgwqDCoMKgwqBzcGluX2xvY2tfaXJxKCZndC0+Y2xvc2VkX2xvY2spOwo+IMKgwqDCoMKgwqDC oMKgwqBfX2k5MTVfdm1hX3JlbW92ZV9jbG9zZWQodm1hKTsKPiDCoMKgwqDCoMKgwqDCoMKgc3Bp bl91bmxvY2tfaXJxKCZndC0+Y2xvc2VkX2xvY2spOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3ZtYS5oCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5o Cj4gaW5kZXggODhjYTBiZDljOTAwLi5kY2I0OWY3OWZmN2UgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfdm1hLmgKPiBAQCAtMTY0LDggKzE2NCw2IEBAIGk5MTVfdm1hX2NvbXBhcmUoc3RydWN0IGk5 MTVfdm1hICp2bWEsCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHB0cmRpZmZfdCBjbXA7Cj4gwqAK PiAtwqDCoMKgwqDCoMKgwqBHRU1fQlVHX09OKHZpZXcgJiYgIWk5MTVfaXNfZ2d0dF9vcl9kcHQo dm0pKTsKPiAtCj4gwqDCoMKgwqDCoMKgwqDCoGNtcCA9IHB0cmRpZmYodm1hLT52bSwgdm0pOwo+ IMKgwqDCoMKgwqDCoMKgwqBpZiAoY21wKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIGNtcDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92 bWFfdHlwZXMuaAo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWFfdHlwZXMuaAo+IGlu ZGV4IGJlNmUwMjhjM2I1Ny4uYjZkMTc5YmRiZmEwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfdm1hX3R5cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3ZtYV90eXBlcy5oCj4gQEAgLTI4OSw2ICsyODksMTQgQEAgc3RydWN0IGk5MTVfdm1hIHsK PiDCoMKgwqDCoMKgwqDCoMKgLyoqIFRoaXMgb2JqZWN0J3MgcGxhY2Ugb24gdGhlIGFjdGl2ZS9p bmFjdGl2ZSBsaXN0cyAqLwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFkIHZtX2xp bms7Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFkIHZtX2JpbmRfbGluazsg LyogTGluayBpbiBwZXJzaXN0ZW50IFZNQSBsaXN0Cj4gKi8KPiArCj4gK8KgwqDCoMKgwqDCoMKg LyoqIEludGVydmFsIHRyZWUgc3RydWN0dXJlcyBmb3IgcGVyc2lzdGVudCB2bWEgKi8KClByb3Bl ciBrZXJuZWxkb2MuCgo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByYl9ub2RlIHJiOwo+ICvCoMKg wqDCoMKgwqDCoHU2NCBzdGFydDsKPiArwqDCoMKgwqDCoMKgwqB1NjQgbGFzdDsKPiArwqDCoMKg wqDCoMKgwqB1NjQgX19zdWJ0cmVlX2xhc3Q7Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg bGlzdF9oZWFkIG9ial9saW5rOyAvKiBMaW5rIGluIHRoZSBvYmplY3QncyBWTUEgbGlzdAo+ICov Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCByYl9ub2RlIG9ial9ub2RlOwo+IMKgwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgaGxpc3Rfbm9kZSBvYmpfaGFzaDsKClRoYW5rcywKVGhvbWFzCgo=