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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 C82CBC433E6 for ; Fri, 15 Jan 2021 22:23: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 8C2D6235DD for ; Fri, 15 Jan 2021 22:23:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8C2D6235DD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=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 026E66E4B7; Fri, 15 Jan 2021 22:23:36 +0000 (UTC) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id B2A376E4A5 for ; Fri, 15 Jan 2021 22:23:34 +0000 (UTC) IronPort-SDR: q8UpUKWf5xs4baNlLEGVXfVrwsuXwx8NkYW5+lVdOkVFofKoXTuvqUMN2lAUakeiqSpJS00jev NGZQck7puAfg== X-IronPort-AV: E=McAfee;i="6000,8403,9865"; a="178762668" X-IronPort-AV: E=Sophos;i="5.79,350,1602572400"; d="scan'208";a="178762668" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Jan 2021 14:23:33 -0800 IronPort-SDR: slLjTPkGNHQuLkFJgjZD/2qZM/WgnofbwEjhNOZ0i/c3f58lipfLA8Azx+0cVSqzAInMRCHYGd WrClsHe3Du5A== X-IronPort-AV: E=Sophos;i="5.79,350,1602572400"; d="scan'208";a="382820208" Received: from bmkierna-mobl3.ger.corp.intel.com (HELO localhost) ([10.213.221.58]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Jan 2021 14:23:31 -0800 From: Jani Nikula To: intel-gfx@lists.freedesktop.org In-Reply-To: Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: Date: Sat, 16 Jan 2021 00:23:27 +0200 Message-ID: <87r1mlon4w.fsf@intel.com> MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 03/11] drm/i915: split fdi code out from intel_display.c 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" T24gVGh1LCAxNCBKYW4gMjAyMSwgSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4g d3JvdGU6Cj4gRnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KPgo+IFRoaXMg anVzdCByZWZhY3RvcnMgb3V0IHRoZSBmZGkgY29kZSB0byBhIHNlcGFyYXRlIGZpbGUuCj4KPiBT aWduZWQtb2ZmLWJ5OiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+IFtKYW5pOiBj bGVhbmVkIHVwIGludGVsX2ZkaS5oIGEgYml0Ll0KPiBTaWduZWQtb2ZmLWJ5OiBKYW5pIE5pa3Vs YSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgo+IFJldmlld2VkLWJ5OiBWaWxsZSBTeXJqw6Rsw6Qg PHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgoKVGhhbmtzIGZvciB0aGUgcGF0Y2hlcyBh bmQgcmV2aWV3LCBwdXNoZWQgdGhlIGZpcnN0IHRocmVlIGZvciBzdGFydGVycy4KCkJSLApKYW5p LgoKCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAg ICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5j ICB8IDY4NSArLS0tLS0tLS0tLS0tLS0tLS0KPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheV90eXBlcy5oICAgIHwgICA5ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9mZGkuYyAgICAgIHwgNjgzICsrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmggICAgICB8ICAyMiArCj4gIDUgZmlsZXMgY2hh bmdlZCwgNzE4IGluc2VydGlvbnMoKyksIDY4MiBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmMKPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmgKPgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggMjQ3OWFiMmZmYjA5Li5lMjQ1YTAzNjYxM2UgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC0yMTAsNiArMjEwLDcgQEAgaTkxNS15ICs9IFwK PiAgCWRpc3BsYXkvaW50ZWxfZHBsbF9tZ3IubyBcCj4gIAlkaXNwbGF5L2ludGVsX2RzYi5vIFwK PiAgCWRpc3BsYXkvaW50ZWxfZmJjLm8gXAo+ICsJZGlzcGxheS9pbnRlbF9mZGkubyBcCj4gIAlk aXNwbGF5L2ludGVsX2ZpZm9fdW5kZXJydW4ubyBcCj4gIAlkaXNwbGF5L2ludGVsX2Zyb250YnVm ZmVyLm8gXAo+ICAJZGlzcGxheS9pbnRlbF9nbG9iYWxfc3RhdGUubyBcCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRleCBmNGQ5Y2NhYWZjYjMu LmEyZmE3YTIxOWM0YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZGlzcGxheS5jCj4gQEAgLTc0LDYgKzc0LDcgQEAKPiAgI2luY2x1ZGUgImludGVsX2Rpc3Bs YXlfdHlwZXMuaCIKPiAgI2luY2x1ZGUgImludGVsX2RwX2xpbmtfdHJhaW5pbmcuaCIKPiAgI2lu Y2x1ZGUgImludGVsX2ZiYy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZmRpLmgiCj4gICNpbmNsdWRl ICJpbnRlbF9mYmRldi5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfZmlmb191bmRlcnJ1bi5oIgo+ICAj aW5jbHVkZSAiaW50ZWxfZnJvbnRidWZmZXIuaCIKPiBAQCAtMTczLDE2ICsxNzQsNiBAQCBzdGF0 aWMgdm9pZCBpbnRlbF91cGRhdGVfY3pjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICAJCWRldl9wcml2LT5jemNsa19mcmVxKTsKPiAgfQo+ICAKPiAtLyogdW5pdHMgb2Yg MTAwTUh6ICovCj4gLXN0YXRpYyB1MzIgaW50ZWxfZmRpX2xpbmtfZnJlcShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqcGlwZV9jb25maWcpCj4gLXsKPiAtCWlmIChIQVNfRERJKGRldl9wcml2KSkKPiAt CQlyZXR1cm4gcGlwZV9jb25maWctPnBvcnRfY2xvY2s7IC8qIFNQTEwgKi8KPiAtCWVsc2UKPiAt CQlyZXR1cm4gZGV2X3ByaXYtPmZkaV9wbGxfZnJlcTsKPiAtfQo+IC0KPiAgLyogV0EgRGlzcGxh eSAjMDgyNzogR2VuOTphbGwgKi8KPiAgc3RhdGljIHZvaWQKPiAgc2tsX3dhXzgyNyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlLCBib29sIGVuYWJsZSkK PiBAQCAtMzcyNyw1MzIgKzM3MTgsNiBAQCBzdGF0aWMgdm9pZCBpY2xfc2V0X3BpcGVfY2hpY2tl bihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiAgCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBQ SVBFX0NISUNLRU4ocGlwZSksIHRtcCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGludGVsX2Zk aV9ub3JtYWxfdHJhaW4oc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gLXsKPiAtCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAtCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+ cGlwZTsKPiAtCWk5MTVfcmVnX3QgcmVnOwo+IC0JdTMyIHRlbXA7Cj4gLQo+IC0JLyogZW5hYmxl IG5vcm1hbCB0cmFpbiAqLwo+IC0JcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiAtCXRlbXAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JaWYgKElTX0lWWUJSSURHRShkZXZfcHJp dikpIHsKPiAtCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FX0lWQjsKPiAtCQl0ZW1wIHw9 IEZESV9MSU5LX1RSQUlOX05PTkVfSVZCIHwgRkRJX1RYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFOwo+ IC0JfSBlbHNlIHsKPiAtCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwo+IC0JCXRlbXAg fD0gRkRJX0xJTktfVFJBSU5fTk9ORSB8IEZESV9UWF9FTkhBTkNFX0ZSQU1FX0VOQUJMRTsKPiAt CX0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+IC0KPiAtCXJlZyA9 IEZESV9SWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVn KTsKPiAtCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdikpIHsKPiAtCQl0ZW1wICY9IH5GRElfTElO S19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOwo+IC0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fTk9S TUFMX0NQVDsKPiAtCX0gZWxzZSB7Cj4gLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsK PiAtCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX05PTkU7Cj4gLQl9Cj4gLQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFKTsKPiAt Cj4gLQkvKiB3YWl0IG9uZSBpZGxlIHBhdHRlcm4gdGltZSAqLwo+IC0JaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdWRlbGF5KDEwMDApOwo+IC0KPiAtCS8qIElWQiB3 YW50cyBlcnJvciBjb3JyZWN0aW9uIGVuYWJsZWQgKi8KPiAtCWlmIChJU19JVllCUklER0UoZGV2 X3ByaXYpKQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCj4gLQkJICAgICAgICAg ICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSB8IEZESV9GU19FUlJDX0VOQUJMRSB8 IEZESV9GRV9FUlJDX0VOQUJMRSk7Cj4gLX0KPiAtCj4gLS8qIFRoZSBGREkgbGluayB0cmFpbmlu ZyBmdW5jdGlvbnMgZm9yIElMSy9JYmV4cGVhay4gKi8KPiAtc3RhdGljIHZvaWQgaWxrX2ZkaV9s aW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+IC0JCQkgICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAtCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsK PiAtCWk5MTVfcmVnX3QgcmVnOwo+IC0JdTMyIHRlbXAsIHRyaWVzOwo+IC0KPiAtCS8qIEZESSBu ZWVkcyBiaXRzIGZyb20gcGlwZSBmaXJzdCAqLwo+IC0JYXNzZXJ0X3BpcGVfZW5hYmxlZChkZXZf cHJpdiwgY3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXIpOwo+IC0KPiAtCS8qIFRyYWluIDE6IHVt YXNrIEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAo+IC0JICAg Zm9yIHRyYWluIHJlc3VsdCAqLwo+IC0JcmVnID0gRkRJX1JYX0lNUihwaXBlKTsKPiAtCXRlbXAg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdGVtcCAmPSB+RkRJX1JYX1NZTUJP TF9MT0NLOwo+IC0JdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOwo+IC0JaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQlpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ IC0JdWRlbGF5KDE1MCk7Cj4gLQo+IC0JLyogZW5hYmxlIENQVSBGREkgVFggYW5kIFBDSCBGREkg UlggKi8KPiAtCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKTsKPiAtCXRlbXAgJj0gfkZESV9EUF9QT1JUX1dJRFRIX01BU0s7Cj4g LQl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7Cj4gLQl0 ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwo+IC0JdGVtcCB8PSBGRElfTElOS19UUkFJTl9Q QVRURVJOXzE7Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RY X0VOQUJMRSk7Cj4gLQo+IC0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiAtCXRlbXAgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9O RTsKPiAtCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwo+IC0JaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOwo+IC0KPiAtCWludGVsX2Rl X3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCXVkZWxheSgxNTApOwo+IC0KPiAtCS8q IElyb25sYWtlIHdvcmthcm91bmQsIGVuYWJsZSBjbG9jayBwb2ludGVyIGFmdGVyIEZESSBlbmFi bGUqLwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9DSElDS0VOKHBpcGUpLAo+ IC0JCSAgICAgICBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX09WUik7Cj4gLQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgRkRJX1JYX0NISUNLRU4ocGlwZSksCj4gLQkJICAgICAgIEZESV9SWF9Q SEFTRV9TWU5DX1BPSU5URVJfT1ZSIHwgRkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9FTik7Cj4g LQo+IC0JcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKPiAtCWZvciAodHJpZXMgPSAwOyB0cmllcyA8 IDU7IHRyaWVzKyspIHsKPiAtCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK PiAtCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVt cCk7Cj4gLQo+IC0JCWlmICgodGVtcCAmIEZESV9SWF9CSVRfTE9DSykpIHsKPiAtCQkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMSBkb25lLlxuIik7Cj4gLQkJCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfQklUX0xPQ0spOwo+IC0JCQli cmVhazsKPiAtCQl9Cj4gLQl9Cj4gLQlpZiAodHJpZXMgPT0gNSkKPiAtCQlkcm1fZXJyKCZkZXZf cHJpdi0+ZHJtLCAiRkRJIHRyYWluIDEgZmFpbCFcbiIpOwo+IC0KPiAtCS8qIFRyYWluIDIgKi8K PiAtCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgcmVnKTsKPiAtCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Cj4gLQl0ZW1wIHw9 IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMjsKPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBy ZWcsIHRlbXApOwo+IC0KPiAtCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05P TkU7Cj4gLQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMjsKPiAtCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+IC0KPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVhZChk ZXZfcHJpdiwgcmVnKTsKPiAtCXVkZWxheSgxNTApOwo+IC0KPiAtCXJlZyA9IEZESV9SWF9JSVIo cGlwZSk7Cj4gLQlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA1OyB0cmllcysrKSB7Cj4gLQkJdGVt cCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwo+IC0KPiAtCQlpZiAodGVtcCAm IEZESV9SWF9TWU1CT0xfTE9DSykgewo+IC0JCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVn LAo+IC0JCQkJICAgICAgIHRlbXAgfCBGRElfUlhfU1lNQk9MX0xPQ0spOwo+IC0JCQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAyIGRvbmUuXG4iKTsKPiAtCQkJYnJlYWs7 Cj4gLQkJfQo+IC0JfQo+IC0JaWYgKHRyaWVzID09IDUpCj4gLQkJZHJtX2VycigmZGV2X3ByaXYt PmRybSwgIkZESSB0cmFpbiAyIGZhaWwhXG4iKTsKPiAtCj4gLQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwgIkZESSB0cmFpbiBkb25lXG4iKTsKPiAtCj4gLX0KPiAtCj4gLXN0YXRpYyBjb25z dCBpbnQgc25iX2JfZmRpX3RyYWluX3BhcmFtW10gPSB7Cj4gLQlGRElfTElOS19UUkFJTl80MDBN Vl8wREJfU05CX0IsCj4gLQlGRElfTElOS19UUkFJTl80MDBNVl82REJfU05CX0IsCj4gLQlGRElf TElOS19UUkFJTl82MDBNVl8zXzVEQl9TTkJfQiwKPiAtCUZESV9MSU5LX1RSQUlOXzgwME1WXzBE Ql9TTkJfQiwKPiAtfTsKPiAtCj4gLS8qIFRoZSBGREkgbGluayB0cmFpbmluZyBmdW5jdGlvbnMg Zm9yIFNOQi9Db3VnYXJwb2ludC4gKi8KPiAtc3RhdGljIHZvaWQgZ2VuNl9mZGlfbGlua190cmFp bihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAtCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+YmFzZS5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRldik7Cj4gLQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4gLQlpOTE1X3JlZ190 IHJlZzsKPiAtCXUzMiB0ZW1wLCBpLCByZXRyeTsKPiAtCj4gLQkvKiBUcmFpbiAxOiB1bWFzayBG REkgUlggSW50ZXJydXB0IHN5bWJvbF9sb2NrIGFuZCBiaXRfbG9jayBiaXQKPiAtCSAgIGZvciB0 cmFpbiByZXN1bHQgKi8KPiAtCXJlZyA9IEZESV9SWF9JTVIocGlwZSk7Cj4gLQl0ZW1wID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9D SzsKPiAtCXRlbXAgJj0gfkZESV9SWF9CSVRfTE9DSzsKPiAtCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsIHRlbXApOwo+IC0KPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwg cmVnKTsKPiAtCXVkZWxheSgxNTApOwo+IC0KPiAtCS8qIGVuYWJsZSBDUFUgRkRJIFRYIGFuZCBQ Q0ggRkRJIFJYICovCj4gLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwo+IC0JdGVtcCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQl0ZW1wICY9IH5GRElfRFBfUE9SVF9XSURUSF9N QVNLOwo+IC0JdGVtcCB8PSBGRElfRFBfUE9SVF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFuZXMp Owo+IC0JdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKPiAtCXRlbXAgfD0gRkRJX0xJTktf VFJBSU5fUEFUVEVSTl8xOwo+IC0JdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNL Owo+IC0JLyogU05CLUIgKi8KPiAtCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NO Ql9COwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9UWF9FTkFC TEUpOwo+IC0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfTUlTQyhwaXBlKSwK PiAtCQkgICAgICAgRkRJX1JYX1RQMV9UT19UUDJfNDggfCBGRElfUlhfRkRJX0RFTEFZXzkwKTsK PiAtCj4gLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwo+IC0JdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7Cj4gLQlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7Cj4gLQkJdGVt cCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKPiAtCQl0ZW1wIHw9IEZESV9M SU5LX1RSQUlOX1BBVFRFUk5fMV9DUFQ7Cj4gLQl9IGVsc2Ugewo+IC0JCXRlbXAgJj0gfkZESV9M SU5LX1RSQUlOX05PTkU7Cj4gLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7Cj4g LQl9Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOQUJM RSk7Cj4gLQo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdWRl bGF5KDE1MCk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+IC0JCXJlZyA9IEZE SV9UWF9DVEwocGlwZSk7Cj4gLQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Cj4gLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLOwo+IC0JCXRlbXAgfD0g c25iX2JfZmRpX3RyYWluX3BhcmFtW2ldOwo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBy ZWcsIHRlbXApOwo+IC0KPiAtCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Cj4gLQkJdWRlbGF5KDUwMCk7Cj4gLQo+IC0JCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDU7IHJl dHJ5KyspIHsKPiAtCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKPiAtCQkJdGVtcCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKPiAtCQkJaWYgKHRlbXAgJiBGRElfUlhfQklU X0xPQ0spIHsKPiAtCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCj4gLQkJCQkJICAg ICAgIHRlbXAgfCBGRElfUlhfQklUX0xPQ0spOwo+IC0JCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sCj4gLQkJCQkJICAgICJGREkgdHJhaW4gMSBkb25lLlxuIik7Cj4gLQkJCQlicmVhazsK PiAtCQkJfQo+IC0JCQl1ZGVsYXkoNTApOwo+IC0JCX0KPiAtCQlpZiAocmV0cnkgPCA1KQo+IC0J CQlicmVhazsKPiAtCX0KPiAtCWlmIChpID09IDQpCj4gLQkJZHJtX2VycigmZGV2X3ByaXYtPmRy bSwgIkZESSB0cmFpbiAxIGZhaWwhXG4iKTsKPiAtCj4gLQkvKiBUcmFpbiAyICovCj4gLQlyZWcg PSBGRElfVFhfQ1RMKHBpcGUpOwo+IC0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJl Zyk7Cj4gLQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwo+IC0JdGVtcCB8PSBGRElfTElO S19UUkFJTl9QQVRURVJOXzI7Cj4gLQlpZiAoSVNfR0VOKGRldl9wcml2LCA2KSkgewo+IC0JCXRl bXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTSzsKPiAtCQkvKiBTTkItQiAqLwo+IC0J CXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9COwo+IC0JfQo+IC0JaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQo+IC0JcmVnID0gRkRJX1JYX0NUTChw aXBlKTsKPiAtCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JaWYgKEhB U19QQ0hfQ1BUKGRldl9wcml2KSkgewo+IC0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRF Uk5fTUFTS19DUFQ7Cj4gLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzJfQ1BUOwo+ IC0JfSBlbHNlIHsKPiAtCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwo+IC0JCXRlbXAg fD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOwo+IC0JfQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2 LCByZWcpOwo+IC0JdWRlbGF5KDE1MCk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg ewo+IC0JCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gLQkJdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7Cj4gLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNL Owo+IC0JCXRlbXAgfD0gc25iX2JfZmRpX3RyYWluX3BhcmFtW2ldOwo+IC0JCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+IC0KPiAtCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQo ZGV2X3ByaXYsIHJlZyk7Cj4gLQkJdWRlbGF5KDUwMCk7Cj4gLQo+IC0JCWZvciAocmV0cnkgPSAw OyByZXRyeSA8IDU7IHJldHJ5KyspIHsKPiAtCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKPiAt CQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQkJCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKPiAtCQkJaWYgKHRl bXAgJiBGRElfUlhfU1lNQk9MX0xPQ0spIHsKPiAtCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWcsCj4gLQkJCQkJICAgICAgIHRlbXAgfCBGRElfUlhfU1lNQk9MX0xPQ0spOwo+IC0JCQkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJCQkJICAgICJGREkgdHJhaW4gMiBkb25l LlxuIik7Cj4gLQkJCQlicmVhazsKPiAtCQkJfQo+IC0JCQl1ZGVsYXkoNTApOwo+IC0JCX0KPiAt CQlpZiAocmV0cnkgPCA1KQo+IC0JCQlicmVhazsKPiAtCX0KPiAtCWlmIChpID09IDQpCj4gLQkJ ZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAyIGZhaWwhXG4iKTsKPiAtCj4gLQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25lLlxuIik7Cj4gLX0KPiAt Cj4gLS8qIE1hbnVhbCBsaW5rIHRyYWluaW5nIGZvciBJdnkgQnJpZGdlIEEwIHBhcnRzICovCj4g LXN0YXRpYyB2b2lkIGl2Yl9tYW51YWxfZmRpX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2NydGMg KmNydGMsCj4gLQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owo+ IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+IC0J ZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+IC0JaTkxNV9yZWdfdCByZWc7Cj4gLQl1MzIg dGVtcCwgaSwgajsKPiAtCj4gLQkvKiBUcmFpbiAxOiB1bWFzayBGREkgUlggSW50ZXJydXB0IHN5 bWJvbF9sb2NrIGFuZCBiaXRfbG9jayBiaXQKPiAtCSAgIGZvciB0cmFpbiByZXN1bHQgKi8KPiAt CXJlZyA9IEZESV9SWF9JTVIocGlwZSk7Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKPiAtCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9DSzsKPiAtCXRlbXAgJj0gfkZE SV9SWF9CSVRfTE9DSzsKPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+ IC0KPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCXVkZWxheSgx NTApOwo+IC0KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiBiZWZv cmUgbGluayB0cmFpbiAweCV4XG4iLAo+IC0JCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBG RElfUlhfSUlSKHBpcGUpKSk7Cj4gLQo+IC0JLyogVHJ5IGVhY2ggdnN3aW5nIGFuZCBwcmVlbXBo YXNpcyBzZXR0aW5nIHR3aWNlIGJlZm9yZSBtb3Zpbmcgb24gKi8KPiAtCWZvciAoaiA9IDA7IGog PCBBUlJBWV9TSVpFKHNuYl9iX2ZkaV90cmFpbl9wYXJhbSkgKiAyOyBqKyspIHsKPiAtCQkvKiBk aXNhYmxlIGZpcnN0IGluIGNhc2Ugd2UgbmVlZCB0byByZXRyeSAqLwo+IC0JCXJlZyA9IEZESV9U WF9DVEwocGlwZSk7Cj4gLQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4g LQkJdGVtcCAmPSB+KEZESV9MSU5LX1RSQUlOX0FVVE8gfCBGRElfTElOS19UUkFJTl9OT05FX0lW Qik7Cj4gLQkJdGVtcCAmPSB+RkRJX1RYX0VOQUJMRTsKPiAtCQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wKTsKPiAtCj4gLQkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiAtCQl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCQl0ZW1wICY9IH5GRElfTElO S19UUkFJTl9BVVRPOwo+IC0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19D UFQ7Cj4gLQkJdGVtcCAmPSB+RkRJX1JYX0VOQUJMRTsKPiAtCQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wKTsKPiAtCj4gLQkJLyogZW5hYmxlIENQVSBGREkgVFggYW5kIFBDSCBG REkgUlggKi8KPiAtCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwo+IC0JCXRlbXAgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JCXRlbXAgJj0gfkZESV9EUF9QT1JUX1dJRFRIX01B U0s7Cj4gLQkJdGVtcCB8PSBGRElfRFBfUE9SVF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFuZXMp Owo+IC0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0lWQjsKPiAtCQl0ZW1wICY9 IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7Cj4gLQkJdGVtcCB8PSBzbmJfYl9mZGlfdHJh aW5fcGFyYW1bai8yXTsKPiAtCQl0ZW1wIHw9IEZESV9DT01QT1NJVEVfU1lOQzsKPiAtCQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX0VOQUJMRSk7Cj4gLQo+IC0J CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfTUlTQyhwaXBlKSwKPiAtCQkJICAgICAg IEZESV9SWF9UUDFfVE9fVFAyXzQ4IHwgRkRJX1JYX0ZESV9ERUxBWV85MCk7Cj4gLQo+IC0JCXJl ZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4gLQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IHJlZyk7Cj4gLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzFfQ1BUOwo+IC0JCXRl bXAgfD0gRkRJX0NPTVBPU0lURV9TWU5DOwo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBy ZWcsIHRlbXAgfCBGRElfUlhfRU5BQkxFKTsKPiAtCj4gLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFk KGRldl9wcml2LCByZWcpOwo+IC0JCXVkZWxheSgxKTsgLyogc2hvdWxkIGJlIDAuNXVzICovCj4g LQo+IC0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKPiAtCQkJcmVnID0gRkRJX1JYX0lJUihw aXBlKTsKPiAtCQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQkJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKPiAt Cj4gLQkJCWlmICh0ZW1wICYgRkRJX1JYX0JJVF9MT0NLIHx8Cj4gLQkJCSAgICAoaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgcmVnKSAmIEZESV9SWF9CSVRfTE9DSykpIHsKPiAtCQkJCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsCj4gLQkJCQkJICAgICAgIHRlbXAgfCBGRElfUlhfQklUX0xP Q0spOwo+IC0JCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJCQkJICAgICJGREkg dHJhaW4gMSBkb25lLCBsZXZlbCAlaS5cbiIsCj4gLQkJCQkJICAgIGkpOwo+IC0JCQkJYnJlYWs7 Cj4gLQkJCX0KPiAtCQkJdWRlbGF5KDEpOyAvKiBzaG91bGQgYmUgMC41dXMgKi8KPiAtCQl9Cj4g LQkJaWYgKGkgPT0gNCkgewo+IC0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJ CSAgICAiRkRJIHRyYWluIDEgZmFpbCBvbiB2c3dpbmcgJWRcbiIsIGogLyAyKTsKPiAtCQkJY29u dGludWU7Cj4gLQkJfQo+IC0KPiAtCQkvKiBUcmFpbiAyICovCj4gLQkJcmVnID0gRkRJX1RYX0NU TChwaXBlKTsKPiAtCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCQl0 ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FX0lWQjsKPiAtCQl0ZW1wIHw9IEZESV9MSU5LX1RS QUlOX1BBVFRFUk5fMl9JVkI7Cj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVt cCk7Cj4gLQo+IC0JCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4gLQkJdGVtcCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVS Tl9NQVNLX0NQVDsKPiAtCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMl9DUFQ7Cj4g LQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQo+IC0JCWludGVsX2Rl X3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCQl1ZGVsYXkoMik7IC8qIHNob3VsZCBi ZSAxLjV1cyAqLwo+IC0KPiAtCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Cj4gLQkJCXJlZyA9 IEZESV9SWF9JSVIocGlwZSk7Cj4gLQkJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwo+IC0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxu IiwgdGVtcCk7Cj4gLQo+IC0JCQlpZiAodGVtcCAmIEZESV9SWF9TWU1CT0xfTE9DSyB8fAo+IC0J CQkgICAgKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZykgJiBGRElfUlhfU1lNQk9MX0xPQ0sp KSB7Cj4gLQkJCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAo+IC0JCQkJCSAgICAgICB0 ZW1wIHwgRkRJX1JYX1NZTUJPTF9MT0NLKTsKPiAtCQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLAo+IC0JCQkJCSAgICAiRkRJIHRyYWluIDIgZG9uZSwgbGV2ZWwgJWkuXG4iLAo+IC0JCQkJ CSAgICBpKTsKPiAtCQkJCWdvdG8gdHJhaW5fZG9uZTsKPiAtCQkJfQo+IC0JCQl1ZGVsYXkoMik7 IC8qIHNob3VsZCBiZSAxLjV1cyAqLwo+IC0JCX0KPiAtCQlpZiAoaSA9PSA0KQo+IC0JCQlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJCSAgICAiRkRJIHRyYWluIDIgZmFpbCBvbiB2 c3dpbmcgJWRcbiIsIGogLyAyKTsKPiAtCX0KPiAtCj4gLXRyYWluX2RvbmU6Cj4gLQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25lLlxuIik7Cj4gLX0KPiAtCj4gLXN0 YXRpYyB2b2lkIGlsa19mZGlfcGxsX2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0 b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGludGVsX2NydGMtPmJhc2UuZGV2KTsKPiAtCWVu dW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiAtCWk5MTVfcmVnX3QgcmVnOwo+IC0J dTMyIHRlbXA7Cj4gLQo+IC0JLyogZW5hYmxlIFBDSCBGREkgUlggUExMLCB3YWl0IHdhcm11cCBw bHVzIERNSSBsYXRlbmN5ICovCj4gLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwo+IC0JdGVtcCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQl0ZW1wICY9IH4oRkRJX0RQX1BPUlRf V0lEVEhfTUFTSyB8ICgweDcgPDwgMTYpKTsKPiAtCXRlbXAgfD0gRkRJX0RQX1BPUlRfV0lEVEgo Y3J0Y19zdGF0ZS0+ZmRpX2xhbmVzKTsKPiAtCXRlbXAgfD0gKGludGVsX2RlX3JlYWQoZGV2X3By aXYsIFBJUEVDT05GKHBpcGUpKSAmIFBJUEVDT05GX0JQQ19NQVNLKSA8PCAxMTsKPiAtCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfUExMX0VOQUJMRSk7Cj4gLQo+ IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdWRlbGF5KDIwMCk7 Cj4gLQo+IC0JLyogU3dpdGNoIGZyb20gUmF3Y2xrIHRvIFBDRGNsayAqLwo+IC0JdGVtcCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg cmVnLCB0ZW1wIHwgRkRJX1BDRENMSyk7Cj4gLQo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCByZWcpOwo+IC0JdWRlbGF5KDIwMCk7Cj4gLQo+IC0JLyogRW5hYmxlIENQVSBGREkg VFggUExMLCBhbHdheXMgb24gZm9yIElyb25sYWtlICovCj4gLQlyZWcgPSBGRElfVFhfQ1RMKHBp cGUpOwo+IC0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQlpZiAoKHRl bXAgJiBGRElfVFhfUExMX0VOQUJMRSkgPT0gMCkgewo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsIHRlbXAgfCBGRElfVFhfUExMX0VOQUJMRSk7Cj4gLQo+IC0JCWludGVsX2RlX3Bv c3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCQl1ZGVsYXkoMTAwKTsKPiAtCX0KPiAtfQo+ IC0KPiAtc3RhdGljIHZvaWQgaWxrX2ZkaV9wbGxfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0YykKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2NydGMt PmJhc2UuZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShkZXYpOwo+IC0JZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+IC0JaTkxNV9y ZWdfdCByZWc7Cj4gLQl1MzIgdGVtcDsKPiAtCj4gLQkvKiBTd2l0Y2ggZnJvbSBQQ0RjbGsgdG8g UmF3Y2xrICovCj4gLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwo+IC0JdGVtcCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0 ZW1wICYgfkZESV9QQ0RDTEspOwo+IC0KPiAtCS8qIERpc2FibGUgQ1BVIEZESSBUWCBQTEwgKi8K PiAtCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgcmVnKTsKPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgJiB+RkRJ X1RYX1BMTF9FTkFCTEUpOwo+IC0KPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwg cmVnKTsKPiAtCXVkZWxheSgxMDApOwo+IC0KPiAtCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4g LQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCByZWcsIHRlbXAgJiB+RkRJX1JYX1BMTF9FTkFCTEUpOwo+IC0KPiAtCS8qIFdh aXQgZm9yIHRoZSBjbG9ja3MgdG8gdHVybiBvZmYuICovCj4gLQlpbnRlbF9kZV9wb3N0aW5nX3Jl YWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQl1ZGVsYXkoMTAwKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZv aWQgaWxrX2ZkaV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+IC17Cj4gLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsK PiAtCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKPiAtCWk5MTVfcmVnX3QgcmVnOwo+IC0J dTMyIHRlbXA7Cj4gLQo+IC0JLyogZGlzYWJsZSBDUFUgRkRJIHR4IGFuZCBQQ0ggRkRJIHJ4ICov Cj4gLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwo+IC0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZE SV9UWF9FTkFCTEUpOwo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+ IC0KPiAtCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgcmVnKTsKPiAtCXRlbXAgJj0gfigweDcgPDwgMTYpOwo+IC0JdGVtcCB8PSAoaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgUElQRUNPTkYocGlwZSkpICYgUElQRUNPTkZfQlBDX01BU0sp IDw8IDExOwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfUlhf RU5BQkxFKTsKPiAtCj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4g LQl1ZGVsYXkoMTAwKTsKPiAtCj4gLQkvKiBJcm9ubGFrZSB3b3JrYXJvdW5kLCBkaXNhYmxlIGNs b2NrIHBvaW50ZXIgYWZ0ZXIgZG93bmluZyBGREkgKi8KPiAtCWlmIChIQVNfUENIX0lCWChkZXZf cHJpdikpCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9DSElDS0VOKHBpcGUp LAo+IC0JCQkgICAgICAgRkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9PVlIpOwo+IC0KPiAtCS8q IHN0aWxsIHNldCB0cmFpbiBwYXR0ZXJuIDEgKi8KPiAtCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7 Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCXRlbXAgJj0gfkZE SV9MSU5LX1RSQUlOX05PTkU7Cj4gLQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsK PiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+IC0KPiAtCXJlZyA9IEZE SV9SWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK PiAtCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdikpIHsKPiAtCQl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9QQVRURVJOX01BU0tfQ1BUOwo+IC0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVS Tl8xX0NQVDsKPiAtCX0gZWxzZSB7Cj4gLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsK PiAtCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKPiAtCX0KPiAtCS8qIEJQQyBp biBGREkgcnggaXMgY29uc2lzdGVudCB3aXRoIHRoYXQgaW4gUElQRUNPTkYgKi8KPiAtCXRlbXAg Jj0gfigweDA3IDw8IDE2KTsKPiAtCXRlbXAgfD0gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBJ UEVDT05GKHBpcGUpKSAmIFBJUEVDT05GX0JQQ19NQVNLKSA8PCAxMTsKPiAtCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+IC0KPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVhZChk ZXZfcHJpdiwgcmVnKTsKPiAtCXVkZWxheSgxMDApOwo+IC19Cj4gLQo+ICBib29sIGludGVsX2hh c19wZW5kaW5nX2ZiX3VucGluKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAg ewo+ICAJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+IEBAIC02NjU5LDE0MyArNjEyNCw2IEBAIHN0 YXRpYyB2b2lkIGludGVsX2Nvbm5lY3Rvcl92ZXJpZnlfc3RhdGUoc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCj4gIAl9Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgcGlwZV9yZXF1 aXJlZF9mZGlfbGFuZXMoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gLXsK PiAtCWlmIChjcnRjX3N0YXRlLT5ody5lbmFibGUgJiYgY3J0Y19zdGF0ZS0+aGFzX3BjaF9lbmNv ZGVyKQo+IC0JCXJldHVybiBjcnRjX3N0YXRlLT5mZGlfbGFuZXM7Cj4gLQo+IC0JcmV0dXJuIDA7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgaWxrX2NoZWNrX2ZkaV9sYW5lcyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSwKPiAtCQkJICAgICAgIHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpwaXBlX2NvbmZpZykKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShkZXYpOwo+IC0Jc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl ID0gcGlwZV9jb25maWctPnVhcGkuc3RhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqb3RoZXJf Y3J0YzsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvdGhlcl9jcnRjX3N0YXRlOwo+IC0K PiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCSAgICAiY2hlY2tpbmcgZmRpIGNv bmZpZyBvbiBwaXBlICVjLCBsYW5lcyAlaVxuIiwKPiAtCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBw aXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKPiAtCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzID4g NCkgewo+IC0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkgICAgImludmFsaWQg ZmRpIGxhbmUgY29uZmlnIG9uIHBpcGUgJWM6ICVpIGxhbmVzXG4iLAo+IC0JCQkgICAgcGlwZV9u YW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsK PiAtCX0KPiAtCj4gLQlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRl dl9wcml2KSkgewo+IC0JCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzID4gMikgewo+IC0JCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJCSAgICAib25seSAyIGxhbmVzIG9uIGhh c3dlbGwsIHJlcXVpcmVkOiAlaSBsYW5lc1xuIiwKPiAtCQkJCSAgICBwaXBlX2NvbmZpZy0+ZmRp X2xhbmVzKTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJcmV0dXJu IDA7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWlmIChJTlRFTF9OVU1fUElQRVMoZGV2X3ByaXYpID09 IDIpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JLyogSXZ5YnJpZGdlIDMgcGlwZSBpcyByZWFsbHkg Y29tcGxpY2F0ZWQgKi8KPiAtCXN3aXRjaCAocGlwZSkgewo+IC0JY2FzZSBQSVBFX0E6Cj4gLQkJ cmV0dXJuIDA7Cj4gLQljYXNlIFBJUEVfQjoKPiAtCQlpZiAocGlwZV9jb25maWctPmZkaV9sYW5l cyA8PSAyKQo+IC0JCQlyZXR1cm4gMDsKPiAtCj4gLQkJb3RoZXJfY3J0YyA9IGludGVsX2dldF9j cnRjX2Zvcl9waXBlKGRldl9wcml2LCBQSVBFX0MpOwo+IC0JCW90aGVyX2NydGNfc3RhdGUgPQo+ IC0JCQlpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIG90aGVyX2NydGMpOwo+IC0J CWlmIChJU19FUlIob3RoZXJfY3J0Y19zdGF0ZSkpCj4gLQkJCXJldHVybiBQVFJfRVJSKG90aGVy X2NydGNfc3RhdGUpOwo+IC0KPiAtCQlpZiAocGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMob3RoZXJf Y3J0Y19zdGF0ZSkgPiAwKSB7Cj4gLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0J CQkJICAgICJpbnZhbGlkIHNoYXJlZCBmZGkgbGFuZSBjb25maWcgb24gcGlwZSAlYzogJWkgbGFu ZXNcbiIsCj4gLQkJCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVz KTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0JCXJldHVybiAwOwo+IC0JY2FzZSBQ SVBFX0M6Cj4gLQkJaWYgKHBpcGVfY29uZmlnLT5mZGlfbGFuZXMgPiAyKSB7Cj4gLQkJCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkJICAgICJvbmx5IDIgbGFuZXMgb24gcGlwZSAl YzogcmVxdWlyZWQgJWkgbGFuZXNcbiIsCj4gLQkJCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBl X2NvbmZpZy0+ZmRpX2xhbmVzKTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0KPiAt CQlvdGhlcl9jcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIFBJUEVfQik7 Cj4gLQkJb3RoZXJfY3J0Y19zdGF0ZSA9Cj4gLQkJCWludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0 ZShzdGF0ZSwgb3RoZXJfY3J0Yyk7Cj4gLQkJaWYgKElTX0VSUihvdGhlcl9jcnRjX3N0YXRlKSkK PiAtCQkJcmV0dXJuIFBUUl9FUlIob3RoZXJfY3J0Y19zdGF0ZSk7Cj4gLQo+IC0JCWlmIChwaXBl X3JlcXVpcmVkX2ZkaV9sYW5lcyhvdGhlcl9jcnRjX3N0YXRlKSA+IDIpIHsKPiAtCQkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJCQkgICAgImZkaSBsaW5rIEIgdXNlcyB0b28gbWFu eSBsYW5lcyB0byBlbmFibGUgbGluayBDXG4iKTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJ fQo+IC0JCXJldHVybiAwOwo+IC0JZGVmYXVsdDoKPiAtCQlCVUcoKTsKPiAtCX0KPiAtfQo+IC0K PiAtI2RlZmluZSBSRVRSWSAxCj4gLXN0YXRpYyBpbnQgaWxrX2ZkaV9jb21wdXRlX2NvbmZpZyhz dHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiAtCQkJCSAgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKnBpcGVfY29uZmlnKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50 ZWxfY3J0Yy0+YmFzZS5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRv X2k5MTUoZGV2KTsKPiAtCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9t b2RlID0gJnBpcGVfY29uZmlnLT5ody5hZGp1c3RlZF9tb2RlOwo+IC0JaW50IGxhbmUsIGxpbmtf YncsIGZkaV9kb3RjbG9jaywgcmV0Owo+IC0JYm9vbCBuZWVkc19yZWNvbXB1dGUgPSBmYWxzZTsK PiAtCj4gLXJldHJ5Ogo+IC0JLyogRkRJIGlzIGEgYmluYXJ5IHNpZ25hbCBydW5uaW5nIGF0IH4y LjdHSHosIGVuY29kaW5nCj4gLQkgKiBlYWNoIG91dHB1dCBvY3RldCBhcyAxMCBiaXRzLiBUaGUg YWN0dWFsIGZyZXF1ZW5jeQo+IC0JICogaXMgc3RvcmVkIGFzIGEgZGl2aWRlciBpbnRvIGEgMTAw TUh6IGNsb2NrLCBhbmQgdGhlCj4gLQkgKiBtb2RlIHBpeGVsIGNsb2NrIGlzIHN0b3JlZCBpbiB1 bml0cyBvZiAxS0h6Lgo+IC0JICogSGVuY2UgdGhlIGJ3IG9mIGVhY2ggbGFuZSBpbiB0ZXJtcyBv ZiB0aGUgbW9kZSBzaWduYWwKPiAtCSAqIGlzOgo+IC0JICovCj4gLQlsaW5rX2J3ID0gaW50ZWxf ZmRpX2xpbmtfZnJlcShpOTE1LCBwaXBlX2NvbmZpZyk7Cj4gLQo+IC0JZmRpX2RvdGNsb2NrID0g YWRqdXN0ZWRfbW9kZS0+Y3J0Y19jbG9jazsKPiAtCj4gLQlsYW5lID0gaWxrX2dldF9sYW5lc19y ZXF1aXJlZChmZGlfZG90Y2xvY2ssIGxpbmtfYncsCj4gLQkJCQkgICAgICBwaXBlX2NvbmZpZy0+ cGlwZV9icHApOwo+IC0KPiAtCXBpcGVfY29uZmlnLT5mZGlfbGFuZXMgPSBsYW5lOwo+IC0KPiAt CWludGVsX2xpbmtfY29tcHV0ZV9tX24ocGlwZV9jb25maWctPnBpcGVfYnBwLCBsYW5lLCBmZGlf ZG90Y2xvY2ssCj4gLQkJCSAgICAgICBsaW5rX2J3LCAmcGlwZV9jb25maWctPmZkaV9tX24sIGZh bHNlLCBmYWxzZSk7Cj4gLQo+IC0JcmV0ID0gaWxrX2NoZWNrX2ZkaV9sYW5lcyhkZXYsIGludGVs X2NydGMtPnBpcGUsIHBpcGVfY29uZmlnKTsKPiAtCWlmIChyZXQgPT0gLUVERUFETEspCj4gLQkJ cmV0dXJuIHJldDsKPiAtCj4gLQlpZiAocmV0ID09IC1FSU5WQUwgJiYgcGlwZV9jb25maWctPnBp cGVfYnBwID4gNiozKSB7Cj4gLQkJcGlwZV9jb25maWctPnBpcGVfYnBwIC09IDIqMzsKPiAtCQlk cm1fZGJnX2ttcygmaTkxNS0+ZHJtLAo+IC0JCQkgICAgImZkaSBsaW5rIGJ3IGNvbnN0cmFpbnQs IHJlZHVjaW5nIHBpcGUgYnBwIHRvICVpXG4iLAo+IC0JCQkgICAgcGlwZV9jb25maWctPnBpcGVf YnBwKTsKPiAtCQluZWVkc19yZWNvbXB1dGUgPSB0cnVlOwo+IC0JCXBpcGVfY29uZmlnLT5id19j b25zdHJhaW5lZCA9IHRydWU7Cj4gLQo+IC0JCWdvdG8gcmV0cnk7Cj4gLQl9Cj4gLQo+IC0JaWYg KG5lZWRzX3JlY29tcHV0ZSkKPiAtCQlyZXR1cm4gUkVUUlk7Cj4gLQo+IC0JcmV0dXJuIHJldDsK PiAtfQo+IC0KPiAgYm9vbCBoc3dfY3J0Y19zdGF0ZV9pcHNfY2FwYWJsZShjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAgewo+ICAJc3RydWN0IGludGVsX2NydGMg KmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4gQEAgLTExMzIy LDcgKzEwNjUwLDcgQEAgaW50ZWxfbW9kZXNldF9waXBlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfYXRv bWljX3N0YXRlICpzdGF0ZSwKPiAgCQlyZXR1cm4gcmV0Owo+ICAJfQo+ICAKPiAtCWlmIChyZXQg PT0gUkVUUlkpIHsKPiArCWlmIChyZXQgPT0gSTkxNV9ESVNQTEFZX0NPTkZJR19SRVRSWSkgewo+ ICAJCWlmIChkcm1fV0FSTigmaTkxNS0+ZHJtLCAhcmV0cnksCj4gIAkJCSAgICAgImxvb3AgaW4g cGlwZSBjb25maWd1cmF0aW9uIGNvbXB1dGF0aW9uXG4iKSkKPiAgCQkJcmV0dXJuIC1FSU5WQUw7 Cj4gQEAgLTE1MTIxLDE0ICsxNDQ0OSw3IEBAIHZvaWQgaW50ZWxfaW5pdF9kaXNwbGF5X2hvb2tz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQlkZXZfcHJpdi0+ZGlzcGxh eS5jcnRjX2Rpc2FibGUgPSBpOXh4X2NydGNfZGlzYWJsZTsKPiAgCX0KPiAgCj4gLQlpZiAoSVNf R0VOKGRldl9wcml2LCA1KSkgewo+IC0JCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWlu ID0gaWxrX2ZkaV9saW5rX3RyYWluOwo+IC0JfSBlbHNlIGlmIChJU19HRU4oZGV2X3ByaXYsIDYp KSB7Cj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBnZW42X2ZkaV9saW5r X3RyYWluOwo+IC0JfSBlbHNlIGlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7Cj4gLQkJLyog RklYTUU6IGRldGVjdCBCMCsgc3RlcHBpbmcgYW5kIHVzZSBhdXRvIHRyYWluaW5nICovCj4gLQkJ ZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBpdmJfbWFudWFsX2ZkaV9saW5rX3Ry YWluOwo+IC0JfQo+ICsJaW50ZWxfZmRpX2luaXRfaG9vayhkZXZfcHJpdik7Cj4gIAo+ICAJaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkgewo+ICAJCWRldl9wcml2LT5kaXNwbGF5LmNvbW1p dF9tb2Rlc2V0X2VuYWJsZXMgPSBza2xfY29tbWl0X21vZGVzZXRfZW5hYmxlczsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAo+IGlu ZGV4IGVkMTI5ZjgwNWEyMS4uN2NkY2YxMWIyOGRiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKPiBAQCAtMTg1Miw0ICsx ODUyLDEzIEBAIHN0YXRpYyBpbmxpbmUgdTMyIGk5eHhfZHBsbF9jb21wdXRlX2ZwKHN0cnVjdCBk cGxsICpkcGxsKQo+ICAJcmV0dXJuIGRwbGwtPm4gPDwgMTYgfCBkcGxsLT5tMSA8PCA4IHwgZHBs bC0+bTI7Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGludGVsX2ZkaV9saW5rX2ZyZXEo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQo+ICt7Cj4gKwlpZiAoSEFTX0RESShk ZXZfcHJpdikpCj4gKwkJcmV0dXJuIHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrOyAvKiBTUExMICov Cj4gKwllbHNlCj4gKwkJcmV0dXJuIGRldl9wcml2LT5mZGlfcGxsX2ZyZXE7Cj4gK30KPiArCj4g ICNlbmRpZiAvKiAgX19JTlRFTF9ESVNQTEFZX1RZUEVTX0hfXyAqLwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi5iMmViOTZhZTEwYTIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuYwo+IEBAIC0wLDAgKzEsNjgzIEBACj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArLyoKPiArICogQ29weXJpZ2h0IMKp IDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKyNpbmNsdWRlICJpbnRlbF9hdG9taWMu aCIKPiArI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKPiArI2luY2x1ZGUgImludGVs X2ZkaS5oIgo+ICsKPiArLyogdW5pdHMgb2YgMTAwTUh6ICovCj4gK3N0YXRpYyBpbnQgcGlwZV9y ZXF1aXJlZF9mZGlfbGFuZXMoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4g K3sKPiArCWlmIChjcnRjX3N0YXRlLT5ody5lbmFibGUgJiYgY3J0Y19zdGF0ZS0+aGFzX3BjaF9l bmNvZGVyKQo+ICsJCXJldHVybiBjcnRjX3N0YXRlLT5mZGlfbGFuZXM7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWxrX2NoZWNrX2ZkaV9sYW5lcyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSwKPiArCQkJICAgICAgIHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ICsJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlID0gcGlwZV9jb25maWctPnVhcGkuc3RhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqb3Ro ZXJfY3J0YzsKPiArCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvdGhlcl9jcnRjX3N0YXRlOwo+ ICsKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCSAgICAiY2hlY2tpbmcgZmRp IGNvbmZpZyBvbiBwaXBlICVjLCBsYW5lcyAlaVxuIiwKPiArCQkgICAgcGlwZV9uYW1lKHBpcGUp LCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKPiArCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVz ID4gNCkgewo+ICsJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCQkgICAgImludmFs aWQgZmRpIGxhbmUgY29uZmlnIG9uIHBpcGUgJWM6ICVpIGxhbmVzXG4iLAo+ICsJCQkgICAgcGlw ZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCX0KPiArCj4gKwlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxM KGRldl9wcml2KSkgewo+ICsJCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzID4gMikgewo+ICsJ CQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkJCSAgICAib25seSAyIGxhbmVzIG9u IGhhc3dlbGwsIHJlcXVpcmVkOiAlaSBsYW5lc1xuIiwKPiArCQkJCSAgICBwaXBlX2NvbmZpZy0+ ZmRpX2xhbmVzKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfSBlbHNlIHsKPiArCQkJcmV0 dXJuIDA7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChJTlRFTF9OVU1fUElQRVMoZGV2X3ByaXYp ID09IDIpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJLyogSXZ5YnJpZGdlIDMgcGlwZSBpcyByZWFs bHkgY29tcGxpY2F0ZWQgKi8KPiArCXN3aXRjaCAocGlwZSkgewo+ICsJY2FzZSBQSVBFX0E6Cj4g KwkJcmV0dXJuIDA7Cj4gKwljYXNlIFBJUEVfQjoKPiArCQlpZiAocGlwZV9jb25maWctPmZkaV9s YW5lcyA8PSAyKQo+ICsJCQlyZXR1cm4gMDsKPiArCj4gKwkJb3RoZXJfY3J0YyA9IGludGVsX2dl dF9jcnRjX2Zvcl9waXBlKGRldl9wcml2LCBQSVBFX0MpOwo+ICsJCW90aGVyX2NydGNfc3RhdGUg PQo+ICsJCQlpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIG90aGVyX2NydGMpOwo+ ICsJCWlmIChJU19FUlIob3RoZXJfY3J0Y19zdGF0ZSkpCj4gKwkJCXJldHVybiBQVFJfRVJSKG90 aGVyX2NydGNfc3RhdGUpOwo+ICsKPiArCQlpZiAocGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMob3Ro ZXJfY3J0Y19zdGF0ZSkgPiAwKSB7Cj4gKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ ICsJCQkJICAgICJpbnZhbGlkIHNoYXJlZCBmZGkgbGFuZSBjb25maWcgb24gcGlwZSAlYzogJWkg bGFuZXNcbiIsCj4gKwkJCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xh bmVzKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJCXJldHVybiAwOwo+ICsJY2Fz ZSBQSVBFX0M6Cj4gKwkJaWYgKHBpcGVfY29uZmlnLT5mZGlfbGFuZXMgPiAyKSB7Cj4gKwkJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCQkJICAgICJvbmx5IDIgbGFuZXMgb24gcGlw ZSAlYzogcmVxdWlyZWQgJWkgbGFuZXNcbiIsCj4gKwkJCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBw aXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsK PiArCQlvdGhlcl9jcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIFBJUEVf Qik7Cj4gKwkJb3RoZXJfY3J0Y19zdGF0ZSA9Cj4gKwkJCWludGVsX2F0b21pY19nZXRfY3J0Y19z dGF0ZShzdGF0ZSwgb3RoZXJfY3J0Yyk7Cj4gKwkJaWYgKElTX0VSUihvdGhlcl9jcnRjX3N0YXRl KSkKPiArCQkJcmV0dXJuIFBUUl9FUlIob3RoZXJfY3J0Y19zdGF0ZSk7Cj4gKwo+ICsJCWlmIChw aXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhvdGhlcl9jcnRjX3N0YXRlKSA+IDIpIHsKPiArCQkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJCQkgICAgImZkaSBsaW5rIEIgdXNlcyB0b28g bWFueSBsYW5lcyB0byBlbmFibGUgbGluayBDXG4iKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4g KwkJfQo+ICsJCXJldHVybiAwOwo+ICsJZGVmYXVsdDoKPiArCQlCVUcoKTsKPiArCX0KPiArfQo+ ICsKPiAraW50IGlsa19mZGlfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmludGVs X2NydGMsCj4gKwkJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiAr ewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2NydGMtPmJhc2UuZGV2Owo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7Cj4gKwljb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9ICZwaXBlX2NvbmZpZy0+aHcu YWRqdXN0ZWRfbW9kZTsKPiArCWludCBsYW5lLCBsaW5rX2J3LCBmZGlfZG90Y2xvY2ssIHJldDsK PiArCWJvb2wgbmVlZHNfcmVjb21wdXRlID0gZmFsc2U7Cj4gKwo+ICtyZXRyeToKPiArCS8qIEZE SSBpcyBhIGJpbmFyeSBzaWduYWwgcnVubmluZyBhdCB+Mi43R0h6LCBlbmNvZGluZwo+ICsJICog ZWFjaCBvdXRwdXQgb2N0ZXQgYXMgMTAgYml0cy4gVGhlIGFjdHVhbCBmcmVxdWVuY3kKPiArCSAq IGlzIHN0b3JlZCBhcyBhIGRpdmlkZXIgaW50byBhIDEwME1IeiBjbG9jaywgYW5kIHRoZQo+ICsJ ICogbW9kZSBwaXhlbCBjbG9jayBpcyBzdG9yZWQgaW4gdW5pdHMgb2YgMUtIei4KPiArCSAqIEhl bmNlIHRoZSBidyBvZiBlYWNoIGxhbmUgaW4gdGVybXMgb2YgdGhlIG1vZGUgc2lnbmFsCj4gKwkg KiBpczoKPiArCSAqLwo+ICsJbGlua19idyA9IGludGVsX2ZkaV9saW5rX2ZyZXEoaTkxNSwgcGlw ZV9jb25maWcpOwo+ICsKPiArCWZkaV9kb3RjbG9jayA9IGFkanVzdGVkX21vZGUtPmNydGNfY2xv Y2s7Cj4gKwo+ICsJbGFuZSA9IGlsa19nZXRfbGFuZXNfcmVxdWlyZWQoZmRpX2RvdGNsb2NrLCBs aW5rX2J3LAo+ICsJCQkJICAgICAgcGlwZV9jb25maWctPnBpcGVfYnBwKTsKPiArCj4gKwlwaXBl X2NvbmZpZy0+ZmRpX2xhbmVzID0gbGFuZTsKPiArCj4gKwlpbnRlbF9saW5rX2NvbXB1dGVfbV9u KHBpcGVfY29uZmlnLT5waXBlX2JwcCwgbGFuZSwgZmRpX2RvdGNsb2NrLAo+ICsJCQkgICAgICAg bGlua19idywgJnBpcGVfY29uZmlnLT5mZGlfbV9uLCBmYWxzZSwgZmFsc2UpOwo+ICsKPiArCXJl dCA9IGlsa19jaGVja19mZGlfbGFuZXMoZGV2LCBpbnRlbF9jcnRjLT5waXBlLCBwaXBlX2NvbmZp Zyk7Cj4gKwlpZiAocmV0ID09IC1FREVBRExLKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYg KHJldCA9PSAtRUlOVkFMICYmIHBpcGVfY29uZmlnLT5waXBlX2JwcCA+IDYqMykgewo+ICsJCXBp cGVfY29uZmlnLT5waXBlX2JwcCAtPSAyKjM7Cj4gKwkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwK PiArCQkJICAgICJmZGkgbGluayBidyBjb25zdHJhaW50LCByZWR1Y2luZyBwaXBlIGJwcCB0byAl aVxuIiwKPiArCQkJICAgIHBpcGVfY29uZmlnLT5waXBlX2JwcCk7Cj4gKwkJbmVlZHNfcmVjb21w dXRlID0gdHJ1ZTsKPiArCQlwaXBlX2NvbmZpZy0+YndfY29uc3RyYWluZWQgPSB0cnVlOwo+ICsK PiArCQlnb3RvIHJldHJ5Owo+ICsJfQo+ICsKPiArCWlmIChuZWVkc19yZWNvbXB1dGUpCj4gKwkJ cmV0dXJuIEk5MTVfRElTUExBWV9DT05GSUdfUkVUUlk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArdm9pZCBpbnRlbF9mZGlfbm9ybWFsX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpj cnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwll bnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4gKwlpOTE1X3JlZ190IHJlZzsKPiArCXUzMiB0 ZW1wOwo+ICsKPiArCS8qIGVuYWJsZSBub3JtYWwgdHJhaW4gKi8KPiArCXJlZyA9IEZESV9UWF9D VEwocGlwZSk7Cj4gKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCWlm IChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7Cj4gKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5f Tk9ORV9JVkI7Cj4gKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT05FX0lWQiB8IEZESV9UWF9F TkhBTkNFX0ZSQU1FX0VOQUJMRTsKPiArCX0gZWxzZSB7Cj4gKwkJdGVtcCAmPSB+RkRJX0xJTktf VFJBSU5fTk9ORTsKPiArCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX05PTkUgfCBGRElfVFhfRU5I QU5DRV9GUkFNRV9FTkFCTEU7Cj4gKwl9Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVn LCB0ZW1wKTsKPiArCj4gKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwo+ICsJdGVtcCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7 Cj4gKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKPiArCQl0ZW1w IHw9IEZESV9MSU5LX1RSQUlOX05PUk1BTF9DUFQ7Cj4gKwl9IGVsc2Ugewo+ICsJCXRlbXAgJj0g fkZESV9MSU5LX1RSQUlOX05PTkU7Cj4gKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT05FOwo+ ICsJfQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkhB TkNFX0ZSQU1FX0VOQUJMRSk7Cj4gKwo+ICsJLyogd2FpdCBvbmUgaWRsZSBwYXR0ZXJuIHRpbWUg Ki8KPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXVkZWxheSgx MDAwKTsKPiArCj4gKwkvKiBJVkIgd2FudHMgZXJyb3IgY29ycmVjdGlvbiBlbmFibGVkICovCj4g KwlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgcmVnLAo+ICsJCQkgICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSB8IEZESV9G U19FUlJDX0VOQUJMRSB8IEZESV9GRV9FUlJDX0VOQUJMRSk7Cj4gK30KPiArCj4gKy8qIFRoZSBG REkgbGluayB0cmFpbmluZyBmdW5jdGlvbnMgZm9yIElMSy9JYmV4cGVhay4gKi8KPiArc3RhdGlj IHZvaWQgaWxrX2ZkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICsJCQkg ICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCWVudW0gcGlwZSBwaXBl ID0gY3J0Yy0+cGlwZTsKPiArCWk5MTVfcmVnX3QgcmVnOwo+ICsJdTMyIHRlbXAsIHRyaWVzOwo+ ICsKPiArCS8qIEZESSBuZWVkcyBiaXRzIGZyb20gcGlwZSBmaXJzdCAqLwo+ICsJYXNzZXJ0X3Bp cGVfZW5hYmxlZChkZXZfcHJpdiwgY3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXIpOwo+ICsKPiAr CS8qIFRyYWluIDE6IHVtYXNrIEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9s b2NrIGJpdAo+ICsJICAgZm9yIHRyYWluIHJlc3VsdCAqLwo+ICsJcmVnID0gRkRJX1JYX0lNUihw aXBlKTsKPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdGVtcCAm PSB+RkRJX1JYX1NZTUJPTF9MT0NLOwo+ICsJdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOwo+ICsJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwlpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWcpOwo+ICsJdWRlbGF5KDE1MCk7Cj4gKwo+ICsJLyogZW5hYmxlIENQVSBGREkg VFggYW5kIFBDSCBGREkgUlggKi8KPiArCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gKwl0ZW1w ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXRlbXAgJj0gfkZESV9EUF9QT1JU X1dJRFRIX01BU0s7Cj4gKwl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZk aV9sYW5lcyk7Cj4gKwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwo+ICsJdGVtcCB8PSBG RElfTElOS19UUkFJTl9QQVRURVJOXzE7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVn LCB0ZW1wIHwgRkRJX1RYX0VOQUJMRSk7Cj4gKwo+ICsJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsK PiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdGVtcCAmPSB+RkRJ X0xJTktfVFJBSU5fTk9ORTsKPiArCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwo+ ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOwo+ ICsKPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXVkZWxheSgx NTApOwo+ICsKPiArCS8qIElyb25sYWtlIHdvcmthcm91bmQsIGVuYWJsZSBjbG9jayBwb2ludGVy IGFmdGVyIEZESSBlbmFibGUqLwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9D SElDS0VOKHBpcGUpLAo+ICsJCSAgICAgICBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX09WUik7 Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX0NISUNLRU4ocGlwZSksCj4gKwkJ ICAgICAgIEZESV9SWF9QSEFTRV9TWU5DX1BPSU5URVJfT1ZSIHwgRkRJX1JYX1BIQVNFX1NZTkNf UE9JTlRFUl9FTik7Cj4gKwo+ICsJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKPiArCWZvciAodHJp ZXMgPSAwOyB0cmllcyA8IDU7IHRyaWVzKyspIHsKPiArCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgcmVnKTsKPiArCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9J SVIgMHgleFxuIiwgdGVtcCk7Cj4gKwo+ICsJCWlmICgodGVtcCAmIEZESV9SWF9CSVRfTE9DSykp IHsKPiArCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMSBkb25lLlxu Iik7Cj4gKwkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfQklU X0xPQ0spOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwlpZiAodHJpZXMgPT0gNSkKPiAr CQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDEgZmFpbCFcbiIpOwo+ICsKPiAr CS8qIFRyYWluIDIgKi8KPiArCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gKwl0ZW1wID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05P TkU7Cj4gKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMjsKPiArCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+ICsKPiArCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7 Cj4gKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXRlbXAgJj0gfkZE SV9MSU5LX1RSQUlOX05PTkU7Cj4gKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMjsK PiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+ICsKPiArCWludGVsX2Rl X3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXVkZWxheSgxNTApOwo+ICsKPiArCXJl ZyA9IEZESV9SWF9JSVIocGlwZSk7Cj4gKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA1OyB0cmll cysrKSB7Cj4gKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwo+ICsK PiArCQlpZiAodGVtcCAmIEZESV9SWF9TWU1CT0xfTE9DSykgewo+ICsJCQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcmVnLAo+ICsJCQkJICAgICAgIHRlbXAgfCBGRElfUlhfU1lNQk9MX0xPQ0sp Owo+ICsJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAyIGRvbmUuXG4i KTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsJaWYgKHRyaWVzID09IDUpCj4gKwkJZHJt X2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAyIGZhaWwhXG4iKTsKPiArCj4gKwlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25lXG4iKTsKPiArCj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBpbnQgc25iX2JfZmRpX3RyYWluX3BhcmFtW10gPSB7Cj4gKwlGRElf TElOS19UUkFJTl80MDBNVl8wREJfU05CX0IsCj4gKwlGRElfTElOS19UUkFJTl80MDBNVl82REJf U05CX0IsCj4gKwlGRElfTElOS19UUkFJTl82MDBNVl8zXzVEQl9TTkJfQiwKPiArCUZESV9MSU5L X1RSQUlOXzgwME1WXzBEQl9TTkJfQiwKPiArfTsKPiArCj4gKy8qIFRoZSBGREkgbGluayB0cmFp bmluZyBmdW5jdGlvbnMgZm9yIFNOQi9Db3VnYXJwb2ludC4gKi8KPiArc3RhdGljIHZvaWQgZ2Vu Nl9mZGlfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArCQkJCWNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7 Cj4gKwlpOTE1X3JlZ190IHJlZzsKPiArCXUzMiB0ZW1wLCBpLCByZXRyeTsKPiArCj4gKwkvKiBU cmFpbiAxOiB1bWFzayBGREkgUlggSW50ZXJydXB0IHN5bWJvbF9sb2NrIGFuZCBiaXRfbG9jayBi aXQKPiArCSAgIGZvciB0cmFpbiByZXN1bHQgKi8KPiArCXJlZyA9IEZESV9SWF9JTVIocGlwZSk7 Cj4gKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXRlbXAgJj0gfkZE SV9SWF9TWU1CT0xfTE9DSzsKPiArCXRlbXAgJj0gfkZESV9SWF9CSVRfTE9DSzsKPiArCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+ICsKPiArCWludGVsX2RlX3Bvc3Rpbmdf cmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXVkZWxheSgxNTApOwo+ICsKPiArCS8qIGVuYWJsZSBD UFUgRkRJIFRYIGFuZCBQQ0ggRkRJIFJYICovCj4gKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwo+ ICsJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwl0ZW1wICY9IH5GRElf RFBfUE9SVF9XSURUSF9NQVNLOwo+ICsJdGVtcCB8PSBGRElfRFBfUE9SVF9XSURUSChjcnRjX3N0 YXRlLT5mZGlfbGFuZXMpOwo+ICsJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKPiArCXRl bXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwo+ICsJdGVtcCAmPSB+RkRJX0xJTktfVFJB SU5fVk9MX0VNUF9NQVNLOwo+ICsJLyogU05CLUIgKi8KPiArCXRlbXAgfD0gRkRJX0xJTktfVFJB SU5fNDAwTVZfMERCX1NOQl9COwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVt cCB8IEZESV9UWF9FTkFCTEUpOwo+ICsKPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElf UlhfTUlTQyhwaXBlKSwKPiArCQkgICAgICAgRkRJX1JYX1RQMV9UT19UUDJfNDggfCBGRElfUlhf RkRJX0RFTEFZXzkwKTsKPiArCj4gKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwo+ICsJdGVtcCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwlpZiAoSEFTX1BDSF9DUFQoZGV2X3By aXYpKSB7Cj4gKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKPiAr CQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMV9DUFQ7Cj4gKwl9IGVsc2Ugewo+ICsJ CXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Cj4gKwkJdGVtcCB8PSBGRElfTElOS19UUkFJ Tl9QQVRURVJOXzE7Cj4gKwl9Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1w IHwgRkRJX1JYX0VOQUJMRSk7Cj4gKwo+ICsJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2 LCByZWcpOwo+ICsJdWRlbGF5KDE1MCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg ewo+ICsJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gKwkJdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7Cj4gKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNL Owo+ICsJCXRlbXAgfD0gc25iX2JfZmRpX3RyYWluX3BhcmFtW2ldOwo+ICsJCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+ICsKPiArCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQo ZGV2X3ByaXYsIHJlZyk7Cj4gKwkJdWRlbGF5KDUwMCk7Cj4gKwo+ICsJCWZvciAocmV0cnkgPSAw OyByZXRyeSA8IDU7IHJldHJ5KyspIHsKPiArCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKPiAr CQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwkJCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKPiArCQkJaWYgKHRl bXAgJiBGRElfUlhfQklUX0xPQ0spIHsKPiArCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBy ZWcsCj4gKwkJCQkJICAgICAgIHRlbXAgfCBGRElfUlhfQklUX0xPQ0spOwo+ICsJCQkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJCQkJICAgICJGREkgdHJhaW4gMSBkb25lLlxuIik7 Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCQl1ZGVsYXkoNTApOwo+ICsJCX0KPiArCQlpZiAo cmV0cnkgPCA1KQo+ICsJCQlicmVhazsKPiArCX0KPiArCWlmIChpID09IDQpCj4gKwkJZHJtX2Vy cigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGZhaWwhXG4iKTsKPiArCj4gKwkvKiBUcmFp biAyICovCj4gKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwo+ICsJdGVtcCA9IGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwo+ICsJ dGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7Cj4gKwlpZiAoSVNfR0VOKGRldl9wcml2 LCA2KSkgewo+ICsJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTSzsKPiArCQkv KiBTTkItQiAqLwo+ICsJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9COwo+ ICsJfQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ICsJcmVn ID0gRkRJX1JYX0NUTChwaXBlKTsKPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwo+ICsJaWYgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSkgewo+ICsJCXRlbXAgJj0gfkZESV9M SU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7Cj4gKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9Q QVRURVJOXzJfQ1BUOwo+ICsJfSBlbHNlIHsKPiArCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9O T05FOwo+ICsJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOwo+ICsJfQo+ICsJaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ICsJaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdWRlbGF5KDE1MCk7Cj4gKwo+ICsJZm9yIChpID0g MDsgaSA8IDQ7IGkrKykgewo+ICsJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gKwkJdGVtcCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJB SU5fVk9MX0VNUF9NQVNLOwo+ICsJCXRlbXAgfD0gc25iX2JfZmRpX3RyYWluX3BhcmFtW2ldOwo+ ICsJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+ICsKPiArCQlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwkJdWRlbGF5KDUwMCk7Cj4gKwo+ICsJ CWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDU7IHJldHJ5KyspIHsKPiArCQkJcmVnID0gRkRJX1JY X0lJUihwaXBlKTsKPiArCQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4g KwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1w KTsKPiArCQkJaWYgKHRlbXAgJiBGRElfUlhfU1lNQk9MX0xPQ0spIHsKPiArCQkJCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsCj4gKwkJCQkJICAgICAgIHRlbXAgfCBGRElfUlhfU1lNQk9M X0xPQ0spOwo+ICsJCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJCQkJICAgICJG REkgdHJhaW4gMiBkb25lLlxuIik7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCQl1ZGVsYXko NTApOwo+ICsJCX0KPiArCQlpZiAocmV0cnkgPCA1KQo+ICsJCQlicmVhazsKPiArCX0KPiArCWlm IChpID09IDQpCj4gKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAyIGZhaWwh XG4iKTsKPiArCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25l LlxuIik7Cj4gK30KPiArCj4gKy8qIE1hbnVhbCBsaW5rIHRyYWluaW5nIGZvciBJdnkgQnJpZGdl IEEwIHBhcnRzICovCj4gK3N0YXRpYyB2b2lkIGl2Yl9tYW51YWxfZmRpX2xpbmtfdHJhaW4oc3Ry dWN0IGludGVsX2NydGMgKmNydGMsCj4gKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNy dGMtPmJhc2UuZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShkZXYpOwo+ICsJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+ICsJaTkxNV9yZWdf dCByZWc7Cj4gKwl1MzIgdGVtcCwgaSwgajsKPiArCj4gKwkvKiBUcmFpbiAxOiB1bWFzayBGREkg UlggSW50ZXJydXB0IHN5bWJvbF9sb2NrIGFuZCBiaXRfbG9jayBiaXQKPiArCSAgIGZvciB0cmFp biByZXN1bHQgKi8KPiArCXJlZyA9IEZESV9SWF9JTVIocGlwZSk7Cj4gKwl0ZW1wID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9DSzsK PiArCXRlbXAgJj0gfkZESV9SWF9CSVRfTE9DSzsKPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWcsIHRlbXApOwo+ICsKPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVn KTsKPiArCXVkZWxheSgxNTApOwo+ICsKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAi RkRJX1JYX0lJUiBiZWZvcmUgbGluayB0cmFpbiAweCV4XG4iLAo+ICsJCSAgICBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBGRElfUlhfSUlSKHBpcGUpKSk7Cj4gKwo+ICsJLyogVHJ5IGVhY2ggdnN3 aW5nIGFuZCBwcmVlbXBoYXNpcyBzZXR0aW5nIHR3aWNlIGJlZm9yZSBtb3Zpbmcgb24gKi8KPiAr CWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNuYl9iX2ZkaV90cmFpbl9wYXJhbSkgKiAyOyBq KyspIHsKPiArCQkvKiBkaXNhYmxlIGZpcnN0IGluIGNhc2Ugd2UgbmVlZCB0byByZXRyeSAqLwo+ ICsJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7Cj4gKwkJdGVtcCAmPSB+KEZESV9MSU5LX1RSQUlOX0FVVE8gfCBGRElfTElO S19UUkFJTl9OT05FX0lWQik7Cj4gKwkJdGVtcCAmPSB+RkRJX1RYX0VOQUJMRTsKPiArCQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKPiArCj4gKwkJcmVnID0gRkRJX1JYX0NU TChwaXBlKTsKPiArCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCQl0 ZW1wICY9IH5GRElfTElOS19UUkFJTl9BVVRPOwo+ICsJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlO X1BBVFRFUk5fTUFTS19DUFQ7Cj4gKwkJdGVtcCAmPSB+RkRJX1JYX0VOQUJMRTsKPiArCQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKPiArCj4gKwkJLyogZW5hYmxlIENQVSBG REkgVFggYW5kIFBDSCBGREkgUlggKi8KPiArCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwo+ICsJ CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJCXRlbXAgJj0gfkZESV9E UF9QT1JUX1dJRFRIX01BU0s7Cj4gKwkJdGVtcCB8PSBGRElfRFBfUE9SVF9XSURUSChjcnRjX3N0 YXRlLT5mZGlfbGFuZXMpOwo+ICsJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0lW QjsKPiArCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7Cj4gKwkJdGVtcCB8 PSBzbmJfYl9mZGlfdHJhaW5fcGFyYW1bai8yXTsKPiArCQl0ZW1wIHw9IEZESV9DT01QT1NJVEVf U1lOQzsKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX0VO QUJMRSk7Cj4gKwo+ICsJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfTUlTQyhwaXBl KSwKPiArCQkJICAgICAgIEZESV9SWF9UUDFfVE9fVFAyXzQ4IHwgRkRJX1JYX0ZESV9ERUxBWV85 MCk7Cj4gKwo+ICsJCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4gKwkJdGVtcCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJO XzFfQ1BUOwo+ICsJCXRlbXAgfD0gRkRJX0NPTVBPU0lURV9TWU5DOwo+ICsJCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfRU5BQkxFKTsKPiArCj4gKwkJaW50ZWxf ZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJCXVkZWxheSgxKTsgLyogc2hvdWxk IGJlIDAuNXVzICovCj4gKwo+ICsJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKPiArCQkJcmVn ID0gRkRJX1JYX0lJUihwaXBlKTsKPiArCQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IHJlZyk7Cj4gKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4 XG4iLCB0ZW1wKTsKPiArCj4gKwkJCWlmICh0ZW1wICYgRkRJX1JYX0JJVF9MT0NLIHx8Cj4gKwkJ CSAgICAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSAmIEZESV9SWF9CSVRfTE9DSykpIHsK PiArCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCj4gKwkJCQkJICAgICAgIHRlbXAg fCBGRElfUlhfQklUX0xPQ0spOwo+ICsJCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4g KwkJCQkJICAgICJGREkgdHJhaW4gMSBkb25lLCBsZXZlbCAlaS5cbiIsCj4gKwkJCQkJICAgIGkp Owo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQkJdWRlbGF5KDEpOyAvKiBzaG91bGQgYmUgMC41 dXMgKi8KPiArCQl9Cj4gKwkJaWYgKGkgPT0gNCkgewo+ICsJCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKPiArCQkJCSAgICAiRkRJIHRyYWluIDEgZmFpbCBvbiB2c3dpbmcgJWRcbiIsIGog LyAyKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQkvKiBUcmFpbiAyICovCj4gKwkJ cmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiArCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKPiArCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FX0lWQjsKPiArCQl0ZW1w IHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMl9JVkI7Cj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ICsJCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4gKwkJ dGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwkJdGVtcCAmPSB+RkRJX0xJ TktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKPiArCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BB VFRFUk5fMl9DUFQ7Cj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4g Kwo+ICsJCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCQl1ZGVsYXko Mik7IC8qIHNob3VsZCBiZSAxLjV1cyAqLwo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsr KSB7Cj4gKwkJCXJlZyA9IEZESV9SWF9JSVIocGlwZSk7Cj4gKwkJCXRlbXAgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWcpOwo+ICsJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZE SV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7Cj4gKwo+ICsJCQlpZiAodGVtcCAmIEZESV9SWF9TWU1C T0xfTE9DSyB8fAo+ICsJCQkgICAgKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZykgJiBGRElf UlhfU1lNQk9MX0xPQ0spKSB7Cj4gKwkJCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAo+ ICsJCQkJCSAgICAgICB0ZW1wIHwgRkRJX1JYX1NZTUJPTF9MT0NLKTsKPiArCQkJCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCQkJCSAgICAiRkRJIHRyYWluIDIgZG9uZSwgbGV2ZWwg JWkuXG4iLAo+ICsJCQkJCSAgICBpKTsKPiArCQkJCWdvdG8gdHJhaW5fZG9uZTsKPiArCQkJfQo+ ICsJCQl1ZGVsYXkoMik7IC8qIHNob3VsZCBiZSAxLjV1cyAqLwo+ICsJCX0KPiArCQlpZiAoaSA9 PSA0KQo+ICsJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkJCSAgICAiRkRJIHRy YWluIDIgZmFpbCBvbiB2c3dpbmcgJWRcbiIsIGogLyAyKTsKPiArCX0KPiArCj4gK3RyYWluX2Rv bmU6Cj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25lLlxuIik7 Cj4gK30KPiArCj4gK3ZvaWQgaWxrX2ZkaV9wbGxfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoaW50ZWxfY3J0Yy0+YmFzZS5kZXYp Owo+ICsJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+ICsJaTkxNV9yZWdfdCBy ZWc7Cj4gKwl1MzIgdGVtcDsKPiArCj4gKwkvKiBlbmFibGUgUENIIEZESSBSWCBQTEwsIHdhaXQg d2FybXVwIHBsdXMgRE1JIGxhdGVuY3kgKi8KPiArCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4g Kwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXRlbXAgJj0gfihGRElf RFBfUE9SVF9XSURUSF9NQVNLIHwgKDB4NyA8PCAxNikpOwo+ICsJdGVtcCB8PSBGRElfRFBfUE9S VF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFuZXMpOwo+ICsJdGVtcCB8PSAoaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgUElQRUNPTkYocGlwZSkpICYgUElQRUNPTkZfQlBDX01BU0spIDw8IDExOwo+ ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9QTExfRU5BQkxF KTsKPiArCj4gKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwl1ZGVs YXkoMjAwKTsKPiArCj4gKwkvKiBTd2l0Y2ggZnJvbSBSYXdjbGsgdG8gUENEY2xrICovCj4gKwl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCByZWcsIHRlbXAgfCBGRElfUENEQ0xLKTsKPiArCj4gKwlpbnRlbF9kZV9wb3N0aW5n X3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwl1ZGVsYXkoMjAwKTsKPiArCj4gKwkvKiBFbmFibGUg Q1BVIEZESSBUWCBQTEwsIGFsd2F5cyBvbiBmb3IgSXJvbmxha2UgKi8KPiArCXJlZyA9IEZESV9U WF9DVEwocGlwZSk7Cj4gKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAr CWlmICgodGVtcCAmIEZESV9UWF9QTExfRU5BQkxFKSA9PSAwKSB7Cj4gKwkJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9UWF9QTExfRU5BQkxFKTsKPiArCj4gKwkJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJCXVkZWxheSgxMDApOwo+ICsJ fQo+ICt9Cj4gKwo+ICt2b2lkIGlsa19mZGlfcGxsX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMg KmludGVsX2NydGMpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9jcnRj LT5iYXNlLmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGV2KTsKPiArCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiArCWk5MTVf cmVnX3QgcmVnOwo+ICsJdTMyIHRlbXA7Cj4gKwo+ICsJLyogU3dpdGNoIGZyb20gUENEY2xrIHRv IFJhd2NsayAqLwo+ICsJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiArCXRlbXAgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywg dGVtcCAmIH5GRElfUENEQ0xLKTsKPiArCj4gKwkvKiBEaXNhYmxlIENQVSBGREkgVFggUExMICov Cj4gKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwo+ICsJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZE SV9UWF9QTExfRU5BQkxFKTsKPiArCj4gKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYs IHJlZyk7Cj4gKwl1ZGVsYXkoMTAwKTsKPiArCj4gKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwo+ ICsJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZESV9SWF9QTExfRU5BQkxFKTsKPiArCj4gKwkvKiBX YWl0IGZvciB0aGUgY2xvY2tzIHRvIHR1cm4gb2ZmLiAqLwo+ICsJaW50ZWxfZGVfcG9zdGluZ19y ZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdWRlbGF5KDEwMCk7Cj4gK30KPiArCj4gK3ZvaWQgaWxr X2ZkaV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiArCWVu dW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKPiArCWk5MTVfcmVnX3QgcmVnOwo+ICsJdTMyIHRl bXA7Cj4gKwo+ICsJLyogZGlzYWJsZSBDUFUgRkRJIHR4IGFuZCBQQ0ggRkRJIHJ4ICovCj4gKwly ZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwo+ICsJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IHJlZyk7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZESV9UWF9F TkFCTEUpOwo+ICsJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+ICsKPiAr CXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4gKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKPiArCXRlbXAgJj0gfigweDcgPDwgMTYpOwo+ICsJdGVtcCB8PSAoaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgUElQRUNPTkYocGlwZSkpICYgUElQRUNPTkZfQlBDX01BU0spIDw8IDEx Owo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfUlhfRU5BQkxF KTsKPiArCj4gKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwl1ZGVs YXkoMTAwKTsKPiArCj4gKwkvKiBJcm9ubGFrZSB3b3JrYXJvdW5kLCBkaXNhYmxlIGNsb2NrIHBv aW50ZXIgYWZ0ZXIgZG93bmluZyBGREkgKi8KPiArCWlmIChIQVNfUENIX0lCWChkZXZfcHJpdikp Cj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9DSElDS0VOKHBpcGUpLAo+ICsJ CQkgICAgICAgRkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9PVlIpOwo+ICsKPiArCS8qIHN0aWxs IHNldCB0cmFpbiBwYXR0ZXJuIDEgKi8KPiArCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gKwl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXRlbXAgJj0gfkZESV9MSU5L X1RSQUlOX05PTkU7Cj4gKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKPiArCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+ICsKPiArCXJlZyA9IEZESV9SWF9D VEwocGlwZSk7Cj4gKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCWlm IChIQVNfUENIX0NQVChkZXZfcHJpdikpIHsKPiArCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9Q QVRURVJOX01BU0tfQ1BUOwo+ICsJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0NQ VDsKPiArCX0gZWxzZSB7Cj4gKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKPiArCQl0 ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKPiArCX0KPiArCS8qIEJQQyBpbiBGREkg cnggaXMgY29uc2lzdGVudCB3aXRoIHRoYXQgaW4gUElQRUNPTkYgKi8KPiArCXRlbXAgJj0gfigw eDA3IDw8IDE2KTsKPiArCXRlbXAgfD0gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBJUEVDT05G KHBpcGUpKSAmIFBJUEVDT05GX0JQQ19NQVNLKSA8PCAxMTsKPiArCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCByZWcsIHRlbXApOwo+ICsKPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJp diwgcmVnKTsKPiArCXVkZWxheSgxMDApOwo+ICt9Cj4gKwo+ICt2b2lkCj4gK2ludGVsX2ZkaV9p bml0X2hvb2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlpZiAo SVNfR0VOKGRldl9wcml2LCA1KSkgewo+ICsJCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3Ry YWluID0gaWxrX2ZkaV9saW5rX3RyYWluOwo+ICsJfSBlbHNlIGlmIChJU19HRU4oZGV2X3ByaXYs IDYpKSB7Cj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBnZW42X2ZkaV9s aW5rX3RyYWluOwo+ICsJfSBlbHNlIGlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7Cj4gKwkJ LyogRklYTUU6IGRldGVjdCBCMCsgc3RlcHBpbmcgYW5kIHVzZSBhdXRvIHRyYWluaW5nICovCj4g KwkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBpdmJfbWFudWFsX2ZkaV9saW5r X3RyYWluOwo+ICsJfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZmRpLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Zk aS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE5Y2QyMTY2 M2ViOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2ZkaS5oCj4gQEAgLTAsMCArMSwyMiBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogTUlUICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0 aW9uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfSU5URUxfRkRJX0hfCj4gKyNkZWZpbmUgX0lOVEVM X0ZESV9IXwo+ICsKPiArc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7Cj4gK3N0cnVjdCBpbnRlbF9j cnRjOwo+ICtzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZTsKPiArCj4gKyNkZWZpbmUgSTkxNV9ESVNQ TEFZX0NPTkZJR19SRVRSWSAxCj4gK2ludCBpbGtfZmRpX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBp bnRlbF9jcnRjICppbnRlbF9jcnRjLAo+ICsJCQkgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq cGlwZV9jb25maWcpOwo+ICt2b2lkIGludGVsX2ZkaV9ub3JtYWxfdHJhaW4oc3RydWN0IGludGVs X2NydGMgKmNydGMpOwo+ICt2b2lkIGlsa19mZGlfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0Yyk7Cj4gK3ZvaWQgaWxrX2ZkaV9wbGxfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0Yyk7Cj4gK3ZvaWQgaWxrX2ZkaV9wbGxfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiArdm9pZCBpbnRlbF9mZGlfaW5pdF9ob29rKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gKwo+ICsjZW5kaWYKCi0tIApKYW5pIE5p a3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgR3JhcGhpY3MgQ2VudGVyCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=