From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 06/19] drm/i915: Convert clflushed pagetables over to WC maps Date: Thu, 09 Feb 2017 17:08:54 +0200 Message-ID: <87r337qu49.fsf@gaia.fi.intel.com> References: <20170202150248.27860-1-chris@chris-wilson.co.uk> <20170202150248.27860-6-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id D0F056E0F3 for ; Thu, 9 Feb 2017 15:09:53 +0000 (UTC) In-Reply-To: <20170202150248.27860-6-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gV2UgZmx1 c2ggdGhlIGVudGlyZSBwYWdlIGV2ZXJ5IHRpbWUgd2UgdXBkYXRlIGEgZmV3IGJ5dGVzLCBtYWtp bmcgdGhlCj4gdXBkYXRlIG9mIGEgcGFnZSB0YWJsZSBtYW55LCBtYW55IHRpbWVzIHNsb3dlciB0 aGFuIGlzIHJlcXVpcmVkLiBJZiB3ZQo+IGNyZWF0ZSBhIFdDIG1hcCBvZiB0aGUgcGFnZSBmb3Ig b3VyIHVwZGF0ZXMsIHdlIGNhbiBhdm9pZCB0aGUgY2xmbHVzaAo+IGJ1dCBpbmN1ciBhZGRpdGlv bmFsIGNvc3QgZm9yIGNyZWF0aW5nIHRoZSBwYWdldGFibGUuIFdlIGFtb3JpdGl6ZSB0aGF0Cj4g Y29zdCBieSByZXVzaW5nIHBhZ2Ugdm1hcHBpbmdzLCBhbmQgb25seSBjaGFuZ2luZyB0aGUgcGFn ZSBwcm90ZWN0aW9uIGluCj4gYmF0Y2hlcy4KPgo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuYyB8IDMyOSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmggfCAgIDUgKwo+ICAyIGZp bGVzIGNoYW5nZWQsIDE3MiBpbnNlcnRpb25zKCspLCAxNjIgZGVsZXRpb25zKC0pCj4KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IGluZGV4IDQ1YmFiN2I3YjAyNi4uMzAyYWVlMTkz Y2U1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBAQCAtMzQwLDQzICsz NDAsNjkgQEAgc3RhdGljIGdlbjZfcHRlX3QgaXJpc19wdGVfZW5jb2RlKGRtYV9hZGRyX3QgYWRk ciwKPiAgCXJldHVybiBwdGU7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgX19zZXR1cF9wYWdlX2Rt YShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgICBzdHJ1Y3QgaTkx NV9wYWdlX2RtYSAqcCwgZ2ZwX3QgZmxhZ3MpCj4gK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqdm1fYWxs b2NfcGFnZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwgZ2ZwX3QgZ2ZwKQo+ICB7Cj4g LQlzdHJ1Y3QgZGV2aWNlICprZGV2ID0gJmRldl9wcml2LT5kcm0ucGRldi0+ZGV2Owo+ICsJc3Ry dWN0IHBhZ2UgKnBhZ2U7Cj4gIAo+IC0JcC0+cGFnZSA9IGFsbG9jX3BhZ2UoZmxhZ3MpOwo+IC0J aWYgKCFwLT5wYWdlKQo+IC0JCXJldHVybiAtRU5PTUVNOwo+ICsJaWYgKHZtLT5mcmVlX3BhZ2Vz Lm5yKQo+ICsJCXJldHVybiB2bS0+ZnJlZV9wYWdlcy5wYWdlc1stLXZtLT5mcmVlX3BhZ2VzLm5y XTsKPiAgCj4gLQlwLT5kYWRkciA9IGRtYV9tYXBfcGFnZShrZGV2LAo+IC0JCQkJcC0+cGFnZSwg MCwgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwo+ICsJcGFnZSA9IGFsbG9jX3Bh Z2UoZ2ZwKTsKPiArCWlmICghcGFnZSkKPiArCQlyZXR1cm4gTlVMTDsKPiAgCj4gLQlpZiAoZG1h X21hcHBpbmdfZXJyb3Ioa2RldiwgcC0+ZGFkZHIpKSB7Cj4gLQkJX19mcmVlX3BhZ2UocC0+cGFn ZSk7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwlpZiAodm0tPnB0X2ttYXBfd2MpCj4gKwkJc2V0 X3BhZ2VzX2FycmF5X3djKCZwYWdlLCAxKTsKPiArCj4gKwlyZXR1cm4gcGFnZTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgdm1fZnJlZV9wYWdlc19yZWxlYXNlKHN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtKQo+ICt7Cj4gKwlHRU1fQlVHX09OKCFwYWdldmVjX2NvdW50KCZ2bS0+ZnJlZV9w YWdlcykpOwo+ICsKPiArCWlmICh2bS0+cHRfa21hcF93YykKPiArCQlzZXRfcGFnZXNfYXJyYXlf d2Iodm0tPmZyZWVfcGFnZXMucGFnZXMsCj4gKwkJCQkgICBwYWdldmVjX2NvdW50KCZ2bS0+ZnJl ZV9wYWdlcykpOwo+ICsKPiArCV9fcGFnZXZlY19yZWxlYXNlKCZ2bS0+ZnJlZV9wYWdlcyk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHZtX2ZyZWVfcGFnZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwgc3RydWN0IHBhZ2UgKnBhZ2UpCj4gK3sKPiArCWlmICghcGFnZXZlY19hZGQoJnZt LT5mcmVlX3BhZ2VzLCBwYWdlKSkKPiArCQl2bV9mcmVlX3BhZ2VzX3JlbGVhc2Uodm0pOwoKV2hh dCBhYm91dCB0aGUgcGFnZSB5b3UgZmFpbGVkIHRvIHB1c2ggdG8gdmVjPwoKRm9yIG1lIGl0IHNl ZW1zIHRoYXQgeW91IGFyZSBtaXNzaW5nIGEgcmV0cnkgYWZ0ZXIKdmVjIGNsZWFudXAuCgotTWlr YQoKPiArfQo+ICsKPiArc3RhdGljIGludCBfX3NldHVwX3BhZ2VfZG1hKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtLAo+ICsJCQkgICAgc3RydWN0IGk5MTVfcGFnZV9kbWEgKnAsCj4gKwkJ CSAgICBnZnBfdCBnZnApCj4gK3sKPiArCXAtPnBhZ2UgPSB2bV9hbGxvY19wYWdlKHZtLCBnZnAg fCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZKTsKPiArCWlmICh1bmxpa2VseSghcC0+cGFn ZSkpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcC0+ZGFkZHIgPSBkbWFfbWFwX3BhZ2Uo dm0tPmRtYSwgcC0+cGFnZSwgMCwgUEFHRV9TSVpFLAo+ICsJCQkJUENJX0RNQV9CSURJUkVDVElP TkFMKTsKPiArCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcih2bS0+ZG1hLCBwLT5kYWRk cikpKSB7Cj4gKwkJdm1fZnJlZV9wYWdlKHZtLCBwLT5wYWdlKTsKPiArCQlyZXR1cm4gLUVOT01F TTsKPiAgCX0KPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBzZXR1cF9w YWdlX2RtYShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gK3N0YXRpYyBpbnQg c2V0dXBfcGFnZV9kbWEoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCSAgc3Ry dWN0IGk5MTVfcGFnZV9kbWEgKnApCj4gIHsKPiAtCXJldHVybiBfX3NldHVwX3BhZ2VfZG1hKGRl dl9wcml2LCBwLCBJOTE1X0dGUF9ETUEpOwo+ICsJcmV0dXJuIF9fc2V0dXBfcGFnZV9kbWEodm0s IHAsIEk5MTVfR0ZQX0RNQSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGNsZWFudXBfcGFnZV9k bWEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICtzdGF0aWMgdm9pZCBjbGVh bnVwX3BhZ2VfZG1hKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkgICAgIHN0 cnVjdCBpOTE1X3BhZ2VfZG1hICpwKQo+ICB7Cj4gLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRl dl9wcml2LT5kcm0ucGRldjsKPiAtCj4gLQlpZiAoV0FSTl9PTighcC0+cGFnZSkpCj4gLQkJcmV0 dXJuOwo+IC0KPiAtCWRtYV91bm1hcF9wYWdlKCZwZGV2LT5kZXYsIHAtPmRhZGRyLCBQQUdFX1NJ WkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Cj4gLQlfX2ZyZWVfcGFnZShwLT5wYWdlKTsKPiAt CW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKPiArCWRtYV91bm1hcF9wYWdlKHZtLT5kbWEsIHAt PmRhZGRyLCBQQUdFX1NJWkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Cj4gKwl2bV9mcmVlX3Bh Z2Uodm0sIHAtPnBhZ2UpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCAqa21hcF9wYWdlX2RtYShz dHJ1Y3QgaTkxNV9wYWdlX2RtYSAqcCkKPiBAQCAtMzg3LDY3ICs0MTMsNTQgQEAgc3RhdGljIHZv aWQgKmttYXBfcGFnZV9kbWEoc3RydWN0IGk5MTVfcGFnZV9kbWEgKnApCj4gIC8qIFdlIHVzZSB0 aGUgZmx1c2hpbmcgdW5tYXAgb25seSB3aXRoIHBwZ3R0IHN0cnVjdHVyZXM6Cj4gICAqIHBhZ2Ug ZGlyZWN0b3JpZXMsIHBhZ2UgdGFibGVzIGFuZCBzY3JhdGNoIHBhZ2VzLgo+ICAgKi8KPiAtc3Rh dGljIHZvaWQga3VubWFwX3BhZ2VfZG1hKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgdm9pZCAqdmFkZHIpCj4gK3N0YXRpYyB2b2lkIGt1bm1hcF9wYWdlX2RtYSh2b2lkICp2YWRk cikKPiAgewo+IC0JLyogVGhlcmUgYXJlIG9ubHkgZmV3IGV4Y2VwdGlvbnMgZm9yIGdlbiA+PTYu IGNodiBhbmQgYnh0Lgo+IC0JICogQW5kIHdlIGFyZSBub3Qgc3VyZSBhYm91dCB0aGUgbGF0dGVy IHNvIHBsYXkgc2FmZSBmb3Igbm93Lgo+IC0JICovCj4gLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikgfHwgSVNfR0VOOV9MUChkZXZfcHJpdikpCj4gLQkJZHJtX2NsZmx1c2hfdmlydF9yYW5n ZSh2YWRkciwgUEFHRV9TSVpFKTsKPiAtCj4gIAlrdW5tYXBfYXRvbWljKHZhZGRyKTsKPiAgfQo+ ICAKPiAgI2RlZmluZSBrbWFwX3B4KHB4KSBrbWFwX3BhZ2VfZG1hKHB4X2Jhc2UocHgpKQo+IC0j ZGVmaW5lIGt1bm1hcF9weChwcGd0dCwgdmFkZHIpIFwKPiAtCQlrdW5tYXBfcGFnZV9kbWEoKHBw Z3R0KS0+YmFzZS5pOTE1LCAodmFkZHIpKQo+ICsjZGVmaW5lIGt1bm1hcF9weCh2YWRkcikga3Vu bWFwX3BhZ2VfZG1hKCh2YWRkcikpCj4gIAo+IC0jZGVmaW5lIHNldHVwX3B4KGRldl9wcml2LCBw eCkgc2V0dXBfcGFnZV9kbWEoKGRldl9wcml2KSwgcHhfYmFzZShweCkpCj4gLSNkZWZpbmUgY2xl YW51cF9weChkZXZfcHJpdiwgcHgpIGNsZWFudXBfcGFnZV9kbWEoKGRldl9wcml2KSwgcHhfYmFz ZShweCkpCj4gLSNkZWZpbmUgZmlsbF9weChkZXZfcHJpdiwgcHgsIHYpIGZpbGxfcGFnZV9kbWEo KGRldl9wcml2KSwgcHhfYmFzZShweCksICh2KSkKPiAtI2RlZmluZSBmaWxsMzJfcHgoZGV2X3By aXYsIHB4LCB2KSBcCj4gLQkJZmlsbF9wYWdlX2RtYV8zMigoZGV2X3ByaXYpLCBweF9iYXNlKHB4 KSwgKHYpKQo+ICsjZGVmaW5lIHNldHVwX3B4KHZtLCBweCkgc2V0dXBfcGFnZV9kbWEoKHZtKSwg cHhfYmFzZShweCkpCj4gKyNkZWZpbmUgY2xlYW51cF9weCh2bSwgcHgpIGNsZWFudXBfcGFnZV9k bWEoKHZtKSwgcHhfYmFzZShweCkpCj4gKyNkZWZpbmUgZmlsbF9weChwcGd0dCwgcHgsIHYpIGZp bGxfcGFnZV9kbWEoKHZtKSwgcHhfYmFzZShweCksICh2KSkKPiArI2RlZmluZSBmaWxsMzJfcHgo cHBndHQsIHB4LCB2KSBmaWxsX3BhZ2VfZG1hXzMyKCh2bSksIHB4X2Jhc2UocHgpLCAodikpCj4g IAo+IC1zdGF0aWMgdm9pZCBmaWxsX3BhZ2VfZG1hKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiAtCQkJICBzdHJ1Y3QgaTkxNV9wYWdlX2RtYSAqcCwgY29uc3QgdWludDY0X3Qg dmFsKQo+ICtzdGF0aWMgdm9pZCBmaWxsX3BhZ2VfZG1hKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtLAo+ICsJCQkgIHN0cnVjdCBpOTE1X3BhZ2VfZG1hICpwLAo+ICsJCQkgIGNvbnN0IHU2 NCB2YWwpCj4gIHsKPiArCXU2NCAqIGNvbnN0IHZhZGRyID0ga21hcF9wYWdlX2RtYShwKTsKPiAg CWludCBpOwo+IC0JdWludDY0X3QgKiBjb25zdCB2YWRkciA9IGttYXBfcGFnZV9kbWEocCk7Cj4g IAo+ICAJZm9yIChpID0gMDsgaSA8IDUxMjsgaSsrKQo+ICAJCXZhZGRyW2ldID0gdmFsOwo+ICAK PiAtCWt1bm1hcF9wYWdlX2RtYShkZXZfcHJpdiwgdmFkZHIpOwo+ICsJa3VubWFwX3BhZ2VfZG1h KHZhZGRyKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgZmlsbF9wYWdlX2RtYV8zMihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgICAgc3RydWN0IGk5MTVfcGFnZV9k bWEgKnAsIGNvbnN0IHVpbnQzMl90IHZhbDMyKQo+ICtzdGF0aWMgdm9pZCBmaWxsX3BhZ2VfZG1h XzMyKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICsJCQkgICAgIHN0cnVjdCBpOTE1 X3BhZ2VfZG1hICpwLAo+ICsJCQkgICAgIGNvbnN0IHUzMiB2KQo+ICB7Cj4gLQl1aW50NjRfdCB2 ID0gdmFsMzI7Cj4gLQo+IC0JdiA9IHYgPDwgMzIgfCB2YWwzMjsKPiAtCj4gLQlmaWxsX3BhZ2Vf ZG1hKGRldl9wcml2LCBwLCB2KTsKPiArCWZpbGxfcGFnZV9kbWEodm0sIHAsICh1NjQpdiA8PCAz MiB8IHYpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50Cj4gLXNldHVwX3NjcmF0Y2hfcGFnZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJICAgc3RydWN0IGk5MTVfcGFnZV9k bWEgKnNjcmF0Y2gsCj4gLQkJICAgZ2ZwX3QgZ2ZwKQo+ICtzZXR1cF9zY3JhdGNoX3BhZ2Uoc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sIGdmcF90IGdmcCkKPiAgewo+IC0JcmV0dXJuIF9f c2V0dXBfcGFnZV9kbWEoZGV2X3ByaXYsIHNjcmF0Y2gsIGdmcCB8IF9fR0ZQX1pFUk8pOwo+ICsJ cmV0dXJuIF9fc2V0dXBfcGFnZV9kbWEodm0sICZ2bS0+c2NyYXRjaF9wYWdlLCBnZnAgfCBfX0dG UF9aRVJPKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgY2xlYW51cF9zY3JhdGNoX3BhZ2Uoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJIHN0cnVjdCBpOTE1X3BhZ2Vf ZG1hICpzY3JhdGNoKQo+ICtzdGF0aWMgdm9pZCBjbGVhbnVwX3NjcmF0Y2hfcGFnZShzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgewo+IC0JY2xlYW51cF9wYWdlX2RtYShkZXZfcHJp diwgc2NyYXRjaCk7Cj4gKwljbGVhbnVwX3BhZ2VfZG1hKHZtLCAmdm0tPnNjcmF0Y2hfcGFnZSk7 Cj4gIH0KPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICphbGxvY19wdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9wYWdl X3RhYmxlICphbGxvY19wdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgewo+ICAJ c3RydWN0IGk5MTVfcGFnZV90YWJsZSAqcHQ7Cj4gLQljb25zdCBzaXplX3QgY291bnQgPSBJTlRF TF9HRU4oZGV2X3ByaXYpID49IDggPyBHRU44X1BURVMgOiBHRU42X1BURVM7Cj4gKwljb25zdCBz aXplX3QgY291bnQgPSBJTlRFTF9HRU4odm0tPmk5MTUpID49IDggPyBHRU44X1BURVMgOiBHRU42 X1BURVM7Cj4gIAlpbnQgcmV0ID0gLUVOT01FTTsKPiAgCj4gIAlwdCA9IGt6YWxsb2Moc2l6ZW9m KCpwdCksIEdGUF9LRVJORUwpOwo+IEBAIC00NjAsNyArNDczLDcgQEAgc3RhdGljIHN0cnVjdCBp OTE1X3BhZ2VfdGFibGUgKmFsbG9jX3B0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiAgCWlmICghcHQtPnVzZWRfcHRlcykKPiAgCQlnb3RvIGZhaWxfYml0bWFwOwo+ICAKPiAt CXJldCA9IHNldHVwX3B4KGRldl9wcml2LCBwdCk7Cj4gKwlyZXQgPSBzZXR1cF9weCh2bSwgcHQp Owo+ICAJaWYgKHJldCkKPiAgCQlnb3RvIGZhaWxfcGFnZV9tOwo+ICAKPiBAQCAtNDc0LDEwICs0 ODcsOSBAQCBzdGF0aWMgc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqYWxsb2NfcHQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgfQo+ ICAKPiAtc3RhdGljIHZvaWQgZnJlZV9wdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gLQkJICAgIHN0cnVjdCBpOTE1X3BhZ2VfdGFibGUgKnB0KQo+ICtzdGF0aWMgdm9pZCBm cmVlX3B0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLCBzdHJ1Y3QgaTkxNV9wYWdlX3Rh YmxlICpwdCkKPiAgewo+IC0JY2xlYW51cF9weChkZXZfcHJpdiwgcHQpOwo+ICsJY2xlYW51cF9w eCh2bSwgcHQpOwo+ICAJa2ZyZWUocHQtPnVzZWRfcHRlcyk7Cj4gIAlrZnJlZShwdCk7Cj4gIH0K PiBAQCAtNDkwLDcgKzUwMiw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfaW5pdGlhbGl6ZV9wdChzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCXNjcmF0Y2hfcHRlID0gZ2VuOF9wdGVfZW5j b2RlKHZtLT5zY3JhdGNoX3BhZ2UuZGFkZHIsCj4gIAkJCQkgICAgICBJOTE1X0NBQ0hFX0xMQyk7 Cj4gIAo+IC0JZmlsbF9weCh2bS0+aTkxNSwgcHQsIHNjcmF0Y2hfcHRlKTsKPiArCWZpbGxfcHgo dm0sIHB0LCBzY3JhdGNoX3B0ZSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGdlbjZfaW5pdGlh bGl6ZV9wdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiBAQCAtNTAzLDEwICs1MTUs MTAgQEAgc3RhdGljIHZvaWQgZ2VuNl9pbml0aWFsaXplX3B0KHN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtLAo+ICAJc2NyYXRjaF9wdGUgPSB2bS0+cHRlX2VuY29kZSh2bS0+c2NyYXRjaF9w YWdlLmRhZGRyLAo+ICAJCQkJICAgICBJOTE1X0NBQ0hFX0xMQywgMCk7Cj4gIAo+IC0JZmlsbDMy X3B4KHZtLT5pOTE1LCBwdCwgc2NyYXRjaF9wdGUpOwo+ICsJZmlsbDMyX3B4KHZtLCBwdCwgc2Ny YXRjaF9wdGUpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rvcnkg KmFsbG9jX3BkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArc3RhdGljIHN0 cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICphbGxvY19wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSkKPiAgewo+ICAJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkOwo+ICAJaW50 IHJldCA9IC1FTk9NRU07Cj4gQEAgLTUyMCw3ICs1MzIsNyBAQCBzdGF0aWMgc3RydWN0IGk5MTVf cGFnZV9kaXJlY3RvcnkgKmFsbG9jX3BkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiAgCWlmICghcGQtPnVzZWRfcGRlcykKPiAgCQlnb3RvIGZhaWxfYml0bWFwOwo+ICAKPiAt CXJldCA9IHNldHVwX3B4KGRldl9wcml2LCBwZCk7Cj4gKwlyZXQgPSBzZXR1cF9weCh2bSwgcGQp Owo+ICAJaWYgKHJldCkKPiAgCQlnb3RvIGZhaWxfcGFnZV9tOwo+ICAKPiBAQCAtNTM0LDExICs1 NDYsMTEgQEAgc3RhdGljIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICphbGxvY19wZChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBmcmVlX3BkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiArc3RhdGljIHZvaWQgZnJlZV9wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSwKPiAgCQkgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkKQo+ICB7Cj4gIAlp ZiAocHhfcGFnZShwZCkpIHsKPiAtCQljbGVhbnVwX3B4KGRldl9wcml2LCBwZCk7Cj4gKwkJY2xl YW51cF9weCh2bSwgcGQpOwo+ICAJCWtmcmVlKHBkLT51c2VkX3BkZXMpOwo+ICAJCWtmcmVlKHBk KTsKPiAgCX0KPiBAQCAtNTUxLDcgKzU2Myw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfaW5pdGlhbGl6 ZV9wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCj4gIAlzY3JhdGNoX3BkZSA9 IGdlbjhfcGRlX2VuY29kZShweF9kbWEodm0tPnNjcmF0Y2hfcHQpLCBJOTE1X0NBQ0hFX0xMQyk7 Cj4gIAo+IC0JZmlsbF9weCh2bS0+aTkxNSwgcGQsIHNjcmF0Y2hfcGRlKTsKPiArCWZpbGxfcHgo dm0sIHBkLCBzY3JhdGNoX3BkZSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgX19wZHBfaW5pdChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gQEAgLTU4NSwyMyArNTk3LDIzIEBA IHN0YXRpYyB2b2lkIF9fcGRwX2Zpbmkoc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRl ciAqcGRwKQo+ICAJcGRwLT5wYWdlX2RpcmVjdG9yeSA9IE5VTEw7Cj4gIH0KPiAgCj4gLXN0YXRp YyBzdHJ1Y3QKPiAtaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyICphbGxvY19wZHAoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcGFnZV9k aXJlY3RvcnlfcG9pbnRlciAqCj4gK2FsbG9jX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSkKPiAgewo+ICAJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwOwo+ ICAJaW50IHJldCA9IC1FTk9NRU07Cj4gIAo+IC0JV0FSTl9PTighVVNFU19GVUxMXzQ4QklUX1BQ R1RUKGRldl9wcml2KSk7Cj4gKwlXQVJOX09OKCFVU0VTX0ZVTExfNDhCSVRfUFBHVFQodm0tPmk5 MTUpKTsKPiAgCj4gIAlwZHAgPSBremFsbG9jKHNpemVvZigqcGRwKSwgR0ZQX0tFUk5FTCk7Cj4g IAlpZiAoIXBkcCkKPiAgCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAgCj4gLQlyZXQgPSBf X3BkcF9pbml0KGRldl9wcml2LCBwZHApOwo+ICsJcmV0ID0gX19wZHBfaW5pdCh2bS0+aTkxNSwg cGRwKTsKPiAgCWlmIChyZXQpCj4gIAkJZ290byBmYWlsX2JpdG1hcDsKPiAgCj4gLQlyZXQgPSBz ZXR1cF9weChkZXZfcHJpdiwgcGRwKTsKPiArCXJldCA9IHNldHVwX3B4KHZtLCBwZHApOwo+ICAJ aWYgKHJldCkKPiAgCQlnb3RvIGZhaWxfcGFnZV9tOwo+ICAKPiBAQCAtNjE1LDEyICs2MjcsMTIg QEAgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyICphbGxvY19wZHAoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgfQo+ICAKPiAt c3RhdGljIHZvaWQgZnJlZV9wZHAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ICtzdGF0aWMgdm9pZCBmcmVlX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAg CQkgICAgIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBkcCkKPiAgewo+ICAJ X19wZHBfZmluaShwZHApOwo+IC0JaWYgKFVTRVNfRlVMTF80OEJJVF9QUEdUVChkZXZfcHJpdikp IHsKPiAtCQljbGVhbnVwX3B4KGRldl9wcml2LCBwZHApOwo+ICsJaWYgKFVTRVNfRlVMTF80OEJJ VF9QUEdUVCh2bS0+aTkxNSkpIHsKPiArCQljbGVhbnVwX3B4KHZtLCBwZHApOwo+ICAJCWtmcmVl KHBkcCk7Cj4gIAl9Cj4gIH0KPiBAQCAtNjMyLDcgKzY0NCw3IEBAIHN0YXRpYyB2b2lkIGdlbjhf aW5pdGlhbGl6ZV9wZHAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAo+ICAJc2Ny YXRjaF9wZHBlID0gZ2VuOF9wZHBlX2VuY29kZShweF9kbWEodm0tPnNjcmF0Y2hfcGQpLCBJOTE1 X0NBQ0hFX0xMQyk7Cj4gIAo+IC0JZmlsbF9weCh2bS0+aTkxNSwgcGRwLCBzY3JhdGNoX3BkcGUp Owo+ICsJZmlsbF9weCh2bSwgcGRwLCBzY3JhdGNoX3BkcGUpOwo+ICB9Cj4gIAo+ICBzdGF0aWMg dm9pZCBnZW44X2luaXRpYWxpemVfcG1sNChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwK PiBAQCAtNjQzLDcgKzY1NSw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfaW5pdGlhbGl6ZV9wbWw0KHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJc2NyYXRjaF9wbWw0ZSA9IGdlbjhfcG1s NGVfZW5jb2RlKHB4X2RtYSh2bS0+c2NyYXRjaF9wZHApLAo+ICAJCQkJCSAgSTkxNV9DQUNIRV9M TEMpOwo+ICAKPiAtCWZpbGxfcHgodm0tPmk5MTUsIHBtbDQsIHNjcmF0Y2hfcG1sNGUpOwo+ICsJ ZmlsbF9weCh2bSwgcG1sNCwgc2NyYXRjaF9wbWw0ZSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lk Cj4gQEAgLTY1OSwyMCArNjcxLDE4IEBAIGdlbjhfc2V0dXBfcGRwZShzdHJ1Y3QgaTkxNV9od19w cGd0dCAqcHBndHQsCj4gIAo+ICAJcGFnZV9kaXJlY3RvcnlwbyA9IGttYXBfcHgocGRwKTsKPiAg CXBhZ2VfZGlyZWN0b3J5cG9baW5kZXhdID0gZ2VuOF9wZHBlX2VuY29kZShweF9kbWEocGQpLCBJ OTE1X0NBQ0hFX0xMQyk7Cj4gLQlrdW5tYXBfcHgocHBndHQsIHBhZ2VfZGlyZWN0b3J5cG8pOwo+ ICsJa3VubWFwX3B4KHBhZ2VfZGlyZWN0b3J5cG8pOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZAo+ IC1nZW44X3NldHVwX3BtbDRlKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiAtCQkgc3Ry dWN0IGk5MTVfcG1sNCAqcG1sNCwKPiArZ2VuOF9zZXR1cF9wbWw0ZShzdHJ1Y3QgaTkxNV9wbWw0 ICpwbWw0LAo+ICAJCSBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyICpwZHAsCj4g IAkJIGludCBpbmRleCkKPiAgewo+ICAJZ2VuOF9wcGd0dF9wbWw0ZV90ICpwYWdlbWFwID0ga21h cF9weChwbWw0KTsKPiAgCj4gLQlXQVJOX09OKCFVU0VTX0ZVTExfNDhCSVRfUFBHVFQodG9faTkx NShwcGd0dC0+YmFzZS5kZXYpKSk7Cj4gIAlwYWdlbWFwW2luZGV4XSA9IGdlbjhfcG1sNGVfZW5j b2RlKHB4X2RtYShwZHApLCBJOTE1X0NBQ0hFX0xMQyk7Cj4gLQlrdW5tYXBfcHgocHBndHQsIHBh Z2VtYXApOwo+ICsJa3VubWFwX3B4KHBhZ2VtYXApOwo+ICB9Cj4gIAo+ICAvKiBCcm9hZHdlbGwg UGFnZSBEaXJlY3RvcnkgUG9pbnRlciBEZXNjcmlwdG9ycyAqLwo+IEBAIC03NDEsNyArNzUxLDYg QEAgc3RhdGljIGJvb2wgZ2VuOF9wcGd0dF9jbGVhcl9wdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKPiAgCQkJCXVpbnQ2NF90IHN0YXJ0LAo+ICAJCQkJdWludDY0X3QgbGVuZ3RoKQo+ ICB7Cj4gLQlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQgPSBpOTE1X3ZtX3RvX3BwZ3R0KHZt KTsKPiAgCXVuc2lnbmVkIGludCBudW1fZW50cmllcyA9IGdlbjhfcHRlX2NvdW50KHN0YXJ0LCBs ZW5ndGgpOwo+ICAJdW5zaWduZWQgaW50IHB0ZSA9IGdlbjhfcHRlX2luZGV4KHN0YXJ0KTsKPiAg CXVuc2lnbmVkIGludCBwdGVfZW5kID0gcHRlICsgbnVtX2VudHJpZXM7Cj4gQEAgLTc2Miw3ICs3 NzEsNyBAQCBzdGF0aWMgYm9vbCBnZW44X3BwZ3R0X2NsZWFyX3B0KHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2UgKnZtLAo+ICAJdmFkZHIgPSBrbWFwX3B4KHB0KTsKPiAgCXdoaWxlIChwdGUgPCBw dGVfZW5kKQo+ICAJCXZhZGRyW3B0ZSsrXSA9IHNjcmF0Y2hfcHRlOwo+IC0Ja3VubWFwX3B4KHBw Z3R0LCB2YWRkcik7Cj4gKwlrdW5tYXBfcHgodmFkZHIpOwo+ICAKPiAgCXJldHVybiBmYWxzZTsK PiAgfQo+IEBAIC03NzUsNyArNzg0LDYgQEAgc3RhdGljIGJvb2wgZ2VuOF9wcGd0dF9jbGVhcl9w ZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJCXVpbnQ2NF90IHN0YXJ0LAo+ ICAJCQkJdWludDY0X3QgbGVuZ3RoKQo+ICB7Cj4gLQlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBn dHQgPSBpOTE1X3ZtX3RvX3BwZ3R0KHZtKTsKPiAgCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGUgKnB0 Owo+ICAJdWludDY0X3QgcGRlOwo+ICAJZ2VuOF9wZGVfdCAqcGRlX3ZhZGRyOwo+IEBAIC03OTAs OCArNzk4LDggQEAgc3RhdGljIGJvb2wgZ2VuOF9wcGd0dF9jbGVhcl9wZChzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJX19jbGVhcl9iaXQocGRlLCBwZC0+dXNlZF9wZGVzKTsK PiAgCQkJcGRlX3ZhZGRyID0ga21hcF9weChwZCk7Cj4gIAkJCXBkZV92YWRkcltwZGVdID0gc2Ny YXRjaF9wZGU7Cj4gLQkJCWt1bm1hcF9weChwcGd0dCwgcGRlX3ZhZGRyKTsKPiAtCQkJZnJlZV9w dCh2bS0+aTkxNSwgcHQpOwo+ICsJCQlrdW5tYXBfcHgocGRlX3ZhZGRyKTsKPiArCQkJZnJlZV9w dCh2bSwgcHQpOwo+ICAJCX0KPiAgCX0KPiAgCj4gQEAgLTgyMCw3ICs4MjgsNyBAQCBzdGF0aWMg Ym9vbCBnZW44X3BwZ3R0X2NsZWFyX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwK PiAgCQlpZiAoZ2VuOF9wcGd0dF9jbGVhcl9wZCh2bSwgcGQsIHN0YXJ0LCBsZW5ndGgpKSB7Cj4g IAkJCV9fY2xlYXJfYml0KHBkcGUsIHBkcC0+dXNlZF9wZHBlcyk7Cj4gIAkJCWdlbjhfc2V0dXBf cGRwZShwcGd0dCwgcGRwLCB2bS0+c2NyYXRjaF9wZCwgcGRwZSk7Cj4gLQkJCWZyZWVfcGQodm0t Pmk5MTUsIHBkKTsKPiArCQkJZnJlZV9wZCh2bSwgcGQpOwo+ICAJCX0KPiAgCX0KPiAgCj4gQEAg LTg0MSw3ICs4NDksNiBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFyX3BtbDQoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCQkgIHVpbnQ2NF90IHN0YXJ0LAo+ICAJCQkJ ICB1aW50NjRfdCBsZW5ndGgpCj4gIHsKPiAtCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9 IGk5MTVfdm1fdG9fcHBndHQodm0pOwo+ICAJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9p bnRlciAqcGRwOwo+ICAJdWludDY0X3QgcG1sNGU7Cj4gIAo+IEBAIC04NTMsOCArODYwLDggQEAg c3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhcl9wbWw0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtLAo+ICAKPiAgCQlpZiAoZ2VuOF9wcGd0dF9jbGVhcl9wZHAodm0sIHBkcCwgc3RhcnQs IGxlbmd0aCkpIHsKPiAgCQkJX19jbGVhcl9iaXQocG1sNGUsIHBtbDQtPnVzZWRfcG1sNGVzKTsK PiAtCQkJZ2VuOF9zZXR1cF9wbWw0ZShwcGd0dCwgcG1sNCwgdm0tPnNjcmF0Y2hfcGRwLCBwbWw0 ZSk7Cj4gLQkJCWZyZWVfcGRwKHZtLT5pOTE1LCBwZHApOwo+ICsJCQlnZW44X3NldHVwX3BtbDRl KHBtbDQsIHZtLT5zY3JhdGNoX3BkcCwgcG1sNGUpOwo+ICsJCQlmcmVlX3BkcCh2bSwgcGRwKTsK PiAgCQl9Cj4gIAl9Cj4gIH0KPiBAQCAtOTEyLDEyICs5MTksMTIgQEAgZ2VuOF9wcGd0dF9pbnNl cnRfcHRlX2VudHJpZXMoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+ICAJCQkJcGRlID0g MDsKPiAgCQkJfQo+ICAKPiAtCQkJa3VubWFwX3B4KHBwZ3R0LCB2YWRkcik7Cj4gKwkJCWt1bm1h cF9weCh2YWRkcik7Cj4gIAkJCXZhZGRyID0ga21hcF9weChwZC0+cGFnZV90YWJsZVtwZGVdKTsK PiAgCQkJcHRlID0gMDsKPiAgCQl9Cj4gIAl9IHdoaWxlICgxKTsKPiAtCWt1bm1hcF9weChwcGd0 dCwgdmFkZHIpOwo+ICsJa3VubWFwX3B4KHZhZGRyKTsKPiAgCj4gIAlyZXR1cm4gcmV0Owo+ICB9 Cj4gQEAgLTk1OSw3ICs5NjYsNyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2luc2VydF80bHZs KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCTsKPiAgfQo+ICAKPiAtc3RhdGlj IHZvaWQgZ2VuOF9mcmVlX3BhZ2VfdGFibGVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiArc3RhdGljIHZvaWQgZ2VuOF9mcmVlX3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkJICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQp Cj4gIHsKPiAgCWludCBpOwo+IEBAIC05NzEsMzQgKzk3OCwzMyBAQCBzdGF0aWMgdm9pZCBnZW44 X2ZyZWVfcGFnZV90YWJsZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJ CWlmIChXQVJOX09OKCFwZC0+cGFnZV90YWJsZVtpXSkpCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAt CQlmcmVlX3B0KGRldl9wcml2LCBwZC0+cGFnZV90YWJsZVtpXSk7Cj4gKwkJZnJlZV9wdCh2bSwg cGQtPnBhZ2VfdGFibGVbaV0pOwo+ICAJCXBkLT5wYWdlX3RhYmxlW2ldID0gTlVMTDsKPiAgCX0K PiAgfQo+ICAKPiAgc3RhdGljIGludCBnZW44X2luaXRfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSkKPiAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdm0tPmk5MTU7Cj4gIAlpbnQgcmV0Owo+ICAKPiAtCXJldCA9IHNldHVwX3NjcmF0Y2hfcGFn ZShkZXZfcHJpdiwgJnZtLT5zY3JhdGNoX3BhZ2UsIEk5MTVfR0ZQX0RNQSk7Cj4gKwlyZXQgPSBz ZXR1cF9zY3JhdGNoX3BhZ2Uodm0sIEk5MTVfR0ZQX0RNQSk7Cj4gIAlpZiAocmV0KQo+ICAJCXJl dHVybiByZXQ7Cj4gIAo+IC0Jdm0tPnNjcmF0Y2hfcHQgPSBhbGxvY19wdChkZXZfcHJpdik7Cj4g Kwl2bS0+c2NyYXRjaF9wdCA9IGFsbG9jX3B0KHZtKTsKPiAgCWlmIChJU19FUlIodm0tPnNjcmF0 Y2hfcHQpKSB7Cj4gIAkJcmV0ID0gUFRSX0VSUih2bS0+c2NyYXRjaF9wdCk7Cj4gIAkJZ290byBm cmVlX3NjcmF0Y2hfcGFnZTsKPiAgCX0KPiAgCj4gLQl2bS0+c2NyYXRjaF9wZCA9IGFsbG9jX3Bk KGRldl9wcml2KTsKPiArCXZtLT5zY3JhdGNoX3BkID0gYWxsb2NfcGQodm0pOwo+ICAJaWYgKElT X0VSUih2bS0+c2NyYXRjaF9wZCkpIHsKPiAgCQlyZXQgPSBQVFJfRVJSKHZtLT5zY3JhdGNoX3Bk KTsKPiAgCQlnb3RvIGZyZWVfcHQ7Cj4gIAl9Cj4gIAo+IC0JaWYgKFVTRVNfRlVMTF80OEJJVF9Q UEdUVChkZXZfcHJpdikpIHsKPiAtCQl2bS0+c2NyYXRjaF9wZHAgPSBhbGxvY19wZHAoZGV2X3By aXYpOwo+ICsJaWYgKFVTRVNfRlVMTF80OEJJVF9QUEdUVChkZXYpKSB7Cj4gKwkJdm0tPnNjcmF0 Y2hfcGRwID0gYWxsb2NfcGRwKHZtKTsKPiAgCQlpZiAoSVNfRVJSKHZtLT5zY3JhdGNoX3BkcCkp IHsKPiAgCQkJcmV0ID0gUFRSX0VSUih2bS0+c2NyYXRjaF9wZHApOwo+ICAJCQlnb3RvIGZyZWVf cGQ7Cj4gQEAgLTEwMTMsMTEgKzEwMTksMTEgQEAgc3RhdGljIGludCBnZW44X2luaXRfc2NyYXRj aChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgCXJldHVybiAwOwo+ICAKPiAgZnJl ZV9wZDoKPiAtCWZyZWVfcGQoZGV2X3ByaXYsIHZtLT5zY3JhdGNoX3BkKTsKPiArCWZyZWVfcGQo dm0sIHZtLT5zY3JhdGNoX3BkKTsKPiAgZnJlZV9wdDoKPiAtCWZyZWVfcHQoZGV2X3ByaXYsIHZt LT5zY3JhdGNoX3B0KTsKPiArCWZyZWVfcHQodm0sIHZtLT5zY3JhdGNoX3B0KTsKPiAgZnJlZV9z Y3JhdGNoX3BhZ2U6Cj4gLQljbGVhbnVwX3NjcmF0Y2hfcGFnZShkZXZfcHJpdiwgJnZtLT5zY3Jh dGNoX3BhZ2UpOwo+ICsJY2xlYW51cF9zY3JhdGNoX3BhZ2Uodm0pOwo+ICAKPiAgCXJldHVybiBy ZXQ7Cj4gIH0KPiBAQCAtMTA1NSw0NCArMTA2MSw0MSBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRf bm90aWZ5X3ZndChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsIGJvb2wgY3JlYXRlKQo+ICAK PiAgc3RhdGljIHZvaWQgZ2VuOF9mcmVlX3NjcmF0Y2goc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0pCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHZtLT5p OTE1Owo+IC0KPiAtCWlmIChVU0VTX0ZVTExfNDhCSVRfUFBHVFQoZGV2X3ByaXYpKQo+IC0JCWZy ZWVfcGRwKGRldl9wcml2LCB2bS0+c2NyYXRjaF9wZHApOwo+IC0JZnJlZV9wZChkZXZfcHJpdiwg dm0tPnNjcmF0Y2hfcGQpOwo+IC0JZnJlZV9wdChkZXZfcHJpdiwgdm0tPnNjcmF0Y2hfcHQpOwo+ IC0JY2xlYW51cF9zY3JhdGNoX3BhZ2UoZGV2X3ByaXYsICZ2bS0+c2NyYXRjaF9wYWdlKTsKPiAr CWlmIChVU0VTX0ZVTExfNDhCSVRfUFBHVFQodm0tPmk5MTUpKQo+ICsJCWZyZWVfcGRwKHZtLCB2 bS0+c2NyYXRjaF9wZHApOwo+ICsJZnJlZV9wZCh2bSwgdm0tPnNjcmF0Y2hfcGQpOwo+ICsJZnJl ZV9wdCh2bSwgdm0tPnNjcmF0Y2hfcHQpOwo+ICsJY2xlYW51cF9zY3JhdGNoX3BhZ2Uodm0pOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFudXBfM2x2bChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gK3N0YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYW51 cF8zbHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkJICAgIHN0cnVjdCBp OTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBkcCkKPiAgewo+ICAJaW50IGk7Cj4gIAo+IC0J Zm9yX2VhY2hfc2V0X2JpdChpLCBwZHAtPnVzZWRfcGRwZXMsIEk5MTVfUERQRVNfUEVSX1BEUChk ZXZfcHJpdikpIHsKPiArCWZvcl9lYWNoX3NldF9iaXQoaSwgcGRwLT51c2VkX3BkcGVzLCBJOTE1 X1BEUEVTX1BFUl9QRFAodm0tPmk5MTUpKSB7Cj4gIAkJaWYgKFdBUk5fT04oIXBkcC0+cGFnZV9k aXJlY3RvcnlbaV0pKQo+ICAJCQljb250aW51ZTsKPiAgCj4gLQkJZ2VuOF9mcmVlX3BhZ2VfdGFi bGVzKGRldl9wcml2LCBwZHAtPnBhZ2VfZGlyZWN0b3J5W2ldKTsKPiAtCQlmcmVlX3BkKGRldl9w cml2LCBwZHAtPnBhZ2VfZGlyZWN0b3J5W2ldKTsKPiArCQlnZW44X2ZyZWVfcGFnZV90YWJsZXMo dm0sIHBkcC0+cGFnZV9kaXJlY3RvcnlbaV0pOwo+ICsJCWZyZWVfcGQodm0sIHBkcC0+cGFnZV9k aXJlY3RvcnlbaV0pOwo+ICAJfQo+ICAKPiAtCWZyZWVfcGRwKGRldl9wcml2LCBwZHApOwo+ICsJ ZnJlZV9wZHAodm0sIHBkcCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xl YW51cF80bHZsKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgewo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcHBndHQtPmJhc2UuaTkxNTsKPiAgCWludCBpOwo+ ICAKPiAgCWZvcl9lYWNoX3NldF9iaXQoaSwgcHBndHQtPnBtbDQudXNlZF9wbWw0ZXMsIEdFTjhf UE1MNEVTX1BFUl9QTUw0KSB7Cj4gIAkJaWYgKFdBUk5fT04oIXBwZ3R0LT5wbWw0LnBkcHNbaV0p KQo+ICAJCQljb250aW51ZTsKPiAgCj4gLQkJZ2VuOF9wcGd0dF9jbGVhbnVwXzNsdmwoZGV2X3By aXYsIHBwZ3R0LT5wbWw0LnBkcHNbaV0pOwo+ICsJCWdlbjhfcHBndHRfY2xlYW51cF8zbHZsKCZw cGd0dC0+YmFzZSwgcHBndHQtPnBtbDQucGRwc1tpXSk7Cj4gIAl9Cj4gIAo+IC0JY2xlYW51cF9w eChkZXZfcHJpdiwgJnBwZ3R0LT5wbWw0KTsKPiArCWNsZWFudXBfcHgoJnBwZ3R0LT5iYXNlLCAm cHBndHQtPnBtbDQpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFudXAo c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gQEAgLTExMDMsOCArMTEwNiw4IEBAIHN0 YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYW51cChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSkKPiAgCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCj4gIAkJZ2VuOF9wcGd0dF9u b3RpZnlfdmd0KHBwZ3R0LCBmYWxzZSk7Cj4gIAo+IC0JaWYgKCFVU0VTX0ZVTExfNDhCSVRfUFBH VFQoZGV2X3ByaXYpKQo+IC0JCWdlbjhfcHBndHRfY2xlYW51cF8zbHZsKGRldl9wcml2LCAmcHBn dHQtPnBkcCk7Cj4gKwlpZiAoIVVTRVNfRlVMTF80OEJJVF9QUEdUVCh2bS0+aTkxNSkpCj4gKwkJ Z2VuOF9wcGd0dF9jbGVhbnVwXzNsdmwoJnBwZ3R0LT5iYXNlLCAmcHBndHQtPnBkcCk7Cj4gIAll bHNlCj4gIAkJZ2VuOF9wcGd0dF9jbGVhbnVwXzRsdmwocHBndHQpOwo+ICAKPiBAQCAtMTEzNSw3 ICsxMTM4LDYgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jX3BhZ2V0YWJzKHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkJICAgICB1aW50NjRfdCBsZW5ndGgsCj4gIAkJ CQkgICAgIHVuc2lnbmVkIGxvbmcgKm5ld19wdHMpCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHZtLT5pOTE1Owo+ICAJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAq cHQ7Cj4gIAl1aW50MzJfdCBwZGU7Cj4gIAo+IEBAIC0xMTQ3LDcgKzExNDksNyBAQCBzdGF0aWMg aW50IGdlbjhfcHBndHRfYWxsb2NfcGFnZXRhYnMoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0sCj4gIAkJCWNvbnRpbnVlOwo+ICAJCX0KPiAgCj4gLQkJcHQgPSBhbGxvY19wdChkZXZfcHJp dik7Cj4gKwkJcHQgPSBhbGxvY19wdCh2bSk7Cj4gIAkJaWYgKElTX0VSUihwdCkpCj4gIAkJCWdv dG8gdW53aW5kX291dDsKPiAgCj4gQEAgLTExNjEsNyArMTE2Myw3IEBAIHN0YXRpYyBpbnQgZ2Vu OF9wcGd0dF9hbGxvY19wYWdldGFicyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAg Cj4gIHVud2luZF9vdXQ6Cj4gIAlmb3JfZWFjaF9zZXRfYml0KHBkZSwgbmV3X3B0cywgSTkxNV9Q REVTKQo+IC0JCWZyZWVfcHQoZGV2X3ByaXYsIHBkLT5wYWdlX3RhYmxlW3BkZV0pOwo+ICsJCWZy ZWVfcHQodm0sIHBkLT5wYWdlX3RhYmxlW3BkZV0pOwo+ICAKPiAgCXJldHVybiAtRU5PTUVNOwo+ ICB9Cj4gQEAgLTExOTYsNyArMTE5OCw2IEBAIGdlbjhfcHBndHRfYWxsb2NfcGFnZV9kaXJlY3Rv cmllcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJCSAgdWludDY0X3QgbGVu Z3RoLAo+ICAJCQkJICB1bnNpZ25lZCBsb25nICpuZXdfcGRzKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bS0+aTkxNTsKPiAgCXN0cnVjdCBpOTE1X3BhZ2Vf ZGlyZWN0b3J5ICpwZDsKPiAgCXVpbnQzMl90IHBkcGU7Cj4gIAl1aW50MzJfdCBwZHBlcyA9IEk5 MTVfUERQRVNfUEVSX1BEUChkZXZfcHJpdik7Cj4gQEAgLTEyMDcsNyArMTIwOCw3IEBAIGdlbjhf cHBndHRfYWxsb2NfcGFnZV9kaXJlY3RvcmllcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSwKPiAgCQlpZiAodGVzdF9iaXQocGRwZSwgcGRwLT51c2VkX3BkcGVzKSkKPiAgCQkJY29udGlu dWU7Cj4gIAo+IC0JCXBkID0gYWxsb2NfcGQoZGV2X3ByaXYpOwo+ICsJCXBkID0gYWxsb2NfcGQo dm0pOwo+ICAJCWlmIChJU19FUlIocGQpKQo+ICAJCQlnb3RvIHVud2luZF9vdXQ7Cj4gIAo+IEBA IC0xMjIxLDcgKzEyMjIsNyBAQCBnZW44X3BwZ3R0X2FsbG9jX3BhZ2VfZGlyZWN0b3JpZXMoc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAo+ICB1bndpbmRfb3V0Ogo+ICAJZm9yX2Vh Y2hfc2V0X2JpdChwZHBlLCBuZXdfcGRzLCBwZHBlcykKPiAtCQlmcmVlX3BkKGRldl9wcml2LCBw ZHAtPnBhZ2VfZGlyZWN0b3J5W3BkcGVdKTsKPiArCQlmcmVlX3BkKHZtLCBwZHAtPnBhZ2VfZGly ZWN0b3J5W3BkcGVdKTsKPiAgCj4gIAlyZXR1cm4gLUVOT01FTTsKPiAgfQo+IEBAIC0xMjQ5LDcg KzEyNTAsNiBAQCBnZW44X3BwZ3R0X2FsbG9jX3BhZ2VfZGlycG9pbnRlcnMoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCQkgIHVpbnQ2NF90IGxlbmd0aCwKPiAgCQkJCSAgdW5z aWduZWQgbG9uZyAqbmV3X3BkcHMpCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHZtLT5pOTE1Owo+ICAJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRl ciAqcGRwOwo+ICAJdWludDMyX3QgcG1sNGU7Cj4gIAo+IEBAIC0xMjU3LDcgKzEyNTcsNyBAQCBn ZW44X3BwZ3R0X2FsbG9jX3BhZ2VfZGlycG9pbnRlcnMoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0sCj4gIAo+ICAJZ2VuOF9mb3JfZWFjaF9wbWw0ZShwZHAsIHBtbDQsIHN0YXJ0LCBsZW5n dGgsIHBtbDRlKSB7Cj4gIAkJaWYgKCF0ZXN0X2JpdChwbWw0ZSwgcG1sNC0+dXNlZF9wbWw0ZXMp KSB7Cj4gLQkJCXBkcCA9IGFsbG9jX3BkcChkZXZfcHJpdik7Cj4gKwkJCXBkcCA9IGFsbG9jX3Bk cCh2bSk7Cj4gIAkJCWlmIChJU19FUlIocGRwKSkKPiAgCQkJCWdvdG8gdW53aW5kX291dDsKPiAg Cj4gQEAgLTEyNzUsNyArMTI3NSw3IEBAIGdlbjhfcHBndHRfYWxsb2NfcGFnZV9kaXJwb2ludGVy cyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCj4gIHVud2luZF9vdXQ6Cj4gIAlm b3JfZWFjaF9zZXRfYml0KHBtbDRlLCBuZXdfcGRwcywgR0VOOF9QTUw0RVNfUEVSX1BNTDQpCj4g LQkJZnJlZV9wZHAoZGV2X3ByaXYsIHBtbDQtPnBkcHNbcG1sNGVdKTsKPiArCQlmcmVlX3BkcCh2 bSwgcG1sNC0+cGRwc1twbWw0ZV0pOwo+ICAKPiAgCXJldHVybiAtRU5PTUVNOwo+ICB9Cj4gQEAg LTEzMjQsNyArMTMyNCw2IEBAIHN0YXRpYyBpbnQgZ2VuOF9hbGxvY192YV9yYW5nZV8zbHZsKHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICB7Cj4gIAlzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQgPSBpOTE1X3ZtX3RvX3BwZ3R0KHZtKTsKPiAgCXVuc2lnbmVkIGxvbmcgKm5ld19w YWdlX2RpcnMsICpuZXdfcGFnZV90YWJsZXM7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB2bS0+aTkxNTsKPiAgCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZDsK PiAgCWNvbnN0IHVpbnQ2NF90IG9yaWdfc3RhcnQgPSBzdGFydDsKPiAgCWNvbnN0IHVpbnQ2NF90 IG9yaWdfbGVuZ3RoID0gbGVuZ3RoOwo+IEBAIC0xMzkzLDcgKzEzOTIsNyBAQCBzdGF0aWMgaW50 IGdlbjhfYWxsb2NfdmFfcmFuZ2VfM2x2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwK PiAgCQkJICogcG9pbnQgd2UncmUgc3RpbGwgcmVseWluZyBvbiBpbnNlcnRfZW50cmllcygpICov Cj4gIAkJfQo+ICAKPiAtCQlrdW5tYXBfcHgocHBndHQsIHBhZ2VfZGlyZWN0b3J5KTsKPiArCQlr dW5tYXBfcHgocGFnZV9kaXJlY3RvcnkpOwo+ICAJCV9fc2V0X2JpdChwZHBlLCBwZHAtPnVzZWRf cGRwZXMpOwo+ICAJCWdlbjhfc2V0dXBfcGRwZShwcGd0dCwgcGRwLCBwZCwgcGRwZSk7Cj4gIAl9 Cj4gQEAgLTE0MDgsMTIgKzE0MDcsMTEgQEAgc3RhdGljIGludCBnZW44X2FsbG9jX3ZhX3Jhbmdl XzNsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAo+ICAJCWZvcl9lYWNoX3Nl dF9iaXQodGVtcCwgbmV3X3BhZ2VfdGFibGVzICsgcGRwZSAqCj4gIAkJCQlCSVRTX1RPX0xPTkdT KEk5MTVfUERFUyksIEk5MTVfUERFUykKPiAtCQkJZnJlZV9wdChkZXZfcHJpdiwKPiAtCQkJCXBk cC0+cGFnZV9kaXJlY3RvcnlbcGRwZV0tPnBhZ2VfdGFibGVbdGVtcF0pOwo+ICsJCQlmcmVlX3B0 KHZtLCBwZHAtPnBhZ2VfZGlyZWN0b3J5W3BkcGVdLT5wYWdlX3RhYmxlW3RlbXBdKTsKPiAgCX0K PiAgCj4gIAlmb3JfZWFjaF9zZXRfYml0KHBkcGUsIG5ld19wYWdlX2RpcnMsIHBkcGVzKQo+IC0J CWZyZWVfcGQoZGV2X3ByaXYsIHBkcC0+cGFnZV9kaXJlY3RvcnlbcGRwZV0pOwo+ICsJCWZyZWVf cGQodm0sIHBkcC0+cGFnZV9kaXJlY3RvcnlbcGRwZV0pOwo+ICAKPiAgCWZyZWVfZ2VuOF90ZW1w X2JpdG1hcHMobmV3X3BhZ2VfZGlycywgbmV3X3BhZ2VfdGFibGVzKTsKPiAgCW1hcmtfdGxic19k aXJ0eShwcGd0dCk7Cj4gQEAgLTE0MjYsNyArMTQyNCw2IEBAIHN0YXRpYyBpbnQgZ2VuOF9hbGxv Y192YV9yYW5nZV80bHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkJICAg IHVpbnQ2NF90IGxlbmd0aCkKPiAgewo+ICAJREVDTEFSRV9CSVRNQVAobmV3X3BkcHMsIEdFTjhf UE1MNEVTX1BFUl9QTUw0KTsKPiAtCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9IGk5MTVf dm1fdG9fcHBndHQodm0pOwo+ICAJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAq cGRwOwo+ICAJdWludDY0X3QgcG1sNGU7Cj4gIAlpbnQgcmV0ID0gMDsKPiBAQCAtMTQ1NCw3ICsx NDUxLDcgQEAgc3RhdGljIGludCBnZW44X2FsbG9jX3ZhX3JhbmdlXzRsdmwoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJaWYgKHJldCkKPiAgCQkJZ290byBlcnJfb3V0Owo+ICAK PiAtCQlnZW44X3NldHVwX3BtbDRlKHBwZ3R0LCBwbWw0LCBwZHAsIHBtbDRlKTsKPiArCQlnZW44 X3NldHVwX3BtbDRlKHBtbDQsIHBkcCwgcG1sNGUpOwo+ICAJfQo+ICAKPiAgCWJpdG1hcF9vcihw bWw0LT51c2VkX3BtbDRlcywgbmV3X3BkcHMsIHBtbDQtPnVzZWRfcG1sNGVzLAo+IEBAIC0xNDY0 LDcgKzE0NjEsNyBAQCBzdGF0aWMgaW50IGdlbjhfYWxsb2NfdmFfcmFuZ2VfNGx2bChzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCj4gIGVycl9vdXQ6Cj4gIAlmb3JfZWFjaF9zZXRf Yml0KHBtbDRlLCBuZXdfcGRwcywgR0VOOF9QTUw0RVNfUEVSX1BNTDQpCj4gLQkJZ2VuOF9wcGd0 dF9jbGVhbnVwXzNsdmwodm0tPmk5MTUsIHBtbDQtPnBkcHNbcG1sNGVdKTsKPiArCQlnZW44X3Bw Z3R0X2NsZWFudXBfM2x2bCh2bSwgcG1sNC0+cGRwc1twbWw0ZV0pOwo+ICAKPiAgCXJldHVybiBy ZXQ7Cj4gIH0KPiBAQCAtMTQ4MCw3ICsxNDc3LDggQEAgc3RhdGljIGludCBnZW44X2FsbG9jX3Zh X3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCXJldHVybiBnZW44X2Fs bG9jX3ZhX3JhbmdlXzNsdmwodm0sICZwcGd0dC0+cGRwLCBzdGFydCwgbGVuZ3RoKTsKPiAgfQo+ ICAKPiAtc3RhdGljIHZvaWQgZ2VuOF9kdW1wX3BkcChzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9y eV9wb2ludGVyICpwZHAsCj4gK3N0YXRpYyB2b2lkIGdlbjhfZHVtcF9wZHAoc3RydWN0IGk5MTVf aHdfcHBndHQgKnBwZ3R0LAo+ICsJCQkgIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50 ZXIgKnBkcCwKPiAgCQkJICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgbGVuZ3RoLAo+ICAJCQkg IGdlbjhfcHRlX3Qgc2NyYXRjaF9wdGUsCj4gIAkJCSAgc3RydWN0IHNlcV9maWxlICptKQo+IEBA IC0xNTQ2LDcgKzE1NDQsNyBAQCBzdGF0aWMgdm9pZCBnZW44X2R1bXBfcHBndHQoc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4gIAkJCQkJCSBJOTE1X0NB Q0hFX0xMQyk7Cj4gIAo+ICAJaWYgKCFVU0VTX0ZVTExfNDhCSVRfUFBHVFQodm0tPmk5MTUpKSB7 Cj4gLQkJZ2VuOF9kdW1wX3BkcCgmcHBndHQtPnBkcCwgc3RhcnQsIGxlbmd0aCwgc2NyYXRjaF9w dGUsIG0pOwo+ICsJCWdlbjhfZHVtcF9wZHAocHBndHQsICZwcGd0dC0+cGRwLCBzdGFydCwgbGVu Z3RoLCBzY3JhdGNoX3B0ZSwgbSk7Cj4gIAl9IGVsc2Ugewo+ICAJCXVpbnQ2NF90IHBtbDRlOwo+ ICAJCXN0cnVjdCBpOTE1X3BtbDQgKnBtbDQgPSAmcHBndHQtPnBtbDQ7Cj4gQEAgLTE1NTcsNyAr MTU1NSw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfZHVtcF9wcGd0dChzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgCQkJCWNvbnRpbnVlOwo+ICAKPiAgCQkJ c2VxX3ByaW50ZihtLCAiICAgIFBNTDRFICMlbGx1XG4iLCBwbWw0ZSk7Cj4gLQkJCWdlbjhfZHVt cF9wZHAocGRwLCBzdGFydCwgbGVuZ3RoLCBzY3JhdGNoX3B0ZSwgbSk7Cj4gKwkJCWdlbjhfZHVt cF9wZHAocHBndHQsIHBkcCwgc3RhcnQsIGxlbmd0aCwgc2NyYXRjaF9wdGUsIG0pOwo+ICAJCX0K PiAgCX0KPiAgfQo+IEBAIC0xNjEzLDggKzE2MTEsMTQgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0 X2luaXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAJcHBndHQtPmJhc2UuYmluZF92 bWEgPSBwcGd0dF9iaW5kX3ZtYTsKPiAgCXBwZ3R0LT5kZWJ1Z19kdW1wID0gZ2VuOF9kdW1wX3Bw Z3R0Owo+ICAKPiArCS8qIFRoZXJlIGFyZSBvbmx5IGZldyBleGNlcHRpb25zIGZvciBnZW4gPj02 LiBjaHYgYW5kIGJ4dC4KPiArCSAqIEFuZCB3ZSBhcmUgbm90IHN1cmUgYWJvdXQgdGhlIGxhdHRl ciBzbyBwbGF5IHNhZmUgZm9yIG5vdy4KPiArCSAqLwo+ICsJaWYgKElTX0NIRVJSWVZJRVcoZGV2 X3ByaXYpIHx8IElTX0JST1hUT04oZGV2X3ByaXYpKQo+ICsJCXBwZ3R0LT5iYXNlLnB0X2ttYXBf d2MgPSB0cnVlOwo+ICsKPiAgCWlmIChVU0VTX0ZVTExfNDhCSVRfUFBHVFQoZGV2X3ByaXYpKSB7 Cj4gLQkJcmV0ID0gc2V0dXBfcHgoZGV2X3ByaXYsICZwcGd0dC0+cG1sNCk7Cj4gKwkJcmV0ID0g c2V0dXBfcHgoJnBwZ3R0LT5iYXNlLCAmcHBndHQtPnBtbDQpOwo+ICAJCWlmIChyZXQpCj4gIAkJ CWdvdG8gZnJlZV9zY3JhdGNoOwo+ICAKPiBAQCAtMTcwMyw3ICsxNzA3LDcgQEAgc3RhdGljIHZv aWQgZ2VuNl9kdW1wX3BwZ3R0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwgc3RydWN0IHNl cV9maWxlICptKQo+ICAJCQl9Cj4gIAkJCXNlcV9wdXRzKG0sICJcbiIpOwo+ICAJCX0KPiAtCQlr dW5tYXBfcHgocHBndHQsIHB0X3ZhZGRyKTsKPiArCQlrdW5tYXBfcHgocHRfdmFkZHIpOwo+ICAJ fQo+ICB9Cj4gIAo+IEBAIC0xOTAwLDcgKzE5MDQsNyBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0 X2NsZWFyX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCWZvciAoaSA9 IGZpcnN0X3B0ZTsgaSA8IGxhc3RfcHRlOyBpKyspCj4gIAkJCXB0X3ZhZGRyW2ldID0gc2NyYXRj aF9wdGU7Cj4gIAo+IC0JCWt1bm1hcF9weChwcGd0dCwgcHRfdmFkZHIpOwo+ICsJCWt1bm1hcF9w eChwdF92YWRkcik7Cj4gIAo+ICAJCW51bV9lbnRyaWVzIC09IGxhc3RfcHRlIC0gZmlyc3RfcHRl Owo+ICAJCWZpcnN0X3B0ZSA9IDA7Cj4gQEAgLTE5MzksMTIgKzE5NDMsMTIgQEAgc3RhdGljIHZv aWQgZ2VuNl9wcGd0dF9pbnNlcnRfZW50cmllcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSwKPiAgCQl9Cj4gIAo+ICAJCWlmICgrK2FjdF9wdGUgPT0gR0VONl9QVEVTKSB7Cj4gLQkJCWt1 bm1hcF9weChwcGd0dCwgdmFkZHIpOwo+ICsJCQlrdW5tYXBfcHgodmFkZHIpOwo+ICAJCQl2YWRk ciA9IGttYXBfcHgocHBndHQtPnBkLnBhZ2VfdGFibGVbKythY3RfcHRdKTsKPiAgCQkJYWN0X3B0 ZSA9IDA7Cj4gIAkJfQo+ICAJfSB3aGlsZSAoMSk7Cj4gLQlrdW5tYXBfcHgocHBndHQsIHZhZGRy KTsKPiArCWt1bm1hcF9weCh2YWRkcik7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgZ2VuNl9hbGxv Y192YV9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiBAQCAtMTk3OCw3ICsx OTgyLDcgQEAgc3RhdGljIGludCBnZW42X2FsbG9jX3ZhX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2UgKnZtLAo+ICAJCS8qIFdlJ3ZlIGFscmVhZHkgYWxsb2NhdGVkIGEgcGFnZSB0YWJs ZSAqLwo+ICAJCVdBUk5fT04oIWJpdG1hcF9lbXB0eShwdC0+dXNlZF9wdGVzLCBHRU42X1BURVMp KTsKPiAgCj4gLQkJcHQgPSBhbGxvY19wdChkZXZfcHJpdik7Cj4gKwkJcHQgPSBhbGxvY19wdCh2 bSk7Cj4gIAkJaWYgKElTX0VSUihwdCkpIHsKPiAgCQkJcmV0ID0gUFRSX0VSUihwdCk7Cj4gIAkJ CWdvdG8gdW53aW5kX291dDsKPiBAQCAtMjAyNiw3ICsyMDMwLDcgQEAgc3RhdGljIGludCBnZW42 X2FsbG9jX3ZhX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCXN0cnVj dCBpOTE1X3BhZ2VfdGFibGUgKnB0ID0gcHBndHQtPnBkLnBhZ2VfdGFibGVbcGRlXTsKPiAgCj4g IAkJcHBndHQtPnBkLnBhZ2VfdGFibGVbcGRlXSA9IHZtLT5zY3JhdGNoX3B0Owo+IC0JCWZyZWVf cHQoZGV2X3ByaXYsIHB0KTsKPiArCQlmcmVlX3B0KHZtLCBwdCk7Cj4gIAl9Cj4gIAo+ICAJbWFy a190bGJzX2RpcnR5KHBwZ3R0KTsKPiBAQCAtMjAzNSwxNiArMjAzOSwxNSBAQCBzdGF0aWMgaW50 IGdlbjZfYWxsb2NfdmFfcmFuZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAo+ ICBzdGF0aWMgaW50IGdlbjZfaW5pdF9zY3JhdGNoKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bS0+aTkx NTsKPiAgCWludCByZXQ7Cj4gIAo+IC0JcmV0ID0gc2V0dXBfc2NyYXRjaF9wYWdlKGRldl9wcml2 LCAmdm0tPnNjcmF0Y2hfcGFnZSwgSTkxNV9HRlBfRE1BKTsKPiArCXJldCA9IHNldHVwX3NjcmF0 Y2hfcGFnZSh2bSwgSTkxNV9HRlBfRE1BKTsKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsK PiAgCj4gLQl2bS0+c2NyYXRjaF9wdCA9IGFsbG9jX3B0KGRldl9wcml2KTsKPiArCXZtLT5zY3Jh dGNoX3B0ID0gYWxsb2NfcHQodm0pOwo+ICAJaWYgKElTX0VSUih2bS0+c2NyYXRjaF9wdCkpIHsK PiAtCQljbGVhbnVwX3NjcmF0Y2hfcGFnZShkZXZfcHJpdiwgJnZtLT5zY3JhdGNoX3BhZ2UpOwo+ ICsJCWNsZWFudXBfc2NyYXRjaF9wYWdlKHZtKTsKPiAgCQlyZXR1cm4gUFRSX0VSUih2bS0+c2Ny YXRjaF9wdCk7Cj4gIAl9Cj4gIAo+IEBAIC0yMDU1LDE3ICsyMDU4LDE0IEBAIHN0YXRpYyBpbnQg Z2VuNl9pbml0X3NjcmF0Y2goc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gIAo+ICBz dGF0aWMgdm9pZCBnZW42X2ZyZWVfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSkKPiAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdm0tPmk5MTU7 Cj4gLQo+IC0JZnJlZV9wdChkZXZfcHJpdiwgdm0tPnNjcmF0Y2hfcHQpOwo+IC0JY2xlYW51cF9z Y3JhdGNoX3BhZ2UoZGV2X3ByaXYsICZ2bS0+c2NyYXRjaF9wYWdlKTsKPiArCWZyZWVfcHQodm0s IHZtLT5zY3JhdGNoX3B0KTsKPiArCWNsZWFudXBfc2NyYXRjaF9wYWdlKHZtKTsKPiAgfQo+ICAK PiAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhbnVwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtKQo+ICB7Cj4gIAlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQgPSBpOTE1X3ZtX3Rv X3BwZ3R0KHZtKTsKPiAgCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZCA9ICZwcGd0dC0+ cGQ7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bS0+aTkxNTsKPiAg CXN0cnVjdCBpOTE1X3BhZ2VfdGFibGUgKnB0Owo+ICAJdWludDMyX3QgcGRlOwo+ICAKPiBAQCAt MjA3Myw3ICsyMDczLDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhbnVwKHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAKPiAgCWdlbjZfZm9yX2FsbF9wZGVzKHB0LCBwZCwg cGRlKQo+ICAJCWlmIChwdCAhPSB2bS0+c2NyYXRjaF9wdCkKPiAtCQkJZnJlZV9wdChkZXZfcHJp diwgcHQpOwo+ICsJCQlmcmVlX3B0KHZtLCBwdCk7Cj4gIAo+ICAJZ2VuNl9mcmVlX3NjcmF0Y2go dm0pOwo+ICB9Cj4gQEAgLTIxODIsNiArMjE4Miw3IEBAIHN0YXRpYyBpbnQgX19od19wcGd0dF9p bml0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiAgCQkJICAgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gIAlwcGd0dC0+YmFzZS5pOTE1ID0gZGV2X3ByaXY7 Cj4gKwlwcGd0dC0+YmFzZS5kbWEgPSAmZGV2X3ByaXYtPmRybS5wZGV2LT5kZXY7Cj4gIAo+ICAJ aWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPCA4KQo+ICAJCXJldHVybiBnZW42X3BwZ3R0 X2luaXQocHBndHQpOwo+IEBAIC0yMTk5LDEwICsyMjAwLDE0IEBAIHN0YXRpYyB2b2lkIGk5MTVf YWRkcmVzc19zcGFjZV9pbml0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJSU5J VF9MSVNUX0hFQUQoJnZtLT5pbmFjdGl2ZV9saXN0KTsKPiAgCUlOSVRfTElTVF9IRUFEKCZ2bS0+ dW5ib3VuZF9saXN0KTsKPiAgCWxpc3RfYWRkX3RhaWwoJnZtLT5nbG9iYWxfbGluaywgJmRldl9w cml2LT52bV9saXN0KTsKPiArCXBhZ2V2ZWNfaW5pdCgmdm0tPmZyZWVfcGFnZXMsIGZhbHNlKTsK PiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgaTkxNV9hZGRyZXNzX3NwYWNlX2Zpbmkoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gIHsKPiArCWlmIChwYWdldmVjX2NvdW50KCZ2bS0+ZnJl ZV9wYWdlcykpCj4gKwkJdm1fZnJlZV9wYWdlc19yZWxlYXNlKHZtKTsKPiArCj4gIAlpOTE1X2dl bV90aW1lbGluZV9maW5pKCZ2bS0+dGltZWxpbmUpOwo+ICAJZHJtX21tX3Rha2Vkb3duKCZ2bS0+ bW0pOwo+ICAJbGlzdF9kZWwoJnZtLT5nbG9iYWxfbGluayk7Cj4gQEAgLTIzMTAsOSArMjMxNSw4 IEBAIHZvaWQgaTkxNV9wcGd0dF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQo+ICAJV0FSTl9P TighbGlzdF9lbXB0eSgmcHBndHQtPmJhc2UuaW5hY3RpdmVfbGlzdCkpOwo+ICAJV0FSTl9PTigh bGlzdF9lbXB0eSgmcHBndHQtPmJhc2UudW5ib3VuZF9saXN0KSk7Cj4gIAo+IC0JaTkxNV9hZGRy ZXNzX3NwYWNlX2ZpbmkoJnBwZ3R0LT5iYXNlKTsKPiAtCj4gIAlwcGd0dC0+YmFzZS5jbGVhbnVw KCZwcGd0dC0+YmFzZSk7Cj4gKwlpOTE1X2FkZHJlc3Nfc3BhY2VfZmluaSgmcHBndHQtPmJhc2Up Owo+ICAJa2ZyZWUocHBndHQpOwo+ICB9Cj4gIAo+IEBAIC0yOTQ3LDcgKzI5NTEsNyBAQCBzdGF0 aWMgaW50IGdndHRfcHJvYmVfY29tbW9uKHN0cnVjdCBpOTE1X2dndHQgKmdndHQsIHU2NCBzaXpl KQo+ICAJCXJldHVybiAtRU5PTUVNOwo+ICAJfQo+ICAKPiAtCXJldCA9IHNldHVwX3NjcmF0Y2hf cGFnZShkZXZfcHJpdiwgJmdndHQtPmJhc2Uuc2NyYXRjaF9wYWdlLCBHRlBfRE1BMzIpOwo+ICsJ cmV0ID0gc2V0dXBfc2NyYXRjaF9wYWdlKCZnZ3R0LT5iYXNlLCBHRlBfRE1BMzIpOwo+ICAJaWYg KHJldCkgewo+ICAJCURSTV9FUlJPUigiU2NyYXRjaCBzZXR1cCBmYWlsZWRcbiIpOwo+ICAJCS8q IGlvdW5tYXAgd2lsbCBhbHNvIGdldCBjYWxsZWQgYXQgcmVtb3ZlLCBidXQgbWVoICovCj4gQEAg LTMwMzYsNyArMzA0MCw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfZ21jaF9yZW1vdmUoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gIAlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gaTkxNV92 bV90b19nZ3R0KHZtKTsKPiAgCj4gIAlpb3VubWFwKGdndHQtPmdzbSk7Cj4gLQljbGVhbnVwX3Nj cmF0Y2hfcGFnZSh2bS0+aTkxNSwgJnZtLT5zY3JhdGNoX3BhZ2UpOwo+ICsJY2xlYW51cF9zY3Jh dGNoX3BhZ2Uodm0pOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGdlbjhfZ21jaF9wcm9iZShzdHJ1 Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+IEBAIC0zMTg3LDYgKzMxOTEsNyBAQCBpbnQgaTkxNV9nZ3R0 X3Byb2JlX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCWludCByZXQ7 Cj4gIAo+ICAJZ2d0dC0+YmFzZS5pOTE1ID0gZGV2X3ByaXY7Cj4gKwlnZ3R0LT5iYXNlLmRtYSA9 ICZkZXZfcHJpdi0+ZHJtLnBkZXYtPmRldjsKPiAgCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA8PSA1KQo+ICAJCXJldCA9IGk5MTVfZ21jaF9wcm9iZShnZ3R0KTsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuaAo+IGluZGV4IDNjNWVmNTM1OGNlZi4uYzU5YTc2ODdlZDZmIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiBAQCAtMzYsNiArMzYsNyBAQAo+ICAK PiAgI2luY2x1ZGUgPGxpbnV4L2lvLW1hcHBpbmcuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L21tLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+Cj4gIAo+ICAjaW5jbHVkZSAiaTkxNV9nZW1f dGltZWxpbmUuaCIKPiAgI2luY2x1ZGUgImk5MTVfZ2VtX3JlcXVlc3QuaCIKPiBAQCAtMjQ3LDYg KzI0OCw3IEBAIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ugewo+ICAJc3RydWN0IGRybV9tbSBt bTsKPiAgCXN0cnVjdCBpOTE1X2dlbV90aW1lbGluZSB0aW1lbGluZTsKPiAgCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1Owo+ICsJc3RydWN0IGRldmljZSAqZG1hOwo+ICAJLyogRXZlcnkg YWRkcmVzcyBzcGFjZSBiZWxvbmdzIHRvIGEgc3RydWN0IGZpbGUgLSBleGNlcHQgZm9yIHRoZSBn bG9iYWwKPiAgCSAqIEdUVCB0aGF0IGlzIG93bmVkIGJ5IHRoZSBkcml2ZXIgKGFuZCBzbyBAZmls ZSBpcyBzZXQgdG8gTlVMTCkuIEluCj4gIAkgKiBwcmluY2lwbGUsIG5vIGluZm9ybWF0aW9uIHNo b3VsZCBsZWFrIGZyb20gb25lIGNvbnRleHQgdG8gYW5vdGhlcgo+IEBAIC0yOTcsNiArMjk5LDkg QEAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSB7Cj4gIAkgKi8KPiAgCXN0cnVjdCBsaXN0X2hl YWQgdW5ib3VuZF9saXN0Owo+ICAKPiArCXN0cnVjdCBwYWdldmVjIGZyZWVfcGFnZXM7Cj4gKwli b29sIHB0X2ttYXBfd2M7Cj4gKwo+ICAJLyogRklYTUU6IE5lZWQgYSBtb3JlIGdlbmVyaWMgcmV0 dXJuIHR5cGUgKi8KPiAgCWdlbjZfcHRlX3QgKCpwdGVfZW5jb2RlKShkbWFfYWRkcl90IGFkZHIs Cj4gIAkJCQkgZW51bSBpOTE1X2NhY2hlX2xldmVsIGxldmVsLAo+IC0tIAo+IDIuMTEuMAo+Cj4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1n ZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=