From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 21/22] drm/i915: Rewrite fb rotation GTT handling Date: Wed, 21 Oct 2015 14:01:01 +0200 Message-ID: <20151021120101.GL13786@phenom.ffwll.local> References: <1444840154-7804-22-git-send-email-ville.syrjala@linux.intel.com> <1444931985-26045-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f169.google.com (mail-wi0-f169.google.com [209.85.212.169]) by gabe.freedesktop.org (Postfix) with ESMTPS id BAE3D6EDF2 for ; Wed, 21 Oct 2015 05:01:05 -0700 (PDT) Received: by wicll6 with SMTP id ll6so87428458wic.0 for ; Wed, 21 Oct 2015 05:01:04 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1444931985-26045-1-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ville.syrjala@linux.intel.com Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBPY3QgMTUsIDIwMTUgYXQgMDg6NTk6NDVQTSArMDMwMCwgdmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20gd3JvdGU6Cj4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4KPiAKPiBSZWRvIHRoZSBmYiByb3RhdGlvbiBoYW5kbGluZyBp biBvcmRlciB0bzoKPiAtIGVsaW1pbmF0ZSB0aGUgTlYxMiBzcGVjaWFsIGNhc2luZwo+IC0gaGFu ZGxlIGZiLT5vZmZzZXRzW10gcHJvcGVybHkKPiAtIG1ha2UgdGhlIHJvdGF0aW9uIGhhbmRsaW5n IHJlYXNpZXIgZm9yIHRoZSBwbGFuZSBjb2RlCgpJIHRoaW5rIHRoaXMgaXMgdG9vIGJpZyBhbmQg c2hvdWxkIGJlIHNwbGl0IGEgYml0LiBUaGVyZSdzIGFsc28gYSBwaWxlIG9mCnJlbmFtZXMgbWl4 ZWQgaW50IG9uIHRvcC4KCj4gVG8gYWNoaWV2ZSB0aGVzZSBnb2FscyB3ZSByZWR1Y2UgaW50ZWxf cm90YXRpb25faW5mbyB0byBvbmx5IGNvbnRhaW4KPiAoZm9yIGVhY2ggcGxhbmUpIHRoZSByb3Rh dGVkIHZpZXcgd2lkdGgsaGVpZ2h0LHN0cmlkZSBpbiB0aWxlIHVuaXRzLAo+IGFuZCB0aGUgcGFn ZSBvZmZzZXQgaW50byB0aGUgb2JqZWN0IHdoZXJlIHRoZSBwbGFuZSBzdGFydHMuIEVhY2ggcGxh bmUKPiBpcyBoYW5kbGVkIGV4YWN0bHkgdGhlIHNhbWUgd2F5LCBubyBzcGVjaWFsIGNhc2luZyBm b3IgTlYxMiBvciBvdGhlcgo+IGZvcm1hdHMuCgpUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBwcmVw IHBhdGNoIHRvIHNwbGl0IG91dC4KCj4gV2UgdGhlbiBzdG9yZSB0aGUgY29tcHV0ZWQgcm90YXRp b25faW5mbyB1bmRlcgo+IGludGVsX2ZyYW1lYnVmZmVyIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0 byByZWNvbXB1dGUgaXQgYWdhaW4uCgpBbmQgYW5vdGhlciBvbmUsIHBsdXMgdGhlbiBmb2xsb3dp bmcgdXAgd2l0aCB0aGUgZmFsbG91dC4KClRoaXMgcGF0Y2ggYWxzbyBmaXhlcyB0aGUgaW50ZWxf cGxhbmVfb2JqX29mZnNldCBpc3N1ZSBmb3IgZWFybGllciBpbiB0aGUKc2VyaWVzLiBMb29rcyBn b29kIG90aGVyd2lzZSBmcm9tIHJlYWRpbmcgdGhyb3VnaCBpdC4KCj4gVG8gaGFuZGxlIGZiLT5v ZmZzZXRzW10gd2UgdHJlYXQgdGhlbSBhcyBhIGxpbmVhciBvZmZzZXRzIGFuZCBjb252ZXJ0Cj4g dGhlbSB0byB4L3kgb2Zmc2V0cyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcmVsZXZhbnQgR1RUIG1h cHBpbmcgKGVpdGhlcgo+IG5vcm1hbCBvciByb3RhdGVkKS4gV2Ugc3RvcmUgdGhlIHgveSBvZmZz ZXRzIHVuZGVyIGludGVsX2ZyYW1lYnVmZmVyLAo+IGFuZCBmb3Igc29tZSBleHRyYSBjb252ZW5p ZW5jZSB3ZSBhbHNvIHN0b3JlIHRoZSByb3RhdGVkIHBpdGNoIChpZS4KPiB0aWxlIGFsaWduZWQg cGxhbmUgaGVpZ2h0KS4gU28gZm9yIGVhY2ggcGxhbmUgd2UgaGF2ZSB0aGUgbm9ybWFsCj4geC95 IG9mZnNldHMsIHJvdGF0ZWQgeC95IG9mZnNldHMsIGFuZCB0aGUgcm90YXRlZCBwaXRjaC4gVGhl IG5vcm1hbAo+IHBpdGNoIGlzIGF2YWlsYWJsZSBhbHJlYWR5IGluIGZiLT5waXRjaGVzW10uCj4g Cj4gV2hpbGUgd2UncmUgZ2F0aGVyaW5nIHVwIGFsbCB0aGF0IGV4dHJhIGluZm9ybWF0aW9uLCB3 ZSBjYW4gYWxzbyBlYXNpbHkKPiBjb21wdXRlIHRoZSBzdG9yYWdlIHJlcXVpcmVtZW50cyBmb3Ig dGhlIGZyYW1lYnVmZmVyLCBzbyB0aGF0IHdlIGNhbgo+IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBp cyBiaWcgZW5vdWdoIHRvIGhvbGQgaXQuCj4gCj4gV2hlbiBpdCBjb21lcyB0aW1lIHRvIGRlYWwg d2l0aCB0aGUgcGxhbmUgc291cmNlIGNvb3JkaW5hdGVzLCB3ZSBmaXJzdAo+IHJvdGF0ZSB0aGUg Y2xpcHBlZCBzcmMgY29vcmRpbmF0ZXMgdG8gbWF0Y2ggdGhlIHJlbGV2YW50IEdUVCB2aWV3Cj4g b3JpZW50YXRpb24sIHRoZW4gYWRkIHRvIHRoZW0gdGhlIGZiIHgveSBvZmZzZXRzLiBOZXh0IHdl IGNvbXB1dGUKPiB0aGUgYWxpZ25lZCBzdXJmYWNlIHBhZ2Ugb2Zmc2V0LCBhbmQgYXMgYSByZXN1 bHQgd2UncmUgbGVmdCB3aXRoIHNvbWUKPiByZXNpZHVhbCB4L3kgb2Zmc2V0cy4gRmluYWxseSwg aWYgcmVxdWlyZWQgYnkgdGhlIGhhcmR3YXJlLCB3ZSBjb252ZXJ0Cj4gdGhlIHJlbWFpbmluZyB4 L3kgb2Zmc2V0cyBpbnRvIGEgbGluZWFyIG9mZnNldC4KPiAKPiBGb3IgZ2VuMi8zIHdlIHNpbXBs eSBza2lwIGNvbXB1dGluZyB0aGUgZmluYWwgcGFnZSBvZmZzZXQsIGFuZCBqdXN0Cj4gY29udmVy dCB0aGUgc3JjK2ZiIHgveSBvZmZzZXRzIGRpcmVjdGx5IGludG8gYSBsaW5lYXIgb2Zmc2V0IHNp bmNlCj4gdGhhdCdzIHdoYXQgdGhlIGhhcmR3YXJlIHdhbnRzLgo+IAo+IEFmdGVyIHRoaXMgYWxs IHBsYXRmb3JtcywgaW5jbHVpbmcgU0tMKywgY29tcHV0ZSB0aGVzZSB0aGluZ3MgaW4gZXhhY3Rs eQo+IHRoZSBzYW1lIHdheSAoZXhjbHVkaW5nIGFsaWduZW1udCBkaWZmZXJlbmNlcykuCj4gCj4g djI6IFVzZSBCSVQoRFJNX1JPVEFURV8yNzApIGluc3RlYWQgb2YgUk9UQVRFXzI3MCB3aGVuIHJv dGF0aW5nCj4gICAgIHBsYW5lIHNyYyBjb29yZGluYXRlcwo+ICAgICBEcm9wIHNvbWUgc3B1cmlv dXMgY2hhbmdlcyB0aGF0IGdvdCBsZWZ0IGJlaGluZCBkdXJpbmcgZGV2ZWxvcG1lbnQKPiAKPiBT aWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgoKVHdvIGNvbW1lbnRzIGJlbG93IGlubGluZS4KLURhbmllbAoKPiAtLS0KPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgIHwgIDY2ICsrLS0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCAgfCAgMTQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jIHwgNDQ4ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICB8ICAzMiArKy0KPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgIHwgMTAyICsrKystLS0tCj4gIDUg ZmlsZXMgY2hhbmdlZCwgNDAyIGluc2VydGlvbnMoKyksIDI2MCBkZWxldGlvbnMoLSkKPiAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IGluZGV4IGJiOTViODYuLjk4YWVlNmMgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0zMjU1LDExICszMjU1LDYg QEAgcm90YXRlX3BhZ2VzKGNvbnN0IGRtYV9hZGRyX3QgKmluLCB1bnNpZ25lZCBpbnQgb2Zmc2V0 LAo+ICAJdW5zaWduZWQgaW50IGNvbHVtbiwgcm93Owo+ICAJdW5zaWduZWQgaW50IHNyY19pZHg7 Cj4gIAo+IC0JaWYgKCFzZykgewo+IC0JCXN0LT5uZW50cyA9IDA7Cj4gLQkJc2cgPSBzdC0+c2ds Owo+IC0JfQo+IC0KPiAgCWZvciAoY29sdW1uID0gMDsgY29sdW1uIDwgd2lkdGg7IGNvbHVtbisr KSB7Cj4gIAkJc3JjX2lkeCA9IHN0cmlkZSAqIChoZWlnaHQgLSAxKSArIGNvbHVtbjsKPiAgCQlm b3IgKHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93KyspIHsKPiBAQCAtMzI4MCwxNiArMzI3NSwx NCBAQCByb3RhdGVfcGFnZXMoY29uc3QgZG1hX2FkZHJfdCAqaW4sIHVuc2lnbmVkIGludCBvZmZz ZXQsCj4gIH0KPiAgCj4gIHN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKgo+IC1pbnRlbF9yb3RhdGVf ZmJfb2JqX3BhZ2VzKHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbywKPiAraW50 ZWxfcm90YXRlX2ZiX29ial9wYWdlcyhjb25zdCBzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAq aW5mbywKPiAgCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICB7Cj4gLQl1 bnNpZ25lZCBpbnQgc2l6ZV9wYWdlcyA9IHJvdF9pbmZvLT5zaXplID4+IFBBR0VfU0hJRlQ7Cj4g LQl1bnNpZ25lZCBpbnQgc2l6ZV9wYWdlc191djsKPiArCXVuc2lnbmVkIGludCBzaXplID0gaW50 ZWxfcm90YXRpb25faW5mb19zaXplKGluZm8pOwo+ICAJc3RydWN0IHNnX3BhZ2VfaXRlciBzZ19p dGVyOwo+ICAJdW5zaWduZWQgbG9uZyBpOwo+ICAJZG1hX2FkZHJfdCAqcGFnZV9hZGRyX2xpc3Q7 Cj4gIAlzdHJ1Y3Qgc2dfdGFibGUgKnN0Owo+IC0JdW5zaWduZWQgaW50IHV2X3N0YXJ0X3BhZ2U7 Cj4gIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ICAJaW50IHJldCA9IC1FTk9NRU07Cj4gIAo+ IEBAIC0zMjk5LDU3ICszMjkyLDMyIEBAIGludGVsX3JvdGF0ZV9mYl9vYmpfcGFnZXMoc3RydWN0 IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9pbmZvLAo+ICAJaWYgKCFwYWdlX2FkZHJfbGlzdCkK PiAgCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICAKPiAtCS8qIEFjY291bnQgZm9yIFVWIHBsYW5l IHdpdGggTlYxMi4gKi8KPiAtCWlmIChyb3RfaW5mby0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JN QVRfTlYxMikKPiAtCQlzaXplX3BhZ2VzX3V2ID0gcm90X2luZm8tPnNpemVfdXYgPj4gUEFHRV9T SElGVDsKPiAtCWVsc2UKPiAtCQlzaXplX3BhZ2VzX3V2ID0gMDsKPiAtCj4gIAkvKiBBbGxvY2F0 ZSB0YXJnZXQgU0cgbGlzdC4gKi8KPiAgCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tF Uk5FTCk7Cj4gIAlpZiAoIXN0KQo+ICAJCWdvdG8gZXJyX3N0X2FsbG9jOwo+ICAKPiAtCXJldCA9 IHNnX2FsbG9jX3RhYmxlKHN0LCBzaXplX3BhZ2VzICsgc2l6ZV9wYWdlc191diwgR0ZQX0tFUk5F TCk7Cj4gKwlyZXQgPSBzZ19hbGxvY190YWJsZShzdCwgc2l6ZSwgR0ZQX0tFUk5FTCk7Cj4gIAlp ZiAocmV0KQo+ICAJCWdvdG8gZXJyX3NnX2FsbG9jOwo+ICAKPiAgCS8qIFBvcHVsYXRlIHNvdXJj ZSBwYWdlIGxpc3QgZnJvbSB0aGUgb2JqZWN0LiAqLwo+ICAJaSA9IDA7Cj4gIAlmb3JfZWFjaF9z Z19wYWdlKG9iai0+cGFnZXMtPnNnbCwgJnNnX2l0ZXIsIG9iai0+cGFnZXMtPm5lbnRzLCAwKSB7 Cj4gLQkJcGFnZV9hZGRyX2xpc3RbaV0gPSBzZ19wYWdlX2l0ZXJfZG1hX2FkZHJlc3MoJnNnX2l0 ZXIpOwo+IC0JCWkrKzsKPiArCQlwYWdlX2FkZHJfbGlzdFtpKytdID0gc2dfcGFnZV9pdGVyX2Rt YV9hZGRyZXNzKCZzZ19pdGVyKTsKPiAgCX0KPiAgCj4gLQkvKiBSb3RhdGUgdGhlIHBhZ2VzLiAq Lwo+IC0Jc2cgPSByb3RhdGVfcGFnZXMocGFnZV9hZGRyX2xpc3QsIDAsCj4gLQkJICAgICByb3Rf aW5mby0+d2lkdGhfcGFnZXMsIHJvdF9pbmZvLT5oZWlnaHRfcGFnZXMsCj4gLQkJICAgICByb3Rf aW5mby0+d2lkdGhfcGFnZXMsCj4gLQkJICAgICBzdCwgTlVMTCk7Cj4gKwlzdC0+bmVudHMgPSAw Owo+ICsJc2cgPSBzdC0+c2dsOwo+ICAKPiAtCS8qIEFwcGVuZCB0aGUgVVYgcGxhbmUgaWYgTlYx Mi4gKi8KPiAtCWlmIChyb3RfaW5mby0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfTlYxMikg ewo+IC0JCXV2X3N0YXJ0X3BhZ2UgPSBzaXplX3BhZ2VzOwo+IC0KPiAtCQkvKiBDaGVjayBmb3Ig dGlsZS1yb3cgdW4tYWxpZ25tZW50LiAqLwo+IC0JCWlmIChvZmZzZXRfaW5fcGFnZShyb3RfaW5m by0+dXZfb2Zmc2V0KSkKPiAtCQkJdXZfc3RhcnRfcGFnZS0tOwo+IC0KPiAtCQlyb3RfaW5mby0+ dXZfc3RhcnRfcGFnZSA9IHV2X3N0YXJ0X3BhZ2U7Cj4gLQo+IC0JCXJvdGF0ZV9wYWdlcyhwYWdl X2FkZHJfbGlzdCwgdXZfc3RhcnRfcGFnZSwKPiAtCQkJICAgICByb3RfaW5mby0+d2lkdGhfcGFn ZXNfdXYsCj4gLQkJCSAgICAgcm90X2luZm8tPmhlaWdodF9wYWdlc191diwKPiAtCQkJICAgICBy b3RfaW5mby0+d2lkdGhfcGFnZXNfdXYsCj4gLQkJCSAgICAgc3QsIHNnKTsKPiArCWZvciAoaSA9 IDAgOyBpIDwgQVJSQVlfU0laRShpbmZvLT5wbGFuZSk7IGkrKykgewo+ICsJCXNnID0gcm90YXRl X3BhZ2VzKHBhZ2VfYWRkcl9saXN0LCBpbmZvLT5wbGFuZVtpXS5vZmZzZXQsCj4gKwkJCQkgIGlu Zm8tPnBsYW5lW2ldLndpZHRoLCBpbmZvLT5wbGFuZVtpXS5oZWlnaHQsCj4gKwkJCQkgIGluZm8t PnBsYW5lW2ldLnN0cmlkZSwgc3QsIHNnKTsKPiAgCX0KPiAgCj4gLQlEUk1fREVCVUdfS01TKAo+ IC0JCSAgICAgICJDcmVhdGVkIHJvdGF0ZWQgcGFnZSBtYXBwaW5nIGZvciBvYmplY3Qgc2l6ZSAl enUgKHBpdGNoPSV1LCBoZWlnaHQ9JXUsIHBpeGVsX2Zvcm1hdD0weCV4LCAldXgldSB0aWxlcywg JXUgcGFnZXMgKCV1IHBsYW5lIDApKS5cbiIsCj4gLQkJICAgICAgb2JqLT5iYXNlLnNpemUsIHJv dF9pbmZvLT5waXRjaCwgcm90X2luZm8tPmhlaWdodCwKPiAtCQkgICAgICByb3RfaW5mby0+cGl4 ZWxfZm9ybWF0LCByb3RfaW5mby0+d2lkdGhfcGFnZXMsCj4gLQkJICAgICAgcm90X2luZm8tPmhl aWdodF9wYWdlcywgc2l6ZV9wYWdlcyArIHNpemVfcGFnZXNfdXYsCj4gLQkJICAgICAgc2l6ZV9w YWdlcyk7Cj4gKwlEUk1fREVCVUdfS01TKCJDcmVhdGVkIHJvdGF0ZWQgcGFnZSBtYXBwaW5nIGZv ciBvYmplY3Qgc2l6ZSAlenUgKCV1eCV1IHRpbGVzLCAldSBwYWdlcylcbiIsCj4gKwkJICAgICAg b2JqLT5iYXNlLnNpemUsIGluZm8tPnBsYW5lWzBdLndpZHRoLCBpbmZvLT5wbGFuZVswXS5oZWln aHQsIHNpemUpOwo+ICAKPiAgCWRybV9mcmVlX2xhcmdlKHBhZ2VfYWRkcl9saXN0KTsKPiAgCj4g QEAgLTMzNjAsMTIgKzMzMjgsOCBAQCBlcnJfc2dfYWxsb2M6Cj4gIGVycl9zdF9hbGxvYzoKPiAg CWRybV9mcmVlX2xhcmdlKHBhZ2VfYWRkcl9saXN0KTsKPiAgCj4gLQlEUk1fREVCVUdfS01TKAo+ IC0JCSAgICAgICJGYWlsZWQgdG8gY3JlYXRlIHJvdGF0ZWQgbWFwcGluZyBmb3Igb2JqZWN0IHNp emUgJXp1ISAoJWQpIChwaXRjaD0ldSwgaGVpZ2h0PSV1LCBwaXhlbF9mb3JtYXQ9MHgleCwgJXV4 JXUgdGlsZXMsICV1IHBhZ2VzICgldSBwbGFuZSAwKSlcbiIsCj4gLQkJICAgICAgb2JqLT5iYXNl LnNpemUsIHJldCwgcm90X2luZm8tPnBpdGNoLCByb3RfaW5mby0+aGVpZ2h0LAo+IC0JCSAgICAg IHJvdF9pbmZvLT5waXhlbF9mb3JtYXQsIHJvdF9pbmZvLT53aWR0aF9wYWdlcywKPiAtCQkgICAg ICByb3RfaW5mby0+aGVpZ2h0X3BhZ2VzLCBzaXplX3BhZ2VzICsgc2l6ZV9wYWdlc191diwKPiAt CQkgICAgICBzaXplX3BhZ2VzKTsKPiArCURSTV9ERUJVR19LTVMoIkZhaWxlZCB0byBjcmVhdGUg cm90YXRlZCBtYXBwaW5nIGZvciBvYmplY3Qgc2l6ZSAlenUhICgldXgldSB0aWxlcywgJXUgcGFn ZXMpXG4iLAo+ICsJCSAgICAgIG9iai0+YmFzZS5zaXplLCBpbmZvLT5wbGFuZVswXS53aWR0aCwg aW5mby0+cGxhbmVbMF0uaGVpZ2h0LCBzaXplKTsKPiAgCXJldHVybiBFUlJfUFRSKHJldCk7Cj4g IH0KPiAgCj4gQEAgLTM1MTYsNyArMzQ4MCw3IEBAIGk5MTVfZ2d0dF92aWV3X3NpemUoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgCWlmICh2aWV3LT50eXBlID09IEk5MTVfR0dU VF9WSUVXX05PUk1BTCkgewo+ICAJCXJldHVybiBvYmotPmJhc2Uuc2l6ZTsKPiAgCX0gZWxzZSBp ZiAodmlldy0+dHlwZSA9PSBJOTE1X0dHVFRfVklFV19ST1RBVEVEKSB7Cj4gLQkJcmV0dXJuIHZp ZXctPnJvdGF0ZWQuc2l6ZTsKPiArCQlyZXR1cm4gaW50ZWxfcm90YXRpb25faW5mb19zaXplKCZ2 aWV3LT5yb3RhdGVkKSA8PCBQQUdFX1NISUZUOwo+ICAJfSBlbHNlIGlmICh2aWV3LT50eXBlID09 IEk5MTVfR0dUVF9WSUVXX1BBUlRJQUwpIHsKPiAgCQlyZXR1cm4gdmlldy0+cGFydGlhbC5zaXpl IDw8IFBBR0VfU0hJRlQ7Cj4gIAl9IGVsc2Ugewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0 dC5oCj4gaW5kZXggNjhkZTczNC4uZWEyOGY3ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2d0dC5oCj4gQEAgLTEzNiwxNiArMTM2LDEwIEBAIGVudW0gaTkxNV9nZ3R0X3ZpZXdfdHlw ZSB7Cj4gIH07Cj4gIAo+ICBzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyB7Cj4gLQl1bnNpZ25l ZCBpbnQgaGVpZ2h0Owo+IC0JdW5zaWduZWQgaW50IHBpdGNoOwo+IC0JdW5zaWduZWQgaW50IHV2 X29mZnNldDsKPiAtCXVpbnQzMl90IHBpeGVsX2Zvcm1hdDsKPiAtCXVpbnQ2NF90IGZiX21vZGlm aWVyOwo+IC0JdW5zaWduZWQgaW50IHdpZHRoX3BhZ2VzLCBoZWlnaHRfcGFnZXM7Cj4gLQl1aW50 NjRfdCBzaXplOwo+IC0JdW5zaWduZWQgaW50IHdpZHRoX3BhZ2VzX3V2LCBoZWlnaHRfcGFnZXNf dXY7Cj4gLQl1aW50NjRfdCBzaXplX3V2Owo+IC0JdW5zaWduZWQgaW50IHV2X3N0YXJ0X3BhZ2U7 Cj4gKwlzdHJ1Y3Qgewo+ICsJCS8qIHRpbGVzICovCj4gKwkJdW5zaWduZWQgaW50IHdpZHRoLCBo ZWlnaHQsIHN0cmlkZSwgb2Zmc2V0Owo+ICsJfSBwbGFuZVsyXTsKPiAgfTsKPiAgCj4gIHN0cnVj dCBpOTE1X2dndHRfdmlldyB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGlu ZGV4IDAyOGRjNGEuLjBkY2I3MTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxh eS5jCj4gQEAgLTIyNzQsNDkgKzIyNzQsMjggQEAgaW50ZWxfZmJfYWxpZ25faGVpZ2h0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBoZWlnaHQsCj4gIAlyZXR1cm4gQUxJR04o aGVpZ2h0LCB0aWxlX2hlaWdodCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQKPiArdW5zaWduZWQg aW50IGludGVsX3JvdGF0aW9uX2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgaW50ZWxfcm90YXRpb25f aW5mbyAqaW5mbykKPiArewo+ICsJdW5zaWduZWQgaW50IHNpemUgPSAwOwo+ICsJaW50IGk7Cj4g Kwo+ICsJZm9yIChpID0gMCA7IGkgPCBBUlJBWV9TSVpFKGluZm8tPnBsYW5lKTsgaSsrKQo+ICsJ CXNpemUgKz0gaW5mby0+cGxhbmVbaV0ud2lkdGggKiBpbmZvLT5wbGFuZVtpXS5oZWlnaHQ7Cj4g Kwo+ICsJcmV0dXJuIHNpemU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gIGludGVsX2ZpbGxf ZmJfZ2d0dF92aWV3KHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldywKPiAgCQkJY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gIAkJCXVuc2lnbmVkIGludCByb3RhdGlvbikKPiAg ewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShmYi0+ZGV2 KTsKPiAtCXN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICppbmZvID0gJnZpZXctPnJvdGF0ZWQ7 Cj4gLQl1bnNpZ25lZCBpbnQgdGlsZV9zaXplLCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodCwgY3Bw Owo+IC0KPiAtCSp2aWV3ID0gaTkxNV9nZ3R0X3ZpZXdfbm9ybWFsOwo+IC0KPiAtCWlmICghaW50 ZWxfcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkq dmlldyA9IGk5MTVfZ2d0dF92aWV3X3JvdGF0ZWQ7Cj4gLQo+IC0JaW5mby0+aGVpZ2h0ID0gZmIt PmhlaWdodDsKPiAtCWluZm8tPnBpeGVsX2Zvcm1hdCA9IGZiLT5waXhlbF9mb3JtYXQ7Cj4gLQlp bmZvLT5waXRjaCA9IGZiLT5waXRjaGVzWzBdOwo+IC0JaW5mby0+dXZfb2Zmc2V0ID0gZmItPm9m ZnNldHNbMV07Cj4gLQlpbmZvLT5mYl9tb2RpZmllciA9IGZiLT5tb2RpZmllclswXTsKPiAtCj4g LQl0aWxlX3NpemUgPSBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOwo+IC0KPiAtCWNwcCA9IGRy bV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApOwo+IC0JdGlsZV93aWR0aCA9 IGludGVsX3RpbGVfd2lkdGgoZGV2X3ByaXYsIGNwcCwgZmItPm1vZGlmaWVyWzBdKTsKPiAtCXRp bGVfaGVpZ2h0ID0gdGlsZV9zaXplIC8gdGlsZV93aWR0aDsKPiAtCj4gLQlpbmZvLT53aWR0aF9w YWdlcyA9IERJVl9ST1VORF9VUChmYi0+cGl0Y2hlc1swXSwgdGlsZV93aWR0aCk7Cj4gLQlpbmZv LT5oZWlnaHRfcGFnZXMgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCwgdGlsZV9oZWlnaHQpOwo+ IC0JaW5mby0+c2l6ZSA9IGluZm8tPndpZHRoX3BhZ2VzICogaW5mby0+aGVpZ2h0X3BhZ2VzICog dGlsZV9zaXplOwo+IC0KPiAtCWlmIChpbmZvLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9O VjEyKSB7Cj4gLQkJY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwg MSk7Cj4gLQkJdGlsZV93aWR0aCA9IGludGVsX3RpbGVfd2lkdGgoZGV2X3ByaXYsIGZiLT5tb2Rp ZmllclsxXSwgY3BwKTsKPiAtCQl0aWxlX2hlaWdodCA9IHRpbGVfc2l6ZSAvIHRpbGVfd2lkdGg7 Cj4gLQo+IC0JCWluZm8tPndpZHRoX3BhZ2VzX3V2ID0gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVz WzFdLCB0aWxlX3dpZHRoKTsKPiAtCQlpbmZvLT5oZWlnaHRfcGFnZXNfdXYgPSBESVZfUk9VTkRf VVAoZmItPmhlaWdodCAvIDIsIHRpbGVfaGVpZ2h0KTsKPiAtCQlpbmZvLT5zaXplX3V2ID0gaW5m by0+d2lkdGhfcGFnZXNfdXYgKiBpbmZvLT5oZWlnaHRfcGFnZXNfdXYgKiB0aWxlX3NpemU7Cj4g KwlpZiAoaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewo+ICsJCSp2aWV3ID0g aTkxNV9nZ3R0X3ZpZXdfcm90YXRlZDsKPiArCQl2aWV3LT5yb3RhdGVkID0gdG9faW50ZWxfZnJh bWVidWZmZXIoZmIpLT5pbmZvOwo+ICsJfSBlbHNlIHsKPiArCQkqdmlldyA9IGk5MTVfZ2d0dF92 aWV3X25vcm1hbDsKPiAgCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAgfQo+ICAKPiAgc3RhdGljIHVu c2lnbmVkIGludCBpbnRlbF9saW5lYXJfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiBAQCAtMjM2OCw5ICsyMzQ3LDcgQEAgaW50ZWxfcGluX2FuZF9m ZW5jZV9mYl9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gIAo+ICAJYWxpZ25tZW50 ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSk7Cj4gIAo+ IC0JcmV0ID0gaW50ZWxfZmlsbF9mYl9nZ3R0X3ZpZXcoJnZpZXcsIGZiLCByb3RhdGlvbik7Cj4g LQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlpbnRlbF9maWxsX2ZiX2dndHRfdmlldygm dmlldywgZmIsIHJvdGF0aW9uKTsKPiAgCj4gIAkvKiBOb3RlIHRoYXQgdGhlIHcvYSBhbHNvIHJl cXVpcmVzIDY0IFBURSBvZiBwYWRkaW5nIGZvbGxvd2luZyB0aGUKPiAgCSAqIGJvLiBXZSBjdXJy ZW50bHkgZmlsbCBhbGwgdW51c2VkIFBURSB3aXRoIHRoZSBzaGFkb3cgcGFnZSBhbmQgc28KPiBA QCAtMjQzMywxOCArMjQxMCwzMSBAQCBzdGF0aWMgdm9pZCBpbnRlbF91bnBpbl9mYl9vYmooc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHVuc2lnbmVkIGludCByb3RhdGlvbgo+ICB7Cj4gIAlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKGZiKTsKPiAgCXN0 cnVjdCBpOTE1X2dndHRfdmlldyB2aWV3Owo+IC0JaW50IHJldDsKPiAgCj4gIAlXQVJOX09OKCFt dXRleF9pc19sb2NrZWQoJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCkpOwo+ICAKPiAtCXJl dCA9IGludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KCZ2aWV3LCBmYiwgcm90YXRpb24pOwo+IC0JV0FS Tl9PTkNFKHJldCwgIkNvdWxkbid0IGdldCB2aWV3IGZyb20gcGxhbmUgc3RhdGUhIik7Cj4gKwlp bnRlbF9maWxsX2ZiX2dndHRfdmlldygmdmlldywgZmIsIHJvdGF0aW9uKTsKPiAgCj4gIAlpOTE1 X2dlbV9vYmplY3RfdW5waW5fZmVuY2Uob2JqKTsKPiAgCWk5MTVfZ2VtX29iamVjdF91bnBpbl9m cm9tX2Rpc3BsYXlfcGxhbmUob2JqLCAmdmlldyk7Cj4gIH0KPiAgCj4gIC8qCj4gKyAqIENvbnZl cnQgdGhlIHgveSBvZmZzZXRzIGludG8gYSBsaW5lYXIgb2Zmc2V0Lgo+ICsgKiBPbmx5IHZhbGlk IHdpdGggMC8xODAgZGVncmVlIHJvdGF0aW9uLCB3aGljaCBpcyBmaW5lIHNpbmNlIGxpbmVhcgo+ ICsgKiBvZmZzZXQgaXMgb25seSB1c2VkIHdpdGggbGluZWFyIGJ1ZmZlcnMgb24gcHJlLWhzdyBh bmQgdGlsZWQgYnVmZmVycwo+ICsgKiB3aXRoIGdlbjIvMywgYW5kIDkwLzI3MCBkZWdyZWUgcm90 YXRpb25zIGlzbid0IHN1cHBvcnRlZCBvbiBhbnkgb2YgdGhlbS4KPiArICovCj4gK3Vuc2lnbmVk IGludCBpbnRlbF9mYl94eV90b19saW5lYXIoaW50IHgsIGludCB5LAo+ICsJCQkJICAgY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKPiArewo+ICsJdW5zaWduZWQg aW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIHBsYW5lKTsK PiArCXVuc2lnbmVkIGludCBwaXRjaCA9IGZiLT5waXRjaGVzW3BsYW5lXTsKPiArCj4gKwlyZXR1 cm4geSAqIHBpdGNoICsgeCAqIGNwcDsKPiArfQo+ICsKPiArLyoKPiAgICogUmV0dXJuIHRoZSB0 aWxlIGRpbWVuc2lvbnMgaW4gcGl4ZWwgdW5pdHMgbWF0Y2hpbmcKPiAgICogdGhlIHNwZWNpZmll ZCByb3RhdGlvbiBhbmdsZS4KPiAgICovCj4gQEAgLTI0NzUsNiArMjQ2NSw1NSBAQCBzdGF0aWMg dm9pZCBpbnRlbF9yb3RhdGVfdGlsZV9kaW1zKHVuc2lnbmVkIGludCAqdGlsZV93aWR0aCwKPiAg fQo+ICAKPiAgLyoKPiArICogQWRkIHRoZSB4L3kgb2Zmc2V0cyBkZXJpdmVkIGZyb20gZmItPm9m ZnNldHNbXSB0byB0aGUgdXNlcgo+ICsgKiBzcGVjaWZpZWQgcGxhbmUgc3JjIHgveSBvZmZzZXRz LiBUaGUgcmVzdWx0aW5nIHgveSBvZmZzZXRzCj4gKyAqIHNwZWNpZnkgdGhlIHN0YXJ0IG9mIHNj YW5vdXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBndHQgbWFwcGluZy4KPiArICovCj4gK3Zv aWQgaW50ZWxfYWRkX2ZiX29mZnNldHMoaW50ICp4LCBpbnQgKnksCj4gKwkJCSAgY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPiArCQkJICB1bnNpZ25lZCBpbnQg cm90YXRpb24pCj4gKwo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwo+ICsJY29uc3Qgc3RydWN0IGludGVsX2ZyYW1lYnVm ZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiArCXVuc2lnbmVkIGlu dCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCBwbGFuZSk7Cj4g Kwl1bnNpZ25lZCBpbnQgcGl0Y2g7Cj4gKwo+ICsJaWYgKGludGVsX3JvdGF0aW9uXzkwX29yXzI3 MChyb3RhdGlvbikpIHsKPiArCQlwaXRjaCA9IGludGVsX2ZiLT5wbGFuZVtwbGFuZV0ucm90YXRl ZC5waXRjaDsKPiArCj4gKwkJKnggKz0gaW50ZWxfZmItPnBsYW5lW3BsYW5lXS5yb3RhdGVkLng7 Cj4gKwkJKnkgKz0gaW50ZWxfZmItPnBsYW5lW3BsYW5lXS5yb3RhdGVkLnk7Cj4gKwl9IGVsc2Ug ewo+ICsJCXBpdGNoID0gZmItPnBpdGNoZXNbcGxhbmVdOwo+ICsKPiArCQkqeCArPSBpbnRlbF9m Yi0+cGxhbmVbcGxhbmVdLm5vcm1hbC54Owo+ICsJCSp5ICs9IGludGVsX2ZiLT5wbGFuZVtwbGFu ZV0ubm9ybWFsLnk7Cj4gKwl9Cj4gKwo+ICsJLyogbWluaW1pemUgeCAqLwo+ICsJaWYgKGZiLT5t b2RpZmllcltwbGFuZV0gIT0gRFJNX0ZPUk1BVF9NT0RfTk9ORSkgewo+ICsJCXVuc2lnbmVkIGlu dCB0aWxlX3NpemUsIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0Owo+ICsKPiArCQl0aWxlX3NpemUg PSBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOwo+ICsJCXRpbGVfd2lkdGggPSBpbnRlbF90aWxl X3dpZHRoKGRldl9wcml2LCBmYi0+bW9kaWZpZXJbcGxhbmVdLCBjcHApOwo+ICsJCXRpbGVfaGVp Z2h0ID0gdGlsZV9zaXplIC8gdGlsZV93aWR0aDsKPiArCj4gKwkJaW50ZWxfcm90YXRlX3RpbGVf ZGltcygmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0LAo+ICsJCQkJICAgICAgICZwaXRjaCwgY3Bw LCByb3RhdGlvbik7Cj4gKwo+ICsJCSp5ICs9ICp4IC8gcGl0Y2ggKiB0aWxlX2hlaWdodDsKPiAr CQkqeCAgPSAqeCAlIHBpdGNoOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBpbiBwaXhlbHMgKi8KPiAr CQlwaXRjaCAvPSBjcHA7Cj4gKwo+ICsJCSp5ICs9ICp4IC8gcGl0Y2g7Cj4gKwkJKnggID0gKngg JSBwaXRjaDsKPiArCX0KClRoaXMgaXMgY2FsbGVkIGJlZm9yZSB3ZSBkbyB0aGUgZW50aXJlIHBh Z2Vfb2Zmc2V0IGRhbmNlLCBzbyBJIGRvbid0IHRoaW5rCndlIG5lZWQgYSBzcGVjaWFsIGNhc2Ug Zm9yIHRpbGVkIHZzLiB1bnRpbGVkLgotRGFuaWVsCgo+ICt9Cj4gKwo+ICsvKgo+ICAgKiBBZGp1 c3QgdGhlIHBhZ2Ugb2Zmc2V0IGJ5IG1vdmluZyB0aGUgZGlmZmVyZW5jZSBpbnRvCj4gICAqIHRo ZSB4L3kgb2Zmc2V0cy4KPiAgICoKPiBAQCAtMjUxNCwyMCArMjU1MywyMyBAQCBzdGF0aWMgdm9p ZCBpbnRlbF9hZGp1c3RfcGFnZV9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4gICAqIEluIHRoZSA5 MC8yNzAgcm90YXRlZCBjYXNlLCB4IGFuZCB5IGFyZSBhc3N1bWVkCj4gICAqIHRvIGJlIGFscmVh ZHkgcm90YXRlZCB0byBtYXRjaCB0aGUgcm90YXRlZCBHVFQgdmlldywgYW5kCj4gICAqIHBpdGNo IGlzIHRoZSB0aWxlX2hlaWdodCBhbGlnbmVkIGZyYW1lYnVmZmVyIGhlaWdodC4KPiArICoKPiAr ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBkZXJpdmVkIGluZm9y bWF0aW9uCj4gKyAqIHVuZGVyIGludGVsX2ZyYW1lYnVmZmVyLCBzbyB1c2luZyBhbnkgb2YgdGhh dCBpbmZvcm1hdGlvbgo+ICsgKiBoZXJlIGlzIG5vdCBhbGxvd2VkLiBBbnl0aGluZyB1bmRlciBk cm1fZnJhbWVidWZmZXIgY2FuIGJlCj4gKyAqIHVzZWQuIFRoaXMgaXMgd2h5IHRoZSB1c2VyIGhh cyB0byBwYXNzIGluIHRoZSBwaXRjaCBzaW5jZSBpdAo+ICsgKiBpcyBzcGVjaWZpZWQgaW4gdGhl IHJvdGF0ZWQgb3JpZW50YXRpb24uCj4gICAqLwo+IC11bnNpZ25lZCBsb25nIGludGVsX2NvbXB1 dGVfcGFnZV9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4gLQkJCQkJY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPiAtCQkJCQl1bnNpZ25lZCBpbnQgcGl0Y2gsCj4g LQkJCQkJdW5zaWduZWQgaW50IHJvdGF0aW9uKQo+ICtzdGF0aWMgdW5zaWduZWQgaW50IF9pbnRl bF9jb21wdXRlX3BhZ2Vfb2Zmc2V0KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiArCQkJCQkgICAgICAgaW50ICp4LCBpbnQgKnksCj4gKwkJCQkJICAgICAgIGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gKwkJCQkJICAgICAgIHVu c2lnbmVkIGludCBwaXRjaCwKPiArCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uLAo+ ICsJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ25tZW50KQo+ICB7Cj4gLQljb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwo+ICAJdWlu dDY0X3QgZmJfbW9kaWZpZXIgPSBmYi0+bW9kaWZpZXJbcGxhbmVdOwo+ICAJdW5zaWduZWQgaW50 IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIHBsYW5lKTsKPiAt CXVuc2lnbmVkIGludCBvZmZzZXQsIGFsaWdubWVudDsKPiAtCj4gLQlhbGlnbm1lbnQgPSBpbnRl bF9zdXJmX2FsaWdubWVudChkZXZfcHJpdiwgZmJfbW9kaWZpZXIpOwo+IC0JaWYgKGFsaWdubWVu dCkKPiAtCQlhbGlnbm1lbnQtLTsKPiArCXVuc2lnbmVkIGludCBvZmZzZXQ7Cj4gIAo+ICAJaWYg KGZiX21vZGlmaWVyICE9IERSTV9GT1JNQVRfTU9EX05PTkUpIHsKPiAgCQl1bnNpZ25lZCBpbnQg dGlsZV9zaXplLCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKPiBAQCAtMjU2MCw2ICsyNjAyLDE0 NSBAQCB1bnNpZ25lZCBsb25nIGludGVsX2NvbXB1dGVfcGFnZV9vZmZzZXQoaW50ICp4LCBpbnQg KnksCj4gIAlyZXR1cm4gb2Zmc2V0ICYgfmFsaWdubWVudDsKPiAgfQo+ICAKPiArdW5zaWduZWQg aW50IGludGVsX2NvbXB1dGVfcGFnZV9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4gKwkJCQkgICAg ICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPiArCQkJCSAg ICAgICB1bnNpZ25lZCBpbnQgcGl0Y2gsCj4gKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0 aW9uKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KGZiLT5kZXYpOwo+ICsJdW5zaWduZWQgaW50IGFsaWdubWVudCA9IGludGVsX3N1cmZf YWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbcGxhbmVdKTsKPiArCj4gKwlyZXR1cm4g X2ludGVsX2NvbXB1dGVfcGFnZV9vZmZzZXQoZGV2X3ByaXYsIHgsIHksIGZiLCBwbGFuZSwgcGl0 Y2gsCj4gKwkJCQkJICByb3RhdGlvbiwgYWxpZ25tZW50ID8gKGFsaWdubWVudCAtIDEpIDogMCk7 Cj4gK30KPiArCj4gKy8qIENvbnZlcnQgdGhlIGZiLT5vZmZzZXRbXSBsaW5lYXIgb2Zmc2V0IGlu dG8geC95IG9mZnNldHMgKi8KPiArc3RhdGljIHZvaWQgaW50ZWxfZmJfb2Zmc2V0X3RvX3h5KGlu dCAqeCwgaW50ICp5LAo+ICsJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IHBsYW5lKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9j cHAoZmItPnBpeGVsX2Zvcm1hdCwgcGxhbmUpOwo+ICsJdW5zaWduZWQgaW50IHBpdGNoID0gZmIt PnBpdGNoZXNbcGxhbmVdOwo+ICsJdW5zaWduZWQgaW50IGxpbmVhcl9vZmZzZXQgPSBmYi0+b2Zm c2V0c1twbGFuZV07Cj4gKwo+ICsJKnkgPSBsaW5lYXJfb2Zmc2V0IC8gcGl0Y2g7Cj4gKwkqeCA9 IGxpbmVhcl9vZmZzZXQgJSBwaXRjaCAvIGNwcDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtp bnRlbF9maWxsX2ZiX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJ CSAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZnJh bWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwo+ICsJc3RydWN0 IGludGVsX3JvdGF0aW9uX2luZm8gKmluZm8gPSAmaW50ZWxfZmItPmluZm87Cj4gKwl1bnNpZ25l ZCBpbnQgdGlsZV9zaXplOwo+ICsJdW5zaWduZWQgaW50IGd0dF9vZmZzZXRfcm90YXRlZCA9IDA7 Cj4gKwl1bnNpZ25lZCBpbnQgbWF4X3NpemUgPSAwOwo+ICsJdWludDMyX3QgZm9ybWF0ID0gZmIt PnBpeGVsX2Zvcm1hdDsKPiArCWludCBpLCBudW1fcGxhbmVzID0gZHJtX2Zvcm1hdF9udW1fcGxh bmVzKGZvcm1hdCk7Cj4gKwo+ICsJdGlsZV9zaXplID0gaW50ZWxfdGlsZV9zaXplKGRldl9wcml2 KTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7Cj4gKwkJdW5zaWdu ZWQgaW50IHdpZHRoLCBoZWlnaHQ7Cj4gKwkJdW5zaWduZWQgaW50IGNwcCwgb2Zmc2V0LCBzaXpl Owo+ICsJCWludCB4LCB5Owo+ICsKPiArCQljcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmb3Jt YXQsIGkpOwo+ICsJCXdpZHRoID0gZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChmYi0+d2lkdGgsIGZv cm1hdCwgaSk7Cj4gKwkJaGVpZ2h0ID0gZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQoZmItPmhlaWdo dCwgZm9ybWF0LCBpKTsKPiArCj4gKwkJaW50ZWxfZmJfb2Zmc2V0X3RvX3h5KCZ4LCAmeSwgZmIs IGkpOwo+ICsKPiArCQkvKgo+ICsJCSAqIEZpcnN0IHBpeGVsIG9mIHRoZSBmcmFtZWJ1ZmZlciBm cm9tCj4gKwkJICogdGhlIHN0YXJ0IG9mIHRoZSBub3JtYWwgZ3R0IG1hcHBpbmcuCj4gKwkJICov Cj4gKwkJaW50ZWxfZmItPnBsYW5lW2ldLm5vcm1hbC54ID0geDsKPiArCQlpbnRlbF9mYi0+cGxh bmVbaV0ubm9ybWFsLnkgPSB5Owo+ICsKPiArCQlvZmZzZXQgPSBfaW50ZWxfY29tcHV0ZV9wYWdl X29mZnNldChkZXZfcHJpdiwgJngsICZ5LAo+ICsJCQkJCQkgICAgZmIsIDAsIGZiLT5waXRjaGVz W2ldLAo+ICsJCQkJCQkgICAgQklUKERSTV9ST1RBVEVfMCksCj4gKwkJCQkJCSAgICB0aWxlX3Np emUpOwo+ICsJCW9mZnNldCAvPSB0aWxlX3NpemU7Cj4gKwkJRFJNX0RFQlVHKCJwYWdlIG9mZnNl dCAldSBwYWdlc1xuIiwgb2Zmc2V0KTsKPiArCj4gKwkJaWYgKGZiLT5tb2RpZmllcltpXSAhPSBE Uk1fRk9STUFUX01PRF9OT05FKSB7Cj4gKwkJCXVuc2lnbmVkIGludCB0aWxlX3dpZHRoLCB0aWxl X2hlaWdodDsKPiArCQkJdW5zaWduZWQgaW50IHBpdGNoOwo+ICsJCQlzdHJ1Y3QgZHJtX3JlY3Qg cjsKPiArCj4gKwkJCXRpbGVfd2lkdGggPSBpbnRlbF90aWxlX3dpZHRoKGRldl9wcml2LCBmYi0+ bW9kaWZpZXJbaV0sIGNwcCk7Cj4gKwkJCXRpbGVfaGVpZ2h0ID0gdGlsZV9zaXplIC8gdGlsZV93 aWR0aDsKPiArCj4gKwkJCWluZm8tPnBsYW5lW2ldLm9mZnNldCA9IG9mZnNldDsKPiArCQkJaW5m by0+cGxhbmVbaV0uc3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVzW2ldLCB0aWxlX3dp ZHRoKTsKPiArCQkJaW5mby0+cGxhbmVbaV0ud2lkdGggPSBESVZfUk9VTkRfVVAoKHggKyB3aWR0 aCkgKiBjcHAsIHRpbGVfd2lkdGgpOwo+ICsJCQlpbmZvLT5wbGFuZVtpXS5oZWlnaHQgPSBESVZf Uk9VTkRfVVAoeSArIGhlaWdodCwgdGlsZV9oZWlnaHQpOwo+ICsKPiArCj4gKwkJCWludGVsX2Zi LT5wbGFuZVtpXS5yb3RhdGVkLnBpdGNoID0KPiArCQkJCWluZm8tPnBsYW5lW2ldLmhlaWdodCAq IHRpbGVfaGVpZ2h0Owo+ICsKPiArCQkJLyogaG93IG1hbnkgdGlsZXMgZG9lcyB0aGlzIHBsYW5l IG5lZWQgKi8KPiArCQkJc2l6ZSA9IGluZm8tPnBsYW5lW2ldLnN0cmlkZSAqIGluZm8tPnBsYW5l W2ldLmhlaWdodDsKPiArCQkJLyoKPiArCQkJICogSWYgdGhlIHBsYW5lIGlzbid0IGhvcml6b250 YWxseSB0aWxlIGFsaWduZWQsCj4gKwkJCSAqIHdlIG5lZWQgb25lIG1vcmUgdGlsZS4KPiArCQkJ ICovCj4gKwkJCWlmICh4ICE9IDApCj4gKwkJCQlzaXplKys7Cj4gKwo+ICsJCQlwaXRjaCA9IGlu dGVsX2ZiLT5wbGFuZVtpXS5yb3RhdGVkLnBpdGNoOwo+ICsKPiArCQkJLyogcm90YXRlIHRoZSB4 L3kgb2Zmc2V0cyB0byBtYXRjaCB0aGUgR1RUIHZpZXcgKi8KPiArCQkJci54MSA9IHg7Cj4gKwkJ CXIueTEgPSB5Owo+ICsJCQlyLngyID0geCArIHdpZHRoOwo+ICsJCQlyLnkyID0geSArIGhlaWdo dDsKPiArCQkJZHJtX3JlY3Rfcm90YXRlKCZyLCB3aWR0aCwgcGl0Y2gsIEJJVChEUk1fUk9UQVRF XzI3MCkpOwo+ICsJCQl4ID0gci54MTsKPiArCQkJeSA9IHIueTE7Cj4gKwo+ICsJCQlpbnRlbF9y b3RhdGVfdGlsZV9kaW1zKCZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQsICZwaXRjaCwKPiArCQkJ CQkgICAgICAgY3BwLCBCSVQoRFJNX1JPVEFURV8yNzApKTsKPiArCj4gKwkJCS8qCj4gKwkJCSAq IFdlIG9ubHkga2VlcCB0aGUgeC95IG9mZnNldHMsIHNvIHB1c2ggYWxsIG9mIHRoZQo+ICsJCQkg KiBndHQgb2Zmc2V0IGludG8gdGhlIHgveSBvZmZzZXRzLgo+ICsJCQkgKi8KPiArCQkJaW50ZWxf YWRqdXN0X3BhZ2Vfb2Zmc2V0KCZ4LCAmeSwgdGlsZV93aWR0aCwgdGlsZV9oZWlnaHQsCj4gKwkJ CQkJCSB0aWxlX3NpemUsIHBpdGNoLAo+ICsJCQkJCQkgZ3R0X29mZnNldF9yb3RhdGVkICogdGls ZV9zaXplLCAwKTsKPiArCj4gKwkJCWd0dF9vZmZzZXRfcm90YXRlZCArPSBpbmZvLT5wbGFuZVtp XS53aWR0aCAqIGluZm8tPnBsYW5lW2ldLmhlaWdodDsKPiArCj4gKwkJCS8qCj4gKwkJCSAqIEZp cnN0IHBpeGVsIG9mIHRoZSBmcmFtZWJ1ZmZlciBmcm9tCj4gKwkJCSAqIHRoZSBzdGFydCBvZiB0 aGUgcm90YXRlZCBndHQgbWFwcGluZy4KPiArCQkJICovCj4gKwkJCWludGVsX2ZiLT5wbGFuZVtp XS5yb3RhdGVkLnggPSB4Owo+ICsJCQlpbnRlbF9mYi0+cGxhbmVbaV0ucm90YXRlZC55ID0geTsK PiArCQl9IGVsc2Ugewo+ICsJCQlzaXplID0gRElWX1JPVU5EX1VQKCh5ICsgaGVpZ2h0KSAqIGZi LT5waXRjaGVzW2ldICsKPiArCQkJCQkgICAgeCAqIGNwcCwgdGlsZV9zaXplKTsKPiArCQl9Cj4g KwkJRFJNX0RFQlVHKCIlZCBvZmZzZXQgJXUsIHNpemUgJXUsIHN0cmlkZSAldSwgaGVpZ2h0ICV1 XG4iLAo+ICsJCQkgIGksIG9mZnNldCwgc2l6ZSwgaW5mby0+cGxhbmVbaV0uc3RyaWRlLCBpbmZv LT5wbGFuZVtpXS5oZWlnaHQpOwo+ICsKPiArCQkvKiBob3cgbWFueSB0aWxlcyBpbiB0b3RhbCBu ZWVkZWQgaW4gdGhlIGJvICovCj4gKwkJbWF4X3NpemUgPSBtYXgobWF4X3NpemUsIG9mZnNldCAr IHNpemUpOwo+ICsJfQo+ICsKPiArCWlmIChtYXhfc2l6ZSAqIHRpbGVfc2l6ZSA+IHRvX2ludGVs X2ZyYW1lYnVmZmVyKGZiKS0+b2JqLT5iYXNlLnNpemUpIHsKPiArCQlEUk1fREVCVUcoImZiIHRv byBiaWcgZm9yIGJvIChuZWVkICV1IGJ5dGVzLCBoYXZlICV6dSBieXRlcylcbiIsCj4gKwkJCSAg bWF4X3NpemUgKiB0aWxlX3NpemUsIHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKS0+b2JqLT5iYXNl LnNpemUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICBzdGF0aWMgaW50IGk5eHhfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0KQo+ICB7 Cj4gIAlzd2l0Y2ggKGZvcm1hdCkgewo+IEBAIC0yNzYxLDcgKzI5NDIsNyBAQCBzdGF0aWMgdm9p ZCBpOXh4X3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gIAlpbnQgcGxhbmUgPSBpbnRlbF9jcnRj LT5wbGFuZTsKPiAgCXVuc2lnbmVkIGludCByb3RhdGlvbjsKPiAtCXVuc2lnbmVkIGxvbmcgbGlu ZWFyX29mZnNldDsKPiArCXVuc2lnbmVkIGludCBsaW5lYXJfb2Zmc2V0Owo+ICAJdTMyIGRzcGNu dHI7Cj4gIAl1MzIgcmVnID0gRFNQQ05UUihwbGFuZSk7Cj4gIAlpbnQgcGl4ZWxfc2l6ZTsKPiBA QCAtMjgzOSwzMCArMzAyMCwyNSBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9wcmltYXJ5X3Bs YW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCWlmIChJU19HNFgoZGV2KSkKPiAgCQlkc3Bj bnRyIHw9IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKPiAgCj4gLQlsaW5lYXJfb2Zm c2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsgeCAqIHBpeGVsX3NpemU7Cj4gKwlpbnRlbF9hZGRf ZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gIAo+IC0JaWYgKElOVEVMX0lO Rk8oZGV2KS0+Z2VuID49IDQpIHsKPiArCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQo+ ICAJCWludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0ID0KPiAgCQkJaW50ZWxfY29tcHV0ZV9wYWdl X29mZnNldCgmeCwgJnksIGZiLCAwLAo+ICAJCQkJCQkgIGZiLT5waXRjaGVzWzBdLCByb3RhdGlv bik7Cj4gLQkJbGluZWFyX29mZnNldCAtPSBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldDsKPiAt CX0gZWxzZSB7Cj4gLQkJaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQgPSBsaW5lYXJfb2Zmc2V0 Owo+IC0JfQo+ICAKPiAgCWlmIChjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+cm90YXRpb24gPT0gQklU KERSTV9ST1RBVEVfMTgwKSkgewo+ICAJCWRzcGNudHIgfD0gRElTUFBMQU5FX1JPVEFURV8xODA7 Cj4gIAo+ICAJCXggKz0gKGludGVsX2NydGMtPmNvbmZpZy0+cGlwZV9zcmNfdyAtIDEpOwo+ICAJ CXkgKz0gKGludGVsX2NydGMtPmNvbmZpZy0+cGlwZV9zcmNfaCAtIDEpOwo+IC0KPiAtCQkvKiBG aW5kaW5nIHRoZSBsYXN0IHBpeGVsIG9mIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGRpc3BsYXkKPiAt CQlkYXRhIGFuZCBhZGRpbmcgdG8gbGluZWFyX29mZnNldCovCj4gLQkJbGluZWFyX29mZnNldCAr PQo+IC0JCQkoaW50ZWxfY3J0Yy0+Y29uZmlnLT5waXBlX3NyY19oIC0gMSkgKiBmYi0+cGl0Y2hl c1swXSArCj4gLQkJCShpbnRlbF9jcnRjLT5jb25maWctPnBpcGVfc3JjX3cgLSAxKSAqIHBpeGVs X3NpemU7Cj4gIAl9Cj4gIAo+ICsJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVh cih4LCB5LCBmYiwgMCk7Cj4gKwo+ICsJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNCkKPiAr CQlpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldCA9IGxpbmVhcl9vZmZzZXQ7Cj4gKwo+ICAJaW50 ZWxfY3J0Yy0+YWRqdXN0ZWRfeCA9IHg7Cj4gIAlpbnRlbF9jcnRjLT5hZGp1c3RlZF95ID0geTsK PiAgCj4gQEAgLTI4NzEsNyArMzA0Nyw4IEBAIHN0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX3ByaW1h cnlfcGxhbmUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJSTkxNV9XUklURShEU1BTVFJJREUo cGxhbmUpLCBmYi0+cGl0Y2hlc1swXSk7Cj4gIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0g NCkgewo+ICAJCUk5MTVfV1JJVEUoRFNQU1VSRihwbGFuZSksCj4gLQkJCSAgIGk5MTVfZ2VtX29i al9nZ3R0X29mZnNldChvYmopICsgaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQpOwo+ICsJCQkg ICBpbnRlbF9zdXJmX2d0dF9vZmZzZXQoZmIsIDAsIHJvdGF0aW9uKSArCj4gKwkJCSAgIGludGVs X2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsKPiAgCQlJOTE1X1dSSVRFKERTUFRJTEVPRkYocGxhbmUp LCAoeSA8PCAxNikgfCB4KTsKPiAgCQlJOTE1X1dSSVRFKERTUExJTk9GRihwbGFuZSksIGxpbmVh cl9vZmZzZXQpOwo+ICAJfSBlbHNlCj4gQEAgLTI4OTEsNyArMzA2OCw3IEBAIHN0YXRpYyB2b2lk IGlyb25sYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAg CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gIAlpbnQgcGxhbmUgPSBpbnRlbF9j cnRjLT5wbGFuZTsKPiAgCXVuc2lnbmVkIGludCByb3RhdGlvbjsKPiAtCXVuc2lnbmVkIGxvbmcg bGluZWFyX29mZnNldDsKPiArCXVuc2lnbmVkIGludCBsaW5lYXJfb2Zmc2V0Owo+ICAJdTMyIGRz cGNudHI7Cj4gIAl1MzIgcmVnID0gRFNQQ05UUihwbGFuZSk7Cj4gIAlpbnQgcGl4ZWxfc2l6ZTsK PiBAQCAtMjk0NiwyNiArMzEyMywyMiBAQCBzdGF0aWMgdm9pZCBpcm9ubGFrZV91cGRhdGVfcHJp bWFyeV9wbGFuZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAlpZiAoIUlTX0hBU1dFTEwoZGV2 KSAmJiAhSVNfQlJPQURXRUxMKGRldikpCj4gIAkJZHNwY250ciB8PSBESVNQUExBTkVfVFJJQ0tM RV9GRUVEX0RJU0FCTEU7Cj4gIAo+IC0JbGluZWFyX29mZnNldCA9IHkgKiBmYi0+cGl0Y2hlc1sw XSArIHggKiBwaXhlbF9zaXplOwo+ICsJaW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBmYiwg MCwgcm90YXRpb24pOwo+ICAJaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQgPQo+ICAJCWludGVs X2NvbXB1dGVfcGFnZV9vZmZzZXQoJngsICZ5LCBmYiwgMCwKPiAgCQkJCQkgIGZiLT5waXRjaGVz WzBdLCByb3RhdGlvbik7Cj4gLQlsaW5lYXJfb2Zmc2V0IC09IGludGVsX2NydGMtPmRzcGFkZHJf b2Zmc2V0Owo+ICsKPiAgCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7Cj4g IAkJZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRFXzE4MDsKPiAgCj4gIAkJaWYgKCFJU19IQVNX RUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKSB7Cj4gIAkJCXggKz0gKGludGVsX2NydGMt PmNvbmZpZy0+cGlwZV9zcmNfdyAtIDEpOwo+ICAJCQl5ICs9IChpbnRlbF9jcnRjLT5jb25maWct PnBpcGVfc3JjX2ggLSAxKTsKPiAtCj4gLQkJCS8qIEZpbmRpbmcgdGhlIGxhc3QgcGl4ZWwgb2Yg dGhlIGxhc3QgbGluZSBvZiB0aGUgZGlzcGxheQo+IC0JCQlkYXRhIGFuZCBhZGRpbmcgdG8gbGlu ZWFyX29mZnNldCovCj4gLQkJCWxpbmVhcl9vZmZzZXQgKz0KPiAtCQkJCShpbnRlbF9jcnRjLT5j b25maWctPnBpcGVfc3JjX2ggLSAxKSAqIGZiLT5waXRjaGVzWzBdICsKPiAtCQkJCShpbnRlbF9j cnRjLT5jb25maWctPnBpcGVfc3JjX3cgLSAxKSAqIHBpeGVsX3NpemU7Cj4gIAkJfQo+ICAJfQo+ ICAKPiArCWxpbmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5lYXIoeCwgeSwgZmIsIDAp Owo+ICsKPiAgCWludGVsX2NydGMtPmFkanVzdGVkX3ggPSB4Owo+ICAJaW50ZWxfY3J0Yy0+YWRq dXN0ZWRfeSA9IHk7Cj4gIAo+IEBAIC0yOTczLDcgKzMxNDYsOCBAQCBzdGF0aWMgdm9pZCBpcm9u bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAo+ICAJ STkxNV9XUklURShEU1BTVFJJREUocGxhbmUpLCBmYi0+cGl0Y2hlc1swXSk7Cj4gIAlJOTE1X1dS SVRFKERTUFNVUkYocGxhbmUpLAo+IC0JCSAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmop ICsgaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQpOwo+ICsJCSAgIGludGVsX3N1cmZfZ3R0X29m ZnNldChmYiwgMCwgcm90YXRpb24pICsKPiArCQkgICBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNl dCk7Cj4gIAlpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElTX0JST0FEV0VMTChkZXYpKSB7Cj4gIAkJ STkxNV9XUklURShEU1BPRkZTRVQocGxhbmUpLCAoeSA8PCAxNikgfCB4KTsKPiAgCX0gZWxzZSB7 Cj4gQEAgLTMwMDAsMzAgKzMxNzQsMTUgQEAgdTMyIGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQo Y29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJfQo+ICB9Cj4gIAo+ IC11bnNpZ25lZCBsb25nIGludGVsX3BsYW5lX29ial9vZmZzZXQoc3RydWN0IGludGVsX3BsYW5l ICppbnRlbF9wbGFuZSwKPiAtCQkJCSAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKPiAtCQkJCSAgICAgdW5zaWduZWQgaW50IHBsYW5lKQo+ICt1bnNpZ25lZCBpbnQgaW50ZWxf c3VyZl9ndHRfb2Zmc2V0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4g KwkJCQkgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCgpJZiB5b3Ugd2FudCB0byBmcm9iIHRoZSBp bnRlcmZhY2UsIHRoZW4gSSdkIHJlcGxhY2UgdGhlIGZiIGFuZCByb3RhdGlvbgp3aXRoIHRoZSBw bGFuZSBzdGF0ZS4KCj4gIHsKPiAtCWNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldyA9 ICZpOTE1X2dndHRfdmlld19ub3JtYWw7Cj4gLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAtCXVu c2lnbmVkIGNoYXIgKm9mZnNldDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmog PSBpbnRlbF9mYl9vYmooZmIpOwo+ICsJc3RydWN0IGk5MTVfZ2d0dF92aWV3IHZpZXc7Cj4gIAo+ IC0JaWYgKGludGVsX3JvdGF0aW9uXzkwX29yXzI3MChpbnRlbF9wbGFuZS0+YmFzZS5zdGF0ZS0+ cm90YXRpb24pKQo+IC0JCXZpZXcgPSAmaTkxNV9nZ3R0X3ZpZXdfcm90YXRlZDsKPiArCWludGVs X2ZpbGxfZmJfZ2d0dF92aWV3KCZ2aWV3LCBmYiwgcm90YXRpb24pOwo+ICAKPiAtCXZtYSA9IGk5 MTVfZ2VtX29ial90b19nZ3R0X3ZpZXcob2JqLCB2aWV3KTsKPiAtCWlmIChXQVJOKCF2bWEsICJn Z3R0IHZtYSBmb3IgZGlzcGxheSBvYmplY3Qgbm90IGZvdW5kISAodmlldz0ldSlcbiIsCj4gLQkJ dmlldy0+dHlwZSkpCj4gLQkJcmV0dXJuIC0xOwo+IC0KPiAtCW9mZnNldCA9ICh1bnNpZ25lZCBj aGFyICopdm1hLT5ub2RlLnN0YXJ0Owo+IC0KPiAtCWlmIChwbGFuZSA9PSAxKSB7Cj4gLQkJb2Zm c2V0ICs9IHZtYS0+Z2d0dF92aWV3LnJvdGF0ZWQudXZfc3RhcnRfcGFnZSAqCj4gLQkJCSAgUEFH RV9TSVpFOwo+IC0JfQo+IC0KPiAtCXJldHVybiAodW5zaWduZWQgbG9uZylvZmZzZXQ7Cj4gKwly ZXR1cm4gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0X3ZpZXcob2JqLCAmdmlldyk7Cj4gIH0KPiAg Cj4gIHN0YXRpYyB2b2lkIHNrbF9kZXRhY2hfc2NhbGVyKHN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjLCBpbnQgaWQpCj4gQEAgLTMxNDIsMTggKzMzMDEsMTYgQEAgc3RhdGljIHZvaWQgc2t5 bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAJc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICAJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUgPSBjcnRjLT5wcmltYXJ5Owo+ICsJc3RydWN0IGludGVsX2Zy YW1lYnVmZmVyICppbnRlbF9mYjsKPiAgCWJvb2wgdmlzaWJsZSA9IHRvX2ludGVsX3BsYW5lX3N0 YXRlKHBsYW5lLT5zdGF0ZSktPnZpc2libGU7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqOwo+ICAJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+ICAJdTMyIHBsYW5lX2N0 bCwgc3RyaWRlX2Rpdiwgc3RyaWRlOwo+IC0JdTMyIHRpbGVfaGVpZ2h0LCBwbGFuZV9vZmZzZXQs IHBsYW5lX3NpemU7Cj4gIAl1bnNpZ25lZCBpbnQgcm90YXRpb247Cj4gLQlpbnQgeF9vZmZzZXQs IHlfb2Zmc2V0Owo+ICAJdW5zaWduZWQgbG9uZyBzdXJmX2FkZHI7Cj4gIAlzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IGludGVsX2NydGMtPmNvbmZpZzsKPiAgCXN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Cj4gLQlpbnQgc3JjX3ggPSAwLCBzcmNfeSA9 IDAsIHNyY193ID0gMCwgc3JjX2ggPSAwOwo+IC0JaW50IGRzdF94ID0gMCwgZHN0X3kgPSAwLCBk c3RfdyA9IDAsIGRzdF9oID0gMDsKPiArCWludCBzcmNfdywgc3JjX2g7Cj4gKwlpbnQgZHN0X3gs IGRzdF95LCBkc3RfdywgZHN0X2g7Cj4gIAlpbnQgc2NhbGVyX2lkID0gLTE7Cj4gIAlpbnQgcGl4 ZWxfc2l6ZTsKPiAgCj4gQEAgLTMxNjYsNiArMzMyMyw3IEBAIHN0YXRpYyB2b2lkIHNreWxha2Vf dXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJCXJldHVybjsK PiAgCX0KPiAgCj4gKwlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiAgCXBp eGVsX3NpemUgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiAg Cj4gIAlwbGFuZV9jdGwgPSBQTEFORV9DVExfRU5BQkxFIHwKPiBAQCAtMzE3OSwxNiArMzMzNyw3 IEBAIHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9j cnRjICpjcnRjLAo+ICAJcm90YXRpb24gPSBwbGFuZS0+c3RhdGUtPnJvdGF0aW9uOwo+ICAJcGxh bmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfcm90YXRpb24ocm90YXRpb24pOwo+ICAKPiAtCW9iaiA9 IGludGVsX2ZiX29iaihmYik7Cj4gLQlzdHJpZGVfZGl2ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdu bWVudChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+IC0JCQkJCSAgICAgICBmYi0+cGl4ZWxf Zm9ybWF0KTsKPiAtCXN1cmZfYWRkciA9IGludGVsX3BsYW5lX29ial9vZmZzZXQodG9faW50ZWxf cGxhbmUocGxhbmUpLCBvYmosIDApOwo+IC0KPiAtCVdBUk5fT04oZHJtX3JlY3Rfd2lkdGgoJnBs YW5lX3N0YXRlLT5zcmMpID09IDApOwo+IC0KPiAgCXNjYWxlcl9pZCA9IHBsYW5lX3N0YXRlLT5z Y2FsZXJfaWQ7Cj4gLQlzcmNfeCA9IHBsYW5lX3N0YXRlLT5zcmMueDEgPj4gMTY7Cj4gLQlzcmNf eSA9IHBsYW5lX3N0YXRlLT5zcmMueTEgPj4gMTY7Cj4gIAlzcmNfdyA9IGRybV9yZWN0X3dpZHRo KCZwbGFuZV9zdGF0ZS0+c3JjKSA+PiAxNjsKPiAgCXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZw bGFuZV9zdGF0ZS0+c3JjKSA+PiAxNjsKPiAgCWRzdF94ID0gcGxhbmVfc3RhdGUtPmRzdC54MTsK PiBAQCAtMzE5NiwzMSArMzM0NSw0OCBAQCBzdGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmlt YXJ5X3BsYW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCWRzdF93ID0gZHJtX3JlY3Rfd2lk dGgoJnBsYW5lX3N0YXRlLT5kc3QpOwo+ICAJZHN0X2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5l X3N0YXRlLT5kc3QpOwo+ICAKPiAtCVdBUk5fT04oeCAhPSBzcmNfeCB8fCB5ICE9IHNyY195KTsK PiAtCj4gIAlpZiAoaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewo+IC0JCS8q IHN0cmlkZSA9IFN1cmZhY2UgaGVpZ2h0IGluIHRpbGVzICovCj4gLQkJdGlsZV9oZWlnaHQgPSBp bnRlbF90aWxlX2hlaWdodChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+IC0JCQkJCQlwaXhl bF9zaXplKTsKPiAtCQlzdHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCwgdGlsZV9oZWln aHQpOwo+IC0JCXhfb2Zmc2V0ID0gc3RyaWRlICogdGlsZV9oZWlnaHQgLSB5IC0gc3JjX2g7Cj4g LQkJeV9vZmZzZXQgPSB4Owo+IC0JCXBsYW5lX3NpemUgPSAoc3JjX3cgLSAxKSA8PCAxNiB8IChz cmNfaCAtIDEpOwo+ICsJCXN0cnVjdCBkcm1fcmVjdCByID0gewo+ICsJCQkueDEgPSB4LAo+ICsJ CQkueDIgPSB4ICsgc3JjX3csCj4gKwkJCS55MSA9IHksCj4gKwkJCS55MiA9IHkgKyBzcmNfaCwK PiArCQl9Owo+ICsKPiArCQkvKiBSb3RhdGUgc3JjIGNvb3JkaW5hdGVzIHRvIG1hdGNoIHJvdGF0 ZWQgR1RUIHZpZXcgKi8KPiArCQlkcm1fcmVjdF9yb3RhdGUoJnIsIGZiLT53aWR0aCwgZmItPmhl aWdodCwgQklUKERSTV9ST1RBVEVfMjcwKSk7Cj4gKwo+ICsJCXggPSByLngxOwo+ICsJCXkgPSBy LnkxOwo+ICsJCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnIpOwo+ICsJCXNyY19oID0gZHJtX3Jl Y3RfaGVpZ2h0KCZyKTsKPiArCj4gKwkJc3RyaWRlX2RpdiA9IGludGVsX3RpbGVfaGVpZ2h0KGRl dl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sCj4gKwkJCQkJICAgICAgIHBpeGVsX3NpemUpOwo+ICsJ CXN0cmlkZSA9IGludGVsX2ZiLT5wbGFuZVswXS5yb3RhdGVkLnBpdGNoOwo+ICAJfSBlbHNlIHsK PiAtCQlzdHJpZGUgPSBmYi0+cGl0Y2hlc1swXSAvIHN0cmlkZV9kaXY7Cj4gLQkJeF9vZmZzZXQg PSB4Owo+IC0JCXlfb2Zmc2V0ID0geTsKPiAtCQlwbGFuZV9zaXplID0gKHNyY19oIC0gMSkgPDwg MTYgfCAoc3JjX3cgLSAxKTsKPiArCQlzdHJpZGVfZGl2ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdu bWVudChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+ICsJCQkJCQkgICAgICAgZmItPnBpeGVs X2Zvcm1hdCk7Cj4gKwkJc3RyaWRlID0gZmItPnBpdGNoZXNbMF07Cj4gIAl9Cj4gLQlwbGFuZV9v ZmZzZXQgPSB5X29mZnNldCA8PCAxNiB8IHhfb2Zmc2V0Owo+ICAKPiAtCWludGVsX2NydGMtPmFk anVzdGVkX3ggPSB4X29mZnNldDsKPiAtCWludGVsX2NydGMtPmFkanVzdGVkX3kgPSB5X29mZnNl dDsKPiArCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9uKTsKPiAr CXN1cmZfYWRkciA9IGludGVsX2NvbXB1dGVfcGFnZV9vZmZzZXQoJngsICZ5LCBmYiwgMCwKPiAr CQkJCQkgICAgICBzdHJpZGUsIHJvdGF0aW9uKTsKPiArCj4gKwkvKiBTaXplcyBhcmUgMCBiYXNl ZCAqLwo+ICsJc3JjX3ctLTsKPiArCXNyY19oLS07Cj4gKwlkc3Rfdy0tOwo+ICsJZHN0X2gtLTsK PiArCj4gKwlpbnRlbF9jcnRjLT5hZGp1c3RlZF94ID0geDsKPiArCWludGVsX2NydGMtPmFkanVz dGVkX3kgPSB5Owo+ICAKPiAgCUk5MTVfV1JJVEUoUExBTkVfQ1RMKHBpcGUsIDApLCBwbGFuZV9j dGwpOwo+IC0JSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgMCksIHBsYW5lX29mZnNldCk7 Cj4gLQlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgMCksIHBsYW5lX3NpemUpOwo+IC0JSTkx NV9XUklURShQTEFORV9TVFJJREUocGlwZSwgMCksIHN0cmlkZSk7Cj4gKwlJOTE1X1dSSVRFKFBM QU5FX09GRlNFVChwaXBlLCAwKSwgKHkgPDwgMTYpIHwgeCk7Cj4gKwlJOTE1X1dSSVRFKFBMQU5F X1NUUklERShwaXBlLCAwKSwgc3RyaWRlIC8gc3RyaWRlX2Rpdik7Cj4gKwlJOTE1X1dSSVRFKFBM QU5FX1NJWkUocGlwZSwgMCksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7Cj4gIAo+ICAJaWYgKHNj YWxlcl9pZCA+PSAwKSB7Cj4gIAkJdWludDMyX3QgcHNfY3RybCA9IDA7Cj4gQEAgLTMyMzcsNyAr MzQwMyw4IEBAIHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0 IGRybV9jcnRjICpjcnRjLAo+ICAJCUk5MTVfV1JJVEUoUExBTkVfUE9TKHBpcGUsIDApLCAoZHN0 X3kgPDwgMTYpIHwgZHN0X3gpOwo+ICAJfQo+ICAKPiAtCUk5MTVfV1JJVEUoUExBTkVfU1VSRihw aXBlLCAwKSwgc3VyZl9hZGRyKTsKPiArCUk5MTVfV1JJVEUoUExBTkVfU1VSRihwaXBlLCAwKSwK PiArCQkgICBpbnRlbF9zdXJmX2d0dF9vZmZzZXQoZmIsIDAsIHJvdGF0aW9uKSArIHN1cmZfYWRk cik7Cj4gIAo+ICAJUE9TVElOR19SRUFEKFBMQU5FX1NVUkYocGlwZSwgMCkpOwo+ICB9Cj4gQEAg LTExNTIxLDggKzExNjg4LDcgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3BhZ2VfZmxpcChzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCj4gIAlpZiAocmV0KQo+ICAJCWdvdG8gY2xlYW51cF9wZW5kaW5n Owo+ICAKPiAtCXdvcmstPmd0dF9vZmZzZXQgPSBpbnRlbF9wbGFuZV9vYmpfb2Zmc2V0KHRvX2lu dGVsX3BsYW5lKHByaW1hcnkpLAo+IC0JCQkJCQkgIG9iaiwgMCk7Cj4gKwl3b3JrLT5ndHRfb2Zm c2V0ID0gaW50ZWxfc3VyZl9ndHRfb2Zmc2V0KGZiLCAwLCBwcmltYXJ5LT5zdGF0ZS0+cm90YXRp b24pOwo+ICAJd29yay0+Z3R0X29mZnNldCArPSBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldDsK PiAgCj4gIAlpZiAobW1pb19mbGlwKSB7Cj4gQEAgLTE0MzE5LDcgKzE0NDg1LDYgQEAgc3RhdGlj IGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJ CQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIHsKPiAgCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAtCXVuc2lnbmVkIGludCBh bGlnbmVkX2hlaWdodDsKPiAgCWludCByZXQ7Cj4gIAl1MzIgcGl0Y2hfbGltaXQsIHN0cmlkZV9h bGlnbm1lbnQ7Cj4gIAo+IEBAIC0xNDQ0MywxNiArMTQ2MDgsMTMgQEAgc3RhdGljIGludCBpbnRl bF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAlpZiAocmV0KQo+ ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JYWxpZ25lZF9oZWlnaHQgPSBpbnRlbF9mYl9hbGlnbl9o ZWlnaHQoZGV2LCBtb2RlX2NtZC0+aGVpZ2h0LAo+IC0JCQkJCSAgICAgICBtb2RlX2NtZC0+cGl4 ZWxfZm9ybWF0LAo+IC0JCQkJCSAgICAgICBtb2RlX2NtZC0+bW9kaWZpZXJbMF0pOwo+IC0JLyog RklYTUUgZHJtIGhlbHBlciBmb3Igc2l6ZSBjaGVja3MgKGVzcGVjaWFsbHkgcGxhbmFyIGZvcm1h dHMpPyAqLwo+IC0JaWYgKG9iai0+YmFzZS5zaXplIDwgYWxpZ25lZF9oZWlnaHQgKiBtb2RlX2Nt ZC0+cGl0Y2hlc1swXSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gIAlkcm1faGVscGVyX21v ZGVfZmlsbF9mYl9zdHJ1Y3QoJmludGVsX2ZiLT5iYXNlLCBtb2RlX2NtZCk7Cj4gIAlpbnRlbF9m Yi0+b2JqID0gb2JqOwo+ICAKPiArCXJldCA9IGludGVsX2ZpbGxfZmJfaW5mbyhkZXZfcHJpdiwg JmludGVsX2ZiLT5iYXNlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gIAly ZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZpbnRlbF9mYi0+YmFzZSwgJmludGVsX2Zi X2Z1bmNzKTsKPiAgCWlmIChyZXQpIHsKPiAgCQlEUk1fRVJST1IoImZyYW1lYnVmZmVyIGluaXQg ZmFpbGVkICVkXG4iLCByZXQpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gaW5kZXggMzZk MDQ5ZC4uMzk1YWZkMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gQEAgLTExOCw2 ICsxMTgsMTkgQEAgZW51bSBpbnRlbF9vdXRwdXRfdHlwZSB7Cj4gIHN0cnVjdCBpbnRlbF9mcmFt ZWJ1ZmZlciB7Cj4gIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGJhc2U7Cj4gIAlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsJc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gaW5m bzsKPiArCj4gKwlzdHJ1Y3Qgewo+ICsJCXN0cnVjdCB7Cj4gKwkJCS8qIHBpeGVscyAqLwo+ICsJ CQl1bnNpZ25lZCBpbnQgeCwgeTsKPiArCQl9IG5vcm1hbDsKPiArCQlzdHJ1Y3Qgewo+ICsJCQkv KiBwaXhlbHMgKi8KPiArCQkJdW5zaWduZWQgaW50IHgsIHk7Cj4gKwkJCXVuc2lnbmVkIGludCBw aXRjaDsKPiArCQl9IHJvdGF0ZWQ7Cj4gKwl9IHBsYW5lWzJdOwo+ICB9Owo+ICAKPiAgc3RydWN0 IGludGVsX2ZiZGV2IHsKPiBAQCAtMTAyOCw2ICsxMDQxLDEyIEBAIHZvaWQgaTkxNV9hdWRpb19j b21wb25lbnRfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICB2b2lk IGk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKPiAgCj4gIC8qIGludGVsX2Rpc3BsYXkuYyAqLwo+ICt1bnNpZ25lZCBpbnQgaW50 ZWxfcm90YXRpb25faW5mb19zaXplKGNvbnN0IHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpp bmZvKTsKPiArdW5zaWduZWQgaW50IGludGVsX2ZiX3h5X3RvX2xpbmVhcihpbnQgeCwgaW50IHks Cj4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKTsK PiArdm9pZCBpbnRlbF9hZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGludCAqeSwKPiArCQkJICBjb25z dCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lLAo+ICsJCQkgIHVuc2lnbmVk IGludCByb3RhdGlvbik7Cj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGlu dGVsX3BsYW5lX2Z1bmNzOwo+ICBib29sIGludGVsX2hhc19wZW5kaW5nX2ZiX3VucGluKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwo+ICBpbnQgaW50ZWxfcGNoX3Jhd2NsayhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KTsKPiBAQCAtMTEzNCwxMCArMTE1MywxMCBAQCB2b2lkIGFzc2VydF9mZGlfcnhf cGxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgdm9pZCBhc3NlcnRfcGlw ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlLCBib29s IHN0YXRlKTsKPiAgI2RlZmluZSBhc3NlcnRfcGlwZV9lbmFibGVkKGQsIHApIGFzc2VydF9waXBl KGQsIHAsIHRydWUpCj4gICNkZWZpbmUgYXNzZXJ0X3BpcGVfZGlzYWJsZWQoZCwgcCkgYXNzZXJ0 X3BpcGUoZCwgcCwgZmFsc2UpCj4gLXVuc2lnbmVkIGxvbmcgaW50ZWxfY29tcHV0ZV9wYWdlX29m ZnNldChpbnQgKngsIGludCAqeSwKPiAtCQkJCQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwgaW50IHBsYW5lLAo+IC0JCQkJCXVuc2lnbmVkIGludCBwaXRjaCwKPiAtCQkJCQl1bnNp Z25lZCBpbnQgcm90YXRpb24pOwo+ICt1bnNpZ25lZCBpbnQgaW50ZWxfY29tcHV0ZV9wYWdlX29m ZnNldChpbnQgKngsIGludCAqeSwKPiArCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgaW50IHBsYW5lLAo+ICsJCQkJICAgICAgIHVuc2lnbmVkIGludCBwaXRjaCwK PiArCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pOwo+ICB2b2lkIGludGVsX3ByZXBh cmVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gIHZvaWQgaW50ZWxfZmluaXNoX3Jl c2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICB2b2lkIGhzd19lbmFibGVfcGM4KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gQEAgLTExNzQsOSArMTE5Myw4IEBAIHZv aWQgaW50ZWxfbW9kZXNldF9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUpOwo+ICBpbnQgc2tsX3VwZGF0ZV9zY2FsZXJfY3J0YyhzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4gIGludCBza2xfbWF4X3NjYWxlKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjLCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4g IAo+IC11bnNpZ25lZCBsb25nIGludGVsX3BsYW5lX29ial9vZmZzZXQoc3RydWN0IGludGVsX3Bs YW5lICppbnRlbF9wbGFuZSwKPiAtCQkJCSAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPiAtCQkJCSAgICAgdW5zaWduZWQgaW50IHBsYW5lKTsKPiArdW5zaWduZWQgaW50IGlu dGVsX3N1cmZfZ3R0X29mZnNldChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5l LAo+ICsJCQkJICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKTsKPiAgCj4gIHUzMiBza2xfcGxhbmVf Y3RsX2Zvcm1hdCh1aW50MzJfdCBwaXhlbF9mb3JtYXQpOwo+ICB1MzIgc2tsX3BsYW5lX2N0bF90 aWxpbmcodWludDY0X3QgZmJfbW9kaWZpZXIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0 ZS5jCj4gaW5kZXggODI4YzNlYi4uZDlkMzdiMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3Nwcml0ZS5jCj4gQEAgLTE4OCwxNyArMTg4LDE1IEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0 IGRybV9wbGFuZSAqZHJtX3BsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gZHJtX3BsYW5lLT5kZXY7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAJc3RydWN0IGludGVsX3BsYW5l ICppbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKGRybV9wbGFuZSk7Cj4gLQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKGZiKTsKPiArCXN0cnVjdCBpbnRl bF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Cj4gIAlj b25zdCBpbnQgcGlwZSA9IGludGVsX3BsYW5lLT5waXBlOwo+ICAJY29uc3QgaW50IHBsYW5lID0g aW50ZWxfcGxhbmUtPnBsYW5lICsgMTsKPiAgCXUzMiBwbGFuZV9jdGwsIHN0cmlkZV9kaXYsIHN0 cmlkZTsKPiAgCWludCBwaXhlbF9zaXplID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVs X2Zvcm1hdCwgMCk7Cj4gIAljb25zdCBzdHJ1Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSAq a2V5ID0KPiAgCQkmdG9faW50ZWxfcGxhbmVfc3RhdGUoZHJtX3BsYW5lLT5zdGF0ZSktPmNrZXk7 Cj4gLQl1bnNpZ25lZCBsb25nIHN1cmZfYWRkcjsKPiAtCXUzMiB0aWxlX2hlaWdodCwgcGxhbmVf b2Zmc2V0LCBwbGFuZV9zaXplOwo+ICsJdW5zaWduZWQgaW50IHN1cmZfYWRkcjsKPiAgCXVuc2ln bmVkIGludCByb3RhdGlvbjsKPiAtCWludCB4X29mZnNldCwgeV9vZmZzZXQ7Cj4gIAlzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IHRvX2ludGVsX2NydGMoY3J0YyktPmNvbmZp ZzsKPiAgCWludCBzY2FsZXJfaWQ7Cj4gIAo+IEBAIC0yMTUsMTcgKzIxMyw4IEBAIHNrbF91cGRh dGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCj4gIAkJCQkgICAgICAgcGl4ZWxfc2l6ZSwgdHJ1ZSwKPiAgCQkJCSAgICAgICBzcmNfdyAh PSBjcnRjX3cgfHwgc3JjX2ggIT0gY3J0Y19oKTsKPiAgCj4gLQlzdHJpZGVfZGl2ID0gaW50ZWxf ZmJfc3RyaWRlX2FsaWdubWVudChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+IC0JCQkJCSAg ICAgICBmYi0+cGl4ZWxfZm9ybWF0KTsKPiAtCj4gIAlzY2FsZXJfaWQgPSB0b19pbnRlbF9wbGFu ZV9zdGF0ZShkcm1fcGxhbmUtPnN0YXRlKS0+c2NhbGVyX2lkOwo+ICAKPiAtCS8qIFNpemVzIGFy ZSAwIGJhc2VkICovCj4gLQlzcmNfdy0tOwo+IC0Jc3JjX2gtLTsKPiAtCWNydGNfdy0tOwo+IC0J Y3J0Y19oLS07Cj4gLQo+ICAJaWYgKGtleS0+ZmxhZ3MpIHsKPiAgCQlJOTE1X1dSSVRFKFBMQU5F X0tFWVZBTChwaXBlLCBwbGFuZSksIGtleS0+bWluX3ZhbHVlKTsKPiAgCQlJOTE1X1dSSVRFKFBM QU5FX0tFWU1BWChwaXBlLCBwbGFuZSksIGtleS0+bWF4X3ZhbHVlKTsKPiBAQCAtMjM3LDI3ICsy MjYsNDMgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsIHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCWVsc2UgaWYgKGtleS0+ZmxhZ3MgJiBJOTE1X1NFVF9D T0xPUktFWV9TT1VSQ0UpCj4gIAkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9LRVlfRU5BQkxFX1NP VVJDRTsKPiAgCj4gLQlzdXJmX2FkZHIgPSBpbnRlbF9wbGFuZV9vYmpfb2Zmc2V0KGludGVsX3Bs YW5lLCBvYmosIDApOwo+IC0KPiAgCWlmIChpbnRlbF9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRp b24pKSB7Cj4gLQkJLyogc3RyaWRlOiBTdXJmYWNlIGhlaWdodCBpbiB0aWxlcyAqLwo+IC0JCXRp bGVfaGVpZ2h0ID0gaW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwK PiAtCQkJCQkJcGl4ZWxfc2l6ZSk7Cj4gLQkJc3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5oZWln aHQsIHRpbGVfaGVpZ2h0KTsKPiAtCQlwbGFuZV9zaXplID0gKHNyY193IDw8IDE2KSB8IHNyY19o Owo+IC0JCXhfb2Zmc2V0ID0gc3RyaWRlICogdGlsZV9oZWlnaHQgLSB5IC0gKHNyY19oICsgMSk7 Cj4gLQkJeV9vZmZzZXQgPSB4Owo+ICsJCXN0cnVjdCBkcm1fcmVjdCByID0gewo+ICsJCQkueDEg PSB4LAo+ICsJCQkueDIgPSB4ICsgc3JjX3csCj4gKwkJCS55MSA9IHksCj4gKwkJCS55MiA9IHkg KyBzcmNfaCwKPiArCQl9Owo+ICsKPiArCQkvKiBSb3RhdGUgc3JjIGNvb3JkaW5hdGVzIHRvIG1h dGNoIHJvdGF0ZWQgR1RUIHZpZXcgKi8KPiArCQlkcm1fcmVjdF9yb3RhdGUoJnIsIGZiLT53aWR0 aCwgZmItPmhlaWdodCwgQklUKERSTV9ST1RBVEVfMjcwKSk7Cj4gKwo+ICsJCXggPSByLngxOwo+ ICsJCXkgPSByLnkxOwo+ICsJCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnIpOwo+ICsJCXNyY19o ID0gZHJtX3JlY3RfaGVpZ2h0KCZyKTsKPiArCj4gKwkJc3RyaWRlX2RpdiA9IGludGVsX3RpbGVf aGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sIHBpeGVsX3NpemUpOwo+ICsJCXN0cmlk ZSA9IGludGVsX2ZiLT5wbGFuZVswXS5yb3RhdGVkLnBpdGNoOwo+ICAJfSBlbHNlIHsKPiAtCQlz dHJpZGUgPSBmYi0+cGl0Y2hlc1swXSAvIHN0cmlkZV9kaXY7Cj4gLQkJcGxhbmVfc2l6ZSA9IChz cmNfaCA8PCAxNikgfCBzcmNfdzsKPiAtCQl4X29mZnNldCA9IHg7Cj4gLQkJeV9vZmZzZXQgPSB5 Owo+ICsJCXN0cmlkZV9kaXYgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2LCBm Yi0+bW9kaWZpZXJbMF0sCj4gKwkJCQkJCSAgICAgICBmYi0+cGl4ZWxfZm9ybWF0KTsKPiArCQlz dHJpZGUgPSBmYi0+cGl0Y2hlc1swXTsKPiAgCX0KPiAtCXBsYW5lX29mZnNldCA9IHlfb2Zmc2V0 IDw8IDE2IHwgeF9vZmZzZXQ7Cj4gIAo+IC0JSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwg cGxhbmUpLCBwbGFuZV9vZmZzZXQpOwo+IC0JSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwg cGxhbmUpLCBzdHJpZGUpOwo+IC0JSTkxNV9XUklURShQTEFORV9TSVpFKHBpcGUsIHBsYW5lKSwg cGxhbmVfc2l6ZSk7Cj4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3Rh dGlvbik7Cj4gKwlzdXJmX2FkZHIgPSBpbnRlbF9jb21wdXRlX3BhZ2Vfb2Zmc2V0KCZ4LCAmeSwg ZmIsIDAsCj4gKwkJCQkJICAgICAgc3RyaWRlLCByb3RhdGlvbik7Cj4gKwo+ICsJLyogU2l6ZXMg YXJlIDAgYmFzZWQgKi8KPiArCXNyY193LS07Cj4gKwlzcmNfaC0tOwo+ICsJY3J0Y193LS07Cj4g KwljcnRjX2gtLTsKPiArCj4gKwlJOTE1X1dSSVRFKFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZSks ICh5IDw8IDE2KSB8IHgpOwo+ICsJSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwgcGxhbmUp LCBzdHJpZGUgLyBzdHJpZGVfZGl2KTsKPiArCUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCBw bGFuZSksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7Cj4gIAo+ICAJLyogcHJvZ3JhbSBwbGFuZSBz Y2FsZXIgKi8KPiAgCWlmIChzY2FsZXJfaWQgPj0gMCkgewo+IEBAIC0yNzksNyArMjg0LDggQEAg c2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsIHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKPiAgCX0KPiAgCj4gIAlJOTE1X1dSSVRFKFBMQU5FX0NUTChwaXBlLCBwbGFu ZSksIHBsYW5lX2N0bCk7Cj4gLQlJOTE1X1dSSVRFKFBMQU5FX1NVUkYocGlwZSwgcGxhbmUpLCBz dXJmX2FkZHIpOwo+ICsJSTkxNV9XUklURShQTEFORV9TVVJGKHBpcGUsIHBsYW5lKSwKPiArCQkg ICBpbnRlbF9zdXJmX2d0dF9vZmZzZXQoZmIsIDAsIHJvdGF0aW9uKSArIHN1cmZfYWRkcik7Cj4g IAlQT1NUSU5HX1JFQUQoUExBTkVfU1VSRihwaXBlLCBwbGFuZSkpOwo+ICB9Cj4gIAo+IEBAIC0z NTUsOCArMzYxLDcgQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcGxhbmUs IHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCWludCBwbGFuZSA9IGludGVsX3BsYW5lLT5wbGFu ZTsKPiAgCXUzMiBzcHJjdGw7Cj4gIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBkcGxhbmUtPnN0 YXRlLT5yb3RhdGlvbjsKPiAtCXVuc2lnbmVkIGxvbmcgc3Byc3VyZl9vZmZzZXQsIGxpbmVhcl9v ZmZzZXQ7Cj4gLQlpbnQgcGl4ZWxfc2l6ZSA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhl bF9mb3JtYXQsIDApOwo+ICsJdW5zaWduZWQgaW50IHNwcnN1cmZfb2Zmc2V0LCBsaW5lYXJfb2Zm c2V0Owo+ICAJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9Cj4g IAkJJnRvX2ludGVsX3BsYW5lX3N0YXRlKGRwbGFuZS0+c3RhdGUpLT5ja2V5Owo+ICAKPiBAQCAt NDIwLDE5ICs0MjUsMTkgQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcGxh bmUsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCWNydGNfdy0tOwo+ICAJY3J0Y19oLS07Cj4g IAo+IC0JbGluZWFyX29mZnNldCA9IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBwaXhlbF9zaXpl Owo+ICsJaW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBmYiwgMCwgcm90YXRpb24pOwo+ICAJ c3Byc3VyZl9vZmZzZXQgPSBpbnRlbF9jb21wdXRlX3BhZ2Vfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAs Cj4gIAkJCQkJCSAgIGZiLT5waXRjaGVzWzBdLCByb3RhdGlvbik7Cj4gLQlsaW5lYXJfb2Zmc2V0 IC09IHNwcnN1cmZfb2Zmc2V0Owo+ICAKPiAgCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFU RV8xODApKSB7Cj4gIAkJc3ByY3RsIHw9IFNQX1JPVEFURV8xODA7Cj4gIAo+ICAJCXggKz0gc3Jj X3c7Cj4gIAkJeSArPSBzcmNfaDsKPiAtCQlsaW5lYXJfb2Zmc2V0ICs9IHNyY19oICogZmItPnBp dGNoZXNbMF0gKyBzcmNfdyAqIHBpeGVsX3NpemU7Cj4gIAl9Cj4gIAo+ICsJbGluZWFyX29mZnNl dCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7Cj4gKwo+ICAJaWYgKGtleS0+ ZmxhZ3MpIHsKPiAgCQlJOTE1X1dSSVRFKFNQS0VZTUlOVkFMKHBpcGUsIHBsYW5lKSwga2V5LT5t aW5fdmFsdWUpOwo+ICAJCUk5MTVfV1JJVEUoU1BLRVlNQVhWQUwocGlwZSwgcGxhbmUpLCBrZXkt Pm1heF92YWx1ZSk7Cj4gQEAgLTQ1Nyw4ICs0NjIsOCBAQCB2bHZfdXBkYXRlX3BsYW5lKHN0cnVj dCBkcm1fcGxhbmUgKmRwbGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAKPiAgCUk5MTVf V1JJVEUoU1BTSVpFKHBpcGUsIHBsYW5lKSwgKGNydGNfaCA8PCAxNikgfCBjcnRjX3cpOwo+ICAJ STkxNV9XUklURShTUENOVFIocGlwZSwgcGxhbmUpLCBzcHJjdGwpOwo+IC0JSTkxNV9XUklURShT UFNVUkYocGlwZSwgcGxhbmUpLCBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArCj4gLQkJ ICAgc3Byc3VyZl9vZmZzZXQpOwo+ICsJSTkxNV9XUklURShTUFNVUkYocGlwZSwgcGxhbmUpLAo+ ICsJCSAgIGludGVsX3N1cmZfZ3R0X29mZnNldChmYiwgMCwgcm90YXRpb24pICsgc3Byc3VyZl9v ZmZzZXQpOwo+ICAJUE9TVElOR19SRUFEKFNQU1VSRihwaXBlLCBwbGFuZSkpOwo+ICB9Cj4gIAo+ IEBAIC00OTIsNyArNDk3LDcgQEAgaXZiX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9w bGFuZS0+cGlwZTsKPiAgCXUzMiBzcHJjdGwsIHNwcnNjYWxlID0gMDsKPiAgCXVuc2lnbmVkIGlu dCByb3RhdGlvbiA9IHBsYW5lLT5zdGF0ZS0+cm90YXRpb247Cj4gLQl1bnNpZ25lZCBsb25nIHNw cnN1cmZfb2Zmc2V0LCBsaW5lYXJfb2Zmc2V0Owo+ICsJdW5zaWduZWQgaW50IHNwcnN1cmZfb2Zm c2V0LCBsaW5lYXJfb2Zmc2V0Owo+ICAJaW50IHBpeGVsX3NpemUgPSBkcm1fZm9ybWF0X3BsYW5l X2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiAgCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3By aXRlX2NvbG9ya2V5ICprZXkgPQo+ICAJCSZ0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+c3Rh dGUpLT5ja2V5Owo+IEBAIC01NTIsMTAgKzU1Nyw5IEBAIGl2Yl91cGRhdGVfcGxhbmUoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCWlmIChjcnRjX3cg IT0gc3JjX3cgfHwgY3J0Y19oICE9IHNyY19oKQo+ICAJCXNwcnNjYWxlID0gU1BSSVRFX1NDQUxF X0VOQUJMRSB8IChzcmNfdyA8PCAxNikgfCBzcmNfaDsKPiAgCj4gLQlsaW5lYXJfb2Zmc2V0ID0g eSAqIGZiLT5waXRjaGVzWzBdICsgeCAqIHBpeGVsX3NpemU7Cj4gKwlpbnRlbF9hZGRfZmJfb2Zm c2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gIAlzcHJzdXJmX29mZnNldCA9IGludGVs X2NvbXB1dGVfcGFnZV9vZmZzZXQoJngsICZ5LCBmYiwgMCwKPiAgCQkJCQkJICAgZmItPnBpdGNo ZXNbMF0sIHJvdGF0aW9uKTsKPiAtCWxpbmVhcl9vZmZzZXQgLT0gc3Byc3VyZl9vZmZzZXQ7Cj4g IAo+ICAJaWYgKHJvdGF0aW9uID09IEJJVChEUk1fUk9UQVRFXzE4MCkpIHsKPiAgCQlzcHJjdGwg fD0gU1BSSVRFX1JPVEFURV8xODA7Cj4gQEAgLTU2NCwxMSArNTY4LDExIEBAIGl2Yl91cGRhdGVf cGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAg CQlpZiAoIUlTX0hBU1dFTEwoZGV2KSAmJiAhSVNfQlJPQURXRUxMKGRldikpIHsKPiAgCQkJeCAr PSBzcmNfdzsKPiAgCQkJeSArPSBzcmNfaDsKPiAtCQkJbGluZWFyX29mZnNldCArPSBzcmNfaCAq IGZiLT5waXRjaGVzWzBdICsKPiAtCQkJCXNyY193ICogcGl4ZWxfc2l6ZTsKPiAgCQl9Cj4gIAl9 Cj4gIAo+ICsJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwg MCk7Cj4gKwo+ICAJaWYgKGtleS0+ZmxhZ3MpIHsKPiAgCQlJOTE1X1dSSVRFKFNQUktFWVZBTChw aXBlKSwga2V5LT5taW5fdmFsdWUpOwo+ICAJCUk5MTVfV1JJVEUoU1BSS0VZTUFYKHBpcGUpLCBr ZXktPm1heF92YWx1ZSk7Cj4gQEAgLTU5Nyw3ICs2MDEsNyBAQCBpdmJfdXBkYXRlX3BsYW5lKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAkJSTkxNV9X UklURShTUFJTQ0FMRShwaXBlKSwgc3Byc2NhbGUpOwo+ICAJSTkxNV9XUklURShTUFJDVEwocGlw ZSksIHNwcmN0bCk7Cj4gIAlJOTE1X1dSSVRFKFNQUlNVUkYocGlwZSksCj4gLQkJICAgaTkxNV9n ZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgKyBzcHJzdXJmX29mZnNldCk7Cj4gKwkJICAgaW50ZWxf c3VyZl9ndHRfb2Zmc2V0KGZiLCAwLCByb3RhdGlvbikgKyBzcHJzdXJmX29mZnNldCk7Cj4gIAlQ T1NUSU5HX1JFQUQoU1BSU1VSRihwaXBlKSk7Cj4gIH0KPiAgCj4gQEAgLTYzMiw3ICs2MzYsNyBA QCBpbGtfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJf b2JqKGZiKTsKPiAgCWludCBwaXBlID0gaW50ZWxfcGxhbmUtPnBpcGU7Cj4gIAl1bnNpZ25lZCBp bnQgcm90YXRpb24gPSBwbGFuZS0+c3RhdGUtPnJvdGF0aW9uOwo+IC0JdW5zaWduZWQgbG9uZyBk dnNzdXJmX29mZnNldCwgbGluZWFyX29mZnNldDsKPiArCXVuc2lnbmVkIGludCBkdnNzdXJmX29m ZnNldCwgbGluZWFyX29mZnNldDsKPiAgCXUzMiBkdnNjbnRyLCBkdnNzY2FsZTsKPiAgCWludCBw aXhlbF9zaXplID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4g IAljb25zdCBzdHJ1Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0KPiBAQCAtNjg5 LDE5ICs2OTMsMTkgQEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwg c3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJaWYgKGNydGNfdyAhPSBzcmNfdyB8fCBjcnRjX2gg IT0gc3JjX2gpCj4gIAkJZHZzc2NhbGUgPSBEVlNfU0NBTEVfRU5BQkxFIHwgKHNyY193IDw8IDE2 KSB8IHNyY19oOwo+ICAKPiAtCWxpbmVhcl9vZmZzZXQgPSB5ICogZmItPnBpdGNoZXNbMF0gKyB4 ICogcGl4ZWxfc2l6ZTsKPiArCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJv dGF0aW9uKTsKPiAgCWR2c3N1cmZfb2Zmc2V0ID0gaW50ZWxfY29tcHV0ZV9wYWdlX29mZnNldCgm eCwgJnksIGZiLCAwLAo+ICAJCQkJCQkgICBmYi0+cGl0Y2hlc1swXSwgcm90YXRpb24pOwo+IC0J bGluZWFyX29mZnNldCAtPSBkdnNzdXJmX29mZnNldDsKPiAgCj4gIAlpZiAocm90YXRpb24gPT0g QklUKERSTV9ST1RBVEVfMTgwKSkgewo+ICAJCWR2c2NudHIgfD0gRFZTX1JPVEFURV8xODA7Cj4g IAo+ICAJCXggKz0gc3JjX3c7Cj4gIAkJeSArPSBzcmNfaDsKPiAtCQlsaW5lYXJfb2Zmc2V0ICs9 IHNyY19oICogZmItPnBpdGNoZXNbMF0gKyBzcmNfdyAqIHBpeGVsX3NpemU7Cj4gIAl9Cj4gIAo+ ICsJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7Cj4g Kwo+ICAJaWYgKGtleS0+ZmxhZ3MpIHsKPiAgCQlJOTE1X1dSSVRFKERWU0tFWVZBTChwaXBlKSwg a2V5LT5taW5fdmFsdWUpOwo+ICAJCUk5MTVfV1JJVEUoRFZTS0VZTUFYKHBpcGUpLCBrZXktPm1h eF92YWx1ZSk7Cj4gQEAgLTcyNSw3ICs3MjksNyBAQCBpbGtfdXBkYXRlX3BsYW5lKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAlJOTE1X1dSSVRFKERW U1NDQUxFKHBpcGUpLCBkdnNzY2FsZSk7Cj4gIAlJOTE1X1dSSVRFKERWU0NOVFIocGlwZSksIGR2 c2NudHIpOwo+ICAJSTkxNV9XUklURShEVlNTVVJGKHBpcGUpLAo+IC0JCSAgIGk5MTVfZ2VtX29i al9nZ3R0X29mZnNldChvYmopICsgZHZzc3VyZl9vZmZzZXQpOwo+ICsJCSAgIGludGVsX3N1cmZf Z3R0X29mZnNldChmYiwgMCwgcm90YXRpb24pICsgZHZzc3VyZl9vZmZzZXQpOwo+ICAJUE9TVElO R19SRUFEKERWU1NVUkYocGlwZSkpOwo+ICB9Cj4gIAo+IC0tIAo+IDIuNC45Cj4gCj4gX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFp bGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwg VmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5m ZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=