From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from smtp5-g21.free.fr ([212.27.42.5]:33287 "EHLO smtp5-g21.free.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754045Ab1BNMdG (ORCPT ); Mon, 14 Feb 2011 07:33:06 -0500 Date: Mon, 14 Feb 2011 13:36:43 +0100 From: Jean-Francois Moine To: Linux Media Mailing List , Hans de Goede Subject: [PATCH] v4l-utils: Add the JPEG Lite decoding function Message-ID: <20110214133643.3c9d1454@tele> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/lH.JCta9QP_Mdvf7WACtiiz" List-ID: Sender: --MP_/lH.JCta9QP_Mdvf7WACtiiz Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi Hans, JPEG Lite images are created by the DivIO nw80x chips.=20 The gspca subdriver nw80x will be ready soon. Decoding to RGB24 and BGR24 are ok. Decoding to YUV420 and YVU420 are not tested. Best regards. --=20 Ken ar c'henta=C3=B1 | ** Breizh ha Linux atav! ** Jef | http://moinejf.free.fr/ --MP_/lH.JCta9QP_Mdvf7WACtiiz Content-Type: application/octet-stream; name=jpgl.pat Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=jpgl.pat djRsLXV0aWxzOiBBZGQgdGhlIEpQRUcgTGl0ZSBkZWNvZGluZyBmdW5jdGlvbgoKSlBFRyBMaXRl IGltYWdlcyBhcmUgY3JlYXRlZCBieSB0aGUgRGl2SU8gbnc4MHggY2hpcHMuCgpTaWduZWQtb2Zm LWJ5OiBKZWFuLUZyYW7Dp29pcyBNb2luZSA8bW9pbmVqZkBmcmVlLmZyPgoKZGlmZiAtLWdpdCBh L2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmlu ZGV4IGI3M2ZlMjAuLjUxNzg4YTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYy LmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMzQwLDYgKzM0MCw3IEBAIHN0 cnVjdCB2NGwyX3BpeF9mb3JtYXQgewogI2RlZmluZSBWNEwyX1BJWF9GTVRfSlBFRyAgICAgdjRs Ml9mb3VyY2MoJ0onLCAnUCcsICdFJywgJ0cnKSAvKiBKRklGIEpQRUcgICAgICovCiAjZGVmaW5l IFY0TDJfUElYX0ZNVF9EViAgICAgICB2NGwyX2ZvdXJjYygnZCcsICd2JywgJ3MnLCAnZCcpIC8q IDEzOTQgICAgICAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUcgICAgIHY0bDJfZm91 cmNjKCdNJywgJ1AnLCAnRScsICdHJykgLyogTVBFRy0xLzIvNCAgICAqLworI2RlZmluZSBWNEwy X1BJWF9GTVRfSlBHTCAgICAgdjRsMl9mb3VyY2MoJ0onLCAnUCcsICdHJywgJ0wnKSAvKiBKUEVH IExpdGUgICAgICovCiAKIC8qICBWZW5kb3Itc3BlY2lmaWMgZm9ybWF0cyAgICovCiAjZGVmaW5l IFY0TDJfUElYX0ZNVF9DUElBMSAgICB2NGwyX2ZvdXJjYygnQycsICdQJywgJ0knLCAnQScpIC8q IGNwaWExIFlVViAqLwpkaWZmIC0tZ2l0IGEvbGliL2xpYnY0bGNvbnZlcnQvTWFrZWZpbGUgYi9s aWIvbGlidjRsY29udmVydC9NYWtlZmlsZQppbmRleCA5M2U1ZmU4Li41MDNmMTM0IDEwMDY0NAot LS0gYS9saWIvbGlidjRsY29udmVydC9NYWtlZmlsZQorKysgYi9saWIvbGlidjRsY29udmVydC9N YWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQCBlbmRpZgogQ09OVkVSVF9PQkpTICA9IGxpYnY0bGNv bnZlcnQubyB0aW55anBlZy5vIHNuOWMxMHgubyBzbjljMjB4Lm8gcGFjMjA3Lm8gXAogCQltcjk3 MzEwYS5vIGZsaXAubyBjcm9wLm8gamlkY3RmbHQubyBzcGNhNTYxLWRlY29tcHJlc3MubyBcCiAJ CXJnYnl1di5vIHNuOWMyMDI4LWRlY29tcC5vIHNwY2E1MDEubyBzcTkwNWMubyBiYXllci5vIGht MTIubyBcCi0JCXN0djA2ODAubyBjcGlhMS5vIFwKKwkJc3R2MDY4MC5vIGNwaWExLm8ganBnbC5v IFwKIAkJY29udHJvbC9saWJ2NGxjb250cm9sLm8gcHJvY2Vzc2luZy9saWJ2NGxwcm9jZXNzaW5n Lm8gXAogCQlwcm9jZXNzaW5nL3doaXRlYmFsYW5jZS5vIHByb2Nlc3NpbmcvYXV0b2dhaW4ubyBc CiAJCXByb2Nlc3NpbmcvZ2FtbWEubyBoZWxwZXIubwpkaWZmIC0tZ2l0IGEvbGliL2xpYnY0bGNv bnZlcnQvanBnbC5jIGIvbGliL2xpYnY0bGNvbnZlcnQvanBnbC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjBmMWUzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGlidjRs Y29udmVydC9qcGdsLmMKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBv ZiBKUEVHIExpdGUgZGVjb2RpbmcgYWxnb3JpdGhtCisgKgorICogQXV0aG9yICYgQ29weXJpZ2h0 IChjKSAyMDAzIDogU3lsdmFpbiBNdW5hdXQgPG53OHh4IF1hdFsgMjQ2dE50LmNvbT4KKyAqCisg KiB2NGwgbGlicmFyeSBhZGFwdGF0aW9uOiBKZWFuLUZyYW7Dp29pcyBNb2luZSA8bW9pbmVqZkBm cmVlLmZyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9u KQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2Ft YnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIE9yaWdpbmFsIFdlYlNpdGU6IG53ODAy LnNvdXJjZWZvcmdlLm5ldCAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibGli djRsY29udmVydC1wcml2LmgiCisKKyNkZWZpbmUgUklOR19RVUVVRV9BRFZBTkNFX0lOREVYKHJx LGluZCxuKSAocnEpLT5pbmQgPSAoKHJxKS0+aW5kICsgKG4pKQorI2RlZmluZSBSSU5HX1FVRVVF X0RFUVVFVUVfQllURVMocnEsbikgUklOR19RVUVVRV9BRFZBTkNFX0lOREVYKHJxLHJpLG4pCisj ZGVmaW5lIFJJTkdfUVVFVUVfUEVFSyhycSxvZnMpICgocnEpLT5xdWV1ZVsoKG9mcykgKyAocnEp LT5yaSldKQorCitzdHJ1Y3QgUmluZ1F1ZXVlIHsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpxdWV1 ZTsKKwlpbnQgbGVuZ3RoOworCWludCByaTsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KyAqIFJpbmdRdWV1ZSBiaXQgcmVhZGVyCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBBbGwg d2hhdCBpcyBuZWVkZWQgdG8gcmVhZCBiaXQgYnkgbml0IGZyb20gdGhlIFJpbmdRdWV1ZSBwdW1w IAorICogcHJvdmlkZWQgYnkgdXNidmlkZW8KKyAqIENyaXRpY2FsIHBhcnQgYXJlIG1hY3JvIGFu ZCBub3QgZnVuY3Rpb25zIHRvIHNwZWVkIHRoaW5ncyB1cAorICogUmVtOiBEYXRhIGFyZSByZWFk IGZyb20gdGhlIFJpbmdRdWV1ZSBhcyBpZiB0aGV5IHdlcmUgMTZiaXRzIExpdHRsZSBFbmRpYW4K KyAqICAgICAgd29yZHMuIE1vc3QgU2lnbmlmaWNhbnRzIEJpdHMgYXJlIG91dHB1dGVkIGZpcnN0 LgorICovCisKKy8qIFN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIHdoYXQgd2UgbmVlZC4gKi8KKy8q IChXZSBtYXkgbmVlZCBtdWx0aXBsZSBzaW11bHRhbmVvdXMgaW5zdGFuY2UgZnJvbSBzZXZlcmFs IGNhbSkgKi8KK3N0cnVjdCBycUJpdFJlYWRlciB7CisJaW50IGN1cl9iaXQ7CisJdW5zaWduZWQg aW50IGN1cl9kYXRhOworCXN0cnVjdCBSaW5nUXVldWUgKnJxOworfTsKKworc3RhdGljIGlubGlu ZSB2b2lkIHJxQlJfaW5pdCggc3RydWN0IHJxQml0UmVhZGVyICpiciwgc3RydWN0IFJpbmdRdWV1 ZSAqcnEgKQoreworCWJyLT5jdXJfYml0ID0gMTY7CisJYnItPmN1cl9kYXRhID0KKwkJUklOR19R VUVVRV9QRUVLKCBycSwgMiApICAgICAgICB8CisJCVJJTkdfUVVFVUVfUEVFSyggcnEsIDMgKSA8 PCA4ICAgfAorCQlSSU5HX1FVRVVFX1BFRUsoIHJxLCAwICkgPDwgMTYgIHwKKwkJUklOR19RVUVV RV9QRUVLKCBycSwgMSApIDw8IDI0ICA7CisJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCBycSwg MiApOworCWJyLT5ycSA9IHJxOworfQorCisjZGVmaW5lIHJxQlJfcGVla0JpdHMoYnIsbikgKCBi ci0+Y3VyX2RhdGEgPj4gKDMyLW4pICkKKworI2RlZmluZSBycUJSX2ZsdXNoQml0cyhicixuKSBk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJyLT5jdXJf ZGF0YSA8PD0gbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgaWYgKCAoYnItPmN1cl9iaXQgLT0gbikgPD0gMCApIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgYnItPmN1cl9kYXRhIHw9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgUklOR19RVUVVRV9QRUVL KCBici0+cnEsIDIgKSA8PCAtYnItPmN1cl9iaXQgIHwgICAgIFwKKyAgICAgICAgICAgICAgICBS SU5HX1FVRVVFX1BFRUsoIGJyLT5ycSwgMyApIDw8ICg4IC0gYnItPmN1cl9iaXQpOyAgXAorICAg ICAgICAgICAgUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCBici0+cnEsIDIgKTsgICAgICAgICAg ICAgICAgICBcCisgICAgICAgICAgICBici0+Y3VyX2JpdCArPSAxNjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisKKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKyAqIFJlYWwgSlBFRyBMaXRlIHN0dWZmCisgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisgKgorICogUHJlY29tcHV0ZWQgdGFibGVzCisgKiBUaGVzZXMgYXJlIGNv bXB1dGVkIGF0IGluaXQgdGltZSB0byBtYWtlIHJlYWwtdGltZSBvcGVyYXRpb25zIGZhc3Rlci4K KyAqIEl0IHRha2VzIHNvbWUgc3BhY2UgKCBhYm91dCA5ayApLiBCdXQgYmVsaWV2ZSBtZSBpdCB3 b3J0aCBpdCAhCisgKi8KKworLyogVmFyaWFibGUgTGVuZ2h0IENvZGluZyByZWxhdGVkIHRhYmxl cywgdXNlZCBmb3IgQUMgY29lZmZpY2llbnQgZGVjb2RpbmcKKyAqIFRPRE8gQ2hlY2sgdGhhdCA3 IGJpdHMgaXMgZW5vdWdoICEgKi8KK3N0YXRpYyBzaWduZWQgY2hhciB2bGNUYmxfbGVuWzE8PDEw XTsJLyogTWVhbmluZ2Z1bCBiaXQgY291bnQgKi8KK3N0YXRpYyBzaWduZWQgY2hhciB2bGNUYmxf cnVuWzE8PDEwXTsJLyogUnVuICovCitzdGF0aWMgc2lnbmVkIGNoYXIgdmxjVGJsX2FtcFsxPDwx MF07CS8qIEFtcGxpdHVkZSAod2l0aG91dCB0aGUgc2lnbikgKi8KKworLyogWVVWLT5SR0IgY29u dmVyc2lvbiB0YWJsZSAqLworc3RhdGljIGludCB5dXZUYmxfeVsyNTZdOworc3RhdGljIGludCB5 dXZUYmxfdTFbMjU2XTsKK3N0YXRpYyBpbnQgeXV2VGJsX3UyWzI1Nl07CitzdGF0aWMgaW50IHl1 dlRibF92MVsyNTZdOworc3RhdGljIGludCB5dXZUYmxfdjJbMjU2XTsKKworLyogQ2xhbXBpbmcg dGFibGUgKi8KKyNkZWZpbmUgU0FGRV9DTEFNUAorI2lmZGVmIFNBRkVfQ0xBTVAKK3N0YXRpYyBp bmxpbmUgdW5zaWduZWQgY2hhciBjbGFtcChpbnQgeCkgeworCWlmICh4ID4gMjU1KQorCQlyZXR1 cm4gMjU1OworCWlmICh4IDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHg7Cit9CisjZGVmaW5l IGNsYW1wX2FkanVzdCh4KSBjbGFtcCh4KzEyOCkKKyNlbHNlCisjZGVmaW5lIGNsYW1wKHgpIGNs YW1wVGJsWyh4KSs1MTJdCisjZGVmaW5lIGNsYW1wX2FkanVzdCh4KSBjbGFtcFRibFsoeCkrNjQw XQorc3RhdGljIGNoYXIgY2xhbXBUYmxbMTI4MF07CisjZW5kaWYKKworLyogQ29kZSB0byBpbml0 aWFsaXplIHRob3NlIHRhYmxlcyAqLworc3RhdGljIHZvaWQgdmxjVGJsX2luaXQodm9pZCkKK3sK KwkvKiBCYXNlcyB0YWJsZXMgdXNlZCB0byBjb21wdXRlIHRoZSBiaWdnZXIgb25lCisJICogVG8g dW5kZXJzdGFuZHMgdGhlc2VzLCBsb29rIGF0IHRoZSBWTEMgZG9jIGluIHRoZQorCSAqIFVTIHBh dGVudCBkb2N1bWVudC4gKi8KKworCXN0YXRpYyBjb25zdCBpbnQgdmxjX251bSA9IDI4OworCXN0 YXRpYyBjb25zdCBpbnQgdmxjX2xlbltdID0KKwkJeyAyLCAyLCAzLCAzLCA0LCA1LCA1LCA2LCA2 LCA2LCA2LCA3LCA3LCA3LCA3LCA3LAorCQkgIDggLDggLDggLDksIDksIDksIDEwLCAxMCwgMTAs IDEwLCAxMCwgMTAgfTsKKwlzdGF0aWMgY29uc3QgaW50IHZsY19ydW5bXSA9CisJCXsgMCwgMCwg MCwgMSwgMCwgMiwgMywgMSwgMCwgNCwgMCwgNSwgMSwgMCwgLTEsIC0yLAorCQkgIDIsIDYsIDAs IDMsIDEsIDAsIDEsIDAsIDcsIDIsIDAsIDggfTsKKwlzdGF0aWMgY29uc3QgaW50IHZsY19hbXBb XSA9CisJCXsgMCwgMSwgMiwgMSwgMywgMSwgMSwgMiwgNCwgMSAsNSAsMSAsMyAsNiwgLTEsIC0y LAorCQkgIDIsIDEsIDcsIDIsIDQsIDgsIDUsIDksIDEgLDMsIDEwLCAxIH07CisJc3RhdGljIGNv bnN0IGludCB2bGNfY29kW10gPQorCQl7IDB4MDAwLCAweDAwMiwgMHgwMDMsIDB4MDA2LCAweDAw RSwgMHgwMDgsIDB4MDBCLCAweDAxMiwKKwkJICAweDAxNCwgMHgwM0QsIDB4MDNFLCAweDA3OCwg MHgwNzksIDB4MDdFLCAweDAyNiwgMHgwMjcsCisJCSAgMHgwNTQsIDB4MDU3LCAweDBGRiwgMHgw QUEsIDB4MEFDLCAweDFGQywgMHgxNTYsIDB4MTU3LAorCQkgIDB4MTVBLCAweDE1QiwgMHgzRkEs IDB4M0ZCIH07CisJCisJLyogVmFycyAqLworCWludCBpLGo7CisKKwkvKiBNYWluIGZpbGxpbmcg bG9vcCAqLworCWZvciAoIGk9MCA7IGk8KDE8PDEwKSA7IGkrKyApIHsKKworCQkvKiBGaW5kIHRo ZSBtYXRjaGluZyBvbmUgKi8KKwkJZm9yICggaj0wIDsgajx2bGNfbnVtIDsgaisrICkgeworCQkJ aWYgKCAoaSA+PiAoMTAtdmxjX2xlbltqXSkpID09IHZsY19jb2Rbal0gKSB7CisJCQkJaWYgKCB2 bGNfcnVuW2pdID49IDAgKQorCQkJCQlpZiAoIHZsY19hbXBbal0gIT0gMCApCisJCQkJCQl2bGNU YmxfbGVuW2ldID0gdmxjX2xlbltqXSArIDE7CisJCQkJCWVsc2UKKwkJCQkJCXZsY1RibF9sZW5b aV0gPSB2bGNfbGVuW2pdOyAvKiBFT0IgKi8KKwkJCQllbHNlCisJCQkJCXZsY1RibF9sZW5baV0g PSAxNjsKKwkJCQl2bGNUYmxfcnVuW2ldID0gdmxjX3J1bltqXTsKKwkJCQl2bGNUYmxfYW1wW2ld ID0gdmxjX2FtcFtqXTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZv aWQgeXV2VGJsX2luaXQodm9pZCkKK3sKKwkvKiBUaGVzZSB0YWJsZXMgYXJlIGp1c3QgcHJlLW11 bHRpcGxpZWQgYW5kIHByZS1vZmZzZXRlZAorCSAqIFlVViBieSB0aGUgYm9vaworCSAqIFIgPSAx LjE2NCAqIChZLTE2KSArIDEuNTk2ICogKFUtMTI4KQorCSAqIEcgPSAxLjE2NCAqIChZLTE2KSAt IDAuODEzICogKFUtMTI4KSAtIDAuMzkxICogKFYtMTI4KQorCSAqIEIgPSAxLjE2NCAqIChZLTE2 KSAgICAgICAgICAgICAgICAgICArIDIuMDE4ICogKFYtMTI4KSAqLworCisJaW50IGk7CisKKwkv KiBXZSB1c2UgZml4ZWQgcG9pbnQgPDwgMTYgKi8KKwlmb3IgKCBpPTAgOyBpIDwgMjU2IDsgaSsr ICkgeworCQl5dXZUYmxfeVtpXSAgPSAgNzYyODQgKiAoaS0gMTYpOworCQl5dXZUYmxfdTFbaV0g PSAxMDQ1OTUgKiAoaS0xMjgpOworCQl5dXZUYmxfdTJbaV0gPSAgNTMyODEgKiAoaS0xMjgpOwor CQl5dXZUYmxfdjFbaV0gPSAgMjU2MjUgKiAoaS0xMjgpOyAKKwkJeXV2VGJsX3YyW2ldID0gMTMy MjUyICogKGktMTI4KTsKKwl9Cit9CisKKyNpZm5kZWYgU0FGRV9DTEFNUAorc3RhdGljIHZvaWQg Y2xhbXBUYmxfaW5pdCh2b2lkKQoreworCS8qIEluc3RlYWQgb2YgZG9pbmcgaWYoLi4uKSB0byB0 ZXN0IGZvciBvdmVycmFuZ2UsIHdlIHVzZQorCSAqIGEgY2xhbXBpbmcgdGFibGUgKi8KKwkKKwlp bnQgaTsKKworCWZvciAoaT0wIDsgaSA8IDUxMiA7IGkrKykKKwkJY2xhbXBUYmxbaV0gPSAwOwor CWZvciAoaT01MTIgOyBpIDwgNzY4IDsgaSsrICkKKwkJY2xhbXBUYmxbaV0gPSBpIC0gNTEyOwor CWZvciAoaT03NjggOyBpIDwgMTI4MCA7IGkrKyApCisJCWNsYW1wVGJsW2ldID0gMjU1OworCit9 CisjZW5kaWYKKworLyoKKyAqIEludGVybmFsIGhlbHBlcnMKKyAqLworCitzdGF0aWMgaW5saW5l IGludCByZWFkQUMoIHN0cnVjdCBycUJpdFJlYWRlciAqYnIsIGludCAqcnVuLCBpbnQgKmFtcCAp Cit7CisJLyogVmFycyAqLworCXVuc2lnbmVkIGludCBjb2Q7CisKKwkvKiBHZXQgMTYgYml0cyAq LworCWNvZCA9IHJxQlJfcGVla0JpdHMoYnIsMTYpOworCisJLyogTG9va3VwIGluIHRoZSB0YWJs ZSAqLworCSpydW4gPSB2bGNUYmxfcnVuW2NvZD4+Nl07CisJKmFtcCA9IHZsY1RibF9hbXBbY29k Pj42XTsKKwlycUJSX2ZsdXNoQml0cyhicix2bGNUYmxfbGVuW2NvZD4+Nl0pOworCisJaWYgKCph bXAgPiAwKSB7CisKKwkJLyogTm9ybWFsIHN0dWZmLCBqdXN0IGNvcnJlY3QgdGhlIHNpZ24gKi8K KwkJaWYgKGNvZCAmICgweDEwMDAwID4+IHZsY1RibF9sZW5bY29kPj42XSkpCisJCQkqYW1wID0g LSAqYW1wOworCX0gZWxzZSB7CisKKwkJLyogSGFuZGxlIHNwZWNpYWwgY2FzZXMgKi8KKwkJaWYg KCEqYW1wKQorCQkJcmV0dXJuIDA7CisJCWlmICgqYW1wID09IC0xKSB7CisKKwkJCS8qIDAxMDAx MTBzcnJyYWFhYWEgKi8KKwkJCSpydW4gPSAoIGNvZCA+PiA1ICkgJiAweDA3OworCQkJKmFtcCA9 ICggY29kICYgMHgxMDApID8KKwkJCQktKGNvZCYweDFGKSA6IChjb2QmMHgxRik7CisJCX0gZWxz ZSB7CisKKwkJCS8qIDAxMDAxMTFzcnJycmFhYWEgKi8KKwkJCSpydW4gPSAoIGNvZCA+PiA0ICkg JiAweDBGOworCQkJKmFtcCA9ICggY29kICYgMHgxMDApID8KKwkJCQktKGNvZCYweDBGKSA6IChj b2QmMHgwRik7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworCisjZGVmaW5lIGlEQ1RfY29s dW1uKGIwLGIxLGIyLGIzKSBkbyB7CVwKKwlpbnQgdDAsdDEsdDIsdDM7ICAgICAgICAgICAgICAg ICAgICBcCisJCQkJCVwKKwl0MCA9ICggYjEgKyBiMyApIDw8IDU7ICAgICAgICAgICAgICBcCisJ dDIgPSB0MCAtIChiMyA8PCA0KTsgICAgICAgICAgICAgICAgXAorCXQzID0gKGIxICogIDQ3KSAt IHQwOyAgICAgICAgICAgICAgIFwKKwl0MCA9IGIwICsgYjI7ICAgICAgICAgICAgICAgICAgICAg ICBcCisJdDEgPSBiMCAtIGIyOyAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQlcCisJYjAg PSAoIHQwICsgdDIgKTsgICAgICAgICAgICAgICAgICAgXAorCWIxID0gKCB0MSArIHQzICk7ICAg ICAgICAgICAgICAgICAgIFwKKwliMyA9ICggdDAgLSB0MiApOyAgICAgICAgICAgICAgICAgICBc CisJYjIgPSAoIHQxIC0gdDMgKTsgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKwor I2RlZmluZSBpRENUX2xpbmUoYjAsYjEsYjIsYjMpIGRvIHsJCVwKKwlpbnQgdDAsdDEsdDIsdDMs Ym0wLGJtMjsgICAgICAgICAgICBcCisJCQkJCVwKKwlibTAgPSBiMCA8PCA3OyAgICAgICAgICAg ICAgICAgICAgICBcCisJYm0yID0gYjIgPDwgNzsgICAgICAgICAgICAgICAgICAgICAgXAorCQkJ CQlcCisJdDAgPSBibTAgKyBibTI7ICAgICAgICAgICAgICAgICAgICAgXAorCXQxID0gYm0wIC0g Ym0yOyAgICAgICAgICAgICAgICAgICAgIFwKKwl0MiA9IGIxICogMTgzICsgYjMgKiAgODY7ICAg ICAgICAgICBcCisJdDMgPSBiMSAqICA4NiAtIGIzICogMTgzOyAgICAgICAgICAgXAorCQkJCQlc CisJYjAgPSAoIHQwICsgdDIgKSA+PiAyMjsgICAgICAgICAgICAgXAorCWIxID0gKCB0MSArIHQz ICkgPj4gMjI7ICAgICAgICAgICAgIFwKKwliMyA9ICggdDAgLSB0MiApID4+IDIyOyAgICAgICAg ICAgICBcCisJYjIgPSAoIHQxIC0gdDMgKSA+PiAyMjsgICAgICAgICAgICAgXAorfSB3aGlsZSAo MCkKKworLyogRGVjb2RlIGEgYmxvY2sKKyAqIEJhc2ljIG9wcyA6IGdldCB0aGUgREMgLSBnZXQg dGhlIEFDcyAtIGRlWmlnWmFnIC0gZGVXZWlnaHRpbmcgLSAKKyAqICAgICAgICAgICAgIGRlUXVh bnRpemF0aW9uIC0gaURDVAorICogSGVyZSB0aGV5IGFyZSBhIGxpdHRsZSBtaXhlZC11cCB0byBz cGVlZCBhbGwgdGhpcyB1cC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZGVjb2RlQmxvY2soIHN0 cnVjdCBycUJpdFJlYWRlciAqYnIsIGludCAqYmxvY2ssIGludCAqZGMgKQoreworCS8qIFRhYmxl cyB1c2VkIGZvciBibG9jayBkZWNvZGluZyAqLworCQorCQkvKiBkZVppZ1phZyB0YWJsZQorCQkg KgorCQkgKiBaaWdaYWc6IGVhY2ggb2YgdGhlIGNvZWZmaWNpZW50IG9mIHRoZSBEQ1QgdHJhbnNm b3JtZWQgNHg0CisJCSAqICAgICAgICAgbWF0cml4IGlzIHRha2VuIGluIGEgY2VydGFpbiBvcmRl ciB0byBtYWtlIGEgbGluZWFyCisJCSAqICAgICAgICAgYXJyYXkgd2l0aCB0aGUgaGlnaCBmcmVx dWVuY3kgQUMgYXQgdGhlIGVuZAorCQkgKgorCQkgKiAvIDAgIDEgIDUgIDYgXCAgICAuCisJCSAq IHwgMiAgNCAgNyAxMiB8ICAgIFRoaXMgaXMgdGhlIG9yZGVyIHRha2VuLiBXZSBtdXN0IGRlWmln WmFnCisJCSAqIHwgMyAgOCAxMSAxMyB8ICAgIHRvIHJlY29uc3RpdHV0ZSB0aGUgb3JpZ2luYWwg bWF0cml4CisJCSAqIFwgOSAxMCAxNCAxNSAvCisJCSAqLworCXN0YXRpYyBjb25zdCBpbnQgaVpp Z1phZ1RibFsxNl0gPQorCQl7IDAsIDEsIDQsIDgsIDUsIDIsIDMsIDYsICA5LDEyLCAxMywgMTAs IDcsIDExLCAxNCwgMTUgfTsKKworCQkvKiBkZVF1YW50aXphdGlvbiwgZGVXZWlnaHRpbmcgJiBp RENUIHByZW11bHRpcGx5ICovCisJCisJCS8qCisJCSAqIFdlaWdodGluZyA6IEVhY2ggRENUIGNv ZWZmaWNpZW50IGlzIHdlaWdodGVkIGJ5IGEgY2VydGFpbiBmYWN0b3IuIFdlCisJCSAqICAgICAg ICAgICAgIG11c3QgY29tcGVuc2F0ZSBmb3IgdGhpcyB0byByZWJ1aWx0IHRoZSBvcmlnaW5hbCBE Q1QgbWF0cml4LgorCQkgKgorCQkgKiBRdWFudGl6YXRpb246IEFjY29yZGluZyB0byB0aGUgcmVh ZCBRIGZhY3RvciwgRENUIGNvZWZmaWNpZW50IGFyZQorCQkgKiAgICAgICAgICAgICAgIHF1YW50 aXplZC4gV2UgbmVlZCB0byBjb21wZW5zYXRlIGZvciB0aGlzLiAKKwkJICoKKwkJICogaURDVCBw cmVtdWx0aXBseTogU2luY2UgZm9yIHRoZSBmaXJzdCBpRENUIHBhc3MgKCBjb2x1bW4gKSwgd2Un bGwgbmVlZAorCQkgKiAgICAgICAgICAgICAgICAgICB0byBkbyBzb21lIG11bHRpcGxpY2F0aW9u LCB0aGUgb25lcyB0aGF0IHdlIGNhbgorCQkgKiAgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGUg aGVyZSwgd2UgZG8uCisJCSAqCisJCSAqIFJlbTogLSBUaGUgZmFjdG9ycyBhcmUgaGVyZSBwcmVz ZW50ZWQgaW4gdGhlIFppZ1phZ2VkIG9yZGVyLAorCQkgKiAgICAgIGJlY2F1c2Ugd2Ugd2lsbCBu ZWVkIHRob3NlIEJFRk9SRSB0aGUgZGVaaWdaYWcKKwkJICogICAgICAtIEZvciBtb3JlIGluZm9y bWF0aW9ucywgY29uc3VsdCBqcGdsX3RibC5jLCBpdCdzIHRoZSBsaXR0bGUKKwkJICogICAgICBw cm9nIHRoYXQgY29tcHV0ZXMgdGhpcyB0YWJsZQorCQkgKi8KKwlzdGF0aWMgY29uc3QgaW50IGlR V1RibFs0XVsxNl0gPSB7CisJCXsgIDMyNzY4LCAgMTc4MDgsICAgIDc5NCwgIDE4NjE4LCAgICA4 NTAsICAxODYxOCwgIDQzMTE1LCAgIDE4MjgsCisJCSAgIDQwOTYwLCAgIDE5MjQsICAgMjA4OSwg IDQ1NTExLCAgIDIwODksICA0OTY0OCwgICAyMjE2LCAgIDI1MjEgfSwKKwkJeyAgMzI3NjgsICAz NTYxNywgICAxNTg5LCAgMzcyMzYsICAgMTcwMCwgIDM3MjM2LCAgODYyMzEsICAgMzY1NiwKKwkJ ICAgODE5MjAsICAgMzg0OSwgICA0MTc5LCAgOTEwMjIsICAgNDE3OSwgIDk5Mjk2LCAgIDQ0MzIs ICAgNTA0MyB9LAorCQl7ICAzMjc2OCwgIDcxMjM0LCAgIDMxNzksICA3NDQ3MiwgICAzNDAxLCAg NzQ0NzIsIDE3MjQ2MywgICA3MzEzLAorCQkgIDE2Mzg0MCwgICA3Njk4LCAgIDgzNTgsIDE4MjA0 NCwgICA4MzU4LCAxOTg1OTMsICAgODg2NSwgIDEwMDg3IH0sCisJCXsgIDMyNzY4LCAxNDI0Njks ICAgNjM1OSwgMTQ4OTQ1LCAgIDY4MDMsIDE0ODk0NSwgMzQ0OTI2LCAgMTQ2MjcsCisJCSAgMzI3 NjgwLCAgMTUzOTcsICAxNjcxNiwgMzY0MDg4LCAgMTY3MTYsIDM5NzE4NywgIDE3NzMwLCAgMjAx NzUgfQorCX07CQorCisJLyogVmFycyAqLworCWludCBoZHI7CisJaW50ICplZmZfaVFXVGJsOwor CWludCBjYywgcnVuLCBhbXA7CisKKwkvKiBSZWFkICYgRGVjb2RlIHRoZSBibG9jayBoZWFkZXIg KCBRLCBULCBEQyApICovCisJaGRyID0gcnFCUl9wZWVrQml0cyhiciwxMSk7CisKKwlpZiAoaGRy ICYgMHgxMDApIHsKKwkJLyogRGlmZmVyZW50aWFsIG1vZGUgKi8KKwkJaWYgKGhkciAmIDB4ODAp CisJCQkqZGMgKz0gKCBoZHIgPj4gMyApIHwgfjB4RjsKKwkJZWxzZQorCQkJKmRjICs9ICggaGRy ID4+IDMgKSAmIDB4RjsKKworCQkvKiBGbHVzaCB0aGUgaGVhZGVyIGJpdHMgKi8KKwkJcnFCUl9m bHVzaEJpdHMoYnIsOCk7CisJfSBlbHNlIHsKKwkJLyogRGlyZWN0IG1vZGUgKi8KKwkJaWYgKCBo ZHIgJiAweDgwICkKKwkJCSpkYyA9IGhkciB8IH4weDdGOworCQllbHNlCisJCQkqZGMgPSBoZHIg JiAweDdGOworCQkJCisJCS8qIEZsdXNoIHRoZSBoZWFkZXIgYml0cyAqLworCQlycUJSX2ZsdXNo Qml0cyhiciwxMSk7CisJfQorCisJLyogQ2xlYXIgdGhlIGJsb2NrICYgc3RvcmUgREMgKCB3aXRo IHByZS1tdWx0aXBseSApICovCisJYmxvY2tbMF0gPSAqZGMgPDwgMTU7CisJYmxvY2tbMV0gPSAw eDAwOworCWJsb2NrWzJdID0gMHgwMDsKKwlibG9ja1szXSA9IDB4MDA7CisJYmxvY2tbNF0gPSAw eDAwOworCWJsb2NrWzVdID0gMHgwMDsKKwlibG9ja1s2XSA9IDB4MDA7CisJYmxvY2tbN10gPSAw eDAwOworCWJsb2NrWzhdID0gMHgwMDsKKwlibG9ja1s5XSA9IDB4MDA7CisJYmxvY2tbMTBdID0g MHgwMDsKKwlibG9ja1sxMV0gPSAweDAwOworCWJsb2NrWzEyXSA9IDB4MDA7CisJYmxvY2tbMTNd ID0gMHgwMDsKKwlibG9ja1sxNF0gPSAweDAwOworCWJsb2NrWzE1XSA9IDB4MDA7CisJCisJLyog UmVhZCB0aGUgQUMgY29lZmZpY2llbnRzCisJICogYXQgdGhlIHNhbWUgdGltZSwgZGVaaWdaYWcs IGRlUXVhbnRpemF0aW9uLCBkZVdlaWdodGluZyAmIGlEQ1QgcHJlbXVsdGlwbHkKKwkgKi8KKwll ZmZfaVFXVGJsID0gKGludCopIGlRV1RibFtoZHI+PjldOworCWNjID0gMDsKKwkKKwl3aGlsZSAo IHJlYWRBQyhiciwmcnVuLCZhbXApICkgeworCQljYyArPSBydW4gKyAxOworCQlpZiAoIGNjID4g MTUgKQorCQkJcmV0dXJuIC0xOworCQlibG9ja1tpWmlnWmFnVGJsW2NjXV0gPSBhbXAgKiBlZmZf aVFXVGJsW2NjXTsKKwl9CisJCisJLyogRG8gdGhlIGNvbHVtbiBpRENUICggd2hhdCdzIGxlZnQg dG8gZG8gKSAqLworCWlEQ1RfY29sdW1uKGJsb2NrWzBdLCBibG9ja1s0XSwgYmxvY2tbOF0sIGJs b2NrWzEyXSk7CisJaURDVF9jb2x1bW4oYmxvY2tbMV0sIGJsb2NrWzVdLCBibG9ja1s5XSwgYmxv Y2tbMTNdKTsKKwlpRENUX2NvbHVtbihibG9ja1syXSwgYmxvY2tbNl0sIGJsb2NrWzEwXSwgYmxv Y2tbMTRdKTsKKwlpRENUX2NvbHVtbihibG9ja1szXSwgYmxvY2tbN10sIGJsb2NrWzExXSwgYmxv Y2tbMTVdKTsKKwkKKwkvKiBEbyB0aGUgbGluZSBpRENUICggY29tcGxldGUgb25lIGhlcmUgKSAq LworCWlEQ1RfbGluZShibG9ja1swXSwgYmxvY2tbMV0sIGJsb2NrWzJdLCBibG9ja1szXSk7CisJ aURDVF9saW5lKGJsb2NrWzRdLCBibG9ja1s1XSwgYmxvY2tbNl0sIGJsb2NrWzddKTsKKwlpRENU X2xpbmUoYmxvY2tbOF0sIGJsb2NrWzldLCBibG9ja1sxMF0sIGJsb2NrWzExXSk7CisJaURDVF9s aW5lKGJsb2NrWzEyXSwgYmxvY2tbMTNdLCBibG9ja1sxNF0sIGJsb2NrWzE1XSk7CisKKwlyZXR1 cm4gIShoZHIgJiAweDcwMCk7Cit9CisKK2ludCBqcGdsX2RlY29kZShjb25zdCB1bnNpZ25lZCBj aGFyICppbnAsIGludCBzcmNfc2l6ZSwKKwkJdW5zaWduZWQgaW50IGRlc3RfcGl4X2ZtdCwgdW5z aWduZWQgY2hhciAqZmIsCisJCWludCBpbWdfd2lkdGgsIGludCBpbWdfaGVpZ2h0KQoreworCS8q IFZhcnMgKi8KKwlzdHJ1Y3QgUmluZ1F1ZXVlIHJxOworCXN0cnVjdCBycUJpdFJlYWRlciBicjsK KworCWludCByb3csIGNvbDsJLyogUm93ICYgQ29sdW1uIGluIHRoZSBpbWFnZSAqLworCisJaW50 IHgseTsKKwlpbnQgYmxvY2tfaWR4OworCisJdW5zaWduZWQgY2hhciAqWWxpbmVfYmFzZXB0ciwg KlVsaW5lX2Jhc2VwdHIsICpWbGluZV9iYXNlcHRyOworCXVuc2lnbmVkIGNoYXIgKllsaW5lLCAq VWxpbmUsICpWbGluZTsKKwlpbnQgWWxpbmVfYmFzZW9mcywgVVZsaW5lX2Jhc2VvZnM7CisKKwlp bnQgZGNfeSwgZGNfdSwgZGNfdjsJLyogREMgQ29lZmZpY2llbnRzICovCisJaW50IGJsb2NrX3lb MTYqNF07CQkvKiBZIGJsb2NrcyAqLworCWludCBibG9ja191WzE2XTsJCS8qIFUgYmxvY2sgKi8K KwlpbnQgYmxvY2tfdlsxNl07CQkvKiBWIGJsb2NrICovCisKKwl1bnNpZ25lZCBjaGFyICptYWlu YnVmZmVyOworCisJaW50IHljLHVjLHZjOworCisJLyogaW5pdCB0aGUgZGVjb2RlciAqLworCWlm ICh5dXZUYmxfeVswXSA9PSAwKSB7CisJCXZsY1RibF9pbml0KCk7CisJCXl1dlRibF9pbml0KCk7 CisjaWZuZGVmIFNBRkVfQ0xBTVAKKwkJY2xhbXBUYmxfaW5pdCgpOworI2VuZGlmCisJfQorCisJ aW1nX2hlaWdodCAvPSA0OworCisJLyogUHJlcGFyZSBhIGJpdC1ieS1iaXQgcmVhZGVyICovCisJ cnEucXVldWUgPSBpbnA7CisJcnEubGVuZ3RoID0gc3JjX3NpemU7CisJcnEucmkgPSAwOworCXJx QlJfaW5pdCgmYnIsICZycSk7CisKKwkvKiBBbGxvY2F0ZSBhIGJpZyBidWZmZXIgJiBzZXR1cCBw b2ludGVycyAqLworCXN3aXRjaCAoZGVzdF9waXhfZm10KSB7CisJZGVmYXVsdDoKKy8qCWNhc2Ug VjRMMl9QSVhfRk1UX1JHQjI0OiAqLworLyoJY2FzZSBWNEwyX1BJWF9GTVRfQkdSMjQ6ICovCisJ CW1haW5idWZmZXIgPSBtYWxsb2MoNCAqIChpbWdfd2lkdGggKyAoaW1nX3dpZHRoID4+IDEpICsg MikpOworCQorCQlZbGluZV9iYXNlcHRyID0gbWFpbmJ1ZmZlcjsKKwkJVWxpbmVfYmFzZXB0ciA9 IG1haW5idWZmZXIgKyAoNCAqIGltZ193aWR0aCk7CisJCVZsaW5lX2Jhc2VwdHIgPSBVbGluZV9i YXNlcHRyICsgKGltZ193aWR0aCArIDQpOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9Z VVY0MjA6CisJCW1haW5idWZmZXIgPSBOVUxMOworCQlZbGluZV9iYXNlcHRyID0gZmI7CisJCVVs aW5lX2Jhc2VwdHIgPSBmYiArIGltZ193aWR0aCAqIGltZ19oZWlnaHQgKiAxNjsKKwkJVmxpbmVf YmFzZXB0ciA9IFVsaW5lX2Jhc2VwdHIgKyBpbWdfd2lkdGggKiBpbWdfaGVpZ2h0ICogNDsKKwkJ YnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRfWVZVNDIwOgorCQltYWluYnVmZmVyID0gTlVMTDsK KwkJWWxpbmVfYmFzZXB0ciA9IGZiOworCQlWbGluZV9iYXNlcHRyID0gZmIgKyBpbWdfd2lkdGgg KiBpbWdfaGVpZ2h0ICogMTY7CisJCVVsaW5lX2Jhc2VwdHIgPSBWbGluZV9iYXNlcHRyICsgaW1n X3dpZHRoICogaW1nX2hlaWdodCAqIDQ7CisJCWJyZWFrOworCX0KKworCVlsaW5lX2Jhc2VvZnMg PSBpbWdfd2lkdGggLSA0OworCVVWbGluZV9iYXNlb2ZzID0gKGltZ193aWR0aCA+PiAyKSAtIDM7 CisKKwkvKiBQcm9jZXNzIDQgbGluZXMgYXQgYSB0aW1lICggb25lIGJsb2NrIGhlaWdodCApICov CisJZm9yICggcm93PTAgOyByb3c8aW1nX2hlaWdodCA7IHJvdysrICkgeworCQkvKiBMaW5lIHN0 YXJ0IHJlc2V0IERDICovCisJCWRjX3kgPSBkY191ID0gZGNfdiA9IDA7CisKKwkJLyogUHJvY2Vz cyAxNiBjb2x1bW5zIGF0IGEgdGltZSAoIDQgYmxvY2sgd2lkdGggKSAqLworCQlmb3IgKCBjb2w9 MCA7IGNvbDxpbWdfd2lkdGggOyBjb2wrPTE2ICkgeworCQkJLyogRGVjb2RlIGJsb2NrcworCQkJ ICogQmxvY2sgb3JkZXIgOiBZIFkgWSBZIFYgVSAoIFdoeSBWIGJlZm9yZSBVID8KKwkJCSAqIHRo YXQganVzdCBkZXBlbmRzIHdoYXQgeW91IGNhbGwgVSZWIC4uLiBJIHRvb2sgdGhlCisJCQkgKiAn YnktdGhlLWJvb2snIG5hbWVzIGFuZCB0aGF0IG1ha2UgViBhbmQgdGhlbiBVLAorCQkJICogLi4u IGp1c3QgYXNrIHRoZSBEaXZJTyBmb2xrcyA7KSApCisJCQkgKi8KKwkJCWlmICggZGVjb2RlQmxv Y2soJmJyLCBibG9ja195LCAmZGNfeSkgJiYgKCFjb2wpICkKKy8qCQkJCXJldHVybjsJCSAqIEJh ZCBibG9jaywgc28gYmFkIGZyYW1lIC4uLiAqLworCQkJCTsKKworCQkJZGVjb2RlQmxvY2soJmJy LCBibG9ja195ICsgMTYsICZkY195KTsKKwkJCWRlY29kZUJsb2NrKCZiciwgYmxvY2tfeSArIDMy LCAmZGNfeSk7CisJCQlkZWNvZGVCbG9jaygmYnIsIGJsb2NrX3kgKyA0OCwgJmRjX3kpOworCQkJ ZGVjb2RlQmxvY2soJmJyLCBibG9ja192LCAmZGNfdik7CisJCQlkZWNvZGVCbG9jaygmYnIsIGJs b2NrX3UsICZkY191KTsKKwkJCQorCQkJLyogQ29weSBkYXRhIHRvIHRlbXBvcmFyeSBidWZmZXJz ICggdG8gbWFrZSBhIGNvbXBsZXRlIGxpbmUgKSAqLworCQkJYmxvY2tfaWR4ID0gMDsKKwkJCVls aW5lID0gWWxpbmVfYmFzZXB0ciArIGNvbDsKKwkJCVVsaW5lID0gVWxpbmVfYmFzZXB0ciArIChj b2wgPj4gMik7CisJCQlWbGluZSA9IFZsaW5lX2Jhc2VwdHIgKyAoY29sID4+IDIpOworCisJCQlm b3IgKCB5PTAgOyB5PDQgOyB5KyspIHsKKwkJCQkvKiBTY2FuIGxpbmUgKi8KKwkJCQlmb3IgKCB4 PTAgOyB4PDQgOyB4KysgKSB7CisJCQkJCS8qIFkgYmxvY2sgKi8KKwkJCQkJWWxpbmVbIDBdID0g Y2xhbXBfYWRqdXN0KGJsb2NrX3lbYmxvY2tfaWR4ICAgXSk7CisJCQkJCVlsaW5lWyA0XSA9IGNs YW1wX2FkanVzdChibG9ja195W2Jsb2NrX2lkeCsxNl0pOworCQkJCQlZbGluZVsgOF0gPSBjbGFt cF9hZGp1c3QoYmxvY2tfeVtibG9ja19pZHgrMzJdKTsKKwkJCQkJWWxpbmVbMTJdID0gY2xhbXBf YWRqdXN0KGJsb2NrX3lbYmxvY2tfaWR4KzQ4XSk7CisKKwkJCQkJLyogVSBibG9jayAqLworCQkJ CQkqVWxpbmUgPSBjbGFtcF9hZGp1c3QoYmxvY2tfdVtibG9ja19pZHhdKTsKKworCQkJCQkvKiBW IGJsb2NrICovCisJCQkJCSpWbGluZSA9IGNsYW1wX2FkanVzdChibG9ja192W2Jsb2NrX2lkeF0p OworCisJCQkJCS8qIEFqdXN0IHBvaW50ZXJzICYgaW5kZXggKi8KKwkJCQkJYmxvY2tfaWR4Kys7 CisJCQkJCVlsaW5lKys7CisJCQkJCVVsaW5lKys7CisJCQkJCVZsaW5lKys7CisJCQkJfQorCisJ CQkJLyogQWRqdXN0IHBvaW50ZXJzICovCisJCQkJWWxpbmUgKz0gWWxpbmVfYmFzZW9mczsKKwkJ CQlVbGluZSArPSBVVmxpbmVfYmFzZW9mczsKKwkJCQlWbGluZSArPSBVVmxpbmVfYmFzZW9mczsK KwkJCX0KKwkJfQorCisJCS8qIEhhbmRsZSBpbnRlcnBvbGF0aW9uIHNwZWNpYWwgY2FzZSAoIGF0 IHRoZSBlbmQgb2YgdGhlIGxpbmVzICkgKi8KKwkJVWxpbmUgPSBVbGluZV9iYXNlcHRyICsgKFVW bGluZV9iYXNlb2ZzKzIpOworCQlWbGluZSA9IFZsaW5lX2Jhc2VwdHIgKyAoVVZsaW5lX2Jhc2Vv ZnMrMik7CisJCWZvciAoIHk9MCA7IHk8NCA7IHkrKyApIHsKKwkJCS8qIENvcHkgdGhlIGxhc3Qg cGl4ZWwgKi8KKwkJCVVsaW5lWzFdID0gVWxpbmVbMF07CisJCQlWbGluZVsxXSA9IFZsaW5lWzBd OworCQorCQkJLyogQWRqdXN0IHB0ciAqLworCQkJVWxpbmUgKz0gVVZsaW5lX2Jhc2VvZnMrNDsJ CisJCQlWbGluZSArPSBVVmxpbmVfYmFzZW9mcys0OwkKKwkJfQorCisJCS8qIFdlIGhhdmUgNCBj b21wbGV0ZSBsaW5lcywgc28gdGVtcGJ1ZmZlcjxZVVY+IC0+IGZyYW1lYnVmZmVyPFJHQj4KKwkJ ICogR28gbGluZSBieSBsaW5lICovCisKKwkJc3dpdGNoIChkZXN0X3BpeF9mbXQpIHsKKwkJY2Fz ZSBWNEwyX1BJWF9GTVRfUkdCMjQ6CisJCSAgICBZbGluZSA9IFlsaW5lX2Jhc2VwdHI7CisJCSAg ICBVbGluZSA9IFVsaW5lX2Jhc2VwdHI7CisJCSAgICBWbGluZSA9IFZsaW5lX2Jhc2VwdHI7CisJ CSAgICBmb3IgKCB5PTAgOyB5PDQgOyB5KysgKSB7CisJCQkvKiBQcm9jZXNzIDQgcGl4ZWwgYXQg YSB0aW1lIHRvIGhhbmRsZSBpbnRlcnBvbGF0aW9uCisJCQkgKiBmb3IgVSAmIFYgdmFsdWVzICov CisJCQlmb3IgKCB4PTAgOyB4PGltZ193aWR0aCA7IHgrPTQgKSB7CisJCQkJLyogRmlyc3QgcGl4 ZWwgKi8KKwkJCQl5YyA9IHl1dlRibF95WyooWWxpbmUrKyldOworCQkJCXVjID0gVWxpbmVbMF07 CisJCQkJdmMgPSBWbGluZVswXTsKKworCQkJCSooZmIrKykgPSBjbGFtcCgoIHljICsgeXV2VGJs X3UxW3VjXSApID4+IDE2KTsKKwkJCQkqKGZiKyspID0gY2xhbXAoKCB5YyAtIHl1dlRibF91Mlt1 Y10gLSB5dXZUYmxfdjFbdmNdICkgPj4gMTYpOworCQkJCSooZmIrKykgPSBjbGFtcCgoIHljICsg eXV2VGJsX3YyW3ZjXSApID4+IDE2KTsKKworCQkJCS8qIFNlY29uZCBwaXhlbCAqLworCQkJCXlj ID0geXV2VGJsX3lbKihZbGluZSsrKV07CisJCQkJdWMgPSAoIDMqVWxpbmVbMF0gKyBVbGluZVsx XSApID4+IDI7CisJCQkJdmMgPSAoIDMqVmxpbmVbMF0gKyBWbGluZVsxXSApID4+IDI7CisJCQkJ CisJCQkJKihmYisrKSA9IGNsYW1wKCggeWMgKyB5dXZUYmxfdTFbdWNdICkgPj4gMTYpOworCQkJ CSooZmIrKykgPSBjbGFtcCgoIHljIC0geXV2VGJsX3UyW3VjXSAtIHl1dlRibF92MVt2Y10gKSA+ PiAxNik7CisJCQkJKihmYisrKSA9IGNsYW1wKCggeWMgKyB5dXZUYmxfdjJbdmNdICkgPj4gMTYp OworCisJCQkJLyogVGhpcmQgcGl4ZWwgKi8KKwkJCQl5YyA9IHl1dlRibF95WyooWWxpbmUrKyld OworCQkJCXVjID0gKCBVbGluZVswXSArIFVsaW5lWzFdICkgPj4gMTsKKwkJCQl2YyA9ICggVmxp bmVbMF0gKyBWbGluZVsxXSApID4+IDE7CisKKwkJCQkqKGZiKyspID0gY2xhbXAoKCB5YyArIHl1 dlRibF91MVt1Y10gKSA+PiAxNik7CisJCQkJKihmYisrKSA9IGNsYW1wKCggeWMgLSB5dXZUYmxf dTJbdWNdIC0geXV2VGJsX3YxW3ZjXSApID4+IDE2KTsKKwkJCQkqKGZiKyspID0gY2xhbXAoKCB5 YyArIHl1dlRibF92Mlt2Y10gKSA+PiAxNik7CisKKwkJCQkvKiBGb3VydGggcGl4ZWwgKi8KKwkJ CQl5YyA9IHl1dlRibF95WyooWWxpbmUrKyldOworCQkJCXVjID0gKCBVbGluZVswXSArIDMqVWxp bmVbMV0gKSA+PiAyOworCQkJCXZjID0gKCBWbGluZVswXSArIDMqVmxpbmVbMV0gKSA+PiAyOwor CisJCQkJKihmYisrKSA9IGNsYW1wKCggeWMgKyB5dXZUYmxfdTFbdWNdICkgPj4gMTYpOworCQkJ CSooZmIrKykgPSBjbGFtcCgoIHljIC0geXV2VGJsX3UyW3VjXSAtIHl1dlRibF92MVt2Y10gKSA+ PiAxNik7CisJCQkJKihmYisrKSA9IGNsYW1wKCggeWMgKyB5dXZUYmxfdjJbdmNdICkgPj4gMTYp OworCisJCQkJLyogQWRqdXN0IHBvaW50ZXJzICovCisJCQkJVWxpbmUrKzsKKwkJCQlWbGluZSsr OworCQkJfQorCQkJCQorCQkJLyogQWRqdXN0IHBvaW50ZXJzICovCisJCQlVbGluZSsrOworCQkJ VmxpbmUrKzsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQljYXNlIFY0TDJfUElYX0ZNVF9CR1Iy NDoKKwkJICAgIFlsaW5lID0gWWxpbmVfYmFzZXB0cjsKKwkJICAgIFVsaW5lID0gVWxpbmVfYmFz ZXB0cjsKKwkJICAgIFZsaW5lID0gVmxpbmVfYmFzZXB0cjsKKwkJICAgIGZvciAoIHk9MCA7IHk8 NCA7IHkrKyApIHsKKwkJCS8qIFByb2Nlc3MgNCBwaXhlbCBhdCBhIHRpbWUgdG8gaGFuZGxlIGlu dGVycG9sYXRpb24KKwkJCSAqIGZvciBVICYgViB2YWx1ZXMgKi8KKwkJCWZvciAoIHg9MCA7IHg8 aW1nX3dpZHRoIDsgeCs9NCApIHsKKwkJCQkvKiBGaXJzdCBwaXhlbCAqLworCQkJCXljID0geXV2 VGJsX3lbKihZbGluZSsrKV07CisJCQkJdWMgPSBVbGluZVswXTsKKwkJCQl2YyA9IFZsaW5lWzBd OworCisJCQkJKihmYisrKSA9IGNsYW1wKCggeWMgKyB5dXZUYmxfdjJbdmNdICkgPj4gMTYpOwor CQkJCSooZmIrKykgPSBjbGFtcCgoIHljIC0geXV2VGJsX3UyW3VjXSAtIHl1dlRibF92MVt2Y10g KSA+PiAxNik7CisJCQkJKihmYisrKSA9IGNsYW1wKCggeWMgKyB5dXZUYmxfdTFbdWNdICkgPj4g MTYpOworCisJCQkJLyogU2Vjb25kIHBpeGVsICovCisJCQkJeWMgPSB5dXZUYmxfeVsqKFlsaW5l KyspXTsKKwkJCQl1YyA9ICggMypVbGluZVswXSArIFVsaW5lWzFdICkgPj4gMjsKKwkJCQl2YyA9 ICggMypWbGluZVswXSArIFZsaW5lWzFdICkgPj4gMjsKKwkJCQkKKwkJCQkqKGZiKyspID0gY2xh bXAoKCB5YyArIHl1dlRibF92Mlt2Y10gKSA+PiAxNik7CisJCQkJKihmYisrKSA9IGNsYW1wKCgg eWMgLSB5dXZUYmxfdTJbdWNdIC0geXV2VGJsX3YxW3ZjXSApID4+IDE2KTsKKwkJCQkqKGZiKysp ID0gY2xhbXAoKCB5YyArIHl1dlRibF91MVt1Y10gKSA+PiAxNik7CisKKwkJCQkvKiBUaGlyZCBw aXhlbCAqLworCQkJCXljID0geXV2VGJsX3lbKihZbGluZSsrKV07CisJCQkJdWMgPSAoIFVsaW5l WzBdICsgVWxpbmVbMV0gKSA+PiAxOworCQkJCXZjID0gKCBWbGluZVswXSArIFZsaW5lWzFdICkg Pj4gMTsKKworCQkJCSooZmIrKykgPSBjbGFtcCgoIHljICsgeXV2VGJsX3YyW3ZjXSApID4+IDE2 KTsKKwkJCQkqKGZiKyspID0gY2xhbXAoKCB5YyAtIHl1dlRibF91Mlt1Y10gLSB5dXZUYmxfdjFb dmNdICkgPj4gMTYpOworCQkJCSooZmIrKykgPSBjbGFtcCgoIHljICsgeXV2VGJsX3UxW3VjXSAp ID4+IDE2KTsKKworCQkJCS8qIEZvdXJ0aCBwaXhlbCAqLworCQkJCXljID0geXV2VGJsX3lbKihZ bGluZSsrKV07CisJCQkJdWMgPSAoIFVsaW5lWzBdICsgMypVbGluZVsxXSApID4+IDI7CisJCQkJ dmMgPSAoIFZsaW5lWzBdICsgMypWbGluZVsxXSApID4+IDI7CisKKwkJCQkqKGZiKyspID0gY2xh bXAoKCB5YyArIHl1dlRibF92Mlt2Y10gKSA+PiAxNik7CisJCQkJKihmYisrKSA9IGNsYW1wKCgg eWMgLSB5dXZUYmxfdTJbdWNdIC0geXV2VGJsX3YxW3ZjXSApID4+IDE2KTsKKwkJCQkqKGZiKysp ID0gY2xhbXAoKCB5YyArIHl1dlRibF91MVt1Y10gKSA+PiAxNik7CisKKwkJCQkvKiBBZGp1c3Qg cG9pbnRlcnMgKi8KKwkJCQlVbGluZSsrOworCQkJCVZsaW5lKys7CisJCQl9CisJCQkJCisJCQkv KiBBZGp1c3QgcG9pbnRlcnMgKi8KKwkJCVVsaW5lKys7CisJCQlWbGluZSsrOworCQkgICAgfQor CQkgICAgYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoKKwkJY2FzZSBWNEwyX1BJ WF9GTVRfWVZVNDIwOgorCQkgICAgWWxpbmVfYmFzZXB0ciArPSBpbWdfd2lkdGggKiA0OworCQkg ICAgVWxpbmVfYmFzZXB0ciArPSBpbWdfd2lkdGg7CisJCSAgICBWbGluZV9iYXNlcHRyICs9IGlt Z193aWR0aDsKKwkJICAgIGJyZWFrOworCQl9CisJfQorCisJLyogRnJlZSBvdXIgYnVmZmVyICov CisJaWYgKG1haW5idWZmZXIgIT0gTlVMTCkKKwkJZnJlZShtYWluYnVmZmVyKTsKKworCXJldHVy biAwOworfQpkaWZmIC0tZ2l0IGEvbGliL2xpYnY0bGNvbnZlcnQvbGlidjRsY29udmVydC1wcml2 LmggYi9saWIvbGlidjRsY29udmVydC9saWJ2NGxjb252ZXJ0LXByaXYuaAppbmRleCBkOGZlODk5 Li4zMGQxY2ZlIDEwMDY0NAotLS0gYS9saWIvbGlidjRsY29udmVydC9saWJ2NGxjb252ZXJ0LXBy aXYuaAorKysgYi9saWIvbGlidjRsY29udmVydC9saWJ2NGxjb252ZXJ0LXByaXYuaApAQCAtMjIy LDQgKzIyMiw4IEBAIGludCB2NGxjb252ZXJ0X2hlbHBlcl9kZWNvbXByZXNzKHN0cnVjdCB2NGxj b252ZXJ0X2RhdGEgKmRhdGEsCiAKIHZvaWQgdjRsY29udmVydF9oZWxwZXJfY2xlYW51cChzdHJ1 Y3QgdjRsY29udmVydF9kYXRhICpkYXRhKTsKIAoraW50IGpwZ2xfZGVjb2RlKGNvbnN0IHVuc2ln bmVkIGNoYXIgKmlucCwgaW50IHNyY19zaXplLAorCQl1bnNpZ25lZCBpbnQgZGVzdF9waXhfZm10 LCB1bnNpZ25lZCBjaGFyICpmYiwKKwkJaW50IGltZ193aWR0aCwgaW50IGltZ19oZWlnaHQpOwor CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9saWJ2NGxjb252ZXJ0L2xpYnY0bGNvbnZlcnQuYyBi L2xpYi9saWJ2NGxjb252ZXJ0L2xpYnY0bGNvbnZlcnQuYwppbmRleCAwZDhiMjlmLi5jMTBmZDg2 IDEwMDY0NAotLS0gYS9saWIvbGlidjRsY29udmVydC9saWJ2NGxjb252ZXJ0LmMKKysrIGIvbGli L2xpYnY0bGNvbnZlcnQvbGlidjRsY29udmVydC5jCkBAIC02NDAsNiArNjQwLDEwIEBAIHN0YXRp YyBpbnQgdjRsY29udmVydF9jb252ZXJ0X3BpeGZtdChzdHJ1Y3QgdjRsY29udmVydF9kYXRhICpk YXRhLAogCQkJcmVzdWx0ID0gLTE7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRf SlBHTDoKKwkJcmVzdWx0ID0ganBnbF9kZWNvZGUoc3JjLCBzcmNfc2l6ZSwKKwkJCQkJZGVzdF9w aXhfZm10LCBkZXN0LCB3aWR0aCwgaGVpZ2h0KTsKKwkJYnJlYWs7CiAKIAkJLyogQ3VzdG9tIGNh bSBzcGVjaWZpYyBZVVYgZm9ybWF0cyAqLwogCWNhc2UgVjRMMl9QSVhfRk1UX1NQQ0E1MDE6Cg== --MP_/lH.JCta9QP_Mdvf7WACtiiz--