From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v1] EDAC, armv8: Add Cache Error Reporting driver for ARMv8 processors From: James Morse Message-Id: <5A5DF9F4.90101@arm.com> Date: Tue, 16 Jan 2018 13:11:16 +0000 To: Kyle Yan , Mark Rutland Cc: suzuki.poulose@arm.com, bp@alien8.de, mchehab@kernel.org, linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org List-ID: SGkgS3lsZSwKCihUaGFua3MgZm9yIGxvb3BpbmcgbWUgaW4gTWFyayEpCgpPbiAxNi8wMS8xOCAw MTowMCwgS3lsZSBZYW4gd3JvdGU6Cj4gT24gMjAxOC0wMS0xNSAwNjo0NCwgTWFyayBSdXRsYW5k IHdyb3RlOgo+PiBPbiBGcmksIEphbiAxMiwgMjAxOCBhdCAwNDo1MDoyNlBNIC0wODAwLCBLeWxl IFlhbiB3cm90ZToKPj4+IEludGVycnVwdCBiYXNlZCBFREFDIGRyaXZlciBmb3IgQVJNdjggcHJv Y2Vzc29ycyB0aGF0IGltcGxlbWVudAo+Pj4gUkFTIGZvciBlcnJvciBkZXRlY3Rpb24gb2YgQ1BV IGNhY2hlcyBhbmQgbHNvIGFsbG93cyBvcHRpb25hbCBwb2xsaW5nCj4+PiBvZiBlcnJvciBzeW5k cm9tZSByZWdpc3RlcnMgaWYgaW50ZXJydXB0cyBhcmUgbm90IHN1cHBvcnRlZC4KPj4KPj4gSXMg dGhpcyB1c2luZyB0aGUgYXJjaGl0ZWN0dXJhbCBSQVMgZXh0ZW5zaW9ucywgb3Igc29tZXRoaW5n IHNwZWNpZmljIHRvCj4+IFFDIENQVXM/IEl0IHdvdWxkIGJlIGdvb2QgdG8gY2FsbCB0aGlzIG91 dCBleHBsaWNpdGx5Lgo+Pgo+PiBJZiBpdCdzIHRoZSBsYXR0ZXIsIHRoaXMgbmVlZHMgcmV3b3Jk aW5nIHRvIGJlIGNsZWFyIHRoYXQgdGhpcyBpcwo+PiBzcGVjaWZpYyB0byBRQyBDUFVzLCBhbmQg aXMgbm90IGEgZ2VuZXJpYyBBUk12OCBmZWF0dXJlLgoKPiBUaGlzIGlzIG5vdCBzcGVjaWZpYyB0 byBRQyBDUFVzIGFuZCBsb29rcyBhdCB0aGUgc3lzdGVtIHJlZ2lzdGVycyBkZWZpbmVkIGJ5IHRo ZQo+IFJBUyBleHRlbnNpb25zLgoKRXhjZWxsZW50LCBzbyBpdCBzaG91bGQgd29yayBvbiB0aGUg RlZQIHRvbyEKClsuLi5dCgoKPj4gSWYgdGhpcyBpcyBhcmNoaXRlY3R1cmFsLCBob3cgaXMgdGhp cyBleHBlY3RlZCB0byB3b3JrIG9uIEFDUEkgc3lzdGVtcz8KPj4KPiBUaGUgY3VycmVudCBkZXNp Z24gb2YgdGhpcyBkcml2ZXIgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQvdXNlZCBvbiBtb2JpbGUgZGV2 aWNlcyBzbwo+IEkgZG8gbm90IHlldCBrbm93IGhvdyBpdCB3aWxsIHdvcmsgb24gQUNQSSBzeXN0 ZW1zLgoKRm9yIEFDUEkgc3lzdGVtcyB3YW50aW5nIHRvIGRvIGtlcm5lbC1maXJzdCBJIGFzc3Vt ZSB0aGVyZSB3aWxsIG5lZWQgdG8gYmUgc29tZQpkZXNjcmlwdGlvbiBvZiB3aGVyZSB0aGUgbW1p byBSQVMgbm9kZXMgYXJlIGluIHRoZSBhZGRyZXNzIHNwYWNlIGFuZCB3aGF0CmludGVycnVwdHMg ZXRjIHRoZXkgZ2VuZXJhdGUuIFRoaXMgd291bGQgYmUgZXF1aXZhbGVudCB0byB0aGUgZGF0YSBp biB0aGUgRFQuCgpIb3cgY29tZSB5b3UgZG9uJ3QgcmVhZCBFUlJJRFIgdG8gZmluZCBvdXQgaG93 IG1hbnkgbm9kZXMgYXJlIGJlaGluZCB0aGUgQ1BVCmludGVyZmFjZSByZWdpc3RlcnM/IFN1cmVs eSB5b3UgaGF2ZSB0byBwb2xsIGFsbCBvZiB0aGVtPwoKSWYgeW91J3JlIHBvbGxpbmcgdGhpcywg eW91IG11c3QgaGF2ZSB0byBwb2tlIHRoZSBzeXN0ZW0gcmVnaXN0ZXIgZXZlcnktc2Vjb25kCm9u IGV2ZXJ5LUNQVS4gV291bGRuJ3QgaXQgYmUgYmV0dGVyIHRvIHVzZSB0aGUgbWVtb3J5LW1hcHBl ZCBpbnRlcmZhY2Ugb24gb25lCkNQVSB0byBkbyB0aGlzPwoKWW91IGFyZW4ndCB0b3VjaGluZyBF UlI8bj5GUiBhdCBhbGwsIHRoaXMgdGVsbHMgdXMgd2hldGhlciB0aGUgbm9kZSg/KSBzdXBwb3J0 cwplcnJvciByZWNvdmVyeSBpbnRlcnJ1cHRzLCBjb3VudGVyIGZvcm1hdHMgZXRjLgoKCj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwo+ Pj4gaW5kZXggOTZhZmIyYS4uNDdhNjhlMyAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZWRhYy9L Y29uZmlnCj4+PiArKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwo+Pj4gQEAgLTQ1Nyw0ICs0NTcs MjUgQEAgY29uZmlnIEVEQUNfWEdFTkUKPj4+ICAgICAgICBTdXBwb3J0IGZvciBlcnJvciBkZXRl Y3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlCj4+PiAgICAgICAgQVBNIFgtR2VuZSBmYW1pbHkg b2YgU09Dcy4KPj4+Cj4+PiArY29uZmlnIEVEQUNfQVJNVjgKPj4+ICsgICAgZGVwZW5kcyBvbiAo QVJNIHx8IEFSTTY0KQoKQXMgeW91IGFyZSBhY2Nlc3Npbmcgc3lzdGVtIHJlZ2lzdGVycyB0aGlz IHNob3VsZCBkZXBlbmQgb24gJ0FSTTY0X1JBU19FWFROJwp0b28sIGFuZCByZWdpc3RlciBhY2Nl c3NlcyBuZWVkIHRvIGJlIGJlaGluZCBzb21ldGhpbmcgbGlrZQpjcHVzX2hhdmVfY29uc3RfY2Fw KEFSTTY0X1JBU19FWFROKS4KClRoZSBwYXRjaCB0aGF0IGFkZHMgdGhlc2UgYml0cyBpcyBoZXJl OgpodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9hcm0ta2VybmVsL21zZzYyODk5Ny5odG1s CgooSSBkb24ndCBrbm93IGhvdyBjcHVmZWF0dXJlIGRldGVjdGlvbiB3b3JrcyBvbiAzMmJpdCkK Cgo+Pj4gKyAgICB0cmlzdGF0ZSAiQVJNdjggTDEvTDIvTDMvU0NVIENhY2hlcyBFQ0MiCj4+PiAr ICAgIGhlbHAKPj4+ICsgICAgICAgU3VwcG9ydCBmb3IgZXJyb3IgZGV0ZWN0aW9uIGFuZCBjb3Jy ZWN0aW9uIG9uIEFSTXY4IGNvcmVzCj4+PiArICAgICAgIHN1cHBvcnRpbmcgUkFTIGZlYXR1cmVz LiBSZXBvcnRzIGVycm9ycyBjYXVnaHQgYnkgQVJNdjgKPj4+ICsgICAgICAgRUNDIG1lY2hhbmlz bS4KPj4+ICsgICAgICAgRm9yIGRlYnVnZ2luZyBpc3N1ZXMgaGF2aW5nIHRvIGRvIHdpdGggc3Rh YmlsaXR5IGFuZCBvdmVyYWxsIHN5c3RlbQo+Pj4gKyAgICAgICBoZWFsdGgsIHlvdSBzaG91bGQg cHJvYmFibHkgc2F5ICdZJyBoZXJlLgo+Pj4gKwo+Pj4gK2NvbmZpZyBFREFDX0FSTVY4X1BPTEwK Pj4+ICsgICAgZGVwZW5kcyBvbiBFREFDX0FSTVY4Cj4+PiArICAgIGJvb2wgIlBvbGwgb24gQVJN djggRUNDIHJlZ2lzdGVycyIKPj4+ICsgICAgaGVscAo+Pj4gKyAgICAgICBUaGlzIG9wdGlvbiBj aG9vc2VzIHdoZXRoZXIgb3Igbm90IHlvdSB3YW50IHRvIHBvbGwgb24gdGhlIEtyeW8zeHgKPj4+ ICsgICAgICAgRUNDIHJlZ2lzdGVycy4KPj4KPj4gQXJlIHRoZXNlIHJlZ2lzdGVycyBzcGVjaWZp YyB0byBLcnlvM3h4IChpLmUuIElNUExFTUVOVEFUSU9OIERFRklORUQpLAo+PiBvciBhcmUgdGhl eSBkZWZpbmVkIGJ5IHRoZSBSQVMgZXh0ZW5zaW9ucz8KPj4KPiBPb3BzISBUeXBvIGhlcmUuIFRo ZSByZWdpc3RlcnMgYXJlIGRlZmluZWQgYnkgUkFTIGV4dGVuc2lvbnMuCj4gCj4+PiAgICAgICAg ICBXaGVuIHRoaXMgaXMgZW5hYmxlZCwgdGhlIHBvbGxpbmcgcmF0ZSBjYW4gYmUgc2V0IGFzCj4+ PiArICAgICAgIGEgbW9kdWxlIHBhcmFtZXRlci4gQnkgZGVmYXVsdCwgaXQgd2lsbCBjYWxsIHRo ZSBwb2xsaW5nIGZ1bmN0aW9uCj4+PiArICAgICAgIGV2ZXJ5IHNlY29uZC4KCkFDUEkncyBmaXJt d2FyZS1maXJzdCBwb2xsaW5nIG1lY2hhbmlzbSBhbGxvd3MgZmlybXdhcmUgdG8gc3BlY2lmeSB0 aGUgcG9sbGluZwpyYXRlLiBIb3cgd2FzICdldmVyeSBzZWNvbmQnIHBpY2tlZD8gRG9lcyBpdCBk ZXBlbmQgb24gdGhlIFNvQz8KCgo+Pj4gKyAgICAgICBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBi ZSB1c2VkIGlmIHRoZSBhc3NvY2lhdGVkIGludGVycnVwdCBsaW5lcwo+Pj4gKyAgICAgICBhcmUg bm90IGVuYWJsZWQuCgpIb3cgZG9lcyB0aGUgdXNlciBrbm93PwoKCj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9lZGFjL2FybXY4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hcm12OF9lZGFjLmMKPj4+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi5kOTg2YzQ3Cj4+PiAtLS0g L2Rldi9udWxsCj4+PiArKysgYi9kcml2ZXJzL2VkYWMvYXJtdjhfZWRhYy5jCj4+PiBAQCAtMCww ICsxLDQ4OSBAQAo+Pj4gKy8qIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4+ICsgKgo+Pj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Cj4+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCj4+PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+PiArICoKPj4+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4+ ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgo+Pj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvZWRhYy5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51 eC9vZl9kZXZpY2UuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ PiArI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KPj4+ ICsjaW5jbHVkZSA8bGludXgvY3B1X3BtLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KCihOaXQ6IGFscGhhYmV0aWNhbCBv cmRlciBtYWtlcyBmb3IgZmV3ZXIgY29uZmxpY3RzIGluIHRoZSBmdXR1cmUpCgoKPj4+ICsjaW5j bHVkZSAiZWRhY19tYy5oIgo+Pj4gKyNpbmNsdWRlICJlZGFjX2RldmljZS5oIgo+Pj4gKwo+Pj4g K3N0YXRpYyBpbnQgcG9sbF9tc2VjID0gMTAwMDsKPj4+ICttb2R1bGVfcGFyYW0ocG9sbF9tc2Vj LCBpbnQsIDA0NDQpOwo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIHBhbmljX29uX3VlID0gMDsKPj4+ ICttb2R1bGVfcGFyYW1fbmFtZWQocGFuaWNfb25fdWUsIHBhbmljX29uX3VlLCBib29sLCAwNjY0 KTsKPj4+ICsKPj4+ICsjZGVmaW5lIEwxIDB4MAo+Pj4gKyNkZWZpbmUgTDIgMHgxCj4+PiArI2Rl ZmluZSBMMyAweDIKCj4+PiArI2RlZmluZSBFREFDX0NQVSAgICAiYXJtdjhfZWRhYyIKPj4+ICsK Pj4+ICsjZGVmaW5lIEVSUlhTVEFUVVNfVkFMSUQoYSkgICAgKChhID4+IDMwKSAmIDB4MSkKPj4+ ICsjZGVmaW5lIEVSUlhTVEFUVVNfVUUoYSkgICAgKChhID4+IDI5KSAmIDB4MSkKPj4+ICsjZGVm aW5lIEVSUlhTVEFUVVNfU0VSUihhKSAgICAoYSAmIDB4RkYpCj4+PiArCj4+PiArI2RlZmluZSBF UlJYTUlTQ19MVkwoYSkgICAgICAgICgoYSA+PiAxKSAmIDB4NykKPj4+ICsjZGVmaW5lIEVSUlhN SVNDX1dBWShhKSAgICAgICAgKChhID4+IDI4KSAmIDB4RikKCldoaWNoIEVSUjxuPk1JU0MgaXMg dGhpcz8gWzBdIGhhcyB0d28uIEF0IGZpcnN0IGdsYW5jZSB0aGVzZSBhcmUgYm90aAppbXBsZW1l bnRhdGlvbi1kZWZpbmVkLCBzbyB3ZSBjYW4ndCByZWx5IG9uIHRoZSB2YWx1ZXMuCgooTUlTQzAg aGFzIHNvbWUgYXJjaHRpdGVjdGVkLWxheW91dCwgaXQgc2VlbXMgd2UncmUgZXhwZWN0ZWQgdG8g a25vdyB3aGljaApsYXlvdXQgaXQgd2lsbCBiZSBiYXNlZCBvbiBFUlI8bj5GUiAtIGJ1dCBJIGNh bid0IHNlZSAnbHZsJyBvciAnd2F5JyBpbiBhbnkgb2YKdGhvc2UgbGF5b3V0cykuCgpZb3UgZG9u J3QgY2hlY2sgRVJSPG4+U1RBVFVTLk1WIHRvIGtub3cgaWYgdGhlICdNaXNjYWxsYW5lb3VzIFJl Z2lzdGVycyBWYWxpZCcuCgoKPj4+ICsjZGVmaW5lIEVSUlhDVExSX0VOQUJMRSAgICAgICAgMHgx MGYKClRoaXMgbG9va3MgbGlrZSBhIG1hZ2ljIHZhbHVlIHRvIHNldCBzb21lIGJpdHMuIENvdWxk IHlvdSBhZGQgZGVmaW5lcyB0byBuYW1lCmVhY2ggb25lLCB0aGVuIGNvbWJpbmUgc28gd2Uga25v dyB3aGF0IHdhcyBzZXQuClRoaXMgcmVnaXN0ZXIgaGFzIG9uZSBvZiB0d28gbGF5b3V0cywgaXQg c2VlbXMgZWFjaCBjb250cm9sIHBpY2tzIGEgbGF5b3V0LiBIb3cKY2FuIHdlIGtub3cgaWYgdGhl IHJlYWQvd3JpdGUgYml0cyBhcmUgY29tYmluZWQgb3Igc2VwYXJhdGU/IEl0IGxvb2tzIGxpa2Ug dGhpcwppbiBFUlI8bj5GUiB0b28uCgoKPj4+ICsjZGVmaW5lIEVSUlhNSVNDX09WRVJGTE9XICAg IDB4N0Y3RjAwMDAwMDAwVUxMCgpUaGlzIGxvb2tzIGxpa2UgYSBtYWdpYyB2YWx1ZSB3cml0dGVu IHRvIGEgcmVnaXN0ZXIgd2l0aCBhbiBpbXBkZWYgbGF5b3V0LgoKWy4uLl0KCj4+PiArc3RhdGlj IGlubGluZSB2b2lkIHNldF9lcnJ4Y3Rscl9lbDEodm9pZCkKPj4+ICt7Cj4+PiArICAgIGFzbSB2 b2xhdGlsZSgibXNyIHMzXzBfYzVfYzRfMSwgJTAiIDogOiAiciIgKEVSUlhDVExSX0VOQUJMRSkp Owo+Pj4gK30KCj4+Cj4+IFBsZWFzZSB1c2Uge3JlYWQsd3JpdGV9X3N5c3JlZygpLgo+Pgo+PiBJ ZiB0aGVzZSByZWdpc3RlcnMgYXJlIGRlZmluZWQgYnkgQVJNdjgsIHBsZWFzZSBwbGFjZSBkZWZp bml0aW9ucyBpbgo+PiBhcm02NCdzIDxhc20vc3lzcmVnLmg+Lgo+Pgo+IFdpbGwgZG8uCgpZZXMg cGxlYXNlIQoKKFRoZSBzM18wX2M1X2M0XzEgc3ludGF4IGlzbid0IHN1cHBvcnRlZCBieSBhbGwg dG9vbGNoYWlucywgc2VlIDcyYzU4Mzk1MTUyNjBkYwoiYXJtNjQ6IGdpY3YzOiBBbGxvdyBHSUN2 MyBjb21waWxhdGlvbiB3aXRoIG9sZGVyIGJpbnV0aWxzIikKCllvdSBhbHNvIG5lZWQgdG8gZ3Vh cmQgdGhlc2Ugd2l0aCBzb21ldGhpbmcgbGlrZQpjcHVzX2hhdmVfY29uc3RfY2FwKEFSTTY0X1JB U19FWFROKSBzbyBDUFVzIHdpdGhvdXQgdGhlIFJBUyBleHRlbnNpb25zIGRvbid0IHRyeQp0byBh Y2Nlc3MgYW4gdW5pbXBsZW1lbnRlZCBzeXN0ZW0gcmVnaXN0ZXIuIFRlc3Rpbmcgb25jZSBkdXJp bmcgcHJvYmUgaXMKcHJvYmFibHkgdGhlIGJlc3QgcGxhY2UgdG8gZG8gdGhpcy4KCgo+Pj4gKwo+ Pj4gK3N0cnVjdCBlcnJvcnNfZWRhYyB7Cj4+PiArICAgIGNvbnN0IGNoYXIgKiBjb25zdCBtc2c7 Cj4+PiArICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkYWNf ZGV2LAo+Pj4gKyAgICAgICAgICAgIGludCBpbnN0X25yLCBpbnQgYmxvY2tfbnIsIGNvbnN0IGNo YXIgKm1zZyk7Cj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGVycm9yc19l ZGFjIGVycm9yc1tdID0gewo+Pj4gKyAgICB7ICJMMSBDb3JyZWN0YWJsZSBFcnJvciIsIGVkYWNf ZGV2aWNlX2hhbmRsZV9jZSB9LAo+Pj4gKyAgICB7ICJMMSBVbmNvcnJlY3RhYmxlIEVycm9yIiwg ZWRhY19kZXZpY2VfaGFuZGxlX3VlIH0sCj4+PiArICAgIHsgIkwyIENvcnJlY3RhYmxlIEVycm9y IiwgZWRhY19kZXZpY2VfaGFuZGxlX2NlIH0sCj4+PiArICAgIHsgIkwyIFVuY29ycmVjdGFibGUg RXJyb3IiLCBlZGFjX2RldmljZV9oYW5kbGVfdWUgfSwKPj4+ICsgICAgeyAiTDMgQ29ycmVjdGFi bGUgRXJyb3IiLCBlZGFjX2RldmljZV9oYW5kbGVfY2UgfSwKPj4+ICsgICAgeyAiTDMgVW5jb3Jy ZWN0YWJsZSBFcnJvciIsIGVkYWNfZGV2aWNlX2hhbmRsZV91ZSB9LAo+Pj4gK307Cj4+PiArCgo+ Pj4gKyNkZWZpbmUgTDFfQ0UgMAo+Pj4gKyNkZWZpbmUgTDFfVUUgMQo+Pj4gKyNkZWZpbmUgTDJf Q0UgMgo+Pj4gKyNkZWZpbmUgTDJfVUUgMwo+Pj4gKyNkZWZpbmUgTDNfQ0UgNAo+Pj4gKyNkZWZp bmUgTDNfVUUgNQoKVGhpcyBhcmUgcmVhZCBmcm9tIEVSUjxuPk1JU0MsIEkgY2FuJ3QgZmluZCB0 aGlzIGluIHRoZSBzcGVjWzBdLCBhcmUgdGhlc2UKc3BlY2lmaWMgdG8geW91ciBpbXBsZW1lbnRh dGlvbj8KCgo+Pj4gKyNkZWZpbmUgREFUQV9CVUZfRVJSICAgICAgICAweDIKPj4+ICsjZGVmaW5l IENBQ0hFX0RBVEFfRVJSICAgICAgICAweDYKPj4+ICsjZGVmaW5lIENBQ0hFX1RBR19ESVJUWV9F UlIgICAgMHg3Cj4+PiArI2RlZmluZSBUTEJfUEFSSVRZX0VSUl9EQVRBICAgIDB4OAo+Pj4gKyNk ZWZpbmUgVExCX1BBUklUWV9FUlJfVEFHICAgIDB4OQoKKE5pdDogJ1RBRycgaXMgdGhlIGV4YW1w bGUgYWRkcmVzcy9jb250cm9sIGRhdGEgdGhhdCBoYXMgYmVjb21lIGNvcnJ1cHQuIFdlCmRvbid0 IGtub3cgaG93IHRoZSBjYWNoZSBpcyBkZXNpZ25lZCwgJ21ldGFkYXRhJyBtYXkgYmUgYSBiZXR0 ZXIgY2hvaWNlIG9mIHdvcmQKaGVyZSkuCgo+Pj4gKyNkZWZpbmUgQlVTX0VSUk9SICAgICAgICAw eDEyCgpUaGVyZSBhcmUgMjEgb2YgdGhlc2UgYW5kIG9ubHkgMiBhcmUgaW1wbGVtZW50YXRpb24g ZGVmaW5lZC4gSG93IGNvbWUgeW91IGRvbid0CmRlZmluZSBhbGwgb2YgdGhlbT8KCkFsbCB0aGVz ZSBnZXQgdXNlZCBmb3IgaXMgdG8gbWFwIHRvIGEgbmFtZSwgd291bGQgYSB0YWJsZSBiZSBiZXR0 ZXI/CihlLmcuIGFyY2gvYXJtNjQvbW0vZmF1bHQuYzo6ZmF1bHRfaW5mbykKCgo+Pj4gK3N0cnVj dCBlcnBfZHJ2ZGF0YSB7Cj4+PiArICAgIHN0cnVjdCBlZGFjX2RldmljZV9jdGxfaW5mbyAqZWRl dl9jdGw7Cj4+PiArICAgIHN0cnVjdCBlcnBfZHJ2ZGF0YSBfX3BlcmNwdSAqKmVycF9jcHVfZHJ2 ZGF0YTsKPj4+ICsgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5iX3BtOwo+Pj4gKyAgICBpbnQg cHBpOwo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBlcnBfZHJ2ZGF0YSAqcGFuaWNf aGFuZGxlcl9kcnZkYXRhOwo+Pj4gKwo+Pj4gK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXJtdjhf ZWRhY19sb2NrKTsKPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBsMV9sMl9pcnFfZW5hYmxlKHZvaWQg KmluZm8pCj4+PiArewo+Pj4gKyAgICBpbnQgaXJxID0gKihpbnQgKilpbmZvOwo+Pj4gKwo+Pj4g KyAgICBlbmFibGVfcGVyY3B1X2lycShpcnEsIElSUV9UWVBFX0xFVkVMX0hJR0gpOwo+Pj4gK30K CihTaG91bGRuJ3QgdGhlICdwZXJjcHUnIGFuZCAnbGV2ZWxfaGlnaCcgYmUgaW5mb3JtYXRpb24g bGVhcm50IGZyb20gdGhlIERUPykKCgo+Pj4gK3N0YXRpYyBpbnQgcmVxdWVzdF9lcnBfaXJxKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGNvbnN0IGNoYXIgKnByb3BuYW1lLAo+Pj4gKyAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2MsIGlycV9oYW5kbGVyX3QgaGFuZGxlciwKPj4+ICsg ICAgICAgICAgICB2b2lkICplZCwgaW50IHBlcmNwdSkKPj4+ICt7Cj4+PiArICAgIGludCByYzsK Pj4+ICsgICAgc3RydWN0IHJlc291cmNlICpyOwo+Pj4gKyAgICBzdHJ1Y3QgZXJwX2RydmRhdGEg KmRydiA9IGVkOwo+Pj4gKwo+Pj4gKyAgICByID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFt ZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgcHJvcG5hbWUpOwo+Pj4gKwo+Pj4gKyAgICBpZiAoIXIp IHsKPj4+ICsgICAgICAgIHByX2VycigiQVJNdjggQ1BVIEVSUDogQ291bGQgbm90IGZpbmQgPCVz PiBJUlEgcHJvcGVydHkuIFByb2NlZWRpbmcKPj4+IGFueXdheS5cbiIsCj4+PiArICAgICAgICAg ICAgcHJvcG5hbWUpOwo+Pgo+PiBXaGF0IGlzICJFUlAiID8KCj4gRXJyb3IgUmVwb3J0aW5nLiBJ IG1heSBqdXN0IHJlbmFtZSBpdCB0byBFREFDIG9yIGxpc3QgaXQgb3V0IGluIERvY3VtZW50YXRp b24uCgo+Pj4gKyAgICAgICAgZ290byBvdXQ7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgaWYg KCFwZXJjcHUpIHsKPj4+ICsgICAgICAgIHJjID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgm cGRldi0+ZGV2LCByLT5zdGFydCwgTlVMTCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICBoYW5kbGVyLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfT05FU0hPVCB8 IElSUUZfVFJJR0dFUl9ISUdILAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Ms Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgZWQpOwo+Pj4gKwo+Pj4gKyAgICAgICAg aWYgKHJjKSB7Cj4+PiArICAgICAgICAgICAgcHJfZXJyKCJBUk12OCBDUFUgRVJQOiBGYWlsZWQg dG8gcmVxdWVzdCBJUlEgJWQ6ICVkICglcyAvICVzKS4KPj4+IFByb2NlZWRpbmcgYW55d2F5Llxu IiwKPj4+ICsgICAgICAgICAgICAgICAgICAgKGludCkgci0+c3RhcnQsIHJjLCBwcm9wbmFtZSwg ZGVzYyk7Cj4+PiArICAgICAgICAgICAgZ290byBvdXQ7Cj4+PiArICAgICAgICB9Cj4+PiArCj4+ PiArICAgIH0gZWxzZSB7Cj4+PiArICAgICAgICBkcnYtPmVycF9jcHVfZHJ2ZGF0YSA9IGFsbG9j X3BlcmNwdShzdHJ1Y3QgZXJwX2RydmRhdGEgKik7Cj4+PiArICAgICAgICBpZiAoIWRydi0+ZXJw X2NwdV9kcnZkYXRhKSB7Cj4+PiArICAgICAgICAgICAgcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2Nh dGUgcGVyY3B1IGVycCBkYXRhXG4iKTsKPj4+ICsgICAgICAgICAgICBnb3RvIG91dDsKPj4+ICsg ICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgICpyYXdfY3B1X3B0cihkcnYtPmVycF9jcHVfZHJ2 ZGF0YSkgPSBkcnY7CgpyYXdfY3B1X3B0cigpLiBZb3UgY2FsbCB0aGlzIGZyb20gYXJtdjhfY3B1 X2VycF9wcm9iZSgpLCBzbyB5b3UncmUgcHJvYmFibHkKcHJlZW10aWJsZS4gQ291bGQgeW91IHVz ZSB0aGlzX2NwdV9wdHIoKSBhbmQgZW5hYmxlIENPTkZJR19ERUJVR19QUkVFTVBULgoKKEhvdyBj b21lIHlvdSBvbmx5IHNldCB0aGlzIHBlci1jcHUgY29va2llIG9uIG9uZSBjcHU/KQoKCj4+PiAr ICAgICAgICByYyA9IHJlcXVlc3RfcGVyY3B1X2lycShyLT5zdGFydCwgaGFuZGxlciwgZGVzYywK Pj4+ICsgICAgICAgICAgICAgICAgZHJ2LT5lcnBfY3B1X2RydmRhdGEpOwo+Pj4gKwo+Pj4gKyAg ICAgICAgaWYgKHJjKSB7Cj4+PiArICAgICAgICAgICAgcHJfZXJyKCJBUk12OCBDUFUgRVJQOiBG YWlsZWQgdG8gcmVxdWVzdCBJUlEgJWQ6ICVkICglcyAvICVzKS4KPj4+IFByb2NlZWRpbmcgYW55 d2F5LlxuIiwKPj4+ICsgICAgICAgICAgICAgICAgICAgKGludCkgci0+c3RhcnQsIHJjLCBwcm9w bmFtZSwgZGVzYyk7Cj4+PiArICAgICAgICAgICAgZ290byBvdXRfZnJlZTsKPj4+ICsgICAgICAg IH0KPj4+ICsKPj4+ICsgICAgICAgIGRydi0+cHBpID0gci0+c3RhcnQ7Cj4+PiArICAgICAgICBv bl9lYWNoX2NwdShsMV9sMl9pcnFfZW5hYmxlLCAmKHItPnN0YXJ0KSwgMSk7Cj4+PiArICAgIH0K Pj4+ICsKPj4+ICsgICAgcmV0dXJuIDA7Cj4+PiArCj4+PiArb3V0X2ZyZWU6Cj4+PiArICAgIGZy ZWVfcGVyY3B1KGRydi0+ZXJwX2NwdV9kcnZkYXRhKTsKPj4+ICsgICAgZHJ2LT5lcnBfY3B1X2Ry dmRhdGEgPSBOVUxMOwo+Pj4gK291dDoKPj4+ICsgICAgcmV0dXJuIDE7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyB2b2lkIGR1bXBfZXJyX3JlZyhpbnQgZXJyb3Jjb2RlLCBpbnQgbGV2ZWwsIHU2 NCBlcnJ4c3RhdHVzLCB1NjQKPj4+IGVycnhtaXNjLAo+Pj4gKyAgICBzdHJ1Y3QgZWRhY19kZXZp Y2VfY3RsX2luZm8gKmVkZXZfY3RsKQo+Pj4gK3sKPj4+ICsgICAgZWRhY19wcmludGsoS0VSTl9D UklULCBFREFDX0NQVSwgIkVSUlhTVEFUVVNfRUwxOiAlbGx4XG4iLCBlcnJ4c3RhdHVzKTsKPj4+ ICsgICAgZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX0NQVSwgIkVSUlhNSVNDX0VMMTogJWxs eFxuIiwgZXJyeG1pc2MpOwo+Pj4gKyAgICBlZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfQ1BV LCAiQ2FjaGUgbGV2ZWw6IEwlZFxuIiwgbGV2ZWwrMSk7Cj4+PiArICAgIHN3aXRjaCAoRVJSWFNU QVRVU19TRVJSKGVycnhzdGF0dXMpKSB7Cj4+PiArICAgIGNhc2UgREFUQV9CVUZfRVJSOgo+Pj4g KyAgICAgICAgZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX0NQVSwgIkVDQyBFcnJvciBmcm9t IGludGVybmFsIGRhdGEKPj4+IGJ1ZmZlclxuIik7Cj4+PiArICAgICAgICBicmVhazsKPj4+ICsK Pj4+ICsgICAgY2FzZSBDQUNIRV9EQVRBX0VSUjoKPj4+ICsgICAgICAgIGVkYWNfcHJpbnRrKEtF Uk5fQ1JJVCwgRURBQ19DUFUsICJFQ0MgRXJyb3IgZnJvbSBjYWNoZSBkYXRhIFJBTVxuIik7Cj4+ PiArICAgICAgICBicmVhazsKPj4+ICsKPj4+ICsgICAgY2FzZSBDQUNIRV9UQUdfRElSVFlfRVJS Ogo+Pj4gKyAgICAgICAgZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX0NQVSwgIkVDQyBFcnJv ciBmcm9tIGNhY2hlIHRhZyBvciBkaXJ0eQo+Pj4gUkFNXG4iKTsKPj4+ICsgICAgICAgIGJyZWFr Owo+Pj4gKwo+Pj4gKyAgICBjYXNlIFRMQl9QQVJJVFlfRVJSX0RBVEE6Cj4+PiArICAgICAgICBl ZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfQ1BVLCAiUGFyaXR5IGVycm9yIG9uIFRMQiBEQVRB IFJBTVxuIik7Cj4+PiArICAgICAgICBicmVhazsKPj4+ICsKPj4+ICsgICAgY2FzZSBUTEJfUEFS SVRZX0VSUl9UQUc6Cj4+PiArICAgICAgICBlZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfQ1BV LCAiUGFyaXR5IGVycm9yIG9uIFRMQiBUQUcgUkFNXG4iKTsKPj4+ICsgICAgICAgIGJyZWFrOwo+ Pj4gKwo+Pj4gKyAgICBjYXNlIEJVU19FUlJPUjoKPj4+ICsgICAgICAgIGVkYWNfcHJpbnRrKEtF Uk5fQ1JJVCwgRURBQ19DUFUsICJCdXMgRXJyb3JcbiIpOwo+Pj4gKyAgICAgICAgYnJlYWs7Cj4+ PiArICAgIH0KCj4+PiArICAgIGlmIChsZXZlbCA9PSBMMykKPj4+ICsgICAgICAgIGVkYWNfcHJp bnRrKEtFUk5fQ1JJVCwgRURBQ19DUFUsCj4+PiArICAgICAgICAgICAgIldheTogJWRcbiIsIChp bnQpIEVSUlhNSVNDX1dBWShlcnJ4bWlzYykpOwo+Pj4gKyAgICBlbHNlCj4+PiArICAgICAgICBl ZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfQ1BVLAo+Pj4gKyAgICAgICAgICAgICJXYXk6ICVk XG4iLCAoaW50KSBFUlJYTUlTQ19XQVkoZXJyeG1pc2MpID4+IDIpOwo+Pj4gKwo+Pj4gKyAgICBl ZGV2X2N0bC0+cGFuaWNfb25fdWUgPSBwYW5pY19vbl91ZTsKPj4+ICsgICAgZXJyb3JzW2Vycm9y Y29kZV0uZnVuYyhlZGV2X2N0bCwgc21wX3Byb2Nlc3Nvcl9pZCgpLAo+Pj4gKyAgICAgICAgICAg ICAgICBsZXZlbCwgZXJyb3JzW2Vycm9yY29kZV0ubXNnKTsKPj4+ICt9Cj4+PiArCj4+PiArc3Rh dGljIHZvaWQgYXJtdjhfcGFyc2VfbDFfbDJfY2FjaGVfZXJyb3IodTY0IGVycnhzdGF0dXMsIHU2 NCBlcnJ4bWlzYywKPj4+ICsgICAgc3RydWN0IGVkYWNfZGV2aWNlX2N0bF9pbmZvICplZGV2X2N0 bCkKPj4+ICt7Cj4+PiArICAgIHN3aXRjaCAoRVJSWE1JU0NfTFZMKGVycnhtaXNjKSkgewo+Pj4g KyAgICBjYXNlIEwxOgo+Pj4gKyAgICAgICAgaWYgKEVSUlhTVEFUVVNfVUUoZXJyeHN0YXR1cykp Cj4+PiArICAgICAgICAgICAgZHVtcF9lcnJfcmVnKEwxX1VFLCBMMSwgZXJyeHN0YXR1cywgZXJy eG1pc2MsCj4+PiArICAgICAgICAgICAgICAgICAgICBlZGV2X2N0bCk7Cj4+PiArICAgICAgICBl bHNlCj4+PiArICAgICAgICAgICAgZHVtcF9lcnJfcmVnKEwxX0NFLCBMMSwgZXJyeHN0YXR1cywg ZXJyeG1pc2MsCj4+PiArICAgICAgICAgICAgICAgICAgICBlZGV2X2N0bCk7CgpJZiB0aGUgVUUg Yml0IGlzIGNsZWFyIHRoZSBlcnJvciBtYXkgaGF2ZSBiZWVuICdjb3JyZWN0ZWQgb3IgZGVmZXJy ZWQnLiBJIGd1ZXNzCndlIGFzc3VtZSBkZWZlcnJlZCBlcnJvcnMgZG9uJ3QgaGFwcGVuLCBzbyAh VUUgbWVhbnMgQ29ycmVjdGVkLUVycm9yLgoKCj4+PiArICAgICAgICBicmVhazsKPj4+ICsgICAg Y2FzZSBMMjoKPj4+ICsgICAgICAgIGlmIChFUlJYU1RBVFVTX1VFKGVycnhzdGF0dXMpKQo+Pj4g KyAgICAgICAgICAgIGR1bXBfZXJyX3JlZyhMMl9VRSwgTDIsIGVycnhzdGF0dXMsIGVycnhtaXNj LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgZWRldl9jdGwpOwo+Pj4gKyAgICAgICAgZWxzZQo+ Pj4gKyAgICAgICAgICAgIGR1bXBfZXJyX3JlZyhMMl9DRSwgTDIsIGVycnhzdGF0dXMsIGVycnht aXNjLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgZWRldl9jdGwpOwo+Pj4gKyAgICAgICAgYnJl YWs7Cj4+PiArICAgIGRlZmF1bHQ6Cj4+PiArICAgICAgICBlZGFjX3ByaW50ayhLRVJOX0NSSVQs IEVEQUNfQ1BVLCAiVW5rbm93biBFUlJYTUlTQ19MVkwgdmFsdWVcbiIpOwo+Pj4gKyAgICB9Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIGFybXY4X2NoZWNrX2wxX2wyX2VjYyh2b2lkICpp bmZvKQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IGVkYWNfZGV2aWNlX2N0bF9pbmZvICplZGV2X2N0 bCA9IGluZm87Cj4+PiArICAgIHU2NCBlcnJ4c3RhdHVzOwo+Pj4gKyAgICB1NjQgZXJyeG1pc2M7 Cj4+PiArICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+PiArCj4+PiArICAgIHNwaW5fbG9ja19p cnFzYXZlKCZhcm12OF9lZGFjX2xvY2ssIGZsYWdzKTsKCj4+PiArICAgIHdyaXRlX2VycnNlbHJf ZWwxKDApOwoKSG93IGRvIHdlIGtub3cgaG93IG1hbnkgbm9kZXMgYmFja2VkIGJ5IHRoZSBjcHUg aW50ZXJmYWNlIHRoZXJlIGFyZT8KSG93IGRvIHdlIGtub3cgJzAnIGlzIHRoZSBvbmUgd2Ugd2Fu dD8KCj4+PiArICAgIGVycnhzdGF0dXMgPSByZWFkX2VycnhzdGF0dXNfZWwxKCk7Cj4+PiArCj4+ PiArICAgIGlmIChFUlJYU1RBVFVTX1ZBTElEKGVycnhzdGF0dXMpKSB7Cj4+PiArICAgICAgICBl cnJ4bWlzYyA9IHJlYWRfZXJyeG1pc2NfZWwxKCk7Cj4+PiArICAgICAgICBlZGFjX3ByaW50ayhL RVJOX0NSSVQsIEVEQUNfQ1BVLAo+Pj4gKyAgICAgICAgIkNQVSVkIGRldGVjdGVkIGEgTDEvTDIg Y2FjaGUgZXJyb3JcbiIsCj4+PiArICAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOwo+Pj4gKwo+ Pj4gKyAgICAgICAgYXJtdjhfcGFyc2VfbDFfbDJfY2FjaGVfZXJyb3IoZXJyeHN0YXR1cywgZXJy eG1pc2MsIGVkZXZfY3RsKTsKPj4+ICsgICAgICAgIGNsZWFyX2VycnhzdGF0dXNfdmFsaWQoZXJy eHN0YXR1cyk7Cj4+PiArICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcm12OF9lZGFj X2xvY2ssIGZsYWdzKTsKPj4+ICsgICAgICAgIHJldHVybiB0cnVlOwo+Pj4gKyAgICB9Cj4+PiAr ICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFybXY4X2VkYWNfbG9jaywgZmxhZ3MpOwo+Pj4g KyAgICByZXR1cm4gZmFsc2U7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIGFybXY4X2No ZWNrX2wzX3NjdV9lcnJvcihzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkZXZfY3RsKQo+ Pj4gK3sKPj4+ICsgICAgdTY0IGVycnhzdGF0dXMgPSAwOwo+Pj4gKyAgICB1NjQgZXJyeG1pc2Mg PSAwOwo+Pj4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+Pj4gKwo+Pj4gKyAgICBzcGluX2xv Y2tfaXJxc2F2ZSgmYXJtdjhfZWRhY19sb2NrLCBmbGFncyk7Cgo+Pj4gKyAgICB3cml0ZV9lcnJz ZWxyX2VsMSgxKTsKCkhvdyBkbyB3ZSBrbm93ICcxJyBpcyB0aGUgb25lIHdlIHdhbnQ/CgoKPj4+ ICsgICAgZXJyeHN0YXR1cyA9IHJlYWRfZXJyeHN0YXR1c19lbDEoKTsKPj4+ICsgICAgZXJyeG1p c2MgPSByZWFkX2VycnhtaXNjX2VsMSgpOwo+Pj4gKwo+Pj4gKyAgICBpZiAoRVJSWFNUQVRVU19W QUxJRChlcnJ4c3RhdHVzKSAmJgo+Pj4gKyAgICAgICAgRVJSWE1JU0NfTFZMKGVycnhtaXNjKSA9 PSBMMykgewo+Pj4gKyAgICAgICAgaWYgKEVSUlhTVEFUVVNfVUUoZXJyeHN0YXR1cykpIHsKPj4+ ICsgICAgICAgICAgICBlZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfQ1BVLCAiRGV0ZWN0ZWQg TDMgdW5jb3JyZWN0YWJsZQo+Pj4gZXJyb3JcbiIpOwo+Pj4gKyAgICAgICAgICAgIGR1bXBfZXJy X3JlZyhMM19VRSwgTDMsIGVycnhzdGF0dXMsIGVycnhtaXNjLAo+Pj4gKyAgICAgICAgICAgICAg ICBlZGV2X2N0bCk7Cj4+PiArICAgICAgICB9IGVsc2Ugewo+Pj4gKyAgICAgICAgICAgIGVkYWNf cHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19DUFUsICJEZXRlY3RlZCBMMyBjb3JyZWN0YWJsZQo+Pj4g ZXJyb3JcbiIpOwo+Pj4gKyAgICAgICAgICAgIGR1bXBfZXJyX3JlZyhMM19DRSwgTDMsIGVycnhz dGF0dXMsIGVycnhtaXNjLAo+Pj4gKyAgICAgICAgICAgICAgICBlZGV2X2N0bCk7CgpXaGF0IGFi b3V0IGRlZmVycmVkIGVycm9ycz8KCgo+Pj4gKyAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAg Y2xlYXJfZXJyeHN0YXR1c192YWxpZChlcnJ4c3RhdHVzKTsKPj4+ICsgICAgICAgIHNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmFybXY4X2VkYWNfbG9jaywgZmxhZ3MpOwo+Pj4gKyAgICAgICAgcmV0 dXJuIHRydWU7Cj4+PiArICAgIH0KPj4+ICsgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJt djhfZWRhY19sb2NrLCBmbGFncyk7Cj4+PiArICAgIHJldHVybiBmYWxzZTsKPj4+ICt9Cj4+PiAr Cj4+PiArc3RhdGljIHZvaWQgYXJtdjhfY2hlY2tfbDFfbDJfZWNjX2hlbHBlcih2b2lkICppbmZv KQo+Pj4gK3sKPj4+ICsgICAgYXJtdjhfY2hlY2tfbDFfbDJfZWNjKGluZm8pOwo+Pj4gK30KPj4+ ICsKPj4+ICt2b2lkIGFybXY4X3BvbGxfY2FjaGVfZXJyb3JzKHN0cnVjdCBlZGFjX2RldmljZV9j dGxfaW5mbyAqZWRldl9jdGwpCj4+PiArewo+Pj4gKyAgICBpbnQgY3B1Owo+Pj4gKwo+Pj4gKyAg ICBpZiAoIWVkZXZfY3RsKQo+Pj4gKyAgICAgICAgZWRldl9jdGwgPSBwYW5pY19oYW5kbGVyX2Ry dmRhdGEtPmVkZXZfY3RsOwo+Pj4gKwo+Pj4gKyAgICBhcm12OF9jaGVja19sM19zY3VfZXJyb3Io ZWRldl9jdGwpOwo+Pj4gKyAgICBmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Cj4+PiArICAg ICAgICBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBhcm12OF9jaGVja19sMV9sMl9lY2Nf aGVscGVyLAo+Pj4gKyAgICAgICAgICAgIGVkZXZfY3RsLCAwKTsKCm9uX2VhY2hfY3B1KCk/Cgo+ Pj4gKyAgICB9Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBhcm12OF9sMV9s Ml9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRydmRhdGEpCj4+PiArewo+Pj4gKyAgICBpZiAoYXJt djhfY2hlY2tfbDFfbDJfZWNjKHBhbmljX2hhbmRsZXJfZHJ2ZGF0YS0+ZWRldl9jdGwpKQo+Pj4g KyAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwo+Pj4gKyAgICByZXR1cm4gSVJRX05PTkU7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBhcm12OF9sM19zY3VfaGFuZGxlcihp bnQgaXJxLCB2b2lkICpkcnZkYXRhKQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IGVycF9kcnZkYXRh ICpkcnYgPSBkcnZkYXRhOwo+Pj4gKyAgICBzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVk ZXZfY3RsID0gZHJ2LT5lZGV2X2N0bDsKPj4+ICsKPj4+ICsgICAgaWYgKGFybXY4X2NoZWNrX2wz X3NjdV9lcnJvcihlZGV2X2N0bCkpCj4+PiArICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Cj4+ PiArICAgIHJldHVybiBJUlFfTk9ORTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgaW5p dGlhbGl6ZV9yZWdpc3RlcnModm9pZCAqaW5mbykKPj4+ICt7Cj4+PiArICAgIHNldF9lcnJ4Y3Rs cl9lbDEoKTsKPj4+ICsgICAgc2V0X2VycnhtaXNjX292ZXJmbG93KCk7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyB2b2lkIGluaXRfcmVnc19vbl9jcHUoYm9vbCBhbGxfY3B1cykKPj4+ICt7Cj4+ PiArICAgIGludCBjcHU7Cj4+PiArCj4+PiArICAgIHdyaXRlX2VycnNlbHJfZWwxKDApOwoKVGhp cyBvbmx5IGhhcHBlbnMgb24gdGhlIGxvY2FsIENQVSwgdGhlIG90aGVyIGVuZCBvZiB5b3VyCnNt cF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgpIG1heSBoYXZlIGp1bmsgaW4gdGhpcyByZWdpc3Rlci4K Cgo+Pj4gKyAgICBpZiAoYWxsX2NwdXMpIHsKPj4+ICsgICAgICAgIGZvcl9lYWNoX3Bvc3NpYmxl X2NwdShjcHUpCj4+PiArICAgICAgICAgICAgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwg aW5pdGlhbGl6ZV9yZWdpc3RlcnMsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg MSk7Cgpvbl9lYWNoX2NwdSgpPwoKCj4+PiArICAgIH0gZWxzZSB7Cj4+PiArICAgICAgICBpbml0 aWFsaXplX3JlZ2lzdGVycyhOVUxMKTsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICB3cml0ZV9l cnJzZWxyX2VsMSgxKTsKPj4+ICsgICAgaW5pdGlhbGl6ZV9yZWdpc3RlcnMoTlVMTCk7CgpZb3Ug c2VlbSB0byBtYWdpY2FsbHkta25vdyB0aGF0IHRoaXMgJ3JlY29yZCAxJyBpcyBzaGFyZWQgYmV0 d2VlbiBhbGwgQ1BVcyBhbmQKdmlzaWJsZSB2aWEgdGhlIGNwdSBpbnRlcmZhY2UuCgoKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGludCBhcm12OF9wbXVfY3B1X3BtX25vdGlmeShzdHJ1Y3Qgbm90 aWZpZXJfYmxvY2sgKnNlbGYsCj4+PiArICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0 aW9uLCB2b2lkICp2KQo+Pj4gK3sKPj4+ICsgICAgc3dpdGNoIChhY3Rpb24pIHsKPj4+ICsgICAg Y2FzZSBDUFVfUE1fRVhJVDoKPj4+ICsgICAgICAgIGluaXRfcmVnc19vbl9jcHUoZmFsc2UpOwo+ Pj4gKyAgICAgICAgYXJtdjhfY2hlY2tfbDNfc2N1X2Vycm9yKHBhbmljX2hhbmRsZXJfZHJ2ZGF0 YS0+ZWRldl9jdGwpOwo+Pj4gKyAgICAgICAgYXJtdjhfY2hlY2tfbDFfbDJfZWNjKHBhbmljX2hh bmRsZXJfZHJ2ZGF0YS0+ZWRldl9jdGwpOwo+Pj4gKyAgICAgICAgYnJlYWs7Cj4+PiArICAgIH0K Pj4+ICsKPj4+ICsgICAgcmV0dXJuIE5PVElGWV9PSzsKPj4+ICt9Cj4+Cj4+IFdoYXQgYWJvdXQg Q1BVIGhvdHBsdWc/Cj4+Cj4gQWdyZWVkIHRoYXQgQ1BVIGhvdHBsdWcgd2lsbCBiZSByZXF1aXJl ZCBmb3IgdGhlIHNtYWxsIHdpbmRvdyBiZXR3ZWVuCj4gaG90cGx1Z2dpbmcgYmFjayBpbiBhbmQg TFBNIGV4aXQuCj4gCj4+PiArCj4+PiArc3RhdGljIGludCBhcm12OF9jcHVfZXJwX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2Owo+Pj4gKyAgICBzdHJ1Y3QgZXJwX2RydmRhdGEgKmRydjsKPj4+ ICsgICAgaW50IHJjID0gMDsKPj4+ICsgICAgaW50IGZhaWwgPSAwOwo+Pj4gKwo+Pj4gKyAgICBp bml0X3JlZ3Nfb25fY3B1KHRydWUpOwo+Pj4gKwo+Pj4gKyAgICBkcnYgPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKmRydiksIEdGUF9LRVJORUwpOwo+Pj4gKwo+Pj4gKyAgICBpZiAoIWRydikK Pj4+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+Pj4gKwo+Pj4gKyAgICBkcnYtPmVkZXZfY3Rs ID0gZWRhY19kZXZpY2VfYWxsb2NfY3RsX2luZm8oMCwgImNwdSIsCj4+PiArICAgICAgICAgICAg ICAgICAgICBudW1fcG9zc2libGVfY3B1cygpLCAiTCIsIDMsIDEsIE5VTEwsIDAsCj4+PiArICAg ICAgICAgICAgICAgICAgICBlZGFjX2RldmljZV9hbGxvY19pbmRleCgpKTsKPj4+ICsKPj4+ICsg ICAgaWYgKCFkcnYtPmVkZXZfY3RsKQo+Pj4gKyAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+PiAr Cj4+PiArICAgIGlmIChJU19FTkFCTEVEKENPTkZJR19FREFDX0FSTVY4X1BPTEwpKSB7Cj4+PiAr ICAgICAgICBkcnYtPmVkZXZfY3RsLT5lZGFjX2NoZWNrID0gYXJtdjhfcG9sbF9jYWNoZV9lcnJv cnM7Cj4+PiArICAgICAgICBkcnYtPmVkZXZfY3RsLT5wb2xsX21zZWMgPSBwb2xsX21zZWM7Cj4+ PiArICAgIH0KPj4+ICsKPj4+ICsgICAgZHJ2LT5lZGV2X2N0bC0+ZGV2ID0gZGV2Owo+Pj4gKyAg ICBkcnYtPmVkZXZfY3RsLT5tb2RfbmFtZSA9IGRldl9uYW1lKGRldik7Cj4+PiArICAgIGRydi0+ ZWRldl9jdGwtPmRldl9uYW1lID0gZGV2X25hbWUoZGV2KTsKCj4+PiArICAgIGRydi0+ZWRldl9j dGwtPmN0bF9uYW1lID0gImNhY2hlIjsKCkhvdyBkbyB3ZSBrbm93IHJlY29yZHMgJzAnIGFuZCAn MScgYXJlICdjYWNoZSc/CgoKPj4+ICsgICAgZHJ2LT5lZGV2X2N0bC0+cGFuaWNfb25fdWUgPSBw YW5pY19vbl91ZTsKPj4+ICsgICAgZHJ2LT5uYl9wbS5ub3RpZmllcl9jYWxsID0gYXJtdjhfcG11 X2NwdV9wbV9ub3RpZnk7Cj4+PiArICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRydik7 Cj4+PiArCj4+PiArICAgIHJjID0gZWRhY19kZXZpY2VfYWRkX2RldmljZShkcnYtPmVkZXZfY3Rs KTsKPj4+ICsgICAgaWYgKHJjKQo+Pj4gKyAgICAgICAgZ290byBvdXRfbWVtOwo+Pj4gKwo+Pj4g KyAgICBwYW5pY19oYW5kbGVyX2RydmRhdGEgPSBkcnY7Cj4+PiArCj4+PiArICAgIGlmICghSVNf RU5BQkxFRChDT05GSUdfRURBQ19BUk1WOF9QT0xMKSkgewo+Pj4gKyAgICAgICAgZmFpbCArPSBy ZXF1ZXN0X2VycF9pcnEocGRldiwgImwxLWwyLWlycSIsCj4+PiArICAgICAgICAgICAgICAgICJs MV9sMl9pcnEiLAo+Pj4gKyAgICAgICAgICAgICAgICBhcm12OF9sMV9sMl9oYW5kbGVyLCBkcnYs IDEpOwo+Pj4gKwo+Pj4gKyAgICAgICAgZmFpbCArPSByZXF1ZXN0X2VycF9pcnEocGRldiwgImwz LXNjdS1pcnEiLAo+Pj4gKyAgICAgICAgICAgICAgICAibDNfc2N1X2lycSIsCj4+PiArICAgICAg ICAgICAgICAgIGFybXY4X2wzX3NjdV9oYW5kbGVyLCBkcnYsIDApOwoKSG93IGRvIHdlIGtub3cg J2wxL2wyJyBpcyBwZXItY3B1IGFuZCBsMiBpc24ndD8gSSdkIGV4cGVjdCB0aGlzIGluZm9ybWF0 aW9uIHRvCmNvbWUgZnJvbSB0aGUgRFQuCgoKPj4gU0NVIGlzbid0IGFuIGFyY2hpdGVjdHVyYWwg Y29uY2VwdCwgYW5kIGEgY29tYmluZWQgbDEtbDIgaW50ZXJydXB0Cj4+IHNvdW5kcyB2ZXJ5IHNw ZWNpZmljIHRvIGEgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi4KCj4gQ2FuIGRvIGEgcmVuYW1l IHRvIHNvbWV0aGluZyBtb3JlIGFraW4gdG8gInByaXZhdGVfY2FjaGVfaXJxIiBhbmQKPiAic2hh cmVkX2NhY2hlX2lycSIuCgo+PiBNeSB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHdpdGggdGhlIFJB UyBleHRlbnNpb25zLCBTRXJyb3Igd291bGQgYmUgdXNlZAo+PiB0byBub3RpZnkgb24gUkFTIGNv bmRpdGlvbnMsIHNvIEknbSBjb25mdXNlZCBhcyB0byB3aHkgd2UnZCBuZWVkCj4+IHJlZ3VsYXIg aW50ZXJydXB0cyBoZXJlLgoKPiBUaGVyZSBtYXkgYmUgY2FzZXMgd2hlcmUgaW50ZXJydXB0cyBh cmUgcHJlZmVycmVkLiBUbyBteSBrbm93bGVkZ2UgKHRob3VnaCBJIG1heQo+IG1pc3Rha2VuKSwg U0Vycm9ycyB3b3VsZCBub3QgY2F0Y2ggY29ycmVjdGFibGUgZXJyb3JzPwoKV2l0aCB0aGUgdjgu MiBSQVMgRXh0ZW5zaW9ucyBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgZXh0ZXJu YWwtYWJvcnRzCmhhdmUgYSBzZXZlcml0eSBpbiB0aGUgRVNSIHdoaWNoIHRlbGxzIHVzCmNvcnJl Y3RlZC9yZXN0YXJ0YWJsZS9yZWNvdmVyYWJsZS91bmNvbnRhaW5hYmxlLgoKRXJyb3Igbm9kZXMg bWF5IHNpZ25hbCBhbiAnZXJyb3IgcmVjb3ZlcnkgaW50ZXJydXB0JyBvciAnZmF0YWwgaGFuZGxp bmcKaW50ZXJydXB0JyB3aGVuIHRoZSBpbi1iYW5kIGV4dGVybmFsLWFib3J0IG1lY2hhbmlzbXMg Y2FuJ3QgYmUgdXNlZC4gKFNlY3Rpb25zCjMuMyB0byAzLjUgb2YgWzBdKS4KCgo+Pj4gKyAgICAg ICAgaWYgKGZhaWwgPT0gb2ZfaXJxX2NvdW50KGRldi0+b2Zfbm9kZSkpIHsKPj4+ICsgICAgICAg ICAgICBwcl9lcnIoIkVSUDogQ291bGQgbm90IHJlcXVlc3QgYW55IElSUXMuIEdpdmluZyB1cC5c biIpOwo+Pj4gKyAgICAgICAgICAgIHJjID0gLUVOT0RFVjsKPj4+ICsgICAgICAgICAgICBnb3Rv IG91dF9kZXY7Cj4+PiArICAgICAgICB9Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgY3B1X3Bt X3JlZ2lzdGVyX25vdGlmaWVyKCYoZHJ2LT5uYl9wbSkpOwo+Pj4gKwo+Pj4gKyAgICByZXR1cm4g MDsKPj4+ICsKPj4+ICtvdXRfZGV2Ogo+Pj4gKyAgICBlZGFjX2RldmljZV9kZWxfZGV2aWNlKGRl dik7Cj4+PiArb3V0X21lbToKPj4+ICsgICAgZWRhY19kZXZpY2VfZnJlZV9jdGxfaW5mbyhkcnYt PmVkZXZfY3RsKTsKPj4+ICsgICAgcmV0dXJuIHJjOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg aW50IGFybXY4X2NwdV9lcnBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ PiArewo+Pj4gKyAgICBzdHJ1Y3QgZXJwX2RydmRhdGEgKmRydiA9IGRldl9nZXRfZHJ2ZGF0YSgm cGRldi0+ZGV2KTsKPj4+ICsgICAgc3RydWN0IGVkYWNfZGV2aWNlX2N0bF9pbmZvICplZGFjX2N0 bCA9IGRydi0+ZWRldl9jdGw7Cj4+PiArCj4+PiArICAgIGlmIChkcnYtPmVycF9jcHVfZHJ2ZGF0 YSkgewo+Pj4gKyAgICAgICAgZnJlZV9wZXJjcHVfaXJxKGRydi0+cHBpLCBkcnYtPmVycF9jcHVf ZHJ2ZGF0YSk7Cj4+PiArICAgICAgICBmcmVlX3BlcmNwdShkcnYtPmVycF9jcHVfZHJ2ZGF0YSk7 Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgZWRhY19kZXZpY2VfZGVsX2RldmljZShlZGFjX2N0 bC0+ZGV2KTsKPj4+ICsgICAgZWRhY19kZXZpY2VfZnJlZV9jdGxfaW5mbyhlZGFjX2N0bCk7Cj4+ PiArCj4+PiArICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBhcm12OF9jcHVfZXJwX21hdGNoX3RhYmxlW10gPSB7Cj4+PiArICAg IHsgLmNvbXBhdGlibGUgPSAiYXJtLGFybXY4LWNwdS1lcnAiIH0sCj4+PiArICAgIHsgfQo+Pj4g K307Cj4+Cj4+IFRoaXMgbmVlZHMgYSBiaW5kaW5nIGRvY3VtZW50LCBsYXlpbmcgb3V0IHByZWNp c2VseSB3aGF0IHRoaXMgaXMKPj4gaW50ZW5kZWQgdG8gZGVzY3JpYmUuCgoKVGhhbmtzLAoKSmFt ZXMKClswXQpodHRwczovL3N0YXRpYy5kb2NzLmFybS5jb20vZGRpMDU4Ny9hL1JBUyUyMEV4dGVu c2lvbi1yZWxlYXNlJTIwY2FuZGlkYXRlX21hcmNoXzI5LnBkZgotLS0KVG8gdW5zdWJzY3JpYmUg ZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LWVkYWMiIGlu CnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUg bWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8u aHRtbAo=