From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Ge Gao MIME-Version: 1.0 Date: Mon, 14 May 2012 11:55:51 -0700 Message-ID: <963e33ea7e241e4ee81b4d50180eb8ae@mail.gmail.com> Subject: Submission of invensense IIO driver. To: Jonathan Cameron Cc: Jonathan Cameron , linux-iio@vger.kernel.org Content-Type: multipart/mixed; boundary=f46d043893f9ce256104c003a257 List-ID: --f46d043893f9ce256104c003a257 Content-Type: text/plain; charset=ISO-8859-1 Dear Jonanthan, The attached is the driver for invensense MPU IIO driver. I believe it exceeds the 100,00 characters. Would you advise what to do with it? Thanks. Best regards, Ge GAO -----Original Message----- From: Jonathan Cameron [mailto:jic23@kernel.org] Sent: Monday, May 14, 2012 10:30 AM To: Ge Gao Cc: Jonathan Cameron; linux-iio@vger.kernel.org Subject: Re: trigger removal problem. On 05/14/2012 05:54 PM, Ge Gao wrote: > It is about 7000 lines. It contains seven ".c" files and three ".h" files. > This is a driver that can drive all invensense MPU chips(MPU3500, > MPU3050, MPU6050, MPU9150) and support all the features of the chip. Cool. Sounds like quite a beast ;) Ideal would be to introduce the driver as a number of patches, but if that really isn't possible see whether you will break the vger.kernel.org limit of 100,000 characters. Another option is to attach it as a patch file, but that tends to reduce the number of people who take a look drastically! If you want to send me a copy of the raw patch I'd be happy to advise on whether it can be sensibly broken up into smaller parts. I'll only do a formal review once it is on the list though! Jonathan > > Ge > > > -----Original Message----- > From: Jonathan Cameron [mailto:jic23@kernel.org] > Sent: Saturday, May 12, 2012 1:58 AM > To: Ge Gao > Cc: Jonathan Cameron; linux-iio@vger.kernel.org > Subject: Re: trigger removal problem. > > On 05/11/2012 06:45 PM, Ge Gao wrote: >> I found that if I write "NULL" to the "current_trigger", it will not >> be able to be removed. However, if I write a valid trigger name, such >> as the one in my driver code, it can be removed. Looks strange. But >> solve the problem anyway. >> I actually want to submit my driver code to you. However, it is >> pretty big(it supports all invensense sensors, which are similar but >> some differences still). Is that possible I package the code and send >> it directly? > Much better to do it as an inline patch in an email if you can. > > Attachements are just about alright if you really can't do that. > Just how many lines of code are we talking? > > >> Thanks for your help. >> >> Ge >> >> >> -----Original Message----- >> From: Jonathan Cameron [mailto:jic23@cam.ac.uk] >> Sent: Friday, May 11, 2012 12:40 AM >> To: Ge Gao >> Cc: linux-iio@vger.kernel.org >> Subject: Re: trigger removal problem. >> >> On 5/11/2012 12:53 AM, Ge Gao wrote: >>> Dear all, >>> >>> I am building my IIO driver as a module and will >>> constantly need to use "insmod" and "rmmod" to install it and remove >>> it due to development. However, I found that if I write anything to >>> the "trigger/current_trigger", it will not be able to remove it. The >>> error code is (11). Even I write "null" to it, it will not be able >>> to be removed. >>> However, If I don't write anything to it, just insmod and rmmod, it >>> will be remove successfully. Any idea what could cause this problem? >>> I followed what is in the IIO subsystem driver to write my driver. I >>> can post it if anyone want to take a look. >> Hi Ge, >> >> I'm afraid I won't be able to do any testing until at least tomorrow. >> There are a few things that could give more information though in the >> meantime: >> >> * Could you try the above, but note down the reference counts that >> lsmod will give you for the various drivers at each step of the >> process. (before connecting the trigger, whilst it is connected and >> upon > disconnecting). >> >> * Is there anything left when you read 'current_trigger' after >> writing an invalid name to it? >> >> * Are you using an existing trigger or is it also part of you driver? >> >> Having the source code when I dig futher into this would also be > helpful. >> >> Anyone else seen anything similar? I haven't run any removal >> hammering tests for a month or so, so something might have slipped >> into > the core... >> >> Jonathan >>> >>> Thanks. >>> >>> >>> >>> Ge >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-iio" >>> in the body of a message to majordomo@vger.kernel.org More majordomo >>> info at http://vger.kernel.org/majordomo-info.html --f46d043893f9ce256104c003a257 Content-Type: application/x-tar; name="inv_mpu_iio.tar" Content-Disposition: attachment; filename="inv_mpu_iio.tar" Content-Transfer-Encoding: base64 X-Attachment-Id: 347e36cd0ec9ee9_0.1 ZG1wRGVmYXVsdE1QVTYwNTAuYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1 MAAwMDAxNzUwADAwMDAwMDI0NzExADExNzUyNTQ2NzYwADAxMjY0MgAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGdnYW8AAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAZ2dhbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv KgoqIENvcHlyaWdodCAoQykgMjAxMiBJbnZlbnNlbnNlLCBJbmMuCioKKiBUaGlzIHNvZnR3YXJl IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiog TGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBhbmQKKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVu ZGVyIHRob3NlIHRlcm1zLgoqCiogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKgoqLwovKiBXQVJOSU5HOiBhdXRvZ2Vu ZXJhdGVkIGNvZGUsIGRvIG5vdCBtb2RpZnkgKi8KLyoqCiAqICBAZGVmZ3JvdXAgRE1QREVGQVVM VAogKiAgQGJyaWVmCiAqCiAqICBAewogKiAgICAgIEBmaWxlICAgZG1wRGVmYXVsdE1QVTYwNTAu YwogKiAgICAgIEBicmllZgogKgogKi8KCiNpbmNsdWRlICJkbXBLZXkuaCIKI2luY2x1ZGUgImRt cG1hcC5oIgoKI2RlZmluZSBDRkdfMjcgICAgICAgICAgICAgICgyMDk3KQojZGVmaW5lIENGR18y MSAgICAgICAgICAgICAgKDIwODUpCiNkZWZpbmUgQ0ZHXzIwICAgICAgICAgICAgICAoMTQ5MSkK I2RlZmluZSBDRkdfMjMgICAgICAgICAgICAgICgyMTAwKQojZGVmaW5lIENGR19UQVA0ICAgICAg ICAgICAgKDIwOTEpCiNkZWZpbmUgQ0ZHX1RBUDUgICAgICAgICAgICAoMjA5MikKI2RlZmluZSBD RkdfVEFQNiAgICAgICAgICAgICgyMDkzKQojZGVmaW5lIENGR19HWVJPX1NPVVJDRSAgICAgKDIw NDIpCiNkZWZpbmUgQ0ZHX1RBUDAgICAgICAgICAgICAoMjA4NSkKI2RlZmluZSBDRkdfVEFQMSAg ICAgICAgICAgICgyMDg3KQojZGVmaW5lIENGR19UQVAyICAgICAgICAgICAgKDIwODgpCiNkZWZp bmUgVEVNUExBQkVMICAgICAgICAgICAoMTU5MSkKI2RlZmluZSBDRkdfT1JJRU5UX0lSUV8xICAg ICgxODg0KQojZGVmaW5lIENGR19EUl9JTlQgICAgICAgICAgKDEwMzcpCiNkZWZpbmUgRkNGR18z ICAgICAgICAgICAgICAoMTEwNykKI2RlZmluZSBDRkdfQVVUSCAgICAgICAgICAgICgxMDI5KQoj ZGVmaW5lIENHTk9USUNFX0lOVFIgICAgICAgKDE5NjQpCiNkZWZpbmUgQ0ZHX0FDQ0VMX0ZJTFRF UiAgICAoMTEzOCkKI2RlZmluZSBGQ0ZHXzIgICAgICAgICAgICAgICgxMDYzKQojZGVmaW5lIEZD RkdfMSAgICAgICAgICAgICAgKDEwNTkpCiNkZWZpbmUgRkNGR183ICAgICAgICAgICAgICAoMTA3 MykKI2RlZmluZSBDRkdfMTIgICAgICAgICAgICAgICgyMDgwKQojZGVmaW5lIENGR19UQVA3ICAg ICAgICAgICAgKDIwOTQpCiNkZWZpbmUgQ0ZHXzE0ICAgICAgICAgICAgICAoMjA1NCkKI2RlZmlu ZSBDRkdfMTUgICAgICAgICAgICAgICgyMDU5KQojZGVmaW5lIENGR18xNiAgICAgICAgICAgICAg KDIxMDEpCiNkZWZpbmUgQ0ZHXzYgICAgICAgICAgICAgICAoMjEwOCkKI2RlZmluZSBDRkdfMSAg ICAgICAgICAgICAgICgyMDQ4KQojZGVmaW5lIENGR19UQVAzICAgICAgICAgICAgKDIwODkpCiNk ZWZpbmUgQ0ZHX0VYVEVSTkFMICAgICAgICAoMjA3MCkKI2RlZmluZSBDRkdfOCAgICAgICAgICAg ICAgICgyMDM3KQojZGVmaW5lIENGR185ICAgICAgICAgICAgICAgKDIwNDMpCiNkZWZpbmUgQ0ZH X0ZMSUNLX0lOICAgICAgICAoMTkxNykKI2RlZmluZSBDRkdfRklGT19PTl9FVkVOVCAgICgyMDE3 KQoKI2RlZmluZSBEXzBfMjIgICAgICAgICAgICAgICAgICAoMjIrNTEyKQojZGVmaW5lIERfMF8y NCAgICAgICAgICAgICAgICAgICgyNCs1MTIpCgojZGVmaW5lIERfMF8zNiAgICAgICAgICAgICAg ICAgICgzNikKI2RlZmluZSBEXzBfNTIgICAgICAgICAgICAgICAgICAoNTIpCiNkZWZpbmUgRF8w Xzk2ICAgICAgICAgICAgICAgICAgKDk2KQojZGVmaW5lIERfMF8xMDQgICAgICAgICAgICAgICAg ICgxMDQpCiNkZWZpbmUgRF8wXzEwOCAgICAgICAgICAgICAgICAgKDEwOCkKI2RlZmluZSBEXzBf MTYzICAgICAgICAgICAgICAgICAoMTYzKQojZGVmaW5lIERfMF8xODggICAgICAgICAgICAgICAg ICgxODgpCiNkZWZpbmUgRF8wXzE5MiAgICAgICAgICAgICAgICAgKDE5MikKI2RlZmluZSBEXzBf MjI0ICAgICAgICAgICAgICAgICAoMjI0KQojZGVmaW5lIERfMF8yMjggICAgICAgICAgICAgICAg ICgyMjgpCiNkZWZpbmUgRF8wXzIzMiAgICAgICAgICAgICAgICAgKDIzMikKI2RlZmluZSBEXzBf MjM2ICAgICAgICAgICAgICAgICAoMjM2KQoKI2RlZmluZSBEXzFfMiAgICAgICAgICAgICAgICAg ICAoMjU2ICsgMikKI2RlZmluZSBEXzFfNCAgICAgICAgICAgICAgICAgICAoMjU2ICsgNCkKI2Rl ZmluZSBEXzFfOCAgICAgICAgICAgICAgICAgICAoMjU2ICsgOCkKI2RlZmluZSBEXzFfMTAgICAg ICAgICAgICAgICAgICAoMjU2ICsgMTApCiNkZWZpbmUgRF8xXzI0ICAgICAgICAgICAgICAgICAg KDI1NiArIDI0KQojZGVmaW5lIERfMV8yOCAgICAgICAgICAgICAgICAgICgyNTYgKyAyOCkKI2Rl ZmluZSBEXzFfMzYgICAgICAgICAgICAgICAgICAoMjU2ICsgMzYpCiNkZWZpbmUgRF8xXzQwICAg ICAgICAgICAgICAgICAgKDI1NiArIDQwKQojZGVmaW5lIERfMV80NCAgICAgICAgICAgICAgICAg ICgyNTYgKyA0NCkKI2RlZmluZSBEXzFfNzIgICAgICAgICAgICAgICAgICAoMjU2ICsgNzIpCiNk ZWZpbmUgRF8xXzc0ICAgICAgICAgICAgICAgICAgKDI1NiArIDc0KQojZGVmaW5lIERfMV83OSAg ICAgICAgICAgICAgICAgICgyNTYgKyA3OSkKI2RlZmluZSBEXzFfODggICAgICAgICAgICAgICAg ICAoMjU2ICsgODgpCiNkZWZpbmUgRF8xXzkwICAgICAgICAgICAgICAgICAgKDI1NiArIDkwKQoj ZGVmaW5lIERfMV85MiAgICAgICAgICAgICAgICAgICgyNTYgKyA5MikKI2RlZmluZSBEXzFfOTYg ICAgICAgICAgICAgICAgICAoMjU2ICsgOTYpCiNkZWZpbmUgRF8xXzk4ICAgICAgICAgICAgICAg ICAgKDI1NiArIDk4KQojZGVmaW5lIERfMV8xMDYgICAgICAgICAgICAgICAgICgyNTYgKyAxMDYp CiNkZWZpbmUgRF8xXzEwOCAgICAgICAgICAgICAgICAgKDI1NiArIDEwOCkKI2RlZmluZSBEXzFf MTEyICAgICAgICAgICAgICAgICAoMjU2ICsgMTEyKQojZGVmaW5lIERfMV8xMjggICAgICAgICAg ICAgICAgICgyNTYgKyAxNDQpCiNkZWZpbmUgRF8xXzE1MiAgICAgICAgICAgICAgICAgKDI1NiAr IDEyKQojZGVmaW5lIERfMV8xNjAgICAgICAgICAgICAgICAgICgyNTYgKyAxNjApCiNkZWZpbmUg RF8xXzE3NiAgICAgICAgICAgICAgICAgKDI1NiArIDE3NikKI2RlZmluZSBEXzFfMTc4ICAgICAg ICAgICAgICAgICAoMjU2ICsgMTc4KQojZGVmaW5lIERfMV8yMTggICAgICAgICAgICAgICAgICgy NTYgKyAyMTgpCiNkZWZpbmUgRF8xXzIzMiAgICAgICAgICAgICAgICAgKDI1NiArIDIzMikKI2Rl ZmluZSBEXzFfMjM2ICAgICAgICAgICAgICAgICAoMjU2ICsgMjM2KQojZGVmaW5lIERfMV8yNDAg ICAgICAgICAgICAgICAgICgyNTYgKyAyNDApCiNkZWZpbmUgRF8xXzI0NCAgICAgICAgICAgICAg ICAgKDI1NiArIDI0NCkKI2RlZmluZSBEXzFfMjUwICAgICAgICAgICAgICAgICAoMjU2ICsgMjUw KQojZGVmaW5lIERfMV8yNTIgICAgICAgICAgICAgICAgICgyNTYgKyAyNTIpCiNkZWZpbmUgRF8y XzEyICAgICAgICAgICAgICAgICAgKDUxMiArIDEyKQojZGVmaW5lIERfMl85NiAgICAgICAgICAg ICAgICAgICg1MTIgKyA5NikKI2RlZmluZSBEXzJfMTA4ICAgICAgICAgICAgICAgICAoNTEyICsg MTA4KQojZGVmaW5lIERfMl8yMDggICAgICAgICAgICAgICAgICg1MTIgKyAyMDgpCiNkZWZpbmUg RF8yXzIyNCAgICAgICAgICAgICAgICAgKDUxMiArIDIyNCkKI2RlZmluZSBEXzJfMjM2ICAgICAg ICAgICAgICAgICAoNTEyICsgMjM2KQojZGVmaW5lIERfMl8yNDQgICAgICAgICAgICAgICAgICg1 MTIgKyAyNDQpCiNkZWZpbmUgRF8yXzI0OCAgICAgICAgICAgICAgICAgKDUxMiArIDI0OCkKI2Rl ZmluZSBEXzJfMjUyICAgICAgICAgICAgICAgICAoNTEyICsgMjUyKQoKI2RlZmluZSBDUEFTU19C SUFTX1ggICAgICAgICAgICAoMzUgKiAxNiArIDQpCiNkZWZpbmUgQ1BBU1NfQklBU19ZICAgICAg ICAgICAgKDM1ICogMTYgKyA4KQojZGVmaW5lIENQQVNTX0JJQVNfWiAgICAgICAgICAgICgzNSAq IDE2ICsgMTIpCiNkZWZpbmUgQ1BBU1NfTVRYXzAwICAgICAgICAgICAgKDM2ICogMTYpCiNkZWZp bmUgQ1BBU1NfTVRYXzAxICAgICAgICAgICAgKDM2ICogMTYgKyA0KQojZGVmaW5lIENQQVNTX01U WF8wMiAgICAgICAgICAgICgzNiAqIDE2ICsgOCkKI2RlZmluZSBDUEFTU19NVFhfMTAgICAgICAg ICAgICAoMzYgKiAxNiArIDEyKQojZGVmaW5lIENQQVNTX01UWF8xMSAgICAgICAgICAgICgzNyAq IDE2KQojZGVmaW5lIENQQVNTX01UWF8xMiAgICAgICAgICAgICgzNyAqIDE2ICsgNCkKI2RlZmlu ZSBDUEFTU19NVFhfMjAgICAgICAgICAgICAoMzcgKiAxNiArIDgpCiNkZWZpbmUgQ1BBU1NfTVRY XzIxICAgICAgICAgICAgKDM3ICogMTYgKyAxMikKI2RlZmluZSBDUEFTU19NVFhfMjIgICAgICAg ICAgICAoNDMgKiAxNiArIDEyKQojZGVmaW5lIERfQUNUMCAgICAgICAgICAgICAgICAgICg0MCAq IDE2KQojZGVmaW5lIERfQUNTWCAgICAgICAgICAgICAgICAgICg0MCAqIDE2ICsgNCkKI2RlZmlu ZSBEX0FDU1kgICAgICAgICAgICAgICAgICAoNDAgKiAxNiArIDgpCiNkZWZpbmUgRF9BQ1NaICAg ICAgICAgICAgICAgICAgKDQwICogMTYgKyAxMikKCiNkZWZpbmUgRkxJQ0tfTVNHICAgICAgICAg ICAgICAgKDQ1ICogMTYgKyA0KQojZGVmaW5lIEZMSUNLX0NPVU5URVIgICAgICAgICAgICg0NSAq IDE2ICsgOCkKI2RlZmluZSBGTElDS19MT1dFUiAgICAgICAgICAgICAoNDUgKiAxNiArIDEyKQoj ZGVmaW5lIEZMSUNLX1VQUEVSICAgICAgICAgICAgICg0NiAqIDE2ICsgMTIpCgojZGVmaW5lIERf QVVUSF9PVVQgICAgICAgICAgICAgICAoMzIpCiNkZWZpbmUgRF9BVVRIX0lOICAgICAgICAgICAg ICAgICgzNikKI2RlZmluZSBEX0FVVEhfQSAgICAgICAgICAgICAgICAgKDQwKQojZGVmaW5lIERf QVVUSF9CICAgICAgICAgICAgICAgICAoNDQpCgojZGVmaW5lIERfUEVEU1REX0JQX0IgICAgICAg ICAgKDc2OCArIDB4MUMpCiNkZWZpbmUgRF9QRURTVERfSFBfQSAgICAgICAgICAoNzY4ICsgMHg3 OCkKI2RlZmluZSBEX1BFRFNURF9IUF9CICAgICAgICAgICg3NjggKyAweDdDKQojZGVmaW5lIERf UEVEU1REX0JQX0E0ICAgICAgICAgKDc2OCArIDB4NDApCiNkZWZpbmUgRF9QRURTVERfQlBfQTMg ICAgICAgICAoNzY4ICsgMHg0NCkKI2RlZmluZSBEX1BFRFNURF9CUF9BMiAgICAgICAgICg3Njgg KyAweDQ4KQojZGVmaW5lIERfUEVEU1REX0JQX0ExICAgICAgICAgKDc2OCArIDB4NEMpCiNkZWZp bmUgRF9QRURTVERfSU5UX1RIUlNIICAgICAoNzY4ICsgMHg2OCkKI2RlZmluZSBEX1BFRFNURF9D TElQICAgICAgICAgICg3NjggKyAweDZDKQojZGVmaW5lIERfUEVEU1REX1NCICAgICAgICAgICAg KDc2OCArIDB4MjgpCiNkZWZpbmUgRF9QRURTVERfU0JfVElNRSAgICAgICAoNzY4ICsgMHgyQykK I2RlZmluZSBEX1BFRFNURF9QRUFLVEhSU0ggICAgICg3NjggKyAweDk4KQojZGVmaW5lIERfUEVE U1REX1RJTUwgICAgICAgICAgKDc2OCArIDB4MkEpCiNkZWZpbmUgRF9QRURTVERfVElNSCAgICAg ICAgICAoNzY4ICsgMHgyRSkKI2RlZmluZSBEX1BFRFNURF9QRUFLICAgICAgICAgICg3NjggKyAw WDk0KQojZGVmaW5lIERfUEVEU1REX1NURVBDVFIgICAgICAgKDc2OCArIDB4NjApCiNkZWZpbmUg RF9QRURTVERfVElNRUNUUiAgICAgICAoNzY4ICsgMHgyMikKI2RlZmluZSBEX1BFRFNURF9ERUNJ ICAgICAgICAgICg3NjggKyAweEEwKQoKc3RhdGljIGNvbnN0IHN0cnVjdCB0S2V5TGFiZWwgZG1w VENvbmZpZ1tdID0gewoJe0tFWV9DRkdfMjcsICAgICAgICAgICAgQ0ZHXzI3fSwKCXtLRVlfQ0ZH XzIxLCAgICAgICAgICAgIENGR18yMX0sCgl7S0VZX0NGR18yMCwgICAgICAgICAgICBDRkdfMjB9 LAoJe0tFWV9DRkdfMjMsICAgICAgICAgICAgQ0ZHXzIzfSwKCXtLRVlfQ0ZHX1RBUDQsICAgICAg ICAgIENGR19UQVA0fSwKCXtLRVlfQ0ZHX1RBUDUsICAgICAgICAgIENGR19UQVA1fSwKCXtLRVlf Q0ZHX1RBUDYsICAgICAgICAgIENGR19UQVA2fSwKCXtLRVlfQ0ZHX0dZUk9fU09VUkNFLCAgIENG R19HWVJPX1NPVVJDRX0sCgl7S0VZX0NGR19UQVAwLCAgICAgICAgICBDRkdfVEFQMH0sCgl7S0VZ X0NGR19UQVAxLCAgICAgICAgICBDRkdfVEFQMX0sCgl7S0VZX0NGR19UQVAyLCAgICAgICAgICBD RkdfVEFQMn0sCgl7S0VZX1RFTVBMQUJFTCwgICAgICAgICBURU1QTEFCRUx9LAoJe0tFWV9DRkdf T1JJRU5UX0lSUV8xLCAgQ0ZHX09SSUVOVF9JUlFfMX0sCgl7S0VZX0NGR19EUl9JTlQsICAgICAg ICBDRkdfRFJfSU5UfSwKCXtLRVlfRkNGR18zLCAgICAgICAgICAgIEZDRkdfM30sCgl7S0VZX0NH Tk9USUNFX0lOVFIsICAgICBDR05PVElDRV9JTlRSfSwKCXtLRVlfQ0ZHX0FDQ0VMX0ZJTFRFUiwg IENGR19BQ0NFTF9GSUxURVJ9LAoJe0tFWV9GQ0ZHXzIsICAgICAgICAgICAgRkNGR18yfSwKCXtL RVlfRkNGR18xLCAgICAgICAgICAgIEZDRkdfMX0sCgl7S0VZX0ZDRkdfNywgICAgICAgICAgICBG Q0ZHXzd9LAoJe0tFWV9DRkdfMTIsICAgICAgICAgICAgQ0ZHXzEyfSwKCXtLRVlfQ0ZHX1RBUDcs ICAgICAgICAgIENGR19UQVA3fSwKCXtLRVlfQ0ZHXzE0LCAgICAgICAgICAgIENGR18xNH0sCgl7 S0VZX0NGR18xNSwgICAgICAgICAgICBDRkdfMTV9LAoJe0tFWV9DRkdfMTYsICAgICAgICAgICAg Q0ZHXzE2fSwKCXtLRVlfQ0ZHXzYsICAgICAgICAgICAgIENGR182fSwKCXtLRVlfQ0ZHXzEsICAg ICAgICAgICAgIENGR18xfSwKCXtLRVlfQ0ZHX1RBUDMsICAgICAgICAgIENGR19UQVAzfSwKCXtL RVlfQ0ZHX0VYVEVSTkFMLCAgICAgIENGR19FWFRFUk5BTH0sCgl7S0VZX0NGR184LCAgICAgICAg ICAgICBDRkdfOH0sCgl7S0VZX0NGR185LCAgICAgICAgICAgICBDRkdfOX0sCgl7S0VZX0NGR19G TElDS19JTiwgICAgICBDRkdfRkxJQ0tfSU59LAoJe0tFWV9DRkdfRklGT19PTl9FVkVOVCwgICAg ICAgQ0ZHX0ZJRk9fT05fRVZFTlR9LAoJe0tFWV9URU1QTEFCRUwsICAgICAgICAgICAgIFRFTVBM QUJFTH0sCgl7S0VZX0NGR18yMCwgQ0ZHXzIwfSwKCXtLRVlfQ0ZHX0FVVEgsICAgICAgICAgIENG R19BVVRIfSwKCXtLRVlfRF8wXzIyLCAgICAgICAgICAgICAgICBEXzBfMjJ9LAoJe0tFWV9EXzBf OTYsICAgICAgICAgICAgICAgIERfMF85Nn0sCgl7S0VZX0RfMF8xMDQsICAgICAgICAgICAgICAg RF8wXzEwNH0sCgl7S0VZX0RfMF8xMDgsICAgICAgICAgICAgICAgRF8wXzEwOH0sCgl7S0VZX0Rf MV8zNiwgICAgICAgICAgICAgICBEXzFfMzZ9LAoJe0tFWV9EXzFfNDAsICAgICAgICAgICAgICAg RF8xXzQwfSwKCXtLRVlfRF8xXzQ0LCAgICAgICAgICAgICAgIERfMV80NH0sCgl7S0VZX0RfMV83 MiwgICAgICAgICAgICAgICBEXzFfNzJ9LAoJe0tFWV9EXzFfNzQsICAgICAgICAgICAgICAgRF8x Xzc0fSwKCXtLRVlfRF8xXzc5LCAgICAgICAgICAgICAgIERfMV83OX0sCgl7S0VZX0RfMV84OCwg ICAgICAgICAgICAgICBEXzFfODh9LAoJe0tFWV9EXzFfOTAsICAgICAgICAgICAgICAgRF8xXzkw fSwKCXtLRVlfRF8xXzkyLCAgICAgICAgICAgICAgIERfMV85Mn0sCgl7S0VZX0RfMV8xNjAsICAg ICAgICAgICAgICAgRF8xXzE2MH0sCgl7S0VZX0RfMV8xNzYsICAgICAgICAgICAgICAgRF8xXzE3 Nn0sCgl7S0VZX0RfMV8yMTgsICAgICAgICAgICAgICAgRF8xXzIxOH0sCgl7S0VZX0RfMV8yMzIs ICAgICAgICAgICAgICAgRF8xXzIzMn0sCgl7S0VZX0RfMV8yNTAsICAgICAgICAgICAgICAgRF8x XzI1MH0sCgl7S0VZX0RNUF9UQVBXX01JTiwgICAgICAgICAgRE1QX1RBUFdfTUlOfSwKCXtLRVlf RE1QX1RBUF9USFJfWCwgICAgICAgICBETVBfVEFQX1RIWH0sCgl7S0VZX0RNUF9UQVBfVEhSX1ks ICAgICAgICAgRE1QX1RBUF9USFl9LAoJe0tFWV9ETVBfVEFQX1RIUl9aLCAgICAgICAgIERNUF9U QVBfVEhafSwKCXtLRVlfRE1QX1NIX1RIX1ksICAgICAgICAgICBETVBfU0hfVEhfWX0sCgl7S0VZ X0RNUF9TSF9USF9YLCAgICAgICAgICAgRE1QX1NIX1RIX1h9LAoJe0tFWV9ETVBfU0hfVEhfWiwg ICAgICAgICAgIERNUF9TSF9USF9afSwKCXtLRVlfRE1QX09SSUVOVCwgICAgICAgICAgICBETVBf T1JJRU5UfSwKCXtLRVlfRF9BVVRIX09VVCwgICAgICAgICAgICBEX0FVVEhfT1VUfSwKCXtLRVlf RF9BVVRIX0lOLCAgICAgICAgICAgICBEX0FVVEhfSU59LAoJe0tFWV9EX0FVVEhfQSwgICAgICAg ICAgICAgIERfQVVUSF9BfSwKCXtLRVlfRF9BVVRIX0IsICAgICAgICAgICAgICBEX0FVVEhfQn0s Cgl7S0VZX0NQQVNTX0JJQVNfWCwgICAgICAgICAgQ1BBU1NfQklBU19YfSwKCXtLRVlfQ1BBU1Nf QklBU19ZLCAgICAgICAgICBDUEFTU19CSUFTX1l9LAoJe0tFWV9DUEFTU19CSUFTX1osICAgICAg ICAgIENQQVNTX0JJQVNfWn0sCgl7S0VZX0NQQVNTX01UWF8wMCwgICAgICAgICAgQ1BBU1NfTVRY XzAwfSwKCXtLRVlfQ1BBU1NfTVRYXzAxLCAgICAgICAgICBDUEFTU19NVFhfMDF9LAoJe0tFWV9D UEFTU19NVFhfMDIsICAgICAgICAgIENQQVNTX01UWF8wMn0sCgl7S0VZX0NQQVNTX01UWF8xMCwg ICAgICAgICAgQ1BBU1NfTVRYXzEwfSwKCXtLRVlfQ1BBU1NfTVRYXzExLCAgICAgICAgICBDUEFT U19NVFhfMTF9LAoJe0tFWV9DUEFTU19NVFhfMTIsICAgICAgICAgIENQQVNTX01UWF8xMn0sCgl7 S0VZX0NQQVNTX01UWF8yMCwgICAgICAgICAgQ1BBU1NfTVRYXzIwfSwKCXtLRVlfQ1BBU1NfTVRY XzIxLCAgICAgICAgICBDUEFTU19NVFhfMjF9LAoJe0tFWV9DUEFTU19NVFhfMjIsICAgICAgICAg IENQQVNTX01UWF8yMn0sCgl7S0VZX0RfQUNUMCwgICAgICAgICAgICAgICAgRF9BQ1QwfSwKCXtL RVlfRF9BQ1NYLCAgICAgICAgICAgICAgICBEX0FDU1h9LAoJe0tFWV9EX0FDU1ksICAgICAgICAg ICAgICAgIERfQUNTWX0sCgl7S0VZX0RfQUNTWiwgICAgICAgICAgICAgICAgRF9BQ1NafSwKCXtL RVlfRkxJQ0tfTVNHLCAgICAgICAgICAgICBGTElDS19NU0d9LAoJe0tFWV9GTElDS19DT1VOVEVS LCAgICAgICAgIEZMSUNLX0NPVU5URVJ9LAoJe0tFWV9GTElDS19MT1dFUiwgICAgICAgICAgIEZM SUNLX0xPV0VSfSwKCXtLRVlfRkxJQ0tfVVBQRVIsICAgICAgICAgICBGTElDS19VUFBFUn0sCgl7 S0VZX0RfUEVEU1REX0JQX0IsIERfUEVEU1REX0JQX0J9LAoJe0tFWV9EX1BFRFNURF9IUF9BLCBE X1BFRFNURF9IUF9BfSwKCXtLRVlfRF9QRURTVERfSFBfQiwgRF9QRURTVERfSFBfQn0sCgl7S0VZ X0RfUEVEU1REX0JQX0E0LCBEX1BFRFNURF9CUF9BNH0sCgl7S0VZX0RfUEVEU1REX0JQX0EzLCBE X1BFRFNURF9CUF9BM30sCgl7S0VZX0RfUEVEU1REX0JQX0EyLCBEX1BFRFNURF9CUF9BMn0sCgl7 S0VZX0RfUEVEU1REX0JQX0ExLCBEX1BFRFNURF9CUF9BMX0sCgl7S0VZX0RfUEVEU1REX0lOVF9U SFJTSCwgRF9QRURTVERfSU5UX1RIUlNIfSwKCXtLRVlfRF9QRURTVERfQ0xJUCwgRF9QRURTVERf Q0xJUH0sCgl7S0VZX0RfUEVEU1REX1NCLCBEX1BFRFNURF9TQn0sCgl7S0VZX0RfUEVEU1REX1NC X1RJTUUsIERfUEVEU1REX1NCX1RJTUV9LAoJe0tFWV9EX1BFRFNURF9QRUFLVEhSU0gsIERfUEVE U1REX1BFQUtUSFJTSH0sCgl7S0VZX0RfUEVEU1REX1RJTUwsICAgICAgRF9QRURTVERfVElNTH0s Cgl7S0VZX0RfUEVEU1REX1RJTUgsICAgICAgRF9QRURTVERfVElNSH0sCgl7S0VZX0RfUEVEU1RE X1BFQUssICAgICAgRF9QRURTVERfUEVBS30sCgl7S0VZX0RfUEVEU1REX1NURVBDVFIsICAgRF9Q RURTVERfU1RFUENUUn0sCgl7S0VZX0RfUEVEU1REX1RJTUVDVFIsICBEX1BFRFNURF9USU1FQ1RS fSwKCXtLRVlfRF9QRURTVERfREVDSSwgIERfUEVEU1REX0RFQ0l9Cgp9OwoKI2RlZmluZSBOVU1f TE9DQUxfS0VZUyAoc2l6ZW9mKGRtcFRDb25maWcpL3NpemVvZihkbXBUQ29uZmlnWzBdKSkKCnN0 YXRpYyBzdHJ1Y3QgdEtleUxhYmVsIGtleXNbTlVNX0tFWVNdOwoKdW5zaWduZWQgc2hvcnQgaW52 X2RtcF9nZXRfYWRkcmVzcyh1bnNpZ25lZCBzaG9ydCBrZXkpCnsKCXN0YXRpYyBpbnQgaXNTb3J0 ZWQ7CglpZiAoIWlzU29ydGVkKSB7CgkJaW50IGtrOwoJCWZvciAoa2sgPSAwOyBrayA8IE5VTV9L RVlTOyArK2trKSB7CgkJCWtleXNba2tdLmFkZHIgPSAweGZmZmY7CgkJCWtleXNba2tdLmtleSA9 IGtrOwoJCX0KCQlmb3IgKGtrID0gMDsga2sgPCBOVU1fTE9DQUxfS0VZUzsgKytraykKCQkJa2V5 c1tkbXBUQ29uZmlnW2trXS5rZXldLmFkZHIgPSBkbXBUQ29uZmlnW2trXS5hZGRyOwoKCQlpc1Nv cnRlZCA9IDE7Cgl9CglpZiAoa2V5ID49IE5VTV9LRVlTKQoJCXJldHVybiAweGZmZmY7CglyZXR1 cm4ga2V5c1trZXldLmFkZHI7Cn0KCi8qKgogKiAgQH0KICovCgAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkbXBLZXkuaAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwNDExMDQA MTE3NTI1NDY3NjAAMDExMTExACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAHVzdGFyICAAZ2dhbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnZ2FvAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qCiogQ29weXJpZ2h0IChDKSAyMDEy IEludmVuc2Vuc2UsIEluYy4KKgoqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAoqIG1heSBiZSBj b3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCioKKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgoqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgoqCiovCgovKioKICogIEBhZGR0b2dyb3VwICBEUklWRVJTCiAqICBAYnJpZWYg ICAgICAgSGFyZHdhcmUgZHJpdmVycy4KICoKICogIEB7CiAqICAgICAgQGZpbGUgICAgZG1wS2V5 LmgKICogICAgICBAYnJpZWYgICBkbXAga2V5IGZpbGUuCiAqICAgICAgQGRldGFpbHMgVGhpcyBm aWxlIGlzIHBhcnQgb2YgaW52X2d5cm8gZHJpdmVyIGNvZGUKICovI2lmbmRlZiBETVBLRVlfSF9f CiNkZWZpbmUgRE1QS0VZX0hfXwoKI2RlZmluZSBLRVlfQ0ZHXzI1ICAgICAgICAgICAgICAgICAg KDApCiNkZWZpbmUgS0VZX0NGR18yNCAgICAgICAgICAgICAgICAgIChLRVlfQ0ZHXzI1ICsgMSkK I2RlZmluZSBLRVlfQ0ZHXzI2ICAgICAgICAgICAgICAgICAgKEtFWV9DRkdfMjQgKyAxKQojZGVm aW5lIEtFWV9DRkdfMjcgICAgICAgICAgICAgICAgICAoS0VZX0NGR18yNiArIDEpCiNkZWZpbmUg S0VZX0NGR18yMSAgICAgICAgICAgICAgICAgIChLRVlfQ0ZHXzI3ICsgMSkKI2RlZmluZSBLRVlf Q0ZHXzIwICAgICAgICAgICAgICAgICAgKEtFWV9DRkdfMjEgKyAxKQojZGVmaW5lIEtFWV9DRkdf VEFQNCAgICAgICAgICAgICAgICAoS0VZX0NGR18yMCArIDEpCiNkZWZpbmUgS0VZX0NGR19UQVA1 ICAgICAgICAgICAgICAgIChLRVlfQ0ZHX1RBUDQgKyAxKQojZGVmaW5lIEtFWV9DRkdfVEFQNiAg ICAgICAgICAgICAgICAoS0VZX0NGR19UQVA1ICsgMSkKI2RlZmluZSBLRVlfQ0ZHX1RBUDcgICAg ICAgICAgICAgICAgKEtFWV9DRkdfVEFQNiArIDEpCiNkZWZpbmUgS0VZX0NGR19UQVAwICAgICAg ICAgICAgICAgIChLRVlfQ0ZHX1RBUDcgKyAxKQojZGVmaW5lIEtFWV9DRkdfVEFQMSAgICAgICAg ICAgICAgICAoS0VZX0NGR19UQVAwICsgMSkKI2RlZmluZSBLRVlfQ0ZHX1RBUDIgICAgICAgICAg ICAgICAgKEtFWV9DRkdfVEFQMSArIDEpCiNkZWZpbmUgS0VZX0NGR19UQVAzICAgICAgICAgICAg ICAgIChLRVlfQ0ZHX1RBUDIgKyAxKQojZGVmaW5lIEtFWV9DRkdfVEFQX1FVQU5USVpFICAgICAg ICAoS0VZX0NGR19UQVAzICsgMSkKI2RlZmluZSBLRVlfQ0ZHX1RBUF9KRVJLICAgICAgICAgICAg KEtFWV9DRkdfVEFQX1FVQU5USVpFICsgMSkKI2RlZmluZSBLRVlfQ0ZHX0RSX0lOVCAgICAgICAg ICAgICAgKEtFWV9DRkdfVEFQX0pFUksgKyAxKQojZGVmaW5lIEtFWV9DRkdfQVVUSCAgICAgICAg ICAgICAgICAoS0VZX0NGR19EUl9JTlQgKyAxKQojZGVmaW5lIEtFWV9DRkdfVEFQX1NBVkVfQUND QiAgICAgICAoS0VZX0NGR19BVVRIICsgMSkKI2RlZmluZSBLRVlfQ0ZHX1RBUF9DTEVBUl9TVElD S1kgICAgKEtFWV9DRkdfVEFQX1NBVkVfQUNDQiArIDEpCiNkZWZpbmUgS0VZX0NGR19GSUZPX09O X0VWRU5UICAgICAgIChLRVlfQ0ZHX1RBUF9DTEVBUl9TVElDS1kgKyAxKQojZGVmaW5lIEtFWV9G Q0ZHX0FDQ0VMX0lOUFVUICAgICAgICAoS0VZX0NGR19GSUZPX09OX0VWRU5UICsgMSkKI2RlZmlu ZSBLRVlfRkNGR19BQ0NFTF9JTklUICAgICAgICAgKEtFWV9GQ0ZHX0FDQ0VMX0lOUFVUICsgMSkK I2RlZmluZSBLRVlfQ0ZHXzIzICAgICAgICAgICAgICAgICAgKEtFWV9GQ0ZHX0FDQ0VMX0lOSVQg KyAxKQojZGVmaW5lIEtFWV9GQ0ZHXzEgICAgICAgICAgICAgICAgICAoS0VZX0NGR18yMyArIDEp CiNkZWZpbmUgS0VZX0ZDRkdfMyAgICAgICAgICAgICAgICAgIChLRVlfRkNGR18xICsgMSkKI2Rl ZmluZSBLRVlfRkNGR18yICAgICAgICAgICAgICAgICAgKEtFWV9GQ0ZHXzMgKyAxKQojZGVmaW5l IEtFWV9DRkdfM0QgICAgICAgICAgICAgICAgICAoS0VZX0ZDRkdfMiArIDEpCiNkZWZpbmUgS0VZ X0NGR18zQiAgICAgICAgICAgICAgICAgIChLRVlfQ0ZHXzNEICsgMSkKI2RlZmluZSBLRVlfQ0ZH XzNDICAgICAgICAgICAgICAgICAgKEtFWV9DRkdfM0IgKyAxKQojZGVmaW5lIEtFWV9GQ0ZHXzUg ICAgICAgICAgICAgICAgICAoS0VZX0NGR18zQyArIDEpCiNkZWZpbmUgS0VZX0ZDRkdfNCAgICAg ICAgICAgICAgICAgIChLRVlfRkNGR181ICsgMSkKI2RlZmluZSBLRVlfRkNGR183ICAgICAgICAg ICAgICAgICAgKEtFWV9GQ0ZHXzQgKyAxKQojZGVmaW5lIEtFWV9GQ0ZHX0ZTQ0FMRSAgICAgICAg ICAgICAoS0VZX0ZDRkdfNyArIDEpCiNkZWZpbmUgS0VZX0ZDRkdfQVogICAgICAgICAgICAgICAg IChLRVlfRkNGR19GU0NBTEUgKyAxKQojZGVmaW5lIEtFWV9GQ0ZHXzYgICAgICAgICAgICAgICAg ICAoS0VZX0ZDRkdfQVogKyAxKQojZGVmaW5lIEtFWV9GQ0ZHX0xTQjQgICAgICAgICAgICAgICAo S0VZX0ZDRkdfNiArIDEpCiNkZWZpbmUgS0VZX0NGR18xMiAgICAgICAgICAgICAgICAgIChLRVlf RkNGR19MU0I0ICsgMSkKI2RlZmluZSBLRVlfQ0ZHXzE0ICAgICAgICAgICAgICAgICAgKEtFWV9D RkdfMTIgKyAxKQojZGVmaW5lIEtFWV9DRkdfMTUgICAgICAgICAgICAgICAgICAoS0VZX0NGR18x NCArIDEpCiNkZWZpbmUgS0VZX0NGR18xNiAgICAgICAgICAgICAgICAgIChLRVlfQ0ZHXzE1ICsg MSkKI2RlZmluZSBLRVlfQ0ZHXzE4ICAgICAgICAgICAgICAgICAgKEtFWV9DRkdfMTYgKyAxKQoj ZGVmaW5lIEtFWV9DRkdfNiAgICAgICAgICAgICAgICAgICAoS0VZX0NGR18xOCArIDEpCiNkZWZp bmUgS0VZX0NGR183ICAgICAgICAgICAgICAgICAgIChLRVlfQ0ZHXzYgKyAxKQojZGVmaW5lIEtF WV9DRkdfNCAgICAgICAgICAgICAgICAgICAoS0VZX0NGR183ICsgMSkKI2RlZmluZSBLRVlfQ0ZH XzUgICAgICAgICAgICAgICAgICAgKEtFWV9DRkdfNCArIDEpCiNkZWZpbmUgS0VZX0NGR18yICAg ICAgICAgICAgICAgICAgIChLRVlfQ0ZHXzUgKyAxKQojZGVmaW5lIEtFWV9DRkdfMyAgICAgICAg ICAgICAgICAgICAoS0VZX0NGR18yICsgMSkKI2RlZmluZSBLRVlfQ0ZHXzEgICAgICAgICAgICAg ICAgICAgKEtFWV9DRkdfMyArIDEpCiNkZWZpbmUgS0VZX0NGR19FWFRFUk5BTCAgICAgICAgICAg IChLRVlfQ0ZHXzEgKyAxKQojZGVmaW5lIEtFWV9DRkdfOCAgICAgICAgICAgICAgICAgICAoS0VZ X0NGR19FWFRFUk5BTCArIDEpCiNkZWZpbmUgS0VZX0NGR185ICAgICAgICAgICAgICAgICAgIChL RVlfQ0ZHXzggKyAxKQojZGVmaW5lIEtFWV9DRkdfT1JJRU5UXzMgICAgICAgICAgICAoS0VZX0NG R185ICsgMSkKI2RlZmluZSBLRVlfQ0ZHX09SSUVOVF8yICAgICAgICAgICAgKEtFWV9DRkdfT1JJ RU5UXzMgKyAxKQojZGVmaW5lIEtFWV9DRkdfT1JJRU5UXzEgICAgICAgICAgICAoS0VZX0NGR19P UklFTlRfMiArIDEpCiNkZWZpbmUgS0VZX0NGR19HWVJPX1NPVVJDRSAgICAgICAgIChLRVlfQ0ZH X09SSUVOVF8xICsgMSkKI2RlZmluZSBLRVlfQ0ZHX09SSUVOVF9JUlFfMSAgICAgICAgKEtFWV9D RkdfR1lST19TT1VSQ0UgKyAxKQojZGVmaW5lIEtFWV9DRkdfT1JJRU5UX0lSUV8yICAgICAgICAo S0VZX0NGR19PUklFTlRfSVJRXzEgKyAxKQojZGVmaW5lIEtFWV9DRkdfT1JJRU5UX0lSUV8zICAg ICAgICAoS0VZX0NGR19PUklFTlRfSVJRXzIgKyAxKQojZGVmaW5lIEtFWV9GQ0ZHX01BR19WQUwg ICAgICAgICAgICAoS0VZX0NGR19PUklFTlRfSVJRXzMgKyAxKQojZGVmaW5lIEtFWV9GQ0ZHX01B R19NT1YgICAgICAgICAgICAoS0VZX0ZDRkdfTUFHX1ZBTCArIDEpCgovKiBNUFU2MDUwIGtleXMg Ki8KI2RlZmluZSBLRVlfQ0ZHX0FDQ0VMX0ZJTFRFUiAgICAgICAgKEtFWV9GQ0ZHX01BR19NT1Yg KyAxKQojZGVmaW5lIEtFWV9DRkdfTU9USU9OX0JJQVMgICAgICAgICAoS0VZX0NGR19BQ0NFTF9G SUxURVIgKyAxKQojZGVmaW5lIEtFWV9URU1QTEFCRUwgICAgICAgICAgICAgICAoS0VZX0NGR19N T1RJT05fQklBUyArIDEpCgojZGVmaW5lIEtFWV9EXzBfMjIgICAgICAgICAgICAgICAgICAoS0VZ X1RFTVBMQUJFTCArIDEpCiNkZWZpbmUgS0VZX0RfMF8yNCAgICAgICAgICAgICAgICAgIChLRVlf RF8wXzIyICsgMSkKI2RlZmluZSBLRVlfRF8wXzM2ICAgICAgICAgICAgICAgICAgKEtFWV9EXzBf MjQgKyAxKQojZGVmaW5lIEtFWV9EXzBfNTIgICAgICAgICAgICAgICAgICAoS0VZX0RfMF8zNiAr IDEpCiNkZWZpbmUgS0VZX0RfMF85NiAgICAgICAgICAgICAgICAgIChLRVlfRF8wXzUyICsgMSkK I2RlZmluZSBLRVlfRF8wXzEwNCAgICAgICAgICAgICAgICAgKEtFWV9EXzBfOTYgKyAxKQojZGVm aW5lIEtFWV9EXzBfMTA4ICAgICAgICAgICAgICAgICAoS0VZX0RfMF8xMDQgKyAxKQojZGVmaW5l IEtFWV9EXzBfMTYzICAgICAgICAgICAgICAgICAoS0VZX0RfMF8xMDggKyAxKQojZGVmaW5lIEtF WV9EXzBfMTg4ICAgICAgICAgICAgICAgICAoS0VZX0RfMF8xNjMgKyAxKQojZGVmaW5lIEtFWV9E XzBfMTkyICAgICAgICAgICAgICAgICAoS0VZX0RfMF8xODggKyAxKQojZGVmaW5lIEtFWV9EXzBf MjI0ICAgICAgICAgICAgICAgICAoS0VZX0RfMF8xOTIgKyAxKQojZGVmaW5lIEtFWV9EXzBfMjI4 ICAgICAgICAgICAgICAgICAoS0VZX0RfMF8yMjQgKyAxKQojZGVmaW5lIEtFWV9EXzBfMjMyICAg ICAgICAgICAgICAgICAoS0VZX0RfMF8yMjggKyAxKQojZGVmaW5lIEtFWV9EXzBfMjM2ICAgICAg ICAgICAgICAgICAoS0VZX0RfMF8yMzIgKyAxKQoKI2RlZmluZSBLRVlfRE1QX1BSRVZQVEFUICAg ICAgICAgICAgKEtFWV9EXzBfMjM2ICsgMSkKI2RlZmluZSBLRVlfRF8xXzIgICAgICAgICAgICAg ICAgICAgKEtFWV9ETVBfUFJFVlBUQVQgKyAxKQojZGVmaW5lIEtFWV9EXzFfNCAgICAgICAgICAg ICAgICAgICAoS0VZX0RfMV8yICsgMSkKI2RlZmluZSBLRVlfRF8xXzggICAgICAgICAgICAgICAg ICAgKEtFWV9EXzFfNCArIDEpCiNkZWZpbmUgS0VZX0RfMV8xMCAgICAgICAgICAgICAgICAgIChL RVlfRF8xXzggKyAxKQojZGVmaW5lIEtFWV9EXzFfMjQgICAgICAgICAgICAgICAgICAoS0VZX0Rf MV8xMCArIDEpCiNkZWZpbmUgS0VZX0RfMV8yOCAgICAgICAgICAgICAgICAgIChLRVlfRF8xXzI0 ICsgMSkKI2RlZmluZSBLRVlfRF8xXzM2ICAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMjggKyAx KQojZGVmaW5lIEtFWV9EXzFfNDAgICAgICAgICAgICAgICAgICAoS0VZX0RfMV8zNiArIDEpCiNk ZWZpbmUgS0VZX0RfMV80NCAgICAgICAgICAgICAgICAgIChLRVlfRF8xXzQwICsgMSkKI2RlZmlu ZSBLRVlfRF8xXzcyICAgICAgICAgICAgICAgICAgKEtFWV9EXzFfNDQgKyAxKQojZGVmaW5lIEtF WV9EXzFfNzQgICAgICAgICAgICAgICAgICAoS0VZX0RfMV83MiArIDEpCiNkZWZpbmUgS0VZX0Rf MV83OSAgICAgICAgICAgICAgICAgIChLRVlfRF8xXzc0ICsgMSkKI2RlZmluZSBLRVlfRF8xXzg4 ICAgICAgICAgICAgICAgICAgKEtFWV9EXzFfNzkgKyAxKQojZGVmaW5lIEtFWV9EXzFfOTAgICAg ICAgICAgICAgICAgICAoS0VZX0RfMV84OCArIDEpCiNkZWZpbmUgS0VZX0RfMV85MiAgICAgICAg ICAgICAgICAgIChLRVlfRF8xXzkwICsgMSkKI2RlZmluZSBLRVlfRF8xXzk2ICAgICAgICAgICAg ICAgICAgKEtFWV9EXzFfOTIgKyAxKQojZGVmaW5lIEtFWV9EXzFfOTggICAgICAgICAgICAgICAg ICAoS0VZX0RfMV85NiArIDEpCiNkZWZpbmUgS0VZX0RfMV8xMDAgICAgICAgICAgICAgICAgIChL RVlfRF8xXzk4ICsgMSkKI2RlZmluZSBLRVlfRF8xXzEwNiAgICAgICAgICAgICAgICAgKEtFWV9E XzFfMTAwICsgMSkKI2RlZmluZSBLRVlfRF8xXzEwOCAgICAgICAgICAgICAgICAgKEtFWV9EXzFf MTA2ICsgMSkKI2RlZmluZSBLRVlfRF8xXzExMiAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMTA4 ICsgMSkKI2RlZmluZSBLRVlfRF8xXzEyOCAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMTEyICsg MSkKI2RlZmluZSBLRVlfRF8xXzE1MiAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMTI4ICsgMSkK I2RlZmluZSBLRVlfRF8xXzE2MCAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMTUyICsgMSkKI2Rl ZmluZSBLRVlfRF8xXzE2OCAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMTYwICsgMSkKI2RlZmlu ZSBLRVlfRF8xXzE3NSAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMTY4ICsgMSkKI2RlZmluZSBL RVlfRF8xXzE3NiAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMTc1ICsgMSkKI2RlZmluZSBLRVlf RF8xXzE3OCAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMTc2ICsgMSkKI2RlZmluZSBLRVlfRF8x XzE3OSAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMTc4ICsgMSkKI2RlZmluZSBLRVlfRF8xXzIx OCAgICAgICAgICAgICAgICAgKEtFWV9EXzFfMTc5ICsgMSkKI2RlZmluZSBLRVlfRF8xXzIzMiAg ICAgICAgICAgICAgICAgKEtFWV9EXzFfMjE4ICsgMSkKI2RlZmluZSBLRVlfRF8xXzIzNiAgICAg ICAgICAgICAgICAgKEtFWV9EXzFfMjMyICsgMSkKI2RlZmluZSBLRVlfRF8xXzI0MCAgICAgICAg ICAgICAgICAgKEtFWV9EXzFfMjM2ICsgMSkKI2RlZmluZSBLRVlfRF8xXzI0NCAgICAgICAgICAg ICAgICAgKEtFWV9EXzFfMjQwICsgMSkKI2RlZmluZSBLRVlfRF8xXzI1MCAgICAgICAgICAgICAg ICAgKEtFWV9EXzFfMjQ0ICsgMSkKI2RlZmluZSBLRVlfRF8xXzI1MiAgICAgICAgICAgICAgICAg KEtFWV9EXzFfMjUwICsgMSkKI2RlZmluZSBLRVlfRF8yXzEyICAgICAgICAgICAgICAgICAgKEtF WV9EXzFfMjUyICsgMSkKI2RlZmluZSBLRVlfRF8yXzk2ICAgICAgICAgICAgICAgICAgKEtFWV9E XzJfMTIgKyAxKQojZGVmaW5lIEtFWV9EXzJfMTA4ICAgICAgICAgICAgICAgICAoS0VZX0RfMl85 NiArIDEpCiNkZWZpbmUgS0VZX0RfMl8yMDggICAgICAgICAgICAgICAgIChLRVlfRF8yXzEwOCAr IDEpCiNkZWZpbmUgS0VZX0ZMSUNLX01TRyAgICAgICAgICAgICAgIChLRVlfRF8yXzIwOCArIDEp CiNkZWZpbmUgS0VZX0ZMSUNLX0NPVU5URVIgICAgICAgICAgIChLRVlfRkxJQ0tfTVNHICsgMSkK I2RlZmluZSBLRVlfRkxJQ0tfTE9XRVIgICAgICAgICAgICAgKEtFWV9GTElDS19DT1VOVEVSICsg MSkKI2RlZmluZSBLRVlfQ0ZHX0ZMSUNLX0lOICAgICAgICAgICAgKEtFWV9GTElDS19MT1dFUiAr IDEpCiNkZWZpbmUgS0VZX0ZMSUNLX1VQUEVSICAgICAgICAgICAgIChLRVlfQ0ZHX0ZMSUNLX0lO ICsgMSkKI2RlZmluZSBLRVlfQ0dOT1RJQ0VfSU5UUiAgICAgICAgICAgKEtFWV9GTElDS19VUFBF UiArIDEpCiNkZWZpbmUgS0VZX0RfMl8yMjQgICAgICAgICAgICAgICAgIChLRVlfQ0dOT1RJQ0Vf SU5UUiArIDEpCiNkZWZpbmUgS0VZX0RfMl8yNDQgICAgICAgICAgICAgICAgIChLRVlfRF8yXzIy NCArIDEpCiNkZWZpbmUgS0VZX0RfMl8yNDggICAgICAgICAgICAgICAgIChLRVlfRF8yXzI0NCAr IDEpCiNkZWZpbmUgS0VZX0RfMl8yNTIgICAgICAgICAgICAgICAgIChLRVlfRF8yXzI0OCArIDEp CgovKiBDb21wYXNzIGtleXMgKi8KI2RlZmluZSBLRVlfQ1BBU1NfQklBU19YICAgICAgICAgICAg KEtFWV9EXzJfMjUyICsgMSkKI2RlZmluZSBLRVlfQ1BBU1NfQklBU19ZICAgICAgICAgICAgKEtF WV9DUEFTU19CSUFTX1ggKyAxKQojZGVmaW5lIEtFWV9DUEFTU19CSUFTX1ogICAgICAgICAgICAo S0VZX0NQQVNTX0JJQVNfWSArIDEpCiNkZWZpbmUgS0VZX0NQQVNTX01UWF8wMCAgICAgICAgICAg IChLRVlfQ1BBU1NfQklBU19aICsgMSkKI2RlZmluZSBLRVlfQ1BBU1NfTVRYXzAxICAgICAgICAg ICAgKEtFWV9DUEFTU19NVFhfMDAgKyAxKQojZGVmaW5lIEtFWV9DUEFTU19NVFhfMDIgICAgICAg ICAgICAoS0VZX0NQQVNTX01UWF8wMSArIDEpCiNkZWZpbmUgS0VZX0NQQVNTX01UWF8xMCAgICAg ICAgICAgIChLRVlfQ1BBU1NfTVRYXzAyICsgMSkKI2RlZmluZSBLRVlfQ1BBU1NfTVRYXzExICAg ICAgICAgICAgKEtFWV9DUEFTU19NVFhfMTAgKyAxKQojZGVmaW5lIEtFWV9DUEFTU19NVFhfMTIg ICAgICAgICAgICAoS0VZX0NQQVNTX01UWF8xMSArIDEpCiNkZWZpbmUgS0VZX0NQQVNTX01UWF8y MCAgICAgICAgICAgIChLRVlfQ1BBU1NfTVRYXzEyICsgMSkKI2RlZmluZSBLRVlfQ1BBU1NfTVRY XzIxICAgICAgICAgICAgKEtFWV9DUEFTU19NVFhfMjAgKyAxKQojZGVmaW5lIEtFWV9DUEFTU19N VFhfMjIgICAgICAgICAgICAoS0VZX0NQQVNTX01UWF8yMSArIDEpCgovKiBHZXN0dXJlIEtleXMg Ki8KI2RlZmluZSBLRVlfRE1QX1RBUFdfTUlOICAgICAgICAgICAgKEtFWV9DUEFTU19NVFhfMjIg KyAxKQoKI2RlZmluZSBLRVlfRE1QX1RBUF9USFJfWCAgICAgICAgICAgKEtFWV9ETVBfVEFQV19N SU4gKyAxKQojZGVmaW5lIEtFWV9ETVBfVEFQX1RIUl9ZICAgICAgICAgICAoS0VZX0RNUF9UQVBf VEhSX1ggKyAxKQojZGVmaW5lIEtFWV9ETVBfVEFQX1RIUl9aICAgICAgICAgICAoS0VZX0RNUF9U QVBfVEhSX1kgKyAxKQojZGVmaW5lIEtFWV9ETVBfU0hfVEhfWSAgICAgICAgICAgICAoS0VZX0RN UF9UQVBfVEhSX1ogKyAxKQojZGVmaW5lIEtFWV9ETVBfU0hfVEhfWCAgICAgICAgICAgICAoS0VZ X0RNUF9TSF9USF9ZICsgMSkKI2RlZmluZSBLRVlfRE1QX1NIX1RIX1ogICAgICAgICAgICAgKEtF WV9ETVBfU0hfVEhfWCArIDEpCiNkZWZpbmUgS0VZX0RNUF9PUklFTlQgICAgICAgICAgICAgIChL RVlfRE1QX1NIX1RIX1ogKyAxKQojZGVmaW5lIEtFWV9EX0FDVDAgICAgICAgICAgICAgICAgICAo S0VZX0RNUF9PUklFTlQgKyAxKQojZGVmaW5lIEtFWV9EX0FDU1ggICAgICAgICAgICAgICAgICAo S0VZX0RfQUNUMCArIDEpCiNkZWZpbmUgS0VZX0RfQUNTWSAgICAgICAgICAgICAgICAgIChLRVlf RF9BQ1NYICsgMSkKI2RlZmluZSBLRVlfRF9BQ1NaICAgICAgICAgICAgICAgICAgKEtFWV9EX0FD U1kgKyAxKQoKLyogQXV0aGVudGljYXRlIEtleXMgKi8KI2RlZmluZSBLRVlfRF9BVVRIX09VVCAg ICAgICAgICAgICAgKEtFWV9EX0FDU1ogKyAxKQojZGVmaW5lIEtFWV9EX0FVVEhfSU4gICAgICAg ICAgICAgICAoS0VZX0RfQVVUSF9PVVQgKyAxKQojZGVmaW5lIEtFWV9EX0FVVEhfQSAgICAgICAg ICAgICAgICAoS0VZX0RfQVVUSF9JTiArIDEpCiNkZWZpbmUgS0VZX0RfQVVUSF9CICAgICAgICAg ICAgICAgIChLRVlfRF9BVVRIX0EgKyAxKQoKLyogUGVkb21ldGVyIHN0YW5kYWxvbmUgb25seSBr ZXlzICovCiNkZWZpbmUgS0VZX0RfUEVEU1REX0JQX0IgICAgICAgICAgIChLRVlfRF9BVVRIX0Ig KyAxKQojZGVmaW5lIEtFWV9EX1BFRFNURF9IUF9BICAgICAgICAgICAoS0VZX0RfUEVEU1REX0JQ X0IgKyAxKQojZGVmaW5lIEtFWV9EX1BFRFNURF9IUF9CICAgICAgICAgICAoS0VZX0RfUEVEU1RE X0hQX0EgKyAxKQojZGVmaW5lIEtFWV9EX1BFRFNURF9CUF9BNCAgICAgICAgICAoS0VZX0RfUEVE U1REX0hQX0IgKyAxKQojZGVmaW5lIEtFWV9EX1BFRFNURF9CUF9BMyAgICAgICAgICAoS0VZX0Rf UEVEU1REX0JQX0E0ICsgMSkKI2RlZmluZSBLRVlfRF9QRURTVERfQlBfQTIgICAgICAgICAgKEtF WV9EX1BFRFNURF9CUF9BMyArIDEpCiNkZWZpbmUgS0VZX0RfUEVEU1REX0JQX0ExICAgICAgICAg IChLRVlfRF9QRURTVERfQlBfQTIgKyAxKQojZGVmaW5lIEtFWV9EX1BFRFNURF9JTlRfVEhSU0gg ICAgICAoS0VZX0RfUEVEU1REX0JQX0ExICsgMSkKI2RlZmluZSBLRVlfRF9QRURTVERfQ0xJUCAg ICAgICAgICAgKEtFWV9EX1BFRFNURF9JTlRfVEhSU0ggKyAxKQojZGVmaW5lIEtFWV9EX1BFRFNU RF9TQiAgICAgICAgICAgICAoS0VZX0RfUEVEU1REX0NMSVAgKyAxKQojZGVmaW5lIEtFWV9EX1BF RFNURF9TQl9USU1FICAgICAgICAoS0VZX0RfUEVEU1REX1NCICsgMSkKI2RlZmluZSBLRVlfRF9Q RURTVERfUEVBS1RIUlNIICAgICAgKEtFWV9EX1BFRFNURF9TQl9USU1FICsgMSkKI2RlZmluZSBL RVlfRF9QRURTVERfVElNTCAgICAgICAgICAgKEtFWV9EX1BFRFNURF9QRUFLVEhSU0ggKyAxKQoj ZGVmaW5lIEtFWV9EX1BFRFNURF9USU1IICAgICAgICAgICAoS0VZX0RfUEVEU1REX1RJTUwgKyAx KQojZGVmaW5lIEtFWV9EX1BFRFNURF9QRUFLICAgICAgICAgICAoS0VZX0RfUEVEU1REX1RJTUgg KyAxKQojZGVmaW5lIEtFWV9EX1BFRFNURF9USU1FQ1RSICAgICAgICAoS0VZX0RfUEVEU1REX1BF QUsgKyAxKQojZGVmaW5lIEtFWV9EX1BFRFNURF9TVEVQQ1RSICAgICAgICAoS0VZX0RfUEVEU1RE X1RJTUVDVFIgKyAxKQojZGVmaW5lIEtFWV9EX1BFRFNURF9XQUxLVElNRSAgICAgICAoS0VZX0Rf UEVEU1REX1NURVBDVFIgKyAxKQojZGVmaW5lIEtFWV9EX1BFRFNURF9ERUNJICAgICAgICAgICAo S0VZX0RfUEVEU1REX1dBTEtUSU1FICsgMSkKCi8qIEVJUyBrZXlzICovCiNkZWZpbmUgS0VZX1Bf RUlTX0ZJRk9fRk9PVEVSICAgICAgIChLRVlfRF9QRURTVERfREVDSSArIDEpCiNkZWZpbmUgS0VZ X1BfRUlTX0ZJRk9fWVNISUZUICAgICAgIChLRVlfUF9FSVNfRklGT19GT09URVIgKyAxKQojZGVm aW5lIEtFWV9QX0VJU19EQVRBX1JBVEUgICAgICAgICAoS0VZX1BfRUlTX0ZJRk9fWVNISUZUICsg MSkKI2RlZmluZSBLRVlfUF9FSVNfRklGT19YU0hJRlQgICAgICAgKEtFWV9QX0VJU19EQVRBX1JB VEUgKyAxKQojZGVmaW5lIEtFWV9QX0VJU19GSUZPX1NZTkMgICAgICAgICAoS0VZX1BfRUlTX0ZJ Rk9fWFNISUZUICsgMSkKI2RlZmluZSBLRVlfUF9FSVNfRklGT19aU0hJRlQgICAgICAgKEtFWV9Q X0VJU19GSUZPX1NZTkMgKyAxKQojZGVmaW5lIEtFWV9QX0VJU19GSUZPX1JFQURZICAgICAgICAo S0VZX1BfRUlTX0ZJRk9fWlNISUZUICsgMSkKI2RlZmluZSBLRVlfRE1QX0ZPT1RFUiAgICAgICAg ICAgICAgKEtFWV9QX0VJU19GSUZPX1JFQURZICsgMSkKI2RlZmluZSBLRVlfRE1QX0lOVFhfSEMg ICAgICAgICAgICAgKEtFWV9ETVBfRk9PVEVSICsgMSkKI2RlZmluZSBLRVlfRE1QX0lOVFhfUEgg ICAgICAgICAgICAgKEtFWV9ETVBfSU5UWF9IQyArIDEpCiNkZWZpbmUgS0VZX0RNUF9JTlRYX1NI ICAgICAgICAgICAgIChLRVlfRE1QX0lOVFhfUEggKyAxKQojZGVmaW5lIEtFWV9ETVBfQUlOVl9T SCAgICAgICAgICAgICAoS0VZX0RNUF9JTlRYX1NIICsgMSkKI2RlZmluZSBLRVlfRE1QX0FfSU5W X1hIICAgICAgICAgICAgKEtFWV9ETVBfQUlOVl9TSCArIDEpCiNkZWZpbmUgS0VZX0RNUF9BSU5W X1BIICAgICAgICAgICAgIChLRVlfRE1QX0FfSU5WX1hIICsgMSkKI2RlZmluZSBLRVlfRE1QX0NU SFhfSCAgICAgICAgICAgICAgKEtFWV9ETVBfQUlOVl9QSCArIDEpCiNkZWZpbmUgS0VZX0RNUF9D VEhZX0ggICAgICAgICAgICAgIChLRVlfRE1QX0NUSFhfSCArIDEpCiNkZWZpbmUgS0VZX0RNUF9D VEhaX0ggICAgICAgICAgICAgIChLRVlfRE1QX0NUSFlfSCArIDEpCiNkZWZpbmUgS0VZX0RNUF9O Q1RIWF9IICAgICAgICAgICAgIChLRVlfRE1QX0NUSFpfSCArIDEpCiNkZWZpbmUgS0VZX0RNUF9O Q1RIWV9IICAgICAgICAgICAgIChLRVlfRE1QX05DVEhYX0ggKyAxKQojZGVmaW5lIEtFWV9ETVBf TkNUSFpfSCAgICAgICAgICAgICAoS0VZX0RNUF9OQ1RIWV9IICsgMSkKI2RlZmluZSBLRVlfRE1Q X0NUU1FfWEggICAgICAgICAgICAgKEtFWV9ETVBfTkNUSFpfSCArIDEpCiNkZWZpbmUgS0VZX0RN UF9DVFNRX1lIICAgICAgICAgICAgIChLRVlfRE1QX0NUU1FfWEggKyAxKQojZGVmaW5lIEtFWV9E TVBfQ1RTUV9aSCAgICAgICAgICAgICAoS0VZX0RNUF9DVFNRX1lIICsgMSkKI2RlZmluZSBLRVlf RE1QX0lOVFhfSCAgICAgICAgICAgICAgKEtFWV9ETVBfQ1RTUV9aSCArIDEpCiNkZWZpbmUgS0VZ X0RNUF9JTlRZX0ggICAgICAgICAgICAgIChLRVlfRE1QX0lOVFhfSCArIDEpCiNkZWZpbmUgS0VZ X0RNUF9JTlRaX0ggICAgICAgICAgICAgIChLRVlfRE1QX0lOVFlfSCArIDEpCiNkZWZpbmUgS0VZ X0RNUF9IUFhfSCAgICAgICAgICAgICAgIChLRVlfRE1QX0lOVFpfSCArIDEpCiNkZWZpbmUgS0VZ X0RNUF9IUFlfSCAgICAgICAgICAgICAgIChLRVlfRE1QX0hQWF9IICsgMSkKI2RlZmluZSBLRVlf RE1QX0hQWl9IICAgICAgICAgICAgICAgKEtFWV9ETVBfSFBZX0ggKyAxKQoKLyogU3RyZWFtIGtl eXMgKi8KI2RlZmluZSBLRVlfU1RSRUFNX1BfR1lST19aICAgICAgICAgKEtFWV9ETVBfSFBaX0gg KyAxKQojZGVmaW5lIEtFWV9TVFJFQU1fUF9HWVJPX1kgICAgICAgICAoS0VZX1NUUkVBTV9QX0dZ Uk9fWiArIDEpCiNkZWZpbmUgS0VZX1NUUkVBTV9QX0dZUk9fWCAgICAgICAgIChLRVlfU1RSRUFN X1BfR1lST19ZICsgMSkKI2RlZmluZSBLRVlfU1RSRUFNX1BfVEVNUCAgICAgICAgICAgKEtFWV9T VFJFQU1fUF9HWVJPX1ggKyAxKQojZGVmaW5lIEtFWV9TVFJFQU1fUF9BVVhfWSAgICAgICAgICAo S0VZX1NUUkVBTV9QX1RFTVAgKyAxKQojZGVmaW5lIEtFWV9TVFJFQU1fUF9BVVhfWCAgICAgICAg ICAoS0VZX1NUUkVBTV9QX0FVWF9ZICsgMSkKI2RlZmluZSBLRVlfU1RSRUFNX1BfQVVYX1ogICAg ICAgICAgKEtFWV9TVFJFQU1fUF9BVVhfWCArIDEpCiNkZWZpbmUgS0VZX1NUUkVBTV9QX0FDQ0VM X1kgICAgICAgIChLRVlfU1RSRUFNX1BfQVVYX1ogKyAxKQojZGVmaW5lIEtFWV9TVFJFQU1fUF9B Q0NFTF9YICAgICAgICAoS0VZX1NUUkVBTV9QX0FDQ0VMX1kgKyAxKQojZGVmaW5lIEtFWV9TVFJF QU1fUF9GT09URVIgICAgICAgICAoS0VZX1NUUkVBTV9QX0FDQ0VMX1ggKyAxKQojZGVmaW5lIEtF WV9TVFJFQU1fUF9BQ0NFTF9aICAgICAgICAoS0VZX1NUUkVBTV9QX0ZPT1RFUiArIDEpCgojZGVm aW5lIE5VTV9LRVlTICAgICAgICAgICAgICAgICAgICAoS0VZX1NUUkVBTV9QX0FDQ0VMX1ogKyAx KQoKc3RydWN0IHRLZXlMYWJlbCB7Cgl1bnNpZ25lZCBzaG9ydCBrZXk7Cgl1bnNpZ25lZCBzaG9y dCBhZGRyOwp9OwoKI2RlZmluZSBESU5BMEEgMHgwYQojZGVmaW5lIERJTkEyMiAweDIyCiNkZWZp bmUgRElOQTQyIDB4NDIKI2RlZmluZSBESU5BNUEgMHg1YQoKI2RlZmluZSBESU5BMDYgMHgwNgoj ZGVmaW5lIERJTkEwRSAweDBlCiNkZWZpbmUgRElOQTE2IDB4MTYKI2RlZmluZSBESU5BMUUgMHgx ZQojZGVmaW5lIERJTkEyNiAweDI2CiNkZWZpbmUgRElOQTJFIDB4MmUKI2RlZmluZSBESU5BMzYg MHgzNgojZGVmaW5lIERJTkEzRSAweDNlCiNkZWZpbmUgRElOQTQ2IDB4NDYKI2RlZmluZSBESU5B NEUgMHg0ZQojZGVmaW5lIERJTkE1NiAweDU2CiNkZWZpbmUgRElOQTVFIDB4NWUKI2RlZmluZSBE SU5BNjYgMHg2NgojZGVmaW5lIERJTkE2RSAweDZlCiNkZWZpbmUgRElOQTc2IDB4NzYKI2RlZmlu ZSBESU5BN0UgMHg3ZQoKI2RlZmluZSBESU5BMDAgMHgwMAojZGVmaW5lIERJTkEwOCAweDA4CiNk ZWZpbmUgRElOQTEwIDB4MTAKI2RlZmluZSBESU5BMTggMHgxOAojZGVmaW5lIERJTkEyMCAweDIw CiNkZWZpbmUgRElOQTI4IDB4MjgKI2RlZmluZSBESU5BMzAgMHgzMAojZGVmaW5lIERJTkEzOCAw eDM4CiNkZWZpbmUgRElOQTQwIDB4NDAKI2RlZmluZSBESU5BNDggMHg0OAojZGVmaW5lIERJTkE1 MCAweDUwCiNkZWZpbmUgRElOQTU4IDB4NTgKI2RlZmluZSBESU5BNjAgMHg2MAojZGVmaW5lIERJ TkE2OCAweDY4CiNkZWZpbmUgRElOQTcwIDB4NzAKI2RlZmluZSBESU5BNzggMHg3OAoKI2RlZmlu ZSBESU5BMDQgMHgwNAojZGVmaW5lIERJTkEwQyAweDBjCiNkZWZpbmUgRElOQTE0IDB4MTQKI2Rl ZmluZSBESU5BMUMgMHgxQwojZGVmaW5lIERJTkEyNCAweDI0CiNkZWZpbmUgRElOQTJDIDB4MmMK I2RlZmluZSBESU5BMzQgMHgzNAojZGVmaW5lIERJTkEzQyAweDNjCiNkZWZpbmUgRElOQTQ0IDB4 NDQKI2RlZmluZSBESU5BNEMgMHg0YwojZGVmaW5lIERJTkE1NCAweDU0CiNkZWZpbmUgRElOQTVD IDB4NWMKI2RlZmluZSBESU5BNjQgMHg2NAojZGVmaW5lIERJTkE2QyAweDZjCiNkZWZpbmUgRElO QTc0IDB4NzQKI2RlZmluZSBESU5BN0MgMHg3YwoKI2RlZmluZSBESU5BMDEgMHgwMQojZGVmaW5l IERJTkEwOSAweDA5CiNkZWZpbmUgRElOQTExIDB4MTEKI2RlZmluZSBESU5BMTkgMHgxOQojZGVm aW5lIERJTkEyMSAweDIxCiNkZWZpbmUgRElOQTI5IDB4MjkKI2RlZmluZSBESU5BMzEgMHgzMQoj ZGVmaW5lIERJTkEzOSAweDM5CiNkZWZpbmUgRElOQTQxIDB4NDEKI2RlZmluZSBESU5BNDkgMHg0 OQojZGVmaW5lIERJTkE1MSAweDUxCiNkZWZpbmUgRElOQTU5IDB4NTkKI2RlZmluZSBESU5BNjEg MHg2MQojZGVmaW5lIERJTkE2OSAweDY5CiNkZWZpbmUgRElOQTcxIDB4NzEKI2RlZmluZSBESU5B NzkgMHg3OQoKI2RlZmluZSBESU5BMjUgMHgyNQojZGVmaW5lIERJTkEyRCAweDJkCiNkZWZpbmUg RElOQTM1IDB4MzUKI2RlZmluZSBESU5BM0QgMHgzZAojZGVmaW5lIERJTkE0RCAweDRkCiNkZWZp bmUgRElOQTU1IDB4NTUKI2RlZmluZSBESU5BNUQgMHg1RAojZGVmaW5lIERJTkE2RCAweDZkCiNk ZWZpbmUgRElOQTc1IDB4NzUKI2RlZmluZSBESU5BN0QgMHg3ZAoKI2RlZmluZSBESU5BREMgMHhk YwojZGVmaW5lIERJTkFGMiAweGYyCiNkZWZpbmUgRElOQUFCIDB4YWIKI2RlZmluZSBESU5BQUEg MHhhYQojZGVmaW5lIERJTkFGMSAweGYxCiNkZWZpbmUgRElOQURGIDB4ZGYKI2RlZmluZSBESU5B REEgMHhkYQojZGVmaW5lIERJTkFCMSAweGIxCiNkZWZpbmUgRElOQUI5IDB4YjkKI2RlZmluZSBE SU5BRjMgMHhmMwojZGVmaW5lIERJTkE4QiAweDhiCiNkZWZpbmUgRElOQUEzIDB4YTMKI2RlZmlu ZSBESU5BOTEgMHg5MQojZGVmaW5lIERJTkFCNiAweGI2CiNkZWZpbmUgRElOQUI0IDB4YjQKCgoj ZGVmaW5lIERJTkMwMCAweDAwCiNkZWZpbmUgRElOQzAxIDB4MDEKI2RlZmluZSBESU5DMDIgMHgw MgojZGVmaW5lIERJTkMwMyAweDAzCiNkZWZpbmUgRElOQzA4IDB4MDgKI2RlZmluZSBESU5DMDkg MHgwOQojZGVmaW5lIERJTkMwQSAweDBhCiNkZWZpbmUgRElOQzBCIDB4MGIKI2RlZmluZSBESU5D MTAgMHgxMAojZGVmaW5lIERJTkMxMSAweDExCiNkZWZpbmUgRElOQzEyIDB4MTIKI2RlZmluZSBE SU5DMTMgMHgxMwojZGVmaW5lIERJTkMxOCAweDE4CiNkZWZpbmUgRElOQzE5IDB4MTkKI2RlZmlu ZSBESU5DMUEgMHgxYQojZGVmaW5lIERJTkMxQiAweDFiCgojZGVmaW5lIERJTkMyMCAweDIwCiNk ZWZpbmUgRElOQzIxIDB4MjEKI2RlZmluZSBESU5DMjIgMHgyMgojZGVmaW5lIERJTkMyMyAweDIz CiNkZWZpbmUgRElOQzI4IDB4MjgKI2RlZmluZSBESU5DMjkgMHgyOQojZGVmaW5lIERJTkMyQSAw eDJhCiNkZWZpbmUgRElOQzJCIDB4MmIKI2RlZmluZSBESU5DMzAgMHgzMAojZGVmaW5lIERJTkMz MSAweDMxCiNkZWZpbmUgRElOQzMyIDB4MzIKI2RlZmluZSBESU5DMzMgMHgzMwojZGVmaW5lIERJ TkMzOCAweDM4CiNkZWZpbmUgRElOQzM5IDB4MzkKI2RlZmluZSBESU5DM0EgMHgzYQojZGVmaW5l IERJTkMzQiAweDNiCgojZGVmaW5lIERJTkM0MCAweDQwCiNkZWZpbmUgRElOQzQxIDB4NDEKI2Rl ZmluZSBESU5DNDIgMHg0MgojZGVmaW5lIERJTkM0MyAweDQzCiNkZWZpbmUgRElOQzQ4IDB4NDgK I2RlZmluZSBESU5DNDkgMHg0OQojZGVmaW5lIERJTkM0QSAweDRhCiNkZWZpbmUgRElOQzRCIDB4 NGIKI2RlZmluZSBESU5DNTAgMHg1MAojZGVmaW5lIERJTkM1MSAweDUxCiNkZWZpbmUgRElOQzUy IDB4NTIKI2RlZmluZSBESU5DNTMgMHg1MwojZGVmaW5lIERJTkM1OCAweDU4CiNkZWZpbmUgRElO QzU5IDB4NTkKI2RlZmluZSBESU5DNUEgMHg1YQojZGVmaW5lIERJTkM1QiAweDViCgojZGVmaW5l IERJTkM2MCAweDYwCiNkZWZpbmUgRElOQzYxIDB4NjEKI2RlZmluZSBESU5DNjIgMHg2MgojZGVm aW5lIERJTkM2MyAweDYzCiNkZWZpbmUgRElOQzY4IDB4NjgKI2RlZmluZSBESU5DNjkgMHg2OQoj ZGVmaW5lIERJTkM2QSAweDZhCiNkZWZpbmUgRElOQzZCIDB4NmIKI2RlZmluZSBESU5DNzAgMHg3 MAojZGVmaW5lIERJTkM3MSAweDcxCiNkZWZpbmUgRElOQzcyIDB4NzIKI2RlZmluZSBESU5DNzMg MHg3MwojZGVmaW5lIERJTkM3OCAweDc4CiNkZWZpbmUgRElOQzc5IDB4NzkKI2RlZmluZSBESU5D N0EgMHg3YQojZGVmaW5lIERJTkM3QiAweDdiCgojZGVmaW5lIERJTkQ0MCAweDQwCgoKI2RlZmlu ZSBESU5BODAgMHg4MAojZGVmaW5lIERJTkE5MCAweDkwCiNkZWZpbmUgRElOQUEwIDB4YTAKI2Rl ZmluZSBESU5BQzkgMHhjOQojZGVmaW5lIERJTkFDQiAweGNiCiNkZWZpbmUgRElOQUNEIDB4Y2QK I2RlZmluZSBESU5BQ0YgMHhjZgojZGVmaW5lIERJTkFDOCAweGM4CiNkZWZpbmUgRElOQUNBIDB4 Y2EKI2RlZmluZSBESU5BQ0MgMHhjYwojZGVmaW5lIERJTkFDRSAweGNlCiNkZWZpbmUgRElOQUQ4 IDB4ZDgKI2RlZmluZSBESU5BREQgMHhkZAojZGVmaW5lIERJTkFGOCAweGYwCiNkZWZpbmUgRElO QUZFIDB4ZmUKCiNkZWZpbmUgRElOQkY4IDB4ZjgKI2RlZmluZSBESU5BQzAgMHhiMAojZGVmaW5l IERJTkFDMSAweGIxCiNkZWZpbmUgRElOQUMyIDB4YjQKI2RlZmluZSBESU5BQzMgMHhiNQojZGVm aW5lIERJTkFDNCAweGI4CiNkZWZpbmUgRElOQUM1IDB4YjkKI2RlZmluZSBESU5CQzAgMHhjMAoj ZGVmaW5lIERJTkJDMiAweGMyCiNkZWZpbmUgRElOQkM0IDB4YzQKI2RlZmluZSBESU5CQzYgMHhj NgoKCgojZW5kaWYKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ZG1wbWFwLmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1 MAAwMDAxNzUwADAwMDAwMDE0NTMxADExNzUyNTQ2NzYwADAxMTE0MgAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGdnYW8AAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAZ2dhbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv KgogJExpY2Vuc2U6CiAgICBDb3B5cmlnaHQgKEMpIDIwMTEgSW52ZW5TZW5zZSBDb3Jwb3JhdGlv biwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICQKICovCiNpZm5kZWYgRE1QTUFQX0gKI2RlZmluZSBE TVBNQVBfSAoKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIKewojZW5kaWYKCiNkZWZpbmUg RE1QX1BUQVQgICAgMAojZGVmaW5lIERNUF9YR1lSICAgIDIKI2RlZmluZSBETVBfWUdZUiAgICA0 CiNkZWZpbmUgRE1QX1pHWVIgICAgNgojZGVmaW5lIERNUF9YQUNDICAgIDgKI2RlZmluZSBETVBf WUFDQyAgICAxMAojZGVmaW5lIERNUF9aQUNDICAgIDEyCiNkZWZpbmUgRE1QX0FEQzEgICAgMTQK I2RlZmluZSBETVBfQURDMiAgICAxNgojZGVmaW5lIERNUF9BREMzICAgIDE4CiNkZWZpbmUgRE1Q X0JJQVNVTkMgICAgMjAKI2RlZmluZSBETVBfRklGT1JUICAgIDIyCiNkZWZpbmUgRE1QX0lOVkdT RkggICAgMjQKI2RlZmluZSBETVBfSU5WR1NGTCAgICAyNgojZGVmaW5lIERNUF8xSCAgICAyOAoj ZGVmaW5lIERNUF8xTCAgICAzMAojZGVmaW5lIERNUF9CTFBGU1RDSCAgICAzMgojZGVmaW5lIERN UF9CTFBGU1RDTCAgICAzNAojZGVmaW5lIERNUF9CTFBGU1hIICAgIDM2CiNkZWZpbmUgRE1QX0JM UEZTWEwgICAgMzgKI2RlZmluZSBETVBfQkxQRlNZSCAgICA0MAojZGVmaW5lIERNUF9CTFBGU1lM ICAgIDQyCiNkZWZpbmUgRE1QX0JMUEZTWkggICAgNDQKI2RlZmluZSBETVBfQkxQRlNaTCAgICA0 NgojZGVmaW5lIERNUF9CTFBGTVRDICAgIDQ4CiNkZWZpbmUgRE1QX1NNQyAgICA1MAojZGVmaW5l IERNUF9CTFBGTVhIICAgIDUyCiNkZWZpbmUgRE1QX0JMUEZNWEwgICAgNTQKI2RlZmluZSBETVBf QkxQRk1ZSCAgICA1NgojZGVmaW5lIERNUF9CTFBGTVlMICAgIDU4CiNkZWZpbmUgRE1QX0JMUEZN WkggICAgNjAKI2RlZmluZSBETVBfQkxQRk1aTCAgICA2MgojZGVmaW5lIERNUF9CTFBGQyAgICA2 NAojZGVmaW5lIERNUF9TTUNUSCAgICA2NgojZGVmaW5lIERNUF8wSDIgICAgNjgKI2RlZmluZSBE TVBfMEwyICAgIDcwCiNkZWZpbmUgRE1QX0JFUlIySCAgICA3MgojZGVmaW5lIERNUF9CRVJSMkwg ICAgNzQKI2RlZmluZSBETVBfQkVSUjJOSCAgICA3NgojZGVmaW5lIERNUF9TTUNJTkMgICAgNzgK I2RlZmluZSBETVBfQU5HVkJYSCAgICA4MAojZGVmaW5lIERNUF9BTkdWQlhMICAgIDgyCiNkZWZp bmUgRE1QX0FOR1ZCWUggICAgODQKI2RlZmluZSBETVBfQU5HVkJZTCAgICA4NgojZGVmaW5lIERN UF9BTkdWQlpIICAgIDg4CiNkZWZpbmUgRE1QX0FOR1ZCWkwgICAgOTAKI2RlZmluZSBETVBfQkVS UjFIICAgIDkyCiNkZWZpbmUgRE1QX0JFUlIxTCAgICA5NAojZGVmaW5lIERNUF9BVENIICAgIDk2 CiNkZWZpbmUgRE1QX0JJQVNVTkNTRiAgICA5OAojZGVmaW5lIERNUF9BQ1QySCAgICAxMDAKI2Rl ZmluZSBETVBfQUNUMkwgICAgMTAyCiNkZWZpbmUgRE1QX0dTRkggICAgMTA0CiNkZWZpbmUgRE1Q X0dTRkwgICAgMTA2CiNkZWZpbmUgRE1QX0dIICAgIDEwOAojZGVmaW5lIERNUF9HTCAgICAxMTAK I2RlZmluZSBETVBfMF81SCAgICAxMTIKI2RlZmluZSBETVBfMF81TCAgICAxMTQKI2RlZmluZSBE TVBfMF8wSCAgICAxMTYKI2RlZmluZSBETVBfMF8wTCAgICAxMTgKI2RlZmluZSBETVBfMV8wSCAg ICAxMjAKI2RlZmluZSBETVBfMV8wTCAgICAxMjIKI2RlZmluZSBETVBfMV81SCAgICAxMjQKI2Rl ZmluZSBETVBfMV81TCAgICAxMjYKI2RlZmluZSBETVBfVE1QMUFIICAgIDEyOAojZGVmaW5lIERN UF9UTVAxQUwgICAgMTMwCiNkZWZpbmUgRE1QX1RNUDJBSCAgICAxMzIKI2RlZmluZSBETVBfVE1Q MkFMICAgIDEzNAojZGVmaW5lIERNUF9UTVAzQUggICAgMTM2CiNkZWZpbmUgRE1QX1RNUDNBTCAg ICAxMzgKI2RlZmluZSBETVBfVE1QNEFIICAgIDE0MAojZGVmaW5lIERNUF9UTVA0QUwgICAgMTQy CiNkZWZpbmUgRE1QX1hBQ0NXICAgIDE0NAojZGVmaW5lIERNUF9UTVA1ICAgIDE0NgojZGVmaW5l IERNUF9YQUNDQiAgICAxNDgKI2RlZmluZSBETVBfVE1QOCAgICAxNTAKI2RlZmluZSBETVBfWUFD Q0IgICAgMTUyCiNkZWZpbmUgRE1QX1RNUDkgICAgMTU0CiNkZWZpbmUgRE1QX1pBQ0NCICAgIDE1 NgojZGVmaW5lIERNUF9UTVAxMCAgICAxNTgKI2RlZmluZSBETVBfRFpIICAgIDE2MAojZGVmaW5l IERNUF9EWkwgICAgMTYyCiNkZWZpbmUgRE1QX1hHQ0ggICAgMTY0CiNkZWZpbmUgRE1QX1hHQ0wg ICAgMTY2CiNkZWZpbmUgRE1QX1lHQ0ggICAgMTY4CiNkZWZpbmUgRE1QX1lHQ0wgICAgMTcwCiNk ZWZpbmUgRE1QX1pHQ0ggICAgMTcyCiNkZWZpbmUgRE1QX1pHQ0wgICAgMTc0CiNkZWZpbmUgRE1Q X1lBQ0NXICAgIDE3NgojZGVmaW5lIERNUF9UTVA3ICAgIDE3OAojZGVmaW5lIERNUF9BRkIxSCAg ICAxODAKI2RlZmluZSBETVBfQUZCMUwgICAgMTgyCiNkZWZpbmUgRE1QX0FGQjJIICAgIDE4NAoj ZGVmaW5lIERNUF9BRkIyTCAgICAxODYKI2RlZmluZSBETVBfTUFHRkJIICAgIDE4OAojZGVmaW5l IERNUF9NQUdGQkwgICAgMTkwCiNkZWZpbmUgRE1QX1FUMUggICAgMTkyCiNkZWZpbmUgRE1QX1FU MUwgICAgMTk0CiNkZWZpbmUgRE1QX1FUMkggICAgMTk2CiNkZWZpbmUgRE1QX1FUMkwgICAgMTk4 CiNkZWZpbmUgRE1QX1FUM0ggICAgMjAwCiNkZWZpbmUgRE1QX1FUM0wgICAgMjAyCiNkZWZpbmUg RE1QX1FUNEggICAgMjA0CiNkZWZpbmUgRE1QX1FUNEwgICAgMjA2CiNkZWZpbmUgRE1QX0NUUkwx SCAgICAyMDgKI2RlZmluZSBETVBfQ1RSTDFMICAgIDIxMAojZGVmaW5lIERNUF9DVFJMMkggICAg MjEyCiNkZWZpbmUgRE1QX0NUUkwyTCAgICAyMTQKI2RlZmluZSBETVBfQ1RSTDNIICAgIDIxNgoj ZGVmaW5lIERNUF9DVFJMM0wgICAgMjE4CiNkZWZpbmUgRE1QX0NUUkw0SCAgICAyMjAKI2RlZmlu ZSBETVBfQ1RSTDRMICAgIDIyMgojZGVmaW5lIERNUF9DVFJMUzEgICAgMjI0CiNkZWZpbmUgRE1Q X0NUUkxTRjEgICAgMjI2CiNkZWZpbmUgRE1QX0NUUkxTMiAgICAyMjgKI2RlZmluZSBETVBfQ1RS TFNGMiAgICAyMzAKI2RlZmluZSBETVBfQ1RSTFMzICAgIDIzMgojZGVmaW5lIERNUF9DVFJMU0ZO TEwgICAgMjM0CiNkZWZpbmUgRE1QX0NUUkxTNCAgICAyMzYKI2RlZmluZSBETVBfQ1RSTFNGTkwy ICAgIDIzOAojZGVmaW5lIERNUF9DVFJMU0ZOTCAgICAyNDAKI2RlZmluZSBETVBfVE1QMzAgICAg MjQyCiNkZWZpbmUgRE1QX0NUUkxTRkpUICAgIDI0NAojZGVmaW5lIERNUF9UTVAzMSAgICAyNDYK I2RlZmluZSBETVBfVE1QMTEgICAgMjQ4CiNkZWZpbmUgRE1QX0NUUkxTRjJfMiAgICAyNTAKI2Rl ZmluZSBETVBfVE1QMTIgICAgMjUyCiNkZWZpbmUgRE1QX0NUUkxTRjFfMiAgICAyNTQKI2RlZmlu ZSBETVBfUFJFVlBUQVQgICAgMjU2CiNkZWZpbmUgRE1QX0FDQ1pCICAgIDI1OAojZGVmaW5lIERN UF9BQ0NYQiAgICAyNjQKI2RlZmluZSBETVBfQUNDWUIgICAgMjY2CiNkZWZpbmUgRE1QXzFIQiAg ICAyNzIKI2RlZmluZSBETVBfMUxCICAgIDI3NAojZGVmaW5lIERNUF8wSCAgICAyNzYKI2RlZmlu ZSBETVBfMEwgICAgMjc4CiNkZWZpbmUgRE1QX0FTUjIySCAgICAyODAKI2RlZmluZSBETVBfQVNS MjJMICAgIDI4MgojZGVmaW5lIERNUF9BU1I2SCAgICAyODQKI2RlZmluZSBETVBfQVNSNkwgICAg Mjg2CiNkZWZpbmUgRE1QX1RNUDEzICAgIDI4OAojZGVmaW5lIERNUF9UTVAxNCAgICAyOTAKI2Rl ZmluZSBETVBfRklOVFhIICAgIDI5MgojZGVmaW5lIERNUF9GSU5UWEwgICAgMjk0CiNkZWZpbmUg RE1QX0ZJTlRZSCAgICAyOTYKI2RlZmluZSBETVBfRklOVFlMICAgIDI5OAojZGVmaW5lIERNUF9G SU5UWkggICAgMzAwCiNkZWZpbmUgRE1QX0ZJTlRaTCAgICAzMDIKI2RlZmluZSBETVBfVE1QMUJI ICAgIDMwNAojZGVmaW5lIERNUF9UTVAxQkwgICAgMzA2CiNkZWZpbmUgRE1QX1RNUDJCSCAgICAz MDgKI2RlZmluZSBETVBfVE1QMkJMICAgIDMxMAojZGVmaW5lIERNUF9UTVAzQkggICAgMzEyCiNk ZWZpbmUgRE1QX1RNUDNCTCAgICAzMTQKI2RlZmluZSBETVBfVE1QNEJIICAgIDMxNgojZGVmaW5l IERNUF9UTVA0QkwgICAgMzE4CiNkZWZpbmUgRE1QX1NUWEcgICAgMzIwCiNkZWZpbmUgRE1QX1pD VFhHICAgIDMyMgojZGVmaW5lIERNUF9TVFlHICAgIDMyNAojZGVmaW5lIERNUF9aQ1RZRyAgICAz MjYKI2RlZmluZSBETVBfU1RaRyAgICAzMjgKI2RlZmluZSBETVBfWkNUWkcgICAgMzMwCiNkZWZp bmUgRE1QX0NUUkxTRkpUMiAgICAzMzIKI2RlZmluZSBETVBfQ1RSTFNGSlRDTlQgICAgMzM0CiNk ZWZpbmUgRE1QX1BWWEcgICAgMzM2CiNkZWZpbmUgRE1QX1RNUDE1ICAgIDMzOAojZGVmaW5lIERN UF9QVllHICAgIDM0MAojZGVmaW5lIERNUF9UTVAxNiAgICAzNDIKI2RlZmluZSBETVBfUFZaRyAg ICAzNDQKI2RlZmluZSBETVBfVE1QMTcgICAgMzQ2CiNkZWZpbmUgRE1QX01OTUZMQUdIICAgIDM1 MgojZGVmaW5lIERNUF9NTk1GTEFHTCAgICAzNTQKI2RlZmluZSBETVBfTU5NVE1IICAgIDM1Ngoj ZGVmaW5lIERNUF9NTk1UTUwgICAgMzU4CiNkZWZpbmUgRE1QX01OTVRNVEhSSCAgICAzNjAKI2Rl ZmluZSBETVBfTU5NVE1USFJMICAgIDM2MgojZGVmaW5lIERNUF9NTk1USFJIICAgIDM2NAojZGVm aW5lIERNUF9NTk1USFJMICAgIDM2NgojZGVmaW5lIERNUF9BQ0NRRDRIICAgIDM2OAojZGVmaW5l IERNUF9BQ0NRRDRMICAgIDM3MAojZGVmaW5lIERNUF9BQ0NRRDVIICAgIDM3MgojZGVmaW5lIERN UF9BQ0NRRDVMICAgIDM3NAojZGVmaW5lIERNUF9BQ0NRRDZIICAgIDM3NgojZGVmaW5lIERNUF9B Q0NRRDZMICAgIDM3OAojZGVmaW5lIERNUF9BQ0NRRDdIICAgIDM4MAojZGVmaW5lIERNUF9BQ0NR RDdMICAgIDM4MgojZGVmaW5lIERNUF9BQ0NRRDBIICAgIDM4NAojZGVmaW5lIERNUF9BQ0NRRDBM ICAgIDM4NgojZGVmaW5lIERNUF9BQ0NRRDFIICAgIDM4OAojZGVmaW5lIERNUF9BQ0NRRDFMICAg IDM5MAojZGVmaW5lIERNUF9BQ0NRRDJIICAgIDM5MgojZGVmaW5lIERNUF9BQ0NRRDJMICAgIDM5 NAojZGVmaW5lIERNUF9BQ0NRRDNIICAgIDM5NgojZGVmaW5lIERNUF9BQ0NRRDNMICAgIDM5OAoj ZGVmaW5lIERNUF9YTjJIICAgIDQwMAojZGVmaW5lIERNUF9YTjJMICAgIDQwMgojZGVmaW5lIERN UF9YTjFIICAgIDQwNAojZGVmaW5lIERNUF9YTjFMICAgIDQwNgojZGVmaW5lIERNUF9ZTjJIICAg IDQwOAojZGVmaW5lIERNUF9ZTjJMICAgIDQxMAojZGVmaW5lIERNUF9ZTjFIICAgIDQxMgojZGVm aW5lIERNUF9ZTjFMICAgIDQxNAojZGVmaW5lIERNUF9ZSCAgICA0MTYKI2RlZmluZSBETVBfWUwg ICAgNDE4CiNkZWZpbmUgRE1QX0IwSCAgICA0MjAKI2RlZmluZSBETVBfQjBMICAgIDQyMgojZGVm aW5lIERNUF9BMUggICAgNDI0CiNkZWZpbmUgRE1QX0ExTCAgICA0MjYKI2RlZmluZSBETVBfQTJI ICAgIDQyOAojZGVmaW5lIERNUF9BMkwgICAgNDMwCiNkZWZpbmUgRE1QX1NFTTEgICAgNDMyCiNk ZWZpbmUgRE1QX0ZJRk9DTlQgICAgNDM0CiNkZWZpbmUgRE1QX1NIX1RIX1ggICAgNDM2CiNkZWZp bmUgRE1QX1BBQ0tFVCAgICA0MzgKI2RlZmluZSBETVBfU0hfVEhfWSAgICA0NDAKI2RlZmluZSBE TVBfRk9PVEVSICAgIDQ0MgojZGVmaW5lIERNUF9TSF9USF9aICAgIDQ0NAojZGVmaW5lIERNUF9U RU1QMjkgICAgNDQ4CiNkZWZpbmUgRE1QX1RFTVAzMCAgICA0NTAKI2RlZmluZSBETVBfWEFDQ0Jf UFJFICAgIDQ1MgojZGVmaW5lIERNUF9YQUNDQl9QUkVMICAgIDQ1NAojZGVmaW5lIERNUF9ZQUND Ql9QUkUgICAgNDU2CiNkZWZpbmUgRE1QX1lBQ0NCX1BSRUwgICAgNDU4CiNkZWZpbmUgRE1QX1pB Q0NCX1BSRSAgICA0NjAKI2RlZmluZSBETVBfWkFDQ0JfUFJFTCAgICA0NjIKI2RlZmluZSBETVBf VE1QMjIgICAgNDY0CiNkZWZpbmUgRE1QX1RBUF9USU1FUiAgICA0NjYKI2RlZmluZSBETVBfVEFQ X1RIWCAgICA0NjgKI2RlZmluZSBETVBfVEFQX1RIWSAgICA0NzIKI2RlZmluZSBETVBfVEFQX1RI WiAgICA0NzYKI2RlZmluZSBETVBfVEFQV19NSU4gICAgNDc4CiNkZWZpbmUgRE1QX1RNUDI1ICAg IDQ4MAojZGVmaW5lIERNUF9UTVAyNiAgICA0ODIKI2RlZmluZSBETVBfVE1QMjcgICAgNDg0CiNk ZWZpbmUgRE1QX1RNUDI4ICAgIDQ4NgojZGVmaW5lIERNUF9PUklFTlQgICAgNDg4CiNkZWZpbmUg RE1QX1RIUlNIICAgIDQ5MAojZGVmaW5lIERNUF9FTkRJQU5IICAgIDQ5MgojZGVmaW5lIERNUF9F TkRJQU5MICAgIDQ5NAojZGVmaW5lIERNUF9CTFBGTk1UQ0ggICAgNDk2CiNkZWZpbmUgRE1QX0JM UEZOTVRDTCAgICA0OTgKI2RlZmluZSBETVBfQkxQRk5NWEggICAgNTAwCiNkZWZpbmUgRE1QX0JM UEZOTVhMICAgIDUwMgojZGVmaW5lIERNUF9CTFBGTk1ZSCAgICA1MDQKI2RlZmluZSBETVBfQkxQ Rk5NWUwgICAgNTA2CiNkZWZpbmUgRE1QX0JMUEZOTVpIICAgIDUwOAojZGVmaW5lIERNUF9CTFBG Tk1aTCAgICA1MTAKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCiNlbmRpZgoAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGludl9tcHUzMDUwX2lp by5jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAw MDAxNDczNAAxMTc1MjU0Njc2MAAwMTI1MTEAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAdXN0YXIgIABnZ2FvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdn YW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKKiBDb3B5cmlnaHQg KEMpIDIwMTIgSW52ZW5zZW5zZSwgSW5jLgoqCiogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwoqIExpY2Vuc2UgdmVyc2lv biAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCiog bWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJt cy4KKgoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAoqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCioKKi8KCi8qKgogKiAgQGFkZHRvZ3JvdXAgIERSSVZFUlMKICog IEBicmllZiAgICAgICBIYXJkd2FyZSBkcml2ZXJzLgogKgogKiAgQHsKICogICAgICBAZmlsZSAg ICBpbnZfbXB1MzA1MC5jCiAqICAgICAgQGJyaWVmICAgQSBzeXNmcyBkZXZpY2UgZHJpdmVyIGZv ciBJbnZlbnNlbnNlIGRldmljZXMKICogICAgICBAZGV0YWlscyBUaGlzIGZpbGUgaXMgcGFydCBv ZiBpbnZfZ3lybyBkcml2ZXIgY29kZQogKi8KCiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2lu Y2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KI2luY2x1ZGUgPGxp bnV4L2kyYy5oPgojaW5jbHVkZSA8bGludXgvZXJyLmg+CiNpbmNsdWRlIDxsaW51eC9kZWxheS5o PgojaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KI2lu Y2x1ZGUgPGxpbnV4L2lycS5oPgojaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiNpbmNsdWRl IDxsaW51eC9rZmlmby5oPgojaW5jbHVkZSA8bGludXgvcG9sbC5oPgojaW5jbHVkZSA8bGludXgv bWlzY2RldmljZS5oPgojaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KCiNpbmNsdWRlICJpbnZf bXB1X2lpby5oIgojZGVmaW5lIE1QVTMwNTBfTkFDS19USU1FICgyKjEwMDApCiNkZWZpbmUgTVBV MzA1MF9PTkVfTVBVX1RJTUUgKDIwKQojZGVmaW5lIE1QVTMwNTBfQk9HVVNfQUREUiAoMHg3RikK CmludCBzZXRfMzA1MF9ieXBhc3Moc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0LCBpbnQgZW5h YmxlKQp7CglzdHJ1Y3QgaW52X3JlZ19tYXBfcyAqcmVnOwoJaW50IHJlc3VsdDsKCXVuc2lnbmVk IGNoYXIgYjsKCglyZWcgPSAmc3QtPnJlZzsKCXJlc3VsdCA9IGludl9pMmNfcmVhZChzdCwgcmVn LT51c2VyX2N0cmwsIDEsICZiKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCWlmICgo KGIgJiBCSVRfMzA1MF9BVVhfSUZfRU4pID09IDApICYmIGVuYWJsZSkKCQlyZXR1cm4gMDsKCWlm ICgoYiAmIEJJVF8zMDUwX0FVWF9JRl9FTikgJiYgKGVuYWJsZSA9PSAwKSkKCQlyZXR1cm4gMDsK CWIgJj0gfkJJVF8zMDUwX0FVWF9JRl9FTjsKCWlmICghZW5hYmxlKSB7CgkJYiB8PSBCSVRfMzA1 MF9BVVhfSUZfRU47CgkJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+dXNl cl9jdHJsLCBiKTsKCQlyZXR1cm4gcmVzdWx0OwoJfSBlbHNlIHsKCQkvKiBDb21pbmcgb3V0IG9m IEkyQyBpcyB0cmlja3kgZHVlIHRvIHNldmVyYWwgZXJyYXR0YS4gIERvIG5vdAoJCSogbW9kaWZ5 IHRoaXMgYWxnb3JpdGhtCgkJKi8KCQkvKgoJCSogMSkgd2FpdCBmb3IgdGhlIHJpZ2h0IHRpbWUg YW5kIHNlbmQgdGhlIGNvbW1hbmQgdG8gY2hhbmdlCgkJKiB0aGUgYXV4IGkyYyBzbGF2ZSBhZGRy ZXNzIHRvIGFuIGludmFsaWQgYWRkcmVzcyB0aGF0IHdpbGwKCQkqIGdldCBuYWNrJ2VkCgkJKgoJ CSogMHgwMCBpcyBicm9hZGNhc3QuICAweDdGIGlzIHVubGlrZWx5IHRvIGJlIHVzZWQgYnkgYW55 IGF1eC4KCQkqLwoJCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCBSRUdfMzA1MF9T TEFWRV9BRERSLAoJCQkJCQlNUFUzMDUwX0JPR1VTX0FERFIpOwoJCWlmIChyZXN1bHQpCgkJCXJl dHVybiByZXN1bHQ7CgkJLyoKCQkqIDIpIHdhaXQgZW5vdWdoIHRpbWUgZm9yIGEgbmFjayB0byBv Y2N1ciwgdGhlbiBnbyBpbnRvCgkJKiAgICBieXBhc3MgbW9kZToKCQkqLwoJCXVzbGVlcF9yYW5n ZShNUFUzMDUwX05BQ0tfVElNRSwgTVBVMzA1MF9OQUNLX1RJTUUpOwoJCXJlc3VsdCA9IGludl9p MmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPnVzZXJfY3RybCwgYik7CgkJaWYgKHJlc3VsdCkKCQkJ cmV0dXJuIHJlc3VsdDsKCQkvKgoJCSogMykgd2FpdCBmb3IgdXAgdG8gb25lIE1QVSBjeWNsZSB0 aGVuIHJlc3RvcmUgdGhlIHNsYXZlCgkJKiAgICBhZGRyZXNzCgkJKi8KCQltc2xlZXAoTVBVMzA1 MF9PTkVfTVBVX1RJTUUpOwoKCQlyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgUkVH XzMwNTBfU0xBVkVfQUREUiwKCQkJc3QtPnBsYXRfZGF0YS5zZWNvbmRhcnlfaTJjX2FkZHIpOwoJ CWlmIChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7CgkJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVf d3JpdGUoc3QsIHJlZy0+dXNlcl9jdHJsLCBiKTsKCQlpZiAocmVzdWx0KQoJCQlyZXR1cm4gcmVz dWx0OwoJCXVzbGVlcF9yYW5nZShNUFUzMDUwX05BQ0tfVElNRSwgTVBVMzA1MF9OQUNLX1RJTUUp OwoJfQoJcmV0dXJuIDA7Cn0KCnZvaWQgaW52X3NldHVwX3JlZ19tcHUzMDUwKHN0cnVjdCBpbnZf cmVnX21hcF9zICpyZWcpCnsKCXJlZy0+Zmlmb19lbiAgICAgICAgID0gMHgxMjsKCXJlZy0+c2Ft cGxlX3JhdGVfZGl2ID0gMHgxNTsKCXJlZy0+bHBmICAgICAgICAgICAgID0gMHgxNjsKCXJlZy0+ Zmlmb19jb3VudF9oICAgID0gMHgzYTsKCXJlZy0+Zmlmb19yX3cgICAgICAgID0gMHgzYzsKCXJl Zy0+dXNlcl9jdHJsICAgICAgID0gMHgzZDsKCXJlZy0+cHdyX21nbXRfMSAgICAgID0gMHgzZTsK CXJlZy0+cmF3X2d5cm8gICAgICAgID0gMHgxZDsKCXJlZy0+cmF3X2FjY2wgICAgICAgID0gMHgy MzsKCXJlZy0+dGVtcGVyYXR1cmUgICAgID0gMHgxYjsKCXJlZy0+aW50X2VuYWJsZSAgICAgID0g MHgxNzsKCXJlZy0+aW50X3N0YXR1cyAgICAgID0gMHgxYTsKfQoKLyoqCiAqICBpbnZfaW5pdF9j b25maWdfbXB1MzA1MCgpIC0gSW5pdGlhbGl6ZSBoYXJkd2FyZSwgZGlzYWJsZSBGSUZPLgogKiAg QHN0OglEZXZpY2UgZHJpdmVyIGluc3RhbmNlLgogKiAgSW5pdGlhbCBjb25maWd1cmF0aW9uOgog KiAgRlNSOiArLy0gMjAwMERQUwogKiAgRExQRjogNDJIegogKiAgRklGTyByYXRlOiA1MEh6CiAq ICBDbG9jayBzb3VyY2U6IEd5cm8gUExMCiAqLwppbnQgaW52X2luaXRfY29uZmlnX21wdTMwNTAo c3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKewoJc3RydWN0IGludl9yZWdfbWFwX3MgKnJlZzsK CWludCByZXN1bHQ7Cgl1bnNpZ25lZCBjaGFyIGRhdGE7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVf cyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJaWYgKHN0LT5jaGlwX2NvbmZpZy5pc19hc2xl ZXApCgkJcmV0dXJuIC1FUEVSTTsKCS8qcmVhZGluZyBBVVggVkRESU8gcmVnaXN0ZXIgKi8KCXJl c3VsdCA9IGludl9pMmNfcmVhZChzdCwgUkVHXzMwNTBfQVVYX1ZERElPLCAxLCAmZGF0YSk7Cglp ZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglkYXRhICY9IH5CSVRfMzA1MF9WRERJTzsKCWlm IChzdC0+cGxhdF9kYXRhLmxldmVsX3NoaWZ0ZXIpCgkJZGF0YSB8PSBCSVRfMzA1MF9WRERJTzsK CXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCBSRUdfMzA1MF9BVVhfVkRESU8sIGRh dGEpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoKCXJlZyA9ICZzdC0+cmVnOwoJcmVz dWx0ID0gc2V0X2ludl9lbmFibGUoaW5kaW9fZGV2LCAwKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJu IHJlc3VsdDsKCS8qMjAwMGRwcyBmdWxsIHNjYWxlIHJhbmdlKi8KCXJlc3VsdCA9IGludl9pMmNf c2luZ2xlX3dyaXRlKHN0LCByZWctPmxwZiwKCQkJCShJTlZfRlNSXzIwMDBEUFMgPDwgR1lST19D T05GSUdfRlNSX1NISUZUKQoJCQkJfCBJTlZfRklMVEVSXzQySFopOwoJaWYgKHJlc3VsdCkKCQly ZXR1cm4gcmVzdWx0OwoJc3QtPmNoaXBfY29uZmlnLmZzciA9IElOVl9GU1JfMjAwMERQUzsKCXN0 LT5jaGlwX2NvbmZpZy5scGYgPSBJTlZfRklMVEVSXzQySFo7CglyZXN1bHQgPSBpbnZfaTJjX3Np bmdsZV93cml0ZShzdCwgcmVnLT5zYW1wbGVfcmF0ZV9kaXYsCgkJCQkJT05FX0tfSFovSU5JVF9G SUZPX1JBVEUgLSAxKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCXN0LT5jaGlwX2Nv bmZpZy5maWZvX3JhdGUgPSBJTklUX0ZJRk9fUkFURTsKCXN0LT5pcnFfZHVyX3VzICAgICAgICAg ICAgPSBJTklUX0RVUl9USU1FOwoJc3QtPmNoaXBfY29uZmlnLmVuYWJsZSA9IDA7CglzdC0+Y2hp cF9jb25maWcuZG1wX29uID0gMDsKCXN0LT5jb21wYXNzX2RpdmlkZXIgPSAwOwoJc3QtPmNvbXBh c3NfY291bnRlciA9IDA7CglzdC0+Y2hpcF9jb25maWcuY29tcGFzc19lbmFibGUgPSAwOwoJc3Qt PmNoaXBfY29uZmlnLmZpcm13YXJlX2xvYWRlZCA9IDA7CglzdC0+Y2hpcF9jb25maWcucHJvZ19z dGFydF9hZGRyID0gRE1QX1NUQVJUX0FERFI7CglzdC0+Y2hpcF9jb25maWcuZ3lyb19lbmFibGUg PSAxOwoJc3QtPmNoaXBfY29uZmlnLmd5cm9fZmlmb19lbmFibGUgPSAxOwoJaWYgKFNFQ09OREFS WV9TTEFWRV9UWVBFX0FDQ0VMID09IHN0LT5wbGF0X2RhdGEuc2VjX3NsYXZlX3R5cGUpIHsKCQly ZXN1bHQgPSBzdC0+bXB1X3NsYXZlLT5zZXR1cChzdCk7CgkJaWYgKHJlc3VsdCkKCQkJcmV0dXJu IHJlc3VsdDsKCQlyZXN1bHQgPSBzdC0+bXB1X3NsYXZlLT5zZXRfZnMoc3QsIElOVl9GU18wMkcp OwoJCWlmIChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7CgkJcmVzdWx0ID0gc3QtPm1wdV9zbGF2 ZS0+c2V0X2xwZihzdCwgSU5JVF9GSUZPX1JBVEUpOwoJCWlmIChyZXN1bHQpCgkJCXJldHVybiBy ZXN1bHQ7CgkJc3QtPmNoaXBfY29uZmlnLmFjY2xfZW5hYmxlID0gMTsKCQlzdC0+Y2hpcF9jb25m aWcuYWNjbF9maWZvX2VuYWJsZSA9IDE7Cgl9IGVsc2UgewoJCXN0LT5jaGlwX2NvbmZpZy5hY2Ns X2VuYWJsZSA9IDA7CgkJc3QtPmNoaXBfY29uZmlnLmFjY2xfZmlmb19lbmFibGUgPSAwOwoJfQoJ cmV0dXJuIDA7Cn0KLyoqCiAqICBzZXRfcG93ZXJfbXB1MzA1MCgpIC0gc2V0IHBvd2VyIG9mIG1w dTMwNTAuCiAqICBAc3Q6CURldmljZSBkcml2ZXIgaW5zdGFuY2UuCiAqICBAcG93ZXJfb246ICBv bi9vZmYKICovCmludCBzZXRfcG93ZXJfbXB1MzA1MChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAq c3QsCgl1bnNpZ25lZCBjaGFyIHBvd2VyX29uKQp7CglzdHJ1Y3QgaW52X3JlZ19tYXBfcyAqcmVn OwoJdW5zaWduZWQgY2hhciBkYXRhLCBwOwoJaW50IHJlc3VsdDsKCXJlZyA9ICZzdC0+cmVnOwoJ aWYgKHBvd2VyX29uKQoJCWRhdGEgPSAwOwoJZWxzZSB7CgkJaWYgKHN0LT5tcHVfc2xhdmUpIHsK CQkJcmVzdWx0ID0gc3QtPm1wdV9zbGF2ZS0+c3VzcGVuZChzdCk7CgkJCWlmIChyZXN1bHQpCgkJ CQlyZXR1cm4gcmVzdWx0OwoJCX0KCQlkYXRhID0gQklUX1NMRUVQOwoJfQoJaWYgKHN0LT5jaGlw X2NvbmZpZy5neXJvX2VuYWJsZSkgewoJCXAgPSAoQklUU18zMDUwX1BPV0VSMSB8IElOVl9DTEtf UExMKTsKCQlyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5wd3JfbWdtdF8x LCBkYXRhIHwgcCk7CgkJaWYgKHJlc3VsdCkKCQkJcmV0dXJuIHJlc3VsdDsKCgkJcCA9IChCSVRT XzMwNTBfUE9XRVIyIHwgSU5WX0NMS19QTEwpOwoJCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dy aXRlKHN0LCByZWctPnB3cl9tZ210XzEsIGRhdGEgfCBwKTsKCQlpZiAocmVzdWx0KQoJCQlyZXR1 cm4gcmVzdWx0OwoKCQlwID0gSU5WX0NMS19QTEw7CgkJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVf d3JpdGUoc3QsIHJlZy0+cHdyX21nbXRfMSwgZGF0YSB8IHApOwoJCWlmIChyZXN1bHQpCgkJCXJl dHVybiByZXN1bHQ7CgoJCXN0LT5jaGlwX2NvbmZpZy5jbGtfc3JjID0gSU5WX0NMS19QTEw7Cgl9 IGVsc2UgewoJCWRhdGEgfD0gKEJJVFNfMzA1MF9HWVJPX1NUQU5EQlkgfCBJTlZfQ0xLX0lOVEVS TkFMKTsKCQlyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5wd3JfbWdtdF8x LCBkYXRhKTsKCQlpZiAocmVzdWx0KQoJCQlyZXR1cm4gcmVzdWx0OwoJCXN0LT5jaGlwX2NvbmZp Zy5jbGtfc3JjID0gSU5WX0NMS19JTlRFUk5BTDsKCX0KCWlmIChwb3dlcl9vbikgewoJCW1zbGVl cChQT1dFUl9VUF9USU1FKTsKCQlpZiAoc3QtPm1wdV9zbGF2ZSkgewoJCQlyZXN1bHQgPSBzdC0+ bXB1X3NsYXZlLT5yZXN1bWUoc3QpOwoJCQlpZiAocmVzdWx0KQoJCQkJcmV0dXJuIHJlc3VsdDsK CQl9CgkJc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCA9IDA7Cgl9IGVsc2UKCQlzdC0+Y2hpcF9j b25maWcuaXNfYXNsZWVwID0gMTsKCXJldHVybiAwOwp9Ci8qKgogKiAgQH0KICovCgoAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpbnZfbXB1X2NvcmUuYwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAyMDM0MDEAMTE3NTQy NDQyMzYAMDEyMzMzACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AHVzdGFyICAAZ2dhbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnZ2FvAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qCiogQ29weXJpZ2h0IChDKSAyMDEyIEludmVu c2Vuc2UsIEluYy4KKgoqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAoqIG1heSBiZSBjb3BpZWQs IGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCioKKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgoqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgoqCiovCgovKioKICogIEBhZGR0b2dyb3VwICBEUklWRVJTCiAqICBAYnJpZWYgICAgICAg SGFyZHdhcmUgZHJpdmVycy4KICoKICogIEB7CiAqICAgICAgQGZpbGUgICAgaW52X2d5cm8uYwog KiAgICAgIEBicmllZiAgIEEgc3lzZnMgZGV2aWNlIGRyaXZlciBmb3IgSW52ZW5zZW5zZSBkZXZp Y2VzCiAqICAgICAgQGRldGFpbHMgVGhpcyBkcml2ZXIgY3VycmVudGx5IHdvcmtzIGZvciB0aGUg SVRHMzUwMCwgTVBVNjA1MCwgTVBVOTE1MAogKiAgICAgICAgICAgICAgIE1QVTMwNTAKICovCgoj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRl IDxsaW51eC9zbGFiLmg+CiNpbmNsdWRlIDxsaW51eC9pMmMuaD4KI2luY2x1ZGUgPGxpbnV4L2Vy ci5oPgojaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiNp bmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiNpbmNsdWRlIDxsaW51eC9pcnEuaD4KI2luY2x1ZGUg PGxpbnV4L2ludGVycnVwdC5oPgojaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KI2luY2x1ZGUgPGxp bnV4L3BvbGwuaD4KI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KI2luY2x1ZGUgPGxpbnV4 L3NwaW5sb2NrLmg+CiNpbmNsdWRlICJpbnZfbXB1X2lpby5oIgojaW5jbHVkZSAiLi4vLi4vc3lz ZnMuaCIKc3RhdGljIHZvaWQgaW52X3NldHVwX3JlZyhzdHJ1Y3QgaW52X3JlZ19tYXBfcyAqcmVn KQp7CglyZWctPndob19hbV9pCQk9IDB4NzU7CglyZWctPnNhbXBsZV9yYXRlX2Rpdgk9IDB4MTk7 CglyZWctPmxwZgkJPSAweDFBOwoJcmVnLT5wcm9kdWN0X2lkCQk9IDB4MEM7CglyZWctPmJhbmtf c2VsCQk9IDB4NkQ7CglyZWctPnVzZXJfY3RybAkJPSAweDZBOwoJcmVnLT5maWZvX2VuCQk9IDB4 MjM7CglyZWctPmd5cm9fY29uZmlnCT0gMHgxQjsKCXJlZy0+YWNjbF9jb25maWcJPSAweDFDOwoJ cmVnLT5maWZvX2NvdW50X2gJPSAweDcyOwoJcmVnLT5maWZvX3JfdwkJPSAweDc0OwoJcmVnLT5y YXdfZ3lybwkJPSAweDQzOwoJcmVnLT5yYXdfYWNjbAkJPSAweDNCOwoJcmVnLT50ZW1wZXJhdHVy ZQk9IDB4NDE7CglyZWctPmludF9lbmFibGUJCT0gMHgzODsKCXJlZy0+aW50X3N0YXR1cwkJPSAw eDNBOwoJcmVnLT5wd3JfbWdtdF8xCQk9IDB4NkI7CglyZWctPnB3cl9tZ210XzIJCT0gMHg2QzsK CXJlZy0+bWVtX3N0YXJ0X2FkZHIJPSAweDZFOwoJcmVnLT5tZW1fcl93CQk9IDB4NkY7CglyZWct PnByZ21fc3RydF9hZGRyaAk9IDB4NzA7Cn07CnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW52X2h3X3Mg aHdfaW5mb1tJTlZfTlVNX1BBUlRTXSA9IHsKCXsxMTksICJJVEczNTAwIn0sCgl7IDYzLCAiTVBV MzA1MCJ9LAoJezExNywgIk1QVTYwNTAifSwKCXsxMTgsICJNUFU5MTUwIn0KfTsKLyoqCiAqICBp bnZfaTJjX3JlYWQoKSAtIFJlYWQgb25lIG9yIG1vcmUgYnl0ZXMgZnJvbSB0aGUgZGV2aWNlIHJl Z2lzdGVycy4KICogIEBzdDoJRGV2aWNlIGRyaXZlciBpbnN0YW5jZS4KICogIEByZWc6CUZpcnN0 IGRldmljZSByZWdpc3RlciB0byBiZSByZWFkIGZyb20uCiAqICBAbGVuZ3RoOglOdW1iZXIgb2Yg Ynl0ZXMgdG8gcmVhZC4KICogIEBkYXRhOglEYXRhIHJlYWQgZnJvbSBkZXZpY2UuCiAqICBOT1RF OiBUaGUgc2xhdmUgcmVnaXN0ZXIgd2lsbCBub3QgaW5jcmVtZW50IHdoZW4gcmVhZGluZyBmcm9t IHRoZSBGSUZPLgogKi8KaW50IGludl9pMmNfcmVhZF9iYXNlKHN0cnVjdCBpbnZfZ3lyb19zdGF0 ZV9zICpzdCwgdW5zaWduZWQgc2hvcnQgaTJjX2FkZHIsCgl1bnNpZ25lZCBjaGFyIHJlZywgdW5z aWduZWQgc2hvcnQgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyICpkYXRhKQp7CglzdHJ1Y3QgaTJjX21z ZyBtc2dzWzJdOwoJaW50IHJlczsKCglpZiAoIWRhdGEpCgkJcmV0dXJuIC1FSU5WQUw7CgoJbXNn c1swXS5hZGRyID0gaTJjX2FkZHI7Cgltc2dzWzBdLmZsYWdzID0gMDsJLyogd3JpdGUgKi8KCW1z Z3NbMF0uYnVmID0gJnJlZzsKCW1zZ3NbMF0ubGVuID0gMTsKCgltc2dzWzFdLmFkZHIgPSBpMmNf YWRkcjsKCW1zZ3NbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKCW1zZ3NbMV0uYnVmID0gZGF0YTsKCW1z Z3NbMV0ubGVuID0gbGVuZ3RoOwoKCXJlcyA9IGkyY190cmFuc2ZlcihzdC0+c2xfaGFuZGxlLCBt c2dzLCAyKTsKCWlmIChyZXMgPCAyKSB7CgkJaWYgKHJlcyA+PSAwKQoJCQlyZXMgPSAtRUlPOwoJ CXJldHVybiByZXM7Cgl9IGVsc2UKCQlyZXR1cm4gMDsKfQoKLyoqCiAqICBpbnZfaTJjX3Npbmds ZV93cml0ZSgpIC0gV3JpdGUgYSBieXRlIHRvIGEgZGV2aWNlIHJlZ2lzdGVyLgogKiAgQHN0OglE ZXZpY2UgZHJpdmVyIGluc3RhbmNlLgogKiAgQHJlZzoJRGV2aWNlIHJlZ2lzdGVyIHRvIGJlIHdy aXR0ZW4gdG8uCiAqICBAZGF0YToJQnl0ZSB0byB3cml0ZSB0byBkZXZpY2UuCiAqLwppbnQgaW52 X2kyY19zaW5nbGVfd3JpdGVfYmFzZShzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsCgl1bnNp Z25lZCBzaG9ydCBpMmNfYWRkciwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgZGF0 YSkKewoJdW5zaWduZWQgY2hhciB0bXBbMl07CglzdHJ1Y3QgaTJjX21zZyBtc2c7CglpbnQgcmVz OwoKCXRtcFswXSA9IHJlZzsKCXRtcFsxXSA9IGRhdGE7CgoJbXNnLmFkZHIgPSBpMmNfYWRkcjsK CW1zZy5mbGFncyA9IDA7CS8qIHdyaXRlICovCgltc2cuYnVmID0gdG1wOwoJbXNnLmxlbiA9IDI7 CgoJLypwcmludGsoS0VSTl9FUlIgIldTJTAyWCUwMlglMDJYXG4iLCBpMmNfYWRkciwgcmVnLCBk YXRhKTsqLwoJcmVzID0gaTJjX3RyYW5zZmVyKHN0LT5zbF9oYW5kbGUsICZtc2csIDEpOwoJaWYg KHJlcyA8IDEpIHsKCQlpZiAocmVzID09IDApCgkJCXJlcyA9IC1FSU87CgkJcmV0dXJuIHJlczsK CX0gZWxzZQoJCXJldHVybiAwOwp9CnN0YXRpYyBpbnQgc2V0X3Bvd2VyX2l0ZyhzdHJ1Y3QgaW52 X2d5cm9fc3RhdGVfcyAqc3QsCgl1bnNpZ25lZCBjaGFyIHBvd2VyX29uKQp7CglzdHJ1Y3QgaW52 X3JlZ19tYXBfcyAqcmVnOwoJdW5zaWduZWQgY2hhciBkYXRhOwoJaW50IHJlc3VsdDsKCglyZWcg PSAmc3QtPnJlZzsKCWlmIChwb3dlcl9vbikKCQlkYXRhID0gMDsKCWVsc2UKCQlkYXRhID0gQklU X1NMRUVQOwoJaWYgKHN0LT5jaGlwX2NvbmZpZy5scGFfbW9kZSkKCQlkYXRhIHw9IEJJVF9DWUNM RTsKCWlmIChzdC0+Y2hpcF9jb25maWcuZ3lyb19lbmFibGUpIHsKCQlyZXN1bHQgPSBpbnZfaTJj X3NpbmdsZV93cml0ZShzdCwKCQkJcmVnLT5wd3JfbWdtdF8xLCBkYXRhIHwgSU5WX0NMS19QTEwp OwoJCWlmIChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7CgkJc3QtPmNoaXBfY29uZmlnLmNsa19z cmMgPSBJTlZfQ0xLX1BMTDsKCX0gZWxzZSB7CgkJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3Jp dGUoc3QsCgkJCXJlZy0+cHdyX21nbXRfMSwgZGF0YSB8IElOVl9DTEtfSU5URVJOQUwpOwoJCWlm IChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7CgkJc3QtPmNoaXBfY29uZmlnLmNsa19zcmMgPSBJ TlZfQ0xLX0lOVEVSTkFMOwoJfQoKCWlmIChwb3dlcl9vbikgewoJCW1zbGVlcChQT1dFUl9VUF9U SU1FKTsKCQlkYXRhID0gMDsKCQlpZiAoMCA9PSBzdC0+Y2hpcF9jb25maWcuYWNjbF9lbmFibGUp CgkJCWRhdGEgfD0gQklUX1BXUl9BQ0NMX1NUQlk7CgkJaWYgKDAgPT0gc3QtPmNoaXBfY29uZmln Lmd5cm9fZW5hYmxlKQoJCQlkYXRhIHw9IEJJVF9QV1JfR1lST19TVEJZOwoJCWRhdGEgfD0gKHN0 LT5jaGlwX2NvbmZpZy5scGFfZnJlcSA8PCBMUEFfRlJFUV9TSElGVCk7CgoJCXJlc3VsdCA9IGlu dl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPnB3cl9tZ210XzIsIGRhdGEpOwoJCWlmIChyZXN1 bHQpCgkJCXJldHVybiByZXN1bHQ7CgkJbXNsZWVwKFBPV0VSX1VQX1RJTUUpOwoJCXN0LT5jaGlw X2NvbmZpZy5pc19hc2xlZXAgPSAwOwoJfSBlbHNlCgkJc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVl cCA9IDE7CglyZXR1cm4gMDsKfQovKioKICogIGludl9zZXRfcG93ZXJfc3RhdGUoKSAtIFR1cm4g ZGV2aWNlIG9uL29mZi4KICogIEBzdDoJRGV2aWNlIGRyaXZlciBpbnN0YW5jZS4KICogIEBwb3dl cl9vbjoJMSB0byB0dXJuIG9uLCAwIHRvIHN1c3BlbmQuCiAqLwppbnQgaW52X3NldF9wb3dlcl9z dGF0ZShzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsCgl1bnNpZ25lZCBjaGFyIHBvd2VyX29u KQp7CglpZiAoSU5WX01QVTMwNTAgPT0gc3QtPmNoaXBfdHlwZSkKCQlyZXR1cm4gc2V0X3Bvd2Vy X21wdTMwNTAoc3QsIHBvd2VyX29uKTsKCWVsc2UKCQlyZXR1cm4gc2V0X3Bvd2VyX2l0ZyhzdCwg cG93ZXJfb24pOwoJcmV0dXJuIDA7Cn0KCi8qKgogKiAgaW52X2luaXRfY29uZmlnKCkgLSBJbml0 aWFsaXplIGhhcmR3YXJlLCBkaXNhYmxlIEZJRk8uCiAqICBAaW5kaW9fZGV2OglEZXZpY2UgZHJp dmVyIGluc3RhbmNlLgogKiAgSW5pdGlhbCBjb25maWd1cmF0aW9uOgogKiAgRlNSOiArLy0gMjAw MERQUwogKiAgRExQRjogNDJIegogKiAgRklGTyByYXRlOiA1MEh6CiAqICBDbG9jayBzb3VyY2U6 IEd5cm8gUExMCiAqLwpzdGF0aWMgaW50IGludl9pbml0X2NvbmZpZyhzdHJ1Y3QgaWlvX2RldiAq aW5kaW9fZGV2KQp7CglzdHJ1Y3QgaW52X3JlZ19tYXBfcyAqcmVnOwoJaW50IHJlc3VsdDsKCXN0 cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CgoJaWYgKHN0 LT5jaGlwX2NvbmZpZy5pc19hc2xlZXApCgkJcmV0dXJuIC1FUEVSTTsKCXJlZyA9ICZzdC0+cmVn OwoJcmVzdWx0ID0gc2V0X2ludl9lbmFibGUoaW5kaW9fZGV2LCAwKTsKCWlmIChyZXN1bHQpCgkJ cmV0dXJuIHJlc3VsdDsKCglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5n eXJvX2NvbmZpZywKCQlJTlZfRlNSXzIwMDBEUFMgPDwgR1lST19DT05GSUdfRlNSX1NISUZUKTsK CWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCXN0LT5jaGlwX2NvbmZpZy5mc3IgPSBJTlZf RlNSXzIwMDBEUFM7CgoJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+bHBm LCBJTlZfRklMVEVSXzQySFopOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJc3QtPmNo aXBfY29uZmlnLmxwZiA9IElOVl9GSUxURVJfNDJIWjsKCglyZXN1bHQgPSBpbnZfaTJjX3Npbmds ZV93cml0ZShzdCwgcmVnLT5zYW1wbGVfcmF0ZV9kaXYsCgkJCQkJT05FX0tfSFovSU5JVF9GSUZP X1JBVEUgLSAxKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCXN0LT5jaGlwX2NvbmZp Zy5maWZvX3JhdGUgPSBJTklUX0ZJRk9fUkFURTsKCXN0LT5pcnFfZHVyX3VzICAgICAgICAgICAg PSBJTklUX0RVUl9USU1FOwoJc3QtPmNoaXBfY29uZmlnLmVuYWJsZSA9IDA7CglzdC0+Y2hpcF9j b25maWcuZG1wX29uID0gMDsKCXN0LT5jb21wYXNzX2RpdmlkZXIgPSAwOwoJc3QtPmNvbXBhc3Nf Y291bnRlciA9IDA7CglzdC0+c2VsZl90ZXN0X3J1bl9vbmNlID0gMDsKCXN0LT5jaGlwX2NvbmZp Zy5jb21wYXNzX2VuYWJsZSA9IDA7CglzdC0+Y2hpcF9jb25maWcuZmlybXdhcmVfbG9hZGVkID0g MDsKCXN0LT5jaGlwX2NvbmZpZy5wcm9nX3N0YXJ0X2FkZHIgPSBETVBfU1RBUlRfQUREUjsKCXN0 LT5jaGlwX2NvbmZpZy5neXJvX2VuYWJsZSA9IDE7CglzdC0+Y2hpcF9jb25maWcuZ3lyb19maWZv X2VuYWJsZSA9IDE7CglpZiAoSU5WX0lURzM1MDAgIT0gc3QtPmNoaXBfdHlwZSkgewoJCXN0LT5j aGlwX2NvbmZpZy5hY2NsX2VuYWJsZSA9IDE7CgkJc3QtPmNoaXBfY29uZmlnLmFjY2xfZmlmb19l bmFibGUgPSAxOwoJCXN0LT5jaGlwX2NvbmZpZy5hY2NsX2ZzID0gSU5WX0ZTXzAyRzsKCQlyZXN1 bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5hY2NsX2NvbmZpZywKCQkJKElOVl9G U18wMkcgPDwgQUNDTF9DT05GSUdfRlNSX1NISUZUKSk7CgkJaWYgKHJlc3VsdCkKCQkJcmV0dXJu IHJlc3VsdDsKCQlzdC0+dGFwLm9uID0gMDsKCQlzdC0+dGFwLnRpbWUgPSBJTklUX1RBUF9USU1F OwoJCXN0LT50YXAudGhyZXNoID0gSU5JVF9UQVBfVEhSRVNIT0xEOwoJCXN0LT50YXAubWluX2Nv dW50ID0gSU5JVF9UQVBfTUlOX0NPVU5UOwoJfSBlbHNlIHsKCQlzdC0+Y2hpcF9jb25maWcuYWNj bF9lbmFibGUgPSAwOwoJCXN0LT5jaGlwX2NvbmZpZy5hY2NsX2ZpZm9fZW5hYmxlID0gMDsKCX0K CXJldHVybiAwOwp9Ci8qKgogKiAgaW52X2NvbXBhc3Nfc2NhbGVfc2hvdygpIC0gc2hvdyBjb21w YXNzIHNjYWxlLgogKi8Kc3RhdGljIGludCBpbnZfY29tcGFzc19zY2FsZV9zaG93KHN0cnVjdCBp bnZfZ3lyb19zdGF0ZV9zICpzdCwgaW50ICpzY2FsZSkKewoJaWYgKENPTVBBU1NfSURfQUs4OTc1 ID09IHN0LT5wbGF0X2RhdGEuc2VjX3NsYXZlX2lkKQoJCSpzY2FsZSA9IERBVEFfQUtNODk3NV9T Q0FMRTsKCWVsc2UgaWYgKENPTVBBU1NfSURfQUs4OTcyID09IHN0LT5wbGF0X2RhdGEuc2VjX3Ns YXZlX2lkKQoJCSpzY2FsZSA9IERBVEFfQUtNODk3Ml9TQ0FMRTsKCWVsc2UgaWYgKENPTVBBU1Nf SURfQUs4OTYzID09IHN0LT5wbGF0X2RhdGEuc2VjX3NsYXZlX2lkKQoJCWlmIChzdC0+Y29tcGFz c19zY2FsZSkKCQkJKnNjYWxlID0gREFUQV9BS004OTYzX1NDQUxFMTsKCQllbHNlCgkJCSpzY2Fs ZSA9IERBVEFfQUtNODk2M19TQ0FMRTA7CgllbHNlCgkJcmV0dXJuIC1FSU5WQUw7Cgkqc2NhbGUg Kj0gKDFMIDw8IDE1KTsKCXJldHVybiBJSU9fVkFMX0lOVDsKfQoKLyoqCiAqICBtcHVfcmVhZF9y YXcoKSAtIHJlYWQgcmF3IG1ldGhvZC4KICovCnN0YXRpYyBpbnQgbXB1X3JlYWRfcmF3KHN0cnVj dCBpaW9fZGV2ICppbmRpb19kZXYsCgkJCSAgICAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0 ICpjaGFuLAoJCQkgICAgICBpbnQgKnZhbCwKCQkJICAgICAgaW50ICp2YWwyLAoJCQkgICAgICBs b25nIG1hc2spIHsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICAqc3QgPSBpaW9fcHJpdihpbmRp b19kZXYpOwoJaW50IHJlc3VsdDsKCWlmIChzdC0+Y2hpcF9jb25maWcuaXNfYXNsZWVwKQoJCXJl dHVybiAtRUlOVkFMOwoJc3dpdGNoIChtYXNrKSB7CgljYXNlIDA6CgkJaWYgKGNoYW4tPnR5cGUg PT0gSUlPX0FOR0xfVkVMKSB7CgkJCSp2YWwgPSBzdC0+cmF3X2d5cm9bY2hhbi0+Y2hhbm5lbDIg LSBJSU9fTU9EX1hdOwoJCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CgkJfQoJCWlmIChjaGFuLT50eXBl ID09IElJT19BQ0NFTCkgewoJCQkqdmFsID0gc3QtPnJhd19hY2NlbFtjaGFuLT5jaGFubmVsMiAt IElJT19NT0RfWF07CgkJCXJldHVybiBJSU9fVkFMX0lOVDsKCQl9CgkJaWYgKGNoYW4tPnR5cGUg PT0gSUlPX01BR04pIHsKCQkJKnZhbCA9IHN0LT5yYXdfY29tcGFzc1tjaGFuLT5jaGFubmVsMiAt IElJT19NT0RfWF07CgkJCXJldHVybiBJSU9fVkFMX0lOVDsKCQl9CgkJcmV0dXJuIC1FSU5WQUw7 CgljYXNlIElJT19DSEFOX0lORk9fU0NBTEU6CgkJaWYgKGNoYW4tPnR5cGUgPT0gSUlPX0FOR0xf VkVMKSB7CgkJCSp2YWwgPSAoMSA8PCBzdC0+Y2hpcF9jb25maWcuZnNyKSpHWVJPX0RQU19TQ0FM RTsKCQkJcmV0dXJuIElJT19WQUxfSU5UOwoJCX0KCQlpZiAoY2hhbi0+dHlwZSA9PSBJSU9fQUND RUwpIHsKCQkJKnZhbCA9ICgyIDw8IHN0LT5jaGlwX2NvbmZpZy5hY2NsX2ZzKTsKCQkJcmV0dXJu IElJT19WQUxfSU5UOwoJCX0KCQlpZiAoY2hhbi0+dHlwZSA9PSBJSU9fTUFHTikKCQkJcmV0dXJu IGludl9jb21wYXNzX3NjYWxlX3Nob3coc3QsIHZhbCk7CgkJcmV0dXJuIC1FSU5WQUw7CgljYXNl IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTOgoJCWlmIChzdC0+c2VsZl90ZXN0X3J1bl9vbmNlID09 IDApIHsKCQkJcmVzdWx0ID0gaW52X2RvX3Rlc3Qoc3QsIDAsICBzdC0+Z3lyb19iaWFzLAoJCQkJ c3QtPmFjY2VsX2JpYXMpOwoJCQlpZiAocmVzdWx0KQoJCQkJcmV0dXJuIHJlc3VsdDsKCQkJc3Qt PnNlbGZfdGVzdF9ydW5fb25jZSA9IDE7CgkJfQoKCQlpZiAoY2hhbi0+dHlwZSA9PSBJSU9fQU5H TF9WRUwpIHsKCQkJaWYgKGNoYW4tPmNoYW5uZWwyID09IElJT19NT0RfWCkKCQkJCSp2YWwgPSBz dC0+Z3lyb19iaWFzWzBdOwoJCQlpZiAoY2hhbi0+Y2hhbm5lbDIgPT0gSUlPX01PRF9ZKQoJCQkJ KnZhbCA9IHN0LT5neXJvX2JpYXNbMV07CgkJCWlmIChjaGFuLT5jaGFubmVsMiA9PSBJSU9fTU9E X1opCgkJCQkqdmFsID0gc3QtPmd5cm9fYmlhc1syXTsKCQkJcmV0dXJuIElJT19WQUxfSU5UOwoJ CX0KCQlpZiAoY2hhbi0+dHlwZSA9PSBJSU9fQUNDRUwpIHsKCQkJaWYgKGNoYW4tPmNoYW5uZWwy ID09IElJT19NT0RfWCkKCQkJCSp2YWwgPSBzdC0+YWNjZWxfYmlhc1swXTsKCQkJaWYgKGNoYW4t PmNoYW5uZWwyID09IElJT19NT0RfWSkKCQkJCSp2YWwgPSBzdC0+YWNjZWxfYmlhc1sxXTsKCQkJ aWYgKGNoYW4tPmNoYW5uZWwyID09IElJT19NT0RfWikKCQkJCSp2YWwgPSBzdC0+YWNjZWxfYmlh c1syXTsKCQkJcmV0dXJuIElJT19WQUxfSU5UOwoJCX0KCQlyZXR1cm4gLUVJTlZBTDsKCWRlZmF1 bHQ6CgkJcmV0dXJuIC1FSU5WQUw7Cgl9Cn0KCi8qKgogKiAgaW52X3dyaXRlX2ZzcigpIC0gQ29u ZmlndXJlIHRoZSBneXJvJ3Mgc2NhbGUgcmFuZ2UuCiAqLwpzdGF0aWMgaW50IGludl93cml0ZV9m c3Ioc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0LCBpbnQgZnNyKQp7CglzdHJ1Y3QgaW52X3Jl Z19tYXBfcyAqcmVnOwoJaW50IHJlc3VsdDsKCXJlZyA9ICZzdC0+cmVnOwoJaWYgKChmc3IgPCAw KSB8fCAoZnNyID4gTUFYX0dZUk9fRlNfUEFSQU0pKQoJCXJldHVybiAtRUlOVkFMOwoJaWYgKGZz ciA9PSBzdC0+Y2hpcF9jb25maWcuZnNyKQoJCXJldHVybiAwOwoKCWlmIChJTlZfTVBVMzA1MCA9 PSBzdC0+Y2hpcF90eXBlKSB7CgkJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJl Zy0+bHBmLAoJCQkoZnNyIDw8IEdZUk9fQ09ORklHX0ZTUl9TSElGVCkgfCBzdC0+Y2hpcF9jb25m aWcubHBmKTsKCX0gZWxzZSB7CgkJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJl Zy0+Z3lyb19jb25maWcsCgkJCWZzciA8PCBHWVJPX0NPTkZJR19GU1JfU0hJRlQpOwoJfQoJaWYg KHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJc3QtPmNoaXBfY29uZmlnLmZzciA9IGZzcjsKCXJl dHVybiAwOwp9CgovKioKICogIGludl93cml0ZV9hY2NlbF9mcygpIC0gQ29uZmlndXJlIHRoZSBh Y2NlbGVyb21ldGVyJ3Mgc2NhbGUgcmFuZ2UuCiAqLwpzdGF0aWMgaW50IGludl93cml0ZV9hY2Nl bF9mcyhzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsIGludCBmcykKewoJaW50IHJlc3VsdDsK CXN0cnVjdCBpbnZfcmVnX21hcF9zICpyZWc7CglyZWcgPSAmc3QtPnJlZzsKCglpZiAoZnMgPCAw IHx8IGZzID4gTUFYX0FDQ0xfRlNfUEFSQU0pCgkJcmV0dXJuIC1FSU5WQUw7CglpZiAoZnMgPT0g c3QtPmNoaXBfY29uZmlnLmFjY2xfZnMpCgkJcmV0dXJuIDA7CglpZiAoSU5WX01QVTMwNTAgPT0g c3QtPmNoaXBfdHlwZSkgewoJCXJlc3VsdCA9IHN0LT5tcHVfc2xhdmUtPnNldF9mcyhzdCwgZnMp OwoJCWlmIChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7Cgl9IGVsc2UgewoJCXJlc3VsdCA9IGlu dl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPmFjY2xfY29uZmlnLAoJCQkJKGZzIDw8IEFDQ0xf Q09ORklHX0ZTUl9TSElGVCkpOwoJCWlmIChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7Cgl9Cgkv KiByZXNldCBmaWZvIGJlY2F1c2UgdGhlIGRhdGEgY291bGQgYmUgbWl4ZWQgd2l0aCBvbGQgYmFk IGRhdGEgKi8KCXN0LT5jaGlwX2NvbmZpZy5hY2NsX2ZzID0gZnM7CglyZXR1cm4gMDsKfQovKioK ICogIGludl93cml0ZV9jb21wYXNzX3NjYWxlKCkgLSBDb25maWd1cmUgdGhlIGNvbXBhc3MncyBz Y2FsZSByYW5nZS4KICovCnN0YXRpYyBpbnQgaW52X3dyaXRlX2NvbXBhc3Nfc2NhbGUoc3RydWN0 IGludl9neXJvX3N0YXRlX3MgICpzdCwgaW50IGRhdGEpCnsKCWNoYXIgZCwgZW47CglpbnQgcmVz dWx0OwoJaWYgKENPTVBBU1NfSURfQUs4OTYzICE9IHN0LT5wbGF0X2RhdGEuc2VjX3NsYXZlX2lk KQoJCXJldHVybiAwOwoJaWYgKGRhdGEpCgkJZW4gPSAxOwoJZWxzZQoJCWVuID0gMDsKCWlmIChz dC0+Y29tcGFzc19zY2FsZSA9PSBlbikKCQlyZXR1cm4gMDsKCWQgPSAoMSB8IChzdC0+Y29tcGFz c19zY2FsZSA8PCBBS004OTYzX1NDQUxFX1NISUZUKSk7CglyZXN1bHQgPSBpbnZfaTJjX3Npbmds ZV93cml0ZShzdCwgUkVHX0kyQ19TTFYxX0RPLCBkKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJl c3VsdDsKCXN0LT5jb21wYXNzX3NjYWxlID0gZW47CglyZXR1cm4gMDsKCn0KCi8qKgogKiAgbXB1 X3dyaXRlX3JhdygpIC0gd3JpdGUgcmF3IG1ldGhvZC4KICovCnN0YXRpYyBpbnQgbXB1X3dyaXRl X3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAoJCQkgICAgICAgc3RydWN0IGlpb19jaGFu X3NwZWMgY29uc3QgKmNoYW4sCgkJCSAgICAgICBpbnQgdmFsLAoJCQkgICAgICAgaW50IHZhbDIs CgkJCSAgICAgICBsb25nIG1hc2spIHsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICAqc3QgPSBp aW9fcHJpdihpbmRpb19kZXYpOwoJaW50IHJlc3VsdDsKCWlmIChzdC0+Y2hpcF9jb25maWcuaXNf YXNsZWVwKQoJCXJldHVybiAtRVBFUk07Cglzd2l0Y2ggKG1hc2spIHsKCWNhc2UgSUlPX0NIQU5f SU5GT19TQ0FMRToKCQlyZXN1bHQgPSAtRUlOVkFMOwoJCWlmIChjaGFuLT50eXBlID09IElJT19B TkdMX1ZFTCkKCQkJcmVzdWx0ID0gaW52X3dyaXRlX2ZzcihzdCwgdmFsKTsKCQlpZiAoY2hhbi0+ dHlwZSA9PSBJSU9fQUNDRUwpCgkJCXJlc3VsdCA9IGludl93cml0ZV9hY2NlbF9mcyhzdCwgdmFs KTsKCQlpZiAoY2hhbi0+dHlwZSA9PSBJSU9fTUFHTikKCQkJcmVzdWx0ID0gaW52X3dyaXRlX2Nv bXBhc3Nfc2NhbGUoc3QsIHZhbCk7CgkJcmV0dXJuIHJlc3VsdDsKCWRlZmF1bHQ6CgkJcmV0dXJu IC1FSU5WQUw7Cgl9CglyZXR1cm4gMDsKfQoKLyoqCiAqICBpbnZfc2V0X2xwZigpIC0gc2V0IGxv dyBwYXNzIGZpbGVyIGJhc2VkIG9uIGZpZm8gcmF0ZS4KICovCnN0YXRpYyBpbnQgaW52X3NldF9s cGYoc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0LCBpbnQgcmF0ZSkKewoJY29uc3Qgc2hvcnQg aHpbXSA9IHsxODgsIDk4LCA0MiwgMjAsIDEwLCA1fTsKCWNvbnN0IGludCAgIGRbXSA9IHtJTlZf RklMVEVSXzE4OEhaLCBJTlZfRklMVEVSXzk4SFosCgkJCUlOVl9GSUxURVJfNDJIWiwgSU5WX0ZJ TFRFUl8yMEhaLAoJCQlJTlZfRklMVEVSXzEwSFosIElOVl9GSUxURVJfNUhafTsKCWludCBpLCBo LCBkYXRhLCByZXN1bHQ7CglzdHJ1Y3QgaW52X3JlZ19tYXBfcyAqcmVnOwoJcmVnID0gJnN0LT5y ZWc7CgloID0gKHJhdGUgPj4gMSk7CglpID0gMDsKCXdoaWxlICgoaCA8IGh6W2ldKSAmJiAoaSA8 IEFSUkFZX1NJWkUoZCkpKQoJCWkrKzsKCWlmIChpID09IEFSUkFZX1NJWkUoZCkpCgkJaSAtPSAx OwoJZGF0YSA9IGRbaV07CglpZiAoSU5WX01QVTMwNTAgPT0gc3QtPmNoaXBfdHlwZSkgewoJCWlm IChzdC0+bXB1X3NsYXZlICE9IE5VTEwpIHsKCQkJcmVzdWx0ID0gc3QtPm1wdV9zbGF2ZS0+c2V0 X2xwZihzdCwgcmF0ZSk7CgkJCWlmIChyZXN1bHQpCgkJCQlyZXR1cm4gcmVzdWx0OwoJCX0KCQly ZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5scGYsIGRhdGEgfAoJCQkoc3Qt PmNoaXBfY29uZmlnLmZzciA8PCBHWVJPX0NPTkZJR19GU1JfU0hJRlQpKTsKCQlpZiAocmVzdWx0 KQoJCQlyZXR1cm4gcmVzdWx0OwoJfSBlbHNlCgkJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3Jp dGUoc3QsIHJlZy0+bHBmLCBkYXRhKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCXN0 LT5jaGlwX2NvbmZpZy5scGYgPSBkYXRhOwoJcmV0dXJuIDA7Cn0KCi8qKgogKiAgaW52X2ZpZm9f cmF0ZV9zdG9yZSgpIC0gU2V0IGZpZm8gcmF0ZS4KICovCnN0YXRpYyBzc2l6ZV90IGludl9maWZv X3JhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAoJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQp7Cgl1bnNpZ25lZCBsb25nIGZp Zm9fcmF0ZTsKCXVuc2lnbmVkIGNoYXIgZGF0YTsKCWludCByZXN1bHQ7CglzdHJ1Y3QgaW52X2d5 cm9fc3RhdGVfcyAqc3Q7CglzdHJ1Y3QgaW52X3JlZ19tYXBfcyAqcmVnOwoJc3RydWN0IGlpb19k ZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwoJc3QgPSBpaW9fcHJpdihpbmRp b19kZXYpOwoJcmVnID0gJnN0LT5yZWc7CgoJaWYgKHN0LT5jaGlwX2NvbmZpZy5pc19hc2xlZXAp CgkJcmV0dXJuIC1FUEVSTTsKCWlmIChrc3RydG91bChidWYsIDEwLCAmZmlmb19yYXRlKSkKCQly ZXR1cm4gLUVJTlZBTDsKCWlmICgoZmlmb19yYXRlIDwgTUlOX0ZJRk9fUkFURSkgfHwgKGZpZm9f cmF0ZSA+IE1BWF9GSUZPX1JBVEUpKQoJCXJldHVybiAtRUlOVkFMOwoJaWYgKGZpZm9fcmF0ZSA9 PSBzdC0+Y2hpcF9jb25maWcuZmlmb19yYXRlKQoJCXJldHVybiBjb3VudDsKCWlmIChzdC0+aGFz X2NvbXBhc3MpIHsKCQlkYXRhID0gQ09NUEFTU19SQVRFX1NDQUxFKmZpZm9fcmF0ZS9PTkVfS19I WjsKCQlpZiAoZGF0YSA+IDApCgkJCWRhdGEgLT0gMTsKCQlzdC0+Y29tcGFzc19kaXZpZGVyID0g ZGF0YTsKCQlzdC0+Y29tcGFzc19jb3VudGVyID0gMDsKCQkvKiBJMkNfTVNUX0RMWSBpcyBzZXQg YWNjb3JkaW5nIHRvIHNhbXBsZSByYXRlLAoJCSAgIEFLTSBjYW5ub3QgYmUgcmVhZCBvciBzZXQg YXQgc2FtcGxlIHJhdGUgaGlnaGVyIHRoYW4gMTAwSHoqLwoJCXJlc3VsdCA9IGludl9pMmNfc2lu Z2xlX3dyaXRlKHN0LCBSRUdfSTJDX1NMVjRfQ1RSTCwgZGF0YSk7CgkJaWYgKHJlc3VsdCkKCQkJ cmV0dXJuIHJlc3VsdDsKCX0KCWRhdGEgPSBPTkVfS19IWiAvIGZpZm9fcmF0ZSAtIDE7CglyZXN1 bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5zYW1wbGVfcmF0ZV9kaXYsIGRhdGEp OwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJc3QtPmNoaXBfY29uZmlnLmZpZm9fcmF0 ZSA9IGZpZm9fcmF0ZTsKCXJlc3VsdCA9IGludl9zZXRfbHBmKHN0LCBmaWZvX3JhdGUpOwoJaWYg KHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJc3QtPmlycV9kdXJfdXMgPSAoZGF0YSArIDEpICog T05FX0tfSFo7CglzdC0+bGFzdF9pc3JfdGltZSA9IGlpb19nZXRfdGltZV9ucygpOwoJcmV0dXJu IGNvdW50Owp9Ci8qKgogKiAgaW52X2ZpZm9fcmF0ZV9zaG93KCkgLSBHZXQgdGhlIGN1cnJlbnQg c2FtcGxpbmcgcmF0ZS4KICovCnN0YXRpYyBzc2l6ZV90IGludl9maWZvX3JhdGVfc2hvdyhzdHJ1 Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVm KQp7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cglz dHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJcmV0dXJu IHNwcmludGYoYnVmLCAiJWRcbiIsIHN0LT5jaGlwX2NvbmZpZy5maWZvX3JhdGUpOwp9CgovKioK ICogIGludl9wb3dlcl9zdGF0ZV9zdG9yZSgpIC0gVHVybiBkZXZpY2Ugb24vb2ZmLgogKi8Kc3Rh dGljIHNzaXplX3QgaW52X3Bvd2VyX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu dCkKewoJaW50IHJlc3VsdDsKCXVuc2lnbmVkIGxvbmcgcG93ZXJfc3RhdGU7CglzdHJ1Y3QgaW52 X2d5cm9fc3RhdGVfcyAqc3Q7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9k cnZkYXRhKGRldik7CglzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CglpZiAoa3N0cnRvdWwoYnVm LCAxMCwgJnBvd2VyX3N0YXRlKSkKCQlyZXR1cm4gLUVJTlZBTDsKCWlmICghcG93ZXJfc3RhdGUg PT0gc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCkKCQlyZXR1cm4gY291bnQ7CglyZXN1bHQgPSBp bnZfc2V0X3Bvd2VyX3N0YXRlKHN0LCBwb3dlcl9zdGF0ZSk7CglyZXR1cm4gY291bnQ7Cn0KCi8q KgogKiAgaW52X3Bvd2VyX3N0YXRlX3Nob3coKSAtIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgb24g b3IgaW4gc2xlZXAgbW9kZS4KICovCnN0YXRpYyBzc2l6ZV90IGludl9wb3dlcl9zdGF0ZV9zaG93 KHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFy ICpidWYpCnsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cglp ZiAoc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCkKCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4i KTsKCWVsc2UKCQlyZXR1cm4gc3ByaW50ZihidWYsICIxXG4iKTsKfQoKLyoqCiAqIGludl9maXJt d2FyZV9sb2FkZWRfc3RvcmUoKSAtICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBjaGFuZ2UK ICogICAgICAgICAgICAgICAgICAgICAgICBmaXJtd2FyZSBsb2FkCiAqLwpzdGF0aWMgc3NpemVf dCBpbnZfZmlybXdhcmVfbG9hZGVkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKewoJ c3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwoJc3RydWN0 IGludl9neXJvX3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCXVuc2lnbmVkIGxv bmcgZGF0YSwgcmVzdWx0OwoJcmVzdWx0ID0ga3N0cnRvdWwoYnVmLCAxMCwgJmRhdGEpOwoJaWYg KHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJaWYgKGRhdGEgIT0gMCkKCQlyZXR1cm4gLUVJTlZB TDsKCXN0LT5jaGlwX2NvbmZpZy5maXJtd2FyZV9sb2FkZWQgPSAwOwoJc3QtPmNoaXBfY29uZmln LmRtcF9vbiA9IDA7CglyZXR1cm4gY291bnQ7Cn0KLyoqCiAqIGludl9maXJtd2FyZV9sb2FkZWRf c2hvdygpIC0gIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHNob3cgY3VycmVudAogKiAgICAg ICAgICAgICAgICAgICAgICAgIGZpcm13YXJlIGxvYWQgc3RhdHVzCiAqLwpzdGF0aWMgc3NpemVf dCBpbnZfZmlybXdhcmVfbG9hZGVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAoJc3RydWN0IGRl dmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJc3RydWN0IGlpb19kZXYgKmluZGlv X2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwoJc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0 ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCglyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3Qt PmNoaXBfY29uZmlnLmZpcm13YXJlX2xvYWRlZCk7Cn0KCi8qKgogKiAgaW52X2xwYV9tb2RlX3N0 b3JlKCkgLSBzdG9yZSBjdXJyZW50IGxvdyBwb3dlciBzZXR0aW5ncwogKi8Kc3RhdGljIHNzaXpl X3QgaW52X2xwYV9tb2RlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKewoJc3RydWN0 IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwoJc3RydWN0IGludl9n eXJvX3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCXVuc2lnbmVkIGxvbmcgcmVz dWx0LCBscGFfbW9kZTsKCXVuc2lnbmVkIGNoYXIgZDsKCXN0cnVjdCBpbnZfcmVnX21hcF9zICpy ZWc7CglpZiAoc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCkKCQlyZXR1cm4gLUVQRVJNOwoJcmVz dWx0ID0ga3N0cnRvdWwoYnVmLCAxMCwgJmxwYV9tb2RlKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJu IHJlc3VsdDsKCglyZWcgPSAmc3QtPnJlZzsKCXJlc3VsdCA9IGludl9pMmNfcmVhZChzdCwgcmVn LT5wd3JfbWdtdF8xLCAxLCAmZCk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglkICY9 IH5CSVRfQ1lDTEU7CglpZiAobHBhX21vZGUpCgkJZCB8PSBCSVRfQ1lDTEU7CglyZXN1bHQgPSBp bnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5wd3JfbWdtdF8xLCBkKTsKCWlmIChyZXN1bHQp CgkJcmV0dXJuIHJlc3VsdDsKCXN0LT5jaGlwX2NvbmZpZy5scGFfbW9kZSA9IGxwYV9tb2RlOwoJ cmV0dXJuIGNvdW50Owp9Ci8qKgogKiAgaW52X2xwYV9tb2RlX3Nob3coKSAtIHNob3cgY3VycmVu dCBsb3cgcG93ZXIgc2V0dGluZ3MKICovCnN0YXRpYyBzc2l6ZV90IGludl9scGFfbW9kZV9zaG93 KHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFy ICpidWYpCnsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cgly ZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3QtPmNoaXBfY29uZmlnLmxwYV9tb2RlKTsKfQoK LyoqCiAqICBpbnZfbHBhX2ZyZXFfc3RvcmUoKSAtIHN0b3JlIGN1cnJlbnQgbG93IHBvd2VyIGZy ZXF1ZW5jeSBzZXR0aW5nLgogKi8Kc3RhdGljIHNzaXplX3QgaW52X2xwYV9mcmVxX3N0b3JlKHN0 cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBj aGFyICpidWYsIHNpemVfdCBjb3VudCkKewoJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwoJc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0ID0gaWlvX3By aXYoaW5kaW9fZGV2KTsKCXVuc2lnbmVkIGxvbmcgcmVzdWx0LCBscGFfZnJlcTsKCXVuc2lnbmVk IGNoYXIgZDsKCXN0cnVjdCBpbnZfcmVnX21hcF9zICpyZWc7CglpZiAoc3QtPmNoaXBfY29uZmln LmlzX2FzbGVlcCkKCQlyZXR1cm4gLUVQRVJNOwoJcmVzdWx0ID0ga3N0cnRvdWwoYnVmLCAxMCwg JmxwYV9mcmVxKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCWlmIChscGFfZnJlcSA+ IE1BWF9MUEFfRlJFUV9QQVJBTSkKCQlyZXR1cm4gLUVJTlZBTDsKCXJlZyA9ICZzdC0+cmVnOwoJ cmVzdWx0ID0gaW52X2kyY19yZWFkKHN0LCByZWctPnB3cl9tZ210XzIsIDEsICZkKTsKCWlmIChy ZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCWQgJj0gfkJJVF9MUEFfRlJFUTsKCWQgfD0gKHVuc2ln bmVkIGNoYXIpKGxwYV9mcmVxIDw8IExQQV9GUkVRX1NISUZUKTsKCXJlc3VsdCA9IGludl9pMmNf c2luZ2xlX3dyaXRlKHN0LCByZWctPnB3cl9tZ210XzIsIGQpOwoJaWYgKHJlc3VsdCkKCQlyZXR1 cm4gcmVzdWx0OwoJc3QtPmNoaXBfY29uZmlnLmxwYV9mcmVxID0gbHBhX2ZyZXE7CglyZXR1cm4g Y291bnQ7Cn0KLyoqCiAqICBpbnZfbHBhX2ZyZXFfc2hvdygpIC0gc2hvdyBjdXJyZW50IGxvdyBw b3dlciBmcmVxdWVuY3kgc2V0dGluZwogKi8Kc3RhdGljIHNzaXplX3QgaW52X2xwYV9mcmVxX3No b3coc3RydWN0IGRldmljZSAqZGV2LAoJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNo YXIgKmJ1ZikKewoJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOwoJc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsK CXN3aXRjaCAoc3QtPmNoaXBfY29uZmlnLmxwYV9mcmVxKSB7CgljYXNlIDA6CgkJcmV0dXJuIHNw cmludGYoYnVmLCAiMS4yNVxuIik7CgljYXNlIDE6CgkJcmV0dXJuIHNwcmludGYoYnVmLCAiNVxu Iik7CgljYXNlIDI6CgkJcmV0dXJuIHNwcmludGYoYnVmLCAiMjBcbiIpOwoJY2FzZSAzOgoJCXJl dHVybiBzcHJpbnRmKGJ1ZiwgIjQwXG4iKTsKCWRlZmF1bHQ6CgkJcmV0dXJuIHNwcmludGYoYnVm LCAiMFxuIik7Cgl9Cn0KLyoqCiAqIGludl9kbXBfb25fc3RvcmUoKSAtICBjYWxsaW5nIHRoaXMg ZnVuY3Rpb24gd2lsbCBzdG9yZSBjdXJyZW50IGRtcCBvbgogKi8Kc3RhdGljIHNzaXplX3QgaW52 X2RtcF9vbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0 ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCnsKCXVuc2lnbmVkIGludCBy ZXN1bHQsIGRhdGE7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3Q7CglzdHJ1Y3QgaWlvX2Rl diAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CglzdCA9IGlpb19wcml2KGluZGlv X2Rldik7CgoJaWYgKHN0LT5jaGlwX2NvbmZpZy5pc19hc2xlZXApCgkJcmV0dXJuIC1FUEVSTTsK CWlmICgwID09IHN0LT5jaGlwX2NvbmZpZy5maXJtd2FyZV9sb2FkZWQpCgkJcmV0dXJuIC1FUEVS TTsKCXJlc3VsdCA9IGtzdHJ0b3VsKGJ1ZiwgMTAsIChsb25nIHVuc2lnbmVkIGludCAqKSZkYXRh KTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCWlmIChkYXRhKQoJCXN0LT5jaGlwX2Nv bmZpZy5kbXBfb24gPSAxOwoJZWxzZQoJCXN0LT5jaGlwX2NvbmZpZy5kbXBfb24gPSAwOwoKCXJl dHVybiBjb3VudDsKfQovKioKICogaW52X2RtcF9vbl9zaG93KCkgLSAgY2FsbGluZyB0aGlzIGZ1 bmN0aW9uIHdpbGwgc2hvdyBjdXJyZW50IGRtcF9vbgogKi8Kc3RhdGljIHNzaXplX3QgaW52X2Rt cF9vbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICph dHRyLCBjaGFyICpidWYpCnsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdDsKCXN0cnVjdCBp aW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0ID0gaWlvX3ByaXYo aW5kaW9fZGV2KTsKCglyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3QtPmNoaXBfY29uZmln LmRtcF9vbik7Cn0KLyoqCiAqIGludl9vcmllbnRhdGlvbl9vbl9zdG9yZSgpIC0gIGNhbGxpbmcg dGhpcyBmdW5jdGlvbiB3aWxsIHN0b3JlCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY3VycmVudCBvcmllbnRhdGlvbiBvbgogKi8Kc3RhdGljIHNzaXplX3QgaW52X29yaWVudGF0 aW9uX29uX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRl ICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKewoJdW5zaWduZWQgaW50IHJl c3VsdCwgZGF0YSwgZW47CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3Q7CglzdHJ1Y3QgaWlv X2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CglzdCA9IGlpb19wcml2KGlu ZGlvX2Rldik7CgoJaWYgKHN0LT5jaGlwX2NvbmZpZy5pc19hc2xlZXApCgkJcmV0dXJuIC1FUEVS TTsKCWlmICgwID09IHN0LT5jaGlwX2NvbmZpZy5maXJtd2FyZV9sb2FkZWQpCgkJcmV0dXJuIC1F UEVSTTsKCXJlc3VsdCA9IGtzdHJ0b3VsKGJ1ZiwgMTAsIChsb25nIHVuc2lnbmVkIGludCAqKSZk YXRhKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCWlmIChkYXRhKQoJCWVuID0gMTsK CWVsc2UKCQllbiA9IDA7CglyZXN1bHQgPSBpbnZfZW5hYmxlX29yaWVudGF0aW9uX2RtcChzdCwg ZW4pOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJc3QtPmNoaXBfY29uZmlnLm9yaWVu dGF0aW9uX29uID0gZW47CglyZXR1cm4gY291bnQ7Cn0KLyoqCiAqIGludl9vcmllbnRhdGlvbl9v bl9zaG93KCkgLSAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgc2hvdwogKgkJCQljdXJyZW50 IG9yaWVudGF0aW9uX29uCiAqLwpzdGF0aWMgc3NpemVfdCBpbnZfb3JpZW50YXRpb25fb25fc2hv dyhzdHJ1Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hh ciAqYnVmKQp7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3Q7CglzdHJ1Y3QgaWlvX2RldiAq aW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CglzdCA9IGlpb19wcml2KGluZGlvX2Rl dik7CglyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3QtPmNoaXBfY29uZmlnLm9yaWVudGF0 aW9uX29uKTsKfQoKLyoqCiAqIGludl90YXBfb25fc3RvcmUoKSAtICBjYWxsaW5nIHRoaXMgZnVu Y3Rpb24gd2lsbCBzdG9yZSBjdXJyZW50IHRhcCBvbgogKi8Kc3RhdGljIHNzaXplX3QgaW52X3Rh cF9vbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAq YXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCnsKCXVuc2lnbmVkIGludCByZXN1 bHQsIGRhdGE7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3Q7CglzdHJ1Y3QgaWlvX2RldiAq aW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CglzdCA9IGlpb19wcml2KGluZGlvX2Rl dik7CglpZiAoc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCkKCQlyZXR1cm4gLUVQRVJNOwoJaWYg KDAgPT0gc3QtPmNoaXBfY29uZmlnLmZpcm13YXJlX2xvYWRlZCkKCQlyZXR1cm4gLUVQRVJNOwoJ cmVzdWx0ID0ga3N0cnRvdWwoYnVmLCAxMCwgKGxvbmcgdW5zaWduZWQgaW50ICopJmRhdGEpOwoJ aWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJaWYgKGRhdGEpCgkJc3QtPnRhcC5vbiA9IDE7 CgllbHNlCgkJc3QtPnRhcC5vbiA9IDA7CglyZXN1bHQgPSBpbnZfZW5hYmxlX3RhcF9kbXAoc3Qs IHN0LT50YXAub24pOwoJcmV0dXJuIGNvdW50Owp9Ci8qKgogKiBpbnZfdGFwX29uX3Nob3coKSAt ICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBzaG93IGN1cnJlbnQgdGFwX29uCiAqLwpzdGF0 aWMgc3NpemVfdCBpbnZfdGFwX29uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAoJc3RydWN0IGRl dmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJc3RydWN0IGludl9neXJvX3N0YXRl X3MgKnN0OwoJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp OwoJc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoKCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4i LCBzdC0+dGFwLm9uKTsKfQovKioKICogaW52X3RhcF90aW1lX3N0b3JlKCkgLSAgY2FsbGluZyB0 aGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgY3VycmVudCB0YXAgdGltZQogKi8Kc3RhdGljIHNzaXpl X3QgaW52X3RhcF90aW1lX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKewoJdW5zaWdu ZWQgaW50IHJlc3VsdCwgZGF0YTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdDsKCXN0cnVj dCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0ID0gaWlvX3By aXYoaW5kaW9fZGV2KTsKCWlmIChzdC0+Y2hpcF9jb25maWcuaXNfYXNsZWVwKQoJCXJldHVybiAt RVBFUk07CglpZiAoMCA9PSBzdC0+Y2hpcF9jb25maWcuZmlybXdhcmVfbG9hZGVkKQoJCXJldHVy biAtRVBFUk07CglyZXN1bHQgPSBrc3RydG91bChidWYsIDEwLCAobG9uZyB1bnNpZ25lZCBpbnQg KikmZGF0YSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglyZXN1bHQgPSBpbnZfc2V0 X3RhcF90aW1lX2RtcChzdCwgZGF0YSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7Cglz dC0+dGFwLnRpbWUgPSBkYXRhOwoJcmV0dXJuIGNvdW50Owp9Ci8qKgogKiBpbnZfdGFwX3RpbWVf c2hvdygpIC0gIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHNob3cgY3VycmVudCB0YXAgdGlt ZQogKi8Kc3RhdGljIHNzaXplX3QgaW52X3RhcF90aW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2 LAoJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJc3RydWN0IGlu dl9neXJvX3N0YXRlX3MgKnN0OwoJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwoJc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoKCXJldHVybiBzcHJpbnRm KGJ1ZiwgIiVkXG4iLCBzdC0+dGFwLnRpbWUpOwp9CgovKioKICogaW52X3RhcF9taW5fY291bnRf c3RvcmUoKSAtICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0YXAgY291bnQKICov CnN0YXRpYyBzc2l6ZV90IGludl90YXBfbWluX2NvdW50X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRl diwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVf dCBjb3VudCkKewoJdW5zaWduZWQgaW50IHJlc3VsdCwgZGF0YTsKCXN0cnVjdCBpbnZfZ3lyb19z dGF0ZV9zICpzdDsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKCXN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCWlmIChzdC0+Y2hpcF9jb25maWcuaXNf YXNsZWVwKQoJCXJldHVybiAtRVBFUk07CglpZiAoMCA9PSBzdC0+Y2hpcF9jb25maWcuZmlybXdh cmVfbG9hZGVkKQoJCXJldHVybiAtRVBFUk07CglyZXN1bHQgPSBrc3RydG91bChidWYsIDEwLCAo bG9uZyB1bnNpZ25lZCBpbnQgKikmZGF0YSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7 CglyZXN1bHQgPSBpbnZfc2V0X21pbl90YXBzX2RtcChzdCwgZGF0YSk7CglpZiAocmVzdWx0KQoJ CXJldHVybiByZXN1bHQ7CglzdC0+dGFwLm1pbl9jb3VudCA9IGRhdGE7CglyZXR1cm4gY291bnQ7 Cn0KLyoqCiAqIGludl90YXBfbWluX2NvdW50X3Nob3coKSAtICBjYWxsaW5nIHRoaXMgZnVuY3Rp b24gc2hvdyBtaW5pbXVtIGNvdW50CiAqLwpzdGF0aWMgc3NpemVfdCBpbnZfdGFwX21pbl9jb3Vu dF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LCBjaGFyICpidWYpCnsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdDsKCXN0cnVjdCBpaW9f ZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0ID0gaWlvX3ByaXYoaW5k aW9fZGV2KTsKCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzdC0+dGFwLm1pbl9jb3VudCk7 Cn0KCi8qKgogKiBpbnZfdGFwX3RocmVzaG9sZF9zdG9yZSgpIC0gIGNhbGxpbmcgdGhpcyBmdW5j dGlvbiB3aWxsIHN0b3JlIHRhcCB0aHJlc2hvbGQKICovCnN0YXRpYyBzc2l6ZV90IGludl90YXBf dGhyZXNob2xkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKewoJdW5zaWduZWQgaW50 IHJlc3VsdCwgZGF0YTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdDsKCXN0cnVjdCBpaW9f ZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0ID0gaWlvX3ByaXYoaW5k aW9fZGV2KTsKCWlmIChzdC0+Y2hpcF9jb25maWcuaXNfYXNsZWVwKQoJCXJldHVybiAtRVBFUk07 CglpZiAoMCA9PSBzdC0+Y2hpcF9jb25maWcuZmlybXdhcmVfbG9hZGVkKQoJCXJldHVybiAtRVBF Uk07CglyZXN1bHQgPSBrc3RydG91bChidWYsIDEwLCAobG9uZyB1bnNpZ25lZCBpbnQgKikmZGF0 YSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglyZXN1bHQgPSBpbnZfc2V0X3RhcF90 aHJlc2hvbGRfZG1wKHN0LCBJTlZfVEFQX0FYSVNfWCwgZGF0YSk7CglpZiAocmVzdWx0KQoJCXJl dHVybiByZXN1bHQ7CglyZXN1bHQgPSBpbnZfc2V0X3RhcF90aHJlc2hvbGRfZG1wKHN0LCBJTlZf VEFQX0FYSVNfWSwgZGF0YSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglyZXN1bHQg PSBpbnZfc2V0X3RhcF90aHJlc2hvbGRfZG1wKHN0LCBJTlZfVEFQX0FYSVNfWiwgZGF0YSk7Cglp ZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CgoJc3QtPnRhcC50aHJlc2ggPSBkYXRhOwoJcmV0 dXJuIGNvdW50Owp9Ci8qKgogKiBpbnZfdGFwX3RocmVzaF9zaG93KCkgLSAgY2FsbGluZyB0aGlz IGZ1bmN0aW9uIHNob3cgY3VycmVudCB0YXAgdGhyZXNob2xkCiAqLwpzdGF0aWMgc3NpemVfdCBp bnZfdGFwX3RocmVzaG9sZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCnsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpz dDsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0 ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCglyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3Qt PnRhcC50aHJlc2gpOwp9Ci8qKgogKiAgaW52X2Nsa19zcmNfc2hvdygpIC0gU2hvdyB0aGUgZGV2 aWNlJ3MgY2xvY2sgc291cmNlLgogKi8Kc3RhdGljIHNzaXplX3QgaW52X2Nsa19zcmNfc2hvdyhz dHJ1Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAq YnVmKQp7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7 CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoKCXN3 aXRjaCAoc3QtPmNoaXBfY29uZmlnLmNsa19zcmMpIHsKCWNhc2UgSU5WX0NMS19JTlRFUk5BTDoK CQlyZXR1cm4gc3ByaW50ZihidWYsICJJTlRFUk5BTFxuIik7CgljYXNlIElOVl9DTEtfUExMOgoJ CXJldHVybiBzcHJpbnRmKGJ1ZiwgIkd5cm8gUExMXG4iKTsKCWRlZmF1bHQ6CgkJcmV0dXJuIC1F UEVSTTsKCX0KfQovKioKICogIGludl9yZWdfZHVtcF9zaG93KCkgLSBSZWdpc3RlciBkdW1wIGZv ciB0ZXN0aW5nLgogKiAgVE9ETzogT25seSBmb3IgdGVzdGluZy4KICovCnN0YXRpYyBzc2l6ZV90 IGludl9yZWdfZHVtcF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjaGFyICpidWYpCnsKCWludCBpaTsKCWNoYXIgZGF0YTsKCXN0cnVjdCBp aW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXNzaXplX3QgYnl0ZXNf cHJpbnRlZCA9IDA7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRp b19kZXYpOwoKCWZvciAoaWkgPSAwOyBpaSA8IHN0LT5ody0+bnVtX3JlZzsgaWkrKykgewoJCWlu dl9pMmNfcmVhZChzdCwgaWksIDEsICZkYXRhKTsKCQlieXRlc19wcmludGVkICs9IHNwcmludGYo YnVmK2J5dGVzX3ByaW50ZWQsICIlIzJ4OiAlIzJ4XG4iLAoJCQlpaSwgZGF0YSk7Cgl9CglyZXR1 cm4gYnl0ZXNfcHJpbnRlZDsKfQoKLyoqCiAqIGludl9zZWxmX3Rlc3Rfc2hvdygpIC0gc2VsZiB0 ZXN0IHJlc3VsdC4gMCBmb3IgZmFpbDsgMSBmb3Igc3VjY2Vzcy4KICogICAgICAgICAgICAgICAg ICAgICAgICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCB0cmlnZ2VyIHNlbGYgdGVzdAogKiAg ICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXR1cm4gdGVzdCByZXN1bHQuCiAqLwpzdGF0aWMg c3NpemVfdCBpbnZfc2VsZl90ZXN0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAoJc3RydWN0IGRl dmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJaW50IHJlc3VsdDsKCXN0cnVjdCBp aW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0cnVjdCBpbnZfZ3ly b19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CglpZiAoSU5WX01QVTMwNTAgPT0g c3QtPmNoaXBfdHlwZSkKCQlyZXN1bHQgPSAwOwoJZWxzZQoJCXJlc3VsdCA9IGludl9od19zZWxm X3Rlc3Qoc3QpOwoJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlc3VsdCk7Cn0KLyoqCiAq IGludl9rZXlfc2hvdygpIC0gIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHNob3cgdGhlIGtl eQogKgogKi8Kc3RhdGljIHNzaXplX3QgaW52X2tleV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwK CXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCnsKCXN0cnVjdCBpaW9f ZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXVuc2lnbmVkIGNoYXIgKmtl eTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cglr ZXkgPSBzdC0+cGxhdF9kYXRhLmtleTsKCXJldHVybiBzcHJpbnRmKGJ1ZiwKCSIlMDJ4JTAyeCUw MnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4i LAoJCWtleVswXSwgIGtleVsxXSwgIGtleVsyXSwgIGtleVszXSwKCQlrZXlbNF0sICBrZXlbNV0s ICBrZXlbNl0sICBrZXlbN10sCgkJa2V5WzhdLCAga2V5WzldLCAga2V5WzEwXSwga2V5WzExXSwK CQlrZXlbMTJdLCBrZXlbMTNdLCBrZXlbMTRdLCBrZXlbMTVdKTsKfQovKioKICogaW52X2d5cm9f bWF0cml4X3Nob3coKSAtIHNob3cgb3JpZW50YXRpb24gbWF0cml4CiAqLwpzdGF0aWMgc3NpemVf dCBpbnZfZ3lyb19tYXRyaXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNl X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2 ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CglzaWduZWQgY2hhciAqbTsKCXN0cnVjdCBpbnZfZ3ly b19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CgltID0gc3QtPnBsYXRfZGF0YS5v cmllbnRhdGlvbjsKCXJldHVybiBzcHJpbnRmKGJ1ZiwKCSIlZCwlZCwlZCwlZCwlZCwlZCwlZCwl ZCwlZFxuIiwKCQltWzBdLCAgbVsxXSwgIG1bMl0sICBtWzNdLCBtWzRdLCBtWzVdLCBtWzZdLCBt WzddLCBtWzhdKTsKfQovKioKICogaW52X2FjY2xfbWF0cml4X3Nob3coKSAtIHNob3cgb3JpZW50 YXRpb24gbWF0cml4CiAqLwpzdGF0aWMgc3NpemVfdCBpbnZfYWNjbF9tYXRyaXhfc2hvdyhzdHJ1 Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVm KQp7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cglz aWduZWQgY2hhciAqbTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGlu ZGlvX2Rldik7CglpZiAoc3QtPnBsYXRfZGF0YS5zZWNfc2xhdmVfdHlwZSA9PSBTRUNPTkRBUllf U0xBVkVfVFlQRV9BQ0NFTCkKCQltID0gc3QtPnBsYXRfZGF0YS5zZWNvbmRhcnlfb3JpZW50YXRp b247CgllbHNlCgkJbSA9IHN0LT5wbGF0X2RhdGEub3JpZW50YXRpb247CglyZXR1cm4gc3ByaW50 ZihidWYsCgkiJWQsJWQsJWQsJWQsJWQsJWQsJWQsJWQsJWRcbiIsCgkJbVswXSwgIG1bMV0sICBt WzJdLCAgbVszXSwgbVs0XSwgbVs1XSwgbVs2XSwgbVs3XSwgbVs4XSk7Cn0KLyoqCiAqIGludl9j b21wYXNzX21hdHJpeF9zaG93KCkgLSBzaG93IG9yaWVudGF0aW9uIG1hdHJpeAogKi8Kc3RhdGlj IHNzaXplX3QgaW52X2NvbXBhc3NfbWF0cml4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAoJc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJc3RydWN0IGlpb19kZXYg KmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwoJc2lnbmVkIGNoYXIgKm07CglzdHJ1 Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJaWYgKHN0LT5w bGF0X2RhdGEuc2VjX3NsYXZlX3R5cGUgPT0gU0VDT05EQVJZX1NMQVZFX1RZUEVfQ09NUEFTUykK CQltID0gc3QtPnBsYXRfZGF0YS5zZWNvbmRhcnlfb3JpZW50YXRpb247CgllbHNlCgkJcmV0dXJu IC0xOwoJcmV0dXJuIHNwcmludGYoYnVmLAoJIiVkLCVkLCVkLCVkLCVkLCVkLCVkLCVkLCVkXG4i LAoJCW1bMF0sICBtWzFdLCAgbVsyXSwgIG1bM10sIG1bNF0sIG1bNV0sIG1bNl0sIG1bN10sIG1b OF0pOwp9CgovKioKICogaW52X2ZsaWNrX2xvd2VyX3N0b3JlKCkgLSAgY2FsbGluZyB0aGlzIGZ1 bmN0aW9uIHdpbGwgc3RvcmUgY3VycmVudAogKiAgICAgICAgICAgICAgICAgICAgICAgIGZsaWNr IGxvd2VyIGJvdW5kCiAqLwpzdGF0aWMgc3NpemVfdCBpbnZfZmxpY2tfbG93ZXJfc3RvcmUoc3Ry dWN0IGRldmljZSAqZGV2LAoJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNo YXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQp7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJp dihpbmRpb19kZXYpOwoJaW50IHJlc3VsdCwgZGF0YSwgb3V0OwoJdW5zaWduZWQgY2hhciAqcDsK CWlmIChzdC0+Y2hpcF9jb25maWcuaXNfYXNsZWVwKQoJCXJldHVybiAtRVBFUk07CglyZXN1bHQg PSBrc3RydG9sKGJ1ZiwgMTAsIChsb25nIHVuc2lnbmVkIGludCAqKSZkYXRhKTsKCWlmIChyZXN1 bHQpCgkJcmV0dXJuIHJlc3VsdDsKCW91dCA9IGNwdV90b19iZTMycCgmZGF0YSk7CglwID0gKHVu c2lnbmVkIGNoYXIgKikmb3V0OwoKCXJlc3VsdCA9IG1lbV93X2tleShLRVlfRkxJQ0tfTE9XRVIs IDQsIHApOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJc3QtPmZsaWNrLmxvd2VyID0g ZGF0YTsKCXJldHVybiBjb3VudDsKfQoKLyoqCiAqIGludl9mbGlja19sb3dlcl9zaG93KCkgLSAg Y2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgc2hvdyBjdXJyZW50CiAqICAgICAgICAgICAgICAg ICAgICAgICAgZmxpY2sgbG93ZXIgYm91bmQKICovCnN0YXRpYyBzc2l6ZV90IGludl9mbGlja19s b3dlcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICph dHRyLCBjaGFyICpidWYpCnsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlv X2Rldik7CgoJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHN0LT5mbGljay5sb3dlcik7Cn0K LyoqCiAqIGludl9mbGlja191cHBlcl9zdG9yZSgpIC0gIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3 aWxsIHN0b3JlIGN1cnJlbnQKICogICAgICAgICAgICAgICAgICAgICAgICBmbGljayB1cHBlciBi b3VuZAogKi8Kc3RhdGljIHNzaXplX3QgaW52X2ZsaWNrX3VwcGVyX3N0b3JlKHN0cnVjdCBkZXZp Y2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYs IHNpemVfdCBjb3VudCkKewoJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwoJc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYoaW5kaW9f ZGV2KTsKCXVuc2lnbmVkIGludCByZXN1bHQsIGRhdGEsIG91dDsKCXVuc2lnbmVkIGNoYXIgKnA7 CglpZiAoc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCkKCQlyZXR1cm4gLUVQRVJNOwoJcmVzdWx0 ID0ga3N0cnRvdWwoYnVmLCAxMCwgKGxvbmcgdW5zaWduZWQgaW50ICopJmRhdGEpOwoJaWYgKHJl c3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJb3V0ID0gY3B1X3RvX2JlMzJwKCZkYXRhKTsKCXAgPSAo dW5zaWduZWQgY2hhciAqKSZvdXQ7CglyZXN1bHQgPSBtZW1fd19rZXkoS0VZX0ZMSUNLX1VQUEVS LCA0LCBwKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCXN0LT5mbGljay51cHBlciA9 IGRhdGE7CglyZXR1cm4gY291bnQ7Cn0KCi8qKgogKiBpbnZfZmxpY2tfdXBwZXJfc2hvdygpIC0g IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHNob3cgY3VycmVudAogKiAgICAgICAgICAgICAg ICAgICAgICAgIGZsaWNrIHVwcGVyIGJvdW5kCiAqLwpzdGF0aWMgc3NpemVfdCBpbnZfZmxpY2tf dXBwZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAq YXR0ciwgY2hhciAqYnVmKQp7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9k cnZkYXRhKGRldik7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRp b19kZXYpOwoJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHN0LT5mbGljay51cHBlcik7Cn0K LyoqCiAqIGludl9mbGlja19jb3VudGVyX3N0b3JlKCkgLSAgY2FsbGluZyB0aGlzIGZ1bmN0aW9u IHdpbGwgc3RvcmUgY3VycmVudAogKiAgICAgICAgICAgICAgICAgICAgICAgIGZsaWNrIGNvdW50 ZXIgdmFsdWUKICovCnN0YXRpYyBzc2l6ZV90IGludl9mbGlja19jb3VudGVyX3N0b3JlKHN0cnVj dCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFy ICpidWYsIHNpemVfdCBjb3VudCkKewoJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOwoJc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYo aW5kaW9fZGV2KTsKCXVuc2lnbmVkIGludCByZXN1bHQsIGRhdGEsIG91dDsKCXVuc2lnbmVkIGNo YXIgKnA7CglpZiAoc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCkKCQlyZXR1cm4gLUVQRVJNOwoJ cmVzdWx0ID0ga3N0cnRvdWwoYnVmLCAxMCwgKGxvbmcgdW5zaWduZWQgaW50ICopJmRhdGEpOwoJ aWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJb3V0ID0gY3B1X3RvX2JlMzJwKCZkYXRhKTsK CXAgPSAodW5zaWduZWQgY2hhciAqKSZvdXQ7CglyZXN1bHQgPSBtZW1fd19rZXkoS0VZX0ZMSUNL X0NPVU5URVIsIDQsIHApOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJc3QtPmZsaWNr LmNvdW50ZXIgPSBkYXRhOwoKCXJldHVybiBjb3VudDsKfQoKLyoqCiAqIGludl9mbGlja19jb3Vu dGVyX3Nob3coKSAtICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBzaG93IGN1cnJlbnQKICog ICAgICAgICAgICAgICAgICAgICAgICBmbGljayBjb3VudGVyIHZhbHVlCiAqLwpzdGF0aWMgc3Np emVfdCBpbnZfZmxpY2tfY291bnRlcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCnsKCXN0cnVjdCBpaW9fZGV2ICppbmRp b19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpz dCA9IGlpb19wcml2KGluZGlvX2Rldik7CgoJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHN0 LT5mbGljay5jb3VudGVyKTsKfQoKLyoqCiAqIGludl9mbGlja19pbnRfb25fc3RvcmUoKSAtICBj YWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSBjdXJyZW50CiAqICAgICAgICAgICAgICAg ICAgICAgICAgZmxpY2sgaW50ZXJydXB0IG9uIHZhbHVlCiAqLwpzdGF0aWMgc3NpemVfdCBpbnZf ZmxpY2tfaW50X29uX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKewoJdW5zaWduZWQg bG9uZyByZXN1bHQsIGRhdGE7Cgl1bnNpZ25lZCBjaGFyIGRbNF07CglzdHJ1Y3QgaWlvX2RldiAq aW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVf cyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJaWYgKHN0LT5jaGlwX2NvbmZpZy5pc19hc2xl ZXApCgkJcmV0dXJuIC1FUEVSTTsKCXJlc3VsdCA9IGtzdHJ0b3VsKGJ1ZiwgMTAsICZkYXRhKTsK CWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCWlmIChkYXRhKQoJCS8qIFVzZSBpbnRlcnJ1 cHQgdG8gc2lnbmFsIHdoZW4gZ2VzdHVyZSB3YXMgb2JzZXJ2ZWQgKi8KCQlkWzBdID0gRElORDQw KzQ7CgllbHNlCgkJZFswXSA9IERJTkFBMCs4OwoJcmVzdWx0ID0gbWVtX3dfa2V5KEtFWV9DR05P VElDRV9JTlRSLCAxLCBkKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCXN0LT5mbGlj ay5pbnRfb24gPSBkYXRhOwoJcmV0dXJuIGNvdW50Owp9CgovKioKICogaW52X2ZsaWNrX2ludF9v bl9zaG93KCkgLSAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgc2hvdyBjdXJyZW50CiAqICAg ICAgICAgICAgICAgICAgICAgICAgZmxpY2sgaW50ZXJydXB0IG9uIHZhbHVlCiAqLwpzdGF0aWMg c3NpemVfdCBpbnZfZmxpY2tfaW50X29uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAoJc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJc3RydWN0IGlpb19kZXYgKmlu ZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwoJc3RydWN0IGludl9neXJvX3N0YXRlX3Mg KnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBz dC0+ZmxpY2suaW50X29uKTsKfQovKioKICogaW52X2ZsaWNrX2F4aXNfc3RvcmUoKSAtICBjYWxs aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSBjdXJyZW50CiAqICAgICAgICAgICAgICAgICAg ICAgICAgZmxpY2sgYXhpcyB2YWx1ZQogKi8Kc3RhdGljIHNzaXplX3QgaW52X2ZsaWNrX2F4aXNf c3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAoJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQp7Cgl1bnNpZ25lZCBsb25nIHJlc3VsdCwg ZGF0YTsKCXVuc2lnbmVkIGNoYXIgZFs0XTsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19w cml2KGluZGlvX2Rldik7CglpZiAoc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCkKCQlyZXR1cm4g LUVQRVJNOwoJcmVzdWx0ID0ga3N0cnRvdWwoYnVmLCAxMCwgJmRhdGEpOwoJaWYgKHJlc3VsdCkK CQlyZXR1cm4gcmVzdWx0OwoKCWlmIChkYXRhID09IDApCgkJZFswXSA9IERJTkJDMjsKCWVsc2Ug aWYgKGRhdGEgPT0gMikKCQlkWzJdID0gRElOQkM2OwoJZWxzZQoJCWRbMF0gPSBESU5CQzQ7Cgly ZXN1bHQgPSBtZW1fd19rZXkoS0VZX0NGR19GTElDS19JTiwgMSwgZCk7CglpZiAocmVzdWx0KQoJ CXJldHVybiByZXN1bHQ7CglzdC0+ZmxpY2suYXhpcyA9IGRhdGE7CgoJcmV0dXJuIGNvdW50Owp9 CgovKioKICogaW52X2ZsaWNrX2F4aXNfc2hvdygpIC0gIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3 aWxsIHNob3cgY3VycmVudAogKiAgICAgICAgICAgICAgICAgICAgICAgIGZsaWNrIGF4aXMgdmFs dWUKICovCnN0YXRpYyBzc2l6ZV90IGludl9mbGlja19heGlzX3Nob3coc3RydWN0IGRldmljZSAq ZGV2LAoJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJc3RydWN0 IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwoJc3RydWN0IGludl9n eXJvX3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCXJldHVybiBzcHJpbnRmKGJ1 ZiwgIiVkXG4iLCBzdC0+ZmxpY2suYXhpcyk7Cn0KLyoqCiAqIGludl9mbGlja19tc2dfb25fc3Rv cmUoKSAtICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSBjdXJyZW50CiAqICAgICAg ICAgICAgICAgICAgICAgICAgZmxpY2sgbWVzc2FnZSBvbiB2YWx1ZQogKi8Kc3RhdGljIHNzaXpl X3QgaW52X2ZsaWNrX21zZ19vbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCnsKCXN0 cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0cnVjdCBp bnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cgl1bnNpZ25lZCBpbnQg cmVzdWx0LCBkYXRhLCBvdXQ7Cgl1bnNpZ25lZCBjaGFyICpwOwoJaWYgKHN0LT5jaGlwX2NvbmZp Zy5pc19hc2xlZXApCgkJcmV0dXJuIC1FUEVSTTsKCXJlc3VsdCA9IGtzdHJ0b3VsKGJ1ZiwgMTAs IChsb25nIHVuc2lnbmVkIGludCAqKSZkYXRhKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3Vs dDsKCWlmIChkYXRhKQoJCWRhdGEgPSBEQVRBX01TR19PTjsKCW91dCA9IGNwdV90b19iZTMycCgm ZGF0YSk7CglwID0gKHVuc2lnbmVkIGNoYXIgKikmb3V0OwoJcmVzdWx0ID0gbWVtX3dfa2V5KEtF WV9GTElDS19NU0csIDQsIHApOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJc3QtPmZs aWNrLm1zZ19vbiA9IGRhdGE7CgoJcmV0dXJuIGNvdW50Owp9CgovKioKICogaW52X2ZsaWNrX21z Z19vbl9zaG93KCkgLSAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgc2hvdyBjdXJyZW50CiAq ICAgICAgICAgICAgICAgICAgICAgICAgZmxpY2sgbWVzc2FnZSBvbiB2YWx1ZQogKi8Kc3RhdGlj IHNzaXplX3QgaW52X2ZsaWNrX21zZ19vbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCnsKCXN0cnVjdCBpaW9fZGV2ICpp bmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9z ICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CglyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwg c3QtPmZsaWNrLm1zZ19vbik7Cn0KCi8qKgogKiBpbnZfcGVkb21ldGVyX3N0ZXBzX3N0b3JlKCkg LSAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgY3VycmVudAogKiAgICAgICAgICAg ICAgICAgICAgICAgIHBlZG9tZXRlciBzdGVwcyBpbnRvIE1QVSBtZW1vcnkKICovCnN0YXRpYyBz c2l6ZV90IGludl9wZWRvbWV0ZXJfc3RlcHNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAoJc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50 KQp7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cglz dHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJdW5zaWdu ZWQgaW50IHJlc3VsdCwgZGF0YSwgb3V0OwoJdW5zaWduZWQgY2hhciAqcDsKCWlmIChzdC0+Y2hp cF9jb25maWcuaXNfYXNsZWVwKQoJCXJldHVybiAtRVBFUk07CglyZXN1bHQgPSBrc3RydG91bChi dWYsIDEwLCAobG9uZyB1bnNpZ25lZCBpbnQgKikmZGF0YSk7CglpZiAocmVzdWx0KQoJCXJldHVy biByZXN1bHQ7CgoJb3V0ID0gY3B1X3RvX2JlMzJwKCZkYXRhKTsKCXAgPSAodW5zaWduZWQgY2hh ciAqKSZvdXQ7CglyZXN1bHQgPSBtZW1fd19rZXkoS0VZX0RfUEVEU1REX1NURVBDVFIsIDQsIHAp OwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoKCXJldHVybiBjb3VudDsKfQoKLyoqCiAq IGludl9wZWRvbWV0ZXJfc3RlcHNfc2hvdygpIC0gIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxs IHN0b3JlIGN1cnJlbnQKICogICAgICAgICAgICAgICAgICAgICAgICBwZWRvbWV0ZXIgc3RlcHMg aW50byBNUFUgbWVtb3J5CiAqLwpzdGF0aWMgc3NpemVfdCBpbnZfcGVkb21ldGVyX3N0ZXBzX3No b3coc3RydWN0IGRldmljZSAqZGV2LAoJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNo YXIgKmJ1ZikKewoJaW50IHJlc3VsdCwgZGF0YTsKCXVuc2lnbmVkIGNoYXIgZFs0XTsKCXN0cnVj dCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0cnVjdCBpbnZf Z3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CglpZiAoc3QtPmNoaXBfY29u ZmlnLmlzX2FzbGVlcCkKCQlyZXR1cm4gLUVQRVJNOwoJcmVzdWx0ID0gbXB1X21lbW9yeV9yZWFk KHN0LT5zbF9oYW5kbGUsIHN0LT5pMmNfYWRkciwKCQlpbnZfZG1wX2dldF9hZGRyZXNzKEtFWV9E X1BFRFNURF9TVEVQQ1RSKSwgNCwgZCk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7Cglk YXRhID0gYmUzMl90b19jcHVwKChpbnQgKilkKTsKCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4i LCBkYXRhKTsKfQovKioKICogaW52X3BlZG9tZXRlcl90aW1lX3N0b3JlKCkgLSAgY2FsbGluZyB0 aGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgY3VycmVudAogKiAgICAgICAgICAgICAgICAgICAgICAg IHBlZG9tZXRlciB0aW1lIGludG8gTVBVIG1lbW9yeQogKi8Kc3RhdGljIHNzaXplX3QgaW52X3Bl ZG9tZXRlcl90aW1lX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKewoJc3RydWN0IGlp b19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwoJc3RydWN0IGludl9neXJv X3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCXVuc2lnbmVkIGludCByZXN1bHQs IGRhdGEsIG91dDsKCXVuc2lnbmVkIGNoYXIgKnA7CglpZiAoc3QtPmNoaXBfY29uZmlnLmlzX2Fz bGVlcCkKCQlyZXR1cm4gLUVQRVJNOwoJcmVzdWx0ID0ga3N0cnRvdWwoYnVmLCAxMCwgKGxvbmcg dW5zaWduZWQgaW50ICopJmRhdGEpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoKCW91 dCA9IGNwdV90b19iZTMycCgmZGF0YSk7CglwID0gKHVuc2lnbmVkIGNoYXIgKikmb3V0OwoJcmVz dWx0ID0gbWVtX3dfa2V5KEtFWV9EX1BFRFNURF9USU1FQ1RSLCA0LCBwKTsKCWlmIChyZXN1bHQp CgkJcmV0dXJuIHJlc3VsdDsKCXJldHVybiBjb3VudDsKfQovKioKICogaW52X3BlZG9tZXRlcl90 aW1lX3Nob3coKSAtICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSBjdXJyZW50CiAq ICAgICAgICAgICAgICAgICAgICAgICAgcGVkb21ldGVyIHN0ZXBzIGludG8gTVBVIG1lbW9yeQog Ki8Kc3RhdGljIHNzaXplX3QgaW52X3BlZG9tZXRlcl90aW1lX3Nob3coc3RydWN0IGRldmljZSAq ZGV2LAoJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJaW50IHJl c3VsdCwgZGF0YTsKCXVuc2lnbmVkIGNoYXIgZFs0XTsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19k ZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9 IGlpb19wcml2KGluZGlvX2Rldik7CglpZiAoc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCkKCQly ZXR1cm4gLUVQRVJNOwoJcmVzdWx0ID0gbXB1X21lbW9yeV9yZWFkKHN0LT5zbF9oYW5kbGUsIHN0 LT5pMmNfYWRkciwKCQlpbnZfZG1wX2dldF9hZGRyZXNzKEtFWV9EX1BFRFNURF9USU1FQ1RSKSwg NCwgZCk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglkYXRhID0gYmUzMl90b19jcHVw KChpbnQgKilkKTsKCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhKTsKfQoKLyoqCiAq IGludl9kbXBfZmxpY2tfc2hvdygpIC0gIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHNob3cg ZmxpY2sgZXZlbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZXZlbnQgbXVzdCB1 c2UgcG9sbC4KICovCnN0YXRpYyBzc2l6ZV90IGludl9kbXBfZmxpY2tfc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7Cgly ZXR1cm4gc3ByaW50ZihidWYsICIxXG4iKTsKfQovKioKICogaW52X2RtcF9vcmllbnRfc2hvdygp IC0gIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHNob3cgb3JpZW50YXRpb24KICogICAgICAg ICAgICAgICAgICAgICAgICAgVGhpcyBldmVudCBtdXN0IHVzZSBwb2xsLgogKi8Kc3RhdGljIHNz aXplX3QgaW52X2RtcF9vcmllbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9f ZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3Qg PSBpaW9fcHJpdihpbmRpb19kZXYpOwoJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHN0LT5v cmllbnRfZGF0YSk7Cn0KLyoqCiAqIGludl9kbXBfdGFwX3Nob3coKSAtICBjYWxsaW5nIHRoaXMg ZnVuY3Rpb24gd2lsbCBzaG93IHRhcAogKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGV2 ZW50IG11c3QgdXNlIHBvbGwuCiAqLwpzdGF0aWMgc3NpemVfdCBpbnZfZG1wX3RhcF9zaG93KHN0 cnVjdCBkZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpi dWYpCnsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK CXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CglyZXR1 cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3QtPnRhcF9kYXRhKTsKfQovKioKICogIGludl90ZW1w ZXJhdHVyZV9zaG93KCkgLSBSZWFkIHRlbXBlcmF0dXJlIGRhdGEgZGlyZWN0bHkgZnJvbSByZWdp c3RlcnMuCiAqLwpzdGF0aWMgc3NpemVfdCBpbnZfdGVtcGVyYXR1cmVfc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7Cglz dHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CglzdHJ1Y3Qg aW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJc3RydWN0IGludl9y ZWdfbWFwX3MgKnJlZzsKCWludCByZXN1bHQ7CglzaG9ydCB0ZW1wOwoJbG9uZyBzY2FsZV90OwoJ dW5zaWduZWQgY2hhciBkYXRhWzJdOwoJcmVnID0gJnN0LT5yZWc7CgoJaWYgKHN0LT5jaGlwX2Nv bmZpZy5pc19hc2xlZXApCgkJcmV0dXJuIC1FUEVSTTsKCXJlc3VsdCA9IGludl9pMmNfcmVhZChz dCwgcmVnLT50ZW1wZXJhdHVyZSwgMiwgZGF0YSk7CglpZiAocmVzdWx0KSB7CgkJcHJpbnRrKEtF Uk5fRVJSICJDb3VsZCBub3QgcmVhZCB0ZW1wZXJhdHVyZSByZWdpc3Rlci5cbiIpOwoJCXJldHVy biByZXN1bHQ7Cgl9Cgl0ZW1wID0gKHNpZ25lZCBzaG9ydCkoYmUxNl90b19jcHVwKChzaG9ydCAq KSZkYXRhWzBdKSk7CgoJaWYgKElOVl9NUFUzMDUwID09IHN0LT5jaGlwX3R5cGUpCgkJc2NhbGVf dCA9IE1QVTMwNTBfVEVNUF9PRkZTRVQgKwoJCQlpbnZfcTMwX211bHQoKGxvbmcpdGVtcCA8PCBN UFVfVEVNUF9TSElGVCwKCQkJCU1QVTMwNTBfVEVNUF9TQ0FMRSk7CgllbHNlCgkJc2NhbGVfdCA9 IE1QVTYwNTBfVEVNUF9PRkZTRVQgKwoJCQlpbnZfcTMwX211bHQoKGxvbmcpdGVtcCA8PCBNUFVf VEVNUF9TSElGVCwKCQkJCU1QVTYwNTBfVEVNUF9TQ0FMRSk7CglyZXR1cm4gc3ByaW50ZihidWYs ICIlbGQgJWxsZFxuIiwgc2NhbGVfdCwgaWlvX2dldF90aW1lX25zKCkpOwp9CnN0YXRpYyBpbnQg aW52X3N3aXRjaF9neXJvX2VuZ2luZShzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsIGludCBl bikKewoJc3RydWN0IGludl9yZWdfbWFwX3MgKnJlZzsKCXVuc2lnbmVkIGNoYXIgZGF0YSwgcDsK CWludCByZXN1bHQ7CglyZWcgPSAmc3QtPnJlZzsKCWlmIChJTlZfTVBVMzA1MCA9PSBzdC0+Y2hp cF90eXBlKSB7CgkJaWYgKGVuKSB7CgkJCWRhdGEgPSBJTlZfQ0xLX1BMTDsKCQkJcCA9IChCSVRT XzMwNTBfUE9XRVIxIHwgZGF0YSk7CgkJCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0 LCByZWctPnB3cl9tZ210XzEsIHApOwoJCQlpZiAocmVzdWx0KQoJCQkJcmV0dXJuIHJlc3VsdDsK CQkJcCA9IChCSVRTXzMwNTBfUE9XRVIyIHwgZGF0YSk7CgkJCXJlc3VsdCA9IGludl9pMmNfc2lu Z2xlX3dyaXRlKHN0LCByZWctPnB3cl9tZ210XzEsIHApOwoJCQlpZiAocmVzdWx0KQoJCQkJcmV0 dXJuIHJlc3VsdDsKCQkJcCA9IGRhdGE7CgkJCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRl KHN0LCByZWctPnB3cl9tZ210XzEsIHApOwoJCQlpZiAocmVzdWx0KQoJCQkJcmV0dXJuIHJlc3Vs dDsKCQl9IGVsc2UgewoJCQlwID0gQklUU18zMDUwX0dZUk9fU1RBTkRCWTsKCQkJcmVzdWx0ID0g aW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+cHdyX21nbXRfMSwgcCk7CgkJCWlmIChyZXN1 bHQpCgkJCQlyZXR1cm4gcmVzdWx0OwoJCX0KCX0gZWxzZSB7CgkJcmVzdWx0ID0gaW52X2kyY19y ZWFkKHN0LCByZWctPnB3cl9tZ210XzIsIDEsICZkYXRhKTsKCQlpZiAocmVzdWx0KQoJCQlyZXR1 cm4gcmVzdWx0OwoJCWlmIChlbikKCQkJZGF0YSAmPSAofkJJVF9QV1JfR1lST19TVEJZKTsKCQll bHNlCgkJCWRhdGEgfD0gQklUX1BXUl9HWVJPX1NUQlk7CgkJcmVzdWx0ID0gaW52X2kyY19zaW5n bGVfd3JpdGUoc3QsIHJlZy0+cHdyX21nbXRfMiwgZGF0YSk7CgkJaWYgKHJlc3VsdCkKCQkJcmV0 dXJuIHJlc3VsdDsKCQltc2xlZXAoU0VOU09SX1VQX1RJTUUpOwoJfQoJaWYgKGVuKQoJCXN0LT5j aGlwX2NvbmZpZy5jbGtfc3JjID0gSU5WX0NMS19QTEw7CgllbHNlCgkJc3QtPmNoaXBfY29uZmln LmNsa19zcmMgPSBJTlZfQ0xLX0lOVEVSTkFMOwoKCXJldHVybiAwOwp9CnN0YXRpYyBpbnQgaW52 X3N3aXRjaF9hY2NsX2VuZ2luZShzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsIGludCBlbikK ewoJc3RydWN0IGludl9yZWdfbWFwX3MgKnJlZzsKCXVuc2lnbmVkIGNoYXIgZGF0YTsKCWludCBy ZXN1bHQ7CglyZWcgPSAmc3QtPnJlZzsKCWlmIChJTlZfTVBVMzA1MCA9PSBzdC0+Y2hpcF90eXBl KSB7CgkJaWYgKE5VTEwgPT0gc3QtPm1wdV9zbGF2ZSkKCQkJcmV0dXJuIC1FUEVSTTsKCQlpZiAo ZW4pCgkJCXJlc3VsdCA9IHN0LT5tcHVfc2xhdmUtPnJlc3VtZShzdCk7CgkJZWxzZQoJCQlyZXN1 bHQgPSBzdC0+bXB1X3NsYXZlLT5zdXNwZW5kKHN0KTsKCQlpZiAocmVzdWx0KQoJCQlyZXR1cm4g cmVzdWx0OwoJfSBlbHNlIHsKCQlyZXN1bHQgPSBpbnZfaTJjX3JlYWQoc3QsIHJlZy0+cHdyX21n bXRfMiwgMSwgJmRhdGEpOwoJCWlmIChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7CgkJaWYgKGVu KQoJCQlkYXRhICY9ICh+QklUX1BXUl9BQ0NMX1NUQlkpOwoJCWVsc2UKCQkJZGF0YSB8PSBCSVRf UFdSX0FDQ0xfU1RCWTsKCQlyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5w d3JfbWdtdF8yLCBkYXRhKTsKCQlpZiAocmVzdWx0KQoJCQlyZXR1cm4gcmVzdWx0OwoJCW1zbGVl cChTRU5TT1JfVVBfVElNRSk7Cgl9CglyZXR1cm4gMDsKfQoKLyoqCiAqICBpbnZfZ3lyb19lbmFi bGVfc3RvcmUoKSAtIEVuYWJsZS9kaXNhYmxlIGd5cm8uCiAqLwpzdGF0aWMgc3NpemVfdCBpbnZf Z3lyb19lbmFibGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAoJc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQp7Cgl1bnNpZ25lZCBs b25nIGRhdGEsICBlbjsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rl dik7CglzdHJ1Y3QgaWlvX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+YnVmZmVyOwoJaW50IHJl c3VsdDsKCglpZiAoc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCkKCQlyZXR1cm4gLUVQRVJNOwoJ aWYgKHN0LT5jaGlwX2NvbmZpZy5lbmFibGUpCgkJcmV0dXJuIC1FUEVSTTsKCglyZXN1bHQgPSBr c3RydG91bChidWYsIDEwLCAmZGF0YSk7CglpZiAocmVzdWx0KQoJCXJldHVybiAtRUlOVkFMOwoJ aWYgKGRhdGEpCgkJZW4gPSAxOwoJZWxzZQoJCWVuID0gMDsKCWlmIChlbiA9PSBzdC0+Y2hpcF9j b25maWcuZ3lyb19lbmFibGUpCgkJcmV0dXJuIGNvdW50OwoJcmVzdWx0ID0gaW52X3N3aXRjaF9n eXJvX2VuZ2luZShzdCwgZW4pOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoKCWlmICgw ID09IGVuKSB7CgkJc3QtPmNoaXBfY29uZmlnLmd5cm9fZmlmb19lbmFibGUgPSAwOwoJCWNsZWFy X2JpdChJTlZfTVBVX1NDQU5fR1lST19YLCByaW5nLT5zY2FuX21hc2spOwoJCWNsZWFyX2JpdChJ TlZfTVBVX1NDQU5fR1lST19ZLCByaW5nLT5zY2FuX21hc2spOwoJCWNsZWFyX2JpdChJTlZfTVBV X1NDQU5fR1lST19aLCByaW5nLT5zY2FuX21hc2spOwoJfQoJc3QtPmNoaXBfY29uZmlnLmd5cm9f ZW5hYmxlID0gZW47CglyZXR1cm4gY291bnQ7Cn0KLyoqCiAqICBpbnZfZ3lyb19lbmFibGVfc2hv dygpIC0gQ2hlY2sgaWYgdGhlIEZJRk8gYW5kIHJpbmcgYnVmZmVyIGFyZSBlbmFibGVkLgogKi8K c3RhdGljIHNzaXplX3QgaW52X2d5cm9fZW5hYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAoJ c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJc3RydWN0IGlpb19k ZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwoJc3RydWN0IGludl9neXJvX3N0 YXRlX3MgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVk XG4iLCBzdC0+Y2hpcF9jb25maWcuZ3lyb19lbmFibGUpOwp9CgovKioKICogIGludl9hY2NsX2Vu YWJsZV9zdG9yZSgpIC0gRW5hYmxlL2Rpc2FibGUgYWNjbC4KICovCnN0YXRpYyBzc2l6ZV90IGlu dl9hY2NsX2VuYWJsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCnsKCXVuc2lnbmVk IGxvbmcgZW4sIGRhdGE7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZk YXRhKGRldik7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRpb19k ZXYpOwoJc3RydWN0IGlpb19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPmJ1ZmZlcjsKCWludCBy ZXN1bHQ7CgoJaWYgKHN0LT5jaGlwX2NvbmZpZy5pc19hc2xlZXApCgkJcmV0dXJuIC1FUEVSTTsK CWlmIChzdC0+Y2hpcF9jb25maWcuZW5hYmxlKQoJCXJldHVybiAtRVBFUk07CglyZXN1bHQgPSBr c3RydG91bChidWYsIDEwLCAmZGF0YSk7CglpZiAocmVzdWx0KQoJCXJldHVybiAtRUlOVkFMOwoJ aWYgKGRhdGEpCgkJZW4gPSAxOwoJZWxzZQoJCWVuID0gMDsKCWlmIChlbiA9PSBzdC0+Y2hpcF9j b25maWcuYWNjbF9lbmFibGUpCgkJcmV0dXJuIGNvdW50OwoJcmVzdWx0ID0gaW52X3N3aXRjaF9h Y2NsX2VuZ2luZShzdCwgZW4pOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJc3QtPmNo aXBfY29uZmlnLmFjY2xfZW5hYmxlID0gZW47CglpZiAoMCA9PSBlbikgewoJCXN0LT5jaGlwX2Nv bmZpZy5hY2NsX2ZpZm9fZW5hYmxlID0gMDsKCQljbGVhcl9iaXQoSU5WX01QVV9TQ0FOX0FDQ0xf WCwgcmluZy0+c2Nhbl9tYXNrKTsKCQljbGVhcl9iaXQoSU5WX01QVV9TQ0FOX0FDQ0xfWSwgcmlu Zy0+c2Nhbl9tYXNrKTsKCQljbGVhcl9iaXQoSU5WX01QVV9TQ0FOX0FDQ0xfWiwgcmluZy0+c2Nh bl9tYXNrKTsKCX0KCXJldHVybiBjb3VudDsKfQovKioKICogIGludl9hY2NsX2VuYWJsZV9zaG93 KCkgLSBDaGVjayBpZiB0aGUgRklGTyBhbmQgcmluZyBidWZmZXIgYXJlIGVuYWJsZWQuCiAqLwpz dGF0aWMgc3NpemVfdCBpbnZfYWNjbF9lbmFibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCglz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7CglzdHJ1Y3QgaWlvX2Rl diAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CglzdHJ1Y3QgaW52X2d5cm9fc3Rh dGVfcyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRc biIsIHN0LT5jaGlwX2NvbmZpZy5hY2NsX2VuYWJsZSk7Cn0KCi8qKgogKiBpbnZfY29tcGFzc19l bl9zdG9yZSgpIC0gIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHN0b3JlIGNvbXBhc3MKICog ICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlCiAqLwpzdGF0aWMgc3NpemVfdCBpbnZfY29t cGFzc19lbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCglzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0 ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCnsKCXVuc2lnbmVkIGxvbmcg ZGF0YSwgcmVzdWx0LCBlbjsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlv X2Rldik7CglzdHJ1Y3QgaWlvX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+YnVmZmVyOwoJaWYg KHN0LT5jaGlwX2NvbmZpZy5pc19hc2xlZXApCgkJcmV0dXJuIC1FUEVSTTsKCWlmIChzdC0+Y2hp cF9jb25maWcuZW5hYmxlKQoJCXJldHVybiAtRVBFUk07CglyZXN1bHQgPSBrc3RydG91bChidWYs IDEwLCAmZGF0YSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglpZiAoZGF0YSkKCQll biA9IDE7CgllbHNlCgkJZW4gPSAwOwoJaWYgKGVuID09IHN0LT5jaGlwX2NvbmZpZy5jb21wYXNz X2VuYWJsZSkKCQlyZXR1cm4gY291bnQ7CglzdC0+Y2hpcF9jb25maWcuY29tcGFzc19lbmFibGUg PSBlbjsKCWlmICgwID09IGVuKSB7CgkJc3QtPmNoaXBfY29uZmlnLmNvbXBhc3NfZmlmb19lbmFi bGUgPSAwOwoJCWNsZWFyX2JpdChJTlZfTVBVX1NDQU5fTUFHTl9YLCByaW5nLT5zY2FuX21hc2sp OwoJCWNsZWFyX2JpdChJTlZfTVBVX1NDQU5fTUFHTl9ZLCByaW5nLT5zY2FuX21hc2spOwoJCWNs ZWFyX2JpdChJTlZfTVBVX1NDQU5fTUFHTl9aLCByaW5nLT5zY2FuX21hc2spOwoJfQoKCXJldHVy biBjb3VudDsKfQovKioKICogaW52X2NvbXBhc3NfZW5fc2hvdygpIC0gIGNhbGxpbmcgdGhpcyBm dW5jdGlvbiB3aWxsIHNob3cgY29tcGFzcwogKiAgICAgICAgICAgICAgICAgICAgICAgICBlbmFi bGUgc3RhdHVzCiAqLwpzdGF0aWMgc3NpemVfdCBpbnZfY29tcGFzc19lbl9zaG93KHN0cnVjdCBk ZXZpY2UgKmRldiwKCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCnsK CXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0cnVj dCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CgoJcmV0dXJuIHNw cmludGYoYnVmLCAiJWRcbiIsIHN0LT5jaGlwX2NvbmZpZy5jb21wYXNzX2VuYWJsZSk7Cn0KCnN0 YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBneXJvX2NoYW5uZWxzW10gPSB7CgkvKnRo ZXJlIGlzIG9ubHkgb25lIGd5cm8sIHdpdGggbW9kaWZpZXIgWCwgWSwgWgoJU28gaXQgaXMgbm90 IGluZGV4ZWQuIG5vIG1vZGlmaWVyIG5hbWUsIG9ubHkgc2ltcGxlLCB4LCB5LHoKCXRoZSBzY2Fs ZSBzaG91bGQgYmUgc2hhcmVkIHdoaWxlIGJpYXMgaXMgbm90IHNvIGVhY2gKCWF4aXMgaGFzIGRp ZmZlcmVudCBiaWFzKi8KCXsKCQkudHlwZSA9IElJT19BTkdMX1ZFTCwKCQkubW9kaWZpZWQgPSAx LAoJCS5jaGFubmVsMiA9IElJT19NT0RfWCwKCQkuaW5mb19tYXNrID0gSUlPX0NIQU5fSU5GT19D QUxJQkJJQVNfU0VQQVJBVEVfQklUIHwKCQlJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRF9CSVQs CgkJLnNjYW5faW5kZXggPSBJTlZfTVBVX1NDQU5fR1lST19YLAoJCS5zY2FuX3R5cGUgPSBJSU9f U1QoJ3MnLCAxNiwgMTYsIDApCgl9LCB7CgkJLnR5cGUgPSBJSU9fQU5HTF9WRUwsCgkJLm1vZGlm aWVkID0gMSwKCQkuY2hhbm5lbDIgPSBJSU9fTU9EX1ksCgkJLmluZm9fbWFzayA9IElJT19DSEFO X0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFX0JJVCB8CgkJSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFS RURfQklULAoJCS5zY2FuX2luZGV4ID0gSU5WX01QVV9TQ0FOX0dZUk9fWSwKCQkuc2Nhbl90eXBl ID0gSUlPX1NUKCdzJywgMTYsIDE2LCAwKQoJfSwgewoJCS50eXBlID0gSUlPX0FOR0xfVkVMLAoJ CS5tb2RpZmllZCA9IDEsCgkJLmNoYW5uZWwyID0gSUlPX01PRF9aLAoJCS5pbmZvX21hc2sgPSBJ SU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURV9CSVQgfAoJCUlJT19DSEFOX0lORk9fU0NB TEVfU0hBUkVEX0JJVCwKCQkuc2Nhbl9pbmRleCA9IElOVl9NUFVfU0NBTl9HWVJPX1osCgkJLnNj YW5fdHlwZSA9IElJT19TVCgncycsIDE2LCAxNiwgMCkKCX0sCglJSU9fQ0hBTl9TT0ZUX1RJTUVT VEFNUChJTlZfTVBVX1NDQU5fVElNRVNUQU1QKQp9OwoKc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9f Y2hhbl9zcGVjIGd5cm9fYWNjZWxfY2hhbm5lbHNbXSA9IHsKCXsKCQkudHlwZSA9IElJT19BTkdM X1ZFTCwKCQkubW9kaWZpZWQgPSAxLAoJCS5jaGFubmVsMiA9IElJT19NT0RfWCwKCQkuaW5mb19t YXNrID0gSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEVfQklUIHwKCQlJSU9fQ0hBTl9J TkZPX1NDQUxFX1NIQVJFRF9CSVQsCgkJLnNjYW5faW5kZXggPSBJTlZfTVBVX1NDQU5fR1lST19Y LAoJCS5zY2FuX3R5cGUgPSBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApCgl9LCB7CgkJLnR5cGUgPSBJ SU9fQU5HTF9WRUwsCgkJLm1vZGlmaWVkID0gMSwKCQkuY2hhbm5lbDIgPSBJSU9fTU9EX1ksCgkJ LmluZm9fbWFzayA9IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFX0JJVCB8CgkJSUlP X0NIQU5fSU5GT19TQ0FMRV9TSEFSRURfQklULAoJCS5zY2FuX2luZGV4ID0gSU5WX01QVV9TQ0FO X0dZUk9fWSwKCQkuc2Nhbl90eXBlID0gSUlPX1NUKCdzJywgMTYsIDE2LCAwKQoJfSwgewoJCS50 eXBlID0gSUlPX0FOR0xfVkVMLAoJCS5tb2RpZmllZCA9IDEsCgkJLmNoYW5uZWwyID0gSUlPX01P RF9aLAoJCS5pbmZvX21hc2sgPSBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURV9CSVQg fAoJCUlJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEX0JJVCwKCQkuc2Nhbl9pbmRleCA9IElOVl9N UFVfU0NBTl9HWVJPX1osCgkJLnNjYW5fdHlwZSA9IElJT19TVCgncycsIDE2LCAxNiwgMCkKCX0s IHsKCQkudHlwZSA9IElJT19BQ0NFTCwKCQkubW9kaWZpZWQgPSAxLAoJCS5jaGFubmVsMiA9IElJ T19NT0RfWCwKCQkuaW5mb19tYXNrID0gSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEVf QklUIHwKCQlJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRF9CSVQsCgkJLnNjYW5faW5kZXggPSBJ TlZfTVBVX1NDQU5fQUNDTF9YLAoJCS5zY2FuX3R5cGUgPSBJSU9fU1QoJ3MnLCAxNiwgMTYsIDAp Cgl9LCB7CgkJLnR5cGUgPSBJSU9fQUNDRUwsCgkJLm1vZGlmaWVkID0gMSwKCQkuY2hhbm5lbDIg PSBJSU9fTU9EX1ksCgkJLmluZm9fbWFzayA9IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFS QVRFX0JJVCB8CgkJSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRURfQklULAoJCS5zY2FuX2luZGV4 ID0gSU5WX01QVV9TQ0FOX0FDQ0xfWSwKCQkuc2Nhbl90eXBlID0gSUlPX1NUKCdzJywgMTYsIDE2 LCAwKQoJfSwgewoJCS50eXBlID0gSUlPX0FDQ0VMLAoJCS5tb2RpZmllZCA9IDEsCgkJLmNoYW5u ZWwyID0gSUlPX01PRF9aLAoJCS5pbmZvX21hc2sgPSBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19T RVBBUkFURV9CSVQgfAoJCUlJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEX0JJVCwKCQkuc2Nhbl9p bmRleCA9IElOVl9NUFVfU0NBTl9BQ0NMX1osCgkJLnNjYW5fdHlwZSA9IElJT19TVCgncycsIDE2 LCAxNiwgMCkKCX0sCglJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUChJTlZfTVBVX1NDQU5fVElNRVNU QU1QKQp9OwpzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgZ3lyb19hY2NlbF9jb21w YXNzX2NoYW5uZWxzW10gPSB7Cgl7CgkJLnR5cGUgPSBJSU9fQU5HTF9WRUwsCgkJLm1vZGlmaWVk ID0gMSwKCQkuY2hhbm5lbDIgPSBJSU9fTU9EX1gsCgkJLmluZm9fbWFzayA9IElJT19DSEFOX0lO Rk9fQ0FMSUJCSUFTX1NFUEFSQVRFX0JJVCB8CgkJSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRURf QklULAoJCS5zY2FuX2luZGV4ID0gSU5WX01QVV9TQ0FOX0dZUk9fWCwKCQkuc2Nhbl90eXBlID0g SUlPX1NUKCdzJywgMTYsIDE2LCAwKQoJfSwgewoJCS50eXBlID0gSUlPX0FOR0xfVkVMLAoJCS5t b2RpZmllZCA9IDEsCgkJLmNoYW5uZWwyID0gSUlPX01PRF9ZLAoJCS5pbmZvX21hc2sgPSBJSU9f Q0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURV9CSVQgfAoJCUlJT19DSEFOX0lORk9fU0NBTEVf U0hBUkVEX0JJVCwKCQkuc2Nhbl9pbmRleCA9IElOVl9NUFVfU0NBTl9HWVJPX1ksCgkJLnNjYW5f dHlwZSA9IElJT19TVCgncycsIDE2LCAxNiwgMCkKCX0sIHsKCQkudHlwZSA9IElJT19BTkdMX1ZF TCwKCQkubW9kaWZpZWQgPSAxLAoJCS5jaGFubmVsMiA9IElJT19NT0RfWiwKCQkuaW5mb19tYXNr ID0gSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEVfQklUIHwKCQlJSU9fQ0hBTl9JTkZP X1NDQUxFX1NIQVJFRF9CSVQsCgkJLnNjYW5faW5kZXggPSBJTlZfTVBVX1NDQU5fR1lST19aLAoJ CS5zY2FuX3R5cGUgPSBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApCgl9LCB7CgkJLnR5cGUgPSBJSU9f QUNDRUwsCgkJLm1vZGlmaWVkID0gMSwKCQkuY2hhbm5lbDIgPSBJSU9fTU9EX1gsCgkJLmluZm9f bWFzayA9IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFX0JJVCB8CgkJSUlPX0NIQU5f SU5GT19TQ0FMRV9TSEFSRURfQklULAoJCS5zY2FuX2luZGV4ID0gSU5WX01QVV9TQ0FOX0FDQ0xf WCwKCQkuc2Nhbl90eXBlID0gSUlPX1NUKCdzJywgMTYsIDE2LCAwKQoJfSwgewoJCS50eXBlID0g SUlPX0FDQ0VMLAoJCS5tb2RpZmllZCA9IDEsCgkJLmNoYW5uZWwyID0gSUlPX01PRF9ZLAoJCS5p bmZvX21hc2sgPSBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURV9CSVQgfAoJCUlJT19D SEFOX0lORk9fU0NBTEVfU0hBUkVEX0JJVCwKCQkuc2Nhbl9pbmRleCA9IElOVl9NUFVfU0NBTl9B Q0NMX1ksCgkJLnNjYW5fdHlwZSA9IElJT19TVCgncycsIDE2LCAxNiwgMCkKCX0sIHsKCQkudHlw ZSA9IElJT19BQ0NFTCwKCQkubW9kaWZpZWQgPSAxLAoJCS5jaGFubmVsMiA9IElJT19NT0RfWiwK CQkuaW5mb19tYXNrID0gSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEVfQklUIHwKCQlJ SU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRF9CSVQsCgkJLnNjYW5faW5kZXggPSBJTlZfTVBVX1ND QU5fQUNDTF9aLAoJCS5zY2FuX3R5cGUgPSBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApCgl9LCB7CgkJ LnR5cGUgPSBJSU9fTUFHTiwKCQkubW9kaWZpZWQgPSAxLAoJCS5jaGFubmVsMiA9IElJT19NT0Rf WCwKCQkuaW5mb19tYXNrID0gSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEVfQklUIHwK CQlJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRF9CSVQsCgkJLnNjYW5faW5kZXggPSBJTlZfTVBV X1NDQU5fTUFHTl9YLAoJCS5zY2FuX3R5cGUgPSBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApCgl9LCB7 CgkJLnR5cGUgPSBJSU9fTUFHTiwKCQkubW9kaWZpZWQgPSAxLAoJCS5jaGFubmVsMiA9IElJT19N T0RfWSwKCQkuaW5mb19tYXNrID0gSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEVfQklU IHwKCQlJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRF9CSVQsCgkJLnNjYW5faW5kZXggPSBJTlZf TVBVX1NDQU5fTUFHTl9ZLAoJCS5zY2FuX3R5cGUgPSBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApCgl9 LCB7CgkJLnR5cGUgPSBJSU9fTUFHTiwKCQkubW9kaWZpZWQgPSAxLAoJCS5jaGFubmVsMiA9IElJ T19NT0RfWiwKCQkuaW5mb19tYXNrID0gSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEVf QklUIHwKCQlJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRF9CSVQsCgkJLnNjYW5faW5kZXggPSBJ TlZfTVBVX1NDQU5fTUFHTl9aLAoJCS5zY2FuX3R5cGUgPSBJSU9fU1QoJ3MnLCAxNiwgMTYsIDAp Cgl9LAoKCUlJT19DSEFOX1NPRlRfVElNRVNUQU1QKElOVl9NUFVfU0NBTl9USU1FU1RBTVApCn07 CgpzdGF0aWMgc3RydWN0IGludl9jaGlwX2NoYW5faW5mbyBjaGlwX2NoYW5uZWxfaW5mb1tdID0g ewoJewoJCS5jaGFubmVscyA9IGd5cm9fY2hhbm5lbHMsCgkJLm51bV9jaGFubmVscyA9IEFSUkFZ X1NJWkUoZ3lyb19jaGFubmVscyksCgkJLmRlZmF1bHRfc2Nhbl9tYXNrID0gKDEgPDwgSU5WX01Q VV9TQ0FOX0dZUk9fWCkgfAoJCSgxIDw8IElOVl9NUFVfU0NBTl9HWVJPX1kpIHwgKDEgPDwgSU5W X01QVV9TQ0FOX0dZUk9fWikgfAoJCSgxIDw8IElOVl9NUFVfU0NBTl9USU1FU1RBTVApCgl9LAoJ ewoJCS5jaGFubmVscyA9IGd5cm9fYWNjZWxfY2hhbm5lbHMsCgkJLm51bV9jaGFubmVscyA9IEFS UkFZX1NJWkUoZ3lyb19hY2NlbF9jaGFubmVscyksCgkJLmRlZmF1bHRfc2Nhbl9tYXNrID0gKDEg PDwgSU5WX01QVV9TQ0FOX0dZUk9fWCkgfAoJCSgxIDw8IElOVl9NUFVfU0NBTl9HWVJPX1kpIHwg KDEgPDwgSU5WX01QVV9TQ0FOX0dZUk9fWikgfAoJCSgxIDw8IElOVl9NUFVfU0NBTl9BQ0NMX1gp IHwgKDEgPDwgSU5WX01QVV9TQ0FOX0FDQ0xfWSkgfAoJCSgxIDw8IElOVl9NUFVfU0NBTl9BQ0NM X1opIHwgKDEgPDwgSU5WX01QVV9TQ0FOX1RJTUVTVEFNUCkKCX0sCgl7CgkJLmNoYW5uZWxzID0g Z3lyb19hY2NlbF9jb21wYXNzX2NoYW5uZWxzLAoJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpF KGd5cm9fYWNjZWxfY29tcGFzc19jaGFubmVscyksCgkJLmRlZmF1bHRfc2Nhbl9tYXNrID0gKDEg PDwgSU5WX01QVV9TQ0FOX0dZUk9fWCkgfAoJCSgxIDw8IElOVl9NUFVfU0NBTl9HWVJPX1kpIHwg KDEgPDwgSU5WX01QVV9TQ0FOX0dZUk9fWikgfAoJCSgxIDw8IElOVl9NUFVfU0NBTl9BQ0NMX1gp IHwgKDEgPDwgSU5WX01QVV9TQ0FOX0FDQ0xfWSkgfAoJCSgxIDw8IElOVl9NUFVfU0NBTl9BQ0NM X1opIHwgKDEgPDwgSU5WX01QVV9TQ0FOX01BR05fWCkgfAoJCSgxIDw8IElOVl9NUFVfU0NBTl9N QUdOX1kpIHwgKDEgPDwgSU5WX01QVV9TQ0FOX01BR05fWikgfAoJCSgxIDw8IElOVl9NUFVfU0NB Tl9USU1FU1RBTVApCgl9Cn07CgovKmNvbnN0YW50IElJTyBhdHRyaWJ1dGUgKi8Kc3RhdGljIElJ T19DT05TVF9BVFRSX1NBTVBfRlJFUV9BVkFJTCgiMTAgNTAgMTAwIDIwMCA1MDAiKTsKc3RhdGlj IElJT19ERVZfQVRUUl9TQU1QX0ZSRVEoU19JUlVHTyB8IFNfSVdVR08sIGludl9maWZvX3JhdGVf c2hvdywKCWludl9maWZvX3JhdGVfc3RvcmUpOwpzdGF0aWMgREVWSUNFX0FUVFIodGVtcGVyYXR1 cmUsIFNfSVJVR08sIGludl90ZW1wZXJhdHVyZV9zaG93LCBOVUxMKTsKc3RhdGljIERFVklDRV9B VFRSKGNsb2NrX3NvdXJjZSwgU19JUlVHTywgaW52X2Nsa19zcmNfc2hvdywgTlVMTCk7CnN0YXRp YyBERVZJQ0VfQVRUUihwb3dlcl9zdGF0ZSwgU19JUlVHTyB8IFNfSVdVR08sIGludl9wb3dlcl9z dGF0ZV9zaG93LAoJaW52X3Bvd2VyX3N0YXRlX3N0b3JlKTsKc3RhdGljIERFVklDRV9BVFRSKGZp cm13YXJlX2xvYWRlZCwgU19JUlVHTyB8IFNfSVdVR08sCglpbnZfZmlybXdhcmVfbG9hZGVkX3No b3csIGludl9maXJtd2FyZV9sb2FkZWRfc3RvcmUpOwpzdGF0aWMgREVWSUNFX0FUVFIobHBhX21v ZGUsIFNfSVJVR08gfCBTX0lXVUdPLCBpbnZfbHBhX21vZGVfc2hvdywKCWludl9scGFfbW9kZV9z dG9yZSk7CnN0YXRpYyBERVZJQ0VfQVRUUihscGFfZnJlcSwgU19JUlVHTyB8IFNfSVdVR08sIGlu dl9scGFfZnJlcV9zaG93LAoJaW52X2xwYV9mcmVxX3N0b3JlKTsKc3RhdGljIERFVklDRV9BVFRS KHJlZ19kdW1wLCBTX0lSVUdPLCBpbnZfcmVnX2R1bXBfc2hvdywgTlVMTCk7CnN0YXRpYyBERVZJ Q0VfQVRUUihzZWxmX3Rlc3QsIFNfSVJVR08sIGludl9zZWxmX3Rlc3Rfc2hvdywgTlVMTCk7CnN0 YXRpYyBERVZJQ0VfQVRUUihrZXksIFNfSVJVR08sIGludl9rZXlfc2hvdywgTlVMTCk7CnN0YXRp YyBERVZJQ0VfQVRUUihneXJvX21hdHJpeCwgU19JUlVHTywgaW52X2d5cm9fbWF0cml4X3Nob3cs IE5VTEwpOwpzdGF0aWMgREVWSUNFX0FUVFIoYWNjbF9tYXRyaXgsIFNfSVJVR08sIGludl9hY2Ns X21hdHJpeF9zaG93LCBOVUxMKTsKc3RhdGljIERFVklDRV9BVFRSKGNvbXBhc3NfbWF0cml4LCBT X0lSVUdPLCBpbnZfY29tcGFzc19tYXRyaXhfc2hvdywgTlVMTCk7CnN0YXRpYyBERVZJQ0VfQVRU UihmbGlja19sb3dlciwgU19JUlVHTyB8IFNfSVdVR08sIGludl9mbGlja19sb3dlcl9zaG93LAoJ aW52X2ZsaWNrX2xvd2VyX3N0b3JlKTsKc3RhdGljIERFVklDRV9BVFRSKGZsaWNrX3VwcGVyLCBT X0lSVUdPIHwgU19JV1VHTywgaW52X2ZsaWNrX3VwcGVyX3Nob3csCglpbnZfZmxpY2tfdXBwZXJf c3RvcmUpOwpzdGF0aWMgREVWSUNFX0FUVFIoZmxpY2tfY291bnRlciwgU19JUlVHTyB8IFNfSVdV R08sIGludl9mbGlja19jb3VudGVyX3Nob3csCglpbnZfZmxpY2tfY291bnRlcl9zdG9yZSk7CnN0 YXRpYyBERVZJQ0VfQVRUUihmbGlja19tZXNzYWdlX29uLCBTX0lSVUdPIHwgU19JV1VHTywgaW52 X2ZsaWNrX21zZ19vbl9zaG93LAoJaW52X2ZsaWNrX21zZ19vbl9zdG9yZSk7CnN0YXRpYyBERVZJ Q0VfQVRUUihmbGlja19pbnRfb24sIFNfSVJVR08gfCBTX0lXVUdPLCBpbnZfZmxpY2tfaW50X29u X3Nob3csCglpbnZfZmxpY2tfaW50X29uX3N0b3JlKTsKc3RhdGljIERFVklDRV9BVFRSKGZsaWNr X2F4aXMsIFNfSVJVR08gfCBTX0lXVUdPLCBpbnZfZmxpY2tfYXhpc19zaG93LAoJaW52X2ZsaWNr X2F4aXNfc3RvcmUpOwpzdGF0aWMgREVWSUNFX0FUVFIoZG1wX29uLCBTX0lSVUdPIHwgU19JV1VH TywgaW52X2RtcF9vbl9zaG93LAoJaW52X2RtcF9vbl9zdG9yZSk7CnN0YXRpYyBERVZJQ0VfQVRU UihvcmllbnRhdGlvbl9vbiwgU19JUlVHTyB8IFNfSVdVR08sCglpbnZfb3JpZW50YXRpb25fb25f c2hvdywgaW52X29yaWVudGF0aW9uX29uX3N0b3JlKTsKCnN0YXRpYyBERVZJQ0VfQVRUUih0YXBf b24sIFNfSVJVR08gfCBTX0lXVUdPLCBpbnZfdGFwX29uX3Nob3csCglpbnZfdGFwX29uX3N0b3Jl KTsKc3RhdGljIERFVklDRV9BVFRSKHRhcF90aW1lLCBTX0lSVUdPIHwgU19JV1VHTywgaW52X3Rh cF90aW1lX3Nob3csCglpbnZfdGFwX3RpbWVfc3RvcmUpOwpzdGF0aWMgREVWSUNFX0FUVFIodGFw X21pbl9jb3VudCwgU19JUlVHTyB8IFNfSVdVR08sIGludl90YXBfbWluX2NvdW50X3Nob3csCglp bnZfdGFwX21pbl9jb3VudF9zdG9yZSk7CnN0YXRpYyBERVZJQ0VfQVRUUih0YXBfdGhyZXNob2xk LCBTX0lSVUdPIHwgU19JV1VHTywgaW52X3RhcF90aHJlc2hvbGRfc2hvdywKCWludl90YXBfdGhy ZXNob2xkX3N0b3JlKTsKc3RhdGljIERFVklDRV9BVFRSKHBlZG9tZXRlcl90aW1lLCBTX0lSVUdP IHwgU19JV1VHTywgaW52X3BlZG9tZXRlcl90aW1lX3Nob3csCglpbnZfcGVkb21ldGVyX3RpbWVf c3RvcmUpOwpzdGF0aWMgREVWSUNFX0FUVFIocGVkb21ldGVyX3N0ZXBzLCBTX0lSVUdPIHwgU19J V1VHTywKCQlpbnZfcGVkb21ldGVyX3N0ZXBzX3Nob3csIGludl9wZWRvbWV0ZXJfc3RlcHNfc3Rv cmUpOwpzdGF0aWMgREVWSUNFX0FUVFIoZXZlbnRfZmxpY2ssIFNfSVJVR08sIGludl9kbXBfZmxp Y2tfc2hvdywgTlVMTCk7CnN0YXRpYyBERVZJQ0VfQVRUUihldmVudF9vcmllbnRhdGlvbiwgU19J UlVHTywgaW52X2RtcF9vcmllbnRfc2hvdywgTlVMTCk7CnN0YXRpYyBERVZJQ0VfQVRUUihldmVu dF90YXAsIFNfSVJVR08sIGludl9kbXBfdGFwX3Nob3csIE5VTEwpOwpzdGF0aWMgREVWSUNFX0FU VFIoZ3lyb19lbmFibGUsIFNfSVJVR08gfCBTX0lXVUdPLCBpbnZfZ3lyb19lbmFibGVfc2hvdywK CWludl9neXJvX2VuYWJsZV9zdG9yZSk7CnN0YXRpYyBERVZJQ0VfQVRUUihhY2NsX2VuYWJsZSwg U19JUlVHTyB8IFNfSVdVR08sIGludl9hY2NsX2VuYWJsZV9zaG93LAoJaW52X2FjY2xfZW5hYmxl X3N0b3JlKTsKc3RhdGljIERFVklDRV9BVFRSKGNvbXBhc3NfZW5hYmxlLCBTX0lSVUdPIHwgU19J V1VHTywgaW52X2NvbXBhc3NfZW5fc2hvdywKCWludl9jb21wYXNzX2VuX3N0b3JlKTsKCnN0YXRp YyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICppbnZfZ3lyb19hdHRyaWJ1dGVzW10gPSB7CgkmZGV2 X2F0dHJfZ3lyb19lbmFibGUuYXR0ciwKCSZkZXZfYXR0cl90ZW1wZXJhdHVyZS5hdHRyLAoJJmRl dl9hdHRyX2Nsb2NrX3NvdXJjZS5hdHRyLAoJJmRldl9hdHRyX3Bvd2VyX3N0YXRlLmF0dHIsCgkm ZGV2X2F0dHJfcmVnX2R1bXAuYXR0ciwKCSZkZXZfYXR0cl9zZWxmX3Rlc3QuYXR0ciwKCSZkZXZf YXR0cl9rZXkuYXR0ciwKCSZkZXZfYXR0cl9neXJvX21hdHJpeC5hdHRyLAoJJmlpb19kZXZfYXR0 cl9zYW1wbGluZ19mcmVxdWVuY3kuZGV2X2F0dHIuYXR0ciwKCSZpaW9fY29uc3RfYXR0cl9zYW1w bGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCn07CgpzdGF0aWMgY29uc3Qg c3RydWN0IGF0dHJpYnV0ZSAqaW52X21wdTYwNTBfYXR0cmlidXRlc1tdID0gewoJJmRldl9hdHRy X2FjY2xfZW5hYmxlLmF0dHIsCgkmZGV2X2F0dHJfYWNjbF9tYXRyaXguYXR0ciwKCSZkZXZfYXR0 cl9maXJtd2FyZV9sb2FkZWQuYXR0ciwKCSZkZXZfYXR0cl9scGFfbW9kZS5hdHRyLAoJJmRldl9h dHRyX2xwYV9mcmVxLmF0dHIsCgkmZGV2X2F0dHJfZmxpY2tfbG93ZXIuYXR0ciwKCSZkZXZfYXR0 cl9mbGlja191cHBlci5hdHRyLAoJJmRldl9hdHRyX2ZsaWNrX2NvdW50ZXIuYXR0ciwKCSZkZXZf YXR0cl9mbGlja19tZXNzYWdlX29uLmF0dHIsCgkmZGV2X2F0dHJfZmxpY2tfaW50X29uLmF0dHIs CgkmZGV2X2F0dHJfZmxpY2tfYXhpcy5hdHRyLAoJJmRldl9hdHRyX2RtcF9vbi5hdHRyLAoJJmRl dl9hdHRyX29yaWVudGF0aW9uX29uLmF0dHIsCgkmZGV2X2F0dHJfdGFwX29uLmF0dHIsCgkmZGV2 X2F0dHJfdGFwX3RpbWUuYXR0ciwKCSZkZXZfYXR0cl90YXBfbWluX2NvdW50LmF0dHIsCgkmZGV2 X2F0dHJfdGFwX3RocmVzaG9sZC5hdHRyLAoJJmRldl9hdHRyX3BlZG9tZXRlcl90aW1lLmF0dHIs CgkmZGV2X2F0dHJfcGVkb21ldGVyX3N0ZXBzLmF0dHIsCgkmZGV2X2F0dHJfZXZlbnRfZmxpY2su YXR0ciwKCSZkZXZfYXR0cl9ldmVudF9vcmllbnRhdGlvbi5hdHRyLAoJJmRldl9hdHRyX2V2ZW50 X3RhcC5hdHRyLAp9OwoKc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmludl9jb21wYXNz X2F0dHJpYnV0ZXNbXSA9IHsKCSZkZXZfYXR0cl9jb21wYXNzX21hdHJpeC5hdHRyLAoJJmRldl9h dHRyX2NvbXBhc3NfZW5hYmxlLmF0dHIsCn07CgpzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0 ZSAqaW52X21wdTMwNTBfYXR0cmlidXRlc1tdID0gewoJJmRldl9hdHRyX2FjY2xfbWF0cml4LmF0 dHIsCgkmZGV2X2F0dHJfYWNjbF9lbmFibGUuYXR0ciwKfTsKCnN0YXRpYyBzdHJ1Y3QgYXR0cmli dXRlICppbnZfYXR0cmlidXRlc1tBUlJBWV9TSVpFKGludl9neXJvX2F0dHJpYnV0ZXMpICsKCQkJ CUFSUkFZX1NJWkUoaW52X21wdTYwNTBfYXR0cmlidXRlcykgKwoJCQkJQVJSQVlfU0laRShpbnZf Y29tcGFzc19hdHRyaWJ1dGVzKSArIDFdOwpzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9n cm91cCBpbnZfYXR0cmlidXRlX2dyb3VwID0gewoJLm5hbWUgPSAibXB1IiwKCS5hdHRycyA9IGlu dl9hdHRyaWJ1dGVzCn07CgpzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIG1wdV9pbmZvID0g ewoJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKCS5yZWFkX3JhdyA9ICZtcHVfcmVhZF9y YXcsCgkud3JpdGVfcmF3ID0gJm1wdV93cml0ZV9yYXcsCgkuYXR0cnMgPSAmaW52X2F0dHJpYnV0 ZV9ncm91cCwKfTsKCi8qKgogKiAgaW52X3NldHVwX2NvbXBhc3MoKSAtIENvbmZpZ3VyZSBjb21w YXNzLgogKi8Kc3RhdGljIGludCBpbnZfc2V0dXBfY29tcGFzcyhzdHJ1Y3QgaW52X2d5cm9fc3Rh dGVfcyAqc3QpCnsKCWludCByZXN1bHQ7Cgl1bnNpZ25lZCBjaGFyIGRhdGFbNF07CgoJcmVzdWx0 ID0gaW52X2kyY19yZWFkKHN0LCBSRUdfWUdPRkZTX1RDLCAxLCBkYXRhKTsKCWlmIChyZXN1bHQp CgkJcmV0dXJuIHJlc3VsdDsKCWRhdGFbMF0gJj0gfkJJVF9JMkNfTVNUX1ZERElPOwoJaWYgKHN0 LT5wbGF0X2RhdGEubGV2ZWxfc2hpZnRlcikKCQlkYXRhWzBdIHw9IEJJVF9JMkNfTVNUX1ZERElP OwoJLypzZXQgdXAgVkRESU8gcmVnaXN0ZXIgKi8KCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dy aXRlKHN0LCBSRUdfWUdPRkZTX1RDLCBkYXRhWzBdKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJl c3VsdDsKCS8qIHNldCB0byBieXBhc3MgbW9kZSAqLwoJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVf d3JpdGUoc3QsIFJFR19JTlRfUElOX0NGRywgQklUX0JZUEFTU19FTik7CglpZiAocmVzdWx0KQoJ CXJldHVybiByZXN1bHQ7CgkvKnJlYWQgc2Vjb25kYXJ5IGkyYyBJRCByZWdpc3RlciAqLwoJcmVz dWx0ID0gaW52X3NlY29uZGFyeV9yZWFkKFJFR19BS01fSUQsIDEsIGRhdGEpOwoJaWYgKHJlc3Vs dCkKCQlyZXR1cm4gcmVzdWx0OwoJaWYgKGRhdGFbMF0gIT0gREFUQV9BS01fSUQpCgkJcmV0dXJu IC1FTlhJTzsKCS8qc2V0IEFLTSB0byBGdXNlIFJPTSBhY2Nlc3MgbW9kZSAqLwoJcmVzdWx0ID0g aW52X3NlY29uZGFyeV93cml0ZShSRUdfQUtNX01PREUsIERBVEFfQUtNX01PREVfUFdfRlIpOwoJ aWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJcmVzdWx0ID0gaW52X3NlY29uZGFyeV9yZWFk KFJFR19BS01fU0VOU0lUSVZJVFksIFRIUkVFX0FYSVMsCgkJCQkJc3QtPmNoaXBfaW5mby5jb21w YXNzX3NlbnMpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJLypyZXZlcnQgdG8gcG93 ZXIgZG93biBtb2RlICovCglyZXN1bHQgPSBpbnZfc2Vjb25kYXJ5X3dyaXRlKFJFR19BS01fTU9E RSwgREFUQV9BS01fTU9ERV9QV19ETik7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7Cglw cl9lcnIoInNlbng9JWQsIHNlbnk9JWQsc2Vuej0lZFxuIiwKCQlzdC0+Y2hpcF9pbmZvLmNvbXBh c3Nfc2Vuc1swXSwKCQlzdC0+Y2hpcF9pbmZvLmNvbXBhc3Nfc2Vuc1sxXSwKCQlzdC0+Y2hpcF9p bmZvLmNvbXBhc3Nfc2Vuc1syXSk7CgkvKnJlc3RvcmUgdG8gbm9uLWJ5cGFzcyBtb2RlICovCgly ZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgUkVHX0lOVF9QSU5fQ0ZHLCAwKTsKCWlm IChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCgkvKnNldHVwIG1hc3RlciBtb2RlIGFuZCBtYXN0 ZXIgY2xvY2sgYW5kIEVTIGJpdCovCglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwg UkVHX0kyQ19NU1RfQ1RSTCwgQklUX1dBSVRfRk9SX0VTKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJu IHJlc3VsdDsKCS8qIHNsYXZlIDAgaXMgdXNlZCB0byByZWFkIGRhdGEgZnJvbSBjb21wYXNzICov CgkvKnJlYWQgbW9kZSAqLwoJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIFJFR19J MkNfU0xWMF9BRERSLCBCSVRfSTJDX1JFQUR8CgkJc3QtPnBsYXRfZGF0YS5zZWNvbmRhcnlfaTJj X2FkZHIpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJLyogQUtNIHN0YXR1cyByZWdp c3RlciBhZGRyZXNzIGlzIDIgKi8KCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCBS RUdfSTJDX1NMVjBfUkVHLCBSRUdfQUtNX1NUQVRVUyk7CglpZiAocmVzdWx0KQoJCXJldHVybiBy ZXN1bHQ7CgkvKiBzbGF2ZSAwIGlzIGVuYWJsZWQgYXQgdGhlIGJlZ2lubmluZywgcmVhZCA4IGJ5 dGVzIGZyb20gaGVyZSAqLwoJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIFJFR19J MkNfU0xWMF9DVFJMLCBCSVRfU0xWX0VOIHwKCQkJCU5VTV9CWVRFU19DT01QQVNTX1NMQVZFKTsK CWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCS8qc2xhdmUgMSBpcyB1c2VkIGZvciBBS00g bW9kZSBjaGFuZ2Ugb25seSovCglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgUkVH X0kyQ19TTFYxX0FERFIsCgkJc3QtPnBsYXRfZGF0YS5zZWNvbmRhcnlfaTJjX2FkZHIpOwoJaWYg KHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJLyogQUtNIG1vZGUgcmVnaXN0ZXIgYWRkcmVzcyBp cyAweDBBICovCglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgUkVHX0kyQ19TTFYx X1JFRywgUkVHX0FLTV9NT0RFKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCS8qIHNs YXZlIDEgaXMgZW5hYmxlZCwgYnl0ZSBsZW5ndGggaXMgMSAqLwoJcmVzdWx0ID0gaW52X2kyY19z aW5nbGVfd3JpdGUoc3QsIFJFR19JMkNfU0xWMV9DVFJMLCBCSVRfU0xWX0VOIHwgMSk7CglpZiAo cmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CgkvKiBvdXRwdXQgZGF0YSBmb3Igc2xhdmUgMSBpcyBm aXhlZCwgc2luZ2xlIG1lYXN1cmUgbW9kZSovCglzdC0+Y29tcGFzc19zY2FsZSA9IDE7CglkYXRh WzBdID0gMTsKCWlmIChDT01QQVNTX0lEX0FLODk3NSA9PSBzdC0+cGxhdF9kYXRhLnNlY19zbGF2 ZV9pZCkgewoJCXN0LT5jb21wYXNzX3N0X3VwcGVyWzBdID0gREFUQV9BS004OTc1X1NUX1hfVVA7 CgkJc3QtPmNvbXBhc3Nfc3RfdXBwZXJbMV0gPSBEQVRBX0FLTTg5NzVfU1RfWV9VUDsKCQlzdC0+ Y29tcGFzc19zdF91cHBlclsyXSA9IERBVEFfQUtNODk3NV9TVF9aX1VQOwoJCXN0LT5jb21wYXNz X3N0X2xvd2VyWzBdID0gREFUQV9BS004OTc1X1NUX1hfTFc7CgkJc3QtPmNvbXBhc3Nfc3RfbG93 ZXJbMV0gPSBEQVRBX0FLTTg5NzVfU1RfWV9MVzsKCQlzdC0+Y29tcGFzc19zdF9sb3dlclsyXSA9 IERBVEFfQUtNODk3NV9TVF9aX0xXOwoJfSBlbHNlIGlmIChDT01QQVNTX0lEX0FLODk3MiA9PSBz dC0+cGxhdF9kYXRhLnNlY19zbGF2ZV9pZCkgewoJCXN0LT5jb21wYXNzX3N0X3VwcGVyWzBdID0g REFUQV9BS004OTcyX1NUX1hfVVA7CgkJc3QtPmNvbXBhc3Nfc3RfdXBwZXJbMV0gPSBEQVRBX0FL TTg5NzJfU1RfWV9VUDsKCQlzdC0+Y29tcGFzc19zdF91cHBlclsyXSA9IERBVEFfQUtNODk3Ml9T VF9aX1VQOwoJCXN0LT5jb21wYXNzX3N0X2xvd2VyWzBdID0gREFUQV9BS004OTcyX1NUX1hfTFc7 CgkJc3QtPmNvbXBhc3Nfc3RfbG93ZXJbMV0gPSBEQVRBX0FLTTg5NzJfU1RfWV9MVzsKCQlzdC0+ Y29tcGFzc19zdF9sb3dlclsyXSA9IERBVEFfQUtNODk3Ml9TVF9aX0xXOwoJfSBlbHNlIGlmIChD T01QQVNTX0lEX0FLODk2MyA9PSBzdC0+cGxhdF9kYXRhLnNlY19zbGF2ZV9pZCkgewoJCXN0LT5j b21wYXNzX3N0X3VwcGVyWzBdID0gREFUQV9BS004OTYzX1NUX1hfVVA7CgkJc3QtPmNvbXBhc3Nf c3RfdXBwZXJbMV0gPSBEQVRBX0FLTTg5NjNfU1RfWV9VUDsKCQlzdC0+Y29tcGFzc19zdF91cHBl clsyXSA9IERBVEFfQUtNODk2M19TVF9aX1VQOwoJCXN0LT5jb21wYXNzX3N0X2xvd2VyWzBdID0g REFUQV9BS004OTYzX1NUX1hfTFc7CgkJc3QtPmNvbXBhc3Nfc3RfbG93ZXJbMV0gPSBEQVRBX0FL TTg5NjNfU1RfWV9MVzsKCQlzdC0+Y29tcGFzc19zdF9sb3dlclsyXSA9IERBVEFfQUtNODk2M19T VF9aX0xXOwoJCWRhdGFbMF0gfD0gKHN0LT5jb21wYXNzX3NjYWxlIDw8IEFLTTg5NjNfU0NBTEVf U0hJRlQpOwoJfQoJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIFJFR19JMkNfU0xW MV9ETywgZGF0YVswXSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CgkvKiBzbGF2ZSAw IGFuZCAxIHRpbWVyIGFjdGlvbiBpcyBlbmFibGVkIGV2ZXJ5IHNhbXBsZSovCglyZXN1bHQgPSBp bnZfaTJjX3NpbmdsZV93cml0ZShzdCwgUkVHX0kyQ19NU1RfREVMQVlfQ1RSTCwKCQkJCUJJVF9T TFYwX0RMWV9FTiB8IEJJVF9TTFYxX0RMWV9FTik7CglyZXR1cm4gcmVzdWx0Owp9CgovKioKICog IGludl9jaGVja19jaGlwX3R5cGUoKSAtIGNoZWNrIGFuZCBzZXR1cCBjaGlwIHR5cGUuCiAqLwpz dGF0aWMgaW50IGludl9jaGVja19jaGlwX3R5cGUoc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0 LAoJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKewoJc3RydWN0IGludl9yZWdfbWFw X3MgKnJlZzsKCWludCByZXN1bHQsIGNoYW5faW5kZXg7CglpbnQgdF9pbmQ7CglpZiAoIXN0cmNt cChpZC0+bmFtZSwgIml0ZzM1MDAiKSkKCQlzdC0+Y2hpcF90eXBlID0gSU5WX0lURzM1MDA7Cgll bHNlIGlmICghc3RyY21wKGlkLT5uYW1lLCAibXB1MzA1MCIpKQoJCXN0LT5jaGlwX3R5cGUgPSBJ TlZfTVBVMzA1MDsKCWVsc2UgaWYgKCFzdHJjbXAoaWQtPm5hbWUsICJtcHU2MDUwIikpCgkJc3Qt PmNoaXBfdHlwZSA9IElOVl9NUFU2MDUwOwoJZWxzZSBpZiAoIXN0cmNtcChpZC0+bmFtZSwgIm1w dTkxNTAiKSkKCQlzdC0+Y2hpcF90eXBlID0gSU5WX01QVTkxNTA7CgllbHNlCgkJcmV0dXJuIC1F UEVSTTsKCXN0LT5odyAgPSAoc3RydWN0IGludl9od19zICopKGh3X2luZm8gICsgc3QtPmNoaXBf dHlwZSk7CglzdC0+bXB1X3NsYXZlID0gTlVMTDsKCWNoYW5faW5kZXggPSAwOwoJaWYgKElOVl9N UFU5MTUwID09IHN0LT5jaGlwX3R5cGUpIHsKCQlzdC0+cGxhdF9kYXRhLnNlY19zbGF2ZV90eXBl ID0gU0VDT05EQVJZX1NMQVZFX1RZUEVfQ09NUEFTUzsKCQlzdC0+cGxhdF9kYXRhLnNlY19zbGF2 ZV9pZCA9IENPTVBBU1NfSURfQUs4OTc1OwoJCXN0LT5oYXNfY29tcGFzcyA9IDE7CgkJY2hhbl9p bmRleCA9IDI7Cgl9CglpZiAoU0VDT05EQVJZX1NMQVZFX1RZUEVfQUNDRUwgPT0gc3QtPnBsYXRf ZGF0YS5zZWNfc2xhdmVfdHlwZSkgewoJCWlmIChBQ0NFTF9JRF9CTUEyNTAgPT0gc3QtPnBsYXRf ZGF0YS5zZWNfc2xhdmVfaWQpCgkJCWludl9yZWdpc3Rlcl9ibWEyNTBfc2xhdmUoc3QpOwoJCWNo YW5faW5kZXggPSAxOwoJfQoJaWYgKFNFQ09OREFSWV9TTEFWRV9UWVBFX0NPTVBBU1MgPT0gc3Qt PnBsYXRfZGF0YS5zZWNfc2xhdmVfdHlwZSkKCQlzdC0+aGFzX2NvbXBhc3MgPSAxOwoJZWxzZQoJ CXN0LT5oYXNfY29tcGFzcyA9IDA7CglpZiAoSU5WX01QVTYwNTAgPT0gc3QtPmNoaXBfdHlwZSkg ewoJCWlmIChzdC0+aGFzX2NvbXBhc3MpCgkJCWNoYW5faW5kZXggPSAyOwoJCWVsc2UKCQkJY2hh bl9pbmRleCA9IDE7Cgl9CglzdC0+Y2hhbl9pbmZvID0gJmNoaXBfY2hhbm5lbF9pbmZvW2NoYW5f aW5kZXhdOwoJcmVnID0gJnN0LT5yZWc7CglpZiAoSU5WX01QVTMwNTAgPT0gc3QtPmNoaXBfdHlw ZSkKCQlpbnZfc2V0dXBfcmVnX21wdTMwNTAocmVnKTsKCWVsc2UKCQlpbnZfc2V0dXBfcmVnKHJl Zyk7CglzdC0+Y2hpcF9jb25maWcuZ3lyb19lbmFibGUgPSAxOwoJcmVzdWx0ID0gaW52X3NldF9w b3dlcl9zdGF0ZShzdCwgMSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CgoJaWYgKElO Vl9JVEczNTAwICE9IHN0LT5jaGlwX3R5cGUgJiYgSU5WX01QVTMwNTAgIT0gc3QtPmNoaXBfdHlw ZSkgewoJCXJlc3VsdCA9IGludl9nZXRfc2lsaWNvbl9yZXZfbXB1NjA1MChzdCk7CgkJaWYgKHJl c3VsdCkgewoJCQlpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5wd3JfbWdtdF8xLAoJCQkJ CUJJVF9TTEVFUCB8IElOVl9DTEtfUExMKTsKCQkJcmV0dXJuIHJlc3VsdDsKCQl9Cgl9CglpZiAo c3QtPmhhc19jb21wYXNzKSB7CgkJcmVzdWx0ID0gaW52X3NldHVwX2NvbXBhc3Moc3QpOwoJCWlm IChyZXN1bHQpIHsKCQkJaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+cHdyX21nbXRfMSwK CQkJCQlCSVRfU0xFRVAgfCBJTlZfQ0xLX1BMTCk7CgkJCXJldHVybiByZXN1bHQ7CgkJfQoJfQoK CXRfaW5kID0gMDsKCW1lbWNweSgmaW52X2F0dHJpYnV0ZXNbdF9pbmRdLCBpbnZfZ3lyb19hdHRy aWJ1dGVzLAoJCQlzaXplb2YoaW52X2d5cm9fYXR0cmlidXRlcykpOwoJdF9pbmQgPSBBUlJBWV9T SVpFKGludl9neXJvX2F0dHJpYnV0ZXMpOwoKCWlmIChJTlZfTVBVMzA1MCA9PSBzdC0+Y2hpcF90 eXBlICYmIHN0LT5tcHVfc2xhdmUgIT0gTlVMTCkgewoJCW1lbWNweSgmaW52X2F0dHJpYnV0ZXNb dF9pbmRdLCBpbnZfbXB1MzA1MF9hdHRyaWJ1dGVzLAoJCQkJc2l6ZW9mKGludl9tcHUzMDUwX2F0 dHJpYnV0ZXMpKTsKCQl0X2luZCArPSBBUlJBWV9TSVpFKGludl9tcHUzMDUwX2F0dHJpYnV0ZXMp OwoJCWludl9hdHRyaWJ1dGVzW3RfaW5kXSA9IE5VTEw7CgkJcmV0dXJuIDA7Cgl9CgoJaWYgKGNo YW5faW5kZXggPiAwKSB7CgkJbWVtY3B5KCZpbnZfYXR0cmlidXRlc1t0X2luZF0sIGludl9tcHU2 MDUwX2F0dHJpYnV0ZXMsCgkJCQlzaXplb2YoaW52X21wdTYwNTBfYXR0cmlidXRlcykpOwoJCXRf aW5kICs9IEFSUkFZX1NJWkUoaW52X21wdTYwNTBfYXR0cmlidXRlcyk7Cgl9CgoJaWYgKGNoYW5f aW5kZXggPiAxKSB7CgkJbWVtY3B5KCZpbnZfYXR0cmlidXRlc1t0X2luZF0sIGludl9jb21wYXNz X2F0dHJpYnV0ZXMsCgkJCQlzaXplb2YoaW52X2NvbXBhc3NfYXR0cmlidXRlcykpOwoJCXRfaW5k ICs9IEFSUkFZX1NJWkUoaW52X2NvbXBhc3NfYXR0cmlidXRlcyk7Cgl9CglpbnZfYXR0cmlidXRl c1t0X2luZF0gPSBOVUxMOwoJcmV0dXJuIDA7Cn0KCi8qKgogKiAgaW52X2NyZWF0ZV9kbXBfc3lz ZnMoKSAtIGNyZWF0ZSBiaW5hcnkgc3lzZnMgZG1wIGVudHJ5LgogKi8Kc3RhdGljIGNvbnN0IHN0 cnVjdCBiaW5fYXR0cmlidXRlIGRtcF9maXJtd2FyZSA9IHsKCS5hdHRyID0gewoJCS5uYW1lID0g ImRtcF9maXJtd2FyZSIsCgkJLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VHTwoJfSwKCS5zaXplID0g NDA5NiwKCS5yZWFkID0gaW52X2RtcF9maXJtd2FyZV9yZWFkLAoJLndyaXRlID0gaW52X2RtcF9m aXJtd2FyZV93cml0ZSwKfTsKCnN0YXRpYyBpbnQgaW52X2NyZWF0ZV9kbXBfc3lzZnMoc3RydWN0 IGlpb19kZXYgKmluZCkKewoJaW50IHJlc3VsdDsKCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9iaW5f ZmlsZSgmaW5kLT5kZXYua29iaiwgJmRtcF9maXJtd2FyZSk7CglyZXR1cm4gcmVzdWx0Owp9Cgov KioKICogIGludl9tcHVfcHJvYmUoKSAtIHByb2JlIGZ1bmN0aW9uLgogKi8Kc3RhdGljIGludCBp bnZfbXB1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCgljb25zdCBzdHJ1Y3QgaTJj X2RldmljZV9pZCAqaWQpCnsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdDsKCXN0cnVjdCBp aW9fZGV2ICppbmRpb19kZXY7CglpbnQgcmVzdWx0LCByZWdfZG9uZTsKCWlmICghaTJjX2NoZWNr X2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CgkJcmVzdWx0 ID0gLUVOT0RFVjsKCQlnb3RvIG91dF9ub19mcmVlOwoJfQoJaW5kaW9fZGV2ID0gaWlvX2FsbG9j YXRlX2RldmljZShzaXplb2YoKnN0KSk7CglpZiAoaW5kaW9fZGV2ID09IE5VTEwpIHsKCQlyZXN1 bHQgPSAgLUVOT01FTTsKCQlnb3RvIG91dF9ub19mcmVlOwoJfQoJcmVnX2RvbmUgPSAwOwoJc3Qg PSBpaW9fcHJpdihpbmRpb19kZXYpOwoJc3QtPmkyYyA9IGNsaWVudDsKCXN0LT5zbF9oYW5kbGUg PSBjbGllbnQtPmFkYXB0ZXI7CglzdC0+aTJjX2FkZHIgPSBjbGllbnQtPmFkZHI7CglzdC0+cGxh dF9kYXRhID0KCQkqKHN0cnVjdCBtcHVfcGxhdGZvcm1fZGF0YSAqKWRldl9nZXRfcGxhdGRhdGEo JmNsaWVudC0+ZGV2KTsKCS8qIHBvd2VyIGlzIHR1cm5lZCBvbiBpbnNpZGUgY2hlY2sgY2hpcCB0 eXBlKi8KCXJlc3VsdCA9IGludl9jaGVja19jaGlwX3R5cGUoc3QsIGlkKTsKCWlmIChyZXN1bHQp CgkJZ290byBvdXRfZnJlZTsKCWlmIChJTlZfTVBVMzA1MCA9PSBzdC0+Y2hpcF90eXBlKQoJCXJl c3VsdCA9IGludl9pbml0X2NvbmZpZ19tcHUzMDUwKGluZGlvX2Rldik7CgllbHNlCgkJcmVzdWx0 ID0gaW52X2luaXRfY29uZmlnKGluZGlvX2Rldik7CglpZiAocmVzdWx0KSB7CgkJZGV2X2Vycigm Y2xpZW50LT5hZGFwdGVyLT5kZXYsCgkJCSJDb3VsZCBub3QgaW5pdGlhbGl6ZSBkZXZpY2UuXG4i KTsKCQlnb3RvIG91dF9mcmVlOwoJfQoJcmVzdWx0ID0gaW52X3NldF9wb3dlcl9zdGF0ZShzdCwg MSk7CglpZiAocmVzdWx0KSB7CgkJZGV2X2VycigmY2xpZW50LT5hZGFwdGVyLT5kZXYsCgkJCSIl cyBjb3VsZCBub3QgYmUgdHVybmVkIG9mZi5cbiIsIHN0LT5ody0+bmFtZSk7CgkJZ290byBvdXRf ZnJlZTsKCX0KCgkvKiBNYWtlIHN0YXRlIHZhcmlhYmxlcyBhdmFpbGFibGUgdG8gYWxsIF9zaG93 IGFuZCBfc3RvcmUgZnVuY3Rpb25zLiAqLwoJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaW5k aW9fZGV2KTsKCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmRldjsKCWluZGlvX2Rl di0+bmFtZSA9IGlkLT5uYW1lOwoJaW5kaW9fZGV2LT5jaGFubmVscyA9IHN0LT5jaGFuX2luZm8t PmNoYW5uZWxzOwoJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBzdC0+Y2hhbl9pbmZvLT5udW1f Y2hhbm5lbHM7CglpbmRpb19kZXYtPmluZm8gPSAmbXB1X2luZm87CglpbmRpb19kZXYtPm1vZGVz ID0gSU5ESU9fRElSRUNUX01PREU7CglpbmRpb19kZXYtPmN1cnJlbnRtb2RlID0gSU5ESU9fRElS RUNUX01PREU7CgoJcmVzdWx0ID0gaW52X21wdV9jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwoJ aWYgKHJlc3VsdCkKCQlnb3RvIG91dF9mcmVlOwoJcmVzdWx0ID0gaWlvX2J1ZmZlcl9yZWdpc3Rl cihpbmRpb19kZXYsIHN0LT5jaGFuX2luZm8tPmNoYW5uZWxzLAoJCQkJCXN0LT5jaGFuX2luZm8t Pm51bV9jaGFubmVscyk7CglpZiAocmVzdWx0KQoJCWdvdG8gb3V0X3VucmVnX3Jpbmc7CglzdC0+ aXJxID0gY2xpZW50LT5pcnE7CglyZXN1bHQgPSBpbnZfbXB1X3Byb2JlX3RyaWdnZXIoaW5kaW9f ZGV2KTsKCWlmIChyZXN1bHQpCgkJZ290byBvdXRfcmVtb3ZlX3Jpbmc7CgoJcmVzdWx0ID0gaWlv X2RldmljZV9yZWdpc3RlcihpbmRpb19kZXYpOwoJaWYgKHJlc3VsdCkKCQlnb3RvIG91dF9yZW1v dmVfdHJpZ2dlcjsKCWlmIChJTlZfTVBVNjA1MCA9PSBzdC0+Y2hpcF90eXBlIHx8IElOVl9NUFU5 MTUwID09IHN0LT5jaGlwX3R5cGUpIHsKCQlyZXN1bHQgPSBpbnZfY3JlYXRlX2RtcF9zeXNmcyhp bmRpb19kZXYpOwoJCWlmIChyZXN1bHQpCgkJCWdvdG8gb3V0X3VucmVnX2lpbzsKCX0KCglJTklU X0tGSUZPKHN0LT50aW1lc3RhbXBzKTsKCXNwaW5fbG9ja19pbml0KCZzdC0+dGltZV9zdGFtcF9s b2NrKTsKCXByX2luZm8oIiVzOiBQcm9iZSBuYW1lICVzXG4iLCBfX2Z1bmNfXywgaWQtPm5hbWUp OwoJZGV2X2luZm8oJmNsaWVudC0+YWRhcHRlci0+ZGV2LCAiJXMgaXMgcmVhZHkgdG8gZ28hXG4i LCBzdC0+aHctPm5hbWUpOwoJcmV0dXJuIDA7Cm91dF91bnJlZ19paW86CglpaW9fZGV2aWNlX3Vu cmVnaXN0ZXIoaW5kaW9fZGV2KTsKb3V0X3JlbW92ZV90cmlnZ2VyOgoJaWYgKGluZGlvX2Rldi0+ bW9kZXMgJiBJTkRJT19CVUZGRVJfVFJJR0dFUkVEKQoJCWludl9tcHVfcmVtb3ZlX3RyaWdnZXIo aW5kaW9fZGV2KTsKb3V0X3JlbW92ZV9yaW5nOgoJaWlvX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlv X2Rldik7Cm91dF91bnJlZ19yaW5nOgoJaW52X21wdV91bmNvbmZpZ3VyZV9yaW5nKGluZGlvX2Rl dik7Cm91dF9mcmVlOgoJaWlvX2ZyZWVfZGV2aWNlKGluZGlvX2Rldik7Cm91dF9ub19mcmVlOgoJ ZGV2X2VycigmY2xpZW50LT5hZGFwdGVyLT5kZXYsICIlcyBmYWlsZWQgJWRcbiIsIF9fZnVuY19f LCByZXN1bHQpOwoJcmV0dXJuIC1FSU87Cn0KCi8qKgogKiAgaW52X21wdV9yZW1vdmUoKSAtIHJl bW92ZSBmdW5jdGlvbi4KICovCnN0YXRpYyBpbnQgaW52X21wdV9yZW1vdmUoc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCkKewoJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGkyY19nZXRfY2xp ZW50ZGF0YShjbGllbnQpOwoJc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYo aW5kaW9fZGV2KTsKCWtmaWZvX2ZyZWUoJnN0LT50aW1lc3RhbXBzKTsKCWlpb19kZXZpY2VfdW5y ZWdpc3RlcihpbmRpb19kZXYpOwoJaW52X21wdV9yZW1vdmVfdHJpZ2dlcihpbmRpb19kZXYpOwoJ aWlvX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldik7CglpbnZfbXB1X3VuY29uZmlndXJlX3Jp bmcoaW5kaW9fZGV2KTsKCWlpb19mcmVlX2RldmljZShpbmRpb19kZXYpOwoKCWRldl9pbmZvKCZj bGllbnQtPmFkYXB0ZXItPmRldiwgImludi1tcHUgbW9kdWxlIHJlbW92ZWQuXG4iKTsKCXJldHVy biAwOwp9CnN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19D TElFTlRfRU5EIH07Ci8qIGRldmljZSBpZCB0YWJsZSBpcyB1c2VkIHRvIGlkZW50aWZ5IHdoYXQg ZGV2aWNlIGNhbiBiZQogKiBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKICovCnN0YXRpYyBjb25z dCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpbnZfbXB1X2lkW10gPSB7Cgl7Iml0ZzM1MDAiLCBJTlZf SVRHMzUwMH0sCgl7Im1wdTMwNTAiLCBJTlZfTVBVMzA1MH0sCgl7Im1wdTYwNTAiLCBJTlZfTVBV NjA1MH0sCgl7Im1wdTkxNTAiLCBJTlZfTVBVOTE1MH0sCgl7fQp9OwoKTU9EVUxFX0RFVklDRV9U QUJMRShpMmMsIGludl9tcHVfaWQpOwoKc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGludl9tcHVf ZHJpdmVyID0gewoJLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OLAoJLnByb2JlCQk9CWludl9tcHVf cHJvYmUsCgkucmVtb3ZlCQk9CWludl9tcHVfcmVtb3ZlLAoJLmlkX3RhYmxlCT0JaW52X21wdV9p ZCwKCS5kcml2ZXIgPSB7CgkJLm93bmVyCT0JVEhJU19NT0RVTEUsCgkJLm5hbWUJPQkiaW52LW1w dSIsCgl9LAoJLmFkZHJlc3NfbGlzdCA9IG5vcm1hbF9pMmMsCn07CgpzdGF0aWMgaW50IF9faW5p dCBpbnZfbXB1X2luaXQodm9pZCkKewoJaW50IHJlc3VsdCA9IGkyY19hZGRfZHJpdmVyKCZpbnZf bXB1X2RyaXZlcik7CglpZiAocmVzdWx0KSB7CgkJcHJfZXJyKCIlcyBmYWlsZWRcbiIsIF9fZnVu Y19fKTsKCQlyZXR1cm4gcmVzdWx0OwoJfQoJcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkIF9fZXhp dCBpbnZfbXB1X2V4aXQodm9pZCkKewoJaTJjX2RlbF9kcml2ZXIoJmludl9tcHVfZHJpdmVyKTsK fQoKbW9kdWxlX2luaXQoaW52X21wdV9pbml0KTsKbW9kdWxlX2V4aXQoaW52X21wdV9leGl0KTsK Ck1PRFVMRV9BVVRIT1IoIkludmVuc2Vuc2UgQ29ycG9yYXRpb24iKTsKTU9EVUxFX0RFU0NSSVBU SU9OKCJJbnZlbnNlbnNlIGRldmljZSBkcml2ZXIiKTsKTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpN T0RVTEVfQUxJQVMoImludi1tcHUiKTsKLyoqCiAqICBAfQogKi8KCgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAGludl9tcHVfaWlvLmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAw NjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDA1MzE0NAAxMTc1MzMwNzQ3MAAwMTIxNzYAIDAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABnZ2FvAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdnYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAALyoKKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW52ZW5zZW5zZSwgSW5jLgoqCiogVGhp cyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYwoqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgYW5kCiogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBt b2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKgoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAoqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQoqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCioKKi8KCi8qKgogKiAg QGFkZHRvZ3JvdXAgRFJJVkVSUwogKiAgQGJyaWVmICAgICAgSGFyZHdhcmUgZHJpdmVycy4KICoK ICogIEB7CiAqICAgICAgQGZpbGUgIGludl9neXJvLmgKICogICAgICBAYnJpZWYgU3RydWN0IGRl ZmluaXRpb25zIGZvciB0aGUgSW52ZW5zZW5zZSBneXJvIGRyaXZlci4KICovCgojaWZuZGVmIF9J TlZfR1lST19IXwojZGVmaW5lIF9JTlZfR1lST19IXwoKI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgoj aW5jbHVkZSA8bGludXgva2ZpZm8uaD4KI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KI2lu Y2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgojaW5jbHVk ZSA8bGludXgvbXB1Lmg+CiNpbmNsdWRlICIuLi8uLi9paW8uaCIKI2luY2x1ZGUgIi4uLy4uL2J1 ZmZlci5oIgojaW5jbHVkZSAiZG1wS2V5LmgiCi8qKgogKiAgc3RydWN0IGludl9yZWdfbWFwX3Mg LSBOb3RhYmxlIHNsYXZlIHJlZ2lzdGVycy4KICogIEB3aG9fYW1faToJCVVwcGVyIDYgYml0cyBv ZiB0aGUgZGV2aWNlJ3Mgc2xhdmUgYWRkcmVzcy4KICogIEBzYW1wbGVfcmF0ZV9kaXY6CURpdmlk ZXIgYXBwbGllZCB0byBneXJvIG91dHB1dCByYXRlLgogKiAgQGxwZjoJCUNvbmZpZ3VyZXMgaW50 ZXJuYWwgTFBGLgogKiAgQHByb2R1Y3RfaWQ6CVByb2R1Y3QgcmV2aXNpb24uCiAqICBAYmFua19z ZWw6CQlTZWxlY3RzIGJldHdlZW4gbWVtb3J5IGJhbmtzLgogKiAgQHVzZXJfY3RybDoJCUVuYWJs ZXMvcmVzZXRzIHRoZSBGSUZPLgogKiAgQGZpZm9fZW46CQlEZXRlcm1pbmVzIHdoaWNoIGRhdGEg d2lsbCBhcHBlYXIgaW4gRklGTy4KICogIEBneXJvX2NvbmZpZzoJZ3lybyBjb25maWcgcmVnaXN0 ZXIuCiAqICBAYWNjbF9jb25maWc6CWFjY2VsIGNvbmZpZyByZWdpc3RlcgogKiAgQGZpZm9fY291 bnRfaDoJVXBwZXIgYnl0ZSBvZiBGSUZPIGNvdW50LgogKiAgQGZpZm9fcl93OgkJRklGTyByZWdp c3Rlci4KICogIEByYXdfZ3lybwkJQWRkcmVzcyBvZiBmaXJzdCBneXJvIHJlZ2lzdGVyLgogKiAg QHJhd19hY2NsCQlBZGRyZXNzIG9mIGZpcnN0IGFjY2VsIHJlZ2lzdGVyLgogKiAgQHRlbXBlcmF0 dXJlCXRlbXBlcmF0dXJlIHJlZ2lzdGVyCiAqICBAaW50X2VuYWJsZToJSW50ZXJydXB0IGVuYWJs ZSByZWdpc3Rlci4KICogIEBpbnRfc3RhdHVzOglJbnRlcnJ1cHQgZmxhZ3MuCiAqICBAcHdyX21n bXRfMToJQ29udHJvbHMgY2hpcCdzIHBvd2VyIHN0YXRlIGFuZCBjbG9jayBzb3VyY2UuCiAqICBA cHdyX21nbXRfMjoJQ29udHJvbHMgcG93ZXIgc3RhdGUgb2YgaW5kaXZpZHVhbCBzZW5zb3JzLgog KiAgQG1lbV9zdGFydF9hZGRyOglBZGRyZXNzIG9mIGZpcnN0IG1lbW9yeSByZWFkLgogKiAgQG1l bV9yX3c6CQlBY2Nlc3MgdG8gbWVtb3J5LgogKiAgQHByZ21fc3RydF9hZGRyaAlmaXJtd2FyZSBw cm9ncmFtIHN0YXJ0IGFkZHJlc3MgcmVnaXN0ZXIKICovCnN0cnVjdCBpbnZfcmVnX21hcF9zIHsK CXVuc2lnbmVkIGNoYXIgd2hvX2FtX2k7Cgl1bnNpZ25lZCBjaGFyIHNhbXBsZV9yYXRlX2RpdjsK CXVuc2lnbmVkIGNoYXIgbHBmOwoJdW5zaWduZWQgY2hhciBwcm9kdWN0X2lkOwoJdW5zaWduZWQg Y2hhciBiYW5rX3NlbDsKCXVuc2lnbmVkIGNoYXIgdXNlcl9jdHJsOwoJdW5zaWduZWQgY2hhciBm aWZvX2VuOwoJdW5zaWduZWQgY2hhciBneXJvX2NvbmZpZzsKCXVuc2lnbmVkIGNoYXIgYWNjbF9j b25maWc7Cgl1bnNpZ25lZCBjaGFyIGZpZm9fY291bnRfaDsKCXVuc2lnbmVkIGNoYXIgZmlmb19y X3c7Cgl1bnNpZ25lZCBjaGFyIHJhd19neXJvOwoJdW5zaWduZWQgY2hhciByYXdfYWNjbDsKCXVu c2lnbmVkIGNoYXIgdGVtcGVyYXR1cmU7Cgl1bnNpZ25lZCBjaGFyIGludF9lbmFibGU7Cgl1bnNp Z25lZCBjaGFyIGludF9zdGF0dXM7Cgl1bnNpZ25lZCBjaGFyIHB3cl9tZ210XzE7Cgl1bnNpZ25l ZCBjaGFyIHB3cl9tZ210XzI7Cgl1bnNpZ25lZCBjaGFyIG1lbV9zdGFydF9hZGRyOwoJdW5zaWdu ZWQgY2hhciBtZW1fcl93OwoJdW5zaWduZWQgY2hhciBwcmdtX3N0cnRfYWRkcmg7Cn07CgplbnVt IGludl9kZXZpY2VzIHsKCUlOVl9JVEczNTAwID0gMCwKCUlOVl9NUFUzMDUwID0gMSwKCUlOVl9N UFU2MDUwID0gMiwKCUlOVl9NUFU5MTUwID0gMywKCUlOVl9OVU1fUEFSVFMKfTsKCi8qKgogKiAg c3RydWN0IHRlc3Rfc2V0dXBfdCAtIHNldCB1cCBwYXJhbWV0ZXJzIGZvciBzZWxmIHRlc3QuCiAq ICBAZ3lyb19zZW5zOiBzZW5zaXRpdHkgZm9yIGd5cm8uCiAqICBAc2FtcGxlX3JhdGU6IHNhbXBs ZSByYXRlLCBpLmUsIGZpZm8gcmF0ZS4KICogIEBscGY6CWxvdyBwYXNzIGZpbHRlci4KICogIEBm c3I6CWZ1bGwgc2NhbGUgcmFuZ2UuCiAqICBAYWNjbF9mczoJYWNjZWwgZnVsbCBzY2FsZSByYW5n ZS4KICogIEBhY2NsX3NlbnM6CWFjY2VsIHNlbnNpdGl2aXR5CiAqLwpzdHJ1Y3QgdGVzdF9zZXR1 cF90IHsKCWludCBneXJvX3NlbnM7CglpbnQgc2FtcGxlX3JhdGU7CglpbnQgbHBmOwoJaW50IGZz cjsKCWludCBhY2NsX2ZzOwoJdW5zaWduZWQgaW50IGFjY2xfc2Vuc1szXTsKfTsKCi8qKgogKiAg c3RydWN0IGludl9od19zIC0gT3RoZXIgaW1wb3J0YW50IGhhcmR3YXJlIGluZm9ybWF0aW9uLgog KiAgQG51bV9yZWc6CU51bWJlciBvZiByZWdpc3RlcnMgb24gZGV2aWNlLgogKiAgQG5hbWU6ICAg ICAgbmFtZSBvZiB0aGUgY2hpcAogKi8Kc3RydWN0IGludl9od19zIHsKCXVuc2lnbmVkIGNoYXIg bnVtX3JlZzsKCXVuc2lnbmVkIGNoYXIgKm5hbWU7Cn07CgovKioKICogIHN0cnVjdCBpbnZfY2hp cF9jb25maWdfcyAtIENhY2hlZCBjaGlwIGNvbmZpZ3VyYXRpb24gZGF0YS4KICogIEBmc3I6CQlG dWxsIHNjYWxlIHJhbmdlLgogKiAgQGxwZjoJCURpZ2l0YWwgbG93IHBhc3MgZmlsdGVyIGZyZXF1 ZW5jeS4KICogIEBjbGtfc3JjOgkJQ2xvY2sgc291cmNlLgogKiAgQGFjY2xfZnM6CQlhY2NlbCBm dWxsIHNjYWxlIHJhbmdlLgogKiAgQGZpZm9fcmF0ZToJCUZJRk8gdXBkYXRlIHJhdGUuCiAqICBA ZW5hYmxlOgkJbWFzdGVyIGVuYWJsZSB0byBlbmFibGUgb3V0cHV0CiAqICBAYWNjbF9lbmFibGU6 CWVuYWJsZSBhY2NlbCBmdW5jdGlvbmFsaXR5CiAqICBAYWNjbF9maWZvX2VuYWJsZToJZW5hYmxl IGFjY2VsIGRhdGEgb3V0cHV0CiAqICBAZ3lyb19lbmFibGU6CWVuYWJsZSBneXJvIGZ1bmN0aW9u YWxpdHkKICogIEBneXJvX2ZpZm9fZW5hYmxlOgllbmFibGUgZ3lybyBkYXRhIG91dHB1dAogKiAg QGNvbXBhc3NfZW5hYmxlOgllbmFibGUgY29tcGFzcwogKiAgQGNvbXBhc3NfZmlmb19lbmFibGU6 IGVuYWJsZSBjb21wYXNzIGRhdGEgb3V0cHV0CiAqICBAaXNfYXNsZWVwOgkJMSBpZiBjaGlwIGlz IHBvd2VyZWQgZG93bi4KICogIEBkbXBfb246CQlkbXAgaXMgb24vb2ZmCiAqICBAb3JpZW50YXRp b25fb246CWRtcCBpcyBvbi9vZmYKICogIEBmaXJtd2FyZV9sb2FkZWQ6CWZsYWcgaW5kaWNhdGUg ZmlybXdhcmUgbG9hZGVkIG9yIG5vdC4KICogIEBscGFfbW9kOgkJbG93IHBvd2VyIG1vZGUKICog IEBscGFfZnJlcToJCWxvdyBwb3dlciBmcmVxdWVuY3kKICogIEBwcm9nX3N0YXJ0X2FkZHI6CWZp cm13YXJlIHByb2dyYW0gc3RhcnQgYWRkcmVzcwogKi8Kc3RydWN0IGludl9jaGlwX2NvbmZpZ19z IHsKCXVuc2lnbmVkIGNoYXIgZnNyOwoJdW5zaWduZWQgY2hhciBscGY7Cgl1bnNpZ25lZCBjaGFy IGNsa19zcmM7Cgl1bnNpZ25lZCBjaGFyIGFjY2xfZnM7Cgl1bnNpZ25lZCBzaG9ydCBmaWZvX3Jh dGU7Cgl1bnNpZ25lZCBjaGFyIGVuYWJsZTsKCXVuc2lnbmVkIGNoYXIgYWNjbF9lbmFibGU7Cgl1 bnNpZ25lZCBjaGFyIGFjY2xfZmlmb19lbmFibGU7Cgl1bnNpZ25lZCBjaGFyIGd5cm9fZW5hYmxl OwoJdW5zaWduZWQgY2hhciBneXJvX2ZpZm9fZW5hYmxlOwoJdW5zaWduZWQgY2hhciBjb21wYXNz X2VuYWJsZTsKCXVuc2lnbmVkIGNoYXIgY29tcGFzc19maWZvX2VuYWJsZTsKCXVuc2lnbmVkIGNo YXIgaXNfYXNsZWVwOwoJdW5zaWduZWQgY2hhciBkbXBfb247Cgl1bnNpZ25lZCBjaGFyIG9yaWVu dGF0aW9uX29uOwoJdW5zaWduZWQgY2hhciBmaXJtd2FyZV9sb2FkZWQ7Cgl1bnNpZ25lZCBjaGFy IGxwYV9tb2RlOwoJdW5zaWduZWQgY2hhciBscGFfZnJlcTsKCXVuc2lnbmVkIGludCAgcHJvZ19z dGFydF9hZGRyOwp9OwoKLyoqCiAqICBzdHJ1Y3QgaW52X2NoaXBfaW5mb19zIC0gQ2hpcCByZWxh dGVkIGluZm9ybWF0aW9uLgogKiAgQHByb2R1Y3RfaWQ6CVByb2R1Y3QgaWQuCiAqICBAcHJvZHVj dF9yZXZpc2lvbjoJUHJvZHVjdCByZXZpc2lvbi4KICogIEBzaWxpY29uX3JldmlzaW9uOglTaWxp Y29uIHJldmlzaW9uLgogKiAgQHNvZnR3YXJlX3JldmlzaW9uOglzb2Z0d2FyZSByZXZpc2lvbi4K ICogIEBtdWx0aToJCWFjY2VsIHNwZWNpZmljIG11bHRpcGxpZXIuCiAqICBAY29tcGFzc19zZW5z Ogljb21wYXNzIHNlbnNpdGl2aXR5LgogKiAgQGd5cm9fc2Vuc190cmltOglHeXJvIHNlbnNpdGl2 aXR5IHRyaW0gZmFjdG9yLgogKiAgQGFjY2xfc2Vuc190cmltOiAgICBhY2NlbCBzZW5zaXRpdml0 eSB0cmltIGZhY3Rvci4KICovCnN0cnVjdCBpbnZfY2hpcF9pbmZvX3MgewoJdW5zaWduZWQgY2hh ciBwcm9kdWN0X2lkOwoJdW5zaWduZWQgY2hhciBwcm9kdWN0X3JldmlzaW9uOwoJdW5zaWduZWQg Y2hhciBzaWxpY29uX3JldmlzaW9uOwoJdW5zaWduZWQgY2hhciBzb2Z0d2FyZV9yZXZpc2lvbjsK CXVuc2lnbmVkIGNoYXIgbXVsdGk7Cgl1bnNpZ25lZCBjaGFyIGNvbXBhc3Nfc2Vuc1szXTsKCXVu c2lnbmVkIGxvbmcgZ3lyb19zZW5zX3RyaW07Cgl1bnNpZ25lZCBsb25nIGFjY2xfc2Vuc190cmlt Owp9OwovKioKICogIHN0cnVjdCBpbnZfY2hpcF9jaGFuX2luZm8gLSBDaGlwIGNoYW5uZWwgaW5m b3JtYXRpb24uCiAqICBAY2hhbm5lbHM6CWNoYW5uZWwgc3BlY2lmaWNhdGlvbi4KICogIEBudW1f Y2hhbm5lbHM6CW51bWJlciBvZiBjaGFubmVscy4KICogIEBkZWZhdWx0X3NjYW5fbWFzazoJc2Nh biBtYXNrIHVzZWQgaW4gY2hhbm5lbCBzY2FuLgogKi8Kc3RydWN0IGludl9jaGlwX2NoYW5faW5m byB7Cgljb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hhbm5lbHM7CglpbnQgbnVtX2NoYW5u ZWxzOwoJaW50IGRlZmF1bHRfc2Nhbl9tYXNrOwp9OwoKLyoqCiAqICBzdHJ1Y3QgaW52X2ZsaWNr X3Mgc3RydWN0dXJlIHRvIHN0b3JlIGZsaWNrIGRhdGEuCiAqICBAbG93ZXI6CWxvd2VyIGJvdW5k IG9mIGZsaWNrLgogKiAgQHVwcGVyOiAgICAgdXBwZXIgYm91bmQgb2YgZmxpY2suCiAqICBAY291 bnRlcjoJY291bnRlciBvZiBmbGljay4KICogIEBpbnRfb246CWludGVycnVwdCBvbiBmb3IgZmxp Y2suCiAqICBAbXNnX29uOyAgICBtZXNzYWdlIHRvIGNhcnJ5IGZsaWNrCiAqICBAYXhpczogICAg ICBheGlzIG9mIGZsaWNrCiAqLwpzdHJ1Y3QgaW52X2ZsaWNrX3MgewoJaW50IGxvd2VyOwoJaW50 IHVwcGVyOwoJaW50IGNvdW50ZXI7CgljaGFyIGludF9vbjsKCWNoYXIgbXNnX29uOwoJY2hhciBh eGlzOwp9OwovKioKICogIHN0cnVjdCBpbnZfdGFwX3Mgc3RydWN0dXJlIHRvIHN0b3JlIHRhcCBk YXRhLgogKiAgQHRhcF9vbjoJdGFwIG9uCiAqICBAbWluX2NvdW50OiAgbWluaW11bSB0YXBzIGNv dW50ZWQuCiAqICBAdGhyZXNoOiAgICB0YXAgdGhyZXNob2xkLgogKiAgQHRpbWU6CXRhcCB0aW1l LgogKi8Kc3RydWN0IGludl90YXBfcyB7CgljaGFyIG9uOwoJY2hhciBtaW5fY291bnQ7CglzaG9y dCB0aHJlc2g7CglzaG9ydCB0aW1lOwp9OwpzdHJ1Y3QgaW52X21wdV9zbGF2ZTsKLyoqCiAqICBz dHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAtIERyaXZlciBzdGF0ZSB2YXJpYWJsZXMuCiAqICBAY2hp cF9jb25maWc6CUNhY2hlZCBhdHRyaWJ1dGUgaW5mb3JtYXRpb24uCiAqICBAY2hpcF9pbmZvOgkJ Q2hpcCBpbmZvcm1hdGlvbiBmcm9tIHJlYWQtb25seSByZWdpc3RlcnMuCiAqICBAdHJpZzsgICAg ICAgICAgICAgIGlpbyB0cmlnZ2VyLgogKiAgQGZsaWNrOgkJZmxpY2sgZGF0YSBzdHJ1Y3R1cmUK ICogIEB0YXA6ICAgICAgICAgICAgICAgdGFwIGRhdGEgc3RydWN0dXJlCiAqICBAcmVnOgkJTWFw IG9mIGltcG9ydGFudCByZWdpc3RlcnMuCiAqICBAaHc6CQlPdGhlciBoYXJkd2FyZS1zcGVjaWZp YyBpbmZvcm1hdGlvbi4KICogIEBjaGlwX3R5cGU6CQljaGlwIHR5cGUuCiAqICBAdGltZV9zdGFt cF9sb2NrOglzcGluIGxvY2sgdG8gdGltZSBzdGFtcC4KICogIEBpMmM6CQlpMmMgY2xpZW50IGhh bmRsZS4KICogIEBwbGF0X2RhdGE6CQlwbGF0Zm9ybSBkYXRhLgogKiAgQG1wdV9zbGF2ZToJCW1w dSBzbGF2ZSBoYW5kbGUuCiAqICBAY2hhbl9pbmZvOiAgICAgICAgIGNoYW5uZWwgaW5mb3JtYXRp b24KICogIEB0aW1lc3RhbXBzOiAgICAgICAga2ZpZm8gcXVldWUgdG8gc3RvcmUgdGltZSBzdGFt cC4KICogIEBjb21wYXNzX3N0X3VwcGVyOiAgY29tcGFzcyBzZWxmIHRlc3QgdXBwZXIgbGltaXQu CiAqICBAY29tcGFzc19zdF9sb3dlcjogIGNvbXBhc3Mgc2VsZiB0ZXN0IGxvd2VyIGxpbWl0Lgog KiAgQGlycTogICAgICAgICAgICAgICBpcnEgbnVtYmVyIHN0b3JlLgogKiAgQGFjY2VsX2JpYXM6 ICAgICAgICBhY2NlbCBiaWFzIHN0b3JlLgogKiAgQGd5cm9fYmlhczogICAgICAgICBneXJvIGJp YXMgc3RvcmUuCiAqICBAcmF3X2d5cm86ICAgICAgICAgIHJhdyBneXJvIGRhdGEuCiAqICBAcmF3 X2FjY2VsOiAgICAgICAgIHJhdyBhY2NlbCBkYXRhLgogKiAgQHJhd19jb21wYXNzOiAgICAgICBy YXcgY29tcGFzcy4KICogIEBmaWZvX2NvdW50ZXI6CU1QVTMwNTAgc3BlY2lmaWMgd29yayBhcm91 bmQuCiAqICBAaGFzX2NvbXBhc3M6CWhhcyBjb21wYXNzIG9yIG5vdC4KICogIEBjb21wYXNzX3Nj YWxlOgljb21wYXNzIHNjYWxlLgogKiAgQGkyY19hZGRyOgkJaTJjIGFkZHJlc3MuCiAqICBAY29t cGFzc19kaXZpZGVyOglzbG93IGRvd24gY29tcGFzcyByYXRlLgogKiAgQGNvbXBhc3NfY291bnRl cjoJc2xvdyBkb3duIGNvbXBhc3MgcmF0ZS4KICogIEBzYW1wbGVfZGl2aWRlcjogICAgc2FtcGxl IGRpdmlkZXIgZm9yIGRtcC4KICogIEBmaWZvX2RpdmlkZXI6ICAgICAgZmlmbyBkaXZpZGVyIGZv ciBkbXAuCiAqICBAb3JpZW50X2RhdGE6ICAgICAgIG9yaWVudGF0aW9uIGRhdGEuCiAqICBAdGFw X2RhdGE6ICAgICAgICAgIHRhcCBkYXRhLgogKiAgQHNsX2hhbmRsZTogICAgICAgICBIYW5kbGUg dG8gSTJDIHBvcnQuCiAqICBAaXJxX2R1cl91czoJZHVyYXRpb24gYmV0d2VlbiBlYWNoIGlycS4K ICogIEBsYXN0X2lzcl90aW1lOglsYXN0IGlzciB0aW1lLgogKi8Kc3RydWN0IGludl9neXJvX3N0 YXRlX3MgewojZGVmaW5lIFRJTUVTVEFNUF9GSUZPX1NJWkUgMTYKCXN0cnVjdCBpbnZfY2hpcF9j b25maWdfcyBjaGlwX2NvbmZpZzsKCXN0cnVjdCBpbnZfY2hpcF9pbmZvX3MgY2hpcF9pbmZvOwoJ c3RydWN0IGlpb190cmlnZ2VyICAqdHJpZzsKCXN0cnVjdCBpbnZfZmxpY2tfcyBmbGljazsKCXN0 cnVjdCBpbnZfdGFwX3MgICB0YXA7CglzdHJ1Y3QgaW52X3JlZ19tYXBfcyByZWc7CglzdHJ1Y3Qg aW52X2h3X3MgKmh3OwoJZW51bSAgIGludl9kZXZpY2VzIGNoaXBfdHlwZTsKCXNwaW5sb2NrX3Qg dGltZV9zdGFtcF9sb2NrOwoJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKCXN0cnVjdCBtcHVfcGxh dGZvcm1fZGF0YSBwbGF0X2RhdGE7CglzdHJ1Y3QgaW52X21wdV9zbGF2ZSAqbXB1X3NsYXZlOwoJ c3RydWN0IGludl9jaGlwX2NoYW5faW5mbyAqY2hhbl9pbmZvOwoJREVDTEFSRV9LRklGTyh0aW1l c3RhbXBzLCBsb25nIGxvbmcsIFRJTUVTVEFNUF9GSUZPX1NJWkUpOwoJc2hvcnQgY29tcGFzc19z dF91cHBlclszXTsKCXNob3J0IGNvbXBhc3Nfc3RfbG93ZXJbM107CglzaG9ydCBpcnE7CglpbnQg YWNjZWxfYmlhc1szXTsKCWludCBneXJvX2JpYXNbM107CglzaG9ydCByYXdfZ3lyb1szXTsKCXNo b3J0IHJhd19hY2NlbFszXTsKCXNob3J0IHJhd19jb21wYXNzWzNdOwoJdW5zaWduZWQgY2hhciBm aWZvX2NvdW50ZXI7Cgl1bnNpZ25lZCBjaGFyIGhhc19jb21wYXNzOwoJdW5zaWduZWQgY2hhciBj b21wYXNzX3NjYWxlOwoJdW5zaWduZWQgY2hhciBpMmNfYWRkcjsKCXVuc2lnbmVkIGNoYXIgY29t cGFzc19kaXZpZGVyOwoJdW5zaWduZWQgY2hhciBjb21wYXNzX2NvdW50ZXI7Cgl1bnNpZ25lZCBj aGFyIHNhbXBsZV9kaXZpZGVyOwoJdW5zaWduZWQgY2hhciBmaWZvX2RpdmlkZXI7Cgl1bnNpZ25l ZCBjaGFyIG9yaWVudF9kYXRhOwoJdW5zaWduZWQgY2hhciB0YXBfZGF0YTsKCXVuc2lnbmVkIGNo YXIgc2VsZl90ZXN0X3J1bl9vbmNlOwoJdm9pZCAqc2xfaGFuZGxlOwoJdW5zaWduZWQgaW50IGly cV9kdXJfdXM7Cglsb25nIGxvbmcgbGFzdF9pc3JfdGltZTsKfTsKLyogcHJvZHVjZXMgYW4gdW5p cXVlIGlkZW50aWZpZXIgZm9yIGVhY2ggZGV2aWNlIGJhc2VkIG9uIHRoZQogICBjb21iaW5hdGlv biBvZiBwcm9kdWN0IHZlcnNpb24gYW5kIHByb2R1Y3QgcmV2aXNpb24gKi8Kc3RydWN0IHByb2Rf cmV2X21hcF90IHsKCXVuc2lnbmVkIHNob3J0IG1wbF9wcm9kdWN0X2tleTsKCXVuc2lnbmVkIGNo YXIgc2lsaWNvbl9yZXY7Cgl1bnNpZ25lZCBzaG9ydCBneXJvX3RyaW07Cgl1bnNpZ25lZCBzaG9y dCBhY2NlbF90cmltOwp9OwovKioKICogIHN0cnVjdCBpbnZfbXB1X3NsYXZlIC0gTVBVIHNsYXZl IHN0cnVjdHVyZS4KICogIEBzdXNwZW5kOgkJc3VzcGVuZCBvcGVyYXRpb24uCiAqICBAcmVzdW1l OgkJcmVzdW1lIG9wZXJhdGlvbi4KICogIEBzZXR1cDoJCXNldHVwIGNoaXAuIGluaXRpYWxpemF0 aW9uLgogKiAgQGNvbWJpbmVfZGF0YToJY29tYmluZSByYXcgZGF0YSBpbnRvIG1lYW5pbmdmdWwg ZGF0YS4KICogIEBnZXRfbW9kZToJCWdldCBjdXJyZW50IGNoaXAgbW9kZS4KICogIEBzZXRfbHBm ICAgICAgICAgICAgc2V0IGxvdyBwYXNzIGZpbHRlci4KICogIEBzZXRfZnMgICAgICAgICAgICAg c2V0IGZ1bGwgc2NhbGUKICovCnN0cnVjdCBpbnZfbXB1X3NsYXZlIHsKCWludCAoKnN1c3BlbmQp KHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICopOwoJaW50ICgqcmVzdW1lKShzdHJ1Y3QgaW52X2d5 cm9fc3RhdGVfcyAqKTsKCWludCAoKnNldHVwKShzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqKTsK CWludCAoKmNvbWJpbmVfZGF0YSkodW5zaWduZWQgY2hhciAqaW4sIHNob3J0ICpvdXQpOwoJaW50 ICgqZ2V0X21vZGUpKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICopOwoJaW50ICgqc2V0X2xwZiko c3RydWN0IGludl9neXJvX3N0YXRlX3MgKiwgaW50IHJhdGUpOwoJaW50ICgqc2V0X2ZzKShzdHJ1 Y3QgaW52X2d5cm9fc3RhdGVfcyAqLCBpbnQgZnMpOwp9OwovKiBBS00gZGVmaW5pdGlvbnMgKi8K I2RlZmluZSBSRUdfQUtNX0lEICAgICAgICAgICAgICAoMHgwMCkKI2RlZmluZSBSRUdfQUtNX1NU QVRVUyAgICAgICAgICAoMHgwMikKI2RlZmluZSBSRUdfQUtNX01FQVNVUkVfREFUQSAgICAoMHgw MykKI2RlZmluZSBSRUdfQUtNX01PREUgICAgICAgICAgICAoMHgwQSkKI2RlZmluZSBSRUdfQUtN X1NUX0NUUkwgICAgICAgICAoMHgwQykKI2RlZmluZSBSRUdfQUtNX1NFTlNJVElWSVRZICAgICAo MHgxMCkKI2RlZmluZSBSRUdfQUtNODk2M19DTlRMMSAgICAgICAoMHgwQSkKCiNkZWZpbmUgREFU QV9BS01fSUQgICAgICAgICAgICAgKDB4NDgpCiNkZWZpbmUgREFUQV9BS01fTU9ERV9QV19ETiAg ICAgKDB4MDApCiNkZWZpbmUgREFUQV9BS01fTU9ERV9QV19TTSAgICAgKDB4MDEpCiNkZWZpbmUg REFUQV9BS01fTU9ERV9QV19TVCAgICAgKDB4MDgpCiNkZWZpbmUgREFUQV9BS01fTU9ERV9QV19G UiAgICAgKDB4MEYpCiNkZWZpbmUgREFUQV9BS01fU0VMRl9URVNUICAgICAgKDB4NDApCiNkZWZp bmUgREFUQV9BS01fRFJEWSAgICAgICAgICAgKDB4MDEpCiNkZWZpbmUgREFUQV9BS004OTYzX0JJ VCAgICAgICAgKDB4MTApCiNkZWZpbmUgREFUQV9BS01fU1RBVF9NQVNLICAgICAgKDB4MEMpCgoj ZGVmaW5lIERBVEFfQUtNODk3NV9TQ0FMRSAgICAgICg5ODMwKQojZGVmaW5lIERBVEFfQUtNODk3 Ml9TQ0FMRSAgICAgICgxOTY2MSkKI2RlZmluZSBEQVRBX0FLTTg5NjNfU0NBTEUwICAgICAoMTk2 NjEpCiNkZWZpbmUgREFUQV9BS004OTYzX1NDQUxFMSAgICAgKDQ5MTUpCiNkZWZpbmUgQUtNODk2 M19TQ0FMRV9TSElGVCAgICAgKDQpCiNkZWZpbmUgTlVNX0JZVEVTX0NPTVBBU1NfU0xBVkUgKDgp CgojZGVmaW5lIERBVEFfQUtNODk3NV9TVF9YX1VQICAgICgxMDApCiNkZWZpbmUgREFUQV9BS004 OTc1X1NUX1hfTFcgICAgKC0xMDApCiNkZWZpbmUgREFUQV9BS004OTc1X1NUX1lfVVAgICAgKDEw MCkKI2RlZmluZSBEQVRBX0FLTTg5NzVfU1RfWV9MVyAgICAoLTEwMCkKI2RlZmluZSBEQVRBX0FL TTg5NzVfU1RfWl9VUCAgICAoLTMwMCkKI2RlZmluZSBEQVRBX0FLTTg5NzVfU1RfWl9MVyAgICAo LTEwMDApCgovKm5lZWQgdG8gdmVyaWZ5IHRoZSByYW5nZSBmb3IgODk3MiAqLwojZGVmaW5lIERB VEFfQUtNODk3Ml9TVF9YX1VQICAgICg1MCkKI2RlZmluZSBEQVRBX0FLTTg5NzJfU1RfWF9MVyAg ICAoLTUwKQojZGVmaW5lIERBVEFfQUtNODk3Ml9TVF9ZX1VQICAgICg1MCkKI2RlZmluZSBEQVRB X0FLTTg5NzJfU1RfWV9MVyAgICAoLTUwKQojZGVmaW5lIERBVEFfQUtNODk3Ml9TVF9aX1VQICAg ICgtMTAwKQojZGVmaW5lIERBVEFfQUtNODk3Ml9TVF9aX0xXICAgICgtNTAwKQoKI2RlZmluZSBE QVRBX0FLTTg5NjNfU1RfWF9VUCAgICAoMjAwKQojZGVmaW5lIERBVEFfQUtNODk2M19TVF9YX0xX ICAgICgtMjAwKQojZGVmaW5lIERBVEFfQUtNODk2M19TVF9ZX1VQICAgICgyMDApCiNkZWZpbmUg REFUQV9BS004OTYzX1NUX1lfTFcgICAgKC0yMDApCiNkZWZpbmUgREFUQV9BS004OTYzX1NUX1pf VVAgICAgKC04MDApCiNkZWZpbmUgREFUQV9BS004OTYzX1NUX1pfTFcgICAgKC0zMjAwKQoKCi8q IHJlZ2lzdGVyIGRlZmluaXRpb24qLwojZGVmaW5lIFJFR18zMDUwX0FVWF9WRERJTyAgICAgICgw eDEzKQojZGVmaW5lIFJFR18zMDUwX1NMQVZFX0FERFIgICAgICgweDE0KQojZGVmaW5lIFJFR18z MDUwX0FVWF9CU1RfQUREUiAgICgweDE4KQojZGVmaW5lIFJFR18zMDUwX0FVWF9YT1VUX0ggICAg ICgweDIzKQoKI2RlZmluZSBSRUdfMzUwMF9PVFAgICAgICAgICAgICAoMHgwMCkKCiNkZWZpbmUg UkVHX1lHT0ZGU19UQyAgICAgICAgICAgKDB4MDEpCiNkZWZpbmUgUkVHX1hBX09GRlNfTF9UQyAg ICAgICAgKDB4MDcpCiNkZWZpbmUgUkVHX1NUX0dDVF9YICAgICAgICAgICAgKDB4MEQpCiNkZWZp bmUgUkVHX0kyQ19NU1RfQ1RSTCAgICAgICAgKDB4MjQpCiNkZWZpbmUgUkVHX0kyQ19TTFYwX0FE RFIgICAgICAgKDB4MjUpCiNkZWZpbmUgUkVHX0kyQ19TTFYwX1JFRyAgICAgICAgKDB4MjYpCiNk ZWZpbmUgUkVHX0kyQ19TTFYwX0NUUkwgICAgICAgKDB4MjcpCiNkZWZpbmUgUkVHX0kyQ19TTFYx X0FERFIgICAgICAgKDB4MjgpCiNkZWZpbmUgUkVHX0kyQ19TTFYxX1JFRyAgICAgICAgKDB4Mjkp CiNkZWZpbmUgUkVHX0kyQ19TTFYxX0NUUkwgICAgICAgKDB4MkEpCgojZGVmaW5lIFJFR19JMkNf U0xWNF9DVFJMICAgICAgICgweDM0KQojZGVmaW5lIFJFR19JTlRfUElOX0NGRyAgICAgICAgICgw eDM3KQojZGVmaW5lIFJFR19ETVBfSU5UX1NUQVRVUyAgICAgICgweDM5KQojZGVmaW5lIFJFR19F WFRfU0VOU19EQVRBXzAwICAgICgweDQ5KQojZGVmaW5lIFJFR19JMkNfU0xWMV9ETyAgICAgICAg ICgweDY0KQojZGVmaW5lIFJFR19JMkNfTVNUX0RFTEFZX0NUUkwgICgweDY3KQojZGVmaW5lIFJF R19CQU5LX1NFTCAgICAgICAgICAgICgweDZEKQojZGVmaW5lIFJFR19NRU1fU1RBUlQgICAgICAg ICAgICgweDZFKQojZGVmaW5lIFJFR19NRU1fUlcgICAgICAgICAgICAgICgweDZGKQoKLyogYml0 IGRlZmluaXRpb25zICovCiNkZWZpbmUgQklUXzMwNTBfVkRESU8gICAgICAgICAgKDB4MDQpCiNk ZWZpbmUgQklUXzMwNTBfQVVYX0lGX0VOICAgICAgKDB4MjApCiNkZWZpbmUgQklUXzMwNTBfRklG T19SU1QgICAgICAgKDB4MDIpCgojZGVmaW5lIEJJVF9CWVBBU1NfRU4gICAgICAgICAgICgweDIp CiNkZWZpbmUgQklUX1dBSVRfRk9SX0VTICAgICAgICAgKDB4NDApCiNkZWZpbmUgQklUX0kyQ19S RUFEICAgICAgICAgICAgKDB4ODApCiNkZWZpbmUgQklUX1NMVl9FTiAgICAgICAgICAgICAgKDB4 ODApCiNkZWZpbmUgQklUX0kyQ19NU1RfVkRESU8gICAgICAgKDB4ODApCgojZGVmaW5lIEJJVF9E TVBfRU4gICAgICAgICAgICAgICgweDgwKQojZGVmaW5lIEJJVF9GSUZPX0VOCQkoMHg0MCkKI2Rl ZmluZSBCSVRfSTJDX01TVF9FTiAgICAgICAgICAoMHgyMCkKI2RlZmluZSBCSVRfRE1QX1JTVCAg ICAgICAgICAgICAoMHgwOCkKI2RlZmluZSBCSVRfRklGT19SU1QJCSgweDA0KQoKI2RlZmluZSBC SVRfU0xWMF9ETFlfRU4gICAgICAgICAoMHgwMSkKI2RlZmluZSBCSVRfU0xWMV9ETFlfRU4gICAg ICAgICAoMHgwMikKCiNkZWZpbmUgQklUX0ZJRk9fT1ZFUkZMT1cJKDB4MTApCiNkZWZpbmUgQklU X0RBVEFfUkRZX0VOCQkoMHgwMSkKI2RlZmluZSBCSVRfRE1QX0lOVF9FTiAgICAgICAgICAoMHgw MikKCiNkZWZpbmUgQklUX1BXUl9BQ0NMX1NUQlkgICAgICAgKDB4MzgpCiNkZWZpbmUgQklUX1BX Ul9HWVJPX1NUQlkgICAgICAgKDB4MDcpCgojZGVmaW5lIEJJVF9HWVJPX1hPVVQJCSgweDQwKQoj ZGVmaW5lIEJJVF9HWVJPX1lPVVQJCSgweDIwKQojZGVmaW5lIEJJVF9HWVJPX1pPVVQJCSgweDEw KQojZGVmaW5lIEJJVF9BQ0NFTF9PVVQJCSgweDA4KQojZGVmaW5lIEJJVFNfR1lST19PVVQJCSgw eDcwKQojZGVmaW5lIEJJVFNfU0VMRl9URVNUX0VOICAgICAgICgweEUwKQojZGVmaW5lIEJJVFNf MzA1MF9BQ0NMX09VVAkoMHgwRSkKI2RlZmluZSBCSVRTXzMwNTBfUE9XRVIxICAgICAgICAoMHgz MCkKI2RlZmluZSBCSVRTXzMwNTBfUE9XRVIyICAgICAgICAoMHgxMCkKI2RlZmluZSBCSVRTXzMw NTBfR1lST19TVEFOREJZICAoMHgzOCkKI2RlZmluZSBCSVRTX0ZTUgkJKDB4MTgpCiNkZWZpbmUg QklUU19MUEYJCSgweDA3KQojZGVmaW5lIEJJVFNfQ0xLCQkoMHgwNykKI2RlZmluZSBCSVRfMzUw MF9GSUZPX09WRVJGTE9XCSgweDEwKQojZGVmaW5lIEJJVF9TTEVFUAkJKDB4NDApCiNkZWZpbmUg QklUX0NZQ0xFICAgICAgICAgICAgICAgKDB4MjApCiNkZWZpbmUgQklUX0xQQV9GUkVRICAgICAg ICAgICAgKDB4QzApCgojZGVmaW5lIERNUF9TVEFSVF9BRERSICAgICAgICAgICgweDQwMCkKI2Rl ZmluZSBCWVRFU19GT1JfRE1QICAgICAgICAgICAoMTYpCiNkZWZpbmUgQllURVNfUEVSX1NFTlNP UiAgICAgICAgKDYpCiNkZWZpbmUgTVBVMzA1MF9GT09URVJfU0laRSAgICAgKDIpCiNkZWZpbmUg RklGT19USFJFU0hPTEQgICAgICAgICAgKDUwMCkKI2RlZmluZSBQT1dFUl9VUF9USU1FICAgICAg ICAgICAoMTAwKQojZGVmaW5lIFNFTlNPUl9VUF9USU1FICAgICAgICAgICgzMCkKI2RlZmluZSBN UFVfTUVNX0JBTktfU0laRSAgICAgICAoMjU2KQojZGVmaW5lIE1QVTMwNTBfVEVNUF9PRkZTRVQJ KDUzODMzMTRMKQojZGVmaW5lIE1QVTMwNTBfVEVNUF9TQ0FMRSAgICAgICgzODM0NzkyTCkKI2Rl ZmluZSBNUFU2MDUwX1RFTVBfT0ZGU0VUCSgyNDYyMzA3TCkKI2RlZmluZSBNUFU2MDUwX1RFTVBf U0NBTEUgICAgICAoMjk3NzY1M0wpCiNkZWZpbmUgTVBVX1RFTVBfU0hJRlQgICAgICAgICAgKDE2 KQojZGVmaW5lIExQQV9GUkVRX1NISUZUICAgICAgICAgICg2KQojZGVmaW5lIENPTVBBU1NfUkFU RV9TQ0FMRSAgICAgICgxMCkKI2RlZmluZSBNQVhfR1lST19GU19QQVJBTSAgICAgICAoMykKI2Rl ZmluZSBNQVhfQUNDTF9GU19QQVJBTSAgICAgICAoMykKI2RlZmluZSBNQVhfTFBBX0ZSRVFfUEFS QU0gICAgICAoMykKI2RlZmluZSBUSFJFRV9BWElTICAgICAgICAgICAgICAoMykKI2RlZmluZSBH WVJPX0NPTkZJR19GU1JfU0hJRlQgICAoMykKI2RlZmluZSBBQ0NMX0NPTkZJR19GU1JfU0hJRlQg ICAoMykKI2RlZmluZSBHWVJPX0RQU19TQ0FMRSAgICAgICAgICAoMjUwKQojZGVmaW5lIE1FTV9B RERSX1BST0RfUkVWICAgICAgICgweDYpCiNkZWZpbmUgU09GVF9QUk9EX1ZFUl9CWVRFUyAgICAg KDUpCgovKiBpbml0IHBhcmFtZXRlcnMgKi8KI2RlZmluZSBJTklUX0ZJRk9fUkFURSAgICAgICAg ICAoNTApCiNkZWZpbmUgSU5JVF9EVVJfVElNRSAgICAgICAgICAgKCgxMDAwL0lOSVRfRklGT19S QVRFKSoxMDAwKQojZGVmaW5lIElOSVRfVEFQX1RIUkVTSE9MRCAgICAgICgxMDApCiNkZWZpbmUg SU5JVF9UQVBfVElNRSAgICAgICAgICAgKDEwMCkKI2RlZmluZSBJTklUX1RBUF9NSU5fQ09VTlQg ICAgICAoMikKI2RlZmluZSBNUExfUFJPRF9LRVkodmVyLCByZXYpICh2ZXIgKiAxMDAgKyByZXYp CiNkZWZpbmUgTlVNX09GX1BST0RfUkVWUyAoQVJSQVlfU0laRShwcm9kX3Jldl9tYXApKQovKi0t LS0gTVBVNjA1MCBTaWxpY29uIFJldmlzaW9ucyAtLS0tKi8KI2RlZmluZSBNUFVfU0lMSUNPTl9S RVZfQTIgICAgICAgICAgICAgIDEgICAgICAgLyogTVBVNjA1MEEyIERldmljZSAqLwojZGVmaW5l IE1QVV9TSUxJQ09OX1JFVl9CMSAgICAgICAgICAgICAgMiAgICAgICAvKiBNUFU2MDUwQjEgRGV2 aWNlICovCgojZGVmaW5lIEJJVF9QUkZUQ0hfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAw eDQwCiNkZWZpbmUgQklUX0NGR19VU0VSX0JBTksgICAgICAgICAgICAgICAgICAgICAgIDB4MjAK I2RlZmluZSBCSVRTX01FTV9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZgovKiB0 aW1lIHN0YW1wIHRvbGVyYW5jZSAqLwojZGVmaW5lIFRJTUVfU1RBTVBfVE9SICAgICAgICAgICAo NSkKI2RlZmluZSBNQVhfQ0FUQ0hfVVAgICAgICAgICAgICAgKDUpCiNkZWZpbmUgREVGQVVMVF9B Q0NMX1RSSU0gICAgICAgICgxNjM4NCkKI2RlZmluZSBNQVhfRklGT19SQVRFICAgICAgICAgICAg KDEwMDApCiNkZWZpbmUgTUlOX0ZJRk9fUkFURSAgICAgICAgICAgICg0KQojZGVmaW5lIE9ORV9L X0haICAgICAgICAgICAgICAgICAoMTAwMCkKCi8qIGF1dGhlbnRpY2F0ZSBrZXkgKi8KI2RlZmlu ZSBEX0FVVEhfT1VUICAgICAgICAgICAgICAgKDMyKQojZGVmaW5lIERfQVVUSF9JTiAgICAgICAg ICAgICAgICAoMzYpCiNkZWZpbmUgRF9BVVRIX0EgICAgICAgICAgICAgICAgICg0MCkKI2RlZmlu ZSBEX0FVVEhfQiAgICAgICAgICAgICAgICAgKDQ0KQoKLyogZmxpY2sgcmVsYXRlZCBkZWZpbmVz ICovCiNkZWZpbmUgREFUQV9JTlQgICAgICAgICAgICAoMjA5NykKI2RlZmluZSBEQVRBX01TR19P TiAgICAgICAgICgyNjIxNDQpCgovKnRhcCByZWxhdGVkIGRlZmluZXMgKi8KI2RlZmluZSBJTlZf VEFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgKI2RlZmluZSBJTlZfTlVNX1RB UF9BWEVTICgzKQoKI2RlZmluZSBJTlZfVEFQX0FYSVNfWF9QT1MgICAgICAgICAgICAgICAgICAg IDB4MjAKI2RlZmluZSBJTlZfVEFQX0FYSVNfWF9ORUcgICAgICAgICAgICAgICAgICAgIDB4MTAK I2RlZmluZSBJTlZfVEFQX0FYSVNfWV9QT1MgICAgICAgICAgICAgICAgICAgIDB4MDgKI2RlZmlu ZSBJTlZfVEFQX0FYSVNfWV9ORUcgICAgICAgICAgICAgICAgICAgIDB4MDQKI2RlZmluZSBJTlZf VEFQX0FYSVNfWl9QT1MgICAgICAgICAgICAgICAgICAgIDB4MDIKI2RlZmluZSBJTlZfVEFQX0FY SVNfWl9ORUcgICAgICAgICAgICAgICAgICAgIDB4MDEKI2RlZmluZSBJTlZfVEFQX0FMTF9ESVJF Q1RJT05TICAgICAgICAgICAgICAgIDB4M2YKCiNkZWZpbmUgSU5WX1RBUF9BWElTX1ggICAgICAg ICAgICAgICAgICAgICAgICAweDEKI2RlZmluZSBJTlZfVEFQX0FYSVNfWSAgICAgICAgICAgICAg ICAgICAgICAgIDB4MgojZGVmaW5lIElOVl9UQVBfQVhJU19aICAgICAgICAgICAgICAgICAgICAg ICAgMHg0CgojZGVmaW5lIElOVl9UQVBfQVhJU19BTEwgICAgICAgICAgICAgICAgICAgICAgXAoJ CShJTlZfVEFQX0FYSVNfWCAgICAgICAgICAgIHwgICBcCgkJSU5WX1RBUF9BWElTX1kgICAgICAg ICAgICAgfCAgIFwKCQlJTlZfVEFQX0FYSVNfWikKCiNkZWZpbmUgSU5UX1NSQ19UQVAgICAgMHgw MQojZGVmaW5lIElOVF9TUkNfT1JJRU5UIDB4MDIKCi8qb3JpZW50YXRpb24gcmVsYXRlZCAqLwoj ZGVmaW5lIElOVl9YX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCiNkZWZpbmUgSU5W X1hfRE9XTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKI2RlZmluZSBJTlZfWV9VUCAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwNAojZGVmaW5lIElOVl9ZX0RPV04gICAgICAgICAgICAg ICAgICAgICAgICAweDA4CiNkZWZpbmUgSU5WX1pfVVAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MTAKI2RlZmluZSBJTlZfWl9ET1dOICAgICAgICAgICAgICAgICAgICAgICAgMHgyMAojZGVm aW5lIElOVl9PUklFTlRBVElPTl9BTEwgICAgICAgICAgICAgICAweDNGCgojZGVmaW5lIElOVl9P UklFTlRBVElPTl9GTElQICAgICAgICAgICAgICAweDQwCiNkZWZpbmUgSU5WX1hfQVhJU19JTkRF WCAgICAgICAgICAgICAgICAgKDB4MDApCiNkZWZpbmUgSU5WX1lfQVhJU19JTkRFWCAgICAgICAg ICAgICAgICAgKDB4MDEpCiNkZWZpbmUgSU5WX1pfQVhJU19JTkRFWCAgICAgICAgICAgICAgICAg KDB4MDIpCgojZGVmaW5lIElOVl9FTEVNRU5UXzEgICAgICAgICAgICAgICAgICAgICgweDAwMDEp CiNkZWZpbmUgSU5WX0VMRU1FTlRfMiAgICAgICAgICAgICAgICAgICAgKDB4MDAwMikKI2RlZmlu ZSBJTlZfRUxFTUVOVF8zICAgICAgICAgICAgICAgICAgICAoMHgwMDA0KQojZGVmaW5lIElOVl9F TEVNRU5UXzQgICAgICAgICAgICAgICAgICAgICgweDAwMDgpCiNkZWZpbmUgSU5WX0VMRU1FTlRf NSAgICAgICAgICAgICAgICAgICAgKDB4MDAxMCkKI2RlZmluZSBJTlZfRUxFTUVOVF82ICAgICAg ICAgICAgICAgICAgICAoMHgwMDIwKQojZGVmaW5lIElOVl9FTEVNRU5UXzcgICAgICAgICAgICAg ICAgICAgICgweDAwNDApCiNkZWZpbmUgSU5WX0VMRU1FTlRfOCAgICAgICAgICAgICAgICAgICAg KDB4MDA4MCkKI2RlZmluZSBJTlZfQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZG KQojZGVmaW5lIElOVl9FTEVNRU5UX01BU0sgICAgICAgICAgICAgICAgICgweDAwRkYpCiNkZWZp bmUgSU5WX0dZUk9fQUNDX01BU0sgICAgICAgICAgICAgICAgKDB4MDA3RSkKLyogc2NhbiBlbGVt ZW50IGRlZmluaXRpb24gKi8KI2RlZmluZSBJTlZfTVBVX1NDQU5fU1VQUExZICAgMAojZGVmaW5l IElOVl9NUFVfU0NBTl9HWVJPX1ggICAxCiNkZWZpbmUgSU5WX01QVV9TQ0FOX0dZUk9fWSAgIDIK I2RlZmluZSBJTlZfTVBVX1NDQU5fR1lST19aICAgMwojZGVmaW5lIElOVl9NUFVfU0NBTl9BQ0NM X1ggICA0CiNkZWZpbmUgSU5WX01QVV9TQ0FOX0FDQ0xfWSAgIDUKI2RlZmluZSBJTlZfTVBVX1ND QU5fQUNDTF9aICAgNgojZGVmaW5lIElOVl9NUFVfU0NBTl9NQUdOX1ggICA3CiNkZWZpbmUgSU5W X01QVV9TQ0FOX1RFTVBfWCAgIDcKI2RlZmluZSBJTlZfTVBVX1NDQU5fTUFHTl9ZICAgOAojZGVm aW5lIElOVl9NUFVfU0NBTl9URU1QX1kgICA4CiNkZWZpbmUgSU5WX01QVV9TQ0FOX01BR05fWiAg IDkKI2RlZmluZSBJTlZfTVBVX1NDQU5fVEVNUF9aICAgOQojZGVmaW5lIElOVl9NUFVfU0NBTl9U RU1QICAgICAxMAojZGVmaW5lIElOVl9NUFVfU0NBTl9BRENfMCAgICAxMQojZGVmaW5lIElOVl9N UFVfU0NBTl9USU1FU1RBTVAgMTIKCmVudW0gaW52X2ZpbHRlcl9lIHsKCUlOVl9GSUxURVJfMjU2 SFpfTk9MUEYyID0gMCwKCUlOVl9GSUxURVJfMTg4SFosCglJTlZfRklMVEVSXzk4SFosCglJTlZf RklMVEVSXzQySFosCglJTlZfRklMVEVSXzIwSFosCglJTlZfRklMVEVSXzEwSFosCglJTlZfRklM VEVSXzVIWiwKCUlOVl9GSUxURVJfMjEwMEhaX05PTFBGLAoJTlVNX0ZJTFRFUgp9OwovKj09PT0g TVBVNjA1MEIxIE1FTU9SWSA9PT09Ki8KZW51bSBNUFVfTUVNT1JZX0JBTktTIHsKCU1FTV9SQU1f QkFOS18wID0gMCwKCU1FTV9SQU1fQkFOS18xLAoJTUVNX1JBTV9CQU5LXzIsCglNRU1fUkFNX0JB TktfMywKCU1FTV9SQU1fQkFOS180LAoJTUVNX1JBTV9CQU5LXzUsCglNRU1fUkFNX0JBTktfNiwK CU1FTV9SQU1fQkFOS183LAoJTUVNX1JBTV9CQU5LXzgsCglNRU1fUkFNX0JBTktfOSwKCU1FTV9S QU1fQkFOS18xMCwKCU1FTV9SQU1fQkFOS18xMSwKCU1QVV9NRU1fTlVNX1JBTV9CQU5LUywKCU1Q VV9NRU1fT1RQX0JBTktfMCA9IDE2Cn07CgplbnVtIGludl9hY2NsX2ZzX2UgewoJSU5WX0ZTXzAy RyA9IDAsCglJTlZfRlNfMDRHLAoJSU5WX0ZTXzA4RywKCUlOVl9GU18xNkcsCglOVU1fQUNDTF9G U1IKfTsKCmVudW0gaW52X2Zzcl9lIHsKCUlOVl9GU1JfMjUwRFBTID0gMCwKCUlOVl9GU1JfNTAw RFBTLAoJSU5WX0ZTUl8xMDAwRFBTLAoJSU5WX0ZTUl8yMDAwRFBTLAoJTlVNX0ZTUgp9OwoKZW51 bSBpbnZfY2xvY2tfc2VsX2UgewoJSU5WX0NMS19JTlRFUk5BTCA9IDAsCglJTlZfQ0xLX1BMTCwK CU5VTV9DTEsKfTsKCnZvaWQgaW52X3dha2VfdXAodm9pZCk7CmludCBpbnZfc2V0X3Bvd2VyX3N0 YXRlKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwgdW5zaWduZWQgY2hhciBwb3dlcl9vbik7 CnNzaXplX3QgaW52X2RtcF9maXJtd2FyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBr b2JqZWN0ICprb2JqLAoJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwgbG9m Zl90IHBvcywgc2l6ZV90IHNpemUpOwpzc2l6ZV90IGludl9kbXBfZmlybXdhcmVfcmVhZChzdHJ1 Y3QgZmlsZSAqZmlscCwKCQkJCXN0cnVjdCBrb2JqZWN0ICprb2JqLAoJCQkJc3RydWN0IGJpbl9h dHRyaWJ1dGUgKmJpbl9hdHRyLAoJCQkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291 bnQpOwoKaW50IGludl9tcHVfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rl dik7CmludCBpbnZfbXB1X3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7 CnZvaWQgaW52X21wdV91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYp Owp2b2lkIGludl9tcHVfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7 CmludCBpbnZfaW5pdF9jb25maWdfbXB1MzA1MChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsK aW50IGludl9nZXRfc2lsaWNvbl9yZXZfbXB1NjA1MChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAq c3QpOwppbnQgc2V0XzMwNTBfYnlwYXNzKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwgaW50 IGVuYWJsZSk7CmludCBpbnZfcmVnaXN0ZXJfYm1hMjUwX3NsYXZlKHN0cnVjdCBpbnZfZ3lyb19z dGF0ZV9zICpzdCk7CnZvaWQgaW52X3NldHVwX3JlZ19tcHUzMDUwKHN0cnVjdCBpbnZfcmVnX21h cF9zICpyZWcpOwppbnQgc2V0X3Bvd2VyX21wdTMwNTAoc3RydWN0IGludl9neXJvX3N0YXRlX3Mg KnN0LCB1bnNpZ25lZCBjaGFyIHBvd2VyX29uKTsKaW50IHNldF9pbnZfZW5hYmxlKHN0cnVjdCBp aW9fZGV2ICppbmRpb19kZXYsIHVuc2lnbmVkIGxvbmcgZW5hYmxlKTsKaW50IGludl9lbmFibGVf b3JpZW50YXRpb25fZG1wKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwgaW50IG9uKTsKdW5z aWduZWQgc2hvcnQgaW52X2RtcF9nZXRfYWRkcmVzcyh1bnNpZ25lZCBzaG9ydCBrZXkpOwpsb25n IGludl9xMzBfbXVsdChsb25nIGEsIGxvbmcgYik7CmludCBpbnZfc2V0X3RhcF90aHJlc2hvbGRf ZG1wKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwKCQkJCXVuc2lnbmVkIGludCBheGlzLCB1 bnNpZ25lZCBzaG9ydCB0aHJlc2hvbGQpOwppbnQgaW52X3NldF9taW5fdGFwc19kbXAoc3RydWN0 IGludl9neXJvX3N0YXRlX3MgKnN0LCB1bnNpZ25lZCBpbnQgbWluX3RhcHMpOwppbnQgIGludl9z ZXRfdGFwX3RpbWVfZG1wKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwgdW5zaWduZWQgaW50 IHRpbWUpOwppbnQgaW52X2VuYWJsZV90YXBfZG1wKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpz dCwgdW5zaWduZWQgY2hhciBvbik7CmludCBpbnZfaTJjX3JlYWRfYmFzZShzdHJ1Y3QgaW52X2d5 cm9fc3RhdGVfcyAqc3QsIHVuc2lnbmVkIHNob3J0IGkyY19hZGRyLAoJdW5zaWduZWQgY2hhciBy ZWcsIHVuc2lnbmVkIHNob3J0IGxlbmd0aCwgdW5zaWduZWQgY2hhciAqZGF0YSk7CmludCBpbnZf aTJjX3NpbmdsZV93cml0ZV9iYXNlKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwKCXVuc2ln bmVkIHNob3J0IGkyY19hZGRyLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciBkYXRh KTsKaW50IGludl9kb190ZXN0KHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwgaW50IHNlbGZf dGVzdF9mbGFnLAoJCWludCAqZ3lyb19yZXN1bHQsIGludCAqYWNjbF9yZXN1bHQpOwppbnQgbXB1 X21lbW9yeV93cml0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAoJCQkgICAgdW5zaWdu ZWQgY2hhciBtcHVfYWRkciwKCQkJICAgIHVuc2lnbmVkIHNob3J0IG1lbV9hZGRyLAoJCQkgICAg dW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgY2hhciBjb25zdCAqZGF0YSk7CmludCBtcHVfbWVt b3J5X3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKCQkJICAgdW5zaWduZWQgY2hh ciBtcHVfYWRkciwKCQkJICAgdW5zaWduZWQgc2hvcnQgbWVtX2FkZHIsCgkJCSAgIHVuc2lnbmVk IGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKmRhdGEpOwppbnQgaW52X2h3X3NlbGZfdGVzdChzdHJ1 Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QpOwoKI2RlZmluZSBtZW1fdyhhLCBiLCBjKSBtcHVfbWVt b3J5X3dyaXRlKHN0LT5zbF9oYW5kbGUsXAoJCQlzdC0+aTJjX2FkZHIsIGEsIGIsIGMpCiNkZWZp bmUgbWVtX3dfa2V5KGtleSwgYiwgYykgbXB1X21lbW9yeV93cml0ZShzdC0+c2xfaGFuZGxlLFwK CQkJc3QtPmkyY19hZGRyLCBpbnZfZG1wX2dldF9hZGRyZXNzKGtleSksIGIsIGMpCiNkZWZpbmUg aW52X2kyY19yZWFkKHN0LCByZWcsIGxlbiwgZGF0YSkgXAoJaW52X2kyY19yZWFkX2Jhc2Uoc3Qs IHN0LT5pMmNfYWRkciwgcmVnLCBsZW4sIGRhdGEpCiNkZWZpbmUgaW52X2kyY19zaW5nbGVfd3Jp dGUoc3QsIHJlZywgZGF0YSkgXAoJaW52X2kyY19zaW5nbGVfd3JpdGVfYmFzZShzdCwgc3QtPmky Y19hZGRyLCByZWcsIGRhdGEpCiNkZWZpbmUgaW52X3NlY29uZGFyeV9yZWFkKHJlZywgbGVuLCBk YXRhKSBcCglpbnZfaTJjX3JlYWRfYmFzZShzdCwgc3QtPnBsYXRfZGF0YS5zZWNvbmRhcnlfaTJj X2FkZHIsIHJlZywgbGVuLCBkYXRhKQojZGVmaW5lIGludl9zZWNvbmRhcnlfd3JpdGUocmVnLCBk YXRhKSBcCglpbnZfaTJjX3NpbmdsZV93cml0ZV9iYXNlKHN0LCBzdC0+cGxhdF9kYXRhLnNlY29u ZGFyeV9pMmNfYWRkciwgXAoJCXJlZywgZGF0YSkKI2VuZGlmICAvKiAjaWZuZGVmIF9JTlZfR1lS T19IXyAqLwoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGludl9tcHVfbWlzYy5jAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAwMDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDEzMTQ1MQAxMTc1MjU0Njc2MAAw MTIzNTAAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIg IABnZ2FvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdnYW8AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW52ZW5zZW5zZSwg SW5jLgoqCiogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYwoqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCiogbWF5IGJlIGNvcGllZCwgZGlzdHJp YnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKgoqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAoqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCioK Ki8KCi8qKgogKiAgQGFkZHRvZ3JvdXAgIERSSVZFUlMKICogIEBicmllZiAgICAgICBIYXJkd2Fy ZSBkcml2ZXJzLgogKgogKiAgQHsKICogICAgICBAZmlsZSAgICBpbnZfZ3lyb19taXNjLmMKICog ICAgICBAYnJpZWYgICBBIHN5c2ZzIGRldmljZSBkcml2ZXIgZm9yIEludmVuc2Vuc2UgZ3lyb3Nj b3Blcy4KICogICAgICBAZGV0YWlscyBUaGlzIGZpbGUgaXMgcGFydCBvZiBpbnZfZ3lybyBkcml2 ZXIgY29kZQogKi8KCiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4KI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgojaW5j bHVkZSA8bGludXgvZXJyLmg+CiNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgojaW5jbHVkZSA8bGlu dXgvc3lzZnMuaD4KI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KI2luY2x1ZGUgPGxpbnV4L2ly cS5oPgojaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiNpbmNsdWRlIDxsaW51eC9rZmlmby5o PgojaW5jbHVkZSA8bGludXgvcG9sbC5oPgojaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgoK I2luY2x1ZGUgImludl9tcHVfaWlvLmgiCi8qCiAgICBEZWZpbmVzCiovCi8qIERNUCBkZWZpbmVz ICovCiNkZWZpbmUgRE1QX09SSUVOVEFUSU9OX1RJTUUJCSg1MDApCiNkZWZpbmUgRE1QX09SSUVO VEFUSU9OX0FOR0xFCQkoNjApCiNkZWZpbmUgRE1QX0RFRkFVTFRfRklGT19SQVRFICAgICAgICAg ICAoMjAwKQojZGVmaW5lIERNUF9UQVBfU0NBTEUgICAgICAgICAgICAgICAgICAgKDc2NzYwMzky My81KQojZGVmaW5lIERNUF9NVUxUSV9TSElGVCAgICAgICAgICAgICAgICAgKDMwKQojZGVmaW5l IERNUF9NVUxUSV9UQVBfVElNRSAgICAgICAgICAgICAgKDUwMCkKI2RlZmluZSBETVBfU0hBS0Vf UkVKRUNUX1RIUkVTSCAgICAgICAgICgxMDApCiNkZWZpbmUgRE1QX1NIQUtFX1JFSkVDVF9USU1F ICAgICAgICAgICAoMTApCiNkZWZpbmUgRE1QX1NIQUtFX1JFSkVDVF9USU1FT1VUICAgICAgICAo MTApCiNkZWZpbmUgRE1QX0FOR0xFX1NDQUxFICAgICAgICAgICAgICAgICAoMTUpCiNkZWZpbmUg RE1QX1BSRUNJU0lPTiAgICAgICAgICAgICAgICAgICAoMTAwMCkKI2RlZmluZSBETVBfTUFYX0RJ VklERVIgICAgICAgICAgICAgICAgICg0KQojZGVmaW5lIERNUF9NQVhfTUlOX1RBUFMgICAgICAg ICAgICAgICAgKDQpCgovKi0tLSBUZXN0IHBhcmFtZXRlcnMgZGVmYXVsdHMgLS0tICovCiNkZWZp bmUgREVGX09MREVTVF9TVVBQX1BST0RfUkVWICAgICg4KQojZGVmaW5lIERFRl9PTERFU1RfU1VQ UF9TV19SRVYgICAgICAoMikKCi8qIHNhbXBsZSByYXRlICovCiNkZWZpbmUgREVGX1NFTEZURVNU X1NBTVBMRV9SQVRFICAgICAgICAgICAgICgwKQovKiBMUEYgcGFyYW1ldGVyICovCiNkZWZpbmUg REVGX1NFTEZURVNUX0xQRl9QQVJBICAgICAgICAgICAgICAgICgxKQovKiBmdWxsIHNjYWxlIHNl dHRpbmcgZHBzICovCiNkZWZpbmUgREVGX1NFTEZURVNUX0dZUk9fRlVMTF9TQ0FMRSAgICAgICAg ICgwIDw8IDMpCiNkZWZpbmUgREVGX1NFTEZURVNUX0FDQ0xfRlVMTF9TQ0FMRSAgICAgICAgICgy IDw8IDMpCi8qIHdhaXQgdGltZSBiZWZvcmUgY29sbGVjdGluZyBkYXRhICovCiNkZWZpbmUgREVG X0dZUk9fV0FJVF9USU1FICAgICAgICAgICg1MCkKI2RlZmluZSBERUZfU1RfU1RBQkxFX1RJTUUg ICAgICAgICAgKDIwMCkKI2RlZmluZSBERUZfR1lST19QQUNLRVRfVEhSRVNIICAgICAgREVGX0dZ Uk9fV0FJVF9USU1FCiNkZWZpbmUgREVGX0dZUk9fVEhSRVNIICAgICAgICAgICAgICgxMCkKI2Rl ZmluZSBERUZfR1lST19TQ0FMRSAgICAgICAgICAgICAgKDEzMSkKI2RlZmluZSBERUZfU1RfUFJF Q0lTSU9OICAgICAgICAgICAgKDEwMDApCiNkZWZpbmUgREVGX1NUX0FDQ0xfRlVMTF9TQ0FMRSAg ICAgICg4MDAwVUwpCiNkZWZpbmUgREVGX1NUX1NDQUxFICAgICAgICAgICAgICAgICgxTCA8PCAx NSkKI2RlZmluZSBERUZfU1RfVFJZX1RJTUVTICAgICAgICAgICAgKDIpCgojZGVmaW5lIERFRl9T VF9DT01QQVNTX1dBSVQgICAgICAgICAoMTAqMTAwMCkKI2RlZmluZSBERUZfU1RfQ09NUEFTU19U UllfVElNRVMgICAgKDEwKQoKI2RlZmluZSBYICAgICAgICAgICAgICAgICAgICAgICAgICAgMAoj ZGVmaW5lIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiNkZWZpbmUgWiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDIKLyotLS0tIE1QVTYwNTAgbm90YWJsZSBwcm9kdWN0IHJldmlzaW9u cyAtLS0tKi8KI2RlZmluZSBNUFVfUFJPRFVDVF9LRVlfQjFfRTFfNSAgICAgIDEwNQojZGVmaW5l IE1QVV9QUk9EVUNUX0tFWV9CMl9GMSAgICAgICAgNDMxCi8qIGFjY2VsZXJvbWV0ZXIgSHcgc2Vs ZiB0ZXN0IG1pbiBhbmQgbWF4IGJpYXMgc2hpZnQgKG1nKSAqLwojZGVmaW5lIERFRl9BQ0NFTF9T VF9TSElGVF9NSU4gICAgICAoMzAwKQojZGVmaW5lIERFRl9BQ0NFTF9TVF9TSElGVF9NQVggICAg ICAoOTUwKQoKI2RlZmluZSBERUZfQUNDRUxfU1RfU0hJRlRfREVMVEEgICAgKDE0MCkKI2RlZmlu ZSBERUZfR1lST19DVF9TSElGVF9ERUxUQSAgICAgKDE0MCkKLyogZ3lyb3Njb3BlIENvcmlvbGlz IHNlbGYgdGVzdCBtaW4gYW5kIG1heCBiaWFzIHNoaWZ0IChkcHMpICovCiNkZWZpbmUgREVGX0dZ Uk9fQ1RfU0hJRlRfTUlOICAgICAgICgxMCkKI2RlZmluZSBERUZfR1lST19DVF9TSElGVF9NQVgg ICAgICAgKDEwNSkKCnN0YXRpYyBzdHJ1Y3QgdGVzdF9zZXR1cF90IHRlc3Rfc2V0dXAgPSB7Cgku Z3lyb19zZW5zICAgICA9IDMyNzY4LzI1MCwKCS5zYW1wbGVfcmF0ZSAgID0gREVGX1NFTEZURVNU X1NBTVBMRV9SQVRFLAoJLmxwZiAgICAgICAgICAgPSBERUZfU0VMRlRFU1RfTFBGX1BBUkEsCgku ZnNyICAgICAgICAgICA9IERFRl9TRUxGVEVTVF9HWVJPX0ZVTExfU0NBTEUsCgkuYWNjbF9mcyAg ICAgID0gREVGX1NFTEZURVNUX0FDQ0xfRlVMTF9TQ0FMRQp9OwoKLyogTk9URTogcHJvZHVjdCBl bnRyaWVzIGFyZSBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyICovCnN0YXRpYyBjb25zdCBzdHJ1Y3Qg cHJvZF9yZXZfbWFwX3QgcHJvZF9yZXZfbWFwW10gPSB7CgkvKiBwcm9kX3ZlciA9IDAgKi8KCXtN UExfUFJPRF9LRVkoMCwgICAxKSwgTVBVX1NJTElDT05fUkVWX0EyLCAxMzEsIDE2Mzg0fSwKCXtN UExfUFJPRF9LRVkoMCwgICAyKSwgTVBVX1NJTElDT05fUkVWX0EyLCAxMzEsIDE2Mzg0fSwKCXtN UExfUFJPRF9LRVkoMCwgICAzKSwgTVBVX1NJTElDT05fUkVWX0EyLCAxMzEsIDE2Mzg0fSwKCXtN UExfUFJPRF9LRVkoMCwgICA0KSwgTVBVX1NJTElDT05fUkVWX0EyLCAxMzEsIDE2Mzg0fSwKCXtN UExfUFJPRF9LRVkoMCwgICA1KSwgTVBVX1NJTElDT05fUkVWX0EyLCAxMzEsIDE2Mzg0fSwKCXtN UExfUFJPRF9LRVkoMCwgICA2KSwgTVBVX1NJTElDT05fUkVWX0EyLCAxMzEsIDE2Mzg0fSwJLyog KEEyL0MyLTEpICovCgkvKiBwcm9kX3ZlciA9IDEsIGZvcmNlZCB0byAwIGZvciBNUFU2MDUwIEEy ICovCgl7TVBMX1BST0RfS0VZKDAsICAgNyksIE1QVV9TSUxJQ09OX1JFVl9BMiwgMTMxLCAxNjM4 NH0sCgl7TVBMX1BST0RfS0VZKDAsICAgOCksIE1QVV9TSUxJQ09OX1JFVl9BMiwgMTMxLCAxNjM4 NH0sCgl7TVBMX1BST0RfS0VZKDAsICAgOSksIE1QVV9TSUxJQ09OX1JFVl9BMiwgMTMxLCAxNjM4 NH0sCgl7TVBMX1BST0RfS0VZKDAsICAxMCksIE1QVV9TSUxJQ09OX1JFVl9BMiwgMTMxLCAxNjM4 NH0sCgl7TVBMX1BST0RfS0VZKDAsICAxMSksIE1QVV9TSUxJQ09OX1JFVl9BMiwgMTMxLCAxNjM4 NH0sCS8qIChBMi9EMi0xKSAqLwoJe01QTF9QUk9EX0tFWSgwLCAgMTIpLCBNUFVfU0lMSUNPTl9S RVZfQTIsIDEzMSwgMTYzODR9LAoJe01QTF9QUk9EX0tFWSgwLCAgMTMpLCBNUFVfU0lMSUNPTl9S RVZfQTIsIDEzMSwgMTYzODR9LAoJe01QTF9QUk9EX0tFWSgwLCAgMTQpLCBNUFVfU0lMSUNPTl9S RVZfQTIsIDEzMSwgMTYzODR9LAoJe01QTF9QUk9EX0tFWSgwLCAgMTUpLCBNUFVfU0lMSUNPTl9S RVZfQTIsIDEzMSwgMTYzODR9LAoJe01QTF9QUk9EX0tFWSgwLCAgMjcpLCBNUFVfU0lMSUNPTl9S RVZfQTIsIDEzMSwgMTYzODR9LAkvKiAoQTIvRDQpICAgKi8KCS8qIHByb2RfdmVyID0gMSAqLwoJ e01QTF9QUk9EX0tFWSgxLCAgMTYpLCBNUFVfU0lMSUNPTl9SRVZfQjEsIDEzMSwgMTYzODR9LAkv KiAoQjEvRDItMSkgKi8KCXtNUExfUFJPRF9LRVkoMSwgIDE3KSwgTVBVX1NJTElDT05fUkVWX0Ix LCAxMzEsIDE2Mzg0fSwJLyogKEIxL0QyLTIpICovCgl7TVBMX1BST0RfS0VZKDEsICAxOCksIE1Q VV9TSUxJQ09OX1JFVl9CMSwgMTMxLCAxNjM4NH0sCS8qIChCMS9EMi0zKSAqLwoJe01QTF9QUk9E X0tFWSgxLCAgMTkpLCBNUFVfU0lMSUNPTl9SRVZfQjEsIDEzMSwgMTYzODR9LAkvKiAoQjEvRDIt NCkgKi8KCXtNUExfUFJPRF9LRVkoMSwgIDIwKSwgTVBVX1NJTElDT05fUkVWX0IxLCAxMzEsIDE2 Mzg0fSwJLyogKEIxL0QyLTUpICovCgl7TVBMX1BST0RfS0VZKDEsICAyOCksIE1QVV9TSUxJQ09O X1JFVl9CMSwgMTMxLCAxNjM4NH0sCS8qIChCMS9ENCkgICAqLwoJe01QTF9QUk9EX0tFWSgxLCAg IDEpLCBNUFVfU0lMSUNPTl9SRVZfQjEsIDEzMSwgMTYzODR9LAkvKiAoQjEvRTEtMSkgKi8KCXtN UExfUFJPRF9LRVkoMSwgICAyKSwgTVBVX1NJTElDT05fUkVWX0IxLCAxMzEsIDE2Mzg0fSwJLyog KEIxL0UxLTIpICovCgl7TVBMX1BST0RfS0VZKDEsICAgMyksIE1QVV9TSUxJQ09OX1JFVl9CMSwg MTMxLCAxNjM4NH0sCS8qIChCMS9FMS0zKSAqLwoJe01QTF9QUk9EX0tFWSgxLCAgIDQpLCBNUFVf U0lMSUNPTl9SRVZfQjEsIDEzMSwgMTYzODR9LAkvKiAoQjEvRTEtNCkgKi8KCXtNUExfUFJPRF9L RVkoMSwgICA1KSwgTVBVX1NJTElDT05fUkVWX0IxLCAxMzEsIDE2Mzg0fSwJLyogKEIxL0UxLTUp ICovCgl7TVBMX1BST0RfS0VZKDEsICAgNiksIE1QVV9TSUxJQ09OX1JFVl9CMSwgMTMxLCAxNjM4 NH0sCS8qIChCMS9FMS02KSAqLwoJLyogcHJvZF92ZXIgPSAyICovCgl7TVBMX1BST0RfS0VZKDIs ICAgNyksIE1QVV9TSUxJQ09OX1JFVl9CMSwgMTMxLCAxNjM4NH0sCS8qIChCMi9FMS0xKSAqLwoJ e01QTF9QUk9EX0tFWSgyLCAgIDgpLCBNUFVfU0lMSUNPTl9SRVZfQjEsIDEzMSwgMTYzODR9LAkv KiAoQjIvRTEtMikgKi8KCXtNUExfUFJPRF9LRVkoMiwgICA5KSwgTVBVX1NJTElDT05fUkVWX0Ix LCAxMzEsIDE2Mzg0fSwJLyogKEIyL0UxLTMpICovCgl7TVBMX1BST0RfS0VZKDIsICAxMCksIE1Q VV9TSUxJQ09OX1JFVl9CMSwgMTMxLCAxNjM4NH0sCS8qIChCMi9FMS00KSAqLwoJe01QTF9QUk9E X0tFWSgyLCAgMTEpLCBNUFVfU0lMSUNPTl9SRVZfQjEsIDEzMSwgMTYzODR9LAkvKiAoQjIvRTEt NSkgKi8KCXtNUExfUFJPRF9LRVkoMiwgIDEyKSwgTVBVX1NJTElDT05fUkVWX0IxLCAxMzEsIDE2 Mzg0fSwJLyogKEIyL0UxLTYpICovCgl7TVBMX1BST0RfS0VZKDIsICAyOSksIE1QVV9TSUxJQ09O X1JFVl9CMSwgMTMxLCAxNjM4NH0sCS8qIChCMi9ENCkgICAqLwoJLyogcHJvZF92ZXIgPSAzICov Cgl7TVBMX1BST0RfS0VZKDMsICAzMCksIE1QVV9TSUxJQ09OX1JFVl9CMSwgMTMxLCAxNjM4NH0s CS8qIChCMi9FMikgICAqLwoJLyogcHJvZF92ZXIgPSA0ICovCgl7TVBMX1BST0RfS0VZKDQsICAz MSksIE1QVV9TSUxJQ09OX1JFVl9CMSwgMTMxLCAgODE5Mn0sCS8qIChCMi9GMSkgICAqLwoJe01Q TF9QUk9EX0tFWSg0LCAgIDEpLCBNUFVfU0lMSUNPTl9SRVZfQjEsIDEzMSwgIDgxOTJ9LAkvKiAo QjMvRjEpICAgKi8KCXtNUExfUFJPRF9LRVkoNCwgICAzKSwgTVBVX1NJTElDT05fUkVWX0IxLCAx MzEsICA4MTkyfSwJLyogKEI0L0YxKSAgICovCgkvKiBwcm9kX3ZlciA9IDUgKi8KCXtNUExfUFJP RF9LRVkoNSwgICAzKSwgTVBVX1NJTElDT05fUkVWX0IxLCAxMzEsIDE2Mzg0fSwJLyogKEI0L0Yx KSAgICovCgkvKiBwcm9kX3ZlciA9IDYgKi8KCXtNUExfUFJPRF9LRVkoNiwgIDE5KSwgTVBVX1NJ TElDT05fUkVWX0IxLCAxMzEsIDE2Mzg0fSwJLyogKEI1L0UyKSAgICovCgkvKiBwcm9kX3ZlciA9 IDcgKi8KCXtNUExfUFJPRF9LRVkoNywgIDE5KSwgTVBVX1NJTElDT05fUkVWX0IxLCAxMzEsIDE2 Mzg0fSwJLyogKEI1L0UyKSAgICovCgkvKiBwcm9kX3ZlciA9IDggKi8KCXtNUExfUFJPRF9LRVko OCwgIDE5KSwgTVBVX1NJTElDT05fUkVWX0IxLCAxMzEsIDE2Mzg0fSwJLyogKEI1L0UyKSAgICov CgkvKiBwcm9kX3ZlciA9IDkgKi8KCXtNUExfUFJPRF9LRVkoOSwgIDE5KSwgTVBVX1NJTElDT05f UkVWX0IxLCAxMzEsIDE2Mzg0fSwJLyogKEI1L0UyKSAgICovCgkvKiBwcm9kX3ZlciA9IDEwICov Cgl7TVBMX1BST0RfS0VZKDEwLCAxOSksIE1QVV9TSUxJQ09OX1JFVl9CMSwgMTMxLCAxNjM4NH0J LyogKEI1L0UyKSAgICovCn07CgovKgogICBMaXN0IG9mIHByb2R1Y3Qgc29mdHdhcmUgcmV2aXNp b25zCgogICBOT1RFIDoKICAgc29mdHdhcmUgcmV2aXNpb24gMCBmYWxscyBiYWNrIHRvIHRoZSBv bGQgZGV0ZWN0aW9uIG1ldGhvZAogICBiYXNlZCBvZmYgdGhlIHByb2R1Y3QgdmVyc2lvbiBhbmQg cHJvZHVjdCByZXZpc2lvbiBwZXIgdGhlCiAgIHRhYmxlIGFib3ZlCiovCnN0YXRpYyBjb25zdCBz dHJ1Y3QgcHJvZF9yZXZfbWFwX3Qgc3dfcmV2X21hcFtdID0gewoJezAsCQkgICAgIDAsICAgMCwg ICAgIDB9LAoJezEsIE1QVV9TSUxJQ09OX1JFVl9CMSwgMTMxLCAgODE5Mn0sCS8qIHJldiBDICov Cgl7MiwgTVBVX1NJTElDT05fUkVWX0IxLCAxMzEsIDE2Mzg0fQkvKiByZXYgRCAqLwp9OwoKc3Rh dGljIGNvbnN0IGludCBhY2NsX3N0X3RiWzMxXSA9IHsKCTM0MCwgMzUxLCAzNjMsIDM3NSwgMzg4 LCA0MDEsIDQxNCwgNDI4LAoJNDQzLCA0NTgsIDQ3MywgNDg5LCA1MDYsIDUyMywgNTQxLCA1NTks Cgk1NzgsIDU5NywgNjE3LCA2MzgsIDY2MCwgNjgyLCA3MDUsIDcyOSwKCTc1MywgNzc5LCA4MDUs IDgzMiwgODYwLCA4ODksIDkxOX07CnN0YXRpYyBjb25zdCBpbnQgZ3lyb182MDUwX3N0X3RiWzMx XSA9IHsKCTMyNzUsIDM0MjUsIDM1ODMsIDM3NDgsIDM5MjAsIDQxMDAsIDQyODksIDQ0ODYsCgk0 NjkzLCA0OTA5LCA1MTM0LCA1MzcxLCA1NjE4LCA1ODc2LCA2MTQ2LCA2NDI5LAoJNjcyNSwgNzAz NCwgNzM1OCwgNzY5NiwgODA1MCwgODQyMSwgODgwOCwgOTIxMywKCTk2MzcsIDEwMDgwLCAxMDU0 NCwgMTEwMjksIDExNTM3LCAxMjA2NywgMTI2MjJ9OwpzdGF0aWMgY29uc3QgaW50IGd5cm9fMzUw MF9zdF90YlsyNTVdID0gewoJMjYyMCwgMjY0NiwgMjY3MiwgMjY5OSwgMjcyNiwgMjc1MywgMjc4 MSwgMjgwOCwKCTI4MzcsIDI4NjUsIDI4OTQsIDI5MjMsIDI5NTIsIDI5ODEsIDMwMTEsIDMwNDEs CgkzMDcyLCAzMTAyLCAzMTMzLCAzMTY1LCAzMTk2LCAzMjI4LCAzMjYxLCAzMjkzLAoJMzMyNiwg MzM1OSwgMzM5MywgMzQyNywgMzQ2MSwgMzQ5NiwgMzUzMSwgMzU2NiwKCTM2MDIsIDM2MzgsIDM2 NzQsIDM3MTEsIDM3NDgsIDM3ODYsIDM4MjMsIDM4NjIsCgkzOTAwLCAzOTM5LCAzOTc5LCA0MDE5 LCA0MDU5LCA0MDk5LCA0MTQwLCA0MTgyLAoJNDIyNCwgNDI2NiwgNDMwOCwgNDM1MiwgNDM5NSwg NDQzOSwgNDQ4MywgNDUyOCwKCTQ1NzQsIDQ2MTksIDQ2NjUsIDQ3MTIsIDQ3NTksIDQ4MDcsIDQ4 NTUsIDQ5MDMsCgk0OTUzLCA1MDAyLCA1MDUyLCA1MTAzLCA1MTU0LCA1MjA1LCA1MjU3LCA1MzEw LAoJNTM2MywgNTQxNywgNTQ3MSwgNTUyNSwgNTU4MSwgNTYzNiwgNTY5MywgNTc1MCwKCTU4MDcs IDU4NjUsIDU5MjQsIDU5ODMsIDYwNDMsIDYxMDQsIDYxNjUsIDYyMjYsCgk2Mjg5LCA2MzUxLCA2 NDE1LCA2NDc5LCA2NTQ0LCA2NjA5LCA2Njc1LCA2NzQyLAoJNjgxMCwgNjg3OCwgNjk0NiwgNzAx NiwgNzA4NiwgNzE1NywgNzIyOSwgNzMwMSwKCTczNzQsIDc0NDgsIDc1MjIsIDc1OTcsIDc2NzMs IDc3NTAsIDc4MjgsIDc5MDYsCgk3OTg1LCA4MDY1LCA4MTQ1LCA4MjI3LCA4MzA5LCA4MzkyLCA4 NDc2LCA4NTYxLAoJODY0NywgODczMywgODgyMCwgODkwOSwgODk5OCwgOTA4OCwgOTE3OCwgOTI3 MCwKCTkzNjMsIDk0NTcsIDk1NTEsIDk2NDcsIDk3NDMsIDk4NDEsIDk5MzksIDEwMDM4LAoJMTAx MzksIDEwMjQwLCAxMDM0MywgMTA0NDYsIDEwNTUwLCAxMDY1NiwgMTA3NjMsIDEwODcwLAoJMTA5 NzksIDExMDg5LCAxMTIwMCwgMTEzMTIsIDExNDI1LCAxMTUzOSwgMTE2NTQsIDExNzcxLAoJMTE4 ODksIDEyMDA4LCAxMjEyOCwgMTIyNDksIDEyMzcxLCAxMjQ5NSwgMTI2MjAsIDEyNzQ2LAoJMTI4 NzQsIDEzMDAyLCAxMzEzMiwgMTMyNjQsIDEzMzk2LCAxMzUzMCwgMTM2NjYsIDEzODAyLAoJMTM5 NDAsIDE0MDgwLCAxNDIyMSwgMTQzNjMsIDE0NTA2LCAxNDY1MiwgMTQ3OTgsIDE0OTQ2LAoJMTUw OTYsIDE1MjQ3LCAxNTM5OSwgMTU1NTMsIDE1NzA5LCAxNTg2NiwgMTYwMjQsIDE2MTg0LAoJMTYz NDYsIDE2NTEwLCAxNjY3NSwgMTY4NDIsIDE3MDEwLCAxNzE4MCwgMTczNTIsIDE3NTI2LAoJMTc3 MDEsIDE3ODc4LCAxODA1NywgMTgyMzcsIDE4NDIwLCAxODYwNCwgMTg3OTAsIDE4OTc4LAoJMTkx NjcsIDE5MzU5LCAxOTU1MywgMTk3NDgsIDE5OTQ2LCAyMDE0NSwgMjAzNDcsIDIwNTUwLAoJMjA3 NTYsIDIwOTYzLCAyMTE3MywgMjEzODUsIDIxNTk4LCAyMTgxNCwgMjIwMzMsIDIyMjUzLAoJMjI0 NzUsIDIyNzAwLCAyMjkyNywgMjMxNTYsIDIzMzg4LCAyMzYyMiwgMjM4NTgsIDI0MDk3LAoJMjQz MzgsIDI0NTgxLCAyNDgyNywgMjUwNzUsIDI1MzI2LCAyNTU3OSwgMjU4MzUsIDI2MDkzLAoJMjYz NTQsIDI2NjE4LCAyNjg4NCwgMjcxNTMsIDI3NDI0LCAyNzY5OSwgMjc5NzYsIDI4MjU1LAoJMjg1 MzgsIDI4ODIzLCAyOTExMiwgMjk0MDMsIDI5Njk3LCAyOTk5NCwgMzAyOTQsIDMwNTk3LAoJMzA5 MDMsIDMxMjEyLCAzMTUyNCwgMzE4MzksIDMyMTU3LCAzMjQ3OSwgMzI4MDR9OwoKaW50IG1wdV9t ZW1vcnlfd3JpdGUoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKCQkJICAgIHVuc2lnbmVk IGNoYXIgbXB1X2FkZHIsCgkJCSAgICB1bnNpZ25lZCBzaG9ydCBtZW1fYWRkciwKCQkJICAgIHVu c2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgY29uc3QgKmRhdGEpCnsKCXVuc2lnbmVkIGNo YXIgYmFua1syXTsKCXVuc2lnbmVkIGNoYXIgYWRkclsyXTsKCXVuc2lnbmVkIGNoYXIgYnVmWzUx M107CgoJc3RydWN0IGkyY19tc2cgbXNnc1szXTsKCWludCByZXM7CgoJaWYgKCFkYXRhIHx8ICFp MmNfYWRhcCkKCQlyZXR1cm4gLUVJTlZBTDsKCglpZiAobGVuID49IChzaXplb2YoYnVmKSAtIDEp KQoJCXJldHVybiAtRU5PTUVNOwoKCWJhbmtbMF0gPSBSRUdfQkFOS19TRUw7CgliYW5rWzFdID0g bWVtX2FkZHIgPj4gODsKCglhZGRyWzBdID0gUkVHX01FTV9TVEFSVDsKCWFkZHJbMV0gPSBtZW1f YWRkciAmIDB4RkY7CgoJYnVmWzBdID0gUkVHX01FTV9SVzsKCW1lbWNweShidWYgKyAxLCBkYXRh LCBsZW4pOwoKCS8qIHdyaXRlIG1lc3NhZ2UgKi8KCW1zZ3NbMF0uYWRkciA9IG1wdV9hZGRyOwoJ bXNnc1swXS5mbGFncyA9IDA7Cgltc2dzWzBdLmJ1ZiA9IGJhbms7Cgltc2dzWzBdLmxlbiA9IHNp emVvZihiYW5rKTsKCgltc2dzWzFdLmFkZHIgPSBtcHVfYWRkcjsKCW1zZ3NbMV0uZmxhZ3MgPSAw OwoJbXNnc1sxXS5idWYgPSBhZGRyOwoJbXNnc1sxXS5sZW4gPSBzaXplb2YoYWRkcik7CgoJbXNn c1syXS5hZGRyID0gbXB1X2FkZHI7Cgltc2dzWzJdLmZsYWdzID0gMDsKCW1zZ3NbMl0uYnVmID0g KHVuc2lnbmVkIGNoYXIgKilidWY7Cgltc2dzWzJdLmxlbiA9IGxlbiArIDE7CgoJcmVzID0gaTJj X3RyYW5zZmVyKGkyY19hZGFwLCBtc2dzLCAzKTsKCWlmIChyZXMgIT0gMykgewoJCWlmIChyZXMg Pj0gMCkKCQkJcmVzID0gLUVJTzsKCQlyZXR1cm4gcmVzOwoJfSBlbHNlCgkJcmV0dXJuIDA7Cn0K aW50IG1wdV9tZW1vcnlfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAoJCQkgICB1 bnNpZ25lZCBjaGFyIG1wdV9hZGRyLAoJCQkgICB1bnNpZ25lZCBzaG9ydCBtZW1fYWRkciwKCQkJ ICAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqZGF0YSkKewoJdW5zaWduZWQgY2hh ciBiYW5rWzJdOwoJdW5zaWduZWQgY2hhciBhZGRyWzJdOwoJdW5zaWduZWQgY2hhciBidWY7CgoJ c3RydWN0IGkyY19tc2cgbXNnc1s0XTsKCWludCByZXM7CgoJaWYgKCFkYXRhIHx8ICFpMmNfYWRh cCkKCQlyZXR1cm4gLUVJTlZBTDsKCgliYW5rWzBdID0gUkVHX0JBTktfU0VMOwoJYmFua1sxXSA9 IG1lbV9hZGRyID4+IDg7CgoJYWRkclswXSA9IFJFR19NRU1fU1RBUlQ7CglhZGRyWzFdID0gbWVt X2FkZHIgJiAweEZGOwoKCWJ1ZiA9IFJFR19NRU1fUlc7CgoJLyogd3JpdGUgbWVzc2FnZSAqLwoJ bXNnc1swXS5hZGRyID0gbXB1X2FkZHI7Cgltc2dzWzBdLmZsYWdzID0gMDsKCW1zZ3NbMF0uYnVm ID0gYmFuazsKCW1zZ3NbMF0ubGVuID0gc2l6ZW9mKGJhbmspOwoKCW1zZ3NbMV0uYWRkciA9IG1w dV9hZGRyOwoJbXNnc1sxXS5mbGFncyA9IDA7Cgltc2dzWzFdLmJ1ZiA9IGFkZHI7Cgltc2dzWzFd LmxlbiA9IHNpemVvZihhZGRyKTsKCgltc2dzWzJdLmFkZHIgPSBtcHVfYWRkcjsKCW1zZ3NbMl0u ZmxhZ3MgPSAwOwoJbXNnc1syXS5idWYgPSAmYnVmOwoJbXNnc1syXS5sZW4gPSAxOwoKCW1zZ3Nb M10uYWRkciA9IG1wdV9hZGRyOwoJbXNnc1szXS5mbGFncyA9IEkyQ19NX1JEOwoJbXNnc1szXS5i dWYgPSBkYXRhOwoJbXNnc1szXS5sZW4gPSBsZW47CgoJcmVzID0gaTJjX3RyYW5zZmVyKGkyY19h ZGFwLCBtc2dzLCA0KTsKCWlmIChyZXMgIT0gNCkgewoJCWlmIChyZXMgPj0gMCkKCQkJcmVzID0g LUVJTzsKCQlyZXR1cm4gcmVzOwoJfSBlbHNlCgkJcmV0dXJuIDA7Cn0KCi8qKgogKiAgQGludGVy bmFsCiAqICBAYnJpZWYgIEludmVyc2UgbG9va3VwIG9mIHRoZSBpbmRleCBvZiBhbiBNUEwgcHJv ZHVjdCBrZXkgLgogKiAgQHBhcmFtICBrZXkKICogICAgICAgICAgICAgIHRoZSBNUEwgcHJvZHVj dCBpbmRlbnRpZmllciBhbHNvIHJlZmVycmVkIHRvIGFzICdrZXknLgogKiAgQHJldHVybiB0aGUg aW5kZXggcG9zaXRpb24gb2YgdGhlIGtleSBpbiB0aGUgYXJyYXksIC0xIGlmIG5vdCBmb3VuZC4K ICovCnN0YXRpYyBzaG9ydCBpbmRleF9vZl9rZXkodW5zaWduZWQgc2hvcnQga2V5KQp7CglpbnQg aTsKCWZvciAoaSA9IDA7IGkgPCBOVU1fT0ZfUFJPRF9SRVZTOyBpKyspCgkJaWYgKHByb2RfcmV2 X21hcFtpXS5tcGxfcHJvZHVjdF9rZXkgPT0ga2V5KQoJCQlyZXR1cm4gKHNob3J0KWk7CglyZXR1 cm4gLTE7Cn0KCmludCBpbnZfZ2V0X3NpbGljb25fcmV2X21wdTYwNTAoc3RydWN0IGludl9neXJv X3N0YXRlX3MgKnN0KQp7CglpbnQgcmVzdWx0OwoJc3RydWN0IGludl9yZWdfbWFwX3MgKnJlZzsK CXVuc2lnbmVkIGNoYXIgcHJvZF92ZXIgPSAweDAwLCBwcm9kX3JldiA9IDB4MDA7CglzdHJ1Y3Qg cHJvZF9yZXZfbWFwX3QgKnBfcmV2OwoJdW5zaWduZWQgY2hhciBiYW5rID0KCSAgICAoQklUX1BS RlRDSF9FTiB8IEJJVF9DRkdfVVNFUl9CQU5LIHwgTVBVX01FTV9PVFBfQkFOS18wKTsKCXVuc2ln bmVkIHNob3J0IG1lbV9hZGRyID0gKChiYW5rIDw8IDgpIHwgTUVNX0FERFJfUFJPRF9SRVYpOwoJ dW5zaWduZWQgc2hvcnQga2V5OwoJdW5zaWduZWQgY2hhciByZWdzWzVdOwoJdW5zaWduZWQgc2hv cnQgc3dfcmV2OwoJc2hvcnQgaW5kZXg7CglzdHJ1Y3QgaW52X2NoaXBfaW5mb19zICpjaGlwX2lu Zm8gPSAmc3QtPmNoaXBfaW5mbzsKCXJlZyA9ICZzdC0+cmVnOwoKCXJlc3VsdCA9IGludl9pMmNf cmVhZChzdCwgcmVnLT5wcm9kdWN0X2lkLCAxLCAmcHJvZF92ZXIpOwoJaWYgKHJlc3VsdCkKCQly ZXR1cm4gcmVzdWx0OwoJcHJvZF92ZXIgJj0gMHhmOwoJbXNsZWVwKFBPV0VSX1VQX1RJTUUpOwoJ cmVzdWx0ID0gbXB1X21lbW9yeV9yZWFkKHN0LT5zbF9oYW5kbGUsIHN0LT5pMmNfYWRkciwgbWVt X2FkZHIsCgkJCTEsICZwcm9kX3Jldik7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7Cglw cm9kX3JldiA+Pj0gMjsKCS8qIGNsZWFuIHRoZSBwcmVmZXRjaCBhbmQgY2ZnIHVzZXIgYmFuayBi aXRzICovCglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5iYW5rX3NlbCwg MCk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CgkvKiBnZXQgdGhlIHNvZnR3YXJlLXBy b2R1Y3QgdmVyc2lvbiwgcmVhZCBmcm9tIFhBX09GRlNfTCAqLwoJcmVzdWx0ID0gaW52X2kyY19y ZWFkKHN0LCBSRUdfWEFfT0ZGU19MX1RDLAoJCQkJU09GVF9QUk9EX1ZFUl9CWVRFUywgcmVncyk7 CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CgoJc3dfcmV2ID0gKHJlZ3NbNF0gJiAweDAx KSA8PCAyIHwJLyogMHgwYiwgYml0IDAgKi8KCQkgKHJlZ3NbMl0gJiAweDAxKSA8PCAxIHwJLyog MHgwOSwgYml0IDAgKi8KCQkgKHJlZ3NbMF0gJiAweDAxKTsJCS8qIDB4MDcsIGJpdCAwICovCgkv KiBpZiAwLCB1c2UgdGhlIHByb2R1Y3Qga2V5IHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBwYXJ0 ICovCglpZiAoc3dfcmV2ID09IDApIHsKCQlrZXkgPSBNUExfUFJPRF9LRVkocHJvZF92ZXIsIHBy b2RfcmV2KTsKCQlpZiAoa2V5ID09IDApCgkJCXJldHVybiAtMTsKCQlpbmRleCA9IGluZGV4X29m X2tleShrZXkpOwoJCWlmIChpbmRleCA9PSAtMSB8fCBpbmRleCA+PSBOVU1fT0ZfUFJPRF9SRVZT KQoJCQlyZXR1cm4gLTE7CgkJLyogY2hlY2sgTVBMIGlzIGNvbXBpbGVkIGZvciB0aGlzIGRldmlj ZSAqLwoJCWlmIChwcm9kX3Jldl9tYXBbaW5kZXhdLnNpbGljb25fcmV2ICE9IE1QVV9TSUxJQ09O X1JFVl9CMSkKCQkJcmV0dXJuIC0xOwoJCXBfcmV2ID0gKHN0cnVjdCBwcm9kX3Jldl9tYXBfdCAq KSZwcm9kX3Jldl9tYXBbaW5kZXhdOwoJLyogaWYgdmFsaWQsIHVzZSB0aGUgc29mdHdhcmUgcHJv ZHVjdCBrZXkgKi8KCX0gZWxzZSBpZiAoc3dfcmV2IDwgQVJSQVlfU0laRShzd19yZXZfbWFwKSkK CQlwX3JldiA9IChzdHJ1Y3QgcHJvZF9yZXZfbWFwX3QgKikmc3dfcmV2X21hcFtzd19yZXZdOwoJ ZWxzZQoJCXJldHVybiAtMTsKCWNoaXBfaW5mby0+cHJvZHVjdF9pZCA9IHByb2RfdmVyOwoJY2hp cF9pbmZvLT5wcm9kdWN0X3JldmlzaW9uID0gcHJvZF9yZXY7CgljaGlwX2luZm8tPnNpbGljb25f cmV2aXNpb24gPSBwX3Jldi0+c2lsaWNvbl9yZXY7CgljaGlwX2luZm8tPnNvZnR3YXJlX3Jldmlz aW9uID0gc3dfcmV2OwoJY2hpcF9pbmZvLT5neXJvX3NlbnNfdHJpbSA9IHBfcmV2LT5neXJvX3Ry aW07CgljaGlwX2luZm8tPmFjY2xfc2Vuc190cmltID0gcF9yZXYtPmFjY2VsX3RyaW07CglpZiAo Y2hpcF9pbmZvLT5hY2NsX3NlbnNfdHJpbSA9PSAwKQoJCWNoaXBfaW5mby0+YWNjbF9zZW5zX3Ry aW0gPSBERUZBVUxUX0FDQ0xfVFJJTTsKCWNoaXBfaW5mby0+bXVsdGkgPSBERUZBVUxUX0FDQ0xf VFJJTS9jaGlwX2luZm8tPmFjY2xfc2Vuc190cmltOwoJaWYgKGNoaXBfaW5mby0+bXVsdGkgIT0g MSkKCQlwcl9lcnIoIm11bHRpIGlzICVkXG4iLCBjaGlwX2luZm8tPm11bHRpKTsKCXJldHVybiBy ZXN1bHQ7Cn0KLyoqCiAqICBAaW50ZXJuYWwKICogIEBicmllZiAgcmVhZCB0aGUgYWNjZWxlcm9t ZXRlciBoYXJkd2FyZSBzZWxmLXRlc3QgYmlhcyBzaGlmdCBjYWxjdWxhdGVkCiAqICAgICAgICAg IGR1cmluZyBmaW5hbCBwcm9kdWN0aW9uIHRlc3QgYW5kIHN0b3JlZCBpbiBjaGlwIG5vbi12b2xh dGlsZSBtZW1vcnkuCiAqICBAcGFyYW0gIHN0CiAqICAgICAgICAgICAgICBzZXJpYWwgaW50ZXJm YWNlIGhhbmRsZSB0byBhbGxvdyBzZXJpYWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQogKiAgICAg ICAgICAgICAgZGV2aWNlLCBib3RoIGd5cm8gYW5kIGFjY2VsZXJvbWV0ZXIuCiAqICBAcGFyYW0g IGN0X3NoaWZ0X3Byb2QKICogICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiAz IGZsb2F0IGVsZW1lbnRzIHRvIGhvbGQgdGhlIHZhbHVlcwogKiAgICAgICAgICAgICAgZm9yIHBy b2R1Y3Rpb24gaGFyZHdhcmUgc2VsZi10ZXN0IGJpYXMgc2hpZnRzIHJldHVybmVkIHRvIHRoZQog KiAgICAgICAgICAgICAgdXNlci4KICogIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBvciBhIG5vbi16 ZXJvIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgogKi8Kc3RhdGljIGludCByZWFkX2FjY2VsX2h3X3Nl bGZfdGVzdF9wcm9kX3NoaWZ0KHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwKCQkJCQlpbnQg KnN0X3Byb2QpCnsKCXVuc2lnbmVkIGNoYXIgcmVnc1s0XTsKCXVuc2lnbmVkIGNoYXIgc2hpZnRf Y29kZVszXTsKCWludCByZXN1bHQsIGk7CglzdF9wcm9kWzBdID0gc3RfcHJvZFsxXSA9IHN0X3By b2RbMl0gPSAwOwoJcmVzdWx0ID0gaW52X2kyY19yZWFkKHN0LCBSRUdfU1RfR0NUX1gsIEFSUkFZ X1NJWkUocmVncyksIHJlZ3MpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJaWYgKCgw ID09IHJlZ3NbMF0pICAmJiAoMCA9PSByZWdzWzFdKSAmJgoJCSgwID09IHJlZ3NbMl0pICYmICgw ID09IHJlZ3NbM10pKQoJCXJldHVybiAtMTsKCXNoaWZ0X2NvZGVbWF0gPSAoKHJlZ3NbMF0gJiAw eEUwKSA+PiAzKSB8ICgocmVnc1szXSAmIDB4MzApID4+IDQpOwoJc2hpZnRfY29kZVtZXSA9ICgo cmVnc1sxXSAmIDB4RTApID4+IDMpIHwgKChyZWdzWzNdICYgMHgwQykgPj4gMik7CglzaGlmdF9j b2RlW1pdID0gKChyZWdzWzJdICYgMHhFMCkgPj4gMykgfCAgKHJlZ3NbM10gJiAweDAzKTsKCWZv ciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKCQlpZiAoc2hpZnRfY29kZVtpXSAhPSAwKQoJCQlzdF9w cm9kW2ldID0gdGVzdF9zZXR1cC5hY2NsX3NlbnNbaV0qCgkJCQlhY2NsX3N0X3RiW3NoaWZ0X2Nv ZGVbaV0gLSAxXTsKCX0KCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IGludl9jaGVja19hY2NsX3Nl bGZfdGVzdChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsCglpbnQgKnJlZ19hdmcsIGludCAq c3RfYXZnKXsKCWludCBncmF2aXR5LCByZWdfel9hdmcsIGdfel9zaWduLCBmcywgaiwgcmV0X3Zh bDsKCWludCB0bXAxOwoJaW50IHN0X3NoaWZ0X3Byb2RbVEhSRUVfQVhJU10sIHN0X3NoaWZ0X2N1 c3RbVEhSRUVfQVhJU107CglpbnQgc3Rfc2hpZnRfcmF0aW9bVEhSRUVfQVhJU107CglpZiAoc3Qt PmNoaXBfaW5mby5zb2Z0d2FyZV9yZXZpc2lvbiA8IERFRl9PTERFU1RfU1VQUF9TV19SRVYgJiYK CQlzdC0+Y2hpcF9pbmZvLnByb2R1Y3RfcmV2aXNpb24gPCBERUZfT0xERVNUX1NVUFBfUFJPRF9S RVYpCgkJcmV0dXJuIDA7CglmcyA9IERFRl9TVF9BQ0NMX0ZVTExfU0NBTEU7ICAgIC8qIGFzc3Vt ZSArLy0gMiBtZyBhcyB0eXBpY2FsICovCglnX3pfc2lnbiA9IDE7CglyZXRfdmFsID0gMDsKCXRl c3Rfc2V0dXAuYWNjbF9zZW5zW1hdID0gKHVuc2lnbmVkIGludCkoREVGX1NUX1NDQUxFICoKCQkJ CQkJREVGX1NUX1BSRUNJU0lPTiAvIGZzKTsKCXRlc3Rfc2V0dXAuYWNjbF9zZW5zW1ldID0gKHVu c2lnbmVkIGludCkoREVGX1NUX1NDQUxFICoKCQkJCQkJREVGX1NUX1BSRUNJU0lPTiAvIGZzKTsK CXRlc3Rfc2V0dXAuYWNjbF9zZW5zW1pdID0gKHVuc2lnbmVkIGludCkoREVGX1NUX1NDQUxFICoK CQkJCQkJREVGX1NUX1BSRUNJU0lPTiAvIGZzKTsKCglpZiAoTVBMX1BST0RfS0VZKHN0LT5jaGlw X2luZm8ucHJvZHVjdF9pZCwKCQlzdC0+Y2hpcF9pbmZvLnByb2R1Y3RfcmV2aXNpb24pID09CgkJ TVBVX1BST0RVQ1RfS0VZX0IxX0UxXzUpIHsKCQkvKiBoYWxmIHNlbnNpdGl2aXR5IFogYWNjZWxl cm9tZXRlciBwYXJ0cyAqLwoJCXRlc3Rfc2V0dXAuYWNjbF9zZW5zW1pdIC89IDI7Cgl9IGVsc2Ug ewoJCS8qIGhhbGYgc2Vuc2l0aXZpdHkgWCwgWSwgWiBhY2NlbGVyb21ldGVyIHBhcnRzICovCgkJ dGVzdF9zZXR1cC5hY2NsX3NlbnNbWF0gLz0gc3QtPmNoaXBfaW5mby5tdWx0aTsKCQl0ZXN0X3Nl dHVwLmFjY2xfc2Vuc1tZXSAvPSBzdC0+Y2hpcF9pbmZvLm11bHRpOwoJCXRlc3Rfc2V0dXAuYWNj bF9zZW5zW1pdIC89IHN0LT5jaGlwX2luZm8ubXVsdGk7Cgl9CglncmF2aXR5ID0gdGVzdF9zZXR1 cC5hY2NsX3NlbnNbWl07CglyZWdfel9hdmcgPSByZWdfYXZnW1pdIC0gZ196X3NpZ24gKiBncmF2 aXR5KkRFRl9TVF9QUkVDSVNJT047CglyZWFkX2FjY2VsX2h3X3NlbGZfdGVzdF9wcm9kX3NoaWZ0 KHN0LCBzdF9zaGlmdF9wcm9kKTsKCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKCQlzdF9zaGlm dF9jdXN0W2pdID0gYWJzKHJlZ19hdmdbal0gLSBzdF9hdmdbal0pOwoJCWlmIChzdF9zaGlmdF9w cm9kW2pdKSB7CgkJCXRtcDEgPSBzdF9zaGlmdF9wcm9kW2pdL0RFRl9TVF9QUkVDSVNJT047CgkJ CXN0X3NoaWZ0X3JhdGlvW2pdID0gc3Rfc2hpZnRfY3VzdFtqXS90bXAxCgkJCQktIERFRl9TVF9Q UkVDSVNJT047CgkJCWlmIChzdF9zaGlmdF9yYXRpb1tqXSA+IERFRl9BQ0NFTF9TVF9TSElGVF9E RUxUQSkKCQkJCXJldF92YWwgfD0gMSA8PCBqOwoJCQlpZiAoc3Rfc2hpZnRfcmF0aW9bal0gPCAt REVGX0FDQ0VMX1NUX1NISUZUX0RFTFRBKQoJCQkJcmV0X3ZhbCB8PSAxIDw8IGo7CgkJfSBlbHNl IHsKCQkJaWYgKHN0X3NoaWZ0X2N1c3Rbal0gPAoJCQkJREVGX0FDQ0VMX1NUX1NISUZUX01JTipn cmF2aXR5KQoJCQkJcmV0X3ZhbCB8PSAxIDw8IGo7CgkJCWlmIChzdF9zaGlmdF9jdXN0W2pdID4K CQkJCURFRl9BQ0NFTF9TVF9TSElGVF9NQVgqZ3Jhdml0eSkKCQkJCXJldF92YWwgfD0gMSA8PCBq OwoJCX0KCX0KCXJldHVybiByZXRfdmFsOwp9CnN0YXRpYyBpbnQgaW52X2NoZWNrXzM1MDBfZ3ly b19zZWxmX3Rlc3Qoc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0LAoJaW50ICpyZWdfYXZnLCBp bnQgKnN0X2F2Zyl7CglpbnQgcmVzdWx0OwoJaW50IGdzdFszXSwgcmV0X3ZhbDsKCWludCBnc3Rf b3RwWzNdLCBpOwoJdW5zaWduZWQgY2hhciBzdF9jb2RlW1RIUkVFX0FYSVNdOwoJcmV0X3ZhbCA9 IDA7CgoJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKCQlnc3RbaV0gPSBzdF9hdmdbaV0gLSByZWdf YXZnW2ldOwoJcmVzdWx0ID0gaW52X2kyY19yZWFkKHN0LCBSRUdfMzUwMF9PVFAsIFRIUkVFX0FY SVMsIHN0X2NvZGUpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJZ3N0X290cFswXSA9 IGdzdF9vdHBbMV0gPSBnc3Rfb3RwWzJdID0gMDsKCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsK CQlpZiAoc3RfY29kZVtpXSAhPSAwKQoJCQlnc3Rfb3RwW2ldID0gZ3lyb18zNTAwX3N0X3RiW3N0 X2NvZGVbaV0gLSAxXTsKCX0KCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKCQlpZiAoZ3N0X290 cFtpXSA9PSAwKSB7CgkJCWlmIChhYnMoZ3N0W2ldKSo0IDwgNjAqMipERUZfU1RfUFJFQ0lTSU9O KgoJCQkJCURFRl9HWVJPX1NDQUxFKQoJCQkJcmV0X3ZhbCB8PSAoMTw8aSk7CgkJfSBlbHNlIHsK CQkJaWYgKGFicyhnc3RbaV0vZ3N0X290cFtpXSAtIERFRl9TVF9QUkVDSVNJT04pID4KCQkJCQlE RUZfR1lST19DVF9TSElGVF9ERUxUQSkKCQkJCXJldF92YWwgfD0gKDE8PGkpOwoJCX0KCX0KCWZv ciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKCQlpZiAoYWJzKHJlZ19hdmdbaV0pKjQgPiAyMCoyKkRF Rl9TVF9QUkVDSVNJT04qREVGX0dZUk9fU0NBTEUpCgkJCXJldF92YWwgfD0gKDE8PGkpOwoJfQoK CXJldHVybiByZXRfdmFsOwp9CnN0YXRpYyBpbnQgaW52X2NoZWNrXzYwNTBfZ3lyb19zZWxmX3Rl c3Qoc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0LAoJaW50ICpyZWdfYXZnLCBpbnQgKnN0X2F2 Zyl7CglpbnQgcmVzdWx0OwoJaW50IHJldF92YWw7CglpbnQgY3Rfc2hpZnRfcHJvZFszXSwgc3Rf c2hpZnRfY3VzdFszXSwgc3Rfc2hpZnRfcmF0aW9bM10sIGk7Cgl1bnNpZ25lZCBjaGFyIHJlZ3Nb M107CglpZiAoc3QtPmNoaXBfaW5mby5zb2Z0d2FyZV9yZXZpc2lvbiA8IERFRl9PTERFU1RfU1VQ UF9TV19SRVYgJiYKCQlzdC0+Y2hpcF9pbmZvLnByb2R1Y3RfcmV2aXNpb24gPCBERUZfT0xERVNU X1NVUFBfUFJPRF9SRVYpCgkJcmV0dXJuIDA7CgoJcmV0X3ZhbCA9IDA7CglyZXN1bHQgPSBpbnZf aTJjX3JlYWQoc3QsIFJFR19TVF9HQ1RfWCwgMywgcmVncyk7CglyZWdzW1hdICY9IDB4MWY7Cgly ZWdzW1ldICY9IDB4MWY7CglyZWdzW1pdICY9IDB4MWY7CgoJZm9yIChpID0gMDsgaSA8IDM7IGkr KykgewoJCWlmIChyZWdzW2ldICE9IDApCgkJCWN0X3NoaWZ0X3Byb2RbaV0gPSBneXJvXzYwNTBf c3RfdGJbcmVnc1tpXSAtIDFdOwoJCWVsc2UKCQkJY3Rfc2hpZnRfcHJvZFtpXSA9IDA7Cgl9Cglm b3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CgkJc3Rfc2hpZnRfY3VzdFtpXSA9IGFicyhyZWdfYXZn W2ldIC0gc3RfYXZnW2ldKTsKCQlpZiAoY3Rfc2hpZnRfcHJvZFtpXSkgewoJCQlzdF9zaGlmdF9y YXRpb1tpXSA9IHN0X3NoaWZ0X2N1c3RbaV0vCgkJCQljdF9zaGlmdF9wcm9kW2ldIC0gREVGX1NU X1BSRUNJU0lPTjsKCQkJaWYgKHN0X3NoaWZ0X3JhdGlvW2ldID4gREVGX0dZUk9fQ1RfU0hJRlRf REVMVEEpCgkJCQlyZXRfdmFsIHw9IDEgPDwgaTsKCQkJaWYgKHN0X3NoaWZ0X3JhdGlvW2ldIDwg LURFRl9HWVJPX0NUX1NISUZUX0RFTFRBKQoJCQkJcmV0X3ZhbCB8PSAxIDw8IGk7CgkJfSBlbHNl IHsKCQkJaWYgKHN0X3NoaWZ0X2N1c3RbaV0gPCBERUZfU1RfUFJFQ0lTSU9OKgoJCQkJREVGX0dZ Uk9fQ1RfU0hJRlRfTUlOKnRlc3Rfc2V0dXAuZ3lyb19zZW5zKQoJCQkJcmV0X3ZhbCB8PSAxIDw8 IGk7CgkJCWlmIChzdF9zaGlmdF9jdXN0W2ldID4gREVGX1NUX1BSRUNJU0lPTioKCQkJCURFRl9H WVJPX0NUX1NISUZUX01BWCp0ZXN0X3NldHVwLmd5cm9fc2VucykKCQkJCXJldF92YWwgfD0gMSA8 PCBpOwoJCX0KCX0KCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKCQlpZiAoYWJzKHJlZ19hdmdb aV0pKjQgPiAyMCoyKkRFRl9TVF9QUkVDSVNJT04qREVGX0dZUk9fU0NBTEUpCgkJCXJldF92YWwg fD0gKDE8PGkpOwoJfQoJcmV0dXJuIHJldF92YWw7Cn0KCi8qKgogKiAgaW52X2RvX3Rlc3QoKSAt IGRvIHRoZSBhY3R1YWwgdGVzdCBvZiBzZWxmIHRlc3RpbmcKICovCmludCBpbnZfZG9fdGVzdChz dHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsIGludCBzZWxmX3Rlc3RfZmxhZywKCQlpbnQgKmd5 cm9fcmVzdWx0LCBpbnQgKmFjY2xfcmVzdWx0KQp7CglzdHJ1Y3QgaW52X3JlZ19tYXBfcyAqcmVn OwoJaW50IHJlc3VsdCwgaSwgcGFja2V0X3NpemU7Cgl1bnNpZ25lZCBjaGFyIGRhdGFbQllURVNf UEVSX1NFTlNPUiAqIDJdLCBoYXNfYWNjbDsKCWludCBmaWZvX2NvdW50LCBwYWNrZXRfY291bnQs IGluZDsKCglyZWcgPSAmc3QtPnJlZzsKCWhhc19hY2NsID0gKHN0LT5jaGlwX3R5cGUgIT0gSU5W X0lURzM1MDApOwoJcGFja2V0X3NpemUgPSBCWVRFU19QRVJfU0VOU09SKigxICsgaGFzX2FjY2wp OwoKCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPmludF9lbmFibGUsIDAp OwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJLyogZGlzYWJsZSB0aGUgc2Vuc29yIG91 dHB1dCB0byBGSUZPICovCglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5m aWZvX2VuLCAwKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCS8qIGRpc2FibGUgZmlm byByZWFkaW5nICovCglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT51c2Vy X2N0cmwsIDApOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJLyogY2xlYXIgRklGTyAq LwoJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+dXNlcl9jdHJsLCBCSVRf RklGT19SU1QpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJLyogc2V0dXAgcGFyYW1l dGVycyAqLwoJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+bHBmLCB0ZXN0 X3NldHVwLmxwZik7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglyZXN1bHQgPSBpbnZf aTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5zYW1wbGVfcmF0ZV9kaXYsCgkJdGVzdF9zZXR1cC5z YW1wbGVfcmF0ZSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglyZXN1bHQgPSBpbnZf aTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5neXJvX2NvbmZpZywKCQlzZWxmX3Rlc3RfZmxhZyB8 IHRlc3Rfc2V0dXAuZnNyKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCWlmIChoYXNf YWNjbCkgewoJCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPmFjY2xfY29u ZmlnLAoJCQlzZWxmX3Rlc3RfZmxhZyB8IHRlc3Rfc2V0dXAuYWNjbF9mcyk7CgkJaWYgKHJlc3Vs dCkKCQkJcmV0dXJuIHJlc3VsdDsKCX0KCS8qd2FpdCBmb3IgdGhlIG91dHB1dCB0byBzdGFibGUq LwoJaWYgKHNlbGZfdGVzdF9mbGFnKQoJCW1zbGVlcChERUZfU1RfU1RBQkxFX1RJTUUpOwoKCS8q IGVuYWJsZSBGSUZPIHJlYWRpbmcgKi8KCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0 LCByZWctPnVzZXJfY3RybCwgQklUX0ZJRk9fRU4pOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVz dWx0OwoJLyogZW5hYmxlIHNlbnNvciBvdXRwdXQgdG8gRklGTyAqLwoJcmVzdWx0ID0gaW52X2ky Y19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+Zmlmb19lbiwgQklUU19HWVJPX09VVAoJCXwgKGhhc19h Y2NsIDw8IDMpKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCW1kZWxheShERUZfR1lS T19XQUlUX1RJTUUpOwoJLyogc3RvcCBzZW5kaW5nIGRhdGEgdG8gRklGTyAqLwoJcmVzdWx0ID0g aW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+Zmlmb19lbiwgMCk7CglpZiAocmVzdWx0KQoJ CXJldHVybiByZXN1bHQ7CglyZXN1bHQgPSBpbnZfaTJjX3JlYWQoc3QsIHJlZy0+Zmlmb19jb3Vu dF9oLCAyLCBkYXRhKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCWZpZm9fY291bnQg PSAoZGF0YVswXSA8PCA4KSArIGRhdGFbMV07CglwYWNrZXRfY291bnQgPSBmaWZvX2NvdW50L3Bh Y2tldF9zaXplOwoJZ3lyb19yZXN1bHRbMF0gPSBneXJvX3Jlc3VsdFsxXSA9IGd5cm9fcmVzdWx0 WzJdID0gMDsKCWFjY2xfcmVzdWx0WzBdID0gYWNjbF9yZXN1bHRbMV0gPSBhY2NsX3Jlc3VsdFsy XSA9IDA7CglpZiAoYWJzKHBhY2tldF9jb3VudCAtIERFRl9HWVJPX1BBQ0tFVF9USFJFU0gpCgkJ PD0gREVGX0dZUk9fVEhSRVNIKSB7CgkJZm9yIChpID0gMDsgaSA8IHBhY2tldF9jb3VudDsgaSsr KSB7CgkJCS8qIGdldHRpbmcgRklGTyBkYXRhICovCgkJCXJlc3VsdCA9IGludl9pMmNfcmVhZChz dCwgcmVnLT5maWZvX3JfdywKCQkJCXBhY2tldF9zaXplLCBkYXRhKTsKCQkJaWYgKHJlc3VsdCkK CQkJCXJldHVybiByZXN1bHQ7CgkJCWluZCA9IDA7CgkJCWlmIChoYXNfYWNjbCkgewoJCQkJYWNj bF9yZXN1bHRbMF0gKz0gKHNob3J0KSgoZGF0YVtpbmRdIDw8IDgpCgkJCQkJCXwgZGF0YVtpbmQg KyAxXSk7CgkJCQlhY2NsX3Jlc3VsdFsxXSArPSAoc2hvcnQpKChkYXRhW2luZCsyXSA8PCA4KQoJ CQkJCQl8IGRhdGFbaW5kICsgM10pOwoJCQkJYWNjbF9yZXN1bHRbMl0gKz0gKHNob3J0KSgoZGF0 YVtpbmQrNF0gPDwgOCkKCQkJCQkJfCBkYXRhW2luZCs1XSk7CgkJCQlpbmQgKz0gNjsKCQkJfQoJ CQlneXJvX3Jlc3VsdFswXSArPSAoc2hvcnQpKChkYXRhW2luZF0gPDwgOCkgfAoJCQkJZGF0YVtp bmQrMV0pOwoJCQlneXJvX3Jlc3VsdFsxXSArPSAoc2hvcnQpKChkYXRhW2luZCsyXSA8PCA4KSB8 CgkJCQlkYXRhW2luZCszXSk7CgkJCWd5cm9fcmVzdWx0WzJdICs9IChzaG9ydCkoKGRhdGFbaW5k KzRdIDw8IDgpIHwKCQkJCWRhdGFbaW5kKzVdKTsKCQl9Cgl9IGVsc2UgewoJCXJldHVybiAtRUFH QUlOOwoJfQoJZ3lyb19yZXN1bHRbMF0gPSBneXJvX3Jlc3VsdFswXSpERUZfU1RfUFJFQ0lTSU9O L3BhY2tldF9jb3VudDsKCWd5cm9fcmVzdWx0WzFdID0gZ3lyb19yZXN1bHRbMV0qREVGX1NUX1BS RUNJU0lPTi9wYWNrZXRfY291bnQ7CglneXJvX3Jlc3VsdFsyXSA9IGd5cm9fcmVzdWx0WzJdKkRF Rl9TVF9QUkVDSVNJT04vcGFja2V0X2NvdW50OwoJaWYgKGhhc19hY2NsKSB7CgkJYWNjbF9yZXN1 bHRbMF0gPQoJCQlhY2NsX3Jlc3VsdFswXSpERUZfU1RfUFJFQ0lTSU9OL3BhY2tldF9jb3VudDsK CQlhY2NsX3Jlc3VsdFsxXSA9CgkJCWFjY2xfcmVzdWx0WzFdKkRFRl9TVF9QUkVDSVNJT04vcGFj a2V0X2NvdW50OwoJCWFjY2xfcmVzdWx0WzJdID0KCQkJYWNjbF9yZXN1bHRbMl0qREVGX1NUX1BS RUNJU0lPTi9wYWNrZXRfY291bnQ7Cgl9CgoJcmV0dXJuIDA7Cn0KLyoqCiAqICBpbnZfcmVjb3Zl cl9zZXR0aW5nKCkgcmVjb3ZlciB0aGUgb2xkIHNldHRpbmdzIGFmdGVyIGV2ZXJ5dGhpbmcgaXMg ZG9uZQogKi8KCnN0YXRpYyB2b2lkICAgaW52X3JlY292ZXJfc2V0dGluZyhzdHJ1Y3QgaW52X2d5 cm9fc3RhdGVfcyAqc3QpCnsKCXN0cnVjdCBpbnZfcmVnX21hcF9zICpyZWc7CglpbnQgZGF0YTsK CXN0cnVjdCBpaW9fZGV2ICppbmRpbyA9IGlpb19wcml2X3RvX2RldihzdCk7CgoJcmVnID0gJnN0 LT5yZWc7CglzZXRfaW52X2VuYWJsZShpbmRpbywgc3QtPmNoaXBfY29uZmlnLmVuYWJsZSk7Cglp bnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5neXJvX2NvbmZpZywgc3QtPmNoaXBfY29uZmln LmZzcjw8Myk7CglpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5scGYsIHN0LT5jaGlwX2Nv bmZpZy5scGYpOwoJZGF0YSA9IE9ORV9LX0haL3N0LT5jaGlwX2NvbmZpZy5maWZvX3JhdGUgLSAx OwoJaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+c2FtcGxlX3JhdGVfZGl2LCBkYXRhKTsK CWlmIChJTlZfSVRHMzUwMCAhPSBzdC0+Y2hpcF90eXBlKSB7CgkJaW52X2kyY19zaW5nbGVfd3Jp dGUoc3QsIHJlZy0+YWNjbF9jb25maWcsCgkJCShzdC0+Y2hpcF9jb25maWcuYWNjbF9mcyA8PCAz KXwwKTsKCX0KCWlmIChzdC0+Y2hpcF9jb25maWcuaXNfYXNsZWVwKQoJCWludl9zZXRfcG93ZXJf c3RhdGUoc3QsIDApOwoJZWxzZQoJCWludl9zZXRfcG93ZXJfc3RhdGUoc3QsIDEpOwp9CnN0YXRp YyBpbnQgaW52X2NoZWNrX2NvbXBhc3Nfc2VsZl90ZXN0KHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9z ICpzdCkKewoJaW50IHJlc3VsdDsKCXVuc2lnbmVkIGNoYXIgZGF0YVs2XTsKCXVuc2lnbmVkIGNo YXIgY291bnRlciwgY250bDsKCXNob3J0IHgsIHksIHo7Cgl1bnNpZ25lZCBjaGFyICpzZW5zOwoJ c2VucyA9IHN0LT5jaGlwX2luZm8uY29tcGFzc19zZW5zOwoKCS8qc2V0IHRvIGJ5cGFzcyBtb2Rl ICovCglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgUkVHX0lOVF9QSU5fQ0ZHLCBC SVRfQllQQVNTX0VOKTsKCWlmIChyZXN1bHQpIHsKCQlpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwg UkVHX0lOVF9QSU5fQ0ZHLCAweDApOwoJCXJldHVybiByZXN1bHQ7Cgl9CgkvKnNldCB0byBwb3dl ciBkb3duIG1vZGUgKi8KCXJlc3VsdCA9IGludl9zZWNvbmRhcnlfd3JpdGUoUkVHX0FLTV9NT0RF LCBEQVRBX0FLTV9NT0RFX1BXX0ROKTsKCWlmIChyZXN1bHQpCgkJZ290byBBS01fZmFpbDsKCgkv KndyaXRlIDEgdG8gQVNUQyByZWdpc3RlciAqLwoJcmVzdWx0ID0gaW52X3NlY29uZGFyeV93cml0 ZShSRUdfQUtNX1NUX0NUUkwsIERBVEFfQUtNX1NFTEZfVEVTVCk7CglpZiAocmVzdWx0KQoJCWdv dG8gQUtNX2ZhaWw7CgkvKnNldCBzZWxmIHRlc3QgbW9kZSAqLwoJcmVzdWx0ID0gaW52X3NlY29u ZGFyeV93cml0ZShSRUdfQUtNX01PREUsIERBVEFfQUtNX01PREVfUFdfU1QpOwoJaWYgKHJlc3Vs dCkKCQlnb3RvIEFLTV9mYWlsOwoJY291bnRlciA9IERFRl9TVF9DT01QQVNTX1RSWV9USU1FUzsK CXdoaWxlIChjb3VudGVyID4gMCkgewoJCXVzbGVlcF9yYW5nZShERUZfU1RfQ09NUEFTU19XQUlU LCBERUZfU1RfQ09NUEFTU19XQUlUKTsKCQlyZXN1bHQgPSBpbnZfc2Vjb25kYXJ5X3JlYWQoUkVH X0FLTV9TVEFUVVMsIDEsIGRhdGEpOwoJCWlmIChyZXN1bHQpCgkJCWdvdG8gQUtNX2ZhaWw7CgkJ aWYgKGRhdGFbMF0gIT0gREFUQV9BS01fRFJEWSkKCQkJY291bnRlci0tOwoJCWVsc2UKCQkJY291 bnRlciA9IDA7Cgl9CglpZiAoZGF0YVswXSAhPSBEQVRBX0FLTV9EUkRZKSB7CgkJcmVzdWx0ID0g LTE7CgkJZ290byBBS01fZmFpbDsKCX0KCXJlc3VsdCA9IGludl9zZWNvbmRhcnlfcmVhZChSRUdf QUtNX01FQVNVUkVfREFUQSwKCQkJCQlCWVRFU19QRVJfU0VOU09SLCBkYXRhKTsKCWlmIChyZXN1 bHQpCgkJZ290byBBS01fZmFpbDsKCgl4ID0JbGUxNl90b19jcHVwKChfX2xlMTYgKikoJmRhdGFb MF0pKTsKCXkgPQlsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKSgmZGF0YVsyXSkpOwoJeiA9CWxlMTZf dG9fY3B1cCgoX19sZTE2ICopKCZkYXRhWzRdKSk7Cgl4ID0gKCh4ICogKHNlbnNbMF0gKyAxMjgp KSA+PiA4KTsKCXkgPSAoKHkgKiAoc2Vuc1sxXSArIDEyOCkpID4+IDgpOwoJeiA9ICgoeiAqIChz ZW5zWzJdICsgMTI4KSkgPj4gOCk7CglpZiAoQ09NUEFTU19JRF9BSzg5NjMgPT0gc3QtPnBsYXRf ZGF0YS5zZWNfc2xhdmVfaWQpIHsKCQlyZXN1bHQgPSBpbnZfc2Vjb25kYXJ5X3JlYWQoUkVHX0FL TTg5NjNfQ05UTDEsIDEsICZjbnRsKTsKCQlpZiAocmVzdWx0KQoJCQlnb3RvIEFLTV9mYWlsOwoJ CWlmICgwID09IChjbnRsICYgREFUQV9BS004OTYzX0JJVCkpIHsKCQkJeCA8PD0gMjsKCQkJeSA8 PD0gMjsKCQkJeiA8PD0gMjsKCQl9Cgl9CglyZXN1bHQgPSAxOwoJcmVzdWx0ID0gaW52X3NlY29u ZGFyeV9yZWFkKFJFR19BS004OTYzX0NOVEwxLCAxLCAmY250bCk7CglpZiAoeCA+IHN0LT5jb21w YXNzX3N0X3VwcGVyW1hdIHx8IHggPCBzdC0+Y29tcGFzc19zdF9sb3dlcltYXSkKCQlnb3RvIEFL TV9mYWlsOwoJaWYgKHkgPiBzdC0+Y29tcGFzc19zdF91cHBlcltZXSB8fCB5IDwgc3QtPmNvbXBh c3Nfc3RfbG93ZXJbWV0pCgkJZ290byBBS01fZmFpbDsKCWlmICh6ID4gc3QtPmNvbXBhc3Nfc3Rf dXBwZXJbWl0gfHwgeiA8IHN0LT5jb21wYXNzX3N0X2xvd2VyW1pdKQoJCWdvdG8gQUtNX2ZhaWw7 CglyZXN1bHQgPSAwOwpBS01fZmFpbDoKCS8qd3JpdGUgMCB0byBBU1RDIHJlZ2lzdGVyICovCgly ZXN1bHQgfD0gaW52X3NlY29uZGFyeV93cml0ZShSRUdfQUtNX1NUX0NUUkwsIDApOwoJLypzZXQg dG8gcG93ZXIgZG93biBtb2RlICovCglyZXN1bHQgfD0gaW52X3NlY29uZGFyeV93cml0ZShSRUdf QUtNX01PREUsIERBVEFfQUtNX01PREVfUFdfRE4pOwoJLypyZXN0b3JlIHRvIG5vbi1ieXBhc3Mg bW9kZSAqLwoJcmVzdWx0IHw9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCBSRUdfSU5UX1BJTl9D RkcsIDB4MCk7CglyZXR1cm4gcmVzdWx0Owp9CnN0YXRpYyBpbnQgaW52X3Bvd2VyX3VwX3NlbGZf dGVzdChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QpCnsKCWludCByZXN1bHQ7CglyZXN1bHQg PSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgc3QtPnJlZy5wd3JfbWdtdF8xLCBJTlZfQ0xLX1BM TCk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7Cgltc2xlZXAoUE9XRVJfVVBfVElNRSk7 CglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgc3QtPnJlZy5wd3JfbWdtdF8yLCAw KTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCW1zbGVlcChQT1dFUl9VUF9USU1FKTsK CXJldHVybiAwOwp9Ci8qKgogKiAgaW52X2h3X3NlbGZfdGVzdCgpIC0gbWFpbiBmdW5jdGlvbiB0 byBkbyBoYXJkd2FyZSBzZWxmIHRlc3QKICovCmludCBpbnZfaHdfc2VsZl90ZXN0KHN0cnVjdCBp bnZfZ3lyb19zdGF0ZV9zICpzdCkKewoJaW50IHJlc3VsdDsKCWludCBneXJvX2JpYXNfc3RbVEhS RUVfQVhJU10sIGd5cm9fYmlhc19yZWd1bGFyW1RIUkVFX0FYSVNdOwoJaW50IGFjY2xfYmlhc19z dFtUSFJFRV9BWElTXSwgYWNjbF9iaWFzX3JlZ3VsYXJbVEhSRUVfQVhJU107CglpbnQgdGVzdF90 aW1lczsKCWNoYXIgY29tcGFzc19yZXN1bHQsIGFjY2VsX3Jlc3VsdCwgZ3lyb19yZXN1bHQ7Cglp ZiAoc3QtPmNoaXBfY29uZmlnLmlzX2FzbGVlcCB8fCBzdC0+Y2hpcF9jb25maWcubHBhX21vZGUp IHsKCQlyZXN1bHQgPSBpbnZfcG93ZXJfdXBfc2VsZl90ZXN0KHN0KTsKCQlpZiAocmVzdWx0KQoJ CQlyZXR1cm4gcmVzdWx0OwoJfQoJY29tcGFzc19yZXN1bHQgPSBhY2NlbF9yZXN1bHQgPSBneXJv X3Jlc3VsdCA9IDA7Cgl0ZXN0X3RpbWVzID0gREVGX1NUX1RSWV9USU1FUzsKCXdoaWxlICh0ZXN0 X3RpbWVzID4gMCkgewoJCXJlc3VsdCA9IGludl9kb190ZXN0KHN0LCAwLCAgZ3lyb19iaWFzX3Jl Z3VsYXIsCgkJCWFjY2xfYmlhc19yZWd1bGFyKTsKCQlpZiAocmVzdWx0ID09IC1FQUdBSU4pCgkJ CXRlc3RfdGltZXMtLTsKCQllbHNlCgkJCXRlc3RfdGltZXMgPSAwOwoJfQoJaWYgKHJlc3VsdCkK CQlnb3RvIHRlc3RfZmFpbDsKCgl0ZXN0X3RpbWVzID0gREVGX1NUX1RSWV9USU1FUzsKCXdoaWxl ICh0ZXN0X3RpbWVzID4gMCkgewoJCXJlc3VsdCA9IGludl9kb190ZXN0KHN0LCBCSVRTX1NFTEZf VEVTVF9FTiwgZ3lyb19iaWFzX3N0LAoJCQkJCWFjY2xfYmlhc19zdCk7CgkJaWYgKHJlc3VsdCA9 PSAtRUFHQUlOKQoJCQl0ZXN0X3RpbWVzLS07CgkJZWxzZQoJCQlicmVhazsKCX0KCWlmIChyZXN1 bHQpCgkJZ290byB0ZXN0X2ZhaWw7CglpZiAoc3QtPmNoaXBfdHlwZSA9PSBJTlZfSVRHMzUwMCkg ewoJCWd5cm9fcmVzdWx0ID0gIWludl9jaGVja18zNTAwX2d5cm9fc2VsZl90ZXN0KHN0LAoJCQln eXJvX2JpYXNfcmVndWxhciwgZ3lyb19iaWFzX3N0KTsKCX0gZWxzZSB7CgkJaWYgKHN0LT5oYXNf Y29tcGFzcykKCQkJY29tcGFzc19yZXN1bHQgPSAhaW52X2NoZWNrX2NvbXBhc3Nfc2VsZl90ZXN0 KHN0KTsKCQlhY2NlbF9yZXN1bHQgPSAhaW52X2NoZWNrX2FjY2xfc2VsZl90ZXN0KHN0LAoJCQlh Y2NsX2JpYXNfcmVndWxhciwgYWNjbF9iaWFzX3N0KTsKCQlneXJvX3Jlc3VsdCA9ICFpbnZfY2hl Y2tfNjA1MF9neXJvX3NlbGZfdGVzdChzdCwKCQkJZ3lyb19iaWFzX3JlZ3VsYXIsIGd5cm9fYmlh c19zdCk7Cgl9CnRlc3RfZmFpbDoKCWludl9yZWNvdmVyX3NldHRpbmcoc3QpOwoJcmV0dXJuIChj b21wYXNzX3Jlc3VsdDw8MikgfCAoYWNjZWxfcmVzdWx0PDwxKSB8IGd5cm9fcmVzdWx0Owp9CnN0 YXRpYyBpbnQgaW52X2xvYWRfZmlybXdhcmUoc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0LAoJ dW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCnsKCWludCBiYW5rLCB3cml0ZV9zaXplOwoJ aW50IHJlc3VsdDsKCXVuc2lnbmVkIHNob3J0IG1lbWFkZHI7CgoJLyogV3JpdGUgYW5kIHZlcmlm eSBtZW1vcnkgKi8KCWZvciAoYmFuayA9IDA7IHNpemUgPiAwOyBiYW5rKyssCgkJc2l6ZSAtPSB3 cml0ZV9zaXplLAoJCWRhdGEgKz0gd3JpdGVfc2l6ZSkgewoJCWlmIChzaXplID4gTVBVX01FTV9C QU5LX1NJWkUpCgkJCXdyaXRlX3NpemUgPSBNUFVfTUVNX0JBTktfU0laRTsKCQllbHNlCgkJCXdy aXRlX3NpemUgPSBzaXplOwoKCQltZW1hZGRyID0gKChiYW5rIDw8IDgpIHwgMHgwMCk7CgoJCXJl c3VsdCA9IG1lbV93KG1lbWFkZHIsIHdyaXRlX3NpemUsIGRhdGEpOwoJCWlmIChyZXN1bHQpCgkJ CXJldHVybiByZXN1bHQ7Cgl9CglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBpbnZfdmVyaWZ5X2Zp cm13YXJlKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwKCXVuc2lnbmVkIGNoYXIgKmRhdGEs IGludCBzaXplKQp7CglpbnQgYmFuaywgd3JpdGVfc2l6ZTsKCWludCByZXN1bHQ7Cgl1bnNpZ25l ZCBzaG9ydCBtZW1hZGRyOwoJdW5zaWduZWQgY2hhciBmaXJtd2FyZVtNUFVfTUVNX0JBTktfU0la RV07CgoJLyogV3JpdGUgYW5kIHZlcmlmeSBtZW1vcnkgKi8KCWZvciAoYmFuayA9IDA7IHNpemUg PiAwOyBiYW5rKyssCgkJc2l6ZSAtPSB3cml0ZV9zaXplLAoJCWRhdGEgKz0gd3JpdGVfc2l6ZSkg ewoJCWlmIChzaXplID4gTVBVX01FTV9CQU5LX1NJWkUpCgkJCXdyaXRlX3NpemUgPSBNUFVfTUVN X0JBTktfU0laRTsKCQllbHNlCgkJCXdyaXRlX3NpemUgPSBzaXplOwoKCQltZW1hZGRyID0gKChi YW5rIDw8IDgpIHwgMHgwMCk7CgkJcmVzdWx0ID0gbXB1X21lbW9yeV9yZWFkKHN0LT5zbF9oYW5k bGUsCgkJCXN0LT5pMmNfYWRkciwgbWVtYWRkciwgd3JpdGVfc2l6ZSwgZmlybXdhcmUpOwoJCWlm IChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7CgkJaWYgKDAgIT0gbWVtY21wKGZpcm13YXJlLCBk YXRhLCB3cml0ZV9zaXplKSkKCQkJcmV0dXJuIC1FSU5WQUw7Cgl9CglyZXR1cm4gMDsKfQoKc3Rh dGljIGludCBpbnZfc2V0X2ZpZm9fZGl2KHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwKCQl1 bnNpZ25lZCBzaG9ydCBmaWZvUmF0ZSkKewoJdW5zaWduZWQgY2hhciByZWdzWzJdOwoJaW50IHJl c3VsdCA9IDA7CgoJLyogRm9yIHNvbWUgcmVhc29uIERJTkFDNCBpcyBkZWZpbmVkIGFzIDB4Yjgs CgkgICBidXQgRElOQkM0IGlzIG5vdCBkZWZpbmVkKi8KCWNvbnN0IHVuc2lnbmVkIGNoYXIgcmVn c19lbmRbXSA9IHtESU5BRkUsIERJTkFGMiwgRElOQUFCLAoJCTB4QzQsIERJTkFBQSwgRElOQUYx LCBESU5BREYsIERJTkFERn07CgoJcmVnc1swXSA9ICh1bnNpZ25lZCBjaGFyKSgoZmlmb1JhdGUg Pj4gOCkgJiAweGZmKTsKCXJlZ3NbMV0gPSAodW5zaWduZWQgY2hhcikoZmlmb1JhdGUgJiAweGZm KTsKCXJlc3VsdCA9IG1lbV93X2tleShLRVlfRF8wXzIyLCBBUlJBWV9TSVpFKHJlZ3MpLCByZWdz KTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCgkvKk1vZGlmeSB0aGUgRklGTyBoYW5k bGVyIHRvIHJlc2V0IHRoZSB0YXAvb3JpZW50IGludGVycnVwdCBmbGFncyovCgkvKiBlYWNoIHRp bWUgdGhlIEZJRk8gaGFuZGxlciBydW5zKi8KCXJlc3VsdCA9IG1lbV93X2tleShLRVlfQ0ZHXzYs IEFSUkFZX1NJWkUocmVnc19lbmQpLCByZWdzX2VuZCk7CgoJcmV0dXJuIHJlc3VsdDsKfQoKaW50 IGludl9zZXRfZmlmb19yYXRlKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwgdW5zaWduZWQg bG9uZyBmaWZvX3JhdGUpCnsKCXVuc2lnbmVkIGNoYXIgZGl2aWRlcjsKCWludCByZXN1bHQ7CgoJ ZGl2aWRlciA9ICh1bnNpZ25lZCBjaGFyKShPTkVfS19IWi9maWZvX3JhdGUpIC0gMTsKCWlmIChk aXZpZGVyID4gRE1QX01BWF9ESVZJREVSKSB7CgkJc3QtPnNhbXBsZV9kaXZpZGVyID0gRE1QX01B WF9ESVZJREVSOwoJCXN0LT5maWZvX2RpdmlkZXIgPQoJCQkodW5zaWduZWQgY2hhcikoRE1QX0RF RkFVTFRfRklGT19SQVRFL2ZpZm9fcmF0ZSktMTsKCX0gZWxzZSB7CgkJc3QtPnNhbXBsZV9kaXZp ZGVyID0gZGl2aWRlcjsKCQlzdC0+Zmlmb19kaXZpZGVyID0gMDsKCX0KCglyZXN1bHQgPSBpbnZf c2V0X2ZpZm9fZGl2KHN0LCBzdC0+Zmlmb19kaXZpZGVyKTsKCXJldHVybiByZXN1bHQ7Cn0KCnN0 YXRpYyBpbnQgaW52X3NldF90YXBfaW50ZXJydXB0X2RtcChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVf cyAqc3QsCgl1bnNpZ25lZCBjaGFyIG9uKQp7CglpbnQgcmVzdWx0OwoJdW5zaWduZWQgY2hhciAg cmVnc1tdID0gezB9OwoKCWlmIChvbikKCQlyZWdzWzBdID0gMHhmODsKCWVsc2UKCQlyZWdzWzBd ID0gRElOQUQ4OwoJcmVzdWx0ID0gbWVtX3dfa2V5KEtFWV9DRkdfMjAsIEFSUkFZX1NJWkUocmVn cyksIHJlZ3MpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJcmV0dXJuIHJlc3VsdDsK fQpzdGF0aWMgaW50IGludl9zZXRfb3JpZW50YXRpb25faW50ZXJydXB0X2RtcChzdHJ1Y3QgaW52 X2d5cm9fc3RhdGVfcyAqc3QsCgkJCXVuc2lnbmVkIGNoYXIgb24pCnsKCWludCByZXN1bHQ7Cgl1 bnNpZ25lZCBjaGFyICByZWdzWzJdOwoJaWYgKG9uKSB7CgkJcmVnc1swXSA9IERJTkJGODsKCQly ZWdzWzFdID0gRElOQkY4OwoJfSBlbHNlIHsKCQlyZWdzWzBdID0gRElOQUQ4OwoJCXJlZ3NbMV0g PSBESU5BRDg7Cgl9CglyZXN1bHQgPSBtZW1fd19rZXkoS0VZX0NGR19PUklFTlRfSVJRXzEsIEFS UkFZX1NJWkUocmVncyksIHJlZ3MpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJcmV0 dXJuIHJlc3VsdDsKfQoKaW50IGludl9zZXRfdGFwX3RocmVzaG9sZF9kbXAoc3RydWN0IGludl9n eXJvX3N0YXRlX3MgKnN0LAoJCQkJdW5zaWduZWQgaW50IGF4aXMsIHVuc2lnbmVkIHNob3J0IHRo cmVzaG9sZCkKewoJLyogU2V0cyB0aGUgdGFwIHRocmVzaG9sZCBpbiB0aGUgZG1wCglTaW11bHRh bmVvdXNseSBzZXRzIHNlY29uZGFyeSB0YXAgdGhyZXNob2xkIHRvIGhlbHAgY29ycmVjdCB0aGUg dGFwCglkaXJlY3Rpb24gZm9yIHNvZnQgdGFwcyAqLwoJaW50IHJlc3VsdDsKCS8qIERNUCBBbGdv cml0aG0gKi8KCXVuc2lnbmVkIGNoYXIgZGF0YVsyXTsKCWludCBzYW1wbGVEaXZpZGVyOwoJaW50 IHNjYWxlZFRocmVzaG9sZDsKCXVuc2lnbmVkIGludCBkbXBUaHJlc2hvbGQ7Cgl1bnNpZ25lZCBj aGFyIHNhbXBsZV9kaXY7CiNkZWZpbmUJIGFjY2VsX3NlbnMgKDB4MjAwMDAwMDAvMHgwMDAxMDAw MCkKCglpZiAoKGF4aXMgJiB+KElOVl9UQVBfQVhJU19BTEwpKSB8fCAodGhyZXNob2xkID4gKDE8 PDE1KSkpCgkJcmV0dXJuIC1FSU5WQUw7CglzYW1wbGVfZGl2ID0gc3QtPnNhbXBsZV9kaXZpZGVy OwoKCXNhbXBsZURpdmlkZXIgPSAoMSArIHNhbXBsZV9kaXYpOwoJLyogU2NhbGUgZmFjdG9yIGNv cnJlc3BvbmRzIGxpbmVhcmx5IHVzaW5nCgkqIDAgIDogMAoJKiAyNSA6IDAuMDI1MCAgZy9tcwoJ KiA1MCA6IDAuMDUwMCAgZy9tcwoJKiAxMDA6IDEuMDAwMCAgZy9tcwoJKiAyMDA6IDIuMDAwMCAg Zy9tcwoJKiA0MDA6IDQuMDAwMCAgZy9tcwoJKiA4MDA6IDguMDAwMCAgZy9tcwoJKi8KCS8qbXVs dGlwbHkgYnkgMTAwMCB0byBhdm9pZCBmbG9hdGluZyBwb2ludCAxMDAwLzEwMDAqLwoJc2NhbGVk VGhyZXNob2xkID0gdGhyZXNob2xkOwoJLyogQ29udmVydCB0byBwZXIgc2FtcGxlICovCglzY2Fs ZWRUaHJlc2hvbGQgKj0gc2FtcGxlRGl2aWRlcjsKCgkvKiBTY2FsZSB0byBETVAgMTYgYml0IHZh bHVlICovCglpZiAoYWNjZWxfc2VucyAhPSAwKQoJCWRtcFRocmVzaG9sZCA9ICh1bnNpZ25lZCBp bnQpKHNjYWxlZFRocmVzaG9sZCphY2NlbF9zZW5zKTsKCWVsc2UKCQlyZXR1cm4gLUVJTlZBTDsK CWRtcFRocmVzaG9sZCA9IGRtcFRocmVzaG9sZC9ETVBfUFJFQ0lTSU9OOwoKCWRhdGFbMF0gPSBk bXBUaHJlc2hvbGQgPj4gODsKCWRhdGFbMV0gPSBkbXBUaHJlc2hvbGQgJiAweEZGOwoKCS8qIE1Q TCBhbGdvcml0aG0gKi8KCWlmIChheGlzICYgSU5WX1RBUF9BWElTX1gpIHsKCQlyZXN1bHQgPSBt ZW1fd19rZXkoS0VZX0RNUF9UQVBfVEhSX1gsIEFSUkFZX1NJWkUoZGF0YSksIGRhdGEpOwoJCWlm IChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7CgoJCS8qQWxzbyBzZXQgYWRkaXRpb25hbCB0aHJl c2hvbGQgZm9yIGNvcnJlY3RpbmcgdGhlIGRpcmVjdGlvbgoJCW9mIHRhcHMgdGhhdCB3ZXJlIHZl cnkgbmVhciB0aGUgdGhyZXNob2xkLiAqLwoJCWRhdGFbMF0gPSAoZG1wVGhyZXNob2xkKjMvNCkg Pj4gODsKCQlkYXRhWzFdID0gKGRtcFRocmVzaG9sZCozLzQpICYgMHhGRjsKCQlyZXN1bHQgPSBt ZW1fd19rZXkoS0VZX0RfMV8zNiwgQVJSQVlfU0laRShkYXRhKSwgZGF0YSk7CgkJaWYgKHJlc3Vs dCkKCQkJcmV0dXJuIHJlc3VsdDsKCX0KCWlmIChheGlzICYgSU5WX1RBUF9BWElTX1kpIHsKCQly ZXN1bHQgPSBtZW1fd19rZXkoS0VZX0RNUF9UQVBfVEhSX1ksIDIsIGRhdGEpOwoJCWlmIChyZXN1 bHQpCgkJCXJldHVybiByZXN1bHQ7CgkJZGF0YVswXSA9IChkbXBUaHJlc2hvbGQqMy80KSA+PiA4 OwoJCWRhdGFbMV0gPSAoZG1wVGhyZXNob2xkKjMvNCkgJiAweEZGOwoKCQlyZXN1bHQgPSBtZW1f d19rZXkoS0VZX0RfMV80MCwgQVJSQVlfU0laRShkYXRhKSwgZGF0YSk7CgkJaWYgKHJlc3VsdCkK CQkJcmV0dXJuIHJlc3VsdDsKCX0KCWlmIChheGlzICYgSU5WX1RBUF9BWElTX1opIHsKCQlyZXN1 bHQgPSBtZW1fd19rZXkoS0VZX0RNUF9UQVBfVEhSX1osIEFSUkFZX1NJWkUoZGF0YSksIGRhdGEp OwoJCWlmIChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7CgkJZGF0YVswXSA9IChkbXBUaHJlc2hv bGQqMy80KSA+PiA4OwoJCWRhdGFbMV0gPSAoZG1wVGhyZXNob2xkKjMvNCkgJiAweEZGOwoKCQly ZXN1bHQgPSBtZW1fd19rZXkoS0VZX0RfMV80NCwgQVJSQVlfU0laRShkYXRhKSwgZGF0YSk7CgkJ aWYgKHJlc3VsdCkKCQkJcmV0dXJuIHJlc3VsdDsKCX0KCXJldHVybiAwOwp9CgpzdGF0aWMgaW50 IGludl9zZXRfdGFwX2F4ZXNfZG1wKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwKCQkJCXVu c2lnbmVkIGludCBheGVzKQp7CgkvKiBTZXRzIGEgbWFzayBpbiB0aGUgRE1QIHRoYXQgaW5kaWNh dGVzIHdoYXQgdGFwIGV2ZW50cwoJc2hvdWxkIHJlc3VsdCBpbiBhbiBpbnRlcnJ1cHQgKi8KCXVu c2lnbmVkIGNoYXIgcmVnc1s0XTsKCXVuc2lnbmVkIGNoYXIgcmVzdWx0OwoKCS8qIGNoZWNrIGlm IGFueSBzcHVyaW91cyBiaXQgb3RoZXIgdGhlIG9uZXMgZXhwZWN0ZWQgYXJlIHNldCAqLwoJaWYg KGF4ZXMgJiAofihJTlZfVEFQX0FMTF9ESVJFQ1RJT05TKSkpCgkJcmV0dXJuIC1FSU5WQUw7CgoJ cmVnc1swXSA9ICh1bnNpZ25lZCBjaGFyKWF4ZXM7CglyZXN1bHQgPSBtZW1fd19rZXkoS0VZX0Rf MV83MiwgMSwgcmVncyk7CgoJcmV0dXJuIHJlc3VsdDsKfQoKaW50IGludl9zZXRfbWluX3RhcHNf ZG1wKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwKCQkJCXVuc2lnbmVkIGludCBtaW5fdGFw cykgewoJLypJbmRpY2F0ZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHRhcHMg cmVxdWlyZWQKCQliZWZvcmUgdGhlIERNUCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCAqLwoJ dW5zaWduZWQgY2hhciByZWdzWzFdOwoJdW5zaWduZWQgY2hhciByZXN1bHQ7CgkvKiBjaGVjayBp ZiBhbnkgc3B1cmlvdXMgYml0IG90aGVyIHRoZSBvbmVzIGV4cGVjdGVkIGFyZSBzZXQgKi8KCWlm ICgobWluX3RhcHMgPiBETVBfTUFYX01JTl9UQVBTKSB8fCAobWluX3RhcHMgPCAxKSkKCQlyZXR1 cm4gLUVJTlZBTDsKCXJlZ3NbMF0gPSAodW5zaWduZWQgY2hhcikobWluX3RhcHMtMSk7CglyZXN1 bHQgPSBtZW1fd19rZXkoS0VZX0RfMV83OSwgQVJSQVlfU0laRShyZWdzKSwgcmVncyk7CgoJcmV0 dXJuIHJlc3VsdDsKfQppbnQgIGludl9zZXRfdGFwX3RpbWVfZG1wKHN0cnVjdCBpbnZfZ3lyb19z dGF0ZV9zICpzdCwgdW5zaWduZWQgaW50IHRpbWUpCnsKCS8qIERldGVybWluZXMgaG93IGxvbmcg YWZ0ZXIgYSB0YXAgdGhlIERNUCByZXF1aXJlcyBiZWZvcmUKCSAgYW5vdGhlciB0YXAgY2FuIGJl IHJlZ2lzdGVyZWQqLwoJaW50IHJlc3VsdDsKCS8qIERNUCBBbGdvcml0aG0gKi8KCXVuc2lnbmVk IHNob3J0IGRtcFRpbWU7Cgl1bnNpZ25lZCBjaGFyIGRhdGFbMl07Cgl1bnNpZ25lZCBjaGFyIHNh bXBsZURpdmlkZXI7CgoJc2FtcGxlRGl2aWRlciA9IHN0LT5zYW1wbGVfZGl2aWRlcjsKCXNhbXBs ZURpdmlkZXIrKzsKCgkvKiA2MCBtcyBtaW5pbXVtIHRpbWUgYWRkZWQgKi8KCWRtcFRpbWUgPSAo KHRpbWUpIC8gc2FtcGxlRGl2aWRlcik7CglkYXRhWzBdID0gZG1wVGltZSA+PiA4OwoJZGF0YVsx XSA9IGRtcFRpbWUgJiAweEZGOwoKCXJlc3VsdCA9IG1lbV93X2tleShLRVlfRE1QX1RBUFdfTUlO LCBBUlJBWV9TSVpFKGRhdGEpLCBkYXRhKTsKCXJldHVybiByZXN1bHQ7Cn0KCnN0YXRpYyBpbnQg aW52X3NldF9tdWx0aXBsZV90YXBfdGltZV9kbXAoc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0 LAoJCQkJCXVuc2lnbmVkIGludCB0aW1lKQp7CgkvKkRldGVybWluZXMgaG93IGNsb3NlIHRvZ2V0 aGVyIGNvbnNlY3V0aXZlIHRhcHMgbXVzdCBvY2N1cgoJdG8gYmUgY29uc2lkZXJlZCBkb3VibGUv dHJpcGxlIHRhcHMqLwoJaW50IHJlc3VsdDsKCS8qIERNUCBBbGdvcml0aG0gKi8KCXVuc2lnbmVk IHNob3J0IGRtcFRpbWU7Cgl1bnNpZ25lZCBjaGFyIGRhdGFbMl07Cgl1bnNpZ25lZCBjaGFyIHNh bXBsZURpdmlkZXI7CgoJc2FtcGxlRGl2aWRlciA9IHN0LT5zYW1wbGVfZGl2aWRlcjsKCXNhbXBs ZURpdmlkZXIrKzsKCgkvKiA2MCBtcyBtaW5pbXVtIHRpbWUgYWRkZWQgKi8KCWRtcFRpbWUgPSAo KHRpbWUpIC8gc2FtcGxlRGl2aWRlcik7CglkYXRhWzBdID0gZG1wVGltZSA+PiA4OwoJZGF0YVsx XSA9IGRtcFRpbWUgJiAweEZGOwoKCXJlc3VsdCA9IG1lbV93X2tleShLRVlfRF8xXzIxOCwgQVJS QVlfU0laRShkYXRhKSwgZGF0YSk7CglyZXR1cm4gcmVzdWx0Owp9CmxvbmcgaW52X3EzMF9tdWx0 KGxvbmcgYSwgbG9uZyBiKQp7Cglsb25nIGxvbmcgdGVtcDsKCWxvbmcgcmVzdWx0OwoJdGVtcCA9 IChsb25nIGxvbmcpYSAqIGI7CglyZXN1bHQgPSAobG9uZykodGVtcCA+PiBETVBfTVVMVElfU0hJ RlQpOwoJcmV0dXJuIHJlc3VsdDsKfQojZGVmaW5lIGd5cm9fc2VucyAgICAgICAgICAgICAgICAg ICAgICAgKDB4MDNlODAwMDApCnN0YXRpYyBpbnQgaW52X3NldF9neXJvX3NmX2RtcChzdHJ1Y3Qg aW52X2d5cm9fc3RhdGVfcyAqc3QpCnsKCS8qVGhlIGd5cm8gdGhyZXNob2xkLCBpbiBkcHMsIGFi b3ZlIHdoaWNoIHRhcHMgd2lsbCBiZSByZWplY3RlZCovCglpbnQgcmVzdWx0LCBvdXQ7CgkvKiBE TVAgQWxnb3JpdGhtICovCgl1bnNpZ25lZCBjaGFyIHNhbXBsZURpdmlkZXI7Cgl1bnNpZ25lZCBj aGFyICpyZWdzOwoJaW50IGd5cm9fc2Y7CgoJc2FtcGxlRGl2aWRlciA9IHN0LT5zYW1wbGVfZGl2 aWRlcjsKCWd5cm9fc2YgPSBpbnZfcTMwX211bHQoZ3lyb19zZW5zLAoJCQkoaW50KShETVBfVEFQ X1NDQUxFICogKHNhbXBsZURpdmlkZXIrMSkpKTsKCglvdXQgPSBjcHVfdG9fYmUzMnAoJmd5cm9f c2YpOwoJcmVncyA9ICh1bnNpZ25lZCBjaGFyICopJm91dDsKCXJlc3VsdCA9IG1lbV93X2tleShL RVlfRF8wXzEwNCwgc2l6ZW9mKG91dCksIHJlZ3MpOwoJcmV0dXJuIHJlc3VsdDsKfQpzdGF0aWMg aW50IGludl9zZXRfc2hha2VfcmVqZWN0X3RocmVzaF9kbXAoc3RydWN0IGludl9neXJvX3N0YXRl X3MgKnN0LAoJCQkJCQlpbnQgdGhyZXNoKQp7LypUSElTIEZVTkNUSU9OIEZBSUxTIE1FTV9XKi8K CS8qVGhlIGd5cm8gdGhyZXNob2xkLCBpbiBkcHMsIGFib3ZlIHdoaWNoIHRhcHMgd2lsbCBiZSBy ZWplY3RlZCAqLwoJaW50IHJlc3VsdCwgb3V0OwoJLyogRE1QIEFsZ29yaXRobSAqLwoJdW5zaWdu ZWQgY2hhciBzYW1wbGVEaXZpZGVyOwoJaW50IHRocmVzaF9zY2FsZWQ7Cgl1bnNpZ25lZCBjaGFy ICpyZWdzOwoJbG9uZyBneXJvX3NmOwoJc2FtcGxlRGl2aWRlciA9IHN0LT5zYW1wbGVfZGl2aWRl cjsKCWd5cm9fc2YgPSBpbnZfcTMwX211bHQoZ3lyb19zZW5zLCAoaW50KShETVBfVEFQX1NDQUxF ICoKCQkJKHNhbXBsZURpdmlkZXIrMSkpKTsKCS8qIFdlJ3JlIGluIHVuaXRzIG9mIERQUywgY29u dmVydCBpdCBiYWNrIHRvIGNoaXAgdW5pdHMqLwoJLypzcGxpdCB0aGUgb3BlcmF0aW9uIHRvIGF2 aW9kIG92ZXJmbG93IG9mIGludGVnZXIqLwoJdGhyZXNoX3NjYWxlZCA9IGd5cm9fc2Vucy8oMUw8 PDE2KTsKCXRocmVzaF9zY2FsZWQgPSB0aHJlc2hfc2NhbGVkL3RocmVzaDsKCXRocmVzaF9zY2Fs ZWQgPSBneXJvX3NmIC8gdGhyZXNoX3NjYWxlZDsKCW91dCA9IGNwdV90b19iZTMycCgmdGhyZXNo X3NjYWxlZCk7CglyZWdzID0gKHVuc2lnbmVkIGNoYXIgKikmb3V0OwoKCXJlc3VsdCA9IG1lbV93 X2tleShLRVlfRF8xXzkyLCBzaXplb2Yob3V0KSwgcmVncyk7CglyZXR1cm4gcmVzdWx0Owp9CnN0 YXRpYyBpbnQgaW52X3NldF9zaGFrZV9yZWplY3RfdGltZV9kbXAoc3RydWN0IGludl9neXJvX3N0 YXRlX3MgKnN0LAoJCQkJCQl1bnNpZ25lZCBpbnQgdGltZSkKewoJLyogSG93IGxvbmcgYSBneXJv IGF4aXMgbXVzdCByZW1haW4gYWJvdmUgaXRzIHRocmVzaG9sZAoJYmVmb3JlIHRhcHMgYXJlIHJl amVjdGVkICovCglpbnQgcmVzdWx0OwoJLyogRE1QIEFsZ29yaXRobSAqLwoJdW5zaWduZWQgc2hv cnQgZG1wVGltZTsKCXVuc2lnbmVkIGNoYXIgZGF0YVsyXTsKCXVuc2lnbmVkIGNoYXIgc2FtcGxl RGl2aWRlcjsKCglzYW1wbGVEaXZpZGVyID0gc3QtPnNhbXBsZV9kaXZpZGVyOwoJc2FtcGxlRGl2 aWRlcisrOwoKCS8qIDYwIG1zIG1pbmltdW0gdGltZSBhZGRlZCAqLwoJZG1wVGltZSA9ICgodGlt ZSkgLyBzYW1wbGVEaXZpZGVyKTsKCWRhdGFbMF0gPSBkbXBUaW1lID4+IDg7CglkYXRhWzFdID0g ZG1wVGltZSAmIDB4RkY7CgoJcmVzdWx0ID0gbWVtX3dfa2V5KEtFWV9EXzFfODgsIEFSUkFZX1NJ WkUoZGF0YSksIGRhdGEpOwoJcmV0dXJuIHJlc3VsdDsKfQoKc3RhdGljIGludCBpbnZfc2V0X3No YWtlX3JlamVjdF90aW1lb3V0X2RtcChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsCgkJCQkJ CXVuc2lnbmVkIGludCB0aW1lKQp7CgkvKkhvdyBsb25nIHRoZSBneXJvcyBtdXN0IHJlbWFpbiBi ZWxvdyB0aGVpciB0aHJlc2hvbGQsCglhZnRlciB0YXBzIGhhdmUgYmVlbiByZWplY3RlZCwgYmVm b3JlIHRhcHMgY2FuIGJlIGRldGVjdGVkIGFnYWluKi8KCWludCByZXN1bHQ7CgkvKiBETVAgQWxn b3JpdGhtICovCgl1bnNpZ25lZCBzaG9ydCBkbXBUaW1lOwoJdW5zaWduZWQgY2hhciBkYXRhWzJd OwoJdW5zaWduZWQgY2hhciBzYW1wbGVEaXZpZGVyOwoKCXNhbXBsZURpdmlkZXIgPSBzdC0+c2Ft cGxlX2RpdmlkZXI7CglzYW1wbGVEaXZpZGVyKys7CgoJLyogNjAgbXMgbWluaW11bSB0aW1lIGFk ZGVkICovCglkbXBUaW1lID0gKCh0aW1lKSAvIHNhbXBsZURpdmlkZXIpOwoJZGF0YVswXSA9IGRt cFRpbWUgPj4gODsKCWRhdGFbMV0gPSBkbXBUaW1lICYgMHhGRjsKCglyZXN1bHQgPSBtZW1fd19r ZXkoS0VZX0RfMV85MCwgQVJSQVlfU0laRShkYXRhKSwgZGF0YSk7CglyZXR1cm4gcmVzdWx0Owp9 CgpzdGF0aWMgaW50IGludl9zZXRfaW50ZXJydXB0X29uX2dlc3R1cmVfZXZlbnQoc3RydWN0IGlu dl9neXJvX3N0YXRlX3MgKnN0LAoJCQkJCQljaGFyIG9uKQp7Cgl1bnNpZ25lZCBjaGFyIHJlc3Vs dDsKCWNvbnN0IHVuc2lnbmVkIGNoYXIgcmVnc19vbltdID0ge0RJTkFEQSwgRElOQURBLCBESU5B QjEsIERJTkFCOSwKCQkJCQlESU5BRjMsIERJTkE4QiwgRElOQUEzLCBESU5BOTEsCgkJCQkJRElO QUI2LCBESU5BREEsIERJTkFCNCwgRElOQURBfTsKCWNvbnN0IHVuc2lnbmVkIGNoYXIgcmVnc19v ZmZbXSA9IHsweGQ4LCAweGQ4LCAweGIxLCAweGI5LCAweGYzLCAweDhiLAoJCQkJCTB4YTMsIDB4 OTEsIDB4YjYsIDB4MDksIDB4YjQsIDB4ZDl9OwoJLypGb3Igc29tZSByZWFzb24gRElOQUM0IGlz IGRlZmluZWQgYXMgMHhiOCwKCWJ1dCBESU5CQzQgaXMgbm90IGRlZmluZWQuKi8KCWNvbnN0IHVu c2lnbmVkIGNoYXIgcmVnc19lbmRbXSA9IHtESU5BRkUsIERJTkFGMiwgRElOQUFCLCAweGM0LAoJ CQkJCURJTkFBQSwgRElOQUYxLCBESU5BREYsIERJTkFERn07CglpZiAob24pIHsKCQkvKlNldHMg dGhlIERNUCB0byBzZW5kIGFuIGludGVycnVwdCBhbmQgcHV0IGEgRklGTyBwYWNrZXQKCQlpbiB0 aGUgRklGTyBpZiBhbmQgb25seSBpZiBhIHRhcC9vcmllbnRhdGlvbiBldmVudAoJCWp1c3Qgb2Nj dXJyZWQqLwoJCXJlc3VsdCA9IG1lbV93X2tleShLRVlfQ0ZHX0ZJRk9fT05fRVZFTlQsIEFSUkFZ X1NJWkUocmVnc19vbiksCgkJCQkJcmVnc19vbik7CgkJaWYgKHJlc3VsdCkKCQkJcmV0dXJuIHJl c3VsdDsKCX0gZWxzZSB7CgkJLypTZXRzIHRoZSBETVAgdG8gc2VuZCBhbiBpbnRlcnJ1cHQgYW5k IHB1dCBhIEZJRk8gcGFja2V0CgkJaW4gdGhlIEZJRk8gYXQgdGhlIHJhdGUgc3BlY2lmaWVkIGJ5 IHRoZSBGSUZPIGRpdi4KCQlzZWUgaW52X3NldF9maWZvX2RpdiBpbiBod19zZXR1cC5jIHRvIHNl dCB0aGUgRklGTyBkaXYuKi8KCQlyZXN1bHQgPSBtZW1fd19rZXkoS0VZX0NGR19GSUZPX09OX0VW RU5ULCBBUlJBWV9TSVpFKHJlZ3Nfb2ZmKSwKCQkJCQlyZWdzX29mZik7CgkJaWYgKHJlc3VsdCkK CQkJcmV0dXJuIHJlc3VsdDsKCX0KCglyZXN1bHQgPSBtZW1fd19rZXkoS0VZX0NGR182LCBBUlJB WV9TSVpFKHJlZ3NfZW5kKSwgcmVnc19lbmQpOwoJcmV0dXJuIHJlc3VsdDsKfQoKLyoqCiAqIGlu dl9lbmFibGVfdGFwX2RtcCgpIC0gIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZS9k aXNhYmxlIHRhcCBmdW5jdGlvbi4KICovCmludCBpbnZfZW5hYmxlX3RhcF9kbXAoc3RydWN0IGlu dl9neXJvX3N0YXRlX3MgKnN0LCB1bnNpZ25lZCBjaGFyIG9uKQp7CglpbnQgcmVzdWx0OwoJcmVz dWx0ID0gaW52X3NldF90YXBfaW50ZXJydXB0X2RtcChzdCwgb24pOwoJaWYgKHJlc3VsdCkKCQly ZXR1cm4gcmVzdWx0OwoJaWYgKG9uKSB7CgkJcmVzdWx0ID0gaW52X3NldF90YXBfdGhyZXNob2xk X2RtcChzdCwgSU5WX1RBUF9BWElTX1gsCgkJCQkJCQlzdC0+dGFwLnRocmVzaCk7CgkJaWYgKHJl c3VsdCkKCQkJcmV0dXJuIHJlc3VsdDsKCQlyZXN1bHQgPSBpbnZfc2V0X3RhcF90aHJlc2hvbGRf ZG1wKHN0LCBJTlZfVEFQX0FYSVNfWSwKCQkJCQkJCXN0LT50YXAudGhyZXNoKTsKCQlpZiAocmVz dWx0KQoJCQlyZXR1cm4gcmVzdWx0OwoJCXJlc3VsdCA9IGludl9zZXRfdGFwX3RocmVzaG9sZF9k bXAoc3QsIElOVl9UQVBfQVhJU19aLAoJCQkJCQkJc3QtPnRhcC50aHJlc2gpOwoJCWlmIChyZXN1 bHQpCgkJCXJldHVybiByZXN1bHQ7Cgl9CgoJcmVzdWx0ID0gaW52X3NldF90YXBfYXhlc19kbXAo c3QsIElOVl9UQVBfQUxMX0RJUkVDVElPTlMpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0 OwoJcmVzdWx0ID0gaW52X3NldF9taW5fdGFwc19kbXAoc3QsIHN0LT50YXAubWluX2NvdW50KTsK CWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCglyZXN1bHQgPSBpbnZfc2V0X3RhcF90aW1l X2RtcChzdCwgc3QtPnRhcC50aW1lKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCgly ZXN1bHQgPSBpbnZfc2V0X211bHRpcGxlX3RhcF90aW1lX2RtcChzdCwgRE1QX01VTFRJX1RBUF9U SU1FKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCglyZXN1bHQgPSBpbnZfc2V0X2d5 cm9fc2ZfZG1wKHN0KTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCglyZXN1bHQgPSBp bnZfc2V0X3NoYWtlX3JlamVjdF90aHJlc2hfZG1wKHN0LCBETVBfU0hBS0VfUkVKRUNUX1RIUkVT SCk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CgoJcmVzdWx0ID0gaW52X3NldF9zaGFr ZV9yZWplY3RfdGltZV9kbXAoc3QsIERNUF9TSEFLRV9SRUpFQ1RfVElNRSk7CglpZiAocmVzdWx0 KQoJCXJldHVybiByZXN1bHQ7CgoJcmVzdWx0ID0gaW52X3NldF9zaGFrZV9yZWplY3RfdGltZW91 dF9kbXAoc3QsCgkJCQkJRE1QX1NIQUtFX1JFSkVDVF9USU1FT1VUKTsKCWlmIChyZXN1bHQpCgkJ cmV0dXJuIHJlc3VsdDsKCglyZXN1bHQgPSBpbnZfc2V0X2ludGVycnVwdF9vbl9nZXN0dXJlX2V2 ZW50KHN0LCAwKTsKCXJldHVybiByZXN1bHQ7Cn0Kc3RhdGljIGludCBpbnZfc2V0X29yaWVudGF0 aW9uX2RtcChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsCgkJCQkJaW50IG9yaWVudGF0aW9u KQp7CgkvKlNldCBhIG1hc2sgaW4gdGhlIERNUCBkZXRlcm1pbmluZyB3aGF0IG9yaWVudGF0aW9u cwoJCQl3aWxsIHRyaWdnZXIgaW50ZXJydXB0cyovCgl1bnNpZ25lZCBjaGFyIHJlZ3NbNF07Cgl1 bnNpZ25lZCBjaGFyIHJlc3VsdDsKCgkvKiBjaGVjayBpZiBhbnkgc3B1cmlvdXMgYml0IG90aGVy IHRoZSBvbmVzIGV4cGVjdGVkIGFyZSBzZXQgKi8KCWlmIChvcmllbnRhdGlvbiAmICh+KElOVl9P UklFTlRBVElPTl9BTEwgfCBJTlZfT1JJRU5UQVRJT05fRkxJUCkpKQoJCXJldHVybiAtRUlOVkFM OwoKCXJlZ3NbMF0gPSAodW5zaWduZWQgY2hhcilvcmllbnRhdGlvbjsKCXJlc3VsdCA9IG1lbV93 X2tleShLRVlfRF8xXzc0LCAxLCByZWdzKTsKCXJldHVybiByZXN1bHQ7Cn0Kc3RhdGljIGludCBp bnZfc2V0X29yaWVudGF0aW9uX3RocmVzaF9kbXAoc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0 LAoJCQkJCWludCBhbmdsZSkKewoJLypTZXQgYW4gYW5nbGUgdGhyZXNob2xkIGluIHRoZSBETVAg ZGV0ZXJtaW5pbmcKCQl3aGVuIG9yaWVudGF0aW9ucyBjaGFuZ2UqLwoJdW5zaWduZWQgY2hhciAq cmVnczsKCXVuc2lnbmVkIGNoYXIgcmVzdWx0OwoJdW5zaWduZWQgaW50IG91dDsKCXVuc2lnbmVk IGludCBkOwoJY29uc3QgdW5zaWduZWQgaW50IHRocmVzaG9sZFtdID0gezEzODk1MjQxNiwgMjY4 NDM1NDU1LCAzNzk2MjUwNjIsCgkJCQkJNDY0OTQzODQ4LCA1MTg1Nzc0NzksIDUzNjg3MDkxMn07 CgkvKnRocmVzaG9sZCA9IChsb25nKSgoMTw8MjkpICogc2luKChhbmdsZSAqIE1fUEkpIC8gMTgw LikpOyovCglkID0gYW5nbGUvRE1QX0FOR0xFX1NDQUxFOwoJZCAtPSAxOwoJaWYgKGQgPj0gQVJS QVlfU0laRSh0aHJlc2hvbGQpKQoJCXJldHVybiAtRVBFUk07CglvdXQgPSBjcHVfdG9fYmUzMnAo JnRocmVzaG9sZFtkXSk7CglyZWdzID0gKHVuc2lnbmVkIGNoYXIgKikmb3V0OwoKCXJlc3VsdCA9 IG1lbV93X2tleShLRVlfRF8xXzIzMiwgc2l6ZW9mKG91dCksIHJlZ3MpOwoJcmV0dXJuIHJlc3Vs dDsKfQpzdGF0aWMgaW50IGludl9zZXRfb3JpZW50YXRpb25fdGltZV9kbXAoc3RydWN0IGludl9n eXJvX3N0YXRlX3MgKnN0LAoJCQkJCXVuc2lnbmVkIGludCB0aW1lKQp7CgkvKkRldGVybWluZXMg dGhlIHN0YWJpbGl0eSB0aW1lIHJlcXVpcmVkIGJlZm9yZSBhCgluZXcgb3JpZW50YXRpb24gY2Fu IGJlIGFkb3B0ZWQgKi8KCXVuc2lnbmVkIHNob3J0IGRtcFRpbWU7Cgl1bnNpZ25lZCBjaGFyIGRh dGFbMl07Cgl1bnNpZ25lZCBjaGFyIHNhbXBsZURpdmlkZXI7Cgl1bnNpZ25lZCBjaGFyIHJlc3Vs dDsKCS8qIEZpcnN0IGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIGNhbGwgdGhpcyBmdW5jdGlv biBoZXJlICovCglzYW1wbGVEaXZpZGVyID0gc3QtPnNhbXBsZV9kaXZpZGVyOwoJc2FtcGxlRGl2 aWRlcisrOwoJLyogNjAgbXMgbWluaW11bSB0aW1lIGFkZGVkICovCglkbXBUaW1lID0gKCh0aW1l KSAvIHNhbXBsZURpdmlkZXIpOwoJZGF0YVswXSA9IGRtcFRpbWUgPj4gODsKCWRhdGFbMV0gPSBk bXBUaW1lICYgMHhGRjsKCXJlc3VsdCA9IG1lbV93X2tleShLRVlfRF8xXzI1MCwgMiwgZGF0YSk7 CgoJcmV0dXJuIHJlc3VsdDsKfQoKLyoqCiAqIGludl9lbmFibGVfb3JpZW50YXRpb25fZG1wKCkg LSAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwKICogICAgICAgICAgICAgICAgICBlbmFibGUv ZGlzYWJsZSBvcmllbnRhdGlvbiBmdW5jdGlvbi4KICovCmludCBpbnZfZW5hYmxlX29yaWVudGF0 aW9uX2RtcChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsIGludCBvbikKewoJaW50IHJlc3Vs dDsKCXJlc3VsdCA9IGludl9zZXRfb3JpZW50YXRpb25faW50ZXJydXB0X2RtcChzdCwgb24pOwoJ aWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJcmVzdWx0ID0gaW52X3NldF9vcmllbnRhdGlv bl9kbXAoc3QsIDB4NDAgfCBJTlZfT1JJRU5UQVRJT05fQUxMKTsKCWlmIChyZXN1bHQpCgkJcmV0 dXJuIHJlc3VsdDsKCXJlc3VsdCA9IGludl9zZXRfZ3lyb19zZl9kbXAoc3QpOwoJaWYgKHJlc3Vs dCkKCQlyZXR1cm4gcmVzdWx0OwoJcmVzdWx0ID0gaW52X3NldF9vcmllbnRhdGlvbl90aHJlc2hf ZG1wKHN0LCBETVBfT1JJRU5UQVRJT05fQU5HTEUpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVz dWx0OwoJcmVzdWx0ID0gaW52X3NldF9vcmllbnRhdGlvbl90aW1lX2RtcChzdCwgRE1QX09SSUVO VEFUSU9OX1RJTUUpOwoJcmV0dXJuIHJlc3VsdDsKfQoKc3RhdGljIGludCBpbnZfc2VuZF9zZW5z b3JfZGF0YShzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsCgkJCQl1bnNpZ25lZCBzaG9ydCBl bGVtZW50cykKewoJaW50IHJlc3VsdDsKCXVuc2lnbmVkIGNoYXIgcmVnc1tdID0geyBESU5BQTAg KyAzLCBESU5BQTAgKyAzLCBESU5BQTAgKyAzLAoJCQkJRElOQUEwICsgMywgRElOQUEwICsgMywg RElOQUEwICsgMywKCQkJCURJTkFBMCArIDMsIERJTkFBMCArIDMsIERJTkFBMCArIDMsIERJTkFB MCArIDMKCX07CgoJaWYgKGVsZW1lbnRzICYgSU5WX0VMRU1FTlRfMSkKCQlyZWdzWzBdID0gRElO QUNBOwoJaWYgKGVsZW1lbnRzICYgSU5WX0VMRU1FTlRfMikKCQlyZWdzWzRdID0gRElOQkM0OwoJ aWYgKGVsZW1lbnRzICYgSU5WX0VMRU1FTlRfMykKCQlyZWdzWzVdID0gRElOQUNDOwoJaWYgKGVs ZW1lbnRzICYgSU5WX0VMRU1FTlRfNCkKCQlyZWdzWzZdID0gRElOQkM2OwoJaWYgKChlbGVtZW50 cyAmIElOVl9FTEVNRU5UXzUpIHx8IChlbGVtZW50cyAmIElOVl9FTEVNRU5UXzYpCgkJfHwgKGVs ZW1lbnRzICYgSU5WX0VMRU1FTlRfNykpIHsKCQlyZWdzWzFdID0gRElOQkMwOwoJCXJlZ3NbMl0g PSBESU5BQzg7CgkJcmVnc1szXSA9IERJTkJDMjsKCX0KCXJlc3VsdCA9IG1lbV93X2tleShLRVlf Q0ZHXzE1LCBBUlJBWV9TSVpFKHJlZ3MpLCByZWdzKTsKCXJldHVybiByZXN1bHQ7Cn0Kc3RhdGlj IGludCBpbnZfc2VuZF9pbnRlcnJ1cHRfd29yZChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3Qp CnsKCWNvbnN0IHVuc2lnbmVkIGNoYXIgcmVnc1tdID0geyBESU5BMjAgfTsKCXVuc2lnbmVkIGNo YXIgcmVzdWx0OwoKCXJlc3VsdCA9IG1lbV93X2tleShLRVlfQ0ZHXzI3LCBBUlJBWV9TSVpFKHJl Z3MpLCByZWdzKTsKCXJldHVybiByZXN1bHQ7Cn0KCi8qKgogKiBpbnZfZG1wX2Zpcm13YXJlX3dy aXRlKCkgLSAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCB0aGUgZmlybXdhcmUuCiAq ICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgd3JpdGUgZnVuY3Rpb24gb2YgZmls ZSAiZG1wX2Zpcm13YXJlIi4KICovCnNzaXplX3QgaW52X2RtcF9maXJtd2FyZV93cml0ZShzdHJ1 Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAoJc3RydWN0IGJpbl9hdHRyaWJ1dGUg KmF0dHIsCgljaGFyICpidWYsIGxvZmZfdCBwb3MsIHNpemVfdCBzaXplKQp7Cgl1bnNpZ25lZCBj aGFyICpmaXJtd2FyZTsKCWludCByZXN1bHQ7CglzdHJ1Y3QgaW52X3JlZ19tYXBfcyAqcmVnOwoJ c3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdDsK CglpbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBk ZXZpY2UsIGtvYmopKTsKCXN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCglpZiAoc3QtPmNoaXBf Y29uZmlnLmlzX2FzbGVlcCkKCQlyZXR1cm4gLUVQRVJNOwoJaWYgKDEgPT0gc3QtPmNoaXBfY29u ZmlnLmZpcm13YXJlX2xvYWRlZCkKCQlyZXR1cm4gLUVJTlZBTDsKCXJlZyA9ICZzdC0+cmVnOwoK CWZpcm13YXJlID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKCWlmICghZmlybXdhcmUpCgkJ cmV0dXJuIC1FTk9NRU07CgltZW1jcHkoZmlybXdhcmUsIGJ1Ziwgc2l6ZSk7CgoJcmVzdWx0ID0g aW52X2xvYWRfZmlybXdhcmUoc3QsIGZpcm13YXJlLCBzaXplKTsKCWlmIChyZXN1bHQpCgkJZ290 byBmaXJtd2FyZV93cml0ZV9mYWlsOwoKCXJlc3VsdCA9IGludl92ZXJpZnlfZmlybXdhcmUoc3Qs IGZpcm13YXJlLCBzaXplKTsKCWlmIChyZXN1bHQpCgkJZ290byBmaXJtd2FyZV93cml0ZV9mYWls OwoKCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPnByZ21fc3RydF9hZGRy aCwKCXN0LT5jaGlwX2NvbmZpZy5wcm9nX3N0YXJ0X2FkZHIgPj4gOCk7CglpZiAocmVzdWx0KQoJ CWdvdG8gZmlybXdhcmVfd3JpdGVfZmFpbDsKCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRl KHN0LCByZWctPnByZ21fc3RydF9hZGRyaCArIDEsCglzdC0+Y2hpcF9jb25maWcucHJvZ19zdGFy dF9hZGRyICYgMHhmZik7CglpZiAocmVzdWx0KQoJCWdvdG8gZmlybXdhcmVfd3JpdGVfZmFpbDsK CglyZXN1bHQgPSBpbnZfdmVyaWZ5X2Zpcm13YXJlKHN0LCBmaXJtd2FyZSwgc2l6ZSk7CglpZiAo cmVzdWx0KQoJCWdvdG8gZmlybXdhcmVfd3JpdGVfZmFpbDsKCXJlc3VsdCA9IGludl9zZXRfZmlm b19yYXRlKHN0LCBETVBfREVGQVVMVF9GSUZPX1JBVEUpOwoJaWYgKHJlc3VsdCkKCQlnb3RvIGZp cm13YXJlX3dyaXRlX2ZhaWw7CglyZXN1bHQgPSBpbnZfc2VuZF9zZW5zb3JfZGF0YShzdCwgSU5W X0dZUk9fQUNDX01BU0spOwoJaWYgKHJlc3VsdCkKCQlnb3RvIGZpcm13YXJlX3dyaXRlX2ZhaWw7 CglyZXN1bHQgPSBpbnZfc2VuZF9pbnRlcnJ1cHRfd29yZChzdCk7CglpZiAocmVzdWx0KQoJCWdv dG8gZmlybXdhcmVfd3JpdGVfZmFpbDsKCXN0LT5jaGlwX2NvbmZpZy5maXJtd2FyZV9sb2FkZWQg PSAxOwoJcmVzdWx0ID0gc2l6ZTsKZmlybXdhcmVfd3JpdGVfZmFpbDoKCWtmcmVlKGZpcm13YXJl KTsKCXJldHVybiByZXN1bHQ7Cn0Kc3NpemVfdCBpbnZfZG1wX2Zpcm13YXJlX3JlYWQoc3RydWN0 IGZpbGUgKmZpbHAsCgkJCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwKCQkJCXN0cnVjdCBiaW5fYXR0 cmlidXRlICpiaW5fYXR0ciwKCQkJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50 KQp7CglpbnQgYmFuaywgd3JpdGVfc2l6ZSwgc2l6ZSwgZGF0YSwgcmVzdWx0OwoJdW5zaWduZWQg c2hvcnQgbWVtYWRkcjsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7CglzdHJ1Y3QgaW52X2d5 cm9fc3RhdGVfcyAqc3Q7CglzaXplID0gY291bnQ7CgoJaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZk YXRhKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CglzdCA9IGlpb19w cml2KGluZGlvX2Rldik7CglkYXRhID0gMDsKCWZvciAoYmFuayA9IDA7IHNpemUgPiAwOyBiYW5r KyssIHNpemUgLT0gd3JpdGVfc2l6ZSwKCQkJCQlkYXRhICs9IHdyaXRlX3NpemUpIHsKCQlpZiAo c2l6ZSA+IE1QVV9NRU1fQkFOS19TSVpFKQoJCQl3cml0ZV9zaXplID0gTVBVX01FTV9CQU5LX1NJ WkU7CgkJZWxzZQoJCQl3cml0ZV9zaXplID0gc2l6ZTsKCgkJbWVtYWRkciA9ICgoYmFuayA8PCA4 KSB8IDB4MDApOwoJCXJlc3VsdCA9IG1wdV9tZW1vcnlfcmVhZChzdC0+c2xfaGFuZGxlLAoJCQlz dC0+aTJjX2FkZHIsIG1lbWFkZHIsIHdyaXRlX3NpemUsICZidWZbZGF0YV0pOwoJCWlmIChyZXN1 bHQpCgkJCXJldHVybiByZXN1bHQ7Cgl9CglyZXR1cm4gY291bnQ7Cn0KLyoqCiAqICBAfQogKi8K CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaW52X21wdV9yaW5n LmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAw MDAwMDUxNDM3ADExNzU0MjQ1NzY3ADAxMjM2NgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGdnYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Z2dhbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKgoqIENvcHlyaWdo dCAoQykgMjAxMiBJbnZlbnNlbnNlLCBJbmMuCioKKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2Vk IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiogTGljZW5zZSB2ZXJz aW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQK KiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRl cm1zLgoqCiogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKgoqLwoKLyoqCiAqICBAYWRkdG9ncm91cCAgRFJJVkVSUwog KiAgQGJyaWVmICAgICAgIEhhcmR3YXJlIGRyaXZlcnMuCiAqCiAqICBAewogKiAgICAgIEBmaWxl ICAgIGludl9neXJvX21pc2MuYwogKiAgICAgIEBicmllZiAgIEEgc3lzZnMgZGV2aWNlIGRyaXZl ciBmb3IgSW52ZW5zZW5zZSBneXJvc2NvcGVzLgogKiAgICAgIEBkZXRhaWxzIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIGludl9neXJvIGRyaXZlciBjb2RlCiAqLwoKI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgojaW5jbHVkZSA8bGludXgvc2xhYi5oPgojaW5j bHVkZSA8bGludXgvaTJjLmg+CiNpbmNsdWRlIDxsaW51eC9lcnIuaD4KI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+CiNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgojaW5jbHVkZSA8bGludXgvamlmZmll cy5oPgojaW5jbHVkZSA8bGludXgvaXJxLmg+CiNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4K I2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiNpbmNsdWRl IDxsaW51eC9taXNjZGV2aWNlLmg+CiNpbmNsdWRlICJpbnZfbXB1X2lpby5oIgojaW5jbHVkZSAi Li4vLi4vaWlvLmgiCiNpbmNsdWRlICIuLi8uLi9yaW5nX3N3LmgiCiNpbmNsdWRlICIuLi8uLi90 cmlnZ2VyX2NvbnN1bWVyLmgiCiNpbmNsdWRlICIuLi8uLi9zeXNmcy5oIgoKLyoqCiAqICByZXNl dF9maWZvX21wdTMwNTAoKSAtIFJlc2V0IEZJRk8gcmVsYXRlZCByZWdpc3RlcnMKICogIEBzdDoJ RGV2aWNlIGRyaXZlciBpbnN0YW5jZS4KICovCnN0YXRpYyBpbnQgcmVzZXRfZmlmb19tcHUzMDUw KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCnsKCXN0cnVjdCBpbnZfcmVnX21hcF9zICpyZWc7 CglpbnQgcmVzdWx0OwoJdW5zaWduZWQgY2hhciB2YWwsIHVzZXJfY3RybDsKCXN0cnVjdCBpbnZf Z3lyb19zdGF0ZV9zICAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJc3RydWN0IGlpb19idWZm ZXIgKnJpbmcgPSBpbmRpb19kZXYtPmJ1ZmZlcjsKCglyZWcgPSAmc3QtPnJlZzsKCWlmIChpaW9f c2Nhbl9tYXNrX3F1ZXJ5KGluZGlvX2RldiwgcmluZywgSU5WX01QVV9TQ0FOX0dZUk9fWCkgfHwK CQlpaW9fc2Nhbl9tYXNrX3F1ZXJ5KGluZGlvX2RldiwgcmluZywgSU5WX01QVV9TQ0FOX0dZUk9f WSkgfHwKCQlpaW9fc2Nhbl9tYXNrX3F1ZXJ5KGluZGlvX2RldiwgcmluZywgSU5WX01QVV9TQ0FO X0dZUk9fWikpCgkJc3QtPmNoaXBfY29uZmlnLmd5cm9fZmlmb19lbmFibGUgPSAxOwoJZWxzZQoJ CXN0LT5jaGlwX2NvbmZpZy5neXJvX2ZpZm9fZW5hYmxlID0gMDsKCglpZiAoaWlvX3NjYW5fbWFz a19xdWVyeShpbmRpb19kZXYsIHJpbmcsIElOVl9NUFVfU0NBTl9BQ0NMX1gpIHx8CgkJaWlvX3Nj YW5fbWFza19xdWVyeShpbmRpb19kZXYsIHJpbmcsIElOVl9NUFVfU0NBTl9BQ0NMX1kpIHx8CgkJ aWlvX3NjYW5fbWFza19xdWVyeShpbmRpb19kZXYsIHJpbmcsIElOVl9NUFVfU0NBTl9BQ0NMX1op KQoJCXN0LT5jaGlwX2NvbmZpZy5hY2NsX2ZpZm9fZW5hYmxlID0gMTsKCWVsc2UKCQlzdC0+Y2hp cF9jb25maWcuYWNjbF9maWZvX2VuYWJsZSA9IDA7CgoJLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8K CXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPmludF9lbmFibGUsIDApOwoJ aWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJLyogZGlzYWJsZSB0aGUgc2Vuc29yIG91dHB1 dCB0byBGSUZPICovCglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5maWZv X2VuLCAwKTsKCWlmIChyZXN1bHQpCgkJZ290byByZXNldF9maWZvX2ZhaWw7CglyZXN1bHQgPSBp bnZfaTJjX3JlYWQoc3QsIHJlZy0+dXNlcl9jdHJsLCAxLCAmdXNlcl9jdHJsKTsKCWlmIChyZXN1 bHQpCgkJZ290byByZXNldF9maWZvX2ZhaWw7CgkvKiBkaXNhYmxlIGZpZm8gcmVhZGluZyAqLwoJ dXNlcl9jdHJsICY9IH5CSVRfRklGT19FTjsKCXN0LT5maWZvX2NvdW50ZXIgPSAwOwoJLyogcmVz ZXQgZmlmbyAqLwoJdmFsID0gKEJJVF8zMDUwX0ZJRk9fUlNUIHwgdXNlcl9jdHJsKTsKCXJlc3Vs dCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPnVzZXJfY3RybCwgdmFsKTsKCWlmIChy ZXN1bHQpCgkJZ290byByZXNldF9maWZvX2ZhaWw7CglzdC0+bGFzdF9pc3JfdGltZSA9IGlpb19n ZXRfdGltZV9ucygpOwoJaWYgKHN0LT5jaGlwX2NvbmZpZy5kbXBfb24pIHsKCQkvKiBlbmFibGUg aW50ZXJydXB0IHdoZW4gRE1QIGlzIGRvbmUgKi8KCQlyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93 cml0ZShzdCwgcmVnLT5pbnRfZW5hYmxlLAoJCQkJCUJJVF9ETVBfSU5UX0VOKTsKCQlpZiAocmVz dWx0KQoJCQlyZXR1cm4gcmVzdWx0OwoKCQlyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShz dCwgcmVnLT51c2VyX2N0cmwsCgkJCUJJVF9GSUZPX0VOfHVzZXJfY3RybCk7CgkJaWYgKHJlc3Vs dCkKCQkJcmV0dXJuIHJlc3VsdDsKCX0gZWxzZSB7CgkJLyogZW5hYmxlIGludGVycnVwdCAqLwoJ CWlmIChzdC0+Y2hpcF9jb25maWcuYWNjbF9maWZvX2VuYWJsZSB8fAoJCQlzdC0+Y2hpcF9jb25m aWcuZ3lyb19maWZvX2VuYWJsZSl7CgkJCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0 LCByZWctPmludF9lbmFibGUsCgkJCQkJCQlCSVRfREFUQV9SRFlfRU4pOwoJCQlpZiAocmVzdWx0 KQoJCQkJcmV0dXJuIHJlc3VsdDsKCQl9CgkJLyogZW5hYmxlIEZJRk8gcmVhZGluZyBhbmQgSTJD IG1hc3RlciBpbnRlcmZhY2UqLwoJCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCBy ZWctPnVzZXJfY3RybCwKCQkJQklUX0ZJRk9fRU4gfCB1c2VyX2N0cmwpOwoJCWlmIChyZXN1bHQp CgkJCXJldHVybiByZXN1bHQ7CgkJLyogZW5hYmxlIHNlbnNvciBvdXRwdXQgdG8gRklGTyBhbmQg RklGTyBmb290ZXIqLwoJCXZhbCA9IDE7CgkJaWYgKHN0LT5jaGlwX2NvbmZpZy5hY2NsX2ZpZm9f ZW5hYmxlKQoJCQl2YWwgfD0gQklUU18zMDUwX0FDQ0xfT1VUOwoJCWlmIChzdC0+Y2hpcF9jb25m aWcuZ3lyb19maWZvX2VuYWJsZSkKCQkJdmFsIHw9IEJJVFNfR1lST19PVVQ7CgkJcmVzdWx0ID0g aW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+Zmlmb19lbiwgdmFsKTsKCQlpZiAocmVzdWx0 KQoJCQlyZXR1cm4gcmVzdWx0OwoJfQoKCXJldHVybiAwOwpyZXNldF9maWZvX2ZhaWw6CglpZiAo c3QtPmNoaXBfY29uZmlnLmRtcF9vbikKCQl2YWwgPSBCSVRfRE1QX0lOVF9FTjsKCWVsc2UKCQl2 YWwgPSBCSVRfREFUQV9SRFlfRU47CglpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5pbnRf ZW5hYmxlLCB2YWwpOwoJcHJfZXJyKCIlcyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKCXJldHVybiBy ZXN1bHQ7Cn0KLyoqCiAqICByZXNldF9maWZvX2l0ZygpIC0gUmVzZXQgRklGTyByZWxhdGVkIHJl Z2lzdGVycy4KICogIEBzdDoJRGV2aWNlIGRyaXZlciBpbnN0YW5jZS4KICovCnN0YXRpYyBpbnQg cmVzZXRfZmlmb19pdGcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKewoJc3RydWN0IGludl9y ZWdfbWFwX3MgKnJlZzsKCWludCByZXN1bHQ7Cgl1bnNpZ25lZCBjaGFyIHZhbDsKCXN0cnVjdCBp bnZfZ3lyb19zdGF0ZV9zICAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJc3RydWN0IGlpb19i dWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPmJ1ZmZlcjsKCglyZWcgPSAmc3QtPnJlZzsKCWlmIChp aW9fc2Nhbl9tYXNrX3F1ZXJ5KGluZGlvX2RldiwgcmluZywgSU5WX01QVV9TQ0FOX0dZUk9fWCkg fHwKCQlpaW9fc2Nhbl9tYXNrX3F1ZXJ5KGluZGlvX2RldiwgcmluZywgSU5WX01QVV9TQ0FOX0dZ Uk9fWSkgfHwKCQlpaW9fc2Nhbl9tYXNrX3F1ZXJ5KGluZGlvX2RldiwgcmluZywgSU5WX01QVV9T Q0FOX0dZUk9fWikpCgkJc3QtPmNoaXBfY29uZmlnLmd5cm9fZmlmb19lbmFibGUgPSAxOwoJZWxz ZQoJCXN0LT5jaGlwX2NvbmZpZy5neXJvX2ZpZm9fZW5hYmxlID0gMDsKCglpZiAoaWlvX3NjYW5f bWFza19xdWVyeShpbmRpb19kZXYsIHJpbmcsIElOVl9NUFVfU0NBTl9BQ0NMX1gpIHx8CgkJaWlv X3NjYW5fbWFza19xdWVyeShpbmRpb19kZXYsIHJpbmcsIElOVl9NUFVfU0NBTl9BQ0NMX1kpIHx8 CgkJaWlvX3NjYW5fbWFza19xdWVyeShpbmRpb19kZXYsIHJpbmcsIElOVl9NUFVfU0NBTl9BQ0NM X1opKQoJCXN0LT5jaGlwX2NvbmZpZy5hY2NsX2ZpZm9fZW5hYmxlID0gMTsKCWVsc2UKCQlzdC0+ Y2hpcF9jb25maWcuYWNjbF9maWZvX2VuYWJsZSA9IDA7CgoJaWYgKGlpb19zY2FuX21hc2tfcXVl cnkoaW5kaW9fZGV2LCByaW5nLCBJTlZfTVBVX1NDQU5fTUFHTl9YKSB8fAoJCWlpb19zY2FuX21h c2tfcXVlcnkoaW5kaW9fZGV2LCByaW5nLCBJTlZfTVBVX1NDQU5fTUFHTl9ZKSB8fAoJCWlpb19z Y2FuX21hc2tfcXVlcnkoaW5kaW9fZGV2LCByaW5nLCBJTlZfTVBVX1NDQU5fTUFHTl9aKSkKCQlz dC0+Y2hpcF9jb25maWcuY29tcGFzc19maWZvX2VuYWJsZSA9IDE7CgllbHNlCgkJc3QtPmNoaXBf Y29uZmlnLmNvbXBhc3NfZmlmb19lbmFibGUgPSAwOwoKCS8qIGRpc2FibGUgaW50ZXJydXB0ICov CglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5pbnRfZW5hYmxlLCAwKTsK CWlmIChyZXN1bHQpIHsKCQlwcl9lcnIoIiVzIGZhaWxlZFxuIiwgX19mdW5jX18pOwoJCXJldHVy biByZXN1bHQ7Cgl9CgkvKiBkaXNhYmxlIHRoZSBzZW5zb3Igb3V0cHV0IHRvIEZJRk8gKi8KCXJl c3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPmZpZm9fZW4sIDApOwoJaWYgKHJl c3VsdCkKCQlnb3RvIHJlc2V0X2ZpZm9fZmFpbDsKCS8qIGRpc2FibGUgZmlmbyByZWFkaW5nICov CglyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT51c2VyX2N0cmwsIDApOwoJ aWYgKHJlc3VsdCkKCQlnb3RvIHJlc2V0X2ZpZm9fZmFpbDsKCglpZiAoc3QtPmNoaXBfY29uZmln LmRtcF9vbikgewoJCXZhbCA9IChCSVRfRklGT19SU1QgfCBCSVRfRE1QX1JTVCk7CgkJcmVzdWx0 ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+dXNlcl9jdHJsLCB2YWwpOwoJCWlmIChy ZXN1bHQpCgkJCWdvdG8gcmVzZXRfZmlmb19mYWlsOwoJCXN0LT5sYXN0X2lzcl90aW1lID0gaWlv X2dldF90aW1lX25zKCk7CgkJcmVzdWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+ aW50X2VuYWJsZSwKCQkJCQkJQklUX0RNUF9JTlRfRU4pOwoJCWlmIChyZXN1bHQpCgkJCXJldHVy biByZXN1bHQ7CgkJdmFsID0gKEJJVF9ETVBfRU4gfCBCSVRfRklGT19FTik7CgkJaWYgKHN0LT5j aGlwX2NvbmZpZy5jb21wYXNzX2VuYWJsZSkKCQkJdmFsIHw9IEJJVF9JMkNfTVNUX0VOOwoJCXJl c3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPnVzZXJfY3RybCwgdmFsKTsKCQlp ZiAocmVzdWx0KQoJCQlnb3RvIHJlc2V0X2ZpZm9fZmFpbDsKCX0gZWxzZSB7CgkJLyogcmVzZXQg RklGTyBhbmQgcG9zc2libHkgcmVzZXQgSTJDKi8KCQl2YWwgPSBCSVRfRklGT19SU1Q7CgkJcmVz dWx0ID0gaW52X2kyY19zaW5nbGVfd3JpdGUoc3QsIHJlZy0+dXNlcl9jdHJsLCB2YWwpOwoJCWlm IChyZXN1bHQpCgkJCWdvdG8gcmVzZXRfZmlmb19mYWlsOwoJCXN0LT5sYXN0X2lzcl90aW1lID0g aWlvX2dldF90aW1lX25zKCk7CgkJLyogZW5hYmxlIGludGVycnVwdCAqLwoJCWlmIChzdC0+Y2hp cF9jb25maWcuYWNjbF9maWZvX2VuYWJsZSB8fAoJCQlzdC0+Y2hpcF9jb25maWcuZ3lyb19maWZv X2VuYWJsZSB8fAoJCQlzdC0+Y2hpcF9jb25maWcuY29tcGFzc19lbmFibGUpewoJCQlyZXN1bHQg PSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT5pbnRfZW5hYmxlLAoJCQkJCQlCSVRfREFU QV9SRFlfRU4pOwoJCQlpZiAocmVzdWx0KQoJCQkJcmV0dXJuIHJlc3VsdDsKCQl9CgkJLyogZW5h YmxlIEZJRk8gcmVhZGluZyBhbmQgSTJDIG1hc3RlciBpbnRlcmZhY2UqLwoJCXZhbCA9IEJJVF9G SUZPX0VOOwoJCWlmIChzdC0+Y2hpcF9jb25maWcuY29tcGFzc19lbmFibGUpCgkJCXZhbCB8PSBC SVRfSTJDX01TVF9FTjsKCQlyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT51 c2VyX2N0cmwsIHZhbCk7CgkJaWYgKHJlc3VsdCkKCQkJZ290byByZXNldF9maWZvX2ZhaWw7CgkJ LyogZW5hYmxlIHNlbnNvciBvdXRwdXQgdG8gRklGTyAqLwoJCXZhbCA9IDA7CgkJaWYgKHN0LT5j aGlwX2NvbmZpZy5neXJvX2ZpZm9fZW5hYmxlKQoJCQl2YWwgfD0gQklUU19HWVJPX09VVDsKCQlp ZiAoc3QtPmNoaXBfY29uZmlnLmFjY2xfZmlmb19lbmFibGUpCgkJCXZhbCB8PSBCSVRfQUNDRUxf T1VUOwoJCXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPmZpZm9fZW4sIHZh bCk7CgkJaWYgKHJlc3VsdCkKCQkJZ290byByZXNldF9maWZvX2ZhaWw7Cgl9CglyZXR1cm4gMDsK cmVzZXRfZmlmb19mYWlsOgoJaWYgKHN0LT5jaGlwX2NvbmZpZy5kbXBfb24pCgkJdmFsID0gQklU X0RNUF9JTlRfRU47CgllbHNlCgkJdmFsID0gQklUX0RBVEFfUkRZX0VOOwoJaW52X2kyY19zaW5n bGVfd3JpdGUoc3QsIHJlZy0+aW50X2VuYWJsZSwgdmFsKTsKCXByX2VycigiJXMgZmFpbGVkXG4i LCBfX2Z1bmNfXyk7CglyZXR1cm4gcmVzdWx0Owp9Ci8qKgogKiAgaW52X3Jlc2V0X2ZpZm8oKSAt IFJlc2V0IEZJRk8gcmVsYXRlZCByZWdpc3RlcnMuCiAqICBAc3Q6CURldmljZSBkcml2ZXIgaW5z dGFuY2UuCiAqLwpzdGF0aWMgaW50IGludl9yZXNldF9maWZvKHN0cnVjdCBpaW9fZGV2ICppbmRp b19kZXYpCnsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rl dik7CglpZiAoSU5WX01QVTMwNTAgPT0gc3QtPmNoaXBfdHlwZSkKCQlyZXR1cm4gcmVzZXRfZmlm b19tcHUzMDUwKGluZGlvX2Rldik7CgllbHNlCgkJcmV0dXJuIHJlc2V0X2ZpZm9faXRnKGluZGlv X2Rldik7Cn0KLyoqCiAqICBzZXRfaW52X2VuYWJsZSgpIC0gUmVzZXQgRklGTyByZWxhdGVkIHJl Z2lzdGVycy4KICoJCQlUaGlzIGFsc28gcG93ZXJzIG9uIHRoZSBjaGlwIGlmIG5lZWRlZC4KICog IEBzdDoJRGV2aWNlIGRyaXZlciBpbnN0YW5jZS4KICogIEBmaWZvX2VuYWJsZTogZW5hYmxlL2Rp c2FibGUKICovCmludCBzZXRfaW52X2VuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAoJ CQl1bnNpZ25lZCBsb25nIGVuYWJsZSkgewoJc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0ID0g aWlvX3ByaXYoaW5kaW9fZGV2KTsKCXN0cnVjdCBpbnZfcmVnX21hcF9zICpyZWc7CglpbnQgcmVz dWx0OwoKCWlmIChzdC0+Y2hpcF9jb25maWcuaXNfYXNsZWVwKQoJCXJldHVybiAtRUlOVkFMOwoJ cmVnID0gJnN0LT5yZWc7CglpZiAoZW5hYmxlKSB7CgkJcmVzdWx0ID0gaW52X3Jlc2V0X2ZpZm8o aW5kaW9fZGV2KTsKCQlpZiAocmVzdWx0KQoJCQlyZXR1cm4gcmVzdWx0OwoJCXN0LT5jaGlwX2Nv bmZpZy5lbmFibGUgPSAxOwoJfSBlbHNlIHsKCQlyZXN1bHQgPSBpbnZfaTJjX3NpbmdsZV93cml0 ZShzdCwgcmVnLT5maWZvX2VuLCAwKTsKCQlpZiAocmVzdWx0KQoJCQlyZXR1cm4gcmVzdWx0OwoJ CXJlc3VsdCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCByZWctPmludF9lbmFibGUsIDApOwoJ CWlmIChyZXN1bHQpCgkJCXJldHVybiByZXN1bHQ7CgkJLyogZGlzYWJsZSBmaWZvIHJlYWRpbmcg Ki8KCQlpZiAoSU5WX01QVTMwNTAgIT0gc3QtPmNoaXBfdHlwZSkgewoJCQlyZXN1bHQgPSBpbnZf aTJjX3NpbmdsZV93cml0ZShzdCwgcmVnLT51c2VyX2N0cmwsIDApOwoJCQlpZiAocmVzdWx0KQoJ CQkJcmV0dXJuIHJlc3VsdDsKCQl9CgkJc3QtPmNoaXBfY29uZmlnLmVuYWJsZSA9IDA7Cgl9Cgly ZXR1cm4gMDsKfQoKLyoqCiAqICBpbnZfY2xlYXJfa2ZpZm8oKSAtIGNsZWFyIHRpbWUgc3RhbXAg ZmlmbwogKiAgQHN0OglEZXZpY2UgZHJpdmVyIGluc3RhbmNlLgogKi8Kdm9pZCBpbnZfY2xlYXJf a2ZpZm8oc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0KQp7Cgl1bnNpZ25lZCBsb25nIGZsYWdz OwoJc3Bpbl9sb2NrX2lycXNhdmUoJnN0LT50aW1lX3N0YW1wX2xvY2ssIGZsYWdzKTsKCWtmaWZv X3Jlc2V0KCZzdC0+dGltZXN0YW1wcyk7CglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+dGlt ZV9zdGFtcF9sb2NrLCBmbGFncyk7Cn0KCi8qKgogKiAgaW52X2lycV9oYW5kbGVyKCkgLSBDYWNo ZSBhIHRpbWVzdGFtcCBhdCBlYWNoIGRhdGEgcmVhZHkgaW50ZXJydXB0LgogKi8Kc3RhdGljIGly cXJldHVybl90IGludl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwKQp7CglzdHJ1Y3QgaWlv X3BvbGxfZnVuYyAqcGYgPSBwOwoJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBmLT5pbmRp b19kZXY7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYp OwoJbG9uZyBsb25nIHRpbWVzdGFtcDsKCWludCByZXN1bHQsIGNhdGNoX3VwOwoJdW5zaWduZWQg aW50IHRpbWVfc2luY2VfbGFzdF9pcnE7CgoJdGltZXN0YW1wID0gaWlvX2dldF90aW1lX25zKCk7 Cgl0aW1lX3NpbmNlX2xhc3RfaXJxID0gKCh1bnNpZ25lZCBpbnQpKHRpbWVzdGFtcAoJCS0gc3Qt Pmxhc3RfaXNyX3RpbWUpKS9PTkVfS19IWjsKCXNwaW5fbG9jaygmc3QtPnRpbWVfc3RhbXBfbG9j ayk7CgljYXRjaF91cCA9IDA7Cgl3aGlsZSAoKHRpbWVfc2luY2VfbGFzdF9pcnEgPiBzdC0+aXJx X2R1cl91cyoyKQoJCSYmIChjYXRjaF91cCA8IE1BWF9DQVRDSF9VUCkKCQkmJiAoMCA9PSBzdC0+ Y2hpcF9jb25maWcubHBhX21vZGUpKSB7CgoJCXN0LT5sYXN0X2lzcl90aW1lICs9IHN0LT5pcnFf ZHVyX3VzKk9ORV9LX0haOwoJCXJlc3VsdCA9IGtmaWZvX2luKCZzdC0+dGltZXN0YW1wcywKCQkJ JnN0LT5sYXN0X2lzcl90aW1lLCAxKTsKCQl0aW1lX3NpbmNlX2xhc3RfaXJxID0gKCh1bnNpZ25l ZCBpbnQpKHRpbWVzdGFtcAoJCQktIHN0LT5sYXN0X2lzcl90aW1lKSkvT05FX0tfSFo7CgkJY2F0 Y2hfdXArKzsKCX0KCXJlc3VsdCA9IGtmaWZvX2luKCZzdC0+dGltZXN0YW1wcywgJnRpbWVzdGFt cCwgMSk7CglzdC0+bGFzdF9pc3JfdGltZSA9IHRpbWVzdGFtcDsKCXNwaW5fdW5sb2NrKCZzdC0+ dGltZV9zdGFtcF9sb2NrKTsKCglyZXR1cm4gSVJRX1dBS0VfVEhSRUFEOwp9CnN0YXRpYyBpbnQg cHV0X3NjYW5fdG9fYnVmKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHVuc2lnbmVkIGNoYXIg KmQsCgkJCQlzaG9ydCAqcywgaW50IHNjYW5faW5kZXgsIGludCBkX2luZCkgewoJc3RydWN0IGlp b19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPmJ1ZmZlcjsKCWludCBzdDsKCXN0ID0gaWlvX3Nj YW5fbWFza19xdWVyeShpbmRpb19kZXYsIHJpbmcsIHNjYW5faW5kZXgpOwoJaWYgKHN0KSB7CgkJ ZFtkX2luZF0gICAgID0gKHNbMF0gJiAweGZmKTsKCQlkW2RfaW5kICsgMV0gPSAoKHNbMF0+Pjgp ICYgMHhmZik7CgkJZF9pbmQgKz0gMjsKCX0KCXN0ID0gaWlvX3NjYW5fbWFza19xdWVyeShpbmRp b19kZXYsIHJpbmcsIHNjYW5faW5kZXgrMSk7CglpZiAoc3QpIHsKCQlkW2RfaW5kXSAgICAgPSAo c1sxXSAmIDB4ZmYpOwoJCWRbZF9pbmQgKyAxXSA9ICgoc1sxXT4+OCkgJiAweGZmKTsKCQlkX2lu ZCArPSAyOwoJfQoJc3QgPSBpaW9fc2Nhbl9tYXNrX3F1ZXJ5KGluZGlvX2RldiwgcmluZywgc2Nh bl9pbmRleCsyKTsKCWlmIChzdCkgewoJCWRbZF9pbmRdICAgICA9IChzWzJdICYgMHhmZik7CgkJ ZFtkX2luZCArIDFdID0gKChzWzJdPj44KSAmIDB4ZmYpOwoJCWRfaW5kICs9IDI7Cgl9CglyZXR1 cm4gZF9pbmQ7Cn0Kc3RhdGljIHZvaWQgaW52X3JlcG9ydF9kYXRhXzMwNTAoc3RydWN0IGlpb19k ZXYgKmluZGlvX2RldiwgczY0IHQsCgkJCWludCBjb3VudGVyLCB1bnNpZ25lZCBjaGFyICpkYXRh KQp7CglzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJ c3RydWN0IGlpb19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPmJ1ZmZlcjsKCWludCBpbmQsIGks IGRfaW5kOwoJc3RydWN0IGludl9jaGlwX2NvbmZpZ19zICpjb25mOwoJc2hvcnQgZ1szXSwgYVsz XTsKCXM2NCBidWZbOF07Cgl1bnNpZ25lZCBjaGFyICp0bXA7CglpbnQgYnl0ZXNfcGVyX2RhdHVt LCBzY2FuX2NvdW50OwoJY29uZiA9ICZzdC0+Y2hpcF9jb25maWc7CgoJc2Nhbl9jb3VudCA9IGJp dG1hcF93ZWlnaHQoaW5kaW9fZGV2LT5hY3RpdmVfc2Nhbl9tYXNrLAoJCQkJICAgICAgIGluZGlv X2Rldi0+bWFza2xlbmd0aCk7CglieXRlc19wZXJfZGF0dW0gPSBzY2FuX2NvdW50ICogMjsKCglp bmQgPSAwOwoJaWYgKGNvdW50ZXIpCgkJaW5kICs9IDI7Cgl0bXAgPSAodW5zaWduZWQgY2hhciAq KWJ1ZjsKCWRfaW5kID0gMDsKCWlmIChjb25mLT5neXJvX2ZpZm9fZW5hYmxlIHwgY29uZi0+ZG1w X29uKSB7CgoJCWdbMF0gPQliZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSgmZGF0YVtpbmRdKSk7CgkJ Z1sxXSA9CWJlMTZfdG9fY3B1cCgoX19iZTE2ICopKCZkYXRhW2luZCsyXSkpOwoJCWdbMl0gPQli ZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSgmZGF0YVtpbmQrNF0pKTsKCQlpbmQgKz0gNjsKCQlkX2lu ZCA9IHB1dF9zY2FuX3RvX2J1ZihpbmRpb19kZXYsIHRtcCwgZywKCQkJSU5WX01QVV9TQ0FOX0dZ Uk9fWCwgZF9pbmQpOwoJfQoJaWYgKGNvbmYtPmFjY2xfZmlmb19lbmFibGUgfCBjb25mLT5kbXBf b24pIHsKCQlzdC0+bXB1X3NsYXZlLT5jb21iaW5lX2RhdGEoJmRhdGFbaW5kXSwgYSk7CgkJaW5k ICs9IDY7CgkJZF9pbmQgPSBwdXRfc2Nhbl90b19idWYoaW5kaW9fZGV2LCB0bXAsIGEsCgkJCUlO Vl9NUFVfU0NBTl9BQ0NMX1gsIGRfaW5kKTsKCX0KCglpID0gKGJ5dGVzX3Blcl9kYXR1bSArIDcp Lzg7CglpZiAocmluZy0+c2Nhbl90aW1lc3RhbXApCgkJYnVmW2ldID0gdDsKCXJpbmctPmFjY2Vz cy0+c3RvcmVfdG8oaW5kaW9fZGV2LT5idWZmZXIsICh1OCAqKSBidWYsIHQpOwp9Ci8qKgogKiAg aW52X3JlYWRfZmlmb19tcHUzMDUwKCkgLSBUcmFuc2ZlciBkYXRhIGZyb20gRklGTyB0byByaW5n IGJ1ZmZlciBmb3IgbXB1MzA1MC4KICovCmlycXJldHVybl90IGludl9yZWFkX2ZpZm9fbXB1MzA1 MChpbnQgaXJxLCB2b2lkICpwKQp7CglzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGYgPSBwOwoJc3Ry dWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBmLT5pbmRpb19kZXY7CglzdHJ1Y3QgaW52X2d5cm9f c3RhdGVfcyAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJaW50IGJ5dGVzX3Blcl9kYXR1bTsK CXVuc2lnbmVkIGNoYXIgZGF0YVs2NF07CglpbnQgcmVzdWx0OwoJc2hvcnQgZmlmb19jb3VudCwg Ynl0ZV9yZWFkOwoJdW5zaWduZWQgaW50IGNvcGllZDsKCXM2NCB0aW1lc3RhbXA7CglzdHJ1Y3Qg aW52X3JlZ19tYXBfcyAqcmVnOwoJcmVnID0gJnN0LT5yZWc7CgkvKiBJdCBpcyBpbXBvc3NpYmxl IHRoYXQgY2hpcCBpcyBhc2xlZXAgb3IgZW5hYmxlIGlzCgl6ZXJvIHdoZW4gaW50ZXJydXB0IGlz IG9uCgkqICBiZWNhdXNlIGludGVycnVwdCBpcyBub3cgY29ubmVjdGVkIHdpdGggZW5hYmxlICov CglpZiAoc3QtPmNoaXBfY29uZmlnLmRtcF9vbikKCQlieXRlc19wZXJfZGF0dW0gPSBCWVRFU19G T1JfRE1QOwoJZWxzZQoJCWJ5dGVzX3Blcl9kYXR1bSA9IChzdC0+Y2hpcF9jb25maWcuYWNjbF9m aWZvX2VuYWJsZSArCgkJCXN0LT5jaGlwX2NvbmZpZy5neXJvX2ZpZm9fZW5hYmxlKSpCWVRFU19Q RVJfU0VOU09SOwoJaWYgKHN0LT5maWZvX2NvdW50ZXIgPT0gMCkKCQlieXRlX3JlYWQgPSBieXRl c19wZXJfZGF0dW07CgllbHNlCgkJYnl0ZV9yZWFkID0gYnl0ZXNfcGVyX2RhdHVtICsgMjsKCglm aWZvX2NvdW50ID0gMDsKCWlmIChieXRlX3JlYWQgIT0gMCkgewoJCXJlc3VsdCA9IGludl9pMmNf cmVhZChzdCwgcmVnLT5maWZvX2NvdW50X2gsIDIsIGRhdGEpOwoJCWlmIChyZXN1bHQpCgkJCWdv dG8gZW5kX3Nlc3Npb247CgkJZmlmb19jb3VudCA9IChkYXRhWzBdIDw8IDgpICsgZGF0YVsxXTsK CQlpZiAoZmlmb19jb3VudCA8IGJ5dGVfcmVhZCkKCQkJZ290byBlbmRfc2Vzc2lvbjsKCQlpZiAo Zmlmb19jb3VudCUyKQoJCQlnb3RvIGZsdXNoX2ZpZm87CgkJaWYgKGZpZm9fY291bnQgPiBGSUZP X1RIUkVTSE9MRCkKCQkJZ290byBmbHVzaF9maWZvOwoJCS8qIFRpbWVzdGFtcCBtaXNtYXRjaC4g Ki8KCQlpZiAoa2ZpZm9fbGVuKCZzdC0+dGltZXN0YW1wcykgPAoJCQlmaWZvX2NvdW50IC8gYnl0 ZV9yZWFkKQoJCQlnb3RvIGZsdXNoX2ZpZm87CgkJaWYgKGtmaWZvX2xlbigmc3QtPnRpbWVzdGFt cHMpID4KCQkJZmlmb19jb3VudCAvIGJ5dGVfcmVhZCArIFRJTUVfU1RBTVBfVE9SKSB7CgkJCWlm IChzdC0+Y2hpcF9jb25maWcuZG1wX29uKSB7CgkJCQlyZXN1bHQgPSBrZmlmb190b191c2VyKCZz dC0+dGltZXN0YW1wcywKCQkJCSZ0aW1lc3RhbXAsIHNpemVvZih0aW1lc3RhbXApLCAmY29waWVk KTsKCQkJCWlmIChyZXN1bHQpCgkJCQkJZ290byBmbHVzaF9maWZvOwoJCQl9IGVsc2UKCQkJCWdv dG8gZmx1c2hfZmlmbzsKCQl9Cgl9Cgl3aGlsZSAoKGJ5dGVzX3Blcl9kYXR1bSAhPSAwKSAmJiAo Zmlmb19jb3VudCA+PSBieXRlX3JlYWQpKSB7CgkJcmVzdWx0ID0gaW52X2kyY19yZWFkKHN0LCBy ZWctPmZpZm9fcl93LCBieXRlX3JlYWQsIGRhdGEpOwoJCWlmIChyZXN1bHQpCgkJCWdvdG8gZmx1 c2hfZmlmbzsKCgkJcmVzdWx0ID0ga2ZpZm9fdG9fdXNlcigmc3QtPnRpbWVzdGFtcHMsCgkJCSZ0 aW1lc3RhbXAsIHNpemVvZih0aW1lc3RhbXApLCAmY29waWVkKTsKCQlpZiAocmVzdWx0KQoJCQln b3RvIGZsdXNoX2ZpZm87CgkJaW52X3JlcG9ydF9kYXRhXzMwNTAoaW5kaW9fZGV2LCB0aW1lc3Rh bXAsIHN0LT5maWZvX2NvdW50ZXIsCgkJCQkJZGF0YSk7CgkJZmlmb19jb3VudCAtPSBieXRlX3Jl YWQ7CgkJaWYgKHN0LT5maWZvX2NvdW50ZXIgPT0gMCkgewoJCQlzdC0+Zmlmb19jb3VudGVyID0g MTsKCQkJYnl0ZV9yZWFkID0gYnl0ZXNfcGVyX2RhdHVtICsgTVBVMzA1MF9GT09URVJfU0laRTsK CQl9Cgl9CmVuZF9zZXNzaW9uOgoJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50 cmlnKTsKCXJldHVybiBJUlFfSEFORExFRDsKZmx1c2hfZmlmbzoKCS8qIEZsdXNoIEhXIGFuZCBT VyBGSUZPcy4gKi8KCWludl9yZXNldF9maWZvKGluZGlvX2Rldik7CglpbnZfY2xlYXJfa2ZpZm8o c3QpOwoJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKCXJldHVybiBJ UlFfSEFORExFRDsKfQpzdGF0aWMgaW50IGludl9yZXBvcnRfZ3lyb19hY2NsX2NvbXBhc3Moc3Ry dWN0IGlpb19kZXYgKmluZGlvX2RldiwKCQkJCQl1bnNpZ25lZCBjaGFyICpkYXRhLCBzNjQgdCkK ewoJc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCXN0 cnVjdCBpaW9fYnVmZmVyICpyaW5nID0gaW5kaW9fZGV2LT5idWZmZXI7CglzaG9ydCBnWzNdLCBh WzNdLCBjWzNdOwoJaW50IHJlc3VsdCwgYnl0ZXNfcGVyX2RhdHVtLCBpLCBpbmQsIGRfaW5kLCBz Y2FuX2NvdW50OwoJczY0IGJ1Zls4XTsKCXVuc2lnbmVkIGNoYXIgZFs4XTsKCXVuc2lnbmVkIGNo YXIgKnRtcDsKCXN0cnVjdCBpbnZfY2hpcF9jb25maWdfcyAqY29uZjsKCWNvbmYgPSAmc3QtPmNo aXBfY29uZmlnOwoJaW5kID0gMDsKCWlmIChjb25mLT5hY2NsX2ZpZm9fZW5hYmxlIHwgY29uZi0+ ZG1wX29uKSB7CgkJYVswXSA9CWJlMTZfdG9fY3B1cCgoX19iZTE2ICopKCZkYXRhW2luZF0pKTsK CQlhWzFdID0JYmUxNl90b19jcHVwKChfX2JlMTYgKikoJmRhdGFbaW5kKzJdKSk7CgkJYVsyXSA9 CWJlMTZfdG9fY3B1cCgoX19iZTE2ICopKCZkYXRhW2luZCs0XSkpOwoKCQlhWzBdICo9IHN0LT5j aGlwX2luZm8ubXVsdGk7CgkJYVsxXSAqPSBzdC0+Y2hpcF9pbmZvLm11bHRpOwoJCWFbMl0gKj0g c3QtPmNoaXBfaW5mby5tdWx0aTsKCQlzdC0+cmF3X2FjY2VsWzBdID0gYVswXTsKCQlzdC0+cmF3 X2FjY2VsWzFdID0gYVsxXTsKCQlzdC0+cmF3X2FjY2VsWzJdID0gYVsyXTsKCQlpbmQgKz0gNjsK CX0KCWlmIChjb25mLT5neXJvX2ZpZm9fZW5hYmxlIHwgY29uZi0+ZG1wX29uKSB7CgkJZ1swXSA9 CWJlMTZfdG9fY3B1cCgoX19iZTE2ICopKCZkYXRhW2luZF0pKTsKCQlnWzFdID0JYmUxNl90b19j cHVwKChfX2JlMTYgKikoJmRhdGFbaW5kKzJdKSk7CgkJZ1syXSA9CWJlMTZfdG9fY3B1cCgoX19i ZTE2ICopKCZkYXRhW2luZCs0XSkpOwoKCQlzdC0+cmF3X2d5cm9bMF0gPSBnWzBdOwoJCXN0LT5y YXdfZ3lyb1sxXSA9IGdbMV07CgkJc3QtPnJhd19neXJvWzJdID0gZ1syXTsKCQlpbmQgKz0gNjsK CX0KCS8qZGl2aWRlciBhbmQgY291bnRlciBpcyB1c2VkIHRvIGRlY3JlYXNlIHRoZSBzcGVlZCBv ZiByZWFkIGluCgkJaGlnaCBmcmVxdWVuY3kgc2FtcGxlIHJhdGUqLwoJaWYgKGNvbmYtPmRtcF9v bikgewoJCS8qIHJlcG9ydCB0YXAgaW5mb3JtYXRpb24gKi8KCQlpZiAoZGF0YVtpbmQgKyAxXSAm IDEpIHsKCQkJc3QtPnRhcF9kYXRhID0gZGF0YVtpbmQrM107CgkJCXN5c2ZzX25vdGlmeSgmaW5k aW9fZGV2LT5kZXYua29iaiwgTlVMTCwgImV2ZW50X3RhcCIpOwoJCX0KCQkvKiByZXBvcnQgb3Jp ZW50YXRpb24gaW5mb3JtYXRpb24gKi8KCQlpZiAoZGF0YVtpbmQgKyAxXSAmIDIpIHsKCQkJc3Qt Pm9yaWVudF9kYXRhID0gZGF0YVtpbmQrMl07CgkJCXN5c2ZzX25vdGlmeSgmaW5kaW9fZGV2LT5k ZXYua29iaiwgTlVMTCwgImV2ZW50X29yaWVudGF0aW9uIik7CgkJfQoJfQoJY1swXSA9IGNbMV0g PSBjWzJdID0gMDsKCWlmIChzdC0+Y29tcGFzc19kaXZpZGVyID09IHN0LT5jb21wYXNzX2NvdW50 ZXIpIHsKCQkvKnJlYWQgZnJvbSBleHRlcm5hbCBzZW5zb3IgZGF0YSByZWdpc3RlciAqLwoJCXJl c3VsdCA9IGludl9pMmNfcmVhZChzdCwgUkVHX0VYVF9TRU5TX0RBVEFfMDAsIDgsIGQpOwoJCS8q IGRbN10gaXMgc3RhdHVzIDIgcmVnaXN0ZXIgKi8KCQkvKmZvciBBS004OTc1LCBiaXQgMiBhbmQg MyBzaG91bGQgYmUgYWxsIGJlIHplcm8qLwoJCS8qIGZvciBBTUs4OTYzLCBiaXQgMyBzaG91bGQg YmUgemVybyovCgkJaWYgKChEQVRBX0FLTV9EUkRZID09IGRbMF0pCgkJCSYmICgwID09IChkWzdd ICYgREFUQV9BS01fU1RBVF9NQVNLKSkKCQkJJiYgKCFyZXN1bHQpKSB7CgkJCXVuc2lnbmVkIGNo YXIgKnNlbnM7CgkJCXNlbnMgPSBzdC0+Y2hpcF9pbmZvLmNvbXBhc3Nfc2VuczsKCQkJY1swXSA9 IChzaG9ydCkoKGRbMl0gPDwgOCkgfCBkWzFdKTsKCQkJY1sxXSA9IChzaG9ydCkoKGRbNF0gPDwg OCkgfCBkWzNdKTsKCQkJY1syXSA9IChzaG9ydCkoKGRbNl0gPDwgOCkgfCBkWzVdKTsKCQkJY1sw XSA9ICgoY1swXSAqIChzZW5zWzBdICsgMTI4KSkgPj4gOCk7CgkJCWNbMV0gPSAoKGNbMV0gKiAo c2Vuc1sxXSArIDEyOCkpID4+IDgpOwoJCQljWzJdID0gKChjWzJdICogKHNlbnNbMl0gKyAxMjgp KSA+PiA4KTsKCQkJc3QtPnJhd19jb21wYXNzWzBdID0gY1swXTsKCQkJc3QtPnJhd19jb21wYXNz WzFdID0gY1sxXTsKCQkJc3QtPnJhd19jb21wYXNzWzJdID0gY1syXTsKCQl9CgkJc3QtPmNvbXBh c3NfY291bnRlciA9IDA7Cgl9IGVsc2UgaWYgKHN0LT5jb21wYXNzX2RpdmlkZXIgIT0gMCkgewoJ CXN0LT5jb21wYXNzX2NvdW50ZXIrKzsKCX0KCXRtcCA9ICh1bnNpZ25lZCBjaGFyICopYnVmOwoJ bWVtc2V0KHRtcCwgMCwgNjQpOwoJZF9pbmQgPSAwOwoJaWYgKGNvbmYtPmd5cm9fZmlmb19lbmFi bGUgfCBjb25mLT5kbXBfb24pCgkJZF9pbmQgPSBwdXRfc2Nhbl90b19idWYoaW5kaW9fZGV2LCB0 bXAsIGcsCgkJCQlJTlZfTVBVX1NDQU5fR1lST19YLCBkX2luZCk7CglpZiAoY29uZi0+YWNjbF9m aWZvX2VuYWJsZSB8IGNvbmYtPmRtcF9vbikKCQlkX2luZCA9IHB1dF9zY2FuX3RvX2J1ZihpbmRp b19kZXYsIHRtcCwgYSwKCQkJCUlOVl9NUFVfU0NBTl9BQ0NMX1gsIGRfaW5kKTsKCWlmIChjb25m LT5jb21wYXNzX2ZpZm9fZW5hYmxlIHwgY29uZi0+ZG1wX29uKQoJCWRfaW5kID0gcHV0X3NjYW5f dG9fYnVmKGluZGlvX2RldiwgdG1wLCBjLAoJCQkJSU5WX01QVV9TQ0FOX01BR05fWCwgZF9pbmQp OwoKCXNjYW5fY291bnQgPSBiaXRtYXBfd2VpZ2h0KGluZGlvX2Rldi0+YWN0aXZlX3NjYW5fbWFz aywKCQkJCSAgICAgICBpbmRpb19kZXYtPm1hc2tsZW5ndGgpOwoJYnl0ZXNfcGVyX2RhdHVtID0g c2Nhbl9jb3VudCAqIDI7CglpID0gKGJ5dGVzX3Blcl9kYXR1bSArIDcpLzg7CglpZiAocmluZy0+ c2Nhbl90aW1lc3RhbXApCgkJYnVmW2ldID0gdDsKCXJpbmctPmFjY2Vzcy0+c3RvcmVfdG8oaW5k aW9fZGV2LT5idWZmZXIsICh1OCAqKSBidWYsIHQpOwoKCXJldHVybiAwOwp9CgovKioKICogIGlu dl9yZWFkX2ZpZm8oKSAtIFRyYW5zZmVyIGRhdGEgZnJvbSBGSUZPIHRvIHJpbmcgYnVmZmVyLgog Ki8Kc3RhdGljIGlycXJldHVybl90IGludl9yZWFkX2ZpZm8oaW50IGlycSwgdm9pZCAqcCkKewoJ c3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmID0gcDsKCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYg PSBwZi0+aW5kaW9fZGV2OwoJc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYo aW5kaW9fZGV2KTsKCXNpemVfdCBieXRlc19wZXJfZGF0dW07CglpbnQgcmVzdWx0OwoJdW5zaWdu ZWQgY2hhciBkYXRhWzE2XTsKCXVuc2lnbmVkIHNob3J0IGZpZm9fY291bnQ7Cgl1bnNpZ25lZCBp bnQgY29waWVkOwoJczY0IHRpbWVzdGFtcDsKCXN0cnVjdCBpbnZfcmVnX21hcF9zICpyZWc7Cglz NjQgYnVmWzhdOwoJdW5zaWduZWQgY2hhciAqdG1wOwoJcmVnID0gJnN0LT5yZWc7CglpZiAoIShz dC0+Y2hpcF9jb25maWcuYWNjbF9maWZvX2VuYWJsZSB8CgkJc3QtPmNoaXBfY29uZmlnLmd5cm9f Zmlmb19lbmFibGUgfAoJCXN0LT5jaGlwX2NvbmZpZy5kbXBfb24gfAoJCXN0LT5jaGlwX2NvbmZp Zy5jb21wYXNzX2ZpZm9fZW5hYmxlKSkKCQlnb3RvIGVuZF9zZXNzaW9uOwoJaWYgKHN0LT5jaGlw X2NvbmZpZy5kbXBfb24gJiYgc3QtPmZsaWNrLmludF9vbikgewoJCS8qZG1wIGludGVycnVwdCBz dGF0dXMgKi8KCQlpbnZfaTJjX3JlYWQoc3QsIFJFR19ETVBfSU5UX1NUQVRVUywgMSwgZGF0YSk7 CgkJaWYgKGRhdGFbMF0gJiA4KQoJCQlzeXNmc19ub3RpZnkoJmluZGlvX2Rldi0+ZGV2LmtvYmos IE5VTEwsICJldmVudF9mbGljayIpOwoJfQoJaWYgKHN0LT5jaGlwX2NvbmZpZy5scGFfbW9kZSkg ewoJCXJlc3VsdCA9IGludl9pMmNfcmVhZChzdCwgcmVnLT5yYXdfYWNjbCwgNiwgZGF0YSk7CgkJ aWYgKHJlc3VsdCkKCQkJZ290byBlbmRfc2Vzc2lvbjsKCQlpbnZfcmVwb3J0X2d5cm9fYWNjbF9j b21wYXNzKGluZGlvX2RldiwgZGF0YSwKCQkJCQkJaWlvX2dldF90aW1lX25zKCkpOwoJCWdvdG8g ZW5kX3Nlc3Npb247Cgl9CgoJaWYgKHN0LT5jaGlwX2NvbmZpZy5kbXBfb24pCgkJYnl0ZXNfcGVy X2RhdHVtID0gQllURVNfRk9SX0RNUDsKCWVsc2UKCQlieXRlc19wZXJfZGF0dW0gPSAoc3QtPmNo aXBfY29uZmlnLmFjY2xfZmlmb19lbmFibGUgKwoJCXN0LT5jaGlwX2NvbmZpZy5neXJvX2ZpZm9f ZW5hYmxlKSpCWVRFU19QRVJfU0VOU09SOwoJZmlmb19jb3VudCA9IDA7CglpZiAoYnl0ZXNfcGVy X2RhdHVtICE9IDApIHsKCQlyZXN1bHQgPSBpbnZfaTJjX3JlYWQoc3QsIHJlZy0+Zmlmb19jb3Vu dF9oLCAyLCBkYXRhKTsKCQlpZiAocmVzdWx0KQoJCQlnb3RvIGVuZF9zZXNzaW9uOwoJCWZpZm9f Y291bnQgPSAoZGF0YVswXSA8PCA4KSArIGRhdGFbMV07CgkJaWYgKGZpZm9fY291bnQgPCBieXRl c19wZXJfZGF0dW0pCgkJCWdvdG8gZW5kX3Nlc3Npb247CgkJaWYgKGZpZm9fY291bnQlMikKCQkJ Z290byBmbHVzaF9maWZvOwoJCWlmIChmaWZvX2NvdW50ID4gIEZJRk9fVEhSRVNIT0xEKQoJCQln b3RvIGZsdXNoX2ZpZm87CgkJLyogVGltZXN0YW1wIG1pc21hdGNoLiAqLwoJCWlmIChrZmlmb19s ZW4oJnN0LT50aW1lc3RhbXBzKSA8CgkJCWZpZm9fY291bnQgLyBieXRlc19wZXJfZGF0dW0pCgkJ CWdvdG8gZmx1c2hfZmlmbzsKCQlpZiAoa2ZpZm9fbGVuKCZzdC0+dGltZXN0YW1wcykgPgoJCQlm aWZvX2NvdW50IC8gYnl0ZXNfcGVyX2RhdHVtICsgVElNRV9TVEFNUF9UT1IpIHsKCQkJaWYgKHN0 LT5jaGlwX2NvbmZpZy5kbXBfb24pIHsKCQkJCXJlc3VsdCA9IGtmaWZvX3RvX3VzZXIoJnN0LT50 aW1lc3RhbXBzLAoJCQkJJnRpbWVzdGFtcCwgc2l6ZW9mKHRpbWVzdGFtcCksICZjb3BpZWQpOwoJ CQkJaWYgKHJlc3VsdCkKCQkJCQlnb3RvIGZsdXNoX2ZpZm87CgkJCX0gZWxzZQoJCQkJZ290byBm bHVzaF9maWZvOwoJCX0KCX0KCWlmIChieXRlc19wZXJfZGF0dW0gPT0gMCkgewoJCXJlc3VsdCA9 IGtmaWZvX3RvX3VzZXIoJnN0LT50aW1lc3RhbXBzLAoJCQkmdGltZXN0YW1wLCBzaXplb2YodGlt ZXN0YW1wKSwgJmNvcGllZCk7CgkJaWYgKHJlc3VsdCkKCQkJZ290byBmbHVzaF9maWZvOwoJfQoJ dG1wID0gKGNoYXIgKilidWY7Cgl3aGlsZSAoKGJ5dGVzX3Blcl9kYXR1bSAhPSAwKSAmJiAoZmlm b19jb3VudCA+PSBieXRlc19wZXJfZGF0dW0pKSB7CgkJcmVzdWx0ID0gaW52X2kyY19yZWFkKHN0 LCByZWctPmZpZm9fcl93LCBieXRlc19wZXJfZGF0dW0sCgkJCWRhdGEpOwoJCWlmIChyZXN1bHQp CgkJCWdvdG8gZmx1c2hfZmlmbzsKCgkJcmVzdWx0ID0ga2ZpZm9fdG9fdXNlcigmc3QtPnRpbWVz dGFtcHMsCgkJCSZ0aW1lc3RhbXAsIHNpemVvZih0aW1lc3RhbXApLCAmY29waWVkKTsKCQlpZiAo cmVzdWx0KQoJCQlnb3RvIGZsdXNoX2ZpZm87CgkJaW52X3JlcG9ydF9neXJvX2FjY2xfY29tcGFz cyhpbmRpb19kZXYsIGRhdGEsIHRpbWVzdGFtcCk7CgkJZmlmb19jb3VudCAtPSBieXRlc19wZXJf ZGF0dW07Cgl9CglpZiAoYnl0ZXNfcGVyX2RhdHVtID09IDApCgkJaW52X3JlcG9ydF9neXJvX2Fj Y2xfY29tcGFzcyhpbmRpb19kZXYsIGRhdGEsIHRpbWVzdGFtcCk7CmVuZF9zZXNzaW9uOgoJaWlv X3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKCXJldHVybiBJUlFfSEFORExF RDsKZmx1c2hfZmlmbzoKCS8qIEZsdXNoIEhXIGFuZCBTVyBGSUZPcy4gKi8KCWludl9yZXNldF9m aWZvKGluZGlvX2Rldik7CglpbnZfY2xlYXJfa2ZpZm8oc3QpOwoJaWlvX3RyaWdnZXJfbm90aWZ5 X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKCXJldHVybiBJUlFfSEFORExFRDsKfQoKdm9pZCBpbnZf bXB1X3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKewoJaWlvX2Rl YWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CglpaW9fc3dfcmJfZnJlZShpbmRp b19kZXYtPmJ1ZmZlcik7Cn07CgpzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19idWZmZXJfc2V0dXBf b3BzIGludl9tcHVfcmluZ19zZXR1cF9vcHMgPSB7CgkucHJlZW5hYmxlID0gJmlpb19zd19idWZm ZXJfcHJlZW5hYmxlLAoJLnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9idWZmZXJfcG9zdGVu YWJsZSwKCS5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfYnVmZmVyX3ByZWRpc2FibGUsCn07 CgppbnQgaW52X21wdV9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQp7 CglpbnQgcmV0ID0gMDsKCXN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGlu ZGlvX2Rldik7CglzdHJ1Y3QgaWlvX2J1ZmZlciAqcmluZzsKCglyaW5nID0gaWlvX3N3X3JiX2Fs bG9jYXRlKGluZGlvX2Rldik7CglpZiAoIXJpbmcpIHsKCQlyZXQgPSAtRU5PTUVNOwoJCXJldHVy biByZXQ7Cgl9CglpbmRpb19kZXYtPmJ1ZmZlciA9IHJpbmc7CgkvKiBzZXR1cCByaW5nIGJ1ZmZl ciAqLwoJcmluZy0+c2Nhbl90aW1lc3RhbXAgPSB0cnVlOwoJaW5kaW9fZGV2LT5zZXR1cF9vcHMg PSAmaW52X21wdV9yaW5nX3NldHVwX29wczsKCS8qc2NhbiBjb3VudCBkb3VibGUgY291bnQgdGlt ZXN0YW1wLiBzaG91bGQgc3VidHJhY3QgMS4gYnV0CgludW1iZXIgb2YgY2hhbm5lbHMgc3RpbGwg aW5jbHVkZXMgdGltZXN0YW1wKi8KCWlmIChJTlZfTVBVMzA1MCA9PSBzdC0+Y2hpcF90eXBlKQoJ CWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoJmludl9pcnFfaGFuZGxl ciwKCQkJCQkJICZpbnZfcmVhZF9maWZvX21wdTMwNTAsCgkJCQkJCSBJUlFGX09ORVNIT1QsCgkJ CQkJCSBpbmRpb19kZXYsCgkJCQkJCSAiJXNfY29uc3VtZXIlZCIsCgkJCQkJCSBpbmRpb19kZXYt Pm5hbWUsCgkJCQkJCSBpbmRpb19kZXYtPmlkKTsKCWVsc2UKCQlpbmRpb19kZXYtPnBvbGxmdW5j ID0gaWlvX2FsbG9jX3BvbGxmdW5jKCZpbnZfaXJxX2hhbmRsZXIsCgkJCQkJCSAmaW52X3JlYWRf ZmlmbywKCQkJCQkJIElSUUZfT05FU0hPVCwKCQkJCQkJIGluZGlvX2RldiwKCQkJCQkJICIlc19j b25zdW1lciVkIiwKCQkJCQkJIGluZGlvX2Rldi0+bmFtZSwKCQkJCQkJIGluZGlvX2Rldi0+aWQp OwoJaWYgKGluZGlvX2Rldi0+cG9sbGZ1bmMgPT0gTlVMTCkgewoJCXJldCA9IC1FTk9NRU07CgkJ Z290byBlcnJvcl9paW9fc3dfcmJfZnJlZTsKCX0KCglpbmRpb19kZXYtPm1vZGVzIHw9IElORElP X0JVRkZFUl9UUklHR0VSRUQ7CglyZXR1cm4gMDsKZXJyb3JfaWlvX3N3X3JiX2ZyZWU6CglpaW9f c3dfcmJfZnJlZShpbmRpb19kZXYtPmJ1ZmZlcik7CglyZXR1cm4gcmV0Owp9Ci8qKgogKiAgQH0K ICovCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABpbnZfbXB1X3RyaWdnZXIuYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAx NzUwADAwMDE3NTAAMDAwMDAwMDUyMzIAMTE3NTI1NDY3NjAAMDEzMDU1ACAwAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAZ2dhbwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABnZ2FvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AC8qCiogQ29weXJpZ2h0IChDKSAyMDEyIEludmVuc2Vuc2UsIEluYy4KKgoqIFRoaXMgc29mdHdh cmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMK KiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIGFuZAoqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQg dW5kZXIgdGhvc2UgdGVybXMuCioKKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgoqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoqCiovCgovKioKICogIEBhZGR0b2dy b3VwICBEUklWRVJTCiAqICBAYnJpZWYgICAgICAgSGFyZHdhcmUgZHJpdmVycy4KICoKICogIEB7 CiAqICAgICAgQGZpbGUgICAgaW52X21wdTMwNTAuYwogKiAgICAgIEBicmllZiAgIEEgc3lzZnMg ZGV2aWNlIGRyaXZlciBmb3IgSW52ZW5zZW5zZSBkZXZpY2VzCiAqICAgICAgQGRldGFpbHMgVGhp cyBmaWxlIGlzIHBhcnQgb2YgaW52X2d5cm8gZHJpdmVyIGNvZGUKICovCgojaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CiNpbmNsdWRlIDxsaW51eC9pMmMuaD4KI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgojaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4KI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiNpbmNsdWRlIDxsaW51 eC9qaWZmaWVzLmg+CiNpbmNsdWRlIDxsaW51eC9pcnEuaD4KI2luY2x1ZGUgPGxpbnV4L2ludGVy cnVwdC5oPgojaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4K I2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+ CgojaW5jbHVkZSAiLi4vLi4vaWlvLmgiCiNpbmNsdWRlICIuLi8uLi9zeXNmcy5oIgojaW5jbHVk ZSAiLi4vLi4vdHJpZ2dlci5oIgojaW5jbHVkZSAiaW52X21wdV9paW8uaCIKCi8qKgogKiBpbnZf bXB1X2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlKCkgc2V0IGRhdGFyZHkgaW50ZXJydXB0IHN0 YXRlCiAqKi8Kc3RhdGljIGludCBpbnZfbXB1X2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlKHN0 cnVjdCBpaW9fdHJpZ2dlciAqdHJpZywKCQkJCQkJYm9vbCBzdGF0ZSkKewoJc3RydWN0IGlpb19k ZXYgKmluZGlvX2RldiA9IHRyaWctPnByaXZhdGVfZGF0YTsKCglkZXZfZGJnKCZpbmRpb19kZXYt PmRldiwgIiVzICglZClcbiIsIF9fZnVuY19fLCBzdGF0ZSk7CglyZXR1cm4gc2V0X2ludl9lbmFi bGUoaW5kaW9fZGV2LCBzdGF0ZSk7Cn0KCnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX3RyaWdnZXJf b3BzIGludl9tcHVfdHJpZ2dlcl9vcHMgPSB7Cgkub3duZXIgPSBUSElTX01PRFVMRSwKCS5zZXRf dHJpZ2dlcl9zdGF0ZSA9ICZpbnZfbXB1X2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlLAp9OwoK aW50IGludl9tcHVfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQp7Cglp bnQgcmV0OwoJc3RydWN0IGludl9neXJvX3N0YXRlX3MgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2 KTsKCglzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCIlcy1kZXYlZCIsCgkJCQkJaW5k aW9fZGV2LT5uYW1lLAoJCQkJCWluZGlvX2Rldi0+aWQpOwoJaWYgKHN0LT50cmlnID09IE5VTEwp IHsKCQlyZXQgPSAtRU5PTUVNOwoJCWdvdG8gZXJyb3JfcmV0OwoJfQoKCXJldCA9IHJlcXVlc3Rf aXJxKHN0LT5pcnEsCgkJCSAgJmlpb190cmlnZ2VyX2dlbmVyaWNfZGF0YV9yZHlfcG9sbCwKCQkJ ICBJUlFGX1RSSUdHRVJfUklTSU5HLAoJCQkgICJpbnZfbXB1IiwKCQkJICBzdC0+dHJpZyk7Cglp ZiAocmV0KQoJCWdvdG8gZXJyb3JfZnJlZV90cmlnOwoJLyogc2VsZWN0IGRlZmF1bHQgdHJpZ2dl ciAqLwoJc3QtPnRyaWctPmRldi5wYXJlbnQgPSAmc3QtPmkyYy0+ZGV2OwoJc3QtPnRyaWctPnBy aXZhdGVfZGF0YSA9IGluZGlvX2RldjsKCXN0LT50cmlnLT5vcHMgPSAmaW52X21wdV90cmlnZ2Vy X29wczsKCXJldCA9IGlpb190cmlnZ2VyX3JlZ2lzdGVyKHN0LT50cmlnKTsKCgkvKiBzZWxlY3Qg ZGVmYXVsdCB0cmlnZ2VyICovCglpbmRpb19kZXYtPnRyaWcgPSBzdC0+dHJpZzsKCWlmIChyZXQp CgkJZ290byBlcnJvcl9mcmVlX2lycTsKCglyZXR1cm4gMDsKCmVycm9yX2ZyZWVfaXJxOgoJZnJl ZV9pcnEoc3QtPmlycSwgc3QtPnRyaWcpOwplcnJvcl9mcmVlX3RyaWc6CglpaW9fZnJlZV90cmln Z2VyKHN0LT50cmlnKTsKZXJyb3JfcmV0OgoJcmV0dXJuIHJldDsKfQoKdm9pZCBpbnZfbXB1X3Jl bW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCnsKCXN0cnVjdCBpbnZfZ3ly b19zdGF0ZV9zICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CgoJaWlvX3RyaWdnZXJfdW5yZWdp c3RlcihzdC0+dHJpZyk7CglmcmVlX2lycShzdC0+aXJxLCBzdC0+dHJpZyk7CglpaW9fZnJlZV90 cmlnZ2VyKHN0LT50cmlnKTsKfQovKioKICogIEB9CiAqLwoKAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGludl9z bGF2ZV9ibWEyNTAuYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAwMDE3NTAAMDAw MTc1MAAwMDAwMDAxNjc1NQAxMTc1MjU0Njc2MAAwMTI3MjUAIDAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABnZ2FvAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAGdnYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKKiBD b3B5cmlnaHQgKEMpIDIwMTIgSW52ZW5zZW5zZSwgSW5jLgoqCiogVGhpcyBzb2Z0d2FyZSBpcyBs aWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwoqIExpY2Vu c2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgYW5kCiogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0 aG9zZSB0ZXJtcy4KKgoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAoqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQoqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCioKKi8KCi8qKgogKiAgQGFkZHRvZ3JvdXAgIERS SVZFUlMKICogIEBicmllZiAgICAgICBIYXJkd2FyZSBkcml2ZXJzLgogKgogKiAgQHsKICogICAg ICBAZmlsZSAgICBpbnZfc2xhdmVfYm1hMjUwLmMKICogICAgICBAYnJpZWYgICBBIHN5c2ZzIGRl dmljZSBkcml2ZXIgZm9yIEludmVuc2Vuc2UgZGV2aWNlcwogKiAgICAgIEBkZXRhaWxzIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIGludl9neXJvIGRyaXZlciBjb2RlCiAqCiAqLwoKI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgojaW5jbHVkZSA8bGludXgvc2xh Yi5oPgojaW5jbHVkZSA8bGludXgvaTJjLmg+CiNpbmNsdWRlIDxsaW51eC9lcnIuaD4KI2luY2x1 ZGUgPGxpbnV4L2RlbGF5Lmg+CiNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgojaW5jbHVkZSA8bGlu dXgvamlmZmllcy5oPgojaW5jbHVkZSA8bGludXgvaXJxLmg+CiNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4KI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiNpbmNsdWRlIDxsaW51eC9wb2xsLmg+ CiNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5o PgoKI2luY2x1ZGUgImludl9tcHVfaWlvLmgiCiNkZWZpbmUgQk1BMjUwX0NISVBfSUQJCQkoMykK I2RlZmluZSBCTUEyNTBfUkFOR0VfU0VUCQkoMCkKI2RlZmluZSBCTUEyNTBfQldfU0VUCQkJKDQp CgovKiByYW5nZSBhbmQgYmFuZHdpZHRoICovCgojZGVmaW5lIEJNQTI1MF9SQU5HRV8yRyAgICAg ICAgICAgICAgICAgKDMpCiNkZWZpbmUgQk1BMjUwX1JBTkdFXzRHICAgICAgICAgICAgICAgICAo NSkKI2RlZmluZSBCTUEyNTBfUkFOR0VfOEcgICAgICAgICAgICAgICAgICg4KQojZGVmaW5lIEJN QTI1MF9SQU5HRV8xNkcgICAgICAgICAgICAgICAgKDEyKQojZGVmaW5lIEJNQTI1MF9SQU5HRV9N QVggICAgICAgICAgICAgICAgKDQpCiNkZWZpbmUgQk1BMjUwX1JBTkdFX01BU0sgICAgICAgICAg ICAgICAoMHhGMCkKCiNkZWZpbmUgQk1BMjUwX0JXXzdfODFIWiAgICAgICAgKDB4MDgpCiNkZWZp bmUgQk1BMjUwX0JXXzE1XzYzSFogICAgICAgKDB4MDkpCiNkZWZpbmUgQk1BMjUwX0JXXzMxXzI1 SFogICAgICAgKDB4MEEpCiNkZWZpbmUgQk1BMjUwX0JXXzYyXzUwSFogICAgICAgKDB4MEIpCiNk ZWZpbmUgQk1BMjUwX0JXXzEyNUhaICAgICAgICAgKDB4MEMpCiNkZWZpbmUgQk1BMjUwX0JXXzI1 MEhaICAgICAgICAgKDB4MEQpCiNkZWZpbmUgQk1BMjUwX0JXXzUwMEhaICAgICAgICAgKDB4MEUp CiNkZWZpbmUgQk1BMjUwX0JXXzEwMDBIWiAgICAgICAgKDB4MEYpCiNkZWZpbmUgQk1BMjUwX01B WF9CV19TSVpFICAgICAgKDgpCiNkZWZpbmUgQk1BMjUwX0JXX1JFR19NQVNLICAgICAgKDB4RTAp CgovKiAgICAgIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCiNkZWZpbmUgQk1BMjUwX1hfQVhJU19M U0JfUkVHICAgICAgICAgICAgICAgICAgICgweDAyKQojZGVmaW5lIEJNQTI1MF9SQU5HRV9TRUxf UkVHICAgICAgICAgICAgICAgICAgICAoMHgwRikKI2RlZmluZSBCTUEyNTBfQldfU0VMX1JFRyAg ICAgICAgICAgICAgICAgICAgICAgKDB4MTApCiNkZWZpbmUgQk1BMjUwX01PREVfQ1RSTF9SRUcg ICAgICAgICAgICAgICAgICAgICgweDExKQoKLyogbW9kZSBzZXR0aW5ncyAqLwojZGVmaW5lIEJN QTI1MF9NT0RFX05PUk1BTCAgICAgICgwKQojZGVmaW5lIEJNQTI1MF9NT0RFX0xPV1BPV0VSICAg ICgxKQojZGVmaW5lIEJNQTI1MF9NT0RFX1NVU1BFTkQgICAgICgyKQojZGVmaW5lIEJNQTI1MF9N T0RFX01BWCAgICAgICAgICgzKQojZGVmaW5lIEJNQTI1MF9NT0RFX01BU0sgICAgICAgICgweDNG KQojZGVmaW5lIEJNQTI1MF9CSVRfU1VTUEVORCAgICAgKDB4ODApCiNkZWZpbmUgQk1BMjUwX0JJ VF9MUCAgICAgICAgICAoMHg0MCkKCnN0cnVjdCBibWFfcHJvcGVydHkgewoJaW50IHJhbmdlOwoJ aW50IGJhbmR3aWR0aDsKCWludCBtb2RlOwp9OwoKc3RhdGljIHN0cnVjdCBibWFfcHJvcGVydHkg Ym1hX3N0YXRpY19wcm9wZXJ0eSA9IHsKCS5yYW5nZSA9IEJNQTI1MF9SQU5HRV9TRVQsCgkuYmFu ZHdpZHRoID0gQk1BMjUwX0JXX1NFVCwKCS5tb2RlID0gQk1BMjUwX01PREVfU1VTUEVORAp9OwoK c3RhdGljIGludCBibWEyNTBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAq c3QsIHVuc2lnbmVkIGNoYXIgQlcpCnsKCWludCByZXMgPSAwOwoJdW5zaWduZWQgY2hhciBkYXRh OwoJaW50IEJhbmR3aWR0aCA9IDA7CglpZiAoQlcgPj0gQk1BMjUwX01BWF9CV19TSVpFKQoJCXJl dHVybiAtMTsKCXN3aXRjaCAoQlcpIHsKCWNhc2UgMDoKCQlCYW5kd2lkdGggPSBCTUEyNTBfQldf N184MUhaOwoJCWJyZWFrOwoJY2FzZSAxOgoJCUJhbmR3aWR0aCA9IEJNQTI1MF9CV18xNV82M0ha OwoJCWJyZWFrOwoJY2FzZSAyOgoJCUJhbmR3aWR0aCA9IEJNQTI1MF9CV18zMV8yNUhaOwoJCWJy ZWFrOwoJY2FzZSAzOgoJCUJhbmR3aWR0aCA9IEJNQTI1MF9CV182Ml81MEhaOwoJCWJyZWFrOwoJ Y2FzZSA0OgoJCUJhbmR3aWR0aCA9IEJNQTI1MF9CV18xMjVIWjsKCQlicmVhazsKCWNhc2UgNToK CQlCYW5kd2lkdGggPSBCTUEyNTBfQldfMjUwSFo7CgkJYnJlYWs7CgljYXNlIDY6CgkJQmFuZHdp ZHRoID0gQk1BMjUwX0JXXzUwMEhaOwoJCWJyZWFrOwoJY2FzZSA3OgoJCUJhbmR3aWR0aCA9IEJN QTI1MF9CV18xMDAwSFo7CgkJYnJlYWs7CglkZWZhdWx0OgoJCWJyZWFrOwoJfQoJcmVzID0gaW52 X3NlY29uZGFyeV9yZWFkKEJNQTI1MF9CV19TRUxfUkVHLCAxLCAmZGF0YSk7CglpZiAocmVzKQoJ CXJldHVybiByZXM7CglkYXRhICY9IEJNQTI1MF9CV19SRUdfTUFTSzsKCWRhdGEgfD0gQmFuZHdp ZHRoOwoJcmVzID0gaW52X3NlY29uZGFyeV93cml0ZShCTUEyNTBfQldfU0VMX1JFRywgZGF0YSk7 CglyZXR1cm4gcmVzOwp9CgpzdGF0aWMgaW50IGJtYTI1MF9zZXRfcmFuZ2Uoc3RydWN0IGludl9n eXJvX3N0YXRlX3MgKnN0LCB1bnNpZ25lZCBjaGFyIFJhbmdlKQp7CglpbnQgcmVzID0gMDsKCXVu c2lnbmVkIGNoYXIgb3JpZywgZGF0YSA9IDA7CglpZiAoUmFuZ2UgPj0gQk1BMjUwX1JBTkdFX01B WCkKCQlyZXR1cm4gLTE7Cglzd2l0Y2ggKFJhbmdlKSB7CgljYXNlIDA6CgkJZGF0YSAgPSBCTUEy NTBfUkFOR0VfMkc7CgkJYnJlYWs7CgljYXNlIDE6CgkJZGF0YSAgPSBCTUEyNTBfUkFOR0VfNEc7 CgkJYnJlYWs7CgljYXNlIDI6CgkJZGF0YSAgPSBCTUEyNTBfUkFOR0VfOEc7CgkJYnJlYWs7Cglj YXNlIDM6CgkJZGF0YSAgPSBCTUEyNTBfUkFOR0VfMTZHOwoJCWJyZWFrOwoJZGVmYXVsdDoKCQli cmVhazsKCX0KCXJlcyA9IGludl9zZWNvbmRhcnlfcmVhZChCTUEyNTBfUkFOR0VfU0VMX1JFRywg MSwgJm9yaWcpOwoJaWYgKHJlcykKCQlyZXR1cm4gcmVzOwoJb3JpZyAmPSBCTUEyNTBfUkFOR0Vf TUFTSzsKCWRhdGEgfD0gb3JpZzsKCXJlcyA9IGludl9zZWNvbmRhcnlfd3JpdGUoQk1BMjUwX1JB TkdFX1NFTF9SRUcsIGRhdGEpOwoJYm1hX3N0YXRpY19wcm9wZXJ0eS5yYW5nZSA9IFJhbmdlOwoJ cmV0dXJuIHJlczsKfQoKc3RhdGljIGludCBzZXR1cF9zbGF2ZV9ibWEyNTAoc3RydWN0IGludl9n eXJvX3N0YXRlX3MgKnN0KQp7CglpbnQgcmVzdWx0OwoJdW5zaWduZWQgY2hhciBkYXRhWzJdOwoJ cmVzdWx0ID0gc2V0XzMwNTBfYnlwYXNzKHN0LCAxKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJl c3VsdDsKCS8qcmVhZCBzZWNvbmRhcnkgaTJjIElEIHJlZ2lzdGVyICovCglyZXN1bHQgPSBpbnZf c2Vjb25kYXJ5X3JlYWQoMCwgMSwgZGF0YSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7 CglpZiAoQk1BMjUwX0NISVBfSUQgIT0gZGF0YVswXSkKCQlyZXR1cm4gcmVzdWx0OwoJcmVzdWx0 ID0gc2V0XzMwNTBfYnlwYXNzKHN0LCAwKTsKCWlmIChyZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsK CS8qQVVYKGFjY2VsKSwgc2xhdmUgYWRkcmVzcyBpcyBzZXQgaW5zaWRlIHNldF8zMDUwX2J5cGFz cyovCgkvKiBibWEyNTAgeCBheGlzIExTQiByZWdpc3RlciBhZGRyZXNzIGlzIDIgKi8KCXJlc3Vs dCA9IGludl9pMmNfc2luZ2xlX3dyaXRlKHN0LCBSRUdfMzA1MF9BVVhfQlNUX0FERFIsCgkJCQkJ Qk1BMjUwX1hfQVhJU19MU0JfUkVHKTsKCXJldHVybiByZXN1bHQ7Cn0KCnN0YXRpYyBpbnQgYm1h MjUwX3NldF9tb2RlKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCwgdW5zaWduZWQgY2hhciBN b2RlKQp7CglpbnQgcmVzID0gMDsKCXVuc2lnbmVkIGNoYXIgZGF0YSA9IDA7CgoJaWYgKE1vZGUg Pj0gQk1BMjUwX1JBTkdFX01BU0spCgkJcmV0dXJuIC0xOwoJcmVzID0gaW52X3NlY29uZGFyeV9y ZWFkKEJNQTI1MF9NT0RFX0NUUkxfUkVHLCAxLCAmZGF0YSk7CglpZiAocmVzKQoJCXJldHVybiBy ZXM7CglkYXRhICY9IEJNQTI1MF9NT0RFX01BU0s7Cglzd2l0Y2ggKE1vZGUpIHsKCWNhc2UgQk1B MjUwX01PREVfTk9STUFMOgoJCWJyZWFrOwoJY2FzZSBCTUEyNTBfTU9ERV9MT1dQT1dFUjoKCQlk YXRhIHw9IEJNQTI1MF9CSVRfTFA7CgkJYnJlYWs7CgljYXNlIEJNQTI1MF9NT0RFX1NVU1BFTkQ6 CgkJZGF0YSB8PSBCTUEyNTBfQklUX1NVU1BFTkQ7CgkJYnJlYWs7CglkZWZhdWx0OgoJCWJyZWFr OwoJfQoJcmVzID0gaW52X3NlY29uZGFyeV93cml0ZShCTUEyNTBfTU9ERV9DVFJMX1JFRywgZGF0 YSk7CglibWFfc3RhdGljX3Byb3BlcnR5Lm1vZGUgPSBNb2RlOwoJcmV0dXJuIHJlczsKfQpzdGF0 aWMgaW50IHN1c3BlbmRfc2xhdmVfYm1hMjUwKHN0cnVjdCBpbnZfZ3lyb19zdGF0ZV9zICpzdCkK ewoJaW50IHJlc3VsdDsKCWlmIChibWFfc3RhdGljX3Byb3BlcnR5Lm1vZGUgPT0gQk1BMjUwX01P REVfU1VTUEVORCkKCQlyZXR1cm4gMDsKCS8qc2V0IHRvIGJ5cGFzcyBtb2RlICovCglyZXN1bHQg PSBzZXRfMzA1MF9ieXBhc3Moc3QsIDEpOwoJaWYgKHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoJ Ym1hMjUwX3NldF9tb2RlKHN0LCBCTUEyNTBfTU9ERV9TVVNQRU5EKTsKCS8qIG5vIG5lZWQgdG8g cmVjb3ZlciB0byBub24tYnlwYXNzIG1vZGUgYmVjYXVzZSB3ZSBuZWVkIGl0IG5vdyAqLwoJcmV0 dXJuIHJlc3VsdDsKfQpzdGF0aWMgaW50IHJlc3VtZV9zbGF2ZV9ibWEyNTAoc3RydWN0IGludl9n eXJvX3N0YXRlX3MgKnN0KQp7CglpbnQgcmVzdWx0OwoJaWYgKGJtYV9zdGF0aWNfcHJvcGVydHku bW9kZSA9PSBCTUEyNTBfTU9ERV9OT1JNQUwpCgkJcmV0dXJuIDA7CgkvKnNldCB0byBieXBhc3Mg bW9kZSAqLwoJcmVzdWx0ID0gc2V0XzMwNTBfYnlwYXNzKHN0LCAxKTsKCWlmIChyZXN1bHQpCgkJ cmV0dXJuIHJlc3VsdDsKCWJtYTI1MF9zZXRfbW9kZShzdCwgQk1BMjUwX01PREVfTk9STUFMKTsK CS8qIHJlY292ZXIgYnlwYXNzIG1vZGUgKi8KCXJlc3VsdCA9IHNldF8zMDUwX2J5cGFzcyhzdCwg MCk7CglyZXR1cm4gcmVzdWx0Owp9CnN0YXRpYyBpbnQgY29tYmluZV9kYXRhX3NsYXZlX2JtYTI1 MCh1bnNpZ25lZCBjaGFyICppbiwgc2hvcnQgKm91dCkKewoJb3V0WzBdID0gbGUxNl90b19jcHVw KChfX2xlMTYgKikoJmluWzBdKSk7CglvdXRbMV0gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKSgm aW5bMl0pKTsKCW91dFsyXSA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKCZpbls0XSkpOwoJcmV0 dXJuIDA7Cn0Kc3RhdGljIGludCBnZXRfbW9kZV9zbGF2ZV9ibWEyNTAoc3RydWN0IGludl9neXJv X3N0YXRlX3MgKnN0KQp7CglpZiAoYm1hX3N0YXRpY19wcm9wZXJ0eS5tb2RlID09IEJNQTI1MF9N T0RFX1NVU1BFTkQpCgkJcmV0dXJuIDA7CgllbHNlIGlmIChibWFfc3RhdGljX3Byb3BlcnR5Lm1v ZGUgPT0gQk1BMjUwX01PREVfTk9STUFMKQoJCXJldHVybiAxOwoJcmV0dXJuIC0xOwp9OwovKioK ICogIHNldF9scGZfYm1hMjUwKCkgLSBzZXQgbHBmIHZhbHVlCiAqLwoKc3RhdGljIGludCBzZXRf bHBmX2JtYTI1MChzdHJ1Y3QgaW52X2d5cm9fc3RhdGVfcyAqc3QsIGludCByYXRlKQp7Cgljb25z dCBzaG9ydCBoeltdID0gezEwMDAsIDUwMCwgMjUwLCAxMjUsIDYyLCAzMSwgMTUsIDd9OwoJY29u c3QgaW50ICAgZFtdID0gezcsIDYsIDUsIDQsIDMsIDIsIDEsIDB9OwoJaW50IGksIGgsIGRhdGEs IHJlc3VsdDsKCWggPSAocmF0ZSA+PiAxKTsKCWkgPSAwOwoJd2hpbGUgKChoIDwgaHpbaV0pICYm IChpIDwgQVJSQVlfU0laRShoeikpKQoJCWkrKzsKCWlmIChpID09IEFSUkFZX1NJWkUoaHopKQoJ CWkgLT0gMTsKCWRhdGEgPSBkW2ldOwoKCXJlc3VsdCA9IHNldF8zMDUwX2J5cGFzcyhzdCwgMSk7 CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglyZXN1bHQgPSBibWEyNTBfc2V0X2JhbmR3 aWR0aChzdCwgKHVuc2lnbmVkIGNoYXIpIGRhdGEpOwoJcmVzdWx0IHw9IHNldF8zMDUwX2J5cGFz cyhzdCwgMCk7CgoJcmV0dXJuIHJlc3VsdDsKfQovKioKICogIHNldF9mc19ibWEyNTAoKSAtIHNl dCByYW5nZSB2YWx1ZQogKi8KCnN0YXRpYyBpbnQgc2V0X2ZzX2JtYTI1MChzdHJ1Y3QgaW52X2d5 cm9fc3RhdGVfcyAqc3QsIGludCBmcykKewoJaW50IHJlc3VsdDsKCXJlc3VsdCA9IHNldF8zMDUw X2J5cGFzcyhzdCwgMSk7CglpZiAocmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CglyZXN1bHQgPSBi bWEyNTBfc2V0X3JhbmdlKHN0LCAodW5zaWduZWQgY2hhcikgZnMpOwoJcmVzdWx0IHw9IHNldF8z MDUwX2J5cGFzcyhzdCwgMCk7CglpZiAocmVzdWx0KQoJCXJldHVybiAtRUlOVkFMOwoJcmV0dXJu IHJlc3VsdDsKfQoKc3RhdGljIHN0cnVjdCBpbnZfbXB1X3NsYXZlIHNsYXZlX2JtYTI1MCA9IHsK CS5zdXNwZW5kID0gc3VzcGVuZF9zbGF2ZV9ibWEyNTAsCgkucmVzdW1lICA9IHJlc3VtZV9zbGF2 ZV9ibWEyNTAsCgkuc2V0dXAgICA9IHNldHVwX3NsYXZlX2JtYTI1MCwKCS5jb21iaW5lX2RhdGEg PSBjb21iaW5lX2RhdGFfc2xhdmVfYm1hMjUwLAoJLmdldF9tb2RlID0gZ2V0X21vZGVfc2xhdmVf Ym1hMjUwLAoJLnNldF9scGYgPSBzZXRfbHBmX2JtYTI1MCwKCS5zZXRfZnMgID0gc2V0X2ZzX2Jt YTI1MAp9OwoKaW50IGludl9yZWdpc3Rlcl9ibWEyNTBfc2xhdmUoc3RydWN0IGludl9neXJvX3N0 YXRlX3MgKnN0KQp7CglzdC0+bXB1X3NsYXZlID0gJnNsYXZlX2JtYTI1MDsKCXJldHVybiAwOwp9 Ci8qKgogKiAgQH0KICovCgoAAAAAAAAAAAAAAAAAAAAAAAAAS2NvbmZpZwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDAwNTUz ADExNzUyNTQ2NzYwADAxMTAxNQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAB1c3RhciAgAGdnYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2dhbwAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjCiMgaW52LW1wdSBkcml2ZXJzIGZv ciBJbnZlbnNlbnNlIE1QVSBkZXZpY2VzIGFuZCBjb21ib3MKIwoKY29uZmlnIElOVl9NUFVfSUlP CiAgICB0cmlzdGF0ZSAiSW52ZW5zZW5zZSBNUFUgZGV2aWNlcyIKICAgIGRlcGVuZHMgb24gSTJD ICYmIFNZU0ZTICYmIElJTyAmJiBJSU9fU1dfUklORyAmJiBJSU9fVFJJR0dFUiAmJiAhSU5WX01Q VSAKICAgIGRlZmF1bHQgbgogICAgaGVscAogICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUg SW52ZW5zZW5zZSBNUFUgZGV2aWNlcy4KICAgICAgVGhpcyBkcml2ZXIgY2FuIGJlIGJ1aWx0IGFz IGEgbW9kdWxlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkCiAgICAgIGludi1tcHUtaWlvLgoA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJFQURNRQAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAyNjA3MgAx MTc1NDI0NTY3NwAwMTA0MDMAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAdXN0YXIgIABnZ2FvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdnYW8AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS2VybmVsIGRyaXZlciBpbnYtbXB1LWlp bwpBdXRob3I6IEludmVuc2Vuc2UgPGh0dHA6Ly9pbnZlbnNlbnNlLmNvbT4KCkRlc2NyaXB0aW9u Ci0tLS0tLS0tLS0tClRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byBpbnN0YWxsIHRoZSBJ bnZlbnNlbnNlIGRldmljZSBkcml2ZXIgaW50byBhCkxpbnV4IGtlcm5lbC4gQXQgdGhlIG1vbWVu dCwgdGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIElURzM1MDAvTVBVNjA1MC9NUFU5MTUwL01QVTMw NTAuIFRoZSBzbGF2ZQphZGRyZXNzIG9mIHRoZXNlIGZvdXIgY2hpcHMgYXJlIDB4NjguIEhvd2V2 ZXIsIHRoZSBhY3R1YWwgc2xhdmUgYWRkcmVzcyBkZXBlbmRzIG9uIHRoZSBib2FyZApjb25maWd1 cmF0aW9uLiBUaGUgZHJpdmVyIGRvZXMgbm90IGFzc3VtZSBhbnl0aGluZyBhYm91dCBpdC4KCkZp bGVzIGluY2x1ZGVkIGluIHRoaXMgcGFja2FnZToKS2NvbmZpZwpNYWtlZmlsZQppbnZfbXB1X2Nv cmUuYwppbnZfbXB1X21pc2MuYwppbnZfbXB1X3RyaWdnZXIuYwppbnZfbXB1MzA1MF9paW8uYwpp bnZfbXB1X2lpby5oCmludl9tcHVfcmluZy5jCmludl9zbGF2ZV9ibWEyNTAuYwpkbXBEZWZhdWx0 TVBVNjA1MC5jCmRtcGtleS5oCmRtcG1hcC5oCm1wdS5oCkluY2x1ZGluZyB0aGUgZHJpdmVyIGlu IHRoZSBMaW51eCBrZXJuZWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQptcHUuaCBzaG91bGQgYmUgYWRkZWQgdG8gImtlcm5lbC9pbmNsdWRlL2xpbnV4Ii4KT3RoZXIg ZmlsZXMgbGlzdGVkIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZHJpdmVycy9zdGFnaW5nL2lpby9p bXUvbXB1IGRpcmVjdG9yeSAob3IgYW5vdGhlcgpkaXJlY3Rvcnkgb2YgeW91ciBjaG9vc2luZyku IFdoZW4gYnVpbGRpbmcgdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIG5vdAphcHBlYXIgaW4g bWVudWNvbmZpZyB3aXRob3V0IG1vZGlmaWNhdGlvbnMgc2ltaWxhciB0byB0aG9zZSBiZWxvdzoK Cm1vZGlmeSAiZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvS2NvbmZpZyIgbGlrZQpzb3VyY2UgImRy aXZlcnMvc3RhZ2luZy9paW8vaW11L21wdS9LY29uZmlnIgoKbW9kaWZ5ICJkcml2ZXJzL3N0YWdp bmcvaWlvL2ltdS9NYWtlZmlsZSIKb2JqLXkgKz0gbXB1LwoKQm9hcmQgYW5kIFBsYXRmb3JtIERh dGEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhlIGJvYXJkIGZpbGUgbmVlZHMgdG8gYmUgbW9k aWZpZWQgdG8gcmVnaXN0ZXIgdGhlIGRldmljZSBvbiBhbiBJMkMgYnVzLiBBbgppMmNfYm9hcmRf aW5mbyBpbnN0YW5jZSBtdXN0IGJlIGRlZmluZWQgYXMgc2VlbiBiZWxvdy4gVGhlIGhhcmRjb2Rl ZCB2YWx1ZSBvZgoxNDAgY29ycmVzcG9uZHMgdG8gdGhlIEdQSU8gaW5wdXQgcGluIHdpcmVkIHRv IHRoZSBkZXZpY2UncyBpbnRlcnJ1cHQgcGluLgpUaGlzIHBpbiB3aWxsIG1vc3QgbGlrZWx5IGJl IGRpZmZlcmVudCBmb3IgeW91ciBwbGF0Zm9ybS4KcGxhdGZvcm0gZGF0YSBpcyBmb3Igb3JpZW50 YXRpb24gbWF0cml4LCAgYW5kIHNlY29uZGFyeSBidXMgc2l0dWF0aW9ucy4KRm9yIE1QVTkxNTAs IGl0IHJlZ2FyZGVkIGFzIGEgTVBVOTE1MCBhbmQgQUtNODk3NSBpbiB0aGUgc2Vjb25kYXJ5LgpT byB0aGUgc2Vjb25kYXJ5IGkyYyBhZGRyZXNzIG11c3QgYmUgZmlsbGVkLgotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGUg Ym9hcmQgZmlsZSBpcyBhcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYyBvcgpt b2RpZnkgdGhlIGJvYXJkIGZpbGUgaW4geW91ciBzeXN0ZW0gYXMgYmVsb3c6Ci0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZvciBBS004OTYz IGluIHRoZSBzZWNvbmRhcnkgaTJjIGJ1cyBvZiBNUFU2MDUwLApzdGF0aWMgc3RydWN0IG1wdV9w bGF0Zm9ybV9kYXRhIGd5cm9fcGxhdGZvcm1fZGF0YSA9IHsKCS5pbnRfY29uZmlnICA9IDB4MDAs CgkubGV2ZWxfc2hpZnRlciA9IDAsCgkub3JpZW50YXRpb24gPSB7ICAtMSwgIDAsICAwLAoJCQkg ICAwLCAgMSwgIDAsCgkJCSAgIDAsICAwLCAtMSB9LAoJLnNlY19zbGF2ZV90eXBlID0gU0VDT05E QVJZX1NMQVZFX1RZUEVfQ09NUEFTUywKCS5zZWNfc2xhdmVfaWQgICA9IENPTVBBU1NfSURfQUs4 OTYzLAoJLnNlY29uZGFyeV9pMmNfYWRkciA9IDB4MEUKfTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRm9yIE1QVTkxNTAsIHRoZSBz ZWNvbmRhcnkgaTJjIGJ1cyBhZGRyZXNzIG11c3QgYmUgZmlsbGVkIGFzIGJlbG93LgpzdGF0aWMg c3RydWN0IG1wdV9wbGF0Zm9ybV9kYXRhIGd5cm9fcGxhdGZvcm1fZGF0YSA9IHsKCS5pbnRfY29u ZmlnICA9IDB4MDAsCgkubGV2ZWxfc2hpZnRlciA9IDAsCgkub3JpZW50YXRpb24gPSB7ICAtMSwg IDAsICAwLAoJCQkgICAwLCAgMSwgIDAsCgkJCSAgIDAsICAwLCAtMSB9LAoJLnNlY19zbGF2ZV90 eXBlID0gU0VDT05EQVJZX1NMQVZFX1RZUEVfQ09NUEFTUywKCS5zZWNfc2xhdmVfaWQgICA9IENP TVBBU1NfSURfQUs4OTc1LAoJLnNlY29uZGFyeV9pMmNfYWRkciA9IDB4MEUKfTsKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZm9yIEJN QTI1MCBpbiB0aGUgc2Vjb25kYXJ5LCBwbGVhc2UgdXNlIHRoZSBwbGF0Zm9ybSBkYXRhIGFzOgpz dGF0aWMgc3RydWN0IG1wdV9wbGF0Zm9ybV9kYXRhIGd5cm9fcGxhdGZvcm1fZGF0YSA9IHsKCS5p bnRfY29uZmlnICA9IDB4MDAsCgkubGV2ZWxfc2hpZnRlciA9IDAsCgkub3JpZW50YXRpb24gPSB7 ICAtMSwgIDAsICAwLAoJCQkgICAwLCAgMSwgIDAsCgkJCSAgIDAsICAwLCAtMSB9LAoJLnNlY19z bGF2ZV90eXBlID0gU0VDT05EQVJZX1NMQVZFX1RZUEVfQUNDRUwsCgkuc2VjX3NsYXZlX2lkICAg PSBBQ0NFTF9JRF9CTUEyNTAsCgkuc2Vjb25kYXJ5X2kyY19hZGRyID0gMHgxOCwKfTsKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CnRoZSBpMmMgaW5pdCBkYXRhIGlzOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZvciBNUFUzMDUwLApzdGF0aWMgc3RydWN0 IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgc2luZ2xlX2NoaXBfYm9hcmRfaW5mb1tdID0gewoJ ewoJCUkyQ19CT0FSRF9JTkZPKCJtcHUzMDUwIiwgMHg2OCksCgkJLmlycSA9IChJSF9HUElPX0JB U0UgKyBNUFVJUlFfR1BJTyksCgkJLnBsYXRmb3JtX2RhdGEgPSAmZ3lyb19wbGF0Zm9ybV9kYXRh LAoJfSwKfTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpmb3IgSVRHMzUwMDoKc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5m byBfX2luaXRkYXRhIHNpbmdsZV9jaGlwX2JvYXJkX2luZm9bXSA9IHsKCXsKCQlJMkNfQk9BUkRf SU5GTygiaXRnMzUwMCIsIDB4NjgpLAoJCS5pcnEgPSAoSUhfR1BJT19CQVNFICsgTVBVSVJRX0dQ SU8pLAogICAgICAgICAgICAgICAgLnBsYXRmb3JtX2RhdGEgPSAmZ3lyb19wbGF0Zm9ybV9kYXRh LAoJfSwKfTsKZm9yIE1QVTYwNTAKc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRk YXRhIHNpbmdsZV9jaGlwX2JvYXJkX2luZm9bXSA9IHsKCXsKCQlJMkNfQk9BUkRfSU5GTygibXB1 NjA1MCIsIDB4NjgpLAoJCS5pcnEgPSAoSUhfR1BJT19CQVNFICsgTVBVSVJRX0dQSU8pLAoJCS5w bGF0Zm9ybV9kYXRhID0gJmd5cm9fcGxhdGZvcm1fZGF0YSwKCX0sCn07CmZvciBNUFU5MTUwCmFy Y2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDRwYW5kYS5jCnN0YXRpYyBzdHJ1Y3QgaTJjX2Jv YXJkX2luZm8gX19pbml0ZGF0YSBzaW5nbGVfY2hpcF9ib2FyZF9pbmZvW10gPSB7Cgl7CgkJSTJD X0JPQVJEX0lORk8oIm1wdTkxNTAiLCAweDY4KSwKCQkuaXJxID0gKElIX0dQSU9fQkFTRSArIE1Q VUlSUV9HUElPKSwKCQkucGxhdGZvcm1fZGF0YSA9ICZneXJvX3BsYXRmb3JtX2RhdGEsCgl9LAp9 OwoKSW4gdGhlIF9pMmNfaW5pdCBmdW5jdGlvbiwgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkIGlu IHRoZSBmb2xsb3dpbmcgbWFubmVyOgoKYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBh bmRhLmMKICAgIGluIHN0YXRpYyBpbnQgX19pbml0IG9tYXA0X3BhbmRhX2kyY19pbml0KHZvaWQp Cm9tYXBfcmVnaXN0ZXJfaTJjX2J1cyg0LCA0MDAsIHNpbmdsZV9jaGlwX2JvYXJkX2luZm8sIEFS UkFZX1NJWkUoc2luZ2xlX2NoaXBfYm9hcmRfaW5mbykpOwoKSUlPIHN1YnN5c3RlbQotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1Y2Nlc3NmdWwgaW5zdGFs bGF0aW9uIHdpbGwgY3JlYXRlIHR3byBkaXJlY3RvcmllcyB1bmRlciAvc3lzL2J1cy9paW8vZGV2 aWNlcwppaW86ZGV2aWNlMAp0cmlnZ2VyMApVbmRlciAvZGV2LyBkaXJldG9yeSwgYSBmaWxlICJp aW86ZGV2aWNlMCIgd2lsbCBhbHNvIGJlIGNyZWF0ZWQob3IgaWlvOmRldmljZVgsIGlmCnlvdSBo YXZlIG1vcmUgdGhhbiBvbmUgaWlvIGRldmljZXMpLgpDb21tdW5pY2F0aW5nIHdpdGggdGhlIGRy aXZlciBpbiB1c2Vyc3BhY2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tClVwb24gaW5zdGFsbGF0aW9uLCB0aGUgZHJpdmVyIGdlbmVyYXRlcyBzZXZlcmFsIGZpbGVz IGluIHN5c2ZzLiBJZiB5b3VyCnBsYXRmb3JtIGlzIGNvbmZpZ3VyZWQgYXMgZGV0YWlsZWQgYWJv dmUsIG5hdmlnYXRlIHRvIHRoZSBmb2xsb3dpbmcgcGF0aCB0bwpmaW5kIHRoZXNlIGZpbGVzOgov c3lzL2J1cy9paW8vZGV2aWNlcy9paW86ZGV2aWNlMAoKVGhlIGxpc3QgYmVsb3cgcHJvdmlkZXMg YSBicmllZiBkZXNjcmlwdGlvbiBmb3IgZWFjaCBmaWxlLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpGb3IgSVRHMzUwMDoKdGVtcGVyYXR1cmUgKFJlYWQtb25seSkKUmVh ZCB0ZW1wZXJhdHVyZSBkYXRhIGRpcmVjdGx5IGZyb20gdGhlIHRlbXBlcmF0dXJlIHJlZ2lzdGVy LgoKc2FtcGxpbmdfZnJlcXVlbmN5IChSZWFkL3dyaXRlKQpDb25maWd1cmUgdGhlIEFEQyBzYW1w bGluZyByYXRlIGFuZCBGSUZPIG91dHB1dCByYXRlLgoKc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWls YWJsZShyZWFkLW9ubHkpCnNob3cgY29tbW9ubHkgdXNlZCBmcmVxdWVuY3kKCmNsb2NrX3NvdXJj ZSAoUmVhZC1vbmx5KQpDaGVjayB3aGljaCBjbG9jay1zb3VyY2UgaXMgdXNlZCBieSB0aGUgY2hp cC4KCnBvd2VyX3N0YXRlIChSZWFkL3dyaXRlKQp0dXJuIG9uL29mZiB0aGUgcG93ZXIgc3VwcGx5 CgpzZWxmX3Rlc3QgKHJlYWQtb25seSkKcmVhZCB0aGlzIGVudHJ5IHRyaWdnZXIgc2VsZiB0ZXN0 LiBUaGUgcmV0dXJuIHZhbHVlIGlzIEQuCkQgaXMgdGhlIHN1Y2Nlc3MvZmFpbC4KRm9yIGRpZmZl cmVudCBjaGlwLCB0aGUgcmVzdWx0IGlzIGRpZmZlcmVudCBmb3Igc3VjY2Vzcy9mYWlsLgoxIG1l YW5zIHN1Y2Nlc3MgMCBtZWFucyBmYWlsLiBUaGUgTFNCIG9mIEQgaXMgZm9yIGd5cm87IHRoZSBi aXQKbmV4dCB0byBMU0Igb2YgRCBpcyBmb3IgYWNjZWwuIFRoZSBiaXQgMiBvZiBEIGlzIGZvciBj b21wYXNzIHJlc3VsdC4KCmtleSAocmVhZC1vbmx5KQpzaG93IHRoZSBrZXkgdmFsdWUgb2YgdGhp cyBkcml2ZXIuIFVzZWQgYnkgTVBMLgoKZ3lyb19tYXRyaXggKHJlYWQtb25seSkKc2hvdyB0aGUg b3JpZW50IG1hdHJpeCBvYnRhaW5lZCBmcm9tIGJvYXJkIGZpbGUuCgotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZvciBNUFU2MDUw OgpNUFU2MDUwIGhhcyBhbGwgdGhlIHN5c2ZzIGZpbGVzIHRoYXQgSVRHMzUwMCBoYXMuIEl0IGhh cyBhZGRpdGlvbmFsIGZpbGVzIGxpc3QgYmVsb3c6CgpneXJvX2VuYWJsZSAocmVhZC93cml0ZSkK ZW5hYmxlL2Rpc2FibGUgZ3lybyBmdW5jdGlvbmFsaXR5LiBhZmZlY3QgcmF3X2d5cm8uIHR1cm4g b2ZmIHRoaXMgd2lsbCBzaHV0IGRvd24gZ3lybyBhbmQgc2F2ZSBwb3dlci4KCmFjY2xfZW5hYmxl IChyZWFkL3dyaXRlKQplbmFibGUvZGlzYWJsZSBhY2NlbGVyb21ldGVyIGZ1bmN0aW9uYWxpdHku IGFmZmVjdCByYXdfYWNjbC4gdHVybiBvZmYgdGhpcyB3aWxsIHNodXQgZG93biBhY2NlbCBhbmQg c2F2ZSBwb3dlci4KCmZpcm13YXJlX2xvYWRlZCAocmVhZC93cml0ZSkKRmxhZyBpbmRpY2F0ZSB0 aGUgd2hldGhlciBmaXJtd2FyZSBpcyBsb2FkZWQgb3Igbm90IGluIHRoZSBETVAgZW5naW5lLiAw IG1lYW5zIG5vIGZpcm13YXJlIGxvYWRlZC4KMSBtZWFucyBmaXJtd2FyZSBpcyBhbHJlYWR5IGxv YWRlZCAuIFRoaXMgZmxhZyBjYW4gb25seSBiZSB3cml0dGVuIGFzIDAuIDEgaXMgdXBkYXRlZApp bnRlcm5hbGx5LgoKZG1wX29uKHJlYWQvd3JpdGUpClRoaXMgZW50cnkgY29udHJvbHMgd2hldGhl ciB0byBydW4gRE1QIG9yIG5vdC4gVG8gZW5hYmxlIERNUCAsIGZpcm13YXJlX2xvYWRlZCBtdXN0 IGJlIDEuIHdyaXRlIDEgdG8gZW5hYmxlCkRNUCBhbmQgd3JpdGUgMCB0byBkaXNhYmxlIGRtcC4g CgpkbXBfZmlybXdhcmUgKHdyaXRlIG9ubHkgYmluYXJ5IGZpbGUpClRoaXMgaXMgdGhlIGVudHJ5 IHRoYXQgZmlybXdhcmUgY29kZSBpcyBsb2FkZWQgaW50by4gSWYgdGhlIGFjdGlvbiBpcyBzdWNj ZWZ1bCwgZmlybXdhcmVfbG9hZGVkIHdpbGwKYmUgdXBkYXRlZCBhcyAxLiBJbiBvcmRlciB0byBs b2FkIG5ldyBmaXJtd2FyZSwgZmlybXdhcmVfbG9hZGVkIGZsYWcgc2hvdWxkIGJlIHNldCAwLgoK bHBhX21vZGUocmVhZC13cml0ZSkKTG93IHBvd2VyICBhY2NlbGVyb21ldGVyIG1vZGUKbHBhX2Zy ZXEocmVhZC13cml0ZSkKbG93IHBvd2VyIGFjY2VsZXJvbXRlciBmcmVxdWVuY3kuCgphY2NlbF9t YXRyaXgKb3JpZW50IG1hdHJpeCBmb3IgYWNjZWwKCmZsaWNrX2xvd2VyLApmbGlja191cHBlciwK ZmxpY2tfY291bnRlciwKZmxpY2tfbWVzc2FnZV9vbiwKZmxpY2tfaW50X29uLApmbGlja19heGlz LApGbGljayByZWxhdGVkIGVudHJ5CgpwZWRvbWV0ZXJfdGltZQpwZWRvbWV0ZXJfc3RlcHMsClBl ZG9tZXRlciByZWxhdGVkIGVudHJ5CgpldmVudF9mbGljawpldmVudF90YXAKZXZlbnRfb3JpZW50 YXRpb24KZXZlbnQgcmVsYXRlZCBlbnRyeQoKdGFwX29uCmNvbnRyb2wgdGFwIGZ1bmN0aW9uIG9m IERNUAoKdGFwX3RpbWUKdGFwX21pbl9jb3VudAp0YXBfdGhyZXNob2xkCnRhcCByZWxhdGVkIGVu dHJpZXMuIGNvbnRyb2wgdmFyaW91cyBwYXJhbWV0ZXJzIG9mIHRhcCBmdW5jdGlvbi4KCm9yaWVu dGF0aW9uX29uCnR1cm4gb24vb2ZmIG9yaWVudGF0aW9uIGZ1bmN0aW9uIG9mIERNUC4KLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpmb3IgTVBVOTE1MCBhbmQgc2Vjb25kYXJ5IGNvbXBhc3MKTVBVOTE1MCBoYXMgZXZlcnkg ZW50cnkgTVBVNjA1MCBoYXMuIEl0IGhhcyBhZGRpdGlvbmFsIGVudHJpZXM6Cgpjb21wYXNzX2Vu YWJsZSAocmVhZC93cml0ZSkKZW5hYmxlIHRoaXMgd2lsbCBlbmFibGUgY29tcGFzcyBmdW5jdGlv bi4gCgpjb21wYXNzX21hdHJpeCAocmVhZC1vbmx5KQpjb21wYXNzIG9yaWVudCBtYXRyaXgKLS0t LS0tLS0tLS0tLS0tLS0tLS0tCmZvciBNUFUzMDUwIGFuZCBzZWNvbmRhcnkgYWNjZWxlcm9tZXRl cihvbmx5IEJNQTI1MCBpcyBzdXBwb3J0ZWQgcmlnaHQgbm93KQpJdCBoYXMgZXZlcnkgZW50cnkg SVRHMzUwMCBoYXMgYW5kIGhhcyB0d28gYWRkaW9udGFsIGVudHJpZXMuCmFjY2xfbWF0cml4CmFj Y2xfZW5hYmxlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbG93IHBvd2VyIGFjY2VsZXJvbWV0 ZXIgbW9kZQpMb3dlciBwb3dlciBhY2NlbGVyb21ldGVyIG1vZGUgaXMgYSBzcGVjaWFsIG1vZGUu IEl0IHdvcmtzIG9ubHkgZm9yIGFjY2VsZXJvbWV0ZXIuCkl0IGhhcyB0d28gZW50cmllcywgbHBh X21vZGUgYW5kIGxwYV9mcmVxLiBPbmx5IE1QVTYwNTAgYW5kIE1QVTkxNTAgaGFzIHRoaXMgbW9k ZS4KVG8gcnVuIGxvdyBwb3dlciBhY2NlbCBtb2RlLCBzZXQgbHBhX21vZGUgdG8gMSwgc2V0IGxw YV9mcmVxIHRvIDB+Mywgd2hpY2ggY29ycmVzcG9uZHMKdG8gMS4yNUh6LCA1SHosIDIwSHosIDQw SHouICJneXJvX2VuYWJsZSIgYW5kICJjb21wYXNzX2VuYWJsZSIgbXVzdCBiZSB6ZXJvLiAiZG1w X29uIgptdXN0IGJlIHplcm8uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRtcCBldmVudC4K ZG1wIGV2ZW50IGlzIGV2ZW50IG91dCBieSB0aGUgRE1QIHVuaXQgaW5zaWRlIE1QVS4gT25seSBN UFU2MDUwIGFuZCBNUFU5MTUwIHN1cHBvcnRzIHRoaXMuClRoZXJlIGFyZSB0aHJlZSBzeXNmcyBl bnRyZWlzLCBkbXBfZmxpY2ssIGRtcF90YXAgYW5kIGRtcF9vcmllbnRhdGlvbi4gVGhlc2UgdGhy ZWUgZXZlbnRzIG11c3QKYmUgcG9sbGVkIGJlZm9yZSByZWFkLiBUaGUgcHJvcGVyIG1ldGhvZCB0 byBwb2xsIHN5c2ZzIGlzOgoxLiBvcGVuIGZpbGUuCjIuIGR1bW15IHJlYWQuCjMuIHBvbGwuCjQu IG9uY2UgdGhlIHBvbGwgcGFzc2VkLCB1c2UgZm9wZW4gYW5kIGZyZWFkIHRvIHJlYWQgdGhlIHN5 c2ZzIGVudHJ5Lgo1LiBpbnRlcnByZXQgdGhlIGRhdGEuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJ ZiBzdHJlYW1pbmcgdG8gYSB1c2Vyc3BhY2UgYXBwbGljYXRpb24sIHRoZSByZWNvbW1lbmRlZCB3 YXkgdG8gYWNjZXNzIGd5cm8vYWNjZWwvY29tcGFzcwpkYXRhIGlzIHZpYSAvZGV2L2lpbzpkZXZp Y2UwLiBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gZ2V0IGNvbnN0YW50IHJlYWRpbmdzIGZyb20KdGhl IGRyaXZlcjoKCjEuIFdyaXRlIGEgMSB0byBwb3dlcl9zdGF0ZSB0byB0dXJuIG9uIHRoZSBjaGlw LiBUaGlzIGlzIHRoZSBkZWZhdWx0IHNldHRpbmcKICAgYWZ0ZXIgaW5zdGFsbGluZyB0aGUgZHJp dmVyLgoyLiBXcml0ZSB0aGUgZGVzaXJlZCBvdXRwdXQgcmF0ZSB0byBmaWZvX3JhdGUuCjMuIHdy aXRlIDEgdG8gZW5hYmxlIHRvIHR1cm4gb24gdGhlIGV2ZW50Lgo0LiBSZWFkIC9kZXYvaWlvOmRl dmljZTAgdG8gZ2V0IGEgc3RyaW5nIG9mIGd5cm8vYWNjZWwvY29tcGFzcyBkYXRhLgo1LiBQYXJz ZSB0aGlzIHN0cmluZyB0byBvYnRhaW4gZWFjaCBneXJvL2FjY2VsL2NvbXBhc3MgZWxlbWVudC4K Ni4gSWYgZG1wIGZpcm13YXJlIGNvZGUgaXMgbG9hZGVkLCB1c2luZyAiZG1wX29uIiB0byBlbmFi bGUvZGlzYWJsZSBkbXAgLgo3LiBJZiBjb21wYXNzIGlzIGVuYWJsZWQsIG91dHB1dCB3aWxsIGhh dmUgY29tcGFzcyBkYXRhLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICBS ZWNvbW1lbmRlZCBzeXNmcyBlbnRyeSBzZXR1cCBzZW5xdWVuY2UKMS4gd2l0aG91dCBETVAgZmly bXdhcmUKMS4xIHNldCAicG93ZXJfc3RhdGUiIHRvIDEsCjEuMiBjaGFuZ2Ugc2NhbGUgYW5kIGZp Zm8gcmF0ZSB2YWx1ZSB0byB5b3VyIG5lZWQuCjEuMyBjaGFuZ2UgZ3lyb19lbmFibGUgYW5kIGFj Y2xlX2VuYWJsZSBhbmQgY29tcGFzc19lbmFibGUgdG8geW91ciBuZWVkcy4gRm9yIGV4YW1wbGUs CmlmIHlvdSB3YW50IGd5cm8gb25seSwgc2V0IGFjY2xfZW5hYmxlIHRvIDAgb3Igc2V0IGFjY2xf ZW5hYmxlIHRvIHplcm8gYW5kIGNvbXBhc3NfZW5hYmxlIHRvIHplcm8uCklmIHlvdSB3YW50IGFj Y2VsIG9ubHksIHNldCBneXJvX2VuYWJsZSB0byAwIG9yIHNldCBneXJvX2VuYWJsZSB0byB6ZXJv IGFuZCBjb21wYXNzX2VuYWJsZSB0byB6ZXJvLgpJZiB5b3Ugd2FudCBjb21wYXNzIG9ubHksIGRp c2FibGUgZ3lybyBhbmQgYWNjZWwuCjEuNCBzZXQgImVuYWJsZSIgdG8gMS4geW91IHdpbGwgZ2V0 IG91dHB1dCB5b3Ugd2FudC4KCjIuIFdpdGggRE1QIGZpcm13YXJlCjIuMSBzZXQgInBvd2VyX3N0 YXRlIiB0byAxLAoyLjIgd3JpdGUgIjAiIHRvIGZpcm13YXJlX2xvYWRlZCBpZiBpdCBpcyBub3Qg emVybyBhbHJlYWR5LgoyLjMgbG9hZCBmaXJtd2FyZSBpbnRvICJkbXBfZmlybXdhcmUiIGFzIGEg d2hvbGUuIERvbid0IHNwbGl0IHRoZSBETVAgZmlybXdhcmUgaW1hZ2UuCjIuNCBtYWtlIHN1cmUg ZmlybXdhcmVfbG9hZGVkIGlzIDEgYWZ0ZXIgbG9hZGluZy4KMi41IG1ha2Ugb3RoZXIgY29uZmln dXJhdGlvbnMgc2ltaWxhciB0byB0aGUgc2l0dWF0aW9uIGFzIHdpdGhvdXQgRE1QIGZpcm13YXJl LgoyLjYgc2V0IGRtcF9vbiB0byAxLgoyLjcgc2V0ICJlbmFibGUiIHRvIDEuCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGVuYWJsZSBm dW5jdGlvbiBpcyB1c2luZyBlbmFibGUgZW50cnkgdW5kZXIgIi9zeXMvYnVzL2lpby9kZXZpY2Vz L2lpbzpkZXZpY2UwL2J1ZmZlciIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQp0ZXN0IGFwcGxpY2F0aW9uczoKVGVzdCBhcHBsaWNhdGlv biBpcyB1bmRlciBBUlRIUk9QT0QvdHJ1bmsvc29mdHdhcmUvc2ltcGxlX2FwcHMvbXB1X2lpbwot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVG8gcnVuIHdpdGggTVBV OTE1MC9NUFU2MDUwOgp1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CmZvciBvcmllbnRhdGlv bi90YXAvZmxpY2sgZXZlbnQ6Cm1wdV9paW8gIC1jIDEwIC1sIDMgLXAgCmZvciBub3JtYWwgZGF0 YSBwcmludAptcHVfaWlvICAtYyAxMCAtbCAzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KVG8gcnVuIHdpdGggTVBVMzA1MC9JVEczNTAwOgptcHVfaWlvIC1jIDEwIC1s IDMgLXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUGxlYXNlIHVz ZSBtcHVfaWlvLmMgYW5kIGlpb191dGlscy5oIGFzIHRoZSBzYW1wbGUgY29kZSBmb3IgeW91ciBk ZXZlbG9wbWVudC4KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAE1ha2VmaWxlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAw NjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAwMDc2NQAxMTc1MjU0Njc2MAAwMTExNTcAIDAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABnZ2FvAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdnYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAIwojIE1ha2VmaWxlIGZvciBJbnZlbnNlbnNlIGludi1tcHUtaWlvIGRldmljZS4K IwoKb2JqLSQoQ09ORklHX0lOVl9NUFVfSUlPKSArPSBpbnYtbXB1LWlpby5vCgppbnYtbXB1LWlp by1vYmpzIDo9IGludl9tcHVfY29yZS5vCmludi1tcHUtaWlvLW9ianMgKz0gaW52X21wdV9yaW5n Lm8KaW52LW1wdS1paW8tb2JqcyArPSBpbnZfbXB1X3RyaWdnZXIubwppbnYtbXB1LWlpby1vYmpz ICs9IGludl9tcHVfbWlzYy5vCmludi1tcHUtaWlvLW9ianMgKz0gaW52X21wdTMwNTBfaWlvLm8K aW52LW1wdS1paW8tb2JqcyArPSBkbXBEZWZhdWx0TVBVNjA1MC5vCgojIHRoZSBCb3NjaCBCTUEy NTAgZHJpdmVyIGlzIGFkZGVkIHRvIHRoZSBpbnYtbXB1IGRldmljZSBkcml2ZXIgYmVjYXVzZSBp dAojIG11c3QgYmUgY29ubmVjdGVkIHRvIGFuIE1QVTMwNTAgZGV2aWNlIG9uIHRoZSBzZWNvbmRh cnkgc2xhdmUgYnVzLgppbnYtbXB1LWlpby1vYmpzICs9IGludl9zbGF2ZV9ibWEyNTAubwoKAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= --f46d043893f9ce256104c003a257--