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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C19A4CDB474 for ; Mon, 23 Oct 2023 13:21:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=SqOYqtzQY2FwM+z+YIvEoM26yvjqibtbbHDfmsA/y9s=; b=IWMDY1JttqrfJx ZkW+K4Twjv1cPzwW+H72e9UtGPnpPt+yyjY3m43J8qjngeC8BVH+z25pD3LM+z4W8dVSS1ShDZrhR G7517Ff4mC18X0+xzoRAak+6S6jH35ddSGEzH0H/EBlO0E4j2dShlZdgMjom48Z97kw4EZUOhvHlj +gzBqSRayIJp/THMzEhoTmjKEmLJinFEI7+BnGXld+yaI3E1fZDor01oybQMHlfOR/JL1J+idHeAR DR+ep+I2dR0PogdPumpzXIICwQJohsHphW3TdGwNsNPnF9tpCeZnZGVgl3ga+pUmFncZdj5w9BYou +UhBSB7TZk424xIJu5+A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1quurl-007QT3-2e; Mon, 23 Oct 2023 13:21:09 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1quurY-007QOH-39 for linux-arm-kernel@lists.infradead.org; Mon, 23 Oct 2023 13:21:07 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id B1323CE2490; Mon, 23 Oct 2023 13:20:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B5033C433D9; Mon, 23 Oct 2023 13:20:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698067254; bh=4WVKISKuHonsID6Tr7gWujfI8PUL6m78F6A9q3ZhcH0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fDKGNa2xt2Ptpj/X+xvgPzK/TZ/UF1ga0COuJJLRuL8Kw7tD4qwTHmMqvwgeLs7sF 1CvQ0LuF6I8uNhhETfyg9jmk4agKLi6GB8xlr+xMx4RtKCnCqY+qdilqSCMx0MjFRk bt4kOcbU65DyUdmlY5/o5x57SrGe5yel1OApwhHoLpQXrkTxrcGyilyvDZbgL2ejpc y6bXNsHg7Sc4UIHlTvRM8ZnAWIkzqMy6BJGhTv7a7HFb3EhEciaqOzGnaJ8y6R4edY 5OOf4bVc2xQTxunq+xlKoQCJNqB6Y+NmGPPv0OtSdktGWVIfzEb7I2XuXm5exyQVT6 LJ1+hTbolZzGw== From: Arnd Bergmann To: Kalle Valo Subject: [PATCH 08/10] wifi: remove orphaned wl3501 driver Date: Mon, 23 Oct 2023 15:19:50 +0200 Message-Id: <20231023131953.2876682-9-arnd@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231023131953.2876682-1-arnd@kernel.org> References: <20231023131953.2876682-1-arnd@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231023_062057_614222_8C3EC967 X-CRM114-Status: GOOD ( 18.72 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stanislaw Gruszka , Alexandre Belloni , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Arnd Bergmann , Geoff Levand , Greg Kroah-Hartman , linuxppc-dev , linux-wireless@vger.kernel.org, Claudiu Beznea , Geert Uytterhoeven , Pavel Machek , Gregory Greenman , Jakub Kicinski , Johannes Berg , Jeff Johnson , "David S . Miller" , linux-arm-kernel@lists.infradead.org, Larry Finger Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KClBsYW5ldCBXTDM1MDEgaXMgYW5v dGhlciBQQ01DSUEgZHJpdmVyIGZvciBwcmUtODAyLjExYiBpbnRlcmZhY2VzCigyTWJpdC9zKSB3 aXRoIGluY29tcGxldGUgQ0ZHODAyMTEgc3VwcG9ydC4KClRoaXMgd2FzIG1hcmtlZCBhcyBvcnBo YW5lZCBpbiAyMDE3IGJ1dCBoYXMgYmVlbiB1bm1haW50YWluZWQKZm9yIGEgbG9uZyB0aW1lIGJl Zm9yZSB0aGF0LgoKU2lnbmVkLW9mZi1ieTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4K LS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1IC0KIGRy aXZlcnMvbmV0L3dpcmVsZXNzL2xlZ2FjeS9LY29uZmlnICAgICB8ICAgMTAgLQogZHJpdmVycy9u ZXQvd2lyZWxlc3MvbGVnYWN5L01ha2VmaWxlICAgIHwgICAgMyAtCiBkcml2ZXJzL25ldC93aXJl bGVzcy9sZWdhY3kvd2wzNTAxLmggICAgfCAgNjE1IC0tLS0tLS0KIGRyaXZlcnMvbmV0L3dpcmVs ZXNzL2xlZ2FjeS93bDM1MDFfY3MuYyB8IDIwMzYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDUg ZmlsZXMgY2hhbmdlZCwgMjY2OSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL25ldC93aXJlbGVzcy9sZWdhY3kvd2wzNTAxLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL25ldC93aXJlbGVzcy9sZWdhY3kvd2wzNTAxX2NzLmMKCmRpZmYgLS1naXQgYS9NQUlOVEFJ TkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDMxMjNjOTU1YmI3ZjUuLmVlM2M5NmRlNjg5YzAgMTAw NjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0yMzIyMSwxMSArMjMy MjEsNiBAQCBNOglNaWxvc2xhdiBUcm1hYyA8bWl0ckB2b2xueS5jej4KIFM6CU1haW50YWluZWQK IEY6CWRyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwogCi1XTDM1MDEgV0lSRUxFU1Mg UENNQ0lBIENBUkQgRFJJVkVSCi1MOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKLVM6 CU9ycGhhbgotRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvbGVnYWN5L3dsMzUwMSoKLQogV01JIEJJ TkFSWSBNT0YgRFJJVkVSCiBNOglBcm1pbiBXb2xmIDxXX0FybWluQGdteC5kZT4KIFI6CVRob21h cyBXZWnDn3NjaHVoIDxsaW51eEB3ZWlzc3NjaHVoLm5ldD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L3dpcmVsZXNzL2xlZ2FjeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGVnYWN5 L0tjb25maWcKaW5kZXggMWQ3N2Q1M2Q2NDQwOS4uYjRlMGU1MTZmMmZhYSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9uZXQvd2lyZWxlc3MvbGVnYWN5L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2ly ZWxlc3MvbGVnYWN5L0tjb25maWcKQEAgLTEsMTMgKzEsMyBAQAotY29uZmlnIFBDTUNJQV9XTDM1 MDEKLQl0cmlzdGF0ZSAiUGxhbmV0IFdMMzUwMSBQQ01DSUEgY2FyZHMiCi0JZGVwZW5kcyBvbiBD Rkc4MDIxMSAmJiBQQ01DSUEKLQlzZWxlY3QgV0lSRUxFU1NfRVhUCi0Jc2VsZWN0IFdFWFRfU1BZ Ci0JaGVscAotCSAgQSBkcml2ZXIgZm9yIFdMMzUwMSBQQ01DSUEgODAyLjExIHdpcmVsZXNzIGNh cmRzIG1hZGUgYnkgUGxhbmV0LgotCSAgSXQgaGFzIGJhc2ljIHN1cHBvcnQgZm9yIExpbnV4IHdp cmVsZXNzIGV4dGVuc2lvbnMgYW5kIGluaXRpYWwKLQkgIG1pY3JvIHN1cHBvcnQgZm9yIGV0aHRv b2wuCi0KIGNvbmZpZyBVU0JfTkVUX1JORElTX1dMQU4KIAl0cmlzdGF0ZSAiV2lyZWxlc3MgUk5E SVMgVVNCIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL2xlZ2FjeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xlZ2FjeS9N YWtlZmlsZQppbmRleCBkODcwNWNjYzVjZjVkLi4xZWQ4M2YzM2FkMjBlIDEwMDY0NAotLS0gYS9k cml2ZXJzL25ldC93aXJlbGVzcy9sZWdhY3kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2ly ZWxlc3MvbGVnYWN5L01ha2VmaWxlCkBAIC0xLDUgKzEsMiBAQAotIyAxNi1iaXQgd2lyZWxlc3Mg UENNQ0lBIGNsaWVudCBkcml2ZXJzCi1vYmotJChDT05GSUdfUENNQ0lBX1dMMzUwMSkJKz0gd2wz NTAxX2NzLm8KLQogb2JqLSQoQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTikJKz0gcm5kaXNfd2xh bi5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xlZ2FjeS93bDM1MDEuaCBi L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xlZ2FjeS93bDM1MDEuaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggOTFmMjc2ZGQyMmExYi4uMDAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL25l dC93aXJlbGVzcy9sZWdhY3kvd2wzNTAxLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MTUgKzAsMCBA QAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLSNpZm5kZWYgX19XTDM1 MDFfSF9fCi0jZGVmaW5lIF9fV0wzNTAxX0hfXwotCi0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2su aD4KLSNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KLQotLyogZGVmaW5lIGZvciBXTEEgMi4w ICovCi0jZGVmaW5lIFdMMzUwMV9CTEtTWiAyNTYKLS8qCi0gKiBJRCBmb3IgaW5wdXQgU2lnbmFs cyBvZiBEUklWRVIgYmxvY2sKLSAqIGJpdFs3LTVdIGlzIGJsb2NrIElEOiAwMDAKLSAqIGJpdFs0 LTBdIGlzIHNpZ25hbCBJRAotKi8KLWVudW0gd2wzNTAxX3NpZ25hbHMgewotCVdMMzUwMV9TSUdf QUxBUk0sCi0JV0wzNTAxX1NJR19NRF9DT05GSVJNLAotCVdMMzUwMV9TSUdfTURfSU5ELAotCVdM MzUwMV9TSUdfQVNTT0NfQ09ORklSTSwKLQlXTDM1MDFfU0lHX0FTU09DX0lORCwKLQlXTDM1MDFf U0lHX0FVVEhfQ09ORklSTSwKLQlXTDM1MDFfU0lHX0FVVEhfSU5ELAotCVdMMzUwMV9TSUdfREVB VVRIX0NPTkZJUk0sCi0JV0wzNTAxX1NJR19ERUFVVEhfSU5ELAotCVdMMzUwMV9TSUdfRElTQVNT T0NfQ09ORklSTSwKLQlXTDM1MDFfU0lHX0RJU0FTU09DX0lORCwKLQlXTDM1MDFfU0lHX0dFVF9D T05GSVJNLAotCVdMMzUwMV9TSUdfSk9JTl9DT05GSVJNLAotCVdMMzUwMV9TSUdfUFdSX01HTVRf Q09ORklSTSwKLQlXTDM1MDFfU0lHX1JFQVNTT0NfQ09ORklSTSwKLQlXTDM1MDFfU0lHX1JFQVNT T0NfSU5ELAotCVdMMzUwMV9TSUdfU0NBTl9DT05GSVJNLAotCVdMMzUwMV9TSUdfU0VUX0NPTkZJ Uk0sCi0JV0wzNTAxX1NJR19TVEFSVF9DT05GSVJNLAotCVdMMzUwMV9TSUdfUkVTWU5DX0NPTkZJ Uk0sCi0JV0wzNTAxX1NJR19TSVRFX0NPTkZJUk0sCi0JV0wzNTAxX1NJR19TQVZFX0NPTkZJUk0s Ci0JV0wzNTAxX1NJR19SRlRFU1RfQ09ORklSTSwKLS8qCi0gKiBJRCBmb3IgaW5wdXQgU2lnbmFs cyBvZiBNTE1FIGJsb2NrCi0gKiBiaXRbNy01XSBpcyBibG9jayBJRDogMDEwCi0gKiBiaXRbNC0w XSBpcyBzaWduYWwgSUQKLSAqLwotCVdMMzUwMV9TSUdfQVNTT0NfUkVRID0gMHgyMCwKLQlXTDM1 MDFfU0lHX0FVVEhfUkVRLAotCVdMMzUwMV9TSUdfREVBVVRIX1JFUSwKLQlXTDM1MDFfU0lHX0RJ U0FTU09DX1JFUSwKLQlXTDM1MDFfU0lHX0dFVF9SRVEsCi0JV0wzNTAxX1NJR19KT0lOX1JFUSwK LQlXTDM1MDFfU0lHX1BXUl9NR01UX1JFUSwKLQlXTDM1MDFfU0lHX1JFQVNTT0NfUkVRLAotCVdM MzUwMV9TSUdfU0NBTl9SRVEsCi0JV0wzNTAxX1NJR19TRVRfUkVRLAotCVdMMzUwMV9TSUdfU1RB UlRfUkVRLAotCVdMMzUwMV9TSUdfTURfUkVRLAotCVdMMzUwMV9TSUdfUkVTWU5DX1JFUSwKLQlX TDM1MDFfU0lHX1NJVEVfUkVRLAotCVdMMzUwMV9TSUdfU0FWRV9SRVEsCi0JV0wzNTAxX1NJR19S Rl9URVNUX1JFUSwKLQlXTDM1MDFfU0lHX01NX0NPTkZJUk0gPSAweDYwLAotCVdMMzUwMV9TSUdf TU1fSU5ELAotfTsKLQotZW51bSB3bDM1MDFfbWliX2F0dHJpYnMgewotCVdMMzUwMV9NSUJfQVRU Ul9TVEFUSU9OX0lELAotCVdMMzUwMV9NSUJfQVRUUl9BVVRIX0FMR09SSVRITVMsCi0JV0wzNTAx X01JQl9BVFRSX0FVVEhfVFlQRSwKLQlXTDM1MDFfTUlCX0FUVFJfTUVESVVNX09DQ1VQQU5DWV9M SU1JVCwKLQlXTDM1MDFfTUlCX0FUVFJfQ0ZfUE9MTEFCTEUsCi0JV0wzNTAxX01JQl9BVFRSX0NG UF9QRVJJT0QsCi0JV0wzNTAxX01JQl9BVFRSX0NGUE1BWF9EVVJBVElPTiwKLQlXTDM1MDFfTUlC X0FUVFJfQVVUSF9SRVNQX1RNT1VULAotCVdMMzUwMV9NSUJfQVRUUl9SWF9EVElNUywKLQlXTDM1 MDFfTUlCX0FUVFJfUFJJVl9PUFRfSU1QTEVNRU5URUQsCi0JV0wzNTAxX01JQl9BVFRSX1BSSVZf SU5WT0tFRCwKLQlXTDM1MDFfTUlCX0FUVFJfV0VQX0RFRkFVTFRfS0VZUywKLQlXTDM1MDFfTUlC X0FUVFJfV0VQX0RFRkFVTFRfS0VZX0lELAotCVdMMzUwMV9NSUJfQVRUUl9XRVBfS0VZX01BUFBJ TkdTLAotCVdMMzUwMV9NSUJfQVRUUl9XRVBfS0VZX01BUFBJTkdTX0xFTiwKLQlXTDM1MDFfTUlC X0FUVFJfRVhDTFVERV9VTkVOQ1JZUFRFRCwKLQlXTDM1MDFfTUlCX0FUVFJfV0VQX0lDVl9FUlJP Ul9DT1VOVCwKLQlXTDM1MDFfTUlCX0FUVFJfV0VQX1VOREVDUllQVEFCTEVfQ09VTlQsCi0JV0wz NTAxX01JQl9BVFRSX1dFUF9FWENMVURFRF9DT1VOVCwKLQlXTDM1MDFfTUlCX0FUVFJfTUFDX0FE RFIsCi0JV0wzNTAxX01JQl9BVFRSX0dST1VQX0FERFJTLAotCVdMMzUwMV9NSUJfQVRUUl9SVFNf VEhSRVNIT0xELAotCVdMMzUwMV9NSUJfQVRUUl9TSE9SVF9SRVRSWV9MSU1JVCwKLQlXTDM1MDFf TUlCX0FUVFJfTE9OR19SRVRSWV9MSU1JVCwKLQlXTDM1MDFfTUlCX0FUVFJfRlJBR19USFJFU0hP TEQsCi0JV0wzNTAxX01JQl9BVFRSX01BWF9UWF9NU0RVX0xJRkVUSU1FLAotCVdMMzUwMV9NSUJf QVRUUl9NQVhfUlhfTElGRVRJTUUsCi0JV0wzNTAxX01JQl9BVFRSX01BTlVGQUNUVVJFUl9JRCwK LQlXTDM1MDFfTUlCX0FUVFJfUFJPRFVDVF9JRCwKLQlXTDM1MDFfTUlCX0FUVFJfVFhfRlJBR19D T1VOVCwKLQlXTDM1MDFfTUlCX0FUVFJfTVVMVElDQVNUX1RYX0ZSQU1FX0NPVU5ULAotCVdMMzUw MV9NSUJfQVRUUl9GQUlMRURfQ09VTlQsCi0JV0wzNTAxX01JQl9BVFRSX1JYX0ZSQUdfQ09VTlQs Ci0JV0wzNTAxX01JQl9BVFRSX01VTFRJQ0FTVF9SWF9DT1VOVCwKLQlXTDM1MDFfTUlCX0FUVFJf RkNTX0VSUk9SX0NPVU5ULAotCVdMMzUwMV9NSUJfQVRUUl9SRVRSWV9DT1VOVCwKLQlXTDM1MDFf TUlCX0FUVFJfTVVMVElQTEVfUkVUUllfQ09VTlQsCi0JV0wzNTAxX01JQl9BVFRSX1JUU19TVUND RVNTX0NPVU5ULAotCVdMMzUwMV9NSUJfQVRUUl9SVFNfRkFJTFVSRV9DT1VOVCwKLQlXTDM1MDFf TUlCX0FUVFJfQUNLX0ZBSUxVUkVfQ09VTlQsCi0JV0wzNTAxX01JQl9BVFRSX0ZSQU1FX0RVUExJ Q0FURV9DT1VOVCwKLQlXTDM1MDFfTUlCX0FUVFJfUEhZX1RZUEUsCi0JV0wzNTAxX01JQl9BVFRS X1JFR19ET01BSU5TX1NVUFBPUlQsCi0JV0wzNTAxX01JQl9BVFRSX0NVUlJFTlRfUkVHX0RPTUFJ TiwKLQlXTDM1MDFfTUlCX0FUVFJfU0xPVF9USU1FLAotCVdMMzUwMV9NSUJfQVRUUl9DQ0FfVElN RSwKLQlXTDM1MDFfTUlCX0FUVFJfUlhfVFhfVFVSTkFST1VORF9USU1FLAotCVdMMzUwMV9NSUJf QVRUUl9UWF9QTENQX0RFTEFZLAotCVdMMzUwMV9NSUJfQVRUUl9SWF9UWF9TV0lUQ0hfVElNRSwK LQlXTDM1MDFfTUlCX0FUVFJfVFhfUkFNUF9PTl9USU1FLAotCVdMMzUwMV9NSUJfQVRUUl9UWF9S Rl9ERUxBWSwKLQlXTDM1MDFfTUlCX0FUVFJfU0lGU19USU1FLAotCVdMMzUwMV9NSUJfQVRUUl9S WF9SRl9ERUxBWSwKLQlXTDM1MDFfTUlCX0FUVFJfUlhfUExDUF9ERUxBWSwKLQlXTDM1MDFfTUlC X0FUVFJfTUFDX1BST0NFU1NJTkdfREVMQVksCi0JV0wzNTAxX01JQl9BVFRSX1RYX1JBTVBfT0ZG X1RJTUUsCi0JV0wzNTAxX01JQl9BVFRSX1BSRUFNQkxFX0xFTiwKLQlXTDM1MDFfTUlCX0FUVFJf UExDUF9IRUFERVJfTEVOLAotCVdMMzUwMV9NSUJfQVRUUl9NUERVX0RVUkFUSU9OX0ZBQ1RPUiwK LQlXTDM1MDFfTUlCX0FUVFJfQUlSX1BST1BBR0FUSU9OX1RJTUUsCi0JV0wzNTAxX01JQl9BVFRS X1RFTVBfVFlQRSwKLQlXTDM1MDFfTUlCX0FUVFJfQ1dfTUlOLAotCVdMMzUwMV9NSUJfQVRUUl9D V19NQVgsCi0JV0wzNTAxX01JQl9BVFRSX1NVUFBPUlRfREFUQV9SQVRFU19UWCwKLQlXTDM1MDFf TUlCX0FUVFJfU1VQUE9SVF9EQVRBX1JBVEVTX1JYLAotCVdMMzUwMV9NSUJfQVRUUl9NUERVX01B WF9MRU4sCi0JV0wzNTAxX01JQl9BVFRSX1NVUFBPUlRfVFhfQU5URU5OQVMsCi0JV0wzNTAxX01J Ql9BVFRSX0NVUlJFTlRfVFhfQU5URU5OQSwKLQlXTDM1MDFfTUlCX0FUVFJfU1VQUE9SVF9SWF9B TlRFTk5BUywKLQlXTDM1MDFfTUlCX0FUVFJfRElWRVJTSVRZX1NVUFBPUlQsCi0JV0wzNTAxX01J Ql9BVFRSX0RJVkVSU0lUWV9TRUxFQ1RJT05fUlMsCi0JV0wzNTAxX01JQl9BVFRSX05SX1NVUFBP UlRFRF9QV1JfTEVWRUxTLAotCVdMMzUwMV9NSUJfQVRUUl9UWF9QV1JfTEVWRUwxLAotCVdMMzUw MV9NSUJfQVRUUl9UWF9QV1JfTEVWRUwyLAotCVdMMzUwMV9NSUJfQVRUUl9UWF9QV1JfTEVWRUwz LAotCVdMMzUwMV9NSUJfQVRUUl9UWF9QV1JfTEVWRUw0LAotCVdMMzUwMV9NSUJfQVRUUl9UWF9Q V1JfTEVWRUw1LAotCVdMMzUwMV9NSUJfQVRUUl9UWF9QV1JfTEVWRUw2LAotCVdMMzUwMV9NSUJf QVRUUl9UWF9QV1JfTEVWRUw3LAotCVdMMzUwMV9NSUJfQVRUUl9UWF9QV1JfTEVWRUw4LAotCVdM MzUwMV9NSUJfQVRUUl9DVVJSRU5UX1RYX1BXUl9MRVZFTCwKLQlXTDM1MDFfTUlCX0FUVFJfQ1VS UkVOVF9DSEFOLAotCVdMMzUwMV9NSUJfQVRUUl9DQ0FfTU9ERV9TVVBQT1JURUQsCi0JV0wzNTAx X01JQl9BVFRSX0NVUlJFTlRfQ0NBX01PREUsCi0JV0wzNTAxX01JQl9BVFRSX0VEX1RIUkVTSE9M RCwKLQlXTDM1MDFfTUlCX0FUVFJfU0lOVEhFU0laRVJfTE9DS0VELAotCVdMMzUwMV9NSUJfQVRU Ul9DVVJSRU5UX1BXUl9TVEFURSwKLQlXTDM1MDFfTUlCX0FUVFJfRE9aRV9UVVJOT05fVElNRSwK LQlXTDM1MDFfTUlCX0FUVFJfUkNSMzMsCi0JV0wzNTAxX01JQl9BVFRSX0RFRkFVTFRfQ0hBTiwK LQlXTDM1MDFfTUlCX0FUVFJfU1NJRCwKLQlXTDM1MDFfTUlCX0FUVFJfUFdSX01HTVRfRU5BQkxF LAotCVdMMzUwMV9NSUJfQVRUUl9ORVRfQ0FQQUJJTElUWSwKLQlXTDM1MDFfTUlCX0FUVFJfUk9V VElORywKLX07Ci0KLWVudW0gd2wzNTAxX25ldF90eXBlIHsKLQlXTDM1MDFfTkVUX1RZUEVfSU5G UkEsCi0JV0wzNTAxX05FVF9UWVBFX0FESE9DLAotCVdMMzUwMV9ORVRfVFlQRV9BTllfQlNTLAot fTsKLQotZW51bSB3bDM1MDFfc2Nhbl90eXBlIHsKLQlXTDM1MDFfU0NBTl9UWVBFX0FDVElWRSwK LQlXTDM1MDFfU0NBTl9UWVBFX1BBU1NJVkUsCi19OwotCi1lbnVtIHdsMzUwMV90eF9yZXN1bHQg ewotCVdMMzUwMV9UWF9SRVNVTFRfU1VDQ0VTUywKLQlXTDM1MDFfVFhfUkVTVUxUX05PX0JTUywK LQlXTDM1MDFfVFhfUkVTVUxUX1JFVFJZX0xJTUlULAotfTsKLQotZW51bSB3bDM1MDFfc3lzX3R5 cGUgewotCVdMMzUwMV9TWVNfVFlQRV9PUEVOLAotCVdMMzUwMV9TWVNfVFlQRV9TSEFSRV9LRVks Ci19OwotCi1lbnVtIHdsMzUwMV9zdGF0dXMgewotCVdMMzUwMV9TVEFUVVNfU1VDQ0VTUywKLQlX TDM1MDFfU1RBVFVTX0lOVkFMSUQsCi0JV0wzNTAxX1NUQVRVU19USU1FT1VULAotCVdMMzUwMV9T VEFUVVNfUkVGVVNFRCwKLQlXTDM1MDFfU1RBVFVTX01BTllfUkVRLAotCVdMMzUwMV9TVEFUVVNf QUxSRUFEWV9CU1MsCi19OwotCi0jZGVmaW5lIFdMMzUwMV9NR01UX0NBUEFCSUxJVFlfRVNTCQkw eDAwMDEgIC8qIHNlZSA4MDIuMTEgcC41OCAqLwotI2RlZmluZSBXTDM1MDFfTUdNVF9DQVBBQklM SVRZX0lCU1MJCTB4MDAwMiAgLyogICAgICAtICIgLQkgICAqLwotI2RlZmluZSBXTDM1MDFfTUdN VF9DQVBBQklMSVRZX0NGX1BPTExBQkxFCTB4MDAwNCAgLyogICAgICAtICIgLQkgICAqLwotI2Rl ZmluZSBXTDM1MDFfTUdNVF9DQVBBQklMSVRZX0NGX1BPTExfUkVRVUVTVAkweDAwMDggIC8qICAg ICAgLSAiIC0JICAgKi8KLSNkZWZpbmUgV0wzNTAxX01HTVRfQ0FQQUJJTElUWV9QUklWQUNZCQkw eDAwMTAgIC8qICAgICAgLSAiIC0JICAgKi8KLQotI2RlZmluZSBJV19SRUdfRE9NQUlOX0ZDQwkw eDEwCS8qIENoYW5uZWwgMSB0byAxMQlVU0EgICAgKi8KLSNkZWZpbmUgSVdfUkVHX0RPTUFJTl9E T0MJMHgyMAkvKiBDaGFubmVsIDEgdG8gMTEJQ2FuYWRhICovCi0jZGVmaW5lIElXX1JFR19ET01B SU5fRVRTSQkweDMwCS8qIENoYW5uZWwgMSB0byAxMwlFdXJvcGUgKi8KLSNkZWZpbmUgSVdfUkVH X0RPTUFJTl9TUEFJTgkweDMxCS8qIENoYW5uZWwgMTAgdG8gMTEJU3BhaW4gICovCi0jZGVmaW5l IElXX1JFR19ET01BSU5fRlJBTkNFCTB4MzIJLyogQ2hhbm5lbCAxMCB0byAxMwlGcmFuY2UgKi8K LSNkZWZpbmUgSVdfUkVHX0RPTUFJTl9NS0sJMHg0MAkvKiBDaGFubmVsIDE0CQlKYXBhbiAgKi8K LSNkZWZpbmUgSVdfUkVHX0RPTUFJTl9NS0sxCTB4NDEJLyogQ2hhbm5lbCAxLTE0CQlKYXBhbiAg Ki8KLSNkZWZpbmUgSVdfUkVHX0RPTUFJTl9JU1JBRUwJMHg1MAkvKiBDaGFubmVsIDMgLSA5CUlz cmFlbCAqLwotCi0jZGVmaW5lIElXX01HTVRfUkFURV9MQUJFTF9NQU5EQVRPUlkgMTI4IC8qIE1T QiAqLwotCi1lbnVtIGl3X21nbXRfcmF0ZV9sYWJlbHMgewotCUlXX01HTVRfUkFURV9MQUJFTF8x TUJJVCAgID0gMiwKLQlJV19NR01UX1JBVEVfTEFCRUxfMk1CSVQgICA9IDQsCi0JSVdfTUdNVF9S QVRFX0xBQkVMXzVfNU1CSVQgPSAxMSwKLQlJV19NR01UX1JBVEVfTEFCRUxfMTFNQklUICA9IDIy LAotfTsKLQotZW51bSBpd19tZ210X2luZm9fZWxlbWVudF9pZHMgewotCUlXX01HTVRfSU5GT19F TEVNRU5UX1NTSUQsCQkgIC8qIFNlcnZpY2UgU2V0IElkZW50aXR5ICovCi0JSVdfTUdNVF9JTkZP X0VMRU1FTlRfU1VQUE9SVEVEX1JBVEVTLAotCUlXX01HTVRfSU5GT19FTEVNRU5UX0ZIX1BBUkFN RVRFUl9TRVQsCi0JSVdfTUdNVF9JTkZPX0VMRU1FTlRfRFNfUEFSQU1FVEVSX1NFVCwKLQlJV19N R01UX0lORk9fRUxFTUVOVF9DU19QQVJBTUVURVJfU0VULAotCUlXX01HTVRfSU5GT19FTEVNRU5U X0NTX1RJTSwJCSAgLyogVHJhZmZpYyBJbmZvcm1hdGlvbiBNYXAgKi8KLQlJV19NR01UX0lORk9f RUxFTUVOVF9JQlNTX1BBUkFNRVRFUl9TRVQsCi0JLyogNy0xNTogUmVzZXJ2ZWQsIHVudXNlZCAq LwotCUlXX01HTVRfSU5GT19FTEVNRU5UX0NIQUxMRU5HRV9URVhUID0gMTYsCi0JLyogMTctMzEg UmVzZXJ2ZWQgZm9yIGNoYWxsZW5nZSB0ZXh0IGV4dGVuc2lvbiAqLwotCS8qIDMyLTI1NSBSZXNl cnZlZCwgdW51c2VkICovCi19OwotCi1zdHJ1Y3QgaXdfbWdtdF9pbmZvX2VsZW1lbnQgewotCXU4 IGlkOyAvKiBvbmUgb2YgZW51bSBpd19tZ210X2luZm9fZWxlbWVudF9pZHMsCi0JCSAgYnV0IHNp emVvZihlbnVtKSA+IHNpemVvZih1OCkgOi0oICovCi0JdTggbGVuOwotCXU4IGRhdGFbXTsKLX0g X19wYWNrZWQ7Ci0KLXN0cnVjdCBpd19tZ210X2Vzc2lkX3BzZXQgewotCXN0cnVjdCBpd19tZ210 X2luZm9fZWxlbWVudCBlbDsKLQl1OCAJCQkgICAgZXNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOwot fSBfX3BhY2tlZDsKLQotLyoKLSAqIEFjY29yZGluZyB0byA4MDIuMTEgV2lyZWxlc3MgTmV0d29y a3MsIHRoZSBkZWZpbml0aXZlIGd1aWRlIC0gTydSZWlsbHkKLSAqIFBnIDc1Ci0gKi8gCi0jZGVm aW5lIElXX0RBVEFfUkFURV9NQVhfTEFCRUxTIDgKLQotc3RydWN0IGl3X21nbXRfZGF0YV9yc2V0 IHsKLQlzdHJ1Y3QgaXdfbWdtdF9pbmZvX2VsZW1lbnQgZWw7Ci0JdTggCQkJICAgIGRhdGFfcmF0 ZV9sYWJlbHNbSVdfREFUQV9SQVRFX01BWF9MQUJFTFNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0 IGl3X21nbXRfZHNfcHNldCB7Ci0Jc3RydWN0IGl3X21nbXRfaW5mb19lbGVtZW50IGVsOwotCXU4 IAkJCSAgICBjaGFuOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGl3X21nbXRfY2ZfcHNldCB7Ci0J c3RydWN0IGl3X21nbXRfaW5mb19lbGVtZW50IGVsOwotCXU4IAkJCSAgICBjZnBfY291bnQ7Ci0J dTggCQkJICAgIGNmcF9wZXJpb2Q7Ci0JdTE2IAkJCSAgICBjZnBfbWF4X2R1cmF0aW9uOwotCXUx NiAJCQkgICAgY2ZwX2R1cl9yZW1haW5pbmc7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdfbWdt dF9pYnNzX3BzZXQgewotCXN0cnVjdCBpd19tZ210X2luZm9fZWxlbWVudCBlbDsKLQl1MTYgCQkJ ICAgIGF0aW1fd2luZG93OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IHdsMzUwMV90eF9oZHIgewot CXUxNgl0eF9jbnQ7Ci0JdTgJc3luY1sxNl07Ci0JdTE2CXNmZDsKLQl1OAlzaWduYWw7Ci0JdTgJ c2VydmljZTsKLQl1MTYJbGVuOwotCXUxNgljcmMxNjsKLQl1MTYJZnJhbWVfY3RybDsKLQl1MTYJ ZHVyYXRpb25faWQ7Ci0JdTgJYWRkcjFbRVRIX0FMRU5dOwotCXU4CWFkZHIyW0VUSF9BTEVOXTsK LQl1OAlhZGRyM1tFVEhfQUxFTl07Ci0JdTE2CXNlcV9jdHJsOwotCXU4CWFkZHI0W0VUSF9BTEVO XTsKLX07Ci0KLXN0cnVjdCB3bDM1MDFfcnhfaGRyIHsKLQl1MTYJcnhfbmV4dF9ibGs7Ci0JdTE2 CXJjX25leHRfZnJhbWVfYmxrOwotCXU4CXJ4X2Jsa19jdHJsOwotCXU4CXJ4X25leHRfZnJhbWU7 Ci0JdTgJcnhfbmV4dF9mcmFtZTE7Ci0JdTgJcnNzaTsKLQljaGFyCXRpbWVbOF07Ci0JdTgJc2ln bmFsOwotCXU4CXNlcnZpY2U7Ci0JdTE2CWxlbjsKLQl1MTYJY3JjMTY7Ci0JdTE2CWZyYW1lX2N0 cmw7Ci0JdTE2CWR1cmF0aW9uOwotCXU4CWFkZHIxW0VUSF9BTEVOXTsKLQl1OAlhZGRyMltFVEhf QUxFTl07Ci0JdTgJYWRkcjNbRVRIX0FMRU5dOwotCXUxNglzZXE7Ci0JdTgJYWRkcjRbRVRIX0FM RU5dOwotfTsKLQotc3RydWN0IHdsMzUwMV9zdGFydF9yZXEgewotCXUxNgkJCSAgICBuZXh0X2Js azsKLQl1OAkJCSAgICBzaWdfaWQ7Ci0JdTgJCQkgICAgYnNzX3R5cGU7Ci0JdTE2CQkJICAgIGJl YWNvbl9wZXJpb2Q7Ci0JdTE2CQkJICAgIGR0aW1fcGVyaW9kOwotCXUxNgkJCSAgICBwcm9iZV9k ZWxheTsKLQl1MTYJCQkgICAgY2FwX2luZm87Ci0Jc3RydWN0IGl3X21nbXRfZXNzaWRfcHNldCAg IHNzaWQ7Ci0Jc3RydWN0IGl3X21nbXRfZGF0YV9yc2V0ICAgIGJzc19iYXNpY19yc2V0OwotCXN0 cnVjdCBpd19tZ210X2RhdGFfcnNldCAgICBvcGVyYXRpb25hbF9yc2V0OwotCXN0cnVjdCBpd19t Z210X2NmX3BzZXQJICAgIGNmX3BzZXQ7Ci0Jc3RydWN0IGl3X21nbXRfZHNfcHNldAkgICAgZHNf cHNldDsKLQlzdHJ1Y3QgaXdfbWdtdF9pYnNzX3BzZXQgICAgaWJzc19wc2V0OwotfTsKLQotc3Ry dWN0IHdsMzUwMV9hc3NvY19yZXEgewotCXUxNgluZXh0X2JsazsKLQl1OAlzaWdfaWQ7Ci0JdTgJ cmVzZXJ2ZWQ7Ci0JdTE2CXRpbWVvdXQ7Ci0JdTE2CWNhcF9pbmZvOwotCXUxNglsaXN0ZW5faW50 ZXJ2YWw7Ci0JdTgJbWFjX2FkZHJbRVRIX0FMRU5dOwotfTsKLQotc3RydWN0IHdsMzUwMV9hc3Nv Y19jb25maXJtIHsKLQl1MTYJbmV4dF9ibGs7Ci0JdTgJc2lnX2lkOwotCXU4CXJlc2VydmVkOwot CXUxNglzdGF0dXM7Ci19OwotCi1zdHJ1Y3Qgd2wzNTAxX2Fzc29jX2luZCB7Ci0JdTE2CW5leHRf YmxrOwotCXU4CXNpZ19pZDsKLQl1OAltYWNfYWRkcltFVEhfQUxFTl07Ci19OwotCi1zdHJ1Y3Qg d2wzNTAxX2F1dGhfcmVxIHsKLQl1MTYJbmV4dF9ibGs7Ci0JdTgJc2lnX2lkOwotCXU4CXJlc2Vy dmVkOwotCXUxNgl0eXBlOwotCXUxNgl0aW1lb3V0OwotCXU4CW1hY19hZGRyW0VUSF9BTEVOXTsK LX07Ci0KLXN0cnVjdCB3bDM1MDFfYXV0aF9jb25maXJtIHsKLQl1MTYJbmV4dF9ibGs7Ci0JdTgJ c2lnX2lkOwotCXU4CXJlc2VydmVkOwotCXUxNgl0eXBlOwotCXUxNglzdGF0dXM7Ci0JdTgJbWFj X2FkZHJbRVRIX0FMRU5dOwotfTsKLQotc3RydWN0IHdsMzUwMV9nZXRfcmVxIHsKLQl1MTYJbmV4 dF9ibGs7Ci0JdTgJc2lnX2lkOwotCXU4CXJlc2VydmVkOwotCXUxNgltaWJfYXR0cmliOwotfTsK LQotc3RydWN0IHdsMzUwMV9nZXRfY29uZmlybSB7Ci0JdTE2CW5leHRfYmxrOwotCXU4CXNpZ19p ZDsKLQl1OAlyZXNlcnZlZDsKLQl1MTYJbWliX3N0YXR1czsKLQl1MTYJbWliX2F0dHJpYjsKLQl1 OAltaWJfdmFsdWVbMTAwXTsKLX07Ci0KLXN0cnVjdCB3bDM1MDFfcmVxIHsKLQl1MTYJCQkgICAg YmVhY29uX3BlcmlvZDsKLQl1MTYJCQkgICAgZHRpbV9wZXJpb2Q7Ci0JdTE2CQkJICAgIGNhcF9p bmZvOwotCXU4CQkJICAgIGJzc190eXBlOwotCXU4CQkJICAgIGJzc2lkW0VUSF9BTEVOXTsKLQlz dHJ1Y3QgaXdfbWdtdF9lc3NpZF9wc2V0ICAgc3NpZDsKLQlzdHJ1Y3QgaXdfbWdtdF9kc19wc2V0 CSAgICBkc19wc2V0OwotCXN0cnVjdCBpd19tZ210X2NmX3BzZXQJICAgIGNmX3BzZXQ7Ci0Jc3Ry dWN0IGl3X21nbXRfaWJzc19wc2V0ICAgIGlic3NfcHNldDsKLQlzdHJ1Y3QgaXdfbWdtdF9kYXRh X3JzZXQgICAgYnNzX2Jhc2ljX3JzZXQ7Ci19OwotCi1zdHJ1Y3Qgd2wzNTAxX2pvaW5fcmVxIHsK LQl1MTYJCQkgICAgbmV4dF9ibGs7Ci0JdTgJCQkgICAgc2lnX2lkOwotCXU4CQkJICAgIHJlc2Vy dmVkOwotCXN0cnVjdCBpd19tZ210X2RhdGFfcnNldCAgICBvcGVyYXRpb25hbF9yc2V0OwotCXUx NgkJCSAgICByZXNlcnZlZDI7Ci0JdTE2CQkJICAgIHRpbWVvdXQ7Ci0JdTE2CQkJICAgIHByb2Jl X2RlbGF5OwotCXU4CQkJICAgIHRpbWVzdGFtcFs4XTsKLQl1OAkJCSAgICBsb2NhbF90aW1lWzhd OwotCXN0cnVjdCB3bDM1MDFfcmVxCSAgICByZXE7Ci19OwotCi1zdHJ1Y3Qgd2wzNTAxX2pvaW5f Y29uZmlybSB7Ci0JdTE2CW5leHRfYmxrOwotCXU4CXNpZ19pZDsKLQl1OAlyZXNlcnZlZDsKLQl1 MTYJc3RhdHVzOwotfTsKLQotc3RydWN0IHdsMzUwMV9wd3JfbWdtdF9yZXEgewotCXUxNgluZXh0 X2JsazsKLQl1OAlzaWdfaWQ7Ci0JdTgJcHdyX3NhdmU7Ci0JdTgJd2FrZV91cDsKLQl1OAlyZWNl aXZlX2R0aW1zOwotfTsKLQotc3RydWN0IHdsMzUwMV9wd3JfbWdtdF9jb25maXJtIHsKLQl1MTYJ bmV4dF9ibGs7Ci0JdTgJc2lnX2lkOwotCXU4CXJlc2VydmVkOwotCXUxNglzdGF0dXM7Ci19Owot Ci1zdHJ1Y3Qgd2wzNTAxX3NjYW5fcmVxIHsKLQl1MTYJCQkgICAgbmV4dF9ibGs7Ci0JdTgJCQkg ICAgc2lnX2lkOwotCXU4CQkJICAgIGJzc190eXBlOwotCXUxNgkJCSAgICBwcm9iZV9kZWxheTsK LQl1MTYJCQkgICAgbWluX2NoYW5fdGltZTsKLQl1MTYJCQkgICAgbWF4X2NoYW5fdGltZTsKLQl1 OAkJCSAgICBjaGFuX2xpc3RbMTRdOwotCXU4CQkJICAgIGJzc2lkW0VUSF9BTEVOXTsKLQlzdHJ1 Y3QgaXdfbWdtdF9lc3NpZF9wc2V0ICAgc3NpZDsKLQllbnVtIHdsMzUwMV9zY2FuX3R5cGUJICAg IHNjYW5fdHlwZTsKLX07Ci0KLXN0cnVjdCB3bDM1MDFfc2Nhbl9jb25maXJtIHsKLQl1MTYJCQkg ICAgbmV4dF9ibGs7Ci0JdTgJCQkgICAgc2lnX2lkOwotCXU4CQkJICAgIHJlc2VydmVkOwotCXUx NgkJCSAgICBzdGF0dXM7Ci0JY2hhcgkJCSAgICB0aW1lc3RhbXBbOF07Ci0JY2hhcgkJCSAgICBs b2NhbHRpbWVbOF07Ci0Jc3RydWN0IHdsMzUwMV9yZXEJICAgIHJlcTsKLQl1OAkJCSAgICByc3Np OwotfTsKLQotc3RydWN0IHdsMzUwMV9zdGFydF9jb25maXJtIHsKLQl1MTYJbmV4dF9ibGs7Ci0J dTgJc2lnX2lkOwotCXU4CXJlc2VydmVkOwotCXUxNglzdGF0dXM7Ci19OwotCi1zdHJ1Y3Qgd2wz NTAxX21kX3JlcSB7Ci0JdTE2CW5leHRfYmxrOwotCXU4CXNpZ19pZDsKLQl1OAlyb3V0aW5nOwot CXUxNglkYXRhOwotCXUxNglzaXplOwotCXU4CXByaTsKLQl1OAlzZXJ2aWNlX2NsYXNzOwotCXN0 cnVjdCB7Ci0JCXU4CWRhZGRyW0VUSF9BTEVOXTsKLQkJdTgJc2FkZHJbRVRIX0FMRU5dOwotCX0g YWRkcjsKLX07Ci0KLXN0cnVjdCB3bDM1MDFfbWRfaW5kIHsKLQl1MTYJbmV4dF9ibGs7Ci0JdTgJ c2lnX2lkOwotCXU4CXJvdXRpbmc7Ci0JdTE2CWRhdGE7Ci0JdTE2CXNpemU7Ci0JdTgJcmVjZXB0 aW9uOwotCXU4CXByaTsKLQl1OAlzZXJ2aWNlX2NsYXNzOwotCXN0cnVjdCB7Ci0JCXU4CWRhZGRy W0VUSF9BTEVOXTsKLQkJdTgJc2FkZHJbRVRIX0FMRU5dOwotCX0gYWRkcjsKLX07Ci0KLXN0cnVj dCB3bDM1MDFfbWRfY29uZmlybSB7Ci0JdTE2CW5leHRfYmxrOwotCXU4CXNpZ19pZDsKLQl1OAly ZXNlcnZlZDsKLQl1MTYJZGF0YTsKLQl1OAlzdGF0dXM7Ci0JdTgJcHJpOwotCXU4CXNlcnZpY2Vf Y2xhc3M7Ci19OwotCi1zdHJ1Y3Qgd2wzNTAxX3Jlc3luY19yZXEgewotCXUxNgluZXh0X2JsazsK LQl1OAlzaWdfaWQ7Ci19OwotCi0vKiBEZWZpbml0aW9ucyBmb3Igc3VwcG9ydGluZyBjbG9uZSBh ZGFwdGVycy4gKi8KLS8qIFN5c3RlbSBJbnRlcmZhY2UgUmVnaXN0ZXJzIChTSVIgc3BhY2UpICov Ci0jZGVmaW5lIFdMMzUwMV9OSUNfR0NSICgodTgpMHgwMCkJLyogU0lSMCAtIEdlbmVyYWwgQ29u ZiBSZWdpc3RlciAqLwotI2RlZmluZSBXTDM1MDFfTklDX0JTUyAoKHU4KTB4MDEpCS8qIFNJUjEg LSBCYW5rIFN3aXRjaGluZyBTZWxlY3QgUmVnICovCi0jZGVmaW5lIFdMMzUwMV9OSUNfTE1BTCAo KHU4KTB4MDIpCS8qIFNJUjIgLSBMb2NhbCBNZW0gYWRkciBSZWcgWzc6MF0gKi8KLSNkZWZpbmUg V0wzNTAxX05JQ19MTUFIICgodTgpMHgwMykJLyogU0lSMyAtIExvY2FsIE1lbSBhZGRyIFJlZyBb MTQ6OF0gKi8KLSNkZWZpbmUgV0wzNTAxX05JQ19JT0RQQSAoKHU4KTB4MDQpCS8qIFNJUjQgLSBJ L08gRGF0YSBQb3J0IEEgKi8KLSNkZWZpbmUgV0wzNTAxX05JQ19JT0RQQiAoKHU4KTB4MDUpCS8q IFNJUjUgLSBJL08gRGF0YSBQb3J0IEIgKi8KLSNkZWZpbmUgV0wzNTAxX05JQ19JT0RQQyAoKHU4 KTB4MDYpCS8qIFNJUjYgLSBJL08gRGF0YSBQb3J0IEMgKi8KLSNkZWZpbmUgV0wzNTAxX05JQ19J T0RQRCAoKHU4KTB4MDcpCS8qIFNJUjcgLSBJL08gRGF0YSBQb3J0IEQgKi8KLQotLyogQml0cyBp biBHQ1IgKi8KLSNkZWZpbmUgV0wzNTAxX0dDUl9TV1JFU0VUICgodTgpMHg4MCkKLSNkZWZpbmUg V0wzNTAxX0dDUl9DT1JFU0VUICgodTgpMHg0MCkKLSNkZWZpbmUgV0wzNTAxX0dDUl9ESVNQV0RO ICgodTgpMHgyMCkKLSNkZWZpbmUgV0wzNTAxX0dDUl9FQ1dBSVQgICgodTgpMHgxMCkKLSNkZWZp bmUgV0wzNTAxX0dDUl9FQ0lOVCAgICgodTgpMHgwOCkKLSNkZWZpbmUgV0wzNTAxX0dDUl9JTlQy RUMgICgodTgpMHgwNCkKLSNkZWZpbmUgV0wzNTAxX0dDUl9FTkVDSU5UICgodTgpMHgwMikKLSNk ZWZpbmUgV0wzNTAxX0dDUl9EQU0gICAgICgodTgpMHgwMSkKLQotLyogQml0cyBpbiBCU1MgKEJh bmsgU3dpdGNoaW5nIFNlbGVjdCBSZWdpc3RlcikgKi8KLSNkZWZpbmUgV0wzNTAxX0JTU19GUEFH RTAgKCh1OCkweDIwKQkvKiBGbGFzaCBtZW1vcnkgcGFnZTAgKi8KLSNkZWZpbmUgV0wzNTAxX0JT U19GUEFHRTEgKCh1OCkweDI4KQotI2RlZmluZSBXTDM1MDFfQlNTX0ZQQUdFMiAoKHU4KTB4MzAp Ci0jZGVmaW5lIFdMMzUwMV9CU1NfRlBBR0UzICgodTgpMHgzOCkKLSNkZWZpbmUgV0wzNTAxX0JT U19TUEFHRTAgKCh1OCkweDAwKQkvKiBTUkFNIHBhZ2UwICovCi0jZGVmaW5lIFdMMzUwMV9CU1Nf U1BBR0UxICgodTgpMHgwOCkKLSNkZWZpbmUgV0wzNTAxX0JTU19TUEFHRTIgKCh1OCkweDEwKQot I2RlZmluZSBXTDM1MDFfQlNTX1NQQUdFMyAoKHU4KTB4MTgpCi0KLS8qIERlZmluZSBEcml2ZXIg SW50ZXJmYWNlICovCi0vKiBSZWZlciBJRUVFIDgwMi4xMSAqLwotLyogVHggcGFja2V0IGhlYWRl ciwgaW5jbHVkZSBQTENQIGFuZCBNUERVICovCi0vKiBUeCBQTENQIEhlYWRlciAqLwotc3RydWN0 IHdsMzUwMV84MDIxMV90eF9wbGNwX2hkciB7Ci0JdTgJc3luY1sxNl07Ci0JdTE2CXNmZDsKLQl1 OAlzaWduYWw7Ci0JdTgJc2VydmljZTsKLQl1MTYJbGVuOwotCXUxNgljcmMxNjsKLX0gX19wYWNr ZWQ7Ci0KLXN0cnVjdCB3bDM1MDFfODAyMTFfdHhfaGRyIHsKLQlzdHJ1Y3Qgd2wzNTAxXzgwMjEx X3R4X3BsY3BfaGRyCXBjbHBfaGRyOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyCQltYWNfaGRyOwot fSBfX3BhY2tlZCBfX2FsaWduZWQoMik7Ci0KLS8qCi0gICBSZXNlcnZlIHRoZSBiZWdpbm5pbmcg VHggc3BhY2UgZm9yIGRlc2NyaXB0b3IgdXNlLgotCi0gICBUeEJsb2NrT2Zmc2V0IC0tPgkqLS0t LSotLS0tKi0tLS0qLS0tLSogXAotCShUeEZyZWVEZXNjKQl8ICAwIHwgIDEgfCAgMiB8ICAzIHwg IFwKLQkJCXwgIDQgfCAgNSB8ICA2IHwgIDcgfCAgIHwKLQkJCXwgIDggfCAgOSB8IDEwIHwgMTEg fCAgIFRYX0RFU0MgKiAyMAotCQkJfCAxMiB8IDEzIHwgMTQgfCAxNSB8ICAgfAotCQkJfCAxNiB8 IDE3IHwgMTggfCAxOSB8ICAvCi0gICBUeEJ1ZmZlckJlZ2luIC0tPgkqLS0tLSotLS0tKi0tLS0q LS0tLSogLwotICAgKFR4QnVmZmVySGVhZCkJfCAJCSAgICB8Ci0gICAoVHhCdWZmZXJUYWlsKQl8 IAkJICAgIHwKLQkJCXwgICAgU2VuZCBCdWZmZXIgICAgfAotCQkJfCAJCSAgICB8Ci0JCQl8CQkg ICAgfAotCQkJKi0tLS0tLS0tLS0tLS0tLS0tLS0qCi0gICBUeEJ1ZmZlckVuZCAgICAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLwotCi0qLwotCi1zdHJ1Y3Qgd2wzNTAxX2NhcmQgewotCWludAkJ CQliYXNlX2FkZHI7Ci0JdTgJCQkJbWFjX2FkZHJbRVRIX0FMRU5dOwotCXNwaW5sb2NrX3QJCQls b2NrOwotCXdhaXRfcXVldWVfaGVhZF90CQl3YWl0OwotCXN0cnVjdCB3bDM1MDFfZ2V0X2NvbmZp cm0Jc2lnX2dldF9jb25maXJtOwotCXN0cnVjdCB3bDM1MDFfcHdyX21nbXRfY29uZmlybQlzaWdf cHdyX21nbXRfY29uZmlybTsKLQl1MTYJCQkJdHhfYnVmZmVyX3NpemU7Ci0JdTE2CQkJCXR4X2J1 ZmZlcl9oZWFkOwotCXUxNgkJCQl0eF9idWZmZXJfdGFpbDsKLQl1MTYJCQkJdHhfYnVmZmVyX2Nu dDsKLQl1MTYJCQkJZXNicV9yZXFfc3RhcnQ7Ci0JdTE2CQkJCWVzYnFfcmVxX2VuZDsKLQl1MTYJ CQkJZXNicV9yZXFfaGVhZDsKLQl1MTYJCQkJZXNicV9yZXFfdGFpbDsKLQl1MTYJCQkJZXNicV9j b25maXJtX3N0YXJ0OwotCXUxNgkJCQllc2JxX2NvbmZpcm1fZW5kOwotCXUxNgkJCQllc2JxX2Nv bmZpcm07Ci0Jc3RydWN0IGl3X21nbXRfZXNzaWRfcHNldCAgCWVzc2lkOwotCXN0cnVjdCBpd19t Z210X2Vzc2lkX3BzZXQgIAlrZWVwX2Vzc2lkOwotCXU4CQkJCWJzc2lkW0VUSF9BTEVOXTsKLQlp bnQJCQkJbmV0X3R5cGU7Ci0JY2hhcgkJCQluaWNrWzMyXTsKLQljaGFyCQkJCWNhcmRfbmFtZVsz Ml07Ci0JY2hhcgkJCQlmaXJtd2FyZV9kYXRlWzMyXTsKLQl1OAkJCQljaGFuOwotCXU4CQkJCWNh cF9pbmZvOwotCXUxNgkJCQlzdGFydF9zZWc7Ci0JdTE2CQkJCWJzc19jbnQ7Ci0JdTE2CQkJCWpv aW5fc3RhX2JzczsKLQl1OAkJCQlyc3NpOwotCXU4CQkJCWFkaG9jX3RpbWVzOwotCXU4CQkJCXJl Z19kb21haW47Ci0JdTgJCQkJdmVyc2lvblsyXTsKLQlzdHJ1Y3Qgd2wzNTAxX3NjYW5fY29uZmly bQlic3Nfc2V0WzIwXTsKLQotCXN0cnVjdCBpd19zdGF0aXN0aWNzCQl3c3RhdHM7Ci0Jc3RydWN0 IGl3X3NweV9kYXRhCQlzcHlfZGF0YTsKLQlzdHJ1Y3QgaXdfcHVibGljX2RhdGEJCXdpcmVsZXNz X2RhdGE7Ci0Jc3RydWN0IHBjbWNpYV9kZXZpY2UJCSpwX2RldjsKLX07Ci0jZW5kaWYKZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xlZ2FjeS93bDM1MDFfY3MuYyBiL2RyaXZlcnMv bmV0L3dpcmVsZXNzL2xlZ2FjeS93bDM1MDFfY3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggYzQ1YzRiN2NiYmFmMS4uMDAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJl bGVzcy9sZWdhY3kvd2wzNTAxX2NzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDM2ICswLDAgQEAK LS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBXTDM1MDEg V2lyZWxlc3MgTEFOIFBDTUNJQSBDYXJkIERyaXZlciBmb3IgTGludXgKLSAqIFdyaXR0ZW4gb3Jp Z2luYWxseSBmb3IgTGludXggMi4wLjMwIGJ5IEZveCBDaGVuLCBtaGNoZW5AZ29sZi5jY2wuaXRy aS5vcmcudHcKLSAqIFBvcnRlZCB0byAyLjIsIDIuNCAmIDIuNSBieSBBcm5hbGRvIENhcnZhbGhv IGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAqIFdpcmVsZXNzIGV4dGVuc2lvbnMg aW4gMi40IGJ5IEd1c3Rhdm8gTmllbWV5ZXIgPG5pZW1leWVyQGNvbmVjdGl2YS5jb20+Ci0gKgot ICogUmVmZXJlbmNlcyB1c2VkIGJ5IEZveCBDaGVuIHdoaWxlIHdyaXRpbmcgdGhlIG9yaWdpbmFs IGRyaXZlciBmb3IgMi4wLjMwOgotICoKLSAqICAgMS4gV0wyNHh4IHBhY2tldCBkcml2ZXJzICh0 b29hc20uYXNtKQotICogICAyLiBBY2Nlc3MgUG9pbnQgRmlybXdhcmUgSW50ZXJmYWNlIFNwZWNp ZmljYXRpb24gZm9yIElFRUUgODAyLjExIFNVVFJPCi0gKiAgIDMuIElFRUUgODAyLjExCi0gKiAg IDQuIExpbnV4IG5ldHdvcmsgZHJpdmVyICgvdXNyL3NyYy9saW51eC9kcml2ZXJzL25ldCkKLSAq ICAgNS4gSVNBIGNhcmQgZHJpdmVyIC0gd2wyNC5jCi0gKiAgIDYuIExpbnV4IFBDTUNJQSBza2Vs ZXRvbiBkcml2ZXIgLSBza2VsZXRvbi5jCi0gKiAgIDcuIExpbnV4IFBDTUNJQSAzYzU4OSBuZXR3 b3JrIGRyaXZlciAtIDNjNTg5X2NzLmMKLSAqCi0gKiBUZXN0ZWQgd2l0aCBXTDI0MDAgZmlybXdh cmUgMS4yLCBMaW51eCAyLjAuMzAsIGFuZCBwY21jaWEtY3MtMi45LjEyCi0gKiAgIDEuIFBlcmZv cm1hbmNlOiBhYm91dCAxNjUgS2J5dGVzL3NlYyBpbiBUQ1AvSVAgd2l0aCBBZC1Ib2MgbW9kZS4K LSAqICAgICAgcnNoIDE5Mi4xNjguMS4zICJkZCBpZj0vZGV2L3plcm8gYnM9MWsgY291bnQ9MTAw MCIgPiAvZGV2L251bGwKLSAqICAgICAgKFNwZWNpZmljYXRpb24gMk0gYml0cy9zZWMuIGlzIGFi b3V0IDI1MCBLYnl0ZXMvc2VjLiwgYnV0IHdlIG11c3QgZGVkdWN0Ci0gKiAgICAgICBFVEhFUi9J UC9VRFAvVENQIGhlYWRlciwgYW5kIGFja25vd2xlZGdlbWVudCBvdmVyaGVhZCkKLSAqCi0gKiBU ZXN0ZWQgd2l0aCBQbGFuZXQgQVAgaW4gMi40LjE3LCAxODQgS2J5dGVzL3MgaW4gVURQIGluIElu ZnJhc3RydWN0dXJlIG1vZGUsCi0gKiAxNzMgS2J5dGVzL3MgaW4gVENQLgotICoKLSAqIFRlc3Rl ZCB3aXRoIFBsYW5ldCBBUCBpbiAyLjUuNzMtYmssIDIxNiBLYnl0ZXMvcyBpbiBJbmZyYXN0cnVj dHVyZSBtb2RlCi0gKiB3aXRoIGEgU01QIG1hY2hpbmUgKGR1YWwgcGVudGl1bSAxMDApLCB1c2lu ZyBwa3RnZW4sIDQzMiBwcHMgKHBrdF9zaXplID0gNjApCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0j aW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5j bHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4K LSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5j bHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNs dWRlIDxuZXQvY2ZnODAyMTEuaD4KLQotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0KLSNp bmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgotI2lu Y2x1ZGUgPHBjbWNpYS9kcy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bGlu dXgvdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSAid2wzNTAxLmgiCi0KLSNpZm5kZWYgX19pMzg2X18K LSNkZWZpbmUgc2xvd19kb3duX2lvKCkKLSNlbmRpZgotCi0vKiBGb3Igcm91Z2ggY29uc3RhbnQg ZGVsYXkgKi8KLSNkZWZpbmUgV0wzNTAxX05PUExPT1AobikgeyBpbnQgeCA9IDA7IHdoaWxlICh4 KysgPCBuKSBzbG93X2Rvd25faW8oKTsgfQotCi0KLQotI2RlZmluZSB3bDM1MDFfb3V0YihhLCBi KSB7IG91dGIoYSwgYik7IHNsb3dfZG93bl9pbygpOyB9Ci0jZGVmaW5lIHdsMzUwMV9vdXRiX3Ao YSwgYikgeyBvdXRiX3AoYSwgYik7IHNsb3dfZG93bl9pbygpOyB9Ci0jZGVmaW5lIHdsMzUwMV9v dXRzYihhLCBiLCBjKSB7IG91dHNiKGEsIGIsIGMpOyBzbG93X2Rvd25faW8oKTsgfQotCi0jZGVm aW5lIFdMMzUwMV9SRUxFQVNFX1RJTUVPVVQgKDI1ICogSFopCi0jZGVmaW5lIFdMMzUwMV9NQVhf QURIT0NfVFJJRVMgMTYKLQotI2RlZmluZSBXTDM1MDFfUkVTVU1FCTAKLSNkZWZpbmUgV0wzNTAx X1NVU1BFTkQJMQotCi1zdGF0aWMgaW50IHdsMzUwMV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZp Y2UgKmxpbmspOwotc3RhdGljIHZvaWQgd2wzNTAxX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZp Y2UgKmxpbmspOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQlpbnQgcmVnX2RvbWFpbjsKLQlp bnQgbWluLCBtYXgsIGRlZmx0OwotfSBpd19jaGFubmVsX3RhYmxlW10gPSB7Ci0JewotCQkucmVn X2RvbWFpbiA9IElXX1JFR19ET01BSU5fRkNDLAotCQkubWluCSAgICA9IDEsCi0JCS5tYXgJICAg ID0gMTEsCi0JCS5kZWZsdAkgICAgPSAxLAotCX0sCi0JewotCQkucmVnX2RvbWFpbiA9IElXX1JF R19ET01BSU5fRE9DLAotCQkubWluCSAgICA9IDEsCi0JCS5tYXgJICAgID0gMTEsCi0JCS5kZWZs dAkgICAgPSAxLAotCX0sCi0JewotCQkucmVnX2RvbWFpbiA9IElXX1JFR19ET01BSU5fRVRTSSwK LQkJLm1pbgkgICAgPSAxLAotCQkubWF4CSAgICA9IDEzLAotCQkuZGVmbHQJICAgID0gMSwKLQl9 LAotCXsKLQkJLnJlZ19kb21haW4gPSBJV19SRUdfRE9NQUlOX1NQQUlOLAotCQkubWluCSAgICA9 IDEwLAotCQkubWF4CSAgICA9IDExLAotCQkuZGVmbHQJICAgID0gMTAsCi0JfSwKLQl7Ci0JCS5y ZWdfZG9tYWluID0gSVdfUkVHX0RPTUFJTl9GUkFOQ0UsCi0JCS5taW4JICAgID0gMTAsCi0JCS5t YXgJICAgID0gMTMsCi0JCS5kZWZsdAkgICAgPSAxMCwKLQl9LAotCXsKLQkJLnJlZ19kb21haW4g PSBJV19SRUdfRE9NQUlOX01LSywKLQkJLm1pbgkgICAgPSAxNCwKLQkJLm1heAkgICAgPSAxNCwK LQkJLmRlZmx0CSAgICA9IDE0LAotCX0sCi0JewotCQkucmVnX2RvbWFpbiA9IElXX1JFR19ET01B SU5fTUtLMSwKLQkJLm1pbgkgICAgPSAxLAotCQkubWF4CSAgICA9IDE0LAotCQkuZGVmbHQJICAg ID0gMSwKLQl9LAotCXsKLQkJLnJlZ19kb21haW4gPSBJV19SRUdfRE9NQUlOX0lTUkFFTCwKLQkJ Lm1pbgkgICAgPSAzLAotCQkubWF4CSAgICA9IDksCi0JCS5kZWZsdAkgICAgPSA5LAotCX0sCi19 OwotCi0vKioKLSAqIGl3X3ZhbGlkX2NoYW5uZWwgLSB2YWxpZGF0ZSBjaGFubmVsIGluIHJlZ3Vs YXRvcnkgZG9tYWluCi0gKiBAcmVnX2RvbWFpbjogcmVndWxhdG9yeSBkb21haW4KLSAqIEBjaGFu bmVsOiBjaGFubmVsIHRvIHZhbGlkYXRlCi0gKgotICogUmV0dXJucyAwIGlmIGludmFsaWQgaW4g dGhlIHNwZWNpZmllZCByZWd1bGF0b3J5IGRvbWFpbiwgbm9uLXplcm8gaWYgdmFsaWQuCi0gKi8K LXN0YXRpYyBpbnQgaXdfdmFsaWRfY2hhbm5lbChpbnQgcmVnX2RvbWFpbiwgaW50IGNoYW5uZWwp Ci17Ci0JaW50IGksIHJjID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGl3X2No YW5uZWxfdGFibGUpOyBpKyspCi0JCWlmIChyZWdfZG9tYWluID09IGl3X2NoYW5uZWxfdGFibGVb aV0ucmVnX2RvbWFpbikgewotCQkJcmMgPSBjaGFubmVsID49IGl3X2NoYW5uZWxfdGFibGVbaV0u bWluICYmCi0JCQkgICAgIGNoYW5uZWwgPD0gaXdfY2hhbm5lbF90YWJsZVtpXS5tYXg7Ci0JCQli cmVhazsKLQkJfQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBpd19kZWZhdWx0X2NoYW5uZWwg LSBnZXQgZGVmYXVsdCBjaGFubmVsIGZvciBhIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBAcmVnX2Rv bWFpbjogcmVndWxhdG9yeSBkb21haW4KLSAqCi0gKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGNoYW5u ZWwgZm9yIGEgcmVndWxhdG9yeSBkb21haW4KLSAqLwotc3RhdGljIGludCBpd19kZWZhdWx0X2No YW5uZWwoaW50IHJlZ19kb21haW4pCi17Ci0JaW50IGksIHJjID0gMTsKLQotCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGl3X2NoYW5uZWxfdGFibGUpOyBpKyspCi0JCWlmIChyZWdfZG9tYWlu ID09IGl3X2NoYW5uZWxfdGFibGVbaV0ucmVnX2RvbWFpbikgewotCQkJcmMgPSBpd19jaGFubmVs X3RhYmxlW2ldLmRlZmx0OwotCQkJYnJlYWs7Ci0JCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRp YyB2b2lkIGl3X3NldF9tZ210X2luZm9fZWxlbWVudChlbnVtIGl3X21nbXRfaW5mb19lbGVtZW50 X2lkcyBpZCwKLQkJCQkgICAgIHN0cnVjdCBpd19tZ210X2luZm9fZWxlbWVudCAqZWwsCi0JCQkJ ICAgICB2b2lkICp2YWx1ZSwgaW50IGxlbikKLXsKLQllbC0+aWQgID0gaWQ7Ci0JZWwtPmxlbiA9 IGxlbjsKLQltZW1jcHkoZWwtPmRhdGEsIHZhbHVlLCBsZW4pOwotfQotCi1zdGF0aWMgdm9pZCBp d19jb3B5X21nbXRfaW5mb19lbGVtZW50KHN0cnVjdCBpd19tZ210X2luZm9fZWxlbWVudCAqdG8s Ci0JCQkJICAgICAgc3RydWN0IGl3X21nbXRfaW5mb19lbGVtZW50ICpmcm9tKQotewotCWl3X3Nl dF9tZ210X2luZm9fZWxlbWVudChmcm9tLT5pZCwgdG8sIGZyb20tPmRhdGEsIGZyb20tPmxlbik7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3bDM1MDFfc3dpdGNoX3BhZ2Uoc3RydWN0IHdsMzUw MV9jYXJkICp0aGlzLCB1OCBwYWdlKQotewotCXdsMzUwMV9vdXRiKHBhZ2UsIHRoaXMtPmJhc2Vf YWRkciArIFdMMzUwMV9OSUNfQlNTKTsKLX0KLQotLyoKLSAqIEdldCBFdGhlcm5ldCBNQUMgYWRk cmVzcy4KLSAqCi0gKiBXQVJOSU5HOiBXZSBzd2l0Y2ggdG8gRlBBR0UwIGFuZCBzd2l0YyBiYWNr IGFnYWluLgotICogICAgICAgICAgTWFraW5nIHN1cmUgdGhlcmUgaXMgbm8gb3RoZXIgV0wgZnVu Y3Rpb24gYmVlbmluZyBjYWxsZWQgYnkgSVNSLgotICovCi1zdGF0aWMgaW50IHdsMzUwMV9nZXRf Zmxhc2hfbWFjX2FkZHIoc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzKQotewotCWludCBiYXNlX2Fk ZHIgPSB0aGlzLT5iYXNlX2FkZHI7Ci0KLQkvKiBnZXQgTUFDIGFkZHIgKi8KLQl3bDM1MDFfb3V0 YihXTDM1MDFfQlNTX0ZQQUdFMywgYmFzZV9hZGRyICsgV0wzNTAxX05JQ19CU1MpOyAvKiBCU1Mg Ki8KLQl3bDM1MDFfb3V0YigweDAwLCBiYXNlX2FkZHIgKyBXTDM1MDFfTklDX0xNQUwpOwkvKiBM TUFMICovCi0Jd2wzNTAxX291dGIoMHg0MCwgYmFzZV9hZGRyICsgV0wzNTAxX05JQ19MTUFIKTsJ LyogTE1BSCAqLwotCi0JLyogd2FpdCBmb3IgcmVhZGluZyBFRVBST00gKi8KLQlXTDM1MDFfTk9Q TE9PUCgxMDApOwotCXRoaXMtPm1hY19hZGRyWzBdID0gaW5iKGJhc2VfYWRkciArIFdMMzUwMV9O SUNfSU9EUEEpOwotCVdMMzUwMV9OT1BMT09QKDEwMCk7Ci0JdGhpcy0+bWFjX2FkZHJbMV0gPSBp bmIoYmFzZV9hZGRyICsgV0wzNTAxX05JQ19JT0RQQSk7Ci0JV0wzNTAxX05PUExPT1AoMTAwKTsK LQl0aGlzLT5tYWNfYWRkclsyXSA9IGluYihiYXNlX2FkZHIgKyBXTDM1MDFfTklDX0lPRFBBKTsK LQlXTDM1MDFfTk9QTE9PUCgxMDApOwotCXRoaXMtPm1hY19hZGRyWzNdID0gaW5iKGJhc2VfYWRk ciArIFdMMzUwMV9OSUNfSU9EUEEpOwotCVdMMzUwMV9OT1BMT09QKDEwMCk7Ci0JdGhpcy0+bWFj X2FkZHJbNF0gPSBpbmIoYmFzZV9hZGRyICsgV0wzNTAxX05JQ19JT0RQQSk7Ci0JV0wzNTAxX05P UExPT1AoMTAwKTsKLQl0aGlzLT5tYWNfYWRkcls1XSA9IGluYihiYXNlX2FkZHIgKyBXTDM1MDFf TklDX0lPRFBBKTsKLQlXTDM1MDFfTk9QTE9PUCgxMDApOwotCXRoaXMtPnJlZ19kb21haW4gPSBp bmIoYmFzZV9hZGRyICsgV0wzNTAxX05JQ19JT0RQQSk7Ci0JV0wzNTAxX05PUExPT1AoMTAwKTsK LQl3bDM1MDFfb3V0YihXTDM1MDFfQlNTX0ZQQUdFMCwgYmFzZV9hZGRyICsgV0wzNTAxX05JQ19C U1MpOwotCXdsMzUwMV9vdXRiKDB4MDQsIGJhc2VfYWRkciArIFdMMzUwMV9OSUNfTE1BTCk7Ci0J d2wzNTAxX291dGIoMHg0MCwgYmFzZV9hZGRyICsgV0wzNTAxX05JQ19MTUFIKTsKLQlXTDM1MDFf Tk9QTE9PUCgxMDApOwotCXRoaXMtPnZlcnNpb25bMF0gPSBpbmIoYmFzZV9hZGRyICsgV0wzNTAx X05JQ19JT0RQQSk7Ci0JV0wzNTAxX05PUExPT1AoMTAwKTsKLQl0aGlzLT52ZXJzaW9uWzFdID0g aW5iKGJhc2VfYWRkciArIFdMMzUwMV9OSUNfSU9EUEEpOwotCS8qIHN3aXRjaCB0byBTUkFNIFBh Z2UgMCAoZm9yIHNhZmV0eSkgKi8KLQl3bDM1MDFfc3dpdGNoX3BhZ2UodGhpcywgV0wzNTAxX0JT U19TUEFHRTApOwotCi0JLyogVGhlIE1BQyBhZGRyIHNob3VsZCBiZSAwMDo2MDouLi4gKi8KLQly ZXR1cm4gdGhpcy0+bWFjX2FkZHJbMF0gPT0gMHgwMCAmJiB0aGlzLT5tYWNfYWRkclsxXSA9PSAw eDYwOwotfQotCi0vKioKLSAqIHdsMzUwMV9zZXRfdG9fd2xhIC0gTW92ZSAnc2l6ZScgYnl0ZXMg ZnJvbSBQQyB0byBjYXJkCi0gKiBAdGhpczogQ2FyZAotICogQGRlc3Q6IENhcmQgYWRkcmVzc2lu ZyBzcGFjZQotICogQHNyYzogUEMgYWRkcmVzc2luZyBzcGFjZQotICogQHNpemU6IEJ5dGVzIHRv IG1vdmUKLSAqCi0gKiBNb3ZlICdzaXplJyBieXRlcyBmcm9tIFBDIHRvIGNhcmQuIChTaG91bGRu J3QgYmUgaW50ZXJydXB0ZWQpCi0gKi8KLXN0YXRpYyB2b2lkIHdsMzUwMV9zZXRfdG9fd2xhKHN0 cnVjdCB3bDM1MDFfY2FyZCAqdGhpcywgdTE2IGRlc3QsIHZvaWQgKnNyYywKLQkJCSAgICAgIGlu dCBzaXplKQotewotCS8qIHN3aXRjaCB0byBTUkFNIFBhZ2UgMCAqLwotCXdsMzUwMV9zd2l0Y2hf cGFnZSh0aGlzLCAoZGVzdCAmIDB4ODAwMCkgPyBXTDM1MDFfQlNTX1NQQUdFMSA6Ci0JCQkJCQkg ICBXTDM1MDFfQlNTX1NQQUdFMCk7Ci0JLyogc2V0IExNQUwgYW5kIExNQUggKi8KLQl3bDM1MDFf b3V0YihkZXN0ICYgMHhmZiwgdGhpcy0+YmFzZV9hZGRyICsgV0wzNTAxX05JQ19MTUFMKTsKLQl3 bDM1MDFfb3V0YigoKGRlc3QgPj4gOCkgJiAweDdmKSwgdGhpcy0+YmFzZV9hZGRyICsgV0wzNTAx X05JQ19MTUFIKTsKLQotCS8qIHJlcCBvdXQgdG8gUG9ydCBBICovCi0Jd2wzNTAxX291dHNiKHRo aXMtPmJhc2VfYWRkciArIFdMMzUwMV9OSUNfSU9EUEEsIHNyYywgc2l6ZSk7Ci19Ci0KLS8qKgot ICogd2wzNTAxX2dldF9mcm9tX3dsYSAtIE1vdmUgJ3NpemUnIGJ5dGVzIGZyb20gY2FyZCB0byBQ QwotICogQHRoaXM6IENhcmQKLSAqIEBzcmM6IENhcmQgYWRkcmVzc2luZyBzcGFjZQotICogQGRl c3Q6IFBDIGFkZHJlc3Npbmcgc3BhY2UKLSAqIEBzaXplOiBCeXRlcyB0byBtb3ZlCi0gKgotICog TW92ZSAnc2l6ZScgYnl0ZXMgZnJvbSBjYXJkIHRvIFBDLiAoU2hvdWxkbid0IGJlIGludGVycnVw dGVkKQotICovCi1zdGF0aWMgdm9pZCB3bDM1MDFfZ2V0X2Zyb21fd2xhKHN0cnVjdCB3bDM1MDFf Y2FyZCAqdGhpcywgdTE2IHNyYywgdm9pZCAqZGVzdCwKLQkJCQlpbnQgc2l6ZSkKLXsKLQkvKiBz d2l0Y2ggdG8gU1JBTSBQYWdlIDAgKi8KLQl3bDM1MDFfc3dpdGNoX3BhZ2UodGhpcywgKHNyYyAm IDB4ODAwMCkgPyBXTDM1MDFfQlNTX1NQQUdFMSA6Ci0JCQkJCQkgIFdMMzUwMV9CU1NfU1BBR0Uw KTsKLQkvKiBzZXQgTE1BTCBhbmQgTE1BSCAqLwotCXdsMzUwMV9vdXRiKHNyYyAmIDB4ZmYsIHRo aXMtPmJhc2VfYWRkciArIFdMMzUwMV9OSUNfTE1BTCk7Ci0Jd2wzNTAxX291dGIoKHNyYyA+PiA4 KSAmIDB4N2YsIHRoaXMtPmJhc2VfYWRkciArIFdMMzUwMV9OSUNfTE1BSCk7Ci0KLQkvKiByZXAg Z2V0IGZyb20gUG9ydCBBICovCi0JaW5zYih0aGlzLT5iYXNlX2FkZHIgKyBXTDM1MDFfTklDX0lP RFBBLCBkZXN0LCBzaXplKTsKLX0KLQotLyoKLSAqIEdldC9BbGxvY2F0ZSBhIGZyZWUgVHggRGF0 YSBCdWZmZXIKLSAqCi0gKiAgKi0tLS0tLS0tLS0tLS0tKi0tLS0tLS0tLS0tLS0tLS0tKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCi0gKiAgfCAgICBQTENQICAgICAgfCAgICBN QUMgSGVhZGVyICAgfCAgRFNUICBTUkMgICAgICAgICBEYXRhIC4uLiAgICAgICB8Ci0gKiAgfCAg KDI0IGJ5dGVzKSAgfCAgICAoMzAgYnl0ZXMpICAgfCAgKDYpICAoNikgIChFdGhlcm5ldCBSb3cg RGF0YSkgICB8Ci0gKiAgKi0tLS0tLS0tLS0tLS0tKi0tLS0tLS0tLS0tLS0tLS0tKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCi0gKiAgXCAgICAgICAgICAgICAgIFwtIElFRUUg ODAyLjExIC0vIFwtLS0tLS0tLS0tLS0tLSBsZW4gLS0tLS0tLS0tLS0tLS0vCi0gKiAgIFwtc3Ry dWN0IHdsMzUwMV84MDIxMV90eF9oZHItLS8gICBcLS0tLS0tLS0gRXRoZXJuZXQgRnJhbWUgLS0t LS0tLS8KLSAqCi0gKiBSZXR1cm4gPSBQb3NpdGlvbiBpbiBDYXJkCi0gKi8KLXN0YXRpYyB1MTYg d2wzNTAxX2dldF90eF9idWZmZXIoc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzLCB1MTYgbGVuKQot ewotCXUxNiBuZXh0LCBibGtfY250ID0gMCwgemVybyA9IDA7Ci0JdTE2IGZ1bGxfbGVuID0gc2l6 ZW9mKHN0cnVjdCB3bDM1MDFfODAyMTFfdHhfaGRyKSArIGxlbjsKLQl1MTYgcmV0ID0gMDsKLQot CWlmIChmdWxsX2xlbiA+IHRoaXMtPnR4X2J1ZmZlcl9jbnQgKiAyNTQpCi0JCWdvdG8gb3V0Owot CXJldCA9IHRoaXMtPnR4X2J1ZmZlcl9oZWFkOwotCXdoaWxlIChmdWxsX2xlbikgewotCQlpZiAo ZnVsbF9sZW4gPCAyNTQpCi0JCQlmdWxsX2xlbiA9IDA7Ci0JCWVsc2UKLQkJCWZ1bGxfbGVuIC09 IDI1NDsKLQkJd2wzNTAxX2dldF9mcm9tX3dsYSh0aGlzLCB0aGlzLT50eF9idWZmZXJfaGVhZCwg Jm5leHQsCi0JCQkJICAgIHNpemVvZihuZXh0KSk7Ci0JCWlmICghZnVsbF9sZW4pCi0JCQl3bDM1 MDFfc2V0X3RvX3dsYSh0aGlzLCB0aGlzLT50eF9idWZmZXJfaGVhZCwgJnplcm8sCi0JCQkJCSAg c2l6ZW9mKHplcm8pKTsKLQkJdGhpcy0+dHhfYnVmZmVyX2hlYWQgPSBuZXh0OwotCQlibGtfY250 Kys7Ci0JCS8qIGlmIGJ1ZmZlciBpcyBub3QgZW5vdWdoICovCi0JCWlmICghbmV4dCAmJiBmdWxs X2xlbikgewotCQkJdGhpcy0+dHhfYnVmZmVyX2hlYWQgPSByZXQ7Ci0JCQlyZXQgPSAwOwotCQkJ Z290byBvdXQ7Ci0JCX0KLQl9Ci0JdGhpcy0+dHhfYnVmZmVyX2NudCAtPSBibGtfY250Owotb3V0 OgotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBGcmVlIGFuIGFsbG9jYXRlZCBUeCBCdWZmZXIu IHB0ciBtdXN0IGJlIGNvcnJlY3QgcG9zaXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkIHdsMzUwMV9m cmVlX3R4X2J1ZmZlcihzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMsIHUxNiBwdHIpCi17Ci0JLyog Y2hlY2sgaWYgYWxsIHNwYWNlIGlzIG5vdCBmcmVlICovCi0JaWYgKCF0aGlzLT50eF9idWZmZXJf aGVhZCkKLQkJdGhpcy0+dHhfYnVmZmVyX2hlYWQgPSBwdHI7Ci0JZWxzZQotCQl3bDM1MDFfc2V0 X3RvX3dsYSh0aGlzLCB0aGlzLT50eF9idWZmZXJfdGFpbCwKLQkJCQkgICZwdHIsIHNpemVvZihw dHIpKTsKLQl3aGlsZSAocHRyKSB7Ci0JCXUxNiBuZXh0OwotCi0JCXRoaXMtPnR4X2J1ZmZlcl9j bnQrKzsKLQkJd2wzNTAxX2dldF9mcm9tX3dsYSh0aGlzLCBwdHIsICZuZXh0LCBzaXplb2YobmV4 dCkpOwotCQl0aGlzLT50eF9idWZmZXJfdGFpbCA9IHB0cjsKLQkJcHRyID0gbmV4dDsKLQl9Ci19 Ci0KLXN0YXRpYyBpbnQgd2wzNTAxX2VzYnFfcmVxX3Rlc3Qoc3RydWN0IHdsMzUwMV9jYXJkICp0 aGlzKQotewotCXU4IHRtcCA9IDA7Ci0KLQl3bDM1MDFfZ2V0X2Zyb21fd2xhKHRoaXMsIHRoaXMt PmVzYnFfcmVxX2hlYWQgKyAzLCAmdG1wLCBzaXplb2YodG1wKSk7Ci0JcmV0dXJuIHRtcCAmIDB4 ODA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMzUwMV9lc2JxX3JlcShzdHJ1Y3Qgd2wzNTAxX2NhcmQg KnRoaXMsIHUxNiAqcHRyKQotewotCXUxNiB0bXAgPSAwOwotCi0Jd2wzNTAxX3NldF90b193bGEo dGhpcywgdGhpcy0+ZXNicV9yZXFfaGVhZCwgcHRyLCAyKTsKLQl3bDM1MDFfc2V0X3RvX3dsYSh0 aGlzLCB0aGlzLT5lc2JxX3JlcV9oZWFkICsgMiwgJnRtcCwgc2l6ZW9mKHRtcCkpOwotCXRoaXMt PmVzYnFfcmVxX2hlYWQgKz0gNDsKLQlpZiAodGhpcy0+ZXNicV9yZXFfaGVhZCA+PSB0aGlzLT5l c2JxX3JlcV9lbmQpCi0JCXRoaXMtPmVzYnFfcmVxX2hlYWQgPSB0aGlzLT5lc2JxX3JlcV9zdGFy dDsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfZXNicV9leGVjKHN0cnVjdCB3bDM1MDFfY2FyZCAq dGhpcywgdm9pZCAqc2lnLCBpbnQgc2lnX3NpemUpCi17Ci0JaW50IHJjID0gLUVJTzsKLQotCWlm ICh3bDM1MDFfZXNicV9yZXFfdGVzdCh0aGlzKSkgewotCQl1MTYgcHRyID0gd2wzNTAxX2dldF90 eF9idWZmZXIodGhpcywgc2lnX3NpemUpOwotCQlpZiAocHRyKSB7Ci0JCQl3bDM1MDFfc2V0X3Rv X3dsYSh0aGlzLCBwdHIsIHNpZywgc2lnX3NpemUpOwotCQkJd2wzNTAxX2VzYnFfcmVxKHRoaXMs ICZwdHIpOwotCQkJcmMgPSAwOwotCQl9Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCB3bDM1MDFfcmVxdWVzdF9taWIoc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzLCB1OCBpbmRleCwg dm9pZCAqYmYpCi17Ci0Jc3RydWN0IHdsMzUwMV9nZXRfcmVxIHNpZyA9IHsKLQkJLnNpZ19pZAkg ICAgPSBXTDM1MDFfU0lHX0dFVF9SRVEsCi0JCS5taWJfYXR0cmliID0gaW5kZXgsCi0JfTsKLQl1 bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYyA9IC1FSU87Ci0KLQlzcGluX2xvY2tfaXJxc2F2 ZSgmdGhpcy0+bG9jaywgZmxhZ3MpOwotCWlmICh3bDM1MDFfZXNicV9yZXFfdGVzdCh0aGlzKSkg ewotCQl1MTYgcHRyID0gd2wzNTAxX2dldF90eF9idWZmZXIodGhpcywgc2l6ZW9mKHNpZykpOwot CQlpZiAocHRyKSB7Ci0JCQl3bDM1MDFfc2V0X3RvX3dsYSh0aGlzLCBwdHIsICZzaWcsIHNpemVv ZihzaWcpKTsKLQkJCXdsMzUwMV9lc2JxX3JlcSh0aGlzLCAmcHRyKTsKLQkJCXRoaXMtPnNpZ19n ZXRfY29uZmlybS5taWJfc3RhdHVzID0gMjU1OwotCQkJcmMgPSAwOwotCQl9Ci0JfQotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnRoaXMtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiByYzsKLX0K LQotc3RhdGljIGludCB3bDM1MDFfZ2V0X21pYl92YWx1ZShzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRo aXMsIHU4IGluZGV4LAotCQkJCXZvaWQgKmJmLCBpbnQgc2l6ZSkKLXsKLQlpbnQgcmM7Ci0KLQly YyA9IHdsMzUwMV9yZXF1ZXN0X21pYih0aGlzLCBpbmRleCwgYmYpOwotCWlmIChyYykKLQkJcmV0 dXJuIHJjOwotCi0JcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodGhpcy0+d2FpdCwKLQkJ dGhpcy0+c2lnX2dldF9jb25maXJtLm1pYl9zdGF0dXMgIT0gMjU1KTsKLQlpZiAocmMpCi0JCXJl dHVybiByYzsKLQotCW1lbWNweShiZiwgdGhpcy0+c2lnX2dldF9jb25maXJtLm1pYl92YWx1ZSwg c2l6ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2wzNTAxX3B3cl9tZ210KHN0cnVj dCB3bDM1MDFfY2FyZCAqdGhpcywgaW50IHN1c3BlbmQpCi17Ci0Jc3RydWN0IHdsMzUwMV9wd3Jf bWdtdF9yZXEgc2lnID0gewotCQkuc2lnX2lkCQk9IFdMMzUwMV9TSUdfUFdSX01HTVRfUkVRLAot CQkucHdyX3NhdmUJPSBzdXNwZW5kLAotCQkud2FrZV91cAk9ICFzdXNwZW5kLAotCQkucmVjZWl2 ZV9kdGltcwk9IDEwLAotCX07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmMgPSAtRUlP OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRoaXMtPmxvY2ssIGZsYWdzKTsKLQlpZiAod2wzNTAx X2VzYnFfcmVxX3Rlc3QodGhpcykpIHsKLQkJdTE2IHB0ciA9IHdsMzUwMV9nZXRfdHhfYnVmZmVy KHRoaXMsIHNpemVvZihzaWcpKTsKLQkJaWYgKHB0cikgewotCQkJd2wzNTAxX3NldF90b193bGEo dGhpcywgcHRyLCAmc2lnLCBzaXplb2Yoc2lnKSk7Ci0JCQl3bDM1MDFfZXNicV9yZXEodGhpcywg JnB0cik7Ci0JCQl0aGlzLT5zaWdfcHdyX21nbXRfY29uZmlybS5zdGF0dXMgPSAyNTU7Ci0JCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGlzLT5sb2NrLCBmbGFncyk7Ci0JCQlyYyA9IHdhaXRf ZXZlbnRfaW50ZXJydXB0aWJsZSh0aGlzLT53YWl0LAotCQkJCXRoaXMtPnNpZ19wd3JfbWdtdF9j b25maXJtLnN0YXR1cyAhPSAyNTUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIHN0YXR1 cz0lZFxuIiwgX19mdW5jX18sCi0JCQkgICAgICAgc3VzcGVuZCA/ICJzdXNwZW5kIiA6ICJyZXN1 bWUiLAotCQkJICAgICAgIHRoaXMtPnNpZ19wd3JfbWdtdF9jb25maXJtLnN0YXR1cyk7Ci0JCQln b3RvIG91dDsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGlzLT5sb2NrLCBm bGFncyk7Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIHdsMzUwMV9zZW5kX3BrdCAt IFNlbmQgYSBwYWNrZXQuCi0gKiBAdGhpczogQ2FyZAotICogQGRhdGE6IEV0aGVybmV0IHJhdyBm cmFtZS4gIChlLmcuIGRhdGFbMF0gLSBkYXRhWzVdIGlzIERlc3QgTUFDIEFkZHIsCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs2XSAtIGRhdGFbMTFdIGlzIFNyYyBN QUMgQWRkcikKLSAqIEBsZW46IFBhY2tldCBsZW5ndGgKLSAqIFJlZjogSUVFRSA4MDIuMTEKLSAq Lwotc3RhdGljIGludCB3bDM1MDFfc2VuZF9wa3Qoc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzLCB1 OCAqZGF0YSwgdTE2IGxlbikKLXsKLQl1MTYgYmYsIHNpZ19iZiwgbmV4dCwgdG1wbGVuLCBwa3Rs ZW47Ci0Jc3RydWN0IHdsMzUwMV9tZF9yZXEgc2lnID0gewotCQkuc2lnX2lkID0gV0wzNTAxX1NJ R19NRF9SRVEsCi0JfTsKLQlzaXplX3Qgc2lnX2FkZHJfbGVuID0gc2l6ZW9mKHNpZy5hZGRyKTsK LQl1OCAqcGRhdGEgPSAoY2hhciAqKWRhdGE7Ci0JaW50IHJjID0gLUVJTzsKLQotCWlmICh3bDM1 MDFfZXNicV9yZXFfdGVzdCh0aGlzKSkgewotCQlzaWdfYmYgPSB3bDM1MDFfZ2V0X3R4X2J1ZmZl cih0aGlzLCBzaXplb2Yoc2lnKSk7Ci0JCXJjID0gLUVOT01FTTsKLQkJaWYgKCFzaWdfYmYpCS8q IE5vIGZyZWUgYnVmZmVyIGF2YWlsYWJsZSAqLwotCQkJZ290byBvdXQ7Ci0JCWJmID0gd2wzNTAx X2dldF90eF9idWZmZXIodGhpcywgbGVuICsgMjYgKyAyNCk7Ci0JCWlmICghYmYpIHsKLQkJCS8q IE5vIGZyZWUgYnVmZmVyIGF2YWlsYWJsZSAqLwotCQkJd2wzNTAxX2ZyZWVfdHhfYnVmZmVyKHRo aXMsIHNpZ19iZik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlyYyA9IDA7Ci0JCW1lbWNweSgmc2ln LmFkZHIsIHBkYXRhLCBzaWdfYWRkcl9sZW4pOwotCQlwa3RsZW4gPSBsZW4gLSBzaWdfYWRkcl9s ZW47Ci0JCXBkYXRhICs9IHNpZ19hZGRyX2xlbjsKLQkJc2lnLmRhdGEgPSBiZjsKLQkJaWYgKCgo KnBkYXRhKSAqIDI1NiArICgqKHBkYXRhICsgMSkpKSA+IDE1MDApIHsKLQkJCXU4IGFkZHI0W0VU SF9BTEVOXSA9IHsKLQkJCQlbMF0gPSAweEFBLCBbMV0gPSAweEFBLCBbMl0gPSAweDAzLCBbNF0g PSAweDAwLAotCQkJfTsKLQotCQkJd2wzNTAxX3NldF90b193bGEodGhpcywgYmYgKyAyICsKLQkJ CQkJICBvZmZzZXRvZihzdHJ1Y3Qgd2wzNTAxX3R4X2hkciwgYWRkcjQpLAotCQkJCQkgIGFkZHI0 LCBzaXplb2YoYWRkcjQpKTsKLQkJCXNpZy5zaXplID0gcGt0bGVuICsgMjQgKyA0ICsgNjsKLQkJ CWlmIChwa3RsZW4gPiAoMjU0IC0gc2l6ZW9mKHN0cnVjdCB3bDM1MDFfdHhfaGRyKSkpIHsKLQkJ CQl0bXBsZW4gPSAyNTQgLSBzaXplb2Yoc3RydWN0IHdsMzUwMV90eF9oZHIpOwotCQkJCXBrdGxl biAtPSB0bXBsZW47Ci0JCQl9IGVsc2UgewotCQkJCXRtcGxlbiA9IHBrdGxlbjsKLQkJCQlwa3Rs ZW4gPSAwOwotCQkJfQotCQkJd2wzNTAxX3NldF90b193bGEodGhpcywKLQkJCQkJICBiZiArIDIg KyBzaXplb2Yoc3RydWN0IHdsMzUwMV90eF9oZHIpLAotCQkJCQkgIHBkYXRhLCB0bXBsZW4pOwot CQkJcGRhdGEgKz0gdG1wbGVuOwotCQkJd2wzNTAxX2dldF9mcm9tX3dsYSh0aGlzLCBiZiwgJm5l eHQsIHNpemVvZihuZXh0KSk7Ci0JCQliZiA9IG5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlzaWcuc2l6 ZSA9IHBrdGxlbiArIDI0ICsgNCAtIDI7Ci0JCQlwZGF0YSArPSAyOwotCQkJcGt0bGVuIC09IDI7 Ci0JCQlpZiAocGt0bGVuID4gKDI1NCAtIHNpemVvZihzdHJ1Y3Qgd2wzNTAxX3R4X2hkcikgKyA2 KSkgewotCQkJCXRtcGxlbiA9IDI1NCAtIHNpemVvZihzdHJ1Y3Qgd2wzNTAxX3R4X2hkcikgKyA2 OwotCQkJCXBrdGxlbiAtPSB0bXBsZW47Ci0JCQl9IGVsc2UgewotCQkJCXRtcGxlbiA9IHBrdGxl bjsKLQkJCQlwa3RsZW4gPSAwOwotCQkJfQotCQkJd2wzNTAxX3NldF90b193bGEodGhpcywgYmYg KyAyICsKLQkJCQkJICBvZmZzZXRvZihzdHJ1Y3Qgd2wzNTAxX3R4X2hkciwgYWRkcjQpLAotCQkJ CQkgIHBkYXRhLCB0bXBsZW4pOwotCQkJcGRhdGEgKz0gdG1wbGVuOwotCQkJd2wzNTAxX2dldF9m cm9tX3dsYSh0aGlzLCBiZiwgJm5leHQsIHNpemVvZihuZXh0KSk7Ci0JCQliZiA9IG5leHQ7Ci0J CX0KLQkJd2hpbGUgKHBrdGxlbiA+IDApIHsKLQkJCWlmIChwa3RsZW4gPiAyNTQpIHsKLQkJCQl0 bXBsZW4gPSAyNTQ7Ci0JCQkJcGt0bGVuIC09IDI1NDsKLQkJCX0gZWxzZSB7Ci0JCQkJdG1wbGVu ID0gcGt0bGVuOwotCQkJCXBrdGxlbiA9IDA7Ci0JCQl9Ci0JCQl3bDM1MDFfc2V0X3RvX3dsYSh0 aGlzLCBiZiArIDIsIHBkYXRhLCB0bXBsZW4pOwotCQkJcGRhdGEgKz0gdG1wbGVuOwotCQkJd2wz NTAxX2dldF9mcm9tX3dsYSh0aGlzLCBiZiwgJm5leHQsIHNpemVvZihuZXh0KSk7Ci0JCQliZiA9 IG5leHQ7Ci0JCX0KLQkJd2wzNTAxX3NldF90b193bGEodGhpcywgc2lnX2JmLCAmc2lnLCBzaXpl b2Yoc2lnKSk7Ci0JCXdsMzUwMV9lc2JxX3JlcSh0aGlzLCAmc2lnX2JmKTsKLQl9Ci1vdXQ6Ci0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHdsMzUwMV9tZ210X3Jlc3luYyhzdHJ1Y3Qgd2wz NTAxX2NhcmQgKnRoaXMpCi17Ci0Jc3RydWN0IHdsMzUwMV9yZXN5bmNfcmVxIHNpZyA9IHsKLQkJ LnNpZ19pZCA9IFdMMzUwMV9TSUdfUkVTWU5DX1JFUSwKLQl9OwotCi0JcmV0dXJuIHdsMzUwMV9l c2JxX2V4ZWModGhpcywgJnNpZywgc2l6ZW9mKHNpZykpOwotfQotCi1zdGF0aWMgaW5saW5lIGlu dCB3bDM1MDFfZndfYnNzX3R5cGUoc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzKQotewotCXJldHVy biB0aGlzLT5uZXRfdHlwZSA9PSBJV19NT0RFX0lORlJBID8gV0wzNTAxX05FVF9UWVBFX0lORlJB IDoKLQkJCQkJCSBXTDM1MDFfTkVUX1RZUEVfQURIT0M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50 IHdsMzUwMV9md19jYXBfaW5mbyhzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMpCi17Ci0JcmV0dXJu IHRoaXMtPm5ldF90eXBlID09IElXX01PREVfSU5GUkEgPyBXTDM1MDFfTUdNVF9DQVBBQklMSVRZ X0VTUyA6Ci0JCQkJCQkgV0wzNTAxX01HTVRfQ0FQQUJJTElUWV9JQlNTOwotfQotCi1zdGF0aWMg aW50IHdsMzUwMV9tZ210X3NjYW4oc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzLCB1MTYgY2hhbl90 aW1lKQotewotCXN0cnVjdCB3bDM1MDFfc2Nhbl9yZXEgc2lnID0gewotCQkuc2lnX2lkCQk9IFdM MzUwMV9TSUdfU0NBTl9SRVEsCi0JCS5zY2FuX3R5cGUJPSBXTDM1MDFfU0NBTl9UWVBFX0FDVElW RSwKLQkJLnByb2JlX2RlbGF5CT0gMHgxMCwKLQkJLm1pbl9jaGFuX3RpbWUJPSBjaGFuX3RpbWUs Ci0JCS5tYXhfY2hhbl90aW1lCT0gY2hhbl90aW1lLAotCQkuYnNzX3R5cGUJPSB3bDM1MDFfZndf YnNzX3R5cGUodGhpcyksCi0JfTsKLQotCXRoaXMtPmJzc19jbnQgPSB0aGlzLT5qb2luX3N0YV9i c3MgPSAwOwotCXJldHVybiB3bDM1MDFfZXNicV9leGVjKHRoaXMsICZzaWcsIHNpemVvZihzaWcp KTsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfbWdtdF9qb2luKHN0cnVjdCB3bDM1MDFfY2FyZCAq dGhpcywgdTE2IHN0YXMpCi17Ci0Jc3RydWN0IHdsMzUwMV9qb2luX3JlcSBzaWcgPSB7Ci0JCS5z aWdfaWQJCSAgPSBXTDM1MDFfU0lHX0pPSU5fUkVRLAotCQkudGltZW91dAkgID0gMTAsCi0JCS5y ZXEuZHNfcHNldCA9IHsKLQkJCS5lbCA9IHsKLQkJCQkuaWQgID0gSVdfTUdNVF9JTkZPX0VMRU1F TlRfRFNfUEFSQU1FVEVSX1NFVCwKLQkJCQkubGVuID0gMSwKLQkJCX0sCi0JCQkuY2hhbgk9IHRo aXMtPmNoYW4sCi0JCX0sCi0JfTsKLQotCW1lbWNweSgmc2lnLnJlcSwgJnRoaXMtPmJzc19zZXRb c3Rhc10ucmVxLCBzaXplb2Yoc2lnLnJlcSkpOwotCXJldHVybiB3bDM1MDFfZXNicV9leGVjKHRo aXMsICZzaWcsIHNpemVvZihzaWcpKTsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfbWdtdF9zdGFy dChzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMpCi17Ci0Jc3RydWN0IHdsMzUwMV9zdGFydF9yZXEg c2lnID0gewotCQkuc2lnX2lkCQkJPSBXTDM1MDFfU0lHX1NUQVJUX1JFUSwKLQkJLmJlYWNvbl9w ZXJpb2QJCT0gNDAwLAotCQkuZHRpbV9wZXJpb2QJCT0gMSwKLQkJLmRzX3BzZXQgPSB7Ci0JCQku ZWwgPSB7Ci0JCQkJLmlkICA9IElXX01HTVRfSU5GT19FTEVNRU5UX0RTX1BBUkFNRVRFUl9TRVQs Ci0JCQkJLmxlbiA9IDEsCi0JCQl9LAotCQkJLmNoYW4JPSB0aGlzLT5jaGFuLAotCQl9LAotCQku YnNzX2Jhc2ljX3JzZXQJPSB7Ci0JCQkuZWwgPSB7Ci0JCQkJLmlkCT0gSVdfTUdNVF9JTkZPX0VM RU1FTlRfU1VQUE9SVEVEX1JBVEVTLAotCQkJCS5sZW4gPSAyLAotCQkJfSwKLQkJCS5kYXRhX3Jh dGVfbGFiZWxzID0gewotCQkJCVswXSA9IElXX01HTVRfUkFURV9MQUJFTF9NQU5EQVRPUlkgfAot CQkJCSAgICAgIElXX01HTVRfUkFURV9MQUJFTF8xTUJJVCwKLQkJCQlbMV0gPSBJV19NR01UX1JB VEVfTEFCRUxfTUFOREFUT1JZIHwKLQkJCQkgICAgICBJV19NR01UX1JBVEVfTEFCRUxfMk1CSVQs Ci0JCQl9LAotCQl9LAotCQkub3BlcmF0aW9uYWxfcnNldAk9IHsKLQkJCS5lbCA9IHsKLQkJCQku aWQJPSBJV19NR01UX0lORk9fRUxFTUVOVF9TVVBQT1JURURfUkFURVMsCi0JCQkJLmxlbiA9IDIs Ci0JCQl9LAotCQkJLmRhdGFfcmF0ZV9sYWJlbHMgPSB7Ci0JCQkJWzBdID0gSVdfTUdNVF9SQVRF X0xBQkVMX01BTkRBVE9SWSB8Ci0JCQkJICAgICAgSVdfTUdNVF9SQVRFX0xBQkVMXzFNQklULAot CQkJCVsxXSA9IElXX01HTVRfUkFURV9MQUJFTF9NQU5EQVRPUlkgfAotCQkJCSAgICAgIElXX01H TVRfUkFURV9MQUJFTF8yTUJJVCwKLQkJCX0sCi0JCX0sCi0JCS5pYnNzX3BzZXQJCT0gewotCQkJ LmVsID0gewotCQkJCS5pZAkgPSBJV19NR01UX0lORk9fRUxFTUVOVF9JQlNTX1BBUkFNRVRFUl9T RVQsCi0JCQkJLmxlbiAgICAgPSAyLAotCQkJfSwKLQkJCS5hdGltX3dpbmRvdyA9IDEwLAotCQl9 LAotCQkuYnNzX3R5cGUJCT0gd2wzNTAxX2Z3X2Jzc190eXBlKHRoaXMpLAotCQkuY2FwX2luZm8J CT0gd2wzNTAxX2Z3X2NhcF9pbmZvKHRoaXMpLAotCX07Ci0KLQlpd19jb3B5X21nbXRfaW5mb19l bGVtZW50KCZzaWcuc3NpZC5lbCwgJnRoaXMtPmVzc2lkLmVsKTsKLQlpd19jb3B5X21nbXRfaW5m b19lbGVtZW50KCZ0aGlzLT5rZWVwX2Vzc2lkLmVsLCAmdGhpcy0+ZXNzaWQuZWwpOwotCXJldHVy biB3bDM1MDFfZXNicV9leGVjKHRoaXMsICZzaWcsIHNpemVvZihzaWcpKTsKLX0KLQotc3RhdGlj IHZvaWQgd2wzNTAxX21nbXRfc2Nhbl9jb25maXJtKHN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcywg dTE2IGFkZHIpCi17Ci0JdTE2IGkgPSAwOwotCWludCBtYXRjaGZsYWcgPSAwOwotCXN0cnVjdCB3 bDM1MDFfc2Nhbl9jb25maXJtIHNpZzsKLQotCXByX2RlYnVnKCJlbnRyeSIpOwotCXdsMzUwMV9n ZXRfZnJvbV93bGEodGhpcywgYWRkciwgJnNpZywgc2l6ZW9mKHNpZykpOwotCWlmIChzaWcuc3Rh dHVzID09IFdMMzUwMV9TVEFUVVNfU1VDQ0VTUykgewotCQlwcl9kZWJ1Zygic3VjY2VzcyIpOwot CQlpZiAoKHRoaXMtPm5ldF90eXBlID09IElXX01PREVfSU5GUkEgJiYKLQkJICAgICAoc2lnLnJl cS5jYXBfaW5mbyAmIFdMMzUwMV9NR01UX0NBUEFCSUxJVFlfRVNTKSkgfHwKLQkJICAgICh0aGlz LT5uZXRfdHlwZSA9PSBJV19NT0RFX0FESE9DICYmCi0JCSAgICAgKHNpZy5yZXEuY2FwX2luZm8g JiBXTDM1MDFfTUdNVF9DQVBBQklMSVRZX0lCU1MpKSB8fAotCQkgICAgdGhpcy0+bmV0X3R5cGUg PT0gSVdfTU9ERV9BVVRPKSB7Ci0JCQlpZiAoIXRoaXMtPmVzc2lkLmVsLmxlbikKLQkJCQltYXRj aGZsYWcgPSAxOwotCQkJZWxzZSBpZiAodGhpcy0+ZXNzaWQuZWwubGVuID09IDMgJiYKLQkJCQkg IW1lbWNtcCh0aGlzLT5lc3NpZC5lc3NpZCwgIkFOWSIsIDMpKQotCQkJCW1hdGNoZmxhZyA9IDE7 Ci0JCQllbHNlIGlmICh0aGlzLT5lc3NpZC5lbC5sZW4gIT0gc2lnLnJlcS5zc2lkLmVsLmxlbikK LQkJCQltYXRjaGZsYWcgPSAwOwotCQkJZWxzZSBpZiAobWVtY21wKHRoaXMtPmVzc2lkLmVzc2lk LCBzaWcucmVxLnNzaWQuZXNzaWQsCi0JCQkJCXRoaXMtPmVzc2lkLmVsLmxlbikpCi0JCQkJbWF0 Y2hmbGFnID0gMDsKLQkJCWVsc2UKLQkJCQltYXRjaGZsYWcgPSAxOwotCQkJaWYgKG1hdGNoZmxh ZykgewotCQkJCWZvciAoaSA9IDA7IGkgPCB0aGlzLT5ic3NfY250OyBpKyspIHsKLQkJCQkJaWYg KGV0aGVyX2FkZHJfZXF1YWxfdW5hbGlnbmVkKHRoaXMtPmJzc19zZXRbaV0ucmVxLmJzc2lkLAot CQkJCQkJCQkgICAgICAgc2lnLnJlcS5ic3NpZCkpIHsKLQkJCQkJCW1hdGNoZmxhZyA9IDA7Ci0J CQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWlmIChtYXRjaGZsYWcgJiYgKGkg PCAyMCkpIHsKLQkJCQltZW1jcHkoJnRoaXMtPmJzc19zZXRbaV0ucmVxLAotCQkJCSAgICAgICAm c2lnLnJlcSwgc2l6ZW9mKHNpZy5yZXEpKTsKLQkJCQl0aGlzLT5ic3NfY250Kys7Ci0JCQkJdGhp cy0+cnNzaSA9IHNpZy5yc3NpOwotCQkJCXRoaXMtPmJzc19zZXRbaV0ucnNzaSA9IHNpZy5yc3Np OwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmIChzaWcuc3RhdHVzID09IFdMMzUwMV9TVEFUVVNfVElN RU9VVCkgewotCQlwcl9kZWJ1ZygidGltZW91dCIpOwotCQl0aGlzLT5qb2luX3N0YV9ic3MgPSAw OwotCQlmb3IgKGkgPSB0aGlzLT5qb2luX3N0YV9ic3M7IGkgPCB0aGlzLT5ic3NfY250OyBpKysp Ci0JCQlpZiAoIXdsMzUwMV9tZ210X2pvaW4odGhpcywgaSkpCi0JCQkJYnJlYWs7Ci0JCXRoaXMt PmpvaW5fc3RhX2JzcyA9IGk7Ci0JCWlmICh0aGlzLT5qb2luX3N0YV9ic3MgPT0gdGhpcy0+YnNz X2NudCkgewotCQkJaWYgKHRoaXMtPm5ldF90eXBlID09IElXX01PREVfSU5GUkEpCi0JCQkJd2wz NTAxX21nbXRfc2Nhbih0aGlzLCAxMDApOwotCQkJZWxzZSB7Ci0JCQkJdGhpcy0+YWRob2NfdGlt ZXMrKzsKLQkJCQlpZiAodGhpcy0+YWRob2NfdGltZXMgPiBXTDM1MDFfTUFYX0FESE9DX1RSSUVT KQotCQkJCQl3bDM1MDFfbWdtdF9zdGFydCh0aGlzKTsKLQkJCQllbHNlCi0JCQkJCXdsMzUwMV9t Z210X3NjYW4odGhpcywgMTAwKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotLyoqCi0gKiB3bDM1MDFf YmxvY2tfaW50ZXJydXB0IC0gTWFzayBpbnRlcnJ1cHQgZnJvbSBTVVRSTwotICogQHRoaXM6IENh cmQKLSAqCi0gKiBNYXNrIGludGVycnVwdCBmcm9tIFNVVFJPLiAoaS5lLiBTVVRSTyBjYW5ub3Qg aW50ZXJydXB0IHRoZSBIT1NUKQotICogUmV0dXJuOiAxIGlmIGludGVycnVwdCBpcyBvcmlnaW5h bGx5IGVuYWJsZWQKLSAqLwotc3RhdGljIGludCB3bDM1MDFfYmxvY2tfaW50ZXJydXB0KHN0cnVj dCB3bDM1MDFfY2FyZCAqdGhpcykKLXsKLQl1OCBvbGQgPSBpbmIodGhpcy0+YmFzZV9hZGRyICsg V0wzNTAxX05JQ19HQ1IpOwotCXU4IG5ldyA9IG9sZCAmICh+KFdMMzUwMV9HQ1JfRUNJTlQgfCBX TDM1MDFfR0NSX0lOVDJFQyB8Ci0JCQlXTDM1MDFfR0NSX0VORUNJTlQpKTsKLQotCXdsMzUwMV9v dXRiKG5ldywgdGhpcy0+YmFzZV9hZGRyICsgV0wzNTAxX05JQ19HQ1IpOwotCXJldHVybiBvbGQg JiBXTDM1MDFfR0NSX0VORUNJTlQ7Ci19Ci0KLS8qKgotICogd2wzNTAxX3VuYmxvY2tfaW50ZXJy dXB0IC0gRW5hYmxlIGludGVycnVwdCBmcm9tIFNVVFJPCi0gKiBAdGhpczogQ2FyZAotICoKLSAq IEVuYWJsZSBpbnRlcnJ1cHQgZnJvbSBTVVRSTy4gKGkuZS4gU1VUUk8gY2FuIGludGVycnVwdCB0 aGUgSE9TVCkKLSAqIFJldHVybjogMSBpZiBpbnRlcnJ1cHQgaXMgb3JpZ2luYWxseSBlbmFibGVk Ci0gKi8KLXN0YXRpYyBpbnQgd2wzNTAxX3VuYmxvY2tfaW50ZXJydXB0KHN0cnVjdCB3bDM1MDFf Y2FyZCAqdGhpcykKLXsKLQl1OCBvbGQgPSBpbmIodGhpcy0+YmFzZV9hZGRyICsgV0wzNTAxX05J Q19HQ1IpOwotCXU4IG5ldyA9IChvbGQgJiB+KFdMMzUwMV9HQ1JfRUNJTlQgfCBXTDM1MDFfR0NS X0lOVDJFQykpIHwKLQkJICBXTDM1MDFfR0NSX0VORUNJTlQ7Ci0KLQl3bDM1MDFfb3V0YihuZXcs IHRoaXMtPmJhc2VfYWRkciArIFdMMzUwMV9OSUNfR0NSKTsKLQlyZXR1cm4gb2xkICYgV0wzNTAx X0dDUl9FTkVDSU5UOwotfQotCi0vKioKLSAqIHdsMzUwMV9yZWNlaXZlIC0gUmVjZWl2ZSBkYXRh IGZyb20gUmVjZWl2ZSBRdWV1ZS4KLSAqCi0gKiBSZWNlaXZlIGRhdGEgZnJvbSBSZWNlaXZlIFF1 ZXVlLgotICoKLSAqIEB0aGlzOiBjYXJkCi0gKiBAYmY6IGFkZHJlc3Mgb2YgaG9zdAotICogQHNp emU6IHNpemUgb2YgYnVmZmVyLgotICovCi1zdGF0aWMgdTE2IHdsMzUwMV9yZWNlaXZlKHN0cnVj dCB3bDM1MDFfY2FyZCAqdGhpcywgdTggKmJmLCB1MTYgc2l6ZSkKLXsKLQl1MTYgbmV4dF9hZGRy LCBuZXh0X2FkZHIxOwotCXU4ICpkYXRhID0gYmYgKyAxMjsKLQotCXNpemUgLT0gMTI7Ci0Jd2wz NTAxX2dldF9mcm9tX3dsYSh0aGlzLCB0aGlzLT5zdGFydF9zZWcgKyAyLAotCQkJICAgICZuZXh0 X2FkZHIsIHNpemVvZihuZXh0X2FkZHIpKTsKLQlpZiAoc2l6ZSA+IFdMMzUwMV9CTEtTWiAtIHNp emVvZihzdHJ1Y3Qgd2wzNTAxX3J4X2hkcikpIHsKLQkJd2wzNTAxX2dldF9mcm9tX3dsYSh0aGlz LAotCQkJCSAgICB0aGlzLT5zdGFydF9zZWcgKwotCQkJCQlzaXplb2Yoc3RydWN0IHdsMzUwMV9y eF9oZHIpLCBkYXRhLAotCQkJCSAgICBXTDM1MDFfQkxLU1ogLQotCQkJCQlzaXplb2Yoc3RydWN0 IHdsMzUwMV9yeF9oZHIpKTsKLQkJc2l6ZSAtPSBXTDM1MDFfQkxLU1ogLSBzaXplb2Yoc3RydWN0 IHdsMzUwMV9yeF9oZHIpOwotCQlkYXRhICs9IFdMMzUwMV9CTEtTWiAtIHNpemVvZihzdHJ1Y3Qg d2wzNTAxX3J4X2hkcik7Ci0JfSBlbHNlIHsKLQkJd2wzNTAxX2dldF9mcm9tX3dsYSh0aGlzLAot CQkJCSAgICB0aGlzLT5zdGFydF9zZWcgKwotCQkJCQlzaXplb2Yoc3RydWN0IHdsMzUwMV9yeF9o ZHIpLAotCQkJCSAgICBkYXRhLCBzaXplKTsKLQkJc2l6ZSA9IDA7Ci0JfQotCXdoaWxlIChzaXpl ID4gMCkgewotCQlpZiAoc2l6ZSA+IFdMMzUwMV9CTEtTWiAtIDUpIHsKLQkJCXdsMzUwMV9nZXRf ZnJvbV93bGEodGhpcywgbmV4dF9hZGRyICsgNSwgZGF0YSwKLQkJCQkJICAgIFdMMzUwMV9CTEtT WiAtIDUpOwotCQkJc2l6ZSAtPSBXTDM1MDFfQkxLU1ogLSA1OwotCQkJZGF0YSArPSBXTDM1MDFf QkxLU1ogLSA1OwotCQkJd2wzNTAxX2dldF9mcm9tX3dsYSh0aGlzLCBuZXh0X2FkZHIgKyAyLCAm bmV4dF9hZGRyMSwKLQkJCQkJICAgIHNpemVvZihuZXh0X2FkZHIxKSk7Ci0JCQluZXh0X2FkZHIg PSBuZXh0X2FkZHIxOwotCQl9IGVsc2UgewotCQkJd2wzNTAxX2dldF9mcm9tX3dsYSh0aGlzLCBu ZXh0X2FkZHIgKyA1LCBkYXRhLCBzaXplKTsKLQkJCXNpemUgPSAwOwotCQl9Ci0JfQotCXJldHVy biAwOwotfQotCi1zdGF0aWMgdm9pZCB3bDM1MDFfZXNicV9yZXFfZnJlZShzdHJ1Y3Qgd2wzNTAx X2NhcmQgKnRoaXMpCi17Ci0JdTggdG1wOwotCXUxNiBhZGRyOwotCi0JaWYgKHRoaXMtPmVzYnFf cmVxX2hlYWQgPT0gdGhpcy0+ZXNicV9yZXFfdGFpbCkKLQkJZ290byBvdXQ7Ci0Jd2wzNTAxX2dl dF9mcm9tX3dsYSh0aGlzLCB0aGlzLT5lc2JxX3JlcV90YWlsICsgMywgJnRtcCwgc2l6ZW9mKHRt cCkpOwotCWlmICghKHRtcCAmIDB4ODApKQotCQlnb3RvIG91dDsKLQl3bDM1MDFfZ2V0X2Zyb21f d2xhKHRoaXMsIHRoaXMtPmVzYnFfcmVxX3RhaWwsICZhZGRyLCBzaXplb2YoYWRkcikpOwotCXds MzUwMV9mcmVlX3R4X2J1ZmZlcih0aGlzLCBhZGRyKTsKLQl0aGlzLT5lc2JxX3JlcV90YWlsICs9 IDQ7Ci0JaWYgKHRoaXMtPmVzYnFfcmVxX3RhaWwgPj0gdGhpcy0+ZXNicV9yZXFfZW5kKQotCQl0 aGlzLT5lc2JxX3JlcV90YWlsID0gdGhpcy0+ZXNicV9yZXFfc3RhcnQ7Ci1vdXQ6Ci0JcmV0dXJu OwotfQotCi1zdGF0aWMgaW50IHdsMzUwMV9lc2JxX2NvbmZpcm0oc3RydWN0IHdsMzUwMV9jYXJk ICp0aGlzKQotewotCXU4IHRtcDsKLQotCXdsMzUwMV9nZXRfZnJvbV93bGEodGhpcywgdGhpcy0+ ZXNicV9jb25maXJtICsgMywgJnRtcCwgc2l6ZW9mKHRtcCkpOwotCXJldHVybiB0bXAgJiAweDgw OwotfQotCi1zdGF0aWMgdm9pZCB3bDM1MDFfb25saW5lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYp Ci17Ci0Jc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXBy aW50ayhLRVJOX0lORk8gIiVzOiBXaXJlbGVzcyBMQU4gb25saW5lLiBCU1NJRDogJXBNXG4iLAot CSAgICAgICBkZXYtPm5hbWUsIHRoaXMtPmJzc2lkKTsKLQluZXRpZl93YWtlX3F1ZXVlKGRldik7 Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMzUwMV9lc2JxX2NvbmZpcm1fZG9uZShzdHJ1Y3Qgd2wzNTAx X2NhcmQgKnRoaXMpCi17Ci0JdTggdG1wID0gMDsKLQotCXdsMzUwMV9zZXRfdG9fd2xhKHRoaXMs IHRoaXMtPmVzYnFfY29uZmlybSArIDMsICZ0bXAsIHNpemVvZih0bXApKTsKLQl0aGlzLT5lc2Jx X2NvbmZpcm0gKz0gNDsKLQlpZiAodGhpcy0+ZXNicV9jb25maXJtID49IHRoaXMtPmVzYnFfY29u ZmlybV9lbmQpCi0JCXRoaXMtPmVzYnFfY29uZmlybSA9IHRoaXMtPmVzYnFfY29uZmlybV9zdGFy dDsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfbWdtdF9hdXRoKHN0cnVjdCB3bDM1MDFfY2FyZCAq dGhpcykKLXsKLQlzdHJ1Y3Qgd2wzNTAxX2F1dGhfcmVxIHNpZyA9IHsKLQkJLnNpZ19pZAkgPSBX TDM1MDFfU0lHX0FVVEhfUkVRLAotCQkudHlwZQkgPSBXTDM1MDFfU1lTX1RZUEVfT1BFTiwKLQkJ LnRpbWVvdXQgPSAxMDAwLAotCX07Ci0KLQlwcl9kZWJ1ZygiZW50cnkiKTsKLQltZW1jcHkoc2ln Lm1hY19hZGRyLCB0aGlzLT5ic3NpZCwgRVRIX0FMRU4pOwotCXJldHVybiB3bDM1MDFfZXNicV9l eGVjKHRoaXMsICZzaWcsIHNpemVvZihzaWcpKTsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfbWdt dF9hc3NvY2lhdGlvbihzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMpCi17Ci0Jc3RydWN0IHdsMzUw MV9hc3NvY19yZXEgc2lnID0gewotCQkuc2lnX2lkCQkgPSBXTDM1MDFfU0lHX0FTU09DX1JFUSwK LQkJLnRpbWVvdXQJID0gMTAwMCwKLQkJLmxpc3Rlbl9pbnRlcnZhbCA9IDUsCi0JCS5jYXBfaW5m bwkgPSB0aGlzLT5jYXBfaW5mbywKLQl9OwotCi0JcHJfZGVidWcoImVudHJ5Iik7Ci0JbWVtY3B5 KHNpZy5tYWNfYWRkciwgdGhpcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQlyZXR1cm4gd2wzNTAxX2Vz YnFfZXhlYyh0aGlzLCAmc2lnLCBzaXplb2Yoc2lnKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMzUw MV9tZ210X2pvaW5fY29uZmlybShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgYWRkcikKLXsK LQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCB3 bDM1MDFfam9pbl9jb25maXJtIHNpZzsKLQotCXByX2RlYnVnKCJlbnRyeSIpOwotCXdsMzUwMV9n ZXRfZnJvbV93bGEodGhpcywgYWRkciwgJnNpZywgc2l6ZW9mKHNpZykpOwotCWlmIChzaWcuc3Rh dHVzID09IFdMMzUwMV9TVEFUVVNfU1VDQ0VTUykgewotCQlpZiAodGhpcy0+bmV0X3R5cGUgPT0g SVdfTU9ERV9JTkZSQSkgewotCQkJaWYgKHRoaXMtPmpvaW5fc3RhX2JzcyA8IHRoaXMtPmJzc19j bnQpIHsKLQkJCQljb25zdCBpbnQgaSA9IHRoaXMtPmpvaW5fc3RhX2JzczsKLQkJCQltZW1jcHko dGhpcy0+YnNzaWQsCi0JCQkJICAgICAgIHRoaXMtPmJzc19zZXRbaV0ucmVxLmJzc2lkLCBFVEhf QUxFTik7Ci0JCQkJdGhpcy0+Y2hhbiA9IHRoaXMtPmJzc19zZXRbaV0ucmVxLmRzX3BzZXQuY2hh bjsKLQkJCQlpd19jb3B5X21nbXRfaW5mb19lbGVtZW50KCZ0aGlzLT5rZWVwX2Vzc2lkLmVsLAot CQkJCQkJICAgICAmdGhpcy0+YnNzX3NldFtpXS5yZXEuc3NpZC5lbCk7Ci0JCQkJd2wzNTAxX21n bXRfYXV0aCh0aGlzKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWNvbnN0IGludCBpID0gdGhpcy0+ am9pbl9zdGFfYnNzOwotCi0JCQltZW1jcHkoJnRoaXMtPmJzc2lkLCAmdGhpcy0+YnNzX3NldFtp XS5yZXEuYnNzaWQsIEVUSF9BTEVOKTsKLQkJCXRoaXMtPmNoYW4gPSB0aGlzLT5ic3Nfc2V0W2ld LnJlcS5kc19wc2V0LmNoYW47Ci0JCQlpd19jb3B5X21nbXRfaW5mb19lbGVtZW50KCZ0aGlzLT5r ZWVwX2Vzc2lkLmVsLAotCQkJCQkJICAmdGhpcy0+YnNzX3NldFtpXS5yZXEuc3NpZC5lbCk7Ci0J CQl3bDM1MDFfb25saW5lKGRldik7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgaTsKLQkJdGhpcy0+ am9pbl9zdGFfYnNzKys7Ci0JCWZvciAoaSA9IHRoaXMtPmpvaW5fc3RhX2JzczsgaSA8IHRoaXMt PmJzc19jbnQ7IGkrKykKLQkJCWlmICghd2wzNTAxX21nbXRfam9pbih0aGlzLCBpKSkKLQkJCQli cmVhazsKLQkJdGhpcy0+am9pbl9zdGFfYnNzID0gaTsKLQkJaWYgKHRoaXMtPmpvaW5fc3RhX2Jz cyA9PSB0aGlzLT5ic3NfY250KSB7Ci0JCQlpZiAodGhpcy0+bmV0X3R5cGUgPT0gSVdfTU9ERV9J TkZSQSkKLQkJCQl3bDM1MDFfbWdtdF9zY2FuKHRoaXMsIDEwMCk7Ci0JCQllbHNlIHsKLQkJCQl0 aGlzLT5hZGhvY190aW1lcysrOwotCQkJCWlmICh0aGlzLT5hZGhvY190aW1lcyA+IFdMMzUwMV9N QVhfQURIT0NfVFJJRVMpCi0JCQkJCXdsMzUwMV9tZ210X3N0YXJ0KHRoaXMpOwotCQkJCWVsc2UK LQkJCQkJd2wzNTAxX21nbXRfc2Nhbih0aGlzLCAxMDApOwotCQkJfQotCQl9Ci0JfQotfQotCi1z dGF0aWMgaW5saW5lIHZvaWQgd2wzNTAxX2FsYXJtX2ludGVycnVwdChzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LAotCQkJCQkgIHN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcykKLXsKLQlpZiAodGhpcy0+ bmV0X3R5cGUgPT0gSVdfTU9ERV9JTkZSQSkgewotCQlwcmludGsoS0VSTl9JTkZPICJXaXJlbGVz cyBMQU4gb2ZmbGluZVxuIik7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJd2wzNTAxX21n bXRfcmVzeW5jKHRoaXMpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdsMzUwMV9tZF9j b25maXJtX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgICAgc3Ry dWN0IHdsMzUwMV9jYXJkICp0aGlzLAotCQkJCQkgICAgICAgdTE2IGFkZHIpCi17Ci0Jc3RydWN0 IHdsMzUwMV9tZF9jb25maXJtIHNpZzsKLQotCXByX2RlYnVnKCJlbnRyeSIpOwotCXdsMzUwMV9n ZXRfZnJvbV93bGEodGhpcywgYWRkciwgJnNpZywgc2l6ZW9mKHNpZykpOwotCXdsMzUwMV9mcmVl X3R4X2J1ZmZlcih0aGlzLCBzaWcuZGF0YSk7Ci0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2 KSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd2wz NTAxX21kX2luZF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICAgc3Ry dWN0IHdsMzUwMV9jYXJkICp0aGlzLCB1MTYgYWRkcikKLXsKLQlzdHJ1Y3Qgd2wzNTAxX21kX2lu ZCBzaWc7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1OCByc3NpLCBhZGRyNFtFVEhfQUxFTl07 Ci0JdTE2IHBrdF9sZW47Ci0KLQl3bDM1MDFfZ2V0X2Zyb21fd2xhKHRoaXMsIGFkZHIsICZzaWcs IHNpemVvZihzaWcpKTsKLQl0aGlzLT5zdGFydF9zZWcgPSBzaWcuZGF0YTsKLQl3bDM1MDFfZ2V0 X2Zyb21fd2xhKHRoaXMsCi0JCQkgICAgc2lnLmRhdGEgKyBvZmZzZXRvZihzdHJ1Y3Qgd2wzNTAx X3J4X2hkciwgcnNzaSksCi0JCQkgICAgJnJzc2ksIHNpemVvZihyc3NpKSk7Ci0JdGhpcy0+cnNz aSA9IHJzc2kgPD0gNjMgPyAocnNzaSAqIDEwMCkgLyA2NCA6IDI1NTsKLQotCXdsMzUwMV9nZXRf ZnJvbV93bGEodGhpcywKLQkJCSAgICBzaWcuZGF0YSArCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IHds MzUwMV9yeF9oZHIsIGFkZHI0KSwKLQkJCSAgICAmYWRkcjQsIHNpemVvZihhZGRyNCkpOwotCWlm ICghKGFkZHI0WzBdID09IDB4QUEgJiYgYWRkcjRbMV0gPT0gMHhBQSAmJgotCSAgICAgIGFkZHI0 WzJdID09IDB4MDMgJiYgYWRkcjRbNF0gPT0gMHgwMCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAi VW5zdXBwb3J0ZWQgcGFja2V0IHR5cGUhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlwa3RfbGVuID0g c2lnLnNpemUgKyAxMiAtIDI0IC0gNCAtIDY7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9s ZW4gKyA1KTsKLQotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4n dCBhbGxvYyBhIHNrX2J1ZmYgb2Ygc2l6ZSAlZC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHBr dF9sZW4pOwotCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQl9IGVsc2UgewotCQlza2ItPmRl diA9IGRldjsKLQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsgLyogSVAgaGVhZGVycyBvbiAxNiBieXRl cyBib3VuZGFyaWVzICovCi0JCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgKHVuc2lnbmVk IGNoYXIgKikmc2lnLmFkZHIsCi0JCQkJCXNpemVvZihzaWcuYWRkcikpOwotCQl3bDM1MDFfcmVj ZWl2ZSh0aGlzLCBza2ItPmRhdGEsIHBrdF9sZW4pOwotCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7 Ci0JCXNrYi0+cHJvdG9jb2wJPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCWRldi0+c3Rh dHMucnhfcGFja2V0cysrOwotCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQlu ZXRpZl9yeChza2IpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdsMzUwMV9nZXRfY29u ZmlybV9pbnRlcnJ1cHQoc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzLAotCQkJCQkJdTE2IGFkZHIs IHZvaWQgKnNpZywgaW50IHNpemUpCi17Ci0JcHJfZGVidWcoImVudHJ5Iik7Ci0Jd2wzNTAxX2dl dF9mcm9tX3dsYSh0aGlzLCBhZGRyLCAmdGhpcy0+c2lnX2dldF9jb25maXJtLAotCQkJICAgIHNp emVvZih0aGlzLT5zaWdfZ2V0X2NvbmZpcm0pKTsKLQl3YWtlX3VwKCZ0aGlzLT53YWl0KTsKLX0K LQotc3RhdGljIGlubGluZSB2b2lkIHdsMzUwMV9zdGFydF9jb25maXJtX2ludGVycnVwdChzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkJICBzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMsCi0J CQkJCQkgIHUxNiBhZGRyKQotewotCXN0cnVjdCB3bDM1MDFfc3RhcnRfY29uZmlybSBzaWc7Ci0K LQlwcl9kZWJ1ZygiZW50cnkiKTsKLQl3bDM1MDFfZ2V0X2Zyb21fd2xhKHRoaXMsIGFkZHIsICZz aWcsIHNpemVvZihzaWcpKTsKLQlpZiAoc2lnLnN0YXR1cyA9PSBXTDM1MDFfU1RBVFVTX1NVQ0NF U1MpCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHds MzUwMV9hc3NvY19jb25maXJtX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJ CQkJICB1MTYgYWRkcikKLXsKLQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJp dihkZXYpOwotCXN0cnVjdCB3bDM1MDFfYXNzb2NfY29uZmlybSBzaWc7Ci0KLQlwcl9kZWJ1Zygi ZW50cnkiKTsKLQl3bDM1MDFfZ2V0X2Zyb21fd2xhKHRoaXMsIGFkZHIsICZzaWcsIHNpemVvZihz aWcpKTsKLQotCWlmIChzaWcuc3RhdHVzID09IFdMMzUwMV9TVEFUVVNfU1VDQ0VTUykKLQkJd2wz NTAxX29ubGluZShkZXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd2wzNTAxX2F1dGhfY29u ZmlybV9pbnRlcnJ1cHQoc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzLAotCQkJCQkJIHUxNiBhZGRy KQotewotCXN0cnVjdCB3bDM1MDFfYXV0aF9jb25maXJtIHNpZzsKLQotCXByX2RlYnVnKCJlbnRy eSIpOwotCXdsMzUwMV9nZXRfZnJvbV93bGEodGhpcywgYWRkciwgJnNpZywgc2l6ZW9mKHNpZykp OwotCi0JaWYgKHNpZy5zdGF0dXMgPT0gV0wzNTAxX1NUQVRVU19TVUNDRVNTKQotCQl3bDM1MDFf bWdtdF9hc3NvY2lhdGlvbih0aGlzKTsKLQllbHNlCi0JCXdsMzUwMV9tZ210X3Jlc3luYyh0aGlz KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdsMzUwMV9yeF9pbnRlcnJ1cHQoc3RydWN0IG5l dF9kZXZpY2UgKmRldikKLXsKLQlpbnQgbW9yZXBrdHM7Ci0JdTE2IGFkZHI7Ci0JdTggc2lnX2lk OwotCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlwcl9k ZWJ1ZygiZW50cnkiKTsKLWxvb3A6Ci0JbW9yZXBrdHMgPSAwOwotCWlmICghd2wzNTAxX2VzYnFf Y29uZmlybSh0aGlzKSkKLQkJZ290byBmcmVlOwotCXdsMzUwMV9nZXRfZnJvbV93bGEodGhpcywg dGhpcy0+ZXNicV9jb25maXJtLCAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKLQl3bDM1MDFfZ2V0X2Zy b21fd2xhKHRoaXMsIGFkZHIgKyAyLCAmc2lnX2lkLCBzaXplb2Yoc2lnX2lkKSk7Ci0KLQlzd2l0 Y2ggKHNpZ19pZCkgewotCWNhc2UgV0wzNTAxX1NJR19ERUFVVEhfSU5EOgotCWNhc2UgV0wzNTAx X1NJR19ESVNBU1NPQ19JTkQ6Ci0JY2FzZSBXTDM1MDFfU0lHX0FMQVJNOgotCQl3bDM1MDFfYWxh cm1faW50ZXJydXB0KGRldiwgdGhpcyk7Ci0JCWJyZWFrOwotCWNhc2UgV0wzNTAxX1NJR19NRF9D T05GSVJNOgotCQl3bDM1MDFfbWRfY29uZmlybV9pbnRlcnJ1cHQoZGV2LCB0aGlzLCBhZGRyKTsK LQkJYnJlYWs7Ci0JY2FzZSBXTDM1MDFfU0lHX01EX0lORDoKLQkJd2wzNTAxX21kX2luZF9pbnRl cnJ1cHQoZGV2LCB0aGlzLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBXTDM1MDFfU0lHX0dFVF9D T05GSVJNOgotCQl3bDM1MDFfZ2V0X2NvbmZpcm1faW50ZXJydXB0KHRoaXMsIGFkZHIsCi0JCQkJ CSAgICAgJnRoaXMtPnNpZ19nZXRfY29uZmlybSwKLQkJCQkJICAgICBzaXplb2YodGhpcy0+c2ln X2dldF9jb25maXJtKSk7Ci0JCWJyZWFrOwotCWNhc2UgV0wzNTAxX1NJR19QV1JfTUdNVF9DT05G SVJNOgotCQl3bDM1MDFfZ2V0X2NvbmZpcm1faW50ZXJydXB0KHRoaXMsIGFkZHIsCi0JCQkJCSAg ICAgJnRoaXMtPnNpZ19wd3JfbWdtdF9jb25maXJtLAotCQkJCQkgICAgc2l6ZW9mKHRoaXMtPnNp Z19wd3JfbWdtdF9jb25maXJtKSk7Ci0JCWJyZWFrOwotCWNhc2UgV0wzNTAxX1NJR19TVEFSVF9D T05GSVJNOgotCQl3bDM1MDFfc3RhcnRfY29uZmlybV9pbnRlcnJ1cHQoZGV2LCB0aGlzLCBhZGRy KTsKLQkJYnJlYWs7Ci0JY2FzZSBXTDM1MDFfU0lHX1NDQU5fQ09ORklSTToKLQkJd2wzNTAxX21n bXRfc2Nhbl9jb25maXJtKHRoaXMsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIFdMMzUwMV9TSUdf Sk9JTl9DT05GSVJNOgotCQl3bDM1MDFfbWdtdF9qb2luX2NvbmZpcm0oZGV2LCBhZGRyKTsKLQkJ YnJlYWs7Ci0JY2FzZSBXTDM1MDFfU0lHX0FTU09DX0NPTkZJUk06Ci0JCXdsMzUwMV9hc3NvY19j b25maXJtX2ludGVycnVwdChkZXYsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIFdMMzUwMV9TSUdf QVVUSF9DT05GSVJNOgotCQl3bDM1MDFfYXV0aF9jb25maXJtX2ludGVycnVwdCh0aGlzLCBhZGRy KTsKLQkJYnJlYWs7Ci0JY2FzZSBXTDM1MDFfU0lHX1JFU1lOQ19DT05GSVJNOgotCQl3bDM1MDFf bWdtdF9yZXN5bmModGhpcyk7IC8qIEZJWE1FOiBzaG91bGQgYmUgcmVzeW5jX2NvbmZpcm0gKi8K LQkJYnJlYWs7Ci0JfQotCXdsMzUwMV9lc2JxX2NvbmZpcm1fZG9uZSh0aGlzKTsKLQltb3JlcGt0 cyA9IDE7Ci0JLyogZnJlZSByZXF1ZXN0IGlmIG5lY2Vzc2FyeSAqLwotZnJlZToKLQl3bDM1MDFf ZXNicV9yZXFfZnJlZSh0aGlzKTsKLQlpZiAobW9yZXBrdHMpCi0JCWdvdG8gbG9vcDsKLX0KLQot c3RhdGljIGlubGluZSB2b2lkIHdsMzUwMV9hY2tfaW50ZXJydXB0KHN0cnVjdCB3bDM1MDFfY2Fy ZCAqdGhpcykKLXsKLQl3bDM1MDFfb3V0YihXTDM1MDFfR0NSX0VDSU5ULCB0aGlzLT5iYXNlX2Fk ZHIgKyBXTDM1MDFfTklDX0dDUik7Ci19Ci0KLS8qKgotICogd2wzNTAxX2ludGVycnVwdCAtIEhh cmR3YXJlIGludGVycnVwdCBmcm9tIGNhcmQuCi0gKiBAaXJxOiBJbnRlcnJ1cHQgbnVtYmVyCi0g KiBAZGV2X2lkOiBuZXRfZGV2aWNlCi0gKgotICogV2UgbXVzdCBhY2tub3dsZWRnZSB0aGUgaW50 ZXJydXB0IGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBibG9jayB0aGUKLSAqIGludGVycnVwdCBm cm9tIHRoZSBzYW1lIGNhcmQgaW1tZWRpYXRlbHkgdG8gcHJldmVudCByZS1lbnRyeS4KLSAqCi0g KiBCZWZvcmUgYWNjZXNzaW5nIHRoZSBDb250cm9sX1N0YXR1c19CbG9jaywgd2UgbXVzdCBsb2Nr IFNVVFJPIGZpcnN0LgotICogT24gdGhlIG90aGVyIGhhbmQsIHRvIHByZXZlbnQgU1VUUk8gZnJv bSBtYWxmdW5jdGlvbmluZywgd2UgbXVzdAotICogdW5sb2NrIHRoZSBTVVRSTyBhcyBzb29uIGFz IHBvc3NpYmxlLgotICovCi1zdGF0aWMgaXJxcmV0dXJuX3Qgd2wzNTAxX2ludGVycnVwdChpbnQg aXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsK LQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXM7Ci0KLQl0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsK LQlzcGluX2xvY2soJnRoaXMtPmxvY2spOwotCXdsMzUwMV9hY2tfaW50ZXJydXB0KHRoaXMpOwot CXdsMzUwMV9ibG9ja19pbnRlcnJ1cHQodGhpcyk7Ci0Jd2wzNTAxX3J4X2ludGVycnVwdChkZXYp OwotCXdsMzUwMV91bmJsb2NrX2ludGVycnVwdCh0aGlzKTsKLQlzcGluX3VubG9jaygmdGhpcy0+ bG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wzNTAxX3Jl c2V0X2JvYXJkKHN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcykKLXsKLQl1OCB0bXAgPSAwOwotCWlu dCBpLCByYyA9IDA7Ci0KLQkvKiBDb3Jlc2V0ICovCi0Jd2wzNTAxX291dGJfcChXTDM1MDFfR0NS X0NPUkVTRVQsIHRoaXMtPmJhc2VfYWRkciArIFdMMzUwMV9OSUNfR0NSKTsKLQl3bDM1MDFfb3V0 Yl9wKDAsIHRoaXMtPmJhc2VfYWRkciArIFdMMzUwMV9OSUNfR0NSKTsKLQl3bDM1MDFfb3V0Yl9w KFdMMzUwMV9HQ1JfQ09SRVNFVCwgdGhpcy0+YmFzZV9hZGRyICsgV0wzNTAxX05JQ19HQ1IpOwot Ci0JLyogUmVzZXQgU1JBTSAweDQ4MCB0byB6ZXJvICovCi0Jd2wzNTAxX3NldF90b193bGEodGhp cywgMHg0ODAsICZ0bXAsIHNpemVvZih0bXApKTsKLQotCS8qIFN0YXJ0IHVwICovCi0Jd2wzNTAx X291dGJfcCgwLCB0aGlzLT5iYXNlX2FkZHIgKyBXTDM1MDFfTklDX0dDUik7Ci0KLQlXTDM1MDFf Tk9QTE9PUCgxMDI0ICogNTApOwotCi0Jd2wzNTAxX3VuYmxvY2tfaW50ZXJydXB0KHRoaXMpOwkv KiBhY21lOiB3YXMgY29tbWVudGVkICovCi0KLQkvKiBQb2xsaW5nIFNlbGZfVGVzdF9TdGF0dXMg Ki8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewotCQl3bDM1MDFfZ2V0X2Zyb21fd2xh KHRoaXMsIDB4NDgwLCAmdG1wLCBzaXplb2YodG1wKSk7Ci0KLQkJaWYgKHRtcCA9PSAnVycpIHsK LQkJCS8qIGZpcm13YXJlIGNvbXBsZXRlIGFsbCB0ZXN0IHN1Y2Nlc3NmdWxseSAqLwotCQkJdG1w ID0gJ0EnOwotCQkJd2wzNTAxX3NldF90b193bGEodGhpcywgMHg0ODAsICZ0bXAsIHNpemVvZih0 bXApKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCVdMMzUwMV9OT1BMT09QKDEwKTsKLQl9Ci0JcHJp bnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byByZXNldCB0aGUgYm9hcmQhXG4iLCBfX2Z1 bmNfXyk7Ci0JcmMgPSAtRU5PREVWOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCB3bDM1MDFfaW5pdF9maXJtd2FyZShzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMpCi17Ci0JdTE2 IHB0ciwgbmV4dDsKLQlpbnQgcmMgPSB3bDM1MDFfcmVzZXRfYm9hcmQodGhpcyk7Ci0KLQlpZiAo cmMpCi0JCWdvdG8gZmFpbDsKLQl0aGlzLT5jYXJkX25hbWVbMF0gPSAnXDAnOwotCXdsMzUwMV9n ZXRfZnJvbV93bGEodGhpcywgMHgxYTAwLAotCQkJICAgIHRoaXMtPmNhcmRfbmFtZSwgc2l6ZW9m KHRoaXMtPmNhcmRfbmFtZSkpOwotCXRoaXMtPmNhcmRfbmFtZVtzaXplb2YodGhpcy0+Y2FyZF9u YW1lKSAtIDFdID0gJ1wwJzsKLQl0aGlzLT5maXJtd2FyZV9kYXRlWzBdID0gJ1wwJzsKLQl3bDM1 MDFfZ2V0X2Zyb21fd2xhKHRoaXMsIDB4MWE0MCwKLQkJCSAgICB0aGlzLT5maXJtd2FyZV9kYXRl LCBzaXplb2YodGhpcy0+ZmlybXdhcmVfZGF0ZSkpOwotCXRoaXMtPmZpcm13YXJlX2RhdGVbc2l6 ZW9mKHRoaXMtPmZpcm13YXJlX2RhdGUpIC0gMV0gPSAnXDAnOwotCS8qIFN3aXRjaCB0byBTUkFN IFBhZ2UgMCAqLwotCXdsMzUwMV9zd2l0Y2hfcGFnZSh0aGlzLCBXTDM1MDFfQlNTX1NQQUdFMCk7 Ci0JLyogUmVhZCBwYXJhbWV0ZXIgZnJvbSBjYXJkICovCi0Jd2wzNTAxX2dldF9mcm9tX3dsYSh0 aGlzLCAweDQ4MiwgJnRoaXMtPmVzYnFfcmVxX3N0YXJ0LCAyKTsKLQl3bDM1MDFfZ2V0X2Zyb21f d2xhKHRoaXMsIDB4NDg2LCAmdGhpcy0+ZXNicV9yZXFfZW5kLCAyKTsKLQl3bDM1MDFfZ2V0X2Zy b21fd2xhKHRoaXMsIDB4NDg4LCAmdGhpcy0+ZXNicV9jb25maXJtX3N0YXJ0LCAyKTsKLQl3bDM1 MDFfZ2V0X2Zyb21fd2xhKHRoaXMsIDB4NDhjLCAmdGhpcy0+ZXNicV9jb25maXJtX2VuZCwgMik7 Ci0Jd2wzNTAxX2dldF9mcm9tX3dsYSh0aGlzLCAweDQ4ZSwgJnRoaXMtPnR4X2J1ZmZlcl9oZWFk LCAyKTsKLQl3bDM1MDFfZ2V0X2Zyb21fd2xhKHRoaXMsIDB4NDkyLCAmdGhpcy0+dHhfYnVmZmVy X3NpemUsIDIpOwotCXRoaXMtPmVzYnFfcmVxX3RhaWwJPSB0aGlzLT5lc2JxX3JlcV9oZWFkID0g dGhpcy0+ZXNicV9yZXFfc3RhcnQ7Ci0JdGhpcy0+ZXNicV9yZXFfZW5kICAgICArPSB0aGlzLT5l c2JxX3JlcV9zdGFydDsKLQl0aGlzLT5lc2JxX2NvbmZpcm0JPSB0aGlzLT5lc2JxX2NvbmZpcm1f c3RhcnQ7Ci0JdGhpcy0+ZXNicV9jb25maXJtX2VuZCArPSB0aGlzLT5lc2JxX2NvbmZpcm1fc3Rh cnQ7Ci0JLyogSW5pdGlhbCBUeCBCdWZmZXIgKi8KLQl0aGlzLT50eF9idWZmZXJfY250ID0gMTsK LQlwdHIgPSB0aGlzLT50eF9idWZmZXJfaGVhZDsKLQluZXh0ID0gcHRyICsgV0wzNTAxX0JMS1Na OwotCXdoaWxlICgobmV4dCAtIHRoaXMtPnR4X2J1ZmZlcl9oZWFkKSA8IHRoaXMtPnR4X2J1ZmZl cl9zaXplKSB7Ci0JCXRoaXMtPnR4X2J1ZmZlcl9jbnQrKzsKLQkJd2wzNTAxX3NldF90b193bGEo dGhpcywgcHRyLCAmbmV4dCwgc2l6ZW9mKG5leHQpKTsKLQkJcHRyID0gbmV4dDsKLQkJbmV4dCA9 IHB0ciArIFdMMzUwMV9CTEtTWjsKLQl9Ci0JcmMgPSAwOwotCW5leHQgPSAwOwotCXdsMzUwMV9z ZXRfdG9fd2xhKHRoaXMsIHB0ciwgJm5leHQsIHNpemVvZihuZXh0KSk7Ci0JdGhpcy0+dHhfYnVm ZmVyX3RhaWwgPSBwdHI7Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotZmFpbDoKLQlwcmludGsoS0VSTl9X QVJOSU5HICIlczogZmFpbGVkIVxuIiwgX19mdW5jX18pOwotCWdvdG8gb3V0OwotfQotCi1zdGF0 aWMgaW50IHdsMzUwMV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB3 bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFn czsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKLQlsaW5rID0gdGhpcy0+cF9kZXY7Ci0K LQlzcGluX2xvY2tfaXJxc2F2ZSgmdGhpcy0+bG9jaywgZmxhZ3MpOwotCWxpbmstPm9wZW4tLTsK LQotCS8qIFN0b3Agd2wzNTAxX2hhcmRfc3RhcnRfeG1pdCgpIGZyb20gbm93IG9uICovCi0JbmV0 aWZfc3RvcF9xdWV1ZShkZXYpOwotCXdsMzUwMV9hY2tfaW50ZXJydXB0KHRoaXMpOwotCi0JLyog TWFzayBpbnRlcnJ1cHRzIGZyb20gdGhlIFNVVFJPICovCi0Jd2wzNTAxX2Jsb2NrX2ludGVycnVw dCh0aGlzKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBXTDM1MDEgY2xvc2VkXG4iLCBkZXYt Pm5hbWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoaXMtPmxvY2ssIGZsYWdzKTsKLQly ZXR1cm4gMDsKLX0KLQotLyoqCi0gKiB3bDM1MDFfcmVzZXQgLSBSZXNldCB0aGUgU1VUUk8uCi0g KiBAZGV2OiBuZXR3b3JrIGRldmljZQotICoKLSAqIEl0IGlzIGFsbW9zdCB0aGUgc2FtZSBhcyB3 bDM1MDFfb3BlbigpLiBJbiBmYWN0LCB3ZSBtYXkganVzdCB3bDM1MDFfY2xvc2UoKQotICogYW5k IHdsMzUwMV9vcGVuKCkgYWdhaW4sIGJ1dCBJIHdvdWxkbid0IGxpa2UgdG8gZnJlZV9pcnEoKSB3 aGVuIHRoZSBkcml2ZXIKLSAqIGlzIHJ1bm5pbmcuIEl0IHNlZW1zIHRvIGJlIGRhbmdlcm91cy4K LSAqLwotc3RhdGljIGludCB3bDM1MDFfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsK LQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYyA9 IC1FTk9ERVY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0 aGlzLT5sb2NrLCBmbGFncyk7Ci0Jd2wzNTAxX2Jsb2NrX2ludGVycnVwdCh0aGlzKTsKLQotCWlm ICh3bDM1MDFfaW5pdF9maXJtd2FyZSh0aGlzKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIl czogQ2FuJ3QgaW5pdGlhbGl6ZSBGaXJtd2FyZSFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwot CQkvKiBGcmVlIElSUSwgYW5kIG1hcmsgSVJRIGFzIHVudXNlZCAqLwotCQlmcmVlX2lycShkZXYt PmlycSwgZGV2KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBRdWV1ZSBoYXMgdG8gYmUg c3RhcnRlZCBvbmx5IHdoZW4gdGhlIENhcmQgaXMgU3RhcnRlZAotCSAqLwotCW5ldGlmX3N0b3Bf cXVldWUoZGV2KTsKLQl0aGlzLT5hZGhvY190aW1lcyA9IDA7Ci0Jd2wzNTAxX2Fja19pbnRlcnJ1 cHQodGhpcyk7Ci0Jd2wzNTAxX3VuYmxvY2tfaW50ZXJydXB0KHRoaXMpOwotCXdsMzUwMV9tZ210 X3NjYW4odGhpcywgMTAwKTsKLQlwcl9kZWJ1ZygiJXM6IGRldmljZSByZXNldCIsIGRldi0+bmFt ZSk7Ci0JcmMgPSAwOwotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoaXMtPmxvY2ss IGZsYWdzKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMzUwMV90eF90aW1lb3V0 KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKQotewotCXN0cnVj dCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwotCWludCByYzsKLQotCXN0 YXRzLT50eF9lcnJvcnMrKzsKLQlyYyA9IHdsMzUwMV9yZXNldChkZXYpOwotCWlmIChyYykKLQkJ cHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzZXR0aW5nIGNhcmQgb24gVHggdGltZW91 dCFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHJjKTsKLQllbHNlIHsKLQkJbmV0aWZfdHJhbnNf dXBkYXRlKGRldik7IC8qIHByZXZlbnQgdHggdGltZW91dCAqLwotCQluZXRpZl93YWtlX3F1ZXVl KGRldik7Ci0JfQotfQotCi0vKgotICogUmV0dXJuIDogMCAtIE9LCi0gKgkgICAgMSAtIENvdWxk IG5vdCB0cmFuc21pdCAoZGV2X3F1ZXVlX3htaXQgd2lsbCBxdWV1ZSBpdCkKLSAqCQlhbmQgdHJ5 IHRvIHNlbnQgaXQgbGF0ZXIKLSAqLwotc3RhdGljIG5ldGRldl90eF90IHdsMzUwMV9oYXJkX3N0 YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpk ZXYpCi17Ci0JaW50IGVuYWJsZWQsIHJjOwotCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5l dGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFz YXZlKCZ0aGlzLT5sb2NrLCBmbGFncyk7Ci0JZW5hYmxlZCA9IHdsMzUwMV9ibG9ja19pbnRlcnJ1 cHQodGhpcyk7Ci0JcmMgPSB3bDM1MDFfc2VuZF9wa3QodGhpcywgc2tiLT5kYXRhLCBza2ItPmxl bik7Ci0JaWYgKGVuYWJsZWQpCi0JCXdsMzUwMV91bmJsb2NrX2ludGVycnVwdCh0aGlzKTsKLQlp ZiAocmMpIHsKLQkJKytkZXYtPnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCW5ldGlmX3N0b3BfcXVldWUo ZGV2KTsKLQl9IGVsc2UgewotCQkrK2Rldi0+c3RhdHMudHhfcGFja2V0czsKLQkJZGV2LT5zdGF0 cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLQotCQlp ZiAodGhpcy0+dHhfYnVmZmVyX2NudCA8IDIpCi0JCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0J fQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoaXMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4g TkVUREVWX1RYX09LOwotfQotCi1zdGF0aWMgaW50IHdsMzUwMV9vcGVuKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYpCi17Ci0JaW50IHJjID0gLUVOT0RFVjsKLQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRo aXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHBj bWNpYV9kZXZpY2UgKmxpbms7Ci0JbGluayA9IHRoaXMtPnBfZGV2OwotCi0Jc3Bpbl9sb2NrX2ly cXNhdmUoJnRoaXMtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5r KSkKLQkJZ290byBvdXQ7Ci0JbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCWxpbmstPm9wZW4r KzsKLQotCS8qIEluaXRpYWwgV0wzNTAxIGZpcm13YXJlICovCi0JcHJfZGVidWcoIiVzOiBJbml0 aWFsaXplIFdMMzUwMSBmaXJtd2FyZS4uLiIsIGRldi0+bmFtZSk7Ci0JaWYgKHdsMzUwMV9pbml0 X2Zpcm13YXJlKHRoaXMpKQotCQlnb3RvIGZhaWw7Ci0JLyogSW5pdGlhbCBkZXZpY2UgdmFyaWFi bGVzICovCi0JdGhpcy0+YWRob2NfdGltZXMgPSAwOwotCS8qIEFja25vd2xlZGdlIEludGVycnVw dCwgZm9yIGNsZWFuaW5nIGxhc3Qgc3RhdGUgKi8KLQl3bDM1MDFfYWNrX2ludGVycnVwdCh0aGlz KTsKLQotCS8qIEVuYWJsZSBpbnRlcnJ1cHQgZnJvbSBjYXJkIGFmdGVyIGFsbCAqLwotCXdsMzUw MV91bmJsb2NrX2ludGVycnVwdCh0aGlzKTsKLQl3bDM1MDFfbWdtdF9zY2FuKHRoaXMsIDEwMCk7 Ci0JcmMgPSAwOwotCXByX2RlYnVnKCIlczogV0wzNTAxIG9wZW5lZCIsIGRldi0+bmFtZSk7Ci0J cHJpbnRrKEtFUk5fSU5GTyAiJXM6IENhcmQgTmFtZTogJXNcbiIKLQkJCSAiJXM6IEZpcm13YXJl IERhdGU6ICVzXG4iLAotCQkJIGRldi0+bmFtZSwgdGhpcy0+Y2FyZF9uYW1lLAotCQkJIGRldi0+ bmFtZSwgdGhpcy0+ZmlybXdhcmVfZGF0ZSk7Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmdGhpcy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByYzsKLWZhaWw6Ci0JcHJpbnRrKEtFUk5f V0FSTklORyAiJXM6IENhbid0IGluaXRpYWxpemUgZmlybXdhcmUhXG4iLCBkZXYtPm5hbWUpOwot CWdvdG8gb3V0OwotfQotCi1zdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKndsMzUwMV9nZXRf d2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgd2wzNTAx X2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3 c3RhdHMgPSAmdGhpcy0+d3N0YXRzOwotCXUzMiB2YWx1ZTsgLyogc2l6ZSBjaGVja2VkOiBpdCBp cyB1MzIgKi8KLQotCW1lbXNldCh3c3RhdHMsIDAsIHNpemVvZigqd3N0YXRzKSk7Ci0Jd3N0YXRz LT5zdGF0dXMgPSBuZXRpZl9ydW5uaW5nKGRldik7Ci0JaWYgKCF3bDM1MDFfZ2V0X21pYl92YWx1 ZSh0aGlzLCBXTDM1MDFfTUlCX0FUVFJfV0VQX0lDVl9FUlJPUl9DT1VOVCwKLQkJCQkgICZ2YWx1 ZSwgc2l6ZW9mKHZhbHVlKSkpCi0JCXdzdGF0cy0+ZGlzY2FyZC5jb2RlICs9IHZhbHVlOwotCWlm ICghd2wzNTAxX2dldF9taWJfdmFsdWUodGhpcywgV0wzNTAxX01JQl9BVFRSX1dFUF9VTkRFQ1JZ UFRBQkxFX0NPVU5ULAotCQkJCSAgJnZhbHVlLCBzaXplb2YodmFsdWUpKSkKLQkJd3N0YXRzLT5k aXNjYXJkLmNvZGUgKz0gdmFsdWU7Ci0JaWYgKCF3bDM1MDFfZ2V0X21pYl92YWx1ZSh0aGlzLCBX TDM1MDFfTUlCX0FUVFJfV0VQX0VYQ0xVREVEX0NPVU5ULAotCQkJCSAgJnZhbHVlLCBzaXplb2Yo dmFsdWUpKSkKLQkJd3N0YXRzLT5kaXNjYXJkLmNvZGUgKz0gdmFsdWU7Ci0JaWYgKCF3bDM1MDFf Z2V0X21pYl92YWx1ZSh0aGlzLCBXTDM1MDFfTUlCX0FUVFJfUkVUUllfQ09VTlQsCi0JCQkJICAm dmFsdWUsIHNpemVvZih2YWx1ZSkpKQotCQl3c3RhdHMtPmRpc2NhcmQucmV0cmllcwk9IHZhbHVl OwotCWlmICghd2wzNTAxX2dldF9taWJfdmFsdWUodGhpcywgV0wzNTAxX01JQl9BVFRSX0ZBSUxF RF9DT1VOVCwKLQkJCQkgICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpCi0JCXdzdGF0cy0+ZGlzY2Fy ZC5taXNjICs9IHZhbHVlOwotCWlmICghd2wzNTAxX2dldF9taWJfdmFsdWUodGhpcywgV0wzNTAx X01JQl9BVFRSX1JUU19GQUlMVVJFX0NPVU5ULAotCQkJCSAgJnZhbHVlLCBzaXplb2YodmFsdWUp KSkKLQkJd3N0YXRzLT5kaXNjYXJkLm1pc2MgKz0gdmFsdWU7Ci0JaWYgKCF3bDM1MDFfZ2V0X21p Yl92YWx1ZSh0aGlzLCBXTDM1MDFfTUlCX0FUVFJfQUNLX0ZBSUxVUkVfQ09VTlQsCi0JCQkJICAm dmFsdWUsIHNpemVvZih2YWx1ZSkpKQotCQl3c3RhdHMtPmRpc2NhcmQubWlzYyArPSB2YWx1ZTsK LQlpZiAoIXdsMzUwMV9nZXRfbWliX3ZhbHVlKHRoaXMsIFdMMzUwMV9NSUJfQVRUUl9GUkFNRV9E VVBMSUNBVEVfQ09VTlQsCi0JCQkJICAmdmFsdWUsIHNpemVvZih2YWx1ZSkpKQotCQl3c3RhdHMt PmRpc2NhcmQubWlzYyArPSB2YWx1ZTsKLQlyZXR1cm4gd3N0YXRzOwotfQotCi0vKioKLSAqIHds MzUwMV9kZXRhY2ggLSBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIKLSAqIEBsaW5rOiBGSUxM X0lOCi0gKgotICogVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuIFRoZSBkZXZpY2Ug aXMgZGUtcmVnaXN0ZXJlZCB3aXRoIENhcmQKLSAqIFNlcnZpY2VzLiBJZiBpdCBoYXMgYmVlbiBy ZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBhcmUgZnJlZWQuCi0gKiBPdGhlcndp c2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVh c2VkLgotICovCi1zdGF0aWMgdm9pZCB3bDM1MDFfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNl ICpsaW5rKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCi0JLyog SWYgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgY29uZmlndXJlZCBhbmQgYWN0aXZlLCB3ZSB3b24n dCBhY3R1YWxseQotCSAqIGRlbGV0ZSBpdCB5ZXQuICBJbnN0ZWFkLCBpdCBpcyBtYXJrZWQgc28g dGhhdCB3aGVuIHRoZSByZWxlYXNlKCkKLQkgKiBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoYXQgd2ls bCB0cmlnZ2VyIGEgcHJvcGVyIGRldGFjaCgpLiAqLwotCi0Jd2hpbGUgKGxpbmstPm9wZW4gPiAw KQotCQl3bDM1MDFfY2xvc2UoZGV2KTsKLQotCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQl3 bDM1MDFfcmVsZWFzZShsaW5rKTsKLQotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZnJlZV9u ZXRkZXYoZGV2KTsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfZ2V0X25hbWUoc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHVuaW9uIGl3 cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnNjcHkod3JxdS0+bmFtZSwgIklF RUUgODAyLjExLURTIiwgc2l6ZW9mKHdycXUtPm5hbWUpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCB3bDM1MDFfc2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3 X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIg KmV4dHJhKQotewotCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7 Ci0JaW50IGNoYW5uZWwgPSB3cnF1LT5mcmVxLm07Ci0JaW50IHJjID0gLUVJTlZBTDsKLQotCWlm IChpd192YWxpZF9jaGFubmVsKHRoaXMtPnJlZ19kb21haW4sIGNoYW5uZWwpKSB7Ci0JCXRoaXMt PmNoYW4gPSBjaGFubmVsOwotCQlyYyA9IHdsMzUwMV9yZXNldChkZXYpOwotCX0KLQlyZXR1cm4g cmM7Ci19Ci0KLXN0YXRpYyBpbnQgd2wzNTAxX2dldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1bmlvbiBpd3JlcV9kYXRh ICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRk ZXZfcHJpdihkZXYpOwotCi0Jd3JxdS0+ZnJlcS5tID0gMTAwMDAwICoKLQkJaWVlZTgwMjExX2No YW5uZWxfdG9fZnJlcXVlbmN5KHRoaXMtPmNoYW4sIE5MODAyMTFfQkFORF8yR0haKTsKLQl3cnF1 LT5mcmVxLmUgPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMzUwMV9zZXRfbW9k ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAot CQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0JaW50IHJjID0g LUVJTlZBTDsKLQotCWlmICh3cnF1LT5tb2RlID09IElXX01PREVfSU5GUkEgfHwKLQkgICAgd3Jx dS0+bW9kZSA9PSBJV19NT0RFX0FESE9DIHx8Ci0JICAgIHdycXUtPm1vZGUgPT0gSVdfTU9ERV9B VVRPKSB7Ci0JCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7Ci0K LQkJdGhpcy0+bmV0X3R5cGUgPSB3cnF1LT5tb2RlOwotCQlyYyA9IHdsMzUwMV9yZXNldChkZXYp OwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgd2wzNTAxX2dldF9tb2RlKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1 bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgd2wzNTAxX2Nh cmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0Jd3JxdS0+bW9kZSA9IHRoaXMtPm5ldF90 eXBlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMzUwMV9nZXRfc2VucyhzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgdW5p b24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHdsMzUwMV9jYXJk ICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXdycXUtPnNlbnMudmFsdWUgPSB0aGlzLT5y c3NpOwotCXdycXUtPnNlbnMuZGlzYWJsZWQgPSAhd3JxdS0+c2Vucy52YWx1ZTsKLQl3cnF1LT5z ZW5zLmZpeGVkID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfZ2V0X3Jh bmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5m byAqaW5mbywKLQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsK LQlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKWV4dHJhOwotCi0J LyogU2V0IHRoZSBsZW5ndGggKHZlcnkgaW1wb3J0YW50IGZvciBiYWNrd2FyZCBjb21wYXRpYmls aXR5KSAqLwotCXdycXUtPmRhdGEubGVuZ3RoID0gc2l6ZW9mKCpyYW5nZSk7Ci0KLQkvKiBTZXQg YWxsIHRoZSBpbmZvIHdlIGRvbid0IGNhcmUgb3IgZG9uJ3Qga25vdyBhYm91dCB0byB6ZXJvICov Ci0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YoKnJhbmdlKSk7Ci0KLQkvKiBTZXQgdGhlIFdpcmVs ZXNzIEV4dGVuc2lvbiB2ZXJzaW9ucyAqLwotCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkCT0g V0lSRUxFU1NfRVhUOwotCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZQk9IDE7Ci0JcmFuZ2UtPnRo cm91Z2hwdXQJCT0gMiAqIDEwMDAgKiAxMDAwOyAgICAgLyogfjIgTWIvcyAqLwotCS8qIEZJWE1F OiBzdHVkeSB0aGUgY29kZSB0byBmaWxsIGluIG1vcmUgZmllbGRzLi4uICovCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgd2wzNTAxX3NldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwg c3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3Jx dSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3By aXYoZGV2KTsKLQlpbnQgcmMgPSAtRUlOVkFMOwotCi0JLyogRklYTUU6IHdlIHN1cHBvcnQgb3Ro ZXIgQVJQSFJEcy4uLiovCi0JaWYgKHdycXUtPmFwX2FkZHIuc2FfZmFtaWx5ICE9IEFSUEhSRF9F VEhFUikKLQkJZ290byBvdXQ7Ci0JaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHdycXUtPmFw X2FkZHIuc2FfZGF0YSkpIHsKLQkJLyogRklYTUU6IHJlc2Nhbj8gKi8KLQl9IGVsc2UKLQkJbWVt Y3B5KHRoaXMtPmJzc2lkLCB3cnF1LT5hcF9hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKTsKLQkJLyog RklYTUU6IHJlc2Nhbj8gZGVhc3NvYyAmIHNjYW4/ICovCi0JcmMgPSAwOwotb3V0OgotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfZ2V0X3dhcChzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICB1bmlvbiBpd3JlcV9kYXRh ICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRk ZXZfcHJpdihkZXYpOwotCi0Jd3JxdS0+YXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7 Ci0JbWVtY3B5KHdycXUtPmFwX2FkZHIuc2FfZGF0YSwgdGhpcy0+YnNzaWQsIEVUSF9BTEVOKTsK LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfc2V0X3NjYW4oc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHVuaW9uIGl3 cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCS8qCi0JICogRklYTUU6IHRyaWdnZXIg c2Nhbm5pbmcgd2l0aCBhIHJlc2V0LCB5ZXMsIEknbSBsYXp5Ci0JICovCi0JcmV0dXJuIHdsMzUw MV9yZXNldChkZXYpOwotfQotCi1zdGF0aWMgaW50IHdsMzUwMV9nZXRfc2NhbihzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgdW5pb24g aXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHdsMzUwMV9jYXJkICp0 aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaTsKLQljaGFyICpjdXJyZW50X2V2ID0gZXh0 cmE7Ci0Jc3RydWN0IGl3X2V2ZW50IGl3ZTsKLQotCWZvciAoaSA9IDA7IGkgPCB0aGlzLT5ic3Nf Y250OyArK2kpIHsKLQkJaXdlLmNtZAkJCT0gU0lPQ0dJV0FQOwotCQlpd2UudS5hcF9hZGRyLnNh X2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwg dGhpcy0+YnNzX3NldFtpXS5yZXEuYnNzaWQsIEVUSF9BTEVOKTsKLQkJY3VycmVudF9ldiA9IGl3 ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkgIGV4dHJhICsgSVdf U0NBTl9NQVhfREFUQSwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwotCQlpd2UuY21k CQkgID0gU0lPQ0dJV0VTU0lEOwotCQlpd2UudS5kYXRhLmZsYWdzICA9IDE7Ci0JCWl3ZS51LmRh dGEubGVuZ3RoID0gdGhpcy0+YnNzX3NldFtpXS5yZXEuc3NpZC5lbC5sZW47Ci0JCWN1cnJlbnRf ZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJICBleHRy YSArIElXX1NDQU5fTUFYX0RBVEEsCi0JCQkJCQkgICZpd2UsCi0JCQkJCQkgIHRoaXMtPmJzc19z ZXRbaV0ucmVxLnNzaWQuZXNzaWQpOwotCQlpd2UuY21kCSAgID0gU0lPQ0dJV01PREU7Ci0JCWl3 ZS51Lm1vZGUgPSB0aGlzLT5ic3Nfc2V0W2ldLnJlcS5ic3NfdHlwZTsKLQkJY3VycmVudF9ldiA9 IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkgIGV4dHJhICsg SVdfU0NBTl9NQVhfREFUQSwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotCQlpd2Uu Y21kID0gU0lPQ0dJV0ZSRVE7Ci0JCWl3ZS51LmZyZXEubSA9IHRoaXMtPmJzc19zZXRbaV0ucmVx LmRzX3BzZXQuY2hhbjsKLQkJaXdlLnUuZnJlcS5lID0gMDsKLQkJY3VycmVudF9ldiA9IGl3ZV9z dHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkgIGV4dHJhICsgSVdfU0NB Tl9NQVhfREFUQSwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCQlpd2UuY21kID0g U0lPQ0dJV0VOQ09ERTsKLQkJaWYgKHRoaXMtPmJzc19zZXRbaV0ucmVxLmNhcF9pbmZvICYgV0wz NTAxX01HTVRfQ0FQQUJJTElUWV9QUklWQUNZKQotCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VO Q09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotCQllbHNlCi0JCQlpd2UudS5kYXRhLmZs YWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JCWN1 cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJ ICBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsCi0JCQkJCQkgICZpd2UsIE5VTEwpOwotCX0KLQkv KiBMZW5ndGggb2YgZGF0YSAqLwotCXdycXUtPmRhdGEubGVuZ3RoID0gKGN1cnJlbnRfZXYgLSBl eHRyYSk7Ci0Jd3JxdS0+ZGF0YS5mbGFncyA9IDA7IC8qIEZJWE1FOiBzZXQgcHJvcGVybHkgdGhl c2UgZmxhZ3MgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfc2V0X2Vzc2lk KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAq aW5mbywKLQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlz dHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKHdycXUt PmRhdGEuZmxhZ3MpIHsKLQkJaXdfc2V0X21nbXRfaW5mb19lbGVtZW50KElXX01HTVRfSU5GT19F TEVNRU5UX1NTSUQsCi0JCQkJCSAmdGhpcy0+ZXNzaWQuZWwsCi0JCQkJCSBleHRyYSwgd3JxdS0+ ZGF0YS5sZW5ndGgpOwotCX0gZWxzZSB7IC8qIFdlIGFjY2VwdCBhbnkgRVNTSUQgKi8KLQkJaXdf c2V0X21nbXRfaW5mb19lbGVtZW50KElXX01HTVRfSU5GT19FTEVNRU5UX1NTSUQsCi0JCQkJCSAm dGhpcy0+ZXNzaWQuZWwsICJBTlkiLCAzKTsKLQl9Ci0JcmV0dXJuIHdsMzUwMV9yZXNldChkZXYp OwotfQotCi1zdGF0aWMgaW50IHdsMzUwMV9nZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRl diwKLQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgIHVuaW9uIGl3 cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhp cyA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9j a19pcnFzYXZlKCZ0aGlzLT5sb2NrLCBmbGFncyk7Ci0Jd3JxdS0+ZXNzaWQuZmxhZ3MgID0gMTsK LQl3cnF1LT5lc3NpZC5sZW5ndGggPSB0aGlzLT5lc3NpZC5lbC5sZW47Ci0JbWVtY3B5KGV4dHJh LCB0aGlzLT5lc3NpZC5lc3NpZCwgdGhpcy0+ZXNzaWQuZWwubGVuKTsKLQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ0aGlzLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgd2wzNTAxX3NldF9uaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1 ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRy YSkKLXsKLQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0J aWYgKHdycXUtPmRhdGEubGVuZ3RoID4gc2l6ZW9mKHRoaXMtPm5pY2spKQotCQlyZXR1cm4gLUUy QklHOwotCXN0cnNjcHkodGhpcy0+bmljaywgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfZ2V0X25pY2soc3RydWN0IG5ldF9kZXZp Y2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHVuaW9uIGl3cmVx X2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9 IG5ldGRldl9wcml2KGRldik7Ci0KLQlzdHJzY3B5KGV4dHJhLCB0aGlzLT5uaWNrLCAzMik7Ci0J d3JxdS0+ZGF0YS5sZW5ndGggPSBzdHJsZW4oZXh0cmEpOwotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IHdsMzUwMV9nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdf cmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAq ZXh0cmEpCi17Ci0JLyoKLQkgKiBGSVhNRTogaGF2ZSB0byBzZWUgZnJvbSB3aGVyZSB0byBnZXQg dGhpcyBpbmZvLCBwZXJoYXBzIHRoaXMgY2FyZAotCSAqIHdvcmtzIGF0IDEgTWJpdC9zIHRvby4u LiBmb3Igbm93IGxlYXZlIGF0IDIgTWJpdC9zIHRoYXQgaXMgdGhlIG1vc3QKLQkgKiBjb21tb24g d2l0aCB0aGUgUGxhbmV0IEFjY2VzcyBQb2ludHMuIC1hY21lCi0JICovCi0Jd3JxdS0+Yml0cmF0 ZS52YWx1ZSA9IDIwMDAwMDA7Ci0Jd3JxdS0+Yml0cmF0ZS5maXhlZCA9IDE7Ci0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgd2wzNTAxX2dldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAg IHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXUxNiB0aHJlc2hvbGQ7 IC8qIHNpemUgY2hlY2tlZDogaXQgaXMgdTE2ICovCi0Jc3RydWN0IHdsMzUwMV9jYXJkICp0aGlz ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmMgPSB3bDM1MDFfZ2V0X21pYl92YWx1ZSh0aGlz LCBXTDM1MDFfTUlCX0FUVFJfUlRTX1RIUkVTSE9MRCwKLQkJCQkgICAgICAmdGhyZXNob2xkLCBz aXplb2YodGhyZXNob2xkKSk7Ci0JaWYgKCFyYykgewotCQl3cnF1LT5ydHMudmFsdWUgPSB0aHJl c2hvbGQ7Ci0JCXdycXUtPnJ0cy5kaXNhYmxlZCA9IHRocmVzaG9sZCA+PSAyMzQ3OwotCQl3cnF1 LT5ydHMuZml4ZWQgPSAxOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgd2wzNTAx X2dldF9mcmFnX3RocmVzaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3Ry dWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndy cXUsIGNoYXIgKmV4dHJhKQotewotCXUxNiB0aHJlc2hvbGQ7IC8qIHNpemUgY2hlY2tlZDogaXQg aXMgdTE2ICovCi0Jc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsK LQlpbnQgcmMgPSB3bDM1MDFfZ2V0X21pYl92YWx1ZSh0aGlzLCBXTDM1MDFfTUlCX0FUVFJfRlJB R19USFJFU0hPTEQsCi0JCQkJICAgICAgJnRocmVzaG9sZCwgc2l6ZW9mKHRocmVzaG9sZCkpOwot CWlmICghcmMpIHsKLQkJd3JxdS0+ZnJhZy52YWx1ZSA9IHRocmVzaG9sZDsKLQkJd3JxdS0+ZnJh Zy5kaXNhYmxlZCA9IHRocmVzaG9sZCA+PSAyMzQ2OwotCQl3cnF1LT5mcmFnLmZpeGVkID0gMTsK LQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHdsMzUwMV9nZXRfdHhwb3coc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAot CQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXUxNiB0eHBv dzsKLQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBy YyA9IHdsMzUwMV9nZXRfbWliX3ZhbHVlKHRoaXMsCi0JCQkJICAgICAgV0wzNTAxX01JQl9BVFRS X0NVUlJFTlRfVFhfUFdSX0xFVkVMLAotCQkJCSAgICAgICZ0eHBvdywgc2l6ZW9mKHR4cG93KSk7 Ci0JaWYgKCFyYykgewotCQl3cnF1LT50eHBvd2VyLnZhbHVlID0gdHhwb3c7Ci0JCXdycXUtPnR4 cG93ZXIuZGlzYWJsZWQgPSAwOwotCQkvKgotCQkgKiBGcm9tIHRoZSBNSUIgdmFsdWVzIEkgdGhp bmsgdGhpcyBjYW4gYmUgY29uZmlndXJhYmxlLAotCQkgKiBhcyBpdCBsaXN0cyBzZXZlcmFsIHR4 IHBvd2VyIGxldmVscyAtYWNtZQotCQkgKi8KLQkJd3JxdS0+dHhwb3dlci5maXhlZCA9IDA7Ci0J CXdycXUtPnR4cG93ZXIuZmxhZ3MgPSBJV19UWFBPV19NV0FUVDsKLQl9Ci0JcmV0dXJuIHJjOwot fQotCi1zdGF0aWMgaW50IHdsMzUwMV9nZXRfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwK LQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgIHVuaW9uIGl3cmVx X2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXU4IHJldHJ5OyAvKiBzaXplIGNoZWNrZWQ6 IGl0IGlzIHU4ICovCi0Jc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2 KTsKLQlpbnQgcmMgPSB3bDM1MDFfZ2V0X21pYl92YWx1ZSh0aGlzLAotCQkJCSAgICAgIFdMMzUw MV9NSUJfQVRUUl9MT05HX1JFVFJZX0xJTUlULAotCQkJCSAgICAgICZyZXRyeSwgc2l6ZW9mKHJl dHJ5KSk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dDsKLQlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJ V19SRVRSWV9MT05HKSB7Ci0JCXdycXUtPnJldHJ5LmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJ V19SRVRSWV9MT05HOwotCQlnb3RvIHNldF92YWx1ZTsKLQl9Ci0JcmMgPSB3bDM1MDFfZ2V0X21p Yl92YWx1ZSh0aGlzLCBXTDM1MDFfTUlCX0FUVFJfU0hPUlRfUkVUUllfTElNSVQsCi0JCQkJICAm cmV0cnksIHNpemVvZihyZXRyeSkpOwotCWlmIChyYykKLQkJZ290byBvdXQ7Ci0Jd3JxdS0+cmV0 cnkuZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX1NIT1JUOwotc2V0X3ZhbHVlOgot CXdycXUtPnJldHJ5LnZhbHVlID0gcmV0cnk7Ci0Jd3JxdS0+cmV0cnkuZGlzYWJsZWQgPSAwOwot b3V0OgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCB3bDM1MDFfZ2V0X2VuY29kZShzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZv LAotCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQl1OCBp bXBsZW1lbnRlZCwgcmVzdHJpY3RlZCwga2V5c1sxMDBdLCBsZW5fa2V5cywgdG9jb3B5OwotCXN0 cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJjID0gd2wz NTAxX2dldF9taWJfdmFsdWUodGhpcywKLQkJCQkgICAgICBXTDM1MDFfTUlCX0FUVFJfUFJJVl9P UFRfSU1QTEVNRU5URUQsCi0JCQkJICAgICAgJmltcGxlbWVudGVkLCBzaXplb2YoaW1wbGVtZW50 ZWQpKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0OwotCWlmICghaW1wbGVtZW50ZWQpIHsKLQkJd3Jx dS0+ZW5jb2RpbmcuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JCWdvdG8gb3V0OwotCX0K LQlyYyA9IHdsMzUwMV9nZXRfbWliX3ZhbHVlKHRoaXMsIFdMMzUwMV9NSUJfQVRUUl9FWENMVURF X1VORU5DUllQVEVELAotCQkJCSAgJnJlc3RyaWN0ZWQsIHNpemVvZihyZXN0cmljdGVkKSk7Ci0J aWYgKHJjKQotCQlnb3RvIG91dDsKLQl3cnF1LT5lbmNvZGluZy5mbGFncyA9IHJlc3RyaWN0ZWQg PyBJV19FTkNPREVfUkVTVFJJQ1RFRCA6Ci0JCQkJCSAgICBJV19FTkNPREVfT1BFTjsKLQlyYyA9 IHdsMzUwMV9nZXRfbWliX3ZhbHVlKHRoaXMsIFdMMzUwMV9NSUJfQVRUUl9XRVBfS0VZX01BUFBJ TkdTX0xFTiwKLQkJCQkgICZsZW5fa2V5cywgc2l6ZW9mKGxlbl9rZXlzKSk7Ci0JaWYgKHJjKQot CQlnb3RvIG91dDsKLQlyYyA9IHdsMzUwMV9nZXRfbWliX3ZhbHVlKHRoaXMsIFdMMzUwMV9NSUJf QVRUUl9XRVBfS0VZX01BUFBJTkdTLAotCQkJCSAga2V5cywgbGVuX2tleXMpOwotCWlmIChyYykK LQkJZ290byBvdXQ7Ci0JdG9jb3B5ID0gbWluX3QodTE2LCBsZW5fa2V5cywgd3JxdS0+ZW5jb2Rp bmcubGVuZ3RoKTsKLQl0b2NvcHkgPSBtaW5fdCh1OCwgdG9jb3B5LCAxMDApOwotCXdycXUtPmVu Y29kaW5nLmxlbmd0aCA9IHRvY29weTsKLQltZW1jcHkoZXh0cmEsIGtleXMsIHRvY29weSk7Ci1v dXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHdsMzUwMV9nZXRfcG93ZXIoc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAot CQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXU4IHB3cl9z dGF0ZTsKLQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCWlu dCByYyA9IHdsMzUwMV9nZXRfbWliX3ZhbHVlKHRoaXMsCi0JCQkJICAgICAgV0wzNTAxX01JQl9B VFRSX0NVUlJFTlRfUFdSX1NUQVRFLAotCQkJCSAgICAgICZwd3Jfc3RhdGUsIHNpemVvZihwd3Jf c3RhdGUpKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0OwotCXdycXUtPnBvd2VyLmRpc2FibGVkID0g IXB3cl9zdGF0ZTsKLQl3cnF1LT5wb3dlci5mbGFncyA9IElXX1BPV0VSX09OOwotb3V0OgotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJd2wzNTAxX2hhbmRsZXJbXSA9 IHsKLQlJV19IQU5ETEVSKFNJT0NHSVdOQU1FLCB3bDM1MDFfZ2V0X25hbWUpLAotCUlXX0hBTkRM RVIoU0lPQ1NJV0ZSRVEsIHdsMzUwMV9zZXRfZnJlcSksCi0JSVdfSEFORExFUihTSU9DR0lXRlJF USwgd2wzNTAxX2dldF9mcmVxKSwKLQlJV19IQU5ETEVSKFNJT0NTSVdNT0RFLCB3bDM1MDFfc2V0 X21vZGUpLAotCUlXX0hBTkRMRVIoU0lPQ0dJV01PREUsIHdsMzUwMV9nZXRfbW9kZSksCi0JSVdf SEFORExFUihTSU9DR0lXU0VOUywgd2wzNTAxX2dldF9zZW5zKSwKLQlJV19IQU5ETEVSKFNJT0NH SVdSQU5HRSwgd2wzNTAxX2dldF9yYW5nZSksCi0JSVdfSEFORExFUihTSU9DU0lXU1BZLCBpd19o YW5kbGVyX3NldF9zcHkpLAotCUlXX0hBTkRMRVIoU0lPQ0dJV1NQWSwgaXdfaGFuZGxlcl9nZXRf c3B5KSwKLQlJV19IQU5ETEVSKFNJT0NTSVdUSFJTUFksIGl3X2hhbmRsZXJfc2V0X3RocnNweSks Ci0JSVdfSEFORExFUihTSU9DR0lXVEhSU1BZLCBpd19oYW5kbGVyX2dldF90aHJzcHkpLAotCUlX X0hBTkRMRVIoU0lPQ1NJV0FQLCB3bDM1MDFfc2V0X3dhcCksCi0JSVdfSEFORExFUihTSU9DR0lX QVAsIHdsMzUwMV9nZXRfd2FwKSwKLQlJV19IQU5ETEVSKFNJT0NTSVdTQ0FOLCB3bDM1MDFfc2V0 X3NjYW4pLAotCUlXX0hBTkRMRVIoU0lPQ0dJV1NDQU4sIHdsMzUwMV9nZXRfc2NhbiksCi0JSVdf SEFORExFUihTSU9DU0lXRVNTSUQsIHdsMzUwMV9zZXRfZXNzaWQpLAotCUlXX0hBTkRMRVIoU0lP Q0dJV0VTU0lELCB3bDM1MDFfZ2V0X2Vzc2lkKSwKLQlJV19IQU5ETEVSKFNJT0NTSVdOSUNLTiwg d2wzNTAxX3NldF9uaWNrKSwKLQlJV19IQU5ETEVSKFNJT0NHSVdOSUNLTiwgd2wzNTAxX2dldF9u aWNrKSwKLQlJV19IQU5ETEVSKFNJT0NHSVdSQVRFLCB3bDM1MDFfZ2V0X3JhdGUpLAotCUlXX0hB TkRMRVIoU0lPQ0dJV1JUUywgd2wzNTAxX2dldF9ydHNfdGhyZXNob2xkKSwKLQlJV19IQU5ETEVS KFNJT0NHSVdGUkFHLCB3bDM1MDFfZ2V0X2ZyYWdfdGhyZXNob2xkKSwKLQlJV19IQU5ETEVSKFNJ T0NHSVdUWFBPVywgd2wzNTAxX2dldF90eHBvdyksCi0JSVdfSEFORExFUihTSU9DR0lXUkVUUlks IHdsMzUwMV9nZXRfcmV0cnkpLAotCUlXX0hBTkRMRVIoU0lPQ0dJV0VOQ09ERSwgd2wzNTAxX2dl dF9lbmNvZGUpLAotCUlXX0hBTkRMRVIoU0lPQ0dJV1BPV0VSLCB3bDM1MDFfZ2V0X3Bvd2VyKSwK LX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgd2wzNTAxX2hhbmRsZXJf ZGVmID0gewotCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKHdsMzUwMV9oYW5kbGVyKSwKLQku c3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKXdsMzUwMV9oYW5kbGVyLAotCS5nZXRfd2lyZWxlc3Nf c3RhdHMgPSB3bDM1MDFfZ2V0X3dpcmVsZXNzX3N0YXRzLAotfTsKLQotc3RhdGljIGNvbnN0IHN0 cnVjdCBuZXRfZGV2aWNlX29wcyB3bDM1MDFfbmV0ZGV2X29wcyA9IHsKLQkubmRvX29wZW4JCT0g d2wzNTAxX29wZW4sCi0JLm5kb19zdG9wCQk9IHdsMzUwMV9jbG9zZSwKLQkubmRvX3N0YXJ0X3ht aXQJCT0gd2wzNTAxX2hhcmRfc3RhcnRfeG1pdCwKLQkubmRvX3R4X3RpbWVvdXQJCT0gd2wzNTAx X3R4X3RpbWVvdXQsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAotCS5u ZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotfTsKLQotc3RhdGljIGludCB3 bDM1MDFfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQotewotCXN0cnVjdCBuZXRf ZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzOwotCWludCByZXQ7Ci0KLQkv KiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcgKi8KLQlwX2Rldi0+ cmVzb3VyY2VbMF0tPmVuZAk9IDE2OwotCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MJPSBJT19E QVRBX1BBVEhfV0lEVEhfODsKLQotCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8K LQlwX2Rldi0+Y29uZmlnX2ZsYWdzCT0gQ09ORl9FTkFCTEVfSVJROwotCXBfZGV2LT5jb25maWdf aW5kZXgJPSAxOwotCi0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCB3bDM1MDFf Y2FyZCkpOwotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldi0+bmV0ZGV2X29w cwkJPSAmd2wzNTAxX25ldGRldl9vcHM7Ci0JZGV2LT53YXRjaGRvZ190aW1lbwk9IDUgKiBIWjsK LQotCXRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXRoaXMtPndpcmVsZXNzX2RhdGEuc3B5X2Rh dGEgPSAmdGhpcy0+c3B5X2RhdGE7Ci0JdGhpcy0+cF9kZXYgPSBwX2RldjsKLQlkZXYtPndpcmVs ZXNzX2RhdGEJPSAmdGhpcy0+d2lyZWxlc3NfZGF0YTsKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJz CT0gJndsMzUwMV9oYW5kbGVyX2RlZjsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JcF9kZXYt PnByaXYgPSBkZXY7Ci0KLQlyZXQgPSB3bDM1MDFfY29uZmlnKHBfZGV2KTsKLQlpZiAocmV0KQot CQlnb3RvIG91dF9mcmVlX2V0aGVyZGV2OwotCi0JcmV0dXJuIDA7Ci0KLW91dF9mcmVlX2V0aGVy ZGV2OgotCWZyZWVfbmV0ZGV2KGRldik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3 bDM1MDFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQotewotCXN0cnVjdCBuZXRf ZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCWludCBpID0gMCwgaiwgcmV0OwotCXN0cnVjdCB3 bDM1MDFfY2FyZCAqdGhpczsKLQotCS8qIFRyeSBhbGxvY2F0aW5nIElPIHBvcnRzLiAgVGhpcyB0 cmllcyBhIGZldyBmaXhlZCBhZGRyZXNzZXMuICBJZiB5b3UKLQkgKiB3YW50LCB5b3UgY2FuIGFs c28gcmVhZCB0aGUgY2FyZCdzIGNvbmZpZyB0YWJsZSB0byBwaWNrIGFkZHJlc3NlcyAtLQotCSAq IHNlZSB0aGUgc2VyaWFsIGRyaXZlciBmb3IgYW4gZXhhbXBsZS4gKi8KLQlsaW5rLT5pb19saW5l cyA9IDU7Ci0KLQlmb3IgKGogPSAweDI4MDsgaiA8IDB4NDAwOyBqICs9IDB4MjApIHsKLQkJLyog VGhlICdeMHgzMDAnIGlzIHNvIHRoYXQgd2UgcHJvYmUgMHgzMDAtMHgzZmYgZmlyc3QsIHRoZW4K LQkJICogMHgyMDAtMHgyZmYsIGFuZCBzbyBvbiwgYmVjYXVzZSB0aGlzIHNlZW1zIHNhZmVyICov Ci0JCWxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGo7Ci0JCWxpbmstPnJlc291cmNlWzFdLT5z dGFydCA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4MTA7Ci0JCWkgPSBwY21jaWFfcmVx dWVzdF9pbyhsaW5rKTsKLQkJaWYgKGkgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSAhPSAw KQotCQlnb3RvIGZhaWxlZDsKLQotCS8qIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4g Tm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYWN0dWFsbHkKLQkgKiBhc3NpZ24gYSBoYW5kbGVyIHRv IHRoZSBpbnRlcnJ1cHQuICovCi0KLQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgd2wz NTAxX2ludGVycnVwdCk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsZWQ7Ci0KLQlyZXQgPSBwY21j aWFfZW5hYmxlX2RldmljZShsaW5rKTsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWxlZDsKLQotCWRl di0+aXJxID0gbGluay0+aXJxOwotCWRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0t PnN0YXJ0OwotCVNFVF9ORVRERVZfREVWKGRldiwgJmxpbmstPmRldik7Ci0JaWYgKHJlZ2lzdGVy X25ldGRldihkZXYpKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAid2wzNTAxX2NzOiByZWdpc3Rl cl9uZXRkZXYoKSBmYWlsZWRcbiIpOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0KLQl0aGlzID0gbmV0 ZGV2X3ByaXYoZGV2KTsKLQotCXRoaXMtPmJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCi0J aWYgKCF3bDM1MDFfZ2V0X2ZsYXNoX21hY19hZGRyKHRoaXMpKSB7Ci0JCXByaW50ayhLRVJOX1dB Uk5JTkcgIiVzOiBDYW4ndCByZWFkIE1BQyBhZGRyIGluIGZsYXNoIFJPTT9cbiIsCi0JCSAgICAg ICBkZXYtPm5hbWUpOwotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQlnb3RvIGZhaWxlZDsK LQl9Ci0KLQlldGhfaHdfYWRkcl9zZXQoZGV2LCB0aGlzLT5tYWNfYWRkcik7Ci0KLQkvKiBwcmlu dCBwcm9iZSBpbmZvcm1hdGlvbiAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiB3bDM1MDEgQCAw eCUzLjN4LCBJUlEgJWQsICIKLQkgICAgICAgIk1BQyBhZGRyIGluIGZsYXNoIFJPTTolcE1cbiIs Ci0JICAgICAgIGRldi0+bmFtZSwgdGhpcy0+YmFzZV9hZGRyLCAoaW50KWRldi0+aXJxLAotCSAg ICAgICBkZXYtPmRldl9hZGRyKTsKLQkvKgotCSAqIEluaXRpYWxpemUgY2FyZCBwYXJhbWV0ZXJz IC0gYWRkZWQgYnkganNzCi0JICovCi0JdGhpcy0+bmV0X3R5cGUJCT0gSVdfTU9ERV9JTkZSQTsK LQl0aGlzLT5ic3NfY250CQk9IDA7Ci0JdGhpcy0+am9pbl9zdGFfYnNzCT0gMDsKLQl0aGlzLT5h ZGhvY190aW1lcwk9IDA7Ci0JaXdfc2V0X21nbXRfaW5mb19lbGVtZW50KElXX01HTVRfSU5GT19F TEVNRU5UX1NTSUQsICZ0aGlzLT5lc3NpZC5lbCwKLQkJCQkgIkFOWSIsIDMpOwotCXRoaXMtPmNh cmRfbmFtZVswXQk9ICdcMCc7Ci0JdGhpcy0+ZmlybXdhcmVfZGF0ZVswXQk9ICdcMCc7Ci0JdGhp cy0+cnNzaQkJPSAyNTU7Ci0JdGhpcy0+Y2hhbgkJPSBpd19kZWZhdWx0X2NoYW5uZWwodGhpcy0+ cmVnX2RvbWFpbik7Ci0Jc3Ryc2NweSh0aGlzLT5uaWNrLCAiUGxhbmV0IFdMMzUwMSIsIHNpemVv Zih0aGlzLT5uaWNrKSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnRoaXMtPmxvY2spOwotCWluaXRfd2Fp dHF1ZXVlX2hlYWQoJnRoaXMtPndhaXQpOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JcmV0 dXJuIDA7Ci0KLWZhaWxlZDoKLQl3bDM1MDFfcmVsZWFzZShsaW5rKTsKLQlyZXR1cm4gLUVOT0RF VjsKLX0KLQotc3RhdGljIHZvaWQgd2wzNTAxX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2Ug KmxpbmspCi17Ci0JcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwotfQotCi1zdGF0aWMgaW50 IHdsMzUwMV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQotewotCXN0cnVjdCBu ZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCi0Jd2wzNTAxX3B3cl9tZ210KG5ldGRldl9w cml2KGRldiksIFdMMzUwMV9TVVNQRU5EKTsKLQlpZiAobGluay0+b3BlbikKLQkJbmV0aWZfZGV2 aWNlX2RldGFjaChkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2wzNTAxX3Jl c3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2ID0gbGluay0+cHJpdjsKLQotCXdsMzUwMV9wd3JfbWdtdChuZXRkZXZfcHJpdihkZXYpLCBX TDM1MDFfUkVTVU1FKTsKLQlpZiAobGluay0+b3BlbikgewotCQl3bDM1MDFfcmVzZXQoZGV2KTsK LQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCB3bDM1MDFfaWRzW10gPSB7Ci0JUENN Q0lBX0RFVklDRV9NQU5GX0NBUkQoMHhkNjAxLCAweDAwMDEpLAotCVBDTUNJQV9ERVZJQ0VfTlVM TAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCB3bDM1MDFfaWRzKTsKLQotc3RhdGlj IHN0cnVjdCBwY21jaWFfZHJpdmVyIHdsMzUwMV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNf TU9EVUxFLAotCS5uYW1lCQk9ICJ3bDM1MDFfY3MiLAotCS5wcm9iZQkJPSB3bDM1MDFfcHJvYmUs Ci0JLnJlbW92ZQkJPSB3bDM1MDFfZGV0YWNoLAotCS5pZF90YWJsZQk9IHdsMzUwMV9pZHMsCi0J LnN1c3BlbmQJPSB3bDM1MDFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHdsMzUwMV9yZXN1bWUsCi19 OwotbW9kdWxlX3BjbWNpYV9kcml2ZXIod2wzNTAxX2RyaXZlcik7Ci0KLU1PRFVMRV9BVVRIT1Io IkZveCBDaGVuIDxtaGNoZW5AZ29sZi5jY2wuaXRyaS5vcmcudHc+LCAiCi0JICAgICAgIkFybmFs ZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPiwiCi0JICAgICAgIkd1 c3Rhdm8gTmllbWV5ZXIgPG5pZW1leWVyQGNvbmVjdGl2YS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJ UFRJT04oIlBsYW5ldCB3bDM1MDEgd2lyZWxlc3MgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgi R1BMIik7Ci0tIAoyLjM5LjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==