From owner-freebsd-stable@FreeBSD.ORG Thu Mar 10 05:24:36 2005 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6D4D516A4CE for ; Thu, 10 Mar 2005 05:24:36 +0000 (GMT) Received: from mail.distrust.net (mail.distrust.net [69.93.230.10]) by mx1.FreeBSD.org (Postfix) with ESMTP id E44EA43D41 for ; Thu, 10 Mar 2005 05:24:35 +0000 (GMT) (envelope-from dsze@alumni.uwaterloo.ca) Received: from eeyore.distrust.net (CPE00a0c978120d-CM00122570472e.cpe.net.cable.rogers.com [70.24.0.197]) (authenticated bits=0) by mail.distrust.net (8.12.11/8.12.11) with ESMTP id j2A5OTOp088259 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Wed, 9 Mar 2005 23:24:30 -0600 (CST) (envelope-from dsze@alumni.uwaterloo.ca) Message-Id: <6.2.1.2.2.20050310000250.05746d80@mail.distrust.net> X-Mailer: QUALCOMM Windows Eudora Version 6.2.1.2 Date: Thu, 10 Mar 2005 00:24:30 -0500 To: freebsd-stable@freebsd.org From: David Sze In-Reply-To: <6.2.1.2.2.20050308215231.0537dff0@mail.distrust.net> References: <4224F19C.2090207@rackspace.com> <6.2.1.2.2.20050301234017.03e93e68@pop3.tellurian.com> <4225CCE4.3080304@rackspace.com> <20050308235853.GA81150@mail.distrust.net> <422E4986.6080409@samsco.org> <6.2.1.2.2.20050308215231.0537dff0@mail.distrust.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=====================_-2029056031==_" X-Virus-Scanned: ClamAV 0.83/760/Wed Mar 9 11:12:01 2005 on mail.distrust.net X-Virus-Status: Clean Subject: Re: Can FreeBSD be installed on DellPowerEdge2800 ? X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Mar 2005 05:24:36 -0000 --=====================_-2029056031==_ Content-Type: text/plain; charset="us-ascii"; format=flowed At 09:15 PM 08/03/2005 -0600, David Sze wrote this to All: >At 05:55 PM 08/03/2005 -0700, Scott Long wrote this to All: > >>David Sze wrote: > >>On my 2850 the upper 1GB of RAM cannot be addressed without PAE support > >>in the kernel. However, amr in 4.11-RELEASE does indeed seem to have > >>trouble with PAE. The result being that with the option in the kernel, > >>the root device (ufs:/dev/amrd0s1a) cannot be found. > >> > >>I backported scottl's amr PAE fixes from RELENG_5; the diffs applied > >>cleanly (with offsets). I'm happy to report that my 2850 can now > >>address its full 4GB and see its amr volumes. > >> > >>The diff against 4.11-RELEASE is attached, hopefully someone will be > >>willing to commit it to RELENG_4. > > > >I don't have the cycles to watch after RELENG_4, so I'll have to take > >your word that this works. What date is this patch against? I > >committed some follow-up fixes last week that are required for > >management apps to work (and yes, LSI is getting ready to support > >FreeBSD with management apps). > >The patch is against 4.11-RELEASE, and is just a backport of your commit >from Dec. 5th >(http://lists.freebsd.org/pipermail/cvs-all/2004-December/094923.html). >There haven't been any changes to amr since release, so it should apply >directly to RELENG_4 as well. > >I left out the subsequent ioctl fixes and LSI 320-2E support. They look >straightforward, but I don't have the software or hardware to test them. >If you'd like them in there before committing to RELENG_4, I can take a >stab at it and post a new patch. A new patch is attached to this message that synchronizes the RELENG_4 amr driver with CURRENT, minus the SMPng locking and amd64/ia64 ioctl compatibility stuff. The fixes and their corresponding file revisions are: Greater than 4GB support amr.c 1.55, 1.56, 1.59 amr_cam.c 1.10 amr_pci.c 1.24 amrvar.h 1.23 ioctl fixes for LSI management tools amr.c 1.60, 1.61 Fix module unloading amr_cam.c 1.12 amrvar.h 1.24 Check for NULL amrd_sc in amrd_dump amr_disk.c 1.32 Support for LSI 320-2E PCI Express controller amr_pci.c 1.27 amrreg.h 1.8 amrvar.h 1.26 The only part of the patch I've tested is the >4GB support. The rest compiles but I can't vouch for its validity because I don't have the software or hardware to test. --=====================_-2029056031==_ Content-Type: application/octet-stream; name="amr-4.x-MFC.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="amr-4.x-MFC.patch" KioqIHN5cy9kZXYvYW1yL2Ftci5jLm9yaWcJVGh1IEp1bCAyMiAwOTozNToxOCAyMDA0Ci0tLSBz eXMvZGV2L2Ftci9hbXIuYwlXZWQgTWFyICA5IDA4OjM2OjI4IDIwMDUKKioqKioqKioqKioqKioq CioqKiAxLDYgKioqKgotLS0gMSw3IC0tLS0KICAvKi0KICAgKiBDb3B5cmlnaHQgKGMpIDE5OTks MjAwMCBNaWNoYWVsIFNtaXRoCiAgICogQ29weXJpZ2h0IChjKSAyMDAwIEJTRGkKKyAgKiBDb3B5 cmlnaHQgKGMpIDIwMDUgU2NvdHQgTG9uZwogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoK ICAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKioqKioqKioqKioqKioqCioqKiAyNSwzMSAqKioqCiAgICogU1VDSCBE QU1BR0UuCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRXJpYyBNb29yZQohICAqIENvcHly aWdodCAoYykgMjAwMiBMU0kgTG9naWMgQ29ycG9yYXRpb24KICAgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgogICAqCiAgICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0tLSAyNiwzMiAtLS0tCiAgICogU1VDSCBEQU1BR0Uu CiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRXJpYyBNb29yZQohICAqIENvcHlyaWdodCAo YykgMjAwMiwgMjAwNCBMU0kgTG9naWMgQ29ycG9yYXRpb24KICAgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgogICAqCiAgICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CioqKioqKioqKioqKioqKgoqKiogMTMyLDE0MyAqKioq CiAgICogQ29tbWFuZCBwcm9jZXNzaW5nLgogICAqLwogIHN0YXRpYyBpbnQJYW1yX2Jpb19jb21t YW5kKHN0cnVjdCBhbXJfc29mdGMgKnNjLCBzdHJ1Y3QgYW1yX2NvbW1hbmQgKiphY3ApOwohIHN0 YXRpYyBpbnQJYW1yX3dhaXRfY29tbWFuZChzdHJ1Y3QgYW1yX2NvbW1hbmQgKmFjKTsKICBzdGF0 aWMgaW50CWFtcl9nZXRzbG90KHN0cnVjdCBhbXJfY29tbWFuZCAqYWMpOwohIHN0YXRpYyB2b2lk CWFtcl9tYXBjbWQoc3RydWN0IGFtcl9jb21tYW5kICphYyk7CiAgc3RhdGljIHZvaWQJYW1yX3Vu bWFwY21kKHN0cnVjdCBhbXJfY29tbWFuZCAqYWMpOwogIHN0YXRpYyBpbnQJYW1yX3N0YXJ0KHN0 cnVjdCBhbXJfY29tbWFuZCAqYWMpOwogIHN0YXRpYyB2b2lkCWFtcl9jb21wbGV0ZSh2b2lkICpj b250ZXh0LCBpbnQgcGVuZGluZyk7CiAgCiAgLyoKICAgKiBTdGF0dXMgbW9uaXRvcmluZwotLS0g MTMzLDE0NyAtLS0tCiAgICogQ29tbWFuZCBwcm9jZXNzaW5nLgogICAqLwogIHN0YXRpYyBpbnQJ YW1yX2Jpb19jb21tYW5kKHN0cnVjdCBhbXJfc29mdGMgKnNjLCBzdHJ1Y3QgYW1yX2NvbW1hbmQg KiphY3ApOwohIHN0YXRpYyBpbnQJYW1yX3dhaXRfY29tbWFuZChzdHJ1Y3QgYW1yX2NvbW1hbmQg KmFjKSBfX3VudXNlZDsKICBzdGF0aWMgaW50CWFtcl9nZXRzbG90KHN0cnVjdCBhbXJfY29tbWFu ZCAqYWMpOwohIHN0YXRpYyBpbnQJYW1yX21hcGNtZChzdHJ1Y3QgYW1yX2NvbW1hbmQgKmFjKTsK ICBzdGF0aWMgdm9pZAlhbXJfdW5tYXBjbWQoc3RydWN0IGFtcl9jb21tYW5kICphYyk7CiAgc3Rh dGljIGludAlhbXJfc3RhcnQoc3RydWN0IGFtcl9jb21tYW5kICphYyk7Cisgc3RhdGljIGludAlh bXJfc3RhcnQxKHN0cnVjdCBhbXJfc29mdGMgKnNjLCBzdHJ1Y3QgYW1yX2NvbW1hbmQgKmFjKTsK ICBzdGF0aWMgdm9pZAlhbXJfY29tcGxldGUodm9pZCAqY29udGV4dCwgaW50IHBlbmRpbmcpOwor IHN0YXRpYyB2b2lkCWFtcl9zZXR1cF9kbWFtYXAodm9pZCAqYXJnLCBidXNfZG1hX3NlZ21lbnRf dCAqc2VncywgaW50IG5zZWdtZW50cywgaW50IGVycm9yKTsKKyBzdGF0aWMgdm9pZAlhbXJfc2V0 dXBfZGF0YV9kbWFtYXAodm9pZCAqYXJnLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5z ZWdtZW50cywgaW50IGVycm9yKTsKICAKICAvKgogICAqIFN0YXR1cyBtb25pdG9yaW5nCioqKioq KioqKioqKioqKgoqKiogMTUwLDE1NSAqKioqCi0tLSAxNTQsMTYwIC0tLS0KICBzdGF0aWMgaW50 CWFtcl9xdWFydHpfc3VibWl0X2NvbW1hbmQoc3RydWN0IGFtcl9zb2Z0YyAqc2MpOwogIHN0YXRp YyBpbnQJYW1yX3F1YXJ0el9nZXRfd29yayhzdHJ1Y3QgYW1yX3NvZnRjICpzYywgc3RydWN0IGFt cl9tYWlsYm94ICptYnNhdmUpOwogIHN0YXRpYyBpbnQJYW1yX3F1YXJ0el9wb2xsX2NvbW1hbmQo c3RydWN0IGFtcl9jb21tYW5kICphYyk7Cisgc3RhdGljIGludAlhbXJfcXVhcnR6X3BvbGxfY29t bWFuZDEoc3RydWN0IGFtcl9zb2Z0YyAqc2MsIHN0cnVjdCBhbXJfY29tbWFuZCAqYWMpOwogIAog IHN0YXRpYyBpbnQJYW1yX3N0ZF9zdWJtaXRfY29tbWFuZChzdHJ1Y3QgYW1yX3NvZnRjICpzYyk7 CiAgc3RhdGljIGludAlhbXJfc3RkX2dldF93b3JrKHN0cnVjdCBhbXJfc29mdGMgKnNjLCBzdHJ1 Y3QgYW1yX21haWxib3ggKm1ic2F2ZSk7CioqKioqKioqKioqKioqKgoqKiogMjE3LDIyMiAqKioq Ci0tLSAyMjIsMjI4IC0tLS0KICAJc2MtPmFtcl9zdWJtaXRfY29tbWFuZCA9IGFtcl9xdWFydHpf c3VibWl0X2NvbW1hbmQ7CiAgCXNjLT5hbXJfZ2V0X3dvcmsgICAgICAgPSBhbXJfcXVhcnR6X2dl dF93b3JrOwogIAlzYy0+YW1yX3BvbGxfY29tbWFuZCAgID0gYW1yX3F1YXJ0el9wb2xsX2NvbW1h bmQ7CisgCXNjLT5hbXJfcG9sbF9jb21tYW5kMSAgPSBhbXJfcXVhcnR6X3BvbGxfY29tbWFuZDE7 CiAgICAgIH0gZWxzZSB7CiAgCXNjLT5hbXJfc3VibWl0X2NvbW1hbmQgPSBhbXJfc3RkX3N1Ym1p dF9jb21tYW5kOwogIAlzYy0+YW1yX2dldF93b3JrICAgICAgID0gYW1yX3N0ZF9nZXRfd29yazsK KioqKioqKioqKioqKioqCioqKiA0MzAsNDM3ICoqKioKICAKICAgICAgY2FzZSBBTVJfSU9fQ09N TUFORDoKICAJZGVidWcoMSwgIkFNUl9JT19DT01NQU5EICAweCV4IiwgYXUtPmF1X2NtZFswXSk7 CiAgCS8qIGhhbmRsZSBpbmJvdW5kIGRhdGEgYnVmZmVyICovCiEgCWlmIChhdS0+YXVfbGVuZ3Ro ICE9IDApIHsKICAJICAgIGlmICgoZHAgPSBtYWxsb2MoYXUtPmF1X2xlbmd0aCwgTV9ERVZCVUYs IE1fV0FJVE9LKSkgPT0gTlVMTCkgewogIAkJZXJyb3IgPSBFTk9NRU07CiAgCQlicmVhazsKLS0t IDQzNiw0NDcgLS0tLQogIAogICAgICBjYXNlIEFNUl9JT19DT01NQU5EOgogIAlkZWJ1ZygxLCAi QU1SX0lPX0NPTU1BTkQgIDB4JXgiLCBhdS0+YXVfY21kWzBdKTsKKyAJLyogTG9naWNhbCBEcml2 ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KKyAJaWYgKGF1LT5hdV9jbWRbMF0gPT0g MHhhNCAmJiBhdS0+YXVfY21kWzFdID09IDB4MWMpCisgCSAgICByZXR1cm4gKEVOT0lPQ1RMKTsK KyAKICAJLyogaGFuZGxlIGluYm91bmQgZGF0YSBidWZmZXIgKi8KISAJaWYgKGF1LT5hdV9sZW5n dGggIT0gMCAmJiBhdS0+YXVfY21kWzBdICE9IDB4MDYpIHsKICAJICAgIGlmICgoZHAgPSBtYWxs b2MoYXUtPmF1X2xlbmd0aCwgTV9ERVZCVUYsIE1fV0FJVE9LKSkgPT0gTlVMTCkgewogIAkJZXJy b3IgPSBFTk9NRU07CiAgCQlicmVhazsKKioqKioqKioqKioqKioqCioqKiA2ODEsNjkwICoqKioK ICAgICAgaWYgKChhYyA9IGFtcl9hbGxvY2NtZChzYykpID09IE5VTEwpCiAgCWdvdG8gb3V0Owog ICAgICAvKiBhbGxvY2F0ZSB0aGUgcmVzcG9uc2Ugc3RydWN0dXJlICovCiEgICAgIGlmICgocmVz dWx0ID0gbWFsbG9jKGJ1ZnNpemUsIE1fREVWQlVGLCBNX05PV0FJVCkpID09IE5VTEwpCiAgCWdv dG8gb3V0OwogICAgICAvKiBzZXQgY29tbWFuZCBmbGFncyAqLwohICAgICBhYy0+YWNfZmxhZ3Mg fD0gQU1SX0NNRF9QUklPUklUWSB8IEFNUl9DTURfREFUQU9VVDsKICAgICAgCiAgICAgIC8qIHBv aW50IHRoZSBjb21tYW5kIGF0IG91ciBkYXRhICovCiAgICAgIGFjLT5hY19kYXRhID0gcmVzdWx0 OwotLS0gNjkxLDcwMSAtLS0tCiAgICAgIGlmICgoYWMgPSBhbXJfYWxsb2NjbWQoc2MpKSA9PSBO VUxMKQogIAlnb3RvIG91dDsKICAgICAgLyogYWxsb2NhdGUgdGhlIHJlc3BvbnNlIHN0cnVjdHVy ZSAqLwohICAgICBpZiAoKHJlc3VsdCA9IG1hbGxvYyhidWZzaXplLCBNX0RFVkJVRiwgTV9aRVJP fE1fTk9XQUlUKSkgPT0gTlVMTCkKICAJZ290byBvdXQ7CiAgICAgIC8qIHNldCBjb21tYW5kIGZs YWdzICovCiEgCiEgICAgIGFjLT5hY19mbGFncyB8PSBBTVJfQ01EX1BSSU9SSVRZIHwgQU1SX0NN RF9EQVRBSU47CiAgICAgIAogICAgICAvKiBwb2ludCB0aGUgY29tbWFuZCBhdCBvdXIgZGF0YSAq LwogICAgICBhYy0+YWNfZGF0YSA9IHJlc3VsdDsKKioqKioqKioqKioqKioqCioqKiA3OTQsNzk5 ICoqKioKLS0tIDgwNSw4MTQgLS0tLQogICAgICAvKiBzcGluIHVudGlsIHNvbWV0aGluZyBwcmV2 ZW50cyB1cyBmcm9tIGRvaW5nIGFueSB3b3JrICovCiAgICAgIGZvciAoOzspIHsKICAKKyAJLyog RG9uJ3QgYm90aGVyIHRvIHF1ZXVlIGNvbW1hbmRzIG5vIGJvdW5jZSBidWZmZXJzIGFyZSBhdmFp bGFibGUuICovCisgCWlmIChzYy0+YW1yX3N0YXRlICYgQU1SX1NUQVRFX1FVRVVFX0ZSWk4pCisg CSAgICBicmVhazsKKyAKICAJLyogdHJ5IHRvIGdldCBhIHJlYWR5IGNvbW1hbmQgKi8KICAJYWMg PSBhbXJfZGVxdWV1ZV9yZWFkeShzYyk7CiAgCioqKioqKioqKioqKioqKgoqKiogOTY3LDk3MiAq KioqCi0tLSA5ODIsOTk4IC0tLS0KICAgICAgcmV0dXJuKGVycm9yKTsKICB9CiAgCisgc3RhdGlj IHZvaWQKKyBhbXJfc2V0dXBfcG9sbGVkX2RtYW1hcCh2b2lkICphcmcsIGJ1c19kbWFfc2VnbWVu dF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnIpCisgeworICAgICBzdHJ1Y3QgYW1yX2NvbW1h bmQgKmFjID0gYXJnOworICAgICBzdHJ1Y3QgYW1yX3NvZnRjICpzYyA9IGFjLT5hY19zYzsKKyAK KyAgICAgYW1yX3NldHVwX2RtYW1hcChhcmcsIHNlZ3MsIG5zZWdzLCBlcnIpOworICAgICBidXNf ZG1hbWFwX3N5bmMoc2MtPmFtcl9idWZmZXJfZG1hdCxhYy0+YWNfZG1hbWFwLEJVU19ETUFTWU5D X1BSRVJFQUQpOworICAgICBzYy0+YW1yX3BvbGxfY29tbWFuZDEoc2MsIGFjKTsKKyB9CisgCiAg LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCiAgICogVGFrZSBhIGNvbW1hbmQsIHN1Ym1pdCBpdCB0 byB0aGUgY29udHJvbGxlciBhbmQgYnVzeS13YWl0IGZvciBpdCB0byByZXR1cm4uCiAgICogUmV0 dXJucyBub256ZXJvIG9uIGVycm9yLiAgQ2FuIGJlIHNhZmVseSBjYWxsZWQgd2l0aCBpbnRlcnJ1 cHRzIGVuYWJsZWQuCioqKioqKioqKioqKioqKgoqKiogOTc1LDk5MSAqKioqCiAgYW1yX3F1YXJ0 el9wb2xsX2NvbW1hbmQoc3RydWN0IGFtcl9jb21tYW5kICphYykKICB7CiAgICAgIHN0cnVjdCBh bXJfc29mdGMJKnNjID0gYWMtPmFjX3NjOwohICAgICBpbnQJCQlzOwohICAgICBpbnQJCQllcnJv cixjb3VudDsKICAKICAgICAgZGVidWdfY2FsbGVkKDIpOwogIAogICAgICAvKiBub3cgd2UgaGF2 ZSBhIHNsb3QsIHdlIGNhbiBtYXAgdGhlIGNvbW1hbmQgKHVubWFwcGVkIGluIGFtcl9jb21wbGV0 ZSkgKi8KISAgICAgYW1yX21hcGNtZChhYyk7CiAgCiEgICAgIHMgPSBzcGxiaW8oKTsKICAKISAg ICAgaWYgKChzYy0+YW1yX3N0YXRlICYgQU1SX1NUQVRFX0NSQVNIRFVNUCkgPT0gMCkgewogIAlj b3VudD0wOwogIAl3aGlsZSAoc2MtPmFtcl9idXN5c2xvdHMpewogIAkgICAgdHNsZWVwKHNjLCBQ UklCSU8gfCBQQ0FUQ0gsICJhbXJwb2xsIiwgaHopOwotLS0gMTAwMSwxMDMzIC0tLS0KICBhbXJf cXVhcnR6X3BvbGxfY29tbWFuZChzdHJ1Y3QgYW1yX2NvbW1hbmQgKmFjKQogIHsKICAgICAgc3Ry dWN0IGFtcl9zb2Z0Ywkqc2MgPSBhYy0+YWNfc2M7CiEgICAgIGludAkJCXMsIGVycm9yOwogIAog ICAgICBkZWJ1Z19jYWxsZWQoMik7CiAgCisgICAgIHMgPSBzcGxiaW8oKTsKKyAgICAgZXJyb3Ig PSAwOworIAogICAgICAvKiBub3cgd2UgaGF2ZSBhIHNsb3QsIHdlIGNhbiBtYXAgdGhlIGNvbW1h bmQgKHVubWFwcGVkIGluIGFtcl9jb21wbGV0ZSkgKi8KISAgICAgaWYgKGFjLT5hY19kYXRhICE9 IDApIHsKISAJaWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+YW1yX2J1ZmZlcl9kbWF0LCBhYy0+YWNf ZG1hbWFwLCBhYy0+YWNfZGF0YSwKISAJICAgIGFjLT5hY19sZW5ndGgsIGFtcl9zZXR1cF9wb2xs ZWRfZG1hbWFwLCBhYywgQlVTX0RNQV9OT1dBSVQpICE9IDApIHsKISAJICAgIGVycm9yID0gMTsK ISAJfQohICAgICB9IGVsc2UgewohIAllcnJvciA9IGFtcl9xdWFydHpfcG9sbF9jb21tYW5kMShz YywgYWMpOwohICAgICB9CiAgCiEgICAgIHNwbHgocyk7CiEgICAgIHJldHVybiAoZXJyb3IpOwoh IH0KISAKISBzdGF0aWMgaW50CiEgYW1yX3F1YXJ0el9wb2xsX2NvbW1hbmQxKHN0cnVjdCBhbXJf c29mdGMgKnNjLCBzdHJ1Y3QgYW1yX2NvbW1hbmQgKmFjKQohIHsKISAgICAgaW50IGNvdW50LCBl cnJvcjsKICAKISAgICAgaWYgKChzYy0+YW1yX3N0YXRlICYgQU1SX1NUQVRFX0lOVEVOKSA9PSAw KSB7CiAgCWNvdW50PTA7CiAgCXdoaWxlIChzYy0+YW1yX2J1c3lzbG90cyl7CiAgCSAgICB0c2xl ZXAoc2MsIFBSSUJJTyB8IFBDQVRDSCwgImFtcnBvbGwiLCBoeik7CioqKioqKioqKioqKioqKgoq KiogOTk2LDEwMDMgKioqKgogIAogIAlpZihzYy0+YW1yX2J1c3lzbG90cykgewogIAkgICAgZGV2 aWNlX3ByaW50ZihzYy0+YW1yX2RldiwgImFkYXB0ZXIgaXMgYnVzeVxuIik7CiEgCSAgICBzcGx4 KHMpOwohIAkgICAgYW1yX3VubWFwY21kKGFjKTsKICAgICAgCSAgICBhYy0+YWNfc3RhdHVzPTA7 CiAgCSAgICByZXR1cm4oMSk7CiAgICAgICAgICB9Ci0tLSAxMDM4LDEwNDUgLS0tLQogIAogIAlp ZihzYy0+YW1yX2J1c3lzbG90cykgewogIAkgICAgZGV2aWNlX3ByaW50ZihzYy0+YW1yX2Rldiwg ImFkYXB0ZXIgaXMgYnVzeVxuIik7CiEgCSAgICBpZiAoYWMtPmFjX2RhdGEgIT0gTlVMTCkKISAJ CWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5hbXJfYnVmZmVyX2RtYXQsIGFjLT5hY19kbWFtYXApOwog ICAgICAJICAgIGFjLT5hY19zdGF0dXM9MDsKICAJICAgIHJldHVybigxKTsKICAgICAgICAgIH0K KioqKioqKioqKioqKioqCioqKiAxMDI3LDEwMzYgKioqKgogICAgICBBTVJfUVBVVF9JREIoc2Ms IHNjLT5hbXJfbWFpbGJveHBoeXMgfCBBTVJfUUlEQl9BQ0spOwogICAgICB3aGlsZShBTVJfUUdF VF9JREIoc2MpICYgQU1SX1FJREJfQUNLKTsKICAKLSAgICAgc3BseChzKTsKLSAKICAgICAgLyog dW5tYXAgdGhlIGNvbW1hbmQncyBkYXRhIGJ1ZmZlciAqLwohICAgICBhbXJfdW5tYXBjbWQoYWMp OwogIAogICAgICByZXR1cm4oZXJyb3IpOwogIH0KLS0tIDEwNjksMTA3NyAtLS0tCiAgICAgIEFN Ul9RUFVUX0lEQihzYywgc2MtPmFtcl9tYWlsYm94cGh5cyB8IEFNUl9RSURCX0FDSyk7CiAgICAg IHdoaWxlKEFNUl9RR0VUX0lEQihzYykgJiBBTVJfUUlEQl9BQ0spOwogIAogICAgICAvKiB1bm1h cCB0aGUgY29tbWFuZCdzIGRhdGEgYnVmZmVyICovCiEgICAgIGJ1c19kbWFtYXBfc3luYyhzYy0+ YW1yX2J1ZmZlcl9kbWF0LCBhYy0+YWNfZG1hbWFwLCBCVVNfRE1BU1lOQ19QT1NUUkVBRCk7CiEg ICAgIGJ1c19kbWFtYXBfdW5sb2FkKHNjLT5hbXJfYnVmZmVyX2RtYXQsIGFjLT5hY19kbWFtYXAp OwogIAogICAgICByZXR1cm4oZXJyb3IpOwogIH0KKioqKioqKioqKioqKioqCioqKiAxMTEzLDEx MjQgKioqKgogICAgICB9IGVsc2UgewogICAgICAgICAgYWMtPmFjX21haWxib3gubWJfbnNnZWxl bSA9IG5zZWdtZW50czsKICAJKnNnYyA9IG5zZWdtZW50czsKISAJYWMtPmFjX21haWxib3gubWJf cGh5c2FkZHIgPSBzYy0+YW1yX3NnYnVzYWRkciArIChhYy0+YWNfc2xvdCAqIEFNUl9OU0VHICog c2l6ZW9mKHN0cnVjdCBhbXJfc2dlbnRyeSkpOwogIAlmb3IgKGkgPSAwOyBpIDwgbnNlZ21lbnRz OyBpKyssIHNnKyspIHsKICAJICAgIHNnLT5zZ19hZGRyID0gc2Vnc1tpXS5kc19hZGRyOwogIAkg ICAgc2ctPnNnX2NvdW50ID0gc2Vnc1tpXS5kc19sZW47CiAgCX0KICAgICAgfQogIH0KICAKICBz dGF0aWMgdm9pZAotLS0gMTE1NCwxMTY3IC0tLS0KICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFj LT5hY19tYWlsYm94Lm1iX25zZ2VsZW0gPSBuc2VnbWVudHM7CiAgCSpzZ2MgPSBuc2VnbWVudHM7 CiEgCWFjLT5hY19tYWlsYm94Lm1iX3BoeXNhZGRyID0gc2MtPmFtcl9zZ2J1c2FkZHIgKwohIAkg ICAgKGFjLT5hY19zbG90ICogQU1SX05TRUcgKiBzaXplb2Yoc3RydWN0IGFtcl9zZ2VudHJ5KSk7 CiAgCWZvciAoaSA9IDA7IGkgPCBuc2VnbWVudHM7IGkrKywgc2crKykgewogIAkgICAgc2ctPnNn X2FkZHIgPSBzZWdzW2ldLmRzX2FkZHI7CiAgCSAgICBzZy0+c2dfY291bnQgPSBzZWdzW2ldLmRz X2xlbjsKICAJfQogICAgICB9CisgCiAgfQogIAogIHN0YXRpYyB2b2lkCioqKioqKioqKioqKioq KgoqKiogMTE0MiwxMTU3ICoqKioKICAJfSBlbHNlIHsKICAJICAgIC8qIHNhdmUgcy9nIHRhYmxl IGluZm9ybWF0aW9uIGluIHBhc3N0aHJvdWdoICovCiAgCSAgICBhZXAtPmFwX25vX3NnX2VsZW1l bnRzID0gbnNlZ21lbnRzOwohIAkgICAgYWVwLT5hcF9kYXRhX3RyYW5zZmVyX2FkZHJlc3MgPSBz Yy0+YW1yX3NnYnVzYWRkciArIChhYy0+YWNfc2xvdCAqIEFNUl9OU0VHICogc2l6ZW9mKHN0cnVj dCBhbXJfc2dlbnRyeSkpOwohIAkgICAgLyogcG9wdWxhdGUgcy9nIHRhYmxlIChvdmVyd3JpdGVz IHByZXZpb3VzIGNhbGwgd2hpY2ggbWFwcGVkIHRoZSBwYXNzdGhyb3VnaCkgKi8KICAJICAgIGZv ciAoaSA9IDA7IGkgPCBuc2VnbWVudHM7IGkrKywgc2crKykgewogIAkJc2ctPnNnX2FkZHIgPSBz ZWdzW2ldLmRzX2FkZHI7CiAgCQlzZy0+c2dfY291bnQgPSBzZWdzW2ldLmRzX2xlbjsKICAJCWRl YnVnKDMsICIgJWQ6IDB4JXgvJWQiLCBpLCBzZy0+c2dfYWRkciwgc2ctPnNnX2NvdW50KTsKICAJ ICAgIH0KICAJfQohIAlkZWJ1ZygzLCAic2xvdCAlZCAgJWQgc2VnbWVudHMgYXQgMHgleCwgcGFz c3Rocm91Z2ggYXQgMHgleCIsIGFjLT5hY19zbG90LAohIAkgICAgYWVwLT5hcF9ub19zZ19lbGVt ZW50cywgYWVwLT5hcF9kYXRhX3RyYW5zZmVyX2FkZHJlc3MsIGFjLT5hY19kYXRhcGh5cyk7CiAg ICAgIH0gZWxzZSB7CiAgCWlmIChuc2VnbWVudHMgPCAyKSB7CiAgCSAgICBhcC0+YXBfbm9fc2df ZWxlbWVudHMgPSAwOwotLS0gMTE4NSwxMjA1IC0tLS0KICAJfSBlbHNlIHsKICAJICAgIC8qIHNh dmUgcy9nIHRhYmxlIGluZm9ybWF0aW9uIGluIHBhc3N0aHJvdWdoICovCiAgCSAgICBhZXAtPmFw X25vX3NnX2VsZW1lbnRzID0gbnNlZ21lbnRzOwohIAkgICAgYWVwLT5hcF9kYXRhX3RyYW5zZmVy X2FkZHJlc3MgPSBzYy0+YW1yX3NnYnVzYWRkciArCiEgCQkoYWMtPmFjX3Nsb3QgKiBBTVJfTlNF RyAqIHNpemVvZihzdHJ1Y3QgYW1yX3NnZW50cnkpKTsKISAJICAgIC8qCiEgCSAgICAgKiBwb3B1 bGF0ZSBzL2cgdGFibGUgKG92ZXJ3cml0ZXMgcHJldmlvdXMgY2FsbCB3aGljaCBtYXBwZWQgdGhl CiEgCSAgICAgKiBwYXNzdGhyb3VnaCkKISAJICAgICAqLwogIAkgICAgZm9yIChpID0gMDsgaSA8 IG5zZWdtZW50czsgaSsrLCBzZysrKSB7CiAgCQlzZy0+c2dfYWRkciA9IHNlZ3NbaV0uZHNfYWRk cjsKICAJCXNnLT5zZ19jb3VudCA9IHNlZ3NbaV0uZHNfbGVuOwogIAkJZGVidWcoMywgIiAlZDog MHgleC8lZCIsIGksIHNnLT5zZ19hZGRyLCBzZy0+c2dfY291bnQpOwogIAkgICAgfQogIAl9CiEg CWRlYnVnKDMsICJzbG90ICVkICAlZCBzZWdtZW50cyBhdCAweCV4LCBwYXNzdGhyb3VnaCBhdCAw eCV4XG4iLAohIAkgICAgYWMtPmFjX3Nsb3QsIGFlcC0+YXBfbm9fc2dfZWxlbWVudHMsIGFlcC0+ YXBfZGF0YV90cmFuc2Zlcl9hZGRyZXNzLAohIAkgICAgYWMtPmFjX2RhdGFwaHlzKTsKICAgICAg fSBlbHNlIHsKICAJaWYgKG5zZWdtZW50cyA8IDIpIHsKICAJICAgIGFwLT5hcF9ub19zZ19lbGVt ZW50cyA9IDA7CioqKioqKioqKioqKioqKgoqKiogMTE1OSwxMTc4ICoqKioKICAJfSBlbHNlIHsK ICAJICAgIC8qIHNhdmUgcy9nIHRhYmxlIGluZm9ybWF0aW9uIGluIHBhc3N0aHJvdWdoICovCiAg CSAgICBhcC0+YXBfbm9fc2dfZWxlbWVudHMgPSBuc2VnbWVudHM7CiEgCSAgICBhcC0+YXBfZGF0 YV90cmFuc2Zlcl9hZGRyZXNzID0gc2MtPmFtcl9zZ2J1c2FkZHIgKyAoYWMtPmFjX3Nsb3QgKiBB TVJfTlNFRyAqIHNpemVvZihzdHJ1Y3QgYW1yX3NnZW50cnkpKTsKISAJICAgIC8qIHBvcHVsYXRl IHMvZyB0YWJsZSAob3ZlcndyaXRlcyBwcmV2aW91cyBjYWxsIHdoaWNoIG1hcHBlZCB0aGUgcGFz c3Rocm91Z2gpICovCiAgCSAgICBmb3IgKGkgPSAwOyBpIDwgbnNlZ21lbnRzOyBpKyssIHNnKysp IHsKICAJCXNnLT5zZ19hZGRyID0gc2Vnc1tpXS5kc19hZGRyOwogIAkJc2ctPnNnX2NvdW50ID0g c2Vnc1tpXS5kc19sZW47CiAgCQlkZWJ1ZygzLCAiICVkOiAweCV4LyVkIiwgaSwgc2ctPnNnX2Fk ZHIsIHNnLT5zZ19jb3VudCk7CiAgCSAgICB9CiAgCX0KISAJZGVidWcoMywgInNsb3QgJWQgICVk IHNlZ21lbnRzIGF0IDB4JXgsIHBhc3N0aHJvdWdoIGF0IDB4JXgiLCBhYy0+YWNfc2xvdCwKISAJ ICAgIGFwLT5hcF9ub19zZ19lbGVtZW50cywgYXAtPmFwX2RhdGFfdHJhbnNmZXJfYWRkcmVzcywg YWMtPmFjX2RhdGFwaHlzKTsKISAgICAgfQogIH0KICAKISBzdGF0aWMgdm9pZAogIGFtcl9tYXBj bWQoc3RydWN0IGFtcl9jb21tYW5kICphYykKICB7CiAgICAgIHN0cnVjdCBhbXJfc29mdGMJKnNj ID0gYWMtPmFjX3NjOwotLS0gMTIwNywxMjQ4IC0tLS0KICAJfSBlbHNlIHsKICAJICAgIC8qIHNh dmUgcy9nIHRhYmxlIGluZm9ybWF0aW9uIGluIHBhc3N0aHJvdWdoICovCiAgCSAgICBhcC0+YXBf bm9fc2dfZWxlbWVudHMgPSBuc2VnbWVudHM7CiEgCSAgICBhcC0+YXBfZGF0YV90cmFuc2Zlcl9h ZGRyZXNzID0gc2MtPmFtcl9zZ2J1c2FkZHIgKwohIAkJKGFjLT5hY19zbG90ICogQU1SX05TRUcg KiBzaXplb2Yoc3RydWN0IGFtcl9zZ2VudHJ5KSk7CiEgCSAgICAvKgohIAkgICAgICogcG9wdWxh dGUgcy9nIHRhYmxlIChvdmVyd3JpdGVzIHByZXZpb3VzIGNhbGwgd2hpY2ggbWFwcGVkIHRoZQoh IAkgICAgICogcGFzc3Rocm91Z2gpCiEgCSAgICAgKi8KICAJICAgIGZvciAoaSA9IDA7IGkgPCBu c2VnbWVudHM7IGkrKywgc2crKykgewogIAkJc2ctPnNnX2FkZHIgPSBzZWdzW2ldLmRzX2FkZHI7 CiAgCQlzZy0+c2dfY291bnQgPSBzZWdzW2ldLmRzX2xlbjsKICAJCWRlYnVnKDMsICIgJWQ6IDB4 JXgvJWQiLCBpLCBzZy0+c2dfYWRkciwgc2ctPnNnX2NvdW50KTsKICAJICAgIH0KICAJfQohIAlk ZWJ1ZygzLCAic2xvdCAlZCAgJWQgc2VnbWVudHMgYXQgMHgleCwgcGFzc3Rocm91Z2ggYXQgMHgl eCIsCiEgCSAgICBhYy0+YWNfc2xvdCwgYXAtPmFwX25vX3NnX2VsZW1lbnRzLCBhcC0+YXBfZGF0 YV90cmFuc2Zlcl9hZGRyZXNzLAohIAkgICAgYWMtPmFjX2RhdGFwaHlzKTsKISAgICAgfQohICAg ICBpZiAoYWMtPmFjX2ZsYWdzICYgQU1SX0NNRF9DQ0JfREFUQUlOKQohIAlidXNfZG1hbWFwX3N5 bmMoc2MtPmFtcl9idWZmZXJfZG1hdCwgYWMtPmFjX2NjYl9kbWFtYXAsCiEgCSAgICBCVVNfRE1B U1lOQ19QUkVSRUFEKTsKISAgICAgaWYgKGFjLT5hY19mbGFncyAmIEFNUl9DTURfQ0NCX0RBVEFP VVQpCiEgCWJ1c19kbWFtYXBfc3luYyhzYy0+YW1yX2J1ZmZlcl9kbWF0LCBhYy0+YWNfY2NiX2Rt YW1hcCwKISAJICAgIEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKISAgICAgaWYgKChhYy0+YWNfZmxh Z3MgJiAoQU1SX0NNRF9DQ0JfREFUQUlOIHwgQU1SX0NNRF9DQ0JfREFUQU9VVCkpID09IDApCiEg CXBhbmljKCJubyBkaXJlY3Rpb24gZm9yIGNjYj9cbiIpOwohIAohICAgICBpZiAoYWMtPmFjX2Zs YWdzICYgQU1SX0NNRF9EQVRBSU4pCiEgCWJ1c19kbWFtYXBfc3luYyhzYy0+YW1yX2J1ZmZlcl9k bWF0LGFjLT5hY19kbWFtYXAsQlVTX0RNQVNZTkNfUFJFUkVBRCk7CiEgICAgIGlmIChhYy0+YWNf ZmxhZ3MgJiBBTVJfQ01EX0RBVEFPVVQpCiEgCWJ1c19kbWFtYXBfc3luYyhzYy0+YW1yX2J1ZmZl cl9kbWF0LGFjLT5hY19kbWFtYXAsQlVTX0RNQVNZTkNfUFJFV1JJVEUpOwohIAohICAgICBhYy0+ YWNfZmxhZ3MgfD0gQU1SX0NNRF9NQVBQRUQ7CiEgCiEgICAgIGFtcl9zdGFydDEoc2MsIGFjKTsK ICB9CiAgCiEgc3RhdGljIGludAogIGFtcl9tYXBjbWQoc3RydWN0IGFtcl9jb21tYW5kICphYykK ICB7CiAgICAgIHN0cnVjdCBhbXJfc29mdGMJKnNjID0gYWMtPmFjX3NjOwoqKioqKioqKioqKioq KioKKioqIDExODAsMTIwNyAqKioqCiAgICAgIGRlYnVnX2NhbGxlZCgzKTsKICAKICAgICAgLyog aWYgdGhlIGNvbW1hbmQgaW52b2x2ZXMgZGF0YSBhdCBhbGwsIGFuZCBoYXNuJ3QgYmVlbiBtYXBw ZWQgKi8KISAgICAgaWYgKCEoYWMtPmFjX2ZsYWdzICYgQU1SX0NNRF9NQVBQRUQpKSB7CiEgCiEg CWlmIChhYy0+YWNfZGF0YSAhPSBOVUxMKSB7CiAgCSAgICAvKiBtYXAgdGhlIGRhdGEgYnVmZmVy cyBpbnRvIGJ1cyBzcGFjZSBhbmQgYnVpbGQgdGhlIHMvZyBsaXN0ICovCiEgCSAgICBidXNfZG1h bWFwX2xvYWQoc2MtPmFtcl9idWZmZXJfZG1hdCwgYWMtPmFjX2RtYW1hcCwgYWMtPmFjX2RhdGEs IGFjLT5hY19sZW5ndGgsCiEgCQkJICAgIGFtcl9zZXR1cF9kbWFtYXAsIGFjLCAwKTsKISAJICAg IGlmIChhYy0+YWNfZmxhZ3MgJiBBTVJfQ01EX0RBVEFJTikKISAJCWJ1c19kbWFtYXBfc3luYyhz Yy0+YW1yX2J1ZmZlcl9kbWF0LCBhYy0+YWNfZG1hbWFwLCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsK ISAJICAgIGlmIChhYy0+YWNfZmxhZ3MgJiBBTVJfQ01EX0RBVEFPVVQpCiEgCQlidXNfZG1hbWFw X3N5bmMoc2MtPmFtcl9idWZmZXJfZG1hdCwgYWMtPmFjX2RtYW1hcCwgQlVTX0RNQVNZTkNfUFJF V1JJVEUpOwohIAl9CiAgCiEgCWlmIChhYy0+YWNfY2NiX2RhdGEgIT0gTlVMTCkgewohIAkgICAg YnVzX2RtYW1hcF9sb2FkKHNjLT5hbXJfYnVmZmVyX2RtYXQsIGFjLT5hY19jY2JfZG1hbWFwLCBh Yy0+YWNfY2NiX2RhdGEsIGFjLT5hY19jY2JfbGVuZ3RoLAohIAkJCSAgICBhbXJfc2V0dXBfY2Ni bWFwLCBhYywgMCk7CiEgCSAgICBpZiAoYWMtPmFjX2ZsYWdzICYgQU1SX0NNRF9DQ0JfREFUQUlO KQohIAkJYnVzX2RtYW1hcF9zeW5jKHNjLT5hbXJfYnVmZmVyX2RtYXQsIGFjLT5hY19jY2JfZG1h bWFwLCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsKISAJICAgIGlmIChhYy0+YWNfZmxhZ3MgJiBBTVJf Q01EX0NDQl9EQVRBT1VUKQohIAkJYnVzX2RtYW1hcF9zeW5jKHNjLT5hbXJfYnVmZmVyX2RtYXQs IGFjLT5hY19jY2JfZG1hbWFwLCBCVVNfRE1BU1lOQ19QUkVXUklURSk7CiEgCX0KISAJYWMtPmFj X2ZsYWdzIHw9IEFNUl9DTURfTUFQUEVEOwohICAgICB9CiAgfQogIAogIHN0YXRpYyB2b2lkCi0t LSAxMjUwLDEyNzggLS0tLQogICAgICBkZWJ1Z19jYWxsZWQoMyk7CiAgCiAgICAgIC8qIGlmIHRo ZSBjb21tYW5kIGludm9sdmVzIGRhdGEgYXQgYWxsLCBhbmQgaGFzbid0IGJlZW4gbWFwcGVkICov CiEgICAgIGlmICgoYWMtPmFjX2ZsYWdzICYgQU1SX0NNRF9NQVBQRUQpID09IDAgJiYgKGFjLT5h Y19kYXRhICE9IE5VTEwpKSB7CiEgCWlmIChhYy0+YWNfY2NiX2RhdGEgPT0gTlVMTCkgewogIAkg ICAgLyogbWFwIHRoZSBkYXRhIGJ1ZmZlcnMgaW50byBidXMgc3BhY2UgYW5kIGJ1aWxkIHRoZSBz L2cgbGlzdCAqLwohIAkgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+YW1yX2J1ZmZlcl9kbWF0 LCBhYy0+YWNfZG1hbWFwLCBhYy0+YWNfZGF0YSwKISAJCWFjLT5hY19sZW5ndGgsIGFtcl9zZXR1 cF9kYXRhX2RtYW1hcCwgYWMsIDApID09IEVJTlBST0dSRVNTKSB7CiEgCQlzYy0+YW1yX3N0YXRl IHw9IEFNUl9TVEFURV9RVUVVRV9GUlpOOwohIAkgICAgfQohIAl9IGVsc2UgewohIAkgICAgaWYg KGJ1c19kbWFtYXBfbG9hZChzYy0+YW1yX2J1ZmZlcl9kbWF0LCBhYy0+YWNfZG1hbWFwLCBhYy0+ YWNfZGF0YSwKISAJCWFjLT5hY19sZW5ndGgsIGFtcl9zZXR1cF9kbWFtYXAsIGFjLCBCVVNfRE1B X05PV0FJVCkgIT0gMCl7CiEgCQlyZXR1cm4gKEVOT01FTSk7CiEgCSAgICB9CiEgCSAgICBpZiAo YnVzX2RtYW1hcF9sb2FkKHNjLT5hbXJfYnVmZmVyX2RtYXQsIGFjLT5hY19jY2JfZG1hbWFwLAoh IAkJYWMtPmFjX2NjYl9kYXRhLCBhYy0+YWNfY2NiX2xlbmd0aCwgYW1yX3NldHVwX2NjYm1hcCwg YWMsCiEgCQkwKSA9PSBFSU5QUk9HUkVTUykgewohIAkJc2MtPmFtcl9zdGF0ZSB8PSBBTVJfU1RB VEVfUVVFVUVfRlJaTjsKISAJICAgIH0KISAgICAgIH0KISAgICB9IGVsc2UgaWYgKChhYy0+YWNf ZmxhZ3MgJiBBTVJfQ01EX01BUFBFRCkgPT0gMCkgewohICAgICAJYW1yX3N0YXJ0MShzYywgYWMp OwohICAgIH0KICAKISAgICAgcmV0dXJuICgwKTsKICB9CiAgCiAgc3RhdGljIHZvaWQKKioqKioq KioqKioqKioqCioqKiAxMjE2LDEyMzggKioqKgogIAogIAlpZiAoYWMtPmFjX2RhdGEgIT0gTlVM TCkgewogIAkgICAgaWYgKGFjLT5hY19mbGFncyAmIEFNUl9DTURfREFUQUlOKQohIAkJYnVzX2Rt YW1hcF9zeW5jKHNjLT5hbXJfYnVmZmVyX2RtYXQsIGFjLT5hY19kbWFtYXAsIEJVU19ETUFTWU5D X1BPU1RSRUFEKTsKICAJICAgIGlmIChhYy0+YWNfZmxhZ3MgJiBBTVJfQ01EX0RBVEFPVVQpCiEg CQlidXNfZG1hbWFwX3N5bmMoc2MtPmFtcl9idWZmZXJfZG1hdCwgYWMtPmFjX2RtYW1hcCwgQlVT X0RNQVNZTkNfUE9TVFdSSVRFKTsKICAJICAgIGJ1c19kbWFtYXBfdW5sb2FkKHNjLT5hbXJfYnVm ZmVyX2RtYXQsIGFjLT5hY19kbWFtYXApOwogIAl9CiAgCiAgCWlmIChhYy0+YWNfY2NiX2RhdGEg IT0gTlVMTCkgewogIAkgICAgaWYgKGFjLT5hY19mbGFncyAmIEFNUl9DTURfQ0NCX0RBVEFJTikK ISAJCWJ1c19kbWFtYXBfc3luYyhzYy0+YW1yX2J1ZmZlcl9kbWF0LCBhYy0+YWNfY2NiX2RtYW1h cCwgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwogIAkgICAgaWYgKGFjLT5hY19mbGFncyAmIEFNUl9D TURfQ0NCX0RBVEFPVVQpCiEgCQlidXNfZG1hbWFwX3N5bmMoc2MtPmFtcl9idWZmZXJfZG1hdCwg YWMtPmFjX2NjYl9kbWFtYXAsIEJVU19ETUFTWU5DX1BPU1RXUklURSk7CiAgCSAgICBidXNfZG1h bWFwX3VubG9hZChzYy0+YW1yX2J1ZmZlcl9kbWF0LCBhYy0+YWNfY2NiX2RtYW1hcCk7CiAgCX0K ICAJYWMtPmFjX2ZsYWdzICY9IH5BTVJfQ01EX01BUFBFRDsKICAgICAgfQogIH0KICAKICAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKICAgKiBUYWtlIGEgY29tbWFuZCBhbmQgZ2l2ZSBpdCB0byB0 aGUgY29udHJvbGxlciwgcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG9yCiAgICogRUJVU1kgaWYg dGhlIGNvbW1hbmQgc2hvdWxkIGJlIHJldHJpZWQgbGF0ZXIuCi0tLSAxMjg3LDEzMzAgLS0tLQog IAogIAlpZiAoYWMtPmFjX2RhdGEgIT0gTlVMTCkgewogIAkgICAgaWYgKGFjLT5hY19mbGFncyAm IEFNUl9DTURfREFUQUlOKQohIAkJYnVzX2RtYW1hcF9zeW5jKHNjLT5hbXJfYnVmZmVyX2RtYXQs IGFjLT5hY19kbWFtYXAsCiEgCQkgICAgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwogIAkgICAgaWYg KGFjLT5hY19mbGFncyAmIEFNUl9DTURfREFUQU9VVCkKISAJCWJ1c19kbWFtYXBfc3luYyhzYy0+ YW1yX2J1ZmZlcl9kbWF0LCBhYy0+YWNfZG1hbWFwLAohIAkJICAgIEJVU19ETUFTWU5DX1BPU1RX UklURSk7CiAgCSAgICBidXNfZG1hbWFwX3VubG9hZChzYy0+YW1yX2J1ZmZlcl9kbWF0LCBhYy0+ YWNfZG1hbWFwKTsKICAJfQogIAogIAlpZiAoYWMtPmFjX2NjYl9kYXRhICE9IE5VTEwpIHsKICAJ ICAgIGlmIChhYy0+YWNfZmxhZ3MgJiBBTVJfQ01EX0NDQl9EQVRBSU4pCiEgCQlidXNfZG1hbWFw X3N5bmMoc2MtPmFtcl9idWZmZXJfZG1hdCwgYWMtPmFjX2NjYl9kbWFtYXAsCiEgCQkgICAgQlVT X0RNQVNZTkNfUE9TVFJFQUQpOwogIAkgICAgaWYgKGFjLT5hY19mbGFncyAmIEFNUl9DTURfQ0NC X0RBVEFPVVQpCiEgCQlidXNfZG1hbWFwX3N5bmMoc2MtPmFtcl9idWZmZXJfZG1hdCwgYWMtPmFj X2NjYl9kbWFtYXAsCiEgCQkgICAgQlVTX0RNQVNZTkNfUE9TVFdSSVRFKTsKICAJICAgIGJ1c19k bWFtYXBfdW5sb2FkKHNjLT5hbXJfYnVmZmVyX2RtYXQsIGFjLT5hY19jY2JfZG1hbWFwKTsKICAJ fQogIAlhYy0+YWNfZmxhZ3MgJj0gfkFNUl9DTURfTUFQUEVEOwogICAgICB9CiAgfQogIAorIHN0 YXRpYyB2b2lkCisgYW1yX3NldHVwX2RhdGFfZG1hbWFwKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdt ZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycikKKyB7CisgICAgIHN0cnVjdCBhbXJfY29t bWFuZCAqYWMgPSBhcmc7CisgICAgIHN0cnVjdCBhbXJfc29mdGMgKnNjID0gYWMtPmFjX3NjOwor IAorICAgICBhbXJfc2V0dXBfZG1hbWFwKGFyZywgc2VncywgbnNlZ3MsIGVycik7CisgCisgICAg IGlmIChhYy0+YWNfZmxhZ3MgJiBBTVJfQ01EX0RBVEFJTikKKyAJYnVzX2RtYW1hcF9zeW5jKHNj LT5hbXJfYnVmZmVyX2RtYXQsYWMtPmFjX2RtYW1hcCxCVVNfRE1BU1lOQ19QUkVSRUFEKTsKKyAg ICAgaWYgKGFjLT5hY19mbGFncyAmIEFNUl9DTURfREFUQU9VVCkKKyAJYnVzX2RtYW1hcF9zeW5j KHNjLT5hbXJfYnVmZmVyX2RtYXQsYWMtPmFjX2RtYW1hcCxCVVNfRE1BU1lOQ19QUkVXUklURSk7 CisgICAgIGFjLT5hY19mbGFncyB8PSBBTVJfQ01EX01BUFBFRDsKKyAKKyAgICAgYW1yX3N0YXJ0 MShzYywgYWMpOworIH0KKyAgICAKICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBUYWtl IGEgY29tbWFuZCBhbmQgZ2l2ZSBpdCB0byB0aGUgY29udHJvbGxlciwgcmV0dXJucyAwIGlmIHN1 Y2Nlc3NmdWwsIG9yCiAgICogRUJVU1kgaWYgdGhlIGNvbW1hbmQgc2hvdWxkIGJlIHJldHJpZWQg bGF0ZXIuCioqKioqKioqKioqKioqKgoqKiogMTI0MCwxMjU5ICoqKioKICBzdGF0aWMgaW50CiAg YW1yX3N0YXJ0KHN0cnVjdCBhbXJfY29tbWFuZCAqYWMpCiAgewohICAgICBzdHJ1Y3QgYW1yX3Nv ZnRjCSpzYyA9IGFjLT5hY19zYzsKISAgICAgaW50CQkJZG9uZSwgcywgaTsKICAKICAgICAgZGVi dWdfY2FsbGVkKDMpOwogIAogICAgICAvKiBtYXJrIGNvbW1hbmQgYXMgYnVzeSBzbyB0aGF0IHBv bGxpbmcgY29uc3VtZXIgY2FuIHRlbGwgKi8KICAgICAgYWMtPmFjX2ZsYWdzIHw9IEFNUl9DTURf QlVTWTsKICAKICAgICAgLyogZ2V0IGEgY29tbWFuZCBzbG90IChmcmVlZCBpbiBhbXJfZG9uZSkg Ki8KICAgICAgaWYgKGFtcl9nZXRzbG90KGFjKSkKICAJcmV0dXJuKEVCVVNZKTsKICAKISAgICAg Lyogbm93IHdlIGhhdmUgYSBzbG90LCB3ZSBjYW4gbWFwIHRoZSBjb21tYW5kICh1bm1hcHBlZCBp biBhbXJfY29tcGxldGUpICovCiEgICAgIGFtcl9tYXBjbWQoYWMpOwogIAogICAgICAvKiBtYXJr IHRoZSBuZXcgbWFpbGJveCB3ZSBhcmUgZ29pbmcgdG8gY29weSBpbiBhcyBidXN5ICovCiAgICAg IGFjLT5hY19tYWlsYm94Lm1iX2J1c3kgPSAxOwotLS0gMTMzMiwxMzY4IC0tLS0KICBzdGF0aWMg aW50CiAgYW1yX3N0YXJ0KHN0cnVjdCBhbXJfY29tbWFuZCAqYWMpCiAgewohICAgICBzdHJ1Y3Qg YW1yX3NvZnRjICpzYzsKISAgICAgaW50IGVycm9yID0gMDsKICAKICAgICAgZGVidWdfY2FsbGVk KDMpOwogIAogICAgICAvKiBtYXJrIGNvbW1hbmQgYXMgYnVzeSBzbyB0aGF0IHBvbGxpbmcgY29u c3VtZXIgY2FuIHRlbGwgKi8KKyAgICAgc2MgPSBhYy0+YWNfc2M7CiAgICAgIGFjLT5hY19mbGFn cyB8PSBBTVJfQ01EX0JVU1k7CiAgCiAgICAgIC8qIGdldCBhIGNvbW1hbmQgc2xvdCAoZnJlZWQg aW4gYW1yX2RvbmUpICovCiAgICAgIGlmIChhbXJfZ2V0c2xvdChhYykpCiAgCXJldHVybihFQlVT WSk7CiAgCiEgICAgIC8qIE5vdyB3ZSBoYXZlIGEgc2xvdCwgd2UgY2FuIG1hcCB0aGUgY29tbWFu ZCAodW5tYXBwZWQgaW4gYW1yX2NvbXBsZXRlKS4gKi8KISAgICAgaWYgKChlcnJvciA9IGFtcl9t YXBjbWQoYWMpKSA9PSBFTk9NRU0pIHsKISAJLyoKISAJICogTWVtcm95IHJlc291cmNlcyBhcmUg c2hvcnQsIHNvIGZyZWUgdGhlIHNsb3QgYW5kIGxldCB0aGlzIGJlIHRyaWVkCiEgCSAqIGxhdGVy LgohIAkgKi8KISAJc2MtPmFtcl9idXN5Y21kW2FjLT5hY19zbG90XSA9IE5VTEw7CiEgCXNjLT5h bXJfYnVzeXNsb3RzLS07CiEgICAgIH0KISAKISAgICAgcmV0dXJuIChlcnJvcik7CiEgfQohIAoh IAohIHN0YXRpYyBpbnQKISBhbXJfc3RhcnQxKHN0cnVjdCBhbXJfc29mdGMgKnNjLCBzdHJ1Y3Qg YW1yX2NvbW1hbmQgKmFjKQohIHsKISAgICAgaW50CQkJZG9uZSwgcywgaTsKICAKICAgICAgLyog bWFyayB0aGUgbmV3IG1haWxib3ggd2UgYXJlIGdvaW5nIHRvIGNvcHkgaW4gYXMgYnVzeSAqLwog ICAgICBhYy0+YWNfbWFpbGJveC5tYl9idXN5ID0gMTsKKioqKioqKioqKioqKioqCioqKiAxMzYz LDEzNzAgKioqKgogIAkgICAgYnJlYWs7CS8qIG5vIHdvcmsgKi8KICAJfQogICAgICB9CiEgICAg IAogICAgICAvKiBpZiB3ZSd2ZSBjb21wbGV0ZWQgYW55IGNvbW1hbmRzLCB0cnkgcG9zdGluZyBz b21lIG1vcmUgKi8KICAgICAgaWYgKHJlc3VsdCkKICAJYW1yX3N0YXJ0aW8oc2MpOwogICAgICAK LS0tIDE0NzIsMTQ4MCAtLS0tCiAgCSAgICBicmVhazsJLyogbm8gd29yayAqLwogIAl9CiAgICAg IH0KISAKICAgICAgLyogaWYgd2UndmUgY29tcGxldGVkIGFueSBjb21tYW5kcywgdHJ5IHBvc3Rp bmcgc29tZSBtb3JlICovCisgICAgIHNjLT5hbXJfc3RhdGUgJj0gfkFNUl9TVEFURV9RVUVVRV9G UlpOOwogICAgICBpZiAocmVzdWx0KQogIAlhbXJfc3RhcnRpbyhzYyk7CiAgICAgIAoqKioqKioq KioqKioqKioKKioqIDEzNzUsMTM4MSAqKioqCiAgICAgIGVsc2UKICAjZW5kaWYKICAJYW1yX2Nv bXBsZXRlKHNjLCAwKTsKISAgICAgCiAgICAgIHJldHVybihyZXN1bHQpOwogIH0KICAKLS0tIDE0 ODUsMTQ5MSAtLS0tCiAgICAgIGVsc2UKICAjZW5kaWYKICAJYW1yX2NvbXBsZXRlKHNjLCAwKTsK ISAKICAgICAgcmV0dXJuKHJlc3VsdCk7CiAgfQogIAoqKioqKioqKioqKioqKioKKioqIDE0MTks MTQyNCAqKioqCi0tLSAxNTI5LDE1MzUgLS0tLQogIAkgICAgd2FrZXVwKHNjKTsKICAJfQogICAg ICB9CisgICAgYW1yX3N0YXJ0aW8oc2MpOwogIH0KICAKICAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKioqKioqKioqKioqKioqCioqKiAxNzk4LDE4MDQgKioqKgogIAogICAgICBkZWJ1Z19jYWxs ZWQoMSk7CiAgCiEgICAgIHNjLT5hbXJfc3RhdGUgfD0gQU1SX1NUQVRFX0NSQVNIRFVNUDsKICAK ICAgICAgLyogZ2V0IG91cnNlbHZlcyBhIGNvbW1hbmQgYnVmZmVyICovCiAgICAgIGlmICgoYWMg PSBhbXJfYWxsb2NjbWQoc2MpKSA9PSBOVUxMKQotLS0gMTkwOSwxOTE1IC0tLS0KICAKICAgICAg ZGVidWdfY2FsbGVkKDEpOwogIAohICAgICBzYy0+YW1yX3N0YXRlIHw9IEFNUl9TVEFURV9JTlRF TjsKICAKICAgICAgLyogZ2V0IG91cnNlbHZlcyBhIGNvbW1hbmQgYnVmZmVyICovCiAgICAgIGlm ICgoYWMgPSBhbXJfYWxsb2NjbWQoc2MpKSA9PSBOVUxMKQoqKioqKioqKioqKioqKioKKioqIDE4 MjUsMTgzMSAqKioqCiAgICAgIGlmIChhYyAhPSBOVUxMKQogIAlhbXJfcmVsZWFzZWNtZChhYyk7 CiAgCiEgICAgIHNjLT5hbXJfc3RhdGUgJj0gfkFNUl9TVEFURV9DUkFTSERVTVA7CiAgCiAgICAg IHJldHVybiAoZXJyb3IpOwkKICB9Ci0tLSAxOTM2LDE5NDIgLS0tLQogICAgICBpZiAoYWMgIT0g TlVMTCkKICAJYW1yX3JlbGVhc2VjbWQoYWMpOwogIAohICAgICBzYy0+YW1yX3N0YXRlICY9IH5B TVJfU1RBVEVfSU5URU47CiAgCiAgICAgIHJldHVybiAoZXJyb3IpOwkKICB9CioqKiBzeXMvZGV2 L2Ftci9hbXJfY2FtLmMub3JpZwlNb24gTm92IDExIDA1OjE5OjEwIDIwMDIKLS0tIHN5cy9kZXYv YW1yL2Ftcl9jYW0uYwlXZWQgTWFyICA5IDA4OjU0OjI1IDIwMDUKKioqKioqKioqKioqKioqCioq KiAxMzksMTQ4ICoqKioKICAgICAgLyoKICAgICAgICogQWxsb2NhdGUgYSBkZXZxIGZvciBhbGwg b3VyIGNoYW5uZWxzIGNvbWJpbmVkLiAgVGhpcyBzaG91bGQKICAgICAgICogYWxsb3cgZm9yIHRo ZSBtYXhpbXVtIG51bWJlciBvZiBTQ1NJIGNvbW1hbmRzIHdlIHdpbGwgYWNjZXB0CiEgICAgICAq IGF0IG9uZSB0aW1lLgogICAgICAgKi8KICAgICAgaWYgKChkZXZxID0gY2FtX3NpbXFfYWxsb2Mo QU1SX01BWF9TQ1NJX0NNRFMpKSA9PSBOVUxMKQogIAlyZXR1cm4oRU5PTUVNKTsKICAKICAgICAg LyoKICAgICAgICogSXRlcmF0ZSBvdmVyIG91ciBjaGFubmVscywgcmVnaXN0ZXJpbmcgdGhlbSB3 aXRoIENBTQotLS0gMTM5LDE1MCAtLS0tCiAgICAgIC8qCiAgICAgICAqIEFsbG9jYXRlIGEgZGV2 cSBmb3IgYWxsIG91ciBjaGFubmVscyBjb21iaW5lZC4gIFRoaXMgc2hvdWxkCiAgICAgICAqIGFs bG93IGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2YgU0NTSSBjb21tYW5kcyB3ZSB3aWxsIGFjY2Vw dAohICAgICAgKiBhdCBvbmUgdGltZS4gU2F2ZSB0aGUgcG9pbnRlciBpbiB0aGUgc29mdGMgc28g d2UgY2FuIGZpbmQgaXQgbGF0ZXIKISAgICAgICogZHVyaW5nIGRldGFjaC4KICAgICAgICovCiAg ICAgIGlmICgoZGV2cSA9IGNhbV9zaW1xX2FsbG9jKEFNUl9NQVhfU0NTSV9DTURTKSkgPT0gTlVM TCkKICAJcmV0dXJuKEVOT01FTSk7CisgICAgIHNjLT5hbXJfY2FtX2RldnEgPSBkZXZxOwogIAog ICAgICAvKgogICAgICAgKiBJdGVyYXRlIG92ZXIgb3VyIGNoYW5uZWxzLCByZWdpc3RlcmluZyB0 aGVtIHdpdGggQ0FNCioqKioqKioqKioqKioqKgoqKiogMTgyLDIwMCAqKioqCiAgdm9pZAogIGFt cl9jYW1fZGV0YWNoKHN0cnVjdCBhbXJfc29mdGMgKnNjKQogIHsKISAgICAgaW50CQljaG4sIGZp cnN0OwogIAohICAgICBmb3IgKGNobiA9IDAsIGZpcnN0ID0gMTsgY2huIDwgc2MtPmFtcl9tYXhj aGFuOyBjaG4rKykgewogIAogIAkvKgogIAkgKiBJZiBhIHNpbSB3YXMgYWxsb2NhdGVkIGZvciB0 aGlzIGNoYW5uZWwsIGZyZWUgaXQKICAJICovCiAgCWlmIChzYy0+YW1yX2NhbV9zaW1bY2huXSAh PSBOVUxMKSB7CiAgCSAgICB4cHRfYnVzX2RlcmVnaXN0ZXIoY2FtX3NpbV9wYXRoKHNjLT5hbXJf Y2FtX3NpbVtjaG5dKSk7CiEgCSAgICBjYW1fc2ltX2ZyZWUoc2MtPmFtcl9jYW1fc2ltW2Nobl0s IGZpcnN0ID8gVFJVRSA6IEZBTFNFKTsKISAJICAgIGZpcnN0ID0gMDsKICAJfQogICAgICB9CiAg fQogIAogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLS0gMTg0LDIwNSAtLS0tCiAgdm9pZAog IGFtcl9jYW1fZGV0YWNoKHN0cnVjdCBhbXJfc29mdGMgKnNjKQogIHsKISAgICAgaW50CQljaG47 CiAgCiEgICAgIGZvciAoY2huID0gMDsgY2huIDwgc2MtPmFtcl9tYXhjaGFuOyBjaG4rKykgewog IAogIAkvKgogIAkgKiBJZiBhIHNpbSB3YXMgYWxsb2NhdGVkIGZvciB0aGlzIGNoYW5uZWwsIGZy ZWUgaXQKICAJICovCiAgCWlmIChzYy0+YW1yX2NhbV9zaW1bY2huXSAhPSBOVUxMKSB7CiAgCSAg ICB4cHRfYnVzX2RlcmVnaXN0ZXIoY2FtX3NpbV9wYXRoKHNjLT5hbXJfY2FtX3NpbVtjaG5dKSk7 CiEgCSAgICBjYW1fc2ltX2ZyZWUoc2MtPmFtcl9jYW1fc2ltW2Nobl0sIEZBTFNFKTsKICAJfQog ICAgICB9CisgCisgICAgIC8qIE5vdyBmcmVlIHRoZSBkZXZxICovCisgICAgIGlmIChzYy0+YW1y X2NhbV9kZXZxICE9IE5VTEwpCisgCWNhbV9zaW1xX2ZyZWUoc2MtPmFtcl9jYW1fZGV2cSk7CiAg fQogIAogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKioqKioqKioqKioqKioKKioqIDQ1OCw0 NjQgKioqKgogIAlnb3RvIG91dDsKICAgICAgfQogIAohICAgICBhYy0+YWNfZmxhZ3MgfD0gQU1S X0NNRF9EQVRBT1VUOwogIAogICAgICBhYy0+YWNfY2NiX2RhdGEgPSBjc2lvLT5kYXRhX3B0cjsK ICAgICAgYWMtPmFjX2NjYl9sZW5ndGggPSBjc2lvLT5keGZlcl9sZW47Ci0tLSA0NjMsNDY5IC0t LS0KICAJZ290byBvdXQ7CiAgICAgIH0KICAKISAgICAgYWMtPmFjX2ZsYWdzIHw9IEFNUl9DTURf REFUQU9VVCB8IEFNUl9DTURfREFUQUlOOwogIAogICAgICBhYy0+YWNfY2NiX2RhdGEgPSBjc2lv LT5kYXRhX3B0cjsKICAgICAgYWMtPmFjX2NjYl9sZW5ndGggPSBjc2lvLT5keGZlcl9sZW47Cioq KioqKioqKioqKioqKgoqKiogNTE2LDUyMiAqKioqCiAgCiAgICAgIC8qIFhYWCBub3RlIHRoYXQg d2UncmUgaWdub3JpbmcgYWMtPmFjX3N0YXR1cyAtIGdvb2QgaWRlYT8gKi8KICAKISAgICAgZGVi dWcoMSwgInN0YXR1cyAweCV4ICBzY3NpX3N0YXR1cyAweCV4IiwgYWMtPmFjX3N0YXR1cywgYXAt PmFwX3Njc2lfc3RhdHVzKTsKICAKICAgICAgLyoKICAgICAgICogSGlkZSBkaXNrcyBmcm9tIENB TSBzbyB0aGF0IHRoZXkncmUgbm90IHBpY2tlZCB1cCBhbmQgdHJlYXRlZCBhcyAnbm9ybWFsJyBk aXNrcy4KLS0tIDUyMSw1MjcgLS0tLQogIAogICAgICAvKiBYWFggbm90ZSB0aGF0IHdlJ3JlIGln bm9yaW5nIGFjLT5hY19zdGF0dXMgLSBnb29kIGlkZWE/ICovCiAgCiEgICAgIGRlYnVnKDEsICJz dGF0dXMgMHgleCAgQVAgc2NzaV9zdGF0dXMgMHgleCIsIGFjLT5hY19zdGF0dXMsIGFwLT5hcF9z Y3NpX3N0YXR1cyk7CiAgCiAgICAgIC8qCiAgICAgICAqIEhpZGUgZGlza3MgZnJvbSBDQU0gc28g dGhhdCB0aGV5J3JlIG5vdCBwaWNrZWQgdXAgYW5kIHRyZWF0ZWQgYXMgJ25vcm1hbCcgZGlza3Mu CioqKioqKioqKioqKioqKgoqKiogNTc5LDU4NSAqKioqCiAgCiAgICAgIC8qIFhYWCBub3RlIHRo YXQgd2UncmUgaWdub3JpbmcgYWMtPmFjX3N0YXR1cyAtIGdvb2QgaWRlYT8gKi8KICAKISAgICAg ZGVidWcoMSwgInN0YXR1cyAweCV4ICBzY3NpX3N0YXR1cyAweCV4IiwgYWMtPmFjX3N0YXR1cywg YWVwLT5hcF9zY3NpX3N0YXR1cyk7CiAgCiAgICAgIC8qCiAgICAgICAqIEhpZGUgZGlza3MgZnJv bSBDQU0gc28gdGhhdCB0aGV5J3JlIG5vdCBwaWNrZWQgdXAgYW5kIHRyZWF0ZWQgYXMgJ25vcm1h bCcgZGlza3MuCi0tLSA1ODQsNTkwIC0tLS0KICAKICAgICAgLyogWFhYIG5vdGUgdGhhdCB3ZSdy ZSBpZ25vcmluZyBhYy0+YWNfc3RhdHVzIC0gZ29vZCBpZGVhPyAqLwogIAohICAgICBkZWJ1Zygx LCAic3RhdHVzIDB4JXggIEFFUCBzY3NpX3N0YXR1cyAweCV4IiwgYWMtPmFjX3N0YXR1cywgYWVw LT5hcF9zY3NpX3N0YXR1cyk7CiAgCiAgICAgIC8qCiAgICAgICAqIEhpZGUgZGlza3MgZnJvbSBD QU0gc28gdGhhdCB0aGV5J3JlIG5vdCBwaWNrZWQgdXAgYW5kIHRyZWF0ZWQgYXMgJ25vcm1hbCcg ZGlza3MuCioqKiBzeXMvZGV2L2Ftci9hbXJfZGlzay5jLm9yaWcJV2VkIE9jdCAyOSAwMToxMToz OCAyMDAzCi0tLSBzeXMvZGV2L2Ftci9hbXJfZGlzay5jCVdlZCBNYXIgIDkgMDk6MDI6NDQgMjAw NQoqKioqKioqKioqKioqKioKKioqIDUzLDU5ICoqKioKICAgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgICog U1VDSCBEQU1BR0UuCiAgICoKISAgKiAkRnJlZUJTRDogL3JlcG9tYW4vci9uY3ZzL3NyYy9zeXMv ZGV2L2Ftci9hbXJfZGlzay5jLHYgMS41LjIuNiAyMDAzLzEwLzI5IDA5OjExOjM4IHBzIEV4cCAk CiAgICovCiAgCiAgLyoKLS0tIDUzLDU5IC0tLS0KICAgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgICogU1VD SCBEQU1BR0UuCiAgICoKISAgKiAkRnJlZUJTRDogc3JjL3N5cy9kZXYvYW1yL2Ftcl9kaXNrLmMs diAxLjUuMi42IDIwMDMvMTAvMjkgMDk6MTE6MzggcHMgRXhwICQKICAgKi8KICAKICAvKgoqKioq KioqKioqKioqKioKKioqIDIxNSwyMjQgKioqKgogICAgICBpZiAoKGVycm9yID0gZGlza19kdW1w Y2hlY2soZGV2LCAmY291bnQsICZibGtubywgJnNlY3NpemUpKSkKICAgICAgICAgIHJldHVybihl cnJvcik7CiAgCiEgICAgIGFtcl9zYyAgPSAoc3RydWN0IGFtcl9zb2Z0YyAqKWFtcmRfc2MtPmFt cmRfY29udHJvbGxlcjsKISAKISAgICAgaWYgKCFhbXJkX3NjIHx8ICFhbXJfc2MpCiAgCXJldHVy bihFTlhJTyk7CiAgCiAgICAgIGJsa2NudCA9IGhvd21hbnkoUEFHRV9TSVpFLCBzZWNzaXplKTsK ICAKLS0tIDIxNSwyMjMgLS0tLQogICAgICBpZiAoKGVycm9yID0gZGlza19kdW1wY2hlY2soZGV2 LCAmY291bnQsICZibGtubywgJnNlY3NpemUpKSkKICAgICAgICAgIHJldHVybihlcnJvcik7CiAg CiEgICAgIGlmIChhbXJkX3NjID09IE5VTEwpCiAgCXJldHVybihFTlhJTyk7CisgICAgIGFtcl9z YyAgPSAoc3RydWN0IGFtcl9zb2Z0YyAqKWFtcmRfc2MtPmFtcmRfY29udHJvbGxlcjsKICAKICAg ICAgYmxrY250ID0gaG93bWFueShQQUdFX1NJWkUsIHNlY3NpemUpOwogIAoqKiogc3lzL2Rldi9h bXIvYW1yX3BjaS5jLm9yaWcJV2VkIERlYyAgOCAxMDo1MzoyMyAyMDA0Ci0tLSBzeXMvZGV2L2Ft ci9hbXJfcGNpLmMJV2VkIE1hciAgOSAwOTowOTo1OCAyMDA1CioqKioqKioqKioqKioqKgoqKiog MjUsMzEgKioqKgogICAqIFNVQ0ggREFNQUdFLgogICAqCiAgICogQ29weXJpZ2h0IChjKSAyMDAy IEVyaWMgTW9vcmUKISAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTFNJIExvZ2ljIENvcnBvcmF0aW9u CiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgogICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLS0gMjUsMzEg LS0tLQogICAqIFNVQ0ggREFNQUdFLgogICAqCiAgICogQ29weXJpZ2h0IChjKSAyMDAyIEVyaWMg TW9vcmUKISAgKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgTFNJIExvZ2ljIENvcnBvcmF0aW9u CiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgogICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAoqKioqKioqKioq KioqKioKKioqIDEyNywxMzIgKioqKgotLS0gMTI3LDEzNCAtLS0tCiAgICAgIHsweDEwMWUsIDB4 MTk2MCwgMH0sCiAgICAgIHsweDEwMDAsIDB4MTk2MCwgUFJPQkVfU0lHTkFUVVJFfSwKICAgICAg ezB4MTAwMCwgMHgwNDA3LCAwfSwKKyAgICAgezB4MTAwMCwgMHgwNDA4LCAwfSwKKyAgICAgezB4 MTAwMCwgMHgwNDA5LCAwfSwKICAgICAgezB4MTAyOCwgMHgwMDBlLCBQUk9CRV9TSUdOQVRVUkV9 LCAvKiBwZXJjNC9kaSBpOTYwICovCiAgICAgIHsweDEwMjgsIDB4MDAwZiwgMH0sIC8qIHBlcmM0 L2RpIFZlcmRlKi8KICAgICAgezB4MTAyOCwgMHgwMDEzLCAwfSwgLyogcGVyYzQvZGkgKi8KKioq KioqKioqKioqKioqCioqKiAxNTAsMTU2ICoqKioKICAJCWlmICgoc2lnICE9IEFNUl9TSUdOQVRV UkVfMSkgJiYgKHNpZyAhPSBBTVJfU0lHTkFUVVJFXzIpKQogIAkJICAgIGNvbnRpbnVlOwogIAkg ICAgfQohIAkgICAgZGV2aWNlX3NldF9kZXNjKGRldiwgIkxTSUxvZ2ljIE1lZ2FSQUlEIik7CiAg CSAgICByZXR1cm4oLTEwKTsJLyogYWxsb3cgcm9vbSB0byBiZSBvdmVycmlkZGVuICovCiAgCX0K ICAgICAgfQotLS0gMTUyLDE1OCAtLS0tCiAgCQlpZiAoKHNpZyAhPSBBTVJfU0lHTkFUVVJFXzEp ICYmIChzaWcgIT0gQU1SX1NJR05BVFVSRV8yKSkKICAJCSAgICBjb250aW51ZTsKICAJICAgIH0K ISAJICAgIGRldmljZV9zZXRfZGVzYyhkZXYsIExTSV9ERVNDX1BDSSk7CiAgCSAgICByZXR1cm4o LTEwKTsJLyogYWxsb3cgcm9vbSB0byBiZSBvdmVycmlkZGVuICovCiAgCX0KICAgICAgfQoqKioq KioqKioqKioqKioKKioqIDE4MSwxODYgKioqKgotLS0gMTgzLDE4OSAtLS0tCiAgICAgICAqLwog ICAgICBjb21tYW5kID0gcGNpX3JlYWRfY29uZmlnKGRldiwgUENJUl9DT01NQU5ELCAxKTsKICAg ICAgaWYgKChwY2lfZ2V0X2RldmljZShkZXYpID09IDB4MTk2MCkgfHwgKHBjaV9nZXRfZGV2aWNl KGRldikgPT0gMHgwNDA3KSB8fAorIAkocGNpX2dldF9kZXZpY2UoZGV2KSA9PSAweDA0MDgpIHx8 IChwY2lfZ2V0X2RldmljZShkZXYpID09IDB4MDQwOSkgfHwKICAJKHBjaV9nZXRfZGV2aWNlKGRl dikgPT0gMHgwMDBlKSB8fCAocGNpX2dldF9kZXZpY2UoZGV2KSA9PSAweDAwMGYpIHx8CiAgCShw Y2lfZ2V0X2RldmljZShkZXYpID09IDB4MDAxMykpIHsKICAJLyoKKioqKioqKioqKioqKioqCioq KiAyNTEsMjU3ICoqKioKICAJCQkgICBOVUxMLCBOVUxMLCAJCQkvKiBmaWx0ZXIsIGZpbHRlcmFy ZyAqLwogIAkJCSAgIE1BWEJTSVpFLCBBTVJfTlNFRywJCS8qIG1heHNpemUsIG5zZWdtZW50cyAq LwogIAkJCSAgIEJVU19TUEFDRV9NQVhTSVpFXzMyQklULAkvKiBtYXhzZWdzaXplICovCiEgCQkJ ICAgQlVTX0RNQV9BTExPQ05PVywJCS8qIGZsYWdzICovCiAgCQkJICAgJnNjLT5hbXJfcGFyZW50 X2RtYXQpKSB7CiAgCWRldmljZV9wcmludGYoZGV2LCAiY2FuJ3QgYWxsb2NhdGUgcGFyZW50IERN QSB0YWdcbiIpOwogIAlnb3RvIG91dDsKLS0tIDI1NCwyNjAgLS0tLQogIAkJCSAgIE5VTEwsIE5V TEwsIAkJCS8qIGZpbHRlciwgZmlsdGVyYXJnICovCiAgCQkJICAgTUFYQlNJWkUsIEFNUl9OU0VH LAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCiAgCQkJICAgQlVTX1NQQUNFX01BWFNJWkVfMzJC SVQsCS8qIG1heHNlZ3NpemUgKi8KISAJCQkgICAwLAkJCQkvKiBmbGFncyAqLwogIAkJCSAgICZz Yy0+YW1yX3BhcmVudF9kbWF0KSkgewogIAlkZXZpY2VfcHJpbnRmKGRldiwgImNhbid0IGFsbG9j YXRlIHBhcmVudCBETUEgdGFnXG4iKTsKICAJZ290byBvdXQ7CioqKioqKioqKioqKioqKgoqKiog MjYyLDI3MyAqKioqCiAgICAgICAqLwogICAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5h bXJfcGFyZW50X2RtYXQsCQkvKiBwYXJlbnQgKi8KICAJCQkgICAxLCAwLAkJCS8qIGFsaWdubWVu dCwgYm91bmRhcnkgKi8KISAJCQkgICBCVVNfU1BBQ0VfTUFYQUREUiwJCS8qIGxvd2FkZHIgKi8K ICAJCQkgICBCVVNfU1BBQ0VfTUFYQUREUiwJCS8qIGhpZ2hhZGRyICovCiAgCQkJICAgTlVMTCwg TlVMTCwJCQkvKiBmaWx0ZXIsIGZpbHRlcmFyZyAqLwogIAkJCSAgIE1BWEJTSVpFLCBBTVJfTlNF RywJCS8qIG1heHNpemUsIG5zZWdtZW50cyAqLwohIAkJCSAgIEJVU19TUEFDRV9NQVhTSVpFXzMy QklULAkvKiBtYXhzZWdzaXplICovCiEgCQkJICAgMCwJCQkJLyogZmxhZ3MgKi8KICAJCQkgICAm c2MtPmFtcl9idWZmZXJfZG1hdCkpIHsKICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPmFtcl9k ZXYsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXIgRE1BIHRhZ1xuIik7CiAgCWdvdG8gb3V0OwotLS0g MjY1LDI3NiAtLS0tCiAgICAgICAqLwogICAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5h bXJfcGFyZW50X2RtYXQsCQkvKiBwYXJlbnQgKi8KICAJCQkgICAxLCAwLAkJCS8qIGFsaWdubWVu dCwgYm91bmRhcnkgKi8KISAJCQkgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRk ciAqLwogIAkJCSAgIEJVU19TUEFDRV9NQVhBRERSLAkJLyogaGlnaGFkZHIgKi8KICAJCQkgICBO VUxMLCBOVUxMLAkJCS8qIGZpbHRlciwgZmlsdGVyYXJnICovCiAgCQkJICAgTUFYQlNJWkUsIEFN Ul9OU0VHLAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCiEgCQkJICAgTUFYQlNJWkUsCQkJLyog bWF4c2Vnc2l6ZSAqLwohIAkJCSAgIEJVU19ETUFfQUxMT0NOT1csCQkvKiBmbGFncyAqLwogIAkJ CSAgICZzYy0+YW1yX2J1ZmZlcl9kbWF0KSkgewogICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+ YW1yX2RldiwgImNhbid0IGFsbG9jYXRlIGJ1ZmZlciBETUEgdGFnXG4iKTsKICAJZ290byBvdXQ7 CioqKioqKioqKioqKioqKgoqKiogNTAyLDUwOCAqKioqCiAgICAgIHNlZ3NpemUgPSBzaXplb2Yo c3RydWN0IGFtcl9zZ2VudHJ5KSAqIEFNUl9OU0VHICogQU1SX01BWENNRDsKICAgICAgZXJyb3Ig PSBidXNfZG1hX3RhZ19jcmVhdGUoc2MtPmFtcl9wYXJlbnRfZG1hdCwgCS8qIHBhcmVudCAqLwog IAkJCSAgICAgICAxLCAwLCAJCQkvKiBhbGlnbm1lbnQsIGJvdW5kYXJ5ICovCiEgCQkJICAgICAg IEJVU19TUEFDRV9NQVhBRERSLAkvKiBsb3dhZGRyICovCiAgCQkJICAgICAgIEJVU19TUEFDRV9N QVhBRERSLCAJLyogaGlnaGFkZHIgKi8KICAJCQkgICAgICAgTlVMTCwgTlVMTCwgCQkvKiBmaWx0 ZXIsIGZpbHRlcmFyZyAqLwogIAkJCSAgICAgICBzZWdzaXplLCAxLAkJLyogbWF4c2l6ZSwgbnNl Z21lbnRzICovCi0tLSA1MDUsNTExIC0tLS0KICAgICAgc2Vnc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg YW1yX3NnZW50cnkpICogQU1SX05TRUcgKiBBTVJfTUFYQ01EOwogICAgICBlcnJvciA9IGJ1c19k bWFfdGFnX2NyZWF0ZShzYy0+YW1yX3BhcmVudF9kbWF0LCAJLyogcGFyZW50ICovCiAgCQkJICAg ICAgIDEsIDAsIAkJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KISAJCQkgICAgICAgQlVTX1NQ QUNFX01BWEFERFJfMzJCSVQsCS8qIGxvd2FkZHIgKi8KICAJCQkgICAgICAgQlVTX1NQQUNFX01B WEFERFIsIAkvKiBoaWdoYWRkciAqLwogIAkJCSAgICAgICBOVUxMLCBOVUxMLCAJCS8qIGZpbHRl ciwgZmlsdGVyYXJnICovCiAgCQkJICAgICAgIHNlZ3NpemUsIDEsCQkvKiBtYXhzaXplLCBuc2Vn bWVudHMgKi8KKioqKioqKioqKioqKioqCioqKiA1NzIsNTc4ICoqKioKICAgICAgICovCiAgICAg IGVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5hbXJfcGFyZW50X2RtYXQsCS8qIHBhcmVu dCAqLwogIAkJCSAgICAgICAxNiwgMCwJCQkvKiBhbGlnbm1lbnQsIGJvdW5kYXJ5ICovCiEgCQkJ ICAgICAgIEJVU19TUEFDRV9NQVhBRERSLAkvKiBsb3dhZGRyICovCiAgCQkJICAgICAgIEJVU19T UEFDRV9NQVhBRERSLAkvKiBoaWdoYWRkciAqLwogIAkJCSAgICAgICBOVUxMLCBOVUxMLAkJLyog ZmlsdGVyLCBmaWx0ZXJhcmcgKi8KICAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBhbXJfbWFpbGJv eCkgKyAxNiwgMSwgLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCi0tLSA1NzUsNTgxIC0tLS0KICAg ICAgICovCiAgICAgIGVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5hbXJfcGFyZW50X2Rt YXQsCS8qIHBhcmVudCAqLwogIAkJCSAgICAgICAxNiwgMCwJCQkvKiBhbGlnbm1lbnQsIGJvdW5k YXJ5ICovCiEgCQkJICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULAkvKiBsb3dhZGRyICov CiAgCQkJICAgICAgIEJVU19TUEFDRV9NQVhBRERSLAkvKiBoaWdoYWRkciAqLwogIAkJCSAgICAg ICBOVUxMLCBOVUxMLAkJLyogZmlsdGVyLCBmaWx0ZXJhcmcgKi8KICAJCQkgICAgICAgc2l6ZW9m KHN0cnVjdCBhbXJfbWFpbGJveCkgKyAxNiwgMSwgLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCioq KiBzeXMvZGV2L2Ftci9hbXJyZWcuaC5vcmlnCU1vbiBOb3YgMTEgMDU6MTk6MTAgMjAwMgotLS0g c3lzL2Rldi9hbXIvYW1ycmVnLmgJV2VkIE1hciAgOSAwOToxNDozNSAyMDA1CioqKioqKioqKioq KioqKgoqKiogNTIsNTggKioqKgogICAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAgKiBTVUNIIERBTUFHRS4K ICAgKgohICAqICAgICAgJEZyZWVCU0Q6IC9yZXBvbWFuL3IvbmN2cy9zcmMvc3lzL2Rldi9hbXIv YW1ycmVnLmgsdiAxLjEuMi40IDIwMDIvMTEvMTEgMTM6MTk6MTAgZW1vb3JlIEV4cCAkCiAgICov CiAgCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tLSA1Miw1OCAtLS0tCiAgICogT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRgogICAqIFNVQ0ggREFNQUdFLgogICAqCiEgICogICAgICAkRnJlZUJTRDogc3JjL3N5 cy9kZXYvYW1yL2FtcnJlZy5oLHYgMS4xLjIuNCAyMDAyLzExLzExIDEzOjE5OjEwIGVtb29yZSBF eHAgJAogICAqLwogIAogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKioqKioqKioqKioqKioK KioqIDgxLDg3ICoqKioKICAjZGVmaW5lIEFNUl9MSU1JVENNRAkJMTIwCQkvKiBtYXhpbXVtIGNv dW50IG9mIG91dHN0YW5kaW5nIGNvbW1hbmRzICovCiAgI2RlZmluZSBBTVJfTUFYTEQgICAgICAJ CTQwCiAgCiEgI2RlZmluZSBBTVJfTUFYX0NIQU5ORUxTCTQKICAjZGVmaW5lIEFNUl9NQVhfVEFS R0VUUwkJMTUKICAjZGVmaW5lIEFNUl9NQVhfTFVOUwkJNwogICNkZWZpbmUgQU1SX01BWF9TQ1NJ X0NNRFMJKDE1ICogQU1SX01BWF9DSEFOTkVMUykJLyogb25lIGZvciBldmVyeSB0YXJnZXQ/ICov Ci0tLSA4MSw4NyAtLS0tCiAgI2RlZmluZSBBTVJfTElNSVRDTUQJCTEyMAkJLyogbWF4aW11bSBj b3VudCBvZiBvdXRzdGFuZGluZyBjb21tYW5kcyAqLwogICNkZWZpbmUgQU1SX01BWExEICAgICAg CQk0MAogIAohICNkZWZpbmUgQU1SX01BWF9DSEFOTkVMUwk4CiAgI2RlZmluZSBBTVJfTUFYX1RB UkdFVFMJCTE1CiAgI2RlZmluZSBBTVJfTUFYX0xVTlMJCTcKICAjZGVmaW5lIEFNUl9NQVhfU0NT SV9DTURTCSgxNSAqIEFNUl9NQVhfQ0hBTk5FTFMpCS8qIG9uZSBmb3IgZXZlcnkgdGFyZ2V0PyAq LwoqKiogc3lzL2Rldi9hbXIvYW1ydmFyLmgub3JpZwlUaHUgSnVsIDIyIDA5OjM1OjE4IDIwMDQK LS0tIHN5cy9kZXYvYW1yL2FtcnZhci5oCVdlZCBNYXIgIDkgMDk6MTk6MjAgMjAwNQoqKioqKioq KioqKioqKioKKioqIDU5LDY0ICoqKioKLS0tIDU5LDY2IC0tLS0KICAjIGluY2x1ZGUgPHN5cy90 YXNrcXVldWUuaD4KICAjZW5kaWYKICAKKyAjZGVmaW5lIExTSV9ERVNDX1BDSSAiTFNJTG9naWMg TWVnYVJBSUQgMS41MSIKKyAKICAjaWZkZWYgQU1SX0RFQlVHCiAgIyBkZWZpbmUgZGVidWcobGV2 ZWwsIGZtdCwgYXJncy4uLikJZG8ge2lmIChsZXZlbCA8PSBBTVJfREVCVUcpIHByaW50ZigiJXM6 ICIgZm10ICJcbiIsIF9fZnVuY19fICwgIyNhcmdzKTt9IHdoaWxlKDApCiAgIyBkZWZpbmUgZGVi dWdfY2FsbGVkKGxldmVsKQkJZG8ge2lmIChsZXZlbCA8PSBBTVJfREVCVUcpIHByaW50ZigiJXM6 IGNhbGxlZFxuIiwgX19mdW5jX18pO30gd2hpbGUoMCkKKioqKioqKioqKioqKioqCioqKiAxODYs MTkxICoqKioKLS0tIDE4OCwxOTQgLS0tLQogICNkZWZpbmUgQU1SX1NUQVRFX0lOVEVOCQkoMTw8 MikKICAjZGVmaW5lIEFNUl9TVEFURV9TSFVURE9XTgkoMTw8MykKICAjZGVmaW5lIEFNUl9TVEFU RV9DUkFTSERVTVAJKDE8PDQpCisgI2RlZmluZSBBTVJfU1RBVEVfUVVFVUVfRlJaTgkoMTw8NSkK ICAKICAgICAgLyogcGVyLWNvbnRyb2xsZXIgcXVldWVzICovCiAgICAgIHN0cnVjdCBiaW9fcXVl dWVfaGVhZCAJYW1yX2Jpb3E7CQkvKiBwZW5kaW5nIEkvTyB3aXRoIG5vIGNvbW1hbmRzICovCioq KioqKioqKioqKioqKgoqKiogMTk5LDIwNCAqKioqCi0tLSAyMDIsMjA4IC0tLS0KICAgICAgLyog Q0FNIGF0dGFjaG1lbnRzIGZvciBwYXNzdGhyb3VnaCAqLwogICAgICBzdHJ1Y3QgY2FtX3NpbQkJ KmFtcl9jYW1fc2ltW0FNUl9NQVhfQ0hBTk5FTFNdOwogICAgICBUQUlMUV9IRUFEKCwgY2NiX2hk cikJYW1yX2NhbV9jY2JxOworICAgICBzdHJ1Y3QgY2FtX2RldnEJCSphbXJfY2FtX2RldnE7CiAg CiAgICAgIC8qIGNvbnRyb2wgZGV2aWNlICovCiAgICAgIGRldl90CQkJYW1yX2Rldl90OwoqKioq KioqKioqKioqKioKKioqIDIxMiwyMTcgKioqKgotLS0gMjE2LDIyMiAtLS0tCiAgICAgIGludAkJ CQkoKiBhbXJfc3VibWl0X2NvbW1hbmQpKHN0cnVjdCBhbXJfc29mdGMgKnNjKTsKICAgICAgaW50 CQkJCSgqIGFtcl9nZXRfd29yaykoc3RydWN0IGFtcl9zb2Z0YyAqc2MsIHN0cnVjdCBhbXJfbWFp bGJveCAqbWJzYXZlKTsKICAgICAgaW50CQkJCSgqYW1yX3BvbGxfY29tbWFuZCkoc3RydWN0IGFt cl9jb21tYW5kICphYyk7CisgICAgIGludAkJCQkoKmFtcl9wb2xsX2NvbW1hbmQxKShzdHJ1Y3Qg YW1yX3NvZnRjICpzYywgc3RydWN0IGFtcl9jb21tYW5kICphYyk7CiAgICAgIGludCAJCQlzdXBw b3J0X2V4dF9jZGI7CS8qIGdyZWF0ZXIgdGhhbiAxMCBieXRlIGNkYiBzdXBwb3J0ICovCiAgCiAg ICAgIC8qIG1pc2MgZ2x1ZSAqLwo= --=====================_-2029056031==_--