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 014C0C3F2CD for ; Fri, 28 Feb 2020 17:04:05 +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 A13692467B for ; Fri, 28 Feb 2020 17:04:04 +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="n/NMZRzX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A13692467B 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]:50892 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7j3T-0008Bc-OK for qemu-devel@archiver.kernel.org; Fri, 28 Feb 2020 12:04:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57819) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7ikh-0002sw-Cu for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:44:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7ika-0005X2-Gc for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:44:39 -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 1j7ika-0005V5-04 for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:44:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1582908272; x=1614444272; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+Rg/1XvwiYubBqus4zmz809K+ZCqdQ8ogIc6PHoqRQk=; b=n/NMZRzX0DwmLSRhqfaDLVt+RMlnwlu7tnfuRXVq0ZPpGsAeqKtulhOi f/V8aBppNXcb/SRFWl6AjcEgKkVTxtOIFwyucAMoQjYKjJhmfpS5KS7r3 CC3X9pggpuv3ookIu5cApXQoJgPkQZQK+B2SsFY2Nh8nBPXYxzeOKq8hd A=; 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:29 -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:28 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 53EB611AF; Fri, 28 Feb 2020 10:44:28 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 14/67] Hexagon instruction/packet decode Date: Fri, 28 Feb 2020 10:43:10 -0600 Message-Id: <1582908244-304-15-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" VGFrZSB0aGUgd29yZHMgZnJvbSBpbnN0cnVjdGlvbiBtZW1vcnkgYW5kIGJ1aWxkIGEgcGFja2V0 X3QgZm9yIFRDRyBjb2RlCmdlbmVyYXRpb24KClRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUg cGVyZm9ybWVkCiAgICBDb252ZXJ0IHRoZSAubmV3IGVuY29kZWQgb2Zmc2V0IHRvIHRoZSByZWdp c3RlciBudW1iZXIgb2YgdGhlIHByb2R1Y2VyCiAgICBSZW9yZGVyIHRoZSBpbnN0cnVjdGlvbnMg aW4gdGhlIHBhY2tldCBzbyAubmV3IHByb2R1Y2VyIGlzIGJlZm9yZSBjb25zdW1lcgogICAgQXBw bHkgY29uc3RhbnQgZXh0ZW5kZXJzCiAgICBTZXBhcmF0ZSBzdWJpbnNuJ3MgaW50byB0d28gaW5z dHJ1Y3Rpb25zCiAgICBCcmVhayBjb21wYXJlLWp1bXBzIGludG8gdHdvIGluc3RydWN0aW9ucwog ICAgQ3JlYXRlIGluc3RydWN0aW9ucyBmb3IgOmVuZGxvb3AKClNpZ25lZC1vZmYtYnk6IFRheWxv ciBTaW1wc29uIDx0c2ltcHNvbkBxdWljaW5jLmNvbT4KLS0tCiB0YXJnZXQvaGV4YWdvbi9kZWNv ZGUuaCAgICAgfCAgMzkgKysrCiB0YXJnZXQvaGV4YWdvbi9kZWNvZGUuYyAgICAgfCA3NjkgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRhcmdldC9oZXhhZ29u L3E2dl9kZWNvZGUuYyB8IDQwMiArKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFu Z2VkLCAxMjEwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdv bi9kZWNvZGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL2RlY29kZS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vcTZ2X2RlY29kZS5jCgpkaWZmIC0tZ2l0 IGEvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmggYi90YXJnZXQvaGV4YWdvbi9kZWNvZGUuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjYzYjFjCi0tLSAvZGV2L251bGwKKysr IGIvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqICBDb3B5 cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAq ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBM aWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor ICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKyAqLworCisjaWZuZGVmIEhFWEFHT05fREVDT0RFX0gKKyNkZWZpbmUgSEVYQUdPTl9ERUNP REVfSAorCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAib3Bjb2Rlcy5oIgorI2luY2x1ZGUg ImhleF9hcmNoX3R5cGVzLmgiCisjaW5jbHVkZSAiaW5zbi5oIgorCitleHRlcm4gdm9pZCBkZWNv ZGVfaW5pdCh2b2lkKTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfcGFja2V0X2VuZCh1aW50MzJf dCB3b3JkKQoreworICAgIHVpbnQzMl90IGJpdHMgPSAod29yZCA+PiAxNCkgJiAweDM7CisgICAg cmV0dXJuICgoYml0cyA9PSAweDMpIHx8IChiaXRzID09IDB4MCkpOworfQorCitleHRlcm4gdm9p ZCBkZWNvZGVfc2VuZF9pbnNuX3RvKHBhY2tldF90ICpwYWNrZXQsIGludCBzdGFydCwgaW50IG5l d2xvYyk7CisKK2V4dGVybiBwYWNrZXRfdCAqZGVjb2RlX3RoaXMoaW50IG1heF93b3Jkcywgc2l6 ZTR1X3QgKndvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfdCAqZGVj b2RlX3BrdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMg Yi90YXJnZXQvaGV4YWdvbi9kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4yMjAxYzIzCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMK QEAgLTAsMCArMSw3NjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29t bSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgInFlbXUv b3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2xvZy5oIgorI2luY2x1ZGUgImljbGFzcy5oIgorI2lu Y2x1ZGUgIm9wY29kZXMuaCIKKyNpbmNsdWRlICJnZW5wdHIuaCIKKyNpbmNsdWRlICJkZWNvZGUu aCIKKyNpbmNsdWRlICJpbnNuLmgiCisjaW5jbHVkZSAibWFjcm9zLmgiCisjaW5jbHVkZSAicHJp bnRpbnNuLmgiCisKK2VudW0geworICAgIEVYVF9JRFhfbm9leHQgPSAwLAorICAgIEVYVF9JRFhf bm9leHRfQUZURVIgPSA0LAorICAgIEVYVF9JRFhfbW12ZWMgPSA0LAorICAgIEVYVF9JRFhfbW12 ZWNfQUZURVIgPSA4LAorICAgIFhYX0xBU1RfRVhUX0lEWAorfTsKKworI2RlZmluZSBERUZfUkVH TUFQKE5BTUUsIEVMRU1FTlRTLCAuLi4pIFwKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50 IERFQ09ERV9SRUdJU1RFUl8jI05BTUVbRUxFTUVOVFNdID0gXAorICAgIHsgX19WQV9BUkdTX18g fTsKKyNpbmNsdWRlICJyZWdtYXAuaCIKKworI2RlZmluZSBERUNPREVfTUFQUEVEX1JFRyhSRUdO TywgTkFNRSkgXAorICAgIGluc24tPnJlZ25vW1JFR05PXSA9IERFQ09ERV9SRUdJU1RFUl8jI05B TUVbaW5zbi0+cmVnbm9bUkVHTk9dXTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHN0cnVjdCBf ZGVjdHJlZV90YWJsZV9zdHJ1Y3QgKnRhYmxlX2xpbms7CisgICAgc3RydWN0IF9kZWN0cmVlX3Rh YmxlX3N0cnVjdCAqdGFibGVfbGlua19iOworICAgIG9wY29kZV90IG9wY29kZTsKKyAgICBlbnVt IHsKKyAgICAgICAgREVDVFJFRV9FTlRSWV9JTlZBTElELAorICAgICAgICBERUNUUkVFX1RBQkxF X0xJTkssCisgICAgICAgIERFQ1RSRUVfU1VCSU5TTlMsCisgICAgICAgIERFQ1RSRUVfRVhUU1BB Q0UsCisgICAgICAgIERFQ1RSRUVfVEVSTUlOQUwKKyAgICB9IHR5cGU7Cit9IGRlY3RyZWVfZW50 cnlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RlY3RyZWVfdGFibGVfc3RydWN0IHsKKyAgICB1bnNp Z25lZCBpbnQgKCpsb29rdXBfZnVuY3Rpb24pKGludCBzdGFydGJpdCwgaW50IHdpZHRoLCBzaXpl NHVfdCBvcGNvZGUpOworICAgIHVuc2lnbmVkIGludCBzaXplOworICAgIHVuc2lnbmVkIGludCBz dGFydGJpdDsKKyAgICB1bnNpZ25lZCBpbnQgd2lkdGg7CisgICAgZGVjdHJlZV9lbnRyeV90IHRh YmxlW107Cit9IGRlY3RyZWVfdGFibGVfdDsKKworI2RlZmluZSBERUNPREVfTkVXX1RBQkxFKFRB RywgU0laRSwgV0hBVE5PVCkgXAorICAgIHN0YXRpYyBzdHJ1Y3QgX2RlY3RyZWVfdGFibGVfc3Ry dWN0IGRlY3RyZWVfdGFibGVfIyNUQUc7CisjZGVmaW5lIFRBQkxFX0xJTksoVEFCTEUpICAgICAg ICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBURVJNSU5BTChUQUcsIEVOQykg ICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgU1VCSU5TTlMoVEFHLCBD TEFTU0EsIENMQVNTQiwgRU5DKSAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIEVYVFNQQUNFKFRB RywgRU5DKSAgICAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBJTlZBTElE KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVD T0RFX0VORF9UQUJMRSguLi4pICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5l IERFQ09ERV9NQVRDSF9JTkZPKC4uLikgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2Rl ZmluZSBERUNPREVfTEVHQUNZX01BVENIX0lORk8oLi4uKSAgICAgICAgIC8qIE5PVEhJTkcgKi8K KyNkZWZpbmUgREVDT0RFX09QSU5GTyguLi4pICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5H ICovCisKKyNpbmNsdWRlICJkZWN0cmVlX2dlbmVyYXRlZC5oIgorCisjdW5kZWYgREVDT0RFX09Q SU5GTworI3VuZGVmIERFQ09ERV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0xFR0FDWV9NQVRD SF9JTkZPCisjdW5kZWYgREVDT0RFX0VORF9UQUJMRQorI3VuZGVmIElOVkFMSUQKKyN1bmRlZiBU RVJNSU5BTAorI3VuZGVmIFNVQklOU05TCisjdW5kZWYgRVhUU1BBQ0UKKyN1bmRlZiBUQUJMRV9M SU5LCisjdW5kZWYgREVDT0RFX05FV19UQUJMRQorI3VuZGVmIERFQ09ERV9TRVBBUkFUT1JfQklU UworCisjZGVmaW5lIERFQ09ERV9TRVBBUkFUT1JfQklUUyhTVEFSVCwgV0lEVEgpIE5VTEwsIFNU QVJULCBXSURUSAorI2RlZmluZSBERUNPREVfTkVXX1RBQkxFX0hFTFBFUihUQUcsIFNJWkUsIEZO LCBTVEFSVCwgV0lEVEgpIFwKKyAgICBzdGF0aWMgZGVjdHJlZV90YWJsZV90IGRlY3RyZWVfdGFi bGVfIyNUQUcgPSB7IFwKKyAgICAgICAgLnNpemUgPSBTSVpFLCBcCisgICAgICAgIC5sb29rdXBf ZnVuY3Rpb24gPSBGTiwgXAorICAgICAgICAuc3RhcnRiaXQgPSBTVEFSVCwgXAorICAgICAgICAu d2lkdGggPSBXSURUSCwgXAorICAgICAgICAudGFibGUgPSB7CisjZGVmaW5lIERFQ09ERV9ORVdf VEFCTEUoVEFHLCBTSVpFLCBXSEFUTk9UKSBcCisgICAgREVDT0RFX05FV19UQUJMRV9IRUxQRVIo VEFHLCBTSVpFLCBXSEFUTk9UKQorCisjZGVmaW5lIFRBQkxFX0xJTksoVEFCTEUpIFwKKyAgICB7 IC50eXBlID0gREVDVFJFRV9UQUJMRV9MSU5LLCAudGFibGVfbGluayA9ICZkZWN0cmVlX3RhYmxl XyMjVEFCTEUgfSwKKyNkZWZpbmUgVEVSTUlOQUwoVEFHLCBFTkMpIFwKKyAgICB7IC50eXBlID0g REVDVFJFRV9URVJNSU5BTCwgLm9wY29kZSA9IFRBRyAgfSwKKyNkZWZpbmUgU1VCSU5TTlMoVEFH LCBDTEFTU0EsIENMQVNTQiwgRU5DKSBcCisgICAgeyBcCisgICAgICAgIC50eXBlID0gREVDVFJF RV9TVUJJTlNOUywgXAorICAgICAgICAudGFibGVfbGluayA9ICZkZWN0cmVlX3RhYmxlX0RFQ09E RV9TVUJJTlNOXyMjQ0xBU1NBLCBcCisgICAgICAgIC50YWJsZV9saW5rX2IgPSAmZGVjdHJlZV90 YWJsZV9ERUNPREVfU1VCSU5TTl8jI0NMQVNTQiBcCisgICAgfSwKKyNkZWZpbmUgRVhUU1BBQ0Uo VEFHLCBFTkMpIHsgLnR5cGUgPSBERUNUUkVFX0VYVFNQQUNFIH0sCisjZGVmaW5lIElOVkFMSUQo KSB7IC50eXBlID0gREVDVFJFRV9FTlRSWV9JTlZBTElELCAub3Bjb2RlID0gWFhfTEFTVF9PUENP REUgfSwKKworI2RlZmluZSBERUNPREVfRU5EX1RBQkxFKC4uLikgfSB9OworCisjZGVmaW5lIERF Q09ERV9NQVRDSF9JTkZPKC4uLikgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmlu ZSBERUNPREVfTEVHQUNZX01BVENIX0lORk8oLi4uKSAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNk ZWZpbmUgREVDT0RFX09QSU5GTyguLi4pICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICov CisKKyNpbmNsdWRlICJkZWN0cmVlX2dlbmVyYXRlZC5oIgorCisjdW5kZWYgREVDT0RFX09QSU5G TworI3VuZGVmIERFQ09ERV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0xFR0FDWV9NQVRDSF9J TkZPCisjdW5kZWYgREVDT0RFX0VORF9UQUJMRQorI3VuZGVmIElOVkFMSUQKKyN1bmRlZiBURVJN SU5BTAorI3VuZGVmIFNVQklOU05TCisjdW5kZWYgRVhUU1BBQ0UKKyN1bmRlZiBUQUJMRV9MSU5L CisjdW5kZWYgREVDT0RFX05FV19UQUJMRQorI3VuZGVmIERFQ09ERV9ORVdfVEFCTEVfSEVMUEVS CisjdW5kZWYgREVDT0RFX1NFUEFSQVRPUl9CSVRTCisKK3N0YXRpYyBkZWN0cmVlX3RhYmxlX3Qg ZGVjdHJlZV90YWJsZV9ERUNPREVfRVhUX0VYVF9ub2V4dCA9IHsKKyAgICAuc2l6ZSA9IDEsIC5s b29rdXBfZnVuY3Rpb24gPSBOVUxMLCAuc3RhcnRiaXQgPSAwLCAud2lkdGggPSAwLAorICAgIC50 YWJsZSA9IHsKKyAgICAgICAgeyAudHlwZSA9IERFQ1RSRUVfRU5UUllfSU5WQUxJRCwgLm9wY29k ZSA9IFhYX0xBU1RfT1BDT0RFIH0sCisgICAgfQorfTsKKworc3RhdGljIGRlY3RyZWVfdGFibGVf dCAqZXh0X3RyZWVzW1hYX0xBU1RfRVhUX0lEWF07CisKK3N0YXRpYyB2b2lkIGRlY29kZV9leHRf aW5pdCh2b2lkKQoreworICAgIGludCBpOworICAgIGZvciAoaSA9IEVYVF9JRFhfbm9leHQ7IGkg PCBFWFRfSURYX25vZXh0X0FGVEVSOyBpKyspIHsKKyAgICAgICAgZXh0X3RyZWVzW2ldID0gJmRl Y3RyZWVfdGFibGVfREVDT0RFX0VYVF9FWFRfbm9leHQ7CisgICAgfQorfQorCit0eXBlZGVmIHN0 cnVjdCB7CisgICAgc2l6ZTR1X3QgbWFzazsKKyAgICBzaXplNHVfdCBtYXRjaDsKK30gZGVjb2Rl X2l0YWJsZV9lbnRyeV90OworCisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBX SEFUTk9UKSAgLyogTk9USElORyAqLworI2RlZmluZSBUQUJMRV9MSU5LKFRBQkxFKSAgICAgICAg ICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgVEVSTUlOQUwoVEFHLCBFTkMpICAg ICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIFNVQklOU05TKFRBRywgQ0xB U1NBLCBDTEFTU0IsIEVOQykgICAgLyogTk9USElORyAqLworI2RlZmluZSBFWFRTUEFDRShUQUcs IEVOQykgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgSU5WQUxJRCgp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09E RV9FTkRfVEFCTEUoLi4uKSAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBE RUNPREVfT1BJTkZPKC4uLikgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKworI2Rl ZmluZSBERUNPREVfTUFUQ0hfSU5GT19OT1JNQUwoVEFHLCBNQVNLLCBNQVRDSCkgXAorICAgIFtU QUddID0geyBcCisgICAgICAgIC5tYXNrID0gTUFTSywgXAorICAgICAgICAubWF0Y2ggPSBNQVRD SCwgXAorICAgIH0sCisKKyNkZWZpbmUgREVDT0RFX01BVENIX0lORk9fTlVMTChUQUcsIE1BU0ss IE1BVENIKSBcCisgICAgW1RBR10gPSB7IC5tYXRjaCA9IH4wIH0sCisKKyNkZWZpbmUgREVDT0RF X01BVENIX0lORk8oLi4uKSBERUNPREVfTUFUQ0hfSU5GT19OT1JNQUwoX19WQV9BUkdTX18pCisj ZGVmaW5lIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTyguLi4pIC8qIE5PVEhJTkcgKi8KKworc3Rh dGljIGNvbnN0IGRlY29kZV9pdGFibGVfZW50cnlfdCBkZWNvZGVfaXRhYmxlW1hYX0xBU1RfT1BD T0RFXSA9IHsKKyNpbmNsdWRlICJkZWN0cmVlX2dlbmVyYXRlZC5oIgorfTsKKworI3VuZGVmIERF Q09ERV9NQVRDSF9JTkZPCisjZGVmaW5lIERFQ09ERV9NQVRDSF9JTkZPKC4uLikgREVDT0RFX01B VENIX0lORk9fTlVMTChfX1ZBX0FSR1NfXykKKworI3VuZGVmIERFQ09ERV9MRUdBQ1lfTUFUQ0hf SU5GTworI2RlZmluZSBERUNPREVfTEVHQUNZX01BVENIX0lORk8oLi4uKSBERUNPREVfTUFUQ0hf SU5GT19OT1JNQUwoX19WQV9BUkdTX18pCisKK3N0YXRpYyBjb25zdCBkZWNvZGVfaXRhYmxlX2Vu dHJ5X3QgZGVjb2RlX2xlZ2FjeV9pdGFibGVbWFhfTEFTVF9PUENPREVdID0geworI2luY2x1ZGUg ImRlY3RyZWVfZ2VuZXJhdGVkLmgiCit9OworCisjdW5kZWYgREVDT0RFX09QSU5GTworI3VuZGVm IERFQ09ERV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPCisjdW5k ZWYgREVDT0RFX0VORF9UQUJMRQorI3VuZGVmIElOVkFMSUQKKyN1bmRlZiBURVJNSU5BTAorI3Vu ZGVmIFNVQklOU05TCisjdW5kZWYgRVhUU1BBQ0UKKyN1bmRlZiBUQUJMRV9MSU5LCisjdW5kZWYg REVDT0RFX05FV19UQUJMRQorI3VuZGVmIERFQ09ERV9TRVBBUkFUT1JfQklUUworCit2b2lkIGRl Y29kZV9pbml0KHZvaWQpCit7CisgICAgZGVjb2RlX2V4dF9pbml0KCk7Cit9CisKK3ZvaWQgZGVj b2RlX3NlbmRfaW5zbl90byhwYWNrZXRfdCAqcGFja2V0LCBpbnQgc3RhcnQsIGludCBuZXdsb2Mp Cit7CisgICAgaW5zbl90IHRtcGluc247CisgICAgaW50IGRpcmVjdGlvbjsKKyAgICBpbnQgaTsK KyAgICBpZiAoc3RhcnQgPT0gbmV3bG9jKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg aWYgKHN0YXJ0IDwgbmV3bG9jKSB7CisgICAgICAgIC8qIE1vdmUgdG93YXJkcyBlbmQgKi8KKyAg ICAgICAgZGlyZWN0aW9uID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBtb3ZlIHRvd2Fy ZHMgYmVnaW5uaW5nICovCisgICAgICAgIGRpcmVjdGlvbiA9IC0xOworICAgIH0KKyAgICBmb3Ig KGkgPSBzdGFydDsgaSAhPSBuZXdsb2M7IGkgKz0gZGlyZWN0aW9uKSB7CisgICAgICAgIHRtcGlu c24gPSBwYWNrZXQtPmluc25baV07CisgICAgICAgIHBhY2tldC0+aW5zbltpXSA9IHBhY2tldC0+ aW5zbltpICsgZGlyZWN0aW9uXTsKKyAgICAgICAgcGFja2V0LT5pbnNuW2kgKyBkaXJlY3Rpb25d ID0gdG1waW5zbjsKKyAgICB9Cit9CisKKy8qIEZpbGwgbmV3dmFsdWUgcmVnaXN0ZXJzIHdpdGgg dGhlIGNvcnJlY3QgcmVnbm8gKi8KK3N0YXRpYyBpbnQKK2RlY29kZV9maWxsX25ld3ZhbHVlX3Jl Z25vKHBhY2tldF90ICpwYWNrZXQpCit7CisgICAgaW50IGksIGRlZl9yZWdudW0sIHVzZV9yZWdp ZHgsIGRlZl9pZHg7CisgICAgc2l6ZTJ1X3QgZGVmX29wY29kZSwgdXNlX29wY29kZTsKKyAgICBj aGFyICpkc3RzdHI7CisKKyAgICBmb3IgKGkgPSAxOyBpIDwgcGFja2V0LT5udW1faW5zbnM7IGkr KykgeworICAgICAgICBpZiAoR0VUX0FUVFJJQihwYWNrZXQtPmluc25baV0ub3Bjb2RlLCBBX0RP VE5FV1ZBTFVFKSAmJgorICAgICAgICAgICAgIUdFVF9BVFRSSUIocGFja2V0LT5pbnNuW2ldLm9w Y29kZSwgQV9FWFRFTlNJT04pKSB7CisgICAgICAgICAgICB1c2Vfb3Bjb2RlID0gcGFja2V0LT5p bnNuW2ldLm9wY29kZTsKKworICAgICAgICAgICAgLyogSXQncyBhIHN0b3JlLCBzbyB3ZSdyZSBh ZGp1c3RpbmcgdGhlIE50IGZpZWxkICovCisgICAgICAgICAgICBpZiAoR0VUX0FUVFJJQih1c2Vf b3Bjb2RlLCBBX1NUT1JFKSkgeworICAgICAgICAgICAgICAgIHVzZV9yZWdpZHggPSBzdHJjaHIo b3Bjb2RlX3JlZ2luZm9bdXNlX29wY29kZV0sICd0JykgLQorICAgICAgICAgICAgICAgICAgICBv cGNvZGVfcmVnaW5mb1t1c2Vfb3Bjb2RlXTsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgIC8qIEl0 J3MgYSBKdW1wLCBzbyB3ZSdyZSBhZGp1c3RpbmcgdGhlIE5zIGZpZWxkICovCisgICAgICAgICAg ICAgICAgdXNlX3JlZ2lkeCA9IHN0cmNocihvcGNvZGVfcmVnaW5mb1t1c2Vfb3Bjb2RlXSwgJ3Mn KSAtCisgICAgICAgICAgICAgICAgICAgIG9wY29kZV9yZWdpbmZvW3VzZV9vcGNvZGVdOworICAg ICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2hhdCdzIGVuY29k ZWQgYXQgdGhlIE4tZmllbGQgaXMgdGhlIG9mZnNldCB0byB3aG8ncyBwcm9kdWNpbmcKKyAgICAg ICAgICAgICAqIHRoZSB2YWx1ZS4gIFNoaWZ0IG9mZiB0aGUgTFNCIHdoaWNoIGluZGljYXRlcyBv ZGQvZXZlbiByZWdpc3Rlci4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZGVmX2lkeCA9 IGkgLSAoKHBhY2tldC0+aW5zbltpXS5yZWdub1t1c2VfcmVnaWR4XSkgPj4gMSk7CisKKyAgICAg ICAgICAgIC8qCisgICAgICAgICAgICAgKiBDaGVjayBmb3IgYSBiYWRseSBlbmNvZGVkIE4tZmll bGQgd2hpY2ggcG9pbnRzIHRvIGFuIGluc3RydWN0aW9uCisgICAgICAgICAgICAgKiBvdXQtb2Yt cmFuZ2UKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKChkZWZfaWR4IDwgMCkgfHwg KGRlZl9pZHggPiAocGFja2V0LT5udW1faW5zbnMgLSAxKSkpIHsKKyAgICAgICAgICAgICAgICBn X2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAvKiBwcmV2aW91cyBpbnNuIGlzIHRoZSBwcm9kdWNlciAq LworICAgICAgICAgICAgZGVmX29wY29kZSA9IHBhY2tldC0+aW5zbltkZWZfaWR4XS5vcGNvZGU7 CisgICAgICAgICAgICBkc3RzdHIgPSBzdHJzdHIob3Bjb2RlX3dyZWdzW2RlZl9vcGNvZGVdLCAi UmQiKTsKKyAgICAgICAgICAgIGlmIChkc3RzdHIpIHsKKyAgICAgICAgICAgICAgICBkc3RzdHIg PSBzdHJjaHIob3Bjb2RlX3JlZ2luZm9bZGVmX29wY29kZV0sICdkJyk7CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIGRzdHN0ciA9IHN0cnN0cihvcGNvZGVfd3JlZ3NbZGVm X29wY29kZV0sICJSeCIpOworICAgICAgICAgICAgICAgIGlmIChkc3RzdHIpIHsKKyAgICAgICAg ICAgICAgICAgICAgZHN0c3RyID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW2RlZl9vcGNvZGVdLCAn eCcpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRzdHN0 ciA9IHN0cnN0cihvcGNvZGVfd3JlZ3NbZGVmX29wY29kZV0sICJSZSIpOworICAgICAgICAgICAg ICAgICAgICBpZiAoZHN0c3RyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkc3RzdHIgPSBz dHJjaHIob3Bjb2RlX3JlZ2luZm9bZGVmX29wY29kZV0sICdlJyk7CisgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkc3RzdHIgPSBzdHJzdHIob3Bj b2RlX3dyZWdzW2RlZl9vcGNvZGVdLCAiUnkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm IChkc3RzdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RzdHIgPSBzdHJjaHIo b3Bjb2RlX3JlZ2luZm9bZGVmX29wY29kZV0sICd5Jyk7CisgICAgICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj aGVkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnX2Fzc2VydChkc3RzdHIgIT0gTlVMTCk7Cisg ICAgICAgICAgICBkZWZfcmVnbnVtID0KKyAgICAgICAgICAgICAgICBwYWNrZXQtPmluc25bZGVm X2lkeF0ucmVnbm9bZHN0c3RyIC0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX3JlZ2luZm9b ZGVmX29wY29kZV1dOworCisgICAgICAgICAgICAvKiBOb3cgcGF0Y2ggdXAgdGhlIGNvbnN1bWVy IHdpdGggdGhlIHJlZ2lzdGVyIG51bWJlciAqLworICAgICAgICAgICAgcGFja2V0LT5pbnNuW2ld LnJlZ25vW3VzZV9yZWdpZHhdID0gZGVmX3JlZ251bTsKKyAgICAgICAgICAgIC8qCisgICAgICAg ICAgICAgKiBXZSBuZWVkIHRvIHJlbWVtYmVyIHdobyBwcm9kdWNlcyB0aGlzIHZhbHVlIHRvIGxh dGVyCisgICAgICAgICAgICAgKiBjaGVjayBpZiBpdCB3YXMgZHluYW1pY2FsbHkgY2FuY2VsbGVk CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHBhY2tldC0+aW5zbltpXS5uZXdfdmFsdWVf cHJvZHVjZXJfc2xvdCA9CisgICAgICAgICAgICAgICAgcGFja2V0LT5pbnNuW2RlZl9pZHhdLnNs b3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFNwbGl0IENKIGlu dG8gYSBjb21wYXJlIGFuZCBhIGp1bXAgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX3NwbGl0X2NtcGp1 bXAocGFja2V0X3QgKnBrdCkKK3sKKyAgICBpbnQgbGFzdCwgaTsKKyAgICBpbnQgbnVtaW5zbnMg PSBwa3QtPm51bV9pbnNuczsKKworICAgIC8qCisgICAgICogRmlyc3QsIHNwbGl0IGFsbCBjb21w YXJlLWp1bXBzLgorICAgICAqIFRoZSBjb21wYXJlIGlzIHNlbnQgdG8gdGhlIGVuZCBhcyBhIG5l dyBpbnN0cnVjdGlvbi4KKyAgICAgKiBEbyBpdCB0aGlzIHdheSBzbyB3ZSBkb24ndCByZW9yZGVy IGR1YWwganVtcHMuIFRob3NlIG5lZWQgdG8gc3RheSBpbgorICAgICAqIG9yaWdpbmFsIG9yZGVy LgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW1pbnNuczsgaSsrKSB7CisgICAgICAg IC8qIEl0J3MgYSBjbXAtanVtcCAqLworICAgICAgICBpZiAoR0VUX0FUVFJJQihwa3QtPmluc25b aV0ub3Bjb2RlLCBBX05FV0NNUEpVTVApKSB7CisgICAgICAgICAgICBsYXN0ID0gcGt0LT5udW1f aW5zbnM7CisgICAgICAgICAgICBwa3QtPmluc25bbGFzdF0gPSBwa3QtPmluc25baV07ICAgIC8q IGNvcHkgdGhlIGluc3RydWN0aW9uICovCisgICAgICAgICAgICBwa3QtPmluc25bbGFzdF0ucGFy dDEgPSAxOyAgICAvKiBsYXN0IGluc3RydWN0aW9uIGRvZXMgdGhlIENNUCAqLworICAgICAgICAg ICAgcGt0LT5pbnNuW2ldLnBhcnQxID0gMDsgICAgLyogZXhpc3RpbmcgaW5zdHJ1Y3Rpb24gZG9l cyB0aGUgSlVNUCAqLworICAgICAgICBwa3QtPm51bV9pbnNucysrOworICAgICAgICB9CisgICAg fQorCisgICAgLyogTm93IHJlLXNodWZmbGUgYWxsIHRoZSBjb21wYXJlcyBiYWNrIHRvIHRoZSBi ZWdpbm5pbmcgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcGt0LT5udW1faW5zbnM7IGkrKykgewor ICAgICAgICBpZiAocGt0LT5pbnNuW2ldLnBhcnQxKSB7CisgICAgICAgICAgICBkZWNvZGVfc2Vu ZF9pbnNuX3RvKHBrdCwgaSwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbmxpbmUgaW50IGRlY29kZV9vcGNvZGVfY2FuX2p1bXAoaW50IG9wY29kZSkK K3sKKyAgICBpZiAoKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0pVTVApKSB8fAorICAgICAgICAoR0VU X0FUVFJJQihvcGNvZGUsIEFfQ0FMTCkpIHx8CisgICAgICAgIChvcGNvZGUgPT0gSjJfdHJhcDAp IHx8CisgICAgICAgIChvcGNvZGUgPT0gSjJfdHJhcDEpIHx8CisgICAgICAgIChvcGNvZGUgPT0g SjJfcnRlKSB8fAorICAgICAgICAob3Bjb2RlID09IEoyX3BhdXNlKSkgeworICAgICAgICAvKiBF eGNlcHRpb24gdG8gQV9KVU1QIGF0dHJpYnV0ZSAqLworICAgICAgICBpZiAob3Bjb2RlID09IEo0 X2hpbnRqdW1wcikgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 IGRlY29kZV9vcGNvZGVfZW5kc19sb29wKGludCBvcGNvZGUpCit7CisgICAgcmV0dXJuIEdFVF9B VFRSSUIob3Bjb2RlLCBBX0hXTE9PUDBfRU5EKSB8fAorICAgICAgICAgICBHRVRfQVRUUklCKG9w Y29kZSwgQV9IV0xPT1AxX0VORCk7Cit9CisKKy8qIFNldCB0aGUgaXNfKiBmaWVsZHMgaW4gZWFj aCBpbnN0cnVjdGlvbiAqLworc3RhdGljIGludCBkZWNvZGVfc2V0X2luc25fYXR0cl9maWVsZHMo cGFja2V0X3QgKnBrdCkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgbnVtaW5zbnMgPSBwa3QtPm51 bV9pbnNuczsKKyAgICBzaXplMnVfdCBvcGNvZGU7CisgICAgaW50IGxvYWRzID0gMDsKKyAgICBp bnQgc3RvcmVzID0gMDsKKyAgICBpbnQgY2FuanVtcDsKKyAgICBpbnQgdG90YWxfc2xvdHNfdmFs aWQgPSAwOworCisgICAgcGt0LT5udW1fcm9wcyA9IDA7CisgICAgcGt0LT5wa3RfaGFzX2NvZiA9 IDA7CisgICAgcGt0LT5wa3RfaGFzX2NhbGwgPSAwOworICAgIHBrdC0+cGt0X2hhc19qdW1wciA9 IDA7CisgICAgcGt0LT5wa3RfaGFzX2NqdW1wID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfY2p1bXBf ZG90bmV3ID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfY2p1bXBfZG90b2xkID0gMDsKKyAgICBwa3Qt PnBrdF9oYXNfY2p1bXBfbmV3dmFsID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfZW5kbG9vcCA9IDA7 CisgICAgcGt0LT5wa3RfaGFzX2VuZGxvb3AwID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfZW5kbG9v cDAxID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfZW5kbG9vcDEgPSAwOworICAgIHBrdC0+cGt0X2hh c19jYWNoZW9wID0gMDsKKyAgICBwa3QtPm1lbW9wX29yX252c3RvcmUgPSAwOworICAgIHBrdC0+ cGt0X2hhc19kY3plcm9hID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfZGVhbGxvY19yZXR1cm4gPSAw OworCisgICAgZm9yIChpID0gMDsgaSA8IG51bWluc25zOyBpKyspIHsKKyAgICAgICAgb3Bjb2Rl ID0gcGt0LT5pbnNuW2ldLm9wY29kZTsKKyAgICAgICAgaWYgKHBrdC0+aW5zbltpXS5wYXJ0MSkg eworICAgICAgICAgICAgY29udGludWU7ICAgIC8qIFNraXAgY29tcGFyZSBvZiBjbXAtanVtcHMg Ki8KKyAgICAgICAgfQorCisgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9ST1BTXzMp KSB7CisgICAgICAgICAgICBwa3QtPm51bV9yb3BzICs9IDM7CisgICAgICAgIH0gZWxzZSBpZiAo R0VUX0FUVFJJQihvcGNvZGUsIEFfUk9QU18yKSkgeworICAgICAgICAgICAgcGt0LT5udW1fcm9w cyArPSAyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGt0LT5udW1fcm9wcysrOwor ICAgICAgICB9CisgICAgICAgIGlmIChwa3QtPmluc25baV0uZXh0ZW5zaW9uX3ZhbGlkKSB7Cisg ICAgICAgICAgICBwa3QtPm51bV9yb3BzICs9IDI7CisgICAgICAgIH0KKworICAgICAgICBpZiAo R0VUX0FUVFJJQihvcGNvZGUsIEFfTUVNT1ApIHx8CisgICAgICAgICAgICBHRVRfQVRUUklCKG9w Y29kZSwgQV9OVlNUT1JFKSkgeworICAgICAgICAgICAgcGt0LT5tZW1vcF9vcl9udnN0b3JlID0g MTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9DQUNIRU9Q KSkgeworICAgICAgICAgICAgcGt0LT5wa3RfaGFzX2NhY2hlb3AgPSAxOworICAgICAgICAgICAg aWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0RDWkVST0EpKSB7CisgICAgICAgICAgICAgICAgcGt0 LT5wa3RfaGFzX2RjemVyb2EgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKEdF VF9BVFRSSUIob3Bjb2RlLCBBX0lDVEFHT1ApKSB7CisgICAgICAgICAgICAgICAgcGt0LT5wa3Rf aGFzX2ljdGFnb3AgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKEdFVF9BVFRS SUIob3Bjb2RlLCBBX0lDRkxVU0hPUCkpIHsKKyAgICAgICAgICAgICAgICBwa3QtPnBrdF9oYXNf aWNmbHVzaG9wID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChHRVRfQVRUUklC KG9wY29kZSwgQV9EQ1RBR09QKSkgeworICAgICAgICAgICAgICAgIHBrdC0+cGt0X2hhc19kY3Rh Z29wID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29k ZSwgQV9EQ0ZMVVNIT1ApKSB7CisgICAgICAgICAgICAgICAgcGt0LT5wa3RfaGFzX2RjZmx1c2hv cCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoR0VUX0FUVFJJQihvcGNvZGUs IEFfTDJUQUdPUCkpIHsKKyAgICAgICAgICAgICAgICBwa3QtPnBrdF9oYXNfbDJ0YWdvcCA9IDE7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfTDJG TFVTSE9QKSkgeworICAgICAgICAgICAgICAgIHBrdC0+cGt0X2hhc19sMmZsdXNob3AgPSAxOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2Rl LCBBX0RFQUxMT0NSRVQpKSB7CisgICAgICAgICAgICBwa3QtPnBrdF9oYXNfZGVhbGxvY19yZXR1 cm4gPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX1NU T1JFKSkgeworICAgICAgICAgICAgcGt0LT5pbnNuW2ldLmlzX3N0b3JlID0gMTsKKworICAgICAg ICAgICAgaWYgKHBrdC0+aW5zbltpXS5zbG90ID09IDApIHsKKyAgICAgICAgICAgICAgICBwa3Qt PnBrdF9oYXNfc3RvcmVfczAgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBwa3QtPnBrdF9oYXNfc3RvcmVfczEgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9EQ0ZFVENIKSkgeworICAgICAgICAg ICAgcGt0LT5pbnNuW2ldLmlzX2RjZmV0Y2ggPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChH RVRfQVRUUklCKG9wY29kZSwgQV9MT0FEKSkgeworICAgICAgICAgICAgcGt0LT5pbnNuW2ldLmlz X2xvYWQgPSAxOworCisgICAgICAgICAgICBpZiAocGt0LT5pbnNuW2ldLnNsb3QgPT0gMCkgewor ICAgICAgICAgICAgICAgIHBrdC0+cGt0X2hhc19sb2FkX3MwID0gMTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgcGt0LT5wa3RfaGFzX2xvYWRfczEgPSAxOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9NRU1P UCkpIHsKKyAgICAgICAgICAgIHBrdC0+aW5zbltpXS5pc19tZW1vcCA9IDE7CisgICAgICAgIH0K KyAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0RFQUxMT0NSRVQpIHx8CisgICAgICAg ICAgICBHRVRfQVRUUklCKG9wY29kZSwgQV9ERUFMTE9DRlJBTUUpKSB7CisgICAgICAgICAgICBw a3QtPmluc25baV0uaXNfZGVhbGxvYyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdFVF9B VFRSSUIob3Bjb2RlLCBBX0RDRkxVU0hPUCkgfHwKKyAgICAgICAgICAgIEdFVF9BVFRSSUIob3Bj b2RlLCBBX0RDVEFHT1ApKSB7CisgICAgICAgICAgICBwa3QtPmluc25baV0uaXNfZGNvcCA9IDE7 CisgICAgICAgIH0KKworICAgICAgICBwa3QtPnBrdF9oYXNfY2FsbCB8PSBHRVRfQVRUUklCKG9w Y29kZSwgQV9DQUxMKTsKKyAgICAgICAgcGt0LT5wa3RfaGFzX2p1bXByIHw9IEdFVF9BVFRSSUIo b3Bjb2RlLCBBX0lORElSRUNUKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIUdF VF9BVFRSSUIob3Bjb2RlLCBBX0hJTlRKUik7CisgICAgICAgIHBrdC0+cGt0X2hhc19janVtcCB8 PSBHRVRfQVRUUklCKG9wY29kZSwgQV9DSlVNUCk7CisgICAgICAgIHBrdC0+cGt0X2hhc19janVt cF9kb3RuZXcgfD0gR0VUX0FUVFJJQihvcGNvZGUsIEFfRE9UTkVXKSAmJgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NKVU1QKTsKKyAg ICAgICAgcGt0LT5wa3RfaGFzX2NqdW1wX2RvdG9sZCB8PSBHRVRfQVRUUklCKG9wY29kZSwgQV9E T1RPTEQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VUX0FUVFJJ QihvcGNvZGUsIEFfQ0pVTVApOworICAgICAgICBwa3QtPnBrdF9oYXNfY2p1bXBfbmV3dmFsIHw9 IEdFVF9BVFRSSUIob3Bjb2RlLCBBX0RPVE5FV1ZBTFVFKSAmJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NKVU1QKTsKKworICAgICAg ICBjYW5qdW1wID0gZGVjb2RlX29wY29kZV9jYW5fanVtcChvcGNvZGUpOworCisgICAgICAgIGlm IChwa3QtPnBrdF9oYXNfY29mKSB7CisgICAgICAgICAgICBpZiAoY2FuanVtcCkgeworICAgICAg ICAgICAgICAgIHBrdC0+cGt0X2hhc19kdWFsX2p1bXAgPSAxOworICAgICAgICAgICAgICAgIHBr dC0+aW5zbltpXS5pc18ybmRfanVtcCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBwa3QtPnBrdF9oYXNfY29mIHw9IGNhbmp1bXA7CisgICAgICAgIH0K KworICAgICAgICBwa3QtPmluc25baV0uaXNfZW5kbG9vcCA9IGRlY29kZV9vcGNvZGVfZW5kc19s b29wKG9wY29kZSk7CisKKyAgICAgICAgcGt0LT5wa3RfaGFzX2VuZGxvb3AgfD0gcGt0LT5pbnNu W2ldLmlzX2VuZGxvb3A7CisgICAgICAgIHBrdC0+cGt0X2hhc19lbmRsb29wMCB8PSBHRVRfQVRU UklCKG9wY29kZSwgQV9IV0xPT1AwX0VORCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICFHRVRfQVRUUklCKG9wY29kZSwgQV9IV0xPT1AxX0VORCk7CisgICAgICAgIHBrdC0+ cGt0X2hhc19lbmRsb29wMDEgfD0gR0VUX0FUVFJJQihvcGNvZGUsIEFfSFdMT09QMF9FTkQpICYm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VUX0FUVFJJQihvcGNvZGUsIEFf SFdMT09QMV9FTkQpOworICAgICAgICBwa3QtPnBrdF9oYXNfZW5kbG9vcDEgfD0gR0VUX0FUVFJJ QihvcGNvZGUsIEFfSFdMT09QMV9FTkQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAhR0VUX0FUVFJJQihvcGNvZGUsIEFfSFdMT09QMF9FTkQpOworCisgICAgICAgIHBrdC0+ cGt0X2hhc19jb2YgfD0gcGt0LT5wa3RfaGFzX2VuZGxvb3A7CisKKyAgICAgICAgLyogTm93IGNy ZWF0ZSBzbG90IHZhbGlkcyAqLworICAgICAgICBpZiAocGt0LT5pbnNuW2ldLmlzX2VuZGxvb3Ap ICAgIC8qIERvbid0IGNvdW50IGVuZGxvb3BzICovCisgICAgICAgICAgICBjb250aW51ZTsKKwor ICAgICAgICBzd2l0Y2ggKHBrdC0+aW5zbltpXS5zbG90KSB7CisgICAgICAgIGNhc2UgMDoKKyAg ICAgICAgICAgIHBrdC0+c2xvdDBfdmFsaWQgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGNhc2UgMToKKyAgICAgICAgICAgIHBrdC0+c2xvdDFfdmFsaWQgPSAxOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHBrdC0+c2xvdDJfdmFsaWQg PSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHBr dC0+c2xvdDNfdmFsaWQgPSAxOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB0 b3RhbF9zbG90c192YWxpZCsrOworCisgICAgICAgIC8qIEFuZCB0cmFjayAjbG9hZHMvc3RvcmVz ICovCisgICAgICAgIGlmIChwa3QtPmluc25baV0uaXNfc3RvcmUpIHsKKyAgICAgICAgICAgIHN0 b3JlcysrOworICAgICAgICB9IGVsc2UgaWYgKHBrdC0+aW5zbltpXS5pc19sb2FkKSB7CisgICAg ICAgICAgICBsb2FkcysrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0b3JlcyA9PSAy KSB7CisgICAgICAgIHBrdC0+ZHVhbF9zdG9yZSA9IDE7CisgICAgfSBlbHNlIGlmIChsb2FkcyA9 PSAyKSB7CisgICAgICAgIHBrdC0+ZHVhbF9sb2FkID0gMTsKKyAgICB9IGVsc2UgaWYgKChsb2Fk cyA9PSAxKSAmJiAoc3RvcmVzID09IDEpKSB7CisgICAgICAgIHBrdC0+bG9hZF9hbmRfc3RvcmUg PSAxOworICAgIH0gZWxzZSBpZiAobG9hZHMgPT0gMSkgeworICAgICAgICBwa3QtPnNpbmdsZV9s b2FkID0gMTsKKyAgICB9IGVsc2UgaWYgKHN0b3JlcyA9PSAxKSB7CisgICAgICAgIHBrdC0+c2lu Z2xlX3N0b3JlID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIFNodWZm bGUgZm9yIGV4ZWN1dGlvbgorICogTW92ZSBzdG9yZXMgdG8gZW5kIChpbiBzYW1lIG9yZGVyIGFz IGVuY29kaW5nKQorICogTW92ZSBjb21wYXJlcyB0byBiZWdpbm5pbmcgKGZvciB1c2UgYnkgLm5l dyBpbnNucykKKyAqLworc3RhdGljIGludCBkZWNvZGVfc2h1ZmZsZV9mb3JfZXhlY3V0aW9uKHBh Y2tldF90ICpwYWNrZXQpCit7CisgICAgaW50IGNoYW5nZWQgPSAwOworICAgIGludCBpOworICAg IGludCBmbGFnOyAgICAvKiBmbGFnIG1lYW5zIHdlJ3ZlIHNlZW4gYSBub24tbWVtb3J5IGluc3Ry dWN0aW9uICovCisgICAgaW50IG5fbWVtczsKKyAgICBpbnQgbGFzdF9pbnNuID0gcGFja2V0LT5u dW1faW5zbnMgLSAxOworCisgICAgLyoKKyAgICAgKiBTa2lwIGVuZCBsb29wcywgc29tZWhvdyBh biBlbmQgbG9vcCBpcyBnZXR0aW5nIGluIGFuZCBtZXNzaW5nCisgICAgICogdXAgdGhlIG9yZGVy CisgICAgICovCisgICAgaWYgKGRlY29kZV9vcGNvZGVfZW5kc19sb29wKHBhY2tldC0+aW5zblts YXN0X2luc25dLm9wY29kZSkpIHsKKyAgICAgICAgbGFzdF9pbnNuLS07CisgICAgfQorCisgICAg ZG8geworICAgICAgICBjaGFuZ2VkID0gMDsKKyAgICAgICAgLyoKKyAgICAgICAgICogU3RvcmVz IGdvIGxhc3QsIG11c3Qgbm90IHJlb3JkZXIuCisgICAgICAgICAqIENhbm5vdCBzaHVmZmxlIHN0 b3JlcyBwYXN0IGxvYWRzLCBlaXRoZXIuCisgICAgICAgICAqIEl0ZXJhdGUgYmFja3dhcmRzLiAg SWYgd2Ugc2VlIGEgbm9uLW1lbW9yeSBpbnN0cnVjdGlvbiwKKyAgICAgICAgICogdGhlbiBhIHN0 b3JlLCBzaHVmZmxlIHRoZSBzdG9yZSB0byB0aGUgZnJvbnQuICBEb24ndCBzaHVmZmxlCisgICAg ICAgICAqICBzdG9yZXMgd3J0IGVhY2ggb3RoZXIgb3IgYSBsb2FkLgorICAgICAgICAgKi8KKyAg ICAgICAgZm9yIChmbGFnID0gbl9tZW1zID0gMCwgaSA9IGxhc3RfaW5zbjsgaSA+PSAwOyBpLS0p IHsKKyAgICAgICAgICAgIGludCBvcGNvZGUgPSBwYWNrZXQtPmluc25baV0ub3Bjb2RlOworCisg ICAgICAgICAgICBpZiAoZmxhZyAmJiBHRVRfQVRUUklCKG9wY29kZSwgQV9TVE9SRSkpIHsKKyAg ICAgICAgICAgICAgICBkZWNvZGVfc2VuZF9pbnNuX3RvKHBhY2tldCwgaSwgbGFzdF9pbnNuIC0g bl9tZW1zKTsKKyAgICAgICAgICAgICAgICBuX21lbXMrKzsKKyAgICAgICAgICAgICAgICBjaGFu Z2VkID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfU1RP UkUpKSB7CisgICAgICAgICAgICAgICAgbl9tZW1zKys7CisgICAgICAgICAgICB9IGVsc2UgaWYg KEdFVF9BVFRSSUIob3Bjb2RlLCBBX0xPQUQpKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAg ICAgICAgICAgICAgKiBEb24ndCBzZXQgZmxhZywgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBzaHVm ZmxlIGEKKyAgICAgICAgICAgICAgICAgKiBzdG9yZSBwYXN0YSBsb2FkCisgICAgICAgICAgICAg ICAgICovCisgICAgICAgICAgICAgICAgbl9tZW1zKys7CisgICAgICAgICAgICB9IGVsc2UgaWYg KEdFVF9BVFRSSUIob3Bjb2RlLCBBX0RPVE5FV1ZBTFVFKSkgeworICAgICAgICAgICAgICAgIC8q CisgICAgICAgICAgICAgICAgICogRG9uJ3Qgc2V0IGZsYWcsIHNpbmNlIHdlIGRvbid0IHdhbnQg dG8gc2h1ZmZsZSBwYXN0CisgICAgICAgICAgICAgICAgICogYSAubmV3IHZhbHVlCisgICAgICAg ICAgICAgICAgICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZsYWcg PSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoYW5nZWQpIHsK KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qIENvbXBhcmVzIGdv IGZpcnN0LCBtYXkgYmUgcmVvcmRlcmVkIHdydCBlYWNoIG90aGVyICovCisgICAgICAgIGZvciAo ZmxhZyA9IDAsIGkgPSAwOyBpIDwgbGFzdF9pbnNuICsgMTsgaSsrKSB7CisgICAgICAgICAgICBp bnQgb3Bjb2RlID0gcGFja2V0LT5pbnNuW2ldLm9wY29kZTsKKworICAgICAgICAgICAgaWYgKChz dHJzdHIob3Bjb2RlX3dyZWdzW29wY29kZV0sICJQZDQiKSB8fAorICAgICAgICAgICAgICAgICBz dHJzdHIob3Bjb2RlX3dyZWdzW29wY29kZV0sICJQZTQiKSkgJiYKKyAgICAgICAgICAgICAgICBH RVRfQVRUUklCKG9wY29kZSwgQV9TVE9SRSkgPT0gMCkgeworICAgICAgICAgICAgICAgIC8qIFRo aXMgc2hvdWxkIGJlIGEgY29tcGFyZSAobm90IGEgc3RvcmUgY29uZGl0aW9uYWwpICovCisgICAg ICAgICAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlX3NlbmRf aW5zbl90byhwYWNrZXQsIGksIDApOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsK KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfSBlbHNlIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9JTVBMSUNJVF9XUklURVNfUDMp ICYmCisgICAgICAgICAgICAgICAgICAgICAgICFkZWNvZGVfb3Bjb2RlX2VuZHNfbG9vcChwYWNr ZXQtPmluc25baV0ub3Bjb2RlKSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg ICAgICogc3BObG9vcCBpbnN0cnVjdGlvbgorICAgICAgICAgICAgICAgICAqIERvbid0IHJlb3Jk ZXIgZW5kbG9vcHM7IHRoZXkgYXJlIG5vdCB2YWxpZCBmb3IgLm5ldyB1c2VzLAorICAgICAgICAg ICAgICAgICAqIGFuZCB3ZSB3YW50IHRvIG1hdGNoIEhXCisgICAgICAgICAgICAgICAgICovCisg ICAgICAgICAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlX3Nl bmRfaW5zbl90byhwYWNrZXQsIGksIDApOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0g MTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfSBlbHNlIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9JTVBMSUNJVF9XUklURVNf UDApICYmCisgICAgICAgICAgICAgICAgICAgICAgICFHRVRfQVRUUklCKG9wY29kZSwgQV9ORVdD TVBKVU1QKSkgeworICAgICAgICAgICAgICAgIC8qIENBQkFDIGluc3RydWN0aW9uICovCisgICAg ICAgICAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlX3NlbmRf aW5zbl90byhwYWNrZXQsIGksIDApOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsK KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIC8qCisgICAgICogSWYg d2UgaGF2ZSBhIC5uZXcgcmVnaXN0ZXIgY29tcGFyZS9icmFuY2gsIG1vdmUgdGhhdCB0byB0aGUg dmVyeQorICAgICAqIHZlcnkgZW5kLCBwYXN0IHN0b3JlcworICAgICAqLworICAgIGZvciAoaSA9 IDA7IGkgPCBsYXN0X2luc247IGkrKykgeworICAgICAgICBpZiAoR0VUX0FUVFJJQihwYWNrZXQt Pmluc25baV0ub3Bjb2RlLCBBX0RPVE5FV1ZBTFVFKSkgeworICAgICAgICAgICAgZGVjb2RlX3Nl bmRfaW5zbl90byhwYWNrZXQsIGksIGxhc3RfaW5zbik7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogQW5kIGF0IHRoZSB2ZXJ5IHZlcnkgdmVy eSBlbmQsIG1vdmUgYW55IFJURSdzLCBzaW5jZSB0aGV5IHVwZGF0ZQorICAgICAqIHVzZXIvc3Vw ZXJ2aXNvciBtb2RlLgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBsYXN0X2luc247IGkr KykgeworICAgICAgICBpZiAoKHBhY2tldC0+aW5zbltpXS5vcGNvZGUgPT0gSjJfcnRlKSkgewor ICAgICAgICAgICAgZGVjb2RlX3NlbmRfaW5zbl90byhwYWNrZXQsIGksIGxhc3RfaW5zbik7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgZGVjb2RlX2Fzc2VtYmxlcl9jb3VudF9mcG9wcyhwYWNrZXRfdCAqcGt0KQor eworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBwa3QtPm51bV9pbnNuczsgaSsrKSB7 CisgICAgICAgIGlmIChHRVRfQVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfRlBPUCkpIHsK KyAgICAgICAgICAgIHBrdC0+cGt0X2hhc19mcF9vcCA9IDE7CisgICAgICAgIH0KKyAgICAgICAg aWYgKEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9GUERPVUJMRSkpIHsKKyAgICAg ICAgICAgIHBrdC0+cGt0X2hhc19mcGRwX29wID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChHRVRf QVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfRlBTSU5HTEUpKSB7CisgICAgICAgICAgICBw a3QtPnBrdF9oYXNfZnBzcF9vcCA9IDE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBp bnQKK2FwcGx5X2V4dGVuZGVyKHBhY2tldF90ICpwa3QsIGludCBpLCBzaXplNHVfdCBleHRlbmRl cikKK3sKKyAgICBpbnQgaW1tZWRfbnVtOworICAgIHNpemU0dV90IGJhc2VfaW1tZWQ7CisKKyAg ICBpbW1lZF9udW0gPSBvcGNvZGVfd2hpY2hfaW1tZWRpYXRlX2lzX2V4dGVuZGVkKHBrdC0+aW5z bltpXS5vcGNvZGUpOworICAgIGJhc2VfaW1tZWQgPSBwa3QtPmluc25baV0uaW1tZWRbaW1tZWRf bnVtXTsKKworICAgIHBrdC0+aW5zbltpXS5pbW1lZFtpbW1lZF9udW1dID0gZXh0ZW5kZXIgfCBm WlhUTig2LCAzMiwgYmFzZV9pbW1lZCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg ZGVjb2RlX2FwcGx5X2V4dGVuZGVycyhwYWNrZXRfdCAqcGFja2V0KQoreworICAgIGludCBpOwor ICAgIGZvciAoaSA9IDA7IGkgPCBwYWNrZXQtPm51bV9pbnNuczsgaSsrKSB7CisgICAgICAgIGlm IChHRVRfQVRUUklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfSVRfRVhURU5ERVIpKSB7Cisg ICAgICAgICAgICBwYWNrZXQtPmluc25baSArIDFdLmV4dGVuc2lvbl92YWxpZCA9IDE7CisgICAg ICAgICAgICBwYWNrZXQtPnBrdF9oYXNfcGF5bG9hZCA9IDE7CisgICAgICAgICAgICBhcHBseV9l eHRlbmRlcihwYWNrZXQsIGkgKyAxLCBwYWNrZXQtPmluc25baV0uaW1tZWRbMF0pOworICAgICAg ICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29kZV9yZW1vdmVf ZXh0ZW5kZXJzKHBhY2tldF90ICpwYWNrZXQpCit7CisgICAgaW50IGksIGo7CisgICAgZm9yIChp ID0gMDsgaSA8IHBhY2tldC0+bnVtX2luc25zOyBpKyspIHsKKyAgICAgICAgaWYgKEdFVF9BVFRS SUIocGFja2V0LT5pbnNuW2ldLm9wY29kZSwgQV9JVF9FWFRFTkRFUikpIHsKKyAgICAgICAgICAg IGZvciAoaiA9IGk7CisgICAgICAgICAgICAgICAgKGogPCBwYWNrZXQtPm51bV9pbnNucyAtIDEp ICYmIChqIDwgSU5TVFJVQ1RJT05TX01BWCAtIDEpOworICAgICAgICAgICAgICAgIGorKykgewor ICAgICAgICAgICAgICAgIHBhY2tldC0+aW5zbltqXSA9IHBhY2tldC0+aW5zbltqICsgMV07Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBwYWNrZXQtPm51bV9pbnNucy0tOworICAgICAgICB9 CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfdmFs aWRfc2xvdF9zdHIoY29uc3QgcGFja2V0X3QgKnBrdCwgdW5zaWduZWQgaW50IHNsb3QpCit7Cisg ICAgcmV0dXJuIGZpbmRfaWNsYXNzX3Nsb3RzKHBrdC0+aW5zbltzbG90XS5vcGNvZGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBrdC0+aW5zbltzbG90XS5pY2xhc3MpOworfQorCisj aW5jbHVkZSAicTZ2X2RlY29kZS5jIgorCitwYWNrZXRfdCAqZGVjb2RlX3RoaXMoaW50IG1heF93 b3Jkcywgc2l6ZTR1X3QgKndvcmRzLCBwYWNrZXRfdCAqZGVjb2RlX3BrdCkKK3sKKyAgICBpbnQg cmV0OworICAgIHJldCA9IGRvX2RlY29kZV9wYWNrZXQobWF4X3dvcmRzLCB3b3JkcywgZGVjb2Rl X3BrdCk7CisgICAgaWYgKHJldCA8PSAwKSB7CisgICAgICAgIC8qIEVSUk9SIG9yIEJBRCBQQVJT RSAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGRlY29kZV9wa3Q7 Cit9CisKKy8qIFVzZWQgZm9yICItZCBpbl9hc20iIGxvZ2dpbmcgKi8KK2ludCBkaXNhc3NlbWJs ZV9oZXhhZ29uKHVpbnQzMl90ICp3b3JkcywgaW50IG53b3JkcywgY2hhciAqYnVmLCBpbnQgYnVm c2l6ZSkKK3sKKyAgICBwYWNrZXRfdCBwa3Q7CisKKyAgICBpZiAoZGVjb2RlX3RoaXMobndvcmRz LCB3b3JkcywgJnBrdCkpIHsKKyAgICAgICAgc25wcmludF9hX3BrdChidWYsIGJ1ZnNpemUsICZw a3QpOworICAgICAgICByZXR1cm4gcGt0LmVuY29kX3BrdF9zaXplX2luX2J5dGVzOworICAgIH0g ZWxzZSB7CisgICAgICAgIHNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIjxpbnZhbGlkPiIpOworICAg ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9xNnZf ZGVjb2RlLmMgYi90YXJnZXQvaGV4YWdvbi9xNnZfZGVjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZjJiMTU0OAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhh Z29uL3E2dl9kZWNvZGUuYwpAQCAtMCwwICsxLDQwMiBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykg MjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVz ZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLwor CisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBXSEFUTk9UKSAgICAgLyogTk9U SElORyAqLworI2RlZmluZSBUQUJMRV9MSU5LKFRBQkxFKSAgICAgICAgICAgICAgICAgICAgICAg IC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgVEVSTUlOQUwoVEFHLCBFTkMpICAgICAgICAgICAgICAg ICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIFNVQklOU05TKFRBRywgQ0xBU1NBLCBDTEFT U0IsIEVOQykgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBFWFRTUEFDRShUQUcsIEVOQykg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgSU5WQUxJRCgpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09E RV9FTkRfVEFCTEUoLi4uKSAgICAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmlu ZSBERUNPREVfTUFUQ0hfSU5GTyguLi4pICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8K KyNkZWZpbmUgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPKC4uLikgICAgICAgICAgICAvKiBOT1RI SU5HICovCisKKyNkZWZpbmUgREVDT0RFX1JFRyhSRUdOTywgV0lEVEgsIFNUQVJUQklUKSBcCisg ICAgaW5zbi0+cmVnbm9bUkVHTk9dID0gKChlbmNvZGluZyA+PiBTVEFSVEJJVCkgJiAoKDEgPDwg V0lEVEgpIC0gMSkpOworCisjZGVmaW5lIERFQ09ERV9JTVBMX1JFRyhSRUdOTywgVkFMKSBcCisg ICAgaW5zbi0+cmVnbm9bUkVHTk9dID0gVkFMOworCisjZGVmaW5lIERFQ09ERV9JTU0oSU1NTk8s IFdJRFRILCBTVEFSVEJJVCwgVkFMU1RBUlQpIFwKKyAgICBpbnNuLT5pbW1lZFtJTU1OT10gfD0g KCgoZW5jb2RpbmcgPj4gU1RBUlRCSVQpICYgKCgxIDw8IFdJRFRIKSAtIDEpKSkgPDwgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAoVkFMU1RBUlQpOworCisjZGVmaW5lIERFQ09ERV9JTU1f U1hUKElNTU5PLCBXSURUSCkgXAorICAgIGluc24tPmltbWVkW0lNTU5PXSA9ICgoKChzaXplNHNf dClpbnNuLT5pbW1lZFtJTU1OT10pIDw8ICgzMiAtIFdJRFRIKSkgPj4gXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAoMzIgLSBXSURUSCkpOworCisjZGVmaW5lIERFQ09ERV9JTU1fTkVHKElN TU5PLCBXSURUSCkgXAorICAgIGluc24tPmltbWVkW0lNTU5PXSA9IC1pbnNuLT5pbW1lZFtJTU1O T107CisKKyNkZWZpbmUgREVDT0RFX0lNTV9TSElGVChJTU1OTywgU0hBTVQpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoIWluc24tPmV4dGVuc2lvbl92YWxpZCkg fHwgXAorICAgICAgICAoaW5zbi0+d2hpY2hfZXh0ZW5kZWQgIT0gSU1NTk8pKSB7IFwKKyAgICAg ICAgaW5zbi0+aW1tZWRbSU1NTk9dIDw8PSBTSEFNVDsgXAorICAgIH0KKworI2RlZmluZSBERUNP REVfT1BJTkZPKFRBRywgQkVIKSBcCisgICAgY2FzZSBUQUc6IFwKKyAgICAgICAgeyBCRUggIH0g XAorICAgICAgICBicmVhazsgXAorCitzdGF0aWMgdm9pZAorZGVjb2RlX29wKGluc25fdCAqaW5z biwgb3Bjb2RlX3QgdGFnLCBzaXplNHVfdCBlbmNvZGluZykKK3sKKyAgICBpbnNuLT5pbW1lZFsw XSA9IDA7CisgICAgaW5zbi0+aW1tZWRbMV0gPSAwOworICAgIGlmIChpbnNuLT5leHRlbnNpb25f dmFsaWQpIHsKKyAgICAgICAgaW5zbi0+d2hpY2hfZXh0ZW5kZWQgPSBvcGNvZGVfd2hpY2hfaW1t ZWRpYXRlX2lzX2V4dGVuZGVkKHRhZyk7CisgICAgfQorICAgIGluc24tPm9wY29kZSA9IHRhZzsK KworICAgIHN3aXRjaCAodGFnKSB7CisjaW5jbHVkZSAiZGVjdHJlZV9nZW5lcmF0ZWQuaCIKKyAg ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpbnNuLT5nZW5lcmF0ZSA9 IG9wY29kZV9nZW5wdHJbdGFnXTsKKyAgICBpbnNuLT5pY2xhc3MgPSAoZW5jb2RpbmcgPj4gMjgp ICYgMHhmOworICAgIGlmICgoKGVuY29kaW5nID4+IDE0KSAmIDMpID09IDApIHsKKyAgICAgICAg aW5zbi0+aWNsYXNzICs9IDE2OworICAgIH0KK30KKworI3VuZGVmIERFQ09ERV9SRUcKKyN1bmRl ZiBERUNPREVfSU1QTF9SRUcKKyN1bmRlZiBERUNPREVfSU1NCisjdW5kZWYgREVDT0RFX0lNTV9T SElGVAorI3VuZGVmIERFQ09ERV9PUElORk8KKyN1bmRlZiBERUNPREVfTUFUQ0hfSU5GTworI3Vu ZGVmIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTworI3VuZGVmIERFQ09ERV9FTkRfVEFCTEUKKyN1 bmRlZiBJTlZBTElECisjdW5kZWYgVEVSTUlOQUwKKyN1bmRlZiBTVUJJTlNOUworI3VuZGVmIEVY VFNQQUNFCisjdW5kZWYgVEFCTEVfTElOSworI3VuZGVmIERFQ09ERV9ORVdfVEFCTEUKKyN1bmRl ZiBERUNPREVfU0VQQVJBVE9SX0JJVFMKKworc3RhdGljIHVuc2lnbmVkIGludAorZGVjb2RlX3N1 Ymluc25fdGFibGV3YWxrKGluc25fdCAqaW5zbiwgZGVjdHJlZV90YWJsZV90ICp0YWJsZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplNHVfdCBlbmNvZGluZykKK3sKKyAgICB1bnNpZ25l ZCBpbnQgaTsKKyAgICBvcGNvZGVfdCBvcGM7CisgICAgaWYgKHRhYmxlLT5sb29rdXBfZnVuY3Rp b24pIHsKKyAgICAgICAgaSA9IHRhYmxlLT5sb29rdXBfZnVuY3Rpb24odGFibGUtPnN0YXJ0Yml0 LCB0YWJsZS0+d2lkdGgsIGVuY29kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpID0gKChl bmNvZGluZyA+PiB0YWJsZS0+c3RhcnRiaXQpICYgKCgxIDw8IHRhYmxlLT53aWR0aCkgLSAxKSk7 CisgICAgfQorICAgIGlmICh0YWJsZS0+dGFibGVbaV0udHlwZSA9PSBERUNUUkVFX1RBQkxFX0xJ TkspIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZV9zdWJpbnNuX3RhYmxld2FsayhpbnNuLCB0YWJs ZS0+dGFibGVbaV0udGFibGVfbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbmNvZGluZyk7CisgICAgfSBlbHNlIGlmICh0YWJsZS0+dGFibGVbaV0udHlwZSA9 PSBERUNUUkVFX1RFUk1JTkFMKSB7CisgICAgICAgIG9wYyA9IHRhYmxlLT50YWJsZVtpXS5vcGNv ZGU7CisgICAgICAgIGlmICgoZW5jb2RpbmcgJiBkZWNvZGVfaXRhYmxlW29wY10ubWFzaykgIT0g ZGVjb2RlX2l0YWJsZVtvcGNdLm1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg ICAgfQorICAgICAgICBkZWNvZGVfb3AoaW5zbiwgb3BjLCBlbmNvZGluZyk7CisgICAgICAgIHJl dHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3Rh dGljIHVuc2lnbmVkIGludCBnZXRfaW5zbl9hKHNpemU0dV90IGVuY29kaW5nKQoreworICAgIHJl dHVybiBlbmNvZGluZyAmIDB4MDAwMDFmZmY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0 X2luc25fYihzaXplNHVfdCBlbmNvZGluZykKK3sKKyAgICByZXR1cm4gKGVuY29kaW5nID4+IDE2 KSAmIDB4MDAwMDFmZmY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RlY29kZV9pbnNuc190 YWJsZXdhbGsoaW5zbl90ICppbnNuLCBkZWN0cmVlX3RhYmxlX3QgKnRhYmxlLCBzaXplNHVfdCBl bmNvZGluZykKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB1bnNpZ25lZCBpbnQgYSwgYjsK KyAgICBvcGNvZGVfdCBvcGM7CisgICAgaWYgKHRhYmxlLT5sb29rdXBfZnVuY3Rpb24pIHsKKyAg ICAgICAgaSA9IHRhYmxlLT5sb29rdXBfZnVuY3Rpb24odGFibGUtPnN0YXJ0Yml0LCB0YWJsZS0+ d2lkdGgsIGVuY29kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpID0gKChlbmNvZGluZyA+ PiB0YWJsZS0+c3RhcnRiaXQpICYgKCgxIDw8IHRhYmxlLT53aWR0aCkgLSAxKSk7CisgICAgfQor ICAgIGlmICh0YWJsZS0+dGFibGVbaV0udHlwZSA9PSBERUNUUkVFX1RBQkxFX0xJTkspIHsKKyAg ICAgICAgcmV0dXJuIGRlY29kZV9pbnNuc190YWJsZXdhbGsoaW5zbiwgdGFibGUtPnRhYmxlW2ld LnRhYmxlX2xpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29k aW5nKTsKKyAgICB9IGVsc2UgaWYgKHRhYmxlLT50YWJsZVtpXS50eXBlID09IERFQ1RSRUVfU1VC SU5TTlMpIHsKKyAgICAgICAgYSA9IGdldF9pbnNuX2EoZW5jb2RpbmcpOworICAgICAgICBiID0g Z2V0X2luc25fYihlbmNvZGluZyk7CisgICAgICAgIGIgPSBkZWNvZGVfc3ViaW5zbl90YWJsZXdh bGsoaW5zbiwgdGFibGUtPnRhYmxlW2ldLnRhYmxlX2xpbmtfYiwgYik7CisgICAgICAgIGEgPSBk ZWNvZGVfc3ViaW5zbl90YWJsZXdhbGsoaW5zbiArIDEsIHRhYmxlLT50YWJsZVtpXS50YWJsZV9s aW5rLCBhKTsKKyAgICAgICAgaWYgKChhID09IDApIHx8IChiID09IDApKSB7CisgICAgICAgICAg ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMjsKKyAgICB9IGVsc2UgaWYg KHRhYmxlLT50YWJsZVtpXS50eXBlID09IERFQ1RSRUVfVEVSTUlOQUwpIHsKKyAgICAgICAgb3Bj ID0gdGFibGUtPnRhYmxlW2ldLm9wY29kZTsKKyAgICAgICAgaWYgKChlbmNvZGluZyAmIGRlY29k ZV9pdGFibGVbb3BjXS5tYXNrKSAhPSBkZWNvZGVfaXRhYmxlW29wY10ubWF0Y2gpIHsKKyAgICAg ICAgICAgIGlmICgoZW5jb2RpbmcgJiBkZWNvZGVfbGVnYWN5X2l0YWJsZVtvcGNdLm1hc2spICE9 CisgICAgICAgICAgICAgICAgZGVjb2RlX2xlZ2FjeV9pdGFibGVbb3BjXS5tYXRjaCkgeworICAg ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGRlY29kZV9vcChpbnNuLCBvcGMsIGVuY29kaW5nKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAg fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQg aW50CitkZWNvZGVfaW5zbnMoaW5zbl90ICppbnNuLCBzaXplNHVfdCBlbmNvZGluZykKK3sKKyAg ICBkZWN0cmVlX3RhYmxlX3QgKnRhYmxlOworICAgIGlmICgoZW5jb2RpbmcgJiAweDAwMDBjMDAw KSAhPSAwKSB7CisgICAgICAgIC8qIFN0YXJ0IHdpdGggUFAgdGFibGUgKi8KKyAgICAgICAgdGFi bGUgPSAmZGVjdHJlZV90YWJsZV9ERUNPREVfUk9PVF8zMjsKKyAgICB9IGVsc2UgeworICAgICAg ICAvKiBzdGFydCB3aXRoIEVFIHRhYmxlICovCisgICAgICAgIHRhYmxlID0gJmRlY3RyZWVfdGFi bGVfREVDT0RFX1JPT1RfRUU7CisgICAgfQorICAgIHJldHVybiBkZWNvZGVfaW5zbnNfdGFibGV3 YWxrKGluc24sIHRhYmxlLCBlbmNvZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV9hZGRf ZW5kbG9vcF9pbnNuKGluc25fdCAqaW5zbiwgaW50IGxvb3BudW0pCit7CisgICAgaWYgKGxvb3Bu dW0gPT0gMTApIHsKKyAgICAgICAgaW5zbi0+b3Bjb2RlID0gSjJfZW5kbG9vcDAxOworICAgICAg ICBpbnNuLT5nZW5lcmF0ZSA9IG9wY29kZV9nZW5wdHJbSjJfZW5kbG9vcDAxXTsKKyAgICB9IGVs c2UgaWYgKGxvb3BudW0gPT0gMSkgeworICAgICAgICBpbnNuLT5vcGNvZGUgPSBKMl9lbmRsb29w MTsKKyAgICAgICAgaW5zbi0+Z2VuZXJhdGUgPSBvcGNvZGVfZ2VucHRyW0oyX2VuZGxvb3AxXTsK KyAgICB9IGVsc2UgeworICAgICAgICBpbnNuLT5vcGNvZGUgPSBKMl9lbmRsb29wMDsKKyAgICAg ICAgaW5zbi0+Z2VuZXJhdGUgPSBvcGNvZGVfZ2VucHRyW0oyX2VuZGxvb3AwXTsKKyAgICB9Cit9 CisKK3N0YXRpYyBpbmxpbmUgaW50IGRlY29kZV9wYXJzZWJpdHNfaXNfZW5kKHNpemU0dV90IGVu Y29kaW5nMzIpCit7CisgICAgc2l6ZTR1X3QgYml0cyA9IChlbmNvZGluZzMyID4+IDE0KSAmIDB4 MzsKKyAgICByZXR1cm4gKChiaXRzID09IDB4MykgfHwgKGJpdHMgPT0gMHgwKSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgaW50IGRlY29kZV9wYXJzZWJpdHNfaXNfbG9vcGVuZChzaXplNHVfdCBlbmNv ZGluZzMyKQoreworICAgIHNpemU0dV90IGJpdHMgPSAoZW5jb2RpbmczMiA+PiAxNCkgJiAweDM7 CisgICAgcmV0dXJuICgoYml0cyA9PSAweDIpKTsKK30KKworc3RhdGljIGludAorZGVjb2RlX3Nl dF9zbG90X251bWJlcihwYWNrZXRfdCAqcGt0KQoreworICAgIGludCBzbG90OworICAgIGludCBp OworICAgIGludCBoaXRfbWVtX2luc24gPSAwOworICAgIGludCBoaXRfZHVwbGV4ID0gMDsKKyAg ICBjb25zdCBjaGFyICp2YWxpZF9zbG90X3N0cjsKKworICAgIGZvciAoaSA9IDAsIHNsb3QgPSAz OyBpIDwgcGt0LT5udW1faW5zbnM7IGkrKykgeworICAgICAgICB2YWxpZF9zbG90X3N0ciA9IGdl dF92YWxpZF9zbG90X3N0cihwa3QsIGkpOworCisgICAgICAgIHdoaWxlIChzdHJjaHIodmFsaWRf c2xvdF9zdHIsICcwJyArIHNsb3QpID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNsb3QtLTsKKyAg ICAgICAgfQorICAgICAgICBwa3QtPmluc25baV0uc2xvdCA9IHNsb3Q7CisgICAgICAgIGlmIChz bG90KSB7CisgICAgICAgICAgICAvKiBJJ3ZlIGFzc2lnbmVkIHRoZSBzbG90LCBub3cgZGVjcmVt ZW50IGl0IGZvciB0aGUgbmV4dCBpbnNuICovCisgICAgICAgICAgICBzbG90LS07CisgICAgICAg IH0KKyAgICB9CisKKyAgICAvKiBGaXggdGhlIGV4Y2VwdGlvbnMgLSBtZW0gaW5zbnMgdG8gc2xv dCAwLDEgKi8KKyAgICBmb3IgKGkgPSBwa3QtPm51bV9pbnNucyAtIDE7IGkgPj0gMDsgaS0tKSB7 CisKKyAgICAgICAgLyogRmlyc3QgbWVtb3J5IGluc3RydWN0aW9uIGFsd2F5cyBnb2VzIHRvIHNs b3QgMCAqLworICAgICAgICBpZiAoKEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9N RU1MSUtFKSB8fAorICAgICAgICAgICAgIEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwg QV9NRU1MSUtFX1BBQ0tFVF9SVUxFUykpICYmCisgICAgICAgICAgICAhaGl0X21lbV9pbnNuKSB7 CisgICAgICAgICAgICBoaXRfbWVtX2luc24gPSAxOworICAgICAgICAgICAgcGt0LT5pbnNuW2ld LnNsb3QgPSAwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAv KiBOZXh0IG1lbW9yeSBpbnN0cnVjdGlvbiBhbHdheXMgZ29lcyB0byBzbG90IDEgKi8KKyAgICAg ICAgaWYgKChHRVRfQVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfTUVNTElLRSkgfHwKKyAg ICAgICAgICAgICBHRVRfQVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfTUVNTElLRV9QQUNL RVRfUlVMRVMpKSAmJgorICAgICAgICAgICAgaGl0X21lbV9pbnNuKSB7CisgICAgICAgICAgICBw a3QtPmluc25baV0uc2xvdCA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGaXggdGhl IGV4Y2VwdGlvbnMgLSBkdXBsZXggYWx3YXlzIHNsb3QgMCwxICovCisgICAgZm9yIChpID0gcGt0 LT5udW1faW5zbnMgLSAxOyBpID49IDA7IGktLSkgeworCisgICAgICAgIC8qIEZpcnN0IHN1Ymlu c24gYWx3YXlzIGdvZXMgdG8gc2xvdCAwICovCisgICAgICAgIGlmIChHRVRfQVRUUklCKHBrdC0+ aW5zbltpXS5vcGNvZGUsIEFfU1VCSU5TTikgJiYgIWhpdF9kdXBsZXgpIHsKKyAgICAgICAgICAg IHBrdC0+cGt0X2hhc19kdXBsZXggPSAxOworICAgICAgICAgICAgaGl0X2R1cGxleCA9IDE7Cisg ICAgICAgICAgICBwa3QtPmluc25baV0uc2xvdCA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgfQorCisgICAgICAgIC8qIE5leHQgc3ViaW5zbiBhbHdheXMgZ29lcyB0byBzbG90 IDEgKi8KKyAgICAgICAgaWYgKEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9TVUJJ TlNOKSAmJiBoaXRfZHVwbGV4KSB7CisgICAgICAgICAgICBwa3QtPmluc25baV0uc2xvdCA9IDE7 CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGaXggdGhlIGV4Y2VwdGlvbnMgLSBzbG90IDEg aXMgbmV2ZXIgZW1wdHksIGFsd2F5cyBhbGlnbnMgdG8gc2xvdCAwICovCisgICAgeworICAgICAg ICBpbnQgc2xvdDBfZm91bmQgPSAwOworICAgICAgICBpbnQgc2xvdDFfZm91bmQgPSAwOworICAg ICAgICBpbnQgc2xvdDFfaWlkeCA9IDA7CisgICAgICAgIGZvciAoaSA9IHBrdC0+bnVtX2luc25z IC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIC8qIElzIHNsb3QwIHVzZWQ/ICovCisg ICAgICAgICAgICBpZiAocGt0LT5pbnNuW2ldLnNsb3QgPT0gMCkgeworICAgICAgICAgICAgICAg IGludCBpc19lbmRsb29wID0gKHBrdC0+aW5zbltpXS5vcGNvZGUgPT0gSjJfZW5kbG9vcDAxKTsK KyAgICAgICAgICAgICAgICBpc19lbmRsb29wIHw9IChwa3QtPmluc25baV0ub3Bjb2RlID09IEoy X2VuZGxvb3AwKTsKKyAgICAgICAgICAgICAgICBpc19lbmRsb29wIHw9IChwa3QtPmluc25baV0u b3Bjb2RlID09IEoyX2VuZGxvb3AxKTsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAg ICAgICAgICogTWFrZSBzdXJlIGl0J3Mgbm90IGVuZGxvb3Agc2luY2UsIHdlJ3JlIG92ZXJsb2Fk aW5nCisgICAgICAgICAgICAgICAgICogc2xvdDAgZm9yIGVuZGxvb3AKKyAgICAgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWlzX2VuZGxvb3ApIHsKKyAgICAgICAgICAgICAg ICAgICAgc2xvdDBfZm91bmQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIC8qIElzIHNsb3QxIHVzZWQ/ICovCisgICAgICAgICAgICBpZiAocGt0LT5p bnNuW2ldLnNsb3QgPT0gMSkgeworICAgICAgICAgICAgICAgIHNsb3QxX2ZvdW5kID0gMTsKKyAg ICAgICAgICAgICAgICBzbG90MV9paWR4ID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICAvKiBJcyBzbG90MCBlbXB0eSBhbmQgc2xvdDEgdXNlZD8gKi8KKyAgICAgICAgaWYg KChzbG90MF9mb3VuZCA9PSAwKSAmJiAoc2xvdDFfZm91bmQgPT0gMSkpIHsKKyAgICAgICAgICAg IC8qIFRoZW4gcHVzaCBpdCB0byBzbG90MCAqLworICAgICAgICAgICAgcGt0LT5pbnNuW3Nsb3Qx X2lpZHhdLnNsb3QgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisv KgorICogZG9fZGVjb2RlX3BhY2tldAorICogRGVjb2RlcyBwYWNrZXQgd2l0aCBnaXZlbiB3b3Jk cworICogUmV0dXJucyBuZWdhdGl2ZSBvbiBlcnJvciwgMCBvbiBpbnN1ZmZpY2llbnQgd29yZHMs CisgKiBhbmQgbnVtYmVyIG9mIHdvcmRzIHVzZWQgb24gc3VjY2VzcworICovCisKK3N0YXRpYyBp bnQgZG9fZGVjb2RlX3BhY2tldChpbnQgbWF4X3dvcmRzLCBjb25zdCBzaXplNHVfdCAqd29yZHMs IHBhY2tldF90ICpwa3QpCit7CisgICAgaW50IG51bV9pbnNucyA9IDA7CisgICAgaW50IHdvcmRz X3JlYWQgPSAwOworICAgIGludCBlbmRfb2ZfcGFja2V0ID0gMDsKKyAgICBpbnQgbmV3X2luc25z ID0gMDsKKyAgICBpbnQgbnVtX21lbXMgPSAwOworICAgIGludCBlcnJvcnMgPSAwOworICAgIGlu dCBpOworICAgIHNpemU0dV90IGVuY29kaW5nMzI7CisKKyAgICAvKiBJbml0aWFsaXplICovCisg ICAgbWVtc2V0KHBrdCwgMCwgc2l6ZW9mKCpwa3QpKTsKKyAgICAvKiBUcnkgdG8gYnVpbGQgcGFj a2V0ICovCisgICAgd2hpbGUgKCFlbmRfb2ZfcGFja2V0ICYmICh3b3Jkc19yZWFkIDwgbWF4X3dv cmRzKSkgeworICAgICAgICBlbmNvZGluZzMyID0gd29yZHNbd29yZHNfcmVhZF07CisgICAgICAg IGVuZF9vZl9wYWNrZXQgPSBkZWNvZGVfcGFyc2ViaXRzX2lzX2VuZChlbmNvZGluZzMyKTsKKyAg ICAgICAgbmV3X2luc25zID0gZGVjb2RlX2luc25zKCZwa3QtPmluc25bbnVtX2luc25zXSwgZW5j b2RpbmczMik7CisgICAgICAgIC8qCisgICAgICAgICAqIElmIHdlIHNhdyBhbiBleHRlbmRlciwg bWFyayBuZXh0IHdvcmQgZXh0ZW5kZWQgc28gaW1tZWRpYXRlCisgICAgICAgICAqIGRlY29kZSB3 b3JrcworICAgICAgICAgKi8KKyAgICAgICAgaWYgKHBrdC0+aW5zbltudW1faW5zbnNdLm9wY29k ZSA9PSBBNF9leHQpIHsKKyAgICAgICAgICAgIHBrdC0+aW5zbltudW1faW5zbnMgKyAxXS5leHRl bnNpb25fdmFsaWQgPSAxOworICAgICAgICAgICAgcGt0LT5wa3RfaGFzX3BheWxvYWQgPSAxOwor ICAgICAgICB9CisgICAgICAgIG51bV9pbnNucyArPSBuZXdfaW5zbnM7CisgICAgICAgIHdvcmRz X3JlYWQrKzsKKyAgICB9CisKKyAgICBwa3QtPm51bV9pbnNucyA9IG51bV9pbnNuczsKKyAgICBp ZiAoIWVuZF9vZl9wYWNrZXQpIHsKKyAgICAgICAgLyogUmFuIG91dCBvZiB3b3JkcyEgKi8KKyAg ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHBrdC0+ZW5jb2RfcGt0X3NpemVfaW5fYnl0ZXMg PSB3b3Jkc19yZWFkICogNDsKKyAgICAvKiBDaGVjayBwYWNrZXQgLyBhdXggaW5mbyAqLworICAg IGZvciAoaSA9IDA7IGkgPCBudW1faW5zbnM7IGkrKykgeworICAgICAgICBpZiAoR0VUX0FUVFJJ Qihwa3QtPmluc25baV0ub3Bjb2RlLCBBX01FTUNQWSkpIHsKKyAgICAgICAgICAgIG51bV9tZW1z ICs9IDI7CisgICAgICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2Rl LCBBX0xPQUQpIHx8CisgICAgICAgICAgICAgICAgICAgR0VUX0FUVFJJQihwa3QtPmluc25baV0u b3Bjb2RlLCBBX1NUT1JFKSkgeworICAgICAgICAgICAgbnVtX21lbXMrKzsKKyAgICAgICAgfQor ICAgICAgICBpZiAocGt0LT5pbnNuW2ldLm9wY29kZSA9PSBBNF9leHQpIHsKKyAgICAgICAgICAg IHBrdC0+aW5zbltpICsgMV0uZXh0ZW5zaW9uX3ZhbGlkID0gMTsKKyAgICAgICAgICAgIHBrdC0+ cGt0X2hhc19wYXlsb2FkID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwa3QtPnBrdF9oYXNf aW5pdGxvb3AgPSAwOworICAgIHBrdC0+cGt0X2hhc19pbml0bG9vcDAgPSAwOworICAgIHBrdC0+ cGt0X2hhc19pbml0bG9vcDEgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1faW5zbnM7IGkr KykgeworICAgICAgICBwa3QtPnBrdF9oYXNfaW5pdGxvb3AwIHw9CisgICAgICAgICAgICBHRVRf QVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfSFdMT09QMF9TRVRVUCk7CisgICAgICAgIHBr dC0+cGt0X2hhc19pbml0bG9vcDEgfD0KKyAgICAgICAgICAgIEdFVF9BVFRSSUIocGt0LT5pbnNu W2ldLm9wY29kZSwgQV9IV0xPT1AxX1NFVFVQKTsKKyAgICB9CisgICAgcGt0LT5wa3RfaGFzX2lu aXRsb29wIHw9IHBrdC0+cGt0X2hhc19pbml0bG9vcDAgfCBwa3QtPnBrdF9oYXNfaW5pdGxvb3Ax OworCisgICAgLyogU2h1ZmZsZSAvIHNwbGl0IC8gcmVvcmRlciBmb3IgZXhlY3V0aW9uICovCisg ICAgaWYgKCh3b3Jkc19yZWFkID09IDIpICYmIChkZWNvZGVfcGFyc2ViaXRzX2lzX2xvb3BlbmQo d29yZHNbMF0pKSkgeworICAgICAgICBkZWNvZGVfYWRkX2VuZGxvb3BfaW5zbigmcGt0LT5pbnNu W3BrdC0+bnVtX2luc25zKytdLCAwKTsKKyAgICB9CisgICAgaWYgKHdvcmRzX3JlYWQgPj0gMykg eworICAgICAgICBzaXplNHVfdCBoYXNfbG9vcDAsIGhhc19sb29wMTsKKyAgICAgICAgaGFzX2xv b3AwID0gZGVjb2RlX3BhcnNlYml0c19pc19sb29wZW5kKHdvcmRzWzBdKTsKKyAgICAgICAgaGFz X2xvb3AxID0gZGVjb2RlX3BhcnNlYml0c19pc19sb29wZW5kKHdvcmRzWzFdKTsKKyAgICAgICAg aWYgKGhhc19sb29wMCAmJiBoYXNfbG9vcDEpIHsKKyAgICAgICAgICAgIGRlY29kZV9hZGRfZW5k bG9vcF9pbnNuKCZwa3QtPmluc25bcGt0LT5udW1faW5zbnMrK10sIDEwKTsKKyAgICAgICAgfSBl bHNlIGlmIChoYXNfbG9vcDEpIHsKKyAgICAgICAgICAgIGRlY29kZV9hZGRfZW5kbG9vcF9pbnNu KCZwa3QtPmluc25bcGt0LT5udW1faW5zbnMrK10sIDEpOworICAgICAgICB9IGVsc2UgaWYgKGhh c19sb29wMCkgeworICAgICAgICAgICAgZGVjb2RlX2FkZF9lbmRsb29wX2luc24oJnBrdC0+aW5z bltwa3QtPm51bV9pbnNucysrXSwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkZWNvZGVf YXNzZW1ibGVyX2NvdW50X2Zwb3BzKHBrdCk7CisKKyAgICBlcnJvcnMgKz0gZGVjb2RlX2FwcGx5 X2V4dGVuZGVycyhwa3QpOworICAgIGVycm9ycyArPSBkZWNvZGVfcmVtb3ZlX2V4dGVuZGVycyhw a3QpOworICAgIGVycm9ycyArPSBkZWNvZGVfc2V0X3Nsb3RfbnVtYmVyKHBrdCk7CisgICAgZXJy b3JzICs9IGRlY29kZV9maWxsX25ld3ZhbHVlX3JlZ25vKHBrdCk7CisKKyAgICBlcnJvcnMgKz0g ZGVjb2RlX3NodWZmbGVfZm9yX2V4ZWN1dGlvbihwa3QpOworICAgIGVycm9ycyArPSBkZWNvZGVf c3BsaXRfY21wanVtcChwa3QpOworICAgIGVycm9ycyArPSBkZWNvZGVfc2V0X2luc25fYXR0cl9m aWVsZHMocGt0KTsKKyAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9 CisKKyAgICByZXR1cm4gd29yZHNfcmVhZDsKK30KLS0gCjIuNy40Cgo=