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,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 DF49BC433DF for ; Tue, 18 Aug 2020 15:56:21 +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 3EF712080C for ; Tue, 18 Aug 2020 15:56:21 +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="kIMrAaz5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3EF712080C 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]:50088 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k83yF-0007aB-Qc for qemu-devel@archiver.kernel.org; Tue, 18 Aug 2020 11:56:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60740) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k83tK-0006gt-Cq for qemu-devel@nongnu.org; Tue, 18 Aug 2020 11:51:14 -0400 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:12936) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k83tF-0005rl-E6 for qemu-devel@nongnu.org; Tue, 18 Aug 2020 11:51:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1597765869; x=1629301869; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=zrMTkdkNJVB1lA8gjwiL80FK8ZHm5uJLdu8wbhwUcCY=; b=kIMrAaz5wY0MmtumrTkyWXK56VRqmFhDQqbqbSrOu4qzK804ZksSIfS8 tXHWBgwAduTL7n+fBqOI4a3EiwErlKzvoJWz55fOTMPDgca4hAD3WwzmT 9TBtyTllJBD2y6ctgLkiHVFqCpJECnB/lPXQmvc7vFizHNslPlUUhAWiJ c=; Received: from unknown (HELO ironmsg02-sd.qualcomm.com) ([10.53.140.142]) by alexa-out-sd-02.qualcomm.com with ESMTP; 18 Aug 2020 08:50:57 -0700 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg02-sd.qualcomm.com with ESMTP; 18 Aug 2020 08:50:56 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 8C2DF1618; Tue, 18 Aug 2020 10:50:56 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v3 14/34] Hexagon (target/hexagon) instruction/packet decode Date: Tue, 18 Aug 2020 10:50:27 -0500 Message-Id: <1597765847-16637-15-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.39; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-02.qualcomm.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/18 11:50:57 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" VGFrZSB0aGUgd29yZHMgZnJvbSBpbnN0cnVjdGlvbiBtZW1vcnkgYW5kIGJ1aWxkIGEgcGFja2V0 X3QgZm9yIFRDRyBjb2RlCmdlbmVyYXRpb24KClRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUg cGVyZm9ybWVkCiAgICBDb252ZXJ0IHRoZSAubmV3IGVuY29kZWQgb2Zmc2V0IHRvIHRoZSByZWdp c3RlciBudW1iZXIgb2YgdGhlIHByb2R1Y2VyCiAgICBSZW9yZGVyIHRoZSBwYWNrZXQgc28gLm5l dyBwcm9kdWNlciBpcyBiZWZvcmUgY29uc3VtZXIKICAgIEFwcGx5IGNvbnN0YW50IGV4dGVuZGVy cwogICAgU2VwYXJhdGUgc3ViaW5zbidzIGludG8gdHdvIGluc3RydWN0aW9ucwogICAgQnJlYWsg Y29tcGFyZS1qdW1wcyBpbnRvIHR3byBpbnN0cnVjdGlvbnMKICAgIENyZWF0ZSBpbnN0cnVjdGlv bnMgZm9yIDplbmRsb29wCgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25A cXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24vZGVjb2RlLmggICAgIHwgIDM5ICsrKwog dGFyZ2V0L2hleGFnb24vZGVjb2RlLmMgICAgIHwgNTkzICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9xNnZfZGVjb2RlLmMgfCAzNzMg KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMDA1IGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi9kZWNvZGUuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL2RlY29kZS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgdGFyZ2V0L2hleGFnb24vcTZ2X2RlY29kZS5jCgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFn b24vZGVjb2RlLmggYi90YXJnZXQvaGV4YWdvbi9kZWNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi43ZjYzYjFjCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFn b24vZGVjb2RlLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0y MDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICog IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZu ZGVmIEhFWEFHT05fREVDT0RFX0gKKyNkZWZpbmUgSEVYQUdPTl9ERUNPREVfSAorCisjaW5jbHVk ZSAiY3B1LmgiCisjaW5jbHVkZSAib3Bjb2Rlcy5oIgorI2luY2x1ZGUgImhleF9hcmNoX3R5cGVz LmgiCisjaW5jbHVkZSAiaW5zbi5oIgorCitleHRlcm4gdm9pZCBkZWNvZGVfaW5pdCh2b2lkKTsK Kworc3RhdGljIGlubGluZSBpbnQgaXNfcGFja2V0X2VuZCh1aW50MzJfdCB3b3JkKQoreworICAg IHVpbnQzMl90IGJpdHMgPSAod29yZCA+PiAxNCkgJiAweDM7CisgICAgcmV0dXJuICgoYml0cyA9 PSAweDMpIHx8IChiaXRzID09IDB4MCkpOworfQorCitleHRlcm4gdm9pZCBkZWNvZGVfc2VuZF9p bnNuX3RvKHBhY2tldF90ICpwYWNrZXQsIGludCBzdGFydCwgaW50IG5ld2xvYyk7CisKK2V4dGVy biBwYWNrZXRfdCAqZGVjb2RlX3RoaXMoaW50IG1heF93b3Jkcywgc2l6ZTR1X3QgKndvcmRzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfdCAqZGVjb2RlX3BrdCk7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMgYi90YXJnZXQvaGV4YWdv bi9kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTg4MmJjCi0t LSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMKQEAgLTAsMCArMSw1OTMg QEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENl bnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNs dWRlICJxZW11L2xvZy5oIgorI2luY2x1ZGUgImljbGFzcy5oIgorI2luY2x1ZGUgIm9wY29kZXMu aCIKKyNpbmNsdWRlICJnZW5wdHIuaCIKKyNpbmNsdWRlICJkZWNvZGUuaCIKKyNpbmNsdWRlICJp bnNuLmgiCisjaW5jbHVkZSAicHJpbnRpbnNuLmgiCisKKyNkZWZpbmUgZlpYVE4oTiwgTSwgVkFM KSAoKFZBTCkgJiAoKDFMTCA8PCAoTikpIC0gMSkpCisKK2VudW0geworICAgIEVYVF9JRFhfbm9l eHQgPSAwLAorICAgIEVYVF9JRFhfbm9leHRfQUZURVIgPSA0LAorICAgIEVYVF9JRFhfbW12ZWMg PSA0LAorICAgIEVYVF9JRFhfbW12ZWNfQUZURVIgPSA4LAorICAgIFhYX0xBU1RfRVhUX0lEWAor fTsKKworI2RlZmluZSBERUZfUkVHTUFQKE5BTUUsIEVMRU1FTlRTLCAuLi4pIFwKKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgaW50IERFQ09ERV9SRUdJU1RFUl8jI05BTUVbRUxFTUVOVFNdID0g XAorICAgIHsgX19WQV9BUkdTX18gfTsKKyNpbmNsdWRlICJyZWdtYXAuaCIKKworI2RlZmluZSBE RUNPREVfTUFQUEVEX1JFRyhSRUdOTywgTkFNRSkgXAorICAgIGluc24tPnJlZ25vW1JFR05PXSA9 IERFQ09ERV9SRUdJU1RFUl8jI05BTUVbaW5zbi0+cmVnbm9bUkVHTk9dXTsKKwordHlwZWRlZiBz dHJ1Y3QgeworICAgIHN0cnVjdCBfZGVjdHJlZV90YWJsZV9zdHJ1Y3QgKnRhYmxlX2xpbms7Cisg ICAgc3RydWN0IF9kZWN0cmVlX3RhYmxlX3N0cnVjdCAqdGFibGVfbGlua19iOworICAgIG9wY29k ZV90IG9wY29kZTsKKyAgICBlbnVtIHsKKyAgICAgICAgREVDVFJFRV9FTlRSWV9JTlZBTElELAor ICAgICAgICBERUNUUkVFX1RBQkxFX0xJTkssCisgICAgICAgIERFQ1RSRUVfU1VCSU5TTlMsCisg ICAgICAgIERFQ1RSRUVfRVhUU1BBQ0UsCisgICAgICAgIERFQ1RSRUVfVEVSTUlOQUwKKyAgICB9 IHR5cGU7Cit9IGRlY3RyZWVfZW50cnlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RlY3RyZWVfdGFi bGVfc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgKCpsb29rdXBfZnVuY3Rpb24pKGludCBzdGFy dGJpdCwgaW50IHdpZHRoLCBzaXplNHVfdCBvcGNvZGUpOworICAgIHVuc2lnbmVkIGludCBzaXpl OworICAgIHVuc2lnbmVkIGludCBzdGFydGJpdDsKKyAgICB1bnNpZ25lZCBpbnQgd2lkdGg7Cisg ICAgZGVjdHJlZV9lbnRyeV90IHRhYmxlW107Cit9IGRlY3RyZWVfdGFibGVfdDsKKworI2RlZmlu ZSBERUNPREVfTkVXX1RBQkxFKFRBRywgU0laRSwgV0hBVE5PVCkgXAorICAgIHN0YXRpYyBzdHJ1 Y3QgX2RlY3RyZWVfdGFibGVfc3RydWN0IGRlY3RyZWVfdGFibGVfIyNUQUc7CisjZGVmaW5lIFRB QkxFX0xJTksoVEFCTEUpICAgICAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmlu ZSBURVJNSU5BTChUQUcsIEVOQykgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNk ZWZpbmUgU1VCSU5TTlMoVEFHLCBDTEFTU0EsIENMQVNTQiwgRU5DKSAgICAvKiBOT1RISU5HICov CisjZGVmaW5lIEVYVFNQQUNFKFRBRywgRU5DKSAgICAgICAgICAgICAgICAgICAgLyogTk9USElO RyAqLworI2RlZmluZSBJTlZBTElEKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5P VEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX0VORF9UQUJMRSguLi4pICAgICAgICAgICAgICAgICAv KiBOT1RISU5HICovCisjZGVmaW5lIERFQ09ERV9NQVRDSF9JTkZPKC4uLikgICAgICAgICAgICAg ICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNPREVfTEVHQUNZX01BVENIX0lORk8oLi4uKSAg ICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX09QSU5GTyguLi4pICAgICAgICAg ICAgICAgICAgICAvKiBOT1RISU5HICovCisKKyNpbmNsdWRlICJkZWN0cmVlX2dlbmVyYXRlZC5o IgorCisjdW5kZWYgREVDT0RFX09QSU5GTworI3VuZGVmIERFQ09ERV9NQVRDSF9JTkZPCisjdW5k ZWYgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0VORF9UQUJMRQorI3Vu ZGVmIElOVkFMSUQKKyN1bmRlZiBURVJNSU5BTAorI3VuZGVmIFNVQklOU05TCisjdW5kZWYgRVhU U1BBQ0UKKyN1bmRlZiBUQUJMRV9MSU5LCisjdW5kZWYgREVDT0RFX05FV19UQUJMRQorI3VuZGVm IERFQ09ERV9TRVBBUkFUT1JfQklUUworCisjZGVmaW5lIERFQ09ERV9TRVBBUkFUT1JfQklUUyhT VEFSVCwgV0lEVEgpIE5VTEwsIFNUQVJULCBXSURUSAorI2RlZmluZSBERUNPREVfTkVXX1RBQkxF X0hFTFBFUihUQUcsIFNJWkUsIEZOLCBTVEFSVCwgV0lEVEgpIFwKKyAgICBzdGF0aWMgZGVjdHJl ZV90YWJsZV90IGRlY3RyZWVfdGFibGVfIyNUQUcgPSB7IFwKKyAgICAgICAgLnNpemUgPSBTSVpF LCBcCisgICAgICAgIC5sb29rdXBfZnVuY3Rpb24gPSBGTiwgXAorICAgICAgICAuc3RhcnRiaXQg PSBTVEFSVCwgXAorICAgICAgICAud2lkdGggPSBXSURUSCwgXAorICAgICAgICAudGFibGUgPSB7 CisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBXSEFUTk9UKSBcCisgICAgREVD T0RFX05FV19UQUJMRV9IRUxQRVIoVEFHLCBTSVpFLCBXSEFUTk9UKQorCisjZGVmaW5lIFRBQkxF X0xJTksoVEFCTEUpIFwKKyAgICB7IC50eXBlID0gREVDVFJFRV9UQUJMRV9MSU5LLCAudGFibGVf bGluayA9ICZkZWN0cmVlX3RhYmxlXyMjVEFCTEUgfSwKKyNkZWZpbmUgVEVSTUlOQUwoVEFHLCBF TkMpIFwKKyAgICB7IC50eXBlID0gREVDVFJFRV9URVJNSU5BTCwgLm9wY29kZSA9IFRBRyAgfSwK KyNkZWZpbmUgU1VCSU5TTlMoVEFHLCBDTEFTU0EsIENMQVNTQiwgRU5DKSBcCisgICAgeyBcCisg ICAgICAgIC50eXBlID0gREVDVFJFRV9TVUJJTlNOUywgXAorICAgICAgICAudGFibGVfbGluayA9 ICZkZWN0cmVlX3RhYmxlX0RFQ09ERV9TVUJJTlNOXyMjQ0xBU1NBLCBcCisgICAgICAgIC50YWJs ZV9saW5rX2IgPSAmZGVjdHJlZV90YWJsZV9ERUNPREVfU1VCSU5TTl8jI0NMQVNTQiBcCisgICAg fSwKKyNkZWZpbmUgRVhUU1BBQ0UoVEFHLCBFTkMpIHsgLnR5cGUgPSBERUNUUkVFX0VYVFNQQUNF IH0sCisjZGVmaW5lIElOVkFMSUQoKSB7IC50eXBlID0gREVDVFJFRV9FTlRSWV9JTlZBTElELCAu b3Bjb2RlID0gWFhfTEFTVF9PUENPREUgfSwKKworI2RlZmluZSBERUNPREVfRU5EX1RBQkxFKC4u LikgfSB9OworCisjZGVmaW5lIERFQ09ERV9NQVRDSF9JTkZPKC4uLikgICAgICAgICAgICAgICAg LyogTk9USElORyAqLworI2RlZmluZSBERUNPREVfTEVHQUNZX01BVENIX0lORk8oLi4uKSAgICAg ICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX09QSU5GTyguLi4pICAgICAgICAgICAg ICAgICAgICAvKiBOT1RISU5HICovCisKKyNpbmNsdWRlICJkZWN0cmVlX2dlbmVyYXRlZC5oIgor CisjdW5kZWYgREVDT0RFX09QSU5GTworI3VuZGVmIERFQ09ERV9NQVRDSF9JTkZPCisjdW5kZWYg REVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0VORF9UQUJMRQorI3VuZGVm IElOVkFMSUQKKyN1bmRlZiBURVJNSU5BTAorI3VuZGVmIFNVQklOU05TCisjdW5kZWYgRVhUU1BB Q0UKKyN1bmRlZiBUQUJMRV9MSU5LCisjdW5kZWYgREVDT0RFX05FV19UQUJMRQorI3VuZGVmIERF Q09ERV9ORVdfVEFCTEVfSEVMUEVSCisjdW5kZWYgREVDT0RFX1NFUEFSQVRPUl9CSVRTCisKK3N0 YXRpYyBkZWN0cmVlX3RhYmxlX3QgZGVjdHJlZV90YWJsZV9ERUNPREVfRVhUX0VYVF9ub2V4dCA9 IHsKKyAgICAuc2l6ZSA9IDEsIC5sb29rdXBfZnVuY3Rpb24gPSBOVUxMLCAuc3RhcnRiaXQgPSAw LCAud2lkdGggPSAwLAorICAgIC50YWJsZSA9IHsKKyAgICAgICAgeyAudHlwZSA9IERFQ1RSRUVf RU5UUllfSU5WQUxJRCwgLm9wY29kZSA9IFhYX0xBU1RfT1BDT0RFIH0sCisgICAgfQorfTsKKwor c3RhdGljIGRlY3RyZWVfdGFibGVfdCAqZXh0X3RyZWVzW1hYX0xBU1RfRVhUX0lEWF07CisKK3N0 YXRpYyB2b2lkIGRlY29kZV9leHRfaW5pdCh2b2lkKQoreworICAgIGludCBpOworICAgIGZvciAo aSA9IEVYVF9JRFhfbm9leHQ7IGkgPCBFWFRfSURYX25vZXh0X0FGVEVSOyBpKyspIHsKKyAgICAg ICAgZXh0X3RyZWVzW2ldID0gJmRlY3RyZWVfdGFibGVfREVDT0RFX0VYVF9FWFRfbm9leHQ7Cisg ICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgc2l6ZTR1X3QgbWFzazsKKyAgICBzaXpl NHVfdCBtYXRjaDsKK30gZGVjb2RlX2l0YWJsZV9lbnRyeV90OworCisjZGVmaW5lIERFQ09ERV9O RVdfVEFCTEUoVEFHLCBTSVpFLCBXSEFUTk9UKSAgLyogTk9USElORyAqLworI2RlZmluZSBUQUJM RV9MSU5LKFRBQkxFKSAgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUg VEVSTUlOQUwoVEFHLCBFTkMpICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVm aW5lIFNVQklOU05TKFRBRywgQ0xBU1NBLCBDTEFTU0IsIEVOQykgICAgLyogTk9USElORyAqLwor I2RlZmluZSBFWFRTUEFDRShUQUcsIEVOQykgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcg Ki8KKyNkZWZpbmUgSU5WQUxJRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RI SU5HICovCisjZGVmaW5lIERFQ09ERV9FTkRfVEFCTEUoLi4uKSAgICAgICAgICAgICAgICAgLyog Tk9USElORyAqLworI2RlZmluZSBERUNPREVfT1BJTkZPKC4uLikgICAgICAgICAgICAgICAgICAg IC8qIE5PVEhJTkcgKi8KKworI2RlZmluZSBERUNPREVfTUFUQ0hfSU5GT19OT1JNQUwoVEFHLCBN QVNLLCBNQVRDSCkgXAorICAgIFtUQUddID0geyBcCisgICAgICAgIC5tYXNrID0gTUFTSywgXAor ICAgICAgICAubWF0Y2ggPSBNQVRDSCwgXAorICAgIH0sCisKKyNkZWZpbmUgREVDT0RFX01BVENI X0lORk9fTlVMTChUQUcsIE1BU0ssIE1BVENIKSBcCisgICAgW1RBR10gPSB7IC5tYXRjaCA9IH4w IH0sCisKKyNkZWZpbmUgREVDT0RFX01BVENIX0lORk8oLi4uKSBERUNPREVfTUFUQ0hfSU5GT19O T1JNQUwoX19WQV9BUkdTX18pCisjZGVmaW5lIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTyguLi4p IC8qIE5PVEhJTkcgKi8KKworc3RhdGljIGNvbnN0IGRlY29kZV9pdGFibGVfZW50cnlfdCBkZWNv ZGVfaXRhYmxlW1hYX0xBU1RfT1BDT0RFXSA9IHsKKyNpbmNsdWRlICJkZWN0cmVlX2dlbmVyYXRl ZC5oIgorfTsKKworI3VuZGVmIERFQ09ERV9NQVRDSF9JTkZPCisjZGVmaW5lIERFQ09ERV9NQVRD SF9JTkZPKC4uLikgREVDT0RFX01BVENIX0lORk9fTlVMTChfX1ZBX0FSR1NfXykKKworI3VuZGVm IERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTworI2RlZmluZSBERUNPREVfTEVHQUNZX01BVENIX0lO Rk8oLi4uKSBERUNPREVfTUFUQ0hfSU5GT19OT1JNQUwoX19WQV9BUkdTX18pCisKK3N0YXRpYyBj b25zdCBkZWNvZGVfaXRhYmxlX2VudHJ5X3QgZGVjb2RlX2xlZ2FjeV9pdGFibGVbWFhfTEFTVF9P UENPREVdID0geworI2luY2x1ZGUgImRlY3RyZWVfZ2VuZXJhdGVkLmgiCit9OworCisjdW5kZWYg REVDT0RFX09QSU5GTworI3VuZGVmIERFQ09ERV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0xF R0FDWV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0VORF9UQUJMRQorI3VuZGVmIElOVkFMSUQK KyN1bmRlZiBURVJNSU5BTAorI3VuZGVmIFNVQklOU05TCisjdW5kZWYgRVhUU1BBQ0UKKyN1bmRl ZiBUQUJMRV9MSU5LCisjdW5kZWYgREVDT0RFX05FV19UQUJMRQorI3VuZGVmIERFQ09ERV9TRVBB UkFUT1JfQklUUworCit2b2lkIGRlY29kZV9pbml0KHZvaWQpCit7CisgICAgZGVjb2RlX2V4dF9p bml0KCk7Cit9CisKK3ZvaWQgZGVjb2RlX3NlbmRfaW5zbl90byhwYWNrZXRfdCAqcGFja2V0LCBp bnQgc3RhcnQsIGludCBuZXdsb2MpCit7CisgICAgaW5zbl90IHRtcGluc247CisgICAgaW50IGRp cmVjdGlvbjsKKyAgICBpbnQgaTsKKyAgICBpZiAoc3RhcnQgPT0gbmV3bG9jKSB7CisgICAgICAg IHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0YXJ0IDwgbmV3bG9jKSB7CisgICAgICAgIC8qIE1v dmUgdG93YXJkcyBlbmQgKi8KKyAgICAgICAgZGlyZWN0aW9uID0gMTsKKyAgICB9IGVsc2Ugewor ICAgICAgICAvKiBtb3ZlIHRvd2FyZHMgYmVnaW5uaW5nICovCisgICAgICAgIGRpcmVjdGlvbiA9 IC0xOworICAgIH0KKyAgICBmb3IgKGkgPSBzdGFydDsgaSAhPSBuZXdsb2M7IGkgKz0gZGlyZWN0 aW9uKSB7CisgICAgICAgIHRtcGluc24gPSBwYWNrZXQtPmluc25baV07CisgICAgICAgIHBhY2tl dC0+aW5zbltpXSA9IHBhY2tldC0+aW5zbltpICsgZGlyZWN0aW9uXTsKKyAgICAgICAgcGFja2V0 LT5pbnNuW2kgKyBkaXJlY3Rpb25dID0gdG1waW5zbjsKKyAgICB9Cit9CisKKy8qIEZpbGwgbmV3 dmFsdWUgcmVnaXN0ZXJzIHdpdGggdGhlIGNvcnJlY3QgcmVnbm8gKi8KK3N0YXRpYyBpbnQKK2Rl Y29kZV9maWxsX25ld3ZhbHVlX3JlZ25vKHBhY2tldF90ICpwYWNrZXQpCit7CisgICAgaW50IGks IHVzZV9yZWdpZHgsIGRlZl9pZHg7CisgICAgc2l6ZTJ1X3QgZGVmX29wY29kZSwgdXNlX29wY29k ZTsKKyAgICBjaGFyICpkc3RzdHI7CisKKyAgICBmb3IgKGkgPSAxOyBpIDwgcGFja2V0LT5udW1f aW5zbnM7IGkrKykgeworICAgICAgICBpZiAoR0VUX0FUVFJJQihwYWNrZXQtPmluc25baV0ub3Bj b2RlLCBBX0RPVE5FV1ZBTFVFKSAmJgorICAgICAgICAgICAgIUdFVF9BVFRSSUIocGFja2V0LT5p bnNuW2ldLm9wY29kZSwgQV9FWFRFTlNJT04pKSB7CisgICAgICAgICAgICB1c2Vfb3Bjb2RlID0g cGFja2V0LT5pbnNuW2ldLm9wY29kZTsKKworICAgICAgICAgICAgLyogSXQncyBhIHN0b3JlLCBz byB3ZSdyZSBhZGp1c3RpbmcgdGhlIE50IGZpZWxkICovCisgICAgICAgICAgICBpZiAoR0VUX0FU VFJJQih1c2Vfb3Bjb2RlLCBBX1NUT1JFKSkgeworICAgICAgICAgICAgICAgIHVzZV9yZWdpZHgg PSBzdHJjaHIob3Bjb2RlX3JlZ2luZm9bdXNlX29wY29kZV0sICd0JykgLQorICAgICAgICAgICAg ICAgICAgICBvcGNvZGVfcmVnaW5mb1t1c2Vfb3Bjb2RlXTsKKyAgICAgICAgICAgIH0gZWxzZSB7 ICAgIC8qIEl0J3MgYSBKdW1wLCBzbyB3ZSdyZSBhZGp1c3RpbmcgdGhlIE5zIGZpZWxkICovCisg ICAgICAgICAgICAgICAgdXNlX3JlZ2lkeCA9IHN0cmNocihvcGNvZGVfcmVnaW5mb1t1c2Vfb3Bj b2RlXSwgJ3MnKSAtCisgICAgICAgICAgICAgICAgICAgIG9wY29kZV9yZWdpbmZvW3VzZV9vcGNv ZGVdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2hh dCdzIGVuY29kZWQgYXQgdGhlIE4tZmllbGQgaXMgdGhlIG9mZnNldCB0byB3aG8ncyBwcm9kdWNp bmcKKyAgICAgICAgICAgICAqIHRoZSB2YWx1ZS4gIFNoaWZ0IG9mZiB0aGUgTFNCIHdoaWNoIGlu ZGljYXRlcyBvZGQvZXZlbiByZWdpc3Rlci4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg ZGVmX2lkeCA9IGkgLSAoKHBhY2tldC0+aW5zbltpXS5yZWdub1t1c2VfcmVnaWR4XSkgPj4gMSk7 CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBDaGVjayBmb3IgYSBiYWRseSBlbmNv ZGVkIE4tZmllbGQgd2hpY2ggcG9pbnRzIHRvIGFuIGluc3RydWN0aW9uCisgICAgICAgICAgICAg KiBvdXQtb2YtcmFuZ2UKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKChkZWZfaWR4 IDwgMCkgfHwgKGRlZl9pZHggPiAocGFja2V0LT5udW1faW5zbnMgLSAxKSkpIHsKKyAgICAgICAg ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICAgICAgICAgIHJldHVybiAx OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBwcmV2aW91cyBpbnNuIGlzIHRoZSBw cm9kdWNlciAqLworICAgICAgICAgICAgZGVmX29wY29kZSA9IHBhY2tldC0+aW5zbltkZWZfaWR4 XS5vcGNvZGU7CisgICAgICAgICAgICBkc3RzdHIgPSBzdHJzdHIob3Bjb2RlX3dyZWdzW2RlZl9v cGNvZGVdLCAiUmQiKTsKKyAgICAgICAgICAgIGlmIChkc3RzdHIpIHsKKyAgICAgICAgICAgICAg ICBkc3RzdHIgPSBzdHJjaHIob3Bjb2RlX3JlZ2luZm9bZGVmX29wY29kZV0sICdkJyk7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRzdHN0ciA9IHN0cnN0cihvcGNvZGVf d3JlZ3NbZGVmX29wY29kZV0sICJSeCIpOworICAgICAgICAgICAgICAgIGlmIChkc3RzdHIpIHsK KyAgICAgICAgICAgICAgICAgICAgZHN0c3RyID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW2RlZl9v cGNvZGVdLCAneCcpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgIGRzdHN0ciA9IHN0cnN0cihvcGNvZGVfd3JlZ3NbZGVmX29wY29kZV0sICJSZSIpOworICAg ICAgICAgICAgICAgICAgICBpZiAoZHN0c3RyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBk c3RzdHIgPSBzdHJjaHIob3Bjb2RlX3JlZ2luZm9bZGVmX29wY29kZV0sICdlJyk7CisgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkc3RzdHIgPSBz dHJzdHIob3Bjb2RlX3dyZWdzW2RlZl9vcGNvZGVdLCAiUnkiKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChkc3RzdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RzdHIg PSBzdHJjaHIob3Bjb2RlX3JlZ2luZm9bZGVmX29wY29kZV0sICd5Jyk7CisgICAgICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfYXNzZXJ0 X25vdF9yZWFjaGVkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnX2Fzc2VydChkc3RzdHIgIT0g TlVMTCk7CisKKyAgICAgICAgICAgIC8qIE5vdyBwYXRjaCB1cCB0aGUgY29uc3VtZXIgd2l0aCB0 aGUgcmVnaXN0ZXIgbnVtYmVyICovCisgICAgICAgICAgICBwYWNrZXQtPmluc25baV0ucmVnbm9b dXNlX3JlZ2lkeF0gPQorICAgICAgICAgICAgICAgIHBhY2tldC0+aW5zbltkZWZfaWR4XS5yZWdu b1tkc3RzdHIgLQorICAgICAgICAgICAgICAgICAgICBvcGNvZGVfcmVnaW5mb1tkZWZfb3Bjb2Rl XV07CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2UgbmVlZCB0byByZW1lbWJlciB3 aG8gcHJvZHVjZXMgdGhpcyB2YWx1ZSB0byBsYXRlcgorICAgICAgICAgICAgICogY2hlY2sgaWYg aXQgd2FzIGR5bmFtaWNhbGx5IGNhbmNlbGxlZAorICAgICAgICAgICAgICovCisgICAgICAgICAg ICBwYWNrZXQtPmluc25baV0ubmV3X3ZhbHVlX3Byb2R1Y2VyX3Nsb3QgPQorICAgICAgICAgICAg ICAgIHBhY2tldC0+aW5zbltkZWZfaWR4XS5zbG90OworICAgICAgICB9CisgICAgfQorICAgIHJl dHVybiAwOworfQorCisvKiBTcGxpdCBDSiBpbnRvIGEgY29tcGFyZSBhbmQgYSBqdW1wICovCitz dGF0aWMgaW50IGRlY29kZV9zcGxpdF9jbXBqdW1wKHBhY2tldF90ICpwa3QpCit7CisgICAgaW50 IGxhc3QsIGk7CisgICAgaW50IG51bWluc25zID0gcGt0LT5udW1faW5zbnM7CisKKyAgICAvKgor ICAgICAqIEZpcnN0LCBzcGxpdCBhbGwgY29tcGFyZS1qdW1wcy4KKyAgICAgKiBUaGUgY29tcGFy ZSBpcyBzZW50IHRvIHRoZSBlbmQgYXMgYSBuZXcgaW5zdHJ1Y3Rpb24uCisgICAgICogRG8gaXQg dGhpcyB3YXkgc28gd2UgZG9uJ3QgcmVvcmRlciBkdWFsIGp1bXBzLiBUaG9zZSBuZWVkIHRvIHN0 YXkgaW4KKyAgICAgKiBvcmlnaW5hbCBvcmRlci4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBp IDwgbnVtaW5zbnM7IGkrKykgeworICAgICAgICAvKiBJdCdzIGEgY21wLWp1bXAgKi8KKyAgICAg ICAgaWYgKEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9ORVdDTVBKVU1QKSkgewor ICAgICAgICAgICAgbGFzdCA9IHBrdC0+bnVtX2luc25zOworICAgICAgICAgICAgcGt0LT5pbnNu W2xhc3RdID0gcGt0LT5pbnNuW2ldOyAgICAvKiBjb3B5IHRoZSBpbnN0cnVjdGlvbiAqLworICAg ICAgICAgICAgcGt0LT5pbnNuW2xhc3RdLnBhcnQxID0gMTsgICAgLyogbGFzdCBpbnN0cnVjdGlv biBkb2VzIHRoZSBDTVAgKi8KKyAgICAgICAgICAgIHBrdC0+aW5zbltpXS5wYXJ0MSA9IDA7ICAg IC8qIGV4aXN0aW5nIGluc3RydWN0aW9uIGRvZXMgdGhlIEpVTVAgKi8KKyAgICAgICAgcGt0LT5u dW1faW5zbnMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIE5vdyByZS1zaHVmZmxlIGFs bCB0aGUgY29tcGFyZXMgYmFjayB0byB0aGUgYmVnaW5uaW5nICovCisgICAgZm9yIChpID0gMDsg aSA8IHBrdC0+bnVtX2luc25zOyBpKyspIHsKKyAgICAgICAgaWYgKHBrdC0+aW5zbltpXS5wYXJ0 MSkgeworICAgICAgICAgICAgZGVjb2RlX3NlbmRfaW5zbl90byhwa3QsIGksIDApOworICAgICAg ICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZWNvZGVf b3Bjb2RlX2Nhbl9qdW1wKGludCBvcGNvZGUpCit7CisgICAgaWYgKChHRVRfQVRUUklCKG9wY29k ZSwgQV9KVU1QKSkgfHwKKyAgICAgICAgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NBTEwpKSB8fAor ICAgICAgICAob3Bjb2RlID09IEoyX3RyYXAwKSkgeworICAgICAgICAvKiBFeGNlcHRpb24gdG8g QV9KVU1QIGF0dHJpYnV0ZSAqLworICAgICAgICBpZiAob3Bjb2RlID09IEo0X2hpbnRqdW1wcikg eworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRlY29kZV9vcGNv ZGVfZW5kc19sb29wKGludCBvcGNvZGUpCit7CisgICAgcmV0dXJuIEdFVF9BVFRSSUIob3Bjb2Rl LCBBX0hXTE9PUDBfRU5EKSB8fAorICAgICAgICAgICBHRVRfQVRUUklCKG9wY29kZSwgQV9IV0xP T1AxX0VORCk7Cit9CisKKy8qIFNldCB0aGUgaXNfKiBmaWVsZHMgaW4gZWFjaCBpbnN0cnVjdGlv biAqLworc3RhdGljIGludCBkZWNvZGVfc2V0X2luc25fYXR0cl9maWVsZHMocGFja2V0X3QgKnBr dCkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgbnVtaW5zbnMgPSBwa3QtPm51bV9pbnNuczsKKyAg ICBzaXplMnVfdCBvcGNvZGU7CisgICAgaW50IGNhbmp1bXA7CisKKyAgICBwa3QtPnBrdF9oYXNf Y29mID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfZW5kbG9vcCA9IDA7CisgICAgcGt0LT5wa3RfaGFz X2RjemVyb2EgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bWluc25zOyBpKyspIHsKKyAg ICAgICAgb3Bjb2RlID0gcGt0LT5pbnNuW2ldLm9wY29kZTsKKyAgICAgICAgaWYgKHBrdC0+aW5z bltpXS5wYXJ0MSkgeworICAgICAgICAgICAgY29udGludWU7ICAgIC8qIFNraXAgY29tcGFyZSBv ZiBjbXAtanVtcHMgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29k ZSwgQV9EQ1pFUk9BKSkgeworICAgICAgICAgICAgcGt0LT5wa3RfaGFzX2RjemVyb2EgPSAxOwor ICAgICAgICB9CisKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX1NUT1JFKSkgewor ICAgICAgICAgICAgaWYgKHBrdC0+aW5zbltpXS5zbG90ID09IDApIHsKKyAgICAgICAgICAgICAg ICBwa3QtPnBrdF9oYXNfc3RvcmVfczAgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICBwa3QtPnBrdF9oYXNfc3RvcmVfczEgPSAxOworICAgICAgICAgICAgfQorICAg ICAgICB9CisKKyAgICAgICAgY2FuanVtcCA9IGRlY29kZV9vcGNvZGVfY2FuX2p1bXAob3Bjb2Rl KTsKKyAgICAgICAgcGt0LT5wa3RfaGFzX2NvZiB8PSBjYW5qdW1wOworCisgICAgICAgIHBrdC0+ aW5zbltpXS5pc19lbmRsb29wID0gZGVjb2RlX29wY29kZV9lbmRzX2xvb3Aob3Bjb2RlKTsKKwor ICAgICAgICBwa3QtPnBrdF9oYXNfZW5kbG9vcCB8PSBwa3QtPmluc25baV0uaXNfZW5kbG9vcDsK KworICAgICAgICBwa3QtPnBrdF9oYXNfY29mIHw9IHBrdC0+cGt0X2hhc19lbmRsb29wOworICAg IH0KKworICAgIHJldHVybiAwOworfQorCisvKgorICogU2h1ZmZsZSBmb3IgZXhlY3V0aW9uCisg KiBNb3ZlIHN0b3JlcyB0byBlbmQgKGluIHNhbWUgb3JkZXIgYXMgZW5jb2RpbmcpCisgKiBNb3Zl IGNvbXBhcmVzIHRvIGJlZ2lubmluZyAoZm9yIHVzZSBieSAubmV3IGluc25zKQorICovCitzdGF0 aWMgaW50IGRlY29kZV9zaHVmZmxlX2Zvcl9leGVjdXRpb24ocGFja2V0X3QgKnBhY2tldCkKK3sK KyAgICBpbnQgY2hhbmdlZCA9IDA7CisgICAgaW50IGk7CisgICAgaW50IGZsYWc7ICAgIC8qIGZs YWcgbWVhbnMgd2UndmUgc2VlbiBhIG5vbi1tZW1vcnkgaW5zdHJ1Y3Rpb24gKi8KKyAgICBpbnQg bl9tZW1zOworICAgIGludCBsYXN0X2luc24gPSBwYWNrZXQtPm51bV9pbnNucyAtIDE7CisKKyAg ICAvKgorICAgICAqIFNraXAgZW5kIGxvb3BzLCBzb21laG93IGFuIGVuZCBsb29wIGlzIGdldHRp bmcgaW4gYW5kIG1lc3NpbmcKKyAgICAgKiB1cCB0aGUgb3JkZXIKKyAgICAgKi8KKyAgICBpZiAo ZGVjb2RlX29wY29kZV9lbmRzX2xvb3AocGFja2V0LT5pbnNuW2xhc3RfaW5zbl0ub3Bjb2RlKSkg eworICAgICAgICBsYXN0X2luc24tLTsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIGNoYW5n ZWQgPSAwOworICAgICAgICAvKgorICAgICAgICAgKiBTdG9yZXMgZ28gbGFzdCwgbXVzdCBub3Qg cmVvcmRlci4KKyAgICAgICAgICogQ2Fubm90IHNodWZmbGUgc3RvcmVzIHBhc3QgbG9hZHMsIGVp dGhlci4KKyAgICAgICAgICogSXRlcmF0ZSBiYWNrd2FyZHMuICBJZiB3ZSBzZWUgYSBub24tbWVt b3J5IGluc3RydWN0aW9uLAorICAgICAgICAgKiB0aGVuIGEgc3RvcmUsIHNodWZmbGUgdGhlIHN0 b3JlIHRvIHRoZSBmcm9udC4gIERvbid0IHNodWZmbGUKKyAgICAgICAgICogIHN0b3JlcyB3cnQg ZWFjaCBvdGhlciBvciBhIGxvYWQuCisgICAgICAgICAqLworICAgICAgICBmb3IgKGZsYWcgPSBu X21lbXMgPSAwLCBpID0gbGFzdF9pbnNuOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaW50 IG9wY29kZSA9IHBhY2tldC0+aW5zbltpXS5vcGNvZGU7CisKKyAgICAgICAgICAgIGlmIChmbGFn ICYmIEdFVF9BVFRSSUIob3Bjb2RlLCBBX1NUT1JFKSkgeworICAgICAgICAgICAgICAgIGRlY29k ZV9zZW5kX2luc25fdG8ocGFja2V0LCBpLCBsYXN0X2luc24gLSBuX21lbXMpOworICAgICAgICAg ICAgICAgIG5fbWVtcysrOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOworICAgICAgICAg ICAgfSBlbHNlIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9TVE9SRSkpIHsKKyAgICAgICAgICAg ICAgICBuX21lbXMrKzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihvcGNvZGUs IEFfTE9BRCkpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIERvbid0 IHNldCBmbGFnLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIHNodWZmbGUgYQorICAgICAgICAgICAg ICAgICAqIHN0b3JlIHBhc3RhIGxvYWQKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg ICAgICBuX21lbXMrKzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihvcGNvZGUs IEFfRE9UTkVXVkFMVUUpKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAg KiBEb24ndCBzZXQgZmxhZywgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBzaHVmZmxlIHBhc3QKKyAg ICAgICAgICAgICAgICAgKiBhIC5uZXcgdmFsdWUKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgIH0KKyAgICAgICAgLyogQ29tcGFyZXMgZ28gZmlyc3QsIG1heSBiZSByZW9y ZGVyZWQgd3J0IGVhY2ggb3RoZXIgKi8KKyAgICAgICAgZm9yIChmbGFnID0gMCwgaSA9IDA7IGkg PCBsYXN0X2luc24gKyAxOyBpKyspIHsKKyAgICAgICAgICAgIGludCBvcGNvZGUgPSBwYWNrZXQt Pmluc25baV0ub3Bjb2RlOworCisgICAgICAgICAgICBpZiAoKHN0cnN0cihvcGNvZGVfd3JlZ3Nb b3Bjb2RlXSwgIlBkNCIpIHx8CisgICAgICAgICAgICAgICAgIHN0cnN0cihvcGNvZGVfd3JlZ3Nb b3Bjb2RlXSwgIlBlNCIpKSAmJgorICAgICAgICAgICAgICAgIEdFVF9BVFRSSUIob3Bjb2RlLCBB X1NUT1JFKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgLyogVGhpcyBzaG91bGQgYmUgYSBjb21w YXJlIChub3QgYSBzdG9yZSBjb25kaXRpb25hbCkgKi8KKyAgICAgICAgICAgICAgICBpZiAoZmxh ZykgeworICAgICAgICAgICAgICAgICAgICBkZWNvZGVfc2VuZF9pbnNuX3RvKHBhY2tldCwgaSwg MCk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOworICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKEdF VF9BVFRSSUIob3Bjb2RlLCBBX0lNUExJQ0lUX1dSSVRFU19QMykgJiYKKyAgICAgICAgICAgICAg ICAgICAgICAgIWRlY29kZV9vcGNvZGVfZW5kc19sb29wKHBhY2tldC0+aW5zbltpXS5vcGNvZGUp KSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBzcE5sb29wIGluc3Ry dWN0aW9uCisgICAgICAgICAgICAgICAgICogRG9uJ3QgcmVvcmRlciBlbmRsb29wczsgdGhleSBh cmUgbm90IHZhbGlkIGZvciAubmV3IHVzZXMsCisgICAgICAgICAgICAgICAgICogYW5kIHdlIHdh bnQgdG8gbWF0Y2ggSFcKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAo ZmxhZykgeworICAgICAgICAgICAgICAgICAgICBkZWNvZGVfc2VuZF9pbnNuX3RvKHBhY2tldCwg aSwgMCk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOworICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYg KEdFVF9BVFRSSUIob3Bjb2RlLCBBX0lNUExJQ0lUX1dSSVRFU19QMCkgJiYKKyAgICAgICAgICAg ICAgICAgICAgICAgIUdFVF9BVFRSSUIob3Bjb2RlLCBBX05FV0NNUEpVTVApKSB7CisgICAgICAg ICAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlX3NlbmRfaW5z bl90byhwYWNrZXQsIGksIDApOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIC8qCisgICAgICogSWYgd2Ug aGF2ZSBhIC5uZXcgcmVnaXN0ZXIgY29tcGFyZS9icmFuY2gsIG1vdmUgdGhhdCB0byB0aGUgdmVy eQorICAgICAqIHZlcnkgZW5kLCBwYXN0IHN0b3JlcworICAgICAqLworICAgIGZvciAoaSA9IDA7 IGkgPCBsYXN0X2luc247IGkrKykgeworICAgICAgICBpZiAoR0VUX0FUVFJJQihwYWNrZXQtPmlu c25baV0ub3Bjb2RlLCBBX0RPVE5FV1ZBTFVFKSkgeworICAgICAgICAgICAgZGVjb2RlX3NlbmRf aW5zbl90byhwYWNrZXQsIGksIGxhc3RfaW5zbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CithcHBseV9leHRl bmRlcihwYWNrZXRfdCAqcGt0LCBpbnQgaSwgc2l6ZTR1X3QgZXh0ZW5kZXIpCit7CisgICAgaW50 IGltbWVkX251bTsKKyAgICBzaXplNHVfdCBiYXNlX2ltbWVkOworCisgICAgaW1tZWRfbnVtID0g b3Bjb2RlX3doaWNoX2ltbWVkaWF0ZV9pc19leHRlbmRlZChwa3QtPmluc25baV0ub3Bjb2RlKTsK KyAgICBiYXNlX2ltbWVkID0gcGt0LT5pbnNuW2ldLmltbWVkW2ltbWVkX251bV07CisKKyAgICBw a3QtPmluc25baV0uaW1tZWRbaW1tZWRfbnVtXSA9IGV4dGVuZGVyIHwgZlpYVE4oNiwgMzIsIGJh c2VfaW1tZWQpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29kZV9hcHBseV9l eHRlbmRlcnMocGFja2V0X3QgKnBhY2tldCkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgcGFja2V0LT5udW1faW5zbnM7IGkrKykgeworICAgICAgICBpZiAoR0VUX0FUVFJJQihw YWNrZXQtPmluc25baV0ub3Bjb2RlLCBBX0lUX0VYVEVOREVSKSkgeworICAgICAgICAgICAgcGFj a2V0LT5pbnNuW2kgKyAxXS5leHRlbnNpb25fdmFsaWQgPSAxOworICAgICAgICAgICAgYXBwbHlf ZXh0ZW5kZXIocGFja2V0LCBpICsgMSwgcGFja2V0LT5pbnNuW2ldLmltbWVkWzBdKTsKKyAgICAg ICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWNvZGVfcmVtb3Zl X2V4dGVuZGVycyhwYWNrZXRfdCAqcGFja2V0KQoreworICAgIGludCBpLCBqOworICAgIGZvciAo aSA9IDA7IGkgPCBwYWNrZXQtPm51bV9pbnNuczsgaSsrKSB7CisgICAgICAgIGlmIChHRVRfQVRU UklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfSVRfRVhURU5ERVIpKSB7CisgICAgICAgICAg ICBmb3IgKGogPSBpOworICAgICAgICAgICAgICAgIChqIDwgcGFja2V0LT5udW1faW5zbnMgLSAx KSAmJiAoaiA8IElOU1RSVUNUSU9OU19NQVggLSAxKTsKKyAgICAgICAgICAgICAgICBqKyspIHsK KyAgICAgICAgICAgICAgICBwYWNrZXQtPmluc25bal0gPSBwYWNrZXQtPmluc25baiArIDFdOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFja2V0LT5udW1faW5zbnMtLTsKKyAgICAgICAg fQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0X3Zh bGlkX3Nsb3Rfc3RyKGNvbnN0IHBhY2tldF90ICpwa3QsIHVuc2lnbmVkIGludCBzbG90KQorewor ICAgIHJldHVybiBmaW5kX2ljbGFzc19zbG90cyhwa3QtPmluc25bc2xvdF0ub3Bjb2RlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwa3QtPmluc25bc2xvdF0uaWNsYXNzKTsKK30KKwor I2luY2x1ZGUgInE2dl9kZWNvZGUuYyIKKworcGFja2V0X3QgKmRlY29kZV90aGlzKGludCBtYXhf d29yZHMsIHNpemU0dV90ICp3b3JkcywgcGFja2V0X3QgKmRlY29kZV9wa3QpCit7CisgICAgaW50 IHJldDsKKyAgICByZXQgPSBkb19kZWNvZGVfcGFja2V0KG1heF93b3Jkcywgd29yZHMsIGRlY29k ZV9wa3QpOworICAgIGlmIChyZXQgPD0gMCkgeworICAgICAgICAvKiBFUlJPUiBvciBCQUQgUEFS U0UgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBkZWNvZGVfcGt0 OworfQorCisvKiBVc2VkIGZvciAiLWQgaW5fYXNtIiBsb2dnaW5nICovCitpbnQgZGlzYXNzZW1i bGVfaGV4YWdvbih1aW50MzJfdCAqd29yZHMsIGludCBud29yZHMsIGNoYXIgKmJ1ZiwgaW50IGJ1 ZnNpemUpCit7CisgICAgcGFja2V0X3QgcGt0OworCisgICAgaWYgKGRlY29kZV90aGlzKG53b3Jk cywgd29yZHMsICZwa3QpKSB7CisgICAgICAgIHNucHJpbnRfYV9wa3QoYnVmLCBidWZzaXplLCAm cGt0KTsKKyAgICAgICAgcmV0dXJuIHBrdC5lbmNvZF9wa3Rfc2l6ZV9pbl9ieXRlczsKKyAgICB9 IGVsc2UgeworICAgICAgICBzbnByaW50ZihidWYsIGJ1ZnNpemUsICI8aW52YWxpZD4iKTsKKyAg ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vcTZ2 X2RlY29kZS5jIGIvdGFyZ2V0L2hleGFnb24vcTZ2X2RlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmMxMDhhYzIKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4 YWdvbi9xNnZfZGVjb2RlLmMKQEAgLTAsMCArMSwzNzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMp IDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJl c2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8K KworI2RlZmluZSBERUNPREVfTkVXX1RBQkxFKFRBRywgU0laRSwgV0hBVE5PVCkgICAgIC8qIE5P VEhJTkcgKi8KKyNkZWZpbmUgVEFCTEVfTElOSyhUQUJMRSkgICAgICAgICAgICAgICAgICAgICAg ICAvKiBOT1RISU5HICovCisjZGVmaW5lIFRFUk1JTkFMKFRBRywgRU5DKSAgICAgICAgICAgICAg ICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBTVUJJTlNOUyhUQUcsIENMQVNTQSwgQ0xB U1NCLCBFTkMpICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgRVhUU1BBQ0UoVEFHLCBFTkMp ICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIElOVkFMSUQoKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNP REVfRU5EX1RBQkxFKC4uLikgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZp bmUgREVDT0RFX01BVENIX0lORk8oLi4uKSAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICov CisjZGVmaW5lIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTyguLi4pICAgICAgICAgICAgLyogTk9U SElORyAqLworCisjZGVmaW5lIERFQ09ERV9SRUcoUkVHTk8sIFdJRFRILCBTVEFSVEJJVCkgXAor ICAgIGluc24tPnJlZ25vW1JFR05PXSA9ICgoZW5jb2RpbmcgPj4gU1RBUlRCSVQpICYgKCgxIDw8 IFdJRFRIKSAtIDEpKTsKKworI2RlZmluZSBERUNPREVfSU1QTF9SRUcoUkVHTk8sIFZBTCkgXAor ICAgIGluc24tPnJlZ25vW1JFR05PXSA9IFZBTDsKKworI2RlZmluZSBERUNPREVfSU1NKElNTU5P LCBXSURUSCwgU1RBUlRCSVQsIFZBTFNUQVJUKSBcCisgICAgaW5zbi0+aW1tZWRbSU1NTk9dIHw9 ICgoKGVuY29kaW5nID4+IFNUQVJUQklUKSAmICgoMSA8PCBXSURUSCkgLSAxKSkpIDw8IFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgKFZBTFNUQVJUKTsKKworI2RlZmluZSBERUNPREVfSU1N X1NYVChJTU1OTywgV0lEVEgpIFwKKyAgICBpbnNuLT5pbW1lZFtJTU1OT10gPSAoKCgoc2l6ZTRz X3QpaW5zbi0+aW1tZWRbSU1NTk9dKSA8PCAoMzIgLSBXSURUSCkpID4+IFwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgKDMyIC0gV0lEVEgpKTsKKworI2RlZmluZSBERUNPREVfSU1NX05FRyhJ TU1OTywgV0lEVEgpIFwKKyAgICBpbnNuLT5pbW1lZFtJTU1OT10gPSAtaW5zbi0+aW1tZWRbSU1N Tk9dOworCisjZGVmaW5lIERFQ09ERV9JTU1fU0hJRlQoSU1NTk8sIFNIQU1UKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKCFpbnNuLT5leHRlbnNpb25fdmFsaWQp IHx8IFwKKyAgICAgICAgKGluc24tPndoaWNoX2V4dGVuZGVkICE9IElNTU5PKSkgeyBcCisgICAg ICAgIGluc24tPmltbWVkW0lNTU5PXSA8PD0gU0hBTVQ7IFwKKyAgICB9CisKKyNkZWZpbmUgREVD T0RFX09QSU5GTyhUQUcsIEJFSCkgXAorICAgIGNhc2UgVEFHOiBcCisgICAgICAgIHsgQkVIICB9 IFwKKyAgICAgICAgYnJlYWs7IFwKKworc3RhdGljIHZvaWQKK2RlY29kZV9vcChpbnNuX3QgKmlu c24sIG9wY29kZV90IHRhZywgc2l6ZTR1X3QgZW5jb2RpbmcpCit7CisgICAgaW5zbi0+aW1tZWRb MF0gPSAwOworICAgIGluc24tPmltbWVkWzFdID0gMDsKKyAgICBpbnNuLT5vcGNvZGUgPSB0YWc7 CisgICAgaWYgKGluc24tPmV4dGVuc2lvbl92YWxpZCkgeworICAgICAgICBpbnNuLT53aGljaF9l eHRlbmRlZCA9IG9wY29kZV93aGljaF9pbW1lZGlhdGVfaXNfZXh0ZW5kZWQodGFnKTsKKyAgICB9 CisKKyAgICBzd2l0Y2ggKHRhZykgeworI2luY2x1ZGUgImRlY3RyZWVfZ2VuZXJhdGVkLmgiCisg ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaW5zbi0+Z2VuZXJhdGUg PSBvcGNvZGVfZ2VucHRyW3RhZ107CisgICAgaW5zbi0+aWNsYXNzID0gKGVuY29kaW5nID4+IDI4 KSAmIDB4ZjsKKyAgICBpZiAoKChlbmNvZGluZyA+PiAxNCkgJiAzKSA9PSAwKSB7CisgICAgICAg IGluc24tPmljbGFzcyArPSAxNjsKKyAgICB9Cit9CisKKyN1bmRlZiBERUNPREVfUkVHCisjdW5k ZWYgREVDT0RFX0lNUExfUkVHCisjdW5kZWYgREVDT0RFX0lNTQorI3VuZGVmIERFQ09ERV9JTU1f U0hJRlQKKyN1bmRlZiBERUNPREVfT1BJTkZPCisjdW5kZWYgREVDT0RFX01BVENIX0lORk8KKyN1 bmRlZiBERUNPREVfTEVHQUNZX01BVENIX0lORk8KKyN1bmRlZiBERUNPREVfRU5EX1RBQkxFCisj dW5kZWYgSU5WQUxJRAorI3VuZGVmIFRFUk1JTkFMCisjdW5kZWYgU1VCSU5TTlMKKyN1bmRlZiBF WFRTUEFDRQorI3VuZGVmIFRBQkxFX0xJTksKKyN1bmRlZiBERUNPREVfTkVXX1RBQkxFCisjdW5k ZWYgREVDT0RFX1NFUEFSQVRPUl9CSVRTCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RlY29kZV9z dWJpbnNuX3RhYmxld2FsayhpbnNuX3QgKmluc24sIGRlY3RyZWVfdGFibGVfdCAqdGFibGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTR1X3QgZW5jb2RpbmcpCit7CisgICAgdW5zaWdu ZWQgaW50IGk7CisgICAgb3Bjb2RlX3Qgb3BjOworICAgIGlmICh0YWJsZS0+bG9va3VwX2Z1bmN0 aW9uKSB7CisgICAgICAgIGkgPSB0YWJsZS0+bG9va3VwX2Z1bmN0aW9uKHRhYmxlLT5zdGFydGJp dCwgdGFibGUtPndpZHRoLCBlbmNvZGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaSA9ICgo ZW5jb2RpbmcgPj4gdGFibGUtPnN0YXJ0Yml0KSAmICgoMSA8PCB0YWJsZS0+d2lkdGgpIC0gMSkp OworICAgIH0KKyAgICBpZiAodGFibGUtPnRhYmxlW2ldLnR5cGUgPT0gREVDVFJFRV9UQUJMRV9M SU5LKSB7CisgICAgICAgIHJldHVybiBkZWNvZGVfc3ViaW5zbl90YWJsZXdhbGsoaW5zbiwgdGFi bGUtPnRhYmxlW2ldLnRhYmxlX2xpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW5jb2RpbmcpOworICAgIH0gZWxzZSBpZiAodGFibGUtPnRhYmxlW2ldLnR5cGUg PT0gREVDVFJFRV9URVJNSU5BTCkgeworICAgICAgICBvcGMgPSB0YWJsZS0+dGFibGVbaV0ub3Bj b2RlOworICAgICAgICBpZiAoKGVuY29kaW5nICYgZGVjb2RlX2l0YWJsZVtvcGNdLm1hc2spICE9 IGRlY29kZV9pdGFibGVbb3BjXS5tYXRjaCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg ICAgIH0KKyAgICAgICAgZGVjb2RlX29wKGluc24sIG9wYywgZW5jb2RpbmcpOworICAgICAgICBy ZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0 YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2luc25fYShzaXplNHVfdCBlbmNvZGluZykKK3sKKyAgICBy ZXR1cm4gZW5jb2RpbmcgJiAweDAwMDAxZmZmOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdl dF9pbnNuX2Ioc2l6ZTR1X3QgZW5jb2RpbmcpCit7CisgICAgcmV0dXJuIChlbmNvZGluZyA+PiAx NikgJiAweDAwMDAxZmZmOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitkZWNvZGVfaW5zbnNf dGFibGV3YWxrKGluc25fdCAqaW5zbiwgZGVjdHJlZV90YWJsZV90ICp0YWJsZSwgc2l6ZTR1X3Qg ZW5jb2RpbmcpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdW5zaWduZWQgaW50IGEsIGI7 CisgICAgb3Bjb2RlX3Qgb3BjOworICAgIGlmICh0YWJsZS0+bG9va3VwX2Z1bmN0aW9uKSB7Cisg ICAgICAgIGkgPSB0YWJsZS0+bG9va3VwX2Z1bmN0aW9uKHRhYmxlLT5zdGFydGJpdCwgdGFibGUt PndpZHRoLCBlbmNvZGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaSA9ICgoZW5jb2Rpbmcg Pj4gdGFibGUtPnN0YXJ0Yml0KSAmICgoMSA8PCB0YWJsZS0+d2lkdGgpIC0gMSkpOworICAgIH0K KyAgICBpZiAodGFibGUtPnRhYmxlW2ldLnR5cGUgPT0gREVDVFJFRV9UQUJMRV9MSU5LKSB7Cisg ICAgICAgIHJldHVybiBkZWNvZGVfaW5zbnNfdGFibGV3YWxrKGluc24sIHRhYmxlLT50YWJsZVtp XS50YWJsZV9saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNv ZGluZyk7CisgICAgfSBlbHNlIGlmICh0YWJsZS0+dGFibGVbaV0udHlwZSA9PSBERUNUUkVFX1NV QklOU05TKSB7CisgICAgICAgIGEgPSBnZXRfaW5zbl9hKGVuY29kaW5nKTsKKyAgICAgICAgYiA9 IGdldF9pbnNuX2IoZW5jb2RpbmcpOworICAgICAgICBiID0gZGVjb2RlX3N1Ymluc25fdGFibGV3 YWxrKGluc24sIHRhYmxlLT50YWJsZVtpXS50YWJsZV9saW5rX2IsIGIpOworICAgICAgICBhID0g ZGVjb2RlX3N1Ymluc25fdGFibGV3YWxrKGluc24gKyAxLCB0YWJsZS0+dGFibGVbaV0udGFibGVf bGluaywgYSk7CisgICAgICAgIGlmICgoYSA9PSAwKSB8fCAoYiA9PSAwKSkgeworICAgICAgICAg ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDI7CisgICAgfSBlbHNlIGlm ICh0YWJsZS0+dGFibGVbaV0udHlwZSA9PSBERUNUUkVFX1RFUk1JTkFMKSB7CisgICAgICAgIG9w YyA9IHRhYmxlLT50YWJsZVtpXS5vcGNvZGU7CisgICAgICAgIGlmICgoZW5jb2RpbmcgJiBkZWNv ZGVfaXRhYmxlW29wY10ubWFzaykgIT0gZGVjb2RlX2l0YWJsZVtvcGNdLm1hdGNoKSB7CisgICAg ICAgICAgICBpZiAoKGVuY29kaW5nICYgZGVjb2RlX2xlZ2FjeV9pdGFibGVbb3BjXS5tYXNrKSAh PQorICAgICAgICAgICAgICAgIGRlY29kZV9sZWdhY3lfaXRhYmxlW29wY10ubWF0Y2gpIHsKKyAg ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBkZWNvZGVfb3AoaW5zbiwgb3BjLCBlbmNvZGluZyk7CisgICAgICAgIHJldHVybiAxOworICAg IH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIHVuc2lnbmVk IGludAorZGVjb2RlX2luc25zKGluc25fdCAqaW5zbiwgc2l6ZTR1X3QgZW5jb2RpbmcpCit7Cisg ICAgZGVjdHJlZV90YWJsZV90ICp0YWJsZTsKKyAgICBpZiAoKGVuY29kaW5nICYgMHgwMDAwYzAw MCkgIT0gMCkgeworICAgICAgICAvKiBTdGFydCB3aXRoIFBQIHRhYmxlICovCisgICAgICAgIHRh YmxlID0gJmRlY3RyZWVfdGFibGVfREVDT0RFX1JPT1RfMzI7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgLyogc3RhcnQgd2l0aCBFRSB0YWJsZSAqLworICAgICAgICB0YWJsZSA9ICZkZWN0cmVlX3Rh YmxlX0RFQ09ERV9ST09UX0VFOworICAgIH0KKyAgICByZXR1cm4gZGVjb2RlX2luc25zX3RhYmxl d2FsayhpbnNuLCB0YWJsZSwgZW5jb2RpbmcpOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfYWRk X2VuZGxvb3BfaW5zbihpbnNuX3QgKmluc24sIGludCBsb29wbnVtKQoreworICAgIGlmIChsb29w bnVtID09IDEwKSB7CisgICAgICAgIGluc24tPm9wY29kZSA9IEoyX2VuZGxvb3AwMTsKKyAgICAg ICAgaW5zbi0+Z2VuZXJhdGUgPSBvcGNvZGVfZ2VucHRyW0oyX2VuZGxvb3AwMV07CisgICAgfSBl bHNlIGlmIChsb29wbnVtID09IDEpIHsKKyAgICAgICAgaW5zbi0+b3Bjb2RlID0gSjJfZW5kbG9v cDE7CisgICAgICAgIGluc24tPmdlbmVyYXRlID0gb3Bjb2RlX2dlbnB0cltKMl9lbmRsb29wMV07 CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5zbi0+b3Bjb2RlID0gSjJfZW5kbG9vcDA7CisgICAg ICAgIGluc24tPmdlbmVyYXRlID0gb3Bjb2RlX2dlbnB0cltKMl9lbmRsb29wMF07CisgICAgfQor fQorCitzdGF0aWMgaW5saW5lIGludCBkZWNvZGVfcGFyc2ViaXRzX2lzX2VuZChzaXplNHVfdCBl bmNvZGluZzMyKQoreworICAgIHNpemU0dV90IGJpdHMgPSAoZW5jb2RpbmczMiA+PiAxNCkgJiAw eDM7CisgICAgcmV0dXJuICgoYml0cyA9PSAweDMpIHx8IChiaXRzID09IDB4MCkpOworfQorCitz dGF0aWMgaW5saW5lIGludCBkZWNvZGVfcGFyc2ViaXRzX2lzX2xvb3BlbmQoc2l6ZTR1X3QgZW5j b2RpbmczMikKK3sKKyAgICBzaXplNHVfdCBiaXRzID0gKGVuY29kaW5nMzIgPj4gMTQpICYgMHgz OworICAgIHJldHVybiAoKGJpdHMgPT0gMHgyKSk7Cit9CisKK3N0YXRpYyBpbnQKK2RlY29kZV9z ZXRfc2xvdF9udW1iZXIocGFja2V0X3QgKnBrdCkKK3sKKyAgICBpbnQgc2xvdDsKKyAgICBpbnQg aTsKKyAgICBpbnQgaGl0X21lbV9pbnNuID0gMDsKKyAgICBpbnQgaGl0X2R1cGxleCA9IDA7Cisg ICAgY29uc3QgY2hhciAqdmFsaWRfc2xvdF9zdHI7CisKKyAgICBmb3IgKGkgPSAwLCBzbG90ID0g MzsgaSA8IHBrdC0+bnVtX2luc25zOyBpKyspIHsKKyAgICAgICAgdmFsaWRfc2xvdF9zdHIgPSBn ZXRfdmFsaWRfc2xvdF9zdHIocGt0LCBpKTsKKworICAgICAgICB3aGlsZSAoc3RyY2hyKHZhbGlk X3Nsb3Rfc3RyLCAnMCcgKyBzbG90KSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbG90LS07Cisg ICAgICAgIH0KKyAgICAgICAgcGt0LT5pbnNuW2ldLnNsb3QgPSBzbG90OworICAgICAgICBpZiAo c2xvdCkgeworICAgICAgICAgICAgLyogSSd2ZSBhc3NpZ25lZCB0aGUgc2xvdCwgbm93IGRlY3Jl bWVudCBpdCBmb3IgdGhlIG5leHQgaW5zbiAqLworICAgICAgICAgICAgc2xvdC0tOworICAgICAg ICB9CisgICAgfQorCisgICAgLyogRml4IHRoZSBleGNlcHRpb25zIC0gbWVtIGluc25zIHRvIHNs b3QgMCwxICovCisgICAgZm9yIChpID0gcGt0LT5udW1faW5zbnMgLSAxOyBpID49IDA7IGktLSkg eworCisgICAgICAgIC8qIEZpcnN0IG1lbW9yeSBpbnN0cnVjdGlvbiBhbHdheXMgZ29lcyB0byBz bG90IDAgKi8KKyAgICAgICAgaWYgKChHRVRfQVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFf TUVNTElLRSkgfHwKKyAgICAgICAgICAgICBHRVRfQVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUs IEFfTUVNTElLRV9QQUNLRVRfUlVMRVMpKSAmJgorICAgICAgICAgICAgIWhpdF9tZW1faW5zbikg eworICAgICAgICAgICAgaGl0X21lbV9pbnNuID0gMTsKKyAgICAgICAgICAgIHBrdC0+aW5zbltp XS5zbG90ID0gMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg LyogTmV4dCBtZW1vcnkgaW5zdHJ1Y3Rpb24gYWx3YXlzIGdvZXMgdG8gc2xvdCAxICovCisgICAg ICAgIGlmICgoR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2RlLCBBX01FTUxJS0UpIHx8Cisg ICAgICAgICAgICAgR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2RlLCBBX01FTUxJS0VfUEFD S0VUX1JVTEVTKSkgJiYKKyAgICAgICAgICAgIGhpdF9tZW1faW5zbikgeworICAgICAgICAgICAg cGt0LT5pbnNuW2ldLnNsb3QgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgLyogRml4IHRo ZSBleGNlcHRpb25zIC0gZHVwbGV4IGFsd2F5cyBzbG90IDAsMSAqLworICAgIGZvciAoaSA9IHBr dC0+bnVtX2luc25zIC0gMTsgaSA+PSAwOyBpLS0pIHsKKworICAgICAgICAvKiBGaXJzdCBzdWJp bnNuIGFsd2F5cyBnb2VzIHRvIHNsb3QgMCAqLworICAgICAgICBpZiAoR0VUX0FUVFJJQihwa3Qt Pmluc25baV0ub3Bjb2RlLCBBX1NVQklOU04pICYmICFoaXRfZHVwbGV4KSB7CisgICAgICAgICAg ICBoaXRfZHVwbGV4ID0gMTsKKyAgICAgICAgICAgIHBrdC0+aW5zbltpXS5zbG90ID0gMDsKKyAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogTmV4dCBzdWJpbnNu IGFsd2F5cyBnb2VzIHRvIHNsb3QgMSAqLworICAgICAgICBpZiAoR0VUX0FUVFJJQihwa3QtPmlu c25baV0ub3Bjb2RlLCBBX1NVQklOU04pICYmIGhpdF9kdXBsZXgpIHsKKyAgICAgICAgICAgIHBr dC0+aW5zbltpXS5zbG90ID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEZpeCB0aGUg ZXhjZXB0aW9ucyAtIHNsb3QgMSBpcyBuZXZlciBlbXB0eSwgYWx3YXlzIGFsaWducyB0byBzbG90 IDAgKi8KKyAgICB7CisgICAgICAgIGludCBzbG90MF9mb3VuZCA9IDA7CisgICAgICAgIGludCBz bG90MV9mb3VuZCA9IDA7CisgICAgICAgIGludCBzbG90MV9paWR4ID0gMDsKKyAgICAgICAgZm9y IChpID0gcGt0LT5udW1faW5zbnMgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgLyog SXMgc2xvdDAgdXNlZD8gKi8KKyAgICAgICAgICAgIGlmIChwa3QtPmluc25baV0uc2xvdCA9PSAw KSB7CisgICAgICAgICAgICAgICAgaW50IGlzX2VuZGxvb3AgPSAocGt0LT5pbnNuW2ldLm9wY29k ZSA9PSBKMl9lbmRsb29wMDEpOworICAgICAgICAgICAgICAgIGlzX2VuZGxvb3AgfD0gKHBrdC0+ aW5zbltpXS5vcGNvZGUgPT0gSjJfZW5kbG9vcDApOworICAgICAgICAgICAgICAgIGlzX2VuZGxv b3AgfD0gKHBrdC0+aW5zbltpXS5vcGNvZGUgPT0gSjJfZW5kbG9vcDEpOworCisgICAgICAgICAg ICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBNYWtlIHN1cmUgaXQncyBub3QgZW5kbG9vcCBz aW5jZSwgd2UncmUgb3ZlcmxvYWRpbmcKKyAgICAgICAgICAgICAgICAgKiBzbG90MCBmb3IgZW5k bG9vcAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICghaXNfZW5kbG9v cCkgeworICAgICAgICAgICAgICAgICAgICBzbG90MF9mb3VuZCA9IDE7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogSXMgc2xvdDEgdXNlZD8gKi8KKyAg ICAgICAgICAgIGlmIChwa3QtPmluc25baV0uc2xvdCA9PSAxKSB7CisgICAgICAgICAgICAgICAg c2xvdDFfZm91bmQgPSAxOworICAgICAgICAgICAgICAgIHNsb3QxX2lpZHggPSBpOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIElzIHNsb3QwIGVtcHR5IGFuZCBzbG90MSB1 c2VkPyAqLworICAgICAgICBpZiAoKHNsb3QwX2ZvdW5kID09IDApICYmIChzbG90MV9mb3VuZCA9 PSAxKSkgeworICAgICAgICAgICAgLyogVGhlbiBwdXNoIGl0IHRvIHNsb3QwICovCisgICAgICAg ICAgICBwa3QtPmluc25bc2xvdDFfaWlkeF0uc2xvdCA9IDA7CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkb19kZWNvZGVfcGFja2V0CisgKiBEZWNvZGVzIHBh Y2tldCB3aXRoIGdpdmVuIHdvcmRzCisgKiBSZXR1cm5zIG5lZ2F0aXZlIG9uIGVycm9yLCAwIG9u IGluc3VmZmljaWVudCB3b3JkcywKKyAqIGFuZCBudW1iZXIgb2Ygd29yZHMgdXNlZCBvbiBzdWNj ZXNzCisgKi8KKworc3RhdGljIGludCBkb19kZWNvZGVfcGFja2V0KGludCBtYXhfd29yZHMsIGNv bnN0IHNpemU0dV90ICp3b3JkcywgcGFja2V0X3QgKnBrdCkKK3sKKyAgICBpbnQgbnVtX2luc25z ID0gMDsKKyAgICBpbnQgd29yZHNfcmVhZCA9IDA7CisgICAgaW50IGVuZF9vZl9wYWNrZXQgPSAw OworICAgIGludCBuZXdfaW5zbnMgPSAwOworICAgIGludCBlcnJvcnMgPSAwOworICAgIHNpemU0 dV90IGVuY29kaW5nMzI7CisKKyAgICAvKiBJbml0aWFsaXplICovCisgICAgbWVtc2V0KHBrdCwg MCwgc2l6ZW9mKCpwa3QpKTsKKyAgICAvKiBUcnkgdG8gYnVpbGQgcGFja2V0ICovCisgICAgd2hp bGUgKCFlbmRfb2ZfcGFja2V0ICYmICh3b3Jkc19yZWFkIDwgbWF4X3dvcmRzKSkgeworICAgICAg ICBlbmNvZGluZzMyID0gd29yZHNbd29yZHNfcmVhZF07CisgICAgICAgIGVuZF9vZl9wYWNrZXQg PSBkZWNvZGVfcGFyc2ViaXRzX2lzX2VuZChlbmNvZGluZzMyKTsKKyAgICAgICAgbmV3X2luc25z ID0gZGVjb2RlX2luc25zKCZwa3QtPmluc25bbnVtX2luc25zXSwgZW5jb2RpbmczMik7CisgICAg ICAgIC8qCisgICAgICAgICAqIElmIHdlIHNhdyBhbiBleHRlbmRlciwgbWFyayBuZXh0IHdvcmQg ZXh0ZW5kZWQgc28gaW1tZWRpYXRlCisgICAgICAgICAqIGRlY29kZSB3b3JrcworICAgICAgICAg Ki8KKyAgICAgICAgaWYgKHBrdC0+aW5zbltudW1faW5zbnNdLm9wY29kZSA9PSBBNF9leHQpIHsK KyAgICAgICAgICAgIHBrdC0+aW5zbltudW1faW5zbnMgKyAxXS5leHRlbnNpb25fdmFsaWQgPSAx OworICAgICAgICB9CisgICAgICAgIG51bV9pbnNucyArPSBuZXdfaW5zbnM7CisgICAgICAgIHdv cmRzX3JlYWQrKzsKKyAgICB9CisKKyAgICBwa3QtPm51bV9pbnNucyA9IG51bV9pbnNuczsKKyAg ICBpZiAoIWVuZF9vZl9wYWNrZXQpIHsKKyAgICAgICAgLyogUmFuIG91dCBvZiB3b3JkcyEgKi8K KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHBrdC0+ZW5jb2RfcGt0X3NpemVfaW5fYnl0 ZXMgPSB3b3Jkc19yZWFkICogNDsKKworICAgIC8qIFNodWZmbGUgLyBzcGxpdCAvIHJlb3JkZXIg Zm9yIGV4ZWN1dGlvbiAqLworICAgIGlmICgod29yZHNfcmVhZCA9PSAyKSAmJiAoZGVjb2RlX3Bh cnNlYml0c19pc19sb29wZW5kKHdvcmRzWzBdKSkpIHsKKyAgICAgICAgZGVjb2RlX2FkZF9lbmRs b29wX2luc24oJnBrdC0+aW5zbltwa3QtPm51bV9pbnNucysrXSwgMCk7CisgICAgfQorICAgIGlm ICh3b3Jkc19yZWFkID49IDMpIHsKKyAgICAgICAgc2l6ZTR1X3QgaGFzX2xvb3AwLCBoYXNfbG9v cDE7CisgICAgICAgIGhhc19sb29wMCA9IGRlY29kZV9wYXJzZWJpdHNfaXNfbG9vcGVuZCh3b3Jk c1swXSk7CisgICAgICAgIGhhc19sb29wMSA9IGRlY29kZV9wYXJzZWJpdHNfaXNfbG9vcGVuZCh3 b3Jkc1sxXSk7CisgICAgICAgIGlmIChoYXNfbG9vcDAgJiYgaGFzX2xvb3AxKSB7CisgICAgICAg ICAgICBkZWNvZGVfYWRkX2VuZGxvb3BfaW5zbigmcGt0LT5pbnNuW3BrdC0+bnVtX2luc25zKytd LCAxMCk7CisgICAgICAgIH0gZWxzZSBpZiAoaGFzX2xvb3AxKSB7CisgICAgICAgICAgICBkZWNv ZGVfYWRkX2VuZGxvb3BfaW5zbigmcGt0LT5pbnNuW3BrdC0+bnVtX2luc25zKytdLCAxKTsKKyAg ICAgICAgfSBlbHNlIGlmIChoYXNfbG9vcDApIHsKKyAgICAgICAgICAgIGRlY29kZV9hZGRfZW5k bG9vcF9pbnNuKCZwa3QtPmluc25bcGt0LT5udW1faW5zbnMrK10sIDApOworICAgICAgICB9Cisg ICAgfQorCisgICAgZXJyb3JzICs9IGRlY29kZV9hcHBseV9leHRlbmRlcnMocGt0KTsKKyAgICBl cnJvcnMgKz0gZGVjb2RlX3JlbW92ZV9leHRlbmRlcnMocGt0KTsKKyAgICBlcnJvcnMgKz0gZGVj b2RlX3NldF9zbG90X251bWJlcihwa3QpOworICAgIGVycm9ycyArPSBkZWNvZGVfZmlsbF9uZXd2 YWx1ZV9yZWdubyhwa3QpOworCisgICAgZXJyb3JzICs9IGRlY29kZV9zaHVmZmxlX2Zvcl9leGVj dXRpb24ocGt0KTsKKyAgICBlcnJvcnMgKz0gZGVjb2RlX3NwbGl0X2NtcGp1bXAocGt0KTsKKyAg ICBlcnJvcnMgKz0gZGVjb2RlX3NldF9pbnNuX2F0dHJfZmllbGRzKHBrdCk7CisgICAgaWYgKGVy cm9ycykgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIHdvcmRzX3Jl YWQ7Cit9Ci0tIAoyLjcuNAoK