From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1N3Tnu-0005VI-Tz for qemu-devel@nongnu.org; Thu, 29 Oct 2009 08:08:34 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1N3Tnq-0005U9-B4 for qemu-devel@nongnu.org; Thu, 29 Oct 2009 08:08:34 -0400 Received: from [199.232.76.173] (port=40218 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1N3Tnq-0005U6-60 for qemu-devel@nongnu.org; Thu, 29 Oct 2009 08:08:30 -0400 Received: from ra.coresystems.de ([80.81.252.129]:60216) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1N3Tno-00064n-PT for qemu-devel@nongnu.org; Thu, 29 Oct 2009 08:08:29 -0400 Received: from dslb-088-066-018-094.pools.arcor-ip.net ([88.66.18.94] helo=MacPro.fritz.box) by ra.coresystems.de with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.69) (envelope-from ) id 1N3Tnj-0002s7-Ji for qemu-devel@nongnu.org; Thu, 29 Oct 2009 13:08:26 +0100 Message-ID: <4AE985B6.5080605@coresystems.de> Date: Thu, 29 Oct 2009 13:08:22 +0100 From: Stefan Reinauer MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040104070002020902050901" Subject: [Qemu-devel] SerialICE - Qemu based (x86) firmware debugger List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------040104070002020902050901 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dear x86 hardware and low-level software developers and enthusiasts! It’s been a while, and we’ve been working on a new version of SerialICE. After some intermediate steps that were shared among developers, coresystems GmbH is glad to finally release SerialICE 1.4, our "Integrated Circuit Emulator over Serial". SerialICE (http://www.serialice.com) is a BIOS/Firmware debugging tool. It allows you to run and observe BIOS images (such as coreboot®: http://www.coreboot.org/) written for real hardware in Qemu (http://www.qemu.org) for debugging purposes. Thanks to Qemu's compelling feature set, it's also possible to debug this BIOS code with GNU GDB. SerialICE consists of three parts: - a serial console "rom shell" compiled with romcc, with minimal footprint. - a patch to Qemu 0.11.0, which adds a new "SerialICE" machine. - a LUA script that contains filters, loggers and other SerialICE specific configuration and adaption. SerialICE can be downloaded from http://www.serialice.com/. The patch against Qemu 0.11.0 is attached to this mail for review. With "qemu -m serialice -serialice /dev/ttyS0 -L path-to-your-bios.bin-dir -hda /dev/zero" you can run an arbitrary BIOS binary written for your target hardware in Qemu, thus logging all IO and memory accesses. Those operations will additionally be transmitted to the target system's shell and are executed there, while their results are submitted back to Qemu. Operations sent to the target: - memory reads/writes (some of them) - IO reads/writes - MSR reads/writes - CPUID calls (the bios code path might rely on this) Note: The code is still quite experimental and only supports a few number of mainboard out of the box, but it was already useful in some debugging scenarios we had and was able to reveil information that would normally only be available with a hardware debugger of the price of a new car. Don't expect SerialICE to completely replace a ICE/JTAG/ITP device, but it might just work for your case, as it did for us. The ROM code needs minimal board/chipset specific setup in order to establish serial communication with Qemu. See mainboard/* for a few examples. This release contains setup code for 7 mainboards. Also, some hardware accesses have to be caught in the LUA code (scripts/serialice.lua) in order to prevent the system from locking up (ie. when the BIOS is disabling the serial console). Among the new features: - Completely scriptable filtering and logging with LUA and bitlib. - Kconfig/Kbuild support (make menuconfig) - New mainboards supported: Intel D945GCLF, ASUS M2V-MX SE, MSI MS6178, Thomson IP1000, Dell PowerEdge s1850, RCA RM4100 - Patch against latest Qemu version 0.11.0. - Support for compiling with XMMSTACK and ROMCC. - Many bugs fixed: serial communication, data corruption by signed/unsigned casts, ... Known issues: - microcode updates from within emulated ROM code will fail. - some rarely used calls of cpuid and rdmsr/wrmsr might not give the correct information Special thanks go to Daniel Liu, Rudolf Marek, Ron Minnich, Joe Smith, Uwe Hermann and Mark Marshall for their bug fixes and contributions to this release. See http://www.serialice.com/ for more information. Comments and patches are of course very welcome! Best regards, Stefan Reinauer -- coresystems GmbH • Brahmsstr. 16 • D-79104 Freiburg i. Br. Tel.: +49 761 7668825 • Fax: +49 761 7664613 Email: info@coresystems.de • http://www.coresystems.de/ Registergericht: Amtsgericht Freiburg • HRB 7656 Geschäftsführer: Stefan Reinauer • Ust-IdNr.: DE245674866 --------------040104070002020902050901 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="serialice-qemu-0.11.0.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="serialice-qemu-0.11.0.diff" ClFFTVUgMC4xMS4wIFNlcmlhbElDRSBwYXRjaAoKQWRkcyBTZXJpYWxJQ0UgZmlybXdhcmUg ZGVidWdnZXIgc3VwcG9ydCB0byBRZW11LgoKU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJlaW5h dWVyIDxzdGVwYW5AY29yZXN5c3RlbXMuZGU+CgogTWFrZWZpbGUgICAgICAgICAgICAgICAg fCAgICA0IAogTWFrZWZpbGUudGFyZ2V0ICAgICAgICAgfCAgICA3IAogYnVpbGQuc2ggICAg ICAgICAgICAgICAgfCAgICA1IAogY29uZmlndXJlICAgICAgICAgICAgICAgfCAgIDQ1ICsr CiBleGVjLWFsbC5oICAgICAgICAgICAgICB8ICAgIDQgCiBody9wYy5jICAgICAgICAgICAg ICAgICB8ICAgNDMgKysKIHFlbXUtY2hhci5jICAgICAgICAgICAgIHwgICAgNCAKIHFlbXUt b3B0aW9ucy5oeCAgICAgICAgIHwgICAxMSAKIHNlcmlhbGljZS5jICAgICAgICAgICAgIHwg IDgzMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNlcmlhbGljZS5oICAgICAgICAgICAgIHwgICA0MiArKwogc29mdG1tdV90ZW1wbGF0ZS5o ICAgICAgfCAgIDI4ICsKIHRhcmdldC1pMzg2L29wX2hlbHBlci5jIHwgICA2MiArKysKIHZs LmMgICAgICAgICAgICAgICAgICAgIHwgICAgOCAKIDEzIGZpbGVzIGNoYW5nZWQsIDEwOTEg aW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCi0tLSBxZW11LTAuMTEuMC9zZXJpYWxp Y2UuYworKysgcWVtdS0wLjExLjAvc2VyaWFsaWNlLmMKQEAgLTAsMCArMSw4MzAgQEAKKy8q CisgKiBRRU1VIFBDIFN5c3RlbSBFbXVsYXRvcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAw OSBjb3Jlc3lzdGVtcyBHbWJICisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICog b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAq IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICovCisKKy8qIFN5c3RlbSBpbmNs dWRlcyAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j bHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5n Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVk ZSA8c3lzL2lvY3RsLmg+CisKKy8qIExVQSBpbmNsdWRlcyAqLworI2luY2x1ZGUgPGx1YS5o PgorI2luY2x1ZGUgPGxhdXhsaWIuaD4KKyNpbmNsdWRlIDxsdWFsaWIuaD4KKworLyogTG9j YWwgaW5jbHVkZXMgKi8KKyNpbmNsdWRlICJody9ody5oIgorI2luY2x1ZGUgImh3L3BjLmgi CisjaW5jbHVkZSAic2VyaWFsaWNlLmgiCisjaW5jbHVkZSAic3lzZW11LmgiCisKKyNkZWZp bmUgU0VSSUFMSUNFX0RFQlVHIDMKKyNkZWZpbmUgQlVGRkVSX1NJWkUgMTAyNAordHlwZWRl ZiBzdHJ1Y3QgeworCWludCBmZDsKKwljaGFyICpidWZmZXI7Cit9IFNlcmlhbElDRVN0YXRl OworCitzdGF0aWMgU2VyaWFsSUNFU3RhdGUgKnM7CisKK2ludCBzZXJpYWxpY2VfYWN0aXZl ID0gMDsKK2NvbnN0IGNoYXIgKnNlcmlhbGljZV9sdWFfc2NyaXB0PSJzZXJpYWxpY2UubHVh IjsKKworc3RhdGljIHN0cnVjdCB0ZXJtaW9zIG9wdGlvbnM7CisKK3N0YXRpYyBsdWFfU3Rh dGUgKkw7CisKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBMVUEgc2NyaXB0aW5nIGlu dGVyZmFjZSBhbmQgY2FsbGJhY2tzCisKK3N0YXRpYyBpbnQgc2VyaWFsaWNlX3JlZ2lzdGVy X3BoeXNpY2FsKGx1YV9TdGF0ZSAqbHVhc3RhdGUpCit7CisJaW50IG4gPSBsdWFfZ2V0dG9w KGx1YXN0YXRlKTsKKwl1aW50MzJfdCBhZGRyLCBzaXplOworCXJhbV9hZGRyX3QgcGh5czsK KworCWlmIChuICE9IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm90IGNhbGxl ZCBhcyBTZXJpYWxJQ0VfcmVnaXN0ZXJfcGh5c2ljYWwoPGFkZHI+IDxzaXplPilcbiIpOwor CQlyZXR1cm4gMDsKKwl9CisKKwlhZGRyID0gbHVhX3RvaW50ZWdlcihsdWFzdGF0ZSwgMSk7 CisJc2l6ZSA9IGx1YV90b2ludGVnZXIobHVhc3RhdGUsIDIpOworCisJcHJpbnRmKCJSZWdp c3RlcmluZyBwaHlzaWNhbCBtZW1vcnkgYXQgMHglMDh4ICgweCUwOHggYnl0ZXMpXG4iLCBh ZGRyLCBzaXplKTsKKwlwaHlzID0gcWVtdV9yYW1fYWxsb2Moc2l6ZSk7CisJY3B1X3JlZ2lz dGVyX3BoeXNpY2FsX21lbW9yeShhZGRyLCBzaXplLCBwaHlzKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHNlcmlhbGljZV9sdWFfaW5pdCh2b2lkKQoreworICAgIGludCBz dGF0dXM7CisKKyAgICAvKiBDcmVhdGUgYSBMVUEgY29udGV4dCBhbmQgbG9hZCBMVUEgbGli cmFyaWVzICovCisgICAgTCA9IGx1YUxfbmV3c3RhdGUoKTsKKyAgICBsdWFMX29wZW5saWJz KEwpOworCisgICAgLyogUmVnaXN0ZXIgQyBmdW5jdGlvbiBjYWxsYmFja3MgKi8KKyAgICBs dWFfcmVnaXN0ZXIoTCwgIlNlcmlhbElDRV9yZWdpc3Rlcl9waHlzaWNhbCIsIHNlcmlhbGlj ZV9yZWdpc3Rlcl9waHlzaWNhbCk7CisKKyAgICAvKiBMb2FkIHRoZSBzY3JpcHQgZmlsZSAq LworICAgIHN0YXR1cyA9IGx1YUxfbG9hZGZpbGUoTCwgc2VyaWFsaWNlX2x1YV9zY3JpcHQp OworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4n dCBsb2FkIFNlcmlhbElDRSBzY3JpcHQ6ICVzXG4iLCBsdWFfdG9zdHJpbmcoTCwgLTEpKTsK KyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICAvKiBBc2sgTHVhIHRvIHJ1biBvdXIg bGl0dGxlIHNjcmlwdCAqLworICAgIHN0YXR1cyA9IGx1YV9wY2FsbChMLCAwLCAxLCAwKTsK KyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRv IHJ1biBzY3JpcHQ6ICVzXG4iLCBsdWFfdG9zdHJpbmcoTCwgLTEpKTsKKyAgICAgICAgZXhp dCgxKTsKKyAgICB9CisgICAgbHVhX3BvcChMLCAxKTsKKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IHNlcmlhbGljZV9sdWFfZXhpdCh2b2lkKQoreworICAgICAgICBsdWFf Y2xvc2UoTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsaWNlX2lvX3Jl YWRfZmlsdGVyKHVpbnQzMl90ICpkYXRhLCB1aW50MTZfdCBwb3J0LCBpbnQgc2l6ZSkKK3sK KyAgICBpbnQgcmV0LCByZXN1bHQ7CisKKyAgICBsdWFfZ2V0ZmllbGQoTCwgTFVBX0dMT0JB TFNJTkRFWCwgIlNlcmlhbElDRV9pb19yZWFkX2ZpbHRlciIpOworICAgIGx1YV9wdXNoaW50 ZWdlcihMLCBwb3J0KTsgLy8gcG9ydAorICAgIGx1YV9wdXNoaW50ZWdlcihMLCBzaXplKTsg Ly8gZGF0YXNpemUKKyAgICByZXN1bHQgPSBsdWFfcGNhbGwoTCwgMiwgMiwgMCk7CisgICAg aWYgKHJlc3VsdCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBydW4g ZnVuY3Rpb24gU2VyaWFsSUNFX2lvX3JlYWRfZmlsdGVyOiAlc1xuIiwgbHVhX3Rvc3RyaW5n KEwsIC0xKSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgICpkYXRhID0gbHVhX3Rv aW50ZWdlcihMLCAtMSk7CisgICAgcmV0ID0gbHVhX3RvYm9vbGVhbihMLCAtMik7CisgICAg bHVhX3BvcChMLCAyKTsKKworICAgIHJldHVybiByZXQ7Cit9IAorCitzdGF0aWMgaW50IHNl cmlhbGljZV9pb193cml0ZV9maWx0ZXIodWludDMyX3QgZGF0YSwgdWludDE2X3QgcG9ydCwg aW50IHNpemUpCit7CisgICAgaW50IHJldCwgcmVzdWx0OworCisgICAgbHVhX2dldGZpZWxk KEwsIExVQV9HTE9CQUxTSU5ERVgsICJTZXJpYWxJQ0VfaW9fd3JpdGVfZmlsdGVyIik7Cisg ICAgbHVhX3B1c2hpbnRlZ2VyKEwsIHBvcnQpOyAvLyBwb3J0CisgICAgbHVhX3B1c2hpbnRl Z2VyKEwsIHNpemUpOyAvLyBkYXRhc2l6ZQorICAgIGx1YV9wdXNoaW50ZWdlcihMLCBkYXRh KTsgLy8gZGF0YQorICAgIHJlc3VsdCA9IGx1YV9wY2FsbChMLCAzLCAxLCAwKTsKKyAgICBp ZiAocmVzdWx0KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJ1biBm dW5jdGlvbiBTZXJpYWxJQ0VfaW9fd3JpdGVfZmlsdGVyOiAlc1xuIiwgbHVhX3Rvc3RyaW5n KEwsIC0xKSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHJldCA9IGx1YV90b2Jv b2xlYW4oTCwgLTEpOworICAgIGx1YV9wb3AoTCwgMSk7CisKKyAgICByZXR1cm4gcmV0Owor fSAKKworc3RhdGljIGludCBzZXJpYWxpY2VfbWVtb3J5X3JlYWRfZmlsdGVyKHVpbnQzMl90 IGFkZHIsIGludCBzaXplKQoreworICAgIGludCByZXQsIHJlc3VsdDsKKworICAgIGx1YV9n ZXRmaWVsZChMLCBMVUFfR0xPQkFMU0lOREVYLCAiU2VyaWFsSUNFX21lbW9yeV9yZWFkX2Zp bHRlciIpOworICAgIGx1YV9wdXNoaW50ZWdlcihMLCBhZGRyKTsgLy8gYWRkcgorICAgIGx1 YV9wdXNoaW50ZWdlcihMLCBzaXplKTsgLy8gZGF0YXNpemUKKyAgICByZXN1bHQgPSBsdWFf cGNhbGwoTCwgMiwgMSwgMCk7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIkZhaWxlZCB0byBydW4gZnVuY3Rpb24gU2VyaWFsSUNFX21lbW9yeV9yZWFk X2ZpbHRlcjogJXNcbiIsIGx1YV90b3N0cmluZyhMLCAtMSkpOworICAgICAgICBleGl0KDEp OworICAgIH0KKyAgICByZXQgPSBsdWFfdG9ib29sZWFuKEwsIC0xKTsKKyAgICBsdWFfcG9w KEwsIDEpOworCisgICAgcmV0dXJuIHJldDsKK30gCisKKyNkZWZpbmUgV1JJVEVfVE9fUUVN VQkJKDEgPDwgMCkKKyNkZWZpbmUgV1JJVEVfVE9fU0VSSUFMSUNFCSgxIDw8IDEpCisKK3N0 YXRpYyBpbnQgc2VyaWFsaWNlX21lbW9yeV93cml0ZV9maWx0ZXIodWludDMyX3QgYWRkciwg aW50IHNpemUpCit7CisgICAgaW50IHJldCA9IDAsIHJlc3VsdDsKKyAgICBpbnQgd3JpdGVf dG9fcWVtdSwgd3JpdGVfdG9fc2VyaWFsaWNlOworCisgICAgbHVhX2dldGZpZWxkKEwsIExV QV9HTE9CQUxTSU5ERVgsICJTZXJpYWxJQ0VfbWVtb3J5X3dyaXRlX2ZpbHRlciIpOworICAg IGx1YV9wdXNoaW50ZWdlcihMLCBhZGRyKTsgLy8gYWRkcmVzcworICAgIGx1YV9wdXNoaW50 ZWdlcihMLCBzaXplKTsgLy8gZGF0YXNpemUKKyAgICByZXN1bHQgPSBsdWFfcGNhbGwoTCwg MiwgMiwgMCk7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IkZhaWxlZCB0byBydW4gZnVuY3Rpb24gU2VyaWFsSUNFX21lbW9yeV93cml0ZV9maWx0ZXI6 ICVzXG4iLCBsdWFfdG9zdHJpbmcoTCwgLTEpKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9 CisgICAgd3JpdGVfdG9fcWVtdSA9IGx1YV90b2Jvb2xlYW4oTCwgLTEpOworICAgIHdyaXRl X3RvX3NlcmlhbGljZSA9IGx1YV90b2Jvb2xlYW4oTCwgLTIpOworICAgIGx1YV9wb3AoTCwg Mik7CisKKyAgICAvLyB1Z2x5CisgICAgaWYgKHdyaXRlX3RvX3FlbXUpIHJldCB8PSBXUklU RV9UT19RRU1VOworICAgIGlmICh3cml0ZV90b19zZXJpYWxpY2UpIHJldCB8PSBXUklURV9U T19TRVJJQUxJQ0U7CisKKyAgICByZXR1cm4gcmV0OworfSAKKworI2RlZmluZSBGSUxURVJf UkVBRAkwCisjZGVmaW5lIEZJTFRFUl9XUklURQkxCisKK3N0YXRpYyBpbnQgc2VyaWFsaWNl X21zcl9maWx0ZXIoaW50IGZsYWdzLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCAqaGksIHVp bnQzMl90ICpsbykKK3sKKyAgICBpbnQgcmV0LCByZXN1bHQ7CisKKyAgICBpZiAoZmxhZ3Mg JiBGSUxURVJfV1JJVEUpCisgICAgCWx1YV9nZXRmaWVsZChMLCBMVUFfR0xPQkFMU0lOREVY LCAiU2VyaWFsSUNFX21zcl93cml0ZV9maWx0ZXIiKTsKKyAgICBlbHNlCisgICAgCWx1YV9n ZXRmaWVsZChMLCBMVUFfR0xPQkFMU0lOREVYLCAiU2VyaWFsSUNFX21zcl9yZWFkX2ZpbHRl ciIpOworCisgICAgbHVhX3B1c2hpbnRlZ2VyKEwsIGFkZHIpOyAvLyBwb3J0CisgICAgbHVh X3B1c2hpbnRlZ2VyKEwsICpoaSk7ICAvLyBoaWdoCisgICAgbHVhX3B1c2hpbnRlZ2VyKEws ICpsbyk7ICAvLyBsb3cKKyAgICByZXN1bHQgPSBsdWFfcGNhbGwoTCwgMywgMywgMCk7Cisg ICAgaWYgKHJlc3VsdCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBy dW4gZnVuY3Rpb24gU2VyaWFsSUNFX21zcl9yZWFkX2ZpbHRlcjogJXNcbiIsIGx1YV90b3N0 cmluZyhMLCAtMSkpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICByZXQgPSBsdWFf dG9ib29sZWFuKEwsIC0zKTsKKyAgICBpZiAocmV0KSB7CisgICAgIAkqaGkgPSBsdWFfdG9p bnRlZ2VyKEwsIC0xKTsKKyAgICAJKmxvID0gbHVhX3RvaW50ZWdlcihMLCAtMik7CisgICAg fQorICAgIGx1YV9wb3AoTCwgMyk7CisKKyAgICByZXR1cm4gcmV0OworfSAKKworc3RhdGlj IGludCBzZXJpYWxpY2VfY3B1aWRfZmlsdGVyKGNwdWlkX3JlZ3NfdCAqcmVncykKK3sKKyAg ICBpbnQgcmV0LCByZXN1bHQ7CisKKyAgICBsdWFfZ2V0ZmllbGQoTCwgTFVBX0dMT0JBTFNJ TkRFWCwgIlNlcmlhbElDRV9jcHVpZF9maWx0ZXIiKTsKKworICAgIGx1YV9wdXNoaW50ZWdl cihMLCByZWdzLT5lYXgpOyAvLyBlYXgKKyAgICBsdWFfcHVzaGludGVnZXIoTCwgcmVncy0+ ZWN4KTsgLy8gZWN4CisgICAgcmVzdWx0ID0gbHVhX3BjYWxsKEwsIDIsIDUsIDApOworICAg IGlmIChyZXN1bHQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcnVu IGZ1bmN0aW9uIFNlcmlhbElDRV9tc3JfcmVhZF9maWx0ZXI6ICVzXG4iLCBsdWFfdG9zdHJp bmcoTCwgLTEpKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICByZXQgPSBsdWFf dG9ib29sZWFuKEwsIC01KTsKKyAgICBpZiAocmV0KSB7CisgICAgCXJlZ3MtPmVheCA9IGx1 YV90b2ludGVnZXIoTCwgLTEpOworICAgIAlyZWdzLT5lYnggPSBsdWFfdG9pbnRlZ2VyKEws IC0yKTsKKyAgICAJcmVncy0+ZWN4ID0gbHVhX3RvaW50ZWdlcihMLCAtMyk7CisgICAgCXJl Z3MtPmVkeCA9IGx1YV90b2ludGVnZXIoTCwgLTQpOworICAgIH0KKyAgICBsdWFfcG9wKEws IDUpOworCisgICAgcmV0dXJuIHJldDsKK30gCisKKworLyogU2VyaWFsSUNFIG91dHB1dCBs b2dnZXJzICovCisKKyNkZWZpbmUgTE9HX0lPCQkwCisjZGVmaW5lIExPR19NRU1PUlkJMQor I2RlZmluZSBMT0dfUkVBRAkwCisjZGVmaW5lIExPR19XUklURQkyCisvLyB0aGVzZSB0d28g YXJlIHNlcGFyYXRlCisjZGVmaW5lIExPR19RRU1VCTQKKyNkZWZpbmUgTE9HX1RBUkdFVAk4 CisKK3N0YXRpYyB2b2lkIHNlcmlhbGljZV9sb2coaW50IGZsYWdzLCB1aW50MzJfdCBkYXRh LCB1aW50MzJfdCBhZGRyLCBpbnQgc2l6ZSkKK3sKKyAgICBpbnQgcmVzdWx0OworCisgICAg aWYgKChmbGFncyAmIExPR19XUklURSkgJiYgKGZsYWdzICYgTE9HX01FTU9SWSkpCisgICAg CWx1YV9nZXRmaWVsZChMLCBMVUFfR0xPQkFMU0lOREVYLCAiU2VyaWFsSUNFX21lbW9yeV93 cml0ZV9sb2ciKTsKKyAgICBlbHNlIGlmICghKGZsYWdzICYgTE9HX1dSSVRFKSAmJiAoZmxh Z3MgJiBMT0dfTUVNT1JZKSkKKyAgICAJbHVhX2dldGZpZWxkKEwsIExVQV9HTE9CQUxTSU5E RVgsICJTZXJpYWxJQ0VfbWVtb3J5X3JlYWRfbG9nIik7CisgICAgZWxzZSBpZiAoKGZsYWdz ICYgTE9HX1dSSVRFKSAmJiAhKGZsYWdzICYgTE9HX01FTU9SWSkpCisgICAgCWx1YV9nZXRm aWVsZChMLCBMVUFfR0xPQkFMU0lOREVYLCAiU2VyaWFsSUNFX2lvX3dyaXRlX2xvZyIpOwor ICAgIGVsc2UgLy8gaWYgKCEoZmxhZ3MgJiBMT0dfV1JJVEUpICYmICEoZmxhZ3MgJiBMT0df TUVNT1JZKSkKKyAgICAJbHVhX2dldGZpZWxkKEwsIExVQV9HTE9CQUxTSU5ERVgsICJTZXJp YWxJQ0VfaW9fcmVhZF9sb2ciKTsKKworICAgIGx1YV9wdXNoaW50ZWdlcihMLCBhZGRyKTsg Ly8gYWRkci9wb3J0CisgICAgbHVhX3B1c2hpbnRlZ2VyKEwsIHNpemUpOyAvLyBkYXRhc2l6 ZQorICAgIGx1YV9wdXNoaW50ZWdlcihMLCBkYXRhKTsgLy8gZGF0YQorICAgIHJlc3VsdCA9 IGx1YV9wY2FsbChMLCAzLCAwLCAwKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIGZw cmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJ1biBmdW5jdGlvbiBTZXJpYWxJQ0VfJXNfJXNf bG9nOiAlc1xuIiwKKwkJCShmbGFncyAmIExPR19NRU1PUlkpPyJtZW1vcnkiOiJpbyIsIAor CQkJKGZsYWdzICYgTE9HX1dSSVRFKT8id3JpdGUiOiJyZWFkIiwKKwkJCWx1YV90b3N0cmlu ZyhMLCAtMSkpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIC8vIFRPRE8KKyNp ZiAwCisJaWYgKGNhdWdodCkgeworCQlwcmludGYoIiAqIik7CisJfQorCisJcHJpbnRmKCJc biIpOworI2VuZGlmCit9IAorCitzdGF0aWMgdm9pZCBzZXJpYWxpY2VfbXNyX2xvZyhpbnQg ZmxhZ3MsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IGhpLCB1aW50MzJfdCBsbywgaW50IGZp bHRlcmVkKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBpZiAoZmxhZ3MgJiBMT0dfV1JJ VEUpCisgICAgCWx1YV9nZXRmaWVsZChMLCBMVUFfR0xPQkFMU0lOREVYLCAiU2VyaWFsSUNF X21zcl93cml0ZV9sb2ciKTsKKyAgICBlbHNlIC8vIGlmICghKGZsYWdzICYgTE9HX1dSSVRF KSkKKyAgICAJbHVhX2dldGZpZWxkKEwsIExVQV9HTE9CQUxTSU5ERVgsICJTZXJpYWxJQ0Vf bXNyX3JlYWRfbG9nIik7CisKKyAgICBsdWFfcHVzaGludGVnZXIoTCwgYWRkcik7IC8vIGFk ZHIvcG9ydAorICAgIGx1YV9wdXNoaW50ZWdlcihMLCBoaSk7IC8vIGRhdGFzaXplCisgICAg bHVhX3B1c2hpbnRlZ2VyKEwsIGxvKTsgLy8gZGF0YQorICAgIGx1YV9wdXNoYm9vbGVhbihM LCBmaWx0ZXJlZCk7IC8vIGRhdGEKKyAgICByZXN1bHQgPSBsdWFfcGNhbGwoTCwgNCwgMCwg MCk7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxl ZCB0byBydW4gZnVuY3Rpb24gU2VyaWFsSUNFX21zcl8lc19sb2c6ICVzXG4iLAorCQkJKGZs YWdzICYgTE9HX1dSSVRFKT8id3JpdGUiOiJyZWFkIiwKKwkJCWx1YV90b3N0cmluZyhMLCAt MSkpOworICAgICAgICBleGl0KDEpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2VyaWFs aWNlX2NwdWlkX2xvZyh1aW50MzJfdCBlYXgsIHVpbnQzMl90IGVjeCwgY3B1aWRfcmVnc190 IHJlcywgaW50IGZpbHRlcmVkKQoreworICAgIGludCByZXN1bHQ7CisKKworICAgIGx1YV9n ZXRmaWVsZChMLCBMVUFfR0xPQkFMU0lOREVYLCAiU2VyaWFsSUNFX2NwdWlkX2xvZyIpOwor CisgICAgbHVhX3B1c2hpbnRlZ2VyKEwsIGVheCk7IC8vIGlucHV0OiBlYXgKKyAgICBsdWFf cHVzaGludGVnZXIoTCwgZWN4KTsgLy8gaW5wdXQ6IGVjeAorICAgIGx1YV9wdXNoaW50ZWdl cihMLCByZXMuZWF4KTsgLy8gb3V0cHV0OiBlYXgKKyAgICBsdWFfcHVzaGludGVnZXIoTCwg cmVzLmVieCk7IC8vIG91dHB1dDogZWJ4CisgICAgbHVhX3B1c2hpbnRlZ2VyKEwsIHJlcy5l Y3gpOyAvLyBvdXRwdXQ6IGVjeAorICAgIGx1YV9wdXNoaW50ZWdlcihMLCByZXMuZWR4KTsg Ly8gb3V0cHV0OiBlZHgKKyAgICBsdWFfcHVzaGJvb2xlYW4oTCwgZmlsdGVyZWQpOyAvLyBk YXRhCisgICAgcmVzdWx0ID0gbHVhX3BjYWxsKEwsIDcsIDAsIDApOworICAgIGlmIChyZXN1 bHQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcnVuIGZ1bmN0aW9u IFNlcmlhbElDRV9jcHVpZF9sb2c6ICVzXG4iLAorCQkJbHVhX3Rvc3RyaW5nKEwsIC0xKSk7 CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorfQorCisKKy8vICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisvLyBsb3cgbGV2ZWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBTZXJpYWxJQ0Ugc2hl bGwgKHNlcmlhbCBjb21tdW5pY2F0aW9uKQorCitzdGF0aWMgaW50IHNlcmlhbGljZV9yZWFk KGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgbmJ5dGUpCit7CisJaW50IGJ5dGVzX3JlYWQg PSAwOworCisJd2hpbGUgKDEpIHsKKwkJaW50IHJldCA9IHJlYWQoZmQsIGJ1ZiwgbmJ5dGUp OworCisJCWlmIChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpCisJCQljb250aW51ZTsK KworCQlpZiAocmV0ID09IC0xKQorCQkJYnJlYWs7CisKKwkJYnl0ZXNfcmVhZCArPSByZXQ7 CisJCWJ1ZiArPSByZXQ7CisKKwkJaWYgKGJ5dGVzX3JlYWQgPj0gKGludCluYnl0ZSkKKwkJ CWJyZWFrOworCX0KKworCXJldHVybiBieXRlc19yZWFkOworfQorCitzdGF0aWMgaW50IHNl cmlhbGljZV93cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlKQor eworCWNoYXIgKmJ1ZmZlciA9IChjaGFyICopIGJ1ZjsKKwljaGFyIGM7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgKGludCluYnl0ZTsgaSsrKSB7CisJCXdoaWxlICh3cml0ZShm ZCwgYnVmZmVyICsgaSwgMSkgIT0gMSkgOworCQl3aGlsZSAocmVhZChmZCwgJmMsIDEpICE9 IDEpIDsKKwkJaWYgKGMgIT0gYnVmZmVyW2ldKSB7CisJCQlwcmludGYoIlJlYWRiYWNrIGVy cm9yISAleC8leFxuIiwgYywgYnVmZmVyW2ldKTsKKwkJfQorCX0KKworCXJldHVybiBuYnl0 ZTsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsaWNlX2NvbW1hbmQoY29uc3QgY2hhciAqY29t bWFuZCwgaW50IHJlcGx5X2xlbikKK3sKKyNpZiBTRVJJQUxJQ0VfREVCVUcgPiA1CisJaW50 IGk7CisjZW5kaWYKKwlpbnQgbDsKKworCXNlcmlhbGljZV93cml0ZShzLT5mZCwgY29tbWFu ZCwgc3RybGVuKGNvbW1hbmQpKTsKKwkKKwltZW1zZXQocy0+YnVmZmVyLCAwLCByZXBseV9s ZW4gKyAxKTsgLy8gY2xlYXIgZW5vdWdoIG9mIHRoZSBidWZmZXIKKworCWwgPSBzZXJpYWxp Y2VfcmVhZChzLT5mZCwgcy0+YnVmZmVyLCByZXBseV9sZW4pOworCisJaWYgKGwgPT0gLTEp IHsKKwkJcGVycm9yKCJTZXJpYWxJQ0U6IENvdWxkIG5vdCByZWFkIGZyb20gdGFyZ2V0Iik7 CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGwgIT0gcmVwbHlfbGVuKSB7CisJCXByaW50Zigi U2VyaWFsSUNFOiBjb21tYW5kIHdhcyBub3QgYW5zd2VyZWQgc3VmZmljaWVudGx5OiAiCisJ CQkJIiglZC8lZCBieXRlcylcbiclcydcbiIsIGwsIHJlcGx5X2xlbiwgcy0+YnVmZmVyKTsK KwkJZXhpdCgxKTsKKwl9CisKKyNpZiBTRVJJQUxJQ0VfREVCVUcgPiA1CisJZm9yIChpPTA7 IGkgPCByZXBseV9sZW47IGkrKykKKwkJcHJpbnRmKCIlMDJ4ICIsIHMtPmJ1ZmZlcltpXSk7 CisJcHJpbnRmKCJcbiIpOworI2VuZGlmCit9CisKKworLy8gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKy8vIGhpZ2ggbGV2ZWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBTZXJpYWxJQ0Ugc2hl bGwKKwordWludDhfdCBzZXJpYWxpY2VfaW5iKHVpbnQxNl90IHBvcnQpCit7CisJdWludDhf dCByZXQ7CisJY2hhciBjb21tYW5kWzE2XTsKKworCXVpbnQzMl90IGRhdGE7CisJaWYgKHNl cmlhbGljZV9pb19yZWFkX2ZpbHRlcigmZGF0YSwgcG9ydCwgMSkpCisJCXJldHVybiBkYXRh ICYgMHhmZjsKKworCXNwcmludGYoY29tbWFuZCwgIipyaSUwNHguYiIsIHBvcnQpOworCS8v IGNvbW1hbmQgcmVhZCBiYWNrOiAiXG4wMFxuPiAiICg2IGNoYXJhY3RlcnMpCisJc2VyaWFs aWNlX2NvbW1hbmQoY29tbWFuZCwgNik7CisJcmV0ID0gKHVpbnQ4X3Qpc3RydG91bChzLT5i dWZmZXIgKyAxLCAoY2hhciAqKilOVUxMLCAxNik7CisKKwlzZXJpYWxpY2VfbG9nKExPR19S RUFEfExPR19JTywgcmV0LCBwb3J0LCAxKTsKKworCXJldHVybiByZXQ7Cit9CisKK3VpbnQx Nl90IHNlcmlhbGljZV9pbncodWludDE2X3QgcG9ydCkKK3sKKwl1aW50MTZfdCByZXQ7CisJ Y2hhciBjb21tYW5kWzE2XTsKKworCXVpbnQzMl90IGRhdGE7CisJaWYgKHNlcmlhbGljZV9p b19yZWFkX2ZpbHRlcigmZGF0YSwgcG9ydCwgMSkpCisJCXJldHVybiBkYXRhICYgMHhmZmZm OworCisJc3ByaW50Zihjb21tYW5kLCAiKnJpJTA0eC53IiwgcG9ydCk7CisJLy8gY29tbWFu ZCByZWFkIGJhY2s6ICJcbjAwMDBcbj4gIiAoOCBjaGFyYWN0ZXJzKQorCXNlcmlhbGljZV9j b21tYW5kKGNvbW1hbmQsIDgpOworCXJldCA9ICh1aW50MTZfdClzdHJ0b3VsKHMtPmJ1ZmZl ciArIDEsIChjaGFyICoqKU5VTEwsIDE2KTsKKworCXNlcmlhbGljZV9sb2coTE9HX1JFQUR8 TE9HX0lPLCByZXQsIHBvcnQsIDIpOworCisJcmV0dXJuIHJldDsKK30KKwordWludDMyX3Qg c2VyaWFsaWNlX2lubCh1aW50MTZfdCBwb3J0KQoreworCXVpbnQzMl90IHJldDsKKwljaGFy IGNvbW1hbmRbMTZdOworCisJdWludDMyX3QgZGF0YTsKKwlpZiAoc2VyaWFsaWNlX2lvX3Jl YWRfZmlsdGVyKCZkYXRhLCBwb3J0LCAxKSkKKwkJcmV0dXJuIGRhdGE7CisKKwlzcHJpbnRm KGNvbW1hbmQsICIqcmklMDR4LmwiLCBwb3J0KTsKKwkvLyBjb21tYW5kIHJlYWQgYmFjazog IlxuMDAwMDAwMDBcbj4gIiAoMTIgY2hhcmFjdGVycykKKwlzZXJpYWxpY2VfY29tbWFuZChj b21tYW5kLCAxMik7CisJcmV0ID0gKHVpbnQzMl90KXN0cnRvdWwocy0+YnVmZmVyICsgMSwg KGNoYXIgKiopTlVMTCwgMTYpOworCisJc2VyaWFsaWNlX2xvZyhMT0dfUkVBRHxMT0dfSU8s IHJldCwgcG9ydCwgNCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHNlcmlhbGljZV9v dXRiKHVpbnQ4X3QgZGF0YSwgdWludDE2X3QgcG9ydCkKK3sKKwljaGFyIGNvbW1hbmRbMTld OworCisJc2VyaWFsaWNlX2xvZyhMT0dfV1JJVEV8TE9HX0lPLCBkYXRhLCBwb3J0LCAxKTsK KworCWlmIChzZXJpYWxpY2VfaW9fd3JpdGVfZmlsdGVyKGRhdGEsIHBvcnQsIDEpKSB7CisJ CXJldHVybjsKKwl9CisKKwlzcHJpbnRmKGNvbW1hbmQsICIqd2klMDR4LmI9JTAyeCIsIHBv cnQsIGRhdGEpOworCS8vIGNvbW1hbmQgcmVhZCBiYWNrOiAiXG4+ICIgKDMgY2hhcmFjdGVy cykKKwlzZXJpYWxpY2VfY29tbWFuZChjb21tYW5kLCAzKTsKK30KKwordm9pZCBzZXJpYWxp Y2Vfb3V0dyh1aW50MTZfdCBkYXRhLCB1aW50MTZfdCBwb3J0KQoreworCWNoYXIgY29tbWFu ZFsyMV07CisKKwlzZXJpYWxpY2VfbG9nKExPR19XUklURXxMT0dfSU8sIGRhdGEsIHBvcnQs IDIpOworCisJaWYgKHNlcmlhbGljZV9pb193cml0ZV9maWx0ZXIoZGF0YSwgcG9ydCwgMikp IHsKKwkJcmV0dXJuOworCX0KKworCXNwcmludGYoY29tbWFuZCwgIip3aSUwNHgudz0lMDR4 IiwgcG9ydCwgZGF0YSk7CisJLy8gY29tbWFuZCByZWFkIGJhY2s6ICJcbj4gIiAoMyBjaGFy YWN0ZXJzKQorCXNlcmlhbGljZV9jb21tYW5kKGNvbW1hbmQsIDMpOworfQorCit2b2lkIHNl cmlhbGljZV9vdXRsKHVpbnQzMl90IGRhdGEsIHVpbnQxNl90IHBvcnQpCit7CisJY2hhciBj b21tYW5kWzI1XTsKKworCXNlcmlhbGljZV9sb2coTE9HX1dSSVRFfExPR19JTywgZGF0YSwg cG9ydCwgNCk7CisKKwlpZiAoc2VyaWFsaWNlX2lvX3dyaXRlX2ZpbHRlcihkYXRhLCBwb3J0 LCA0KSkgeworCQlyZXR1cm47CisJfQorCisJc3ByaW50Zihjb21tYW5kLCAiKndpJTA0eC5s PSUwOHgiLCBwb3J0LCBkYXRhKTsKKwkvLyBjb21tYW5kIHJlYWQgYmFjazogIlxuPiAiICgz IGNoYXJhY3RlcnMpCisJc2VyaWFsaWNlX2NvbW1hbmQoY29tbWFuZCwgMyk7Cit9CisKK3Vp bnQ4X3Qgc2VyaWFsaWNlX3JlYWRiKHVpbnQzMl90IGFkZHIpCit7CisJdWludDhfdCByZXQ7 CisJY2hhciBjb21tYW5kWzIwXTsKKwlzcHJpbnRmKGNvbW1hbmQsICIqcm0lMDh4LmIiLCBh ZGRyKTsKKwkvLyBjb21tYW5kIHJlYWQgYmFjazogIlxuMDBcbj4gIiAoNiBjaGFyYWN0ZXJz KQorCXNlcmlhbGljZV9jb21tYW5kKGNvbW1hbmQsIDYpOworCXJldCA9ICh1aW50OF90KXN0 cnRvdWwocy0+YnVmZmVyICsgMSwgKGNoYXIgKiopTlVMTCwgMTYpOworCXJldHVybiByZXQ7 Cit9CisKK3VpbnQxNl90IHNlcmlhbGljZV9yZWFkdyh1aW50MzJfdCBhZGRyKQoreworCXVp bnQxNl90IHJldDsKKwljaGFyIGNvbW1hbmRbMjBdOworCXNwcmludGYoY29tbWFuZCwgIipy bSUwOHgudyIsIGFkZHIpOworCS8vIGNvbW1hbmQgcmVhZCBiYWNrOiAiXG4wMDAwXG4+ICIg KDggY2hhcmFjdGVycykKKwlzZXJpYWxpY2VfY29tbWFuZChjb21tYW5kLCA4KTsKKwlyZXQg PSAodWludDE2X3Qpc3RydG91bChzLT5idWZmZXIgKyAxLCAoY2hhciAqKilOVUxMLCAxNik7 CisJcmV0dXJuIHJldDsKK30KKwordWludDMyX3Qgc2VyaWFsaWNlX3JlYWRsKHVpbnQzMl90 IGFkZHIpCit7CisJdWludDMyX3QgcmV0OworCWNoYXIgY29tbWFuZFsyMF07CisJc3ByaW50 Zihjb21tYW5kLCAiKnJtJTA4eC5sIiwgYWRkcik7CisJLy8gY29tbWFuZCByZWFkIGJhY2s6 ICJcbjAwMDAwMDAwXG4+ICIgKDEyIGNoYXJhY3RlcnMpCisJc2VyaWFsaWNlX2NvbW1hbmQo Y29tbWFuZCwgMTIpOworCXJldCA9ICh1aW50MzJfdClzdHJ0b3VsKHMtPmJ1ZmZlciArIDEs IChjaGFyICoqKU5VTEwsIDE2KTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHNlcmlhbGlj ZV93cml0ZWIodWludDhfdCBkYXRhLCB1aW50MzJfdCBhZGRyKQoreworCWNoYXIgY29tbWFu ZFsyNF07CisJc3ByaW50Zihjb21tYW5kLCAiKndtJTA4eC5iPSUwMngiLCBhZGRyLCBkYXRh KTsKKwkvLyBjb21tYW5kIHJlYWQgYmFjazogIlxuPiAiICgzIGNoYXJhY3RlcnMpCisJc2Vy aWFsaWNlX2NvbW1hbmQoY29tbWFuZCwgMyk7Cit9CisKK3ZvaWQgc2VyaWFsaWNlX3dyaXRl dyh1aW50MTZfdCBkYXRhLCB1aW50MzJfdCBhZGRyKQoreworCWNoYXIgY29tbWFuZFsyNV07 CisJc3ByaW50Zihjb21tYW5kLCAiKndtJTA4eC53PSUwNHgiLCBhZGRyLCBkYXRhKTsKKwkv LyBjb21tYW5kIHJlYWQgYmFjazogIlxuPiAiICgzIGNoYXJhY3RlcnMpCisJc2VyaWFsaWNl X2NvbW1hbmQoY29tbWFuZCwgMyk7Cit9CisKK3ZvaWQgc2VyaWFsaWNlX3dyaXRlbCh1aW50 MzJfdCBkYXRhLCB1aW50MzJfdCBhZGRyKQoreworCWNoYXIgY29tbWFuZFsyOV07CisJc3By aW50Zihjb21tYW5kLCAiKndtJTA4eC5sPSUwOHgiLCBhZGRyLCBkYXRhKTsKKwkvLyBjb21t YW5kIHJlYWQgYmFjazogIlxuPiAiICgzIGNoYXJhY3RlcnMpCisJc2VyaWFsaWNlX2NvbW1h bmQoY29tbWFuZCwgMyk7Cit9CisKK3VpbnQ2NF90IHNlcmlhbGljZV9yZG1zcih1aW50MzJf dCBhZGRyKQoreworCXVpbnQzMl90IGhpLCBsbzsKKwl1aW50NjRfdCByZXQ7CisJaW50IGZp bHRlcmVkOworCisJZmlsdGVyZWQgPSBzZXJpYWxpY2VfbXNyX2ZpbHRlcihGSUxURVJfUkVB RCwgYWRkciwgJmhpLCAmbG8pOworCWlmICghZmlsdGVyZWQpIHsKKwkJY2hhciBjb21tYW5k WzE4XTsKKworCQlzcHJpbnRmKGNvbW1hbmQsICIqcmMlMDh4IiwgYWRkcik7CisKKwkJLy8g Y29tbWFuZCByZWFkIGJhY2s6ICJcbjAwMDAwMDAwLjAwMDAwMDAwXG4+ICIgKDIxIGNoYXJh Y3RlcnMpCisJCXNlcmlhbGljZV9jb21tYW5kKGNvbW1hbmQsIDIxKTsKKworCQlzLT5idWZm ZXJbOV0gPSAwOyAvLyAuIC0+IFwwCisJCWhpID0gKHVpbnQzMl90KXN0cnRvdWwocy0+YnVm ZmVyICsgMSwgKGNoYXIgKiopTlVMTCwgMTYpOworCQlsbyA9ICh1aW50MzJfdClzdHJ0b3Vs KHMtPmJ1ZmZlciArIDEwLCAoY2hhciAqKilOVUxMLCAxNik7CisJfQorCisJcmV0ID0gaGk7 CisJcmV0IDw8PSAzMjsKKwlyZXQgfD0gbG87CisKKwlzZXJpYWxpY2VfbXNyX2xvZyhMT0df UkVBRCwgYWRkciwgaGksIGxvLCBmaWx0ZXJlZCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2 b2lkIHNlcmlhbGljZV93cm1zcih1aW50NjRfdCBkYXRhLCB1aW50MzJfdCBhZGRyKQorewor CXVpbnQzMl90IGhpLCBsbzsKKwlpbnQgZmlsdGVyZWQ7CisKKwloaSA9IChkYXRhID4+IDMy KTsKKwlsbyA9IChkYXRhICYgMHhmZmZmZmZmZik7CisKKwlmaWx0ZXJlZCA9IHNlcmlhbGlj ZV9tc3JfZmlsdGVyKEZJTFRFUl9XUklURSwgYWRkciwgJmhpLCAmbG8pOworCisJaWYgKCFm aWx0ZXJlZCkgeworCQljaGFyIGNvbW1hbmRbMzBdOworCQlzcHJpbnRmKGNvbW1hbmQsICIq d2MlMDh4PSUwOHguJTA4eCIsIGFkZHIsIGhpLCBsbyk7CisJCS8vIGNvbW1hbmQgcmVhZCBi YWNrOiAiXG4+ICIgKDMgY2hhcmFjdGVycykKKwkJc2VyaWFsaWNlX2NvbW1hbmQoY29tbWFu ZCwgMyk7CisJfQorCisJc2VyaWFsaWNlX21zcl9sb2coTE9HX1dSSVRFLCBhZGRyLCBoaSwg bG8sIGZpbHRlcmVkKTsKK30KKworY3B1aWRfcmVnc190IHNlcmlhbGljZV9jcHVpZCh1aW50 MzJfdCBlYXgsIHVpbnQzMl90IGVjeCkKK3sKKwljcHVpZF9yZWdzX3QgcmV0OworCWludCBm aWx0ZXJlZDsKKworCXJldC5lYXggPSBlYXg7CisJcmV0LmVieCA9IDA7IC8vIGVpdGhlciBz ZXQgYnkgZmlsdGVyIG9yIGJ5IHRhcmdldAorCXJldC5lY3ggPSBlY3g7CisJcmV0LmVkeCA9 IDA7IC8vIGVpdGhlciBzZXQgYnkgZmlsdGVyIG9yIGJ5IHRhcmdldAorCisJZmlsdGVyZWQg PSBzZXJpYWxpY2VfY3B1aWRfZmlsdGVyKCZyZXQpOworCWlmICghZmlsdGVyZWQpIHsKKwkJ Y2hhciBjb21tYW5kWzI3XTsKKworCQlzcHJpbnRmKGNvbW1hbmQsICIqY2klMDh4LiUwOHgi LCBlYXgsIGVjeCk7CisKKwkJLy8gY29tbWFuZCByZWFkIGJhY2s6ICJcbjAwMDAwNmYyLjAw MDAwMDAwLjAwMDAxMjM0LjEyMzQwMzI0XG4+ICIKKwkJLy8gKDM5IGNoYXJhY3RlcnMpCisJ CXNlcmlhbGljZV9jb21tYW5kKGNvbW1hbmQsIDM5KTsKKworCQlzLT5idWZmZXJbOV0gPSAw OyAvLyAuIC0+IFwwCisJCXMtPmJ1ZmZlclsxOF0gPSAwOyAvLyAuIC0+IFwwCisJCXMtPmJ1 ZmZlclsyN10gPSAwOyAvLyAuIC0+IFwwCisJCXJldC5lYXggPSAodWludDMyX3Qpc3RydG91 bChzLT5idWZmZXIgKyAgMSwgKGNoYXIgKiopTlVMTCwgMTYpOworCQlyZXQuZWJ4ID0gKHVp bnQzMl90KXN0cnRvdWwocy0+YnVmZmVyICsgMTAsIChjaGFyICoqKU5VTEwsIDE2KTsKKwkJ cmV0LmVjeCA9ICh1aW50MzJfdClzdHJ0b3VsKHMtPmJ1ZmZlciArIDE5LCAoY2hhciAqKilO VUxMLCAxNik7CisJCXJldC5lZHggPSAodWludDMyX3Qpc3RydG91bChzLT5idWZmZXIgKyAy OCwgKGNoYXIgKiopTlVMTCwgMTYpOworCX0KKworCXNlcmlhbGljZV9jcHVpZF9sb2coZWF4 LCBlY3gsIHJldCwgZmlsdGVyZWQpOworCisJcmV0dXJuIHJldDsKK30KKworLy8gKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKy8vIG1lbW9yeSBsb2FkIGhhbmRsaW5nCisKK3N0YXRpYyB1aW50 MzJfdCBzZXJpYWxpY2VfbG9hZF93cmFwcGVyKHVpbnQzMl90IGFkZHIsIHVuc2lnbmVkIGlu dCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMTogcmV0dXJuICh1aW50MzJf dClzZXJpYWxpY2VfcmVhZGIoYWRkcik7CisJY2FzZSAyOiByZXR1cm4gKHVpbnQzMl90KXNl cmlhbGljZV9yZWFkdyhhZGRyKTsKKwljYXNlIDQ6IHJldHVybiAodWludDMyX3Qpc2VyaWFs aWNlX3JlYWRsKGFkZHIpOworCWRlZmF1bHQ6IHByaW50ZigiV0FSTklORzogdW5rbm93biBy ZWFkIGFjY2VzcyBzaXplICVkIEAlMDh4XG4iLCBzaXplLCBhZGRyKTsKKwl9CisJcmV0dXJu IDA7Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHNvZnRt bXUgZW5naW5lIHRvIHVwZGF0ZSB0aGUgc3RhdHVzCisgKiBvZiBhIGxvYWQgY3ljbGUKKyAq Lwordm9pZCBzZXJpYWxpY2VfbG9nX2xvYWQoaW50IGNhdWdodCwgdWludDMyX3QgYWRkciwg dWludDMyX3QgcmVzdWx0LCB1bnNpZ25lZCBpbnQgZGF0YV9zaXplKQoreworCWlmIChjYXVn aHQpCisJCXNlcmlhbGljZV9sb2coTE9HX1JFQUR8TE9HX01FTU9SWXxMT0dfVEFSR0VULCBy ZXN1bHQsIGFkZHIsIGRhdGFfc2l6ZSk7CisJZWxzZQorCQlzZXJpYWxpY2VfbG9nKExPR19S RUFEfExPR19NRU1PUlksIHJlc3VsdCwgYWRkciwgZGF0YV9zaXplKTsKK30KKworLyogVGhp cyBmdW5jdGlvbiBjYW4gZ3JhYiBRZW11IGxvYWQgb3BzIGFuZCBmb3J3YXJkIHRoZW0gdG8g dGhlIFNlcmlhbElDRQorICogdGFyZ2V0LiAKKyAqCisgKiBAcmV0dXJuIDA6IFFlbXUgZXhj bHVzaXZlIG9yIHNoYXJlZDsgMTogU2VyaWFsSUNFIGV4Y2x1c2l2ZS4KKyAqLworaW50IHNl cmlhbGljZV9oYW5kbGVfbG9hZCh1aW50MzJfdCBhZGRyLCB1aW50MzJfdCAqcmVzdWx0LCB1 bnNpZ25lZCBpbnQgZGF0YV9zaXplKQoreworCWludCByZWFkX2Zyb21fdGFyZ2V0OworCisJ cmVhZF9mcm9tX3RhcmdldCA9IHNlcmlhbGljZV9tZW1vcnlfcmVhZF9maWx0ZXIoYWRkciwg ZGF0YV9zaXplKTsKKwlpZiAocmVhZF9mcm9tX3RhcmdldCkgeworCQkqcmVzdWx0ID0gc2Vy aWFsaWNlX2xvYWRfd3JhcHBlcihhZGRyLCBkYXRhX3NpemUpOworCQlyZXR1cm4gMTsKKwl9 CisJcmV0dXJuIDA7Cit9CisKKworLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIG1lbW9y eSBzdG9yZSBoYW5kbGluZworCitzdGF0aWMgdm9pZCBzZXJpYWxpY2Vfc3RvcmVfd3JhcHBl cih1aW50MzJfdCBhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdWludDMyX3QgZGF0YSkKK3sK Kwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6IHNlcmlhbGljZV93cml0ZWIoKHVpbnQ4X3Qp ZGF0YSwgYWRkcik7IGJyZWFrOworCWNhc2UgMjogc2VyaWFsaWNlX3dyaXRldygodWludDE2 X3QpZGF0YSwgYWRkcik7IGJyZWFrOworCWNhc2UgNDogc2VyaWFsaWNlX3dyaXRlbCgodWlu dDMyX3QpZGF0YSwgYWRkcik7IGJyZWFrOworCWRlZmF1bHQ6IHByaW50ZigiV0FSTklORzog dW5rbm93biB3cml0ZSBhY2Nlc3Mgc2l6ZSAlZCBAJTA4eFxuIiwgc2l6ZSwgYWRkcik7CisJ fQorfQorCitzdGF0aWMgdm9pZCBzZXJpYWxpY2VfbG9nX3N0b3JlKGludCBjYXVnaHQsIHVp bnQzMl90IGFkZHIsIHVpbnQzMl90IHZhbCwgdW5zaWduZWQgaW50IGRhdGFfc2l6ZSkKK3sK KwlpZiAoY2F1Z2h0KQorCQlzZXJpYWxpY2VfbG9nKExPR19XUklURXxMT0dfTUVNT1JZfExP R19UQVJHRVQsIHZhbCwgYWRkciwgZGF0YV9zaXplKTsKKwllbHNlCisJCXNlcmlhbGljZV9s b2coTE9HX1dSSVRFfExPR19NRU1PUlksIHZhbCwgYWRkciwgZGF0YV9zaXplKTsKK30KKwor LyogVGhpcyBmdW5jdGlvbiBjYW4gZ3JhYiBRZW11IHN0b3JlIG9wcyBhbmQgZm9yd2FyZCB0 aGVtIHRvIHRoZSBTZXJpYWxJQ0UKKyAqIHRhcmdldAorICoKKyAqIEByZXR1cm4gMDogUWVt dSBleGNsdXNpdmUgb3Igc2hhcmVkOyAxOiBTZXJpYWxJQ0UgZXhjbHVzaXZlLgorICovCisK K2ludCBzZXJpYWxpY2VfaGFuZGxlX3N0b3JlKHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IHZh bCwgdW5zaWduZWQgaW50IGRhdGFfc2l6ZSkKK3sKKwlpbnQgd3JpdGVfdG9fdGFyZ2V0LCB3 cml0ZV90b19xZW11LCByZXQ7CisKKwlyZXQgPSBzZXJpYWxpY2VfbWVtb3J5X3dyaXRlX2Zp bHRlcihhZGRyLCBkYXRhX3NpemUpOworCisJd3JpdGVfdG9fdGFyZ2V0ID0gKChyZXQgJiBX UklURV9UT19TRVJJQUxJQ0UpICE9IDApOworCXdyaXRlX3RvX3FlbXUgPSAoKHJldCAmIFdS SVRFX1RPX1FFTVUpICE9IDApOworCisJc2VyaWFsaWNlX2xvZ19zdG9yZSh3cml0ZV90b190 YXJnZXQsIGFkZHIsIHZhbCwgZGF0YV9zaXplKTsKKworCWlmICh3cml0ZV90b190YXJnZXQp CisJCXNlcmlhbGljZV9zdG9yZV93cmFwcGVyKGFkZHIsIGRhdGFfc2l6ZSwgdmFsKTsKKwor CXJldHVybiAod3JpdGVfdG9fcWVtdSA9PSAwKTsKK30KKworLy8gKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKy8vIGV4dGVybmFsIGluaXRpYWxpemF0aW9uIGFuZCBleGl0CisKK3ZvaWQgc2Vy aWFsaWNlX2luaXQodm9pZCkKK3sKKwlwcmludGYoIlNlcmlhbElDRTogT3BlbiBjb25uZWN0 aW9uIHRvIHRhcmdldCBoYXJkd2FyZS4uLlxuIik7CisKKwlpZiAoc2VyaWFsaWNlX2Rldmlj ZSA9PSBOVUxMKSB7CisJCXByaW50ZigiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHNlcmlhbCBk ZXZpY2UgdG8gdXNlIFNlcmlhbElDRS5cbiIpOworCQlleGl0KDEpOworCX0KKworCXMgPSAg cWVtdV9tYWxsb2N6KHNpemVvZihTZXJpYWxJQ0VTdGF0ZSkpOworCisJcy0+ZmQgPSBvcGVu KHNlcmlhbGljZV9kZXZpY2UsIE9fUkRXUiB8IE9fTk9DVFRZIHwgT19OT05CTE9DSyk7CisK KwlpZiAocy0+ZmQgPT0gLTEpIHsKKwkJcGVycm9yKCJTZXJpYWxJQ0U6IENvdWxkIG5vdCBj b25uZWN0IHRvIHRhcmdldCBUVFkiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoaW9jdGwo cy0+ZmQsIFRJT0NFWENMKSA9PSAtMSkgeworCQlwZXJyb3IoIlNlcmlhbElDRTogVFRZIG5v dCBleGNsdXNpdmVseSBhdmFpbGFibGUiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoZmNu dGwocy0+ZmQsIEZfU0VURkwsIDApID09IC0xKSB7CisJCXBlcnJvcigiU2VyaWFsSUNFOiBD b3VsZCBub3Qgc3dpdGNoIHRvIGJsb2NraW5nIEkvTyIpOworCQlleGl0KDEpOworCX0KKwor CWlmICh0Y2dldGF0dHIocy0+ZmQsICZvcHRpb25zKSA9PSAtMSkgeworCQlwZXJyb3IoIlNl cmlhbElDRTogQ291bGQgbm90IGdldCBUVFkgYXR0cmlidXRlcyIpOworCQlleGl0KDEpOwor CX0KKworCWNmc2V0aXNwZWVkKCZvcHRpb25zLCBCMTE1MjAwKTsKKwljZnNldG9zcGVlZCgm b3B0aW9ucywgQjExNTIwMCk7CisKKwkvKiBzZXQgcmF3IGlucHV0LCAxIHNlY29uZCB0aW1l b3V0ICovCisJb3B0aW9ucy5jX2NmbGFnICAgICB8PSAoQ0xPQ0FMIHwgQ1JFQUQpOworCW9w dGlvbnMuY19sZmxhZyAgICAgJj0gfihJQ0FOT04gfCBFQ0hPIHwgRUNIT0UgfCBJU0lHKTsK KwlvcHRpb25zLmNfb2ZsYWcgICAgICY9IH5PUE9TVDsKKwlvcHRpb25zLmNfaWZsYWcgICAg IHw9IElHTkNSOworCW9wdGlvbnMuY19jY1tWTUlOXSAgPSAwOworCW9wdGlvbnMuY19jY1tW VElNRV0gPSAxMDA7CisKKwl0Y3NldGF0dHIocy0+ZmQsIFRDU0FOT1csICZvcHRpb25zKTsK KworCXRjZmx1c2gocy0+ZmQsIFRDSU9GTFVTSCk7CisKKwlzLT5idWZmZXIgPSBxZW11X21h bGxvY3ooQlVGRkVSX1NJWkUpOworCisJcHJpbnRmKCJTZXJpYWxJQ0U6IFdhaXRpbmcgZm9y IGhhbmRzaGFrZSB3aXRoIHRhcmdldC4uLiAiKTsKKwlzZXJpYWxpY2VfY29tbWFuZCgiXG4i LCAzKTsKKworCWlmICghc3RybmNtcCgiXG4+ICIsIHMtPmJ1ZmZlciwgMykpIHsKKwkJcHJp bnRmKCJ0YXJnZXQgYWxpZmUhXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGYoInRhcmdldCBu b3Qgb2shICglcylcbiIsIHMtPmJ1ZmZlciApOworCQlleGl0KDEpOworCX0KKworCXByaW50 ZigiU2VyaWFsSUNFOiBMVUEgaW5pdC4uLlxuIik7CisJc2VyaWFsaWNlX2x1YV9pbml0KCk7 Cit9CisKK3ZvaWQgc2VyaWFsaWNlX2V4aXQodm9pZCkKK3sKKwlzZXJpYWxpY2VfbHVhX2V4 aXQoKTsKK30KKwotLS0gcWVtdS0wLjExLjAvc2VyaWFsaWNlLmgKKysrIHFlbXUtMC4xMS4w L3NlcmlhbGljZS5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgSFdfU0VSSUFMSUNFX0gK KyNkZWZpbmUgSFdfU0VSSUFMSUNFX0gKKworI2luY2x1ZGUgImNvbmZpZy1ob3N0LmgiCisK K2V4dGVybiBjb25zdCBjaGFyICpzZXJpYWxpY2VfZGV2aWNlOworZXh0ZXJuIGludCBzZXJp YWxpY2VfYWN0aXZlOworCit2b2lkIHNlcmlhbGljZV9pbml0KHZvaWQpOwordm9pZCBzZXJp YWxpY2VfZXhpdCh2b2lkKTsKKwordWludDhfdCBzZXJpYWxpY2VfaW5iKHVpbnQxNl90IHBv cnQpOwordWludDE2X3Qgc2VyaWFsaWNlX2ludyh1aW50MTZfdCBwb3J0KTsKK3VpbnQzMl90 IHNlcmlhbGljZV9pbmwodWludDE2X3QgcG9ydCk7CisKK3ZvaWQgc2VyaWFsaWNlX291dGIo dWludDhfdCBkYXRhLCB1aW50MTZfdCBwb3J0KTsKK3ZvaWQgc2VyaWFsaWNlX291dHcodWlu dDE2X3QgZGF0YSwgdWludDE2X3QgcG9ydCk7Cit2b2lkIHNlcmlhbGljZV9vdXRsKHVpbnQz Ml90IGRhdGEsIHVpbnQxNl90IHBvcnQpOworCit1aW50OF90IHNlcmlhbGljZV9yZWFkYih1 aW50MzJfdCBhZGRyKTsKK3VpbnQxNl90IHNlcmlhbGljZV9yZWFkdyh1aW50MzJfdCBhZGRy KTsKK3VpbnQzMl90IHNlcmlhbGljZV9yZWFkbCh1aW50MzJfdCBhZGRyKTsKKwordm9pZCBz ZXJpYWxpY2Vfd3JpdGViKHVpbnQ4X3QgZGF0YSwgdWludDMyX3QgYWRkcik7Cit2b2lkIHNl cmlhbGljZV93cml0ZXcodWludDE2X3QgZGF0YSwgdWludDMyX3QgYWRkcik7Cit2b2lkIHNl cmlhbGljZV93cml0ZWwodWludDMyX3QgZGF0YSwgdWludDMyX3QgYWRkcik7CisKK3VpbnQ2 NF90IHNlcmlhbGljZV9yZG1zcih1aW50MzJfdCBhZGRyKTsKK3ZvaWQgc2VyaWFsaWNlX3dy bXNyKHVpbnQ2NF90IGRhdGEsIHVpbnQzMl90IGFkZHIpOworCit0eXBlZGVmIHN0cnVjdCB7 CisJdWludDMyX3QgZWF4LCBlYngsIGVjeCwgZWR4OworfSBjcHVpZF9yZWdzX3Q7CisKKwor Y3B1aWRfcmVnc190IHNlcmlhbGljZV9jcHVpZCh1aW50MzJfdCBlYXgsIHVpbnQzMl90IGVj eCk7CisKK2ludCBzZXJpYWxpY2VfaGFuZGxlX2xvYWQodWludDMyX3QgYWRkciwgdWludDMy X3QgKnJlc3VsdCwgdW5zaWduZWQgaW50IGRhdGFfc2l6ZSk7Cit2b2lkIHNlcmlhbGljZV9s b2dfbG9hZChpbnQgY2F1Z2h0LCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCByZXN1bHQsIHVu c2lnbmVkIGludCBkYXRhX3NpemUpOworaW50IHNlcmlhbGljZV9oYW5kbGVfc3RvcmUodWlu dDMyX3QgYWRkciwgdWludDMyX3QgdmFsLCB1bnNpZ25lZCBpbnQgZGF0YV9zaXplKTsKKwor I2VuZGlmCi0tLSBxZW11LTAuMTEuMC9idWlsZC5zaAorKysgcWVtdS0wLjExLjAvYnVpbGQu c2gKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKy4vY29uZmlndXJlIC0tZGlzYWJsZS1r dm0gLS1kaXNhYmxlLXNkbCAtLWVuYWJsZS1zZXJpYWxpY2UgXAorCSAgICAtLXRhcmdldC1s aXN0PSJ4ODZfNjQtc29mdG1tdSwgaTM4Ni1zb2Z0bW11IgorCittYWtlCi0tLSBxZW11LTAu MTEuMC9NYWtlZmlsZS50YXJnZXQKKysrIHFlbXUtMC4xMS4wL01ha2VmaWxlLnRhcmdldApA QCAtNDg4LDYgKzQ4OCwxMyBAQAogIyBHZW5lcmljIHdhdGNoZG9nIHN1cHBvcnQgYW5kIHNv bWUgd2F0Y2hkb2cgZGV2aWNlcwogb2JqLXkgKz0gd2R0X2liNzAwLm8gd2R0X2k2MzAwZXNi Lm8KIAorIyBHZW5lcmljIFNlcmlhbElDRSBzdXBwb3J0CitpZmRlZiBDT05GSUdfU0VSSUFM SUNFCitDUFBGTEFHUyArPSAkKENPTkZJR19TRVJJQUxJQ0VfQ0ZMQUdTKQorTElCUyArPSAk KENPTkZJR19TRVJJQUxJQ0VfTElCUykKK2VuZGlmCitvYmotJChDT05GSUdfU0VSSUFMSUNF KSArPSBzZXJpYWxpY2UubworCiAjIEhhcmR3YXJlIHN1cHBvcnQKIG9iai1pMzg2LXkgPSBp ZGUubyBwY2tiZC5vIHZnYS5vICQoc291bmQtb2JqLXkpIGRtYS5vCiBvYmotaTM4Ni15ICs9 IGZkYy5vIG1jMTQ2ODE4cnRjLm8gc2VyaWFsLm8gaTgyNTkubyBpODI1NC5vIHBjc3BrLm8g cGMubwotLS0gcWVtdS0wLjExLjAvdmwuYworKysgcWVtdS0wLjExLjAvdmwuYwpAQCAtMjIx LDYgKzIyMSw5IEBACiBpbnQgd2luMmtfaW5zdGFsbF9oYWNrID0gMDsKIGludCBydGNfdGRf aGFjayA9IDA7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMSUNFCitjb25zdCBjaGFy ICpzZXJpYWxpY2VfZGV2aWNlID0gTlVMTDsKKyNlbmRpZgogaW50IHVzYl9lbmFibGVkID0g MDsKIGludCBzaW5nbGVzdGVwID0gMDsKIGludCBzbXBfY3B1cyA9IDE7CkBAIC01MTA4LDYg KzUxMTEsMTEgQEAKICAgICAgICAgICAgICAgICBkaXNwbGF5X3R5cGUgPSBEVF9DVVJTRVM7 CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFM SUNFCisJICAgY2FzZSBRRU1VX09QVElPTl9zZXJpYWxpY2U6CisJCXNlcmlhbGljZV9kZXZp Y2UgPSBvcHRhcmc7CisJCWJyZWFrOworI2VuZGlmCiAgICAgICAgICAgICBjYXNlIFFFTVVf T1BUSU9OX3BvcnRyYWl0OgogICAgICAgICAgICAgICAgIGdyYXBoaWNfcm90YXRlID0gMTsK ICAgICAgICAgICAgICAgICBicmVhazsKLS0tIHFlbXUtMC4xMS4wL3FlbXUtY2hhci5jCisr KyBxZW11LTAuMTEuMC9xZW11LWNoYXIuYwpAQCAtODIxLDcgKzgyMSw3IEBACiAjZW5kaWYK IAogI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fc3VuX18pIHx8IGRlZmlu ZWQoX19GcmVlQlNEX18pIFwKLSAgICB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmlu ZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykKKyAgICB8fCBkZWZp bmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19E cmFnb25GbHlfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCiAKIHR5cGVkZWYgc3RydWN0IHsK ICAgICBpbnQgZmQ7CkBAIC0yMjYyLDcgKzIyNjIsNyBAQAogICAgIH0gZWxzZQogI2VuZGlm CiAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19zdW5fXykgfHwgZGVmaW5l ZChfX0ZyZWVCU0RfXykgXAotICAgIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5l ZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQorICAgIHx8IGRlZmlu ZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX0Ry YWdvbkZseV9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKICAgICBpZiAoc3Ryc3RhcnQoZmls ZW5hbWUsICIvZGV2LyIsIE5VTEwpKSB7CiAgICAgICAgIGNociA9IHFlbXVfY2hyX29wZW5f dHR5KGZpbGVuYW1lKTsKICAgICB9IGVsc2UKLS0tIHFlbXUtMC4xMS4wL3NvZnRtbXVfdGVt cGxhdGUuaAorKysgcWVtdS0wLjExLjAvc29mdG1tdV90ZW1wbGF0ZS5oCkBAIC0xNiw2ICsx Niw5IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy YXJ5OyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8K KworI2luY2x1ZGUgInNlcmlhbGljZS5oIgorCiAjZGVmaW5lIERBVEFfU0laRSAoMSA8PCBT SElGVCkKIAogI2lmIERBVEFfU0laRSA9PSA4CkBAIC05MSw2ICs5NCwxNiBAQAogICAgIHRh cmdldF9waHlzX2FkZHJfdCBhZGRlbmQ7CiAgICAgdm9pZCAqcmV0YWRkcjsKIAorI2lmZGVm IENPTkZJR19TRVJJQUxJQ0UKKyAgICB1aW50MzJfdCByZXN1bHQ7CisgICAgaW50IGNhdWdo dCA9IDA7CisgICAgaWYgKHNlcmlhbGljZV9hY3RpdmUgJiYgc2VyaWFsaWNlX2hhbmRsZV9s b2FkKCh1aW50MzJfdClhZGRyLCAmcmVzdWx0LCAodW5zaWduZWQgaW50KSBEQVRBX1NJWkUp KSB7CisJcmVzID0gKERBVEFfVFlQRSlyZXN1bHQ7CisJY2F1Z2h0PTE7CisJZ290byBsZWF2 ZV9sZDsKKyAgICB9CisjZW5kaWYKKwogICAgIC8qIHRlc3QgaWYgdGhlcmUgaXMgbWF0Y2gg Zm9yIHVuYWxpZ25lZCBvciBJTyBhY2Nlc3MgKi8KICAgICAvKiBYWFg6IGNvdWxkIGRvbmUg bW9yZSBpbiBtZW1vcnkgbWFjcm8gaW4gYSBub24gcG9ydGFibGUgd2F5ICovCiAgICAgaW5k ZXggPSAoYWRkciA+PiBUQVJHRVRfUEFHRV9CSVRTKSAmIChDUFVfVExCX1NJWkUgLSAxKTsK QEAgLTEzNCw2ICsxNDcsMTIgQEAKICAgICAgICAgdGxiX2ZpbGwoYWRkciwgUkVBRF9BQ0NF U1NfVFlQRSwgbW11X2lkeCwgcmV0YWRkcik7CiAgICAgICAgIGdvdG8gcmVkbzsKICAgICB9 CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMSUNFCitsZWF2ZV9sZDoKKyAgICBpZiAoc2VyaWFs aWNlX2FjdGl2ZSkKKyAgICAgICAgc2VyaWFsaWNlX2xvZ19sb2FkKGNhdWdodCwgYWRkciwg KHVpbnQzMl90KXJlcywgKHVuc2lnbmVkIGludClEQVRBX1NJWkUpOworI2VuZGlmCiAgICAg cmV0dXJuIHJlczsKIH0KIApAQCAtMjM0LDYgKzI1MywxNSBAQAogICAgIHZvaWQgKnJldGFk ZHI7CiAgICAgaW50IGluZGV4OwogCisjaWZkZWYgQ09ORklHX1NFUklBTElDRQorICAgIGlm IChzZXJpYWxpY2VfYWN0aXZlICYmIHNlcmlhbGljZV9oYW5kbGVfc3RvcmUoKHVpbnQzMl90 KWFkZHIsICh1aW50MzJfdCl2YWwsICh1bnNpZ25lZCBpbnQpIERBVEFfU0laRSkpIHsKKwkv LyBGb3Igbm93LCB3ZSBqdXN0IGFsd2F5cyBrZWVwIGEgYmFja3VwIG9mIF9hbGxfIHdyaXRl cyBpbiBxZW11J3MKKwkvLyBtZW1vcnkuIEF0IHRoaXMgcG9pbnQgd2UgY2FuIGxhdGVyIGRl Y2lkZSB3aGF0IHRvIGRvLCBpZiBpdCBiZWNvbWVzCisJLy8gbmVjZXNzYXJ5LgorCS8vIHJl dHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIGluZGV4ID0gKGFkZHIgPj4gVEFSR0VUX1BB R0VfQklUUykgJiAoQ1BVX1RMQl9TSVpFIC0gMSk7CiAgcmVkbzoKICAgICB0bGJfYWRkciA9 IGVudi0+dGxiX3RhYmxlW21tdV9pZHhdW2luZGV4XS5hZGRyX3dyaXRlOwotLS0gcWVtdS0w LjExLjAvTWFrZWZpbGUKKysrIHFlbXUtMC4xMS4wL01ha2VmaWxlCkBAIC0yMTIsNiArMjEy LDEwIEBACiAKIGJ0LWhvc3QubzogQ0ZMQUdTICs9ICQoQ09ORklHX0JMVUVaX0NGTEFHUykK IAorc2VyaWFsaWNlLm86IHNlcmlhbGljZS5jIHNlcmlhbGljZS5oCisKK3NlcmlhbGljZS5v OiBDRkxBR1MgKz0gJChDT05GSUdfU0VSSUFMSUNFX0NGTEFHUykKKwogbGlicWVtdV9jb21t b24uYTogJChvYmoteSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLS0tIHFlbXUtMC4xMS4wL3Fl bXUtb3B0aW9ucy5oeAorKysgcWVtdS0wLjExLjAvcWVtdS1vcHRpb25zLmh4CkBAIC0xNjYx LDMgKzE2NjEsMTQgQEAKIERFRigib2xkLXBhcmFtIiwgMCwgUUVNVV9PUFRJT05fb2xkX3Bh cmFtLAogICAgICItb2xkLXBhcmFtICAgICAgb2xkIHBhcmFtIG1vZGVcbiIpCiAjZW5kaWYK KworI2lmZGVmIENPTkZJR19TRVJJQUxJQ0UKK0RFRigic2VyaWFsaWNlIiwgSEFTX0FSRywg UUVNVV9PUFRJT05fc2VyaWFsaWNlLAorICAgICItc2VyaWFsaWNlIGRldiAgRW5hYmxlIFNl cmlhbElDRSBkZWJ1Z2dpbmcgb24gc2VyaWFsIGRldmljZSAnZGV2J1xuIikKK1NURVhJCitA aXRlbSAtc2VyaWFsaWNlIEB2YXJ7ZGV2fQorRW5hYmxlIFNlcmlhbElDRSBkZWJ1Z2dpbmcg b24gc2VyaWFsIGRldmljZSBAdmFye2Rldn0uCitFVEVYSQorI2VuZGlmCisKKwotLS0gcWVt dS0wLjExLjAvZXhlYy1hbGwuaAorKysgcWVtdS0wLjExLjAvZXhlYy1hbGwuaApAQCAtMjEs NiArMjEsNyBAQAogI2RlZmluZSBfRVhFQ19BTExfSF8KIAogI2luY2x1ZGUgInFlbXUtY29t bW9uLmgiCisjaW5jbHVkZSAic2VyaWFsaWNlLmgiCiAKIC8qIGFsbG93IHRvIHNlZSB0cmFu c2xhdGlvbiByZXN1bHRzIC0gdGhlIHNsb3dkb3duIHNob3VsZCBiZSBuZWdsaWdpYmxlLCBz byB3ZSBsZWF2ZSBpdCAqLwogI2RlZmluZSBERUJVR19ESVNBUwpAQCAtMzI4LDYgKzMyOSw5 IEBACiAjaWYgZGVmaW5lZChUQVJHRVRfU1BBUkMpIHx8IGRlZmluZWQoVEFSR0VUX01JUFMp CiAgICAgICAgIGRvX3VuYXNzaWduZWRfYWNjZXNzKGFkZHIsIDAsIDEsIDAsIDQpOwogI2Vs c2UKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxJQ0UpCisgICAgaWYgKCFzZXJpYWxpY2Vf YWN0aXZlKQorI2VuZGlmCiAgICAgICAgIGNwdV9hYm9ydChlbnYxLCAiVHJ5aW5nIHRvIGV4 ZWN1dGUgY29kZSBvdXRzaWRlIFJBTSBvciBST00gYXQgMHgiIFRBUkdFVF9GTVRfbHggIlxu IiwgYWRkcik7CiAjZW5kaWYKICAgICB9Ci0tLSBxZW11LTAuMTEuMC9jb25maWd1cmUKKysr IHFlbXUtMC4xMS4wL2NvbmZpZ3VyZQpAQCAtMTkzLDYgKzE5Myw3IEBACiBpb190aHJlYWQ9 Im5vIgogbnB0bD0ieWVzIgogbWl4ZW11PSJubyIKK3NlcmlhbGljZT0ibm8iCiBibHVlej0i eWVzIgoga3ZtPSJubyIKIGtlcm5lbGRpcj0iIgpAQCAtNDkxLDYgKzQ5Miw4IEBACiAgIDs7 CiAgIC0tZW5hYmxlLW1peGVtdSkgbWl4ZW11PSJ5ZXMiCiAgIDs7CisgIC0tZW5hYmxlLXNl cmlhbGljZSkgc2VyaWFsaWNlPSJ5ZXMiCisgIDs7CiAgIC0tZGlzYWJsZS1wdGhyZWFkKSBw dGhyZWFkPSJubyIKICAgOzsKICAgLS1kaXNhYmxlLWFpbykgYWlvPSJubyIKQEAgLTYyNCw2 ICs2MjcsNyBAQAogZWNobyAiICAtLWF1ZGlvLWNhcmQtbGlzdD1MSVNUICAgc2V0IGxpc3Qg b2YgZW11bGF0ZWQgYXVkaW8gY2FyZHMgWyRhdWRpb19jYXJkX2xpc3RdIgogZWNobyAiICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlIGNhcmRzOiAkYXVkaW9fcG9zc2li bGVfY2FyZHMiCiBlY2hvICIgIC0tZW5hYmxlLW1peGVtdSAgICAgICAgICBlbmFibGUgbWl4 ZXIgZW11bGF0aW9uIgorZWNobyAiICAtLWVuYWJsZS1zZXJpYWxpY2UgICAgICAgZW5hYmxl IFNlcmlhbElDRSBkZWJ1Z2dlciBzdXBwb3J0IgogZWNobyAiICAtLWRpc2FibGUteGVuICAg ICAgICAgICAgZGlzYWJsZSB4ZW4gYmFja2VuZCBkcml2ZXIgc3VwcG9ydCIKIGVjaG8gIiAg LS1kaXNhYmxlLWJybGFwaSAgICAgICAgIGRpc2FibGUgQnJsQVBJIgogZWNobyAiICAtLWRp c2FibGUtdm5jLXRscyAgICAgICAgZGlzYWJsZSBUTFMgZW5jcnlwdGlvbiBmb3IgVk5DIHNl cnZlciIKQEAgLTEwNjQsNiArMTA2OCw0MCBAQAogZG9uZQogCiAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTFVBIHByb2JlCisKK2lmIHRlc3QgIiRz ZXJpYWxpY2UiID0gInllcyIgOyB0aGVuCisgIHNlcmlhbGljZT1ubworICBjYXQgPiAkVE1Q QyA8PCBFT0YKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxsdWEuaD4KKyNpbmNs dWRlIDxsYXV4bGliLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8u aD4KK3N0YXRpYyBsdWFfU3RhdGUgKkw7CitpbnQgbWFpbih2b2lkKSB7IEw9bHVhTF9uZXdz dGF0ZSgpOyByZXR1cm4gMDsgfQorRU9GCisgIAorICBMVUFfQ0ZMQUdTPSItSS91c3IvbG9j YWwvaW5jbHVkZSIKKyAgTFVBX0xERkxBR1M9Ii1ML3Vzci9sb2NhbC9saWIgLWxsdWEiCisg IGlmICRjYyAkRVhUUkFfQ0ZMQUdTICRFWFRSQV9MREZMQUdTICRBUkNIX0NGTEFHUyAkTFVB X0NGTEFHUyAkTFVBX0xERkxBR1MgLW8gJFRNUEUgJFRNUEMgLWxsdWEgPiAvZGV2L251bGwg Mj4gL2Rldi9udWxsIDsgdGhlbgorICAgIHNlcmlhbGljZT15ZXMKKyAgZWxzZQorICAgIExV QV9DRkxBR1M9YHBrZy1jb25maWcgLS1jZmxhZ3MgbHVhYAorICAgIExVQV9MREZMQUdTPWBw a2ctY29uZmlnIC0tbGlicyBsdWFgCisgICAgaWYgJGNjICRFWFRSQV9DRkxBR1MgJEVYVFJB X0xERkxBR1MgJEFSQ0hfQ0ZMQUdTICRMVUFfQ0ZMQUdTICRMVUFfTERGTEFHUyAtbyAkVE1Q RSAkVE1QQyAtbGx1YSA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwgOyB0aGVuCisgICAgICBz ZXJpYWxpY2U9eWVzCisgICAgZWxzZQorICAgICAgZWNobworICAgICAgZWNobyAiRXJyb3Ig TFVBIG5vdCBmb3VuZCwgY2FuJ3QgYnVpbGQgd2l0aCBTZXJpYWxJQ0Ugc3VwcG9ydC4iCisg ICAgICBlY2hvCisgICAgICBleGl0IDEKKyAgICBmaQorICBmaQorZmkgIyB0ZXN0ICIkc2Vy aWFsaWNlIgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwogIyBCcmxBUEkgcHJvYmUKIAogaWYgdGVzdCAteiAiJGJybGFwaSIgOyB0aGVuCkBAIC0x NDI2LDYgKzE0NjQsNyBAQAogZWNobyAiQXVkaW8gZHJpdmVycyAgICAgJGF1ZGlvX2Rydl9s aXN0IgogZWNobyAiRXh0cmEgYXVkaW8gY2FyZHMgJGF1ZGlvX2NhcmRfbGlzdCIKIGVjaG8g Ik1peGVyIGVtdWxhdGlvbiAgICRtaXhlbXUiCitlY2hvICJTZXJpYWxJQ0Ugc3VwcG9ydCAk c2VyaWFsaWNlIgogZWNobyAiVk5DIFRMUyBzdXBwb3J0ICAgJHZuY190bHMiCiBpZiB0ZXN0 ICIkdm5jX3RscyIgPSAieWVzIiA7IHRoZW4KICAgICBlY2hvICIgICAgVExTIENGTEFHUyAg ICAkdm5jX3Rsc19jZmxhZ3MiCkBAIC0xNjIwLDYgKzE2NTksMTIgQEAKICAgZWNobyAiQ09O RklHX01JWEVNVT15IiA+PiAkY29uZmlnX2hvc3RfbWFrCiAgIGVjaG8gIiNkZWZpbmUgQ09O RklHX01JWEVNVSAxIiA+PiAkY29uZmlnX2hvc3RfaAogZmkKK2lmIHRlc3QgIiRzZXJpYWxp Y2UiID0gInllcyIgOyB0aGVuCisgIGVjaG8gIkNPTkZJR19TRVJJQUxJQ0U9eSIgPj4gJGNv bmZpZ19ob3N0X21haworICBlY2hvICJDT05GSUdfU0VSSUFMSUNFX0NGTEFHUz0kTFVBX0NG TEFHUyIgPj4gJGNvbmZpZ19ob3N0X21haworICBlY2hvICJDT05GSUdfU0VSSUFMSUNFX0xJ QlM9JExVQV9MREZMQUdTIiA+PiAkY29uZmlnX2hvc3RfbWFrCisgIGVjaG8gIiNkZWZpbmUg Q09ORklHX1NFUklBTElDRSAxIiA+PiAkY29uZmlnX2hvc3RfaAorZmkKIGlmIHRlc3QgIiR2 bmNfdGxzIiA9ICJ5ZXMiIDsgdGhlbgogICBlY2hvICJDT05GSUdfVk5DX1RMUz15IiA+PiAk Y29uZmlnX2hvc3RfbWFrCiAgIGVjaG8gIkNPTkZJR19WTkNfVExTX0NGTEFHUz0kdm5jX3Rs c19jZmxhZ3MiID4+ICRjb25maWdfaG9zdF9tYWsKLS0tIHFlbXUtMC4xMS4wL3RhcmdldC1p Mzg2L29wX2hlbHBlci5jCisrKyBxZW11LTAuMTEuMC90YXJnZXQtaTM4Ni9vcF9oZWxwZXIu YwpAQCAtMjMsNiArMjMsNyBAQAogCiAvLyNkZWZpbmUgREVCVUdfUENBTEwKIAorI2luY2x1 ZGUgInNlcmlhbGljZS5oIgogCiAjaWZkZWYgREVCVUdfUENBTEwKICMgIGRlZmluZSBMT0df UENBTEwoLi4uKSBxZW11X2xvZ19tYXNrKENQVV9MT0dfUENBTEwsICMjIF9fVkFfQVJHU19f KQpAQCAtNTU4LDMxICs1NTksNjQgQEAKIAogdm9pZCBoZWxwZXJfb3V0Yih1aW50MzJfdCBw b3J0LCB1aW50MzJfdCBkYXRhKQogeworI2lmZGVmIENPTkZJR19TRVJJQUxJQ0UKKyAgICBp ZiAoc2VyaWFsaWNlX2FjdGl2ZSkgeworCSAgICBzZXJpYWxpY2Vfb3V0YihkYXRhICYgMHhm ZiwgcG9ydCk7CisJICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICBjcHVfb3V0Yihl bnYsIHBvcnQsIGRhdGEgJiAweGZmKTsKIH0KIAogdGFyZ2V0X3Vsb25nIGhlbHBlcl9pbmIo dWludDMyX3QgcG9ydCkKIHsKKyNpZmRlZiBDT05GSUdfU0VSSUFMSUNFCisgICAgaWYgKHNl cmlhbGljZV9hY3RpdmUpIHsKKwkgICAgcmV0dXJuICh0YXJnZXRfdWxvbmcpc2VyaWFsaWNl X2luYihwb3J0KTsKKyAgICB9CisjZW5kaWYKICAgICByZXR1cm4gY3B1X2luYihlbnYsIHBv cnQpOwogfQogCiB2b2lkIGhlbHBlcl9vdXR3KHVpbnQzMl90IHBvcnQsIHVpbnQzMl90IGRh dGEpCiB7CisjaWZkZWYgQ09ORklHX1NFUklBTElDRQorICAgIGlmIChzZXJpYWxpY2VfYWN0 aXZlKSB7CisJICAgIHNlcmlhbGljZV9vdXR3KGRhdGEgJiAweGZmZmYsIHBvcnQpOworCSAg ICByZXR1cm47CisgICAgfQorI2VuZGlmCiAgICAgY3B1X291dHcoZW52LCBwb3J0LCBkYXRh ICYgMHhmZmZmKTsKIH0KIAogdGFyZ2V0X3Vsb25nIGhlbHBlcl9pbncodWludDMyX3QgcG9y dCkKIHsKKyNpZmRlZiBDT05GSUdfU0VSSUFMSUNFCisgICAgaWYgKHNlcmlhbGljZV9hY3Rp dmUpIHsKKwkgICAgcmV0dXJuICh0YXJnZXRfdWxvbmcpc2VyaWFsaWNlX2ludyhwb3J0KTsK KyAgICB9CisjZW5kaWYKICAgICByZXR1cm4gY3B1X2ludyhlbnYsIHBvcnQpOwogfQogCiB2 b2lkIGhlbHBlcl9vdXRsKHVpbnQzMl90IHBvcnQsIHVpbnQzMl90IGRhdGEpCiB7CisjaWZk ZWYgQ09ORklHX1NFUklBTElDRQorICAgIGlmIChzZXJpYWxpY2VfYWN0aXZlKSB7CisJICAg IHNlcmlhbGljZV9vdXRsKGRhdGEgJiAweGZmZmZmZmZmLCBwb3J0KTsKKwkgICAgcmV0dXJu OworICAgIH0KKyNlbmRpZgogICAgIGNwdV9vdXRsKGVudiwgcG9ydCwgZGF0YSk7CiB9CiAK IHRhcmdldF91bG9uZyBoZWxwZXJfaW5sKHVpbnQzMl90IHBvcnQpCiB7CisjaWZkZWYgQ09O RklHX1NFUklBTElDRQorICAgIGlmIChzZXJpYWxpY2VfYWN0aXZlKSB7CisJICAgIHJldHVy biAodGFyZ2V0X3Vsb25nKXNlcmlhbGljZV9pbmwocG9ydCk7CisgICAgfQorI2VuZGlmCiAg ICAgcmV0dXJuIGNwdV9pbmwoZW52LCBwb3J0KTsKIH0KIApAQCAtMTk0MCw2ICsxOTc0LDE4 IEBACiAKICAgICBoZWxwZXJfc3ZtX2NoZWNrX2ludGVyY2VwdF9wYXJhbShTVk1fRVhJVF9D UFVJRCwgMCk7CiAKKyNpZmRlZiBDT05GSUdfU0VSSUFMSUNFCisgICAgaWYgKHNlcmlhbGlj ZV9hY3RpdmUpIHsKKyAgICAgICAgY3B1aWRfcmVnc190IHJldDsKKyAgICAgICAgcmV0ID0g c2VyaWFsaWNlX2NwdWlkKCh1aW50MzJfdClFQVgsICh1aW50MzJfdClFQ1gpOworICAgICAg ICBFQVggPSByZXQuZWF4OworICAgICAgICBFQlggPSByZXQuZWJ4OworICAgICAgICBFQ1gg PSByZXQuZWN4OworICAgICAgICBFRFggPSByZXQuZWR4OworICAgICAgICByZXR1cm47Cisg ICAgfQorI2VuZGlmCisKICAgICBjcHVfeDg2X2NwdWlkKGVudiwgKHVpbnQzMl90KUVBWCwg KHVpbnQzMl90KUVDWCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CiAgICAgRUFYID0gZWF4 OwogICAgIEVCWCA9IGVieDsKQEAgLTMwMzAsNiArMzA3NiwxMyBAQAogCiAgICAgdmFsID0g KCh1aW50MzJfdClFQVgpIHwgKCh1aW50NjRfdCkoKHVpbnQzMl90KUVEWCkgPDwgMzIpOwog CisjaWZkZWYgQ09ORklHX1NFUklBTElDRQorICAgIGlmIChzZXJpYWxpY2VfYWN0aXZlKSB7 CisgICAgICAgIHNlcmlhbGljZV93cm1zcih2YWwsICh1aW50MzJfdClFQ1gpOworICAgICAg ICByZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICBzd2l0Y2goKHVpbnQzMl90KUVDWCkg ewogICAgIGNhc2UgTVNSX0lBMzJfU1lTRU5URVJfQ1M6CiAgICAgICAgIGVudi0+c3lzZW50 ZXJfY3MgPSB2YWwgJiAweGZmZmY7CkBAIC0zMTYwLDYgKzMyMTMsMTUgQEAKIAogICAgIGhl bHBlcl9zdm1fY2hlY2tfaW50ZXJjZXB0X3BhcmFtKFNWTV9FWElUX01TUiwgMCk7CiAKKyNp ZmRlZiBDT05GSUdfU0VSSUFMSUNFCisgICAgaWYgKHNlcmlhbGljZV9hY3RpdmUpIHsKKwl2 YWwgPSBzZXJpYWxpY2VfcmRtc3IoKHVpbnQzMl90KUVDWCk7CisgICAgICAgIEVBWCA9ICh1 aW50MzJfdCkodmFsKTsKKyAgICAgICAgRURYID0gKHVpbnQzMl90KSh2YWwgPj4gMzIpOwor CXJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIHN3aXRjaCgodWludDMyX3QpRUNYKSB7 CiAgICAgY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9DUzoKICAgICAgICAgdmFsID0gZW52LT5z eXNlbnRlcl9jczsKLS0tIHFlbXUtMC4xMS4wL2h3L3BjLmMKKysrIHFlbXUtMC4xMS4wL2h3 L3BjLmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogI2luY2x1ZGUgImh3LmgiCiAjaW5jbHVk ZSAicGMuaCIKKyNpbmNsdWRlICJzZXJpYWxpY2UuaCIKICNpbmNsdWRlICJmZGMuaCIKICNp bmNsdWRlICJwY2kuaCIKICNpbmNsdWRlICJibG9jay5oIgpAQCAtMTE1Miw2ICsxMTUzLDEw IEBACiAKICAgICAvKiBhbGxvY2F0ZSBSQU0gKi8KICAgICByYW1fYWRkciA9IHFlbXVfcmFt X2FsbG9jKDB4YTAwMDApOworI2lmZGVmIENPTkZJR19TRVJJQUxJQ0UKKyAgICBpZiAoc2Vy aWFsaWNlX2FjdGl2ZSkKKyAgICAgICAgcmFtX2FkZHIgfD0gSU9fTUVNX1VOQVNTSUdORUQ7 CisjZW5kaWYKICAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KDAsIDB4YTAwMDAs IHJhbV9hZGRyKTsKIAogICAgIC8qIEFsbG9jYXRlLCBldmVuIHRob3VnaCB3ZSB3b24ndCBy ZWdpc3Rlciwgc28gd2UgZG9uJ3QgYnJlYWsgdGhlCkBAIC0xMTYwLDYgKzExNjUsMTAgQEAK ICAgICAgKi8KICAgICByYW1fYWRkciA9IHFlbXVfcmFtX2FsbG9jKDB4MTAwMDAwIC0gMHhh MDAwMCk7CiAgICAgcmFtX2FkZHIgPSBxZW11X3JhbV9hbGxvYyhiZWxvd180Z19tZW1fc2l6 ZSAtIDB4MTAwMDAwKTsKKyNpZmRlZiBDT05GSUdfU0VSSUFMSUNFCisgICAgaWYgKHNlcmlh bGljZV9hY3RpdmUpCisgICAgICAgIHJhbV9hZGRyIHw9IElPX01FTV9VTkFTU0lHTkVEOwor I2VuZGlmCiAgICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeSgweDEwMDAwMCwKICAg ICAgICAgICAgICAgICAgYmVsb3dfNGdfbWVtX3NpemUgLSAweDEwMDAwMCwKICAgICAgICAg ICAgICAgICAgcmFtX2FkZHIpOwpAQCAtMTE3MCw2ICsxMTc5LDEwIEBACiAgICAgICAgIGh3 X2Vycm9yKCJUbyBtdWNoIFJBTSBmb3IgMzItYml0IHBoeXNpY2FsIGFkZHJlc3MiKTsKICNl bHNlCiAgICAgICAgIHJhbV9hZGRyID0gcWVtdV9yYW1fYWxsb2MoYWJvdmVfNGdfbWVtX3Np emUpOworI2lmZGVmIENPTkZJR19TRVJJQUxJQ0UKKyAgICAgICAgaWYgKHNlcmlhbGljZV9h Y3RpdmUpCisgICAgICAgICAgICByYW1fYWRkciB8PSBJT19NRU1fVU5BU1NJR05FRDsKKyNl bmRpZgogICAgICAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KDB4MTAwMDAwMDAw VUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlXzRnX21l bV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRy KTsKQEAgLTE0NjgsNiArMTQ4MSwyNCBAQAogICAgICAgICAgICAgIGluaXRyZF9maWxlbmFt ZSwgY3B1X21vZGVsLCAwKTsKIH0KIAorI2lmZGVmIENPTkZJR19TRVJJQUxJQ0UKK3N0YXRp YyB2b2lkIHNlcmlhbGljZV9pbml0X3BjaShyYW1fYWRkcl90IHJhbV9zaXplLAorICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYm9vdF9kZXZpY2UsCisgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUsCisgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXJuZWxfY21kbGluZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmluaXRyZF9maWxlbmFtZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNwdV9tb2RlbCkKK3sKKyAgICBzZXJpYWxpY2Vf YWN0aXZlID0gMTsKKworICAgIHBjX2luaXQxKHJhbV9zaXplLCBib290X2RldmljZSwKKyAg ICAgICAgICAgICBrZXJuZWxfZmlsZW5hbWUsIGtlcm5lbF9jbWRsaW5lLAorICAgICAgICAg ICAgIGluaXRyZF9maWxlbmFtZSwgY3B1X21vZGVsLCAxKTsKKworICAgIHNlcmlhbGljZV9p bml0KCk7Cit9CisjZW5kaWYKKwogLyogc2V0IENNT1Mgc2h1dGRvd24gc3RhdHVzIHJlZ2lz dGVyIChpbmRleCAweEYpIGFzIFMzX3Jlc3VtZSgweEZFKQogICAgQklPUyB3aWxsIHJlYWQg aXQgYW5kIHN0YXJ0IFMzIHJlc3VtZSBhdCBQT1NUIEVudHJ5ICovCiB2b2lkIGNtb3Nfc2V0 X3MzX3Jlc3VtZSh2b2lkKQpAQCAtMTUxNSwxMSArMTU0NiwyMyBAQAogICAgIC5tYXhfY3B1 cyA9IDEsCiB9OwogCisjaWZkZWYgQ09ORklHX1NFUklBTElDRQorc3RhdGljIFFFTVVNYWNo aW5lIHNlcmlhbGljZV9tYWNoaW5lID0geworICAgIC5uYW1lID0gInNlcmlhbGljZSIsCisg ICAgLmRlc2MgPSAiU2VyaWFsSUNFIiwKKyAgICAuaW5pdCA9IHNlcmlhbGljZV9pbml0X3Bj aSwKKyAgICAubWF4X2NwdXMgPSAyNTUsCit9OworI2VuZGlmCisKIHN0YXRpYyB2b2lkIHBj X21hY2hpbmVfaW5pdCh2b2lkKQogewogICAgIHFlbXVfcmVnaXN0ZXJfbWFjaGluZSgmcGNf bWFjaGluZSk7CiAgICAgcWVtdV9yZWdpc3Rlcl9tYWNoaW5lKCZwY19tYWNoaW5lX3YwXzEw KTsKICAgICBxZW11X3JlZ2lzdGVyX21hY2hpbmUoJmlzYXBjX21hY2hpbmUpOworI2lmZGVm IENPTkZJR19TRVJJQUxJQ0UKKyAgICBxZW11X3JlZ2lzdGVyX21hY2hpbmUoJnNlcmlhbGlj ZV9tYWNoaW5lKTsKKyNlbmRpZgogfQogCiBtYWNoaW5lX2luaXQocGNfbWFjaGluZV9pbml0 KTsK --------------040104070002020902050901--