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=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 4EDFEC433DB for ; Fri, 8 Jan 2021 04:52:16 +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 9D5C322D75 for ; Fri, 8 Jan 2021 04:52:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9D5C322D75 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]:40810 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kxjl0-0002kY-LI for qemu-devel@archiver.kernel.org; Thu, 07 Jan 2021 23:52:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:52054) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kxjOs-0006lq-DP for qemu-devel@nongnu.org; Thu, 07 Jan 2021 23:29:22 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:25196) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kxjOo-00059s-3a for qemu-devel@nongnu.org; Thu, 07 Jan 2021 23:29:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1610080158; x=1641616158; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7JKvd1yD0984uy2eWzGSYyDxLvUP5ZmjZ1ugguWHGZI=; b=FetgSYtOCQXafrMzTRL2hmiiyeKeBiD2QHFrLU8Coz1T73DM2XbYS7fs 8tIRtjD6cbsOlCx1HK2WG+J+HFhxPKQwTMsaEQGEnGFyxlFcFNanpEKC1 CdzfUEod5Bp6aJHLOUPWIQJFWL3nvgPP6B5MnPcl50hYeBiwjhX1iLU77 0=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 07 Jan 2021 20:29:13 -0800 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 07 Jan 2021 20:29:12 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 38F46124C; Thu, 7 Jan 2021 22:29:12 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v6 07/35] Hexagon (target/hexagon) scalar core helpers Date: Thu, 7 Jan 2021 22:28:38 -0600 Message-Id: <1610080146-14968-8-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1610080146-14968-1-git-send-email-tsimpson@quicinc.com> References: <1610080146-14968-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.248, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-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, bcain@quicinc.com, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGhlIG1ham9yaXR5IG9mIGhlbHBlcnMgYXJlIGdlbmVyYXRlZC4gIERlZmluZSB0aGUgaGVscGVy IGZ1bmN0aW9ucyBuZWVkZWQKdGhlbiBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgZmlsZQoKU2lnbmVk LW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0KIHRhcmdl dC9oZXhhZ29uL2hlbHBlci5oICAgIHwgICA4NSArKysrCiB0YXJnZXQvaGV4YWdvbi9vcF9oZWxw ZXIuYyB8IDEwMTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IDIgZmlsZXMgY2hhbmdlZCwgMTEwMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg dGFyZ2V0L2hleGFnb24vaGVscGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdv bi9vcF9oZWxwZXIuYwoKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2hlbHBlci5oIGIvdGFy Z2V0L2hleGFnb24vaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZGY1ZWU1MwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2hlbHBlci5oCkBAIC0w LDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworREVGX0hFTFBFUl9GTEFHU18yKHJh aXNlX2V4Y2VwdGlvbiwgVENHX0NBTExfTk9fUkVUVVJOLCBub3JldHVybiwgZW52LCBpMzIpCitE RUZfSEVMUEVSXzEoZGVidWdfc3RhcnRfcGFja2V0LCB2b2lkLCBlbnYpCitERUZfSEVMUEVSX0ZM QUdTXzMoZGVidWdfY2hlY2tfc3RvcmVfd2lkdGgsIFRDR19DQUxMX05PX1dHLCB2b2lkLCBlbnYs IGludCwgaW50KQorREVGX0hFTFBFUl8yKGNvbW1pdF9zdG9yZSwgdm9pZCwgZW52LCBpbnQpCitE RUZfSEVMUEVSX0ZMQUdTXzMoZGVidWdfY29tbWl0X2VuZCwgVENHX0NBTExfTk9fV0csIHZvaWQs IGVudiwgaW50LCBpbnQpCitERUZfSEVMUEVSX0ZMQUdTXzQoZmNpcmNhZGQsIFRDR19DQUxMX05P X1JXR19TRSwgczMyLCBzMzIsIHMzMiwgczMyLCBzMzIpCisKKy8qIEZsb2F0aW5nIHBvaW50ICov CitERUZfSEVMUEVSXzIoY29udl9zZjJkZiwgZjY0LCBlbnYsIGYzMikKK0RFRl9IRUxQRVJfMihj b252X2RmMnNmLCBmMzIsIGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfdXcyc2YsIGYzMiwg ZW52LCBzMzIpCitERUZfSEVMUEVSXzIoY29udl91dzJkZiwgZjY0LCBlbnYsIHMzMikKK0RFRl9I RUxQRVJfMihjb252X3cyc2YsIGYzMiwgZW52LCBzMzIpCitERUZfSEVMUEVSXzIoY29udl93MmRm LCBmNjQsIGVudiwgczMyKQorREVGX0hFTFBFUl8yKGNvbnZfdWQyc2YsIGYzMiwgZW52LCBzNjQp CitERUZfSEVMUEVSXzIoY29udl91ZDJkZiwgZjY0LCBlbnYsIHM2NCkKK0RFRl9IRUxQRVJfMihj b252X2Qyc2YsIGYzMiwgZW52LCBzNjQpCitERUZfSEVMUEVSXzIoY29udl9kMmRmLCBmNjQsIGVu diwgczY0KQorREVGX0hFTFBFUl8yKGNvbnZfc2YydXcsIHMzMiwgZW52LCBmMzIpCitERUZfSEVM UEVSXzIoY29udl9zZjJ3LCBzMzIsIGVudiwgZjMyKQorREVGX0hFTFBFUl8yKGNvbnZfc2YydWQs IHM2NCwgZW52LCBmMzIpCitERUZfSEVMUEVSXzIoY29udl9zZjJkLCBzNjQsIGVudiwgZjMyKQor REVGX0hFTFBFUl8yKGNvbnZfZGYydXcsIHMzMiwgZW52LCBmNjQpCitERUZfSEVMUEVSXzIoY29u dl9kZjJ3LCBzMzIsIGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfZGYydWQsIHM2NCwgZW52 LCBmNjQpCitERUZfSEVMUEVSXzIoY29udl9kZjJkLCBzNjQsIGVudiwgZjY0KQorREVGX0hFTFBF Ul8yKGNvbnZfc2YydXdfY2hvcCwgczMyLCBlbnYsIGYzMikKK0RFRl9IRUxQRVJfMihjb252X3Nm MndfY2hvcCwgczMyLCBlbnYsIGYzMikKK0RFRl9IRUxQRVJfMihjb252X3NmMnVkX2Nob3AsIHM2 NCwgZW52LCBmMzIpCitERUZfSEVMUEVSXzIoY29udl9zZjJkX2Nob3AsIHM2NCwgZW52LCBmMzIp CitERUZfSEVMUEVSXzIoY29udl9kZjJ1d19jaG9wLCBzMzIsIGVudiwgZjY0KQorREVGX0hFTFBF Ul8yKGNvbnZfZGYyd19jaG9wLCBzMzIsIGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfZGYy dWRfY2hvcCwgczY0LCBlbnYsIGY2NCkKK0RFRl9IRUxQRVJfMihjb252X2RmMmRfY2hvcCwgczY0 LCBlbnYsIGY2NCkKK0RFRl9IRUxQRVJfMyhzZmFkZCwgZjMyLCBlbnYsIGYzMiwgZjMyKQorREVG X0hFTFBFUl8zKHNmc3ViLCBmMzIsIGVudiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzMoc2ZjbXBl cSwgczMyLCBlbnYsIGYzMiwgZjMyKQorREVGX0hFTFBFUl8zKHNmY21wZ3QsIHMzMiwgZW52LCBm MzIsIGYzMikKK0RFRl9IRUxQRVJfMyhzZmNtcGdlLCBzMzIsIGVudiwgZjMyLCBmMzIpCitERUZf SEVMUEVSXzMoc2ZjbXB1bywgczMyLCBlbnYsIGYzMiwgZjMyKQorREVGX0hFTFBFUl8zKHNmbWF4 LCBmMzIsIGVudiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzMoc2ZtaW4sIGYzMiwgZW52LCBmMzIs IGYzMikKK0RFRl9IRUxQRVJfMyhzZmNsYXNzLCBzMzIsIGVudiwgZjMyLCBzMzIpCitERUZfSEVM UEVSXzMoc2ZmaXh1cG4sIGYzMiwgZW52LCBmMzIsIGYzMikKK0RFRl9IRUxQRVJfMyhzZmZpeHVw ZCwgZjMyLCBlbnYsIGYzMiwgZjMyKQorREVGX0hFTFBFUl8yKHNmZml4dXByLCBmMzIsIGVudiwg ZjMyKQorCitERUZfSEVMUEVSXzMoZGZhZGQsIGY2NCwgZW52LCBmNjQsIGY2NCkKK0RFRl9IRUxQ RVJfMyhkZnN1YiwgZjY0LCBlbnYsIGY2NCwgZjY0KQorREVGX0hFTFBFUl8zKGRmbWF4LCBmNjQs IGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzMoZGZtaW4sIGY2NCwgZW52LCBmNjQsIGY2NCkK K0RFRl9IRUxQRVJfMyhkZmNtcGVxLCBzMzIsIGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzMo ZGZjbXBndCwgczMyLCBlbnYsIGY2NCwgZjY0KQorREVGX0hFTFBFUl8zKGRmY21wZ2UsIHMzMiwg ZW52LCBmNjQsIGY2NCkKK0RFRl9IRUxQRVJfMyhkZmNtcHVvLCBzMzIsIGVudiwgZjY0LCBmNjQp CitERUZfSEVMUEVSXzMoZGZjbGFzcywgczMyLCBlbnYsIGY2NCwgczMyKQorCitERUZfSEVMUEVS XzMoc2ZtcHksIGYzMiwgZW52LCBmMzIsIGYzMikKK0RFRl9IRUxQRVJfNChzZmZtYSwgZjMyLCBl bnYsIGYzMiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzUoc2ZmbWFfc2MsIGYzMiwgZW52LCBmMzIs IGYzMiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzQoc2ZmbXMsIGYzMiwgZW52LCBmMzIsIGYzMiwg ZjMyKQorREVGX0hFTFBFUl80KHNmZm1hX2xpYiwgZjMyLCBlbnYsIGYzMiwgZjMyLCBmMzIpCitE RUZfSEVMUEVSXzQoc2ZmbXNfbGliLCBmMzIsIGVudiwgZjMyLCBmMzIsIGYzMikKKworREVGX0hF TFBFUl8zKGRmbXB5Zml4LCBmNjQsIGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzQoZGZtcHlo aCwgZjY0LCBlbnYsIGY2NCwgZjY0LCBmNjQpCisKKyNpbmNsdWRlICJoZWxwZXJfcHJvdG9zX2dl bmVyYXRlZC5oIgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vb3BfaGVscGVyLmMgYi90YXJn ZXQvaGV4YWdvbi9vcF9oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4xZGE4NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vb3BfaGVscGVyLmMK QEAgLTAsMCArMSwxMDE2IEBACisvKgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNv bW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlICJxZW11 L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS5oIgorI2luY2x1ZGUgImV4ZWMvaGVscGVyLXByb3Rv LmgiCisjaW5jbHVkZSAiZnB1L3NvZnRmbG9hdC5oIgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1 ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAibWFjcm9zLmgiCisjaW5jbHVkZSAiYXJjaC5oIgor I2luY2x1ZGUgImhleF9hcmNoX3R5cGVzLmgiCisjaW5jbHVkZSAiZm1hX2VtdS5oIgorI2luY2x1 ZGUgImNvbnZfZW11LmgiCisKKyNkZWZpbmUgU0ZfQklBUyAgICAgICAgMTI3CisjZGVmaW5lIFNG X01BTlRCSVRTICAgIDIzCisKKy8qIEV4Y2VwdGlvbnMgcHJvY2Vzc2luZyBoZWxwZXJzICovCitz dGF0aWMgdm9pZCBRRU1VX05PUkVUVVJOIGRvX3JhaXNlX2V4Y2VwdGlvbl9lcnIoQ1BVSGV4YWdv blN0YXRlICplbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgZXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBwYykKK3sKKyAgICBDUFVTdGF0ZSAqY3MgPSBD UFUoaGV4YWdvbl9lbnZfZ2V0X2NwdShlbnYpKTsKKyAgICBxZW11X2xvZ19tYXNrKENQVV9MT0df SU5ULCAiJXM6ICVkXG4iLCBfX2Z1bmNfXywgZXhjZXB0aW9uKTsKKyAgICBjcy0+ZXhjZXB0aW9u X2luZGV4ID0gZXhjZXB0aW9uOworICAgIGNwdV9sb29wX2V4aXRfcmVzdG9yZShjcywgcGMpOwor fQorCit2b2lkIFFFTVVfTk9SRVRVUk4gSEVMUEVSKHJhaXNlX2V4Y2VwdGlvbikoQ1BVSGV4YWdv blN0YXRlICplbnYsIHVpbnQzMl90IGV4Y3ApCit7CisgICAgZG9fcmFpc2VfZXhjZXB0aW9uX2Vy cihlbnYsIGV4Y3AsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9nX3JlZ193cml0ZShD UFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHJudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0YXJnZXRfdWxvbmcgdmFsLCB1aW50MzJfdCBzbG90KQoreworICAgIEhFWF9ERUJV R19MT0coImxvZ19yZWdfd3JpdGVbJWRdID0gIiBUQVJHRVRfRk1UX2xkICIgKDB4IiBUQVJHRVRf Rk1UX2x4ICIpIiwKKyAgICAgICAgICAgICAgICAgIHJudW0sIHZhbCwgdmFsKTsKKyAgICBpZiAo ZW52LT5zbG90X2NhbmNlbGxlZCAmICgxIDw8IHNsb3QpKSB7CisgICAgICAgIEhFWF9ERUJVR19M T0coIiBDQU5DRUxMRUQiKTsKKyAgICB9CisgICAgaWYgKHZhbCA9PSBlbnYtPmdwcltybnVtXSkg eworICAgICAgICBIRVhfREVCVUdfTE9HKCIgTk8gQ0hBTkdFIik7CisgICAgfQorICAgIEhFWF9E RUJVR19MT0coIlxuIik7CisgICAgaWYgKCEoZW52LT5zbG90X2NhbmNlbGxlZCAmICgxIDw8IHNs b3QpKSkgeworICAgICAgICBlbnYtPm5ld192YWx1ZVtybnVtXSA9IHZhbDsKKyNpZiBIRVhfREVC VUcKKyAgICAgICAgLyogRG8gdGhpcyBzbyBIRUxQRVIoZGVidWdfY29tbWl0X2VuZCkgd2lsbCBr bm93ICovCisgICAgICAgIGVudi0+cmVnX3dyaXR0ZW5bcm51bV0gPSAxOworI2VuZGlmCisgICAg fQorfQorCitzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKK2lubGluZSB2b2lkIGxvZ19y ZWdfd3JpdGVfcGFpcihDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHJudW0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdmFsLCB1aW50MzJfdCBzbG90KQor eworICAgIEhFWF9ERUJVR19MT0coImxvZ19yZWdfd3JpdGVfcGFpclslZDolZF0gPSAlbGRcbiIs IHJudW0gKyAxLCBybnVtLCB2YWwpOworICAgIGxvZ19yZWdfd3JpdGUoZW52LCBybnVtLCB2YWwg JiAweEZGRkZGRkZGLCBzbG90KTsKKyAgICBsb2dfcmVnX3dyaXRlKGVudiwgcm51bSArIDEsICh2 YWwgPj4gMzIpICYgMHhGRkZGRkZGRiwgc2xvdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBs b2dfcHJlZF93cml0ZShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHBudW0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Vsb25nIHZhbCkKK3sKKyAgICBIRVhfREVC VUdfTE9HKCJsb2dfcHJlZF93cml0ZVslZF0gPSAiIFRBUkdFVF9GTVRfbGQKKyAgICAgICAgICAg ICAgICAgICIgKDB4IiBUQVJHRVRfRk1UX2x4ICIpXG4iLAorICAgICAgICAgICAgICAgICAgcG51 bSwgdmFsLCB2YWwpOworCisgICAgLyogTXVsdGlwbGUgd3JpdGVzIHRvIHRoZSBzYW1lIHByZWcg YXJlIGFuZCdlZCB0b2dldGhlciAqLworICAgIGlmIChlbnYtPnByZWRfd3JpdHRlbiAmICgxIDw8 IHBudW0pKSB7CisgICAgICAgIGVudi0+bmV3X3ByZWRfdmFsdWVbcG51bV0gJj0gdmFsICYgMHhm ZjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbnYtPm5ld19wcmVkX3ZhbHVlW3BudW1dID0gdmFs ICYgMHhmZjsKKyAgICAgICAgZW52LT5wcmVkX3dyaXR0ZW4gfD0gMSA8PCBwbnVtOworICAgIH0K K30KKworc3RhdGljIGlubGluZSB2b2lkIGxvZ19zdG9yZTMyKENQVUhleGFnb25TdGF0ZSAqZW52 LCB0YXJnZXRfdWxvbmcgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn ZXRfdWxvbmcgdmFsLCBpbnQgd2lkdGgsIGludCBzbG90KQoreworICAgIEhFWF9ERUJVR19MT0co ImxvZ19zdG9yZSVkKDB4IiBUQVJHRVRfRk1UX2x4ICIsICIgVEFSR0VUX0ZNVF9sZAorICAgICAg ICAgICAgICAgICAgIiBbMHgiIFRBUkdFVF9GTVRfbHggIl0pXG4iLAorICAgICAgICAgICAgICAg ICAgd2lkdGgsIGFkZHIsIHZhbCwgdmFsKTsKKyAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3Rd LnZhID0gYWRkcjsKKyAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLndpZHRoID0gd2lkdGg7 CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS5kYXRhMzIgPSB2YWw7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBsb2dfc3RvcmU2NChDUFVIZXhhZ29uU3RhdGUgKmVudiwgdGFyZ2V0X3Vs b25nIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB2YWwsIGlu dCB3aWR0aCwgaW50IHNsb3QpCit7CisgICAgSEVYX0RFQlVHX0xPRygibG9nX3N0b3JlJWQoMHgi IFRBUkdFVF9GTVRfbHggIiwgJWxkIFsweCVseF0pXG4iLAorICAgICAgICAgICAgICAgICAgIHdp ZHRoLCBhZGRyLCB2YWwsIHZhbCk7CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS52YSA9 IGFkZHI7CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS53aWR0aCA9IHdpZHRoOworICAg IGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTY0ID0gdmFsOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgd3JpdGVfbmV3X3BjKENQVUhleGFnb25TdGF0ZSAqZW52LCB0YXJnZXRfdWxvbmcg YWRkcikKK3sKKyAgICBIRVhfREVCVUdfTE9HKCJ3cml0ZV9uZXdfcGMoMHgiIFRBUkdFVF9GTVRf bHggIilcbiIsIGFkZHIpOworCisgICAgLyoKKyAgICAgKiBJZiBtb3JlIHRoYW4gb25lIGJyYW5j aCBpcyB0YWtlbiBpbiBhIHBhY2tldCwgb25seSB0aGUgZmlyc3Qgb25lCisgICAgICogaXMgYWN0 dWFsbHkgZG9uZS4KKyAgICAgKi8KKyAgICBpZiAoZW52LT5icmFuY2hfdGFrZW4pIHsKKyAgICAg ICAgSEVYX0RFQlVHX0xPRygiSU5GTzogbXVsdGlwbGUgYnJhbmNoZXMgdGFrZW4gaW4gc2FtZSBw YWNrZXQsICIKKyAgICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgdGhlIHNlY29uZCBvbmVc biIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZDSEVDS19QQ0FMSUdOKGFkZHIpOworICAgICAg ICBlbnYtPmJyYW5jaF90YWtlbiA9IDE7CisgICAgICAgIGVudi0+bmV4dF9QQyA9IGFkZHI7Cisg ICAgfQorfQorCisvKiBIYW5keSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50ICovCit2b2lkIEhF TFBFUihkZWJ1Z19zdGFydF9wYWNrZXQpKENQVUhleGFnb25TdGF0ZSAqZW52KQoreworICAgIEhF WF9ERUJVR19MT0coIlN0YXJ0IHBhY2tldDogcGMgPSAweCIgVEFSR0VUX0ZNVF9seCAiXG4iLAor ICAgICAgICAgICAgICAgICAgZW52LT5ncHJbSEVYX1JFR19QQ10pOworCisgICAgaW50IGk7Cisg ICAgZm9yIChpID0gMDsgaSA8IFRPVEFMX1BFUl9USFJFQURfUkVHUzsgaSsrKSB7CisgICAgICAg IGVudi0+cmVnX3dyaXR0ZW5baV0gPSAwOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBpbnQz Ml90IG5ld19wcmVkX3ZhbHVlKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQgcG51bSkKK3sKKyAg ICByZXR1cm4gZW52LT5uZXdfcHJlZF92YWx1ZVtwbnVtXTsKK30KKworLyogQ2hlY2tzIGZvciBi b29ra2VlcGluZyBlcnJvcnMgYmV0d2VlbiBkaXNhc3NlbWJseSBjb250ZXh0IGFuZCBydW50aW1l ICovCit2b2lkIEhFTFBFUihkZWJ1Z19jaGVja19zdG9yZV93aWR0aCkoQ1BVSGV4YWdvblN0YXRl ICplbnYsIGludCBzbG90LCBpbnQgY2hlY2spCit7CisgICAgaWYgKGVudi0+bWVtX2xvZ19zdG9y ZXNbc2xvdF0ud2lkdGggIT0gY2hlY2spIHsKKyAgICAgICAgSEVYX0RFQlVHX0xPRygiRVJST1I6 ICVkICE9ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNb c2xvdF0ud2lkdGgsIGNoZWNrKTsKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAg ICB9Cit9CisKK3ZvaWQgSEVMUEVSKGNvbW1pdF9zdG9yZSkoQ1BVSGV4YWdvblN0YXRlICplbnYs IGludCBzbG90X251bSkKK3sKKyAgICBzd2l0Y2ggKGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9u dW1dLndpZHRoKSB7CisgICAgY2FzZSAxOgorICAgICAgICBwdXRfdXNlcl91OChlbnYtPm1lbV9s b2dfc3RvcmVzW3Nsb3RfbnVtXS5kYXRhMzIsCisgICAgICAgICAgICAgICAgICAgIGVudi0+bWVt X2xvZ19zdG9yZXNbc2xvdF9udW1dLnZhKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgor ICAgICAgICBwdXRfdXNlcl91MTYoZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0uZGF0YTMy LAorICAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0udmEp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIHB1dF91c2VyX3UzMihlbnYt Pm1lbV9sb2dfc3RvcmVzW3Nsb3RfbnVtXS5kYXRhMzIsCisgICAgICAgICAgICAgICAgICAgICBl bnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RfbnVtXS52YSk7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgODoKKyAgICAgICAgcHV0X3VzZXJfdTY0KGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9udW1d LmRhdGE2NCwKKyAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9u dW1dLnZhKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRf bm90X3JlYWNoZWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N0b3JlKENQVUhl eGFnb25TdGF0ZSAqZW52LCBpbnQgc2xvdCkKK3sKKyAgICBpZiAoIShlbnYtPnNsb3RfY2FuY2Vs bGVkICYgKDEgPDwgc2xvdCkpKSB7CisgICAgICAgIHVpbnQ4X3Qgd2lkdGggPSBlbnYtPm1lbV9s b2dfc3RvcmVzW3Nsb3RdLndpZHRoOworICAgICAgICBpZiAod2lkdGggPT0gMSkgeworICAgICAg ICAgICAgdWludDMyX3QgZGF0YSA9IGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTMyICYg MHhmZjsKKyAgICAgICAgICAgIEhFWF9ERUJVR19MT0coIlx0bWVtYlsweCIgVEFSR0VUX0ZNVF9s eCAiXSA9ICVkICgweCUwMngpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1l bV9sb2dfc3RvcmVzW3Nsb3RdLnZhLCBkYXRhLCBkYXRhKTsKKyAgICAgICAgfSBlbHNlIGlmICh3 aWR0aCA9PSAyKSB7CisgICAgICAgICAgICB1aW50MzJfdCBkYXRhID0gZW52LT5tZW1fbG9nX3N0 b3Jlc1tzbG90XS5kYXRhMzIgJiAweGZmZmY7CisgICAgICAgICAgICBIRVhfREVCVUdfTE9HKCJc dG1lbWhbMHgiIFRBUkdFVF9GTVRfbHggIl0gPSAlZCAoMHglMDR4KVxuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS52YSwgZGF0YSwgZGF0YSk7 CisgICAgICAgIH0gZWxzZSBpZiAod2lkdGggPT0gNCkgeworICAgICAgICAgICAgdWludDMyX3Qg ZGF0YSA9IGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTMyOworICAgICAgICAgICAgSEVY X0RFQlVHX0xPRygiXHRtZW13WzB4IiBUQVJHRVRfRk1UX2x4ICJdID0gJWQgKDB4JTA4eClcbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0udmEs IGRhdGEsIGRhdGEpOworICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID09IDgpIHsKKyAgICAgICAg ICAgIEhFWF9ERUJVR19MT0coIlx0bWVtZFsweCIgVEFSR0VUX0ZNVF9seCAiXSA9ICVsdSAoMHgl MDE2bHgpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVz W3Nsb3RdLnZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVz W3Nsb3RdLmRhdGE2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0 b3Jlc1tzbG90XS5kYXRhNjQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSEVYX0RF QlVHX0xPRygiXHRCYWQgc3RvcmUgd2lkdGggJWRcbiIsIHdpZHRoKTsKKyAgICAgICAgICAgIGdf YXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qIFRoaXMgZnVu Y3Rpb24gaXMgYSBoYW5keSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50ICovCit2b2lkIEhFTFBF UihkZWJ1Z19jb21taXRfZW5kKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IGhhc19zdDAsIGlu dCBoYXNfc3QxKQoreworICAgIGJvb2wgcmVnX3ByaW50ZWQgPSBmYWxzZTsKKyAgICBib29sIHBy ZWRfcHJpbnRlZCA9IGZhbHNlOworICAgIGludCBpOworCisgICAgSEVYX0RFQlVHX0xPRygiUGFj a2V0IGNvbW1pdHRlZDogcGMgPSAweCIgVEFSR0VUX0ZNVF9seCAiXG4iLAorICAgICAgICAgICAg ICAgICAgZW52LT50aGlzX1BDKTsKKyAgICBIRVhfREVCVUdfTE9HKCJzbG90X2NhbmNlbGxlZCA9 ICVkXG4iLCBlbnYtPnNsb3RfY2FuY2VsbGVkKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBUT1RB TF9QRVJfVEhSRUFEX1JFR1M7IGkrKykgeworICAgICAgICBpZiAoZW52LT5yZWdfd3JpdHRlbltp XSkgeworICAgICAgICAgICAgaWYgKCFyZWdfcHJpbnRlZCkgeworICAgICAgICAgICAgICAgIEhF WF9ERUJVR19MT0coIlJlZ3Mgd3JpdHRlblxuIik7CisgICAgICAgICAgICAgICAgcmVnX3ByaW50 ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiXHRy JWQgPSAiIFRBUkdFVF9GTVRfbGQgIiAoMHgiIFRBUkdFVF9GTVRfbHggIilcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIGksIGVudi0+bmV3X3ZhbHVlW2ldLCBlbnYtPm5ld192YWx1ZVtp XSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX1BSRUdTOyBp KyspIHsKKyAgICAgICAgaWYgKGVudi0+cHJlZF93cml0dGVuICYgKDEgPDwgaSkpIHsKKyAgICAg ICAgICAgIGlmICghcHJlZF9wcmludGVkKSB7CisgICAgICAgICAgICAgICAgSEVYX0RFQlVHX0xP RygiUHJlZGljYXRlcyB3cml0dGVuXG4iKTsKKyAgICAgICAgICAgICAgICBwcmVkX3ByaW50ZWQg PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiXHRwJWQg PSAweCIgVEFSR0VUX0ZNVF9seCAiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBl bnYtPm5ld19wcmVkX3ZhbHVlW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChoYXNf c3QwIHx8IGhhc19zdDEpIHsKKyAgICAgICAgSEVYX0RFQlVHX0xPRygiU3RvcmVzXG4iKTsKKyAg ICAgICAgaWYgKGhhc19zdDApIHsKKyAgICAgICAgICAgIHByaW50X3N0b3JlKGVudiwgMCk7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKGhhc19zdDEpIHsKKyAgICAgICAgICAgIHByaW50X3N0b3Jl KGVudiwgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBIRVhfREVCVUdfTE9HKCJOZXh0IFBD ID0gMHgleFxuIiwgZW52LT5uZXh0X1BDKTsKKyAgICBIRVhfREVCVUdfTE9HKCJFeGVjIGNvdW50 ZXJzOiBwa3QgPSAiIFRBUkdFVF9GTVRfbHgKKyAgICAgICAgICAgICAgICAgICIsIGluc24gPSAi IFRBUkdFVF9GTVRfbHgKKyAgICAgICAgICAgICAgICAgICJcbiIsCisgICAgICAgICAgICAgICAg ICBlbnYtPmdwcltIRVhfUkVHX1FFTVVfUEtUX0NOVF0sCisgICAgICAgICAgICAgICAgICBlbnYt PmdwcltIRVhfUkVHX1FFTVVfSU5TTl9DTlRdKTsKKworfQorCitzdGF0aWMgaW50MzJfdCBmY2ly Y2FkZF92NChpbnQzMl90IFJ4ViwgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgTSwgaW50MzJfdCBD UykKK3sKKyAgICBpbnQzMl90IGxlbmd0aCA9IE0gJiAweDAwMDFmZmZmOworICAgIHVpbnQzMl90 IG5ld19wdHIgPSBSeFYgKyBvZmZzZXQ7CisgICAgdWludDMyX3Qgc3RhcnRfYWRkciA9IENTOwor ICAgIHVpbnQzMl90IGVuZF9hZGRyID0gc3RhcnRfYWRkciArIGxlbmd0aDsKKworICAgIGlmIChu ZXdfcHRyID49IGVuZF9hZGRyKSB7CisgICAgICAgIG5ld19wdHIgLT0gbGVuZ3RoOworICAgIH0g ZWxzZSBpZiAobmV3X3B0ciA8IHN0YXJ0X2FkZHIpIHsKKyAgICAgICAgbmV3X3B0ciArPSBsZW5n dGg7CisgICAgfQorCisgICAgcmV0dXJuIG5ld19wdHI7Cit9CisKK2ludDMyX3QgSEVMUEVSKGZj aXJjYWRkKShpbnQzMl90IFJ4ViwgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgTSwgaW50MzJfdCBD UykKK3sKKyAgICBpbnQzMl90IEtfY29uc3QgPSAoTSA+PiAyNCkgJiAweGY7CisgICAgaW50MzJf dCBsZW5ndGggPSBNICYgMHgxZmZmZjsKKyAgICBpbnQzMl90IG1hc2sgPSAoMSA8PCAoS19jb25z dCArIDIpKSAtIDE7CisgICAgdWludDMyX3QgbmV3X3B0ciA9IFJ4ViArIG9mZnNldDsKKyAgICB1 aW50MzJfdCBzdGFydF9hZGRyID0gUnhWICYgKH5tYXNrKTsKKyAgICB1aW50MzJfdCBlbmRfYWRk ciA9IHN0YXJ0X2FkZHIgfCBsZW5ndGg7CisKKyAgICBpZiAoS19jb25zdCA9PSAwICYmIGxlbmd0 aCA+PSA0KSB7CisgICAgICAgIHJldHVybiBmY2lyY2FkZF92NChSeFYsIG9mZnNldCwgTSwgQ1Mp OworICAgIH0KKworICAgIGlmIChuZXdfcHRyID49IGVuZF9hZGRyKSB7CisgICAgICAgIG5ld19w dHIgLT0gbGVuZ3RoOworICAgIH0gZWxzZSBpZiAobmV3X3B0ciA8IHN0YXJ0X2FkZHIpIHsKKyAg ICAgICAgbmV3X3B0ciArPSBsZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIG5ld19wdHI7Cit9 CisKKy8qCisgKiBIZXhhZ29uIEZQIG9wZXJhdGlvbnMgcmV0dXJuIH4wIGluc3RlYXQgb2YgTmFO CisgKiBUaGUgaGV4X2NoZWNrX3NmbmFuL2hleF9jaGVja19kZm5hbiBmdW5jdGlvbnMgcGVyZm9y bSB0aGlzIGNoZWNrCisgKi8KK3N0YXRpYyBmbG9hdDMyIGhleF9jaGVja19zZm5hbihmbG9hdDMy IHgpCit7CisgICAgaWYgKGZsb2F0MzJfaXNfYW55X25hbih4KSkgeworICAgICAgICByZXR1cm4g bWFrZV9mbG9hdDMyKDB4RkZGRkZGRkZVKTsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisKK3N0 YXRpYyBmbG9hdDY0IGhleF9jaGVja19kZm5hbihmbG9hdDY0IHgpCit7CisgICAgaWYgKGZsb2F0 NjRfaXNfYW55X25hbih4KSkgeworICAgICAgICByZXR1cm4gbWFrZV9mbG9hdDY0KDB4RkZGRkZG RkZGRkZGRkZGRlVMTCk7CisgICAgfQorICAgIHJldHVybiB4OworfQorCisvKgorICogbWVtX25v c2h1ZgorICogU2VjdGlvbiA1LjUgb2YgdGhlIEhleGFnb24gVjY3IFByb2dyYW1tZXIncyBSZWZl cmVuY2UgTWFudWFsCisgKgorICogSWYgdGhlIGxvYWQgaXMgaW4gc2xvdCAwIGFuZCB0aGVyZSBp cyBhIHN0b3JlIGluIHNsb3QxICh0aGF0CisgKiB3YXNuJ3QgY2FuY2VsbGVkKSwgd2UgaGF2ZSB0 byBkbyB0aGUgc3RvcmUgZmlyc3QuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX25vc2h1ZihDUFVI ZXhhZ29uU3RhdGUgKmVudiwgdWludDMyX3Qgc2xvdCkKK3sKKyAgICBpZiAoc2xvdCA9PSAwICYm IGVudi0+cGt0X2hhc19zdG9yZV9zMSAmJgorICAgICAgICAoKGVudi0+c2xvdF9jYW5jZWxsZWQg JiAoMSA8PCAxKSkgPT0gMCkpIHsKKyAgICAgICAgSEVMUEVSKGNvbW1pdF9zdG9yZSkoZW52LCAx KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBtZW1fbG9hZDEoQ1BVSGV4YWdv blN0YXRlICplbnYsIHVpbnQzMl90IHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRhcmdldF91bG9uZyB2YWRkcikKK3sKKyAgICB1aW50OF90IHJldHZhbDsKKyAgICBjaGVj a19ub3NodWYoZW52LCBzbG90KTsKKyAgICBnZXRfdXNlcl91OChyZXR2YWwsIHZhZGRyKTsKKyAg ICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IG1lbV9sb2FkMihD UFVIZXhhZ29uU3RhdGUgKmVudiwgdWludDMyX3Qgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRhcmdldF91bG9uZyB2YWRkcikKK3sKKyAgICB1aW50MTZfdCByZXR2YWw7 CisgICAgY2hlY2tfbm9zaHVmKGVudiwgc2xvdCk7CisgICAgZ2V0X3VzZXJfdTE2KHJldHZhbCwg dmFkZHIpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qg bWVtX2xvYWQ0KENQVUhleGFnb25TdGF0ZSAqZW52LCB1aW50MzJfdCBzbG90LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Vsb25nIHZhZGRyKQoreworICAgIHVpbnQz Ml90IHJldHZhbDsKKyAgICBjaGVja19ub3NodWYoZW52LCBzbG90KTsKKyAgICBnZXRfdXNlcl91 MzIocmV0dmFsLCB2YWRkcik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGlu ZSB1aW50NjRfdCBtZW1fbG9hZDgoQ1BVSGV4YWdvblN0YXRlICplbnYsIHVpbnQzMl90IHNsb3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdWxvbmcgdmFkZHIpCit7 CisgICAgdWludDY0X3QgcmV0dmFsOworICAgIGNoZWNrX25vc2h1ZihlbnYsIHNsb3QpOworICAg IGdldF91c2VyX3U2NChyZXR2YWwsIHZhZGRyKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisv KiBGbG9hdGluZyBwb2ludCAqLworZmxvYXQ2NCBIRUxQRVIoY29udl9zZjJkZikoQ1BVSGV4YWdv blN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOwor ICAgIGZsb2F0NjQgb3V0X2Y2NCA9IGZsb2F0MzJfdG9fZmxvYXQ2NChSc1YsICZlbnYtPmZwX3N0 YXR1cyk7CisgICAgb3V0X2Y2NCA9IGhleF9jaGVja19kZm5hbihvdXRfZjY0KTsKKyAgICBhcmNo X2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIG91dF9mNjQ7Cit9CisKK2Zsb2F0MzIgSEVMUEVS KGNvbnZfZGYyc2YpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7CisgICAg YXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgZmxvYXQzMiBvdXRfZjMyID0gZmxvYXQ2NF90b19m bG9hdDMyKFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgb3V0X2YzMiA9IGhleF9jaGVja19z Zm5hbihvdXRfZjMyKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIG91dF9m MzI7Cit9CisKK2Zsb2F0MzIgSEVMUEVSKGNvbnZfdXcyc2YpKENQVUhleGFnb25TdGF0ZSAqZW52 LCBpbnQzMl90IFJzVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBmbG9hdDMy IFJkViA9IHVpbnQzMl90b19mbG9hdDMyKFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYg PSBoZXhfY2hlY2tfc2ZuYW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0 dXJuIFJkVjsKK30KKworZmxvYXQ2NCBIRUxQRVIoY29udl91dzJkZikoQ1BVSGV4YWdvblN0YXRl ICplbnYsIGludDMyX3QgUnNWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGZs b2F0NjQgUmRkViA9IHVpbnQzMl90b19mbG9hdDY0KFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICBSZGRWID0gaGV4X2NoZWNrX2RmbmFuKFJkZFYpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsK KyAgICByZXR1cm4gUmRkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoY29udl93MnNmKShDUFVIZXhh Z29uU3RhdGUgKmVudiwgaW50MzJfdCBSc1YpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7 CisgICAgZmxvYXQzMiBSZFYgPSBpbnQzMl90b19mbG9hdDMyKFJzViwgJmVudi0+ZnBfc3RhdHVz KTsKKyAgICBSZFYgPSBoZXhfY2hlY2tfc2ZuYW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVu dik7CisgICAgcmV0dXJuIFJkVjsKK30KKworZmxvYXQ2NCBIRUxQRVIoY29udl93MmRmKShDUFVI ZXhhZ29uU3RhdGUgKmVudiwgaW50MzJfdCBSc1YpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVu dik7CisgICAgZmxvYXQ2NCBSZGRWID0gaW50MzJfdG9fZmxvYXQ2NChSc1YsICZlbnYtPmZwX3N0 YXR1cyk7CisgICAgUmRkViA9IGhleF9jaGVja19kZm5hbihSZGRWKTsKKyAgICBhcmNoX2Zwb3Bf ZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVSKGNvbnZfdWQy c2YpKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQ2NF90IFJzc1YpCit7CisgICAgYXJjaF9mcG9w X3N0YXJ0KGVudik7CisgICAgZmxvYXQzMiBSZFYgPSB1aW50NjRfdG9fZmxvYXQzMihSc3NWLCAm ZW52LT5mcF9zdGF0dXMpOworICAgIFJkViA9IGhleF9jaGVja19zZm5hbihSZFYpOworICAgIGFy Y2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitmbG9hdDY0IEhFTFBFUihj b252X3VkMmRmKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50NjRfdCBSc3NWKQoreworICAgIGFy Y2hfZnBvcF9zdGFydChlbnYpOworICAgIGZsb2F0NjQgUmRkViA9IHVpbnQ2NF90b19mbG9hdDY0 KFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUmRkViA9IGhleF9jaGVja19kZm5hbihSZGRW KTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2Zsb2F0 MzIgSEVMUEVSKGNvbnZfZDJzZikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludDY0X3QgUnNzVikK K3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBmbG9hdDMyIFJkViA9IGludDY0X3Rv X2Zsb2F0MzIoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBoZXhfY2hlY2tfc2Zu YW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKwor ZmxvYXQ2NCBIRUxQRVIoY29udl9kMmRmKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50NjRfdCBS c3NWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGZsb2F0NjQgUmRkViA9IGlu dDY0X3RvX2Zsb2F0NjQoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZGRWID0gaGV4X2No ZWNrX2RmbmFuKFJkZFYpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRk VjsKK30KKworaW50MzJfdCBIRUxQRVIoY29udl9zZjJ1dykoQ1BVSGV4YWdvblN0YXRlICplbnYs IGZsb2F0MzIgUnNWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGludDMyX3Qg UmRWID0gY29udl9zZl90b180dShSc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9w X2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGNvbnZfc2Yy dykoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQoreworICAgIGFyY2hfZnBvcF9z dGFydChlbnYpOworICAgIGludDMyX3QgUmRWID0gY29udl9zZl90b180cyhSc1YsICZlbnYtPmZw X3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisK K2ludDY0X3QgSEVMUEVSKGNvbnZfc2YydWQpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMy IFJzVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpbnQ2NF90IFJkZFYgPSBj b252X3NmX3RvXzh1KFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVu dik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2ludDY0X3QgSEVMUEVSKGNvbnZfc2YyZCkoQ1BV SGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChl bnYpOworICAgIGludDY0X3QgUmRkViA9IGNvbnZfc2ZfdG9fOHMoUnNWLCAmZW52LT5mcF9zdGF0 dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworaW50 MzJfdCBIRUxQRVIoY29udl9kZjJ1dykoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNz VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpbnQzMl90IFJkViA9IGNvbnZf ZGZfdG9fNHUoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7 CisgICAgcmV0dXJuIFJkVjsKK30KKworaW50MzJfdCBIRUxQRVIoY29udl9kZjJ3KShDUFVIZXhh Z29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYp OworICAgIGludDMyX3QgUmRWID0gY29udl9kZl90b180cyhSc3NWLCAmZW52LT5mcF9zdGF0dXMp OworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitpbnQ2NF90 IEhFTFBFUihjb252X2RmMnVkKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQor eworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGludDY0X3QgUmRkViA9IGNvbnZfZGZf dG9fOHUoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7Cisg ICAgcmV0dXJuIFJkZFY7Cit9CisKK2ludDY0X3QgSEVMUEVSKGNvbnZfZGYyZCkoQ1BVSGV4YWdv blN0YXRlICplbnYsIGZsb2F0NjQgUnNzVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsK KyAgICBpbnQ2NF90IFJkZFYgPSBjb252X2RmX3RvXzhzKFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7 CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZGRWOworfQorCitpbnQzMl90 IEhFTFBFUihjb252X3NmMnV3X2Nob3ApKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJz VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBzZXRfZmxvYXRfcm91bmRpbmdf bW9kZShmbG9hdF9yb3VuZF90b196ZXJvLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGludDMyX3Qg UmRWID0gY29udl9zZl90b180dShSc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9w X2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGNvbnZfc2Yy d19jaG9wKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YpCit7CisgICAgYXJjaF9m cG9wX3N0YXJ0KGVudik7CisgICAgc2V0X2Zsb2F0X3JvdW5kaW5nX21vZGUoZmxvYXRfcm91bmRf dG9femVybywgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpbnQzMl90IFJkViA9IGNvbnZfc2ZfdG9f NHMoUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICBy ZXR1cm4gUmRWOworfQorCitpbnQ2NF90IEhFTFBFUihjb252X3NmMnVkX2Nob3ApKENQVUhleGFn b25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsK KyAgICBzZXRfZmxvYXRfcm91bmRpbmdfbW9kZShmbG9hdF9yb3VuZF90b196ZXJvLCAmZW52LT5m cF9zdGF0dXMpOworICAgIGludDY0X3QgUmRkViA9IGNvbnZfc2ZfdG9fOHUoUnNWLCAmZW52LT5m cF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30K KworaW50NjRfdCBIRUxQRVIoY29udl9zZjJkX2Nob3ApKENQVUhleGFnb25TdGF0ZSAqZW52LCBm bG9hdDMyIFJzVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBzZXRfZmxvYXRf cm91bmRpbmdfbW9kZShmbG9hdF9yb3VuZF90b196ZXJvLCAmZW52LT5mcF9zdGF0dXMpOworICAg IGludDY0X3QgUmRkViA9IGNvbnZfc2ZfdG9fOHMoUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAg IGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworaW50MzJfdCBIRUxQ RVIoY29udl9kZjJ1d19jaG9wKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQor eworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2Rl KGZsb2F0X3JvdW5kX3RvX3plcm8sICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaW50MzJfdCBSZFYg PSBjb252X2RmX3RvXzR1KFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2Vu ZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGNvbnZfZGYyd19j aG9wKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQoreworICAgIGFyY2hfZnBv cF9zdGFydChlbnYpOworICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX3Rv X3plcm8sICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaW50MzJfdCBSZFYgPSBjb252X2RmX3RvXzRz KFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJl dHVybiBSZFY7Cit9CisKK2ludDY0X3QgSEVMUEVSKGNvbnZfZGYydWRfY2hvcCkoQ1BVSGV4YWdv blN0YXRlICplbnYsIGZsb2F0NjQgUnNzVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsK KyAgICBzZXRfZmxvYXRfcm91bmRpbmdfbW9kZShmbG9hdF9yb3VuZF90b196ZXJvLCAmZW52LT5m cF9zdGF0dXMpOworICAgIGludDY0X3QgUmRkViA9IGNvbnZfZGZfdG9fOHUoUnNzViwgJmVudi0+ ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9 CisKK2ludDY0X3QgSEVMUEVSKGNvbnZfZGYyZF9jaG9wKShDUFVIZXhhZ29uU3RhdGUgKmVudiwg ZmxvYXQ2NCBSc3NWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIHNldF9mbG9h dF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX3RvX3plcm8sICZlbnYtPmZwX3N0YXR1cyk7Cisg ICAgaW50NjRfdCBSZGRWID0gY29udl9kZl90b184cyhSc3NWLCAmZW52LT5mcF9zdGF0dXMpOwor ICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworZmxvYXQzMiBI RUxQRVIoc2ZhZGQpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBS dFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgZmxvYXQzMiBSZFYgPSBmbG9h dDMyX2FkZChSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBoZXhfY2hlY2tf c2ZuYW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30K KworZmxvYXQzMiBIRUxQRVIoc2ZzdWIpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJz ViwgZmxvYXQzMiBSdFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgZmxvYXQz MiBSZFYgPSBmbG9hdDMyX3N1YihSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYg PSBoZXhfY2hlY2tfc2ZuYW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0 dXJuIFJkVjsKK30KKworaW50MzJfdCBIRUxQRVIoc2ZjbXBlcSkoQ1BVSGV4YWdvblN0YXRlICpl bnYsIGZsb2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52 KTsKKyAgICBpbnQzMl90IFBkViA9IGY4QklUU09GKGZsb2F0MzJfZXFfcXVpZXQoUnNWLCBSdFYs ICZlbnYtPmZwX3N0YXR1cykpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4g UGRWOworfQorCitpbnQzMl90IEhFTFBFUihzZmNtcGd0KShDUFVIZXhhZ29uU3RhdGUgKmVudiwg ZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOwor ICAgIGludCBjbXAgPSBmbG9hdDMyX2NvbXBhcmVfcXVpZXQoUnNWLCBSdFYsICZlbnYtPmZwX3N0 YXR1cyk7CisgICAgaW50MzJfdCBQZFYgPSBmOEJJVFNPRihjbXAgPT0gZmxvYXRfcmVsYXRpb25f Z3JlYXRlcik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBQZFY7Cit9CisK K2ludDMyX3QgSEVMUEVSKHNmY21wZ2UpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJz ViwgZmxvYXQzMiBSdFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgaW50IGNt cCA9IGZsb2F0MzJfY29tcGFyZV9xdWlldChSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICBpbnQzMl90IFBkViA9IGY4QklUU09GKGNtcCA9PSBmbG9hdF9yZWxhdGlvbl9ncmVhdGVyIHx8 CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXAgPT0gZmxvYXRfcmVsYXRpb25fZXF1YWwp OworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUGRWOworfQorCitpbnQzMl90 IEhFTFBFUihzZmNtcHVvKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YsIGZsb2F0 MzIgUnRWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGludDMyX3QgUGRWID0g ZjhCSVRTT0YoZmxvYXQzMl9pc19hbnlfbmFuKFJzVikgfHwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZsb2F0MzJfaXNfYW55X25hbihSdFYpKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7 CisgICAgcmV0dXJuIFBkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoc2ZtYXgpKENQVUhleGFnb25T dGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgYXJjaF9mcG9wX3N0 YXJ0KGVudik7CisgICAgZmxvYXQzMiBSZFYgPSBmbG9hdDMyX21heG51bShSc1YsIFJ0ViwgJmVu di0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBoZXhfY2hlY2tfc2ZuYW4oUmRWKTsKKyAgICBhcmNo X2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoc2Zt aW4pKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7Cisg ICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgZmxvYXQzMiBSZFYgPSBmbG9hdDMyX21pbm51 bShSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBoZXhfY2hlY2tfc2ZuYW4o UmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworaW50 MzJfdCBIRUxQRVIoc2ZjbGFzcykoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWLCBp bnQzMl90IHVpVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpbnQzMl90IFBk ViA9IDA7CisgICAgaWYgKGZHRVRCSVQoMCwgdWlWKSAmJiBmbG9hdDMyX2lzX3plcm8oUnNWKSkg eworICAgICAgICBQZFYgPSAweGZmOworICAgIH0KKyAgICBpZiAoZkdFVEJJVCgxLCB1aVYpICYm IGZsb2F0MzJfaXNfbm9ybWFsKFJzVikpIHsKKyAgICAgICAgUGRWID0gMHhmZjsKKyAgICB9Cisg ICAgaWYgKGZHRVRCSVQoMiwgdWlWKSAmJiBmbG9hdDMyX2lzX2Rlbm9ybWFsKFJzVikpIHsKKyAg ICAgICAgUGRWID0gMHhmZjsKKyAgICB9CisgICAgaWYgKGZHRVRCSVQoMywgdWlWKSAmJiBmbG9h dDMyX2lzX2luZmluaXR5KFJzVikpIHsKKyAgICAgICAgUGRWID0gMHhmZjsKKyAgICB9CisgICAg aWYgKGZHRVRCSVQoNCwgdWlWKSAmJiBmbG9hdDMyX2lzX2FueV9uYW4oUnNWKSkgeworICAgICAg ICBQZFYgPSAweGZmOworICAgIH0KKyAgICBzZXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzKDAsICZl bnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBQZFY7 Cit9CisKK2Zsb2F0MzIgSEVMUEVSKHNmZml4dXBuKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxv YXQzMiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGZsb2F0MzIgUmRWID0gMDsKKyAgICBhcmNo X2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpbnQgYWRqdXN0OworICAgIGFyY2hfc2ZfcmVjaXBfY29t bW9uKCZSc1YsICZSdFYsICZSZFYsICZhZGp1c3QsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUmRW ID0gUnNWOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitm bG9hdDMyIEhFTFBFUihzZmZpeHVwZCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNW LCBmbG9hdDMyIFJ0VikKK3sKKyAgICBmbG9hdDMyIFJkViA9IDA7CisgICAgYXJjaF9mcG9wX3N0 YXJ0KGVudik7CisgICAgaW50IGFkanVzdDsKKyAgICBhcmNoX3NmX3JlY2lwX2NvbW1vbigmUnNW LCAmUnRWLCAmUmRWLCAmYWRqdXN0LCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkViA9IFJ0VjsK KyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworZmxvYXQzMiBI RUxQRVIoc2ZmaXh1cHIpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzVikKK3sKKyAg ICBmbG9hdDMyIFJkViA9IDA7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgaW50IGFk anVzdDsKKyAgICBhcmNoX3NmX2ludnNxcnRfY29tbW9uKCZSc1YsICZSZFYsICZhZGp1c3QsICZl bnYtPmZwX3N0YXR1cyk7CisgICAgUmRWID0gUnNWOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsK KyAgICByZXR1cm4gUmRWOworfQorCitmbG9hdDY0IEhFTFBFUihkZmFkZCkoQ1BVSGV4YWdvblN0 YXRlICplbnYsIGZsb2F0NjQgUnNzViwgZmxvYXQ2NCBSdHRWKQoreworICAgIGFyY2hfZnBvcF9z dGFydChlbnYpOworICAgIGZsb2F0NjQgUmRkViA9IGZsb2F0NjRfYWRkKFJzc1YsIFJ0dFYsICZl bnYtPmZwX3N0YXR1cyk7CisgICAgUmRkViA9IGhleF9jaGVja19kZm5hbihSZGRWKTsKKyAgICBh cmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2Zsb2F0NjQgSEVMUEVS KGRmc3ViKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYp Cit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgZmxvYXQ2NCBSZGRWID0gZmxvYXQ2 NF9zdWIoUnNzViwgUnR0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZGRWID0gaGV4X2NoZWNr X2RmbmFuKFJkZFYpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsK K30KKworZmxvYXQ2NCBIRUxQRVIoZGZtYXgpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0 IFJzc1YsIGZsb2F0NjQgUnR0VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBm bG9hdDY0IFJkZFYgPSBmbG9hdDY0X21heG51bShSc3NWLCBSdHRWLCAmZW52LT5mcF9zdGF0dXMp OworICAgIGlmIChmbG9hdDY0X2lzX2FueV9uYW4oUnNzVikgfHwgZmxvYXQ2NF9pc19hbnlfbmFu KFJ0dFYpKSB7CisgICAgICAgIGZsb2F0X3JhaXNlKGZsb2F0X2ZsYWdfaW52YWxpZCwgJmVudi0+ ZnBfc3RhdHVzKTsKKyAgICB9CisgICAgUmRkViA9IGhleF9jaGVja19kZm5hbihSZGRWKTsKKyAg ICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2Zsb2F0NjQgSEVM UEVSKGRmbWluKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0 dFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgZmxvYXQ2NCBSZGRWID0gZmxv YXQ2NF9taW5udW0oUnNzViwgUnR0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpZiAoZmxvYXQ2 NF9pc19hbnlfbmFuKFJzc1YpIHx8IGZsb2F0NjRfaXNfYW55X25hbihSdHRWKSkgeworICAgICAg ICBmbG9hdF9yYWlzZShmbG9hdF9mbGFnX2ludmFsaWQsICZlbnYtPmZwX3N0YXR1cyk7CisgICAg fQorICAgIFJkZFYgPSBoZXhfY2hlY2tfZGZuYW4oUmRkVik7CisgICAgYXJjaF9mcG9wX2VuZChl bnYpOworICAgIHJldHVybiBSZGRWOworfQorCitpbnQzMl90IEhFTFBFUihkZmNtcGVxKShDUFVI ZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgYXJj aF9mcG9wX3N0YXJ0KGVudik7CisgICAgaW50MzJfdCBQZFYgPSBmOEJJVFNPRihmbG9hdDY0X2Vx X3F1aWV0KFJzc1YsIFJ0dFYsICZlbnYtPmZwX3N0YXR1cykpOworICAgIGFyY2hfZnBvcF9lbmQo ZW52KTsKKyAgICByZXR1cm4gUGRWOworfQorCitpbnQzMl90IEhFTFBFUihkZmNtcGd0KShDUFVI ZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgYXJj aF9mcG9wX3N0YXJ0KGVudik7CisgICAgaW50IGNtcCA9IGZsb2F0NjRfY29tcGFyZV9xdWlldChS c3NWLCBSdHRWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGludDMyX3QgUGRWID0gZjhCSVRTT0Yo Y21wID09IGZsb2F0X3JlbGF0aW9uX2dyZWF0ZXIpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsK KyAgICByZXR1cm4gUGRWOworfQorCitpbnQzMl90IEhFTFBFUihkZmNtcGdlKShDUFVIZXhhZ29u U3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgYXJjaF9mcG9w X3N0YXJ0KGVudik7CisgICAgaW50IGNtcCA9IGZsb2F0NjRfY29tcGFyZV9xdWlldChSc3NWLCBS dHRWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGludDMyX3QgUGRWID0gZjhCSVRTT0YoY21wID09 IGZsb2F0X3JlbGF0aW9uX2dyZWF0ZXIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNt cCA9PSBmbG9hdF9yZWxhdGlvbl9lcXVhbCk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAg IHJldHVybiBQZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGRmY21wdW8pKENQVUhleGFnb25TdGF0 ZSAqZW52LCBmbG9hdDY0IFJzc1YsIGZsb2F0NjQgUnR0VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3Rh cnQoZW52KTsKKyAgICBpbnQzMl90IFBkViA9IGY4QklUU09GKGZsb2F0NjRfaXNfYW55X25hbihS c3NWKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQ2NF9pc19hbnlfbmFuKFJ0 dFYpKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFBkVjsKK30KKworaW50 MzJfdCBIRUxQRVIoZGZjbGFzcykoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzViwg aW50MzJfdCB1aVYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgaW50MzJfdCBQ ZFYgPSAwOworICAgIGlmIChmR0VUQklUKDAsIHVpVikgJiYgZmxvYXQ2NF9pc196ZXJvKFJzc1Yp KSB7CisgICAgICAgIFBkViA9IDB4ZmY7CisgICAgfQorICAgIGlmIChmR0VUQklUKDEsIHVpVikg JiYgZmxvYXQ2NF9pc19ub3JtYWwoUnNzVikpIHsKKyAgICAgICAgUGRWID0gMHhmZjsKKyAgICB9 CisgICAgaWYgKGZHRVRCSVQoMiwgdWlWKSAmJiBmbG9hdDY0X2lzX2Rlbm9ybWFsKFJzc1YpKSB7 CisgICAgICAgIFBkViA9IDB4ZmY7CisgICAgfQorICAgIGlmIChmR0VUQklUKDMsIHVpVikgJiYg ZmxvYXQ2NF9pc19pbmZpbml0eShSc3NWKSkgeworICAgICAgICBQZFYgPSAweGZmOworICAgIH0K KyAgICBpZiAoZkdFVEJJVCg0LCB1aVYpICYmIGZsb2F0NjRfaXNfYW55X25hbihSc3NWKSkgewor ICAgICAgICBQZFYgPSAweGZmOworICAgIH0KKyAgICBzZXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdz KDAsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVy biBQZFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVSKHNmbXB5KShDUFVIZXhhZ29uU3RhdGUgKmVudiwg ZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOwor ICAgIGZsb2F0MzIgUmRWID0gaW50ZXJuYWxfbXB5ZihSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVz KTsKKyAgICBSZFYgPSBoZXhfY2hlY2tfc2ZuYW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVu dik7CisgICAgcmV0dXJuIFJkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoc2ZmbWEpKENQVUhleGFn b25TdGF0ZSAqZW52LCBmbG9hdDMyIFJ4ViwKKyAgICAgICAgICAgICAgICAgICAgICBmbG9hdDMy IFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUnhW ID0gaW50ZXJuYWxfZm1hZngoUnNWLCBSdFYsIFJ4ViwgMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICBSeFYgPSBoZXhfY2hlY2tfc2ZuYW4oUnhWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7Cisg ICAgcmV0dXJuIFJ4VjsKK30KKworc3RhdGljIGJvb2wgaXNfemVyb19wcm9kKGZsb2F0MzIgYSwg ZmxvYXQzMiBiKQoreworICAgIHJldHVybiAoKGZsb2F0MzJfaXNfemVybyhhKSAmJiBpc19maW5p dGUoYikpIHx8CisgICAgICAgICAgICAoZmxvYXQzMl9pc196ZXJvKGIpICYmIGlzX2Zpbml0ZShh KSkpOworfQorCitzdGF0aWMgZmxvYXQzMiBjaGVja19uYW4oZmxvYXQzMiBkc3QsIGZsb2F0MzIg eCwgZmxvYXRfc3RhdHVzICpmcF9zdGF0dXMpCit7CisgICAgZmxvYXQzMiByZXQgPSBkc3Q7Cisg ICAgaWYgKGZsb2F0MzJfaXNfYW55X25hbih4KSkgeworICAgICAgICBpZiAoZXh0cmFjdDMyKHgs IDIyLCAxKSA9PSAwKSB7CisgICAgICAgICAgICBmbG9hdF9yYWlzZShmbG9hdF9mbGFnX2ludmFs aWQsIGZwX3N0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gbWFrZV9mbG9hdDMyKDB4 ZmZmZmZmZmYpOyAgICAvKiBuYW4gKi8KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworZmxv YXQzMiBIRUxQRVIoc2ZmbWFfc2MpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJ4ViwK KyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYsIGZsb2F0 MzIgUHVWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIHNpemU0c190IHRtcDsK KyAgICBSeFYgPSBjaGVja19uYW4oUnhWLCBSeFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUnhW ID0gY2hlY2tfbmFuKFJ4ViwgUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJ4ViA9IGNoZWNr X25hbihSeFYsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICB0bXAgPSBpbnRlcm5hbF9mbWFm eChSc1YsIFJ0ViwgUnhWLCBmU1hUTig4LCA2NCwgUHVWKSwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICB0bXAgPSBoZXhfY2hlY2tfc2ZuYW4odG1wKTsKKyAgICBpZiAoIShmbG9hdDMyX2lzX3plcm8o UnhWKSAmJiBpc196ZXJvX3Byb2QoUnNWLCBSdFYpKSkgeworICAgICAgICBSeFYgPSB0bXA7Cisg ICAgfQorICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUnhWOworfQorCitmbG9h dDMyIEhFTFBFUihzZmZtcykoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnhWLAorICAg ICAgICAgICAgICAgICAgICAgIGZsb2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBhcmNo X2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBmbG9hdDMyIG5lZ19Sc1YgPSBmbG9hdDMyX3N1YihmbG9h dDMyX3plcm8sIFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBpbnRlcm5hbF9mbWFm eChuZWdfUnNWLCBSdFYsIFJ4ViwgMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBoZXhf Y2hlY2tfc2ZuYW4oUnhWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJ4 VjsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX2luZl9wcm9kKGludDMyX3QgYSwgaW50MzJf dCBiKQoreworICAgIHJldHVybiAoZmxvYXQzMl9pc19pbmZpbml0eShhKSAmJiBmbG9hdDMyX2lz X2luZmluaXR5KGIpKSB8fAorICAgICAgICAgICAoZmxvYXQzMl9pc19pbmZpbml0eShhKSAmJiBp c19maW5pdGUoYikgJiYgIWZsb2F0MzJfaXNfemVybyhiKSkgfHwKKyAgICAgICAgICAgKGZsb2F0 MzJfaXNfaW5maW5pdHkoYikgJiYgaXNfZmluaXRlKGEpICYmICFmbG9hdDMyX2lzX3plcm8oYSkp OworfQorCitmbG9hdDMyIEhFTFBFUihzZmZtYV9saWIpKENQVUhleGFnb25TdGF0ZSAqZW52LCBm bG9hdDMyIFJ4ViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQzMiBSc1YsIGZsb2F0 MzIgUnRWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIHNldF9mbG9hdF9yb3Vu ZGluZ19tb2RlKGZsb2F0X3JvdW5kX25lYXJlc3RfZXZlbiwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICBpbnQgaW5maW5wOworICAgIGludCBpbmZtaW51c2luZjsKKyAgICBmbG9hdDMyIHRtcDsKKyAg ICBpbmZtaW51c2luZiA9IGZsb2F0MzJfaXNfaW5maW5pdHkoUnhWKSAmJgorICAgICAgICAgICAg ICAgICAgaXNfaW5mX3Byb2QoUnNWLCBSdFYpICYmCisgICAgICAgICAgICAgICAgICAoZkdFVEJJ VCgzMSwgUnNWIF4gUnhWIF4gUnRWKSAhPSAwKTsKKyAgICBpbmZpbnAgPSBmbG9hdDMyX2lzX2lu ZmluaXR5KFJ4VikgfHwKKyAgICAgICAgICAgICBmbG9hdDMyX2lzX2luZmluaXR5KFJ0VikgfHwK KyAgICAgICAgICAgICBmbG9hdDMyX2lzX2luZmluaXR5KFJzVik7CisgICAgUnhWID0gY2hlY2tf bmFuKFJ4ViwgUnhWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJ4ViA9IGNoZWNrX25hbihSeFYs IFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBjaGVja19uYW4oUnhWLCBSdFYsICZl bnYtPmZwX3N0YXR1cyk7CisgICAgdG1wID0gaW50ZXJuYWxfZm1hZngoUnNWLCBSdFYsIFJ4Viwg MCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICB0bXAgPSBoZXhfY2hlY2tfc2ZuYW4odG1wKTsKKyAg ICBpZiAoIShmbG9hdDMyX2lzX3plcm8oUnhWKSAmJiBpc196ZXJvX3Byb2QoUnNWLCBSdFYpKSkg eworICAgICAgICBSeFYgPSB0bXA7CisgICAgfQorICAgIHNldF9mbG9hdF9leGNlcHRpb25fZmxh Z3MoMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpZiAoZmxvYXQzMl9pc19pbmZpbml0eShSeFYp ICYmICFpbmZpbnApIHsKKyAgICAgICAgUnhWID0gUnhWIC0gMTsKKyAgICB9CisgICAgaWYgKGlu Zm1pbnVzaW5mKSB7CisgICAgICAgIFJ4ViA9IDA7CisgICAgfQorICAgIGFyY2hfZnBvcF9lbmQo ZW52KTsKKyAgICByZXR1cm4gUnhWOworfQorCitmbG9hdDMyIEhFTFBFUihzZmZtc19saWIpKENQ VUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJ4ViwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYp OworICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX25lYXJlc3RfZXZlbiwg JmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpbnQgaW5maW5wOworICAgIGludCBpbmZtaW51c2luZjsK KyAgICBmbG9hdDMyIHRtcDsKKyAgICBpbmZtaW51c2luZiA9IGZsb2F0MzJfaXNfaW5maW5pdHko UnhWKSAmJgorICAgICAgICAgICAgICAgICAgaXNfaW5mX3Byb2QoUnNWLCBSdFYpICYmCisgICAg ICAgICAgICAgICAgICAoZkdFVEJJVCgzMSwgUnNWIF4gUnhWIF4gUnRWKSA9PSAwKTsKKyAgICBp bmZpbnAgPSBmbG9hdDMyX2lzX2luZmluaXR5KFJ4VikgfHwKKyAgICAgICAgICAgICBmbG9hdDMy X2lzX2luZmluaXR5KFJ0VikgfHwKKyAgICAgICAgICAgICBmbG9hdDMyX2lzX2luZmluaXR5KFJz Vik7CisgICAgUnhWID0gY2hlY2tfbmFuKFJ4ViwgUnhWLCAmZW52LT5mcF9zdGF0dXMpOworICAg IFJ4ViA9IGNoZWNrX25hbihSeFYsIFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBj aGVja19uYW4oUnhWLCBSdFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgZmxvYXQzMiBtaW51c19S c1YgPSBmbG9hdDMyX3N1YihmbG9hdDMyX3plcm8sIFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICB0bXAgPSBpbnRlcm5hbF9mbWFmeChtaW51c19Sc1YsIFJ0ViwgUnhWLCAwLCAmZW52LT5mcF9z dGF0dXMpOworICAgIHRtcCA9IGhleF9jaGVja19zZm5hbih0bXApOworICAgIGlmICghKGZsb2F0 MzJfaXNfemVybyhSeFYpICYmIGlzX3plcm9fcHJvZChSc1YsIFJ0VikpKSB7CisgICAgICAgIFJ4 ViA9IHRtcDsKKyAgICB9CisgICAgc2V0X2Zsb2F0X2V4Y2VwdGlvbl9mbGFncygwLCAmZW52LT5m cF9zdGF0dXMpOworICAgIGlmIChmbG9hdDMyX2lzX2luZmluaXR5KFJ4VikgJiYgIWluZmlucCkg eworICAgICAgICBSeFYgPSBSeFYgLSAxOworICAgIH0KKyAgICBpZiAoaW5mbWludXNpbmYpIHsK KyAgICAgICAgUnhWID0gMDsKKyAgICB9CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJl dHVybiBSeFY7Cit9CisKK2Zsb2F0NjQgSEVMUEVSKGRmbXB5Zml4KShDUFVIZXhhZ29uU3RhdGUg KmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgaW50NjRfdCBSZGRWOwor ICAgIGlmIChmbG9hdDY0X2lzX2Rlbm9ybWFsKFJzc1YpICYmCisgICAgICAgIChmbG9hdDY0X2dl dGV4cChSdHRWKSA+PSA1MTIpICYmCisgICAgICAgIGZsb2F0NjRfaXNfbm9ybWFsKFJ0dFYpKSB7 CisgICAgICAgIFJkZFYgPSBmbG9hdDY0X211bChSc3NWLCBtYWtlX2Zsb2F0NjQoMHg0MzMwMDAw MDAwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnYtPmZwX3N0YXR1cyk7 CisgICAgICAgIFJkZFYgPSBoZXhfY2hlY2tfZGZuYW4oUmRkVik7CisgICAgfSBlbHNlIGlmIChm bG9hdDY0X2lzX2Rlbm9ybWFsKFJ0dFYpICYmCisgICAgICAgICAgICAgICAoZmxvYXQ2NF9nZXRl eHAoUnNzVikgPj0gNTEyKSAmJgorICAgICAgICAgICAgICAgZmxvYXQ2NF9pc19ub3JtYWwoUnNz VikpIHsKKyAgICAgICAgUmRkViA9IGZsb2F0NjRfbXVsKFJzc1YsIG1ha2VfZmxvYXQ2NCgweDNj YjAwMDAwMDAwMDAwMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudi0+ZnBfc3Rh dHVzKTsKKyAgICAgICAgUmRkViA9IGhleF9jaGVja19kZm5hbihSZGRWKTsKKyAgICB9IGVsc2Ug eworICAgICAgICBSZGRWID0gUnNzVjsKKyAgICB9CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOwor ICAgIHJldHVybiBSZGRWOworfQorCitmbG9hdDY0IEhFTFBFUihkZm1weWhoKShDUFVIZXhhZ29u U3RhdGUgKmVudiwgZmxvYXQ2NCBSeHhWLAorICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQ2 NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAg Unh4ViA9IGludGVybmFsX21weWhoKFJzc1YsIFJ0dFYsIFJ4eFYsICZlbnYtPmZwX3N0YXR1cyk7 CisgICAgUnh4ViA9IGhleF9jaGVja19kZm5hbihSeHhWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVu dik7CisgICAgcmV0dXJuIFJ4eFY7Cit9CisKK3N0YXRpYyB2b2lkIGNhbmNlbF9zbG90KENQVUhl eGFnb25TdGF0ZSAqZW52LCB1aW50MzJfdCBzbG90KQoreworICAgIEhFWF9ERUJVR19MT0coIlNs b3QgJWQgY2FuY2VsbGVkXG4iLCBzbG90KTsKKyAgICBlbnYtPnNsb3RfY2FuY2VsbGVkIHw9ICgx IDw8IHNsb3QpOworfQorCisvKiBUaGVzZSBtYWNyb3MgY2FuIGJlIHJlZmVyZW5jZWQgaW4gdGhl IGdlbmVyYXRlZCBoZWxwZXIgZnVuY3Rpb25zICovCisjZGVmaW5lIHdhcm4oLi4uKSAvKiBOb3Ro aW5nICovCisjZGVmaW5lIGZhdGFsKC4uLikgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKworI2Rl ZmluZSBCT0dVU19IRUxQRVIodGFnKSBcCisgICAgcHJpbnRmKCJFUlJPUjogYm9ndXMgaGVscGVy OiAiICN0YWcgIlxuIikKKworI2luY2x1ZGUgImhlbHBlcl9mdW5jc19nZW5lcmF0ZWQuaCIKLS0g CjIuNy40Cgo=