From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Murphy Subject: PATCH [1/3] drivers/input/xpad.c: Improve Xbox 360 wireless support and add sysfs interface Date: Sat, 28 Feb 2009 23:53:03 -0500 Message-ID: <5aa163d00902282053h38b0febbyb37fc30855fdc985@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6471696240e770464077a3e Return-path: Sender: linux-usb-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Greg KH , Oliver Neukum , Frederic Weisbecker , torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org List-Id: linux-input@vger.kernel.org --0016e6471696240e770464077a3e Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Improved support for Xbox 360 wireless devices by enabling rumble and LED control, improved general usability by adding input controls, and added a sysfs interface for tuning driver behavior. Signed-off-by: Mike Murphy --0016e6471696240e770464077a3e Content-Type: text/x-patch; charset=US-ASCII; name="xpad-20090228b.patch" Content-Disposition: attachment; filename="xpad-20090228b.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_frr8xd6w0 ZGlmZiAtdU5yIG9yaWdkcnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgbmV3ZHJ2L2Ry aXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCi0tLSBvcmlnZHJ2L2RyaXZlcnMvaW5wdXQvam95 c3RpY2sveHBhZC5jCTIwMDktMDItMTQgMjI6Mzk6MjAuMDAwMDAwMDAwIC0wNTAwCisrKyBuZXdk cnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMJMjAwOS0wMi0yOCAyMzoyMDoyMC4wMDAw MDAwMDAgLTA1MDAKQEAgLTEsNSArMSw4IEBACiAvKgotICogWC1Cb3ggZ2FtZXBhZCBkcml2ZXIK KyAqIFhib3ggZ2FtZXBhZCBkcml2ZXIgd2l0aCBYYm94IDM2MCB3aXJlZC93aXJlbGVzcyBzdXBw b3J0CisgKgorICogTGFzdCBNb2RpZmllZDoJMjggRmVicnVhcnkgMjAwOQorICoJCQlNaWtlIE11 cnBoeSA8bWFtdXJwaEBjcy5jbGVtc29uLmVkdT4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIg TWFya28gRnJpZWRlbWFubiA8bWZyQGJteC1jaGVtbml0ei5kZT4KICAqICAgICAgICAgICAgICAg MjAwNCBPbGl2ZXIgU2Nod2FydHogPE9saXZlci5TY2h3YXJ0ekBnbXguZGU+LApAQCAtOSw2ICsx Miw4IEBACiAgKiAgICAgICAgICAgICAgIDIwMDUgRG9taW5pYyBDZXJxdWV0dGkgPGJpbmFyeTEy MzBAeWFob28uY29tPgogICogICAgICAgICAgICAgICAyMDA2IEFkYW0gQnVjaGJpbmRlciA8YWRh bS5idWNoYmluZGVyQGdtYWlsLmNvbT4KICAqICAgICAgICAgICAgICAgMjAwNyBKYW4gS3JhdG9j aHZpbCA8aG9uemFAamlrb3MuY3o+CisgKiAgICAgICAgICAgICAgIDIwMDkgQ2xlbXNvbiBVbml2 ZXJzaXR5CisgKgkJICAgICAgKGNvbnRhY3Q6IE1pa2UgTXVycGh5IDxtYW11cnBoQGNzLmNsZW1z b24uZWR1PikKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMjQsMjI0ICsyOSwzMzAgQEAKICAq IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z dG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICoKKyAqIFBsZWFzZSBzZWUgeGJveC5oIGZvciB0aGUg Q2hhbmdlTG9nLgorICovCisKKworCisjaW5jbHVkZSAieHBhZC5oIgorCisKKy8qIFRoZSBkZWFk IHpvbmUgYW5kIHN0aWNrIGxpbWl0IGJvdGggYWZmZWN0IHRoZSBiZWhhdmlvciBvZiB0aGUgY29y cmVzcG9uZGluZworICogYW5hbG9nIHN0aWNrLCBzaW5jZSB0aGUgb3V0cHV0IHZhbHVlcyByZXBv cnRlZCBmb3IgdGhlIHN0aWNrIGlucHV0cyB3aWxsCisgKiBiZSBzY2FsZWQgb250byBbMCwzMjc2 N10uIEl0IGlzIHRodXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWFkIHpvbmUKKyAq IGlzIG5ldmVyIGxhcmdlciB0aGFuIHRoZSBzdGljayBsaW1pdC4gSW4gZmFjdCwgYSBtaW5pbWFs IGFtb3VudCBvZiBzdGljaworICogdHJhdmVsIHNwYWNlICgxMDI0KSBpcyBtYWludGFpbmVkIGJl dHdlZW4gdGhlIHR3byB2YWx1ZXMuIEluIHByYWN0aWNlLAorICogaG93ZXZlciwgdGhlIHN0aWNr IGxpbWl0IHNob3VsZCBhbHdheXMgYmUgbXVjaCBncmVhdGVyIHRoYW4gdGhlIGRlYWQgem9uZS4K KyAqLworCitzdGF0aWMgdm9pZCBzZXRfZGVhZF96b25lKHVuc2lnbmVkIGludCBuZXdfc2l6ZSwg dW5zaWduZWQgaW50ICpkeiwKKwkJdW5zaWduZWQgaW50IHN0aWNrX2xpbWl0KQoreworCWlmICgo bmV3X3NpemUgKyAxMDI0KSA+PSBzdGlja19saW1pdCkKKwkJbmV3X3NpemUgPSAoc3RpY2tfbGlt aXQgPiAxMDI0KSA/IHN0aWNrX2xpbWl0IC0gMTAyNCA6IDA7CisJKmR6ID0gbmV3X3NpemU7Cit9 CisKK3N0YXRpYyB2b2lkIHNldF9zdGlja19saW1pdCh1bnNpZ25lZCBpbnQgbmV3X3NpemUsIHVu c2lnbmVkIGludCAqc2wsCisJCXVuc2lnbmVkIGludCBkZWFkX3pvbmUpCit7CisJaWYgKG5ld19z aXplIDwgKGRlYWRfem9uZSArIDEwMjQpKQorCQluZXdfc2l6ZSA9IGRlYWRfem9uZSArIDEwMjQ7 CisJaWYgKG5ld19zaXplID4gMzI3NjcpCisJCW5ld19zaXplID0gMzI3Njc7CisJKnNsID0gbmV3 X3NpemU7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogU3lzRnMgaW50ZXJm YWNlIGZ1bmN0aW9ucwogICoKLSAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uOgotICogIC0gaW5m b3JtYXRpb24gZnJvbSAgICAgaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gtY29udHJvbGxlci5q YS5odG1sCi0gKiAgLSB0aGUgaUZvcmNlIGRyaXZlciAgICBkcml2ZXJzL2NoYXIvam95c3RpY2sv aWZvcmNlLmMKLSAqICAtIHRoZSBza2VsZXRvbi1kcml2ZXIgIGRyaXZlcnMvdXNiL3VzYi1za2Vs ZXRvbi5jCi0gKiAgLSBYYm94IDM2MCBpbmZvcm1hdGlvbiBodHRwOi8vd3d3LmZyZWU2MC5vcmcv d2lraS9HYW1lcGFkCi0gKgotICogVGhhbmtzIHRvOgotICogIC0gSVRPIFRha2F5dWtpIGZvciBw cm92aWRpbmcgZXNzZW50aWFsIHhwYWQgaW5mb3JtYXRpb24gb24gaGlzIHdlYnNpdGUKLSAqICAt IFZvanRlY2ggUGF2bGlrICAgICAtIGlmb3JjZSBkcml2ZXIgLyBpbnB1dCBzdWJzeXN0ZW0KLSAq ICAtIEdyZWcgS3JvYWgtSGFydG1hbiAtIHVzYi1za2VsZXRvbiBkcml2ZXIKLSAqICAtIFhCT1gg TGludXggcHJvamVjdCAtIGV4dHJhIFVTQiBpZCdzCi0gKgotICogVE9ETzoKLSAqICAtIGZpbmUg dHVuZSBheGVzIChlc3BlY2lhbGx5IHRyaWdnZXIgYXhlcykKLSAqICAtIGZpeCAiYW5hbG9nIiBi dXR0b25zIChyZXBvcnRlZCBhcyBkaWdpdGFsIG5vdykKLSAqICAtIGdldCBydW1ibGUgd29ya2lu ZwotICogIC0gbmVlZCBVU0IgSURzIGZvciBvdGhlciBkYW5jZSBwYWRzCi0gKgotICogSGlzdG9y eToKLSAqCi0gKiAyMDAyLTA2LTI3IC0gMC4wLjEgOiBmaXJzdCB2ZXJzaW9uLCBqdXN0IHNhaWQg IlhCT1ggSElEIGNvbnRyb2xsZXIiCi0gKgotICogMjAwMi0wNy0wMiAtIDAuMC4yIDogYmFzaWMg d29ya2luZyB2ZXJzaW9uCi0gKiAgLSBhbGwgYXhlcyBhbmQgOSBvZiB0aGUgMTAgYnV0dG9ucyB3 b3JrIChnZXJtYW4gSW50ZXJBY3QgZGV2aWNlKQotICogIC0gdGhlIGJsYWNrIGJ1dHRvbiBkb2Vz IG5vdCB3b3JrCi0gKgotICogMjAwMi0wNy0xNCAtIDAuMC4zIDogcmV3b3JrIGJ5IFZvanRlY2gg UGF2bGlrCi0gKiAgLSBpbmRlbnRhdGlvbiBmaXhlcwotICogIC0gdXNiICsgaW5wdXQgaW5pdCBz ZXF1ZW5jZSBmaXhlcwotICoKLSAqIDIwMDItMDctMTYgLSAwLjAuNCA6IG1pbm9yIGNoYW5nZXMs IG1lcmdlIHdpdGggVm9qdGVjaCdzIHYwLjAuMwotICogIC0gdmVyaWZpZWQgdGhlIGxhY2sgb2Yg SElEIGFuZCByZXBvcnQgZGVzY3JpcHRvcnMKLSAqICAtIHZlcmlmaWVkIHRoYXQgQUxMIGJ1dHRv bnMgV09SSwotICogIC0gZml4ZWQgZC1wYWQgdG8gYXhlcyBtYXBwaW5nCi0gKgotICogMjAwMi0w Ny0xNyAtIDAuMC41IDogc2ltcGxpZmllZCBkLXBhZCBoYW5kbGluZwotICoKLSAqIDIwMDQtMTAt MDIgLSAwLjAuNiA6IEREUiBwYWQgc3VwcG9ydAotICogIC0gYm9ycm93ZWQgZnJvbSB0aGUgWEJP WCBsaW51eCBrZXJuZWwKLSAqICAtIFVTQiBpZCdzIGZvciBjb21tb25seSB1c2VkIGRhbmNlIHBh ZHMgYXJlIHByZXNlbnQKLSAqICAtIGRhbmNlIHBhZHMgd2lsbCBtYXAgRC1QQUQgdG8gYnV0dG9u cywgbm90IGF4ZXMKLSAqICAtIHBhc3MgdGhlIG1vZHVsZSBwYXJhbWF0ZXIgJ2RwYWRfdG9fYnV0 dG9ucycgdG8gZm9yY2UKLSAqICAgIHRoZSBELVBBRCB0byBtYXAgdG8gYnV0dG9ucyBpZiB5b3Vy IHBhZCBpcyBub3QgZGV0ZWN0ZWQKLSAqCi0gKiBMYXRlciBjaGFuZ2VzIGNhbiBiZSB0cmFja2Vk IGluIFNDTS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGlu dXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0 Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2lucHV0 Lmg+Ci0KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWFya28gRnJpZWRlbWFubiA8bWZyQGJteC1j aGVtbml0ei5kZT4iCi0jZGVmaW5lIERSSVZFUl9ERVNDICJYLUJveCBwYWQgZHJpdmVyIgotCi0j ZGVmaW5lIFhQQURfUEtUX0xFTiAzMgotCi0vKiB4Ym94IGQtcGFkcyBzaG91bGQgbWFwIHRvIGJ1 dHRvbnMsIGFzIGlzIHJlcXVpcmVkIGZvciBERFIgcGFkcwotICAgYnV0IHdlIG1hcCB0aGVtIHRv IGF4ZXMgd2hlbiBwb3NzaWJsZSB0byBzaW1wbGlmeSB0aGluZ3MgKi8KLSNkZWZpbmUgTUFQX0RQ QURfVE9fQlVUVE9OUyAgICAwCi0jZGVmaW5lIE1BUF9EUEFEX1RPX0FYRVMgICAgICAgMQotI2Rl ZmluZSBNQVBfRFBBRF9VTktOT1dOICAgICAgIDIKLQotI2RlZmluZSBYVFlQRV9YQk9YICAgICAg ICAwCi0jZGVmaW5lIFhUWVBFX1hCT1gzNjAgICAgIDEKLSNkZWZpbmUgWFRZUEVfWEJPWDM2MFcg ICAgMgotI2RlZmluZSBYVFlQRV9VTktOT1dOICAgICAzCi0KLXN0YXRpYyBpbnQgZHBhZF90b19i dXR0b25zOwotbW9kdWxlX3BhcmFtKGRwYWRfdG9fYnV0dG9ucywgYm9vbCwgU19JUlVHTyk7Ci1N T0RVTEVfUEFSTV9ERVNDKGRwYWRfdG9fYnV0dG9ucywgIk1hcCBELVBBRCB0byBidXR0b25zIHJh dGhlciB0aGFuIGF4ZXMgZm9yIHVua25vd24gcGFkcyIpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IHhwYWRfZGV2aWNlIHsKLQl1MTYgaWRWZW5kb3I7Ci0JdTE2IGlkUHJvZHVjdDsKLQljaGFyICpu YW1lOwotCXU4IGRwYWRfbWFwcGluZzsKLQl1OCB4dHlwZTsKLX0geHBhZF9kZXZpY2VbXSA9IHsK LQl7IDB4MDQ1ZSwgMHgwMjAyLCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MSAoVVMpIiwgTUFQX0RQ QURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDVlLCAweDAyODksICJNaWNyb3NvZnQg WC1Cb3ggcGFkIHYyIChVUykiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAw eDA0NWUsIDB4MDI4NSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgKEphcGFuKSIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ1ZSwgMHgwMjg3LCAiTWljcm9zb2Z0IFhib3gg Q29udHJvbGxlciBTIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDVl LCAweDA3MTksICJYYm94IDM2MCBXaXJlbGVzcyBSZWNlaXZlciIsIE1BUF9EUEFEX1RPX0JVVFRP TlMsIFhUWVBFX1hCT1gzNjBXIH0sCi0JeyAweDBjMTIsIDB4ODgwOSwgIlJlZE9jdGFuZSBYYm94 IERhbmNlIFBhZCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ0 ZiwgMHgwZjA3LCAiVGhydXN0bWFzdGVyLCBJbmMuIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19B WEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NmQsIDB4YzI0MiwgIkxvZ2l0ZWNoIENoaWxsc3Ry ZWFtIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAw eDA0NmQsIDB4Y2E4NCwgIkxvZ2l0ZWNoIFhib3ggQ29yZGxlc3MgQ29udHJvbGxlciIsIE1BUF9E UEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ2ZCwgMHhjYTg4LCAiTG9naXRlY2gg Q29tcGFjdCBDb250cm9sbGVyIGZvciBYYm94IiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJP WCB9LAotCXsgMHgwNWZkLCAweDEwMDcsICJNYWQgQ2F0eiBDb250cm9sbGVyICh1bnZlcmlmaWVk KSIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDVmZCwgMHgxMDdhLCAi SW50ZXJBY3QgJ1Bvd2VyUGFkIFBybycgWC1Cb3ggcGFkIChHZXJtYW55KSIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NTE2LCAiTWFkIENhdHogQ29udHJv bCBQYWQiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDUy MiwgIk1hZCBDYXR6IEx1bWlDT04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0J eyAweDA3MzgsIDB4NDUyNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFkIFBybyIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NTM2LCAiTWFkIENhdHogTWljcm9D T04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDU0MCwg Ik1hZCBDYXR6IEJlYXQgUGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAot CXsgMHgwNzM4LCAweDQ1NTYsICJNYWQgQ2F0eiBMeW54IFdpcmVsZXNzIENvbnRyb2xsZXIiLCBN QVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDcxNiwgIk1hZCBD YXR6IFdpcmVkIFhib3ggMzYwIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9Y Qk9YMzYwIH0sCi0JeyAweDA3MzgsIDB4NjA0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIFBybyIsIE1B UF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4ODAyLCAiWmVy b3BsdXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAot CXsgMHgwYzEyLCAweDg4MGEsICJQZWxpY2FuIEVjbGlwc2UgUEwtMjAyMyIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4ODEwLCAiWmVyb3BsdXMgWGJveCBD b250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwYzEyLCAw eDk5MDIsICJIQU1BIFZpYnJhWCAtICpGQVVMVFkgSEFSRFdBUkUqIiwgTUFQX0RQQURfVE9fQVhF UywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTRjLCAweDEwOTcsICJSYWRpY2EgR2FtZXN0ZXIgQ29u dHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU0YywgMHgy MzkwLCAiUmFkaWNhIEdhbWVzIEp0ZWNoIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBY VFlQRV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwMywgIkxvZ2ljMyBGcmVlYmlyZCB3aXJlbGVz cyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTZm LCAweDAwMDUsICJFY2xpcHNlIHdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVT LCBYVFlQRV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwNiwgIkVkZ2Ugd2lyZWxlc3MgQ29udHJv bGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU2ZiwgMHgwMDA2 LCAiUGVsaWNhbiAnVFNaJyBXaXJlZCBYYm94IDM2MCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9f QVhFUywgWFRZUEVfWEJPWDM2MCB9LAotCXsgMHgwZThmLCAweDAyMDEsICJTbWFydEpveSBGcmFn IFhwYWQvUFMyIGFkYXB0b3IiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAw eDBmMzAsIDB4MDIwMiwgIkpveXRlY2ggQWR2YW5jZWQgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGYzMCwgMHg4ODg4LCAiQmlnQmVuIFhCTWluaVBh ZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgxMDJj LCAweGZmMGMsICJKb3l0ZWNoIFdpcmVsZXNzIEFkdmFuY2VkIENvbnRyb2xsZXIiLCBNQVBfRFBB RF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDEyYWIsIDB4ODgwOSwgIlhib3ggRERSIGRh bmNlcGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAotCXsgMHgxNDMwLCAw eDQ3NDgsICJSZWRPY3RhbmUgR3VpdGFyIEhlcm8gWC1wbG9yZXIiLCBNQVBfRFBBRF9UT19BWEVT LCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweDE0MzAsIDB4ODg4OCwgIlRYNjUwMCsgRGFuY2UgUGFk IChmaXJzdCBnZW5lcmF0aW9uKSIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwK LQl7IDB4MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQiLCBNQVBfRFBBRF9U T19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweGZmZmYsIDB4ZmZmZiwgIkNoaW5lc2UtbWFk ZSBYYm94IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAw eDAwMDAsIDB4MDAwMCwgIkdlbmVyaWMgWC1Cb3ggcGFkIiwgTUFQX0RQQURfVU5LTk9XTiwgWFRZ UEVfVU5LTk9XTiB9Ci19OwotCi0vKiBidXR0b25zIHNoYXJlZCB3aXRoIHhib3ggYW5kIHhib3gz NjAgKi8KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9jb21tb25fYnRuW10gPSB7Ci0J QlROX0EsIEJUTl9CLCBCVE5fWCwgQlROX1ksCQkJLyogImFuYWxvZyIgYnV0dG9ucyAqLwotCUJU Tl9TVEFSVCwgQlROX0JBQ0ssIEJUTl9USFVNQkwsIEJUTl9USFVNQlIsCS8qIHN0YXJ0L2JhY2sv c3RpY2tzICovCi0JLTEJCQkJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotLyogb3Jp Z2luYWwgeGJveCBjb250cm9sbGVycyBvbmx5ICovCi1zdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0 IHhwYWRfYnRuW10gPSB7Ci0JQlROX0MsIEJUTl9aLAkJLyogImFuYWxvZyIgYnV0dG9ucyAqLwot CS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KLS8qIG9ubHkgdXNlZCBpZiBNQVBf RFBBRF9UT19CVVRUT05TICovCi1zdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWRfYnRuX3Bh ZFtdID0gewotCUJUTl9MRUZULCBCVE5fUklHSFQsCQkvKiBkLXBhZCBsZWZ0LCByaWdodCAqLwot CUJUTl8wLCBCVE5fMSwJCQkvKiBkLXBhZCB1cCwgZG93biAoWFhYIG5hbWVzPz8pICovCi0JLTEJ CQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hv cnQgeHBhZDM2MF9idG5bXSA9IHsgIC8qIGJ1dHRvbnMgZm9yIHgzNjAgY29udHJvbGxlciAqLwot CUJUTl9UTCwgQlROX1RSLAkJLyogQnV0dG9uIExCL1JCICovCi0JQlROX01PREUsCQkvKiBUaGUg YmlnIFggYnV0dG9uICovCi0JLTEKLX07Ci0KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBh ZF9hYnNbXSA9IHsKLQlBQlNfWCwgQUJTX1ksCQkvKiBsZWZ0IHN0aWNrICovCi0JQUJTX1JYLCBB QlNfUlksCQkvKiByaWdodCBzdGljayAqLwotCUFCU19aLCBBQlNfUlosCQkvKiB0cmlnZ2VycyBs ZWZ0L3JpZ2h0ICovCi0JLTEJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotLyogb25s eSB1c2VkIGlmIE1BUF9EUEFEX1RPX0FYRVMgKi8KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQg eHBhZF9hYnNfcGFkW10gPSB7Ci0JQUJTX0hBVDBYLCBBQlNfSEFUMFksCS8qIGQtcGFkIGF4ZXMg Ki8KLQktMQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi0vKiBYYm94IDM2MCBoYXMg YSB2ZW5kb3Itc3BlY2lmaWMgY2xhc3MsIHNvIHdlIGNhbm5vdCBtYXRjaCBpdCB3aXRoIG9ubHkK LSAqIFVTQl9JTlRFUkZBQ0VfSU5GTyAoYWxzbyBzcGVjaWZpY2FsbHkgcmVmdXNlZCBieSBVU0Ig c3Vic3lzdGVtKSwgc28gd2UKLSAqIG1hdGNoIGFnYWluc3QgdmVuZG9yIGlkIGFzIHdlbGwuIFdp cmVkIFhib3ggMzYwIGRldmljZXMgaGF2ZSBwcm90b2NvbCAxLAotICogd2lyZWxlc3MgY29udHJv bGxlcnMgaGF2ZSBwcm90b2NvbCAxMjkuICovCi0jZGVmaW5lIFhQQURfWEJPWDM2MF9WRU5ET1Jf UFJPVE9DT0wodmVuZCxwcikgXAotCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hf VkVORE9SIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywgXAotCS5pZFZlbmRvciA9ICh2 ZW5kKSwgXAotCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMsIFwKLQku YkludGVyZmFjZVN1YkNsYXNzID0gOTMsIFwKLQkuYkludGVyZmFjZVByb3RvY29sID0gKHByKQot I2RlZmluZSBYUEFEX1hCT1gzNjBfVkVORE9SKHZlbmQpIFwKLQl7IFhQQURfWEJPWDM2MF9WRU5E T1JfUFJPVE9DT0wodmVuZCwxKSB9LCBcCi0JeyBYUEFEX1hCT1gzNjBfVkVORE9SX1BST1RPQ09M KHZlbmQsMTI5KSB9Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB4cGFkX3RhYmxlIFtd ID0gewotCXsgVVNCX0lOVEVSRkFDRV9JTkZPKCdYJywgJ0InLCAwKSB9LAkvKiBYLUJveCBVU0It SUYgbm90IGFwcHJvdmVkIGNsYXNzICovCi0JWFBBRF9YQk9YMzYwX1ZFTkRPUigweDA0NWUpLAkJ LyogTWljcm9zb2Z0IFgtQm94IDM2MCBjb250cm9sbGVycyAqLwotCVhQQURfWEJPWDM2MF9WRU5E T1IoMHgwNDZkKSwJCS8qIExvZ2l0ZWNoIFgtQm94IDM2MCBzdHlsZSBjb250cm9sbGVycyAqLwot CVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwNzM4KSwJCS8qIE1hZCBDYXR6IFgtQm94IDM2MCBjb250 cm9sbGVycyAqLwotCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwZTZmKSwJCS8qIDB4MGU2ZiBYLUJv eCAzNjAgY29udHJvbGxlcnMgKi8KLQlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MTQzMCksCQkvKiBS ZWRPY3RhbmUgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCi0JeyB9Ci19OwotCi1NT0RVTEVfREVW SUNFX1RBQkxFICh1c2IsIHhwYWRfdGFibGUpOwotCi1zdHJ1Y3QgdXNiX3hwYWQgewotCXN0cnVj dCBpbnB1dF9kZXYgKmRldjsJCS8qIGlucHV0IGRldmljZSBpbnRlcmZhY2UgKi8KLQlzdHJ1Y3Qg dXNiX2RldmljZSAqdWRldjsJLyogdXNiIGRldmljZSAqLwotCi0JaW50IHBhZF9wcmVzZW50Owot Ci0Jc3RydWN0IHVyYiAqaXJxX2luOwkJLyogdXJiIGZvciBpbnRlcnJ1cHQgaW4gcmVwb3J0ICov Ci0JdW5zaWduZWQgY2hhciAqaWRhdGE7CQkvKiBpbnB1dCBkYXRhICovCi0JZG1hX2FkZHJfdCBp ZGF0YV9kbWE7CisgKiBXZSB1c2UgY29tbW9uIGZ1bmN0aW9ucywgd2hlcmUgcG9zc2libGUsIHRv IGltcGxlbWVudCB0aGUgc2hvdy9zdG9yZQorICogcm91dGluZXMuIFRoaXMgZGVzaWduIHNhdmVz IG9uIGNvZGUgYW5kIHJlZHVjZXMgdGhlIGJ1cmRlbiBvZiBhZGRpbmcgdG8gb3IKKyAqIGNoYW5n aW5nIHRoZSBpbnRlcmZhY2UuCisgKi8KIAotCXN0cnVjdCB1cmIgKmJ1bGtfb3V0OwotCXVuc2ln bmVkIGNoYXIgKmJkYXRhOwogCi0jaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9GRikg fHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTKQotCXN0cnVjdCB1cmIgKmlycV9v dXQ7CQkvKiB1cmIgZm9yIGludGVycnVwdCBvdXQgcmVwb3J0ICovCi0JdW5zaWduZWQgY2hhciAq b2RhdGE7CQkvKiBvdXRwdXQgZGF0YSAqLwotCWRtYV9hZGRyX3Qgb2RhdGFfZG1hOwotCXN0cnVj dCBtdXRleCBvZGF0YV9tdXRleDsKLSNlbmRpZgorc3RhdGljIHNzaXplX3QgeHBhZF9zaG93X3Vp bnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJ Y2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IHRvX3hwYWQoZGV2KTsKKwl1 bnNpZ25lZCBpbnQgdmFsdWU7CisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2xlZnRfZGVhZF96b25l KQorCQl2YWx1ZSA9IHhwYWQtPmxlZnRfZGVhZF96b25lOworCWVsc2UgaWYgKGF0dHIgPT0gJmRl dl9hdHRyX3JpZ2h0X2RlYWRfem9uZSkKKwkJdmFsdWUgPSB4cGFkLT5yaWdodF9kZWFkX3pvbmU7 CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfbGVmdF9zdGlja19saW1pdCkKKwkJdmFsdWUg PSB4cGFkLT5sZWZ0X3N0aWNrX2xpbWl0OworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX3Jp Z2h0X3N0aWNrX2xpbWl0KQorCQl2YWx1ZSA9IHhwYWQtPnJpZ2h0X3N0aWNrX2xpbWl0OworCWVs c2UKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVc biIsIHZhbHVlKTsKK30KIAotI2lmIGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX1hQQURfTEVEUykK LQlzdHJ1Y3QgeHBhZF9sZWQgKmxlZDsKLSNlbmRpZgogCi0JY2hhciBwaHlzWzY0XTsJCQkvKiBw aHlzaWNhbCBkZXZpY2UgcGF0aCAqLworc3RhdGljIHNzaXplX3QgeHBhZF9zdG9yZV91aW50KHN0 cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0 IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IHRv X3hwYWQoZGV2KTsKKwl1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlOworCWlmIChzc2NhbmYoYnVmLCAi JXUiLCAmbmV3X3ZhbHVlKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChhdHRyID09ICZk ZXZfYXR0cl9sZWZ0X2RlYWRfem9uZSkKKwkJc2V0X2RlYWRfem9uZShuZXdfdmFsdWUsICZ4cGFk LT5sZWZ0X2RlYWRfem9uZSwKKwkJCQl4cGFkLT5sZWZ0X3N0aWNrX2xpbWl0KTsKKwllbHNlIGlm IChhdHRyID09ICZkZXZfYXR0cl9yaWdodF9kZWFkX3pvbmUpCisJCXNldF9kZWFkX3pvbmUobmV3 X3ZhbHVlLCAmeHBhZC0+cmlnaHRfZGVhZF96b25lLAorCQkJCXhwYWQtPnJpZ2h0X3N0aWNrX2xp bWl0KTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9sZWZ0X3N0aWNrX2xpbWl0KQorCQlz ZXRfc3RpY2tfbGltaXQobmV3X3ZhbHVlLCAmeHBhZC0+bGVmdF9zdGlja19saW1pdCwKKwkJCQl4 cGFkLT5sZWZ0X2RlYWRfem9uZSk7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcmlnaHRf c3RpY2tfbGltaXQpCisJCXNldF9zdGlja19saW1pdChuZXdfdmFsdWUsICZ4cGFkLT5yaWdodF9z dGlja19saW1pdCwKKwkJCQl4cGFkLT5yaWdodF9kZWFkX3pvbmUpOworCWVsc2UKKwkJcmV0dXJu IC1FSU87CisJcmV0dXJuIHN0cm5sZW4oYnVmLCBQQUdFX1NJWkUpOworfQorCisKK3N0YXRpYyBz c2l6ZV90IHhwYWRfc3RvcmVfYm9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlz dHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB0b194cGFkKGRldik7CisJaW50IG5ld3ZhbHVlOworCWlm IChzc2NhbmYoYnVmLCAiJWQiLCAmbmV3dmFsdWUpICE9IDEpCisJCXJldHVybiAtRUlPOworCQor CWlmIChhdHRyID09ICZkZXZfYXR0cl9ydW1ibGVfZW5hYmxlKQorCQl4cGFkLT5ydW1ibGVfZW5h YmxlID0gKG5ld3ZhbHVlKSA/IDEgOiAwOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2xl ZnRfdHJpZ2dlcl9mdWxsX2F4aXMpCisJCXhwYWQtPmxlZnRfdHJpZ2dlcl9mdWxsX2F4aXMgPSAo bmV3dmFsdWUpID8gMSA6IDA7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcmlnaHRfdHJp Z2dlcl9mdWxsX2F4aXMpCisJCXhwYWQtPnJpZ2h0X3RyaWdnZXJfZnVsbF9heGlzID0gKG5ld3Zh bHVlKSA/IDEgOiAwOworCXJldHVybiBzdHJubGVuKGJ1ZiwgUEFHRV9TSVpFKTsKK30KKworCisv KiByZWFkLW9ubHkgYXR0cmlidXRlcyBzaGFyZSBhIGNvbW1vbiBzdG9yZSBmdW5jdGlvbiB0aGF0 IHJldHVybnMgYW4gZXJyb3IgKi8KK3N0YXRpYyBzc2l6ZV90IHhwYWRfc3RvcmVfcm8oc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hh ciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIC1FSU87Cit9CisKKworc3RhdGljIHNz aXplX3QgeHBhZF9zaG93X2ludChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0g dG9feHBhZChkZXYpOworCWludCB2YWx1ZTsKKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcnVtYmxl X2VuYWJsZSkKKwkJdmFsdWUgPSB4cGFkLT5ydW1ibGVfZW5hYmxlOworCWVsc2UgaWYgKGF0dHIg PT0gJmRldl9hdHRyX2NvbnRyb2xsZXJfbnVtYmVyKQorCQl2YWx1ZSA9IHhwYWQtPmNvbnRyb2xs ZXJfbnVtYmVyOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2NvbnRyb2xsZXJfcHJlc2Vu dCkKKwkJdmFsdWUgPSB4cGFkLT5jb250cm9sbGVyX3ByZXNlbnQ7CisJZWxzZSBpZiAoYXR0ciA9 PSAmZGV2X2F0dHJfY29udHJvbGxlcl90eXBlKQorCQl2YWx1ZSA9IHhwYWQtPmNvbnRyb2xsZXJf dHlwZTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9sZWZ0X3RyaWdnZXJfZnVsbF9heGlz KQorCQl2YWx1ZSA9IHhwYWQtPmxlZnRfdHJpZ2dlcl9mdWxsX2F4aXM7CisJZWxzZSBpZiAoYXR0 ciA9PSAmZGV2X2F0dHJfcmlnaHRfdHJpZ2dlcl9mdWxsX2F4aXMpCisJCXZhbHVlID0geHBhZC0+ cmlnaHRfdHJpZ2dlcl9mdWxsX2F4aXM7CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4g c25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdmFsdWUpOworfQorCisKK3N0YXRpYyBz c2l6ZV90IHhwYWRfc2hvd19pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0g dG9feHBhZChkZXYpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCB4 cGFkLT5jb250cm9sbGVyX3VuaXF1ZV9pZCk7Cit9CisKKworLyogZW5kIG9mIHN5c2ZzIGludGVy ZmFjZSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJbnB1dCBzZWN0aW9uICovCisK Ky8qCXhwYWRfaW5pdF9jb250cm9sbGVyCisgKgorICoJUGVyZm9ybXMgY29udHJvbGxlciBzZXR1 cCBiYXNlZCBvbiBjb250cm9sbGVyIHR5cGUuCisgKgorICoJTk9URTogeHBhZC0+Y29udHJvbGxl cl9kYXRhLT5jb250cm9sbGVyX3R5cGUgbmVlZHMgdG8gYmUgc2V0IEJFRk9SRQorICoJY2FsbGlu ZyB0aGlzIGZ1bmN0aW9uIQorICovCisKK3N0YXRpYyB2b2lkIHhwYWRfaW5pdF9jb250cm9sbGVy KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKK3sKKwlzZXRfc3RpY2tfbGltaXQoWFNUSUNLX0xJTUlU X0RFRkFVTFQsICZ4cGFkLT5sZWZ0X3N0aWNrX2xpbWl0LAorCQkJeHBhZC0+bGVmdF9kZWFkX3pv bmUpOworCXNldF9zdGlja19saW1pdChYU1RJQ0tfTElNSVRfREVGQVVMVCwgJnhwYWQtPnJpZ2h0 X3N0aWNrX2xpbWl0LAorCQkJeHBhZC0+cmlnaHRfZGVhZF96b25lKTsKKwlzZXRfZGVhZF96b25l KFhERUFEX1pPTkVfREVGQVVMVCwgJnhwYWQtPmxlZnRfZGVhZF96b25lLAorCQkJeHBhZC0+bGVm dF9zdGlja19saW1pdCk7CisJc2V0X2RlYWRfem9uZShYREVBRF9aT05FX0RFRkFVTFQsICZ4cGFk LT5yaWdodF9kZWFkX3pvbmUsCisJCQl4cGFkLT5yaWdodF9zdGlja19saW1pdCk7CisJeHBhZC0+ bGVmdF90cmlnZ2VyX2Z1bGxfYXhpcyA9IFhGVUxMX1RSSUdHRVJfQVhJU19ERUZBVUxUOworCXhw YWQtPnJpZ2h0X3RyaWdnZXJfZnVsbF9heGlzID0gWEZVTExfVFJJR0dFUl9BWElTX0RFRkFVTFQ7 CisKKwlpZiAoeHBhZC0+Y29udHJvbGxlcl90eXBlID09IFhDT05UUk9MTEVSX1RZUEVfR1VJVEFS KQorCQl4cGFkLT5ydW1ibGVfZW5hYmxlID0gMDsKKwllbHNlIGlmICh4cGFkLT5jb250cm9sbGVy X3R5cGUgPT0gWENPTlRST0xMRVJfVFlQRV9EQU5DRV9QQUQpCisJCXhwYWQtPnJ1bWJsZV9lbmFi bGUgPSAwOworCWVsc2UKKwkJeHBhZC0+cnVtYmxlX2VuYWJsZSA9IDE7Cit9CisKKworLyoKKyAq CXhwYWRfd29ya19jb250cm9sbGVyCisgKgorICoJU3VibWl0cyBjb21tYW5kIHRvIHNldCBwYWQg bnVtYmVyIG9uIExFRCBkaXNwbGF5IG9mIHdpcmVsZXNzIDM2MAorICoJY29udHJvbGxlcnMsIGFz IHdlbGwgYXMgb25saW5lL29mZmxpbmUgZXZlbnQuIFRoZSBzaGFyZWQgd29ya3F1ZXVlCisgKiAg ICAgIGlzIHVzZWQgZm9yIHRoaXMgcHVycG9zZSwgc28gdGhhdCB0aGUgaW50ZXJydXB0IGhhbmRs ZXIgaXMga2VwdCBzaG9ydC4KKyAqLworCitzdGF0aWMgdm9pZCB4cGFkX3dvcmtfY29udHJvbGxl cihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gY29u dGFpbmVyX29mKHcsIHN0cnVjdCB1c2JfeHBhZCwgd29yayk7CisJaWYgKHhwYWQtPmNvbnRyb2xs ZXJfcHJlc2VudCkgeworCQl4cGFkX3NlbmRfbGVkX2NvbW1hbmQoeHBhZCwgeHBhZC0+Y29udHJv bGxlcl9udW1iZXIgKyAxKTsKKwkJa29iamVjdF91ZXZlbnQoJnhwYWQtPmRldi0+ZGV2LmtvYmos IEtPQkpfT05MSU5FKTsKKwl9IGVsc2UgeworCQlrb2JqZWN0X3VldmVudCgmeHBhZC0+ZGV2LT5k ZXYua29iaiwgS09CSl9PRkZMSU5FKTsKKwl9Cit9CisKKworLyoKKyAqCXhwYWRfcHJvY2Vzc19z dGlja3MKKyAqCisgKglIYW5kbGVzIHN0aWNrIGlucHV0LCBhY2NvdW50aW5nIGZvciBkZWFkIHpv bmVzIGFuZCBzcXVhcmUgYXhlcy4gQmFzZWQKKyAqCW9uIHRoZSBvcmlnaW5hbCBoYW5kbGVycyBm b3IgdGhlIFhib3ggYW5kIFhib3ggMzYwIGluCisgKgl4cGFkX3Byb2Nlc3NfcGFja2V0IGFuZCB4 cGFkMzYwX3Byb2Nlc3NfcGFja2V0LCBidXQgdW5pZmllZCB0byBhdm9pZAorICoJZHVwbGljYXRp b24uCisgKgorICoJV2hlbmV2ZXIgYSBkZWFkIHpvbmUgaXMgdXNlZCwgZWFjaCBheGlzIGlzIHNj YWxlZCBzbyB0aGF0IG1vdmluZyB0aGUKKyAqCXN0aWNrIHNsaWdodGx5IG91dCBvZiB0aGUgZGVh ZCB6b25lIHJhbmdlIHJlc3VsdHMgaW4gYSBsb3cgYXhpcworICoJdmFsdWUgaW4ganN0ZXN0KDEp LCB3aGlsZSBtb3ZpbmcgdGhlIHN0aWNrIHRvIHRoZSBtYXhpbXVtIHBvc2l0aW9uCisgKglhbG9u ZyBhbnkgYXhpcyBzdGlsbCByZXN1bHRzIGluIDMyNzY3LgorICoKKyAqCUluIG9yZGVyIHRvIHBy b3ZpZGUgdGhlIGFiaWxpdHkgdG8gbWFwIGlucHV0cyB0byBhIHNxdWFyZSBheGlzICh1c2VkCisg KglieSBvbGRlciBnYW1lcyksIHRoZSBsZWZ0X3N0aWNrX2xpbWl0IGFuZCByaWdodF9zdGlja19s aW1pdCBjYW4gYmUKKyAqCXNldC4gVGhlc2UgbGltaXRzIHNwZWNpZnkgYXQgd2hhdCBwb2ludCBp biB0aGUgcmF3IGlucHV0IGNvb3JkaW5hdGVzCisgKglhbiBheGlzIGlzIHJlcG9ydGVkIHRvIGJl IGF0IG1heGltdW0gdmFsdWUgKDMyNzY3IG9yIC0zMjc2NykuCisgKgorICoJQm90aCB0aGUgZGVh ZCB6b25lIGFuZCBzdGljayBsaW1pdCBhbGdvcml0aG1zIGFyZSBpbXBsZW1lbnRlZAorICoJdG9n ZXRoZXIgYXMgYSBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uIGZyb20gImVmZmVjdGl2ZSBjb29y ZGluYXRlcyIKKyAqCW9udG8gdGhlIG91dHB1dCBjb29yZGluYXRlcyAod2hpY2ggaGF2ZSBhYnNv bHV0ZSB2YWx1ZXMgZnJvbSAwIHRvCisgKgkzMjc2NyBhbmQgYXJlIHBvc2l0aXZlIG9yIG5lZ2F0 aXZlIGJhc2VkIG9uIGRpcmVjdGlvbikuIEVmZmVjdGl2ZQorICoJY29vcmRpbmF0ZXMgYXJlIGRl ZmluZWQgYXMgdGhvc2UgaW5wdXQgdmFsdWVzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbgorICoJdGhl IGRlYWQgem9uZSBidXQgbGVzcyB0aGFuIHRoZSBzdGljayBsaW1pdCBvbiB0aGUgYXhpcyBpbiBx dWVzdGlvbi4KKyAqCisgKglEQU5HRVI6IEFsbCBkZW5vbWluYXRvciB2YWx1ZXMgaW4gZGl2aXNp b24gb3BlcmF0aW9ucyBNVVNUIGJlIGNoZWNrZWQKKyAqCWZvciBub24temVybyBjb25kaXRpb24u IERpdmlkaW5nIGJ5IHplcm8gaW5zaWRlIHRoZSBrZXJuZWwgY2FuIGNhdXNlCisgKglhIHN5c3Rl bSBkZWFkbG9jay4KKyAqLworCitzdGF0aWMgdm9pZCB4cGFkX3Byb2Nlc3Nfc3RpY2tzKHN0cnVj dCB1c2JfeHBhZCAqeHBhZCwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5wdXRf ZGV2ICpkZXYgPSB4cGFkLT5kZXY7CisJaW50IGNvb3Jkc1s0XTsgICAgLyogeCwgeSwgcngsIHJ5 ICovCisJaW50IHhfb2Zmc2V0LCB5X29mZnNldCwgcnhfb2Zmc2V0LCByeV9vZmZzZXQ7CisJaW50 IGM7CisJaW50IHJhbmdlOworCWludCBhYnNfbWFnbml0dWRlLCBhZGp1c3RlZF9tYWduaXR1ZGUs IGRpZmZlcmVuY2UsIHNjYWxlX2ZyYWN0aW9uOworCWludCBkZWFkX3pvbmVbMl0sIHN0aWNrX2xp bWl0WzJdOworCisJZGVhZF96b25lWzBdID0geHBhZC0+bGVmdF9kZWFkX3pvbmU7CisJZGVhZF96 b25lWzFdID0geHBhZC0+cmlnaHRfZGVhZF96b25lOworCXN0aWNrX2xpbWl0WzBdID0geHBhZC0+ bGVmdF9zdGlja19saW1pdDsKKwlzdGlja19saW1pdFsxXSA9IHhwYWQtPnJpZ2h0X3N0aWNrX2xp bWl0OworCisJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gpIHsKKwkJeF9vZmZzZXQgPSAx MjsKKwkJeV9vZmZzZXQgPSAxNDsKKwkJcnhfb2Zmc2V0ID0gMTY7CisJCXJ5X29mZnNldCA9IDE4 OworCX0gZWxzZSB7CisJCXhfb2Zmc2V0ID0gNjsKKwkJeV9vZmZzZXQgPSA4OworCQlyeF9vZmZz ZXQgPSAxMDsKKwkJcnlfb2Zmc2V0ID0gMTI7CisJfQorCisJY29vcmRzWzBdID0gKF9fczE2KSBs ZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgeF9vZmZzZXQpKTsKKwljb29yZHNbMV0gPSB+ KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgeV9vZmZzZXQpKTsKKwljb29y ZHNbMl0gPSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyByeF9vZmZzZXQp KTsKKwljb29yZHNbM10gPSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsg cnlfb2Zmc2V0KSk7CisKKwkvKiBBZGp1c3RtZW50IGZvciBkZWFkIHpvbmUgYW5kIHNxdWFyZSBh eGlzICovCisJZm9yIChjID0gMDsgYyA8IDQ7IGMrKykgeworCQlhYnNfbWFnbml0dWRlID0gKGlu dCkgY29vcmRzW2NdOworCQlpZiAoYWJzX21hZ25pdHVkZSA8IDApCisJCQlhYnNfbWFnbml0dWRl ID0gLWFic19tYWduaXR1ZGU7CisJCWFkanVzdGVkX21hZ25pdHVkZSA9IGFic19tYWduaXR1ZGU7 CisKKwkJcmFuZ2UgPSAoc3RpY2tfbGltaXRbYy8yXSAtIGRlYWRfem9uZVtjLzJdKTsKKworCQlp ZiAoYWJzX21hZ25pdHVkZSA+PSBzdGlja19saW1pdFtjLzJdKSB7CisJCQlhZGp1c3RlZF9tYWdu aXR1ZGUgPSAzMjc2NzsKKwkJfSBlbHNlIGlmIChhYnNfbWFnbml0dWRlIDw9IGRlYWRfem9uZVtj LzJdKSB7CisJCQlhZGp1c3RlZF9tYWduaXR1ZGUgPSAwOworCQl9IGVsc2UgaWYgKHJhbmdlID4g MCkgeworCQkJZGlmZmVyZW5jZSA9IDMyNzY3IC0gcmFuZ2U7CisJCQlpZiAoZGlmZmVyZW5jZSkg eworCQkJCS8qIERJVklTSU9OOiBkaWZmZXJlbmNlIG5vbi16ZXJvICovCisJCQkJc2NhbGVfZnJh Y3Rpb24gPSByYW5nZSAvIGRpZmZlcmVuY2U7CisJCQkJYWRqdXN0ZWRfbWFnbml0dWRlID0KKwkJ CQkJYWJzX21hZ25pdHVkZSAtIGRlYWRfem9uZVtjLzJdOworCisJCQkJLyogQXBwcm94aW1hdGUg ZmxvYXRpbmctcG9pbnQgZGl2aXNpb24gd2l0aCBhCisJCQkJICogImNhdGNoLXVwIiBzY2FsaW5n IGFsZ29yaXRobSB0aGF0IGFkZHMgYmFjaworCQkJCSAqIHRvIHRoZSBhZGp1c3RlZF9tYWduaXR1 ZGUgYmFzZWQgb24gZGlzdGFuY2UKKwkJCQkgKiBmcm9tIHRoZSBvcmlnaW4gKDAgaW4gYWRqdXN0 ZWQgY29vcmRpbmF0ZXMpLgorCQkJCSAqIElmIHRoZSByYW5nZSAvIGRpZmZlcmVuY2UgaXMgYXQg bGVhc3QgMSwKKwkJCQkgKiB0aGVuIDEgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGFkanVzdGVk CisJCQkJICogbWFnbml0dWRlIGZvciBldmVyeSBzY2FsZV9mcmFjdGlvbiB1bml0cworCQkJCSAq IGZyb20gdGhlIG9yaWdpbi4gSWYgdGhlIHJhbmdlIC8gZGlmZmVyZW5jZQorCQkJCSAqIGlzIGxl c3MgdGhhbiAxICgwIGluIGludGVnZXIgZGl2aXNpb24pLAorCQkJCSAqIHRoZW4gZGl2aWRlIHRo ZSBkaWZmZXJlbmNlIGJ5IHRoZSByYW5nZSB0bworCQkJCSAqIG9idGFpbiB0aGUgbnVtYmVyIG9m IHVuaXRzIHRvIGFkZCBwZXIgdW5pdAorCQkJCSAqIGZyb20gdGhlIGFkanVzdGVkIG9yaWdpbi4K KwkJCQkgKi8KKwkJCQlpZiAoc2NhbGVfZnJhY3Rpb24pIHsKKwkJCQkJLyogRElWSVNJT046IHNj YWxlX2ZyYWN0aW9uIG5vbi16ZXJvICovCisJCQkJCWFkanVzdGVkX21hZ25pdHVkZSArPQorCQkJ CQkJYWRqdXN0ZWRfbWFnbml0dWRlCisJCQkJCQkvIHNjYWxlX2ZyYWN0aW9uOworCQkJCX0gZWxz ZSB7CisJCQkJCS8qIERJVklTSU9OOiByYW5nZSBub24temVybyAqLworCQkJCQlzY2FsZV9mcmFj dGlvbiA9IGRpZmZlcmVuY2UgLyByYW5nZTsKKwkJCQkJYWRqdXN0ZWRfbWFnbml0dWRlICs9CisJ CQkJCQlhZGp1c3RlZF9tYWduaXR1ZGUKKwkJCQkJCSogc2NhbGVfZnJhY3Rpb247CisJCQkJfQor CQkJCWlmIChhZGp1c3RlZF9tYWduaXR1ZGUgPiAzMjc2NykKKwkJCQkJYWRqdXN0ZWRfbWFnbml0 dWRlID0gMzI3Njc7CisJCQl9CisJCX0KKwkJY29vcmRzW2NdID0gKGNvb3Jkc1tjXSA8IDApID8K KwkJCQktYWRqdXN0ZWRfbWFnbml0dWRlIDogYWRqdXN0ZWRfbWFnbml0dWRlOworCX0KKworCWlu cHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgKF9fczE2KSBjb29yZHNbMF0pOworCWlucHV0X3Jl cG9ydF9hYnMoZGV2LCBBQlNfWSwgKF9fczE2KSBjb29yZHNbMV0pOworCWlucHV0X3JlcG9ydF9h YnMoZGV2LCBBQlNfUlgsIChfX3MxNikgY29vcmRzWzJdKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRl diwgQUJTX1JZLCAoX19zMTYpIGNvb3Jkc1szXSk7Cit9CiAKLQlpbnQgZHBhZF9tYXBwaW5nOwkJ LyogbWFwIGQtcGFkIHRvIGJ1dHRvbnMgb3IgdG8gYXhlcyAqLwotCWludCB4dHlwZTsJCQkvKiB0 eXBlIG9mIHhib3ggZGV2aWNlICovCi19OwogCiAvKgogICoJeHBhZF9wcm9jZXNzX3BhY2tldApA QCAtMjUzLDIxICszNjQsMTMgQEAKICAqCSBodHRwOi8vZXVjLmpwL3BlcmlwaHMveGJveC1jb250 cm9sbGVyLmphLmh0bWwKICAqLwogCi1zdGF0aWMgdm9pZCB4cGFkX3Byb2Nlc3NfcGFja2V0KHN0 cnVjdCB1c2JfeHBhZCAqeHBhZCwgdTE2IGNtZCwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3N0YXRp YyB2b2lkIHhwYWRfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4cGFkLCB1MTYgY21k LAorCQl1bnNpZ25lZCBjaGFyICpkYXRhKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHhw YWQtPmRldjsKIAotCS8qIGxlZnQgc3RpY2sgKi8KLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJT X1gsCi0JCQkgKF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTIpKSk7Ci0J aW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLAotCQkJIH4oX19zMTYpIGxlMTZfdG9fY3B1cCgo X19sZTE2ICopKGRhdGEgKyAxNCkpKTsKLQotCS8qIHJpZ2h0IHN0aWNrICovCi0JaW5wdXRfcmVw b3J0X2FicyhkZXYsIEFCU19SWCwKLQkJCSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICop KGRhdGEgKyAxNikpKTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JZLAotCQkJIH4oX19z MTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxOCkpKTsKKwkvKiBsZWZ0IGFuZCBy aWdodCBzdGlja3MgKi8KKwl4cGFkX3Byb2Nlc3Nfc3RpY2tzKHhwYWQsIGRhdGEpOwogCiAJLyog dHJpZ2dlcnMgbGVmdC9yaWdodCAqLwogCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWiwgZGF0 YVsxMF0pOwpAQCAtMzA1LDYgKzQwOCw3IEBACiAJaW5wdXRfc3luYyhkZXYpOwogfQogCisKIC8q CiAgKgl4cGFkMzYwX3Byb2Nlc3NfcGFja2V0CiAgKgpAQCAtMzE2LDkgKzQyMCwxMCBAQAogICov CiAKIHN0YXRpYyB2b2lkIHhwYWQzNjBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4 cGFkLAotCQkJCSAgIHUxNiBjbWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCisJCXUxNiBjbWQsIHVu c2lnbmVkIGNoYXIgKmRhdGEpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0geHBhZC0+ZGV2 OworCWludCB0cmlnZ2VyOwogCiAJLyogZGlnaXRhbCBwYWQgKi8KIAlpZiAoeHBhZC0+ZHBhZF9t YXBwaW5nID09IE1BUF9EUEFEX1RPX0FYRVMpIHsKQEAgLTM1MSwyNSArNDU2LDU0IEBACiAJaW5w dXRfcmVwb3J0X2tleShkZXYsIEJUTl9UUiwJZGF0YVszXSAmIDB4MDIpOwogCWlucHV0X3JlcG9y dF9rZXkoZGV2LCBCVE5fTU9ERSwJZGF0YVszXSAmIDB4MDQpOwogCi0JLyogbGVmdCBzdGljayAq LwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwKLQkJCSAoX19zMTYpIGxlMTZfdG9fY3B1 cCgoX19sZTE2ICopKGRhdGEgKyA2KSkpOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwK LQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgOCkpKTsKLQotCS8q IHJpZ2h0IHN0aWNrICovCi0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWCwKLQkJCSAoX19z MTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxMCkpKTsKLQlpbnB1dF9yZXBvcnRf YWJzKGRldiwgQUJTX1JZLAotCQkJIH4oX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRh dGEgKyAxMikpKTsKKwkvKiBsZWZ0IGFuZCByaWdodCBzdGlja3MgKi8KKwl4cGFkX3Byb2Nlc3Nf c3RpY2tzKHhwYWQsIGRhdGEpOwogCi0JLyogdHJpZ2dlcnMgbGVmdC9yaWdodCAqLwotCWlucHV0 X3JlcG9ydF9hYnMoZGV2LCBBQlNfWiwgZGF0YVs0XSk7Ci0JaW5wdXRfcmVwb3J0X2FicyhkZXYs IEFCU19SWiwgZGF0YVs1XSk7CisJLyogdHJpZ2dlcnMgbGVmdC9yaWdodDogd2hlbiBmdWxsX2F4 aXMgaXMgbm90IGVuYWJsZWQsIHJlcG9ydCB0aGUKKwkgKiBhYnNvbHV0ZSBkYXRhIHZhbHVlICgw LTI1NSksIHdoaWNoIHdpbGwgYmUgbWFwcGVkIG9udG8gWzAsMzI3NjddLgorCSAqIElmIGZ1bGwg YXhpcyBpcyBlbmFibGVkLCBtYXAgdGhlIGRhdGEgdmFsdWUgb250byBbLTI1NToyNTVdLCBzbwor CSAqIHRoYXQgdGhlIGlucHV0IHN1YnN5c3RlbSBtYXBzIGl0IG9udG8gWy0zMjc2NzozMjc2N10u ICovCisJdHJpZ2dlciA9IGRhdGFbNF07CisJaWYgKHhwYWQtPmxlZnRfdHJpZ2dlcl9mdWxsX2F4 aXMpCisJCXRyaWdnZXIgPSAoMiAqIHRyaWdnZXIpIC0gMjU1OworCWlucHV0X3JlcG9ydF9hYnMo ZGV2LCBBQlNfWiwgdHJpZ2dlcik7CisJdHJpZ2dlciA9IGRhdGFbNV07CisJaWYgKHhwYWQtPnJp Z2h0X3RyaWdnZXJfZnVsbF9heGlzKQorCQl0cmlnZ2VyID0gKDIgKiB0cmlnZ2VyKSAtIDI1NTsK KwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JaLCB0cmlnZ2VyKTsKIAogCWlucHV0X3N5bmMo ZGV2KTsKIH0KIAorCitzdGF0aWMgdm9pZCB4cGFkMzYwd19pZGVudGlmeV9jb250cm9sbGVyKHN0 cnVjdCB1c2JfeHBhZCAqeHBhZCwKKwkJdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwl1MzIgaWQ7 CisJaW50IGk7CisKKwlzbnByaW50Zih4cGFkLT5jb250cm9sbGVyX3VuaXF1ZV9pZCwgMTcsCisJ CSIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCIsCisJCWRhdGFbOF0sIGRhdGFbOV0s IGRhdGFbMTBdLCBkYXRhWzExXSwgZGF0YVsxMl0sIGRhdGFbMTNdLAorCQlkYXRhWzE0XSwgZGF0 YVsxNV0pOworCisJLyogSWRlbnRpZnkgY29udHJvbGxlciB0eXBlICovCisJaWQgPSAodTMyKSAq KGRhdGEgKyAyMik7CisJeHBhZC0+Y29udHJvbGxlcl90eXBlID0gWENPTlRST0xMRVJfVFlQRV9P VEhFUjsKKwlmb3IgKGkgPSAwOyB3MzYwX2lkW2ldLmlkX2J5dGVzOyBpKyspIHsKKwkJaWYgKGlk ID09IHczNjBfaWRbaV0uaWRfYnl0ZXMpIHsKKwkJCXhwYWQtPmNvbnRyb2xsZXJfdHlwZSA9CisJ CQkJdzM2MF9pZFtpXS5jb250cm9sbGVyX3R5cGU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlm IChpZCA9PSBYQ09OVFJPTExFUl9UWVBFX09USEVSKQorCQlwcmludGsoS0VSTl9JTkZPCisJCQki eHBhZDogdW5rbm93biB3aXJlbGVzcyBjb250cm9sbGVyIHR5cGU6ICUwOHhcbiIsIGlkKTsKK30K KworCiAvKgogICogeHBhZDM2MHdfcHJvY2Vzc19wYWNrZXQKICAqCkBAIC0zNzksMzAgKzUxMyw1 MyBAQAogICogQnl0ZS5CaXQKICAqIDAwLjEgLSBTdGF0dXMgY2hhbmdlOiBUaGUgY29udHJvbGxl ciBvciBoZWFkc2V0IGhhcyBjb25uZWN0ZWQvZGlzY29ubmVjdGVkCiAgKiAgICAgICAgICAgICAg ICAgICAgICAgQml0cyAwMS43IGFuZCAwMS42IGFyZSB2YWxpZAorICogMDEuZiAtIFNvbWUga2lu ZCBvZiB1bmlxdWUgaWRlbnRpZmllciBtZXNzYWdlIChzZWUgYWJvdmUpCiAgKiAwMS43IC0gQ29u dHJvbGxlciBwcmVzZW50CiAgKiAwMS42IC0gSGVhZHNldCBwcmVzZW50CiAgKiAwMS4xIC0gUGFk IHN0YXRlIChCeXRlcyA0KykgdmFsaWQKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgeHBhZDM2MHdf cHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4cGFkLCB1MTYgY21kLCB1bnNpZ25lZCBj aGFyICpkYXRhKQorc3RhdGljIHZvaWQgeHBhZDM2MHdfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHVz Yl94cGFkICp4cGFkLCB1MTYgY21kLAorCQl1bnNpZ25lZCBjaGFyICpkYXRhKQogeworCWludCBw YWRudW0gPSAwOworCiAJLyogUHJlc2VuY2UgY2hhbmdlICovCiAJaWYgKGRhdGFbMF0gJiAweDA4 KSB7CisJCXBhZG51bSA9IHhwYWQtPmNvbnRyb2xsZXJfbnVtYmVyOwogCQlpZiAoZGF0YVsxXSAm IDB4ODApIHsKLQkJCXhwYWQtPnBhZF9wcmVzZW50ID0gMTsKLQkJCXVzYl9zdWJtaXRfdXJiKHhw YWQtPmJ1bGtfb3V0LCBHRlBfQVRPTUlDKTsKLQkJfSBlbHNlCi0JCQl4cGFkLT5wYWRfcHJlc2Vu dCA9IDA7CisJCQkvKiBpZ25vcmUgZHVwbGljYXRlcyAqLworCQkJaWYgKCF4cGFkLT5jb250cm9s bGVyX3ByZXNlbnQpIHsKKwkJCQl4cGFkLT5jb250cm9sbGVyX3ByZXNlbnQgPSAxOworCQkJCXNj aGVkdWxlX3dvcmsoJnhwYWQtPndvcmspOworCQkJfQorCQl9IGVsc2UgeworCQkJeHBhZC0+Y29u dHJvbGxlcl9wcmVzZW50ID0gMDsKKwkJCXhwYWQtPmNvbnRyb2xsZXJfdW5pcXVlX2lkWzBdID0g J1wwJzsKKwkJCXhwYWQtPmNvbnRyb2xsZXJfdHlwZSA9IFhDT05UUk9MTEVSX1RZUEVfTk9ORTsK KwkJCS8qIFdlIGRvIE5PVCBmbHVzaCB0aGUgc2hhcmVkIHdvcmtxdWV1ZSBoZXJlLCBiZWNhdXNl CisJCQkgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBoYW5kbGVy LgorCQkJICogSWYgdGhlIGNvbnRyb2xsZXIgaGFzIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSByZWNl aXZlciwKKwkJCSAqIHRoZSB3b3JzdCB0aGF0IHdpbGwgaGFwcGVuIGZyb20gdGhlIHdvcmsgdGFz ayBydW5uaW5nCisJCQkgKiBpcyB0aGF0IGEgcGFja2V0IHdpbGwgYmUgdHJhbnNtaXR0ZWQgZnJv bSB0aGUKKwkJCSAqIHJlY2VpdmVyIHRvIGEgbm9uLWxpc3RlbmluZyBjb250cm9sbGVyCisJCQkg Ki8KKwkJfQogCX0KIAotCS8qIFZhbGlkIHBhZCBkYXRhICovCi0JaWYgKCEoZGF0YVsxXSAmIDB4 MSkpCi0JCXJldHVybjsKLQotCXhwYWQzNjBfcHJvY2Vzc19wYWNrZXQoeHBhZCwgY21kLCAmZGF0 YVs0XSk7CisJLyogUHJvY2VzcyBwYWNrZXRzIGFjY29yZGluZyB0byB0eXBlICovCisJaWYgKGRh dGFbMV0gPT0gMHgwZikgeworCQlpZiAoIXhwYWQtPmNvbnRyb2xsZXJfdW5pcXVlX2lkWzBdKSB7 CisJCQl4cGFkMzYwd19pZGVudGlmeV9jb250cm9sbGVyKHhwYWQsIGRhdGEpOworCQkJeHBhZF9p bml0X2NvbnRyb2xsZXIoeHBhZCk7CisJCX0KKwl9IGVsc2UgaWYgKGRhdGFbMV0gJiAweDEpIHsK KwkJeHBhZDM2MF9wcm9jZXNzX3BhY2tldCh4cGFkLCBjbWQsICZkYXRhWzRdKTsKKwl9CiB9CiAK Kwogc3RhdGljIHZvaWQgeHBhZF9pcnFfaW4oc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1 c2JfeHBhZCAqeHBhZCA9IHVyYi0+Y29udGV4dDsKQEAgLTQzOSwzMCArNTk2LDIyIEBACiAJfQog CiBleGl0OgotCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCXJl dHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKLQkJ ZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQllcnIo IiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKIAkJICAgICBfX2Z1 bmNfXywgcmV0dmFsKTsKIH0KIAotc3RhdGljIHZvaWQgeHBhZF9idWxrX291dChzdHJ1Y3QgdXJi ICp1cmIpCi17Ci0Jc3dpdGNoICh1cmItPnN0YXR1cykgewotCWNhc2UgMDoKLQkJLyogc3VjY2Vz cyAqLwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVOT0VOVDoKLQljYXNl IC1FU0hVVERPV046Ci0JCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0J CWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywg dXJiLT5zdGF0dXMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkYmcoIiVzIC0gbm9uemVybyB1 cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7Ci0JfQotfQor CisvKiBlbmQgaW5wdXQgc2VjdGlvbiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJ UlEgb3V0cHV0IHNlY3Rpb246IHByZXNlbnQgaW4gb2JqZWN0IGNvZGUgb25seSBpZiB0aGUgZm9y Y2UgZmVlZGJhY2sgb3IKKyAqIExFRCBpbnRlcmZhY2UgaXMgZW5hYmxlZC4KKyAqLwogCiAjaWYg ZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9GRikgfHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJ Q0tfWFBBRF9MRURTKQorCiBzdGF0aWMgdm9pZCB4cGFkX2lycV9vdXQoc3RydWN0IHVyYiAqdXJi KQogewogCWludCByZXR2YWwsIHN0YXR1czsKQEAgLTQ3MCwyMCArNjE5LDIwIEBACiAJc3RhdHVz ID0gdXJiLT5zdGF0dXM7CiAKIAlzd2l0Y2ggKHN0YXR1cykgewotCQljYXNlIDA6CisJY2FzZSAw OgogCQkvKiBzdWNjZXNzICovCiAJCWJyZWFrOwotCQljYXNlIC1FQ09OTlJFU0VUOgotCQljYXNl IC1FTk9FTlQ6Ci0JCWNhc2UgLUVTSFVURE9XTjoKLQkJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0 ZWQsIGNsZWFuIHVwICovCi0JCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0 dXM6ICVkIiwKLQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKLQkJCXJldHVybjsKLQkJZGVmYXVsdDoK LQkJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKLQkJCQlfX2Z1 bmNfXywgc3RhdHVzKTsKLQkJCWdvdG8gZXhpdDsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2Ug LUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQs IGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czog JWQiLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmco IiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQlfX2Z1bmNfXywgc3Rh dHVzKTsKKwkJZ290byBleGl0OwogCX0KIAogZXhpdDoKQEAgLTQ5MywxMiArNjQyLDEzIEBACiAJ CSAgICBfX2Z1bmNfXywgcmV0dmFsKTsKIH0KIAorCiBzdGF0aWMgaW50IHhwYWRfaW5pdF9vdXRw dXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsK IAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2lycV9vdXQ7CiAJaW50IGVycm9y ID0gLUVOT01FTTsKIAotCWlmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwKQorCWlmICgo eHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkgJiYgKHhwYWQtPnh0eXBlICE9IFhUWVBFX1hC T1gzNjBXKSkKIAkJcmV0dXJuIDA7CiAKIAl4cGFkLT5vZGF0YSA9IHVzYl9idWZmZXJfYWxsb2Mo eHBhZC0+dWRldiwgWFBBRF9QS1RfTEVOLApAQCAtNTE0LDcgKzY2NCw4IEBACiAKIAllcF9pcnFf b3V0ID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFsxXS5kZXNjOwogCXVzYl9maWxs X2ludF91cmIoeHBhZC0+aXJxX291dCwgeHBhZC0+dWRldiwKLQkJCSB1c2Jfc25kaW50cGlwZSh4 cGFkLT51ZGV2LCBlcF9pcnFfb3V0LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSB1c2Jfc25kaW50 cGlwZSh4cGFkLT51ZGV2LAorCQkJCWVwX2lycV9vdXQtPmJFbmRwb2ludEFkZHJlc3MpLAogCQkJ IHhwYWQtPm9kYXRhLCBYUEFEX1BLVF9MRU4sCiAJCQkgeHBhZF9pcnFfb3V0LCB4cGFkLCBlcF9p cnFfb3V0LT5iSW50ZXJ2YWwpOwogCXhwYWQtPmlycV9vdXQtPnRyYW5zZmVyX2RtYSA9IHhwYWQt Pm9kYXRhX2RtYTsKQEAgLTUyNiw0NSArNjc3LDgyIEBACiAgZmFpbDE6CXJldHVybiBlcnJvcjsK IH0KIAorCiBzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0cHV0KHN0cnVjdCB1c2JfeHBhZCAqeHBh ZCkKIHsKLQlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MCkKKwlpZiAoKHhwYWQtPnh0 eXBlID09IFhUWVBFX1hCT1gzNjApIHx8ICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykp CiAJCXVzYl9raWxsX3VyYih4cGFkLT5pcnFfb3V0KTsKIH0KIAorCiBzdGF0aWMgdm9pZCB4cGFk X2RlaW5pdF9vdXRwdXQoc3RydWN0IHVzYl94cGFkICp4cGFkKQogewotCWlmICh4cGFkLT54dHlw ZSA9PSBYVFlQRV9YQk9YMzYwKSB7CisJaWYgKCh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYw KSB8fCAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MFcpKSB7CiAJCXVzYl9mcmVlX3VyYih4 cGFkLT5pcnFfb3V0KTsKIAkJdXNiX2J1ZmZlcl9mcmVlKHhwYWQtPnVkZXYsIFhQQURfUEtUX0xF TiwKIAkJCQl4cGFkLT5vZGF0YSwgeHBhZC0+b2RhdGFfZG1hKTsKIAl9CiB9CisKICNlbHNlCi1z dGF0aWMgaW50IHhwYWRfaW5pdF9vdXRwdXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHN0 cnVjdCB1c2JfeHBhZCAqeHBhZCkgeyByZXR1cm4gMDsgfQorLyogRHVtbXkgaW1wbGVtZW50YXRp b25zIGZvciB4cGFkX3Byb2JlIGFuZCB4cGFkX2Rpc2Nvbm5lY3QgKi8KK3N0YXRpYyBpbnQgeHBh ZF9pbml0X291dHB1dChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Ziwgc3RydWN0IHVzYl94cGFk ICp4cGFkKQorCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyB2b2lkIHhwYWRfZGVpbml0X291dHB1dChz dHJ1Y3QgdXNiX3hwYWQgKnhwYWQpIHt9CiBzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0cHV0KHN0 cnVjdCB1c2JfeHBhZCAqeHBhZCkge30KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0pPWVNUSUNL X1hQQURfRkYKKy8qIGVuZCBvdXRwdXQgc2VjdGlvbiAqLworCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisKKy8qIEZvcmNlIGZlZWRiYWNrIChydW1ibGUgZWZmZWN0KSBzZWN0aW9uLCBkZXBlbmRz IG9uIENPTkZJR19KT1lTVElDS19YUEFEX0ZGICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19KT1lT VElDS19YUEFEX0ZGKQorCisvKiBSdW1ibGUgc3VwcG9ydCBmb3Igd2lyZWxlc3MgY29udHJvbGxl cnMgZm9sbG93cyBwcm90b2NvbCBkZXNjcmlwdGlvbgorICogZnJvbSB4Ym94ZHJ2IHVzZXJzcGFj ZSBkcml2ZXI6CisgKiAgICAgICBodHRwOi8vcGluZ3VzLnNldWwub3JnL35ncnVtYmVsL3hib3hk cnYvCisgKi8KIHN0YXRpYyBpbnQgeHBhZF9wbGF5X2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICpk ZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQogewogCXN0 cnVjdCB1c2JfeHBhZCAqeHBhZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKKwlpZiAoIXhw YWQtPnJ1bWJsZV9lbmFibGUpCisJCXJldHVybiAwOworCiAJaWYgKGVmZmVjdC0+dHlwZSA9PSBG Rl9SVU1CTEUpIHsKIAkJX191MTYgc3Ryb25nID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFn bml0dWRlOwogCQlfX3UxNiB3ZWFrID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsK LQkJeHBhZC0+b2RhdGFbMF0gPSAweDAwOwotCQl4cGFkLT5vZGF0YVsxXSA9IDB4MDg7Ci0JCXhw YWQtPm9kYXRhWzJdID0gMHgwMDsKLQkJeHBhZC0+b2RhdGFbM10gPSBzdHJvbmcgLyAyNTY7Ci0J CXhwYWQtPm9kYXRhWzRdID0gd2VhayAvIDI1NjsKLQkJeHBhZC0+b2RhdGFbNV0gPSAweDAwOwot CQl4cGFkLT5vZGF0YVs2XSA9IDB4MDA7Ci0JCXhwYWQtPm9kYXRhWzddID0gMHgwMDsKLQkJeHBh ZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisJCW11dGV4X2xvY2soJnhw YWQtPm9kYXRhX211dGV4KTsKKwkJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKSB7 CisJCQl4cGFkLT5vZGF0YVswXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxXSA9IDB4MDE7CisJ CQl4cGFkLT5vZGF0YVsyXSA9IDB4MGY7CisJCQl4cGFkLT5vZGF0YVszXSA9IDB4YzA7CisJCQl4 cGFkLT5vZGF0YVs0XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs1XSA9IHN0cm9uZyAvIDI1NjsK KwkJCXhwYWQtPm9kYXRhWzZdID0gd2VhayAvIDI1NjsKKwkJCXhwYWQtPm9kYXRhWzddID0gMHgw MDsKKwkJCXhwYWQtPm9kYXRhWzhdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzldID0gMHgwMDsK KwkJCXhwYWQtPm9kYXRhWzEwXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxMV0gPSAweDAwOwor CQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDEyOworCQl9IGVsc2Ug eworCQkJeHBhZC0+b2RhdGFbMF0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbMV0gPSAweDA4Owor CQkJeHBhZC0+b2RhdGFbMl0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbM10gPSBzdHJvbmcgLyAy NTY7CisJCQl4cGFkLT5vZGF0YVs0XSA9IHdlYWsgLyAyNTY7CisJCQl4cGFkLT5vZGF0YVs1XSA9 IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs2XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs3XSA9IDB4 MDA7CisJCQl4cGFkLT5pcnFfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gODsKKwkJfQog CQl1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfb3V0LCBHRlBfS0VSTkVMKTsKKwkJbXV0ZXhfdW5s b2NrKCZ4cGFkLT5vZGF0YV9tdXRleCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01NzIsNyArNzYw LDcgQEAKIAogc3RhdGljIGludCB4cGFkX2luaXRfZmYoc3RydWN0IHVzYl94cGFkICp4cGFkKQog ewotCWlmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwKQorCWlmICgoeHBhZC0+eHR5cGUg IT0gWFRZUEVfWEJPWDM2MCkgJiYgKHhwYWQtPnh0eXBlICE9IFhUWVBFX1hCT1gzNjBXKSkKIAkJ cmV0dXJuIDA7CiAKIAlpbnB1dF9zZXRfY2FwYWJpbGl0eSh4cGFkLT5kZXYsIEVWX0ZGLCBGRl9S VU1CTEUpOwpAQCAtNTgxLDI2ICs3NjksNDkgQEAKIH0KIAogI2Vsc2UKKy8qIGR1bW15IGltcGxl bWVudGF0aW9uIGZvciB4cGFkX3Byb2JlICovCiBzdGF0aWMgaW50IHhwYWRfaW5pdF9mZihzdHJ1 Y3QgdXNiX3hwYWQgKnhwYWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCisKKy8qIGVuZCBmb3Jj ZSBmZWVkYmFjayBzZWN0aW9uICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTEVE IGhhbmRsaW5nIHNlY3Rpb246IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSByaW5nIG9mIExFRHMg b24gdGhlIDM2MAorICogY29udHJvbGxlcnMuICovCisKICNpZiBkZWZpbmVkKENPTkZJR19KT1lT VElDS19YUEFEX0xFRFMpCi0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCi1zdHJ1Y3QgeHBhZF9s ZWQgewotCWNoYXIgbmFtZVsxNl07Ci0Jc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfY2RldjsKLQlz dHJ1Y3QgdXNiX3hwYWQgKnhwYWQ7Ci19OwogCisvKiBYQm94IDM2MCB3aXJlbGVzcyBjb250cm9s bGVyIGZvbGxvd3MgcHJvdG9jb2wgZnJvbSB4Ym94ZHJ2IHVzZXJzcGFjZQorICogZHJpdmVyOgor ICogICAgaHR0cDovL3Bpbmd1cy5zZXVsLm9yZy9+Z3J1bWJlbC94Ym94ZHJ2LworICovCiBzdGF0 aWMgdm9pZCB4cGFkX3NlbmRfbGVkX2NvbW1hbmQoc3RydWN0IHVzYl94cGFkICp4cGFkLCBpbnQg Y29tbWFuZCkKIHsKIAlpZiAoY29tbWFuZCA+PSAwICYmIGNvbW1hbmQgPCAxNCkgewogCQltdXRl eF9sb2NrKCZ4cGFkLT5vZGF0YV9tdXRleCk7Ci0JCXhwYWQtPm9kYXRhWzBdID0gMHgwMTsKLQkJ eHBhZC0+b2RhdGFbMV0gPSAweDAzOwotCQl4cGFkLT5vZGF0YVsyXSA9IGNvbW1hbmQ7Ci0JCXhw YWQtPmlycV9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzOworCQlpZiAoeHBhZC0+eHR5 cGUgPT0gWFRZUEVfWEJPWDM2MFcpIHsKKwkJCXhwYWQtPm9kYXRhWzBdID0gMHgwMDsKKwkJCXhw YWQtPm9kYXRhWzFdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzJdID0gMHgwODsKKwkJCXhwYWQt Pm9kYXRhWzNdID0gMHg0MCArIChjb21tYW5kICUgMHgwZSk7CisJCQl4cGFkLT5vZGF0YVs0XSA9 IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs1XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs2XSA9IDB4 MDA7CisJCQl4cGFkLT5vZGF0YVs3XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs4XSA9IDB4MDA7 CisJCQl4cGFkLT5vZGF0YVs5XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxMF0gPSAweDAwOwor CQkJeHBhZC0+b2RhdGFbMTFdID0gMHgwMDsKKwkJCXhwYWQtPmlycV9vdXQtPnRyYW5zZmVyX2J1 ZmZlcl9sZW5ndGggPSAxMjsKKwkJfSBlbHNlIHsKKwkJCXhwYWQtPm9kYXRhWzBdID0gMHgwMTsK KwkJCXhwYWQtPm9kYXRhWzFdID0gMHgwMzsKKwkJCXhwYWQtPm9kYXRhWzJdID0gY29tbWFuZDsK KwkJCXhwYWQtPmlycV9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzOworCQl9CiAJCXVz Yl9zdWJtaXRfdXJiKHhwYWQtPmlycV9vdXQsIEdGUF9LRVJORUwpOwogCQltdXRleF91bmxvY2so JnhwYWQtPm9kYXRhX211dGV4KTsKIAl9CkBAIC02MTUsNiArODI2LDcgQEAKIAl4cGFkX3NlbmRf bGVkX2NvbW1hbmQoeHBhZF9sZWQtPnhwYWQsIHZhbHVlKTsKIH0KIAorCiBzdGF0aWMgaW50IHhw YWRfbGVkX3Byb2JlKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKIAlzdGF0aWMgYXRvbWljX3Qg bGVkX3NlcQk9IEFUT01JQ19JTklUKDApOwpAQCAtNjIzLDcgKzgzNSw3IEBACiAJc3RydWN0IGxl ZF9jbGFzc2RldiAqbGVkX2NkZXY7CiAJaW50IGVycm9yOwogCi0JaWYgKHhwYWQtPnh0eXBlICE9 IFhUWVBFX1hCT1gzNjApCisJaWYgKCh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwKSAmJiAo eHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MFcpKQogCQlyZXR1cm4gMDsKIAogCXhwYWQtPmxl ZCA9IGxlZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4cGFkX2xlZCksIEdGUF9LRVJORUwpOwpA QCAtNjY0LDE3ICs4NzYsMjMgQEAKIAl9CiB9CiAjZWxzZQorLyogZHVtbWllcyBmb3IgeHBhZF9w cm9iZSBhbmQgeHBhZF9kaXNjb25uZWN0ICovCiBzdGF0aWMgaW50IHhwYWRfbGVkX3Byb2JlKHN0 cnVjdCB1c2JfeHBhZCAqeHBhZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIHZvaWQgeHBhZF9sZWRf ZGlzY29ubmVjdChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpIHsgfQogI2VuZGlmCiAKKy8qIGVuZCBM RUQgc2VjdGlvbiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1vZHVsZSBhbmQg ZGV2aWNlIGZ1bmN0aW9ucyAqLwogCiBzdGF0aWMgaW50IHhwYWRfb3BlbihzdHJ1Y3QgaW5wdXRf ZGV2ICpkZXYpCiB7CiAJc3RydWN0IHVzYl94cGFkICp4cGFkID0gaW5wdXRfZ2V0X2RydmRhdGEo ZGV2KTsKIAogCS8qIFVSQiB3YXMgc3VibWl0dGVkIGluIHByb2JlICovCi0JaWYoeHBhZC0+eHR5 cGUgPT0gWFRZUEVfWEJPWDM2MFcpCisJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBX KQogCQlyZXR1cm4gMDsKIAogCXhwYWQtPmlycV9pbi0+ZGV2ID0geHBhZC0+dWRldjsKQEAgLTY4 OCw3ICs5MDYsNyBAQAogewogCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IGlucHV0X2dldF9kcnZk YXRhKGRldik7CiAKLQlpZih4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwVykKKwlpZiAoeHBh ZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MFcpCiAJCXVzYl9raWxsX3VyYih4cGFkLT5pcnFfaW4p OwogCXhwYWRfc3RvcF9vdXRwdXQoeHBhZCk7CiB9CkBAIC03MDYsNyArOTI0LDEwIEBACiAJCWJy ZWFrOwogCWNhc2UgQUJTX1o6CiAJY2FzZSBBQlNfUlo6CS8qIHRoZSB0cmlnZ2VycyAqLwotCQlp bnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIGFicywgMCwgMjU1LCAwLCAwKTsKKwkJLyog VHJpZ2dlcnMgaGF2ZSBhIHBob255IC0yNTUgdG8gMjU1IHJhbmdlLiBOb3JtYWxseSwgb25seQor CQkgKiAwIHRvIDI1NSB3aWxsIGJlIHJlcG9ydGVkICgrIGF4aXMpLCB1bmxlc3MgZnVsbF90cmln Z2VyX2F4aXMKKwkJICogaXMgc2V0LCBpbiB3aGljaCBjYXNlIC0yNTUgdG8gMjU1IHdpbGwgYmUg cmVwb3J0ZWQuICovCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgYWJzLCAtMjU1 LCAyNTUsIDAsIDApOwogCQlicmVhazsKIAljYXNlIEFCU19IQVQwWDoKIAljYXNlIEFCU19IQVQw WToJLyogdGhlIGQtcGFkIChvbmx5IGlmIE1BUF9EUEFEX1RPX0FYRVMpICovCkBAIC03MTUsMTgg KzkzNiwyMiBAQAogCX0KIH0KIAotc3RhdGljIGludCB4cGFkX3Byb2JlKHN0cnVjdCB1c2JfaW50 ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50 IHhwYWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1 c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFj ZV90b191c2JkZXYoaW50Zik7CiAJc3RydWN0IHVzYl94cGFkICp4cGFkOwogCXN0cnVjdCBpbnB1 dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2ly cV9pbjsKKwlpbnQgY29udHJvbGxlcl90eXBlOwogCWludCBpOwogCWludCBlcnJvciA9IC1FTk9N RU07CiAKIAlmb3IgKGkgPSAwOyB4cGFkX2RldmljZVtpXS5pZFZlbmRvcjsgaSsrKSB7Ci0JCWlm ICgobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0geHBhZF9kZXZpY2Vb aV0uaWRWZW5kb3IpICYmCi0JCSAgICAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFBy b2R1Y3QpID09IHhwYWRfZGV2aWNlW2ldLmlkUHJvZHVjdCkpCisJCWlmICgobGUxNl90b19jcHUo dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0KKwkJCQkJCXhwYWRfZGV2aWNlW2ldLmlkVmVu ZG9yKSAmJgorCQkJCShsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0K KwkJCQkJCXhwYWRfZGV2aWNlW2ldLmlkUHJvZHVjdCkpCiAJCQlicmVhazsKIAl9CiAKQEAgLTc0 NywxMSArOTcyLDE0IEBACiAJeHBhZC0+dWRldiA9IHVkZXY7CiAJeHBhZC0+ZHBhZF9tYXBwaW5n ID0geHBhZF9kZXZpY2VbaV0uZHBhZF9tYXBwaW5nOwogCXhwYWQtPnh0eXBlID0geHBhZF9kZXZp Y2VbaV0ueHR5cGU7CisJY29udHJvbGxlcl90eXBlID0geHBhZF9kZXZpY2VbaV0uY29udHJvbGxl cl90eXBlOwogCWlmICh4cGFkLT5kcGFkX21hcHBpbmcgPT0gTUFQX0RQQURfVU5LTk9XTikKIAkJ eHBhZC0+ZHBhZF9tYXBwaW5nID0gIWRwYWRfdG9fYnV0dG9uczsKIAlpZiAoeHBhZC0+eHR5cGUg PT0gWFRZUEVfVU5LTk9XTikgewotCQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYklu dGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgewotCQkJaWYgKGludGYtPmN1 cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSAxMjkpCisJCWlmIChpbnRm LT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0KKwkJCQkJVVNCX0NMQVNT X1ZFTkRPUl9TUEVDKSB7CisJCQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVy ZmFjZVByb3RvY29sID09CisJCQkJCTEyOSkKIAkJCQl4cGFkLT54dHlwZSA9IFhUWVBFX1hCT1gz NjBXOwogCQkJZWxzZQogCQkJCXhwYWQtPnh0eXBlID0gWFRZUEVfWEJPWDM2MDsKQEAgLTc4Mywx NiArMTAxMSwxOCBAQAogCWVsc2UKIAkJZm9yIChpID0gMDsgeHBhZF9idG5baV0gPj0gMDsgaSsr KQogCQkJc2V0X2JpdCh4cGFkX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwotCWlmICh4cGFk LT5kcGFkX21hcHBpbmcgPT0gTUFQX0RQQURfVE9fQlVUVE9OUykKKwlpZiAoeHBhZC0+ZHBhZF9t YXBwaW5nID09IE1BUF9EUEFEX1RPX0JVVFRPTlMpIHsKIAkJZm9yIChpID0gMDsgeHBhZF9idG5f cGFkW2ldID49IDA7IGkrKykKIAkJCXNldF9iaXQoeHBhZF9idG5fcGFkW2ldLCBpbnB1dF9kZXYt PmtleWJpdCk7CisJfQogCiAJLyogc2V0IHVwIGF4ZXMgKi8KIAlmb3IgKGkgPSAwOyB4cGFkX2Fi c1tpXSA+PSAwOyBpKyspCiAJCXhwYWRfc2V0X3VwX2FicyhpbnB1dF9kZXYsIHhwYWRfYWJzW2ld KTsKLQlpZiAoeHBhZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1RPX0FYRVMpCisJaWYgKHhw YWQtPmRwYWRfbWFwcGluZyA9PSBNQVBfRFBBRF9UT19BWEVTKSB7CiAJCWZvciAoaSA9IDA7IHhw YWRfYWJzX3BhZFtpXSA+PSAwOyBpKyspCi0JCSAgICB4cGFkX3NldF91cF9hYnMoaW5wdXRfZGV2 LCB4cGFkX2Fic19wYWRbaV0pOworCQkJeHBhZF9zZXRfdXBfYWJzKGlucHV0X2RldiwgeHBhZF9h YnNfcGFkW2ldKTsKKwl9CiAKIAllcnJvciA9IHhwYWRfaW5pdF9vdXRwdXQoaW50ZiwgeHBhZCk7 CiAJaWYgKGVycm9yKQpAQCAtODIwLDYgKzEwNTAsMTAgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEo aW50ZiwgeHBhZCk7CiAKKwl4cGFkLT5jb250cm9sbGVyX3R5cGUgPSBjb250cm9sbGVyX3R5cGU7 CisJaWYgKGNvbnRyb2xsZXJfdHlwZSAhPSBYQ09OVFJPTExFUl9UWVBFX05PTkUpCisJCXhwYWRf aW5pdF9jb250cm9sbGVyKHhwYWQpOworCiAJLyoKIAkgKiBTdWJtaXQgdGhlIGludCBVUkIgaW1t ZWRpYXRseSByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciBvcGVuCiAJICogYmVjYXVzZSB3ZSBnZXQg c3RhdHVzIG1lc3NhZ2VzIGZyb20gdGhlIGRldmljZSB3aGV0aGVyCkBAIC04MjgsNDggKzEwNjIs MzkgQEAKIAkgKiB3ZSdyZSB3YWl0aW5nIGZvci4KIAkgKi8KIAlpZiAoeHBhZC0+eHR5cGUgPT0g WFRZUEVfWEJPWDM2MFcpIHsKKwkJeHBhZC0+Y29udHJvbGxlcl9wcmVzZW50ID0gMDsKKwkJeHBh ZC0+Y29udHJvbGxlcl9udW1iZXIgPQorCQkJKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJ bnRlcmZhY2VOdW1iZXIgLyAyKSArIDE7CiAJCXhwYWQtPmlycV9pbi0+ZGV2ID0geHBhZC0+dWRl djsKIAkJZXJyb3IgPSB1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfaW4sIEdGUF9LRVJORUwpOwog CQlpZiAoZXJyb3IpCi0JCQlnb3RvIGZhaWw0OwotCi0JCS8qCi0JCSAqIFNldHVwIHRoZSBtZXNz YWdlIHRvIHNldCB0aGUgTEVEcyBvbiB0aGUKLQkJICogY29udHJvbGxlciB3aGVuIGl0IHNob3dz IHVwCi0JCSAqLwotCQl4cGFkLT5idWxrX291dCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5F TCk7Ci0JCWlmKCF4cGFkLT5idWxrX291dCkKIAkJCWdvdG8gZmFpbDU7CisJfSBlbHNlIHsKKwkJ eHBhZC0+Y29udHJvbGxlcl9wcmVzZW50ID0gMTsKKwkJeHBhZC0+Y29udHJvbGxlcl9udW1iZXIg PSAwOworCX0KIAotCQl4cGFkLT5iZGF0YSA9IGt6YWxsb2MoWFBBRF9QS1RfTEVOLCBHRlBfS0VS TkVMKTsKLQkJaWYoIXhwYWQtPmJkYXRhKQotCQkJZ290byBmYWlsNjsKLQotCQl4cGFkLT5iZGF0 YVsyXSA9IDB4MDg7Ci0JCXN3aXRjaCAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVy ZmFjZU51bWJlcikgewotCQljYXNlIDA6Ci0JCQl4cGFkLT5iZGF0YVszXSA9IDB4NDI7Ci0JCQli cmVhazsKLQkJY2FzZSAyOgotCQkJeHBhZC0+YmRhdGFbM10gPSAweDQzOwotCQkJYnJlYWs7Ci0J CWNhc2UgNDoKLQkJCXhwYWQtPmJkYXRhWzNdID0gMHg0NDsKLQkJCWJyZWFrOwotCQljYXNlIDY6 Ci0JCQl4cGFkLT5iZGF0YVszXSA9IDB4NDU7Ci0JCX0KLQotCQllcF9pcnFfaW4gPSAmaW50Zi0+ Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzFdLmRlc2M7Ci0JCXVzYl9maWxsX2J1bGtfdXJiKHhw YWQtPmJ1bGtfb3V0LCB1ZGV2LAotCQkJCXVzYl9zbmRidWxrcGlwZSh1ZGV2LCBlcF9pcnFfaW4t PmJFbmRwb2ludEFkZHJlc3MpLAotCQkJCXhwYWQtPmJkYXRhLCBYUEFEX1BLVF9MRU4sIHhwYWRf YnVsa19vdXQsIHhwYWQpOworCS8qIFNldCB1cCBkZXZpY2UgYXR0cmlidXRlcyAqLworCXhwYWQt PnN5c2ZzX29rID0gMTsKKwl4cGFkLT5jb250cm9sbGVyX3VuaXF1ZV9pZFswXSA9ICdcMCc7CisJ ZXJyb3IgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmlucHV0X2Rldi0+ZGV2LmtvYmosCisJCQkJCQkm eHBhZF9kZWZhdWx0X2F0dHJfZ3JvdXApOworCWlmIChlcnJvcikgeworCQkvKiBEcml2ZXIgd2ls bCB3b3JrIHdpdGhvdXQgdGhlIHN5c2ZzIGludGVyZmFjZSwgYnV0IHBhcmFtZXRlcnMKKwkJICog d2lsbCBub3QgYmUgYWRqdXN0YWJsZSwgc28gdGhpcyBmYWlsdXJlIGlzIGEgd2FybmluZy4gKi8K KwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJInhwYWQ6IHN5c2ZzX2NyZWF0ZV9ncm91cCBmYWls ZWQgd2l0aCBlcnJvciAlZFxuIiwKKwkJCWVycm9yKTsKKwkJeHBhZC0+c3lzZnNfb2sgPSAwOwog CX0KKwkKKwlJTklUX1dPUksoJnhwYWQtPndvcmssICZ4cGFkX3dvcmtfY29udHJvbGxlcik7CiAK IAlyZXR1cm4gMDsKIAotIGZhaWw2Ogl1c2JfZnJlZV91cmIoeHBhZC0+YnVsa19vdXQpOwotIGZh aWw1Ogl1c2Jfa2lsbF91cmIoeHBhZC0+aXJxX2luKTsKKyBmYWlsNTogdXNiX3NldF9pbnRmZGF0 YShpbnRmLCBOVUxMKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh4cGFkLT5kZXYpOworCXhw YWRfbGVkX2Rpc2Nvbm5lY3QoeHBhZCk7CiAgZmFpbDQ6CXVzYl9mcmVlX3VyYih4cGFkLT5pcnFf aW4pOwogIGZhaWwzOgl4cGFkX2RlaW5pdF9vdXRwdXQoeHBhZCk7CiAgZmFpbDI6CXVzYl9idWZm ZXJfZnJlZSh1ZGV2LCBYUEFEX1BLVF9MRU4sIHhwYWQtPmlkYXRhLCB4cGFkLT5pZGF0YV9kbWEp OwpAQCAtODgxLDE4ICsxMTA2LDIyIEBACiAKIHN0YXRpYyB2b2lkIHhwYWRfZGlzY29ubmVjdChz dHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB1 c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB1c2JfZ2V0 X2ludGZkYXRhKGludGYpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAlpZiAo eHBhZCkgeworCQkvKiBFbnN1cmUgd2UgZG9uJ3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrICovCisJ CWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkJaWYgKHhwYWQtPnN5c2ZzX29rKQorCQkJc3lz ZnNfcmVtb3ZlX2dyb3VwKCZ4cGFkLT5kZXYtPmRldi5rb2JqLAorCQkJCQkJJnhwYWRfZGVmYXVs dF9hdHRyX2dyb3VwKTsKKwogCQl4cGFkX2xlZF9kaXNjb25uZWN0KHhwYWQpOwogCQlpbnB1dF91 bnJlZ2lzdGVyX2RldmljZSh4cGFkLT5kZXYpOwogCQl4cGFkX2RlaW5pdF9vdXRwdXQoeHBhZCk7 Ci0JCWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykgewotCQkJdXNiX2tpbGxfdXJi KHhwYWQtPmJ1bGtfb3V0KTsKLQkJCXVzYl9mcmVlX3VyYih4cGFkLT5idWxrX291dCk7CisJCWlm ICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykKIAkJCXVzYl9raWxsX3VyYih4cGFkLT5p cnFfaW4pOwotCQl9CiAJCXVzYl9mcmVlX3VyYih4cGFkLT5pcnFfaW4pOwogCQl1c2JfYnVmZmVy X2ZyZWUoeHBhZC0+dWRldiwgWFBBRF9QS1RfTEVOLAogCQkJCXhwYWQtPmlkYXRhLCB4cGFkLT5p ZGF0YV9kbWEpOwpAQCAtOTAwLDEyICsxMTI5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qg dXNiX2RyaXZlciB4cGFkX2RyaXZlciA9IHsKLQkubmFtZQkJPSAieHBhZCIsCi0JLnByb2JlCQk9 IHhwYWRfcHJvYmUsCi0JLmRpc2Nvbm5lY3QJPSB4cGFkX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxl CT0geHBhZF90YWJsZSwKLX07CisKIAogc3RhdGljIGludCBfX2luaXQgdXNiX3hwYWRfaW5pdCh2 b2lkKQogewpAQCAtOTIwLDkgKzExNDQsNCBAQAogCXVzYl9kZXJlZ2lzdGVyKCZ4cGFkX2RyaXZl cik7CiB9CiAKLW1vZHVsZV9pbml0KHVzYl94cGFkX2luaXQpOwotbW9kdWxlX2V4aXQodXNiX3hw YWRfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJ UFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC11TnIgb3Jp Z2Rydi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuaCBuZXdkcnYvZHJpdmVycy9pbnB1dC9q b3lzdGljay94cGFkLmgKLS0tIG9yaWdkcnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmgJ MTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIG5ld2Rydi9kcml2ZXJzL2lu cHV0L2pveXN0aWNrL3hwYWQuaAkyMDA5LTAyLTI4IDIzOjIwOjIwLjAwMDAwMDAwMCAtMDUwMApA QCAtMCwwICsxLDYwOCBAQAorLyoKKyAqIFhib3ggZ2FtZXBhZCBkcml2ZXIgd2l0aCBYYm94IDM2 MCB3aXJlZC93aXJlbGVzcyBzdXBwb3J0CisgKgorICogTGFzdCBNb2RpZmllZDoJMjggRmVicnVh cnkgMjAwOQorICoJCQlNaWtlIE11cnBoeSA8bWFtdXJwaEBjcy5jbGVtc29uLmVkdT4KKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMDIgTWFya28gRnJpZWRlbWFubiA8bWZyQGJteC1jaGVtbml0ei5k ZT4KKyAqICAgICAgICAgICAgICAgMjAwNCBPbGl2ZXIgU2Nod2FydHogPE9saXZlci5TY2h3YXJ0 ekBnbXguZGU+LAorICogICAgICAgICAgICAgICAgICAgIFN0ZXZlbiBUb3RoIDxzdGV2ZUB0b3Ro LmRlbW9uLmNvLnVrPiwKKyAqICAgICAgICAgICAgICAgICAgICBGcmFueiBMZWhuZXIgPGZyYW56 QGNhb3MuYXQ+LAorICogICAgICAgICAgICAgICAgICAgIEl2YW4gSGF3a2VzIDxibGFja2hhd2tA aXZhbmhhd2tlcy5jb20+CisgKiAgICAgICAgICAgICAgIDIwMDUgRG9taW5pYyBDZXJxdWV0dGkg PGJpbmFyeTEyMzBAeWFob28uY29tPgorICogICAgICAgICAgICAgICAyMDA2IEFkYW0gQnVjaGJp bmRlciA8YWRhbS5idWNoYmluZGVyQGdtYWlsLmNvbT4KKyAqICAgICAgICAgICAgICAgMjAwNyBK YW4gS3JhdG9jaHZpbCA8aG9uemFAamlrb3MuY3o+CisgKiAgICAgICAgICAgICAgIDIwMDkgQ2xl bXNvbiBVbml2ZXJzaXR5CisgKgkJICAgICAgKGNvbnRhY3Q6IE1pa2UgTXVycGh5IDxtYW11cnBo QGNzLmNsZW1zb24uZWR1PikKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3 IFVTQQorICoKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbjoKKyAqICAtIGluZm9ybWF0 aW9uIGZyb20gICAgIGh0dHA6Ly9ldWMuanAvcGVyaXBocy94Ym94LWNvbnRyb2xsZXIuamEuaHRt bAorICogIC0gdGhlIGlGb3JjZSBkcml2ZXIgICAgZHJpdmVycy9jaGFyL2pveXN0aWNrL2lmb3Jj ZS5jCisgKiAgLSB0aGUgc2tlbGV0b24tZHJpdmVyICBkcml2ZXJzL3VzYi91c2Itc2tlbGV0b24u YworICogIC0gWGJveCAzNjAgaW5mb3JtYXRpb24gaHR0cDovL3d3dy5mcmVlNjAub3JnL3dpa2kv R2FtZXBhZAorICogIC0geGJveGRydiBkb2NzICAgICAgICAgaHR0cDovL3Bpbmd1cy5zZXVsLm9y Zy9+Z3J1bWJlbC94Ym94ZHJ2LworICoKKyAqIFRoYW5rcyB0bzoKKyAqICAtIElUTyBUYWtheXVr aSBmb3IgcHJvdmlkaW5nIGVzc2VudGlhbCB4cGFkIGluZm9ybWF0aW9uIG9uIGhpcyB3ZWJzaXRl CisgKiAgLSBWb2p0ZWNoIFBhdmxpayAgICAgLSBpZm9yY2UgZHJpdmVyIC8gaW5wdXQgc3Vic3lz dGVtCisgKiAgLSBHcmVnIEtyb2FoLUhhcnRtYW4gLSB1c2Itc2tlbGV0b24gZHJpdmVyCisgKiAg LSBYQk9YIExpbnV4IHByb2plY3QgLSBleHRyYSBVU0IgaWQncworICoKKyAqIFRPRE86CisgKiAg LSBmaXggImFuYWxvZyIgYnV0dG9ucyAocmVwb3J0ZWQgYXMgZGlnaXRhbCBub3cpCisgKiAgLSBu ZWVkIFVTQiBJRHMgZm9yIG90aGVyIGRhbmNlIHBhZHMKKyAqCisgKiBEcml2ZXIgaGlzdG9yeSBp cyBsb2NhdGVkIGF0IHRoZSBib3R0b20gb2YgdGhpcyBmaWxlLgorICovCisKKyNpZm5kZWYgX1hQ QURfSAorI2RlZmluZSBfWFBBRF9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNs dWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxp bnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91 c2IvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPGxp bnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4 L3N0cmluZy5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTKQorI2lu Y2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworc3RydWN0IHhwYWRfbGVkIHsKKwljaGFyIG5hbWVbMTZd OworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7CisJc3RydWN0IHVzYl94cGFkICp4cGFk OworfTsKKyNlbmRpZgorCisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWFya28gRnJpZWRlbWFu biA8bWZyQGJteC1jaGVtbml0ei5kZT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJYYm94LzM2MCBw YWQgZHJpdmVyIgorCisjZGVmaW5lIFhQQURfUEtUX0xFTiAzMgorCisKKy8qIHhib3ggZC1wYWRz IHNob3VsZCBtYXAgdG8gYnV0dG9ucywgYXMgaXMgcmVxdWlyZWQgZm9yIEREUiBwYWRzCisgICBi dXQgd2UgbWFwIHRoZW0gdG8gYXhlcyB3aGVuIHBvc3NpYmxlIHRvIHNpbXBsaWZ5IHRoaW5ncyAq LworI2RlZmluZSBNQVBfRFBBRF9UT19CVVRUT05TICAgIDAKKyNkZWZpbmUgTUFQX0RQQURfVE9f QVhFUyAgICAgICAxCisjZGVmaW5lIE1BUF9EUEFEX1VOS05PV04gICAgICAgMgorCisvKiBUeXBl IG9mIGNvbnRyb2xsZXIgKmludGVyZmFjZSogKG9yaWdpbmFsLCB3aXJlZCAzNjAsIHdpcmVsZXNz IDM2MCkgKi8KKyNkZWZpbmUgWFRZUEVfWEJPWCAgICAgICAgMAorI2RlZmluZSBYVFlQRV9YQk9Y MzYwICAgICAxCisjZGVmaW5lIFhUWVBFX1hCT1gzNjBXICAgIDIKKyNkZWZpbmUgWFRZUEVfVU5L Tk9XTiAgICAgMworCisvKiBUeXBlIG9mIGNvbnRyb2xsZXIgKGUuZy4gcGFkLCBndWl0YXIsIG90 aGVyIGlucHV0IGRldmljZSkgKi8KKyNkZWZpbmUgWENPTlRST0xMRVJfVFlQRV9OT05FCQkwCisj ZGVmaW5lIFhDT05UUk9MTEVSX1RZUEVfUEFECQkxCisjZGVmaW5lIFhDT05UUk9MTEVSX1RZUEVf R1VJVEFSCQkyCisjZGVmaW5lIFhDT05UUk9MTEVSX1RZUEVfREFOQ0VfUEFECTMKKyNkZWZpbmUg WENPTlRST0xMRVJfVFlQRV9PVEhFUgkJMjU1CisKKworLyogVGhlIFhib3ggMzYwIGNvbnRyb2xs ZXJzIGhhdmUgc2Vuc2l0aXZlIHN0aWNrcyB0aGF0IG9mdGVuIGRvIG5vdCBjZW50ZXIKKyAqIGV4 YWN0bHkuIEEgZGVhZCB6b25lIGNhdXNlcyBzdGljayBldmVudHMgYmVsb3cgYSBjZXJ0YWluIHRo cmVzaGhvbGQgdG8gYmUKKyAqIHJlcG9ydGVkIGFzIHplcm8uCisgKgorICogVGhlIGRlZmF1bHQg ZGVhZCB6b25lIHNpemUgaXMgODE5Miwgd2hpY2ggd2FzIG9idGFpbmVkIGJ5IHRlc3RpbmcgYQor ICogd2lyZWxlc3MgMzYwIGNvbnRyb2xsZXIgd2l0aCBqc3Rlc3QoMSkgYW5kIGNvbnN1bHRpbmcg Z2FtaW5nIGZvcnVtcyBmb3IKKyAqIGEgcmVjb21tZW5kZWQgZGVhZCB6b25lIGZvciB0aGlzIGNv bnRyb2xsZXIuIFRoZSBjb25zZW5zdXMgb3BpbmlvbiB3YXMKKyAqIDAuMjUgKG9uIGEgc2NhbGUg ZnJvbSAwIHRvIDEpLCB3aGljaCBjb3JyZXNwb25kcyB0byA4MTkyIChvdXQgb2YgMzI3NjcpLgor ICovCisjZGVmaW5lIFhERUFEX1pPTkVfREVGQVVMVCAgIDgxOTIKKworLyogRGVmYXVsdCBsaW1p dCBmb3IgdGhlIHN0aWNrcyBpcyB0aGUgbWF4aW11bSBheGlzIHZhbHVlICgzMjc2NyksIHdoaWNo IHdpbGwKKyAqIGNhdXNlIHRoZSBzdGlja3MgdG8gaGF2ZSBhIHJhZGlhbCBheGlzIGFzIGRlc2ln bmVkIGluIHRoZSBoYXJkd2FyZS4gVG8KKyAqIGVuYWJsZSBzcXVhcmUgYXhpcyBzdXBwb3J0LCBz ZXQgdGhlIHN0aWNrIGxpbWl0cyB0byAyMzE3MCBvciBsb3dlciBhdCBydW4KKyAqIHRpbWUgdmlh IHRoZSBzeXNmcyBpbnRlcmZhY2UuICovCisjZGVmaW5lIFhTVElDS19MSU1JVF9ERUZBVUxUIDMy NzY3CisKKy8qIFJ1bWJsZSBub3JtYWxseSBlbmFibGVkICovCisjZGVmaW5lIFhSVU1CTEVfREVG QVVMVAkJMQorCisvKiBOb3JtYWxseSwgdHJpZ2dlciBheGVzIHJlcG9ydCBpbiB0aGUgcmFuZ2Ug MCB0byAzMjc2NyAocG9zaXRpdmUgYXhpcyBvbmx5KSAqLworI2RlZmluZSBYRlVMTF9UUklHR0VS X0FYSVNfREVGQVVMVAkwCisKKworLyogVGhpcyBtb2R1bGUgcGFyYW1ldGVyIGlzIHNvbWV0aGlu ZyBvZiBhIHJlbGljLCBidXQgaXQgcmVtYWlucyBmb3IKKyAqIGNvbXBhdGliaWxpdHkuIEltcG9y dGFudGx5LCB0aGUgb3B0aW9uIHRvIG1hcCB0aGUgRC1QQUQgYnV0dG9ucyBhcHBsaWVzCisgKiBv bmx5IHRvIGNvbnRyb2xsZXIgKmludGVyZmFjZXMqIChpLmUuIHZlbmRvciBhbmQgcHJvZHVjdCBj b2Rlcykgbm90CisgKiBleHBsaWNpdGx5IHByZXNlbnQgaW4geHBhZF9kZXZpY2VbXS4gKi8KK3N0 YXRpYyBpbnQgZHBhZF90b19idXR0b25zOworbW9kdWxlX3BhcmFtKGRwYWRfdG9fYnV0dG9ucywg Ym9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGRwYWRfdG9fYnV0dG9ucywKKwkiTWFw IEQtUEFEIHRvIGJ1dHRvbnMgcmF0aGVyIHRoYW4gYXhlcyBmb3IgdW5rbm93biBwYWRzIik7CisK KworLyogVGFibGUgb2YgdmFyaW91cyBkZXZpY2UgaW50ZXJmYWNlcyByZWNvZ25pemVkIGJ5IHRo aXMgZHJpdmVyLiBFYWNoIHN1cHBvcnRlZAorICogZGV2aWNlIGhhcyBhIGRpcmVjdGlvbmFsIHBh ZCBtYXBwaW5nLCBpbnRlcmZhY2UgdHlwZSwgYW5kIGNvbnRyb2xsZXIgdHlwZS4KKyAqIE5vdGUg dGhhdCB3aXJlbGVzcyAzNjAgZGV2aWNlcyBoYXZlIFhDT05UUk9MTEVSX1RZUEVfTk9ORSwgYXMg dGhlIGFjdHVhbAorICogdHlwZSBvZiB0aGUgZ2FtaW5nIGNvbnRyb2xsZXIgaXMgbm90IGtub3du IHVudGlsIHRoZSBjb250cm9sbGVyIGJpbmRzCisgKiB3aXJlbGVzc2x5IHdpdGggdGhlIHJlY2Vp dmVyCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHBhZF9kZXZpY2UgeworCXUxNiBpZFZlbmRv cjsKKwl1MTYgaWRQcm9kdWN0OworCWNoYXIgKm5hbWU7CisJdTggZHBhZF9tYXBwaW5nOworCXU4 IHh0eXBlOworCXU4IGNvbnRyb2xsZXJfdHlwZTsKK30geHBhZF9kZXZpY2VbXSA9IHsKKwl7IDB4 MDQ1ZSwgMHgwMjAyLCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MSAoVVMpIiwgTUFQX0RQQURfVE9f QVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDQ1ZSwg MHgwMjg5LCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MiAoVVMpIiwgTUFQX0RQQURfVE9fQVhFUywK KwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDQ1ZSwgMHgwMjg1 LCAiTWljcm9zb2Z0IFgtQm94IHBhZCAoSmFwYW4pIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZ UEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDQ1ZSwgMHgwMjg3LCAiTWlj cm9zb2Z0IFhib3ggQ29udHJvbGxlciBTIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJP WCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDQ1ZSwgMHgwNzE5LCAiWGJveCAzNjAg V2lyZWxlc3MgUmVjZWl2ZXIiLCBNQVBfRFBBRF9UT19CVVRUT05TLAorCQlYVFlQRV9YQk9YMzYw VywgWENPTlRST0xMRVJfVFlQRV9OT05FIH0sCisJeyAweDBjMTIsIDB4ODgwOSwgIlJlZE9jdGFu ZSBYYm94IERhbmNlIFBhZCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsCisJCVhUWVBFX1hCT1gsIFhD T05UUk9MTEVSX1RZUEVfREFOQ0VfUEFEIH0sCisJeyAweDA0NGYsIDB4MGYwNywgIlRocnVzdG1h c3RlciwgSW5jLiBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwg WENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDQ2ZCwgMHhjMjQyLCAiTG9naXRlY2ggQ2hp bGxzdHJlYW0gQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gzNjAs IFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NmQsIDB4Y2E4NCwgIkxvZ2l0ZWNoIFhi b3ggQ29yZGxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gs IFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NmQsIDB4Y2E4OCwgIkxvZ2l0ZWNoIENv bXBhY3QgQ29udHJvbGxlciBmb3IgWGJveCIsCisJCU1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hC T1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA1ZmQsIDB4MTAwNywgIk1hZCBDYXR6 IENvbnRyb2xsZXIgKHVudmVyaWZpZWQpIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJP WCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDVmZCwgMHgxMDdhLCAiSW50ZXJBY3Qg J1Bvd2VyUGFkIFBybycgWC1Cb3ggcGFkIChHZXJtYW55KSIsCisJCU1BUF9EUEFEX1RPX0FYRVMs IFhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA3MzgsIDB4NDUxNiwg Ik1hZCBDYXR6IENvbnRyb2wgUGFkIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCwKKwkJ WENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDczOCwgMHg0NTIyLCAiTWFkIENhdHogTHVt aUNPTiIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05UUk9MTEVSX1RZUEVf UEFEIH0sCisJeyAweDA3MzgsIDB4NDUyNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFkIFBybyIsIE1B UF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJ eyAweDA3MzgsIDB4NDUzNiwgIk1hZCBDYXR6IE1pY3JvQ09OIiwgTUFQX0RQQURfVE9fQVhFUywg WFRZUEVfWEJPWCwKKwkJWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDczOCwgMHg0NTQw LCAiTWFkIENhdHogQmVhdCBQYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YLAor CQlYQ09OVFJPTExFUl9UWVBFX0RBTkNFX1BBRCB9LAorCXsgMHgwNzM4LCAweDQ1NTYsICJNYWQg Q2F0eiBMeW54IFdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQ RV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwNzM4LCAweDQ3MTYsICJNYWQg Q2F0eiBXaXJlZCBYYm94IDM2MCBDb250cm9sbGVyIiwKKwkJTUFQX0RQQURfVE9fQVhFUywgWFRZ UEVfWEJPWDM2MCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDczOCwgMHg2MDQwLCAi TWFkIENhdHogQmVhdCBQYWQgUHJvIiwgTUFQX0RQQURfVE9fQlVUVE9OUywKKwkJWFRZUEVfWEJP WCwgWENPTlRST0xMRVJfVFlQRV9EQU5DRV9QQUQgfSwKKwl7IDB4MGMxMiwgMHg4ODAyLCAiWmVy b3BsdXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwg WENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGMxMiwgMHg4ODBhLCAiUGVsaWNhbiBFY2xp cHNlIFBMLTIwMjMiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YLCBYQ09OVFJPTExF Ul9UWVBFX1BBRCB9LAorCXsgMHgwYzEyLCAweDg4MTAsICJaZXJvcGx1cyBYYm94IENvbnRyb2xs ZXIiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BB RCB9LAorCXsgMHgwYzEyLCAweDk5MDIsICJIQU1BIFZpYnJhWCAtICpGQVVMVFkgSEFSRFdBUkUq IiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQg fSwKKwl7IDB4MGU0YywgMHgxMDk3LCAiUmFkaWNhIEdhbWVzdGVyIENvbnRyb2xsZXIiLCBNQVBf RFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsg MHgwZTRjLCAweDIzOTAsICJSYWRpY2EgR2FtZXMgSnRlY2ggQ29udHJvbGxlciIsIE1BUF9EUEFE X1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBl NmYsIDB4MDAwMywgIkxvZ2ljMyBGcmVlYmlyZCB3aXJlbGVzcyBDb250cm9sbGVyIiwKKwkJTUFQ X0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4 MGU2ZiwgMHgwMDA1LCAiRWNsaXBzZSB3aXJlbGVzcyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9f QVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGU2Ziwg MHgwMDA2LCAiRWRnZSB3aXJlbGVzcyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJ WFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGU2ZiwgMHgwMDA2LCAi UGVsaWNhbiAnVFNaJyBXaXJlZCBYYm94IDM2MCBDb250cm9sbGVyIiwKKwkJTUFQX0RQQURfVE9f QVhFUywgWFRZUEVfWEJPWDM2MCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGU4Ziwg MHgwMjAxLCAiU21hcnRKb3kgRnJhZyBYcGFkL1BTMiBhZGFwdG9yIiwgTUFQX0RQQURfVE9fQVhF UywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGYzMCwgMHgw MjAyLCAiSm95dGVjaCBBZHZhbmNlZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJ WFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGYzMCwgMHg4ODg4LCAi QmlnQmVuIFhCTWluaVBhZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVf WEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MTAyYywgMHhmZjBjLCAiSm95dGVj aCBXaXJlbGVzcyBBZHZhbmNlZCBDb250cm9sbGVyIiwKKwkJTUFQX0RQQURfVE9fQVhFUywgWFRZ UEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MTJhYiwgMHg4ODA5LCAiWGJv eCBERFIgZGFuY2VwYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YLAorCQlYQ09O VFJPTExFUl9UWVBFX0RBTkNFX1BBRCB9LAorCXsgMHgxNDMwLCAweDQ3NDgsICJSZWRPY3RhbmUg R3VpdGFyIEhlcm8gWC1wbG9yZXIiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YMzYw LCBYQ09OVFJPTExFUl9UWVBFX0dVSVRBUiB9LAorCXsgMHgxNDMwLCAweDg4ODgsICJUWDY1MDAr IERhbmNlIFBhZCAoZmlyc3QgZ2VuZXJhdGlvbikiLAorCQlNQVBfRFBBRF9UT19CVVRUT05TLCBY VFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX0RBTkNFX1BBRCB9LAorCXsgMHgwNDVlLCAweDAy OGUsICJNaWNyb3NvZnQgWC1Cb3ggMzYwIHBhZCIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBF X1hCT1gzNjAsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweGZmZmYsIDB4ZmZmZiwgIkNo aW5lc2UtbWFkZSBYYm94IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9Y Qk9YLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwMDAwLCAweDAwMDAsICJHZW5lcmlj IFgtQm94IHBhZCIsIE1BUF9EUEFEX1VOS05PV04sIFhUWVBFX1VOS05PV04sCisJCVhDT05UUk9M TEVSX1RZUEVfUEFEIH0KK307CisKKworLyogYnV0dG9ucyBzaGFyZWQgd2l0aCB4Ym94IGFuZCB4 Ym94MzYwICovCitzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWRfY29tbW9uX2J0bltdID0g eworCUJUTl9BLCBCVE5fQiwgQlROX1gsIEJUTl9ZLAkJCS8qICJhbmFsb2ciIGJ1dHRvbnMgKi8K KwlCVE5fU1RBUlQsIEJUTl9CQUNLLCBCVE5fVEhVTUJMLCBCVE5fVEhVTUJSLAkvKiBzdGFydC9i YWNrL3N0aWNrcyAqLworCS0xCQkJCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKy8q IG9yaWdpbmFsIHhib3ggY29udHJvbGxlcnMgb25seSAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBz aG9ydCB4cGFkX2J0bltdID0geworCUJUTl9DLCBCVE5fWiwJCS8qICJhbmFsb2ciIGJ1dHRvbnMg Ki8KKwktMQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBvbmx5IHVzZWQgaWYg TUFQX0RQQURfVE9fQlVUVE9OUyAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkX2J0 bl9wYWRbXSA9IHsKKwlCVE5fTEVGVCwgQlROX1JJR0hULAkJLyogZC1wYWQgbGVmdCwgcmlnaHQg Ki8KKwlCVE5fMCwgQlROXzEsCQkJLyogZC1wYWQgdXAsIGRvd24gKFhYWCBuYW1lcz8/KSAqLwor CS0xCQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBidXR0b25zIGZvciB4MzYw IGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZDM2MF9idG5bXSA9 IHsKKwlCVE5fVEwsIEJUTl9UUiwJCS8qIEJ1dHRvbiBMQi9SQiAqLworCUJUTl9NT0RFLAkJLyog VGhlIGJpZyBYIGJ1dHRvbiAqLworCS0xCit9OworCisvKiBzdGlja3MgYW5kIHRyaWdnZXJzIGNv bW1vbiB0byBhbGwgZGV2aWNlcyAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkX2Fi c1tdID0geworCUFCU19YLCBBQlNfWSwJCS8qIGxlZnQgc3RpY2sgKi8KKwlBQlNfUlgsIEFCU19S WSwJCS8qIHJpZ2h0IHN0aWNrICovCisJQUJTX1osIEFCU19SWiwJCS8qIHRyaWdnZXJzIGxlZnQv cmlnaHQgKi8KKwktMQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBvbmx5IHVz ZWQgaWYgTUFQX0RQQURfVE9fQVhFUyAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFk X2Fic19wYWRbXSA9IHsKKwlBQlNfSEFUMFgsIEFCU19IQVQwWSwJLyogZC1wYWQgYXhlcyAqLwor CS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKworLyogWGJveCAzNjAgaGFzIGEg dmVuZG9yLXNwZWNpZmljIGNsYXNzLCBzbyB3ZSBjYW5ub3QgbWF0Y2ggaXQgd2l0aCBvbmx5Cisg KiBVU0JfSU5URVJGQUNFX0lORk8gKGFsc28gc3BlY2lmaWNhbGx5IHJlZnVzZWQgYnkgVVNCIHN1 YnN5c3RlbSksIHNvIHdlCisgKiBtYXRjaCBhZ2FpbnN0IHZlbmRvciBpZCBhcyB3ZWxsLiBXaXJl ZCBYYm94IDM2MCBkZXZpY2VzIGhhdmUgcHJvdG9jb2wgMSwKKyAqIHdpcmVsZXNzIGNvbnRyb2xs ZXJzIGhhdmUgcHJvdG9jb2wgMTI5LiAqLworI2RlZmluZSBYUEFEX1hCT1gzNjBfVkVORE9SX1BS T1RPQ09MKHZlbmQscHIpIFwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX1ZF TkRPUiB8IFwKKwkJCVVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sIFwKKwkuaWRWZW5kb3Ig PSAodmVuZCksIFwKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLCBc CisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IDkzLCBcCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9IChw cikKKyNkZWZpbmUgWFBBRF9YQk9YMzYwX1ZFTkRPUih2ZW5kKSBcCisJeyBYUEFEX1hCT1gzNjBf VkVORE9SX1BST1RPQ09MKHZlbmQsIDEpIH0sIFwKKwl7IFhQQURfWEJPWDM2MF9WRU5ET1JfUFJP VE9DT0wodmVuZCwgMTI5KSB9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB4cGFkX3Rh YmxlW10gPSB7CisJCS8qIFgtQm94IFVTQi1JRiBub3QgYXBwcm92ZWQgY2xhc3MgKi8KKwl7IFVT Ql9JTlRFUkZBQ0VfSU5GTygnWCcsICdCJywgMCkgfSwKKwlYUEFEX1hCT1gzNjBfVkVORE9SKDB4 MDQ1ZSksCS8qIE1pY3Jvc29mdCBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KKwlYUEFEX1hCT1gz NjBfVkVORE9SKDB4MDQ2ZCksCS8qIExvZ2l0ZWNoIDM2MCBzdHlsZSBjb250cm9sbGVycyAqLwor CVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwNzM4KSwJLyogTWFkIENhdHogWC1Cb3ggMzYwIGNvbnRy b2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDBlNmYpLAkvKiAweDBlNmYgWC1Cb3gg MzYwIGNvbnRyb2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDE0MzApLAkvKiBSZWRP Y3RhbmUgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNF X1RBQkxFKHVzYiwgeHBhZF90YWJsZSk7CisKKworLyogV2lyZWxlc3MgMzYwIGRldmljZSBpZGVu dGlmaWNhdGlvbi4KKyAqCisgKiBXaGVuIGEgd2lyZWxlc3MgY29udHJvbGxlciBjb25uZWN0cywg dGhlIDJuZCBwYWNrZXQgaXQgc2VuZHMgU0VFTVMgdG8KKyAqIGJlIHNvbWUga2luZCBvZiB1bmlx dWUgY29udHJvbGxlciBpZGVudGlmaWNhdGlvbiBtZXNzYWdlLiBVc2luZyB1c2Jtb24KKyAqIChz ZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dCksIEkgdHJpZWQgNCBnYW1lcGFkcyBhbmQg YSBndWl0YXIsIGFuZAorICogSSBjb2xsZWN0ZWQgdGhlIGZvbGxvd2luZyA1IElEIHBhY2tldHMg ZnJvbSB0aGUgNSBkZXZpY2VzOgorICoKKyAqIDAwMGYwMGYwIDAwY2NmZDI3IDAwNjBlMjI2IDYz NzAwMDEwIDEzZTMyMDFkIDMwMDM0MDAxIDUwMDFmZmZmIGZmCisgKiAwMDBmMDBmMCBmMGNjZmQy NyAwMDYwZDhjNCBlOTYwMDAwOSAxM2U3MjAxZCAzMDAzNDAwMSA1MDAxZmZmZiBmZgorICogMDAw ZjAwZjAgMDBjY2ZkMjcgMDA2MDU3OGIgODJmMDAwMTAgMTNlMzIwMWQgMzAwMzQwMDEgNTAwMWZm ZmYgZmYKKyAqIDAwMGYwMGYwIGYwY2NmZDI3IDAwNjBkYTFjIGIxNTAwMDA5IDEzZTcyMDFkIDMw MDM0MDAxIDUwMDFmZmZmIGZmCisgKiAwMDBmMDBmMCBmMGNjZmQyNyAwMDYwMDJkMSA3MWQxMDAw MCAxM2UzMjAxZCAzMDAzNDQzMCA1MTA3ZmZmZiBmZgorICoKKyAqIEZyb20gdGhpcyB0cmFjZSBk YXRhLCBJIGNvbmNvY3RlZCB0aGUgZm9sbG93aW5nIChwb3RlbnRpYWxseSBpbmNvcnJlY3QpCisg KiBzY2hlbWUgZm9yIGRldGVjdGluZyB0eXBlIGFuZCB1bmlxdWUgSUQ6CisgKgorICogKioqKioq KiogeHgqKioqeHggeHh4eHh4eHggeHh4eCoqeHggKip4eCoqKiogKioqKnR0dHQgdHR0dCoqKiog KioKKyAqICAgICAgICAgICAgICAgIHwgIHVuaXF1ZSBpZCB8ICAgICAgICAgICAgICAgICAgICB8 ICB0eXBlIHwKKyAqCisgKiBJdCBhcHBlYXJzIHRoYXQgc29tZSBvZiB0aGUgYnl0ZXMgaW4gdGhl IGZpcnN0IGhhbGYgb2YgdGhlIG1lc3NhZ2UsIG5vdGVkCisgKiBhYm92ZSBhcyAidW5pcXVlIGlk IiBhcmUgc29tZSBzb3J0IG9mIHNlcmlhbCBudW1iZXIsIHRob3VnaCBJIGNhbm5vdCB3b3JrCisg KiBvdXQgYW55IGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gdGhlc2UgYnl0ZXMgYW5kIHRoZSBzZXJp YWwgbnVtYmVyIHByaW50ZWQKKyAqIHVuZGVyIHRoZSBiYXR0ZXJ5IHBhY2suIE1hbnkgb2YgdGhl IGJ5dGVzIGluIHRoaXMgcG9zc2libHkgdW5pcXVlIGZpZWxkCisgKiBhcmUgbm90IHVuaXF1ZSBh Y3Jvc3MgbXkgY29udHJvbGxlcnMsIGFuZCBtYXkgbm90IGluIGZhY3QgYmUgcGFydCBvZiB0aGUK KyAqIGNvbnRyb2xsZXIncyB1bmlxdWUgaWRlbnRpZmljYXRpb24sIGJ1dCBJIGZpZ3VyZWQgaXQg d2FzIGJldHRlciB0byBoYXZlCisgKiBleHRyYSBieXRlcyBvbiBlaXRoZXIgZW5kIG9mIHRoZSB1 bmlxdWUgYnl0ZSBzdHJpbmcgaW5zdGVhZCBvZiB0aGUKKyAqIGFsdGVybmF0aXZlLiBJbiBhZGRp dGlvbiwgdGhlIHBhY2tldCBhcHBlYXJzIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mCisgKiB0aGUg Y29udHJvbGxlciB0b3dhcmQgdGhlIGVuZDogdGhlIHBhZHMgYWxsIHNlbmQgNDAwMSA1MDAxLCB3 aGlsZSB0aGUKKyAqIGd1aXRhciBzZW5kcyA0NDMwIDUxMDcuCisgKgorICogRnVydGhlciB0ZXN0 aW5nIG92ZXIgYSB3aWRlciB2YXJpZXR5IG9mIGRldmljZXMgaXMgcHJvYmFibHkgbmVlZGVkIHRv CisgKiBkZXRlcm1pbmUgaWYgY2hhbmdlcyBuZWVkIHRvIGJlIG1hZGUgdG8gdGhpcyBzY2hlbWUu CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdzM2MF9pZCB7CisJdTMyIGlkX2J5dGVzOworCXU4 IGNvbnRyb2xsZXJfdHlwZTsKK30gdzM2MF9pZFtdID0geworCXsgMHg0MDAxNTAwMSwgWENPTlRS T0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4NDQzMDUxMDcsIFhDT05UUk9MTEVSX1RZUEVfR1VJVEFS IH0sCisJeyAweDAwMDAwMDAwLCBYQ09OVFJPTExFUl9UWVBFX05PTkUgfQorfTsKKworCisvKiBT b21lIG9mIHRoZSBmaWVsZHMgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgYXJlIGZvciBsYXRl ciB1c2Ugd2l0aAorICogdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyB0byByZWNvZ25pemUgaW5kaXZp ZHVhbCBjb250cm9sbGVycy4gVGhlIGRlYWQgem9uZXMKKyAqIGFuZCBheGlzIGxpbWl0cyBjYW4g YmUgY2hhbmdlZCAib24gdGhlIGZseSIgYW5kIGFyZSBlZmZlY3RpdmUgaW1tZWRpYXRlbHkuCisg KgorICogVGhlIGZpZWxkcyBsYWJlbGVkICJybyIgYW5kICJydyIgYXJlIGludGVuZGVkIHRvIGJl IHJlYWQtb25seSBhbmQKKyAqIHJlYWQtd3JpdGUsIHJlc3BlY3RpdmVseSwgd2hlbiBleHBvc2Vk IGluIHN5c2ZzLiBNb3N0IG9mIHRoZSByZWFkLW9ubHkKKyAqIGZpZWxkcyBhcmUgdG8gc3VwcG9y dCAqd2lyZWxlc3MqIDM2MCBjb250cm9sbGVycy4gVGhlIGNvbnRyb2xsZXJfbnVtYmVyCisgKiBp cyB1c2VkIHRvIHNldCB0aGUgTEVELCB3aGlsZSBjb250cm9sbGVyX3ByZXNlbnQgdHJhY2tzIHdo ZXRoZXIgdGhlCisgKiBjb250cm9sbGVyIGlzIGNvbm5lY3RlZCB0byB0aGUgd2lyZWxlc3MgcmVj ZWl2ZXIuIENvbnRyb2xsZXIgdHlwZSBhcHBsaWVzCisgKiB0byBhbGwgbW9kZWxzICh3aXJlZCBh bmQgd2lyZWxlc3MpLCBhbmQgdHJhY2tzIHdoZXRoZXIgdGhlIGRldmljZSBpcyBhIHBhZCwKKyAq IGd1aXRhciwgZXRjLiBmb3IgbGF0ZXIgdXNlcnNwYWNlIHVzZS4gU2VlIHRoZSBjb21tZW50IGFi b3ZlIHJlZ2FyZGluZworICogdHlwZSBhbmQgdW5pcXVlIElEIGRldGVjdGlvbiBvbiB3aXJlbGVz cyAzNjAgcmVjZWl2ZXJzLgorICovCitzdHJ1Y3QgdXNiX3hwYWQgeworCXN0cnVjdCBpbnB1dF9k ZXYgKmRldjsJCS8qIGlucHV0IGRldmljZSBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3QgdXNiX2Rldmlj ZSAqdWRldjsJLyogdXNiIGRldmljZSAqLworCisJc3RydWN0IHVyYiAqaXJxX2luOwkJLyogdXJi IGZvciBpbnRlcnJ1cHQgaW4gcmVwb3J0ICovCisJdW5zaWduZWQgY2hhciAqaWRhdGE7CQkvKiBp bnB1dCBkYXRhICovCisJZG1hX2FkZHJfdCBpZGF0YV9kbWE7CisKKyNpZiBkZWZpbmVkKENPTkZJ R19KT1lTVElDS19YUEFEX0ZGKSB8fCBkZWZpbmVkKENPTkZJR19KT1lTVElDS19YUEFEX0xFRFMp CisJc3RydWN0IHVyYiAqaXJxX291dDsJCS8qIHVyYiBmb3IgaW50ZXJydXB0IG91dCByZXBvcnQg Ki8KKwl1bnNpZ25lZCBjaGFyICpvZGF0YTsJCS8qIG91dHB1dCBkYXRhICovCisJZG1hX2FkZHJf dCBvZGF0YV9kbWE7CisJc3RydWN0IG11dGV4IG9kYXRhX211dGV4OworI2VuZGlmCisKKyNpZiBk ZWZpbmVkKENPTkZJR19KT1lTVElDS19YUEFEX0xFRFMpCisJc3RydWN0IHhwYWRfbGVkICpsZWQ7 CisjZW5kaWYKKworCWNoYXIgcGh5c1s2NF07CQkJLyogcGh5c2ljYWwgZGV2aWNlIHBhdGggKi8K KworCWludCBkcGFkX21hcHBpbmc7CQkvKiBtYXAgZC1wYWQgdG8gYnV0dG9ucyBvciB0byBheGVz ICovCisJaW50IHh0eXBlOwkJCS8qIHR5cGUgb2YgeGJveCBkZXZpY2UgKi8KKworCS8qIFdvcmsg c3RydWN0dXJlIGZvciBtb3ZpbmcgdGhlIGNhbGwgdG8geHBhZF9zZW5kX2xlZF9jb21tYW5kCisJ ICogb3V0c2lkZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHBhY2tldCBwcm9jZXNzaW5nICov CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisKKwlpbnQgY29udHJvbGxlcl9udW1iZXI7CQkv KiBjb250cm9sbGVyICMgKDEtNCkgZm9yIDM2MHcuIHJvICovCisJaW50IGNvbnRyb2xsZXJfcHJl c2VudDsgICAgICAgICAvKiAzNjB3IGNvbnRyb2xsZXIgcHJlc2VuY2UuIHJvICovCisJaW50IGNv bnRyb2xsZXJfdHlwZTsgICAgICAgICAgICAvKiBjb250cm9sbGVyIHR5cGUuIHJvICovCisJY2hh ciBjb250cm9sbGVyX3VuaXF1ZV9pZFsxN107ICAvKiB1bmlxdWUgSUQgb2YgY29udHJvbGxlciAo MzYwdykuIHJvICovCisJdW5zaWduZWQgaW50IGxlZnRfZGVhZF96b25lOyAgICAvKiBkZWFkIHpv bmUgZm9yIGxlZnQgc3RpY2suIHJ3ICovCisJdW5zaWduZWQgaW50IHJpZ2h0X2RlYWRfem9uZTsg ICAvKiBkZWFkIHpvbmUgZm9yIHJpZ2h0IHN0aWNrLiBydyAqLworCXVuc2lnbmVkIGludCBsZWZ0 X3N0aWNrX2xpbWl0OyAgLyogYXhpcyBsaW1pdCBmb3IgbGVmdCBzdGljay4gcncgKi8KKwl1bnNp Z25lZCBpbnQgcmlnaHRfc3RpY2tfbGltaXQ7IC8qIGF4aXMgbGltaXQgZm9yIHJpZ2h0IHN0aWNr LiBydyAqLworCWludCBydW1ibGVfZW5hYmxlOyAgICAgICAgICAgICAgLyogZW5hYmxlL2Rpc2Fi bGUgcnVtYmxlLiBydyAqLworCWludCBsZWZ0X3RyaWdnZXJfZnVsbF9heGlzOyAgICAgLyogZnVs bCBheGlzIC0gbGVmdCB0cmlnZ2VyLiBydyAqLworCWludCByaWdodF90cmlnZ2VyX2Z1bGxfYXhp czsgICAgLyogZnVsbCBheGlzIC0gcmlnaHQgdHJpZ2dlci4gcncgKi8KKworCWludCBzeXNmc19v azsgICAgICAgICAgICAgICAgICAgLyogc3lzZnMgaW50ZXJmYWNlIE9LICovCit9OworI2RlZmlu ZSB0b194cGFkKGQpIGlucHV0X2dldF9kcnZkYXRhKHRvX2lucHV0X2RldihkKSkKKworCisvKiBG dW5jdGlvbiBwcm90b3R5cGVzIGZvciBub24tc3lzZnMgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLwor c3RhdGljIHZvaWQgc2V0X2RlYWRfem9uZSh1bnNpZ25lZCBpbnQgbmV3X3NpemUsIHVuc2lnbmVk IGludCAqZHosCisJdW5zaWduZWQgaW50IHN0aWNrX2xpbWl0KTsKK3N0YXRpYyB2b2lkIHNldF9z dGlja19saW1pdCh1bnNpZ25lZCBpbnQgbmV3X3NpemUsIHVuc2lnbmVkIGludCAqc2wsCisJdW5z aWduZWQgaW50IGRlYWRfem9uZSk7CitzdGF0aWMgdm9pZCB4cGFkX2luaXRfY29udHJvbGxlcihz dHJ1Y3QgdXNiX3hwYWQgKnhwYWQpOworc3RhdGljIHZvaWQgeHBhZF9zZW5kX2xlZF9jb21tYW5k KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgaW50IGNvbW1hbmQpOworc3RhdGljIHZvaWQgeHBhZF93 b3JrX2NvbnRyb2xsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KTsKK3N0YXRpYyB2b2lkIHhwYWRf cHJvY2Vzc19zdGlja3Moc3RydWN0IHVzYl94cGFkICp4cGFkLCB1bnNpZ25lZCBjaGFyICpkYXRh KTsKK3N0YXRpYyB2b2lkIHhwYWRfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4cGFk LCB1MTYgY21kLAorCXVuc2lnbmVkIGNoYXIgKmRhdGEpOworc3RhdGljIHZvaWQgeHBhZDM2MF9w cm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsCisJdTE2IGNtZCwgdW5zaWduZWQg Y2hhciAqZGF0YSk7CitzdGF0aWMgdm9pZCB4cGFkMzYwd19pZGVudGlmeV9jb250cm9sbGVyKHN0 cnVjdCB1c2JfeHBhZCAqeHBhZCwKKwl1bnNpZ25lZCBjaGFyICpkYXRhKTsKK3N0YXRpYyB2b2lk IHhwYWQzNjB3X3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgdTE2IGNtZCwK Kwl1bnNpZ25lZCBjaGFyICpkYXRhKTsKK3N0YXRpYyB2b2lkIHhwYWRfaXJxX2luKHN0cnVjdCB1 cmIgKnVyYik7CitzdGF0aWMgdm9pZCB4cGFkX2lycV9vdXQoc3RydWN0IHVyYiAqdXJiKTsKK3N0 YXRpYyBpbnQgeHBhZF9pbml0X291dHB1dChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Ziwgc3Ry dWN0IHVzYl94cGFkICp4cGFkKTsKK3N0YXRpYyB2b2lkIHhwYWRfc3RvcF9vdXRwdXQoc3RydWN0 IHVzYl94cGFkICp4cGFkKTsKK3N0YXRpYyB2b2lkIHhwYWRfc3RvcF9vdXRwdXQoc3RydWN0IHVz Yl94cGFkICp4cGFkKTsKK3N0YXRpYyBpbnQgeHBhZF9wbGF5X2VmZmVjdChzdHJ1Y3QgaW5wdXRf ZGV2ICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KTsK K3N0YXRpYyBpbnQgeHBhZF9pbml0X2ZmKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMg dm9pZCB4cGFkX3NlbmRfbGVkX2NvbW1hbmQoc3RydWN0IHVzYl94cGFkICp4cGFkLCBpbnQgY29t bWFuZCk7CitzdGF0aWMgdm9pZCB4cGFkX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVk X2NkZXYsCisJZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSk7CitzdGF0aWMgaW50IHhwYWRfbGVk X3Byb2JlKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgdm9pZCB4cGFkX2xlZF9kaXNj b25uZWN0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgaW50IHhwYWRfb3BlbihzdHJ1 Y3QgaW5wdXRfZGV2ICpkZXYpOworc3RhdGljIHZvaWQgeHBhZF9jbG9zZShzdHJ1Y3QgaW5wdXRf ZGV2ICpkZXYpOworc3RhdGljIHZvaWQgeHBhZF9zZXRfdXBfYWJzKHN0cnVjdCBpbnB1dF9kZXYg KmlucHV0X2Rldiwgc2lnbmVkIHNob3J0IGFicyk7CitzdGF0aWMgaW50IHhwYWRfcHJvYmUoc3Ry dWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlk KTsKK3N0YXRpYyB2b2lkIHhwYWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50 Zik7CitzdGF0aWMgaW50IF9faW5pdCB1c2JfeHBhZF9pbml0KHZvaWQpOworc3RhdGljIHZvaWQg X19leGl0IHVzYl94cGFkX2V4aXQodm9pZCk7CisKKworLyogc3lzZnMgaW50ZXJmYWNlICovCitz dGF0aWMgc3NpemVfdCB4cGFkX3Nob3dfdWludChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgeHBh ZF9zdG9yZV91aW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK3N0YXRpYyBzc2l6ZV90 IHhwYWRfc3RvcmVfYm9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CitzdGF0aWMgc3Np emVfdCB4cGFkX3N0b3JlX3JvKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK3N0YXRpYyBz c2l6ZV90IHhwYWRfc2hvd19pbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IHhwYWRfc2hvd19p ZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBj aGFyICpidWYpOworCisKKworLyogRGV2aWNlIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBERVZJQ0Vf QVRUUihsZWZ0X2RlYWRfem9uZSwgMDY0NCwgeHBhZF9zaG93X3VpbnQsIHhwYWRfc3RvcmVfdWlu dCk7CitzdGF0aWMgREVWSUNFX0FUVFIocmlnaHRfZGVhZF96b25lLCAwNjQ0LCB4cGFkX3Nob3df dWludCwgeHBhZF9zdG9yZV91aW50KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihsZWZ0X3N0aWNrX2xp bWl0LCAwNjQ0LCB4cGFkX3Nob3dfdWludCwgeHBhZF9zdG9yZV91aW50KTsKK3N0YXRpYyBERVZJ Q0VfQVRUUihyaWdodF9zdGlja19saW1pdCwgMDY0NCwgeHBhZF9zaG93X3VpbnQsIHhwYWRfc3Rv cmVfdWludCk7CitzdGF0aWMgREVWSUNFX0FUVFIocnVtYmxlX2VuYWJsZSwgMDY0NCwgeHBhZF9z aG93X2ludCwgeHBhZF9zdG9yZV9ib29sKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihsZWZ0X3RyaWdn ZXJfZnVsbF9heGlzLCAwNjQ0LCB4cGFkX3Nob3dfaW50LAorCQkJeHBhZF9zdG9yZV9ib29sKTsK K3N0YXRpYyBERVZJQ0VfQVRUUihyaWdodF90cmlnZ2VyX2Z1bGxfYXhpcywgMDY0NCwgeHBhZF9z aG93X2ludCwKKwkJCXhwYWRfc3RvcmVfYm9vbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoY29udHJv bGxlcl9udW1iZXIsIDA0NDQsIHhwYWRfc2hvd19pbnQsIHhwYWRfc3RvcmVfcm8pOworc3RhdGlj IERFVklDRV9BVFRSKGNvbnRyb2xsZXJfcHJlc2VudCwgMDQ0NCwgeHBhZF9zaG93X2ludCwgeHBh ZF9zdG9yZV9ybyk7CitzdGF0aWMgREVWSUNFX0FUVFIoY29udHJvbGxlcl90eXBlLCAwNDQ0LCB4 cGFkX3Nob3dfaW50LCB4cGFkX3N0b3JlX3JvKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpZCwgMDQ0 NCwgeHBhZF9zaG93X2lkLCB4cGFkX3N0b3JlX3JvKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1 dGUgKnhwYWRfZGVmYXVsdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9sZWZ0X2RlYWRfem9uZS5h dHRyLAorCSZkZXZfYXR0cl9yaWdodF9kZWFkX3pvbmUuYXR0ciwKKwkmZGV2X2F0dHJfbGVmdF9z dGlja19saW1pdC5hdHRyLAorCSZkZXZfYXR0cl9yaWdodF9zdGlja19saW1pdC5hdHRyLAorCSZk ZXZfYXR0cl9ydW1ibGVfZW5hYmxlLmF0dHIsCisJJmRldl9hdHRyX2xlZnRfdHJpZ2dlcl9mdWxs X2F4aXMuYXR0ciwKKwkmZGV2X2F0dHJfcmlnaHRfdHJpZ2dlcl9mdWxsX2F4aXMuYXR0ciwKKwkm ZGV2X2F0dHJfY29udHJvbGxlcl9udW1iZXIuYXR0ciwKKwkmZGV2X2F0dHJfY29udHJvbGxlcl9w cmVzZW50LmF0dHIsCisJJmRldl9hdHRyX2NvbnRyb2xsZXJfdHlwZS5hdHRyLAorCSZkZXZfYXR0 cl9pZC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHhw YWRfZGVmYXVsdF9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IHhwYWRfZGVmYXVsdF9hdHRycywK KwkubmFtZSA9ICJnYW1lX2RldmljZSIsCit9OworCisKKworc3RhdGljIHN0cnVjdCB1c2JfZHJp dmVyIHhwYWRfZHJpdmVyID0geworCS5uYW1lCQk9ICJ4cGFkIiwKKwkucHJvYmUJCT0geHBhZF9w cm9iZSwKKwkuZGlzY29ubmVjdAk9IHhwYWRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSB4cGFk X3RhYmxlLAorfTsKKworbW9kdWxlX2luaXQodXNiX3hwYWRfaW5pdCk7Cittb2R1bGVfZXhpdCh1 c2JfeHBhZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9E RVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNlbmRp ZgorCisvKiBEcml2ZXIgSGlzdG9yeToKKyAqCisgKiAyMDA5LTAyLTI4IDogVHJpZ2dlcnMgbm93 IGhhbGYtYXhlcyBieSBkZWZhdWx0CisgKiAgLSB0cmlnZ2VycyB3aWxsIG5vdyBiZSBwb3NpdGl2 ZSBoYWxmLWF4ZXMgb25seSwgdW5sZXNzIGEgZnVsbCBheGlzIG1hcHBpbmcKKyAqICAgIGlzIGVu YWJsZWQgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2Ugb24gYSBwZXItdHJpZ2dlciBiYXNpcworICog IC0gbW92ZWQgSU5JVF9XT1JLIHRvIHhwYWRfcHJvYmUgYW5kIHJlbW92ZWQgSU5JVF9XT1JLL1BS RVBBUkVfV09SSyBmcm9tCisgKiAgICBpbnRlcnJ1cHQgaGFuZGxlcjsgYWxzbyByZW1vdmVkIHRo ZSB3b3JrX3BlbmRpbmcgZmxhZyBmcm9tIHN0cnVjdAorICogICAgdXNiX3hwYWQgKGFsd2F5cyBm bHVzaCBzaGFyZWQgd29ya3F1ZXVlIG9uIHVubG9hZCkKKyAqICAtIHJlYWQtd3JpdGUgc3lzZnMg YXR0cmlidXRlcyBub3cgaGF2ZSA2NDQgZGVmYXVsdCBwZXJtaXNzaW9ucworICoKKyAqIDIwMDkt MDItMjMgOiBDaGFuZ2VzIHBlciBtYWlsaW5nIGxpc3QgKHRoYW5rcyBGcmVkZXJpYyBXZWlzYmVj a2VyKQorICogIC0gbm8gbW9yZSBjaGVjayBmb3IgQ09ORklHX1NZU0ZTOiBzeXNmcyBmdW5jdGlv bnMgd2lsbCBzaW1wbHkgcmV0dXJuCisgKiAgICAwIGlmIHN5c2ZzIGhhcyBub3QgYmVlbiBlbmFi bGVkCisgKiAgLSBmaXhlZCB3ZWlyZCBvcmRlcmluZyBpbiBzc2NhbmYgcmV0dXJuIGNoZWNrCisg KiAgLSBjaGVja2VkIGNvZGUgd2l0aCBzY3JpcHRzL2NoZWNrcGF0Y2gucGwgYW5kIG1hZGUgc3R5 bGUgYWRqdXN0bWVudHMKKyAqCisgKiAyMDA5LTAyLTIxIDogUmVmYWN0b3JlZCBhbmQgY2hhbmdl ZCBzdGljayBoYW5kbGluZworICogIC0gc3BsaXQgY29kZSBpbnRvIHR3byBwaWVjZXMgKHhwYWQu aCBhbmQgeHBhZC5jKQorICogIC0gY2xlYW5lZCB1cCBzeXNmcyBpbnRlcmZhY2UKKyAqICAtIGNo YW5nZWQgc3F1YXJlIGF4aXMgYWxnb3JpdGhtIHRvIGFuIGF4aXMgbGltaXQgYWxnb3JpdGhtLCB3 aGljaCBhbGxvd3MKKyAqICAgIHNpemUgb2YgaW5zY3JpYmVkIHNxdWFyZSB0byBiZSBhZGp1c3Rl ZDsgYXZhaWxhYmxlIGZvciBib3RoIHN0aWNrcworICogIC0gZGVhZCB6b25lcyBub3cgcGVyLXN0 aWNrCisgKgorICogMjAwOS0wMi0xOCA6IENoYW5nZXMgcGVyIG1haWxpbmcgbGlzdCAoYW5kIHNv bWUgYWRkaXRpb25zKQorICogIC0gcmV2aXNlZCBzeXNmcyBpbnRlcmZhY2UgKHRoYW5rcyBHcmVn IEstSCkKKyAqICAtIGNoZWNrIHJldHVybiB2YWx1ZXMgb2Ygc3NjYW5mICh0aGFua3MgT2xpdmVy IE5ldWt1bSkKKyAqICAtIHVyYiBzdWJtaXNzaW9uIHdoaWxlIGhvbGRpbmcgbXV0ZXggbm93IG9u Y2UgYWdhaW4gR0ZQX0tFUk5FTAorICogICAgKHRoYW5rcyBPbGl2ZXIgTmV1a3VtKQorICogIC0g d29yayBzdHJ1Y3R1cmUgZml4ZXMgKHRoYW5rcyBPbGl2ZXIgTmV1a3VtKQorICogIC0gdWV2ZW50 cyBnZW5lcmF0ZWQgZm9yIHdpcmVsZXNzIGNvbnRyb2xsZXIgb25saW5lL29mZmxpbmUKKyAqICAt IHN5c2ZzIGludGVyZmFjZSBvbmx5IGlmIENPTkZJR19TWVNGUyBpcyBzZXQKKyAqCisgKiAyMDA5 LTAyLTE1IDogTWlub3IgYWRqdXN0bWVudHMKKyAqICAtIGFkZGVkIEtPQkpfT05MSU5FL0tPQkpf T0ZGTElORSBldmVudHMgd2hlbiBjb250cm9sbGVycyBhcmUgY29ubmVjdGVkIHRvCisgKiAgICBv ciBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgd2lyZWxlc3MgMzYwIHJlY2VpdmVyCisgKiAgLSBpZ25v cmUgZHVwbGljYXRlIGNvbm5lY3QgbWVzc2FnZXMgb24gdGhlIHNhbWUgY29ubmVjdGlvbgorICog IC0gYWRkZWQgb3B0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIHJ1bWJsZSBvbiBhIHBlci1jb250cm9s bGVyIGJhc2lzCisgKiAgLSBydW1ibGUgZXZlbnRzIGFyZSBub3Qgc2VudCB0byBndWl0YXIgb3Ig ZGFuY2UgcGFkIGRldmljZXMKKyAqCisgKiAyMDA5LTAyLTE0IDogQWRkZWQgc3lzZnMgaW50ZXJm YWNlCisgKiAgLSBkZWFkIHpvbmVzIGFuZCBzcXVhcmUgYXhpcyBzZXR0aW5ncyBjYW4gbm93IGJl IG1hZGUgcGVyLWNvbnRyb2xsZXIKKyAqICAtIHJlbW92ZWQgZGVhZF96b25lIGFuZCBzcXVhcmVf YXhpcyBtb2R1bGUgcGFyYW1ldGVycyAodXNlIHN5c2ZzKQorICogIC0gbmV3IHNxdWFyZSBheGlz IGFsZ29yaXRobQorICoKKyAqIDIwMDktMDItMTMgOiBEaXNhYmxlIHNxdWFyZSBheGlzIGZvciBy aWdodCBzdGljaworICogIC0gc3F1YXJlIGF4aXMgYXBwbGllcyB0byBsZWZ0IHN0aWNrIG9ubHkK KyAqCisgKiAyMDA5LTAyLTEyIDogU2NhbGluZyBmb3IgZGVhZCB6b25lIGFuZCBzcXVhcmUgYXhp cyBzdXBwb3J0CisgKiAgLSBheGVzIG5vdyBzY2FsZSBmcm9tIDAgdG8gMzI3Njcgc3RhcnRpbmcg YXQgZWRnZSBvZiBkZWFkIHpvbmUKKyAqICAtIGluY3JlYXNlZCBkZWZhdWx0IGRlYWQgem9uZSB0 byA4MTkyCisgKiAgLSBpbml0aWFsIHNxdWFyZSBheGlzIHN1cHBvcnQgKHJlbGlhYmxlIG9ubHkg d2l0aCBsZWZ0IHN0aWNrKQorICoKKyAqIDIwMDktMDItMDcgOiBNb3JlIHdpcmVsZXNzIDM2MCBj b250cm9sbGVyIGZpeGVzCisgKiAgLSByZW1vdmVkIGJ1bGsgdXJiIGNvbXBsZXRlbHkKKyAqICAt IHVzZSB4cGFkX3NlbmRfbGVkX2NvbW1hbmQgdG8gc2V0IGNvbnRyb2xsZXIgbnVtYmVyIG9uIExF RCBkaXNwbGF5CisgKiAgICAod2lyZWxlc3MgMzYwIGNvbnRyb2xsZXIpCisgKiAgLSBkZWFkX3pv bmUgaXMgbm93IGFuIGFkanVzdGFibGUgbW9kdWxlIHBhcmFtZXRlcgorICoKKyAqIDIwMDktMDIt MDYgOiBBeGlzIGhhbmRsaW5nIGltcHJvdmVtZW50cworICogIC0gdW5pZmllZCBoYW5kbGVyIGZv ciBsZWZ0IGFuZCByaWdodCBzdGlja3MKKyAqICAtIGluaXRpYWwgc3VwcG9ydCBmb3IgZGVhZCB6 b25lcworICoKKyAqIDIwMDktMDItMDIgOiBXaXJlbGVzcyAzNjAgY29udHJvbGxlciBmaXhlcwor ICogIC0gZm9sbG93ZWQgUFJPVE9DT0wgZGVzY3JpcHRpb24gZnJvbSB4Ym94ZHJ2IHVzZXJzcGFj ZSBkcml2ZXIKKyAqICAtIExFRCBhbmQgcnVtYmxlIHN1cHBvcnQgYWRkZWQgZm9yIHdpcmVsZXNz IDM2MCBjb250cm9sbGVyIChwcm90b2NvbAorICogICAgaXMgZGlmZmVyZW50IGZyb20gd2lyZWQh KQorICoKKyAqIDIwMDQtMTAtMDIgLSAwLjAuNiA6IEREUiBwYWQgc3VwcG9ydAorICogIC0gYm9y cm93ZWQgZnJvbSB0aGUgWEJPWCBsaW51eCBrZXJuZWwKKyAqICAtIFVTQiBpZCdzIGZvciBjb21t b25seSB1c2VkIGRhbmNlIHBhZHMgYXJlIHByZXNlbnQKKyAqICAtIGRhbmNlIHBhZHMgd2lsbCBt YXAgRC1QQUQgdG8gYnV0dG9ucywgbm90IGF4ZXMKKyAqICAtIHBhc3MgdGhlIG1vZHVsZSBwYXJh bWF0ZXIgJ2RwYWRfdG9fYnV0dG9ucycgdG8gZm9yY2UKKyAqICAgIHRoZSBELVBBRCB0byBtYXAg dG8gYnV0dG9ucyBpZiB5b3VyIHBhZCBpcyBub3QgZGV0ZWN0ZWQKKyAqCisgKiAyMDAyLTA3LTE3 IC0gMC4wLjUgOiBzaW1wbGlmaWVkIGQtcGFkIGhhbmRsaW5nCisgKgorICogMjAwMi0wNy0xNiAt IDAuMC40IDogbWlub3IgY2hhbmdlcywgbWVyZ2Ugd2l0aCBWb2p0ZWNoJ3MgdjAuMC4zCisgKiAg LSB2ZXJpZmllZCB0aGUgbGFjayBvZiBISUQgYW5kIHJlcG9ydCBkZXNjcmlwdG9ycworICogIC0g dmVyaWZpZWQgdGhhdCBBTEwgYnV0dG9ucyBXT1JLCisgKiAgLSBmaXhlZCBkLXBhZCB0byBheGVz IG1hcHBpbmcKKyAqCisgKiAyMDAyLTA3LTE0IC0gMC4wLjMgOiByZXdvcmsgYnkgVm9qdGVjaCBQ YXZsaWsKKyAqICAtIGluZGVudGF0aW9uIGZpeGVzCisgKiAgLSB1c2IgKyBpbnB1dCBpbml0IHNl cXVlbmNlIGZpeGVzCisgKgorICogMjAwMi0wNy0wMiAtIDAuMC4yIDogYmFzaWMgd29ya2luZyB2 ZXJzaW9uCisgKiAgLSBhbGwgYXhlcyBhbmQgOSBvZiB0aGUgMTAgYnV0dG9ucyB3b3JrIChnZXJt YW4gSW50ZXJBY3QgZGV2aWNlKQorICogIC0gdGhlIGJsYWNrIGJ1dHRvbiBkb2VzIG5vdCB3b3Jr CisgKgorICogMjAwMi0wNi0yNyAtIDAuMC4xIDogZmlyc3QgdmVyc2lvbiwganVzdCBzYWlkICJY Qk9YIEhJRCBjb250cm9sbGVyIgorICoKKyAqLwo= --0016e6471696240e770464077a3e-- -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html