From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: Re: [RFCv2 02/14] drm/i915/gvt: Introduce the basic architecture of GVT-g Date: Fri, 26 Feb 2016 13:58:20 +0800 Message-ID: <56CFE97C.10503@intel.com> References: <1455795741-3487-1-git-send-email-zhi.a.wang@intel.com> <1455795741-3487-3-git-send-email-zhi.a.wang@intel.com> <1456231332.7789.63.camel@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id A01E26E9E9 for ; Fri, 26 Feb 2016 06:00:59 +0000 (UTC) In-Reply-To: <1456231332.7789.63.camel@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Joonas Lahtinen , intel-gfx@lists.freedesktop.org, igvt-g@lists.01.org Cc: daniel.vetter@ffwll.ch, david.j.cowperthwaite@intel.com, zhiyuan.lv@intel.com List-Id: intel-gfx@lists.freedesktop.org SGkgSm9vbmFzOgoKVGhhbmtzIGZvciB5b3UgdGltZSBhbmQgY29tbWVudHMuIDopIFNlZSBteSBy ZXBsaWVzIGJlbG93LgoKT24gMDIvMjMvMTYgMjA6NDIsIEpvb25hcyBMYWh0aW5lbiB3cm90ZToK PiBIaSwKPgo+IENvZGUgaXMgbG9va2luZyBhIGxvdCBiZXR0ZXIuCj4KPiBBIGdlbmVyYWwgcXVl c3Rpb24gc3RpbGw7IHdoeSB5b3Ugc2VlbSB0byBiZSBwcmVmZXJyaW5nIG11bHRpLXN0YWdlCj4g YWxsb2MgYW5kIGRlc3Ryb3k/Cj4KPiBBcmUgdGhlcmUgZ29pbmcgdG8gYmUgc2NlbmFyaW9zIHdo ZW4gdGhpbmdzIHdpbGwgYmUgYWxsb2NhdGVkIGJ1dCBub3QKPiBpbml0aWFsaXplZD8gSSBkb24n dCBzZWUgYSBzdWNoIHVzZSBzY2VuYXJpby4KPgo+IEkgd291bGRuJ3Qgc3BsaXQgdGhlIGluaXQg ZnVuY3Rpb25zIGRvd24gYXMgbXVjaCBhcyB5b3UgY3VycmVudGx5IGRvCj4gYmVjYXVzZSB0aGF0 J2xsIHJlcXVpcmUgYSBsb3Qgb2YgYm9pbGVycGxhdGUgY29kZSB0byBwcm9wYWdhdGUgdGhlCj4g ZXJyb3JzIHVwLCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGRvbmUuIFRoZSBib2lsZXJwbGF0ZSBm b3IgcHJvcGFnYXRpb24KPiBiZWNvbWVzIG5lY2Vzc2FyeSB3aGVuIHRoZSB0ZWFyZG93biBmdW5j dGlvbiBpcyBjb21wbGV4LCBidXQgY3VycmVudGx5Cj4gdGhlIHRlYXJkb3duIGl0c2VsZiBpcyBs ZXNzIGxpbmVzIG9mIGNvZGUgdGhhbiB0aGUgZnVuY3Rpb24KPiBib2lsZXJwbGF0ZS4KPgo+IFNv IGp1c3Qgc3F1YXNoIHRob3NlIGludG8gZ3Z0X2RldmljZV9jcmVhdGUoKSBhbmQgZ3Z0X2Rldmlj ZV9kZXN0cm95KCkKPiB3aGVyZSBfY3JlYXRlKCkgd2lsbCBwcm9wYWdhdGUgYW55IGxvd2VyIGxl dmVsIGVycm9ycyB1cCBhbmQgdGVhciBkb3duCj4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3Ry dWN0LiBfZGVzdHJveSgpIGNhbiB0aGVuIGV4cGVjdCB0byBqdXN0IHRlYXIKPiB0aGUgd2hvbGUg c3RydWN0IGRvd24gd2l0aCBubyBpZnMuCj4KT0suIFN1cmUgbm8gcHJvYmxlbS4KPiBSZWdhcmRz LCBKb29uYXMKPgo+IE9uIHRvLCAyMDE2LTAyLTE4IGF0IDE5OjQyICswODAwLCBaaGkgV2FuZyB3 cm90ZToKPj4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSB2ZXJ5IGJhc2ljIGZyYW1ld29yayBv ZiBHVlQtZyBkZXZpY2UgbW9kZWwsCj4+IGluY2x1ZGVzIGJhc2ljIHByb3RvdHlwZXMsIGRlZmlu aXRpb25zLCBpbml0aWFsaXphdGlvbi4KPj4KPj4gdjI6Cj4+IC0gSW50cm9kdWNlIGk5MTVfZ3Z0 LmMuCj4+IEl0J3MgbmVjZXNzYXJ5IHRvIGludHJvZHVjZSB0aGUgc3R1YnMgYmV0d2VlbiBpOTE1 IGRyaXZlciBhbmQgR1ZULWcgaG9zdCwKPj4gYXMgR1ZULWcgY29tcG9uZW50cyBpcyBjb25maWd1 cmFibGUgaW4ga2VybmVsIGNvbmZpZy4gV2hlbiBkaXNhYmxlZCwgdGhlCj4+IHN0dWJzIGhlcmUg ZG8gbm90aGluZy4KPj4KPj4gVGFrZSBKb29uYXMncyBjb21tZW50czoKPj4gLSBSZXBsYWNlIGJv b2xlYW4gcmV0dXJuIHZhbHVlIHdpdGggaW50Lgo+PiAtIFJlcGxhY2UgY3VzdG9taXplZCBpbmZv L3dhcm4vZGVidWcgbWFjcm9zIHdpdGggRFJNIG1hY3Jvcy4KPj4gLSBEb2N1bWVudCBhbGwgbm9u LXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBpOTE1Lgo+PiAtIFJlbW92ZSBlbXB0eSBhbmQgdW51c2Vk IGZ1bmN0aW9ucy4KPj4gLSBSZXBsYWNlIG1hZ2ljIG51bWJlciB3aXRoIG1hcmNvcy4KPj4gLSBT ZXQgR1ZULWcgaW4ga2VybmVsIGNvbmZpZyB0byAibiIgYnkgZGVmYXVsdC4KPj4KPj4gU2lnbmVk LW9mZi1ieTogWmhpIFdhbmcgPHpoaS5hLndhbmdAaW50ZWwuY29tPgo+PiAtLS0KPj4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnICAgICAgICAgfCAgMTUgKysKPj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgfCAgIDIgKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9NYWtlZmlsZSAgICB8ICAgNSArCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L2RlYnVnLmggICAgIHwgIDU3ICsrKysrCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2 dC5jICAgICAgIHwgMzkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oICAgICAgIHwgMTAwICsrKysrKysrKwo+PiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9oeXBlcmNhbGwuaCB8ICAzMCArKysKPj4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmggICAgICAgfCAgMzQgKysrCj4+ICAgZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L3BhcmFtcy5jICAgIHwgIDMyICsrKwo+PiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9wYXJhbXMuaCAgICB8ICAzNCArKysKPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvcmVnLmggICAgICAgfCAgMzQgKysrCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kbWEuYyAgICAgIHwgIDE0ICsrCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aCAgICAgIHwgIDEyICsrCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndnQuYyAgICAg IHwgIDkzICsrKysrKysrKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3Z0LmggICAg ICB8ICA0OSArKysrKwo+PiAgIDE1IGZpbGVzIGNoYW5nZWQsIDkwNCBpbnNlcnRpb25zKCspCj4+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZQo+ PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcuaAo+ PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKPj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCj4+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9oeXBlcmNhbGwuaAo+ PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmgKPj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3BhcmFtcy5jCj4+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuaAo+ PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcmVnLmgKPj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndnQuYwo+PiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d2dC5oCj4+Cj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvS2NvbmZpZwo+PiBpbmRleCA0YzU5NzkzLi4wODJlNzdkIDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L0tjb25maWcKPj4gQEAgLTQ1LDMgKzQ1LDE4IEBAIGNvbmZpZyBEUk1fSTkxNV9QUkVMSU1J TkFSWV9IV19TVVBQT1JUCj4+ICAgCSAgb3B0aW9uIGNoYW5nZXMgdGhlIGRlZmF1bHQgZm9yIHRo YXQgbW9kdWxlIG9wdGlvbi4KPj4KPj4gICAJICBJZiBpbiBkb3VidCwgc2F5ICJOIi4KPj4gKwo+ PiArY29uZmlnIERSTV9JOTE1X0dWVAo+PiArICAgICAgICB0cmlzdGF0ZSAiR1ZULWcgaG9zdCBk cml2ZXIiCj4+ICsgICAgICAgIGRlcGVuZHMgb24gRFJNX0k5MTUKPj4gKyAgICAgICAgZGVmYXVs dCBuCj4+ICsgICAgICAgIGhlbHAKPj4gKyAgICAgICAgICBFbmFibGluZyBHVlQtZyBtZWRpYXRl ZCBncmFwaGljcyBwYXNzdGhyb3VnaCB0ZWNobmlxdWUgZm9yIEludGVsIGk5MTUKPj4gKyAgICAg ICAgICBiYXNlZCBpbnRlZ3JhdGVkIGdyYXBoaWNzIGNhcmQuIFdpdGggR1ZULWcsIGl0J3MgcG9z c2libGUgdG8gaGF2ZSBvbmUKPj4gKyAgICAgICAgICBpbnRlZ3JhdGVkIGk5MTUgZGV2aWNlIHNo YXJlZCBieSBtdWx0aXBsZSBWTXMuIFBlcmZvcm1hbmNlIGNyaXRpY2FsCj4+ICsgICAgICAgICAg b3B0ZXJhdGlvbnMgc3VjaCBhcyBhcHBlcnR1cmUgYWNjZXNzZXMgYW5kIHJpbmcgYnVmZmVyIG9w ZXJhdGlvbnMKPj4gKyAgICAgICAgICBhcmUgcGFzcy10aHJvdWdoZWQgdG8gVk0sIHdpdGggYSBt aW5pbWFsIHNldCBvZiBjb25mbGljdGluZyByZXNvdXJjZXMKPj4gKyAgICAgICAgICAoZS5nLiBk aXNwbGF5IHNldHRpbmdzKSBtZWRpYXRlZCBieSB2R1QgZHJpdmVyLiBUaGUgYmVuZWZpdCBvZiB2 R1QKPj4gKyAgICAgICAgICBpcyBvbiBib3RoIHRoZSBwZXJmb3JtYW5jZSwgZ2l2ZW4gdGhhdCBl YWNoIFZNIGNvdWxkIGRpcmVjdGx5IG9wZXJhdGUKPj4gKyAgICAgICAgICBpdHMgYXBlcnR1cmUg c3BhY2UgYW5kIHN1Ym1pdCBjb21tYW5kcyBsaWtlIHJ1bm5pbmcgb24gbmF0aXZlLCBhbmQKPj4g KyAgICAgICAgICB0aGUgZmVhdHVyZSBjb21wbGV0ZW5lc3MsIGdpdmVuIHRoYXQgYSB0cnVlIEdF TiBoYXJkd2FyZSBpcyBleHBvc2VkLgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+PiBpbmRleCAwODUx ZGUwNy4uYzY1MDI2YyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4gQEAgLTkxLDYgKzkx LDggQEAgaTkxNS15ICs9IGR2b19jaDcwMTcubyBcCj4+ICAgCSAgaW50ZWxfc2R2by5vIFwKPj4g ICAJICBpbnRlbF90di5vCj4+Cj4+ICtvYmotJChDT05GSUdfRFJNX0k5MTVfR1ZUKSAgKz0gaTkx NV9ndnQubyBndnQvCj4+ICsKPj4gICAjIHZpcnR1YWwgZ3B1IGNvZGUKPj4gICBpOTE1LXkgKz0g aTkxNV92Z3B1Lm8KPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZQo+PiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi45NTkzMDVmCj4+IC0tLSAvZGV2L251bGwKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlCj4+IEBAIC0wLDAgKzEsNSBA QAo+PiArR1ZUX1NPVVJDRSA6PSBndnQubyBwYXJhbXMubwo+PiArCj4+ICtjY2ZsYWdzLXkgICAg ICAgICAgICAgICAgICAgICAgKz0gLUkkKHNyYykgLUkkKHNyYykvLi4gLVdhbGwgLVdlcnJvciAt V25vLXVudXNlZC1mdW5jdGlvbgo+PiAraTkxNV9ndnQteSAgICAgICAgICAgICAgICAgICAgIDo9 ICQoR1ZUX1NPVVJDRSkKPj4gK29iai0kKENPTkZJR19EUk1fSTkxNV9HVlQpICAgICArPSBpOTE1 X2d2dC5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kZWJ1Zy5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+IGluZGV4IDAwMDAwMDAuLjA3NDdmMjgKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcuaAo+PiBAQCAtMCwwICsxLDU3IEBACj4+ICsvKgo+ PiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+PiArICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPj4gKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+PiArICoKPj4gKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKPj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPj4gKyAqIFNvZnR3YXJlLgo+PiAr ICoKPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPj4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAo+PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPj4gKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HIEZST00sCj4+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+PiArICogU09GVFdBUkUu Cj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfX0dWVF9ERUJVR19IX18KPj4gKyNkZWZpbmUgX19H VlRfREVCVUdfSF9fCj4+ICsKPj4gKyNkZWZpbmUgZ3Z0X2luZm8oZm10LCBhcmdzLi4uKSBcCj4+ ICsJRFJNX0lORk8oImd2dDogImZtdCJcbiIsICMjYXJncykKPj4gKwo+Cj4gSnVzdDsKPgo+IAlE Uk1fSU5GTygiZ3Z0OiAiIGZtdCwgIyNhcmdzKQo+Cj4gRG8gbm90IGF1dG9tYXRpY2FsbHkgYWRk IG5ld2xpbmVzLCBpdCB3aWxsIGNvbmZ1c2UgZGV2ZWxvcGVycy4gQXBwbGllcwo+IHRvIGFsbCBw cmludGluZy4KPgpPSy4gV2lsbCBpbXByb3ZlIHRoYXQgaW4gdGhlIG5leHQgdmVyc2lvbgo+PiAr I2RlZmluZSBndnRfZXJyKGZtdCwgYXJncy4uLikgXAo+PiArCURSTV9FUlJPUigiZ3Z0OiAiZm10 IlxuIiwgIyNhcmdzKQo+PiArCj4KPiBTYW1lIGhlcmUuCj4KPj4gKyNkZWZpbmUgZ3Z0X3dhcm4o Y29uZGl0aW9uLCBmbXQsIGFyZ3MuLi4pIFwKPj4gKwlXQVJOKChjb25kaXRpb24pLCAiZ3Z0OiAi Zm10IlxuIiwgIyNhcmdzKQo+PiArCj4+ICsjZGVmaW5lIGd2dF93YXJuX29uY2UoY29uZGl0aW9u LCBmbXQsIGFyZ3MuLi4pIFwKPj4gKwlXQVJOX09OQ0UoKGNvbmRpdGlvbiksICJndnQ6ICJmbXQi XG4iLCAjI2FyZ3MpCj4KPiBXQVJOIGFuZCBXQVJOX09OQ0Ugd2lsbCBpbmNsdWRlIGJhY2t0cmFj ZSBzbyBwcmVmaXhpbmcgaXMgdW5uZWNlc3NhcnkuCj4gSSB3b3VsZCBub3QgcHJlZml4IHRoZW0g YXQgYWxsLiBKdXN0IHVzZSB3aGF0IGk5MTUga2VybmVsIG1vZHVsZQo+IGFscmVhZHkgdXNlcy4g SWYgbmVlZGVkLCBzcGxpdCB0aGVtIHRvIHRoZWlyIG93biBmaWxlIGZpcnN0LAo+IGk5MTVfZGVi dWcuaC4KT0suIFRoYW5rcy46KQo+PiArCj4+ICsjZGVmaW5lIGd2dF9kYmcobGV2ZWwsIGZtdCwg YXJncy4uLikgXAo+PiArCURSTV9ERUJVR19EUklWRVIoImd2dDogImZtdCJcbiIsICMjYXJncykK Pj4gKwo+PiArZW51bSB7Cj4+ICsJR1ZUX0RCR19DT1JFID0gKDEgPDwgMCksCj4+ICsJR1ZUX0RC R19NTSA9ICgxIDw8IDEpLAo+PiArCUdWVF9EQkdfSVJRID0gKDEgPDwgMiksCj4+ICt9Owo+Cj4g VGhpcyBlbnVtIGlzIG5vdCBvZiB1c2UuCj4KPj4gKwo+PiArI2RlZmluZSBndnRfZGJnX2NvcmUo Zm10LCBhcmdzLi4uKSBcCj4+ICsJZ3Z0X2RiZyhHVlRfREJHX0NPUkUsIGZtdCwgIyNhcmdzKQo+ PiArCj4KPiBSYWh0ZXIgbGlrZSB0aGlzIChub3QgdG8gbG9zZSB0aGUgdG9waWMpPwo+IAlndnRf ZGJnKCJjb3JlOiAiIGZtdCwgIyNhcmdzKQo+ClRoYW5rcyBmb3IgdGhlIGlkZWEuIEl0J3MgYWRv cmFibGUuIDopCj4+ICsjZGVmaW5lIGd2dF9kYmdfbW0oZm10LCBhcmdzLi4uKSBcCj4+ICsJZ3Z0 X2RiZyhHVlRfREJHX01NLCBmbXQsICMjYXJncykKPj4gKwo+PiArI2RlZmluZSBndnRfZGJnX2ly cShmbXQsIGFyZ3MuLi4pIFwKPj4gKwlndnRfZGJnKEdWVF9EQkdfSVJRLCBmbXQsICMjYXJncykK Pj4gKwo+PiArI2VuZGlmCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv Z3Z0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKPj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uNTJjZmEzMgo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwo+PiBAQCAtMCwwICsxLDM5MyBAQAo+PiAr LyoKPj4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCj4+ICsgKgo+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPj4gKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4+ICsgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKPj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQo+PiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPj4gKyAqCj4+ICsgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0Cj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4+ICsgKiBTb2Z0d2FyZS4K Pj4gKyAqCj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+PiArICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4+ ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKPj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4+ICsgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORyBGUk9NLAo+PiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPj4gKyAqIFNPRlRX QVJFLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlCj4+ICsjaW5jbHVkZQo+PiArI2luY2x1ZGUK Pj4gKwo+PiArI2luY2x1ZGUgImd2dC5oIgo+PiArCj4+ICtzdHJ1Y3QgZ3Z0X2hvc3QgZ3Z0X2hv c3Q7Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3VwcG9ydGVkX2h5cGVydmlz b3JzW10gPSB7Cj4+ICsJW0dWVF9IWVBFUlZJU09SX1RZUEVfWEVOXSA9ICJYZW4gSHlwZXJ2aXNv ciIsCj4+ICsJW0dWVF9IWVBFUlZJU09SX1RZUEVfS1ZNXSA9ICJLVk0iLAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGludCBndnRfaW5pdF9ob3N0KHZvaWQpCj4+ICt7Cj4+ICsJc3RydWN0IGd2dF9o b3N0ICpob3N0ID0gJmd2dF9ob3N0Owo+PiArCj4KPiBJcyBpdCByZWFsbHkgdGhhdCBtdWNoIG1v cmUgdG8gd3JpdGUgZ3Z0X2hvc3QuaW5pdGlhbGl6ZWQ/IENvdW50aW5nIHRoZQo+ICItPiIgdnMg Ii4iIGl0J3MgdGhyZWUgbGV0dGVycy4uLgo+Cj4+ICsJaWYgKCFndnQuZW5hYmxlKSB7Cj4+ICsJ CWd2dF9kYmdfY29yZSgiR1ZULWcgaGFzIGJlZW4gZGlzYWJsZWQgYnkga2VybmVsIHBhcmFtZXRl ciIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoaG9zdC0+aW5p dGlhbGl6ZWQpIHsKPj4gKwkJZ3Z0X2VycigiR1ZULWcgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFs aXplZCEiKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJLyogWGVuIERP TSBVICovCj4+ICsJaWYgKHhlbl9kb21haW4oKSAmJiAheGVuX2luaXRpYWxfZG9tYWluKCkpCj4+ ICsJCXJldHVybiAtRU5PREVWOwo+PiArCj4+ICsJaWYgKHhlbl9pbml0aWFsX2RvbWFpbigpKSB7 Cj4+ICsJCS8qIFhlbiBEb20wICovCj4+ICsJCWhvc3QtPmtkbSA9IHRyeV90aGVuX3JlcXVlc3Rf bW9kdWxlKAo+PiArCQkJCXN5bWJvbF9nZXQoeGVuZ3Rfa2RtKSwgInhlbmd0Iik7Cj4+ICsJCWhv c3QtPmh5cGVydmlzb3JfdHlwZSA9IEdWVF9IWVBFUlZJU09SX1RZUEVfWEVOOwo+PiArCX0gZWxz ZSB7Cj4+ICsJCS8qIG5vdCBpbiBYZW4uIFRyeSBLVk1HVCAqLwo+PiArCQlob3N0LT5rZG0gPSB0 cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSgKPj4gKwkJCQlzeW1ib2xfZ2V0KGt2bWd0X2tkbSksICJr dm0iKTsKPj4gKwkJaG9zdC0+aHlwZXJ2aXNvcl90eXBlID0gR1ZUX0hZUEVSVklTT1JfVFlQRV9L Vk07Cj4+ICsJfQo+PiArCj4+ICsJaWYgKCFob3N0LT5rZG0pCj4+ICsJCXJldHVybiAtRUlOVkFM Owo+Cj4gSSB0aGluayB0aGlzIGVycm9yIHNob3VsZCBiZSByZXBvcnRlZCwgdG8gYWlkIGRldGVj dGluZyBwcm9ibGVtcyBpbgo+IG1vZHVsZSBsb2FkaW5nLgo+ClN1cmUuCj4+ICsKPj4gKwlpZiAo IWh5cGVydmlzb3JfZGV0ZWN0X2hvc3QoKSkKPj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsKPgo+ IFRoaXMgZnVuYyBzaG91bGQgYmUgcHJlZml4ZWQgZ3Z0XywgYXMgaXQgaXMgbm90IGxvY2FsIHRv IHRoaXMgZmlsZS4KPgpXaWxsIGltcHJvdmUgdGhhdC4KPj4gKwlndnRfaW5mbygiUnVubmluZyB3 aXRoIGh5cGVydmlzb3IgJXMgaW4gaG9zdCBtb2RlIiwKPj4gKwkJCXN1cHBvcnRlZF9oeXBlcnZp c29yc1tob3N0LT5oeXBlcnZpc29yX3R5cGVdKTsKPj4gKwo+PiArCWlkcl9pbml0KCZob3N0LT5k ZXZpY2VfaWRyKTsKPj4gKwltdXRleF9pbml0KCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwo+PiAr Cj4+ICsJaG9zdC0+aW5pdGlhbGl6ZWQgPSB0cnVlOwo+PiArCXJldHVybiAwOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGluaXRfZGV2aWNlX2luZm8oc3RydWN0IHBndF9kZXZpY2UgKnBkZXYp Cj4+ICt7Cj4+ICsJc3RydWN0IGd2dF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZwZGV2LT5kZXZpY2Vf aW5mbzsKPj4gKwo+PiArCWlmICghSVNfQlJPQURXRUxMKHBkZXYtPmRldl9wcml2KSkgewo+PiAr CQlEUk1fREVCVUdfRFJJVkVSKCJVbnN1cHBvcnRlZCBHRU4gZGV2aWNlIik7Cj4+ICsJCXJldHVy biAtRU5PREVWOwo+PiArCX0KPgo+IFRoaXMgY291bGQgYmUgImVsc2UiIGNsYXVzZSBvbiB0aGUg bmV4dCBpZiBhbmQgd2lsbCBhbGxvdyBlYXNpZXIgYWRkaW5nCj4gb2YgZnV0dXJlIHBsYXRmb3Jt cy4KPgpXaWxsIHJlZmluZSBpdCBpbnRvIGRlZGljYXRlZCBmdW5jdGlvbnMuIDopCj4+ICsKPj4g KwlpZiAoSVNfQlJPQURXRUxMKHBkZXYtPmRldl9wcml2KSkgewo+PiArCQlpbmZvLT5tYXhfZ3R0 X2dtX3N6ID0gKDFVTEwgPDwgMzIpOyAvKiA0R0IgKi8KPj4gKwkJLyoKPj4gKwkJICogVGhlIGxh eW91dCBvZiBCQVIwIGluIEJEVzoKPj4gKwkJICogfDwgLSBNTUlPIDJNQiAtPnw8LSBSZXNlcnZl ZCA2TUIgLT58PC0gTUFYIEdUVCA4TUItPnwKPj4gKwkJICoKPj4gKwkJICogR1RUIG9mZnNldCBp biBCQVIwIHN0YXJ0cyBmcm9tIDhNQiB0byAxNk1CLCBhbmQKPj4gKwkJICogV2hhdGV2ZXIgR1RU IHNpemUgaXMgY29uZmlndXJlZCBpbiBCSU9TLAo+PiArCQkgKiB0aGUgc2l6ZSBvZiBCQVIwIGlz IGFsd2F5cyAxNk1CLiBUaGUgYWN0dWFsIGNvbmZpZ3VyZWQKPj4gKwkJICogR1RUIHNpemUgY2Fu IGJlIGZvdW5kIGluIEdNQ0hfQ1RSTC4KPj4gKwkJICovCj4+ICsJCWluZm8tPmd0dF9zdGFydF9v ZmZzZXQgPSAoMVVMIDw8IDIzKTsgLyogOE1CICovCj4+ICsJCWluZm8tPm1heF9ndHRfc2l6ZSA9 ICgxVUwgPDwgMjMpOyAvKiA4TUIgKi8KPj4gKwkJaW5mby0+Z3R0X2VudHJ5X3NpemUgPSA4Owo+ PiArCQlpbmZvLT5ndHRfZW50cnlfc2l6ZV9zaGlmdCA9IDM7Cj4+ICsJCWluZm8tPmdtYWRyX2J5 dGVzX2luX2NtZCA9IDg7Cj4+ICsJCWluZm8tPm1taW9fc2l6ZSA9IDIgKiAxMDI0ICogMTAyNDsg LyogMk1CICovCj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyB2b2lkIGluaXRfaW5pdGlhbF9jZmdfc3BhY2Vfc3RhdGUoc3RydWN0IHBndF9kZXZpY2UgKnBk ZXYpCj4+ICt7Cj4+ICsJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBwZGV2LT5kZXZfcHJpdi0+ ZGV2LT5wZGV2Owo+PiArCWludCBpOwo+PiArCj4+ICsJZ3Z0X2RiZ19jb3JlKCJpbml0IGluaXRp YWwgY2ZnIHNwYWNlLCBpZCAlZCIsIHBkZXYtPmlkKTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkg PCBHVlRfQ0ZHX1NQQUNFX1NaOyBpICs9IDQpCj4+ICsJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChw Y2lfZGV2LCBpLAo+PiArCQkJCSh1MzIgKikmcGRldi0+aW5pdGlhbF9jZmdfc3BhY2VbaV0pOwo+ PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IEdWVF9CQVJfTlVNOyBpKyspIHsKPj4gKwkJcGRldi0+ YmFyX3NpemVbaV0gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIGkgKiAyKTsKPj4gKwkJZ3Z0 X2RiZ19jb3JlKCJiYXIgJWQgc2l6ZTogJWxseCIsIGksIHBkZXYtPmJhcl9zaXplW2ldKTsKPj4g Kwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGNsZWFuX2luaXRpYWxfbW1pb19zdGF0ZShz dHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPj4gK3sKPj4gKwlpZiAocGRldi0+Z3R0bW1pb192YSkg ewo+PiArCQlpb3VubWFwKHBkZXYtPmd0dG1taW9fdmEpOwo+PiArCQlwZGV2LT5ndHRtbWlvX3Zh ID0gTlVMTDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAocGRldi0+Z21hZHJfdmEpIHsKPj4gKwkJaW91 bm1hcChwZGV2LT5nbWFkcl92YSk7Cj4+ICsJCXBkZXYtPmdtYWRyX3ZhID0gTlVMTDsKPj4gKwl9 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaW5pdF9pbml0aWFsX21taW9fc3RhdGUoc3RydWN0 IHBndF9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGd2dF9kZXZpY2VfaW5mbyAqaW5m byA9ICZwZGV2LT5kZXZpY2VfaW5mbzsKPj4gKwo+PiArCXU2NCBiYXIwLCBiYXIxOwo+PiArCWlu dCByYzsKPj4gKwo+PiArCWd2dF9kYmdfY29yZSgiaW5pdCBpbml0aWFsIG1taW8gc3RhdGUsIGlk ICVkIiwgcGRldi0+aWQpOwo+PiArCj4+ICsJYmFyMCA9ICoodTY0ICopJnBkZXYtPmluaXRpYWxf Y2ZnX3NwYWNlW0dWVF9SRUdfQ0ZHX1NQQUNFX0JBUjBdOwo+PiArCWJhcjEgPSAqKHU2NCAqKSZw ZGV2LT5pbml0aWFsX2NmZ19zcGFjZVtHVlRfUkVHX0NGR19TUEFDRV9CQVIxXTsKPj4gKwo+PiAr CXBkZXYtPmd0dG1taW9fYmFzZSA9IGJhcjAgJiB+MHhmOwo+PiArCXBkZXYtPnJlZ19udW0gPSBp bmZvLT5tbWlvX3NpemUgLyA0Owo+PiArCXBkZXYtPmdtYWRyX2Jhc2UgPSBiYXIxICYgfjB4ZjsK Pgo+IE1hZ2ljIG51bWJlcnMgc3RpbGwuCj4KTXkgYmFkLiA6KQo+PiArCj4+ICsJcGRldi0+Z3R0 bW1pb192YSA9IGlvcmVtYXAocGRldi0+Z3R0bW1pb19iYXNlLCBwZGV2LT5iYXJfc2l6ZVswXSk7 Cj4+ICsJaWYgKCFwZGV2LT5ndHRtbWlvX3ZhKSB7Cj4+ICsJCWd2dF9lcnIoImZhaWwgdG8gbWFw IEdUVE1NSU8gQkFSLiIpOwo+PiArCQlyZXR1cm4gLUVGQVVMVDsKPj4gKwl9Cj4+ICsKPj4gKwlw ZGV2LT5nbWFkcl92YSA9IGlvcmVtYXAocGRldi0+Z21hZHJfYmFzZSwgcGRldi0+YmFyX3NpemVb Ml0pOwo+PiArCWlmICghcGRldi0+Z21hZHJfdmEpIHsKPj4gKwkJZ3Z0X2VycigiZmFpbCB0byBt YXAgR01BRFIgQkFSLiIpOwo+PiArCQlyYyA9IC1FRkFVTFQ7Cj4+ICsJCWdvdG8gZXJyOwo+PiAr CX0KPj4gKwo+PiArCWd2dF9kYmdfY29yZSgiYmFyMDogMHglbGx4LCBiYXIxOiAweCVsbHgiLCBi YXIwLCBiYXIxKTsKPj4gKwlndnRfZGJnX2NvcmUoIm1taW8gc2l6ZTogJXgiLCBwZGV2LT5tbWlv X3NpemUpOwo+PiArCWd2dF9kYmdfY29yZSgiZ3R0bW1pbzogMHglbGx4LCBnbWFkcjogMHglbGx4 IiwgcGRldi0+Z3R0bW1pb19iYXNlLAo+PiArCQkJcGRldi0+Z21hZHJfYmFzZSk7Cj4+ICsJZ3Z0 X2RiZ19jb3JlKCJndHRtbWlvX3ZhOiAlcCIsIHBkZXYtPmd0dG1taW9fdmEpOwo+PiArCWd2dF9k YmdfY29yZSgiZ21hZHJfdmE6ICVwIiwgcGRldi0+Z21hZHJfdmEpOwo+PiArCj4+ICsJcmV0dXJu IDA7Cj4+ICtlcnI6Cj4+ICsJY2xlYW5faW5pdGlhbF9tbWlvX3N0YXRlKHBkZXYpOwo+PiArCXJl dHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBndnRfc2VydmljZV90aHJlYWQodm9p ZCAqZGF0YSkKPj4gK3sKPj4gKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IChzdHJ1Y3QgcGd0 X2RldmljZSAqKWRhdGE7Cj4+ICsJaW50IHI7Cj4+ICsKPj4gKwlndnRfZGJnX2NvcmUoInNlcnZp Y2UgdGhyZWFkIHN0YXJ0LCBwZ3QgJWQiLCBwZGV2LT5pZCk7Cj4+ICsKPj4gKwl3aGlsZSAoIWt0 aHJlYWRfc2hvdWxkX3N0b3AoKSkgewo+PiArCQlyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxl KHBkZXYtPnNlcnZpY2VfdGhyZWFkX3dxLAo+PiArCQkJCWt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8 fCBwZGV2LT5zZXJ2aWNlX3JlcXVlc3QpOwo+PiArCj4+ICsJCWlmIChrdGhyZWFkX3Nob3VsZF9z dG9wKCkpCj4+ICsJCQlicmVhazsKPj4gKwo+PiArCQlpZiAoZ3Z0X3dhcm5fb25jZShyLAo+PiAr CQkJInNlcnZpY2UgdGhyZWFkIGlzIHdha2VuIHVwIGJ5IHVuZXhwZWN0ZWQgc2lnbmFsLiIpKQo+ PiArCQkJY29udGludWU7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIGNsZWFuX3NlcnZpY2VfdGhyZWFkKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2 KQo+PiArewo+PiArCWlmIChwZGV2LT5zZXJ2aWNlX3RocmVhZCkgewo+PiArCQlrdGhyZWFkX3N0 b3AocGRldi0+c2VydmljZV90aHJlYWQpOwo+PiArCQlwZGV2LT5zZXJ2aWNlX3RocmVhZCA9IE5V TEw7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGluaXRfc2VydmljZV90aHJlYWQo c3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICsJaW5pdF93YWl0cXVldWVfaGVhZCgm cGRldi0+c2VydmljZV90aHJlYWRfd3EpOwo+PiArCj4+ICsJcGRldi0+c2VydmljZV90aHJlYWQg PSBrdGhyZWFkX3J1bihndnRfc2VydmljZV90aHJlYWQsCj4+ICsJCQlwZGV2LCAiZ3Z0X3NlcnZp Y2VfdGhyZWFkJWQiLCBwZGV2LT5pZCk7Cj4+ICsKPj4gKwlpZiAoIXBkZXYtPnNlcnZpY2VfdGhy ZWFkKSB7Cj4+ICsJCWd2dF9lcnIoImZhaWwgdG8gc3RhcnQgc2VydmljZSB0aHJlYWQuIik7Cj4+ ICsJCXJldHVybiAtRU5PU1BDOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgdm9pZCBjbGVhbl9wZ3RfZGV2aWNlKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2 KQo+PiArewo+PiArCWNsZWFuX3NlcnZpY2VfdGhyZWFkKHBkZXYpOwo+PiArCWNsZWFuX2luaXRp YWxfbW1pb19zdGF0ZShwZGV2KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBpbml0X3BndF9k ZXZpY2Uoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYsCj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+PiArewo+PiArCWludCByYzsKPgo+IAlpbnQgcmV0Owo+Cj4+ICsKPj4g KwlyYyA9IGluaXRfZGV2aWNlX2luZm8ocGRldik7Cj4+ICsJaWYgKHJjKQo+PiArCQlyZXR1cm4g cmM7Cj4+ICsKPj4gKwlpbml0X2luaXRpYWxfY2ZnX3NwYWNlX3N0YXRlKHBkZXYpOwo+PiArCj4+ ICsJcmMgPSBpbml0X2luaXRpYWxfbW1pb19zdGF0ZShwZGV2KTsKPj4gKwlpZiAocmMpCj4+ICsJ CWdvdG8gZXJyOwo+PiArCj4+ICsJcmMgPSBpbml0X3NlcnZpY2VfdGhyZWFkKHBkZXYpOwo+PiAr CWlmIChyYykKPj4gKwkJZ290byBlcnI7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK2VycjoKPj4g KwljbGVhbl9wZ3RfZGV2aWNlKHBkZXYpOwo+Cj4gQWRkIHRlYXJkb3duIHBhdGgsIHNlZSBiZWxv dy4KPgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBwb3N0X2luaXRf cGd0X2RldmljZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPj4gK3sKPj4gKwlyZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZnJlZV9wZ3RfZGV2aWNlKHN0cnVjdCBwZ3RfZGV2 aWNlICpwZGV2KQo+PiArewo+PiArCXN0cnVjdCBndnRfaG9zdCAqaG9zdCA9ICZndnRfaG9zdDsK Pj4gKwo+PiArCW11dGV4X2xvY2soJmhvc3QtPmRldmljZV9pZHJfbG9jayk7Cj4+ICsJaWRyX3Jl bW92ZSgmaG9zdC0+ZGV2aWNlX2lkciwgcGRldi0+aWQpOwo+PiArCW11dGV4X3VubG9jaygmaG9z dC0+ZGV2aWNlX2lkcl9sb2NrKTsKPj4gKwo+PiArCXZmcmVlKHBkZXYpOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgc3RydWN0IHBndF9kZXZpY2UgKmFsbG9jX3BndF9kZXZpY2Uoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiArewo+PiArCXN0cnVjdCBndnRfaG9zdCAqaG9zdCA9 ICZndnRfaG9zdDsKPj4gKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IE5VTEw7Cj4+ICsKPj4g KwlwZGV2ID0gdnphbGxvYyhzaXplb2YoKnBkZXYpKTsKPj4gKwlpZiAoIXBkZXYpCj4+ICsJCXJl dHVybiBOVUxMOwo+Cj4gVGhpcyBpcyBhIG1lbW9yeSBlcnJvciwgd291bGQgbGlrZSB0byBzZWUg dGhpcyBwcm9wYWdhdGVkIHVwIGFzCj4KPiAJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4KPj4g Kwo+PiArCW11dGV4X2xvY2soJmhvc3QtPmRldmljZV9pZHJfbG9jayk7Cj4+ICsJcGRldi0+aWQg PSBpZHJfYWxsb2MoJmhvc3QtPmRldmljZV9pZHIsIHBkZXYsIDAsIDAsIEdGUF9LRVJORUwpOwo+ PiArCW11dGV4X3VubG9jaygmaG9zdC0+ZGV2aWNlX2lkcl9sb2NrKTsKPj4gKwo+PiArCWlmIChw ZGV2LT5pZCA8IDApIHsKPj4gKwkJZ3Z0X2VycigiZmFpbCB0byBhbGxvY2F0ZSBwZ3QgZGV2aWNl IGlkLiIpOwo+PiArCQlnb3RvIGVycjsKPj4gKwl9Cj4+ICsKPgo+IFNhbWUgaGVyZSwgcHJvcGFn YXRlIHRoZSBlcnJvci4KPgo+PiArCW11dGV4X2luaXQoJnBkZXYtPmxvY2spOwo+PiArCXBkZXYt PmRldl9wcml2ID0gZGV2X3ByaXY7Cj4+ICsJaWRyX2luaXQoJnBkZXYtPmluc3RhbmNlX2lkcik7 Cj4+ICsKPj4gKwlyZXR1cm4gcGRldjsKPj4gK2VycjoKPj4gKwlmcmVlX3BndF9kZXZpY2UocGRl dik7Cj4KPiBJJ2QgbGlrZSB0byBzZWUgYSB0ZWFyZG93biBwYXRoIGhlcmUuIFRoZW4gZnJlZV9w Z3RfZGV2aWNlKCkgKG9yIHJhdGhlcgo+IGRlc3Ryb3lfcGd0X2RldmljZSgpIGNhbiBleHBlY3Qg ZXZlcnl0aGluZyB0byBiZSBpbml0aWFsaXplZCBhbmQgd2hlbgo+IGl0IGl0IGlzIGNhbGxlZCwg aXQgZG9lc24ndCBuZWVkIGlmcy4gVGhpcyBtYWtlcyB0aGUgZHJpdmVyIGNvZGUgbW9yZQo+IHJv YnVzdC4KPgo+IE9yIGFyZSB3ZSBleHBlY3Rpbmcgb25seSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQg c3RydWN0cyBmb3Igc29tZSByZWFzb24/Cj4KVGhlIGlkZWEgaGVyZSBpcyB0byBwcmV2ZW50IHRl YXJkb3duIHBhdGggbWFpbnRhaW4gYnVyZGVuIGluIGZ1dHVyZSwgCnVzdWFsbHkgZHVyaW5nIHRo ZSBkZXZlbG9wbWVudCwgdGhlIHRlYXJkb3duIHBhdGggaXMgZWFzeSB0byBiZSBicm9rZW4uCgpT dXJlLCBJIHdpbGwgZm9sbG93IHlvdXIgaWRlYS4gOikKPj4gKwlyZXR1cm4gTlVMTDsKPj4gK30K Pj4gKwo+PiArdm9pZCBndnRfZGVzdHJveV9wZ3RfZGV2aWNlKHZvaWQgKnByaXZhdGVfZGF0YSkK Pj4gK3sKPj4gKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IChzdHJ1Y3QgcGd0X2RldmljZSAq KXByaXZhdGVfZGF0YTsKPj4gKwo+PiArCWNsZWFuX3BndF9kZXZpY2UocGRldik7Cj4+ICsJZnJl ZV9wZ3RfZGV2aWNlKHBkZXYpOwo+Cj4gV2h5IG11bHRpcGxlIGNhbGxzIHRvIGRlc3Ryb3kgYSBk ZXZpY2UsIHRoZXJlJ3Mgb25seSBvbmUgYWxsb2Mgc3RpbGw/Cj4KY2xlYW5fcGd0X2RldmljZSgp IHdpbGwgY2FsbCB0aGUgY2xlbmFfeHh4KCkgZnVuY3Rpb24gb2YgZWFjaCAKc3ViLWNvbXBvbmVu dHMuIEVhY2ggc3ViLWNvbXBvbmVudHMgd2lsbCBzdG9wIGFuZCByZWxlYXNlIHRoZSByZXNvdXJj ZSAKaXQncyB1c2luZy4gYW5kIGZyZWVfcGd0X2RldmljZSgpIHdpbGwgZnJlZSB0aGUgInBndCBk ZXZpY2UiIHJlbW92ZSBpdCAKZnJvbSB0aGUgSURSIHBvb2wuIDopCj4+ICt9Cj4+ICsKPj4gKy8q Kgo+PiArICogZ3Z0X2NyZWF0ZV9wZ3RfZGV2aWNlIC0gY3JlYXRlIGEgR1ZUIHBoeXNpY2FsIGRl dmljZQo+PiArICogQGRldjogZHJtIGRldmljZQo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIGF0IHRoZSBpbml0aWFsaXphdGlvbiBzdGFnZSwgdG8gY3JlYXRlIGEgcGh5c2lj YWwKPj4gKyAqIEdWVCBkZXZpY2UgYW5kIGluaXRpYWxpemUgbmVjZXNzYXJ5IEdWVCBjb21wb25l bnRzIGZvciBpdC4KPj4gKyAqCj4+ICsgKiBSZXR1cm5zOgo+PiArICogcG9pbnRlciB0byB0aGUg cGd0X2RldmljZSBzdHJ1Y3R1cmUsIE5VTEwgaWYgZmFpbGVkLgo+PiArICovCj4+ICt2b2lkICpn dnRfY3JlYXRlX3BndF9kZXZpY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ PiArewo+PiArCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0gTlVMTDsKPj4gKwlzdHJ1Y3QgZ3Z0 X2hvc3QgKmhvc3QgPSAmZ3Z0X2hvc3Q7Cj4+ICsJaW50IHJjOwo+PiArCj4+ICsJaWYgKCFob3N0 LT5pbml0aWFsaXplZCAmJiAhZ3Z0X2luaXRfaG9zdCgpKSB7Cj4+ICsJCWd2dF9lcnIoImd2dF9p bml0X2hvc3QgZmFpbCIpOwo+PiArCQlyZXR1cm4gTlVMTDsKPj4gKwl9Cj4+ICsKPj4gKwlndnRf ZGJnX2NvcmUoImNyZWF0ZSBuZXcgcGd0IGRldmljZSwgaTkxNSBkZXZfcHJpdjogJXAiLCBkZXZf cHJpdik7Cj4+ICsKPj4gKwlwZGV2ID0gYWxsb2NfcGd0X2RldmljZShkZXZfcHJpdik7Cj4+ICsJ aWYgKCFwZGV2KSB7Cj4+ICsJCWd2dF9lcnIoImZhaWwgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBw Z3QgZGV2aWNlLiIpOwo+PiArCQlnb3RvIGVycjsKPj4gKwl9Cj4+ICsKPj4gKwlndnRfZGJnX2Nv cmUoImluaXQgcGd0IGRldmljZSwgaWQgJWQiLCBwZGV2LT5pZCk7Cj4+ICsKPj4gKwlyYyA9IGlu aXRfcGd0X2RldmljZShwZGV2LCBkZXZfcHJpdik7Cj4+ICsJaWYgKHJjKSB7Cj4KPiBKdXN0IGNh bGwgdGhlIHJldHVybiB2YWx1ZSB2YXJpYWJsZSByZXQgbGlrZSBldmVyeXdoZXJlLgo+ClN1cmUu IEdvb2QgaWRlYS4KPj4gKwkJZ3Z0X2VycigiZmFpbCB0byBpbml0IHBoeXNpY2FsIGRldmljZSBz dGF0ZS4iKTsKPj4gKwkJZ290byBlcnI7Cj4+ICsJfQo+PiArCj4+ICsJZ3Z0X2RiZ19jb3JlKCJw Z3QgZGV2aWNlIGNyZWF0aW9uIGRvbmUsIGlkICVkIiwgcGRldi0+aWQpOwo+PiArCj4+ICsJcmV0 dXJuIHBkZXY7Cj4+ICtlcnI6Cj4+ICsJaWYgKHBkZXYpIHsKPj4gKwkJZ3Z0X2Rlc3Ryb3lfcGd0 X2RldmljZShwZGV2KTsKPj4gKwkJcGRldiA9IE5VTEw7Cj4+ICsJfQo+Cj4gUHJvcGVyIGdvdG8g bGFiZWwgYmFzZWQgdGVhcmRvd24gcGF0aCBzaG91bGQgYmUgdXNlZC4KPgpUaGFua3MuIHdpbGwg Y2hhbmdlIGFsbCBlcnJvciBsYWJlbCBsaWtlIHRoYXQuCj4gZXJyX2Rlc3Ryb3lfcGd0Ogo+IAln dnRfZGVzdHJveV9wZ3RfZGV2aWNlKHBkZXYpOwo+IGVycjoKPj4gKwlyZXR1cm4gTlVMTDsKPj4g K30KPj4gKwo+PiArLyoqCj4+ICsgKiBndnRfcG9zdF9pbml0X3BndF9kZXZpY2UgLSBwb3N0IGlu aXQgYSBHVlQgcGh5c2ljYWwgZGV2aWNlCj4+ICsgKiBAZGV2OiBkcm0gZGV2aWNlCj4KPiBEb3Vi bGUgY2hlY2sgdGhlIGtlcm5lbGRvY3MgdG8gYmUgY29ycmVjdCBwZXIgYXJndW1lbnRzIG9mIGZ1 bmN0aW9uLgo+CldpbGwgY29ycmVjdCBpdC4gOikKPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9u IGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBpbml0aWFsaXphdGlvbiBzdGFnZSwgdG8KPj4g KyAqIHBvc3QtaW5pdGlhbGl6ZSBhIHBoeXNpY2FsIEdWVCBkZXZpY2UgYW5kIGluaXRpYWxpemUg bmVjZXNzYXJ5Cj4+ICsgKiBHVlQgY29tcG9uZW50cyByZWx5IG9uIGk5MTUgY29tcG9uZW50cy4K Pj4gKyAqCj4+ICsgKiBSZXR1cm5zOgo+PiArICogemVybyBvbiBzdWNjZXNzLCBub24temVybyBp ZiBmYWlsZWQuCj4+ICsgKi8KPj4gK2ludCBndnRfcG9zdF9pbml0X3BndF9kZXZpY2Uodm9pZCAq cHJpdmF0ZV9kYXRhKQo+PiArewo+PiArCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0gKHN0cnVj dCBwZ3RfZGV2aWNlICopcHJpdmF0ZV9kYXRhOwo+PiArCXN0cnVjdCBndnRfaG9zdCAqaG9zdCA9 ICZndnRfaG9zdDsKPj4gKwlpbnQgcmM7Cj4+ICsKPj4gKwlpZiAoIWhvc3QtPmluaXRpYWxpemVk KSB7Cj4+ICsJCWd2dF9lcnIoImd2dF9ob3N0IGhhdmVuJ3QgYmVlbiBpbml0aWFsaXplZC4iKTsK Pj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsJfQo+PiArCj4+ICsJZ3Z0X2RiZ19jb3JlKCJwb3N0 IGluaXQgcGd0IGRldmljZSAlZCIsIHBkZXYtPmlkKTsKPj4gKwo+PiArCXJjID0gcG9zdF9pbml0 X3BndF9kZXZpY2UocGRldik7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCWd2dF9lcnIoImZhaWwgdG8g cG9zdCBpbml0IHBoeXNpY2FsIGRldmljZSBzdGF0ZS4iKTsKPj4gKwkJcmV0dXJuIHJjOwo+PiAr CX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L2d2dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCj4+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmQ0NTAxOTgKPj4gLS0tIC9kZXYv bnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPj4gQEAgLTAsMCAr MSwxMDAgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+PiArICoKPj4gKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh Cj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+PiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCj4+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPj4gKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+ ICsgKgo+PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+PiAr ICogU29mdHdhcmUuCj4+ICsgKgo+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPj4gKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAo+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4+ICsgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF Ugo+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKPj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhF Cj4+ICsgKiBTT0ZUV0FSRS4KPj4gKyAqLwo+PiArCj4+ICsjaWZuZGVmIF9HVlRfSF8KPj4gKyNk ZWZpbmUgX0dWVF9IXwo+PiArCj4+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPj4gKyNpbmNsdWRl ICJpOTE1X3ZncHUuaCIKPj4gKwo+PiArI2luY2x1ZGUgImRlYnVnLmgiCj4+ICsjaW5jbHVkZSAi cGFyYW1zLmgiCj4+ICsjaW5jbHVkZSAicmVnLmgiCj4+ICsjaW5jbHVkZSAiaHlwZXJjYWxsLmgi Cj4+ICsjaW5jbHVkZSAibXB0LmgiCj4+ICsKPj4gKyNkZWZpbmUgR1ZUX01BWF9WR1BVIDgKPj4g Kwo+PiArZW51bSB7Cj4+ICsJR1ZUX0hZUEVSVklTT1JfVFlQRV9YRU4gPSAwLAo+PiArCUdWVF9I WVBFUlZJU09SX1RZUEVfS1ZNLAo+PiArfTsKPj4gKwo+PiArc3RydWN0IGd2dF9ob3N0IHsKPj4g Kwlib29sIGluaXRpYWxpemVkOwo+PiArCWludCBoeXBlcnZpc29yX3R5cGU7Cj4+ICsJc3RydWN0 IG11dGV4IGRldmljZV9pZHJfbG9jazsKPj4gKwlzdHJ1Y3QgaWRyIGRldmljZV9pZHI7Cj4+ICsJ c3RydWN0IGd2dF9rZXJuZWxfZG0gKmtkbTsKPj4gK307Cj4+ICsKPj4gK2V4dGVybiBzdHJ1Y3Qg Z3Z0X2hvc3QgZ3Z0X2hvc3Q7Cj4KPiAtLT4KPgo+PiArZXh0ZXJuIHN0cnVjdCBndnRfa2VybmVs X2RtIHhlbmd0X2tkbTsKPj4gK2V4dGVybiBzdHJ1Y3QgZ3Z0X2tlcm5lbF9kbSBrdm1ndF9rZG07 Cj4KPiA8LS0gVGhlc2Ugc2hvdWxkIGxpa2VseSBiZSBkZWNsYXJlZCBzb21ld2hlcmUgaW4gaW5j bHVkZS8gcmF0aGVyIHRoYW4KPiBoZXJlLgo+CldpbGwgY2hlY2sgaG93IGk5MTUgZG9lcy4gOikK Pj4gKwo+PiArLyogRGVzY3JpYmUgdGhlIGxpbWl0YXRpb24gb2YgSFcuKi8KPj4gK3N0cnVjdCBn dnRfZGV2aWNlX2luZm8gewo+PiArCXU2NCBtYXhfZ3R0X2dtX3N6Owo+PiArCXUzMiBndHRfc3Rh cnRfb2Zmc2V0Owo+PiArCXUzMiBndHRfZW5kX29mZnNldDsKPj4gKwl1MzIgbWF4X2d0dF9zaXpl Owo+PiArCXUzMiBndHRfZW50cnlfc2l6ZTsKPj4gKwl1MzIgZ3R0X2VudHJ5X3NpemVfc2hpZnQ7 Cj4+ICsJdTMyIGdtYWRyX2J5dGVzX2luX2NtZDsKPj4gKwl1MzIgbW1pb19zaXplOwo+PiArfTsK Pj4gKwo+PiArc3RydWN0IHZndF9kZXZpY2Ugewo+PiArCWludCBpZDsKPj4gKwlpbnQgdm1faWQ7 Cj4+ICsJc3RydWN0IHBndF9kZXZpY2UgKnBkZXY7Cj4+ICsJYm9vbCB3YXJuX3VudHJhY2s7Cj4+ ICt9Owo+PiArCj4+ICtzdHJ1Y3QgcGd0X2RldmljZSB7Cj4KPiBDb21tZW50cyB0byB0aGlzIGFu ZCBvdGhlciBzdHJ1Y3RzIGFib3V0IHdoYXQgdGhlIG1lbWViZXJzIGFyZS4KPgo+PiArCXN0cnVj dCBtdXRleCBsb2NrOwo+PiArCWludCBpZDsKPj4gKwo+PiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdjsKPj4gKwlzdHJ1Y3QgaWRyIGluc3RhbmNlX2lkcjsKPj4gKwo+PiArCXN0 cnVjdCBndnRfZGV2aWNlX2luZm8gZGV2aWNlX2luZm87Cj4+ICsKPj4gKwl1OCBpbml0aWFsX2Nm Z19zcGFjZVtHVlRfQ0ZHX1NQQUNFX1NaXTsKPj4gKwl1NjQgYmFyX3NpemVbR1ZUX0JBUl9OVU1d Owo+PiArCj4+ICsJdTY0IGd0dG1taW9fYmFzZTsKPj4gKwl2b2lkICpndHRtbWlvX3ZhOwo+PiAr Cj4+ICsJdTY0IGdtYWRyX2Jhc2U7Cj4+ICsJdm9pZCAqZ21hZHJfdmE7Cj4+ICsKPj4gKwl1MzIg bW1pb19zaXplOwo+PiArCXUzMiByZWdfbnVtOwo+PiArCj4+ICsJd2FpdF9xdWV1ZV9oZWFkX3Qg c2VydmljZV90aHJlYWRfd3E7Cj4+ICsJc3RydWN0IHRhc2tfc3RydWN0ICpzZXJ2aWNlX3RocmVh ZDsKPj4gKwl1bnNpZ25lZCBsb25nIHNlcnZpY2VfcmVxdWVzdDsKPj4gK307Cj4+ICsKPj4gKyNl bmRpZgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2h5cGVyY2FsbC5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2h5cGVyY2FsbC5oCj4+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjBhNDE4NzQKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaHlwZXJjYWxsLmgKPj4gQEAgLTAsMCArMSwzMCBA QAo+PiArLyoKPj4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4+ICsgKgo+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPj4gKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4+ICsgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKPj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+PiArICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPj4gKyAqCj4+ ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4+ICsgKiBTb2Z0 d2FyZS4KPj4gKyAqCj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+PiArICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4+ICsg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+PiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPj4gKyAq IFNPRlRXQVJFLgo+PiArICovCj4+ICsKPj4gKyNpZm5kZWYgX0dWVF9IWVBFUkNBTExfSF8KPj4g KyNkZWZpbmUgX0dWVF9IWVBFUkNBTExfSF8KPj4gKwo+PiArc3RydWN0IGd2dF9rZXJuZWxfZG0g ewo+PiArfTsKPgpNeSBiYWQuIDopCj4gSSB3b3VsZCBwcmVmZXIgbW9yZSBjb2RlIGludHJvZHVj ZWQgaGVyZSBpbiB0aGUgaW5pdGlhbCBwYXRjaCwgb3IgdGhpcwo+IGNhbiBiZSBpbnRyb2R1Y2Vk IGxhdGVyIGluIHRoZSBzZXJpZXMgYXMgd2hvbGUuCj4KPiBJdCB1bm5lY2Vzc2FyaWx5IGNvbXBs aWNhdGVzIHRoZSByZXZpZXcgaWYgc29tZSBmaWxlcyBhbmQgY2FsbHMgYXJlCj4gaW50cm9kdWNl ZCB3aXRoIG5vIGRvY3VtZW50YXRpb24gYW5kIGltcGxlbWVudGF0aW9uIGFuZCBvbmx5IGxhdGVy Cj4gdGhlaXIgaW1wbGVtZW50YXRpb24gaXMgYWRkZWQuCj4KPiBJIGNhbid0IHJlYWxseSByZXZp ZXcgaWYgdXNpbmcgYSBzdHJ1Y3R1cmUgaXMgYSBnb29kIGlkZWEgaWYgSSBjYW4ndAo+IHNlZSB0 aGUgY29udGV4dCBvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGVpciB1c2UuCj4KPj4gKwo+PiArI2Vu ZGlmIC8qIF9HVlRfSFlQRVJDQUxMX0hfICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvbXB0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmgKPj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uZTU5NGJiOAo+PiAtLS0gL2Rldi9u dWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tcHQuaAo+PiBAQCAtMCwwICsx LDM0IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPj4gKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAo+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+PiAr ICoKPj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPj4gKyAq IFNvZnR3YXJlLgo+PiArICoKPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4+ICsgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKPj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+PiArICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK Pj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+ PiArICogU09GVFdBUkUuCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfR1ZUX01QVF9IXwo+PiAr I2RlZmluZSBfR1ZUX01QVF9IXwo+PiArCj4+ICtzdHJ1Y3Qgdmd0X2RldmljZTsKPj4gKwo+PiAr c3RhdGljIGlubGluZSBib29sIGh5cGVydmlzb3JfZGV0ZWN0X2hvc3Qodm9pZCkKPj4gK3sKPj4g KwlyZXR1cm4gZmFsc2U7Cj4+ICt9Cj4KPiBUaGlzIGlzIGFsc28gbm90IHZlcnkgcmV2aWV3YWJs ZSBhbmQgdGhlcmUncyBhbiB1bm5lY2Vzc2FyeSBmb3J3YXJkCj4gZGVjbGFyYXRpb24uCj4KPj4g Kwo+PiArI2VuZGlmIC8qIF9HVlRfTVBUX0hfICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1z LmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uZDM4MWQxNwo+PiAt LS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuYwo+ PiBAQCAtMCwwICsxLDMyIEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQo+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4gKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KPj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+ICsgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgo+PiArICoKPj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPj4gKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKPj4gKyAqIFNvZnR3YXJlLgo+PiArICoKPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4+ ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKPj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+PiArICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKPj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4+ICsgKiBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTIElOIFRIRQo+PiArICogU09GVFdBUkUuCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgImd2 dC5oIgo+PiArCj4+ICtzdHJ1Y3QgZ3Z0X2tlcm5lbF9wYXJhbXMgZ3Z0ID0gewo+PiArCS5lbmFi bGUgPSBmYWxzZSwKPj4gKwkuZGVidWcgPSAwLAo+PiArfTsKPj4gKwo+PiArbW9kdWxlX3BhcmFt X25hbWVkKGd2dF9lbmFibGUsIGd2dC5lbmFibGUsIGJvb2wsIDA2MDApOwo+Cj4gVGhpcyBzaG91 bGQganVzdCBiZQo+Cj4gCW1vZHVsZV9wYXJhbV9uYW1lZChlbmFibGUsIGd2dC5lbmFibGUsIGJv b2wsIC4uLikKPgo+IG90aGVyd2lzZSBwYXJhbWV0ZXIgaGFzIHRvIGJlIHBhc3NlZCBhdCBib290 IHRpbWUgbGlrZSB0aGlzOgo+IAkKPiAJZ3Z0Lmd2dF9lbmFibGU9MQo+Cj4gV2hlcmUgd2Ugd2Fu dAo+Cj4gCWd2dC5lbmFibGU9MQo+Cj4gUmlnaHQ/Cj4KWWVzLiBXaWxsIG1vdmUgdGhlc2UgcGFy YW1zIGludG8gaW50ZWxfZ3Z0LmMKCj4+ICtNT0RVTEVfUEFSTV9ERVNDKGd2dF9lbmFibGUsICJF bmFibGUgSW50ZWwgR1ZULWcgaG9zdCBzdXBwb3J0Iik7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFy YW1zLmgKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uZDI5NTViOQo+ PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMu aAo+PiBAQCAtMCwwICsxLDM0IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAx NiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQo+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4gKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KPj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgo+PiArICoKPj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPj4gKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKPj4gKyAqIFNvZnR3YXJlLgo+PiArICoKPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S Cj4+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+PiArICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKPj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4+ICsgKiBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTIElOIFRIRQo+PiArICogU09GVFdBUkUuCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBf R1ZUX1BBUkFNU19IXwo+PiArI2RlZmluZSBfR1ZUX1BBUkFNU19IXwo+PiArCj4+ICtzdHJ1Y3Qg Z3Z0X2tlcm5lbF9wYXJhbXMgewo+PiArCWJvb2wgZW5hYmxlOwo+PiArCWludCBkZWJ1ZzsKPgo+ IFRoaXMgbWVtYmVyIGlzIHVudXNlZCBjdXJyZW50bHksIGNhbiBiZSBkcm9wcGVkLgo+CldpbGwg cmVtb3ZlIHRoYXQuCj4+ICt9Owo+PiArCj4+ICtleHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfcGFy YW1zIGd2dDsKPj4gKwo+PiArI2VuZGlmCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcmVnLmgKPj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uZDM2M2I3NAo+PiAtLS0gL2Rldi9udWxs Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9yZWcuaAo+PiBAQCAtMCwwICsxLDM0 IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+PiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPj4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAo+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+PiArICoK Pj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPj4gKyAqIFNv ZnR3YXJlLgo+PiArICoKPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4+ICsgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKPj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPj4g KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+PiAr ICogU09GVFdBUkUuCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfR1ZUX1JFR19ICj4+ICsjZGVm aW5lIF9HVlRfUkVHX0gKPj4gKwo+PiArI2RlZmluZSBHVlRfQ0ZHX1NQQUNFX1NaCTI1Ngo+PiAr I2RlZmluZSBHVlRfQkFSX05VTQkJNAo+PiArCj4+ICsjZGVmaW5lIEdWVF9SRUdfQ0ZHX1NQQUNF X0JBUjAJMHgxMAo+PiArI2RlZmluZSBHVlRfUkVHX0NGR19TUEFDRV9CQVIxCTB4MTgKPj4gKyNk ZWZpbmUgR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMgkweDIwCj4KPiBTb21lIGRvY3VtZW50YXRpb24g aGVyZSB3b3VsZCBiZSBncmVhdC4KPgo+PiArCj4+ICsjZW5kaWYKPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RtYS5jCj4+IGluZGV4IDFjNmQyMjcuLmYzYmVkMzcgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kbWEuYwo+PiBAQCAtMzUsNiArMzUsNyBAQAo+PiAgICNpbmNsdWRlICJpbnRlbF9kcnYuaCIK Pj4gICAjaW5jbHVkZQo+PiAgICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+PiArI2luY2x1ZGUgImk5 MTVfZ3Z0LmgiCj4+ICAgI2luY2x1ZGUgImk5MTVfdmdwdS5oIgo+PiAgICNpbmNsdWRlICJpOTE1 X3RyYWNlLmgiCj4+ICAgI2luY2x1ZGUKPj4gQEAgLTEwNDUsNiArMTA0NiwxMCBAQCBpbnQgaTkx NV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdz KQo+Pgo+PiAgIAlpbnRlbF91bmNvcmVfaW5pdChkZXYpOwo+Pgo+PiArCXJldCA9IGludGVsX2d2 dF9pbml0KGRldik7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZ290byBvdXRfdW5jb3JlX2Zpbmk7Cj4+ ICsKPj4gICAJcmV0ID0gaTkxNV9nZW1fZ3R0X2luaXQoZGV2KTsKPj4gICAJaWYgKHJldCkKPj4g ICAJCWdvdG8gb3V0X3VuY29yZV9maW5pOwo+Cj4gVGhpcyBuZWVkcyB0byBiZWNvbWUgImdvdG8g b3V0X2d2dF9jbGVhbnVwOyIKPgpHb29kIGlkZWEuIDopCj4+IEBAIC0xMTM1LDYgKzExNDAsMTIg QEAgaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQg bG9uZyBmbGFncykKPj4gICAJCWdvdG8gb3V0X3Bvd2VyX3dlbGw7Cj4+ICAgCX0KPj4KPj4gKwly ZXQgPSBpbnRlbF9ndnRfcG9zdF9pbml0KGRldik7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlEUk1f RVJST1IoImZhaWxlZCB0byBwb3N0IGluaXQgcGd0IGRldmljZVxuIik7Cj4+ICsJCWdvdG8gb3V0 X3Bvd2VyX3dlbGw7Cj4+ICsJfQo+PiArCj4+ICAgCS8qCj4+ICAgCSAqIE5vdGlmeSBhIHZhbGlk IHN1cmZhY2UgYWZ0ZXIgbW9kZXNldHRpbmcsCj4+ICAgCSAqIHdoZW4gcnVubmluZyBpbnNpZGUg YSBWTS4KPj4gQEAgLTExNzcsNiArMTE4OCw3IEBAIG91dF9nZW1fdW5sb2FkOgo+PiAgIG91dF9n dHQ6Cj4+ICAgCWk5MTVfZ2xvYmFsX2d0dF9jbGVhbnVwKGRldik7Cj4KPiBvdXRfZ3Z0X2NsZWFu dXA6Cj4KPj4gICBvdXRfdW5jb3JlX2Zpbmk6Cj4+Cj4+ICsJaW50ZWxfZ3Z0X2NsZWFudXAoZGV2 KTsKPgo+IFRoaXMgbmVlZHMgdG8gYmUgbGlmdGVkIHVwIHRvIGl0cyBvd24gbGFiZWwgZW5zdXJl IHByb3BlciB0ZWFyZG93biBpZgo+IGk5MTVfZ2VtX2d0dF9pbml0KCkgZmFpbHMuCj4KPj4gICAJ aW50ZWxfdW5jb3JlX2ZpbmkoZGV2KTsKPj4gICAJaTkxNV9tbWlvX2NsZWFudXAoZGV2KTsKPj4g ICBwdXRfYnJpZGdlOgo+PiBAQCAtMTIyMyw2ICsxMjM1LDggQEAgaW50IGk5MTVfZHJpdmVyX3Vu bG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+Pgo+PiAgIAlpbnRlbF9tb2Rlc2V0X2NsZWFu dXAoZGV2KTsKPj4KPj4gKwlpbnRlbF9ndnRfY2xlYW51cChkZXYpOwo+PiArCj4+ICAgCS8qCj4+ ICAgCSAqIGZyZWUgdGhlIG1lbW9yeSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoZSBjaGlsZCBkZXZp Y2UKPj4gICAJICogY29uZmlnIHBhcnNlZCBmcm9tIFZCVAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKPj4gaW5kZXggMjBkOWRiZC4uMmY4OTdjMyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCj4+IEBAIC0xNzA1LDYgKzE3MDUsMTAgQEAgc3RydWN0IGk5MTVfd29ya2Fyb3VuZHMgewo+ PiAgIAl1MzIgaHdfd2hpdGVsaXN0X2NvdW50W0k5MTVfTlVNX1JJTkdTXTsKPj4gICB9Owo+Pgo+ PiArc3RydWN0IGk5MTVfZ3Z0IHsKPj4gKwl2b2lkICpwZ3RfZGV2aWNlOwo+PiArfTsKPj4gKwo+ PiAgIHN0cnVjdCBpOTE1X3ZpcnR1YWxfZ3B1IHsKPj4gICAJYm9vbCBhY3RpdmU7Cj4+ICAgfTsK Pj4gQEAgLTE3NDQsNiArMTc0OCw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPj4KPj4g ICAJc3RydWN0IGk5MTVfdmlydHVhbF9ncHUgdmdwdTsKPj4KPj4gKwlzdHJ1Y3QgaTkxNV9ndnQg Z3Z0Owo+PiArCj4+ICAgCXN0cnVjdCBpbnRlbF9ndWMgZ3VjOwo+Pgo+PiAgIAlzdHJ1Y3QgaW50 ZWxfY3NyIGNzcjsKPj4gQEAgLTI3ODAsNiArMjc4NiwxMiBAQCB2b2lkIGludGVsX3VuY29yZV9m b3JjZXdha2VfZ2V0X19sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ PiAgIHZvaWQgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXRfX2xvY2tlZChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICAgCQkJCQllbnVtIGZvcmNld2FrZV9kb21haW5zIGRv bWFpbnMpOwo+PiAgIHZvaWQgYXNzZXJ0X2ZvcmNld2FrZXNfaW5hY3RpdmUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPj4gKwo+PiArc3RhdGljIGlubGluZSBib29sIGludGVs X2d2dF9hY3RpdmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPj4gK3sKPj4gKwlyZXR1cm4gdG9f aTkxNShkZXYpLT5ndnQucGd0X2RldmljZSA/IHRydWUgOiBmYWxzZTsKPj4gK30KPj4gKwo+PiAg IHN0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF92Z3B1X2FjdGl2ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQo+PiAgIHsKPj4gICAJcmV0dXJuIHRvX2k5MTUoZGV2KS0+dmdwdS5hY3RpdmU7Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d2dC5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9ndnQuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAw MDAwLi4zY2E3MjMyCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9ndnQuYwo+PiBAQCAtMCwwICsxLDkzIEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0 KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4g KyAqCj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KPj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+PiArICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgo+PiArICoKPj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPj4g KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKPj4gKyAqIFNvZnR3YXJlLgo+PiArICoKPj4gKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCj4+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPj4gKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAo+PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4+ ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+PiArICogU09GVFdBUkUuCj4+ICsgKi8KPj4gKwo+ PiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4+ICsjaW5jbHVkZSAiaTkxNV9ndnQuaCIKPj4gKwo+ PiArLyoqCj4+ICsgKiBET0M6IEludGVsIEdWVC1nIGhvc3Qgc3VwcG9ydAo+PiArICoKPj4gKyAq IEludGVsIEdWVC1nIGlzIGEgZ3JhcGhpY3MgdmlydHVhbGl6YXRpb24gdGVjaG5vbG9neSB3aGlj aCBzaGFyZXMgdGhlCj4+ICsgKiBHUFUgYW1vbmcgbXVsdGlwbGUgdmlydHVhbCBtYWNoaW5lcyBv biBhIHRpbWUtc2hhcmluZyBiYXNpcy4gRWFjaAo+PiArICogdmlydHVhbCBtYWNoaW5lIGlzIHBy ZXNlbnRlZCBhIHZpcnR1YWwgR1BVICh2R1BVKSwgd2hpY2ggaGFzIGVxdWl2YWxlbnQKPj4gKyAq IGZlYXR1cmVzIGFzIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIEdQVSAocEdQVSksIHNvIGk5MTUg ZHJpdmVyIGNhbiBydW4KPj4gKyAqIHNlYW1sZXNzbHkgaW4gYSB2aXJ0dWFsIG1hY2hpbmUuIFRo aXMgZmlsZSBwcm92aWRlcyB0aGUgZW5nbGlnaHRtZW50cwo+PiArICogb2YgR1ZUIGFuZCB0aGUg bmVjZXNzYXJ5IGNvbXBvbmVudHMgdXNlZCBieSBHVlQgaW4gaTkxNSBkcml2ZXIuCj4+ICsgKi8K Pj4gKwo+PiArLyoqCj4+ICsgKiBpbnRlbF9ndnRfaW5pdCAtIGluaXRpYWxpemUgR1ZUIGNvbXBv bmVudHMgYXQgdGhlIGJlZ2lubmluZyBvZiBpOTE1Cj4+ICsgKiBkcml2ZXIgbG9hZGluZy4KPj4g KyAqIEBkZXY6IGRybSBkZXZpY2UgKgo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGluaXRpYWxpemF0aW9uIHN0YWdlLAo+PiArICog dG8gaW5pdGlhbGl6ZSB0aGUgR1ZUIGNvbXBvbmVudHMgdGhhdCBoYXZlIHRvIGJlIGluaXRpYWxp emVkCj4+ICsgKiBiZWZvcmUgSFcgZ2V0cyB0b3VjaGVkIGJ5IG90aGVyIGk5MTUgY29tcG9uZW50 cy4KPj4gKyAqLwo+PiAraW50IGludGVsX2d2dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4+ICt7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShk ZXYpOwo+PiArCj4+ICsJZGV2X3ByaXYtPmd2dC5wZ3RfZGV2aWNlID0gZ3Z0X2NyZWF0ZV9wZ3Rf ZGV2aWNlKGRldl9wcml2KTsKPj4gKwlpZiAoaW50ZWxfZ3Z0X2FjdGl2ZShkZXYpKQo+PiArCQlE Uk1fREVCVUdfRFJJVkVSKCJHVlQtZyBpcyBydW5uaW5nIGluIGhvc3QgbW9kZVxuIik7Cj4+ICsK Pj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBpbnRlbF9ndnRfcG9zdF9p bml0IC0gaW5pdGlhbGl6ZSBHVlQgY29tcG9uZW50cyBhdCB0aGUgZW5kIG9mIGk5MTUKPj4gKyAq IGRyaXZlciBsb2FkaW5nLgo+PiArICogQGRldjogZHJtIGRldmljZSAqCj4+ICsgKgo+PiArICog VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgaW5pdGlhbGl6YXRpb24g c3RhZ2UsCj4+ICsgKiB0byBpbml0aWFsaXplIHRoZSBHVlQgY29tcG9uZW50cyB0aGF0IGhhdmUg dG8gYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIKPj4gKyAqIG90aGVyIGk5MTUgY29tcG9uZW50cyBhcmUg cmVhZHkuCj4+ICsgKi8KPj4gK2ludCBpbnRlbF9ndnRfcG9zdF9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShkZXYpOwo+PiArCj4+ICsJaWYgKCFpbnRlbF9ndnRfYWN0aXZlKGRldikpCj4+ICsJ CXJldHVybiAwOwo+PiArCj4+ICsJcmV0dXJuIGd2dF9wb3N0X2luaXRfcGd0X2RldmljZShkZXZf cHJpdi0+Z3Z0LnBndF9kZXZpY2UpOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGludGVsX2d2 dF9jbGVhbnVwIC0gY2xlYW51cCBHVlQgY29tcG9uZW50cyB3aGVuIGk5MTUgZHJpdmVyIGlzIHVu bG9hZGluZwo+PiArICogQGRldjogZHJtIGRldmljZSAqCj4+ICsgKgo+PiArICogVGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgYXQgdGhlIGk5MTUgZHJpdmVyIHVubG9hZGluZyBzdGFnZSwgdG8gc2h1 dGRvd24KPj4gKyAqIEdWVCBjb21wb25lbnRzIGFuZCByZWxlYXNlIHRoZSByZWxhdGVkIHJlc291 cmNlcy4KPj4gKyAqLwo+PiArdm9pZCBpbnRlbF9ndnRfY2xlYW51cChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KQo+PiArewo+PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKPj4gKwo+PiArCWlmICghaW50ZWxfZ3Z0X2FjdGl2ZShkZXYpKQo+PiArCQly ZXR1cm47Cj4+ICsKPj4gKwlndnRfZGVzdHJveV9wZ3RfZGV2aWNlKGRldl9wcml2LT5ndnQucGd0 X2RldmljZSk7Cj4+ICsJZGV2X3ByaXYtPmd2dC5wZ3RfZGV2aWNlID0gTlVMTDsKPj4gK30KPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3Z0LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2d2dC5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAw MDAwMDAuLjMwY2MyMDcKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2d2dC5oCj4+IEBAIC0wLDAgKzEsNDkgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmln aHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ PiArICoKPj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+PiAr ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgo+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4+ICsgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKPj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+ICsgKgo+PiArICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+PiArICogU29mdHdhcmUuCj4+ICsgKgo+PiArICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1IKPj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+PiArICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCj4+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwK Pj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCj4+ICsgKiBTT0ZUV0FSRS4KPj4gKyAqLwo+PiAr Cj4+ICsjaWZuZGVmIF9JOTE1X0dWVF9IXwo+PiArI2RlZmluZSBfSTkxNV9HVlRfSF8KPgo+IEkg dGhpbmsgdGhpcyBmaWxlIGNvdWxkIGJlIGludGVsX2d2dC5oIChhbGwgcmVtYWluaW5nIGZ1bmN0 aW9ucyBhcmUKPiBpbnRlbF9ndnQpLCBhbmQgaGF2ZSByZXNwZWN0aXZlIGludGVsX2d2dC5jIGZp bGUuCj4KPj4gKwo+PiArI2lmZGVmIENPTkZJR19EUk1fSTkxNV9HVlQKPgo+IFN0YXJ0aW5nIGhl cmUgLS0tPgo+Cj4+ICtleHRlcm4gdm9pZCAqZ3Z0X2NyZWF0ZV9wZ3RfZGV2aWNlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4+ICtleHRlcm4gaW50IGd2dF9wb3N0X2luaXRf cGd0X2RldmljZSh2b2lkICpkYXRhKTsKPj4gK2V4dGVybiB2b2lkIGd2dF9kZXN0cm95X3BndF9k ZXZpY2Uodm9pZCAqZGF0YSk7Cj4+ICsKPgo+IDwtLSB0byBoZXJlLCB0aGVzZSBzaG91bGQgZ28g dG8gdGhlaXIgb3duIGluY2x1ZGUgZmlsZSBhdAo+IGluY2x1ZGUvZHJtL2k5MTVfZ3Z0LmggRm9y IGFuIGV4YW1wbGUsIHNlZSBpbmNsdWRlL2RybS9pOTE1X2RybS5oCj4KPiBUaGUgcmVzcGVjdGl2 ZSBleHBvcnQgc3ltYm9scyB0aGVuIG5lZWQgdG8gYmUgZXhwb3J0ZWQsIEZvciBhbiBleGFtcGxl Cj4gc2VlOwo+Cj4gCUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1X3JhaXNlKTsKPgo+PiArZXh0 ZXJuIGludCBpbnRlbF9ndnRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPj4gK2V4dGVy biBpbnQgaW50ZWxfZ3Z0X3Bvc3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPj4gK2V4 dGVybiB2b2lkIGludGVsX2d2dF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+PiAr I2Vsc2UKPj4gK2V4dGVybiBpbnQgaW50ZWxfZ3Z0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKPgo+IFRoZXNlIHNob3VsZCwgYnkgY29udmVudGlvbiwgcmF0aGVyIGJlIHN0YXRpYyBpbmxp bmU7Cj4KPiBzdGF0aWMgaW5saW5lIGludCBpbnRlbF9ndnRfaW5pdCguLi4pCj4KU29ycnkgSSBt aXNzIHRvIGNoZWNrIHRoZW0gaGVyZS4gU3VyZWx5IHNob3VsZCBiZSBzdGF0aWMgaW5saW5lLi4u Li4KPj4gK3sKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gK2V4dGVybiBpbnQgaW50ZWxfZ3Z0X3Bv c3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+PiArewo+PiArCXJldHVybiAwOwo+PiAr fQo+PiArZXh0ZXJuIHZvaWQgaW50ZWxfZ3Z0X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKPj4gK3sKPj4gK30KPj4gKyNlbmRpZgo+PiArCj4+ICsjZW5kaWYgLyogX0k5MTVfR1ZUX0hf ICovCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=