From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: Re: [RFC 01/29] drm/i915/gvt: Introduce the basic architecture of GVT-g Date: Tue, 16 Feb 2016 17:54:12 +0800 Message-ID: <56C2F1C4.1030309@intel.com> References: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> <1453976511-27322-2-git-send-email-zhi.a.wang@intel.com> <1454075829.11299.48.camel@linux.intel.com> <56B197AB.5070406@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id A683D6E1FD for ; Tue, 16 Feb 2016 09:56:35 +0000 (UTC) In-Reply-To: <56B197AB.5070406@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 List-Id: intel-gfx@lists.freedesktop.org SGkgSm9vbmFzOgogICAgIEZvciB0aGUgZGVidWcgZnVuY3Rpb24vbWFjcm9zLCBjb3VsZCB3ZSB1 c2UgRFJNX0RFQlVHX0RSSVZFUiBhcyAKb3V0cHV0LCBidXQga2VlcCBvdXIgaW50ZXJuYWwgZGVi dWcgc3dpdGNoICYgbWFyY29zLCBsaWtlOgoKI2RlZmluZSBndnRfZGJnX3h4eCh4eHgsIHh4eCkg XAoJaWYgKGd2dF9kZWJ1ZyAmIHh4eCkgXAoJCURSTV9ERUJVR19EUklWRVIoeHh4eHh4KQoKSXMg aXQgT0sgZm9yIHRoZSBtYWludGFpbmVycz8gT3Igd2UgaGF2ZSB0byB1c2UgRFJNX0RFQlVHX0RS SVZFUiAKZGlyZWN0bHkgOiguCgpUaGFua3MsClpoaS4KCuS6jiAwMi8wMy8xNiAxNDowMSwgWmhp IFdhbmcgd3JvdGU6Cj4gSGkgSm9vbmFzOgo+ICAgICAgVGhhbmtzIHlvdSB2ZXJ5IG11Y2ghIFdl J3JlIHZlcnkgZXhjaXRlZCBmb3IgcmVjZWl2aW5nIHlvdXIgYWR2aWNlCj4gYW5kIGNvbnRpbnVl IHRvIGJlIG9wZW4gdG8gYW55IGNvbW1lbnRzLiA6KQo+Cj4gSSdtIHN1cHBvc2VkIHRoYXQgd2Ug c2hvdWxkIG1ha2UgdGhlIGFncmVlbWVudHMgb24gaTkxNSBob3N0IGNoYW5nZSBhdAo+IHRoZSB2 ZXJ5IGJlZ2lubmluZywgYXMgSSdtIGNvbmNlcm5lZCBkdXJpbmcgdGhlIGRpc2N1c3Npb24gb2Yg aTkxNSBob3N0Cj4gY2hhbmdlLCB5b3Uga25vdywgbWF5YmUgc29tZSBjb2RlIG9mIEdWVC1nIG5l ZWRzIHRvIGJlIHJlZmluZWQgb3IKPiByZS1kZXNpZ25lZC4gU28gd2UgcHV0IHRoZSBpOTE1IGhv c3QgY2hhbmdlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQo+IHBhdGNoIHNldCBmb3IgdGhlIGNv bnZlbmllbmNlIG9mIGRpc2N1c3Npb24uCj4KPiBJIHN1bW1hcml6ZSB5b3VyIGNvbW1lbnRzIGFz IGJlbG93LCB2ZXJ5IGFwcGxpY2F0ZS4gOikKPgo+IC0gUmVwbGFjZSBib29sZWFuIHJldHVybiB2 YWx1ZSB3aXRoIGludCBhcyBtdWNoIGFzIHBvc3NpYmxlLgo+IC0gUmVwbGFjZSBjdXN0b21pemVk IGRlYnVnIEFTU0VSVCgpIGZ1bmN0aW9uICYgbWFjcm9zIHdpdGggRFJNX0RFQlVHXyoKPiAtIERv Y3VtZW50IGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGk5MTUKPiAtIEZpeCBhbGwgd2hp dGVzcGFjZSB2aWEgc2NyaXB0cy9jbGVhbnBhdGNoLnBsCj4gLSBDb21taXQgZnVuY3Rpb24gc3Ry dWN0dXJlIHJlZmluZW1lbnQuCj4gLSBDaGFuZ2UgdGhlIHJlZ2lzdGVyIGFjY2VzcyBiZWhhdmlv ciBqdXN0IGxpa2Ugd2hhdCBpOTE1IGRvZXMuCj4KPiBGb3Igb3RoZXIgY29tbWVudHMsIHNlZSBt eSBjb21tZW50cyBiZWxvdy4gOikKPgo+IE9uIDAxLzI5LzE2IDIxOjU3LCBKb29uYXMgTGFodGlu ZW4gd3JvdGU6Cj4+IEhpLAo+Pgo+PiBUTDtEUiBPdmVyYWxsLCB3ZSBoYXZlIHNhbWUgcHJvYmxl bSBhcyB3aXRoIHRoZSBzY2hlZHVsZXIgc2VyaWVzLCB0aGVyZQo+PiBpcyB0b28gbXVjaCBwbGFj ZWhvbGRlciBzdHVmZiBmb3IgZWFzeSByZXZpZXcuIEp1c3Qgc3F1YXNoIGVub3VnaCBjb2RlCj4+ IGludG8gb25lIGNvbW1pdCBzbyBpdCBhY3R1YWxseSBkb2VzIHNvbWV0aGluZyBsb2dpY2FsIHRo YXQgY2FuIGJlCj4+IHJldmlld2VkIGFuZCB0aGVuIGV4dGVuZCBpdCBsYXRlci4gVGhlbiBpdCBj YW4gYmUgcmV2aWV3ZWQgYW5kIHB1c2hlZC4KPj4gSnVzdCBzcGxpdHRpbmcgdGhlIGNvZGUgZG93 biB0byBhY2hpZXZlIHNtYWxsZXIgcGF0Y2hlcyBpcyBub3QgdGhlCj4+IHJpZ2h0IHRoaW5nIHRv IGRvLgo+Pgo+PiBDb21tZW50cyBvbiB0aGUgb3ZlcmFsbCBjb2RlOiBZb3UgbmVlZCB0byBkb2N1 bWVudCBhbGwgaGVhZGVyIGZpbGUKPj4gZnVuY3Rpb25zIChpbiB0aGUgc291cmNlIGZpbGVzKSwg YW5kIGl0IGlzIGdvb2QgdG8gZG9jdW1lbnQgdGhlIHN0YXRpYwo+PiBmdW5jdGlvbnMgd2l0aGlu IGEgZmlsZSB0b28sIHRvIG1ha2UgZnV0dXJlIG1haW50ZW5hbmNlIGVhc2llci4KPj4KPj4gSXQg aXMgbm90IGFib3V0IHNwbGl0dGluZyB0aGUgY29kZSBkb3duIHRvIHNtYWxsIGNodW5rcywgYnV0 IHNwbGl0dGluZwo+PiBpdCBkb3duIHRvIHNtYWxsICpsb2dpY2FsKiBjaHVua3MuIEl0IGRvZXNu J3QgbWFrZSBzZW5zZSB0byBjb21taXQKPj4gZG96ZW5zIG9mIGVtcHR5IGJvZGllZCBmdW5jdGlv bnMgZm9yIHJldmlldywgYW5kIHRoZW4gbGF0ZXIgYWRkIHRoZWlyCj4+IGNvZGUuCj4+Cj4+IElm IHlvdSBhZGQgZnVuY3Rpb25zLCBvbmx5IGFkZCB0aGVtIGF0IGEgcGF0Y2ggdGhhdCB0YWtlcyB0 aGVtIGludG8gdXNlCj4+IHRvbywgdW5sZXNzIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZ2VuZXJhbCBw dXJwb3NlIHNoYXJlZCBjb2RlLiBBbmQgYWxzbwo+PiByZW1lbWJlciB0byBhZGQgdGhlIGZ1bmN0 aW9uIGJvZHkgYW5kIGRvY3VtZW50YXRpb24gaGVhZGVyLiBJZiB5b3UKPj4gc2ltcGx5IGFkZCBh ICJyZXR1cm4gMDsiIG9yIHNpbWlsYXIgZnVuY3Rpb24gYm9keSwgZG8gYWRkIGEgY29tbWVudCB0 bwo+PiB3aHkgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0IGFuZCB3aGVuIGl0IHdpbGwuCj4+ Cj4+IFRoZW4sIHRoZXJlIGlzIGEgdHJlbmQgb2YgaGF2aW5nIGEgYm9vbGVhbiByZXR1cm4gdmFs dWVzIGluIHRoZSBjb2RlLgo+PiBXaGVuIHBvc3NpYmxlLCBpdCBzaG91bGQgcmF0aGVyIGJlIGlu dCBhbmQgdGhlIGNhdXNlIGZvciBmYWlsdXJlIHNob3VsZAo+PiBiZSBwcm9wYWdhdGVkIGZyb20g dGhlIGxhc3QgbGV2ZWwgYWxsIHRoZSB3YXkgdG8gdXAgKC1FTk9NRU4gZXRjLikuCj4+IFRoaXMg d2F5IGRlYnVnZ2luZyBiZWNvbWVzIGVhc2llciBhbmQgaWYgbmV3IGVycm9yIGNvbmRpdGlvbnMg YXBwZWFyLAo+PiB0aGVyZSBpcyBsZXNzIG9mIGEgbWFpbnRlbmFuY2UgYnVyZGVuIHRvIGFkZCB0 aGUgcHJvcGFnYXRpb24gbGF0ZXIuCj4+Cj4+IEZpbmFsbHksIG1ha2Ugc3VyZSB0byBsb29rIGF0 IHRoZSBleGlzdGluZyBkcml2ZXIgcGFydHMgYW5kCj4+ICAgICBodHRwczovL3d3dy5rZXJuZWwu b3JnL2RvYy9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCj4+IGZvciBwcm9wZXIgY29kaW5nIHN0 eWxlLiBUaGVyZSBhcmUgbG90cyBvZiB3aGl0ZXNwYWNlIGZpeGVzIG5lZWRlZCBpbgo+PiB0aGlz IHNlcmllcywgbGlrZSBhcnJheSBpbml0aWFsaXphdGlvbnMuCj4+Cj4+IEkgaG9wZSB0byBzZWUg dGhpcyBmaXJzdCBwYXRjaCByZXJvbGxlZCBzbyB0aGF0IHlvdSBzcXVhc2ggc29tZSBvZiB0aGUK Pj4gbGF0ZXIgY29tbWl0cyBpbnRvIGl0IHNvIHRoYXQgYWxsIGZ1bmN0aW9ucyBoYXZlIGEgYm9k eSBhbmQgeW91IGFkZAo+PiBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb25zIHNvIEkgY2Fu IGJvdGggc2VlIHdoYXQgaXQgc2hvdWxkIGRvIGFuZAo+PiB3aGF0IGl0IGFjdHVhbGx5IGRvZXMu IE9ubHkgcmVyb2xsIHRoZSBmaXJzdCBwYXRjaCwgdG8ga2VlcCB0aGUKPj4gaXRlcmF0aXZlIHN0 ZXAgc21hbGxlci4gTGV0cyBvbmx5IHRoZW4gY29udGludWUgd2l0aCB0aGUgcmVzdCBvZiB0aGUK Pj4gc2VyaWVzIG9uY2Ugd2UndmUgcmVhY2hlZCBhIGNvbnNlbnN1cyBvbiB0aGUgZm9ybWF0dGlu ZyBhbmQgc3R5bGUKPj4gYmFzaWNzLgo+Pgo+PiBTZWUgbW9yZSBjb21tZW50cyBiZWxvdy4KPj4K Pj4gT24gdG8sIDIwMTYtMDEtMjggYXQgMTg6MjEgKzA4MDAsIFpoaSBXYW5nIHdyb3RlOgo+Pj4g VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSB2ZXJ5IGJhc2ljIGZyYW1ld29yayBvZiBHVlQtZyBk ZXZpY2UgbW9kZWwsCj4+PiBpbmNsdWRlcyBiYXNpYyBwcm90b3R5cGVzLCBkZWZpbml0aW9ucywg aW5pdGlhbGl6YXRpb24uCj4+PiAtLS0KPj4+ICAgYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2lu dGVyZmFjZS5oICB8ICAgMyArCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcgICAg ICAgICAgfCAgMTYgKysKPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAg ICB8ICAgMiArCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZSAgICAgfCAg IDUgKwo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcuaCAgICAgIHwgIDcyICsr KysrKysKPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2RlY29kZXIuYyB8ICAzNCAr KysrCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9mYl9kZWNvZGVyLmggfCAxMTAgKysr KysrKysrKwo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMgICAgICAgIHwgMzY2 Cj4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+PiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9ndnQuaCAgICAgICAgfCAxMzAgKysrKysrKysrKysrCj4+PiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9oeXBlcmNhbGwuaCAgfCAgMzAgKysrCj4+PiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9tcHQuaCAgICAgICAgfCAgOTcgKysrKysrKysrCj4+PiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuYyAgICAgfCAgMjkgKysrCj4+PiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuaCAgICAgfCAgMzQgKysrKwo+Pj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvcmVnLmggICAgICAgIHwgIDM0ICsrKysKPj4+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kbWEuYyAgICAgICB8ICAxOSArKwo+Pj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oICAgICAgIHwgICA2ICsKPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV92Z3B1LmggICAgICB8ICAgMyArCj4+PiAgIGluY2x1ZGUveGVuL2ludGVyZmFjZS94ZW4u aCAgICAgICAgICAgfCAgIDEgKwo+Pj4gICAxOCBmaWxlcyBjaGFuZ2VkLCA5OTEgaW5zZXJ0aW9u cygrKQo+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01h a2VmaWxlCj4+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv ZGVidWcuaAo+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L2ZiX2RlY29kZXIuYwo+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2ZiX2RlY29kZXIuaAo+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L2d2dC5jCj4+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvZ3Z0LmgKPj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9oeXBlcmNhbGwuaAo+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L21wdC5oCj4+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMKPj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuaAo+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Z0L3JlZy5oCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lu Y2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaAo+Pj4gYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4v aW50ZXJmYWNlLmgKPj4+IGluZGV4IDYyY2EwM2UuLjZmZjQ5ODYgMTAwNjQ0Cj4+PiAtLS0gYS9h cmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmgKPj4+ICsrKyBiL2FyY2gveDg2L2lu Y2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaAo+Pj4gQEAgLTczLDYgKzczLDkgQEAKPj4+ICAgI2Vu ZGlmCj4+Pgo+Pj4gICAjaWZuZGVmIF9fQVNTRU1CTFlfXwo+Pj4gKwo+Pj4gKyNpbmNsdWRlCj4+ PiArCj4+Cj4+IEkgZG9uJ3QgZm9sbG93IHdoeSB0aGlzIHdvdWxkIG5lZWQgdG8gYmUgYWRkZWQg aWYgdGhlIGZpbGUgaXMgbm90Cj4+IG1vZGlmaWVkIG90aGVyd2lzZS4gRWFjaCBoZWFkZXIgc2hv dWxkIG9ubHkgaW5jbHVkZSB3aGF0IHRoZXkgdXNlLgo+Pgo+PiBJZiB0aGlzIGlzIGFuIGV4aXN0 aW5nIGJ1ZyAodGhhdCB4ZW4vaW50ZXJmYWNlLmggY2FuIG5vdCBiZSBpbmNsdWRlZAo+PiB3aXRo b3V0IGluY2x1ZGluZyBsaW51eC90eXBlcy5oKSwgaXQgc2hvdWxkIGJlIHNwbGl0IHRvIGEgc2Vw YXJhdGUKPj4gcGF0Y2ggYW5kIHNlbnQgdG8gWGVuIHRlYW0uIFNhbWUgZm9yIGluY2x1ZGUveGVu L2ludGVyZmFjZS94ZW4uaC4KPj4KPj4+ICAgLyogRXhwbGljaXRseSBzaXplIGludGVnZXJzIHRo YXQgcmVwcmVzZW50IHBmbnMgaW4gdGhlIHB1YmxpYwo+Pj4gaW50ZXJmYWNlCj4+PiAgICAqIHdp dGggWGVuIHNvIHRoYXQgb24gQVJNIHdlIGNhbiBoYXZlIG9uZSBBQkkgdGhhdCB3b3JrcyBmb3Ig MzIKPj4+IGFuZCA2NAo+Pj4gICAgKiBiaXQgZ3Vlc3RzLiAqLwo+Pj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmln Cj4+PiBpbmRleCAwNTFlYWIzLi44OWZmNzIzIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvS2NvbmZpZwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwo+ Pj4gQEAgLTQ3LDMgKzQ3LDE5IEBAIGNvbmZpZyBEUk1fSTkxNV9QUkVMSU1JTkFSWV9IV19TVVBQ T1JUCj4+PiAgICAgICAgIG9wdGlvbiBjaGFuZ2VzIHRoZSBkZWZhdWx0IGZvciB0aGF0IG1vZHVs ZSBvcHRpb24uCj4+Pgo+Pj4gICAgICAgICBJZiBpbiBkb3VidCwgc2F5ICJOIi4KPj4+ICsKPj4+ ICtjb25maWcgSTkxNV9HVlQKPj4+ICsgICAgICAgIHRyaXN0YXRlICJHVlQtZyBob3N0IGRyaXZl ciIKPj4+ICsgICAgICAgIGRlcGVuZHMgb24gRFJNX0k5MTUKPj4+ICsgICAgICAgIHNlbGVjdCBJ UlFfV09SSwo+Pj4gKyAgICAgICAgZGVmYXVsdCB5Cj4+Cj4+IERlZmF1bHRpbmcgdG8gIm4iIHdv dWxkIG1ha2Ugc2Vuc2UgaW5pdGlhbGx5Lgo+Pgo+IFtaaGldIFN1cmUsIHdpbGwgZG8uCj4+PiAr ICAgICAgICBoZWxwCj4+PiArICAgICAgICAgIEVuYWJsaW5nIEdWVC1nIG1lZGlhdGVkIGdyYXBo aWNzIHBhc3N0aHJvdWdoIHRlY2huaXF1ZSBmb3IKPj4+IEludGVsIGk5MTUKPj4+ICsgICAgICAg ICAgYmFzZWQgaW50ZWdyYXRlZCBncmFwaGljcyBjYXJkLiBXaXRoIEdWVC1nLCBpdCdzIHBvc3Np YmxlCj4+PiB0byBoYXZlIG9uZQo+Pj4gKyAgICAgICAgICBpbnRlZ3JhdGVkIGk5MTUgZGV2aWNl IHNoYXJlZCBieSBtdWx0aXBsZSBWTXMuIFBlcmZvcm1hbmNlCj4+PiBjcml0aWNhbAo+Pj4gKyAg ICAgICAgICBvcHRlcmF0aW9ucyBzdWNoIGFzIGFwcGVydHVyZSBhY2Nlc3NlcyBhbmQgcmluZyBi dWZmZXIKPj4+IG9wZXJhdGlvbnMKPj4+ICsgICAgICAgICAgYXJlIHBhc3MtdGhyb3VnaGVkIHRv IFZNLCB3aXRoIGEgbWluaW1hbCBzZXQgb2YKPj4+IGNvbmZsaWN0aW5nIHJlc291cmNlcwo+Pj4g KyAgICAgICAgICAoZS5nLiBkaXNwbGF5IHNldHRpbmdzKSBtZWRpYXRlZCBieSB2R1QgZHJpdmVy LiBUaGUKPj4+IGJlbmVmaXQgb2YgdkdUCj4+PiArICAgICAgICAgIGlzIG9uIGJvdGggdGhlIHBl cmZvcm1hbmNlLCBnaXZlbiB0aGF0IGVhY2ggVk0gY291bGQKPj4+IGRpcmVjdGx5IG9wZXJhdGUK Pj4+ICsgICAgICAgICAgaXRzIGFwZXJ0dXJlIHNwYWNlIGFuZCBzdWJtaXQgY29tbWFuZHMgbGlr ZSBydW5uaW5nIG9uCj4+PiBuYXRpdmUsIGFuZAo+Pj4gKyAgICAgICAgICB0aGUgZmVhdHVyZSBj b21wbGV0ZW5lc3MsIGdpdmVuIHRoYXQgYSB0cnVlIEdFTiBoYXJkd2FyZQo+Pj4gaXMgZXhwb3Nl ZC4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+Pj4gYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+Pj4gaW5kZXggMDg1MWRlMDcuLmQ0ZGY0MTAg MTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4+IEBAIC05MSw2ICs5MSw4IEBAIGk5MTUt eSArPSBkdm9fY2g3MDE3Lm8gXAo+Pj4gICAgICAgICBpbnRlbF9zZHZvLm8gXAo+Pj4gICAgICAg ICBpbnRlbF90di5vCj4+Pgo+Pj4gK29iai0kKENPTkZJR19JOTE1X0dWVCkgICs9IGd2dC8KPj4+ ICsKPj4+ICAgIyB2aXJ0dWFsIGdwdSBjb2RlCj4+PiAgIGk5MTUteSArPSBpOTE1X3ZncHUubwo+ Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUKPj4+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlCj4+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4uNjkzNWI3OAo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlCj4+PiBAQCAtMCwwICsxLDUgQEAK Pj4+ICtHVlRfU09VUkNFIDo9IGd2dC5vIHBhcmFtcy5vIGZiX2RlY29kZXIubwo+Pj4gKwo+Pj4g K2NjZmxhZ3MteSAgICAgICAgICAgICs9IC1JJChzcmMpIC1JJChzcmMpLy4uIC1XYWxsIC1XZXJy b3IKPj4+IC1Xbm8tdW51c2VkLWZ1bmN0aW9uCj4+PiAraTkxNV9ndnQteSAgICAgICAgICAgIDo9 ICQoR1ZUX1NPVVJDRSkKPj4+ICtvYmotJChDT05GSUdfSTkxNV9HVlQpICAgICAgICArPSBpOTE1 X2d2dC5vCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RlYnVnLmgK Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RlYnVnLmgKPj4+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi4xOGUxNDY3Cj4+PiAtLS0gL2Rldi9udWxsCj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcuaAo+Pj4gQEAgLTAsMCArMSw3MiBA QAo+Pj4gKy8qCj4+PiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4+ICsgKgo+Pj4gKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCj4+PiBvYnRhaW5pbmcg YQo+Pj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUKPj4+ICJTb2Z0d2FyZSIpLAo+Pj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0Cj4+PiBsaW1pdGF0 aW9uCj4+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsCj4+PiBzdWJsaWNlbnNlLAo+Pj4gKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tCj4+PiB0aGUK Pj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgo+Pj4gKyAqCj4+PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZwo+Pj4gdGhlIG5leHQK Pj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwKPj4+IHBvcnRpb25zIG9mIHRoZQo+Pj4gKyAqIFNvZnR3YXJlLgo+Pj4gKyAqCj4+ PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsCj4+PiBFWFBSRVNTIE9SCj4+PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+Pj4gTUVSQ0hBTlRBQklMSVRZLAo+ Pj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTwo+Pj4gRVZFTlQgU0hBTEwKPj4+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwo+Pj4gT1IgT1RIRVIK Pj4+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwKPj4+IEFSSVNJTkcgRlJPTSwKPj4+ICsgKiBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCj4+PiBERUFMSU5H UyBJTiBUSEUKPj4+ICsgKiBTT0ZUV0FSRS4KPj4+ICsgKi8KPj4+ICsKPj4+ICsjaWZuZGVmIF9f R1ZUX0RFQlVHX0hfXwo+Pj4gKyNkZWZpbmUgX19HVlRfREVCVUdfSF9fCj4+PiArCj4+PiArI2Rl ZmluZQo+Pj4gQVNTRVJUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPj4+ICsgICAgICAgIGRvCj4+PiB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+Pj4gKyAgICAgICAg ICAgICAgICBpZiAoISh4KSkKPj4+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJBc3NlcnQg YXQgJXMgbGluZQo+Pj4gJWRcbiIsICAgICAgICAgICAgICAgIFwKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLAo+Pj4gX19MSU5FX18pOyAgICAgICAgICAgICAg ICAgICAgXAo+Pj4gKwo+Pj4gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4+PiArICAgICAgICB9IHdoaWxlICgwKTsKPj4+ICsKPj4+ICsj ZGVmaW5lIEFTU0VSVF9OVU0oeCwKPj4+IHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+Pj4gKyAgICAgICAgZG8KPj4+IHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+PiArICAgICAg ICAgICAgICAgIGlmICghKHgpKQo+Pj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkFzc2Vy dCBhdCAlcyBsaW5lICVkIHBhcmEKPj4+IDB4JWxseFxuIiwgICAgXAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLAo+Pj4gKHU2NCl5KTsgICAg ICAgICAgICBcCj4+PiArCj4+PiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPj4+ICsgICAgICAgIH0gd2hpbGUgKDApOwo+Pj4gKwo+Pgo+ PiBUaGVyZSBhbHJlYWR5IGlzIFdBUk5fT04gKGFuZCBpOTE1X2Rydi5oIG1vZGlmaWVzIGl0IGEg bGl0dGxlKS4gRG8gbm90Cj4+IGludHJvZHVjZSBjdXN0b20gZnVuY3Rpb25zIGxpa2UgdGhpcywg aWYgdGhlIGV4aXN0aW5nIG9uZXMgbmVlZAo+PiBpbXByb3ZlbWVudCwgaW1wcm92ZSB0aGVtLgo+ Pgo+IFtaaGldIE9LLiBXaWxsIGRvIGFzIHdoYXQgaTkxNSBkb2VzCj4+PiArI2RlZmluZSBndnRf aW5mbyhmbXQsIGFyZ3MuLi4pIFwKPj4+ICsgICAgcHJpbnRrKEtFUk5fSU5GTyJbR1ZULWddICJm bXQiXG4iLCAjI2FyZ3MpCj4+PiArCj4+PiArI2RlZmluZSBndnRfZXJyKGZtdCwgYXJncy4uLikg XAo+Pj4gKyAgICBwcmludGsoS0VSTl9FUlIiJXMoKSAtICVkOiAiZm10IlxuIiwgX19mdW5jX18s IF9fTElORV9fLCAjI2FyZ3MpCj4+PiArCj4+PiArI2RlZmluZSBndnRfd2FybihmbXQsIGFyZ3Mu Li4pIFwKPj4+ICsgICAgcHJpbnRrKEtFUk5fV0FSTklORyIlcygpIC0gJWQ6ICJmbXQiXG4iLCBf X2Z1bmNfXywgX19MSU5FX18sCj4+PiAjI2FyZ3MpCj4+PiArCj4+PiArI2RlZmluZSBndnRfZGJn KGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHsgXAo+Pj4gKyAgICAgICAgaWYgKGd2dC5kZWJ1ZyAm IGxldmVsKSBcCj4+PiArICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUciJXMoKSAtICVkOiAi Zm10IlxuIiwgX19mdW5jX18sCj4+PiBfX0xJTkVfXywgIyNhcmdzKTsgXAo+Pj4gKyAgICB9d2hp bGUoMCkKPj4+ICsKPj4+ICtlbnVtIHsKPj4+ICsgICAgR1ZUX0RCR19DT1JFID0gKDEgPDwgMCks Cj4+PiArICAgIEdWVF9EQkdfTU0gPSAoMSA8PCAxKSwKPj4+ICsgICAgR1ZUX0RCR19JUlEgPSAo MSA8PCAyKSwKPj4+ICt9Owo+Pj4gKwo+Pj4gKyNkZWZpbmUgZ3Z0X2RiZ19jb3JlKGZtdCwgYXJn cy4uLikgXAo+Pj4gKyAgICBndnRfZGJnKEdWVF9EQkdfQ09SRSwgZm10LCAjI2FyZ3MpCj4+PiAr Cj4+PiArI2RlZmluZSBndnRfZGJnX21tKGZtdCwgYXJncy4uLikgXAo+Pj4gKyAgICBndnRfZGJn KEdWVF9EQkdfTU0sIGZtdCwgIyNhcmdzKQo+Pj4gKwo+Pj4gKyNkZWZpbmUgZ3Z0X2RiZ19pcnEo Zm10LCBhcmdzLi4uKSBcCj4+PiArICAgIGd2dF9kYmcoR1ZUX0RCR19JUlEsIGZtdCwgIyNhcmdz KQo+Pj4gKwo+Pj4gKyNlbmRpZgo+Pgo+PiBUaGlzIHNob3VsZCBiZSBpbnRlZ3JhdGVkIGJldHRl ciB0byBEUk0gZGVidWdnaW5nIG9wdGlvbnMsIGN1c3RvbQo+PiBkZWJ1Z2dpbmcgY29kZSBvbmx5 IGZvciBpOTE1IHdhcyByZWplY3RlZCBhIHdoaWxlIGFnby4KPj4KPiBbWkhJXSBUaGFua3MgZm9y IHNoYXJpbmcgdGhlIGhpc3RvcnkuIDopIFdpbGwgY2hhbmdlIHRoYXQuCj4+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2RlY29kZXIuYwo+Pj4gYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvZmJfZGVjb2Rlci5jCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4g aW5kZXggMDAwMDAwMC4uYTIxOTgxOQo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2RlY29kZXIuYwo+Pj4gQEAgLTAsMCArMSwzNCBAQAo+Pj4g Ky8qCj4+PiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KPj4+ICsgKgo+Pj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCj4+PiBvYnRhaW5pbmcgYQo+Pj4g KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUKPj4+ICJTb2Z0d2FyZSIpLAo+Pj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0Cj4+PiBsaW1pdGF0aW9uCj4+ PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsCj4+PiBzdWJsaWNlbnNlLAo+Pj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tCj4+PiB0aGUKPj4+ICsg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgo+Pj4gKyAqCj4+PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZwo+Pj4gdGhlIG5leHQKPj4+ICsg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwKPj4+IHBvcnRpb25zIG9mIHRoZQo+Pj4gKyAqIFNvZnR3YXJlLgo+Pj4gKyAqCj4+PiArICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsCj4+PiBFWFBSRVNTIE9SCj4+PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+Pj4gTUVSQ0hBTlRBQklMSVRZLAo+Pj4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTwo+Pj4gRVZFTlQgU0hBTEwKPj4+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwo+Pj4gT1IgT1RIRVIKPj4+ICsg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwKPj4+IEFSSVNJTkcgRlJPTSwKPj4+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCj4+PiBERUFMSU5HUyBJTiBU SEUKPj4+ICsgKiBTT0ZUV0FSRS4KPj4+ICsgKi8KPj4+ICsKPj4+ICsjaW5jbHVkZSAiZ3Z0Lmgi Cj4+PiArCj4+PiAraW50IGd2dF9kZWNvZGVfZmJfZm9ybWF0KHN0cnVjdCBwZ3RfZGV2aWNlICpw ZGV2LCBpbnQgdm1pZCwgc3RydWN0Cj4+PiBndnRfZmJfZm9ybWF0ICpmYikKPj4+ICt7Cj4+PiAr ICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtpbnQgZ3Z0X2ZiX25vdGlmaWVyX2NhbGxf Y2hhaW4odW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCj4+PiArewo+Pj4gKyAgICByZXR1 cm4gMDsKPj4+ICt9Cj4+Cj4+IEtlcm5lbGRvYyBtaXNzaW5nIGZvciB0aGVzZSBmdW5jdGlvbnMu IEl0IGlzIGFsbCB0aGUgc2FtZSB0byBzcXVhc2gKPj4gbGF0ZXIgcGF0Y2hlcyB0byBpbnRyb2R1 Y2UgdGhlIGNvZGUgdG8gdGhlc2UgZnVuY3Rpb25zIGFscmVhZHksCj4+IHJldmlld2luZyB1dGls aXR5IGZ1bmN0aW9ucyB3aXRoIG5vIGtlcm5lbGRvYyBhbmQgbm8gYm9keSBtYWtlcyBpdAo+PiBz b21ld2hhdCBkaWZmaWN1bHQgdG8gc2VlIHRoZSBiaWcgcGljdHVyZS4KPj4KPgo+IFtaaGldIE9u ZSBxdWVzdGlvbi4gSSBzYXcgaTkxNSBwdXQgc29tZSBmdW5jdGlvbiBpbnN0cnVjdGlvbiBpbiAq LmMuIElzCj4gaXQgYWxzbyBPSyBmb3Iga2VybmVsIGRvYyBnZW5lcmF0aW5nIHRoZSBwcm9wZXIg ZG9jIGZpbGVzPwo+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2Zi X2RlY29kZXIuaAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZmJfZGVjb2Rlci5oCj4+ PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4uMmMyOWVkNAo+Pj4gLS0t IC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2RlY29kZXIu aAo+Pj4gQEAgLTAsMCArMSwxMTAgQEAKPj4+ICsvKgo+Pj4gKyAqIENvcHlyaWdodChjKSAyMDEx LTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4+PiArICoKPj4+ ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbgo+Pj4gb2J0YWluaW5nIGEKPj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4+PiAiU29mdHdhcmUiKSwKPj4+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dAo+Pj4gbGltaXRhdGlvbgo+Pj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+Pj4gc3VibGljZW5zZSwKPj4+ ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbQo+Pj4gdGhlCj4+PiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPj4+ICsgKgo+Pj4gKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcKPj4+IHRoZSBuZXh0Cj4+PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCj4+PiBwb3J0aW9ucyBvZiB0aGUKPj4+ICsg KiBTb2Z0d2FyZS4KPj4+ICsgKgo+Pj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+Pj4gRVhQUkVTUyBPUgo+Pj4gKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YK Pj4+IE1FUkNIQU5UQUJJTElUWSwKPj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8KPj4+IEVWRU5UIFNIQUxMCj4+PiArICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMKPj4+IE9SIE9USEVSCj4+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4+PiBBUklTSU5HIEZST00sCj4+ PiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUgo+Pj4gREVBTElOR1MgSU4gVEhFCj4+PiArICogU09GVFdBUkUuCj4+PiArICov Cj4+PiArCj4+PiArI2lmbmRlZiBfR1ZUX0ZCX0RFQ09ERVJfSF8KPj4+ICsjZGVmaW5lIF9HVlRf RkJfREVDT0RFUl9IXwo+Pj4gKwo+Pj4gK3R5cGVkZWYgZW51bSB7Cj4+PiArICAgIEZCX01PREVf U0VUX1NUQVJUID0gMSwKPj4+ICsgICAgRkJfTU9ERV9TRVRfRU5ELAo+Pj4gKyAgICBGQl9ESVNQ TEFZX0ZMSVAsCj4+PiArfWd2dF9mYl9ldmVudF90Owo+Pj4gKwo+Pj4gK3R5cGVkZWYgZW51bSB7 Cj4+PiArICAgIERESV9QT1JUX05PTkUgICAgPSAwLAo+Pj4gKyAgICBERElfUE9SVF9CICAgID0g MSwKPj4+ICsgICAgRERJX1BPUlRfQyAgICA9IDIsCj4+PiArICAgIERESV9QT1JUX0QgICAgPSAz LAo+Pj4gKyAgICBERElfUE9SVF9FICAgID0gNAo+Pj4gK30gZGRpX3BvcnRfdDsKPj4+ICsKPj4+ ICtzdHJ1Y3QgcGd0X2RldmljZTsKPj4+ICsKPj4+ICtzdHJ1Y3QgZ3Z0X2ZiX25vdGlmeV9tc2cg ewo+Pj4gKyAgICB1bnNpZ25lZCB2bV9pZDsKPj4+ICsgICAgdW5zaWduZWQgcGlwZV9pZDsgLyog aWQgc3RhcnRpbmcgZnJvbSAwICovCj4+PiArICAgIHVuc2lnbmVkIHBsYW5lX2lkOyAvKiBwcmlt YXJ5LCBjdXJzb3IsIG9yIHNwcml0ZSAqLwo+Pj4gK307Cj4+PiArCj4+PiArLyogY29sb3Igc3Bh Y2UgY29udmVyc2lvbiBhbmQgZ2FtbWEgY29ycmVjdGlvbiBhcmUgbm90IGluY2x1ZGVkICovCj4+ PiArc3RydWN0IGd2dF9wcmltYXJ5X3BsYW5lX2Zvcm1hdCB7Cj4+PiArICAgIHU4ICAgIGVuYWJs ZWQ7ICAgIC8qIHBsYW5lIGlzIGVuYWJsZWQgKi8KPj4+ICsgICAgdTggICAgdGlsZWQ7ICAgICAg ICAvKiBYLXRpbGVkICovCj4+PiArICAgIHU4ICAgIGJwcDsgICAgICAgIC8qIGJpdHMgcGVyIHBp eGVsICovCj4+PiArICAgIHUzMiAgICBod19mb3JtYXQ7ICAgIC8qIGZvcm1hdCBmaWVsZCBpbiB0 aGUgUFJJX0NUTCByZWdpc3RlciAqLwo+Pj4gKyAgICB1MzIgICAgZHJtX2Zvcm1hdDsgICAgLyog Zm9ybWF0IGluIERSTSBkZWZpbml0aW9uICovCj4+PiArICAgIHUzMiAgICBiYXNlOyAgICAgICAg LyogZnJhbWVidWZmZXIgYmFzZSBpbiBncmFwaGljcyBtZW1vcnkgKi8KPj4+ICsgICAgdTMyICAg IHhfb2Zmc2V0OyAgICAvKiBpbiBwaXhlbHMgKi8KPj4+ICsgICAgdTMyICAgIHlfb2Zmc2V0OyAg ICAvKiBpbiBsaW5lcyAqLwo+Pj4gKyAgICB1MzIgICAgd2lkdGg7ICAgICAgICAvKiBpbiBwaXhl bHMgKi8KPj4+ICsgICAgdTMyICAgIGhlaWdodDsgICAgICAgIC8qIGluIGxpbmVzICovCj4+PiAr ICAgIHUzMiAgICBzdHJpZGU7ICAgICAgICAvKiBpbiBieXRlcyAqLwo+Pj4gK307Cj4+PiArCj4+ PiArc3RydWN0IGd2dF9zcHJpdGVfcGxhbmVfZm9ybWF0IHsKPj4+ICsgICAgdTggICAgZW5hYmxl ZDsgICAgLyogcGxhbmUgaXMgZW5hYmxlZCAqLwo+Pj4gKyAgICB1OCAgICB0aWxlZDsgICAgICAg IC8qIFgtdGlsZWQgKi8KPj4+ICsgICAgdTggICAgYnBwOyAgICAgICAgLyogYml0cyBwZXIgcGl4 ZWwgKi8KPj4+ICsgICAgdTMyICAgIGh3X2Zvcm1hdDsgICAgLyogZm9ybWF0IGZpZWxkIGluIHRo ZSBTUFJfQ1RMIHJlZ2lzdGVyICovCj4+PiArICAgIHUzMiAgICBkcm1fZm9ybWF0OyAgICAvKiBm b3JtYXQgaW4gRFJNIGRlZmluaXRpb24gKi8KPj4+ICsgICAgdTMyICAgIGJhc2U7ICAgICAgICAv KiBzcHJpdGUgYmFzZSBpbiBncmFwaGljcyBtZW1vcnkgKi8KPj4+ICsgICAgdTMyICAgIHhfcG9z OyAgICAgICAgLyogaW4gcGl4ZWxzICovCj4+PiArICAgIHUzMiAgICB5X3BvczsgICAgICAgIC8q IGluIGxpbmVzICovCj4+PiArICAgIHUzMiAgICB4X29mZnNldDsgICAgLyogaW4gcGl4ZWxzICov Cj4+PiArICAgIHUzMiAgICB5X29mZnNldDsgICAgLyogaW4gbGluZXMgKi8KPj4+ICsgICAgdTMy ICAgIHdpZHRoOyAgICAgICAgLyogaW4gcGl4ZWxzICovCj4+PiArICAgIHUzMiAgICBoZWlnaHQ7 ICAgICAgICAvKiBpbiBsaW5lcyAqLwo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IGd2dF9jdXJz b3JfcGxhbmVfZm9ybWF0IHsKPj4+ICsgICAgdTggICAgZW5hYmxlZDsKPj4+ICsgICAgdTggICAg bW9kZTsgICAgICAgIC8qIGN1cnNvciBtb2RlIHNlbGVjdCAqLwo+Pj4gKyAgICB1OCAgICBicHA7 ICAgICAgICAvKiBiaXRzIHBlciBwaXhlbCAqLwo+Pj4gKyAgICB1MzIgICAgZHJtX2Zvcm1hdDsg ICAgLyogZm9ybWF0IGluIERSTSBkZWZpbml0aW9uICovCj4+PiArICAgIHUzMiAgICBiYXNlOyAg ICAgICAgLyogY3Vyc29yIGJhc2UgaW4gZ3JhcGhpY3MgbWVtb3J5ICovCj4+PiArICAgIHUzMiAg ICB4X3BvczsgICAgICAgIC8qIGluIHBpeGVscyAqLwo+Pj4gKyAgICB1MzIgICAgeV9wb3M7ICAg ICAgICAvKiBpbiBsaW5lcyAqLwo+Pj4gKyAgICB1OCAgICB4X3NpZ247ICAgICAgICAvKiBYIFBv c2l0aW9uIFNpZ24gKi8KPj4+ICsgICAgdTggICAgeV9zaWduOyAgICAgICAgLyogWSBQb3NpdGlv biBTaWduICovCj4+PiArICAgIHUzMiAgICB3aWR0aDsgICAgICAgIC8qIGluIHBpeGVscyAqLwo+ Pj4gKyAgICB1MzIgICAgaGVpZ2h0OyAgICAgICAgLyogaW4gbGluZXMgKi8KPj4+ICsgICAgdTMy ICAgIHhfaG90OyAgICAgICAgLyogaW4gcGl4ZWxzICovCj4+PiArICAgIHUzMiAgICB5X2hvdDsg ICAgICAgIC8qIGluIHBpeGVscyAqLwo+Pj4gK307Cj4+PiArCj4+Cj4+IFRoZSBhYm92ZSBzdHJ1 Y3RzIGhhdmUgYSBsb3QgaW4gY29tbW9uLCB3b3VsZCBpdCBtYWtlIHNlbnNlIHRvIGhhdmUgdGhl Cj4+IGNvbW1vbiBtZW1iZXJzICsgcGxhbmUgdHlwZSBhbmQgdGhlbiB1bmlvbiBmb3IgdGhlIHBs YW5lIHR5cGUgc3BlY2lmaWMKPj4gZGF0YS4gSSBzdXNwZWN0IGhhdmluZyBpdCBhbGwgc3BsaXQg dGhpcyB3YXkgd2lsbCBsZWFkIHRvIG1vcmUgdXRpbGl0eQo+PiBmdW5jdGlvbnMgc29tZXdoZXJl Lgo+Pgo+IFtaaGldIFRoYW5rcy4gV2lsbCBkbyB0aGF0Lgo+Cj4+PiArc3RydWN0IGd2dF9waXBl X2Zvcm1hdCB7Cj4+PiArICAgIHN0cnVjdCBndnRfcHJpbWFyeV9wbGFuZV9mb3JtYXQgICAgcHJp bWFyeTsKPj4+ICsgICAgc3RydWN0IGd2dF9zcHJpdGVfcGxhbmVfZm9ybWF0ICAgIHNwcml0ZTsK Pj4+ICsgICAgc3RydWN0IGd2dF9jdXJzb3JfcGxhbmVfZm9ybWF0ICAgIGN1cnNvcjsKPj4+ICsg ICAgZGRpX3BvcnRfdCBkZGlfcG9ydDsgIC8qIHRoZSBEREkgcG9ydCB0aGF0IHRoZSBwaXBlIGlz IGNvbm5lY3RlZAo+Pj4gdG8gKi8KPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCBndnRfZmJfZm9y bWF0ewo+Pj4gKyAgICBzdHJ1Y3QgZ3Z0X3BpcGVfZm9ybWF0ICAgIHBpcGVzW0k5MTVfTUFYX1BJ UEVTXTsKPj4+ICt9Owo+Pj4gKwo+Pj4gK2V4dGVybiBpbnQgZ3Z0X2ZiX25vdGlmaWVyX2NhbGxf Y2hhaW4odW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOwo+Pj4gK2V4dGVybiBpbnQgZ3Z0 X2RlY29kZV9mYl9mb3JtYXQoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYsIGludCB2bWlkLAo+Pj4g KyAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3Z0X2ZiX2Zvcm1hdCAqZmIpOwo+Pj4gKwo+Pj4gKyNl bmRpZgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwo+Pj4g Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+PiBpbmRleCAwMDAwMDAwLi4wNDFkMTBmCj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKPj4+IEBAIC0wLDAgKzEsMzY2IEBACj4+PiAr LyoKPj4+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgo+Pj4gKyAqCj4+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPj4+IG9idGFpbmluZyBhCj4+PiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZQo+Pj4gIlNvZnR3YXJlIiksCj4+PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKPj4+IGxpbWl0YXRpb24KPj4+ ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwKPj4+IHN1YmxpY2Vuc2UsCj4+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20KPj4+IHRoZQo+Pj4gKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Cj4+PiArICoKPj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nCj4+PiB0aGUgbmV4dAo+Pj4gKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bAo+Pj4gcG9ydGlvbnMgb2YgdGhlCj4+PiArICogU29mdHdhcmUuCj4+PiArICoKPj4+ICsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwKPj4+IEVYUFJFU1MgT1IKPj4+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4+PiBNRVJDSEFOVEFCSUxJVFksCj4+PiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PCj4+PiBFVkVOVCBTSEFMTAo+Pj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTCj4+PiBPUiBPVEhFUgo+Pj4gKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLAo+Pj4gQVJJU0lORyBGUk9NLAo+Pj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKPj4+IERFQUxJTkdTIElOIFRI RQo+Pj4gKyAqIFNPRlRXQVJFLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpbmNsdWRlCj4+PiArI2lu Y2x1ZGUKPj4+ICsKPj4+ICsjaW5jbHVkZSAiZ3Z0LmgiCj4+PiArCj4+PiArc3RydWN0IGd2dF9o b3N0IGd2dF9ob3N0Owo+Pj4gKwo+Pj4gK2V4dGVybiBzdHJ1Y3QgZ3Z0X2tlcm5lbF9kbSB4ZW5n dF9rZG07Cj4+PiArZXh0ZXJuIHN0cnVjdCBndnRfa2VybmVsX2RtIGt2bWd0X2tkbTsKPj4+ICsK Pj4+ICtzdGF0aWMgY29uc3QgY2hhciAqc3VwcG9ydGVkX2h5cGVydmlzb3JzW10gPSB7Cj4+Cj4+ IHNob3VsZCBiZSAic3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCIuCj4+Cj4+PiArICAgIFtHVlRf SFlQRVJWSVNPUl9UWVBFX1hFTl0gPSAiWGVuIEh5cGVydmlzb3IiLAo+Pj4gKyAgICBbR1ZUX0hZ UEVSVklTT1JfVFlQRV9LVk1dID0gIktWTSIsCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgYm9v bCBndnRfaW5pdF9ob3N0KHZvaWQpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZ3Z0X2hvc3QgKmhv c3QgPSAmZ3Z0X2hvc3Q7Cj4+PiArCj4+PiArICAgIGlmICghZ3Z0LmVuYWJsZSkgewo+Pj4gKyAg ICAgICAgZ3Z0X2RiZ19jb3JlKCJHVlQtZyBoYXMgYmVlbiBkaXNhYmxlZCBieSBrZXJuZWwgcGFy YW1ldGVyIik7Cj4+PiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4+PiArICAgIH0KPj4+ICsKPj4+ ICsgICAgaWYgKGhvc3QtPmluaXRpYWxpemVkKSB7Cj4+PiArICAgICAgICBndnRfZXJyKCJHVlQt ZyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkISIpOwo+Pj4gKyAgICAgICAgcmV0dXJuIGZh bHNlOwo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAgIGlmICh4ZW5faW5pdGlhbF9kb21haW4oKSkg ewo+Pgo+PiBTaG91bGRuJ3QgWGVuIGNvZGUgYmUgQ09ORklHX1hFTl9ET00wIGFuZCBDT05GSUdf WEVOICNpZmRlZiBwcm90ZWN0ZWQ/Cj4+Cj4gW1poaV0gVGhlIGZvbGxvd2luZyBjb2RlIHBpZWNl IHNob3dzIHhlbl9pbml0aWFsX2RvbWFpbigpL3hlbl9kb21haW4oKQo+IGNvdWxkIGFsc28gYmUg dXNlZCB3aGVuIENPTkZJR19YRU5fRE9NMCBpcyBub3Qgc2V0Lgo+Cj4gI2lmZGVmIENPTkZJR19Y RU4KPiBleHRlcm4gZW51bSB4ZW5fZG9tYWluX3R5cGUgeGVuX2RvbWFpbl90eXBlOwo+ICNlbHNl Cj4gI2RlZmluZSB4ZW5fZG9tYWluX3R5cGUgICAgICAgICBYRU5fTkFUSVZFCj4gI2VuZGlmCj4K PiAjZGVmaW5lIHhlbl9kb21haW4oKSAgICAgICAgICAgICh4ZW5fZG9tYWluX3R5cGUgIT0gWEVO X05BVElWRSkKPiAjZGVmaW5lIHhlbl9wdl9kb21haW4oKSAgICAgICAgICh4ZW5fZG9tYWluKCkg JiYgICAgICAgICAgICAgICAgICAgICAgICBcCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHhlbl9kb21haW5fdHlwZSA9PSBYRU5fUFZfRE9NQUlOKQo+ICNkZWZpbmUgeGVuX2h2 bV9kb21haW4oKSAgICAgICAgKHhlbl9kb21haW4oKSAmJiAgICAgICAgICAgICAgICAgICAgICAg IFwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX2RvbWFpbl90eXBlID09 IFhFTl9IVk1fRE9NQUlOKQo+Cj4gI2lmZGVmIENPTkZJR19YRU5fRE9NMAo+ICNpbmNsdWRlIDx4 ZW4vaW50ZXJmYWNlL3hlbi5oPgo+ICNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KPgo+ ICNkZWZpbmUgeGVuX2luaXRpYWxfZG9tYWluKCkgICAgKHhlbl9kb21haW4oKSAmJiBcCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbl9zdGFydF9pbmZvICYmCj4geGVuX3N0 YXJ0X2luZm8tPmZsYWdzICYgU0lGX0lOSVRET01BSU4pCj4gI2Vsc2UgIC8qICFDT05GSUdfWEVO X0RPTTAgKi8KPiAjZGVmaW5lIHhlbl9pbml0aWFsX2RvbWFpbigpICAgICgwKQo+ICNlbmRpZiAg LyogQ09ORklHX1hFTl9ET00wICovCj4KPj4+ICsgICAgICAgIC8qIFhlbiBEb20wICovCj4+PiAr ICAgICAgICBob3N0LT5rZG0gPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShzeW1ib2xfZ2V0KHhl bmd0X2tkbSksCj4+PiAieGVuZ3QiKTsKPj4+ICsgICAgICAgIGhvc3QtPmh5cGVydmlzb3JfdHlw ZSA9IEdWVF9IWVBFUlZJU09SX1RZUEVfWEVOOwo+Pj4gKyAgICB9IGVsc2UgaWYoeGVuX2RvbWFp bigpKSB7Cj4+PiArICAgICAgICAvKiBYZW4gRG9tVSAqLwo+Pj4gKyAgICAgICAgcmV0dXJuIGZh bHNlOwo+Pj4gKyAgICB9IGVsc2Ugewo+Pj4gKyAgICAgICAgLyogbm90IGluIFhlbi4gVHJ5IEtW TUdUICovCj4+PiArICAgICAgICBob3N0LT5rZG0gPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShz eW1ib2xfZ2V0KGt2bWd0X2tkbSksCj4+PiAia3ZtIik7Cj4+PiArICAgICAgICBob3N0LT5oeXBl cnZpc29yX3R5cGUgPSBHVlRfSFlQRVJWSVNPUl9UWVBFX0tWTTsKPj4+ICsgICAgfQo+Pj4gKwo+ Pgo+PiBXaHkgZG8gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGh5cGVydmlzb3IgdHlwZSwgYXJl IHRoZXJlIHBsZW50eSBvZgo+PiBoeXBlcnZpc29yIHNwZWNpZmljIGJlaGF2aW91ciBkaWZmZXJl bmNlcz8KPgo+IFtaaGldIEFzIEdWVC1nIG5lZWRzIHNvbWUgaHlwZXJ2aXNvciBzZXJ2aWNlcyB0 byB3b3JrLCB3ZSB3cml0ZSBhCj4gYWJzdHJhY3Rpb24gbGF5ZXIgdG8gY29ubmVjdCBHVlQtZyB0 byBkaWZmZXJlbnQgaHlwZXJ2aXNvci4gQnV0IHN0aWxsCj4gdGhlcmUgYXJlIHNvbWUgZW11bGF0 aW9uIGxvZ2ljIGNvdWxkbid0IGJlIGZpdHRlZCBpbnRvIHRoYXQgYWJzdHJhY3Rpb24KPiBsYXll ciwgbGlrZSBPcFJlZ2lvbiBlbXVsYXRpb24uIEluIFhlbiwgd2UgZW11bGF0ZXMgaXQgaW4ga2Vy bmVsIHNwYWNlLAo+IHdoaWxlIHdlIGVtdWxhdGVzIGl0IGluIFFlbXUgdW5kZXIgS1ZNLiBJIGFs c28gYWdyZWVkIHRoYXQgd2Ugc2hvdWxkCj4gZmluZCBzb21lIGFwcHJvYWNoIHRvIGltcHJvdmUg aXQganVzdCBsaWtlIHdoYXQgeW91IHNhaWQuCj4KPiBJZiBpdCBpcyBqdXN0IGZvciBwcmludGlu Zwo+PiB0aGUgYmVsb3cgZGVidWcsIEkgdGhpbmsgaXQncyBiZXR0ZXIgdG8gbW92ZSB0aGUgZGVi dWcgaW50byBhYm92ZSBjb2RlCj4+IHRoYXQgZGV0ZWN0cyB0aGUgaHlwZXJ2aXNvciwgd3JhcCB0 aGVtIHdpdGggYXBwcm9wcmlhdGUgQ09ORklHICNpZmRlZnMuCj4+Cj4+PiArICAgIGlmICghaG9z dC0+a2RtKQo+Pj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4gKwo+Pj4gKyAgICBpZiAoIWh5 cGVydmlzb3JfZGV0ZWN0X2hvc3QoKSkKPj4+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPj4+ICsK Pj4+ICsgICAgZ3Z0X2luZm8oIlJ1bm5pbmcgd2l0aCBoeXBlcnZpc29yICVzIGluIGhvc3QgbW9k ZSIsCj4+PiArICAgICAgICAgICAgc3VwcG9ydGVkX2h5cGVydmlzb3JzW2hvc3QtPmh5cGVydmlz b3JfdHlwZV0pOwo+Pj4gKwo+Pj4gKyAgICBpZHJfaW5pdCgmaG9zdC0+ZGV2aWNlX2lkcik7Cj4+ PiArICAgIG11dGV4X2luaXQoJmhvc3QtPmRldmljZV9pZHJfbG9jayk7Cj4+PiArCj4+PiArICAg IGhvc3QtPmluaXRpYWxpemVkID0gdHJ1ZTsKPj4+ICsgICAgcmV0dXJuIHRydWU7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBib29sIGluaXRfZGV2aWNlX2luZm8oc3RydWN0IHBndF9kZXZpY2Ug KnBkZXYpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZ3Z0X2RldmljZV9pbmZvICppbmZvID0gJnBk ZXYtPmRldmljZV9pbmZvOwo+Pj4gKwo+Pj4gKyAgICBpZiAoIUlTX0JST0FEV0VMTChwZGV2LT5k ZXZfcHJpdikpIHsKPj4+ICsgICAgICAgIGd2dF9lcnIoIlVuc3VwcG9ydGVkIEdFTiBkZXZpY2Ui KTsKPj4+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBp ZiAoSVNfQlJPQURXRUxMKHBkZXYtPmRldl9wcml2KSkgewo+Pj4gKyAgICAgICAgaW5mby0+bWF4 X2d0dF9nbV9zeiA9ICgxVUwgPDwgMzIpOwo+Pj4gKyAgICAgICAgLyoKPj4+ICsgICAgICAgICAq IFRoZSBsYXlvdXQgb2YgQkFSMCBpbiBCRFc6Cj4+PiArICAgICAgICAgKiB8PCAtIE1NSU8gMk1C IC0+fDwtIFJlc2VydmVkIDZNQiAtPnw8LSBNQVggR1RUIDhNQi0+fAo+Pj4gKyAgICAgICAgICoK Pj4+ICsgICAgICAgICAqIEdUVCBvZmZzZXQgaW4gQkFSMCBzdGFydHMgZnJvbSA4TUIgdG8gMTZN QiwgYW5kCj4+PiArICAgICAgICAgKiBXaGF0ZXZlciBHVFQgc2l6ZSBpcyBjb25maWd1cmVkIGlu IEJJT1MsCj4+PiArICAgICAgICAgKiB0aGUgc2l6ZSBvZiBCQVIwIGlzIGFsd2F5cyAxNk1CLiBU aGUgYWN0dWFsIGNvbmZpZ3VyZWQKPj4+ICsgICAgICAgICAqIEdUVCBzaXplIGNhbiBiZSBmb3Vu ZCBpbiBHTUNIX0NUUkwuCj4+PiArICAgICAgICAgKi8KPj4+ICsgICAgICAgIGluZm8tPmd0dF9z dGFydF9vZmZzZXQgPSAoMVVMIDw8IDIzKTsKPj4+ICsgICAgICAgIGluZm8tPm1heF9ndHRfc2l6 ZSA9ICgxVUwgPDwgMjMpOwo+Pj4gKyAgICAgICAgaW5mby0+Z3R0X2VudHJ5X3NpemUgPSA4Owo+ Pj4gKyAgICAgICAgaW5mby0+Z3R0X2VudHJ5X3NpemVfc2hpZnQgPSAzOwo+Pj4gKyAgICAgICAg aW5mby0+Z21hZHJfYnl0ZXNfaW5fY21kID0gODsKPj4KPj4gV291bGQgdGhpcyBpbmZvcm1hdGlv biBiZSB1c2VmdWwgaW4gYSBoZWFkZXIgYXMgI2RlZmluZXMgdG9vPwo+Pgo+IFtaaGldIFByb2Jh Ymx5LiBDb25zaWRlciB0aGF0IG9uZSBHVlQtZyBmZWF0dXJlZCBrZXJuZWwgY291bGQgYmUgYWJs ZSB0bwo+IHJ1biBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLCB0aGUgaW5mb3JtYWlvbiBkYXRhIHN0 cnVjdHVyZSBjb3VsZCBiZQo+IGRpZmZlcmVudC4gQnV0IEkgYWdyZWUgdG8gZGVmaW5lIHRoZSBt YWdpYyBudW1iZXJzIGluIGEgaGVhZGVyIGZpbGVzLiA6KQo+Cj4+PiArICAgIH0KPj4+ICsKPj4+ ICsgICAgZ3Z0X2luZm8oIkRldmljZSBpbmZvOiIpOwo+Pj4gKyAgICBwcmludGsoIiAgICAgICAg bWF4X2d0dF9nbV9zejogJWxseFxuIiwgaW5mby0+bWF4X2d0dF9nbV9zeik7Cj4+PiArICAgIHBy aW50aygiICAgICAgICBtYXhfZ3R0X3NpemU6ICV4XG4iLCBpbmZvLT5tYXhfZ3R0X3NpemUpOwo+ Pj4gKyAgICBwcmludGsoIiAgICAgICAgZ3R0X3NpemVfZW50cnk6ICV4XG4iLCBpbmZvLT5ndHRf ZW50cnlfc2l6ZSk7Cj4+PiArICAgIHByaW50aygiICAgICAgICBndHRfZW50cnlfc2l6ZV9zaGlm dDogJXhcbiIsCj4+PiBpbmZvLT5ndHRfZW50cnlfc2l6ZV9zaGlmdCk7Cj4+PiArICAgIHByaW50 aygiICAgICAgICBndHRfc3RhcnRfb2Zmc2V0OiAleFxuIiwgaW5mby0+Z3R0X3N0YXJ0X29mZnNl dCk7Cj4+PiArICAgIHByaW50aygiICAgICAgICBndHRfZW5kX29mZnNldDogJXhcbiIsIGluZm8t Pmd0dF9lbmRfb2Zmc2V0KTsKPj4+ICsKPj4KPj4gSnVzdCBwdXQgdGhpcyB0byBraW5kIG9mIHN0 dWZmIHRvIGk5MTVfZGVidWdmcy5jLgo+Pgo+IFtaaGldIFRoYW5rcy4KPgo+Pj4gKyAgICByZXR1 cm4gdHJ1ZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgaW5pdF9pbml0aWFsX2NmZ19z cGFjZV9zdGF0ZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPj4+ICt7Cj4+PiArICAgIHN0cnVj dCBwY2lfZGV2ICpwY2lfZGV2ID0gcGRldi0+ZGV2X3ByaXYtPmRldi0+cGRldjsKPj4+ICsgICAg aW50IGk7Cj4+PiArCj4+PiArICAgIGd2dF9kYmdfY29yZSgiaW5pdCBpbml0aWFsIGNmZyBzcGFj ZSwgaWQgJWQiLCBwZGV2LT5pZCk7Cj4+PiArCj4+PiArICAgIGZvciAoaSA9IDA7IGkgPCBHVlRf Q0ZHX1NQQUNFX1NaOyBpICs9IDQpCj4+Cj4+ICs9IHNpemVvZiguLi4pCj4+Cj4+PiArICAgICAg ICBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2RldiwgaSwKPj4+ICsgICAgICAgICAgICAgICAg KHUzMiAqKSZwZGV2LT5pbml0aWFsX2NmZ19zcGFjZVtpXSk7Cj4+PiArCj4+PiArICAgIGZvciAo aSA9IDA7IGkgPCAzOyBpKyspIHsKPj4KPj4gTm8gbWFnaWMgbnVtYmVycyBtYWtlIGEgI2RlZmlu ZSBmb3IgMyBhbmQgZ2l2ZSBpdCBhIGRlc2NyaXB0aXZlIG5hbWUuCj4+Cj4+PiArICAgICAgICBw ZGV2LT5iYXJfc2l6ZVtpXSA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgaSAqIDIpOwo+Pj4g KyAgICAgICAgZ3Z0X2luZm8oImJhciAlZCBzaXplOiAlbGx4IiwgaSwgcGRldi0+YmFyX3NpemVb aV0pOwo+Pj4gKyAgICB9Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGNsZWFuX2luaXRp YWxfbW1pb19zdGF0ZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPj4+ICt7Cj4+PiArICAgIGlm IChwZGV2LT5ndHRtbWlvX3ZhKSB7Cj4+PiArICAgICAgICBpb3VubWFwKHBkZXYtPmd0dG1taW9f dmEpOwo+Pj4gKyAgICAgICAgcGRldi0+Z3R0bW1pb192YSA9IE5VTEw7Cj4+PiArICAgIH0KPj4+ ICsKPj4+ICsgICAgaWYgKHBkZXYtPmdtYWRyX3ZhKSB7Cj4+PiArICAgICAgICBpb3VubWFwKHBk ZXYtPmdtYWRyX3ZhKTsKPj4+ICsgICAgICAgIHBkZXYtPmdtYWRyX3ZhID0gTlVMTDsKPj4+ICsg ICAgfQo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgYm9vbCBpbml0X2luaXRpYWxfbW1pb19zdGF0 ZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPj4+ICt7Cj4+PiArICAgIHU2NCBiYXIwLCBiYXIx Owo+Pj4gKwo+Pj4gKyAgICBndnRfZGJnX2NvcmUoImluaXQgaW5pdGlhbCBtbWlvIHN0YXRlLCBp ZCAlZCIsIHBkZXYtPmlkKTsKPj4+ICsKPj4+ICsgICAgYmFyMCA9ICoodTY0ICopJnBkZXYtPmlu aXRpYWxfY2ZnX3NwYWNlW0dWVF9SRUdfQ0ZHX1NQQUNFX0JBUjBdOwo+Pj4gKyAgICBiYXIxID0g Kih1NjQgKikmcGRldi0+aW5pdGlhbF9jZmdfc3BhY2VbR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMV07 Cj4+PiArCj4+PiArICAgIHBkZXYtPmd0dG1taW9fYmFzZSA9IGJhcjAgJiB+MHhmOwo+Pj4gKyAg ICBwZGV2LT5tbWlvX3NpemUgPSAyICogMTAyNCAqIDEwMjQ7Cj4+PiArICAgIHBkZXYtPnJlZ19u dW0gPSBwZGV2LT5tbWlvX3NpemUgLyA0Owo+Pj4gKyAgICBwZGV2LT5nbWFkcl9iYXNlID0gYmFy MSAmIH4weGY7Cj4+PiArCj4+Cj4+IE1hbnkgbWFnaWMgbnVtYmVycy4KPj4KPj4+ICsgICAgcGRl di0+Z3R0bW1pb192YSA9IGlvcmVtYXAocGRldi0+Z3R0bW1pb19iYXNlLCBwZGV2LT5iYXJfc2l6 ZVswXSk7Cj4+PiArICAgIGlmICghcGRldi0+Z3R0bW1pb192YSkgewo+Pj4gKyAgICAgICAgZ3Z0 X2VycigiZmFpbCB0byBtYXAgR1RUTU1JTyBCQVIuIik7Cj4+Cj4+IFRoZXNlIHNob3VsZCBiZSBp ZihXQVJOX09OKC4uLikpCj4+Cj4+PiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4+PiArICAgIH0K Pj4+ICsKPj4+ICsgICAgcGRldi0+Z21hZHJfdmEgPSBpb3JlbWFwKHBkZXYtPmdtYWRyX2Jhc2Us IHBkZXYtPmJhcl9zaXplWzJdKTsKPj4+ICsgICAgaWYgKCFwZGV2LT5nbWFkcl92YSkgewo+Pj4g KyAgICAgICAgZ3Z0X2VycigiZmFpbCB0byBtYXAgR01BRFIgQkFSLiIpOwo+Pj4gKyAgICAgICAg Z290byBlcnI7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgZ3Z0X2luZm8oImJhcjA6IDB4JWxs eCwgYmFyMTogMHglbGx4IiwgYmFyMCwgYmFyMSk7Cj4+PiArICAgIGd2dF9pbmZvKCJtbWlvIHNp emU6ICV4IiwgcGRldi0+bW1pb19zaXplKTsKPj4+ICsgICAgZ3Z0X2luZm8oImd0dG1taW86IDB4 JWxseCwgZ21hZHI6IDB4JWxseCIsIHBkZXYtPmd0dG1taW9fYmFzZSwKPj4+IHBkZXYtPmdtYWRy X2Jhc2UpOwo+Pj4gKyAgICBndnRfaW5mbygiZ3R0bW1pb192YTogJXAiLCBwZGV2LT5ndHRtbWlv X3ZhKTsKPj4+ICsgICAgZ3Z0X2luZm8oImdtYWRyX3ZhOiAlcCIsIHBkZXYtPmdtYWRyX3ZhKTsK Pj4+ICsKPj4+ICsgICAgcmV0dXJuIHRydWU7Cj4+PiArZXJyOgo+Pj4gKyAgICBjbGVhbl9pbml0 aWFsX21taW9fc3RhdGUocGRldik7Cj4+PiArICAgIHJldHVybiBmYWxzZTsKPj4+ICt9Cj4+PiAr Cj4+PiArc3RhdGljIGludCBndnRfc2VydmljZV90aHJlYWQodm9pZCAqZGF0YSkKPj4+ICt7Cj4+ PiArICAgIHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwZ3RfZGV2aWNlICopZGF0 YTsKPj4+ICsgICAgaW50IHI7Cj4+PiArCj4+PiArICAgIGd2dF9kYmdfY29yZSgic2VydmljZSB0 aHJlYWQgc3RhcnQsIHBndCAlZCIsIHBkZXYtPmlkKTsKPj4+ICsKPj4+ICsgICAgd2hpbGUoIWt0 aHJlYWRfc2hvdWxkX3N0b3AoKSkgewo+Pj4gKyAgICAgICAgciA9IHdhaXRfZXZlbnRfaW50ZXJy dXB0aWJsZShwZGV2LT5zZXJ2aWNlX3RocmVhZF93cSwKPj4+ICsgICAgICAgICAgICAgICAga3Ro cmVhZF9zaG91bGRfc3RvcCgpIHx8IHBkZXYtPnNlcnZpY2VfcmVxdWVzdCk7Cj4+PiArCj4+PiAr ICAgICAgICBpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQo+Pj4gKyAgICAgICAgICAgIGJyZWFr Owo+Pj4gKwo+Pj4gKyAgICAgICAgaWYgKHIpIHsKPj4+ICsgICAgICAgICAgICBndnRfd2Fybigi c2VydmljZSB0aHJlYWQgaXMgd2FrZW4gdXAgYnkgdW5leHBlY3RlZAo+Pj4gc2lnbmFsLiIpOwo+ Pgo+PiBTaG91bGQgYmUgV0FSTl9PTkNFLCB0byBhdm9pZCBmdXR1cmUgZGlzYXN0ZXJzIHdpdGgg Q0kuCj4+Cj4gW1poaV0gVGhhbmtzLgo+Pj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4gKyAg ICAgICAgfQo+Pj4gKyAgICB9Cj4+PiArICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgdm9pZCBjbGVhbl9zZXJ2aWNlX3RocmVhZChzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikK Pj4+ICt7Cj4+PiArICAgIGlmIChwZGV2LT5zZXJ2aWNlX3RocmVhZCkgewo+Pj4gKyAgICAgICAg a3RocmVhZF9zdG9wKHBkZXYtPnNlcnZpY2VfdGhyZWFkKTsKPj4+ICsgICAgICAgIHBkZXYtPnNl cnZpY2VfdGhyZWFkID0gTlVMTDsKPj4+ICsgICAgfQo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg Ym9vbCBpbml0X3NlcnZpY2VfdGhyZWFkKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQo+Pj4gK3sK Pj4+ICsgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmcGRldi0+c2VydmljZV90aHJlYWRfd3EpOwo+ Pj4gKwo+Pj4gKyAgICBwZGV2LT5zZXJ2aWNlX3RocmVhZCA9IGt0aHJlYWRfcnVuKGd2dF9zZXJ2 aWNlX3RocmVhZCwKPj4+ICsgICAgICAgICAgICBwZGV2LCAiZ3Z0X3NlcnZpY2VfdGhyZWFkJWQi LCBwZGV2LT5pZCk7Cj4+PiArCj4+PiArICAgIGlmICghcGRldi0+c2VydmljZV90aHJlYWQpIHsK Pj4+ICsgICAgICAgIGd2dF9lcnIoImZhaWwgdG8gc3RhcnQgc2VydmljZSB0aHJlYWQuIik7Cj4+ PiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgcmV0dXJu IHRydWU7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGNsZWFuX3BndF9kZXZpY2Uoc3Ry dWN0IHBndF9kZXZpY2UgKnBkZXYpCj4+PiArewo+Pj4gKyAgICBjbGVhbl9zZXJ2aWNlX3RocmVh ZChwZGV2KTsKPj4+ICsgICAgY2xlYW5faW5pdGlhbF9tbWlvX3N0YXRlKHBkZXYpOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgYm9vbCBpbml0X3BndF9kZXZpY2Uoc3RydWN0IHBndF9kZXZpY2Ug KnBkZXYsIHN0cnVjdAo+Pj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiArewo+Pj4g KyAgICBpZiAoIWluaXRfZGV2aWNlX2luZm8ocGRldikpCj4+PiArICAgICAgICByZXR1cm4gZmFs c2U7Cj4+PiArCj4+PiArICAgIGluaXRfaW5pdGlhbF9jZmdfc3BhY2Vfc3RhdGUocGRldik7Cj4+ PiArCj4+PiArICAgIGlmICghaW5pdF9pbml0aWFsX21taW9fc3RhdGUocGRldikpCj4+PiArICAg ICAgICBnb3RvIGVycjsKPj4+ICsKPj4+ICsgICAgaWYgKCFpbml0X3NlcnZpY2VfdGhyZWFkKHBk ZXYpKQo+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4+PiArCj4+PiArICAgIHJldHVybiB0cnVlOwo+ Pj4gK2VycjoKPj4+ICsgICAgY2xlYW5fcGd0X2RldmljZShwZGV2KTsKPj4+ICsgICAgcmV0dXJu IGZhbHNlOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgYm9vbCBwb3N0X2luaXRfcGd0X2Rldmlj ZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPj4+ICt7Cj4+PiArICAgIHJldHVybiB0cnVlOwo+ Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBmcmVlX3BndF9kZXZpY2Uoc3RydWN0IHBndF9k ZXZpY2UgKnBkZXYpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZ3Z0X2hvc3QgKmhvc3QgPSAmZ3Z0 X2hvc3Q7Cj4+PiArCj4+PiArICAgIG11dGV4X2xvY2soJmhvc3QtPmRldmljZV9pZHJfbG9jayk7 Cj4+PiArICAgIGlkcl9yZW1vdmUoJmhvc3QtPmRldmljZV9pZHIsIHBkZXYtPmlkKTsKPj4+ICsg ICAgbXV0ZXhfdW5sb2NrKCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwo+Pj4gKwo+Pj4gKyAgICB2 ZnJlZShwZGV2KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBwZ3RfZGV2aWNlICph bGxvY19wZ3RfZGV2aWNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4+PiAqZGV2X3ByaXYpCj4+ PiArewo+Pj4gKyAgICBzdHJ1Y3QgZ3Z0X2hvc3QgKmhvc3QgPSAmZ3Z0X2hvc3Q7Cj4+PiArICAg IHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0gTlVMTDsKPj4+ICsKPj4+ICsgICAgcGRldiA9IHZ6 YWxsb2Moc2l6ZW9mKCpwZGV2KSk7Cj4+PiArICAgIGlmICghcGRldikgewo+Pj4gKyAgICAgICAg Z3Z0X2VycigiZmFpbCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBndCBkZXZpY2UuIik7Cj4+PiAr ICAgICAgICByZXR1cm4gTlVMTDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBtdXRleF9sb2Nr KCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwo+Pj4gKyAgICBwZGV2LT5pZCA9IGlkcl9hbGxvYygm aG9zdC0+ZGV2aWNlX2lkciwgcGRldiwgMCwgMCwgR0ZQX0tFUk5FTCk7Cj4+PiArICAgIG11dGV4 X3VubG9jaygmaG9zdC0+ZGV2aWNlX2lkcl9sb2NrKTsKPj4+ICsKPj4+ICsgICAgaWYgKHBkZXYt PmlkIDwgMCkgewo+Pj4gKyAgICAgICAgZ3Z0X2VycigiZmFpbCB0byBhbGxvY2F0ZSBwZ3QgZGV2 aWNlIGlkLiIpOwo+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsg ICAgbXV0ZXhfaW5pdCgmcGRldi0+bG9jayk7Cj4+PiArICAgIHBkZXYtPmRldl9wcml2ID0gZGV2 X3ByaXY7Cj4+PiArICAgIGlkcl9pbml0KCZwZGV2LT5pbnN0YW5jZV9pZHIpOwo+Pj4gKwo+Pj4g KyAgICByZXR1cm4gcGRldjsKPj4+ICtlcnI6Cj4+PiArICAgIGZyZWVfcGd0X2RldmljZShwZGV2 KTsKPj4+ICsgICAgcmV0dXJuIE5VTEw7Cj4+PiArfQo+Pj4gKwo+Pj4gK3ZvaWQgZ3Z0X2Rlc3Ry b3lfcGd0X2RldmljZSh2b2lkICpwcml2YXRlX2RhdGEpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3Qg cGd0X2RldmljZSAqcGRldiA9IChzdHJ1Y3QgcGd0X2RldmljZSAqKXByaXZhdGVfZGF0YTsKPj4+ ICsKPj4+ICsgICAgY2xlYW5fcGd0X2RldmljZShwZGV2KTsKPj4+ICsgICAgZnJlZV9wZ3RfZGV2 aWNlKHBkZXYpOwo+Pj4gK30KPj4+ICsKPj4+ICt2b2lkICpndnRfY3JlYXRlX3BndF9kZXZpY2Uo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0 IHBndF9kZXZpY2UgKnBkZXYgPSBOVUxMOwo+Pj4gKyAgICBzdHJ1Y3QgZ3Z0X2hvc3QgKmhvc3Qg PSAmZ3Z0X2hvc3Q7Cj4+PiArCj4+PiArICAgIGlmICghaG9zdC0+aW5pdGlhbGl6ZWQgJiYgIWd2 dF9pbml0X2hvc3QoKSkgewo+Pj4gKyAgICAgICAgZ3Z0X2VycigiZ3Z0X2luaXRfaG9zdCBmYWls Iik7Cj4+PiArICAgICAgICByZXR1cm4gTlVMTDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBn dnRfZGJnX2NvcmUoImNyZWF0ZSBuZXcgcGd0IGRldmljZSwgaTkxNSBkZXZfcHJpdjogJXAiLCBk ZXZfcHJpdik7Cj4+PiArCj4+PiArICAgIHBkZXYgPSBhbGxvY19wZ3RfZGV2aWNlKGRldl9wcml2 KTsKPj4+ICsgICAgaWYgKCFwZGV2KSB7Cj4+PiArICAgICAgICBndnRfZXJyKCJmYWlsIHRvIGFs bG9jYXRlIG1lbW9yeSBmb3IgcGd0IGRldmljZS4iKTsKPj4+ICsgICAgICAgIGdvdG8gZXJyOwo+ Pj4gKyAgICB9Cj4+PiArCj4+PiArICAgIGd2dF9kYmdfY29yZSgiaW5pdCBwZ3QgZGV2aWNlLCBp ZCAlZCIsIHBkZXYtPmlkKTsKPj4+ICsKPj4+ICsgICAgaWYgKCFpbml0X3BndF9kZXZpY2UocGRl diwgZGV2X3ByaXYpKSB7Cj4+PiArICAgICAgICBndnRfZXJyKCJmYWlsIHRvIGluaXQgcGh5c2lj YWwgZGV2aWNlIHN0YXRlLiIpOwo+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4+PiArICAgIH0KPj4+ ICsKPj4+ICsgICAgZ3Z0X2RiZ19jb3JlKCJwZ3QgZGV2aWNlIGNyZWF0aW9uIGRvbmUsIGlkICVk IiwgcGRldi0+aWQpOwo+Pj4gKwo+Pj4gKyAgICByZXR1cm4gcGRldjsKPj4+ICtlcnI6Cj4+PiAr ICAgIGlmIChwZGV2KSB7Cj4+PiArICAgICAgICBndnRfZGVzdHJveV9wZ3RfZGV2aWNlKHBkZXYp Owo+Pj4gKyAgICAgICAgcGRldiA9IE5VTEw7Cj4+PiArICAgIH0KPj4+ICsgICAgcmV0dXJuIE5V TEw7Cj4+PiArfQo+Pj4gKwo+Pj4gK2Jvb2wgZ3Z0X3Bvc3RfaW5pdF9wZ3RfZGV2aWNlKHZvaWQg KnByaXZhdGVfZGF0YSkKPj4+ICt7Cj4+PiArICAgIHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0g KHN0cnVjdCBwZ3RfZGV2aWNlICopcHJpdmF0ZV9kYXRhOwo+Pj4gKyAgICBzdHJ1Y3QgZ3Z0X2hv c3QgKmhvc3QgPSAmZ3Z0X2hvc3Q7Cj4+PiArCj4+PiArICAgIGlmICghaG9zdC0+aW5pdGlhbGl6 ZWQpIHsKPj4+ICsgICAgICAgIGd2dF9lcnIoImd2dF9ob3N0IGhhdmVuJ3QgYmVlbiBpbml0aWFs aXplZC4iKTsKPj4+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4g KyAgICBndnRfZGJnX2NvcmUoInBvc3QgaW5pdCBwZ3QgZGV2aWNlICVkIiwgcGRldi0+aWQpOwo+ Pj4gKwo+Pj4gKyAgICBpZiAoIXBvc3RfaW5pdF9wZ3RfZGV2aWNlKHBkZXYpKSB7Cj4+PiArICAg ICAgICBndnRfZXJyKCJmYWlsIHRvIHBvc3QgaW5pdCBwaHlzaWNhbCBkZXZpY2Ugc3RhdGUuIik7 Cj4+PiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgcmV0 dXJuIHRydWU7Cj4+PiArfQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9ndnQuaAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi42Yzg1YmJhCj4+PiAtLS0gL2Rldi9udWxs Cj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPj4+IEBAIC0wLDAgKzEs MTMwIEBACj4+PiArLyoKPj4+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+Pj4gKyAqCj4+PiArICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPj4+IG9idGFp bmluZyBhCj4+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZQo+Pj4gIlNvZnR3YXJlIiksCj4+PiArICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKPj4+IGxp bWl0YXRpb24KPj4+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwKPj4+IHN1YmxpY2Vuc2UsCj4+PiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20KPj4+ IHRoZQo+Pj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+PiArICoKPj4+ICsgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nCj4+PiB0aGUg bmV4dAo+Pj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbAo+Pj4gcG9ydGlvbnMgb2YgdGhlCj4+PiArICogU29mdHdhcmUuCj4+PiAr ICoKPj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwKPj4+IEVYUFJFU1MgT1IKPj4+ICsgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4+PiBNRVJDSEFOVEFCSUxJ VFksCj4+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PCj4+PiBFVkVOVCBTSEFMTAo+Pj4gKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTCj4+PiBPUiBP VEhFUgo+Pj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLAo+Pj4gQVJJU0lORyBGUk9NLAo+Pj4gKyAqIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKPj4+IERF QUxJTkdTIElOIFRIRQo+Pj4gKyAqIFNPRlRXQVJFLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpZm5k ZWYgX0dWVF9IXwo+Pj4gKyNkZWZpbmUgX0dWVF9IXwo+Pj4gKwo+Pj4gKyNpbmNsdWRlICJpOTE1 X2Rydi5oIgo+Pj4gKyNpbmNsdWRlICJpOTE1X3ZncHUuaCIKPj4+ICsKPj4+ICsjaW5jbHVkZSAi ZGVidWcuaCIKPj4+ICsjaW5jbHVkZSAicGFyYW1zLmgiCj4+PiArI2luY2x1ZGUgInJlZy5oIgo+ Pj4gKyNpbmNsdWRlICJoeXBlcmNhbGwuaCIKPj4+ICsjaW5jbHVkZSAibXB0LmgiCj4+PiArI2lu Y2x1ZGUgImZiX2RlY29kZXIuaCIKPj4+ICsKPj4+ICsjZGVmaW5lIEdWVF9NQVhfVkdQVSA4Cj4+ PiArCj4+PiArZW51bSB7Cj4+PiArICAgIEdWVF9IWVBFUlZJU09SX1RZUEVfWEVOID0gMCwKPj4+ ICsgICAgR1ZUX0hZUEVSVklTT1JfVFlQRV9LVk0sCj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3Qg Z3Z0X2hvc3Qgewo+Pj4gKyAgICBib29sIGluaXRpYWxpemVkOwo+Pj4gKyAgICBpbnQgaHlwZXJ2 aXNvcl90eXBlOwo+Pj4gKyAgICBzdHJ1Y3QgbXV0ZXggZGV2aWNlX2lkcl9sb2NrOwo+Pj4gKyAg ICBzdHJ1Y3QgaWRyIGRldmljZV9pZHI7Cj4+PiArICAgIHN0cnVjdCBndnRfa2VybmVsX2RtICpr ZG07Cj4+PiArfTsKPj4+ICsKPj4+ICtleHRlcm4gc3RydWN0IGd2dF9ob3N0IGd2dF9ob3N0Owo+ Pj4gKwo+Pj4gKy8qIERlc2NyaWJlIHRoZSBsaW1pdGF0aW9uIG9mIEhXLiovCj4+PiArc3RydWN0 IGd2dF9kZXZpY2VfaW5mbyB7Cj4+PiArICAgIHU2NCBtYXhfZ3R0X2dtX3N6Owo+Pj4gKyAgICB1 MzIgZ3R0X3N0YXJ0X29mZnNldDsKPj4+ICsgICAgdTMyIGd0dF9lbmRfb2Zmc2V0Owo+Pj4gKyAg ICB1MzIgbWF4X2d0dF9zaXplOwo+Pj4gKyAgICB1MzIgZ3R0X2VudHJ5X3NpemU7Cj4+PiArICAg IHUzMiBndHRfZW50cnlfc2l6ZV9zaGlmdDsKPj4+ICsgICAgdTMyIGdtYWRyX2J5dGVzX2luX2Nt ZDsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCB2Z3RfZGV2aWNlIHsKPj4+ICsgICAgaW50IGlk Owo+Pj4gKyAgICBpbnQgdm1faWQ7Cj4+PiArICAgIHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2Owo+ Pj4gKyAgICBib29sIHdhcm5fdW50cmFjazsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCBwZ3Rf ZGV2aWNlIHsKPj4+ICsgICAgc3RydWN0IG11dGV4IGxvY2s7Cj4+PiArICAgIGludCBpZDsKPj4+ ICsKPj4+ICsgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2Owo+Pj4gKyAgICBz dHJ1Y3QgaWRyIGluc3RhbmNlX2lkcjsKPj4+ICsKPj4+ICsgICAgc3RydWN0IGd2dF9kZXZpY2Vf aW5mbyBkZXZpY2VfaW5mbzsKPj4+ICsKPj4+ICsgICAgdTggaW5pdGlhbF9jZmdfc3BhY2VbR1ZU X0NGR19TUEFDRV9TWl07Cj4+PiArICAgIHU2NCBiYXJfc2l6ZVtHVlRfQkFSX05VTV07Cj4+PiAr Cj4+PiArICAgIHU2NCBndHRtbWlvX2Jhc2U7Cj4+PiArICAgIHZvaWQgKmd0dG1taW9fdmE7Cj4+ PiArCj4+PiArICAgIHU2NCBnbWFkcl9iYXNlOwo+Pj4gKyAgICB2b2lkICpnbWFkcl92YTsKPj4+ ICsKPj4+ICsgICAgdTMyIG1taW9fc2l6ZTsKPj4+ICsgICAgdTMyIHJlZ19udW07Cj4+PiArCj4+ PiArICAgIHdhaXRfcXVldWVfaGVhZF90IHNlcnZpY2VfdGhyZWFkX3dxOwo+Pj4gKyAgICBzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnNlcnZpY2VfdGhyZWFkOwo+Pj4gKyAgICB1bnNpZ25lZCBsb25nIHNl cnZpY2VfcmVxdWVzdDsKPj4+ICt9Owo+Pj4gKwo+Pgo+PiBIZXJlLS0+Cj4+Cj4+PiArc3RhdGlj IGlubGluZSB1MzIgZ3Z0X21taW9fcmVhZChzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiwKPj4+ICsg ICAgICAgIHUzMiByZWcpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBwZGV2LT5kZXZfcHJpdjsKPj4+ICsgICAgaTkxNV9yZWdfdCB0bXAgPSB7LnJl ZyA9IHJlZ307Cj4+PiArICAgIHJldHVybiBJOTE1X1JFQUQodG1wKTsKPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIGlubGluZSB2b2lkIGd2dF9tbWlvX3dyaXRlKHN0cnVjdCBwZ3RfZGV2aWNlICpw ZGV2LAo+Pj4gKyAgICAgICAgdTMyIHJlZywgdTMyIHZhbCkKPj4+ICt7Cj4+PiArICAgIHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHBkZXYtPmRldl9wcml2Owo+Pj4gKyAgICBp OTE1X3JlZ190IHRtcCA9IHsucmVnID0gcmVnfTsKPj4+ICsgICAgSTkxNV9XUklURSh0bXAsIHZh bCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgdTY0IGd2dF9tbWlvX3JlYWQ2NChz dHJ1Y3QgcGd0X2RldmljZSAqcGRldiwKPj4+ICsgICAgICAgIHUzMiByZWcpCj4+PiArewo+Pj4g KyAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBwZGV2LT5kZXZfcHJpdjsK Pj4+ICsgICAgaTkxNV9yZWdfdCB0bXAgPSB7LnJlZyA9IHJlZ307Cj4+PiArICAgIHJldHVybiBJ OTE1X1JFQUQ2NCh0bXApOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgZ3Z0 X21taW9fd3JpdGU2NChzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiwKPj4+ICsgICAgICAgIHUzMiBy ZWcsIHU2NCB2YWwpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBwZGV2LT5kZXZfcHJpdjsKPj4+ICsgICAgaTkxNV9yZWdfdCB0bXAgPSB7LnJlZyA9 IHJlZ307Cj4+PiArICAgIEk5MTVfV1JJVEU2NCh0bXAsIHZhbCk7Cj4+PiArfQo+Pj4gKwo+Pgo+ PiA8LS0gV2h5PyBUaGUgaTkxNV9yZWdfdCB0eXBlIHdhcyBhZGRlZCB0byBhdm9pZCBwcm9ibGVt cywgdGhpcyBjb2RlIGlzCj4+IG5vdCB1c2VkIGFueXdoZXJlLCBhbmQgaXQgaGFzIG5vIGRvY3Vt ZW50YXRpb24sIHNvIEkgY2FuIG5vdCByZXZpZXcgaXQuCj4+Cj4+IEkgd3JvdGUgY29tbWVudHMg YXQgdGhlIHRvcCBvZiB0aGUgcG9zdC4KPj4KPiBbWmhpXSBUaGFua3MsIEkgd2lsbCBjaGVjayB0 aGF0Lgo+Cj4+IFJlZ2FyZHMsIEpvb25hcwo+Pgo+Pj4gKyNlbmRpZgo+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9oeXBlcmNhbGwuaAo+Pj4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvaHlwZXJjYWxsLmgKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRl eCAwMDAwMDAwLi4wYTQxODc0Cj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvaHlwZXJjYWxsLmgKPj4+IEBAIC0wLDAgKzEsMzAgQEAKPj4+ICsvKgo+ Pj4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCj4+PiArICoKPj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgo+Pj4gb2J0YWluaW5nIGEKPj4+ICsgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlCj4+PiAiU29mdHdhcmUiKSwKPj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dAo+Pj4gbGltaXRhdGlvbgo+Pj4gKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLAo+Pj4gc3VibGljZW5zZSwKPj4+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbQo+Pj4gdGhlCj4+PiArICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKPj4+ICsgKgo+Pj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcKPj4+IHRoZSBuZXh0Cj4+PiArICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCj4+ PiBwb3J0aW9ucyBvZiB0aGUKPj4+ICsgKiBTb2Z0d2FyZS4KPj4+ICsgKgo+Pj4gKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LAo+Pj4gRVhQUkVTUyBPUgo+Pj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPj4+IE1FUkNIQU5UQUJJTElUWSwKPj4+ICsgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8K Pj4+IEVWRU5UIFNIQUxMCj4+PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMKPj4+IE9SIE9USEVSCj4+PiArICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsCj4+PiBBUklTSU5HIEZST00sCj4+PiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgo+Pj4gREVBTElOR1MgSU4gVEhFCj4+ PiArICogU09GVFdBUkUuCj4+PiArICovCj4+PiArCj4+PiArI2lmbmRlZiBfR1ZUX0hZUEVSQ0FM TF9IXwo+Pj4gKyNkZWZpbmUgX0dWVF9IWVBFUkNBTExfSF8KPj4+ICsKPj4+ICtzdHJ1Y3QgZ3Z0 X2tlcm5lbF9kbSB7Cj4+PiArfTsKPj4+ICsKPj4+ICsjZW5kaWYgLyogX0dWVF9IWVBFUkNBTExf SF8gKi8KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmgKPj4+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21wdC5oCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+Pj4gaW5kZXggMDAwMDAwMC4uYmJlNDQ2NQo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21wdC5oCj4+PiBAQCAtMCwwICsxLDk3IEBACj4+PiAr LyoKPj4+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgo+Pj4gKyAqCj4+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPj4+IG9idGFpbmluZyBhCj4+PiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZQo+Pj4gIlNvZnR3YXJlIiksCj4+PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKPj4+IGxpbWl0YXRpb24KPj4+ ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwKPj4+IHN1YmxpY2Vuc2UsCj4+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20KPj4+IHRoZQo+Pj4gKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Cj4+PiArICoKPj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nCj4+PiB0aGUgbmV4dAo+Pj4gKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bAo+Pj4gcG9ydGlvbnMgb2YgdGhlCj4+PiArICogU29mdHdhcmUuCj4+PiArICoKPj4+ICsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwKPj4+IEVYUFJFU1MgT1IKPj4+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4+PiBNRVJDSEFOVEFCSUxJVFksCj4+PiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PCj4+PiBFVkVOVCBTSEFMTAo+Pj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTCj4+PiBPUiBPVEhFUgo+Pj4gKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLAo+Pj4gQVJJU0lORyBGUk9NLAo+Pj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKPj4+IERFQUxJTkdTIElOIFRI RQo+Pj4gKyAqIFNPRlRXQVJFLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpZm5kZWYgX0dWVF9NUFRf SF8KPj4+ICsjZGVmaW5lIF9HVlRfTVBUX0hfCj4+PiArCj4+PiArc3RydWN0IHZndF9kZXZpY2U7 Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh5cGVydmlzb3JfZzJtX3Bm bihzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAo+Pj4gKyAgICB1bnNpZ25lZCBsb25nIGdfcGZuKQo+ Pj4gK3sKPj4+ICsgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUg aW50IGh5cGVydmlzb3JfcGF1c2VfZG9tYWluKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCj4+PiAr ewo+Pj4gKyAgICByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSBpbnQg aHlwZXJ2aXNvcl9zaHV0ZG93bl9kb21haW4oc3RydWN0IHZndF9kZXZpY2UgKnZndCkKPj4+ICt7 Cj4+PiArICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIGludCBo eXBlcnZpc29yX3NldF90cmFwX2FyZWEoc3RydWN0IHZndF9kZXZpY2UgKnZndCwKPj4+ICsgICAg dWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCwgYm9vbCBtYXApCj4+PiArewo+Pj4gKyAgICBy ZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSBib29sIGh5cGVydmlzb3Jf ZGV0ZWN0X2hvc3Qodm9pZCkKPj4+ICt7Cj4+PiArICAgIHJldHVybiBmYWxzZTsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIGlubGluZSBpbnQgaHlwZXJ2aXNvcl92aXJ0X3RvX21mbih2b2lkICph ZGRyKQo+Pj4gK3sKPj4+ICsgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBp bmxpbmUgdm9pZCAqaHlwZXJ2aXNvcl9tZm5fdG9fdmlydChpbnQgbWZuKQo+Pj4gK3sKPj4+ICsg ICAgcmV0dXJuIE5VTEw7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBoeXBl cnZpc29yX2luamVjdF9tc2koc3RydWN0IHZndF9kZXZpY2UgKnZndCkKPj4+ICt7Cj4+PiArICAg IHJldHVybjsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSBpbnQgaHlwZXJ2aXNvcl9o dm1faW5pdChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQo+Pj4gK3sKPj4+ICsgICAgcmV0dXJuIDA7 Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBoeXBlcnZpc29yX2h2bV9leGl0 KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCj4+PiArewo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg aW5saW5lIHZvaWQgKmh5cGVydmlzb3JfZ3BhX3RvX3ZhKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3Qs Cj4+PiB1bnNpZ25lZCBsb25nIGdwYSkKPj4+ICt7Cj4+PiArICAgIHJldHVybiBOVUxMOwo+Pj4g K30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgaHlwZXJ2aXNvcl9yZWFkX3ZhKHN0cnVj dCB2Z3RfZGV2aWNlICp2Z3QsIHZvaWQgKnZhLAo+Pj4gKyAgICAgICAgdm9pZCAqdmFsLCBpbnQg bGVuLCBpbnQgYXRvbWljKQo+Pj4gK3sKPj4+ICsgICAgcmV0dXJuIGZhbHNlOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgaHlwZXJ2aXNvcl93cml0ZV92YShzdHJ1Y3Qgdmd0 X2RldmljZSAqdmd0LCB2b2lkCj4+PiAqdmEsCj4+PiArICAgICAgICB2b2lkICp2YWwsIGludCBs ZW4sIGludCBhdG9taWMpCj4+PiArewo+Pj4gKyAgICByZXR1cm4gZmFsc2U7Cj4+PiArfQo+Pj4g Kwo+Pj4gKyNlbmRpZiAvKiBfR1ZUX01QVF9IXyAqLwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuYwo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv cGFyYW1zLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi5kZmMz M2MzCj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv cGFyYW1zLmMKPj4+IEBAIC0wLDAgKzEsMjkgQEAKPj4+ICsvKgo+Pj4gKyAqIENvcHlyaWdodChj KSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4+PiAr ICoKPj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbgo+Pj4gb2J0YWluaW5nIGEKPj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4+PiAiU29mdHdhcmUi KSwKPj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dAo+Pj4gbGltaXRhdGlvbgo+Pj4gKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+Pj4gc3VibGljZW5z ZSwKPj4+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbQo+Pj4gdGhlCj4+PiArICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPj4+ICsgKgo+ Pj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcKPj4+IHRoZSBuZXh0Cj4+PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCj4+PiBwb3J0aW9ucyBvZiB0aGUK Pj4+ICsgKiBTb2Z0d2FyZS4KPj4+ICsgKgo+Pj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+Pj4gRVhQUkVTUyBPUgo+ Pj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YKPj4+IE1FUkNIQU5UQUJJTElUWSwKPj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8KPj4+IEVWRU5UIFNIQUxMCj4+ PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMKPj4+IE9SIE9USEVSCj4+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4+PiBBUklTSU5HIEZS T00sCj4+PiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUgo+Pj4gREVBTElOR1MgSU4gVEhFCj4+PiArICogU09GVFdBUkUuCj4+ PiArICovCj4+PiArCj4+PiArI2luY2x1ZGUgImd2dC5oIgo+Pj4gKwo+Pj4gK3N0cnVjdCBndnRf a2VybmVsX3BhcmFtcyBndnQgPSB7Cj4+PiArICAgIC5lbmFibGUgPSB0cnVlLAo+Pj4gKyAgICAu ZGVidWcgPSAwLAo+Pj4gK307Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Z0L3BhcmFtcy5oCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuaAo+Pj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAuLmQyOTU1YjkKPj4+IC0tLSAv ZGV2L251bGwKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuaAo+Pj4g QEAgLTAsMCArMSwzNCBAQAo+Pj4gKy8qCj4+PiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4+ICsgKgo+Pj4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u Cj4+PiBvYnRhaW5pbmcgYQo+Pj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPj4+ICJTb2Z0d2FyZSIpLAo+Pj4gKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0Cj4+PiBsaW1pdGF0aW9uCj4+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4+PiBzdWJsaWNlbnNlLAo+Pj4gKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tCj4+PiB0aGUKPj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+Pj4gKyAqCj4+PiArICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGlu Zwo+Pj4gdGhlIG5leHQKPj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKPj4+IHBvcnRpb25zIG9mIHRoZQo+Pj4gKyAqIFNvZnR3 YXJlLgo+Pj4gKyAqCj4+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4+PiBFWFBSRVNTIE9SCj4+PiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+Pj4gTUVS Q0hBTlRBQklMSVRZLAo+Pj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTwo+Pj4gRVZFTlQgU0hBTEwKPj4+ICsgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF Uwo+Pj4gT1IgT1RIRVIKPj4+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPj4+IEFSSVNJTkcgRlJPTSwKPj4+ICsgKiBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSCj4+PiBERUFMSU5HUyBJTiBUSEUKPj4+ICsgKiBTT0ZUV0FSRS4KPj4+ICsgKi8KPj4+ICsK Pj4+ICsjaWZuZGVmIF9HVlRfUEFSQU1TX0hfCj4+PiArI2RlZmluZSBfR1ZUX1BBUkFNU19IXwo+ Pj4gKwo+Pj4gK3N0cnVjdCBndnRfa2VybmVsX3BhcmFtcyB7Cj4+PiArICAgIGJvb2wgZW5hYmxl Owo+Pj4gKyAgICBpbnQgZGVidWc7Cj4+PiArfTsKPj4+ICsKPj4+ICtleHRlcm4gc3RydWN0IGd2 dF9rZXJuZWxfcGFyYW1zIGd2dDsKPj4+ICsKPj4+ICsjZW5kaWYKPj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcmVnLmgKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Z0L3JlZy5oCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4uZDM2 M2I3NAo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L3JlZy5oCj4+PiBAQCAtMCwwICsxLDM0IEBACj4+PiArLyoKPj4+ICsgKiBDb3B5cmlnaHQoYykg MjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+Pj4gKyAq Cj4+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24KPj4+IG9idGFpbmluZyBhCj4+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+Pj4gIlNvZnR3YXJlIiks Cj4+PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQKPj4+IGxpbWl0YXRpb24KPj4+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKPj4+IHN1YmxpY2Vuc2Us Cj4+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20KPj4+IHRoZQo+Pj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+PiArICoKPj4+ ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nCj4+PiB0aGUgbmV4dAo+Pj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAo+Pj4gcG9ydGlvbnMgb2YgdGhlCj4+ PiArICogU29mdHdhcmUuCj4+PiArICoKPj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPj4+IEVYUFJFU1MgT1IKPj4+ ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GCj4+PiBNRVJDSEFOVEFCSUxJVFksCj4+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PCj4+PiBFVkVOVCBTSEFMTAo+Pj4g KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTCj4+PiBPUiBPVEhFUgo+Pj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+Pj4gQVJJU0lORyBGUk9N LAo+Pj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIKPj4+IERFQUxJTkdTIElOIFRIRQo+Pj4gKyAqIFNPRlRXQVJFLgo+Pj4g KyAqLwo+Pj4gKwo+Pj4gKyNpZm5kZWYgX0dWVF9SRUdfSAo+Pj4gKyNkZWZpbmUgX0dWVF9SRUdf SAo+Pj4gKwo+Pj4gKyNkZWZpbmUgR1ZUX0NGR19TUEFDRV9TWiAgICAyNTYKPj4+ICsjZGVmaW5l IEdWVF9CQVJfTlVNICAgICAgICA0Cj4+PiArCj4+PiArI2RlZmluZSBHVlRfUkVHX0NGR19TUEFD RV9CQVIwICAgIDB4MTAKPj4+ICsjZGVmaW5lIEdWVF9SRUdfQ0ZHX1NQQUNFX0JBUjEgICAgMHgx OAo+Pj4gKyNkZWZpbmUgR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMiAgICAweDIwCj4+PiArCj4+PiAr I2VuZGlmCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+ Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4+PiBpbmRleCA0NzI1ZThkLi5l Y2E4ZTUwIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+ Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+Pj4gQEAgLTk0Myw2ICs5 NDMsMTAgQEAgaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4+ IHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4+Pgo+Pj4gICAgICAgaW50ZWxfdW5jb3JlX2luaXQoZGV2 KTsKPj4+Cj4+PiArICAgIGRldl9wcml2LT52Z3B1Lmhvc3RfcHJpdmF0ZV9kYXRhID0gZ3Z0X2Ny ZWF0ZV9wZ3RfZGV2aWNlKGRldl9wcml2KTsKPj4+ICsgICAgaWYoaW50ZWxfZ3Z0X2hvc3RfYWN0 aXZlKGRldikpCj4+PiArICAgICAgICBEUk1fSU5GTygiR1ZULWcgaXMgcnVubmluZyBpbiBob3N0 IG1vZGVcbiIpOwo+Pj4gKwo+Pj4gICAgICAgcmV0ID0gaTkxNV9nZW1fZ3R0X2luaXQoZGV2KTsK Pj4+ICAgICAgIGlmIChyZXQpCj4+PiAgICAgICAgICAgZ290byBvdXRfZnJlZWNzcjsKPj4+IEBA IC0xMDY3LDYgKzEwNzEsMTMgQEAgaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPj4+IHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4+PiAgICAgICAgICAgZ290byBvdXRf cG93ZXJfd2VsbDsKPj4+ICAgICAgIH0KPj4+Cj4+PiArICAgIGlmIChpbnRlbF9ndnRfaG9zdF9h Y3RpdmUoZGV2KSkgewo+Pj4gKyAgICAgICAgaWYKPj4+ICghZ3Z0X3Bvc3RfaW5pdF9wZ3RfZGV2 aWNlKGRldl9wcml2LT52Z3B1Lmhvc3RfcHJpdmF0ZV9kYXRhKSkgewo+Pj4gKyAgICAgICAgICAg IERSTV9FUlJPUigiZmFpbGVkIHRvIHBvc3QgaW5pdCBwZ3QgZGV2aWNlXG4iKTsKPj4+ICsgICAg ICAgICAgICBnb3RvIG91dF9wb3dlcl93ZWxsOwo+Pj4gKyAgICAgICAgfQo+Pj4gKyAgICB9Cj4+ PiArCj4+PiAgICAgICAvKgo+Pj4gICAgICAgICogTm90aWZ5IGEgdmFsaWQgc3VyZmFjZSBhZnRl ciBtb2Rlc2V0dGluZywKPj4+ICAgICAgICAqIHdoZW4gcnVubmluZyBpbnNpZGUgYSBWTS4KPj4+ IEBAIC0xMTE3LDYgKzExMjgsMTAgQEAgb3V0X2d0dDoKPj4+ICAgICAgIGk5MTVfZ2xvYmFsX2d0 dF9jbGVhbnVwKGRldik7Cj4+PiAgIG91dF9mcmVlY3NyOgo+Pj4gICAgICAgaW50ZWxfY3NyX3Vj b2RlX2ZpbmkoZGV2X3ByaXYpOwo+Pj4gKyAgICBpZiAoaW50ZWxfZ3Z0X2hvc3RfYWN0aXZlKGRl dikpIHsKPj4+ICsgICAgICAgIGd2dF9kZXN0cm95X3BndF9kZXZpY2UoZGV2X3ByaXYtPnZncHUu aG9zdF9wcml2YXRlX2RhdGEpOwo+Pj4gKyAgICAgICAgZGV2X3ByaXYtPnZncHUuaG9zdF9wcml2 YXRlX2RhdGEgPSBOVUxMOwo+Pj4gKyAgICB9Cj4+PiAgICAgICBpbnRlbF91bmNvcmVfZmluaShk ZXYpOwo+Pj4gICAgICAgcGNpX2lvdW5tYXAoZGV2LT5wZGV2LCBkZXZfcHJpdi0+cmVncyk7Cj4+ PiAgIHB1dF9icmlkZ2U6Cj4+PiBAQCAtMTE2NSw2ICsxMTgwLDEwIEBAIGludCBpOTE1X2RyaXZl cl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPj4+Cj4+PiAgICAgICBpbnRlbF9tb2Rl c2V0X2NsZWFudXAoZGV2KTsKPj4+Cj4+PiArICAgIGlmIChpbnRlbF9ndnRfaG9zdF9hY3RpdmUo ZGV2KSkgewo+Pj4gKyAgICAgICAgZ3Z0X2Rlc3Ryb3lfcGd0X2RldmljZShkZXZfcHJpdi0+dmdw dS5ob3N0X3ByaXZhdGVfZGF0YSk7Cj4+PiArICAgICAgICBkZXZfcHJpdi0+dmdwdS5ob3N0X3By aXZhdGVfZGF0YSA9IE5VTEw7Cj4+PiArICAgIH0KPj4+ICAgICAgIC8qCj4+PiAgICAgICAgKiBm cmVlIHRoZSBtZW1vcnkgc3BhY2UgYWxsb2NhdGVkIGZvciB0aGUgY2hpbGQgZGV2aWNlCj4+PiAg ICAgICAgKiBjb25maWcgcGFyc2VkIGZyb20gVkJUCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCj4+PiBpbmRleCAwMWNjOTgyLi5kYjNjNzliIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAo+Pj4gQEAgLTE2NzMsNiArMTY3Myw3IEBAIHN0cnVjdCBpOTE1X3dvcmthcm91bmRz IHsKPj4+Cj4+PiAgIHN0cnVjdCBpOTE1X3ZpcnR1YWxfZ3B1IHsKPj4+ICAgICAgIGJvb2wgYWN0 aXZlOwo+Pj4gKyAgICB2b2lkICpob3N0X3ByaXZhdGVfZGF0YTsKPj4+ICAgfTsKPj4+Cj4+PiAg IHN0cnVjdCBpOTE1X2V4ZWNidWZmZXJfcGFyYW1zIHsKPj4+IEBAIC0yNzQ3LDYgKzI3NDgsMTEg QEAgc3RhdGljIGlubGluZSBib29sIGludGVsX3ZncHVfYWN0aXZlKHN0cnVjdAo+Pj4gZHJtX2Rl dmljZSAqZGV2KQo+Pj4gICAgICAgcmV0dXJuIHRvX2k5MTUoZGV2KS0+dmdwdS5hY3RpdmU7Cj4+ PiAgIH0KPj4+Cj4+PiArc3RhdGljIGlubGluZSBib29sIGludGVsX2d2dF9ob3N0X2FjdGl2ZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+Pj4gK3sKPj4+ICsgICAgcmV0dXJuIHRvX2k5MTUoZGV2 KS0+dmdwdS5ob3N0X3ByaXZhdGVfZGF0YSA/IHRydWUgOiBmYWxzZTsKPj4+ICt9Cj4+PiArCj4+ PiAgIHZvaWQKPj4+ICAgaTkxNV9lbmFibGVfcGlwZXN0YXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCBlbnVtIHBpcGUKPj4+IHBpcGUsCj4+PiAgICAgICAgICAgICAgICB1MzIg c3RhdHVzX21hc2spOwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf dmdwdS5oCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdmdwdS5oCj4+PiBpbmRleCAz YzgzYjQ3Li45NDI0OTBhIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV92Z3B1LmgKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdmdwdS5oCj4+PiBA QCAtMTEzLDUgKzExMyw4IEBAIHN0cnVjdCB2Z3RfaWYgewo+Pj4gICBleHRlcm4gdm9pZCBpOTE1 X2NoZWNrX3ZncHUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4+PiAgIGV4dGVybiBpbnQgaW50 ZWxfdmd0X2JhbGxvb24oc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4+PiAgIGV4dGVybiB2b2lk IGludGVsX3ZndF9kZWJhbGxvb24odm9pZCk7Cj4+PiArZXh0ZXJuIHZvaWQgKmd2dF9jcmVhdGVf cGd0X2RldmljZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+Pj4gK2V4dGVy biBib29sIGd2dF9wb3N0X2luaXRfcGd0X2RldmljZSh2b2lkICpwcml2YXRlX2RhdGEpOwo+Pj4g K2V4dGVybiB2b2lkIGd2dF9kZXN0cm95X3BndF9kZXZpY2Uodm9pZCAqcHJpdmF0ZV9kYXRhKTsK Pj4+Cj4+PiAgICNlbmRpZiAvKiBfSTkxNV9WR1BVX0hfICovCj4+PiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oCj4+ PiBpbmRleCBkMTMzMTEyLi43OGEzOGYxIDEwMDY0NAo+Pj4gLS0tIGEvaW5jbHVkZS94ZW4vaW50 ZXJmYWNlL3hlbi5oCj4+PiArKysgYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmgKPj4+IEBA IC0yOCw2ICsyOCw3IEBACj4+PiAgICNkZWZpbmUgX19YRU5fUFVCTElDX1hFTl9IX18KPj4+Cj4+ PiAgICNpbmNsdWRlCj4+PiArI2luY2x1ZGUKPj4+Cj4+PiAgIC8qCj4+PiAgICAqIFhFTiAiU1lT VEVNIENBTExTIiAoYS5rLmEuIEhZUEVSQ0FMTFMpLgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK