From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v6 01/12] drm/i915: Rewrite fb rotation GTT handling Date: Wed, 10 Aug 2016 11:49:33 +0200 Message-ID: <20160810094933.GV6232@phenom.ffwll.local> References: <1470821001-25272-1-git-send-email-ville.syrjala@linux.intel.com> <1470821001-25272-2-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-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 365496E15A for ; Wed, 10 Aug 2016 09:49:38 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id o80so8458092wme.0 for ; Wed, 10 Aug 2016 02:49:38 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1470821001-25272-2-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 T24gV2VkLCBBdWcgMTAsIDIwMTYgYXQgMTI6MjM6MTBQTSArMDMwMCwgdmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20gd3JvdGU6Cj4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4KPiAKPiBSZWRvIHRoZSBmYiByb3RhdGlvbiBoYW5kbGluZyBp biBvcmRlciB0bzoKPiAtIGVsaW1pbmF0ZSB0aGUgTlYxMiBzcGVjaWFsIGNhc2luZwo+IC0gaGFu ZGxlIGZiLT5vZmZzZXRzW10gcHJvcGVybHkKPiAtIG1ha2UgdGhlIHJvdGF0aW9uIGhhbmRsaW5n IGVhc2llciBmb3IgdGhlIHBsYW5lIGNvZGUKPiAKPiBUbyBhY2hpZXZlIHRoZXNlIGdvYWxzIHdl IHJlZHVjZSBpbnRlbF9yb3RhdGlvbl9pbmZvIHRvIG9ubHkgY29udGFpbgo+IChmb3IgZWFjaCBw bGFuZSkgdGhlIHJvdGF0ZWQgdmlldyB3aWR0aCxoZWlnaHQsc3RyaWRlIGluIHRpbGUgdW5pdHMs Cj4gYW5kIHRoZSBwYWdlIG9mZnNldCBpbnRvIHRoZSBvYmplY3Qgd2hlcmUgdGhlIHBsYW5lIHN0 YXJ0cy4gRWFjaCBwbGFuZQo+IGlzIGhhbmRsZWQgZXhhY3RseSB0aGUgc2FtZSB3YXksIG5vIHNw ZWNpYWwgY2FzaW5nIGZvciBOVjEyIG9yIG90aGVyCj4gZm9ybWF0cy4gV2UgdGhlbiBzdG9yZSB0 aGUgY29tcHV0ZWQgcm90YXRpb25faW5mbyB1bmRlcgo+IGludGVsX2ZyYW1lYnVmZmVyIHNvIHRo YXQgd2UgZG9uJ3QgaGF2ZSB0byByZWNvbXB1dGUgaXQgYWdhaW4uCj4gCj4gVG8gaGFuZGxlIGZi LT5vZmZzZXRzW10gd2UgdHJlYXQgdGhlbSBhcyBhIGxpbmVhciBvZmZzZXRzIGFuZCBjb252ZXJ0 Cj4gdGhlbSB0byB4L3kgb2Zmc2V0cyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcmVsZXZhbnQgR1RU IG1hcHBpbmcgKGVpdGhlcgo+IG5vcm1hbCBvciByb3RhdGVkKS4gV2Ugc3RvcmUgdGhlIHgveSBv ZmZzZXRzIHVuZGVyIGludGVsX2ZyYW1lYnVmZmVyLAo+IGFuZCBmb3Igc29tZSBleHRyYSBjb252 ZW5pZW5jZSB3ZSBhbHNvIHN0b3JlIHRoZSByb3RhdGVkIHBpdGNoIChpZS4KPiB0aWxlIGFsaWdu ZWQgcGxhbmUgaGVpZ2h0KS4gU28gZm9yIGVhY2ggcGxhbmUgd2UgaGF2ZSB0aGUgbm9ybWFsCj4g eC95IG9mZnNldHMsIHJvdGF0ZWQgeC95IG9mZnNldHMsIGFuZCB0aGUgcm90YXRlZCBwaXRjaC4g VGhlIG5vcm1hbAo+IHBpdGNoIGlzIGF2YWlsYWJsZSBhbHJlYWR5IGluIGZiLT5waXRjaGVzW10u Cj4gCj4gV2hpbGUgd2UncmUgZ2F0aGVyaW5nIHVwIGFsbCB0aGF0IGV4dHJhIGluZm9ybWF0aW9u LCB3ZSBjYW4gYWxzbyBlYXNpbHkKPiBjb21wdXRlIHRoZSBzdG9yYWdlIHJlcXVpcmVtZW50cyBm b3IgdGhlIGZyYW1lYnVmZmVyLCBzbyB0aGF0IHdlIGNhbgo+IGNoZWNrIHRoYXQgdGhlIG9iamVj dCBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgaXQuCj4gCj4gV2hlbiBpdCBjb21lcyB0aW1lIHRvIGRl YWwgd2l0aCB0aGUgcGxhbmUgc291cmNlIGNvb3JkaW5hdGVzLCB3ZSBmaXJzdAo+IHJvdGF0ZSB0 aGUgY2xpcHBlZCBzcmMgY29vcmRpbmF0ZXMgdG8gbWF0Y2ggdGhlIHJlbGV2YW50IEdUVCB2aWV3 Cj4gb3JpZW50YXRpb24sIHRoZW4gYWRkIHRvIHRoZW0gdGhlIGZiIHgveSBvZmZzZXRzLiBOZXh0 IHdlIGNvbXB1dGUKPiB0aGUgYWxpZ25lZCBzdXJmYWNlIHBhZ2Ugb2Zmc2V0LCBhbmQgYXMgYSBy ZXN1bHQgd2UncmUgbGVmdCB3aXRoIHNvbWUKPiByZXNpZHVhbCB4L3kgb2Zmc2V0cy4gRmluYWxs eSwgaWYgcmVxdWlyZWQgYnkgdGhlIGhhcmR3YXJlLCB3ZSBjb252ZXJ0Cj4gdGhlIHJlbWFpbmlu ZyB4L3kgb2Zmc2V0cyBpbnRvIGEgbGluZWFyIG9mZnNldC4KPiAKPiBGb3IgZ2VuMi8zIHdlIHNp bXBseSBza2lwIGNvbXB1dGluZyB0aGUgZmluYWwgcGFnZSBvZmZzZXQsIGFuZCBqdXN0Cj4gY29u dmVydCB0aGUgc3JjK2ZiIHgveSBvZmZzZXRzIGRpcmVjdGx5IGludG8gYSBsaW5lYXIgb2Zmc2V0 IHNpbmNlCj4gdGhhdCdzIHdoYXQgdGhlIGhhcmR3YXJlIHdhbnRzLgo+IAo+IEFmdGVyIHRoaXMg YWxsIHBsYXRmb3JtcywgaW5jbHVpbmcgU0tMKywgY29tcHV0ZSB0aGVzZSB0aGluZ3MgaW4gZXhh Y3RseQo+IHRoZSBzYW1lIHdheSAoZXhjbHVkaW5nIGFsaWduZW1udCBkaWZmZXJlbmNlcykuCj4g Cj4gdjI6IFVzZSBCSVQoRFJNX1JPVEFURV8yNzApIGluc3RlYWQgb2YgUk9UQVRFXzI3MCB3aGVu IHJvdGF0aW5nCj4gICAgIHBsYW5lIHNyYyBjb29yZGluYXRlcwo+ICAgICBEcm9wIHNvbWUgc3B1 cmlvdXMgY2hhbmdlcyB0aGF0IGdvdCBsZWZ0IGJlaGluZCBkdXJpbmcKPiAgICAgZGV2ZWxvcG1l bnQKPiB2MzogU3BsaXQgb3V0IG1vcmUgY2hhbmdlcyB0byBwcmVwIHBhdGNoZXMgKERhbmllbCkK PiAgICAgcy9pbnRlbF9mYi0+cGxhbmVbXS5mb28uYmFyL2ludGVsX2ZiLT5mb29bXS5iYXIvIGZv ciBicmV2aXR5Cj4gICAgIFJlbmFtZSBpbnRlbF9zdXJmX2d0dF9vZmZzZXQgdG8gaW50ZWxfZmJf Z3R0X29mZnNldAo+ICAgICBLaWxsIHRoZSBwb2ludGxlc3MgJ3BsYW5lJyBwYXJhbWV0ZXIgZnJv bSBpbnRlbF9mYl9ndHRfb2Zmc2V0KCkKPiB2NDogRml4IGFsaWdubWVudCB2cy4gYWxpZ25tZW50 LTEgd2hlbiBjYWxsaW5nCj4gICAgIF9pbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCkgZnJvbSBp bnRlbF9maWxsX2ZiX2luZm8oKQo+ICAgICBQYXNzIHRoZSBwaXRjaCBpbiB0aWxlcyBpbgo+ICAg ICBzdGFkIG9mIHBpeGVscyB0byBpbnRlbF9hZGp1c3RfdGlsZV9vZmZzZXQoKSBmcm9tIGludGVs X2ZpbGxfZmJfaW5mbygpCj4gICAgIFBhc3MgdGhlIGZ1bGwgd2lkdGgvaGVpZ2h0IG9mIHRoZSBy b3RhdGVkIGFyZWEgdG8KPiAgICAgZHJtX3JlY3Rfcm90YXRlKCkgZm9yIGNsYXJpdHkKPiAgICAg VXNlIHUzMiBmb3IgbW9yZSBvZmZzZXRzCj4gdjU6IFByZXNlcnZlIHRoZSB1cHBlcl8zMl9iaXRz KCkvbG93ZXJfMzJfYml0cygpIGhhbmRsaW5nIGZvciB0aGUKPiAgICAgZmIgZ2d0dCBvZmZzZXQg KFNpdmFrdW1hcikKPiB2NjogUmViYXNlIGR1ZSB0byBkcm1fcGxhbmVfc3RhdGUgc3JjL2RzdCBy ZWN0cwo+IAo+IENjOiBTaXZha3VtYXIgVGh1bGFzaW1hbmkgPHNpdmFrdW1hci50aHVsYXNpbWFu aUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4KPiBSZXZpZXdlZC1ieTogU2l2YWt1bWFyIFRodWxhc2ltYW5p IDxzaXZha3VtYXIudGh1bGFzaW1hbmlAaW50ZWwuY29tPgoKTm90IGZlZWxpbmcgbGlrZSBjaGVj a2luZyB0aGUgZW50aXJlIG1hdGggYWdhaW4gaW4gZnVsbCBkZXRhaWwsIGJ1dCBtYWtlcwpzZW5z ZSwgYW5kIEkgZGlkIGNoZWNrIHRoZSBtYXRoIG9uIGFuIGVhcmxpZXIgdmVyc2lvbi4KCkFja2Vk LWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+IC0tLQo+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyAgfCAgNTEgKystLS0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmggIHwgICA1ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYyB8IDM2OCArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgMTkgKy0KPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgIHwgIDk3ICsrKystLS0tLQo+ICA1 IGZpbGVzIGNoYW5nZWQsIDMzMSBpbnNlcnRpb25zKCspLCAyMDkgZGVsZXRpb25zKC0pCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBpbmRleCAxOGM3Yzk2NDQ3NjEuLmQ4NzY1 MDE2OTRjNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gQEAgLTM0NDks MTggKzM0NDksMTYgQEAgcm90YXRlX3BhZ2VzKGNvbnN0IGRtYV9hZGRyX3QgKmluLCB1bnNpZ25l ZCBpbnQgb2Zmc2V0LAo+ICB9Cj4gIAo+ICBzdGF0aWMgc3RydWN0IHNnX3RhYmxlICoKPiAtaW50 ZWxfcm90YXRlX2ZiX29ial9wYWdlcyhzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAqcm90X2lu Zm8sCj4gK2ludGVsX3JvdGF0ZV9mYl9vYmpfcGFnZXMoY29uc3Qgc3RydWN0IGludGVsX3JvdGF0 aW9uX2luZm8gKnJvdF9pbmZvLAo+ICAJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCj4gIHsKPiAgCWNvbnN0IHNpemVfdCBuX3BhZ2VzID0gb2JqLT5iYXNlLnNpemUgLyBQQUdF X1NJWkU7Cj4gLQl1bnNpZ25lZCBpbnQgc2l6ZV9wYWdlcyA9IHJvdF9pbmZvLT5wbGFuZVswXS53 aWR0aCAqIHJvdF9pbmZvLT5wbGFuZVswXS5oZWlnaHQ7Cj4gLQl1bnNpZ25lZCBpbnQgc2l6ZV9w YWdlc191djsKPiArCXVuc2lnbmVkIGludCBzaXplID0gaW50ZWxfcm90YXRpb25faW5mb19zaXpl KHJvdF9pbmZvKTsKPiAgCXN0cnVjdCBzZ3RfaXRlciBzZ3RfaXRlcjsKPiAgCWRtYV9hZGRyX3Qg ZG1hX2FkZHI7Cj4gIAl1bnNpZ25lZCBsb25nIGk7Cj4gIAlkbWFfYWRkcl90ICpwYWdlX2FkZHJf bGlzdDsKPiAgCXN0cnVjdCBzZ190YWJsZSAqc3Q7Cj4gLQl1bnNpZ25lZCBpbnQgdXZfc3RhcnRf cGFnZTsKPiAgCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4gIAlpbnQgcmV0ID0gLUVOT01FTTsK PiAgCj4gQEAgLTM0NzEsMTggKzM0NjksMTIgQEAgaW50ZWxfcm90YXRlX2ZiX29ial9wYWdlcyhz dHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAqcm90X2luZm8sCj4gIAlpZiAoIXBhZ2VfYWRkcl9s aXN0KQo+ICAJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gIAo+IC0JLyogQWNjb3VudCBmb3IgVVYg cGxhbmUgd2l0aCBOVjEyLiAqLwo+IC0JaWYgKHJvdF9pbmZvLT5waXhlbF9mb3JtYXQgPT0gRFJN X0ZPUk1BVF9OVjEyKQo+IC0JCXNpemVfcGFnZXNfdXYgPSByb3RfaW5mby0+cGxhbmVbMV0ud2lk dGggKiByb3RfaW5mby0+cGxhbmVbMV0uaGVpZ2h0Owo+IC0JZWxzZQo+IC0JCXNpemVfcGFnZXNf dXYgPSAwOwo+IC0KPiAgCS8qIEFsbG9jYXRlIHRhcmdldCBTRyBsaXN0LiAqLwo+ICAJc3QgPSBr bWFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKPiAgCWlmICghc3QpCj4gIAkJZ290byBl cnJfc3RfYWxsb2M7Cj4gIAo+IC0JcmV0ID0gc2dfYWxsb2NfdGFibGUoc3QsIHNpemVfcGFnZXMg KyBzaXplX3BhZ2VzX3V2LCBHRlBfS0VSTkVMKTsKPiArCXJldCA9IHNnX2FsbG9jX3RhYmxlKHN0 LCBzaXplLCBHRlBfS0VSTkVMKTsKPiAgCWlmIChyZXQpCj4gIAkJZ290byBlcnJfc2dfYWxsb2M7 Cj4gIAo+IEBAIC0zNDk1LDMyICszNDg3LDE0IEBAIGludGVsX3JvdGF0ZV9mYl9vYmpfcGFnZXMo c3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9pbmZvLAo+ICAJc3QtPm5lbnRzID0gMDsK PiAgCXNnID0gc3QtPnNnbDsKPiAgCj4gLQkvKiBSb3RhdGUgdGhlIHBhZ2VzLiAqLwo+IC0Jc2cg PSByb3RhdGVfcGFnZXMocGFnZV9hZGRyX2xpc3QsIDAsCj4gLQkJCSAgcm90X2luZm8tPnBsYW5l WzBdLndpZHRoLCByb3RfaW5mby0+cGxhbmVbMF0uaGVpZ2h0LAo+IC0JCQkgIHJvdF9pbmZvLT5w bGFuZVswXS53aWR0aCwKPiAtCQkJICBzdCwgc2cpOwo+IC0KPiAtCS8qIEFwcGVuZCB0aGUgVVYg cGxhbmUgaWYgTlYxMi4gKi8KPiAtCWlmIChyb3RfaW5mby0+cGl4ZWxfZm9ybWF0ID09IERSTV9G T1JNQVRfTlYxMikgewo+IC0JCXV2X3N0YXJ0X3BhZ2UgPSBzaXplX3BhZ2VzOwo+IC0KPiAtCQkv KiBDaGVjayBmb3IgdGlsZS1yb3cgdW4tYWxpZ25tZW50LiAqLwo+IC0JCWlmIChvZmZzZXRfaW5f cGFnZShyb3RfaW5mby0+dXZfb2Zmc2V0KSkKPiAtCQkJdXZfc3RhcnRfcGFnZS0tOwo+IC0KPiAt CQlyb3RfaW5mby0+dXZfc3RhcnRfcGFnZSA9IHV2X3N0YXJ0X3BhZ2U7Cj4gLQo+IC0JCXNnID0g cm90YXRlX3BhZ2VzKHBhZ2VfYWRkcl9saXN0LCByb3RfaW5mby0+dXZfc3RhcnRfcGFnZSwKPiAt CQkJCSAgcm90X2luZm8tPnBsYW5lWzFdLndpZHRoLCByb3RfaW5mby0+cGxhbmVbMV0uaGVpZ2h0 LAo+IC0JCQkJICByb3RfaW5mby0+cGxhbmVbMV0ud2lkdGgsCj4gLQkJCQkgIHN0LCBzZyk7Cj4g Kwlmb3IgKGkgPSAwIDsgaSA8IEFSUkFZX1NJWkUocm90X2luZm8tPnBsYW5lKTsgaSsrKSB7Cj4g KwkJc2cgPSByb3RhdGVfcGFnZXMocGFnZV9hZGRyX2xpc3QsIHJvdF9pbmZvLT5wbGFuZVtpXS5v ZmZzZXQsCj4gKwkJCQkgIHJvdF9pbmZvLT5wbGFuZVtpXS53aWR0aCwgcm90X2luZm8tPnBsYW5l W2ldLmhlaWdodCwKPiArCQkJCSAgcm90X2luZm8tPnBsYW5lW2ldLnN0cmlkZSwgc3QsIHNnKTsK PiAgCX0KPiAgCj4gLQlEUk1fREVCVUdfS01TKCJDcmVhdGVkIHJvdGF0ZWQgcGFnZSBtYXBwaW5n IGZvciBvYmplY3Qgc2l6ZSAlenUgKCV1eCV1IHRpbGVzLCAldSBwYWdlcyAoJXUgcGxhbmUgMCkp LlxuIiwKPiAtCQkgICAgICBvYmotPmJhc2Uuc2l6ZSwgcm90X2luZm8tPnBsYW5lWzBdLndpZHRo LAo+IC0JCSAgICAgIHJvdF9pbmZvLT5wbGFuZVswXS5oZWlnaHQsIHNpemVfcGFnZXMgKyBzaXpl X3BhZ2VzX3V2LAo+IC0JCSAgICAgIHNpemVfcGFnZXMpOwo+ICsJRFJNX0RFQlVHX0tNUygiQ3Jl YXRlZCByb3RhdGVkIHBhZ2UgbWFwcGluZyBmb3Igb2JqZWN0IHNpemUgJXp1ICgldXgldSB0aWxl cywgJXUgcGFnZXMpXG4iLAo+ICsJCSAgICAgIG9iai0+YmFzZS5zaXplLCByb3RfaW5mby0+cGxh bmVbMF0ud2lkdGgsIHJvdF9pbmZvLT5wbGFuZVswXS5oZWlnaHQsIHNpemUpOwo+ICAKPiAgCWRy bV9mcmVlX2xhcmdlKHBhZ2VfYWRkcl9saXN0KTsKPiAgCj4gQEAgLTM1MzEsMTAgKzM1MDUsOSBA QCBlcnJfc2dfYWxsb2M6Cj4gIGVycl9zdF9hbGxvYzoKPiAgCWRybV9mcmVlX2xhcmdlKHBhZ2Vf YWRkcl9saXN0KTsKPiAgCj4gLQlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gY3JlYXRlIHJvdGF0 ZWQgbWFwcGluZyBmb3Igb2JqZWN0IHNpemUgJXp1ISAoJWQpICgldXgldSB0aWxlcywgJXUgcGFn ZXMgKCV1IHBsYW5lIDApKVxuIiwKPiAtCQkgICAgICBvYmotPmJhc2Uuc2l6ZSwgcmV0LCByb3Rf aW5mby0+cGxhbmVbMF0ud2lkdGgsCj4gLQkJICAgICAgcm90X2luZm8tPnBsYW5lWzBdLmhlaWdo dCwgc2l6ZV9wYWdlcyArIHNpemVfcGFnZXNfdXYsCj4gLQkJICAgICAgc2l6ZV9wYWdlcyk7Cj4g KwlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gY3JlYXRlIHJvdGF0ZWQgbWFwcGluZyBmb3Igb2Jq ZWN0IHNpemUgJXp1ISAoJXV4JXUgdGlsZXMsICV1IHBhZ2VzKVxuIiwKPiArCQkgICAgICBvYmot PmJhc2Uuc2l6ZSwgcm90X2luZm8tPnBsYW5lWzBdLndpZHRoLCByb3RfaW5mby0+cGxhbmVbMF0u aGVpZ2h0LCBzaXplKTsKPiArCj4gIAlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICB9Cj4gIAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gaW5kZXggY2M1NjIwNmExNjAwLi41NmU2NGE1 MzU1ZTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+IEBAIC0xMzksMTIg KzEzOSw5IEBAIGVudW0gaTkxNV9nZ3R0X3ZpZXdfdHlwZSB7Cj4gIH07Cj4gIAo+ICBzdHJ1Y3Qg aW50ZWxfcm90YXRpb25faW5mbyB7Cj4gLQl1bnNpZ25lZCBpbnQgdXZfb2Zmc2V0Owo+IC0JdWlu dDMyX3QgcGl4ZWxfZm9ybWF0Owo+IC0JdW5zaWduZWQgaW50IHV2X3N0YXJ0X3BhZ2U7Cj4gIAlz dHJ1Y3Qgewo+ICAJCS8qIHRpbGVzICovCj4gLQkJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7 Cj4gKwkJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQsIHN0cmlkZSwgb2Zmc2V0Owo+ICAJfSBw bGFuZVsyXTsKPiAgfTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGlu ZGV4IDhlNzFkYzIwMDg4MC4uZjE2YTU5ZWE3YzE4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwo+IEBAIC0yMTQ3LDMzICsyMTQ3LDYgQEAgaW50ZWxfZmlsbF9mYl9nZ3R0 X3ZpZXcoc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3LAo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0 aWMgdm9pZAo+IC1pbnRlbF9maWxsX2ZiX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+IC0JCSAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+IC17Cj4gLQlzdHJ1 Y3QgaW50ZWxfcm90YXRpb25faW5mbyAqaW5mbyA9ICZ0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYikt PnJvdF9pbmZvOwo+IC0JdW5zaWduZWQgaW50IHRpbGVfc2l6ZSwgdGlsZV93aWR0aCwgdGlsZV9o ZWlnaHQsIGNwcDsKPiAtCj4gLQl0aWxlX3NpemUgPSBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYp Owo+IC0KPiAtCWNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDAp Owo+IC0JaW50ZWxfdGlsZV9kaW1zKGRldl9wcml2LCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0 LAo+IC0JCQlmYi0+bW9kaWZpZXJbMF0sIGNwcCk7Cj4gLQo+IC0JaW5mby0+cGxhbmVbMF0ud2lk dGggPSBESVZfUk9VTkRfVVAoZmItPnBpdGNoZXNbMF0sIHRpbGVfd2lkdGggKiBjcHApOwo+IC0J aW5mby0+cGxhbmVbMF0uaGVpZ2h0ID0gRElWX1JPVU5EX1VQKGZiLT5oZWlnaHQsIHRpbGVfaGVp Z2h0KTsKPiAtCj4gLQlpZiAoaW5mby0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfTlYxMikg ewo+IC0JCWNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDEpOwo+ IC0JCWludGVsX3RpbGVfZGltcyhkZXZfcHJpdiwgJnRpbGVfd2lkdGgsICZ0aWxlX2hlaWdodCwK PiAtCQkJCWZiLT5tb2RpZmllclsxXSwgY3BwKTsKPiAtCj4gLQkJaW5mby0+dXZfb2Zmc2V0ID0g ZmItPm9mZnNldHNbMV07Cj4gLQkJaW5mby0+cGxhbmVbMV0ud2lkdGggPSBESVZfUk9VTkRfVVAo ZmItPnBpdGNoZXNbMV0sIHRpbGVfd2lkdGggKiBjcHApOwo+IC0JCWluZm8tPnBsYW5lWzFdLmhl aWdodCA9IERJVl9ST1VORF9VUChmYi0+aGVpZ2h0IC8gMiwgdGlsZV9oZWlnaHQpOwo+IC0JfQo+ IC19Cj4gLQo+ICBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX2xpbmVhcl9hbGlnbm1lbnQoY29u c3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gIAlpZiAoSU5URUxf SU5GTyhkZXZfcHJpdiktPmdlbiA+PSA5KQo+IEBAIC0yMjk1LDYgKzIyNjgsNDIgQEAgdm9pZCBp bnRlbF91bnBpbl9mYl9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHVuc2lnbmVkIGlu dCByb3RhdGlvbikKPiAgfQo+ICAKPiAgLyoKPiArICogQ29udmVydCB0aGUgeC95IG9mZnNldHMg aW50byBhIGxpbmVhciBvZmZzZXQuCj4gKyAqIE9ubHkgdmFsaWQgd2l0aCAwLzE4MCBkZWdyZWUg cm90YXRpb24sIHdoaWNoIGlzIGZpbmUgc2luY2UgbGluZWFyCj4gKyAqIG9mZnNldCBpcyBvbmx5 IHVzZWQgd2l0aCBsaW5lYXIgYnVmZmVycyBvbiBwcmUtaHN3IGFuZCB0aWxlZCBidWZmZXJzCj4g KyAqIHdpdGggZ2VuMi8zLCBhbmQgOTAvMjcwIGRlZ3JlZSByb3RhdGlvbnMgaXNuJ3Qgc3VwcG9y dGVkIG9uIGFueSBvZiB0aGVtLgo+ICsgKi8KPiArdTMyIGludGVsX2ZiX3h5X3RvX2xpbmVhcihp bnQgeCwgaW50IHksCj4gKwkJCSAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGlu dCBwbGFuZSkKPiArewo+ICsJdW5zaWduZWQgaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3Bw KGZiLT5waXhlbF9mb3JtYXQsIHBsYW5lKTsKPiArCXVuc2lnbmVkIGludCBwaXRjaCA9IGZiLT5w aXRjaGVzW3BsYW5lXTsKPiArCj4gKwlyZXR1cm4geSAqIHBpdGNoICsgeCAqIGNwcDsKPiArfQo+ ICsKPiArLyoKPiArICogQWRkIHRoZSB4L3kgb2Zmc2V0cyBkZXJpdmVkIGZyb20gZmItPm9mZnNl dHNbXSB0byB0aGUgdXNlcgo+ICsgKiBzcGVjaWZpZWQgcGxhbmUgc3JjIHgveSBvZmZzZXRzLiBU aGUgcmVzdWx0aW5nIHgveSBvZmZzZXRzCj4gKyAqIHNwZWNpZnkgdGhlIHN0YXJ0IG9mIHNjYW5v dXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBndHQgbWFwcGluZy4KPiArICovCj4gK3ZvaWQg aW50ZWxfYWRkX2ZiX29mZnNldHMoaW50ICp4LCBpbnQgKnksCj4gKwkJCSAgY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPiArCQkJICB1bnNpZ25lZCBpbnQgcm90 YXRpb24pCj4gKwo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVs X2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwo+ICsKPiArCWlmIChpbnRlbF9yb3RhdGlv bl85MF9vcl8yNzAocm90YXRpb24pKSB7Cj4gKwkJKnggKz0gaW50ZWxfZmItPnJvdGF0ZWRbcGxh bmVdLng7Cj4gKwkJKnkgKz0gaW50ZWxfZmItPnJvdGF0ZWRbcGxhbmVdLnk7Cj4gKwl9IGVsc2Ug ewo+ICsJCSp4ICs9IGludGVsX2ZiLT5ub3JtYWxbcGxhbmVdLng7Cj4gKwkJKnkgKz0gaW50ZWxf ZmItPm5vcm1hbFtwbGFuZV0ueTsKPiArCX0KPiArfQo+ICsKPiArLyoKPiAgICogQWRqdXN0IHRo ZSB0aWxlIG9mZnNldCBieSBtb3ZpbmcgdGhlIGRpZmZlcmVuY2UgaW50bwo+ICAgKiB0aGUgeC95 IG9mZnNldHMuCj4gICAqCj4gQEAgLTIzMzAsMTggKzIzMzksMjQgQEAgc3RhdGljIHUzMiBpbnRl bF9hZGp1c3RfdGlsZV9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4gICAqIEluIHRoZSA5MC8yNzAg cm90YXRlZCBjYXNlLCB4IGFuZCB5IGFyZSBhc3N1bWVkCj4gICAqIHRvIGJlIGFscmVhZHkgcm90 YXRlZCB0byBtYXRjaCB0aGUgcm90YXRlZCBHVFQgdmlldywgYW5kCj4gICAqIHBpdGNoIGlzIHRo ZSB0aWxlX2hlaWdodCBhbGlnbmVkIGZyYW1lYnVmZmVyIGhlaWdodC4KPiArICoKPiArICogVGhp cyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBkZXJpdmVkIGluZm9ybWF0aW9u Cj4gKyAqIHVuZGVyIGludGVsX2ZyYW1lYnVmZmVyLCBzbyB1c2luZyBhbnkgb2YgdGhhdCBpbmZv cm1hdGlvbgo+ICsgKiBoZXJlIGlzIG5vdCBhbGxvd2VkLiBBbnl0aGluZyB1bmRlciBkcm1fZnJh bWVidWZmZXIgY2FuIGJlCj4gKyAqIHVzZWQuIFRoaXMgaXMgd2h5IHRoZSB1c2VyIGhhcyB0byBw YXNzIGluIHRoZSBwaXRjaCBzaW5jZSBpdAo+ICsgKiBpcyBzcGVjaWZpZWQgaW4gdGhlIHJvdGF0 ZWQgb3JpZW50YXRpb24uCj4gICAqLwo+IC11MzIgaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldChp bnQgKngsIGludCAqeSwKPiAtCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsIGludCBwbGFuZSwKPiAtCQkJICAgICAgdW5zaWduZWQgaW50IHBpdGNoLAo+IC0JCQkgICAg ICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gK3N0YXRpYyB1MzIgX2ludGVsX2NvbXB1dGVfdGls ZV9vZmZzZXQoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJ ICAgICAgaW50ICp4LCBpbnQgKnksCj4gKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgaW50IHBsYW5lLAo+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IHBpdGNoLAo+ ICsJCQkJICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uLAo+ICsJCQkJICAgICAgdTMyIGFsaWdu bWVudCkKPiAgewo+IC0JY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShmYi0+ZGV2KTsKPiAgCXVpbnQ2NF90IGZiX21vZGlmaWVyID0gZmItPm1vZGlmaWVy W3BsYW5lXTsKPiAgCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+ cGl4ZWxfZm9ybWF0LCBwbGFuZSk7Cj4gLQl1MzIgb2Zmc2V0LCBvZmZzZXRfYWxpZ25lZCwgYWxp Z25tZW50Owo+ICsJdTMyIG9mZnNldCwgb2Zmc2V0X2FsaWduZWQ7Cj4gIAo+IC0JYWxpZ25tZW50 ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiX21vZGlmaWVyKTsKPiAgCWlmIChh bGlnbm1lbnQpCj4gIAkJYWxpZ25tZW50LS07Cj4gIAo+IEBAIC0yMzgzLDYgKzIzOTgsMTQxIEBA IHUzMiBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KGludCAqeCwgaW50ICp5LAo+ICAJcmV0dXJu IG9mZnNldF9hbGlnbmVkOwo+ICB9Cj4gIAo+ICt1MzIgaW50ZWxfY29tcHV0ZV90aWxlX29mZnNl dChpbnQgKngsIGludCAqeSwKPiArCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIsIGludCBwbGFuZSwKPiArCQkJICAgICAgdW5zaWduZWQgaW50IHBpdGNoLAo+ICsJCQkg ICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZmItPmRldik7Cj4gKwl1MzIgYWxpZ25tZW50 ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiLT5tb2RpZmllcltwbGFuZV0pOwo+ ICsKPiArCXJldHVybiBfaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldChkZXZfcHJpdiwgeCwgeSwg ZmIsIHBsYW5lLCBwaXRjaCwKPiArCQkJCQkgIHJvdGF0aW9uLCBhbGlnbm1lbnQpOwo+ICt9Cj4g Kwo+ICsvKiBDb252ZXJ0IHRoZSBmYi0+b2Zmc2V0W10gbGluZWFyIG9mZnNldCBpbnRvIHgveSBv ZmZzZXRzICovCj4gK3N0YXRpYyB2b2lkIGludGVsX2ZiX29mZnNldF90b194eShpbnQgKngsIGlu dCAqeSwKPiArCQkJCSAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFu ZSkKPiArewo+ICsJdW5zaWduZWQgaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5w aXhlbF9mb3JtYXQsIHBsYW5lKTsKPiArCXVuc2lnbmVkIGludCBwaXRjaCA9IGZiLT5waXRjaGVz W3BsYW5lXTsKPiArCXUzMiBsaW5lYXJfb2Zmc2V0ID0gZmItPm9mZnNldHNbcGxhbmVdOwo+ICsK PiArCSp5ID0gbGluZWFyX29mZnNldCAvIHBpdGNoOwo+ICsJKnggPSBsaW5lYXJfb2Zmc2V0ICUg cGl0Y2ggLyBjcHA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiAraW50ZWxfZmlsbF9mYl9pbmZv KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkgICBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYikKPiArewo+ICsJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9m YiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiArCXN0cnVjdCBpbnRlbF9yb3RhdGlvbl9p bmZvICpyb3RfaW5mbyA9ICZpbnRlbF9mYi0+cm90X2luZm87Cj4gKwl1MzIgZ3R0X29mZnNldF9y b3RhdGVkID0gMDsKPiArCXVuc2lnbmVkIGludCBtYXhfc2l6ZSA9IDA7Cj4gKwl1aW50MzJfdCBm b3JtYXQgPSBmYi0+cGl4ZWxfZm9ybWF0Owo+ICsJaW50IGksIG51bV9wbGFuZXMgPSBkcm1fZm9y bWF0X251bV9wbGFuZXMoZm9ybWF0KTsKPiArCXVuc2lnbmVkIGludCB0aWxlX3NpemUgPSBpbnRl bF90aWxlX3NpemUoZGV2X3ByaXYpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBudW1fcGxhbmVz OyBpKyspIHsKPiArCQl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKPiArCQl1bnNpZ25lZCBp bnQgY3BwLCBzaXplOwo+ICsJCXUzMiBvZmZzZXQ7Cj4gKwkJaW50IHgsIHk7Cj4gKwo+ICsJCWNw cCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZvcm1hdCwgaSk7Cj4gKwkJd2lkdGggPSBkcm1fZm9y bWF0X3BsYW5lX3dpZHRoKGZiLT53aWR0aCwgZm9ybWF0LCBpKTsKPiArCQloZWlnaHQgPSBkcm1f Zm9ybWF0X3BsYW5lX2hlaWdodChmYi0+aGVpZ2h0LCBmb3JtYXQsIGkpOwo+ICsKPiArCQlpbnRl bF9mYl9vZmZzZXRfdG9feHkoJngsICZ5LCBmYiwgaSk7Cj4gKwo+ICsJCS8qCj4gKwkJICogRmly c3QgcGl4ZWwgb2YgdGhlIGZyYW1lYnVmZmVyIGZyb20KPiArCQkgKiB0aGUgc3RhcnQgb2YgdGhl IG5vcm1hbCBndHQgbWFwcGluZy4KPiArCQkgKi8KPiArCQlpbnRlbF9mYi0+bm9ybWFsW2ldLngg PSB4Owo+ICsJCWludGVsX2ZiLT5ub3JtYWxbaV0ueSA9IHk7Cj4gKwo+ICsJCW9mZnNldCA9IF9p bnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KGRldl9wcml2LCAmeCwgJnksCj4gKwkJCQkJCSAgICBm YiwgMCwgZmItPnBpdGNoZXNbaV0sCj4gKwkJCQkJCSAgICBCSVQoRFJNX1JPVEFURV8wKSwgdGls ZV9zaXplKTsKPiArCQlvZmZzZXQgLz0gdGlsZV9zaXplOwo+ICsKPiArCQlpZiAoZmItPm1vZGlm aWVyW2ldICE9IERSTV9GT1JNQVRfTU9EX05PTkUpIHsKPiArCQkJdW5zaWduZWQgaW50IHRpbGVf d2lkdGgsIHRpbGVfaGVpZ2h0Owo+ICsJCQl1bnNpZ25lZCBpbnQgcGl0Y2hfdGlsZXM7Cj4gKwkJ CXN0cnVjdCBkcm1fcmVjdCByOwo+ICsKPiArCQkJaW50ZWxfdGlsZV9kaW1zKGRldl9wcml2LCAm dGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0LAo+ICsJCQkJCWZiLT5tb2RpZmllcltpXSwgY3BwKTsK PiArCj4gKwkJCXJvdF9pbmZvLT5wbGFuZVtpXS5vZmZzZXQgPSBvZmZzZXQ7Cj4gKwkJCXJvdF9p bmZvLT5wbGFuZVtpXS5zdHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPnBpdGNoZXNbaV0sIHRpbGVf d2lkdGggKiBjcHApOwo+ICsJCQlyb3RfaW5mby0+cGxhbmVbaV0ud2lkdGggPSBESVZfUk9VTkRf VVAoeCArIHdpZHRoLCB0aWxlX3dpZHRoKTsKPiArCQkJcm90X2luZm8tPnBsYW5lW2ldLmhlaWdo dCA9IERJVl9ST1VORF9VUCh5ICsgaGVpZ2h0LCB0aWxlX2hlaWdodCk7Cj4gKwo+ICsJCQlpbnRl bF9mYi0+cm90YXRlZFtpXS5waXRjaCA9Cj4gKwkJCQlyb3RfaW5mby0+cGxhbmVbaV0uaGVpZ2h0 ICogdGlsZV9oZWlnaHQ7Cj4gKwo+ICsJCQkvKiBob3cgbWFueSB0aWxlcyBkb2VzIHRoaXMgcGxh bmUgbmVlZCAqLwo+ICsJCQlzaXplID0gcm90X2luZm8tPnBsYW5lW2ldLnN0cmlkZSAqIHJvdF9p bmZvLT5wbGFuZVtpXS5oZWlnaHQ7Cj4gKwkJCS8qCj4gKwkJCSAqIElmIHRoZSBwbGFuZSBpc24n dCBob3Jpem9udGFsbHkgdGlsZSBhbGlnbmVkLAo+ICsJCQkgKiB3ZSBuZWVkIG9uZSBtb3JlIHRp bGUuCj4gKwkJCSAqLwo+ICsJCQlpZiAoeCAhPSAwKQo+ICsJCQkJc2l6ZSsrOwo+ICsKPiArCQkJ Lyogcm90YXRlIHRoZSB4L3kgb2Zmc2V0cyB0byBtYXRjaCB0aGUgR1RUIHZpZXcgKi8KPiArCQkJ ci54MSA9IHg7Cj4gKwkJCXIueTEgPSB5Owo+ICsJCQlyLngyID0geCArIHdpZHRoOwo+ICsJCQly LnkyID0geSArIGhlaWdodDsKPiArCQkJZHJtX3JlY3Rfcm90YXRlKCZyLAo+ICsJCQkJCXJvdF9p bmZvLT5wbGFuZVtpXS53aWR0aCAqIHRpbGVfd2lkdGgsCj4gKwkJCQkJcm90X2luZm8tPnBsYW5l W2ldLmhlaWdodCAqIHRpbGVfaGVpZ2h0LAo+ICsJCQkJCUJJVChEUk1fUk9UQVRFXzI3MCkpOwo+ ICsJCQl4ID0gci54MTsKPiArCQkJeSA9IHIueTE7Cj4gKwo+ICsJCQkvKiByb3RhdGUgdGhlIHRp bGUgZGltZW5zaW9ucyB0byBtYXRjaCB0aGUgR1RUIHZpZXcgKi8KPiArCQkJcGl0Y2hfdGlsZXMg PSBpbnRlbF9mYi0+cm90YXRlZFtpXS5waXRjaCAvIHRpbGVfaGVpZ2h0Owo+ICsJCQlzd2FwKHRp bGVfd2lkdGgsIHRpbGVfaGVpZ2h0KTsKPiArCj4gKwkJCS8qCj4gKwkJCSAqIFdlIG9ubHkga2Vl cCB0aGUgeC95IG9mZnNldHMsIHNvIHB1c2ggYWxsIG9mIHRoZQo+ICsJCQkgKiBndHQgb2Zmc2V0 IGludG8gdGhlIHgveSBvZmZzZXRzLgo+ICsJCQkgKi8KPiArCQkJaW50ZWxfYWRqdXN0X3RpbGVf b2Zmc2V0KCZ4LCAmeSwgdGlsZV9zaXplLAo+ICsJCQkJCQkgdGlsZV93aWR0aCwgdGlsZV9oZWln aHQsIHBpdGNoX3RpbGVzLAo+ICsJCQkJCQkgZ3R0X29mZnNldF9yb3RhdGVkICogdGlsZV9zaXpl LCAwKTsKPiArCj4gKwkJCWd0dF9vZmZzZXRfcm90YXRlZCArPSByb3RfaW5mby0+cGxhbmVbaV0u d2lkdGggKiByb3RfaW5mby0+cGxhbmVbaV0uaGVpZ2h0Owo+ICsKPiArCQkJLyoKPiArCQkJICog Rmlyc3QgcGl4ZWwgb2YgdGhlIGZyYW1lYnVmZmVyIGZyb20KPiArCQkJICogdGhlIHN0YXJ0IG9m IHRoZSByb3RhdGVkIGd0dCBtYXBwaW5nLgo+ICsJCQkgKi8KPiArCQkJaW50ZWxfZmItPnJvdGF0 ZWRbaV0ueCA9IHg7Cj4gKwkJCWludGVsX2ZiLT5yb3RhdGVkW2ldLnkgPSB5Owo+ICsJCX0gZWxz ZSB7Cj4gKwkJCXNpemUgPSBESVZfUk9VTkRfVVAoKHkgKyBoZWlnaHQpICogZmItPnBpdGNoZXNb aV0gKwo+ICsJCQkJCSAgICB4ICogY3BwLCB0aWxlX3NpemUpOwo+ICsJCX0KPiArCj4gKwkJLyog aG93IG1hbnkgdGlsZXMgaW4gdG90YWwgbmVlZGVkIGluIHRoZSBibyAqLwo+ICsJCW1heF9zaXpl ID0gbWF4KG1heF9zaXplLCBvZmZzZXQgKyBzaXplKTsKPiArCX0KPiArCj4gKwlpZiAobWF4X3Np emUgKiB0aWxlX3NpemUgPiB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYiktPm9iai0+YmFzZS5zaXpl KSB7Cj4gKwkJRFJNX0RFQlVHKCJmYiB0b28gYmlnIGZvciBibyAobmVlZCAldSBieXRlcywgaGF2 ZSAlenUgYnl0ZXMpXG4iLAo+ICsJCQkgIG1heF9zaXplICogdGlsZV9zaXplLCB0b19pbnRlbF9m cmFtZWJ1ZmZlcihmYiktPm9iai0+YmFzZS5zaXplKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr CX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgc3RhdGljIGludCBpOXh4X2Zvcm1hdF90 b19mb3VyY2MoaW50IGZvcm1hdCkKPiAgewo+ICAJc3dpdGNoIChmb3JtYXQpIHsKPiBAQCAtMjYx OCw3ICsyNzY4LDYgQEAgc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpwcmltYXJ5LAo+ICAJdTMyIGRzcGNudHI7Cj4gIAlpOTE1X3JlZ190IHJl ZyA9IERTUENOVFIocGxhbmUpOwo+ICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3Rh dGUtPmJhc2Uucm90YXRpb247Cj4gLQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmIt PnBpeGVsX2Zvcm1hdCwgMCk7Cj4gIAlpbnQgeCA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy54MSA+ PiAxNjsKPiAgCWludCB5ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLnkxID4+IDE2Owo+ICAKPiBA QCAtMjY3NywzMCArMjgyNiwyNSBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9wcmltYXJ5X3Bs YW5lKHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCj4gIAlpZiAoSVNfRzRYKGRldikpCj4gIAkJ ZHNwY250ciB8PSBESVNQUExBTkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7Cj4gIAo+IC0JbGluZWFy X29mZnNldCA9IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBjcHA7Cj4gKwlpbnRlbF9hZGRfZmJf b2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gIAo+IC0JaWYgKElOVEVMX0lORk8o ZGV2KS0+Z2VuID49IDQpIHsKPiArCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQo+ICAJ CWludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0ID0KPiAgCQkJaW50ZWxfY29tcHV0ZV90aWxlX29m ZnNldCgmeCwgJnksIGZiLCAwLAo+ICAJCQkJCQkgIGZiLT5waXRjaGVzWzBdLCByb3RhdGlvbik7 Cj4gLQkJbGluZWFyX29mZnNldCAtPSBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldDsKPiAtCX0g ZWxzZSB7Cj4gLQkJaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQgPSBsaW5lYXJfb2Zmc2V0Owo+ IC0JfQo+ICAKPiAgCWlmIChyb3RhdGlvbiA9PSBEUk1fUk9UQVRFXzE4MCkgewo+ICAJCWRzcGNu dHIgfD0gRElTUFBMQU5FX1JPVEFURV8xODA7Cj4gIAo+ICAJCXggKz0gKGNydGNfc3RhdGUtPnBp cGVfc3JjX3cgLSAxKTsKPiAgCQl5ICs9IChjcnRjX3N0YXRlLT5waXBlX3NyY19oIC0gMSk7Cj4g LQo+IC0JCS8qIEZpbmRpbmcgdGhlIGxhc3QgcGl4ZWwgb2YgdGhlIGxhc3QgbGluZSBvZiB0aGUg ZGlzcGxheQo+IC0JCWRhdGEgYW5kIGFkZGluZyB0byBsaW5lYXJfb2Zmc2V0Ki8KPiAtCQlsaW5l YXJfb2Zmc2V0ICs9Cj4gLQkJCShjcnRjX3N0YXRlLT5waXBlX3NyY19oIC0gMSkgKiBmYi0+cGl0 Y2hlc1swXSArCj4gLQkJCShjcnRjX3N0YXRlLT5waXBlX3NyY193IC0gMSkgKiBjcHA7Cj4gIAl9 Cj4gIAo+ICsJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwg MCk7Cj4gKwo+ICsJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNCkKPiArCQlpbnRlbF9jcnRj LT5kc3BhZGRyX29mZnNldCA9IGxpbmVhcl9vZmZzZXQ7Cj4gKwo+ICAJaW50ZWxfY3J0Yy0+YWRq dXN0ZWRfeCA9IHg7Cj4gIAlpbnRlbF9jcnRjLT5hZGp1c3RlZF95ID0geTsKPiAgCj4gQEAgLTI3 MDksNyArMjg1Myw4IEBAIHN0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3Ry dWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKPiAgCUk5MTVfV1JJVEUoRFNQU1RSSURFKHBsYW5lKSwg ZmItPnBpdGNoZXNbMF0pOwo+ICAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpIHsKPiAg CQlJOTE1X1dSSVRFKERTUFNVUkYocGxhbmUpLAo+IC0JCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9v ZmZzZXQob2JqKSArIGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsKPiArCQkJICAgaW50ZWxf ZmJfZ3R0X29mZnNldChmYiwgcm90YXRpb24pICsKPiArCQkJICAgaW50ZWxfY3J0Yy0+ZHNwYWRk cl9vZmZzZXQpOwo+ICAJCUk5MTVfV1JJVEUoRFNQVElMRU9GRihwbGFuZSksICh5IDw8IDE2KSB8 IHgpOwo+ICAJCUk5MTVfV1JJVEUoRFNQTElOT0ZGKHBsYW5lKSwgbGluZWFyX29mZnNldCk7Cj4g IAl9IGVsc2UKPiBAQCAtMjc0Nyw3ICsyODkyLDYgQEAgc3RhdGljIHZvaWQgaXJvbmxha2VfdXBk YXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKPiAgCXUzMiBkc3Bj bnRyOwo+ICAJaTkxNV9yZWdfdCByZWcgPSBEU1BDTlRSKHBsYW5lKTsKPiAgCXVuc2lnbmVkIGlu dCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+IC0JaW50IGNwcCA9IGRy bV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApOwo+ICAJaW50IHggPSBwbGFu ZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7Cj4gIAlpbnQgeSA9IHBsYW5lX3N0YXRlLT5iYXNl LnNyYy55MSA+PiAxNjsKPiAgCj4gQEAgLTI3ODYsMjYgKzI5MzAsMjMgQEAgc3RhdGljIHZvaWQg aXJvbmxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwK PiAgCWlmICghSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSkKPiAgCQlkc3Bj bnRyIHw9IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKPiAgCj4gLQlsaW5lYXJfb2Zm c2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsgeCAqIGNwcDsKPiArCWludGVsX2FkZF9mYl9vZmZz ZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9uKTsKPiArCj4gIAlpbnRlbF9jcnRjLT5kc3BhZGRy X29mZnNldCA9Cj4gIAkJaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ ICAJCQkJCSAgZmItPnBpdGNoZXNbMF0sIHJvdGF0aW9uKTsKPiAtCWxpbmVhcl9vZmZzZXQgLT0g aW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQ7Cj4gKwo+ICAJaWYgKHJvdGF0aW9uID09IERSTV9S T1RBVEVfMTgwKSB7Cj4gIAkJZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRFXzE4MDsKPiAgCj4g IAkJaWYgKCFJU19IQVNXRUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKSB7Cj4gIAkJCXgg Kz0gKGNydGNfc3RhdGUtPnBpcGVfc3JjX3cgLSAxKTsKPiAgCQkJeSArPSAoY3J0Y19zdGF0ZS0+ cGlwZV9zcmNfaCAtIDEpOwo+IC0KPiAtCQkJLyogRmluZGluZyB0aGUgbGFzdCBwaXhlbCBvZiB0 aGUgbGFzdCBsaW5lIG9mIHRoZSBkaXNwbGF5Cj4gLQkJCWRhdGEgYW5kIGFkZGluZyB0byBsaW5l YXJfb2Zmc2V0Ki8KPiAtCQkJbGluZWFyX29mZnNldCArPQo+IC0JCQkJKGNydGNfc3RhdGUtPnBp cGVfc3JjX2ggLSAxKSAqIGZiLT5waXRjaGVzWzBdICsKPiAtCQkJCShjcnRjX3N0YXRlLT5waXBl X3NyY193IC0gMSkgKiBjcHA7Cj4gIAkJfQo+ICAJfQo+ICAKPiArCWxpbmVhcl9vZmZzZXQgPSBp bnRlbF9mYl94eV90b19saW5lYXIoeCwgeSwgZmIsIDApOwo+ICsKPiAgCWludGVsX2NydGMtPmFk anVzdGVkX3ggPSB4Owo+ICAJaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeSA9IHk7Cj4gIAo+IEBAIC0y ODEzLDcgKzI5NTQsOCBAQCBzdGF0aWMgdm9pZCBpcm9ubGFrZV91cGRhdGVfcHJpbWFyeV9wbGFu ZShzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5LAo+ICAKPiAgCUk5MTVfV1JJVEUoRFNQU1RSSURF KHBsYW5lKSwgZmItPnBpdGNoZXNbMF0pOwo+ICAJSTkxNV9XUklURShEU1BTVVJGKHBsYW5lKSwK PiAtCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArIGludGVsX2NydGMtPmRzcGFk ZHJfb2Zmc2V0KTsKPiArCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlvbikgKwo+ ICsJCSAgIGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsKPiAgCWlmIChJU19IQVNXRUxMKGRl dikgfHwgSVNfQlJPQURXRUxMKGRldikpIHsKPiAgCQlJOTE1X1dSSVRFKERTUE9GRlNFVChwbGFu ZSksICh5IDw8IDE2KSB8IHgpOwo+ICAJfSBlbHNlIHsKPiBAQCAtMjgzNSwyOCArMjk3NywxNiBA QCB1MzIgaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gIAl9Cj4gIH0KPiAgCj4gLXUzMiBpbnRlbF9wbGFuZV9vYmpfb2Zm c2V0KHN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUsCj4gLQkJCSAgIHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCSAgIHVuc2lnbmVkIGludCBwbGFuZSkKPiArdTMy IGludGVsX2ZiX2d0dF9vZmZzZXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gKwkJCXVu c2lnbmVkIGludCByb3RhdGlvbikKPiAgewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiA9IGludGVsX2ZiX29iaihmYik7Cj4gIAlzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgdmlldzsK PiAtCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAJdTY0IG9mZnNldDsKPiAgCj4gLQlpbnRlbF9m aWxsX2ZiX2dndHRfdmlldygmdmlldywgaW50ZWxfcGxhbmUtPmJhc2Uuc3RhdGUtPmZiLAo+IC0J CQkJaW50ZWxfcGxhbmUtPmJhc2Uuc3RhdGUtPnJvdGF0aW9uKTsKPiAtCj4gLQl2bWEgPSBpOTE1 X2dlbV9vYmpfdG9fZ2d0dF92aWV3KG9iaiwgJnZpZXcpOwo+IC0JaWYgKFdBUk4oIXZtYSwgImdn dHQgdm1hIGZvciBkaXNwbGF5IG9iamVjdCBub3QgZm91bmQhICh2aWV3PSV1KVxuIiwKPiAtCQl2 aWV3LnR5cGUpKQo+IC0JCXJldHVybiAtMTsKPiAtCj4gLQlvZmZzZXQgPSB2bWEtPm5vZGUuc3Rh cnQ7Cj4gKwlpbnRlbF9maWxsX2ZiX2dndHRfdmlldygmdmlldywgZmIsIHJvdGF0aW9uKTsKPiAg Cj4gLQlpZiAocGxhbmUgPT0gMSkgewo+IC0JCW9mZnNldCArPSB2bWEtPmdndHRfdmlldy5wYXJh bXMucm90YXRlZC51dl9zdGFydF9wYWdlICoKPiAtCQkJICBQQUdFX1NJWkU7Cj4gLQl9Cj4gKwlv ZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXRfdmlldyhvYmosICZ2aWV3KTsKPiAgCj4g IAlXQVJOX09OKHVwcGVyXzMyX2JpdHMob2Zmc2V0KSk7Cj4gIAo+IEBAIC0yOTc5LDEyICszMTA5 LDkgQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxf Y3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ICAJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBl Owo+ICAJdTMyIHBsYW5lX2N0bCwgc3RyaWRlX2Rpdiwgc3RyaWRlOwo+IC0JdTMyIHRpbGVfaGVp Z2h0LCBwbGFuZV9vZmZzZXQsIHBsYW5lX3NpemU7Cj4gIAl1bnNpZ25lZCBpbnQgcm90YXRpb24g PSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKPiAtCWludCB4X29mZnNldCwgeV9vZmZzZXQ7 Cj4gIAl1MzIgc3VyZl9hZGRyOwo+ICAJaW50IHNjYWxlcl9pZCA9IHBsYW5lX3N0YXRlLT5zY2Fs ZXJfaWQ7Cj4gIAlpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7Cj4g QEAgLTMwMDUsMzYgKzMxMzIsNDkgQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFy eV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCXBsYW5lX2N0bCB8PSBQTEFORV9D VExfUExBTkVfR0FNTUFfRElTQUJMRTsKPiAgCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3Jv dGF0aW9uKHJvdGF0aW9uKTsKPiAgCj4gLQlzdHJpZGVfZGl2ID0gaW50ZWxfZmJfc3RyaWRlX2Fs aWdubWVudChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+IC0JCQkJCSAgICAgICBmYi0+cGl4 ZWxfZm9ybWF0KTsKPiAtCXN1cmZfYWRkciA9IGludGVsX3BsYW5lX29ial9vZmZzZXQodG9faW50 ZWxfcGxhbmUocGxhbmUpLCBvYmosIDApOwo+IC0KPiAtCVdBUk5fT04oZHJtX3JlY3Rfd2lkdGgo JnBsYW5lX3N0YXRlLT5iYXNlLnNyYykgPT0gMCk7Cj4gLQo+ICAJaWYgKGludGVsX3JvdGF0aW9u XzkwX29yXzI3MChyb3RhdGlvbikpIHsKPiArCQlzdHJ1Y3QgZHJtX3JlY3QgciA9IHsKPiArCQkJ LngxID0gc3JjX3gsCj4gKwkJCS54MiA9IHNyY194ICsgc3JjX3csCj4gKwkJCS55MSA9IHNyY195 LAo+ICsJCQkueTIgPSBzcmNfeSArIHNyY19oLAo+ICsJCX07Cj4gIAkJaW50IGNwcCA9IGRybV9m b3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApOwo+ICsJCXN0cnVjdCBpbnRlbF9m cmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Cj4gKwo+ICsJ CS8qIFJvdGF0ZSBzcmMgY29vcmRpbmF0ZXMgdG8gbWF0Y2ggcm90YXRlZCBHVFQgdmlldyAqLwo+ ICsJCWRybV9yZWN0X3JvdGF0ZSgmciwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LCBCSVQoRFJNX1JP VEFURV8yNzApKTsKPiAgCj4gLQkJLyogc3RyaWRlID0gU3VyZmFjZSBoZWlnaHQgaW4gdGlsZXMg Ki8KPiAtCQl0aWxlX2hlaWdodCA9IGludGVsX3RpbGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9k aWZpZXJbMF0sIGNwcCk7Cj4gLQkJc3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5oZWlnaHQsIHRp bGVfaGVpZ2h0KTsKPiAtCQl4X29mZnNldCA9IHN0cmlkZSAqIHRpbGVfaGVpZ2h0IC0gc3JjX3kg LSBzcmNfaDsKPiAtCQl5X29mZnNldCA9IHNyY194Owo+IC0JCXBsYW5lX3NpemUgPSAoc3JjX3cg LSAxKSA8PCAxNiB8IChzcmNfaCAtIDEpOwo+ICsJCXNyY194ID0gci54MTsKPiArCQlzcmNfeSA9 IHIueTE7Cj4gKwkJc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcik7Cj4gKwkJc3JjX2ggPSBkcm1f cmVjdF9oZWlnaHQoJnIpOwo+ICsKPiArCQlzdHJpZGVfZGl2ID0gaW50ZWxfdGlsZV9oZWlnaHQo ZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwgY3BwKTsKPiArCQlzdHJpZGUgPSBpbnRlbF9mYi0+ cm90YXRlZFswXS5waXRjaDsKPiAgCX0gZWxzZSB7Cj4gLQkJc3RyaWRlID0gZmItPnBpdGNoZXNb MF0gLyBzdHJpZGVfZGl2Owo+IC0JCXhfb2Zmc2V0ID0gc3JjX3g7Cj4gLQkJeV9vZmZzZXQgPSBz cmNfeTsKPiAtCQlwbGFuZV9zaXplID0gKHNyY19oIC0gMSkgPDwgMTYgfCAoc3JjX3cgLSAxKTsK PiArCQlzdHJpZGVfZGl2ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChkZXZfcHJpdiwgZmIt Pm1vZGlmaWVyWzBdLAo+ICsJCQkJCQkgICAgICAgZmItPnBpeGVsX2Zvcm1hdCk7Cj4gKwkJc3Ry aWRlID0gZmItPnBpdGNoZXNbMF07Cj4gIAl9Cj4gLQlwbGFuZV9vZmZzZXQgPSB5X29mZnNldCA8 PCAxNiB8IHhfb2Zmc2V0Owo+ICAKPiAtCWludGVsX2NydGMtPmFkanVzdGVkX3ggPSB4X29mZnNl dDsKPiAtCWludGVsX2NydGMtPmFkanVzdGVkX3kgPSB5X29mZnNldDsKPiArCWludGVsX2FkZF9m Yl9vZmZzZXRzKCZzcmNfeCwgJnNyY195LCBmYiwgMCwgcm90YXRpb24pOwo+ICsJc3VyZl9hZGRy ID0gaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmc3JjX3gsICZzcmNfeSwgZmIsIDAsCj4gKwkJ CQkJICAgICAgc3RyaWRlLCByb3RhdGlvbik7Cj4gKwo+ICsJLyogU2l6ZXMgYXJlIDAgYmFzZWQg Ki8KPiArCXNyY193LS07Cj4gKwlzcmNfaC0tOwo+ICsJZHN0X3ctLTsKPiArCWRzdF9oLS07Cj4g Kwo+ICsJaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeCA9IHNyY194Owo+ICsJaW50ZWxfY3J0Yy0+YWRq dXN0ZWRfeSA9IHNyY195Owo+ICAKPiAgCUk5MTVfV1JJVEUoUExBTkVfQ1RMKHBpcGUsIDApLCBw bGFuZV9jdGwpOwo+IC0JSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgMCksIHBsYW5lX29m ZnNldCk7Cj4gLQlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgMCksIHBsYW5lX3NpemUpOwo+ IC0JSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwgMCksIHN0cmlkZSk7Cj4gKwlJOTE1X1dS SVRFKFBMQU5FX09GRlNFVChwaXBlLCAwKSwgKHNyY195IDw8IDE2KSB8IHNyY194KTsKPiArCUk5 MTVfV1JJVEUoUExBTkVfU1RSSURFKHBpcGUsIDApLCBzdHJpZGUgLyBzdHJpZGVfZGl2KTsKPiAr CUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCAwKSwgKHNyY19oIDw8IDE2KSB8IHNyY193KTsK PiAgCj4gIAlpZiAoc2NhbGVyX2lkID49IDApIHsKPiAgCQl1aW50MzJfdCBwc19jdHJsID0gMDsK PiBAQCAtMzA1MSw3ICszMTkxLDggQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFy eV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQlJOTE1X1dSSVRFKFBMQU5FX1BP UyhwaXBlLCAwKSwgKGRzdF95IDw8IDE2KSB8IGRzdF94KTsKPiAgCX0KPiAgCj4gLQlJOTE1X1dS SVRFKFBMQU5FX1NVUkYocGlwZSwgMCksIHN1cmZfYWRkcik7Cj4gKwlJOTE1X1dSSVRFKFBMQU5F X1NVUkYocGlwZSwgMCksCj4gKwkJICAgaW50ZWxfZmJfZ3R0X29mZnNldChmYiwgcm90YXRpb24p ICsgc3VyZl9hZGRyKTsKPiAgCj4gIAlQT1NUSU5HX1JFQUQoUExBTkVfU1VSRihwaXBlLCAwKSk7 Cj4gIH0KPiBAQCAtMTE0NjIsNyArMTE2MDMsNyBAQCBzdGF0aWMgdm9pZCBza2xfZG9fbW1pb19m bGlwKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+ICAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIgPSBpbnRlbF9jcnRjLT5iYXNlLnByaW1hcnktPmZiOwo+ICAJY29uc3QgZW51bSBwaXBl IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+IC0JdTMyIGN0bCwgc3RyaWRlLCB0aWxlX2hlaWdo dDsKPiArCXUzMiBjdGwsIHN0cmlkZTsKPiAgCj4gIAljdGwgPSBJOTE1X1JFQUQoUExBTkVfQ1RM KHBpcGUsIDApKTsKPiAgCWN0bCAmPSB+UExBTkVfQ1RMX1RJTEVEX01BU0s7Cj4gQEAgLTExNDg3 LDkgKzExNjI4LDExIEBAIHN0YXRpYyB2b2lkIHNrbF9kb19tbWlvX2ZsaXAoc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGMsCj4gIAkgKiBsaW5lYXIgYnVmZmVycyBvciBpbiBudW1iZXIgb2Yg dGlsZXMgZm9yIHRpbGVkIGJ1ZmZlcnMuCj4gIAkgKi8KPiAgCWlmIChpbnRlbF9yb3RhdGlvbl85 MF9vcl8yNzAocm90YXRpb24pKSB7Cj4gLQkJLyogc3RyaWRlID0gU3VyZmFjZSBoZWlnaHQgaW4g dGlsZXMgKi8KPiAtCQl0aWxlX2hlaWdodCA9IGludGVsX3RpbGVfaGVpZ2h0KGRldl9wcml2LCBm Yi0+bW9kaWZpZXJbMF0sIDApOwo+IC0JCXN0cmlkZSA9IERJVl9ST1VORF9VUChmYi0+aGVpZ2h0 LCB0aWxlX2hlaWdodCk7Cj4gKwkJaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5w aXhlbF9mb3JtYXQsIDApOwo+ICsJCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIg PSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Cj4gKwo+ICsJCXN0cmlkZSA9IGludGVsX2ZiLT5y b3RhdGVkWzBdLnBpdGNoIC8KPiArCQkJaW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5t b2RpZmllclswXSwgY3BwKTsKPiAgCX0gZWxzZSB7Cj4gIAkJc3RyaWRlID0gZmItPnBpdGNoZXNb MF0gLwo+ICAJCQlpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZp ZXJbMF0sCj4gQEAgLTExNzY5LDggKzExOTEyLDcgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3Bh Z2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAlpZiAocmV0KQo+ICAJCWdvdG8gY2xl YW51cF9wZW5kaW5nOwo+ICAKPiAtCXdvcmstPmd0dF9vZmZzZXQgPSBpbnRlbF9wbGFuZV9vYmpf b2Zmc2V0KHRvX2ludGVsX3BsYW5lKHByaW1hcnkpLAo+IC0JCQkJCQkgIG9iaiwgMCk7Cj4gKwl3 b3JrLT5ndHRfb2Zmc2V0ID0gaW50ZWxfZmJfZ3R0X29mZnNldChmYiwgcHJpbWFyeS0+c3RhdGUt PnJvdGF0aW9uKTsKPiAgCXdvcmstPmd0dF9vZmZzZXQgKz0gaW50ZWxfY3J0Yy0+ZHNwYWRkcl9v ZmZzZXQ7Cj4gIAl3b3JrLT5yb3RhdGlvbiA9IGNydGMtPnByaW1hcnktPnN0YXRlLT5yb3RhdGlv bjsKPiAgCj4gQEAgLTE0OTg4LDcgKzE1MTMwLDYgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1 ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJCQkgIHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAtCXVuc2lnbmVkIGludCBhbGlnbmVkX2hlaWdodDsKPiAg CWludCByZXQ7Cj4gIAl1MzIgcGl0Y2hfbGltaXQsIHN0cmlkZV9hbGlnbm1lbnQ7Cj4gIAo+IEBA IC0xNTExNCwxNyArMTUyNTUsMTIgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAlpZiAobW9kZV9jbWQtPm9mZnNldHNbMF0gIT0g MCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gLQlhbGlnbmVkX2hlaWdodCA9IGludGVsX2Zi X2FsaWduX2hlaWdodChkZXYsIG1vZGVfY21kLT5oZWlnaHQsCj4gLQkJCQkJICAgICAgIG1vZGVf Y21kLT5waXhlbF9mb3JtYXQsCj4gLQkJCQkJICAgICAgIG1vZGVfY21kLT5tb2RpZmllclswXSk7 Cj4gLQkvKiBGSVhNRSBkcm0gaGVscGVyIGZvciBzaXplIGNoZWNrcyAoZXNwZWNpYWxseSBwbGFu YXIgZm9ybWF0cyk/ICovCj4gLQlpZiAob2JqLT5iYXNlLnNpemUgPCBhbGlnbmVkX2hlaWdodCAq IG1vZGVfY21kLT5waXRjaGVzWzBdKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAgCWRybV9o ZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgmaW50ZWxfZmItPmJhc2UsIG1vZGVfY21kKTsKPiAg CWludGVsX2ZiLT5vYmogPSBvYmo7Cj4gIAo+IC0JaW50ZWxfZmlsbF9mYl9pbmZvKGRldl9wcml2 LCAmaW50ZWxfZmItPmJhc2UpOwo+ICsJcmV0ID0gaW50ZWxfZmlsbF9mYl9pbmZvKGRldl9wcml2 LCAmaW50ZWxfZmItPmJhc2UpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICAKPiAg CXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJmludGVsX2ZiLT5iYXNlLCAmaW50ZWxf ZmJfZnVuY3MpOwo+ICAJaWYgKHJldCkgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gaW5k ZXggYzI5YTQyOWNiYzQ1Li5hODFkMmI4YmQ3NDAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaAo+IEBAIC0xNzgsNiArMTc4LDE2IEBAIHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciB7Cj4g IAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGJhc2U7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqOwo+ICAJc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gcm90X2luZm87Cj4gKwo+ ICsJLyogZm9yIGVhY2ggcGxhbmUgaW4gdGhlIG5vcm1hbCBHVFQgdmlldyAqLwo+ICsJc3RydWN0 IHsKPiArCQl1bnNpZ25lZCBpbnQgeCwgeTsKPiArCX0gbm9ybWFsWzJdOwo+ICsJLyogZm9yIGVh Y2ggcGxhbmUgaW4gdGhlIHJvdGF0ZWQgR1RUIHZpZXcgKi8KPiArCXN0cnVjdCB7Cj4gKwkJdW5z aWduZWQgaW50IHgsIHk7Cj4gKwkJdW5zaWduZWQgaW50IHBpdGNoOyAvKiBwaXhlbHMgKi8KPiAr CX0gcm90YXRlZFsyXTsKPiAgfTsKPiAgCj4gIHN0cnVjdCBpbnRlbF9mYmRldiB7Cj4gQEAgLTEx NTMsNiArMTE2MywxMSBAQCBpbnQgdmx2X2dldF9jY2tfY2xvY2soc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICAJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHUzMiByZWcsIGlu dCByZWZfZnJlcSk7Cj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGludGVs X3BsYW5lX2Z1bmNzOwo+ICB2b2lkIGludGVsX2luaXRfZGlzcGxheV9ob29rcyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICt1bnNpZ25lZCBpbnQgaW50ZWxfZmJfeHlfdG9f bGluZWFyKGludCB4LCBpbnQgeSwKPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUpOwo+ICt2b2lkIGludGVsX2FkZF9mYl9vZmZzZXRzKGludCAqeCwg aW50ICp5LAo+ICsJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxh bmUsCj4gKwkJCSAgdW5zaWduZWQgaW50IHJvdGF0aW9uKTsKPiAgdW5zaWduZWQgaW50IGludGVs X3JvdGF0aW9uX2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAqcm90 X2luZm8pOwo+ICBib29sIGludGVsX2hhc19wZW5kaW5nX2ZiX3VucGluKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOwo+ICB2b2lkIGludGVsX21hcmtfYnVzeShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwo+IEBAIC0xMzIyLDkgKzEzMzcsNyBAQCB2b2lkIGludGVsX21vZGVfZnJv bV9waXBlX2NvbmZpZyhzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiAgaW50IHNrbF91 cGRhdGVfc2NhbGVyX2NydGMoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ ICBpbnQgc2tsX21heF9zY2FsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yywgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ICAKPiAtdTMyIGludGVsX3BsYW5lX29ial9vZmZz ZXQoc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSwKPiAtCQkJICAgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJICAgdW5zaWduZWQgaW50IHBsYW5lKTsKPiArdTMy IGludGVsX2ZiX2d0dF9vZmZzZXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHVuc2lnbmVk IGludCByb3RhdGlvbik7Cj4gIAo+ICB1MzIgc2tsX3BsYW5lX2N0bF9mb3JtYXQodWludDMyX3Qg cGl4ZWxfZm9ybWF0KTsKPiAgdTMyIHNrbF9wbGFuZV9jdGxfdGlsaW5nKHVpbnQ2NF90IGZiX21v ZGlmaWVyKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRl LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+IGluZGV4IGNiZGNhN2U0 ZDMwNy4uZWY0ZDBhNmUyM2FmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3Nwcml0ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMK PiBAQCAtMjAzLDE1ICsyMDMsMTMgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5l ICpkcm1fcGxhbmUsCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRldik7Cj4gIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxf cGxhbmUoZHJtX3BsYW5lKTsKPiAgCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVf c3RhdGUtPmJhc2UuZmI7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50 ZWxfZmJfb2JqKGZiKTsKPiArCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0 b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Cj4gIAljb25zdCBpbnQgcGlwZSA9IGludGVsX3BsYW5l LT5waXBlOwo+ICAJY29uc3QgaW50IHBsYW5lID0gaW50ZWxfcGxhbmUtPnBsYW5lICsgMTsKPiAg CXUzMiBwbGFuZV9jdGwsIHN0cmlkZV9kaXYsIHN0cmlkZTsKPiAgCWNvbnN0IHN0cnVjdCBkcm1f aW50ZWxfc3ByaXRlX2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7Cj4gIAl1MzIg c3VyZl9hZGRyOwo+IC0JdTMyIHRpbGVfaGVpZ2h0LCBwbGFuZV9vZmZzZXQsIHBsYW5lX3NpemU7 Cj4gIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsK PiAtCWludCB4X29mZnNldCwgeV9vZmZzZXQ7Cj4gIAlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUt PmJhc2UuZHN0LngxOwo+ICAJaW50IGNydGNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLmRzdC55MTsK PiAgCXVpbnQzMl90IGNydGNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+YmFzZS5k c3QpOwo+IEBAIC0yMzAsMTUgKzIyOCw2IEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9w bGFuZSAqZHJtX3BsYW5lLAo+ICAKPiAgCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3JvdGF0 aW9uKHJvdGF0aW9uKTsKPiAgCj4gLQlzdHJpZGVfZGl2ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdu bWVudChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+IC0JCQkJCSAgICAgICBmYi0+cGl4ZWxf Zm9ybWF0KTsKPiAtCj4gLQkvKiBTaXplcyBhcmUgMCBiYXNlZCAqLwo+IC0Jc3JjX3ctLTsKPiAt CXNyY19oLS07Cj4gLQljcnRjX3ctLTsKPiAtCWNydGNfaC0tOwo+IC0KPiAgCWlmIChrZXktPmZs YWdzKSB7Cj4gIAkJSTkxNV9XUklURShQTEFORV9LRVlWQUwocGlwZSwgcGxhbmUpLCBrZXktPm1p bl92YWx1ZSk7Cj4gIAkJSTkxNV9XUklURShQTEFORV9LRVlNQVgocGlwZSwgcGxhbmUpLCBrZXkt Pm1heF92YWx1ZSk7Cj4gQEAgLTI1MCwyOCArMjM5LDQ0IEBAIHNrbF91cGRhdGVfcGxhbmUoc3Ry dWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLAo+ICAJZWxzZSBpZiAoa2V5LT5mbGFncyAmIEk5MTVf U0VUX0NPTE9SS0VZX1NPVVJDRSkKPiAgCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX0tFWV9FTkFC TEVfU09VUkNFOwo+ICAKPiAtCXN1cmZfYWRkciA9IGludGVsX3BsYW5lX29ial9vZmZzZXQoaW50 ZWxfcGxhbmUsIG9iaiwgMCk7Cj4gLQo+ICAJaWYgKGludGVsX3JvdGF0aW9uXzkwX29yXzI3MChy b3RhdGlvbikpIHsKPiAtCQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVs X2Zvcm1hdCwgMCk7Cj4gLQo+IC0JCS8qIHN0cmlkZTogU3VyZmFjZSBoZWlnaHQgaW4gdGlsZXMg Ki8KPiAtCQl0aWxlX2hlaWdodCA9IGludGVsX3RpbGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9k aWZpZXJbMF0sIGNwcCk7Cj4gLQkJc3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5oZWlnaHQsIHRp bGVfaGVpZ2h0KTsKPiAtCQlwbGFuZV9zaXplID0gKHNyY193IDw8IDE2KSB8IHNyY19oOwo+IC0J CXhfb2Zmc2V0ID0gc3RyaWRlICogdGlsZV9oZWlnaHQgLSB5IC0gKHNyY19oICsgMSk7Cj4gLQkJ eV9vZmZzZXQgPSB4Owo+ICsJCXN0cnVjdCBkcm1fcmVjdCByID0gewo+ICsJCQkueDEgPSB4LAo+ ICsJCQkueDIgPSB4ICsgc3JjX3csCj4gKwkJCS55MSA9IHksCj4gKwkJCS55MiA9IHkgKyBzcmNf aCwKPiArCQl9Owo+ICsJCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChm Yi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiArCj4gKwkJLyogUm90YXRlIHNyYyBjb29yZGluYXRlcyB0 byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICovCj4gKwkJZHJtX3JlY3Rfcm90YXRlKCZyLCBmYi0+ d2lkdGgsIGZiLT5oZWlnaHQsIEJJVChEUk1fUk9UQVRFXzI3MCkpOwo+ICsKPiArCQl4ID0gci54 MTsKPiArCQl5ID0gci55MTsKPiArCQlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZyKTsKPiArCQlz cmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcik7Cj4gKwo+ICsJCXN0cmlkZV9kaXYgPSBpbnRlbF90 aWxlX2hlaWdodChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLCBjcHApOwo+ICsJCXN0cmlkZSA9 IGludGVsX2ZiLT5yb3RhdGVkWzBdLnBpdGNoOwo+ICAJfSBlbHNlIHsKPiAtCQlzdHJpZGUgPSBm Yi0+cGl0Y2hlc1swXSAvIHN0cmlkZV9kaXY7Cj4gLQkJcGxhbmVfc2l6ZSA9IChzcmNfaCA8PCAx NikgfCBzcmNfdzsKPiAtCQl4X29mZnNldCA9IHg7Cj4gLQkJeV9vZmZzZXQgPSB5Owo+ICsJCXN0 cmlkZV9kaXYgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZp ZXJbMF0sCj4gKwkJCQkJCSAgICAgICBmYi0+cGl4ZWxfZm9ybWF0KTsKPiArCQlzdHJpZGUgPSBm Yi0+cGl0Y2hlc1swXTsKPiAgCX0KPiAtCXBsYW5lX29mZnNldCA9IHlfb2Zmc2V0IDw8IDE2IHwg eF9vZmZzZXQ7Cj4gIAo+IC0JSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgcGxhbmUpLCBw bGFuZV9vZmZzZXQpOwo+IC0JSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwgcGxhbmUpLCBz dHJpZGUpOwo+IC0JSTkxNV9XUklURShQTEFORV9TSVpFKHBpcGUsIHBsYW5lKSwgcGxhbmVfc2l6 ZSk7Cj4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4g KwlzdXJmX2FkZHIgPSBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCj4g KwkJCQkJICAgICAgc3RyaWRlLCByb3RhdGlvbik7Cj4gKwo+ICsJLyogU2l6ZXMgYXJlIDAgYmFz ZWQgKi8KPiArCXNyY193LS07Cj4gKwlzcmNfaC0tOwo+ICsJY3J0Y193LS07Cj4gKwljcnRjX2gt LTsKPiArCj4gKwlJOTE1X1dSSVRFKFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZSksICh5IDw8IDE2 KSB8IHgpOwo+ICsJSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwgcGxhbmUpLCBzdHJpZGUg LyBzdHJpZGVfZGl2KTsKPiArCUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCBwbGFuZSksIChz cmNfaCA8PCAxNikgfCBzcmNfdyk7Cj4gIAo+ICAJLyogcHJvZ3JhbSBwbGFuZSBzY2FsZXIgKi8K PiAgCWlmIChwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkID49IDApIHsKPiBAQCAtMjk2LDcgKzMwMSw4 IEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLAo+ICAJfQo+ ICAKPiAgCUk5MTVfV1JJVEUoUExBTkVfQ1RMKHBpcGUsIHBsYW5lKSwgcGxhbmVfY3RsKTsKPiAt CUk5MTVfV1JJVEUoUExBTkVfU1VSRihwaXBlLCBwbGFuZSksIHN1cmZfYWRkcik7Cj4gKwlJOTE1 X1dSSVRFKFBMQU5FX1NVUkYocGlwZSwgcGxhbmUpLAo+ICsJCSAgIGludGVsX2ZiX2d0dF9vZmZz ZXQoZmIsIHJvdGF0aW9uKSArIHN1cmZfYWRkcik7Cj4gIAlQT1NUSU5HX1JFQUQoUExBTkVfU1VS RihwaXBlLCBwbGFuZSkpOwo+ICB9Cj4gIAo+IEBAIC0zNjksNyArMzc1LDYgQEAgdmx2X3VwZGF0 ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcGxhbmUsCj4gIAl1MzIgc3ByY3RsOwo+ICAJdTMy IHNwcnN1cmZfb2Zmc2V0LCBsaW5lYXJfb2Zmc2V0Owo+ICAJdW5zaWduZWQgaW50IHJvdGF0aW9u ID0gZHBsYW5lLT5zdGF0ZS0+cm90YXRpb247Cj4gLQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFu ZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gIAljb25zdCBzdHJ1Y3QgZHJtX2ludGVsX3Nw cml0ZV9jb2xvcmtleSAqa2V5ID0gJnBsYW5lX3N0YXRlLT5ja2V5Owo+ICAJaW50IGNydGNfeCA9 IHBsYW5lX3N0YXRlLT5iYXNlLmRzdC54MTsKPiAgCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+ YmFzZS5kc3QueTE7Cj4gQEAgLTQ0MCwxOSArNDQ1LDE5IEBAIHZsdl91cGRhdGVfcGxhbmUoc3Ry dWN0IGRybV9wbGFuZSAqZHBsYW5lLAo+ICAJY3J0Y193LS07Cj4gIAljcnRjX2gtLTsKPiAgCj4g LQlsaW5lYXJfb2Zmc2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsgeCAqIGNwcDsKPiArCWludGVs X2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9uKTsKPiAgCXNwcnN1cmZfb2Zm c2V0ID0gaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ICAJCQkJCQkg ICBmYi0+cGl0Y2hlc1swXSwgcm90YXRpb24pOwo+IC0JbGluZWFyX29mZnNldCAtPSBzcHJzdXJm X29mZnNldDsKPiAgCj4gIAlpZiAocm90YXRpb24gPT0gRFJNX1JPVEFURV8xODApIHsKPiAgCQlz cHJjdGwgfD0gU1BfUk9UQVRFXzE4MDsKPiAgCj4gIAkJeCArPSBzcmNfdzsKPiAgCQl5ICs9IHNy Y19oOwo+IC0JCWxpbmVhcl9vZmZzZXQgKz0gc3JjX2ggKiBmYi0+cGl0Y2hlc1swXSArIHNyY193 ICogY3BwOwo+ICAJfQo+ICAKPiArCWxpbmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5l YXIoeCwgeSwgZmIsIDApOwo+ICsKPiAgCWlmIChrZXktPmZsYWdzKSB7Cj4gIAkJSTkxNV9XUklU RShTUEtFWU1JTlZBTChwaXBlLCBwbGFuZSksIGtleS0+bWluX3ZhbHVlKTsKPiAgCQlJOTE1X1dS SVRFKFNQS0VZTUFYVkFMKHBpcGUsIHBsYW5lKSwga2V5LT5tYXhfdmFsdWUpOwo+IEBAIC00Nzcs OCArNDgyLDggQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcGxhbmUsCj4g IAo+ICAJSTkxNV9XUklURShTUFNJWkUocGlwZSwgcGxhbmUpLCAoY3J0Y19oIDw8IDE2KSB8IGNy dGNfdyk7Cj4gIAlJOTE1X1dSSVRFKFNQQ05UUihwaXBlLCBwbGFuZSksIHNwcmN0bCk7Cj4gLQlJ OTE1X1dSSVRFKFNQU1VSRihwaXBlLCBwbGFuZSksIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChv YmopICsKPiAtCQkgICBzcHJzdXJmX29mZnNldCk7Cj4gKwlJOTE1X1dSSVRFKFNQU1VSRihwaXBl LCBwbGFuZSksCj4gKwkJICAgaW50ZWxfZmJfZ3R0X29mZnNldChmYiwgcm90YXRpb24pICsgc3By c3VyZl9vZmZzZXQpOwo+ICAJUE9TVElOR19SRUFEKFNQU1VSRihwaXBlLCBwbGFuZSkpOwo+ICB9 Cj4gIAo+IEBAIC01MTEsNyArNTE2LDYgQEAgaXZiX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKPiAgCXUzMiBzcHJjdGwsIHNwcnNjYWxlID0gMDsKPiAgCXUzMiBzcHJzdXJm X29mZnNldCwgbGluZWFyX29mZnNldDsKPiAgCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5l X3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+IC0JaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3Bw KGZiLT5waXhlbF9mb3JtYXQsIDApOwo+ICAJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVf Y29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKPiAgCWludCBjcnRjX3ggPSBwbGFu ZV9zdGF0ZS0+YmFzZS5kc3QueDE7Cj4gIAlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPmJhc2Uu ZHN0LnkxOwo+IEBAIC01NzMsMTAgKzU3Nyw5IEBAIGl2Yl91cGRhdGVfcGxhbmUoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCj4gIAlpZiAoY3J0Y193ICE9IHNyY193IHx8IGNydGNfaCAhPSBzcmNf aCkKPiAgCQlzcHJzY2FsZSA9IFNQUklURV9TQ0FMRV9FTkFCTEUgfCAoc3JjX3cgPDwgMTYpIHwg c3JjX2g7Cj4gIAo+IC0JbGluZWFyX29mZnNldCA9IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBj cHA7Cj4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4g IAlzcHJzdXJmX29mZnNldCA9IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJngsICZ5LCBmYiwg MCwKPiAgCQkJCQkJICAgZmItPnBpdGNoZXNbMF0sIHJvdGF0aW9uKTsKPiAtCWxpbmVhcl9vZmZz ZXQgLT0gc3Byc3VyZl9vZmZzZXQ7Cj4gIAo+ICAJaWYgKHJvdGF0aW9uID09IERSTV9ST1RBVEVf MTgwKSB7Cj4gIAkJc3ByY3RsIHw9IFNQUklURV9ST1RBVEVfMTgwOwo+IEBAIC01ODUsMTAgKzU4 OCwxMSBAQCBpdmJfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCWlm ICghSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSkgewo+ICAJCQl4ICs9IHNy Y193Owo+ICAJCQl5ICs9IHNyY19oOwo+IC0JCQlsaW5lYXJfb2Zmc2V0ICs9IHNyY19oICogZmIt PnBpdGNoZXNbMF0gKyBzcmNfdyAqIGNwcDsKPiAgCQl9Cj4gIAl9Cj4gIAo+ICsJbGluZWFyX29m ZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7Cj4gKwo+ICAJaWYgKGtl eS0+ZmxhZ3MpIHsKPiAgCQlJOTE1X1dSSVRFKFNQUktFWVZBTChwaXBlKSwga2V5LT5taW5fdmFs dWUpOwo+ICAJCUk5MTVfV1JJVEUoU1BSS0VZTUFYKHBpcGUpLCBrZXktPm1heF92YWx1ZSk7Cj4g QEAgLTYxNyw3ICs2MjEsNyBAQCBpdmJfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAo+ICAJCUk5MTVfV1JJVEUoU1BSU0NBTEUocGlwZSksIHNwcnNjYWxlKTsKPiAgCUk5MTVf V1JJVEUoU1BSQ1RMKHBpcGUpLCBzcHJjdGwpOwo+ICAJSTkxNV9XUklURShTUFJTVVJGKHBpcGUp LAo+IC0JCSAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsgc3Byc3VyZl9vZmZzZXQp Owo+ICsJCSAgIGludGVsX2ZiX2d0dF9vZmZzZXQoZmIsIHJvdGF0aW9uKSArIHNwcnN1cmZfb2Zm c2V0KTsKPiAgCVBPU1RJTkdfUkVBRChTUFJTVVJGKHBpcGUpKTsKPiAgfQo+ICAKPiBAQCAtNjUy LDcgKzY1Niw2IEBAIGlsa191cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4g IAl1MzIgZHZzY250ciwgZHZzc2NhbGU7Cj4gIAl1MzIgZHZzc3VyZl9vZmZzZXQsIGxpbmVhcl9v ZmZzZXQ7Cj4gIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3Rh dGlvbjsKPiAtCWludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0 LCAwKTsKPiAgCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5ICprZXkgPSAm cGxhbmVfc3RhdGUtPmNrZXk7Cj4gIAlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPmJhc2UuZHN0 LngxOwo+ICAJaW50IGNydGNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLmRzdC55MTsKPiBAQCAtNzEw LDE5ICs3MTMsMTkgQEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK PiAgCWlmIChjcnRjX3cgIT0gc3JjX3cgfHwgY3J0Y19oICE9IHNyY19oKQo+ICAJCWR2c3NjYWxl ID0gRFZTX1NDQUxFX0VOQUJMRSB8IChzcmNfdyA8PCAxNikgfCBzcmNfaDsKPiAgCj4gLQlsaW5l YXJfb2Zmc2V0ID0geSAqIGZiLT5waXRjaGVzWzBdICsgeCAqIGNwcDsKPiArCWludGVsX2FkZF9m Yl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9uKTsKPiAgCWR2c3N1cmZfb2Zmc2V0ID0g aW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ICAJCQkJCQkgICBmYi0+ cGl0Y2hlc1swXSwgcm90YXRpb24pOwo+IC0JbGluZWFyX29mZnNldCAtPSBkdnNzdXJmX29mZnNl dDsKPiAgCj4gIAlpZiAocm90YXRpb24gPT0gRFJNX1JPVEFURV8xODApIHsKPiAgCQlkdnNjbnRy IHw9IERWU19ST1RBVEVfMTgwOwo+ICAKPiAgCQl4ICs9IHNyY193Owo+ICAJCXkgKz0gc3JjX2g7 Cj4gLQkJbGluZWFyX29mZnNldCArPSBzcmNfaCAqIGZiLT5waXRjaGVzWzBdICsgc3JjX3cgKiBj cHA7Cj4gIAl9Cj4gIAo+ICsJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4 LCB5LCBmYiwgMCk7Cj4gKwo+ICAJaWYgKGtleS0+ZmxhZ3MpIHsKPiAgCQlJOTE1X1dSSVRFKERW U0tFWVZBTChwaXBlKSwga2V5LT5taW5fdmFsdWUpOwo+ICAJCUk5MTVfV1JJVEUoRFZTS0VZTUFY KHBpcGUpLCBrZXktPm1heF92YWx1ZSk7Cj4gQEAgLTc0Niw3ICs3NDksNyBAQCBpbGtfdXBkYXRl X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJSTkxNV9XUklURShEVlNTQ0FMRShw aXBlKSwgZHZzc2NhbGUpOwo+ICAJSTkxNV9XUklURShEVlNDTlRSKHBpcGUpLCBkdnNjbnRyKTsK PiAgCUk5MTVfV1JJVEUoRFZTU1VSRihwaXBlKSwKPiAtCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9v ZmZzZXQob2JqKSArIGR2c3N1cmZfb2Zmc2V0KTsKPiArCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0 KGZiLCByb3RhdGlvbikgKyBkdnNzdXJmX29mZnNldCk7Cj4gIAlQT1NUSU5HX1JFQUQoRFZTU1VS RihwaXBlKSk7Cj4gIH0KPiAgCj4gLS0gCj4gMi43LjQKPiAKPiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3 YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK