From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 2/4] drm: Add support for ARM's HDLCD controller. Date: Wed, 2 Dec 2015 16:24:19 +0100 Message-ID: <20151202152419.GC17050@phenom.ffwll.local> References: <1449058982-18595-1-git-send-email-Liviu.Dudau@arm.com> <1449058982-18595-3-git-send-email-Liviu.Dudau@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1449058982-18595-3-git-send-email-Liviu.Dudau@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Liviu Dudau Cc: Jon Medhurst , Mark Rutland , Punit Agrawal , Arnd Bergmann , Pawel Moll , Ian Campbell , Catalin Marinas , Kumar Gala , Will Deacon , Greg Kroah-Hartman , DRI devel , LKML , devicetree , Rob Herring , Sudeep Holla , Russell King , Andrew Morton , Robin Murphy , LAKML List-Id: devicetree@vger.kernel.org T24gV2VkLCBEZWMgMDIsIDIwMTUgYXQgMTI6MjM6MDBQTSArMDAwMCwgTGl2aXUgRHVkYXUgd3Jv dGU6Cj4gVGhlIEhETENEIGNvbnRyb2xsZXIgaXMgYSBkaXNwbGF5IGNvbnRyb2xsZXIgdGhhdCBz dXBwb3J0cyByZXNvbHV0aW9ucwo+IHVwIHRvIDQwOTZ4NDA5NiBwaXhlbHMuIEl0IGlzIHByZXNl bnQgb24gdmFyaW91cyBkZXZlbG9wbWVudCBib2FyZHMKPiBwcm9kdWNlZCBieSBBUk0gTHRkIGFu ZCBlbXVsYXRlZCBieSB0aGUgbGF0ZXN0IEZhc3QgTW9kZWxzIGZyb20gdGhlCj4gY29tcGFueS4K PiAKPiBDYzogRGF2aWQgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgo+IENjOiBSb2JpbiBNdXJw aHkgPHJvYmluLm11cnBoeUBhcm0uY29tPgo+IAo+IFNpZ25lZC1vZmYtYnk6IExpdml1IER1ZGF1 IDxMaXZpdS5EdWRhdUBhcm0uY29tPgoKQSBmZXcgc21hbGwgbml0cGlja3MgYmVsb3cuCgo+IC0t LQo+ICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICB8ICAgMiArCj4gIGRyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2FybS9L Y29uZmlnICAgICAgfCAgMjkgKysKPiAgZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZSAgICAg fCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2NydGMuYyB8IDMzNCArKysrKysr KysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5jICB8IDU1 NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUv ZHJtL2FybS9oZGxjZF9kcnYuaCAgfCAgNDIgKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vaGRs Y2RfcmVncy5oIHwgIDg3ICsrKysrKwo+ICA4IGZpbGVzIGNoYW5nZWQsIDEwNTIgaW5zZXJ0aW9u cygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2NydGMuYwo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuYwo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuaAo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9yZWdzLmgKPiAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IGluZGV4 IGM0YmY5YTEuLjNmZDkxMjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0xMDYsNiArMTA2LDggQEAgY29u ZmlnIERSTV9UREZYCj4gIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIDNkZngg QmFuc2hlZSBvciBWb29kb28zIChvciBsYXRlciksCj4gIAkgIGdyYXBoaWNzIGNhcmQuICBJZiBN IGlzIHNlbGVjdGVkLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRkZnguCj4gIAo+ICtzb3Vy Y2UgImRyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZyIKPiArCj4gIGNvbmZpZyBEUk1fUjEyOAo+ ICAJdHJpc3RhdGUgIkFUSSBSYWdlIDEyOCIKPiAgCWRlcGVuZHMgb24gRFJNICYmIFBDSQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUKPiBpbmRleCAxZTlmZjRjLi42YjQyZDc1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IEBAIC0zNSw2 ICszNSw3IEBAIENGTEFHU19kcm1fdHJhY2VfcG9pbnRzLm8gOj0gLUkkKHNyYykKPiAgCj4gIG9i ai0kKENPTkZJR19EUk0pCSs9IGRybS5vCj4gIG9iai0kKENPTkZJR19EUk1fTUlQSV9EU0kpICs9 IGRybV9taXBpX2RzaS5vCj4gK29iai0kKENPTkZJR19EUk1fQVJNKQkrPSBhcm0vCj4gIG9iai0k KENPTkZJR19EUk1fVFRNKQkrPSB0dG0vCj4gIG9iai0kKENPTkZJR19EUk1fVERGWCkJKz0gdGRm eC8KPiAgb2JqLSQoQ09ORklHX0RSTV9SMTI4KQkrPSByMTI4Lwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjVlOGM4YTgKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnCj4gQEAgLTAsMCArMSwyOSBA QAo+ICtjb25maWcgRFJNX0FSTQo+ICsJYm9vbCAiQVJNIEx0ZC4gZHJpdmVycyIKPiArCWRlcGVu ZHMgb24gRFJNICYmIE9GICYmIChBUk0gfHwgQVJNNjQpCj4gKwlzZWxlY3QgRFJNX0tNU19IRUxQ RVIKPiArCWhlbHAKPiArCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIHNlbGVjdCBkcml2ZXJzIGZv ciBBUk0ncyBkZXZpY2VzCj4gKwo+ICtjb25maWcgRFJNX0hETENECj4gKwl0cmlzdGF0ZSAiQVJN IEhETENEIgo+ICsJZGVwZW5kcyBvbiBEUk1fQVJNCj4gKwlkZXBlbmRzIG9uIENPTU1PTl9DTEsK PiArCXNlbGVjdCBDT01NT05fQ0xLX1NDUEkKPiArCXNlbGVjdCBETUFfQ01BCj4gKwlzZWxlY3Qg RFJNX0tNU19DTUFfSEVMUEVSCj4gKwlzZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCj4gKwloZWxw Cj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBBUk0gSGlnaCBEZWZpbml0 aW9uIENvbG91ciBMQ0QKPiArCSAgY29udHJvbGxlci4KPiArCj4gKwkgIElmIE0gaXMgc2VsZWN0 ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoZGxjZC4KPiArCj4gK2NvbmZpZyBEUk1fSERM Q0RfU0hPV19VTkRFUlJVTgo+ICsJYm9vbCAiU2hvdyB1bmRlcnJ1biBjb25kaXRpb25zIgo+ICsJ ZGVwZW5kcyBvbiBEUk1fSERMQ0QKPiArCWRlZmF1bHQgbgo+ICsJaGVscAo+ICsJICBFbmFibGUg dGhpcyBvcHRpb24gdG8gc2hvdyBpbiByZWQgY29sb3VyIHRoZSBwaXhlbHMgdGhhdCB0aGUKPiAr CSAgSERMQ0QgZGV2aWNlIGRpZCBub3QgZmV0Y2ggZnJvbSBmcmFtZWJ1ZmZlciBkdWUgdG8gdW5k ZXJydW4KPiArCSAgY29uZGl0aW9ucy4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Fy bS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjg5ZGNiN2IKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsMiBAQAo+ICtoZGxjZC15 IDo9IGhkbGNkX2Rydi5vIGhkbGNkX2NydGMubwo+ICtvYmotJChDT05GSUdfRFJNX0hETENEKQkr PSBoZGxjZC5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfY3J0Yy5j IGIvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9jcnRjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAuLjM1MGMxZmUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FybS9oZGxjZF9jcnRjLmMKPiBAQCAtMCwwICsxLDMzNCBAQAo+ICsvKgo+ICsg KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBUk0gTGltaXRlZAo+ICsgKiBBdXRob3I6IExpdml1 IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgc3Vi amVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp Ywo+ICsgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0 b3J5IG9mIHRoaXMgYXJjaGl2ZQo+ICsgKiBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiAg SW1wbGVtZW50YXRpb24gb2YgYSBDUlRDIGNsYXNzIGZvciB0aGUgSERMQ0QgZHJpdmVyLgo+ICsg Ki8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1f Z2VtX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRh L3NpbXBsZWZiLmg+Cj4gKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KPiArCj4gKyNpbmNs dWRlICJoZGxjZF9kcnYuaCIKPiArI2luY2x1ZGUgImhkbGNkX3JlZ3MuaCIKPiArCj4gKy8qCj4g KyAqIFRoZSBIRExDRCBjb250cm9sbGVyIGlzIGEgZHVtYiBSR0Igc3RyZWFtZXIgdGhhdCBnZXRz IGNvbm5lY3RlZCB0bwo+ICsgKiBhIHNpbmdsZSBIRE1JIHRyYW5zbWl0dGVyIG9yIGluIHRoZSBj YXNlIG9mIHRoZSBBUk0gTW9kZWxzIGl0IGdldHMKPiArICogZW11bGF0ZWQgYnkgdGhlIHNvZnR3 YXJlIHRoYXQgZG9lcyB0aGUgYWN0dWFsIHJlbmRlcmluZy4KPiArICoKPiArICovCj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGhkbGNkX2NydGNfZnVuY3MgPSB7Cj4g KwkuZGVzdHJveSA9IGRybV9jcnRjX2NsZWFudXAsCj4gKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9t aWNfaGVscGVyX3NldF9jb25maWcsCj4gKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJf cGFnZV9mbGlwLAo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKPiAr CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNh dGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9j cnRjX2Rlc3Ryb3lfc3RhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHNpbXBsZWZiX2Zv cm1hdCBzdXBwb3J0ZWRfZm9ybWF0c1tdID0gU0lNUExFRkJfRk9STUFUUzsKPiArCj4gKy8qCj4g KyAqIFNldHVwIHRoZSBIRExDRCByZWdpc3RlcnMgZm9yIGRlY29kaW5nIHRoZSBwaXhlbHMgb3V0 IG9mIHRoZSBmcmFtZWJ1ZmZlcgo+ICsgKi8KPiArc3RhdGljIGludCBoZGxjZF9zZXRfcHhsX2Zt dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXVuc2lnbmVkIGludCBidHBwLCBkZWZh dWx0X2NvbG9yID0gMHgwMDAwMDAwMDsKPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRs Y2QgPSBjcnRjX3RvX2hkbGNkX3ByaXYoY3J0Yyk7Cj4gKwl1aW50MzJfdCBwaXhlbF9mb3JtYXQ7 Cj4gKwlzdHJ1Y3Qgc2ltcGxlZmJfZm9ybWF0ICpmb3JtYXQgPSBOVUxMOwo+ICsJaW50IGk7Cj4g Kwo+ICsjaWZkZWYgQ09ORklHX0RSTV9IRExDRF9TSE9XX1VOREVSUlVOCj4gKwlkZWZhdWx0X2Nv bG9yID0gMHgwMGZmMDAwMDsJLyogc2hvdyB1bmRlcnJ1bnMgaW4gcmVkICovCj4gKyNlbmRpZgo+ ICsKPiArCWlmICghY3J0Yy0+cHJpbWFyeS0+c3RhdGUtPmZiKSB7Cj4gKwkJRFJNX0VSUk9SKCJO byBmYiBhc3NvY2lhdGVkIHdpdGggc3RhdGUgJXBcbiIsCj4gKwkJCSAgY3J0Yy0+cHJpbWFyeS0+ c3RhdGUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwoKVGhlIGhpZ2hlci1sZXZlbCAtPm1vZGVfc2V0 X25vZmIgY2FuJ3QgZmFpbCBhbmQgeW91J3JlIHZpb2xhdGluZyB0aGlzCmhlcmUuIENvcnJlY3Qg Zml4IGluIGF0b21pYyBpcyB0byBjaGVjayBpbiB5b3VyIGNydGMtPmF0b21pY19jaGVjayB0aGF0 CnRoZXJlJ3MgYWx3YXlzIGEgcHJpbWFyeSBmYiBzZXQuIFNpbmNlIHRoYXQncyBhIHNtYWxsIGRh bmNlICh5b3UgbmVlZCB0bwpncmFiIHRoZSBwcmltYXJ5IHBsYW5lIHN0YXRlIGZpcnN0KSBtaWdo dCBiZSBnb29kIHRvIGV4dHJhY3QgaXQgaW50byBhCnNtYWxsIGhlbHBlciwgYnV0IG5vdCByZWFs bHkgbmVlZGVkLgoKSGVyZSB5b3Ugc2hvdWxkIFdBUk5fT04gaWYgdGhpcyBldmVyIGhhcHBlbnMg YW5kIGp1c3QgcmV0dXJuICh3aXRob3V0CnRyeWluZyB0byB0cmFjayBhbiBlcnJvciBjb2RlKSwg c2luY2UgaXQncyB0b28gbGF0ZSBhbHJlYWR5LgoKPiArCX0KPiArCj4gKwlwaXhlbF9mb3JtYXQg PSBjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdDsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShzdXBwb3J0ZWRfZm9ybWF0cyk7IGkrKykgewo+ICsJCWlmIChz dXBwb3J0ZWRfZm9ybWF0c1tpXS5mb3VyY2MgPT0gcGl4ZWxfZm9ybWF0KQo+ICsJCQlmb3JtYXQg PSAmc3VwcG9ydGVkX2Zvcm1hdHNbaV07Cj4gKwl9Cj4gKwo+ICsJaWYgKCFmb3JtYXQpIHsKPiAr CQlEUk1fRVJST1IoIkZvcm1hdCBub3Qgc3VwcG9ydGVkOiAweCV4XG4iLCBwaXhlbF9mb3JtYXQp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQoKU2FtZSBoZXJlLiBBbHRob3VnaCB0aGlzIHNo b3VsZCBiZSBpbXBvc3NpYmxlLCB3aXRoIGF0b21pYyB0aGUKY29yZS9oZWxwZXJzIHByZS1jaGVj ayB0aGUgcGl4ZWwgZm9ybWF0IGFnYWluc3QgdGhlIGZvcm1hdCB0YWJsZSB5b3UKcmVnaXN0ZXIg b24gdGhlIChwcmltYXJ5KSBwbGFuZSBhbHJlYWR5LiBTbyBqdXN0IFdBUk5fT04gKyBiYWlsaW5n IG91dC4KCj4gKwo+ICsJLyogSERMQ0QgdXNlcyAnYnl0ZXMgcGVyIHBpeGVsJywgemVybyBtZWFu cyAxIGJ5dGUgKi8KPiArCWJ0cHAgPSAoZm9ybWF0LT5iaXRzX3Blcl9waXhlbCArIDcpIC8gODsK PiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfUElYRUxfRk9STUFULCAoYnRwcCAtIDEp IDw8IDMpOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgZm9ybWF0IG9mIHRoZSBIRExDRF9SRUdfPGNv bG9yPl9TRUxFQ1QgcmVnaXN0ZXIgaXM6Cj4gKwkgKiAgIC0gYml0c1syMzoxNl0gLSBkZWZhdWx0 IHZhbHVlIGZvciB0aGF0IGNvbG9yIGNvbXBvbmVudAo+ICsJICogICAtIGJpdHNbMTE6OF0gIC0g bnVtYmVyIG9mIGJpdHMgdG8gZXh0cmFjdCBmb3IgZWFjaCBjb2xvciBjb21wb25lbnQKPiArCSAq ICAgLSBiaXRzWzQ6MF0gICAtIGluZGV4IG9mIHRoZSBsb3dlc3QgYml0IHRvIGV4dHJhY3QKPiAr CSAqCj4gKwkgKiBUaGUgZGVmYXVsdCBjb2xvciB2YWx1ZSBpcyB1c2VkIHdoZW4gYml0c1sxMTo4 XSBhcmUgemVybywgd2hlbiB0aGUKPiArCSAqIHBpeGVsIGlzIG91dHNpZGUgdGhlIHZpc2libGUg ZnJhbWUgYXJlYSBvciB3aGVuIHRoZXJlIGlzIGEKPiArCSAqIGJ1ZmZlciB1bmRlcnJ1bi4KPiAr CSAqLwo+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19SRURfU0VMRUNULCBkZWZhdWx0 X2NvbG9yIHwKPiArCQlmb3JtYXQtPnJlZC5vZmZzZXQgfCAoZm9ybWF0LT5yZWQubGVuZ3RoICYg MHhmKSA8PCA4KTsKPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfR1JFRU5fU0VMRUNU LCBkZWZhdWx0X2NvbG9yIHwKPiArCQlmb3JtYXQtPmdyZWVuLm9mZnNldCB8IChmb3JtYXQtPmdy ZWVuLmxlbmd0aCAmIDB4ZikgPDwgOCk7Cj4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVH X0JMVUVfU0VMRUNULCBkZWZhdWx0X2NvbG9yIHwKPiArCQlmb3JtYXQtPmJsdWUub2Zmc2V0IHwg KGZvcm1hdC0+Ymx1ZS5sZW5ndGggJiAweGYpIDw8IDgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBoZGxjZF9jcnRjX21vZGVfc2V0X25vZmIoc3RydWN0IGRybV9j cnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gY3J0 Y190b19oZGxjZF9wcml2KGNydGMpOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm0gPSAm Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7Cj4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOwo+ICsJ dW5zaWduZWQgaW50IHBvbGFyaXRpZXMsIGxpbmVfbGVuZ3RoLCBlcnI7Cj4gKwo+ICsJdm0udmZy b250X3BvcmNoID0gbS0+Y3J0Y192c3luY19zdGFydCAtIG0tPmNydGNfdmRpc3BsYXk7Cj4gKwl2 bS52YmFja19wb3JjaCA9IG0tPmNydGNfdnRvdGFsIC0gbS0+Y3J0Y192c3luY19lbmQ7Cj4gKwl2 bS52c3luY19sZW4gPSBtLT5jcnRjX3ZzeW5jX2VuZCAtIG0tPmNydGNfdnN5bmNfc3RhcnQ7Cj4g Kwl2bS5oZnJvbnRfcG9yY2ggPSBtLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbS0+Y3J0Y19oZGlzcGxh eTsKPiArCXZtLmhiYWNrX3BvcmNoID0gbS0+Y3J0Y19odG90YWwgLSBtLT5jcnRjX2hzeW5jX2Vu ZDsKPiArCXZtLmhzeW5jX2xlbiA9IG0tPmNydGNfaHN5bmNfZW5kIC0gbS0+Y3J0Y19oc3luY19z dGFydDsKPiArCj4gKwlwb2xhcml0aWVzID0gSERMQ0RfUE9MQVJJVFlfREFUQUVOIHwgSERMQ0Rf UE9MQVJJVFlfREFUQTsKPiArCj4gKwlpZiAobS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lO QykKPiArCQlwb2xhcml0aWVzIHw9IEhETENEX1BPTEFSSVRZX0hTWU5DOwo+ICsJaWYgKG0tPmZs YWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpCj4gKwkJcG9sYXJpdGllcyB8PSBIRExDRF9QT0xB UklUWV9WU1lOQzsKPiArCj4gKwlsaW5lX2xlbmd0aCA9IGNydGMtPnByaW1hcnktPnN0YXRlLT5m Yi0+cGl0Y2hlc1swXTsKPiArCj4gKwkvKiBBbGxvdyBtYXggbnVtYmVyIG9mIG91dHN0YW5kaW5n IHJlcXVlc3RzIGFuZCBsYXJnZXN0IGJ1cnN0IHNpemUgKi8KPiArCWhkbGNkX3dyaXRlKGhkbGNk LCBIRExDRF9SRUdfQlVTX09QVElPTlMsCj4gKwkJICAgIEhETENEX0JVU19NQVhfT1VUU1RBTkQg fCBIRExDRF9CVVNfQlVSU1RfMTYpOwo+ICsKPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9S RUdfRkJfTElORV9MRU5HVEgsIGxpbmVfbGVuZ3RoKTsKPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBI RExDRF9SRUdfRkJfTElORV9QSVRDSCwgbGluZV9sZW5ndGgpOwo+ICsJaGRsY2Rfd3JpdGUoaGRs Y2QsIEhETENEX1JFR19GQl9MSU5FX0NPVU5ULCBtLT5jcnRjX3ZkaXNwbGF5IC0gMSk7Cj4gKwlo ZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX1ZfREFUQSwgbS0+Y3J0Y192ZGlzcGxheSAtIDEp Owo+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19WX0JBQ0tfUE9SQ0gsIHZtLnZiYWNr X3BvcmNoIC0gMSk7Cj4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX1ZfRlJPTlRfUE9S Q0gsIHZtLnZmcm9udF9wb3JjaCAtIDEpOwo+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JF R19WX1NZTkMsIHZtLnZzeW5jX2xlbiAtIDEpOwo+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENE X1JFR19IX0JBQ0tfUE9SQ0gsIHZtLmhiYWNrX3BvcmNoIC0gMSk7Cj4gKwloZGxjZF93cml0ZSho ZGxjZCwgSERMQ0RfUkVHX0hfRlJPTlRfUE9SQ0gsIHZtLmhmcm9udF9wb3JjaCAtIDEpOwo+ICsJ aGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19IX1NZTkMsIHZtLmhzeW5jX2xlbiAtIDEpOwo+ ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19IX0RBVEEsIG0tPmNydGNfaGRpc3BsYXkg LSAxKTsKPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfUE9MQVJJVElFUywgcG9sYXJp dGllcyk7Cj4gKwo+ICsJZXJyID0gaGRsY2Rfc2V0X3B4bF9mbXQoY3J0Yyk7Cj4gKwlpZiAoZXJy KQo+ICsJCXJldHVybjsKPiArCj4gKwljbGtfc2V0X3JhdGUoaGRsY2QtPmNsaywgbS0+Y3J0Y19j bG9jayAqIDEwMDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBoZGxjZF9jcnRjX2VuYWJsZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAq aGRsY2QgPSBjcnRjX3RvX2hkbGNkX3ByaXYoY3J0Yyk7Cj4gKwo+ICsJY2xrX3ByZXBhcmVfZW5h YmxlKGhkbGNkLT5jbGspOwo+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19DT01NQU5E LCAxKTsKPiArCWRybV9jcnRjX3ZibGFua19vbihjcnRjKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgaGRsY2RfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3Ry dWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGNydGNfdG9faGRsY2RfcHJpdihjcnRjKTsK PiArCj4gKwlpZiAoIWNydGMtPnByaW1hcnktPmZiKQo+ICsJCXJldHVybjsKPiArCj4gKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoaGRsY2QtPmNsayk7Cj4gKwloZGxjZF93cml0ZShoZGxjZCwgSERM Q0RfUkVHX0NPTU1BTkQsIDApOwo+ICsJZHJtX2NydGNfdmJsYW5rX29mZihjcnRjKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBoZGxjZF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlz dHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gY3J0Y190b19oZGxjZF9wcml2KGNydGMp Owo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmc3RhdGUtPmFkanVzdGVkX21v ZGU7Cj4gKwlsb25nIHJhdGUsIGNsa19yYXRlID0gbW9kZS0+Y2xvY2sgKiAxMDAwOwo+ICsKPiAr CXJhdGUgPSBjbGtfcm91bmRfcmF0ZShoZGxjZC0+Y2xrLCBjbGtfcmF0ZSk7Cj4gKwlpZiAocmF0 ZSAhPSBjbGtfcmF0ZSkgewo+ICsJCS8qIGNsb2NrIHJlcXVpcmVkIGJ5IG1vZGUgbm90IHN1cHBv cnRlZCBieSBoYXJkd2FyZSAqLwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBoZGxjZF9jcnRjX2F0b21pY19iZWdpbihz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpz dGF0ZSkKPiArewo+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGNydGNfdG9f aGRsY2RfcHJpdihjcnRjKTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJaWYgKGNy dGMtPnN0YXRlLT5ldmVudCkgewo+ICsJCWNydGMtPnN0YXRlLT5ldmVudC0+cGlwZSA9IGRybV9j cnRjX2luZGV4KGNydGMpOwo+ICsKPiArCQlXQVJOX09OKGRybV9jcnRjX3ZibGFua19nZXQoY3J0 YykgIT0gMCk7Cj4gKwo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYtPmV2ZW50X2xv Y2ssIGZsYWdzKTsKPiArCQloZGxjZC0+ZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ZXZlbnQ7Cj4gKwkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4g KwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZv aWQgaGRsY2RfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCQkJ ICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4gK3sKPiArfQo+ICsKPiArc3RhdGlj IGJvb2wgaGRsY2RfY3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJ Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQo+ICt7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgaGRsY2RfY3J0Y19o ZWxwZXJfZnVuY3MgPSB7Cj4gKwkubW9kZV9maXh1cAk9IGhkbGNkX2NydGNfbW9kZV9maXh1cCwK PiArCS5tb2RlX3NldAk9IGRybV9oZWxwZXJfY3J0Y19tb2RlX3NldCwKPiArCS5tb2RlX3NldF9i YXNlCT0gZHJtX2hlbHBlcl9jcnRjX21vZGVfc2V0X2Jhc2UsCj4gKwkubW9kZV9zZXRfbm9mYgk9 IGhkbGNkX2NydGNfbW9kZV9zZXRfbm9mYiwKPiArCS5lbmFibGUJCT0gaGRsY2RfY3J0Y19lbmFi bGUsCj4gKwkuZGlzYWJsZQk9IGhkbGNkX2NydGNfZGlzYWJsZSwKPiArCS5wcmVwYXJlCT0gaGRs Y2RfY3J0Y19kaXNhYmxlLAo+ICsJLmNvbW1pdAkJPSBoZGxjZF9jcnRjX2VuYWJsZSwKPiArCS5h dG9taWNfY2hlY2sJPSBoZGxjZF9jcnRjX2F0b21pY19jaGVjaywKPiArCS5hdG9taWNfYmVnaW4J PSBoZGxjZF9jcnRjX2F0b21pY19iZWdpbiwKPiArCS5hdG9taWNfZmx1c2gJPSBoZGxjZF9jcnRj X2F0b21pY19mbHVzaCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgaGRsY2RfcGxhbmVfYXRvbWlj X2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICsJCQkJICAgIHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgaGRsY2RfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAr CQkJCSAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3Qg aGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkOwo+ICsJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAq Z2VtOwo+ICsJZG1hX2FkZHJfdCBzY2Fub3V0X3N0YXJ0Owo+ICsKPiArCWlmICghcGxhbmUtPnN0 YXRlLT5jcnRjIHx8ICFwbGFuZS0+c3RhdGUtPmZiKQo+ICsJCXJldHVybjsKPiArCj4gKwloZGxj ZCA9IGNydGNfdG9faGRsY2RfcHJpdihwbGFuZS0+c3RhdGUtPmNydGMpOwo+ICsJZ2VtID0gZHJt X2ZiX2NtYV9nZXRfZ2VtX29iaihwbGFuZS0+c3RhdGUtPmZiLCAwKTsKPiArCXNjYW5vdXRfc3Rh cnQgPSBnZW0tPnBhZGRyOwo+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19GQl9CQVNF LCBzY2Fub3V0X3N0YXJ0KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxh bmVfaGVscGVyX2Z1bmNzIGhkbGNkX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5wcmVwYXJl X2ZiID0gTlVMTCwKPiArCS5jbGVhbnVwX2ZiID0gTlVMTCwKPiArCS5hdG9taWNfY2hlY2sgPSBo ZGxjZF9wbGFuZV9hdG9taWNfY2hlY2ssCj4gKwkuYXRvbWljX3VwZGF0ZSA9IGhkbGNkX3BsYW5l X2F0b21pY191cGRhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBoZGxjZF9wbGFuZV9kZXN0 cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ICt7Cj4gKwlkcm1fcGxhbmVfaGVscGVyX2Rp c2FibGUocGxhbmUpOwo+ICsJZHJtX3BsYW5lX2NsZWFudXAocGxhbmUpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBoZGxjZF9wbGFuZV9mdW5jcyA9IHsK PiArCS51cGRhdGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAo+ICsJ LmRpc2FibGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKPiArCS5k ZXN0cm95CQk9IGhkbGNkX3BsYW5lX2Rlc3Ryb3ksCj4gKwkucmVzZXQJCQk9IGRybV9hdG9taWNf aGVscGVyX3BsYW5lX3Jlc2V0LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRv bWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3Rh dGUJPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiAr c3RhdGljIHN0cnVjdCBkcm1fcGxhbmUgKmhkbGNkX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRybSkKPiArewo+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IE5VTEw7Cj4gKwl1MzIg Zm9ybWF0c1tBUlJBWV9TSVpFKHN1cHBvcnRlZF9mb3JtYXRzKV0sIGk7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCXBsYW5lID0gZGV2bV9remFsbG9jKGRybS0+ZGV2LCBzaXplb2YoKnBsYW5lKSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIXBsYW5lKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1cHBvcnRlZF9mb3JtYXRzKTsgaSsr KQo+ICsJCWZvcm1hdHNbaV0gPSBzdXBwb3J0ZWRfZm9ybWF0c1tpXS5mb3VyY2M7Cj4gKwo+ICsJ cmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwgcGxhbmUsIDB4ZmYsICZoZGxjZF9w bGFuZV9mdW5jcywKPiArCQkJCSAgICAgICBmb3JtYXRzLCBBUlJBWV9TSVpFKGZvcm1hdHMpLAo+ ICsJCQkJICAgICAgIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ICsJaWYgKHJldCkgewo+ICsJ CWRldm1fa2ZyZWUoZHJtLT5kZXYsIHBsYW5lKTsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ ICsJfQo+ICsKPiArCWRybV9wbGFuZV9oZWxwZXJfYWRkKHBsYW5lLCAmaGRsY2RfcGxhbmVfaGVs cGVyX2Z1bmNzKTsKPiArCWhkbGNkLT5wbGFuZSA9IHBsYW5lOwo+ICsKPiArCXJldHVybiBwbGFu ZTsKPiArfQo+ICsKPiArdm9pZCBoZGxjZF9jcnRjX3N1c3BlbmQoc3RydWN0IGRybV9jcnRjICpj cnRjKQo+ICt7Cj4gKwloZGxjZF9jcnRjX2Rpc2FibGUoY3J0Yyk7Cj4gK30KPiArCj4gK3ZvaWQg aGRsY2RfY3J0Y19yZXN1bWUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwloZGxjZF9j cnRjX2VuYWJsZShjcnRjKTsKPiArfQo+ICsKPiAraW50IGhkbGNkX3NldHVwX2NydGMoc3RydWN0 IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxj ZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5Owo+ICsJ aW50IHJldDsKPiArCj4gKwlwcmltYXJ5ID0gaGRsY2RfcGxhbmVfaW5pdChkcm0pOwo+ICsJaWYg KElTX0VSUihwcmltYXJ5KSkKPiArCQlyZXR1cm4gUFRSX0VSUihwcmltYXJ5KTsKPiArCj4gKwly ZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRybSwgJmhkbGNkLT5jcnRjLCBwcmltYXJ5 LCBOVUxMLAo+ICsJCQkJCSZoZGxjZF9jcnRjX2Z1bmNzKTsKPiArCWlmIChyZXQpIHsKPiArCQlo ZGxjZF9wbGFuZV9kZXN0cm95KHByaW1hcnkpOwo+ICsJCWRldm1fa2ZyZWUoZHJtLT5kZXYsIHBy aW1hcnkpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZHJtX2NydGNfaGVscGVyX2Fk ZCgmaGRsY2QtPmNydGMsICZoZGxjZF9jcnRjX2hlbHBlcl9mdW5jcyk7Cj4gKwlyZXR1cm4gMDsK PiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5jIGIvZHJp dmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uNDU0NDBiMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vYXJtL2hkbGNkX2Rydi5jCj4gQEAgLTAsMCArMSw1NTUgQEAKPiArLyoKPiArICogQ29weXJp Z2h0IChDKSAyMDEzLTIwMTUgQVJNIExpbWl0ZWQKPiArICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8 TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8g dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiArICog TGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0 aGlzIGFyY2hpdmUKPiArICogZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogIEFSTSBIRExD RCBEcml2ZXIKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9zcGlubG9jay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9vZl9yZXNlcnZlZF9tZW0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Bt X3J1bnRpbWUuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVs cGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KPiAr Cj4gKyNpbmNsdWRlICJoZGxjZF9kcnYuaCIKPiArI2luY2x1ZGUgImhkbGNkX3JlZ3MuaCIKPiAr Cj4gK3N0YXRpYyBpbnQgY29tcGFyZV9kZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRh KQo+ICt7Cj4gKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09IGRhdGE7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgaGRsY2RfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBsb25nIGZs YWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZf cHJpdmF0ZTsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZHJtLT5kZXYpOwo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwl1MzIgdmVyc2lv bjsKPiArCWludCByZXQ7Cj4gKwo+ICsJaGRsY2QtPmNsayA9IGRldm1fY2xrX2dldChkcm0tPmRl diwgInB4bGNsayIpOwo+ICsJaWYgKElTX0VSUihoZGxjZC0+Y2xrKSkKPiArCQlyZXR1cm4gUFRS X0VSUihoZGxjZC0+Y2xrKTsKPiArCj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiArCWF0b21p Y19zZXQoJmhkbGNkLT5idWZmZXJfdW5kZXJydW5fY291bnQsIDApOwo+ICsJYXRvbWljX3NldCgm aGRsY2QtPmJ1c19lcnJvcl9jb3VudCwgMCk7Cj4gKwlhdG9taWNfc2V0KCZoZGxjZC0+dnN5bmNf Y291bnQsIDApOwo+ICsJYXRvbWljX3NldCgmaGRsY2QtPmRtYV9lbmRfY291bnQsIDApOwo+ICsj ZW5kaWYKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD RV9NRU0sIDApOwo+ICsJaGRsY2QtPm1taW8gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZHJtLT5k ZXYsIHJlcyk7Cj4gKwlpZiAoSVNfRVJSKGhkbGNkLT5tbWlvKSkgewo+ICsJCURSTV9FUlJPUigi ZmFpbGVkIHRvIG1hcCBjb250cm9sIHJlZ2lzdGVycyBhcmVhXG4iKTsKPiArCQlyZXQgPSBQVFJf RVJSKGhkbGNkLT5tbWlvKTsKPiArCQloZGxjZC0+bW1pbyA9IE5VTEw7Cj4gKwkJZ290byBmYWls Owo+ICsJfQo+ICsKPiArCXZlcnNpb24gPSBoZGxjZF9yZWFkKGhkbGNkLCBIRExDRF9SRUdfVkVS U0lPTik7Cj4gKwlpZiAoKHZlcnNpb24gJiBIRExDRF9QUk9EVUNUX01BU0spICE9IEhETENEX1BS T0RVQ1RfSUQpIHsKPiArCQlEUk1fRVJST1IoInVua25vd24gcHJvZHVjdCBpZDogMHgleFxuIiwg dmVyc2lvbik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwlE Uk1fSU5GTygiZm91bmQgQVJNIEhETENEIHZlcnNpb24gciVkcCVkXG4iLAo+ICsJCSh2ZXJzaW9u ICYgSERMQ0RfVkVSU0lPTl9NQUpPUl9NQVNLKSA+PiA4LAo+ICsJCXZlcnNpb24gJiBIRExDRF9W RVJTSU9OX01JTk9SX01BU0spOwo+ICsKPiArCS8qIEdldCB0aGUgb3B0aW9uYWwgZnJhbWVidWZm ZXIgbWVtb3J5IHJlc291cmNlICovCj4gKwlyZXQgPSBvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX2lu aXQoZHJtLT5kZXYpOwo+ICsJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RFVikKPiArCQlnb3RvIGZh aWw7Cj4gKwo+ICsJcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkcm0tPmRldiwgRE1B X0JJVF9NQVNLKDMyKSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gc2V0dXBfZmFpbDsKPiArCj4g KwlyZXQgPSBoZGxjZF9zZXR1cF9jcnRjKGRybSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURS TV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBjcnRjXG4iKTsKPiArCQlnb3RvIHNldHVwX2ZhaWw7 Cj4gKwl9Cj4gKwo+ICsJcG1fcnVudGltZV9lbmFibGUoZHJtLT5kZXYpOwo+ICsKPiArCXBtX3J1 bnRpbWVfZ2V0X3N5bmMoZHJtLT5kZXYpOwo+ICsJcmV0ID0gZHJtX2lycV9pbnN0YWxsKGRybSwg cGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSk7Cj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRybS0+ ZGV2KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5zdGFs bCBJUlEgaGFuZGxlclxuIik7Cj4gKwkJZ290byBpcnFfZmFpbDsKPiArCX0KPiArCj4gKwlyZXR1 cm4gMDsKPiArCj4gK2lycV9mYWlsOgo+ICsJZHJtX2NydGNfY2xlYW51cCgmaGRsY2QtPmNydGMp Owo+ICtzZXR1cF9mYWlsOgo+ICsJb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9yZWxlYXNlKGRybS0+ ZGV2KTsKPiArZmFpbDoKPiArCWRldm1fY2xrX3B1dChkcm0tPmRldiwgaGRsY2QtPmNsayk7Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaGRsY2RfZmJfb3V0cHV0 X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3QgaGRs Y2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlpZiAoaGRs Y2QtPmZiZGV2KSB7Cj4gKwkJZHJtX2ZiZGV2X2NtYV9ob3RwbHVnX2V2ZW50KGhkbGNkLT5mYmRl dik7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmln X2Z1bmNzIGhkbGNkX21vZGVfY29uZmlnX2Z1bmNzID0gewo+ICsJLmZiX2NyZWF0ZSA9IGRybV9m Yl9jbWFfY3JlYXRlLAo+ICsJLm91dHB1dF9wb2xsX2NoYW5nZWQgPSBoZGxjZF9mYl9vdXRwdXRf cG9sbF9jaGFuZ2VkLAo+ICsJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNr LAo+ICsJLmF0b21pY19jb21taXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQsCj4gK307Cj4g Kwo+ICtzdGF0aWMgdm9pZCBoZGxjZF9zZXR1cF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtKQo+ICt7Cj4gKwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOwo+ICsJZHJtLT5tb2Rl X2NvbmZpZy5taW5fd2lkdGggPSAwOwo+ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0g MDsKPiArCWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gSERMQ0RfTUFYX1hSRVM7Cj4gKwlk cm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBIRExDRF9NQVhfWVJFUzsKPiArCWRybS0+bW9k ZV9jb25maWcuZnVuY3MgPSAmaGRsY2RfbW9kZV9jb25maWdfZnVuY3M7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGhkbGNkX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSkKPiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBoZGxjZF9sYXN0Y2xv c2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2 YXRlICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJZHJtX2ZiZGV2X2NtYV9yZXN0 b3JlX21vZGUoaGRsY2QtPmZiZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IGhk bGNkX2lycShpbnQgaXJxLCB2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpk cm0gPSBhcmc7Cj4gKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZf cHJpdmF0ZTsKPiArCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXR1czsKPiArCj4gKwlpcnFfc3RhdHVz ID0gaGRsY2RfcmVhZChoZGxjZCwgSERMQ0RfUkVHX0lOVF9TVEFUVVMpOwo+ICsKPiArI2lmZGVm IENPTkZJR19ERUJVR19GUwo+ICsJaWYgKGlycV9zdGF0dXMgJiBIRExDRF9JTlRFUlJVUFRfVU5E RVJSVU4pIHsKPiArCQlhdG9taWNfaW5jKCZoZGxjZC0+YnVmZmVyX3VuZGVycnVuX2NvdW50KTsK PiArCX0KPiArCWlmIChpcnFfc3RhdHVzICYgSERMQ0RfSU5URVJSVVBUX0RNQV9FTkQpIHsKPiAr CQlhdG9taWNfaW5jKCZoZGxjZC0+ZG1hX2VuZF9jb3VudCk7Cj4gKwl9Cj4gKwlpZiAoaXJxX3N0 YXR1cyAmIEhETENEX0lOVEVSUlVQVF9CVVNfRVJST1IpIHsKPiArCQlhdG9taWNfaW5jKCZoZGxj ZC0+YnVzX2Vycm9yX2NvdW50KTsKPiArCX0KPiArCWlmIChpcnFfc3RhdHVzICYgSERMQ0RfSU5U RVJSVVBUX1ZTWU5DKSB7Cj4gKwkJYXRvbWljX2luYygmaGRsY2QtPnZzeW5jX2NvdW50KTsKPiAr CX0KPiArI2VuZGlmCj4gKwlpZiAoaXJxX3N0YXR1cyAmIEhETENEX0lOVEVSUlVQVF9WU1lOQykg ewo+ICsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJCWRybV9oYW5kbGVfdmJsYW5rKGRy bSwgMCk7CgpXZSBoYXZlIGRybV9jcnRjXyB2ZXJzaW9ucyBmb3IgdGhpcyBvbmUgLi4uCj4gKwo+ ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArCQlpZiAo aGRsY2QtPmV2ZW50KSB7Cj4gKwkJCWRybV9zZW5kX3ZibGFua19ldmVudChkcm0sIGhkbGNkLT5l dmVudC0+cGlwZSwgaGRsY2QtPmV2ZW50KTsKCmFuZCB0aGlzIG9uZSBub3cgdG9vLiBOZXcgZHJp dmVycyBzaG91bGRuJ3QgbmVlZCB0byBkZWFsIHdpdGggdGhlIG9wYXF1ZQppbnQgcGlwZSBzdHVm ZiBhbnkgbW9yZSBvbiB0aGUgY2FsbGVyIHNpZGVzLCBhbmQgcmVhbCBzb29uIChob3BlZnVsbHkp CndlJ2xsIGhhdmUgaG9va3MgZm9yIHRoZSB2Ymxhbmsgc3R1ZmYgdGhhdCB0YWtlIHN0cnVjdCBk cm1fY3J0YyAqIHRvby4KCkkndmUgcXVpY2tseSBzY3JvbGxlZCB0aHJvdWdoIHRoZSBkcml2ZXIg b3RoZXJ3aXNlIGFuZCBkaWRuJ3Qgbm90aWNlCmFueXRoaW5nIGVsc2UgdGhhdCBzaG91bGQgYmUg dXBkYXRlZCB0byBsYXRlc3QgcHJhY3RpY2VzLiBMb29rcyByZWFsbHkKZ29vZC4KLURhbmllbAoK PiArCQkJZHJtX2NydGNfdmJsYW5rX3B1dCgmaGRsY2QtPmNydGMpOwo+ICsJCQloZGxjZC0+ZXZl bnQgPSBOVUxMOwo+ICsJCX0KPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcm0tPmV2ZW50 X2xvY2ssIGZsYWdzKTsKPiArCX0KPiArCj4gKwkvKiBhY2tub3dsZWRnZSBpbnRlcnJ1cHQocykg Ki8KPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfSU5UX0NMRUFSLCBpcnFfc3RhdHVz KTsKPiArCj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGhk bGNkX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVj dCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJLyogRW5z dXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCj4gKwloZGxjZF93cml0ZShoZGxjZCwgSERM Q0RfUkVHX0lOVF9NQVNLLCAwKTsKPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfSU5U X0NMRUFSLCB+MCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaGRsY2RfaXJxX3Bvc3RpbnN0YWxs KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArI2lmZGVmIENPTkZJR19ERUJVR19GUwo+ ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4g Kwl1bnNpZ25lZCBsb25nIGlycV9tYXNrID0gaGRsY2RfcmVhZChoZGxjZCwgSERMQ0RfUkVHX0lO VF9NQVNLKTsKPiArCj4gKwkvKiBlbmFibGUgZGVidWcgaW50ZXJydXB0cyAqLwo+ICsJaXJxX21h c2sgfD0gSERMQ0RfREVCVUdfSU5UX01BU0s7Cj4gKwo+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhE TENEX1JFR19JTlRfTUFTSywgaXJxX21hc2spOwo+ICsjZW5kaWYKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBoZGxjZF9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0pCj4gK3sKPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRl dl9wcml2YXRlOwo+ICsJLyogZGlzYWJsZSBhbGwgdGhlIGludGVycnVwdHMgdGhhdCB3ZSBtaWdo dCBoYXZlIGVuYWJsZWQgKi8KPiArCXVuc2lnbmVkIGxvbmcgaXJxX21hc2sgPSBoZGxjZF9yZWFk KGhkbGNkLCBIRExDRF9SRUdfSU5UX01BU0spOwo+ICsKPiArI2lmZGVmIENPTkZJR19ERUJVR19G Uwo+ICsJLyogZGlzYWJsZSBkZWJ1ZyBpbnRlcnJ1cHRzICovCj4gKwlpcnFfbWFzayAmPSB+SERM Q0RfREVCVUdfSU5UX01BU0s7Cj4gKyNlbmRpZgo+ICsKPiArCS8qIGRpc2FibGUgdnN5bmMgaW50 ZXJydXB0cyAqLwo+ICsJaXJxX21hc2sgJj0gfkhETENEX0lOVEVSUlVQVF9WU1lOQzsKPiArCj4g KwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLLCBpcnFfbWFzayk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgaGRsY2RfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtLCB1bnNpZ25lZCBpbnQgY3J0YykKPiArewo+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRl ICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwl1bnNpZ25lZCBpbnQgbWFzayA9IGhkbGNk X3JlYWQoaGRsY2QsIEhETENEX1JFR19JTlRfTUFTSyk7Cj4gKwo+ICsJaGRsY2Rfd3JpdGUoaGRs Y2QsIEhETENEX1JFR19JTlRfTUFTSywgbWFzayB8IEhETENEX0lOVEVSUlVQVF9WU1lOQyk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGhkbGNkX2Rpc2FibGVfdmJs YW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBjcnRjKQo+ICt7Cj4gKwlz dHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXVu c2lnbmVkIGludCBtYXNrID0gaGRsY2RfcmVhZChoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLKTsK PiArCj4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLLCBtYXNrICYgfkhE TENEX0lOVEVSUlVQVF9WU1lOQyk7Cj4gK30KPiArCj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMK PiArc3RhdGljIGludCBoZGxjZF9zaG93X3VuZGVycnVuX2NvdW50KHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1 Y3QgZHJtX2luZm9fbm9kZSAqKW0tPnByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJt ID0gbm9kZS0+bWlub3ItPmRldjsKPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2Qg PSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArCXNlcV9wcmludGYobSwgInVuZGVycnVuIDogJWRc biIsIGF0b21pY19yZWFkKCZoZGxjZC0+YnVmZmVyX3VuZGVycnVuX2NvdW50KSk7Cj4gKwlzZXFf cHJpbnRmKG0sICJkbWFfZW5kICA6ICVkXG4iLCBhdG9taWNfcmVhZCgmaGRsY2QtPmRtYV9lbmRf Y291bnQpKTsKPiArCXNlcV9wcmludGYobSwgImJ1c19lcnJvcjogJWRcbiIsIGF0b21pY19yZWFk KCZoZGxjZC0+YnVzX2Vycm9yX2NvdW50KSk7Cj4gKwlzZXFfcHJpbnRmKG0sICJ2c3luYyAgICA6 ICVkXG4iLCBhdG9taWNfcmVhZCgmaGRsY2QtPnZzeW5jX2NvdW50KSk7Cj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCBoZGxjZF9zaG93X3B4bGNsb2NrKHN0cnVjdCBzZXFfZmls ZSAqbSwgdm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChz dHJ1Y3QgZHJtX2luZm9fbm9kZSAqKW0tPnByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gbm9kZS0+bWlub3ItPmRldjsKPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRs Y2QgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJdW5zaWduZWQgbG9uZyBjbGtyYXRlID0gY2xrX2dl dF9yYXRlKGhkbGNkLT5jbGspOwo+ICsJdW5zaWduZWQgbG9uZyBtb2RlX2Nsb2NrID0gaGRsY2Qt PmNydGMubW9kZS5jcnRjX2Nsb2NrICogMTAwMDsKPiArCj4gKwlzZXFfcHJpbnRmKG0sICJodyAg OiAlbHVcbiIsIGNsa3JhdGUpOwo+ICsJc2VxX3ByaW50ZihtLCAibW9kZTogJWx1XG4iLCBtb2Rl X2Nsb2NrKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9pbmZv X2xpc3QgaGRsY2RfZGVidWdmc19saXN0W10gPSB7Cj4gKwl7ICJpbnRlcnJ1cHRfY291bnQiLCBo ZGxjZF9zaG93X3VuZGVycnVuX2NvdW50LCAwIH0sCj4gKwl7ICJjbG9ja3MiLCBoZGxjZF9zaG93 X3B4bGNsb2NrLCAwIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGhkbGNkX2RlYnVnZnNfaW5p dChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKPiArewo+ICsJcmV0dXJuIGRybV9kZWJ1Z2ZzX2Ny ZWF0ZV9maWxlcyhoZGxjZF9kZWJ1Z2ZzX2xpc3QsCj4gKwkJQVJSQVlfU0laRShoZGxjZF9kZWJ1 Z2ZzX2xpc3QpLAltaW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGhkbGNkX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKPiAr ewo+ICsJZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKGhkbGNkX2RlYnVnZnNfbGlzdCwKPiArCQlB UlJBWV9TSVpFKGhkbGNkX2RlYnVnZnNfbGlzdCksIG1pbm9yKTsKPiArfQo+ICsjZW5kaWYKPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7Cj4gKwkub3du ZXIJCT0gVEhJU19NT0RVTEUsCj4gKwkub3BlbgkJPSBkcm1fb3BlbiwKPiArCS5yZWxlYXNlCT0g ZHJtX3JlbGVhc2UsCj4gKwkudW5sb2NrZWRfaW9jdGwJPSBkcm1faW9jdGwsCj4gKyNpZmRlZiBD T05GSUdfQ09NUEFUCj4gKwkuY29tcGF0X2lvY3RsCT0gZHJtX2NvbXBhdF9pb2N0bCwKPiArI2Vu ZGlmCj4gKwkucG9sbAkJPSBkcm1fcG9sbCwKPiArCS5yZWFkCQk9IGRybV9yZWFkLAo+ICsJLmxs c2VlawkJPSBub29wX2xsc2VlaywKPiArCS5tbWFwCQk9IGRybV9nZW1fY21hX21tYXAsCj4gK307 Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgaGRsY2RfZHJpdmVyID0gewo+ICsJLmRy aXZlcl9mZWF0dXJlcyA9IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9HRU0gfAo+ICsJCQkgICBE UklWRVJfTU9ERVNFVCB8IERSSVZFUl9QUklNRSB8Cj4gKwkJCSAgIERSSVZFUl9BVE9NSUMsCj4g KwkucHJlY2xvc2UgPSBoZGxjZF9wcmVjbG9zZSwKPiArCS5sYXN0Y2xvc2UgPSBoZGxjZF9sYXN0 Y2xvc2UsCj4gKwkuaXJxX2hhbmRsZXIgPSBoZGxjZF9pcnEsCj4gKwkuaXJxX3ByZWluc3RhbGwg PSBoZGxjZF9pcnFfcHJlaW5zdGFsbCwKPiArCS5pcnFfcG9zdGluc3RhbGwgPSBoZGxjZF9pcnFf cG9zdGluc3RhbGwsCj4gKwkuaXJxX3VuaW5zdGFsbCA9IGhkbGNkX2lycV91bmluc3RhbGwsCj4g KwkuZ2V0X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFua19ub19od19jb3VudGVyLAo+ICsJLmVu YWJsZV92YmxhbmsgPSBoZGxjZF9lbmFibGVfdmJsYW5rLAo+ICsJLmRpc2FibGVfdmJsYW5rID0g aGRsY2RfZGlzYWJsZV92YmxhbmssCj4gKwkuZ2VtX2ZyZWVfb2JqZWN0ID0gZHJtX2dlbV9jbWFf ZnJlZV9vYmplY3QsCj4gKwkuZ2VtX3ZtX29wcyA9ICZkcm1fZ2VtX2NtYV92bV9vcHMsCj4gKwku ZHVtYl9jcmVhdGUgPSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSwKPiArCS5kdW1iX21hcF9vZmZz ZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsCj4gKwkuZHVtYl9kZXN0cm95ID0gZHJt X2dlbV9kdW1iX2Rlc3Ryb3ksCj4gKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmlt ZV9oYW5kbGVfdG9fZmQsCj4gKwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9m ZF90b19oYW5kbGUsCj4gKwkuZ2VtX3ByaW1lX2V4cG9ydCA9IGRybV9nZW1fcHJpbWVfZXhwb3J0 LAo+ICsJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKPiArCS5nZW1f cHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAo+ICsJ LmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2df dGFibGUsCj4gKwkuZ2VtX3ByaW1lX3ZtYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAo+ICsJ LmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCj4gKwkuZ2VtX3By aW1lX21tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAo+ICsjaWZkZWYgQ09ORklHX0RFQlVH X0ZTCj4gKwkuZGVidWdmc19pbml0ID0gaGRsY2RfZGVidWdmc19pbml0LAo+ICsJLmRlYnVnZnNf Y2xlYW51cCA9IGhkbGNkX2RlYnVnZnNfY2xlYW51cCwKPiArI2VuZGlmCj4gKwkuZm9wcyA9ICZm b3BzLAo+ICsJLm5hbWUgPSAiaGRsY2QiLAo+ICsJLmRlc2MgPSAiQVJNIEhETENEIENvbnRyb2xs ZXIgRFJNIiwKPiArCS5kYXRlID0gIjIwMTUxMDIxIiwKPiArCS5tYWpvciA9IDEsCj4gKwkubWlu b3IgPSAwLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBoZGxjZF9hZGRfY29tcG9uZW50cyhzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtYXN0ZXIgKm1hc3RlcikKPiArewo+ICsJc3RydWN0IGRl dmljZV9ub2RlICpwb3J0LCAqZXAgPSBOVUxMOwo+ICsJaW50IHJldCA9IC1FTlhJTzsKPiArCj4g KwlpZiAoIWRldi0+b2Zfbm9kZSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlkbyB7Cj4g KwkJZXAgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIGVwKTsKPiAr CQlpZiAoIWVwKQo+ICsJCQlicmVhazsKPiArCj4gKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxh YmxlKGVwKSkgewo+ICsJCQlvZl9ub2RlX3B1dChlcCk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0K PiArCj4gKwkJcG9ydCA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZXApOwo+ICsJ CW9mX25vZGVfcHV0KGVwKTsKPiArCQlpZiAoIXBvcnQgfHwgIW9mX2RldmljZV9pc19hdmFpbGFi bGUocG9ydCkpIHsKPiArCQkJb2Zfbm9kZV9wdXQocG9ydCk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJ CX0KPiArCj4gKwkJcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfY2hpbGQobWFzdGVyLCBjb21w YXJlX2RldiwgcG9ydCk7Cj4gKwkJb2Zfbm9kZV9wdXQocG9ydCk7Cj4gKwl9IHdoaWxlICgxKTsK PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGhkbGNkX2RybV9iaW5k KHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPiAr CXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2Q7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWhk bGNkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpoZGxjZCksIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCFoZGxjZCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlkcm0gPSBkcm1fZGV2X2Fs bG9jKCZoZGxjZF9kcml2ZXIsIGRldik7Cj4gKwlpZiAoIWRybSkKPiArCQlyZXR1cm4gLUVOT01F TTsKPiArCj4gKwlkcm0tPmRldl9wcml2YXRlID0gaGRsY2Q7Cj4gKwo+ICsJcmV0ID0gZHJtX2Rl dl9zZXRfdW5pcXVlKGRybSwgIiVzIiwgZGV2X25hbWUoZGV2KSk7Cj4gKwlpZiAocmV0KQo+ICsJ CWdvdG8gZXJyX2ZyZWU7Cj4gKwo+ICsJaGRsY2Rfc2V0dXBfbW9kZV9jb25maWcoZHJtKTsKPiAr Cj4gKwlyZXQgPSBoZGxjZF9sb2FkKGRybSwgMCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJy X2ZyZWU7Cj4gKwo+ICsJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOwo+ICsJaWYgKHJl dCkKPiArCQlnb3RvIGVycl91bmxvYWQ7Cj4gKwo+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgZHJt KTsKPiArCj4gKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZGV2LCBkcm0pOwo+ICsJaWYgKHJl dCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGJpbmQgYWxsIGNvbXBvbmVudHNcbiIpOwo+ ICsJCWdvdG8gZXJyX3VucmVnaXN0ZXI7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX3ZibGFua19p bml0KGRybSwgZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0Yyk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpc2UgdmJsYW5rXG4iKTsKPiArCQlnb3Rv IGVycl92Ymxhbms7Cj4gKwl9Cj4gKwlkcm0tPnZibGFua19kaXNhYmxlX2FsbG93ZWQgPSB0cnVl Owo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19yZXNldChkcm0pOwo+ICsJZHJtX2ttc19oZWxwZXJf cG9sbF9pbml0KGRybSk7Cj4gKwo+ICsJaGRsY2QtPmZiZGV2ID0gZHJtX2ZiZGV2X2NtYV9pbml0 KGRybSwgMzIsIGRybS0+bW9kZV9jb25maWcubnVtX2NydGMsCj4gKwkJCQkJICBkcm0tPm1vZGVf Y29uZmlnLm51bV9jb25uZWN0b3IpOwo+ICsKPiArCWlmIChJU19FUlIoaGRsY2QtPmZiZGV2KSkg ewo+ICsJCXJldCA9IFBUUl9FUlIoaGRsY2QtPmZiZGV2KTsKPiArCQloZGxjZC0+ZmJkZXYgPSBO VUxMOwo+ICsJCWdvdG8gZXJyX2ZiZGV2Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiAr ZXJyX2ZiZGV2Ogo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7Cj4gKwlkcm1fbW9k ZV9jb25maWdfY2xlYW51cChkcm0pOwo+ICsJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7Cj4gK2Vy cl92Ymxhbms6Cj4gKwljb21wb25lbnRfdW5iaW5kX2FsbChkZXYsIGRybSk7Cj4gK2Vycl91bnJl Z2lzdGVyOgo+ICsJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7Cj4gK2Vycl91bmxvYWQ6Cj4gKwlw bV9ydW50aW1lX2dldF9zeW5jKGRybS0+ZGV2KTsKPiArCWRybV9pcnFfdW5pbnN0YWxsKGRybSk7 Cj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRybS0+ZGV2KTsKPiArCXBtX3J1bnRpbWVfZGlzYWJs ZShkcm0tPmRldik7Cj4gKwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVhc2UoZHJtLT5kZXYp Owo+ICsJZGV2bV9jbGtfcHV0KGRldiwgaGRsY2QtPmNsayk7Cj4gK2Vycl9mcmVlOgo+ICsJZHJt X2Rldl91bnJlZihkcm0pOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGhkbGNkX2RybV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3QgaGRsY2Rf ZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlpZiAoaGRsY2Qt PmZiZGV2KSB7Cj4gKwkJZHJtX2ZiZGV2X2NtYV9maW5pKGhkbGNkLT5mYmRldik7Cj4gKwkJaGRs Y2QtPmZiZGV2ID0gTlVMTDsKPiArCX0KPiArCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkcm0p Owo+ICsJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOwo+ICsJZHJtX3ZibGFua19jbGVh bnVwKGRybSk7Cj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKGRybS0+ZGV2KTsKPiArCWRybV9pcnFf dW5pbnN0YWxsKGRybSk7Cj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRybS0+ZGV2KTsKPiArCXBt X3J1bnRpbWVfZGlzYWJsZShkcm0tPmRldik7Cj4gKwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX3Jl bGVhc2UoZHJtLT5kZXYpOwo+ICsJaWYgKCFJU19FUlIoaGRsY2QtPmNsaykpIHsKPiArCQlkZXZt X2Nsa19wdXQoZHJtLT5kZXYsIGhkbGNkLT5jbGspOwo+ICsJCWhkbGNkLT5jbGsgPSBOVUxMOwo+ ICsJfQo+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiArCWRybV9kZXZfdW5yZWdp c3Rlcihkcm0pOwo+ICsJZHJtX2Rldl91bnJlZihkcm0pOwo+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9 IE5VTEw7Cj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyBoZGxjZF9tYXN0ZXJfb3BzID0gewo+ ICsJLmFkZF9jb21wb25lbnRzCT0gaGRsY2RfYWRkX2NvbXBvbmVudHMsCj4gKwkuYmluZAkJPSBo ZGxjZF9kcm1fYmluZCwKPiArCS51bmJpbmQJCT0gaGRsY2RfZHJtX3VuYmluZCwKPiArfTsKPiAr Cj4gK3N0YXRpYyBpbnQgaGRsY2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK PiArewo+ICsJcmV0dXJuIGNvbXBvbmVudF9tYXN0ZXJfYWRkKCZwZGV2LT5kZXYsICZoZGxjZF9t YXN0ZXJfb3BzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBoZGxjZF9yZW1vdmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBkZXYt PmRldiwgJmhkbGNkX21hc3Rlcl9vcHMpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICBoZGxjZF9vZl9tYXRjaFtdID0gewo+ICsJeyAu Y29tcGF0aWJsZQk9ICJhcm0saGRsY2QiIH0sCj4gKwl7fSwKPiArfTsKPiArTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgaGRsY2Rfb2ZfbWF0Y2gpOwo+ICsKPiArc3RhdGljIGludCBoZGxjZF9wbV9z dXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRy bSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsK PiArCWlmIChwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQo+ICsJCXJldHVybiAwOwo+ICsKPiAr CWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMs ICZkcm0tPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkKPiArCQloZGxjZF9jcnRjX3N1c3Bl bmQoY3J0Yyk7Cj4gKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRybSk7Cj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCBoZGxjZF9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2 KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7 Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwo+ICsJaWYgKCFwbV9ydW50aW1lX3N1c3Bl bmRlZChkZXYpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRy bSk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkcm0tPm1vZGVfY29uZmlnLmNydGNf bGlzdCwgaGVhZCkKPiArCQloZGxjZF9jcnRjX3Jlc3VtZShjcnRjKTsKPiArCWRybV9tb2Rlc2V0 X3VubG9ja19hbGwoZHJtKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgU0lNUExF X0RFVl9QTV9PUFMoaGRsY2RfcG1fb3BzLCBoZGxjZF9wbV9zdXNwZW5kLCBoZGxjZF9wbV9yZXN1 bWUpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaGRsY2RfcGxhdGZvcm1f ZHJpdmVyID0gewo+ICsJLnByb2JlCQk9IGhkbGNkX3Byb2JlLAo+ICsJLnJlbW92ZQkJPSBoZGxj ZF9yZW1vdmUsCj4gKwkuZHJpdmVyCT0gewo+ICsJCS5uYW1lID0gImhkbGNkIiwKPiArCQkucG0g PSAmaGRsY2RfcG1fb3BzLAo+ICsJCS5vZl9tYXRjaF90YWJsZQk9IGhkbGNkX29mX21hdGNoLAo+ ICsJfSwKPiArfTsKPiArCj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaGRsY2RfcGxhdGZvcm1f ZHJpdmVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIkxpdml1IER1ZGF1Iik7Cj4gK01PRFVMRV9E RVNDUklQVElPTigiQVJNIEhETENEIERSTSBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uZjJlZWRmYgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXJtL2hkbGNkX2Rydi5oCj4gQEAgLTAsMCArMSw0MiBAQAo+ICsvKgo+ICsgKiAgQVJN IEhETENEIENvbnRyb2xsZXIgcmVnaXN0ZXIgZGVmaW5pdGlvbgo+ICsgKi8KPiArCj4gKyNpZm5k ZWYgX19IRExDRF9EUlZfSF9fCj4gKyNkZWZpbmUgX19IRExDRF9EUlZfSF9fCj4gKwo+ICtzdHJ1 Y3QgaGRsY2RfZHJtX3ByaXZhdGUgewo+ICsJdm9pZCBfX2lvbWVtCQkJKm1taW87Cj4gKwlzdHJ1 Y3QgY2xrCQkJKmNsazsKPiArCXN0cnVjdCBkcm1fZmJkZXZfY21hCQkqZmJkZXY7Cj4gKwlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyCQkqZmI7Cj4gKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2 ZW50CSpldmVudDsKPiArCXN0cnVjdCBkcm1fY3J0YwkJCWNydGM7Cj4gKwlzdHJ1Y3QgZHJtX3Bs YW5lCQkqcGxhbmU7Cj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiArCWF0b21pY190IGJ1ZmZl cl91bmRlcnJ1bl9jb3VudDsKPiArCWF0b21pY190IGJ1c19lcnJvcl9jb3VudDsKPiArCWF0b21p Y190IHZzeW5jX2NvdW50Owo+ICsJYXRvbWljX3QgZG1hX2VuZF9jb3VudDsKPiArI2VuZGlmCj4g K307Cj4gKwo+ICsjZGVmaW5lIGNydGNfdG9faGRsY2RfcHJpdih4KQljb250YWluZXJfb2YoeCwg c3RydWN0IGhkbGNkX2RybV9wcml2YXRlLCBjcnRjKQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lk IGhkbGNkX3dyaXRlKHN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QsCj4gKwkJCSAgICAg ICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsdWUpCj4gK3sKPiArCXdyaXRlbCh2YWx1ZSwgaGRs Y2QtPm1taW8gKyByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHUzMiBoZGxjZF9yZWFk KHN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QsIHVuc2lnbmVkIGludCByZWcpCj4gK3sK PiArCXJldHVybiByZWFkbChoZGxjZC0+bW1pbyArIHJlZyk7Cj4gK30KPiArCj4gK2ludCBoZGxj ZF9zZXR1cF9jcnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICt2b2lkIGhkbGNkX3NldF9z Y2Fub3V0KHN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QpOwo+ICt2b2lkIGhkbGNkX2Ny dGNfc3VzcGVuZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICt2b2lkIGhkbGNkX2NydGNfcmVz dW1lKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gKwo+ICsjZW5kaWYgLyogX19IRExDRF9EUlZf SF9fICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfcmVncy5oIGIv ZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9yZWdzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLjY2Nzk5ZWIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2FybS9oZGxjZF9yZWdzLmgKPiBAQCAtMCwwICsxLDg3IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCAoQykgMjAxMywyMDE0IEFSTSBMaW1pdGVkCj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBp cyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljCj4gKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBk aXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCj4gKyAqIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4g KyAqICBBUk0gSERMQ0QgQ29udHJvbGxlciByZWdpc3RlciBkZWZpbml0aW9uCj4gKyAqLwo+ICsK PiArI2lmbmRlZiBfX0hETENEX1JFR1NfSF9fCj4gKyNkZWZpbmUgX19IRExDRF9SRUdTX0hfXwo+ ICsKPiArLyogcmVnaXN0ZXIgb2Zmc2V0cyAqLwo+ICsjZGVmaW5lIEhETENEX1JFR19WRVJTSU9O CQkweDAwMDAJLyogcm8gKi8KPiArI2RlZmluZSBIRExDRF9SRUdfSU5UX1JBV1NUQVQJCTB4MDAx MAkvKiBydyAqLwo+ICsjZGVmaW5lIEhETENEX1JFR19JTlRfQ0xFQVIJCTB4MDAxNAkvKiB3byAq Lwo+ICsjZGVmaW5lIEhETENEX1JFR19JTlRfTUFTSwkJMHgwMDE4CS8qIHJ3ICovCj4gKyNkZWZp bmUgSERMQ0RfUkVHX0lOVF9TVEFUVVMJCTB4MDAxYwkvKiBybyAqLwo+ICsjZGVmaW5lIEhETENE X1JFR19GQl9CQVNFCQkweDAxMDAJLyogcncgKi8KPiArI2RlZmluZSBIRExDRF9SRUdfRkJfTElO RV9MRU5HVEgJMHgwMTA0CS8qIHJ3ICovCj4gKyNkZWZpbmUgSERMQ0RfUkVHX0ZCX0xJTkVfQ09V TlQJCTB4MDEwOAkvKiBydyAqLwo+ICsjZGVmaW5lIEhETENEX1JFR19GQl9MSU5FX1BJVENICQkw eDAxMGMJLyogcncgKi8KPiArI2RlZmluZSBIRExDRF9SRUdfQlVTX09QVElPTlMJCTB4MDExMAkv KiBydyAqLwo+ICsjZGVmaW5lIEhETENEX1JFR19WX1NZTkMJCTB4MDIwMAkvKiBydyAqLwo+ICsj ZGVmaW5lIEhETENEX1JFR19WX0JBQ0tfUE9SQ0gJCTB4MDIwNAkvKiBydyAqLwo+ICsjZGVmaW5l IEhETENEX1JFR19WX0RBVEEJCTB4MDIwOAkvKiBydyAqLwo+ICsjZGVmaW5lIEhETENEX1JFR19W X0ZST05UX1BPUkNICQkweDAyMGMJLyogcncgKi8KPiArI2RlZmluZSBIRExDRF9SRUdfSF9TWU5D CQkweDAyMTAJLyogcncgKi8KPiArI2RlZmluZSBIRExDRF9SRUdfSF9CQUNLX1BPUkNICQkweDAy MTQJLyogcncgKi8KPiArI2RlZmluZSBIRExDRF9SRUdfSF9EQVRBCQkweDAyMTgJLyogcncgKi8K PiArI2RlZmluZSBIRExDRF9SRUdfSF9GUk9OVF9QT1JDSAkJMHgwMjFjCS8qIHJ3ICovCj4gKyNk ZWZpbmUgSERMQ0RfUkVHX1BPTEFSSVRJRVMJCTB4MDIyMAkvKiBydyAqLwo+ICsjZGVmaW5lIEhE TENEX1JFR19DT01NQU5ECQkweDAyMzAJLyogcncgKi8KPiArI2RlZmluZSBIRExDRF9SRUdfUElY RUxfRk9STUFUCQkweDAyNDAJLyogcncgKi8KPiArI2RlZmluZSBIRExDRF9SRUdfUkVEX1NFTEVD VAkJMHgwMjQ0CS8qIHJ3ICovCj4gKyNkZWZpbmUgSERMQ0RfUkVHX0dSRUVOX1NFTEVDVAkJMHgw MjQ4CS8qIHJ3ICovCj4gKyNkZWZpbmUgSERMQ0RfUkVHX0JMVUVfU0VMRUNUCQkweDAyNGMJLyog cncgKi8KPiArCj4gKy8qIHZlcnNpb24gKi8KPiArI2RlZmluZSBIRExDRF9QUk9EVUNUX0lECQkw eDFDREMwMDAwCj4gKyNkZWZpbmUgSERMQ0RfUFJPRFVDVF9NQVNLCQkweEZGRkYwMDAwCj4gKyNk ZWZpbmUgSERMQ0RfVkVSU0lPTl9NQUpPUl9NQVNLCTB4MDAwMEZGMDAKPiArI2RlZmluZSBIRExD RF9WRVJTSU9OX01JTk9SX01BU0sJMHgwMDAwMDBGRgo+ICsKPiArLyogaW50ZXJydXB0cyAqLwo+ ICsjZGVmaW5lIEhETENEX0lOVEVSUlVQVF9ETUFfRU5ECQkoMSA8PCAwKQo+ICsjZGVmaW5lIEhE TENEX0lOVEVSUlVQVF9CVVNfRVJST1IJKDEgPDwgMSkKPiArI2RlZmluZSBIRExDRF9JTlRFUlJV UFRfVlNZTkMJCSgxIDw8IDIpCj4gKyNkZWZpbmUgSERMQ0RfSU5URVJSVVBUX1VOREVSUlVOCSgx IDw8IDMpCj4gKyNkZWZpbmUgSERMQ0RfREVCVUdfSU5UX01BU0sJCShIRExDRF9JTlRFUlJVUFRf RE1BX0VORCB8ICBcCj4gKwkJCQkJSERMQ0RfSU5URVJSVVBUX0JVU19FUlJPUiB8IFwKPiArCQkJ CQlIRExDRF9JTlRFUlJVUFRfVU5ERVJSVU4pCj4gKwo+ICsvKiBwb2xhcml0aWVzICovCj4gKyNk ZWZpbmUgSERMQ0RfUE9MQVJJVFlfVlNZTkMJCSgxIDw8IDApCj4gKyNkZWZpbmUgSERMQ0RfUE9M QVJJVFlfSFNZTkMJCSgxIDw8IDEpCj4gKyNkZWZpbmUgSERMQ0RfUE9MQVJJVFlfREFUQUVOCQko MSA8PCAyKQo+ICsjZGVmaW5lIEhETENEX1BPTEFSSVRZX0RBVEEJCSgxIDw8IDMpCj4gKyNkZWZp bmUgSERMQ0RfUE9MQVJJVFlfUElYRUxDTEsJCSgxIDw8IDQpCj4gKwo+ICsvKiBjb21tYW5kcyAq Lwo+ICsjZGVmaW5lIEhETENEX0NPTU1BTkRfRElTQUJMRQkJKDAgPDwgMCkKPiArI2RlZmluZSBI RExDRF9DT01NQU5EX0VOQUJMRQkJKDEgPDwgMCkKPiArCj4gKy8qIHBpeGVsIGZvcm1hdCAqLwo+ ICsjZGVmaW5lIEhETENEX1BJWEVMX0ZNVF9MSVRUTEVfRU5ESUFOCSgwIDw8IDMxKQo+ICsjZGVm aW5lIEhETENEX1BJWEVMX0ZNVF9CSUdfRU5ESUFOCSgxIDw8IDMxKQo+ICsjZGVmaW5lIEhETENE X0JZVEVTX1BFUl9QSVhFTF9NQVNLCSgzIDw8IDMpCj4gKwo+ICsvKiBidXMgb3B0aW9ucyAqLwo+ ICsjZGVmaW5lIEhETENEX0JVU19CVVJTVF9NQVNLCQkweDAxZgo+ICsjZGVmaW5lIEhETENEX0JV U19NQVhfT1VUU1RBTkQJCTB4ZjAwCj4gKyNkZWZpbmUgSERMQ0RfQlVTX0JVUlNUX05PTkUJCSgw IDw8IDApCj4gKyNkZWZpbmUgSERMQ0RfQlVTX0JVUlNUXzEJCSgxIDw8IDApCj4gKyNkZWZpbmUg SERMQ0RfQlVTX0JVUlNUXzIJCSgxIDw8IDEpCj4gKyNkZWZpbmUgSERMQ0RfQlVTX0JVUlNUXzQJ CSgxIDw8IDIpCj4gKyNkZWZpbmUgSERMQ0RfQlVTX0JVUlNUXzgJCSgxIDw8IDMpCj4gKyNkZWZp bmUgSERMQ0RfQlVTX0JVUlNUXzE2CQkoMSA8PCA0KQo+ICsKPiArLyogTWF4IHJlc29sdXRpb24g c3VwcG9ydGVkIGlzIDQwOTZ4NDA5NiwgMzJicHAgKi8KPiArI2RlZmluZSBIRExDRF9NQVhfWFJF UwkJCTQwOTYKPiArI2RlZmluZSBIRExDRF9NQVhfWVJFUwkJCTQwOTYKPiArCj4gKyNkZWZpbmUg TlJfUEFMRVRURQkJCTI1Ngo+ICsKPiArI2VuZGlmIC8qIF9fSERMQ0RfUkVHU19IX18gKi8KPiAt LSAKPiAyLjYuMgo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29y cG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK