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 3AAC5C3F2CD for ; Fri, 28 Feb 2020 17:22:43 +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 EFEDA246A0 for ; Fri, 28 Feb 2020 17:22:42 +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="U7jUgaJN" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EFEDA246A0 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]:51204 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7jLW-0004eC-3h for qemu-devel@archiver.kernel.org; Fri, 28 Feb 2020 12:22:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57746) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7ike-0002p9-D6 for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:44:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7ikZ-0005WC-Qb for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:44:36 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:13250) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j7ikZ-0005Uz-Dw for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:44:31 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1582908271; x=1614444271; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=gPwYseJGmJ1ziRBj6RY7O4hDJdXf16/5WpEZGYedEHc=; b=U7jUgaJNhRgc6POxZv55zHacG+aeiKjv4sPRBNOkohN/Ff2pRhBSvvuV xOaQJcEWBHsqAjSih1aAFgCwozl6C9rgeQ/AC3hsNT1Ufvcq51N4wE0Gc UUTryd1OejMpb4HTMDS0VbKscx49dndVsFdJK7bKeBtE/EpzrBtstZruZ Y=; Received: from unknown (HELO ironmsg02-sd.qualcomm.com) ([10.53.140.142]) by alexa-out-sd-01.qualcomm.com with ESMTP; 28 Feb 2020 08:44:28 -0800 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg02-sd.qualcomm.com with ESMTP; 28 Feb 2020 08:44:27 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 3CF661110; Fri, 28 Feb 2020 10:44:27 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 04/67] Hexagon CPU Scalar Core Definition Date: Fri, 28 Feb 2020 10:43:00 -0600 Message-Id: <1582908244-304-5-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.38 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" QWRkIENQVSBzdGF0ZSBoZWFkZXIsIENQVSBkZWZpbml0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24g cm91dGluZXMKClNpZ25lZC1vZmYtYnk6IFRheWxvciBTaW1wc29uIDx0c2ltcHNvbkBxdWljaW5j LmNvbT4KLS0tCiB0YXJnZXQvaGV4YWdvbi9jcHUtcGFyYW0uaCB8ICAyNiArKysrCiB0YXJnZXQv aGV4YWdvbi9jcHUuaCAgICAgICB8IDE2NSArKysrKysrKysrKysrKysrKysrKysrKwogdGFyZ2V0 L2hleGFnb24vY3B1X2JpdHMuaCAgfCAgMzcgKysrKysrCiB0YXJnZXQvaGV4YWdvbi9pbnRlcm5h bC5oICB8ICA1MiArKysrKysrKwogdGFyZ2V0L2hleGFnb24vY3B1LmMgICAgICAgfCAzMjIgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5n ZWQsIDYwMiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24v Y3B1LXBhcmFtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi9jcHUuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL2NwdV9iaXRzLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCB0YXJnZXQvaGV4YWdvbi9pbnRlcm5hbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0 L2hleGFnb24vY3B1LmMKCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9jcHUtcGFyYW0uaCBi L3RhcmdldC9oZXhhZ29uL2NwdS1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjNhNmI3MjcKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9jcHUtcGFy YW0uaApAQCAtMCwwICsxLDI2IEBACisvKgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVh bGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg KiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgSEVY QUdPTl9DUFVfUEFSQU1fSAorI2RlZmluZSBIRVhBR09OX0NQVV9QQVJBTV9ICisKKyNkZWZpbmUg VEFSR0VUX1BIWVNfQUREUl9TUEFDRV9CSVRTIDM2CisjZGVmaW5lIFRBUkdFVF9WSVJUX0FERFJf U1BBQ0VfQklUUyAzMgorCisjZGVmaW5lIE5CX01NVV9NT0RFUyAxCisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvdGFyZ2V0L2hleGFnb24vY3B1LmggYi90YXJnZXQvaGV4YWdvbi9jcHUuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTQ2NTYxCi0tLSAvZGV2L251bGwKKysrIGIv dGFyZ2V0L2hleGFnb24vY3B1LmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiAgQ29weXJpZ2h0 KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRz IFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisg Ki8KKworI2lmbmRlZiBIRVhBR09OX0NQVV9ICisjZGVmaW5lIEhFWEFHT05fQ1BVX0gKKworLyog Rm9yd2FyZCBkZWNsYXJhdGlvbiBuZWVkZWQgYnkgc29tZSBvZiB0aGUgaGVhZGVyIGZpbGVzICov Cit0eXBlZGVmIHN0cnVjdCBDUFVIZXhhZ29uU3RhdGUgQ1BVSGV4YWdvblN0YXRlOworCisjaW5j bHVkZSA8ZmVudi5oPgorCisjZGVmaW5lIFRBUkdFVF9QQUdFX0JJVFMgMTYgICAgIC8qIDY0SyBw YWdlcyAqLworI2RlZmluZSBUQVJHRVRfTE9OR19CSVRTIDMyCisKKyNpbmNsdWRlICJxZW11L2Nv bXBpbGVyLmgiCisjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKKyNpbmNsdWRlICJleGVjL2NwdS1k ZWZzLmgiCisjaW5jbHVkZSAiaGV4X3JlZ3MuaCIKKworI2RlZmluZSBOVU1fUFJFR1MgNAorI2lm ZGVmIENPTkZJR19VU0VSX09OTFkKKyNkZWZpbmUgVE9UQUxfUEVSX1RIUkVBRF9SRUdTIDY0Cisj ZWxzZQorI2Vycm9yIFN5c3RlbSBtb2RlIG5vdCBpbXBsZW1lbnRlZAorI2VuZGlmCisKKyNkZWZp bmUgU0xPVFNfTUFYIDQKKyNkZWZpbmUgU1RPUkVTX01BWCAyCisjZGVmaW5lIFJFR19XUklURVNf TUFYIDMyCisjZGVmaW5lIFBSRURfV1JJVEVTX01BWCA1ICAgICAgICAgICAgICAgICAgIC8qIDQg aW5zbnMgKyBlbmRsb29wICovCisKKyNkZWZpbmUgVFlQRV9IRVhBR09OX0NQVSAiaGV4YWdvbi1j cHUiCisKKyNkZWZpbmUgSEVYQUdPTl9DUFVfVFlQRV9TVUZGSVggIi0iIFRZUEVfSEVYQUdPTl9D UFUKKyNkZWZpbmUgSEVYQUdPTl9DUFVfVFlQRV9OQU1FKG5hbWUpIChuYW1lIEhFWEFHT05fQ1BV X1RZUEVfU1VGRklYKQorI2RlZmluZSBDUFVfUkVTT0xWSU5HX1RZUEUgVFlQRV9IRVhBR09OX0NQ VQorCisjZGVmaW5lIFRZUEVfSEVYQUdPTl9DUFVfVjY3IEhFWEFHT05fQ1BVX1RZUEVfTkFNRSgi djY3IikKKworI2RlZmluZSBNTVVfVVNFUl9JRFggMAorCitzdHJ1Y3QgTWVtTG9nIHsKKyAgICB0 YXJnZXRfdWxvbmcgdmE7CisgICAgdWludDhfdCB3aWR0aDsKKyAgICB1aW50MzJfdCBkYXRhMzI7 CisgICAgdWludDY0X3QgZGF0YTY0OworfTsKKworI2RlZmluZSBFWEVDX1NUQVRVU19PSyAgICAg ICAgICAweDAwMDAKKyNkZWZpbmUgRVhFQ19TVEFUVVNfU1RPUCAgICAgICAgMHgwMDAyCisjZGVm aW5lIEVYRUNfU1RBVFVTX1JFUExBWSAgICAgIDB4MDAxMAorI2RlZmluZSBFWEVDX1NUQVRVU19M T0NLRUQgICAgICAweDAwMjAKKyNkZWZpbmUgRVhFQ19TVEFUVVNfRVhDRVBUSU9OICAgMHgwMTAw CisKKworI2RlZmluZSBFWENFUFRJT05fREVURUNURUQgICAgICAoZW52LT5zdGF0dXMgJiBFWEVD X1NUQVRVU19FWENFUFRJT04pCisjZGVmaW5lIFJFUExBWV9ERVRFQ1RFRCAgICAgICAgIChlbnYt PnN0YXR1cyAmIEVYRUNfU1RBVFVTX1JFUExBWSkKKyNkZWZpbmUgQ0xFQVJfRVhDRVBUSU9OICAg ICAgICAgKGVudi0+c3RhdHVzICY9ICh+RVhFQ19TVEFUVVNfRVhDRVBUSU9OKSkKKyNkZWZpbmUg U0VUX0VYQ0VQVElPTiAgICAgICAgICAgKGVudi0+c3RhdHVzIHw9IEVYRUNfU1RBVFVTX0VYQ0VQ VElPTikKKworc3RydWN0IENQVUhleGFnb25TdGF0ZSB7CisgICAgdGFyZ2V0X3Vsb25nIGdwcltU T1RBTF9QRVJfVEhSRUFEX1JFR1NdOworICAgIHRhcmdldF91bG9uZyBwcmVkW05VTV9QUkVHU107 CisgICAgdGFyZ2V0X3Vsb25nIGJyYW5jaF90YWtlbjsKKyAgICB0YXJnZXRfdWxvbmcgbmV4dF9Q QzsKKworICAgIC8qIEZvciBjb21wYXJpbmcgd2l0aCBMTERCIG9uIHRhcmdldCAtIHNlZSBoYWNr X3N0YWNrX3B0cnMgZnVuY3Rpb24gKi8KKyAgICB0YXJnZXRfdWxvbmcgc3RhY2tfc3RhcnQ7Cisg ICAgdGFyZ2V0X3Vsb25nIHN0YWNrX2FkanVzdDsKKworICAgIHVpbnQ4X3Qgc2xvdF9jYW5jZWxs ZWQ7CisgICAgdGFyZ2V0X3Vsb25nIG5ld192YWx1ZVtUT1RBTF9QRVJfVEhSRUFEX1JFR1NdOwor CisgICAgLyoKKyAgICAgKiBPbmx5IHVzZWQgd2hlbiBIRVhfREVCVUcgaXMgb24sIGJ1dCB1bmNv bmRpdGlvbmFsbHkgaW5jbHVkZWQKKyAgICAgKiB0byByZWR1Y2UgcmVjb21waWxlIHRpbWUgd2hl biB0dXJuaW5nIEhFWF9ERUJVRyBvbi9vZmYuCisgICAgICovCisgICAgdGFyZ2V0X3Vsb25nIHRo aXNfUEM7CisgICAgdGFyZ2V0X3Vsb25nIHJlZ193cml0dGVuW1RPVEFMX1BFUl9USFJFQURfUkVH U107CisKKyAgICB0YXJnZXRfdWxvbmcgbmV3X3ByZWRfdmFsdWVbTlVNX1BSRUdTXTsKKyAgICB0 YXJnZXRfdWxvbmcgcHJlZF93cml0dGVuOworCisgICAgc3RydWN0IE1lbUxvZyBtZW1fbG9nX3N0 b3Jlc1tTVE9SRVNfTUFYXTsKKworICAgIHRhcmdldF91bG9uZyBkY3plcm9fYWRkcjsKKworICAg IGZlbnZfdCBmZW52OworCisgICAgdGFyZ2V0X3Vsb25nIGxsc2NfYWRkcjsKKyAgICB0YXJnZXRf dWxvbmcgbGxzY192YWw7CisgICAgdWludDY0X3QgICAgIGxsc2NfdmFsX2k2NDsKKyAgICB0YXJn ZXRfdWxvbmcgbGxzY19uZXd2YWw7CisgICAgdWludDY0X3QgICAgIGxsc2NfbmV3dmFsX2k2NDsK KyAgICB0YXJnZXRfdWxvbmcgbGxzY19yZWc7CisKKyAgICB0YXJnZXRfdWxvbmcgaXNfZ2F0aGVy X3N0b3JlX2luc247CisgICAgdGFyZ2V0X3Vsb25nIGdhdGhlcl9pc3N1ZWQ7Cit9OworCisjZGVm aW5lIEhFWEFHT05fQ1BVX0NMQVNTKGtsYXNzKSBcCisgICAgT0JKRUNUX0NMQVNTX0NIRUNLKEhl eGFnb25DUFVDbGFzcywgKGtsYXNzKSwgVFlQRV9IRVhBR09OX0NQVSkKKyNkZWZpbmUgSEVYQUdP Tl9DUFUob2JqKSBcCisgICAgT0JKRUNUX0NIRUNLKEhleGFnb25DUFUsIChvYmopLCBUWVBFX0hF WEFHT05fQ1BVKQorI2RlZmluZSBIRVhBR09OX0NQVV9HRVRfQ0xBU1Mob2JqKSBcCisgICAgT0JK RUNUX0dFVF9DTEFTUyhIZXhhZ29uQ1BVQ2xhc3MsIChvYmopLCBUWVBFX0hFWEFHT05fQ1BVKQor Cit0eXBlZGVmIHN0cnVjdCBIZXhhZ29uQ1BVQ2xhc3MgeworICAgIC8qPCBwcml2YXRlID4qLwor ICAgIENQVUNsYXNzIHBhcmVudF9jbGFzczsKKyAgICAvKjwgcHVibGljID4qLworICAgIERldmlj ZVJlYWxpemUgcGFyZW50X3JlYWxpemU7CisgICAgdm9pZCAoKnBhcmVudF9yZXNldCkoQ1BVU3Rh dGUgKmNwdSk7Cit9IEhleGFnb25DUFVDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgSGV4YWdvbkNQ VSB7CisgICAgLyo8IHByaXZhdGUgPiovCisgICAgQ1BVU3RhdGUgcGFyZW50X29iajsKKyAgICAv KjwgcHVibGljID4qLworICAgIENQVU5lZ2F0aXZlT2Zmc2V0U3RhdGUgbmVnOworICAgIENQVUhl eGFnb25TdGF0ZSBlbnY7Cit9IEhleGFnb25DUFU7CisKK3N0YXRpYyBpbmxpbmUgSGV4YWdvbkNQ VSAqaGV4YWdvbl9lbnZfZ2V0X2NwdShDUFVIZXhhZ29uU3RhdGUgKmVudikKK3sKKyAgICByZXR1 cm4gY29udGFpbmVyX29mKGVudiwgSGV4YWdvbkNQVSwgZW52KTsKK30KKworI2luY2x1ZGUgImNw dV9iaXRzLmgiCisKKyNkZWZpbmUgY3B1X3NpZ25hbF9oYW5kbGVyIGNwdV9oZXhhZ29uX3NpZ25h bF9oYW5kbGVyCitleHRlcm4gaW50IGNwdV9oZXhhZ29uX3NpZ25hbF9oYW5kbGVyKGludCBob3N0 X3NpZ251bSwgdm9pZCAqcGluZm8sIHZvaWQgKnB1Yyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBj cHVfZ2V0X3RiX2NwdV9zdGF0ZShDUFVIZXhhZ29uU3RhdGUgKmVudiwgdGFyZ2V0X3Vsb25nICpw YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdWxvbmcg KmNzX2Jhc2UsIHVpbnQzMl90ICpmbGFncykKK3sKKyAgICAqcGMgPSBlbnYtPmdwcltIRVhfUkVH X1BDXTsKKyAgICAqY3NfYmFzZSA9IDA7CisjaWZkZWYgQ09ORklHX1VTRVJfT05MWQorICAgICpm bGFncyA9IDA7CisjZWxzZQorI2Vycm9yIFN5c3RlbSBtb2RlIG5vdCBzdXBwb3J0ZWQgb24gSGV4 YWdvbiB5ZXQKKyNlbmRpZgorfQorCit0eXBlZGVmIHN0cnVjdCBDUFVIZXhhZ29uU3RhdGUgQ1BV QXJjaFN0YXRlOwordHlwZWRlZiBIZXhhZ29uQ1BVIEFyY2hDUFU7CisKKyNpbmNsdWRlICJleGVj L2NwdS1hbGwuaCIKKworI2VuZGlmIC8qIEhFWEFHT05fQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL3Rh cmdldC9oZXhhZ29uL2NwdV9iaXRzLmggYi90YXJnZXQvaGV4YWdvbi9jcHVfYml0cy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZWRkZTcKLS0tIC9kZXYvbnVsbAorKysg Yi90YXJnZXQvaGV4YWdvbi9jcHVfYml0cy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiAgQ29w eXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwg UmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisgKi8KKworI2lmbmRlZiBIRVhBR09OX0NQVV9CSVRTX0gKKyNkZWZpbmUgSEVYQUdPTl9D UFVfQklUU19ICisKKyNkZWZpbmUgSEVYX0VYQ1BfRkVUQ0hfTk9fVVBBR0UgIDB4MDEyCisjZGVm aW5lIEhFWF9FWENQX0lOVkFMSURfUEFDS0VUICAweDAxNQorI2RlZmluZSBIRVhfRVhDUF9JTlZB TElEX09QQ09ERSAgMHgwMTUKKyNkZWZpbmUgSEVYX0VYQ1BfUFJJVl9OT19VUkVBRCAgIDB4MDI0 CisjZGVmaW5lIEhFWF9FWENQX1BSSVZfTk9fVVdSSVRFICAweDAyNQorCisjZGVmaW5lIEhFWF9F WENQX1RSQVAwICAgICAgICAgICAweDE3MgorI2RlZmluZSBIRVhfRVhDUF9UUkFQMSAgICAgICAg ICAgMHgxNzMKKyNkZWZpbmUgSEVYX0VYQ1BfU0M0ICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5l IEhFWF9FWENQX1NDOCAgICAgICAgICAgICAweDIwMAorCisjZGVmaW5lIFBBQ0tFVF9XT1JEU19N QVggICAgICAgICA0CisKK2V4dGVybiBpbnQgZGlzYXNzZW1ibGVfaGV4YWdvbih1aW50MzJfdCAq d29yZHMsIGludCBud29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq YnVmLCBpbnQgYnVmc2l6ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24v aW50ZXJuYWwuaCBiL3RhcmdldC9oZXhhZ29uL2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMDkyZGVkYwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhh Z29uL2ludGVybmFsLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAx OS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2 ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgor ICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisj aWZuZGVmIEhFWEFHT05fSU5URVJOQUxfSAorI2RlZmluZSBIRVhBR09OX0lOVEVSTkFMX0gKKwor LyoKKyAqIENoYW5nZSBIRVhfREVCVUcgdG8gMSB0byB0dXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQK KyAqLworI2RlZmluZSBIRVhfREVCVUcgMAorI2RlZmluZSBIRVhfREVCVUdfTE9HKC4uLikgXAor ICAgIGRvIHsgXAorICAgICAgICBpZiAoSEVYX0RFQlVHKSB7IFwKKyAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCBfX1ZBX0FSR1NfXyk7IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoMCkK KworLyoKKyAqIENoYW5nZSBDT1VOVF9IRVhfSEVMUEVSUyB0byAxIHRvIGNvdW50IGhvdyBtYW55 IHRpbWVzIGVhY2ggaGVscGVyCisgKiBpcyBjYWxsZWQuICBUaGlzIGlzIHVzZWZ1bCB0byBmaWd1 cmUgb3V0IHdoaWNoIGhlbHBlcnMgd291bGQgYmVuZWZpdAorICogZnJvbSB3cml0aW5nIGFuIGZX UkFQIG1hY3JvLgorICovCisjZGVmaW5lIENPVU5UX0hFWF9IRUxQRVJTIDAKKworZXh0ZXJuIGlu dCBoZXhhZ29uX2dkYl9yZWFkX3JlZ2lzdGVyKENQVVN0YXRlICpjcHUsIHVpbnQ4X3QgKmJ1Ziwg aW50IHJlZyk7CitleHRlcm4gaW50IGhleGFnb25fZ2RiX3dyaXRlX3JlZ2lzdGVyKENQVVN0YXRl ICpjcHUsIHVpbnQ4X3QgKmJ1ZiwgaW50IHJlZyk7CisKK2V4dGVybiB2b2lkIGhleGFnb25fZGVi dWcoQ1BVSGV4YWdvblN0YXRlICplbnYpOworCisjaWYgQ09VTlRfSEVYX0hFTFBFUlMKK2V4dGVy biB2b2lkIHByaW50X2hlbHBlcl9jb3VudHModm9pZCk7CisjZW5kaWYKKworZXh0ZXJuIGNvbnN0 IGNoYXIgKiBjb25zdCBoZXhhZ29uX3JlZ25hbWVzW1RPVEFMX1BFUl9USFJFQURfUkVHU107CisK K2V4dGVybiB2b2lkIGluaXRfZ2VucHRyKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rh cmdldC9oZXhhZ29uL2NwdS5jIGIvdGFyZ2V0L2hleGFnb24vY3B1LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uOThkNmJkYwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9o ZXhhZ29uL2NwdS5jCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogIENvcHlyaWdodChjKSAyMDE5 LTIwMjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl ZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisg KiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNp bmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9sb2cuaCIKKyNpbmNsdWRlICJj cHUuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInRyYW5zbGF0ZS5oIgorI2lu Y2x1ZGUgImV4ZWMvZXhlYy1hbGwuaCIKKyNpbmNsdWRlICJxYXBpL2Vycm9yLmgiCisjaW5jbHVk ZSAibWlncmF0aW9uL3Ztc3RhdGUuaCIKKworc3RhdGljIHZvaWQgaGV4YWdvbl92NjdfY3B1X2lu aXQoT2JqZWN0ICpvYmopCit7Cit9CisKK3N0YXRpYyBPYmplY3RDbGFzcyAqaGV4YWdvbl9jcHVf Y2xhc3NfYnlfbmFtZShjb25zdCBjaGFyICpjcHVfbW9kZWwpCit7CisgICAgT2JqZWN0Q2xhc3Mg Km9jOworICAgIGNoYXIgKnR5cGVuYW1lOworICAgIGNoYXIgKipjcHVuYW1lOworCisgICAgY3B1 bmFtZSA9IGdfc3Ryc3BsaXQoY3B1X21vZGVsLCAiLCIsIDEpOworICAgIHR5cGVuYW1lID0gZ19z dHJkdXBfcHJpbnRmKEhFWEFHT05fQ1BVX1RZUEVfTkFNRSgiJXMiKSwgY3B1bmFtZVswXSk7Cisg ICAgb2MgPSBvYmplY3RfY2xhc3NfYnlfbmFtZSh0eXBlbmFtZSk7CisgICAgZ19zdHJmcmVldihj cHVuYW1lKTsKKyAgICBnX2ZyZWUodHlwZW5hbWUpOworICAgIGlmICghb2MgfHwgIW9iamVjdF9j bGFzc19keW5hbWljX2Nhc3Qob2MsIFRZUEVfSEVYQUdPTl9DUFUpIHx8CisgICAgICAgIG9iamVj dF9jbGFzc19pc19hYnN0cmFjdChvYykpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor ICAgIHJldHVybiBvYzsKK30KKworY29uc3QgY2hhciAqIGNvbnN0IGhleGFnb25fcmVnbmFtZXNb VE9UQUxfUEVSX1RIUkVBRF9SRUdTXSA9IHsKKyAgICJyMCIsICJyMSIsICAicjIiLCAgInIzIiwg ICJyNCIsICAgInI1IiwgICJyNiIsICAicjciLAorICAgInI4IiwgInI5IiwgICJyMTAiLCAicjEx IiwgInIxMiIsICAicjEzIiwgInIxNCIsICJyMTUiLAorICAicjE2IiwgInIxNyIsICJyMTgiLCAi cjE5IiwgInIyMCIsICAicjIxIiwgInIyMiIsICJyMjMiLAorICAicjI0IiwgInIyNSIsICJyMjYi LCAicjI3IiwgInIyOCIsICAicjI5IiwgInIzMCIsICJyMzEiLAorICAic2EwIiwgImxjMCIsICJz YTEiLCAibGMxIiwgInAzXzAiLCAiYzUiLCAgIm0wIiwgICJtMSIsCisgICJ1c3IiLCAicGMiLCAg InVncCIsICJncCIsICAiY3MwIiwgICJjczEiLCAiYzE0IiwgImMxNSIsCisgICJjMTYiLCAiYzE3 IiwgImMxOCIsICJjMTkiLCAicGt0X2NudCIsICAiaW5zbl9jbnQiLCAiaHZ4X2NudCIsICJjMjMi LAorICAiYzI0IiwgImMyNSIsICJjMjYiLCAiYzI3IiwgImMyOCIsICAiYzI5IiwgImMzMCIsICJj MzEiLAorfTsKKworLyoKKyAqIE9uZSBvZiB0aGUgbWFpbiBkZWJ1Z2dpbmcgdGVjaG5pcXVlcyBp cyB0byB1c2UgIi1kIGNwdSIgYW5kIGNvbXBhcmUgYWdhaW5zdAorICogTExEQiBvdXRwdXQgd2hl biBzaW5nbGUgc3RlcHBpbmcuICBIb3dldmVyLCB0aGUgdGFyZ2V0IGFuZCBxZW11IHB1dCB0aGUK KyAqIHN0YWNrcyBhdCBkaWZmZXJlbnQgbG9jYXRpb25zLiAgVGhpcyBpcyB1c2VkIHRvIGNvbXBl bnNhdGUgc28gdGhlIGRpZmYgaXMKKyAqIGNsZWFuZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdGFy Z2V0X3Vsb25nIGhhY2tfc3RhY2tfcHRycyhDUFVIZXhhZ29uU3RhdGUgKmVudiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdWxvbmcgYWRkcikKK3sK KyAgICBzdGF0aWMgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgaWYgKGZpcnN0KSB7CisgICAgICAg IGZpcnN0ID0gZmFsc2U7CisgICAgICAgIGVudi0+c3RhY2tfc3RhcnQgPSBlbnYtPmdwcltIRVhf UkVHX1NQXTsKKyAgICAgICAgZW52LT5ncHJbSEVYX1JFR19VU1JdID0gMHg1NjAwMDsKKworI2Rl ZmluZSBBREpVU1RfU1RBQ0sgMAorI2lmIEFESlVTVF9TVEFDSworICAgICAgICAvKgorICAgICAg ICAgKiBDaGFuZ2UgdGhlIHR3byBudW1iZXJzIGJlbG93IHRvCisgICAgICAgICAqICAgICAxICAg IHFlbXUgc3RhY2sgbG9jYXRpb24KKyAgICAgICAgICogICAgIDIgICAgaGFyZHdhcmUgc3RhY2sg bG9jYXRpb24KKyAgICAgICAgICogT3Igc2V0IHRvIHplcm8gZm9yIG5vcm1hbCBtb2RlIChubyBz dGFjayBhZGp1c3RtZW50KQorICAgICAgICAgKi8KKyAgICAgICAgZW52LT5zdGFja19hZGp1c3Qg PSAweGZmZmVlYjgwIC0gMHhiZjg5Zjk4MDsKKyNlbHNlCisgICAgICAgIGVudi0+c3RhY2tfYWRq dXN0ID0gMDsKKyNlbmRpZgorICAgIH0KKworICAgIHRhcmdldF91bG9uZyBzdGFja19zdGFydCA9 IGVudi0+c3RhY2tfc3RhcnQ7CisgICAgdGFyZ2V0X3Vsb25nIHN0YWNrX3NpemUgPSAweDEwMDAw OworICAgIHRhcmdldF91bG9uZyBzdGFja19hZGp1c3QgPSBlbnYtPnN0YWNrX2FkanVzdDsKKwor ICAgIGlmIChzdGFja19zdGFydCArIDB4MTAwMCA+PSBhZGRyICYmIGFkZHIgPj0gKHN0YWNrX3N0 YXJ0IC0gc3RhY2tfc2l6ZSkpIHsKKyAgICAgICAgcmV0dXJuIGFkZHIgLSBzdGFja19hZGp1c3Q7 CisgICAgfQorICAgIHJldHVybiBhZGRyOworfQorCisvKiBIRVhfUkVHX1AzXzAgKGFrYSBDNCkg aXMgYW4gYWxpYXMgZm9yIHRoZSBwcmVkaWNhdGUgcmVnaXN0ZXJzICovCitzdGF0aWMgaW5saW5l IHRhcmdldF91bG9uZyByZWFkX3AzXzAoQ1BVSGV4YWdvblN0YXRlICplbnYpCit7CisgICAgaW50 MzJfdCBjb250cm9sX3JlZyA9IDA7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gTlVNX1BSRUdT IC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgY29udHJvbF9yZWcgPDw9IDg7CisgICAgICAg IGNvbnRyb2xfcmVnIHw9IGVudi0+cHJlZFtpXSAmIDB4ZmY7CisgICAgfQorICAgIHJldHVybiBj b250cm9sX3JlZzsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfcmVnKEZJTEUgKmYsIENQVUhleGFn b25TdGF0ZSAqZW52LCBpbnQgcmVnbnVtKQoreworICAgIHRhcmdldF91bG9uZyB2YWx1ZTsKKwor ICAgIGlmIChyZWdudW0gPT0gSEVYX1JFR19QM18wKSB7CisgICAgICAgIHZhbHVlID0gcmVhZF9w M18wKGVudik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWUgPSByZWdudW0gPCAzMiA/IGhh Y2tfc3RhY2tfcHRycyhlbnYsIGVudi0+Z3ByW3JlZ251bV0pCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiBlbnYtPmdwcltyZWdudW1dOworICAgIH0KKworICAgIGZwcmludGYoZiwgIiAg JXMgPSAweCIgVEFSR0VUX0ZNVF9seCAiXG4iLCBoZXhhZ29uX3JlZ25hbWVzW3JlZ251bV0sIHZh bHVlKTsKK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl9kdW1wKENQVUhleGFnb25TdGF0ZSAqZW52 LCBGSUxFICpmKQoreworICAgIHN0YXRpYyB0YXJnZXRfdWxvbmcgbGFzdF9wYzsKKyAgICBpbnQg aTsKKworICAgIC8qCisgICAgICogV2hlbiBjb21wYXJpbmcgd2l0aCBMTERCLCBpdCBkb2Vzbid0 IHN0ZXAgdGhyb3VnaCBzaW5nbGUtY3ljbGUKKyAgICAgKiBoYXJkd2FyZSBsb29wcyB0aGUgc2Ft ZSB3YXkuICBTbywgd2UganVzdCBza2lwIHRoZW0gaGVyZQorICAgICAqLworICAgIGlmIChlbnYt PmdwcltIRVhfUkVHX1BDXSA9PSBsYXN0X3BjKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg ICAgbGFzdF9wYyA9IGVudi0+Z3ByW0hFWF9SRUdfUENdOworICAgIGZwcmludGYoZiwgIkdlbmVy YWwgUHVycG9zZSBSZWdpc3RlcnMgPSB7XG4iKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkr KykgeworICAgICAgICBwcmludF9yZWcoZiwgZW52LCBpKTsKKyAgICB9CisgICAgcHJpbnRfcmVn KGYsIGVudiwgSEVYX1JFR19TQTApOworICAgIHByaW50X3JlZyhmLCBlbnYsIEhFWF9SRUdfTEMw KTsKKyAgICBwcmludF9yZWcoZiwgZW52LCBIRVhfUkVHX1NBMSk7CisgICAgcHJpbnRfcmVnKGYs IGVudiwgSEVYX1JFR19MQzEpOworICAgIHByaW50X3JlZyhmLCBlbnYsIEhFWF9SRUdfTTApOwor ICAgIHByaW50X3JlZyhmLCBlbnYsIEhFWF9SRUdfTTEpOworICAgIHByaW50X3JlZyhmLCBlbnYs IEhFWF9SRUdfVVNSKTsKKyAgICBwcmludF9yZWcoZiwgZW52LCBIRVhfUkVHX1AzXzApOworICAg IHByaW50X3JlZyhmLCBlbnYsIEhFWF9SRUdfR1ApOworICAgIHByaW50X3JlZyhmLCBlbnYsIEhF WF9SRUdfVUdQKTsKKyAgICBwcmludF9yZWcoZiwgZW52LCBIRVhfUkVHX1BDKTsKKyNpZmRlZiBD T05GSUdfVVNFUl9PTkxZCisgICAgLyoKKyAgICAgKiBOb3QgbW9kZWxsZWQgaW4gdXNlciBtb2Rl LCBwcmludCBqdW5rIHRvIG1pbmltaXplIHRoZSBkaWZmJ3MKKyAgICAgKiB3aXRoIExMREIgb3V0 cHV0CisgICAgICovCisgICAgZnByaW50ZihmLCAiICBjYXVzZSA9IDB4MDAwMDAwZGJcbiIpOwor ICAgIGZwcmludGYoZiwgIiAgYmFkdmEgPSAweDAwMDAwMDAwXG4iKTsKKyAgICBmcHJpbnRmKGYs ICIgIGNzMCA9IDB4MDAwMDAwMDBcbiIpOworICAgIGZwcmludGYoZiwgIiAgY3MxID0gMHgwMDAw MDAwMFxuIik7CisjZWxzZQorICAgIHByaW50X3JlZyhmLCBlbnYsIEhFWF9SRUdfQ0FVU0UpOwor ICAgIHByaW50X3JlZyhmLCBlbnYsIEhFWF9SRUdfQkFEVkEpOworICAgIHByaW50X3JlZyhmLCBl bnYsIEhFWF9SRUdfQ1MwKTsKKyAgICBwcmludF9yZWcoZiwgZW52LCBIRVhfUkVHX0NTMSk7Cisj ZW5kaWYKKyAgICBmcHJpbnRmKGYsICJ9XG4iKTsKK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl9k dW1wX3N0YXRlKENQVVN0YXRlICpjcywgRklMRSAqZiwgaW50IGZsYWdzKQoreworICAgIEhleGFn b25DUFUgKmNwdSA9IEhFWEFHT05fQ1BVKGNzKTsKKyAgICBDUFVIZXhhZ29uU3RhdGUgKmVudiA9 ICZjcHUtPmVudjsKKworICAgIGhleGFnb25fZHVtcChlbnYsIGYpOworfQorCit2b2lkIGhleGFn b25fZGVidWcoQ1BVSGV4YWdvblN0YXRlICplbnYpCit7CisgICAgaGV4YWdvbl9kdW1wKGVudiwg c3Rkb3V0KTsKK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl9jcHVfc2V0X3BjKENQVVN0YXRlICpj cywgdmFkZHIgdmFsdWUpCit7CisgICAgSGV4YWdvbkNQVSAqY3B1ID0gSEVYQUdPTl9DUFUoY3Mp OworICAgIENQVUhleGFnb25TdGF0ZSAqZW52ID0gJmNwdS0+ZW52OworICAgIGVudi0+Z3ByW0hF WF9SRUdfUENdID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fY3B1X3N5bmNocm9u aXplX2Zyb21fdGIoQ1BVU3RhdGUgKmNzLCBUcmFuc2xhdGlvbkJsb2NrICp0YikKK3sKKyAgICBI ZXhhZ29uQ1BVICpjcHUgPSBIRVhBR09OX0NQVShjcyk7CisgICAgQ1BVSGV4YWdvblN0YXRlICpl bnYgPSAmY3B1LT5lbnY7CisgICAgZW52LT5ncHJbSEVYX1JFR19QQ10gPSB0Yi0+cGM7Cit9CisK K3N0YXRpYyBib29sIGhleGFnb25fY3B1X2hhc193b3JrKENQVVN0YXRlICpjcykKK3sKKyAgICBy ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCByZXN0b3JlX3N0YXRlX3RvX29wYyhDUFVIZXhhZ29uU3Rh dGUgKmVudiwgVHJhbnNsYXRpb25CbG9jayAqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICAg IHRhcmdldF91bG9uZyAqZGF0YSkKK3sKKyAgICBlbnYtPmdwcltIRVhfUkVHX1BDXSA9IGRhdGFb MF07Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fY3B1X3Jlc2V0KENQVVN0YXRlICpjcykKK3sK KyAgICBIZXhhZ29uQ1BVICpjcHUgPSBIRVhBR09OX0NQVShjcyk7CisgICAgSGV4YWdvbkNQVUNs YXNzICptY2MgPSBIRVhBR09OX0NQVV9HRVRfQ0xBU1MoY3B1KTsKKworICAgIG1jYy0+cGFyZW50 X3Jlc2V0KGNzKTsKK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl9jcHVfZGlzYXNfc2V0X2luZm8o Q1BVU3RhdGUgKnMsIGRpc2Fzc2VtYmxlX2luZm8gKmluZm8pCit7CisgICAgaW5mby0+cHJpbnRf aW5zbiA9IHByaW50X2luc25faGV4YWdvbjsKK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl9jcHVf cmVhbGl6ZShEZXZpY2VTdGF0ZSAqZGV2LCBFcnJvciAqKmVycnApCit7CisgICAgQ1BVU3RhdGUg KmNzID0gQ1BVKGRldik7CisgICAgSGV4YWdvbkNQVUNsYXNzICptY2MgPSBIRVhBR09OX0NQVV9H RVRfQ0xBU1MoZGV2KTsKKyAgICBFcnJvciAqbG9jYWxfZXJyID0gTlVMTDsKKworICAgIGNwdV9l eGVjX3JlYWxpemVmbihjcywgJmxvY2FsX2Vycik7CisgICAgaWYgKGxvY2FsX2VyciAhPSBOVUxM KSB7CisgICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBsb2NhbF9lcnIpOworICAgICAgICBy ZXR1cm47CisgICAgfQorCisgICAgcWVtdV9pbml0X3ZjcHUoY3MpOworICAgIGNwdV9yZXNldChj cyk7CisKKyAgICBtY2MtPnBhcmVudF9yZWFsaXplKGRldiwgZXJycCk7Cit9CisKK3N0YXRpYyB2 b2lkIGhleGFnb25fY3B1X2luaXQoT2JqZWN0ICpvYmopCit7CisgICAgSGV4YWdvbkNQVSAqY3B1 ID0gSEVYQUdPTl9DUFUob2JqKTsKKworICAgIGNwdV9zZXRfY3B1c3RhdGVfcG9pbnRlcnMoY3B1 KTsKK30KKworc3RhdGljIGJvb2wgaGV4YWdvbl90bGJfZmlsbChDUFVTdGF0ZSAqY3MsIHZhZGRy IGFkZHJlc3MsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTVVBY2Nl c3NUeXBlIGFjY2Vzc190eXBlLCBpbnQgbW11X2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYm9vbCBwcm9iZSwgdWludHB0cl90IHJldGFkZHIpCit7CisjaWZkZWYgQ09ORklHX1VT RVJfT05MWQorICAgIHN3aXRjaCAoYWNjZXNzX3R5cGUpIHsKKyAgICBjYXNlIE1NVV9JTlNUX0ZF VENIOgorICAgICAgICBjcy0+ZXhjZXB0aW9uX2luZGV4ID0gSEVYX0VYQ1BfRkVUQ0hfTk9fVVBB R0U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1VX0RBVEFfTE9BRDoKKyAgICAgICAgY3Mt PmV4Y2VwdGlvbl9pbmRleCA9IEhFWF9FWENQX1BSSVZfTk9fVVJFQUQ7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgTU1VX0RBVEFfU1RPUkU6CisgICAgICAgIGNzLT5leGNlcHRpb25faW5kZXgg PSBIRVhfRVhDUF9QUklWX05PX1VXUklURTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNw dV9sb29wX2V4aXRfcmVzdG9yZShjcywgcmV0YWRkcik7CisjZWxzZQorI2Vycm9yIFN5c3RlbSBt b2RlIG5vdCBpbXBsZW1lbnRlZCBmb3IgSGV4YWdvbgorI2VuZGlmCit9CisKK3N0YXRpYyBjb25z dCBWTVN0YXRlRGVzY3JpcHRpb24gdm1zdGF0ZV9oZXhhZ29uX2NwdSA9IHsKKyAgICAubmFtZSA9 ICJjcHUiLAorICAgIC51bm1pZ3JhdGFibGUgPSAxLAorfTsKKworc3RhdGljIHZvaWQgaGV4YWdv bl9jcHVfY2xhc3NfaW5pdChPYmplY3RDbGFzcyAqYywgdm9pZCAqZGF0YSkKK3sKKyAgICBIZXhh Z29uQ1BVQ2xhc3MgKm1jYyA9IEhFWEFHT05fQ1BVX0NMQVNTKGMpOworICAgIENQVUNsYXNzICpj YyA9IENQVV9DTEFTUyhjKTsKKyAgICBEZXZpY2VDbGFzcyAqZGMgPSBERVZJQ0VfQ0xBU1MoYyk7 CisKKyAgICBtY2MtPnBhcmVudF9yZWFsaXplID0gZGMtPnJlYWxpemU7CisgICAgZGMtPnJlYWxp emUgPSBoZXhhZ29uX2NwdV9yZWFsaXplOworCisgICAgbWNjLT5wYXJlbnRfcmVzZXQgPSBjYy0+ cmVzZXQ7CisgICAgY2MtPnJlc2V0ID0gaGV4YWdvbl9jcHVfcmVzZXQ7CisKKyAgICBjYy0+Y2xh c3NfYnlfbmFtZSA9IGhleGFnb25fY3B1X2NsYXNzX2J5X25hbWU7CisgICAgY2MtPmhhc193b3Jr ID0gaGV4YWdvbl9jcHVfaGFzX3dvcms7CisgICAgY2MtPmR1bXBfc3RhdGUgPSBoZXhhZ29uX2R1 bXBfc3RhdGU7CisgICAgY2MtPnNldF9wYyA9IGhleGFnb25fY3B1X3NldF9wYzsKKyAgICBjYy0+ c3luY2hyb25pemVfZnJvbV90YiA9IGhleGFnb25fY3B1X3N5bmNocm9uaXplX2Zyb21fdGI7Cisg ICAgY2MtPmdkYl9udW1fY29yZV9yZWdzID0gVE9UQUxfUEVSX1RIUkVBRF9SRUdTOworICAgIGNj LT5nZGJfc3RvcF9iZWZvcmVfd2F0Y2hwb2ludCA9IHRydWU7CisgICAgY2MtPmRpc2FzX3NldF9p bmZvID0gaGV4YWdvbl9jcHVfZGlzYXNfc2V0X2luZm87CisjaWZkZWYgQ09ORklHX1RDRworICAg IGNjLT50Y2dfaW5pdGlhbGl6ZSA9IGhleGFnb25fdHJhbnNsYXRlX2luaXQ7CisgICAgY2MtPnRs Yl9maWxsID0gaGV4YWdvbl90bGJfZmlsbDsKKyNlbmRpZgorICAgIC8qIEZvciBub3csIG1hcmsg dW5taWdyYXRhYmxlOiAqLworICAgIGNjLT52bXNkID0gJnZtc3RhdGVfaGV4YWdvbl9jcHU7Cit9 CisKKyNkZWZpbmUgREVGSU5FX0NQVSh0eXBlX25hbWUsIGluaXRmbikgICAgICBcCisgICAgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAubmFtZSA9IHR5 cGVfbmFtZSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnBhcmVudCA9IFRZUEVfSEVYQUdP Tl9DUFUsICAgICAgICBcCisgICAgICAgIC5pbnN0YW5jZV9pbml0ID0gaW5pdGZuICAgICAgICAg ICAgXAorICAgIH0KKworc3RhdGljIGNvbnN0IFR5cGVJbmZvIGhleGFnb25fY3B1X3R5cGVfaW5m b3NbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lID0gVFlQRV9IRVhBR09OX0NQVSwKKyAgICAg ICAgLnBhcmVudCA9IFRZUEVfQ1BVLAorICAgICAgICAuaW5zdGFuY2Vfc2l6ZSA9IHNpemVvZihI ZXhhZ29uQ1BVKSwKKyAgICAgICAgLmluc3RhbmNlX2luaXQgPSBoZXhhZ29uX2NwdV9pbml0LAor ICAgICAgICAuYWJzdHJhY3QgPSB0cnVlLAorICAgICAgICAuY2xhc3Nfc2l6ZSA9IHNpemVvZihI ZXhhZ29uQ1BVQ2xhc3MpLAorICAgICAgICAuY2xhc3NfaW5pdCA9IGhleGFnb25fY3B1X2NsYXNz X2luaXQsCisgICAgfSwKKyAgICBERUZJTkVfQ1BVKFRZUEVfSEVYQUdPTl9DUFVfVjY3LCAgICAg ICAgICAgICAgaGV4YWdvbl92NjdfY3B1X2luaXQpLAorfTsKKworREVGSU5FX1RZUEVTKGhleGFn b25fY3B1X3R5cGVfaW5mb3MpCi0tIAoyLjcuNAoK