From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 00439C2D0C6 for ; Wed, 11 Dec 2019 21:12:56 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id F1F0F20637 for ; Wed, 11 Dec 2019 21:12:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F1F0F20637 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1A9B46EBE7; Wed, 11 Dec 2019 21:12:53 +0000 (UTC) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 30D8D6EBE2 for ; Wed, 11 Dec 2019 21:12:51 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Dec 2019 13:12:51 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,303,1571727600"; d="scan'208";a="215904985" Received: from dceraolo-linux.fm.intel.com ([10.1.27.145]) by orsmga006.jf.intel.com with ESMTP; 11 Dec 2019 13:12:50 -0800 From: Daniele Ceraolo Spurio To: intel-gfx@lists.freedesktop.org Date: Wed, 11 Dec 2019 13:12:44 -0800 Message-Id: <20191211211244.7831-6-daniele.ceraolospurio@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191211211244.7831-1-daniele.ceraolospurio@intel.com> References: <20191211211244.7831-1-daniele.ceraolospurio@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [RFC 5/5] drm/i915: introduce intel_execlists_submission. X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" U3BsaXQgb3V0IGFsbCB0aGUgY29kZSByZWxhdGVkIHRvIHRoZSBleGVjbGlzdHMgc3VibWlzc2lv biBmbG93IHRvIGl0cwpvd24gZmlsZSB0byBrZWVwIGl0IHNlcGFyYXRlIGZyb20gdGhlIGdlbmVy YWwgY29udGV4dCBtYW5hZ2VtZW50LApiZWNhdXNlIHRoZSBsYXR0ZXIgd2lsbCBiZSByZS11c2Vk IGJ5IHRoZSBHdUMgc3VibWlzc2lvbiBmbG93LgoKU2lnbmVkLW9mZi1ieTogRGFuaWVsZSBDZXJh b2xvIFNwdXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4KQ2M6IENocmlzIFdp bHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRr by51cnN1bGluQGxpbnV4LmludGVsLmNvbT4KQ2M6IE1hdHRoZXcgQnJvc3QgPG1hdHRoZXcuYnJv c3RAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAg ICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2Nz LmMgICAgIHwgICAgMSArCiAuLi4vZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Np b24uYyAgfCAyNDg1ICsrKysrKysrKysrKysrKysKIC4uLi9kcm0vaTkxNS9ndC9pbnRlbF9leGVj bGlzdHNfc3VibWlzc2lvbi5oICB8ICAgNTggKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfbHJjLmMgICAgICAgICAgIHwgMjUxMSArLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmggICAgICAgICAgIHwgICAzNCArLQogLi4uL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF92aXJ0dWFsX2VuZ2luZS5jICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYyAgfCAgICAyICstCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYyAgICAgICAgfCAgICAyICstCiAuLi4vZ3B1L2RybS9p OTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9zY2hlZHVsZXIuYyAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9wZXJmLmMgICAgICAgICAgICAgIHwgICAgMSArCiAxMiBmaWxlcyBjaGFuZ2Vk LCAyNTg0IGluc2VydGlvbnMoKyksIDI1MTQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0 c19zdWJtaXNzaW9uLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDc5ZjVlZjVhY2Q0Yy4uMzY0 MGUwNDM2Yzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtODIsNiArODIsNyBAQCBndC15ICs9 IFwKIAlndC9pbnRlbF9lbmdpbmVfcG0ubyBcCiAJZ3QvaW50ZWxfZW5naW5lX3Bvb2wubyBcCiAJ Z3QvaW50ZWxfZW5naW5lX3VzZXIubyBcCisJZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24u byBcCiAJZ3QvaW50ZWxfZ3QubyBcCiAJZ3QvaW50ZWxfZ3RfaXJxLm8gXAogCWd0L2ludGVsX2d0 X3BtLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5l X2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYwppbmRleCA0 OTQ3M2MyNTkxNmMuLjBhMjNkMDFiNzU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZW5naW5lX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZW5naW5lX2NzLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJpbnRlbF9lbmdpbmVf cG0uaCIKICNpbmNsdWRlICJpbnRlbF9lbmdpbmVfcG9vbC5oIgogI2luY2x1ZGUgImludGVsX2Vu Z2luZV91c2VyLmgiCisjaW5jbHVkZSAiaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uaCIKICNp bmNsdWRlICJpbnRlbF9ndC5oIgogI2luY2x1ZGUgImludGVsX2d0X3JlcXVlc3RzLmgiCiAjaW5j bHVkZSAiaW50ZWxfbHJjLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjc2Yjg3OGJmMTVhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMKQEAgLTAsMCArMSwyNDg1IEBA CisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDC qSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgorCisjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX2NvbnRleHQuaCIKKworI2luY2x1ZGUgImk5 MTVfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9wZXJmLmgiCisjaW5jbHVkZSAiaTkxNV90cmFjZS5o IgorI2luY2x1ZGUgImk5MTVfdmdwdS5oIgorI2luY2x1ZGUgImludGVsX2VuZ2luZV9wbS5oIgor I2luY2x1ZGUgImludGVsX2d0LmgiCisjaW5jbHVkZSAiaW50ZWxfZ3RfcG0uaCIKKyNpbmNsdWRl ICJpbnRlbF9ndF9yZXF1ZXN0cy5oIgorI2luY2x1ZGUgImludGVsX2xyY19yZWcuaCIKKyNpbmNs dWRlICJpbnRlbF9tb2NzLmgiCisjaW5jbHVkZSAiaW50ZWxfcmVzZXQuaCIKKyNpbmNsdWRlICJp bnRlbF9yaW5nLmgiCisjaW5jbHVkZSAiaW50ZWxfdmlydHVhbF9lbmdpbmUuaCIKKyNpbmNsdWRl ICJpbnRlbF93b3JrYXJvdW5kcy5oIgorI2luY2x1ZGUgImludGVsX2V4ZWNsaXN0c19zdWJtaXNz aW9uLmgiCisKKyNkZWZpbmUgUklOR19FWEVDTElTVF9RRlVMTAkJKDEgPDwgMHgyKQorI2RlZmlu ZSBSSU5HX0VYRUNMSVNUMV9WQUxJRAkJKDEgPDwgMHgzKQorI2RlZmluZSBSSU5HX0VYRUNMSVNU MF9WQUxJRAkJKDEgPDwgMHg0KQorI2RlZmluZSBSSU5HX0VYRUNMSVNUX0FDVElWRV9TVEFUVVMJ KDMgPDwgMHhFKQorI2RlZmluZSBSSU5HX0VYRUNMSVNUMV9BQ1RJVkUJCSgxIDw8IDB4MTEpCisj ZGVmaW5lIFJJTkdfRVhFQ0xJU1QwX0FDVElWRQkJKDEgPDwgMHgxMikKKworI2RlZmluZSBHRU44 X0NUWF9TVEFUVVNfSURMRV9BQ1RJVkUJKDEgPDwgMCkKKyNkZWZpbmUgR0VOOF9DVFhfU1RBVFVT X1BSRUVNUFRFRAkoMSA8PCAxKQorI2RlZmluZSBHRU44X0NUWF9TVEFUVVNfRUxFTUVOVF9TV0lU Q0gJKDEgPDwgMikKKyNkZWZpbmUgR0VOOF9DVFhfU1RBVFVTX0FDVElWRV9JRExFCSgxIDw8IDMp CisjZGVmaW5lIEdFTjhfQ1RYX1NUQVRVU19DT01QTEVURQkoMSA8PCA0KQorI2RlZmluZSBHRU44 X0NUWF9TVEFUVVNfTElURV9SRVNUT1JFCSgxIDw8IDE1KQorCisjZGVmaW5lIEdFTjhfQ1RYX1NU QVRVU19DT01QTEVURURfTUFTSyBcCisJIChHRU44X0NUWF9TVEFUVVNfQ09NUExFVEUgfCBHRU44 X0NUWF9TVEFUVVNfUFJFRU1QVEVEKQorCisjZGVmaW5lIENUWF9ERVNDX0ZPUkNFX1JFU1RPUkUg QklUX1VMTCgyKQorCisjZGVmaW5lIEdFTjEyX0NUWF9TVEFUVVNfU1dJVENIRURfVE9fTkVXX1FV RVVFCSgweDEpIC8qIGxvd2VyIGNzYiBkd29yZCAqLworI2RlZmluZSBHRU4xMl9DVFhfU1dJVENI X0RFVEFJTChjc2JfZHcpCSgoY3NiX2R3KSAmIDB4RikgLyogdXBwZXIgY3NiIGR3b3JkICovCisj ZGVmaW5lIEdFTjEyX0NTQl9TV19DVFhfSURfTUFTSwkJR0VOTUFTSygyNSwgMTUpCisjZGVmaW5l IEdFTjEyX0lETEVfQ1RYX0lECQkweDdGRgorI2RlZmluZSBHRU4xMl9DU0JfQ1RYX1ZBTElEKGNz Yl9kdykgXAorCShGSUVMRF9HRVQoR0VOMTJfQ1NCX1NXX0NUWF9JRF9NQVNLLCBjc2JfZHcpICE9 IEdFTjEyX0lETEVfQ1RYX0lEKQorCisvKiBUeXBpY2FsIHNpemUgb2YgdGhlIGF2ZXJhZ2UgcmVx dWVzdCAoMiBwaXBlY29udHJvbHMgYW5kIGEgTUlfQkIpICovCisjZGVmaW5lIEVYRUNMSVNUU19S RVFVRVNUX1NJWkUgNjQgLyogYnl0ZXMgKi8KKworc3RhdGljIHZvaWQgbWFya19laW8oc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEpCit7CisJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQor CQlyZXR1cm47CisKKwlHRU1fQlVHX09OKGk5MTVfcmVxdWVzdF9zaWduYWxlZChycSkpOworCisJ ZG1hX2ZlbmNlX3NldF9lcnJvcigmcnEtPmZlbmNlLCAtRUlPKTsKKwlpOTE1X3JlcXVlc3RfbWFy a19jb21wbGV0ZShycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKK2FjdGl2 ZV9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBpbnRlbF90aW1lbGluZSAqIGNvbnN0IHRsLCBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICphY3RpdmUgPSBycTsK KworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVy c2UocnEsICZ0bC0+cmVxdWVzdHMsIGxpbmspIHsKKwkJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0 ZWQocnEpKQorCQkJYnJlYWs7CisKKwkJYWN0aXZlID0gcnE7CisJfQorCXJjdV9yZWFkX3VubG9j aygpOworCisJcmV0dXJuIGFjdGl2ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCityaW5nX3Nl dF9wYXVzZWQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQgc3RhdGUp Cit7CisJLyoKKwkgKiBXZSBpbnNwZWN0IEhXU19QUkVFTVBUIHdpdGggYSBzZW1hcGhvcmUgaW5z aWRlCisJICogZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYi4gSWYgdGhlIGR3b3JkIGlzIHRy dWUsCisJICogdGhlIHJpbmcgaXMgcGF1c2VkIGFzIHRoZSBzZW1hcGhvcmUgd2lsbCBidXN5d2Fp dAorCSAqIHVudGlsIHRoZSBkd29yZCBpcyBmYWxzZS4KKwkgKi8KKwllbmdpbmUtPnN0YXR1c19w YWdlLmFkZHJbSTkxNV9HRU1fSFdTX1BSRUVNUFRdID0gc3RhdGU7CisJaWYgKHN0YXRlKQorCQl3 bWIoKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqdG9fcHJpb2xp c3Qoc3RydWN0IHJiX25vZGUgKnJiKQoreworCXJldHVybiByYl9lbnRyeShyYiwgc3RydWN0IGk5 MTVfcHJpb2xpc3QsIG5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBycV9wcmlvKGNvbnN0 IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQoreworCXJldHVybiBycS0+c2NoZWQuYXR0ci5wcmlv cml0eTsKK30KKworc3RhdGljIGludCBlZmZlY3RpdmVfcHJpbyhjb25zdCBzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSkKK3sKKwlpbnQgcHJpbyA9IHJxX3ByaW8ocnEpOworCisJLyoKKwkgKiBJZiB0 aGlzIHJlcXVlc3QgaXMgc3BlY2lhbCBhbmQgbXVzdCBub3QgYmUgaW50ZXJydXB0ZWQgYXQgYW55 CisJICogY29zdCwgc28gYmUgaXQuIE5vdGUgd2UgYXJlIG9ubHkgY2hlY2tpbmcgdGhlIG1vc3Qg cmVjZW50IHJlcXVlc3QKKwkgKiBpbiB0aGUgY29udGV4dCBhbmQgc28gbWF5IGJlIG1hc2tpbmcg YW4gZWFybGllciB2aXAgcmVxdWVzdC4gSXQKKwkgKiBpcyBob3BlZCB0aGF0IHVuZGVyIHRoZSBj b25kaXRpb25zIHdoZXJlIG5vcHJlZW1wdCBpcyB1c2VkLCB0aGlzCisJICogd2lsbCBub3QgbWF0 dGVyIChpLmUuIGFsbCByZXF1ZXN0cyB0byB0aGF0IGNvbnRleHQgd2lsbCBiZQorCSAqIG5vcHJl ZW1wdCBmb3IgYXMgbG9uZyBhcyBkZXNpcmVkKS4KKwkgKi8KKwlpZiAoaTkxNV9yZXF1ZXN0X2hh c19ub3ByZWVtcHQocnEpKQorCQlwcmlvID0gSTkxNV9QUklPUklUWV9VTlBSRUVNUFRBQkxFOwor CisJLyoKKwkgKiBPbiB1bndpbmRpbmcgdGhlIGFjdGl2ZSByZXF1ZXN0LCB3ZSBnaXZlIGl0IGEg cHJpb3JpdHkgYnVtcAorCSAqIGlmIGl0IGhhcyBjb21wbGV0ZWQgd2FpdGluZyBvbiBhbnkgc2Vt YXBob3JlLiBJZiB3ZSBrbm93IHRoYXQKKwkgKiB0aGUgcmVxdWVzdCBoYXMgYWxyZWFkeSBzdGFy dGVkLCB3ZSBjYW4gcHJldmVudCBhbiB1bndhbnRlZAorCSAqIHByZWVtcHQtdG8taWRsZSBjeWNs ZSBieSB0YWtpbmcgdGhhdCBpbnRvIGFjY291bnQgbm93LgorCSAqLworCWlmIChfX2k5MTVfcmVx dWVzdF9oYXNfc3RhcnRlZChycSkpCisJCXByaW8gfD0gSTkxNV9QUklPUklUWV9OT1NFTUFQSE9S RTsKKworCS8qIFJlc3RyaWN0IG1lcmUgV0FJVCBib29zdHMgZnJvbSB0cmlnZ2VyaW5nIHByZWVt cHRpb24gKi8KKwlCVUlMRF9CVUdfT04oX19OT19QUkVFTVBUSU9OICYgfkk5MTVfUFJJT1JJVFlf TUFTSyk7IC8qIG9ubHkgaW50ZXJuYWwgKi8KKwlyZXR1cm4gcHJpbyB8IF9fTk9fUFJFRU1QVElP TjsKK30KKworc3RhdGljIGludCBxdWV1ZV9wcmlvKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVf ZXhlY2xpc3RzICpleGVjbGlzdHMpCit7CisJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnA7CisJc3Ry dWN0IHJiX25vZGUgKnJiOworCisJcmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+cXVl dWUpOworCWlmICghcmIpCisJCXJldHVybiBJTlRfTUlOOworCisJLyoKKwkgKiBBcyB0aGUgcHJp b2xpc3RbXSBhcmUgaW52ZXJ0ZWQsIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaW4gWzBdLAor CSAqIHdlIGhhdmUgdG8gZmxpcCB0aGUgaW5kZXggdmFsdWUgdG8gYmVjb21lIHByaW9yaXR5Lgor CSAqLworCXAgPSB0b19wcmlvbGlzdChyYik7CisJcmV0dXJuICgocC0+cHJpb3JpdHkgKyAxKSA8 PCBJOTE1X1VTRVJfUFJJT1JJVFlfU0hJRlQpIC0gZmZzKHAtPnVzZWQpOworfQorCitzdGF0aWMg aW5saW5lIGJvb2wgbmVlZF9wcmVlbXB0KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKKwkJCQljb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJCQlzdHJ1Y3QgcmJf bm9kZSAqcmIpCit7CisJaW50IGxhc3RfcHJpbzsKKworCWlmICghaW50ZWxfZW5naW5lX2hhc19z ZW1hcGhvcmVzKGVuZ2luZSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogQ2hlY2sgaWYg dGhlIGN1cnJlbnQgcHJpb3JpdHkgaGludCBtZXJpdHMgYSBwcmVlbXB0aW9uIGF0dGVtcHQuCisJ ICoKKwkgKiBXZSByZWNvcmQgdGhlIGhpZ2hlc3QgdmFsdWUgcHJpb3JpdHkgd2Ugc2F3IGR1cmlu ZyByZXNjaGVkdWxpbmcKKwkgKiBwcmlvciB0byB0aGlzIGRlcXVldWUsIHRoZXJlZm9yZSB3ZSBr bm93IHRoYXQgaWYgaXQgaXMgc3RyaWN0bHkKKwkgKiBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgdGFp bCBvZiBFU0xQWzBdLCB3ZSBkbyBub3QgbmVlZCB0byBmb3JjZQorCSAqIGEgcHJlZW1wdC10by1p ZGxlIGN5Y2xlLgorCSAqCisJICogSG93ZXZlciwgdGhlIHByaW9yaXR5IGhpbnQgaXMgYSBtZXJl IGhpbnQgdGhhdCB3ZSBtYXkgbmVlZCB0bworCSAqIHByZWVtcHQuIElmIHRoYXQgaGludCBpcyBz dGFsZSBvciB3ZSBtYXkgYmUgdHJ5aW5nIHRvIHByZWVtcHQKKwkgKiBvdXJzZWx2ZXMsIGlnbm9y ZSB0aGUgcmVxdWVzdC4KKwkgKgorCSAqIE1vcmUgbmF0dXJhbGx5IHdlIHdvdWxkIHdyaXRlCisJ ICogICAgICBwcmlvID49IG1heCgwLCBsYXN0KTsKKwkgKiBleGNlcHQgdGhhdCB3ZSB3aXNoIHRv IHByZXZlbnQgdHJpZ2dlcmluZyBwcmVlbXB0aW9uIGF0IHRoZSBzYW1lCisJICogcHJpb3JpdHkg bGV2ZWw6IHRoZSB0YXNrIHRoYXQgaXMgcnVubmluZyBzaG91bGQgcmVtYWluIHJ1bm5pbmcKKwkg KiB0byBwcmVzZXJ2ZSBGSUZPIG9yZGVyaW5nIG9mIGRlcGVuZGVuY2llcy4KKwkgKi8KKwlsYXN0 X3ByaW8gPSBtYXgoZWZmZWN0aXZlX3ByaW8ocnEpLCBJOTE1X1BSSU9SSVRZX05PUk1BTCAtIDEp OworCWlmIChlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50IDw9IGxhc3RfcHJp bykKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBDaGVjayBhZ2FpbnN0IHRoZSBmaXJzdCBy ZXF1ZXN0IGluIEVMU1BbMV0sIGl0IHdpbGwsIHRoYW5rcyB0byB0aGUKKwkgKiBwb3dlciBvZiBQ SSwgYmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgb2YgdGhhdCBjb250ZXh0LgorCSAqLworCWlmICgh bGlzdF9pc19sYXN0KCZycS0+c2NoZWQubGluaywgJmVuZ2luZS0+YWN0aXZlLnJlcXVlc3RzKSAm JgorCSAgICBycV9wcmlvKGxpc3RfbmV4dF9lbnRyeShycSwgc2NoZWQubGluaykpID4gbGFzdF9w cmlvKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChyYikgeworCQlzdHJ1Y3QgaW50ZWxfdmlydHVh bF9lbmdpbmUgKnZlID0KKwkJCXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9kZXNbZW5naW5l LT5pZF0ucmIpOworCQlib29sIHByZWVtcHQgPSBmYWxzZTsKKworCQlpZiAoZW5naW5lID09IHZl LT5zaWJsaW5nc1swXSkgeyAvKiBvbmx5IHByZWVtcHQgb25lIHNpYmxpbmcgKi8KKwkJCXN0cnVj dCBpOTE1X3JlcXVlc3QgKm5leHQ7CisKKwkJCXJjdV9yZWFkX2xvY2soKTsKKwkJCW5leHQgPSBS RUFEX09OQ0UodmUtPnJlcXVlc3QpOworCQkJaWYgKG5leHQpCisJCQkJcHJlZW1wdCA9IHJxX3By aW8obmV4dCkgPiBsYXN0X3ByaW87CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJfQorCisJCWlm IChwcmVlbXB0KQorCQkJcmV0dXJuIHByZWVtcHQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgaW5m bGlnaHQgY29udGV4dCBkaWQgbm90IHRyaWdnZXIgdGhlIHByZWVtcHRpb24sIHRoZW4gbWF5YmUK KwkgKiBpdCB3YXMgdGhlIHNldCBvZiBxdWV1ZWQgcmVxdWVzdHM/IFBpY2sgdGhlIGhpZ2hlc3Qg cHJpb3JpdHkgaW4KKwkgKiB0aGUgcXVldWUgKHRoZSBmaXJzdCBhY3RpdmUgcHJpb2xpc3QpIGFu ZCBzZWUgaWYgaXQgZGVzZXJ2ZXMgdG8gYmUKKwkgKiBydW5uaW5nIGluc3RlYWQgb2YgRUxTUFsw XS4KKwkgKgorCSAqIFRoZSBoaWdoZXN0IHByaW9yaXR5IHJlcXVlc3QgaW4gdGhlIHF1ZXVlIGNh biBub3QgYmUgZWl0aGVyCisJICogRUxTUFswXSBvciBFTFNQWzFdIGFzLCB0aGFua3MgYWdhaW4g dG8gUEksIGlmIGl0IHdhcyB0aGUgc2FtZQorCSAqIGNvbnRleHQsIGl0J3MgcHJpb3JpdHkgd291 bGQgbm90IGV4Y2VlZCBFTFNQWzBdIGFrYSBsYXN0X3ByaW8uCisJICovCisJcmV0dXJuIHF1ZXVl X3ByaW8oJmVuZ2luZS0+ZXhlY2xpc3RzKSA+IGxhc3RfcHJpbzsKK30KKworX19tYXliZV91bnVz ZWQgc3RhdGljIGlubGluZSBib29sCithc3NlcnRfcHJpb3JpdHlfcXVldWUoY29uc3Qgc3RydWN0 IGk5MTVfcmVxdWVzdCAqcHJldiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAq bmV4dCkKK3sKKwkvKgorCSAqIFdpdGhvdXQgcHJlZW1wdGlvbiwgdGhlIHByZXYgbWF5IHJlZmVy IHRvIHRoZSBzdGlsbCBhY3RpdmUgZWxlbWVudAorCSAqIHdoaWNoIHdlIHJlZnVzZSB0byBsZXQg Z28uCisJICoKKwkgKiBFdmVuIHdpdGggcHJlZW1wdGlvbiwgdGhlcmUgYXJlIHRpbWVzIHdoZW4g d2UgdGhpbmsgaXQgaXMgYmV0dGVyIG5vdAorCSAqIHRvIHByZWVtcHQgYW5kIGxlYXZlIGFuIG9z dGVuc2libHkgbG93ZXIgcHJpb3JpdHkgcmVxdWVzdCBpbiBmbGlnaHQuCisJICovCisJaWYgKGk5 MTVfcmVxdWVzdF9pc19hY3RpdmUocHJldikpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIHJx X3ByaW8ocHJldikgPj0gcnFfcHJpbyhuZXh0KTsKK30KKworc3RhdGljIHN0cnVjdCBpOTE1X3Jl cXVlc3QgKgorX191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCit7CisJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsICpybiwgKmFjdGl2ZSA9 IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqdW5pbml0aWFsaXplZF92YXIocGwpOworCWludCBw cmlvID0gSTkxNV9QUklPUklUWV9JTlZBTElEOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZW5n aW5lLT5hY3RpdmUubG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShy cSwgcm4sCisJCQkJCSAmZW5naW5lLT5hY3RpdmUucmVxdWVzdHMsCisJCQkJCSBzY2hlZC5saW5r KSB7CisJCWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkKKwkJCWNvbnRpbnVlOyAvKiBY WFggKi8KKworCQlfX2k5MTVfcmVxdWVzdF91bnN1Ym1pdChycSk7CisKKwkJLyoKKwkJICogUHVz aCB0aGUgcmVxdWVzdCBiYWNrIGludG8gdGhlIHF1ZXVlIGZvciBsYXRlciByZXN1Ym1pc3Npb24u CisJCSAqIElmIHRoaXMgcmVxdWVzdCBpcyBub3QgbmF0aXZlIHRvIHRoaXMgcGh5c2ljYWwgZW5n aW5lIChpLmUuCisJCSAqIGl0IGNhbWUgZnJvbSBhIHZpcnR1YWwgc291cmNlKSwgcHVzaCBpdCBi YWNrIG9udG8gdGhlIHZpcnR1YWwKKwkJICogZW5naW5lIHNvIHRoYXQgaXQgY2FuIGJlIG1vdmVk IGFjcm9zcyBvbnRvIGFub3RoZXIgcGh5c2ljYWwKKwkJICogZW5naW5lIGFzIGxvYWQgZGljdGF0 ZXMuCisJCSAqLworCQlpZiAobGlrZWx5KHJxLT5leGVjdXRpb25fbWFzayA9PSBlbmdpbmUtPm1h c2spKSB7CisJCQlHRU1fQlVHX09OKHJxX3ByaW8ocnEpID09IEk5MTVfUFJJT1JJVFlfSU5WQUxJ RCk7CisJCQlpZiAocnFfcHJpbyhycSkgIT0gcHJpbykgeworCQkJCXByaW8gPSBycV9wcmlvKHJx KTsKKwkJCQlwbCA9IGk5MTVfc2NoZWRfbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgcHJpbyk7CisJ CQl9CisJCQlHRU1fQlVHX09OKFJCX0VNUFRZX1JPT1QoJmVuZ2luZS0+ZXhlY2xpc3RzLnF1ZXVl LnJiX3Jvb3QpKTsKKworCQkJbGlzdF9tb3ZlKCZycS0+c2NoZWQubGluaywgcGwpOworCQkJYWN0 aXZlID0gcnE7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpvd25lciA9 IHJxLT5od19jb250ZXh0LT5lbmdpbmU7CisKKwkJCS8qCisJCQkgKiBEZWNvdXBsZSB0aGUgdmly dHVhbCBicmVhZGNydW1iIGJlZm9yZSBtb3ZpbmcgaXQKKwkJCSAqIGJhY2sgdG8gdGhlIHZpcnR1 YWwgZW5naW5lIC0tIHdlIGRvbid0IHdhbnQgdGhlCisJCQkgKiByZXF1ZXN0IHRvIGNvbXBsZXRl IGluIHRoZSBiYWNrZ3JvdW5kIGFuZCB0cnkKKwkJCSAqIGFuZCBjYW5jZWwgdGhlIGJyZWFkY3J1 bWIgb24gdGhlIHZpcnR1YWwgZW5naW5lCisJCQkgKiAoaW5zdGVhZCBvZiB0aGUgb2xkIGVuZ2lu ZSB3aGVyZSBpdCBpcyBsaW5rZWQpIQorCQkJICovCisJCQlpZiAodGVzdF9iaXQoRE1BX0ZFTkNF X0ZMQUdfRU5BQkxFX1NJR05BTF9CSVQsCisJCQkJICAgICAmcnEtPmZlbmNlLmZsYWdzKSkgewor CQkJCXNwaW5fbG9ja19uZXN0ZWQoJnJxLT5sb2NrLAorCQkJCQkJIFNJTkdMRV9ERVBUSF9ORVNU SU5HKTsKKwkJCQlpOTE1X3JlcXVlc3RfY2FuY2VsX2JyZWFkY3J1bWIocnEpOworCQkJCXNwaW5f dW5sb2NrKCZycS0+bG9jayk7CisJCQl9CisJCQlycS0+ZW5naW5lID0gb3duZXI7CisJCQlvd25l ci0+c3VibWl0X3JlcXVlc3QocnEpOworCQkJYWN0aXZlID0gTlVMTDsKKwkJfQorCX0KKworCXJl dHVybiBhY3RpdmU7Cit9CisKK3N0cnVjdCBpOTE1X3JlcXVlc3QgKgorZXhlY2xpc3RzX3Vud2lu ZF9pbmNvbXBsZXRlX3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVj bGlzdHMpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0KKwkJY29udGFpbmVy X29mKGV4ZWNsaXN0cywgdHlwZW9mKCplbmdpbmUpLCBleGVjbGlzdHMpOworCisJcmV0dXJuIF9f dW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMoZW5naW5lKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCitleGVjbGlzdHNfY29udGV4dF9zdGF0dXNfY2hhbmdlKHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJxLCB1bnNpZ25lZCBsb25nIHN0YXR1cykKK3sKKwkvKgorCSAqIE9ubHkgdXNlZCB3aGVuIEdW VC1nIGlzIGVuYWJsZWQgbm93LiBXaGVuIEdWVC1nIGlzIGRpc2FibGVkLAorCSAqIFRoZSBjb21w aWxlciBzaG91bGQgZWxpbWluYXRlIHRoaXMgZnVuY3Rpb24gYXMgZGVhZC1jb2RlLgorCSAqLwor CWlmICghSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfR1ZUKSkKKwkJcmV0dXJuOworCisJYXRv bWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnJxLT5lbmdpbmUtPmNvbnRleHRfc3RhdHVzX25vdGlm aWVyLAorCQkJCSAgIHN0YXR1cywgcnEpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9lbmdpbmVf Y29udGV4dF9pbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJdW5zaWduZWQg bG9uZyBmbGFnczsKKworCWlmIChSRUFEX09OQ0UoZW5naW5lLT5zdGF0cy5lbmFibGVkKSA9PSAw KQorCQlyZXR1cm47CisKKwl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJmVuZ2luZS0+c3RhdHMubG9j aywgZmxhZ3MpOworCisJaWYgKGVuZ2luZS0+c3RhdHMuZW5hYmxlZCA+IDApIHsKKwkJaWYgKGVu Z2luZS0+c3RhdHMuYWN0aXZlKysgPT0gMCkKKwkJCWVuZ2luZS0+c3RhdHMuc3RhcnQgPSBrdGlt ZV9nZXQoKTsKKwkJR0VNX0JVR19PTihlbmdpbmUtPnN0YXRzLmFjdGl2ZSA9PSAwKTsKKwl9CisK Kwl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5zdGF0cy5sb2NrLCBmbGFncyk7 Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2VuZ2luZV9jb250ZXh0X291dChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChSRUFE X09OQ0UoZW5naW5lLT5zdGF0cy5lbmFibGVkKSA9PSAwKQorCQlyZXR1cm47CisKKwl3cml0ZV9z ZXFsb2NrX2lycXNhdmUoJmVuZ2luZS0+c3RhdHMubG9jaywgZmxhZ3MpOworCisJaWYgKGVuZ2lu ZS0+c3RhdHMuZW5hYmxlZCA+IDApIHsKKwkJa3RpbWVfdCBsYXN0OworCisJCWlmIChlbmdpbmUt PnN0YXRzLmFjdGl2ZSAmJiAtLWVuZ2luZS0+c3RhdHMuYWN0aXZlID09IDApIHsKKwkJCS8qCisJ CQkgKiBEZWNyZW1lbnQgdGhlIGFjdGl2ZSBjb250ZXh0IGNvdW50IGFuZCBpbiBjYXNlIEdQVQor CQkJICogaXMgbm93IGlkbGUgYWRkIHVwIHRvIHRoZSBydW5uaW5nIHRvdGFsLgorCQkJICovCisJ CQlsYXN0ID0ga3RpbWVfc3ViKGt0aW1lX2dldCgpLCBlbmdpbmUtPnN0YXRzLnN0YXJ0KTsKKwor CQkJZW5naW5lLT5zdGF0cy50b3RhbCA9IGt0aW1lX2FkZChlbmdpbmUtPnN0YXRzLnRvdGFsLAor CQkJCQkJCWxhc3QpOworCQl9IGVsc2UgaWYgKGVuZ2luZS0+c3RhdHMuYWN0aXZlID09IDApIHsK KwkJCS8qCisJCQkgKiBBZnRlciB0dXJuaW5nIG9uIGVuZ2luZSBzdGF0cywgY29udGV4dCBvdXQg bWlnaHQgYmUKKwkJCSAqIHRoZSBmaXJzdCBldmVudCBpbiB3aGljaCBjYXNlIHdlIGFjY291bnQg ZnJvbSB0aGUKKwkJCSAqIHRpbWUgc3RhdHMgZ2F0aGVyaW5nIHdhcyB0dXJuZWQgb24uCisJCQkg Ki8KKwkJCWxhc3QgPSBrdGltZV9zdWIoa3RpbWVfZ2V0KCksIGVuZ2luZS0+c3RhdHMuZW5hYmxl ZF9hdCk7CisKKwkJCWVuZ2luZS0+c3RhdHMudG90YWwgPSBrdGltZV9hZGQoZW5naW5lLT5zdGF0 cy50b3RhbCwKKwkJCQkJCQlsYXN0KTsKKwkJfQorCX0KKworCXdyaXRlX3NlcXVubG9ja19pcnFy ZXN0b3JlKCZlbmdpbmUtPnN0YXRzLmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK2V4 ZWNsaXN0c19jaGVja19jb250ZXh0KGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJ CWNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwljb25zdCBzdHJ1Y3Qg aW50ZWxfcmluZyAqcmluZyA9IGNlLT5yaW5nOworCXUzMiAqcmVncyA9IGNlLT5scmNfcmVnX3N0 YXRlOworCWJvb2wgdmFsaWQgPSB0cnVlOworCWludCB4OworCisJaWYgKHJlZ3NbQ1RYX1JJTkdf U1RBUlRdICE9IGk5MTVfZ2d0dF9vZmZzZXQocmluZy0+dm1hKSkgeworCQlwcl9lcnIoIiVzOiBj b250ZXh0IHN1Ym1pdHRlZCB3aXRoIGluY29ycmVjdCBSSU5HX1NUQVJUIFslMDh4XSwgZXhwZWN0 ZWQgJTA4eFxuIiwKKwkJICAgICAgIGVuZ2luZS0+bmFtZSwKKwkJICAgICAgIHJlZ3NbQ1RYX1JJ TkdfU1RBUlRdLAorCQkgICAgICAgaTkxNV9nZ3R0X29mZnNldChyaW5nLT52bWEpKTsKKwkJcmVn c1tDVFhfUklOR19TVEFSVF0gPSBpOTE1X2dndHRfb2Zmc2V0KHJpbmctPnZtYSk7CisJCXZhbGlk ID0gZmFsc2U7CisJfQorCisJaWYgKChyZWdzW0NUWF9SSU5HX0NUTF0gJiB+KFJJTkdfV0FJVCB8 IFJJTkdfV0FJVF9TRU1BUEhPUkUpKSAhPQorCSAgICAoUklOR19DVExfU0laRShyaW5nLT5zaXpl KSB8IFJJTkdfVkFMSUQpKSB7CisJCXByX2VycigiJXM6IGNvbnRleHQgc3VibWl0dGVkIHdpdGgg aW5jb3JyZWN0IFJJTkdfQ1RMIFslMDh4XSwgZXhwZWN0ZWQgJTA4eFxuIiwKKwkJICAgICAgIGVu Z2luZS0+bmFtZSwKKwkJICAgICAgIHJlZ3NbQ1RYX1JJTkdfQ1RMXSwKKwkJICAgICAgICh1MzIp KFJJTkdfQ1RMX1NJWkUocmluZy0+c2l6ZSkgfCBSSU5HX1ZBTElEKSk7CisJCXJlZ3NbQ1RYX1JJ TkdfQ1RMXSA9IFJJTkdfQ1RMX1NJWkUocmluZy0+c2l6ZSkgfCBSSU5HX1ZBTElEOworCQl2YWxp ZCA9IGZhbHNlOworCX0KKworCXggPSBpbnRlbF9scmNfcmluZ19taV9tb2RlKGVuZ2luZSk7CisJ aWYgKHggIT0gLTEgJiYgcmVnc1t4ICsgMV0gJiAocmVnc1t4ICsgMV0gPj4gMTYpICYgU1RPUF9S SU5HKSB7CisJCXByX2VycigiJXM6IGNvbnRleHQgc3VibWl0dGVkIHdpdGggU1RPUF9SSU5HIFsl MDh4XSBpbiBSSU5HX01JX01PREVcbiIsCisJCSAgICAgICBlbmdpbmUtPm5hbWUsIHJlZ3NbeCAr IDFdKTsKKwkJcmVnc1t4ICsgMV0gJj0gflNUT1BfUklORzsKKwkJcmVnc1t4ICsgMV0gfD0gU1RP UF9SSU5HIDw8IDE2OworCQl2YWxpZCA9IGZhbHNlOworCX0KKworCVdBUk5fT05DRSghdmFsaWQs ICJJbnZhbGlkIGxyYyBzdGF0ZSBmb3VuZCBiZWZvcmUgc3VibWlzc2lvblxuIik7Cit9CisKK3N0 YXRpYyB2b2lkIHJlc2V0X2FjdGl2ZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJCSBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJc3RydWN0IGludGVsX2NvbnRleHQgKiBj b25zdCBjZSA9IHJxLT5od19jb250ZXh0OworCXUzMiBoZWFkOworCisJLyoKKwkgKiBUaGUgZXhl Y3V0aW5nIGNvbnRleHQgaGFzIGJlZW4gY2FuY2VsbGVkLiBXZSB3YW50IHRvIHByZXZlbnQKKwkg KiBmdXJ0aGVyIGV4ZWN1dGlvbiBhbG9uZyB0aGlzIGNvbnRleHQgYW5kIHByb3BhZ2F0ZSB0aGUg ZXJyb3Igb24KKwkgKiB0byBhbnl0aGluZyBkZXBlbmRpbmcgb24gaXRzIHJlc3VsdHMuCisJICoK KwkgKiBJbiBfX2k5MTVfcmVxdWVzdF9zdWJtaXQoKSwgd2UgYXBwbHkgdGhlIC1FSU8gYW5kIHJl bW92ZSB0aGUKKwkgKiByZXF1ZXN0cycgcGF5bG9hZHMgZm9yIGFueSBiYW5uZWQgcmVxdWVzdHMu IEJ1dCBmaXJzdCwgd2UgbXVzdAorCSAqIHJld2luZCB0aGUgY29udGV4dCBiYWNrIHRvIHRoZSBz dGFydCBvZiB0aGUgaW5jb21wbGV0ZSByZXF1ZXN0IHNvCisJICogdGhhdCB3ZSBkbyBub3QganVt cCBiYWNrIGludG8gdGhlIG1pZGRsZSBvZiB0aGUgYmF0Y2guCisJICoKKwkgKiBXZSBwcmVzZXJ2 ZSB0aGUgYnJlYWRjcnVtYnMgYW5kIHNlbWFwaG9yZXMgb2YgdGhlIGluY29tcGxldGUKKwkgKiBy ZXF1ZXN0cyBzbyB0aGF0IGludGVyLXRpbWVsaW5lIGRlcGVuZGVuY2llcyAoaS5lIG90aGVyIHRp bWVsaW5lcykKKwkgKiByZW1haW4gY29ycmVjdGx5IG9yZGVyZWQuIEFuZCB3ZSBkZWZlciB0byBf X2k5MTVfcmVxdWVzdF9zdWJtaXQoKQorCSAqIHNvIHRoYXQgYWxsIGFzeW5jaHJvbm91cyB3YWl0 cyBhcmUgY29ycmVjdGx5IGhhbmRsZWQuCisJICovCisJR0VNX1RSQUNFKCIlcyglcyk6IHsgcnE9 JWxseDolbGxkIH1cbiIsCisJCSAgX19mdW5jX18sIGVuZ2luZS0+bmFtZSwgcnEtPmZlbmNlLmNv bnRleHQsIHJxLT5mZW5jZS5zZXFubyk7CisKKwkvKiBPbiByZXN1Ym1pc3Npb24gb2YgdGhlIGFj dGl2ZSByZXF1ZXN0LCBwYXlsb2FkIHdpbGwgYmUgc2NydWJiZWQgKi8KKwlpZiAoaTkxNV9yZXF1 ZXN0X2NvbXBsZXRlZChycSkpCisJCWhlYWQgPSBycS0+dGFpbDsKKwllbHNlCisJCWhlYWQgPSBh Y3RpdmVfcmVxdWVzdChjZS0+dGltZWxpbmUsIHJxKS0+aGVhZDsKKwljZS0+cmluZy0+aGVhZCA9 IGludGVsX3Jpbmdfd3JhcChjZS0+cmluZywgaGVhZCk7CisJaW50ZWxfcmluZ191cGRhdGVfc3Bh Y2UoY2UtPnJpbmcpOworCisJLyogU2NydWIgdGhlIGNvbnRleHQgaW1hZ2UgdG8gcHJldmVudCBy ZXBsYXlpbmcgdGhlIHByZXZpb3VzIGJhdGNoICovCisJaW50ZWxfbHJfY29udGV4dF9yZXN0b3Jl X2RlZmF1bHRfc3RhdGUoY2UsIGVuZ2luZSk7CisJaW50ZWxfbHJfY29udGV4dF91cGRhdGVfcmVn X3N0YXRlKGNlLCBlbmdpbmUpOworCisJLyogV2UndmUgc3dpdGNoZWQgYXdheSwgc28gdGhpcyBz aG91bGQgYmUgYSBuby1vcCwgYnV0IGludGVudCBtYXR0ZXJzICovCisJY2UtPmxyY19kZXNjIHw9 IENUWF9ERVNDX0ZPUkNFX1JFU1RPUkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqCitfX2V4ZWNsaXN0c19zY2hlZHVsZV9pbihzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICogY29uc3QgZW5naW5lID0gcnEtPmVu Z2luZTsKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqIGNvbnN0IGNlID0gcnEtPmh3X2NvbnRleHQ7 CisKKwlpbnRlbF9jb250ZXh0X2dldChjZSk7CisKKwlpZiAodW5saWtlbHkoaTkxNV9nZW1fY29u dGV4dF9pc19iYW5uZWQoY2UtPmdlbV9jb250ZXh0KSkpCisJCXJlc2V0X2FjdGl2ZShycSwgZW5n aW5lKTsKKworCWlmIChJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9ERUJVR19HRU0pKQorCQll eGVjbGlzdHNfY2hlY2tfY29udGV4dChjZSwgZW5naW5lKTsKKworCWlmIChjZS0+dGFnKSB7CisJ CS8qIFVzZSBhIGZpeGVkIHRhZyBmb3IgT0EgYW5kIGZyaWVuZHMgKi8KKwkJY2UtPmxyY19kZXNj IHw9ICh1NjQpY2UtPnRhZyA8PCAzMjsKKwl9IGVsc2UgeworCQkvKiBXZSBkb24ndCBuZWVkIGEg c3RyaWN0IG1hdGNoaW5nIHRhZywganVzdCBkaWZmZXJlbnQgdmFsdWVzICovCisJCWNlLT5scmNf ZGVzYyAmPSB+R0VOTUFTS19VTEwoNDcsIDM3KTsKKwkJY2UtPmxyY19kZXNjIHw9CisJCQkodTY0 KShlbmdpbmUtPmNvbnRleHRfdGFnKysgJSBOVU1fQ09OVEVYVF9UQUcpIDw8CisJCQlHRU4xMV9T V19DVFhfSURfU0hJRlQ7CisJCUJVSUxEX0JVR19PTihOVU1fQ09OVEVYVF9UQUcgPiBHRU4xMl9N QVhfQ09OVEVYVF9IV19JRCk7CisJfQorCisJX19pbnRlbF9ndF9wbV9nZXQoZW5naW5lLT5ndCk7 CisJZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVzX2NoYW5nZShycSwgSU5URUxfQ09OVEVYVF9TQ0hF RFVMRV9JTik7CisJaW50ZWxfZW5naW5lX2NvbnRleHRfaW4oZW5naW5lKTsKKworCXJldHVybiBl bmdpbmU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcmVxdWVzdCAqCitleGVjbGlz dHNfc2NoZWR1bGVfaW4oc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIGludCBpZHgpCit7CisJc3Ry dWN0IGludGVsX2NvbnRleHQgKiBjb25zdCBjZSA9IHJxLT5od19jb250ZXh0OworCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKm9sZDsKKworCUdFTV9CVUdfT04oIWludGVsX2VuZ2luZV9wbV9pc19h d2FrZShycS0+ZW5naW5lKSk7CisJdHJhY2VfaTkxNV9yZXF1ZXN0X2luKHJxLCBpZHgpOworCisJ b2xkID0gUkVBRF9PTkNFKGNlLT5pbmZsaWdodCk7CisJZG8geworCQlpZiAoIW9sZCkgeworCQkJ V1JJVEVfT05DRShjZS0+aW5mbGlnaHQsIF9fZXhlY2xpc3RzX3NjaGVkdWxlX2luKHJxKSk7CisJ CQlicmVhazsKKwkJfQorCX0gd2hpbGUgKCF0cnlfY21weGNoZygmY2UtPmluZmxpZ2h0LCAmb2xk LCBwdHJfaW5jKG9sZCkpKTsKKworCUdFTV9CVUdfT04oaW50ZWxfY29udGV4dF9pbmZsaWdodChj ZSkgIT0gcnEtPmVuZ2luZSk7CisJcmV0dXJuIGk5MTVfcmVxdWVzdF9nZXQocnEpOworfQorCitz dGF0aWMgdm9pZCBraWNrX3NpYmxpbmdzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBzdHJ1Y3Qg aW50ZWxfY29udGV4dCAqY2UpCit7CisJc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZSA9 CisJCWNvbnRhaW5lcl9vZihjZSwgdHlwZW9mKCp2ZSksIGNvbnRleHQpOworCXN0cnVjdCBpOTE1 X3JlcXVlc3QgKm5leHQgPSBSRUFEX09OQ0UodmUtPnJlcXVlc3QpOworCisJaWYgKG5leHQgJiYg bmV4dC0+ZXhlY3V0aW9uX21hc2sgJiB+cnEtPmV4ZWN1dGlvbl9tYXNrKQorCQl0YXNrbGV0X3Nj aGVkdWxlKCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZAorX19leGVjbGlzdHNfc2NoZWR1bGVfb3V0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAor CQkJIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKiBjb25zdCBlbmdpbmUpCit7CisJc3RydWN0IGlu dGVsX2NvbnRleHQgKiBjb25zdCBjZSA9IHJxLT5od19jb250ZXh0OworCisJLyoKKwkgKiBOQiBw cm9jZXNzX2NzYigpIGlzIG5vdCB1bmRlciB0aGUgZW5naW5lLT5hY3RpdmUubG9jayBhbmQgaGVu Y2UKKwkgKiBzY2hlZHVsZV9vdXQgY2FuIHJhY2Ugd2l0aCBzY2hlZHVsZV9pbiBtZWFuaW5nIHRo YXQgd2Ugc2hvdWxkCisJICogcmVmcmFpbiBmcm9tIGRvaW5nIG5vbi10cml2aWFsIHdvcmsgaGVy ZS4KKwkgKi8KKworCS8qCisJICogSWYgd2UgaGF2ZSBqdXN0IGNvbXBsZXRlZCB0aGlzIGNvbnRl eHQsIHRoZSBlbmdpbmUgbWF5IG5vdyBiZQorCSAqIGlkbGUgYW5kIHdlIHdhbnQgdG8gcmUtZW50 ZXIgcG93ZXJzYXZpbmcuCisJICovCisJaWYgKGxpc3RfaXNfbGFzdCgmcnEtPmxpbmssICZjZS0+ dGltZWxpbmUtPnJlcXVlc3RzKSAmJgorCSAgICBpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkK KwkJaW50ZWxfZW5naW5lX2FkZF9yZXRpcmUoZW5naW5lLCBjZS0+dGltZWxpbmUpOworCisJaW50 ZWxfZW5naW5lX2NvbnRleHRfb3V0KGVuZ2luZSk7CisJZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVz X2NoYW5nZShycSwgSU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9PVVQpOworCWludGVsX2d0X3BtX3B1 dF9hc3luYyhlbmdpbmUtPmd0KTsKKworCS8qCisJICogSWYgdGhpcyBpcyBwYXJ0IG9mIGEgdmly dHVhbCBlbmdpbmUsIGl0cyBuZXh0IHJlcXVlc3QgbWF5CisJICogaGF2ZSBiZWVuIGJsb2NrZWQg d2FpdGluZyBmb3IgYWNjZXNzIHRvIHRoZSBhY3RpdmUgY29udGV4dC4KKwkgKiBXZSBoYXZlIHRv IGtpY2sgYWxsIHRoZSBzaWJsaW5ncyBhZ2FpbiBpbiBjYXNlIHdlIG5lZWQgdG8KKwkgKiBzd2l0 Y2ggKGUuZy4gdGhlIG5leHQgcmVxdWVzdCBpcyBub3QgcnVubmFibGUgb24gdGhpcworCSAqIGVu Z2luZSkuIEhvcGVmdWxseSwgd2Ugd2lsbCBhbHJlYWR5IGhhdmUgc3VibWl0dGVkIHRoZSBuZXh0 CisJICogcmVxdWVzdCBiZWZvcmUgdGhlIHRhc2tsZXQgcnVucyBhbmQgZG8gbm90IG5lZWQgdG8g cmVidWlsZAorCSAqIGVhY2ggdmlydHVhbCB0cmVlIGFuZCBraWNrIGV2ZXJ5b25lIGFnYWluLgor CSAqLworCWlmIChjZS0+ZW5naW5lICE9IGVuZ2luZSkKKwkJa2lja19zaWJsaW5ncyhycSwgY2Up OworCisJaW50ZWxfY29udGV4dF9wdXQoY2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2V4 ZWNsaXN0c19zY2hlZHVsZV9vdXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCit7CisJc3RydWN0 IGludGVsX2NvbnRleHQgKiBjb25zdCBjZSA9IHJxLT5od19jb250ZXh0OworCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmN1ciwgKm9sZDsKKworCXRyYWNlX2k5MTVfcmVxdWVzdF9vdXQocnEpOwor CisJb2xkID0gUkVBRF9PTkNFKGNlLT5pbmZsaWdodCk7CisJZG8KKwkJY3VyID0gcHRyX3VubWFz a19iaXRzKG9sZCwgMikgPyBwdHJfZGVjKG9sZCkgOiBOVUxMOworCXdoaWxlICghdHJ5X2NtcHhj aGcoJmNlLT5pbmZsaWdodCwgJm9sZCwgY3VyKSk7CisJaWYgKCFjdXIpCisJCV9fZXhlY2xpc3Rz X3NjaGVkdWxlX291dChycSwgb2xkKTsKKworCWk5MTVfcmVxdWVzdF9wdXQocnEpOworfQorCitz dGF0aWMgdTY0IGV4ZWNsaXN0c191cGRhdGVfY29udGV4dChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBycS0+aHdfY29udGV4dDsKKwl1NjQg ZGVzYyA9IGNlLT5scmNfZGVzYzsKKwl1MzIgdGFpbDsKKworCS8qCisJICogV2FJZGxlTGl0ZVJl c3RvcmU6YmR3LHNrbAorCSAqCisJICogV2Ugc2hvdWxkIG5ldmVyIHN1Ym1pdCB0aGUgY29udGV4 dCB3aXRoIHRoZSBzYW1lIFJJTkdfVEFJTCB0d2ljZQorCSAqIGp1c3QgaW4gY2FzZSB3ZSBzdWJt aXQgYW4gZW1wdHkgcmluZywgd2hpY2ggY29uZnVzZXMgdGhlIEhXLgorCSAqCisJICogV2UgYXBw ZW5kIGEgY291cGxlIG9mIE5PT1BzIChnZW44X2VtaXRfd2FfdGFpbCkgYWZ0ZXIgdGhlIGVuZCBv ZgorCSAqIHRoZSBub3JtYWwgcmVxdWVzdCB0byBiZSBhYmxlIHRvIGFsd2F5cyBhZHZhbmNlIHRo ZSBSSU5HX1RBSUwgb24KKwkgKiBzdWJzZXF1ZW50IHJlc3VibWlzc2lvbnMgKGZvciBsaXRlIHJl c3RvcmUpLiBTaG91bGQgdGhhdCBmYWlsIHVzLAorCSAqIGFuZCB3ZSB0cnkgYW5kIHN1Ym1pdCB0 aGUgc2FtZSB0YWlsIGFnYWluLCBmb3JjZSB0aGUgY29udGV4dAorCSAqIHJlbG9hZC4KKwkgKi8K Kwl0YWlsID0gaW50ZWxfcmluZ19zZXRfdGFpbChycS0+cmluZywgcnEtPnRhaWwpOworCWlmICh1 bmxpa2VseShjZS0+bHJjX3JlZ19zdGF0ZVtDVFhfUklOR19UQUlMXSA9PSB0YWlsKSkKKwkJZGVz YyB8PSBDVFhfREVTQ19GT1JDRV9SRVNUT1JFOworCWNlLT5scmNfcmVnX3N0YXRlW0NUWF9SSU5H X1RBSUxdID0gdGFpbDsKKwlycS0+dGFpbCA9IHJxLT53YV90YWlsOworCisJLyoKKwkgKiBNYWtl IHN1cmUgdGhlIGNvbnRleHQgaW1hZ2UgaXMgY29tcGxldGUgYmVmb3JlIHdlIHN1Ym1pdCBpdCB0 byBIVy4KKwkgKgorCSAqIE9zdGVuc2libHksIHdyaXRlcyAoaW5jbHVkaW5nIHRoZSBXQ0IpIHNo b3VsZCBiZSBmbHVzaGVkIHByaW9yIHRvCisJICogYW4gdW5jYWNoZWQgd3JpdGUgc3VjaCBhcyBv dXIgbW1pbyByZWdpc3RlciBhY2Nlc3MsIHRoZSBlbXBpcmljYWwKKwkgKiBldmlkZW5jZSAoZXNw LiBvbiBCcmFzd2VsbCkgc3VnZ2VzdHMgdGhhdCB0aGUgV0Mgd3JpdGUgaW50byBtZW1vcnkKKwkg KiBtYXkgbm90IGJlIHZpc2libGUgdG8gdGhlIEhXIHByaW9yIHRvIHRoZSBjb21wbGV0aW9uIG9m IHRoZSBVQworCSAqIHJlZ2lzdGVyIHdyaXRlIGFuZCB0aGF0IHdlIG1heSBiZWdpbiBleGVjdXRp b24gZnJvbSB0aGUgY29udGV4dAorCSAqIGJlZm9yZSBpdHMgaW1hZ2UgaXMgY29tcGxldGUgbGVh ZGluZyB0byBpbnZhbGlkIFBEIGNoYXNpbmcuCisJICovCisJd21iKCk7CisKKwkvKiBXYV8xNjA3 MTM4MzQwOnRnbCAqLworCWlmIChJU19UR0xfUkVWSUQocnEtPmk5MTUsIFRHTF9SRVZJRF9BMCwg VEdMX1JFVklEX0EwKSkKKwkJZGVzYyB8PSBDVFhfREVTQ19GT1JDRV9SRVNUT1JFOworCisJY2Ut PmxyY19kZXNjICY9IH5DVFhfREVTQ19GT1JDRV9SRVNUT1JFOworCXJldHVybiBkZXNjOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfZGVzYyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNs aXN0cyAqZXhlY2xpc3RzLCB1NjQgZGVzYywgdTMyIHBvcnQpCit7CisJaWYgKGV4ZWNsaXN0cy0+ Y3RybF9yZWcpIHsKKwkJd3JpdGVsKGxvd2VyXzMyX2JpdHMoZGVzYyksIGV4ZWNsaXN0cy0+c3Vi bWl0X3JlZyArIHBvcnQgKiAyKTsKKwkJd3JpdGVsKHVwcGVyXzMyX2JpdHMoZGVzYyksIGV4ZWNs aXN0cy0+c3VibWl0X3JlZyArIHBvcnQgKiAyICsgMSk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKHVw cGVyXzMyX2JpdHMoZGVzYyksIGV4ZWNsaXN0cy0+c3VibWl0X3JlZyk7CisJCXdyaXRlbChsb3dl cl8zMl9iaXRzKGRlc2MpLCBleGVjbGlzdHMtPnN1Ym1pdF9yZWcpOworCX0KK30KKworc3RhdGlj IF9fbWF5YmVfdW51c2VkIHZvaWQKK3RyYWNlX3BvcnRzKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdp bmVfZXhlY2xpc3RzICpleGVjbGlzdHMsCisJICAgIGNvbnN0IGNoYXIgKm1zZywKKwkgICAgc3Ry dWN0IGk5MTVfcmVxdWVzdCAqIGNvbnN0ICpwb3J0cykKK3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUgPQorCQljb250YWluZXJfb2YoZXhlY2xpc3RzLCB0eXBlb2YoKmVu Z2luZSksIGV4ZWNsaXN0cyk7CisKKwlpZiAoIXBvcnRzWzBdKQorCQlyZXR1cm47CisKKwlHRU1f VFJBQ0UoIiVzOiAlcyB7ICVsbHg6JWxsZCVzLCAlbGx4OiVsbGQgfVxuIiwKKwkJICBlbmdpbmUt Pm5hbWUsIG1zZywKKwkJICBwb3J0c1swXS0+ZmVuY2UuY29udGV4dCwKKwkJICBwb3J0c1swXS0+ ZmVuY2Uuc2Vxbm8sCisJCSAgaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChwb3J0c1swXSkgPyAiISIg OgorCQkgIGk5MTVfcmVxdWVzdF9zdGFydGVkKHBvcnRzWzBdKSA/ICIqIiA6CisJCSAgIiIsCisJ CSAgcG9ydHNbMV0gPyBwb3J0c1sxXS0+ZmVuY2UuY29udGV4dCA6IDAsCisJCSAgcG9ydHNbMV0g PyBwb3J0c1sxXS0+ZmVuY2Uuc2Vxbm8gOiAwKTsKK30KKworc3RhdGljIF9fbWF5YmVfdW51c2Vk IGJvb2wKK2Fzc2VydF9wZW5kaW5nX3ZhbGlkKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhl Y2xpc3RzICpleGVjbGlzdHMsCisJCSAgICAgY29uc3QgY2hhciAqbXNnKQoreworCXN0cnVjdCBp OTE1X3JlcXVlc3QgKiBjb25zdCAqcG9ydCwgKnJxOworCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSA9IE5VTEw7CisKKwl0cmFjZV9wb3J0cyhleGVjbGlzdHMsIG1zZywgZXhlY2xpc3RzLT5wZW5k aW5nKTsKKworCWlmICghZXhlY2xpc3RzLT5wZW5kaW5nWzBdKSB7CisJCUdFTV9UUkFDRV9FUlIo Ik5vdGhpbmcgcGVuZGluZyBmb3IgcHJvbW90aW9uIVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9 CisKKwlpZiAoZXhlY2xpc3RzLT5wZW5kaW5nW2V4ZWNsaXN0c19udW1fcG9ydHMoZXhlY2xpc3Rz KV0pIHsKKwkJR0VNX1RSQUNFX0VSUigiRXhjZXNzIHBlbmRpbmdbJWRdIGZvciBwcm9tb3Rpb24h XG4iLAorCQkJICAgICAgZXhlY2xpc3RzX251bV9wb3J0cyhleGVjbGlzdHMpKTsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCWZvciAocG9ydCA9IGV4ZWNsaXN0cy0+cGVuZGluZzsgKHJxID0gKnBv cnQpOyBwb3J0KyspIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJYm9vbCBvayA9IHRydWU7 CisKKwkJR0VNX0JVR19PTigha3JlZl9yZWFkKCZycS0+ZmVuY2UucmVmY291bnQpKTsKKwkJR0VN X0JVR19PTighaTkxNV9yZXF1ZXN0X2lzX2FjdGl2ZShycSkpOworCisJCWlmIChjZSA9PSBycS0+ aHdfY29udGV4dCkgeworCQkJR0VNX1RSQUNFX0VSUigiRHVwIGNvbnRleHQ6JWxseCBpbiBwZW5k aW5nWyV6ZF1cbiIsCisJCQkJICAgICAgY2UtPnRpbWVsaW5lLT5mZW5jZV9jb250ZXh0LAorCQkJ CSAgICAgIHBvcnQgLSBleGVjbGlzdHMtPnBlbmRpbmcpOworCQkJcmV0dXJuIGZhbHNlOworCQl9 CisJCWNlID0gcnEtPmh3X2NvbnRleHQ7CisKKwkJLyogSG9sZCB0aWdodGx5IG9udG8gdGhlIGxv Y2sgdG8gcHJldmVudCBjb25jdXJyZW50IHJldGlyZXMhICovCisJCWlmICghc3Bpbl90cnlsb2Nr X2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncykpCisJCQljb250aW51ZTsKKworCQlpZiAoaTkxNV9y ZXF1ZXN0X2NvbXBsZXRlZChycSkpCisJCQlnb3RvIHVubG9jazsKKworCQlpZiAoaTkxNV9hY3Rp dmVfaXNfaWRsZSgmY2UtPmFjdGl2ZSkgJiYKKwkJICAgICFpOTE1X2dlbV9jb250ZXh0X2lzX2tl cm5lbChjZS0+Z2VtX2NvbnRleHQpKSB7CisJCQlHRU1fVFJBQ0VfRVJSKCJJbmFjdGl2ZSBjb250 ZXh0OiVsbHggaW4gcGVuZGluZ1slemRdXG4iLAorCQkJCSAgICAgIGNlLT50aW1lbGluZS0+ZmVu Y2VfY29udGV4dCwKKwkJCQkgICAgICBwb3J0IC0gZXhlY2xpc3RzLT5wZW5kaW5nKTsKKwkJCW9r ID0gZmFsc2U7CisJCQlnb3RvIHVubG9jazsKKwkJfQorCisJCWlmICghaTkxNV92bWFfaXNfcGlu bmVkKGNlLT5zdGF0ZSkpIHsKKwkJCUdFTV9UUkFDRV9FUlIoIlVucGlubmVkIGNvbnRleHQ6JWxs eCBpbiBwZW5kaW5nWyV6ZF1cbiIsCisJCQkJICAgICAgY2UtPnRpbWVsaW5lLT5mZW5jZV9jb250 ZXh0LAorCQkJCSAgICAgIHBvcnQgLSBleGVjbGlzdHMtPnBlbmRpbmcpOworCQkJb2sgPSBmYWxz ZTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisKKwkJaWYgKCFpOTE1X3ZtYV9pc19waW5uZWQoY2Ut PnJpbmctPnZtYSkpIHsKKwkJCUdFTV9UUkFDRV9FUlIoIlVucGlubmVkIHJpbmc6JWxseCBpbiBw ZW5kaW5nWyV6ZF1cbiIsCisJCQkJICAgICAgY2UtPnRpbWVsaW5lLT5mZW5jZV9jb250ZXh0LAor CQkJCSAgICAgIHBvcnQgLSBleGVjbGlzdHMtPnBlbmRpbmcpOworCQkJb2sgPSBmYWxzZTsKKwkJ CWdvdG8gdW5sb2NrOworCQl9CisKK3VubG9jazoKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm cnEtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFvaykKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwly ZXR1cm4gY2U7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXRfcG9ydHMoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xp c3RzICpleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7CisJdW5zaWduZWQgaW50IG47CisK KwlHRU1fQlVHX09OKCFhc3NlcnRfcGVuZGluZ192YWxpZChleGVjbGlzdHMsICJzdWJtaXQiKSk7 CisKKwkvKgorCSAqIFdlIGNhbiBza2lwIGFjcXVpcmluZyBpbnRlbF9ydW50aW1lX3BtX2dldCgp IGhlcmUgYXMgaXQgd2FzIHRha2VuCisJICogb24gb3VyIGJlaGFsZiBieSB0aGUgcmVxdWVzdCAo c2VlIGk5MTVfZ2VtX21hcmtfYnVzeSgpKSBhbmQgaXQgd2lsbAorCSAqIG5vdCBiZSByZWxpbnF1 aXNoZWQgdW50aWwgdGhlIGRldmljZSBpcyBpZGxlIChzZWUKKwkgKiBpOTE1X2dlbV9pZGxlX3dv cmtfaGFuZGxlcigpKS4gQXMgYSBwcmVjYXV0aW9uLCB3ZSBtYWtlIHN1cmUKKwkgKiB0aGF0IGFs bCBFTFNQIGFyZSBkcmFpbmVkIGkuZS4gd2UgaGF2ZSBwcm9jZXNzZWQgdGhlIENTQiwKKwkgKiBi ZWZvcmUgYWxsb3dpbmcgb3Vyc2VsdmVzIHRvIGlkbGUgYW5kIGNhbGxpbmcgaW50ZWxfcnVudGlt ZV9wbV9wdXQoKS4KKwkgKi8KKwlHRU1fQlVHX09OKCFpbnRlbF9lbmdpbmVfcG1faXNfYXdha2Uo ZW5naW5lKSk7CisKKwkvKgorCSAqIEVMU1Egbm90ZTogdGhlIHN1Ym1pdCBxdWV1ZSBpcyBub3Qg Y2xlYXJlZCBhZnRlciBiZWluZyBzdWJtaXR0ZWQKKwkgKiB0byB0aGUgSFcgc28gd2UgbmVlZCB0 byBtYWtlIHN1cmUgd2UgYWx3YXlzIGNsZWFuIGl0IHVwLiBUaGlzIGlzCisJICogY3VycmVudGx5 IGVuc3VyZWQgYnkgdGhlIGZhY3QgdGhhdCB3ZSBhbHdheXMgd3JpdGUgdGhlIHNhbWUgbnVtYmVy CisJICogb2YgZWxzcSBlbnRyaWVzLCBrZWVwIHRoaXMgaW4gbWluZCBiZWZvcmUgY2hhbmdpbmcg dGhlIGxvb3AgYmVsb3cuCisJICovCisJZm9yIChuID0gZXhlY2xpc3RzX251bV9wb3J0cyhleGVj bGlzdHMpOyBuLS07ICkgeworCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IGV4ZWNsaXN0cy0+ cGVuZGluZ1tuXTsKKworCQl3cml0ZV9kZXNjKGV4ZWNsaXN0cywKKwkJCSAgIHJxID8gZXhlY2xp c3RzX3VwZGF0ZV9jb250ZXh0KHJxKSA6IDAsCisJCQkgICBuKTsKKwl9CisKKwkvKiB3ZSBuZWVk IHRvIG1hbnVhbGx5IGxvYWQgdGhlIHN1Ym1pdCBxdWV1ZSAqLworCWlmIChleGVjbGlzdHMtPmN0 cmxfcmVnKQorCQl3cml0ZWwoRUxfQ1RSTF9MT0FELCBleGVjbGlzdHMtPmN0cmxfcmVnKTsKK30K Kworc3RhdGljIGJvb2wgY3R4X3NpbmdsZV9wb3J0X3N1Ym1pc3Npb24oY29uc3Qgc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlKQoreworCXJldHVybiAoSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVf R1ZUKSAmJgorCQlpOTE1X2dlbV9jb250ZXh0X2ZvcmNlX3NpbmdsZV9zdWJtaXNzaW9uKGNlLT5n ZW1fY29udGV4dCkpOworfQorCitzdGF0aWMgYm9vbCBjYW5fbWVyZ2VfY3R4KGNvbnN0IHN0cnVj dCBpbnRlbF9jb250ZXh0ICpwcmV2LAorCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAq bmV4dCkKK3sKKwlpZiAocHJldiAhPSBuZXh0KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoY3R4 X3NpbmdsZV9wb3J0X3N1Ym1pc3Npb24ocHJldikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVy biB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjYW5fbWVyZ2VfcnEoY29uc3Qgc3RydWN0IGk5MTVf cmVxdWVzdCAqcHJldiwKKwkJCSBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpuZXh0KQorewor CUdFTV9CVUdfT04ocHJldiA9PSBuZXh0KTsKKwlHRU1fQlVHX09OKCFhc3NlcnRfcHJpb3JpdHlf cXVldWUocHJldiwgbmV4dCkpOworCisJLyoKKwkgKiBXZSBkbyBub3Qgc3VibWl0IGtub3duIGNv bXBsZXRlZCByZXF1ZXN0cy4gVGhlcmVmb3JlIGlmIHRoZSBuZXh0CisJICogcmVxdWVzdCBpcyBh bHJlYWR5IGNvbXBsZXRlZCwgd2UgY2FuIHByZXRlbmQgdG8gbWVyZ2UgaXQgaW4KKwkgKiB3aXRo IHRoZSBwcmV2aW91cyBjb250ZXh0IChhbmQgd2Ugd2lsbCBza2lwIHVwZGF0aW5nIHRoZSBFTFNQ CisJICogYW5kIHRyYWNraW5nKS4gVGh1cyBob3BlZnVsbHkga2VlcGluZyB0aGUgRUxTUCBmdWxs IHdpdGggYWN0aXZlCisJICogY29udGV4dHMsIGRlc3BpdGUgdGhlIGJlc3QgZWZmb3J0cyBvZiBw cmVlbXB0LXRvLWJ1c3kgdG8gY29uZnVzZQorCSAqIHVzLgorCSAqLworCWlmIChpOTE1X3JlcXVl c3RfY29tcGxldGVkKG5leHQpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICh1bmxpa2VseSgocHJl di0+ZmxhZ3MgXiBuZXh0LT5mbGFncykgJgorCQkgICAgIChJOTE1X1JFUVVFU1RfTk9QUkVFTVBU IHwgSTkxNV9SRVFVRVNUX1NFTlRJTkVMKSkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghY2Fu X21lcmdlX2N0eChwcmV2LT5od19jb250ZXh0LCBuZXh0LT5od19jb250ZXh0KSkKKwkJcmV0dXJu IGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHZpcnR1YWxfbWF0Y2hl cyhjb25zdCBzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnZlLAorCQkJICAgIGNvbnN0IHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKK3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICppbmZsaWdodDsK KworCWlmICghKHJxLT5leGVjdXRpb25fbWFzayAmIGVuZ2luZS0+bWFzaykpIC8qIFdlIHBlZWtl ZCB0b28gc29vbiEgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBXZSB0cmFjayB3aGVu IHRoZSBIVyBoYXMgY29tcGxldGVkIHNhdmluZyB0aGUgY29udGV4dCBpbWFnZQorCSAqIChpLmUu IHdoZW4gd2UgaGF2ZSBzZWVuIHRoZSBmaW5hbCBDUyBldmVudCBzd2l0Y2hpbmcgb3V0IG9mCisJ ICogdGhlIGNvbnRleHQpIGFuZCBtdXN0IG5vdCBvdmVyd3JpdGUgdGhlIGNvbnRleHQgaW1hZ2Ug YmVmb3JlCisJICogdGhlbi4gVGhpcyByZXN0cmljdHMgdXMgdG8gb25seSB1c2luZyB0aGUgYWN0 aXZlIGVuZ2luZQorCSAqIHdoaWxlIHRoZSBwcmV2aW91cyB2aXJ0dWFsaXplZCByZXF1ZXN0IGlz IGluZmxpZ2h0IChzbworCSAqIHdlIHJldXNlIHRoZSByZWdpc3RlciBvZmZzZXRzKS4gVGhpcyBp cyBhIHZlcnkgc21hbGwKKwkgKiBoeXN0ZXJzaXMgb24gdGhlIGdyZWVkeSBzZWVsY3Rpb24gYWxn b3JpdGhtLgorCSAqLworCWluZmxpZ2h0ID0gaW50ZWxfY29udGV4dF9pbmZsaWdodCgmdmUtPmNv bnRleHQpOworCWlmIChpbmZsaWdodCAmJiBpbmZsaWdodCAhPSBlbmdpbmUpCisJCXJldHVybiBm YWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB2aXJ0dWFsX3hmZXJfYnJl YWRjcnVtYnMoc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZSwKKwkJCQkgICAgIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpv bGQgPSB2ZS0+c2libGluZ3NbMF07CisKKwkvKiBBbGwgdW5hdHRhY2hlZCAocnEtPmVuZ2luZSA9 PSBvbGQpIG11c3QgYWxyZWFkeSBiZSBjb21wbGV0ZWQgKi8KKworCXNwaW5fbG9jaygmb2xkLT5i cmVhZGNydW1icy5pcnFfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZ2ZS0+Y29udGV4dC5zaWdu YWxfbGluaykpIHsKKwkJbGlzdF9tb3ZlX3RhaWwoJnZlLT5jb250ZXh0LnNpZ25hbF9saW5rLAor CQkJICAgICAgICZlbmdpbmUtPmJyZWFkY3J1bWJzLnNpZ25hbGVycyk7CisJCWludGVsX2VuZ2lu ZV9xdWV1ZV9icmVhZGNydW1icyhlbmdpbmUpOworCX0KKwlzcGluX3VubG9jaygmb2xkLT5icmVh ZGNydW1icy5pcnFfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKK2xh c3RfYWN0aXZlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMp Cit7CisJc3RydWN0IGk5MTVfcmVxdWVzdCAqIGNvbnN0ICpsYXN0ID0gUkVBRF9PTkNFKGV4ZWNs aXN0cy0+YWN0aXZlKTsKKworCXdoaWxlICgqbGFzdCAmJiBpOTE1X3JlcXVlc3RfY29tcGxldGVk KCpsYXN0KSkKKwkJbGFzdCsrOworCisJcmV0dXJuICpsYXN0OworfQorCitzdGF0aWMgdm9pZCBk ZWZlcl9yZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBzdHJ1Y3QgbGlzdF9oZWFkICog Y29uc3QgcGwpCit7CisJTElTVF9IRUFEKGxpc3QpOworCisJLyoKKwkgKiBXZSB3YW50IHRvIG1v dmUgdGhlIGludGVycnVwdGVkIHJlcXVlc3QgdG8gdGhlIGJhY2sgb2YKKwkgKiB0aGUgcm91bmQt cm9iaW4gbGlzdCAoaS5lLiBpdHMgcHJpb3JpdHkgbGV2ZWwpLCBidXQKKwkgKiBpbiBkb2luZyBz bywgd2UgbXVzdCB0aGVuIG1vdmUgYWxsIHJlcXVlc3RzIHRoYXQgd2VyZSBpbgorCSAqIGZsaWdo dCBhbmQgd2VyZSB3YWl0aW5nIGZvciB0aGUgaW50ZXJydXB0ZWQgcmVxdWVzdCB0bworCSAqIGJl IHJ1biBhZnRlciBpdCBhZ2Fpbi4KKwkgKi8KKwlkbyB7CisJCXN0cnVjdCBpOTE1X2RlcGVuZGVu Y3kgKnA7CisKKwkJR0VNX0JVR19PTihpOTE1X3JlcXVlc3RfaXNfYWN0aXZlKHJxKSk7CisJCWxp c3RfbW92ZV90YWlsKCZycS0+c2NoZWQubGluaywgcGwpOworCisJCWxpc3RfZm9yX2VhY2hfZW50 cnkocCwgJnJxLT5zY2hlZC53YWl0ZXJzX2xpc3QsIHdhaXRfbGluaykgeworCQkJc3RydWN0IGk5 MTVfcmVxdWVzdCAqdyA9CisJCQkJY29udGFpbmVyX29mKHAtPndhaXRlciwgdHlwZW9mKCp3KSwg c2NoZWQpOworCisJCQkvKiBMZWF2ZSBzZW1hcGhvcmVzIHNwaW5uaW5nIG9uIHRoZSBvdGhlciBl bmdpbmVzICovCisJCQlpZiAody0+ZW5naW5lICE9IHJxLT5lbmdpbmUpCisJCQkJY29udGludWU7 CisKKwkJCS8qIE5vIHdhaXRlciBzaG91bGQgc3RhcnQgYmVmb3JlIGl0cyBzaWduYWxlciAqLwor CQkJR0VNX0JVR19PTihpOTE1X3JlcXVlc3Rfc3RhcnRlZCh3KSAmJgorCQkJCSAgICFpOTE1X3Jl cXVlc3RfY29tcGxldGVkKHJxKSk7CisKKwkJCUdFTV9CVUdfT04oaTkxNV9yZXF1ZXN0X2lzX2Fj dGl2ZSh3KSk7CisJCQlpZiAobGlzdF9lbXB0eSgmdy0+c2NoZWQubGluaykpCisJCQkJY29udGlu dWU7IC8qIE5vdCB5ZXQgc3VibWl0dGVkOyB1bnJlYWR5ICovCisKKwkJCWlmIChycV9wcmlvKHcp IDwgcnFfcHJpbyhycSkpCisJCQkJY29udGludWU7CisKKwkJCUdFTV9CVUdfT04ocnFfcHJpbyh3 KSA+IHJxX3ByaW8ocnEpKTsKKwkJCWxpc3RfbW92ZV90YWlsKCZ3LT5zY2hlZC5saW5rLCAmbGlz dCk7CisJCX0KKworCQlycSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmbGlzdCwgdHlwZW9m KCpycSksIHNjaGVkLmxpbmspOworCX0gd2hpbGUgKHJxKTsKK30KKworc3RhdGljIHZvaWQgZGVm ZXJfYWN0aXZlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycTsKKworCXJxID0gX191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhlbmdp bmUpOworCWlmICghcnEpCisJCXJldHVybjsKKworCWRlZmVyX3JlcXVlc3QocnEsIGk5MTVfc2No ZWRfbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgcnFfcHJpbyhycSkpKTsKK30KKworc3RhdGljIGJv b2wKK25lZWRfdGltZXNsaWNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgY29uc3Qg c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCit7CisJaW50IGhpbnQ7CisKKwlpZiAoIWludGVsX2Vu Z2luZV9oYXNfdGltZXNsaWNlcyhlbmdpbmUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAobGlz dF9pc19sYXN0KCZycS0+c2NoZWQubGluaywgJmVuZ2luZS0+YWN0aXZlLnJlcXVlc3RzKSkKKwkJ cmV0dXJuIGZhbHNlOworCisJaGludCA9IG1heChycV9wcmlvKGxpc3RfbmV4dF9lbnRyeShycSwg c2NoZWQubGluaykpLAorCQkgICBlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50 KTsKKworCXJldHVybiBoaW50ID49IGVmZmVjdGl2ZV9wcmlvKHJxKTsKK30KKworc3RhdGljIGlu dAorc3dpdGNoX3ByaW8oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBjb25zdCBzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSkKK3sKKwlpZiAobGlzdF9pc19sYXN0KCZycS0+c2NoZWQubGlu aywgJmVuZ2luZS0+YWN0aXZlLnJlcXVlc3RzKSkKKwkJcmV0dXJuIElOVF9NSU47CisKKwlyZXR1 cm4gcnFfcHJpbyhsaXN0X25leHRfZW50cnkocnEsIHNjaGVkLmxpbmspKTsKK30KKworc3RhdGlj IGlubGluZSB1bnNpZ25lZCBsb25nCit0aW1lc2xpY2UoY29uc3Qgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQoreworCXJldHVybiBSRUFEX09OQ0UoZW5naW5lLT5wcm9wcy50aW1lc2xp Y2VfZHVyYXRpb25fbXMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZworYWN0aXZlX3RpbWVz bGljZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJY29uc3Qgc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEgPSAqZW5naW5lLT5leGVjbGlzdHMuYWN0aXZlOworCisJaWYg KGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQorCQlyZXR1cm4gMDsKKworCWlmIChlbmdpbmUt PmV4ZWNsaXN0cy5zd2l0Y2hfcHJpb3JpdHlfaGludCA8IGVmZmVjdGl2ZV9wcmlvKHJxKSkKKwkJ cmV0dXJuIDA7CisKKwlyZXR1cm4gdGltZXNsaWNlKGVuZ2luZSk7Cit9CisKK3N0YXRpYyB2b2lk IHNldF90aW1lc2xpY2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCWlmICgh aW50ZWxfZW5naW5lX2hhc190aW1lc2xpY2VzKGVuZ2luZSkpCisJCXJldHVybjsKKworCXNldF90 aW1lcl9tcygmZW5naW5lLT5leGVjbGlzdHMudGltZXIsIGFjdGl2ZV90aW1lc2xpY2UoZW5naW5l KSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY29yZF9wcmVlbXB0aW9uKHN0cnVjdCBpbnRlbF9lbmdp bmVfZXhlY2xpc3RzICpleGVjbGlzdHMpCit7CisJKHZvaWQpSTkxNV9TRUxGVEVTVF9PTkxZKGV4 ZWNsaXN0cy0+cHJlZW1wdF9oYW5nLmNvdW50KyspOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9u ZyBhY3RpdmVfcHJlZW1wdF90aW1lb3V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK K3sKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKworCXJxID0gbGFzdF9hY3RpdmUoJmVuZ2lu ZS0+ZXhlY2xpc3RzKTsKKwlpZiAoIXJxKQorCQlyZXR1cm4gMDsKKworCS8qIEZvcmNlIGEgZmFz dCByZXNldCBmb3IgdGVybWluYXRlZCBjb250ZXh0cyAoaWdub3Jpbmcgc3lzZnMhKSAqLworCWlm ICh1bmxpa2VseShpOTE1X2dlbV9jb250ZXh0X2lzX2Jhbm5lZChycS0+Z2VtX2NvbnRleHQpKSkK KwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gUkVBRF9PTkNFKGVuZ2luZS0+cHJvcHMucHJlZW1wdF90 aW1lb3V0X21zKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3ByZWVtcHRfdGltZW91dChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJaWYgKCFpbnRlbF9lbmdpbmVfaGFzX3ByZWVt cHRfcmVzZXQoZW5naW5lKSkKKwkJcmV0dXJuOworCisJc2V0X3RpbWVyX21zKCZlbmdpbmUtPmV4 ZWNsaXN0cy5wcmVlbXB0LAorCQkgICAgIGFjdGl2ZV9wcmVlbXB0X3RpbWVvdXQoZW5naW5lKSk7 Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4 ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoqcG9y dCA9IGV4ZWNsaXN0cy0+cGVuZGluZzsKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoqIGNvbnN0IGxh c3RfcG9ydCA9IHBvcnQgKyBleGVjbGlzdHMtPnBvcnRfbWFzazsKKwlzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpsYXN0OworCXN0cnVjdCByYl9ub2RlICpyYjsKKwlib29sIHN1Ym1pdCA9IGZhbHNlOwor CisJLyoKKwkgKiBIYXJkd2FyZSBzdWJtaXNzaW9uIGlzIHRocm91Z2ggMiBwb3J0cy4gQ29uY2Vw dHVhbGx5IGVhY2ggcG9ydAorCSAqIGhhcyBhIChSSU5HX1NUQVJULCBSSU5HX0hFQUQsIFJJTkdf VEFJTCkgdHVwbGUuIFJJTkdfU1RBUlQgaXMKKwkgKiBzdGF0aWMgZm9yIGEgY29udGV4dCwgYW5k IHVuaXF1ZSB0byBlYWNoLCBzbyB3ZSBvbmx5IGV4ZWN1dGUKKwkgKiByZXF1ZXN0cyBiZWxvbmdp bmcgdG8gYSBzaW5nbGUgY29udGV4dCBmcm9tIGVhY2ggcmluZy4gUklOR19IRUFECisJICogaXMg bWFpbnRhaW5lZCBieSB0aGUgQ1MgaW4gdGhlIGNvbnRleHQgaW1hZ2UsIGl0IG1hcmtzIHRoZSBw bGFjZQorCSAqIHdoZXJlIGl0IGdvdCB1cCB0byBsYXN0IHRpbWUsIGFuZCB0aHJvdWdoIFJJTkdf VEFJTCB3ZSB0ZWxsIHRoZSBDUworCSAqIHdoZXJlIHdlIHdhbnQgdG8gZXhlY3V0ZSB1cCB0byB0 aGlzIHRpbWUuCisJICoKKwkgKiBJbiB0aGlzIGxpc3QgdGhlIHJlcXVlc3RzIGFyZSBpbiBvcmRl ciBvZiBleGVjdXRpb24uIENvbnNlY3V0aXZlCisJICogcmVxdWVzdHMgZnJvbSB0aGUgc2FtZSBj b250ZXh0IGFyZSBhZGphY2VudCBpbiB0aGUgcmluZ2J1ZmZlci4gV2UKKwkgKiBjYW4gY29tYmlu ZSB0aGVzZSByZXF1ZXN0cyBpbnRvIGEgc2luZ2xlIFJJTkdfVEFJTCB1cGRhdGU6CisJICoKKwkg KiAgICAgICAgICAgICAgUklOR19IRUFELi4ucmVxMS4uLnJlcTIKKwkgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF4tIFJJTkdfVEFJTAorCSAqIHNpbmNlIHRvIGV4ZWN1dGUg cmVxMiB0aGUgQ1MgbXVzdCBmaXJzdCBleGVjdXRlIHJlcTEuCisJICoKKwkgKiBPdXIgZ29hbCB0 aGVuIGlzIHRvIHBvaW50IGVhY2ggcG9ydCB0byB0aGUgZW5kIG9mIGEgY29uc2VjdXRpdmUKKwkg KiBzZXF1ZW5jZSBvZiByZXF1ZXN0cyBhcyBiZWluZyB0aGUgbW9zdCBvcHRpbWFsIChmZXdlc3Qg d2FrZSB1cHMKKwkgKiBhbmQgY29udGV4dCBzd2l0Y2hlcykgc3VibWlzc2lvbi4KKwkgKi8KKwor CWZvciAocmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCk7IHJiOyApIHsK KwkJc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZSA9CisJCQlyYl9lbnRyeShyYiwgdHlw ZW9mKCp2ZSksIG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKKwkJc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEgPSBSRUFEX09OQ0UodmUtPnJlcXVlc3QpOworCisJCWlmICghcnEpIHsgLyogbGF6aWx5IGNs ZWFudXAgYWZ0ZXIgYW5vdGhlciBlbmdpbmUgaGFuZGxlZCBycSAqLworCQkJcmJfZXJhc2VfY2Fj aGVkKHJiLCAmZXhlY2xpc3RzLT52aXJ0dWFsKTsKKwkJCVJCX0NMRUFSX05PREUocmIpOworCQkJ cmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCk7CisJCQljb250aW51ZTsK KwkJfQorCisJCWlmICghdmlydHVhbF9tYXRjaGVzKHZlLCBycSwgZW5naW5lKSkgeworCQkJcmIg PSByYl9uZXh0KHJiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJLyoK KwkgKiBJZiB0aGUgcXVldWUgaXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIGxhc3QKKwkgKiBy ZXF1ZXN0IGluIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbnRleHQsIHN1Ym1pdCBhZnJlc2guCisJ ICogV2Ugd2lsbCByZXN1Ym1pdCBhZ2FpbiBhZnRlcndhcmRzIGluIGNhc2Ugd2UgbmVlZCB0byBz cGxpdAorCSAqIHRoZSBhY3RpdmUgY29udGV4dCB0byBpbnRlcmplY3QgdGhlIHByZWVtcHRpb24g cmVxdWVzdCwKKwkgKiBpLmUuIHdlIHdpbGwgcmV0cmlnZ2VyIHByZWVtcHRpb24gZm9sbG93aW5n IHRoZSBhY2sgaW4gY2FzZQorCSAqIG9mIHRyb3VibGUuCisJICovCisJbGFzdCA9IGxhc3RfYWN0 aXZlKGV4ZWNsaXN0cyk7CisJaWYgKGxhc3QpIHsKKwkJaWYgKG5lZWRfcHJlZW1wdChlbmdpbmUs IGxhc3QsIHJiKSkgeworCQkJR0VNX1RSQUNFKCIlczogcHJlZW1wdGluZyBsYXN0PSVsbHg6JWxs ZCwgcHJpbz0lZCwgaGludD0lZFxuIiwKKwkJCQkgIGVuZ2luZS0+bmFtZSwKKwkJCQkgIGxhc3Qt PmZlbmNlLmNvbnRleHQsCisJCQkJICBsYXN0LT5mZW5jZS5zZXFubywKKwkJCQkgIGxhc3QtPnNj aGVkLmF0dHIucHJpb3JpdHksCisJCQkJICBleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQp OworCQkJcmVjb3JkX3ByZWVtcHRpb24oZXhlY2xpc3RzKTsKKworCQkJLyoKKwkJCSAqIERvbid0 IGxldCB0aGUgUklOR19IRUFEIGFkdmFuY2UgcGFzdCB0aGUgYnJlYWRjcnVtYgorCQkJICogYXMg d2UgdW53aW5kIChhbmQgdW50aWwgd2UgcmVzdWJtaXQpIHNvIHRoYXQgd2UgZG8KKwkJCSAqIG5v dCBhY2NpZGVudGFsbHkgdGVsbCBpdCB0byBnbyBiYWNrd2FyZHMuCisJCQkgKi8KKwkJCXJpbmdf c2V0X3BhdXNlZChlbmdpbmUsIDEpOworCisJCQkvKgorCQkJICogTm90ZSB0aGF0IHdlIGhhdmUg bm90IHN0b3BwZWQgdGhlIEdQVSBhdCB0aGlzIHBvaW50LAorCQkJICogc28gd2UgYXJlIHVud2lu ZGluZyB0aGUgaW5jb21wbGV0ZSByZXF1ZXN0cyBhcyB0aGV5CisJCQkgKiByZW1haW4gaW5mbGln aHQgYW5kIHNvIGJ5IHRoZSB0aW1lIHdlIGRvIGNvbXBsZXRlCisJCQkgKiB0aGUgcHJlZW1wdGlv biwgc29tZSBvZiB0aGUgdW53b3VuZCByZXF1ZXN0cyBtYXkKKwkJCSAqIGNvbXBsZXRlIQorCQkJ ICovCisJCQlfX3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3RzKGVuZ2luZSk7CisKKwkJCS8qCisJ CQkgKiBJZiB3ZSBuZWVkIHRvIHJldHVybiB0byB0aGUgcHJlZW1wdGVkIGNvbnRleHQsIHdlCisJ CQkgKiBuZWVkIHRvIHNraXAgdGhlIGxpdGUtcmVzdG9yZSBhbmQgZm9yY2UgaXQgdG8KKwkJCSAq IHJlbG9hZCB0aGUgUklOR19UQUlMLiBPdGhlcndpc2UsIHRoZSBIVyBoYXMgYQorCQkJICogdGVu ZGVuY3kgdG8gaWdub3JlIHVzIHJld2luZGluZyB0aGUgVEFJTCB0byB0aGUKKwkJCSAqIGVuZCBv ZiBhbiBlYXJsaWVyIHJlcXVlc3QuCisJCQkgKi8KKwkJCWxhc3QtPmh3X2NvbnRleHQtPmxyY19k ZXNjIHw9IENUWF9ERVNDX0ZPUkNFX1JFU1RPUkU7CisJCQlsYXN0ID0gTlVMTDsKKwkJfSBlbHNl IGlmIChuZWVkX3RpbWVzbGljZShlbmdpbmUsIGxhc3QpICYmCisJCQkgICB0aW1lcl9leHBpcmVk KCZlbmdpbmUtPmV4ZWNsaXN0cy50aW1lcikpIHsKKwkJCUdFTV9UUkFDRSgiJXM6IGV4cGlyZWQg bGFzdD0lbGx4OiVsbGQsIHByaW89JWQsIGhpbnQ9JWRcbiIsCisJCQkJICBlbmdpbmUtPm5hbWUs CisJCQkJICBsYXN0LT5mZW5jZS5jb250ZXh0LAorCQkJCSAgbGFzdC0+ZmVuY2Uuc2Vxbm8sCisJ CQkJICBsYXN0LT5zY2hlZC5hdHRyLnByaW9yaXR5LAorCQkJCSAgZXhlY2xpc3RzLT5xdWV1ZV9w cmlvcml0eV9oaW50KTsKKworCQkJcmluZ19zZXRfcGF1c2VkKGVuZ2luZSwgMSk7CisJCQlkZWZl cl9hY3RpdmUoZW5naW5lKTsKKworCQkJLyoKKwkJCSAqIFVubGlrZSBmb3IgcHJlZW1wdGlvbiwg aWYgd2UgcmV3aW5kIGFuZCBjb250aW51ZQorCQkJICogZXhlY3V0aW5nIHRoZSBzYW1lIGNvbnRl eHQgYXMgcHJldmlvdXNseSBhY3RpdmUsCisJCQkgKiB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uIHdp bGwgcmVtYWluIHRoZSBzYW1lIGFuZAorCQkJICogdGhlIHRhaWwgd2lsbCBvbmx5IGFkdmFuY2Uu IFdlIGRvIG5vdCBuZWVkIHRvCisJCQkgKiBmb3JjZSBhIGZ1bGwgY29udGV4dCByZXN0b3JlLCBh cyBhIGxpdGUtcmVzdG9yZQorCQkJICogaXMgc3VmZmljaWVudCB0byByZXNhbXBsZSB0aGUgbW9u b3RvbmljIFRBSUwuCisJCQkgKgorCQkJICogSWYgd2Ugc3dpdGNoIHRvIGFueSBvdGhlciBjb250 ZXh0LCBzaW1pbGFybHkgd2UKKwkJCSAqIHdpbGwgbm90IHJld2luZCBUQUlMIG9mIGN1cnJlbnQg Y29udGV4dCwgYW5kCisJCQkgKiBub3JtYWwgc2F2ZS9yZXN0b3JlIHdpbGwgcHJlc2VydmUgc3Rh dGUgYW5kIGFsbG93CisJCQkgKiB1cyB0byBsYXRlciBjb250aW51ZSBleGVjdXRpbmcgdGhlIHNh bWUgcmVxdWVzdC4KKwkJCSAqLworCQkJbGFzdCA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQkvKgor CQkJICogT3RoZXJ3aXNlIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHJlcXVlc3QgcGVuZGluZworCQkJ ICogZm9yIGV4ZWN1dGlvbiBhZnRlciB0aGUgY3VycmVudCBvbmUsIHdlIGNhbgorCQkJICoganVz dCB3YWl0IHVudGlsIHRoZSBuZXh0IENTIGV2ZW50IGJlZm9yZQorCQkJICogcXVldWluZyBtb3Jl LiBJbiBlaXRoZXIgY2FzZSB3ZSB3aWxsIGZvcmNlIGEKKwkJCSAqIGxpdGUtcmVzdG9yZSBwcmVl bXB0aW9uIGV2ZW50LCBidXQgaWYgd2Ugd2FpdAorCQkJICogd2UgaG9wZWZ1bGx5IGNvYWxlc2Nl IHNldmVyYWwgdXBkYXRlcyBpbnRvIGEgc2luZ2xlCisJCQkgKiBzdWJtaXNzaW9uLgorCQkJICov CisJCQlpZiAoIWxpc3RfaXNfbGFzdCgmbGFzdC0+c2NoZWQubGluaywKKwkJCQkJICAmZW5naW5l LT5hY3RpdmUucmVxdWVzdHMpKSB7CisJCQkJLyoKKwkJCQkgKiBFdmVuIGlmIEVMU1BbMV0gaXMg b2NjdXBpZWQgYW5kIG5vdCB3b3J0aHkKKwkJCQkgKiBvZiB0aW1lc2xpY2VzLCBvdXIgcXVldWUg bWlnaHQgYmUuCisJCQkJICovCisJCQkJaWYgKCFleGVjbGlzdHMtPnRpbWVyLmV4cGlyZXMgJiYK KwkJCQkgICAgbmVlZF90aW1lc2xpY2UoZW5naW5lLCBsYXN0KSkKKwkJCQkJc2V0X3RpbWVyX21z KCZleGVjbGlzdHMtPnRpbWVyLAorCQkJCQkJICAgICB0aW1lc2xpY2UoZW5naW5lKSk7CisKKwkJ CQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisKKwl3aGlsZSAocmIpIHsgLyogWFhYIHZpcnR1YWwg aXMgYWx3YXlzIHRha2luZyBwcmVjZWRlbmNlICovCisJCXN0cnVjdCBpbnRlbF92aXJ0dWFsX2Vu Z2luZSAqdmUgPQorCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tlbmdpbmUtPmlk XS5yYik7CisJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOworCisJCXNwaW5fbG9jaygmdmUtPmJh c2UuYWN0aXZlLmxvY2spOworCisJCXJxID0gdmUtPnJlcXVlc3Q7CisJCWlmICh1bmxpa2VseSgh cnEpKSB7IC8qIGxvc3QgdGhlIHJhY2UgdG8gYSBzaWJsaW5nICovCisJCQlzcGluX3VubG9jaygm dmUtPmJhc2UuYWN0aXZlLmxvY2spOworCQkJcmJfZXJhc2VfY2FjaGVkKHJiLCAmZXhlY2xpc3Rz LT52aXJ0dWFsKTsKKwkJCVJCX0NMRUFSX05PREUocmIpOworCQkJcmIgPSByYl9maXJzdF9jYWNo ZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUdFTV9CVUdf T04ocnEgIT0gdmUtPnJlcXVlc3QpOworCQlHRU1fQlVHX09OKHJxLT5lbmdpbmUgIT0gJnZlLT5i YXNlKTsKKwkJR0VNX0JVR19PTihycS0+aHdfY29udGV4dCAhPSAmdmUtPmNvbnRleHQpOworCisJ CWlmIChycV9wcmlvKHJxKSA+PSBxdWV1ZV9wcmlvKGV4ZWNsaXN0cykpIHsKKwkJCWlmICghdmly dHVhbF9tYXRjaGVzKHZlLCBycSwgZW5naW5lKSkgeworCQkJCXNwaW5fdW5sb2NrKCZ2ZS0+YmFz ZS5hY3RpdmUubG9jayk7CisJCQkJcmIgPSByYl9uZXh0KHJiKTsKKwkJCQljb250aW51ZTsKKwkJ CX0KKworCQkJaWYgKGxhc3QgJiYgIWNhbl9tZXJnZV9ycShsYXN0LCBycSkpIHsKKwkJCQlzcGlu X3VubG9jaygmdmUtPmJhc2UuYWN0aXZlLmxvY2spOworCQkJCXJldHVybjsgLyogbGVhdmUgdGhp cyBmb3IgYW5vdGhlciAqLworCQkJfQorCisJCQlHRU1fVFJBQ0UoIiVzOiB2aXJ0dWFsIHJxPSVs bHg6JWxsZCVzLCBuZXcgZW5naW5lPyAlc1xuIiwKKwkJCQkgIGVuZ2luZS0+bmFtZSwKKwkJCQkg IHJxLT5mZW5jZS5jb250ZXh0LAorCQkJCSAgcnEtPmZlbmNlLnNlcW5vLAorCQkJCSAgaTkxNV9y ZXF1ZXN0X2NvbXBsZXRlZChycSkgPyAiISIgOgorCQkJCSAgaTkxNV9yZXF1ZXN0X3N0YXJ0ZWQo cnEpID8gIioiIDoKKwkJCQkgICIiLAorCQkJCSAgeWVzbm8oZW5naW5lICE9IHZlLT5zaWJsaW5n c1swXSkpOworCisJCQl2ZS0+cmVxdWVzdCA9IE5VTEw7CisJCQl2ZS0+YmFzZS5leGVjbGlzdHMu cXVldWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47CisJCQlyYl9lcmFzZV9jYWNoZWQocmIsICZl eGVjbGlzdHMtPnZpcnR1YWwpOworCQkJUkJfQ0xFQVJfTk9ERShyYik7CisKKwkJCUdFTV9CVUdf T04oIShycS0+ZXhlY3V0aW9uX21hc2sgJiBlbmdpbmUtPm1hc2spKTsKKwkJCXJxLT5lbmdpbmUg PSBlbmdpbmU7CisKKwkJCWlmIChlbmdpbmUgIT0gdmUtPnNpYmxpbmdzWzBdKSB7CisJCQkJdTMy ICpyZWdzID0gdmUtPmNvbnRleHQubHJjX3JlZ19zdGF0ZTsKKwkJCQl1bnNpZ25lZCBpbnQgbjsK KworCQkJCUdFTV9CVUdfT04oUkVBRF9PTkNFKHZlLT5jb250ZXh0LmluZmxpZ2h0KSk7CisKKwkJ CQlpZiAoIWludGVsX2VuZ2luZV9oYXNfcmVsYXRpdmVfbW1pbyhlbmdpbmUpKQorCQkJCQlpbnRl bF9scl9jb250ZXh0X3NldF9yZWdpc3Rlcl9vZmZzZXRzKHJlZ3MsCisJCQkJCQkJCQkgICAgICBl bmdpbmUpOworCisJCQkJaWYgKCFsaXN0X2VtcHR5KCZ2ZS0+Y29udGV4dC5zaWduYWxzKSkKKwkJ CQkJdmlydHVhbF94ZmVyX2JyZWFkY3J1bWJzKHZlLCBlbmdpbmUpOworCisJCQkJLyoKKwkJCQkg KiBNb3ZlIHRoZSBib3VuZCBlbmdpbmUgdG8gdGhlIHRvcCBvZiB0aGUgbGlzdAorCQkJCSAqIGZv ciBmdXR1cmUgZXhlY3V0aW9uLiBXZSB0aGVuIGtpY2sgdGhpcworCQkJCSAqIHRhc2tsZXQgZmly c3QgYmVmb3JlIGNoZWNraW5nIG90aGVycywgc28gdGhhdAorCQkJCSAqIHdlIHByZWZlcmVudGlh bGx5IHJldXNlIHRoaXMgc2V0IG9mIGJvdW5kCisJCQkJICogcmVnaXN0ZXJzLgorCQkJCSAqLwor CQkJCWZvciAobiA9IDE7IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspIHsKKwkJCQkJaWYgKHZl LT5zaWJsaW5nc1tuXSA9PSBlbmdpbmUpIHsKKwkJCQkJCXN3YXAodmUtPnNpYmxpbmdzW25dLAor CQkJCQkJICAgICB2ZS0+c2libGluZ3NbMF0pOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9 CisKKwkJCQlHRU1fQlVHX09OKHZlLT5zaWJsaW5nc1swXSAhPSBlbmdpbmUpOworCQkJfQorCisJ CQlpZiAoX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJxKSkgeworCQkJCXN1Ym1pdCA9IHRydWU7CisJ CQkJbGFzdCA9IHJxOworCQkJfQorCQkJaTkxNV9yZXF1ZXN0X3B1dChycSk7CisKKwkJCS8qCisJ CQkgKiBIbW0sIHdlIGhhdmUgYSBidW5jaCBvZiB2aXJ0dWFsIGVuZ2luZSByZXF1ZXN0cywKKwkJ CSAqIGJ1dCB0aGUgZmlyc3Qgb25lIHdhcyBhbHJlYWR5IGNvbXBsZXRlZCAodGhhbmtzCisJCQkg KiBwcmVlbXB0LXRvLWJ1c3khKS4gS2VlcCBsb29raW5nIGF0IHRoZSB2ZW5nIHF1ZXVlCisJCQkg KiB1bnRpbCB3ZSBoYXZlIG5vIG1vcmUgcmVsZXZhbnQgcmVxdWVzdHMgKGkuZS4KKwkJCSAqIHRo ZSBub3JtYWwgc3VibWl0IHF1ZXVlIGhhcyBoaWdoZXIgcHJpb3JpdHkpLgorCQkJICovCisJCQlp ZiAoIXN1Ym1pdCkgeworCQkJCXNwaW5fdW5sb2NrKCZ2ZS0+YmFzZS5hY3RpdmUubG9jayk7CisJ CQkJcmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCk7CisJCQkJY29udGlu dWU7CisJCQl9CisJCX0KKworCQlzcGluX3VubG9jaygmdmUtPmJhc2UuYWN0aXZlLmxvY2spOwor CQlicmVhazsKKwl9CisKKwl3aGlsZSAoKHJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMt PnF1ZXVlKSkpIHsKKwkJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPSB0b19wcmlvbGlzdChyYik7 CisJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqcm47CisJCWludCBpOworCisJCXByaW9saXN0 X2Zvcl9lYWNoX3JlcXVlc3RfY29uc3VtZShycSwgcm4sIHAsIGkpIHsKKwkJCWJvb2wgbWVyZ2Ug PSB0cnVlOworCisJCQkvKgorCQkJICogQ2FuIHdlIGNvbWJpbmUgdGhpcyByZXF1ZXN0IHdpdGgg dGhlIGN1cnJlbnQgcG9ydD8KKwkJCSAqIEl0IGhhcyB0byBiZSB0aGUgc2FtZSBjb250ZXh0L3Jp bmdidWZmZXIgYW5kIG5vdAorCQkJICogaGF2ZSBhbnkgZXhjZXB0aW9ucyAoZS5nLiBHVlQgc2F5 aW5nIG5ldmVyIHRvCisJCQkgKiBjb21iaW5lIGNvbnRleHRzKS4KKwkJCSAqCisJCQkgKiBJZiB3 ZSBjYW4gY29tYmluZSB0aGUgcmVxdWVzdHMsIHdlIGNhbiBleGVjdXRlIGJvdGgKKwkJCSAqIGJ5 IHVwZGF0aW5nIHRoZSBSSU5HX1RBSUwgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUKKwkJCSAq IHNlY29uZCByZXF1ZXN0LCBhbmQgc28gd2UgbmV2ZXIgbmVlZCB0byB0ZWxsIHRoZQorCQkJICog aGFyZHdhcmUgYWJvdXQgdGhlIGZpcnN0LgorCQkJICovCisJCQlpZiAobGFzdCAmJiAhY2FuX21l cmdlX3JxKGxhc3QsIHJxKSkgeworCQkJCS8qCisJCQkJICogSWYgd2UgYXJlIG9uIHRoZSBzZWNv bmQgcG9ydCBhbmQgY2Fubm90CisJCQkJICogY29tYmluZSB0aGlzIHJlcXVlc3Qgd2l0aCB0aGUg bGFzdCwgdGhlbiB3ZQorCQkJCSAqIGFyZSBkb25lLgorCQkJCSAqLworCQkJCWlmIChwb3J0ID09 IGxhc3RfcG9ydCkKKwkJCQkJZ290byBkb25lOworCisJCQkJLyoKKwkJCQkgKiBXZSBtdXN0IG5v dCBwb3B1bGF0ZSBib3RoIEVMU1BbXSB3aXRoIHRoZQorCQkJCSAqIHNhbWUgTFJDQSwgaS5lLiB3 ZSBtdXN0IHN1Ym1pdCAyIGRpZmZlcmVudAorCQkJCSAqIGNvbnRleHRzIGlmIHdlIHN1Ym1pdCAy IEVMU1AuCisJCQkJICovCisJCQkJaWYgKGxhc3QtPmh3X2NvbnRleHQgPT0gcnEtPmh3X2NvbnRl eHQpCisJCQkJCWdvdG8gZG9uZTsKKworCQkJCWlmIChpOTE1X3JlcXVlc3RfaGFzX3NlbnRpbmVs KGxhc3QpKQorCQkJCQlnb3RvIGRvbmU7CisKKwkJCQkvKgorCQkJCSAqIElmIEdWVCBvdmVycmlk ZXMgdXMgd2Ugb25seSBldmVyIHN1Ym1pdAorCQkJCSAqIHBvcnRbMF0sIGxlYXZpbmcgcG9ydFsx XSBlbXB0eS4gTm90ZSB0aGF0IHdlCisJCQkJICogYWxzbyBoYXZlIHRvIGJlIGNhcmVmdWwgdGhh dCB3ZSBkb24ndCBxdWV1ZQorCQkJCSAqIHRoZSBzYW1lIGNvbnRleHQgKGV2ZW4gdGhvdWdoIGEg ZGlmZmVyZW50CisJCQkJICogcmVxdWVzdCkgdG8gdGhlIHNlY29uZCBwb3J0LgorCQkJCSAqLwor CQkJCWlmIChjdHhfc2luZ2xlX3BvcnRfc3VibWlzc2lvbihsYXN0LT5od19jb250ZXh0KSB8fAor CQkJCSAgICBjdHhfc2luZ2xlX3BvcnRfc3VibWlzc2lvbihycS0+aHdfY29udGV4dCkpCisJCQkJ CWdvdG8gZG9uZTsKKworCQkJCW1lcmdlID0gZmFsc2U7CisJCQl9CisKKwkJCWlmIChfX2k5MTVf cmVxdWVzdF9zdWJtaXQocnEpKSB7CisJCQkJaWYgKCFtZXJnZSkgeworCQkJCQkqcG9ydCA9IGV4 ZWNsaXN0c19zY2hlZHVsZV9pbihsYXN0LCBwb3J0IC0gZXhlY2xpc3RzLT5wZW5kaW5nKTsKKwkJ CQkJcG9ydCsrOworCQkJCQlsYXN0ID0gTlVMTDsKKwkJCQl9CisKKwkJCQlHRU1fQlVHX09OKGxh c3QgJiYKKwkJCQkJICAgIWNhbl9tZXJnZV9jdHgobGFzdC0+aHdfY29udGV4dCwKKwkJCQkJCQkg IHJxLT5od19jb250ZXh0KSk7CisKKwkJCQlzdWJtaXQgPSB0cnVlOworCQkJCWxhc3QgPSBycTsK KwkJCX0KKwkJfQorCisJCXJiX2VyYXNlX2NhY2hlZCgmcC0+bm9kZSwgJmV4ZWNsaXN0cy0+cXVl dWUpOworCQlpOTE1X3ByaW9saXN0X2ZyZWUocCk7CisJfQorCitkb25lOgorCS8qCisJICogSGVy ZSBiZSBhIGJpdCBvZiBtYWdpYyEgT3Igc2xlaWdodC1vZi1oYW5kLCB3aGljaGV2ZXIgeW91IHBy ZWZlci4KKwkgKgorCSAqIFdlIGNob29zZSB0aGUgcHJpb3JpdHkgaGludCBzdWNoIHRoYXQgaWYg d2UgYWRkIGEgcmVxdWVzdCBvZiBncmVhdGVyCisJICogcHJpb3JpdHkgdGhhbiB0aGlzLCB3ZSBr aWNrIHRoZSBzdWJtaXNzaW9uIHRhc2tsZXQgdG8gZGVjaWRlIG9uCisJICogdGhlIHJpZ2h0IG9y ZGVyIG9mIHN1Ym1pdHRpbmcgdGhlIHJlcXVlc3RzIHRvIGhhcmR3YXJlLiBXZSBtdXN0CisJICog YWxzbyBiZSBwcmVwYXJlZCB0byByZW9yZGVyIHJlcXVlc3RzIGFzIHRoZXkgYXJlIGluLWZsaWdo dCBvbiB0aGUKKwkgKiBIVy4gV2UgZGVyaXZlIHRoZSBwcmlvcml0eSBoaW50IHRoZW4gYXMgdGhl IGZpcnN0ICJob2xlIiBpbgorCSAqIHRoZSBIVyBzdWJtaXNzaW9uIHBvcnRzIGFuZCBpZiB0aGVy ZSBhcmUgbm8gYXZhaWxhYmxlIHNsb3RzLAorCSAqIHRoZSBwcmlvcml0eSBvZiB0aGUgbG93ZXN0 IGV4ZWN1dGluZyByZXF1ZXN0LCBpLmUuIGxhc3QuCisJICoKKwkgKiBXaGVuIHdlIGRvIHJlY2Vp dmUgYSBoaWdoZXIgcHJpb3JpdHkgcmVxdWVzdCByZWFkeSB0byBydW4gZnJvbSB0aGUKKwkgKiB1 c2VyLCBzZWUgcXVldWVfcmVxdWVzdCgpLCB0aGUgcHJpb3JpdHkgaGludCBpcyBidW1wZWQgdG8g dGhhdAorCSAqIHJlcXVlc3QgdHJpZ2dlcmluZyBwcmVlbXB0aW9uIG9uIHRoZSBuZXh0IGRlcXVl dWUgKG9yIHN1YnNlcXVlbnQKKwkgKiBpbnRlcnJ1cHQgZm9yIHNlY29uZGFyeSBwb3J0cykuCisJ ICovCisJZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0gcXVldWVfcHJpbyhleGVjbGlz dHMpOworCUdFTV9UUkFDRSgiJXM6IHF1ZXVlX3ByaW9yaXR5X2hpbnQ6JWQsIHN1Ym1pdDolc1xu IiwKKwkJICBlbmdpbmUtPm5hbWUsIGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCwKKwkJ ICB5ZXNubyhzdWJtaXQpKTsKKworCWlmIChzdWJtaXQpIHsKKwkJKnBvcnQgPSBleGVjbGlzdHNf c2NoZWR1bGVfaW4obGFzdCwgcG9ydCAtIGV4ZWNsaXN0cy0+cGVuZGluZyk7CisJCWV4ZWNsaXN0 cy0+c3dpdGNoX3ByaW9yaXR5X2hpbnQgPQorCQkJc3dpdGNoX3ByaW8oZW5naW5lLCAqZXhlY2xp c3RzLT5wZW5kaW5nKTsKKworCQkvKgorCQkgKiBTa2lwIGlmIHdlIGVuZGVkIHVwIHdpdGggZXhh Y3RseSB0aGUgc2FtZSBzZXQgb2YgcmVxdWVzdHMsCisJCSAqIGUuZy4gdHJ5aW5nIHRvIHRpbWVz bGljZSBhIHBhaXIgb2Ygb3JkZXJlZCBjb250ZXh0cworCQkgKi8KKwkJaWYgKCFtZW1jbXAoZXhl Y2xpc3RzLT5hY3RpdmUsIGV4ZWNsaXN0cy0+cGVuZGluZywKKwkJCSAgICAocG9ydCAtIGV4ZWNs aXN0cy0+cGVuZGluZyArIDEpICogc2l6ZW9mKCpwb3J0KSkpIHsKKwkJCWRvCisJCQkJZXhlY2xp c3RzX3NjaGVkdWxlX291dChmZXRjaF9hbmRfemVybyhwb3J0KSk7CisJCQl3aGlsZSAocG9ydC0t ICE9IGV4ZWNsaXN0cy0+cGVuZGluZyk7CisKKwkJCWdvdG8gc2tpcF9zdWJtaXQ7CisJCX0KKwor CQltZW1zZXQocG9ydCArIDEsIDAsIChsYXN0X3BvcnQgLSBwb3J0KSAqIHNpemVvZigqcG9ydCkp OworCQlleGVjbGlzdHNfc3VibWl0X3BvcnRzKGVuZ2luZSk7CisKKwkJc2V0X3ByZWVtcHRfdGlt ZW91dChlbmdpbmUpOworCX0gZWxzZSB7Citza2lwX3N1Ym1pdDoKKwkJcmluZ19zZXRfcGF1c2Vk KGVuZ2luZSwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorY2FuY2VsX3BvcnRfcmVxdWVzdHMo c3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMpCit7CisJc3Ry dWN0IGk5MTVfcmVxdWVzdCAqIGNvbnN0ICpwb3J0OworCisJZm9yIChwb3J0ID0gZXhlY2xpc3Rz LT5wZW5kaW5nOyAqcG9ydDsgcG9ydCsrKQorCQlleGVjbGlzdHNfc2NoZWR1bGVfb3V0KCpwb3J0 KTsKKwltZW1zZXQoZXhlY2xpc3RzLT5wZW5kaW5nLCAwLCBzaXplb2YoZXhlY2xpc3RzLT5wZW5k aW5nKSk7CisKKwkvKiBNYXJrIHRoZSBlbmQgb2YgYWN0aXZlIGJlZm9yZSB3ZSBvdmVyd3JpdGUg KmFjdGl2ZSAqLworCWZvciAocG9ydCA9IHhjaGcoJmV4ZWNsaXN0cy0+YWN0aXZlLCBleGVjbGlz dHMtPnBlbmRpbmcpOyAqcG9ydDsgcG9ydCsrKQorCQlleGVjbGlzdHNfc2NoZWR1bGVfb3V0KCpw b3J0KTsKKwlXUklURV9PTkNFKGV4ZWNsaXN0cy0+YWN0aXZlLAorCQkgICBtZW1zZXQoZXhlY2xp c3RzLT5pbmZsaWdodCwgMCwgc2l6ZW9mKGV4ZWNsaXN0cy0+aW5mbGlnaHQpKSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZAoraW52YWxpZGF0ZV9jc2JfZW50cmllcyhjb25zdCB1MzIgKmZpcnN0 LCBjb25zdCB1MzIgKmxhc3QpCit7CisJY2xmbHVzaCgodm9pZCAqKWZpcnN0KTsKKwljbGZsdXNo KCh2b2lkICopbGFzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorcmVzZXRfaW5fcHJvZ3Jl c3MoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cykKK3sKKwly ZXR1cm4gdW5saWtlbHkoIV9fdGFza2xldF9pc19lbmFibGVkKCZleGVjbGlzdHMtPnRhc2tsZXQp KTsKK30KKworLyoKKyAqIFN0YXJ0aW5nIHdpdGggR2VuMTIsIHRoZSBzdGF0dXMgaGFzIGEgbmV3 IGZvcm1hdDoKKyAqCisgKiAgICAgYml0ICAwOiAgICAgc3dpdGNoZWQgdG8gbmV3IHF1ZXVlCisg KiAgICAgYml0ICAxOiAgICAgcmVzZXJ2ZWQKKyAqICAgICBiaXQgIDI6ICAgICBzZW1hcGhvcmUg d2FpdCBtb2RlIChwb2xsIG9yIHNpZ25hbCksIG9ubHkgdmFsaWQgd2hlbgorICogICAgICAgICAg ICAgICAgIHN3aXRjaCBkZXRhaWwgaXMgc2V0IHRvICJ3YWl0IG9uIHNlbWFwaG9yZSIKKyAqICAg ICBiaXRzIDMtNTogICBlbmdpbmUgY2xhc3MKKyAqICAgICBiaXRzIDYtMTE6ICBlbmdpbmUgaW5z dGFuY2UKKyAqICAgICBiaXRzIDEyLTE0OiByZXNlcnZlZAorICogICAgIGJpdHMgMTUtMjU6IHN3 IGNvbnRleHQgaWQgb2YgdGhlIGxyYyB0aGUgR1Qgc3dpdGNoZWQgdG8KKyAqICAgICBiaXRzIDI2 LTMxOiBzdyBjb3VudGVyIG9mIHRoZSBscmMgdGhlIEdUIHN3aXRjaGVkIHRvCisgKiAgICAgYml0 cyAzMi0zNTogY29udGV4dCBzd2l0Y2ggZGV0YWlsCisgKiAgICAgICAgICAgICAgICAgIC0gMDog Y3R4IGNvbXBsZXRlCisgKiAgICAgICAgICAgICAgICAgIC0gMTogd2FpdCBvbiBzeW5jIGZsaXAK KyAqICAgICAgICAgICAgICAgICAgLSAyOiB3YWl0IG9uIHZibGFuaworICogICAgICAgICAgICAg ICAgICAtIDM6IHdhaXQgb24gc2NhbmxpbmUKKyAqICAgICAgICAgICAgICAgICAgLSA0OiB3YWl0 IG9uIHNlbWFwaG9yZQorICogICAgICAgICAgICAgICAgICAtIDU6IGNvbnRleHQgcHJlZW1wdGVk IChub3Qgb24gU0VNQVBIT1JFX1dBSVQgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICBXQUlU X0ZPUl9FVkVOVCkKKyAqICAgICBiaXQgIDM2OiAgICByZXNlcnZlZAorICogICAgIGJpdHMgMzct NDM6IHdhaXQgZGV0YWlsIChmb3Igc3dpdGNoIGRldGFpbCAxIHRvIDQpCisgKiAgICAgYml0cyA0 NC00NjogcmVzZXJ2ZWQKKyAqICAgICBiaXRzIDQ3LTU3OiBzdyBjb250ZXh0IGlkIG9mIHRoZSBs cmMgdGhlIEdUIHN3aXRjaGVkIGF3YXkgZnJvbQorICogICAgIGJpdHMgNTgtNjM6IHN3IGNvdW50 ZXIgb2YgdGhlIGxyYyB0aGUgR1Qgc3dpdGNoZWQgYXdheSBmcm9tCisgKi8KK3N0YXRpYyBpbmxp bmUgYm9vbAorZ2VuMTJfY3NiX3BhcnNlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xp c3RzICpleGVjbGlzdHMsIGNvbnN0IHUzMiAqY3NiKQoreworCXUzMiBsb3dlcl9kdyA9IGNzYlsw XTsKKwl1MzIgdXBwZXJfZHcgPSBjc2JbMV07CisJYm9vbCBjdHhfdG9fdmFsaWQgPSBHRU4xMl9D U0JfQ1RYX1ZBTElEKGxvd2VyX2R3KTsKKwlib29sIGN0eF9hd2F5X3ZhbGlkID0gR0VOMTJfQ1NC X0NUWF9WQUxJRCh1cHBlcl9kdyk7CisJYm9vbCBuZXdfcXVldWUgPSBsb3dlcl9kdyAmIEdFTjEy X0NUWF9TVEFUVVNfU1dJVENIRURfVE9fTkVXX1FVRVVFOworCisJLyoKKwkgKiBUaGUgY29udGV4 dCBzd2l0Y2ggZGV0YWlsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIDUgd2hlbiBhIHByZWVtcHRp b24KKwkgKiBvY2N1cnMsIHNvIHdlIGNhbid0IGp1c3QgY2hlY2sgZm9yIHRoYXQuIFRoZSBjaGVj ayBiZWxvdyB3b3JrcyBmb3IKKwkgKiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQsIGluY2x1 ZGluZyBwcmVlbXB0aW9ucyBvZiBXQUlUCisJICogaW5zdHJ1Y3Rpb25zIGFuZCBsaXRlLXJlc3Rv cmUuIFByZWVtcHQtdG8taWRsZSB2aWEgdGhlIENUUkwgcmVnaXN0ZXIKKwkgKiB3b3VsZCByZXF1 aXJlIHNvbWUgZXh0cmEgaGFuZGxpbmcsIGJ1dCB3ZSBkb24ndCBzdXBwb3J0IHRoYXQuCisJICov CisJaWYgKCFjdHhfYXdheV92YWxpZCB8fCBuZXdfcXVldWUpIHsKKwkJR0VNX0JVR19PTighY3R4 X3RvX3ZhbGlkKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBzd2l0Y2ggZGV0YWls ID0gNSBpcyBjb3ZlcmVkIGJ5IHRoZSBjYXNlIGFib3ZlIGFuZCB3ZSBkbyBub3QgZXhwZWN0IGEK KwkgKiBjb250ZXh0IHN3aXRjaCBvbiBhbiB1bnN1Y2Nlc3NmdWwgd2FpdCBpbnN0cnVjdGlvbiBz aW5jZSB3ZSBhbHdheXMKKwkgKiB1c2UgcG9sbGluZyBtb2RlLgorCSAqLworCUdFTV9CVUdfT04o R0VOMTJfQ1RYX1NXSVRDSF9ERVRBSUwodXBwZXJfZHcpKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisK K3N0YXRpYyBpbmxpbmUgYm9vbAorZ2VuOF9jc2JfcGFyc2UoY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cywgY29uc3QgdTMyICpjc2IpCit7CisJcmV0dXJuICpj c2IgJiAoR0VOOF9DVFhfU1RBVFVTX0lETEVfQUNUSVZFIHwgR0VOOF9DVFhfU1RBVFVTX1BSRUVN UFRFRCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY3NiKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4 ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKKwljb25zdCB1MzIgKiBjb25zdCBidWYgPSBl eGVjbGlzdHMtPmNzYl9zdGF0dXM7CisJY29uc3QgdTggbnVtX2VudHJpZXMgPSBleGVjbGlzdHMt PmNzYl9zaXplOworCXU4IGhlYWQsIHRhaWw7CisKKwkvKgorCSAqIEFzIHdlIG1vZGlmeSBvdXIg ZXhlY2xpc3RzIHN0YXRlIHRyYWNraW5nIHdlIHJlcXVpcmUgZXhjbHVzaXZlCisJICogYWNjZXNz LiBFaXRoZXIgd2UgYXJlIGluc2lkZSB0aGUgdGFza2xldCwgb3IgdGhlIHRhc2tsZXQgaXMgZGlz YWJsZWQKKwkgKiBhbmQgd2UgYXNzdW1lIHRoYXQgaXMgb25seSBpbnNpZGUgdGhlIHJlc2V0IHBh dGhzIGFuZCBzbyBzZXJpYWxpc2VkLgorCSAqLworCUdFTV9CVUdfT04oIXRhc2tsZXRfaXNfbG9j a2VkKCZleGVjbGlzdHMtPnRhc2tsZXQpICYmCisJCSAgICFyZXNldF9pbl9wcm9ncmVzcyhleGVj bGlzdHMpKTsKKwlHRU1fQlVHX09OKCFpbnRlbF9lbmdpbmVfaW5fZXhlY2xpc3RzX3N1Ym1pc3Np b25fbW9kZShlbmdpbmUpKTsKKworCS8qCisJICogTm90ZSB0aGF0IGNzYl93cml0ZSwgY3NiX3N0 YXR1cyBtYXkgYmUgZWl0aGVyIGluIEhXU1Agb3IgbW1pby4KKwkgKiBXaGVuIHJlYWRpbmcgZnJv bSB0aGUgY3NiX3dyaXRlIG1taW8gcmVnaXN0ZXIsIHdlIGhhdmUgdG8gYmUKKwkgKiBjYXJlZnVs IHRvIG9ubHkgdXNlIHRoZSBHRU44X0NTQl9XUklURV9QVFIgcG9ydGlvbiwgd2hpY2ggaXMKKwkg KiB0aGUgbG93IDRiaXRzLiBBcyBpdCBoYXBwZW5zIHdlIGtub3cgdGhlIG5leHQgNGJpdHMgYXJl IGFsd2F5cworCSAqIHplcm8gYW5kIHNvIHdlIGNhbiBzaW1wbHkgbWFza2VkIG9mZiB0aGUgbG93 IHU4IG9mIHRoZSByZWdpc3RlcgorCSAqIGFuZCB0cmVhdCBpdCBpZGVudGljYWxseSB0byByZWFk aW5nIGZyb20gdGhlIEhXU1AgKHdpdGhvdXQgaGF2aW5nCisJICogdG8gdXNlIGV4cGxpY2l0IHNo aWZ0aW5nIGFuZCBtYXNraW5nLCBhbmQgcHJvYmFibHkgYmlmdXJjYXRpbmcKKwkgKiB0aGUgY29k ZSB0byBoYW5kbGUgdGhlIGxlZ2FjeSBtbWlvIHJlYWQpLgorCSAqLworCWhlYWQgPSBleGVjbGlz dHMtPmNzYl9oZWFkOworCXRhaWwgPSBSRUFEX09OQ0UoKmV4ZWNsaXN0cy0+Y3NiX3dyaXRlKTsK KwlHRU1fVFJBQ0UoIiVzIGNzLWlycSBoZWFkPSVkLCB0YWlsPSVkXG4iLCBlbmdpbmUtPm5hbWUs IGhlYWQsIHRhaWwpOworCWlmICh1bmxpa2VseShoZWFkID09IHRhaWwpKQorCQlyZXR1cm47CisK KwkvKgorCSAqIEhvcGVmdWxseSBwYWlyZWQgd2l0aCBhIHdtYigpIGluIEhXIQorCSAqCisJICog V2UgbXVzdCBjb21wbGV0ZSB0aGUgcmVhZCBvZiB0aGUgd3JpdGUgcG9pbnRlciBiZWZvcmUgYW55 IHJlYWRzCisJICogZnJvbSB0aGUgQ1NCLCBzbyB0aGF0IHdlIGRvIG5vdCBzZWUgc3RhbGUgdmFs dWVzLiBXaXRob3V0IGFuIHJtYgorCSAqIChsZmVuY2UpIHRoZSBIVyBtYXkgc3BlY3VsYXRpdmVs eSBwZXJmb3JtIHRoZSBDU0JbXSByZWFkcyAqYmVmb3JlKgorCSAqIHdlIHBlcmZvcm0gdGhlIFJF QURfT05DRSgqY3NiX3dyaXRlKS4KKwkgKi8KKwlybWIoKTsKKworCWRvIHsKKwkJYm9vbCBwcm9t b3RlOworCisJCWlmICgrK2hlYWQgPT0gbnVtX2VudHJpZXMpCisJCQloZWFkID0gMDsKKworCQkv KgorCQkgKiBXZSBhcmUgZmx5aW5nIG5lYXIgZHJhZ29ucyBhZ2Fpbi4KKwkJICoKKwkJICogV2Ug aG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdCBpbiBleGVjbGlzdF9wb3J0W10KKwkJICog YnV0IG5vIG1vcmUgdGhhbiB0aGF0LiBXZSBhcmUgb3BlcmF0aW5nIGluIHNvZnRpcnEKKwkJICog Y29udGV4dCBhbmQgc28gY2Fubm90IGhvbGQgYW55IG11dGV4IG9yIHNsZWVwLiBUaGF0CisJCSAq IHByZXZlbnRzIHVzIHN0b3BwaW5nIHRoZSByZXF1ZXN0cyB3ZSBhcmUgcHJvY2Vzc2luZworCQkg KiBpbiBwb3J0W10gZnJvbSBiZWluZyByZXRpcmVkIHNpbXVsdGFuZW91c2x5ICh0aGUKKwkJICog YnJlYWRjcnVtYiB3aWxsIGJlIGNvbXBsZXRlIGJlZm9yZSB3ZSBzZWUgdGhlCisJCSAqIGNvbnRl eHQtc3dpdGNoKS4gQXMgd2Ugb25seSBob2xkIHRoZSByZWZlcmVuY2UgdG8gdGhlCisJCSAqIHJl cXVlc3QsIGFueSBwb2ludGVyIGNoYXNpbmcgdW5kZXJuZWF0aCB0aGUgcmVxdWVzdAorCQkgKiBp cyBzdWJqZWN0IHRvIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlLiBUaHVzIHdlCisJCSAqIHN0 b3JlIGFsbCBvZiB0aGUgYm9va2tlZXBpbmcgd2l0aGluIHBvcnRbXSBhcworCQkgKiByZXF1aXJl ZCwgYW5kIGF2b2lkIHVzaW5nIHVuZ3VhcmRlZCBwb2ludGVycyBiZW5lYXRoCisJCSAqIHJlcXVl c3QgaXRzZWxmLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBhdG9taWMKKwkJICogc3RhdHVzIG5v dGlmaWVyLgorCQkgKi8KKworCQlHRU1fVFJBQ0UoIiVzIGNzYlslZF06IHN0YXR1cz0weCUwOHg6 MHglMDh4XG4iLAorCQkJICBlbmdpbmUtPm5hbWUsIGhlYWQsCisJCQkgIGJ1ZlsyICogaGVhZCAr IDBdLCBidWZbMiAqIGhlYWQgKyAxXSk7CisKKwkJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUp ID49IDEyKQorCQkJcHJvbW90ZSA9IGdlbjEyX2NzYl9wYXJzZShleGVjbGlzdHMsIGJ1ZiArIDIg KiBoZWFkKTsKKwkJZWxzZQorCQkJcHJvbW90ZSA9IGdlbjhfY3NiX3BhcnNlKGV4ZWNsaXN0cywg YnVmICsgMiAqIGhlYWQpOworCQlpZiAocHJvbW90ZSkgeworCQkJc3RydWN0IGk5MTVfcmVxdWVz dCAqIGNvbnN0ICpvbGQgPSBleGVjbGlzdHMtPmFjdGl2ZTsKKworCQkJLyogUG9pbnQgYWN0aXZl IHRvIHRoZSBuZXcgRUxTUDsgcHJldmVudCBvdmVyd3JpdGluZyAqLworCQkJV1JJVEVfT05DRShl eGVjbGlzdHMtPmFjdGl2ZSwgZXhlY2xpc3RzLT5wZW5kaW5nKTsKKwkJCXNldF90aW1lc2xpY2Uo ZW5naW5lKTsKKworCQkJaWYgKCFpbmplY3RfcHJlZW1wdF9oYW5nKGV4ZWNsaXN0cykpCisJCQkJ cmluZ19zZXRfcGF1c2VkKGVuZ2luZSwgMCk7CisKKwkJCS8qIGNhbmNlbCBvbGQgaW5mbGlnaHQs IHByZXBhcmUgZm9yIHN3aXRjaCAqLworCQkJdHJhY2VfcG9ydHMoZXhlY2xpc3RzLCAicHJlZW1w dGVkIiwgb2xkKTsKKwkJCXdoaWxlICgqb2xkKQorCQkJCWV4ZWNsaXN0c19zY2hlZHVsZV9vdXQo Km9sZCsrKTsKKworCQkJLyogc3dpdGNoIHBlbmRpbmcgdG8gaW5mbGlnaHQgKi8KKwkJCUdFTV9C VUdfT04oIWFzc2VydF9wZW5kaW5nX3ZhbGlkKGV4ZWNsaXN0cywgInByb21vdGUiKSk7CisJCQlX UklURV9PTkNFKGV4ZWNsaXN0cy0+YWN0aXZlLAorCQkJCSAgIG1lbWNweShleGVjbGlzdHMtPmlu ZmxpZ2h0LAorCQkJCQkgIGV4ZWNsaXN0cy0+cGVuZGluZywKKwkJCQkJICBleGVjbGlzdHNfbnVt X3BvcnRzKGV4ZWNsaXN0cykgKgorCQkJCQkgIHNpemVvZigqZXhlY2xpc3RzLT5wZW5kaW5nKSkp OworCisJCQlXUklURV9PTkNFKGV4ZWNsaXN0cy0+cGVuZGluZ1swXSwgTlVMTCk7CisJCX0gZWxz ZSB7CisJCQlHRU1fQlVHX09OKCEqZXhlY2xpc3RzLT5hY3RpdmUpOworCisJCQkvKiBwb3J0MCBj b21wbGV0ZWQsIGFkdmFuY2VkIHRvIHBvcnQxICovCisJCQl0cmFjZV9wb3J0cyhleGVjbGlzdHMs ICJjb21wbGV0ZWQiLCBleGVjbGlzdHMtPmFjdGl2ZSk7CisKKwkJCS8qCisJCQkgKiBXZSByZWx5 IG9uIHRoZSBoYXJkd2FyZSBiZWluZyBzdHJvbmdseQorCQkJICogb3JkZXJlZCwgdGhhdCB0aGUg YnJlYWRjcnVtYiB3cml0ZSBpcworCQkJICogY29oZXJlbnQgKHZpc2libGUgZnJvbSB0aGUgQ1BV KSBiZWZvcmUgdGhlCisJCQkgKiB1c2VyIGludGVycnVwdCBhbmQgQ1NCIGlzIHByb2Nlc3NlZC4K KwkJCSAqLworCQkJR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZCgqZXhlY2xpc3Rz LT5hY3RpdmUpICYmCisJCQkJICAgIXJlc2V0X2luX3Byb2dyZXNzKGV4ZWNsaXN0cykpOworCQkJ ZXhlY2xpc3RzX3NjaGVkdWxlX291dCgqZXhlY2xpc3RzLT5hY3RpdmUrKyk7CisKKwkJCUdFTV9C VUdfT04oZXhlY2xpc3RzLT5hY3RpdmUgLSBleGVjbGlzdHMtPmluZmxpZ2h0ID4KKwkJCQkgICBl eGVjbGlzdHNfbnVtX3BvcnRzKGV4ZWNsaXN0cykpOworCQl9CisJfSB3aGlsZSAoaGVhZCAhPSB0 YWlsKTsKKworCWV4ZWNsaXN0cy0+Y3NiX2hlYWQgPSBoZWFkOworCisJLyoKKwkgKiBHZW4xMSBo YXMgcHJvdmVuIHRvIGZhaWwgd3J0IGdsb2JhbCBvYnNlcnZhdGlvbiBwb2ludCBiZXR3ZWVuCisJ ICogZW50cnkgYW5kIHRhaWwgdXBkYXRlLCBmYWlsaW5nIG9uIHRoZSBvcmRlcmluZyBhbmQgdGh1 cworCSAqIHdlIHNlZSBhbiBvbGQgZW50cnkgaW4gdGhlIGNvbnRleHQgc3RhdHVzIGJ1ZmZlci4K KwkgKgorCSAqIEZvcmNpYmx5IGV2aWN0IG91dCBlbnRyaWVzIGZvciB0aGUgbmV4dCBncHUgY3Ni IHVwZGF0ZSwKKwkgKiB0byBpbmNyZWFzZSB0aGUgb2RkcyB0aGF0IHdlIGdldCBhIGZyZXNoIGVu dHJpZXMgd2l0aCBub24KKwkgKiB3b3JraW5nIGhhcmR3YXJlLiBUaGUgY29zdCBmb3IgZG9pbmcg c28gY29tZXMgb3V0IG1vc3RseSB3aXRoCisJICogdGhlIHdhc2ggYXMgaGFyZHdhcmUsIHdvcmtp bmcgb3Igbm90LCB3aWxsIG5lZWQgdG8gZG8gdGhlCisJICogaW52YWxpZGF0aW9uIGJlZm9yZS4K KwkgKi8KKwlpbnZhbGlkYXRlX2NzYl9lbnRyaWVzKCZidWZbMF0sICZidWZbbnVtX2VudHJpZXMg LSAxXSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhlY2xpc3RzX3N1Ym1pc3Npb25fdGFza2xldChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpjb25zdCBlbmdpbmUpCit7CisJbG9ja2RlcF9hc3NlcnRf aGVsZCgmZW5naW5lLT5hY3RpdmUubG9jayk7CisJaWYgKCFlbmdpbmUtPmV4ZWNsaXN0cy5wZW5k aW5nWzBdKSB7CisJCXJjdV9yZWFkX2xvY2soKTsgLyogcHJvdGVjdCBwZWVraW5nIGF0IGV4ZWNs aXN0cy0+YWN0aXZlICovCisJCWV4ZWNsaXN0c19kZXF1ZXVlKGVuZ2luZSk7CisJCXJjdV9yZWFk X3VubG9jaygpOworCX0KK30KKworc3RhdGljIG5vaW5saW5lIHZvaWQgcHJlZW1wdF9yZXNldChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJY29uc3QgdW5zaWduZWQgaW50IGJp dCA9IEk5MTVfUkVTRVRfRU5HSU5FICsgZW5naW5lLT5pZDsKKwl1bnNpZ25lZCBsb25nICpsb2Nr ID0gJmVuZ2luZS0+Z3QtPnJlc2V0LmZsYWdzOworCisJaWYgKGk5MTVfbW9kcGFyYW1zLnJlc2V0 IDwgMykKKwkJcmV0dXJuOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoYml0LCBsb2NrKSkKKwkJ cmV0dXJuOworCisJLyogTWFyayB0aGlzIHRhc2tsZXQgYXMgZGlzYWJsZWQgdG8gYXZvaWQgd2Fp dGluZyBmb3IgaXQgdG8gY29tcGxldGUgKi8KKwl0YXNrbGV0X2Rpc2FibGVfbm9zeW5jKCZlbmdp bmUtPmV4ZWNsaXN0cy50YXNrbGV0KTsKKworCUdFTV9UUkFDRSgiJXM6IHByZWVtcHQgdGltZW91 dCAlbHUrJXVtc1xuIiwKKwkJICBlbmdpbmUtPm5hbWUsCisJCSAgUkVBRF9PTkNFKGVuZ2luZS0+ cHJvcHMucHJlZW1wdF90aW1lb3V0X21zKSwKKwkJICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMg LSBlbmdpbmUtPmV4ZWNsaXN0cy5wcmVlbXB0LmV4cGlyZXMpKTsKKwlpbnRlbF9lbmdpbmVfcmVz ZXQoZW5naW5lLCAicHJlZW1wdGlvbiB0aW1lIG91dCIpOworCisJdGFza2xldF9lbmFibGUoJmVu Z2luZS0+ZXhlY2xpc3RzLnRhc2tsZXQpOworCWNsZWFyX2FuZF93YWtlX3VwX2JpdChiaXQsIGxv Y2spOworfQorCitzdGF0aWMgYm9vbCBwcmVlbXB0X3RpbWVvdXQoY29uc3Qgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqY29uc3QgZW5naW5lKQoreworCWNvbnN0IHN0cnVjdCB0aW1lcl9saXN0ICp0 ID0gJmVuZ2luZS0+ZXhlY2xpc3RzLnByZWVtcHQ7CisKKwlpZiAoIUNPTkZJR19EUk1fSTkxNV9Q UkVFTVBUX1RJTUVPVVQpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghdGltZXJfZXhwaXJlZCh0 KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIFJFQURfT05DRShlbmdpbmUtPmV4ZWNsaXN0 cy5wZW5kaW5nWzBdKTsKK30KKworLyoKKyAqIENoZWNrIHRoZSB1bnJlYWQgQ29udGV4dCBTdGF0 dXMgQnVmZmVycyBhbmQgbWFuYWdlIHRoZSBzdWJtaXNzaW9uIG9mIG5ldworICogY29udGV4dHMg dG8gdGhlIEVMU1AgYWNjb3JkaW5nbHkuCisgKi8KK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJt aXNzaW9uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKiBjb25zdCBlbmdpbmUgPSAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKWRhdGE7CisJ Ym9vbCB0aW1lb3V0ID0gcHJlZW1wdF90aW1lb3V0KGVuZ2luZSk7CisKKwlwcm9jZXNzX2NzYihl bmdpbmUpOworCWlmICghUkVBRF9PTkNFKGVuZ2luZS0+ZXhlY2xpc3RzLnBlbmRpbmdbMF0pIHx8 IHRpbWVvdXQpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2 ZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOworCQlfX2V4ZWNsaXN0c19zdWJtaXNzaW9u X3Rhc2tsZXQoZW5naW5lKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5hY3Rp dmUubG9jaywgZmxhZ3MpOworCisJCS8qIFJlY2hlY2sgYWZ0ZXIgc2VyaWFsaXNpbmcgd2l0aCBk aXJlY3Qtc3VibWlzc2lvbiAqLworCQlpZiAodGltZW91dCAmJiBwcmVlbXB0X3RpbWVvdXQoZW5n aW5lKSkKKwkJCXByZWVtcHRfcmVzZXQoZW5naW5lKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9f ZXhlY2xpc3RzX2tpY2soc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cykK K3sKKwkvKiBLaWNrIHRoZSB0YXNrbGV0IGZvciBzb21lIGludGVycnVwdCBjb2FsZXNjaW5nIGFu ZCByZXNldCBoYW5kbGluZyAqLworCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmV4ZWNsaXN0cy0+dGFz a2xldCk7Cit9CisKKyNkZWZpbmUgZXhlY2xpc3RzX2tpY2sodCwgbWVtYmVyKSBcCisJX19leGVj bGlzdHNfa2ljayhjb250YWluZXJfb2YodCwgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMs IG1lbWJlcikpCisKK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c190aW1lc2xpY2Uoc3RydWN0IHRpbWVy X2xpc3QgKnRpbWVyKQoreworCWV4ZWNsaXN0c19raWNrKHRpbWVyLCB0aW1lcik7Cit9CisKK3N0 YXRpYyB2b2lkIGV4ZWNsaXN0c19wcmVlbXB0KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKK3sK KwlleGVjbGlzdHNfa2ljayh0aW1lciwgcHJlZW1wdCk7Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXVl X3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJICBzdHJ1Y3QgaTkx NV9zY2hlZF9ub2RlICpub2RlLAorCQkJICBpbnQgcHJpbykKK3sKKwlHRU1fQlVHX09OKCFsaXN0 X2VtcHR5KCZub2RlLT5saW5rKSk7CisJbGlzdF9hZGRfdGFpbCgmbm9kZS0+bGluaywgaTkxNV9z Y2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlvKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9f c3VibWl0X3F1ZXVlX2ltbShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJc3Ry dWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5l eGVjbGlzdHM7CisKKwlpZiAocmVzZXRfaW5fcHJvZ3Jlc3MoZXhlY2xpc3RzKSkKKwkJcmV0dXJu OyAvKiBkZWZlciB1bnRpbCB3ZSByZXN0YXJ0IHRoZSBlbmdpbmUgZm9sbG93aW5nIHJlc2V0ICov CisKKwlpZiAoZXhlY2xpc3RzLT50YXNrbGV0LmZ1bmMgPT0gZXhlY2xpc3RzX3N1Ym1pc3Npb25f dGFza2xldCkKKwkJX19leGVjbGlzdHNfc3VibWlzc2lvbl90YXNrbGV0KGVuZ2luZSk7CisJZWxz ZQorCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZleGVjbGlzdHMtPnRhc2tsZXQpOworfQorCitzdGF0 aWMgdm9pZCBzdWJtaXRfcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJ IGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVf ZXhlY2xpc3RzICpleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7CisKKwlpZiAocnFfcHJp byhycSkgPD0gZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50KQorCQlyZXR1cm47CisKKwll eGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBycV9wcmlvKHJxKTsKKwlfX3N1Ym1pdF9x dWV1ZV9pbW0oZW5naW5lKTsKK30KKworc3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9yZXF1 ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lID0gcmVxdWVzdC0+ZW5naW5lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwkvKiBXaWxsIGJlIGNhbGxlZCBmcm9tIGlycS1jb250ZXh0IHdoZW4gdXNpbmcgZm9yZWlnbiBm ZW5jZXMuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+YWN0aXZlLmxvY2ssIGZsYWdz KTsKKworCXF1ZXVlX3JlcXVlc3QoZW5naW5lLCAmcmVxdWVzdC0+c2NoZWQsIHJxX3ByaW8ocmVx dWVzdCkpOworCisJR0VNX0JVR19PTihSQl9FTVBUWV9ST09UKCZlbmdpbmUtPmV4ZWNsaXN0cy5x dWV1ZS5yYl9yb290KSk7CisJR0VNX0JVR19PTihsaXN0X2VtcHR5KCZyZXF1ZXN0LT5zY2hlZC5s aW5rKSk7CisKKwlzdWJtaXRfcXVldWUoZW5naW5lLCByZXF1ZXN0KTsKKworCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmVuZ2luZS0+YWN0aXZlLmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZv aWQgZXhlY2xpc3RzX2NvbnRleHRfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBjb250YWluZXJfb2Yoa3JlZiwgdHlwZW9mKCpjZSksIHJl Zik7CisKKwlHRU1fQlVHX09OKCFpOTE1X2FjdGl2ZV9pc19pZGxlKCZjZS0+YWN0aXZlKSk7CisJ R0VNX0JVR19PTihpbnRlbF9jb250ZXh0X2lzX3Bpbm5lZChjZSkpOworCisJaWYgKGNlLT5zdGF0 ZSkKKwkJaW50ZWxfbHJfY29udGV4dF9maW5pKGNlKTsKKworCWludGVsX2NvbnRleHRfZmluaShj ZSk7CisJaW50ZWxfY29udGV4dF9mcmVlKGNlKTsKK30KKworc3RhdGljIGludCBleGVjbGlzdHNf Y29udGV4dF9waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQoreworCXJldHVybiBpbnRlbF9s cl9jb250ZXh0X3BpbihjZSwgY2UtPmVuZ2luZSk7Cit9CisKK3N0YXRpYyBpbnQgZXhlY2xpc3Rz X2NvbnRleHRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQoreworCXJldHVybiBpbnRl bF9scl9jb250ZXh0X2FsbG9jKGNlLCBjZS0+ZW5naW5lKTsKK30KKworc3RhdGljIHZvaWQgZXhl Y2xpc3RzX2NvbnRleHRfcmVzZXQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQoreworCS8qCisJ ICogQmVjYXVzZSB3ZSBlbWl0IFdBX1RBSUxfRFdPUkRTIHRoZXJlIG1heSBiZSBhIGRpc3Bhcml0 eQorCSAqIGJldHdlZW4gb3VyIGJvb2trZWVwaW5nIGluIGNlLT5yaW5nLT5oZWFkIGFuZCBjZS0+ cmluZy0+dGFpbCBhbmQKKwkgKiB0aGF0IHN0b3JlZCBpbiBjb250ZXh0LiBBcyB3ZSBvbmx5IHdy aXRlIG5ldyBjb21tYW5kcyBmcm9tCisJICogY2UtPnJpbmctPnRhaWwgb253YXJkcywgZXZlcnl0 aGluZyBiZWZvcmUgdGhhdCBpcyBqdW5rLiBJZiB0aGUgR1BVCisJICogc3RhcnRzIHJlYWRpbmcg ZnJvbSBpdHMgUklOR19IRUFEIGZyb20gdGhlIGNvbnRleHQsIGl0IG1heSB0cnkgdG8KKwkgKiBl eGVjdXRlIHRoYXQganVuayBhbmQgZGllLgorCSAqCisJICogVGhlIGNvbnRleHRzIHRoYXQgYXJl IHN0aWxsZWQgcGlubmVkIG9uIHJlc3VtZSBiZWxvbmcgdG8gdGhlCisJICoga2VybmVsLCBhbmQg YXJlIGxvY2FsIHRvIGVhY2ggZW5naW5lLiBBbGwgb3RoZXIgY29udGV4dHMgd2lsbAorCSAqIGhh dmUgdGhlaXIgaGVhZC90YWlsIHNhbml0aXplZCB1cG9uIHBpbm5pbmcgYmVmb3JlIHVzZSwgc28g dGhleQorCSAqIHdpbGwgbmV2ZXIgc2VlIGdhcmJhZ2UsCisJICoKKwkgKiBTbyB0byBhdm9pZCB0 aGF0IHdlIHJlc2V0IHRoZSBjb250ZXh0IGltYWdlcyB1cG9uIHJlc3VtZS4gRm9yCisJICogc2lt cGxpY2l0eSwgd2UganVzdCB6ZXJvIGV2ZXJ5dGhpbmcgb3V0LgorCSAqLworCWludGVsX3Jpbmdf cmVzZXQoY2UtPnJpbmcsIDApOworCWludGVsX2xyX2NvbnRleHRfdXBkYXRlX3JlZ19zdGF0ZShj ZSwgY2UtPmVuZ2luZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dF9v cHMgZXhlY2xpc3RzX2NvbnRleHRfb3BzID0geworCS5hbGxvYyA9IGV4ZWNsaXN0c19jb250ZXh0 X2FsbG9jLAorCisJLnBpbiA9IGV4ZWNsaXN0c19jb250ZXh0X3BpbiwKKwkudW5waW4gPSBpbnRl bF9scl9jb250ZXh0X3VucGluLAorCisJLmVudGVyID0gaW50ZWxfY29udGV4dF9lbnRlcl9lbmdp bmUsCisJLmV4aXQgPSBpbnRlbF9jb250ZXh0X2V4aXRfZW5naW5lLAorCisJLnJlc2V0ID0gZXhl Y2xpc3RzX2NvbnRleHRfcmVzZXQsCisJLmRlc3Ryb3kgPSBleGVjbGlzdHNfY29udGV4dF9kZXN0 cm95LAorfTsKKworc3RhdGljIGludCBleGVjbGlzdHNfcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCWludCByZXQ7CisKKwlHRU1fQlVHX09OKCFpbnRlbF9j b250ZXh0X2lzX3Bpbm5lZChyZXF1ZXN0LT5od19jb250ZXh0KSk7CisKKwkvKgorCSAqIEZsdXNo IGVub3VnaCBzcGFjZSB0byByZWR1Y2UgdGhlIGxpa2VsaWhvb2Qgb2Ygd2FpdGluZyBhZnRlcgor CSAqIHdlIHN0YXJ0IGJ1aWxkaW5nIHRoZSByZXF1ZXN0IC0gaW4gd2hpY2ggY2FzZSB3ZSB3aWxs IGp1c3QKKwkgKiBoYXZlIHRvIHJlcGVhdCB3b3JrLgorCSAqLworCXJlcXVlc3QtPnJlc2VydmVk X3NwYWNlICs9IEVYRUNMSVNUU19SRVFVRVNUX1NJWkU7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBh ZnRlciB0aGlzIHBvaW50LCB3ZSBoYXZlIGNvbW1pdHRlZCB0byB1c2luZworCSAqIHRoaXMgcmVx dWVzdCBhcyBpdCBpcyBiZWluZyB1c2VkIHRvIGJvdGggdHJhY2sgdGhlCisJICogc3RhdGUgb2Yg ZW5naW5lIGluaXRpYWxpc2F0aW9uIGFuZCBsaXZlbmVzcyBvZiB0aGUKKwkgKiBnb2xkZW4gcmVu ZGVyc3RhdGUgYWJvdmUuIFRoaW5rIHR3aWNlIGJlZm9yZSB5b3UgdHJ5CisJICogdG8gY2FuY2Vs L3Vud2luZCB0aGlzIHJlcXVlc3Qgbm93LgorCSAqLworCisJLyogVW5jb25kaXRpb25hbGx5IGlu dmFsaWRhdGUgR1BVIGNhY2hlcyBhbmQgVExCcy4gKi8KKwlyZXQgPSByZXF1ZXN0LT5lbmdpbmUt PmVtaXRfZmx1c2gocmVxdWVzdCwgRU1JVF9JTlZBTElEQVRFKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJcmVxdWVzdC0+cmVzZXJ2ZWRfc3BhY2UgLT0gRVhFQ0xJU1RTX1JFUVVFU1Rf U0laRTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXhlY2xpc3RzX3Jlc2V0X3ByZXBh cmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCXN0cnVjdCBpbnRlbF9lbmdp bmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOworCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlHRU1fVFJBQ0UoIiVzOiBkZXB0aDwtJWRcbiIsIGVuZ2lu ZS0+bmFtZSwKKwkJICBhdG9taWNfcmVhZCgmZXhlY2xpc3RzLT50YXNrbGV0LmNvdW50KSk7CisK KwkvKgorCSAqIFByZXZlbnQgcmVxdWVzdCBzdWJtaXNzaW9uIHRvIHRoZSBoYXJkd2FyZSB1bnRp bCB3ZSBoYXZlCisJICogY29tcGxldGVkIHRoZSByZXNldCBpbiBpOTE1X2dlbV9yZXNldF9maW5p c2goKS4gSWYgYSByZXF1ZXN0CisJICogaXMgY29tcGxldGVkIGJ5IG9uZSBlbmdpbmUsIGl0IG1h eSB0aGVuIHF1ZXVlIGEgcmVxdWVzdAorCSAqIHRvIGEgc2Vjb25kIHZpYSBpdHMgZXhlY2xpc3Rz LT50YXNrbGV0ICpqdXN0KiBhcyB3ZSBhcmUKKwkgKiBjYWxsaW5nIGVuZ2luZS0+cmVzdW1lKCkg YW5kIGFsc28gd3JpdGluZyB0aGUgRUxTUC4KKwkgKiBUdXJuaW5nIG9mZiB0aGUgZXhlY2xpc3Rz LT50YXNrbGV0IHVudGlsIHRoZSByZXNldCBpcyBvdmVyCisJICogcHJldmVudHMgdGhlIHJhY2Uu CisJICovCisJX190YXNrbGV0X2Rpc2FibGVfc3luY19vbmNlKCZleGVjbGlzdHMtPnRhc2tsZXQp OworCUdFTV9CVUdfT04oIXJlc2V0X2luX3Byb2dyZXNzKGV4ZWNsaXN0cykpOworCisJLyogQW5k IGZsdXNoIGFueSBjdXJyZW50IGRpcmVjdCBzdWJtaXNzaW9uLiAqLworCXNwaW5fbG9ja19pcnFz YXZlKCZlbmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBXZSBzdG9wIGVuZ2lu ZXMsIG90aGVyd2lzZSB3ZSBtaWdodCBnZXQgZmFpbGVkIHJlc2V0IGFuZCBhCisJICogZGVhZCBn cHUgKG9uIGVsaykuIEFsc28gYXMgbW9kZXJuIGdwdSBhcyBrYmwgY2FuIHN1ZmZlcgorCSAqIGZy b20gc3lzdGVtIGhhbmcgaWYgYmF0Y2hidWZmZXIgaXMgcHJvZ3Jlc3Npbmcgd2hlbgorCSAqIHRo ZSByZXNldCBpcyBpc3N1ZWQsIHJlZ2FyZGxlc3Mgb2YgUkVBRFlfVE9fUkVTRVQgYWNrLgorCSAq IFRodXMgYXNzdW1lIGl0IGlzIGJlc3QgdG8gc3RvcCBlbmdpbmVzIG9uIGFsbCBnZW5zCisJICog d2hlcmUgd2UgaGF2ZSBhIGdwdSByZXNldC4KKwkgKgorCSAqIFdhS0JMVkVDU1NlbWFwaG9yZVdh aXRQb2xsOmtibCAob24gQUxMX0VOR0lORVMpCisJICoKKwkgKiBGSVhNRTogV2EgZm9yIG1vcmUg bW9kZXJuIGdlbnMgbmVlZHMgdG8gYmUgdmFsaWRhdGVkCisJICovCisJaW50ZWxfZW5naW5lX3N0 b3BfY3MoZW5naW5lKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfY3NiX3BvaW50ZXJzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNs aXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKKwljb25zdCB1bnNp Z25lZCBpbnQgcmVzZXRfdmFsdWUgPSBleGVjbGlzdHMtPmNzYl9zaXplIC0gMTsKKworCXJpbmdf c2V0X3BhdXNlZChlbmdpbmUsIDApOworCisJLyoKKwkgKiBBZnRlciBhIHJlc2V0LCB0aGUgSFcg c3RhcnRzIHdyaXRpbmcgaW50byBDU0IgZW50cnkgWzBdLiBXZQorCSAqIHRoZXJlZm9yZSBoYXZl IHRvIHNldCBvdXIgSEVBRCBwb2ludGVyIGJhY2sgb25lIGVudHJ5IHNvIHRoYXQKKwkgKiB0aGUg KmZpcnN0KiBlbnRyeSB3ZSBjaGVjayBpcyBlbnRyeSAwLiBUbyBjb21wbGljYXRlIHRoaXMgZnVy dGhlciwKKwkgKiBhcyB3ZSBkb24ndCB3YWl0IGZvciB0aGUgZmlyc3QgaW50ZXJydXB0IGFmdGVy IHJlc2V0LCB3ZSBoYXZlIHRvCisJICogZmFrZSB0aGUgSFcgd3JpdGUgdG8gcG9pbnQgYmFjayB0 byB0aGUgbGFzdCBlbnRyeSBzbyB0aGF0IG91cgorCSAqIGlubGluZSBjb21wYXJpc29uIG9mIG91 ciBjYWNoZWQgaGVhZCBwb3NpdGlvbiBhZ2FpbnN0IHRoZSBsYXN0IEhXCisJICogd3JpdGUgd29y a3MgZXZlbiBiZWZvcmUgdGhlIGZpcnN0IGludGVycnVwdC4KKwkgKi8KKwlleGVjbGlzdHMtPmNz Yl9oZWFkID0gcmVzZXRfdmFsdWU7CisJV1JJVEVfT05DRSgqZXhlY2xpc3RzLT5jc2Jfd3JpdGUs IHJlc2V0X3ZhbHVlKTsKKwl3bWIoKTsgLyogTWFrZSBzdXJlIHRoaXMgaXMgdmlzaWJsZSB0byBI VyAocGFyYW5vaWE/KSAqLworCisJLyoKKwkgKiBTb21ldGltZXMgSWNlbGFrZSBmb3JnZXRzIHRv IHJlc2V0IGl0cyBwb2ludGVycyBvbiBhIEdQVSByZXNldC4KKwkgKiBCbHVkZ2VvbiB0aGVtIHdp dGggYSBtbWlvIHVwZGF0ZSB0byBiZSBzdXJlLgorCSAqLworCUVOR0lORV9XUklURShlbmdpbmUs IFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSLAorCQkgICAgIHJlc2V0X3ZhbHVlIDw8IDggfCByZXNl dF92YWx1ZSk7CisJRU5HSU5FX1BPU1RJTkdfUkVBRChlbmdpbmUsIFJJTkdfQ09OVEVYVF9TVEFU VVNfUFRSKTsKKworCWludmFsaWRhdGVfY3NiX2VudHJpZXMoJmV4ZWNsaXN0cy0+Y3NiX3N0YXR1 c1swXSwKKwkJCSAgICAgICAmZXhlY2xpc3RzLT5jc2Jfc3RhdHVzW3Jlc2V0X3ZhbHVlXSk7Cit9 CisKK3N0YXRpYyB2b2lkIF9fZXhlY2xpc3RzX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwgYm9vbCBzdGFsbGVkKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3Rz ICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOworCXN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZTsKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKworCW1iKCk7IC8qIHBhcmFu b2lhOiByZWFkIHRoZSBDU0IgcG9pbnRlcnMgZnJvbSBhZnRlciB0aGUgcmVzZXQgKi8KKwljbGZs dXNoKGV4ZWNsaXN0cy0+Y3NiX3dyaXRlKTsKKwltYigpOworCisJcHJvY2Vzc19jc2IoZW5naW5l KTsgLyogZHJhaW4gcHJlZW1wdGlvbiBldmVudHMgKi8KKworCS8qIEZvbGxvd2luZyB0aGUgcmVz ZXQsIHdlIG5lZWQgdG8gcmVsb2FkIHRoZSBDU0IgcmVhZC93cml0ZSBwb2ludGVycyAqLworCXJl c2V0X2NzYl9wb2ludGVycyhlbmdpbmUpOworCisJLyoKKwkgKiBTYXZlIHRoZSBjdXJyZW50bHkg ZXhlY3V0aW5nIGNvbnRleHQsIGV2ZW4gaWYgd2UgY29tcGxldGVkCisJICogaXRzIHJlcXVlc3Qs IGl0IHdhcyBzdGlsbCBydW5uaW5nIGF0IHRoZSB0aW1lIG9mIHRoZQorCSAqIHJlc2V0IGFuZCB3 aWxsIGhhdmUgYmVlbiBjbG9iYmVyZWQuCisJICovCisJcnEgPSBleGVjbGlzdHNfYWN0aXZlKGV4 ZWNsaXN0cyk7CisJaWYgKCFycSkKKwkJZ290byB1bndpbmQ7CisKKwkvKiBXZSBzdGlsbCBoYXZl IHJlcXVlc3RzIGluLWZsaWdodDsgdGhlIGVuZ2luZSBzaG91bGQgYmUgYWN0aXZlICovCisJR0VN X0JVR19PTighaW50ZWxfZW5naW5lX3BtX2lzX2F3YWtlKGVuZ2luZSkpOworCisJY2UgPSBycS0+ aHdfY29udGV4dDsKKwlHRU1fQlVHX09OKCFpOTE1X3ZtYV9pc19waW5uZWQoY2UtPnN0YXRlKSk7 CisKKwlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpIHsKKwkJLyogSWRsZSBjb250ZXh0 OyB0aWR5IHVwIHRoZSByaW5nIHNvIHdlIGNhbiByZXN0YXJ0IGFmcmVzaCAqLworCQljZS0+cmlu Zy0+aGVhZCA9IGludGVsX3Jpbmdfd3JhcChjZS0+cmluZywgcnEtPnRhaWwpOworCQlnb3RvIG91 dF9yZXBsYXk7CisJfQorCisJLyogQ29udGV4dCBoYXMgcmVxdWVzdHMgc3RpbGwgaW4tZmxpZ2h0 OyBpdCBzaG91bGQgbm90IGJlIGlkbGUhICovCisJR0VNX0JVR19PTihpOTE1X2FjdGl2ZV9pc19p ZGxlKCZjZS0+YWN0aXZlKSk7CisJcnEgPSBhY3RpdmVfcmVxdWVzdChjZS0+dGltZWxpbmUsIHJx KTsKKwljZS0+cmluZy0+aGVhZCA9IGludGVsX3Jpbmdfd3JhcChjZS0+cmluZywgcnEtPmhlYWQp OworCUdFTV9CVUdfT04oY2UtPnJpbmctPmhlYWQgPT0gY2UtPnJpbmctPnRhaWwpOworCisJLyoK KwkgKiBJZiB0aGlzIHJlcXVlc3QgaGFzbid0IHN0YXJ0ZWQgeWV0LCBlLmcuIGl0IGlzIHdhaXRp bmcgb24gYQorCSAqIHNlbWFwaG9yZSwgd2UgbmVlZCB0byBhdm9pZCBza2lwcGluZyB0aGUgcmVx dWVzdCBvciBlbHNlIHdlCisJICogYnJlYWsgdGhlIHNpZ25hbGluZyBjaGFpbi4gSG93ZXZlciwg aWYgdGhlIGNvbnRleHQgaXMgY29ycnVwdAorCSAqIHRoZSByZXF1ZXN0IHdpbGwgbm90IHJlc3Rh cnQgYW5kIHdlIHdpbGwgYmUgc3R1Y2sgd2l0aCBhIHdlZGdlZAorCSAqIGRldmljZS4gSXQgaXMg cXVpdGUgb2Z0ZW4gdGhlIGNhc2UgdGhhdCBpZiB3ZSBpc3N1ZSBhIHJlc2V0CisJICogd2hpbGUg dGhlIEdQVSBpcyBsb2FkaW5nIHRoZSBjb250ZXh0IGltYWdlLCB0aGF0IHRoZSBjb250ZXh0CisJ ICogaW1hZ2UgYmVjb21lcyBjb3JydXB0LgorCSAqCisJICogT3RoZXJ3aXNlLCBpZiB3ZSBoYXZl IG5vdCBzdGFydGVkIHlldCwgdGhlIHJlcXVlc3Qgc2hvdWxkIHJlcGxheQorCSAqIHBlcmZlY3Rs eSBhbmQgd2UgZG8gbm90IG5lZWQgdG8gZmxhZyB0aGUgcmVzdWx0IGFzIGJlaW5nIGVycm9uZW91 cy4KKwkgKi8KKwlpZiAoIWk5MTVfcmVxdWVzdF9zdGFydGVkKHJxKSkKKwkJZ290byBvdXRfcmVw bGF5OworCisJLyoKKwkgKiBJZiB0aGUgcmVxdWVzdCB3YXMgaW5ub2NlbnQsIHdlIGxlYXZlIHRo ZSByZXF1ZXN0IGluIHRoZSBFTFNQCisJICogYW5kIHdpbGwgdHJ5IHRvIHJlcGxheSBpdCBvbiBy ZXN0YXJ0aW5nLiBUaGUgY29udGV4dCBpbWFnZSBtYXkKKwkgKiBoYXZlIGJlZW4gY29ycnVwdGVk IGJ5IHRoZSByZXNldCwgaW4gd2hpY2ggY2FzZSB3ZSBtYXkgaGF2ZQorCSAqIHRvIHNlcnZpY2Ug YSBuZXcgR1BVIGhhbmcsIGJ1dCBtb3JlIGxpa2VseSB3ZSBjYW4gY29udGludWUgb24KKwkgKiB3 aXRob3V0IGltcGFjdC4KKwkgKgorCSAqIElmIHRoZSByZXF1ZXN0IHdhcyBndWlsdHksIHdlIHBy ZXN1bWUgdGhlIGNvbnRleHQgaXMgY29ycnVwdAorCSAqIGFuZCBoYXZlIHRvIGF0IGxlYXN0IHJl c3RvcmUgdGhlIFJJTkcgcmVnaXN0ZXIgaW4gdGhlIGNvbnRleHQKKwkgKiBpbWFnZSBiYWNrIHRv IHRoZSBleHBlY3RlZCB2YWx1ZXMgdG8gc2tpcCBvdmVyIHRoZSBndWlsdHkgcmVxdWVzdC4KKwkg Ki8KKwlfX2k5MTVfcmVxdWVzdF9yZXNldChycSwgc3RhbGxlZCk7CisJaWYgKCFzdGFsbGVkKQor CQlnb3RvIG91dF9yZXBsYXk7CisKKwkvKgorCSAqIFdlIHdhbnQgYSBzaW1wbGUgY29udGV4dCAr IHJpbmcgdG8gZXhlY3V0ZSB0aGUgYnJlYWRjcnVtYiB1cGRhdGUuCisJICogV2UgY2Fubm90IHJl bHkgb24gdGhlIGNvbnRleHQgYmVpbmcgaW50YWN0IGFjcm9zcyB0aGUgR1BVIGhhbmcsCisJICog c28gY2xlYXIgaXQgYW5kIHJlYnVpbGQganVzdCB3aGF0IHdlIG5lZWQgZm9yIHRoZSBicmVhZGNy dW1iLgorCSAqIEFsbCBwZW5kaW5nIHJlcXVlc3RzIGZvciB0aGlzIGNvbnRleHQgd2lsbCBiZSB6 YXBwZWQsIGFuZCBhbnkKKwkgKiBmdXR1cmUgcmVxdWVzdCB3aWxsIGJlIGFmdGVyIHVzZXJzcGFj ZSBoYXMgaGFkIHRoZSBvcHBvcnR1bml0eQorCSAqIHRvIHJlY3JlYXRlIGl0cyBvd24gc3RhdGUu CisJICovCisJR0VNX0JVR19PTighaW50ZWxfY29udGV4dF9pc19waW5uZWQoY2UpKTsKKwlpbnRl bF9scl9jb250ZXh0X3Jlc3RvcmVfZGVmYXVsdF9zdGF0ZShjZSwgZW5naW5lKTsKKworb3V0X3Jl cGxheToKKwlHRU1fVFJBQ0UoIiVzIHJlcGxheSB7aGVhZDolMDR4LCB0YWlsOiUwNHh9XG4iLAor CQkgIGVuZ2luZS0+bmFtZSwgY2UtPnJpbmctPmhlYWQsIGNlLT5yaW5nLT50YWlsKTsKKwlpbnRl bF9yaW5nX3VwZGF0ZV9zcGFjZShjZS0+cmluZyk7CisJaW50ZWxfbHJfY29udGV4dF9yZXNldF9y ZWdfc3RhdGUoY2UsIGVuZ2luZSk7CisJaW50ZWxfbHJfY29udGV4dF91cGRhdGVfcmVnX3N0YXRl KGNlLCBlbmdpbmUpOworCWNlLT5scmNfZGVzYyB8PSBDVFhfREVTQ19GT1JDRV9SRVNUT1JFOyAv KiBwYXJhbm9pZDogR1BVIHdhcyByZXNldCEgKi8KKwordW53aW5kOgorCS8qIFB1c2ggYmFjayBh bnkgaW5jb21wbGV0ZSByZXF1ZXN0cyBmb3IgcmVwbGF5IGFmdGVyIHRoZSByZXNldC4gKi8KKwlj YW5jZWxfcG9ydF9yZXF1ZXN0cyhleGVjbGlzdHMpOworCV9fdW53aW5kX2luY29tcGxldGVfcmVx dWVzdHMoZW5naW5lKTsKK30KKworc3RhdGljIHZvaWQgZXhlY2xpc3RzX3Jlc2V0KHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgYm9vbCBzdGFsbGVkKQoreworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisKKwlHRU1fVFJBQ0UoIiVzXG4iLCBlbmdpbmUtPm5hbWUpOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJmVuZ2luZS0+YWN0aXZlLmxvY2ssIGZsYWdzKTsKKworCV9fZXhlY2xpc3RzX3Jl c2V0KGVuZ2luZSwgc3RhbGxlZCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUt PmFjdGl2ZS5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG5vcF9zdWJtaXNzaW9uX3Rh c2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCS8qIFRoZSBkcml2ZXIgaXMgd2VkZ2VkOyBk b24ndCBwcm9jZXNzIGFueSBtb3JlIGV2ZW50cy4gKi8KK30KKworc3RhdGljIHZvaWQgZXhlY2xp c3RzX2NhbmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJ c3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5l LT5leGVjbGlzdHM7CisJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsICpybjsKKwlzdHJ1Y3QgcmJf bm9kZSAqcmI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUdFTV9UUkFDRSgiJXNcbiIsIGVu Z2luZS0+bmFtZSk7CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBjYWxsIGVuZ2luZS0+Y2FuY2VsX3Jl cXVlc3RzKCksIHdlIHNob3VsZCBoYXZlIGV4Y2x1c2l2ZQorCSAqIGFjY2VzcyB0byB0aGUgc3Vi bWlzc2lvbiBzdGF0ZS4gVGhpcyBpcyBhcnJhbmdlZCBmb3IgdXMgYnkgdGhlCisJICogY2FsbGVy IGRpc2FibGluZyB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24sIHRoZSB0YXNrbGV0IGFuZCBvdGhl cgorCSAqIHRocmVhZHMgdGhhdCBtYXkgdGhlbiBhY2Nlc3MgdGhlIHNhbWUgc3RhdGUsIGdpdmlu ZyB1cyBhIGZyZWUgaGFuZAorCSAqIHRvIHJlc2V0IHN0YXRlLiBIb3dldmVyLCB3ZSBzdGlsbCBu ZWVkIHRvIGxldCBsb2NrZGVwIGJlIGF3YXJlIHRoYXQKKwkgKiB3ZSBrbm93IHRoaXMgc3RhdGUg bWF5IGJlIGFjY2Vzc2VkIGluIGhhcmRpcnEgY29udGV4dCwgc28gd2UKKwkgKiBkaXNhYmxlIHRo ZSBpcnEgYXJvdW5kIHRoaXMgbWFuaXB1bGF0aW9uIGFuZCB3ZSB3YW50IHRvIGtlZXAKKwkgKiB0 aGUgc3BpbmxvY2sgZm9jdXNlZCBvbiBpdHMgZHV0aWVzIGFuZCBub3QgYWNjaWRlbnRhbGx5IGNv bmZsYXRlCisJICogY292ZXJhZ2UgdG8gdGhlIHN1Ym1pc3Npb24ncyBpcnEgc3RhdGUuIChTaW1p bGFybHksIGFsdGhvdWdoIHdlCisJICogc2hvdWxkbid0IG5lZWQgdG8gZGlzYWJsZSBpcnEgYXJv dW5kIHRoZSBtYW5pcHVsYXRpb24gb2YgdGhlCisJICogc3VibWlzc2lvbidzIGlycSBzdGF0ZSwg d2UgYWxzbyB3aXNoIHRvIHJlbWluZCBvdXJzZWx2ZXMgdGhhdAorCSAqIGl0IGlzIGlycSBzdGF0 ZS4pCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+YWN0aXZlLmxvY2ssIGZsYWdz KTsKKworCV9fZXhlY2xpc3RzX3Jlc2V0KGVuZ2luZSwgdHJ1ZSk7CisKKwkvKiBNYXJrIGFsbCBl eGVjdXRpbmcgcmVxdWVzdHMgYXMgc2tpcHBlZC4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJx LCAmZW5naW5lLT5hY3RpdmUucmVxdWVzdHMsIHNjaGVkLmxpbmspCisJCW1hcmtfZWlvKHJxKTsK KworCS8qIEZsdXNoIHRoZSBxdWV1ZWQgcmVxdWVzdHMgdG8gdGhlIHRpbWVsaW5lIGxpc3QgKGZv ciByZXRpcmluZykuICovCisJd2hpbGUgKChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3Rz LT5xdWV1ZSkpKSB7CisJCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpwID0gdG9fcHJpb2xpc3QocmIp OworCQlpbnQgaTsKKworCQlwcmlvbGlzdF9mb3JfZWFjaF9yZXF1ZXN0X2NvbnN1bWUocnEsIHJu LCBwLCBpKSB7CisJCQltYXJrX2VpbyhycSk7CisJCQlfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEp OworCQl9CisKKwkJcmJfZXJhc2VfY2FjaGVkKCZwLT5ub2RlLCAmZXhlY2xpc3RzLT5xdWV1ZSk7 CisJCWk5MTVfcHJpb2xpc3RfZnJlZShwKTsKKwl9CisKKwkvKiBDYW5jZWwgYWxsIGF0dGFjaGVk IHZpcnR1YWwgZW5naW5lcyAqLworCXdoaWxlICgocmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNs aXN0cy0+dmlydHVhbCkpKSB7CisJCXN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUgPQor CQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tlbmdpbmUtPmlkXS5yYik7CisKKwkJ cmJfZXJhc2VfY2FjaGVkKHJiLCAmZXhlY2xpc3RzLT52aXJ0dWFsKTsKKwkJUkJfQ0xFQVJfTk9E RShyYik7CisKKwkJc3Bpbl9sb2NrKCZ2ZS0+YmFzZS5hY3RpdmUubG9jayk7CisJCXJxID0gZmV0 Y2hfYW5kX3plcm8oJnZlLT5yZXF1ZXN0KTsKKwkJaWYgKHJxKSB7CisJCQltYXJrX2VpbyhycSk7 CisKKwkJCXJxLT5lbmdpbmUgPSBlbmdpbmU7CisJCQlfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEp OworCQkJaTkxNV9yZXF1ZXN0X3B1dChycSk7CisKKwkJCXZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1 ZV9wcmlvcml0eV9oaW50ID0gSU5UX01JTjsKKwkJfQorCQlzcGluX3VubG9jaygmdmUtPmJhc2Uu YWN0aXZlLmxvY2spOworCX0KKworCS8qIFJlbWFpbmluZyBfdW5yZWFkeV8gcmVxdWVzdHMgd2ls bCBiZSBub3AnZWQgd2hlbiBzdWJtaXR0ZWQgKi8KKworCWV4ZWNsaXN0cy0+cXVldWVfcHJpb3Jp dHlfaGludCA9IElOVF9NSU47CisJZXhlY2xpc3RzLT5xdWV1ZSA9IFJCX1JPT1RfQ0FDSEVEOwor CisJR0VNX0JVR19PTihfX3Rhc2tsZXRfaXNfZW5hYmxlZCgmZXhlY2xpc3RzLT50YXNrbGV0KSk7 CisJZXhlY2xpc3RzLT50YXNrbGV0LmZ1bmMgPSBub3Bfc3VibWlzc2lvbl90YXNrbGV0OworCisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOworfQor CitzdGF0aWMgdm9pZCBleGVjbGlzdHNfcmVzZXRfZmluaXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4 ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKKworCS8qCisJICogQWZ0ZXIgYSBHUFUgcmVz ZXQsIHdlIG1heSBoYXZlIHJlcXVlc3RzIHRvIHJlcGxheS4gRG8gc28gbm93IHdoaWxlCisJICog d2Ugc3RpbGwgaGF2ZSB0aGUgZm9yY2V3YWtlIHRvIGJlIHN1cmUgdGhhdCB0aGUgR1BVIGlzIG5v dCBhbGxvd2VkCisJICogdG8gc2xlZXAgYmVmb3JlIHdlIHJlc3RhcnQgYW5kIHJlbG9hZCBhIGNv bnRleHQuCisJICovCisJR0VNX0JVR19PTighcmVzZXRfaW5fcHJvZ3Jlc3MoZXhlY2xpc3RzKSk7 CisJaWYgKCFSQl9FTVBUWV9ST09UKCZleGVjbGlzdHMtPnF1ZXVlLnJiX3Jvb3QpKQorCQlleGVj bGlzdHMtPnRhc2tsZXQuZnVuYyhleGVjbGlzdHMtPnRhc2tsZXQuZGF0YSk7CisKKwlpZiAoX190 YXNrbGV0X2VuYWJsZSgmZXhlY2xpc3RzLT50YXNrbGV0KSkKKwkJLyogQW5kIGtpY2sgaW4gY2Fz ZSB3ZSBtaXNzZWQgYSBuZXcgcmVxdWVzdCBzdWJtaXNzaW9uLiAqLworCQl0YXNrbGV0X2hpX3Nj aGVkdWxlKCZleGVjbGlzdHMtPnRhc2tsZXQpOworCUdFTV9UUkFDRSgiJXM6IGRlcHRoLT4lZFxu IiwgZW5naW5lLT5uYW1lLAorCQkgIGF0b21pY19yZWFkKCZleGVjbGlzdHMtPnRhc2tsZXQuY291 bnQpKTsKK30KKworc3RhdGljIHZvaWQgZXhlY2xpc3RzX3Bhcmsoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQoreworCWNhbmNlbF90aW1lcigmZW5naW5lLT5leGVjbGlzdHMudGltZXIp OworCWNhbmNlbF90aW1lcigmZW5naW5lLT5leGVjbGlzdHMucHJlZW1wdCk7Cit9CisKK3N0YXRp YyB2b2lkIGV4ZWNsaXN0c19kZXN0cm95KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK K3sKKwkvKiBTeW5jaHJvbmlzZSB3aXRoIHJlc2lkdWFsIHRpbWVycyBhbmQgYW55IHNvZnRpcnEg dGhleSByYWlzZSAqLworCWRlbF90aW1lcl9zeW5jKCZlbmdpbmUtPmV4ZWNsaXN0cy50aW1lcik7 CisJZGVsX3RpbWVyX3N5bmMoJmVuZ2luZS0+ZXhlY2xpc3RzLnByZWVtcHQpOworCXRhc2tsZXRf a2lsbCgmZW5naW5lLT5leGVjbGlzdHMudGFza2xldCk7CisKKwlpbnRlbF9sb2dpY2FsX3Jpbmdf ZGVzdHJveShlbmdpbmUpOworfQorCit2b2lkIGludGVsX2V4ZWNsaXN0c19zZXRfZGVmYXVsdF9z dWJtaXNzaW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwllbmdpbmUtPnJl cXVlc3RfYWxsb2MgPSBleGVjbGlzdHNfcmVxdWVzdF9hbGxvYzsKKwllbmdpbmUtPnN1Ym1pdF9y ZXF1ZXN0ID0gZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0OworCWVuZ2luZS0+Y2FuY2VsX3JlcXVl c3RzID0gZXhlY2xpc3RzX2NhbmNlbF9yZXF1ZXN0czsKKwllbmdpbmUtPnNjaGVkdWxlID0gaTkx NV9zY2hlZHVsZTsKKwllbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0LmZ1bmMgPSBleGVjbGlzdHNf c3VibWlzc2lvbl90YXNrbGV0OworCisJZW5naW5lLT5yZXNldC5wcmVwYXJlID0gZXhlY2xpc3Rz X3Jlc2V0X3ByZXBhcmU7CisJZW5naW5lLT5yZXNldC5yZXNldCA9IGV4ZWNsaXN0c19yZXNldDsK KwllbmdpbmUtPnJlc2V0LmZpbmlzaCA9IGV4ZWNsaXN0c19yZXNldF9maW5pc2g7CisKKwllbmdp bmUtPmRlc3Ryb3kgPSBleGVjbGlzdHNfZGVzdHJveTsKKwllbmdpbmUtPnBhcmsgPSBleGVjbGlz dHNfcGFyazsKKwllbmdpbmUtPnVucGFyayA9IE5VTEw7CisKKwllbmdpbmUtPmZsYWdzIHw9IEk5 MTVfRU5HSU5FX1NVUFBPUlRTX1NUQVRTOworCWlmICghaW50ZWxfdmdwdV9hY3RpdmUoZW5naW5l LT5pOTE1KSkgeworCQllbmdpbmUtPmZsYWdzIHw9IEk5MTVfRU5HSU5FX0hBU19TRU1BUEhPUkVT OworCQlpZiAoSEFTX0xPR0lDQUxfUklOR19QUkVFTVBUSU9OKGVuZ2luZS0+aTkxNSkpCisJCQll bmdpbmUtPmZsYWdzIHw9IEk5MTVfRU5HSU5FX0hBU19QUkVFTVBUSU9OOworCX0KKworCWlmIChJ TlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKKwkJZW5naW5lLT5mbGFncyB8PSBJOTE1X0VO R0lORV9IQVNfUkVMQVRJVkVfTU1JTzsKK30KKworaW50IGludGVsX2V4ZWNsaXN0c19zdWJtaXNz aW9uX3NldHVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwl0YXNrbGV0X2lu aXQoJmVuZ2luZS0+ZXhlY2xpc3RzLnRhc2tsZXQsCisJCSAgICAgZXhlY2xpc3RzX3N1Ym1pc3Np b25fdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpZW5naW5lKTsKKwl0aW1lcl9zZXR1cCgmZW5naW5l LT5leGVjbGlzdHMudGltZXIsIGV4ZWNsaXN0c190aW1lc2xpY2UsIDApOworCXRpbWVyX3NldHVw KCZlbmdpbmUtPmV4ZWNsaXN0cy5wcmVlbXB0LCBleGVjbGlzdHNfcHJlZW1wdCwgMCk7CisKKwlp bnRlbF9sb2dpY2FsX3Jpbmdfc2V0dXAoZW5naW5lKTsKKworCWVuZ2luZS0+c2V0X2RlZmF1bHRf c3VibWlzc2lvbiA9IGludGVsX2V4ZWNsaXN0c19zZXRfZGVmYXVsdF9zdWJtaXNzaW9uOworCWVu Z2luZS0+Y29wcyA9ICZleGVjbGlzdHNfY29udGV4dF9vcHM7CisKKwlyZXR1cm4gMDsKK30KKwor aW50IGludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uX2luaXQoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhl Y2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gZW5naW5lLT5pOTE1OworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGVuZ2lu ZS0+dW5jb3JlOworCXUzMiBiYXNlID0gZW5naW5lLT5tbWlvX2Jhc2U7CisJaW50IHJldDsKKwor CXJldCA9IGludGVsX2xvZ2ljYWxfcmluZ19pbml0KGVuZ2luZSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCWlmIChIQVNfTE9HSUNBTF9SSU5HX0VMU1EoaTkxNSkpIHsKKwkJZXhlY2xp c3RzLT5zdWJtaXRfcmVnID0gdW5jb3JlLT5yZWdzICsKKwkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0 KFJJTkdfRVhFQ0xJU1RfU1FfQ09OVEVOVFMoYmFzZSkpOworCQlleGVjbGlzdHMtPmN0cmxfcmVn ID0gdW5jb3JlLT5yZWdzICsKKwkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfRVhFQ0xJU1Rf Q09OVFJPTChiYXNlKSk7CisJfSBlbHNlIHsKKwkJZXhlY2xpc3RzLT5zdWJtaXRfcmVnID0gdW5j b3JlLT5yZWdzICsKKwkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfRUxTUChiYXNlKSk7CisJ fQorCisJZXhlY2xpc3RzLT5jc2Jfc3RhdHVzID0KKwkJJmVuZ2luZS0+c3RhdHVzX3BhZ2UuYWRk cltJOTE1X0hXU19DU0JfQlVGMF9JTkRFWF07CisKKwlleGVjbGlzdHMtPmNzYl93cml0ZSA9CisJ CSZlbmdpbmUtPnN0YXR1c19wYWdlLmFkZHJbaW50ZWxfaHdzX2NzYl93cml0ZV9pbmRleChpOTE1 KV07CisKKwlpZiAoSU5URUxfR0VOKGk5MTUpIDwgMTEpCisJCWV4ZWNsaXN0cy0+Y3NiX3NpemUg PSBHRU44X0NTQl9FTlRSSUVTOworCWVsc2UKKwkJZXhlY2xpc3RzLT5jc2Jfc2l6ZSA9IEdFTjEx X0NTQl9FTlRSSUVTOworCisJcmVzZXRfY3NiX3BvaW50ZXJzKGVuZ2luZSk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludGVsX2VuZ2luZV9tYXNrX3QKK3ZpcnR1YWxfc3VibWlzc2lvbl9t YXNrKHN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUpCit7CisJc3RydWN0IGk5MTVfcmVx dWVzdCAqcnE7CisJaW50ZWxfZW5naW5lX21hc2tfdCBtYXNrOworCisJcnEgPSBSRUFEX09OQ0Uo dmUtPnJlcXVlc3QpOworCWlmICghcnEpCisJCXJldHVybiAwOworCisJLyogVGhlIHJxIGlzIHJl YWR5IGZvciBzdWJtaXNzaW9uOyBycS0+ZXhlY3V0aW9uX21hc2sgaXMgbm93IHN0YWJsZS4gKi8K KwltYXNrID0gcnEtPmV4ZWN1dGlvbl9tYXNrOworCWlmICh1bmxpa2VseSghbWFzaykpIHsKKwkJ LyogSW52YWxpZCBzZWxlY3Rpb24sIHN1Ym1pdCB0byBhIHJhbmRvbSBlbmdpbmUgaW4gZXJyb3Ig Ki8KKwkJaTkxNV9yZXF1ZXN0X3NraXAocnEsIC1FTk9ERVYpOworCQltYXNrID0gdmUtPnNpYmxp bmdzWzBdLT5tYXNrOworCX0KKworCUdFTV9UUkFDRSgiJXM6IHJxPSVsbHg6JWxsZCwgbWFzaz0l eCwgcHJpbz0lZFxuIiwKKwkJICB2ZS0+YmFzZS5uYW1lLAorCQkgIHJxLT5mZW5jZS5jb250ZXh0 LCBycS0+ZmVuY2Uuc2Vxbm8sCisJCSAgbWFzaywgdmUtPmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3By aW9yaXR5X2hpbnQpOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnR1YWxf c3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaW50ZWxf dmlydHVhbF9lbmdpbmUgKiBjb25zdCB2ZSA9CisJCShzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdp bmUgKilkYXRhOworCWNvbnN0IGludCBwcmlvID0gdmUtPmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3By aW9yaXR5X2hpbnQ7CisJaW50ZWxfZW5naW5lX21hc2tfdCBtYXNrOworCXVuc2lnbmVkIGludCBu OworCisJcmN1X3JlYWRfbG9jaygpOworCW1hc2sgPSB2aXJ0dWFsX3N1Ym1pc3Npb25fbWFzayh2 ZSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJaWYgKHVubGlrZWx5KCFtYXNrKSkKKwkJcmV0dXJu OworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlmb3IgKG4gPSAwOyBSRUFEX09OQ0UodmUtPnJl cXVlc3QpICYmIG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspIHsKKwkJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqc2libGluZyA9IHZlLT5zaWJsaW5nc1tuXTsKKwkJc3RydWN0IHZlX25vZGUgKiBj b25zdCBub2RlID0gJnZlLT5ub2Rlc1tzaWJsaW5nLT5pZF07CisJCXN0cnVjdCByYl9ub2RlICoq cGFyZW50LCAqcmI7CisJCWJvb2wgZmlyc3Q7CisKKwkJaWYgKHVubGlrZWx5KCEobWFzayAmIHNp YmxpbmctPm1hc2spKSkgeworCQkJaWYgKCFSQl9FTVBUWV9OT0RFKCZub2RlLT5yYikpIHsKKwkJ CQlzcGluX2xvY2soJnNpYmxpbmctPmFjdGl2ZS5sb2NrKTsKKwkJCQlyYl9lcmFzZV9jYWNoZWQo Jm5vZGUtPnJiLAorCQkJCQkJJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsKTsKKwkJCQlSQl9D TEVBUl9OT0RFKCZub2RlLT5yYik7CisJCQkJc3Bpbl91bmxvY2soJnNpYmxpbmctPmFjdGl2ZS5s b2NrKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3Bpbl9sb2NrKCZzaWJsaW5nLT5h Y3RpdmUubG9jayk7CisKKwkJaWYgKCFSQl9FTVBUWV9OT0RFKCZub2RlLT5yYikpIHsKKwkJCS8q CisJCQkgKiBDaGVhdCBhbmQgYXZvaWQgcmViYWxhbmNpbmcgdGhlIHRyZWUgaWYgd2UgY2FuCisJ CQkgKiByZXVzZSB0aGlzIG5vZGUgaW4gc2l0dS4KKwkJCSAqLworCQkJZmlyc3QgPSByYl9maXJz dF9jYWNoZWQoJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsKSA9PQorCQkJCSZub2RlLT5yYjsK KwkJCWlmIChwcmlvID09IG5vZGUtPnByaW8gfHwgKHByaW8gPiBub2RlLT5wcmlvICYmIGZpcnN0 KSkKKwkJCQlnb3RvIHN1Ym1pdF9lbmdpbmU7CisKKwkJCXJiX2VyYXNlX2NhY2hlZCgmbm9kZS0+ cmIsICZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVhbCk7CisJCX0KKworCQlyYiA9IE5VTEw7CisJ CWZpcnN0ID0gdHJ1ZTsKKwkJcGFyZW50ID0gJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsLnJi X3Jvb3QucmJfbm9kZTsKKwkJd2hpbGUgKCpwYXJlbnQpIHsKKwkJCXN0cnVjdCB2ZV9ub2RlICpv dGhlcjsKKworCQkJcmIgPSAqcGFyZW50OworCQkJb3RoZXIgPSByYl9lbnRyeShyYiwgdHlwZW9m KCpvdGhlciksIHJiKTsKKwkJCWlmIChwcmlvID4gb3RoZXItPnByaW8pIHsKKwkJCQlwYXJlbnQg PSAmcmItPnJiX2xlZnQ7CisJCQl9IGVsc2UgeworCQkJCXBhcmVudCA9ICZyYi0+cmJfcmlnaHQ7 CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCX0KKwkJfQorCisJCXJiX2xpbmtfbm9kZSgmbm9kZS0+ cmIsIHJiLCBwYXJlbnQpOworCQlyYl9pbnNlcnRfY29sb3JfY2FjaGVkKCZub2RlLT5yYiwKKwkJ CQkgICAgICAgJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsLAorCQkJCSAgICAgICBmaXJzdCk7 CisKK3N1Ym1pdF9lbmdpbmU6CisJCUdFTV9CVUdfT04oUkJfRU1QVFlfTk9ERSgmbm9kZS0+cmIp KTsKKwkJbm9kZS0+cHJpbyA9IHByaW87CisJCWlmIChmaXJzdCAmJiBwcmlvID4gc2libGluZy0+ ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQpIHsKKwkJCXNpYmxpbmctPmV4ZWNsaXN0cy5x dWV1ZV9wcmlvcml0eV9oaW50ID0gcHJpbzsKKwkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNpYmxp bmctPmV4ZWNsaXN0cy50YXNrbGV0KTsKKwkJfQorCisJCXNwaW5fdW5sb2NrKCZzaWJsaW5nLT5h Y3RpdmUubG9jayk7CisJfQorCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIHZvaWQg dmlydHVhbF9zdWJtaXRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKK3sKKwlzdHJ1 Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVhbF9lbmdpbmUocnEtPmVuZ2lu ZSk7CisJc3RydWN0IGk5MTVfcmVxdWVzdCAqb2xkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwlHRU1fVFJBQ0UoIiVzOiBycT0lbGx4OiVsbGRcbiIsCisJCSAgdmUtPmJhc2UubmFtZSwKKwkJ ICBycS0+ZmVuY2UuY29udGV4dCwKKwkJICBycS0+ZmVuY2Uuc2Vxbm8pOworCisJR0VNX0JVR19P Tih2ZS0+YmFzZS5zdWJtaXRfcmVxdWVzdCAhPSB2aXJ0dWFsX3N1Ym1pdF9yZXF1ZXN0KTsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZ2ZS0+YmFzZS5hY3RpdmUubG9jaywgZmxhZ3MpOworCisJb2xk ID0gdmUtPnJlcXVlc3Q7CisJaWYgKG9sZCkgeyAvKiBiYWNrZ3JvdW5kIGNvbXBsZXRpb24gZXZl bnQgZnJvbSBwcmVlbXB0LXRvLWJ1c3kgKi8KKwkJR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2Nv bXBsZXRlZChvbGQpKTsKKwkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KG9sZCk7CisJCWk5MTVfcmVx dWVzdF9wdXQob2xkKTsKKwl9CisKKwlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpIHsK KwkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJxKTsKKworCQl2ZS0+YmFzZS5leGVjbGlzdHMucXVl dWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47CisJCXZlLT5yZXF1ZXN0ID0gTlVMTDsKKwl9IGVs c2UgeworCQl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IHJxX3ByaW8o cnEpOworCQl2ZS0+cmVxdWVzdCA9IGk5MTVfcmVxdWVzdF9nZXQocnEpOworCisJCUdFTV9CVUdf T04oIWxpc3RfZW1wdHkoaW50ZWxfdmlydHVhbF9lbmdpbmVfcXVldWUodmUpKSk7CisJCWxpc3Rf bW92ZV90YWlsKCZycS0+c2NoZWQubGluaywgaW50ZWxfdmlydHVhbF9lbmdpbmVfcXVldWUodmUp KTsKKworCQl0YXNrbGV0X3NjaGVkdWxlKCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCk7CisJ fQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmUtPmJhc2UuYWN0aXZlLmxvY2ssIGZsYWdz KTsKK30KKworc3RhdGljIHZvaWQKK3ZpcnR1YWxfYm9uZF9leGVjdXRlKHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxLCBzdHJ1Y3QgZG1hX2ZlbmNlICpzaWduYWwpCit7CisJc3RydWN0IGludGVsX3Zp cnR1YWxfZW5naW5lICp2ZSA9IHRvX3ZpcnR1YWxfZW5naW5lKHJxLT5lbmdpbmUpOworCWludGVs X2VuZ2luZV9tYXNrX3QgYWxsb3dlZCwgZXhlYzsKKwlzdHJ1Y3QgdmVfYm9uZCAqYm9uZDsKKwor CWFsbG93ZWQgPSB+dG9fcmVxdWVzdChzaWduYWwpLT5lbmdpbmUtPm1hc2s7CisKKwlib25kID0g aW50ZWxfdmlydHVhbF9lbmdpbmVfZmluZF9ib25kKHZlLCB0b19yZXF1ZXN0KHNpZ25hbCktPmVu Z2luZSk7CisJaWYgKGJvbmQpCisJCWFsbG93ZWQgJj0gYm9uZC0+c2libGluZ19tYXNrOworCisJ LyogUmVzdHJpY3QgdGhlIGJvbmRlZCByZXF1ZXN0IHRvIHJ1biBvbiBvbmx5IHRoZSBhdmFpbGFi bGUgZW5naW5lcyAqLworCWV4ZWMgPSBSRUFEX09OQ0UocnEtPmV4ZWN1dGlvbl9tYXNrKTsKKwl3 aGlsZSAoIXRyeV9jbXB4Y2hnKCZycS0+ZXhlY3V0aW9uX21hc2ssICZleGVjLCBleGVjICYgYWxs b3dlZCkpCisJCTsKKworCS8qIFByZXZlbnQgdGhlIG1hc3RlciBmcm9tIGJlaW5nIHJlLXJ1biBv biB0aGUgYm9uZGVkIGVuZ2luZXMgKi8KKwl0b19yZXF1ZXN0KHNpZ25hbCktPmV4ZWN1dGlvbl9t YXNrICY9IH5hbGxvd2VkOworfQorCit2b2lkIGludGVsX2V4ZWNsaXN0c192aXJ0dWFsX3N1Ym1p c3Npb25faW5pdChzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnZlKQoreworCXZlLT5iYXNl LnJlcXVlc3RfYWxsb2MgPSBleGVjbGlzdHNfcmVxdWVzdF9hbGxvYzsKKwl2ZS0+YmFzZS5zdWJt aXRfcmVxdWVzdCA9IHZpcnR1YWxfc3VibWl0X3JlcXVlc3Q7CisJdmUtPmJhc2UuYm9uZF9leGVj dXRlID0gdmlydHVhbF9ib25kX2V4ZWN1dGU7CisJdGFza2xldF9pbml0KCZ2ZS0+YmFzZS5leGVj bGlzdHMudGFza2xldCwKKwkJICAgICB2aXJ0dWFsX3N1Ym1pc3Npb25fdGFza2xldCwKKwkJICAg ICAodW5zaWduZWQgbG9uZyl2ZSk7Cit9CisKK3ZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nob3dfcmVx dWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJCSAgIHN0cnVjdCBkcm1f cHJpbnRlciAqbSwKKwkJCQkgICB2b2lkICgqc2hvd19yZXF1ZXN0KShzdHJ1Y3QgZHJtX3ByaW50 ZXIgKm0sCisJCQkJCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCisJCQkJCQkJY29uc3QgY2hh ciAqcHJlZml4KSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgbWF4KQoreworCWNvbnN0IHN0cnVjdCBp bnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7CisJ c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsICpsYXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJ dW5zaWduZWQgaW50IGNvdW50OworCXN0cnVjdCByYl9ub2RlICpyYjsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZlbmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7CisKKwlsYXN0ID0gTlVMTDsKKwlj b3VudCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShycSwgJmVuZ2luZS0+YWN0aXZlLnJlcXVl c3RzLCBzY2hlZC5saW5rKSB7CisJCWlmIChjb3VudCsrIDwgbWF4IC0gMSkKKwkJCXNob3dfcmVx dWVzdChtLCBycSwgIlx0XHRFICIpOworCQllbHNlCisJCQlsYXN0ID0gcnE7CisJfQorCWlmIChs YXN0KSB7CisJCWlmIChjb3VudCA+IG1heCkgeworCQkJZHJtX3ByaW50ZihtLAorCQkJCSAgICJc dFx0Li4uc2tpcHBpbmcgJWQgZXhlY3V0aW5nIHJlcXVlc3RzLi4uXG4iLAorCQkJCSAgIGNvdW50 IC0gbWF4KTsKKwkJfQorCQlzaG93X3JlcXVlc3QobSwgbGFzdCwgIlx0XHRFICIpOworCX0KKwor CWxhc3QgPSBOVUxMOworCWNvdW50ID0gMDsKKwlpZiAoZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0 eV9oaW50ICE9IElOVF9NSU4pCisJCWRybV9wcmludGYobSwgIlx0XHRRdWV1ZSBwcmlvcml0eSBo aW50OiAlZFxuIiwKKwkJCSAgIGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCk7CisJZm9y IChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT5xdWV1ZSk7IHJiOyByYiA9IHJiX25l eHQocmIpKSB7CisJCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpwID0gcmJfZW50cnkocmIsIHR5cGVv ZigqcCksIG5vZGUpOworCQlpbnQgaTsKKworCQlwcmlvbGlzdF9mb3JfZWFjaF9yZXF1ZXN0KHJx LCBwLCBpKSB7CisJCQlpZiAoY291bnQrKyA8IG1heCAtIDEpCisJCQkJc2hvd19yZXF1ZXN0KG0s IHJxLCAiXHRcdFEgIik7CisJCQllbHNlCisJCQkJbGFzdCA9IHJxOworCQl9CisJfQorCWlmIChs YXN0KSB7CisJCWlmIChjb3VudCA+IG1heCkgeworCQkJZHJtX3ByaW50ZihtLAorCQkJCSAgICJc dFx0Li4uc2tpcHBpbmcgJWQgcXVldWVkIHJlcXVlc3RzLi4uXG4iLAorCQkJCSAgIGNvdW50IC0g bWF4KTsKKwkJfQorCQlzaG93X3JlcXVlc3QobSwgbGFzdCwgIlx0XHRRICIpOworCX0KKworCWxh c3QgPSBOVUxMOworCWNvdW50ID0gMDsKKwlmb3IgKHJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVj bGlzdHMtPnZpcnR1YWwpOyByYjsgcmIgPSByYl9uZXh0KHJiKSkgeworCQlzdHJ1Y3QgaW50ZWxf dmlydHVhbF9lbmdpbmUgKnZlID0KKwkJCXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9kZXNb ZW5naW5lLT5pZF0ucmIpOworCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IFJFQURfT05DRSh2 ZS0+cmVxdWVzdCk7CisKKwkJaWYgKHJxKSB7CisJCQlpZiAoY291bnQrKyA8IG1heCAtIDEpCisJ CQkJc2hvd19yZXF1ZXN0KG0sIHJxLCAiXHRcdFYgIik7CisJCQllbHNlCisJCQkJbGFzdCA9IHJx OworCQl9CisJfQorCWlmIChsYXN0KSB7CisJCWlmIChjb3VudCA+IG1heCkgeworCQkJZHJtX3By aW50ZihtLAorCQkJCSAgICJcdFx0Li4uc2tpcHBpbmcgJWQgdmlydHVhbCByZXF1ZXN0cy4uLlxu IiwKKwkJCQkgICBjb3VudCAtIG1heCk7CisJCX0KKwkJc2hvd19yZXF1ZXN0KG0sIGxhc3QsICJc dFx0ViAiKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmFjdGl2ZS5s b2NrLCBmbGFncyk7Cit9CisKK2Jvb2wKK2ludGVsX2VuZ2luZV9pbl9leGVjbGlzdHNfc3VibWlz c2lvbl9tb2RlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlyZXR1 cm4gZW5naW5lLT5zZXRfZGVmYXVsdF9zdWJtaXNzaW9uID09CisJICAgICAgIGludGVsX2V4ZWNs aXN0c19zZXRfZGVmYXVsdF9zdWJtaXNzaW9uOworfQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdf RFJNX0k5MTVfU0VMRlRFU1QpCisjaW5jbHVkZSAic2VsZnRlc3RfZXhlY2xpc3RzLmMiCisjZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19z dWJtaXNzaW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3Vi bWlzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjc3NmJj NjBkYTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf ZXhlY2xpc3RzX3N1Ym1pc3Npb24uaApAQCAtMCwwICsxLDU4IEBACisvKgorICogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0lOVEVMX0VYRUNMSVNUU19TVUJNSVNTSU9OX18KKyNk ZWZpbmUgX19JTlRFTF9FWEVDTElTVFNfU1VCTUlTU0lPTl9fCisKKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgorCitzdHJ1Y3QgZHJtX3ByaW50ZXI7CisKK3N0cnVjdCBpOTE1X3JlcXVlc3Q7Citz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzOworc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lOworCisv KiBUaGUgZG9jcyBzcGVjaWZ5IHRoYXQgdGhlIHdyaXRlIHBvaW50ZXIgd3JhcHMgYXJvdW5kIGFm dGVyIDVoLCAiQWZ0ZXIgc3RhdHVzCisgKiBpcyB3cml0dGVuIG91dCB0byB0aGUgbGFzdCBhdmFp bGFibGUgc3RhdHVzIFFXIGF0IG9mZnNldCA1aCwgdGhpcyBwb2ludGVyCisgKiB3cmFwcyB0byAw LiIKKyAqCisgKiBUaGVyZWZvcmUsIG9uZSBtdXN0IGluZmVyIHRoYW4gZXZlbiB0aG91Z2ggdGhl cmUgYXJlIDMgYml0cyBhdmFpbGFibGUsIDYgYW5kCisgKiA3IGFwcGVhciB0byBiZSAqIHJlc2Vy dmVkLgorICovCisjZGVmaW5lIEdFTjhfQ1NCX0VOVFJJRVMgNgorI2RlZmluZSBHRU44X0NTQl9Q VFJfTUFTSyAweDcKKyNkZWZpbmUgR0VOOF9DU0JfUkVBRF9QVFJfTUFTSyAoR0VOOF9DU0JfUFRS X01BU0sgPDwgOCkKKyNkZWZpbmUgR0VOOF9DU0JfV1JJVEVfUFRSX01BU0sgKEdFTjhfQ1NCX1BU Ul9NQVNLIDw8IDApCisKKyNkZWZpbmUgR0VOMTFfQ1NCX0VOVFJJRVMgMTIKKyNkZWZpbmUgR0VO MTFfQ1NCX1BUUl9NQVNLIDB4ZgorI2RlZmluZSBHRU4xMV9DU0JfUkVBRF9QVFJfTUFTSyAoR0VO MTFfQ1NCX1BUUl9NQVNLIDw8IDgpCisjZGVmaW5lIEdFTjExX0NTQl9XUklURV9QVFJfTUFTSyAo R0VOMTFfQ1NCX1BUUl9NQVNLIDw8IDApCisKK2VudW0geworCUlOVEVMX0NPTlRFWFRfU0NIRURV TEVfSU4gPSAwLAorCUlOVEVMX0NPTlRFWFRfU0NIRURVTEVfT1VULAorCUlOVEVMX0NPTlRFWFRf U0NIRURVTEVfUFJFRU1QVEVELAorfTsKKworaW50IGludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9u X3NldHVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CitpbnQgaW50ZWxfZXhlY2xp c3RzX3N1Ym1pc3Npb25faW5pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOworCit2 b2lkIGludGVsX2V4ZWNsaXN0c19zZXRfZGVmYXVsdF9zdWJtaXNzaW9uKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSk7CisKK3ZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nob3dfcmVxdWVzdHMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJCSAgIHN0cnVjdCBkcm1fcHJpbnRl ciAqbSwKKwkJCQkgICB2b2lkICgqc2hvd19yZXF1ZXN0KShzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0s CisJCQkJCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCisJCQkJCQkJY29uc3QgY2hhciAqcHJl Zml4KSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgbWF4KTsKKwordm9pZCBpbnRlbF9leGVjbGlzdHNf dmlydHVhbF9zdWJtaXNzaW9uX2luaXQoc3RydWN0IGludGVsX3ZpcnR1YWxfZW5naW5lICp2ZSk7 CisKK2Jvb2wKK2ludGVsX2VuZ2luZV9pbl9leGVjbGlzdHNfc3VibWlzc2lvbl9tb2RlKGNvbnN0 IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CisKKyNlbmRpZiAvKiBfX0lOVEVMX0VY RUNMSVNUU19TVUJNSVNTSU9OX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMKaW5k ZXggZmJkZDNiZGQwNmYxLi40ZjQwY2Y2NGU5OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2xyYy5jCkBAIC0xNTAsMzQgKzE1MCw2IEBACiAjaW5jbHVkZSAiaW50ZWxfdmlydHVhbF9lbmdp bmUuaCIKICNpbmNsdWRlICJpbnRlbF93b3JrYXJvdW5kcy5oIgogCi0jZGVmaW5lIFJJTkdfRVhF Q0xJU1RfUUZVTEwJCSgxIDw8IDB4MikKLSNkZWZpbmUgUklOR19FWEVDTElTVDFfVkFMSUQJCSgx IDw8IDB4MykKLSNkZWZpbmUgUklOR19FWEVDTElTVDBfVkFMSUQJCSgxIDw8IDB4NCkKLSNkZWZp bmUgUklOR19FWEVDTElTVF9BQ1RJVkVfU1RBVFVTCSgzIDw8IDB4RSkKLSNkZWZpbmUgUklOR19F WEVDTElTVDFfQUNUSVZFCQkoMSA8PCAweDExKQotI2RlZmluZSBSSU5HX0VYRUNMSVNUMF9BQ1RJ VkUJCSgxIDw8IDB4MTIpCi0KLSNkZWZpbmUgR0VOOF9DVFhfU1RBVFVTX0lETEVfQUNUSVZFCSgx IDw8IDApCi0jZGVmaW5lIEdFTjhfQ1RYX1NUQVRVU19QUkVFTVBURUQJKDEgPDwgMSkKLSNkZWZp bmUgR0VOOF9DVFhfU1RBVFVTX0VMRU1FTlRfU1dJVENICSgxIDw8IDIpCi0jZGVmaW5lIEdFTjhf Q1RYX1NUQVRVU19BQ1RJVkVfSURMRQkoMSA8PCAzKQotI2RlZmluZSBHRU44X0NUWF9TVEFUVVNf Q09NUExFVEUJKDEgPDwgNCkKLSNkZWZpbmUgR0VOOF9DVFhfU1RBVFVTX0xJVEVfUkVTVE9SRQko MSA8PCAxNSkKLQotI2RlZmluZSBHRU44X0NUWF9TVEFUVVNfQ09NUExFVEVEX01BU0sgXAotCSAo R0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFIHwgR0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRFRCkKLQot I2RlZmluZSBDVFhfREVTQ19GT1JDRV9SRVNUT1JFIEJJVF9VTEwoMikKLQotI2RlZmluZSBHRU4x Ml9DVFhfU1RBVFVTX1NXSVRDSEVEX1RPX05FV19RVUVVRQkoMHgxKSAvKiBsb3dlciBjc2IgZHdv cmQgKi8KLSNkZWZpbmUgR0VOMTJfQ1RYX1NXSVRDSF9ERVRBSUwoY3NiX2R3KQkoKGNzYl9kdykg JiAweEYpIC8qIHVwcGVyIGNzYiBkd29yZCAqLwotI2RlZmluZSBHRU4xMl9DU0JfU1dfQ1RYX0lE X01BU0sJCUdFTk1BU0soMjUsIDE1KQotI2RlZmluZSBHRU4xMl9JRExFX0NUWF9JRAkJMHg3RkYK LSNkZWZpbmUgR0VOMTJfQ1NCX0NUWF9WQUxJRChjc2JfZHcpIFwKLQkoRklFTERfR0VUKEdFTjEy X0NTQl9TV19DVFhfSURfTUFTSywgY3NiX2R3KSAhPSBHRU4xMl9JRExFX0NUWF9JRCkKLQotLyog VHlwaWNhbCBzaXplIG9mIHRoZSBhdmVyYWdlIHJlcXVlc3QgKDIgcGlwZWNvbnRyb2xzIGFuZCBh IE1JX0JCKSAqLwotI2RlZmluZSBFWEVDTElTVFNfUkVRVUVTVF9TSVpFIDY0IC8qIGJ5dGVzICov CiAjZGVmaW5lIFdBX1RBSUxfRFdPUkRTIDIKICNkZWZpbmUgV0FfVEFJTF9CWVRFUyAoc2l6ZW9m KHUzMikgKiBXQV9UQUlMX0RXT1JEUykKIApAQCAtMTg2LDM3ICsxNTgsNiBAQCBzdGF0aWMgdm9p ZCBscl9jb250ZXh0X2luaXRfcmVnX3N0YXRlKHUzMiAqcmVnX3N0YXRlLAogCQkJCSAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfcmluZyAqcmluZywKIAkJCQkgICAgICBib29sIGNsb3NlKTsKLXN0YXRpYyB2b2lk Ci1scl9jb250ZXh0X3VwZGF0ZV9yZWdfc3RhdGUoY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQg KmNlLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Ci0KLXN0 YXRpYyB2b2lkIG1hcmtfZWlvKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQotewotCWlmIChpOTE1 X3JlcXVlc3RfY29tcGxldGVkKHJxKSkKLQkJcmV0dXJuOwotCi0JR0VNX0JVR19PTihpOTE1X3Jl cXVlc3Rfc2lnbmFsZWQocnEpKTsKLQotCWRtYV9mZW5jZV9zZXRfZXJyb3IoJnJxLT5mZW5jZSwg LUVJTyk7Ci0JaTkxNV9yZXF1ZXN0X21hcmtfY29tcGxldGUocnEpOwotfQotCi1zdGF0aWMgc3Ry dWN0IGk5MTVfcmVxdWVzdCAqCi1hY3RpdmVfcmVxdWVzdChjb25zdCBzdHJ1Y3QgaW50ZWxfdGlt ZWxpbmUgKiBjb25zdCB0bCwgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IGk5 MTVfcmVxdWVzdCAqYWN0aXZlID0gcnE7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3Jf ZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHJxLCAmdGwtPnJlcXVlc3RzLCBsaW5rKSB7Ci0J CWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkKLQkJCWJyZWFrOwotCi0JCWFjdGl2ZSA9 IHJxOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXJldHVybiBhY3RpdmU7Ci19CiAKIHN0 YXRpYyBpbmxpbmUgdTMyIGludGVsX2h3c19wcmVlbXB0X2FkZHJlc3Moc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQogewpAQCAtMjI0LDE2NCArMTY1LDYgQEAgc3RhdGljIGlubGluZSB1 MzIgaW50ZWxfaHdzX3ByZWVtcHRfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCiAJCUk5MTVfR0VNX0hXU19QUkVFTVBUX0FERFIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZv aWQKLXJpbmdfc2V0X3BhdXNlZChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs IGludCBzdGF0ZSkKLXsKLQkvKgotCSAqIFdlIGluc3BlY3QgSFdTX1BSRUVNUFQgd2l0aCBhIHNl bWFwaG9yZSBpbnNpZGUKLQkgKiBlbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iLiBJZiB0aGUg ZHdvcmQgaXMgdHJ1ZSwKLQkgKiB0aGUgcmluZyBpcyBwYXVzZWQgYXMgdGhlIHNlbWFwaG9yZSB3 aWxsIGJ1c3l3YWl0Ci0JICogdW50aWwgdGhlIGR3b3JkIGlzIGZhbHNlLgotCSAqLwotCWVuZ2lu ZS0+c3RhdHVzX3BhZ2UuYWRkcltJOTE1X0dFTV9IV1NfUFJFRU1QVF0gPSBzdGF0ZTsKLQlpZiAo c3RhdGUpCi0JCXdtYigpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X3ByaW9saXN0 ICp0b19wcmlvbGlzdChzdHJ1Y3QgcmJfbm9kZSAqcmIpCi17Ci0JcmV0dXJuIHJiX2VudHJ5KHJi LCBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCwgbm9kZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJx X3ByaW8oY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCi17Ci0JcmV0dXJuIHJxLT5zY2hl ZC5hdHRyLnByaW9yaXR5OwotfQotCi1zdGF0aWMgaW50IGVmZmVjdGl2ZV9wcmlvKGNvbnN0IHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQotewotCWludCBwcmlvID0gcnFfcHJpbyhycSk7Ci0KLQkv KgotCSAqIElmIHRoaXMgcmVxdWVzdCBpcyBzcGVjaWFsIGFuZCBtdXN0IG5vdCBiZSBpbnRlcnJ1 cHRlZCBhdCBhbnkKLQkgKiBjb3N0LCBzbyBiZSBpdC4gTm90ZSB3ZSBhcmUgb25seSBjaGVja2lu ZyB0aGUgbW9zdCByZWNlbnQgcmVxdWVzdAotCSAqIGluIHRoZSBjb250ZXh0IGFuZCBzbyBtYXkg YmUgbWFza2luZyBhbiBlYXJsaWVyIHZpcCByZXF1ZXN0LiBJdAotCSAqIGlzIGhvcGVkIHRoYXQg dW5kZXIgdGhlIGNvbmRpdGlvbnMgd2hlcmUgbm9wcmVlbXB0IGlzIHVzZWQsIHRoaXMKLQkgKiB3 aWxsIG5vdCBtYXR0ZXIgKGkuZS4gYWxsIHJlcXVlc3RzIHRvIHRoYXQgY29udGV4dCB3aWxsIGJl Ci0JICogbm9wcmVlbXB0IGZvciBhcyBsb25nIGFzIGRlc2lyZWQpLgotCSAqLwotCWlmIChpOTE1 X3JlcXVlc3RfaGFzX25vcHJlZW1wdChycSkpCi0JCXByaW8gPSBJOTE1X1BSSU9SSVRZX1VOUFJF RU1QVEFCTEU7Ci0KLQkvKgotCSAqIE9uIHVud2luZGluZyB0aGUgYWN0aXZlIHJlcXVlc3QsIHdl IGdpdmUgaXQgYSBwcmlvcml0eSBidW1wCi0JICogaWYgaXQgaGFzIGNvbXBsZXRlZCB3YWl0aW5n IG9uIGFueSBzZW1hcGhvcmUuIElmIHdlIGtub3cgdGhhdAotCSAqIHRoZSByZXF1ZXN0IGhhcyBh bHJlYWR5IHN0YXJ0ZWQsIHdlIGNhbiBwcmV2ZW50IGFuIHVud2FudGVkCi0JICogcHJlZW1wdC10 by1pZGxlIGN5Y2xlIGJ5IHRha2luZyB0aGF0IGludG8gYWNjb3VudCBub3cuCi0JICovCi0JaWYg KF9faTkxNV9yZXF1ZXN0X2hhc19zdGFydGVkKHJxKSkKLQkJcHJpbyB8PSBJOTE1X1BSSU9SSVRZ X05PU0VNQVBIT1JFOwotCi0JLyogUmVzdHJpY3QgbWVyZSBXQUlUIGJvb3N0cyBmcm9tIHRyaWdn ZXJpbmcgcHJlZW1wdGlvbiAqLwotCUJVSUxEX0JVR19PTihfX05PX1BSRUVNUFRJT04gJiB+STkx NV9QUklPUklUWV9NQVNLKTsgLyogb25seSBpbnRlcm5hbCAqLwotCXJldHVybiBwcmlvIHwgX19O T19QUkVFTVBUSU9OOwotfQotCi1zdGF0aWMgaW50IHF1ZXVlX3ByaW8oY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cykKLXsKLQlzdHJ1Y3QgaTkxNV9wcmlvbGlz dCAqcDsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmI7Ci0KLQlyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhl Y2xpc3RzLT5xdWV1ZSk7Ci0JaWYgKCFyYikKLQkJcmV0dXJuIElOVF9NSU47Ci0KLQkvKgotCSAq IEFzIHRoZSBwcmlvbGlzdFtdIGFyZSBpbnZlcnRlZCwgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0 eSBpbiBbMF0sCi0JICogd2UgaGF2ZSB0byBmbGlwIHRoZSBpbmRleCB2YWx1ZSB0byBiZWNvbWUg cHJpb3JpdHkuCi0JICovCi0JcCA9IHRvX3ByaW9saXN0KHJiKTsKLQlyZXR1cm4gKChwLT5wcmlv cml0eSArIDEpIDw8IEk5MTVfVVNFUl9QUklPUklUWV9TSElGVCkgLSBmZnMocC0+dXNlZCk7Ci19 Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3ByZWVtcHQoY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAotCQkJCWNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAotCQkJ CXN0cnVjdCByYl9ub2RlICpyYikKLXsKLQlpbnQgbGFzdF9wcmlvOwotCi0JaWYgKCFpbnRlbF9l bmdpbmVfaGFzX3NlbWFwaG9yZXMoZW5naW5lKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyoKLQkg KiBDaGVjayBpZiB0aGUgY3VycmVudCBwcmlvcml0eSBoaW50IG1lcml0cyBhIHByZWVtcHRpb24g YXR0ZW1wdC4KLQkgKgotCSAqIFdlIHJlY29yZCB0aGUgaGlnaGVzdCB2YWx1ZSBwcmlvcml0eSB3 ZSBzYXcgZHVyaW5nIHJlc2NoZWR1bGluZwotCSAqIHByaW9yIHRvIHRoaXMgZGVxdWV1ZSwgdGhl cmVmb3JlIHdlIGtub3cgdGhhdCBpZiBpdCBpcyBzdHJpY3RseQotCSAqIGxlc3MgdGhhbiB0aGUg Y3VycmVudCB0YWlsIG9mIEVTTFBbMF0sIHdlIGRvIG5vdCBuZWVkIHRvIGZvcmNlCi0JICogYSBw cmVlbXB0LXRvLWlkbGUgY3ljbGUuCi0JICoKLQkgKiBIb3dldmVyLCB0aGUgcHJpb3JpdHkgaGlu dCBpcyBhIG1lcmUgaGludCB0aGF0IHdlIG1heSBuZWVkIHRvCi0JICogcHJlZW1wdC4gSWYgdGhh dCBoaW50IGlzIHN0YWxlIG9yIHdlIG1heSBiZSB0cnlpbmcgdG8gcHJlZW1wdAotCSAqIG91cnNl bHZlcywgaWdub3JlIHRoZSByZXF1ZXN0LgotCSAqCi0JICogTW9yZSBuYXR1cmFsbHkgd2Ugd291 bGQgd3JpdGUKLQkgKiAgICAgIHByaW8gPj0gbWF4KDAsIGxhc3QpOwotCSAqIGV4Y2VwdCB0aGF0 IHdlIHdpc2ggdG8gcHJldmVudCB0cmlnZ2VyaW5nIHByZWVtcHRpb24gYXQgdGhlIHNhbWUKLQkg KiBwcmlvcml0eSBsZXZlbDogdGhlIHRhc2sgdGhhdCBpcyBydW5uaW5nIHNob3VsZCByZW1haW4g cnVubmluZwotCSAqIHRvIHByZXNlcnZlIEZJRk8gb3JkZXJpbmcgb2YgZGVwZW5kZW5jaWVzLgot CSAqLwotCWxhc3RfcHJpbyA9IG1heChlZmZlY3RpdmVfcHJpbyhycSksIEk5MTVfUFJJT1JJVFlf Tk9STUFMIC0gMSk7Ci0JaWYgKGVuZ2luZS0+ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQg PD0gbGFzdF9wcmlvKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKgotCSAqIENoZWNrIGFnYWluc3Qg dGhlIGZpcnN0IHJlcXVlc3QgaW4gRUxTUFsxXSwgaXQgd2lsbCwgdGhhbmtzIHRvIHRoZQotCSAq IHBvd2VyIG9mIFBJLCBiZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBvZiB0aGF0IGNvbnRleHQuCi0J ICovCi0JaWYgKCFsaXN0X2lzX2xhc3QoJnJxLT5zY2hlZC5saW5rLCAmZW5naW5lLT5hY3RpdmUu cmVxdWVzdHMpICYmCi0JICAgIHJxX3ByaW8obGlzdF9uZXh0X2VudHJ5KHJxLCBzY2hlZC5saW5r KSkgPiBsYXN0X3ByaW8pCi0JCXJldHVybiB0cnVlOwotCi0JaWYgKHJiKSB7Ci0JCXN0cnVjdCBp bnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUgPQotCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBu b2Rlc1tlbmdpbmUtPmlkXS5yYik7Ci0JCWJvb2wgcHJlZW1wdCA9IGZhbHNlOwotCi0JCWlmIChl bmdpbmUgPT0gdmUtPnNpYmxpbmdzWzBdKSB7IC8qIG9ubHkgcHJlZW1wdCBvbmUgc2libGluZyAq LwotCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqbmV4dDsKLQotCQkJcmN1X3JlYWRfbG9jaygpOwot CQkJbmV4dCA9IFJFQURfT05DRSh2ZS0+cmVxdWVzdCk7Ci0JCQlpZiAobmV4dCkKLQkJCQlwcmVl bXB0ID0gcnFfcHJpbyhuZXh0KSA+IGxhc3RfcHJpbzsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwot CQl9Ci0KLQkJaWYgKHByZWVtcHQpCi0JCQlyZXR1cm4gcHJlZW1wdDsKLQl9Ci0KLQkvKgotCSAq IElmIHRoZSBpbmZsaWdodCBjb250ZXh0IGRpZCBub3QgdHJpZ2dlciB0aGUgcHJlZW1wdGlvbiwg dGhlbiBtYXliZQotCSAqIGl0IHdhcyB0aGUgc2V0IG9mIHF1ZXVlZCByZXF1ZXN0cz8gUGljayB0 aGUgaGlnaGVzdCBwcmlvcml0eSBpbgotCSAqIHRoZSBxdWV1ZSAodGhlIGZpcnN0IGFjdGl2ZSBw cmlvbGlzdCkgYW5kIHNlZSBpZiBpdCBkZXNlcnZlcyB0byBiZQotCSAqIHJ1bm5pbmcgaW5zdGVh ZCBvZiBFTFNQWzBdLgotCSAqCi0JICogVGhlIGhpZ2hlc3QgcHJpb3JpdHkgcmVxdWVzdCBpbiB0 aGUgcXVldWUgY2FuIG5vdCBiZSBlaXRoZXIKLQkgKiBFTFNQWzBdIG9yIEVMU1BbMV0gYXMsIHRo YW5rcyBhZ2FpbiB0byBQSSwgaWYgaXQgd2FzIHRoZSBzYW1lCi0JICogY29udGV4dCwgaXQncyBw cmlvcml0eSB3b3VsZCBub3QgZXhjZWVkIEVMU1BbMF0gYWthIGxhc3RfcHJpby4KLQkgKi8KLQly ZXR1cm4gcXVldWVfcHJpbygmZW5naW5lLT5leGVjbGlzdHMpID4gbGFzdF9wcmlvOwotfQotCi1f X21heWJlX3VudXNlZCBzdGF0aWMgaW5saW5lIGJvb2wKLWFzc2VydF9wcmlvcml0eV9xdWV1ZShj b25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpwcmV2LAotCQkgICAgICBjb25zdCBzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpuZXh0KQotewotCS8qCi0JICogV2l0aG91dCBwcmVlbXB0aW9uLCB0aGUgcHJl diBtYXkgcmVmZXIgdG8gdGhlIHN0aWxsIGFjdGl2ZSBlbGVtZW50Ci0JICogd2hpY2ggd2UgcmVm dXNlIHRvIGxldCBnby4KLQkgKgotCSAqIEV2ZW4gd2l0aCBwcmVlbXB0aW9uLCB0aGVyZSBhcmUg dGltZXMgd2hlbiB3ZSB0aGluayBpdCBpcyBiZXR0ZXIgbm90Ci0JICogdG8gcHJlZW1wdCBhbmQg bGVhdmUgYW4gb3N0ZW5zaWJseSBsb3dlciBwcmlvcml0eSByZXF1ZXN0IGluIGZsaWdodC4KLQkg Ki8KLQlpZiAoaTkxNV9yZXF1ZXN0X2lzX2FjdGl2ZShwcmV2KSkKLQkJcmV0dXJuIHRydWU7Ci0K LQlyZXR1cm4gcnFfcHJpbyhwcmV2KSA+PSBycV9wcmlvKG5leHQpOwotfQotCiAvKgogICogVGhl IGNvbnRleHQgZGVzY3JpcHRvciBlbmNvZGVzIHZhcmlvdXMgYXR0cmlidXRlcyBvZiBhIGNvbnRl eHQsCiAgKiBpbmNsdWRpbmcgaXRzIEdUVCBhZGRyZXNzIGFuZCBzb21lIGZsYWdzLiBCZWNhdXNl IGl0J3MgZmFpcmx5CkBAIC04MDEsMTQ1ICs1ODQsNyBAQCB1MzIgKmludGVsX2xyX2NvbnRleHRf c2V0X3JlZ2lzdGVyX29mZnNldHModTMyICpyZWdzLAogCXJldHVybiBzZXRfb2Zmc2V0cyhyZWdz LCByZWdfb2Zmc2V0cyhlbmdpbmUpLCBlbmdpbmUpOwogfQogCi1zdGF0aWMgc3RydWN0IGk5MTVf cmVxdWVzdCAqCi1fX3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKLXsKLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgKnJuLCAqYWN0aXZl ID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp1bmluaXRpYWxpemVkX3ZhcihwbCk7Ci0JaW50 IHByaW8gPSBJOTE1X1BSSU9SSVRZX0lOVkFMSUQ7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZl bmdpbmUtPmFjdGl2ZS5sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNl KHJxLCBybiwKLQkJCQkJICZlbmdpbmUtPmFjdGl2ZS5yZXF1ZXN0cywKLQkJCQkJIHNjaGVkLmxp bmspIHsKLQkJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQotCQkJY29udGludWU7IC8q IFhYWCAqLwotCi0JCV9faTkxNV9yZXF1ZXN0X3Vuc3VibWl0KHJxKTsKLQotCQkvKgotCQkgKiBQ dXNoIHRoZSByZXF1ZXN0IGJhY2sgaW50byB0aGUgcXVldWUgZm9yIGxhdGVyIHJlc3VibWlzc2lv bi4KLQkJICogSWYgdGhpcyByZXF1ZXN0IGlzIG5vdCBuYXRpdmUgdG8gdGhpcyBwaHlzaWNhbCBl bmdpbmUgKGkuZS4KLQkJICogaXQgY2FtZSBmcm9tIGEgdmlydHVhbCBzb3VyY2UpLCBwdXNoIGl0 IGJhY2sgb250byB0aGUgdmlydHVhbAotCQkgKiBlbmdpbmUgc28gdGhhdCBpdCBjYW4gYmUgbW92 ZWQgYWNyb3NzIG9udG8gYW5vdGhlciBwaHlzaWNhbAotCQkgKiBlbmdpbmUgYXMgbG9hZCBkaWN0 YXRlcy4KLQkJICovCi0JCWlmIChsaWtlbHkocnEtPmV4ZWN1dGlvbl9tYXNrID09IGVuZ2luZS0+ bWFzaykpIHsKLQkJCUdFTV9CVUdfT04ocnFfcHJpbyhycSkgPT0gSTkxNV9QUklPUklUWV9JTlZB TElEKTsKLQkJCWlmIChycV9wcmlvKHJxKSAhPSBwcmlvKSB7Ci0JCQkJcHJpbyA9IHJxX3ByaW8o cnEpOwotCQkJCXBsID0gaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlvKTsK LQkJCX0KLQkJCUdFTV9CVUdfT04oUkJfRU1QVFlfUk9PVCgmZW5naW5lLT5leGVjbGlzdHMucXVl dWUucmJfcm9vdCkpOwotCi0JCQlsaXN0X21vdmUoJnJxLT5zY2hlZC5saW5rLCBwbCk7Ci0JCQlh Y3RpdmUgPSBycTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm93bmVy ID0gcnEtPmh3X2NvbnRleHQtPmVuZ2luZTsKLQotCQkJLyoKLQkJCSAqIERlY291cGxlIHRoZSB2 aXJ0dWFsIGJyZWFkY3J1bWIgYmVmb3JlIG1vdmluZyBpdAotCQkJICogYmFjayB0byB0aGUgdmly dHVhbCBlbmdpbmUgLS0gd2UgZG9uJ3Qgd2FudCB0aGUKLQkJCSAqIHJlcXVlc3QgdG8gY29tcGxl dGUgaW4gdGhlIGJhY2tncm91bmQgYW5kIHRyeQotCQkJICogYW5kIGNhbmNlbCB0aGUgYnJlYWRj cnVtYiBvbiB0aGUgdmlydHVhbCBlbmdpbmUKLQkJCSAqIChpbnN0ZWFkIG9mIHRoZSBvbGQgZW5n aW5lIHdoZXJlIGl0IGlzIGxpbmtlZCkhCi0JCQkgKi8KLQkJCWlmICh0ZXN0X2JpdChETUFfRkVO Q0VfRkxBR19FTkFCTEVfU0lHTkFMX0JJVCwKLQkJCQkgICAgICZycS0+ZmVuY2UuZmxhZ3MpKSB7 Ci0JCQkJc3Bpbl9sb2NrX25lc3RlZCgmcnEtPmxvY2ssCi0JCQkJCQkgU0lOR0xFX0RFUFRIX05F U1RJTkcpOwotCQkJCWk5MTVfcmVxdWVzdF9jYW5jZWxfYnJlYWRjcnVtYihycSk7Ci0JCQkJc3Bp bl91bmxvY2soJnJxLT5sb2NrKTsKLQkJCX0KLQkJCXJxLT5lbmdpbmUgPSBvd25lcjsKLQkJCW93 bmVyLT5zdWJtaXRfcmVxdWVzdChycSk7Ci0JCQlhY3RpdmUgPSBOVUxMOwotCQl9Ci0JfQotCi0J cmV0dXJuIGFjdGl2ZTsKLX0KLQotc3RydWN0IGk5MTVfcmVxdWVzdCAqCi1leGVjbGlzdHNfdW53 aW5kX2luY29tcGxldGVfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4 ZWNsaXN0cykKLXsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPQotCQljb250YWlu ZXJfb2YoZXhlY2xpc3RzLCB0eXBlb2YoKmVuZ2luZSksIGV4ZWNsaXN0cyk7Ci0KLQlyZXR1cm4g X191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhlbmdpbmUpOwotfQotCi1zdGF0aWMgaW5saW5l IHZvaWQKLWV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19jaGFuZ2Uoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsIHVuc2lnbmVkIGxvbmcgc3RhdHVzKQotewotCS8qCi0JICogT25seSB1c2VkIHdoZW4g R1ZULWcgaXMgZW5hYmxlZCBub3cuIFdoZW4gR1ZULWcgaXMgZGlzYWJsZWQsCi0JICogVGhlIGNv bXBpbGVyIHNob3VsZCBlbGltaW5hdGUgdGhpcyBmdW5jdGlvbiBhcyBkZWFkLWNvZGUuCi0JICov Ci0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9HVlQpKQotCQlyZXR1cm47Ci0KLQlh dG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmcnEtPmVuZ2luZS0+Y29udGV4dF9zdGF0dXNfbm90 aWZpZXIsCi0JCQkJICAgc3RhdHVzLCBycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2VuZ2lu ZV9jb250ZXh0X2luKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQl1bnNpZ25l ZCBsb25nIGZsYWdzOwotCi0JaWYgKFJFQURfT05DRShlbmdpbmUtPnN0YXRzLmVuYWJsZWQpID09 IDApCi0JCXJldHVybjsKLQotCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmZW5naW5lLT5zdGF0cy5s b2NrLCBmbGFncyk7Ci0KLQlpZiAoZW5naW5lLT5zdGF0cy5lbmFibGVkID4gMCkgewotCQlpZiAo ZW5naW5lLT5zdGF0cy5hY3RpdmUrKyA9PSAwKQotCQkJZW5naW5lLT5zdGF0cy5zdGFydCA9IGt0 aW1lX2dldCgpOwotCQlHRU1fQlVHX09OKGVuZ2luZS0+c3RhdHMuYWN0aXZlID09IDApOwotCX0K LQotCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPnN0YXRzLmxvY2ssIGZsYWdz KTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfZW5naW5lX2NvbnRleHRfb3V0KHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKFJF QURfT05DRShlbmdpbmUtPnN0YXRzLmVuYWJsZWQpID09IDApCi0JCXJldHVybjsKLQotCXdyaXRl X3NlcWxvY2tfaXJxc2F2ZSgmZW5naW5lLT5zdGF0cy5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZW5n aW5lLT5zdGF0cy5lbmFibGVkID4gMCkgewotCQlrdGltZV90IGxhc3Q7Ci0KLQkJaWYgKGVuZ2lu ZS0+c3RhdHMuYWN0aXZlICYmIC0tZW5naW5lLT5zdGF0cy5hY3RpdmUgPT0gMCkgewotCQkJLyoK LQkJCSAqIERlY3JlbWVudCB0aGUgYWN0aXZlIGNvbnRleHQgY291bnQgYW5kIGluIGNhc2UgR1BV Ci0JCQkgKiBpcyBub3cgaWRsZSBhZGQgdXAgdG8gdGhlIHJ1bm5pbmcgdG90YWwuCi0JCQkgKi8K LQkJCWxhc3QgPSBrdGltZV9zdWIoa3RpbWVfZ2V0KCksIGVuZ2luZS0+c3RhdHMuc3RhcnQpOwot Ci0JCQllbmdpbmUtPnN0YXRzLnRvdGFsID0ga3RpbWVfYWRkKGVuZ2luZS0+c3RhdHMudG90YWws Ci0JCQkJCQkJbGFzdCk7Ci0JCX0gZWxzZSBpZiAoZW5naW5lLT5zdGF0cy5hY3RpdmUgPT0gMCkg ewotCQkJLyoKLQkJCSAqIEFmdGVyIHR1cm5pbmcgb24gZW5naW5lIHN0YXRzLCBjb250ZXh0IG91 dCBtaWdodCBiZQotCQkJICogdGhlIGZpcnN0IGV2ZW50IGluIHdoaWNoIGNhc2Ugd2UgYWNjb3Vu dCBmcm9tIHRoZQotCQkJICogdGltZSBzdGF0cyBnYXRoZXJpbmcgd2FzIHR1cm5lZCBvbi4KLQkJ CSAqLwotCQkJbGFzdCA9IGt0aW1lX3N1YihrdGltZV9nZXQoKSwgZW5naW5lLT5zdGF0cy5lbmFi bGVkX2F0KTsKLQotCQkJZW5naW5lLT5zdGF0cy50b3RhbCA9IGt0aW1lX2FkZChlbmdpbmUtPnN0 YXRzLnRvdGFsLAotCQkJCQkJCWxhc3QpOwotCQl9Ci0JfQotCi0Jd3JpdGVfc2VxdW5sb2NrX2ly cXJlc3RvcmUoJmVuZ2luZS0+c3RhdHMubG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGxy Y19yaW5nX21pX21vZGUoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoraW50 IGludGVsX2xyY19yaW5nX21pX21vZGUoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQogewogCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKIAkJcmV0dXJuIDB4 NjA7CkBAIC05NTEsMTM5NiArNTk2LDE3IEBAIHN0YXRpYyBpbnQgbHJjX3JpbmdfbWlfbW9kZShj b25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCXJldHVybiAtMTsKIH0KIAot c3RhdGljIHZvaWQKLWV4ZWNsaXN0c19jaGVja19jb250ZXh0KGNvbnN0IHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSwKLQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsK LQljb25zdCBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9IGNlLT5yaW5nOwotCXUzMiAqcmVncyA9 IGNlLT5scmNfcmVnX3N0YXRlOwotCWJvb2wgdmFsaWQgPSB0cnVlOwotCWludCB4OwotCi0JaWYg KHJlZ3NbQ1RYX1JJTkdfU1RBUlRdICE9IGk5MTVfZ2d0dF9vZmZzZXQocmluZy0+dm1hKSkgewot CQlwcl9lcnIoIiVzOiBjb250ZXh0IHN1Ym1pdHRlZCB3aXRoIGluY29ycmVjdCBSSU5HX1NUQVJU IFslMDh4XSwgZXhwZWN0ZWQgJTA4eFxuIiwKLQkJICAgICAgIGVuZ2luZS0+bmFtZSwKLQkJICAg ICAgIHJlZ3NbQ1RYX1JJTkdfU1RBUlRdLAotCQkgICAgICAgaTkxNV9nZ3R0X29mZnNldChyaW5n LT52bWEpKTsKLQkJcmVnc1tDVFhfUklOR19TVEFSVF0gPSBpOTE1X2dndHRfb2Zmc2V0KHJpbmct PnZtYSk7Ci0JCXZhbGlkID0gZmFsc2U7Ci0JfQotCi0JaWYgKChyZWdzW0NUWF9SSU5HX0NUTF0g JiB+KFJJTkdfV0FJVCB8IFJJTkdfV0FJVF9TRU1BUEhPUkUpKSAhPQotCSAgICAoUklOR19DVExf U0laRShyaW5nLT5zaXplKSB8IFJJTkdfVkFMSUQpKSB7Ci0JCXByX2VycigiJXM6IGNvbnRleHQg c3VibWl0dGVkIHdpdGggaW5jb3JyZWN0IFJJTkdfQ1RMIFslMDh4XSwgZXhwZWN0ZWQgJTA4eFxu IiwKLQkJICAgICAgIGVuZ2luZS0+bmFtZSwKLQkJICAgICAgIHJlZ3NbQ1RYX1JJTkdfQ1RMXSwK LQkJICAgICAgICh1MzIpKFJJTkdfQ1RMX1NJWkUocmluZy0+c2l6ZSkgfCBSSU5HX1ZBTElEKSk7 Ci0JCXJlZ3NbQ1RYX1JJTkdfQ1RMXSA9IFJJTkdfQ1RMX1NJWkUocmluZy0+c2l6ZSkgfCBSSU5H X1ZBTElEOwotCQl2YWxpZCA9IGZhbHNlOwotCX0KLQotCXggPSBscmNfcmluZ19taV9tb2RlKGVu Z2luZSk7Ci0JaWYgKHggIT0gLTEgJiYgcmVnc1t4ICsgMV0gJiAocmVnc1t4ICsgMV0gPj4gMTYp ICYgU1RPUF9SSU5HKSB7Ci0JCXByX2VycigiJXM6IGNvbnRleHQgc3VibWl0dGVkIHdpdGggU1RP UF9SSU5HIFslMDh4XSBpbiBSSU5HX01JX01PREVcbiIsCi0JCSAgICAgICBlbmdpbmUtPm5hbWUs IHJlZ3NbeCArIDFdKTsKLQkJcmVnc1t4ICsgMV0gJj0gflNUT1BfUklORzsKLQkJcmVnc1t4ICsg MV0gfD0gU1RPUF9SSU5HIDw8IDE2OwotCQl2YWxpZCA9IGZhbHNlOwotCX0KLQotCVdBUk5fT05D RSghdmFsaWQsICJJbnZhbGlkIGxyYyBzdGF0ZSBmb3VuZCBiZWZvcmUgc3VibWlzc2lvblxuIik7 Ci19Ci0KLXN0YXRpYyB2b2lkIGxyX2NvbnRleHRfcmVzdG9yZV9kZWZhdWx0X3N0YXRlKHN0cnVj dCBpbnRlbF9jb250ZXh0ICpjZSwKLQkJCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCit2b2lkIGludGVsX2xyX2NvbnRleHRfcmVzdG9yZV9kZWZhdWx0X3N0YXRlKHN0cnVj dCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKIHsKIAl1MzIgKnJlZ3MgPSBjZS0+bHJjX3JlZ19zdGF0ZTsKIAotCWlmIChlbmdpbmUt PnBpbm5lZF9kZWZhdWx0X3N0YXRlKQotCQltZW1jcHkocmVncywgLyogc2tpcCByZXN0b3Jpbmcg dGhlIHZhbmlsbGEgUFBIV1NQICovCi0JCSAgICAgICBlbmdpbmUtPnBpbm5lZF9kZWZhdWx0X3N0 YXRlICsgTFJDX1NUQVRFX1BOICogUEFHRV9TSVpFLAotCQkgICAgICAgZW5naW5lLT5jb250ZXh0 X3NpemUgLSBQQUdFX1NJWkUpOwotCi0JbHJfY29udGV4dF9pbml0X3JlZ19zdGF0ZShyZWdzLCBj ZSwgZW5naW5lLCBjZS0+cmluZywgZmFsc2UpOwotfQotCi1zdGF0aWMgdm9pZCByZXNldF9hY3Rp dmUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCi0JCQkgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQotewotCXN0cnVjdCBpbnRlbF9jb250ZXh0ICogY29uc3QgY2UgPSBycS0+aHdfY29u dGV4dDsKLQl1MzIgaGVhZDsKLQotCS8qCi0JICogVGhlIGV4ZWN1dGluZyBjb250ZXh0IGhhcyBi ZWVuIGNhbmNlbGxlZC4gV2Ugd2FudCB0byBwcmV2ZW50Ci0JICogZnVydGhlciBleGVjdXRpb24g YWxvbmcgdGhpcyBjb250ZXh0IGFuZCBwcm9wYWdhdGUgdGhlIGVycm9yIG9uCi0JICogdG8gYW55 dGhpbmcgZGVwZW5kaW5nIG9uIGl0cyByZXN1bHRzLgotCSAqCi0JICogSW4gX19pOTE1X3JlcXVl c3Rfc3VibWl0KCksIHdlIGFwcGx5IHRoZSAtRUlPIGFuZCByZW1vdmUgdGhlCi0JICogcmVxdWVz dHMnIHBheWxvYWRzIGZvciBhbnkgYmFubmVkIHJlcXVlc3RzLiBCdXQgZmlyc3QsIHdlIG11c3QK LQkgKiByZXdpbmQgdGhlIGNvbnRleHQgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIGluY29tcGxl dGUgcmVxdWVzdCBzbwotCSAqIHRoYXQgd2UgZG8gbm90IGp1bXAgYmFjayBpbnRvIHRoZSBtaWRk bGUgb2YgdGhlIGJhdGNoLgotCSAqCi0JICogV2UgcHJlc2VydmUgdGhlIGJyZWFkY3J1bWJzIGFu ZCBzZW1hcGhvcmVzIG9mIHRoZSBpbmNvbXBsZXRlCi0JICogcmVxdWVzdHMgc28gdGhhdCBpbnRl ci10aW1lbGluZSBkZXBlbmRlbmNpZXMgKGkuZSBvdGhlciB0aW1lbGluZXMpCi0JICogcmVtYWlu IGNvcnJlY3RseSBvcmRlcmVkLiBBbmQgd2UgZGVmZXIgdG8gX19pOTE1X3JlcXVlc3Rfc3VibWl0 KCkKLQkgKiBzbyB0aGF0IGFsbCBhc3luY2hyb25vdXMgd2FpdHMgYXJlIGNvcnJlY3RseSBoYW5k bGVkLgotCSAqLwotCUdFTV9UUkFDRSgiJXMoJXMpOiB7IHJxPSVsbHg6JWxsZCB9XG4iLAotCQkg IF9fZnVuY19fLCBlbmdpbmUtPm5hbWUsIHJxLT5mZW5jZS5jb250ZXh0LCBycS0+ZmVuY2Uuc2Vx bm8pOwotCi0JLyogT24gcmVzdWJtaXNzaW9uIG9mIHRoZSBhY3RpdmUgcmVxdWVzdCwgcGF5bG9h ZCB3aWxsIGJlIHNjcnViYmVkICovCi0JaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQot CQloZWFkID0gcnEtPnRhaWw7Ci0JZWxzZQotCQloZWFkID0gYWN0aXZlX3JlcXVlc3QoY2UtPnRp bWVsaW5lLCBycSktPmhlYWQ7Ci0JY2UtPnJpbmctPmhlYWQgPSBpbnRlbF9yaW5nX3dyYXAoY2Ut PnJpbmcsIGhlYWQpOwotCWludGVsX3JpbmdfdXBkYXRlX3NwYWNlKGNlLT5yaW5nKTsKLQotCS8q IFNjcnViIHRoZSBjb250ZXh0IGltYWdlIHRvIHByZXZlbnQgcmVwbGF5aW5nIHRoZSBwcmV2aW91 cyBiYXRjaCAqLwotCWxyX2NvbnRleHRfcmVzdG9yZV9kZWZhdWx0X3N0YXRlKGNlLCBlbmdpbmUp OwotCWxyX2NvbnRleHRfdXBkYXRlX3JlZ19zdGF0ZShjZSwgZW5naW5lKTsKLQotCS8qIFdlJ3Zl IHN3aXRjaGVkIGF3YXksIHNvIHRoaXMgc2hvdWxkIGJlIGEgbm8tb3AsIGJ1dCBpbnRlbnQgbWF0 dGVycyAqLwotCWNlLT5scmNfZGVzYyB8PSBDVFhfREVTQ19GT1JDRV9SRVNUT1JFOwotfQotCi1z dGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgotX19leGVjbGlzdHNfc2NoZWR1 bGVfaW4oc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9j cyAqIGNvbnN0IGVuZ2luZSA9IHJxLT5lbmdpbmU7Ci0Jc3RydWN0IGludGVsX2NvbnRleHQgKiBj b25zdCBjZSA9IHJxLT5od19jb250ZXh0OwotCi0JaW50ZWxfY29udGV4dF9nZXQoY2UpOwotCi0J aWYgKHVubGlrZWx5KGk5MTVfZ2VtX2NvbnRleHRfaXNfYmFubmVkKGNlLT5nZW1fY29udGV4dCkp KQotCQlyZXNldF9hY3RpdmUocnEsIGVuZ2luZSk7Ci0KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdf RFJNX0k5MTVfREVCVUdfR0VNKSkKLQkJZXhlY2xpc3RzX2NoZWNrX2NvbnRleHQoY2UsIGVuZ2lu ZSk7Ci0KLQlpZiAoY2UtPnRhZykgewotCQkvKiBVc2UgYSBmaXhlZCB0YWcgZm9yIE9BIGFuZCBm cmllbmRzICovCi0JCWNlLT5scmNfZGVzYyB8PSAodTY0KWNlLT50YWcgPDwgMzI7Ci0JfSBlbHNl IHsKLQkJLyogV2UgZG9uJ3QgbmVlZCBhIHN0cmljdCBtYXRjaGluZyB0YWcsIGp1c3QgZGlmZmVy ZW50IHZhbHVlcyAqLwotCQljZS0+bHJjX2Rlc2MgJj0gfkdFTk1BU0tfVUxMKDQ3LCAzNyk7Ci0J CWNlLT5scmNfZGVzYyB8PQotCQkJKHU2NCkoZW5naW5lLT5jb250ZXh0X3RhZysrICUgTlVNX0NP TlRFWFRfVEFHKSA8PAotCQkJR0VOMTFfU1dfQ1RYX0lEX1NISUZUOwotCQlCVUlMRF9CVUdfT04o TlVNX0NPTlRFWFRfVEFHID4gR0VOMTJfTUFYX0NPTlRFWFRfSFdfSUQpOwotCX0KLQotCV9faW50 ZWxfZ3RfcG1fZ2V0KGVuZ2luZS0+Z3QpOwotCWV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19jaGFu Z2UocnEsIElOVEVMX0NPTlRFWFRfU0NIRURVTEVfSU4pOwotCWludGVsX2VuZ2luZV9jb250ZXh0 X2luKGVuZ2luZSk7Ci0KLQlyZXR1cm4gZW5naW5lOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVj dCBpOTE1X3JlcXVlc3QgKgotZXhlY2xpc3RzX3NjaGVkdWxlX2luKHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxLCBpbnQgaWR4KQotewotCXN0cnVjdCBpbnRlbF9jb250ZXh0ICogY29uc3QgY2UgPSBy cS0+aHdfY29udGV4dDsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpvbGQ7Ci0KLQlHRU1fQlVH X09OKCFpbnRlbF9lbmdpbmVfcG1faXNfYXdha2UocnEtPmVuZ2luZSkpOwotCXRyYWNlX2k5MTVf cmVxdWVzdF9pbihycSwgaWR4KTsKLQotCW9sZCA9IFJFQURfT05DRShjZS0+aW5mbGlnaHQpOwot CWRvIHsKLQkJaWYgKCFvbGQpIHsKLQkJCVdSSVRFX09OQ0UoY2UtPmluZmxpZ2h0LCBfX2V4ZWNs aXN0c19zY2hlZHVsZV9pbihycSkpOwotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlICghdHJ5X2Nt cHhjaGcoJmNlLT5pbmZsaWdodCwgJm9sZCwgcHRyX2luYyhvbGQpKSk7Ci0KLQlHRU1fQlVHX09O KGludGVsX2NvbnRleHRfaW5mbGlnaHQoY2UpICE9IHJxLT5lbmdpbmUpOwotCXJldHVybiBpOTE1 X3JlcXVlc3RfZ2V0KHJxKTsKLX0KLQotc3RhdGljIHZvaWQga2lja19zaWJsaW5ncyhzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwgc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQotewotCXN0cnVjdCBp bnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUgPQotCQljb250YWluZXJfb2YoY2UsIHR5cGVvZigqdmUp LCBjb250ZXh0KTsKLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpuZXh0ID0gUkVBRF9PTkNFKHZlLT5y ZXF1ZXN0KTsKLQotCWlmIChuZXh0ICYmIG5leHQtPmV4ZWN1dGlvbl9tYXNrICYgfnJxLT5leGVj dXRpb25fbWFzaykKLQkJdGFza2xldF9zY2hlZHVsZSgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2ts ZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9fZXhlY2xpc3RzX3NjaGVkdWxlX291dChz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKLQkJCSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICogY29u c3QgZW5naW5lKQotewotCXN0cnVjdCBpbnRlbF9jb250ZXh0ICogY29uc3QgY2UgPSBycS0+aHdf Y29udGV4dDsKLQotCS8qCi0JICogTkIgcHJvY2Vzc19jc2IoKSBpcyBub3QgdW5kZXIgdGhlIGVu Z2luZS0+YWN0aXZlLmxvY2sgYW5kIGhlbmNlCi0JICogc2NoZWR1bGVfb3V0IGNhbiByYWNlIHdp dGggc2NoZWR1bGVfaW4gbWVhbmluZyB0aGF0IHdlIHNob3VsZAotCSAqIHJlZnJhaW4gZnJvbSBk b2luZyBub24tdHJpdmlhbCB3b3JrIGhlcmUuCi0JICovCi0KLQkvKgotCSAqIElmIHdlIGhhdmUg anVzdCBjb21wbGV0ZWQgdGhpcyBjb250ZXh0LCB0aGUgZW5naW5lIG1heSBub3cgYmUKLQkgKiBp ZGxlIGFuZCB3ZSB3YW50IHRvIHJlLWVudGVyIHBvd2Vyc2F2aW5nLgotCSAqLwotCWlmIChsaXN0 X2lzX2xhc3QoJnJxLT5saW5rLCAmY2UtPnRpbWVsaW5lLT5yZXF1ZXN0cykgJiYKLQkgICAgaTkx NV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpCi0JCWludGVsX2VuZ2luZV9hZGRfcmV0aXJlKGVuZ2lu ZSwgY2UtPnRpbWVsaW5lKTsKLQotCWludGVsX2VuZ2luZV9jb250ZXh0X291dChlbmdpbmUpOwot CWV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19jaGFuZ2UocnEsIElOVEVMX0NPTlRFWFRfU0NIRURV TEVfT1VUKTsKLQlpbnRlbF9ndF9wbV9wdXRfYXN5bmMoZW5naW5lLT5ndCk7Ci0KLQkvKgotCSAq IElmIHRoaXMgaXMgcGFydCBvZiBhIHZpcnR1YWwgZW5naW5lLCBpdHMgbmV4dCByZXF1ZXN0IG1h eQotCSAqIGhhdmUgYmVlbiBibG9ja2VkIHdhaXRpbmcgZm9yIGFjY2VzcyB0byB0aGUgYWN0aXZl IGNvbnRleHQuCi0JICogV2UgaGF2ZSB0byBraWNrIGFsbCB0aGUgc2libGluZ3MgYWdhaW4gaW4g Y2FzZSB3ZSBuZWVkIHRvCi0JICogc3dpdGNoIChlLmcuIHRoZSBuZXh0IHJlcXVlc3QgaXMgbm90 IHJ1bm5hYmxlIG9uIHRoaXMKLQkgKiBlbmdpbmUpLiBIb3BlZnVsbHksIHdlIHdpbGwgYWxyZWFk eSBoYXZlIHN1Ym1pdHRlZCB0aGUgbmV4dAotCSAqIHJlcXVlc3QgYmVmb3JlIHRoZSB0YXNrbGV0 IHJ1bnMgYW5kIGRvIG5vdCBuZWVkIHRvIHJlYnVpbGQKLQkgKiBlYWNoIHZpcnR1YWwgdHJlZSBh bmQga2ljayBldmVyeW9uZSBhZ2Fpbi4KLQkgKi8KLQlpZiAoY2UtPmVuZ2luZSAhPSBlbmdpbmUp Ci0JCWtpY2tfc2libGluZ3MocnEsIGNlKTsKLQotCWludGVsX2NvbnRleHRfcHV0KGNlKTsKLX0K LQotc3RhdGljIGlubGluZSB2b2lkCi1leGVjbGlzdHNfc2NoZWR1bGVfb3V0KHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxKQotewotCXN0cnVjdCBpbnRlbF9jb250ZXh0ICogY29uc3QgY2UgPSBycS0+ aHdfY29udGV4dDsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpjdXIsICpvbGQ7Ci0KLQl0cmFj ZV9pOTE1X3JlcXVlc3Rfb3V0KHJxKTsKLQotCW9sZCA9IFJFQURfT05DRShjZS0+aW5mbGlnaHQp OwotCWRvCi0JCWN1ciA9IHB0cl91bm1hc2tfYml0cyhvbGQsIDIpID8gcHRyX2RlYyhvbGQpIDog TlVMTDsKLQl3aGlsZSAoIXRyeV9jbXB4Y2hnKCZjZS0+aW5mbGlnaHQsICZvbGQsIGN1cikpOwot CWlmICghY3VyKQotCQlfX2V4ZWNsaXN0c19zY2hlZHVsZV9vdXQocnEsIG9sZCk7Ci0KLQlpOTE1 X3JlcXVlc3RfcHV0KHJxKTsKLX0KLQotc3RhdGljIHU2NCBleGVjbGlzdHNfdXBkYXRlX2NvbnRl eHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IGludGVsX2NvbnRleHQgKmNl ID0gcnEtPmh3X2NvbnRleHQ7Ci0JdTY0IGRlc2MgPSBjZS0+bHJjX2Rlc2M7Ci0JdTMyIHRhaWw7 Ci0KLQkvKgotCSAqIFdhSWRsZUxpdGVSZXN0b3JlOmJkdyxza2wKLQkgKgotCSAqIFdlIHNob3Vs ZCBuZXZlciBzdWJtaXQgdGhlIGNvbnRleHQgd2l0aCB0aGUgc2FtZSBSSU5HX1RBSUwgdHdpY2UK LQkgKiBqdXN0IGluIGNhc2Ugd2Ugc3VibWl0IGFuIGVtcHR5IHJpbmcsIHdoaWNoIGNvbmZ1c2Vz IHRoZSBIVy4KLQkgKgotCSAqIFdlIGFwcGVuZCBhIGNvdXBsZSBvZiBOT09QcyAoZ2VuOF9lbWl0 X3dhX3RhaWwpIGFmdGVyIHRoZSBlbmQgb2YKLQkgKiB0aGUgbm9ybWFsIHJlcXVlc3QgdG8gYmUg YWJsZSB0byBhbHdheXMgYWR2YW5jZSB0aGUgUklOR19UQUlMIG9uCi0JICogc3Vic2VxdWVudCBy ZXN1Ym1pc3Npb25zIChmb3IgbGl0ZSByZXN0b3JlKS4gU2hvdWxkIHRoYXQgZmFpbCB1cywKLQkg KiBhbmQgd2UgdHJ5IGFuZCBzdWJtaXQgdGhlIHNhbWUgdGFpbCBhZ2FpbiwgZm9yY2UgdGhlIGNv bnRleHQKLQkgKiByZWxvYWQuCi0JICovCi0JdGFpbCA9IGludGVsX3Jpbmdfc2V0X3RhaWwocnEt PnJpbmcsIHJxLT50YWlsKTsKLQlpZiAodW5saWtlbHkoY2UtPmxyY19yZWdfc3RhdGVbQ1RYX1JJ TkdfVEFJTF0gPT0gdGFpbCkpCi0JCWRlc2MgfD0gQ1RYX0RFU0NfRk9SQ0VfUkVTVE9SRTsKLQlj ZS0+bHJjX3JlZ19zdGF0ZVtDVFhfUklOR19UQUlMXSA9IHRhaWw7Ci0JcnEtPnRhaWwgPSBycS0+ d2FfdGFpbDsKLQotCS8qCi0JICogTWFrZSBzdXJlIHRoZSBjb250ZXh0IGltYWdlIGlzIGNvbXBs ZXRlIGJlZm9yZSB3ZSBzdWJtaXQgaXQgdG8gSFcuCi0JICoKLQkgKiBPc3RlbnNpYmx5LCB3cml0 ZXMgKGluY2x1ZGluZyB0aGUgV0NCKSBzaG91bGQgYmUgZmx1c2hlZCBwcmlvciB0bwotCSAqIGFu IHVuY2FjaGVkIHdyaXRlIHN1Y2ggYXMgb3VyIG1taW8gcmVnaXN0ZXIgYWNjZXNzLCB0aGUgZW1w aXJpY2FsCi0JICogZXZpZGVuY2UgKGVzcC4gb24gQnJhc3dlbGwpIHN1Z2dlc3RzIHRoYXQgdGhl IFdDIHdyaXRlIGludG8gbWVtb3J5Ci0JICogbWF5IG5vdCBiZSB2aXNpYmxlIHRvIHRoZSBIVyBw cmlvciB0byB0aGUgY29tcGxldGlvbiBvZiB0aGUgVUMKLQkgKiByZWdpc3RlciB3cml0ZSBhbmQg dGhhdCB3ZSBtYXkgYmVnaW4gZXhlY3V0aW9uIGZyb20gdGhlIGNvbnRleHQKLQkgKiBiZWZvcmUg aXRzIGltYWdlIGlzIGNvbXBsZXRlIGxlYWRpbmcgdG8gaW52YWxpZCBQRCBjaGFzaW5nLgotCSAq LwotCXdtYigpOwotCi0JLyogV2FfMTYwNzEzODM0MDp0Z2wgKi8KLQlpZiAoSVNfVEdMX1JFVklE KHJxLT5pOTE1LCBUR0xfUkVWSURfQTAsIFRHTF9SRVZJRF9BMCkpCi0JCWRlc2MgfD0gQ1RYX0RF U0NfRk9SQ0VfUkVTVE9SRTsKLQotCWNlLT5scmNfZGVzYyAmPSB+Q1RYX0RFU0NfRk9SQ0VfUkVT VE9SRTsKLQlyZXR1cm4gZGVzYzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2Rlc2Mo c3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cywgdTY0IGRlc2MsIHUzMiBw b3J0KQotewotCWlmIChleGVjbGlzdHMtPmN0cmxfcmVnKSB7Ci0JCXdyaXRlbChsb3dlcl8zMl9i aXRzKGRlc2MpLCBleGVjbGlzdHMtPnN1Ym1pdF9yZWcgKyBwb3J0ICogMik7Ci0JCXdyaXRlbCh1 cHBlcl8zMl9iaXRzKGRlc2MpLCBleGVjbGlzdHMtPnN1Ym1pdF9yZWcgKyBwb3J0ICogMiArIDEp OwotCX0gZWxzZSB7Ci0JCXdyaXRlbCh1cHBlcl8zMl9iaXRzKGRlc2MpLCBleGVjbGlzdHMtPnN1 Ym1pdF9yZWcpOwotCQl3cml0ZWwobG93ZXJfMzJfYml0cyhkZXNjKSwgZXhlY2xpc3RzLT5zdWJt aXRfcmVnKTsKLQl9Ci19Ci0KLXN0YXRpYyBfX21heWJlX3VudXNlZCB2b2lkCi10cmFjZV9wb3J0 cyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzLAotCSAgICBj b25zdCBjaGFyICptc2csCi0JICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKiBjb25zdCAqcG9ydHMp Ci17Ci0JY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0KLQkJY29udGFpbmVy X29mKGV4ZWNsaXN0cywgdHlwZW9mKCplbmdpbmUpLCBleGVjbGlzdHMpOwotCi0JaWYgKCFwb3J0 c1swXSkKLQkJcmV0dXJuOwotCi0JR0VNX1RSQUNFKCIlczogJXMgeyAlbGx4OiVsbGQlcywgJWxs eDolbGxkIH1cbiIsCi0JCSAgZW5naW5lLT5uYW1lLCBtc2csCi0JCSAgcG9ydHNbMF0tPmZlbmNl LmNvbnRleHQsCi0JCSAgcG9ydHNbMF0tPmZlbmNlLnNlcW5vLAotCQkgIGk5MTVfcmVxdWVzdF9j b21wbGV0ZWQocG9ydHNbMF0pID8gIiEiIDoKLQkJICBpOTE1X3JlcXVlc3Rfc3RhcnRlZChwb3J0 c1swXSkgPyAiKiIgOgotCQkgICIiLAotCQkgIHBvcnRzWzFdID8gcG9ydHNbMV0tPmZlbmNlLmNv bnRleHQgOiAwLAotCQkgIHBvcnRzWzFdID8gcG9ydHNbMV0tPmZlbmNlLnNlcW5vIDogMCk7Ci19 Ci0KLXN0YXRpYyBfX21heWJlX3VudXNlZCBib29sCi1hc3NlcnRfcGVuZGluZ192YWxpZChjb25z dCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzLAotCQkgICAgIGNvbnN0 IGNoYXIgKm1zZykKLXsKLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICogY29uc3QgKnBvcnQsICpycTsK LQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBOVUxMOwotCi0JdHJhY2VfcG9ydHMoZXhlY2xp c3RzLCBtc2csIGV4ZWNsaXN0cy0+cGVuZGluZyk7Ci0KLQlpZiAoIWV4ZWNsaXN0cy0+cGVuZGlu Z1swXSkgewotCQlHRU1fVFJBQ0VfRVJSKCJOb3RoaW5nIHBlbmRpbmcgZm9yIHByb21vdGlvbiFc biIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGV4ZWNsaXN0cy0+cGVuZGluZ1tleGVj bGlzdHNfbnVtX3BvcnRzKGV4ZWNsaXN0cyldKSB7Ci0JCUdFTV9UUkFDRV9FUlIoIkV4Y2VzcyBw ZW5kaW5nWyVkXSBmb3IgcHJvbW90aW9uIVxuIiwKLQkJCSAgICAgIGV4ZWNsaXN0c19udW1fcG9y dHMoZXhlY2xpc3RzKSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlmb3IgKHBvcnQgPSBleGVj bGlzdHMtPnBlbmRpbmc7IChycSA9ICpwb3J0KTsgcG9ydCsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7Ci0JCWJvb2wgb2sgPSB0cnVlOwotCi0JCUdFTV9CVUdfT04oIWtyZWZfcmVhZCgmcnEt PmZlbmNlLnJlZmNvdW50KSk7Ci0JCUdFTV9CVUdfT04oIWk5MTVfcmVxdWVzdF9pc19hY3RpdmUo cnEpKTsKLQotCQlpZiAoY2UgPT0gcnEtPmh3X2NvbnRleHQpIHsKLQkJCUdFTV9UUkFDRV9FUlIo IkR1cCBjb250ZXh0OiVsbHggaW4gcGVuZGluZ1slemRdXG4iLAotCQkJCSAgICAgIGNlLT50aW1l bGluZS0+ZmVuY2VfY29udGV4dCwKLQkJCQkgICAgICBwb3J0IC0gZXhlY2xpc3RzLT5wZW5kaW5n KTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQljZSA9IHJxLT5od19jb250ZXh0OwotCi0JCS8q IEhvbGQgdGlnaHRseSBvbnRvIHRoZSBsb2NrIHRvIHByZXZlbnQgY29uY3VycmVudCByZXRpcmVz ISAqLwotCQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpKQotCQkJ Y29udGludWU7Ci0KLQkJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQotCQkJZ290byB1 bmxvY2s7Ci0KLQkJaWYgKGk5MTVfYWN0aXZlX2lzX2lkbGUoJmNlLT5hY3RpdmUpICYmCi0JCSAg ICAhaTkxNV9nZW1fY29udGV4dF9pc19rZXJuZWwoY2UtPmdlbV9jb250ZXh0KSkgewotCQkJR0VN X1RSQUNFX0VSUigiSW5hY3RpdmUgY29udGV4dDolbGx4IGluIHBlbmRpbmdbJXpkXVxuIiwKLQkJ CQkgICAgICBjZS0+dGltZWxpbmUtPmZlbmNlX2NvbnRleHQsCi0JCQkJICAgICAgcG9ydCAtIGV4 ZWNsaXN0cy0+cGVuZGluZyk7Ci0JCQlvayA9IGZhbHNlOwotCQkJZ290byB1bmxvY2s7Ci0JCX0K LQotCQlpZiAoIWk5MTVfdm1hX2lzX3Bpbm5lZChjZS0+c3RhdGUpKSB7Ci0JCQlHRU1fVFJBQ0Vf RVJSKCJVbnBpbm5lZCBjb250ZXh0OiVsbHggaW4gcGVuZGluZ1slemRdXG4iLAotCQkJCSAgICAg IGNlLT50aW1lbGluZS0+ZmVuY2VfY29udGV4dCwKLQkJCQkgICAgICBwb3J0IC0gZXhlY2xpc3Rz LT5wZW5kaW5nKTsKLQkJCW9rID0gZmFsc2U7Ci0JCQlnb3RvIHVubG9jazsKLQkJfQotCi0JCWlm ICghaTkxNV92bWFfaXNfcGlubmVkKGNlLT5yaW5nLT52bWEpKSB7Ci0JCQlHRU1fVFJBQ0VfRVJS KCJVbnBpbm5lZCByaW5nOiVsbHggaW4gcGVuZGluZ1slemRdXG4iLAotCQkJCSAgICAgIGNlLT50 aW1lbGluZS0+ZmVuY2VfY29udGV4dCwKLQkJCQkgICAgICBwb3J0IC0gZXhlY2xpc3RzLT5wZW5k aW5nKTsKLQkJCW9rID0gZmFsc2U7Ci0JCQlnb3RvIHVubG9jazsKLQkJfQotCi11bmxvY2s6Ci0J CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7Ci0JCWlmICghb2spCi0J CQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIGNlOwotfQotCi1zdGF0aWMgdm9pZCBleGVj bGlzdHNfc3VibWl0X3BvcnRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlz dHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xp c3RzOwotCXVuc2lnbmVkIGludCBuOwotCi0JR0VNX0JVR19PTighYXNzZXJ0X3BlbmRpbmdfdmFs aWQoZXhlY2xpc3RzLCAic3VibWl0IikpOwotCi0JLyoKLQkgKiBXZSBjYW4gc2tpcCBhY3F1aXJp bmcgaW50ZWxfcnVudGltZV9wbV9nZXQoKSBoZXJlIGFzIGl0IHdhcyB0YWtlbgotCSAqIG9uIG91 ciBiZWhhbGYgYnkgdGhlIHJlcXVlc3QgKHNlZSBpOTE1X2dlbV9tYXJrX2J1c3koKSkgYW5kIGl0 IHdpbGwKLQkgKiBub3QgYmUgcmVsaW5xdWlzaGVkIHVudGlsIHRoZSBkZXZpY2UgaXMgaWRsZSAo c2VlCi0JICogaTkxNV9nZW1faWRsZV93b3JrX2hhbmRsZXIoKSkuIEFzIGEgcHJlY2F1dGlvbiwg d2UgbWFrZSBzdXJlCi0JICogdGhhdCBhbGwgRUxTUCBhcmUgZHJhaW5lZCBpLmUuIHdlIGhhdmUg cHJvY2Vzc2VkIHRoZSBDU0IsCi0JICogYmVmb3JlIGFsbG93aW5nIG91cnNlbHZlcyB0byBpZGxl IGFuZCBjYWxsaW5nIGludGVsX3J1bnRpbWVfcG1fcHV0KCkuCi0JICovCi0JR0VNX0JVR19PTigh aW50ZWxfZW5naW5lX3BtX2lzX2F3YWtlKGVuZ2luZSkpOwotCi0JLyoKLQkgKiBFTFNRIG5vdGU6 IHRoZSBzdWJtaXQgcXVldWUgaXMgbm90IGNsZWFyZWQgYWZ0ZXIgYmVpbmcgc3VibWl0dGVkCi0J ICogdG8gdGhlIEhXIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFsd2F5cyBjbGVhbiBpdCB1 cC4gVGhpcyBpcwotCSAqIGN1cnJlbnRseSBlbnN1cmVkIGJ5IHRoZSBmYWN0IHRoYXQgd2UgYWx3 YXlzIHdyaXRlIHRoZSBzYW1lIG51bWJlcgotCSAqIG9mIGVsc3EgZW50cmllcywga2VlcCB0aGlz IGluIG1pbmQgYmVmb3JlIGNoYW5naW5nIHRoZSBsb29wIGJlbG93LgotCSAqLwotCWZvciAobiA9 IGV4ZWNsaXN0c19udW1fcG9ydHMoZXhlY2xpc3RzKTsgbi0tOyApIHsKLQkJc3RydWN0IGk5MTVf cmVxdWVzdCAqcnEgPSBleGVjbGlzdHMtPnBlbmRpbmdbbl07Ci0KLQkJd3JpdGVfZGVzYyhleGVj bGlzdHMsCi0JCQkgICBycSA/IGV4ZWNsaXN0c191cGRhdGVfY29udGV4dChycSkgOiAwLAotCQkJ ICAgbik7Ci0JfQotCi0JLyogd2UgbmVlZCB0byBtYW51YWxseSBsb2FkIHRoZSBzdWJtaXQgcXVl dWUgKi8KLQlpZiAoZXhlY2xpc3RzLT5jdHJsX3JlZykKLQkJd3JpdGVsKEVMX0NUUkxfTE9BRCwg ZXhlY2xpc3RzLT5jdHJsX3JlZyk7Ci19Ci0KLXN0YXRpYyBib29sIGN0eF9zaW5nbGVfcG9ydF9z dWJtaXNzaW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKLXsKLQlyZXR1cm4gKElT X0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X0dWVCkgJiYKLQkJaTkxNV9nZW1fY29udGV4dF9mb3Jj ZV9zaW5nbGVfc3VibWlzc2lvbihjZS0+Z2VtX2NvbnRleHQpKTsKLX0KLQotc3RhdGljIGJvb2wg Y2FuX21lcmdlX2N0eChjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqcHJldiwKLQkJCSAgY29u c3Qgc3RydWN0IGludGVsX2NvbnRleHQgKm5leHQpCi17Ci0JaWYgKHByZXYgIT0gbmV4dCkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JaWYgKGN0eF9zaW5nbGVfcG9ydF9zdWJtaXNzaW9uKHByZXYpKQot CQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgY2FuX21l cmdlX3JxKGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnByZXYsCi0JCQkgY29uc3Qgc3RydWN0 IGk5MTVfcmVxdWVzdCAqbmV4dCkKLXsKLQlHRU1fQlVHX09OKHByZXYgPT0gbmV4dCk7Ci0JR0VN X0JVR19PTighYXNzZXJ0X3ByaW9yaXR5X3F1ZXVlKHByZXYsIG5leHQpKTsKLQotCS8qCi0JICog V2UgZG8gbm90IHN1Ym1pdCBrbm93biBjb21wbGV0ZWQgcmVxdWVzdHMuIFRoZXJlZm9yZSBpZiB0 aGUgbmV4dAotCSAqIHJlcXVlc3QgaXMgYWxyZWFkeSBjb21wbGV0ZWQsIHdlIGNhbiBwcmV0ZW5k IHRvIG1lcmdlIGl0IGluCi0JICogd2l0aCB0aGUgcHJldmlvdXMgY29udGV4dCAoYW5kIHdlIHdp bGwgc2tpcCB1cGRhdGluZyB0aGUgRUxTUAotCSAqIGFuZCB0cmFja2luZykuIFRodXMgaG9wZWZ1 bGx5IGtlZXBpbmcgdGhlIEVMU1AgZnVsbCB3aXRoIGFjdGl2ZQotCSAqIGNvbnRleHRzLCBkZXNw aXRlIHRoZSBiZXN0IGVmZm9ydHMgb2YgcHJlZW1wdC10by1idXN5IHRvIGNvbmZ1c2UKLQkgKiB1 cy4KLQkgKi8KLQlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChuZXh0KSkKLQkJcmV0dXJuIHRy dWU7Ci0KLQlpZiAodW5saWtlbHkoKHByZXYtPmZsYWdzIF4gbmV4dC0+ZmxhZ3MpICYKLQkJICAg ICAoSTkxNV9SRVFVRVNUX05PUFJFRU1QVCB8IEk5MTVfUkVRVUVTVF9TRU5USU5FTCkpKQotCQly ZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIWNhbl9tZXJnZV9jdHgocHJldi0+aHdfY29udGV4dCwgbmV4 dC0+aHdfY29udGV4dCkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1z dGF0aWMgYm9vbCB2aXJ0dWFsX21hdGNoZXMoY29uc3Qgc3RydWN0IGludGVsX3ZpcnR1YWxfZW5n aW5lICp2ZSwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKLQkJCSAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0JY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqaW5mbGlnaHQ7Ci0KLQlpZiAoIShycS0+ZXhlY3V0aW9uX21hc2sgJiBl bmdpbmUtPm1hc2spKSAvKiBXZSBwZWVrZWQgdG9vIHNvb24hICovCi0JCXJldHVybiBmYWxzZTsK LQotCS8qCi0JICogV2UgdHJhY2sgd2hlbiB0aGUgSFcgaGFzIGNvbXBsZXRlZCBzYXZpbmcgdGhl IGNvbnRleHQgaW1hZ2UKLQkgKiAoaS5lLiB3aGVuIHdlIGhhdmUgc2VlbiB0aGUgZmluYWwgQ1Mg ZXZlbnQgc3dpdGNoaW5nIG91dCBvZgotCSAqIHRoZSBjb250ZXh0KSBhbmQgbXVzdCBub3Qgb3Zl cndyaXRlIHRoZSBjb250ZXh0IGltYWdlIGJlZm9yZQotCSAqIHRoZW4uIFRoaXMgcmVzdHJpY3Rz IHVzIHRvIG9ubHkgdXNpbmcgdGhlIGFjdGl2ZSBlbmdpbmUKLQkgKiB3aGlsZSB0aGUgcHJldmlv dXMgdmlydHVhbGl6ZWQgcmVxdWVzdCBpcyBpbmZsaWdodCAoc28KLQkgKiB3ZSByZXVzZSB0aGUg cmVnaXN0ZXIgb2Zmc2V0cykuIFRoaXMgaXMgYSB2ZXJ5IHNtYWxsCi0JICogaHlzdGVyc2lzIG9u IHRoZSBncmVlZHkgc2VlbGN0aW9uIGFsZ29yaXRobS4KLQkgKi8KLQlpbmZsaWdodCA9IGludGVs X2NvbnRleHRfaW5mbGlnaHQoJnZlLT5jb250ZXh0KTsKLQlpZiAoaW5mbGlnaHQgJiYgaW5mbGln aHQgIT0gZW5naW5lKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3Rh dGljIHZvaWQgdmlydHVhbF94ZmVyX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF92aXJ0dWFsX2Vu Z2luZSAqdmUsCi0JCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0J c3RydWN0IGludGVsX2VuZ2luZV9jcyAqb2xkID0gdmUtPnNpYmxpbmdzWzBdOwotCi0JLyogQWxs IHVuYXR0YWNoZWQgKHJxLT5lbmdpbmUgPT0gb2xkKSBtdXN0IGFscmVhZHkgYmUgY29tcGxldGVk ICovCi0KLQlzcGluX2xvY2soJm9sZC0+YnJlYWRjcnVtYnMuaXJxX2xvY2spOwotCWlmICghbGlz dF9lbXB0eSgmdmUtPmNvbnRleHQuc2lnbmFsX2xpbmspKSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZ2 ZS0+Y29udGV4dC5zaWduYWxfbGluaywKLQkJCSAgICAgICAmZW5naW5lLT5icmVhZGNydW1icy5z aWduYWxlcnMpOwotCQlpbnRlbF9lbmdpbmVfcXVldWVfYnJlYWRjcnVtYnMoZW5naW5lKTsKLQl9 Ci0Jc3Bpbl91bmxvY2soJm9sZC0+YnJlYWRjcnVtYnMuaXJxX2xvY2spOwotfQotCi1zdGF0aWMg c3RydWN0IGk5MTVfcmVxdWVzdCAqCi1sYXN0X2FjdGl2ZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5n aW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzKQotewotCXN0cnVjdCBpOTE1X3JlcXVlc3QgKiBjb25z dCAqbGFzdCA9IFJFQURfT05DRShleGVjbGlzdHMtPmFjdGl2ZSk7Ci0KLQl3aGlsZSAoKmxhc3Qg JiYgaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZCgqbGFzdCkpCi0JCWxhc3QrKzsKLQotCXJldHVybiAq bGFzdDsKLX0KLQotc3RhdGljIHZvaWQgZGVmZXJfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSwgc3RydWN0IGxpc3RfaGVhZCAqIGNvbnN0IHBsKQotewotCUxJU1RfSEVBRChsaXN0KTsK LQotCS8qCi0JICogV2Ugd2FudCB0byBtb3ZlIHRoZSBpbnRlcnJ1cHRlZCByZXF1ZXN0IHRvIHRo ZSBiYWNrIG9mCi0JICogdGhlIHJvdW5kLXJvYmluIGxpc3QgKGkuZS4gaXRzIHByaW9yaXR5IGxl dmVsKSwgYnV0Ci0JICogaW4gZG9pbmcgc28sIHdlIG11c3QgdGhlbiBtb3ZlIGFsbCByZXF1ZXN0 cyB0aGF0IHdlcmUgaW4KLQkgKiBmbGlnaHQgYW5kIHdlcmUgd2FpdGluZyBmb3IgdGhlIGludGVy cnVwdGVkIHJlcXVlc3QgdG8KLQkgKiBiZSBydW4gYWZ0ZXIgaXQgYWdhaW4uCi0JICovCi0JZG8g ewotCQlzdHJ1Y3QgaTkxNV9kZXBlbmRlbmN5ICpwOwotCi0JCUdFTV9CVUdfT04oaTkxNV9yZXF1 ZXN0X2lzX2FjdGl2ZShycSkpOwotCQlsaXN0X21vdmVfdGFpbCgmcnEtPnNjaGVkLmxpbmssIHBs KTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZycS0+c2NoZWQud2FpdGVyc19saXN0LCB3 YWl0X2xpbmspIHsKLQkJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKncgPQotCQkJCWNvbnRhaW5lcl9v ZihwLT53YWl0ZXIsIHR5cGVvZigqdyksIHNjaGVkKTsKLQotCQkJLyogTGVhdmUgc2VtYXBob3Jl cyBzcGlubmluZyBvbiB0aGUgb3RoZXIgZW5naW5lcyAqLwotCQkJaWYgKHctPmVuZ2luZSAhPSBy cS0+ZW5naW5lKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBObyB3YWl0ZXIgc2hvdWxkIHN0YXJ0 IGJlZm9yZSBpdHMgc2lnbmFsZXIgKi8KLQkJCUdFTV9CVUdfT04oaTkxNV9yZXF1ZXN0X3N0YXJ0 ZWQodykgJiYKLQkJCQkgICAhaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpOwotCi0JCQlHRU1f QlVHX09OKGk5MTVfcmVxdWVzdF9pc19hY3RpdmUodykpOwotCQkJaWYgKGxpc3RfZW1wdHkoJnct PnNjaGVkLmxpbmspKQotCQkJCWNvbnRpbnVlOyAvKiBOb3QgeWV0IHN1Ym1pdHRlZDsgdW5yZWFk eSAqLwotCi0JCQlpZiAocnFfcHJpbyh3KSA8IHJxX3ByaW8ocnEpKQotCQkJCWNvbnRpbnVlOwot Ci0JCQlHRU1fQlVHX09OKHJxX3ByaW8odykgPiBycV9wcmlvKHJxKSk7Ci0JCQlsaXN0X21vdmVf dGFpbCgmdy0+c2NoZWQubGluaywgJmxpc3QpOwotCQl9Ci0KLQkJcnEgPSBsaXN0X2ZpcnN0X2Vu dHJ5X29yX251bGwoJmxpc3QsIHR5cGVvZigqcnEpLCBzY2hlZC5saW5rKTsKLQl9IHdoaWxlIChy cSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlZmVyX2FjdGl2ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCi17Ci0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Ci0KLQlycSA9IF9fdW53aW5k X2luY29tcGxldGVfcmVxdWVzdHMoZW5naW5lKTsKLQlpZiAoIXJxKQotCQlyZXR1cm47Ci0KLQlk ZWZlcl9yZXF1ZXN0KHJxLCBpOTE1X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChlbmdpbmUsIHJxX3By aW8ocnEpKSk7Ci19Ci0KLXN0YXRpYyBib29sCi1uZWVkX3RpbWVzbGljZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsIGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQotewotCWlu dCBoaW50OwotCi0JaWYgKCFpbnRlbF9lbmdpbmVfaGFzX3RpbWVzbGljZXMoZW5naW5lKSkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JaWYgKGxpc3RfaXNfbGFzdCgmcnEtPnNjaGVkLmxpbmssICZlbmdp bmUtPmFjdGl2ZS5yZXF1ZXN0cykpCi0JCXJldHVybiBmYWxzZTsKLQotCWhpbnQgPSBtYXgocnFf cHJpbyhsaXN0X25leHRfZW50cnkocnEsIHNjaGVkLmxpbmspKSwKLQkJICAgZW5naW5lLT5leGVj bGlzdHMucXVldWVfcHJpb3JpdHlfaGludCk7Ci0KLQlyZXR1cm4gaGludCA+PSBlZmZlY3RpdmVf cHJpbyhycSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXN3aXRjaF9wcmlvKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwgY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCi17Ci0JaWYgKGxp c3RfaXNfbGFzdCgmcnEtPnNjaGVkLmxpbmssICZlbmdpbmUtPmFjdGl2ZS5yZXF1ZXN0cykpCi0J CXJldHVybiBJTlRfTUlOOwotCi0JcmV0dXJuIHJxX3ByaW8obGlzdF9uZXh0X2VudHJ5KHJxLCBz Y2hlZC5saW5rKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotdGltZXNsaWNl KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlyZXR1cm4gUkVBRF9P TkNFKGVuZ2luZS0+cHJvcHMudGltZXNsaWNlX2R1cmF0aW9uX21zKTsKLX0KLQotc3RhdGljIHVu c2lnbmVkIGxvbmcKLWFjdGl2ZV90aW1lc2xpY2UoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQotewotCWNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0gKmVuZ2luZS0+ ZXhlY2xpc3RzLmFjdGl2ZTsKLQotCWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkKLQkJ cmV0dXJuIDA7Ci0KLQlpZiAoZW5naW5lLT5leGVjbGlzdHMuc3dpdGNoX3ByaW9yaXR5X2hpbnQg PCBlZmZlY3RpdmVfcHJpbyhycSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHRpbWVzbGljZShl bmdpbmUpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfdGltZXNsaWNlKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKLXsKLQlpZiAoIWludGVsX2VuZ2luZV9oYXNfdGltZXNsaWNlcyhlbmdp bmUpKQotCQlyZXR1cm47Ci0KLQlzZXRfdGltZXJfbXMoJmVuZ2luZS0+ZXhlY2xpc3RzLnRpbWVy LCBhY3RpdmVfdGltZXNsaWNlKGVuZ2luZSkpOwotfQotCi1zdGF0aWMgdm9pZCByZWNvcmRfcHJl ZW1wdGlvbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzKQotewotCSh2 b2lkKUk5MTVfU0VMRlRFU1RfT05MWShleGVjbGlzdHMtPnByZWVtcHRfaGFuZy5jb3VudCsrKTsK LX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgYWN0aXZlX3ByZWVtcHRfdGltZW91dChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Ci0K LQlycSA9IGxhc3RfYWN0aXZlKCZlbmdpbmUtPmV4ZWNsaXN0cyk7Ci0JaWYgKCFycSkKLQkJcmV0 dXJuIDA7Ci0KLQkvKiBGb3JjZSBhIGZhc3QgcmVzZXQgZm9yIHRlcm1pbmF0ZWQgY29udGV4dHMg KGlnbm9yaW5nIHN5c2ZzISkgKi8KLQlpZiAodW5saWtlbHkoaTkxNV9nZW1fY29udGV4dF9pc19i YW5uZWQocnEtPmdlbV9jb250ZXh0KSkpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIFJFQURfT05D RShlbmdpbmUtPnByb3BzLnByZWVtcHRfdGltZW91dF9tcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNl dF9wcmVlbXB0X3RpbWVvdXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCWlm ICghaW50ZWxfZW5naW5lX2hhc19wcmVlbXB0X3Jlc2V0KGVuZ2luZSkpCi0JCXJldHVybjsKLQot CXNldF90aW1lcl9tcygmZW5naW5lLT5leGVjbGlzdHMucHJlZW1wdCwKLQkJICAgICBhY3RpdmVf cHJlZW1wdF90aW1lb3V0KGVuZ2luZSkpOwotfQotCi1zdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVx dWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0Jc3RydWN0IGludGVsX2Vu Z2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Ci0J c3RydWN0IGk5MTVfcmVxdWVzdCAqKnBvcnQgPSBleGVjbGlzdHMtPnBlbmRpbmc7Ci0Jc3RydWN0 IGk5MTVfcmVxdWVzdCAqKiBjb25zdCBsYXN0X3BvcnQgPSBwb3J0ICsgZXhlY2xpc3RzLT5wb3J0 X21hc2s7Ci0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqbGFzdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmI7 Ci0JYm9vbCBzdWJtaXQgPSBmYWxzZTsKLQotCS8qCi0JICogSGFyZHdhcmUgc3VibWlzc2lvbiBp cyB0aHJvdWdoIDIgcG9ydHMuIENvbmNlcHR1YWxseSBlYWNoIHBvcnQKLQkgKiBoYXMgYSAoUklO R19TVEFSVCwgUklOR19IRUFELCBSSU5HX1RBSUwpIHR1cGxlLiBSSU5HX1NUQVJUIGlzCi0JICog c3RhdGljIGZvciBhIGNvbnRleHQsIGFuZCB1bmlxdWUgdG8gZWFjaCwgc28gd2Ugb25seSBleGVj dXRlCi0JICogcmVxdWVzdHMgYmVsb25naW5nIHRvIGEgc2luZ2xlIGNvbnRleHQgZnJvbSBlYWNo IHJpbmcuIFJJTkdfSEVBRAotCSAqIGlzIG1haW50YWluZWQgYnkgdGhlIENTIGluIHRoZSBjb250 ZXh0IGltYWdlLCBpdCBtYXJrcyB0aGUgcGxhY2UKLQkgKiB3aGVyZSBpdCBnb3QgdXAgdG8gbGFz dCB0aW1lLCBhbmQgdGhyb3VnaCBSSU5HX1RBSUwgd2UgdGVsbCB0aGUgQ1MKLQkgKiB3aGVyZSB3 ZSB3YW50IHRvIGV4ZWN1dGUgdXAgdG8gdGhpcyB0aW1lLgotCSAqCi0JICogSW4gdGhpcyBsaXN0 IHRoZSByZXF1ZXN0cyBhcmUgaW4gb3JkZXIgb2YgZXhlY3V0aW9uLiBDb25zZWN1dGl2ZQotCSAq IHJlcXVlc3RzIGZyb20gdGhlIHNhbWUgY29udGV4dCBhcmUgYWRqYWNlbnQgaW4gdGhlIHJpbmdi dWZmZXIuIFdlCi0JICogY2FuIGNvbWJpbmUgdGhlc2UgcmVxdWVzdHMgaW50byBhIHNpbmdsZSBS SU5HX1RBSUwgdXBkYXRlOgotCSAqCi0JICogICAgICAgICAgICAgIFJJTkdfSEVBRC4uLnJlcTEu Li5yZXEyCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeLSBSSU5HX1RB SUwKLQkgKiBzaW5jZSB0byBleGVjdXRlIHJlcTIgdGhlIENTIG11c3QgZmlyc3QgZXhlY3V0ZSBy ZXExLgotCSAqCi0JICogT3VyIGdvYWwgdGhlbiBpcyB0byBwb2ludCBlYWNoIHBvcnQgdG8gdGhl IGVuZCBvZiBhIGNvbnNlY3V0aXZlCi0JICogc2VxdWVuY2Ugb2YgcmVxdWVzdHMgYXMgYmVpbmcg dGhlIG1vc3Qgb3B0aW1hbCAoZmV3ZXN0IHdha2UgdXBzCi0JICogYW5kIGNvbnRleHQgc3dpdGNo ZXMpIHN1Ym1pc3Npb24uCi0JICovCi0KLQlmb3IgKHJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVj bGlzdHMtPnZpcnR1YWwpOyByYjsgKSB7Ci0JCXN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAq dmUgPQotCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tlbmdpbmUtPmlkXS5yYik7 Ci0JCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0gUkVBRF9PTkNFKHZlLT5yZXF1ZXN0KTsKLQot CQlpZiAoIXJxKSB7IC8qIGxhemlseSBjbGVhbnVwIGFmdGVyIGFub3RoZXIgZW5naW5lIGhhbmRs ZWQgcnEgKi8KLQkJCXJiX2VyYXNlX2NhY2hlZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVhbCk7Ci0J CQlSQl9DTEVBUl9OT0RFKHJiKTsKLQkJCXJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMt PnZpcnR1YWwpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoIXZpcnR1YWxfbWF0Y2hlcyh2 ZSwgcnEsIGVuZ2luZSkpIHsKLQkJCXJiID0gcmJfbmV4dChyYik7Ci0JCQljb250aW51ZTsKLQkJ fQotCi0JCWJyZWFrOwotCX0KLQotCS8qCi0JICogSWYgdGhlIHF1ZXVlIGlzIGhpZ2hlciBwcmlv cml0eSB0aGFuIHRoZSBsYXN0Ci0JICogcmVxdWVzdCBpbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBj b250ZXh0LCBzdWJtaXQgYWZyZXNoLgotCSAqIFdlIHdpbGwgcmVzdWJtaXQgYWdhaW4gYWZ0ZXJ3 YXJkcyBpbiBjYXNlIHdlIG5lZWQgdG8gc3BsaXQKLQkgKiB0aGUgYWN0aXZlIGNvbnRleHQgdG8g aW50ZXJqZWN0IHRoZSBwcmVlbXB0aW9uIHJlcXVlc3QsCi0JICogaS5lLiB3ZSB3aWxsIHJldHJp Z2dlciBwcmVlbXB0aW9uIGZvbGxvd2luZyB0aGUgYWNrIGluIGNhc2UKLQkgKiBvZiB0cm91Ymxl LgotCSAqLwotCWxhc3QgPSBsYXN0X2FjdGl2ZShleGVjbGlzdHMpOwotCWlmIChsYXN0KSB7Ci0J CWlmIChuZWVkX3ByZWVtcHQoZW5naW5lLCBsYXN0LCByYikpIHsKLQkJCUdFTV9UUkFDRSgiJXM6 IHByZWVtcHRpbmcgbGFzdD0lbGx4OiVsbGQsIHByaW89JWQsIGhpbnQ9JWRcbiIsCi0JCQkJICBl bmdpbmUtPm5hbWUsCi0JCQkJICBsYXN0LT5mZW5jZS5jb250ZXh0LAotCQkJCSAgbGFzdC0+ZmVu Y2Uuc2Vxbm8sCi0JCQkJICBsYXN0LT5zY2hlZC5hdHRyLnByaW9yaXR5LAotCQkJCSAgZXhlY2xp c3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50KTsKLQkJCXJlY29yZF9wcmVlbXB0aW9uKGV4ZWNsaXN0 cyk7Ci0KLQkJCS8qCi0JCQkgKiBEb24ndCBsZXQgdGhlIFJJTkdfSEVBRCBhZHZhbmNlIHBhc3Qg dGhlIGJyZWFkY3J1bWIKLQkJCSAqIGFzIHdlIHVud2luZCAoYW5kIHVudGlsIHdlIHJlc3VibWl0 KSBzbyB0aGF0IHdlIGRvCi0JCQkgKiBub3QgYWNjaWRlbnRhbGx5IHRlbGwgaXQgdG8gZ28gYmFj a3dhcmRzLgotCQkJICovCi0JCQlyaW5nX3NldF9wYXVzZWQoZW5naW5lLCAxKTsKLQotCQkJLyoK LQkJCSAqIE5vdGUgdGhhdCB3ZSBoYXZlIG5vdCBzdG9wcGVkIHRoZSBHUFUgYXQgdGhpcyBwb2lu dCwKLQkJCSAqIHNvIHdlIGFyZSB1bndpbmRpbmcgdGhlIGluY29tcGxldGUgcmVxdWVzdHMgYXMg dGhleQotCQkJICogcmVtYWluIGluZmxpZ2h0IGFuZCBzbyBieSB0aGUgdGltZSB3ZSBkbyBjb21w bGV0ZQotCQkJICogdGhlIHByZWVtcHRpb24sIHNvbWUgb2YgdGhlIHVud291bmQgcmVxdWVzdHMg bWF5Ci0JCQkgKiBjb21wbGV0ZSEKLQkJCSAqLwotCQkJX191bndpbmRfaW5jb21wbGV0ZV9yZXF1 ZXN0cyhlbmdpbmUpOwotCi0JCQkvKgotCQkJICogSWYgd2UgbmVlZCB0byByZXR1cm4gdG8gdGhl IHByZWVtcHRlZCBjb250ZXh0LCB3ZQotCQkJICogbmVlZCB0byBza2lwIHRoZSBsaXRlLXJlc3Rv cmUgYW5kIGZvcmNlIGl0IHRvCi0JCQkgKiByZWxvYWQgdGhlIFJJTkdfVEFJTC4gT3RoZXJ3aXNl LCB0aGUgSFcgaGFzIGEKLQkJCSAqIHRlbmRlbmN5IHRvIGlnbm9yZSB1cyByZXdpbmRpbmcgdGhl IFRBSUwgdG8gdGhlCi0JCQkgKiBlbmQgb2YgYW4gZWFybGllciByZXF1ZXN0LgotCQkJICovCi0J CQlsYXN0LT5od19jb250ZXh0LT5scmNfZGVzYyB8PSBDVFhfREVTQ19GT1JDRV9SRVNUT1JFOwot CQkJbGFzdCA9IE5VTEw7Ci0JCX0gZWxzZSBpZiAobmVlZF90aW1lc2xpY2UoZW5naW5lLCBsYXN0 KSAmJgotCQkJICAgdGltZXJfZXhwaXJlZCgmZW5naW5lLT5leGVjbGlzdHMudGltZXIpKSB7Ci0J CQlHRU1fVFJBQ0UoIiVzOiBleHBpcmVkIGxhc3Q9JWxseDolbGxkLCBwcmlvPSVkLCBoaW50PSVk XG4iLAotCQkJCSAgZW5naW5lLT5uYW1lLAotCQkJCSAgbGFzdC0+ZmVuY2UuY29udGV4dCwKLQkJ CQkgIGxhc3QtPmZlbmNlLnNlcW5vLAotCQkJCSAgbGFzdC0+c2NoZWQuYXR0ci5wcmlvcml0eSwK LQkJCQkgIGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCk7Ci0KLQkJCXJpbmdfc2V0X3Bh dXNlZChlbmdpbmUsIDEpOwotCQkJZGVmZXJfYWN0aXZlKGVuZ2luZSk7Ci0KLQkJCS8qCi0JCQkg KiBVbmxpa2UgZm9yIHByZWVtcHRpb24sIGlmIHdlIHJld2luZCBhbmQgY29udGludWUKLQkJCSAq IGV4ZWN1dGluZyB0aGUgc2FtZSBjb250ZXh0IGFzIHByZXZpb3VzbHkgYWN0aXZlLAotCQkJICog dGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiB3aWxsIHJlbWFpbiB0aGUgc2FtZSBhbmQKLQkJCSAqIHRo ZSB0YWlsIHdpbGwgb25seSBhZHZhbmNlLiBXZSBkbyBub3QgbmVlZCB0bwotCQkJICogZm9yY2Ug YSBmdWxsIGNvbnRleHQgcmVzdG9yZSwgYXMgYSBsaXRlLXJlc3RvcmUKLQkJCSAqIGlzIHN1ZmZp Y2llbnQgdG8gcmVzYW1wbGUgdGhlIG1vbm90b25pYyBUQUlMLgotCQkJICoKLQkJCSAqIElmIHdl IHN3aXRjaCB0byBhbnkgb3RoZXIgY29udGV4dCwgc2ltaWxhcmx5IHdlCi0JCQkgKiB3aWxsIG5v dCByZXdpbmQgVEFJTCBvZiBjdXJyZW50IGNvbnRleHQsIGFuZAotCQkJICogbm9ybWFsIHNhdmUv cmVzdG9yZSB3aWxsIHByZXNlcnZlIHN0YXRlIGFuZCBhbGxvdwotCQkJICogdXMgdG8gbGF0ZXIg Y29udGludWUgZXhlY3V0aW5nIHRoZSBzYW1lIHJlcXVlc3QuCi0JCQkgKi8KLQkJCWxhc3QgPSBO VUxMOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIE90aGVyd2lzZSBpZiB3ZSBhbHJlYWR5IGhh dmUgYSByZXF1ZXN0IHBlbmRpbmcKLQkJCSAqIGZvciBleGVjdXRpb24gYWZ0ZXIgdGhlIGN1cnJl bnQgb25lLCB3ZSBjYW4KLQkJCSAqIGp1c3Qgd2FpdCB1bnRpbCB0aGUgbmV4dCBDUyBldmVudCBi ZWZvcmUKLQkJCSAqIHF1ZXVpbmcgbW9yZS4gSW4gZWl0aGVyIGNhc2Ugd2Ugd2lsbCBmb3JjZSBh Ci0JCQkgKiBsaXRlLXJlc3RvcmUgcHJlZW1wdGlvbiBldmVudCwgYnV0IGlmIHdlIHdhaXQKLQkJ CSAqIHdlIGhvcGVmdWxseSBjb2FsZXNjZSBzZXZlcmFsIHVwZGF0ZXMgaW50byBhIHNpbmdsZQot CQkJICogc3VibWlzc2lvbi4KLQkJCSAqLwotCQkJaWYgKCFsaXN0X2lzX2xhc3QoJmxhc3QtPnNj aGVkLmxpbmssCi0JCQkJCSAgJmVuZ2luZS0+YWN0aXZlLnJlcXVlc3RzKSkgewotCQkJCS8qCi0J CQkJICogRXZlbiBpZiBFTFNQWzFdIGlzIG9jY3VwaWVkIGFuZCBub3Qgd29ydGh5Ci0JCQkJICog b2YgdGltZXNsaWNlcywgb3VyIHF1ZXVlIG1pZ2h0IGJlLgotCQkJCSAqLwotCQkJCWlmICghZXhl Y2xpc3RzLT50aW1lci5leHBpcmVzICYmCi0JCQkJICAgIG5lZWRfdGltZXNsaWNlKGVuZ2luZSwg bGFzdCkpCi0JCQkJCXNldF90aW1lcl9tcygmZXhlY2xpc3RzLT50aW1lciwKLQkJCQkJCSAgICAg dGltZXNsaWNlKGVuZ2luZSkpOwotCi0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCi0Jd2hp bGUgKHJiKSB7IC8qIFhYWCB2aXJ0dWFsIGlzIGFsd2F5cyB0YWtpbmcgcHJlY2VkZW5jZSAqLwot CQlzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnZlID0KLQkJCXJiX2VudHJ5KHJiLCB0eXBl b2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIpOwotCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cTsKLQotCQlzcGluX2xvY2soJnZlLT5iYXNlLmFjdGl2ZS5sb2NrKTsKLQotCQlycSA9IHZlLT5y ZXF1ZXN0OwotCQlpZiAodW5saWtlbHkoIXJxKSkgeyAvKiBsb3N0IHRoZSByYWNlIHRvIGEgc2li bGluZyAqLwotCQkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLmFjdGl2ZS5sb2NrKTsKLQkJCXJiX2Vy YXNlX2NhY2hlZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVhbCk7Ci0JCQlSQl9DTEVBUl9OT0RFKHJi KTsKLQkJCXJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMtPnZpcnR1YWwpOwotCQkJY29u dGludWU7Ci0JCX0KLQotCQlHRU1fQlVHX09OKHJxICE9IHZlLT5yZXF1ZXN0KTsKLQkJR0VNX0JV R19PTihycS0+ZW5naW5lICE9ICZ2ZS0+YmFzZSk7Ci0JCUdFTV9CVUdfT04ocnEtPmh3X2NvbnRl eHQgIT0gJnZlLT5jb250ZXh0KTsKLQotCQlpZiAocnFfcHJpbyhycSkgPj0gcXVldWVfcHJpbyhl eGVjbGlzdHMpKSB7Ci0JCQlpZiAoIXZpcnR1YWxfbWF0Y2hlcyh2ZSwgcnEsIGVuZ2luZSkpIHsK LQkJCQlzcGluX3VubG9jaygmdmUtPmJhc2UuYWN0aXZlLmxvY2spOwotCQkJCXJiID0gcmJfbmV4 dChyYik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWlmIChsYXN0ICYmICFjYW5fbWVyZ2Vf cnEobGFzdCwgcnEpKSB7Ci0JCQkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLmFjdGl2ZS5sb2NrKTsK LQkJCQlyZXR1cm47IC8qIGxlYXZlIHRoaXMgZm9yIGFub3RoZXIgKi8KLQkJCX0KLQotCQkJR0VN X1RSQUNFKCIlczogdmlydHVhbCBycT0lbGx4OiVsbGQlcywgbmV3IGVuZ2luZT8gJXNcbiIsCi0J CQkJICBlbmdpbmUtPm5hbWUsCi0JCQkJICBycS0+ZmVuY2UuY29udGV4dCwKLQkJCQkgIHJxLT5m ZW5jZS5zZXFubywKLQkJCQkgIGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpID8gIiEiIDoKLQkJ CQkgIGk5MTVfcmVxdWVzdF9zdGFydGVkKHJxKSA/ICIqIiA6Ci0JCQkJICAiIiwKLQkJCQkgIHll c25vKGVuZ2luZSAhPSB2ZS0+c2libGluZ3NbMF0pKTsKLQotCQkJdmUtPnJlcXVlc3QgPSBOVUxM OwotCQkJdmUtPmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOwot CQkJcmJfZXJhc2VfY2FjaGVkKHJiLCAmZXhlY2xpc3RzLT52aXJ0dWFsKTsKLQkJCVJCX0NMRUFS X05PREUocmIpOwotCi0JCQlHRU1fQlVHX09OKCEocnEtPmV4ZWN1dGlvbl9tYXNrICYgZW5naW5l LT5tYXNrKSk7Ci0JCQlycS0+ZW5naW5lID0gZW5naW5lOwotCi0JCQlpZiAoZW5naW5lICE9IHZl LT5zaWJsaW5nc1swXSkgewotCQkJCXUzMiAqcmVncyA9IHZlLT5jb250ZXh0LmxyY19yZWdfc3Rh dGU7Ci0JCQkJdW5zaWduZWQgaW50IG47Ci0KLQkJCQlHRU1fQlVHX09OKFJFQURfT05DRSh2ZS0+ Y29udGV4dC5pbmZsaWdodCkpOwotCi0JCQkJaWYgKCFpbnRlbF9lbmdpbmVfaGFzX3JlbGF0aXZl X21taW8oZW5naW5lKSkKLQkJCQkJaW50ZWxfbHJfY29udGV4dF9zZXRfcmVnaXN0ZXJfb2Zmc2V0 cyhyZWdzLAotCQkJCQkJCQkJICAgICAgZW5naW5lKTsKLQotCQkJCWlmICghbGlzdF9lbXB0eSgm dmUtPmNvbnRleHQuc2lnbmFscykpCi0JCQkJCXZpcnR1YWxfeGZlcl9icmVhZGNydW1icyh2ZSwg ZW5naW5lKTsKLQotCQkJCS8qCi0JCQkJICogTW92ZSB0aGUgYm91bmQgZW5naW5lIHRvIHRoZSB0 b3Agb2YgdGhlIGxpc3QKLQkJCQkgKiBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4gV2UgdGhlbiBraWNr IHRoaXMKLQkJCQkgKiB0YXNrbGV0IGZpcnN0IGJlZm9yZSBjaGVja2luZyBvdGhlcnMsIHNvIHRo YXQKLQkJCQkgKiB3ZSBwcmVmZXJlbnRpYWxseSByZXVzZSB0aGlzIHNldCBvZiBib3VuZAotCQkJ CSAqIHJlZ2lzdGVycy4KLQkJCQkgKi8KLQkJCQlmb3IgKG4gPSAxOyBuIDwgdmUtPm51bV9zaWJs aW5nczsgbisrKSB7Ci0JCQkJCWlmICh2ZS0+c2libGluZ3Nbbl0gPT0gZW5naW5lKSB7Ci0JCQkJ CQlzd2FwKHZlLT5zaWJsaW5nc1tuXSwKLQkJCQkJCSAgICAgdmUtPnNpYmxpbmdzWzBdKTsKLQkJ CQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJR0VNX0JVR19PTih2ZS0+c2libGluZ3Nb MF0gIT0gZW5naW5lKTsKLQkJCX0KLQotCQkJaWYgKF9faTkxNV9yZXF1ZXN0X3N1Ym1pdChycSkp IHsKLQkJCQlzdWJtaXQgPSB0cnVlOwotCQkJCWxhc3QgPSBycTsKLQkJCX0KLQkJCWk5MTVfcmVx dWVzdF9wdXQocnEpOwotCi0JCQkvKgotCQkJICogSG1tLCB3ZSBoYXZlIGEgYnVuY2ggb2Ygdmly dHVhbCBlbmdpbmUgcmVxdWVzdHMsCi0JCQkgKiBidXQgdGhlIGZpcnN0IG9uZSB3YXMgYWxyZWFk eSBjb21wbGV0ZWQgKHRoYW5rcwotCQkJICogcHJlZW1wdC10by1idXN5ISkuIEtlZXAgbG9va2lu ZyBhdCB0aGUgdmVuZyBxdWV1ZQotCQkJICogdW50aWwgd2UgaGF2ZSBubyBtb3JlIHJlbGV2YW50 IHJlcXVlc3RzIChpLmUuCi0JCQkgKiB0aGUgbm9ybWFsIHN1Ym1pdCBxdWV1ZSBoYXMgaGlnaGVy IHByaW9yaXR5KS4KLQkJCSAqLwotCQkJaWYgKCFzdWJtaXQpIHsKLQkJCQlzcGluX3VubG9jaygm dmUtPmJhc2UuYWN0aXZlLmxvY2spOwotCQkJCXJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlz dHMtPnZpcnR1YWwpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0KLQkJc3Bpbl91bmxvY2so JnZlLT5iYXNlLmFjdGl2ZS5sb2NrKTsKLQkJYnJlYWs7Ci0JfQotCi0Jd2hpbGUgKChyYiA9IHJi X2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT5xdWV1ZSkpKSB7Ci0JCXN0cnVjdCBpOTE1X3ByaW9s aXN0ICpwID0gdG9fcHJpb2xpc3QocmIpOwotCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgKnJu OwotCQlpbnQgaTsKLQotCQlwcmlvbGlzdF9mb3JfZWFjaF9yZXF1ZXN0X2NvbnN1bWUocnEsIHJu LCBwLCBpKSB7Ci0JCQlib29sIG1lcmdlID0gdHJ1ZTsKLQotCQkJLyoKLQkJCSAqIENhbiB3ZSBj b21iaW5lIHRoaXMgcmVxdWVzdCB3aXRoIHRoZSBjdXJyZW50IHBvcnQ/Ci0JCQkgKiBJdCBoYXMg dG8gYmUgdGhlIHNhbWUgY29udGV4dC9yaW5nYnVmZmVyIGFuZCBub3QKLQkJCSAqIGhhdmUgYW55 IGV4Y2VwdGlvbnMgKGUuZy4gR1ZUIHNheWluZyBuZXZlciB0bwotCQkJICogY29tYmluZSBjb250 ZXh0cykuCi0JCQkgKgotCQkJICogSWYgd2UgY2FuIGNvbWJpbmUgdGhlIHJlcXVlc3RzLCB3ZSBj YW4gZXhlY3V0ZSBib3RoCi0JCQkgKiBieSB1cGRhdGluZyB0aGUgUklOR19UQUlMIHRvIHBvaW50 IHRvIHRoZSBlbmQgb2YgdGhlCi0JCQkgKiBzZWNvbmQgcmVxdWVzdCwgYW5kIHNvIHdlIG5ldmVy IG5lZWQgdG8gdGVsbCB0aGUKLQkJCSAqIGhhcmR3YXJlIGFib3V0IHRoZSBmaXJzdC4KLQkJCSAq LwotCQkJaWYgKGxhc3QgJiYgIWNhbl9tZXJnZV9ycShsYXN0LCBycSkpIHsKLQkJCQkvKgotCQkJ CSAqIElmIHdlIGFyZSBvbiB0aGUgc2Vjb25kIHBvcnQgYW5kIGNhbm5vdAotCQkJCSAqIGNvbWJp bmUgdGhpcyByZXF1ZXN0IHdpdGggdGhlIGxhc3QsIHRoZW4gd2UKLQkJCQkgKiBhcmUgZG9uZS4K LQkJCQkgKi8KLQkJCQlpZiAocG9ydCA9PSBsYXN0X3BvcnQpCi0JCQkJCWdvdG8gZG9uZTsKLQot CQkJCS8qCi0JCQkJICogV2UgbXVzdCBub3QgcG9wdWxhdGUgYm90aCBFTFNQW10gd2l0aCB0aGUK LQkJCQkgKiBzYW1lIExSQ0EsIGkuZS4gd2UgbXVzdCBzdWJtaXQgMiBkaWZmZXJlbnQKLQkJCQkg KiBjb250ZXh0cyBpZiB3ZSBzdWJtaXQgMiBFTFNQLgotCQkJCSAqLwotCQkJCWlmIChsYXN0LT5o d19jb250ZXh0ID09IHJxLT5od19jb250ZXh0KQotCQkJCQlnb3RvIGRvbmU7Ci0KLQkJCQlpZiAo aTkxNV9yZXF1ZXN0X2hhc19zZW50aW5lbChsYXN0KSkKLQkJCQkJZ290byBkb25lOwotCi0JCQkJ LyoKLQkJCQkgKiBJZiBHVlQgb3ZlcnJpZGVzIHVzIHdlIG9ubHkgZXZlciBzdWJtaXQKLQkJCQkg KiBwb3J0WzBdLCBsZWF2aW5nIHBvcnRbMV0gZW1wdHkuIE5vdGUgdGhhdCB3ZQotCQkJCSAqIGFs c28gaGF2ZSB0byBiZSBjYXJlZnVsIHRoYXQgd2UgZG9uJ3QgcXVldWUKLQkJCQkgKiB0aGUgc2Ft ZSBjb250ZXh0IChldmVuIHRob3VnaCBhIGRpZmZlcmVudAotCQkJCSAqIHJlcXVlc3QpIHRvIHRo ZSBzZWNvbmQgcG9ydC4KLQkJCQkgKi8KLQkJCQlpZiAoY3R4X3NpbmdsZV9wb3J0X3N1Ym1pc3Np b24obGFzdC0+aHdfY29udGV4dCkgfHwKLQkJCQkgICAgY3R4X3NpbmdsZV9wb3J0X3N1Ym1pc3Np b24ocnEtPmh3X2NvbnRleHQpKQotCQkJCQlnb3RvIGRvbmU7Ci0KLQkJCQltZXJnZSA9IGZhbHNl OwotCQkJfQotCi0JCQlpZiAoX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJxKSkgewotCQkJCWlmICgh bWVyZ2UpIHsKLQkJCQkJKnBvcnQgPSBleGVjbGlzdHNfc2NoZWR1bGVfaW4obGFzdCwgcG9ydCAt IGV4ZWNsaXN0cy0+cGVuZGluZyk7Ci0JCQkJCXBvcnQrKzsKLQkJCQkJbGFzdCA9IE5VTEw7Ci0J CQkJfQotCi0JCQkJR0VNX0JVR19PTihsYXN0ICYmCi0JCQkJCSAgICFjYW5fbWVyZ2VfY3R4KGxh c3QtPmh3X2NvbnRleHQsCi0JCQkJCQkJICBycS0+aHdfY29udGV4dCkpOwotCi0JCQkJc3VibWl0 ID0gdHJ1ZTsKLQkJCQlsYXN0ID0gcnE7Ci0JCQl9Ci0JCX0KLQotCQlyYl9lcmFzZV9jYWNoZWQo JnAtPm5vZGUsICZleGVjbGlzdHMtPnF1ZXVlKTsKLQkJaTkxNV9wcmlvbGlzdF9mcmVlKHApOwot CX0KLQotZG9uZToKLQkvKgotCSAqIEhlcmUgYmUgYSBiaXQgb2YgbWFnaWMhIE9yIHNsZWlnaHQt b2YtaGFuZCwgd2hpY2hldmVyIHlvdSBwcmVmZXIuCi0JICoKLQkgKiBXZSBjaG9vc2UgdGhlIHBy aW9yaXR5IGhpbnQgc3VjaCB0aGF0IGlmIHdlIGFkZCBhIHJlcXVlc3Qgb2YgZ3JlYXRlcgotCSAq IHByaW9yaXR5IHRoYW4gdGhpcywgd2Uga2ljayB0aGUgc3VibWlzc2lvbiB0YXNrbGV0IHRvIGRl Y2lkZSBvbgotCSAqIHRoZSByaWdodCBvcmRlciBvZiBzdWJtaXR0aW5nIHRoZSByZXF1ZXN0cyB0 byBoYXJkd2FyZS4gV2UgbXVzdAotCSAqIGFsc28gYmUgcHJlcGFyZWQgdG8gcmVvcmRlciByZXF1 ZXN0cyBhcyB0aGV5IGFyZSBpbi1mbGlnaHQgb24gdGhlCi0JICogSFcuIFdlIGRlcml2ZSB0aGUg cHJpb3JpdHkgaGludCB0aGVuIGFzIHRoZSBmaXJzdCAiaG9sZSIgaW4KLQkgKiB0aGUgSFcgc3Vi bWlzc2lvbiBwb3J0cyBhbmQgaWYgdGhlcmUgYXJlIG5vIGF2YWlsYWJsZSBzbG90cywKLQkgKiB0 aGUgcHJpb3JpdHkgb2YgdGhlIGxvd2VzdCBleGVjdXRpbmcgcmVxdWVzdCwgaS5lLiBsYXN0Lgot CSAqCi0JICogV2hlbiB3ZSBkbyByZWNlaXZlIGEgaGlnaGVyIHByaW9yaXR5IHJlcXVlc3QgcmVh ZHkgdG8gcnVuIGZyb20gdGhlCi0JICogdXNlciwgc2VlIHF1ZXVlX3JlcXVlc3QoKSwgdGhlIHBy aW9yaXR5IGhpbnQgaXMgYnVtcGVkIHRvIHRoYXQKLQkgKiByZXF1ZXN0IHRyaWdnZXJpbmcgcHJl ZW1wdGlvbiBvbiB0aGUgbmV4dCBkZXF1ZXVlIChvciBzdWJzZXF1ZW50Ci0JICogaW50ZXJydXB0 IGZvciBzZWNvbmRhcnkgcG9ydHMpLgotCSAqLwotCWV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlf aGludCA9IHF1ZXVlX3ByaW8oZXhlY2xpc3RzKTsKLQlHRU1fVFJBQ0UoIiVzOiBxdWV1ZV9wcmlv cml0eV9oaW50OiVkLCBzdWJtaXQ6JXNcbiIsCi0JCSAgZW5naW5lLT5uYW1lLCBleGVjbGlzdHMt PnF1ZXVlX3ByaW9yaXR5X2hpbnQsCi0JCSAgeWVzbm8oc3VibWl0KSk7Ci0KLQlpZiAoc3VibWl0 KSB7Ci0JCSpwb3J0ID0gZXhlY2xpc3RzX3NjaGVkdWxlX2luKGxhc3QsIHBvcnQgLSBleGVjbGlz dHMtPnBlbmRpbmcpOwotCQlleGVjbGlzdHMtPnN3aXRjaF9wcmlvcml0eV9oaW50ID0KLQkJCXN3 aXRjaF9wcmlvKGVuZ2luZSwgKmV4ZWNsaXN0cy0+cGVuZGluZyk7Ci0KLQkJLyoKLQkJICogU2tp cCBpZiB3ZSBlbmRlZCB1cCB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgc2V0IG9mIHJlcXVlc3RzLAot CQkgKiBlLmcuIHRyeWluZyB0byB0aW1lc2xpY2UgYSBwYWlyIG9mIG9yZGVyZWQgY29udGV4dHMK LQkJICovCi0JCWlmICghbWVtY21wKGV4ZWNsaXN0cy0+YWN0aXZlLCBleGVjbGlzdHMtPnBlbmRp bmcsCi0JCQkgICAgKHBvcnQgLSBleGVjbGlzdHMtPnBlbmRpbmcgKyAxKSAqIHNpemVvZigqcG9y dCkpKSB7Ci0JCQlkbwotCQkJCWV4ZWNsaXN0c19zY2hlZHVsZV9vdXQoZmV0Y2hfYW5kX3plcm8o cG9ydCkpOwotCQkJd2hpbGUgKHBvcnQtLSAhPSBleGVjbGlzdHMtPnBlbmRpbmcpOwotCi0JCQln b3RvIHNraXBfc3VibWl0OwotCQl9Ci0KLQkJbWVtc2V0KHBvcnQgKyAxLCAwLCAobGFzdF9wb3J0 IC0gcG9ydCkgKiBzaXplb2YoKnBvcnQpKTsKLQkJZXhlY2xpc3RzX3N1Ym1pdF9wb3J0cyhlbmdp bmUpOwotCi0JCXNldF9wcmVlbXB0X3RpbWVvdXQoZW5naW5lKTsKLQl9IGVsc2Ugewotc2tpcF9z dWJtaXQ6Ci0JCXJpbmdfc2V0X3BhdXNlZChlbmdpbmUsIDApOwotCX0KLX0KLQotc3RhdGljIHZv aWQKLWNhbmNlbF9wb3J0X3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICog Y29uc3QgZXhlY2xpc3RzKQotewotCXN0cnVjdCBpOTE1X3JlcXVlc3QgKiBjb25zdCAqcG9ydDsK LQotCWZvciAocG9ydCA9IGV4ZWNsaXN0cy0+cGVuZGluZzsgKnBvcnQ7IHBvcnQrKykKLQkJZXhl Y2xpc3RzX3NjaGVkdWxlX291dCgqcG9ydCk7Ci0JbWVtc2V0KGV4ZWNsaXN0cy0+cGVuZGluZywg MCwgc2l6ZW9mKGV4ZWNsaXN0cy0+cGVuZGluZykpOwotCi0JLyogTWFyayB0aGUgZW5kIG9mIGFj dGl2ZSBiZWZvcmUgd2Ugb3ZlcndyaXRlICphY3RpdmUgKi8KLQlmb3IgKHBvcnQgPSB4Y2hnKCZl eGVjbGlzdHMtPmFjdGl2ZSwgZXhlY2xpc3RzLT5wZW5kaW5nKTsgKnBvcnQ7IHBvcnQrKykKLQkJ ZXhlY2xpc3RzX3NjaGVkdWxlX291dCgqcG9ydCk7Ci0JV1JJVEVfT05DRShleGVjbGlzdHMtPmFj dGl2ZSwKLQkJICAgbWVtc2V0KGV4ZWNsaXN0cy0+aW5mbGlnaHQsIDAsIHNpemVvZihleGVjbGlz dHMtPmluZmxpZ2h0KSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWludmFsaWRhdGVfY3Ni X2VudHJpZXMoY29uc3QgdTMyICpmaXJzdCwgY29uc3QgdTMyICpsYXN0KQotewotCWNsZmx1c2go KHZvaWQgKilmaXJzdCk7Ci0JY2xmbHVzaCgodm9pZCAqKWxhc3QpOwotfQotCi1zdGF0aWMgaW5s aW5lIGJvb2wKLXJlc2V0X2luX3Byb2dyZXNzKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhl Y2xpc3RzICpleGVjbGlzdHMpCi17Ci0JcmV0dXJuIHVubGlrZWx5KCFfX3Rhc2tsZXRfaXNfZW5h YmxlZCgmZXhlY2xpc3RzLT50YXNrbGV0KSk7Ci19Ci0KLS8qCi0gKiBTdGFydGluZyB3aXRoIEdl bjEyLCB0aGUgc3RhdHVzIGhhcyBhIG5ldyBmb3JtYXQ6Ci0gKgotICogICAgIGJpdCAgMDogICAg IHN3aXRjaGVkIHRvIG5ldyBxdWV1ZQotICogICAgIGJpdCAgMTogICAgIHJlc2VydmVkCi0gKiAg ICAgYml0ICAyOiAgICAgc2VtYXBob3JlIHdhaXQgbW9kZSAocG9sbCBvciBzaWduYWwpLCBvbmx5 IHZhbGlkIHdoZW4KLSAqICAgICAgICAgICAgICAgICBzd2l0Y2ggZGV0YWlsIGlzIHNldCB0byAi d2FpdCBvbiBzZW1hcGhvcmUiCi0gKiAgICAgYml0cyAzLTU6ICAgZW5naW5lIGNsYXNzCi0gKiAg ICAgYml0cyA2LTExOiAgZW5naW5lIGluc3RhbmNlCi0gKiAgICAgYml0cyAxMi0xNDogcmVzZXJ2 ZWQKLSAqICAgICBiaXRzIDE1LTI1OiBzdyBjb250ZXh0IGlkIG9mIHRoZSBscmMgdGhlIEdUIHN3 aXRjaGVkIHRvCi0gKiAgICAgYml0cyAyNi0zMTogc3cgY291bnRlciBvZiB0aGUgbHJjIHRoZSBH VCBzd2l0Y2hlZCB0bwotICogICAgIGJpdHMgMzItMzU6IGNvbnRleHQgc3dpdGNoIGRldGFpbAot ICogICAgICAgICAgICAgICAgICAtIDA6IGN0eCBjb21wbGV0ZQotICogICAgICAgICAgICAgICAg ICAtIDE6IHdhaXQgb24gc3luYyBmbGlwCi0gKiAgICAgICAgICAgICAgICAgIC0gMjogd2FpdCBv biB2YmxhbmsKLSAqICAgICAgICAgICAgICAgICAgLSAzOiB3YWl0IG9uIHNjYW5saW5lCi0gKiAg ICAgICAgICAgICAgICAgIC0gNDogd2FpdCBvbiBzZW1hcGhvcmUKLSAqICAgICAgICAgICAgICAg ICAgLSA1OiBjb250ZXh0IHByZWVtcHRlZCAobm90IG9uIFNFTUFQSE9SRV9XQUlUIG9yCi0gKiAg ICAgICAgICAgICAgICAgICAgICAgV0FJVF9GT1JfRVZFTlQpCi0gKiAgICAgYml0ICAzNjogICAg cmVzZXJ2ZWQKLSAqICAgICBiaXRzIDM3LTQzOiB3YWl0IGRldGFpbCAoZm9yIHN3aXRjaCBkZXRh aWwgMSB0byA0KQotICogICAgIGJpdHMgNDQtNDY6IHJlc2VydmVkCi0gKiAgICAgYml0cyA0Ny01 Nzogc3cgY29udGV4dCBpZCBvZiB0aGUgbHJjIHRoZSBHVCBzd2l0Y2hlZCBhd2F5IGZyb20KLSAq ICAgICBiaXRzIDU4LTYzOiBzdyBjb3VudGVyIG9mIHRoZSBscmMgdGhlIEdUIHN3aXRjaGVkIGF3 YXkgZnJvbQotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLWdlbjEyX2NzYl9wYXJzZShjb25zdCBz dHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzLCBjb25zdCB1MzIgKmNzYikK LXsKLQl1MzIgbG93ZXJfZHcgPSBjc2JbMF07Ci0JdTMyIHVwcGVyX2R3ID0gY3NiWzFdOwotCWJv b2wgY3R4X3RvX3ZhbGlkID0gR0VOMTJfQ1NCX0NUWF9WQUxJRChsb3dlcl9kdyk7Ci0JYm9vbCBj dHhfYXdheV92YWxpZCA9IEdFTjEyX0NTQl9DVFhfVkFMSUQodXBwZXJfZHcpOwotCWJvb2wgbmV3 X3F1ZXVlID0gbG93ZXJfZHcgJiBHRU4xMl9DVFhfU1RBVFVTX1NXSVRDSEVEX1RPX05FV19RVUVV RTsKLQotCS8qCi0JICogVGhlIGNvbnRleHQgc3dpdGNoIGRldGFpbCBpcyBub3QgZ3VhcmFudGVl ZCB0byBiZSA1IHdoZW4gYSBwcmVlbXB0aW9uCi0JICogb2NjdXJzLCBzbyB3ZSBjYW4ndCBqdXN0 IGNoZWNrIGZvciB0aGF0LiBUaGUgY2hlY2sgYmVsb3cgd29ya3MgZm9yCi0JICogYWxsIHRoZSBj YXNlcyB3ZSBjYXJlIGFib3V0LCBpbmNsdWRpbmcgcHJlZW1wdGlvbnMgb2YgV0FJVAotCSAqIGlu c3RydWN0aW9ucyBhbmQgbGl0ZS1yZXN0b3JlLiBQcmVlbXB0LXRvLWlkbGUgdmlhIHRoZSBDVFJM IHJlZ2lzdGVyCi0JICogd291bGQgcmVxdWlyZSBzb21lIGV4dHJhIGhhbmRsaW5nLCBidXQgd2Ug ZG9uJ3Qgc3VwcG9ydCB0aGF0LgotCSAqLwotCWlmICghY3R4X2F3YXlfdmFsaWQgfHwgbmV3X3F1 ZXVlKSB7Ci0JCUdFTV9CVUdfT04oIWN0eF90b192YWxpZCk7Ci0JCXJldHVybiB0cnVlOwotCX0K LQotCS8qCi0JICogc3dpdGNoIGRldGFpbCA9IDUgaXMgY292ZXJlZCBieSB0aGUgY2FzZSBhYm92 ZSBhbmQgd2UgZG8gbm90IGV4cGVjdCBhCi0JICogY29udGV4dCBzd2l0Y2ggb24gYW4gdW5zdWNj ZXNzZnVsIHdhaXQgaW5zdHJ1Y3Rpb24gc2luY2Ugd2UgYWx3YXlzCi0JICogdXNlIHBvbGxpbmcg bW9kZS4KLQkgKi8KLQlHRU1fQlVHX09OKEdFTjEyX0NUWF9TV0lUQ0hfREVUQUlMKHVwcGVyX2R3 KSk7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWdlbjhfY3NiX3Bh cnNlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMsIGNvbnN0 IHUzMiAqY3NiKQotewotCXJldHVybiAqY3NiICYgKEdFTjhfQ1RYX1NUQVRVU19JRExFX0FDVElW RSB8IEdFTjhfQ1RYX1NUQVRVU19QUkVFTVBURUQpOwotfQotCi1zdGF0aWMgdm9pZCBwcm9jZXNz X2NzYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0Jc3RydWN0IGludGVsX2Vu Z2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Ci0J Y29uc3QgdTMyICogY29uc3QgYnVmID0gZXhlY2xpc3RzLT5jc2Jfc3RhdHVzOwotCWNvbnN0IHU4 IG51bV9lbnRyaWVzID0gZXhlY2xpc3RzLT5jc2Jfc2l6ZTsKLQl1OCBoZWFkLCB0YWlsOwotCi0J LyoKLQkgKiBBcyB3ZSBtb2RpZnkgb3VyIGV4ZWNsaXN0cyBzdGF0ZSB0cmFja2luZyB3ZSByZXF1 aXJlIGV4Y2x1c2l2ZQotCSAqIGFjY2Vzcy4gRWl0aGVyIHdlIGFyZSBpbnNpZGUgdGhlIHRhc2ts ZXQsIG9yIHRoZSB0YXNrbGV0IGlzIGRpc2FibGVkCi0JICogYW5kIHdlIGFzc3VtZSB0aGF0IGlz IG9ubHkgaW5zaWRlIHRoZSByZXNldCBwYXRocyBhbmQgc28gc2VyaWFsaXNlZC4KLQkgKi8KLQlH RU1fQlVHX09OKCF0YXNrbGV0X2lzX2xvY2tlZCgmZXhlY2xpc3RzLT50YXNrbGV0KSAmJgotCQkg ICAhcmVzZXRfaW5fcHJvZ3Jlc3MoZXhlY2xpc3RzKSk7Ci0JR0VNX0JVR19PTighaW50ZWxfZW5n aW5lX2luX2V4ZWNsaXN0c19zdWJtaXNzaW9uX21vZGUoZW5naW5lKSk7Ci0KLQkvKgotCSAqIE5v dGUgdGhhdCBjc2Jfd3JpdGUsIGNzYl9zdGF0dXMgbWF5IGJlIGVpdGhlciBpbiBIV1NQIG9yIG1t aW8uCi0JICogV2hlbiByZWFkaW5nIGZyb20gdGhlIGNzYl93cml0ZSBtbWlvIHJlZ2lzdGVyLCB3 ZSBoYXZlIHRvIGJlCi0JICogY2FyZWZ1bCB0byBvbmx5IHVzZSB0aGUgR0VOOF9DU0JfV1JJVEVf UFRSIHBvcnRpb24sIHdoaWNoIGlzCi0JICogdGhlIGxvdyA0Yml0cy4gQXMgaXQgaGFwcGVucyB3 ZSBrbm93IHRoZSBuZXh0IDRiaXRzIGFyZSBhbHdheXMKLQkgKiB6ZXJvIGFuZCBzbyB3ZSBjYW4g c2ltcGx5IG1hc2tlZCBvZmYgdGhlIGxvdyB1OCBvZiB0aGUgcmVnaXN0ZXIKLQkgKiBhbmQgdHJl YXQgaXQgaWRlbnRpY2FsbHkgdG8gcmVhZGluZyBmcm9tIHRoZSBIV1NQICh3aXRob3V0IGhhdmlu ZwotCSAqIHRvIHVzZSBleHBsaWNpdCBzaGlmdGluZyBhbmQgbWFza2luZywgYW5kIHByb2JhYmx5 IGJpZnVyY2F0aW5nCi0JICogdGhlIGNvZGUgdG8gaGFuZGxlIHRoZSBsZWdhY3kgbW1pbyByZWFk KS4KLQkgKi8KLQloZWFkID0gZXhlY2xpc3RzLT5jc2JfaGVhZDsKLQl0YWlsID0gUkVBRF9PTkNF KCpleGVjbGlzdHMtPmNzYl93cml0ZSk7Ci0JR0VNX1RSQUNFKCIlcyBjcy1pcnEgaGVhZD0lZCwg dGFpbD0lZFxuIiwgZW5naW5lLT5uYW1lLCBoZWFkLCB0YWlsKTsKLQlpZiAodW5saWtlbHkoaGVh ZCA9PSB0YWlsKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBIb3BlZnVsbHkgcGFpcmVkIHdpdGgg YSB3bWIoKSBpbiBIVyEKLQkgKgotCSAqIFdlIG11c3QgY29tcGxldGUgdGhlIHJlYWQgb2YgdGhl IHdyaXRlIHBvaW50ZXIgYmVmb3JlIGFueSByZWFkcwotCSAqIGZyb20gdGhlIENTQiwgc28gdGhh dCB3ZSBkbyBub3Qgc2VlIHN0YWxlIHZhbHVlcy4gV2l0aG91dCBhbiBybWIKLQkgKiAobGZlbmNl KSB0aGUgSFcgbWF5IHNwZWN1bGF0aXZlbHkgcGVyZm9ybSB0aGUgQ1NCW10gcmVhZHMgKmJlZm9y ZSoKLQkgKiB3ZSBwZXJmb3JtIHRoZSBSRUFEX09OQ0UoKmNzYl93cml0ZSkuCi0JICovCi0Jcm1i KCk7Ci0KLQlkbyB7Ci0JCWJvb2wgcHJvbW90ZTsKLQotCQlpZiAoKytoZWFkID09IG51bV9lbnRy aWVzKQotCQkJaGVhZCA9IDA7Ci0KLQkJLyoKLQkJICogV2UgYXJlIGZseWluZyBuZWFyIGRyYWdv bnMgYWdhaW4uCi0JCSAqCi0JCSAqIFdlIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3Qg aW4gZXhlY2xpc3RfcG9ydFtdCi0JCSAqIGJ1dCBubyBtb3JlIHRoYW4gdGhhdC4gV2UgYXJlIG9w ZXJhdGluZyBpbiBzb2Z0aXJxCi0JCSAqIGNvbnRleHQgYW5kIHNvIGNhbm5vdCBob2xkIGFueSBt dXRleCBvciBzbGVlcC4gVGhhdAotCQkgKiBwcmV2ZW50cyB1cyBzdG9wcGluZyB0aGUgcmVxdWVz dHMgd2UgYXJlIHByb2Nlc3NpbmcKLQkJICogaW4gcG9ydFtdIGZyb20gYmVpbmcgcmV0aXJlZCBz aW11bHRhbmVvdXNseSAodGhlCi0JCSAqIGJyZWFkY3J1bWIgd2lsbCBiZSBjb21wbGV0ZSBiZWZv cmUgd2Ugc2VlIHRoZQotCQkgKiBjb250ZXh0LXN3aXRjaCkuIEFzIHdlIG9ubHkgaG9sZCB0aGUg cmVmZXJlbmNlIHRvIHRoZQotCQkgKiByZXF1ZXN0LCBhbnkgcG9pbnRlciBjaGFzaW5nIHVuZGVy bmVhdGggdGhlIHJlcXVlc3QKLQkJICogaXMgc3ViamVjdCB0byBhIHBvdGVudGlhbCB1c2UtYWZ0 ZXItZnJlZS4gVGh1cyB3ZQotCQkgKiBzdG9yZSBhbGwgb2YgdGhlIGJvb2trZWVwaW5nIHdpdGhp biBwb3J0W10gYXMKLQkJICogcmVxdWlyZWQsIGFuZCBhdm9pZCB1c2luZyB1bmd1YXJkZWQgcG9p bnRlcnMgYmVuZWF0aAotCQkgKiByZXF1ZXN0IGl0c2VsZi4gVGhlIHNhbWUgYXBwbGllcyB0byB0 aGUgYXRvbWljCi0JCSAqIHN0YXR1cyBub3RpZmllci4KLQkJICovCi0KLQkJR0VNX1RSQUNFKCIl cyBjc2JbJWRdOiBzdGF0dXM9MHglMDh4OjB4JTA4eFxuIiwKLQkJCSAgZW5naW5lLT5uYW1lLCBo ZWFkLAotCQkJICBidWZbMiAqIGhlYWQgKyAwXSwgYnVmWzIgKiBoZWFkICsgMV0pOwotCi0JCWlm IChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKLQkJCXByb21vdGUgPSBnZW4xMl9jc2Jf cGFyc2UoZXhlY2xpc3RzLCBidWYgKyAyICogaGVhZCk7Ci0JCWVsc2UKLQkJCXByb21vdGUgPSBn ZW44X2NzYl9wYXJzZShleGVjbGlzdHMsIGJ1ZiArIDIgKiBoZWFkKTsKLQkJaWYgKHByb21vdGUp IHsKLQkJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKiBjb25zdCAqb2xkID0gZXhlY2xpc3RzLT5hY3Rp dmU7Ci0KLQkJCS8qIFBvaW50IGFjdGl2ZSB0byB0aGUgbmV3IEVMU1A7IHByZXZlbnQgb3Zlcndy aXRpbmcgKi8KLQkJCVdSSVRFX09OQ0UoZXhlY2xpc3RzLT5hY3RpdmUsIGV4ZWNsaXN0cy0+cGVu ZGluZyk7Ci0JCQlzZXRfdGltZXNsaWNlKGVuZ2luZSk7Ci0KLQkJCWlmICghaW5qZWN0X3ByZWVt cHRfaGFuZyhleGVjbGlzdHMpKQotCQkJCXJpbmdfc2V0X3BhdXNlZChlbmdpbmUsIDApOwotCi0J CQkvKiBjYW5jZWwgb2xkIGluZmxpZ2h0LCBwcmVwYXJlIGZvciBzd2l0Y2ggKi8KLQkJCXRyYWNl X3BvcnRzKGV4ZWNsaXN0cywgInByZWVtcHRlZCIsIG9sZCk7Ci0JCQl3aGlsZSAoKm9sZCkKLQkJ CQlleGVjbGlzdHNfc2NoZWR1bGVfb3V0KCpvbGQrKyk7Ci0KLQkJCS8qIHN3aXRjaCBwZW5kaW5n IHRvIGluZmxpZ2h0ICovCi0JCQlHRU1fQlVHX09OKCFhc3NlcnRfcGVuZGluZ192YWxpZChleGVj bGlzdHMsICJwcm9tb3RlIikpOwotCQkJV1JJVEVfT05DRShleGVjbGlzdHMtPmFjdGl2ZSwKLQkJ CQkgICBtZW1jcHkoZXhlY2xpc3RzLT5pbmZsaWdodCwKLQkJCQkJICBleGVjbGlzdHMtPnBlbmRp bmcsCi0JCQkJCSAgZXhlY2xpc3RzX251bV9wb3J0cyhleGVjbGlzdHMpICoKLQkJCQkJICBzaXpl b2YoKmV4ZWNsaXN0cy0+cGVuZGluZykpKTsKLQotCQkJV1JJVEVfT05DRShleGVjbGlzdHMtPnBl bmRpbmdbMF0sIE5VTEwpOwotCQl9IGVsc2UgewotCQkJR0VNX0JVR19PTighKmV4ZWNsaXN0cy0+ YWN0aXZlKTsKLQotCQkJLyogcG9ydDAgY29tcGxldGVkLCBhZHZhbmNlZCB0byBwb3J0MSAqLwot CQkJdHJhY2VfcG9ydHMoZXhlY2xpc3RzLCAiY29tcGxldGVkIiwgZXhlY2xpc3RzLT5hY3RpdmUp OwotCi0JCQkvKgotCQkJICogV2UgcmVseSBvbiB0aGUgaGFyZHdhcmUgYmVpbmcgc3Ryb25nbHkK LQkJCSAqIG9yZGVyZWQsIHRoYXQgdGhlIGJyZWFkY3J1bWIgd3JpdGUgaXMKLQkJCSAqIGNvaGVy ZW50ICh2aXNpYmxlIGZyb20gdGhlIENQVSkgYmVmb3JlIHRoZQotCQkJICogdXNlciBpbnRlcnJ1 cHQgYW5kIENTQiBpcyBwcm9jZXNzZWQuCi0JCQkgKi8KLQkJCUdFTV9CVUdfT04oIWk5MTVfcmVx dWVzdF9jb21wbGV0ZWQoKmV4ZWNsaXN0cy0+YWN0aXZlKSAmJgotCQkJCSAgICFyZXNldF9pbl9w cm9ncmVzcyhleGVjbGlzdHMpKTsKLQkJCWV4ZWNsaXN0c19zY2hlZHVsZV9vdXQoKmV4ZWNsaXN0 cy0+YWN0aXZlKyspOwotCi0JCQlHRU1fQlVHX09OKGV4ZWNsaXN0cy0+YWN0aXZlIC0gZXhlY2xp c3RzLT5pbmZsaWdodCA+Ci0JCQkJICAgZXhlY2xpc3RzX251bV9wb3J0cyhleGVjbGlzdHMpKTsK LQkJfQotCX0gd2hpbGUgKGhlYWQgIT0gdGFpbCk7Ci0KLQlleGVjbGlzdHMtPmNzYl9oZWFkID0g aGVhZDsKLQotCS8qCi0JICogR2VuMTEgaGFzIHByb3ZlbiB0byBmYWlsIHdydCBnbG9iYWwgb2Jz ZXJ2YXRpb24gcG9pbnQgYmV0d2VlbgotCSAqIGVudHJ5IGFuZCB0YWlsIHVwZGF0ZSwgZmFpbGlu ZyBvbiB0aGUgb3JkZXJpbmcgYW5kIHRodXMKLQkgKiB3ZSBzZWUgYW4gb2xkIGVudHJ5IGluIHRo ZSBjb250ZXh0IHN0YXR1cyBidWZmZXIuCi0JICoKLQkgKiBGb3JjaWJseSBldmljdCBvdXQgZW50 cmllcyBmb3IgdGhlIG5leHQgZ3B1IGNzYiB1cGRhdGUsCi0JICogdG8gaW5jcmVhc2UgdGhlIG9k ZHMgdGhhdCB3ZSBnZXQgYSBmcmVzaCBlbnRyaWVzIHdpdGggbm9uCi0JICogd29ya2luZyBoYXJk d2FyZS4gVGhlIGNvc3QgZm9yIGRvaW5nIHNvIGNvbWVzIG91dCBtb3N0bHkgd2l0aAotCSAqIHRo ZSB3YXNoIGFzIGhhcmR3YXJlLCB3b3JraW5nIG9yIG5vdCwgd2lsbCBuZWVkIHRvIGRvIHRoZQot CSAqIGludmFsaWRhdGlvbiBiZWZvcmUuCi0JICovCi0JaW52YWxpZGF0ZV9jc2JfZW50cmllcygm YnVmWzBdLCAmYnVmW251bV9lbnRyaWVzIC0gMV0pOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4ZWNs aXN0c19zdWJtaXNzaW9uX3Rhc2tsZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqY29uc3QgZW5n aW5lKQotewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmVuZ2luZS0+YWN0aXZlLmxvY2spOwotCWlm ICghZW5naW5lLT5leGVjbGlzdHMucGVuZGluZ1swXSkgewotCQlyY3VfcmVhZF9sb2NrKCk7IC8q IHByb3RlY3QgcGVla2luZyBhdCBleGVjbGlzdHMtPmFjdGl2ZSAqLwotCQlleGVjbGlzdHNfZGVx dWV1ZShlbmdpbmUpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQl9Ci19Ci0KLXN0YXRpYyBub2lu bGluZSB2b2lkIHByZWVtcHRfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQot ewotCWNvbnN0IHVuc2lnbmVkIGludCBiaXQgPSBJOTE1X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+ aWQ7Ci0JdW5zaWduZWQgbG9uZyAqbG9jayA9ICZlbmdpbmUtPmd0LT5yZXNldC5mbGFnczsKLQot CWlmIChpOTE1X21vZHBhcmFtcy5yZXNldCA8IDMpCi0JCXJldHVybjsKLQotCWlmICh0ZXN0X2Fu ZF9zZXRfYml0KGJpdCwgbG9jaykpCi0JCXJldHVybjsKLQotCS8qIE1hcmsgdGhpcyB0YXNrbGV0 IGFzIGRpc2FibGVkIHRvIGF2b2lkIHdhaXRpbmcgZm9yIGl0IHRvIGNvbXBsZXRlICovCi0JdGFz a2xldF9kaXNhYmxlX25vc3luYygmZW5naW5lLT5leGVjbGlzdHMudGFza2xldCk7Ci0KLQlHRU1f VFJBQ0UoIiVzOiBwcmVlbXB0IHRpbWVvdXQgJWx1KyV1bXNcbiIsCi0JCSAgZW5naW5lLT5uYW1l LAotCQkgIFJFQURfT05DRShlbmdpbmUtPnByb3BzLnByZWVtcHRfdGltZW91dF9tcyksCi0JCSAg amlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gZW5naW5lLT5leGVjbGlzdHMucHJlZW1wdC5leHBp cmVzKSk7Ci0JaW50ZWxfZW5naW5lX3Jlc2V0KGVuZ2luZSwgInByZWVtcHRpb24gdGltZSBvdXQi KTsKLQotCXRhc2tsZXRfZW5hYmxlKCZlbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0KTsKLQljbGVh cl9hbmRfd2FrZV91cF9iaXQoYml0LCBsb2NrKTsKLX0KLQotc3RhdGljIGJvb2wgcHJlZW1wdF90 aW1lb3V0KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmNvbnN0IGVuZ2luZSkKLXsKLQlj b25zdCBzdHJ1Y3QgdGltZXJfbGlzdCAqdCA9ICZlbmdpbmUtPmV4ZWNsaXN0cy5wcmVlbXB0Owot Ci0JaWYgKCFDT05GSUdfRFJNX0k5MTVfUFJFRU1QVF9USU1FT1VUKQotCQlyZXR1cm4gZmFsc2U7 Ci0KLQlpZiAoIXRpbWVyX2V4cGlyZWQodCkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiBS RUFEX09OQ0UoZW5naW5lLT5leGVjbGlzdHMucGVuZGluZ1swXSk7Ci19Ci0KLS8qCi0gKiBDaGVj ayB0aGUgdW5yZWFkIENvbnRleHQgU3RhdHVzIEJ1ZmZlcnMgYW5kIG1hbmFnZSB0aGUgc3VibWlz c2lvbiBvZiBuZXcKLSAqIGNvbnRleHRzIHRvIHRoZSBFTFNQIGFjY29yZGluZ2x5LgotICovCi1z dGF0aWMgdm9pZCBleGVjbGlzdHNfc3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0 YSkKLXsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICogY29uc3QgZW5naW5lID0gKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKilkYXRhOwotCWJvb2wgdGltZW91dCA9IHByZWVtcHRfdGltZW91dChl bmdpbmUpOwotCi0JcHJvY2Vzc19jc2IoZW5naW5lKTsKLQlpZiAoIVJFQURfT05DRShlbmdpbmUt PmV4ZWNsaXN0cy5wZW5kaW5nWzBdKSB8fCB0aW1lb3V0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+YWN0aXZlLmxvY2ssIGZsYWdzKTsK LQkJX19leGVjbGlzdHNfc3VibWlzc2lvbl90YXNrbGV0KGVuZ2luZSk7Ci0JCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmVuZ2luZS0+YWN0aXZlLmxvY2ssIGZsYWdzKTsKLQotCQkvKiBSZWNoZWNr IGFmdGVyIHNlcmlhbGlzaW5nIHdpdGggZGlyZWN0LXN1Ym1pc3Npb24gKi8KLQkJaWYgKHRpbWVv dXQgJiYgcHJlZW1wdF90aW1lb3V0KGVuZ2luZSkpCi0JCQlwcmVlbXB0X3Jlc2V0KGVuZ2luZSk7 Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2V4ZWNsaXN0c19raWNrKHN0cnVjdCBpbnRlbF9lbmdp bmVfZXhlY2xpc3RzICpleGVjbGlzdHMpCi17Ci0JLyogS2ljayB0aGUgdGFza2xldCBmb3Igc29t ZSBpbnRlcnJ1cHQgY29hbGVzY2luZyBhbmQgcmVzZXQgaGFuZGxpbmcgKi8KLQl0YXNrbGV0X2hp X3NjaGVkdWxlKCZleGVjbGlzdHMtPnRhc2tsZXQpOwotfQotCi0jZGVmaW5lIGV4ZWNsaXN0c19r aWNrKHQsIG1lbWJlcikgXAotCV9fZXhlY2xpc3RzX2tpY2soY29udGFpbmVyX29mKHQsIHN0cnVj dCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzLCBtZW1iZXIpKQotCi1zdGF0aWMgdm9pZCBleGVjbGlz dHNfdGltZXNsaWNlKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKLXsKLQlleGVjbGlzdHNfa2lj ayh0aW1lciwgdGltZXIpOwotfQotCi1zdGF0aWMgdm9pZCBleGVjbGlzdHNfcHJlZW1wdChzdHJ1 Y3QgdGltZXJfbGlzdCAqdGltZXIpCi17Ci0JZXhlY2xpc3RzX2tpY2sodGltZXIsIHByZWVtcHQp OwotfQotCi1zdGF0aWMgdm9pZCBxdWV1ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKLQkJCSAgc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSwKLQkJCSAgaW50IHBy aW8pCi17Ci0JR0VNX0JVR19PTighbGlzdF9lbXB0eSgmbm9kZS0+bGluaykpOwotCWxpc3RfYWRk X3RhaWwoJm5vZGUtPmxpbmssIGk5MTVfc2NoZWRfbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgcHJp bykpOwotfQotCi1zdGF0aWMgdm9pZCBfX3N1Ym1pdF9xdWV1ZV9pbW0oc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQotewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29u c3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwotCi0JaWYgKHJlc2V0X2luX3Byb2dy ZXNzKGV4ZWNsaXN0cykpCi0JCXJldHVybjsgLyogZGVmZXIgdW50aWwgd2UgcmVzdGFydCB0aGUg ZW5naW5lIGZvbGxvd2luZyByZXNldCAqLwotCi0JaWYgKGV4ZWNsaXN0cy0+dGFza2xldC5mdW5j ID09IGV4ZWNsaXN0c19zdWJtaXNzaW9uX3Rhc2tsZXQpCi0JCV9fZXhlY2xpc3RzX3N1Ym1pc3Np b25fdGFza2xldChlbmdpbmUpOwotCWVsc2UKLQkJdGFza2xldF9oaV9zY2hlZHVsZSgmZXhlY2xp c3RzLT50YXNrbGV0KTsKLX0KLQotc3RhdGljIHZvaWQgc3VibWl0X3F1ZXVlKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCSBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkK LXsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzID0gJmVuZ2luZS0+ ZXhlY2xpc3RzOwotCi0JaWYgKHJxX3ByaW8ocnEpIDw9IGV4ZWNsaXN0cy0+cXVldWVfcHJpb3Jp dHlfaGludCkKLQkJcmV0dXJuOwotCi0JZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0g cnFfcHJpbyhycSk7Ci0JX19zdWJtaXRfcXVldWVfaW1tKGVuZ2luZSk7Ci19Ci0KLXN0YXRpYyB2 b2lkIGV4ZWNsaXN0c19zdWJtaXRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0 KQotewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IHJlcXVlc3QtPmVuZ2luZTsK LQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogV2lsbCBiZSBjYWxsZWQgZnJvbSBpcnEtY29u dGV4dCB3aGVuIHVzaW5nIGZvcmVpZ24gZmVuY2VzLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZl bmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7Ci0KLQlxdWV1ZV9yZXF1ZXN0KGVuZ2luZSwgJnJl cXVlc3QtPnNjaGVkLCBycV9wcmlvKHJlcXVlc3QpKTsKLQotCUdFTV9CVUdfT04oUkJfRU1QVFlf Uk9PVCgmZW5naW5lLT5leGVjbGlzdHMucXVldWUucmJfcm9vdCkpOwotCUdFTV9CVUdfT04obGlz dF9lbXB0eSgmcmVxdWVzdC0+c2NoZWQubGluaykpOwotCi0Jc3VibWl0X3F1ZXVlKGVuZ2luZSwg cmVxdWVzdCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmFjdGl2ZS5sb2Nr LCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19jb250ZXh0X2Rlc3Ryb3koc3Ry dWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gY29udGFpbmVy X29mKGtyZWYsIHR5cGVvZigqY2UpLCByZWYpOwotCi0JR0VNX0JVR19PTighaTkxNV9hY3RpdmVf aXNfaWRsZSgmY2UtPmFjdGl2ZSkpOwotCUdFTV9CVUdfT04oaW50ZWxfY29udGV4dF9pc19waW5u ZWQoY2UpKTsKLQotCWlmIChjZS0+c3RhdGUpCi0JCWludGVsX2xyX2NvbnRleHRfZmluaShjZSk7 CisJaWYgKGVuZ2luZS0+cGlubmVkX2RlZmF1bHRfc3RhdGUpCisJCW1lbWNweShyZWdzLCAvKiBz a2lwIHJlc3RvcmluZyB0aGUgdmFuaWxsYSBQUEhXU1AgKi8KKwkJICAgICAgIGVuZ2luZS0+cGlu bmVkX2RlZmF1bHRfc3RhdGUgKyBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkUsCisJCSAgICAgICBl bmdpbmUtPmNvbnRleHRfc2l6ZSAtIFBBR0VfU0laRSk7CiAKLQlpbnRlbF9jb250ZXh0X2Zpbmko Y2UpOwotCWludGVsX2NvbnRleHRfZnJlZShjZSk7CisJbHJfY29udGV4dF9pbml0X3JlZ19zdGF0 ZShyZWdzLCBjZSwgZW5naW5lLCBjZS0+cmluZywgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZApA QCAtMjM3Nyw5ICs2NDMsOSBAQCB2b2lkIGludGVsX2xyX2NvbnRleHRfdW5waW4oc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlKQogCWludGVsX3JpbmdfcmVzZXQoY2UtPnJpbmcsIGNlLT5yaW5nLT50 YWlsKTsKIH0KIAotc3RhdGljIHZvaWQKLWxyX2NvbnRleHRfdXBkYXRlX3JlZ19zdGF0ZShjb25z dCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCi0JCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQordm9pZAoraW50ZWxfbHJfY29udGV4dF91cGRhdGVfcmVnX3N0YXRl KGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9IGNlLT5y aW5nOwogCXUzMiAqcmVncyA9IGNlLT5scmNfcmVnX3N0YXRlOwpAQCAtMjQyNCw3ICs2OTAsNyBA QCBpbnRlbF9scl9jb250ZXh0X3BpbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCiAKIAljZS0+ bHJjX2Rlc2MgPSBscmNfZGVzY3JpcHRvcihjZSwgZW5naW5lKTsKIAljZS0+bHJjX3JlZ19zdGF0 ZSA9IHZhZGRyICsgTFJDX1NUQVRFX1BOICogUEFHRV9TSVpFOwotCWxyX2NvbnRleHRfdXBkYXRl X3JlZ19zdGF0ZShjZSwgZW5naW5lKTsKKwlpbnRlbF9scl9jb250ZXh0X3VwZGF0ZV9yZWdfc3Rh dGUoY2UsIGVuZ2luZSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjQzNCw1MSArNzAwLDYgQEAgaW50 ZWxfbHJfY29udGV4dF9waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAogCXJldHVybiByZXQ7 CiB9CiAKLXN0YXRpYyBpbnQgZXhlY2xpc3RzX2NvbnRleHRfcGluKHN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjZSkKLXsKLQlyZXR1cm4gaW50ZWxfbHJfY29udGV4dF9waW4oY2UsIGNlLT5lbmdpbmUp OwotfQotCi1zdGF0aWMgaW50IGV4ZWNsaXN0c19jb250ZXh0X2FsbG9jKHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSkKLXsKLQlyZXR1cm4gaW50ZWxfbHJfY29udGV4dF9hbGxvYyhjZSwgY2UtPmVu Z2luZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19jb250ZXh0X3Jlc2V0KHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSkKLXsKLQkvKgotCSAqIEJlY2F1c2Ugd2UgZW1pdCBXQV9UQUlMX0RX T1JEUyB0aGVyZSBtYXkgYmUgYSBkaXNwYXJpdHkKLQkgKiBiZXR3ZWVuIG91ciBib29ra2VlcGlu ZyBpbiBjZS0+cmluZy0+aGVhZCBhbmQgY2UtPnJpbmctPnRhaWwgYW5kCi0JICogdGhhdCBzdG9y ZWQgaW4gY29udGV4dC4gQXMgd2Ugb25seSB3cml0ZSBuZXcgY29tbWFuZHMgZnJvbQotCSAqIGNl LT5yaW5nLT50YWlsIG9ud2FyZHMsIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoYXQgaXMganVuay4gSWYg dGhlIEdQVQotCSAqIHN0YXJ0cyByZWFkaW5nIGZyb20gaXRzIFJJTkdfSEVBRCBmcm9tIHRoZSBj b250ZXh0LCBpdCBtYXkgdHJ5IHRvCi0JICogZXhlY3V0ZSB0aGF0IGp1bmsgYW5kIGRpZS4KLQkg KgotCSAqIFRoZSBjb250ZXh0cyB0aGF0IGFyZSBzdGlsbGVkIHBpbm5lZCBvbiByZXN1bWUgYmVs b25nIHRvIHRoZQotCSAqIGtlcm5lbCwgYW5kIGFyZSBsb2NhbCB0byBlYWNoIGVuZ2luZS4gQWxs IG90aGVyIGNvbnRleHRzIHdpbGwKLQkgKiBoYXZlIHRoZWlyIGhlYWQvdGFpbCBzYW5pdGl6ZWQg dXBvbiBwaW5uaW5nIGJlZm9yZSB1c2UsIHNvIHRoZXkKLQkgKiB3aWxsIG5ldmVyIHNlZSBnYXJi YWdlLAotCSAqCi0JICogU28gdG8gYXZvaWQgdGhhdCB3ZSByZXNldCB0aGUgY29udGV4dCBpbWFn ZXMgdXBvbiByZXN1bWUuIEZvcgotCSAqIHNpbXBsaWNpdHksIHdlIGp1c3QgemVybyBldmVyeXRo aW5nIG91dC4KLQkgKi8KLQlpbnRlbF9yaW5nX3Jlc2V0KGNlLT5yaW5nLCAwKTsKLQlscl9jb250 ZXh0X3VwZGF0ZV9yZWdfc3RhdGUoY2UsIGNlLT5lbmdpbmUpOwotfQotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGludGVsX2NvbnRleHRfb3BzIGV4ZWNsaXN0c19jb250ZXh0X29wcyA9IHsKLQkuYWxs b2MgPSBleGVjbGlzdHNfY29udGV4dF9hbGxvYywKLQotCS5waW4gPSBleGVjbGlzdHNfY29udGV4 dF9waW4sCi0JLnVucGluID0gaW50ZWxfbHJfY29udGV4dF91bnBpbiwKLQotCS5lbnRlciA9IGlu dGVsX2NvbnRleHRfZW50ZXJfZW5naW5lLAotCS5leGl0ID0gaW50ZWxfY29udGV4dF9leGl0X2Vu Z2luZSwKLQotCS5yZXNldCA9IGV4ZWNsaXN0c19jb250ZXh0X3Jlc2V0LAotCS5kZXN0cm95ID0g ZXhlY2xpc3RzX2NvbnRleHRfZGVzdHJveSwKLX07Ci0KIHN0YXRpYyBpbnQgZ2VuOF9lbWl0X2lu aXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIHsKIAl1MzIgKmNzOwpAQCAt MjUxMSwzNiArNzMyLDYgQEAgc3RhdGljIGludCBnZW44X2VtaXRfaW5pdF9icmVhZGNydW1iKHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGV4ZWNs aXN0c19yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCi17Ci0JaW50 IHJldDsKLQotCUdFTV9CVUdfT04oIWludGVsX2NvbnRleHRfaXNfcGlubmVkKHJlcXVlc3QtPmh3 X2NvbnRleHQpKTsKLQotCS8qCi0JICogRmx1c2ggZW5vdWdoIHNwYWNlIHRvIHJlZHVjZSB0aGUg bGlrZWxpaG9vZCBvZiB3YWl0aW5nIGFmdGVyCi0JICogd2Ugc3RhcnQgYnVpbGRpbmcgdGhlIHJl cXVlc3QgLSBpbiB3aGljaCBjYXNlIHdlIHdpbGwganVzdAotCSAqIGhhdmUgdG8gcmVwZWF0IHdv cmsuCi0JICovCi0JcmVxdWVzdC0+cmVzZXJ2ZWRfc3BhY2UgKz0gRVhFQ0xJU1RTX1JFUVVFU1Rf U0laRTsKLQotCS8qCi0JICogTm90ZSB0aGF0IGFmdGVyIHRoaXMgcG9pbnQsIHdlIGhhdmUgY29t bWl0dGVkIHRvIHVzaW5nCi0JICogdGhpcyByZXF1ZXN0IGFzIGl0IGlzIGJlaW5nIHVzZWQgdG8g Ym90aCB0cmFjayB0aGUKLQkgKiBzdGF0ZSBvZiBlbmdpbmUgaW5pdGlhbGlzYXRpb24gYW5kIGxp dmVuZXNzIG9mIHRoZQotCSAqIGdvbGRlbiByZW5kZXJzdGF0ZSBhYm92ZS4gVGhpbmsgdHdpY2Ug YmVmb3JlIHlvdSB0cnkKLQkgKiB0byBjYW5jZWwvdW53aW5kIHRoaXMgcmVxdWVzdCBub3cuCi0J ICovCi0KLQkvKiBVbmNvbmRpdGlvbmFsbHkgaW52YWxpZGF0ZSBHUFUgY2FjaGVzIGFuZCBUTEJz LiAqLwotCXJldCA9IHJlcXVlc3QtPmVuZ2luZS0+ZW1pdF9mbHVzaChyZXF1ZXN0LCBFTUlUX0lO VkFMSURBVEUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXF1ZXN0LT5yZXNlcnZl ZF9zcGFjZSAtPSBFWEVDTElTVFNfUkVRVUVTVF9TSVpFOwotCXJldHVybiAwOwotfQotCiAvKgog ICogSW4gdGhpcyBXQSB3ZSBuZWVkIHRvIHNldCBHRU44X0wzU1FDUkVHNFsyMToyMV0gYW5kIHJl c2V0IGl0IGFmdGVyCiAgKiBQSVBFX0NPTlRST0wgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgcmVxdWly ZWQgZm9yIHRoZSBmbHVzaCB0byBoYXBwZW4gY29ycmVjdGx5CkBAIC0yODU3LDcgKzEwNDgsNyBA QCBzdGF0aWMgaW50IGludGVsX2luaXRfd29ya2Fyb3VuZF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBsb2dpY2FsX3Jpbmdf aW5pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCitpbnQgaW50ZWxfbG9naWNhbF9y aW5nX2luaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCWludCByZXQ7CiAK QEAgLTI4NzYsNyArMTA2Nyw3IEBAIHN0YXRpYyBpbnQgbG9naWNhbF9yaW5nX2luaXQoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBs b2dpY2FsX3JpbmdfZGVzdHJveShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit2b2lk IGludGVsX2xvZ2ljYWxfcmluZ19kZXN0cm95KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKIHsKIAlpbnRlbF9lbmdpbmVfY2xlYW51cF9jb21tb24oZW5naW5lKTsKIAlscmNfZGVzdHJv eV93YV9jdHgoZW5naW5lKTsKQEAgLTI5MzcsMzAzICsxMTI4LDE5IEBAIHN0YXRpYyBpbnQgbG9n aWNhbF9yaW5nX3Jlc3VtZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJcmV0dXJu IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19yZXNldF9wcmVwYXJlKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAq IGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKLQl1bnNpZ25lZCBsb25nIGZs YWdzOwotCi0JR0VNX1RSQUNFKCIlczogZGVwdGg8LSVkXG4iLCBlbmdpbmUtPm5hbWUsCi0JCSAg YXRvbWljX3JlYWQoJmV4ZWNsaXN0cy0+dGFza2xldC5jb3VudCkpOwotCi0JLyoKLQkgKiBQcmV2 ZW50IHJlcXVlc3Qgc3VibWlzc2lvbiB0byB0aGUgaGFyZHdhcmUgdW50aWwgd2UgaGF2ZQotCSAq IGNvbXBsZXRlZCB0aGUgcmVzZXQgaW4gaTkxNV9nZW1fcmVzZXRfZmluaXNoKCkuIElmIGEgcmVx dWVzdAotCSAqIGlzIGNvbXBsZXRlZCBieSBvbmUgZW5naW5lLCBpdCBtYXkgdGhlbiBxdWV1ZSBh IHJlcXVlc3QKLQkgKiB0byBhIHNlY29uZCB2aWEgaXRzIGV4ZWNsaXN0cy0+dGFza2xldCAqanVz dCogYXMgd2UgYXJlCi0JICogY2FsbGluZyBlbmdpbmUtPnJlc3VtZSgpIGFuZCBhbHNvIHdyaXRp bmcgdGhlIEVMU1AuCi0JICogVHVybmluZyBvZmYgdGhlIGV4ZWNsaXN0cy0+dGFza2xldCB1bnRp bCB0aGUgcmVzZXQgaXMgb3ZlcgotCSAqIHByZXZlbnRzIHRoZSByYWNlLgotCSAqLwotCV9fdGFz a2xldF9kaXNhYmxlX3N5bmNfb25jZSgmZXhlY2xpc3RzLT50YXNrbGV0KTsKLQlHRU1fQlVHX09O KCFyZXNldF9pbl9wcm9ncmVzcyhleGVjbGlzdHMpKTsKLQotCS8qIEFuZCBmbHVzaCBhbnkgY3Vy cmVudCBkaXJlY3Qgc3VibWlzc2lvbi4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5h Y3RpdmUubG9jaywgZmxhZ3MpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+YWN0 aXZlLmxvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogV2Ugc3RvcCBlbmdpbmVzLCBvdGhlcndpc2Ug d2UgbWlnaHQgZ2V0IGZhaWxlZCByZXNldCBhbmQgYQotCSAqIGRlYWQgZ3B1IChvbiBlbGspLiBB bHNvIGFzIG1vZGVybiBncHUgYXMga2JsIGNhbiBzdWZmZXIKLQkgKiBmcm9tIHN5c3RlbSBoYW5n IGlmIGJhdGNoYnVmZmVyIGlzIHByb2dyZXNzaW5nIHdoZW4KLQkgKiB0aGUgcmVzZXQgaXMgaXNz dWVkLCByZWdhcmRsZXNzIG9mIFJFQURZX1RPX1JFU0VUIGFjay4KLQkgKiBUaHVzIGFzc3VtZSBp dCBpcyBiZXN0IHRvIHN0b3AgZW5naW5lcyBvbiBhbGwgZ2VucwotCSAqIHdoZXJlIHdlIGhhdmUg YSBncHUgcmVzZXQuCi0JICoKLQkgKiBXYUtCTFZFQ1NTZW1hcGhvcmVXYWl0UG9sbDprYmwgKG9u IEFMTF9FTkdJTkVTKQotCSAqCi0JICogRklYTUU6IFdhIGZvciBtb3JlIG1vZGVybiBnZW5zIG5l ZWRzIHRvIGJlIHZhbGlkYXRlZAotCSAqLwotCWludGVsX2VuZ2luZV9zdG9wX2NzKGVuZ2luZSk7 Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X2NzYl9wb2ludGVycyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCi17Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBl eGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Ci0JY29uc3QgdW5zaWduZWQgaW50IHJlc2V0 X3ZhbHVlID0gZXhlY2xpc3RzLT5jc2Jfc2l6ZSAtIDE7Ci0KLQlyaW5nX3NldF9wYXVzZWQoZW5n aW5lLCAwKTsKLQotCS8qCi0JICogQWZ0ZXIgYSByZXNldCwgdGhlIEhXIHN0YXJ0cyB3cml0aW5n IGludG8gQ1NCIGVudHJ5IFswXS4gV2UKLQkgKiB0aGVyZWZvcmUgaGF2ZSB0byBzZXQgb3VyIEhF QUQgcG9pbnRlciBiYWNrIG9uZSBlbnRyeSBzbyB0aGF0Ci0JICogdGhlICpmaXJzdCogZW50cnkg d2UgY2hlY2sgaXMgZW50cnkgMC4gVG8gY29tcGxpY2F0ZSB0aGlzIGZ1cnRoZXIsCi0JICogYXMg d2UgZG9uJ3Qgd2FpdCBmb3IgdGhlIGZpcnN0IGludGVycnVwdCBhZnRlciByZXNldCwgd2UgaGF2 ZSB0bwotCSAqIGZha2UgdGhlIEhXIHdyaXRlIHRvIHBvaW50IGJhY2sgdG8gdGhlIGxhc3QgZW50 cnkgc28gdGhhdCBvdXIKLQkgKiBpbmxpbmUgY29tcGFyaXNvbiBvZiBvdXIgY2FjaGVkIGhlYWQg cG9zaXRpb24gYWdhaW5zdCB0aGUgbGFzdCBIVwotCSAqIHdyaXRlIHdvcmtzIGV2ZW4gYmVmb3Jl IHRoZSBmaXJzdCBpbnRlcnJ1cHQuCi0JICovCi0JZXhlY2xpc3RzLT5jc2JfaGVhZCA9IHJlc2V0 X3ZhbHVlOwotCVdSSVRFX09OQ0UoKmV4ZWNsaXN0cy0+Y3NiX3dyaXRlLCByZXNldF92YWx1ZSk7 Ci0Jd21iKCk7IC8qIE1ha2Ugc3VyZSB0aGlzIGlzIHZpc2libGUgdG8gSFcgKHBhcmFub2lhPykg Ki8KLQotCS8qCi0JICogU29tZXRpbWVzIEljZWxha2UgZm9yZ2V0cyB0byByZXNldCBpdHMgcG9p bnRlcnMgb24gYSBHUFUgcmVzZXQuCi0JICogQmx1ZGdlb24gdGhlbSB3aXRoIGEgbW1pbyB1cGRh dGUgdG8gYmUgc3VyZS4KLQkgKi8KLQlFTkdJTkVfV1JJVEUoZW5naW5lLCBSSU5HX0NPTlRFWFRf U1RBVFVTX1BUUiwKLQkJICAgICByZXNldF92YWx1ZSA8PCA4IHwgcmVzZXRfdmFsdWUpOwotCUVO R0lORV9QT1NUSU5HX1JFQUQoZW5naW5lLCBSSU5HX0NPTlRFWFRfU1RBVFVTX1BUUik7Ci0KLQlp bnZhbGlkYXRlX2NzYl9lbnRyaWVzKCZleGVjbGlzdHMtPmNzYl9zdGF0dXNbMF0sCi0JCQkgICAg ICAgJmV4ZWNsaXN0cy0+Y3NiX3N0YXR1c1tyZXNldF92YWx1ZV0pOwotfQotCi1zdGF0aWMgdm9p ZCBscl9jb250ZXh0X3Jlc2V0X3JlZ19zdGF0ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y2UsCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3Zv aWQgaW50ZWxfbHJfY29udGV4dF9yZXNldF9yZWdfc3RhdGUoY29uc3Qgc3RydWN0IGludGVsX2Nv bnRleHQgKmNlLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKIHsKIAl1MzIgKnJlZ3MgPSBjZS0+bHJjX3JlZ19zdGF0ZTsKIAlpbnQgeDsKIAotCXggPSBs cmNfcmluZ19taV9tb2RlKGVuZ2luZSk7CisJeCA9IGludGVsX2xyY19yaW5nX21pX21vZGUoZW5n aW5lKTsKIAlpZiAoeCAhPSAtMSkgewogCQlyZWdzW3ggKyAxXSAmPSB+U1RPUF9SSU5HOwogCQly ZWdzW3ggKyAxXSB8PSBTVE9QX1JJTkcgPDwgMTY7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBfX2V4 ZWNsaXN0c19yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGJvb2wgc3RhbGxl ZCkKLXsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9 ICZlbmdpbmUtPmV4ZWNsaXN0czsKLQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Ci0Jc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnE7Ci0KLQltYigpOyAvKiBwYXJhbm9pYTogcmVhZCB0aGUgQ1NCIHBv aW50ZXJzIGZyb20gYWZ0ZXIgdGhlIHJlc2V0ICovCi0JY2xmbHVzaChleGVjbGlzdHMtPmNzYl93 cml0ZSk7Ci0JbWIoKTsKLQotCXByb2Nlc3NfY3NiKGVuZ2luZSk7IC8qIGRyYWluIHByZWVtcHRp b24gZXZlbnRzICovCi0KLQkvKiBGb2xsb3dpbmcgdGhlIHJlc2V0LCB3ZSBuZWVkIHRvIHJlbG9h ZCB0aGUgQ1NCIHJlYWQvd3JpdGUgcG9pbnRlcnMgKi8KLQlyZXNldF9jc2JfcG9pbnRlcnMoZW5n aW5lKTsKLQotCS8qCi0JICogU2F2ZSB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb250ZXh0LCBl dmVuIGlmIHdlIGNvbXBsZXRlZAotCSAqIGl0cyByZXF1ZXN0LCBpdCB3YXMgc3RpbGwgcnVubmlu ZyBhdCB0aGUgdGltZSBvZiB0aGUKLQkgKiByZXNldCBhbmQgd2lsbCBoYXZlIGJlZW4gY2xvYmJl cmVkLgotCSAqLwotCXJxID0gZXhlY2xpc3RzX2FjdGl2ZShleGVjbGlzdHMpOwotCWlmICghcnEp Ci0JCWdvdG8gdW53aW5kOwotCi0JLyogV2Ugc3RpbGwgaGF2ZSByZXF1ZXN0cyBpbi1mbGlnaHQ7 IHRoZSBlbmdpbmUgc2hvdWxkIGJlIGFjdGl2ZSAqLwotCUdFTV9CVUdfT04oIWludGVsX2VuZ2lu ZV9wbV9pc19hd2FrZShlbmdpbmUpKTsKLQotCWNlID0gcnEtPmh3X2NvbnRleHQ7Ci0JR0VNX0JV R19PTighaTkxNV92bWFfaXNfcGlubmVkKGNlLT5zdGF0ZSkpOwotCi0JaWYgKGk5MTVfcmVxdWVz dF9jb21wbGV0ZWQocnEpKSB7Ci0JCS8qIElkbGUgY29udGV4dDsgdGlkeSB1cCB0aGUgcmluZyBz byB3ZSBjYW4gcmVzdGFydCBhZnJlc2ggKi8KLQkJY2UtPnJpbmctPmhlYWQgPSBpbnRlbF9yaW5n X3dyYXAoY2UtPnJpbmcsIHJxLT50YWlsKTsKLQkJZ290byBvdXRfcmVwbGF5OwotCX0KLQotCS8q IENvbnRleHQgaGFzIHJlcXVlc3RzIHN0aWxsIGluLWZsaWdodDsgaXQgc2hvdWxkIG5vdCBiZSBp ZGxlISAqLwotCUdFTV9CVUdfT04oaTkxNV9hY3RpdmVfaXNfaWRsZSgmY2UtPmFjdGl2ZSkpOwot CXJxID0gYWN0aXZlX3JlcXVlc3QoY2UtPnRpbWVsaW5lLCBycSk7Ci0JY2UtPnJpbmctPmhlYWQg PSBpbnRlbF9yaW5nX3dyYXAoY2UtPnJpbmcsIHJxLT5oZWFkKTsKLQlHRU1fQlVHX09OKGNlLT5y aW5nLT5oZWFkID09IGNlLT5yaW5nLT50YWlsKTsKLQotCS8qCi0JICogSWYgdGhpcyByZXF1ZXN0 IGhhc24ndCBzdGFydGVkIHlldCwgZS5nLiBpdCBpcyB3YWl0aW5nIG9uIGEKLQkgKiBzZW1hcGhv cmUsIHdlIG5lZWQgdG8gYXZvaWQgc2tpcHBpbmcgdGhlIHJlcXVlc3Qgb3IgZWxzZSB3ZQotCSAq IGJyZWFrIHRoZSBzaWduYWxpbmcgY2hhaW4uIEhvd2V2ZXIsIGlmIHRoZSBjb250ZXh0IGlzIGNv cnJ1cHQKLQkgKiB0aGUgcmVxdWVzdCB3aWxsIG5vdCByZXN0YXJ0IGFuZCB3ZSB3aWxsIGJlIHN0 dWNrIHdpdGggYSB3ZWRnZWQKLQkgKiBkZXZpY2UuIEl0IGlzIHF1aXRlIG9mdGVuIHRoZSBjYXNl IHRoYXQgaWYgd2UgaXNzdWUgYSByZXNldAotCSAqIHdoaWxlIHRoZSBHUFUgaXMgbG9hZGluZyB0 aGUgY29udGV4dCBpbWFnZSwgdGhhdCB0aGUgY29udGV4dAotCSAqIGltYWdlIGJlY29tZXMgY29y cnVwdC4KLQkgKgotCSAqIE90aGVyd2lzZSwgaWYgd2UgaGF2ZSBub3Qgc3RhcnRlZCB5ZXQsIHRo ZSByZXF1ZXN0IHNob3VsZCByZXBsYXkKLQkgKiBwZXJmZWN0bHkgYW5kIHdlIGRvIG5vdCBuZWVk IHRvIGZsYWcgdGhlIHJlc3VsdCBhcyBiZWluZyBlcnJvbmVvdXMuCi0JICovCi0JaWYgKCFpOTE1 X3JlcXVlc3Rfc3RhcnRlZChycSkpCi0JCWdvdG8gb3V0X3JlcGxheTsKLQotCS8qCi0JICogSWYg dGhlIHJlcXVlc3Qgd2FzIGlubm9jZW50LCB3ZSBsZWF2ZSB0aGUgcmVxdWVzdCBpbiB0aGUgRUxT UAotCSAqIGFuZCB3aWxsIHRyeSB0byByZXBsYXkgaXQgb24gcmVzdGFydGluZy4gVGhlIGNvbnRl eHQgaW1hZ2UgbWF5Ci0JICogaGF2ZSBiZWVuIGNvcnJ1cHRlZCBieSB0aGUgcmVzZXQsIGluIHdo aWNoIGNhc2Ugd2UgbWF5IGhhdmUKLQkgKiB0byBzZXJ2aWNlIGEgbmV3IEdQVSBoYW5nLCBidXQg bW9yZSBsaWtlbHkgd2UgY2FuIGNvbnRpbnVlIG9uCi0JICogd2l0aG91dCBpbXBhY3QuCi0JICoK LQkgKiBJZiB0aGUgcmVxdWVzdCB3YXMgZ3VpbHR5LCB3ZSBwcmVzdW1lIHRoZSBjb250ZXh0IGlz IGNvcnJ1cHQKLQkgKiBhbmQgaGF2ZSB0byBhdCBsZWFzdCByZXN0b3JlIHRoZSBSSU5HIHJlZ2lz dGVyIGluIHRoZSBjb250ZXh0Ci0JICogaW1hZ2UgYmFjayB0byB0aGUgZXhwZWN0ZWQgdmFsdWVz IHRvIHNraXAgb3ZlciB0aGUgZ3VpbHR5IHJlcXVlc3QuCi0JICovCi0JX19pOTE1X3JlcXVlc3Rf cmVzZXQocnEsIHN0YWxsZWQpOwotCWlmICghc3RhbGxlZCkKLQkJZ290byBvdXRfcmVwbGF5Owot Ci0JLyoKLQkgKiBXZSB3YW50IGEgc2ltcGxlIGNvbnRleHQgKyByaW5nIHRvIGV4ZWN1dGUgdGhl IGJyZWFkY3J1bWIgdXBkYXRlLgotCSAqIFdlIGNhbm5vdCByZWx5IG9uIHRoZSBjb250ZXh0IGJl aW5nIGludGFjdCBhY3Jvc3MgdGhlIEdQVSBoYW5nLAotCSAqIHNvIGNsZWFyIGl0IGFuZCByZWJ1 aWxkIGp1c3Qgd2hhdCB3ZSBuZWVkIGZvciB0aGUgYnJlYWRjcnVtYi4KLQkgKiBBbGwgcGVuZGlu ZyByZXF1ZXN0cyBmb3IgdGhpcyBjb250ZXh0IHdpbGwgYmUgemFwcGVkLCBhbmQgYW55Ci0JICog ZnV0dXJlIHJlcXVlc3Qgd2lsbCBiZSBhZnRlciB1c2Vyc3BhY2UgaGFzIGhhZCB0aGUgb3Bwb3J0 dW5pdHkKLQkgKiB0byByZWNyZWF0ZSBpdHMgb3duIHN0YXRlLgotCSAqLwotCUdFTV9CVUdfT04o IWludGVsX2NvbnRleHRfaXNfcGlubmVkKGNlKSk7Ci0JbHJfY29udGV4dF9yZXN0b3JlX2RlZmF1 bHRfc3RhdGUoY2UsIGVuZ2luZSk7Ci0KLW91dF9yZXBsYXk6Ci0JR0VNX1RSQUNFKCIlcyByZXBs YXkge2hlYWQ6JTA0eCwgdGFpbDolMDR4fVxuIiwKLQkJICBlbmdpbmUtPm5hbWUsIGNlLT5yaW5n LT5oZWFkLCBjZS0+cmluZy0+dGFpbCk7Ci0JaW50ZWxfcmluZ191cGRhdGVfc3BhY2UoY2UtPnJp bmcpOwotCWxyX2NvbnRleHRfcmVzZXRfcmVnX3N0YXRlKGNlLCBlbmdpbmUpOwotCWxyX2NvbnRl eHRfdXBkYXRlX3JlZ19zdGF0ZShjZSwgZW5naW5lKTsKLQljZS0+bHJjX2Rlc2MgfD0gQ1RYX0RF U0NfRk9SQ0VfUkVTVE9SRTsgLyogcGFyYW5vaWQ6IEdQVSB3YXMgcmVzZXQhICovCi0KLXVud2lu ZDoKLQkvKiBQdXNoIGJhY2sgYW55IGluY29tcGxldGUgcmVxdWVzdHMgZm9yIHJlcGxheSBhZnRl ciB0aGUgcmVzZXQuICovCi0JY2FuY2VsX3BvcnRfcmVxdWVzdHMoZXhlY2xpc3RzKTsKLQlfX3Vu d2luZF9pbmNvbXBsZXRlX3JlcXVlc3RzKGVuZ2luZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4ZWNs aXN0c19yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGJvb2wgc3RhbGxlZCkK LXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JR0VNX1RSQUNFKCIlc1xuIiwgZW5naW5lLT5u YW1lKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7 Ci0KLQlfX2V4ZWNsaXN0c19yZXNldChlbmdpbmUsIHN0YWxsZWQpOwotCi0Jc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9p ZCBub3Bfc3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQkvKiBUaGUg ZHJpdmVyIGlzIHdlZGdlZDsgZG9uJ3QgcHJvY2VzcyBhbnkgbW9yZSBldmVudHMuICovCi19Ci0K LXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQotewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3Qg ZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwotCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx LCAqcm47Ci0Jc3RydWN0IHJiX25vZGUgKnJiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlH RU1fVFJBQ0UoIiVzXG4iLCBlbmdpbmUtPm5hbWUpOwotCi0JLyoKLQkgKiBCZWZvcmUgd2UgY2Fs bCBlbmdpbmUtPmNhbmNlbF9yZXF1ZXN0cygpLCB3ZSBzaG91bGQgaGF2ZSBleGNsdXNpdmUKLQkg KiBhY2Nlc3MgdG8gdGhlIHN1Ym1pc3Npb24gc3RhdGUuIFRoaXMgaXMgYXJyYW5nZWQgZm9yIHVz IGJ5IHRoZQotCSAqIGNhbGxlciBkaXNhYmxpbmcgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uLCB0 aGUgdGFza2xldCBhbmQgb3RoZXIKLQkgKiB0aHJlYWRzIHRoYXQgbWF5IHRoZW4gYWNjZXNzIHRo ZSBzYW1lIHN0YXRlLCBnaXZpbmcgdXMgYSBmcmVlIGhhbmQKLQkgKiB0byByZXNldCBzdGF0ZS4g SG93ZXZlciwgd2Ugc3RpbGwgbmVlZCB0byBsZXQgbG9ja2RlcCBiZSBhd2FyZSB0aGF0Ci0JICog d2Uga25vdyB0aGlzIHN0YXRlIG1heSBiZSBhY2Nlc3NlZCBpbiBoYXJkaXJxIGNvbnRleHQsIHNv IHdlCi0JICogZGlzYWJsZSB0aGUgaXJxIGFyb3VuZCB0aGlzIG1hbmlwdWxhdGlvbiBhbmQgd2Ug d2FudCB0byBrZWVwCi0JICogdGhlIHNwaW5sb2NrIGZvY3VzZWQgb24gaXRzIGR1dGllcyBhbmQg bm90IGFjY2lkZW50YWxseSBjb25mbGF0ZQotCSAqIGNvdmVyYWdlIHRvIHRoZSBzdWJtaXNzaW9u J3MgaXJxIHN0YXRlLiAoU2ltaWxhcmx5LCBhbHRob3VnaCB3ZQotCSAqIHNob3VsZG4ndCBuZWVk IHRvIGRpc2FibGUgaXJxIGFyb3VuZCB0aGUgbWFuaXB1bGF0aW9uIG9mIHRoZQotCSAqIHN1Ym1p c3Npb24ncyBpcnEgc3RhdGUsIHdlIGFsc28gd2lzaCB0byByZW1pbmQgb3Vyc2VsdmVzIHRoYXQK LQkgKiBpdCBpcyBpcnEgc3RhdGUuKQotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUt PmFjdGl2ZS5sb2NrLCBmbGFncyk7Ci0KLQlfX2V4ZWNsaXN0c19yZXNldChlbmdpbmUsIHRydWUp OwotCi0JLyogTWFyayBhbGwgZXhlY3V0aW5nIHJlcXVlc3RzIGFzIHNraXBwZWQuICovCi0JbGlz dF9mb3JfZWFjaF9lbnRyeShycSwgJmVuZ2luZS0+YWN0aXZlLnJlcXVlc3RzLCBzY2hlZC5saW5r KQotCQltYXJrX2VpbyhycSk7Ci0KLQkvKiBGbHVzaCB0aGUgcXVldWVkIHJlcXVlc3RzIHRvIHRo ZSB0aW1lbGluZSBsaXN0IChmb3IgcmV0aXJpbmcpLiAqLwotCXdoaWxlICgocmIgPSByYl9maXJz dF9jYWNoZWQoJmV4ZWNsaXN0cy0+cXVldWUpKSkgewotCQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAq cCA9IHRvX3ByaW9saXN0KHJiKTsKLQkJaW50IGk7Ci0KLQkJcHJpb2xpc3RfZm9yX2VhY2hfcmVx dWVzdF9jb25zdW1lKHJxLCBybiwgcCwgaSkgewotCQkJbWFya19laW8ocnEpOwotCQkJX19pOTE1 X3JlcXVlc3Rfc3VibWl0KHJxKTsKLQkJfQotCi0JCXJiX2VyYXNlX2NhY2hlZCgmcC0+bm9kZSwg JmV4ZWNsaXN0cy0+cXVldWUpOwotCQlpOTE1X3ByaW9saXN0X2ZyZWUocCk7Ci0JfQotCi0JLyog Q2FuY2VsIGFsbCBhdHRhY2hlZCB2aXJ0dWFsIGVuZ2luZXMgKi8KLQl3aGlsZSAoKHJiID0gcmJf Zmlyc3RfY2FjaGVkKCZleGVjbGlzdHMtPnZpcnR1YWwpKSkgewotCQlzdHJ1Y3QgaW50ZWxfdmly dHVhbF9lbmdpbmUgKnZlID0KLQkJCXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9kZXNbZW5n aW5lLT5pZF0ucmIpOwotCi0JCXJiX2VyYXNlX2NhY2hlZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVh bCk7Ci0JCVJCX0NMRUFSX05PREUocmIpOwotCi0JCXNwaW5fbG9jaygmdmUtPmJhc2UuYWN0aXZl LmxvY2spOwotCQlycSA9IGZldGNoX2FuZF96ZXJvKCZ2ZS0+cmVxdWVzdCk7Ci0JCWlmIChycSkg ewotCQkJbWFya19laW8ocnEpOwotCi0JCQlycS0+ZW5naW5lID0gZW5naW5lOwotCQkJX19pOTE1 X3JlcXVlc3Rfc3VibWl0KHJxKTsKLQkJCWk5MTVfcmVxdWVzdF9wdXQocnEpOwotCi0JCQl2ZS0+ YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47Ci0JCX0KLQkJc3Bp bl91bmxvY2soJnZlLT5iYXNlLmFjdGl2ZS5sb2NrKTsKLQl9Ci0KLQkvKiBSZW1haW5pbmcgX3Vu cmVhZHlfIHJlcXVlc3RzIHdpbGwgYmUgbm9wJ2VkIHdoZW4gc3VibWl0dGVkICovCi0KLQlleGVj bGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOwotCWV4ZWNsaXN0cy0+cXVldWUg PSBSQl9ST09UX0NBQ0hFRDsKLQotCUdFTV9CVUdfT04oX190YXNrbGV0X2lzX2VuYWJsZWQoJmV4 ZWNsaXN0cy0+dGFza2xldCkpOwotCWV4ZWNsaXN0cy0+dGFza2xldC5mdW5jID0gbm9wX3N1Ym1p c3Npb25fdGFza2xldDsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+YWN0aXZl LmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgZXhlY2xpc3RzX3Jlc2V0X2ZpbmlzaChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9l eGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Ci0KLQkvKgot CSAqIEFmdGVyIGEgR1BVIHJlc2V0LCB3ZSBtYXkgaGF2ZSByZXF1ZXN0cyB0byByZXBsYXkuIERv IHNvIG5vdyB3aGlsZQotCSAqIHdlIHN0aWxsIGhhdmUgdGhlIGZvcmNld2FrZSB0byBiZSBzdXJl IHRoYXQgdGhlIEdQVSBpcyBub3QgYWxsb3dlZAotCSAqIHRvIHNsZWVwIGJlZm9yZSB3ZSByZXN0 YXJ0IGFuZCByZWxvYWQgYSBjb250ZXh0LgotCSAqLwotCUdFTV9CVUdfT04oIXJlc2V0X2luX3By b2dyZXNzKGV4ZWNsaXN0cykpOwotCWlmICghUkJfRU1QVFlfUk9PVCgmZXhlY2xpc3RzLT5xdWV1 ZS5yYl9yb290KSkKLQkJZXhlY2xpc3RzLT50YXNrbGV0LmZ1bmMoZXhlY2xpc3RzLT50YXNrbGV0 LmRhdGEpOwotCi0JaWYgKF9fdGFza2xldF9lbmFibGUoJmV4ZWNsaXN0cy0+dGFza2xldCkpCi0J CS8qIEFuZCBraWNrIGluIGNhc2Ugd2UgbWlzc2VkIGEgbmV3IHJlcXVlc3Qgc3VibWlzc2lvbi4g Ki8KLQkJdGFza2xldF9oaV9zY2hlZHVsZSgmZXhlY2xpc3RzLT50YXNrbGV0KTsKLQlHRU1fVFJB Q0UoIiVzOiBkZXB0aC0+JWRcbiIsIGVuZ2luZS0+bmFtZSwKLQkJICBhdG9taWNfcmVhZCgmZXhl Y2xpc3RzLT50YXNrbGV0LmNvdW50KSk7Ci19Ci0KIHN0YXRpYyBpbnQgZ2VuOF9lbWl0X2JiX3N0 YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAogCQkJICAgICAgdTY0IG9mZnNldCwgdTMyIGxl biwKIAkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTM3MTYsNzUgKzE2MjMs MjAgQEAgZ2VuMTJfZW1pdF9maW5pX2JyZWFkY3J1bWJfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJlcXVlc3QsIHUzMiAqY3MpCiAJcmV0dXJuIGdlbjEyX2VtaXRfZmluaV9icmVhZGNydW1iX2Zv b3RlcihyZXF1ZXN0LCBjcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19wYXJrKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQljYW5jZWxfdGltZXIoJmVuZ2luZS0+ZXhl Y2xpc3RzLnRpbWVyKTsKLQljYW5jZWxfdGltZXIoJmVuZ2luZS0+ZXhlY2xpc3RzLnByZWVtcHQp OwotfQotCi12b2lkIGludGVsX2V4ZWNsaXN0c19zZXRfZGVmYXVsdF9zdWJtaXNzaW9uKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQllbmdpbmUtPnN1Ym1pdF9yZXF1ZXN0ID0g ZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0OwotCWVuZ2luZS0+Y2FuY2VsX3JlcXVlc3RzID0gZXhl Y2xpc3RzX2NhbmNlbF9yZXF1ZXN0czsKLQllbmdpbmUtPnNjaGVkdWxlID0gaTkxNV9zY2hlZHVs ZTsKLQllbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0LmZ1bmMgPSBleGVjbGlzdHNfc3VibWlzc2lv bl90YXNrbGV0OwotCi0JZW5naW5lLT5yZXNldC5wcmVwYXJlID0gZXhlY2xpc3RzX3Jlc2V0X3By ZXBhcmU7Ci0JZW5naW5lLT5yZXNldC5yZXNldCA9IGV4ZWNsaXN0c19yZXNldDsKLQllbmdpbmUt PnJlc2V0LmZpbmlzaCA9IGV4ZWNsaXN0c19yZXNldF9maW5pc2g7Ci0KLQllbmdpbmUtPnBhcmsg PSBleGVjbGlzdHNfcGFyazsKLQllbmdpbmUtPnVucGFyayA9IE5VTEw7Ci0KLQllbmdpbmUtPmZs YWdzIHw9IEk5MTVfRU5HSU5FX1NVUFBPUlRTX1NUQVRTOwotCWlmICghaW50ZWxfdmdwdV9hY3Rp dmUoZW5naW5lLT5pOTE1KSkgewotCQllbmdpbmUtPmZsYWdzIHw9IEk5MTVfRU5HSU5FX0hBU19T RU1BUEhPUkVTOwotCQlpZiAoSEFTX0xPR0lDQUxfUklOR19QUkVFTVBUSU9OKGVuZ2luZS0+aTkx NSkpCi0JCQllbmdpbmUtPmZsYWdzIHw9IEk5MTVfRU5HSU5FX0hBU19QUkVFTVBUSU9OOwotCX0K LQotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKLQkJZW5naW5lLT5mbGFncyB8 PSBJOTE1X0VOR0lORV9IQVNfUkVMQVRJVkVfTU1JTzsKLX0KLQotc3RhdGljIHZvaWQgZXhlY2xp c3RzX3NodXRkb3duKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQkvKiBTeW5j aHJvbmlzZSB3aXRoIHJlc2lkdWFsIHRpbWVycyBhbmQgYW55IHNvZnRpcnEgdGhleSByYWlzZSAq LwotCWRlbF90aW1lcl9zeW5jKCZlbmdpbmUtPmV4ZWNsaXN0cy50aW1lcik7Ci0JZGVsX3RpbWVy X3N5bmMoJmVuZ2luZS0+ZXhlY2xpc3RzLnByZWVtcHQpOwotCXRhc2tsZXRfa2lsbCgmZW5naW5l LT5leGVjbGlzdHMudGFza2xldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXN0cm95 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlleGVjbGlzdHNfc2h1dGRvd24o ZW5naW5lKTsKLQotCWxvZ2ljYWxfcmluZ19kZXN0cm95KGVuZ2luZSk7Ci19Ci0KIHN0YXRpYyB2 b2lkCiBsb2dpY2FsX3JpbmdfZGVmYXVsdF92ZnVuY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQogewogCS8qIERlZmF1bHQgdmZ1bmNzIHdoaWNoIGNhbiBiZSBvdmVycmlkZW4gYnkg ZWFjaCBlbmdpbmUuICovCiAKLQllbmdpbmUtPmRlc3Ryb3kgPSBleGVjbGlzdHNfZGVzdHJveTsK KwllbmdpbmUtPmRlc3Ryb3kgPSBpbnRlbF9sb2dpY2FsX3JpbmdfZGVzdHJveTsKIAllbmdpbmUt PnJlc3VtZSA9IGxvZ2ljYWxfcmluZ19yZXN1bWU7CiAKLQllbmdpbmUtPnJlc2V0LnByZXBhcmUg PSBleGVjbGlzdHNfcmVzZXRfcHJlcGFyZTsKLQllbmdpbmUtPnJlc2V0LnJlc2V0ID0gZXhlY2xp c3RzX3Jlc2V0OwotCWVuZ2luZS0+cmVzZXQuZmluaXNoID0gZXhlY2xpc3RzX3Jlc2V0X2Zpbmlz aDsKLQotCWVuZ2luZS0+Y29wcyA9ICZleGVjbGlzdHNfY29udGV4dF9vcHM7Ci0JZW5naW5lLT5y ZXF1ZXN0X2FsbG9jID0gZXhlY2xpc3RzX3JlcXVlc3RfYWxsb2M7Ci0KIAllbmdpbmUtPmVtaXRf Zmx1c2ggPSBnZW44X2VtaXRfZmx1c2g7CiAJZW5naW5lLT5lbWl0X2luaXRfYnJlYWRjcnVtYiA9 IGdlbjhfZW1pdF9pbml0X2JyZWFkY3J1bWI7CiAJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVt YiA9IGdlbjhfZW1pdF9maW5pX2JyZWFkY3J1bWI7CiAJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5 MTUpID49IDEyKQogCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuMTJfZW1pdF9m aW5pX2JyZWFkY3J1bWI7CiAKLQllbmdpbmUtPnNldF9kZWZhdWx0X3N1Ym1pc3Npb24gPSBpbnRl bF9leGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlzc2lvbjsKLQogCWlmIChJTlRFTF9HRU4oZW5n aW5lLT5pOTE1KSA8IDExKSB7CiAJCWVuZ2luZS0+aXJxX2VuYWJsZSA9IGdlbjhfbG9naWNhbF9y aW5nX2VuYWJsZV9pcnE7CiAJCWVuZ2luZS0+aXJxX2Rpc2FibGUgPSBnZW44X2xvZ2ljYWxfcmlu Z19kaXNhYmxlX2lycTsKQEAgLTM4NDEsNyArMTY5Myw3IEBAIHN0YXRpYyB2b2lkIHJjc19zdWJt aXNzaW9uX292ZXJyaWRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAl9CiB9CiAK LXN0YXRpYyB2b2lkIGxvZ2ljYWxfcmluZ19zZXR1cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCit2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19zZXR1cChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCiB7CiAJbG9naWNhbF9yaW5nX2RlZmF1bHRfdmZ1bmNzKGVuZ2luZSk7CiAJ bG9naWNhbF9yaW5nX2RlZmF1bHRfaXJxcyhlbmdpbmUpOwpAQCAtMzg1MCw1NiArMTcwMiw2IEBA IHN0YXRpYyB2b2lkIGxvZ2ljYWxfcmluZ19zZXR1cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCiAJCXJjc19zdWJtaXNzaW9uX292ZXJyaWRlKGVuZ2luZSk7CiB9CiAKLWludCBpbnRl bF9leGVjbGlzdHNfc3VibWlzc2lvbl9zZXR1cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCi17Ci0JdGFza2xldF9pbml0KCZlbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0LAotCQkgICAg IGV4ZWNsaXN0c19zdWJtaXNzaW9uX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWVuZ2luZSk7Ci0J dGltZXJfc2V0dXAoJmVuZ2luZS0+ZXhlY2xpc3RzLnRpbWVyLCBleGVjbGlzdHNfdGltZXNsaWNl LCAwKTsKLQl0aW1lcl9zZXR1cCgmZW5naW5lLT5leGVjbGlzdHMucHJlZW1wdCwgZXhlY2xpc3Rz X3ByZWVtcHQsIDApOwotCi0JbG9naWNhbF9yaW5nX3NldHVwKGVuZ2luZSk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotaW50IGludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uX2luaXQoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQotewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICog Y29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gZW5naW5lLT5pOTE1OwotCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29y ZSA9IGVuZ2luZS0+dW5jb3JlOwotCXUzMiBiYXNlID0gZW5naW5lLT5tbWlvX2Jhc2U7Ci0JaW50 IHJldDsKLQotCXJldCA9IGxvZ2ljYWxfcmluZ19pbml0KGVuZ2luZSk7Ci0JaWYgKHJldCkKLQkJ cmV0dXJuIHJldDsKLQotCWlmIChIQVNfTE9HSUNBTF9SSU5HX0VMU1EoaTkxNSkpIHsKLQkJZXhl Y2xpc3RzLT5zdWJtaXRfcmVnID0gdW5jb3JlLT5yZWdzICsKLQkJCWk5MTVfbW1pb19yZWdfb2Zm c2V0KFJJTkdfRVhFQ0xJU1RfU1FfQ09OVEVOVFMoYmFzZSkpOwotCQlleGVjbGlzdHMtPmN0cmxf cmVnID0gdW5jb3JlLT5yZWdzICsKLQkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfRVhFQ0xJ U1RfQ09OVFJPTChiYXNlKSk7Ci0JfSBlbHNlIHsKLQkJZXhlY2xpc3RzLT5zdWJtaXRfcmVnID0g dW5jb3JlLT5yZWdzICsKLQkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfRUxTUChiYXNlKSk7 Ci0JfQotCi0JZXhlY2xpc3RzLT5jc2Jfc3RhdHVzID0KLQkJJmVuZ2luZS0+c3RhdHVzX3BhZ2Uu YWRkcltJOTE1X0hXU19DU0JfQlVGMF9JTkRFWF07Ci0KLQlleGVjbGlzdHMtPmNzYl93cml0ZSA9 Ci0JCSZlbmdpbmUtPnN0YXR1c19wYWdlLmFkZHJbaW50ZWxfaHdzX2NzYl93cml0ZV9pbmRleChp OTE1KV07Ci0KLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgMTEpCi0JCWV4ZWNsaXN0cy0+Y3NiX3Np emUgPSBHRU44X0NTQl9FTlRSSUVTOwotCWVsc2UKLQkJZXhlY2xpc3RzLT5jc2Jfc2l6ZSA9IEdF TjExX0NTQl9FTlRSSUVTOwotCi0JcmVzZXRfY3NiX3BvaW50ZXJzKGVuZ2luZSk7Ci0KLQlyZXR1 cm4gMDsKLX0KLQogc3RhdGljIHUzMiBpbnRlbF9scl9pbmRpcmVjdF9jdHhfb2Zmc2V0KGNvbnN0 IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAl1MzIgaW5kaXJlY3RfY3R4X29m ZnNldDsKQEAgLTM5MzMsNyArMTczNSw2IEBAIHN0YXRpYyB1MzIgaW50ZWxfbHJfaW5kaXJlY3Rf Y3R4X29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJcmV0dXJu IGluZGlyZWN0X2N0eF9vZmZzZXQ7CiB9CiAKLQogc3RhdGljIHZvaWQgaW5pdF9jb21tb25fcmVn X3N0YXRlKHUzMiAqIGNvbnN0IHJlZ3MsCiAJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsCiAJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZykKQEAgLTQx NTAsMjY4ICsxOTUxLDYgQEAgdm9pZCBpbnRlbF9scl9jb250ZXh0X2Zpbmkoc3RydWN0IGludGVs X2NvbnRleHQgKmNlKQogCWk5MTVfdm1hX3B1dChjZS0+c3RhdGUpOwogfQogCi1zdGF0aWMgaW50 ZWxfZW5naW5lX21hc2tfdAotdmlydHVhbF9zdWJtaXNzaW9uX21hc2soc3RydWN0IGludGVsX3Zp cnR1YWxfZW5naW5lICp2ZSkKLXsKLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKLQlpbnRlbF9l bmdpbmVfbWFza190IG1hc2s7Ci0KLQlycSA9IFJFQURfT05DRSh2ZS0+cmVxdWVzdCk7Ci0JaWYg KCFycSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBUaGUgcnEgaXMgcmVhZHkgZm9yIHN1Ym1pc3Npb247 IHJxLT5leGVjdXRpb25fbWFzayBpcyBub3cgc3RhYmxlLiAqLwotCW1hc2sgPSBycS0+ZXhlY3V0 aW9uX21hc2s7Ci0JaWYgKHVubGlrZWx5KCFtYXNrKSkgewotCQkvKiBJbnZhbGlkIHNlbGVjdGlv biwgc3VibWl0IHRvIGEgcmFuZG9tIGVuZ2luZSBpbiBlcnJvciAqLwotCQlpOTE1X3JlcXVlc3Rf c2tpcChycSwgLUVOT0RFVik7Ci0JCW1hc2sgPSB2ZS0+c2libGluZ3NbMF0tPm1hc2s7Ci0JfQot Ci0JR0VNX1RSQUNFKCIlczogcnE9JWxseDolbGxkLCBtYXNrPSV4LCBwcmlvPSVkXG4iLAotCQkg IHZlLT5iYXNlLm5hbWUsCi0JCSAgcnEtPmZlbmNlLmNvbnRleHQsIHJxLT5mZW5jZS5zZXFubywK LQkJICBtYXNrLCB2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCk7Ci0KLQly ZXR1cm4gbWFzazsKLX0KLQotc3RhdGljIHZvaWQgdmlydHVhbF9zdWJtaXNzaW9uX3Rhc2tsZXQo dW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqIGNv bnN0IHZlID0KLQkJKHN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqKWRhdGE7Ci0JY29uc3Qg aW50IHByaW8gPSB2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludDsKLQlpbnRl bF9lbmdpbmVfbWFza190IG1hc2s7Ci0JdW5zaWduZWQgaW50IG47Ci0KLQlyY3VfcmVhZF9sb2Nr KCk7Ci0JbWFzayA9IHZpcnR1YWxfc3VibWlzc2lvbl9tYXNrKHZlKTsKLQlyY3VfcmVhZF91bmxv Y2soKTsKLQlpZiAodW5saWtlbHkoIW1hc2spKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfZGlz YWJsZSgpOwotCWZvciAobiA9IDA7IFJFQURfT05DRSh2ZS0+cmVxdWVzdCkgJiYgbiA8IHZlLT5u dW1fc2libGluZ3M7IG4rKykgewotCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5nID0g dmUtPnNpYmxpbmdzW25dOwotCQlzdHJ1Y3QgdmVfbm9kZSAqIGNvbnN0IG5vZGUgPSAmdmUtPm5v ZGVzW3NpYmxpbmctPmlkXTsKLQkJc3RydWN0IHJiX25vZGUgKipwYXJlbnQsICpyYjsKLQkJYm9v bCBmaXJzdDsKLQotCQlpZiAodW5saWtlbHkoIShtYXNrICYgc2libGluZy0+bWFzaykpKSB7Ci0J CQlpZiAoIVJCX0VNUFRZX05PREUoJm5vZGUtPnJiKSkgewotCQkJCXNwaW5fbG9jaygmc2libGlu Zy0+YWN0aXZlLmxvY2spOwotCQkJCXJiX2VyYXNlX2NhY2hlZCgmbm9kZS0+cmIsCi0JCQkJCQkm c2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwpOwotCQkJCVJCX0NMRUFSX05PREUoJm5vZGUtPnJi KTsKLQkJCQlzcGluX3VubG9jaygmc2libGluZy0+YWN0aXZlLmxvY2spOwotCQkJfQotCQkJY29u dGludWU7Ci0JCX0KLQotCQlzcGluX2xvY2soJnNpYmxpbmctPmFjdGl2ZS5sb2NrKTsKLQotCQlp ZiAoIVJCX0VNUFRZX05PREUoJm5vZGUtPnJiKSkgewotCQkJLyoKLQkJCSAqIENoZWF0IGFuZCBh dm9pZCByZWJhbGFuY2luZyB0aGUgdHJlZSBpZiB3ZSBjYW4KLQkJCSAqIHJldXNlIHRoaXMgbm9k ZSBpbiBzaXR1LgotCQkJICovCi0JCQlmaXJzdCA9IHJiX2ZpcnN0X2NhY2hlZCgmc2libGluZy0+ ZXhlY2xpc3RzLnZpcnR1YWwpID09Ci0JCQkJJm5vZGUtPnJiOwotCQkJaWYgKHByaW8gPT0gbm9k ZS0+cHJpbyB8fCAocHJpbyA+IG5vZGUtPnByaW8gJiYgZmlyc3QpKQotCQkJCWdvdG8gc3VibWl0 X2VuZ2luZTsKLQotCQkJcmJfZXJhc2VfY2FjaGVkKCZub2RlLT5yYiwgJnNpYmxpbmctPmV4ZWNs aXN0cy52aXJ0dWFsKTsKLQkJfQotCi0JCXJiID0gTlVMTDsKLQkJZmlyc3QgPSB0cnVlOwotCQlw YXJlbnQgPSAmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwucmJfcm9vdC5yYl9ub2RlOwotCQl3 aGlsZSAoKnBhcmVudCkgewotCQkJc3RydWN0IHZlX25vZGUgKm90aGVyOwotCi0JCQlyYiA9ICpw YXJlbnQ7Ci0JCQlvdGhlciA9IHJiX2VudHJ5KHJiLCB0eXBlb2YoKm90aGVyKSwgcmIpOwotCQkJ aWYgKHByaW8gPiBvdGhlci0+cHJpbykgewotCQkJCXBhcmVudCA9ICZyYi0+cmJfbGVmdDsKLQkJ CX0gZWxzZSB7Ci0JCQkJcGFyZW50ID0gJnJiLT5yYl9yaWdodDsKLQkJCQlmaXJzdCA9IGZhbHNl OwotCQkJfQotCQl9Ci0KLQkJcmJfbGlua19ub2RlKCZub2RlLT5yYiwgcmIsIHBhcmVudCk7Ci0J CXJiX2luc2VydF9jb2xvcl9jYWNoZWQoJm5vZGUtPnJiLAotCQkJCSAgICAgICAmc2libGluZy0+ ZXhlY2xpc3RzLnZpcnR1YWwsCi0JCQkJICAgICAgIGZpcnN0KTsKLQotc3VibWl0X2VuZ2luZToK LQkJR0VNX0JVR19PTihSQl9FTVBUWV9OT0RFKCZub2RlLT5yYikpOwotCQlub2RlLT5wcmlvID0g cHJpbzsKLQkJaWYgKGZpcnN0ICYmIHByaW8gPiBzaWJsaW5nLT5leGVjbGlzdHMucXVldWVfcHJp b3JpdHlfaGludCkgewotCQkJc2libGluZy0+ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQg PSBwcmlvOwotCQkJdGFza2xldF9oaV9zY2hlZHVsZSgmc2libGluZy0+ZXhlY2xpc3RzLnRhc2ts ZXQpOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2soJnNpYmxpbmctPmFjdGl2ZS5sb2NrKTsKLQl9Ci0J bG9jYWxfaXJxX2VuYWJsZSgpOwotfQotCi1zdGF0aWMgdm9pZCB2aXJ0dWFsX3N1Ym1pdF9yZXF1 ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQotewotCXN0cnVjdCBpbnRlbF92aXJ0dWFsX2Vu Z2luZSAqdmUgPSB0b192aXJ0dWFsX2VuZ2luZShycS0+ZW5naW5lKTsKLQlzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpvbGQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCUdFTV9UUkFDRSgiJXM6IHJx PSVsbHg6JWxsZFxuIiwKLQkJICB2ZS0+YmFzZS5uYW1lLAotCQkgIHJxLT5mZW5jZS5jb250ZXh0 LAotCQkgIHJxLT5mZW5jZS5zZXFubyk7Ci0KLQlHRU1fQlVHX09OKHZlLT5iYXNlLnN1Ym1pdF9y ZXF1ZXN0ICE9IHZpcnR1YWxfc3VibWl0X3JlcXVlc3QpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUo JnZlLT5iYXNlLmFjdGl2ZS5sb2NrLCBmbGFncyk7Ci0KLQlvbGQgPSB2ZS0+cmVxdWVzdDsKLQlp ZiAob2xkKSB7IC8qIGJhY2tncm91bmQgY29tcGxldGlvbiBldmVudCBmcm9tIHByZWVtcHQtdG8t YnVzeSAqLwotCQlHRU1fQlVHX09OKCFpOTE1X3JlcXVlc3RfY29tcGxldGVkKG9sZCkpOwotCQlf X2k5MTVfcmVxdWVzdF9zdWJtaXQob2xkKTsKLQkJaTkxNV9yZXF1ZXN0X3B1dChvbGQpOwotCX0K LQotCWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkgewotCQlfX2k5MTVfcmVxdWVzdF9z dWJtaXQocnEpOwotCi0JCXZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50ID0g SU5UX01JTjsKLQkJdmUtPnJlcXVlc3QgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXZlLT5iYXNlLmV4 ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50ID0gcnFfcHJpbyhycSk7Ci0JCXZlLT5yZXF1ZXN0 ID0gaTkxNV9yZXF1ZXN0X2dldChycSk7Ci0KLQkJR0VNX0JVR19PTighbGlzdF9lbXB0eShpbnRl bF92aXJ0dWFsX2VuZ2luZV9xdWV1ZSh2ZSkpKTsKLQkJbGlzdF9tb3ZlX3RhaWwoJnJxLT5zY2hl ZC5saW5rLCBpbnRlbF92aXJ0dWFsX2VuZ2luZV9xdWV1ZSh2ZSkpOwotCi0JCXRhc2tsZXRfc2No ZWR1bGUoJnZlLT5iYXNlLmV4ZWNsaXN0cy50YXNrbGV0KTsKLQl9Ci0KLQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ2ZS0+YmFzZS5hY3RpdmUubG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9p ZAotdmlydHVhbF9ib25kX2V4ZWN1dGUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHN0cnVjdCBk bWFfZmVuY2UgKnNpZ25hbCkKLXsKLQlzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmUgKnZlID0g dG9fdmlydHVhbF9lbmdpbmUocnEtPmVuZ2luZSk7Ci0JaW50ZWxfZW5naW5lX21hc2tfdCBhbGxv d2VkLCBleGVjOwotCXN0cnVjdCB2ZV9ib25kICpib25kOwotCi0JYWxsb3dlZCA9IH50b19yZXF1 ZXN0KHNpZ25hbCktPmVuZ2luZS0+bWFzazsKLQotCWJvbmQgPSBpbnRlbF92aXJ0dWFsX2VuZ2lu ZV9maW5kX2JvbmQodmUsIHRvX3JlcXVlc3Qoc2lnbmFsKS0+ZW5naW5lKTsKLQlpZiAoYm9uZCkK LQkJYWxsb3dlZCAmPSBib25kLT5zaWJsaW5nX21hc2s7Ci0KLQkvKiBSZXN0cmljdCB0aGUgYm9u ZGVkIHJlcXVlc3QgdG8gcnVuIG9uIG9ubHkgdGhlIGF2YWlsYWJsZSBlbmdpbmVzICovCi0JZXhl YyA9IFJFQURfT05DRShycS0+ZXhlY3V0aW9uX21hc2spOwotCXdoaWxlICghdHJ5X2NtcHhjaGco JnJxLT5leGVjdXRpb25fbWFzaywgJmV4ZWMsIGV4ZWMgJiBhbGxvd2VkKSkKLQkJOwotCi0JLyog UHJldmVudCB0aGUgbWFzdGVyIGZyb20gYmVpbmcgcmUtcnVuIG9uIHRoZSBib25kZWQgZW5naW5l cyAqLwotCXRvX3JlcXVlc3Qoc2lnbmFsKS0+ZXhlY3V0aW9uX21hc2sgJj0gfmFsbG93ZWQ7Ci19 Ci0KLXZvaWQgaW50ZWxfZXhlY2xpc3RzX3ZpcnR1YWxfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBp bnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUpCi17Ci0JdmUtPmJhc2UucmVxdWVzdF9hbGxvYyA9IGV4 ZWNsaXN0c19yZXF1ZXN0X2FsbG9jOwotCXZlLT5iYXNlLnN1Ym1pdF9yZXF1ZXN0ID0gdmlydHVh bF9zdWJtaXRfcmVxdWVzdDsKLQl2ZS0+YmFzZS5ib25kX2V4ZWN1dGUgPSB2aXJ0dWFsX2JvbmRf ZXhlY3V0ZTsKLQl0YXNrbGV0X2luaXQoJnZlLT5iYXNlLmV4ZWNsaXN0cy50YXNrbGV0LAotCQkg ICAgIHZpcnR1YWxfc3VibWlzc2lvbl90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKXZl KTsKLX0KLQotdm9pZCBpbnRlbF9leGVjbGlzdHNfc2hvd19yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCi0JCQkJICAgc3RydWN0IGRybV9wcmludGVyICptLAotCQkJCSAg IHZvaWQgKCpzaG93X3JlcXVlc3QpKHN0cnVjdCBkcm1fcHJpbnRlciAqbSwKLQkJCQkJCQlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSwKLQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgpLAotCQkJCSAg IHVuc2lnbmVkIGludCBtYXgpCi17Ci0JY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlz dHMgKmV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSwgKmxhc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgY291bnQ7 Ci0Jc3RydWN0IHJiX25vZGUgKnJiOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+YWN0 aXZlLmxvY2ssIGZsYWdzKTsKLQotCWxhc3QgPSBOVUxMOwotCWNvdW50ID0gMDsKLQlsaXN0X2Zv cl9lYWNoX2VudHJ5KHJxLCAmZW5naW5lLT5hY3RpdmUucmVxdWVzdHMsIHNjaGVkLmxpbmspIHsK LQkJaWYgKGNvdW50KysgPCBtYXggLSAxKQotCQkJc2hvd19yZXF1ZXN0KG0sIHJxLCAiXHRcdEUg Iik7Ci0JCWVsc2UKLQkJCWxhc3QgPSBycTsKLQl9Ci0JaWYgKGxhc3QpIHsKLQkJaWYgKGNvdW50 ID4gbWF4KSB7Ci0JCQlkcm1fcHJpbnRmKG0sCi0JCQkJICAgIlx0XHQuLi5za2lwcGluZyAlZCBl eGVjdXRpbmcgcmVxdWVzdHMuLi5cbiIsCi0JCQkJICAgY291bnQgLSBtYXgpOwotCQl9Ci0JCXNo b3dfcmVxdWVzdChtLCBsYXN0LCAiXHRcdEUgIik7Ci0JfQotCi0JbGFzdCA9IE5VTEw7Ci0JY291 bnQgPSAwOwotCWlmIChleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgIT0gSU5UX01JTikK LQkJZHJtX3ByaW50ZihtLCAiXHRcdFF1ZXVlIHByaW9yaXR5IGhpbnQ6ICVkXG4iLAotCQkJICAg ZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50KTsKLQlmb3IgKHJiID0gcmJfZmlyc3RfY2Fj aGVkKCZleGVjbGlzdHMtPnF1ZXVlKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKLQkJc3RydWN0 IGk5MTVfcHJpb2xpc3QgKnAgPSByYl9lbnRyeShyYiwgdHlwZW9mKCpwKSwgbm9kZSk7Ci0JCWlu dCBpOwotCi0JCXByaW9saXN0X2Zvcl9lYWNoX3JlcXVlc3QocnEsIHAsIGkpIHsKLQkJCWlmIChj b3VudCsrIDwgbWF4IC0gMSkKLQkJCQlzaG93X3JlcXVlc3QobSwgcnEsICJcdFx0USAiKTsKLQkJ CWVsc2UKLQkJCQlsYXN0ID0gcnE7Ci0JCX0KLQl9Ci0JaWYgKGxhc3QpIHsKLQkJaWYgKGNvdW50 ID4gbWF4KSB7Ci0JCQlkcm1fcHJpbnRmKG0sCi0JCQkJICAgIlx0XHQuLi5za2lwcGluZyAlZCBx dWV1ZWQgcmVxdWVzdHMuLi5cbiIsCi0JCQkJICAgY291bnQgLSBtYXgpOwotCQl9Ci0JCXNob3df cmVxdWVzdChtLCBsYXN0LCAiXHRcdFEgIik7Ci0JfQotCi0JbGFzdCA9IE5VTEw7Ci0JY291bnQg PSAwOwotCWZvciAocmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCk7IHJi OyByYiA9IHJiX25leHQocmIpKSB7Ci0JCXN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUg PQotCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tlbmdpbmUtPmlkXS5yYik7Ci0J CXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0gUkVBRF9PTkNFKHZlLT5yZXF1ZXN0KTsKLQotCQlp ZiAocnEpIHsKLQkJCWlmIChjb3VudCsrIDwgbWF4IC0gMSkKLQkJCQlzaG93X3JlcXVlc3QobSwg cnEsICJcdFx0ViAiKTsKLQkJCWVsc2UKLQkJCQlsYXN0ID0gcnE7Ci0JCX0KLQl9Ci0JaWYgKGxh c3QpIHsKLQkJaWYgKGNvdW50ID4gbWF4KSB7Ci0JCQlkcm1fcHJpbnRmKG0sCi0JCQkJICAgIlx0 XHQuLi5za2lwcGluZyAlZCB2aXJ0dWFsIHJlcXVlc3RzLi4uXG4iLAotCQkJCSAgIGNvdW50IC0g bWF4KTsKLQkJfQotCQlzaG93X3JlcXVlc3QobSwgbGFzdCwgIlx0XHRWICIpOwotCX0KLQotCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+YWN0aXZlLmxvY2ssIGZsYWdzKTsKLX0KLQog dm9pZCBpbnRlbF9scl9jb250ZXh0X3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKIAkJCSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCiAJCQkgICAgdTMyIGhlYWQsCkBA IC00NDI4LDIzICsxOTY3LDE1IEBAIHZvaWQgaW50ZWxfbHJfY29udGV4dF9yZXNldChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJICogdG8gcmVjcmVhdGUgaXRzIG93biBzdGF0ZS4K IAkgKi8KIAlpZiAoc2NydWIpCi0JCWxyX2NvbnRleHRfcmVzdG9yZV9kZWZhdWx0X3N0YXRlKGNl LCBlbmdpbmUpOworCQlpbnRlbF9scl9jb250ZXh0X3Jlc3RvcmVfZGVmYXVsdF9zdGF0ZShjZSwg ZW5naW5lKTsKIAogCS8qIFJlcnVuIHRoZSByZXF1ZXN0OyBpdHMgcGF5bG9hZCBoYXMgYmVlbiBu ZXV0ZXJlZCAoaWYgZ3VpbHR5KS4gKi8KIAljZS0+cmluZy0+aGVhZCA9IGhlYWQ7CiAJaW50ZWxf cmluZ191cGRhdGVfc3BhY2UoY2UtPnJpbmcpOwogCi0JbHJfY29udGV4dF91cGRhdGVfcmVnX3N0 YXRlKGNlLCBlbmdpbmUpOwotfQotCi1ib29sCi1pbnRlbF9lbmdpbmVfaW5fZXhlY2xpc3RzX3N1 Ym1pc3Npb25fbW9kZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0J cmV0dXJuIGVuZ2luZS0+c2V0X2RlZmF1bHRfc3VibWlzc2lvbiA9PQotCSAgICAgICBpbnRlbF9l eGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlzc2lvbjsKKwlpbnRlbF9scl9jb250ZXh0X3VwZGF0 ZV9yZWdfc3RhdGUoY2UsIGVuZ2luZSk7CiB9CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1f STkxNV9TRUxGVEVTVCkKICNpbmNsdWRlICJzZWxmdGVzdF9scmMuYyIKLSNpbmNsdWRlICJzZWxm dGVzdF9leGVjbGlzdHMuYyIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfbHJjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuaApp bmRleCA5M2YzMGIyZGViN2YuLjZiM2I4ZTRjMjMwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfbHJjLmgKQEAgLTc0LDE3ICs3NCwxMSBAQCBzdHJ1Y3QgaW50ZWxfdmlydHVhbF9lbmdpbmU7 CiAvKiBpbiBHZW4xMiBJRCAweDdGRiBpcyByZXNlcnZlZCB0byBpbmRpY2F0ZSBpZGxlICovCiAj ZGVmaW5lIEdFTjEyX01BWF9DT05URVhUX0hXX0lECShHRU4xMV9NQVhfQ09OVEVYVF9IV19JRCAt IDEpCiAKLWVudW0gewotCUlOVEVMX0NPTlRFWFRfU0NIRURVTEVfSU4gPSAwLAotCUlOVEVMX0NP TlRFWFRfU0NIRURVTEVfT1VULAotCUlOVEVMX0NPTlRFWFRfU0NIRURVTEVfUFJFRU1QVEVELAot fTsKLQogLyogTG9naWNhbCBSaW5ncyAqLworaW50IGludGVsX2xvZ2ljYWxfcmluZ19pbml0KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cit2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19z ZXR1cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogdm9pZCBpbnRlbF9sb2dpY2Fs X3JpbmdfY2xlYW51cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwotCi1pbnQgaW50 ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb25fc2V0dXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKTsKLWludCBpbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSk7Cit2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19kZXN0cm95KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiAKIC8qIExvZ2ljYWwgUmluZyBDb250ZXh0cyAq LwogLyogQXQgdGhlIHN0YXJ0IG9mIHRoZSBjb250ZXh0IGltYWdlIGlzIGl0cyBwZXItcHJvY2Vz cyBIV1MgcGFnZSAqLwpAQCAtOTcsNyArOTEsNyBAQCBpbnQgaW50ZWxfZXhlY2xpc3RzX3N1Ym1p c3Npb25faW5pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogI2RlZmluZSBMUkNf UFBIV1NQX1NDUkFUQ0gJCTB4MzQKICNkZWZpbmUgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIJCShM UkNfUFBIV1NQX1NDUkFUQ0ggKiBzaXplb2YodTMyKSkKIAotdm9pZCBpbnRlbF9leGVjbGlzdHNf c2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwor aW50IGludGVsX2xyY19yaW5nX21pX21vZGUoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKTsKIAogaW50IGludGVsX2xyX2NvbnRleHRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRl eHQgKmNlLAogCQkJICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKQEAgLTEwNiw2 ICsxMDAsMTQgQEAgdm9pZCBpbnRlbF9scl9jb250ZXh0X2Zpbmkoc3RydWN0IGludGVsX2NvbnRl eHQgKmNlKTsKIHUzMiAqaW50ZWxfbHJfY29udGV4dF9zZXRfcmVnaXN0ZXJfb2Zmc2V0cyh1MzIg KnJlZ3MsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiAK K3ZvaWQgaW50ZWxfbHJfY29udGV4dF9yZXN0b3JlX2RlZmF1bHRfc3RhdGUoc3RydWN0IGludGVs X2NvbnRleHQgKmNlLAorCQkJCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsK Kwordm9pZCBpbnRlbF9scl9jb250ZXh0X3VwZGF0ZV9yZWdfc3RhdGUoY29uc3Qgc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpOwordm9pZCBpbnRlbF9scl9jb250ZXh0X3Jlc2V0X3JlZ19zdGF0ZShjb25zdCBz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKTsKKwogdm9pZCBpbnRlbF9scl9jb250ZXh0X3Jlc2V0KHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJCSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2Us CiAJCQkgICAgdTMyIGhlYWQsCkBAIC0xMTUsMTYgKzExNyw0IEBAIGludCBpbnRlbF9scl9jb250 ZXh0X3BpbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCiAJCQkgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKTsKIHZvaWQgaW50ZWxfbHJfY29udGV4dF91bnBpbihzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY2UpOwogCi12b2lkIGludGVsX2V4ZWNsaXN0c19zaG93X3JlcXVlc3RzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCQkgICBzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0s Ci0JCQkJICAgdm9pZCAoKnNob3dfcmVxdWVzdCkoc3RydWN0IGRybV9wcmludGVyICptLAotCQkJ CQkJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAotCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCks Ci0JCQkJICAgdW5zaWduZWQgaW50IG1heCk7Ci0KLXZvaWQgaW50ZWxfZXhlY2xpc3RzX3ZpcnR1 YWxfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBpbnRlbF92aXJ0dWFsX2VuZ2luZSAqdmUpOwotCi1i b29sCi1pbnRlbF9lbmdpbmVfaW5fZXhlY2xpc3RzX3N1Ym1pc3Npb25fbW9kZShjb25zdCBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwotCiAjZW5kaWYgLyogX0lOVEVMX0xSQ19IXyAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfdmlydHVhbF9lbmdp bmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3ZpcnR1YWxfZW5naW5lLmMKaW5k ZXggNmVjMzc1MjEzMmJjLi44NjI4NjU5MTNmZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX3ZpcnR1YWxfZW5naW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfdmlydHVhbF9lbmdpbmUuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUg ImludGVsX2NvbnRleHQuaCIKICNpbmNsdWRlICJpbnRlbF9lbmdpbmUuaCIKICNpbmNsdWRlICJp bnRlbF9lbmdpbmVfcG0uaCIKKyNpbmNsdWRlICJpbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5o IgogI2luY2x1ZGUgImludGVsX2xyYy5oIgogI2luY2x1ZGUgImludGVsX3RpbWVsaW5lLmgiCiAj aW5jbHVkZSAiaW50ZWxfdmlydHVhbF9lbmdpbmUuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmMKaW5kZXggYjU4YTRmZWIyZWM0Li44NmNhZGYzMmEwOTYg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jCkBAIC0x NDIsNyArMTQyLDcgQEAgc3RhdGljIGludCBsaXZlX3VubGl0ZV9yZXN0b3JlKHN0cnVjdCBpbnRl bF9ndCAqZ3QsIGludCBwcmlvKQogCQl9CiAJCUdFTV9CVUdfT04oIWNlWzFdLT5yaW5nLT5zaXpl KTsKIAkJaW50ZWxfcmluZ19yZXNldChjZVsxXS0+cmluZywgY2VbMV0tPnJpbmctPnNpemUgLyAy KTsKLQkJbHJfY29udGV4dF91cGRhdGVfcmVnX3N0YXRlKGNlWzFdLCBlbmdpbmUpOworCQlpbnRl bF9scl9jb250ZXh0X3VwZGF0ZV9yZWdfc3RhdGUoY2VbMV0sIGVuZ2luZSk7CiAKIAkJcnFbMF0g PSBpZ3Rfc3Bpbm5lcl9jcmVhdGVfcmVxdWVzdCgmc3BpbiwgY2VbMF0sIE1JX0FSQl9DSEVDSyk7 CiAJCWlmIChJU19FUlIocnFbMF0pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xy Yy5jCmluZGV4IGMzZjVmNDZmZmNiNC4uNmIxNmVjMTEzNjc1IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9scmMuYwpAQCAtMTk0LDcgKzE5NCw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9s cmNfZml4ZWQodm9pZCAqYXJnKQogCQkJfSwKIAkJCXsKIAkJCQlpOTE1X21taW9fcmVnX29mZnNl dChSSU5HX01JX01PREUoZW5naW5lLT5tbWlvX2Jhc2UpKSwKLQkJCQlscmNfcmluZ19taV9tb2Rl KGVuZ2luZSksCisJCQkJaW50ZWxfbHJjX3JpbmdfbWlfbW9kZShlbmdpbmUpLAogCQkJCSJSSU5H X01JX01PREUiCiAJCQl9LAogCQkJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3Vj L2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKaW5kZXggMTcyMjIwZTgzMDc5Li4wOTdhNTA0NDAyYTYg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNz aW9uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Np b24uYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1fY29udGV4dC5oIgog I2luY2x1ZGUgImd0L2ludGVsX2NvbnRleHQuaCIKICNpbmNsdWRlICJndC9pbnRlbF9lbmdpbmVf cG0uaCIKKyNpbmNsdWRlICJndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5oIgogI2luY2x1 ZGUgImd0L2ludGVsX2d0LmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3RfcG0uaCIKICNpbmNsdWRl ICJndC9pbnRlbF9scmNfcmVnLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvc2NoZWR1bGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMKaW5k ZXggNWIyYTdkMDcyZWM5Li42MGY5MjJhNDM5OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9zY2hlZHVsZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2No ZWR1bGVyLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1fY29udGV4 dC5oIgogI2luY2x1ZGUgImdlbS9pOTE1X2dlbV9wbS5oIgogI2luY2x1ZGUgImd0L2ludGVsX2Nv bnRleHQuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5oIgogI2lu Y2x1ZGUgImd0L2ludGVsX3JpbmcuaCIKIAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcGVyZi5jCmluZGV4IDhkMmUzNzk0OWY0Ni4uMmI1ZjhjYmIzMDUzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3BlcmYuYwpAQCAtMTk4LDYgKzE5OCw3IEBACiAjaW5jbHVkZSAiZ2VtL2k5 MTVfZ2VtX2NvbnRleHQuaCIKICNpbmNsdWRlICJndC9pbnRlbF9lbmdpbmVfcG0uaCIKICNpbmNs dWRlICJndC9pbnRlbF9lbmdpbmVfdXNlci5oIgorI2luY2x1ZGUgImd0L2ludGVsX2V4ZWNsaXN0 c19zdWJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3QuaCIKICNpbmNsdWRlICJndC9p bnRlbF9scmNfcmVnLmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfcmluZy5oIgotLSAKMi4yMy4wCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK