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.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, 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 DE037C3F2CD for ; Fri, 28 Feb 2020 17:31:20 +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 9BFFF24699 for ; Fri, 28 Feb 2020 17:31:20 +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="wXGxpvOu" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9BFFF24699 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]:51412 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7jTr-0002pF-Mf for qemu-devel@archiver.kernel.org; Fri, 28 Feb 2020 12:31:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58145) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7ilL-0004JK-Qr for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:45:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7ilJ-0006Qq-QN for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:45:19 -0500 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:27049) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j7ilJ-0005V5-Az for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:45:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1582908317; x=1614444317; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=rnfObRLyN7fHIjMEd1r4pmNjDobjdLU2Nomjtp6lJEA=; b=wXGxpvOu9CF/35SIKYbbMCChT5a/jwED+blhS9eMcPW/bugUygOHpCR6 PypFonEu8XqzPOOEzfJcxZN4vnhqq7q9OvkjJ1oz+MiHNYKN4bes2sajU OnL8GKnEMsbqor1jfNp8GEcFeenN9yNfLbnHML7iBYXQX2ykwuadz1Y0n s=; Received: from unknown (HELO ironmsg01-sd.qualcomm.com) ([10.53.140.141]) by alexa-out-sd-02.qualcomm.com with ESMTP; 28 Feb 2020 08:44:32 -0800 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg01-sd.qualcomm.com with ESMTP; 28 Feb 2020 08:44:31 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 1A74C11AF; Fri, 28 Feb 2020 10:44:31 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 38/67] Hexagon TCG generation helpers - step 5 Date: Fri, 28 Feb 2020 10:43:34 -0600 Message-Id: <1582908244-304-39-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1582908244-304-1-git-send-email-tsimpson@quicinc.com> References: <1582908244-304-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 199.106.114.39 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: riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, Taylor Simpson , philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" SGVscGVycyBmb3IgaW5zdHJ1Y3Rpb25zIG92ZXJyaWRlbiBmb3Igb3B0aW1pemF0aW9uCgpTaWdu ZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25AcXVpY2luYy5jb20+Ci0tLQogdGFy Z2V0L2hleGFnb24vZ2VucHRyX2hlbHBlcnMuaCB8IDMxNCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMzE0IGluc2VydGlvbnMoKykKCmRp ZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9nZW5wdHJfaGVscGVycy5oIGIvdGFyZ2V0L2hleGFn b24vZ2VucHRyX2hlbHBlcnMuaAppbmRleCA5OTE3ZDcyLi5lMzQyZjI5IDEwMDY0NAotLS0gYS90 YXJnZXQvaGV4YWdvbi9nZW5wdHJfaGVscGVycy5oCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbnB0 cl9oZWxwZXJzLmgKQEAgLTUzMCw0ICs1MzAsMzE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5f Y29uZF9yZXR1cm4oVENHdiBwcmVkLCBUQ0d2IGFkZHIpCiAgICAgdGNnX3RlbXBfZnJlZSh6ZXJv KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGdlbl9sb29wMHIoVENHdiBSc1YsIGludCByaVYs IGluc25fdCAqaW5zbikKK3sKKyAgICBUQ0d2IHRtcCA9IHRjZ190ZW1wX25ldygpOworICAgIGZJ TU1FWFQocmlWKTsKKyAgICBmUENBTElHTihyaVYpOworICAgIC8qIGZXUklURV9MT09QX1JFR1Mw KCBmUkVBRF9QQygpK3JpViwgUnNWKTsgKi8KKyAgICB0Y2dfZ2VuX2FkZGlfdGwodG1wLCBoZXhf Z3ByW0hFWF9SRUdfUENdLCByaVYpOworICAgIGdlbl9sb2dfcmVnX3dyaXRlKEhFWF9SRUdfTEMw LCBSc1YsIGluc24tPnNsb3QsIDApOworICAgIGdlbl9sb2dfcmVnX3dyaXRlKEhFWF9SRUdfU0Ew LCB0bXAsIGluc24tPnNsb3QsIDApOworICAgIGZTRVRfTFBDRkcoMCk7CisgICAgdGNnX3RlbXBf ZnJlZSh0bXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX2xvb3AxcihUQ0d2IFJzViwg aW50IHJpViwgaW5zbl90ICppbnNuKQoreworICAgIFRDR3YgdG1wID0gdGNnX3RlbXBfbmV3KCk7 CisgICAgZklNTUVYVChyaVYpOworICAgIGZQQ0FMSUdOKHJpVik7CisgICAgLyogZldSSVRFX0xP T1BfUkVHUzEoIGZSRUFEX1BDKCkrcmlWLCBSc1YpOyAqLworICAgIHRjZ19nZW5fYWRkaV90bCh0 bXAsIGhleF9ncHJbSEVYX1JFR19QQ10sIHJpVik7CisgICAgZ2VuX2xvZ19yZWdfd3JpdGUoSEVY X1JFR19MQzEsIFJzViwgaW5zbi0+c2xvdCwgMCk7CisgICAgZ2VuX2xvZ19yZWdfd3JpdGUoSEVY X1JFR19TQTEsIHRtcCwgaW5zbi0+c2xvdCwgMCk7CisgICAgdGNnX3RlbXBfZnJlZSh0bXApOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX2NvbXBhcmUoVENHQ29uZCBjb25kLCBUQ0d2IHJl cywgVENHdiBhcmcxLCBUQ0d2IGFyZzIpCit7CisgICAgVENHdiBvbmUgPSB0Y2dfY29uc3RfdGwo MHhmZik7CisgICAgVENHdiB6ZXJvID0gdGNnX2NvbnN0X3RsKDApOworCisgICAgdGNnX2dlbl9t b3Zjb25kX3RsKGNvbmQsIHJlcywgYXJnMSwgYXJnMiwgb25lLCB6ZXJvKTsKKworICAgIHRjZ190 ZW1wX2ZyZWUob25lKTsKKyAgICB0Y2dfdGVtcF9mcmVlKHplcm8pOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgZ2VuX2NvbXBhcmVpKFRDR0NvbmQgY29uZCwgVENHdiByZXMsIFRDR3YgYXJnMSwg aW50IGFyZzIpCit7CisgICAgVENHdiB0bXAgPSB0Y2dfY29uc3RfdGwoYXJnMik7CisgICAgZ2Vu X2NvbXBhcmUoY29uZCwgcmVzLCBhcmcxLCB0bXApOworICAgIHRjZ190ZW1wX2ZyZWUodG1wKTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbl9jb21wYXJlX2k2NChUQ0dDb25kIGNvbmQsIFRD R3YgcmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0d2X2k2NCBhcmcx LCBUQ0d2X2k2NCBhcmcyKQoreworICAgIFRDR3ZfaTY0IG9uZSA9IHRjZ19jb25zdF9pNjQoMHhm Zik7CisgICAgVENHdl9pNjQgemVybyA9IHRjZ19jb25zdF9pNjQoMCk7CisgICAgVENHdl9pNjQg dGVtcCA9IHRjZ190ZW1wX25ld19pNjQoKTsKKworICAgIHRjZ19nZW5fbW92Y29uZF9pNjQoY29u ZCwgdGVtcCwgYXJnMSwgYXJnMiwgb25lLCB6ZXJvKTsKKyAgICB0Y2dfZ2VuX2V4dHJsX2k2NF9p MzIocmVzLCB0ZW1wKTsKKyAgICB0Y2dfZ2VuX2FuZGlfdGwocmVzLCByZXMsIDB4ZmYpOworCisg ICAgdGNnX3RlbXBfZnJlZV9pNjQob25lKTsKKyAgICB0Y2dfdGVtcF9mcmVlX2k2NCh6ZXJvKTsK KyAgICB0Y2dfdGVtcF9mcmVlX2k2NCh0ZW1wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdl bl9jbXBuZF9jbXBfam1wKGludCBwbnVtLCBUQ0dDb25kIGNvbmQsIGJvb2wgc2Vuc2UsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENHdiBhcmcxLCBUQ0d2IGFyZzIsIGlu dCBwY19vZmYpCit7CisgICAgVENHdiBuZXdfcGMgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICBUQ0d2 IHByZWQgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICBUQ0d2IHplcm8gPSB0Y2dfY29uc3RfdGwoMCk7 CisgICAgVENHdiBvbmUgPSB0Y2dfY29uc3RfdGwoMSk7CisKKyAgICB0Y2dfZ2VuX2FkZGlfdGwo bmV3X3BjLCBoZXhfZ3ByW0hFWF9SRUdfUENdLCBwY19vZmYpOworICAgIGdlbl9jb21wYXJlKGNv bmQsIHByZWQsIGFyZzEsIGFyZzIpOworICAgIGdlbl9sb2dfcHJlZF93cml0ZShwbnVtLCBwcmVk KTsKKyAgICBpZiAoIXNlbnNlKSB7CisgICAgICAgIHRjZ19nZW5feG9yaV90bChwcmVkLCBwcmVk LCAweGZmKTsKKyAgICB9CisKKyAgICAvKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYnJhbmNoZXMg aW4gYSBwYWNrZXQsIGlnbm9yZSB0aGUgc2Vjb25kIG9uZSAqLworICAgIHRjZ19nZW5fbW92Y29u ZF90bChUQ0dfQ09ORF9ORSwgcHJlZCwgaGV4X2JyYW5jaF90YWtlbiwgemVybywgemVybywgcHJl ZCk7CisKKyAgICB0Y2dfZ2VuX21vdmNvbmRfdGwoVENHX0NPTkRfTkUsIGhleF9uZXh0X1BDLCBw cmVkLCB6ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGMsIGhleF9uZXh0X1BDKTsK KyAgICB0Y2dfZ2VuX21vdmNvbmRfdGwoVENHX0NPTkRfTkUsIGhleF9icmFuY2hfdGFrZW4sIHBy ZWQsIHplcm8sCisgICAgICAgICAgICAgICAgICAgICAgIG9uZSwgaGV4X2JyYW5jaF90YWtlbik7 CisKKyAgICB0Y2dfdGVtcF9mcmVlKG5ld19wYyk7CisgICAgdGNnX3RlbXBfZnJlZShwcmVkKTsK KyAgICB0Y2dfdGVtcF9mcmVlKHplcm8pOworICAgIHRjZ190ZW1wX2ZyZWUob25lKTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIGdlbl9jbXBuZF9jbXBpX2ptcChpbnQgcG51bSwgVENHQ29uZCBj b25kLCBib29sIHNlbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU Q0d2IGFyZzEsIGludCBhcmcyLCBpbnQgcGNfb2ZmKQoreworICAgIFRDR3YgdG1wID0gdGNnX2Nv bnN0X3RsKGFyZzIpOworICAgIGdlbl9jbXBuZF9jbXBfam1wKHBudW0sIGNvbmQsIHNlbnNlLCBh cmcxLCB0bXAsIHBjX29mZik7CisgICAgdGNnX3RlbXBfZnJlZSh0bXApOworCit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBnZW5fY21wbmRfY21wX24xX2ptcChpbnQgcG51bSwgVENHQ29uZCBjb25k LCBib29sIHNlbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRD R3YgYXJnLCBpbnQgcGNfb2ZmKQoreworICAgIGdlbl9jbXBuZF9jbXBpX2ptcChwbnVtLCBjb25k LCBzZW5zZSwgYXJnLCAtMSwgcGNfb2ZmKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgZ2Vu X2p1bXAoaW50IHBjX29mZikKK3sKKyAgICBUQ0d2IG5ld19wYyA9IHRjZ190ZW1wX25ldygpOwor ICAgIHRjZ19nZW5fYWRkaV90bChuZXdfcGMsIGhleF9ncHJbSEVYX1JFR19QQ10sIHBjX29mZik7 CisgICAgZ2VuX3dyaXRlX25ld19wYyhuZXdfcGMpOworICAgIHRjZ190ZW1wX2ZyZWUobmV3X3Bj KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbl9jb25kX2p1bXByKFRDR3YgcHJlZCwgVENH diBkc3RfcGMpCit7CisgICAgVENHdiB6ZXJvID0gdGNnX2NvbnN0X3RsKDApOworICAgIFRDR3Yg b25lID0gdGNnX2NvbnN0X3RsKDEpOworICAgIFRDR3YgbmV3X3BjID0gdGNnX3RlbXBfbmV3KCk7 CisKKyAgICB0Y2dfZ2VuX21vdmNvbmRfdGwoVENHX0NPTkRfRVEsIG5ld19wYywgcHJlZCwgemVy bywgaGV4X25leHRfUEMsIGRzdF9wYyk7CisKKyAgICAvKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUg anVtcHMgaW4gYSBwYWNrZXQsIG9ubHkgdGhlIGZpcnN0IG9uZSBpcyB0YWtlbiAqLworICAgIHRj Z19nZW5fbW92Y29uZF90bChUQ0dfQ09ORF9ORSwgaGV4X25leHRfUEMsIGhleF9icmFuY2hfdGFr ZW4sIHplcm8sCisgICAgICAgICAgICAgICAgICAgICAgIGhleF9uZXh0X1BDLCBuZXdfcGMpOwor ICAgIHRjZ19nZW5fbW92Y29uZF90bChUQ0dfQ09ORF9FUSwgaGV4X2JyYW5jaF90YWtlbiwgcHJl ZCwgemVybywKKyAgICAgICAgICAgICAgICAgICAgICAgaGV4X2JyYW5jaF90YWtlbiwgb25lKTsK KworICAgIHRjZ190ZW1wX2ZyZWUoemVybyk7CisgICAgdGNnX3RlbXBfZnJlZShvbmUpOworICAg IHRjZ190ZW1wX2ZyZWUobmV3X3BjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbl9jb25k X2p1bXAoVENHdiBwcmVkLCBpbnQgcGNfb2ZmKQoreworICAgIFRDR3YgbmV3X3BjID0gdGNnX3Rl bXBfbmV3KCk7CisKKyAgICB0Y2dfZ2VuX2FkZGlfdGwobmV3X3BjLCBoZXhfZ3ByW0hFWF9SRUdf UENdLCBwY19vZmYpOworICAgIGdlbl9jb25kX2p1bXByKHByZWQsIG5ld19wYyk7CisKKyAgICB0 Y2dfdGVtcF9mcmVlKG5ld19wYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5fY2FsbChp bnQgcGNfb2ZmKQoreworICAgIGdlbl9sb2dfcmVnX3dyaXRlKEhFWF9SRUdfTFIsIGhleF9uZXh0 X1BDLCA0LCBmYWxzZSk7CisgICAgZ2VuX2p1bXAocGNfb2ZmKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGdlbl9jYWxscihUQ0d2IG5ld19wYykKK3sKKyAgICBnZW5fbG9nX3JlZ193cml0ZShI RVhfUkVHX0xSLCBoZXhfbmV4dF9QQywgNCwgZmFsc2UpOworICAgIGdlbl93cml0ZV9uZXdfcGMo bmV3X3BjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbl9lbmRsb29wMCh2b2lkKQorewor ICAgIFRDR3YgbHBjZmcgPSB0Y2dfdGVtcF9sb2NhbF9uZXcoKTsKKworICAgIEdFVF9VU1JfRklF TEQoVVNSX0xQQ0ZHLCBscGNmZyk7CisKKyAgICAvKgorICAgICAqICAgIGlmIChscGNmZyA9PSAx KSB7CisgICAgICogICAgICAgIGhleF9uZXdfcHJlZF92YWx1ZVszXSA9IDB4ZmY7CisgICAgICog ICAgICAgIGhleF9wcmVkX3dyaXR0ZW4gfD0gMSA8PCAzOworICAgICAqICAgIH0KKyAgICAgKi8K KyAgICBUQ0dMYWJlbCAqbGFiZWwxID0gZ2VuX25ld19sYWJlbCgpOworICAgIHRjZ19nZW5fYnJj b25kaV90bChUQ0dfQ09ORF9ORSwgbHBjZmcsIDEsIGxhYmVsMSk7CisgICAgeworICAgICAgICB0 Y2dfZ2VuX21vdmlfdGwoaGV4X25ld19wcmVkX3ZhbHVlWzNdLCAweGZmKTsKKyAgICAgICAgdGNn X2dlbl9vcmlfdGwoaGV4X3ByZWRfd3JpdHRlbiwgaGV4X3ByZWRfd3JpdHRlbiwgMSA8PCAzKTsK KyAgICB9CisgICAgZ2VuX3NldF9sYWJlbChsYWJlbDEpOworCisgICAgLyoKKyAgICAgKiAgICBp ZiAobHBjZmcpIHsKKyAgICAgKiAgICAgICAgU0VUX1VTUl9GSUVMRChVU1JfTFBDRkcsIGxwY2Zn IC0gMSk7CisgICAgICogICAgfQorICAgICAqLworICAgIFRDR0xhYmVsICpsYWJlbDIgPSBnZW5f bmV3X2xhYmVsKCk7CisgICAgdGNnX2dlbl9icmNvbmRpX3RsKFRDR19DT05EX0VRLCBscGNmZywg MCwgbGFiZWwyKTsKKyAgICB7CisgICAgICAgIHRjZ19nZW5fc3ViaV90bChscGNmZywgbHBjZmcs IDEpOworICAgICAgICBTRVRfVVNSX0ZJRUxEKFVTUl9MUENGRywgbHBjZmcpOworICAgIH0KKyAg ICBnZW5fc2V0X2xhYmVsKGxhYmVsMik7CisKKyAgICAvKgorICAgICAqICAgIGlmIChoZXhfZ3By W0hFWF9SRUdfTEMwXSA+IDEpIHsKKyAgICAgKiAgICAgICAgaGV4X25leHRfUEMgPSBoZXhfZ3By W0hFWF9SRUdfU0EwXTsKKyAgICAgKiAgICAgICAgaGV4X2JyYW5jaF90YWtlbiA9IDE7CisgICAg ICogICAgICAgIGhleF9ncHJbSEVYX1JFR19MQzBdID0gaGV4X2dwcltIRVhfUkVHX0xDMF0gLSAx OworICAgICAqICAgIH0KKyAgICAgKi8KKyAgICBUQ0dMYWJlbCAqbGFiZWwzID0gZ2VuX25ld19s YWJlbCgpOworICAgIHRjZ19nZW5fYnJjb25kaV90bChUQ0dfQ09ORF9MRVUsIGhleF9ncHJbSEVY X1JFR19MQzBdLCAxLCBsYWJlbDMpOworICAgIHsKKyAgICAgICAgdGNnX2dlbl9tb3ZfdGwoaGV4 X25leHRfUEMsIGhleF9ncHJbSEVYX1JFR19TQTBdKTsKKyAgICAgICAgdGNnX2dlbl9tb3ZpX3Rs KGhleF9icmFuY2hfdGFrZW4sIDEpOworICAgICAgICBUQ0d2IGxjMCA9IHRjZ190ZW1wX2xvY2Fs X25ldygpOworICAgICAgICB0Y2dfZ2VuX21vdl90bChsYzAsIGhleF9ncHJbSEVYX1JFR19MQzBd KTsKKyAgICAgICAgdGNnX2dlbl9zdWJpX3RsKGxjMCwgbGMwLCAxKTsKKyAgICAgICAgdGNnX2dl bl9tb3ZfdGwoaGV4X25ld192YWx1ZVtIRVhfUkVHX0xDMF0sIGxjMCk7CisgICAgICAgIHRjZ190 ZW1wX2ZyZWUobGMwKTsKKyAgICB9CisgICAgZ2VuX3NldF9sYWJlbChsYWJlbDMpOworCisgICAg dGNnX3RlbXBfZnJlZShscGNmZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5fZW5kbG9v cDEodm9pZCkKK3sKKyAgICAvKgorICAgICAqICAgIGlmIChoZXhfZ3ByW0hFWF9SRUdfTEMxXSA+ IDEpIHsKKyAgICAgKiAgICAgICAgaGV4X25leHRfUEMgPSBoZXhfZ3ByW0hFWF9SRUdfU0ExXTsK KyAgICAgKiAgICAgICAgaGV4X2JyYW5jaF90YWtlbiA9IDE7CisgICAgICogICAgICAgIGhleF9n cHJbSEVYX1JFR19MQzFdID0gaGV4X2dwcltIRVhfUkVHX0xDMV0gLSAxOworICAgICAqICAgIH0K KyAgICAgKi8KKyAgICBUQ0dMYWJlbCAqbGFiZWwgPSBnZW5fbmV3X2xhYmVsKCk7CisgICAgdGNn X2dlbl9icmNvbmRpX3RsKFRDR19DT05EX0xFVSwgaGV4X2dwcltIRVhfUkVHX0xDMV0sIDEsIGxh YmVsKTsKKyAgICB7CisgICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9uZXh0X1BDLCBoZXhfZ3By W0hFWF9SRUdfU0ExXSk7CisgICAgICAgIHRjZ19nZW5fbW92aV90bChoZXhfYnJhbmNoX3Rha2Vu LCAxKTsKKyAgICAgICAgVENHdiBsYzEgPSB0Y2dfdGVtcF9sb2NhbF9uZXcoKTsKKyAgICAgICAg dGNnX2dlbl9tb3ZfdGwobGMxLCBoZXhfZ3ByW0hFWF9SRUdfTEMxXSk7CisgICAgICAgIHRjZ19n ZW5fc3ViaV90bChsYzEsIGxjMSwgMSk7CisgICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9uZXdf dmFsdWVbSEVYX1JFR19MQzFdLCBsYzEpOworICAgICAgICB0Y2dfdGVtcF9mcmVlKGxjMSk7Cisg ICAgfQorICAgIGdlbl9zZXRfbGFiZWwobGFiZWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg Z2VuX2FzaGlmdHJfNF80cyhUQ0d2IGRzdCwgVENHdiBzcmMsIGludDMyX3Qgc2hpZnRfYW10KQor eworICAgIHRjZ19nZW5fc2FyaV90bChkc3QsIHNyYywgc2hpZnRfYW10KTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIGdlbl9hc2hpZnRsXzRfNHMoVENHdiBkc3QsIFRDR3Ygc3JjLCBpbnQzMl90 IHNoaWZ0X2FtdCkKK3sKKyAgICBpZiAoc2hpZnRfYW10ID49IDY0KSB7CisgICAgICAgIHRjZ19n ZW5fbW92aV90bChkc3QsIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIHRjZ19nZW5fc2hsaV90 bChkc3QsIHNyYywgc2hpZnRfYW10KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBn ZW5fY21wX2p1bXBudihUQ0dDb25kIGNvbmQsIGludCBybnVtLCBUQ0d2IHNyYywgaW50IHBjX29m ZikKK3sKKyAgICBUQ0d2IHByZWQgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICB0Y2dfZ2VuX3NldGNv bmRfdGwoY29uZCwgcHJlZCwgaGV4X25ld192YWx1ZVtybnVtXSwgc3JjKTsKKyAgICBnZW5fY29u ZF9qdW1wKHByZWQsIHBjX29mZik7CisgICAgdGNnX3RlbXBfZnJlZShwcmVkKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIGdlbl9jbXBpX2p1bXBudihUQ0dDb25kIGNvbmQsIGludCBybnVtLCBp bnQgc3JjLCBpbnQgcGNfb2ZmKQoreworICAgIFRDR3YgcHJlZCA9IHRjZ190ZW1wX25ldygpOwor ICAgIHRjZ19nZW5fc2V0Y29uZGlfdGwoY29uZCwgcHJlZCwgaGV4X25ld192YWx1ZVtybnVtXSwg c3JjKTsKKyAgICBnZW5fY29uZF9qdW1wKHByZWQsIHBjX29mZik7CisgICAgdGNnX3RlbXBfZnJl ZShwcmVkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbl9hc2xfcl9yX29yKFRDR3YgUnhW LCBUQ0d2IFJzViwgVENHdiBSdFYpCit7CisgICAgVENHdiB6ZXJvID0gdGNnX2NvbnN0X3RsKDAp OworICAgIFRDR3Ygc2hpZnRfYW10ID0gdGNnX3RlbXBfbmV3KCk7CisgICAgVENHdl9pNjQgc2hp ZnRfYW10X2k2NCA9IHRjZ190ZW1wX25ld19pNjQoKTsKKyAgICBUQ0d2X2k2NCBzaGlmdF9sZWZ0 X3ZhbF9pNjQgPSB0Y2dfdGVtcF9uZXdfaTY0KCk7CisgICAgVENHdiBzaGlmdF9sZWZ0X3ZhbCA9 IHRjZ190ZW1wX25ldygpOworICAgIFRDR3ZfaTY0IHNoaWZ0X3JpZ2h0X3ZhbF9pNjQgPSB0Y2df dGVtcF9uZXdfaTY0KCk7CisgICAgVENHdiBzaGlmdF9yaWdodF92YWwgPSB0Y2dfdGVtcF9uZXco KTsKKyAgICBUQ0d2IG9yX3ZhbCA9IHRjZ190ZW1wX25ldygpOworCisgICAgLyogU2lnbiBleHRl bmQgNy0+MzIgYml0cyAqLworICAgIHRjZ19nZW5fc2hsaV90bChzaGlmdF9hbXQsIFJ0ViwgMzIg LSA3KTsKKyAgICB0Y2dfZ2VuX3NhcmlfdGwoc2hpZnRfYW10LCBzaGlmdF9hbXQsIDMyIC0gNyk7 CisgICAgdGNnX2dlbl9leHRfaTMyX2k2NChzaGlmdF9hbXRfaTY0LCBzaGlmdF9hbXQpOworCisg ICAgdGNnX2dlbl9leHRfaTMyX2k2NChzaGlmdF9sZWZ0X3ZhbF9pNjQsIFJzVik7CisgICAgdGNn X2dlbl9zaGxfaTY0KHNoaWZ0X2xlZnRfdmFsX2k2NCwgc2hpZnRfbGVmdF92YWxfaTY0LCBzaGlm dF9hbXRfaTY0KTsKKyAgICB0Y2dfZ2VuX2V4dHJsX2k2NF9pMzIoc2hpZnRfbGVmdF92YWwsIHNo aWZ0X2xlZnRfdmFsX2k2NCk7CisKKyAgICAvKiAoKC0oU0hBTVQpKSAtIDEpICovCisgICAgdGNn X2dlbl9uZWdfaTY0KHNoaWZ0X2FtdF9pNjQsIHNoaWZ0X2FtdF9pNjQpOworICAgIHRjZ19nZW5f c3ViaV9pNjQoc2hpZnRfYW10X2k2NCwgc2hpZnRfYW10X2k2NCwgMSk7CisKKyAgICB0Y2dfZ2Vu X2V4dF9pMzJfaTY0KHNoaWZ0X3JpZ2h0X3ZhbF9pNjQsIFJzVik7CisgICAgdGNnX2dlbl9zYXJf aTY0KHNoaWZ0X3JpZ2h0X3ZhbF9pNjQsIHNoaWZ0X3JpZ2h0X3ZhbF9pNjQsIHNoaWZ0X2FtdF9p NjQpOworICAgIHRjZ19nZW5fc2FyaV9pNjQoc2hpZnRfcmlnaHRfdmFsX2k2NCwgc2hpZnRfcmln aHRfdmFsX2k2NCwgMSk7CisgICAgdGNnX2dlbl9leHRybF9pNjRfaTMyKHNoaWZ0X3JpZ2h0X3Zh bCwgc2hpZnRfcmlnaHRfdmFsX2k2NCk7CisKKyAgICB0Y2dfZ2VuX21vdmNvbmRfdGwoVENHX0NP TkRfR0UsIG9yX3ZhbCwgc2hpZnRfYW10LCB6ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICBz aGlmdF9sZWZ0X3ZhbCwgc2hpZnRfcmlnaHRfdmFsKTsKKyAgICB0Y2dfZ2VuX29yX3RsKFJ4Viwg UnhWLCBvcl92YWwpOworCisgICAgdGNnX3RlbXBfZnJlZSh6ZXJvKTsKKyAgICB0Y2dfdGVtcF9m cmVlKHNoaWZ0X2FtdCk7CisgICAgdGNnX3RlbXBfZnJlZV9pNjQoc2hpZnRfYW10X2k2NCk7Cisg ICAgdGNnX3RlbXBfZnJlZV9pNjQoc2hpZnRfbGVmdF92YWxfaTY0KTsKKyAgICB0Y2dfdGVtcF9m cmVlKHNoaWZ0X2xlZnRfdmFsKTsKKyAgICB0Y2dfdGVtcF9mcmVlX2k2NChzaGlmdF9yaWdodF92 YWxfaTY0KTsKKyAgICB0Y2dfdGVtcF9mcmVlKHNoaWZ0X3JpZ2h0X3ZhbCk7CisgICAgdGNnX3Rl bXBfZnJlZShvcl92YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX2xzaGlmdHJfNF80 dShUQ0d2IGRzdCwgVENHdiBzcmMsIGludDMyX3Qgc2hpZnRfYW10KQoreworICAgIGlmIChzaGlm dF9hbXQgPj0gNjQpIHsKKyAgICAgICAgdGNnX2dlbl9tb3ZpX3RsKGRzdCwgMCk7CisgICAgfSBl bHNlIHsKKyAgICAgICAgdGNnX2dlbl9zaHJpX3RsKGRzdCwgc3JjLCBzaGlmdF9hbXQpOworICAg IH0KK30KKwogI2VuZGlmCi0tIAoyLjcuNAoK