From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1YwPx8-00051B-JY for mharc-grub-devel@gnu.org; Sun, 24 May 2015 03:04:06 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53716) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YwPx3-000511-Es for grub-devel@gnu.org; Sun, 24 May 2015 03:04:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YwPwz-0004aJ-9P for grub-devel@gnu.org; Sun, 24 May 2015 03:04:01 -0400 Received: from mail.gw90.de ([2a01:4f8:100:7463::3]:43292) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YwPwy-0004ZB-KG for grub-devel@gnu.org; Sun, 24 May 2015 03:03:57 -0400 Received: from p5de4181c.dip0.t-ipconnect.de ([93.228.24.28] helo=mattotaupa) by mail.gw90.de with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1YwPwr-00036n-Jm for grub-devel@gnu.org; Sun, 24 May 2015 07:03:49 +0000 Message-ID: <1432451020.3711.13.camel@users.sourceforge.net> Subject: disk/ahci: Unaligned pointer with old commit as coreboot payload From: Paul Menzel To: grub-devel@gnu.org Date: Sun, 24 May 2015 09:03:40 +0200 Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-dCR2TcQ5pN2dZcvSH2HI" X-Mailer: Evolution 3.12.12-1 Mime-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a01:4f8:100:7463::3 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 May 2015 07:04:05 -0000 --=-dCR2TcQ5pN2dZcvSH2HI Content-Type: multipart/mixed; boundary="=-0HHheM0AzpojWjsCz44o" --=-0HHheM0AzpojWjsCz44o Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Dear GRUB folks, further trying to bisect the AHCI regression on, that the GRUB payload does not detect the AHCI drive [1], I tried to build GRUB from commits changing `grub-core/disk/ahci.c`, I built commit dc2a6c8b (Improve AHCI detection and command issuing.), but it it fails to boot with Unaligned pointer =E2=80=A6 Aborted. The same happens, when I just checkout that revision for `ahci.c` and leave the rest as is. $ git checkout dc2a6c8b0e3dfe3bce78dbe0febcd9d4d9038411 -- grub-cor= e/disk/ahci.c $ ./autogen.sh $ ./configure --with-plattform=3Dcoreboot $ make -j $ make default_payload.elf I=E2=80=99ll attach that version of `ahci.c` to this message. Do you see wh= at could be causing that unaligned pointer? Thanks, Paul [1] https://lists.gnu.org/archive/html/grub-devel/2014-11/msg00026.html --=-0HHheM0AzpojWjsCz44o Content-Disposition: attachment; filename="ahci.c" Content-Type: text/x-csrc; name="ahci.c"; charset="UTF-8" Content-Transfer-Encoding: base64 LyoKICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKICogIENvcHlyaWdodCAo QykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CiAqCiAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK ICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KICovCgojaW5jbHVkZSA8Z3J1Yi9kbC5oPgojaW5jbHVkZSA8Z3J1Yi9kaXNrLmg+ CiNpbmNsdWRlIDxncnViL21tLmg+CiNpbmNsdWRlIDxncnViL3RpbWUuaD4KI2luY2x1ZGUgPGdy dWIvcGNpLmg+CiNpbmNsdWRlIDxncnViL2F0YS5oPgojaW5jbHVkZSA8Z3J1Yi9zY3NpLmg+CiNp bmNsdWRlIDxncnViL21pc2MuaD4KI2luY2x1ZGUgPGdydWIvbGlzdC5oPgojaW5jbHVkZSA8Z3J1 Yi9sb2FkZXIuaD4KCkdSVUJfTU9EX0xJQ0VOU0UgKCJHUEx2MysiKTsKCnN0cnVjdCBncnViX2Fo Y2lfY21kX2hlYWQKewogIGdydWJfdWludDMyX3QgY29uZmlnOwogIGdydWJfdWludDMyX3QgdHJh bnNmZXJlZDsKICBncnViX3VpbnQ2NF90IGNvbW1hbmRfdGFibGVfYmFzZTsKICBncnViX3VpbnQz Ml90IHVudXNlZFs0XTsKfTsKCnN0cnVjdCBncnViX2FoY2lfcHJkdF9lbnRyeQp7CiAgZ3J1Yl91 aW50NjRfdCBkYXRhX2Jhc2U7CiAgZ3J1Yl91aW50MzJfdCB1bnVzZWQ7CiAgZ3J1Yl91aW50MzJf dCBzaXplOwp9OwoKc3RydWN0IGdydWJfYWhjaV9jbWRfdGFibGUKewogIGdydWJfdWludDhfdCBj ZmlzWzB4NDBdOwogIGdydWJfdWludDhfdCBjb21tYW5kWzB4MTBdOwogIGdydWJfdWludDhfdCBy ZXNlcnZlZFsweDMwXTsKICBzdHJ1Y3QgZ3J1Yl9haGNpX3ByZHRfZW50cnkgcHJkdFsxXTsKfTsK CnN0cnVjdCBncnViX2FoY2lfaGJhX3BvcnQKewogIGdydWJfdWludDY0X3QgY29tbWFuZF9saXN0 X2Jhc2U7CiAgZ3J1Yl91aW50NjRfdCBmaXNfYmFzZTsKICBncnViX3VpbnQzMl90IGludHN0YXR1 czsKICBncnViX3VpbnQzMl90IGludGVuOwogIGdydWJfdWludDMyX3QgY29tbWFuZDsKICBncnVi X3VpbnQzMl90IHVudXNlZDE7CiAgZ3J1Yl91aW50MzJfdCB0YXNrX2ZpbGVfZGF0YTsKICBncnVi X3VpbnQzMl90IHNpZzsKICBncnViX3VpbnQzMl90IHN0YXR1czsKICBncnViX3VpbnQzMl90IHVu dXNlZDI7CiAgZ3J1Yl91aW50MzJfdCBzYXRhX2Vycm9yOwogIGdydWJfdWludDMyX3Qgc2F0YV9h Y3RpdmU7CiAgZ3J1Yl91aW50MzJfdCBjb21tYW5kX2lzc3VlOwogIGdydWJfdWludDMyX3QgdW51 c2VkMzsKICBncnViX3VpbnQzMl90IGZiczsKICBncnViX3VpbnQzMl90IHVudXNlZDRbMTVdOwp9 OwoKZW51bSBncnViX2FoY2lfaGJhX3BvcnRfY29tbWFuZAogIHsKICAgIEdSVUJfQUhDSV9IQkFf UE9SVF9DTURfU1QgID0gMHgwMSwKICAgIEdSVUJfQUhDSV9IQkFfUE9SVF9DTURfU1BJTl9VUCA9 IDB4MDIsCiAgICBHUlVCX0FIQ0lfSEJBX1BPUlRfQ01EX1BPV0VSX09OID0gMHgwNCwKICAgIEdS VUJfQUhDSV9IQkFfUE9SVF9DTURfRlJFID0gMHgxMCwKICAgIEdSVUJfQUhDSV9IQkFfUE9SVF9D TURfQ1IgPSAweDgwMDAsCiAgICBHUlVCX0FIQ0lfSEJBX1BPUlRfQ01EX0ZSID0gMHg0MDAwLAog IH07CgpzdHJ1Y3QgZ3J1Yl9haGNpX2hiYQp7CiAgZ3J1Yl91aW50MzJfdCBjYXA7CiAgZ3J1Yl91 aW50MzJfdCBnbG9iYWxfY29udHJvbDsKICBncnViX3VpbnQzMl90IGludHJfc3RhdHVzOwogIGdy dWJfdWludDMyX3QgcG9ydHNfaW1wbGVtZW50ZWQ7CiAgZ3J1Yl91aW50MzJfdCB1bnVzZWQxWzZd OwogIGdydWJfdWludDMyX3QgYmlvc19oYW5kb2ZmOwogIGdydWJfdWludDMyX3QgdW51c2VkMls1 M107CiAgc3RydWN0IGdydWJfYWhjaV9oYmFfcG9ydCBwb3J0c1szMl07Cn07CgpzdHJ1Y3QgZ3J1 Yl9haGNpX3JlY2VpdmVkX2Zpcwp7CiAgY2hhciByYXdbNDA5Nl07Cn07CgplbnVtCiAgewogICAg R1JVQl9BSENJX0hCQV9DQVBfTlBPUlRTX01BU0sgPSAweDFmCiAgfTsKCmVudW0KICB7CiAgICBH UlVCX0FIQ0lfSEJBX0dMT0JBTF9DT05UUk9MX1JFU0VUID0gMHgwMDAwMDAwMSwKICAgIEdSVUJf QUhDSV9IQkFfR0xPQkFMX0NPTlRST0xfSU5UUl9FTiA9IDB4MDAwMDAwMDIsCiAgICBHUlVCX0FI Q0lfSEJBX0dMT0JBTF9DT05UUk9MX0FIQ0lfRU4gPSAweDgwMDAwMDAwLAogIH07CgplbnVtCiAg ewogICAgR1JVQl9BSENJX0JJT1NfSEFORE9GRl9CSU9TX09XTkVEID0gMSwKICAgIEdSVUJfQUhD SV9CSU9TX0hBTkRPRkZfT1NfT1dORUQgPSAyLAogICAgR1JVQl9BSENJX0JJT1NfSEFORE9GRl9P U19PV05FUlNISVBfQ0hBTkdFRCA9IDgsCiAgICBHUlVCX0FIQ0lfQklPU19IQU5ET0ZGX1JXQyA9 IDgKICB9OwoKCnN0cnVjdCBncnViX2FoY2lfZGV2aWNlCnsKICBzdHJ1Y3QgZ3J1Yl9haGNpX2Rl dmljZSAqbmV4dDsKICBzdHJ1Y3QgZ3J1Yl9haGNpX2RldmljZSAqKnByZXY7CiAgdm9sYXRpbGUg c3RydWN0IGdydWJfYWhjaV9oYmEgKmhiYTsKICBpbnQgcG9ydDsKICBpbnQgbnVtOwogIHN0cnVj dCBncnViX3BjaV9kbWFfY2h1bmsgKmNvbW1hbmRfbGlzdF9jaHVuazsKICB2b2xhdGlsZSBzdHJ1 Y3QgZ3J1Yl9haGNpX2NtZF9oZWFkICpjb21tYW5kX2xpc3Q7CiAgc3RydWN0IGdydWJfcGNpX2Rt YV9jaHVuayAqY29tbWFuZF90YWJsZV9jaHVuazsKICB2b2xhdGlsZSBzdHJ1Y3QgZ3J1Yl9haGNp X2NtZF90YWJsZSAqY29tbWFuZF90YWJsZTsKICBzdHJ1Y3QgZ3J1Yl9wY2lfZG1hX2NodW5rICpy ZmlzOwogIGludCBwcmVzZW50Owp9OwoKc3RhdGljIGdydWJfZXJyX3QgCmdydWJfYWhjaV9yZWFk d3JpdGVfcmVhbCAoc3RydWN0IGdydWJfYWhjaV9kZXZpY2UgKmRldiwKCQkJICBzdHJ1Y3QgZ3J1 Yl9kaXNrX2F0YV9wYXNzX3Rocm91Z2hfcGFybXMgKnBhcm1zLAoJCQkgIGludCBzcGludXAsIGlu dCByZXNldCk7CgoKZW51bQogIHsKICAgIEdSVUJfQUhDSV9DT05GSUdfUkVBRCA9IDAsCiAgICBH UlVCX0FIQ0lfQ09ORklHX0NGSVNfTEVOR1RIX01BU0sgPSAweDFmLAogICAgR1JVQl9BSENJX0NP TkZJR19BVEFQSSA9IDB4MjAsCiAgICBHUlVCX0FIQ0lfQ09ORklHX1dSSVRFID0gMHg0MCwKICAg IEdSVUJfQUhDSV9DT05GSUdfUFJFRkVUQ0ggPSAweDgwLAogICAgR1JVQl9BSENJX0NPTkZJR19S RVNFVCA9IDB4MTAwLAogICAgR1JVQl9BSENJX0NPTkZJR19CSVNUID0gMHgyMDAsCiAgICBHUlVC X0FIQ0lfQ09ORklHX0NMRUFSX1JfT0sgPSAweDQwMCwKICAgIEdSVUJfQUhDSV9DT05GSUdfUE1Q X01BU0sgPSAweGYwMDAsCiAgICBHUlVCX0FIQ0lfQ09ORklHX1BSRFRfTEVOR1RIX01BU0sgPSAw eGZmZmYwMDAwLAogIH07CiNkZWZpbmUgR1JVQl9BSENJX0NPTkZJR19DRklTX0xFTkdUSF9TSElG VCAwCiNkZWZpbmUgR1JVQl9BSENJX0NPTkZJR19QTVBfU0hJRlQgMTIKI2RlZmluZSBHUlVCX0FI Q0lfQ09ORklHX1BSRFRfTEVOR1RIX1NISUZUIDE2CiNkZWZpbmUgR1JVQl9BSENJX0lOVEVSUlVQ VF9PTl9DT01QTEVURSAweDgwMDAwMDAwCgojZGVmaW5lIEdSVUJfQUhDSV9QUkRUX01BWF9DSFVO S19MRU5HVEggMHgyMDAwMDAKCnN0YXRpYyBzdHJ1Y3QgZ3J1Yl9haGNpX2RldmljZSAqZ3J1Yl9h aGNpX2RldmljZXM7CnN0YXRpYyBpbnQgbnVtZGV2czsKCnN0YXRpYyBpbnQKZ3J1Yl9haGNpX3Bj aWluaXQgKGdydWJfcGNpX2RldmljZV90IGRldiwKCQkgICBncnViX3BjaV9pZF90IHBjaWlkIF9f YXR0cmlidXRlX18gKCh1bnVzZWQpKSwKCQkgICB2b2lkICpkYXRhIF9fYXR0cmlidXRlX18gKCh1 bnVzZWQpKSkKewogIGdydWJfcGNpX2FkZHJlc3NfdCBhZGRyOwogIGdydWJfdWludDMyX3QgY2xh c3M7CiAgZ3J1Yl91aW50MzJfdCBiYXI7CiAgdW5zaWduZWQgaSwgbnBvcnRzOwogIHZvbGF0aWxl IHN0cnVjdCBncnViX2FoY2lfaGJhICpoYmE7CgogIC8qIFJlYWQgY2xhc3MuICAqLwogIGFkZHIg PSBncnViX3BjaV9tYWtlX2FkZHJlc3MgKGRldiwgR1JVQl9QQ0lfUkVHX0NMQVNTKTsKICBjbGFz cyA9IGdydWJfcGNpX3JlYWQgKGFkZHIpOwoKICAvKiBDaGVjayBpZiB0aGlzIGNsYXNzIElEIG1h dGNoZXMgdGhhdCBvZiBhIFBDSSBJREUgQ29udHJvbGxlci4gICovCiAgaWYgKGNsYXNzID4+IDgg IT0gMHgwMTA2MDEpCiAgICByZXR1cm4gMDsKCiNpZmRlZiBHUlVCX01BQ0hJTkVfUUVNVQogIGFk ZHIgPSBncnViX3BjaV9tYWtlX2FkZHJlc3MgKGRldiwgR1JVQl9QQ0lfUkVHX0NPTU1BTkQpOwog IGdydWJfcGNpX3dyaXRlX3dvcmQgKGFkZHIsIDB4MTA3KTsKI2VuZGlmCgogIGFkZHIgPSBncnVi X3BjaV9tYWtlX2FkZHJlc3MgKGRldiwgR1JVQl9QQ0lfUkVHX0FERFJFU1NfUkVHNSk7CgojaWZk ZWYgR1JVQl9NQUNISU5FX1FFTVUKICBncnViX3BjaV93cml0ZSAoYWRkciwgMHhmNDAwMDAwMCk7 CiNlbmRpZgogIGJhciA9IGdydWJfcGNpX3JlYWQgKGFkZHIpOwoKICBpZiAoKGJhciAmIChHUlVC X1BDSV9BRERSX1NQQUNFX01BU0sgfCBHUlVCX1BDSV9BRERSX01FTV9UWVBFX01BU0sKCSAgICAg IHwgR1JVQl9QQ0lfQUREUl9NRU1fUFJFRkVUQ0gpKQogICAgICAhPSAoR1JVQl9QQ0lfQUREUl9T UEFDRV9NRU1PUlkgfCBHUlVCX1BDSV9BRERSX01FTV9UWVBFXzMyKSkKICAgIHJldHVybiAwOwoK ICBhZGRyID0gZ3J1Yl9wY2lfbWFrZV9hZGRyZXNzIChkZXYsIEdSVUJfUENJX1JFR19DT01NQU5E KTsKICBncnViX3BjaV93cml0ZV93b3JkIChhZGRyLCBncnViX3BjaV9yZWFkX3dvcmQgKGFkZHIp IHwgCgkJICAgIEdSVUJfUENJX0NPTU1BTkRfSU9fRU5BQkxFRAoJCSAgICB8IEdSVUJfUENJX0NP TU1BTkRfTUVNX0VOQUJMRUQKCQkgICAgfCBHUlVCX1BDSV9DT01NQU5EX0JVU19NQVNURVIpOwoK ICBoYmEgPSBncnViX3BjaV9kZXZpY2VfbWFwX3JhbmdlIChkZXYsIGJhciAmIEdSVUJfUENJX0FE RFJfTUVNX01BU0ssCgkJCQkgICBzaXplb2YgKGhiYSkpOwogIGdydWJfZHByaW50ZiAoImFoY2ki LCAiZGV2OiAleDoleC4leFxuIiwgZGV2LmJ1cywgZGV2LmRldmljZSwgZGV2LmZ1bmN0aW9uKTsK CiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJ0ZmRbMF06ICV4XG4iLAoJCWhiYS0+cG9ydHNbMF0u dGFza19maWxlX2RhdGEpOwogIGdydWJfZHByaW50ZiAoImFoY2kiLCAiY21kWzBdOiAleFxuIiwK CQloYmEtPnBvcnRzWzBdLmNvbW1hbmQpOwogIGdydWJfZHByaW50ZiAoImFoY2kiLCAic3RbMF06 ICV4XG4iLAoJCWhiYS0+cG9ydHNbMF0uc3RhdHVzKTsKICBncnViX2RwcmludGYgKCJhaGNpIiwg ImVyclswXTogJXhcbiIsCgkJaGJhLT5wb3J0c1swXS5zYXRhX2Vycm9yKTsKCiAgZ3J1Yl9kcHJp bnRmICgiYWhjaSIsICJ0ZmRbMV06ICV4XG4iLAoJCWhiYS0+cG9ydHNbMV0udGFza19maWxlX2Rh dGEpOwogIGdydWJfZHByaW50ZiAoImFoY2kiLCAiY21kWzFdOiAleFxuIiwKCQloYmEtPnBvcnRz WzFdLmNvbW1hbmQpOwogIGdydWJfZHByaW50ZiAoImFoY2kiLCAic3RbMV06ICV4XG4iLAoJCWhi YS0+cG9ydHNbMV0uc3RhdHVzKTsKICBncnViX2RwcmludGYgKCJhaGNpIiwgImVyclsxXTogJXhc biIsCgkJaGJhLT5wb3J0c1sxXS5zYXRhX2Vycm9yKTsKCiAgaGJhLT5wb3J0c1sxXS5zYXRhX2Vy cm9yID0gaGJhLT5wb3J0c1sxXS5zYXRhX2Vycm9yOwoKICBncnViX2RwcmludGYgKCJhaGNpIiwg ImVyclsxXTogJXhcbiIsCgkJaGJhLT5wb3J0c1sxXS5zYXRhX2Vycm9yKTsKCiAgZ3J1Yl9kcHJp bnRmICgiYWhjaSIsICJCSDoleFxuIiwgaGJhLT5iaW9zX2hhbmRvZmYpOwoKICBpZiAoISAoaGJh LT5iaW9zX2hhbmRvZmYgJiBHUlVCX0FIQ0lfQklPU19IQU5ET0ZGX09TX09XTkVEKSkKICAgIHsK ICAgICAgZ3J1Yl91aW50NjRfdCBlbmR0aW1lOwoKICAgICAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIs ICJSZXF1ZXN0aW5nIEFIQ0kgb3duZXJzaGlwXG4iKTsKICAgICAgaGJhLT5iaW9zX2hhbmRvZmYg PSAoaGJhLT5iaW9zX2hhbmRvZmYgJiB+R1JVQl9BSENJX0JJT1NfSEFORE9GRl9SV0MpCgl8IEdS VUJfQUhDSV9CSU9TX0hBTkRPRkZfT1NfT1dORUQ7CiAgICAgIGdydWJfZHByaW50ZiAoImFoY2ki LCAiV2FpdGluZyBmb3IgQklPUyB0byBnaXZlIHVwIG93bmVyc2hpcFxuIik7CiAgICAgIGVuZHRp bWUgPSBncnViX2dldF90aW1lX21zICgpICsgMTAwMDsKICAgICAgd2hpbGUgKChoYmEtPmJpb3Nf aGFuZG9mZiAmIEdSVUJfQUhDSV9CSU9TX0hBTkRPRkZfQklPU19PV05FRCkKCSAgICAgJiYgZ3J1 Yl9nZXRfdGltZV9tcyAoKSA8IGVuZHRpbWUpOwogICAgICBpZiAoaGJhLT5iaW9zX2hhbmRvZmYg JiBHUlVCX0FIQ0lfQklPU19IQU5ET0ZGX0JJT1NfT1dORUQpCgl7CgkgIGdydWJfZHByaW50ZiAo ImFoY2kiLCAiRm9yY2libHkgdGFraW5nIG93bmVyc2hpcFxuIik7CgkgIGhiYS0+Ymlvc19oYW5k b2ZmID0gR1JVQl9BSENJX0JJT1NfSEFORE9GRl9PU19PV05FRDsKCSAgaGJhLT5iaW9zX2hhbmRv ZmYgfD0gR1JVQl9BSENJX0JJT1NfSEFORE9GRl9PU19PV05FUlNISVBfQ0hBTkdFRDsKCX0KICAg ICAgZWxzZQoJZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJBSENJIG93bmVyc2hpcCBvYnRhaW5lZFxu Iik7CiAgICB9CiAgZWxzZQogICAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJBSENJIGlzIGFscmVh ZHkgaW4gT1MgbW9kZVxuIik7CgogIGdydWJfZHByaW50ZiAoImFoY2kiLCAiR0xDOiV4XG4iLCBo YmEtPmdsb2JhbF9jb250cm9sKTsKCiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJlcnJbMV06ICV4 XG4iLAoJCWhiYS0+cG9ydHNbMV0uc2F0YV9lcnJvcik7CgogIGlmICghKGhiYS0+Z2xvYmFsX2Nv bnRyb2wgJiBHUlVCX0FIQ0lfSEJBX0dMT0JBTF9DT05UUk9MX0FIQ0lfRU4pKQogICAgZ3J1Yl9k cHJpbnRmICgiYWhjaSIsICJBSENJIGlzIGluIGNvbXBhdCBtb2RlLiBTd2l0Y2hpbmdcbiIpOwog IGVsc2UKICAgIGdydWJfZHByaW50ZiAoImFoY2kiLCAiQUhDSSBpcyBpbiBBSENJIG1vZGUuXG4i KTsKCiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJlcnJbMV06ICV4XG4iLAoJCWhiYS0+cG9ydHNb MV0uc2F0YV9lcnJvcik7CgogIGdydWJfZHByaW50ZiAoImFoY2kiLCAiR0xDOiV4XG4iLCBoYmEt Pmdsb2JhbF9jb250cm9sKTsKCiAgLyogIHsKICAgICAgZ3J1Yl91aW50NjRfdCBlbmR0aW1lOwog ICAgICBoYmEtPmdsb2JhbF9jb250cm9sIHw9IDE7CiAgICAgIGVuZHRpbWUgPSBncnViX2dldF90 aW1lX21zICgpICsgMTAwMDsKICAgICAgd2hpbGUgKGhiYS0+Z2xvYmFsX2NvbnRyb2wgJiAxKQoJ aWYgKGdydWJfZ2V0X3RpbWVfbXMgKCkgPiBlbmR0aW1lKQoJICB7CgkgICAgZ3J1Yl9kcHJpbnRm ICgiYWhjaSIsICJjb3VsZG4ndCByZXNldCBBSENJXG4iKTsKCSAgICByZXR1cm4gMDsKCSAgfQoJ ICB9Ki8KCiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJHTEM6JXhcbiIsIGhiYS0+Z2xvYmFsX2Nv bnRyb2wpOwoKICBncnViX2RwcmludGYgKCJhaGNpIiwgImVyclsxXTogJXhcbiIsCgkJaGJhLT5w b3J0c1sxXS5zYXRhX2Vycm9yKTsKCiAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykKICAgIHsKICAg ICAgaGJhLT5nbG9iYWxfY29udHJvbCB8PSBHUlVCX0FIQ0lfSEJBX0dMT0JBTF9DT05UUk9MX0FI Q0lfRU47CiAgICAgIGdydWJfbWlsbGlzbGVlcCAoMSk7CiAgICAgIGlmIChoYmEtPmdsb2JhbF9j b250cm9sICYgR1JVQl9BSENJX0hCQV9HTE9CQUxfQ09OVFJPTF9BSENJX0VOKQoJYnJlYWs7CiAg ICB9CiAgaWYgKGkgPT0gNSkKICAgIHsKICAgICAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJDb3Vs ZG4ndCBwdXQgQUhDSSBpbiBBSENJIG1vZGVcbiIpOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAg Z3J1Yl9kcHJpbnRmICgiYWhjaSIsICJHTEM6JXhcbiIsIGhiYS0+Z2xvYmFsX2NvbnRyb2wpOwoK ICBncnViX2RwcmludGYgKCJhaGNpIiwgImVyclsxXTogJXhcbiIsCgkJaGJhLT5wb3J0c1sxXS5z YXRhX2Vycm9yKTsKCiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJlcnJbMV06ICV4XG4iLAoJCWhi YS0+cG9ydHNbMV0uc2F0YV9lcnJvcik7CgogIGdydWJfZHByaW50ZiAoImFoY2kiLCAiR0xDOiV4 XG4iLCBoYmEtPmdsb2JhbF9jb250cm9sKTsKCiAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykKICAg IHsKICAgICAgaGJhLT5nbG9iYWxfY29udHJvbCB8PSBHUlVCX0FIQ0lfSEJBX0dMT0JBTF9DT05U Uk9MX0FIQ0lfRU47CiAgICAgIGdydWJfbWlsbGlzbGVlcCAoMSk7CiAgICAgIGlmIChoYmEtPmds b2JhbF9jb250cm9sICYgR1JVQl9BSENJX0hCQV9HTE9CQUxfQ09OVFJPTF9BSENJX0VOKQoJYnJl YWs7CiAgICB9CiAgaWYgKGkgPT0gNSkKICAgIHsKICAgICAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIs ICJDb3VsZG4ndCBwdXQgQUhDSSBpbiBBSENJIG1vZGVcbiIpOwogICAgICByZXR1cm4gMDsKICAg IH0KCiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJlcnJbMV06ICV4XG4iLAoJCWhiYS0+cG9ydHNb MV0uc2F0YV9lcnJvcik7CgogIGdydWJfZHByaW50ZiAoImFoY2kiLCAiR0xDOiV4XG4iLCBoYmEt Pmdsb2JhbF9jb250cm9sKTsKCiAgbnBvcnRzID0gKGhiYS0+Y2FwICYgR1JVQl9BSENJX0hCQV9D QVBfTlBPUlRTX01BU0spICsgMTsKCiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICIlZCBBSENJIHBv cnRzLCBQSSA9IDB4JXhcbiIsIG5wb3J0cywKCQloYmEtPnBvcnRzX2ltcGxlbWVudGVkKTsKCiAg c3RydWN0IGdydWJfYWhjaV9kZXZpY2UgKmFkZXZzW0dSVUJfQUhDSV9IQkFfQ0FQX05QT1JUU19N QVNLICsgMV07CiAgc3RydWN0IGdydWJfYWhjaV9kZXZpY2UgKmZhaWxlZF9hZGV2c1tHUlVCX0FI Q0lfSEJBX0NBUF9OUE9SVFNfTUFTSyArIDFdOwogIGdydWJfdWludDMyX3QgZnJfcnVubmluZyA9 IDA7CgogIGZvciAoaSA9IDA7IGkgPCBucG9ydHM7IGkrKykKICAgIGZhaWxlZF9hZGV2c1tpXSA9 IDA7CiAgZm9yIChpID0gMDsgaSA8IG5wb3J0czsgaSsrKQogICAgewogICAgICBpZiAoIShoYmEt PnBvcnRzX2ltcGxlbWVudGVkICYgKDEgPDwgaSkpKQoJewoJICBhZGV2c1tpXSA9IDA7CgkgIGNv bnRpbnVlOwoJfQoKICAgICAgYWRldnNbaV0gPSBncnViX21hbGxvYyAoc2l6ZW9mICgqYWRldnNb aV0pKTsKICAgICAgaWYgKCFhZGV2c1tpXSkKCXJldHVybiAxOwoKICAgICAgYWRldnNbaV0tPmhi YSA9IGhiYTsKICAgICAgYWRldnNbaV0tPnBvcnQgPSBpOwogICAgICBhZGV2c1tpXS0+cHJlc2Vu dCA9IDE7CiAgICAgIGFkZXZzW2ldLT5udW0gPSBudW1kZXZzKys7CiAgICB9CgogIGZvciAoaSA9 IDA7IGkgPCBucG9ydHM7IGkrKykKICAgIGlmIChhZGV2c1tpXSkKICAgICAgewoJYWRldnNbaV0t PmhiYS0+cG9ydHNbYWRldnNbaV0tPnBvcnRdLnNhdGFfZXJyb3IgPSBhZGV2c1tpXS0+aGJhLT5w b3J0c1thZGV2c1tpXS0+cG9ydF0uc2F0YV9lcnJvcjsKCWdydWJfZHByaW50ZiAoImFoY2kiLCAi ZXJyOiAleFxuIiwKCQkgICAgICBhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0u c2F0YV9lcnJvcik7CgoJYWRldnNbaV0tPmNvbW1hbmRfbGlzdF9jaHVuayA9IGdydWJfbWVtYWxp Z25fZG1hMzIgKDEwMjQsIHNpemVvZiAoc3RydWN0IGdydWJfYWhjaV9jbWRfaGVhZCkpOwoJaWYg KCFhZGV2c1tpXS0+Y29tbWFuZF9saXN0X2NodW5rKQoJICB7CgkgICAgYWRldnNbaV0gPSAwOwoJ ICAgIGNvbnRpbnVlOwoJICB9CgoJYWRldnNbaV0tPmNvbW1hbmRfdGFibGVfY2h1bmsgPSBncnVi X21lbWFsaWduX2RtYTMyICgxMDI0LAoJCQkJCQkJICAgIHNpemVvZiAoc3RydWN0IGdydWJfYWhj aV9jbWRfdGFibGUpKTsKCWlmICghYWRldnNbaV0tPmNvbW1hbmRfdGFibGVfY2h1bmspCgkgIHsK CSAgICBncnViX2RtYV9mcmVlIChhZGV2c1tpXS0+Y29tbWFuZF9saXN0X2NodW5rKTsKCSAgICBh ZGV2c1tpXSA9IDA7CgkgICAgY29udGludWU7CgkgIH0KCglhZGV2c1tpXS0+Y29tbWFuZF9saXN0 ID0gZ3J1Yl9kbWFfZ2V0X3ZpcnQgKGFkZXZzW2ldLT5jb21tYW5kX2xpc3RfY2h1bmspOwoJYWRl dnNbaV0tPmNvbW1hbmRfdGFibGUgPSBncnViX2RtYV9nZXRfdmlydCAoYWRldnNbaV0tPmNvbW1h bmRfdGFibGVfY2h1bmspOwoJYWRldnNbaV0tPmNvbW1hbmRfbGlzdC0+Y29tbWFuZF90YWJsZV9i YXNlCgkgID0gZ3J1Yl9kbWFfZ2V0X3BoeXMgKGFkZXZzW2ldLT5jb21tYW5kX3RhYmxlX2NodW5r KTsKCglncnViX2RwcmludGYgKCJhaGNpIiwgImZvdW5kIGRldmljZSBhaGNpJWQgKHBvcnQgJWQp LCBjb21tYW5kX3RhYmxlID0gJXAsIGNvbW1hbmRfbGlzdCA9ICVwXG4iLAoJCSAgICAgIGFkZXZz W2ldLT5udW0sIGFkZXZzW2ldLT5wb3J0LCBncnViX2RtYV9nZXRfdmlydCAoYWRldnNbaV0tPmNv bW1hbmRfdGFibGVfY2h1bmspLAoJCSAgICAgIGdydWJfZG1hX2dldF92aXJ0IChhZGV2c1tpXS0+ Y29tbWFuZF9saXN0X2NodW5rKSk7CgoJYWRldnNbaV0tPmhiYS0+cG9ydHNbYWRldnNbaV0tPnBv cnRdLmNvbW1hbmQgJj0gfkdSVUJfQUhDSV9IQkFfUE9SVF9DTURfRlJFOwogICAgICB9CgogIGdy dWJfdWludDY0X3QgZW5kdGltZTsKICBlbmR0aW1lID0gZ3J1Yl9nZXRfdGltZV9tcyAoKSArIDEw MDA7CgogIHdoaWxlIChncnViX2dldF90aW1lX21zICgpIDwgZW5kdGltZSkKICAgIHsKICAgICAg Zm9yIChpID0gMDsgaSA8IG5wb3J0czsgaSsrKQoJaWYgKGFkZXZzW2ldICYmIChhZGV2c1tpXS0+ aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0uY29tbWFuZCAmIEdSVUJfQUhDSV9IQkFfUE9SVF9D TURfRlIpKQoJICBicmVhazsKICAgICAgaWYgKGkgPT0gbnBvcnRzKQoJYnJlYWs7CiAgICB9Cgog IGZvciAoaSA9IDA7IGkgPCBucG9ydHM7IGkrKykKICAgIGlmIChhZGV2c1tpXSAmJiAoYWRldnNb aV0tPmhiYS0+cG9ydHNbYWRldnNbaV0tPnBvcnRdLmNvbW1hbmQgJiBHUlVCX0FIQ0lfSEJBX1BP UlRfQ01EX0ZSKSkKICAgICAgewoJZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJjb3VsZG4ndCBzdG9w IEZSIG9uIHBvcnQgJWRcbiIsIGkpOwoJZmFpbGVkX2FkZXZzW2ldID0gYWRldnNbaV07CglhZGV2 c1tpXSA9IDA7CiAgICAgIH0KCiAgZm9yIChpID0gMDsgaSA8IG5wb3J0czsgaSsrKQogICAgaWYg KGFkZXZzW2ldKQogICAgICBhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0uY29t bWFuZCAmPSB+R1JVQl9BSENJX0hCQV9QT1JUX0NNRF9TVDsKICBlbmR0aW1lID0gZ3J1Yl9nZXRf dGltZV9tcyAoKSArIDEwMDA7CgogIHdoaWxlIChncnViX2dldF90aW1lX21zICgpIDwgZW5kdGlt ZSkKICAgIHsKICAgICAgZm9yIChpID0gMDsgaSA8IG5wb3J0czsgaSsrKQoJaWYgKGFkZXZzW2ld ICYmIChhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0uY29tbWFuZCAmIEdSVUJf QUhDSV9IQkFfUE9SVF9DTURfQ1IpKQoJICBicmVhazsKICAgICAgaWYgKGkgPT0gbnBvcnRzKQoJ YnJlYWs7CiAgICB9CgogIGZvciAoaSA9IDA7IGkgPCBucG9ydHM7IGkrKykKICAgIGlmIChhZGV2 c1tpXSAmJiAoYWRldnNbaV0tPmhiYS0+cG9ydHNbYWRldnNbaV0tPnBvcnRdLmNvbW1hbmQgJiBH UlVCX0FIQ0lfSEJBX1BPUlRfQ01EX0NSKSkKICAgICAgewoJZ3J1Yl9kcHJpbnRmICgiYWhjaSIs ICJjb3VsZG4ndCBzdG9wIENSIG9uIHBvcnQgJWRcbiIsIGkpOwoJZmFpbGVkX2FkZXZzW2ldID0g YWRldnNbaV07CglhZGV2c1tpXSA9IDA7CiAgICAgIH0KICBmb3IgKGkgPSAwOyBpIDwgbnBvcnRz OyBpKyspCiAgICBpZiAoYWRldnNbaV0pCiAgICAgIHsKCWFkZXZzW2ldLT5oYmEtPnBvcnRzW2Fk ZXZzW2ldLT5wb3J0XS5pbnRlbiA9IDA7CglhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+ cG9ydF0uaW50c3RhdHVzID0gfjA7CgkvLyAgYWRldnNbaV0tPmhiYS0+cG9ydHNbYWRldnNbaV0t PnBvcnRdLmZicyA9IDA7CgoJZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJlcnI6ICV4XG4iLAoJCSAg ICAgIGFkZXZzW2ldLT5oYmEtPnBvcnRzW2FkZXZzW2ldLT5wb3J0XS5zYXRhX2Vycm9yKTsKCglh ZGV2c1tpXS0+cmZpcyA9IGdydWJfbWVtYWxpZ25fZG1hMzIgKDQwOTYsIAoJCQkJCSAgICAgc2l6 ZW9mIChzdHJ1Y3QgZ3J1Yl9haGNpX3JlY2VpdmVkX2ZpcykpOwoJZ3J1Yl9tZW1zZXQgKChjaGFy ICopIGdydWJfZG1hX2dldF92aXJ0IChhZGV2c1tpXS0+cmZpcyksIDAsCgkJICAgICBzaXplb2Yg KHN0cnVjdCBncnViX2FoY2lfcmVjZWl2ZWRfZmlzKSk7CglncnViX21lbXNldCAoKGNoYXIgKikg Z3J1Yl9kbWFfZ2V0X3ZpcnQgKGFkZXZzW2ldLT5jb21tYW5kX2xpc3RfY2h1bmspLCAwLAoJCSAg ICAgc2l6ZW9mIChzdHJ1Y3QgZ3J1Yl9haGNpX2NtZF9oZWFkKSk7CglncnViX21lbXNldCAoKGNo YXIgKikgZ3J1Yl9kbWFfZ2V0X3ZpcnQgKGFkZXZzW2ldLT5jb21tYW5kX3RhYmxlX2NodW5rKSwg MCwKCQkgICAgIHNpemVvZiAoc3RydWN0IGdydWJfYWhjaV9jbWRfdGFibGUpKTsKCWFkZXZzW2ld LT5oYmEtPnBvcnRzW2FkZXZzW2ldLT5wb3J0XS5maXNfYmFzZSA9IGdydWJfZG1hX2dldF9waHlz IChhZGV2c1tpXS0+cmZpcyk7CglhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0u Y29tbWFuZF9saXN0X2Jhc2UKCSAgPSBncnViX2RtYV9nZXRfcGh5cyAoYWRldnNbaV0tPmNvbW1h bmRfbGlzdF9jaHVuayk7CglhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0uY29t bWFuZCB8PSBHUlVCX0FIQ0lfSEJBX1BPUlRfQ01EX0ZSRTsKICAgICAgfQoKICBlbmR0aW1lID0g Z3J1Yl9nZXRfdGltZV9tcyAoKSArIDEwMDA7CgogIHdoaWxlIChncnViX2dldF90aW1lX21zICgp IDwgZW5kdGltZSkKICAgIHsKICAgICAgZm9yIChpID0gMDsgaSA8IG5wb3J0czsgaSsrKQoJaWYg KGFkZXZzW2ldICYmICEoYWRldnNbaV0tPmhiYS0+cG9ydHNbYWRldnNbaV0tPnBvcnRdLmNvbW1h bmQgJiBHUlVCX0FIQ0lfSEJBX1BPUlRfQ01EX0ZSKSkKCSAgYnJlYWs7CiAgICAgIGlmIChpID09 IG5wb3J0cykKCWJyZWFrOwogICAgfQoKICBmb3IgKGkgPSAwOyBpIDwgbnBvcnRzOyBpKyspCiAg ICBpZiAoYWRldnNbaV0gJiYgIShhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0u Y29tbWFuZCAmIEdSVUJfQUhDSV9IQkFfUE9SVF9DTURfRlIpKQogICAgICB7CglncnViX2Rwcmlu dGYgKCJhaGNpIiwgImNvdWxkbid0IHN0YXJ0IEZSIG9uIHBvcnQgJWRcbiIsIGkpOwoJZmFpbGVk X2FkZXZzW2ldID0gYWRldnNbaV07CglhZGV2c1tpXSA9IDA7CiAgICAgIH0KCiAgZm9yIChpID0g MDsgaSA8IG5wb3J0czsgaSsrKQogICAgaWYgKGFkZXZzW2ldKQogICAgICB7CglncnViX2Rwcmlu dGYgKCJhaGNpIiwgImVycjogJXhcbiIsCgkJICAgICAgYWRldnNbaV0tPmhiYS0+cG9ydHNbYWRl dnNbaV0tPnBvcnRdLnNhdGFfZXJyb3IpOwoJZnJfcnVubmluZyB8PSAoMSA8PCBpKTsKCglhZGV2 c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0uY29tbWFuZCB8PSBHUlVCX0FIQ0lfSEJB X1BPUlRfQ01EX1NQSU5fVVA7CglhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0u Y29tbWFuZCB8PSBHUlVCX0FIQ0lfSEJBX1BPUlRfQ01EX1BPV0VSX09OOwoJYWRldnNbaV0tPmhi YS0+cG9ydHNbYWRldnNbaV0tPnBvcnRdLmNvbW1hbmQgfD0gMSA8PCAyODsKCglncnViX2Rwcmlu dGYgKCJhaGNpIiwgImVycjogJXhcbiIsCgkJICAgICAgYWRldnNbaV0tPmhiYS0+cG9ydHNbYWRl dnNbaV0tPnBvcnRdLnNhdGFfZXJyb3IpOwogICAgICB9CgogIC8qIDEwbXMgc2hvdWxkIGFjdHVh bGx5IGJlIGVub3VnaC4gICovCiAgZW5kdGltZSA9IGdydWJfZ2V0X3RpbWVfbXMgKCkgKyAxMDA7 CgogIHdoaWxlIChncnViX2dldF90aW1lX21zICgpIDwgZW5kdGltZSkKICAgIHsKICAgICAgZm9y IChpID0gMDsgaSA8IG5wb3J0czsgaSsrKQoJaWYgKGFkZXZzW2ldICYmIChhZGV2c1tpXS0+aGJh LT5wb3J0c1thZGV2c1tpXS0+cG9ydF0uc3RhdHVzICYgNykgIT0gMykKCSAgYnJlYWs7CiAgICAg IGlmIChpID09IG5wb3J0cykKCWJyZWFrOwogICAgfQoKICBmb3IgKGkgPSAwOyBpIDwgbnBvcnRz OyBpKyspCiAgICBpZiAoYWRldnNbaV0gJiYgKGFkZXZzW2ldLT5oYmEtPnBvcnRzW2FkZXZzW2ld LT5wb3J0XS5zdGF0dXMgJiA3KSAhPSAzKQogICAgICB7CglncnViX2RwcmludGYgKCJhaGNpIiwg ImNvdWxkbid0IGRldGVjdCBkZXZpY2Ugb24gcG9ydCAlZFxuIiwgaSk7CglmYWlsZWRfYWRldnNb aV0gPSBhZGV2c1tpXTsKCWFkZXZzW2ldID0gMDsKICAgICAgfQoKICBmb3IgKGkgPSAwOyBpIDwg bnBvcnRzOyBpKyspCiAgICBpZiAoYWRldnNbaV0pCiAgICAgIHsKCWdydWJfZHByaW50ZiAoImFo Y2kiLCAiZXJyOiAleFxuIiwKCQkgICAgICBhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+ cG9ydF0uc2F0YV9lcnJvcik7CgoJYWRldnNbaV0tPmhiYS0+cG9ydHNbYWRldnNbaV0tPnBvcnRd LmNvbW1hbmQgfD0gR1JVQl9BSENJX0hCQV9QT1JUX0NNRF9QT1dFUl9PTjsKCWFkZXZzW2ldLT5o YmEtPnBvcnRzW2FkZXZzW2ldLT5wb3J0XS5jb21tYW5kIHw9IEdSVUJfQUhDSV9IQkFfUE9SVF9D TURfU1BJTl9VUDsKCglncnViX2RwcmludGYgKCJhaGNpIiwgImVycjogJXhcbiIsCgkJICAgICAg YWRldnNbaV0tPmhiYS0+cG9ydHNbYWRldnNbaV0tPnBvcnRdLnNhdGFfZXJyb3IpOwoKCWFkZXZz W2ldLT5oYmEtPnBvcnRzW2FkZXZzW2ldLT5wb3J0XS5zYXRhX2Vycm9yID0gfjA7CglncnViX2Rw cmludGYgKCJhaGNpIiwgImVycjogJXhcbiIsCgkJICAgICAgYWRldnNbaV0tPmhiYS0+cG9ydHNb YWRldnNbaV0tPnBvcnRdLnNhdGFfZXJyb3IpOwoKCWdydWJfZHByaW50ZiAoImFoY2kiLCAib2Zm c2V0OiAleCwgdGZkOiV4LCBDTUQ6ICV4XG4iLAoJCSAgICAgIChjaGFyICopICZhZGV2c1tpXS0+ aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0udGFza19maWxlX2RhdGEgLSAKCQkgICAgICAoY2hh ciAqKSBhZGV2c1tpXS0+aGJhLAoJCSAgICAgIGFkZXZzW2ldLT5oYmEtPnBvcnRzW2FkZXZzW2ld LT5wb3J0XS50YXNrX2ZpbGVfZGF0YSwKCQkgICAgICBhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2 c1tpXS0+cG9ydF0uY29tbWFuZCk7CgoJZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJlcnI6ICV4XG4i LAoJCSAgICAgIGFkZXZzW2ldLT5oYmEtPnBvcnRzW2FkZXZzW2ldLT5wb3J0XS5zYXRhX2Vycm9y KTsKICAgICAgfQoKCiAgZm9yIChpID0gMDsgaSA8IG5wb3J0czsgaSsrKQogICAgaWYgKGFkZXZz W2ldKQogICAgICB7CglncnViX2RwcmludGYgKCJhaGNpIiwgIm9mZnNldDogJXgsIHRmZDoleCwg Q01EOiAleFxuIiwKCQkgICAgICAoY2hhciAqKSAmYWRldnNbaV0tPmhiYS0+cG9ydHNbYWRldnNb aV0tPnBvcnRdLnRhc2tfZmlsZV9kYXRhIC0gCgkJICAgICAgKGNoYXIgKikgYWRldnNbaV0tPmhi YSwKCQkgICAgICBhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0udGFza19maWxl X2RhdGEsCgkJICAgICAgYWRldnNbaV0tPmhiYS0+cG9ydHNbYWRldnNbaV0tPnBvcnRdLmNvbW1h bmQpOwoKCWdydWJfZHByaW50ZiAoImFoY2kiLCAiZXJyOiAleFxuIiwKCQkgICAgICBhZGV2c1tp XS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0uc2F0YV9lcnJvcik7CgoJYWRldnNbaV0tPmhi YS0+cG9ydHNbYWRldnNbaV0tPnBvcnRdLmNvbW1hbmQKCSAgPSAoYWRldnNbaV0tPmhiYS0+cG9y dHNbYWRldnNbaV0tPnBvcnRdLmNvbW1hbmQgJiAweDBmZmZmZmZmKSB8ICgxIDw8IDI4KSB8IDIg fCA0OwoKCS8qICBzdHJ1Y3QgZ3J1Yl9kaXNrX2F0YV9wYXNzX3Rocm91Z2hfcGFybXMgcGFybXMy OwoJICAgIGdydWJfbWVtc2V0ICgmcGFybXMyLCAwLCBzaXplb2YgKHBhcm1zMikpOwoJICAgIHBh cm1zMi50YXNrZmlsZS5jbWQgPSA4OwoJICAgIGdydWJfYWhjaV9yZWFkd3JpdGVfcmVhbCAoZGV2 LCAmcGFybXMyLCAxLCAxKTsqLwogICAgICB9CgogIGVuZHRpbWUgPSBncnViX2dldF90aW1lX21z ICgpICsgMTAwMDA7CgogIHdoaWxlIChncnViX2dldF90aW1lX21zICgpIDwgZW5kdGltZSkKICAg IHsKICAgICAgZm9yIChpID0gMDsgaSA8IG5wb3J0czsgaSsrKQoJaWYgKGFkZXZzW2ldICYmIChh ZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2c1tpXS0+cG9ydF0udGFza19maWxlX2RhdGEgJiAweDg4 KSkKCSAgYnJlYWs7CiAgICAgIGlmIChpID09IG5wb3J0cykKCWJyZWFrOwogICAgfQoKICBmb3Ig KGkgPSAwOyBpIDwgbnBvcnRzOyBpKyspCiAgICBpZiAoYWRldnNbaV0gJiYgKGFkZXZzW2ldLT5o YmEtPnBvcnRzW2FkZXZzW2ldLT5wb3J0XS50YXNrX2ZpbGVfZGF0YSAmIDB4ODgpKQogICAgICB7 CglncnViX2RwcmludGYgKCJhaGNpIiwgInBvcnQgJWQgaXMgYnVzeVxuIiwgaSk7CglmYWlsZWRf YWRldnNbaV0gPSBhZGV2c1tpXTsKCWFkZXZzW2ldID0gMDsKICAgICAgfQoKICBmb3IgKGkgPSAw OyBpIDwgbnBvcnRzOyBpKyspCiAgICBpZiAoYWRldnNbaV0pCiAgICAgIGFkZXZzW2ldLT5oYmEt PnBvcnRzW2FkZXZzW2ldLT5wb3J0XS5jb21tYW5kIHw9IEdSVUJfQUhDSV9IQkFfUE9SVF9DTURf U1Q7CgogIGVuZHRpbWUgPSBncnViX2dldF90aW1lX21zICgpICsgMTAwMDsKCiAgd2hpbGUgKGdy dWJfZ2V0X3RpbWVfbXMgKCkgPCBlbmR0aW1lKQogICAgewogICAgICBmb3IgKGkgPSAwOyBpIDwg bnBvcnRzOyBpKyspCglpZiAoYWRldnNbaV0gJiYgIShhZGV2c1tpXS0+aGJhLT5wb3J0c1thZGV2 c1tpXS0+cG9ydF0uY29tbWFuZCAmIEdSVUJfQUhDSV9IQkFfUE9SVF9DTURfQ1IpKQoJICBicmVh azsKICAgICAgaWYgKGkgPT0gbnBvcnRzKQoJYnJlYWs7CiAgICB9CgogIGZvciAoaSA9IDA7IGkg PCBucG9ydHM7IGkrKykKICAgIGlmIChhZGV2c1tpXSAmJiAhKGFkZXZzW2ldLT5oYmEtPnBvcnRz W2FkZXZzW2ldLT5wb3J0XS5jb21tYW5kICYgR1JVQl9BSENJX0hCQV9QT1JUX0NNRF9DUikpCiAg ICAgIHsKCWdydWJfZHByaW50ZiAoImFoY2kiLCAiY291bGRuJ3Qgc3RhcnQgQ1Igb24gcG9ydCAl ZFxuIiwgaSk7CglmYWlsZWRfYWRldnNbaV0gPSBhZGV2c1tpXTsKCWFkZXZzW2ldID0gMDsKICAg ICAgfQogIGZvciAoaSA9IDA7IGkgPCBucG9ydHM7IGkrKykKICAgIGlmIChmYWlsZWRfYWRldnNb aV0gJiYgKGZyX3J1bm5pbmcgJiAoMSA8PCBpKSkpCiAgICAgIGZhaWxlZF9hZGV2c1tpXS0+aGJh LT5wb3J0c1tmYWlsZWRfYWRldnNbaV0tPnBvcnRdLmNvbW1hbmQgJj0gfkdSVUJfQUhDSV9IQkFf UE9SVF9DTURfRlJFOwoKICBlbmR0aW1lID0gZ3J1Yl9nZXRfdGltZV9tcyAoKSArIDEwMDA7CiAg d2hpbGUgKGdydWJfZ2V0X3RpbWVfbXMgKCkgPCBlbmR0aW1lKQogICAgewogICAgICBmb3IgKGkg PSAwOyBpIDwgbnBvcnRzOyBpKyspCglpZiAoZmFpbGVkX2FkZXZzW2ldICYmIChmcl9ydW5uaW5n ICYgKDEgPDwgaSkpICYmIChmYWlsZWRfYWRldnNbaV0tPmhiYS0+cG9ydHNbZmFpbGVkX2FkZXZz W2ldLT5wb3J0XS5jb21tYW5kICYgR1JVQl9BSENJX0hCQV9QT1JUX0NNRF9GUikpCgkgIGJyZWFr OwogICAgICBpZiAoaSA9PSBucG9ydHMpCglicmVhazsKICAgIH0KICBmb3IgKGkgPSAwOyBpIDwg bnBvcnRzOyBpKyspCiAgICBpZiAoZmFpbGVkX2FkZXZzW2ldKQogICAgICB7CglncnViX2RtYV9m cmVlIChhZGV2c1tpXS0+Y29tbWFuZF9saXN0X2NodW5rKTsKCWdydWJfZG1hX2ZyZWUgKGFkZXZz W2ldLT5jb21tYW5kX3RhYmxlX2NodW5rKTsKCWdydWJfZG1hX2ZyZWUgKGFkZXZzW2ldLT5yZmlz KTsKICAgICAgfQoKICBmb3IgKGkgPSAwOyBpIDwgbnBvcnRzOyBpKyspCiAgICBpZiAoYWRldnNb aV0pCiAgICAgIHsKCWdydWJfbGlzdF9wdXNoIChHUlVCX0FTX0xJU1RfUCAoJmdydWJfYWhjaV9k ZXZpY2VzKSwKCQkJR1JVQl9BU19MSVNUIChhZGV2c1tpXSkpOwogICAgICB9CgogIHJldHVybiAw Owp9CgpzdGF0aWMgZ3J1Yl9lcnJfdApncnViX2FoY2lfaW5pdGlhbGl6ZSAodm9pZCkKewogIGdy dWJfcGNpX2l0ZXJhdGUgKGdydWJfYWhjaV9wY2lpbml0LCBOVUxMKTsKICByZXR1cm4gZ3J1Yl9l cnJubzsKfQoKc3RhdGljIGdydWJfZXJyX3QKZ3J1Yl9haGNpX2ZpbmlfaHcgKGludCBub3JldHVy biBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCnsKICBzdHJ1Y3QgZ3J1Yl9haGNpX2RldmljZSAq ZGV2OwoKICBmb3IgKGRldiA9IGdydWJfYWhjaV9kZXZpY2VzOyBkZXY7IGRldiA9IGRldi0+bmV4 dCkKICAgIHsKICAgICAgZ3J1Yl91aW50NjRfdCBlbmR0aW1lOwoKICAgICAgZGV2LT5oYmEtPnBv cnRzW2Rldi0+cG9ydF0uY29tbWFuZCAmPSB+R1JVQl9BSENJX0hCQV9QT1JUX0NNRF9GUkU7CiAg ICAgIGVuZHRpbWUgPSBncnViX2dldF90aW1lX21zICgpICsgMTAwMDsKICAgICAgd2hpbGUgKChk ZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5jb21tYW5kICYgR1JVQl9BSENJX0hCQV9QT1JUX0NN RF9GUikpCglpZiAoZ3J1Yl9nZXRfdGltZV9tcyAoKSA+IGVuZHRpbWUpCgkgIHsKCSAgICBncnVi X2RwcmludGYgKCJhaGNpIiwgImNvdWxkbid0IHN0b3AgRlJcbiIpOwoJICAgIGJyZWFrOwoJICB9 CgogICAgICBkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5jb21tYW5kICY9IH5HUlVCX0FIQ0lf SEJBX1BPUlRfQ01EX1NUOwogICAgICBlbmR0aW1lID0gZ3J1Yl9nZXRfdGltZV9tcyAoKSArIDEw MDA7CiAgICAgIHdoaWxlICgoZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uY29tbWFuZCAmIEdS VUJfQUhDSV9IQkFfUE9SVF9DTURfQ1IpKQoJaWYgKGdydWJfZ2V0X3RpbWVfbXMgKCkgPiBlbmR0 aW1lKQoJICB7CgkgICAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJjb3VsZG4ndCBzdG9wIENSXG4i KTsKCSAgICBicmVhazsKCSAgfQogICAgICBncnViX2RtYV9mcmVlIChkZXYtPmNvbW1hbmRfbGlz dF9jaHVuayk7CiAgICAgIGdydWJfZG1hX2ZyZWUgKGRldi0+Y29tbWFuZF90YWJsZV9jaHVuayk7 CiAgICAgIGdydWJfZG1hX2ZyZWUgKGRldi0+cmZpcyk7CiAgICAgIGRldi0+Y29tbWFuZF9saXN0 X2NodW5rID0gTlVMTDsKICAgICAgZGV2LT5jb21tYW5kX3RhYmxlX2NodW5rID0gTlVMTDsKICAg ICAgZGV2LT5yZmlzID0gTlVMTDsKICAgIH0KICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKfQoKc3Rh dGljIGludCAKcmVpbml0X3BvcnQgKHN0cnVjdCBncnViX2FoY2lfZGV2aWNlICpkZXYpCnsKICBz dHJ1Y3QgZ3J1Yl9wY2lfZG1hX2NodW5rICpjb21tYW5kX2xpc3Q7CiAgc3RydWN0IGdydWJfcGNp X2RtYV9jaHVuayAqY29tbWFuZF90YWJsZTsKICBncnViX3VpbnQ2NF90IGVuZHRpbWU7CgogIGNv bW1hbmRfbGlzdCA9IGdydWJfbWVtYWxpZ25fZG1hMzIgKDEwMjQsIHNpemVvZiAoc3RydWN0IGdy dWJfYWhjaV9jbWRfaGVhZCkpOwogIGlmICghY29tbWFuZF9saXN0KQogICAgcmV0dXJuIDE7Cgog IGNvbW1hbmRfdGFibGUgPSBncnViX21lbWFsaWduX2RtYTMyICgxMDI0LAoJCQkJICAgICAgIHNp emVvZiAoc3RydWN0IGdydWJfYWhjaV9jbWRfdGFibGUpKTsKICBpZiAoIWNvbW1hbmRfdGFibGUp CiAgICB7CiAgICAgIGdydWJfZG1hX2ZyZWUgKGNvbW1hbmRfbGlzdCk7CiAgICAgIHJldHVybiAx OwogICAgfQoKICBncnViX2RwcmludGYgKCJhaGNpIiwgImZvdW5kIGRldmljZSBhaGNpJWQgKHBv cnQgJWQpXG4iLCBkZXYtPm51bSwgZGV2LT5wb3J0KTsKCiAgZGV2LT5oYmEtPnBvcnRzW2Rldi0+ cG9ydF0uY29tbWFuZCAmPSB+R1JVQl9BSENJX0hCQV9QT1JUX0NNRF9GUkU7CiAgZW5kdGltZSA9 IGdydWJfZ2V0X3RpbWVfbXMgKCkgKyAxMDAwOwogIHdoaWxlICgoZGV2LT5oYmEtPnBvcnRzW2Rl di0+cG9ydF0uY29tbWFuZCAmIEdSVUJfQUhDSV9IQkFfUE9SVF9DTURfRlIpKQogICAgaWYgKGdy dWJfZ2V0X3RpbWVfbXMgKCkgPiBlbmR0aW1lKQogICAgICB7CglncnViX2RwcmludGYgKCJhaGNp IiwgImNvdWxkbid0IHN0b3AgRlJcbiIpOwoJZ290byBvdXQ7CiAgICAgIH0KCiAgZGV2LT5oYmEt PnBvcnRzW2Rldi0+cG9ydF0uY29tbWFuZCAmPSB+R1JVQl9BSENJX0hCQV9QT1JUX0NNRF9TVDsK ICBlbmR0aW1lID0gZ3J1Yl9nZXRfdGltZV9tcyAoKSArIDEwMDA7CiAgd2hpbGUgKChkZXYtPmhi YS0+cG9ydHNbZGV2LT5wb3J0XS5jb21tYW5kICYgR1JVQl9BSENJX0hCQV9QT1JUX0NNRF9DUikp CiAgICBpZiAoZ3J1Yl9nZXRfdGltZV9tcyAoKSA+IGVuZHRpbWUpCiAgICAgIHsKCWdydWJfZHBy aW50ZiAoImFoY2kiLCAiY291bGRuJ3Qgc3RvcCBDUlxuIik7Cglnb3RvIG91dDsKICAgICAgfQoK ICBkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5mYnMgPSAyOwoKICBkZXYtPnJmaXMgPSBncnVi X21lbWFsaWduX2RtYTMyICg0MDk2LCAKCQkJCSAgIHNpemVvZiAoc3RydWN0IGdydWJfYWhjaV9y ZWNlaXZlZF9maXMpKTsKICBncnViX21lbXNldCAoKGNoYXIgKikgZ3J1Yl9kbWFfZ2V0X3ZpcnQg KGRldi0+cmZpcyksIDAsCgkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgZ3J1Yl9haGNpX3JlY2VpdmVk X2ZpcykpOwogIGRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRdLmZpc19iYXNlID0gZ3J1Yl9kbWFf Z2V0X3BoeXMgKGRldi0+cmZpcyk7CiAgZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uY29tbWFu ZF9saXN0X2Jhc2UKICAgID0gZ3J1Yl9kbWFfZ2V0X3BoeXMgKGNvbW1hbmRfbGlzdCk7CiAgZGV2 LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uY29tbWFuZCB8PSBHUlVCX0FIQ0lfSEJBX1BPUlRfQ01E X0ZSRTsKICB3aGlsZSAoIShkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5jb21tYW5kICYgR1JV Ql9BSENJX0hCQV9QT1JUX0NNRF9GUikpCiAgICBpZiAoZ3J1Yl9nZXRfdGltZV9tcyAoKSA+IGVu ZHRpbWUpCiAgICAgIHsKCWdydWJfZHByaW50ZiAoImFoY2kiLCAiY291bGRuJ3Qgc3RhcnQgRlJc biIpOwoJZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uY29tbWFuZCAmPSB+R1JVQl9BSENJX0hC QV9QT1JUX0NNRF9GUkU7Cglnb3RvIG91dDsKICAgICAgfQogIGRldi0+aGJhLT5wb3J0c1tkZXYt PnBvcnRdLmNvbW1hbmQgfD0gR1JVQl9BSENJX0hCQV9QT1JUX0NNRF9TVDsKICB3aGlsZSAoIShk ZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5jb21tYW5kICYgR1JVQl9BSENJX0hCQV9QT1JUX0NN RF9DUikpCiAgICBpZiAoZ3J1Yl9nZXRfdGltZV9tcyAoKSA+IGVuZHRpbWUpCiAgICAgIHsKCWdy dWJfZHByaW50ZiAoImFoY2kiLCAiY291bGRuJ3Qgc3RhcnQgQ1JcbiIpOwoJZGV2LT5oYmEtPnBv cnRzW2Rldi0+cG9ydF0uY29tbWFuZCAmPSB+R1JVQl9BSENJX0hCQV9QT1JUX0NNRF9DUjsKCWdv dG8gb3V0X3N0b3BfZnI7CiAgICAgIH0KCiAgZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uY29t bWFuZAogICAgPSAoZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uY29tbWFuZCAmIDB4MGZmZmZm ZmYpIHwgKDEgPDwgMjgpIHwgMiB8IDQ7CgogIGRldi0+Y29tbWFuZF9saXN0X2NodW5rID0gY29t bWFuZF9saXN0OwogIGRldi0+Y29tbWFuZF9saXN0ID0gZ3J1Yl9kbWFfZ2V0X3ZpcnQgKGNvbW1h bmRfbGlzdCk7CiAgZGV2LT5jb21tYW5kX3RhYmxlX2NodW5rID0gY29tbWFuZF90YWJsZTsKICBk ZXYtPmNvbW1hbmRfdGFibGUgPSBncnViX2RtYV9nZXRfdmlydCAoY29tbWFuZF90YWJsZSk7CiAg ZGV2LT5jb21tYW5kX2xpc3QtPmNvbW1hbmRfdGFibGVfYmFzZQogICAgPSBncnViX2RtYV9nZXRf cGh5cyAoY29tbWFuZF90YWJsZSk7CgogIHJldHVybiAwOwogb3V0X3N0b3BfZnI6CiAgZGV2LT5o YmEtPnBvcnRzW2Rldi0+cG9ydF0uY29tbWFuZCAmPSB+R1JVQl9BSENJX0hCQV9QT1JUX0NNRF9G UkU7CiAgZW5kdGltZSA9IGdydWJfZ2V0X3RpbWVfbXMgKCkgKyAxMDAwOwogIHdoaWxlICgoZGV2 LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uY29tbWFuZCAmIEdSVUJfQUhDSV9IQkFfUE9SVF9DTURf RlIpKQogICAgaWYgKGdydWJfZ2V0X3RpbWVfbXMgKCkgPiBlbmR0aW1lKQogICAgICB7CglncnVi X2RwcmludGYgKCJhaGNpIiwgImNvdWxkbid0IHN0b3AgRlJcbiIpOwoJYnJlYWs7CiAgICAgIH0K IG91dDoKICBncnViX2RtYV9mcmVlIChjb21tYW5kX2xpc3QpOwogIGdydWJfZG1hX2ZyZWUgKGNv bW1hbmRfdGFibGUpOwogIGdydWJfZG1hX2ZyZWUgKGRldi0+cmZpcyk7CiAgcmV0dXJuIDE7Cn0K CnN0YXRpYyBncnViX2Vycl90CmdydWJfYWhjaV9yZXN0b3JlX2h3ICh2b2lkKQp7CiAgc3RydWN0 IGdydWJfYWhjaV9kZXZpY2UgKipwZGV2OwoKICBmb3IgKHBkZXYgPSAmZ3J1Yl9haGNpX2Rldmlj ZXM7ICpwZGV2OyBwZGV2ID0gJigoKnBkZXYpLT5uZXh0KSkKICAgIGlmIChyZWluaXRfcG9ydCAo KnBkZXYpKQogICAgICB7CglzdHJ1Y3QgZ3J1Yl9haGNpX2RldmljZSAqb2RldjsKCW9kZXYgPSAq cGRldjsKCSpwZGV2ID0gKCpwZGV2KS0+bmV4dDsKCWdydWJfZnJlZSAob2Rldik7CiAgICAgIH0K ICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKfQoKCgwKCnN0YXRpYyBpbnQKZ3J1Yl9haGNpX2l0ZXJh dGUgKGdydWJfYXRhX2Rldl9pdGVyYXRlX2hvb2tfdCBob29rLCB2b2lkICpob29rX2RhdGEsCgkJ ICAgZ3J1Yl9kaXNrX3B1bGxfdCBwdWxsKQp7CiAgc3RydWN0IGdydWJfYWhjaV9kZXZpY2UgKmRl djsKCiAgaWYgKHB1bGwgIT0gR1JVQl9ESVNLX1BVTExfTk9ORSkKICAgIHJldHVybiAwOwoKICBG T1JfTElTVF9FTEVNRU5UUyhkZXYsIGdydWJfYWhjaV9kZXZpY2VzKQogICAgaWYgKGhvb2sgKEdS VUJfU0NTSV9TVUJTWVNURU1fQUhDSSwgZGV2LT5udW0sIGhvb2tfZGF0YSkpCiAgICAgIHJldHVy biAxOwoKICByZXR1cm4gMDsKfQoKI2lmIDAKc3RhdGljIGludApmaW5kX2ZyZWVfY21kX3Nsb3Qg KHN0cnVjdCBncnViX2FoY2lfZGV2aWNlICpkZXYpCnsKICBpbnQgaTsKICBmb3IgKGkgPSAwOyBp IDwgMzI7IGkrKykKICAgIHsKICAgICAgaWYgKGRldi0+aGRhLT5wb3J0c1tkZXYtPnBvcnRdLmNv bW1hbmRfaXNzdWUgJiAoMSA8PCBpKSkKCWNvbnRpbnVlOwogICAgICBpZiAoZGV2LT5oZGEtPnBv cnRzW2Rldi0+cG9ydF0uc2F0YV9hY3RpdmUgJiAoMSA8PCBpKSkKCWNvbnRpbnVlOwogICAgICBy ZXR1cm4gaTsKICAgIH0KICByZXR1cm4gLTE7Cn0KI2VuZGlmCgplbnVtCiAgewogICAgR1JVQl9B SENJX0ZJU19SRUdfSDJEID0gMHgyNwogIH07CgpzdGF0aWMgY29uc3QgaW50IHJlZ2lzdGVyX21h cFsxMV0gPSB7IDMgLyogRmVhdHVyZXMgKi8sCgkJCQkgICAgICAxMiAvKiBTZWN0b3JzICovLAoJ CQkJICAgICAgNCAvKiBMQkEgbG93ICovLAoJCQkJICAgICAgNSAvKiBMQkEgbWlkICovLAoJCQkJ ICAgICAgNiAvKiBMQkEgaGlnaCAqLywKCQkJCSAgICAgIDcgLyogRGV2aWNlICovLAoJCQkJICAg ICAgMiAvKiBDTUQgcmVnaXN0ZXIgKi8sCgkJCQkgICAgICAxMyAvKiBTZWN0b3JzIDQ4ICAqLywK CQkJCSAgICAgIDggLyogTEJBNDggbG93ICovLAoJCQkJICAgICAgOSAvKiBMQkE0OCBtaWQgKi8s CgkJCQkgICAgICAxMCAvKiBMQkE0OCBoaWdoICovIH07IAoKc3RhdGljIGdydWJfZXJyX3QKZ3J1 Yl9haGNpX3Jlc2V0X3BvcnQgKHN0cnVjdCBncnViX2FoY2lfZGV2aWNlICpkZXYsIGludCBmb3Jj ZSkKewogIGdydWJfdWludDY0X3QgZW5kdGltZTsKICAKICBkZXYtPmhiYS0+cG9ydHNbZGV2LT5w b3J0XS5zYXRhX2Vycm9yID0gZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uc2F0YV9lcnJvcjsK CiAgaWYgKGZvcmNlIHx8IChkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5jb21tYW5kX2lzc3Vl ICYgMSkKICAgICAgfHwgKGRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRdLnRhc2tfZmlsZV9kYXRh ICYgMHg4MCkpCiAgICB7CiAgICAgIHN0cnVjdCBncnViX2Rpc2tfYXRhX3Bhc3NfdGhyb3VnaF9w YXJtcyBwYXJtczI7CiAgICAgIGRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRdLmNvbW1hbmQgJj0g fkdSVUJfQUhDSV9IQkFfUE9SVF9DTURfU1Q7CiAgICAgIGVuZHRpbWUgPSBncnViX2dldF90aW1l X21zICgpICsgMTAwMDsKICAgICAgd2hpbGUgKChkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5j b21tYW5kICYgR1JVQl9BSENJX0hCQV9QT1JUX0NNRF9DUikpCglpZiAoZ3J1Yl9nZXRfdGltZV9t cyAoKSA+IGVuZHRpbWUpCgkgIHsKCSAgICBncnViX2RwcmludGYgKCJhaGNpIiwgImNvdWxkbid0 IHN0b3AgQ1IiKTsKCSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfSU8sICJjb3VsZG4n dCBzdG9wIENSIik7CgkgIH0KICAgICAgZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uY29tbWFu ZCB8PSA4OwogICAgICB3aGlsZSAoZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uY29tbWFuZCAm IDgpCglpZiAoZ3J1Yl9nZXRfdGltZV9tcyAoKSA+IGVuZHRpbWUpCgkgIHsKCSAgICBncnViX2Rw cmludGYgKCJhaGNpIiwgImNvdWxkbid0IHNldCBDTE9cbiIpOwoJICAgIGRldi0+aGJhLT5wb3J0 c1tkZXYtPnBvcnRdLmNvbW1hbmQgJj0gfkdSVUJfQUhDSV9IQkFfUE9SVF9DTURfRlJFOwoJICAg IHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9JTywgImNvdWxkbid0IHNldCBDTE8iKTsKCSAg fQoKICAgICAgZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uY29tbWFuZCB8PSBHUlVCX0FIQ0lf SEJBX1BPUlRfQ01EX1NUOwogICAgICB3aGlsZSAoIShkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0 XS5jb21tYW5kICYgR1JVQl9BSENJX0hCQV9QT1JUX0NNRF9DUikpCglpZiAoZ3J1Yl9nZXRfdGlt ZV9tcyAoKSA+IGVuZHRpbWUpCgkgIHsKCSAgICBncnViX2RwcmludGYgKCJhaGNpIiwgImNvdWxk bid0IHN0b3AgQ1IiKTsKCSAgICBkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5jb21tYW5kICY9 IH5HUlVCX0FIQ0lfSEJBX1BPUlRfQ01EX1NUOwoJICAgIHJldHVybiBncnViX2Vycm9yIChHUlVC X0VSUl9JTywgImNvdWxkbid0IHN0b3AgQ1IiKTsKCSAgfQogICAgICBkZXYtPmhiYS0+cG9ydHNb ZGV2LT5wb3J0XS5zYXRhX2Vycm9yID0gZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uc2F0YV9l cnJvcjsKICAgICAgZ3J1Yl9tZW1zZXQgKCZwYXJtczIsIDAsIHNpemVvZiAocGFybXMyKSk7CiAg ICAgIHBhcm1zMi50YXNrZmlsZS5jbWQgPSA4OwogICAgICByZXR1cm4gZ3J1Yl9haGNpX3JlYWR3 cml0ZV9yZWFsIChkZXYsICZwYXJtczIsIDEsIDEpOwogICAgfQogIHJldHVybiBHUlVCX0VSUl9O T05FOwp9CgpzdGF0aWMgZ3J1Yl9lcnJfdCAKZ3J1Yl9haGNpX3JlYWR3cml0ZV9yZWFsIChzdHJ1 Y3QgZ3J1Yl9haGNpX2RldmljZSAqZGV2LAoJCQkgIHN0cnVjdCBncnViX2Rpc2tfYXRhX3Bhc3Nf dGhyb3VnaF9wYXJtcyAqcGFybXMsCgkJCSAgaW50IHNwaW51cCwgaW50IHJlc2V0KQp7CiAgc3Ry dWN0IGdydWJfcGNpX2RtYV9jaHVuayAqYnVmYzsKICBncnViX3VpbnQ2NF90IGVuZHRpbWU7CiAg dW5zaWduZWQgaTsKICBncnViX2Vycl90IGVyciA9IEdSVUJfRVJSX05PTkU7CgogIGdydWJfZHBy aW50ZiAoImFoY2kiLCAiQUhDSSB0ZmQgPSAleFxuIiwKCQlkZXYtPmhiYS0+cG9ydHNbZGV2LT5w b3J0XS50YXNrX2ZpbGVfZGF0YSk7CgogIGlmICghcmVzZXQpCiAgICBncnViX2FoY2lfcmVzZXRf cG9ydCAoZGV2LCAwKTsKIAogIGdydWJfZHByaW50ZiAoImFoY2kiLCAiQUhDSSB0ZmQgPSAleFxu IiwKCQlkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS50YXNrX2ZpbGVfZGF0YSk7CiAgZGV2LT5o YmEtPnBvcnRzW2Rldi0+cG9ydF0udGFza19maWxlX2RhdGEgPSAwOwogIGRldi0+aGJhLT5wb3J0 c1tkZXYtPnBvcnRdLmNvbW1hbmRfaXNzdWUgPSAwOwogIGdydWJfZHByaW50ZiAoImFoY2kiLCAi QUhDSSB0ZmQgPSAleFxuIiwKCQlkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS50YXNrX2ZpbGVf ZGF0YSk7CgogIGRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRdLnNhdGFfZXJyb3IgPSBkZXYtPmhi YS0+cG9ydHNbZGV2LT5wb3J0XS5zYXRhX2Vycm9yOwoKICBncnViX2RwcmludGYoImFoY2kiLCAi Z3J1Yl9haGNpX3JlYWQgKHNpemU9JWxsdSwgY21kc2l6ZSA9ICVsbHUpXG4iLAoJICAgICAgICh1 bnNpZ25lZCBsb25nIGxvbmcpIHBhcm1zLT5zaXplLAoJICAgICAgICh1bnNpZ25lZCBsb25nIGxv bmcpIHBhcm1zLT5jbWRzaXplKTsKCiAgaWYgKHBhcm1zLT5jbWRzaXplICE9IDAgJiYgcGFybXMt PmNtZHNpemUgIT0gMTIgJiYgcGFybXMtPmNtZHNpemUgIT0gMTYpCiAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfQlVHLCAiaW5jb3JyZWN0IEFUQVBJIGNvbW1hbmQgc2l6ZSIpOwoKICBp ZiAocGFybXMtPnNpemUgPiBHUlVCX0FIQ0lfUFJEVF9NQVhfQ0hVTktfTEVOR1RIKQogICAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JVRywgInRvbyBiaWcgZGF0YSBidWZmZXIiKTsKCiAg YnVmYyA9IGdydWJfbWVtYWxpZ25fZG1hMzIgKDEwMjQsIHBhcm1zLT5zaXplICsgKHBhcm1zLT5z aXplICYgMSkpOwoKICBncnViX2RwcmludGYgKCJhaGNpIiwgIkFIQ0kgdGZkID0gJXgsIENMPSVw XG4iLAoJCWRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRdLnRhc2tfZmlsZV9kYXRhLAoJCWRldi0+ Y29tbWFuZF9saXN0KTsKICAvKiBGSVhNRTogc3VwcG9ydCBwb3J0IG11bHRpcGxpZXJzLiAgKi8K ICBkZXYtPmNvbW1hbmRfbGlzdFswXS5jb25maWcKICAgID0gKDUgPDwgR1JVQl9BSENJX0NPTkZJ R19DRklTX0xFTkdUSF9TSElGVCkKICAgIC8vICAgIHwgR1JVQl9BSENJX0NPTkZJR19DTEVBUl9S X09LCiAgICB8ICgwIDw8IEdSVUJfQUhDSV9DT05GSUdfUE1QX1NISUZUKQogICAgfCAoMSA8PCBH UlVCX0FIQ0lfQ09ORklHX1BSRFRfTEVOR1RIX1NISUZUKQogICAgfCAocGFybXMtPmNtZHNpemUg PyBHUlVCX0FIQ0lfQ09ORklHX0FUQVBJIDogMCkKICAgIHwgKHBhcm1zLT53cml0ZSA/IEdSVUJf QUhDSV9DT05GSUdfV1JJVEUgOiBHUlVCX0FIQ0lfQ09ORklHX1JFQUQpCiAgICB8IChwYXJtcy0+ dGFza2ZpbGUuY21kID09IDggPyAoMSA8PCA4KSA6IDApOwogIGdydWJfZHByaW50ZiAoImFoY2ki LCAiQUhDSSB0ZmQgPSAleFxuIiwKCQlkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS50YXNrX2Zp bGVfZGF0YSk7CgogIGRldi0+Y29tbWFuZF9saXN0WzBdLnRyYW5zZmVyZWQgPSAwOwogIGRldi0+ Y29tbWFuZF9saXN0WzBdLmNvbW1hbmRfdGFibGVfYmFzZQogICAgPSBncnViX2RtYV9nZXRfcGh5 cyAoZGV2LT5jb21tYW5kX3RhYmxlX2NodW5rKTsKCiAgZ3J1Yl9tZW1zZXQgKChjaGFyICopIGRl di0+Y29tbWFuZF9saXN0WzBdLnVudXNlZCwgMCwKCSAgICAgICBzaXplb2YgKGRldi0+Y29tbWFu ZF9saXN0WzBdLnVudXNlZCkpOwoKICBncnViX21lbXNldCAoKGNoYXIgKikgJmRldi0+Y29tbWFu ZF90YWJsZVswXSwgMCwKCSAgICAgICBzaXplb2YgKGRldi0+Y29tbWFuZF90YWJsZVswXSkpOwog IGdydWJfZHByaW50ZiAoImFoY2kiLCAiQUhDSSB0ZmQgPSAleFxuIiwKCQlkZXYtPmhiYS0+cG9y dHNbZGV2LT5wb3J0XS50YXNrX2ZpbGVfZGF0YSk7CgogIGlmIChwYXJtcy0+Y21kc2l6ZSkKICAg IGdydWJfbWVtY3B5ICgoY2hhciAqKSBkZXYtPmNvbW1hbmRfdGFibGVbMF0uY29tbWFuZCwgcGFy bXMtPmNtZCwKCQkgcGFybXMtPmNtZHNpemUpOwoKICBncnViX2RwcmludGYgKCJhaGNpIiwgIkFI Q0kgdGZkID0gJXhcbiIsCgkJZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0udGFza19maWxlX2Rh dGEpOwoKICBkZXYtPmNvbW1hbmRfdGFibGVbMF0uY2Zpc1swXSA9IEdSVUJfQUhDSV9GSVNfUkVH X0gyRDsKICBkZXYtPmNvbW1hbmRfdGFibGVbMF0uY2Zpc1sxXSA9IDB4ODA7CiAgZm9yIChpID0g MDsgaSA8IHNpemVvZiAocGFybXMtPnRhc2tmaWxlLnJhdyk7IGkrKykKICAgIGRldi0+Y29tbWFu ZF90YWJsZVswXS5jZmlzW3JlZ2lzdGVyX21hcFtpXV0gPSBwYXJtcy0+dGFza2ZpbGUucmF3W2ld OyAKCiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJjZmlzOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUw MnggJTAyeCAlMDJ4ICUwMnhcbiIsCgkJZGV2LT5jb21tYW5kX3RhYmxlWzBdLmNmaXNbMF0sIGRl di0+Y29tbWFuZF90YWJsZVswXS5jZmlzWzFdLAoJCWRldi0+Y29tbWFuZF90YWJsZVswXS5jZmlz WzJdLCBkZXYtPmNvbW1hbmRfdGFibGVbMF0uY2Zpc1szXSwKCQlkZXYtPmNvbW1hbmRfdGFibGVb MF0uY2Zpc1s0XSwgZGV2LT5jb21tYW5kX3RhYmxlWzBdLmNmaXNbNV0sCgkJZGV2LT5jb21tYW5k X3RhYmxlWzBdLmNmaXNbNl0sIGRldi0+Y29tbWFuZF90YWJsZVswXS5jZmlzWzddKTsKICBncnVi X2RwcmludGYgKCJhaGNpIiwgImNmaXM6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUw MnggJTAyeFxuIiwKCQlkZXYtPmNvbW1hbmRfdGFibGVbMF0uY2Zpc1s4XSwgZGV2LT5jb21tYW5k X3RhYmxlWzBdLmNmaXNbOV0sCgkJZGV2LT5jb21tYW5kX3RhYmxlWzBdLmNmaXNbMTBdLCBkZXYt PmNvbW1hbmRfdGFibGVbMF0uY2Zpc1sxMV0sCgkJZGV2LT5jb21tYW5kX3RhYmxlWzBdLmNmaXNb MTJdLCBkZXYtPmNvbW1hbmRfdGFibGVbMF0uY2Zpc1sxM10sCgkJZGV2LT5jb21tYW5kX3RhYmxl WzBdLmNmaXNbMTRdLCBkZXYtPmNvbW1hbmRfdGFibGVbMF0uY2Zpc1sxNV0pOwoKICBkZXYtPmNv bW1hbmRfdGFibGVbMF0ucHJkdFswXS5kYXRhX2Jhc2UgPSBncnViX2RtYV9nZXRfcGh5cyAoYnVm Yyk7CiAgZGV2LT5jb21tYW5kX3RhYmxlWzBdLnByZHRbMF0udW51c2VkID0gMDsKICBkZXYtPmNv bW1hbmRfdGFibGVbMF0ucHJkdFswXS5zaXplID0gKHBhcm1zLT5zaXplIC0gMSk7CgogIGdydWJf ZHByaW50ZiAoImFoY2kiLCAiUFJEVCA9ICUiIFBSSXhHUlVCX1VJTlQ2NF9UICIsICV4LCAleCAo JSIKCQlQUkl1R1JVQl9TSVpFICIpXG4iLAoJCWRldi0+Y29tbWFuZF90YWJsZVswXS5wcmR0WzBd LmRhdGFfYmFzZSwKCQlkZXYtPmNvbW1hbmRfdGFibGVbMF0ucHJkdFswXS51bnVzZWQsCgkJZGV2 LT5jb21tYW5kX3RhYmxlWzBdLnByZHRbMF0uc2l6ZSwKCQkoY2hhciAqKSAmZGV2LT5jb21tYW5k X3RhYmxlWzBdLnByZHRbMF0KCQktIChjaGFyICopICZkZXYtPmNvbW1hbmRfdGFibGVbMF0pOwoK ICBpZiAocGFybXMtPndyaXRlKQogICAgZ3J1Yl9tZW1jcHkgKChjaGFyICopIGdydWJfZG1hX2dl dF92aXJ0IChidWZjKSwgcGFybXMtPmJ1ZmZlciwgcGFybXMtPnNpemUpOwoKICBncnViX2Rwcmlu dGYgKCJhaGNpIiwgIkFIQ0kgY29tbWFuZCBzY2hlZHVsZGVkXG4iKTsKICBncnViX2RwcmludGYg KCJhaGNpIiwgIkFIQ0kgdGZkID0gJXhcbiIsCgkJZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0u dGFza19maWxlX2RhdGEpOwogIGdydWJfZHByaW50ZiAoImFoY2kiLCAiQUhDSSBpbnRlbiA9ICV4 XG4iLAoJCWRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRdLmludGVuKTsKICBncnViX2RwcmludGYg KCJhaGNpIiwgIkFIQ0kgaW50c3RhdHVzID0gJXhcbiIsCgkJZGV2LT5oYmEtPnBvcnRzW2Rldi0+ cG9ydF0uaW50c3RhdHVzKTsKCiAgZGV2LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uaW50ZW4gPSAw eGZmZmZmZmZmOy8vKDEgPDwgMikgfCAoMSA8PCA1KTsKICBkZXYtPmhiYS0+cG9ydHNbZGV2LT5w b3J0XS5pbnRzdGF0dXMgPSAweGZmZmZmZmZmOy8vKDEgPDwgMikgfCAoMSA8PCA1KTsKICBncnVi X2RwcmludGYgKCJhaGNpIiwgIkFIQ0kgaW50ZW4gPSAleFxuIiwKCQlkZXYtPmhiYS0+cG9ydHNb ZGV2LT5wb3J0XS5pbnRlbik7CiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJBSENJIHRmZCA9ICV4 XG4iLAoJCWRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRdLnRhc2tfZmlsZV9kYXRhKTsKICBkZXYt PmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5zYXRhX2FjdGl2ZSA9IDE7CiAgZGV2LT5oYmEtPnBvcnRz W2Rldi0+cG9ydF0uY29tbWFuZF9pc3N1ZSA9IDE7CiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsICJB SENJIHNpZyA9ICV4XG4iLCBkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5zaWcpOwogIGdydWJf ZHByaW50ZiAoImFoY2kiLCAiQUhDSSB0ZmQgPSAleFxuIiwKCQlkZXYtPmhiYS0+cG9ydHNbZGV2 LT5wb3J0XS50YXNrX2ZpbGVfZGF0YSk7CgogIGVuZHRpbWUgPSBncnViX2dldF90aW1lX21zICgp ICsgKHNwaW51cCA/IDEwMDAwIDogNTAwMCk7CiAgd2hpbGUgKChkZXYtPmhiYS0+cG9ydHNbZGV2 LT5wb3J0XS5jb21tYW5kX2lzc3VlICYgMSkpCiAgICBpZiAoZ3J1Yl9nZXRfdGltZV9tcyAoKSA+ IGVuZHRpbWUpCiAgICAgIHsKCWdydWJfZHByaW50ZiAoImFoY2kiLCAiQUhDSSBzdGF0dXMgPCV4 ICV4ICV4ICV4PlxuIiwKCQkgICAgICBkZXYtPmhiYS0+cG9ydHNbZGV2LT5wb3J0XS5jb21tYW5k X2lzc3VlLAoJCSAgICAgIGRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRdLnNhdGFfYWN0aXZlLAoJ CSAgICAgIGRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRdLmludHN0YXR1cywKCQkgICAgICBkZXYt PmhiYS0+cG9ydHNbZGV2LT5wb3J0XS50YXNrX2ZpbGVfZGF0YSk7CglkZXYtPmhiYS0+cG9ydHNb ZGV2LT5wb3J0XS5jb21tYW5kX2lzc3VlID0gMDsKCWVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJS X0lPLCAiQUhDSSB0cmFuc2ZlciB0aW1lZCBvdXQiKTsKCWlmICghcmVzZXQpCgkgIGdydWJfYWhj aV9yZXNldF9wb3J0IChkZXYsIDEpOwoJYnJlYWs7CiAgICAgIH0KCiAgZ3J1Yl9kcHJpbnRmICgi YWhjaSIsICJBSENJIGNvbW1hbmQgY29tcGxldGVkIDwleCAleCAleCAleCAleCwgJXggJXg+XG4i LAoJCWRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRdLmNvbW1hbmRfaXNzdWUsCgkJZGV2LT5oYmEt PnBvcnRzW2Rldi0+cG9ydF0uaW50c3RhdHVzLAoJCWRldi0+aGJhLT5wb3J0c1tkZXYtPnBvcnRd LnRhc2tfZmlsZV9kYXRhLAoJCWRldi0+Y29tbWFuZF9saXN0WzBdLnRyYW5zZmVyZWQsCgkJZGV2 LT5oYmEtPnBvcnRzW2Rldi0+cG9ydF0uc2F0YV9lcnJvciwKCQkoKGdydWJfdWludDMyX3QgKikg Z3J1Yl9kbWFfZ2V0X3ZpcnQgKGRldi0+cmZpcykpWzB4MDBdLAoJCSgoZ3J1Yl91aW50MzJfdCAq KSBncnViX2RtYV9nZXRfdmlydCAoZGV2LT5yZmlzKSlbMHgxOF0pOwogIGdydWJfZHByaW50ZiAo ImFoY2kiLAoJCSJsYXN0IFBJTyBGSVMgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4 eCAlMDh4XG4iLAoJCSgoZ3J1Yl91aW50MzJfdCAqKSBncnViX2RtYV9nZXRfdmlydCAoZGV2LT5y ZmlzKSlbMHgwOF0sCgkJKChncnViX3VpbnQzMl90ICopIGdydWJfZG1hX2dldF92aXJ0IChkZXYt PnJmaXMpKVsweDA5XSwKCQkoKGdydWJfdWludDMyX3QgKikgZ3J1Yl9kbWFfZ2V0X3ZpcnQgKGRl di0+cmZpcykpWzB4MGFdLAoJCSgoZ3J1Yl91aW50MzJfdCAqKSBncnViX2RtYV9nZXRfdmlydCAo ZGV2LT5yZmlzKSlbMHgwYl0sCgkJKChncnViX3VpbnQzMl90ICopIGdydWJfZG1hX2dldF92aXJ0 IChkZXYtPnJmaXMpKVsweDBjXSwKCQkoKGdydWJfdWludDMyX3QgKikgZ3J1Yl9kbWFfZ2V0X3Zp cnQgKGRldi0+cmZpcykpWzB4MGRdLAoJCSgoZ3J1Yl91aW50MzJfdCAqKSBncnViX2RtYV9nZXRf dmlydCAoZGV2LT5yZmlzKSlbMHgwZV0sCgkJKChncnViX3VpbnQzMl90ICopIGdydWJfZG1hX2dl dF92aXJ0IChkZXYtPnJmaXMpKVsweDBmXSk7CiAgZ3J1Yl9kcHJpbnRmICgiYWhjaSIsCgkJImxh c3QgUkVHIEZJUyAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCgkJ KChncnViX3VpbnQzMl90ICopIGdydWJfZG1hX2dldF92aXJ0IChkZXYtPnJmaXMpKVsweDEwXSwK CQkoKGdydWJfdWludDMyX3QgKikgZ3J1Yl9kbWFfZ2V0X3ZpcnQgKGRldi0+cmZpcykpWzB4MTFd LAoJCSgoZ3J1Yl91aW50MzJfdCAqKSBncnViX2RtYV9nZXRfdmlydCAoZGV2LT5yZmlzKSlbMHgx Ml0sCgkJKChncnViX3VpbnQzMl90ICopIGdydWJfZG1hX2dldF92aXJ0IChkZXYtPnJmaXMpKVsw eDEzXSwKCQkoKGdydWJfdWludDMyX3QgKikgZ3J1Yl9kbWFfZ2V0X3ZpcnQgKGRldi0+cmZpcykp WzB4MTRdLAoJCSgoZ3J1Yl91aW50MzJfdCAqKSBncnViX2RtYV9nZXRfdmlydCAoZGV2LT5yZmlz KSlbMHgxNV0sCgkJKChncnViX3VpbnQzMl90ICopIGdydWJfZG1hX2dldF92aXJ0IChkZXYtPnJm aXMpKVsweDE2XSwKCQkoKGdydWJfdWludDMyX3QgKikgZ3J1Yl9kbWFfZ2V0X3ZpcnQgKGRldi0+ cmZpcykpWzB4MTddKTsKCiAgaWYgKCFwYXJtcy0+d3JpdGUpCiAgICBncnViX21lbWNweSAocGFy bXMtPmJ1ZmZlciwgKGNoYXIgKikgZ3J1Yl9kbWFfZ2V0X3ZpcnQgKGJ1ZmMpLCBwYXJtcy0+c2l6 ZSk7CiAgZ3J1Yl9kbWFfZnJlZSAoYnVmYyk7CgogIHJldHVybiBlcnI7Cn0KCnN0YXRpYyBncnVi X2Vycl90IApncnViX2FoY2lfcmVhZHdyaXRlIChncnViX2F0YV90IGRpc2ssCgkJICAgICBzdHJ1 Y3QgZ3J1Yl9kaXNrX2F0YV9wYXNzX3Rocm91Z2hfcGFybXMgKnBhcm1zLAoJCSAgICAgaW50IHNw aW51cCkKewogIHJldHVybiBncnViX2FoY2lfcmVhZHdyaXRlX3JlYWwgKGRpc2stPmRhdGEsIHBh cm1zLCBzcGludXAsIDApOwp9CgpzdGF0aWMgZ3J1Yl9lcnJfdApncnViX2FoY2lfb3BlbiAoaW50 IGlkLCBpbnQgZGV2bnVtLCBzdHJ1Y3QgZ3J1Yl9hdGEgKmF0YSkKewogIHN0cnVjdCBncnViX2Fo Y2lfZGV2aWNlICpkZXY7CgogIGlmIChpZCAhPSBHUlVCX1NDU0lfU1VCU1lTVEVNX0FIQ0kpCiAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfVU5LTk9XTl9ERVZJQ0UsICJub3QgYW4gQUhD SSBkZXZpY2UiKTsKCiAgRk9SX0xJU1RfRUxFTUVOVFMoZGV2LCBncnViX2FoY2lfZGV2aWNlcykK ICAgIGlmIChkZXYtPm51bSA9PSBkZXZudW0pCiAgICAgIGJyZWFrOwoKICBpZiAoISBkZXYpCiAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfVU5LTk9XTl9ERVZJQ0UsICJubyBzdWNoIEFI Q0kgZGV2aWNlIik7CgogIGdydWJfZHByaW50ZiAoImFoY2kiLCAib3BlbmluZyBBSENJIGRldiBg YWhjaSVkJ1xuIiwgZGV2LT5udW0pOwoKICBhdGEtPmRhdGEgPSBkZXY7CiAgYXRhLT5kbWEgPSAx OwogIGF0YS0+bWF4YnVmZmVyID0gR1JVQl9BSENJX1BSRFRfTUFYX0NIVU5LX0xFTkdUSDsKICBh dGEtPnByZXNlbnQgPSAmZGV2LT5wcmVzZW50OwoKICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKfQoK c3RhdGljIHN0cnVjdCBncnViX2F0YV9kZXYgZ3J1Yl9haGNpX2RldiA9CiAgewogICAgLml0ZXJh dGUgPSBncnViX2FoY2lfaXRlcmF0ZSwKICAgIC5vcGVuID0gZ3J1Yl9haGNpX29wZW4sCiAgICAu cmVhZHdyaXRlID0gZ3J1Yl9haGNpX3JlYWR3cml0ZSwKICB9OwoKDAoKc3RhdGljIHN0cnVjdCBn cnViX3ByZWJvb3QgKmZpbmlfaG5kOwoKR1JVQl9NT0RfSU5JVChhaGNpKQp7CiAgLyogVG8gcHJl dmVudCB0d28gZHJpdmVycyBvcGVyYXRpbmcgb24gdGhlIHNhbWUgZGlza3MuICAqLwogIGdydWJf ZGlza19maXJtd2FyZV9pc190YWludGVkID0gMTsKICBpZiAoZ3J1Yl9kaXNrX2Zpcm13YXJlX2Zp bmkpCiAgICB7CiAgICAgIGdydWJfZGlza19maXJtd2FyZV9maW5pICgpOwogICAgICBncnViX2Rp c2tfZmlybXdhcmVfZmluaSA9IE5VTEw7CiAgICB9CgogIC8qIEFIQ0kgaW5pdGlhbGl6YXRpb24u ICAqLwogIGdydWJfYWhjaV9pbml0aWFsaXplICgpOwoKICAvKiBBSENJIGRldmljZXMgYXJlIGhh bmRsZWQgYnkgc2NzaS5tb2QuICAqLwogIGdydWJfYXRhX2Rldl9yZWdpc3RlciAoJmdydWJfYWhj aV9kZXYpOwoKICBmaW5pX2huZCA9IGdydWJfbG9hZGVyX3JlZ2lzdGVyX3ByZWJvb3RfaG9vayAo Z3J1Yl9haGNpX2ZpbmlfaHcsCgkJCQkJCWdydWJfYWhjaV9yZXN0b3JlX2h3LAoJCQkJCQlHUlVC X0xPQURFUl9QUkVCT09UX0hPT0tfUFJJT19ESVNLKTsKfQoKR1JVQl9NT0RfRklOSShhaGNpKQp7 CiAgZ3J1Yl9haGNpX2ZpbmlfaHcgKDApOwogIGdydWJfbG9hZGVyX3VucmVnaXN0ZXJfcHJlYm9v dF9ob29rIChmaW5pX2huZCk7CgogIGdydWJfYXRhX2Rldl91bnJlZ2lzdGVyICgmZ3J1Yl9haGNp X2Rldik7Cn0K --=-0HHheM0AzpojWjsCz44o-- --=-dCR2TcQ5pN2dZcvSH2HI Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlVhd9MACgkQPX1aK2wOHVignQCfdsOClpW4wYPK95ILIfNE3fUS aiUAn1/rHQzxZueDo6Ta7jlaAZHSnX8S =/j6a -----END PGP SIGNATURE----- --=-dCR2TcQ5pN2dZcvSH2HI--