From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 12/15] drm/i915: Two stage watermarks for g4x Date: Wed, 10 May 2017 19:40:06 +0300 Message-ID: <20170510164006.GH12629@intel.com> References: <20170421181432.15216-1-ville.syrjala@linux.intel.com> <20170421181432.15216-13-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 904D96E39F for ; Wed, 10 May 2017 16:40:10 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBBcHIgMjQsIDIwMTcgYXQgMDk6MzQ6NDJBTSArMDIwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gT24gMjEtMDQtMTcgMjA6MTQsIHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+Cj4gPiBJbXBsZW1lbnQgcHJvcGVyIHR3byBzdGFnZSB3YXRlcm1hcmsg cHJvZ3JhbW1pbmcgZm9yIGc0eC4gQXMgd2l0aAo+ID4gb3RoZXIgcHJlLVNLTCBwbGF0Zm9ybXMs IHRoZSB3YXRlcm1hcmsgcmVnaXN0ZXJzIGFyZW4ndCBkb3VibGUKPiA+IGJ1ZmZlcmVkIG9uIGc0 eC4gSGVuY2Ugd2UgbXVzdCBzZXF1ZW5jZSB0aGUgd2F0ZXJtYXJrIHVwZGF0ZQo+ID4gY2FyZWZ1 bGx5IGFyb3VuZCBwbGFuZSB1cGRhdGVzLgo+ID4KPiA+IFRoZSBjb2RlIGlzIHF1aXRlIGhlYXZp bHkgbW9kZWxsZWQgb24gdGhlIFZMVi9DSFYgY29kZSwgd2l0aCBzb21lCj4gPiBmYWlybHkgc2ln bmlmaWNhbnQgZGlmZmVyZW5jZXMgZHVlIHRvIHRoZSBkaWZmZXJlbnQgaGFyZHdhcmUKPiA+IGFy Y2hpdGVjdHVyZToKPiA+ICogZzR4IGRvZXNuJ3QgdXNlIGludmVydGVkIHdhdGVybWFyayB2YWx1 ZXMKPiA+ICogQ3hTUiBhY3R1YWxseSBhZmZlY3RzIHRoZSB3YXRlcm1hcmtzIHNpbmNlIGl0IGNv bnRyb2xzIG1lbW9yeSBzZWxmCj4gPiAgIHJlZnJlc2ggaW4gYWRkaXRpb24gdG8gdGhlIG1heCBG SUZPIG1vZGUKPiA+ICogQSBmdXJ0aGVyIEhQTEwgU1IgbW9kZSBpcyBwb3NzaWJsZSB3aXRoIGhp Z2hlciBtZW1vcnkgd2FrZXVwCj4gPiAgIGxhdGVuY3kKPiA+ICogZzR4IGhhcyBGQkMyIGFuZCBz byBpdCBhbHNvIGhhcyBGQkMgd2F0ZXJtYXJrcwo+ID4gKiBtYXggRklGTyBtb2RlIGZvciBwcmlt YXJ5IHBsYW5lIG9ubHkgKGN1cnNvciBpcyBhbGxvd2VkLCBzcHJpdGUgaXMgbm90KQo+ID4gKiBn NHggaGFzIG5vIG1hbnVhbCBGSUZPIHJlcGFydGl0aW9uaW5nCj4gPiAqIHNvbWUgVExCIG1pc3Mg cmVsYXRlZCB3b3JrYXJvdW5kcyBhcmUgbmVlZGVkIGZvciB0aGUgd2F0ZXJtYXJrcwo+ID4KPiA+ IEFjdHVhbGx5IHRoZSBoYXJkd2FyZSBpcyBxdWl0ZSBzaW1pbGFyIHRvIElMSysgaW4gbWFueSB3 YXlzLiBUaGUKPiA+IG1vc3QgdmlzaWJsZSBkaWZmZXJlbmNlcyBhcmUgaW4gdGhlIGFjdHVhbCB3 YXRlcm1ha3IgcmVnaXN0ZXIKPiA+IGxheW91dC4gSUxLIHJldmFtcGVkIHRoYXQgcGFydCBxdWl0 ZSBoZWF2aWx5IHdoZXJlYXMgZzR4IGlzIHN0aWxsCj4gPiB1c2luZyB0aGUgbGF5b3V0IGluaGVy aXRlZCBmcm9tIGVhcmxpZXIgcGxhdGZvcm1zLgo+ID4KPiA+IE5vdGUgdGhhdCB3ZSBkaWRuJ3Qg cHJldmlvdXNseSBlbmFibGUgdGhlIEhQTEwgU1Igb24gZzR4LiBTbyBpbiBvcmRlcgo+ID4gdG8g bm90IGludHJvZHVjZSB0b28gbWFueSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBJ J3ZlIG5vdAo+ID4gYWN0dWFsbHkgZW5hYmxlZCBpdCBoZXJlIGVpdGhlciwgZXZlbiB0aG91Z2gg dGhlIGNvZGUgaXMgbm93IGZ1bGx5Cj4gPiByZWFkeSBmb3IgaXQuIFdlJ2xsIGVuYWJsZSBpdCBz ZXBhcmF0ZWx5IGxhdGVyIG9uLgo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzD pCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgfCAgMTIgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oICAgICAgfCAgMTIgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYyB8ICAyNSArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oICAgICB8ICAyOCArKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAg ICB8IDk0MiArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQo+ID4gIDUgZmlsZXMg Y2hhbmdlZCwgNzkyIGluc2VydGlvbnMoKyksIDIyNyBkZWxldGlvbnMoLSkKPiA+Cj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+ID4gaW5kZXggODcwYzQ3MDE3N2I1Li42OTU1MGQz MTA5OWUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMu Ywo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiA+IEBAIC0z ODk4LDYgKzM4OTgsOCBAQCBzdGF0aWMgdm9pZCB3bV9sYXRlbmN5X3Nob3coc3RydWN0IHNlcV9m aWxlICptLCBjb25zdCB1aW50MTZfdCB3bVs4XSkKPiA+ICAJCW51bV9sZXZlbHMgPSAzOwo+ID4g IAllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKPiA+ICAJCW51bV9sZXZlbHMgPSAx Owo+ID4gKwllbHNlIGlmIChJU19HNFgoZGV2X3ByaXYpKQo+ID4gKwkJbnVtX2xldmVscyA9IDM7 Cj4gPiAgCWVsc2UKPiA+ICAJCW51bV9sZXZlbHMgPSBpbGtfd21fbWF4X2xldmVsKGRldl9wcml2 KSArIDE7Cj4gPiAgCj4gPiBAQCAtMzkxMCw4ICszOTEyLDEwIEBAIHN0YXRpYyB2b2lkIHdtX2xh dGVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHVpbnQxNl90IHdtWzhdKQo+ID4g IAkJICogLSBXTTErIGxhdGVuY3kgdmFsdWVzIGluIDAuNXVzIHVuaXRzCj4gPiAgCQkgKiAtIGxh dGVuY2llcyBhcmUgaW4gdXMgb24gZ2VuOS92bHYvY2h2Cj4gPiAgCQkgKi8KPiA+IC0JCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDkgfHwgSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwKPiA+ IC0JCSAgICBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiA+ICsJCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDkgfHwKPiA+ICsJCSAgICBJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fAo+ID4g KwkJICAgIElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8Cj4gPiArCQkgICAgSVNfRzRYKGRldl9w cml2KSkKPiA+ICAJCQlsYXRlbmN5ICo9IDEwOwo+ID4gIAkJZWxzZSBpZiAobGV2ZWwgPiAwKQo+ ID4gIAkJCWxhdGVuY3kgKj0gNTsKPiA+IEBAIC0zOTcyLDcgKzM5NzYsNyBAQCBzdGF0aWMgaW50 IHByaV93bV9sYXRlbmN5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZp bGUpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBpbm9k ZS0+aV9wcml2YXRlOwo+ID4gIAo+ID4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDUpCj4g PiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNSAmJiAhSVNfRzRYKGRldl9wcml2KSkKPiA+ ICAJCXJldHVybiAtRU5PREVWOwo+ID4gIAo+ID4gIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwg cHJpX3dtX2xhdGVuY3lfc2hvdywgZGV2X3ByaXYpOwo+ID4gQEAgLTQwMTQsNiArNDAxOCw4IEBA IHN0YXRpYyBzc2l6ZV90IHdtX2xhdGVuY3lfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0 IGNoYXIgX191c2VyICp1YnVmLAo+ID4gIAkJbnVtX2xldmVscyA9IDM7Cj4gPiAgCWVsc2UgaWYg KElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQo+ID4gIAkJbnVtX2xldmVscyA9IDE7Cj4gPiArCWVs c2UgaWYgKElTX0c0WChkZXZfcHJpdikpCj4gPiArCQludW1fbGV2ZWxzID0gMzsKPiA+ICAJZWxz ZQo+ID4gIAkJbnVtX2xldmVscyA9IGlsa193bV9tYXhfbGV2ZWwoZGV2X3ByaXYpICsgMTsKPiA+ ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gaW5kZXggMGEzOTNmZGM1M2QxLi42ZGY4 YmZmN2Y1YTcgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiBAQCAtMTc2Miwx MSArMTc2MiwxMyBAQCBzdHJ1Y3QgaWxrX3dtX3ZhbHVlcyB7Cj4gPiAgCj4gPiAgc3RydWN0IGc0 eF9waXBlX3dtIHsKPiA+ICAJdWludDE2X3QgcGxhbmVbSTkxNV9NQVhfUExBTkVTXTsKPiA+ICsJ dWludDE2X3QgZmJjOwo+ID4gIH07Cj4gPiAgCj4gPiAgc3RydWN0IGc0eF9zcl93bSB7Cj4gPiAg CXVpbnQxNl90IHBsYW5lOwo+ID4gIAl1aW50MTZfdCBjdXJzb3I7Cj4gPiArCXVpbnQxNl90IGZi YzsKPiA+ICB9Owo+ID4gIAo+ID4gIHN0cnVjdCB2bHZfd21fZGRsX3ZhbHVlcyB7Cj4gPiBAQCAt MTc4MSw2ICsxNzgzLDE1IEBAIHN0cnVjdCB2bHZfd21fdmFsdWVzIHsKPiA+ICAJYm9vbCBjeHNy Owo+ID4gIH07Cj4gPiAgCj4gPiArc3RydWN0IGc0eF93bV92YWx1ZXMgewo+ID4gKwlzdHJ1Y3Qg ZzR4X3BpcGVfd20gcGlwZVsyXTsKPiA+ICsJc3RydWN0IGc0eF9zcl93bSBzcjsKPiA+ICsJc3Ry dWN0IGc0eF9zcl93bSBocGxsOwo+ID4gKwlib29sIGN4c3I7Cj4gPiArCWJvb2wgaHBsbF9lbjsK PiA+ICsJYm9vbCBmYmNfZW47Cj4gPiArfTsKPiA+ICsKPiA+ICBzdHJ1Y3Qgc2tsX2RkYl9lbnRy eSB7Cj4gPiAgCXVpbnQxNl90IHN0YXJ0LCBlbmQ7CS8qIGluIG51bWJlciBvZiBibG9ja3MsICdl bmQnIGlzIGV4Y2x1c2l2ZSAqLwo+ID4gIH07Cj4gPiBAQCAtMjQxMCw2ICsyNDIxLDcgQEAgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgewo+ID4gIAkJCXN0cnVjdCBpbGtfd21fdmFsdWVzIGh3Owo+ ID4gIAkJCXN0cnVjdCBza2xfd21fdmFsdWVzIHNrbF9odzsKPiA+ICAJCQlzdHJ1Y3Qgdmx2X3dt X3ZhbHVlcyB2bHY7Cj4gPiArCQkJc3RydWN0IGc0eF93bV92YWx1ZXMgZzR4Owo+ID4gIAkJfTsK PiA+ICAKPiA+ICAJCXVpbnQ4X3QgbWF4X2xldmVsOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwo+ID4gaW5kZXggODViOWUyZjUyMWEwLi4wZjQyMjYzYzNmNzYgMTAwNjQ0Cj4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTU3MTksNiArNTcxOSw4 IEBAIHN0YXRpYyB2b2lkIGk5eHhfc2V0X3BsbF9kaXZpZGVycyhzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YykKPiA+ICBzdGF0aWMgdm9pZCBpOXh4X2NydGNfZW5hYmxlKHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpwaXBlX2NvbmZpZywKPiA+ICAJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpvbGRfc3RhdGUpCj4gPiAgewo+ID4gKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpvbGRf aW50ZWxfc3RhdGUgPQo+ID4gKwkJdG9faW50ZWxfYXRvbWljX3N0YXRlKG9sZF9zdGF0ZSk7Cj4g PiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHBpcGVfY29uZmlnLT5iYXNlLmNydGM7Cj4gPiAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gPiAgCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+IEBAIC01NzUxLDcgKzU3NTMs MTEgQEAgc3RhdGljIHZvaWQgaTl4eF9jcnRjX2VuYWJsZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqcGlwZV9jb25maWcsCj4gPiAgCj4gPiAgCWludGVsX2NvbG9yX2xvYWRfbHV0cygmcGlwZV9j b25maWctPmJhc2UpOwo+ID4gIAo+ID4gLQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhpbnRlbF9j cnRjKTsKPiA+ICsJaWYgKGRldl9wcml2LT5kaXNwbGF5LmluaXRpYWxfd2F0ZXJtYXJrcyAhPSBO VUxMKQo+ID4gKwkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdGlhbF93YXRlcm1hcmtzKG9sZF9pbnRl bF9zdGF0ZSwKPiA+ICsJCQkJCQkgICAgIGludGVsX2NydGMtPmNvbmZpZyk7Cj4gPiArCWVsc2UK PiA+ICsJCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGludGVsX2NydGMpOwo+ID4gIAlpbnRlbF9l bmFibGVfcGlwZShpbnRlbF9jcnRjKTsKPiA+ICAKPiA+ICAJYXNzZXJ0X3ZibGFua19kaXNhYmxl ZChjcnRjKTsKPiA+IEBAIC0xMDg1MiwyMSArMTA4NTgsMjEgQEAgaW50IGludGVsX3BsYW5lX2F0 b21pY19jYWxjX2NoYW5nZXMoc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4g IAkJCSB0dXJuX29mZiwgdHVybl9vbiwgbW9kZV9jaGFuZ2VkKTsKPiA+ICAKPiA+ICAJaWYgKHR1 cm5fb24pIHsKPiA+IC0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNSkKPiA+ICsJCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpIDwgNSAmJiAhSVNfRzRYKGRldl9wcml2KSkKPiA+ICAJCQlwaXBl X2NvbmZpZy0+dXBkYXRlX3dtX3ByZSA9IHRydWU7Cj4gPiAgCj4gPiAgCQkvKiBtdXN0IGRpc2Fi bGUgY3hzciBhcm91bmQgcGxhbmUgZW5hYmxlL2Rpc2FibGUgKi8KPiA+ICAJCWlmIChwbGFuZS0+ aWQgIT0gUExBTkVfQ1VSU09SKQo+ID4gIAkJCXBpcGVfY29uZmlnLT5kaXNhYmxlX2N4c3IgPSB0 cnVlOwo+ID4gIAl9IGVsc2UgaWYgKHR1cm5fb2ZmKSB7Cj4gPiAtCQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA8IDUpCj4gPiArCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDUgJiYgIUlTX0c0 WChkZXZfcHJpdikpCj4gPiAgCQkJcGlwZV9jb25maWctPnVwZGF0ZV93bV9wb3N0ID0gdHJ1ZTsK PiA+ICAKPiA+ICAJCS8qIG11c3QgZGlzYWJsZSBjeHNyIGFyb3VuZCBwbGFuZSBlbmFibGUvZGlz YWJsZSAqLwo+ID4gIAkJaWYgKHBsYW5lLT5pZCAhPSBQTEFORV9DVVJTT1IpCj4gPiAgCQkJcGlw ZV9jb25maWctPmRpc2FibGVfY3hzciA9IHRydWU7Cj4gPiAgCX0gZWxzZSBpZiAoaW50ZWxfd21f bmVlZF91cGRhdGUoJnBsYW5lLT5iYXNlLCBwbGFuZV9zdGF0ZSkpIHsKPiA+IC0JCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpIDwgNSkgewo+ID4gKwkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA1 ICYmICFJU19HNFgoZGV2X3ByaXYpKSB7Cj4gPiAgCQkJLyogRklYTUUgYm9sbG9ja3MgKi8KPiA+ ICAJCQlwaXBlX2NvbmZpZy0+dXBkYXRlX3dtX3ByZSA9IHRydWU7Cj4gPiAgCQkJcGlwZV9jb25m aWctPnVwZGF0ZV93bV9wb3N0ID0gdHJ1ZTsKPiA+IEBAIC0xMTI5MCw3ICsxMTI5Niw4IEBAIGNs ZWFyX2ludGVsX2NydGNfc3RhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Cj4gPiAgCXNoYXJlZF9kcGxsID0gY3J0Y19zdGF0ZS0+c2hhcmVkX2RwbGw7Cj4gPiAgCWRwbGxf aHdfc3RhdGUgPSBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlOwo+ID4gIAlmb3JjZV90aHJ1ID0g Y3J0Y19zdGF0ZS0+cGNoX3BmaXQuZm9yY2VfdGhydTsKPiA+IC0JaWYgKElTX1ZBTExFWVZJRVco ZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ID4gKwlpZiAoSVNfRzRYKGRl dl9wcml2KSB8fAo+ID4gKwkgICAgSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpCj4gPiAgCQl3bV9zdGF0ZSA9IGNydGNfc3RhdGUtPndtOwo+ID4gIAo+ ID4gIAkvKiBLZWVwIGJhc2UgZHJtX2NydGNfc3RhdGUgaW50YWN0LCBvbmx5IGNsZWFyIG91ciBl eHRlbmRlZCBzdHJ1Y3QgKi8KPiA+IEBAIC0xMTMwMiw3ICsxMTMwOSw4IEBAIGNsZWFyX2ludGVs X2NydGNfc3RhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPiAgCWNy dGNfc3RhdGUtPnNoYXJlZF9kcGxsID0gc2hhcmVkX2RwbGw7Cj4gPiAgCWNydGNfc3RhdGUtPmRw bGxfaHdfc3RhdGUgPSBkcGxsX2h3X3N0YXRlOwo+ID4gIAljcnRjX3N0YXRlLT5wY2hfcGZpdC5m b3JjZV90aHJ1ID0gZm9yY2VfdGhydTsKPiA+IC0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYp IHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ID4gKwlpZiAoSVNfRzRYKGRldl9wcml2KSB8 fAo+ID4gKwkgICAgSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikpCj4gPiAgCQljcnRjX3N0YXRlLT53bSA9IHdtX3N0YXRlOwo+ID4gIH0KPiA+ICAKPiA+ IEBAIC0xNTUyNyw3ICsxNTUzNSwxMCBAQCBpbnRlbF9tb2Rlc2V0X3NldHVwX2h3X3N0YXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiAgCQlwbGwtPm9uID0gZmFsc2U7Cj4gPiAgCX0KPiA+ ICAKPiA+IC0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2 X3ByaXYpKSB7Cj4gPiArCWlmIChJU19HNFgoZGV2X3ByaXYpKSB7Cj4gPiArCQlnNHhfd21fZ2V0 X2h3X3N0YXRlKGRldik7Cj4gPiArCQlnNHhfd21fc2FuaXRpemUoZGV2X3ByaXYpOwo+ID4gKwl9 IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3By aXYpKSB7Cj4gPiAgCQl2bHZfd21fZ2V0X2h3X3N0YXRlKGRldik7Cj4gPiAgCQl2bHZfd21fc2Fu aXRpemUoZGV2X3ByaXYpOwo+ID4gIAl9IGVsc2UgaWYgKElTX0dFTjkoZGV2X3ByaXYpKSB7Cj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gaW5kZXggZDFjZGQxMDk5OGZhLi5mNTMwZGY3 MWE0ODAgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IEBAIC01MjIsNiAr NTIyLDIyIEBAIHN0cnVjdCB2bHZfZmlmb19zdGF0ZSB7Cj4gPiAgCXUxNiBwbGFuZVtJOTE1X01B WF9QTEFORVNdOwo+ID4gIH07Cj4gPiAgCj4gPiArZW51bSBnNHhfd21fbGV2ZWwgewo+ID4gKwlH NFhfV01fTEVWRUxfTk9STUFMLAo+ID4gKwlHNFhfV01fTEVWRUxfU1IsCj4gPiArCUc0WF9XTV9M RVZFTF9IUExMLAo+ID4gKwlOVU1fRzRYX1dNX0xFVkVMUywKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 cnVjdCBnNHhfd21fc3RhdGUgewo+ID4gKwlzdHJ1Y3QgZzR4X3BpcGVfd20gd207Cj4gPiArCXN0 cnVjdCBnNHhfc3Jfd20gc3I7Cj4gPiArCXN0cnVjdCBnNHhfc3Jfd20gaHBsbDsKPiA+ICsJYm9v bCBjeHNyOwo+ID4gKwlib29sIGhwbGxfZW47Cj4gPiArCWJvb2wgZmJjX2VuOwo+ID4gK307Cj4g PiArCj4gPiAgc3RydWN0IGludGVsX2NydGNfd21fc3RhdGUgewo+ID4gIAl1bmlvbiB7Cj4gPiAg CQlzdHJ1Y3Qgewo+ID4gQEAgLTU1Nyw2ICs1NzMsMTUgQEAgc3RydWN0IGludGVsX2NydGNfd21f c3RhdGUgewo+ID4gIAkJCS8qIGRpc3BsYXkgRklGTyBzcGxpdCAqLwo+ID4gIAkJCXN0cnVjdCB2 bHZfZmlmb19zdGF0ZSBmaWZvX3N0YXRlOwo+ID4gIAkJfSB2bHY7Cj4gPiArCj4gPiArCQlzdHJ1 Y3Qgewo+ID4gKwkJCS8qICJyYXciIHdhdGVybWFya3MgKi8KPiA+ICsJCQlzdHJ1Y3QgZzR4X3Bp cGVfd20gcmF3W05VTV9HNFhfV01fTEVWRUxTXTsKPiA+ICsJCQkvKiBpbnRlcm1lZGlhdGUgd2F0 ZXJtYXJrcyAqLwo+ID4gKwkJCXN0cnVjdCBnNHhfd21fc3RhdGUgaW50ZXJtZWRpYXRlOwo+ID4g KwkJCS8qIG9wdGltYWwgd2F0ZXJtYXJrcyAqLwo+ID4gKwkJCXN0cnVjdCBnNHhfd21fc3RhdGUg b3B0aW1hbDsKPiA+ICsJCX0gZzR4Owo+ID4gIAl9Owo+ID4gIAo+ID4gIAkvKgo+ID4gQEAgLTc5 NCw2ICs4MTksNyBAQCBzdHJ1Y3QgaW50ZWxfY3J0YyB7Cj4gPiAgCQl1bmlvbiB7Cj4gPiAgCQkJ c3RydWN0IGludGVsX3BpcGVfd20gaWxrOwo+ID4gIAkJCXN0cnVjdCB2bHZfd21fc3RhdGUgdmx2 Owo+ID4gKwkJCXN0cnVjdCBnNHhfd21fc3RhdGUgZzR4Owo+ID4gIAkJfSBhY3RpdmU7Cj4gPiAg CX0gd207Cj4gPiAgCj4gPiBAQCAtMTg0MSw2ICsxODY3LDcgQEAgdm9pZCBnZW42X3Jwc19ib29z dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCQkgICAgc3RydWN0IGlu dGVsX3Jwc19jbGllbnQgKnJwcywKPiA+ICAJCSAgICB1bnNpZ25lZCBsb25nIHN1Ym1pdHRlZCk7 Cj4gPiAgdm9pZCBpbnRlbF9xdWV1ZV9ycHNfYm9vc3RfZm9yX3JlcXVlc3Qoc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwo+ID4gK3ZvaWQgZzR4X3dtX2dldF9od19zdGF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+ICB2b2lkIHZsdl93bV9nZXRfaHdfc3RhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldik7Cj4gPiAgdm9pZCBpbGtfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ID4gIHZvaWQgc2tsX3dtX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiA+IEBAIC0xODQ4LDYgKzE4NzUsNyBAQCB2b2lkIHNrbF9kZGJfZ2V0 X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICAJCQkgIHN0 cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiAvKiBvdXQgKi8pOwo+ID4gIHZvaWQgc2tsX3Bp cGVfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJCQkgICAgICBz dHJ1Y3Qgc2tsX3BpcGVfd20gKm91dCk7Cj4gPiArdm9pZCBnNHhfd21fc2FuaXRpemUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiA+ICB2b2lkIHZsdl93bV9zYW5pdGl6ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ID4gIGJvb2wgaW50ZWxfY2FuX2Vu YWJsZV9zYWd2KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gPiAgaW50IGludGVs X2VuYWJsZV9zYWd2KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMKPiA+IGluZGV4IDYxYjY3OTk0YzRhOC4uOWIwYTZhNDU3MmNlIDEw MDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gQEAgLTQyOSw3ICs0MjksMTAgQEAg Ym9vbCBpbnRlbF9zZXRfbWVtb3J5X2N4c3Ioc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCBib29sIGVuYWJsZSkKPiA+ICAKPiA+ICAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPndtLndt X211dGV4KTsKPiA+ICAJcmV0ID0gX2ludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgZW5h YmxlKTsKPiA+IC0JZGV2X3ByaXYtPndtLnZsdi5jeHNyID0gZW5hYmxlOwo+ID4gKwlpZiAoSVNf VkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gPiArCQlk ZXZfcHJpdi0+d20udmx2LmN4c3IgPSBlbmFibGU7Cj4gPiArCWVsc2UgaWYgKElTX0c0WChkZXZf cHJpdikpCj4gPiArCQlkZXZfcHJpdi0+d20uZzR4LmN4c3IgPSBlbmFibGU7Cj4gPiAgCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPndtLndtX211dGV4KTsKPiA+ICAKPiA+ICAJcmV0dXJuIHJldDsK PiA+IEBAIC01NjgsMjAgKzU3MSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJt YXJrX3BhcmFtcyBwaW5ldmlld19jdXJzb3JfaHBsbG9mZl93bSA9IHsKPiA+ICAJLmd1YXJkX3Np emUgPSBQSU5FVklFV19DVVJTT1JfR1VBUkRfV00sCj4gPiAgCS5jYWNoZWxpbmVfc2l6ZSA9IFBJ TkVWSUVXX0ZJRk9fTElORV9TSVpFLAo+ID4gIH07Cj4gPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF93YXRlcm1hcmtfcGFyYW1zIGc0eF93bV9pbmZvID0gewo+ID4gLQkuZmlmb19zaXplID0g RzRYX0ZJRk9fU0laRSwKPiA+IC0JLm1heF93bSA9IEc0WF9NQVhfV00sCj4gPiAtCS5kZWZhdWx0 X3dtID0gRzRYX01BWF9XTSwKPiA+IC0JLmd1YXJkX3NpemUgPSAyLAo+ID4gLQkuY2FjaGVsaW5l X3NpemUgPSBHNFhfRklGT19MSU5FX1NJWkUsCj4gPiAtfTsKPiA+IC1zdGF0aWMgY29uc3Qgc3Ry dWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgZzR4X2N1cnNvcl93bV9pbmZvID0gewo+ID4gLQku Zmlmb19zaXplID0gSTk2NV9DVVJTT1JfRklGTywKPiA+IC0JLm1heF93bSA9IEk5NjVfQ1VSU09S X01BWF9XTSwKPiA+IC0JLmRlZmF1bHRfd20gPSBJOTY1X0NVUlNPUl9ERlRfV00sCj4gPiAtCS5n dWFyZF9zaXplID0gMiwKPiA+IC0JLmNhY2hlbGluZV9zaXplID0gRzRYX0ZJRk9fTElORV9TSVpF LAo+ID4gLX07Cj4gPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1z IGk5NjVfY3Vyc29yX3dtX2luZm8gPSB7Cj4gPiAgCS5maWZvX3NpemUgPSBJOTY1X0NVUlNPUl9G SUZPLAo+ID4gIAkubWF4X3dtID0gSTk2NV9DVVJTT1JfTUFYX1dNLAo+ID4gQEAgLTc4MCw2ICs3 NjksMTYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9jYWxjdWxhdGVfd20oaW50IHBpeGVs X3JhdGUsCj4gPiAgCXJldHVybiB3bV9zaXplOwo+ID4gIH0KPiA+ICAKPiA+ICtzdGF0aWMgYm9v bCBpc19kaXNhYmxpbmcoaW50IG9sZCwgaW50IG5ldywgaW50IHRocmVzaG9sZCkKPiA+ICt7Cj4g PiArCXJldHVybiBvbGQgPj0gdGhyZXNob2xkICYmIG5ldyA8IHRocmVzaG9sZDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGJvb2wgaXNfZW5hYmxpbmcoaW50IG9sZCwgaW50IG5ldywgaW50IHRo cmVzaG9sZCkKPiA+ICt7Cj4gPiArCXJldHVybiBvbGQgPCB0aHJlc2hvbGQgJiYgbmV3ID49IHRo cmVzaG9sZDsKPiA+ICt9Cj4gPiArCj4gPiAgc3RhdGljIGludCBpbnRlbF93bV9udW1fbGV2ZWxz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICB7Cj4gPiAgCXJldHVybiBk ZXZfcHJpdi0+d20ubWF4X2xldmVsICsgMTsKPiA+IEBAIC05MTEsMTM4ICs5MTAsMjggQEAgc3Rh dGljIGludCBnNHhfdGxiX21pc3Nfd2EoaW50IGZpZm9fc2l6ZSwgaW50IHdpZHRoLCBpbnQgY3Bw KQo+ID4gIAlyZXR1cm4gbWF4KDAsIHRsYl9taXNzKTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGlj IGJvb2wgZzR4X2NvbXB1dGVfd20wKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiA+IC0JCQkgICAgaW50IHBsYW5lLAo+ID4gLQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0 ZXJtYXJrX3BhcmFtcyAqZGlzcGxheSwKPiA+IC0JCQkgICAgaW50IGRpc3BsYXlfbGF0ZW5jeV9u cywKPiA+IC0JCQkgICAgY29uc3Qgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgKmN1cnNv ciwKPiA+IC0JCQkgICAgaW50IGN1cnNvcl9sYXRlbmN5X25zLAo+ID4gLQkJCSAgICBpbnQgKnBs YW5lX3dtLAo+ID4gLQkJCSAgICBpbnQgKmN1cnNvcl93bSkKPiA+ICtzdGF0aWMgdm9pZCBnNHhf d3JpdGVfd21fdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICsJ CQkJY29uc3Qgc3RydWN0IGc0eF93bV92YWx1ZXMgKndtKQo+ID4gIHsKPiA+IC0Jc3RydWN0IGlu dGVsX2NydGMgKmNydGM7Cj4gPiAtCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1 c3RlZF9tb2RlOwo+ID4gLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiA+IC0J aW50IGh0b3RhbCwgcGxhbmVfd2lkdGgsIGN1cnNvcl93aWR0aCwgY2xvY2ssIGNwcDsKPiA+IC0J aW50IGVudHJpZXM7Cj4gPiAtCj4gPiAtCWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGxhbmUo ZGV2X3ByaXYsIHBsYW5lKTsKPiA+IC0JaWYgKCFpbnRlbF9jcnRjX2FjdGl2ZShjcnRjKSkgewo+ ID4gLQkJKmN1cnNvcl93bSA9IGN1cnNvci0+Z3VhcmRfc2l6ZTsKPiA+IC0JCSpwbGFuZV93bSA9 IGRpc3BsYXktPmd1YXJkX3NpemU7Cj4gPiAtCQlyZXR1cm4gZmFsc2U7Cj4gPiAtCX0KPiA+IC0K PiA+IC0JYWRqdXN0ZWRfbW9kZSA9ICZjcnRjLT5jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZTsK PiA+IC0JZmIgPSBjcnRjLT5iYXNlLnByaW1hcnktPnN0YXRlLT5mYjsKPiA+IC0JY2xvY2sgPSBh ZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrOwo+ID4gLQlodG90YWwgPSBhZGp1c3RlZF9tb2RlLT5j cnRjX2h0b3RhbDsKPiA+IC0JcGxhbmVfd2lkdGggPSBjcnRjLT5jb25maWctPnBpcGVfc3JjX3c7 Cj4gPiAtCWN1cnNvcl93aWR0aCA9IGNydGMtPmJhc2UuY3Vyc29yLT5zdGF0ZS0+Y3J0Y193Owo+ ID4gLQljcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Cj4gPiAtCj4gPiAtCS8qIFVzZSB0aGUgc21h bGwgYnVmZmVyIG1ldGhvZCB0byBjYWxjdWxhdGUgcGxhbmUgd2F0ZXJtYXJrICovCj4gPiAtCWVu dHJpZXMgPSBpbnRlbF93bV9tZXRob2QxKGNsb2NrLCBjcHAsIGRpc3BsYXlfbGF0ZW5jeV9ucyAv IDEwMCk7Cj4gPiAtCWVudHJpZXMgKz0gZzR4X3RsYl9taXNzX3dhKGRpc3BsYXktPmZpZm9fc2l6 ZSwgcGxhbmVfd2lkdGgsIGNwcCk7Cj4gPiAtCWVudHJpZXMgPSBESVZfUk9VTkRfVVAoZW50cmll cywgZGlzcGxheS0+Y2FjaGVsaW5lX3NpemUpOwo+ID4gLQkqcGxhbmVfd20gPSBlbnRyaWVzICsg ZGlzcGxheS0+Z3VhcmRfc2l6ZTsKPiA+IC0JaWYgKCpwbGFuZV93bSA+IChpbnQpZGlzcGxheS0+ bWF4X3dtKQo+ID4gLQkJKnBsYW5lX3dtID0gZGlzcGxheS0+bWF4X3dtOwo+ID4gLQo+ID4gLQkv KiBVc2UgdGhlIGxhcmdlIGJ1ZmZlciBtZXRob2QgdG8gY2FsY3VsYXRlIGN1cnNvciB3YXRlcm1h cmsgKi8KPiA+IC0JZW50cmllcyA9IGludGVsX3dtX21ldGhvZDIoY2xvY2ssIGh0b3RhbCwgY3Vy c29yX3dpZHRoLCA0LAo+ID4gLQkJCQkgICBjdXJzb3JfbGF0ZW5jeV9ucyAvIDEwMCk7Cj4gPiAt CWVudHJpZXMgKz0gZzR4X3RsYl9taXNzX3dhKGN1cnNvci0+Zmlmb19zaXplLCBjdXJzb3Jfd2lk dGgsIDQpOwo+ID4gLQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGN1cnNvci0+Y2Fj aGVsaW5lX3NpemUpOwo+ID4gLQkqY3Vyc29yX3dtID0gZW50cmllcyArIGN1cnNvci0+Z3VhcmRf c2l6ZTsKPiA+IC0JaWYgKCpjdXJzb3Jfd20gPiAoaW50KWN1cnNvci0+bWF4X3dtKQo+ID4gLQkJ KmN1cnNvcl93bSA9IChpbnQpY3Vyc29yLT5tYXhfd207Cj4gPiAtCj4gPiAtCXJldHVybiB0cnVl Owo+ID4gLX0KPiA+IC0KPiA+IC0vKgo+ID4gLSAqIENoZWNrIHRoZSB3bSByZXN1bHQuCj4gPiAt ICoKPiA+IC0gKiBJZiBhbnkgY2FsY3VsYXRlZCB3YXRlcm1hcmsgdmFsdWVzIGlzIGxhcmdlciB0 aGFuIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQKPiA+IC0gKiBjYW4gYmUgcHJvZ3JhbW1lZCBpbnRv IHRoZSBhc3NvY2lhdGVkIHdhdGVybWFyayByZWdpc3RlciwgdGhhdCB3YXRlcm1hcmsKPiA+IC0g KiBtdXN0IGJlIGRpc2FibGVkLgo+ID4gLSAqLwo+ID4gLXN0YXRpYyBib29sIGc0eF9jaGVja19z cndtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+IC0JCQkgICBpbnQgZGlz cGxheV93bSwgaW50IGN1cnNvcl93bSwKPiA+IC0JCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0 ZXJtYXJrX3BhcmFtcyAqZGlzcGxheSwKPiA+IC0JCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0 ZXJtYXJrX3BhcmFtcyAqY3Vyc29yKQo+ID4gLXsKPiA+IC0JRFJNX0RFQlVHX0tNUygiU1Igd2F0 ZXJtYXJrOiBkaXNwbGF5IHBsYW5lICVkLCBjdXJzb3IgJWRcbiIsCj4gPiAtCQkgICAgICBkaXNw bGF5X3dtLCBjdXJzb3Jfd20pOwo+ID4gLQo+ID4gLQlpZiAoZGlzcGxheV93bSA+IGRpc3BsYXkt Pm1heF93bSkgewo+ID4gLQkJRFJNX0RFQlVHX0tNUygiZGlzcGxheSB3YXRlcm1hcmsgaXMgdG9v IGxhcmdlKCVkLyV1KSwgZGlzYWJsaW5nXG4iLAo+ID4gLQkJCSAgICAgIGRpc3BsYXlfd20sIGRp c3BsYXktPm1heF93bSk7Cj4gPiAtCQlyZXR1cm4gZmFsc2U7Cj4gPiAtCX0KPiA+IC0KPiA+IC0J aWYgKGN1cnNvcl93bSA+IGN1cnNvci0+bWF4X3dtKSB7Cj4gPiAtCQlEUk1fREVCVUdfS01TKCJj dXJzb3Igd2F0ZXJtYXJrIGlzIHRvbyBsYXJnZSglZC8ldSksIGRpc2FibGluZ1xuIiwKPiA+IC0J CQkgICAgICBjdXJzb3Jfd20sIGN1cnNvci0+bWF4X3dtKTsKPiA+IC0JCXJldHVybiBmYWxzZTsK PiA+IC0JfQo+ID4gLQo+ID4gLQlpZiAoIShkaXNwbGF5X3dtIHx8IGN1cnNvcl93bSkpIHsKPiA+ IC0JCURSTV9ERUJVR19LTVMoIlNSIGxhdGVuY3kgaXMgMCwgZGlzYWJsaW5nXG4iKTsKPiA+IC0J CXJldHVybiBmYWxzZTsKPiA+IC0JfQo+ID4gLQo+ID4gLQlyZXR1cm4gdHJ1ZTsKPiA+IC19Cj4g PiAtCj4gPiAtc3RhdGljIGJvb2wgZzR4X2NvbXB1dGVfc3J3bShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gPiAtCQkJICAgICBpbnQgcGxhbmUsCj4gPiAtCQkJICAgICBpbnQg bGF0ZW5jeV9ucywKPiA+IC0JCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFy YW1zICpkaXNwbGF5LAo+ID4gLQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX3dhdGVybWFya19w YXJhbXMgKmN1cnNvciwKPiA+IC0JCQkgICAgIGludCAqZGlzcGxheV93bSwgaW50ICpjdXJzb3Jf d20pCj4gPiAtewo+ID4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiA+IC0JY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGU7Cj4gPiAtCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiOwo+ID4gLQlpbnQgcGxhbmVfd2lkdGgsIGN1cnNvcl93aWR0aCwg aHRvdGFsLCBjcHAsIGNsb2NrOwo+ID4gLQlpbnQgc21hbGwsIGxhcmdlOwo+ID4gLQlpbnQgZW50 cmllczsKPiA+IC0KPiA+IC0JaWYgKCFsYXRlbmN5X25zKSB7Cj4gPiAtCQkqZGlzcGxheV93bSA9 ICpjdXJzb3Jfd20gPSAwOwo+ID4gLQkJcmV0dXJuIGZhbHNlOwo+ID4gLQl9Cj4gPiAtCj4gPiAt CWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGxhbmUoZGV2X3ByaXYsIHBsYW5lKTsKPiA+IC0J YWRqdXN0ZWRfbW9kZSA9ICZjcnRjLT5jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZTsKPiA+IC0J ZmIgPSBjcnRjLT5iYXNlLnByaW1hcnktPnN0YXRlLT5mYjsKPiA+IC0JY2xvY2sgPSBhZGp1c3Rl ZF9tb2RlLT5jcnRjX2Nsb2NrOwo+ID4gLQlodG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2h0 b3RhbDsKPiA+IC0JcGxhbmVfd2lkdGggPSBjcnRjLT5jb25maWctPnBpcGVfc3JjX3c7Cj4gPiAt CWN1cnNvcl93aWR0aCA9IGNydGMtPmJhc2UuY3Vyc29yLT5zdGF0ZS0+Y3J0Y193Owo+ID4gLQlj cHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Cj4gPiAtCj4gPiAtCS8qIFVzZSB0aGUgbWluaW11bSBv ZiB0aGUgc21hbGwgYW5kIGxhcmdlIGJ1ZmZlciBtZXRob2QgZm9yIHByaW1hcnkgKi8KPiA+IC0J c21hbGwgPSBpbnRlbF93bV9tZXRob2QxKGNsb2NrLCBjcHAsIGxhdGVuY3lfbnMgLyAxMDApOwo+ ID4gLQlsYXJnZSA9IGludGVsX3dtX21ldGhvZDIoY2xvY2ssIGh0b3RhbCwgcGxhbmVfd2lkdGgs IGNwcCwKPiA+IC0JCQkJIGxhdGVuY3lfbnMgLyAxMDApOwo+ID4gLQllbnRyaWVzID0gbWluKHNt YWxsLCBsYXJnZSk7Cj4gPiAtCWVudHJpZXMgKz0gZzR4X3RsYl9taXNzX3dhKGRpc3BsYXktPmZp Zm9fc2l6ZSwgcGxhbmVfd2lkdGgsIGNwcCk7Cj4gPiAtCWVudHJpZXMgPSBESVZfUk9VTkRfVVAo ZW50cmllcywgZGlzcGxheS0+Y2FjaGVsaW5lX3NpemUpOwo+ID4gLQkqZGlzcGxheV93bSA9IGVu dHJpZXMgKyBkaXNwbGF5LT5ndWFyZF9zaXplOwo+ID4gLQo+ID4gLQkvKiBjYWxjdWxhdGUgdGhl IHNlbGYtcmVmcmVzaCB3YXRlcm1hcmsgZm9yIGRpc3BsYXkgY3Vyc29yICovCj4gPiAtCWVudHJp ZXMgPSBpbnRlbF93bV9tZXRob2QyKGNsb2NrLCBodG90YWwsIGN1cnNvcl93aWR0aCwgNCwKPiA+ IC0JCQkJICAgbGF0ZW5jeV9ucyAvIDEwMCk7Cj4gPiAtCWVudHJpZXMgKz0gZzR4X3RsYl9taXNz X3dhKGN1cnNvci0+Zmlmb19zaXplLCBjdXJzb3Jfd2lkdGgsIDQpOwo+ID4gLQllbnRyaWVzID0g RElWX1JPVU5EX1VQKGVudHJpZXMsIGN1cnNvci0+Y2FjaGVsaW5lX3NpemUpOwo+ID4gLQkqY3Vy c29yX3dtID0gZW50cmllcyArIGN1cnNvci0+Z3VhcmRfc2l6ZTsKPiA+IC0KPiA+IC0JcmV0dXJu IGc0eF9jaGVja19zcndtKGRldl9wcml2LAo+ID4gLQkJCSAgICAgICpkaXNwbGF5X3dtLCAqY3Vy c29yX3dtLAo+ID4gLQkJCSAgICAgIGRpc3BsYXksIGN1cnNvcik7Cj4gPiArCUk5MTVfV1JJVEUo RFNQRlcxLAo+ID4gKwkJICAgRldfV00od20tPnNyLnBsYW5lLCBTUikgfAo+ID4gKwkJICAgRldf V00od20tPnBpcGVbUElQRV9CXS5wbGFuZVtQTEFORV9DVVJTT1JdLCBDVVJTT1JCKSB8Cj4gPiAr CQkgICBGV19XTSh3bS0+cGlwZVtQSVBFX0JdLnBsYW5lW1BMQU5FX1BSSU1BUlldLCBQTEFORUIp IHwKPiA+ICsJCSAgIEZXX1dNKHdtLT5waXBlW1BJUEVfQV0ucGxhbmVbUExBTkVfUFJJTUFSWV0s IFBMQU5FQSkpOwo+ID4gKwlJOTE1X1dSSVRFKERTUEZXMiwKPiA+ICsJCSAgICh3bS0+ZmJjX2Vu ID8gRFNQRldfRkJDX1NSX0VOIDogMCkgfAo+ID4gKwkJICAgRldfV00od20tPnNyLmZiYywgRkJD X1NSKSB8Cj4gPiArCQkgICBGV19XTSh3bS0+aHBsbC5mYmMsIEZCQ19IUExMX1NSKSB8Cj4gPiAr CQkgICBGV19XTSh3bS0+cGlwZVtQSVBFX0JdLnBsYW5lW1BMQU5FX1NQUklURTBdLCBTUFJJVEVC KSB8Cj4gPiArCQkgICBGV19XTSh3bS0+cGlwZVtQSVBFX0FdLnBsYW5lW1BMQU5FX0NVUlNPUl0s IENVUlNPUkEpIHwKPiA+ICsJCSAgIEZXX1dNKHdtLT5waXBlW1BJUEVfQV0ucGxhbmVbUExBTkVf U1BSSVRFMF0sIFNQUklURUEpKTsKPiA+ICsJSTkxNV9XUklURShEU1BGVzMsCj4gPiArCQkgICAo d20tPmhwbGxfZW4gPyBEU1BGV19IUExMX1NSX0VOIDogMCkgfAo+ID4gKwkJICAgRldfV00od20t PnNyLmN1cnNvciwgQ1VSU09SX1NSKSB8Cj4gPiArCQkgICBGV19XTSh3bS0+aHBsbC5jdXJzb3Is IEhQTExfQ1VSU09SKSB8Cj4gPiArCQkgICBGV19XTSh3bS0+aHBsbC5wbGFuZSwgSFBMTF9TUikp Owo+ID4gKwo+ID4gKwlQT1NUSU5HX1JFQUQoRFNQRlcxKTsKPiA+ICB9Cj4gPiAgCj4gPiAgI2Rl ZmluZSBGV19XTV9WTFYodmFsdWUsIHBsYW5lKSBcCj4gPiBAQCAtMTEyNiw2ICsxMDE1LDUyMyBA QCBzdGF0aWMgdm9pZCB2bHZfd3JpdGVfd21fdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiA+ICAKPiA+ICAjdW5kZWYgRldfV01fVkxWCj4gPiAgCj4gPiArc3RhdGlj IHZvaWQgZzR4X3NldHVwX3dtX2xhdGVuY3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ID4gK3sKPiA+ICsJLyogYWxsIGxhdGVuY2llcyBpbiB1c2VjICovCj4gPiArCWRldl9w cml2LT53bS5wcmlfbGF0ZW5jeVtHNFhfV01fTEVWRUxfTk9STUFMXSA9IDU7Cj4gPiArCWRldl9w cml2LT53bS5wcmlfbGF0ZW5jeVtHNFhfV01fTEVWRUxfU1JdID0gMTI7Cj4gPiArCj4gPiArCWRl dl9wcml2LT53bS5tYXhfbGV2ZWwgPSBHNFhfV01fTEVWRUxfU1I7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbnQgZzR4X3BsYW5lX2ZpZm9fc2l6ZShlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLCBp bnQgbGV2ZWwpCj4gPiArewo+ID4gKwkvKgo+ID4gKwkgKiBEU1BDTlRSWzEzXSBzdXBwb3NlZGx5 IGNvbnRyb2xzIHdoZXRoZXIgdGhlCj4gPiArCSAqIHByaW1hcnkgcGxhbmUgY2FuIHVzZSB0aGUg RklGTyBzcGFjZSBvdGhlcndpc2UKPiA+ICsJICogcmVzZXJ2ZWQgZm9yIHRoZSBzcHJpdGUgcGxh bmUuIEl0J3Mgbm90IDEwMCUgY2xlYXIKPiA+ICsJICogd2hhdCB0aGUgYWN0dWFsIEZJRk8gc2l6 ZSBpcywgYnV0IGl0IGxvb2tzIGxpa2Ugd2UKPiA+ICsJICogY2FuIGhhcHBpbHkgc2V0IGJvdGgg cHJpbWFyeSBhbmQgc3ByaXRlIHdhdGVybWFya3MKPiA+ICsJICogdXAgdG8gMTI3IGNhY2hlbGlu ZXMuIFNvIHRoYXQgd291bGQgc2VlbSB0byBtZWFuCj4gPiArCSAqIHRoYXQgZWl0aGVyIERTUENO VFJbMTNdIGRvZXNuJ3QgZG8gYW55dGhpbmcsIG9yIHRoYXQKPiA+ICsJICogdGhlIHRvdGFsIEZJ Rk8gaXMgPj0gMjU2IGNhY2hlbGluZXMgaW4gc2l6ZS4gRWl0aGVyCj4gPiArCSAqIHdheSwgd2Ug ZG9uJ3Qgc2VlbSB0byBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMKPiA+ICsJICogcmVwYXJ0aXRp b25pbmcgYXMgdGhlIG1heGltdW0gd2F0ZXJtYXJrIHZhbHVlIHRoZQo+ID4gKwkgKiByZWdpc3Rl ciBjYW4gaG9sZCBmb3IgZWFjaCBwbGFuZSBpcyBsb3dlciB0aGFuIHRoZQo+ID4gKwkgKiBtaW5p bXVtIEZJRk8gc2l6ZS4KPiA+ICsJICovCj4gPiArCXN3aXRjaCAocGxhbmVfaWQpIHsKPiA+ICsJ Y2FzZSBQTEFORV9DVVJTT1I6Cj4gPiArCQlyZXR1cm4gNjM7Cj4gPiArCWNhc2UgUExBTkVfUFJJ TUFSWToKPiA+ICsJCXJldHVybiBsZXZlbCA9PSBHNFhfV01fTEVWRUxfTk9STUFMID8gMTI3IDog NTExOwo+ID4gKwljYXNlIFBMQU5FX1NQUklURTA6Cj4gPiArCQlyZXR1cm4gbGV2ZWwgPT0gRzRY X1dNX0xFVkVMX05PUk1BTCA/IDEyNyA6IDA7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlNSVNTSU5H X0NBU0UocGxhbmVfaWQpOwo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludCBnNHhfZmJjX2ZpZm9fc2l6ZShpbnQgbGV2ZWwpCj4gPiArewo+ID4gKwlz d2l0Y2ggKGxldmVsKSB7Cj4gPiArCWNhc2UgRzRYX1dNX0xFVkVMX1NSOgo+ID4gKwkJcmV0dXJu IDc7Cj4gPiArCWNhc2UgRzRYX1dNX0xFVkVMX0hQTEw6Cj4gPiArCQlyZXR1cm4gMTU7Cj4gPiAr CWRlZmF1bHQ6Cj4gPiArCQlNSVNTSU5HX0NBU0UobGV2ZWwpOwo+ID4gKwkJcmV0dXJuIDA7Cj4g PiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHVpbnQxNl90IGc0eF9jb21wdXRlX3dtKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCSAgICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ID4gKwkJCSAgICAg ICBpbnQgbGV2ZWwpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9f aW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPmJhc2UucGxhbmUpOwo+ID4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gPiArCWNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0KPiA+ICsJCSZjcnRj X3N0YXRlLT5iYXNlLmFkanVzdGVkX21vZGU7Cj4gPiArCWludCBjbG9jaywgaHRvdGFsLCBjcHAs IHdpZHRoLCB3bTsKPiA+ICsJaW50IGxhdGVuY3kgPSBkZXZfcHJpdi0+d20ucHJpX2xhdGVuY3lb bGV2ZWxdICogMTA7Cj4gPiArCj4gPiArCWlmIChsYXRlbmN5ID09IDApCj4gPiArCQlyZXR1cm4g VVNIUlRfTUFYOwo+ID4gKwo+ID4gKwlpZiAoIWludGVsX3dtX3BsYW5lX3Zpc2libGUoY3J0Y19z dGF0ZSwgcGxhbmVfc3RhdGUpKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCS8qCj4gPiAr CSAqIE5vdCAxMDAlIHN1cmUgd2hpY2ggd2F5IEVMSyBzaG91bGQgZ28gaGVyZSBhcyB0aGUKPiA+ ICsJICogc3BlYyBvbmx5IHNheXMgQ0wvQ1RHIHNob3VsZCBhc3N1bWUgMzJicHAgYW5kIEJXCj4g PiArCSAqIGRvZXNuJ3QgbmVlZCB0by4gQnV0IGFzIHRoZXNlIHRoaW5ncyBmb2xsb3dlZCB0aGUK PiA+ICsJICogbW9iaWxlIHZzLiBkZXNrdG9wIGxpbmVzIG9uIGdlbjMgYXMgd2VsbCwgbGV0J3MK PiA+ICsJICogYXNzdW1lIEVMSyBkb2Vzbid0IG5lZWQgdGhpcy4KPiA+ICsJICoKPiA+ICsJICog VGhlIHNwZWMgYWxzbyBmYWlscyB0byBsaXN0IHN1Y2ggYSByZXN0cmljdGlvbiBmb3IKPiA+ICsJ ICogdGhlIEhQTEwgd2F0ZXJtYXJrLCB3aGljaCBzZWVtcyBhIGxpdHRsZSBzdHJhbmdlLgo+ID4g KwkgKiBMZXQncyB1c2UgMzJicHAgZm9yIHRoZSBIUExMIHdhdGVybWFyayBhcyB3ZWxsLgo+ID4g KwkgKi8KPiA+ICsJaWYgKElTX0dNNDUoZGV2X3ByaXYpICYmIHBsYW5lLT5pZCA9PSBQTEFORV9Q UklNQVJZICYmCj4gPiArCSAgICBsZXZlbCAhPSBHNFhfV01fTEVWRUxfTk9STUFMKQo+ID4gKwkJ Y3BwID0gNDsKPiA+ICsJZWxzZQo+ID4gKwkJY3BwID0gcGxhbmVfc3RhdGUtPmJhc2UuZmItPmZv cm1hdC0+Y3BwWzBdOwo+ID4gKwo+ID4gKwljbG9jayA9IGFkanVzdGVkX21vZGUtPmNydGNfY2xv Y2s7Cj4gPiArCWh0b3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsOwo+ID4gKwo+ID4g KwlpZiAocGxhbmUtPmlkID09IFBMQU5FX0NVUlNPUikKPiA+ICsJCXdpZHRoID0gcGxhbmVfc3Rh dGUtPmJhc2UuY3J0Y193Owo+ID4gKwllbHNlCj4gPiArCQl3aWR0aCA9IGRybV9yZWN0X3dpZHRo KCZwbGFuZV9zdGF0ZS0+YmFzZS5kc3QpOwo+ID4gKwo+ID4gKwlpZiAocGxhbmUtPmlkID09IFBM QU5FX0NVUlNPUikgewo+ID4gKwkJd20gPSBpbnRlbF93bV9tZXRob2QyKGNsb2NrLCBodG90YWws IHdpZHRoLCBjcHAsIGxhdGVuY3kpOwo+ID4gKwl9IGVsc2UgaWYgKHBsYW5lLT5pZCA9PSBQTEFO RV9QUklNQVJZICYmCj4gPiArCQkgICBsZXZlbCA9PSBHNFhfV01fTEVWRUxfTk9STUFMKSB7Cj4g PiArCQl3bSA9IGludGVsX3dtX21ldGhvZDEoY2xvY2ssIGNwcCwgbGF0ZW5jeSk7Cj4gPiArCX0g ZWxzZSB7Cj4gPiArCQlpbnQgc21hbGwsIGxhcmdlOwo+ID4gKwo+ID4gKwkJc21hbGwgPSBpbnRl bF93bV9tZXRob2QxKGNsb2NrLCBjcHAsIGxhdGVuY3kpOwo+ID4gKwkJbGFyZ2UgPSBpbnRlbF93 bV9tZXRob2QyKGNsb2NrLCBodG90YWwsIHdpZHRoLCBjcHAsIGxhdGVuY3kpOwo+ID4gKwo+ID4g KwkJd20gPSBtaW4oc21hbGwsIGxhcmdlKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwl3bSArPSBnNHhf dGxiX21pc3Nfd2EoZzR4X3BsYW5lX2ZpZm9fc2l6ZShwbGFuZS0+aWQsIGxldmVsKSwKPiA+ICsJ CQkgICAgICB3aWR0aCwgY3BwKTsKPiA+ICsKPiA+ICsJd20gPSBESVZfUk9VTkRfVVAod20sIDY0 KSArIDI7Cj4gPiArCj4gPiArCXJldHVybiBtaW5fdChpbnQsIHdtLCBVU0hSVF9NQVgpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCBnNHhfcmF3X3BsYW5lX3dtX3NldChzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJCQkJIGludCBsZXZlbCwgZW51bSBwbGFu ZV9pZCBwbGFuZV9pZCwgdTE2IHZhbHVlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT5iYXNlLmNydGMtPmRldik7Cj4g PiArCWJvb2wgZGlydHkgPSBmYWxzZTsKPiA+ICsKPiA+ICsJZm9yICg7IGxldmVsIDwgaW50ZWxf d21fbnVtX2xldmVscyhkZXZfcHJpdik7IGxldmVsKyspIHsKPiA+ICsJCXN0cnVjdCBnNHhfcGlw ZV93bSAqcmF3ID0gJmNydGNfc3RhdGUtPndtLmc0eC5yYXdbbGV2ZWxdOwo+ID4gKwo+ID4gKwkJ ZGlydHkgfD0gcmF3LT5wbGFuZVtwbGFuZV9pZF0gIT0gdmFsdWU7Cj4gPiArCQlyYXctPnBsYW5l W3BsYW5lX2lkXSA9IHZhbHVlOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBkaXJ0eTsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgZzR4X3Jhd19mYmNfd21fc2V0KHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCSAgICAgICBpbnQgbGV2ZWwsIHUxNiB2 YWx1ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjLT5kZXYpOwo+ID4gKwlib29sIGRpcnR5ID0gZmFs c2U7Cj4gPiArCj4gPiArCS8qIE5PUk1BTCBsZXZlbCBkb2Vzbid0IGhhdmUgYW4gRkJDIHdhdGVy bWFyayAqLwo+ID4gKwlsZXZlbCA9IG1heChsZXZlbCwgRzRYX1dNX0xFVkVMX1NSKTsKPiA+ICsK PiA+ICsJZm9yICg7IGxldmVsIDwgaW50ZWxfd21fbnVtX2xldmVscyhkZXZfcHJpdik7IGxldmVs KyspIHsKPiA+ICsJCXN0cnVjdCBnNHhfcGlwZV93bSAqcmF3ID0gJmNydGNfc3RhdGUtPndtLmc0 eC5yYXdbbGV2ZWxdOwo+ID4gKwo+ID4gKwkJZGlydHkgfD0gcmF3LT5mYmMgIT0gdmFsdWU7Cj4g PiArCQlyYXctPmZiYyA9IHZhbHVlOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBkaXJ0eTsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHVpbnQzMl90IGlsa19jb21wdXRlX2ZiY193bShjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gKwkJCQkgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBzdGF0ZSwKPiA+ICsJCQkJICAgdWludDMyX3QgcHJpX3Zh bCk7Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgZzR4X3Jhd19wbGFuZV93bV9jb21wdXRlKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCQkgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPmJhc2UucGxhbmUp Owo+ID4gKwlpbnQgbnVtX2xldmVscyA9IGludGVsX3dtX251bV9sZXZlbHModG9faTkxNShwbGFu ZS0+YmFzZS5kZXYpKTsKPiA+ICsJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsK PiA+ICsJYm9vbCBkaXJ0eSA9IGZhbHNlOwo+ID4gKwlpbnQgbGV2ZWw7Cj4gPiArCj4gPiArCWlm ICghaW50ZWxfd21fcGxhbmVfdmlzaWJsZShjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSkpIHsKPiA+ ICsJCWRpcnR5IHw9IGc0eF9yYXdfcGxhbmVfd21fc2V0KGNydGNfc3RhdGUsIDAsIHBsYW5lX2lk LCAwKTsKPiA+ICsJCWlmIChwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZKQo+ID4gKwkJCWRpcnR5 IHw9IGc0eF9yYXdfZmJjX3dtX3NldChjcnRjX3N0YXRlLCAwLCAwKTsKPiA+ICsJCWdvdG8gb3V0 Owo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IG51bV9sZXZlbHM7 IGxldmVsKyspIHsKPiA+ICsJCXN0cnVjdCBnNHhfcGlwZV93bSAqcmF3ID0gJmNydGNfc3RhdGUt PndtLmc0eC5yYXdbbGV2ZWxdOwo+ID4gKwkJaW50IHdtLCBtYXhfd207Cj4gPiArCj4gPiArCQl3 bSA9IGc0eF9jb21wdXRlX3dtKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBsZXZlbCk7Cj4gPiAr CQltYXhfd20gPSBnNHhfcGxhbmVfZmlmb19zaXplKHBsYW5lX2lkLCBsZXZlbCk7Cj4gPiArCj4g PiArCQlpZiAod20gPiBtYXhfd20pCj4gPiArCQkJYnJlYWs7Cj4gPiArCj4gPiArCQlkaXJ0eSB8 PSByYXctPnBsYW5lW3BsYW5lX2lkXSAhPSB3bTsKPiA+ICsJCXJhdy0+cGxhbmVbcGxhbmVfaWRd ID0gd207Cj4gPiArCj4gPiArCQlpZiAocGxhbmVfaWQgIT0gUExBTkVfUFJJTUFSWSB8fAo+ID4g KwkJICAgIGxldmVsID09IEc0WF9XTV9MRVZFTF9OT1JNQUwpCj4gPiArCQkJY29udGludWU7Cj4g PiArCj4gPiArCQl3bSA9IGlsa19jb21wdXRlX2ZiY193bShjcnRjX3N0YXRlLCBwbGFuZV9zdGF0 ZSwKPiA+ICsJCQkJCXJhdy0+cGxhbmVbcGxhbmVfaWRdKTsKPiA+ICsJCW1heF93bSA9IGc0eF9m YmNfZmlmb19zaXplKGxldmVsKTsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBGQkMgd20gaXMg bm90IG1hbmRhdG9yeSBhcyB3ZQo+ID4gKwkJICogY2FuIGFsd2F5cyBqdXN0IGRpc2FibGUgaXRz IHVzZS4KPiA+ICsJCSAqLwo+ID4gKwkJaWYgKHdtID4gbWF4X3dtKQo+ID4gKwkJCXdtID0gVVNI UlRfTUFYOwo+ID4gKwo+ID4gKwkJZGlydHkgfD0gcmF3LT5mYmMgIT0gd207Cj4gPiArCQlyYXct PmZiYyA9IHdtOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIG1hcmsgd2F0ZXJtYXJrcyBhcyBpbnZh bGlkICovCj4gPiArCWRpcnR5IHw9IGc0eF9yYXdfcGxhbmVfd21fc2V0KGNydGNfc3RhdGUsIGxl dmVsLCBwbGFuZV9pZCwgVVNIUlRfTUFYKTsKPiA+ICsKPiA+ICsJaWYgKHBsYW5lX2lkID09IFBM QU5FX1BSSU1BUlkpCj4gPiArCQlkaXJ0eSB8PSBnNHhfcmF3X2ZiY193bV9zZXQoY3J0Y19zdGF0 ZSwgbGV2ZWwsIFVTSFJUX01BWCk7Cj4gPiArCj4gPiArIG91dDoKPiA+ICsJaWYgKGRpcnR5KSB7 Cj4gPiArCQlEUk1fREVCVUdfS01TKCIlcyB3YXRlcm1hcmtzOiBub3JtYWw9JWQsIFNSPSVkLCBI UExMPSVkXG4iLAo+ID4gKwkJCSAgICAgIHBsYW5lLT5iYXNlLm5hbWUsCj4gPiArCQkJICAgICAg Y3J0Y19zdGF0ZS0+d20uZzR4LnJhd1tHNFhfV01fTEVWRUxfTk9STUFMXS5wbGFuZVtwbGFuZV9p ZF0sCj4gPiArCQkJICAgICAgY3J0Y19zdGF0ZS0+d20uZzR4LnJhd1tHNFhfV01fTEVWRUxfU1Jd LnBsYW5lW3BsYW5lX2lkXSwKPiA+ICsJCQkgICAgICBjcnRjX3N0YXRlLT53bS5nNHgucmF3W0c0 WF9XTV9MRVZFTF9IUExMXS5wbGFuZVtwbGFuZV9pZF0pOwo+ID4gKwo+ID4gKwkJaWYgKHBsYW5l X2lkID09IFBMQU5FX1BSSU1BUlkpCj4gPiArCQkJRFJNX0RFQlVHX0tNUygiRkJDIHdhdGVybWFy a3M6IFNSPSVkLCBIUExMPSVkXG4iLAo+ID4gKwkJCQkgICAgICBjcnRjX3N0YXRlLT53bS5nNHgu cmF3W0c0WF9XTV9MRVZFTF9TUl0uZmJjLAo+ID4gKwkJCQkgICAgICBjcnRjX3N0YXRlLT53bS5n NHgucmF3W0c0WF9XTV9MRVZFTF9IUExMXS5mYmMpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVy biBkaXJ0eTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgZzR4X3Jhd19wbGFuZV93bV9p c192YWxpZChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJ CQkJICAgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwgaW50IGxldmVsKQo+ID4gK3sKPiA+ICsJ Y29uc3Qgc3RydWN0IGc0eF9waXBlX3dtICpyYXcgPSAmY3J0Y19zdGF0ZS0+d20uZzR4LnJhd1ts ZXZlbF07Cj4gPiArCj4gPiArCXJldHVybiByYXctPnBsYW5lW3BsYW5lX2lkXSA8PSBnNHhfcGxh bmVfZmlmb19zaXplKHBsYW5lX2lkLCBsZXZlbCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBi b29sIGc0eF9yYXdfY3J0Y193bV9pc192YWxpZChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJCQkJICAgICBpbnQgbGV2ZWwpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPmJhc2Uu Y3J0Yy0+ZGV2KTsKPiA+ICsKPiA+ICsJaWYgKGxldmVsID4gZGV2X3ByaXYtPndtLm1heF9sZXZl bCkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJcmV0dXJuIGc0eF9yYXdfcGxhbmVf d21faXNfdmFsaWQoY3J0Y19zdGF0ZSwgUExBTkVfUFJJTUFSWSwgbGV2ZWwpICYmCj4gPiArCQln NHhfcmF3X3BsYW5lX3dtX2lzX3ZhbGlkKGNydGNfc3RhdGUsIFBMQU5FX1NQUklURTAsIGxldmVs KSAmJgo+ID4gKwkJZzR4X3Jhd19wbGFuZV93bV9pc192YWxpZChjcnRjX3N0YXRlLCBQTEFORV9D VVJTT1IsIGxldmVsKTsKPiA+ICt9Cj4gPiArCj4gPiArLyogbWFyayBhbGwgbGV2ZWxzIHN0YXJ0 aW5nIGZyb20gJ2xldmVsJyBhcyBpbnZhbGlkICovCj4gPiArc3RhdGljIHZvaWQgZzR4X2ludmFs aWRhdGVfd21zKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ID4gKwkJCSAgICAgICBzdHJ1Y3Qg ZzR4X3dtX3N0YXRlICp3bV9zdGF0ZSwgaW50IGxldmVsKQo+ID4gK3sKPiA+ICsJaWYgKGxldmVs IDw9IEc0WF9XTV9MRVZFTF9OT1JNQUwpIHsKPiA+ICsJCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQ7 Cj4gPiArCj4gPiArCQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKQo+ ID4gKwkJCXdtX3N0YXRlLT53bS5wbGFuZVtwbGFuZV9pZF0gPSBVU0hSVF9NQVg7Cj4gPiArCX0K PiA+ICsKPiA+ICsJaWYgKGxldmVsIDw9IEc0WF9XTV9MRVZFTF9TUikgewo+ID4gKwkJd21fc3Rh dGUtPmN4c3IgPSBmYWxzZTsKPiA+ICsJCXdtX3N0YXRlLT5zci5jdXJzb3IgPSBVU0hSVF9NQVg7 Cj4gPiArCQl3bV9zdGF0ZS0+c3IucGxhbmUgPSBVU0hSVF9NQVg7Cj4gPiArCQl3bV9zdGF0ZS0+ c3IuZmJjID0gVVNIUlRfTUFYOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChsZXZlbCA8PSBHNFhf V01fTEVWRUxfSFBMTCkgewo+ID4gKwkJd21fc3RhdGUtPmhwbGxfZW4gPSBmYWxzZTsKPiA+ICsJ CXdtX3N0YXRlLT5ocGxsLmN1cnNvciA9IFVTSFJUX01BWDsKPiA+ICsJCXdtX3N0YXRlLT5ocGxs LnBsYW5lID0gVVNIUlRfTUFYOwo+ID4gKwkJd21fc3RhdGUtPmhwbGwuZmJjID0gVVNIUlRfTUFY Owo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZzR4X2NvbXB1dGVfcGlwZV93 bShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVj dCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMp Owo+ID4gKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSA9Cj4gPiArCQl0b19pbnRl bF9hdG9taWNfc3RhdGUoY3J0Y19zdGF0ZS0+YmFzZS5zdGF0ZSk7Cj4gPiArCXN0cnVjdCBnNHhf d21fc3RhdGUgKndtX3N0YXRlID0gJmNydGNfc3RhdGUtPndtLmc0eC5vcHRpbWFsOwo+ID4gKwlp bnQgbnVtX2FjdGl2ZV9wbGFuZXMgPSBod2VpZ2h0MzIoY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5l cyAmCj4gPiArCQkJCQkgIH5CSVQoUExBTkVfQ1VSU09SKSk7Cj4gPiArCWNvbnN0IHN0cnVjdCBn NHhfcGlwZV93bSAqcmF3Owo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwo+ID4gKwllbnVtIHBsYW5lX2lk IHBsYW5lX2lkOwo+ID4gKwlpbnQgaSwgbGV2ZWw7Cj4gPiArCXVuc2lnbmVkIGludCBkaXJ0eSA9 IDA7Cj4gPiArCj4gPiArCWZvcl9lYWNoX2ludGVsX3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFu ZSwgcGxhbmVfc3RhdGUsIGkpIHsKPiA+ICsJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqb2xkX3BsYW5lX3N0YXRlID0KPiA+ICsJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+ YmFzZS5zdGF0ZSk7Cj4gPiArCj4gPiArCQlpZiAocGxhbmVfc3RhdGUtPmJhc2UuY3J0YyAhPSAm Y3J0Yy0+YmFzZSAmJgo+ID4gKwkJICAgIG9sZF9wbGFuZV9zdGF0ZS0+YmFzZS5jcnRjICE9ICZj cnRjLT5iYXNlKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJaWYgKGc0eF9yYXdfcGxh bmVfd21fY29tcHV0ZShjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSkpCj4gPiArCQkJZGlydHkgfD0g QklUKHBsYW5lLT5pZCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKCFkaXJ0eSkKPiA+ICsJCXJl dHVybiAwOwo+ID4gKwo+ID4gKwlsZXZlbCA9IEc0WF9XTV9MRVZFTF9OT1JNQUw7Cj4gPiArCWlm ICghZzR4X3Jhd19jcnRjX3dtX2lzX3ZhbGlkKGNydGNfc3RhdGUsIGxldmVsKSkKPiA+ICsJCWdv dG8gb3V0Owo+ID4gKwo+ID4gKwlyYXcgPSAmY3J0Y19zdGF0ZS0+d20uZzR4LnJhd1tsZXZlbF07 Cj4gPiArCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoY3J0YywgcGxhbmVfaWQpCj4gPiArCQl3 bV9zdGF0ZS0+d20ucGxhbmVbcGxhbmVfaWRdID0gcmF3LT5wbGFuZVtwbGFuZV9pZF07Cj4gPiAr Cj4gPiArCWxldmVsID0gRzRYX1dNX0xFVkVMX1NSOwo+ID4gKwo+ID4gKwlpZiAoIWc0eF9yYXdf Y3J0Y193bV9pc192YWxpZChjcnRjX3N0YXRlLCBsZXZlbCkpCj4gPiArCQlnb3RvIG91dDsKPiA+ ICsKPiA+ICsJcmF3ID0gJmNydGNfc3RhdGUtPndtLmc0eC5yYXdbbGV2ZWxdOwo+ID4gKwl3bV9z dGF0ZS0+c3IucGxhbmUgPSByYXctPnBsYW5lW1BMQU5FX1BSSU1BUlldOwo+ID4gKwl3bV9zdGF0 ZS0+c3IuY3Vyc29yID0gcmF3LT5wbGFuZVtQTEFORV9DVVJTT1JdOwo+ID4gKwl3bV9zdGF0ZS0+ c3IuZmJjID0gcmF3LT5mYmM7Cj4gPiArCj4gPiArCXdtX3N0YXRlLT5jeHNyID0gbnVtX2FjdGl2 ZV9wbGFuZXMgPT0gQklUKFBMQU5FX1BSSU1BUlkpOwo+ID4gKwo+ID4gKwlsZXZlbCA9IEc0WF9X TV9MRVZFTF9IUExMOwo+ID4gKwo+ID4gKwlpZiAoIWc0eF9yYXdfY3J0Y193bV9pc192YWxpZChj cnRjX3N0YXRlLCBsZXZlbCkpCj4gPiArCQlnb3RvIG91dDsKPiA+ICsKPiA+ICsJcmF3ID0gJmNy dGNfc3RhdGUtPndtLmc0eC5yYXdbbGV2ZWxdOwo+ID4gKwl3bV9zdGF0ZS0+aHBsbC5wbGFuZSA9 IHJhdy0+cGxhbmVbUExBTkVfUFJJTUFSWV07Cj4gPiArCXdtX3N0YXRlLT5ocGxsLmN1cnNvciA9 IHJhdy0+cGxhbmVbUExBTkVfQ1VSU09SXTsKPiA+ICsJd21fc3RhdGUtPmhwbGwuZmJjID0gcmF3 LT5mYmM7Cj4gPiArCj4gPiArCXdtX3N0YXRlLT5ocGxsX2VuID0gd21fc3RhdGUtPmN4c3I7Cj4g PiArCj4gPiArCWxldmVsKys7Cj4gPiArCj4gPiArIG91dDoKPiA+ICsJaWYgKGxldmVsID09IEc0 WF9XTV9MRVZFTF9OT1JNQUwpCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJLyog aW52YWxpZGF0ZSB0aGUgaGlnaGVyIGxldmVscyAqLwo+ID4gKwlnNHhfaW52YWxpZGF0ZV93bXMo Y3J0Yywgd21fc3RhdGUsIGxldmVsKTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogRGV0ZXJtaW5l IGlmIHRoZSBGQkMgd2F0ZXJtYXJrKHMpIGNhbiBiZSB1c2VkLiBJRgo+ID4gKwkgKiB0aGlzIGlz bid0IHRoZSBjYXNlIHdlIHByZWZlciB0byBkaXNhYmxlIHRoZSBGQkMKPiA+ICsJICggd2F0ZXJt YXJrKHMpIHJhdGhlciB0aGFuIGRpc2FibGUgdGhlIFNSL0hQTEwKPiA+ICsJICogbGV2ZWwocykg ZW50aXJlbHkuCj4gPiArCSAqLwo+ID4gKwl3bV9zdGF0ZS0+ZmJjX2VuID0gbGV2ZWwgPiBHNFhf V01fTEVWRUxfTk9STUFMOwo+ID4gKwo+ID4gKwlpZiAobGV2ZWwgPj0gRzRYX1dNX0xFVkVMX1NS ICYmCj4gPiArCSAgICB3bV9zdGF0ZS0+c3IuZmJjID4gZzR4X2ZiY19maWZvX3NpemUoRzRYX1dN X0xFVkVMX1NSKSkKPiA+ICsJCXdtX3N0YXRlLT5mYmNfZW4gPSBmYWxzZTsKPiA+ICsJZWxzZSBp ZiAobGV2ZWwgPj0gRzRYX1dNX0xFVkVMX0hQTEwgJiYKPiA+ICsJCSB3bV9zdGF0ZS0+aHBsbC5m YmMgPiBnNHhfZmJjX2ZpZm9fc2l6ZShHNFhfV01fTEVWRUxfSFBMTCkpCj4gPiArCQl3bV9zdGF0 ZS0+ZmJjX2VuID0gZmFsc2U7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IGc0eF9jb21wdXRlX2ludGVybWVkaWF0ZV93bShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ID4gKwkJCQkgICAgICAgc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiArCQkJ CSAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBnNHhfd21fc3RhdGUgKmludGVybWVkaWF0ZSA9ICZjcnRjX3N0YXRlLT53bS5nNHgu aW50ZXJtZWRpYXRlOwo+ID4gKwljb25zdCBzdHJ1Y3QgZzR4X3dtX3N0YXRlICpvcHRpbWFsID0g JmNydGNfc3RhdGUtPndtLmc0eC5vcHRpbWFsOwo+ID4gKwljb25zdCBzdHJ1Y3QgZzR4X3dtX3N0 YXRlICphY3RpdmUgPSAmY3J0Yy0+d20uYWN0aXZlLmc0eDsKPiA+ICsJZW51bSBwbGFuZV9pZCBw bGFuZV9pZDsKPiAKPiBJIHdvdWxkIGFkZCBhIHByb3Zpc2lvbiBmb3IgbW9kZXNldCwgbm8gbmVl ZCB0byBjYWxjdWxhdGUgaW50ZXJtZWRpYXRlIHdhdGVybWFya3Mgd2l0aCB0aGUgcGlwZSBlbmFi bGVkLCBzb21ldGhpbmcgbGlrZSB0aGlzPwo+IAo+IAlpZiAoIW5ld3N0YXRlLT5iYXNlLmFjdGl2 ZSB8fCBkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldCgmbmV3c3RhdGUtPmJhc2UpKSB7Cj4g CQkqaW50ZXJtZWRpYXRlID0gKm9wdGltYWw7Cj4gCQlyZXR1cm4gMDsKPiAJfQo+IAo+IFRoZSBh Y3RpdmUgd2F0ZXJtYXJrcyBhcmUgd3JvbmdseSBhc3NpZ25lZCBoZXJlLCBpZiB0aGVyZSdzIGEg cGVuZGluZyB1cGRhdGUgaXQgY291bGQgcG9pbnQgdG8gb2xkIG9sZCBvcHRpbWFsIHN0YXRlLCBv ciBvbGQgaW50ZXJtZWRpYXRlIHN0YXRlLCBpdCBzaG91bGQgYmUgc29tZXRoaW5nIGxpa2UgdGhp czoKPiBvbGRfY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X29sZF9jcnRjX3N0YXRlKGNydGNf c3RhdGUtPmJhc2Uuc3RhdGUsICZjcnRjLT5iYXNlKTsKPiBhY3RpdmUgPSAmdG9faW50ZWxfY3J0 Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSktPndtLmc0eC5vcHRpbWFsCj4gCj4gSSBrbm93LCB2bHYg ZG9lcyB0aGlzIHdyb25nIHRvbywgc2hvdWxkIGJlIGZpeGVkIGFzIHdlbGwuLgo+IFdpdGggdGhh dCBmaXhlZCBhbGwgcGF0Y2hlcyBsb29rIGdvb2QgdG8gbWUsIHNvIGZlZWwgZnJlZSB0byBwdXQg dGhpcyBvbiB0aGVtOgo+IAo+IFJldmlld2VkLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRl bi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgoKSSB0b29rIGEgbGliZXJhbCBpbnRlcnByZXRh dGlvbiBvZiB5b3VyIHItYiBhbmQgc2xhcHBlZCBpdCBvbnRvIHRoZQpvcmlnaW5hbCBwYXRjaCBz aW5jZSB0aGF0IHdhcyByZWFzb25hYmx5IHdlbGwgdGVzdGVkIGF0IGxlYXN0LiBBbmQKSSBwdXNo ZWQgdGhlIGxvdCB0byBkaW5xLiBUaGFua3MgZm9yIHRoZSByZXZpZXcuCgpJJ2xsIHBvc3QgYSBm b2xsb3d1cCB3aXRoIHRoZSBvbGQgb3B0aW1hbCB2cy4gYWN0aXZlIHRoaW5nIG5vdy4KCgo+IAo+ ID4gKwlpbnRlcm1lZGlhdGUtPmN4c3IgPSBvcHRpbWFsLT5jeHNyICYmIGFjdGl2ZS0+Y3hzciAm Jgo+ID4gKwkJIWNydGNfc3RhdGUtPmRpc2FibGVfY3hzcjsKPiA+ICsJaW50ZXJtZWRpYXRlLT5o cGxsX2VuID0gb3B0aW1hbC0+aHBsbF9lbiAmJiBhY3RpdmUtPmhwbGxfZW4gJiYKPiA+ICsJCSFj cnRjX3N0YXRlLT5kaXNhYmxlX2N4c3I7Cj4gPiArCWludGVybWVkaWF0ZS0+ZmJjX2VuID0gb3B0 aW1hbC0+ZmJjX2VuICYmIGFjdGl2ZS0+ZmJjX2VuOwo+ID4gKwo+ID4gKwlmb3JfZWFjaF9wbGFu ZV9pZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKSB7Cj4gPiArCQlpbnRlcm1lZGlhdGUtPndtLnBs YW5lW3BsYW5lX2lkXSA9Cj4gPiArCQkJbWF4KG9wdGltYWwtPndtLnBsYW5lW3BsYW5lX2lkXSwK PiA+ICsJCQkgICAgYWN0aXZlLT53bS5wbGFuZVtwbGFuZV9pZF0pOwo+ID4gKwo+ID4gKwkJV0FS Tl9PTihpbnRlcm1lZGlhdGUtPndtLnBsYW5lW3BsYW5lX2lkXSA+Cj4gPiArCQkJZzR4X3BsYW5l X2ZpZm9fc2l6ZShwbGFuZV9pZCwgRzRYX1dNX0xFVkVMX05PUk1BTCkpOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCWludGVybWVkaWF0ZS0+c3IucGxhbmUgPSBtYXgob3B0aW1hbC0+c3IucGxhbmUsCj4g PiArCQkJCSAgICAgYWN0aXZlLT5zci5wbGFuZSk7Cj4gPiArCWludGVybWVkaWF0ZS0+c3IuY3Vy c29yID0gbWF4KG9wdGltYWwtPnNyLmN1cnNvciwKPiA+ICsJCQkJICAgICAgYWN0aXZlLT5zci5j dXJzb3IpOwo+ID4gKwlpbnRlcm1lZGlhdGUtPnNyLmZiYyA9IG1heChvcHRpbWFsLT5zci5mYmMs Cj4gPiArCQkJCSAgIGFjdGl2ZS0+c3IuZmJjKTsKPiA+ICsKPiA+ICsJaW50ZXJtZWRpYXRlLT5o cGxsLnBsYW5lID0gbWF4KG9wdGltYWwtPmhwbGwucGxhbmUsCj4gPiArCQkJCSAgICAgICBhY3Rp dmUtPmhwbGwucGxhbmUpOwo+ID4gKwlpbnRlcm1lZGlhdGUtPmhwbGwuY3Vyc29yID0gbWF4KG9w dGltYWwtPmhwbGwuY3Vyc29yLAo+ID4gKwkJCQkJYWN0aXZlLT5ocGxsLmN1cnNvcik7Cj4gPiAr CWludGVybWVkaWF0ZS0+aHBsbC5mYmMgPSBtYXgob3B0aW1hbC0+aHBsbC5mYmMsCj4gPiArCQkJ CSAgICAgYWN0aXZlLT5ocGxsLmZiYyk7Cj4gPiArCj4gPiArCVdBUk5fT04oKGludGVybWVkaWF0 ZS0+c3IucGxhbmUgPgo+ID4gKwkJIGc0eF9wbGFuZV9maWZvX3NpemUoUExBTkVfUFJJTUFSWSwg RzRYX1dNX0xFVkVMX1NSKSB8fAo+ID4gKwkJIGludGVybWVkaWF0ZS0+c3IuY3Vyc29yID4KPiA+ ICsJCSBnNHhfcGxhbmVfZmlmb19zaXplKFBMQU5FX0NVUlNPUiwgRzRYX1dNX0xFVkVMX1NSKSkg JiYKPiA+ICsJCWludGVybWVkaWF0ZS0+Y3hzcik7Cj4gPiArCVdBUk5fT04oKGludGVybWVkaWF0 ZS0+c3IucGxhbmUgPgo+ID4gKwkJIGc0eF9wbGFuZV9maWZvX3NpemUoUExBTkVfUFJJTUFSWSwg RzRYX1dNX0xFVkVMX0hQTEwpIHx8Cj4gPiArCQkgaW50ZXJtZWRpYXRlLT5zci5jdXJzb3IgPgo+ ID4gKwkJIGc0eF9wbGFuZV9maWZvX3NpemUoUExBTkVfQ1VSU09SLCBHNFhfV01fTEVWRUxfSFBM TCkpICYmCj4gPiArCQlpbnRlcm1lZGlhdGUtPmhwbGxfZW4pOwo+ID4gKwo+ID4gKwlXQVJOX09O KGludGVybWVkaWF0ZS0+c3IuZmJjID4gZzR4X2ZiY19maWZvX3NpemUoMSkgJiYKPiA+ICsJCWlu dGVybWVkaWF0ZS0+ZmJjX2VuICYmIGludGVybWVkaWF0ZS0+Y3hzcik7Cj4gPiArCVdBUk5fT04o aW50ZXJtZWRpYXRlLT5ocGxsLmZiYyA+IGc0eF9mYmNfZmlmb19zaXplKDIpICYmCj4gPiArCQlp bnRlcm1lZGlhdGUtPmZiY19lbiAmJiBpbnRlcm1lZGlhdGUtPmhwbGxfZW4pOwo+ID4gKwo+ID4g KwkvKgo+ID4gKwkgKiBJZiBvdXIgaW50ZXJtZWRpYXRlIFdNIGFyZSBpZGVudGljYWwgdG8gdGhl IGZpbmFsIFdNLCB0aGVuIHdlIGNhbgo+ID4gKwkgKiBvbWl0IHRoZSBwb3N0LXZibGFuayBwcm9n cmFtbWluZzsgb25seSB1cGRhdGUgaWYgaXQncyBkaWZmZXJlbnQuCj4gPiArCSAqLwo+ID4gKwlp ZiAobWVtY21wKGludGVybWVkaWF0ZSwgb3B0aW1hbCwgc2l6ZW9mKCppbnRlcm1lZGlhdGUpKSAh PSAwKQo+ID4gKwkJY3J0Y19zdGF0ZS0+d20ubmVlZF9wb3N0dmJsX3VwZGF0ZSA9IHRydWU7Cj4g PiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBnNHhfbWVy Z2Vfd20oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCSBzdHJ1Y3Qg ZzR4X3dtX3ZhbHVlcyAqd20pCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsK PiA+ICsJaW50IG51bV9hY3RpdmVfY3J0Y3MgPSAwOwo+ID4gKwo+ID4gKwl3bS0+Y3hzciA9IHRy dWU7Cj4gPiArCXdtLT5ocGxsX2VuID0gdHJ1ZTsKPiA+ICsJd20tPmZiY19lbiA9IHRydWU7Cj4g PiArCj4gPiArCWZvcl9lYWNoX2ludGVsX2NydGMoJmRldl9wcml2LT5kcm0sIGNydGMpIHsKPiA+ ICsJCWNvbnN0IHN0cnVjdCBnNHhfd21fc3RhdGUgKndtX3N0YXRlID0gJmNydGMtPndtLmFjdGl2 ZS5nNHg7Cj4gPiArCj4gPiArCQlpZiAoIWNydGMtPmFjdGl2ZSkKPiA+ICsJCQljb250aW51ZTsK PiA+ICsKPiA+ICsJCWlmICghd21fc3RhdGUtPmN4c3IpCj4gPiArCQkJd20tPmN4c3IgPSBmYWxz ZTsKPiA+ICsJCWlmICghd21fc3RhdGUtPmhwbGxfZW4pCj4gPiArCQkJd20tPmhwbGxfZW4gPSBm YWxzZTsKPiA+ICsJCWlmICghd21fc3RhdGUtPmZiY19lbikKPiA+ICsJCQl3bS0+ZmJjX2VuID0g ZmFsc2U7Cj4gPiArCj4gPiArCQludW1fYWN0aXZlX2NydGNzKys7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJaWYgKG51bV9hY3RpdmVfY3J0Y3MgIT0gMSkgewo+ID4gKwkJd20tPmN4c3IgPSBmYWxzZTsK PiA+ICsJCXdtLT5ocGxsX2VuID0gZmFsc2U7Cj4gPiArCQl3bS0+ZmJjX2VuID0gZmFsc2U7Cj4g PiArCX0KPiA+ICsKPiA+ICsJZm9yX2VhY2hfaW50ZWxfY3J0YygmZGV2X3ByaXYtPmRybSwgY3J0 Yykgewo+ID4gKwkJY29uc3Qgc3RydWN0IGc0eF93bV9zdGF0ZSAqd21fc3RhdGUgPSAmY3J0Yy0+ d20uYWN0aXZlLmc0eDsKPiA+ICsJCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKPiA+ICsK PiA+ICsJCXdtLT5waXBlW3BpcGVdID0gd21fc3RhdGUtPndtOwo+ID4gKwkJaWYgKGNydGMtPmFj dGl2ZSAmJiB3bS0+Y3hzcikKPiA+ICsJCQl3bS0+c3IgPSB3bV9zdGF0ZS0+c3I7Cj4gPiArCQlp ZiAoY3J0Yy0+YWN0aXZlICYmIHdtLT5ocGxsX2VuKQo+ID4gKwkJCXdtLT5ocGxsID0gd21fc3Rh dGUtPmhwbGw7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZzR4X3Byb2dy YW1fd2F0ZXJtYXJrcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiArewo+ ID4gKwlzdHJ1Y3QgZzR4X3dtX3ZhbHVlcyAqb2xkX3dtID0gJmRldl9wcml2LT53bS5nNHg7Cj4g PiArCXN0cnVjdCBnNHhfd21fdmFsdWVzIG5ld193bSA9IHt9Owo+ID4gKwo+ID4gKwlnNHhfbWVy Z2Vfd20oZGV2X3ByaXYsICZuZXdfd20pOwo+ID4gKwo+ID4gKwlpZiAobWVtY21wKG9sZF93bSwg Jm5ld193bSwgc2l6ZW9mKG5ld193bSkpID09IDApCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiAr CWlmIChpc19kaXNhYmxpbmcob2xkX3dtLT5jeHNyLCBuZXdfd20uY3hzciwgdHJ1ZSkpCj4gPiAr CQlfaW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCBmYWxzZSk7Cj4gPiArCj4gPiArCWc0 eF93cml0ZV93bV92YWx1ZXMoZGV2X3ByaXYsICZuZXdfd20pOwo+ID4gKwo+ID4gKwlpZiAoaXNf ZW5hYmxpbmcob2xkX3dtLT5jeHNyLCBuZXdfd20uY3hzciwgdHJ1ZSkpCj4gPiArCQlfaW50ZWxf c2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCB0cnVlKTsKPiA+ICsKPiA+ICsJKm9sZF93bSA9IG5l d193bTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZzR4X2luaXRpYWxfd2F0ZXJtYXJr cyhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICsJCQkJICAgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPmJhc2UuY3J0Yy0+ZGV2KTsK PiA+ICsJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUt PmJhc2UuY3J0Yyk7Cj4gPiArCj4gPiArCW11dGV4X2xvY2soJmRldl9wcml2LT53bS53bV9tdXRl eCk7Cj4gPiArCWNydGMtPndtLmFjdGl2ZS5nNHggPSBjcnRjX3N0YXRlLT53bS5nNHguaW50ZXJt ZWRpYXRlOwo+ID4gKwlnNHhfcHJvZ3JhbV93YXRlcm1hcmtzKGRldl9wcml2KTsKPiA+ICsJbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+d20ud21fbXV0ZXgpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZCBnNHhfb3B0aW1pemVfd2F0ZXJtYXJrcyhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRl ICpzdGF0ZSwKPiA+ICsJCQkJICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShjcnRjX3N0YXRlLT5iYXNlLmNydGMtPmRldik7Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ID4gKwo+ ID4gKwlpZiAoIWNydGNfc3RhdGUtPndtLm5lZWRfcG9zdHZibF91cGRhdGUpCj4gPiArCQlyZXR1 cm47Cj4gPiArCj4gPiArCW11dGV4X2xvY2soJmRldl9wcml2LT53bS53bV9tdXRleCk7Cj4gPiAr CWludGVsX2NydGMtPndtLmFjdGl2ZS5nNHggPSBjcnRjX3N0YXRlLT53bS5nNHgub3B0aW1hbDsK PiA+ICsJZzR4X3Byb2dyYW1fd2F0ZXJtYXJrcyhkZXZfcHJpdik7Cj4gPiArCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPndtLndtX211dGV4KTsKPiA+ICt9Cj4gPiArCj4gPiAgLyogbGF0ZW5jeSBt dXN0IGJlIGluIDAuMXVzIHVuaXRzLiAqLwo+ID4gIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmx2X3dt X21ldGhvZDIodW5zaWduZWQgaW50IHBpeGVsX3JhdGUsCj4gPiAgCQkJCSAgIHVuc2lnbmVkIGlu dCBodG90YWwsCj4gPiBAQCAtMTY3MywxNiArMjA3OSw2IEBAIHN0YXRpYyB2b2lkIHZsdl9tZXJn ZV93bShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCX0KPiA+ICB9Cj4g PiAgCj4gPiAtc3RhdGljIGJvb2wgaXNfZGlzYWJsaW5nKGludCBvbGQsIGludCBuZXcsIGludCB0 aHJlc2hvbGQpCj4gPiAtewo+ID4gLQlyZXR1cm4gb2xkID49IHRocmVzaG9sZCAmJiBuZXcgPCB0 aHJlc2hvbGQ7Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyBib29sIGlzX2VuYWJsaW5nKGludCBv bGQsIGludCBuZXcsIGludCB0aHJlc2hvbGQpCj4gPiAtewo+ID4gLQlyZXR1cm4gb2xkIDwgdGhy ZXNob2xkICYmIG5ldyA+PSB0aHJlc2hvbGQ7Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyB2b2lk IHZsdl9wcm9ncmFtX3dhdGVybWFya3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ID4gIHsKPiA+ICAJc3RydWN0IHZsdl93bV92YWx1ZXMgKm9sZF93bSA9ICZkZXZfcHJpdi0+ d20udmx2Owo+ID4gQEAgLTE3NDMsNjUgKzIxMzksNiBAQCBzdGF0aWMgdm9pZCB2bHZfb3B0aW1p emVfd2F0ZXJtYXJrcyhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICAJbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+d20ud21fbXV0ZXgpOwo+ID4gIH0KPiA+ICAKPiA+IC0jZGVm aW5lIHNpbmdsZV9wbGFuZV9lbmFibGVkKG1hc2spIGlzX3Bvd2VyX29mXzIobWFzaykKPiA+IC0K PiA+IC1zdGF0aWMgdm9pZCBnNHhfdXBkYXRlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+ ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShj cnRjLT5iYXNlLmRldik7Cj4gPiAtCXN0YXRpYyBjb25zdCBpbnQgc3JfbGF0ZW5jeV9ucyA9IDEy MDAwOwo+ID4gLQlpbnQgcGxhbmVhX3dtLCBwbGFuZWJfd20sIGN1cnNvcmFfd20sIGN1cnNvcmJf d207Cj4gPiAtCWludCBwbGFuZV9zciwgY3Vyc29yX3NyOwo+ID4gLQl1bnNpZ25lZCBpbnQgZW5h YmxlZCA9IDA7Cj4gPiAtCWJvb2wgY3hzcl9lbmFibGVkOwo+ID4gLQo+ID4gLQlpZiAoZzR4X2Nv bXB1dGVfd20wKGRldl9wcml2LCBQSVBFX0EsCj4gPiAtCQkJICAgICZnNHhfd21faW5mbywgcGVz c2ltYWxfbGF0ZW5jeV9ucywKPiA+IC0JCQkgICAgJmc0eF9jdXJzb3Jfd21faW5mbywgcGVzc2lt YWxfbGF0ZW5jeV9ucywKPiA+IC0JCQkgICAgJnBsYW5lYV93bSwgJmN1cnNvcmFfd20pKQo+ID4g LQkJZW5hYmxlZCB8PSAxIDw8IFBJUEVfQTsKPiA+IC0KPiA+IC0JaWYgKGc0eF9jb21wdXRlX3dt MChkZXZfcHJpdiwgUElQRV9CLAo+ID4gLQkJCSAgICAmZzR4X3dtX2luZm8sIHBlc3NpbWFsX2xh dGVuY3lfbnMsCj4gPiAtCQkJICAgICZnNHhfY3Vyc29yX3dtX2luZm8sIHBlc3NpbWFsX2xhdGVu Y3lfbnMsCj4gPiAtCQkJICAgICZwbGFuZWJfd20sICZjdXJzb3JiX3dtKSkKPiA+IC0JCWVuYWJs ZWQgfD0gMSA8PCBQSVBFX0I7Cj4gPiAtCj4gPiAtCWlmIChzaW5nbGVfcGxhbmVfZW5hYmxlZChl bmFibGVkKSAmJgo+ID4gLQkgICAgZzR4X2NvbXB1dGVfc3J3bShkZXZfcHJpdiwgZmZzKGVuYWJs ZWQpIC0gMSwKPiA+IC0JCQkgICAgIHNyX2xhdGVuY3lfbnMsCj4gPiAtCQkJICAgICAmZzR4X3dt X2luZm8sCj4gPiAtCQkJICAgICAmZzR4X2N1cnNvcl93bV9pbmZvLAo+ID4gLQkJCSAgICAgJnBs YW5lX3NyLCAmY3Vyc29yX3NyKSkgewo+ID4gLQkJY3hzcl9lbmFibGVkID0gdHJ1ZTsKPiA+IC0J fSBlbHNlIHsKPiA+IC0JCWN4c3JfZW5hYmxlZCA9IGZhbHNlOwo+ID4gLQkJaW50ZWxfc2V0X21l bW9yeV9jeHNyKGRldl9wcml2LCBmYWxzZSk7Cj4gPiAtCQlwbGFuZV9zciA9IGN1cnNvcl9zciA9 IDA7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JRFJNX0RFQlVHX0tNUygiU2V0dGluZyBGSUZPIHdhdGVy bWFya3MgLSBBOiBwbGFuZT0lZCwgY3Vyc29yPSVkLCAiCj4gPiAtCQkgICAgICAiQjogcGxhbmU9 JWQsIGN1cnNvcj0lZCwgU1I6IHBsYW5lPSVkLCBjdXJzb3I9JWRcbiIsCj4gPiAtCQkgICAgICBw bGFuZWFfd20sIGN1cnNvcmFfd20sCj4gPiAtCQkgICAgICBwbGFuZWJfd20sIGN1cnNvcmJfd20s Cj4gPiAtCQkgICAgICBwbGFuZV9zciwgY3Vyc29yX3NyKTsKPiA+IC0KPiA+IC0JSTkxNV9XUklU RShEU1BGVzEsCj4gPiAtCQkgICBGV19XTShwbGFuZV9zciwgU1IpIHwKPiA+IC0JCSAgIEZXX1dN KGN1cnNvcmJfd20sIENVUlNPUkIpIHwKPiA+IC0JCSAgIEZXX1dNKHBsYW5lYl93bSwgUExBTkVC KSB8Cj4gPiAtCQkgICBGV19XTShwbGFuZWFfd20sIFBMQU5FQSkpOwo+ID4gLQlJOTE1X1dSSVRF KERTUEZXMiwKPiA+IC0JCSAgIChJOTE1X1JFQUQoRFNQRlcyKSAmIH5EU1BGV19DVVJTT1JBX01B U0spIHwKPiA+IC0JCSAgIEZXX1dNKGN1cnNvcmFfd20sIENVUlNPUkEpKTsKPiA+IC0JLyogSFBM TCBvZmYgaW4gU1IgaGFzIHNvbWUgaXNzdWVzIG9uIEc0eC4uLiBkaXNhYmxlIGl0ICovCj4gPiAt CUk5MTVfV1JJVEUoRFNQRlczLAo+ID4gLQkJICAgKEk5MTVfUkVBRChEU1BGVzMpICYgfihEU1BG V19IUExMX1NSX0VOIHwgRFNQRldfQ1VSU09SX1NSX01BU0spKSB8Cj4gPiAtCQkgICBGV19XTShj dXJzb3Jfc3IsIENVUlNPUl9TUikpOwo+ID4gLQo+ID4gLQlpZiAoY3hzcl9lbmFibGVkKQo+ID4g LQkJaW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCB0cnVlKTsKPiA+IC19Cj4gPiAtCj4g PiAgc3RhdGljIHZvaWQgaTk2NV91cGRhdGVfd20oc3RydWN0IGludGVsX2NydGMgKnVudXNlZF9j cnRjKQo+ID4gIHsKPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNSh1bnVzZWRfY3J0Yy0+YmFzZS5kZXYpOwo+ID4gQEAgLTQ3NzgsNiArNTExNSwzMiBAQCBz dGF0aWMgdm9pZCBpbGtfcGlwZV93bV9nZXRfaHdfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ID4gICNkZWZpbmUgX0ZXX1dNX1ZMVih2YWx1ZSwgcGxhbmUpIFwKPiA+ICAJKCgodmFsdWUp ICYgRFNQRldfICMjIHBsYW5lICMjIF9NQVNLX1ZMVikgPj4gRFNQRldfICMjIHBsYW5lICMjIF9T SElGVCkKPiA+ICAKPiA+ICtzdGF0aWMgdm9pZCBnNHhfcmVhZF93bV92YWx1ZXMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgZzR4X3dtX3Zh bHVlcyAqd20pCj4gPiArewo+ID4gKwl1aW50MzJfdCB0bXA7Cj4gPiArCj4gPiArCXRtcCA9IEk5 MTVfUkVBRChEU1BGVzEpOwo+ID4gKwl3bS0+c3IucGxhbmUgPSBfRldfV00odG1wLCBTUik7Cj4g PiArCXdtLT5waXBlW1BJUEVfQl0ucGxhbmVbUExBTkVfQ1VSU09SXSA9IF9GV19XTSh0bXAsIENV UlNPUkIpOwo+ID4gKwl3bS0+cGlwZVtQSVBFX0JdLnBsYW5lW1BMQU5FX1BSSU1BUlldID0gX0ZX X1dNKHRtcCwgUExBTkVCKTsKPiA+ICsJd20tPnBpcGVbUElQRV9BXS5wbGFuZVtQTEFORV9QUklN QVJZXSA9IF9GV19XTSh0bXAsIFBMQU5FQSk7Cj4gPiArCj4gPiArCXRtcCA9IEk5MTVfUkVBRChE U1BGVzIpOwo+ID4gKwl3bS0+ZmJjX2VuID0gdG1wICYgRFNQRldfRkJDX1NSX0VOOwo+ID4gKwl3 bS0+c3IuZmJjID0gX0ZXX1dNKHRtcCwgRkJDX1NSKTsKPiA+ICsJd20tPmhwbGwuZmJjID0gX0ZX X1dNKHRtcCwgRkJDX0hQTExfU1IpOwo+ID4gKwl3bS0+cGlwZVtQSVBFX0JdLnBsYW5lW1BMQU5F X1NQUklURTBdID0gX0ZXX1dNKHRtcCwgU1BSSVRFQik7Cj4gPiArCXdtLT5waXBlW1BJUEVfQV0u cGxhbmVbUExBTkVfQ1VSU09SXSA9IF9GV19XTSh0bXAsIENVUlNPUkEpOwo+ID4gKwl3bS0+cGlw ZVtQSVBFX0FdLnBsYW5lW1BMQU5FX1NQUklURTBdID0gX0ZXX1dNKHRtcCwgU1BSSVRFQSk7Cj4g PiArCj4gPiArCXRtcCA9IEk5MTVfUkVBRChEU1BGVzMpOwo+ID4gKwl3bS0+aHBsbF9lbiA9IHRt cCAmIERTUEZXX0hQTExfU1JfRU47Cj4gPiArCXdtLT5zci5jdXJzb3IgPSBfRldfV00odG1wLCBD VVJTT1JfU1IpOwo+ID4gKwl3bS0+aHBsbC5jdXJzb3IgPSBfRldfV00odG1wLCBIUExMX0NVUlNP Uik7Cj4gPiArCXdtLT5ocGxsLnBsYW5lID0gX0ZXX1dNKHRtcCwgSFBMTF9TUik7Cj4gPiArfQo+ ID4gKwo+ID4gIHN0YXRpYyB2b2lkIHZsdl9yZWFkX3dtX3ZhbHVlcyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCQkJICAgICAgIHN0cnVjdCB2bHZfd21fdmFsdWVzICp3 bSkKPiA+ICB7Cj4gPiBAQCAtNDg1NCw2ICs1MjE3LDE0NyBAQCBzdGF0aWMgdm9pZCB2bHZfcmVh ZF93bV92YWx1ZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gICN1bmRl ZiBfRldfV00KPiA+ICAjdW5kZWYgX0ZXX1dNX1ZMVgo+ID4gIAo+ID4gK3ZvaWQgZzR4X3dtX2dl dF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4gKwlzdHJ1Y3QgZzR4 X3dtX3ZhbHVlcyAqd20gPSAmZGV2X3ByaXYtPndtLmc0eDsKPiA+ICsJc3RydWN0IGludGVsX2Ny dGMgKmNydGM7Cj4gPiArCj4gPiArCWc0eF9yZWFkX3dtX3ZhbHVlcyhkZXZfcHJpdiwgd20pOwo+ ID4gKwo+ID4gKwl3bS0+Y3hzciA9IEk5MTVfUkVBRChGV19CTENfU0VMRikgJiBGV19CTENfU0VM Rl9FTjsKPiA+ICsKPiA+ICsJZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpIHsKPiA+ICsJ CXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0KPiA+ICsJCQl0b19pbnRlbF9j cnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwo+ID4gKwkJc3RydWN0IGc0eF93bV9zdGF0ZSAq YWN0aXZlID0gJmNydGMtPndtLmFjdGl2ZS5nNHg7Cj4gPiArCQlzdHJ1Y3QgZzR4X3BpcGVfd20g KnJhdzsKPiA+ICsJCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKPiA+ICsJCWVudW0gcGxh bmVfaWQgcGxhbmVfaWQ7Cj4gPiArCQlpbnQgbGV2ZWwsIG1heF9sZXZlbDsKPiA+ICsKPiA+ICsJ CWFjdGl2ZS0+Y3hzciA9IHdtLT5jeHNyOwo+ID4gKwkJYWN0aXZlLT5ocGxsX2VuID0gd20tPmhw bGxfZW47Cj4gPiArCQlhY3RpdmUtPmZiY19lbiA9IHdtLT5mYmNfZW47Cj4gPiArCj4gPiArCQlh Y3RpdmUtPnNyID0gd20tPnNyOwo+ID4gKwkJYWN0aXZlLT5ocGxsID0gd20tPmhwbGw7Cj4gPiAr Cj4gPiArCQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKSB7Cj4gPiAr CQkJYWN0aXZlLT53bS5wbGFuZVtwbGFuZV9pZF0gPQo+ID4gKwkJCQl3bS0+cGlwZVtwaXBlXS5w bGFuZVtwbGFuZV9pZF07Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZiAod20tPmN4c3IgJiYgd20t PmhwbGxfZW4pCj4gPiArCQkJbWF4X2xldmVsID0gRzRYX1dNX0xFVkVMX0hQTEw7Cj4gPiArCQll bHNlIGlmICh3bS0+Y3hzcikKPiA+ICsJCQltYXhfbGV2ZWwgPSBHNFhfV01fTEVWRUxfU1I7Cj4g PiArCQllbHNlCj4gPiArCQkJbWF4X2xldmVsID0gRzRYX1dNX0xFVkVMX05PUk1BTDsKPiA+ICsK PiA+ICsJCWxldmVsID0gRzRYX1dNX0xFVkVMX05PUk1BTDsKPiA+ICsJCXJhdyA9ICZjcnRjX3N0 YXRlLT53bS5nNHgucmF3W2xldmVsXTsKPiA+ICsJCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMo Y3J0YywgcGxhbmVfaWQpCj4gPiArCQkJcmF3LT5wbGFuZVtwbGFuZV9pZF0gPSBhY3RpdmUtPndt LnBsYW5lW3BsYW5lX2lkXTsKPiA+ICsKPiA+ICsJCWlmICgrK2xldmVsID4gbWF4X2xldmVsKQo+ ID4gKwkJCWdvdG8gb3V0Owo+ID4gKwo+ID4gKwkJcmF3ID0gJmNydGNfc3RhdGUtPndtLmc0eC5y YXdbbGV2ZWxdOwo+ID4gKwkJcmF3LT5wbGFuZVtQTEFORV9QUklNQVJZXSA9IGFjdGl2ZS0+c3Iu cGxhbmU7Cj4gPiArCQlyYXctPnBsYW5lW1BMQU5FX0NVUlNPUl0gPSBhY3RpdmUtPnNyLmN1cnNv cjsKPiA+ICsJCXJhdy0+cGxhbmVbUExBTkVfU1BSSVRFMF0gPSAwOwo+ID4gKwkJcmF3LT5mYmMg PSBhY3RpdmUtPnNyLmZiYzsKPiA+ICsKPiA+ICsJCWlmICgrK2xldmVsID4gbWF4X2xldmVsKQo+ ID4gKwkJCWdvdG8gb3V0Owo+ID4gKwo+ID4gKwkJcmF3ID0gJmNydGNfc3RhdGUtPndtLmc0eC5y YXdbbGV2ZWxdOwo+ID4gKwkJcmF3LT5wbGFuZVtQTEFORV9QUklNQVJZXSA9IGFjdGl2ZS0+aHBs bC5wbGFuZTsKPiA+ICsJCXJhdy0+cGxhbmVbUExBTkVfQ1VSU09SXSA9IGFjdGl2ZS0+aHBsbC5j dXJzb3I7Cj4gPiArCQlyYXctPnBsYW5lW1BMQU5FX1NQUklURTBdID0gMDsKPiA+ICsJCXJhdy0+ ZmJjID0gYWN0aXZlLT5ocGxsLmZiYzsKPiA+ICsKPiA+ICsJb3V0Ogo+ID4gKwkJZm9yX2VhY2hf cGxhbmVfaWRfb25fY3J0YyhjcnRjLCBwbGFuZV9pZCkKPiA+ICsJCQlnNHhfcmF3X3BsYW5lX3dt X3NldChjcnRjX3N0YXRlLCBsZXZlbCwKPiA+ICsJCQkJCSAgICAgcGxhbmVfaWQsIFVTSFJUX01B WCk7Cj4gPiArCQlnNHhfcmF3X2ZiY193bV9zZXQoY3J0Y19zdGF0ZSwgbGV2ZWwsIFVTSFJUX01B WCk7Cj4gPiArCj4gPiArCQljcnRjX3N0YXRlLT53bS5nNHgub3B0aW1hbCA9ICphY3RpdmU7Cj4g PiArCQljcnRjX3N0YXRlLT53bS5nNHguaW50ZXJtZWRpYXRlID0gKmFjdGl2ZTsKPiA+ICsKPiA+ ICsJCURSTV9ERUJVR19LTVMoIkluaXRpYWwgd2F0ZXJtYXJrczogcGlwZSAlYywgcGxhbmU9JWQs IGN1cnNvcj0lZCwgc3ByaXRlPSVkXG4iLAo+ID4gKwkJCSAgICAgIHBpcGVfbmFtZShwaXBlKSwK PiA+ICsJCQkgICAgICB3bS0+cGlwZVtwaXBlXS5wbGFuZVtQTEFORV9QUklNQVJZXSwKPiA+ICsJ CQkgICAgICB3bS0+cGlwZVtwaXBlXS5wbGFuZVtQTEFORV9DVVJTT1JdLAo+ID4gKwkJCSAgICAg IHdtLT5waXBlW3BpcGVdLnBsYW5lW1BMQU5FX1NQUklURTBdKTsKPiA+ICsJfQo+ID4gKwo+ID4g KwlEUk1fREVCVUdfS01TKCJJbml0aWFsIFNSIHdhdGVybWFya3M6IHBsYW5lPSVkLCBjdXJzb3I9 JWQgZmJjPSVkXG4iLAo+ID4gKwkJICAgICAgd20tPnNyLnBsYW5lLCB3bS0+c3IuY3Vyc29yLCB3 bS0+c3IuZmJjKTsKPiA+ICsJRFJNX0RFQlVHX0tNUygiSW5pdGlhbCBIUExMIHdhdGVybWFya3M6 IHBsYW5lPSVkLCBTUiBjdXJzb3I9JWQgZmJjPSVkXG4iLAo+ID4gKwkJICAgICAgd20tPmhwbGwu cGxhbmUsIHdtLT5ocGxsLmN1cnNvciwgd20tPmhwbGwuZmJjKTsKPiA+ICsJRFJNX0RFQlVHX0tN UygiSW5pdGlhbCBTUj0lcyBIUExMPSVzIEZCQz0lc1xuIiwKPiA+ICsJCSAgICAgIHllc25vKHdt LT5jeHNyKSwgeWVzbm8od20tPmhwbGxfZW4pLCB5ZXNubyh3bS0+ZmJjX2VuKSk7Cj4gPiArfQo+ ID4gKwo+ID4gK3ZvaWQgZzR4X3dtX3Nhbml0aXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7Cj4gPiArCXN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjOwo+ID4gKwo+ID4gKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ d20ud21fbXV0ZXgpOwo+ID4gKwo+ID4gKwlmb3JfZWFjaF9pbnRlbF9wbGFuZSgmZGV2X3ByaXYt PmRybSwgcGxhbmUpIHsKPiA+ICsJCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0KPiA+ICsJCQlp bnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXZfcHJpdiwgcGxhbmUtPnBpcGUpOwo+ID4gKwkJc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPQo+ID4gKwkJCXRvX2ludGVsX2NydGNf c3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7Cj4gPiArCQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlID0KPiA+ICsJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+YmFzZS5z dGF0ZSk7Cj4gPiArCQlzdHJ1Y3QgZzR4X3dtX3N0YXRlICp3bV9zdGF0ZSA9ICZjcnRjX3N0YXRl LT53bS5nNHgub3B0aW1hbDsKPiA+ICsJCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+ aWQ7Cj4gPiArCQlpbnQgbGV2ZWw7Cj4gPiArCj4gPiArCQlpZiAocGxhbmVfc3RhdGUtPmJhc2Uu dmlzaWJsZSkKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCWZvciAobGV2ZWwgPSAwOyBs ZXZlbCA8IDM7IGxldmVsKyspIHsKPiA+ICsJCQlzdHJ1Y3QgZzR4X3BpcGVfd20gKnJhdyA9Cj4g PiArCQkJCSZjcnRjX3N0YXRlLT53bS5nNHgucmF3W2xldmVsXTsKPiA+ICsKPiA+ICsJCQlyYXct PnBsYW5lW3BsYW5lX2lkXSA9IDA7Cj4gPiArCQkJd21fc3RhdGUtPndtLnBsYW5lW3BsYW5lX2lk XSA9IDA7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZiAocGxhbmVfaWQgPT0gUExBTkVfUFJJTUFS WSkgewo+ID4gKwkJCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IDM7IGxldmVsKyspIHsKPiA+ICsJ CQkJc3RydWN0IGc0eF9waXBlX3dtICpyYXcgPQo+ID4gKwkJCQkJJmNydGNfc3RhdGUtPndtLmc0 eC5yYXdbbGV2ZWxdOwo+ID4gKwkJCQlyYXctPmZiYyA9IDA7Cj4gPiArCQkJfQo+ID4gKwo+ID4g KwkJCXdtX3N0YXRlLT5zci5mYmMgPSAwOwo+ID4gKwkJCXdtX3N0YXRlLT5ocGxsLmZiYyA9IDA7 Cj4gPiArCQkJd21fc3RhdGUtPmZiY19lbiA9IGZhbHNlOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiAr Cj4gPiArCWZvcl9lYWNoX2ludGVsX2NydGMoJmRldl9wcml2LT5kcm0sIGNydGMpIHsKPiA+ICsJ CXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0KPiA+ICsJCQl0b19pbnRlbF9j cnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwo+ID4gKwo+ID4gKwkJY3J0Y19zdGF0ZS0+d20u ZzR4LmludGVybWVkaWF0ZSA9Cj4gPiArCQkJY3J0Y19zdGF0ZS0+d20uZzR4Lm9wdGltYWw7Cj4g PiArCQljcnRjLT53bS5hY3RpdmUuZzR4ID0gY3J0Y19zdGF0ZS0+d20uZzR4Lm9wdGltYWw7Cj4g PiArCX0KPiA+ICsKPiA+ICsJZzR4X3Byb2dyYW1fd2F0ZXJtYXJrcyhkZXZfcHJpdik7Cj4gPiAr Cj4gPiArCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPndtLndtX211dGV4KTsKPiA+ICt9Cj4gPiAr Cj4gPiAgdm9pZCB2bHZfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4g PiAgewo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRl dik7Cj4gPiBAQCAtODE2MCw2ICs4NjY0LDEyIEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiAgCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0 aWFsX3dhdGVybWFya3MgPSB2bHZfaW5pdGlhbF93YXRlcm1hcmtzOwo+ID4gIAkJZGV2X3ByaXYt PmRpc3BsYXkub3B0aW1pemVfd2F0ZXJtYXJrcyA9IHZsdl9vcHRpbWl6ZV93YXRlcm1hcmtzOwo+ ID4gIAkJZGV2X3ByaXYtPmRpc3BsYXkuYXRvbWljX3VwZGF0ZV93YXRlcm1hcmtzID0gdmx2X2F0 b21pY191cGRhdGVfZmlmbzsKPiA+ICsJfSBlbHNlIGlmIChJU19HNFgoZGV2X3ByaXYpKSB7Cj4g PiArCQlnNHhfc2V0dXBfd21fbGF0ZW5jeShkZXZfcHJpdik7Cj4gPiArCQlkZXZfcHJpdi0+ZGlz cGxheS5jb21wdXRlX3BpcGVfd20gPSBnNHhfY29tcHV0ZV9waXBlX3dtOwo+ID4gKwkJZGV2X3By aXYtPmRpc3BsYXkuY29tcHV0ZV9pbnRlcm1lZGlhdGVfd20gPSBnNHhfY29tcHV0ZV9pbnRlcm1l ZGlhdGVfd207Cj4gPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0aWFsX3dhdGVybWFya3MgPSBn NHhfaW5pdGlhbF93YXRlcm1hcmtzOwo+ID4gKwkJZGV2X3ByaXYtPmRpc3BsYXkub3B0aW1pemVf d2F0ZXJtYXJrcyA9IGc0eF9vcHRpbWl6ZV93YXRlcm1hcmtzOwo+ID4gIAl9IGVsc2UgaWYgKElT X1BJTkVWSUVXKGRldl9wcml2KSkgewo+ID4gIAkJaWYgKCFpbnRlbF9nZXRfY3hzcl9sYXRlbmN5 KElTX1BJTkVWSUVXX0coZGV2X3ByaXYpLAo+ID4gIAkJCQkJICAgIGRldl9wcml2LT5pc19kZHIz LAo+ID4gQEAgLTgxNzUsOCArODY4NSw2IEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiAgCQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRl X3dtID0gTlVMTDsKPiA+ICAJCX0gZWxzZQo+ID4gIAkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0 ZV93bSA9IHBpbmV2aWV3X3VwZGF0ZV93bTsKPiA+IC0JfSBlbHNlIGlmIChJU19HNFgoZGV2X3By aXYpKSB7Cj4gPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBnNHhfdXBkYXRlX3dt Owo+ID4gIAl9IGVsc2UgaWYgKElTX0dFTjQoZGV2X3ByaXYpKSB7Cj4gPiAgCQlkZXZfcHJpdi0+ ZGlzcGxheS51cGRhdGVfd20gPSBpOTY1X3VwZGF0ZV93bTsKPiA+ICAJfSBlbHNlIGlmIChJU19H RU4zKGRldl9wcml2KSkgewo+IAoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==