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 8E750C7EE23 for ; Tue, 9 May 2023 15:17:51 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0EF5710E3A6; Tue, 9 May 2023 15:17:51 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7DE9310E39A for ; Tue, 9 May 2023 15:17:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683645468; x=1715181468; h=message-id:subject:from:to:date:in-reply-to:references: content-transfer-encoding:mime-version; bh=lDhq3UT9RDx3rNaRdageGKO0QvoFttQRLz/lXCffBHU=; b=lHFrgukqgWAPN1q5AK0TRF5Q6ppKM19HL4YymM8mgakDof1bT2kLjQ05 3UZ55YEaxvoEhirdif/aX5fDQLmOkN/slotAi/VWmlihRppflcudPIThm XRtcUpBs7IsrrUN3vw/TKe0nZRrB+LIEmahV0H7P9/as/+ca2QZuYRVqn 2MWL0WZ6UgcFcwBKJpnoS/O9WbKzK+2MfkS+ppKY06VhbEl9Oz4fRhJAG bBnme823bUHesmjWg0H5c74ZiFoi7wHZE3vGIHzIFxqOc24RXQ0G99EFh 5XbPysFinVILLMpeMVTwZkbNosZ2uVj/OfGs9AgOh8OfILzNsiZx/8Ys8 Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="415527350" X-IronPort-AV: E=Sophos;i="5.99,262,1677571200"; d="scan'208";a="415527350" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 May 2023 08:17:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="763885096" X-IronPort-AV: E=Sophos;i="5.99,262,1677571200"; d="scan'208";a="763885096" Received: from jparkkin-mobl.ger.corp.intel.com (HELO [10.249.254.236]) ([10.249.254.236]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 May 2023 08:17:45 -0700 Message-ID: <243e0fe8fc88253728f991ade5fe12f0423f27f7.camel@linux.intel.com> From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Matthew Brost , intel-xe@lists.freedesktop.org Date: Tue, 09 May 2023 17:17:22 +0200 In-Reply-To: <20230502001727.3211096-18-matthew.brost@intel.com> References: <20230502001727.3211096-1-matthew.brost@intel.com> <20230502001727.3211096-18-matthew.brost@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.46.4 (3.46.4-1.fc37) MIME-Version: 1.0 Subject: Re: [Intel-xe] [PATCH v2 17/31] drm/xe: NULL binding implementation X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" T24gTW9uLCAyMDIzLTA1LTAxIGF0IDE3OjE3IC0wNzAwLCBNYXR0aGV3IEJyb3N0IHdyb3RlOgo+ IEFkZCB1QVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmb3IgTlVMTCBiaW5kaW5ncy4gQSBOVUxMIGJp bmRpbmcgaXMKPiBkZWZpbmVkCj4gYXMgd3JpdGVzIGRyb3BwZWQgYW5kIHJlYWQgemVyby4gQSBz aW5nbGUgYml0IGluIHRoZSB1QVBJIGhhcyBiZWVuCj4gYWRkZWQKPiB3aGljaCByZXN1bHRzIGlu IGEgc2luZ2xlIGJpdCBpbiB0aGUgUFRFcyBiZWluZyBzZXQuCj4gCj4gTlVMTCBiaW5kaW5ncyBh cmUgaW5kZW5kZWQgdG8gYmUgdXNlZCB0byBpbXBsZW1lbnQgVksgc3BhcnNlCj4gYmluZGluZ3Mu Cj4gCj4gU2lnbmVkLW9mZi1ieTogTWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9zdEBpbnRlbC5j b20+Cj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfYm8uaMKgwqDCoMKgwqDCoMKgwqDC oMKgIHzCoCAxICsKPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjLmPCoMKgwqDCoMKgwqDC oMKgIHzCoCAyICsKPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF9wYWdlZmF1bHQuYyB8wqAg NCArLQo+IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmPCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 IDc3ICsrKysrKysrKysrKysrKystLS0tLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfdm0u Y8KgwqDCoMKgwqDCoMKgwqDCoMKgIHwgOTIgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KPiAt LQo+IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmjCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDEw ICsrKwo+IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtX21hZHZpc2UuY8KgwqAgfMKgIDIgKy0K PiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV90eXBlcy5owqDCoMKgwqAgfMKgIDMgKwo+IMKg aW5jbHVkZS91YXBpL2RybS94ZV9kcm0uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDggKysr Cj4gwqA5IGZpbGVzIGNoYW5nZWQsIDE0NCBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkK PiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2JvLmggYi9kcml2ZXJzL2dw dS9kcm0veGUveGVfYm8uaAo+IGluZGV4IDI1NDU3YjNjNzU3Yi4uODEwNTFmNDU2ODc0IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9iby5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3hlL3hlX2JvLmgKPiBAQCAtNTYsNiArNTYsNyBAQAo+IMKgI2RlZmluZSBYRV9QREVfSVBT XzY0S8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVRfVUxMKDExKQo+IMKgCj4g wqAjZGVmaW5lIFhFX0dHVFRfUFRFX0xNwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oEJJVF9VTEwoMSkKPiArI2RlZmluZSBYRV9QVEVfTlVMTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBCSVRfVUxMKDkpCgpUaGlzIGxvb2tzIGxpa2Ugc29tZXRoaW5nIHdl IHdhbnQgdG8gZW5jb2RlIGluIHRoZSBQUEdUVCBQVEUsIChXZQpzaG91bGQgcmVhbGx5IG1vdmUg dGhvc2Ugb3V0IHRvIGFub3RoZXIgaGVhZGVyKSxyYXRoZXIgdGhhbiBhIGZsYWcgd2UKd2FudCB0 byBwYXNzIGFyb3VuZCBpbiB0aGUgdm0gY29kZS4gU28gcGVyaGFwcyBYRV9QUEdUVF9QVEVfTlVM TCBkbwpmb2xsb3cgdGhlIG5hbWluZyBjb252ZW50aW9uLgoKCj4gwqAjZGVmaW5lIFhFX1VTTV9Q UEdUVF9QVEVfQUXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVRfVUxMKDEwKQo+IMKgI2RlZmlu ZSBYRV9QUEdUVF9QVEVfTE3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBCSVRfVUxMKDExKQo+IMKgI2RlZmluZSBYRV9QREVfNjRLwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUX1VMTCg2KQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0veGUveGVfZXhlYy5jCj4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlYy5j Cj4gaW5kZXggOTBjNDZkMDkyNzM3Li42OGY4NzZhZmQxM2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3hlL3hlX2V4ZWMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVj LmMKPiBAQCAtMTE2LDYgKzExNiw4IEBAIHN0YXRpYyBpbnQgeGVfZXhlY19iZWdpbihzdHJ1Y3Qg eGVfZW5naW5lICplLAo+IHN0cnVjdCB3d19hY3F1aXJlX2N0eCAqd3csCj4gwqDCoMKgwqDCoMKg wqDCoCAqIHRvIGEgbG9jYXRpb24gd2hlcmUgdGhlIEdQVSBjYW4gYWNjZXNzIGl0KS4KPiDCoMKg wqDCoMKgwqDCoMKgICovCj4gwqDCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnkodm1h LCAmdm0tPnJlYmluZF9saXN0LCByZWJpbmRfbGluaykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBYRV9CVUdfT04oeGVfdm1hX2lzX251bGwodm1hKSk7Cj4gKwo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHhlX3ZtYV9pc191c2VycHRyKHZtYSkpCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4g wqAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0X3BhZ2VmYXVsdC5jCj4g Yi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3RfcGFnZWZhdWx0LmMKPiBpbmRleCBmN2EwNjYwOTBh MTMuLmNmZmZlMzM5OGZlNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Rf cGFnZWZhdWx0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3RfcGFnZWZhdWx0LmMK PiBAQCAtNTI2LDggKzUyNiw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2FjYyhzdHJ1Y3QgeGVfZ3Qg Kmd0LCBzdHJ1Y3QKPiBhY2MgKmFjYykKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqB0cmFjZV94ZV92 bWFfYWNjKHZtYSk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAvKiBVc2VycHRyIGNhbid0IGJlIG1p Z3JhdGVkLCBub3RoaW5nIHRvIGRvICovCj4gLcKgwqDCoMKgwqDCoMKgaWYgKHhlX3ZtYV9pc191 c2VycHRyKHZtYSkpCj4gK8KgwqDCoMKgwqDCoMKgLyogVXNlcnB0ciBvciBudWxsIGNhbid0IGJl IG1pZ3JhdGVkLCBub3RoaW5nIHRvIGRvICovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHhlX3ZtYV9o YXNfbm9fYm8odm1hKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gdW5s b2NrX3ZtOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoC8qIExvY2sgVk0gYW5kIEJPcyBkbWEtcmVz diAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYyBiL2RyaXZlcnMv Z3B1L2RybS94ZS94ZV9wdC5jCj4gaW5kZXggMmI1YjA1YThhMDg0Li5iNGVkYjc1MWJmYmIgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0veGUveGVfcHQuYwo+IEBAIC04Miw3ICs4Miw5IEBAIHU2NCBnZW44X3BkZV9lbmNvZGUo c3RydWN0IHhlX2JvICpibywgdTY0Cj4gYm9fb2Zmc2V0LAo+IMKgc3RhdGljIGRtYV9hZGRyX3Qg dm1hX2FkZHIoc3RydWN0IHhlX3ZtYSAqdm1hLCB1NjQgb2Zmc2V0LAo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHBhZ2Vfc2l6ZSwg Ym9vbCAqaXNfdnJhbSkKPiDCoHsKPiAtwqDCoMKgwqDCoMKgwqBpZiAoeGVfdm1hX2lzX3VzZXJw dHIodm1hKSkgewo+ICvCoMKgwqDCoMKgwqDCoGlmICh4ZV92bWFfaXNfbnVsbCh2bWEpKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICvCoMKgwqDCoMKgwqDC oH0gZWxzZSBpZiAoeGVfdm1hX2lzX3VzZXJwdHIodm1hKSkgewo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3Jlc19jdXJzb3IgY3VyOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgdTY0IHBhZ2U7Cj4gwqAKPiBAQCAtNTYzLDYgKzU2NSwxMCBAQCBz dGF0aWMgYm9vbCB4ZV9wdF9odWdlcHRlX3Bvc3NpYmxlKHU2NCBhZGRyLCB1NjQKPiBuZXh0LCB1 bnNpZ25lZCBpbnQgbGV2ZWwsCj4gwqDCoMKgwqDCoMKgwqDCoGlmIChuZXh0IC0geGVfd2Fsay0+ dmFfY3Vyc19zdGFydCA+IHhlX3dhbGstPmN1cnMtPnNpemUpCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqAvKiBudWxs IFZNQSdzIGRvIG5vdCBoYXZlIGRtYSBhZHJlc3NlcyAqLwo+ICvCoMKgwqDCoMKgwqDCoGlmICh4 ZV93YWxrLT5wdGVfZmxhZ3MgJiBYRV9QVEVfTlVMTCkKCkJ1dCBoZXJlIGl0IGlzIHVzZWQgYXMg YSBmbGFnIGRldGVybWluaW5nIFBURSBzZXR1cC4gVGhlc2UgYXJlCmRpZmZlcmVudCwgc2VlIHRo ZSBkb2N1bWVudGF0aW9uIG9uIHB0ZV9mbGFncy4gTG9vayBmb3IgWEVfUEFHRV9SVyBhbmQKWEVf UFRFX1JFQURfT05MWSBmb3IgYSBzaW1pbGFyIGRpZmZlcmVuY2UuIE9uZSBpcyBhIGJpdCBpbiB0 aGUgUFRFCndoaWNoIG1heSB2YXJ5IGFjcm9zcyBoYXJkd2FyZSwgdGhlIG90aGVyIG9uZSBpcyBh IGZsYWcgaGFuZGVkIHRvIHRoZQpwYWdlLXRhYmxlIHdhbGtlciBpbmRpY2F0aW5nIGEgTlVMTCBi aW5kaW5nLgoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4g Kwo+IMKgwqDCoMKgwqDCoMKgwqAvKiBJcyB0aGUgRE1BIGFkZHJlc3MgaHVnZSBQVEUgc2l6ZSBh bGlnbmVkPyAqLwo+IMKgwqDCoMKgwqDCoMKgwqBzaXplID0gbmV4dCAtIGFkZHI7Cj4gwqDCoMKg wqDCoMKgwqDCoGRtYSA9IGFkZHIgLSB4ZV93YWxrLT52YV9jdXJzX3N0YXJ0ICsgeGVfcmVzX2Rt YSh4ZV93YWxrLQo+ID5jdXJzKTsKPiBAQCAtNTg1LDYgKzU5MSwxMCBAQCB4ZV9wdF9zY2FuXzY0 Syh1NjQgYWRkciwgdTY0IG5leHQsIHN0cnVjdAo+IHhlX3B0X3N0YWdlX2JpbmRfd2FsayAqeGVf d2FsaykKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKG5leHQgPiB4ZV93YWxrLT5sMF9lbmRfYWRkcikK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiDCoAo+ICvC oMKgwqDCoMKgwqDCoC8qIG51bGwgVk1BJ3MgZG8gbm90IGhhdmUgZG1hIGFkcmVzc2VzICovCj4g K8KgwqDCoMKgwqDCoMKgaWYgKHhlX3dhbGstPnB0ZV9mbGFncyAmIFhFX1BURV9OVUxMKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiArCj4gwqDCoMKgwqDC oMKgwqDCoHhlX3Jlc19uZXh0KCZjdXJzLCBhZGRyIC0geGVfd2Fsay0+dmFfY3Vyc19zdGFydCk7 Cj4gwqDCoMKgwqDCoMKgwqDCoGZvciAoOyBhZGRyIDwgbmV4dDsgYWRkciArPSBTWl82NEspIHsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghSVNfQUxJR05FRCh4ZV9yZXNf ZG1hKCZjdXJzKSwgU1pfNjRLKSB8fAo+IGN1cnMuc2l6ZSA8IFNaXzY0SykKPiBAQCAtNjMwLDE3 ICs2NDAsMzQgQEAgeGVfcHRfc3RhZ2VfYmluZF9lbnRyeShzdHJ1Y3QgZHJtX3B0ICpwYXJlbnQs Cj4gcGdvZmZfdCBvZmZzZXQsCj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9wdCAqeGVfY2hp bGQ7Cj4gwqDCoMKgwqDCoMKgwqDCoGJvb2wgY292ZXJzOwo+IMKgwqDCoMKgwqDCoMKgwqBpbnQg cmV0ID0gMDsKPiAtwqDCoMKgwqDCoMKgwqB1NjQgcHRlOwo+ICvCoMKgwqDCoMKgwqDCoHU2NCBw dGUgPSAwOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoC8qIElzIHRoaXMgYSBsZWFmIGVudHJ5ID8q Lwo+IMKgwqDCoMKgwqDCoMKgwqBpZiAobGV2ZWwgPT0gMCB8fCB4ZV9wdF9odWdlcHRlX3Bvc3Np YmxlKGFkZHIsIG5leHQsIGxldmVsLAo+IHhlX3dhbGspKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfcmVzX2N1cnNvciAqY3VycyA9IHhlX3dhbGstPmN1cnM7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgbnVsbCA9IHhlX3dhbGstPnB0 ZV9mbGFncyAmIFhFX1BURV9OVUxMOwoKQWx0aG91Z2ggbG93ZXItY2FzZSwgdGhpcyBtaWdodCBj b25mdXNlIGNvZGUgcmVhZGVycyBoYXZpbmcgaGFkIHRvbwpsaXR0bGUgY29mZmVlLiBDb3VsZCB3 ZSB1c2UgYW5vdGhlciBuYW1lIGluc3RlYWQgb2YgbnVsbD8gbnVsbF92bWE/Cgo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBYRV9XQVJOX09OKHhlX3dhbGstPnZhX2N1cnNf c3RhcnQgIT0gYWRkcik7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHRl ID0gX19nZW44X3B0ZV9lbmNvZGUoeGVfcmVzX2RtYShjdXJzKSArIHhlX3dhbGstCj4gPmRtYV9v ZmZzZXQsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3dhbGstPmNhY2hlLCB4ZV93YWxrLQo+ ID5wdGVfZmxhZ3MsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldmVsKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG51bGwpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0ZSB8PSBYRV9QQUdFX1BSRVNFTlQgfCBYRV9QQUdF X1JXOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmICh1bmxpa2VseSh4ZV93YWxrLT5wdGVfZmxhZ3MgJgo+IFhFX1BURV9SRUFEX09OTFkpKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHB0ZSAmPSB+WEVfUEFHRV9SVzsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAobGV2ZWwgPT0gMSkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdGUgfD0gWEVf UERFX1BTXzJNOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZWxzZSBpZiAobGV2ZWwgPT0gMikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdGUgfD0gWEVfUERQRV9QU18xRzsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdGUgfD0g WEVfUFRFX05VTEw7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdGUgPSBfX2dl bjhfcHRlX2VuY29kZSh4ZV9yZXNfZG1hKGN1cnMpICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHhlX3dhbGstPmRtYV9vZmZzZXQsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV93YWxrLT5jYWNoZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHhlX3dhbGstPnB0ZV9mbGFncywKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldmVsKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfQoKQWdhaW4sIGl0IGxvb2tzIGxpa2UgWEVfUFBHVFRfUFRFX05VTEwgc2hvdWxkIGp1 c3QgYmUgb3InZWQgdG8KQGRlZmF1bHRfcHRlIGF0IHRoZSB3YWxrIHN0YXJ0LCBza2lwcGluZyB0 aGlzIGNvbmRpdGlvbmFsPwoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0ZSB8 PSB4ZV93YWxrLT5kZWZhdWx0X3B0ZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgLyoKPiBAQCAtNjU4LDcgKzY4NSw4IEBAIHhlX3B0X3N0YWdlX2JpbmRfZW50cnkoc3Ry dWN0IGRybV9wdCAqcGFyZW50LAo+IHBnb2ZmX3Qgb2Zmc2V0LAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKHVubGlrZWx5KHJldCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiDCoAo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9yZXNfbmV4dChjdXJzLCBuZXh0IC0gYWRkcik7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghbnVsbCkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3Jlc19uZXh0KGN1cnMsIG5leHQgLSBh ZGRyKTsKCgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfd2Fsay0+dmFfY3Vy c19zdGFydCA9IG5leHQ7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqYWN0aW9u ID0gQUNUSU9OX0NPTlRJTlVFOwo+IMKgCj4gQEAgLTc1MSw3ICs3NzksOCBAQCB4ZV9wdF9zdGFn ZV9iaW5kKHN0cnVjdCB4ZV9ndCAqZ3QsIHN0cnVjdCB4ZV92bWEKPiAqdm1hLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmd0ID0gZ3QsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAuY3VycyA9ICZjdXJzLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLnZhX2N1cnNfc3RhcnQgPSB4ZV92bWFfc3RhcnQodm1hKSwKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLnB0ZV9mbGFncyA9IHhlX3ZtYV9yZWFkX29ubHkodm1hKSA/IFhFX1BU RV9SRUFEX09OTFkKPiA6IDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5wdGVf ZmxhZ3MgPSB4ZV92bWFfcmVhZF9vbmx5KHZtYSkgPyBYRV9QVEVfUkVBRF9PTkxZCj4gOiAwIHwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3ZtYV9p c19udWxsKHZtYSkgPyBYRV9QVEVfTlVMTCA6IDAsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAud3VwZC5lbnRyaWVzID0gZW50cmllcywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC5uZWVkc182NEsgPSAoeGVfdm1hX3ZtKHZtYSktPmZsYWdzICYKPiBYRV9WTV9G TEFHU182NEspICYmCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaXNfdnJhbSwKPiBAQCAtNzY5LDIzICs3OTgsMjggQEAgeGVfcHRfc3RhZ2VfYmluZChz dHJ1Y3QgeGVfZ3QgKmd0LCBzdHJ1Y3QKPiB4ZV92bWEgKnZtYSwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBndF90b194ZShndCktPm1lbS52cmFtLmlv X3N0YXJ0Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfd2Fsay5jYWNoZSA9 IFhFX0NBQ0hFX1dCOwo+IMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoIXhlX3ZtYV9pc191c2VycHRyKHZtYSkgJiYgYm8tPmZsYWdz ICYKPiBYRV9CT19TQ0FOT1VUX0JJVCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCF4ZV92bWFfaGFzX25vX2JvKHZtYSkgJiYgYm8tPmZsYWdzICYKPiBYRV9CT19TQ0FOT1VU X0JJVCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4 ZV93YWxrLmNhY2hlID0gWEVfQ0FDSEVfV1Q7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBlbHNlCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgeGVfd2Fsay5jYWNoZSA9IFhFX0NBQ0hFX1dCOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gLcKg wqDCoMKgwqDCoMKgaWYgKCF4ZV92bWFfaXNfdXNlcnB0cih2bWEpICYmIHhlX2JvX2lzX3N0b2xl bihibykpCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCF4ZV92bWFfaGFzX25vX2JvKHZtYSkgJiYgeGVf Ym9faXNfc3RvbGVuKGJvKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3dh bGsuZG1hX29mZnNldCA9Cj4geGVfdHRtX3N0b2xlbl9ncHVfb2Zmc2V0KHhlX2JvX2RldmljZShi bykpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHhlX2JvX2Fzc2VydF9oZWxkKGJvKTsKPiAtwqDC oMKgwqDCoMKgwqBpZiAoeGVfdm1hX2lzX3VzZXJwdHIodm1hKSkKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgeGVfcmVzX2ZpcnN0X3NnKHZtYS0+dXNlcnB0ci5zZywgMCwgeGVfdm1h X3NpemUodm1hKSwKPiAmY3Vycyk7Cj4gLcKgwqDCoMKgwqDCoMKgZWxzZSBpZiAoeGVfYm9faXNf dnJhbShibykgfHwgeGVfYm9faXNfc3RvbGVuKGJvKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgeGVfcmVzX2ZpcnN0KGJvLT50dG0ucmVzb3VyY2UsIHhlX3ZtYV9ib19vZmZzZXQo dm1hKSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHhlX3ZtYV9zaXplKHZtYSksICZjdXJzKTsKPiAtwqDCoMKgwqDCoMKgwqBlbHNlCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3Jlc19maXJzdF9zZyh4ZV9ib19nZXRf c2coYm8pLAo+IHhlX3ZtYV9ib19vZmZzZXQodm1hKSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV92bWFfc2l6ZSh2bWEp LCAmY3Vycyk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCF4ZV92bWFfaXNfbnVsbCh2bWEpKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4ZV92bWFfaXNfdXNlcnB0cih2bWEp KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfcmVz X2ZpcnN0X3NnKHZtYS0+dXNlcnB0ci5zZywgMCwKPiB4ZV92bWFfc2l6ZSh2bWEpLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAmY3Vycyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGVsc2UgaWYgKHhlX2JvX2lzX3ZyYW0oYm8pIHx8IHhlX2JvX2lzX3N0b2xlbihibykpCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9yZXNfZmlyc3Qo Ym8tPnR0bS5yZXNvdXJjZSwKPiB4ZV92bWFfYm9fb2Zmc2V0KHZtYSksCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgeGVfdm1hX3NpemUodm1hKSwgJmN1cnMpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB4ZV9yZXNfZmlyc3Rfc2coeGVfYm9fZ2V0X3NnKGJvKSwKPiB4ZV92bWFfYm9fb2Zmc2V0KHZt YSksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3ZtYV9zaXplKHZtYSksICZjdXJzKTsKPiAr wqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj dXJzLnNpemUgPSB4ZV92bWFfc2l6ZSh2bWEpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IMKg wqDCoMKgwqDCoMKgwqByZXQgPSBkcm1fcHRfd2Fsa19yYW5nZSgmcHQtPmRybSwgcHQtPmxldmVs LAo+IHhlX3ZtYV9zdGFydCh2bWEpLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV92bWFfZW5kKHZtYSksICZ4ZV93YWxr LmRybSk7Cj4gQEAgLTk3OSw3ICsxMDEzLDcgQEAgc3RhdGljIHZvaWQgeGVfcHRfY29tbWl0X2xv Y2tzX2Fzc2VydChzdHJ1Y3QKPiB4ZV92bWEgKnZtYSkKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBp ZiAoeGVfdm1hX2lzX3VzZXJwdHIodm1hKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZCgmdm0tPnVzZXJwdHIubm90aWZpZXJfbG9jayk7 Cj4gLcKgwqDCoMKgwqDCoMKgZWxzZQo+ICvCoMKgwqDCoMKgwqDCoGVsc2UgaWYgKCF4ZV92bWFf aXNfbnVsbCh2bWEpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jlc3Zf YXNzZXJ0X2hlbGQoeGVfdm1hX2JvKHZtYSktPnR0bS5iYXNlLnJlc3YpOwoKV2l0aG91dCBsb29r aW5nIGF0IHRoZSBjb2RlLCBJSVJDIHRoZXJlIGlzIGEgdm1hLXJhbmdlLXNwZWNpZmljIHJlc3YK bmVlZGVkIHRvIGJlIGhlbGQgaGVyZS4gQ291bGQgd2UgYXNzZXJ0IHRoZSB2bSByZXN2IGlzIGhl bGQgZm9yIE5VTEwKdm1hcyBzaW1pbGFyIHRvIHVzZXJwdHJzPwoKPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqBkbWFfcmVzdl9hc3NlcnRfaGVsZCgmdm0tPnJlc3YpOwo+IEBAIC0xMjgzLDcgKzEzMTcs OCBAQCBfX3hlX3B0X2JpbmRfdm1hKHN0cnVjdCB4ZV9ndCAqZ3QsIHN0cnVjdAo+IHhlX3ZtYSAq dm1hLCBzdHJ1Y3QgeGVfZW5naW5lICplLAo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfdm1f cGd0YWJsZV91cGRhdGUgZW50cmllc1tYRV9WTV9NQVhfTEVWRUwgKiAyICsgMV07Cj4gwqDCoMKg wqDCoMKgwqDCoHN0cnVjdCB4ZV9wdF9taWdyYXRlX3B0X3VwZGF0ZSBiaW5kX3B0X3VwZGF0ZSA9 IHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5iYXNlID0gewo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm9wcyA9IHhlX3ZtYV9pc191 c2VycHRyKHZtYSkgPwo+ICZ1c2VycHRyX2JpbmRfb3BzIDogJmJpbmRfb3BzLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm9wcyA9IHhlX3ZtYV9pc191 c2VycHRyKHZtYSkgPwo+ICZ1c2VycHRyX2JpbmRfb3BzIDoKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAmYmluZF9vcHMsCgpV bnJlbGF0ZWQgY2hhbmdlLgoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAudm1hID0gdm1hLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5iaW5kID0gdHJ1ZSwKPiBAQCAt MTM0OCw3ICsxMzgzLDcgQEAgX194ZV9wdF9iaW5kX3ZtYShzdHJ1Y3QgeGVfZ3QgKmd0LCBzdHJ1 Y3QKPiB4ZV92bWEgKnZtYSwgc3RydWN0IHhlX2VuZ2luZSAqZSwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBETUFf UkVTVl9VU0FHRV9LRVJORUwgOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQ KTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXhlX3ZtYV9pc191 c2VycHRyKHZtYSkgJiYgIXhlX3ZtYV9ibyh2bWEpLT52bSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKCF4ZV92bWFfaGFzX25vX2JvKHZtYSkgJiYgIXhlX3ZtYV9ibyh2bWEp LT52bSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk bWFfcmVzdl9hZGRfZmVuY2UoeGVfdm1hX2JvKHZtYSktCj4gPnR0bS5iYXNlLnJlc3YsIGZlbmNl LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBETUFfUkVTVl9VU0FHRV9CT09LS0VFUCk7 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9wdF9jb21taXRfYmluZCh2bWEs IGVudHJpZXMsIG51bV9lbnRyaWVzLCByZWJpbmQsCj4gQEAgLTE2NjcsNyArMTcwMiw3IEBAIF9f eGVfcHRfdW5iaW5kX3ZtYShzdHJ1Y3QgeGVfZ3QgKmd0LCBzdHJ1Y3QKPiB4ZV92bWEgKnZtYSwg c3RydWN0IHhlX2VuZ2luZSAqZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBETUFfUkVTVl9VU0FHRV9CT09LS0VF UCk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFRoaXMgZmVuY2Ug d2lsbCBiZSBpbnN0YWxsZWQgYnkgY2FsbGVyIHdoZW4gZG9pbmcKPiBldmljdGlvbiAqLwo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXhlX3ZtYV9pc191c2VycHRyKHZtYSkg JiYgIXhlX3ZtYV9ibyh2bWEpLT52bSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCF4ZV92bWFfaGFzX25vX2JvKHZtYSkgJiYgIXhlX3ZtYV9ibyh2bWEpLT52bSkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfcmVzdl9hZGRf ZmVuY2UoeGVfdm1hX2JvKHZtYSktCj4gPnR0bS5iYXNlLnJlc3YsIGZlbmNlLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBETUFfUkVTVl9VU0FHRV9CT09LS0VFUCk7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9wdF9jb21taXRfdW5iaW5kKHZtYSwgZW50cmllcywg bnVtX2VudHJpZXMsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jIGIv ZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMKPiBpbmRleCBmMzYwODg2NWUyNTkuLmE0NmY0NGFi MjU0NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jCj4gQEAgLTYwLDYgKzYwLDcgQEAgaW50IHhlX3ZtYV91 c2VycHRyX3Bpbl9wYWdlcyhzdHJ1Y3QgeGVfdm1hICp2bWEpCj4gwqAKPiDCoMKgwqDCoMKgwqDC oMKgbG9ja2RlcF9hc3NlcnRfaGVsZCgmdm0tPmxvY2spOwo+IMKgwqDCoMKgwqDCoMKgwqBYRV9C VUdfT04oIXhlX3ZtYV9pc191c2VycHRyKHZtYSkpOwo+ICvCoMKgwqDCoMKgwqDCoFhFX0JVR19P Tih4ZV92bWFfaXNfbnVsbCh2bWEpKTsKCklzbid0IHRoaXMgY2F1Z2h0IGJ5IHRoZSBCVUdfT04g anVzdCBhYm92ZT8KCj4gwqByZXRyeToKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKHZtYS0+Z3B1dmEu ZmxhZ3MgJiBYRV9WTUFfREVTVFJPWUVEKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIDA7Cj4gQEAgLTU4MSw3ICs1ODIsNyBAQCBzdGF0aWMgdm9pZCBwcmVlbXB0X3Jl YmluZF93b3JrX2Z1bmMoc3RydWN0Cj4gd29ya19zdHJ1Y3QgKncpCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dF91bmxvY2s7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKg bGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZ2bS0+cmViaW5kX2xpc3QsIHJlYmluZF9saW5rKSB7 Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4ZV92bWFfaXNfdXNlcnB0cih2 bWEpIHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4ZV92bWFfaGFzX25v X2JvKHZtYSkgfHwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2bWEt PmdwdXZhLmZsYWdzICYgWEVfVk1BX0RFU1RST1lFRCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPiDCoAo+IEBAIC04MTMsNyArODE0 LDcgQEAgc3RhdGljIHN0cnVjdCB4ZV92bWEgKnhlX3ZtYV9jcmVhdGUoc3RydWN0IHhlX3ZtCj4g KnZtLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHhlX2JvICpibywKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2 NCBib19vZmZzZXRfb3JfdXNlcnB0ciwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBzdGFydCwgdTY0IGVu ZCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYm9vbCByZWFkX29ubHksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJvb2wgcmVh ZF9vbmx5LCBib29sIG51bGwsCgpBZ2FpbiwgdmFyaWFibGUgbmFtZS4KCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1NjQgZ3RfbWFzaykKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3ZtYSAqdm1h Owo+IEBAIC04NDMsNiArODQ0LDggQEAgc3RhdGljIHN0cnVjdCB4ZV92bWEgKnhlX3ZtYV9jcmVh dGUoc3RydWN0IHhlX3ZtCj4gKnZtLAo+IMKgwqDCoMKgwqDCoMKgwqB2bWEtPmdwdXZhLnZhLnJh bmdlID0gZW5kIC0gc3RhcnQgKyAxOwo+IMKgwqDCoMKgwqDCoMKgwqBpZiAocmVhZF9vbmx5KQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm1hLT5ncHV2YS5mbGFncyB8PSBYRV9W TUFfUkVBRF9PTkxZOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChudWxsKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB2bWEtPmdwdXZhLmZsYWdzIHw9IFhFX1ZNQV9OVUxMOwo+IMKgCj4g wqDCoMKgwqDCoMKgwqDCoGlmIChndF9tYXNrKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB2bWEtPmd0X21hc2sgPSBndF9tYXNrOwo+IEBAIC04NjIsMjMgKzg2NSwyNiBAQCBz dGF0aWMgc3RydWN0IHhlX3ZtYSAqeGVfdm1hX2NyZWF0ZShzdHJ1Y3QKPiB4ZV92bSAqdm0sCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2bWEtPmdwdXZhLmdlbS5vYmogPSAmYm8t PnR0bS5iYXNlOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm1hLT5ncHV2YS5n ZW0ub2Zmc2V0ID0gYm9fb2Zmc2V0X29yX3VzZXJwdHI7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluaygmdm1hLT5ncHV2YSk7Cj4gLcKgwqDCoMKgwqDCoMKg fSBlbHNlIC8qIHVzZXJwdHIgKi8gewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1 NjQgc2l6ZSA9IGVuZCAtIHN0YXJ0ICsgMTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaW50IGVycjsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZtYS0+Z3B1 dmEuZ2VtLm9mZnNldCA9IGJvX29mZnNldF9vcl91c2VycHRyOwo+ICvCoMKgwqDCoMKgwqDCoH0g ZWxzZSAvKiB1c2VycHRyIG9yIG51bGwgKi8gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoIW51bGwpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHU2NCBzaXplID0gZW5kIC0gc3RhcnQgKyAxOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50IGVycjsKPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2bWEtPmdwdXZhLmdlbS5vZmZzZXQg PSBib19vZmZzZXRfb3JfdXNlcnB0cjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGVyciA9IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNlcnQoJnZtYS0K PiA+dXNlcnB0ci5ub3RpZmllciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN1cnJlbnQtCj4gPm1tLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiB4ZV92bWFfdXNl cnB0cih2bWEpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc2l6ZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gJnZtYV91c2VycHRyX25vdGlmaWVyX29wcyk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJyKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKga2ZyZWUodm1hKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2bWEgPSBFUlJfUFRSKGVycik7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHZtYTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH0KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSBtbXVfaW50 ZXJ2YWxfbm90aWZpZXJfaW5zZXJ0KCZ2bWEtCj4gPnVzZXJwdHIubm90aWZpZXIsCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN1cnJlbnQtPm1tLAo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IHhlX3ZtYV91c2VycHRyKHZt YSksIHNpemUsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4g JnZtYV91c2VycHRyX25vdGlmaWVyX29wcyk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmIChlcnIpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGtmcmVlKHZtYSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB2bWEgPSBFUlJfUFRSKGVycik7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdm1hOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm1hLT51c2VycHRyLm5vdGlmaWVyX3NlcSA9IExP TkdfTUFYOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZtYS0+dXNlcnB0ci5ub3RpZmllcl9zZXEgPSBMT05H X01BWDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3ZtX2dldCh2bSk7Cj4g wqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IEBAIC05MTYsNiArOTIyLDggQEAgc3RhdGljIHZvaWQg eGVfdm1hX2Rlc3Ryb3lfbGF0ZShzdHJ1Y3QgeGVfdm1hCj4gKnZtYSkKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bW11X2ludGVydmFsX25vdGlmaWVyX3JlbW92ZSgmdm1hLT51c2VycHRyLm5vdGlmaWVyKTsKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3ZtX3B1dCh2bSk7Cj4gK8KgwqDCoMKg wqDCoMKgfSBlbHNlIGlmICh4ZV92bWFfaXNfbnVsbCh2bWEpKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHhlX3ZtX3B1dCh2bSk7Cj4gwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9ib19wdXQoeGVfdm1hX2JvKHZt YSkpOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gQEAgLTk1NCw3ICs5NjIsNyBAQCBzdGF0aWMgdm9p ZCB4ZV92bWFfZGVzdHJveShzdHJ1Y3QgeGVfdm1hICp2bWEsCj4gc3RydWN0IGRtYV9mZW5jZSAq ZmVuY2UpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2RlbF9pbml0KCZ2 bWEtPnVzZXJwdHIuaW52YWxpZGF0ZV9saW5rKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNwaW5fdW5sb2NrKCZ2bS0+dXNlcnB0ci5pbnZhbGlkYXRlZF9sb2NrKTsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpc3RfZGVsKCZ2bWEtPnVzZXJwdHJfbGluayk7 Cj4gLcKgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYgKCF4 ZV92bWFfaXNfbnVsbCh2bWEpKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4 ZV9ib19hc3NlcnRfaGVsZCh4ZV92bWFfYm8odm1hKSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkcm1fZ3B1dmFfdW5saW5rKCZ2bWEtPmdwdXZhKTsKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmICgheGVfdm1hX2JvKHZtYSktPnZtKQo+IEBAIC0xMzA1LDcg KzEzMTMsNyBAQCB2b2lkIHhlX3ZtX2Nsb3NlX2FuZF9wdXQoc3RydWN0IHhlX3ZtICp2bSkKPiDC oMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2l0ZXJfZm9yX2VhY2goZ3B1dmEsIGl0KSB7Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2bWEgPSBncHV2YV90b192bWEoZ3B1dmEpOwo+ IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4ZV92bWFfaXNfdXNlcnB0 cih2bWEpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4ZV92bWFfaGFz X25vX2JvKHZtYSkpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkb3duX3JlYWQoJnZtLT51c2VycHRyLm5vdGlmaWVyX2xvY2spOwo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZtYS0+Z3B1dmEuZmxhZ3Mg fD0gWEVfVk1BX0RFU1RST1lFRDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB1cF9yZWFkKCZ2bS0+dXNlcnB0ci5ub3RpZmllcl9sb2NrKTsKPiBAQCAt MTMxNSw3ICsxMzIzLDcgQEAgdm9pZCB4ZV92bV9jbG9zZV9hbmRfcHV0KHN0cnVjdCB4ZV92bSAq dm0pCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfaXRlcl9yZW1v dmUoJml0KTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogZWFzeSBj YXNlLCByZW1vdmUgZnJvbSBWTUE/ICovCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmICh4ZV92bWFfaXNfdXNlcnB0cih2bWEpIHx8IHhlX3ZtYV9ibyh2bWEpLT52bSkgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoeGVfdm1hX2hhc19ub19ibyh2bWEpIHx8 IHhlX3ZtYV9ibyh2bWEpLT52bSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHhlX3ZtYV9kZXN0cm95KHZtYSwgTlVMTCk7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gQEAgLTE5NjQsNyArMTk3Miw3IEBAIHN0YXRpYyBp bnQgeGVfdm1fcHJlZmV0Y2goc3RydWN0IHhlX3ZtICp2bSwKPiBzdHJ1Y3QgeGVfdm1hICp2bWEs Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgWEVfQlVHX09OKHJlZ2lvbiA+IEFSUkFZX1NJWkUocmVn aW9uX3RvX21lbV90eXBlKSk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAoIXhlX3ZtYV9pc191 c2VycHRyKHZtYSkpIHsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXhlX3ZtYV9oYXNfbm9fYm8odm1h KSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0geGVfYm9fbWlncmF0 ZSh4ZV92bWFfYm8odm1hKSwKPiByZWdpb25fdG9fbWVtX3R5cGVbcmVnaW9uXSk7Cj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJyKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBlcnI7Cj4gQEAgLTIxNzAsNiArMjE3 OCw3IEBAIHZtX2JpbmRfaW9jdGxfb3BzX2NyZWF0ZShzdHJ1Y3QgeGVfdm0gKnZtLAo+IHN0cnVj dCB4ZV9ibyAqYm8sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9wZXJhdGlvbiAmCj4gWEVfVk1fQklORF9GTEFHX0lNTUVE SUFURTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBv cC0+bWFwLnJlYWRfb25seSA9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9wZXJhdGlvbiAmIFhFX1ZNX0JJTkRfRkxBR19S RUFET05MWTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG9wLT5tYXAubnVsbCA9IG9wZXJhdGlvbiAmCj4gWEVfVk1fQklORF9GTEFHX05VTEw7Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBicmVhazsKPiDCoMKgwqDCoMKgwqDCoMKgY2FzZSBYRV9WTV9CSU5EX09QX1VOTUFQ Ogo+IEBAIC0yMjI2LDcgKzIyMzUsNyBAQCB2bV9iaW5kX2lvY3RsX29wc19jcmVhdGUoc3RydWN0 IHhlX3ZtICp2bSwKPiBzdHJ1Y3QgeGVfYm8gKmJvLAo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgc3Ry dWN0IHhlX3ZtYSAqbmV3X3ZtYShzdHJ1Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QKPiBkcm1fZ3B1dmFf b3BfbWFwICpvcCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdTY0IGd0X21hc2ssIGJvb2wgcmVhZF9vbmx5KQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgZ3RfbWFz aywgYm9vbCByZWFkX29ubHksIGJvb2wgbnVsbCkKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IHhlX2JvICpibyA9IG9wLT5nZW0ub2JqID8gZ2VtX3RvX3hlX2JvKG9wLT5nZW0ub2JqKSA6 Cj4gTlVMTDsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3ZtYSAqdm1hOwo+IEBAIC0yMjQy LDcgKzIyNTEsNyBAQCBzdGF0aWMgc3RydWN0IHhlX3ZtYSAqbmV3X3ZtYShzdHJ1Y3QgeGVfdm0g KnZtLAo+IHN0cnVjdCBkcm1fZ3B1dmFfb3BfbWFwICpvcCwKPiDCoMKgwqDCoMKgwqDCoMKgfQo+ IMKgwqDCoMKgwqDCoMKgwqB2bWEgPSB4ZV92bWFfY3JlYXRlKHZtLCBibywgb3AtPmdlbS5vZmZz ZXQsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG9wLT52YS5hZGRyLCBvcC0+dmEuYWRkciArCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPnZhLnJhbmdlIC0gMSwgcmVhZF9vbmx5 LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG9wLT52YS5yYW5nZSAtIDEsIHJlYWRfb25seSwgbnVsbCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3RfbWFzayk7Cj4gwqDCoMKgwqDC oMKgwqDCoGlmIChibykKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX2JvX3Vu bG9jayhibywgJnd3KTsKPiBAQCAtMjI1NCw3ICsyMjYzLDcgQEAgc3RhdGljIHN0cnVjdCB4ZV92 bWEgKm5ld192bWEoc3RydWN0IHhlX3ZtICp2bSwKPiBzdHJ1Y3QgZHJtX2dwdXZhX29wX21hcCAq b3AsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVf dm1hX2Rlc3Ryb3kodm1hLCBOVUxMKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUihlcnIpOwo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgfQo+IC3CoMKgwqDCoMKgwqDCoH0gZWxzZSBpZighYm8tPnZtKSB7Cj4g K8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmKCF4ZV92bWFfaGFzX25vX2JvKHZtYSkgJiYgIWJvLT52 bSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm1faW5zZXJ0X2V4dG9iaih2 bSwgdm1hKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IGFkZF9wcmVl bXB0X2ZlbmNlcyh2bSwgYm8pOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KGVycikgewo+IEBAIC0yMzMyLDcgKzIzNDEsOCBAQCBzdGF0aWMgaW50IHZtX2JpbmRfaW9jdGxf b3BzX3BhcnNlKHN0cnVjdCB4ZV92bQo+ICp2bSwgc3RydWN0IHhlX2VuZ2luZSAqZSwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IHhlX3ZtYSAqdm1hOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZtYSA9IG5ld192bWEodm0sICZv cC0+YmFzZS5tYXAsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPmd0X21h c2ssIG9wLQo+ID5tYXAucmVhZF9vbmx5KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBvcC0+Z3RfbWFzaywgb3AtCj4gPm1hcC5yZWFkX29ubHksCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgb3AtPm1hcC5udWxsICk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIodm1h KSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gUFRSX0VSUih2bWEpOwo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZ290byBmcmVlX2ZlbmNlOwo+IEBAIC0yMzQ3LDkgKzIzNTcsMTMg QEAgc3RhdGljIGludCB2bV9iaW5kX2lvY3RsX29wc19wYXJzZShzdHJ1Y3QKPiB4ZV92bSAqdm0s IHN0cnVjdCB4ZV9lbmdpbmUgKmUsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib29sIHJlYWRf b25seSA9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3AtPmJhc2Uu cmVtYXAudW5tYXAtCj4gPnZhLT5mbGFncyAmCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgWEVfVk1BX1JFQURfT05MWTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9v bCBudWxsID0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9wLT5iYXNl LnJlbWFwLnVubWFwLQo+ID52YS0+ZmxhZ3MgJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgWEVfVk1BX05VTEw7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZt YSA9IG5ld192bWEodm0sIG9wLQo+ID5iYXNlLnJlbWFwLnByZXYsCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wLT5ndF9tYXNrLAo+IHJlYWRfb25s eSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9w LT5ndF9tYXNrLAo+IHJlYWRfb25seSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbnVsbCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNf RVJSKHZtYSkpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIg PSBQVFJfRVJSKHZtYSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Z290byBmcmVlX2ZlbmNlOwo+IEBAIC0yMzY0LDggKzIzNzgsMTMgQEAgc3RhdGljIGludCB2bV9i aW5kX2lvY3RsX29wc19wYXJzZShzdHJ1Y3QKPiB4ZV92bSAqdm0sIHN0cnVjdCB4ZV9lbmdpbmUg KmUsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3AtPmJhc2UucmVt YXAudW5tYXAtCj4gPnZhLT5mbGFncyAmCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgWEVfVk1BX1JFQURfT05MWTsKPiDCoAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBi b29sIG51bGwgPQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3AtPmJh c2UucmVtYXAudW5tYXAtCj4gPnZhLT5mbGFncyAmCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBYRV9WTUFfTlVMTDsKPiArCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2 bWEgPSBuZXdfdm1hKHZtLCBvcC0KPiA+YmFzZS5yZW1hcC5uZXh0LAo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0+Z3RfbWFzaywKPiByZWFkX29u bHkpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBv cC0+Z3RfbWFzaywKPiByZWFkX29ubHksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG51bGwpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElT X0VSUih2bWEpKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJy ID0gUFRSX0VSUih2bWEpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGdvdG8gZnJlZV9mZW5jZTsKPiBAQCAtMjg1MywxMSArMjg3MiwxMiBAQCBzdGF0aWMgdm9pZCB2 bV9iaW5kX2lvY3RsX29wc191bndpbmQoc3RydWN0Cj4geGVfdm0gKnZtLAo+IMKgI2lmZGVmIFRF U1RfVk1fQVNZTkNfT1BTX0VSUk9SCj4gwqAjZGVmaW5lIFNVUFBPUlRFRF9GTEFHU8KgwqDCoMKg wqDCoMKgwqBcCj4gwqDCoMKgwqDCoMKgwqDCoChGT1JDRV9BU1lOQ19PUF9FUlJPUiB8IFhFX1ZN X0JJTkRfRkxBR19BU1lOQyB8IFwKPiAtwqDCoMKgwqDCoMKgwqAgWEVfVk1fQklORF9GTEFHX1JF QURPTkxZIHwgWEVfVk1fQklORF9GTEFHX0lNTUVESUFURSB8Cj4gMHhmZmZmKQo+ICvCoMKgwqDC oMKgwqDCoCBYRV9WTV9CSU5EX0ZMQUdfUkVBRE9OTFkgfCBYRV9WTV9CSU5EX0ZMQUdfSU1NRURJ QVRFIHwgXAo+ICvCoMKgwqDCoMKgwqDCoCBYRV9WTV9CSU5EX0ZMQUdfTlVMTCB8IDB4ZmZmZikK PiDCoCNlbHNlCj4gwqAjZGVmaW5lIFNVUFBPUlRFRF9GTEFHU8KgwqDCoMKgwqDCoMKgwqBcCj4g wqDCoMKgwqDCoMKgwqDCoChYRV9WTV9CSU5EX0ZMQUdfQVNZTkMgfCBYRV9WTV9CSU5EX0ZMQUdf UkVBRE9OTFkgfCBcCj4gLcKgwqDCoMKgwqDCoMKgIFhFX1ZNX0JJTkRfRkxBR19JTU1FRElBVEUg fCAweGZmZmYpCj4gK8KgwqDCoMKgwqDCoMKgIFhFX1ZNX0JJTkRfRkxBR19JTU1FRElBVEUgfCBY RV9WTV9CSU5EX0ZMQUdfTlVMTCB8IDB4ZmZmZikKPiDCoCNlbmRpZgo+IMKgI2RlZmluZSBYRV82 NEtfUEFHRV9NQVNLIDB4ZmZmZnVsbAo+IMKgCj4gQEAgLTI5MDMsNiArMjkyMyw3IEBAIHN0YXRp YyBpbnQgdm1fYmluZF9pb2N0bF9jaGVja19hcmdzKHN0cnVjdAo+IHhlX2RldmljZSAqeGUsCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgb2JqID0gKCpiaW5kX29wcylbaV0u b2JqOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTY0IG9ial9vZmZzZXQgPSAo KmJpbmRfb3BzKVtpXS5vYmpfb2Zmc2V0Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgdTMyIHJlZ2lvbiA9ICgqYmluZF9vcHMpW2ldLnJlZ2lvbjsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgYm9vbCBudWxsID0gb3AgJsKgIFhFX1ZNX0JJTkRfRkxBR19OVUxMOwoK QW5kIGluIG11bHRpcGxlIG90aGVyIHBsYWNlcy4uLgoKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKGkgPT0gMCkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCphc3luYyA9ICEhKG9wICYgWEVfVk1fQklORF9GTEFHX0FT WU5DKTsKPiBAQCAtMjkyOSw4ICsyOTUwLDEyIEBAIHN0YXRpYyBpbnQgdm1fYmluZF9pb2N0bF9j aGVja19hcmdzKHN0cnVjdAo+IHhlX2RldmljZSAqeGUsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoWEVfSU9DVExfRVJSKHhlLCBWTV9CSU5EX09QKG9wKSA+Cj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBYRV9WTV9CSU5EX09QX1BSRUZFVENIKSB8fAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFhFX0lPQ1RMX0VSUih4ZSwgb3AgJiB+U1VQUE9SVEVEX0ZMQUdTKSB8fAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVfSU9DVExfRVJSKHhlLCBv YmogJiYgbnVsbCkgfHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFhF X0lPQ1RMX0VSUih4ZSwgb2JqX29mZnNldCAmJiBudWxsKSB8fAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVfSU9DVExfRVJSKHhlLCBWTV9CSU5EX09QKG9wKSAhPQo+ IFhFX1ZNX0JJTkRfT1BfTUFQICYmCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG51bGwpIHx8Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVfSU9DVExfRVJSKHhlLCAhb2JqICYmCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFZNX0JJTkRfT1Aob3ApID09IFhFX1ZNX0JJTkRfT1BfTUFQKQo+IHx8Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZNX0JJ TkRfT1Aob3ApID09IFhFX1ZNX0JJTkRfT1BfTUFQCj4gJiYgIW51bGwpIHx8Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVfSU9DVExfRVJSKHhlLCAhb2JqICYmCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBWTV9CSU5EX09QKG9wKSA9PQo+IFhFX1ZNX0JJTkRfT1BfVU5NQVBfQUxMKSB8fAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFhFX0lPQ1RMX0VSUih4ZSwg YWRkciAmJgo+IEBAIC0zMjU0LDYgKzMyNzksNyBAQCBpbnQgeGVfdm1faW52YWxpZGF0ZV92bWEo c3RydWN0IHhlX3ZtYSAqdm1hKQo+IMKgwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoFhFX0JVR19PTigheGVfdm1faW5fZmF1bHRfbW9kZSh4ZV92bWFfdm0odm1h KSkpOwo+ICvCoMKgwqDCoMKgwqDCoFhFX0JVR19PTih4ZV92bWFfaXNfbnVsbCh2bWEpKTsKPiDC oMKgwqDCoMKgwqDCoMKgdHJhY2VfeGVfdm1hX3VzbV9pbnZhbGlkYXRlKHZtYSk7Cj4gwqAKPiDC oMKgwqDCoMKgwqDCoMKgLyogQ2hlY2sgdGhhdCB3ZSBkb24ndCByYWNlIHdpdGggcGFnZS10YWJs ZSB1cGRhdGVzICovCj4gQEAgLTMzMTMsOCArMzMzOSwxMSBAQCBpbnQgeGVfYW5hbHl6ZV92bShz dHJ1Y3QgZHJtX3ByaW50ZXIgKnAsCj4gc3RydWN0IHhlX3ZtICp2bSwgaW50IGd0X2lkKQo+IMKg wqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfaXRlcl9mb3JfZWFjaChncHV2YSwgaXQpIHsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV92bWEqIHZtYSA9IGdwdXZhX3Rv X3ZtYShncHV2YSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib29sIGlzX3Vz ZXJwdHIgPSB4ZV92bWFfaXNfdXNlcnB0cih2bWEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBib29sIG51bGwgPSB4ZV92bWFfaXNfbnVsbCh2bWEpOwo+IMKgCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChpc191c2VycHRyKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChudWxsKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBhZGRyID0gMDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfSBlbHNlIGlmIChpc191c2VycHRyKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3Jlc19jdXJzb3IgY3VyOwo+IMKgCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfcmVzX2Zp cnN0X3NnKHZtYS0+dXNlcnB0ci5zZywgMCwKPiBYRV9QQUdFX1NJWkUsICZjdXIpOwo+IEBAIC0z MzI0LDcgKzMzNTMsOCBAQCBpbnQgeGVfYW5hbHl6ZV92bShzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAs IHN0cnVjdAo+IHhlX3ZtICp2bSwgaW50IGd0X2lkKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX3ByaW50Zihw LCAiIFslMDE2bGx4LSUwMTZsbHhdIFM6MHglMDE2bGx4Cj4gQTolMDE2bGx4ICVzXG4iLAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVfdm1h X3N0YXJ0KHZtYSksIHhlX3ZtYV9lbmQodm1hKSwKPiB4ZV92bWFfc2l6ZSh2bWEpLAo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZGRyLCBpc191 c2VycHRyID8gIlVTUiIgOiBpc192cmFtID8KPiAiVlJBTSIgOiAiU1lTIik7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZHIsIG51bGwgPyAi TlVMTCIgOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpc191c2VycHRyID8gIlVTUiIgOiBpc192cmFtID8gIlZSQU0iIDoKPiAiU1lTIik7Cj4g wqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKgdXBfcmVhZCgmdm0tPmxvY2spOwo+ IMKgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5oIGIvZHJpdmVycy9n cHUvZHJtL3hlL3hlX3ZtLmgKPiBpbmRleCAyMWIxMDU0OTQ5YzQuLjk2ZTJjNmIwN2JmOCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS94ZS94ZV92bS5oCj4gQEAgLTE3NSw3ICsxNzUsMTcgQEAgc3RhdGljIGlubGluZSB2b2lk Cj4geGVfdm1fcmVhY3RpdmF0ZV9yZWJpbmQoc3RydWN0IHhlX3ZtICp2bSkKPiDCoMKgwqDCoMKg wqDCoMKgfQo+IMKgfQo+IMKgCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZV92bWFfaXNfbnVsbChz dHJ1Y3QgeGVfdm1hICp2bWEpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdm1hLT5ncHV2 YS5mbGFncyAmIFhFX1ZNQV9OVUxMOwo+ICt9Cj4gKwo+IMKgc3RhdGljIGlubGluZSBib29sIHhl X3ZtYV9pc191c2VycHRyKHN0cnVjdCB4ZV92bWEgKnZtYSkKPiArewo+ICvCoMKgwqDCoMKgwqDC oHJldHVybiAheGVfdm1hX2JvKHZtYSkgJiYgIXhlX3ZtYV9pc19udWxsKHZtYSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZV92bWFfaGFzX25vX2JvKHN0cnVjdCB4ZV92bWEgKnZt YSkKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuICF4ZV92bWFfYm8odm1hKTsKPiDCoH0K CgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtX21hZHZpc2UuYwo+IGIv ZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtX21hZHZpc2UuYwo+IGluZGV4IDAyZDI3YTM1NGIzNi4u MDM1MDg2NDVmYTA4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV9tYWR2 aXNlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fbWFkdmlzZS5jCj4gQEAgLTIy Nyw3ICsyMjcsNyBAQCBnZXRfdm1hcyhzdHJ1Y3QgeGVfdm0gKnZtLCBpbnQgKm51bV92bWFzLCB1 NjQKPiBhZGRyLCB1NjQgcmFuZ2UpCj4gwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9pdGVyX2Zv cl9lYWNoX3JhbmdlKGdwdXZhLCBpdCwgYWRkciArIHJhbmdlKSB7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfdm1hICp2bWEgPSBncHV2YV90b192bWEoZ3B1dmEp Owo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4ZV92bWFfaXNfdXNl cnB0cih2bWEpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoeGVfdm1hX2hh c19ub19ibyh2bWEpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNvbnRpbnVlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoKm51bV92bWFzID09IG1heF92bWFzKSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS94ZS94ZV92bV90eXBlcy5oCj4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaAo+ IGluZGV4IDI0M2RjOTFhNjFiMC4uYjYxMDA3YjcwNTAyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS94ZS94ZV92bV90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Zt X3R5cGVzLmgKPiBAQCAtMjksNiArMjksNyBAQCBzdHJ1Y3QgeGVfdm07Cj4gwqAjZGVmaW5lIFhF X1ZNQV9BVE9NSUNfUFRFX0JJVMKgwqAoRFJNX0dQVVZBX1VTRVJCSVRTIDw8IDIpCj4gwqAjZGVm aW5lIFhFX1ZNQV9GSVJTVF9SRUJJTkTCoMKgwqDCoChEUk1fR1BVVkFfVVNFUkJJVFMgPDwgMykK PiDCoCNkZWZpbmUgWEVfVk1BX0xBU1RfUkVCSU5EwqDCoMKgwqDCoChEUk1fR1BVVkFfVVNFUkJJ VFMgPDwgNCkKPiArI2RlZmluZSBYRV9WTUFfTlVMTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChE Uk1fR1BVVkFfVVNFUkJJVFMgPDwgNSkKPiDCoAo+IMKgc3RydWN0IHhlX3ZtYSB7Cj4gwqDCoMKg wqDCoMKgwqDCoC8qKiBAZ3B1dmE6IEJhc2UgR1BVVkEgb2JqZWN0ICovCj4gQEAgLTMxNSw2ICsz MTYsOCBAQCBzdHJ1Y3QgeGVfdm1hX29wX21hcCB7Cj4gwqDCoMKgwqDCoMKgwqDCoGJvb2wgaW1t ZWRpYXRlOwo+IMKgwqDCoMKgwqDCoMKgwqAvKiogQHJlYWRfb25seTogUmVhZCBvbmx5ICovCj4g wqDCoMKgwqDCoMKgwqDCoGJvb2wgcmVhZF9vbmx5Owo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAbnVs bDogTlVMTCAod3JpdGVzIGRyb3BwZWQsIHJlYWQgemVybykgKi8KPiArwqDCoMKgwqDCoMKgwqBi b29sIG51bGw7Cj4gwqB9Owo+IMKgCj4gwqAvKiogc3RydWN0IHhlX3ZtYV9vcF91bm1hcCAtIFZN QSB1bm1hcCBvcGVyYXRpb24gKi8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS94ZV9k cm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0veGVfZHJtLmgKPiBpbmRleCBiMGI4MGFhZTNlZTguLjI3 YzUxOTQ2ZmFkZCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3VhcGkvZHJtL3hlX2RybS5oCj4gKysr IGIvaW5jbHVkZS91YXBpL2RybS94ZV9kcm0uaAo+IEBAIC00NDcsNiArNDQ3LDE0IEBAIHN0cnVj dCBkcm1feGVfdm1fYmluZF9vcCB7Cj4gwqDCoMKgwqDCoMKgwqDCoCAqIHRoYW4gZGlmZmVyaW5n IHRoZSBNQVAgdG8gdGhlIHBhZ2UgZmF1bHQgaGFuZGxlci4KPiDCoMKgwqDCoMKgwqDCoMKgICov Cj4gwqAjZGVmaW5lIFhFX1ZNX0JJTkRfRkxBR19JTU1FRElBVEXCoMKgwqDCoMKgwqAoMHgxIDw8 IDE4KQo+ICvCoMKgwqDCoMKgwqDCoC8qCj4gK8KgwqDCoMKgwqDCoMKgICogV2hlbiB0aGUgTlVM TCBmbGFnIGlzIHNldCwgdGhlIHBhZ2UgdGFibGVzIGFyZSBzZXR1cCB3aXRoCj4gYSBzcGVjaWFs Cj4gK8KgwqDCoMKgwqDCoMKgICogYml0IHdoaWNoIGluZGljYXRlcyB3cml0ZXMgYXJlIGRyb3Bw ZWQgYW5kIGFsbCByZWFkcwo+IHJldHVybiB6ZXJvLiBUaGUKPiArwqDCoMKgwqDCoMKgwqAgKiBO VUxMIGZsYWdzIGlzIG9ubHkgdmFsaWQgZm9yIFhFX1ZNX0JJTkRfT1BfTUFQIG9wZXJhdGlvbnMs Cj4gdGhlIEJPCj4gK8KgwqDCoMKgwqDCoMKgICogaGFuZGxlIE1CWiwgYW5kIHRoZSBCTyBvZmZz ZXQgTUJaLiBUaGlzIGZsYWcgaXMgaW50ZW5kZWQKPiB0byBpbXBsZW1lbnQKPiArwqDCoMKgwqDC oMKgwqAgKiBWSyBzcGFyc2UgYmluZGluZ3MuCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gKyNkZWZp bmUgWEVfVk1fQklORF9GTEFHX05VTEzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKDB4MSA8PCAxOSkK PiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKiogQHJlc2VydmVkOiBSZXNlcnZlZCAqLwo+IMKgwqDC oMKgwqDCoMKgwqBfX3U2NCByZXNlcnZlZFsyXTsKCg==