From owner-freebsd-hardware@FreeBSD.ORG Wed Aug 13 08:50:36 2003 Return-Path: Delivered-To: freebsd-hardware@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id BBCC437B401 for ; Wed, 13 Aug 2003 08:50:36 -0700 (PDT) Received: from rambutan.pingpong.net (81.milagro.bahnhof.net [195.178.168.81]) by mx1.FreeBSD.org (Postfix) with ESMTP id B659243FA3 for ; Wed, 13 Aug 2003 08:50:33 -0700 (PDT) (envelope-from girgen@pingpong.net) Received: from localhost (localhost [127.0.0.1])h7DFoUxh000575 for ; Wed, 13 Aug 2003 17:50:30 +0200 (CEST) (envelope-from girgen@pingpong.net) Date: Wed, 13 Aug 2003 17:50:30 +0200 From: Palle Girgensohn To: hardware@freebsd.org Message-ID: <6580000.1060789830@rambutan.pingpong.net> X-Mailer: Mulberry/3.0.3 (Linux/x86) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==========1810869384==========" Subject: VIA VT8235 NIC driver question (if_fet.c) X-BeenThere: freebsd-hardware@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: General discussion of FreeBSD hardware List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Aug 2003 15:50:37 -0000 --==========1810869384========== Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi! I just got an Asus A7V8X-X motherboard with an online NIC in the South bridge controller, VIA VT8235. I found a freebsd driver on VIA's site , but it didn't build for FreeBSD 4.8. I removed some code, and it built, but I ususally don't hack network drivers, so I'd just like to check if my fix is safe or just plains stupid. The mbuf pkthdr struct has changed in 4.8 and no longer has the aux field, so I simply removed the code that handles this: --- /home/girgen/VT8235/FREEBSD/if_fet.c Wed Jan 15 19:03:54 2003 +++ if_fet.c Wed Aug 13 17:21:24 2003 @@ -1640,7 +1640,7 @@ * code does not call M_PREPEND properly. * (example: call to bpf_mtap from drivers) */ -#if __FreeBSD_version >= 410000 +#if __FreeBSD_version >= 410000 && __FreeBSD_version < 48000 if ((cur_tx->fet_mbuf->m_flags & M_PKTHDR) != 0 && cur_tx->fet_mbuf->m_pkthdr.aux) { m_freem(cur_tx->fet_mbuf->m_pkthdr.aux); cur_tx->fet_mbuf->m_pkthdr.aux = NULL; @@ -1697,7 +1697,7 @@ * code does not call M_PREPEND properly. * (example: call to bpf_mtap from drivers) */ -#if __FreeBSD_version >= 410000 +#if __FreeBSD_version >= 410000 && __FreeBSD_version < 48000 if ((cur_tx->fet_mbuf->m_flags & M_PKTHDR) != 0 && cur_tx->fet_mbuf->m_pkthdr.aux) { m_freem(cur_tx->fet_mbuf->m_pkthdr.aux); cur_tx->fet_mbuf->m_pkthdr.aux = NULL; @@ -1973,7 +1973,7 @@ if(m->m_len == 0) { tmp = m; m = m->m_next; -#if __FreeBSD_version >= 410000 +#if __FreeBSD_version >= 410000 && __FreeBSD_version < 48000 if ((tmp->m_flags & M_PKTHDR) != 0 && tmp->m_pkthdr.aux) { m_freem(tmp->m_pkthdr.aux); tmp->m_pkthdr.aux = NULL; I enclose the driver code as distributed from VIA. Thanks, Palle --==========1810869384========== Content-Type: text/plain; charset=iso-8859-1; name="freebsd.txt" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="freebsd.txt"; size=4311 **=0D **=0D ** VIA Rhine Family Fast Ethernet Adapter=0D **=0D ** FreeBSD driver=0D **=0D ** v3.10 Jan. 2003=0D **=0D ** =0D =0D Introduction:=0D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D =0D The Fast Ethernet 10/100M FreeBSD driver is enclosed. This document shows = you how to =0D setup the driver.=0D =0D Contents of the Subdirectory:=0D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=0D =0D freebsd.txt This file.=0D freebsd.tar Tar file include the following file list =0D if_fet.c The FreeBSD driver source code=0D if_fet.h The FreeBSD driver header file=0D =0D Installation:=0D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D =0D 1) Put the driver disc in Drive A. Under the prompt, type "mount_msdos = /dev/fd0 /mnt".=0D Then, type "cp /mnt/freebsd.tar /usr/src/sys/pci".=0D =0D 2) Type the following commands:=0D (a) "cd /usr/src/sys/pci"=0D (b) "tar xvf freebsd.tar"=0D (c) "cd /usr/src/sys/conf"=0D (d) "ee files"=0D =0D 3) Under editing file 'files'=0D (a) In FREEBSD 3.x , please add one line as below:=0D "pci/if_fet.c optional fet device-driver"=0D and mark this line as below:=0D "#pci/if_vr.c optional vr device-driver"=0D (b) In FREEBSD 4.x , please add one line as below:=0D "pci/if_fet.c optional fet"=0D and mark this line as below:=0D "#pci/if_vr.c optional vr"=0D Then, save the file. It's important to mark if_vr.c, or you will use = the=0D old driver.=0D =0D 4) Type the following commands:=0D (a) "cd /usr/src/sys/i386/conf"=0D (b) "cp GENERIC SERVER"=0D (c) "ee SERVER"=0D =0D 5) Under editing file 'SERVER', finding the division of NIC setting, = and insert one line=0D as below:=0D "device fet0"=0D And ,mark this line as below:=0D "#device vr0"=0D Then, save the file. It's important to mark device vr0, or you will = use the=0D old driver.=0D =0D 6) Now, it's ready to recompile kernel; type the following commands:=0D (a) cd /usr/src/sys/i386/conf=0D (b) config SERVER=0D (c) cd /usr/src/sys/compile/SERVER=0D (d) make depend all install=0D =0D 7) Before rebooting, make sure the network-related files under /etc are = well-configured. =0D The files are listed below:=0D (a) /etc/hosts=0D (b) /etc/resolv.conf=0D (c) /etc/host.conf=0D (d) /etc/rc.conf=0D =0D 8) Now, get ready to reboot, type "sync;sync;sync", and "shutdown -r = now".=0D =0D 9) Under the newly compiled kernel, type "ifconfig -a", and you can see = a new device fet0 (not vr0).=0D =0D Speed and duplex mode Setting:=0D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=0D You can use ifconfig command to force speed and duplex mode of NIC,=0D where # below is network interface number. We only support this function = in=0D FreeBSD 4.x now.=0D (eg: Use "ifconfig fet0 media 100baseTX" command to force NIC to 100Mbps = half-duplex mode)=0D =0D 1) Auto Mode (Autonegotiation)=0D ifconfig fet# media auto=0D =0D 2) 100Mbps full-duplex mode=0D ifconfig fet# media 100baseTX mediaopt full-duplex=0D =0D 3) 100Mbps half-duplex mode=0D ifconfig fet# media 100baseTX=0D =0D 4) 10Mbps full-duplex mode=0D ifconfig fet# media 10baseT/UTP mediaopt full-duplex=0D =0D 5) 10Mbps half-duplex mode=0D ifconfig fet# media 10baseT/UTP=0D =0D =0D Driver tunable parameters (Experts only)=0D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D =0D You can tune up the performance of driver by modified the pre-define = =0D constants in header file if_fet.h.=0D =0D DMA_LENGTH_DEF:=0D DMA_LENGTH_DEF is used for controlling the DMA length.=0D 0: 8 DWORDs =0D 1: 16 DWORDs (Default)=0D 2: 32 DWORDs=0D 3: 64 DWORDs=0D 4: 128 DWORDs=0D 5: 256 DWORDs=0D 6: SF(flush till emply)=0D 7: SF(flush till emply)=0D =0D TX_THRESH_DEF:=0D TX_THRESH_DEF is used for controlling the transmit fifo threshold. =0D 0: indicate the txfifo threshold is 128 bytes. (Default)=0D 1: indicate the txfifo threshold is 256 bytes.=0D 2: indicate the txfifo threshold is 512 bytes.=0D 3: indicate the txfifo threshold is 1024 bytes.=0D 4: indicate that we use store and forward=0D =0D =0D QPACKET_DEF:=0D QPACKET_DEF is used for controlling the enable/disable the transmit =0D status write back queue. =0D 0: Disable =0D 1: Enable (Default)=0D =0D VAL_PKT_LEN:=0D VAL_PKT_LEN is used to drop 802.3 frame with invalid length.=0D 0: Disable (Default)=0D 1: Enable =0D --==========1810869384========== Content-Type: application/octet-stream; name="if_fet.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="if_fet.c"; size=108075 LyoKICogQ29weXJpZ2h0IChjKSAxOTk2LDIwMDMgVklBIE5ldHdvcmtpbmcsIEluYy4KICogQWxs IHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0 OgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCiAqICAgIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKICogIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgVklBIFRlY2hub2xvZ2llcywgSW5jLgogKiA0LiBOZWl0aGVy IHRoZSBuYW1lIG9mIHRoZSBDb21wYW55IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y cwogKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUKICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVklBIFRFQ0hO T0xPR0lFUywgSU5DLiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECiAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQogKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFZJQSBURUNITk9MT0dJRVMsIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQogKiBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwogKiBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAqIFNV Q0ggREFNQUdFLgogKgogKi8KCi8qCioqIFZJQSBUZWNobm9sb2dpZXMsIEluYy4KKioKKiogVmVy LiAzLjEwCioqCioqLwoKI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgoKI2lmIF9fRnJlZUJTRF92ZXJz aW9uIDwgNDAwMDAwCiNpbmNsdWRlICJicGZpbHRlci5oIgojZW5kaWYKCiNpbmNsdWRlIDxzeXMv c3lzdG0uaD4KI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4KI2luY2x1ZGUgPHN5cy9tYnVmLmg+CiNp bmNsdWRlIDxzeXMvbWFsbG9jLmg+CiNpbmNsdWRlIDxzeXMva2VybmVsLmg+CiNpbmNsdWRlIDxz eXMvc29ja2V0Lmg+CgojaW5jbHVkZSA8bmV0L2lmLmg+CiNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+ CiNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KI2luY2x1ZGUgPG5ldC9pZl9kbC5oPgojaW5jbHVk ZSA8bmV0L2lmX21lZGlhLmg+CgojaWYgKF9fRnJlZUJTRF92ZXJzaW9uIDwgNDAwMDAwICYmIE5C UEZJTFRFUiA+IDApIHx8IF9fRnJlZUJTRF92ZXJzaW9uID49IDQwMDAwMAojaW5jbHVkZSA8bmV0 L2JwZi5oPgojZW5kaWYKCiNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PTQwMDAwMCAmJiBfX0ZyZWVC U0RfdmVyc2lvbiA8NDEwMDAwCiNpbmNsdWRlICJvcHRfYmRnLmgiCiNpZmRlZiBCUklER0UKI2lu Y2x1ZGUgPG5ldC9icmlkZ2UuaD4KI2VuZGlmIC8qIEJSSURHRSAqLwojZW5kaWYKCiNpbmNsdWRl IDx2bS92bS5oPiAgICAgICAgICAgICAgLyogZm9yIHZ0b3BoeXMgKi8KI2luY2x1ZGUgPHZtL3Bt YXAuaD4gICAgICAgICAgICAvKiBmb3IgdnRvcGh5cyAqLwojaW5jbHVkZSA8bWFjaGluZS9jbG9j ay5oPiAgICAgIC8qIGZvciBERUxBWSAqLwojaW5jbHVkZSA8bWFjaGluZS9idXNfcGlvLmg+CiNp bmNsdWRlIDxtYWNoaW5lL2J1c19tZW1pby5oPgojaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KCiNp ZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA0MDAwMDAKI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2Uu aD4KI2luY2x1ZGUgPHN5cy9idXMuaD4KI2luY2x1ZGUgPHN5cy9ybWFuLmg+CgojZW5kaWYKCiNp bmNsdWRlIDxwY2kvcGNpcmVnLmg+CiNpbmNsdWRlIDxwY2kvcGNpdmFyLmg+CgojZGVmaW5lIEZF VF9VU0VNRU1TUEFDRQoKLyogI2RlZmluZSBGRVRfQkFDS0dST1VORF9BVVRPTkVHICovCgojaW5j bHVkZSA8cGNpL2lmX2ZldC5oPgoKCi8qCiAqIFZhcmlvdXMgc3VwcG9ydGVkIGRldmljZSB2ZW5k b3JzL3R5cGVzIGFuZCB0aGVpciBuYW1lcy4KICovCnN0YXRpYyBzdHJ1Y3QgZmV0X3R5cGUgZmV0 X2RldnNbXSA9IHsKICAgIHsgVkVORE9SSUQsIERFVklDRUlEXzMwNDMsCiAgICAgICAgIlZJQSBW VDg2QzEwMEEgUmhpbmUgRmFzdCBFdGhlcm5ldCBBZGFwdGVyICAgICAgICAgICAgICAgICAgICIg fSwKICAgIHsgVkVORE9SSUQsIERFVklDRUlEXzMwNjUsCiAgICAgICAgIlZJQSBSaGluZSBJSSBG YXN0IEV0aGVybmV0IEFkYXB0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICIgfSwKICAgIHsg VkVORE9SSUQsIERFVklDRUlEXzMxMDYsCiAgICAgICAgIlZJQSBWVDYxMDUgUmhpbmUgSUlJIEZh c3QgRXRoZXJuZXQgQWRhcHRlciAgICAgICAgICAgICAgICAgICIgfSwKICAgIHsgVkVORE9SSUQs IERFVklDRUlEXzMwNTMsCiAgICAgICAgIlZJQSBWVDYxMDVNIFJoaW5lIElJSSBNYW5hZ2VtZW50 IEFkYXB0ZXIgICAgICAgICAgICAgICAgICAgICIgfSwKCiAgICB7IDAsIDAsIE5VTEwgfQp9OwoK I2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDQwMDAwMApzdGF0aWMgaW50IGZldF9wcm9iZSAgICAg ICAgX19QKChkZXZpY2VfdCkpOwpzdGF0aWMgaW50IGZldF9hdHRhY2ggICAgICAgX19QKChkZXZp Y2VfdCkpOwpzdGF0aWMgaW50IGZldF9kZXRhY2ggICAgICAgX19QKChkZXZpY2VfdCkpOwpzdGF0 aWMgaW50IGZldF9uZXdidWYgICAgICAgX19QKChzdHJ1Y3QgZmV0X3NvZnRjICosCiAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGZldF9jaGFpbl9vbmVmcmFnICosCiAgICAgICAgICAgICAgICAg ICAgc3RydWN0IG1idWYgKikpOwojZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDQwMDAwMApzdGF0 aWMgdW5zaWduZWQgbG9uZyBmZXRfY291bnQgPSAwOwpzdGF0aWMgY29uc3QgY2hhciAqZmV0X3By b2JlICAgIF9fUCgocGNpY2lfdCwgcGNpZGlfdCkpOwpzdGF0aWMgdm9pZCBmZXRfYXR0YWNoICAg ICAgX19QKChwY2ljaV90LCBpbnQpKTsKc3RhdGljIGludCBmZXRfbmV3YnVmICAgICAgIF9fUCgo c3RydWN0IGZldF9zb2Z0YyAqLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmZXRfY2hhaW5f b25lZnJhZyAqKSk7CiNlbmRpZgoKc3RhdGljIGludCBmZXRfZW5jYXAgICAgICAgIF9fUCgoc3Ry dWN0IGZldF9zb2Z0YyAqLCBzdHJ1Y3QgZmV0X2NoYWluICosCiAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBtYnVmICogKSk7CgpzdGF0aWMgdm9pZCBmZXRfcnhlb2YgICAgICAgX19QKChz dHJ1Y3QgZmV0X3NvZnRjICopKTsKc3RhdGljIHZvaWQgZmV0X3R4ZW9mICAgICAgIF9fUCgoc3Ry dWN0IGZldF9zb2Z0YyAqKSk7CnN0YXRpYyB2b2lkIGZldF90eF9kcm9wX2FsbCBfX1AoKHN0cnVj dCBmZXRfc29mdGMgKikpOwpzdGF0aWMgdm9pZCBmZXRfdHhlb2MgICAgICAgX19QKChzdHJ1Y3Qg ZmV0X3NvZnRjICopKTsKc3RhdGljIHZvaWQgZmV0X3NldF90eF90aHJlc2ggICBfX1AoKHN0cnVj dCBmZXRfc29mdGMgKikpOwpzdGF0aWMgdm9pZCBmZXRfc2V0X3J4X3RocmVzaCAgIF9fUCgoc3Ry dWN0IGZldF9zb2Z0YyAqKSk7CnN0YXRpYyBpbnQgY2hlY2tfbl93YXlfZm9yY2UgICAgX19QKChz dHJ1Y3QgZmV0X3NvZnRjICosIGludCkpOwpzdGF0aWMgdm9pZCBjaGVja19sZWdhY3lfZm9yY2Ug IF9fUCgoc3RydWN0IGZldF9zb2Z0YyAqKSk7CnN0YXRpYyB2b2lkIHNldF9tZWRpYV9kdXBsZXhf bW9kZSAgIF9fUCgoc3RydWN0IGZldF9zb2Z0YyAqKSk7CnN0YXRpYyB2b2lkIHNldF9mbG93X2Nv bnRyb2wgICAgX19QKChzdHJ1Y3QgZmV0X3NvZnRjICopKTsKc3RhdGljIHZvaWQgZmxvd19jb250 cm9sX2FiaWxpdHkgICAgX19QKChzdHJ1Y3QgZmV0X3NvZnRjICopKTsKc3RhdGljIHZvaWQgcmVz dGFydF9hdXRvbmVnb3RpYXRpb24gX19QKChzdHJ1Y3QgZmV0X3NvZnRjICopKTsKc3RhdGljIHZv aWQgZW5hYmxlX2F1dG9uZWdvdGlhdGlvbiAgX19QKChzdHJ1Y3QgZmV0X3NvZnRjICopKTsKc3Rh dGljIHZvaWQgZG9fYXV0b25lZ290aWF0aW9uICAgICAgX19QKChzdHJ1Y3QgZmV0X3NvZnRjICop KTsKc3RhdGljIHZvaWQgZmV0X2ludHIgICAgICAgIF9fUCgodm9pZCAqKSk7CnN0YXRpYyB2b2lk IGZldF9zdGFydCAgICAgICBfX1AoKHN0cnVjdCBpZm5ldCAqKSk7CnN0YXRpYyBpbnQgZmV0X2lv Y3RsICAgICAgICBfX1AoKHN0cnVjdCBpZm5ldCAqLCB1X2xvbmcsIGNhZGRyX3QpKTsKc3RhdGlj IHZvaWQgZmV0X2luaXQgICAgICAgIF9fUCgodm9pZCAqKSk7CnN0YXRpYyB2b2lkIGZldF9zdG9w ICAgICAgICBfX1AoKHN0cnVjdCBmZXRfc29mdGMgKikpOwpzdGF0aWMgdm9pZCBmZXRfd2F0Y2hk b2cgICAgICAgIF9fUCgoc3RydWN0IGlmbmV0ICopKTsKI2lmIDAKc3RhdGljIHZvaWQgQ0FNX2Rh dGFfcmVhZCAgIF9fUCgoc3RydWN0IGZldF9zb2Z0YyAqLCBpbnQsIHVuc2lnbmVkIGNoYXIsIHVu c2lnbmVkIGNoYXIgKikpOwpzdGF0aWMgdW5zaWduZWQgaW50IENBTV9tYXNrX3JlYWQgICBfX1Ao KHN0cnVjdCBmZXRfc29mdGMgKiwgaW50ICwgdW5zaWduZWQgaW50KSk7CiNlbmRpZgpzdGF0aWMg dm9pZCBDQU1fZGF0YV93cml0ZSAgICAgIF9fUCgoc3RydWN0IGZldF9zb2Z0YyAqLCBpbnQgLCB1 bnNpZ25lZCBjaGFyICx1bnNpZ25lZCBjaGFyICopKTsKCnN0YXRpYyB2b2lkIENBTV9tYXNrX3dy aXRlICAgICAgX19QKChzdHJ1Y3QgZmV0X3NvZnRjICosIGludCwgdW5zaWduZWQgaW50KSk7CnN0 YXRpYyB2b2lkIFZMQU5fdGFnZ2luZyAgICAgICAgX19QKChzdHJ1Y3QgZmV0X3NvZnRjICopKTsK c3RhdGljIHZvaWQgU2FmZURpc2FibGVNaWlBdXRvICAgICAgX19QKChzdHJ1Y3QgZmV0X3NvZnRj ICopKTsKc3RhdGljIHZvaWQgRW5hYmxlTWlpQXV0b1BvbGwgICAgICAgX19QKChzdHJ1Y3QgZmV0 X3NvZnRjICopKTsKc3RhdGljIHZvaWQgdHVybl9vbl9NSUlfbGluayAgICAgICAgX19QKChzdHJ1 Y3QgZmV0X3NvZnRjICopKTsKCiNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA0MDAwMDAKc3RhdGlj IHZvaWQgZmV0X3NodXRkb3duICAgICAgICBfX1AoKGRldmljZV90KSk7CiNlbGlmIF9fRnJlZUJT RF92ZXJzaW9uIDwgNDAwMDAwCnN0YXRpYyB2b2lkIGZldF9zaHV0ZG93biAgICAgICAgX19QKChp bnQsIHZvaWQgKikpOwojZW5kaWYKCnN0YXRpYyBpbnQgZmV0X2lmbWVkaWFfdXBkICBfX1AoKHN0 cnVjdCBpZm5ldCAqKSk7CnN0YXRpYyB2b2lkIGZldF9pZm1lZGlhX3N0cyBfX1AoKHN0cnVjdCBp Zm5ldCAqLCBzdHJ1Y3QgaWZtZWRpYXJlcSAqKSk7CnN0YXRpYyB2b2lkIGZldF9saW5rX2NoYW5n ZSBfX1AoKHN0cnVjdCBmZXRfc29mdGMgKikpOwoKc3RhdGljIHVuc2lnbmVkIGZldF9yZWFkX21p aSBfX1AoKHN0cnVjdCBmZXRfc29mdGMgKiwgY2hhcikpOwpzdGF0aWMgdm9pZCBmZXRfd3JpdGVf bWlpICAgIF9fUCgoc3RydWN0IGZldF9zb2Z0YyAqLCBjaGFyLCB1bnNpZ25lZCApKTsKCnN0YXRp YyBpbnQgZmV0X3F1ZXJ5X2F1dG8gICAgX19QKChzdHJ1Y3QgZmV0X3NvZnRjICopKTsKCgpzdGF0 aWMgdV9pbnQ4X3QgZmV0X2NhbGNoYXNoICAgIF9fUCgodV9pbnQ4X3QgKikpOwpzdGF0aWMgdm9p ZCBmZXRfc2V0bXVsdGkgICAgICAgIF9fUCgoc3RydWN0IGZldF9zb2Z0YyAqKSk7CnN0YXRpYyB2 b2lkIGZldF9yZXNldCAgICAgICBfX1AoKHN0cnVjdCBmZXRfc29mdGMgKikpOwpzdGF0aWMgaW50 IGZldF9saXN0X3J4X2luaXQgX19QKChzdHJ1Y3QgZmV0X3NvZnRjICopKTsKc3RhdGljIGludCBm ZXRfbGlzdF90eF9pbml0IF9fUCgoc3RydWN0IGZldF9zb2Z0YyAqKSk7CnN0YXRpYyBpbnQgZmV0 X3NhZmVfcnhfb2ZmICBfX1AoKHN0cnVjdCBmZXRfc29mdGMgKikpOwoKI2lmIF9fRnJlZUJTRF92 ZXJzaW9uID49IDQwMDAwMApzdGF0aWMgZGV2aWNlX21ldGhvZF90IGZldF9tZXRob2RzW10gPSB7 CiAgICAvKiBEZXZpY2UgaW50ZXJmYWNlICovCiAgICBERVZNRVRIT0QoZGV2aWNlX3Byb2JlLCAg ICAgZmV0X3Byb2JlKSwKICAgIERFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCAgICBmZXRfYXR0YWNo KSwKICAgIERFVk1FVEhPRChkZXZpY2VfZGV0YWNoLCAgICBmZXRfZGV0YWNoKSwKICAgIERFVk1F VEhPRChkZXZpY2Vfc2h1dGRvd24sICBmZXRfc2h1dGRvd24pLAoKICAgIC8qIGJ1cyBpbnRlcmZh Y2UgKi8KICAgIERFVk1FVEhPRChidXNfcHJpbnRfY2hpbGQsICBidXNfZ2VuZXJpY19wcmludF9j aGlsZCksCiAgICBERVZNRVRIT0QoYnVzX2RyaXZlcl9hZGRlZCwgYnVzX2dlbmVyaWNfZHJpdmVy X2FkZGVkKSwKCgogICAgeyAwLCAwIH0KfTsKCnN0YXRpYyBkcml2ZXJfdCBmZXRfZHJpdmVyID0g ewogICAgImZldCIsCiAgICBmZXRfbWV0aG9kcywKICAgIHNpemVvZihzdHJ1Y3QgZmV0X3NvZnRj KQp9OwoKc3RhdGljIGRldmNsYXNzX3QgZmV0X2RldmNsYXNzOwoKRFJJVkVSX01PRFVMRShpZl9m ZXQsIHBjaSwgZmV0X2RyaXZlciwgZmV0X2RldmNsYXNzLCAwLCAwKTsKI2VuZGlmCgojZGVmaW5l IEZFVF9TRVRCSVQoc2MsIHJlZywgeCkgICAgICAgICAgICAgIFwKICAgIENTUl9XUklURV8xKHNj LCByZWcsICAgICAgICAgICAgICAgIFwKICAgICAgICBDU1JfUkVBRF8xKHNjLCByZWcpIHwgeCkK CiNkZWZpbmUgRkVUX0NMUkJJVChzYywgcmVnLCB4KSAgICAgICAgICAgICAgXAogICAgQ1NSX1dS SVRFXzEoc2MsIHJlZywgICAgICAgICAgICAgICAgXAogICAgICAgIENTUl9SRUFEXzEoc2MsIHJl ZykgJiB+eCkKCiNkZWZpbmUgRkVUX1NFVEJJVDE2KHNjLCByZWcsIHgpICAgICAgICAgICAgICAg IFwKICAgIENTUl9XUklURV8yKHNjLCByZWcsICAgICAgICAgICAgICAgIFwKICAgICAgICBDU1Jf UkVBRF8yKHNjLCByZWcpIHwgeCkKCiNkZWZpbmUgRkVUX0NMUkJJVDE2KHNjLCByZWcsIHgpICAg ICAgICAgICAgICAgIFwKICAgIENTUl9XUklURV8yKHNjLCByZWcsICAgICAgICAgICAgICAgIFwK ICAgICAgICBDU1JfUkVBRF8yKHNjLCByZWcpICYgfngpCgojZGVmaW5lIEZFVF9TRVRCSVQzMihz YywgcmVnLCB4KSAgICAgICAgICAgICAgICBcCiAgICBDU1JfV1JJVEVfNChzYywgcmVnLCAgICAg ICAgICAgICAgICBcCiAgICAgICAgQ1NSX1JFQURfNChzYywgcmVnKSB8IHgpCgojZGVmaW5lIEZF VF9DTFJCSVQzMihzYywgcmVnLCB4KSAgICAgICAgICAgICAgICBcCiAgICBDU1JfV1JJVEVfNChz YywgcmVnLCAgICAgICAgICAgICAgICBcCiAgICAgICAgQ1NSX1JFQURfNChzYywgcmVnKSAmIH54 KQoKI2RlZmluZSBTSU9fU0VUKHgpICAgICAgICAgICAgICAgICAgXAogICAgQ1NSX1dSSVRFXzEo c2MsIEZFVF9NSUlDUiwgICAgICAgICAgXAogICAgICAgIENTUl9SRUFEXzEoc2MsIEZFVF9NSUlD UikgfCB4KQoKI2RlZmluZSBTSU9fQ0xSKHgpICAgICAgICAgICAgICAgICAgXAogICAgQ1NSX1dS SVRFXzEoc2MsIEZFVF9NSUlDUiwgICAgICAgICAgXAogICAgICAgIENTUl9SRUFEXzEoc2MsIEZF VF9NSUlDUikgJiB+eCkKCiNkZWZpbmUgRkVUX1NFVF9NSUkoc2MsIHJlZywgeCkgICAgICAgICAg ICAgXAogICAgZmV0X3dyaXRlX21paShzYywgcmVnLCBmZXRfcmVhZF9taWkgKHNjLCByZWcpfHgp CgojZGVmaW5lIEZFVF9DTFJfTUlJKHNjLCByZWcsIHgpICAgICAgICAgICAgIFwKICAgIGZldF93 cml0ZV9taWkoc2MsIHJlZywgZmV0X3JlYWRfbWlpIChzYywgcmVnKSYgfngpCgpzdGF0aWMgaW50 IGZldF9zYWZlX3J4X29mZihzYykKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgICAgICpzYzsKewog ICAgdV9pbnQxNl90ICAgd3c7CiAgICBGRVRfQ0xSQklUMTYoc2MsIEZFVF9DT01NQU5ELCBGRVRf Q01EX1JYX09OKTsKICAgIERFTEFZKDEwMDAwKTsKCiAgICBmb3IgKHd3ID0gMDsgd3cgPCBXX01B WF9USU1FT1VUOyB3dysrKQogICAgICAgIGlmICghKENTUl9SRUFEXzIoc2MsIEZFVF9DT01NQU5E KSAmIEZFVF9DTURfUlhfT04pKQogICAgICAgICAgICBicmVhazsKICAgIGlmICh3dyA9PSBXX01B WF9USU1FT1VUKSB7CiAgICAgICAgaWYoc2MtPmZldF9jaGlwX3JldmlkIDwgUkVWX0lEX1ZUMzA2 NV9BKQogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAg IC8qIHNldCBNQUMgdG8gaW50ZXJuYWwgbG9vcGJhY2sgKi8KICAgICAgICAgICAgRkVUX1NFVEJJ VChzYywgRkVUX1RYQ0ZHLCBGRVRfVFhDRkdfTEIwKTsKCiAgICAgICAgICAgIC8qIGVudGVyIEZJ Rk8gdGVzdCBtb2RlIHRvIGlzc3VlIFJYIHJlamVjdCAqLwogICAgICAgICAgICBGRVRfU0VUQklU KHNjLCBGRVRfR0ZURVNULCAweDAxKTsKICAgICAgICAgICAgRkVUX1NFVEJJVChzYywgRkVUX1JG VENNRCwgMHgwOCk7CiAgICAgICAgICAgIERFTEFZKDEwMDAwKTsKICAgICAgICAgICAgRkVUX1NF VEJJVChzYywgRkVUX0dGVEVTVCwgMHgwMCk7CgogICAgICAgICAgICAvKiBzZXQgTUFDIHRvIG5v cm1hbCAqLwogICAgICAgICAgICBGRVRfQ0xSQklUKHNjLCBGRVRfVFhDRkcsIEZFVF9UWENGR19M QjApOwoKICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgIH0KICAgICAgICB9Cgog ICAgZWxzZSByZXR1cm4gVFJVRTsKfQoKc3RhdGljIHVuc2lnbmVkIGZldF9yZWFkX21paShzYywg YnlNSUlJbmRleCkKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgICAgICpzYzsKICAgIGNoYXIgICAg YnlNSUlJbmRleDsKewogICAgdW5zaWduZWQgUmV0dXJuTUlJOwogICAgaW50ICAgICB3dzsKICAg IGludCBzOwoKICAgIHMgPSBzcGxpbXAoKTsKCiAgICBTYWZlRGlzYWJsZU1paUF1dG8oc2MpOwoK ICAgIENTUl9XUklURV8xKHNjLCBGRVRfTUlJQUREUiwgYnlNSUlJbmRleCk7CgogICAgREVMQVko MTAwMCk7CgogICAgRkVUX1NFVEJJVChzYywgRkVUX01JSUNSLCBGRVRfTUlJQ1JfUkNNRCk7Cgog ICAgZm9yICh3dz0wO3d3PDB4M2ZmZjt3dysrKQogICAgICAgIGlmICghKENTUl9SRUFEXzEoc2Ms RkVUX01JSUNSKSAmIEZFVF9NSUlDUl9SQ01EKSkKICAgICAgICAgICAgYnJlYWs7CgogICAgUmV0 dXJuTUlJID0gQ1NSX1JFQURfMihzYywgRkVUX01JSURBVEEpOwoKICAgIGlmKHNjLT5mZXRfY2hp cF9yZXZpZCA8IFJFVl9JRF9WVDMwNjVfQSkKICAgICAgICBERUxBWSgxMDAwKTsKCiAgICBFbmFi bGVNaWlBdXRvUG9sbChzYyk7CiAgICAodm9pZClzcGx4KHMpOwogICAgcmV0dXJuKFJldHVybk1J SSk7Cn0KCnN0YXRpYyB2b2lkIGZldF93cml0ZV9taWkoc2MsIGJ5TUlJU2V0Qnl0ZSwgYnlNSUlT ZXREYXRhKQogICAgc3RydWN0IGZldF9zb2Z0YyAgICAgICAgKnNjOwogICAgY2hhciAgICBieU1J SVNldEJ5dGU7CiAgICB1bnNpZ25lZCAgICBieU1JSVNldERhdGE7CnsKCiAgICBpbnQgIHMsd3c7 CgogICAgcyA9IHNwbGltcCgpOwogICAgU2FmZURpc2FibGVNaWlBdXRvKHNjKTsKCiAgICBDU1Jf V1JJVEVfMShzYywgRkVUX01JSUFERFIsIGJ5TUlJU2V0Qnl0ZSk7CgogICAgQ1NSX1dSSVRFXzIo c2MsIEZFVF9NSUlEQVRBLCBieU1JSVNldERhdGEpOwoKICAgIEZFVF9TRVRCSVQoc2MsIEZFVF9N SUlDUiwgRkVUX01JSUNSX1dDTUQpOwoKICAgIGZvciAod3c9MDt3dzwweDNmZmY7d3crKykKICAg ICAgICBpZiAoIShDU1JfUkVBRF8xKHNjLEZFVF9NSUlDUikgJiBGRVRfTUlJQ1JfV0NNRCkpCiAg ICAgICAgICAgIGJyZWFrOwoKICAgIGlmKHNjLT5mZXRfY2hpcF9yZXZpZCA8IFJFVl9JRF9WVDMw NjVfQSkKICAgICAgICBERUxBWSgxMDAwKTsKCiAgICBFbmFibGVNaWlBdXRvUG9sbChzYyk7Cgog ICAgKHZvaWQpc3BseChzKTsKfQoKCi8qCiAqIFF1ZXJ5IGR1cGxleCBtb2RlCiovCnN0YXRpYyBp bnQgZmV0X3F1ZXJ5X2F1dG8oc2MpCiAgICBzdHJ1Y3QgZmV0X3NvZnRjICAgICAgICAqc2M7CnsK ICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2aWQgPj0gUkVWX0lEX1ZUMzEwNikKICAgICAgICByZXR1 cm4gKENTUl9SRUFEXzEoc2MsRkVUX01JSVNSKSAmIDB4MDQpOwoKICAgIGlmIChmZXRfcmVhZF9t aWkoc2MsUEhZX0JNQ1IpICYgUEhZX0JNQ1JfQVVUT05FR0VOQkwpIHsKCiAgICAgICAgaWYgKGZl dF9yZWFkX21paShzYyxQSFlfQU5BUikgJiBQSFlfQU5BUl8xMDBCVFhGVUxMKSB7CiAgICAgICAg ICAgIGlmIChmZXRfcmVhZF9taWkoc2MsUEhZX0xQQVIpICYgUEhZX0xQQVJfMTAwQlRYRlVMTCkK ICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZldF9yZWFk X21paShzYyxQSFlfQU5BUikgJiBQSFlfQU5BUl8xMDBCVDQpIHsKICAgICAgICAgICAgaWYgKGZl dF9yZWFkX21paShzYyxQSFlfTFBBUikgJiBQSFlfTFBBUl8xMDBCVDQpCiAgICAgICAgICAgICAg ICByZXR1cm4gIDA7CiAgICAgICAgfQogICAgICAgIGlmIChmZXRfcmVhZF9taWkoc2MsUEhZX0FO QVIpICYgUEhZX0FOQVJfMTAwQlRYSEFMRikgewogICAgICAgICAgICBpZiAoZmV0X3JlYWRfbWlp KHNjLFBIWV9MUEFSKSAmIFBIWV9MUEFSXzEwMEJUWEhBTEYpCiAgICAgICAgICAgICAgICByZXR1 cm4gMDsKICAgICAgICB9CgogICAgICAgIGlmIChmZXRfcmVhZF9taWkoc2MsUEhZX0FOQVIpICYg UEhZX0FOQVJfMTBCVEZVTEwpIHsKICAgICAgICAgICAgaWYgKGZldF9yZWFkX21paShzYyxQSFlf TFBBUikgJiBQSFlfTFBBUl8xMEJURlVMTCkKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAg ICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICghKGZl dF9yZWFkX21paShzYyxQSFlfQk1DUikgJiBQSFlfQk1DUl9EVVBMRVgpKQogICAgICAgICAgICBy ZXR1cm4gMDsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAxOwogICAgfQp9Ci8qCiAq IHByb2Nlc3MgbGluayBzdGF0dXMgY2hhbmdlIGluIElTUgogKi8Kc3RhdGljIHZvaWQgZmV0X2xp bmtfY2hhbmdlKHNjKQogICAgc3RydWN0IGZldF9zb2Z0YyAgICAgICAgKnNjOwp7CiAgICAvKmNo ZWNrIHdoZXRoZXIgbGluayBmYWlsICovCiAgICBpZiAoQ1NSX1JFQURfMShzYywgRkVUX01JSVNS KSAmIDB4MDIpIHsKICAgICAgIHByaW50ZigiZmV0JWQ6IExpbmsgRmFpbC5cbiIsIHNjLT5mZXRf dW5pdCk7CiAgICB9IGVsc2UgewogICAgICAgaWYgKHNjLT5mZXRfY2hpcF9yZXZpZCA8IDB4MjAg KQogICAgICAgICAgIC8qIHdhaXQgZm9yIHdyaXRpbmcgIGJhY2sgdGhlIEFOTFBBUiBpbiBQSFkg YW5kIE1JSVNSIGluIE1BQyAqLwogICAgICAgICAgIC8qIHRoZW4gd2Ugd29uJ3QgZ2V0IHRoZSB3 cm9uZyB2YWx1ZSBpbiBkb19hdXRvbmVnb3RpYXRpb24gZnVuY3Rpb24gKi8KICAgICAgICAgICBE RUxBWSgxMDAwMDApOwogICAgICAgICAgIC8qIEluIGF1dG8gbW9kZSwgY2hlY2sgdGhlIHNwZWVk IGFuZCBkdXBsZXggbW9kZSBhZ2FpbiAqLwogICAgICAgICAgIC8qIEluIGZvcmNlIG1vZGUsIGRv IG5vdGhpbmcgKi8KICAgICAgIGlmIChzYy0+ZmV0X2F1dG9uZWcgPT0gMSkgewogICAgICAgICAg ICBkb19hdXRvbmVnb3RpYXRpb24oc2MpOwogICAgICAgfQogICAgICAgIHByaW50ZigiZmV0JWQ6 IExpbmsgc3VjY2Vzcy5cbiIsIHNjLT5mZXRfdW5pdCk7CgogICAgICAgIC8qIGlmIFZUMzEwNiBh bmQgVlQzMDY1ICovCiAgICAgICAgaWYgKHNjLT5mZXRfY2hpcF9yZXZpZCA+PSBSRVZfSURfVlQz MDY1X0EpCiAgICAgICAgICAgIGZsb3dfY29udHJvbF9hYmlsaXR5IChzYyk7CiAgICB9CgogICAg aWYgKGZldF9xdWVyeV9hdXRvKHNjKSkgewogICAgICAgIEZFVF9TRVRCSVQxNihzYywgRkVUX0NP TU1BTkQsIEZFVF9DTURfRkRYKTsgICAgICAgLyogU2V0IENoaXAgRnVsbGR1cGxleCBtb2RlICov CiAgICAgICAgc2MtPmZldF9mdWxsX2R1cGxleCA9IDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAg ICBGRVRfQ0xSQklUMTYoc2MsIEZFVF9DT01NQU5ELCBGRVRfQ01EX0ZEWCk7ICAgICAgLyogU2V0 IENoaXAgSGFsZmR1cGxleCBtb2RlICovCiAgICAgICAgc2MtPmZldF9mdWxsX2R1cGxleCA9IDA7 CiAgICB9Cgp9CgovKgogKiBDYWxjdWxhdGUgQ1JDIG9mIGEgbXVsdGljYXN0IGdyb3VwIGFkZHJl c3MsIHJldHVybiB0aGUgbG93ZXIgNiBiaXRzLgogKi8Kc3RhdGljIHVfaW50OF90IGZldF9jYWxj aGFzaChhZGRyKQogICAgdV9pbnQ4X3QgICAgICAgICphZGRyOwp7CiAgICB1X2ludDMyX3QgICAg ICAgY3JjLCBjYXJyeTsKICAgIGludCAgICAgICAgIGksIGo7CiAgICB1X2ludDhfdCAgICAgICAg YzsKCiAgICAvKiBDb21wdXRlIENSQyBmb3IgdGhlIGFkZHJlc3MgdmFsdWUuICovCiAgICBjcmMg PSAweEZGRkZGRkZGOyAvKiBpbml0aWFsIHZhbHVlICovCgogICAgZm9yIChpID0gMDsgaSA8IDY7 IGkrKykgewogICAgICAgIGMgPSAqKGFkZHIgKyBpKTsKICAgICAgICBmb3IgKGogPSAwOyBqIDwg ODsgaisrKSB7CiAgICAgICAgICAgIGNhcnJ5ID0gKChjcmMgJiAweDgwMDAwMDAwKSA/IDEgOiAw KSBeIChjICYgMHgwMSk7CiAgICAgICAgICAgIGNyYyA8PD0gMTsKICAgICAgICAgICAgYyA+Pj0g MTsKICAgICAgICAgICAgaWYgKGNhcnJ5KQogICAgICAgICAgICAgICAgY3JjID0gKGNyYyBeIDB4 MDRjMTFkYjYpIHwgY2Fycnk7CiAgICAgICAgfQogICAgfQoKICAgIC8qIHJldHVybiB0aGUgZmls dGVyIGJpdCBwb3NpdGlvbiAqLwogICAgcmV0dXJuKChjcmMgPj4gMjYpICYgMHgwMDAwMDAzRik7 Cn0KCi8qCiAqIFByb2dyYW0gdGhlIDY0LWJpdCBtdWx0aWNhc3QgaGFzaCBmaWx0ZXIuCiAqLwpz dGF0aWMgdm9pZCBmZXRfc2V0bXVsdGkoc2MpCiAgICBzdHJ1Y3QgZmV0X3NvZnRjICAgICAgICAq c2M7CnsKICAgIHN0cnVjdCBpZm5ldCAgICAgICAgKmlmcDsKICAgIGludCAgICAgICAgIGggPSAw OwogICAgdV9pbnQzMl90ICAgICAgIGhhc2hlc1syXSA9IHsgMCwgMCB9OwogICAgc3RydWN0IGlm bXVsdGlhZGRyICAqaWZtYTsKICAgIHVfaW50OF90ICAgICAgICByeGZpbHQ7CiAgICBpbnQgICAg ICAgICBtY250ID0gMDsKCiAgICBpZnAgPSAmc2MtPmFycGNvbS5hY19pZjsKCiAgICByeGZpbHQg PSBDU1JfUkVBRF8xKHNjLCBGRVRfUlhDRkcpOwoKICAgIGlmIChpZnAtPmlmX2ZsYWdzICYgSUZG X0FMTE1VTFRJIHx8IGlmcC0+aWZfZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogICAgICAgIHJ4Zmls dCB8PSBGRVRfUlhDRkdfUlhfTVVMVEk7CiAgICAgICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9SWENG RywgcnhmaWx0KTsKICAgICAgICBDU1JfV1JJVEVfNChzYywgRkVUX01BUjAsIDB4RkZGRkZGRkYp OwogICAgICAgIENTUl9XUklURV80KHNjLCBGRVRfTUFSMSwgMHhGRkZGRkZGRik7CiAgICAgICAg cmV0dXJuOwogICAgfQoKICAgIC8qIGZpcnN0LCB6b3QgYWxsIHRoZSBleGlzdGluZyBoYXNoIGJp dHMgKi8KICAgIENTUl9XUklURV80KHNjLCBGRVRfTUFSMCwgMCk7CiAgICBDU1JfV1JJVEVfNChz YywgRkVUX01BUjEsIDApOwoKICAgIC8qIG5vdyBwcm9ncmFtIG5ldyBvbmVzICovCiAgICBpZiAo c2MtPmZldF9jaGlwX3JldmlkIDwgUkVWX0lEX1ZUMzEwNl9TKSB7CiAgICAgICAgZm9yIChpZm1h ID0gaWZwLT5pZl9tdWx0aWFkZHJzLmxoX2ZpcnN0OyBpZm1hICE9IE5VTEw7CiAgICAgICAgICAg ICAgICBpZm1hID0gaWZtYS0+aWZtYV9saW5rLmxlX25leHQpIHsKICAgICAgICAgICAgaWYgKGlm bWEtPmlmbWFfYWRkci0+c2FfZmFtaWx5ICE9IEFGX0xJTkspCiAgICAgICAgICAgICAgICBjb250 aW51ZTsKICAgICAgICAgICAgaCA9IGZldF9jYWxjaGFzaChMTEFERFIoKHN0cnVjdCBzb2NrYWRk cl9kbCAqKWlmbWEtPmlmbWFfYWRkcikpOwogICAgICAgICAgICBpZiAoaCA8IDMyKQogICAgICAg ICAgICAgICAgaGFzaGVzWzBdIHw9ICgxIDw8IGgpOwogICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICBoYXNoZXNbMV0gfD0gKDEgPDwgKGggLSAzMikpOwogICAgICAgICAgICBtY250Kys7 CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgZm9yIChpZm1hID0gaWZwLT5pZl9t dWx0aWFkZHJzLmxoX2ZpcnN0OyBpZm1hICE9IE5VTEw7CiAgICAgICAgICAgICAgICBpZm1hID0g aWZtYS0+aWZtYV9saW5rLmxlX25leHQpIHsKICAgICAgICAgICAgaWYgKGlmbWEtPmlmbWFfYWRk ci0+c2FfZmFtaWx5ICE9IEFGX0xJTkspCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg ICAgICAgQ0FNX2RhdGFfd3JpdGUoc2MsMCxtY250LExMQUREUigoc3RydWN0IHNvY2thZGRyX2Rs ICopaWZtYS0+aWZtYV9hZGRyKSk7CiAgICAgICAgICAgIG1jbnQrKzsKICAgICAgICB9CiAgICAg ICAgQ0FNX21hc2tfd3JpdGUoc2MsMCwoMHhGRkZGRkZGRlVMPj4oMzItbWNudCkpKTsKICAgIH0K CiAgICBpZiAobWNudCkKICAgICAgICByeGZpbHQgfD0gRkVUX1JYQ0ZHX1JYX01VTFRJOwogICAg ZWxzZQogICAgICAgIHJ4ZmlsdCAmPSB+RkVUX1JYQ0ZHX1JYX01VTFRJOwoKICAgIENTUl9XUklU RV80KHNjLCBGRVRfTUFSMCwgaGFzaGVzWzBdKTsKICAgIENTUl9XUklURV80KHNjLCBGRVRfTUFS MSwgaGFzaGVzWzFdKTsKICAgIENTUl9XUklURV8xKHNjLCBGRVRfUlhDRkcsIHJ4ZmlsdCk7Cgog ICAgcmV0dXJuOwp9CgpzdGF0aWMgdm9pZCBmZXRfcmVzZXQoc2MpCiAgICBzdHJ1Y3QgZmV0X3Nv ZnRjICAgICAgICAqc2M7CnsKICAgIHVfaW50MTZfdCAgIHd3OwoKICAgIEZFVF9TRVRCSVQxNihz YywgRkVUX0NPTU1BTkQsIEZFVF9DTURfUkVTRVQpOwoKICAgIGZvciAod3cgPSAwOyB3dyA8IFdf TUFYX1RJTUVPVVQ7IHd3KyspIHsKICAgICAgICBERUxBWSgxMCk7CiAgICAgICAgaWYgKCEoQ1NS X1JFQURfMihzYywgRkVUX0NPTU1BTkQpICYgRkVUX0NNRF9SRVNFVCkpCiAgICAgICAgICAgIGJy ZWFrOwogICAgfQogICAgaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKICAgICAgICBpZiAoc2Mt PmZldF9jaGlwX3JldmlkIDwgUkVWX0lEX1ZUMzA2NV9BKQogICAgICAgICAgICBwcmludGYoImZl dCVkOiByZXNldCBuZXZlciBjb21wbGV0ZWQhXG4iLCBzYy0+ZmV0X3VuaXQpOwogICAgICAgIGVs c2UKICAgICAgICAgICAgLyogdHVybiBvbiBmb3JjZSByZXNldCAqLwogICAgICAgICAgICBGRVRf U0VUQklUKHNjLCBGRVRfTUlTQ19DUjEsIEZFVF9NSVNDQ1IxX0ZPUlNSU1QpOwogICAgICAgIH0K CgogICAgLyogV2FpdCBhIGxpdHRsZSB3aGlsZSBmb3IgdGhlIGNoaXAgdG8gZ2V0IGl0cyBicmFp bnMgaW4gb3JkZXIuICovCiAgICBERUxBWSgxMDAwKTsKCiAgICByZXR1cm47Cn0KCi8qCiAqIFBy b2JlIGZvciBvdXIgY2hpcC4gQ2hlY2sgdGhlIFBDSSB2ZW5kb3IgYW5kIGRldmljZQogKiBJRHMg YWdhaW5zdCBvdXIgbGlzdCBhbmQgcmV0dXJuIGEgZGV2aWNlIG5hbWUgaWYgd2UgZmluZCBhIG1h dGNoLgogKi8KI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDQwMDAwMApzdGF0aWMgaW50IGZldF9w cm9iZShkZXYpCiAgICBkZXZpY2VfdCAgICAgICAgZGV2Owp7CiAgICBzdHJ1Y3QgZmV0X3R5cGUg ICAgICp0OwoKICAgIHQgPSBmZXRfZGV2czsKCiAgICB3aGlsZSh0LT5mZXRfbmFtZSAhPSBOVUxM KSB7CiAgICAgICAgaWYgKChwY2lfZ2V0X3ZlbmRvcihkZXYpID09IHQtPmZldF92aWQpICYmCiAg ICAgICAgICAgIChwY2lfZ2V0X2RldmljZShkZXYpID09IHQtPmZldF9kaWQpKSB7CiAgICAgICAg ICAgIGRldmljZV9zZXRfZGVzYyhkZXYsIHQtPmZldF9uYW1lKTsKICAgICAgICAgICAgcmV0dXJu KDApOwogICAgICAgIH0KICAgICAgICB0Kys7CiAgICB9CgogICAgcmV0dXJuKEVOWElPKTsKfQoK I2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA0MDAwMDAKCnN0YXRpYyBjb25zdCBjaGFyICoKZmV0 X3Byb2JlKGNvbmZpZ19pZCwgZGV2aWNlX2lkKQogICAgcGNpY2lfdCAgICAgICAgIGNvbmZpZ19p ZDsKICAgIHBjaWRpX3QgICAgICAgICBkZXZpY2VfaWQ7CnsKICAgIHN0cnVjdCBmZXRfdHlwZSAg ICAgKnQ7CgogICAgdCA9IGZldF9kZXZzOwoKICAgIHdoaWxlKHQtPmZldF9uYW1lICE9IE5VTEwp IHsKICAgICAgICBpZiAoKGRldmljZV9pZCAmIDB4RkZGRikgPT0gdC0+ZmV0X3ZpZCAmJgogICAg ICAgICAgICAoKGRldmljZV9pZCA+PiAxNikgJiAweEZGRkYpID09IHQtPmZldF9kaWQpIHsKICAg ICAgICAgICAgICAgIHJldHVybih0LT5mZXRfbmFtZSk7CiAgICAgICAgfQogICAgICAgIHQrKzsK ICAgIH0KCiAgICByZXR1cm4oTlVMTCk7Cn0KI2VuZGlmCgovKgogKiBBdHRhY2ggdGhlIGludGVy ZmFjZS4gQWxsb2NhdGUgc29mdGMgc3RydWN0dXJlcywgZG8gaWZtZWRpYQogKiBzZXR1cCBhbmQg ZXRoZXJuZXQvQlBGIGF0dGFjaC4KICovCgojaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNDAwMDAw CgpzdGF0aWMgdm9pZCBlbmFibGVfbW1pbyhzdHJ1Y3QgZmV0X3NvZnRjICpzYykgewogICAgc2Mt PmZldF9idGFnID0gcm1hbl9nZXRfYnVzdGFnKHNjLT5mZXRfcmVzMSk7CiAgICBzYy0+ZmV0X2Jo YW5kbGUgPSBybWFuX2dldF9idXNoYW5kbGUoc2MtPmZldF9yZXMxKTsKICAgIHdoaWxlIChDU1Jf UkVBRF8xKHNjLCBGRVRfRUVDU1IpICYgRkVUX0VFQ1NSX0xPQUQpOwogICAgaWYgKHNjLT5mZXRf Y2hpcF9yZXZpZDxSRVZfSURfVlQzMDY1X0EpCiAgICAgICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9D RkdBLCBDU1JfUkVBRF8xKHNjLEZFVF9DRkdBKXwweDIwKTsKICAgIGVsc2UKICAgICAgICBDU1Jf V1JJVEVfMShzYywgRkVUX0NGR0QsIENTUl9SRUFEXzEoc2MsRkVUX0NGR0QpfDB4ODApOwogICAg c2MtPmZldF9idGFnID0gcm1hbl9nZXRfYnVzdGFnKHNjLT5mZXRfcmVzMik7CiAgICBzYy0+ZmV0 X2JoYW5kbGUgPSBybWFuX2dldF9idXNoYW5kbGUoc2MtPmZldF9yZXMyKTsKfQoKc3RhdGljIGlu dCBmZXRfYXR0YWNoKGRldikKICAgIGRldmljZV90ICAgICAgICBkZXY7CnsKICAgIGludCAgICAg ICAgIHMsIGk7CiAgICB1X2NoYXIgICAgICAgICAgZWFkZHJbRVRIRVJfQUREUl9MRU5dOwogICAg dV9pbnQzMl90ICAgICAgIGNvbW1hbmQsIGlkOwogICAgc3RydWN0IGZldF9zb2Z0YyAgICAgICAg KnNjOwogICAgc3RydWN0IGlmbmV0ICAgICAgICAqaWZwOwogICAgaW50ICAgICAgICAgdW5pdCwg ZXJyb3IgPSAwLCByaWQsaWR4OwogICAgdV9pbnQxNl90ICAgICAgIG5tZWRpYSwgZGVmbWVkaWE7 CiAgICBjb25zdCBpbnQgICAgICAgKm1lZGlhOyAgICAKCiAgICBzID0gc3BsaW1wKCk7CgogICAg c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICB1bml0ID0gZGV2aWNlX2dldF91bml0KGRl dik7CiAgICBiemVybyhzYywgc2l6ZW9mKHN0cnVjdCBmZXRfc29mdGMgKikpOwoKICAgIC8qCiAg ICAgKiBIYW5kbGUgcG93ZXIgbWFuYWdlbWVudCBub25zZW5zZS4KICAgICAqLwoKICAgIGNvbW1h bmQgPSBwY2lfcmVhZF9jb25maWcoZGV2LCBGRVRfUENJX0NBUElELCA0KSAmIDB4MDAwMDAwRkY7 CiAgICBpZiAoY29tbWFuZCA9PSAweDAxKSB7CgogICAgICAgIGNvbW1hbmQgPSBwY2lfcmVhZF9j b25maWcoZGV2LCBGRVRfUENJX1BXUk1HTVRDVFJMLCA0KTsKICAgICAgICBpZiAoY29tbWFuZCAm IEZFVF9QU1RBVEVfTUFTSykgewogICAgICAgICAgICB1X2ludDMyX3QgICAgICAgaW9iYXNlLCBt ZW1iYXNlLCBpcnE7CgogICAgICAgICAgICAvKiBTYXZlIGltcG9ydGFudCBQQ0kgY29uZmlnIGRh dGEuICovCiAgICAgICAgICAgIGlvYmFzZSA9IHBjaV9yZWFkX2NvbmZpZyhkZXYsIEZFVF9QQ0lf TE9JTywgNCk7CiAgICAgICAgICAgIG1lbWJhc2UgPSBwY2lfcmVhZF9jb25maWcoZGV2LCBGRVRf UENJX0xPTUVNLCA0KTsKICAgICAgICAgICAgaXJxID0gcGNpX3JlYWRfY29uZmlnKGRldiwgRkVU X1BDSV9JTlRMSU5FLCA0KTsKCiAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBwb3dlciBzdGF0ZS4g Ki8KICAgICAgICAgICAgcHJpbnRmKCJmZXQlZDogY2hpcCBpcyBpbiBEJWQgcG93ZXIgbW9kZSAi CiAgICAgICAgICAgICItLSBzZXR0aW5nIHRvIEQwXG4iLCB1bml0LCBjb21tYW5kICYgRkVUX1BT VEFURV9NQVNLKTsKICAgICAgICAgICAgY29tbWFuZCAmPSAweEZGRkZGRkZDOwogICAgICAgICAg ICBwY2lfd3JpdGVfY29uZmlnKGRldiwgRkVUX1BDSV9QV1JNR01UQ1RSTCwgY29tbWFuZCwgNCk7 CgogICAgICAgICAgICAvKiBSZXN0b3JlIFBDSSBjb25maWcgZGF0YS4gKi8KICAgICAgICAgICAg cGNpX3dyaXRlX2NvbmZpZyhkZXYsIEZFVF9QQ0lfTE9JTywgaW9iYXNlLCA0KTsKICAgICAgICAg ICAgcGNpX3dyaXRlX2NvbmZpZyhkZXYsIEZFVF9QQ0lfTE9NRU0sIG1lbWJhc2UsIDQpOwogICAg ICAgICAgICBwY2lfd3JpdGVfY29uZmlnKGRldiwgRkVUX1BDSV9JTlRMSU5FLCBpcnEsIDQpOwog ICAgICAgIH0KICAgIH0KCiAgICAvKgogICAgICogTWFwIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVy cy4KICAgICAqLwogICAgY29tbWFuZCA9IHBjaV9yZWFkX2NvbmZpZyhkZXYsIFBDSV9DT01NQU5E X1NUQVRVU19SRUcsIDQpOwogICAgY29tbWFuZCB8PSAoUENJTV9DTURfUE9SVEVOfFBDSU1fQ01E X01FTUVOfFBDSU1fQ01EX0JVU01BU1RFUkVOKTsKICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCBQ Q0lfQ09NTUFORF9TVEFUVVNfUkVHLCBjb21tYW5kLCA0KTsKICAgIGNvbW1hbmQgPSBwY2lfcmVh ZF9jb25maWcoZGV2LCBQQ0lfQ09NTUFORF9TVEFUVVNfUkVHLCA0KTsKCiAgICBzYy0+ZmV0X2No aXBfcmV2aWQgID0gcGNpX3JlYWRfY29uZmlnKGRldiwgRkVUX1BDSV9SRVZJRCwgNCkgJiAweDAw MDAwMEZGOwogICAgaWQgPSBwY2lfcmVhZF9jb25maWcoZGV2LCBGRVRfUENJX1ZFTkRPUl9JRCwg NCk7CiAgICBpZiAoUENJX1ZFTkRPUklEKGlkKSAhPSBWRU5ET1JJRCkgewogICAgICAgIHByaW50 ZigiZmV0JWQ6IHdyb25nIHZlbmRvciBJRCAhXG4iLCB1bml0KTsKICAgICAgICBnb3RvIGZhaWw7 CiAgICB9CgogICAgaWYgKCEoUENJX0NISVBJRChpZCkgPT0gREVWSUNFSURfMzA0MyB8fAogICAg ICAgICAgUENJX0NISVBJRChpZCkgPT0gREVWSUNFSURfMzA2NSB8fAogICAgICAgICAgICAgIFBD SV9DSElQSUQoaWQpID09IERFVklDRUlEXzMxMDYgfHwKICAgICAgICAgICAgICBQQ0lfQ0hJUElE KGlkKSA9PSBERVZJQ0VJRF8zMDUzKSkgewogICAgICAgIHByaW50ZigiZmV0JWQ6IHdyb25nIGRl dmljZSBJRCAhXG4iLCB1bml0KTsKICAgICAgICBnb3RvIGZhaWw7CiAgICB9CgojaWZkZWYgRkVU X1VTRUlPU1BBQ0UKICAgIGlmICghKGNvbW1hbmQgJiBQQ0lNX0NNRF9QT1JURU4pKSB7CiAgICAg ICAgcHJpbnRmKCJmZXQlZDogZmFpbGVkIHRvIGVuYWJsZSBJL08gcG9ydHMhXG4iLCB1bml0KTsK ICAgICAgICBmcmVlKHNjLCBNX0RFVkJVRik7CiAgICAgICAgZ290byBmYWlsOwogICAgfQojZWxz ZQogICAgaWYgKCEoY29tbWFuZCAmIFBDSU1fQ01EX01FTUVOKSkgewogICAgICAgIHByaW50Zigi ZmV0JWQ6IGZhaWxlZCB0byBlbmFibGUgbWVtb3J5IG1hcHBpbmchXG4iLCB1bml0KTsKICAgICAg ICBnb3RvIGZhaWw7CiAgICB9CiNlbmRpZgoKICAgIHJpZCA9IEZFVF9QQ0lfTE9JTzsKICAgIHNj LT5mZXRfcmVzMSA9IGJ1c19hbGxvY19yZXNvdXJjZShkZXYsIFNZU19SRVNfSU9QT1JULCAmcmlk LAogICAgICAgIDAsIH4wLCAxLCBSRl9BQ1RJVkUpOwogICAgaWYgKHNjLT5mZXRfcmVzMSA9PSBO VUxMKSB7CiAgICAgICAgcHJpbnRmKCJmZXQlZDogY291bGRuJ3QgbWFwIHBvcnRzL21lbW9yeVxu IiwgdW5pdCk7CiAgICAgICAgZXJyb3IgPSBFTlhJTzsKICAgICAgICBnb3RvIGZhaWw7CiAgICB9 CgogICAgcmlkID0gRkVUX1BDSV9MT01FTTsKICAgIHNjLT5mZXRfcmVzMiA9IGJ1c19hbGxvY19y ZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLCAmcmlkLAogICAgICAgIDAsIH4wLCAxLCBSRl9B Q1RJVkUpOwogICAgaWYgKHNjLT5mZXRfcmVzMiA9PSBOVUxMKSB7CiAgICAgICAgcHJpbnRmKCJm ZXQlZDogY291bGRuJ3QgbWFwIHBvcnRzL21lbW9yeVxuIiwgdW5pdCk7CiAgICAgICAgYnVzX3Jl bGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lPUE9SVCwgRkVUX1BDSV9MT0lPLCBzYy0+ZmV0 X3JlczEpOwogICAgICAgIGVycm9yID0gRU5YSU87CiAgICAgICAgZ290byBmYWlsOwogICAgfQoK ICAgIGVuYWJsZV9tbWlvKHNjKTsKCiAgICBzYy0+ZmV0X2J0YWcgPSBybWFuX2dldF9idXN0YWco c2MtPmZldF9yZXMyKTsKICAgIHNjLT5mZXRfYmhhbmRsZSA9IHJtYW5fZ2V0X2J1c2hhbmRsZShz Yy0+ZmV0X3JlczIpOwoKICAgIC8qIEFsbG9jYXRlIGludGVycnVwdCAqLwogICAgcmlkID0gMDsK ICAgIHNjLT5mZXRfaXJxID0gYnVzX2FsbG9jX3Jlc291cmNlKGRldiwgU1lTX1JFU19JUlEsICZy aWQsIDAsIH4wLCAxLAogICAgICAgIFJGX1NIQVJFQUJMRSB8IFJGX0FDVElWRSk7CgogICAgaWYg KHNjLT5mZXRfaXJxID09IE5VTEwpIHsKICAgICAgICBwcmludGYoImZldCVkOiBjb3VsZG4ndCBt YXAgaW50ZXJydXB0XG4iLCB1bml0KTsKICAgICAgICBidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYs IFNZU19SRVNfSU9QT1JULCBGRVRfUENJX0xPSU8sIHNjLT5mZXRfcmVzMSk7CiAgICAgICAgYnVz X3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX01FTU9SWSwgRkVUX1BDSV9MT01FTSwgc2Mt PmZldF9yZXMyKTsKICAgICAgICBlcnJvciA9IEVOWElPOwogICAgICAgIGdvdG8gZmFpbDsKICAg IH0KCiAgICBlcnJvciA9IGJ1c19zZXR1cF9pbnRyKGRldiwgc2MtPmZldF9pcnEsIElOVFJfVFlQ RV9ORVQsCiAgICAgICAgZmV0X2ludHIsIHNjLCAmc2MtPmZldF9pbnRyaGFuZCk7CgogICAgaWYg KGVycm9yKSB7CiAgICAgICAgYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lSUSwg MCwgc2MtPmZldF9pcnEpOwogICAgICAgIGJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JF U19JT1BPUlQsIEZFVF9QQ0lfTE9JTywgc2MtPmZldF9yZXMxKTsKICAgICAgICBidXNfcmVsZWFz ZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLCBGRVRfUENJX0xPTUVNLCBzYy0+ZmV0X3Jl czIpOwogICAgICAgIHByaW50ZigiZmV0JWQ6IGNvdWxkbid0IHNldCB1cCBpcnFcbiIsIHVuaXQp OwogICAgICAgIGdvdG8gZmFpbDsKICAgIH0KCiAgICAgLyogaWYgdnQzMDY1ICovCiAgICAgLyog c2V0IHRoZSBNQUMgdG8gRDAgYmVmb3JlIGluaXRpYWxpemF0aW9uICovCiAgICAgICAgaWYgKHNj LT5mZXRfY2hpcF9yZXZpZCA+PSBSRVZfSURfVlQzMDY1X0EgKSB7CiAgICAgICAgICAgIC8qIGNs ZWFyIHN0aWNreSBiaXQgYmVmb3JlIHJlc2V0ICYgcmVhZCBldGhlcm5ldCBhZGRyZXNzICAqLwog ICAgICAgICAgICBDU1JfV1JJVEVfMShzYywgRkVUX1NUSUNLSFcsIENTUl9SRUFEXzEoc2MsIEZF VF9TVElDS0hXKSAmIDB4RkMpOwogICAgICAgICAgICAvKiBkaXNhYmxlIGZvcmNlIFBNRS1lbmFi bGUgKi8KICAgICAgICAgICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9XT0xDR0NMUiwgMHg4MCk7CiAg ICAgICAgICAgIC8qIGRpc2FibGUgcG93ZXItZXZlbnQgY29uZmlnIGJpdCAqLwogICAgICAgICAg ICBDU1JfV1JJVEVfMShzYywgRkVUX1dPTENSQ0xSLCAweEZGKTsKICAgICAgICAgICAgLyogY2xl YXIgcG93ZXIgc3RhdHVzICovCiAgICAgICAgICAgIENTUl9XUklURV8xKHNjLCBGRVRfUFdSQ1NS Q0xSLCAweEZGKTsKICAgICAgICB9CgogICAgICAgIC8qIFJlc2V0IHRoZSBhZGFwdGVyLiBhZnRl ciB0dXJuIHRvIEQwKi8KICAgICAgICBmZXRfcmVzZXQoc2MpOwoKICAgICAgICAvKiBpc3N1ZSBB VVRPTG9hZCBpbiBFRUNTUiB0byByZWxvYWQgZWVwcm9tICovCgogICAgICAgIGVuYWJsZV9tbWlv KHNjKTsKCiAgICAgICAgLyogaWYgdnQzMDY1IGRlbGF5IGFmdGVyIHJlc2V0ICovCiAgICAgICAg aWYgKHNjLT5mZXRfY2hpcF9yZXZpZCA+PSBSRVZfSURfVlQzMDY1X0EgKSB7CiAgICAgICAgICAg IERFTEFZKDEwMDAwKTsKICAgICAgICAgICAgLyogZm9yIDMwNjVELCBFRVBST00gcmVsb2FkZWQg d2lsbCBjYXVzZSBiaXQgMCBpbiBNQUNfUkVHX0NGR0EgdHVybmVkIG9uLgogICAgICAgICAgICAg ICAgaXQgbWFrZXMgTUFDIHJlY2VpdmUgbWFnaWMgcGFja2V0IGF1dG9tYXRpY2FsbHkuIFNvLCBk cml2ZXIgdHVybiBpdCBvZmYuICovCgogICAgICAgICAgICBDU1JfV1JJVEVfMShzYywgRkVUX0NG R0EsQ1NSX1JFQURfMShzYywgRkVUX0NGR0EpICYgMHhGRSk7CiAgICAgICAgfQoKCiAgICAgICAg LyogVHVybiBvbiBiaXQyIChNSUlPTikgaW4gUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMHg1 MyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKi8KICAgICAgICBwY2lfd3JpdGVfY29uZmlnKGRldiwg RkVUX1BDSV9NT0RFLCBwY2lfcmVhZF9jb25maWcoZGV2LCBGRVRfUENJX01PREUsIDQpfChGRVRf TU9ERTNfTUlJT048PDI0KSwgNCk7CiAgICAvKgogICAgICogR2V0IHN0YXRpb24gYWRkcmVzcy4g VGhlIHdheSB0aGUgUmhpbmUgY2hpcHMgd29yaywKICAgICAqIHlvdSdyZSBub3QgYWxsb3dlZCB0 byBkaXJlY3RseSBhY2Nlc3MgdGhlIEVFUFJPTSBvbmNlCiAgICAgKiB0aGV5J3ZlIGJlZW4gcHJv Z3JhbW1lZCBhIHNwZWNpYWwgd2F5LiBDb25zZXF1ZW50bHksCiAgICAgKiB3ZSBuZWVkIHRvIHJl YWQgdGhlIG5vZGUgYWRkcmVzcyBmcm9tIHRoZSBQQVIwIGFuZCBQQVIxCiAgICAgKiByZWdpc3Rl cnMuCiAgICAgKi8KICAgIGZvciAoaSA9IDA7IGkgPCBFVEhFUl9BRERSX0xFTjsgaSsrKQogICAg ICAgIGVhZGRyW2ldID0gQ1NSX1JFQURfMShzYywgRkVUX1BBUjAgKyBpKTsKCiAgICAvKgogICAg ICogQSBSaGluZSBjaGlwIHdhcyBkZXRlY3RlZC4gSW5mb3JtIHRoZSB3b3JsZC4KICAgICAqLwog ICAgcHJpbnRmKCJmZXQlZDogRXRoZXJuZXQgYWRkcmVzczogJTZEXG4iLCB1bml0LCBlYWRkciwg IjoiKTsKCiAgICAvKiBwcmludCBkcml2ZXIgdmVyc2lvbiAqLwogICAgcHJpbnRmKCJmZXQlZDog aWZfZmV0LmM6IHYzLjEwIFxuIiwgdW5pdCk7CgogICAgc2MtPmZldF91bml0ID0gdW5pdDsKICAg IGJjb3B5KGVhZGRyLCAoY2hhciAqKSZzYy0+YXJwY29tLmFjX2VuYWRkciwgRVRIRVJfQUREUl9M RU4pOwoKICAgIHNjLT5mZXRfbGRhdGEgPSBjb250aWdtYWxsb2Moc2l6ZW9mKHN0cnVjdCBmZXRf bGlzdF9kYXRhKSwgTV9ERVZCVUYsCiAgICAgICAgTV9OT1dBSVQsIDAsIDB4ZmZmZmZmZmYsIFBB R0VfU0laRSwgMCk7CgogICAgaWYgKHNjLT5mZXRfbGRhdGEgPT0gTlVMTCkgewogICAgICAgIHBy aW50ZigiZmV0JWQ6IG5vIG1lbW9yeSBmb3IgbGlzdCBidWZmZXJzIVxuIiwgdW5pdCk7CiAgICAg ICAgYnVzX3RlYXJkb3duX2ludHIoZGV2LCBzYy0+ZmV0X2lycSwgc2MtPmZldF9pbnRyaGFuZCk7 CiAgICAgICAgYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lSUSwgMCwgc2MtPmZl dF9pcnEpOwogICAgICAgIGJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JT1BPUlQs IEZFVF9QQ0lfTE9JTywgc2MtPmZldF9yZXMxKTsKICAgICAgICBidXNfcmVsZWFzZV9yZXNvdXJj ZShkZXYsIFNZU19SRVNfTUVNT1JZLCBGRVRfUENJX0xPTUVNLCBzYy0+ZmV0X3JlczIpOwogICAg ICAgIGVycm9yID0gRU5YSU87CiAgICAgICAgZ290byBmYWlsOwogICAgfQoKICAgIGJ6ZXJvKHNj LT5mZXRfbGRhdGEsIHNpemVvZihzdHJ1Y3QgZmV0X2xpc3RfZGF0YSkpOwoKICAgIGlmcCA9ICZz Yy0+YXJwY29tLmFjX2lmOwogICAgaWZwLT5pZl9zb2Z0YyA9IHNjOwogICAgaWZwLT5pZl91bml0 ID0gdW5pdDsKICAgIGlmcC0+aWZfbmFtZSA9ICJmZXQiOwogICAgaWZwLT5pZl9tdHUgPSBFVEhF Uk1UVTsKICAgIGlmcC0+aWZfZmxhZ3MgPSBJRkZfQlJPQURDQVNUIHwgSUZGX1NJTVBMRVggfCBJ RkZfTVVMVElDQVNUOwogICAgaWZwLT5pZl9pb2N0bCA9IGZldF9pb2N0bDsKICAgIGlmcC0+aWZf b3V0cHV0ID0gZXRoZXJfb3V0cHV0OwogICAgaWZwLT5pZl9zdGFydCA9IGZldF9zdGFydDsKICAg IGlmcC0+aWZfd2F0Y2hkb2cgPSBmZXRfd2F0Y2hkb2c7CiAgICBpZnAtPmlmX2luaXQgPSBmZXRf aW5pdDsKICAgIGlmcC0+aWZfYmF1ZHJhdGUgPSAxMDAwMDAwMDA7CiAgICBpZnAtPmlmX3NuZC5p ZnFfbWF4bGVuID0gRkVUX1RYX0xJU1RfQ05UIC0gMTsKCiAgICAgICAgLyogdHVybiBvbiBNSUkg bGluayBjaGFuZ2UgKi8KICAgICAgICAvKiBpZiB0aGUgTUFENC0wIGlzIG5vdCAweDAwMDEsIHRo ZW4gTGluayBGYWlsIHdpbGwgYmUgb24gKi8KICAgICAgICB0dXJuX29uX01JSV9saW5rKHNjKTsK CiAgICAgICAgaWYgKHNjLT5mZXRfY2hpcF9yZXZpZCA+PSBSRVZfSURfVlQzMTA2KQogICAgICAg ICAgICBzZXRfZmxvd19jb250cm9sKHNjKTsKCiAgICAgICAgc2V0X21lZGlhX2R1cGxleF9tb2Rl KHNjKTsKCiAgICAgICAgaWYgKHNjLT5mZXRfY2hpcF9yZXZpZCA+PSBSRVZfSURfVlQzMDY1X0Ep CiAgICAgICAgICAgIGZsb3dfY29udHJvbF9hYmlsaXR5IChzYyk7CgogICAgICAgIGlmIChzYy0+ ZmV0X2NoaXBfcmV2aWQgPj0gUkVWX0lEX1ZUMzEwNikKICAgICAgICAgICAgVkxBTl90YWdnaW5n KHNjKTsKCiAgICAvKiBzcGVjaWFsIHRyZWF0bWVudCBvbiBMRUQgZm9yIHZhcmlvdXMgcGh5cyAq LwogICAgaWYgKHNjLT5mZXRfY2hpcF9yZXZpZCA8IFJFVl9JRF9WVDMwNzFfQSkKICAgICAgICAv KiBmb3IgTlMgb3IgTWlzb24gcGh5cywgdHVybiBvbiBiaXQgMSBpbiByZWdpc3RlciAxN2gsIG5v IGVmZmVjdCB0byBEQVZJQ09NIHBoeSAqLwogICAgICAgIEZFVF9TRVRfTUlJKHNjLDB4MTcsMHgw MDAyKTsKICAgIGVsc2UgaWYgKHNjLT5mZXRfY2hpcF9yZXZpZCA8IFJFVl9JRF9WVDMwNjVfQSkK ICAgICAgICAgICAgIC8qIGZvciBFU0kgcGh5cywgdHVybiBvbiBiaXQgNyBpbiByZWdpc3RlciAx N2ggKi8KICAgICAgICAgICAgIEZFVF9TRVRfTUlJKHNjLDB4MTcsMHgwMDgwKTsKCiAgICBjYWxs b3V0X2hhbmRsZV9pbml0KCZzYy0+ZmV0X3N0YXRfY2gpOwoKI2lmIF9fRnJlZUJTRF92ZXJzaW9u ID49IDQwMDAwMCAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8NDEwMDAwCiAgICAvKgogICAgICogQ2Fs bCBNSSBhdHRhY2ggcm91dGluZXMuCiAgICAgKi8KICAgIGlmX2F0dGFjaChpZnApOwogICAgZXRo ZXJfaWZhdHRhY2goaWZwKTsKICAgIGJwZmF0dGFjaChpZnAsIERMVF9FTjEwTUIsIHNpemVvZihz dHJ1Y3QgZXRoZXJfaGVhZGVyKSk7CgojZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PTQxMDAwMCAm JiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAwMAogICAgLyoKICAgICAqIENhbGwgTUkgYXR0YWNo IHJvdXRpbmUuCiAgICAgKi8KICAgIGV0aGVyX2lmYXR0YWNoKGlmcCwgRVRIRVJfQlBGX1NVUFBP UlRFRCk7CiNlbmRpZgoKICAgIC8qCiAgICAgKiBEbyBpZm1lZGlhIHNldHVwLgogICAgICovCiAg ICBpZm1lZGlhX2luaXQoJnNjLT5pZm1lZGlhLCAwLCBmZXRfaWZtZWRpYV91cGQsIGZldF9pZm1l ZGlhX3N0cyk7CgogICAgbWVkaWEgPSBmZXRfbWVkaWFfc3RhbmRhcmQ7CiAgICBubWVkaWEgPSBz aXplb2YoZmV0X21lZGlhX3N0YW5kYXJkKSAvIHNpemVvZihmZXRfbWVkaWFfc3RhbmRhcmRbMF0p OwogICAgZGVmbWVkaWEgPSAoSUZNX0VUSEVSfElGTV9BVVRPKTsKCiAgICBmb3IgKGlkeCA9IDA7 IGlkeCA8IG5tZWRpYTsgaWR4KyspIHsKICAgICAgICAgaWZtZWRpYV9hZGQoJnNjLT5pZm1lZGlh LCBtZWRpYVtpZHhdLCAwLCBOVUxMKTsKICAgIH0KCiAgICBpZm1lZGlhX3NldCgmc2MtPmlmbWVk aWEsIGRlZm1lZGlhKTsKZmFpbDoKICAgIHNwbHgocyk7CiAgICByZXR1cm4oZXJyb3IpOwp9Cgpz dGF0aWMgaW50IGZldF9kZXRhY2goZGV2KQogICAgZGV2aWNlX3QgICAgICAgIGRldjsKewogICAg c3RydWN0IGZldF9zb2Z0YyAgICAqc2M7CiAgICBzdHJ1Y3QgaWZuZXQgICAgICAgICppZnA7CiAg ICBpbnQgICAgICAgICBzOwoKICAgIHMgPSBzcGxpbXAoKTsKCiAgICBzYyA9IGRldmljZV9nZXRf c29mdGMoZGV2KTsKICAgIGlmcCA9ICZzYy0+YXJwY29tLmFjX2lmOwoKICAgIGZldF9zdG9wKHNj KTsKCiNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA0MDAwMDAgJiYgX19GcmVlQlNEX3ZlcnNpb24g PCA0MTAwMDAKICAgIGlmX2RldGFjaChpZnApOwojZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PTQx MDAwMCAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAwMAogICAgZXRoZXJfaWZkZXRhY2goaWZw LCBFVEhFUl9CUEZfU1VQUE9SVEVEKTsKI2VuZGlmCgogICAgYnVzX2dlbmVyaWNfZGV0YWNoKGRl dik7CgogICAgYnVzX3RlYXJkb3duX2ludHIoZGV2LCBzYy0+ZmV0X2lycSwgc2MtPmZldF9pbnRy aGFuZCk7CiAgICBidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLCAwLCBzYy0+ ZmV0X2lycSk7CgogICAgYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lPUE9SVCwg RkVUX1BDSV9MT0lPLCBzYy0+ZmV0X3JlczEpOwogICAgYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2 LCBTWVNfUkVTX01FTU9SWSwgRkVUX1BDSV9MT01FTSwgc2MtPmZldF9yZXMyKTsKICAgIAoJaWZt ZWRpYV9yZW1vdmVhbGwoJnNjLT5pZm1lZGlhKTsgICAgCiAgICBjb250aWdmcmVlKHNjLT5mZXRf bGRhdGEsIHNpemVvZihzdHJ1Y3QgZmV0X2xpc3RfZGF0YSksIE1fREVWQlVGKTsKCiAgICBzcGx4 KHMpOwoKICAgIHJldHVybigwKTsKfQojZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDQwMDAwMAoK c3RhdGljIHZvaWQKZmV0X2F0dGFjaChjb25maWdfaWQsIHVuaXQpCiAgICBwY2ljaV90ICAgICAg ICAgY29uZmlnX2lkOwogICAgaW50ICAgICAgICAgdW5pdDsKewogICAgaW50ICAgICAgICAgcywg aTsKI2lmbmRlZiBGRVRfVVNFSU9TUEFDRQogICAgdm1fb2Zmc2V0X3QgICAgIHBiYXNlLCB2YmFz ZTsKI2VuZGlmCiAgICB1X2NoYXIgICAgICAgICAgZWFkZHJbRVRIRVJfQUREUl9MRU5dOwogICAg dV9pbnQzMl90ICAgICAgIGNvbW1hbmQsIGlkOwogICAgc3RydWN0IGZldF9zb2Z0YyAgICAgICAg KnNjOwogICAgc3RydWN0IGlmbmV0ICAgICAgICAqaWZwOwogICAgdW5zaWduZWQgaW50ICAgICAg ICByb3VuZDsKICAgIGNhZGRyX3QgICAgICAgICByb3VuZHB0cjsKICAgIHVfaW50MTZfdCAgICAg ICBubWVkaWEsIGRlZm1lZGlhOwogICAgY29uc3QgaW50ICAgICAgICptZWRpYTsKICAgIGludCAg ICAgICAgIGlkeDsKCiAgICBzID0gc3BsaW1wKCk7CgogICAgc2MgPSBtYWxsb2Moc2l6ZW9mKHN0 cnVjdCBmZXRfc29mdGMpLCBNX0RFVkJVRiwgTV9OT1dBSVQpOwogICAgaWYgKHNjID09IE5VTEwp IHsKICAgICAgICBwcmludGYoImZldCVkOiBubyBtZW1vcnkgZm9yIHNvZnRjIHN0cnVjdCFcbiIs IHVuaXQpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGJ6ZXJvKHNjLCBzaXplb2Yoc3RydWN0 IGZldF9zb2Z0YykpOwoKICAgIC8qCiAgICAgKiBIYW5kbGUgcG93ZXIgbWFuYWdlbWVudCBub25z ZW5zZS4KICAgICAqLwoKICAgIGNvbW1hbmQgPSBwY2lfY29uZl9yZWFkKGNvbmZpZ19pZCwgRkVU X1BDSV9DQVBJRCkgJiAweDAwMDAwMEZGOwogICAgaWYgKGNvbW1hbmQgPT0gMHgwMSkgewoKICAg ICAgICBjb21tYW5kID0gcGNpX2NvbmZfcmVhZChjb25maWdfaWQsIEZFVF9QQ0lfUFdSTUdNVENU UkwpOwogICAgICAgIGlmIChjb21tYW5kICYgRkVUX1BTVEFURV9NQVNLKSB7CiAgICAgICAgICAg IHVfaW50MzJfdCAgICAgICBpb2Jhc2UsIG1lbWJhc2UsIGlycTsKCiAgICAgICAgICAgIC8qIFNh dmUgaW1wb3J0YW50IFBDSSBjb25maWcgZGF0YS4gKi8KICAgICAgICAgICAgaW9iYXNlID0gcGNp X2NvbmZfcmVhZChjb25maWdfaWQsIEZFVF9QQ0lfTE9JTyk7CiAgICAgICAgICAgIG1lbWJhc2Ug PSBwY2lfY29uZl9yZWFkKGNvbmZpZ19pZCwgRkVUX1BDSV9MT01FTSk7CiAgICAgICAgICAgIGly cSA9IHBjaV9jb25mX3JlYWQoY29uZmlnX2lkLCBGRVRfUENJX0lOVExJTkUpOwoKICAgICAgICAg ICAgLyogUmVzZXQgdGhlIHBvd2VyIHN0YXRlLiAqLwogICAgICAgICAgICBwcmludGYoImZldCVk OiBjaGlwIGlzIGluIEQlZCBwb3dlciBtb2RlICIKICAgICAgICAgICAgIi0tIHNldHRpbmcgdG8g RDBcbiIsIHVuaXQsIGNvbW1hbmQgJiBGRVRfUFNUQVRFX01BU0spOwogICAgICAgICAgICBjb21t YW5kICY9IDB4RkZGRkZGRkM7CiAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlKGNvbmZpZ19pZCwg RkVUX1BDSV9QV1JNR01UQ1RSTCwgY29tbWFuZCk7CgogICAgICAgICAgICAvKiBSZXN0b3JlIFBD SSBjb25maWcgZGF0YS4gKi8KICAgICAgICAgICAgcGNpX2NvbmZfd3JpdGUoY29uZmlnX2lkLCBG RVRfUENJX0xPSU8sIGlvYmFzZSk7CiAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlKGNvbmZpZ19p ZCwgRkVUX1BDSV9MT01FTSwgbWVtYmFzZSk7CiAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlKGNv bmZpZ19pZCwgRkVUX1BDSV9JTlRMSU5FLCBpcnEpOwogICAgICAgIH0KICAgIH0KCiAgICAvKgog ICAgICogTWFwIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycy4KICAgICAqLwogICAgY29tbWFuZCA9 IHBjaV9jb25mX3JlYWQoY29uZmlnX2lkLCBQQ0lfQ09NTUFORF9TVEFUVVNfUkVHKTsKICAgIGNv bW1hbmQgfD0gKFBDSU1fQ01EX1BPUlRFTnxQQ0lNX0NNRF9NRU1FTnxQQ0lNX0NNRF9CVVNNQVNU RVJFTik7CiAgICBwY2lfY29uZl93cml0ZShjb25maWdfaWQsIFBDSV9DT01NQU5EX1NUQVRVU19S RUcsIGNvbW1hbmQpOwogICAgY29tbWFuZCA9IHBjaV9jb25mX3JlYWQoY29uZmlnX2lkLCBQQ0lf Q09NTUFORF9TVEFUVVNfUkVHKTsKCiAgICBzYy0+ZmV0X2NoaXBfcmV2aWQgID0gcGNpX2NvbmZf cmVhZChjb25maWdfaWQsIEZFVF9QQ0lfUkVWSUQpICYgMHgwMDAwMDBGRjsKICAgIGlkID0gcGNp X2NvbmZfcmVhZChjb25maWdfaWQsIEZFVF9QQ0lfVkVORE9SX0lEKTsKICAgIGlmIChQQ0lfVkVO RE9SSUQoaWQpICE9IFZFTkRPUklEKSB7CiAgICAgICAgcHJpbnRmKCJmZXQlZDogd3JvbmcgdmVu ZG9yIElEICFcbiIsIHVuaXQpOwogICAgICAgIGdvdG8gZmFpbDsKICAgIH0KCiAgICBpZiAoIShQ Q0lfQ0hJUElEKGlkKSA9PSBERVZJQ0VJRF8zMDQzIHx8CiAgICAgICAgICAgICAgUENJX0NISVBJ RChpZCkgPT0gREVWSUNFSURfMzA2NSB8fAogICAgICAgICAgICAgIFBDSV9DSElQSUQoaWQpID09 IERFVklDRUlEXzMxMDYgfHwKICAgICAgICAgICAgICBQQ0lfQ0hJUElEKGlkKSA9PSBERVZJQ0VJ RF8zMDUzKSkgewogICAgICAgIHByaW50ZigiZmV0JWQ6IHdyb25nIGRldmljZSBJRCAhXG4iLCB1 bml0KTsKICAgICAgICBnb3RvIGZhaWw7CiAgICB9CgojaWZkZWYgRkVUX1VTRUlPU1BBQ0UKICAg IGlmICghKGNvbW1hbmQgJiBQQ0lNX0NNRF9QT1JURU4pKSB7CiAgICAgICAgcHJpbnRmKCJmZXQl ZDogZmFpbGVkIHRvIGVuYWJsZSBJL08gcG9ydHMhXG4iLCB1bml0KTsKICAgICAgICBmcmVlKHNj LCBNX0RFVkJVRik7CiAgICAgICAgZ290byBmYWlsOwogICAgfQoKICAgIGlmICghcGNpX21hcF9w b3J0KGNvbmZpZ19pZCwgRkVUX1BDSV9MT0lPLAogICAgICAgICAgICAgICAgICAgICh1X2ludDE2 X3QgKikoJnNjLT5mZXRfYmhhbmRsZSkpKSB7CiAgICAgICAgcHJpbnRmICgiZmV0JWQ6IGNvdWxk bid0IG1hcCBwb3J0c1xuIiwgdW5pdCk7CiAgICAgICAgZ290byBmYWlsOwogICAgfQogICAgc2Mt PmZldF9idGFnID0gSTM4Nl9CVVNfU1BBQ0VfSU87CiNlbHNlCiAgICBpZiAoIShjb21tYW5kICYg UENJTV9DTURfTUVNRU4pKSB7CiAgICAgICAgcHJpbnRmKCJmZXQlZDogZmFpbGVkIHRvIGVuYWJs ZSBtZW1vcnkgbWFwcGluZyFcbiIsIHVuaXQpOwogICAgICAgIGdvdG8gZmFpbDsKICAgIH0KCiAg ICBpZiAoIXBjaV9tYXBfbWVtKGNvbmZpZ19pZCwgRkVUX1BDSV9MT01FTSwgJnZiYXNlLCAmcGJh c2UpKSB7CiAgICAgICAgcHJpbnRmICgiZmV0JWQ6IGNvdWxkbid0IG1hcCBtZW1vcnlcbiIsIHVu aXQpOwogICAgICAgIGdvdG8gZmFpbDsKICAgIH0KCiAgICBzYy0+ZmV0X2JoYW5kbGUgPSB2YmFz ZTsKICAgIHNjLT5mZXRfYnRhZyA9IEkzODZfQlVTX1NQQUNFX01FTTsKI2VuZGlmCgogICAgLyog QWxsb2NhdGUgaW50ZXJydXB0ICovCiAgICBpZiAoIXBjaV9tYXBfaW50KGNvbmZpZ19pZCwgZmV0 X2ludHIsIHNjLCAmbmV0X2ltYXNrKSkgewogICAgICAgIHByaW50ZigiZmV0JWQ6IGNvdWxkbid0 IG1hcCBpbnRlcnJ1cHRcbiIsIHVuaXQpOwogICAgICAgIGdvdG8gZmFpbDsKICAgIH0KCiAgICAg ICAgLyogaWYgdnQzMDY1ICovCiAgICAgICAgaWYgKHNjLT5mZXRfY2hpcF9yZXZpZCA+PSBSRVZf SURfVlQzMDY1X0EgKSB7CiAgICAgICAgICAgIC8qIGNsZWFyIHN0aWNreSBiaXQgYmVmb3JlIHJl c2V0ICYgcmVhZCBldGhlcm5ldCBhZGRyZXNzICAqLwogICAgICAgICAgICBDU1JfV1JJVEVfMShz YywgRkVUX1NUSUNLSFcsIENTUl9SRUFEXzEoc2MsIEZFVF9TVElDS0hXKSAmIDB4RkMpOwogICAg ICAgICAgICAvKiBkaXNhYmxlIGZvcmNlIFBNRS1lbmFibGUgKi8KICAgICAgICAgICAgQ1NSX1dS SVRFXzEoc2MsIEZFVF9XT0xDR0NMUiwgMHg4MCk7CiAgICAgICAgICAgIC8qIGRpc2FibGUgcG93 ZXItZXZlbnQgY29uZmlnIGJpdCAqLwogICAgICAgICAgICBDU1JfV1JJVEVfMShzYywgRkVUX1dP TENSQ0xSLCAweEZGKTsKICAgICAgICAgICAgLyogY2xlYXIgcG93ZXIgc3RhdHVzICovCiAgICAg ICAgICAgIENTUl9XUklURV8xKHNjLCBGRVRfUFdSQ1NSQ0xSLCAweEZGKTsKICAgICAgICB9Cgog ICAgLyogUmVzZXQgdGhlIGFkYXB0ZXIuICovCiAgICBmZXRfcmVzZXQoc2MpOwoKICAgICAgICAv KiBpc3N1ZSBBVVRPTG9hZCBpbiBFRUNTUiB0byByZWxvYWQgZWVwcm9tICovCgogICAgICAgIEZF VF9TRVRCSVQoc2MsIEZFVF9FRUNTUiwgRkVUX0VFQ1NSX0xPQUQpOwoKICAgICAgICAvKiBpZiB2 dDMwNjUgZGVsYXkgYWZ0ZXIgcmVzZXQgKi8KICAgICAgICBpZiAoc2MtPmZldF9jaGlwX3Jldmlk ID49IFJFVl9JRF9WVDMwNjVfQSApIHsKICAgICAgICAgICAgREVMQVkoMTAwMDApOwogICAgICAg ICAgICAvKiBmb3IgMzA2NUQsIEVFUFJPTSByZWxvYWRlZCB3aWxsIGNhdXNlIGJpdCAwIGluIE1B Q19SRUdfQ0ZHQSB0dXJuZWQgb24uCiAgICAgICAgICAgICAgICBpdCBtYWtlcyBNQUMgcmVjZWl2 ZSBtYWdpYyBwYWNrZXQgYXV0b21hdGljYWxseS4gU28sIGRyaXZlciB0dXJuIGl0IG9mZi4gKi8K CiAgICAgICAgICAgIENTUl9XUklURV8xKHNjLCBGRVRfQ0ZHQSxDU1JfUkVBRF8xKHNjLCBGRVRf Q0ZHQSkgJiAweEZFKTsKICAgICAgICB9CgogICAgICAgIC8qIFR1cm4gb24gYml0MiAoTUlJT04p IGluIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDB4NTMgZHVyaW5nIGluaXRpYWxpemF0aW9u ICovCiAgICAgICAgcGNpX2NvbmZfd3JpdGUoY29uZmlnX2lkLCBGRVRfUENJX01PREUsIHBjaV9j b25mX3JlYWQoY29uZmlnX2lkLEZFVF9QQ0lfTU9ERSl8KEZFVF9NT0RFM19NSUlPTjw8MjQpKTsK ICAgIC8qCiAgICAgKiBHZXQgc3RhdGlvbiBhZGRyZXNzLiBUaGUgd2F5IHRoZSBSaGluZSBjaGlw cyB3b3JrLAogICAgICogeW91J3JlIG5vdCBhbGxvd2VkIHRvIGRpcmVjdGx5IGFjY2VzcyB0aGUg RUVQUk9NIG9uY2UKICAgICAqIHRoZXkndmUgYmVlbiBwcm9ncmFtbWVkIGEgc3BlY2lhbCB3YXku IENvbnNlcXVlbnRseSwKICAgICAqIHdlIG5lZWQgdG8gcmVhZCB0aGUgbm9kZSBhZGRyZXNzIGZy b20gdGhlIFBBUjAgYW5kIFBBUjEKICAgICAqIHJlZ2lzdGVycy4KICAgICAqLwogICAgZm9yIChp ID0gMDsgaSA8IEVUSEVSX0FERFJfTEVOOyBpKyspCiAgICAgICAgZWFkZHJbaV0gPSBDU1JfUkVB RF8xKHNjLCBGRVRfUEFSMCArIGkpOwoKICAgIC8qCiAgICAgKiBBIFJoaW5lIGNoaXAgd2FzIGRl dGVjdGVkLiBJbmZvcm0gdGhlIHdvcmxkLgogICAgICovCiAgICBwcmludGYoImZldCVkOiBFdGhl cm5ldCBhZGRyZXNzOiAlNkRcbiIsIHVuaXQsIGVhZGRyLCAiOiIpOwoKICAgIC8qIHByaW50IGRy aXZlciB2ZXJzaW9uICovCiAgICBwcmludGYoImZldCVkOiBpZl9mZXQuYzogdjMuMTAgXG4iLCB1 bml0KTsKCiAgICBzYy0+ZmV0X3VuaXQgPSB1bml0OwogICAgYmNvcHkoZWFkZHIsIChjaGFyICop JnNjLT5hcnBjb20uYWNfZW5hZGRyLCBFVEhFUl9BRERSX0xFTik7CgogICAgc2MtPmZldF9sZGF0 YV9wdHIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBmZXRfbGlzdF9kYXRhKSArIDgsCiAgICAgICAg ICAgICAgICBNX0RFVkJVRiwgTV9OT1dBSVQpOwogICAgaWYgKHNjLT5mZXRfbGRhdGFfcHRyID09 IE5VTEwpIHsKICAgICAgICBmcmVlKHNjLCBNX0RFVkJVRik7CiAgICAgICAgcHJpbnRmKCJmZXQl ZDogbm8gbWVtb3J5IGZvciBsaXN0IGJ1ZmZlcnMhXG4iLCB1bml0KTsKICAgICAgICByZXR1cm47 CiAgICB9CgogICAgc2MtPmZldF9sZGF0YSA9IChzdHJ1Y3QgZmV0X2xpc3RfZGF0YSAqKXNjLT5m ZXRfbGRhdGFfcHRyOwogICAgcm91bmQgPSAodW5zaWduZWQgaW50KXNjLT5mZXRfbGRhdGFfcHRy ICYgMHhGOwogICAgcm91bmRwdHIgPSBzYy0+ZmV0X2xkYXRhX3B0cjsKICAgIGZvciAoaSA9IDA7 IGkgPCA4OyBpKyspIHsKICAgICAgICBpZiAocm91bmQgJSA4KSB7CiAgICAgICAgICAgIHJvdW5k Kys7CiAgICAgICAgICAgIHJvdW5kcHRyKys7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIGJy ZWFrOwogICAgfQogICAgc2MtPmZldF9sZGF0YSA9IChzdHJ1Y3QgZmV0X2xpc3RfZGF0YSAqKXJv dW5kcHRyOwogICAgYnplcm8oc2MtPmZldF9sZGF0YSwgc2l6ZW9mKHN0cnVjdCBmZXRfbGlzdF9k YXRhKSk7CgogICAgaWZwID0gJnNjLT5hcnBjb20uYWNfaWY7CiAgICBpZnAtPmlmX3NvZnRjID0g c2M7CiAgICBpZnAtPmlmX3VuaXQgPSB1bml0OwogICAgaWZwLT5pZl9uYW1lID0gImZldCI7CiAg ICBpZnAtPmlmX210dSA9IEVUSEVSTVRVOwogICAgaWZwLT5pZl9mbGFncyA9IElGRl9CUk9BRENB U1QgfCBJRkZfU0lNUExFWCB8IElGRl9NVUxUSUNBU1Q7CiAgICBpZnAtPmlmX2lvY3RsID0gZmV0 X2lvY3RsOwogICAgaWZwLT5pZl9vdXRwdXQgPSBldGhlcl9vdXRwdXQ7CiAgICBpZnAtPmlmX3N0 YXJ0ID0gZmV0X3N0YXJ0OwogICAgaWZwLT5pZl93YXRjaGRvZyA9IGZldF93YXRjaGRvZzsKICAg IGlmcC0+aWZfaW5pdCA9IGZldF9pbml0OwogICAgaWZwLT5pZl9iYXVkcmF0ZSA9IDEwMDAwMDAw OwogICAgaWZwLT5pZl9zbmQuaWZxX21heGxlbiA9IEZFVF9UWF9MSVNUX0NOVCAtIDE7CgogICAg ICAgIC8qIHR1cm4gb24gTUlJIGxpbmsgY2hhbmdlICovCiAgICAgICAgLyogaWYgdGhlIE1BRDQt MCBpcyBub3QgMHgwMDAxLCB0aGVuIExpbmsgRmFpbCB3aWxsIGJlIG9uICovCiAgICAgICAgdHVy bl9vbl9NSUlfbGluayhzYyk7CgogICAgICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2aWQgPj0gUkVW X0lEX1ZUMzEwNikKICAgICAgICAgICAgc2V0X2Zsb3dfY29udHJvbChzYyk7CgogICAgICAgIHNl dF9tZWRpYV9kdXBsZXhfbW9kZShzYyk7CgogICAgICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2aWQg Pj0gUkVWX0lEX1ZUMzA2NV9BKQogICAgICAgICAgICBmbG93X2NvbnRyb2xfYWJpbGl0eSAoc2Mp OwoKICAgICAgICBpZiAoc2MtPmZldF9jaGlwX3JldmlkID49IFJFVl9JRF9WVDMxMDYpCiAgICAg ICAgICAgIFZMQU5fdGFnZ2luZyhzYyk7CgogICAgLyogc3BlY2lhbCB0cmVhdG1lbnQgb24gTEVE IGZvciB2YXJpb3VzIHBoeXMgKi8KICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2aWQgPCBSRVZfSURf VlQzMDcxX0EpCiAgICAgICAgLyogZm9yIE5TIG9yIE1pc29uIHBoeXMsIHR1cm4gb24gYml0IDEg aW4gcmVnaXN0ZXIgMTdoLCBubyBlZmZlY3QgdG8gREFWSUNPTSBwaHkgKi8KICAgICAgICBGRVRf U0VUX01JSShzYywweDE3LDB4MDAwMik7CgogICAgZWxzZSBpZiAoc2MtPmZldF9jaGlwX3Jldmlk IDwgUkVWX0lEX1ZUMzA2NV9BKQogICAgICAgICAgICAgLyogZm9yIEVTSSBwaHlzLCB0dXJuIG9u IGJpdCA3IGluIHJlZ2lzdGVyIDE3aCAqLwogICAgICAgICAgICAgRkVUX1NFVF9NSUkoc2MsMHgx NywweDAwODApOwoKCiAgICAvKgogICAgICogRG8gaWZtZWRpYSBzZXR1cC4KICAgICAqLwogICAg aWZtZWRpYV9pbml0KCZzYy0+aWZtZWRpYSwgMCwgZmV0X2lmbWVkaWFfdXBkLCBmZXRfaWZtZWRp YV9zdHMpOwoKICAgIG1lZGlhID0gZmV0X21lZGlhX3N0YW5kYXJkOwogICAgbm1lZGlhID0gc2l6 ZW9mKGZldF9tZWRpYV9zdGFuZGFyZCkgLyBzaXplb2YoZmV0X21lZGlhX3N0YW5kYXJkWzBdKTsK ICAgIGRlZm1lZGlhID0gc2MtPmlmbWVkaWEuaWZtX21lZGlhID0gKElGTV9FVEhFUnxJRk1fQVVU Tyk7CgogICAgZm9yIChpZHggPSAwOyBpZHggPCBubWVkaWE7IGlkeCsrKSB7CiAgICAgICAgIGlm bWVkaWFfYWRkKCZzYy0+aWZtZWRpYSwgbWVkaWFbaWR4XSwgMCwgTlVMTCk7CiAgICB9CgogICAg aWZtZWRpYV9zZXQoJnNjLT5pZm1lZGlhLCBkZWZtZWRpYSk7CgogICAgLyoKICAgICAqIENhbGwg TUkgYXR0YWNoIHJvdXRpbmVzLgogICAgICovCiAgICBpZl9hdHRhY2goaWZwKTsKICAgIGV0aGVy X2lmYXR0YWNoKGlmcCk7CgojaWYgTkJQRklMVEVSID4gMAogICAgYnBmYXR0YWNoKGlmcCwgRExU X0VOMTBNQiwgc2l6ZW9mKHN0cnVjdCBldGhlcl9oZWFkZXIpKTsKI2VuZGlmCgogICAgYXRfc2h1 dGRvd24oZmV0X3NodXRkb3duLCBzYywgU0hVVERPV05fUE9TVF9TWU5DKTsKCmZhaWw6CiAgICBz cGx4KHMpOwogICAgcmV0dXJuOwp9CiNlbmRpZgovKgogKiBJbml0aWFsaXplIHRoZSB0cmFuc21p dCBkZXNjcmlwdG9ycy4KICovCnN0YXRpYyBpbnQgZmV0X2xpc3RfdHhfaW5pdChzYykKICAgIHN0 cnVjdCBmZXRfc29mdGMgICAgICAgICpzYzsKewogICAgc3RydWN0IGZldF9jaGFpbl9kYXRhICAg KmNkOwogICAgc3RydWN0IGZldF9saXN0X2RhdGEgICAgKmxkOwogICAgaW50ICAgICAgICAgaTsK CiAgICBjZCA9ICZzYy0+ZmV0X2NkYXRhOwogICAgbGQgPSBzYy0+ZmV0X2xkYXRhOwogICAgZm9y IChpID0gMDsgaSA8IEZFVF9UWF9MSVNUX0NOVDsgaSsrKSB7CiAgICAgICAgY2QtPmZldF90eF9j aGFpbltpXS5mZXRfcHRyID0gJmxkLT5mZXRfdHhfbGlzdFtpXTsKICAgICAgICBpZiAoaSA9PSAo RkVUX1RYX0xJU1RfQ05UIC0gMSkpCiAgICAgICAgICAgIGNkLT5mZXRfdHhfY2hhaW5baV0uZmV0 X25leHRkZXNjID0KICAgICAgICAgICAgICAgICZjZC0+ZmV0X3R4X2NoYWluWzBdOwogICAgICAg IGVsc2UKICAgICAgICAgICAgY2QtPmZldF90eF9jaGFpbltpXS5mZXRfbmV4dGRlc2MgPQogICAg ICAgICAgICAgICAgJmNkLT5mZXRfdHhfY2hhaW5baSArIDFdOwogICAgfQoKICAgIGNkLT5mZXRf dHhfZnJlZSA9ICZjZC0+ZmV0X3R4X2NoYWluWzBdOwogICAgY2QtPmZldF90eF90YWlsID0gY2Qt PmZldF90eF9oZWFkID0gTlVMTDsKICAgIC8qIGluaXRpYWwgdGhlIG51bWJlciBvZiBmcmVlIHR4 IGRlc2NyaXB0b3J4ICovCiAgICAgICAgY2QtPmZldF9mcmVlX3R4X2NvdW50PUZFVF9UWF9MSVNU X0NOVDsKICAgIHJldHVybigwKTsKfQoKCi8qCiAqIEluaXRpYWxpemUgdGhlIFJYIGRlc2NyaXB0 b3JzIGFuZCBhbGxvY2F0ZSBtYnVmcyBmb3IgdGhlbS4gTm90ZSB0aGF0CiAqIHdlIGFycmFuZ2Ug dGhlIGRlc2NyaXB0b3JzIGluIGEgY2xvc2VkIHJpbmcsIHNvIHRoYXQgdGhlIGxhc3QgZGVzY3Jp cHRvcgogKiBwb2ludHMgYmFjayB0byB0aGUgZmlyc3QuCiAqLwpzdGF0aWMgaW50IGZldF9saXN0 X3J4X2luaXQoc2MpCiAgICBzdHJ1Y3QgZmV0X3NvZnRjICAgICAgICAqc2M7CnsKICAgIHN0cnVj dCBmZXRfY2hhaW5fZGF0YSAgICpjZDsKICAgIHN0cnVjdCBmZXRfbGlzdF9kYXRhICAgICpsZDsK ICAgIGludCAgICAgICAgIGk7CiAgICBjZCA9ICZzYy0+ZmV0X2NkYXRhOwogICAgbGQgPSBzYy0+ ZmV0X2xkYXRhOwoKICAgIGZvciAoaSA9IDA7IGkgPCBGRVRfUlhfTElTVF9DTlQ7IGkrKykgewog ICAgICAgIGNkLT5mZXRfcnhfY2hhaW5baV0uZmV0X3B0ciA9CiAgICAgICAgICAgIChzdHJ1Y3Qg ZmV0X2Rlc2MgKikmbGQtPmZldF9yeF9saXN0W2ldOwojaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0g NDAwMDAwCiAgICAgICAgaWYgKGZldF9uZXdidWYoc2MsICZjZC0+ZmV0X3J4X2NoYWluW2ldLCBO VUxMKSA9PSBFTk9CVUZTKQojZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDQwMDAwMAogICAgICAg IGlmIChmZXRfbmV3YnVmKHNjLCAmY2QtPmZldF9yeF9jaGFpbltpXSkgPT0gRU5PQlVGUykKI2Vu ZGlmCiAgICAgICAgICAgIHJldHVybihFTk9CVUZTKTsKICAgICAgICBpZiAoaSA9PSAoRkVUX1JY X0xJU1RfQ05UIC0gMSkpIHsKICAgICAgICAgICAgY2QtPmZldF9yeF9jaGFpbltpXS5mZXRfbmV4 dGRlc2MgPQogICAgICAgICAgICAgICAgICAgICZjZC0+ZmV0X3J4X2NoYWluWzBdOwogICAgICAg ICAgICBsZC0+ZmV0X3J4X2xpc3RbaV0uZmV0X25leHQgPQogICAgICAgICAgICAgICAgICAgIHZ0 b3BoeXMoJmxkLT5mZXRfcnhfbGlzdFswXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg Y2QtPmZldF9yeF9jaGFpbltpXS5mZXRfbmV4dGRlc2MgPQogICAgICAgICAgICAgICAgICAgICZj ZC0+ZmV0X3J4X2NoYWluW2kgKyAxXTsKICAgICAgICAgICAgbGQtPmZldF9yeF9saXN0W2ldLmZl dF9uZXh0ID0KICAgICAgICAgICAgICAgICAgICB2dG9waHlzKCZsZC0+ZmV0X3J4X2xpc3RbaSAr IDFdKTsKICAgICAgICB9CiAgICB9CgogICAgY2QtPmZldF9yeF9oZWFkID0gJmNkLT5mZXRfcnhf Y2hhaW5bMF07CgogICAgcmV0dXJuKDApOwp9CgovKgogKiBJbml0aWFsaXplIGFuIFJYIGRlc2Ny aXB0b3IgYW5kIGF0dGFjaCBhbiBNQlVGIGNsdXN0ZXIuCiAqLwojaWYgX19GcmVlQlNEX3ZlcnNp b24gPj0gNDAwMDAwCnN0YXRpYyBpbnQgZmV0X25ld2J1ZihzYywgYywgbSkKICAgIHN0cnVjdCBm ZXRfc29mdGMgICAgKnNjOwogICAgc3RydWN0IGZldF9jaGFpbl9vbmVmcmFnICAgICpjOwogICAg c3RydWN0IG1idWYgICAgICptOwp7CiAgICBzdHJ1Y3QgbWJ1ZiAgICAgKm1fbmV3ID0gTlVMTDsK CiAgICBpZiAobSA9PSBOVUxMKSB7CiAgICAgICAgTUdFVEhEUihtX25ldywgTV9ET05UV0FJVCwg TVRfREFUQSk7CiAgICAgICAgaWYgKG1fbmV3ID09IE5VTEwpIHsKICAgICAgICAgICAgcHJpbnRm KCJmZXQlZDogbm8gbWVtb3J5IGZvciByeCBsaXN0ICIKICAgICAgICAgICAgICAgICItLSBwYWNr ZXQgZHJvcHBlZCFcbiIsIHNjLT5mZXRfdW5pdCk7CiAgICAgICAgICAgIHJldHVybihFTk9CVUZT KTsKICAgICAgICB9CgogICAgICAgIE1DTEdFVChtX25ldywgTV9ET05UV0FJVCk7CiAgICAgICAg aWYgKCEobV9uZXctPm1fZmxhZ3MgJiBNX0VYVCkpIHsKICAgICAgICAgICAgcHJpbnRmKCJmZXQl ZDogbm8gbWVtb3J5IGZvciByeCBsaXN0ICIKICAgICAgICAgICAgICAgICItLSBwYWNrZXQgZHJv cHBlZCFcbiIsIHNjLT5mZXRfdW5pdCk7CiAgICAgICAgICAgIG1fZnJlZW0obV9uZXcpOwogICAg ICAgICAgICByZXR1cm4oRU5PQlVGUyk7CiAgICAgICAgfQogICAgICAgIG1fbmV3LT5tX2xlbiA9 IG1fbmV3LT5tX3BrdGhkci5sZW4gPSBNQ0xCWVRFUzsKICAgIH0gZWxzZSB7CiAgICAgICAgbV9u ZXcgPSBtOwogICAgICAgIG1fbmV3LT5tX2xlbiA9IG1fbmV3LT5tX3BrdGhkci5sZW4gPSBNQ0xC WVRFUzsKICAgICAgICBtX25ldy0+bV9kYXRhID0gbV9uZXctPm1fZXh0LmV4dF9idWY7CiAgICB9 CgogICAgbV9hZGoobV9uZXcsIHNpemVvZih1X2ludDY0X3QpKTsKCiAgICBjLT5mZXRfbWJ1ZiA9 IG1fbmV3OwogICAgYy0+ZmV0X3B0ci0+ZmV0X3N0YXR1cyA9IEZFVF9SWFNUQVQ7CiAgICAgICAg LypjaGVueXAgKi8KCiAgICBjLT5mZXRfcHRyLT5mZXRfZGF0YSA9IHZ0b3BoeXMobXRvZChtX25l dywgY2FkZHJfdCkpOwogICAgYy0+ZmV0X3B0ci0+ZmV0X2N0bCA9IEZFVF9SWENUTCB8IEZFVF9S WExFTjsKCiAgICByZXR1cm4oMCk7Cn0KCiNlbGlmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNDAwMDAw CgpzdGF0aWMgaW50IGZldF9uZXdidWYoc2MsIGMpCiAgICBzdHJ1Y3QgZmV0X3NvZnRjICAgICAg ICAqc2M7CiAgICBzdHJ1Y3QgZmV0X2NoYWluX29uZWZyYWcgICAgKmM7CnsKICAgIHN0cnVjdCBt YnVmICAgICAqbV9uZXcgPSBOVUxMOwoKICAgIE1HRVRIRFIobV9uZXcsIE1fRE9OVFdBSVQsIE1U X0RBVEEpOwogICAgaWYgKG1fbmV3ID09IE5VTEwpIHsKICAgICAgICBwcmludGYoImZldCVkOiBu byBtZW1vcnkgZm9yIHJ4IGxpc3QgLS0gcGFja2V0IGRyb3BwZWQhXG4iLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNjLT5mZXRfdW5pdCk7CiAgICAgICAgcmV0dXJuKEVOT0JVRlMp OwogICAgfQoKICAgIE1DTEdFVChtX25ldywgTV9ET05UV0FJVCk7CiAgICBpZiAoIShtX25ldy0+ bV9mbGFncyAmIE1fRVhUKSkgewogICAgICAgIHByaW50ZigiZmV0JWQ6IG5vIG1lbW9yeSBmb3Ig cnggbGlzdCAtLSBwYWNrZXQgZHJvcHBlZCFcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2MtPmZldF91bml0KTsKICAgICAgICBtX2ZyZWVtKG1fbmV3KTsKICAgICAgICByZXR1 cm4oRU5PQlVGUyk7CiAgICB9CgogICAgYy0+ZmV0X21idWYgPSBtX25ldzsKICAgIGMtPmZldF9w dHItPmZldF9zdGF0dXMgPSBGRVRfUlhTVEFUOwogICAgYy0+ZmV0X3B0ci0+ZmV0X2RhdGEgPSB2 dG9waHlzKG10b2QobV9uZXcsIGNhZGRyX3QpKTsKICAgIGMtPmZldF9wdHItPmZldF9jdGwgPSBG RVRfUlhDVEwgfCBGRVRfUlhMRU47CgogICAgcmV0dXJuKDApOwp9CiNlbmRpZgoKLyoKICogQSBm cmFtZSBoYXMgYmVlbiB1cGxvYWRlZDogcGFzcyB0aGUgcmVzdWx0aW5nIG1idWYgY2hhaW4gdXAg dG8KICogdGhlIGhpZ2hlciBsZXZlbCBwcm90b2NvbHMuCiAqLwpzdGF0aWMgdm9pZCBmZXRfcnhl b2Yoc2MpCiAgICBzdHJ1Y3QgZmV0X3NvZnRjICAgICAgICAqc2M7CnsKICAgIHN0cnVjdCBldGhl cl9oZWFkZXIgKmVoOwogICAgc3RydWN0IG1idWYgICAgICptOwogICAgc3RydWN0IGlmbmV0ICAg ICAgICAqaWZwOwogICAgc3RydWN0IGZldF9jaGFpbl9vbmVmcmFnICAgICpjdXJfcng7CiAgICBp bnQgICAgICAgICB0b3RhbF9sZW4gPSAwOwogICAgdV9pbnQzMl90ICAgICAgIHJ4c3RhdDsKCiNp ZiBWQUxfUEtUX0xFTiA9PSAgMQogICAgdV9pbnQzMl90ICAgICAgIHdTQVA9MCwgd0xlbj0wLCB3 QWN0dWFsTGVuPTA7CiNlbmRpZgoKICAgIGlmcCA9ICZzYy0+YXJwY29tLmFjX2lmOwoKICAgIHdo aWxlKCEoKHJ4c3RhdCA9IHNjLT5mZXRfY2RhdGEuZmV0X3J4X2hlYWQtPmZldF9wdHItPmZldF9z dGF0dXMpICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZFVF9SWFNUQVRfT1dOKSkgewoj aWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNDAwMDAwCiAgICAgICAgc3RydWN0IG1idWYgICAgICpt MCA9IE5VTEw7CiNlbmRpZgogICAgICAgIGN1cl9yeCA9IHNjLT5mZXRfY2RhdGEuZmV0X3J4X2hl YWQ7CiAgICAgICAgc2MtPmZldF9jZGF0YS5mZXRfcnhfaGVhZCA9IGN1cl9yeC0+ZmV0X25leHRk ZXNjOwoKICAgICAgICBtID0gY3VyX3J4LT5mZXRfbWJ1ZjsKCiAgICAgICAgICAgIGlmICghKChy eHN0YXQgJiBGRVRfUlhTVEFUX0ZJUlNURlJBRykgJiYgKHJ4c3RhdCAmIEZFVF9SWFNUQVRfTEFT VEZSQUcpKSkgewojaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNDAwMDAwCiAgICAgICAgICAgIGZl dF9uZXdidWYoc2MsIGN1cl9yeCwgbSk7CiNlbGlmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNDAwMDAw CiAgICAgICAgICAgIGN1cl9yeC0+ZmV0X3B0ci0+ZmV0X3N0YXR1cyA9IEZFVF9SWFNUQVQ7CiAg ICAgICAgICAgIGN1cl9yeC0+ZmV0X3B0ci0+ZmV0X2N0bCA9IEZFVF9SWENUTHxGRVRfUlhMRU47 CiNlbmRpZgogICAgICAgICAgICAgICAgICAgIC8qIEZvciBmbG93IGNvbnRyb2wsIHVwZGF0ZSBS WFJEVSBpbiBGbG93Q1IxIGFmdGVyIHJldHVybiBidWZmZXIgdG8gTUFDLiAqLwogICAgICAgICAg ICAgICAgICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2aWQgPj0gUkVWX0lEX1ZUMzEwNikKICAgICAg ICAgICAgICAgICAgICAgICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9GbG93Q1IwLCAxKTsKICAgICAg ICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJ4c3RhdCAmIEZF VF9SWFNUQVRfUlVOVCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCAoIShjdXJf cngtPmZldF9wdHItPmZldF9jdGwgJiBGRVRfUlhDVExfVEFHKSkgfHwgKChjdXJfcngtPmZldF9w dHItPmZldF9jdGwgJiBGRVRfUlhDVExfVEFHKSAmJiB0b3RhbF9sZW4gPCA2MCkpIHsKI2lmIF9f RnJlZUJTRF92ZXJzaW9uID49IDQwMDAwMAogICAgICAgICAgICAgICAgZmV0X25ld2J1ZihzYywg Y3VyX3J4LCBtKTsKI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA0MDAwMDAKICAgICAgICAgICAg ICAgIGN1cl9yeC0+ZmV0X3B0ci0+ZmV0X3N0YXR1cyA9IEZFVF9SWFNUQVQ7CiAgICAgICAgICAg ICAgICBjdXJfcngtPmZldF9wdHItPmZldF9jdGwgPSBGRVRfUlhDVEx8RkVUX1JYTEVOOwojZW5k aWYKICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGZsb3cgY29udHJvbCwgdXBkYXRlIFJY UkRVIGluIEZsb3dDUjEgYWZ0ZXIgcmV0dXJuIGJ1ZmZlciB0byBNQUMuICovCiAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2aWQgPj0gUkVWX0lEX1ZUMzEwNikKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENTUl9XUklURV8xKHNjLCBGRVRfRmxvd0NSMCwgMSk7 CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgfQogICAgICAgIHRvdGFsX2xlbiA9IEZFVF9SWEJZVEVTKGN1cl9yeC0+ZmV0 X3B0ci0+ZmV0X3N0YXR1cyk7CgogICAgICAgICAgICAgICAgLyoKICAgICAgICAgKiBJZiBhbiBl cnJvciBvY2N1cnMsIHVwZGF0ZSBzdGF0cywgY2xlYXIgdGhlCiAgICAgICAgICogc3RhdHVzIHdv cmQgYW5kIGxlYXZlIHRoZSBtYnVmIGNsdXN0ZXIgaW4gcGxhY2U6CiAgICAgICAgICogaXQgc2hv dWxkIHNpbXBseSBnZXQgcmUtdXNlZCBuZXh0IHRpbWUgdGhpcyBkZXNjcmlwdG9yCiAgICAgICAg ICogY29tZXMgdXAgaW4gdGhlIHJpbmcuCiAgICAgICAgICovCiAgICAgICAgaWYgKCByeHN0YXQg JiBGRVRfUlhTVEFUX1JYRVJSKSB7CiAgICAgICAgICAgIGlmcC0+aWZfaWVycm9ycysrOwogICAg ICAgICAgICBwcmludGYoImZldCVkOiByeCBlcnJvcjogIiwgc2MtPmZldF91bml0KTsKICAgICAg ICAgICAgc3dpdGNoKHJ4c3RhdCAmIDB4MDAwMDAwRkYpIHsKICAgICAgICAgICAgY2FzZSBGRVRf UlhTVEFUX0NSQ0VSUjoKICAgICAgICAgICAgICAgIHByaW50ZigiY3JjIGVycm9yXG4iKTsKICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIEZFVF9SWFNUQVRfRlJBTUVBTElH TkVSUjoKICAgICAgICAgICAgICAgIHByaW50ZigiZnJhbWUgYWxpZ25tZW50IGVycm9yXG4iKTsK ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIEZFVF9SWFNUQVRfRklGT09G TE9XOgogICAgICAgICAgICAgICAgcHJpbnRmKCJGSUZPIG92ZXJmbG93XG4iKTsKICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIEZFVF9SWFNUQVRfR0lBTlQ6CiAgICAgICAg ICAgICAgICBwcmludGYoInJlY2VpdmVkIGdpYW50IHBhY2tldFxuIik7CiAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgY2FzZSBGRVRfUlhTVEFUX1JVTlQ6CiAgICAgICAgICAgICAg ICBwcmludGYoInJlY2VpdmVkIHJ1bnQgcGFja2V0XG4iKTsKICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICBjYXNlIEZFVF9SWFNUQVRfQlVTRVJSOgogICAgICAgICAgICAgICAgcHJp bnRmKCJzeXN0ZW0gYnVzIGVycm9yXG4iKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICBjYXNlIEZFVF9SWFNUQVRfQlVGRkVSUjoKICAgICAgICAgICAgICAgIHByaW50Zigicngg YnVmZmVyIGVycm9yXG4iKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZh dWx0OgogICAgICAgICAgICAgICAgcHJpbnRmKCJ1bmtub3duIHJ4IGVycm9yXG4iKTsKICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgojaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0g NDAwMDAwCiAgICAgICAgICAgIGZldF9uZXdidWYoc2MsIGN1cl9yeCwgbSk7CiNlbGlmIF9fRnJl ZUJTRF92ZXJzaW9uIDwgNDAwMDAwCiAgICAgICAgICAgIGN1cl9yeC0+ZmV0X3B0ci0+ZmV0X3N0 YXR1cyA9IEZFVF9SWFNUQVQ7CiAgICAgICAgICAgIGN1cl9yeC0+ZmV0X3B0ci0+ZmV0X2N0bCA9 IEZFVF9SWENUTHxGRVRfUlhMRU47CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAvKiBG b3IgZmxvdyBjb250cm9sLCB1cGRhdGUgUlhSRFUgaW4gRmxvd0NSMSBhZnRlciByZXR1cm4gYnVm ZmVyIHRvIE1BQy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjLT5mZXRfY2hpcF9y ZXZpZCA+PSBSRVZfSURfVlQzMTA2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NSX1dS SVRFXzEoc2MsIEZFVF9GbG93Q1IwLCAxKTsKCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg IH0KCiNpZiBWQUxfUEtUX0xFTiA9PSAgMQogICAgICAgICAgICAgICAgLyogRm9yIGNvbmZvcm1p bmcgSUVFRSA4MDIuMyBzcGVjCiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgaW5jb21pbmcgcGFj a2V0IGlzIElFRSA4MDIuMyBmcm1hZS9JRUVFIDgwMi4zIFNOQVAgZnJhbWUsIGdldAogICAgICAg ICAgICAgICAgICogUlhfTGVuZ3RoIGluIFJERVMwIGZyb20gdGhlIGluY29taW5nIHBhY2tldCwg c3VidHJhY3QgRXRoZXJuZXQgaGVhZGVyCiAgICAgICAgICAgICAgICAgKiBsZW5ndGggYW5kIENS QyBsZW5ndGggZnJvbSBpdC4gVGhlbiwgY29tcGFyZSB0aGUgcmVzdWx0IHdpdGggTC9UIGZpZWxk CiAgICAgICAgICAgICAgICAgKiBvZiB0aGUgcGFja2V0LiBJZiB0aGV5J3JlIG5vdCBlcXVhbCwg ZGVzY2FyZCB0aGlzIHBhY2tldC4KICAgICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAg IHdMZW4gPSAoKCh1bnNpZ25lZCBjaGFyKSgqKG10b2QoY3VyX3J4LT5mZXRfbWJ1ZiwgY2FkZHJf dCkgKyAxMikpICk8PCA4KSArICh1bnNpZ25lZCBjaGFyKSgqKG10b2QoY3VyX3J4LT5mZXRfbWJ1 ZiwgY2FkZHJfdCkgKyAxMykpIDsKICAgICAgICAgICAgICAgIGlmICh3TGVuID49IDQ2ICYmIHdM ZW4gPD0gMTUwMCkgeyAgIC8qIElFRUUgODAyLjMvSUVFRSA4MDIuMyBTTkFQIGZyYW1lICovCiAg ICAgICAgICAgICAgICAgICAgd1NBUCA9ICgoKHVuc2lnbmVkIGNoYXIpKCoobXRvZChjdXJfcngt PmZldF9tYnVmLCBjYWRkcl90KSArIDE0KSkpIDw8IDgpICsgKHVuc2lnbmVkIGNoYXIpKCoobXRv ZChjdXJfcngtPmZldF9tYnVmLCBjYWRkcl90KSArIDE1KSk7CiAgICAgICAgICAgICAgICAgICAg aWYgKHdTQVAgIT0gMHhGRkZGKSB7ICAgICAgICAgICAgLyogZXhjbHVkZSBOb3ZlbGwncyBFdGhl cm5ldCA4MDIuMyBmcmFtZSAqLwogICAgICAgICAgICAgICAgICAgICAgICB3QWN0dWFsTGVuID0g dG90YWxfbGVuIC0gVV9IRUFERVJfTEVOIC0gVV9DUkNfTEVOOyAgICAgICAgIC8qIHJlYWwgcGFj a2V0IGxlbmd0aCAqLwogICAgICAgICAgICAgICAgICAgICAgICBpZiAod0xlbiAhPSB3QWN0dWFs TGVuICkgeyAgICAvKiBpZiBub3QgZXF1YWwsIGRyb3AgdGhpcyBmcmFtZSAqLwojaWYgX19GcmVl QlNEX3ZlcnNpb24gPj0gNDAwMDAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRfbmV3 YnVmKHNjLCBjdXJfcngsIG0pOwojZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDQwMDAwMAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3J4LT5mZXRfcHRyLT5mZXRfc3RhdHVzID0gRkVU X1JYU1RBVDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9yeC0+ZmV0X3B0ci0+ZmV0 X2N0bCA9IEZFVF9SWENUTHxGRVRfUlhMRU47CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRm9yIGZsb3cgY29udHJvbCwgdXBkYXRlIFJYUkRVIGluIEZsb3dDUjEgYWZ0ZXIg cmV0dXJuIGJ1ZmZlciB0byBNQUMuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo c2MtPmZldF9jaGlwX3JldmlkID49IFJFVl9JRF9WVDMxMDYpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9GbG93Q1IwLCAxKTsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KI2VuZGlmCiAgICAgICAgLyogc3Vi c3RyYWN0IDQgYnl0ZXMgQ1JDICovCiAgICAgICAgdG90YWxfbGVuIC09IEVUSEVSX0NSQ19MRU47 CgojaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNDAwMDAwCiAgICAgICAgbTAgPSBtX2RldmdldCht dG9kKG0sIGNoYXIgKikgLSBFVEhFUl9BTElHTiwKICAgICAgICAgICAgdG90YWxfbGVuICsgRVRI RVJfQUxJR04sIDAsIGlmcCwgTlVMTCk7CiAgICAgICAgZmV0X25ld2J1ZihzYywgY3VyX3J4LCBt KTsKCiAgICAgICAgLyogRm9yIGZsb3cgY29udHJvbCwgdXBkYXRlIFJYUkRVIGluIEZsb3dDUjEg YWZ0ZXIgcmV0dXJuIGJ1ZmZlciB0byBNQUMuICovCiAgICAgICAgaWYgKHNjLT5mZXRfY2hpcF9y ZXZpZCA+PSBSRVZfSURfVlQzMTA2KQogICAgICAgICAgICBDU1JfV1JJVEVfMShzYywgRkVUX0Zs b3dDUjAsIDEpOwoKICAgICAgICBpZiAobTAgPT0gTlVMTCkgewogICAgICAgICAgICBpZnAtPmlm X2llcnJvcnMrKzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIG1fYWRq KG0wLCBFVEhFUl9BTElHTik7CiAgICAgICAgbSA9IG0wOwoKICAgICAgICBpZnAtPmlmX2lwYWNr ZXRzKys7CiAgICAgICAgZWggPSBtdG9kKG0sIHN0cnVjdCBldGhlcl9oZWFkZXIgKik7CgojaWYg X19GcmVlQlNEX3ZlcnNpb24gPj00MDAwMDAgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA0MTAwMDAK ICAgICAgICAvKgogICAgICAgICAqIEhhbmRsZSBCUEYgbGlzdGVuZXJzLiBMZXQgdGhlIEJQRiB1 c2VyIHNlZSB0aGUgcGFja2V0LCBidXQKICAgICAgICAgKiBkb24ndCBwYXNzIGl0IHVwIHRvIHRo ZSBldGhlcl9pbnB1dCgpIGxheWVyIHVubGVzcyBpdCdzCiAgICAgICAgICogYSBicm9hZGNhc3Qg cGFja2V0LCBtdWx0aWNhc3QgcGFja2V0LCBtYXRjaGVzIG91ciBldGhlcm5ldAogICAgICAgICAq IGFkZHJlc3Mgb3IgdGhlIGludGVyZmFjZSBpcyBpbiBwcm9taXNjdW91cyBtb2RlLgogICAgICAg ICAqLwogICAgICAgIGlmIChpZnAtPmlmX2JwZikgewogICAgICAgICAgICBicGZfbXRhcChpZnAs IG0pOwogICAgICAgICAgICBpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9QUk9NSVNDICYmCiAgICAg ICAgICAgICAgICAoYmNtcChlaC0+ZXRoZXJfZGhvc3QsIHNjLT5hcnBjb20uYWNfZW5hZGRyLAog ICAgICAgICAgICAgICAgICAgICAgICBFVEhFUl9BRERSX0xFTikgJiYKICAgICAgICAgICAgICAg ICAgICAoZWgtPmV0aGVyX2Rob3N0WzBdICYgMSkgPT0gMCkpIHsKICAgICAgICAgICAgICAgIG1f ZnJlZW0obSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAg IH0KCiNpZmRlZiBCUklER0UKICAgICAgICBpZiAoZG9fYnJpZGdlKSB7CiAgICAgICAgICAgIHN0 cnVjdCBpZm5ldCAgICAgICAgKmJkZ19pZnA7CiAgICAgICAgICAgIGJkZ19pZnAgPSBicmlkZ2Vf aW4obSk7CiAgICAgICAgICAgIGlmIChiZGdfaWZwICE9IEJER19MT0NBTCAmJiBiZGdfaWZwICE9 IEJER19EUk9QKQogICAgICAgICAgICAgICAgYmRnX2ZvcndhcmQoJm0sIGJkZ19pZnApOwogICAg ICAgICAgICBpZiAoKChiZGdfaWZwICE9IEJER19MT0NBTCkgJiYgKGJkZ19pZnAgIT0gQkRHX0JD QVNUKSAmJgogICAgICAgICAgICAgICAgKGJkZ19pZnAgIT0gQkRHX01DQVNUKSkgfHwgYmRnX2lm cCA9PSBCREdfRFJPUCkgewogICAgICAgICAgICAgICAgbV9mcmVlbShtKTsKICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQojZW5kaWYgLyogQlJJREdFICov CiNlbmRpZgoKI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA0MDAwMDAKICAgICAgICAvKgogICAg ICAgICAqIFRyeSB0byBjb25qdXJlIHVwIGEgbmV3IG1idWYgY2x1c3Rlci4gSWYgdGhhdAogICAg ICAgICAqIGZhaWxzLCBpdCBtZWFucyB3ZSBoYXZlIGFuIG91dCBvZiBtZW1vcnkgY29uZGl0aW9u IGFuZAogICAgICAgICAqIHNob3VsZCBsZWF2ZSB0aGUgYnVmZmVyIGluIHBsYWNlIGFuZCBjb250 aW51ZS4gVGhpcyB3aWxsCiAgICAgICAgICogcmVzdWx0IGluIGEgbG9zdCBwYWNrZXQsIGJ1dCB0 aGVyZSdzIGxpdHRsZSBlbHNlIHdlCiAgICAgICAgICogY2FuIGRvIGluIHRoaXMgc2l0dWF0aW9u LgogICAgICAgICAqLwoKICAgICAgICBpZiAoZmV0X25ld2J1ZihzYywgY3VyX3J4KSA9PSBFTk9C VUZTKSB7CiAgICAgICAgICAgIGlmcC0+aWZfaWVycm9ycysrOwogICAgICAgICAgICBjdXJfcngt PmZldF9wdHItPmZldF9zdGF0dXMgPSBGRVRfUlhTVEFUOwogICAgICAgICAgICBjdXJfcngtPmZl dF9wdHItPmZldF9jdGwgPSBGRVRfUlhDVEx8RkVUX1JYTEVOOwoKICAgICAgICAgICAgLyogRm9y IGZsb3cgY29udHJvbCwgdXBkYXRlIFJYUkRVIGluIEZsb3dDUjEgYWZ0ZXIgcmV0dXJuIGJ1ZmZl ciB0byBNQUMuICovCiAgICAgICAgICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2aWQgPj0gUkVWX0lE X1ZUMzEwNikKICAgICAgICAgICAgICAgIENTUl9XUklURV8xKHNjLCBGRVRfRmxvd0NSMCwgMSk7 CgogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg ICAgIC8qIEZvciBmbG93IGNvbnRyb2wsIHVwZGF0ZSBSWFJEVSBpbiBGbG93Q1IxIGFmdGVyIHJl dHVybiBidWZmZXIgdG8gTUFDLiAqLwogICAgICAgICAgICBpZiAoc2MtPmZldF9jaGlwX3Jldmlk ID49IFJFVl9JRF9WVDMxMDYpCiAgICAgICAgICAgICAgICBDU1JfV1JJVEVfMShzYywgRkVUX0Zs b3dDUjAsIDEpOwogICAgICAgIH0KCiAgICAgICAgaWZwLT5pZl9pcGFja2V0cysrOwogICAgICAg IGVoID0gbXRvZChtLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICopOwogICAgICAgIG0tPm1fcGt0aGRy LnJjdmlmID0gaWZwOwogICAgICAgIG0tPm1fcGt0aGRyLmxlbiA9IG0tPm1fbGVuID0gdG90YWxf bGVuOwojaWYgTkJQRklMVEVSID4gMAogICAgICAgIC8qCiAgICAgICAgICogSGFuZGxlIEJQRiBs aXN0ZW5lcnMuIExldCB0aGUgQlBGIHVzZXIgc2VlIHRoZSBwYWNrZXQsIGJ1dAogICAgICAgICAq IGRvbid0IHBhc3MgaXQgdXAgdG8gdGhlIGV0aGVyX2lucHV0KCkgbGF5ZXIgdW5sZXNzIGl0J3MK ICAgICAgICAgKiBhIGJyb2FkY2FzdCBwYWNrZXQsIG11bHRpY2FzdCBwYWNrZXQsIG1hdGNoZXMg b3VyIGV0aGVybmV0CiAgICAgICAgICogYWRkcmVzcyBvciB0aGUgaW50ZXJmYWNlIGlzIGluIHBy b21pc2N1b3VzIG1vZGUuCiAgICAgICAgICovCiAgICAgICAgaWYgKGlmcC0+aWZfYnBmKSB7CiAg ICAgICAgICAgIGJwZl9tdGFwKGlmcCwgbSk7CiAgICAgICAgICAgIGlmIChpZnAtPmlmX2ZsYWdz ICYgSUZGX1BST01JU0MgJiYKICAgICAgICAgICAgICAgIChiY21wKGVoLT5ldGhlcl9kaG9zdCwg c2MtPmFycGNvbS5hY19lbmFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgIEVUSEVSX0FERFJf TEVOKSAmJgogICAgICAgICAgICAgICAgICAgIChlaC0+ZXRoZXJfZGhvc3RbMF0gJiAxKSA9PSAw KSkgewogICAgICAgICAgICAgICAgbV9mcmVlbShtKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVl OwogICAgICAgICAgICB9CiAgICAgICAgfQojZW5kaWYKI2VuZGlmCiAgICAgICAgLyogUmVtb3Zl IGhlYWRlciBmcm9tIG1idWYgYW5kIHBhc3MgaXQgb24uICovCiAgICAgICAgbV9hZGoobSwgc2l6 ZW9mKHN0cnVjdCBldGhlcl9oZWFkZXIpKTsKICAgICAgICBldGhlcl9pbnB1dChpZnAsIGVoLCBt KTsKICAgIH0KICAgIHJldHVybjsKfQoKLyoKICogQSBmcmFtZSB3YXMgZG93bmxvYWRlZCB0byB0 aGUgY2hpcC4gSXQncyBzYWZlIGZvciB1cyB0byBjbGVhbiB1cAogKiB0aGUgbGlzdCBidWZmZXJz LgogKi8KCnN0YXRpYyB2b2lkIGZldF90eGVvZihzYykKICAgIHN0cnVjdCBmZXRfc29mdGMgICAg ICAgICpzYzsKewogICAgc3RydWN0IGZldF9jaGFpbiAgICAgICAgKmN1cl90eDsKICAgIHN0cnVj dCBpZm5ldCAgICAgICAgKmlmcDsKICAgIHJlZ2lzdGVyIHN0cnVjdCBtYnVmICAgICpuOwogICAg aWZwID0gJnNjLT5hcnBjb20uYWNfaWY7CgogICAgLyogQ2xlYXIgdGhlIHRpbWVvdXQgdGltZXIu ICovCiAgICBpZnAtPmlmX3RpbWVyID0gMDsKCiAgICAvKiBTYW5pdHkgY2hlY2suICovCiAgICBp ZiAoc2MtPmZldF9jZGF0YS5mZXRfdHhfaGVhZCA9PSBOVUxMKQogICAgICAgIHJldHVybjsKICAg IC8qCiAgICAgKiBHbyB0aHJvdWdoIG91ciB0eCBsaXN0IGFuZCBmcmVlIG1idWZzIGZvciB0aG9z ZQogICAgICogZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLgogICAgICovCiAgICB3 aGlsZShzYy0+ZmV0X2NkYXRhLmZldF90eF9oZWFkLT5mZXRfbWJ1ZiAhPSBOVUxMKSB7CiAgICAg ICAgdV9pbnQzMl90ICAgICAgIHR4c3RhdDsKICAgICAgICBjdXJfdHggPSBzYy0+ZmV0X2NkYXRh LmZldF90eF9oZWFkOwoKICAgICAgICBpZiAoY3VyX3R4LT5mZXRfcHRyLT5mZXRfY3RsICYgRkVU X1RYQ1RMX0ZJUlNURlJBRykgewogICAgICAgICAgICB0eHN0YXQgPSBjdXJfdHgtPmZldF9wdHIt PmZldF9zdGF0dXM7CgogICAgICAgICAgICBpZiAodHhzdGF0ICYgRkVUX1RYU1RBVF9PV04pCiAg ICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGlmICh0eHN0YXQgJiAoRkVUX1RYU1RB VF9VREYpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoc2MtPnR4X3RocmVzaDw0 KSB7CiAgICAgICAgICAgICAgICAgICAgc2MtPnR4X3RocmVzaCsrOwogICAgICAgICAgICAgICAg ICAgIGZldF9zZXRfdHhfdGhyZXNoKHNjKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIGN1cl90eC0+ZmV0X3B0ci0+ZmV0X3N0YXR1cz0wOwoKICAgICAgICAgICAgICAgIHdoaWxl KENTUl9SRUFEXzIoc2MsRkVUX0NPTU1BTkQpICYgRkVUX0NNRF9UWF9PTikKICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICBGRVRfVFhPV04oY3VyX3R4KSA9IEZFVF9UWFNUQVRf T1dOOwogICAgICAgICAgICAgICAgQ1NSX1dSSVRFXzQoc2MsIEZFVF9UWEFERFIsIHZ0b3BoeXMo Y3VyX3R4LT5mZXRfcHRyKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoK ICAgICAgICAgICAgaWYgKHR4c3RhdCAmIChGRVRfVFhTVEFUX0FCVCkpIHsKICAgICAgICAgICAg ICAgIGN1cl90eC0+ZmV0X3B0ci0+ZmV0X3N0YXR1cz0wOwogICAgICAgICAgICAgICAgcHJpbnRm KCJ0eCBhYm9ydCAleFxuIix0eHN0YXQpOwogICAgICAgICAgICAgICAgd2hpbGUoQ1NSX1JFQURf MihzYyxGRVRfQ09NTUFORCkgJiBGRVRfQ01EX1RYX09OKQogICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgIENTUl9XUklURV80KHNjLCBGRVRfVFhBRERSLCB2dG9waHlzKGN1cl90 eC0+ZmV0X25leHRkZXNjLT5mZXRfcHRyKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlm ICh0eHN0YXQgJiBGRVRfVFhTVEFUX0VSUlNVTSkgewogICAgICAgICAgICAgICAgaWZwLT5pZl9v ZXJyb3JzKys7CiAgICAgICAgICAgICAgICBpZiAodHhzdGF0ICYgRkVUX1RYU1RBVF9ERUZFUikK ICAgICAgICAgICAgICAgICAgICBpZnAtPmlmX2NvbGxpc2lvbnMrKzsKICAgICAgICAgICAgICAg IGlmICh0eHN0YXQgJiBGRVRfVFhTVEFUX0xBVEVDT0xMKQogICAgICAgICAgICAgICAgICAgIGlm cC0+aWZfY29sbGlzaW9ucysrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZnAtPmlmX2Nv bGxpc2lvbnMgKz0odHhzdGF0ICYgRkVUX1RYU1RBVF9DT0xMQ05UKTsKCiAgICAgICAgICAgIGlm cC0+aWZfb3BhY2tldHMrKzsKICAgICAgICB9CgogICAgICAgIGlmIChjdXJfdHgtPmZldF9tYnVm ICE9IE5VTEwpIHsKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogd2UgZG8gbmVlZCB0byBj aGVjayBub24tZmlyc3QgbWJ1Ziwgc2luY2Ugc29tZSBvZiBleGlzdGluZwogICAgICAgICAgICAg KiBjb2RlIGRvZXMgbm90IGNhbGwgTV9QUkVQRU5EIHByb3Blcmx5LgogICAgICAgICAgICAgKiAo ZXhhbXBsZTogY2FsbCB0byBicGZfbXRhcCBmcm9tIGRyaXZlcnMpCiAgICAgICAgICAgICAqLwoj aWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNDEwMDAwCiAgICAgICAgICAgIGlmICgoY3VyX3R4LT5m ZXRfbWJ1Zi0+bV9mbGFncyAmIE1fUEtUSERSKSAhPSAwICYmIGN1cl90eC0+ZmV0X21idWYtPm1f cGt0aGRyLmF1eCkgewogICAgICAgICAgICAgICAgbV9mcmVlbShjdXJfdHgtPmZldF9tYnVmLT5t X3BrdGhkci5hdXgpOwogICAgICAgICAgICAgICAgY3VyX3R4LT5mZXRfbWJ1Zi0+bV9wa3RoZHIu YXV4ID0gTlVMTDsKICAgICAgICAgICAgfQojZW5kaWYKICAgICAgICAgICAgTUZSRUUoY3VyX3R4 LT5mZXRfbWJ1Ziwgbik7CiAgICAgICAgICAgIGN1cl90eC0+ZmV0X21idWYgPSBOVUxMOwogICAg ICAgIH0KICAgICAgICBzYy0+ZmV0X2NkYXRhLmZldF9mcmVlX3R4X2NvdW50Kys7CgogICAgICAg IGlmIChzYy0+ZmV0X2NkYXRhLmZldF90eF9oZWFkID09IHNjLT5mZXRfY2RhdGEuZmV0X3R4X3Rh aWwpIHsKICAgICAgICAgICAgc2MtPmZldF9jZGF0YS5mZXRfdHhfaGVhZCA9IE5VTEw7CiAgICAg ICAgICAgIHNjLT5mZXRfY2RhdGEuZmV0X3R4X3RhaWwgPSBOVUxMOwogICAgICAgICAgICBicmVh azsKICAgICAgICB9CiAgICAgICAgc2MtPmZldF9jZGF0YS5mZXRfdHhfaGVhZCA9IGN1cl90eC0+ ZmV0X25leHRkZXNjOwogICAgfSAvKndoaWxlKi8KCiAgICByZXR1cm47Cn0KCnN0YXRpYyB2b2lk IGZldF90eF9kcm9wX2FsbChzYykKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgICAgICpzYzsKewog ICAgc3RydWN0IGZldF9jaGFpbiAgICAgICAgKmN1cl90eD1zYy0+ZmV0X2NkYXRhLmZldF90eF9o ZWFkOwogICAgc3RydWN0IGlmbmV0ICAgICAgICAqaWZwOwogICAgcmVnaXN0ZXIgc3RydWN0IG1i dWYgICAgKm47CiAgICBpZnAgPSAmc2MtPmFycGNvbS5hY19pZjsKCiAgICB3aGlsZShDU1JfUkVB RF8yKHNjLEZFVF9DT01NQU5EKSAmIEZFVF9DTURfVFhfT04pCiAgICAgICAgICAgICAgICAgICAg OwoKICAgIC8qIENsZWFyIHRoZSB0aW1lb3V0IHRpbWVyLiAqLwogICAgaWZwLT5pZl90aW1lciA9 IDA7CgogICAgLyogU2FuaXR5IGNoZWNrLiAqLwogICAgaWYgKHNjLT5mZXRfY2RhdGEuZmV0X3R4 X2hlYWQgPT0gTlVMTCkKICAgICAgICByZXR1cm47CgogICAgLyoKICAgICAqIEdvIHRocm91Z2gg b3VyIHR4IGxpc3QgYW5kIGZyZWUgbWJ1ZnMgZm9yIHRob3NlCiAgICAgKiBmcmFtZXMgdGhhdCBo YXZlIGJlZW4gdHJhbnNtaXR0ZWQuCiAgICAgKi8KICAgIHdoaWxlKHNjLT5mZXRfY2RhdGEuZmV0 X3R4X2hlYWQtPmZldF9tYnVmICE9IE5VTEwpIHsKICAgICAgICB1X2ludDMyX3QgICAgICAgdHhz dGF0OwogICAgICAgIGN1cl90eCA9IHNjLT5mZXRfY2RhdGEuZmV0X3R4X2hlYWQ7CiAgICAgICAg ICAgIHR4c3RhdCA9IGN1cl90eC0+ZmV0X3B0ci0+ZmV0X3N0YXR1czsKICAgICAgICAgICAgaWYg KHR4c3RhdCAmIEZFVF9UWFNUQVRfT1dOKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAg IGlmIChjdXJfdHgtPmZldF9tYnVmICE9IE5VTEwpIHsKICAgICAgICAgICAgLyoKICAgICAgICAg ICAgICogd2UgZG8gbmVlZCB0byBjaGVjayBub24tZmlyc3QgbWJ1Ziwgc2luY2Ugc29tZSBvZiBl eGlzdGluZwogICAgICAgICAgICAgKiBjb2RlIGRvZXMgbm90IGNhbGwgTV9QUkVQRU5EIHByb3Bl cmx5LgogICAgICAgICAgICAgKiAoZXhhbXBsZTogY2FsbCB0byBicGZfbXRhcCBmcm9tIGRyaXZl cnMpCiAgICAgICAgICAgICAqLwojaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNDEwMDAwCiAgICAg ICAgICAgIGlmICgoY3VyX3R4LT5mZXRfbWJ1Zi0+bV9mbGFncyAmIE1fUEtUSERSKSAhPSAwICYm IGN1cl90eC0+ZmV0X21idWYtPm1fcGt0aGRyLmF1eCkgewogICAgICAgICAgICAgICAgbV9mcmVl bShjdXJfdHgtPmZldF9tYnVmLT5tX3BrdGhkci5hdXgpOwogICAgICAgICAgICAgICAgY3VyX3R4 LT5mZXRfbWJ1Zi0+bV9wa3RoZHIuYXV4ID0gTlVMTDsKICAgICAgICAgICAgfQojZW5kaWYKICAg ICAgICAgICAgTUZSRUUoY3VyX3R4LT5mZXRfbWJ1Ziwgbik7CiAgICAgICAgICAgIGN1cl90eC0+ ZmV0X21idWYgPSBOVUxMOwogICAgICAgIH0KICAgICAgICBzYy0+ZmV0X2NkYXRhLmZldF9mcmVl X3R4X2NvdW50Kys7CgogICAgICAgIGlmIChzYy0+ZmV0X2NkYXRhLmZldF90eF9oZWFkID09IHNj LT5mZXRfY2RhdGEuZmV0X3R4X3RhaWwpIHsKICAgICAgICAgICAgc2MtPmZldF9jZGF0YS5mZXRf dHhfaGVhZCA9IE5VTEw7CiAgICAgICAgICAgIHNjLT5mZXRfY2RhdGEuZmV0X3R4X3RhaWwgPSBO VUxMOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2MtPmZldF9jZGF0YS5m ZXRfdHhfaGVhZCA9IGN1cl90eC0+ZmV0X25leHRkZXNjOwogICAgfQoKICAgIENTUl9XUklURV80 KHNjLCBGRVRfVFhBRERSLCB2dG9waHlzKGN1cl90eC0+ZmV0X3B0cikpOwogICAgRkVUX1NFVEJJ VDE2KHNjLCBGRVRfQ09NTUFORCwgRkVUX0NNRF9UWF9PTik7CiAgICBGRVRfU0VUQklUMTYoc2Ms IEZFVF9DT01NQU5ELCBGRVRfQ01EX1RETUQxKTsKCn0KLyoKICogVFggJ2VuZCBvZiBjaGFubmVs JyBpbnRlcnJ1cHQgaGFuZGxlci4KICovCnN0YXRpYyB2b2lkIGZldF90eGVvYyhzYykKICAgIHN0 cnVjdCBmZXRfc29mdGMgICAgICAgICpzYzsKewogICAgc3RydWN0IGlmbmV0ICAgICAgICAqaWZw OwogICAgaWZwID0gJnNjLT5hcnBjb20uYWNfaWY7CiAgICBpZnAtPmlmX3RpbWVyID0gMDsKICAg IGlmIChzYy0+ZmV0X2NkYXRhLmZldF90eF9oZWFkID09IE5VTEwpIHsKICAgICAgICBpZnAtPmlm X2ZsYWdzICY9IH5JRkZfT0FDVElWRTsKICAgICAgICBzYy0+ZmV0X2NkYXRhLmZldF90eF90YWls ID0gTlVMTDsKICAgIH0KCiAgICByZXR1cm47Cn0Kc3RhdGljIHZvaWQgZmV0X2ludHIoYXJnKQog ICAgdm9pZCAgICAgICAgICAgICphcmc7CnsKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgKnNjOwog ICAgc3RydWN0IGlmbmV0ICAgICAgICAqaWZwOwogICAgdV9pbnQxNl90ICAgICAgICAgICBzdGF0 dXM7CiAgICB1X2ludDhfdCAgICAgICAgICAgIGJ5TUlTUjsKICAgIHNjID0gYXJnOwogICAgaWZw ID0gJnNjLT5hcnBjb20uYWNfaWY7CgogICAgLyogU3VwcmVzcyB1bndhbnRlZCBpbnRlcnJ1cHRz LiAqLwogICAgaWYgKCEoaWZwLT5pZl9mbGFncyAmIElGRl9VUCkpIHsKICAgICAgICBmZXRfc3Rv cChzYyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qIERpc2FibGUgaW50ZXJydXB0cy4g Ki8KICAgIENTUl9XUklURV8yKHNjLCBGRVRfSU1SLCAweDAwMDApOwogICAgQ1NSX1dSSVRFXzEo c2MsIEZFVF9NSU1SLCAwKTsKCiAgICBmb3IgKDs7KSB7CgogICAgICAgIHN0YXR1cyA9IENTUl9S RUFEXzIoc2MsIEZFVF9JU1IpOwogICAgICAgIGJ5TUlTUiAgPSBDU1JfUkVBRF8xKHNjLCBGRVRf TUlTUik7CgogICAgICAgIGlmICgoc3RhdHVzPT0wKSAmJiAoYnlNSVNSPT0wKSkKICAgICAgICAg ICAgYnJlYWs7CgogICAgICAgIENTUl9XUklURV8yKHNjLCBGRVRfSVNSLCBzdGF0dXMpOwogICAg ICAgIENTUl9XUklURV8xKHNjLCBGRVRfTUlTUiwgYnlNSVNSKTsKCiAgICAgICAgaWYgKHN0YXR1 cyAmIEZFVF9JU1JfU1JDSSkgewogICAgICAgICAgICBmZXRfbGlua19jaGFuZ2Uoc2MpOwogICAg ICAgIH0KICAgICAgICBpZiAoYnlNSVNSICYgRkVUX01JU1JfVERXQlJBSSkgewogICAgICAgICAg ICBmZXRfdHhfZHJvcF9hbGwoc2MpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKICAg ICAgICBpZiAoc3RhdHVzICYgRkVUX0lTUl9CRSkgewogICAgICAgICAgICBwcmludGYoImZldCVk OiBIYXJkd2FyZSBmYXRhbCBlcnJvclxuIiwgc2MtPmZldF91bml0KTsKICAgICAgICAgICAgZmV0 X3N0b3Aoc2MpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0 dXMgJiAoRkVUX0lTUl9SWEV8RkVUX0lTUl9QUlgpKQogICAgICAgICAgICBmZXRfcnhlb2Yoc2Mp OwoKICAgICAgICBpZiAoc3RhdHVzICYKICAgICAgICAgICAgKEZFVF9JU1JfUFRYfEZFVF9JU1Jf VFhFfEZFVF9JU1JfVFhfQUJUSXxGRVRfSVNSX1VERkkpKSB7CiAgICAgICAgICAgIGZldF90eGVv ZihzYyk7CiAgICAgICAgICAgIGlmIChzdGF0dXMgJiAoRkVUX0lTUl9VREZJfEZFVF9JU1JfVFhf QUJUSSkpIHsKICAgICAgICAgICAgICAgIGlmcC0+aWZfb2Vycm9ycysrOwogICAgICAgICAgICAg ICAgaWYgKHNjLT5mZXRfY2RhdGEuZmV0X3R4X2hlYWQgIT0gTlVMTCkgewogICAgICAgICAgICAg ICAgICAgIEZFVF9TRVRCSVQxNihzYywgRkVUX0NPTU1BTkQsIEZFVF9DTURfVFhfT04pOwogICAg ICAgICAgICAgICAgICAgIEZFVF9TRVRCSVQxNihzYywgRkVUX0NPTU1BTkQsIEZFVF9DTURfVERN RDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIGZldF90eGVvYyhzYyk7CiAgICAgICAgfQoKICAgIH0KCiAgICAvKiBSZS1l bmFibGUgaW50ZXJydXB0cy4gKi8KICAgIENTUl9XUklURV8yKHNjLCBGRVRfSU1SLCBJTVJTaGFk b3cpOwogICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9NSU1SLCBNSU1SU2hhZG93KTsKCiAgICBpZiAo aWZwLT5pZl9zbmQuaWZxX2hlYWQgIT0gTlVMTCkgewogICAgICAgIGZldF9zdGFydChpZnApOwog ICAgfQogICAgcmV0dXJuOwoKfQoKLyoKICogRW5jYXBzdWxhdGUgYW4gbWJ1ZiBjaGFpbiBpbiBh IGRlc2NyaXB0b3IgYnkgY291cGxpbmcgdGhlIG1idWYgZGF0YQogKiBwb2ludGVycyB0byB0aGUg ZnJhZ21lbnQgcG9pbnRlcnMuCiAqLwpzdGF0aWMgaW50IGZldF9lbmNhcChzYywgYywgbV9oZWFk KQogICAgc3RydWN0IGZldF9zb2Z0YyAgICAgICAgKnNjOwogICAgc3RydWN0IGZldF9jaGFpbiAg ICAgICAgKmM7CiAgICBzdHJ1Y3QgbWJ1ZiAgICAgKm1faGVhZDsKewogICAgaW50ICAgICAgICAg ZnJhZyA9IDA7CiAgICBzdHJ1Y3QgZmV0X2Rlc2MgICAgICpmID0gTlVMTDsKICAgIGludCAgICAg ICAgIHRvdGFsX2xlbjsKICAgIHN0cnVjdCBtYnVmICAgICAqbTsKCiAgICBtID0gbV9oZWFkOwog ICAgdG90YWxfbGVuID0gMDsKCiAgICAvKgogICAgICogTklDIHdhbnRzIHBhY2tldCBidWZmZXJz IHRvIGJlIGxvbmd3b3JkCiAgICAgKiBhbGlnbmVkLCBidXQgdmVyeSBvZnRlbiBvdXIgbWJ1ZnMg YXJlbid0LiBSYXRoZXIgdGhhbgogICAgICogd2FzdGUgdGltZSB0cnlpbmcgdG8gZGVjaWRlIHdo ZW4gdG8gY29weSBhbmQgd2hlbiBub3QKICAgICAqIHRvIGNvcHksIGp1c3QgZG8gaXQgYWxsIHRo ZSB0aW1lLgogICAgICovCiAgICBpZiAobSAhPSBOVUxMKSB7CiAgICAgICAgc3RydWN0IG1idWYg ICAgICptX25ldyA9IE5VTEw7CgogICAgICAgIE1HRVRIRFIobV9uZXcsIE1fRE9OVFdBSVQsIE1U X0RBVEEpOwogICAgICAgIGlmIChtX25ldyA9PSBOVUxMKSB7CiAgICAgICAgICAgIHByaW50Zigi ZmV0JWQ6IG5vIG1lbW9yeSBmb3IgdHggbGlzdCIsIHNjLT5mZXRfdW5pdCk7CiAgICAgICAgICAg IHJldHVybigxKTsKICAgICAgICB9CiAgICAgICAgaWYgKG1faGVhZC0+bV9wa3RoZHIubGVuID4g TUhMRU4pIHsKICAgICAgICAgICAgTUNMR0VUKG1fbmV3LCBNX0RPTlRXQUlUKTsKICAgICAgICAg ICAgaWYgKCEobV9uZXctPm1fZmxhZ3MgJiBNX0VYVCkpIHsKICAgICAgICAgICAgICAgIG1fZnJl ZW0obV9uZXcpOwogICAgICAgICAgICAgICAgcHJpbnRmKCJmZXQlZDogbm8gbWVtb3J5IGZvciB0 eCBsaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgc2MtPmZldF91bml0KTsKICAgICAgICAg ICAgICAgIHJldHVybigxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBtX2NvcHlk YXRhKG1faGVhZCwgMCwgbV9oZWFkLT5tX3BrdGhkci5sZW4sCiAgICAgICAgICAgICAgICAgICAg bXRvZChtX25ldywgY2FkZHJfdCkpOwogICAgICAgIG1fbmV3LT5tX3BrdGhkci5sZW4gPSBtX25l dy0+bV9sZW4gPSBtX2hlYWQtPm1fcGt0aGRyLmxlbjsKICAgICAgICBtX2ZyZWVtKG1faGVhZCk7 CiAgICAgICAgbV9oZWFkID0gbV9uZXc7CiAgICAgICAgLyoKICAgICAgICAgKiBUaGUgUmhpbmUg Y2hpcCBkb2Vzbid0IGF1dG8tcGFkLCBzbyB3ZSBoYXZlIHRvIG1ha2UKICAgICAgICAgKiBzdXJl IHRvIHBhZCB6ZXJvcyB0byBzaG9ydCBmcmFtZXMgb3V0IHRvIHRoZSBtaW5pbXVtIGZyYW1lIAog ICAgICAgICAqIGxlbmd0aCBvdXJzZWx2ZXMuCiAgICAgICAgICovCiAgICAgICAgIAogICAgICAg IGlmIChtX2hlYWQtPm1fbGVuIDwgRkVUX01JTl9GUkFNRUxFTikgewogICAgICAgIAliemVybyht dG9kKG1fbmV3LGNoYXIqKSttX25ldy0+bV9wa3RoZHIubGVuLAogICAgICAgIAkJRkVUX01JTl9G UkFNRUxFTiAtIG1fbmV3LT5tX2xlbik7CiAgICAgICAgICAgIG1fbmV3LT5tX3BrdGhkci5sZW4g Kz0gRkVUX01JTl9GUkFNRUxFTiAtIG1fbmV3LT5tX2xlbjsKICAgICAgICAgICAgbV9uZXctPm1f bGVuID0gbV9uZXctPm1fcGt0aGRyLmxlbjsgICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAg ZiA9IGMtPmZldF9wdHI7CiAgICAgICAgZi0+ZmV0X2RhdGEgPSB2dG9waHlzKG10b2QobV9uZXcs IGNhZGRyX3QpKTsKICAgICAgICBmLT5mZXRfY3RsID0gdG90YWxfbGVuID0gbV9uZXctPm1fbGVu OwogICAgICAgIGYtPmZldF9jdGwgfD0gRkVUX1RYQ1RMX1RMSU5LfEZFVF9UWENUTF9GSVJTVEZS QUc7CiAgICAgICAgZi0+ZmV0X3N0YXR1cyA9IDA7CiAgICAgICAgZnJhZyA9IDE7CiAgICB9Cgog ICAgYy0+ZmV0X21idWYgPSBtX2hlYWQ7CiAgICBjLT5mZXRfcHRyLT5mZXRfY3RsIHw9IEZFVF9U WENUTF9MQVNURlJBR3xGRVRfVFhDVExfRklOVDsKICAgIGMtPmZldF9wdHItPmZldF9uZXh0ID0g dnRvcGh5cyhjLT5mZXRfbmV4dGRlc2MtPmZldF9wdHIpOwoKICAgIHJldHVybigwKTsKfQoKLyoK ICogTWFpbiB0cmFuc21pdCByb3V0aW5lLiBUbyBhdm9pZCBoYXZpbmcgdG8gZG8gbWJ1ZiBjb3Bp ZXMsIHdlIHB1dCBwb2ludGVycwogKiB0byB0aGUgbWJ1ZiBkYXRhIHJlZ2lvbnMgZGlyZWN0bHkg aW4gdGhlIHRyYW5zbWl0IGxpc3RzLiBXZSBhbHNvIHNhdmUgYQogKiBjb3B5IG9mIHRoZSBwb2lu dGVycyBzaW5jZSB0aGUgdHJhbnNtaXQgbGlzdCBmcmFnbWVudCBwb2ludGVycyBhcmUKICogcGh5 c2ljYWwgYWRkcmVzc2VzLgogKi8KCnN0YXRpYyB2b2lkIGZldF9zdGFydChpZnApCiAgICBzdHJ1 Y3QgaWZuZXQgICAgICAgICppZnA7CnsKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgKnNjOwogICAg c3RydWN0IG1idWYgICAgICptX2hlYWQgPSBOVUxMLCAqbSA9IE5VTEw7CiAgICBzdHJ1Y3QgZmV0 X2NoYWluICAgICpjdXJfdHggPSBOVUxMLCAqc3RhcnRfdHgsICpmaXJzdF90eCA9IE5VTEw7CiAg ICBpbnQgICAgICAgICAgICAgZnJhZ19jb3VudCwgZnJhZ19uZWVkPTA7CiAgICBpbnQgICAgICAg ICAgICAgczsKCQogICAgcz1zcGxpbXAoKTsKICAgIHNjID0gaWZwLT5pZl9zb2Z0YzsKCiAgICAv KgogICAgICogY2hlY2sgdGhlIHRyYW5zbWl0IHByb2Nlc3MgaXMgbm90IHByb2NlZWRpbmcgbm93 LgogICAgICovCiAgICBpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9PQUNUSVZFKSB7CiAgICAgICAg c3BseChzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLyoKICAgICAqIENoZWNrIGZvciBh biBhdmFpbGFibGUgcXVldWUgc2xvdC4gSWYgdGhlcmUgYXJlIG5vbmUsCiAgICAgKiBwdW50Lgog ICAgICovCiAgICBpZiAoc2MtPmZldF9jZGF0YS5mZXRfdHhfZnJlZS0+ZmV0X21idWYgIT0gTlVM TCkgewogICAgICAgIGlmcC0+aWZfZmxhZ3MgfD0gSUZGX09BQ1RJVkU7CiAgICAgICAgc3BseChz KTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBzdGFydF90eCA9IHNjLT5mZXRfY2RhdGEuZmV0 X3R4X2ZyZWU7CiAgICAKICAgIHdoaWxlKHNjLT5mZXRfY2RhdGEuZmV0X3R4X2ZyZWUtPmZldF9t YnVmID09IE5VTEwpIHsKICAgIAogCQlpZiAoc2MtPmZldF9jaGlwX3JldmlkID49IFJFVl9JRF9W VDMwNjVfQSkgewoJCQlzdHJ1Y3QgbWJ1ZiAqbV90bXA7CgkJCWZvciAobV90bXA9aWZwLT5pZl9z bmQuaWZxX2hlYWQsIGZyYWdfbmVlZD0wOyBtX3RtcCE9TlVMTDsgCgkJCQltX3RtcD1tX3RtcC0+ bV9uZXh0KQogICAgICAgIAkgICAgaWYJKG1fdG1wLT5tX2xlbiAhPSAwKSAKICAgICAgICAgICAg CSAgICBmcmFnX25lZWQrKzsKICAgICAgICAgIAkJCgkgICAgICAgICAgICBpZiggKHNjLT5mZXRf Y2RhdGEuZmV0X2ZyZWVfdHhfY291bnQpIDwgZnJhZ19uZWVkKSB7CiAgICAJICAgICAgICAgICAg ICAgIGlmcC0+aWZfZmxhZ3MgfD0gSUZGX09BQ1RJVkU7CiAgICAgICAgCSAgICAgICAgICAgIGJy ZWFrOwogICAgICAgIAkgICAgfQogICAgCX0JCgogICAgICAgIElGX0RFUVVFVUUoJmlmcC0+aWZf c25kLCBtX2hlYWQpOwogICAgICAgIGlmIChtX2hlYWQgPT0gTlVMTCkKICAgICAgICAgICAgYnJl YWs7CgogICAgICAgIGlmICgoc2MtPmZldF9jaGlwX3JldmlkIDwgUkVWX0lEX1ZUMzA2NV9BKSB8 fAogICAgICAgIAkobV9oZWFkLT5tX3BrdGhkci5sZW4gPCBGRVRfTUlOX0ZSQU1FTEVOKSl7Cgog ICAgICAgICAgICAvKiBQaWNrIGEgZGVzY3JpcHRvciBvZmYgdGhlIGZyZWUgbGlzdC4gKi8KICAg ICAgICAgICAgY3VyX3R4ID0gc2MtPmZldF9jZGF0YS5mZXRfdHhfZnJlZTsKICAgICAgICAgICAg c2MtPmZldF9jZGF0YS5mZXRfdHhfZnJlZSA9IGN1cl90eC0+ZmV0X25leHRkZXNjOwogICAgICAg ICAgICAvKiBQYWNrIHRoZSBkYXRhIGludG8gdGhlIGRlc2NyaXB0b3IuICovCiAgICAgICAgICAg IGZldF9lbmNhcChzYywgY3VyX3R4LCBtX2hlYWQpOwoKICAgICAgICAgICAgaWYgKGN1cl90eCAh PSBzdGFydF90eCkKICAgICAgICAgICAgICAgIEZFVF9UWE9XTihjdXJfdHgpID0gRkVUX1RYU1RB VF9PV047CgojaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNDAwMDAwIHx8IChfX0ZyZWVCU0RfdmVy c2lvbiA8IDQwMDAwMCAmJiBOQlBGSUxURVIgPiAwKQogICAgICAgICAgICAvKgogICAgICAgICAg ICAgKiBJZiB0aGVyZSdzIGEgQlBGIGxpc3RlbmVyLCBib3VuY2UgYSBjb3B5IG9mIHRoaXMgZnJh bWUKICAgICAgICAgICAgICogdG8gaGltLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgaWYg KGlmcC0+aWZfYnBmKQogICAgICAgICAgICAgICAgYnBmX210YXAoaWZwLCBjdXJfdHgtPmZldF9t YnVmKTsKI2VuZGlmCiAgICAgICAgICAgIEZFVF9UWE9XTihjdXJfdHgpID0gRkVUX1RYU1RBVF9P V047CiAgICAgICAgICAgIHNjLT5mZXRfY2RhdGEuZmV0X2ZyZWVfdHhfY291bnQtLTsKICAgICAg ICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJlZ2lzdGVyIHN0cnVjdCBtYnVmICp0bXAs ICpuOwogICAgICAgICAgICBmcmFnX2NvdW50ID0gMTsKICAgICAgICAgICAgCQkJCiAgICAgICAg ICAgIGZvciAobSA9IG1faGVhZDsgbSAhPSBOVUxMOyApIHsKICAgICAgICAgICAgICAgIGlmKG0t Pm1fbGVuID09IDApIHsKICAgICAgICAgICAgICAgICAgICB0bXAgPSBtOwogICAgICAgICAgICAg ICAgICAgIG0gPSBtLT5tX25leHQ7CiNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA0MTAwMDAKICAg ICAgICAgICAgICAgICAgICBpZiAoKHRtcC0+bV9mbGFncyAmIE1fUEtUSERSKSAhPSAwICYmIHRt cC0+bV9wa3RoZHIuYXV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJlZW0odG1wLT5t X3BrdGhkci5hdXgpOwogICAgICAgICAgICAgICAgICAgICAgICB0bXAtPm1fcGt0aGRyLmF1eCA9 IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgfQojZW5kaWYKICAgICAgICAgICAgICAgICAgICBN RlJFRSh0bXAsIG4pOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAJCQkJCiAgICAgICAgICAgICAgICAvKiBQaWNrIGEgZGVzY3Jp cHRvciBvZmYgdGhlIGZyZWUgbGlzdC4gKi8KICAgICAgICAgICAgICAgIGN1cl90eCA9IHNjLT5m ZXRfY2RhdGEuZmV0X3R4X2ZyZWU7CgogICAgICAgICAgICAgICAgc2MtPmZldF9jZGF0YS5mZXRf dHhfZnJlZSA9IGN1cl90eC0+ZmV0X25leHRkZXNjOwogICAgICAgICAgICAgICAgc2MtPmZldF9j ZGF0YS5mZXRfZnJlZV90eF9jb3VudC0tOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICBpZiAoZnJhZ19jb3VudCA9PSAxKQogICAgICAgICAgICAgICAgICAgIGZpcnN0X3R4ID0gY3Vy X3R4OwoKICAgICAgICAgICAgICAgIGN1cl90eC0+ZmV0X3B0ci0+ZmV0X2RhdGEgPSB2dG9waHlz KG10b2QobSwgY2FkZHJfdCkpOwoKICAgICAgICAgICAgICAgIC8qIHBhZCB0aGUgc2hvcnQgZnJh bWUgdG8gbWluaW11bSBmcmFtZSBsZW5ndGggKi8KICAgICAgICAgICAgICAgIC8qIHBzOiBQYWQg dGhvc2UgcGFja2V0cyB3aGljaCBvbmx5IG9jY3VweSAxIGZyYWdtZW50ICovCiAgICAgICAgICAg ICAgICBpZiAobS0+bV9sZW4gPCBGRVRfTUlOX0ZSQU1FTEVOICYmIAogICAgICAgICAgICAgICAg CWZyYWdfY291bnQgPT0gMSAmJiBtLT5tX25leHQgPT0gTlVMTCkgewogICAgICAgICAgICAgIAkJ CiAgICAgICAgICAgICAgICAgICAgY3VyX3R4LT5mZXRfcHRyLT5mZXRfY3RsID0gRkVUX01JTl9G UkFNRUxFTjsKICAgICAgICAgICAgICAgICAgICBtLT5tX3BrdGhkci5sZW4gKz0gRkVUX01JTl9G UkFNRUxFTiAtIG0tPm1fbGVuOwogICAgICAgICAgICAgICAgICAgIG0tPm1fbGVuID0gbS0+bV9w a3RoZHIubGVuOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGN1cl90eC0+ZmV0X3B0ci0+ZmV0X2N0 bCA9IG0tPm1fbGVuOwoKICAgICAgICAgICAgICAgIGlmIChmcmFnX2NvdW50ID09IDEpCiAgICAg ICAgICAgICAgICAgICAgY3VyX3R4LT5mZXRfcHRyLT5mZXRfY3RsIHw9IEZFVF9UWENUTF9GSU5U fEZFVF9UWENUTF9UTElOS3wgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZFVF9UWENUTF9GSVJTVEZSQUc7CiAgICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICAgICAgY3VyX3R4LT5mZXRfcHRyLT5mZXRfY3RsIHw9IEZFVF9U WENUTF9GSU5UfEZFVF9UWENUTF9UTElOSzsKCiAgICAgICAgICAgICAgICBjdXJfdHgtPmZldF9w dHItPmZldF9zdGF0dXMgPSAwOwogICAgICAgICAgICAgICAgY3VyX3R4LT5mZXRfbWJ1ZiA9IG07 CiAgICAgICAgICAgICAgICBjdXJfdHgtPmZldF9wdHItPmZldF9uZXh0ID0gCiAgICAgICAgICAg ICAgICAJdnRvcGh5cyhjdXJfdHgtPmZldF9uZXh0ZGVzYy0+ZmV0X3B0cik7CgogICAgICAgICAg ICAgICAgZnJhZ19jb3VudCsrOwoKI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDQwMDAwMCB8fCAo X19GcmVlQlNEX3ZlcnNpb24gPCA0MDAwMDAgJiYgTkJQRklMVEVSID4gMCkKICAgICAgICAgICAg ICAgIC8qCiAgICAgICAgICAgICAgICAqIElmIHRoZXJlJ3MgYSBCUEYgbGlzdGVuZXIsIGJvdW5j ZSBhIGNvcHkgb2YgdGhpcyBmcmFtZQogICAgICAgICAgICAgICAgKiB0byBoaW0uCiAgICAgICAg ICAgICAgICAqLwogICAgICAgICAgICAgICAgaWYgKGlmcC0+aWZfYnBmKQogICAgICAgICAgICAg ICAgICAgIGJwZl9tdGFwKGlmcCwgY3VyX3R4LT5mZXRfbWJ1Zik7CiNlbmRpZgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgbSA9IG0tPm1fbmV4dDsKICAgICAgICAgICAgfSAvKiBlbmQgZm9y ICovCiAgICAgICAgICAgIGN1cl90eC0+ZmV0X3B0ci0+ZmV0X2N0bCB8PSBGRVRfVFhDVExfTEFT VEZSQUc7CiAgICAgICAgICAgIEZFVF9UWE9XTihmaXJzdF90eCkgPSBGRVRfVFhTVEFUX09XTjsK ICAgICAgICB9IC8qIGVuZCBlbHNlICovCiAgICAgICAgRkVUX1NFVEJJVDE2KHNjLCBGRVRfQ09N TUFORCwgRkVUX0NNRF9URE1EMSk7CiAgICB9CiAgICAvKgogICAgICogSWYgdGhlcmUgYXJlIG5v IGZyYW1lcyBxdWV1ZWQsIGJhaWwuCiAgICAgKi8KICAgIGlmIChjdXJfdHggPT0gTlVMTCkgewog ICAgICAgIHNwbHgocyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHNjLT5mZXRfY2RhdGEu ZmV0X3R4X3RhaWwgPSBjdXJfdHg7CgogICAgaWYgKHNjLT5mZXRfY2RhdGEuZmV0X3R4X2hlYWQg PT0gTlVMTCkKICAgICAgICBzYy0+ZmV0X2NkYXRhLmZldF90eF9oZWFkID0gc3RhcnRfdHg7Cgog ICAgLyoKICAgICAqIFNldCBhIHRpbWVvdXQgaW4gY2FzZSB0aGUgY2hpcCBnb2VzIG91dCB0byBs dW5jaC4KICAgICAqLwogICAgaWZwLT5pZl90aW1lciA9IDMwOwogICAgc3BseChzKTsKICAgIHJl dHVybjsKfQoKCi8qIERvIGxhZ2FjeSBmb3JjZSBpZiBpbiBmb3JjZSBtb2RlKi8Kc3RhdGljIHZv aWQgY2hlY2tfbGVnYWN5X2ZvcmNlKHNjKQogICAgc3RydWN0IGZldF9zb2Z0YyAgICAqc2M7CnsK ICAgIHVuc2lnbmVkIGludCBGRVRfQkNSMV90ZW1wID0gMDsKCiAgICAvKiBJZiBNRURFTiBiaXQg aW4gQ0ZHQyBpcyBvbiwgdGhlbiBpdCdzIGZvcmNlZCBtb2RlLAogICAgICAgb3RoZXJ3aXNlLCBp dCB1c2UgYXV0b25lZ290aWF0aW9uLiBPbmx5IGZvciBWVDMwNjUgYW5kIFZUMzA0MyAqLwogICAg aWYoc2MtPmZldF9jaGlwX3JldmlkIDwgMHg4MCAmJiBDU1JfUkVBRF8xKHNjLCBGRVRfQ0ZHQykg JiAweDgwKXsKICAgICAgICAvKiBpZiBNRUQyIGJpdCBpbiBCQ1IwIGlzIG9uLCB0aGVuIGl0IHVz ZSBhdXRvbmVnb3RpYXRpb24qLwogICAgICAgIGlmIChDU1JfUkVBRF8xKHNjLCBGRVRfQkNSMCkg JiAweDgwKQogICAgICAgICAgICBzYy0+ZmV0X2F1dG9uZWcgPSAxOwogICAgICAgIGVsc2Ugewog ICAgICAgICAgICBzYy0+ZmV0X2F1dG9uZWcgPSAwOwoKICAgICAgICAgICAgRkVUX0JDUjFfdGVt cCA9IENTUl9SRUFEXzEoc2MsIEZFVF9CQ1IxKTsKICAgICAgICAgICAgRkVUX0JDUjFfdGVtcCA9 IEZFVF9CQ1IxX3RlbXAgJiAweEMwIDsKCiAgICAgICAgICAgIC8qIERpc2FibGUgYXV0b25pZ290 aWF0aW9uICovCiAgICAgICAgICAgIGZldF93cml0ZV9taWkoc2MsIDAsIGZldF9yZWFkX21paShz YywwKSAmIDB4RUZGRik7CgogICAgICAgICAgICAvKiBzZXQgbG9vcGJhY2sgaW4gTUlJIHRvIHVu LWxpbmsgaW4gMTAwTSBtb2RlLCAqLwogICAgICAgICAgICAvKiBpbiAxME0gbW9kZSBzZXQgdGhp cyBiaXQgY2Fubm90IG1ha2UgaXQgdW4tbGluayAqLwogICAgICAgICAgICAvKiBidXQgaXQgZG9l c24ndCBtYXR0ZXIgKi8KICAgICAgICAgICAgZmV0X3dyaXRlX21paShzYywgMCAsIGZldF9yZWFk X21paShzYywgMCkgfCAweDQwMDApOwoKICAgICAgICAgICAgaWYgKEZFVF9CQ1IxX3RlbXAgPT0g MHgwMCkgewogICAgICAgICAgICAgICAgcHJpbnRmKCJmZXQlZDogRm9yY2UgdG8gMTBNYnBzIEhh bGYgZHVwbGV4IG1vZGUuXG4iLCBzYy0+ZmV0X3VuaXQpOwogICAgICAgICAgICAgICAgLyogU2V0 IHNwZWVkIDEwTWJwcyAqLwogICAgICAgICAgICAgICAgZmV0X3dyaXRlX21paShzYywwICwgZmV0 X3JlYWRfbWlpKHNjLCAwKSAmIDB4REZGRik7CiAgICAgICAgICAgICAgICAvKiBTZXQgaGFsZiBk dXBsZXggKi8KICAgICAgICAgICAgICAgIGZldF93cml0ZV9taWkoc2MsMCAsIGZldF9yZWFkX21p aShzYywgMCkgJiAweEZFRkYpOwogICAgICAgICAgICAgICAgLyogU2V0IE1BQyBvcGVyYXRpbmcg aW4gSGFsZiBEdXBsZXggTW9kZSovCiAgICAgICAgICAgICAgICBDU1JfV1JJVEVfMihzYywgRkVU X0NPTU1BTkQsIENTUl9SRUFEXzIoc2MsIEZFVF9DT01NQU5EKSAmIDB4ZmJmZik7CiAgICAgICAg ICAgICAgICBzYy0+ZmV0X3NwZWVkPTEwOwogICAgICAgICAgICAgICAgc2MtPmZldF9mdWxsX2R1 cGxleCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoRkVUX0JDUjFfdGVt cCA9PSAweDQwKSB7CiAgICAgICAgICAgICAgICBwcmludGYoImZldCVkOiBGb3JjZSB0byAxMDBN YnBzIEhhbGYgZHVwbGV4IG1vZGUuXG4iLCBzYy0+ZmV0X3VuaXQpOwogICAgICAgICAgICAgICAg LyogU2V0IHNwZWVkIDEwME1icHMgKi8KICAgICAgICAgICAgICAgIGZldF93cml0ZV9taWkoc2Ms MCAsIGZldF9yZWFkX21paShzYywgMCkgfCAweDIwMDApOwogICAgICAgICAgICAgICAgLyogU2V0 IGhhbGYgZHVwbGV4ICovCiAgICAgICAgICAgICAgICBmZXRfd3JpdGVfbWlpKHNjLDAgLCBmZXRf cmVhZF9taWkoc2MsIDApICYgMHhGRUZGKTsKICAgICAgICAgICAgICAgIC8qIFNldCBNQUMgb3Bl cmF0aW5nIGluIEhhbGYgRHVwbGV4IE1vZGUqLwogICAgICAgICAgICAgICAgQ1NSX1dSSVRFXzIo c2MsIEZFVF9DT01NQU5ELCBDU1JfUkVBRF8yKHNjLCBGRVRfQ09NTUFORCkgJiAweGZiZmYpOwog ICAgICAgICAgICAgICAgc2MtPmZldF9zcGVlZD0xMDA7CiAgICAgICAgICAgICAgICBzYy0+ZmV0 X2Z1bGxfZHVwbGV4ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChGRVRf QkNSMV90ZW1wID09IDB4ODApIHsKICAgICAgICAgICAgICAgIHByaW50ZigiZmV0JWQ6IEZvcmNl IHRvIDEwTWJwcyBGdWxsIGR1cGxleCBtb2RlLlxuIiwgc2MtPmZldF91bml0KTsKICAgICAgICAg ICAgICAgIC8qIFNldCBzcGVlZCAxME1icHMgKi8KICAgICAgICAgICAgICAgIGZldF93cml0ZV9t aWkoc2MsMCAsIGZldF9yZWFkX21paShzYywgMCkgJiAweERGRkYpOwogICAgICAgICAgICAgICAg LyogU2V0IGZ1bGwgZHVwbGV4ICovCiAgICAgICAgICAgICAgICBmZXRfd3JpdGVfbWlpKHNjLDAg LCBmZXRfcmVhZF9taWkoc2MsIDApIHwgMHgwMTAwKTsKICAgICAgICAgICAgICAgIC8qIFNldCBN QUMgb3BlcmF0aW5nIGluIEZ1bGwgRHVwbGV4IE1vZGUqLwogICAgICAgICAgICAgICAgQ1NSX1dS SVRFXzIoc2MsIEZFVF9DT01NQU5ELCBDU1JfUkVBRF8yKHNjLCBGRVRfQ09NTUFORCkgfCAweDA0 MDApOwogICAgICAgICAgICAgICAgc2MtPmZldF9zcGVlZD0xMDsKICAgICAgICAgICAgICAgIHNj LT5mZXRfZnVsbF9kdXBsZXggPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYg KEZFVF9CQ1IxX3RlbXAgPT0gMHhDMCkgewogICAgICAgICAgICAgICAgcHJpbnRmKCJmZXQlZDog Rm9yY2UgdG8gMTAwTWJwcyBGdWxsIGR1cGxleCBtb2RlLlxuIiwgc2MtPmZldF91bml0KTsKICAg ICAgICAgICAgICAgIC8qIFNldCBzcGVlZCAxMDBNYnBzICovCiAgICAgICAgICAgICAgICBmZXRf d3JpdGVfbWlpKHNjLDAgLCBmZXRfcmVhZF9taWkoc2MsIDApIHwgMHgyMDAwKTsKICAgICAgICAg ICAgICAgIC8qIFNldCBmdWxsIGR1cGxleCAqLwogICAgICAgICAgICAgICAgZmV0X3dyaXRlX21p aShzYywwICwgZmV0X3JlYWRfbWlpKHNjLCAwKSB8IDB4MDEwMCk7CiAgICAgICAgICAgICAgICAv KiBTZXQgTUFDIG9wZXJhdGluZyBpbiBGdWxsIER1cGxleCBNb2RlKi8KICAgICAgICAgICAgICAg IENTUl9XUklURV8yKHNjLCBGRVRfQ09NTUFORCwgQ1NSX1JFQURfMihzYywgRkVUX0NPTU1BTkQp IHwgMHgwNDAwKTsKICAgICAgICAgICAgICAgIHNjLT5mZXRfc3BlZWQ9MTAwOwogICAgICAgICAg ICAgICAgc2MtPmZldF9mdWxsX2R1cGxleCA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg LyogZGVsYXkgdG8gYXZvaWQgbGluayBkb3duIGZyb20gZm9yY2UtMTBNIHRvIGZvcmNlLTEwME0g Ki8KICAgICAgICAgICAgREVMQVkoMzAwMDAwKTsKCiAgICAgICAgICAgIC8qIGNsZWFyIExQQksg Yml0IGluIEJNQ1IgcmVnaXN0ZXIgdG8gcmUtbGluayAqLwogICAgICAgICAgICBmZXRfd3JpdGVf bWlpKHNjLDAgLCBmZXRfcmVhZF9taWkoc2MsIDApICYgMHhCRkZGKTsKICAgICAgICB9CiAgICB9 CiAgICBlbHNlIHsKICAgICAgICBzYy0+ZmV0X2F1dG9uZWcgPSAwOwoKICAgICAgICAvKiBEaXNh YmxlIGF1dG9uaWdvdGlhdGlvbiAqLwogICAgICAgIGZldF93cml0ZV9taWkoc2MsMCAsIGZldF9y ZWFkX21paShzYywgMCkgJiAweEVGRkYpOwoKICAgICAgICAvKiBzZXQgbG9vcGJhY2sgaW4gTUlJ IHRvIHVuLWxpbmsgaW4gMTAwTSBtb2RlLCAqLwogICAgICAgIC8qIGluIDEwTSBtb2RlIHNldCB0 aGlzIGJpdCBjYW5ub3QgbWFrZSBpdCB1bi1saW5rICovCiAgICAgICAgLyogYnV0IGl0IGRvZXNu J3QgbWF0dGVyICovCiAgICAgICAgZmV0X3dyaXRlX21paShzYywwICwgZmV0X3JlYWRfbWlpKHNj LCAwKSB8IDB4NDAwMCk7CgogICAgICAgIGlmIChzYy0+ZmV0X3NwZWVkID09IDEwMCAmJiBzYy0+ ZmV0X2Z1bGxfZHVwbGV4ID09IDApIHsKICAgICAgICAgICAgcHJpbnRmKCJmZXQlZDogRm9yY2Ug dG8gMTAwTWJwcyBIYWxmIGR1cGxleCBtb2RlLlxuIiwgc2MtPmZldF91bml0KTsKICAgICAgICAg ICAgLyogU2V0IHNwZWVkIDEwME1icHMgKi8KICAgICAgICAgICAgZmV0X3dyaXRlX21paShzYyww ICwgZmV0X3JlYWRfbWlpKHNjLCAwKSB8IDB4MjAwMCk7CiAgICAgICAgICAgIC8qIFNldCBoYWxm IGR1cGxleCAqLwogICAgICAgICAgICBmZXRfd3JpdGVfbWlpKHNjLDAgLCBmZXRfcmVhZF9taWko c2MsIDApICYgMHhGRUZGKTsKICAgICAgICAgICAgLyogU2V0IE1BQyBvcGVyYXRpbmcgaW4gSGFs ZiBEdXBsZXggTW9kZSovCiAgICAgICAgICAgIENTUl9XUklURV8yKHNjLCBGRVRfQ09NTUFORCwg Q1NSX1JFQURfMihzYywgRkVUX0NPTU1BTkQpICYgMHhmYmZmKTsKICAgICAgICAgICAgc2MtPmZl dF9zcGVlZD0xMDA7CiAgICAgICAgICAgIHNjLT5mZXRfZnVsbF9kdXBsZXggPSAwOwogICAgICAg IH0KICAgICAgICBlbHNlIGlmIChzYy0+ZmV0X3NwZWVkID09IDEwMCAmJiBzYy0+ZmV0X2Z1bGxf ZHVwbGV4ID09IDEpIHsKICAgICAgICAgICAgcHJpbnRmKCJmZXQlZDogRm9yY2UgdG8gMTAwTWJw cyBGdWxsIGR1cGxleCBtb2RlLlxuIiwgc2MtPmZldF91bml0KTsKICAgICAgICAgICAgLyogU2V0 IHNwZWVkIDEwME1icHMgKi8KICAgICAgICAgICAgZmV0X3dyaXRlX21paShzYywwICwgZmV0X3Jl YWRfbWlpKHNjLCAwKSB8IDB4MjAwMCk7CiAgICAgICAgICAgIC8qIFNldCBmdWxsIGR1cGxleCAq LwogICAgICAgICAgICBmZXRfd3JpdGVfbWlpKHNjLDAgLCBmZXRfcmVhZF9taWkoc2MsIDApIHwg MHgwMTAwKTsKICAgICAgICAgICAgLyogU2V0IE1BQyBvcGVyYXRpbmcgaW4gRnVsbCBEdXBsZXgg TW9kZSovCiAgICAgICAgICAgIENTUl9XUklURV8yKHNjLCBGRVRfQ09NTUFORCwgQ1NSX1JFQURf MihzYywgRkVUX0NPTU1BTkQpIHwgMHgwNDAwKTsKICAgICAgICAgICAgc2MtPmZldF9zcGVlZD0x MDA7CiAgICAgICAgICAgIHNjLT5mZXRfZnVsbF9kdXBsZXggPSAxOwogICAgICAgIH0KICAgICAg ICBlbHNlIGlmIChzYy0+ZmV0X3NwZWVkID09IDEwICYmIHNjLT5mZXRfZnVsbF9kdXBsZXggPT0g MCkgewogICAgICAgICAgICBwcmludGYoImZldCVkOiBGb3JjZSB0byAxME1icHMgSGFsZiBkdXBs ZXggbW9kZS5cbiIsIHNjLT5mZXRfdW5pdCk7CiAgICAgICAgICAgIC8qIFNldCBzcGVlZCAxME1i cHMgKi8KICAgICAgICAgICAgZmV0X3dyaXRlX21paShzYywwICwgZmV0X3JlYWRfbWlpKHNjLCAw KSAmIDB4REZGRik7CiAgICAgICAgICAgIC8qIFNldCBoYWxmIGR1cGxleCAqLwogICAgICAgICAg ICBmZXRfd3JpdGVfbWlpKHNjLDAgLCBmZXRfcmVhZF9taWkoc2MsIDApICYgMHhGRUZGKTsKICAg ICAgICAgICAgLyogU2V0IE1BQyBvcGVyYXRpbmcgaW4gSGFsZiBEdXBsZXggTW9kZSovCiAgICAg ICAgICAgIENTUl9XUklURV8yKHNjLCBGRVRfQ09NTUFORCwgQ1NSX1JFQURfMihzYywgRkVUX0NP TU1BTkQpICYgMHhmYmZmKTsKICAgICAgICAgICAgc2MtPmZldF9zcGVlZD0xMDsKICAgICAgICAg ICAgc2MtPmZldF9mdWxsX2R1cGxleCA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHNj LT5mZXRfc3BlZWQgPT0gMTAgJiYgc2MtPmZldF9mdWxsX2R1cGxleCA9PSAxKSB7CiAgICAgICAg ICAgIHByaW50ZigiZmV0JWQ6IEZvcmNlIHRvIDEwTWJwcyBGdWxsIGR1cGxleCBtb2RlLlxuIiwg c2MtPmZldF91bml0KTsKICAgICAgICAgICAgLyogU2V0IHNwZWVkIDEwTWJwcyAqLwogICAgICAg ICAgICBmZXRfd3JpdGVfbWlpKHNjLDAgLCBmZXRfcmVhZF9taWkoc2MsIDApICYgMHhERkZGKTsK ICAgICAgICAgICAgLyogU2V0IGZ1bGwgZHVwbGV4ICovCiAgICAgICAgICAgIGZldF93cml0ZV9t aWkoc2MsMCAsIGZldF9yZWFkX21paShzYywgMCkgfCAweDAxMDApOwogICAgICAgICAgICAvKiBT ZXQgTUFDIG9wZXJhdGluZyBpbiBGdWxsIER1cGxleCBNb2RlKi8KICAgICAgICAgICAgQ1NSX1dS SVRFXzIoc2MsIEZFVF9DT01NQU5ELCBDU1JfUkVBRF8yKHNjLCBGRVRfQ09NTUFORCkgfCAweDA0 MDApOwogICAgICAgICAgICBzYy0+ZmV0X3NwZWVkPTEwOwogICAgICAgICAgICBzYy0+ZmV0X2Z1 bGxfZHVwbGV4ID0gMTsKICAgICAgICB9CiAgICAgICAgLyogZGVsYXkgdG8gYXZvaWQgbGluayBk b3duIGZyb20gZm9yY2UtMTBNIHRvIGZvcmNlLTEwME0gKi8KICAgICAgICBERUxBWSgzMDAwMDAp OwoKICAgICAgICAvKiBjbGVhciBMUEJLIGJpdCBpbiBCTUNSIHJlZ2lzdGVyIHRvIHJlLWxpbmsg Ki8KICAgICAgICBmZXRfd3JpdGVfbWlpKHNjLDAgLCBmZXRfcmVhZF9taWkoc2MsIDApICYgMHhC RkZGKTsKICAgIH0KfQoKLyogRG8gTi1XQVkgZm9yY2UgaWYgaW4gZm9yY2UgbW9kZSAqLwpzdGF0 aWMgaW50IGNoZWNrX25fd2F5X2ZvcmNlIChzYywgY2hhbmdlX2ZsYWcpCiAgICBzdHJ1Y3QgZmV0 X3NvZnRjICAgICpzYzsKICAgIGludCBjaGFuZ2VfZmxhZzsKewogICAgdW5zaWduZWQgaW50IE1J SV9CTUNSX3RlbXAgPSAwLCBNSUlfQU5BUl90ZW1wPTA7CgogICAgLyogUmVhZCBvcmlnaW5hbCBC TUNSIGFuZCBBTkFSIHZhbHVlIGZyb20gTUlJICovCiAgICBNSUlfQk1DUl90ZW1wID0gZmV0X3Jl YWRfbWlpKHNjLCAwKSA7CiAgICBNSUlfQU5BUl90ZW1wID0gZmV0X3JlYWRfbWlpKHNjLCA0KSAm IDB4MDFFMDsKCiAgICBzYy0+ZmV0X2F1dG9uZWcgPSAwOwoKICAgIC8qIEZvcmNlIHRvIDEwME1i cHMgSGFsZiBkdXBsZXggKi8KICAgICBpZiAoc2MtPmZldF9zcGVlZCA9PSAxMDAgJiYgc2MtPmZl dF9mdWxsX2R1cGxleCA9PSAwKSB7CiAgICAgICAgcHJpbnRmKCJmZXQlZDogRm9yY2UgdG8gMTAw TWJwcyBIYWxmIGR1cGxleCBtb2RlLlxuIiwgc2MtPmZldF91bml0KTsKICAgICAgICBzYy0+ZmV0 X05XQVlfRm9yY2UgPSAxOwogICAgICAgIC8qIENvbXBhcmUgdXNlciBkZWZpbmVkIG1vZGUgd2l0 aCBvcmlnaW5hbCBBTkFSIHZhbHVlKi8KICAgICAgICAvKiBJZiB0aGUgc2V0dGluZyBpcyB0aGUg c2FtZSwgZG8gbm90aGluZywgb3Igd2UgbXN1dCB3cml0ZSB0aGUgbmV3IHNldHRpbmcgdG8gQU5B UiAqLwogICAgICAgIGlmIChNSUlfQU5BUl90ZW1wICE9IDB4MDA4MCkgewogICAgICAgICAgICBj aGFuZ2VfZmxhZyB8PSAxOwogICAgICAgICAgICAvKldyaXRlIHRoZSBuZXcgc2V0dGluZyB0byBB TkFSICovCiAgICAgICAgICAgIGZldF93cml0ZV9taWkoc2MsIDQsIChmZXRfcmVhZF9taWkoc2Ms IDQpICYgMHhGRTFGKSB8IDB4MDA4MCk7CiAgICAgICAgfQoKICAgICAgICAvKiBTZXQgc3BlZWQg MTAwTWJwcyAqLwogICAgICAgIGZldF93cml0ZV9taWkoc2MsIDAgLCBmZXRfcmVhZF9taWkoc2Ms IDApIHwgMHgyMDAwKTsKICAgICAgICAvKiBTZXQgaGFsZiBkdXBsZXggKi8KICAgICAgICBmZXRf d3JpdGVfbWlpKHNjLCAwICwgZmV0X3JlYWRfbWlpKHNjLCAwKSAmIDB4RkVGRik7CgogICAgICAg IC8qIElmIEFVVE8gYml0IGlzIG9uIGFuZCB0aGUgc2V0dGluZyBpcyBjaGFuZ2VkLCBpc3N1ZSBS RUFVVE8gaW4gQk1DUiAqLwogICAgICAgIGlmICgoTUlJX0JNQ1JfdGVtcCAmIDB4MTAwMCkgJiYg KGNoYW5nZV9mbGFnID09IDEpKQogICAgICAgICAgICByZXN0YXJ0X2F1dG9uZWdvdGlhdGlvbihz Yyk7CiAgICAgICAgZWxzZSBpZiAoIShNSUlfQk1DUl90ZW1wICYgMHgxMDAwKSkKICAgICAgICAg ICAgZW5hYmxlX2F1dG9uZWdvdGlhdGlvbihzYyk7CgogICAgICAgIC8qIFNldCBNQUMgb3BlcmF0 aW5nIGluIEhhbGYgRHVwbGV4IE1vZGUqLwogICAgICAgIENTUl9XUklURV8yKHNjLCBGRVRfQ09N TUFORCwgQ1NSX1JFQURfMihzYywgRkVUX0NPTU1BTkQpICYgMHhmYmZmKTsKICAgIH0KICAgIC8q IEZvcmNlIHRvIDEwME1icHMgRnVsbCBkdXBsZXggbW9kZSAqLwogICAgZWxzZSBpZiAoc2MtPmZl dF9zcGVlZCA9PSAxMDAgJiYgc2MtPmZldF9mdWxsX2R1cGxleCA9PSAxKSB7CiAgICAgICAgcHJp bnRmKCJmZXQlZDogRm9yY2UgdG8gMTAwTWJwcyBGdWxsIGR1cGxleCBtb2RlLlxuIiwgc2MtPmZl dF91bml0KTsKICAgICAgICBzYy0+ZmV0X05XQVlfRm9yY2UgPSAxOwogICAgICAgIC8qIENvbXBh cmUgdXNlciBkZWZpbmVkIG1vZGUgd2l0aCBvcmlnaW5hbCBBTkFSIHZhbHVlKi8KICAgICAgICAv KiBJZiB0aGUgc2V0dGluZyBpcyB0aGUgc2FtZSwgZG8gbm90aGluZywgb3Igd2UgbXVzdCB3cml0 ZSB0aGUgbmV3IHNldHRpbmcgdG8gQU5BUiAqLwogICAgICAgIGlmIChNSUlfQU5BUl90ZW1wICE9 IDB4MDEwMCkgewogICAgICAgICAgICBjaGFuZ2VfZmxhZyB8PSAxOwogICAgICAgICAgICAvKldy aXRlIHRoZSBuZXcgc2V0dGluZyB0byBBTkFSICovCiAgICAgICAgICAgIGZldF93cml0ZV9taWko c2MsNCwgKGZldF9yZWFkX21paShzYywgNCkgJiAweEZFMUYpIHwgMHgwMTAwKTsKICAgICAgICB9 CgogICAgICAgIC8qIFNldCBzcGVlZCAxMDBNYnBzICovCiAgICAgICAgZmV0X3dyaXRlX21paShz YywwICwgZmV0X3JlYWRfbWlpKHNjLCAwKSB8IDB4MjAwMCk7CiAgICAgICAgLyogU2V0IGZ1bGwg ZHVwbGV4ICovCiAgICAgICAgZmV0X3dyaXRlX21paShzYywwICwgZmV0X3JlYWRfbWlpKHNjLCAw KSB8IDB4MDEwMCk7CgogICAgICAgIC8qIElmIEFVVE8gYml0IGlzIG9uIGFuZCB0aGUgc2V0dGlu ZyBpcyBjaGFuZ2VkLCBpc3N1ZSBSRUFVVE8gaW4gQk1DUiAqLwogICAgICAgIGlmICgoTUlJX0JN Q1JfdGVtcCAmIDB4MTAwMCkgJiYgKGNoYW5nZV9mbGFnID09IDEpKQogICAgICAgICAgICByZXN0 YXJ0X2F1dG9uZWdvdGlhdGlvbihzYyk7CiAgICAgICAgZWxzZSBpZiAoIShNSUlfQk1DUl90ZW1w ICYgMHgxMDAwKSkKICAgICAgICAgICAgZW5hYmxlX2F1dG9uZWdvdGlhdGlvbihzYyk7CgogICAg ICAgIC8qIFNldCBNQUMgb3BlcmF0aW5nIGluIEZ1bGwgRHVwbGV4IE1vZGUqLwogICAgICAgIENT Ul9XUklURV8yKHNjLCBGRVRfQ09NTUFORCwgQ1NSX1JFQURfMihzYywgRkVUX0NPTU1BTkQpIHwg MHgwNDAwKTsKICAgIH0KICAgIC8qIEZvcmNlIHRvIDEwTWJwcyBIYWxmIGR1cGxleCBtb2RlICov CiAgICBlbHNlIGlmIChzYy0+ZmV0X3NwZWVkID09IDEwICYmIHNjLT5mZXRfZnVsbF9kdXBsZXgg PT0gMCkgewogICAgICAgIHByaW50ZigiZmV0JWQ6IEZvcmNlIHRvIDEwTWJwcyBIYWxmIGR1cGxl eCBtb2RlLlxuIiwgc2MtPmZldF91bml0KTsKICAgICAgICBzYy0+ZmV0X05XQVlfRm9yY2UgPSAx OwogICAgICAgIC8qIENvbXBhcmUgdXNlciBkZWZpbmVkIG1vZGUgd2l0aCBvcmlnaW5hbCBBTkFS IHZhbHVlKi8KICAgICAgICAvKiBJZiB0aGUgc2V0dGluZyBpcyB0aGUgc2FtZSwgZG8gbm90aGlu Zywgb3Igd2UgbXN1dCB3cml0ZSB0aGUgbmV3IHNldHRpbmcgdG8gQU5BUiAqLwogICAgICAgIGlm IChNSUlfQU5BUl90ZW1wICE9IDB4MDAyMCkgewogICAgICAgICAgICBjaGFuZ2VfZmxhZyB8PSAx OwogICAgICAgICAgICAvKldyaXRlIHRoZSBuZXcgc2V0dGluZyB0byBBTkFSICovCiAgICAgICAg ICAgIGZldF93cml0ZV9taWkoc2MsNCwgKGZldF9yZWFkX21paShzYywgNCkgJiAweEZFMUYpIHwg MHgwMDIwKTsKICAgICAgICB9CiAgICAgICAgLyogU2V0IHNwZWVkIDEwTWJwcyAqLwogICAgICAg IGZldF93cml0ZV9taWkoc2MsMCAsIGZldF9yZWFkX21paShzYywgMCkgJiAweERGRkYpOwogICAg ICAgIC8qIFNldCBoYWxmIGR1cGxleCAqLwogICAgICAgIGZldF93cml0ZV9taWkoc2MsMCAsIGZl dF9yZWFkX21paShzYywgMCkgJiAweEZFRkYpOwoKICAgICAgICAvKiBJZiBBVVRPIGJpdCBpcyBv biBhbmQgdGhlIHNldHRpbmcgaXMgY2hhbmdlZCwgaXNzdWUgUkVBVVRPIGluIEJNQ1IgKi8KICAg ICAgICBpZiAoKE1JSV9CTUNSX3RlbXAgJiAweDEwMDApICYmIChjaGFuZ2VfZmxhZyA9PSAxKSkK ICAgICAgICAgICAgcmVzdGFydF9hdXRvbmVnb3RpYXRpb24oc2MpOwogICAgICAgIGVsc2UgaWYg KCEoTUlJX0JNQ1JfdGVtcCAmIDB4MTAwMCkpCiAgICAgICAgICAgIGVuYWJsZV9hdXRvbmVnb3Rp YXRpb24oc2MpOwoKICAgICAgICAvKiBTZXQgTUFDIG9wZXJhdGluZyBpbiBIYWxmIER1cGxleCBN b2RlKi8KICAgICAgICBDU1JfV1JJVEVfMihzYywgRkVUX0NPTU1BTkQsIENTUl9SRUFEXzIoc2Ms IEZFVF9DT01NQU5EKSAmIDB4ZmJmZik7CiAgICB9CiAgICAvKiBGb3JjZSB0byAxME1icHMgRnVs bCBkdXBsZXggbW9kZSAqLwogICAgZWxzZSBpZiAoc2MtPmZldF9zcGVlZCA9PSAxMCAmJiBzYy0+ ZmV0X2Z1bGxfZHVwbGV4ID09IDEpIHsKICAgICAgICBwcmludGYoImZldCVkOiBGb3JjZSB0byAx ME1icHMgRnVsbCBkdXBsZXggbW9kZS5cbiIsIHNjLT5mZXRfdW5pdCk7CiAgICAgICAgc2MtPmZl dF9OV0FZX0ZvcmNlID0gMTsKICAgICAgICAvKiBDb21wYXJlIHVzZXIgZGVmaW5lZCBtb2RlIHdp dGggb3JpZ2luYWwgQU5BUiB2YWx1ZSovCiAgICAgICAgLyogSWYgdGhlIHNldHRpbmcgaXMgdGhl IHNhbWUsIGRvIG5vdGhpbmcsIG9yIHdlIG1zdXQgd3JpdGUgdGhlIG5ldyBzZXR0aW5nIHRvIEFO QVIgKi8KICAgICAgICBpZiAoTUlJX0FOQVJfdGVtcCAhPSAweDAwNDApIHsKICAgICAgICAgICAg Y2hhbmdlX2ZsYWcgfD0gMTsKICAgICAgICAgICAgLypXcml0ZSB0aGUgbmV3IHNldHRpbmcgdG8g QU5BUiAqLwogICAgICAgICAgICBmZXRfd3JpdGVfbWlpKHNjLDQsIChmZXRfcmVhZF9taWkoc2Ms IDQpICYgMHhGRTFGKSB8IDB4MDA0MCk7CiAgICAgICAgfQoKICAgICAgICAvKiBTZXQgc3BlZWQg MTBNYnBzICovCiAgICAgICAgZmV0X3dyaXRlX21paShzYywwICwgZmV0X3JlYWRfbWlpKHNjLCAw KSAmIDB4REZGRik7CiAgICAgICAgLyogU2V0IGZ1bGwgZHVwbGV4ICovCiAgICAgICAgZmV0X3dy aXRlX21paShzYywwICwgZmV0X3JlYWRfbWlpKHNjLCAwKSB8IDB4MDEwMCk7CgogICAgICAgIC8q IElmIEFVVE8gYml0IGlzIG9uIGFuZCB0aGUgc2V0dGluZyBpcyBjaGFuZ2VkLCBpc3N1ZSBSRUFV VE8gaW4gQk1DUiAqLwogICAgICAgIGlmICgoTUlJX0JNQ1JfdGVtcCAmIDB4MTAwMCkgJiYgKGNo YW5nZV9mbGFnID09IDEpKQogICAgICAgICAgICByZXN0YXJ0X2F1dG9uZWdvdGlhdGlvbihzYyk7 CiAgICAgICAgZWxzZSBpZiAoIShNSUlfQk1DUl90ZW1wICYgMHgxMDAwKSkKICAgICAgICAgICAg ZW5hYmxlX2F1dG9uZWdvdGlhdGlvbihzYyk7CgogICAgICAgIC8qIFNldCBNQUMgb3BlcmF0aW5n IGluIEZ1bGwgRHVwbGV4IE1vZGUqLwogICAgICAgIENTUl9XUklURV8yKHNjLCBGRVRfQ09NTUFO RCwgQ1NSX1JFQURfMihzYywgRkVUX0NPTU1BTkQpIHwgMHgwNDAwKTsKICAgIH0KICAgIGVsc2Ug ewogICAgICAgIHNjLT5mZXRfYXV0b25lZyA9IDE7CiAgICAgICAgc2MtPmZldF9OV0FZX0ZvcmNl ID0gMDsKICAgIH0KICAgIHJldHVybiBjaGFuZ2VfZmxhZzsKfQoKc3RhdGljIHZvaWQgc2V0X21l ZGlhX2R1cGxleF9tb2RlIChzYykKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgKnNjOwp7CiAgICB1 bnNpZ25lZCBpbnQgICAgY2hhbmdlX2ZsYWcgPSAwOwoKICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2 aWQgPj0gUkVWX0lEX1ZUMzEwNiB8fCAoc2MtPmZldF9jaGlwX3JldmlkID49IFJFVl9JRF9WVDMw NjVfQSAmJiBzYy0+ZmV0X2NoaXBfcmV2aWQgPCBSRVZfSURfVlQzMTA2ICYmICEoQ1NSX1JFQURf MShzYyxGRVRfQ0ZHQykgJiAweDgwKSkpCiAgICAgICAgY2hhbmdlX2ZsYWc9Y2hlY2tfbl93YXlf Zm9yY2Uoc2MsIGNoYW5nZV9mbGFnKTsKICAgIGVsc2UKICAgICAgICBjaGVja19sZWdhY3lfZm9y Y2Uoc2MpOwoKICAgIC8qIEZvciBOLVdBWSBmb3JjZSBpbiBWVDMxMDYgb3IgVlQzMDcyIHBoeSAq LwogICAgLyogTWFrZSBzdXJlIHRoZSBQSFkgaXMgVlQzMTA2J3MgUEhZIG9yIFZUMzA3MiovCiAg ICAvKiBTbyB3ZSBjaGVjayBQSFkgUkVHICdoMyAoUEhZIElkZW50aWZpZXIxKSBiaXRbOTo0XSBp cyA2J2IxMTAxMDAqLwogICAgaWYoKGZldF9yZWFkX21paShzYywgUEhZX1BIWUlEMikgJiAweDAz ZjApID09IDB4MDM0MCB8fAogICAgICAoKGZldF9yZWFkX21paShzYywgUEhZX1BIWUlEMikgJiAw eDAzZjApID09IDB4MDMyMCAmJgogICAgICAgKGZldF9yZWFkX21paShzYywgUEhZX1BIWUlEMikg JiAweDAwMGYpID49IDUpKSB7CgogICAgICAgIC8qIGlmIGZvcmNlZCBtb2RlLCB0dXJuIG9uIGJp dCAwIGVsc2UgdHVybiBvZmYgYml0IDAgaW4gTUlJIDB4MTAgcmVnaXN0ZXIgKi8KICAgICAgICBp ZihzYy0+ZmV0X05XQVlfRm9yY2UgPT0gMSAmJiAoc2MtPmZldF9jaGlwX3JldmlkID49IFJFVl9J RF9WVDMxMDYgfHwgKHNjLT5mZXRfY2hpcF9yZXZpZCA+PSBSRVZfSURfVlQzMDY1X0EgJiYgc2Mt PmZldF9jaGlwX3JldmlkIDwgUkVWX0lEX1ZUMzEwNiAmJiAhKENTUl9SRUFEXzEoc2MsIEZFVF9D RkdDKSAmIDB4ODApKSkpCiAgICAgICAgICAgIC8qIHdyaXRlIFBIWSBSRUcgJ2gxMChQSFkgTU9E RSBDT05GSUcpIGJpdFswXSBhcyAxJ2IxICovCiAgICAgICAgICAgIGZldF93cml0ZV9taWkoc2Ms IDB4MTAsIGZldF9yZWFkX21paShzYywgMHgxMCkgfCAweDAwMDEpOwogICAgICAgIGVsc2UKICAg ICAgICAgICAgLyogd3JpdGUgUEhZIFJFRyAnaDEwKFBIWSBNT0RFIENPTkZJRykgYml0WzBdIGFz IDEnYjAgKi8KICAgICAgICAgICAgZmV0X3dyaXRlX21paShzYywgMHgxMCwgZmV0X3JlYWRfbWlp KHNjLCAweDEwKSAmIDB4ZmZmZSk7CiAgICB9CgogICAgaWYgKHNjLT5mZXRfYXV0b25lZyA9PSAx KSB7CiAgICAgICAgdW5zaWduZWQgaW50IFBIWV9CTUNSX3RlbXAgPSAwOwogICAgICAgIHVuc2ln bmVkIGludCBQSFlfQU5BUl90ZW1wID0gMDsKICAgICAgICBpbnQgcmVzdGFydF9hdXRvID0gMDsK ICAgICAgICBpbnQgaTsKCiAgICAgICAgUEhZX0JNQ1JfdGVtcCA9IGZldF9yZWFkX21paShzYywg UEhZX0JNQ1IpOwogICAgICAgIFBIWV9BTkFSX3RlbXAgPSBmZXRfcmVhZF9taWkoc2MsIFBIWV9B TkFSKTsKCiAgICAgICAgLyogU2V0IEF1dG9uZWdvdGlhdGlvbiBlbmFibGUgKEFORUdfRU4gYml0 IGluIENvbnRyb2wgcmVnaXN0ZXIgKSAqLwogICAgICAgIGZldF93cml0ZV9taWkoc2MsIFBIWV9C TUNSLCBmZXRfcmVhZF9taWkoc2MsIFBIWV9CTUNSKSB8IDB4MTAwMCk7CgogICAgICAgIC8qIGNo ZWNrIHRoZSBBTkFSIHZhbHVlIGlzIGNvcnJlY3QgKi8KICAgICAgICAvKiBpZiBub3QsIHdyaXRl IGJhY2sgdGhlIGNvcnJlY3QgdmFsdWUsIGFuZCByZXRyaWdnZXIgQXV0b25lZ290aWF0aW9uICov CiAgICAgICAgaWYgKChQSFlfQU5BUl90ZW1wICYgMHgwMUUwKSAhPSAweDAxRTApIHsKICAgICAg ICAgICAgZmV0X3dyaXRlX21paShzYywgUEhZX0FOQVIsIFBIWV9BTkFSX3RlbXAgfCAweDAxRTAp OyAvKiBTZXQgMTBfSERYIGJpdCovCiAgICAgICAgICAgIHJlc3RhcnRfYXV0byA9IDE7CiAgICAg ICAgfQoKICAgICAgICAvKiBmb3IgVlQzMDQzKERBVklDT00pIG9ubHksIGZpeCBEYXZpQ29tIFBI WSdzIGJ1ZyAqLwogICAgICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2aWQgPCAweDIwICkgewogICAg ICAgICAgICB1bnNpZ25lZCBpbnQgcGh5X0lEOwoKICAgICAgICAgICAgcGh5X0lEID0gKGZldF9y ZWFkX21paShzYywgUEhZX1BIWUlEMSkgPDwgMTYpIHwgKGZldF9yZWFkX21paShzYywgUEhZX1BI WUlEMikpOwogICAgICAgICAgICBpZiAocGh5X0lEID49IENJRF9EQVZJQ09NICYmIHBoeV9JRCA8 IENJRF9EQVZJQ09NX0IpCiAgICAgICAgICAgICAgICByZXN0YXJ0X2F1dG8gPSAxOwogICAgICAg IH0KICAgICAgICBpZiAoY2hhbmdlX2ZsYWcgPT0gMSkKICAgICAgICAgICAgcmVzdGFydF9hdXRv ID0gMTsKCiAgICAgICAgaWYgKHJlc3RhcnRfYXV0byA9PSAxKQogICAgICAgICAgICByZXN0YXJ0 X2F1dG9uZWdvdGlhdGlvbihzYyk7CiAgICAgICAgLyogRm9yY2VkIG1vZGUgdG8gYXV0byBtb2Rl LCBpdCB3aWxsIGNhdXNlIGF1dG9uZWdvdGlhdGlvbiByZXN0YXJ0ICovCiAgICAgICAgLyogV2Fp dCB1bnRpbCBOLVdBWSBmaW5pc2hlZCovCiAgICAgICAgZWxzZSBpZiAoISggUEhZX0JNQ1JfdGVt cCAmIDB4MTAwMCkgJiYgIShmZXRfcmVhZF9taWkoc2MsIFBIWV9CTVNSKSAmIDB4MDAyMCkpIHsK ICAgICAgICAgICAgREVMQVkoMjUwMDAwMCk7CiAgICAgICAgICAgIGZvciAoaT0wOyBpPDB4MWZm OyBpKyspCiAgICAgICAgICAgICAgICBpZiAoZmV0X3JlYWRfbWlpKHNjLCBQSFlfQk1TUikgJiAw eDAwMjApCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9IC8qIHNl dF9tZWRpYV9kdXBsZXhfbW9kZSAqLwoKCi8qCiAqIEZ1bmN0aW9uOiBzZXRfZmxvd19jb250cm9s CiAqCiAqIFB1cnBvc2U6CiAqICBTZXQgZmxvdyBjb250cm9sIHJlbGF0ZWQgYml0cy4KICoKICov CnN0YXRpYyB2b2lkIHNldF9mbG93X2NvbnRyb2woc2MpCiAgICBzdHJ1Y3QgZmV0X3NvZnRjICAg ICpzYzsKewoKICAgIHVuc2lnbmVkIGludCB0ZW1wX0Zsb3dDUjE9MDsKCiAgICAvKiBTZXQge1hI SVRIMSwgWEhJVEgwLCBYTFRIMSwgWExUSDB9IGluIEZsb3dDUjEgdG8gezEsIDAsIDEsIDF9IGRl cGVuZCBvbiBSRD02NCovCiAgICAvKiBUdXJuIG9uIFhOT0VOIGluIEZsb3dDUjEqLwogICAgdGVt cF9GbG93Q1IxID0gKENTUl9SRUFEXzEoc2MsIEZFVF9GbG93Q1IxKSB8IDB4QjgpOwogICAgQ1NS X1dSSVRFXzEoc2MsIEZFVF9GbG93Q1IxLCB0ZW1wX0Zsb3dDUjEpOwoKICAgIC8qIFNldCBUeFBh dXNlVGltZXIgdG8gMHhGRkZGICovCiAgICBDU1JfV1JJVEVfMihzYywgRkVUX1R4UGF1c2VUaW1l ciwgMHhGRkZGKTsKCiAgICAvKiBJbml0aWFsaXplIFJCUkRVIHRvIFJ4IGJ1ZmZlciBjb3VudC4q LwogICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9GbG93Q1IwLCA2NCk7Cgp9CgovKiBTZXQgZmxvdyBj b250cm9sIGNhcGFiaWxpdHkgYWNjcm9kaW5nIHRvIEFOQVIgYW5kIEFOTFBBUiByZWdpc3RlciBp biBNSUkgKi8KLyogVGhlIGhhbGYgZHVwbGV4IGZsb3cgY29udHJvbCBjYXBhYmlsaXR5IGlzIHR1 cm4gb2ZmIG5vdywgYmVjYXVzZSBpdCdzIG5vdCBpbiB0aGUgc3BlYy4qLwovKiBGb2xsb3cgdGhl IHRhYmxlIDI4Qi0zIGluIHRoZSBJRUVFIFN0YW5kYXJkIDgwMi4zLCAyMDAwIEVkaXRpb24gdG8g c2V0ICovCi8qIGZ1bGwgZHVwbGV4IGZsb3cgY29udHJvbCBjYXBhYmlsaXR5Ki8Kc3RhdGljIHZv aWQgZmxvd19jb250cm9sX2FiaWxpdHkoc2MpCiAgICBzdHJ1Y3QgZmV0X3NvZnRjICAgICpzYzsK ewogICAgdW5zaWduZWQgaW50IFBIWUFOQVJfdGVtcCwgUEhZQU5MUEFSX3RlbXAsIE1JSVNSX3Rl bXAsIEZsb3dDUjFfdGVtcCwgTWljcjBfdGVtcDsKCiAgICBpZiAoc2MtPmZldF9jaGlwX3Jldmlk ID49IFJFVl9JRF9WVDMwNjVfQSAmJiBzYy0+ZmV0X2NoaXBfcmV2aWQgPCBSRVZfSURfVlQzMTA2 KSB7CiAgICAgICAvKiBSZWFkIHRoZSBvbGQgdmFsdWUgb2YgRmxvd0NSMSByZWdpc3RlciAqLwog ICAgICAgIE1pY3IwX3RlbXAgPSBDU1JfUkVBRF8xKHNjLCBGRVRfTWljcjApOwoKICAgICAgICAv KmNoZWNrIHdoZXRoZXIgTklDIGlzIG9wZXJhdGVkIGluIGZ1bGwgZHVwbGV4IG1vZGUgKi8KICAg ICAgICAvKiBpbiBmdWxsIGR1cGxleCBtb2RlKi8KICAgICAgICBpZiAoc2MtPmZldF9mdWxsX2R1 cGxleCA9PSAxKSB7CiAgICAgICAgICAgIC8qIHJlYWQgUEFVU0UgYW5kIEFTTV9ESVIgaW4gUEhZ QU5BUiBhbmQgTUlJU1IgcmVnaXN0ZXIqLwogICAgICAgICAgICBQSFlBTkFSX3RlbXAgPSAoZmV0 X3JlYWRfbWlpKHNjLCBQSFlfQU5BUikgJiAweDBDMDApID4+IDEwOwogICAgICAgICAgICBQSFlB TkxQQVJfdGVtcCA9IChmZXRfcmVhZF9taWkoc2MsIFBIWV9MUEFSKSAmIDB4MEMwMCkgPj4gMTA7 CgogICAgICAgICAgICAvKiBMb2NhbDogQVNNX0RJUj0xLCBQQVVTRT0wICAgUmVtb3RlOiBBU01f RElSPTEsIFBBVVNFPTEqLwogICAgICAgICAgICBpZiAoIChQSFlBTkFSX3RlbXAgJiAweDAyKSAm JiAoIShQSFlBTkFSX3RlbXAgJiAweDAxKSkgJiYgKFBIWUFOTFBBUl90ZW1wICYgMHgwMikgJiYg KFBIWUFOTFBBUl90ZW1wICYgMHgwMSkpIHsKICAgICAgICAgICAgICAgIC8qIERpc2FibGUgUEFV U0UgcmVjZWl2ZSAqLwogICAgICAgICAgICAgICAgTWljcjBfdGVtcCA9IE1pY3IwX3RlbXAgJiAw eEY3OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8qIExvY2FsOiBBU01fRElSPURvbid0IGNh cmUsIFBBVVNFPTEgICBSZW1vdGU6IEFTTV9ESVI9RG9uJ3QgY2FyZSwgUEFVU0U9MSovCiAgICAg ICAgICAgIGVsc2UgaWYgKFBIWUFOQVJfdGVtcCAmIDB4MDEgJiYgUEhZQU5MUEFSX3RlbXAgJiAw eDAxKSB7CiAgICAgICAgICAgICAgICAvKiBFbmFibGUgUEFVU0UgcmVjZWl2ZSAqLwogICAgICAg ICAgICAgICAgTWljcjBfdGVtcCA9IE1pY3IwX3RlbXAgfCAweDA4OwogICAgICAgICAgICB9CiAg ICAgICAgICAgIC8qIExvY2FsOiBBU01fRElSPTEsIFBBVVNFPTEgICBSZW1vdGU6IEFTTV9ESVI9 MSwgUEFVU0U9MCovCiAgICAgICAgICAgIGVsc2UgaWYgKCAoUEhZQU5BUl90ZW1wICYgMHgwMikg JiYgKFBIWUFOQVJfdGVtcCAmIDB4MDEpICYmIChQSFlBTkxQQVJfdGVtcCAmIDB4MDIpICYmICgh KFBIWUFOTFBBUl90ZW1wICYgMHgwMSkpKSB7CiAgICAgICAgICAgICAgICAvKiBFbmFibGUgUEFV U0UgcmVjZWl2ZSAqLwogICAgICAgICAgICAgICAgTWljcjBfdGVtcCA9IE1pY3IwX3RlbXAgfCAw eDA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8qIE90aGVyIGNvbmRpdGlvbnMqLwogICAg ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIC8qIERpc2FibGUgUEFVU0UgcmVjZWl2ZSAq LwogICAgICAgICAgICAgICAgTWljcjBfdGVtcCA9IE1pY3IwX3RlbXAgJiAweEY3OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICAgIC8qIGluIGhhbGYgZHVwbGV4IG1vZGUqLwogICAgICAg IGVsc2UgewogICAgICAgICAgICAvKiBEaXNhYmxlIFBBVVNFIHJlY2VpdmUgKi8KICAgICAgICAg ICAgTWljcjBfdGVtcCA9IE1pY3IwX3RlbXAgJiAweEY3OwogICAgICAgIH0KICAgICAgICAvKiBE aXNhYmxlIGhhbGYgZHVwbGV4IGZsb3cgY29udHJvbCAqLwogICAgICAgIE1pY3IwX3RlbXAgPSBN aWNyMF90ZW1wICYgMHhGQjsKCiAgICAgICAgLyogRGlzYWJsZSBmdWxsIGR1cGxleCBQQVVTRSB0 cmFuc21pdCAqLwogICAgICAgIE1pY3IwX3RlbXAgPSBNaWNyMF90ZW1wICYgMHhFRjsKCiAgICAg ICAgLyogU2V0IHRoZSBNaWNyMCByZWdpc3RlciovCiAgICAgICAgQ1NSX1dSSVRFXzEoc2MsIEZF VF9NaWNyMCwgTWljcjBfdGVtcCApOwogICAgfQogICAgZWxzZSBpZiAoc2MtPmZldF9jaGlwX3Jl dmlkID49IFJFVl9JRF9WVDMxMDYpIHsKICAgICAgICAvKiBSZWFkIHRoZSBvbGQgdmFsdWUgb2Yg Rmxvd0NSMSByZWdpc3RlciAqLwogICAgICAgIEZsb3dDUjFfdGVtcCA9IENTUl9SRUFEXzEoc2Ms IEZFVF9GbG93Q1IxKTsKCgogICAgICAgIC8qY2hlY2sgd2hldGhlciBOSUMgaXMgb3BlcmF0ZWQg aW4gZnVsbCBkdXBsZXggbW9kZSAqLwogICAgICAgIC8qIGluIGZ1bGwgZHVwbGV4IG1vZGUqLwog ICAgICAgIGlmIChzYy0+ZmV0X2Z1bGxfZHVwbGV4ID09IDEpIHsKICAgICAgICAgICAgLyogcmVh ZCBQQVVTRSBhbmQgQVNNX0RJUiBpbiBQSFlBTkFSIGFuZCBNSUlTUiByZWdpc3RlciovCiAgICAg ICAgICAgIFBIWUFOQVJfdGVtcCA9IChmZXRfcmVhZF9taWkoc2MsIFBIWV9BTkFSKSAmIDB4MEMw MCkgPj4gMTA7CiAgICAgICAgICAgIE1JSVNSX3RlbXAgPSAoQ1NSX1JFQURfMShzYywgRkVUX01J SVNSKSAmIDB4NjApID4+IDU7CgogICAgICAgICAgICAvKiBMb2NhbDogQVNNX0RJUj0xLCBQQVVT RT0wICAgUmVtb3RlOiBBU01fRElSPTEsIFBBVVNFPTEqLwogICAgICAgICAgICBpZiAoIChQSFlB TkFSX3RlbXAgJiAweDAyKSAmJiAoIShQSFlBTkFSX3RlbXAgJiAweDAxKSkgJiYgKE1JSVNSX3Rl bXAgJiAweDAyKSAmJiAoTUlJU1JfdGVtcCAmIDB4MDEpKSB7CiAgICAgICAgICAgICAgICAvKiBF bmFibGUgUEFVU0UgdHJhbnNtaXQgKi8KICAgICAgICAgICAgICAgIEZsb3dDUjFfdGVtcCA9IEZs b3dDUjFfdGVtcCB8IDB4MDQ7CiAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIFBBVVNFIHJlY2Vp dmUgKi8KICAgICAgICAgICAgICAgIEZsb3dDUjFfdGVtcCA9IEZsb3dDUjFfdGVtcCAmIDB4RkQ7 CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyogTG9jYWw6IEFTTV9ESVI9RG9uJ3QgY2FyZSwg UEFVU0U9MSAgIFJlbW90ZTogQVNNX0RJUj1Eb24ndCBjYXJlLCBQQVVTRT0xKi8KICAgICAgICAg ICAgZWxzZSBpZiAoUEhZQU5BUl90ZW1wICYgMHgwMSAmJiBNSUlTUl90ZW1wICYgMHgwMSkgewog ICAgICAgICAgICAgICAgLyogRW5hYmxlIFBBVVNFIHRyYW5zbWl0ICovCiAgICAgICAgICAgICAg ICBGbG93Q1IxX3RlbXAgPSBGbG93Q1IxX3RlbXAgfCAweDA0OwogICAgICAgICAgICAgICAgLyog RW5hYmxlIFBBVVNFIHJlY2VpdmUgKi8KICAgICAgICAgICAgICAgIEZsb3dDUjFfdGVtcCA9IEZs b3dDUjFfdGVtcCB8IDB4MDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyogTG9jYWw6IEFT TV9ESVI9MSwgUEFVU0U9MSAgIFJlbW90ZTogQVNNX0RJUj0xLCBQQVVTRT0wKi8KICAgICAgICAg ICAgZWxzZSBpZiAoIChQSFlBTkFSX3RlbXAgJiAweDAyKSAmJiAoUEhZQU5BUl90ZW1wICYgMHgw MSkgJiYgKE1JSVNSX3RlbXAgJiAweDAyKSAmJiAoIShNSUlTUl90ZW1wICYgMHgwMSkpKSB7CiAg ICAgICAgICAgICAgICAvKiBEaXNhYmxlIFBBVVNFIHRyYW5zbWl0ICovCiAgICAgICAgICAgICAg ICBGbG93Q1IxX3RlbXAgPSBGbG93Q1IxX3RlbXAgJiAweEZCOwogICAgICAgICAgICAgICAgLyog RW5hYmxlIFBBVVNFIHJlY2VpdmUgKi8KICAgICAgICAgICAgICAgIEZsb3dDUjFfdGVtcCA9IEZs b3dDUjFfdGVtcCB8IDB4MDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyogT3RoZXIgY29u ZGl0aW9ucyovCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgLyogRGlzYWJsZSBQ QVVTRSB0cmFuc21pdCAqLwogICAgICAgICAgICAgICAgRmxvd0NSMV90ZW1wID0gRmxvd0NSMV90 ZW1wICYgMHhGQjsKICAgICAgICAgICAgICAgIC8qIERpc2FibGUgUEFVU0UgcmVjZWl2ZSAqLwog ICAgICAgICAgICAgICAgRmxvd0NSMV90ZW1wID0gRmxvd0NSMV90ZW1wICYgMHhGRDsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgICAvKiBpbiBoYWxmIGR1cGxleCBtb2RlKi8KICAgICAg ICBlbHNlIHsKICAgICAgICAgICAgLyogRGlzYWJsZSBQQVVTRSB0cmFuc21pdCAqLwogICAgICAg ICAgICBGbG93Q1IxX3RlbXAgPSBGbG93Q1IxX3RlbXAgJiAweEZCOwogICAgICAgICAgICAvKiBE aXNhYmxlIFBBVVNFIHJlY2VpdmUgKi8KICAgICAgICAgICAgRmxvd0NSMV90ZW1wID0gRmxvd0NS MV90ZW1wICYgMHhGRDsKICAgICAgICB9CiAgICAgICAgLyogRGlzYWJsZSBoYWxmIGR1cGxleCBm bG93IGNvbnRyb2wgKi8KICAgICAgICBGbG93Q1IxX3RlbXAgPSBGbG93Q1IxX3RlbXAgJiAweEZF OwoKICAgICAgICAvKiBTZXQgdGhlIEZsb3dDUjEgcmVnaXN0ZXIqLwogICAgICAgIENTUl9XUklU RV8xKHNjLCBGRVRfRmxvd0NSMSwgRmxvd0NSMV90ZW1wKTsKICAgIH0KfQojaWYgMAovKgogKiBG dW5jdGlvbjogQ0FNX2RhdGFfcmVhZAogKgogKiBQdXJwb3NlOgogKiAgUmVhZCBDQU0gZGF0YS4K ICoKICogaWYgc2VsZWN0X0NBTT0wLCB3cml0ZSBNQ0FNICwgZWxzZSBpZiBzbGVjdF9DQU09MSwg d3JpdGUgVkNBTQogKgogKi8Kc3RhdGljIHZvaWQgQ0FNX2RhdGFfcmVhZChzYywgc2VsZWN0X0NB TSwgQ0FNX2FkZHJlc3MsIHZhbHVlKQogICAgc3RydWN0IGZldF9zb2Z0YyAgICAqc2M7CiAgICBp bnQgc2VsZWN0X0NBTSA7CiAgICB1bnNpZ25lZCBjaGFyICAgQ0FNX2FkZHJlc3M7CiAgICB1bnNp Z25lZCBjaGFyICAgKnZhbHVlOwp7CiAgICBpbnQgdXU7CiAgICB1bnNpZ25lZCBjaGFyIEZFVF9D QU1DX3RlbXA7CgogICAgLyogaW52YWxpZCBhZGRyZXNzICovCiAgICBpZiAoQ0FNX2FkZHJlc3Mg JiAweEUwKQogICAgICAgIHByaW50ZigiZmV0JWQ6IHRoZSBDQU0gYWRkcmVzcyBpcyBpbnZhbGlk LlxuIiwgc2MtPmZldF91bml0KTsKCiAgICAvKiBlbmFibGUvc2VsZWN0IENBTSBjb250cm9sbGVy ICovCiAgICBGRVRfQ0FNQ190ZW1wID0gQ0FNQ19DQU1FTiB8IChzZWxlY3RfQ0FNID8gQ0FNQ19W Q0FNU0wgOiAwKTsKICAgIENTUl9XUklURV8xKHNjLCBGRVRfQ0FNQywgRkVUX0NBTUNfdGVtcCk7 CgogICAgLyogc2V0IENBTSBlbnRyeSBhZGRyZXNzICovCiAgICBDU1JfV1JJVEVfMShzYywgRkVU X0NBTUFERCwgQ0FNX2FkZHJlc3MpOwoKICAgIC8qIGlzc3VlIHJlYWQgY29tbWFuZCAqLwogICAg Q1NSX1dSSVRFXzEoc2MsIEZFVF9DQU1DLCBDQU1DX0NBTVJEIHwgRkVUX0NBTUNfdGVtcCk7Cgog ICAgLyogQ0FNIGFjY2VzcyB3aWxsIGJlIHNsb3cgaW4gMTBNYnBzIG1vZGUgKi8KICAgIC8qIGRl bGF5ZWQgMiBtaWNyby1zZWNvbmRzIHRvIGd1YXJhbnRlZSBjb3JyZWN0IENBTSBhY2Nlc3MgKi8K ICAgIERFTEFZKDEwKTsKCiAgICBpZiAoc2VsZWN0X0NBTSA9PSBDQU1DX1NFTEVDVF9WQ0FNKSB7 CiAgICAgICAgLyogcmVhZCBWSUQgQ0FNIGRhdGEgKi8KICAgICAgICAqKCh1bnNpZ25lZCBpbnQg Kil2YWx1ZSk9IENTUl9SRUFEXzEoc2MsIEZFVF9WQ0FNRDApOwogICAgfQogICAgZWxzZSB7CiAg ICAgICAgLyogcmVhZCBNdWx0aWNhc3QgQ0FNIGRhdGEgKi8KICAgICAgICBmb3IgKHV1ID0gMDsg dXUgPCA2OyB1dSsrKQogICAgICAgICAgICAqKHZhbHVlICsgdXUpPUNTUl9SRUFEXzEoc2MsIEZF VF9NQ0FNRDAgKyB1dSk7CiAgICB9CgogICAgLyogZGlzYWJsZSBDQU1FTiBhbmQgcmV0dXJuIFRS VUUgKi8KICAgIENTUl9XUklURV8xKHNjLCBGRVRfQ0FNQywgMCk7CgogICAgcmV0dXJuOwoKfQoK LyoKICogRnVuY3Rpb246IENBTV9tYXNrX3JlYWQKICoKICogUHVycG9zZToKICogIFJlYWQgQ0FN IG1hc2suCiAqCiAqIGlmIHNlbGVjdF9DQU09MCwgd3JpdGUgTUNBTSBtYXNrLCBlbHNlIGlmIHNs ZWN0X0NBTT0xLCB3cml0ZSBWQ0FNIG1hc2sKICoKICovCnN0YXRpYyB1bnNpZ25lZCBpbnQgQ0FN X21hc2tfcmVhZChzYywgc2VsZWN0X0NBTSwgbWFzaykKICAgIHN0cnVjdCBmZXRfc29mdGMgICAg KnNjOwogICAgaW50IHNlbGVjdF9DQU0gOwogICAgdW5zaWduZWQgaW50ICAgIG1hc2s7CnsKICAg IHVuc2lnbmVkIGludCBtYXNrX3RlbXA7CgogICAgLyogZW5hYmxlIENBTUVOICovCiAgICBDU1Jf V1JJVEVfMShzYywgRkVUX0NBTUMsIENBTUNfQ0FNRU4gfCAoc2VsZWN0X0NBTSA/IENBTUNfVkNB TVNMIDogMCkpOwoKICAgIC8qIHJlYWQgbWFzayAgICAgICAgKi8KICAgIG1hc2tfdGVtcCA9IGlu bChGRVRfQ0FNTVNLKTsKCiAgICAvKiBkaXNhYmxlIENBTUVOICovCiAgICBDU1JfV1JJVEVfMShz YywgRkVUX0NBTUMsIDApOwogICAgcmV0dXJuIG1hc2tfdGVtcDsKfQoKI2VuZGlmCi8qCiAqIEZ1 bmN0aW9uOiBDQU1fZGF0YV93cml0ZQogKgogKiBQdXJwb3NlOgogKiAgV3JpdGUgQ0FNIGRhdGEu CiAqCiAqIGlmIHNlbGVjdF9DQU09MCwgd3JpdGUgTUNBTSAsIGVsc2UgaWYgc2xlY3RfQ0FNPTEs IHdyaXRlIFZDQU0KICoKICovCnN0YXRpYyB2b2lkIENBTV9kYXRhX3dyaXRlKHNjLCBzZWxlY3Rf Q0FNLCBDQU1fYWRkcmVzcywgdmFsdWUpCiAgICBzdHJ1Y3QgZmV0X3NvZnRjICAgICpzYzsKICAg IGludCBzZWxlY3RfQ0FNIDsKICAgIHVuc2lnbmVkIGNoYXIgICBDQU1fYWRkcmVzczsKICAgIHVu c2lnbmVkIGNoYXIgICAqdmFsdWU7CnsKCi8qICAgIHVuc2lnbmVkIGxvbmcgcG9ydDsgKi8KICAg IGludCB1dTsKICAgIHVuc2lnbmVkIGNoYXIgRkVUX0NBTUNfdGVtcDsKCiAgICAvKiBpbnZhbGlk IGFkZHJlc3MqLwogICAgaWYgKENBTV9hZGRyZXNzICYgMHhFMCkKICAgICAgICBwcmludGYoImZl dCVkOiB0aGUgQ0FNIGFkZHJlc3MgaXMgaW52YWxpZC5cbiIsIHNjLT5mZXRfdW5pdCk7CgogICAg LyogZW5hYmxlL3NlbGVjdCBDQU0gY29udHJvbGxlciAqLwogICAgRkVUX0NBTUNfdGVtcCA9IENB TUNfQ0FNRU4gfCAoc2VsZWN0X0NBTSA/IENBTUNfVkNBTVNMIDogMCk7CiAgICBDU1JfV1JJVEVf MShzYywgRkVUX0NBTUMsIEZFVF9DQU1DX3RlbXApOwoKICAgIC8qIHNldCBDQU0gZW50cnkgYWRk cmVzcyAqLwogICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9DQU1BREQsIENBTV9hZGRyZXNzKTsKCiAg ICBpZiAoc2VsZWN0X0NBTSA9PSBDQU1DX1NFTEVDVF9WQ0FNKSB7CiAgICAgICAgLyogcmVhZCBW SUQgQ0FNIGRhdGEgKi8KICAgICAgICBDU1JfV1JJVEVfMihzYywgRkVUX1ZDQU1EMCwgKigodW5z aWduZWQgaW50ICopdmFsdWUpKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIC8qIHJlYWQgTXVs dGljYXN0IENBTSBkYXRhICovCiAgICAgICAgZm9yICh1dSA9IDA7IHV1IDwgNjsgdXUrKykKICAg ICAgICAgICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9NQ0FNRDAgKyB1dSwgKih2YWx1ZSArIHV1KSk7 CiAgICB9CiAgICAvKiBpc3N1ZSB3cml0ZSBjb21tYW5kICovCiAgICBDU1JfV1JJVEVfMShzYywg RkVUX0NBTUMsIENBTUNfQ0FNV1IgfCBGRVRfQ0FNQ190ZW1wKTsKCiAgICAvKiBDQU0gYWNjZXNz IHdpbGwgYmUgc2xvdyBpbiAxME1icHMgbW9kZSAqLwogICAgLyogZGVsYXllZCAyIG1pY3JvLXNl Y29uZHMgdG8gZ3VhcmFudGVlIGNvcnJlY3QgQ0FNIGFjY2VzcyAqLwogICAgREVMQVkoMik7Cgog ICAgLyogZGlzYWJsZSBDQU1FTiBhbmQgcmV0dXJuIFRSVUUgKi8KICAgIENTUl9XUklURV8xKHNj LCBGRVRfQ0FNQywgMCk7Cn0KCgovKgogKiBGdW5jdGlvbjogQ0FNX21hc2tfd3JpdGUKICoKICog UHVycG9zZToKICogIFdyaXRlIENBTSBtYXNrLgogKgogKiBpZiBzZWxlY3RfQ0FNPTAsIHdyaXRl IE1DQU0gbWFzaywgZWxzZSBpZiBzbGVjdF9DQU09MSwgd3JpdGUgVkNBTSBtYXNrCiAqCiAqLwoK c3RhdGljIHZvaWQgQ0FNX21hc2tfd3JpdGUoc2MsIHNlbGVjdF9DQU0sIG1hc2spCiAgICBzdHJ1 Y3QgZmV0X3NvZnRjICAgICpzYzsKICAgIGludCBzZWxlY3RfQ0FNIDsKICAgIHVuc2lnbmVkIGlu dCAgICBtYXNrOwp7CiAgICAvKiBlbmFibGUgQ0FNRU4gKi8KICAgIENTUl9XUklURV8xKHNjLCBG RVRfQ0FNQywgQ0FNQ19DQU1FTiB8IChzZWxlY3RfQ0FNID8gQ0FNQ19WQ0FNU0wgOiAwKSk7Cgog ICAgLyogd3JpdGUgbWFzayAqLwogICAgQ1NSX1dSSVRFXzQoc2MsIEZFVF9DQU1NU0ssIG1hc2sp OwoKICAgIC8qIGRpc2FibGUgQ0FNRU4gKi8KICAgIENTUl9XUklURV8xKHNjLCBGRVRfQ0FNQywg MCk7Cn0KCgovKgogKiBGdW5jdGlvbjogVkxBTl90YWdnaW5nCiAqCiAqIFB1cnBvc2U6CiAqICBJ bXBsZW1lbnQgODAyLjEvUSB0YWdnaW5nLgogKiAgICAgIDMxMDZKPT4gTW9kZTA6IFR4OnVudGFn Z2VkIHBhY2tldHMsIFJ4OnVudGFnZ2VkIG9yIHRhZ2dlZCBwYWNrZXRzOwogKiAgICAgICAgICAg ICAgICAgICAgICAgIE5PVCBleHRyYWN0IHRhZyBmcm9tIHRhZ2dlZCBwYWNrZXRzCiAqICAgICAg MzEwNlM9PiBNb2RlMTogVHg6dW50YWdnZWQgcGFja2V0cywgUng6dW50YWdnZWQgb3IgdGFnZ2Vk IHByaW9yaXR5IHBhY2tldHM7CiAqICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdCB0YWcg ZnJvbSB0YWdnZWQgcGFja2V0cwogKi8Kc3RhdGljIHZvaWQgVkxBTl90YWdnaW5nKHNjKQogICAg c3RydWN0IGZldF9zb2Z0YyAgICAqc2M7CnsKICAgIHVuc2lnbmVkIGludCBWQ0FNX3RlbXAgPSAw OwogICAgVkNBTV90ZW1wPSAwOwoKICAgIC8qIGlmIDMxMDZKLCBlbnRlciBNb2RlIDAqLwogICAg LyogaW4gdGhpcyBtb2RlLCB0eDogYWxsIHBhY2tldCB1bi10YWdnZWQsICByeDogYm90aCB1bnRh Z2dlZC90YWdnZWQgcGFja2V0cyAqLwogICAgLyogTk9UIGV4dHJhY3QgdGFnIGZyb20gdGFnZ2Vk IHBhY2tldHMgKi8KICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2aWQgPj0gUkVWX0lEX1ZUMzEwNl9K ICYmIHNjLT5mZXRfY2hpcF9yZXZpZCA8IFJFVl9JRF9WVDMxMDZfUykgewogICAgICAgIC8qIHNl dCB7UFFFTiwgUlRHT1BUfSA9IHswLDB9IGluIFRDUiAqLwogICAgICAgIENTUl9XUklURV8xKHNj LCBGRVRfVFhDRkcsIChDU1JfUkVBRF8xKHNjLCBGRVRfVFhDRkcpICYgMHhFRSkpOwoKICAgICAg ICAvKiBWTEFOIENBTSBtYXNrID0gMCAqLwogICAgICAgIENBTV9tYXNrX3dyaXRlKHNjLCAxLCAw eDAwMDAwMDAwKTsKCiAgICAgICAgLyogc2V0IFZJREZSID0wIGluIEJDUjEsIFZMQU4gSUQgaGFy ZHdhcmUgZmlsdGVyaW5nLiAqLwogICAgICAgIENTUl9XUklURV8xKHNjLCBGRVRfQkNSMSwgQ1NS X1JFQURfMShzYywgRkVUX0JDUjEpICYgQkNSMV9WSURGUl9ESVMpOwogICAgfQogICAgLyogaWYg MzEwNlMsIGVudGVyIE1vZGUgMSovCiAgICAvKiBpbiB0aGlzIG1vZGUsIHR4OiBhbGwgcGFja2V0 IHRhZ2dlZCwgIHJ4OiBib3RoIHVudGFnZ2VkL3RhZ2dlZCBwYWNrZXRzICovCiAgICAvKiBleHRy YWN0IHRhZyBmcm9tIHRhZ2dlZCBwYWNrZXRzICovCiAgICBlbHNlIGlmIChzYy0+ZmV0X2NoaXBf cmV2aWQgPj0gUkVWX0lEX1ZUMzEwNl9TKSB7CiAgICAgICAgLyogc2V0IHtQUUVOLCBSVEdPUFR9 ID0gezEsMH0gaW4gVENSICovCiAgICAgICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9UWENGRywgKENT Ul9SRUFEXzEoc2MsIEZFVF9UWENGRykgJiAweEVGKSB8IDB4MDEpOwoKICAgICAgICAvKiBWTEFO IENBTVswXT0gMCAqLwogICAgICAgIENBTV9kYXRhX3dyaXRlKHNjLCAxLCAwLCAodW5zaWduZWQg Y2hhciAqKSZWQ0FNX3RlbXApOwoKICAgICAgICAvKiBWTEFOIENBTSBtYXNrID0gMSAqLwogICAg ICAgIENBTV9tYXNrX3dyaXRlKHNjLCAxLCAweDAwMDAwMDAxKTsKCiAgICAgICAgLyogc2V0IFZJ REZSID0xIGluIEJDUjEsIFZMQU4gSUQgaGFyZHdhcmUgZmlsdGVyaW5nLiAqLwogICAgICAgIENT Ul9XUklURV8xKHNjLCBGRVRfQkNSMSwgQ1NSX1JFQURfMShzYywgRkVUX0JDUjEpIHwgMHg4MCk7 CiAgICB9Cn0KCnN0YXRpYyB2b2lkIFNhZmVEaXNhYmxlTWlpQXV0byhzYykKICAgIHN0cnVjdCBm ZXRfc29mdGMgICAgKnNjOwp7CiAgICBpbnQgd3cgPSAwOwoKICAgIC8qIGJlZm9yZSByZWFkIG1p aSBkYXRhLCB3ZSBtdXN0IHR1cm4gb2ZmIG1hdXRvICovCiAgICBDU1JfV1JJVEVfMShzYywgRkVU X01JSUNSLCAwKTsKICAgIC8qIGZvciBWVDMwNDMgb25seSAqLwogICAgaWYgKHNjLT5mZXRfY2hp cF9yZXZpZCA8IFJFVl9JRF9WVDMwNjVfQSkgewogICAgICAgIC8qIHR1cm4gb2ZmIE1TUkNFTgog ICAgICAgICAgIE5PVEUuLi4uIGFkZHJlc3Mgb2YgTUlJIHNob3VsZCBiZSAweDAxLAogICAgICAg ICAgIG90aGVyd2lzZSBTUkNJIHdpbGwgaW52b2tlZAogICAgICAgICovCiAgICAgICAgQ1NSX1dS SVRFXzEoc2MsIEZFVF9NSUlBRERSLCAweDAxKTsKICAgICAgICBERUxBWSgxMDAwKTsKCiAgICAg ICAgLyogdHVybiBvbiBNQVVUTyAqLwogICAgICAgIENTUl9XUklURV8xKHNjLCBGRVRfTUlJQ1Is IDB4ODApOwoKICAgICAgICAvKiBXX01BWF9USU1FT1VUIGlzIHRoZSB0aW1lb3V0IHBlcmlvZCAq LwogICAgICAgIGZvciAod3cgPSAwOyB3dyA8IDB4M2ZmZjsgd3crKykgewogICAgICAgICAgICBp ZiAoQ1NSX1JFQURfMShzYywgRkVUX01JSUFERFIpICYgMHgyMCkKICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgIH0KCiAgICAgICAgLyogYXMgc29vbiBhcyBNRE9ORSBpcyBvbiwgICovCiAg ICAgICAgLyogdGhpcyBpcyB0aGUgcmlnaHQgdGltZSB0byB0dXJuIG9mZiBNQVVUTyAqLwogICAg ICAgIENTUl9XUklURV8xKHNjLCBGRVRfTUlJQ1IsIDApOwogICAgfQogICAgZWxzZSB7CiAgICAg ICAgLyogYXMgc29vbiBhcyBNSURMRSBpcyBvbiwgTUFVVE8gaXMgcmVhbGx5IHN0b3BlZCAqLwog ICAgICAgIGZvciAod3cgPSAwOyB3dyA8IDB4M2ZmZjsgd3crKykgewogICAgICAgICAgICBpZiAo Q1NSX1JFQURfMShzYywgRkVUX01JSUFERFIpICYgMHg4MCkKICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIHZvaWQgRW5hYmxlTWlpQXV0b1BvbGwoc2MpCiAg ICBzdHJ1Y3QgZmV0X3NvZnRjICAgICpzYzsKewogICAgaW50IHd3OwoKICAgIC8qVHVybiBvZmYg TUFVVE8qLwogICAgQ1NSX1dSSVRFXzEoc2MsRkVUX01JSUNSLDApOwogICAgLypUdXJuIE1TUkNF TiwgMHgwMSovCiAgICBDU1JfV1JJVEVfMShzYywgRkVUX01JSUFERFIsIDB4NDEpOwogICAgLypU dXJuIG9uIE1BVVRPKi8KICAgIENTUl9XUklURV8xKHNjLCBGRVRfTUlJQ1IsIDB4ODApOwoKICAg IGZvciAod3cgPSAwOyB3dyA8IDB4M2ZmZjsgd3crKykKICAgICAgICBpZiAoQ1NSX1JFQURfMShz YywgRkVUX01JSUFERFIpICYgMHgyMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAvKiB0dXJuIG9u IE1TUkNFTiBhdGVyIE1ET05FIGhhcyB0dXJuZWQgb24gKi8KICAgIENTUl9XUklURV8xKHNjLCBG RVRfTUlJQUREUiwgMHg0MCk7Cgp9CgpzdGF0aWMgdm9pZCB0dXJuX29uX01JSV9saW5rKHNjKQog ICAgc3RydWN0IGZldF9zb2Z0YyAgICAqc2M7CnsKICAgIHVuc2lnbmVkIGludCBNSUlDUmJhazsK ICAgIGludCB3dzsKCiAgICBNSUlDUmJhayA9IENTUl9SRUFEXzEoc2MsIEZFVF9NSUlDUik7CiAg ICBTYWZlRGlzYWJsZU1paUF1dG8oc2MpOwogICAgQ1NSX1dSSVRFXzEoc2MsIEZFVF9NSUlBRERS LCAweDAxKTsKICAgIENTUl9XUklURV8xKHNjLCBGRVRfTUlJQ1IsIE1JSUNSYmFrIHwgMHg4MCk7 CiAgICBmb3IgKHd3ID0gMDsgd3cgPCAweDNmZmY7IHd3KyspCiAgICAgICAgaWYgKENTUl9SRUFE XzEoc2MsIEZFVF9NSUlBRERSKSAmIDB4MjApCiAgICAgICAgICAgIGJyZWFrOwogICAgLyogdHVy biBvbiBNU1JDRU4gYXRlciBNRE9ORSBoYXMgdHVybmVkIG9uICovCiAgICBDU1JfV1JJVEVfMShz YywgRkVUX01JSUFERFIsIDB4NDApOwogICAgREVMQVkoMzAwMDApOwp9CgpzdGF0aWMgdm9pZCBy ZXN0YXJ0X2F1dG9uZWdvdGlhdGlvbihzYykKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgKnNjOwp7 CiAgICB1bnNpZ25lZCBpbnQgaTsKCiAgICAvKiBSZXN0YXJ0IGF1dG9uZWdvdGlhdGlvbiAqLwog ICAgRkVUX1NFVF9NSUkoc2MsIFBIWV9CTUNSLCBQSFlfQk1DUl9BVVRPTkVHUlNUUik7CgogICAg LyogV2FpdCB1bnRpbCBOLVdBWSBmaW5pc2hlZCovCiAgICBERUxBWSgyNTAwMDAwKTsgLyogZGVs YXkgZm9yIDIgc2Vjb25kcyAqLwoKICAgIGZvciAoaT0wOyBpPDB4MWZmOyBpKyspCiAgICAgICAg aWYgKGZldF9yZWFkX21paShzYywgUEhZX0JNU1IpICYgUEhZX0JNQ1JfQVVUT05FR1JTVFIpCiAg ICAgICAgICAgIGJyZWFrOwp9IC8qIHJlc3RhcnRfYXV0b25lZ290aWF0aW9uICovCgovKiBUdXJu IG9uIEFVVE8gYml0IGluIE1JSSByZWdpc2VyICovCnN0YXRpYyB2b2lkIGVuYWJsZV9hdXRvbmVn b3RpYXRpb24oc2MpCiAgICBzdHJ1Y3QgZmV0X3NvZnRjICAgICpzYzsKewogICAgdW5zaWduZWQg aW50IGk7CiAgICB1bnNpZ25lZCBpbnQgUEhZX0JNQ1JfdGVtcCA9IDA7CgogICAgUEhZX0JNQ1Jf dGVtcCA9IGZldF9yZWFkX21paShzYywgUEhZX0JNQ1IpOwoKICAgIC8qIFNldCBBdXRvbmVnb3Rp YXRpb24gZW5hYmxlIChBTkVHX0VOIGJpdCBpbiBDb250cm9sIHJlZ2lzdGVyICkgKi8KICAgIGZl dF93cml0ZV9taWkoc2MsIFBIWV9CTUNSICwgZmV0X3JlYWRfbWlpKHNjLCBQSFlfQk1DUikgfCAw eDEwMDApOwoKCiAgICAvKiBGb3JjZWQgbW9kZSB0byBhdXRvIG1vZGUsIGl0IHdpbGwgY2F1c2Ug YXV0b25lZ290aWF0aW9uIHJlc3RhcnQgKi8KICAgIC8qIFdhaXQgdW50aWwgTi1XQVkgZmluaXNo ZWQqLwogICAgaWYgKCEoIFBIWV9CTUNSX3RlbXAgJiAweDEwMDApKSB7CiAgICAgICAgREVMQVko MjUwMDAwMCk7CiAgICAgICAgZm9yIChpPTA7IGk8MHgxZmY7IGkrKykKICAgICAgICAgICAgaWYg KGZldF9yZWFkX21paShzYywgUEhZX0JNU1IpICYgMHgwMDIwKQogICAgICAgICAgICAgICAgYnJl YWs7CiAgICB9Cn0vKiBlbmFibGVfYXV0b25lZ290aWF0aW9uICovCgpzdGF0aWMgdm9pZCBmZXRf c2V0X3R4X3RocmVzaChzYykKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgKnNjOwp7CgogICAgRkVU X0NMUkJJVChzYywgRkVUX0JDUjEsIDB4MzgpOwogICAgRkVUX1NFVEJJVChzYywgRkVUX0JDUjEs IHNjLT50eF90aHJlc2g8PCAzKTsKCiAgICBGRVRfQ0xSQklUKHNjLCBGRVRfVFhDRkcsIDB4QzAp OwogICAgRkVUX1NFVEJJVChzYywgRkVUX1RYQ0ZHLCBzYy0+dHhfdGhyZXNoPDw1KTsKfQpzdGF0 aWMgdm9pZCBmZXRfc2V0X3J4X3RocmVzaChzYykKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgKnNj Owp7CgogICAgRkVUX0NMUkJJVChzYywgRkVUX0JDUjAsIDB4MzgpOwogICAgRkVUX1NFVEJJVChz YywgRkVUX0JDUjAsIHNjLT5yeF90aHJlc2g8PCAzKTsKCiAgICBGRVRfQ0xSQklUKHNjLCBGRVRf UlhDRkcsIDB4QzApOwogICAgRkVUX1NFVEJJVChzYywgRkVUX1JYQ0ZHLCBzYy0+cnhfdGhyZXNo PDw1KTsKfQoKc3RhdGljIHZvaWQgZG9fYXV0b25lZ290aWF0aW9uKHNjKQogICAgc3RydWN0IGZl dF9zb2Z0YyAgICAqc2M7CnsKICAgIC8qIGNoZWNrIHdoZXRoZXIgbGluayBmYWlsICovCiAgICBp ZiAoQ1NSX1JFQURfMShzYywgRkVUX01JSVNSKSAmIDB4MDIpewogICAgICAgIHByaW50ZigiZmV0 JWQ6IExpbmsgRmFpbC5cbiIsIHNjLT5mZXRfdW5pdCk7CiAgICAgICAgc2MtPmZldF9zcGVlZCA9 IDEwOyAvKiBTZXQgc3BlZWQgMTBNYnBzICovCiAgICAgICAgc2MtPmZldF9mdWxsX2R1cGxleCA9 IDA7IC8qIFNldCBoYWxmIGR1cGxleCAqLwogICAgICAgIHJldHVybjsKICAgIH0KICAgIC8qIGNo ZWNrIHNwZWVkKi8KICAgIC8qIHJlYWQgTl9TUEQxMCBiaXQgaW4gTUlJIFN0YXR1cyBSZWdpc3Rl ciAqLwogICAgaWYgKENTUl9SRUFEXzEoc2MsIEZFVF9NSUlTUikgJiAweDAxKSB7CiAgICAgICAg cHJpbnRmKCJmZXQlZDogQXV0b25lZ290aWF0aW9uIHJlc3VsdDogMTBNYnBzIiwgc2MtPmZldF91 bml0KTsKICAgICAgICBzYy0+ZmV0X3NwZWVkID0gMTA7IC8qIFNldCBzcGVlZCAxME1icHMgKi8K ICAgIH0KICAgIGVsc2UgewogICAgICAgIHByaW50ZigiZmV0JWQ6IEF1dG9uZWdvdGlhdGlvbiBy ZXN1bHQ6IDEwME1icHMiLCBzYy0+ZmV0X3VuaXQpOwogICAgICAgIHNjLT5mZXRfc3BlZWQgPSAx MDA7IC8qIFNldCBzcGVlZCAxME1icHMgKi8KICAgIH0KCiAgICAvKiBjaGVjayBkdXBsZXggbW9k ZSovCiAgICAvKiBpZiBWVDMxMDYsIGNoZWNrIE5fRkRYIGJpdCBpbiBNSUkgU3RhdHVzIFJlZ2lz dGVyIGRpcmVjdGx5ICovCiAgICBpZiAoc2MtPmZldF9jaGlwX3JldmlkID49IFJFVl9JRF9WVDMx MDYpIHsKICAgICAgICBpZiAoQ1NSX1JFQURfMShzYywgRkVUX01JSVNSKSAmIDB4MDQpIHsKICAg ICAgICAgICAgcHJpbnRmKCIgZnVsbCBkdXBsZXggbW9kZS5cbiIpOwogICAgICAgICAgICAvKiBT ZXQgTUFDIG9wZXJhdGluZyBpbiBGdWxsIER1cGxleCBNb2RlKi8KICAgICAgICAgICAgQ1NSX1dS SVRFXzIoc2MsIEZFVF9DT01NQU5ELCBDU1JfUkVBRF8yKHNjLCBGRVRfQ09NTUFORCkgfCAweDA0 MDApOwogICAgICAgICAgICBzYy0+ZmV0X2Z1bGxfZHVwbGV4ID0gMTsgLyogU2V0IGZ1bGwgZHVw bGV4ICovCgogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJpbnRmKCIgaGFs ZiBkdXBsZXggbW9kZS5cbiIpOwogICAgICAgICAgICAvKiBTZXQgTUFDIG9wZXJhdGluZyBpbiBI YWxmIER1cGxleCBNb2RlKi8KICAgICAgICAgICAgQ1NSX1dSSVRFXzIoc2MsIEZFVF9DT01NQU5E LCBDU1JfUkVBRF8yKHNjLCBGRVRfQ09NTUFORCkgJiAweGZiZmYpOwogICAgICAgICAgICBzYy0+ ZmV0X2Z1bGxfZHVwbGV4ID0gMDsgLyogU2V0IGhhbGYgZHVwbGV4ICovCiAgICAgICAgfQogICAg fQogICAgZWxzZSB7CiAgICAgICAgLyogaWYgVlQzMDY1IG9yIFZUMzA0MywgY2hlY2sgQU5BUiBh bmQgQU5MUEFSIGluIE1JSSBSZWdpc3RlcnMgb2YgUEhZICovCiAgICAgICAgaWYgKChmZXRfcmVh ZF9taWkoc2MsIFBIWV9BTkFSKSAmIGZldF9yZWFkX21paShzYywgUEhZX0xQQVIpKSAmIDB4MDE0 MCApIHsKICAgICAgICAgICAgcHJpbnRmKCIgZnVsbCBkdXBsZXggbW9kZS5cbiIpOwogICAgICAg ICAgICAvKiBTZXQgTUFDIG9wZXJhdGluZyBpbiBGdWxsIER1cGxleCBNb2RlKi8KICAgICAgICAg ICAgQ1NSX1dSSVRFXzIoc2MsIEZFVF9DT01NQU5ELCBDU1JfUkVBRF8yKHNjLCBGRVRfQ09NTUFO RCkgfCAweDA0MDApOwogICAgICAgICAgICBzYy0+ZmV0X2Z1bGxfZHVwbGV4ID0gMTsgLyogU2V0 IGZ1bGwgZHVwbGV4ICovCiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwcmlu dGYoIiBoYWxmIGR1cGxleCBtb2RlLlxuIik7CiAgICAgICAgICAgIC8qIFNldCBNQUMgb3BlcmF0 aW5nIGluIEhhbGYgRHVwbGV4IE1vZGUqLwogICAgICAgICAgICBDU1JfV1JJVEVfMihzYywgRkVU X0NPTU1BTkQsIENTUl9SRUFEXzIoc2MsIEZFVF9DT01NQU5EKSAmIDB4ZmJmZik7CiAgICAgICAg ICAgIHNjLT5mZXRfZnVsbF9kdXBsZXggPSAwOyAvKiBTZXQgaGFsZiBkdXBsZXggKi8KICAgICAg ICB9CiAgICB9CgogICAgIC8qIHNwZWNpYWwgdHJlYXRtZW50IGZvciAzMDcxQiAqLwogICAgaWYg KHNjLT5mZXRfY2hpcF9yZXZpZCA9PSBSRVZfSURfVlQzMDcxX0IpIHsKICAgICAgICBpZiAoQ1NS X1JFQURfMShzYywgRkVUX01JSVNSKSAmIE1JSVNSX1NQRUVEKQogICAgICAgICAgICAvKiBpZiAx ME0gLT4gdHVybiBvZmYgQkNSMFs2XSAqLwogICAgICAgICAgICBDU1JfV1JJVEVfMShzYywgRkVU X0JDUjAsIENTUl9SRUFEXzEoc2MsIEZFVF9CQ1IwKSAmIH4weDQwKTsKICAgICAgICBlbHNlCiAg ICAgICAgICAgIC8qIGlmIDEwME0gLT4gdHVybiBvbiBCQ1IwWzZdICovCiAgICAgICAgICAgIENT Ul9XUklURV8xKHNjLCBGRVRfQkNSMCwgQ1NSX1JFQURfMShzYywgRkVUX0JDUjApIHwgMHg0MCk7 CiAgICB9Cgp9CgpzdGF0aWMgdm9pZCBmZXRfaW5pdCh4c2MpCiAgICB2b2lkICAgICAgICAgICAg KnhzYzsKewogICAgc3RydWN0IGZldF9zb2Z0YyAgICAgICAgKnNjID0geHNjOwogICAgc3RydWN0 IGlmbmV0ICAgICAgICAqaWZwID0gJnNjLT5hcnBjb20uYWNfaWY7CiAgICBpbnQgICAgICAgICBz LGk7CgoKICAgICAgcyA9IHNwbGltcCgpOwoKICAgIC8qCiAgICAgKiBDYW5jZWwgcGVuZGluZyBJ L08gYW5kIGZyZWUgYWxsIFJYL1RYIGJ1ZmZlcnMuCiAgICAgKi8KICAgIGZldF9zdG9wKHNjKTsK ICAgIGZldF9yZXNldChzYyk7CgojaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNDAwMDAwCiAgICBl bmFibGVfbW1pbyhzYyk7CiNlbmRpZgoKICAgIGZvciAoaSA9IDA7IGkgPCBFVEhFUl9BRERSX0xF TjsgaSsrKQogICAgICAgIENTUl9XUklURV8xKHNjLCBGRVRfUEFSMCArIGksIHNjLT5hcnBjb20u YWNfZW5hZGRyW2ldKTsKCiAgICAvKiBzZXQgdGhlIE1JSUFEIGFnYWluIGJlY2F1c2Ugc29mdHdh cmUgcmVzZXQgd2lsbCByZXNldCB0aGUgdmFsdWUgKi8KICAgICAgICBGRVRfU0VUQklUKHNjLCBG RVRfTUlJQUREUiwgRkVUX01JSUFERFJfTVNSQ0VOIHwgRkVUX01JSUFERFJfTUFEMCk7CgogICAg Lyogc2V0IFRDUiBSQ1IgdGhyZXNob2xkICovCiAgICAvKiBzZXQgRE1BTCB0byAwMDAgKDggRFdz KSAsIGFuZCBub3QgdG8gY2hhbmdlIFJFUU9QVCBzZXQgaW4gYXR0YWNoIGZ1Y250aW9uICovCiAg ICAgICAgLyogc2V0IChDUkZUMiwgQ1JGVDEsIENSRlQwKT0oMCwgMCwgMCkgKi8KICAgICAgICAv KiBzZXQgKENURlQyLCBDVEZUMSwgQ1RGVDApPSgwLCAwLCAwKSAqLwoKICAgIEZFVF9DTFJCSVQo c2MsRkVUX0JDUjAsIDcpOwogICAgRkVUX1NFVEJJVChzYyxGRVRfQkNSMCwgRE1BX0xFTkdUSF9E RUYpOwoKICAgIENTUl9XUklURV8xKHNjLCBGRVRfQkNSMSwgMHgwMCk7CiAgICAvKiBTZXQgUlgg dGhyZXNoaG9sZCAqLwogICAgc2MtPnJ4X3RocmVzaD0wOwogICAgZmV0X3NldF9yeF90aHJlc2go c2MpOwoKICAgIC8qIFNldCBUWCB0aHJlc2hob2xkICovCgogICAgc2MtPnR4X3RocmVzaD1UWF9U SFJFU0hfREVGOwogICAgZmV0X3NldF90eF90aHJlc2goc2MpOwoKICAgIC8qIFR1cm4gb24gYml0 MyAoT0ZTRVQpIGluIFRDUiBkdXJpbmcgTUFDIGluaXRpYWxpemF0aW9uICovCiAgICAgICAgRkVU X1NFVEJJVChzYywgRkVUX1RYQ0ZHLCBGRVRfVFhDRkdfT0ZTRVQpOwoKICAgIC8qIFFQYWNrZXQg c2V0dGluZyAqLwogICAgaWYgKHNjLT5mZXRfY2hpcF9yZXZpZCA8IFJFVl9JRF9WVDMwNjVfQSkK ICAgICAgICAgICAgLyogZGlzYWJsZSBxdWV1ZSBwYWNrZXQgKi8KICAgICAgICAgICAgRkVUX1NF VEJJVChzYywgRkVUX0NGR0IsIEZFVF9DRkdCX1FQS1RESVMpOwogICAgZWxzZSB7CiNpZiBRUEFD S0VUX0RFRj09MAogICAgICAgICAgICAvKiBkaXNhYmxlIHF1ZXVlIHBhY2tldCAqLwogICAgICAg ICAgICBGRVRfU0VUQklUKHNjLCBGRVRfQ0ZHQiwgRkVUX0NGR0JfUVBLVERJUyk7CiNlbHNlCiAg ICAgICAgICAgIC8qIGVuYWxiZSBxdWV1ZSBwYWNrZXQqLwogICAgICAgICAgICBGRVRfQ0xSQklU KHNjLEZFVF9DRkdCLCBGRVRfQ0ZHQl9RUEtURElTKTsKI2VuZGlmCiAgICAgICAgfQoKICAgIC8q IHNldCBiYWNrb2ZmIGFsZ29yaXRobSAsZGlzYWJsZSB0aGUgcmlnaHQtbW9zdCA0LWJpdCBvZmYg Q0ZHRFswXSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKi8KICAgICAgICBGRVRfQ0xSQklUKHNjLCBG RVRfQ0ZHRCwoRkVUX0NGR0RfQ0FQfEZFVF9DRkdEX0NSQURPTXxGRVRfQ0ZHRF9NQkF8RkVUX0NG R0RfQkFLT1BUKSk7CgogICAgLyogSW5pdCBjaXJjdWxhciBSWCBsaXN0LiAqLwogICAgaWYgKGZl dF9saXN0X3J4X2luaXQoc2MpID09IEVOT0JVRlMpIHsKICAgICAgICBwcmludGYoImZldCVkOiBp bml0aWFsaXphdGlvbiBmYWlsZWQ6IG5vICIKICAgICAgICAgICAgIm1lbW9yeSBmb3IgcnggYnVm ZmVyc1xuIiwgc2MtPmZldF91bml0KTsKICAgICAgICBmZXRfc3RvcChzYyk7CiAgICAgICAgKHZv aWQpc3BseChzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLyoKICAgICAqIEluaXQgdHgg ZGVzY3JpcHRvcnMuCiAgICAgKi8KICAgIGZldF9saXN0X3R4X2luaXQoc2MpOwoKICAgIC8qIElm IHdlIHdhbnQgcHJvbWlzY3VvdXMgbW9kZSwgc2V0IHRoZSBhbGxmcmFtZXMgYml0LiAqLwogICAg aWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfUFJPTUlTQykKICAgICAgICBGRVRfU0VUQklUKHNjLCBG RVRfUlhDRkcsIEZFVF9SWENGR19SWF9QUk9NSVNDKTsKICAgIGVsc2UKICAgICAgICBGRVRfQ0xS QklUKHNjLCBGRVRfUlhDRkcsIEZFVF9SWENGR19SWF9QUk9NSVNDKTsKCiAgICAvKiBTZXQgY2Fw dHVyZSBicm9hZGNhc3QgYml0IHRvIGNhcHR1cmUgYnJvYWRjYXN0IGZyYW1lcy4gKi8KICAgIGlm IChpZnAtPmlmX2ZsYWdzICYgSUZGX0JST0FEQ0FTVCkKICAgICAgICBGRVRfU0VUQklUKHNjLCBG RVRfUlhDRkcsIEZFVF9SWENGR19SWF9CUk9BRCk7CiAgICBlbHNlCiAgICAgICAgRkVUX0NMUkJJ VChzYywgRkVUX1JYQ0ZHLCBGRVRfUlhDRkdfUlhfQlJPQUQpOwoKCiAgICAvKgogICAgICogUHJv Z3JhbSB0aGUgbXVsdGljYXN0IGZpbHRlciwgaWYgbmVjZXNzYXJ5LgogICAgICovCiAgICBmZXRf c2V0bXVsdGkoc2MpOwoKICAgIC8qCiAgICAgKiBMb2FkIHRoZSBhZGRyZXNzIG9mIHRoZSBSWCBs aXN0LgogICAgICovCiAgICBDU1JfV1JJVEVfNChzYywgRkVUX1JYQUREUiwgdnRvcGh5cyhzYy0+ ZmV0X2NkYXRhLmZldF9yeF9oZWFkLT5mZXRfcHRyKSk7CiAgICBDU1JfV1JJVEVfNChzYywgRkVU X1RYQUREUiwgdnRvcGh5cygmc2MtPmZldF9sZGF0YS0+ZmV0X3R4X2xpc3RbMF0pKTsKCiAgICBp ZiAoc2MtPmZldF9jaGlwX3JldmlkID49IFJFVl9JRF9WVDMwNjVfQSkKICAgICAgICAgIGZsb3df Y29udHJvbF9hYmlsaXR5IChzYyk7CgogICAgLyogRW5hYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21p dHRlci4gKi8KICAgIENTUl9XUklURV8xKHNjLCBGRVRfQ09NTUFORCwgRkVUX0NNRF9TVEFSVHwK ICAgICAgICAgICAgICAgICAgICBGRVRfQ01EX1RYX09OfEZFVF9DTURfUlhfT04pOwogICAgRkVU X1NFVEJJVDE2KHNjLCBGRVRfQ09NTUFORCwgRkVUX0NNRF9UWF9OT1BPTEwpOwoKICAgIC8qCiAg ICAgKiBFbmFibGUgaW50ZXJydXB0cy4KICAgICAqLwogICAgQ1NSX1dSSVRFXzIoc2MsIEZFVF9J TVIsIElNUlNoYWRvdyk7CiAgICBDU1JfV1JJVEVfMShzYywgRkVUX01JTVIsIE1JTVJTaGFkb3cp OwoKICAgIEVuYWJsZU1paUF1dG9Qb2xsKHNjKTsKICAgIC8qIHR1cm4gb24gTUlJIGxpbmsgY2hh bmdlICovCiAgICAvKiBpZiB0aGUgTUFENC0wIGlzIG5vdCAweDAwMDEsIHRoZW4gTGluayBGYWls IHdpbGwgYmUgb24gKi8KICAgIHR1cm5fb25fTUlJX2xpbmsoc2MpOwoKICAgIGlmIChzYy0+ZmV0 X2NoaXBfcmV2aWQgPj0gUkVWX0lEX1ZUMzEwNikKICAgICAgICBzZXRfZmxvd19jb250cm9sKHNj KTsKCgovKiAgICBzZXRfbWVkaWFfZHVwbGV4X21vZGUoc2MpOyovCgogICAgaWYgKHNjLT5mZXRf Y2hpcF9yZXZpZCA+PSBSRVZfSURfVlQzMDY1X0EpCiAgICAgICAgZmxvd19jb250cm9sX2FiaWxp dHkgKHNjKTsKCiAgICBpZiAoc2MtPmZldF9jaGlwX3JldmlkID49IFJFVl9JRF9WVDMxMDYpCiAg ICAgICAgVkxBTl90YWdnaW5nKHNjKTsKCiAgICBpZnAtPmlmX2ZsYWdzIHw9IElGRl9SVU5OSU5H OwogICAgaWZwLT5pZl9mbGFncyAmPSB+SUZGX09BQ1RJVkU7CgogICAgKHZvaWQpc3BseChzKTsK CiAgICByZXR1cm47Cn0KCi8qCiAqIFNldCBtZWRpYSBvcHRpb25zLgogKi8Kc3RhdGljIGludCBm ZXRfaWZtZWRpYV91cGQoaWZwKQogICAgc3RydWN0IGlmbmV0ICAgICAgICAqaWZwOwp7CiAgICBz dHJ1Y3QgZmV0X3NvZnRjICAgICAgICAqc2M7CiAgICBzdHJ1Y3QgaWZtZWRpYSAgICAgICppZm0g PSBOVUxMOwogICAgdW5zaWduZWQgaW50IFBIWV9CTUNSX3RlbXAgPSAwOwogICAgdW5zaWduZWQg aW50IFBIWV9BTkFSX3RlbXAgPSAwOwogICAgaW50IHJlc3RhcnRfYXV0byA9IDAsIGNoYW5nZV9m bGFnID0gMDsKICAgIGludCBpOwogICAgaWZwLT5pZl90aW1lcj0wOwogICAgc2MgPSBpZnAtPmlm X3NvZnRjOwogICAgaWZtID0gJnNjLT5pZm1lZGlhOwogICAgCiAgICBpZiAoSUZNX1RZUEUoaWZt LT5pZm1fbWVkaWEpICE9IElGTV9FVEhFUikKICAgICAgICByZXR1cm4oRUlOVkFMKTsKCiAgICAg ICAgc3dpdGNoKElGTV9TVUJUWVBFKGlmbS0+aWZtX21lZGlhKSkgewogICAgICAgICAgICBjYXNl IElGTV9BVVRPIDoKICAgICAgICAgICAgICAgIFBIWV9CTUNSX3RlbXAgPSBmZXRfcmVhZF9taWko c2MsIFBIWV9CTUNSKTsKICAgICAgICAgICAgICAgIFBIWV9BTkFSX3RlbXAgPSBmZXRfcmVhZF9t aWkoc2MsIFBIWV9BTkFSKTsKCiAgICAgICAgICAgICAgICAvKiBTZXQgQXV0b25lZ290aWF0aW9u IGVuYWJsZSAoQU5FR19FTiBiaXQgaW4gQ29udHJvbCByZWdpc3RlciApICovCiAgICAgICAgICAg ICAgICBGRVRfU0VUX01JSShzYywgUEhZX0JNQ1IsIFBIWV9CTUNSX0FVVE9ORUdFTkJMKTsKCiAg ICAgICAgICAgICAgICAvKiBjaGVjayB0aGUgQU5BUiB2YWx1ZSBpcyBjb3JyZWN0ICovCiAgICAg ICAgICAgICAgICAvKiBpZiBub3QsIHdyaXRlIGJhY2sgdGhlIGNvcnJlY3QgdmFsdWUsIGFuZCBy ZXRyaWdnZXIgQXV0b25lZ290aWF0aW9uICovCiAgICAgICAgICAgICAgICBpZiAoKFBIWV9BTkFS X3RlbXAgJiAweDAxRTApICE9IDB4MDFFMCkgewogICAgICAgICAgICAgICAgICAgIEZFVF9TRVRf TUlJKHNjLCBQSFlfQU5BUiwgMHgwMUUwKTsgLyogU2V0IFRYX0ZEWCxUWF9IRFgsMTBfRkRYLDEw X0hEWCwgYml0Ki8KICAgICAgICAgICAgICAgICAgICByZXN0YXJ0X2F1dG8gPSAxOwogICAgICAg ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8qIGZvciBWVDMwNDMoREFWSUNPTSkgb25seSwg Zml4IERhdmlDb20gUEhZJ3MgYnVnICovCiAgICAgICAgICAgICAgICBpZiAoc2MtPmZldF9jaGlw X3JldmlkIDwgUkVWX0lEX1ZUMzA3MV9BICkgewogICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBwaHlfSUQ7CgogICAgICAgICAgICAgICAgICAgIHBoeV9JRCA9IChmZXRfcmVhZF9taWko c2MsIFBIWV9QSFlJRDEpIDw8IDE2KSB8CiAgICAgICAgICAgICAgICAgICAgICAgIChmZXRfcmVh ZF9taWkoc2MsIFBIWV9QSFlJRDIpKTsKICAgICAgICAgICAgICAgICAgICBpZiAocGh5X0lEID49 IENJRF9EQVZJQ09NICYmIHBoeV9JRCA8IENJRF9EQVZJQ09NX0IpCiAgICAgICAgICAgICAgICAg ICAgICAgIHJlc3RhcnRfYXV0byA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg ICAgaWYgKHJlc3RhcnRfYXV0byA9PSAxKQogICAgICAgICAgICAgICAgICAgIHJlc3RhcnRfYXV0 b25lZ290aWF0aW9uKHNjKTsKICAgICAgICAgICAgICAgIC8qIEZvcmNlZCBtb2RlIHRvIGF1dG8g bW9kZSwgaXQgd2lsbCBjYXVzZSBhdXRvbmVnb3RpYXRpb24gcmVzdGFydCAqLwogICAgICAgICAg ICAgICAgLyogV2FpdCB1bnRpbCBOLVdBWSBmaW5pc2hlZCovCiAgICAgICAgICAgICAgICBlbHNl IGlmICghKCBQSFlfQk1DUl90ZW1wICYgMHgxMDAwKSAmJgogICAgICAgICAgICAgICAgICAgICEo ZmV0X3JlYWRfbWlpKHNjLCBQSFlfQk1TUikgJiAweDAwMjApKSB7CiAgICAgICAgICAgICAgICAg ICAgREVMQVkoMjUwMDAwMCk7CgogICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDB4MWZm OyBpKyspCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZXRfcmVhZF9taWkoc2MsIFBIWV9C TVNSKSAmIDB4MDAyMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgZG9fYXV0b25lZ290aWF0aW9uKHNjKTsKCiAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBJRk1fMTAwX1RYIDoKICAgICAgICAg ICAgY2FzZSBJRk1fMTAwX0ZYIDoKICAgICAgICAgICAgICAgIC8qIDEwME1icHMgRnVsbCBkdXBs ZXggbW9kZSovCiAgICAgICAgICAgICAgICBpZiAoKGlmbS0+aWZtX21lZGlhICYgSUZNX0dNQVNL KSA9PSBJRk1fRkRYKSB7CiAgICAgICAgICAgICAgICAgICAgc2MtPmZldF9zcGVlZD0xMDA7CiAg ICAgICAgICAgICAgICAgICAgc2MtPmZldF9mdWxsX2R1cGxleD0xOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgLyogMTAwTWJwcyBIYWxmIGR1cGxleCBtb2RlKi8KICAgICAgICAg ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHNjLT5mZXRfc3BlZWQ9MTAwOwogICAg ICAgICAgICAgICAgICAgIHNjLT5mZXRfZnVsbF9kdXBsZXg9MDsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIGlmIChzYy0+ZmV0X2NoaXBfcmV2aWQgPj0gMHg4MCB8fAogICAgICAg ICAgICAgICAgICAgIChzYy0+ZmV0X2NoaXBfcmV2aWQgPj0gMHg0MCAmJgogICAgICAgICAgICAg ICAgICAgIHNjLT5mZXRfY2hpcF9yZXZpZCA8IDB4ODAgJiYKICAgICAgICAgICAgICAgICAgICAh KENTUl9SRUFEXzEoc2MsIEZFVF9DRkdDKSAmIDB4ODApKSkKICAgICAgICAgICAgICAgICAgICBj aGFuZ2VfZmxhZz1jaGVja19uX3dheV9mb3JjZShzYywgY2hhbmdlX2ZsYWcpOwogICAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGNoZWNrX2xlZ2FjeV9mb3JjZShzYyk7CiAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBJRk1fMTBfRkwgOgogICAgICAg ICAgICBjYXNlIElGTV8xMF9UIDoKICAgICAgICAgICAgICAgIC8qIDEwTWJwcyBGdWxsIGR1cGxl eCBtb2RlKi8KICAgICAgICAgICAgICAgIGlmICgoaWZtLT5pZm1fbWVkaWEgJiBJRk1fR01BU0sp ID09IElGTV9GRFgpIHsKICAgICAgICAgICAgICAgICAgICBzYy0+ZmV0X3NwZWVkPTEwOwogICAg ICAgICAgICAgICAgICAgIHNjLT5mZXRfZnVsbF9kdXBsZXg9MTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIC8qIDEwTWJwcyBIYWxmIGR1cGxleCBtb2RlKi8KICAgICAgICAgICAg ICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHNjLT5mZXRfc3BlZWQ9MTA7CiAgICAgICAg ICAgICAgICAgICAgc2MtPmZldF9mdWxsX2R1cGxleD0wOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgaWYgKHNjLT5mZXRfY2hpcF9yZXZpZCA+PSAweDgwIHx8IChzYy0+ZmV0X2No aXBfcmV2aWQgPj0gMHg0MCAmJiBzYy0+ZmV0X2NoaXBfcmV2aWQgPCAweDgwICYmICEoQ1NSX1JF QURfMShzYywgRkVUX0NGR0MpICYgMHg4MCkpKQogICAgICAgICAgICAgICAgICAgIGNoYW5nZV9m bGFnPWNoZWNrX25fd2F5X2ZvcmNlKHNjLCBjaGFuZ2VfZmxhZyk7CiAgICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICAgICAgY2hlY2tfbGVnYWN5X2ZvcmNlKHNjKTsKICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAvKgogICAgaWYgKElGTV9TVUJUWVBFKGlmbS0+ aWZtX21lZGlhKSA9PSBJRk1fQVVUTykKICAgICAgICBmZXRfYXV0b25lZ19taWkoc2MsIEZFVF9G TEFHX1NDSEVEREVMQVksIDEpOwogICAgZWxzZQogICAgICAgIGZldF9zZXRtb2RlX21paShzYywg aWZtLT5pZm1fbWVkaWEpOwogICAgKi8KCiAgICByZXR1cm4oMCk7Cn0KCnN0YXRpYyB2b2lkIG1p aV9jaGVja19tZWRpYV9tb2RlKHN0cnVjdCBmZXRfc29mdGMgKnNjKSB7Cgl1X2ludDE2X3QJd0FO QVI7CiAJaWYgKENTUl9SRUFEXzEoc2MsRkVUX01JSVNSKSAmIDB4MDIpIHsKCQkvKkxpbmsgZmFp bCwgcmVhZCBBTkFSKi8KCQl3QU5BUj1mZXRfcmVhZF9taWkoc2MsUEhZX0FOQVIpOwoJCWlmICh3 QU5BUiAmIDB4MDA4MCkgewoJCQlzYy0+ZmV0X3NwZWVkPTEwMDsKCQkJaWYgKHdBTkFSICYgMHgw MTAwKQoJCQkJc2MtPmZldF9mdWxsX2R1cGxleD0xOwoJCQllbHNlCgkJCQlzYy0+ZmV0X2Z1bGxf ZHVwbGV4PTA7CgkJfQoJCWVsc2UgewoJCQlzYy0+ZmV0X3NwZWVkPTEwOwoJCQlpZiAod0FOQVIg JiAweDAwNDApCgkJCQlzYy0+ZmV0X2Z1bGxfZHVwbGV4PTE7CgkJCWVsc2UKCQkJCXNjLT5mZXRf ZnVsbF9kdXBsZXg9MDsKCQl9Cgl9CgllbHNlIHsKCQoJIAlpZiAoQ1NSX1JFQURfMShzYyxGRVRf TUlJU1IpICYgMHgwMSkgCgkgCQlzYy0+ZmV0X3NwZWVkPTEwOwoJIAllbHNlCgkgCQlzYy0+ZmV0 X3NwZWVkPTEwMDsKCQkJIAkKCSAJaWYgKGZldF9xdWVyeV9hdXRvKHNjKSkgewoJICAgICAgICBG RVRfU0VUQklUMTYoc2MsIEZFVF9DT01NQU5ELCBGRVRfQ01EX0ZEWCk7ICAgICAgIC8qIFNldCBD aGlwIEZ1bGxkdXBsZXggbW9kZSAqLwkgCQoJIAkJc2MtPmZldF9mdWxsX2R1cGxleD0xOwoJIAl9 CgkgCWVsc2UgewoJICAgICAgICBGRVRfQ0xSQklUMTYoc2MsIEZFVF9DT01NQU5ELCBGRVRfQ01E X0ZEWCk7ICAgICAgCgkgCQlzYy0+ZmV0X2Z1bGxfZHVwbGV4PTA7CgkgCX0KCX0KCQoJc2MtPmZl dF9hdXRvbmVnPTA7CglpZiAoZmV0X3JlYWRfbWlpKHNjLFBIWV9CTUNSKSAmIDB4MTAwMCkgewoJ CXdBTkFSPWZldF9yZWFkX21paShzYyxQSFlfQU5BUik7CgkJaWYgKCh3QU5BUiAmIDB4MDFFMCk9 PTB4MDFFMCkKCQkJc2MtPmZldF9hdXRvbmVnPTE7Cgl9Cn0KCi8qCiAqIFJlcG9ydCBjdXJyZW50 IG1lZGlhIHN0YXR1cy4KICovCnN0YXRpYyB2b2lkIGZldF9pZm1lZGlhX3N0cyhpZnAsIGlmbXIp CiAgICBzdHJ1Y3QgaWZuZXQgICAgICAgICppZnA7CiAgICBzdHJ1Y3QgaWZtZWRpYXJlcSAgICpp Zm1yOwp7CiAgICBzdHJ1Y3QgZmV0X3NvZnRjICAgICAgICAqc2M7CgogICAgc2MgPSBpZnAtPmlm X3NvZnRjOwoJaWZtci0+aWZtX3N0YXR1cyA9IElGTV9BVkFMSUQ7CglpZm1yLT5pZm1fYWN0aXZl ID0gSUZNX0VUSEVSOwkKCQoJbWlpX2NoZWNrX21lZGlhX21vZGUoc2MpOwkKCQoJaWYgKCEoQ1NS X1JFQURfMShzYyxGRVRfTUlJU1IpICYgMHgwMikpCgkJaWZtci0+aWZtX3N0YXR1c3w9SUZNX0FD VElWRTsKCQkKCWlmIChzYy0+ZmV0X2F1dG9uZWcpCgkJaWZtci0+aWZtX2FjdGl2ZXw9SUZNX0FV VE87CgkJCiAgICBpZiAoc2MtPmZldF9zcGVlZCA9PSAxMDApCiAgICAgICBpZm1yLT5pZm1fYWN0 aXZlIHw9SUZNXzEwMF9UWDsKICAgIGVsc2UKICAgICAgIGlmbXItPmlmbV9hY3RpdmUgfD1JRk1f MTBfVDsKICAgICAgICAgICAgCiAgICBpZiAoc2MtPmZldF9mdWxsX2R1cGxleCkKICAgICAgIGlm bXItPmlmbV9hY3RpdmUgfD0gSUZNX0ZEWDsKICAgICAgICAgICAgCiAgICByZXR1cm47Cn0KCnN0 YXRpYyBpbnQgZmV0X2lvY3RsKGlmcCwgY29tbWFuZCwgZGF0YSkKICAgIHN0cnVjdCBpZm5ldCAg ICAgICAgKmlmcDsKICAgIHVfbG9uZyAgICAgICAgICBjb21tYW5kOwogICAgY2FkZHJfdCAgICAg ICAgIGRhdGE7CnsKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgICAgICpzYyA9IGlmcC0+aWZfc29m dGM7CiAgICBzdHJ1Y3QgaWZyZXEgICAgICAgICppZnIgPSAoc3RydWN0IGlmcmVxICopIGRhdGE7 CgogICAgaW50ICAgICAgICAgcywgZXJyb3IgPSAwOwoKCiAgICBzID0gc3BsaW1wKCk7CiAgICBz d2l0Y2goY29tbWFuZCkgewogICAgY2FzZSBTSU9DU0lGQUREUjoKICAgIGNhc2UgU0lPQ0dJRkFE RFI6CiAgICBjYXNlIFNJT0NTSUZNVFU6CiAgICAgICAgZXJyb3IgPSBldGhlcl9pb2N0bChpZnAs IGNvbW1hbmQsIGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgY2FzZSBTSU9DU0lGRkxBR1M6CiAg ICAgICAgaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApIHsKICAgICAgICAgICAgZmV0X2luaXQo c2MpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChpZnAtPmlmX2ZsYWdzICYgSUZG X1JVTk5JTkcpCiAgICAgICAgICAgICAgICBmZXRfc3RvcChzYyk7CiAgICAgICAgfQogICAgICAg IGVycm9yID0gMDsKICAgICAgICBicmVhazsKICAgIGNhc2UgU0lPQ0FERE1VTFRJOgogICAgY2Fz ZSBTSU9DREVMTVVMVEk6CiAgICAgICAgZmV0X3NldG11bHRpKHNjKTsKICAgICAgICBlcnJvciA9 IDA7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlIFNJT0NHSUZNRURJQToKICAgIGNhc2UgU0lPQ1NJ Rk1FRElBOgogICAgICAgIGVycm9yID0gaWZtZWRpYV9pb2N0bChpZnAsIGlmciwgJnNjLT5pZm1l ZGlhLCBjb21tYW5kKTsKICAgICAgICBicmVhazsKICAgIGRlZmF1bHQ6CgogICAgICAgIGVycm9y ID0gRUlOVkFMOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgICh2b2lkKXNwbHgocyk7CgogICAg cmV0dXJuKGVycm9yKTsKfQoKc3RhdGljIHZvaWQgZmV0X3dhdGNoZG9nKGlmcCkKICAgIHN0cnVj dCBpZm5ldCAgICAgICAgKmlmcDsKewogICAgc3RydWN0IGZldF9zb2Z0YyAgICAgICAgKnNjOwoK ICAgIHNjID0gaWZwLT5pZl9zb2Z0YzsKCiAgICAvKgogICAgaWYgKHNjLT5mZXRfYXV0b25lZykg ewogICAgICAgIGZldF9hdXRvbmVnX21paShzYywgRkVUX0ZMQUdfREVMQVlUSU1FTywgMSk7CiAg ICAgICAgcmV0dXJuOwogICAgfQogICAgKi8KCiAgICBpZnAtPmlmX29lcnJvcnMrKzsKICAgIHBy aW50ZigiZmV0JWQ6IHdhdGNoZG9nIHRpbWVvdXRcbiIsIHNjLT5mZXRfdW5pdCk7CgogICAgLyoK ICAgIGlmICghKGZldF9waHlfcmVhZHJlZyhzYywgUEhZX0JNU1IpICYgUEhZX0JNU1JfTElOS1NU QVQpKQogICAgICAgIHByaW50ZigiZmV0JWQ6IG5vIGNhcnJpZXIgLSB0cmFuc2NlaXZlciBjYWJs ZSBwcm9ibGVtP1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYy0+ZmV0X3Vu aXQpOwogICAgKi8KCiAgICBmZXRfc3RvcChzYyk7CiAgICBmZXRfcmVzZXQoc2MpOwogICAgZmV0 X2luaXQoc2MpOwoKICAgIGlmIChpZnAtPmlmX3NuZC5pZnFfaGVhZCAhPSBOVUxMKQogICAgICAg IGZldF9zdGFydChpZnApOwoKICAgIHJldHVybjsKfQoKLyoKICogU3RvcCB0aGUgYWRhcHRlciBh bmQgZnJlZSBhbnkgbWJ1ZnMgYWxsb2NhdGVkIHRvIHRoZQogKiBSWCBhbmQgVFggbGlzdHMuCiAq LwpzdGF0aWMgdm9pZCBmZXRfc3RvcChzYykKICAgIHN0cnVjdCBmZXRfc29mdGMgICAgKnNjOwp7 CiAgICByZWdpc3RlciBpbnQgICAgICAgIGk7CiAgICBzdHJ1Y3QgaWZuZXQgICAgICAgICppZnA7 CgogICAgaWZwID0gJnNjLT5hcnBjb20uYWNfaWY7CiAgICBpZnAtPmlmX3RpbWVyID0gMDsKCiAg ICBGRVRfQ0xSQklUMTYoc2MsIEZFVF9DT01NQU5ELCBGRVRfQ01EX1RYX09OKTsKCiAgICBpZiAo IWZldF9zYWZlX3J4X29mZihzYykpCiAgICAgICAgcHJpbnRmKCJmZXQlZDogUlggc2h1dGRvd24g ZXJyb3IhIFxuIiwgc2MtPmZldF91bml0KTsKCiAgICBGRVRfU0VUQklUMTYoc2MsIEZFVF9DT01N QU5ELCBGRVRfQ01EX1NUT1ApOwoKICAgIENTUl9XUklURV8yKHNjLCBGRVRfSU1SLCAweDAwMDAp OwogICAgQ1NSX1dSSVRFXzQoc2MsIEZFVF9UWEFERFIsIDB4MDAwMDAwMDApOwogICAgQ1NSX1dS SVRFXzQoc2MsIEZFVF9SWEFERFIsIDB4MDAwMDAwMDApOwoKICAgIC8qCiAgICAgKiBGcmVlIGRh dGEgaW4gdGhlIFJYIGxpc3RzLgogICAgICovCiAgICBmb3IgKGkgPSAwOyBpIDwgRkVUX1JYX0xJ U1RfQ05UOyBpKyspIHsKICAgICAgICBpZiAoc2MtPmZldF9jZGF0YS5mZXRfcnhfY2hhaW5baV0u ZmV0X21idWYgIT0gTlVMTCkgewogICAgICAgICAgICBtX2ZyZWVtKHNjLT5mZXRfY2RhdGEuZmV0 X3J4X2NoYWluW2ldLmZldF9tYnVmKTsKICAgICAgICAgICAgc2MtPmZldF9jZGF0YS5mZXRfcnhf Y2hhaW5baV0uZmV0X21idWYgPSBOVUxMOwogICAgICAgIH0KICAgIH0KCiAgICBiemVybygoY2hh ciAqKSZzYy0+ZmV0X2xkYXRhLT5mZXRfcnhfbGlzdCwKICAgICAgICBzaXplb2Yoc2MtPmZldF9s ZGF0YS0+ZmV0X3J4X2xpc3QpKTsKCiAgICAvKgogICAgICogRnJlZSB0aGUgVFggbGlzdCBidWZm ZXJzLgogICAgICovCiAgICBmb3IgKGkgPSAwOyBpIDwgRkVUX1RYX0xJU1RfQ05UOyBpKyspIHsK ICAgICAgICBpZiAoc2MtPmZldF9jZGF0YS5mZXRfdHhfY2hhaW5baV0uZmV0X21idWYgIT0gTlVM TCkgewogICAgICAgICAgICBtX2ZyZWVtKHNjLT5mZXRfY2RhdGEuZmV0X3R4X2NoYWluW2ldLmZl dF9tYnVmKTsKICAgICAgICAgICAgc2MtPmZldF9jZGF0YS5mZXRfdHhfY2hhaW5baV0uZmV0X21i dWYgPSBOVUxMOwogICAgICAgIH0KICAgIH0KCiAgICBiemVybygoY2hhciAqKSZzYy0+ZmV0X2xk YXRhLT5mZXRfdHhfbGlzdCwKICAgICAgICBzaXplb2Yoc2MtPmZldF9sZGF0YS0+ZmV0X3R4X2xp c3QpKTsKCiAgICBpZnAtPmlmX2ZsYWdzICY9IH4oSUZGX1JVTk5JTkcgfCBJRkZfT0FDVElWRSk7 CgogICAgcmV0dXJuOwp9CgovKgogKiBTdG9wIGFsbCBjaGlwIEkvTyBzbyB0aGF0IHRoZSBrZXJu ZWwncyBwcm9iZSByb3V0aW5lcyBkb24ndAogKiBnZXQgY29uZnVzZWQgYnkgZXJyYW50IERNQXMg d2hlbiByZWJvb3RpbmcuCiAqLwojaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNDAwMDAwCnN0YXRp YyB2b2lkIGZldF9zaHV0ZG93bihkZXYpCiAgICBkZXZpY2VfdCAgICAgICAgZGV2Owp7CiAgICBz dHJ1Y3QgZmV0X3NvZnRjICAgICpzYzsKCiAgICBzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK ICAgIGZldF9zdG9wKHNjKTsKICAgIHJldHVybjsKfQoKI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24g PCA0MDAwMDAKc3RhdGljIHZvaWQgZmV0X3NodXRkb3duKGhvd3RvLCBhcmcpCiAgICBpbnQgICAg ICAgICBob3d0bzsKICAgIHZvaWQgICAgICAgICAgICAqYXJnOwp7CiAgICBzdHJ1Y3QgZmV0X3Nv ZnRjICAgICAgICAqc2MgPSAoc3RydWN0IGZldF9zb2Z0YyAqKWFyZzsKCiAgICBmZXRfc3RvcChz Yyk7CgogICAgcmV0dXJuOwp9CgpzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2UgZmV0X2RldmljZSA9 IHsKICAgICJmZXQiLAogICAgZmV0X3Byb2JlLAogICAgZmV0X2F0dGFjaCwKICAgICZmZXRfY291 bnQsCiAgICBOVUxMCn07CkRBVEFfU0VUKHBjaWRldmljZV9zZXQsIGZldF9kZXZpY2UpOwojZW5k aWYK --==========1810869384========== Content-Type: application/octet-stream; name="if_fet.h" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="if_fet.h"; size=28204 LyoKICogQ29weXJpZ2h0IChjKSAxOTk2LDIwMDIgVklBIE5ldHdvcmtpbmcsIEluYy4KICogQWxs IHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0 OgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCiAqICAgIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKICogIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgVklBIFRlY2hub2xvZ2llcywgSW5jLgogKiA0LiBOZWl0aGVy IHRoZSBuYW1lIG9mIHRoZSBDb21wYW55IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y cwogKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUKICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVklBIFRFQ0hO T0xPR0lFUywgSU5DLiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECiAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQogKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFZJQSBURUNITk9MT0dJRVMsIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQogKiBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwogKiBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAqIFNV Q0ggREFNQUdFLgogKgogKi8KCiNpZm5kZWYgX19JRl9GRVRfSAojZGVmaW5lIF9fSUZfRkVUX0gK Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKiBEcml2ZXIgdHVuYWJsZSBwYXJhbWV0ZXJzCioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCiNkZWZpbmUgRE1BX0xFTkdUSF9ERUYgICgxKQovKiBETUFfTEVOR1RIX0RFRiBpcyB1 c2VkIGZvciBjb250cm9sbGluZyB0aGUgRE1BIGxlbmd0aC4KICAgMDogOCBEV09SRHMKICAgMTog MTYgRFdPUkRzCiAgIDI6IDMyIERXT1JEcwogICAzOiA2NCBEV09SRHMKICAgNDogMTI4IERXT1JE cwogICA1OiAyNTYgRFdPUkRzCiAgIDY6IFNGKGZsdXNoIHRpbGwgZW1wbHkpCiAgIDc6IFNGKGZs dXNoIHRpbGwgZW1wbHkpCiovCgojZGVmaW5lIFRYX1RIUkVTSF9ERUYgICAoMCkKLyogVFhfVEhS RVNIX0RFRiBpcyB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgdHJhbnNtaXQgZmlmbyB0aHJlc2hv bGQuCiAgIDA6IGluZGljYXRlIHRoZSB0eGZpZm8gdGhyZXNob2xkIGlzIDEyOCBieXRlcy4KICAg MTogaW5kaWNhdGUgdGhlIHR4ZmlmbyB0aHJlc2hvbGQgaXMgMjU2IGJ5dGVzLgogICAyOiBpbmRp Y2F0ZSB0aGUgdHhmaWZvIHRocmVzaG9sZCBpcyA1MTIgYnl0ZXMuCiAgIDM6IGluZGljYXRlIHRo ZSB0eGZpZm8gdGhyZXNob2xkIGlzIDEwMjQgYnl0ZXMuCiAgIDQ6IGluZGljYXRlIHRoYXQgd2Ug dXNlIHN0b3JlIGFuZCBmb3J3YXJkCiovCgojZGVmaW5lIFFQQUNLRVRfREVGICgxKQovKiBRUEFD S0VUX0RFRiBpcyB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZW5hYmxlL2Rpc2FibGUgdGhlIHRy YW5zbWl0CiAgIHN0YXR1cyB3cml0ZSBiYWNrIHF1ZXVlLgogICAwOiBEaXNhYmxlCiAgIDE6IEVu YWJsZSAoRGVmYXVsdCkKKi8KCiNkZWZpbmUgVkFMX1BLVF9MRU4gKDApCi8qCiAgICBWQUxfUEtU X0xFTiBpcyB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgTUFDIHRvIGRyb3AgODAyLjMgZnJhbWUg d2l0aAogICAgaW52YWxpZCBwYWNrZXQgbGVuZ3RoLgogICAgMDogRGlzYWJsZQogICAgMTogRW5h YmxlIChEZWZhdWx0KQoqLwoKI2lmbmRlZiBNRlJFRQojZGVmaW5lIE1GUkVFKHgsbikgZG8geyAo bik9bV9mcmVlKCh4KSk7IH0gd2hpbGUgKDApCiNlbmRpZgoKLyoKICogUmhpbmUgcmVnaXN0ZXIg ZGVmaW5pdGlvbnMuCiAqLwojZGVmaW5lIEZFVF9QQVIwICAgIDB4MDAgICAgLyogbm9kZSBhZGRy ZXNzIDAgdG8gNCAqLwojZGVmaW5lIEZFVF9QQVIxICAgIDB4MDQgICAgLyogbm9kZSBhZGRyZXNz IDIgdG8gNiAqLwojZGVmaW5lIEZFVF9SWENGRyAgIDB4MDYgICAgLyogcmVjZWl2ZXIgY29uZmln IHJlZ2lzdGVyICovCiNkZWZpbmUgRkVUX1RYQ0ZHICAgMHgwNyAgICAvKiB0cmFuc21pdCBjb25m aWcgcmVnaXN0ZXIgKi8KI2RlZmluZSBGRVRfQ09NTUFORCAweDA4ICAgIC8qIGNvbW1hbmQgcmVn aXN0ZXIgKi8KI2RlZmluZSBGRVRfSVNSICAgICAweDBDICAgIC8qIGludGVycnVwdC9zdGF0dXMg cmVnaXN0ZXIgKi8KI2RlZmluZSBGRVRfSU1SICAgICAweDBFICAgIC8qIGludGVycnVwdCBtYXNr IHJlZ2lzdGVyICovCiNkZWZpbmUgRkVUX01BUjAgICAgMHgxMCAgICAvKiBtdWx0aWNhc3QgaGFz aCAwICovCiNkZWZpbmUgRkVUX01BUjEgICAgMHgxNCAgICAvKiBtdWx0aWNhc3QgaGFzaCAxICov CiNkZWZpbmUgRkVUX01DQU1EMCAgMHgxMAojZGVmaW5lIEZFVF9NQ0FNRDQgIDB4MTQKI2RlZmlu ZSBGRVRfVkNBTUQwICAweDE2CiNkZWZpbmUgRkVUX1JYQUREUiAgMHgxOCAgICAvKiByeCBkZXNj cmlwdG9yIGxpc3Qgc3RhcnQgYWRkciAqLwojZGVmaW5lIEZFVF9UWEFERFIgIDB4MUMgICAgLyog dHggZGVzY3JpcHRvciBsaXN0IHN0YXJ0IGFkZHIgKi8KI2RlZmluZSBGRVRfQ1VSUlhERVNDMCAg MHgyMAojZGVmaW5lIEZFVF9DVVJSWERFU0MxICAweDI0CiNkZWZpbmUgRkVUX0NVUlJYREVTQzIg IDB4MjgKI2RlZmluZSBGRVRfQ1VSUlhERVNDMyAgMHgyQwojZGVmaW5lIEZFVF9ORVhUUlhERVND MCAweDMwCiNkZWZpbmUgRkVUX05FWFRSWERFU0MxIDB4MzQKI2RlZmluZSBGRVRfTkVYVFJYREVT QzIgMHgzOAojZGVmaW5lIEZFVF9ORVhUUlhERVNDMyAweDNDCiNkZWZpbmUgRkVUX0NVUlRYREVT QzAgIDB4NDAKI2RlZmluZSBGRVRfQ1VSVFhERVNDMSAgMHg0NAojZGVmaW5lIEZFVF9DVVJUWERF U0MyICAweDQ4CiNkZWZpbmUgRkVUX0NVUlRYREVTQzMgIDB4NEMKI2RlZmluZSBGRVRfTkVYVFRY REVTQzAgMHg1MAojZGVmaW5lIEZFVF9ORVhUVFhERVNDMSAweDU0CiNkZWZpbmUgRkVUX05FWFRU WERFU0MyIDB4NTgKI2RlZmluZSBGRVRfTkVYVFRYREVTQzMgMHg1QwojZGVmaW5lIEZFVF9DVVJS WERNQSAgICAweDYwICAgIC8qIGN1cnJlbnQgUlggRE1BIGFkZHJlc3MgKi8KI2RlZmluZSBGRVRf Q1VSVFhETUEgICAgMHg2NCAgICAvKiBjdXJyZW50IFRYIERNQSBhZGRyZXNzICovCiNkZWZpbmUg RkVUX1RBTExZQ05UICAgIDB4NjggICAgLyogdGFsbHkgY291bnRlciB0ZXN0IHJlZ2lzdGVyICov CiNkZWZpbmUgRkVUX1BIWUFERFIgMHg2QwojZGVmaW5lIEZFVF9NSUlTUiAgIDB4NkQKI2RlZmlu ZSBGRVRfQkNSMCAgICAweDZFCiNkZWZpbmUgRkVUX0JDUjEgICAgMHg2RgojZGVmaW5lIEZFVF9N SUlDUiAgIDB4NzAKI2RlZmluZSBGRVRfTUlJQUREUiAweDcxCiNkZWZpbmUgRkVUX01JSURBVEEg MHg3MgojZGVmaW5lIEZFVF9FRUNTUiAgIDB4NzQKI2RlZmluZSBGRVRfTUFDUkVHQ1NSICAgMHg3 NQojZGVmaW5lIEZFVF9HUElPICAgIDB4NzYKI2RlZmluZSBGRVRfQ0ZHQSAgICAweDc4CiNkZWZp bmUgRkVUX0NGR0IgICAgMHg3OQojZGVmaW5lIEZFVF9DRkdDICAgIDB4N0EKI2RlZmluZSBGRVRf Q0ZHRCAgICAweDdCCiNkZWZpbmUgRkVUX01QQV9DTlQgMHg3QwojZGVmaW5lIEZFVF9DUkNfQ05U IDB4N0UKI2RlZmluZSBGRVRfTWljcjAgICAweDgwCiNkZWZpbmUgRkVUX1NUSUNLSFcgMHg4Mwoj ZGVmaW5lIEZFVF9NSVNSICAgIDB4ODQKI2RlZmluZSBGRVRfTUlNUiAgICAweDg2CiNkZWZpbmUg RkVUX0NBTU1TSyAgMHg4OAojZGVmaW5lIEZFVF9DQU1DICAgIDB4OTIKI2RlZmluZSBGRVRfQ0FN QUREICAweDkzCiNkZWZpbmUgRkVUX1BIWUFOQVIgMHg5NSAvKiBmb3IgVlQzMTA2ICovCiNkZWZp bmUgRkVUX0Zsb3dDUjAgMHg5OCAvKiBmb3IgVlQzMTA2ICovCiNkZWZpbmUgRkVUX0Zsb3dDUjEg MHg5OSAvKiBmb3IgVlQzMTA2ICovCiNkZWZpbmUgRkVUX1R4UGF1c2VUaW1lciAgICAweDlBCiNk ZWZpbmUgRkVUX1dPTENSX0NMUiAgIDB4QTQKI2RlZmluZSBGRVRfV09MQ0dfQ0xSICAgMHhBNwoj ZGVmaW5lIEZFVF9QV1JDU1JfQ0xSICAweEFDCgovKgogKiByZWdpc3RlcnMgZm9yIDMwNjUKKi8K I2RlZmluZSBGRVRfR0ZURVNUICAweDU0CiNkZWZpbmUgRkVUX1JGVENNRCAgMHg1NQojZGVmaW5l IEZFVF9URlRDTUQgIDB4NTYKI2RlZmluZSBGRVRfR0ZTVEFUVVMgICAgMHg1NwojZGVmaW5lIEZF VF9SWE1JU1NFRCAgICAweDdjCiNkZWZpbmUgRkVUX1RBTExZQ05UQ1JDIDB4N2QKI2RlZmluZSBG RVRfUlhDUkNFUlJTICAgMHg3ZQojZGVmaW5lIEZFVF9NSVNDX0NSMCAgICAweDgwCiNkZWZpbmUg RkVUX01JU0NfQ1IxICAgIDB4ODEKI2RlZmluZSBGRVRfV09MQ1JDTFIgICAgMHhBNAojZGVmaW5l IEZFVF9XT0xDR0NMUiAgICAweEE3CiNkZWZpbmUgRkVUX1BXUkNTUkNMUiAgIDB4QUMKCi8qCiAq IFJYIGNvbmZpZyBiaXRzLgogKi8KI2RlZmluZSBGRVRfUlhDRkdfUlhfRVJSUEtUUyAgICAweDAx CiNkZWZpbmUgRkVUX1JYQ0ZHX1JYX1JVTlQgICAweDAyCiNkZWZpbmUgRkVUX1JYQ0ZHX1JYX01V TFRJICAweDA0CiNkZWZpbmUgRkVUX1JYQ0ZHX1JYX0JST0FEICAweDA4CiNkZWZpbmUgRkVUX1JY Q0ZHX1JYX1BST01JU0MgICAgMHgxMAojZGVmaW5lIEZFVF9SWENGR19SWF9USFJFU0ggMHhFMAoK I2RlZmluZSBGRVRfUlhUSFJFU0hfMzJCWVRFUyAgICAweDAwCiNkZWZpbmUgRkVUX1JYVEhSRVNI XzY0QllURVMgICAgMHgyMAojZGVmaW5lIEZFVF9SWFRIUkVTSF8xMjhCWVRFUyAgIDB4NDAKI2Rl ZmluZSBGRVRfUlhUSFJFU0hfMjU2QllURVMgICAweDYwCiNkZWZpbmUgRkVUX1JYVEhSRVNIXzUx MkJZVEVTICAgMHg4MAojZGVmaW5lIEZFVF9SWFRIUkVTSF83NjhCWVRFUyAgIDB4QTAKI2RlZmlu ZSBGRVRfUlhUSFJFU0hfMTAyNEJZVEVTICAweEMwCiNkZWZpbmUgRkVUX1JYVEhSRVNIX1NUT1JF TkZXRCAgMHhFMAoKLyoKICogVFggY29uZmlnIGJpdHMuCiAqLwojZGVmaW5lIEZFVF9UWENGR19S U1ZEMCAgICAgMHgwMQojZGVmaW5lIEZFVF9UWENGR19MQjAgICAgICAgMHgwMgojZGVmaW5lIEZF VF9UWENGR19MQjEgICAgICAgMHgwNAojZGVmaW5lIEZFVF9UWENGR19PRlNFVCAgICAgMHgwOAoj ZGVmaW5lIEZFVF9UWENGR19SU1ZEMSAgICAgMHgxMAojZGVmaW5lIEZFVF9UWENGR19UWF9USFJF U0ggMHhFMAoKI2RlZmluZSBGRVRfVFhUSFJFU0hfMTI4QllURVMgICAweDAwCiNkZWZpbmUgRkVU X1RYVEhSRVNIXzI1NkJZVEVTICAgMHgyMAojZGVmaW5lIEZFVF9UWFRIUkVTSF81MTJCWVRFUyAg IDB4NDAKI2RlZmluZSBGRVRfVFhUSFJFU0hfMTAyNEJZVEVTICAweDYwCiNkZWZpbmUgRkVUX1RY VEhSRVNIX1NUT1JFTkZXRCAgMHg4MAoKLyoKICogQ29tbWFuZCByZWdpc3RlciBiaXRzLgogKi8K I2RlZmluZSBGRVRfQ01EX0lOSVQgICAgICAgIDB4MDAwMQojZGVmaW5lIEZFVF9DTURfU1RBUlQg ICAgICAgMHgwMDAyCiNkZWZpbmUgRkVUX0NNRF9TVE9QICAgICAgICAweDAwMDQKI2RlZmluZSBG RVRfQ01EX1JYX09OICAgICAgIDB4MDAwOAojZGVmaW5lIEZFVF9DTURfVFhfT04gICAgICAgMHgw MDEwCiNkZWZpbmUgRkVUX0NNRF9URE1EICAgICAgICAweDAwMjAKI2RlZmluZSBGRVRfQ01EX1JE TUQgICAgICAgIDB4MDA0MAojZGVmaW5lIEZFVF9DTURfUlNWRCAgICAgICAgMHgwMDgwCiNkZWZp bmUgRkVUX0NNRF9SWF9FQVJMWSAgICAweDAxMDAKI2RlZmluZSBGRVRfQ01EX1RYX0VBUkxZICAg IDB4MDIwMAojZGVmaW5lIEZFVF9DTURfRkRYICAgICAweDA0MDAKI2RlZmluZSBGRVRfQ01EX1RY X05PUE9MTCAgIDB4MDgwMAojZGVmaW5lIEZFVF9DTURfS0VZUEFHICAgICAgMHgxMDAwCiNkZWZp bmUgRkVUX0NNRF9URE1EMSAgICAgICAweDIwMDAKI2RlZmluZSBGRVRfQ01EX1JETUQxICAgICAg IDB4NDAwMAojZGVmaW5lIEZFVF9DTURfUkVTRVQgICAgICAgMHg4MDAwCgovKiBEYXZpQ29tIFBI WSBJRCAqLwojZGVmaW5lIENJRF9EQVZJQ09NICAgICAgICAgMHgwMTgxQjgwMCAgICAvKiBPVUkg PSAwMC02MC02RSAsIDB4MDE4MSBCODAwICovCiNkZWZpbmUgQ0lEX0RBVklDT01fQiAgICAgICAw eDAxODFCODAyCgovKgogKiBJbnRlcnJ1cHQgc3RhdHVzIGJpdHMuCiAqLwojZGVmaW5lIEZFVF9J U1JfUFJYICAgICAweDAwMDEgIC8qIHBhY2tldCByeCBvayAqLwojZGVmaW5lIEZFVF9JU1JfUFRY ICAgICAweDAwMDIgIC8qIHBhY2tldCB0eCBvayAqLwojZGVmaW5lIEZFVF9JU1JfUlhFICAgICAw eDAwMDQgIC8qIHBhY2tldCByeCB3aXRoIGVyciAqLwojZGVmaW5lIEZFVF9JU1JfVFhFICAgICAw eDAwMDggIC8qIHBhY2tldCB0eCB3aXRoIGVycm9yICovCiNkZWZpbmUgRkVUX0lTUl9UVSAgICAg IDB4MDAxMCAgLyogdHggYnVmZmVyIHVuZGVyZmxvdyAqLwojZGVmaW5lIEZFVF9JU1JfUlUgICAg ICAweDAwMjAgIC8qIG5vIHJ4IGJ1ZmZlciBhdmFpbGFibGUgKi8KI2RlZmluZSBGRVRfSVNSX0JF ICAgICAgMHgwMDQwICAvKiBQQ0kgYnVzIGVycm9yICovCiNkZWZpbmUgRkVUX0lTUl9DTlQgICAg IDB4MDA4MCAgLyogc3RhdHMgY291bnRlciBvZmxvdyAqLwojZGVmaW5lIEZFVF9JU1JfRVJJICAg ICAweDAxMDAgIC8qIHJ4IGVhcmx5ICovCiNkZWZpbmUgRkVUX0lTUl9FVEkgICAgIDB4MDIwMCAg LyogdHggZWFybHksIGZvciAzMDQzLzMwNzEgKi8KI2RlZmluZSBGRVRfSVNSX1VERkkgICAgICAg IDB4MDIwMCAgLyogVHggZmlmbyB1bmRlcmZsb3cgZXZlbnQsIGZvciAzMDY1ICovCiNkZWZpbmUg RkVUX0lTUl9PVkZJICAgICAgICAweDA0MDAgIC8qIHJ4IEZJRk8gb3ZlcmZsb3cgKi8KI2RlZmlu ZSBGRVRfSVNSX1BLVFJBQ0UgICAgIDB4MDgwMAojZGVmaW5lIEZFVF9JU1JfUlhfTk9SQkYgICAg MHgxMDAwCiNkZWZpbmUgRkVUX0lTUl9UWF9BQlRJICAgICAweDIwMDAKI2RlZmluZSBGRVRfSVNS X1NSQ0kgICAgICAgIDB4NDAwMAojZGVmaW5lIEZFVF9JU1JfS0VZSSAgICAgICAgMHg4MDAwICAv KiBmb3IgMzA0My8zMDcxICovCiNkZWZpbmUgRkVUX0lTUl9HRU5JICAgICAgICAweDgwMDAgIC8q IGZvciAzMDY1ICovCiNkZWZpbmUgRkVUX01JU1JfVERXQlJBSSAgICAweDA4CgovKgogKiBJbnRl cnJ1cHQgbWFzayBiaXRzLgogKi8KI2RlZmluZSBGRVRfSU1SX1BSWE0gICAgICAgIDB4MDAwMSAg LyogcGFja2V0IHJ4IG9rICovCiNkZWZpbmUgRkVUX0lNUl9QVFhNICAgICAgICAweDAwMDIgIC8q IHBhY2tldCB0eCBvayAqLwojZGVmaW5lIEZFVF9JTVJfUlhFTSAgICAgICAgMHgwMDA0ICAvKiBw YWNrZXQgcnggd2l0aCBlcnIgKi8KI2RlZmluZSBGRVRfSU1SX1RYRU0gICAgICAgIDB4MDAwOCAg LyogdHggYWJvcnRlZCBkdWUgdG8gZXhjZXNzIGNvbGxzICovCiNkZWZpbmUgRkVUX0lNUl9UVU0g ICAgIDB4MDAxMCAgLyogdHggYnVmZmVyIHVuZGVyZmxvdyAqLwojZGVmaW5lIEZFVF9JTVJfUlVN ICAgICAweDAwMjAgIC8qIG5vIHJ4IGJ1ZmZlciBhdmFpbGFibGUgKi8KI2RlZmluZSBGRVRfSU1S X0JFTSAgICAgMHgwMDQwICAvKiBQQ0kgYnVzIGVycm9yICovCiNkZWZpbmUgRkVUX0lNUl9DTlRN ICAgICAgICAweDAwODAgIC8qIHN0YXRzIGNvdW50ZXIgb2Zsb3cgKi8KI2RlZmluZSBGRVRfSU1S X0VSTSAgICAgMHgwMTAwICAvKiByeCBlYXJseSAqLwojZGVmaW5lIEZFVF9JTVJfRVRNICAgICAw eDAyMDAgIC8qIE1JSSBzdGF0dXMgY2hhbmdlICovCiNkZWZpbmUgRkVUX0lTUl9VREZNICAgICAg ICAweDAyMDAgIC8qIFR4IGZpZm8gdW5kZXJmbG93IGV2ZW50LCBmb3IgMzA2NSAqLwojZGVmaW5l IEZFVF9JTVJfT1ZGTSAgICAgICAgMHgwNDAwICAvKiByeCBGSUZPIG92ZXJmbG93ICovCiNkZWZp bmUgRkVUX0lNUl9QUkFJTSAgICAgICAweDA4MDAKI2RlZmluZSBGRVRfSU1SX05CRk0gICAgICAg IDB4MTAwMAojZGVmaW5lIEZFVF9JTVJfQUJUTSAgICAgICAgMHgyMDAwCiNkZWZpbmUgRkVUX0lN Ul9TUkNNICAgICAgICAweDQwMDAKI2RlZmluZSBGRVRfSU1SX0tFWUlNICAgICAgIDB4ODAwMAoj ZGVmaW5lIEZFVF9JU1JfR0VOSU0gICAgICAgMHg4MDAwICAvKiBmb3IgMzA2NSAqLwojZGVmaW5l IEZFVF9NSU1SX1REV0JSQUkgICAgMHgwOAovKiBkZWZpbmUgaW1yc2hhZG93ICovCgojZGVmaW5l IElNUlNoYWRvdyAgICAgICAweDYyMEYKI2RlZmluZSBNSU1SU2hhZG93ICAgICAgMHgwOAovKgog KiBNSUkgc3RhdHVzIHJlZ2lzdGVyLgogKi8KCiNkZWZpbmUgRkVUX01JSVNSX1NQRUVEICAgICAw eDAxCiNkZWZpbmUgRkVUX01JSVNSX0xOS0ZMICAgICAweDAyCiNkZWZpbmUgRkVUX01JSVNSX01H VFJFQURFUlIgICAgMHgwNAojZGVmaW5lIEZFVF9NSUlTUl9NSUlFUlIgICAgMHgwOAojZGVmaW5l IEZFVF9NSUlTUl9QSFlPUFQgICAgMHgxMAojZGVmaW5lIEZFVF9NSUlTUl9NRENfU1BFRUQgMHgy MAojZGVmaW5lIEZFVF9NSUlTUl9SU1ZEICAgICAgMHg0MAojZGVmaW5lIEZFVF9NSUlTUl9HUElP MVBPTEwgMHg4MAoKLyoKICogTUlJIENTUiBvZmZzZXQgKDB4NzEpIHJlZ2lzdGVyIGJpdHMuCiAq LwojZGVmaW5lIEZFVF9NSUlBRERSX01JRExFICAgMHg4MAojZGVmaW5lIEZFVF9NSUlBRERSX01T UkNFTiAgMHg0MAojZGVmaW5lIEZFVF9NSUlBRERSX01ET05FICAgMHgyMAojZGVmaW5lIEZFVF9N SUlBRERSX01BRDQgICAgMHgxMAojZGVmaW5lIEZFVF9NSUlBRERSX01BRDMgICAgMHgwOAojZGVm aW5lIEZFVF9NSUlBRERSX01BRDIgICAgMHgwNAojZGVmaW5lIEZFVF9NSUlBRERSX01BRDEgICAg MHgwMgojZGVmaW5lIEZFVF9NSUlBRERSX01BRDAgICAgMHgwMQoKLyoKICogTUlJIGNvbW1hbmQg cmVnaXN0ZXIgYml0cy4KICovCiNkZWZpbmUgRkVUX01JSUNSX0NMSyAgICAgICAweDAxCiNkZWZp bmUgRkVUX01JSUNSX0RBVEFPVVQgICAweDAyCiNkZWZpbmUgRkVUX01JSUNSX0RBVEFJTiAgICAw eDA0CiNkZWZpbmUgRkVUX01JSUNSX0RJUiAgICAgICAweDA4CiNkZWZpbmUgRkVUX01JSUNSX0RJ UkVDVFBHTSAweDEwCiNkZWZpbmUgRkVUX01JSUNSX1dDTUQgICAgICAweDIwCiNkZWZpbmUgRkVU X01JSUNSX1JDTUQgICAgICAweDQwCiNkZWZpbmUgRkVUX01JSUNSX01BVVRPICAgICAweDgwCgov KgogKiBFRVBST00gY29udHJvbCBiaXRzLgogKi8KI2RlZmluZSBGRVRfRUVDU1JfREFUQUlOICAg IDB4MDEgICAgLyogZGF0YSBvdXQgKi8KI2RlZmluZSBGRVRfRUVDU1JfREFUQU9VVCAgIDB4MDIg ICAgLyogZGF0YSBpbiAqLwojZGVmaW5lIEZFVF9FRUNTUl9DTEsgICAgICAgMHgwNCAgICAvKiBj bG9jayAqLwojZGVmaW5lIEZFVF9FRUNTUl9DUyAgICAgICAgMHgwOCAgICAvKiBjaGlwIHNlbGVj dCAqLwojZGVmaW5lIEZFVF9FRUNTUl9EUE0gICAgICAgMHgxMAojZGVmaW5lIEZFVF9FRUNTUl9M T0FEICAgICAgMHgyMAojZGVmaW5lIEZFVF9FRUNTUl9FTUJQICAgICAgMHg0MAojZGVmaW5lIEZF VF9FRUNTUl9FRVBSICAgICAgMHg4MAoKI2RlZmluZSBGRVRfRUVDTURfV1JJVEUgICAgIDB4MTQw CiNkZWZpbmUgRkVUX0VFQ01EX1JFQUQgICAgICAweDE4MAojZGVmaW5lIEZFVF9FRUNNRF9FUkFT RSAgICAgMHgxYzAKCi8qCiAqIEJpdHMgaW4gdGhlIEJDUjAgcmVnaXN0ZXIKICovCiNkZWZpbmUg RkVUX0JDUjBfTUVEMiAgICAgICAweDgwCiNkZWZpbmUgRkVUX0JDUjBfTEVEMTAwTSAgICAweDQw CiNkZWZpbmUgRkVUX0JDUjBfQ1JGVDIgICAgICAweDIwCiNkZWZpbmUgRkVUX0JDUjBfQ1JGVDEg ICAgICAweDEwCiNkZWZpbmUgRkVUX0JDUjBfQ1JGVDAgICAgICAweDA4CiNkZWZpbmUgRkVUX0JD UjBfRE1BTDIgICAgICAweDA0CiNkZWZpbmUgRkVUX0JDUjBfRE1BTDEgICAgICAweDAyCiNkZWZp bmUgRkVUX0JDUjBfRE1BTDAgICAgICAweDAxCgovKgogKiBCaXRzIGluIHRoZSBCQ1IxIHJlZ2lz dGVyCiAqLwojZGVmaW5lIEZFVF9CQ1IxX01FRDEgICAgICAgMHg4MAojZGVmaW5lIEZFVF9CQ1Ix X01FRDAgICAgICAgMHg0MAojZGVmaW5lIEZFVF9CQ1IxX0NUU0YgICAgICAgMHgyMAojZGVmaW5l IEZFVF9CQ1IxX0NURlQxICAgICAgMHgxMAojZGVmaW5lIEZFVF9CQ1IxX0NURlQwICAgICAgMHgw OAojZGVmaW5lIEZFVF9CQ1IxX1BPVDIgICAgICAgMHgwNAojZGVmaW5lIEZFVF9CQ1IxX1BPVDEg ICAgICAgMHgwMgojZGVmaW5lIEZFVF9CQ1IxX1BPVDAgICAgICAgMHgwMQoKLyoKICogQml0cyBp biB0aGUgQ0ZHQiByZWdpc3RlcgogKi8KI2RlZmluZSBGRVRfQ0ZHQl9RUEtURElTICAgIDB4ODAK I2RlZmluZSBGRVRfQ0ZHQl9NUkxESVMgICAgIDB4MjAKCi8qCiAqIENGR0MgY29udHJvbCBiaXRz LgogKi8KI2RlZmluZSBGRVRfQ0ZHQ19NRURFTiAgICAgIDB4ODAKI2RlZmluZSBGRVRfQ0ZHQ19C Uk9QVCAgICAgIDB4NDAKI2RlZmluZSBGRVRfQ0ZHQ19ETFlFTiAgICAgIDB4MjAKI2RlZmluZSBG RVRfQ0ZHQ19EVFNFTCAgICAgIDB4MTAKI2RlZmluZSBGRVRfQ0ZHQ19CVFNFTCAgICAgIDB4MDgK I2RlZmluZSBGRVRfQ0ZHQ19CUFMyICAgICAgIDB4MDQKI2RlZmluZSBGRVRfQ0ZHQ19CUFMxICAg ICAgIDB4MDIKI2RlZmluZSBGRVRfQ0ZHQ19CUFMwICAgICAgIDB4MDEKCi8qCiAqIENGR0QgY29u dHJvbCBiaXRzLgogKi8KI2RlZmluZSBGRVRfQ0ZHRF9HUElPRU4gICAgIDB4ODAKI2RlZmluZSBG RVRfQ0ZHRF9ESUFHICAgICAgIDB4NDAKI2RlZmluZSBGRVRfQ0ZHRF9NUkRMRU4gICAgIDB4MjAK I2RlZmluZSBGRVRfQ0ZHRF9NQUdJQyAgICAgIDB4MTAKI2RlZmluZSBGRVRfQ0ZHRF9DUkFET00g ICAgIDB4MDgKI2RlZmluZSBGRVRfQ0ZHRF9DQVAgICAgICAgIDB4MDQKI2RlZmluZSBGRVRfQ0ZH RF9NQkEgICAgICAgIDB4MDIKI2RlZmluZSBGRVRfQ0ZHRF9CQUtPUFQgICAgIDB4MDEKCi8qCiAq IFRlc3QgcmVnaXN0ZXIgYml0cy4KICovCiNkZWZpbmUgRkVUX1RFU1RfVEVTVDAgICAgICAweDAx CiNkZWZpbmUgRkVUX1RFU1RfVEVTVDEgICAgICAweDAyCiNkZWZpbmUgRkVUX1RFU1RfVEVTVDIg ICAgICAweDA0CiNkZWZpbmUgRkVUX1RFU1RfVFNUVUQgICAgICAweDA4CiNkZWZpbmUgRkVUX1RF U1RfVFNUT1YgICAgICAweDEwCiNkZWZpbmUgRkVUX1RFU1RfQktPRkYgICAgICAweDIwCiNkZWZp bmUgRkVUX1RFU1RfRkNPTCAgICAgICAweDQwCiNkZWZpbmUgRkVUX1RFU1RfSEJERVMgICAgICAw eDgwCgovKgogKiBDb25maWcgcmVnaXN0ZXIgYml0cy4KICovCiNkZWZpbmUgRkVUX0NGR19HUElP Mk9VVEVOQiAweDAwMDAwMDAxCiNkZWZpbmUgRkVUX0NGR19HUElPMk9VVCAgICAweDAwMDAwMDAy ICAvKiBnZW4uIHB1cnAuIHBpbiAqLwojZGVmaW5lIEZFVF9DRkdfR1BJTzJJTiAgICAgMHgwMDAw MDAwNCAgLyogZ2VuLiBwdXJwLiBwaW4gKi8KI2RlZmluZSBGRVRfQ0ZHX0FVVE9PUFQgICAgIDB4 MDAwMDAwMDggIC8qIGVuYWJsZSByeC90eCBhdXRvcG9sbCAqLwojZGVmaW5lIEZFVF9DRkdfTUlJ T1BUICAgICAgMHgwMDAwMDAxMAojZGVmaW5lIEZFVF9DRkdfTU1JRU5CICAgICAgMHgwMDAwMDAy MCAgLyogbWVtb3J5IG1hcHBlZCBtb2RlIGVuYiAqLwojZGVmaW5lIEZFVF9DRkdfSlVNUEVSICAg ICAgMHgwMDAwMDA0MCAgLyogUEhZIGFuZCBvcGVyLiBtb2RlIHNlbGVjdCAqLwojZGVmaW5lIEZF VF9DRkdfRUVMT0FEICAgICAgMHgwMDAwMDA4MCAgLyogZW5hYmxlIEVFUFJPTSBwcm9ncmFtbWlu ZyAqLwojZGVmaW5lIEZFVF9DRkdfTEFUTUVOQiAgICAgMHgwMDAwMDEwMCAgLyogbGFyZW5jeSB0 aW1lciBlZmZlY3QgZW5iLiAqLwojZGVmaW5lIEZFVF9DRkdfTVJSRUFEV0FJVCAgMHgwMDAwMDIw MAojZGVmaW5lIEZFVF9DRkdfTVJXUklURVdBSVQgMHgwMDAwMDQwMAojZGVmaW5lIEZFVF9DRkdf UlhfQVJCICAgICAgMHgwMDAwMDgwMAojZGVmaW5lIEZFVF9DRkdfVFhfQVJCICAgICAgMHgwMDAw MTAwMAojZGVmaW5lIEZFVF9DRkdfUkVBRE1VTFRJICAgMHgwMDAwMjAwMAojZGVmaW5lIEZFVF9D RkdfVFhfUEFDRSAgICAgMHgwMDAwNDAwMAojZGVmaW5lIEZFVF9DRkdfVFhfUURJUyAgICAgMHgw MDAwODAwMAojZGVmaW5lIEZFVF9DRkdfUk9NU0VMMCAgICAgMHgwMDAxMDAwMAojZGVmaW5lIEZF VF9DRkdfUk9NU0VMMSAgICAgMHgwMDAyMDAwMAojZGVmaW5lIEZFVF9DRkdfUk9NU0VMMiAgICAg MHgwMDA0MDAwMAojZGVmaW5lIEZFVF9DRkdfUk9NVElNRVNFTCAgMHgwMDA4MDAwMAojZGVmaW5l IEZFVF9DRkdfUlNWRDAgICAgICAgMHgwMDEwMDAwMAojZGVmaW5lIEZFVF9DRkdfUk9NRExZICAg ICAgMHgwMDIwMDAwMAojZGVmaW5lIEZFVF9DRkdfUk9NT1BUICAgICAgMHgwMDQwMDAwMAojZGVm aW5lIEZFVF9DRkdfUlNWRDEgICAgICAgMHgwMDgwMDAwMAojZGVmaW5lIEZFVF9DRkdfQkFDS09G Rk9QVCAgMHgwMTAwMDAwMAojZGVmaW5lIEZFVF9DRkdfQkFDS09GRk1PRCAgMHgwMjAwMDAwMAoj ZGVmaW5lIEZFVF9DRkdfQ0FQRUZGRUNUICAgMHgwNDAwMDAwMAojZGVmaW5lIEZFVF9DRkdfQkFD S09GRlJBTkQgMHgwODAwMDAwMAojZGVmaW5lIEZFVF9DRkdfTUFHSUNLUEFDS0VUICAgIDB4MTAw MDAwMDAKI2RlZmluZSBGRVRfQ0ZHX1BDSVJFQURMSU5FIDB4MjAwMDAwMDAKI2RlZmluZSBGRVRf Q0ZHX0RJQUcgICAgICAgIDB4NDAwMDAwMDAKI2RlZmluZSBGRVRfQ0ZHX0dQSU9FTiAgICAgIDB4 ODAwMDAwMDAKCi8qIE1JU0MuQ1IxIHJlZ2lzdGVyIGJpdHMgKi8KCiNkZWZpbmUgRkVUX01JU0ND UjFfRk9SU1JTVCAweDQwCiNkZWZpbmUgRkVUX01JU0NDUjFfVkFVWEpNUCAweDIwCiNkZWZpbmUg RkVUX01JU0NDUjFfUEhZSU5UICAweDAyCiNkZWZpbmUgRkVUX01JU0NDUjFfVElNRVIxX0VOICAg MHgwMQoKCi8qIE1JU0MgZGVmaW5pdGlvbnMgKi8KI2RlZmluZSBXX01BWF9USU1FT1VUICAgICAg IDB4MEZGRlUKI2RlZmluZSBGRVRfVElNRU9VVCAgICAgMTAwMAojZGVmaW5lIEVUSEVSX0FMSUdO ICAgICAyCgovKgogKiBSaGluZSBUWC9SWCBsaXN0IHN0cnVjdHVyZS4KICovCgpzdHJ1Y3QgZmV0 X2Rlc2MgewogICAgdV9pbnQzMl90ICAgICAgIGZldF9zdGF0dXM7CiAgICB1X2ludDMyX3QgICAg ICAgZmV0X2N0bDsKICAgIHVfaW50MzJfdCAgICAgICBmZXRfcHRyMTsKICAgIHVfaW50MzJfdCAg ICAgICBmZXRfcHRyMjsKfTsKCiNkZWZpbmUgZmV0X2RhdGEgICAgICAgIGZldF9wdHIxCiNkZWZp bmUgZmV0X25leHQgICAgICAgIGZldF9wdHIyCgoKI2RlZmluZSBGRVRfUlhTVEFUX1JYRVJSICAg ICAgICAweDAwMDAwMDAxCiNkZWZpbmUgRkVUX1JYU1RBVF9DUkNFUlIgICAgICAgMHgwMDAwMDAw MgojZGVmaW5lIEZFVF9SWFNUQVRfRlJBTUVBTElHTkVSUiAgICAweDAwMDAwMDA0CiNkZWZpbmUg RkVUX1JYU1RBVF9GSUZPT0ZMT1cgICAgICAgIDB4MDAwMDAwMDgKI2RlZmluZSBGRVRfUlhTVEFU X0dJQU5UICAgICAgICAweDAwMDAwMDEwCiNkZWZpbmUgRkVUX1JYU1RBVF9SVU5UICAgICAgICAg MHgwMDAwMDAyMAojZGVmaW5lIEZFVF9SWFNUQVRfQlVTRVJSICAgICAgIDB4MDAwMDAwNDAKI2Rl ZmluZSBGRVRfUlhTVEFUX0JVRkZFUlIgICAgICAweDAwMDAwMDgwCiNkZWZpbmUgRkVUX1JYU1RB VF9MQVNURlJBRyAgICAgMHgwMDAwMDEwMAojZGVmaW5lIEZFVF9SWFNUQVRfRklSU1RGUkFHICAg ICAgICAweDAwMDAwMjAwCiNkZWZpbmUgRkVUX1JYU1RBVF9STElOSyAgICAgICAgMHgwMDAwMDQw MAojZGVmaW5lIEZFVF9SWFNUQVRfUlhfUEhZUyAgICAgIDB4MDAwMDA4MDAKI2RlZmluZSBGRVRf UlhTVEFUX1JYX0JST0FEICAgICAweDAwMDAxMDAwCiNkZWZpbmUgRkVUX1JYU1RBVF9SWF9NVUxU SSAgICAgMHgwMDAwMjAwMAojZGVmaW5lIEZFVF9SWFNUQVRfUlhfT0sgICAgICAgIDB4MDAwMDQw MDAKI2RlZmluZSBGRVRfUlhTVEFUX1JYTEVOICAgICAgICAweDA3RkYwMDAwCiNkZWZpbmUgRkVU X1JYU1RBVF9SWExFTl9FWFQgICAgICAgIDB4NzgwMDAwMDAKI2RlZmluZSBGRVRfUlhTVEFUX09X TiAgICAgICAgICAweDgwMDAwMDAwCgojZGVmaW5lIEZFVF9SWEJZVEVTKHgpICAgICAgKCh4ICYg RkVUX1JYU1RBVF9SWExFTikgPj4gMTYpCiNkZWZpbmUgRkVUX1JYU1RBVCAoRkVUX1JYU1RBVF9G SVJTVEZSQUd8RkVUX1JYU1RBVF9MQVNURlJBR3xGRVRfUlhTVEFUX09XTikKCiNkZWZpbmUgRkVU X1JYQ1RMX0JVRkxFTiAgICAweDAwMDAwODAwCiNkZWZpbmUgRkVUX1JYQ1RMX0JVRkxFTl9FWFQg ICAgMHgwMDAwNzgwMAojZGVmaW5lIEZFVF9SWENUTF9DSEFJTiAgICAgMHgwMDAwODAwMAojZGVm aW5lIEZFVF9SWENUTF9SWF9JTlRSICAgMHgwMDgwMDAwMAoKI2RlZmluZSBGRVRfUlhDVEwgKEZF VF9SWENUTF9DSEFJTnxGRVRfUlhDVExfQlVGTEVOKQoKI2RlZmluZSBGRVRfUlhDVExfVEFHICAg ICAgIDB4MDAwMTAwMDAKCiNkZWZpbmUgRkVUX1RYU1RBVF9ERUZFUiAgICAweDAwMDAwMDAxCiNk ZWZpbmUgRkVUX1RYU1RBVF9DT0xMQ05UICAweDAwMDAwMDBGCiNkZWZpbmUgRkVUX1RYU1RBVF9B UUUgICAgICAweDAwMDAwMDgwCiNkZWZpbmUgRkVUX1RYU1RBVF9BQlQgICAgICAweDAwMDAwMTAw CiNkZWZpbmUgRkVUX1RYU1RBVF9MQVRFQ09MTCAweDAwMDAwMjAwCiNkZWZpbmUgRkVUX1RYU1RB VF9DUlMgICAgICAweDAwMDAwNDAwCiNkZWZpbmUgRkVUX1RYU1RBVF9VREYgICAgICAweDAwMDAw ODAwCiNkZWZpbmUgRkVUX1RYU1RBVF9UQlVGRiAgICAweDAwMDAxMDAwCiNkZWZpbmUgRkVUX1RY U1RBVF9TRVJSICAgICAweDAwMDAyMDAwCiNkZWZpbmUgRkVUX1RYU1RBVF9KQUJUSU1FTyAweDAw MDA0MDAwCiNkZWZpbmUgRkVUX1RYU1RBVF9FUlJTVU0gICAweDAwMDA4MDAwCiNkZWZpbmUgRkVU X1RYU1RBVF9PV04gICAgICAweDgwMDAwMDAwCgojZGVmaW5lIEZFVF9UWENUTF9CVUZMRU4gICAg MHgwMDAwMDgwMAojZGVmaW5lIEZFVF9UWENUTF9CVUZMRU5fRVhUICAgIDB4MDAwMDc4MDAKI2Rl ZmluZSBGRVRfVFhDVExfVExJTksgICAgIDB4MDAwMDgwMDAKI2RlZmluZSBGRVRfVFhDVExfRklS U1RGUkFHIDB4MDAyMDAwMDAKI2RlZmluZSBGRVRfVFhDVExfTEFTVEZSQUcgIDB4MDA0MDAwMDAK I2RlZmluZSBGRVRfVFhDVExfRklOVCAgICAgIDB4MDA4MDAwMDAKCgojZGVmaW5lIEZFVF9NQVhG UkFHUyAgICAgICAgMTYKI2RlZmluZSBGRVRfUlhfTElTVF9DTlQgICAgIDY0CiNkZWZpbmUgRkVU X1RYX0xJU1RfQ05UICAgICAxMjgKI2RlZmluZSBGRVRfTUlOX0ZSQU1FTEVOICAgIDYwCiNkZWZp bmUgRkVUX0ZSQU1FTEVOICAgICAgICAxNTM2CiNkZWZpbmUgRkVUX1JYTEVOICAgICAgIDE1MjAK I2RlZmluZSBNQVhfUEFDS0VUX0xFTiAgICAgICAgICAxNTE0CiNkZWZpbmUgVV9DUkNfTEVOICAg ICAgICAgICAgICAgNAojZGVmaW5lIFVfSEVBREVSX0xFTiAgICAgICAgMTQKI2RlZmluZSBGRVRf VFhPV04oeCkgICAgICAgIHgtPmZldF9wdHItPmZldF9zdGF0dXMKCnN0cnVjdCBmZXRfbGlzdF9k YXRhIHsKICAgIHN0cnVjdCBmZXRfZGVzYyAgICAgZmV0X3J4X2xpc3RbRkVUX1JYX0xJU1RfQ05U XTsKICAgIHN0cnVjdCBmZXRfZGVzYyAgICAgZmV0X3R4X2xpc3RbRkVUX1RYX0xJU1RfQ05UXTsK fTsKCnN0cnVjdCBmZXRfY2hhaW4gewogICAgc3RydWN0IGZldF9kZXNjICAgICAqZmV0X3B0cjsK ICAgIHN0cnVjdCBtYnVmICAgICAqZmV0X21idWY7CiAgICBzdHJ1Y3QgZmV0X2NoYWluICAgICAg ICAqZmV0X25leHRkZXNjOwp9OwoKc3RydWN0IGZldF9jaGFpbl9vbmVmcmFnIHsKICAgIHN0cnVj dCBmZXRfZGVzYyAgICAgKmZldF9wdHI7CiAgICBzdHJ1Y3QgbWJ1ZiAgICAgKmZldF9tYnVmOwog ICAgc3RydWN0IGZldF9jaGFpbl9vbmVmcmFnICAgICpmZXRfbmV4dGRlc2M7Cn07CgpzdHJ1Y3Qg ZmV0X2NoYWluX2RhdGEgewogICAgc3RydWN0IGZldF9jaGFpbl9vbmVmcmFnICAgIGZldF9yeF9j aGFpbltGRVRfUlhfTElTVF9DTlRdOwogICAgc3RydWN0IGZldF9jaGFpbiAgICAgICAgZmV0X3R4 X2NoYWluW0ZFVF9UWF9MSVNUX0NOVF07CgogICAgc3RydWN0IGZldF9jaGFpbl9vbmVmcmFnICAg ICpmZXRfcnhfaGVhZDsKCiAgICBzdHJ1Y3QgZmV0X2NoYWluICAgICAgICAqZmV0X3R4X2hlYWQ7 CiAgICBzdHJ1Y3QgZmV0X2NoYWluICAgICAgICAqZmV0X3R4X3RhaWw7CiAgICBzdHJ1Y3QgZmV0 X2NoYWluICAgICAgICAqZmV0X3R4X2ZyZWU7CiAgICAgICAgdV9pbnQxNl90ICAgICAgICAgICBm ZXRfZnJlZV90eF9jb3VudDsKfTsKCnN0cnVjdCBmZXRfdHlwZSB7CiAgICB1X2ludDE2X3QgICAg ICAgZmV0X3ZpZDsKICAgIHVfaW50MTZfdCAgICAgICBmZXRfZGlkOwogICAgY2hhciAgICAgICAg ICAgICpmZXRfbmFtZTsKfTsKCnN0cnVjdCBmZXRfbWlpX2ZyYW1lIHsKICAgIHVfaW50OF90ICAg ICAgICBtaWlfc3RkZWxpbTsKICAgIHVfaW50OF90ICAgICAgICBtaWlfb3Bjb2RlOwogICAgdV9p bnQ4X3QgICAgICAgIG1paV9waHlhZGRyOwogICAgdV9pbnQ4X3QgICAgICAgIG1paV9yZWdhZGRy OwogICAgdV9pbnQ4X3QgICAgICAgIG1paV90dXJuYXJvdW5kOwogICAgdV9pbnQxNl90ICAgICAg IG1paV9kYXRhOwp9OwoKLyoKICogTUlJIGNvbnN0YW50cwogKi8KI2RlZmluZSBGRVRfTUlJX1NU QVJUREVMSU0gIDB4MDEKI2RlZmluZSBGRVRfTUlJX1JFQURPUCAgICAgIDB4MDIKI2RlZmluZSBG RVRfTUlJX1dSSVRFT1AgICAgIDB4MDEKI2RlZmluZSBGRVRfTUlJX1RVUk5BUk9VTkQgIDB4MDIK CiNkZWZpbmUgRkVUX0ZMQUdfRk9SQ0VERUxBWSAxCiNkZWZpbmUgRkVUX0ZMQUdfU0NIRURERUxB WSAyCiNkZWZpbmUgRkVUX0ZMQUdfREVMQVlUSU1FTyAzCgovKiBtb2RlIHN1cHBvcnRlZCAqLwp0 eXBlZGVmIGVudW0gewogICAgRkVUX0FVVE8sCiAgICBGRVRfMTAwX0ZEWCwKICAgIEZFVF8xMDBf SERYLAogICAgRkVUXzEwX0ZEWCwKICAgIEZFVF8xMF9IRFgKfSBmZXRfbW9kZWluZm9fdDsKCi8q IFN1cHBvcnRlZCBtZWRpYSB0eXBlcy4gKi8KY29uc3QgaW50IGZldF9tZWRpYV9zdGFuZGFyZFtd ID0gewogICAgSUZNX0VUSEVSfElGTV8xMF9ULAogICAgSUZNX0VUSEVSfElGTV8xMF9UfElGTV9G RFgsCiAgICBJRk1fRVRIRVJ8SUZNXzEwMF9UWCwKICAgIElGTV9FVEhFUnxJRk1fMTAwX1RYfElG TV9GRFgsCiAgICBJRk1fRVRIRVJ8SUZNX0FVVE8sCn07CgovKgogKiAgcmV2aXNpb24gaWQKICov CiNkZWZpbmUgUkVWX0lEX1ZUMzA0M19FICAgICAweDA0CiNkZWZpbmUgUkVWX0lEX1ZUMzA3MV9B ICAgICAweDIwCiNkZWZpbmUgUkVWX0lEX1ZUMzA3MV9CICAgICAweDIxCiNkZWZpbmUgUkVWX0lE X1ZUMzA2NV9BICAgICAweDQwCiNkZWZpbmUgUkVWX0lEX1ZUMzA2NV9CICAgICAweDQxCiNkZWZp bmUgUkVWX0lEX1ZUMzA2NV9DICAgICAweDQyCiNkZWZpbmUgUkVWX0lEX1ZUMzEwNiAgICAgICAw eDgwCiNkZWZpbmUgUkVWX0lEX1ZUMzEwNl9KICAgICAweDgwICAgIC8qIDB4ODAtMHg4RiAqLwoj ZGVmaW5lIFJFVl9JRF9WVDMxMDZfUyAgICAgMHg5MCAgICAvKiAweDkwLTB4QTAgKi8KCiNpZiBf X0ZyZWVCU0RfdmVyc2lvbiA+PSA0MDAwMDAKc3RydWN0IGZldF9zb2Z0YyB7CiAgICBzdHJ1Y3Qg YXJwY29tICAgICAgIGFycGNvbTsgICAgIC8qIGludGVyZmFjZSBpbmZvICovCiAgICBidXNfc3Bh Y2VfaGFuZGxlX3QgIGZldF9iaGFuZGxlOyAgICAvKiBidXMgc3BhY2UgaGFuZGxlICovCiAgICBi dXNfc3BhY2VfdGFnX3QgICAgIGZldF9idGFnOyAgIC8qIGJ1cyBzcGFjZSB0YWcgKi8KICAgIHN0 cnVjdCByZXNvdXJjZSAgICAgKmZldF9yZXMxOwogICAgc3RydWN0IHJlc291cmNlICAgICAqZmV0 X3JlczI7CiAgICBzdHJ1Y3QgcmVzb3VyY2UgICAgICpmZXRfaXJxOwogICAgdm9pZCAgICAgICAg ICAgICpmZXRfaW50cmhhbmQ7CiAgICBzdHJ1Y3QgZmV0X3R5cGUgICAgICpmZXRfaW5mbzsgIC8q IFJoaW5lIGFkYXB0ZXIgaW5mbyAqLwogICAgdV9pbnQ4X3QgICAgICAgIGZldF91bml0OyAgIC8q IGludGVyZmFjZSBudW1iZXIgKi8KICAgIHVfaW50OF90ICAgICAgICBmZXRfdHlwZTsKICAgIHVf aW50OF90ICAgICAgICBmZXRfYXV0b25lZzsgICAgLyogbWVkaWEgY29uZmlndXJhdGlvbiAxOmF1 dG8sIDA6Zm9yY2UqLwogICAgdV9pbnQ4X3QgICAgICAgIGZldF9mdWxsX2R1cGxleDsgLyogMTog ZnVsbCBkdXBsZXgsIDA6aGFsZiBkdXBsZXgqLwogICAgdV9pbnQ4X3QgICAgICAgICAgICBmZXRf c3BlZWQ7CiAgICAgICAgdV9pbnQ4X3QgICAgICAgICAgICBmZXRfTldBWV9Gb3JjZTsgLyogMTog ZG8gbndheV9mb3JjZSAsIDA6IG5vdCBud2F5X2ZvcmNlKi8KICAgICAgICB1X2ludDhfdCAgICAg ICAgICAgIGZldF9GbG93Q29udHJvbDsvKiAxOiBoYXJkd2FyZSBkZWZhdWx0LCAyOiBkaXNhYmxl IFBBVVNFIGluIEFOQVIsIDM6IGVuYWJsZSBQQVVTRSBpbiBBTkFSLiovCiAgICB1X2ludDhfdCAg ICAgICAgZmV0X2NoaXBfcmV2aWQ7IC8qIHJldmlzaW9uIG9mIGNoaXAgKi8KICAgICAgICB1X2lu dDhfdCAgICAgICAgICAgIGZldF9zZXRfbWVkZW47ICAvKiBzZXQgTUVERU4gYml0IGluIENGR0Mg Ki8KICAgIGZldF9tb2RlaW5mb190ICAgICAgZmV0X21vZGVpbmZvOyAgIC8qIHR5cGUgb2YgbW9k ZSAqLwogICAgc3RydWN0IGlmbWVkaWEgICAgICBpZm1lZGlhOyAgICAvKiBtZWRpYSBpbmZvICov ICAgICAgICAgICAgCiAgICBzdHJ1Y3QgZmV0X2xpc3RfZGF0YSAgICAqZmV0X2xkYXRhOwogICAg c3RydWN0IGZldF9jaGFpbl9kYXRhICAgZmV0X2NkYXRhOwogICAgc3RydWN0IGNhbGxvdXRfaGFu ZGxlICAgZmV0X3N0YXRfY2g7CiAgICBpbnQgICAgICAgICAgICAgICAgICAgICB0eF90aHJlc2g7 CiAgICBpbnQgICAgICAgICAgICAgICAgICAgICByeF90aHJlc2g7Cn07CgojZWxpZiBfX0ZyZWVC U0RfdmVyc2lvbiA8IDQwMDAwMApzdHJ1Y3QgZmV0X3NvZnRjIHsKICAgIHN0cnVjdCBhcnBjb20g ICAgICAgYXJwY29tOyAgICAgLyogaW50ZXJmYWNlIGluZm8gKi8KICAgIHN0cnVjdCBpZm1lZGlh ICAgICAgaWZtZWRpYTsgICAgLyogbWVkaWEgaW5mbyAqLwogICAgYnVzX3NwYWNlX2hhbmRsZV90 ICBmZXRfYmhhbmRsZTsgICAgLyogYnVzIHNwYWNlIGhhbmRsZSAqLwogICAgYnVzX3NwYWNlX3Rh Z190ICAgICBmZXRfYnRhZzsgICAvKiBidXMgc3BhY2UgdGFnICovCiAgICBzdHJ1Y3QgZmV0X3R5 cGUgICAgICpmZXRfaW5mbzsgIC8qIFJoaW5lIGFkYXB0ZXIgaW5mbyAqLwogICAgc3RydWN0IGZl dF90eXBlICAgICAqZmV0X3BpbmZvOyAvKiBwaHkgaW5mbyAqLwogICAgdV9pbnQ4X3QgICAgICAg IGZldF91bml0OyAgIC8qIGludGVyZmFjZSBudW1iZXIgKi8KICAgIHVfaW50OF90ICAgICAgICBm ZXRfdHlwZTsKICAgIHVfaW50OF90ICAgICAgICBmZXRfcGh5X2FkZHI7ICAgLyogUEhZIGFkZHJl c3MgKi8KICAgIHVfaW50OF90ICAgICAgICBmZXRfdHhfcGVuZDsgICAgLyogVFggcGVuZGluZyAq LwogICAgdV9pbnQ4X3QgICAgICAgIGZldF93YW50X2F1dG87CiAgICB1X2ludDhfdCAgICAgICAg ZmV0X2F1dG9uZWc7ICAgIC8qIG1lZGlhIGNvbmZpZ3VyYXRpb24gMTphdXRvIDA6Zm9yY2UqLwog ICAgdV9pbnQ4X3QgICAgICAgIGZldF9mdWxsX2R1cGxleDsKICAgIHVfaW50OF90ICAgICAgICBm ZXRfc3BlZWQ7CiAgICB1X2ludDhfdCAgICAgICAgZmV0X05XQVlfRm9yY2U7IC8qIDE6IGRvIG53 YXlfZm9yY2UgLCAwOiBub3QgbndheV9mb3JjZSovCiAgICB1X2ludDhfdCAgICAgICAgZmV0X0Zs b3dDb250cm9sOy8qIDE6IGhhcmR3YXJlIGRlZmF1bHQuIDI6IGRpc2FibGUgUEFVU0UgaW4gQU5B Ui4gMzogZW5hYmxlIFBBVVNFIGluIEFOQVIuKi8KICAgIHVfaW50OF90ICAgICAgICBmZXRfY2hp cF9yZXZpZDsgLyogcmV2aXNpb24gb2YgY2hpcCAqLwogICAgdV9pbnQ4X3QgICAgICAgIGZldF9z ZXRfbWVkZW47ICAvKiBzZXQgTUVERU4gYml0IGluIENGR0MgKi8KICAgIGZldF9tb2RlaW5mb190 ICBmZXRfbW9kZWluZm87ICAgLyogdHlwZSBvZiBtb2RlICovCiAgICBjYWRkcl90ICAgICAgICAg ZmV0X2xkYXRhX3B0cjsKICAgIHN0cnVjdCBmZXRfbGlzdF9kYXRhICAgICpmZXRfbGRhdGE7CiAg ICBzdHJ1Y3QgZmV0X2NoYWluX2RhdGEgICBmZXRfY2RhdGE7CiAgICBpbnQgdHhfdGhyZXNoOwog ICAgaW50IHJ4X3RocmVzaDsKfTsKI2VuZGlmCgovKgogKiByZWdpc3RlciBzcGFjZSBhY2Nlc3Mg bWFjcm9zCiAqLwojZGVmaW5lIENTUl9XUklURV80KHNjLCByZWcsIHZhbCkgICBcCiAgICBidXNf c3BhY2Vfd3JpdGVfNChzYy0+ZmV0X2J0YWcsIHNjLT5mZXRfYmhhbmRsZSwgcmVnLCB2YWwpCiNk ZWZpbmUgQ1NSX1dSSVRFXzIoc2MsIHJlZywgdmFsKSAgIFwKICAgIGJ1c19zcGFjZV93cml0ZV8y KHNjLT5mZXRfYnRhZywgc2MtPmZldF9iaGFuZGxlLCByZWcsIHZhbCkKI2RlZmluZSBDU1JfV1JJ VEVfMShzYywgcmVnLCB2YWwpICAgXAogICAgYnVzX3NwYWNlX3dyaXRlXzEoc2MtPmZldF9idGFn LCBzYy0+ZmV0X2JoYW5kbGUsIHJlZywgdmFsKQoKI2RlZmluZSBDU1JfUkVBRF80KHNjLCByZWcp ICAgICBcCiAgICBidXNfc3BhY2VfcmVhZF80KHNjLT5mZXRfYnRhZywgc2MtPmZldF9iaGFuZGxl LCByZWcpCiNkZWZpbmUgQ1NSX1JFQURfMihzYywgcmVnKSAgICAgXAogICAgYnVzX3NwYWNlX3Jl YWRfMihzYy0+ZmV0X2J0YWcsIHNjLT5mZXRfYmhhbmRsZSwgcmVnKQojZGVmaW5lIENTUl9SRUFE XzEoc2MsIHJlZykgICAgIFwKICAgIGJ1c19zcGFjZV9yZWFkXzEoc2MtPmZldF9idGFnLCBzYy0+ ZmV0X2JoYW5kbGUsIHJlZykKCgovKgogKiBHZW5lcmFsIGNvbnN0YW50cyB0aGF0IGFyZSBmdW4g dG8ga25vdy4KICoKICogdmVuZG9yIElECiAqLwojZGVmaW5lIFZFTkRPUklEICAgICAgICAweDEx MDYKCi8qCiAqIGRldmljZSBJRHMuCiAqLwojZGVmaW5lIERFVklDRUlEXzMwNDMgICAweDMwNDMK I2RlZmluZSBERVZJQ0VJRF8zMDY1ICAgMHgzMDY1CiNkZWZpbmUgREVWSUNFSURfMzEwNiAgIDB4 MzEwNgojZGVmaW5lIERFVklDRUlEXzMwNTMgICAweDMwNTMKLyoKICogUENJIGxvdyBtZW1vcnkg YmFzZSBhbmQgbG93IEkvTyBiYXNlIHJlZ2lzdGVyLCBhbmQKICogb3RoZXIgUENJIHJlZ2lzdGVy cy4KICovCgojZGVmaW5lIEZFVF9QQ0lfVkVORE9SX0lEICAgMHgwMAojZGVmaW5lIEZFVF9QQ0lf REVWSUNFX0lEICAgMHgwMgojZGVmaW5lIEZFVF9QQ0lfQ09NTUFORCAgICAgMHgwNAojZGVmaW5l IEZFVF9QQ0lfU1RBVFVTICAgICAgMHgwNgojZGVmaW5lIEZFVF9QQ0lfUkVWSUQgICAgICAgMHgw OAojZGVmaW5lIEZFVF9QQ0lfQ0xBU1NDT0RFICAgMHgwOQojZGVmaW5lIEZFVF9QQ0lfTEFURU5D WV9USU1FUiAgIDB4MEQKI2RlZmluZSBGRVRfUENJX0hFQURFUl9UWVBFIDB4MEUKI2RlZmluZSBG RVRfUENJX0xPSU8gICAgICAgIDB4MTAKI2RlZmluZSBGRVRfUENJX0xPTUVNICAgICAgIDB4MTQK I2RlZmluZSBGRVRfUENJX0JJT1NST00gICAgIDB4MzAKI2RlZmluZSBGRVRfUENJX0lOVExJTkUg ICAgIDB4M0MKI2RlZmluZSBGRVRfUENJX0lOVFBJTiAgICAgIDB4M0QKI2RlZmluZSBGRVRfUENJ X01JTkdOVCAgICAgIDB4M0UKI2RlZmluZSBGRVRfUENJX01JTkxBVCAgICAgIDB4MEYKI2RlZmlu ZSBGRVRfUENJX1JFU0VUT1BUICAgIDB4NDgKI2RlZmluZSBGRVRfUENJX0VFUFJPTV9EQVRBIDB4 NEMKI2RlZmluZSBGRVRfUENJX01PREUgICAgICAgICAgICAweDUwCgojZGVmaW5lIFBDSV9WRU5E T1JJRCh4KSAgICAgKCh4KSAmIDB4RkZGRikKI2RlZmluZSBQQ0lfQ0hJUElEKHgpICAgICAgICgo KHgpID4+IDE2KSAmIDB4RkZGRikKCiNkZWZpbmUgRkVUX01PREUzX01JSU9OICAgICAgICAgMHgw NAovKiBwb3dlciBtYW5hZ2VtZW50IHJlZ2lzdGVycyAqLwojZGVmaW5lIEZFVF9QQ0lfQ0FQSUQg ICAgICAgMHhEQyAvKiA4IGJpdHMgKi8KI2RlZmluZSBGRVRfUENJX05FWFRQVFIgICAgIDB4REQg LyogOCBiaXRzICovCiNkZWZpbmUgRkVUX1BDSV9QV1JNR01UQ0FQICAweERFIC8qIDE2IGJpdHMg Ki8KI2RlZmluZSBGRVRfUENJX1BXUk1HTVRDVFJMIDB4RTAgLyogMTYgYml0cyAqLwoKI2RlZmlu ZSBGRVRfUFNUQVRFX01BU0sgICAgIDB4MDAwMwojZGVmaW5lIEZFVF9QU1RBVEVfRDAgICAgICAg MHgwMDAwCiNkZWZpbmUgRkVUX1BTVEFURV9EMSAgICAgICAweDAwMDIKI2RlZmluZSBGRVRfUFNU QVRFX0QyICAgICAgIDB4MDAwMgojZGVmaW5lIEZFVF9QU1RBVEVfRDMgICAgICAgMHgwMDAzCiNk ZWZpbmUgRkVUX1BNRV9FTiAgICAgIDB4MDAxMAojZGVmaW5lIEZFVF9QTUVfU1RBVFVTICAgICAg MHg4MDAwCgojZGVmaW5lIFBIWV9VTktOT1dOICAgICA2CgojZGVmaW5lIEZFVF9QSFlBRERSX01J TiAgICAgMHgwMAojZGVmaW5lIEZFVF9QSFlBRERSX01BWCAgICAgMHgxRgoKI2RlZmluZSBQSFlf Qk1DUiAgICAgICAgMHgwMAojZGVmaW5lIFBIWV9CTVNSICAgICAgICAweDAxCiNkZWZpbmUgUEhZ X1BIWUlEMSAgICAgIDB4MDIKI2RlZmluZSBQSFlfUEhZSUQyICAgICAgMHgwMwojZGVmaW5lIFBI WV9BTkFSICAgICAgICAweDA0CiNkZWZpbmUgUEhZX0xQQVIgICAgICAgIDB4MDUKI2RlZmluZSBQ SFlfQU5FWFAgICAgICAgMHgwNgoKCiNkZWZpbmUgUEhZX0FOQVJfTkVYVFBBR0UgICAweDgwMDAK I2RlZmluZSBQSFlfQU5BUl9SU1ZEMCAgICAgIDB4NDAwMAojZGVmaW5lIFBIWV9BTkFSX1RMUkZM VCAgICAgMHgyMDAwCiNkZWZpbmUgUEhZX0FOQVJfUlNWRDEgICAgICAweDEwMDAKI2RlZmluZSBQ SFlfQU5BUl9SU1ZEMiAgICAgIDB4MDgwMAojZGVmaW5lIFBIWV9BTkFSX1JTVkQzICAgICAgMHgw NDAwCiNkZWZpbmUgUEhZX0FOQVJfMTAwQlQ0ICAgICAweDAyMDAKI2RlZmluZSBQSFlfQU5BUl8x MDBCVFhGVUxMIDB4MDEwMAojZGVmaW5lIFBIWV9BTkFSXzEwMEJUWEhBTEYgMHgwMDgwCiNkZWZp bmUgUEhZX0FOQVJfMTBCVEZVTEwgICAweDAwNDAKI2RlZmluZSBQSFlfQU5BUl8xMEJUSEFMRiAg IDB4MDAyMAojZGVmaW5lIFBIWV9BTkFSX1BST1RPNCAgICAgMHgwMDEwCiNkZWZpbmUgUEhZX0FO QVJfUFJPVE8zICAgICAweDAwMDgKI2RlZmluZSBQSFlfQU5BUl9QUk9UTzIgICAgIDB4MDAwNAoj ZGVmaW5lIFBIWV9BTkFSX1BST1RPMSAgICAgMHgwMDAyCiNkZWZpbmUgUEhZX0FOQVJfUFJPVE8w ICAgICAweDAwMDEKCiNkZWZpbmUgUEhZX0xQQVJfTkVYVFBBR0UgICAweDgwMDAKI2RlZmluZSBQ SFlfTFBBUl9SU1ZEMCAgICAgIDB4NDAwMAojZGVmaW5lIFBIWV9MUEFSX1RMUkZMVCAgICAgMHgy MDAwCiNkZWZpbmUgUEhZX0xQQVJfUlNWRDEgICAgICAweDEwMDAKI2RlZmluZSBQSFlfTFBBUl9S U1ZEMiAgICAgIDB4MDgwMAojZGVmaW5lIFBIWV9MUEFSX1JTVkQzICAgICAgMHgwNDAwCiNkZWZp bmUgUEhZX0xQQVJfMTAwQlQ0ICAgICAweDAyMDAKI2RlZmluZSBQSFlfTFBBUl8xMDBCVFhGVUxM IDB4MDEwMAojZGVmaW5lIFBIWV9MUEFSXzEwMEJUWEhBTEYgMHgwMDgwCiNkZWZpbmUgUEhZX0xQ QVJfMTBCVEZVTEwgICAweDAwNDAKI2RlZmluZSBQSFlfTFBBUl8xMEJUSEFMRiAgIDB4MDAyMAoj ZGVmaW5lIFBIWV9MUEFSX1BST1RPNCAgICAgMHgwMDEwCiNkZWZpbmUgUEhZX0xQQVJfUFJPVE8z ICAgICAweDAwMDgKI2RlZmluZSBQSFlfTFBBUl9QUk9UTzIgICAgIDB4MDAwNAojZGVmaW5lIFBI WV9MUEFSX1BST1RPMSAgICAgMHgwMDAyCiNkZWZpbmUgUEhZX0xQQVJfUFJPVE8wICAgICAweDAw MDEKCiNkZWZpbmUgUEhZX0FORVhQX0xQQVVUT0FCTEUgICAgMHgwMDAxCgovKgogKiBUaGVzZSBh cmUgdGhlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgUEhZIChwaHlzaWNhbCBsYXllcgog KiBpbnRlcmZhY2UgY2hpcCkuCiAqLwovKgogKiBQSFkgQk1DUiBCYXNpYyBNb2RlIENvbnRyb2wg UmVnaXN0ZXIKICovCiNkZWZpbmUgUEhZX0JNQ1JfUkVTRVQgICAgICAweDgwMDAKI2RlZmluZSBQ SFlfQk1DUl9MT09QQksgICAgIDB4NDAwMAojZGVmaW5lIFBIWV9CTUNSX1NQRUVEU0VMICAgMHgy MDAwCiNkZWZpbmUgUEhZX0JNQ1JfQVVUT05FR0VOQkwgICAgMHgxMDAwCiNkZWZpbmUgUEhZX0JN Q1JfUlNWRDAgICAgICAweDA4MDAgIC8qIHdyaXRlIGFzIHplcm8gKi8KI2RlZmluZSBQSFlfQk1D Ul9JU09MQVRFICAgIDB4MDQwMAojZGVmaW5lIFBIWV9CTUNSX0FVVE9ORUdSU1RSICAgIDB4MDIw MAojZGVmaW5lIFBIWV9CTUNSX0RVUExFWCAgICAgMHgwMTAwCiNkZWZpbmUgUEhZX0JNQ1JfQ09M TFRFU1QgICAweDAwODAKI2RlZmluZSBQSFlfQk1DUl9SU1ZEMSAgICAgIDB4MDA0MCAgLyogd3Jp dGUgYXMgemVybywgZG9uJ3QgY2FyZSAqLwojZGVmaW5lIFBIWV9CTUNSX1JTVkQyICAgICAgMHgw MDIwICAvKiB3cml0ZSBhcyB6ZXJvLCBkb24ndCBjYXJlICovCiNkZWZpbmUgUEhZX0JNQ1JfUlNW RDMgICAgICAweDAwMTAgIC8qIHdyaXRlIGFzIHplcm8sIGRvbid0IGNhcmUgKi8KI2RlZmluZSBQ SFlfQk1DUl9SU1ZENCAgICAgIDB4MDAwOCAgLyogd3JpdGUgYXMgemVybywgZG9uJ3QgY2FyZSAq LwojZGVmaW5lIFBIWV9CTUNSX1JTVkQ1ICAgICAgMHgwMDA0ICAvKiB3cml0ZSBhcyB6ZXJvLCBk b24ndCBjYXJlICovCiNkZWZpbmUgUEhZX0JNQ1JfUlNWRDYgICAgICAweDAwMDIgIC8qIHdyaXRl IGFzIHplcm8sIGRvbid0IGNhcmUgKi8KI2RlZmluZSBQSFlfQk1DUl9SU1ZENyAgICAgIDB4MDAw MSAgLyogd3JpdGUgYXMgemVybywgZG9uJ3QgY2FyZSAqLwoKCi8qCiAqIFJFU0VUOiAxID09IHNv ZnR3YXJlIHJlc2V0LCAwID09IG5vcm1hbCBvcGVyYXRpb24KICogUmVzZXRzIHN0YXR1cyBhbmQg Y29udHJvbCByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMuCiAqIFJlbGF0Y2hlcyBhbGwgaGFy ZHdhcmUgY29uZmlnIHZhbHVlcy4KICoKICogTE9PUEJLOiAxID09IGxvb3BiYWNrIG9wZXJhdGlv biBlbmFibGVkLCAwID09IG5vcm1hbCBvcGVyYXRpb24KICoKICogU1BFRURTRUw6IDEgPT0gMTAw TWIvcywgMCA9PSAxME1iL3MKICogTGluayBzcGVlZCBpcyBzZWxlY3RlZCBieXQgaGlzIGJpdCBv ciBpZiBhdXRvLW5lZ290aWF0aW9uIGlmIGJpdAogKiAxMiAoQVVUT05FR0VOQkwpIGlzIHNldCAo aW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgb2YgdGhpcyByZWdpc3RlcgogKiBpcyBpZ25vcmVkKS4K ICoKICogQVVUT05FR0VOQkw6IDEgPT0gQXV0b25lZ290aWF0aW9uIGVuYWJsZWQsIDAgPT0gQXV0 b25lZ290aWF0aW9uIGRpc2FibGVkCiAqIEJpdHMgOCBhbmQgMTMgYXJlIGlnbm9yZWQgd2hlbiBh dXRvbmVnIGlzIHNldCwgb3RoZXJ3aXNlIGJpdHMgOCBhbmQgMTMKICogZGV0ZXJtaW5lIHNwZWVk IGFuZCBtb2RlLiBTaG91bGQgYmUgY2xlYXJlZCBhbmQgdGhlbiBzZXQgaWYgUEhZIGNvbmZpZ3Vy ZWQKICogZm9yIG5vIGF1dG9uZWcgb24gc3RhcnR1cC4KICoKICogSVNPTEFURTogMSA9PSBpc29s YXRlIFBIWSBmcm9tIE1JSSwgMCA9PSBub3JtYWwgb3BlcmF0aW9uCiAqCiAqIEFVVE9ORUdSU1RS OiAxID09IHJlc3RhcnQgYXV0b25lZ290aWF0aW9uLCAwID0gbm9ybWFsIG9wZXJhdGlvbgogKgog KiBEVVBMRVg6IDEgPT0gZnVsbCBkdXBsZXggbW9kZSwgMCA9PSBoYWxmIGR1cGxleCBtb2RlCiAq CiAqIENPTExURVNUOiAxID09IGNvbGxpc2lvbiB0ZXN0IGVuYWJsZWQsIDAgPT0gbm9ybWFsIG9w ZXJhdGlvbgogKi8KCi8qCiAqIFBIWSwgQk1TUiBCYXNpYyBNb2RlIFN0YXR1cyBSZWdpc3Rlcgog Ki8KI2RlZmluZSBQSFlfQk1TUl8xMDBCVDQgICAgIDB4ODAwMAojZGVmaW5lIFBIWV9CTVNSXzEw MEJUWEZVTEwgMHg0MDAwCiNkZWZpbmUgUEhZX0JNU1JfMTAwQlRYSEFMRiAweDIwMDAKI2RlZmlu ZSBQSFlfQk1TUl8xMEJURlVMTCAgIDB4MTAwMAojZGVmaW5lIFBIWV9CTVNSXzEwQlRIQUxGICAg MHgwODAwCiNkZWZpbmUgUEhZX0JNU1JfUlNWRDEgICAgICAweDA0MDAgIC8qIHdyaXRlIGFzIHpl cm8sIGRvbid0IGNhcmUgKi8KI2RlZmluZSBQSFlfQk1TUl9SU1ZEMiAgICAgIDB4MDIwMCAgLyog d3JpdGUgYXMgemVybywgZG9uJ3QgY2FyZSAqLwojZGVmaW5lIFBIWV9CTVNSX1JTVkQzICAgICAg MHgwMTAwICAvKiB3cml0ZSBhcyB6ZXJvLCBkb24ndCBjYXJlICovCiNkZWZpbmUgUEhZX0JNU1Jf UlNWRDQgICAgICAweDAwODAgIC8qIHdyaXRlIGFzIHplcm8sIGRvbid0IGNhcmUgKi8KI2RlZmlu ZSBQSFlfQk1TUl9NRlBSRVNVUCAgIDB4MDA0MAojZGVmaW5lIFBIWV9CTVNSX0FVVE9ORUdDT01Q ICAgIDB4MDAyMAojZGVmaW5lIFBIWV9CTVNSX1JFTUZBVUxUICAgMHgwMDEwCiNkZWZpbmUgUEhZ X0JNU1JfQ0FOQVVUT05FRyAweDAwMDgKI2RlZmluZSBQSFlfQk1TUl9MSU5LU1RBVCAgIDB4MDAw NAojZGVmaW5lIFBIWV9CTVNSX0pBQkJFUiAgICAgMHgwMDAyCiNkZWZpbmUgUEhZX0JNU1JfRVhU RU5ERUQgICAweDAwMDEKCiNpZmRlZiBfX2FscGhhX18KI3VuZGVmIHZ0b3BoeXMKI2RlZmluZSB2 dG9waHlzKHZhKSAgICAgYWxwaGFfWFhYX2RtYW1hcCgodm1fb2Zmc2V0X3QpdmEpCiNlbmRpZgoK LyogZm9yIENBTSBDb250cm9sbGVyICovCiNkZWZpbmUgQ0FNQ19DQU1FTiAgMHgwMQojZGVmaW5l IENBTUNfVkNBTVNMIDB4MDIKI2RlZmluZSBDQU1DX1NFTEVDVF9NQ0FNIDB4MDAKI2RlZmluZSBD QU1DX1NFTEVDVF9WQ0FNIDB4MDEKI2RlZmluZSBDQU1DX0NBTVJEICAweDA4CiNkZWZpbmUgQ0FN Q19DQU1XUiAgMHgwNAoKLyogZm9yIFZMQU4gdGFnZ2luZyAqLwojZGVmaW5lIEJDUjFfVklERlJf RElTICAweDdGCgovKiBCaXRzIGluIHRoZSBNSUlTUiByZWdpc3RlciAqLwojZGVmaW5lIE1JSVNS X01JSUVSUiAgICAweDA4CiNkZWZpbmUgTUlJU1JfTVJFUlIgMHgwNAojZGVmaW5lIE1JSVNSX0xO S0ZMIDB4MDIKI2RlZmluZSBNSUlTUl9TUEVFRCAweDAxCi8qIGRlZmluZSAzMTA2SiBhbmQgMzEw NlMgQWRhcHRlciBOYW1lKi8KI2RlZmluZSBEZXZpY2VOYW1lMzEwNkogIkV0aGVyRmFzdCAxMC8x MDAgTWFuYWdlZCBOZXR3b3JrIEFkYXB0ZXIiCiNkZWZpbmUgRGV2aWNlTmFtZTMxMDZTICJFdGhl ckZhc3QgMTAvMTAwIE1hbmFnZWQgTmV0d29yayBBZGFwdGVyIgoKI2VuZGlmCg== --==========1810869384==========--