From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hyun Kwon Subject: Re: [PATCH v5 1/5] drm: xlnx: Xilinx DRM KMS module Date: Wed, 21 Feb 2018 18:50:42 -0800 Message-ID: <20180222025042.GA26081@smtp.xilinx.com> References: <1517967400-16993-1-git-send-email-hyun.kwon@xilinx.com> <1602665.SZ6qsW1oli@avalon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1602665.SZ6qsW1oli@avalon> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: "devicetree@vger.kernel.org" , Michal Simek , "dri-devel@lists.freedesktop.org" , Rob Herring , Daniel Vetter List-Id: devicetree@vger.kernel.org SGkgTGF1cmVudCwKClRoYW5rcyBmb3IgdGhlIHJldmlldy4KCk9uIFdlZCwgMjAxOC0wMi0yMSBh dCAxNToxNzoyNSAtMDgwMCwgTGF1cmVudCBQaW5jaGFydCB3cm90ZToKPiBIaSBIeXVuLAo+IAo+ IFRoYW5rIHlvdSBmb3IgdGhlIHBhdGNoLgo+IAo+IE9uIFdlZG5lc2RheSwgNyBGZWJydWFyeSAy MDE4IDAzOjM2OjM2IEVFVCBIeXVuIEt3b24gd3JvdGU6Cj4gPiBYaWxpbnggaGFzIHZhcmlvdXMg cGxhdGZvcm1zIGZvciBkaXNwbGF5LCB3aGVyZSB1c2VycyBjYW4gY3JlYXRlCj4gPiB1c2luZyBt dWx0aXBsZSBJUHMgaW4gdGhlIHByb2dyYW1tYWJsZSBGUEdBIGZhYnJpYywgb3Igd2hlcmUKPiA+ IHNvbWUgaGFyZGVuZWQgcGllcGxpbmUgaXMgYXZhaWxhYmxlIG9uIHRoZSBjaGlwLiBGdXJ0aGVy bW9yZSwKPiAKPiBzL3BpZXBsaW5lL3BpcGVsaW5lLwo+IAo+ID4gaGFyZGVuZWQgcGlwZWxpbmUg Y2FuIGFsc28gaW50ZXJhY3Qgd2l0aCBzb2Z0IGxvZ2ljcyBpbiBGUEdBLgo+ID4gCj4gPiBUaGUg WGlsaW54IERSTSBLTVMgbW9kdWxlIGlzIHRvIGludGVncmF0ZSBtdWx0aXBsZSBzdWJkZXZpY2Vz IGFuZAo+ID4gdG8gcmVwcmVzZW50IHRoZSBlbnRpcmUgcGlwZWxpbmUgYXMgYSBzaW5nbGUgRFJN IGRldmljZS4gVGhlIG1vZHVsZQo+ID4gaW5jbHVkZXMgaGVscGVyIChleCwgZnJhbWVidWZmZXIg YW5kIGdlbSBoZWxwZXJzKSBhbmQKPiA+IGdsdWUgbG9naWMgKGV4LCBjcnRjIGludGVyZmFjZSkg ZnVuY3Rpb25zLgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBIeXVuIEt3b24gPGh5dW4ua3dvbkB4 aWxpbnguY29tPgo+ID4gQWNrZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3 bGwuY2g+Cj4gPiAtLS0KPiA+IHY1Cj4gPiAtIFJlZGVmaW5lIHhsbnhfcGlwZWxpbmVfaW5pdCgp Cj4gPiB2NAo+ID4gLSBGaXggYSBidWcgaW4gb2YgZ3JhcGggYmluZGluZyBoYW5kbGluZwo+ID4g LSBSZW1vdmUgdmJsYW5rIGNhbGxiYWNrcyBmcm9tIHhsbnhfY3J0Ywo+ID4gLSBSZW1vdmUgdGhl IGR0IGJpbmRpbmcuIFRoaXMgbW9kdWxlIGJlY29tZXMgbW9yZSBsaWtlIGEgbGlicmFyeS4KPiA+ IC0gUmVwaHJhc2UgdGhlIGNvbW1pdCBtZXNzYWdlCj4gPiB2Mwo+ID4gLSBBZGQgTGF1cmVudCBh cyBhIG1haW50YWluZXIKPiA+IC0gRml4IG11bHRpcGxlLXJlZmVyZW5jZSBvbiBnZW0gb2JqZWN0 cwo+ID4gdjIKPiA+IC0gQ2hhbmdlIHRoZSBTUERYIGlkZW50aWZpZXIgZm9ybWF0Cj4gPiAtIE1l cmdlIHBhdGNoZXMoY3J0YywgZ2VtLCBmYikgaW50byBzaW5nbGUgb25lCj4gPiB2MiBvZiB4bG54 X2Rydgo+ID4gLSBSZW5hbWUga21zIHRvIGRpc3BsYXkgaW4geGxueF9kcnYKPiA+IC0gUmVwbGFj ZSBzb21lIHhsbnggc3BlY2lmaWMgZmIgaGVscGVyIHdpdGggY29tbW9uIGhlbHBlcnMgaW4geGxu eF9kcnYKPiA+IC0gRG9uJ3Qgc2V0IHRoZSBjb21taXQgdGFpbCBjYWxsYmFjayBpbiB4bG54X2Ry dgo+ID4gLSBTdXBwb3J0ICdwb3J0cycgZ3JhcGggYmluZGluZyBpbiB4bG54X2Rydgo+ID4gdjIg b2YgeGxueF9mYgo+ID4gLSBSZW1vdmUgd3JhcHBlcnMgaW4geGxueF9mYgo+ID4gLSBSZXBsYWNl IHNvbWUgZnVuY3Rpb25zIHdpdGggZHJtIGNvcmUgaGVscGVycyBpbiB4bG54X2ZiCj4gPiAtLS0K PiA+IC0tLQo+ID4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsKPiA+ ICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICB8ICAgMiArCj4gPiAgZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS94bG54 L0tjb25maWcgICAgIHwgIDEyICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC9NYWtlZmlsZSAg ICB8ICAgMiArCj4gPiAgZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmMgfCAxNzcgKysr KysrKysrKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuaCB8ICA3MCAr KysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5jICB8IDUwMSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94 bG54X2Rydi5oICB8ICAzMyArKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMg ICB8IDI5OCArKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS94bG54 L3hsbnhfZmIuaCAgIHwgIDMzICsrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2Vt LmMgIHwgIDQ3ICsrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5oICB8ICAy NiArKwo+ID4gIDEzIGZpbGVzIGNoYW5nZWQsIDEyMTEgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmlnCj4gPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L01ha2VmaWxlCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfY3J0Yy5jCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfY3J0Yy5oCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmMKPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9kcnYuaAo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5oCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uaAo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvTUFJ TlRBSU5FUlMgYi9NQUlOVEFJTkVSUwo+ID4gaW5kZXggNWJjMDg4Zi4uMDdjMGU3MyAxMDA2NDQK PiA+IC0tLSBhL01BSU5UQUlORVJTCj4gPiArKysgYi9NQUlOVEFJTkVSUwo+ID4gQEAgLTQ3ODks NiArNDc4OSwxNSBAQCBGOglkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi8KPiA+ICBGOglpbmNsdWRl L3VhcGkvZHJtL2V0bmF2aXZfZHJtLmgKPiA+ICBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUv YmluZGluZ3MvZGlzcGxheS9ldG5hdml2Lwo+ID4gCj4gPiArRFJNIERSSVZFUlMgRk9SIFhJTElO WAo+ID4gK006CUh5dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gPiArTToJTGF1cmVu dCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgo+ID4gK0w6CWRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+ICtTOglNYWludGFpbmVkCj4gPiArRjoJ ZHJpdmVycy9ncHUvZHJtL3hsbngvCj4gPiArRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL2Rpc3BsYXkveGxueC8KPiA+ICtUOglnaXQgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3Rv cC5vcmcvZHJtL2RybS1taXNjCj4gPiArCj4gPiAgRFJNIERSSVZFUlMgRk9SIFpURSBaWAo+ID4g IE06CVNoYXduIEd1byA8c2hhd25ndW9Aa2VybmVsLm9yZz4KPiA+ICBMOglkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25m aWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4gaW5kZXggZGVlZWZhNy4uNWEzZWM2NiAx MDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZwo+ID4gQEAgLTI4OSw2ICsyODksOCBAQCBzb3VyY2UgImRyaXZlcnMv Z3B1L2RybS9wbDExMS9LY29uZmlnIgo+ID4gCj4gPiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0v dHZlMjAwL0tjb25maWciCj4gPiAKPiA+ICtzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS94bG54L0tj b25maWciCj4gCj4gSSB3b3VsZCBoYXZlIHNwZWxsZWQgdGhhdCBvdXQgY29tcGxldGVseSBhcyBJ IHRoaW5rIGl0IHdpbGwgYmUgZWFzaWVyIHRvIAo+IHVuZGVyc3RhbmQsIGJ1dCBpdCdzIHVwIHRv IHlvdS4KPiAKPiA+ICAjIEtlZXAgbGVnYWN5IGRyaXZlcnMgbGFzdAo+ID4gCj4gPiAgbWVudWNv bmZpZyBEUk1fTEVHQUNZCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gPiBpbmRleCA1MDA5M2ZmLi5mOTM1NTdlIDEw MDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUKPiA+IEBAIC0xMDMsMyArMTAzLDQgQEAgb2JqLSQoQ09ORklHX0RS TV9NWFNGQikJKz0gbXhzZmIvCj4gPiAgb2JqLSQoQ09ORklHX0RSTV9USU5ZRFJNKSArPSB0aW55 ZHJtLwo+ID4gIG9iai0kKENPTkZJR19EUk1fUEwxMTEpICs9IHBsMTExLwo+ID4gIG9iai0kKENP TkZJR19EUk1fVFZFMjAwKSArPSB0dmUyMDAvCj4gPiArb2JqLSQoQ09ORklHX0RSTV9YTE5YKQkr PSB4bG54Lwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcgYi9k cml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmlnCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4g aW5kZXggMDAwMDAwMC4uMTlmZDdjZAo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL3hsbngvS2NvbmZpZwo+ID4gQEAgLTAsMCArMSwxMiBAQAo+ID4gK2NvbmZpZyBE Uk1fWExOWAo+ID4gKwl0cmlzdGF0ZSAiWGlsaW54IERSTSBLTVMgRHJpdmVyIgo+ID4gKwlkZXBl bmRzIG9uIERSTSAmJiBPRgo+ID4gKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKPiA+ICsJc2VsZWN0 IERSTV9LTVNfQ01BX0hFTFBFUgo+ID4gKwlzZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCj4gPiAr CWhlbHAKPiA+ICsJICBYaWxpbnggRFJNIEtNUyBkcml2ZXIuIENob29zZSB0aGlzIG9wdGlvbiBp ZiB5b3UgaGF2ZQo+ID4gKwkgIGEgWGlsaW54IFNvQ3Mgd2l0aCBoYXJkZW5lZCBkaXNwbGF5IHBp cGVsaW5lIG9yIHNvZnQKPiA+ICsJICBkaXNwbGF5IHBpcGVsaW5lIHVzaW5nIFhpbGlueCBJUHMg aW4gRlBHQS4gVGhpcyBtb2R1bGUKPiA+ICsJICBwcm92aWRlcyB0aGUga2VybmVsIG1vZGUgc2V0 dGluZyBmdW5jdGlvbmFsaXRpZXMKPiA+ICsJICBmb3IgWGlsaW54IGRpc3BsYXkgZHJpdmVycy4K PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS94bG54L01ha2VmaWxlCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXgg MDAwMDAwMC4uYzYwYTI4MQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3hsbngvTWFrZWZpbGUKPiA+IEBAIC0wLDAgKzEsMiBAQAo+ID4gK3hsbnhfZHJtLW9ianMg Kz0geGxueF9jcnRjLm8geGxueF9kcnYubyB4bG54X2ZiLm8geGxueF9nZW0ubwo+ID4gK29iai0k KENPTkZJR19EUk1fWExOWCkgKz0geGxueF9kcm0ubwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS94bG54L3hsbnhfY3J0Yy5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhf Y3J0Yy5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5kZTgzOTA1Cj4g PiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMu Ywo+ID4gQEAgLTAsMCArMSwxNzcgQEAKPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAo+ID4gKy8qCj4gPiArICogWGlsaW54IERSTSBjcnRjIGRyaXZlcgo+ID4gKyAqCj4g PiArICogIENvcHlyaWdodCAoQykgMjAxNyAtIDIwMTggWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiA+ICsg Kgo+ID4gKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAo+ID4gKyAqIG1heSBiZSBj b3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCj4gPiAr ICoKPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKPiA+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4gKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiA+ICsgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IAo+IFlvdSBjYW4gZHJv cCB0aG9zZSB0d28gcGFyYWdyYXBocyBhcyB5b3Ugbm93IGhhdmUgYW4gU1BEWCBsaWNlbnNlIGhl YWRlci4KPiAKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ICsK PiA+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJ4bG54X2Ny dGMuaCIKPiA+ICsjaW5jbHVkZSAieGxueF9kcnYuaCIKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIE92 ZXJ2aWV3Cj4gPiArICogLS0tLS0tLS0KPiA+ICsgKgo+ID4gKyAqIFRoZSBYaWxpbnggQ1JUQyBs YXllciBpcyB0byBlbmFibGUgdGhlIGN1c3RvbSBpbnRlcmZhY2UgdG8gQ1JUQyBkcml2ZXJzLgo+ ID4gKyAqIFRoZSBpbnRlcmZhY2UgaXMgdXNlZCBieSBYaWxpbnggRFJNIGRyaXZlciB3aGVyZSBp dCBuZWVkcyBDUlRDCj4gPiArICogZnVuY3Rpb25haWx0eS4gQ1JUQyBkcml2ZXJzIHNob3VsZCBh dHRhY2ggdGhlIGRlc2lyZWQgY2FsbGJhY2tzCj4gCj4gcy9mdW5jdGlvbmFpbHR5L2Z1bmN0aW9u YWxpdHkvCj4gCj4gPiArICogdG8gc3RydWN0IHhsbnhfY3J0YyBhbmQgcmVnaXN0ZXIgdGhlIHhs bnhfY3J0YyB3aXRoIGNvcnJlY3Nwb25kaW5nCj4gCj4gcy9jb3JyZWNzcG9uZGluZy9jb3JyZXNw b25kaW5nLwo+IAo+ID4gKyAqIGRybV9kZXZpY2UuIEl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIENS VEMgZHJpdmVycyByZWdpc3RlciBhbGwgY2FsbGJhY2tzCj4gPiArICogZXZlbiB0aG91Z2ggbWFu eSBvZiB0aGVtIGFyZSBvcHRpb25hbC4KPiA+ICsgKiBUaGUgQ1JUQyBoZWxwZXIgc2ltcGx5IHdh bGtzIHRocm91Z2ggdGhlIHJlZ2lzdGVyZWQgQ1JUQyBkZXZpY2UsCj4gPiArICogYW5kIGNhbGwg dGhlIGNhbGxiYWNrcy4KPiAKPiBzL2NhbGwvY2FsbHMvCj4gCj4gPiArICovCj4gPiArCj4gPiAr LyoqCj4gPiArICogc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgLSBYaWxpbnggQ1JUQyBoZWxwZXIK PiA+ICsgKiBAeGxueF9jcnRjczogbGlzdCBvZiBYaWxpbnggQ1JUQyBkZXZpY2VzCj4gPiArICog QGxvY2s6IGxvY2sgdG8gcHJvdGVjdCBAeGxueF9jcnRjcwo+ID4gKyAqIEBkcm06IGJhY2sgcG9p bnRlciB0byBEUk0gY29yZQo+ID4gKyAqLwo+ID4gK3N0cnVjdCB4bG54X2NydGNfaGVscGVyIHsK PiA+ICsJc3RydWN0IGxpc3RfaGVhZCB4bG54X2NydGNzOwo+ID4gKwlzdHJ1Y3QgbXV0ZXggbG9j azsgLyogbG9jayBmb3IgQHhsbnhfY3J0Y3MgKi8KPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRy bTsKPiA+ICt9Owo+ID4gKwo+ID4gKyNkZWZpbmUgWExOWF9DUlRDX01BWF9IRUlHSFRfV0lEVEgJ VUlOVF9NQVgKPiA+ICsKPiA+ICt1bnNpZ25lZCBpbnQgeGxueF9jcnRjX2hlbHBlcl9nZXRfYWxp Z24oc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcikKPiAKPiBXb3VsZG4ndCB4bG54X2Ny dGNfaGVscGVyX2dldF9hbGlnbm1lbnQoKSBiZSBjbGVhcmVyID8gJ2FsaWduJyBzb3VuZHMgbGlr ZSBhIAo+IHZlcmIuCj4gCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9jcnRjICpjcnRjOwo+ID4g Kwl1bnNpZ25lZCBpbnQgYWxpZ24gPSAxLCB0bXA7Cj4gPiArCj4gPiArCWxpc3RfZm9yX2VhY2hf ZW50cnkoY3J0YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkgewo+IAo+IFlvdSBkb2N1bWVu dCBhYm92ZSB0aGF0IHhsbnhfY3J0Y3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBsb2NrIG11dGV4LCBi dXQgeW91IAo+IGRvbid0IHRha2UgaXQgaGVyZS4gSXNuJ3QgdGhhdCBhbiBpc3N1ZSA/Cj4gCj4g PiArCQlpZiAoY3J0Yy0+Z2V0X2FsaWduKSB7Cj4gCj4gWW91IGNhbiBkZWNsYXJlIHRoZSB0bXAg dmFyaWFibGUgaGVyZS4gQW5kICd0bXAnIGlzIHVzdWFsbHkgZnJvd25lZCB1cG9uIGFzIGEgCj4g dmFyaWFibGUgbmFtZS4gT25lIG9wdGlvbiB3b3VsZCBiZSB0byB3cml0ZSBpdCBhbGwgaW4gb25l IGxpbmUKPiAKPiAJCQlhbGlnbiA9IEFMSUdOKGFsaWduLCBjcnRjLT5nZXRfYWxpZ24oY3J0Yykp Owo+IAo+ID4gKwkJCXRtcCA9IGNydGMtPmdldF9hbGlnbihjcnRjKTsKPiA+ICsJCQlhbGlnbiA9 IEFMSUdOKGFsaWduLCB0bXApOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBh bGlnbjsKPiA+ICt9Cj4gPiArCj4gPiArdTY0IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2RtYV9tYXNr KHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxu eF9jcnRjICpjcnRjOwo+ID4gKwl1NjQgbWFzayA9IERNQV9CSVRfTUFTSyhzaXplb2YoZG1hX2Fk ZHJfdCkgKiA4KSwgdG1wOwo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZo ZWxwZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiA+ICsJCWlmIChjcnRjLT5nZXRfZG1hX21hc2sp IHsKPiA+ICsJCQl0bXAgPSBjcnRjLT5nZXRfZG1hX21hc2soY3J0Yyk7Cj4gPiArCQkJbWFzayA9 IG1pbihtYXNrLCB0bXApOwo+IAo+IFNhbWUgY29tbWVudHMgaGVyZS4KPiAKPiBBcyB0aGUgRE1B IG1hc2sgaXMgYSBiaXRtYXNrIG9mIHRoZSBiaXRzIHRoYXQgY2FuIGJlIGRyaXZlbiBieSB0aGUg RE1BIGVuZ2luZSwgCj4gd291bGRuJ3QgYSBsb2dpYyBhbmQgYmUgbW9yZSBhcHByb3ByaWF0ZSB0 aGFuIGEgbWluKCkgPwo+IAo+IAkJCW1hc2sgJj0gY3J0Yy0+Z2V0X2RtYV9tYXNrKGNydGMpOwo+ IAo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBtYXNrOwo+ID4gK30KPiA+ICsK PiA+ICtpbnQgeGxueF9jcnRjX2hlbHBlcl9nZXRfbWF4X3dpZHRoKHN0cnVjdCB4bG54X2NydGNf aGVscGVyICpoZWxwZXIpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9jcnRjICpjcnRjOwo+ID4g Kwl1bnNpZ25lZCBpbnQgd2lkdGggPSBYTE5YX0NSVENfTUFYX0hFSUdIVF9XSURUSCwgdG1wOwo+ ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZoZWxwZXItPnhsbnhfY3J0Y3Ms IGxpc3QpIHsKPiA+ICsJCWlmIChjcnRjLT5nZXRfbWF4X3dpZHRoKSB7Cj4gPiArCQkJdG1wID0g Y3J0Yy0+Z2V0X21heF93aWR0aChjcnRjKTsKPiA+ICsJCQl3aWR0aCA9IG1pbih3aWR0aCwgdG1w KTsKPiAKPiBTYW1lIGNvbW1lbnRzIHJlZ2FyZGluZyB0aGUgdG1wIHZhcmlhYmxlIGFuZCB0aGUg bGlzdCBsb2NraW5nIGlzc3VlLgo+IAo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVy biB3aWR0aDsKPiA+ICt9Cj4gPiArCj4gPiAraW50IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X21heF9o ZWlnaHQoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcikKPiA+ICt7Cj4gPiArCXN0cnVj dCB4bG54X2NydGMgKmNydGM7Cj4gPiArCXVuc2lnbmVkIGludCBoZWlnaHQgPSBYTE5YX0NSVENf TUFYX0hFSUdIVF9XSURUSCwgdG1wOwo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNy dGMsICZoZWxwZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiA+ICsJCWlmIChjcnRjLT5nZXRfbWF4 X2hlaWdodCkgewo+ID4gKwkJCXRtcCA9IGNydGMtPmdldF9tYXhfaGVpZ2h0KGNydGMpOwo+ID4g KwkJCWhlaWdodCA9IG1pbihoZWlnaHQsIHRtcCk7Cj4gCj4gU2FtZSBjb21tZW50cyByZWdhcmRp bmcgdGhlIHRtcCB2YXJpYWJsZSBhbmQgdGhlIGxpc3QgbG9ja2luZyBpc3N1ZS4KPiAKPiA+ICsJ CX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gaGVpZ2h0Owo+ID4gK30KPiA+ICsKPiA+ICt1 aW50MzJfdCB4bG54X2NydGNfaGVscGVyX2dldF9mb3JtYXQoc3RydWN0IHhsbnhfY3J0Y19oZWxw ZXIgKmhlbHBlcikKPiAKPiBZb3UgY2FuIHVzZSB0aGUgdTMyIHR5cGUgd2l0aGluIHRoZSBrZXJu ZWwuCj4gCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9jcnRjICpjcnRjOwo+ID4gKwl1MzIgZm9y bWF0ID0gMCwgdG1wOwo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZoZWxw ZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiA+ICsJCWlmIChjcnRjLT5nZXRfZm9ybWF0KSB7Cj4g PiArCQkJdG1wID0gY3J0Yy0+Z2V0X2Zvcm1hdChjcnRjKTsKPiA+ICsJCQlpZiAoZm9ybWF0ICYm IGZvcm1hdCAhPSB0bXApCj4gPiArCQkJCXJldHVybiAwOwo+ID4gKwkJCWZvcm1hdCA9IHRtcDsK PiAKPiBTYW1lIGNvbW1lbnRzIHJlZ2FyZGluZyB0aGUgdG1wIHZhcmlhYmxlIGFuZCB0aGUgbGlz dCBsb2NraW5nIGlzc3VlLgo+IAo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBm b3JtYXQ7Cj4gCj4gRG9lcyB0aGlzIG1lYW4gdGhhdCB5b3VyIENSVENzIHN1cHBvcnQgYSBzaW5n bGUgZm9ybWF0IGVhY2ggb25seSA/Cj4gCj4gPiArfQo+ID4gKwo+ID4gK3N0cnVjdCB4bG54X2Ny dGNfaGVscGVyICp4bG54X2NydGNfaGVscGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkK PiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXI7Cj4gPiArCj4gPiAr CWhlbHBlciA9IGRldm1fa3phbGxvYyhkcm0tPmRldiwgc2l6ZW9mKCpoZWxwZXIpLCBHRlBfS0VS TkVMKTsKPiA+ICsJaWYgKCFoZWxwZXIpCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK PiAKPiBEbyB5b3UgbmVlZCB0byBhbGxvY2F0ZSB0aGUgeGxueF9jcnRjX2hlbHBlciBzdHJ1Y3R1 cmUgc2VwYXJhdGVseSBmcm9tIHRoZSAKPiB4bG54X2RybSBzdHJ1Y3R1cmUsIGNvdWxkbid0IHlv dSBlbWJlZCBpdCBpbnN0ZWFkIG9mIHN0b3JpbmcgYSBwb2ludGVyID8gWWVzLCAKPiB0aGF0IHdv dWxkIG1lYW4gZXhwb3NpbmcgdGhlIHN0cnVjdHVyZSBpbiBhIGhlYWRlciBmaWxlLCBidXQgSSBk b24ndCB0aGluayBpdCAKPiB3b3VsZCBiZSBtdWNoIG9mIGEgcHJvYmxlbS4KPiAKPiA+ICsJSU5J VF9MSVNUX0hFQUQoJmhlbHBlci0+eGxueF9jcnRjcyk7Cj4gPiArCW11dGV4X2luaXQoJmhlbHBl ci0+bG9jayk7Cj4gPiArCWhlbHBlci0+ZHJtID0gZHJtOwo+ID4gKwo+ID4gKwlyZXR1cm4gaGVs cGVyOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIHhsbnhfY3J0Y19oZWxwZXJfZmluaShzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLAo+ID4gKwkJCSAgIHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxw ZXIpCj4gPiArewo+ID4gKwlpZiAoV0FSTl9PTihoZWxwZXItPmRybSAhPSBkcm0pKQo+ID4gKwkJ cmV0dXJuOwo+IAo+IFVubGVzcyBJJ20gbWlzdGFrZW4gdGhlIGhlbHBlci0+ZHJtIGZpZWxkIGlz IG9ubHkgdXNlZCBoZXJlLCBhbmQgSSBkb24ndCBzZWUgCj4gaG93IHRoaXMgY29uZGl0aW9uIGNv dWxkIGJlIHRydWUuIEknZCBkcm9wIGJvdGggdGhlIGNvbmRpdGlvbiBhbmQgdGhlIGZpZWxkLgo+ IAo+ID4gKwlpZiAoV0FSTl9PTighbGlzdF9lbXB0eSgmaGVscGVyLT54bG54X2NydGNzKSkpCj4g PiArCQlyZXR1cm47Cj4gCj4gQ2FuIHRoaXMgaGFwcGVuID8KPiAKPiA+ICsJbXV0ZXhfZGVzdHJv eSgmaGVscGVyLT5sb2NrKTsKPiA+ICsJZGV2bV9rZnJlZShkcm0tPmRldiwgaGVscGVyKTsKPiAK PiBJZiB5b3UgZnJlZSB0aGUgbWVtb3J5IGV4cGxpY2l0bHkgeW91IHNob3VsZG4ndCB1c2UgZGV2 bV9remFsbG9jKCkgaW4gdGhlIAo+IGZpcnN0IHBsYWNlLCB5b3UgY2FuIHVzZSB0aGUgcGxhaW4g a3phbGxvYygpIGZ1bmN0aW9uIGluc3RlYWQuCj4gCj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgeGxu eF9jcnRjX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCB4bG54X2NydGMg KmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyID0geGxu eF9nZXRfY3J0Y19oZWxwZXIoZHJtKTsKPiA+ICsKPiA+ICsJbXV0ZXhfbG9jaygmaGVscGVyLT5s b2NrKTsKPiA+ICsJbGlzdF9hZGRfdGFpbCgmY3J0Yy0+bGlzdCwgJmhlbHBlci0+eGxueF9jcnRj cyk7Cj4gPiArCW11dGV4X3VubG9jaygmaGVscGVyLT5sb2NrKTsKPiA+ICt9Cj4gPiArRVhQT1JU X1NZTUJPTF9HUEwoeGxueF9jcnRjX3JlZ2lzdGVyKTsKPiA+ICsKPiA+ICt2b2lkIHhsbnhfY3J0 Y191bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCB4bG54X2NydGMgKmNy dGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyID0geGxueF9n ZXRfY3J0Y19oZWxwZXIoZHJtKTsKPiA+ICsKPiA+ICsJbXV0ZXhfbG9jaygmaGVscGVyLT5sb2Nr KTsKPiA+ICsJbGlzdF9kZWwoJmNydGMtPmxpc3QpOwo+ID4gKwltdXRleF91bmxvY2soJmhlbHBl ci0+bG9jayk7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhfY3J0Y191bnJlZ2lz dGVyKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuaAo+ ID4gYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuaCBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+ID4gaW5kZXggMDAwMDAwMC4uYmZmNWUzZAo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmgKPiA+IEBAIC0wLDAgKzEsNzAgQEAKPiA+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gKy8qCj4gPiArICogWGls aW54IERSTSBjcnRjIGhlYWRlcgo+ID4gKyAqCj4gPiArICogIENvcHlyaWdodCAoQykgMjAxNyAt IDIwMTggWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29u IDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgc29mdHdhcmUgaXMg bGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiA+ICsg KiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIGFuZAo+ID4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9k aWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCj4gPiArICoKPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ICsgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo+ID4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKPiA+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgo+IAo+IFlvdSBjYW4gZHJvcCB0aGVzZSB0d28gcGFyYWdyYXBocyBoZXJl IHRvby4KPiAKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIF9YTE5YX0NSVENfSF8KPiA+ICsj ZGVmaW5lIF9YTE5YX0NSVENfSF8KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBzdHJ1Y3QgeGxueF9j cnRjIC0gWGlsaW54IENSVEMgZGV2aWNlCj4gPiArICogQGNydGM6IERSTSBDUlRDIGRldmljZQo+ ID4gKyAqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIFhpbGlueCBDUlRDIGRldmljZSBsaXN0Cj4gPiAr ICogQGdldF9hbGlnbjogR2V0IHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2YgQ1JUQyBkZXZp Y2UKPiA+ICsgKiBAZ2V0X2RtYV9tYXNrOiBHZXQgdGhlIGRtYSBtYXNrIG9mIENSVEMgZGV2aWNl Cj4gPiArICogQGdldF9tYXhfd2lkdGg6IEdldCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgd2lkdGgK PiA+ICsgKiBAZ2V0X21heF9oZWlnaHQ6IEdldCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgaGVpZ2h0 Cj4gPiArICogQGdldF9mb3JtYXQ6IEdldCB0aGUgY3VycmVudCBmb3JtYXQgb2YgQ1JUQyBkZXZp Y2UKPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgeGxueF9jcnRjIHsKPiA+ICsJc3RydWN0IGRybV9jcnRj IGNydGM7Cj4gPiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiA+ICsJdW5zaWduZWQgaW50ICgq Z2V0X2FsaWduKShzdHJ1Y3QgeGxueF9jcnRjICpjcnRjKTsKPiA+ICsJdTY0ICgqZ2V0X2RtYV9t YXNrKShzdHJ1Y3QgeGxueF9jcnRjICpjcnRjKTsKPiA+ICsJaW50ICgqZ2V0X21heF93aWR0aCko c3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gPiArCWludCAoKmdldF9tYXhfaGVpZ2h0KShzdHJ1 Y3QgeGxueF9jcnRjICpjcnRjKTsKPiA+ICsJdWludDMyX3QgKCpnZXRfZm9ybWF0KShzdHJ1Y3Qg eGxueF9jcnRjICpjcnRjKTsKPiAKPiBQbGVhc2UgbW92ZSBhbGwgZnVuY3Rpb24gcG9pbnRlcnMg dG8gYSBzZXBhcmF0ZSBvcHMgc3RydWN0dXJlIHRoYXQgY2FuIGJlIAo+IGRlY2xhcmVkIGNvbnN0 LiBOb24tY29uc3QgZnVuY3Rpb24gcG9pbnRlcnMgbWFrZSBpdCBlYXNpZXIgdG8gZXhwbG9pdCB0 aGUgCj4ga2VybmVsIGlmIGEgYnVnIGVuZHMgdXAgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIG92ZXJy aWRlIHRoZSB2YWx1ZSBvZiB0aGUgCj4gcG9pbnRlcnMuIFRoZXkgYXJlIHRodXMgY29uc2lkZXJl ZCBhcyBhIHNlY3VyaXR5IGlzc3VlLgo+IAo+IHN0cnVjdCB4bG54X2NydGNfb3BzIHsKPiAJdTY0 ICgqZ2V0X2RtYV9tYXNrKShzdHJ1Y3QgeGxueF9jcnRjICpjcnRjKTsKPiAJaW50ICgqZ2V0X21h eF93aWR0aCkoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gCWludCAoKmdldF9tYXhfaGVpZ2h0 KShzdHJ1Y3QgeGxueF9jcnRjICpjcnRjKTsKPiAJdWludDMyX3QgKCpnZXRfZm9ybWF0KShzdHJ1 Y3QgeGxueF9jcnRjICpjcnRjKTsKPiB9Owo+IAo+IHN0cnVjdCB4bG54X2NydGMgewo+IAlzdHJ1 Y3QgZHJtX2NydGMgY3J0YzsKPiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+IAljb25zdCBzdHJ1 Y3QgeGxueF9jcnRjX29wcyAqb3BzOwo+IH07Cj4gCj4gPiArfTsKPiA+ICsKPiA+ICsvKgo+ID4g KyAqIEhlbHBlciBmdW5jdGlvbnM6IHVzZWQgd2l0aGluIFhsbnggRFJNCj4gPiArICovCj4gPiAr Cj4gPiArc3RydWN0IHhsbnhfY3J0Y19oZWxwZXI7Cj4gPiArCj4gPiArdW5zaWduZWQgaW50IHhs bnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIp Owo+ID4gK3U2NCB4bG54X2NydGNfaGVscGVyX2dldF9kbWFfbWFzayhzdHJ1Y3QgeGxueF9jcnRj X2hlbHBlciAqaGVscGVyKTsKPiA+ICtpbnQgeGxueF9jcnRjX2hlbHBlcl9nZXRfbWF4X3dpZHRo KHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ID4gK2ludCB4bG54X2NydGNfaGVs cGVyX2dldF9tYXhfaGVpZ2h0KHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ID4g K3VpbnQzMl90IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2Zvcm1hdChzdHJ1Y3QgeGxueF9jcnRjX2hl bHBlciAqaGVscGVyKTsKPiA+ICsKPiA+ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqeGxueF9j cnRjX2hlbHBlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gK3ZvaWQgeGxueF9j cnRjX2hlbHBlcl9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gPiArCQkJICAgc3RydWN0 IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcik7Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBDUlRDIHJl Z2lzdHJhdGlvbjogdXNlZCBieSBvdGhlciBzdWItZHJpdmVyIG1vZHVsZXMKPiA+ICsgKi8KPiA+ ICsKPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4bG54X2NydGMgKnRvX3hsbnhfY3J0YyhzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNydGMs IHN0cnVjdCB4bG54X2NydGMsIGNydGMpOwo+ID4gK30KPiAKPiBJJ2QgZGVjbGFyZSB0aGlzIGZ1 bmN0aW9uIHJpZ2h0IGFmdGVyIHRoZSB4bG54X2NydGMgc3RydWN0dXJlLCBJIGZpbmQgaXQgbW9y ZSAKPiBleHBsaWNpdCBpZiB0aGUgc3RydWN0dXJlIGFuZCB0aGUgY2FzdCBoZWxwZXIgYXJlIGdy b3VwZWQgdG9nZXRoZXIuCj4gCj4gPiArdm9pZCB4bG54X2NydGNfcmVnaXN0ZXIoc3RydWN0IGRy bV9kZXZpY2UgKmRybSwgc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gPiArdm9pZCB4bG54X2Ny dGNfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgeGxueF9jcnRjICpj cnRjKTsKPiA+ICsKPiA+ICsjZW5kaWYgLyogX1hMTlhfQ1JUQ19IXyAqLwo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmMKPiA+IGIvZHJpdmVycy9ncHUvZHJt L3hsbngveGxueF9kcnYuYyBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4u OGYwZTM1Nwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngv eGxueF9kcnYuYwo+ID4gQEAgLTAsMCArMSw1MDEgQEAKPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMAo+ID4gKy8qCj4gPiArICogWGlsaW54IERSTSBLTVMgRHJpdmVyCj4g PiArICoKPiA+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCBYaWxpbngsIEluYy4KPiA+ ICsgKgo+ID4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29t Pgo+ID4gKyAqCj4gPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCj4gPiArICog bWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJt cy4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiArICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4g KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gCj4gU2Ft ZSBjb21tZW50IGFzIGFib3ZlIGZvciB0aG9zZSB0d28gcGFyYWdyYXBocy4KPiAKPiA+ICsgKi8K PiA+ICsKPiA+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWMuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gPiArI2lu Y2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9o ZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+ID4gKyNp bmNsdWRlIDxkcm0vZHJtX29mLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVu dC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv ZG1hLWJ1Zi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8 bGludXgvb2ZfZ3JhcGguaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+Cj4gCj4gWW91IGRvbid0IHNlZW0g dG8gdXNlIHJlc2VydmF0aW9uIG9iamVjdHMsIGRvIHlvdSBuZWVkIHRoaXMgaGVhZGVyID8KPiAK PiA+ICsjaW5jbHVkZSAieGxueF9jcnRjLmgiCj4gPiArI2luY2x1ZGUgInhsbnhfZmIuaCIKPiA+ ICsjaW5jbHVkZSAieGxueF9nZW0uaCIKPiA+ICsKPiA+ICsjZGVmaW5lIERSSVZFUl9OQU1FCSJ4 bG54Igo+ID4gKyNkZWZpbmUgRFJJVkVSX0RFU0MJIlhpbGlueCBEUk0gS01TIERyaXZlciIKPiA+ ICsjZGVmaW5lIERSSVZFUl9EQVRFCSIyMDEzMDUwOSIKPiAKPiBBbmQgdGhpcyBzaG93cyBob3cg dXNlbGVzcyBhIGRhdGUgZmllbGQgaXMgaW4gc3VjaCBhIHVzZXJzcGFjZSBBUEkgOi0pCj4gCj4g PiArI2RlZmluZSBEUklWRVJfTUFKT1IJMQo+ID4gKyNkZWZpbmUgRFJJVkVSX01JTk9SCTAKPiA+ ICsKPiA+ICtzdGF0aWMgdWludCB4bG54X2ZiZGV2X3ZyZXMgPSAyOwo+IAo+IHMvdWludC91bnNp Z25lZCBpbnQvCj4gCj4gPiArbW9kdWxlX3BhcmFtX25hbWVkKGZiZGV2X3ZyZXMsIHhsbnhfZmJk ZXZfdnJlcywgdWludCwgMDQ0NCk7Cj4gPiArTU9EVUxFX1BBUk1fREVTQyhmYmRldl92cmVzLAo+ ID4gKwkJICJmYmRldiB2aXJ0dWFsIHJlc29sdXRpb24gbXVsdGlwbGllciBmb3IgZmIgKGRlZmF1 bHQ6IDIpIik7Cj4gCj4gVGhlcmUncyBhIHNpbWlsYXIgbWVjaGFuaXNtIGluIHRoZSBrZXJuZWwg YWxyZWFkeSBpbiB0aGUgZm9ybSBvZiAKPiBDT05GSUdfRFJNX0ZCREVWX09WRVJBTExPQyBhbmQg dGhlIGRybV9mYmRldl9vdmVyYWxsb2MgbW9kdWxlIHBhcmFtZXRlci4gCj4gQ291bGRuJ3QgeW91 IHVzZSB0aGF0IGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIGEgY3VzdG9tIG9uZSA/Cj4gCj4gPiAr LyoqCj4gPiArICogc3RydWN0IHhsbnhfZHJtIC0gWGlsaW54IERSTSBwcml2YXRlIGRhdGEKPiA+ ICsgKiBAZHJtOiBEUk0gY29yZQo+IAo+IHMvY29yZS9kZXZpY2UvCj4gCj4gPiArICogQGNydGM6 IFhpbGlueCBEUk0gQ1JUQyBoZWxwZXIKPiAKPiBJJ20gdGVtcHRlZCB0byByZW5hbWUgdGhpcyBm aWVsZCB0byBjcnRjcywgb3RoZXJ3aXNlIHdoZW4gcmVhZGluZyB0aGUgY29kZSBpdCAKPiBsb29r cyBsaWtlIGl0IHBvaW50cyB0byBhIHNpbmdsZSBDUlRDLgo+IAo+ID4gKyAqIEBmYjogRFJNIGZi IGhlbHBlcgo+ID4gKyAqIEBtYXN0ZXI6IGxvZ2ljYWwgbWFzdGVyIGRldmljZSBmb3IgcGlwZWxp bmUKPiA+ICsgKiBAc3VzcGVuZF9zdGF0ZTogYXRvbWljIHN0YXRlIGZvciBzdXNwZW5kIC8gcmVz dW1lCj4gPiArICovCj4gPiArc3RydWN0IHhsbnhfZHJtIHsKPiA+ICsJc3RydWN0IGRybV9kZXZp Y2UgKmRybTsKPiA+ICsJc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmNydGM7Cj4gPiArCXN0cnVj dCBkcm1fZmJfaGVscGVyICpmYjsKPiA+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFzdGVy Owo+IAo+IEknZCBzdG9yZSB0aGlzIGFzIGEgc3RydWN0IGRldmljZSBpbnN0ZWFkIGFzIHlvdSBu ZXZlciBtYWtlIHVzZSBvZiB0aGUgCj4gcGxhdGZvcm0gZGV2aWNlIGl0c2VsZiAodGhlIG9ubHkg bG9jYXRpb24gd2hlcmUgeW91IHVzZSB0aGlzIGZpZWxkIGlzIHRvIAo+IGFjY2VzcyBtYXN0ZXIt PmRldikuCj4gCj4gPiArCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdXNwZW5kX3N0YXRlOwo+ ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGxueF9nZXRfY3J0Y19oZWxwZXIgLSBSZXR1 cm4gdGhlIGNydGMgaGVscGVyIGluc3RhbmNlCj4gPiArICogQGRybTogRFJNIGRldmljZQo+ID4g KyAqCj4gPiArICogUmV0dXJuOiB0aGUgY3J0YyBoZWxwZXIgaW5zdGFuY2UKPiA+ICsgKi8KPiA+ ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqeGxueF9nZXRfY3J0Y19oZWxwZXIoc3RydWN0IGRy bV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBk cm0tPmRldl9wcml2YXRlOwo+ID4gKwo+ID4gKwlyZXR1cm4geGxueF9kcm0tPmNydGM7Cj4gPiAr fQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHhsbnhfZ2V0X2FsaWduIC0gUmV0dXJuIHRoZSBhbGln biByZXF1aXJlbWVudCB0aHJvdWdoIENSVEMgaGVscGVyCj4gPiArICogQGRybTogRFJNIGRldmlj ZQo+ID4gKyAqCj4gPiArICogUmV0dXJuOiB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50Cj4gPiAr ICovCj4gPiArdW5zaWduZWQgaW50IHhsbnhfZ2V0X2FsaWduKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0pCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZHJtLT5kZXZfcHJp dmF0ZTsKPiA+ICsKPiA+ICsJcmV0dXJuIHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHhsbnhf ZHJtLT5jcnRjKTsKPiA+ICt9Cj4gCj4gSSdtIHRlbXB0ZWQgdG8gZXhwb3NlIHRoZSB4bG54X2Ry bSBzdHJ1Y3R1cmUgaW4gYSBoZWFkZXIgYW5kIG1ha2UgdGhlc2UgdHdvIAo+IGhlbHBlciBmdW5j dGlvbnMgaW5saW5lLCBidXQgdGhhdCdzIHVwIHRvIHlvdS4KPiAKPiA+ICsvKioKPiA+ICsgKiB4 bG54X2dldF9mb3JtYXQgLSBSZXR1cm4gdGhlIGN1cnJlbnQgZm9ybWF0IG9mIENSVEMKPiA+ICsg KiBAZHJtOiBEUk0gZGV2aWNlCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IHRoZSBjdXJyZW50IENS VEMgZm9ybWF0Cj4gPiArICovCj4gPiArdWludDMyX3QgeGxueF9nZXRfZm9ybWF0KHN0cnVjdCBk cm1fZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0g ZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsKPiA+ICsJcmV0dXJuIHhsbnhfY3J0Y19oZWxwZXJfZ2V0 X2Zvcm1hdCh4bG54X2RybS0+Y3J0Yyk7Cj4gPiArfQo+IAo+IEFzIGZhciBhcyBJIGNhbiB0ZWxs IHRoaXMgZnVuY3Rpb24gaXMgbmV2ZXIgdXNlZC4KPiAKPiA+ICtzdGF0aWMgdm9pZCB4bG54X291 dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCXN0 cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwo+ID4gKwlp ZiAoeGxueF9kcm0tPmZiKQo+ID4gKwkJZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50KHhsbnhf ZHJtLT5mYik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVf Y29uZmlnX2Z1bmNzIHhsbnhfbW9kZV9jb25maWdfZnVuY3MgPSB7Cj4gPiArCS5mYl9jcmVhdGUJ CT0geGxueF9mYl9jcmVhdGUsCj4gPiArCS5vdXRwdXRfcG9sbF9jaGFuZ2VkCT0geGxueF9vdXRw dXRfcG9sbF9jaGFuZ2VkLAo+ID4gKwkuYXRvbWljX2NoZWNrCQk9IGRybV9hdG9taWNfaGVscGVy X2NoZWNrLAo+ID4gKwkuYXRvbWljX2NvbW1pdAkJPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQs Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB4bG54X21vZGVfY29uZmlnX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9k cm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwlzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqY3J0 YyA9IHhsbnhfZHJtLT5jcnRjOwo+ID4gKwo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0 aCA9IDA7Cj4gPiArCWRybS0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IDA7Cj4gPiArCWRybS0+ bW9kZV9jb25maWcubWF4X3dpZHRoID0geGxueF9jcnRjX2hlbHBlcl9nZXRfbWF4X3dpZHRoKGNy dGMpOwo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSB4bG54X2NydGNfaGVscGVy X2dldF9tYXhfaGVpZ2h0KGNydGMpOwo+IAo+IFRoaXMgaXMgaW50ZXJlc3RpbmcuIFlvdXIgdHdv IGhlbHBlciBmdW5jdGlvbnMgd2lsbCByZXR1cm4gdGhlIG1pbmltdW0gb2YgdGhlIAo+IHNpemVz IHN1cHBvcnRlZCBieSB0aGUgQ1JUQ3MsIGVuc3VyaW5nIHRoYXQgdXNlcnNwYWNlIHdpbGwgYmUg cHJlc2VudGVkIHdpdGggYSAKPiBEUk0gZGV2aWNlIHRoYXQgY2FuJ3QgZXhjZWVkIHRoZSBjYXBh YmlsaXRpZXMgb2YgdGhlIENSVENzLiBIb3dldmVyLCB0aGF0IHdpbGwgCj4gYWxzbyBhcnRpZmlj aWFsbHkgbGltaXQgdGhlIGRldmljZSwgYXMgZnJvbSBhIEtNUyBwb2ludCBvZiB2aWV3IHRoZXJl J3Mgbm8gCj4gaXNzdWUgd2l0aCBzZXR0aW5nIGRpZmZlcmVudCByZXNvbHV0aW9ucyBvbiBkaWZm ZXJlbnQgQ1JUQ3MuCj4gCj4gVGhlIG1vZGVfY29uZmlnIG1heF93aWR0aCBhbmQgbWF4X2hlaWdo dCB2YWx1ZXMgYXJlIHVzZWQgZm9yIGEgZmV3IGRpZmZlcmVudCAKPiBwdXJwb3Nlcy4gT25lIG9m IHRoZW0gaXMgdG8gcmVqZWN0IGZyYW1lYnVmZmVyIGNyZWF0aW9uIHdpdGggcmVzb2x1dGlvbnMg dGhhdCAKPiBhcmUgdG9vIGxhcmdlIGZvciB0aGUgaGFyZHdhcmUuIEFub3RoZXIgb25lIGlzIHRv IHJlamVjdCBtb2RlcyBsYXJnZXIgdGhhbiAKPiB3aGF0IHRoZSBoYXJkd2FyZSBzdXBwb3J0cy4g QSB0aGlyZCBvbmUgaXMgdG8gZXhwb3NlIHRob3NlIHZhbHVlcyB0byAKPiB1c2Vyc3BhY2UuCj4g Cj4gRGFuaWVsLCBob3cgc2hvdWxkIHRoaXMgYmUgaGFuZGxlZCB3aGVuIENSVENzIGRvbid0IGhh dmUgdGhlIHNhbWUgY2FwYWJpbGl0aWVzIAo+ID8KPiAKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IHZvaWQgeGxueF9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiAr CXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwo+ID4g KwlpZiAoeGxueF9kcm0tPmZiKQo+ID4gKwkJZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX2ZiZGV2X21v ZGVfdW5sb2NrZWQoeGxueF9kcm0tPmZiKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGxueF9mb3BzID0gewo+ID4gKwkub3duZXIJCT0gVEhJ U19NT0RVTEUsCj4gPiArCS5vcGVuCQk9IGRybV9vcGVuLAo+ID4gKwkucmVsZWFzZQk9IGRybV9y ZWxlYXNlLAo+ID4gKwkudW5sb2NrZWRfaW9jdGwJPSBkcm1faW9jdGwsCj4gPiArCS5tbWFwCQk9 IGRybV9nZW1fY21hX21tYXAsCj4gPiArCS5wb2xsCQk9IGRybV9wb2xsLAo+ID4gKwkucmVhZAkJ PSBkcm1fcmVhZCwKPiA+ICsjaWZkZWYgQ09ORklHX0NPTVBBVAo+ID4gKwkuY29tcGF0X2lvY3Rs CT0gZHJtX2NvbXBhdF9pb2N0bCwKPiA+ICsjZW5kaWYKPiA+ICsJLmxsc2VlawkJPSBub29wX2xs c2VlaywKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciB4bG54X2Ry bV9kcml2ZXIgPSB7Cj4gPiArCS5kcml2ZXJfZmVhdHVyZXMJCT0gRFJJVkVSX01PREVTRVQgfCBE UklWRVJfR0VNIHwKPiA+ICsJCQkJCSAgRFJJVkVSX0FUT01JQyB8IERSSVZFUl9QUklNRSwKPiA+ ICsJLmxhc3RjbG9zZQkJCT0geGxueF9sYXN0Y2xvc2UsCj4gPiArCj4gPiArCS5wcmltZV9oYW5k bGVfdG9fZmQJCT0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCj4gPiArCS5wcmltZV9mZF90 b19oYW5kbGUJCT0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCj4gPiArCS5nZW1fcHJpbWVf ZXhwb3J0CQk9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAo+ID4gKwkuZ2VtX3ByaW1lX2ltcG9ydAkJ PSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKPiA+ICsJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUJCT0g ZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAo+ID4gKwkuZ2VtX3ByaW1lX2ltcG9ydF9z Z190YWJsZQk9IGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKPiA+ICsJLmdlbV9w cmltZV92bWFwCQkJPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAo+ID4gKwkuZ2VtX3ByaW1lX3Z1 bm1hcAkJPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCj4gPiArCS5nZW1fcHJpbWVfbW1hcAkJ CT0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwKPiA+ICsJLmdlbV9mcmVlX29iamVjdAkJPSBkcm1f Z2VtX2NtYV9mcmVlX29iamVjdCwKPiA+ICsJLmdlbV92bV9vcHMJCQk9ICZkcm1fZ2VtX2NtYV92 bV9vcHMsCj4gPiArCS5kdW1iX2NyZWF0ZQkJCT0geGxueF9nZW1fY21hX2R1bWJfY3JlYXRlLAo+ ID4gKwkuZHVtYl9kZXN0cm95CQkJPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKPiA+ICsKPiA+ICsJ LmZvcHMJCQkJPSAmeGxueF9mb3BzLAo+ID4gKwo+ID4gKwkubmFtZQkJCQk9IERSSVZFUl9OQU1F LAo+ID4gKwkuZGVzYwkJCQk9IERSSVZFUl9ERVNDLAo+ID4gKwkuZGF0ZQkJCQk9IERSSVZFUl9E QVRFLAo+ID4gKwkubWFqb3IJCQkJPSBEUklWRVJfTUFKT1IsCj4gPiArCS5taW5vcgkJCQk9IERS SVZFUl9NSU5PUiwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgeGxueF9iaW5kKHN0cnVj dCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm07Cj4g PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gPiArCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0 X2luZm8gKmluZm87Cj4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hc3RlciA9IHRvX3Bs YXRmb3JtX2RldmljZShkZXYpOwo+IAo+IFRoZXJlJ3Mgbm8gbmVlZCB0byBjYXN0IHRvIGEgcGxh dGZvcm1fZGV2aWNlLCBzZWUgYmVsb3cuCj4gCj4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2LT5wYXJlbnQpOwo+IAo+IFRoZXJlJ3Mgbm8g bmVlZCBmb3IgYSBjYXN0IGVpdGhlciwganVzdCByZXBsYWNlICZwZGV2LT5kZXYgd2l0aCBkZXYt PnBhcmVudCAKPiB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbi4KPiAKPiA+ICsJaW50IHJldDsKPiA+ ICsJdTMyIGZvcm1hdDsKPiA+ICsKPiA+ICsJZHJtID0gZHJtX2Rldl9hbGxvYygmeGxueF9kcm1f ZHJpdmVyLCAmcGRldi0+ZGV2KTsKPiA+ICsJaWYgKElTX0VSUihkcm0pKQo+ID4gKwkJcmV0dXJu IFBUUl9FUlIoZHJtKTsKPiAKPiBZb3UgY2FuIGFsc28gZW1iZWQgc3RydWN0IGRybV9kZXZpY2Ug aW4gc3RydWN0IHhsbnhfZHJtIGluc3RlYWQgb2YgdXNpbmcgYSAKPiBwb2ludGVyLCBhbmQgcmVw bGFjZSBkcm1fZGV2X2FsbG9jKCkgd2l0aCBkcm1fZGV2X2luaXQoKS4KPiAKPiA+ICsJeGxueF9k cm0gPSBkZXZtX2t6YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqeGxueF9kcm0pLCBHRlBfS0VSTkVM KTsKPiA+ICsJaWYgKCF4bG54X2RybSkgewo+ID4gKwkJcmV0ID0gLUVOT01FTTsKPiA+ICsJCWdv dG8gZXJyX2RybTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0p Owo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJnhsbnhfbW9kZV9jb25maWdfZnVuY3M7 Cj4gPiArCj4gPiArCXJldCA9IGRybV92YmxhbmtfaW5pdChkcm0sIDEpOwo+ID4gKwlpZiAocmV0 KSB7Cj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB2Ymxh bmtcbiIpOwo+ID4gKwkJZ290byBlcnJfeGxueF9kcm07Cj4gPiArCX0KPiA+ICsKPiA+ICsJZHJt LT5pcnFfZW5hYmxlZCA9IDE7Cj4gPiArCWRybS0+ZGV2X3ByaXZhdGUgPSB4bG54X2RybTsKPiA+ ICsJeGxueF9kcm0tPmRybSA9IGRybTsKPiA+ICsJeGxueF9kcm0tPm1hc3RlciA9IG1hc3RlcjsK PiAKPiBZb3UgY2FuIHN0b3JlIGRldiBpbiB0aGUgbWFzdGVyIGZpZWxkLgo+IAo+ID4gKwlkcm1f a21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsKPiA+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEobWFz dGVyLCB4bG54X2RybSk7Cj4gCj4gVXNlIGRldmljZV9zZXRfZHJ2ZGF0YShkZXYpLgo+IAo+ID4g Kwo+ID4gKwl4bG54X2RybS0+Y3J0YyA9IHhsbnhfY3J0Y19oZWxwZXJfaW5pdChkcm0pOwo+ID4g KwlpZiAoSVNfRVJSKHhsbnhfZHJtLT5jcnRjKSkgewo+ID4gKwkJcmV0ID0gUFRSX0VSUih4bG54 X2RybS0+Y3J0Yyk7Cj4gPiArCQlnb3RvIGVycl94bG54X2RybTsKPiA+ICsJfQo+ID4gKwo+ID4g KwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwoJm1hc3Rlci0+ZGV2LCBkcm0pOwo+IAo+IFVzZSBk ZXYgZGlyZWN0bHkuCj4gCj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGVycl9jcnRjOwo+ID4g Kwo+ID4gKwl4bG54X21vZGVfY29uZmlnX2luaXQoZHJtKTsKPiA+ICsJZHJtX21vZGVfY29uZmln X3Jlc2V0KGRybSk7Cj4gPiArCWRtYV9zZXRfbWFzayhkcm0tPmRldiwgeGxueF9jcnRjX2hlbHBl cl9nZXRfZG1hX21hc2soeGxueF9kcm0tPmNydGMpKTsKPiA+ICsKPiA+ICsJZm9ybWF0ID0geGxu eF9jcnRjX2hlbHBlcl9nZXRfZm9ybWF0KHhsbnhfZHJtLT5jcnRjKTsKPiA+ICsJaW5mbyA9IGRy bV9mb3JtYXRfaW5mbyhmb3JtYXQpOwo+ID4gKwlpZiAoaW5mbyAmJiBpbmZvLT5kZXB0aCAmJiBp bmZvLT5jcHBbMF0pIHsKPiA+ICsJCXVuc2lnbmVkIGludCBhbGlnbjsKPiA+ICsKPiA+ICsJCWFs aWduID0geGxueF9jcnRjX2hlbHBlcl9nZXRfYWxpZ24oeGxueF9kcm0tPmNydGMpOwo+ID4gKwkJ eGxueF9kcm0tPmZiID0geGxueF9mYl9pbml0KGRybSwgaW5mby0+Y3BwWzBdICogOCwgMSwgYWxp Z24sCj4gPiArCQkJCQkgICAgeGxueF9mYmRldl92cmVzKTsKPiA+ICsJCWlmIChJU19FUlIoeGxu eF9kcm0tPmZiKSkgewo+ID4gKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKPiA+ICsJCQkJImZhaWxl ZCB0byBpbml0aWFsaXplIGRybSBmYlxuIik7Cj4gPiArCQkJeGxueF9kcm0tPmZiID0gTlVMTDsK PiA+ICsJCX0KPiA+ICsJfSBlbHNlIHsKPiA+ICsJCS8qIGZiZGV2IGVtdWxhdGlvbiBpcyBvcHRp b25hbCAqLwo+ID4gKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgImZiZGV2IGlzIG5vdCBpbml0aWFs aXplZFxuIik7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0s IDApOwo+ID4gKwlpZiAocmV0IDwgMCkKPiA+ICsJCWdvdG8gZXJyX2ZiOwo+ID4gKwo+ID4gKwly ZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnJfZmI6Cj4gPiArCWlmICh4bG54X2RybS0+ZmIpCj4gPiAr CQl4bG54X2ZiX2ZpbmkoeGxueF9kcm0tPmZiKTsKPiA+ICsJY29tcG9uZW50X3VuYmluZF9hbGwo ZHJtLT5kZXYsIGRybSk7Cj4gPiArZXJyX2NydGM6Cj4gPiArCXhsbnhfY3J0Y19oZWxwZXJfZmlu aShkcm0sIHhsbnhfZHJtLT5jcnRjKTsKPiA+ICtlcnJfeGxueF9kcm06Cj4gPiArCWRybV9tb2Rl X2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gPiArZXJyX2RybToKPiA+ICsJZHJtX2Rldl91bnJlZihk cm0pOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB4bG54 X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9kcm0g KnhsbnhfZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNl ICpkcm0gPSB4bG54X2RybS0+ZHJtOwo+ID4gKwo+ID4gKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJt KTsKPiA+ICsJaWYgKHhsbnhfZHJtLT5mYikKPiA+ICsJCXhsbnhfZmJfZmluaSh4bG54X2RybS0+ ZmIpOwo+ID4gKwljb21wb25lbnRfdW5iaW5kX2FsbCgmeGxueF9kcm0tPm1hc3Rlci0+ZGV2LCBk cm0pOwo+ID4gKwl4bG54X2NydGNfaGVscGVyX2ZpbmkoZHJtLCB4bG54X2RybS0+Y3J0Yyk7Cj4g PiArCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkcm0pOwo+ID4gKwlkcm1fbW9kZV9jb25maWdf Y2xlYW51cChkcm0pOwo+ID4gKwlkcm1fZGV2X3VucmVmKGRybSk7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgeGxueF9tYXN0ZXJfb3Bz ID0gewo+ID4gKwkuYmluZAk9IHhsbnhfYmluZCwKPiA+ICsJLnVuYmluZAk9IHhsbnhfdW5iaW5k LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCB4bG54X29mX2NvbXBvbmVudF9wcm9iZShz dHJ1Y3QgZGV2aWNlICptYXN0ZXJfZGV2LAo+ID4gKwkJCQkgICBpbnQgKCpjb21wYXJlX29mKShz dHJ1Y3QgZGV2aWNlICosIHZvaWQgKiksCj4gPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBjb21wb25l bnRfbWFzdGVyX29wcyAqbV9vcHMpCj4gCj4gQXMgdGhlcmUncyBhIHNpbmdsZSB1c2VyIG9mIHRo aXMgZnVuY3Rpb24sIGRvIHlvdSBuZWVkIHRvIHBhc3MgY29tcGFyZV9vZiBhcyBhIAo+IHBhcmFt ZXRlciA/IENvdWxkbid0IHlvdSBtb3ZlIHhsbnhfY29tcGFyZV9vZigpIGFib3ZlIGFuZCB1c2Ug aXQgZGlyZWN0bHkgPwo+IAo+ID4gK3sKPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gbWFzdGVy X2Rldi0+cGFyZW50Owo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwLCAqcG9ydCwgKnJlbW90 ZSwgKnBhcmVudDsKPiA+ICsJc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2ggPSBOVUxMOwo+ ID4gKwlpbnQgaTsKPiAKPiBpIGlzIG5ldmVyIG5lZ2F0aXZlLCB5b3UgY2FuIG1ha2UgaXQgdW5z aWduZWQuCj4gCj4gPiArCWlmICghZGV2LT5vZl9ub2RlKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gPiArCj4gPiArCWNvbXBvbmVudF9tYXRjaF9hZGQobWFzdGVyX2RldiwgJm1hdGNoLCBjb21w YXJlX29mLCBkZXYtPm9mX25vZGUpOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyA7IGkrKykgewo+ ID4gKwkJcG9ydCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAicG9ydHMiLCBpKTsK PiAKPiBJIGRvbid0IHNlZSB0aGUgcG9ydHMgcHJvcGVydHkgZG9jdW1lbnRlZCBpbiB0aGUgRFQg YmluZGluZ3MgaW4gcGF0Y2ggMi81LiBJIAo+IGFzc3VtZSB0aGF0J3MgYmVjYXVzZSBpdCBoYXMg YmVlbiByZW1vdmVkIGluIHY0IGFzIHN0YXRlZCBpbiB0aGUgY2hhbmdlbG9nIDotKSAKPiBZb3Ug c2hvdWxkbid0IG1ha2UgdXNlIG9mIGl0IHRoZW4uIEkndmUgc2tpcHBlZCByZXZpZXdpbmcgdGhl IGxvZ2ljIGZvciB0aGUgCj4gcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGFzIEkgbmVlZCB0byBzZWUg dGhlIGNvcnJlc3BvbmRpbmcgRFQgYmluZGluZ3MuCj4gCgpHb29kIGNhdGNoISBJIG5lZWRlZCBz b21lIGRpc2N1c3Npb24gb24gdGhpcy4gOi0pIFRoaXMgbG9naWMgaXMgYWN0dWFsbHkKaW50ZW5k ZWQgZm9yIGZ1dHVyZSBleHRlbnRpb24gYW5kIHVzZWQgZm9yIHBpcGVsaW5lcyB3aXRoIG11bHRp cGxlIGNvbXBvbmVudHMKKGV4LCB0aGlzIGRyaXZlciB3aXRoIHNvZnQgSVBzLCBvciBtdWx0aXBs ZSBzb2Z0IElQcyksIHdoZXJlIHRoZSBkdCBkZXNjcmliZXMKaXRzIG93biB0b3BvbG9neSBvZiB0 aGUgcGlwZWxpbmUuIFNvbWUgcGFydCBvZiB0aGlzIGxvZ2ljIGlzIGFjdGl2ZWx5IHVzZWQgd2l0 aApkb3duc3RyZWFtIGRyaXZlcnMsIGJ1dCBJIGNhbiBzaW1wbGlmeSB0aGlzIGxvZ2ljIChyZW1v dmUgbG9naWMgbm90IG5lZWRlZCBieQp0aGlzIHNldCkgYW5kIHJldmVydCBiYWNrIHdoZW4gaXQn cyBhY3R1YWxseSBuZWVkZWQuCgpUaGVuIGFzIHlvdSBjb21tZW50ZWQsIHRoZSBkdCBiaW5kaW5n IGZvciB0aGlzIG1vZHVsZSBpcyBnb25lLCBzbyB0aGUgYmVoYXZpb3IKb2YgdGhpcyBsb2dpYyBp cyBkb2N1bWVudGVkIGluIHRoZSBmdW5jdGlvbiBkZXNjcmlwdGlvbiwgdHJlYXRpbmcgdGhlIGZ1 bmN0aW9uCmFzIGEgaGVscGVyLiBTbyBteSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjb3JyZXNw b25kaW5nIGRyaXZlciB0aGF0IGNhbGxzCnRoaXMgZnVuY3Rpb24gc2hvdWxkIGRvY3VtZW50IHRo ZSBkdCBiaW5kaW5nIGluIGl0cyBvd24uIEFuZCB0aGUgRFAgZHJpdmVyCmluIHRoaXMgc2V0IGRv ZXNuJ3Qgc3VwcG9ydCBzdWNoIGJpbmRpbmcgd2l0aG91dCBhbnkgc29mdCBJUCBkcml2ZXJzLCB0 aHVzCml0IGRvZXNuJ3QgZG9jdW1lbnQgaXQgYXMgb2Ygbm93LgoKPiA+ICsJCWlmICghcG9ydCkK PiA+ICsJCQlicmVhazsKPiA+ICsKPiA+ICsJCXBhcmVudCA9IHBvcnQtPnBhcmVudDsKPiA+ICsJ CWlmICghb2Zfbm9kZV9jbXAocGFyZW50LT5uYW1lLCAicG9ydHMiKSkKPiA+ICsJCQlwYXJlbnQg PSBwYXJlbnQtPnBhcmVudDsKPiA+ICsJCXBhcmVudCA9IG9mX25vZGVfZ2V0KHBhcmVudCk7Cj4g Cj4gSSd2ZSByZWNlbnRseSBmb3VuZCBvdXQgdGhhdCBkZXJlZmVyZW5jaW5nIGEgZGV2aWNlX25v ZGUgcGFyZW50IGRpcmVjdGx5IGlzIAo+IHByb25lIHRvIHJhY2UgY29uZGl0aW9ucy4gWW91IHNo b3VsZCB1c2Ugb2ZfZ2V0X3BhcmVudCgpIGluc3RlYWQgKG9yIAo+IG9mX2dldF9uZXh0X3BhcmVu dCgpIGFzIGFwcHJvcHJpYXRlIHRvIG1ha2UgZGV2aWNlX25vZGUgcmVmZXJlbmNlIGhhbmRsaW5n IAo+IGVhc2llcikuCj4gCj4gPiArCj4gPiArCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUo cGFyZW50KSkgewo+ID4gKwkJCW9mX25vZGVfcHV0KHBhcmVudCk7Cj4gPiArCQkJb2Zfbm9kZV9w dXQocG9ydCk7Cj4gPiArCQkJY29udGludWU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQljb21wb25l bnRfbWF0Y2hfYWRkKG1hc3Rlcl9kZXYsICZtYXRjaCwgY29tcGFyZV9vZiwgcGFyZW50KTsKPiA+ ICsJCW9mX25vZGVfcHV0KHBhcmVudCk7Cj4gPiArCQlvZl9ub2RlX3B1dChwb3J0KTsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlwYXJlbnQgPSBkZXYtPm9mX25vZGU7Cj4gPiArCWZvciAoaSA9IDA7IDsg aSsrKSB7Cj4gPiArCQlwYXJlbnQgPSBvZl9ub2RlX2dldChwYXJlbnQpOwo+ID4gKwkJaWYgKCFv Zl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBhcmVudCkpIHsKPiA+ICsJCQlvZl9ub2RlX3B1dChwYXJl bnQpOwo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJZm9yX2VhY2hfZW5k cG9pbnRfb2Zfbm9kZShwYXJlbnQsIGVwKSB7Cj4gPiArCQkJcmVtb3RlID0gb2ZfZ3JhcGhfZ2V0 X3JlbW90ZV9wb3J0X3BhcmVudChlcCk7Cj4gPiArCQkJaWYgKCFyZW1vdGUgfHwgIW9mX2Rldmlj ZV9pc19hdmFpbGFibGUocmVtb3RlKSB8fAo+ID4gKwkJCSAgICByZW1vdGUgPT0gZGV2LT5vZl9u b2RlKSB7Cj4gPiArCQkJCW9mX25vZGVfcHV0KHJlbW90ZSk7Cj4gPiArCQkJCWNvbnRpbnVlOwo+ ID4gKwkJCX0gZWxzZSBpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocmVtb3RlLT5wYXJlbnQp KSB7Cj4gPiArCQkJCWRldl93YXJuKGRldiwgInBhcmVudCBkZXYgb2YgJXMgdW5hdmFpbGFibGVc biIsCj4gPiArCQkJCQkgcmVtb3RlLT5mdWxsX25hbWUpOwo+ID4gKwkJCQlvZl9ub2RlX3B1dChy ZW1vdGUpOwo+ID4gKwkJCQljb250aW51ZTsKPiA+ICsJCQl9Cj4gPiArCQkJY29tcG9uZW50X21h dGNoX2FkZChtYXN0ZXJfZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2YsCj4gPiArCQkJCQkgICAgcmVt b3RlKTsKPiA+ICsJCQlvZl9ub2RlX3B1dChyZW1vdGUpOwo+ID4gKwkJfQo+ID4gKwkJb2Zfbm9k ZV9wdXQocGFyZW50KTsKPiA+ICsKPiA+ICsJCXBvcnQgPSBvZl9wYXJzZV9waGFuZGxlKGRldi0+ b2Zfbm9kZSwgInBvcnRzIiwgaSk7Cj4gPiArCQlpZiAoIXBvcnQpCj4gPiArCQkJYnJlYWs7Cj4g PiArCj4gPiArCQlwYXJlbnQgPSBwb3J0LT5wYXJlbnQ7Cj4gPiArCQlpZiAoIW9mX25vZGVfY21w KHBhcmVudC0+bmFtZSwgInBvcnRzIikpCj4gPiArCQkJcGFyZW50ID0gcGFyZW50LT5wYXJlbnQ7 Cj4gPiArCQlvZl9ub2RlX3B1dChwb3J0KTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gY29t cG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChtYXN0ZXJfZGV2LCBtX29wcywgbWF0Y2gpOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHhsbnhfY29tcGFyZV9vZihzdHJ1Y3QgZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEpCj4gPiArewo+ID4gKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09IGRh dGE7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgeGxueF9wbGF0Zm9ybV9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsJcmV0dXJuIHhsbnhfb2ZfY29t cG9uZW50X3Byb2JlKCZwZGV2LT5kZXYsIHhsbnhfY29tcGFyZV9vZiwKPiA+ICsJCQkJICAgICAg ICZ4bG54X21hc3Rlcl9vcHMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHhsbnhfcGxh dGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gKwlj b21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmeGxueF9tYXN0ZXJfb3BzKTsKPiA+ICsJ cmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHhsbnhfcGxhdGZvcm1fc2h1 dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCB4 bG54X2RybSAqeGxueF9kcm0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiA+ICsKPiA+ ICsJZHJtX3B1dF9kZXYoeGxueF9kcm0tPmRybSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBp bnQgX19tYXliZV91bnVzZWQgeGxueF9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ ICt7Cj4gPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHhsbnhfZHJtLT5kcm07Cj4gPiArCj4g PiArCWRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShkcm0pOwo+ID4gKwo+ID4gKwl4bG54X2Ry bS0+c3VzcGVuZF9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3N1c3BlbmQoZHJtKTsKPiA+ICsJ aWYgKElTX0VSUih4bG54X2RybS0+c3VzcGVuZF9zdGF0ZSkpIHsKPiA+ICsJCWRybV9rbXNfaGVs cGVyX3BvbGxfZW5hYmxlKGRybSk7Cj4gPiArCQlyZXR1cm4gUFRSX0VSUih4bG54X2RybS0+c3Vz cGVuZF9zdGF0ZSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgeGxueF9wbV9yZXN1bWUoc3RydWN0IGRldmlj ZSAqZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0geGxueF9kcm0tPmRy bTsKPiA+ICsKPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfcmVzdW1lKGRybSwgeGxueF9kcm0tPnN1 c3BlbmRfc3RhdGUpOwo+ID4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0pOwo+ID4g Kwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk ZXZfcG1fb3BzIHhsbnhfcG1fb3BzID0gewo+ID4gKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyh4 bG54X3BtX3N1c3BlbmQsIHhsbnhfcG1fcmVzdW1lKQo+ID4gK307Cj4gPiArCj4gPiArc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGxueF9kcml2ZXIgPSB7Cj4gPiArCS5wcm9iZQkJCT0g eGxueF9wbGF0Zm9ybV9wcm9iZSwKPiA+ICsJLnJlbW92ZQkJCT0geGxueF9wbGF0Zm9ybV9yZW1v dmUsCj4gPiArCS5zaHV0ZG93bgkJPSB4bG54X3BsYXRmb3JtX3NodXRkb3duLAo+ID4gKwkuZHJp dmVyCQkJPSB7Cj4gPiArCQkubmFtZQkJPSAieGxueC1kcm0iLAo+ID4gKwkJLnBtCQk9ICZ4bG54 X3BtX29wcywKPiA+ICsJfSwKPiA+ICt9Owo+ID4gKwo+ID4gKy8qIGJpdG1hcCBmb3IgbWFzdGVy IGlkICovCj4gPiArc3RhdGljIHUzMiB4bG54X21hc3Rlcl9pZHMgPSBHRU5NQVNLKDMxLCAwKTsK PiA+ICsKPiA+ICsvKioKPiA+ICsgKiB4aWxpbnhfZHJtX3BpcGVsaW5lX2luaXQgLSBJbml0aWFs aXplIHRoZSBkcm0gcGlwZWxpbmUgZm9yIHRoZSBkZXZpY2UKPiA+ICsgKiBAcGRldjogVGhlIHBs YXRmb3JtIGRldmljZSB0byBpbml0aWFsaXplIHRoZSBkcm0gcGlwZWxpbmUgZGV2aWNlCj4gPiAr ICoKPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBkcm0gcGlwZWxpbmUgZGV2 aWNlLCBzdHJ1Y3QgZHJtX2RldmljZSwKPiA+ICsgKiBvbiBAcGRldiBieSBjcmVhdGluZyBhIGxv Z2ljYWwgbWFzdGVyIHBsYXRmb3JtIGRldmljZS4gVGhlIGxvZ2ljYWwKPiA+IHBsYXRmb3JtCj4g PiArICogZGV2aWNlIGFjdHMgYXMgYSBtYXN0ZXIgZGV2aWNlIHRvIGJpbmQgc2xhdmUgZGV2aWNl cyBhbmQgcmVwcmVzZW50cwo+ID4gKyAqIHRoZSBlbnRpcmUgcGlwZWxpbmUuCj4gCj4gSSdtIHNv cnJ5IHRvIGFzayB0aGlzIHF1ZXN0aW9uIHNvIGxhdGUsIGJ1dCBjb3VsZG4ndCB5b3UgZG8gd2l0 aG91dCB0aGF0IAo+IHBsYXRmb3JtIGRldmljZSA/IEkgZG9uJ3QgcmVhbGx5IHNlZSB3aGF0IGl0 IGJyaW5ncyB5b3UuCgpJdCBpcyBmaW5lIHdpdGhvdXQgdGhpcyBpbiBjdXJyZW50IHNldCB3aGVy ZSB0aGVyZSBpcyBvbmx5IG9uZSBjb21wb25lbnQsIGJ1dAppdCBkb2Vzbid0IHNjYWxlIHdpdGgg Y29tcGxleCBwaXBlbGluZXMgd2hlcmUgc29mdCBhbmQgaGFyZGVuZWQgSVAgZHJpdmVycyBjYW4K YmUgbWl4ZWQuIFRoZXJlIGNhbiBiZSBjYXNlcyB3aGVyZSBtdWx0aXBsZSBtYXN0ZXIgZGV2aWNl cyBleGlzdCBpbiBhIHNpbmdsZQpwaXBlbGluZSwgYW5kIHRoaXMgaXMgaW50ZW5kZWQgdG8gdW5p Zml5IGFuZCBzaW1wbGlmeSB0aGUgbW9kZWwgYnkgY3JlYXRpbmcKYSBsb2dpY2FsIG1hc3RlciBh bmQgYWxsb3dpbmcgYWxsIGRyaXZlcnMgdG8gYmUgYm91bmQgYXMgcmVndWxhciBjb21wb25lbnRz LgoKVGhhbmtzCi1oeXVuCgo+IAo+ID4gKyAqIFRoZSBsb2dpY2FsIG1hc3RlciB1c2VzIHRoZSBw b3J0IGJpbmRpbmdzIG9mIHRoZSBjYWxsaW5nIGRldmljZSB0bwo+ID4gKyAqIGZpZ3VyZSBvdXQg dGhlIHBpcGVsaW5lIHRvcG9sb2d5Lgo+ID4gKyAqCj4gPiArICogUmV0dXJuOiB0aGUgbG9naWNh bCBtYXN0ZXIgcGxhdGZvcm0gZGV2aWNlIGlmIHRoZSBkcm0gZGV2aWNlIGlzCj4gPiBpbml0aWFs aXplZAo+ID4gKyAqIG9uIEBwZGV2LiBFcnJvciBjb2RlIG90aGVyd2lzZS4KPiA+ICsgKi8KPiA+ ICtzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp4bG54X2RybV9waXBlbGluZV9pbml0KHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UKPiA+ICpwZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqbWFzdGVyOwo+ID4gKwlpbnQgaWQsIHJldDsKPiA+ICsKPiAKPiBJcyB0aGVyZSBhbnkg cmlzayBvZiBhIHJhY2UgYmV0d2VlbiBjb25jdXJyZW50IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24s IG9yIHRvIAo+IHRoaXMgZnVuY3Rpb24gYW5kIHhsbnhfZHJtX3BpcGVsaW5lX2V4aXQoKSA/Cj4g Cj4gPiArCWlkID0gZmZzKHhsbnhfbWFzdGVyX2lkcyk7Cj4gPiArCWlmICghaWQpCj4gPiArCQly ZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKPiA+ICsKPiA+ICsJbWFzdGVyID0gcGxhdGZvcm1fZGV2 aWNlX2FsbG9jKCJ4bG54LWRybSIsIGlkIC0gMSk7Cj4gPiArCWlmICghbWFzdGVyKQo+ID4gKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPiArCj4gPiArCW1hc3Rlci0+ZGV2LnBhcmVudCA9 ICZwZGV2LT5kZXY7Cj4gPiArCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQobWFzdGVyKTsKPiA+ ICsJaWYgKHJldCkKPiA+ICsJCWdvdG8gZXJyX291dDsKPiAKPiBBcyB0aGlzIGlzIHRoZSBvbmx5 IGxvY2F0aW9uIHdoZXJlIHlvdSBqdW1wIHRvIHRoZSBlcnJvciBwYXRoIEkgd291bGQgaW5saW5l IAo+IGl0Lgo+IAo+ID4gKwo+ID4gKwlXQVJOX09OKG1hc3Rlci0+aWQgIT0gaWQgLSAxKTsKPiA+ ICsJeGxueF9tYXN0ZXJfaWRzICY9IH5CSVQobWFzdGVyLT5pZCk7Cj4gPiArCXJldHVybiBtYXN0 ZXI7Cj4gPiArCj4gPiArZXJyX291dDoKPiA+ICsJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIo bWFzdGVyKTsKPiA+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZ TUJPTF9HUEwoeGxueF9kcm1fcGlwZWxpbmVfaW5pdCk7Cj4gPiArCj4gPiArLyoqCj4gPiArICog eGlsaW54X2RybV9waXBlbGluZV9leGl0IC0gUmVsZWFzZSB0aGUgZHJtIHBpcGVsaW5lIGZvciB0 aGUgZGV2aWNlCj4gPiArICogQG1hc3RlcjogVGhlIG1hc3RlciBwaXBlbGluZSBkZXZpY2UgdG8g cmVsZWFzZQo+ID4gKyAqCj4gPiArICogUmVsZWFzZSB0aGUgbG9naWNhbCBwaXBlbGluZSBkZXZp Y2UgcmV0dXJuZWQgYnkKPiA+IHhsbnhfZHJtX3BpcGVsaW5lX2luaXQoKS4KPiA+ICsgKi8KPiA+ ICt2b2lkIHhsbnhfZHJtX3BpcGVsaW5lX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFz dGVyKQo+ID4gK3sKPiA+ICsJeGxueF9tYXN0ZXJfaWRzIHw9IEJJVChtYXN0ZXItPmlkKTsKPiA+ ICsJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWFzdGVyKTsKPiA+ICt9Cj4gPiArRVhQT1JU X1NZTUJPTF9HUEwoeGxueF9kcm1fcGlwZWxpbmVfZXhpdCk7Cj4gPiArCj4gPiArc3RhdGljIGlu dCBfX2luaXQgeGxueF9kcm1fZHJ2X2luaXQodm9pZCkKPiA+ICt7Cj4gPiArCXBsYXRmb3JtX2Ry aXZlcl9yZWdpc3RlcigmeGxueF9kcml2ZXIpOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQgX19leGl0IHhsbnhfZHJtX2Rydl9leGl0KHZvaWQpCj4gPiArewo+ ID4gKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmeGxueF9kcml2ZXIpOwo+ID4gK30KPiA+ ICsKPiA+ICttb2R1bGVfaW5pdCh4bG54X2RybV9kcnZfaW5pdCk7Cj4gPiArbW9kdWxlX2V4aXQo eGxueF9kcm1fZHJ2X2V4aXQpOwo+IAo+IFlvdSBjYW4gdXNlIHRoZSBtb2R1bGVfcGxhdGZvcm1f ZHJpdmVyKCkgbWFjcm8uCj4gCj4gPiArCj4gPiArTU9EVUxFX0FVVEhPUigiWGlsaW54LCBJbmMu Iik7Cj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggRFJNIEtNUyBEcml2ZXIiKTsKPiA+ ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3hsbngveGxueF9kcnYuaAo+ID4gYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5o IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi4wZjY1OTVmCj4gPiAtLS0g L2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5oCj4gPiBA QCAtMCwwICsxLDMzIEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiA+ICsvKgo+ID4gKyAqIFhpbGlueCBEUk0gS01TIEhlYWRlciBmb3IgWGlsaW54Cj4gPiArICoK PiA+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCBYaWxpbngsIEluYy4KPiA+ICsgKgo+ ID4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW5rQHhpbGlueC5jb20+Cj4gPiArICoK PiA+ICsgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljCj4gPiArICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKPiA+ICsgKiBtYXkgYmUgY29w aWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgo+ID4gKyAq Cj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCj4gPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gPiArICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAKPiBTYW1lIGNvbW1lbnQg YXMgYmVmb3JlLgo+IAo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5kZWYgX1hMTlhfRFJWX0hfCj4g PiArI2RlZmluZSBfWExOWF9EUlZfSF8KPiA+ICsKPiA+ICtzdHJ1Y3QgZHJtX2RldmljZTsKPiA+ ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlcjsKPiAKPiBBcyBhIGdlbmVyYWwgcnVsZSBwbGVhc2Ug ZWl0aGVyIGluY2x1ZGUgdGhlIGhlYWRlciBmaWxlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSAKPiBz dHJ1Y3R1cmVzIHlvdSB1c2UsIG9yIGFkZCBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zIHdoZW4gdGhl IGRlZmluaXRpb24gaXNuJ3QgCj4gbmVlZGVkIChhcyBpbiB0aGlzIGNhc2UpLiBJdCBoZWxwcyBh dm9pZGluZyBjb21waWxhdGlvbiBlcnJvcnMgZHVlIHRvICNpbmNsdWRlIAo+IG9yZGVyaW5nIG9y IG5lc3RlZCAjaW5jbHVkZSBtb2RpZmljYXRpb25zLiBZb3UncmUgZG9pbmcgc28gZm9yIHR3byBz dHJ1Y3R1cmVzIAo+IGFscmVhZHkgYnV0IG5vdCBmb3IgYWxsIG9mIHRoZW0uIFRoaXMgY29tbWVu dCBhcHBsaWVzIHRvIGFsbCBoZWFkZXIgZmlsZXMgaW4gCj4gdGhpcyBwYXRjaCBzZXJpZXMuCj4g Cj4gPiArc3RydWN0IHBsYXRmb3JtX2RldmljZSAqeGxueF9kcm1fcGlwZWxpbmVfaW5pdChzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlCj4gPiAqcGFyZW50KTsKPiA+ICt2b2lkIHhsbnhfZHJtX3BpcGVs aW5lX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGlwZWxpbmUpOwo+ID4gKwo+ID4gK3Vp bnQzMl90IHhsbnhfZ2V0X2Zvcm1hdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPiA+ICt1bnNp Z25lZCBpbnQgeGxueF9nZXRfYWxpZ24oc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gPiArc3Ry dWN0IHhsbnhfY3J0Y19oZWxwZXIgKnhsbnhfZ2V0X2NydGNfaGVscGVyKHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0pOwo+ID4gK3N0cnVjdCB4bG54X2JyaWRnZV9oZWxwZXIgKnhsbnhfZ2V0X2JyaWRn ZV9oZWxwZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gCj4gVGhpcyBmdW5jdGlvbiBpc24n dCBkZWZpbmVkIGFueXdoZXJlLgo+IAo+ID4gKwo+ID4gKyNlbmRpZiAvKiBfWExOWF9EUlZfSF8g Ki8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMgYi9kcml2 ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBp bmRleCAwMDAwMDAwLi5lNzIwODdkCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0veGxueC94bG54X2ZiLmMKPiA+IEBAIC0wLDAgKzEsMjk4IEBACj4gPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+ICsvKgo+ID4gKyAqIFhpbGlueCBEUk0g S01TIEZyYW1lYnVmZmVyIGhlbHBlcgo+ID4gKyAqCj4gPiArICogIENvcHlyaWdodCAoQykgMjAx NSAtIDIwMTggWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBL d29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiA+ICsgKgo+ID4gKyAqIEJhc2VkIG9uIGRybV9m Yl9jbWFfaGVscGVyLmMKPiA+ICsgKgo+ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQW5hbG9n IERldmljZSBJbmMuCj4gPiArICoKPiA+ICsgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4gPiArICogTGljZW5zZSB2 ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBh bmQKPiA+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVy IHRob3NlIHRlcm1zLgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiArICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ICsg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCj4gPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KPiAKPiBJIHRoaW5rIHlvdSBrbm93IHRoZSBkcmlsbCBieSBub3cgOi0pCj4gCj4gPiArICov Cj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gPiArI2luY2x1 ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9o ZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+ Cj4gPiArCj4gPiArI2luY2x1ZGUgInhsbnhfZHJ2LmgiCj4gPiArI2luY2x1ZGUgInhsbnhfZmIu aCIKPiA+ICsKPiA+ICsjZGVmaW5lIFhMTlhfTUFYX1BMQU5FUwk0Cj4gPiArCj4gPiArc3RydWN0 IHhsbnhfZmJkZXYgewo+ID4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciBmYl9oZWxwZXI7Cj4gPiAr CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ID4gKwl1bnNpZ25lZCBpbnQgYWxpZ247Cj4g PiArCXVuc2lnbmVkIGludCB2cmVzX211bHQ7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW5s aW5lIHN0cnVjdCB4bG54X2ZiZGV2ICp0b19mYmRldihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJf aGVscGVyKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihmYl9oZWxwZXIsIHN0cnVj dCB4bG54X2ZiZGV2LCBmYl9oZWxwZXIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB4bG54X2ZiX2Z1bmNzID0gewo+IAo+IHN0YXRpYyBjb25z dCBmb3IgYWxsIG9wcyBzdHJ1Y3R1cmVzIHBsZWFzZS4KPiAKPiA+ICsJLmRlc3Ryb3kJPSBkcm1f Z2VtX2ZiX2Rlc3Ryb3ksCj4gPiArCS5jcmVhdGVfaGFuZGxlCT0gZHJtX2dlbV9mYl9jcmVhdGVf aGFuZGxlLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludAo+ID4gK3hsbnhfZmJfaW9jdGwo c3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJn KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBh cjsKPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCWludCByZXQgPSAwOwo+ID4gKwo+ID4gKwlz d2l0Y2ggKGNtZCkgewo+ID4gKwljYXNlIEZCSU9fV0FJVEZPUlZTWU5DOgo+ID4gKwkJZm9yIChp ID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gPiArCQkJc3RydWN0IGRy bV9tb2RlX3NldCAqbW9kZV9zZXQ7Cj4gPiArCQkJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ID4g Kwo+ID4gKwkJCW1vZGVfc2V0ID0gJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0Owo+ ID4gKwkJCWNydGMgPSBtb2RlX3NldC0+Y3J0YzsKPiA+ICsJCQlyZXQgPSBkcm1fY3J0Y192Ymxh bmtfZ2V0KGNydGMpOwo+ID4gKwkJCWlmICghcmV0KSB7Cj4gPiArCQkJCWRybV9jcnRjX3dhaXRf b25lX3ZibGFuayhjcnRjKTsKPiA+ICsJCQkJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKPiA+ ICsJCQl9Cj4gPiArCQl9Cj4gCj4gWW91J3JlIGdvaW5nIHRvIHdhaXQgZm9yIG9uZSB2c3luYyBm b3IgZWFjaCBDUlRDIGluIHNlcXVlbmNlLiBJZiB5b3UgaGF2ZSB0d28gCj4gQ1JUQ3MsIHRoYXQg d2lsbCBiZSBhdCBsZWFzdCB0d28gdnN5bmNzLiBJIGJlbGlldmUgdGhhdCB3aWxsIHJlbmRlciB0 aGlzIGlvY3RsIAo+IHF1aXRlIHVzZWxlc3MgZm9yIHVzZXJzcGFjZS4gSSB3b3VsZCBlaXRoZXIg dXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIAo+IHRoYXQgaGFuZGxlcyB0aGUgZmlyc3Qg Q1JUQyBvbmx5IChkcm1fZmJfaGVscGVyX2lvY3RsKCkpIG9yIGRyb3AgaXQgCj4gY29tcGxldGVs eS4gV2UgY2FuJ3QgaW1wbGVtZW50IEZCREVWIGVtdWxhdGlvbiBwZXJmZWN0bHkgYXMgd2UgZXhw b3NlIGEgc2luZ2xlIAo+IEZCREVWIGRldmljZSB0aGF0IGNvdmVycyBhbGwgQ1JUQ3MuCj4gCj4g PiArCQlyZXR1cm4gcmV0Owo+ID4gKwlkZWZhdWx0Ogo+ID4gKwkJcmV0dXJuIC1FTk9UVFk7Cj4g PiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1 Y3QgZmJfb3BzIHhsbnhfZmJkZXZfb3BzID0gewo+IAo+IHN0YXRpYyBjb25zdCB0b28uCj4gCj4g PiArCS5vd25lcgkJPSBUSElTX01PRFVMRSwKPiA+ICsJLmZiX2ZpbGxyZWN0CT0gc3lzX2ZpbGxy ZWN0LAo+ID4gKwkuZmJfY29weWFyZWEJPSBzeXNfY29weWFyZWEsCj4gPiArCS5mYl9pbWFnZWJs aXQJPSBzeXNfaW1hZ2VibGl0LAo+ID4gKwkuZmJfY2hlY2tfdmFyCT0gZHJtX2ZiX2hlbHBlcl9j aGVja192YXIsCj4gPiArCS5mYl9zZXRfcGFyCT0gZHJtX2ZiX2hlbHBlcl9zZXRfcGFyLAo+ID4g KwkuZmJfYmxhbmsJPSBkcm1fZmJfaGVscGVyX2JsYW5rLAo+ID4gKwkuZmJfcGFuX2Rpc3BsYXkJ PSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAo+ID4gKwkuZmJfc2V0Y21hcAk9IGRybV9mYl9o ZWxwZXJfc2V0Y21hcCwKPiA+ICsJLmZiX2lvY3RsCT0geGxueF9mYl9pb2N0bCwKPiA+ICt9Owo+ ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHhsbnhfZmJkZXZfY3JlYXRlIC0gQ3JlYXRlIHRoZSBmYmRl diB3aXRoIGEgZnJhbWVidWZmZXIKPiA+ICsgKiBAZmJfaGVscGVyOiBmYiBoZWxwZXIgc3RydWN0 dXJlCj4gPiArICogQHNpemU6IGZyYW1lYnVmZmVyIHNpemUgaW5mbwo+ID4gKyAqCj4gPiArICog VGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZfY21hX2NyZWF0ZSgpLgo+ID4gKyAq Cj4gPiArICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3NmdWwsIG9yIHRoZSBlcnJvciBjb2RlLgo+ID4g KyAqLwo+IAo+IEknbGwgc2tpcCByZXZpZXdpbmcgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXMgdGhl cmUncyBhIGNoYW5jZSBtb3N0IG9mIHRoZSBjb2RlIAo+IGNvdWxkIGJlIGRyb3BwZWQgaWYgeW91 IHVzZWQgdGhlIENPTkZJR19EUk1fRkJERVZfT1ZFUkFMTE9DIG1lY2hhbmlzbS4KPiAKPiA+ICtz dGF0aWMgaW50IHhsbnhfZmJkZXZfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxw ZXIsCj4gPiArCQkJICAgICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUgKnNpemUp Cj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9mYmRldiAqZmJkZXYgPSB0b19mYmRldihmYl9oZWxw ZXIpOwo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZmJfaGVscGVyLT5kZXY7Cj4gPiAr CXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKm9iajsKPiA+ICsJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmI7Cj4gPiArCXVuc2lnbmVkIGludCBieXRlc19wZXJfcGl4ZWw7Cj4gPiArCXVuc2ln bmVkIGxvbmcgb2Zmc2V0Owo+ID4gKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpOwo+ID4gKwlzaXplX3Qg Ynl0ZXM7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWRldl9kYmcoZHJtLT5kZXYsICJzdXJm YWNlIHdpZHRoKCVkKSwgaGVpZ2h0KCVkKSBhbmQgYnBwKCVkKVxuIiwKPiA+ICsJCXNpemUtPnN1 cmZhY2Vfd2lkdGgsIHNpemUtPnN1cmZhY2VfaGVpZ2h0LCBzaXplLT5zdXJmYWNlX2JwcCk7Cj4g PiArCj4gPiArCXNpemUtPnN1cmZhY2VfaGVpZ2h0ICo9IGZiZGV2LT52cmVzX211bHQ7Cj4gPiAr CWJ5dGVzX3Blcl9waXhlbCA9IERJVl9ST1VORF9VUChzaXplLT5zdXJmYWNlX2JwcCwgOCk7Cj4g PiArCWJ5dGVzID0gQUxJR04oc2l6ZS0+c3VyZmFjZV93aWR0aCAqIGJ5dGVzX3Blcl9waXhlbCwg ZmJkZXYtPmFsaWduKTsKPiA+ICsJYnl0ZXMgKj0gc2l6ZS0+c3VyZmFjZV9oZWlnaHQ7Cj4gPiAr Cj4gPiArCW9iaiA9IGRybV9nZW1fY21hX2NyZWF0ZShkcm0sIGJ5dGVzKTsKPiA+ICsJaWYgKElT X0VSUihvYmopKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKPiA+ICsKPiA+ICsJZmJpID0g ZnJhbWVidWZmZXJfYWxsb2MoMCwgZHJtLT5kZXYpOwo+ID4gKwlpZiAoIWZiaSkgewo+ID4gKwkJ ZGV2X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZWJ1ZmZlciBpbmZvLlxu Iik7Cj4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gKwkJZ290byBlcnJfZHJtX2dlbV9jbWFfZnJl ZV9vYmplY3Q7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZmJkZXYtPmZiID0gZHJtX2dlbV9mYmRldl9m Yl9jcmVhdGUoZHJtLCBzaXplLCBmYmRldi0+YWxpZ24sICZvYmotPmJhc2UsCj4gPiArCQkJCQkg ICAgJnhsbnhfZmJfZnVuY3MpOwo+ID4gKwlpZiAoSVNfRVJSKGZiZGV2LT5mYikpIHsKPiA+ICsJ CWRldl9lcnIoZHJtLT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgRFJNIGZyYW1lYnVmZmVyLlxu Iik7Cj4gPiArCQlyZXQgPSBQVFJfRVJSKGZiZGV2LT5mYik7Cj4gPiArCQlnb3RvIGVycl9mcmFt ZWJ1ZmZlcl9yZWxlYXNlOwo+ID4gKwl9Cj4gPiArCj4gPiArCWZiID0gZmJkZXYtPmZiOwo+ID4g KwlmYl9oZWxwZXItPmZiID0gZmI7Cj4gPiArCWZiX2hlbHBlci0+ZmJkZXYgPSBmYmk7Cj4gPiAr CWZiaS0+cGFyID0gZmJfaGVscGVyOwo+ID4gKwlmYmktPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVG QVVMVDsKPiA+ICsJZmJpLT5mYm9wcyA9ICZ4bG54X2ZiZGV2X29wczsKPiA+ICsKPiA+ICsJcmV0 ID0gZmJfYWxsb2NfY21hcCgmZmJpLT5jbWFwLCAyNTYsIDApOwo+ID4gKwlpZiAocmV0KSB7Cj4g PiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGNvbG9yIG1hcC5cbiIp Owo+ID4gKwkJZ290byBlcnJfZmJfZGVzdHJveTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkcm1fZmJf aGVscGVyX2ZpbGxfZml4KGZiaSwgZmItPnBpdGNoZXNbMF0sIGZiLT5mb3JtYXQtPmRlcHRoKTsK PiA+ICsJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihmYmksIGZiX2hlbHBlciwgZmItPndpZHRoLCBm Yi0+aGVpZ2h0KTsKPiA+ICsJZmJpLT52YXIueXJlcyA9IGZiLT5oZWlnaHQgLyBmYmRldi0+dnJl c19tdWx0Owo+ID4gKwo+ID4gKwlvZmZzZXQgPSBmYmktPnZhci54b2Zmc2V0ICogYnl0ZXNfcGVy X3BpeGVsOwo+ID4gKwlvZmZzZXQgKz0gZmJpLT52YXIueW9mZnNldCAqIGZiLT5waXRjaGVzWzBd Owo+ID4gKwo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLmZiX2Jhc2UgPSAocmVzb3VyY2Vfc2l6ZV90 KW9iai0+cGFkZHI7Cj4gPiArCWZiaS0+c2NyZWVuX2Jhc2UgPSAoY2hhciBfX2lvbWVtICopKG9i ai0+dmFkZHIgKyBvZmZzZXQpOwo+ID4gKwlmYmktPmZpeC5zbWVtX3N0YXJ0ID0gKHVuc2lnbmVk IGxvbmcpKG9iai0+cGFkZHIgKyBvZmZzZXQpOwo+ID4gKwlmYmktPnNjcmVlbl9zaXplID0gYnl0 ZXM7Cj4gPiArCWZiaS0+Zml4LnNtZW1fbGVuID0gYnl0ZXM7Cj4gPiArCj4gPiArCXJldHVybiAw Owo+ID4gKwo+ID4gK2Vycl9mYl9kZXN0cm95Ogo+ID4gKwlkcm1fZnJhbWVidWZmZXJfdW5yZWdp c3Rlcl9wcml2YXRlKGZiKTsKPiA+ICsJZHJtX2dlbV9mYl9kZXN0cm95KGZiKTsKPiA+ICtlcnJf ZnJhbWVidWZmZXJfcmVsZWFzZToKPiA+ICsJZnJhbWVidWZmZXJfcmVsZWFzZShmYmkpOwo+ID4g K2Vycl9kcm1fZ2VtX2NtYV9mcmVlX29iamVjdDoKPiA+ICsJZHJtX2dlbV9jbWFfZnJlZV9vYmpl Y3QoJm9iai0+YmFzZSk7Cj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB4bG54X2ZiX2hlbHBlcl9mdW5jcyA9IHsKPiAK PiBzdGF0aWMgY29uc3QuCj4gCj4gPiArCS5mYl9wcm9iZSA9IHhsbnhfZmJkZXZfY3JlYXRlLAo+ ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGxueF9mYl9pbml0IC0gQWxsb2NhdGUgYW5k IGluaXRpYWxpemVzIHRoZSBYaWxpbnggZnJhbWVidWZmZXIKPiA+ICsgKiBAZHJtOiBEUk0gZGV2 aWNlCj4gPiArICogQHByZWZlcnJlZF9icHA6IHByZWZlcnJlZCBiaXRzIHBlciBwaXhlbCBmb3Ig dGhlIGRldmljZQo+ID4gKyAqIEBtYXhfY29ubl9jb3VudDogbWF4aW11bSBudW1iZXIgb2YgY29u bmVjdG9ycwo+ID4gKyAqIEBhbGlnbjogYWxpZ25tZW50IHZhbHVlIGZvciBwaXRjaAo+ID4gKyAq IEB2cmVzX211bHQ6IG11bHRpcGxpZXIgZm9yIHZpcnR1YWwgcmVzb2x1dGlvbgo+ID4gKyAqCj4g PiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZfY21hX2luaXQoKS4KPiA+ ICsgKgo+ID4gKyAqIFJldHVybjogYSBuZXdseSBhbGxvY2F0ZWQgZHJtX2ZiX2hlbHBlciBzdHJ1 Y3Qgb3IgYSBFUlJfUFRSLgo+ID4gKyAqLwo+ID4gK3N0cnVjdCBkcm1fZmJfaGVscGVyICoKPiA+ ICt4bG54X2ZiX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IHByZWZlcnJlZF9icHAs Cj4gPiArCSAgICAgdW5zaWduZWQgaW50IG1heF9jb25uX2NvdW50LCB1bnNpZ25lZCBpbnQgYWxp Z24sCj4gPiArCSAgICAgdW5zaWduZWQgaW50IHZyZXNfbXVsdCkKPiA+ICt7Cj4gPiArCXN0cnVj dCB4bG54X2ZiZGV2ICpmYmRldjsKPiA+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBl cjsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJZmJkZXYgPSBremFsbG9jKHNpemVvZigqZmJk ZXYpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFmYmRldikKPiA+ICsJCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwo+ID4gKwo+ID4gKwlmYmRldi0+dnJlc19tdWx0ID0gdnJlc19tdWx0Owo+ID4g KwlmYmRldi0+YWxpZ24gPSBhbGlnbjsKPiA+ICsJZmJfaGVscGVyID0gJmZiZGV2LT5mYl9oZWxw ZXI7Cj4gPiArCWRybV9mYl9oZWxwZXJfcHJlcGFyZShkcm0sIGZiX2hlbHBlciwgJnhsbnhfZmJf aGVscGVyX2Z1bmNzKTsKPiA+ICsKPiA+ICsJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0KGRybSwg ZmJfaGVscGVyLCBtYXhfY29ubl9jb3VudCk7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlk ZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZHJtIGZiIGhlbHBlci5cbiIp Owo+ID4gKwkJZ290byBlcnJfZnJlZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fZmJf aGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMoZmJfaGVscGVyKTsKPiA+ICsJaWYgKHJl dCA8IDApIHsKPiA+ICsJCWRldl9lcnIoZHJtLT5kZXYsICJGYWlsZWQgdG8gYWRkIGNvbm5lY3Rv cnMuXG4iKTsKPiA+ICsJCWdvdG8gZXJyX2RybV9mYl9oZWxwZXJfZmluaTsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnKGZiX2hlbHBlciwgcHJl ZmVycmVkX2JwcCk7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlkZXZfZXJyKGRybS0+ZGV2 LCAiRmFpbGVkIHRvIHNldCBpbml0aWFsIGh3IGNvbmZpZ3VyYXRpb24uXG4iKTsKPiA+ICsJCWdv dG8gZXJyX2RybV9mYl9oZWxwZXJfZmluaTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gZmJf aGVscGVyOwo+ID4gKwo+ID4gK2Vycl9kcm1fZmJfaGVscGVyX2Zpbmk6Cj4gPiArCWRybV9mYl9o ZWxwZXJfZmluaShmYl9oZWxwZXIpOwo+ID4gK2Vycl9mcmVlOgo+ID4gKwlrZnJlZShmYmRldik7 Cj4gPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAq IHhsbnhfZmJkZXZfZGVmaW9fZmluaSAtIEZyZWUgdGhlIGRlZmlvIGZiCj4gPiArICogQGZiaTog ZmJfaW5mbyBzdHJ1Y3QKPiA+ICsgKgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24g ZHJtX2ZiZGV2X2NtYV9kZWZpb19maW5pKCkuCj4gPiArICovCj4gPiArc3RhdGljIHZvaWQgeGxu eF9mYmRldl9kZWZpb19maW5pKHN0cnVjdCBmYl9pbmZvICpmYmkpCj4gPiArewo+ID4gKwlpZiAo IWZiaS0+ZmJkZWZpbykKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJZmJfZGVmZXJyZWRfaW9f Y2xlYW51cChmYmkpOwo+ID4gKwlrZnJlZShmYmktPmZiZGVmaW8pOwo+ID4gKwlrZnJlZShmYmkt PmZib3BzKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGxueF9mYmRldl9maW5pIC0g RnJlZSB0aGUgWGlsaW54IGZyYW1lYnVmZmVyCj4gPiArICogQGZiX2hlbHBlcjogZHJtX2ZiX2hl bHBlciBzdHJ1Y3QKPiA+ICsgKgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gZHJt X2ZiZGV2X2NtYV9maW5pKCkuCj4gPiArICovCj4gPiArdm9pZCB4bG54X2ZiX2Zpbmkoc3RydWN0 IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2ZiZGV2 ICpmYmRldiA9IHRvX2ZiZGV2KGZiX2hlbHBlcik7Cj4gPiArCj4gPiArCWRybV9mYl9oZWxwZXJf dW5yZWdpc3Rlcl9mYmkoJmZiZGV2LT5mYl9oZWxwZXIpOwo+ID4gKwlpZiAoZmJkZXYtPmZiX2hl bHBlci5mYmRldikKPiA+ICsJCXhsbnhfZmJkZXZfZGVmaW9fZmluaShmYmRldi0+ZmJfaGVscGVy LmZiZGV2KTsKPiA+ICsKPiA+ICsJaWYgKGZiZGV2LT5mYl9oZWxwZXIuZmIpCj4gPiArCQlkcm1f ZnJhbWVidWZmZXJfcmVtb3ZlKGZiZGV2LT5mYl9oZWxwZXIuZmIpOwo+ID4gKwo+ID4gKwlkcm1f ZmJfaGVscGVyX2ZpbmkoJmZiZGV2LT5mYl9oZWxwZXIpOwo+ID4gKwlrZnJlZShmYmRldik7Cj4g PiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHhsbnhfZmJfY3JlYXRlIC0gKHN0cnVjdCBkcm1f bW9kZV9jb25maWdfZnVuY3MgKiktPmZiX2NyZWF0ZSBjYWxsYmFjawo+ID4gKyAqIEBkcm06IERS TSBkZXZpY2UKPiA+ICsgKiBAZmlsZV9wcml2OiBkcm0gZmlsZSBwcml2YXRlIGRhdGEKPiA+ICsg KiBAbW9kZV9jbWQ6IG1vZGUgY29tbWFuZCBmb3IgZmIgY3JlYXRpb24KPiA+ICsgKgo+ID4gKyAq IFRoaXMgZnVuY3Rpb25zIGNyZWF0ZXMgYSBkcm1fZnJhbWVidWZmZXIgd2l0aCB4bG54X2ZiX2Z1 bmNzIGZvciBnaXZlbgo+ID4gbW9kZQo+ID4gKyAqIEBtb2RlX2NtZC4gVGhpcyBmdW5jdGlvbnMg aXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgdGhlIGZiX2NyZWF0ZQo+ID4gY2FsbGJhY2sKPiA+ ICsgKiBmdW5jdGlvbiBvZiBkcm1fbW9kZV9jb25maWdfZnVuY3MuCj4gPiArICoKPiA+ICsgKiBS ZXR1cm46IGEgZHJtX2ZyYW1lYnVmZmVyIG9iamVjdCBpZiBzdWNjZXNzZnVsLCBvcgo+ID4gKyAq IEVSUl9QVFIgZnJvbSBkcm1fZ2VtX2ZiX2NyZWF0ZV93aXRoX2Z1bmNzKCkuCj4gPiArICovCj4g PiArc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCj4gPiAreGxueF9mYl9jcmVhdGUoc3RydWN0IGRy bV9kZXZpY2UgKmRybSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gPiArCSAgICAgICBj b25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQpCj4gPiArewo+ID4gKwlyZXR1 cm4gZHJtX2dlbV9mYl9jcmVhdGVfd2l0aF9mdW5jcyhkcm0sIGZpbGVfcHJpdiwgbW9kZV9jbWQs Cj4gPiArCQkJCQkgICAgJnhsbnhfZmJfZnVuY3MpOwo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54 X2ZiLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi42ZWZjOTg1 Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Zi LmgKPiA+IEBAIC0wLDAgKzEsMzMgQEAKPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAo+ID4gKy8qCj4gPiArICogWGlsaW54IERSTSBLTVMgRnJhbWVidWZmZXIgaGVscGVy IGhlYWRlcgo+ID4gKyAqCj4gPiArICogIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTggWGlsaW54 LCBJbmMuCj4gPiArICoKPiA+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25A eGlsaW54LmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBMaWNlbnNlIHZl cnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFu ZAo+ID4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIg dGhvc2UgdGVybXMuCj4gPiArICoKPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ICsgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4gKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKPiA+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lgo+IAo+IE5vIGNvbW1lbnQgYW55bW9yZS4KPiAKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVm IF9YTE5YX0ZCX0hfCj4gPiArI2RlZmluZSBfWExOWF9GQl9IXwo+ID4gKwo+ID4gK3N0cnVjdCBk cm1fZmJfaGVscGVyOwo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKgo+ID4gK3hs bnhfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2LAo+ID4gKwkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVf Y21kKTsKPiA+ICtzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqCj4gPiAreGxueF9mYl9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkcm0sIGludCBwcmVmZXJyZWRfYnBwLAo+ID4gKwkgICAgIHVuc2lnbmVk IGludCBtYXhfY29ubl9jb3VudCwgdW5zaWduZWQgaW50IGFsaWduLAo+ID4gKwkgICAgIHVuc2ln bmVkIGludCB2cmVzX211bHQpOwo+ID4gK3ZvaWQgeGxueF9mYl9maW5pKHN0cnVjdCBkcm1fZmJf aGVscGVyICpmYl9oZWxwZXIpOwo+ID4gKwo+ID4gKyNlbmRpZiAvKiBfWExOWF9GQl9IXyAqLwo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmMKPiA+IGIvZHJp dmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uYyBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5k ZXggMDAwMDAwMC4uNGE1ZDUzMwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3hsbngveGxueF9nZW0uYwo+ID4gQEAgLTAsMCArMSw0NyBAQAo+ID4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPiArLyoKPiA+ICsgKiBYaWxpbnggRFJNIEtN UyBHRU0gaGVscGVyCj4gPiArICoKPiA+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAxOCBY aWxpbngsIEluYy4KPiA+ICsgKgo+ID4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW4u a3dvbkB4aWxpbnguY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vu c2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgYW5kCj4gPiArICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1 bmRlciB0aG9zZSB0ZXJtcy4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4g PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCj4gCj4gLi4uIDstKQo+IAo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkcm0v ZHJtUC5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gPiArCj4g PiArI2luY2x1ZGUgInhsbnhfZHJ2LmgiCj4gPiArI2luY2x1ZGUgInhsbnhfZ2VtLmgiCj4gPiAr Cj4gPiArLyoKPiA+ICsgKiB4bG54X2dlbV9jbWFfZHVtYl9jcmVhdGUgLSAoc3RydWN0IGRybV9k cml2ZXIpLT5kdW1iX2NyZWF0ZSBjYWxsYmFjawo+ID4gKyAqIEBmaWxlX3ByaXY6IGRybV9maWxl IG9iamVjdAo+ID4gKyAqIEBkcm06IERSTSBvYmplY3QKPiA+ICsgKiBAYXJnczogaW5mbyBmb3Ig ZHVtYiBzY2Fub3V0IGJ1ZmZlciBjcmVhdGlvbgo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlv biBpcyBmb3IgZHVtYl9jcmVhdGUgY2FsbGJhY2sgb2YgZHJtX2RyaXZlciBzdHJ1Y3QuIFNpbXBs eQo+ID4gKyAqIGl0IHdyYXBzIGFyb3VuZCBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSgpIGFuZCBz ZXRzIHRoZSBwaXRjaCB2YWx1ZQo+ID4gKyAqIGJ5IHJldHJpZXZpbmcgdGhlIHZhbHVlIGZyb20g dGhlIGRldmljZS4KPiA+ICsgKgo+ID4gKyAqIFJldHVybjogVGhlIHJldHVybiB2YWx1ZSBmcm9t IGRybV9nZW1fY21hX2R1bWJfY3JlYXRlKCkKPiA+ICsgKi8KPiA+ICtpbnQgeGxueF9nZW1fY21h X2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2Rldmlj ZQo+ID4gKmRybSwKPiA+ICsJCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJn cykKPiA+ICt7Cj4gPiArCWludCBwaXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFy Z3MtPmJwcCwgOCk7Cj4gCj4gcGl0Y2ggaXMgbmV2ZXIgbmVnYXRpdmUsIHlvdSBjYW4gbWFrZSBp dCBhbiB1bnNpZ25lZCBpbnQuCj4gCj4gPiArCXVuc2lnbmVkIGludCBhbGlnbiA9IHhsbnhfZ2V0 X2FsaWduKGRybSk7Cj4gPiArCj4gPiArCWlmICghYXJncy0+cGl0Y2ggfHwgIUlTX0FMSUdORUQo YXJncy0+cGl0Y2gsIGFsaWduKSkKPiA+ICsJCWFyZ3MtPnBpdGNoID0gQUxJR04ocGl0Y2gsIGFs aWduKTsKPiAKPiBJZiB0aGUgcGl0Y2ggaXMgYWxpZ25lZCB5b3UnbGwga2VlcCB0aGUgY3VycmVu dCB2YWx1ZSAod2hpY2ggY291bGQgYmUgbGFyZ2VyIAo+IHRoYW4gdGhlIG1pbmltdW0gcGl0Y2gp LCBidXQgb3RoZXJ3aXNlIHlvdSB3aWxsIG92ZXJ3cml0ZSBpdCB3aXRoIHRoZSBhbGlnbmVkIAo+ IG1pbmltdW0gcGl0Y2guIEl0IGNyZWF0ZXMgdHdvIHZlcnkgZGlmZmVyZW50IGJlaGF2aW91cnMg YnkgYWxsb3dpbmcgdXNlcnNwYWNlIAo+IHRvIHNwZWNpZnkgdGhlIHBpdGNoIHdoZW4gaXQgaXMg YWxpZ25lZCwgYnV0IGdvaW5nIGZvciB0aGUgbWluaW11bSBwaXRjaCAKPiB1bmNvbmRpdGlvbmFs bHkgb3RoZXJ3aXNlLiBJcyB0aGF0IG9uIHB1cnBvc2UgPwo+IAo+ID4gKwlyZXR1cm4gZHJtX2dl bV9jbWFfZHVtYl9jcmVhdGVfaW50ZXJuYWwoZmlsZV9wcml2LCBkcm0sIGFyZ3MpOwo+ID4gK30K PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5oCj4gPiBiL2Ry aXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmggbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGlu ZGV4IDAwMDAwMDAuLmYzODBkZTkKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS94bG54L3hsbnhfZ2VtLmgKPiA+IEBAIC0wLDAgKzEsMjYgQEAKPiA+ICsvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gKy8qCj4gPiArICogWGlsaW54IERSTSBL TVMgR0VNIGhlbHBlciBoZWFkZXIKPiA+ICsgKgo+ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUg LSAyMDE4IFhpbGlueCwgSW5jLgo+ID4gKyAqCj4gPiArICogIEF1dGhvcjogSHl1biBXb28gS3dv biA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gPiArICoKPiA+ICsgKiBUaGlzIHNvZnR3YXJlIGlz IGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4gPiAr ICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBhbmQKPiA+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1v ZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCj4gPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KPiAKPiBUaGUgbGFzdCBvbmUgISA6LSkKPiAKPiA+ICsgKi8KPiA+ICsK PiA+ICsjaWZuZGVmIF9YTE5YX0dFTV9IXwo+ID4gKyNkZWZpbmUgX1hMTlhfR0VNX0hfCj4gPiAr Cj4gPiAraW50IHhsbnhfZ2VtX2NtYV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdiwKPiA+ICsJCQkgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gPiArCQkJICAgICBz dHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOwo+ID4gKwo+ID4gKyNlbmRpZiAvKiBf WExOWF9HRU1fSF8gKi8KPiAKPiAtLSAKPiBSZWdhcmRzLAo+IAo+IExhdXJlbnQgUGluY2hhcnQK PiAKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==