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=-12.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,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 D49FAC433DF for ; Tue, 18 Aug 2020 16:03:33 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 7E9C4207D3 for ; Tue, 18 Aug 2020 16:03:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="yqecWtwQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7E9C4207D3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51272 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k845E-0003Tq-L5 for qemu-devel@archiver.kernel.org; Tue, 18 Aug 2020 12:03:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k83tR-0006zf-UT for qemu-devel@nongnu.org; Tue, 18 Aug 2020 11:51:21 -0400 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:55167) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k83tL-0005sR-UB for qemu-devel@nongnu.org; Tue, 18 Aug 2020 11:51:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1597765875; x=1629301875; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vY5MtJKP8685aFVsrzfsJjs9bVSEjpMqhAjy7lQC4Fk=; b=yqecWtwQtdOEhyo0JP/ZXhQSKHatllEZXjrPkxzVtCBPe03UDTlQJoEj 3rQ9wWGiYSay0yTNiJAXxq7HSEloRtNL+kVExDUORCvK1TE2iZ02eHLBA ToiEmA6iwMGdBFlW2JTForPDmBTm6pMhomOWc2Rpb1hxpqT20FNHfSUgf Y=; Received: from unknown (HELO ironmsg-SD-alpha.qualcomm.com) ([10.53.140.30]) by alexa-out-sd-01.qualcomm.com with ESMTP; 18 Aug 2020 08:50:59 -0700 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg-SD-alpha.qualcomm.com with ESMTP; 18 Aug 2020 08:50:59 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id E1DA9EB5; Tue, 18 Aug 2020 10:50:58 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v3 31/34] Hexagon (target/hexagon) translation Date: Tue, 18 Aug 2020 10:50:44 -0500 Message-Id: <1597765847-16637-32-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1597765847-16637-1-git-send-email-tsimpson@quicinc.com> References: <1597765847-16637-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/18 11:48:34 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ale@rev.ng, riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" UmVhZCB0aGUgaW5zdHJ1Y3Rpb24gbWVtb3J5CkNyZWF0ZSBhIHBhY2tldCBkYXRhIHN0cnVjdHVy ZQpHZW5lcmF0ZSBUQ0cgY29kZSBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBwYWNrZXQKSW52b2tlIHRo ZSBnZW5lcmF0ZSBmdW5jdGlvbiBmb3IgZWFjaCBpbnN0cnVjdGlvbgpHZW5lcmF0ZSBUQ0cgY29k ZSBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0CgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNv biA8dHNpbXBzb25AcXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmgg fCAxMDMgKysrKysrKwogdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmMgfCA3MzAgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDgz MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vdHJhbnNs YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi90cmFuc2xhdGUuYwoKZGlm ZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5oIGIvdGFyZ2V0L2hleGFnb24vdHJh bnNsYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ0MTQwZgotLS0g L2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5oCkBAIC0wLDAgKzEsMTAz IEBACisvKgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBD ZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgSEVYQUdPTl9UUkFOU0xBVEVfSAor I2RlZmluZSBIRVhBR09OX1RSQU5TTEFURV9ICisKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRl ICJleGVjL3RyYW5zbGF0b3IuaCIKKyNpbmNsdWRlICJ0Y2cvdGNnLW9wLmgiCisjaW5jbHVkZSAi aW50ZXJuYWwuaCIKKwordHlwZWRlZiBzdHJ1Y3QgRGlzYXNDb250ZXh0IHsKKyAgICBEaXNhc0Nv bnRleHRCYXNlIGJhc2U7CisgICAgdWludDMyX3QgbWVtX2lkeDsKKyAgICBpbnQgcmVnX2xvZ1tS RUdfV1JJVEVTX01BWF07CisgICAgaW50IHJlZ19sb2dfaWR4OworICAgIGludCBwcmVnX2xvZ1tQ UkVEX1dSSVRFU19NQVhdOworICAgIGludCBwcmVnX2xvZ19pZHg7CisgICAgdWludDhfdCBzdG9y ZV93aWR0aFtTVE9SRVNfTUFYXTsKK30gRGlzYXNDb250ZXh0OworCitzdGF0aWMgaW5saW5lIHZv aWQgY3R4X2xvZ19yZWdfd3JpdGUoRGlzYXNDb250ZXh0ICpjdHgsIGludCBybnVtKQoreworI2lm IEhFWF9ERUJVRworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPnJlZ19sb2df aWR4OyBpKyspIHsKKyAgICAgICAgaWYgKGN0eC0+cmVnX2xvZ1tpXSA9PSBybnVtKSB7CisgICAg ICAgICAgICBIRVhfREVCVUdfTE9HKCJXQVJOSU5HOiBNdWx0aXBsZSB3cml0ZXMgdG8gciVkXG4i LCBybnVtKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGN0eC0+cmVnX2xvZ1tjdHgt PnJlZ19sb2dfaWR4XSA9IHJudW07CisgICAgY3R4LT5yZWdfbG9nX2lkeCsrOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgY3R4X2xvZ19wcmVkX3dyaXRlKERpc2FzQ29udGV4dCAqY3R4LCBpbnQg cG51bSkKK3sKKyAgICBjdHgtPnByZWdfbG9nW2N0eC0+cHJlZ19sb2dfaWR4XSA9IHBudW07Cisg ICAgY3R4LT5wcmVnX2xvZ19pZHgrKzsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX3ByZWxv YWRlZChEaXNhc0NvbnRleHQgKmN0eCwgaW50IG51bSkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3Ig KGkgPSAwOyBpIDwgY3R4LT5yZWdfbG9nX2lkeDsgaSsrKSB7CisgICAgICAgIGlmIChjdHgtPnJl Z19sb2dbaV0gPT0gbnVtKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2V4dGVybiBUQ0d2IGhleF9ncHJbVE9UQUxf UEVSX1RIUkVBRF9SRUdTXTsKK2V4dGVybiBUQ0d2IGhleF9wcmVkW05VTV9QUkVHU107CitleHRl cm4gVENHdiBoZXhfbmV4dF9QQzsKK2V4dGVybiBUQ0d2IGhleF90aGlzX1BDOworZXh0ZXJuIFRD R3YgaGV4X3Nsb3RfY2FuY2VsbGVkOworZXh0ZXJuIFRDR3YgaGV4X2JyYW5jaF90YWtlbjsKK2V4 dGVybiBUQ0d2IGhleF9uZXdfdmFsdWVbVE9UQUxfUEVSX1RIUkVBRF9SRUdTXTsKK2V4dGVybiBU Q0d2IGhleF9yZWdfd3JpdHRlbltUT1RBTF9QRVJfVEhSRUFEX1JFR1NdOworZXh0ZXJuIFRDR3Yg aGV4X25ld19wcmVkX3ZhbHVlW05VTV9QUkVHU107CitleHRlcm4gVENHdiBoZXhfcHJlZF93cml0 dGVuOworZXh0ZXJuIFRDR3YgaGV4X3N0b3JlX2FkZHJbU1RPUkVTX01BWF07CitleHRlcm4gVENH diBoZXhfc3RvcmVfd2lkdGhbU1RPUkVTX01BWF07CitleHRlcm4gVENHdiBoZXhfc3RvcmVfdmFs MzJbU1RPUkVTX01BWF07CitleHRlcm4gVENHdl9pNjQgaGV4X3N0b3JlX3ZhbDY0W1NUT1JFU19N QVhdOworZXh0ZXJuIFRDR3YgaGV4X2RjemVyb19hZGRyOworZXh0ZXJuIFRDR3YgaGV4X2xsc2Nf YWRkcjsKK2V4dGVybiBUQ0d2IGhleF9sbHNjX3ZhbDsKK2V4dGVybiBUQ0d2X2k2NCBoZXhfbGxz Y192YWxfaTY0OworCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX3Nsb3RfY2FuY2VsbGVkX2NoZWNr KFRDR3YgY2hlY2ssIGludCBzbG90X251bSkKK3sKKyAgICBUQ0d2IG1hc2sgPSB0Y2dfY29uc3Rf dGwoMSA8PCBzbG90X251bSk7CisgICAgVENHdiBvbmUgPSB0Y2dfY29uc3RfdGwoMSk7CisgICAg VENHdiB6ZXJvID0gdGNnX2NvbnN0X3RsKDApOworCisgICAgdGNnX2dlbl9hbmRfdGwobWFzaywg aGV4X3Nsb3RfY2FuY2VsbGVkLCBtYXNrKTsKKyAgICB0Y2dfZ2VuX21vdmNvbmRfdGwoVENHX0NP TkRfTkUsIGNoZWNrLCBtYXNrLCB6ZXJvLCBvbmUsIHplcm8pOworCisgICAgdGNnX3RlbXBfZnJl ZShvbmUpOworICAgIHRjZ190ZW1wX2ZyZWUoemVybyk7CisgICAgdGNnX3RlbXBfZnJlZShtYXNr KTsKK30KKworZXh0ZXJuIHZvaWQgZ2VuX2V4Y2VwdGlvbihpbnQgZXhjcCk7CitleHRlcm4gdm9p ZCBnZW5fZXhjZXB0aW9uX2RlYnVnKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rhcmdl dC9oZXhhZ29uL3RyYW5zbGF0ZS5jIGIvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzZjRhZgotLS0gL2Rldi9udWxsCisrKyBi L3RhcmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5jCkBAIC0wLDAgKzEsNzMwIEBACisvKgorICogIENv cHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxs IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorICovCisKKyNkZWZpbmUgUUVNVV9HRU5FUkFURQorI2luY2x1ZGUgInFlbXUvb3NkZXAu aCIKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJ0Y2cvdGNnLW9wLmgiCisjaW5jbHVkZSAi ZXhlYy9jcHVfbGRzdC5oIgorI2luY2x1ZGUgImV4ZWMvbG9nLmgiCisjaW5jbHVkZSAiaW50ZXJu YWwuaCIKKyNpbmNsdWRlICJhdHRyaWJzLmgiCisjaW5jbHVkZSAiaW5zbi5oIgorI2luY2x1ZGUg ImRlY29kZS5oIgorI2luY2x1ZGUgInRyYW5zbGF0ZS5oIgorI2luY2x1ZGUgInByaW50aW5zbi5o IgorCitUQ0d2IGhleF9ncHJbVE9UQUxfUEVSX1RIUkVBRF9SRUdTXTsKK1RDR3YgaGV4X3ByZWRb TlVNX1BSRUdTXTsKK1RDR3YgaGV4X25leHRfUEM7CitUQ0d2IGhleF90aGlzX1BDOworVENHdiBo ZXhfc2xvdF9jYW5jZWxsZWQ7CitUQ0d2IGhleF9icmFuY2hfdGFrZW47CitUQ0d2IGhleF9uZXdf dmFsdWVbVE9UQUxfUEVSX1RIUkVBRF9SRUdTXTsKKyNpZiBIRVhfREVCVUcKK1RDR3YgaGV4X3Jl Z193cml0dGVuW1RPVEFMX1BFUl9USFJFQURfUkVHU107CisjZW5kaWYKK1RDR3YgaGV4X25ld19w cmVkX3ZhbHVlW05VTV9QUkVHU107CitUQ0d2IGhleF9wcmVkX3dyaXR0ZW47CitUQ0d2IGhleF9z dG9yZV9hZGRyW1NUT1JFU19NQVhdOworVENHdiBoZXhfc3RvcmVfd2lkdGhbU1RPUkVTX01BWF07 CitUQ0d2IGhleF9zdG9yZV92YWwzMltTVE9SRVNfTUFYXTsKK1RDR3ZfaTY0IGhleF9zdG9yZV92 YWw2NFtTVE9SRVNfTUFYXTsKK1RDR3YgaGV4X3BrdF9oYXNfc3RvcmVfczE7CitUQ0d2IGhleF9k Y3plcm9fYWRkcjsKK1RDR3YgaGV4X2xsc2NfYWRkcjsKK1RDR3YgaGV4X2xsc2NfdmFsOworVENH dl9pNjQgaGV4X2xsc2NfdmFsX2k2NDsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoZXhh Z29uX3ByZWRuYW1lc1tdID0geworICAicDAiLCAicDEiLCAicDIiLCAicDMiCit9OworCit2b2lk IGdlbl9leGNlcHRpb24oaW50IGV4Y3ApCit7CisgICAgVENHdl9pMzIgaGVscGVyX3RtcCA9IHRj Z19jb25zdF9pMzIoZXhjcCk7CisgICAgZ2VuX2hlbHBlcl9yYWlzZV9leGNlcHRpb24oY3B1X2Vu diwgaGVscGVyX3RtcCk7CisgICAgdGNnX3RlbXBfZnJlZV9pMzIoaGVscGVyX3RtcCk7Cit9CisK K3ZvaWQgZ2VuX2V4Y2VwdGlvbl9kZWJ1Zyh2b2lkKQoreworICAgIGdlbl9leGNlcHRpb24oRVhD UF9ERUJVRyk7Cit9CisKKyNpZiBIRVhfREVCVUcKKyNkZWZpbmUgUEFDS0VUX0JVRkZFUl9MRU4g ICAgICAgICAgICAgIDEwMjgKK3N0YXRpYyB2b2lkIHByaW50X3BrdChwYWNrZXRfdCAqcGt0KQor eworICAgIGNoYXIgYnVmW1BBQ0tFVF9CVUZGRVJfTEVOXTsKKyAgICBzbnByaW50X2FfcGt0KGJ1 ZiwgUEFDS0VUX0JVRkZFUl9MRU4sIHBrdCk7CisgICAgSEVYX0RFQlVHX0xPRygiJXMiLCBidWYp OworfQorI2RlZmluZSBIRVhfREVCVUdfUFJJTlRfUEtUKHBrdCkgIHByaW50X3BrdChwa3QpCisj ZWxzZQorI2RlZmluZSBIRVhfREVCVUdfUFJJTlRfUEtUKHBrdCkgIC8qIG5vdGhpbmcgKi8KKyNl bmRpZgorCitzdGF0aWMgaW50IHJlYWRfcGFja2V0X3dvcmRzKENQVUhleGFnb25TdGF0ZSAqZW52 LCBEaXNhc0NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3Qgd29yZHNbXSkKK3sKKyAgICBib29sIGZvdW5kX2VuZCA9IGZhbHNlOworICAgIGludCBtYXhf d29yZHM7CisgICAgaW50IG53b3JkczsKKyAgICBpbnQgaTsKKworICAgIC8qIE1ha2Ugc3VyZSB3 ZSBkb24ndCBjcm9zcyBhIHBhZ2UgYm91bmRhcnkgKi8KKyAgICBtYXhfd29yZHMgPSAtKGN0eC0+ YmFzZS5wY19uZXh0IHwgVEFSR0VUX1BBR0VfTUFTSykgLyBzaXplb2YodWludDMyX3QpOworICAg IGlmIChtYXhfd29yZHMgPCBQQUNLRVRfV09SRFNfTUFYKSB7CisgICAgICAgIC8qIE1pZ2h0IGNy b3NzIGEgcGFnZSBib3VuZGFyeSAqLworICAgICAgICBpZiAoY3R4LT5iYXNlLm51bV9pbnNucyA9 PSAxKSB7CisgICAgICAgICAgICAvKiBPSyBpZiBpdCdzIHRoZSBmaXJzdCBwYWNrZXQgaW4gdGhl IFRCICovCisgICAgICAgICAgICBtYXhfd29yZHMgPSBQQUNLRVRfV09SRFNfTUFYOworICAgICAg ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWF4X3dvcmRzID0gUEFDS0VUX1dPUkRTX01BWDsK KyAgICB9CisKKyAgICBtZW1zZXQod29yZHMsIDAsIFBBQ0tFVF9XT1JEU19NQVggKiBzaXplb2Yo dWludDMyX3QpKTsKKyAgICBmb3IgKG53b3JkcyA9IDA7ICFmb3VuZF9lbmQgJiYgbndvcmRzIDwg bWF4X3dvcmRzOyBud29yZHMrKykgeworICAgICAgICB3b3Jkc1tud29yZHNdID0gY3B1X2xkbF9j b2RlKGVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5iYXNlLnBjX25l eHQgKyBud29yZHMgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgZm91bmRfZW5kID0gaXNf cGFja2V0X2VuZCh3b3Jkc1tud29yZHNdKTsKKyAgICB9CisgICAgaWYgKCFmb3VuZF9lbmQpIHsK KyAgICAgICAgaWYgKG53b3JkcyA9PSBQQUNLRVRfV09SRFNfTUFYKSB7CisgICAgICAgICAgICAv KiBSZWFkIHRvbyBtYW55IHdvcmRzIHdpdGhvdXQgZmluZGluZyB0aGUgZW5kICovCisgICAgICAg ICAgICBnZW5fZXhjZXB0aW9uKEhFWF9FWENQX0lOVkFMSURfUEFDS0VUKTsKKyAgICAgICAgICAg IGN0eC0+YmFzZS5pc19qbXAgPSBESVNBU19OT1JFVFVSTjsKKyAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICB9CisgICAgICAgIC8qIENyb3NzZXMgcGFnZSBib3VuZGFyeSAtIGRlZmVyIHRv IG5leHQgVEIgKi8KKyAgICAgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX1RPT19NQU5ZOwor ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBIRVhfREVCVUdfTE9HKCJkZWNvZGVfcGFj a2V0OiBwYyA9IDB4JXhcbiIsIGN0eC0+YmFzZS5wY19uZXh0KTsKKyAgICBIRVhfREVCVUdfTE9H KCIgICAgd29yZHMgPSB7ICIpOworICAgIGZvciAoaSA9IDA7IGkgPCBud29yZHM7IGkrKykgewor ICAgICAgICBIRVhfREVCVUdfTE9HKCIweCV4LCAiLCB3b3Jkc1tpXSk7CisgICAgfQorICAgIEhF WF9ERUJVR19MT0coIn1cbiIpOworCisgICAgcmV0dXJuIG53b3JkczsKK30KKworc3RhdGljIHZv aWQgZ2VuX3N0YXJ0X3BhY2tldChEaXNhc0NvbnRleHQgKmN0eCwgcGFja2V0X3QgKnBrdCkKK3sK KyAgICB0YXJnZXRfdWxvbmcgbmV4dF9QQyA9IGN0eC0+YmFzZS5wY19uZXh0ICsgcGt0LT5lbmNv ZF9wa3Rfc2l6ZV9pbl9ieXRlczsKKyAgICBpbnQgaTsKKworICAgIC8qIENsZWFyIG91dCB0aGUg ZGlzYXNzZW1ibHkgY29udGV4dCAqLworICAgIGN0eC0+cmVnX2xvZ19pZHggPSAwOworICAgIGN0 eC0+cHJlZ19sb2dfaWR4ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgU1RPUkVTX01BWDsgaSsr KSB7CisgICAgICAgIGN0eC0+c3RvcmVfd2lkdGhbaV0gPSAwOworICAgIH0KKyAgICB0Y2dfZ2Vu X21vdmlfdGwoaGV4X3BrdF9oYXNfc3RvcmVfczEsIHBrdC0+cGt0X2hhc19zdG9yZV9zMSk7CisK KyNpZiBIRVhfREVCVUcKKyAgICAvKiBIYW5keSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50IGJl Zm9yZSB0aGUgcGFja2V0IGV4ZWN1dGVzICovCisgICAgZ2VuX2hlbHBlcl9kZWJ1Z19zdGFydF9w YWNrZXQoY3B1X2Vudik7CisgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF90aGlzX1BDLCBjdHgtPmJh c2UucGNfbmV4dCk7CisjZW5kaWYKKworICAgIC8qIEluaXRpYWxpemUgdGhlIHJ1bnRpbWUgc3Rh dGUgZm9yIHBhY2tldCBzZW1hbnRpY3MgKi8KKyAgICB0Y2dfZ2VuX21vdmlfdGwoaGV4X2dwcltI RVhfUkVHX1BDXSwgY3R4LT5iYXNlLnBjX25leHQpOworICAgIHRjZ19nZW5fbW92aV90bChoZXhf c2xvdF9jYW5jZWxsZWQsIDApOworICAgIGlmIChwa3QtPnBrdF9oYXNfY29mKSB7CisgICAgICAg IHRjZ19nZW5fbW92aV90bChoZXhfYnJhbmNoX3Rha2VuLCAwKTsKKyAgICAgICAgdGNnX2dlbl9t b3ZpX3RsKGhleF9uZXh0X1BDLCBuZXh0X1BDKTsKKyAgICB9CisgICAgdGNnX2dlbl9tb3ZpX3Rs KGhleF9wcmVkX3dyaXR0ZW4sIDApOworfQorCisvKgorICogVGhlIExPR18qX1dSSVRFIG1hY3Jv cyBtYXJrIG1vc3Qgb2YgdGhlIHdyaXRlcyBpbiBhIHBhY2tldAorICogSG93ZXZlciwgdGhlcmUg YXJlIHNvbWUgaW1wbGljaXQgd3JpdGVzIG1hcmtlZCBhcyBhdHRyaWJ1dGVzCisgKiBvZiB0aGUg YXBwbGljYWJsZSBpbnN0cnVjdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkIG1hcmtfaW1wbGljaXRf cmVnX3dyaXRlKERpc2FzQ29udGV4dCAqY3R4LCBpbnNuX3QgKmluc24sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXR0cmliLCBpbnQgcm51bSkKK3sKKyAgICBpZiAo R0VUX0FUVFJJQihpbnNuLT5vcGNvZGUsIGF0dHJpYikpIHsKKyAgICAgICAgaW50IGlzX3ByZWRp Y2F0ZWQgPSBHRVRfQVRUUklCKGluc24tPm9wY29kZSwgQV9DT05ERVhFQyk7CisgICAgICAgIGlm IChpc19wcmVkaWNhdGVkICYmICFpc19wcmVsb2FkZWQoY3R4LCBybnVtKSkgeworICAgICAgICAg ICAgdGNnX2dlbl9tb3ZfdGwoaGV4X25ld192YWx1ZVtybnVtXSwgaGV4X2dwcltybnVtXSk7Cisg ICAgICAgIH0KKworICAgICAgICBjdHgtPnJlZ19sb2dbY3R4LT5yZWdfbG9nX2lkeF0gPSBybnVt OworICAgICAgICBjdHgtPnJlZ19sb2dfaWR4Kys7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBt YXJrX2ltcGxpY2l0X3ByZWRfd3JpdGUoRGlzYXNDb250ZXh0ICpjdHgsIGluc25fdCAqaW5zbiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXR0cmliLCBpbnQgcG51 bSkKK3sKKyAgICBpZiAoR0VUX0FUVFJJQihpbnNuLT5vcGNvZGUsIGF0dHJpYikpIHsKKyAgICAg ICAgY3R4LT5wcmVnX2xvZ1tjdHgtPnByZWdfbG9nX2lkeF0gPSBwbnVtOworICAgICAgICBjdHgt PnByZWdfbG9nX2lkeCsrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbWFya19pbXBsaWNpdF93 cml0ZXMoRGlzYXNDb250ZXh0ICpjdHgsIGluc25fdCAqaW5zbikKK3sKKyAgICBtYXJrX2ltcGxp Y2l0X3JlZ193cml0ZShjdHgsIGluc24sIEFfSU1QTElDSVRfV1JJVEVTX0ZQLCAgSEVYX1JFR19G UCk7CisgICAgbWFya19pbXBsaWNpdF9yZWdfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dS SVRFU19TUCwgIEhFWF9SRUdfU1ApOworICAgIG1hcmtfaW1wbGljaXRfcmVnX3dyaXRlKGN0eCwg aW5zbiwgQV9JTVBMSUNJVF9XUklURVNfTFIsICBIRVhfUkVHX0xSKTsKKyAgICBtYXJrX2ltcGxp Y2l0X3JlZ193cml0ZShjdHgsIGluc24sIEFfSU1QTElDSVRfV1JJVEVTX0xDMCwgSEVYX1JFR19M QzApOworICAgIG1hcmtfaW1wbGljaXRfcmVnX3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9X UklURVNfU0EwLCBIRVhfUkVHX1NBMCk7CisgICAgbWFya19pbXBsaWNpdF9yZWdfd3JpdGUoY3R4 LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19MQzEsIEhFWF9SRUdfTEMxKTsKKyAgICBtYXJrX2lt cGxpY2l0X3JlZ193cml0ZShjdHgsIGluc24sIEFfSU1QTElDSVRfV1JJVEVTX1NBMSwgSEVYX1JF R19TQTEpOworCisgICAgbWFya19pbXBsaWNpdF9wcmVkX3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBM SUNJVF9XUklURVNfUDAsIDApOworICAgIG1hcmtfaW1wbGljaXRfcHJlZF93cml0ZShjdHgsIGlu c24sIEFfSU1QTElDSVRfV1JJVEVTX1AxLCAxKTsKKyAgICBtYXJrX2ltcGxpY2l0X3ByZWRfd3Jp dGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19QMiwgMik7CisgICAgbWFya19pbXBsaWNp dF9wcmVkX3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9XUklURVNfUDMsIDMpOworfQorCitz dGF0aWMgdm9pZCBnZW5faW5zbihDUFVIZXhhZ29uU3RhdGUgKmVudiwgRGlzYXNDb250ZXh0ICpj dHgsCisgICAgICAgICAgICAgICAgICAgICBpbnNuX3QgKmluc24sIHBhY2tldF90ICpwa3QpCit7 CisgICAgaWYgKGluc24tPmdlbmVyYXRlKSB7CisgICAgICAgIG1hcmtfaW1wbGljaXRfd3JpdGVz KGN0eCwgaW5zbik7CisgICAgICAgIGluc24tPmdlbmVyYXRlKGVudiwgY3R4LCBpbnNuLCBwa3Qp OworICAgIH0gZWxzZSB7CisgICAgICAgIGdlbl9leGNlcHRpb24oSEVYX0VYQ1BfSU5WQUxJRF9P UENPREUpOworICAgICAgICBjdHgtPmJhc2UuaXNfam1wID0gRElTQVNfTk9SRVRVUk47CisgICAg fQorfQorCisvKgorICogSGVscGVycyBmb3IgZ2VuZXJhdGluZyB0aGUgcGFja2V0IGNvbW1pdAor ICovCitzdGF0aWMgdm9pZCBnZW5fcmVnX3dyaXRlcyhEaXNhc0NvbnRleHQgKmN0eCkKK3sKKyAg ICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPnJlZ19sb2dfaWR4OyBpKyspIHsK KyAgICAgICAgaW50IHJlZ19udW0gPSBjdHgtPnJlZ19sb2dbaV07CisKKyAgICAgICAgdGNnX2dl bl9tb3ZfdGwoaGV4X2dwcltyZWdfbnVtXSwgaGV4X25ld192YWx1ZVtyZWdfbnVtXSk7CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBnZW5fcHJlZF93cml0ZXMoRGlzYXNDb250ZXh0ICpjdHgsIHBh Y2tldF90ICpwa3QpCit7CisgICAgLyogRWFybHkgZXhpdCBpZiB0aGUgbG9nIGlzIGVtcHR5ICov CisgICAgaWYgKCFjdHgtPnByZWdfbG9nX2lkeCkgeworICAgICAgICByZXR1cm47CisgICAgfQor CisgICAgVENHdiB6ZXJvID0gdGNnX2NvbnN0X3RsKDApOworICAgIFRDR3YgY29udHJvbF9yZWcg PSB0Y2dfdGVtcF9uZXcoKTsKKyAgICBUQ0d2IHB2YWwgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICBp bnQgaTsKKworICAgIC8qCisgICAgICogT25seSBlbmRsb29wIGluc3RydWN0aW9ucyB3aWxsIGNv bmRpdGlvbmFsbHkKKyAgICAgKiB3cml0ZSBhIHByZWRpY2F0ZS4gIElmIHRoZXJlIGFyZSBubyBl bmRsb29wCisgICAgICogaW5zdHJ1Y3Rpb25zLCB3ZSBjYW4gdXNlIHRoZSBub24tY29uZGl0aW9u YWwKKyAgICAgKiB3cml0ZSBvZiB0aGUgcHJlZGljYXRlcy4KKyAgICAgKi8KKyAgICBpZiAocGt0 LT5wa3RfaGFzX2VuZGxvb3ApIHsKKyAgICAgICAgVENHdiBwcmVkX3dyaXR0ZW4gPSB0Y2dfdGVt cF9uZXcoKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGN0eC0+cHJlZ19sb2dfaWR4OyBpKysp IHsKKyAgICAgICAgICAgIGludCBwcmVkX251bSA9IGN0eC0+cHJlZ19sb2dbaV07CisKKyAgICAg ICAgICAgIHRjZ19nZW5fYW5kaV90bChwcmVkX3dyaXR0ZW4sIGhleF9wcmVkX3dyaXR0ZW4sIDEg PDwgcHJlZF9udW0pOworICAgICAgICAgICAgdGNnX2dlbl9tb3Zjb25kX3RsKFRDR19DT05EX05F LCBoZXhfcHJlZFtwcmVkX251bV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl ZF93cml0dGVuLCB6ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9uZXdf cHJlZF92YWx1ZVtwcmVkX251bV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4 X3ByZWRbcHJlZF9udW1dKTsKKyAgICAgICAgfQorICAgICAgICB0Y2dfdGVtcF9mcmVlKHByZWRf d3JpdHRlbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGN0eC0+cHJl Z19sb2dfaWR4OyBpKyspIHsKKyAgICAgICAgICAgIGludCBwcmVkX251bSA9IGN0eC0+cHJlZ19s b2dbaV07CisgICAgICAgICAgICB0Y2dfZ2VuX21vdl90bChoZXhfcHJlZFtwcmVkX251bV0sIGhl eF9uZXdfcHJlZF92YWx1ZVtwcmVkX251bV0pOworI2lmIEhFWF9ERUJVRworICAgICAgICAgICAg LyogRG8gdGhpcyBzbyBIRUxQRVIoZGVidWdfY29tbWl0X2VuZCkgd2lsbCBrbm93ICovCisgICAg ICAgICAgICB0Y2dfZ2VuX29yaV90bChoZXhfcHJlZF93cml0dGVuLCBoZXhfcHJlZF93cml0dGVu LCAxIDw8IHByZWRfbnVtKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorCisgICAgdGNnX3Rl bXBfZnJlZSh6ZXJvKTsKKyAgICB0Y2dfdGVtcF9mcmVlKGNvbnRyb2xfcmVnKTsKKyAgICB0Y2df dGVtcF9mcmVlKHB2YWwpOworfQorCisjaWYgSEVYX0RFQlVHCitzdGF0aWMgaW5saW5lIHZvaWQg Z2VuX2NoZWNrX3N0b3JlX3dpZHRoKERpc2FzQ29udGV4dCAqY3R4LCBpbnQgc2xvdF9udW0pCit7 CisgICAgVENHdiBzbG90ID0gdGNnX2NvbnN0X3RsKHNsb3RfbnVtKTsKKyAgICBUQ0d2IGNoZWNr ID0gdGNnX2NvbnN0X3RsKGN0eC0+c3RvcmVfd2lkdGhbc2xvdF9udW1dKTsKKyAgICBnZW5faGVs cGVyX2RlYnVnX2NoZWNrX3N0b3JlX3dpZHRoKGNwdV9lbnYsIHNsb3QsIGNoZWNrKTsKKyAgICB0 Y2dfdGVtcF9mcmVlKHNsb3QpOworICAgIHRjZ190ZW1wX2ZyZWUoY2hlY2spOworfQorI2RlZmlu ZSBIRVhfREVCVUdfR0VOX0NIRUNLX1NUT1JFX1dJRFRIKGN0eCwgc2xvdF9udW0pIFwKKyAgICBn ZW5fY2hlY2tfc3RvcmVfd2lkdGgoY3R4LCBzbG90X251bSkKKyNlbHNlCisjZGVmaW5lIEhFWF9E RUJVR19HRU5fQ0hFQ0tfU1RPUkVfV0lEVEgoY3R4LCBzbG90X251bSkgIC8qIG5vdGhpbmcgKi8K KyNlbmRpZgorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3N0b3JlKERpc2FzQ29udGV4dCAqY3R4LCBp bnQgc2xvdF9udW0pCit7CisgICAgVENHdiBjYW5jZWxsZWQgPSB0Y2dfdGVtcF9sb2NhbF9uZXco KTsKKyAgICBUQ0dMYWJlbCAqbGFiZWxfZW5kID0gZ2VuX25ld19sYWJlbCgpOworCisgICAgLyog RG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHNsb3Qgd2FzIGNhbmNlbGxlZCAqLworICAgIGdlbl9z bG90X2NhbmNlbGxlZF9jaGVjayhjYW5jZWxsZWQsIHNsb3RfbnVtKTsKKyAgICB0Y2dfZ2VuX2Jy Y29uZGlfdGwoVENHX0NPTkRfTkUsIGNhbmNlbGxlZCwgMCwgbGFiZWxfZW5kKTsKKyAgICB7Cisg ICAgICAgIGludCBjdHhfd2lkdGggPSBjdHgtPnN0b3JlX3dpZHRoW3Nsb3RfbnVtXTsKKyAgICAg ICAgVENHdiBhZGRyZXNzID0gdGNnX3RlbXBfbG9jYWxfbmV3KCk7CisgICAgICAgIHRjZ19nZW5f bW92X3RsKGFkZHJlc3MsIGhleF9zdG9yZV9hZGRyW3Nsb3RfbnVtXSk7CisKKyAgICAgICAgLyoK KyAgICAgICAgICogSWYgd2Uga25vdyB0aGUgd2lkdGggZnJvbSB0aGUgRGlzYXNDb250ZXh0LCB3 ZSBjYW4KKyAgICAgICAgICogZ2VuZXJhdGUgbXVjaCBjbGVhbmVyIGNvZGUuCisgICAgICAgICAq IFVuZm9ydHVuYXRlbHksIG5vdCBhbGwgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGUgdGhlIGZTVE9SRQor ICAgICAgICAgKiBtYWNybyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLiAgQW55dGhpbmcgdGhhdCB1 c2VzIHRoZQorICAgICAgICAgKiBnZW5lcmljIGhlbHBlciB3aWxsIGhhdmUgdGhpcyBwcm9ibGVt LiAgSW5zdHJ1Y3Rpb25zCisgICAgICAgICAqIHRoYXQgdXNlIGZXUkFQIHRvIGdlbmVyYXRlIHBy b3BlciBUQ0cgY29kZSB3aWxsIGJlIE9LLgorICAgICAgICAgKi8KKyAgICAgICAgVENHdiB2YWx1 ZTsKKyAgICAgICAgVENHdl9pNjQgdmFsdWVfaTY0OworICAgICAgICBUQ0dMYWJlbCAqbGFiZWxf dzI7CisgICAgICAgIFRDR0xhYmVsICpsYWJlbF93NDsKKyAgICAgICAgVENHTGFiZWwgKmxhYmVs X3c4OworICAgICAgICBzd2l0Y2ggKGN0eF93aWR0aCkgeworICAgICAgICBjYXNlIDE6CisgICAg ICAgICAgICBIRVhfREVCVUdfR0VOX0NIRUNLX1NUT1JFX1dJRFRIKGN0eCwgc2xvdF9udW0pOwor ICAgICAgICAgICAgdmFsdWUgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICAgICAgICAgIHRjZ19nZW5f bW92X3RsKHZhbHVlLCBoZXhfc3RvcmVfdmFsMzJbc2xvdF9udW1dKTsKKyAgICAgICAgICAgIHRj Z19nZW5fcWVtdV9zdDgodmFsdWUsIGFkZHJlc3MsIGN0eC0+bWVtX2lkeCk7CisgICAgICAgICAg ICB0Y2dfdGVtcF9mcmVlKHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl IDI6CisgICAgICAgICAgICBIRVhfREVCVUdfR0VOX0NIRUNLX1NUT1JFX1dJRFRIKGN0eCwgc2xv dF9udW0pOworICAgICAgICAgICAgdmFsdWUgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICAgICAgICAg IHRjZ19nZW5fbW92X3RsKHZhbHVlLCBoZXhfc3RvcmVfdmFsMzJbc2xvdF9udW1dKTsKKyAgICAg ICAgICAgIHRjZ19nZW5fcWVtdV9zdDE2KHZhbHVlLCBhZGRyZXNzLCBjdHgtPm1lbV9pZHgpOwor ICAgICAgICAgICAgdGNnX3RlbXBfZnJlZSh2YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgY2FzZSA0OgorICAgICAgICAgICAgSEVYX0RFQlVHX0dFTl9DSEVDS19TVE9SRV9XSURU SChjdHgsIHNsb3RfbnVtKTsKKyAgICAgICAgICAgIHZhbHVlID0gdGNnX3RlbXBfbmV3KCk7Cisg ICAgICAgICAgICB0Y2dfZ2VuX21vdl90bCh2YWx1ZSwgaGV4X3N0b3JlX3ZhbDMyW3Nsb3RfbnVt XSk7CisgICAgICAgICAgICB0Y2dfZ2VuX3FlbXVfc3QzMih2YWx1ZSwgYWRkcmVzcywgY3R4LT5t ZW1faWR4KTsKKyAgICAgICAgICAgIHRjZ190ZW1wX2ZyZWUodmFsdWUpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIEhFWF9ERUJVR19HRU5fQ0hFQ0tf U1RPUkVfV0lEVEgoY3R4LCBzbG90X251bSk7CisgICAgICAgICAgICB2YWx1ZV9pNjQgPSB0Y2df dGVtcF9uZXdfaTY0KCk7CisgICAgICAgICAgICB0Y2dfZ2VuX21vdl9pNjQodmFsdWVfaTY0LCBo ZXhfc3RvcmVfdmFsNjRbc2xvdF9udW1dKTsKKyAgICAgICAgICAgIHRjZ19nZW5fcWVtdV9zdDY0 KHZhbHVlX2k2NCwgYWRkcmVzcywgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgICAgIHRjZ190ZW1w X2ZyZWVfaTY0KHZhbHVlX2k2NCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiB3ZSBnZXQgdG8gaGVyZSwgd2Ug ZG9uJ3Qga25vdyB0aGUgd2lkdGggYXQKKyAgICAgICAgICAgICAqIFRDRyBnZW5lcmF0aW9uIHRp bWUsIHdlJ2xsIGdlbmVyYXRlIGJyYW5jaGluZworICAgICAgICAgICAgICogYmFzZWQgb24gdGhl IHdpZHRoIGF0IHJ1bnRpbWUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGxhYmVsX3cy ID0gZ2VuX25ld19sYWJlbCgpOworICAgICAgICAgICAgbGFiZWxfdzQgPSBnZW5fbmV3X2xhYmVs KCk7CisgICAgICAgICAgICBsYWJlbF93OCA9IGdlbl9uZXdfbGFiZWwoKTsKKyAgICAgICAgICAg IFRDR3Ygd2lkdGggPSB0Y2dfdGVtcF9sb2NhbF9uZXcoKTsKKworICAgICAgICAgICAgdGNnX2dl bl9tb3ZfdGwod2lkdGgsIGhleF9zdG9yZV93aWR0aFtzbG90X251bV0pOworICAgICAgICAgICAg dGNnX2dlbl9icmNvbmRpX3RsKFRDR19DT05EX05FLCB3aWR0aCwgMSwgbGFiZWxfdzIpOworICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFdpZHRoIGlzIDEgYnl0ZSAqLworICAgICAg ICAgICAgICAgIFRDR3YgdmFsdWUgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICAgICAgICAgICAgICB0 Y2dfZ2VuX21vdl90bCh2YWx1ZSwgaGV4X3N0b3JlX3ZhbDMyW3Nsb3RfbnVtXSk7CisgICAgICAg ICAgICAgICAgdGNnX2dlbl9xZW11X3N0OCh2YWx1ZSwgYWRkcmVzcywgY3R4LT5tZW1faWR4KTsK KyAgICAgICAgICAgICAgICB0Y2dfZ2VuX2JyKGxhYmVsX2VuZCk7CisgICAgICAgICAgICAgICAg dGNnX3RlbXBfZnJlZSh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnZW5fc2V0 X2xhYmVsKGxhYmVsX3cyKTsKKyAgICAgICAgICAgIHRjZ19nZW5fYnJjb25kaV90bChUQ0dfQ09O RF9ORSwgd2lkdGgsIDIsIGxhYmVsX3c0KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAvKiBXaWR0aCBpcyAyIGJ5dGVzICovCisgICAgICAgICAgICAgICAgVENHdiB2YWx1ZSA9IHRj Z190ZW1wX25ldygpOworICAgICAgICAgICAgICAgIHRjZ19nZW5fbW92X3RsKHZhbHVlLCBoZXhf c3RvcmVfdmFsMzJbc2xvdF9udW1dKTsKKyAgICAgICAgICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Qx Nih2YWx1ZSwgYWRkcmVzcywgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgICAgICAgICB0Y2dfZ2Vu X2JyKGxhYmVsX2VuZCk7CisgICAgICAgICAgICAgICAgdGNnX3RlbXBfZnJlZSh2YWx1ZSk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBnZW5fc2V0X2xhYmVsKGxhYmVsX3c0KTsKKyAgICAg ICAgICAgIHRjZ19nZW5fYnJjb25kaV90bChUQ0dfQ09ORF9ORSwgd2lkdGgsIDQsIGxhYmVsX3c4 KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBXaWR0aCBpcyA0IGJ5dGVzICov CisgICAgICAgICAgICAgICAgVENHdiB2YWx1ZSA9IHRjZ190ZW1wX25ldygpOworICAgICAgICAg ICAgICAgIHRjZ19nZW5fbW92X3RsKHZhbHVlLCBoZXhfc3RvcmVfdmFsMzJbc2xvdF9udW1dKTsK KyAgICAgICAgICAgICAgICB0Y2dfZ2VuX3FlbXVfc3QzMih2YWx1ZSwgYWRkcmVzcywgY3R4LT5t ZW1faWR4KTsKKyAgICAgICAgICAgICAgICB0Y2dfZ2VuX2JyKGxhYmVsX2VuZCk7CisgICAgICAg ICAgICAgICAgdGNnX3RlbXBfZnJlZSh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBnZW5fc2V0X2xhYmVsKGxhYmVsX3c4KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAvKiBXaWR0aCBpcyA4IGJ5dGVzICovCisgICAgICAgICAgICAgICAgVENHdl9pNjQgdmFsdWUg PSB0Y2dfdGVtcF9uZXdfaTY0KCk7CisgICAgICAgICAgICAgICAgdGNnX2dlbl9tb3ZfaTY0KHZh bHVlLCBoZXhfc3RvcmVfdmFsNjRbc2xvdF9udW1dKTsKKyAgICAgICAgICAgICAgICB0Y2dfZ2Vu X3FlbXVfc3Q2NCh2YWx1ZSwgYWRkcmVzcywgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgICAgICAg ICB0Y2dfZ2VuX2JyKGxhYmVsX2VuZCk7CisgICAgICAgICAgICAgICAgdGNnX3RlbXBfZnJlZV9p NjQodmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0Y2dfdGVtcF9mcmVlKHdp ZHRoKTsKKyAgICAgICAgfQorICAgICAgICB0Y2dfdGVtcF9mcmVlKGFkZHJlc3MpOworICAgIH0K KyAgICBnZW5fc2V0X2xhYmVsKGxhYmVsX2VuZCk7CisKKyAgICB0Y2dfdGVtcF9mcmVlKGNhbmNl bGxlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3Nfc3RvcmVfbG9nKERpc2FzQ29udGV4dCAq Y3R4LCBwYWNrZXRfdCAqcGt0KQoreworICAgIC8qCisgICAgICogIFdoZW4gYSBwYWNrZXQgaGFz IHR3byBzdG9yZXMsIHRoZSBoYXJkd2FyZSBwcm9jZXNzZXMKKyAgICAgKiAgc2xvdCAxIGFuZCB0 aGVuIHNsb3QgMi4gIFRoaXMgd2lsbCBiZSBpbXBvcnRhbnQgd2hlbgorICAgICAqICB0aGUgbWVt b3J5IGFjY2Vzc2VzIG92ZXJsYXAuCisgICAgICovCisgICAgaWYgKHBrdC0+cGt0X2hhc19zdG9y ZV9zMSAmJiAhcGt0LT5wa3RfaGFzX2RjemVyb2EpIHsKKyAgICAgICAgcHJvY2Vzc19zdG9yZShj dHgsIDEpOworICAgIH0KKyAgICBpZiAocGt0LT5wa3RfaGFzX3N0b3JlX3MwICYmICFwa3QtPnBr dF9oYXNfZGN6ZXJvYSkgeworICAgICAgICBwcm9jZXNzX3N0b3JlKGN0eCwgMCk7CisgICAgfQor fQorCisvKiBaZXJvIG91dCBhIDMyLWJpdCBjYWNoZSBsaW5lICovCitzdGF0aWMgdm9pZCBwcm9j ZXNzX2RjemVyb2EoRGlzYXNDb250ZXh0ICpjdHgsIHBhY2tldF90ICpwa3QpCit7CisgICAgaWYg KHBrdC0+cGt0X2hhc19kY3plcm9hKSB7CisgICAgICAgIC8qIFN0b3JlIDMyIGJ5dGVzIG9mIHpl cm8gc3RhcnRpbmcgYXQgKGFkZHIgJiB+MHgxZikgKi8KKyAgICAgICAgVENHdiBhZGRyID0gdGNn X3RlbXBfbmV3KCk7CisgICAgICAgIFRDR3ZfaTY0IHplcm8gPSB0Y2dfY29uc3RfaTY0KDApOwor CisgICAgICAgIHRjZ19nZW5fYW5kaV90bChhZGRyLCBoZXhfZGN6ZXJvX2FkZHIsIH4weDFmKTsK KyAgICAgICAgdGNnX2dlbl9xZW11X3N0NjQoemVybywgYWRkciwgY3R4LT5tZW1faWR4KTsKKyAg ICAgICAgdGNnX2dlbl9hZGRpX3RsKGFkZHIsIGFkZHIsIDgpOworICAgICAgICB0Y2dfZ2VuX3Fl bXVfc3Q2NCh6ZXJvLCBhZGRyLCBjdHgtPm1lbV9pZHgpOworICAgICAgICB0Y2dfZ2VuX2FkZGlf dGwoYWRkciwgYWRkciwgOCk7CisgICAgICAgIHRjZ19nZW5fcWVtdV9zdDY0KHplcm8sIGFkZHIs IGN0eC0+bWVtX2lkeCk7CisgICAgICAgIHRjZ19nZW5fYWRkaV90bChhZGRyLCBhZGRyLCA4KTsK KyAgICAgICAgdGNnX2dlbl9xZW11X3N0NjQoemVybywgYWRkciwgY3R4LT5tZW1faWR4KTsKKwor ICAgICAgICB0Y2dfdGVtcF9mcmVlKGFkZHIpOworICAgICAgICB0Y2dfdGVtcF9mcmVlX2k2NCh6 ZXJvKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHByb2Nlc3NfY2hhbmdlX29mX2Zsb3coRGlz YXNDb250ZXh0ICpjdHgsIHBhY2tldF90ICpwa3QpCit7CisgICAgaWYgKHBrdC0+cGt0X2hhc19j b2YpIHsKKyAgICAgICAgdGNnX2dlbl9tb3ZfdGwoaGV4X2dwcltIRVhfUkVHX1BDXSwgaGV4X25l eHRfUEMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor fQorCitzdGF0aWMgdm9pZCBnZW5fZXhlY19jb3VudGVycyhwYWNrZXRfdCAqcGt0KQoreworICAg IGludCBudW1faW5zbnMgPSBwa3QtPm51bV9pbnNuczsKKyAgICBpbnQgbnVtX3JlYWxfaW5zbnMg PSAwOworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9pbnNuczsgaSsrKSB7 CisgICAgICAgIGlmICghcGt0LT5pbnNuW2ldLmlzX2VuZGxvb3AgJiYKKyAgICAgICAgICAgICFw a3QtPmluc25baV0ucGFydDEgJiYKKyAgICAgICAgICAgICFHRVRfQVRUUklCKHBrdC0+aW5zbltp XS5vcGNvZGUsIEFfSVRfTk9QKSkgeworICAgICAgICAgICAgbnVtX3JlYWxfaW5zbnMrKzsKKyAg ICAgICAgfQorICAgIH0KKworICAgIHRjZ19nZW5fYWRkaV90bChoZXhfZ3ByW0hFWF9SRUdfUUVN VV9QS1RfQ05UXSwKKyAgICAgICAgICAgICAgICAgICAgaGV4X2dwcltIRVhfUkVHX1FFTVVfUEtU X0NOVF0sIDEpOworICAgIGlmIChudW1fcmVhbF9pbnNucykgeworICAgICAgICB0Y2dfZ2VuX2Fk ZGlfdGwoaGV4X2dwcltIRVhfUkVHX1FFTVVfSU5TTl9DTlRdLAorICAgICAgICAgICAgICAgICAg ICAgICAgaGV4X2dwcltIRVhfUkVHX1FFTVVfSU5TTl9DTlRdLCBudW1fcmVhbF9pbnNucyk7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZCBnZW5fY29tbWl0X3BhY2tldChEaXNhc0NvbnRleHQgKmN0 eCwgcGFja2V0X3QgKnBrdCkKK3sKKyAgICBib29sIGVuZF90YiA9IGZhbHNlOworCisgICAgZ2Vu X3JlZ193cml0ZXMoY3R4KTsKKyAgICBnZW5fcHJlZF93cml0ZXMoY3R4LCBwa3QpOworICAgIHBy b2Nlc3Nfc3RvcmVfbG9nKGN0eCwgcGt0KTsKKyAgICBwcm9jZXNzX2RjemVyb2EoY3R4LCBwa3Qp OworICAgIGVuZF90YiB8PSBwcm9jZXNzX2NoYW5nZV9vZl9mbG93KGN0eCwgcGt0KTsKKyAgICBn ZW5fZXhlY19jb3VudGVycyhwa3QpOworI2lmIEhFWF9ERUJVRworICAgIHsKKyAgICAgICAgVENH diBoYXNfc3QwID0KKyAgICAgICAgICAgIHRjZ19jb25zdF90bChwa3QtPnBrdF9oYXNfc3RvcmVf czAgJiYgIXBrdC0+cGt0X2hhc19kY3plcm9hKTsKKyAgICAgICAgVENHdiBoYXNfc3QxID0KKyAg ICAgICAgICAgIHRjZ19jb25zdF90bChwa3QtPnBrdF9oYXNfc3RvcmVfczEgJiYgIXBrdC0+cGt0 X2hhc19kY3plcm9hKTsKKworICAgICAgICAvKiBIYW5keSBwbGFjZSB0byBzZXQgYSBicmVha3Bv aW50IGF0IHRoZSBlbmQgb2YgZXhlY3V0aW9uICovCisgICAgICAgIGdlbl9oZWxwZXJfZGVidWdf Y29tbWl0X2VuZChjcHVfZW52LCBoYXNfc3QwLCBoYXNfc3QxKTsKKworICAgICAgICB0Y2dfdGVt cF9mcmVlKGhhc19zdDApOworICAgICAgICB0Y2dfdGVtcF9mcmVlKGhhc19zdDEpOworICAgIH0K KyNlbmRpZgorCisgICAgaWYgKGVuZF90YikgeworICAgICAgICB0Y2dfZ2VuX2V4aXRfdGIoTlVM TCwgMCk7CisgICAgICAgIGN0eC0+YmFzZS5pc19qbXAgPSBESVNBU19OT1JFVFVSTjsKKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV9hbmRfdHJhbnNsYXRlX3BhY2tldChDUFVIZXhhZ29u U3RhdGUgKmVudiwgRGlzYXNDb250ZXh0ICpjdHgpCit7CisgICAgdWludDMyX3Qgd29yZHNbUEFD S0VUX1dPUkRTX01BWF07CisgICAgaW50IG53b3JkczsKKyAgICBwYWNrZXRfdCBwa3Q7CisgICAg aW50IGk7CisKKyAgICBud29yZHMgPSByZWFkX3BhY2tldF93b3JkcyhlbnYsIGN0eCwgd29yZHMp OworICAgIGlmICghbndvcmRzKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo ZGVjb2RlX3RoaXMobndvcmRzLCB3b3JkcywgJnBrdCkpIHsKKyAgICAgICAgSEVYX0RFQlVHX1BS SU5UX1BLVCgmcGt0KTsKKyAgICAgICAgZ2VuX3N0YXJ0X3BhY2tldChjdHgsICZwa3QpOworICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgcGt0Lm51bV9pbnNuczsgaSsrKSB7CisgICAgICAgICAgICBn ZW5faW5zbihlbnYsIGN0eCwgJnBrdC5pbnNuW2ldLCAmcGt0KTsKKyAgICAgICAgfQorICAgICAg ICBnZW5fY29tbWl0X3BhY2tldChjdHgsICZwa3QpOworICAgICAgICBjdHgtPmJhc2UucGNfbmV4 dCArPSBwa3QuZW5jb2RfcGt0X3NpemVfaW5fYnl0ZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAg Z2VuX2V4Y2VwdGlvbihIRVhfRVhDUF9JTlZBTElEX1BBQ0tFVCk7CisgICAgICAgIGN0eC0+YmFz ZS5pc19qbXAgPSBESVNBU19OT1JFVFVSTjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGhleGFn b25fdHJfaW5pdF9kaXNhc19jb250ZXh0KERpc2FzQ29udGV4dEJhc2UgKmRjYmFzZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVVN0YXRlICpjcykKK3sKKyAg ICBEaXNhc0NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihkY2Jhc2UsIERpc2FzQ29udGV4dCwg YmFzZSk7CisKKyAgICBjdHgtPm1lbV9pZHggPSBNTVVfVVNFUl9JRFg7Cit9CisKK3N0YXRpYyB2 b2lkIGhleGFnb25fdHJfdGJfc3RhcnQoRGlzYXNDb250ZXh0QmFzZSAqZGIsIENQVVN0YXRlICpj cHUpCit7Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fdHJfaW5zbl9zdGFydChEaXNhc0NvbnRl eHRCYXNlICpkY2Jhc2UsIENQVVN0YXRlICpjcHUpCit7CisgICAgRGlzYXNDb250ZXh0ICpjdHgg PSBjb250YWluZXJfb2YoZGNiYXNlLCBEaXNhc0NvbnRleHQsIGJhc2UpOworCisgICAgdGNnX2dl bl9pbnNuX3N0YXJ0KGN0eC0+YmFzZS5wY19uZXh0KTsKK30KKworc3RhdGljIGJvb2wgaGV4YWdv bl90cl9icmVha3BvaW50X2NoZWNrKERpc2FzQ29udGV4dEJhc2UgKmRjYmFzZSwgQ1BVU3RhdGUg KmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUFVC cmVha3BvaW50ICpicCkKK3sKKyAgICBEaXNhc0NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihk Y2Jhc2UsIERpc2FzQ29udGV4dCwgYmFzZSk7CisKKyAgICB0Y2dfZ2VuX21vdmlfdGwoaGV4X2dw cltIRVhfUkVHX1BDXSwgY3R4LT5iYXNlLnBjX25leHQpOworICAgIGN0eC0+YmFzZS5pc19qbXAg PSBESVNBU19OT1JFVFVSTjsKKyAgICBnZW5fZXhjZXB0aW9uX2RlYnVnKCk7CisgICAgLyoKKyAg ICAgKiBUaGUgYWRkcmVzcyBjb3ZlcmVkIGJ5IHRoZSBicmVha3BvaW50IG11c3QgYmUgaW5jbHVk ZWQgaW4KKyAgICAgKiBbdGItPnBjLCB0Yi0+cGMgKyB0Yi0+c2l6ZSkgaW4gb3JkZXIgdG8gZm9y IGl0IHRvIGJlCisgICAgICogcHJvcGVybHkgY2xlYXJlZCAtLSB0aHVzIHdlIGluY3JlbWVudCB0 aGUgUEMgaGVyZSBzbyB0aGF0CisgICAgICogdGhlIGxvZ2ljIHNldHRpbmcgdGItPnNpemUgYmVs b3cgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCisgICAgICovCisgICAgY3R4LT5iYXNlLnBjX25leHQg Kz0gNDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitzdGF0aWMgdm9pZCBoZXhhZ29uX3RyX3Ry YW5zbGF0ZV9wYWNrZXQoRGlzYXNDb250ZXh0QmFzZSAqZGNiYXNlLCBDUFVTdGF0ZSAqY3B1KQor eworICAgIERpc2FzQ29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGRjYmFzZSwgRGlzYXNDb250 ZXh0LCBiYXNlKTsKKyAgICBDUFVIZXhhZ29uU3RhdGUgKmVudiA9IGNwdS0+ZW52X3B0cjsKKwor ICAgIGRlY29kZV9hbmRfdHJhbnNsYXRlX3BhY2tldChlbnYsIGN0eCk7CisKKyAgICBpZiAoY3R4 LT5iYXNlLmlzX2ptcCA9PSBESVNBU19ORVhUKSB7CisgICAgICAgIHRhcmdldF91bG9uZyBwYWdl X3N0YXJ0OworCisgICAgICAgIHBhZ2Vfc3RhcnQgPSBjdHgtPmJhc2UucGNfZmlyc3QgJiBUQVJH RVRfUEFHRV9NQVNLOworICAgICAgICBpZiAoY3R4LT5iYXNlLnBjX25leHQgLSBwYWdlX3N0YXJ0 ID49IFRBUkdFVF9QQUdFX1NJWkUpIHsKKyAgICAgICAgICAgIGN0eC0+YmFzZS5pc19qbXAgPSBE SVNBU19UT09fTUFOWTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSBD UFUgbG9nIGlzIHVzZWQgdG8gY29tcGFyZSBhZ2FpbnN0IExMREIgc2luZ2xlIHN0ZXBwaW5nLAor ICAgICAgICAgKiBzbyBlbmQgdGhlIFRMQiBhZnRlciBldmVyeSBwYWNrZXQuCisgICAgICAgICAq LworICAgICAgICBpZiAocWVtdV9sb2dsZXZlbF9tYXNrKENQVV9MT0dfVEJfQ1BVKSkgeworICAg ICAgICAgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX1RPT19NQU5ZOworICAgICAgICB9Cisj aWYgSEVYX0RFQlVHCisgICAgICAgIC8qIFdoZW4gZGVidWdnaW5nLCBvbmx5IHB1dCBvbmUgcGFj a2V0IHBlciBUQiAqLworICAgICAgICBjdHgtPmJhc2UuaXNfam1wID0gRElTQVNfVE9PX01BTlk7 CisjZW5kaWYKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fdHJfdGJfc3RvcChEaXNh c0NvbnRleHRCYXNlICpkY2Jhc2UsIENQVVN0YXRlICpjcHUpCit7CisgICAgRGlzYXNDb250ZXh0 ICpjdHggPSBjb250YWluZXJfb2YoZGNiYXNlLCBEaXNhc0NvbnRleHQsIGJhc2UpOworCisgICAg c3dpdGNoIChjdHgtPmJhc2UuaXNfam1wKSB7CisgICAgY2FzZSBESVNBU19UT09fTUFOWToKKyAg ICAgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF9ncHJbSEVYX1JFR19QQ10sIGN0eC0+YmFzZS5wY19u ZXh0KTsKKyAgICAgICAgaWYgKGN0eC0+YmFzZS5zaW5nbGVzdGVwX2VuYWJsZWQpIHsKKyAgICAg ICAgICAgIGdlbl9leGNlcHRpb25fZGVidWcoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHRjZ19nZW5fZXhpdF90YihOVUxMLCAwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK KyAgICBjYXNlIERJU0FTX05PUkVUVVJOOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg aGV4YWdvbl90cl9kaXNhc19sb2coY29uc3QgRGlzYXNDb250ZXh0QmFzZSAqZGNiYXNlLCBDUFVT dGF0ZSAqY3B1KQoreworICAgIHFlbXVfbG9nKCJJTjogJXNcbiIsIGxvb2t1cF9zeW1ib2woZGNi YXNlLT5wY19maXJzdCkpOworICAgIGxvZ190YXJnZXRfZGlzYXMoY3B1LCBkY2Jhc2UtPnBjX2Zp cnN0LCBkY2Jhc2UtPnRiLT5zaXplKTsKK30KKworCitzdGF0aWMgY29uc3QgVHJhbnNsYXRvck9w cyBoZXhhZ29uX3RyX29wcyA9IHsKKyAgICAuaW5pdF9kaXNhc19jb250ZXh0ID0gaGV4YWdvbl90 cl9pbml0X2Rpc2FzX2NvbnRleHQsCisgICAgLnRiX3N0YXJ0ICAgICAgICAgICA9IGhleGFnb25f dHJfdGJfc3RhcnQsCisgICAgLmluc25fc3RhcnQgICAgICAgICA9IGhleGFnb25fdHJfaW5zbl9z dGFydCwKKyAgICAuYnJlYWtwb2ludF9jaGVjayAgID0gaGV4YWdvbl90cl9icmVha3BvaW50X2No ZWNrLAorICAgIC50cmFuc2xhdGVfaW5zbiAgICAgPSBoZXhhZ29uX3RyX3RyYW5zbGF0ZV9wYWNr ZXQsCisgICAgLnRiX3N0b3AgICAgICAgICAgICA9IGhleGFnb25fdHJfdGJfc3RvcCwKKyAgICAu ZGlzYXNfbG9nICAgICAgICAgID0gaGV4YWdvbl90cl9kaXNhc19sb2csCit9OworCit2b2lkIGdl bl9pbnRlcm1lZGlhdGVfY29kZShDUFVTdGF0ZSAqY3MsIFRyYW5zbGF0aW9uQmxvY2sgKnRiLCBp bnQgbWF4X2luc25zKQoreworICAgIERpc2FzQ29udGV4dCBjdHg7CisKKyAgICB0cmFuc2xhdG9y X2xvb3AoJmhleGFnb25fdHJfb3BzLCAmY3R4LmJhc2UsIGNzLCB0YiwgbWF4X2luc25zKTsKK30K KworI2RlZmluZSBOQU1FX0xFTiAgICAgICAgICAgICAgIDY0CitzdGF0aWMgY2hhciBuZXdfdmFs dWVfbmFtZXNbVE9UQUxfUEVSX1RIUkVBRF9SRUdTXVtOQU1FX0xFTl07CisjaWYgSEVYX0RFQlVH CitzdGF0aWMgY2hhciByZWdfd3JpdHRlbl9uYW1lc1tUT1RBTF9QRVJfVEhSRUFEX1JFR1NdW05B TUVfTEVOXTsKKyNlbmRpZgorc3RhdGljIGNoYXIgbmV3X3ByZWRfdmFsdWVfbmFtZXNbTlVNX1BS RUdTXVtOQU1FX0xFTl07CitzdGF0aWMgY2hhciBzdG9yZV9hZGRyX25hbWVzW1NUT1JFU19NQVhd W05BTUVfTEVOXTsKK3N0YXRpYyBjaGFyIHN0b3JlX3dpZHRoX25hbWVzW1NUT1JFU19NQVhdW05B TUVfTEVOXTsKK3N0YXRpYyBjaGFyIHN0b3JlX3ZhbDMyX25hbWVzW1NUT1JFU19NQVhdW05BTUVf TEVOXTsKK3N0YXRpYyBjaGFyIHN0b3JlX3ZhbDY0X25hbWVzW1NUT1JFU19NQVhdW05BTUVfTEVO XTsKKwordm9pZCBoZXhhZ29uX3RyYW5zbGF0ZV9pbml0KHZvaWQpCit7CisgICAgaW50IGk7CisK KyAgICBvcGNvZGVfaW5pdCgpOworCisgICAgZm9yIChpID0gMDsgaSA8IFRPVEFMX1BFUl9USFJF QURfUkVHUzsgaSsrKSB7CisgICAgICAgIGhleF9ncHJbaV0gPSB0Y2dfZ2xvYmFsX21lbV9uZXco Y3B1X2VudiwKKyAgICAgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgZ3ByW2ldKSwK KyAgICAgICAgICAgIGhleGFnb25fcmVnbmFtZXNbaV0pOworCisgICAgICAgIHNucHJpbnRmKG5l d192YWx1ZV9uYW1lc1tpXSwgTkFNRV9MRU4sICJuZXdfJXMiLCBoZXhhZ29uX3JlZ25hbWVzW2ld KTsKKyAgICAgICAgaGV4X25ld192YWx1ZVtpXSA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52 LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBuZXdfdmFsdWVbaV0pLAor ICAgICAgICAgICAgbmV3X3ZhbHVlX25hbWVzW2ldKTsKKworI2lmIEhFWF9ERUJVRworICAgICAg ICBzbnByaW50ZihyZWdfd3JpdHRlbl9uYW1lc1tpXSwgTkFNRV9MRU4sICJyZWdfd3JpdHRlbl8l cyIsCisgICAgICAgICAgICAgICAgIGhleGFnb25fcmVnbmFtZXNbaV0pOworICAgICAgICBoZXhf cmVnX3dyaXR0ZW5baV0gPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgICAg IG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgcmVnX3dyaXR0ZW5baV0pLAorICAgICAgICAgICAg cmVnX3dyaXR0ZW5fbmFtZXNbaV0pOworI2VuZGlmCisgICAgfQorICAgIGZvciAoaSA9IDA7IGkg PCBOVU1fUFJFR1M7IGkrKykgeworICAgICAgICBoZXhfcHJlZFtpXSA9IHRjZ19nbG9iYWxfbWVt X25ldyhjcHVfZW52LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBwcmVk W2ldKSwKKyAgICAgICAgICAgIGhleGFnb25fcHJlZG5hbWVzW2ldKTsKKworICAgICAgICBzbnBy aW50ZihuZXdfcHJlZF92YWx1ZV9uYW1lc1tpXSwgTkFNRV9MRU4sICJuZXdfcHJlZF8lcyIsCisg ICAgICAgICAgICAgICAgIGhleGFnb25fcHJlZG5hbWVzW2ldKTsKKyAgICAgICAgaGV4X25ld19w cmVkX3ZhbHVlW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgICAgICBv ZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIG5ld19wcmVkX3ZhbHVlW2ldKSwKKyAgICAgICAgICAg IG5ld19wcmVkX3ZhbHVlX25hbWVzW2ldKTsKKyAgICB9CisgICAgaGV4X3ByZWRfd3JpdHRlbiA9 IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29u U3RhdGUsIHByZWRfd3JpdHRlbiksICJwcmVkX3dyaXR0ZW4iKTsKKyAgICBoZXhfbmV4dF9QQyA9 IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29u U3RhdGUsIG5leHRfUEMpLCAibmV4dF9QQyIpOworICAgIGhleF90aGlzX1BDID0gdGNnX2dsb2Jh bF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgdGhp c19QQyksICJ0aGlzX1BDIik7CisgICAgaGV4X3Nsb3RfY2FuY2VsbGVkID0gdGNnX2dsb2JhbF9t ZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgc2xvdF9j YW5jZWxsZWQpLCAic2xvdF9jYW5jZWxsZWQiKTsKKyAgICBoZXhfYnJhbmNoX3Rha2VuID0gdGNn X2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0 ZSwgYnJhbmNoX3Rha2VuKSwgImJyYW5jaF90YWtlbiIpOworICAgIGhleF9wa3RfaGFzX3N0b3Jl X3MxID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9mKENQVUhl eGFnb25TdGF0ZSwgcGt0X2hhc19zdG9yZV9zMSksICJwa3RfaGFzX3N0b3JlX3MxIik7CisgICAg aGV4X2RjemVyb19hZGRyID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9m ZnNldG9mKENQVUhleGFnb25TdGF0ZSwgZGN6ZXJvX2FkZHIpLCAiZGN6ZXJvX2FkZHIiKTsKKyAg ICBoZXhfbGxzY19hZGRyID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9m ZnNldG9mKENQVUhleGFnb25TdGF0ZSwgbGxzY19hZGRyKSwgImxsc2NfYWRkciIpOworICAgIGhl eF9sbHNjX3ZhbCA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICBvZmZzZXRv ZihDUFVIZXhhZ29uU3RhdGUsIGxsc2NfdmFsKSwgImxsc2NfdmFsIik7CisgICAgaGV4X2xsc2Nf dmFsX2k2NCA9IHRjZ19nbG9iYWxfbWVtX25ld19pNjQoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0 b2YoQ1BVSGV4YWdvblN0YXRlLCBsbHNjX3ZhbF9pNjQpLCAibGxzY192YWxfaTY0Iik7CisgICAg Zm9yIChpID0gMDsgaSA8IFNUT1JFU19NQVg7IGkrKykgeworICAgICAgICBzbnByaW50ZihzdG9y ZV9hZGRyX25hbWVzW2ldLCBOQU1FX0xFTiwgInN0b3JlX2FkZHJfJWQiLCBpKTsKKyAgICAgICAg aGV4X3N0b3JlX2FkZHJbaV0gPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAg ICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgbWVtX2xvZ19zdG9yZXNbaV0udmEpLAorICAg ICAgICAgICAgc3RvcmVfYWRkcl9uYW1lc1tpXSk7CisKKyAgICAgICAgc25wcmludGYoc3RvcmVf d2lkdGhfbmFtZXNbaV0sIE5BTUVfTEVOLCAic3RvcmVfd2lkdGhfJWQiLCBpKTsKKyAgICAgICAg aGV4X3N0b3JlX3dpZHRoW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAg ICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIG1lbV9sb2dfc3RvcmVzW2ldLndpZHRoKSwK KyAgICAgICAgICAgIHN0b3JlX3dpZHRoX25hbWVzW2ldKTsKKworICAgICAgICBzbnByaW50Zihz dG9yZV92YWwzMl9uYW1lc1tpXSwgTkFNRV9MRU4sICJzdG9yZV92YWwzMl8lZCIsIGkpOworICAg ICAgICBoZXhfc3RvcmVfdmFsMzJbaV0gPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAg ICAgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgbWVtX2xvZ19zdG9yZXNbaV0uZGF0 YTMyKSwKKyAgICAgICAgICAgIHN0b3JlX3ZhbDMyX25hbWVzW2ldKTsKKworICAgICAgICBzbnBy aW50ZihzdG9yZV92YWw2NF9uYW1lc1tpXSwgTkFNRV9MRU4sICJzdG9yZV92YWw2NF8lZCIsIGkp OworICAgICAgICBoZXhfc3RvcmVfdmFsNjRbaV0gPSB0Y2dfZ2xvYmFsX21lbV9uZXdfaTY0KGNw dV9lbnYsCisgICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIG1lbV9sb2dfc3Rv cmVzW2ldLmRhdGE2NCksCisgICAgICAgICAgICBzdG9yZV92YWw2NF9uYW1lc1tpXSk7CisgICAg fQorCisgICAgaW5pdF9nZW5wdHIoKTsKK30KLS0gCjIuNy40Cgo=