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 36F81C48BC4 for ; Thu, 15 Feb 2024 20:45:19 +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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=xi37uJ9Bo3dM92SUA2xpeEekDZ/YlBijtmQ2nc0Fpzs=; b=SHMeqSozWBegf6 A+wRUB9P4KTvQg5RIlIhp7TT0BFkW6XIGolbfVIv2fFlQ4YneC3TFVFdS2EHOyYR1qlGpIlK/Fpj/ mS6Duj9qEnmA+QDI1LyUBXAO3bRxydW7e7p0uIPDSYXY+Sn/7Byrwli3FmTRVtBKK3XYcGbDgwAwn gXnvrBqwK5D+BdJC24KFpb1O8VpqynJemEWm6fm+LM1au28MI3m7dutR8tv8ApiRHs9t3CXkhmg2L CedME3RJm2VuBLOkw98fE97iTxPnyIyLTigRY+E3RAUgcVwh4SRRfdCa7clYt79JOAKbo7faAJHRT I2AWf659aD+nahw1KY8Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1raibO-00000000695-0SfM; Thu, 15 Feb 2024 20:45:02 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1raibH-0000000066N-0MH7 for linux-arm-kernel@lists.infradead.org; Thu, 15 Feb 2024 20:45:00 +0000 Received: from umang.jain (unknown [103.86.18.214]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 50E4615B5; Thu, 15 Feb 2024 21:44:46 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1708029890; bh=7CV6QRwLNTmFhkp6gonfuUkziq/XLWbZ+BEi3WEa6xY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dDfUpygsVVPcR7DQzhBrOTwv97Vju1ZqgXGFluVCZ6399GTZgVjwkaFeXsISXKQc9 l/WTgFwQypAmoTTZxiqmjoWAu5jUwBRIGytxg+J1hs4X7GSo5dg88Gz+6iEX5FXywn wHyRdXoHcLURITXlYh/HhwbsI/Wc+pVZVaMLgUFo= From: Umang Jain To: linux-media@vger.kernel.org, devicetree@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , NXP Linux Team , Fabio Estevam , Kieran Bingham , Laurent Pinchart , willl will , Sakari Ailus , Umang Jain Subject: [PATCH 2/2] media: i2c: Add imx283 camera sensor driver Date: Fri, 16 Feb 2024 02:14:35 +0530 Message-ID: <20240215204436.9194-3-umang.jain@ideasonboard.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240215204436.9194-1-umang.jain@ideasonboard.com> References: <20240215204436.9194-1-umang.jain@ideasonboard.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240215_124455_669131_4F621B29 X-CRM114-Status: GOOD ( 23.21 ) 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: , 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 RnJvbTogS2llcmFuIEJpbmdoYW0gPGtpZXJhbi5iaW5naGFtQGlkZWFzb25ib2FyZC5jb20+CgpB ZGQgYSB2NGwyIHN1YmRldmljZSBkcml2ZXIgZm9yIHRoZSBTb255IElNWDI4MyBpbWFnZSBzZW5z b3IuCgpUaGUgSU1YMjgzIGlzIGEgMjBNUCBEaWFnb25hbCAxNS44NiBtbSAoVHlwZSAxKSBDTU9T IEltYWdlIFNlbnNvciB3aXRoClNxdWFyZSBQaXhlbCBmb3IgQ29sb3IgQ2FtZXJhcy4KClRoZSBm b2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSBNYW51YWwgZXhwb3N1cmUgYW4gZ2Fp biBjb250cm9sIHN1cHBvcnQKLSB2YmxhbmsvaGJsYW5rL2xpbmsgZnJlcSBjb250cm9sIHN1cHBv cnQKLSBUZXN0IHBhdHRlcm4gc3VwcG9ydCBjb250cm9sCi0gQXJiaXRyYXJ5IGhvcml6b250YWwg YW5kIHZlcnRpY2FsIGNyb3BwaW5nCi0gU3VwcG9ydGVkIHJlc29sdXRpb246CiAgLSA1NDcyeDM2 NDggQCAyMGZwcyAoU1JHR0IxMikKICAtIDU0NzJ4MzY0OCBAIDI1ZnBzIChTUkdHQjEwKQogIC0g MjczNngxODI0IEAgNTBmcHMgKFNSR0dCMTIpCgpTaWduZWQtb2ZmLWJ5OiBLaWVyYW4gQmluZ2hh bSA8a2llcmFuLmJpbmdoYW1AaWRlYXNvbmJvYXJkLmNvbT4KU2lnbmVkLW9mZi1ieTogVW1hbmcg SmFpbiA8dW1hbmcuamFpbkBpZGVhc29uYm9hcmQuY29tPgotLS0KIE1BSU5UQUlORVJTICAgICAg ICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnICB8ICAgMTMgKwog ZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgfCAgICAxICsKIGRyaXZlcnMvbWVkaWEvaTJjL2lt eDI4My5jIHwgMTYwMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmls ZXMgY2hhbmdlZCwgMTYxNiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9tZWRpYS9pMmMvaW14MjgzLmMKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlO RVJTCmluZGV4IDUzZGY0YjZlMzI2MC4uMzgyNmU1YzVkNzQ2IDEwMDY0NAotLS0gYS9NQUlOVEFJ TkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjAzNzMsNiArMjAzNzMsNyBAQCBMOglsaW51eC1t ZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIFQ6CWdpdCBnaXQ6Ly9saW51eHR2 Lm9yZy9tZWRpYV90cmVlLmdpdAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz L21lZGlhL2kyYy9zb255LGlteDI4My55YW1sCitGOglkcml2ZXJzL21lZGlhL2kyYy9pbXgyODMu YwogCiBTT05ZIElNWDI5MCBTRU5TT1IgRFJJVkVSCiBNOglNYW5pdmFubmFuIFNhZGhhc2l2YW0g PG1hbml2YW5uYW4uc2FkaGFzaXZhbUBsaW5hcm8ub3JnPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9t ZWRpYS9pMmMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcKaW5kZXggNTZmMjc2 YjkyMGFiLi5iNzk4YzU1YTJiZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25m aWcKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZwpAQCAtMTUzLDYgKzE1MywxOSBAQCBj b25maWcgVklERU9fSU1YMjc0CiAJICBUaGlzIGlzIGEgVjRMMiBzZW5zb3IgZHJpdmVyIGZvciB0 aGUgU29ueSBJTVgyNzQKIAkgIENNT1MgaW1hZ2Ugc2Vuc29yLgogCitjb25maWcgVklERU9fSU1Y MjgzCisJdHJpc3RhdGUgIlNvbnkgSU1YMjgzIHNlbnNvciBzdXBwb3J0IgorCWRlcGVuZHMgb24g STJDICYmIFZJREVPX0RFVgorCXNlbGVjdCBNRURJQV9DT05UUk9MTEVSCisJc2VsZWN0IFZJREVP X1Y0TDJfU1VCREVWX0FQSQorCXNlbGVjdCBWNEwyX0NDSV9JMkMKKwloZWxwCisJICBUaGlzIGlz IGEgVjRMMiBzZW5zb3IgZHJpdmVyIGZvciB0aGUgU29ueSBJTVgyODMKKwkgIENNT1MgaW1hZ2Ug c2Vuc29yLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2Ug TSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbXgyODMuCisKIGNvbmZpZyBW SURFT19JTVgyOTAKIAl0cmlzdGF0ZSAiU29ueSBJTVgyOTAgc2Vuc29yIHN1cHBvcnQiCiAJc2Vs ZWN0IFJFR01BUF9JMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlIGIv ZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUKaW5kZXggZGZiZTY0NDhiNTQ5Li4wZmJkODFmOWY0 MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMv bWVkaWEvaTJjL01ha2VmaWxlCkBAIC00OCw2ICs0OCw3IEBAIG9iai0kKENPTkZJR19WSURFT19J TVgyMTQpICs9IGlteDIxNC5vCiBvYmotJChDT05GSUdfVklERU9fSU1YMjE5KSArPSBpbXgyMTku bwogb2JqLSQoQ09ORklHX1ZJREVPX0lNWDI1OCkgKz0gaW14MjU4Lm8KIG9iai0kKENPTkZJR19W SURFT19JTVgyNzQpICs9IGlteDI3NC5vCitvYmotJChDT05GSUdfVklERU9fSU1YMjgzKSArPSBp bXgyODMubwogb2JqLSQoQ09ORklHX1ZJREVPX0lNWDI5MCkgKz0gaW14MjkwLm8KIG9iai0kKENP TkZJR19WSURFT19JTVgyOTYpICs9IGlteDI5Ni5vCiBvYmotJChDT05GSUdfVklERU9fSU1YMzE5 KSArPSBpbXgzMTkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvaW14MjgzLmMgYi9k cml2ZXJzL21lZGlhL2kyYy9pbXgyODMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjUyZmFmZWExOGU3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEv aTJjL2lteDI4My5jCkBAIC0wLDAgKzEsMTYwMSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKKy8qCisgKiBWNEwyIFN1cHBvcnQgZm9yIHRoZSBJTVgyODMKKyAqCisgKiBE aWFnb25hbCAxNS44NiBtbSAoVHlwZSAxKSBDTU9TIEltYWdlIFNlbnNvciB3aXRoIFNxdWFyZSBQ aXhlbCBmb3IgQ29sb3IKKyAqIENhbWVyYXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDI0IElk ZWFzIG9uIEJvYXJkIE95LgorICoKKyAqIEJhc2VkIG9uIFNvbnkgSU1YMjgzIGRyaXZlciBwcmVw YXJlZCBieSBXaWxsIFdoYW5nCisgKgorICogQmFzZWQgb24gU29ueSBpbXg0NzcgY2FtZXJhIGRy aXZlcgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUmFzcGJlcnJ5IFBpIChUcmFkaW5nKSBM dGQKKyAqLworCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25z dW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o PgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRp bWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxt ZWRpYS92NGwyLWNjaS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KKyNpbmNsdWRl IDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4KKyNp bmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItbWVkaWFi dXMuaD4KKworLyogQ2hpcCBJRCAqLworI2RlZmluZSBJTVgyODNfUkVHX0NISVBfSUQJCUNDSV9S RUc4KDB4MzAwMCkKKyNkZWZpbmUgSU1YMjgzX0NISVBfSUQJCQkweDBiCS8vIERlZmF1bHQgcG93 ZXIgb24gc3RhdGUKKworI2RlZmluZSBJTVgyODNfUkVHX1NUQU5EQlkJCUNDSV9SRUc4KDB4MzAw MCkKKyNkZWZpbmUgICBJTVgyODNfQUNUSVZFCQkJMAorI2RlZmluZSAgIElNWDI4M19TVEFOREJZ CQlCSVQoMCkKKyNkZWZpbmUgICBJTVgyODNfU1RCTE9HSUMJCUJJVCgxKQorI2RlZmluZSAgIElN WDI4M19TVEJNSVBJCQlCSVQoMikKKyNkZWZpbmUgICBJTVgyODNfU1RCRFYJCQlCSVQoMykKKyNk ZWZpbmUgICBJTVgyODNfU0xFRVAJCQlCSVQoNCkKKworI2RlZmluZSBJTVgyODNfUkVHX0NMQU1Q CQlDQ0lfUkVHOCgweDMwMDEpCisjZGVmaW5lICAgSU1YMjgzX0NMUFNRUlNUCQlCSVQoNCkKKwor I2RlZmluZSBJTVgyODNfUkVHX1BMU1RNRzA4CQlDQ0lfUkVHOCgweDMwMDMpCisjZGVmaW5lICAg SU1YMjgzX1BMU1RNRzA4X1ZBTAkJMHg3NworCisjZGVmaW5lIElNWDI4M19SRUdfTURTRUwxCQlD Q0lfUkVHOCgweDMwMDQpCisjZGVmaW5lIElNWDI4M19SRUdfTURTRUwyCQlDQ0lfUkVHOCgweDMw MDUpCisjZGVmaW5lIElNWDI4M19SRUdfTURTRUwzCQlDQ0lfUkVHOCgweDMwMDYpCisjZGVmaW5l ICAgSU1YMjgzX01EU0VMM19WQ1JPUF9FTglCSVQoNSkKKyNkZWZpbmUgSU1YMjgzX1JFR19NRFNF TDQJCUNDSV9SRUc4KDB4MzAwNykKKyNkZWZpbmUgICBJTVgyODNfTURTRUw0X1ZDUk9QX0VOCShC SVQoNCkgfCBCSVQoNikpCisKKyNkZWZpbmUgSU1YMjgzX1JFR19TVlIJCQlDQ0lfUkVHMTZfTEUo MHgzMDA5KQorCisjZGVmaW5lIElNWDI4M19SRUdfSFRSSU1NSU5HCQlDQ0lfUkVHOCgweDMwMGIp CisjZGVmaW5lICAgSU1YMjgzX01EVlJFVgkJCUJJVCgwKSAvKiBWRkxJUCAqLworI2RlZmluZSAg IElNWDI4M19IVFJJTU1JTkdfRU4JCUJJVCg0KQorCisjZGVmaW5lIElNWDI4M19SRUdfVldJTlBP UwkJQ0NJX1JFRzE2X0xFKDB4MzAwZikKKyNkZWZpbmUgSU1YMjgzX1JFR19WV0lEQ1VUCQlDQ0lf UkVHMTZfTEUoMHgzMDExKQorCisjZGVmaW5lIElNWDI4M19SRUdfTURTRUw3CQlDQ0lfUkVHMTZf TEUoMHgzMDEzKQorCisvKiBDU0kgQ2xvY2sgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBJTVgy ODNfUkVHX1RDTEtQT1NUCQlDQ0lfUkVHOCgweDMwMTgpCisjZGVmaW5lIElNWDI4M19SRUdfVEhT UFJFUEFSRQkJQ0NJX1JFRzgoMHgzMDFhKQorI2RlZmluZSBJTVgyODNfUkVHX1RIU1pFUk8JCUND SV9SRUc4KDB4MzAxYykKKyNkZWZpbmUgSU1YMjgzX1JFR19USFNUUkFJTAkJQ0NJX1JFRzgoMHgz MDIwKQorI2RlZmluZSBJTVgyODNfUkVHX1RDTEtQUkVQQVJFCQlDQ0lfUkVHOCgweDMwMjIpCisj ZGVmaW5lIElNWDI4M19SRUdfVENMS1pFUk8JCUNDSV9SRUcxNl9MRSgweDMwMjQpCisjZGVmaW5l IElNWDI4M19SRUdfVExQWAkJCUNDSV9SRUc4KDB4MzAyNikKKyNkZWZpbmUgSU1YMjgzX1JFR19U SFNFWElUCQlDQ0lfUkVHOCgweDMwMjgpCisjZGVmaW5lIElNWDI4M19SRUdfVENMS1BSRQkJQ0NJ X1JFRzgoMHgzMDJhKQorCisjZGVmaW5lIElNWDI4M19SRUdfWV9PVVRfU0laRQkJQ0NJX1JFRzE2 X0xFKDB4MzAyZikKKyNkZWZpbmUgSU1YMjgzX1JFR19XUklURV9WU0laRQkJQ0NJX1JFRzE2X0xF KDB4MzAzMSkKKyNkZWZpbmUgSU1YMjgzX1JFR19PQl9TSVpFX1YJCUNDSV9SRUc4KDB4MzAzMykK KworLyogSE1BWCBpbnRlcm5hbCBIQkxBTksgKi8KKyNkZWZpbmUgSU1YMjgzX1JFR19ITUFYCQkJ Q0NJX1JFRzE2X0xFKDB4MzAzNikKKyNkZWZpbmUgSU1YMjgzX0hNQVhfTUFYCQkJMHhmZmZmCisK Ky8qIFZNQVggaW50ZXJuYWwgVkJMQU5LICovCisjZGVmaW5lIElNWDI4M19SRUdfVk1BWAkJCUND SV9SRUcyNF9MRSgweDMwMzgpCisjZGVmaW5lICAgSU1YMjgzX1ZNQVhfTUFYCQkweGZmZmZmCisK Ky8qIFNIUiBpbnRlcm5hbCAqLworI2RlZmluZSBJTVgyODNfUkVHX1NIUgkJCUNDSV9SRUcxNl9M RSgweDMwM2IpCisjZGVmaW5lICAgSU1YMjgzX1NIUl9NSU4JCTExCisKKy8qCisgKiBBbmFsb2cg Z2FpbiBjb250cm9sCisgKiAgR2FpbiBbZEJdID0gLTIwbG9neygyMDQ4IC0gdmFsdWUgWzEwOjBd KSAvMjA0OH0KKyAqICBSYW5nZTogMGRCIHRvIGFwcHJveGltYXRlbHkgKzI3ZEIKKyAqLworI2Rl ZmluZSBJTVgyODNfUkVHX0FOQUxPR19HQUlOCQlDQ0lfUkVHMTZfTEUoMHgzMDQyKQorI2RlZmlu ZSAgIElNWDI4M19BTkFfR0FJTl9NSU4JCTAKKyNkZWZpbmUgICBJTVgyODNfQU5BX0dBSU5fTUFY CQkxOTU3CisjZGVmaW5lICAgSU1YMjgzX0FOQV9HQUlOX1NURVAJCTEKKyNkZWZpbmUgICBJTVgy ODNfQU5BX0dBSU5fREVGQVVMVAkweDAKKworLyoKKyAqIERpZ2l0YWwgZ2FpbiBjb250cm9sCisg KiAgR2FpbiBbZEJdID0gdmFsdWUgKiA2CisgKiAgUmFuZ2U6IDBkQiB0byArMThkYgorICovCisj ZGVmaW5lIElNWDI4M19SRUdfRElHSVRBTF9HQUlOCQlDQ0lfUkVHOCgweDMwNDQpCisjZGVmaW5l IElNWDI4M19ER1RMX0dBSU5fTUlOCQkwCisjZGVmaW5lIElNWDI4M19ER1RMX0dBSU5fTUFYCQkz CisjZGVmaW5lIElNWDI4M19ER1RMX0dBSU5fREVGQVVMVAkwCisjZGVmaW5lIElNWDI4M19ER1RM X0dBSU5fU1RFUAkJMQorCisjZGVmaW5lIElNWDI4M19SRUdfSFRSSU1NSU5HX1NUQVJUCUNDSV9S RUcxNl9MRSgweDMwNTgpCisjZGVmaW5lIElNWDI4M19SRUdfSFRSSU1NSU5HX0VORAlDQ0lfUkVH MTZfTEUoMHgzMDVhKQorCisjZGVmaW5lIElNWDI4M19SRUdfTURTRUwxOAkJQ0NJX1JFRzE2X0xF KDB4MzBmNikKKworLyogTWFzdGVyIE1vZGUgT3BlcmF0aW9uIENvbnRyb2wgKi8KKyNkZWZpbmUg SU1YMjgzX1JFR19YTVNUQQkJQ0NJX1JFRzgoMHgzMTA1KQorI2RlZmluZSAgIElNWDI4M19YTVNU QQkJCUJJVCgwKQorCisjZGVmaW5lIElNWDI4M19SRUdfU1lOQ0RSVgkJQ0NJX1JFRzgoMHgzMTA3 KQorI2RlZmluZSAgIElNWDI4M19TWU5DRFJWX1hIU19YVlMJKDB4YTAgfCAweDAyKQorI2RlZmlu ZSAgIElNWDI4M19TWU5DRFJWX0hJWgkJKDB4YTAgfCAweDAzKQorCisvKiBQTEwgU3RhbmRieSAq LworI2RlZmluZSBJTVgyODNfUkVHX1NUQlBMCQlDQ0lfUkVHOCgweDMyMGIpCisjZGVmaW5lICBJ TVgyODNfU1RCUExfTk9STUFMCQkweDAwCisjZGVmaW5lICBJTVgyODNfU1RCUExfU1RBTkRCWQkJ MHgwMworCisvKiBJbnB1dCBGcmVxdWVuY3kgU2V0dGluZyAqLworI2RlZmluZSBJTVgyODNfUkVH X1BMUkQxCQlDQ0lfUkVHOCgweDM2YzEpCisjZGVmaW5lIElNWDI4M19SRUdfUExSRDIJCUNDSV9S RUcxNl9MRSgweDM2YzIpCisjZGVmaW5lIElNWDI4M19SRUdfUExSRDMJCUNDSV9SRUc4KDB4MzZm NykKKyNkZWZpbmUgSU1YMjgzX1JFR19QTFJENAkJQ0NJX1JFRzgoMHgzNmY4KQorCisjZGVmaW5l IElNWDI4M19SRUdfUExTVE1HMDIJCUNDSV9SRUc4KDB4MzZhYSkKKyNkZWZpbmUgICBJTVgyODNf UExTVE1HMDJfVkFMCQkweDAwCisKKyNkZWZpbmUgSU1YMjgzX1JFR19FQkRfWF9PVVRfU0laRQlD Q0lfUkVHMTZfTEUoMHgzYTU0KQorCisvKiBUZXN0IHBhdHRlcm4gZ2VuZXJhdG9yICovCisjZGVm aW5lIElNWDI4M19SRUdfVFBHX0NUUkwJCUNDSV9SRUc4KDB4MzE1NikKKyNkZWZpbmUgICBJTVgy ODNfVFBHX0NUUkxfQ0xLRU4JCUJJVCgwKQorI2RlZmluZSAgIElNWDI4M19UUEdfQ1RSTF9QQVRF TgkJQklUKDQpCisKKyNkZWZpbmUgSU1YMjgzX1JFR19UUEdfUEFUCQlDQ0lfUkVHOCgweDMxNTcp CisjZGVmaW5lICAgSU1YMjgzX1RQR19QQVRfQUxMXzAwMAkweDAwCisjZGVmaW5lICAgSU1YMjgz X1RQR19QQVRfQUxMX0ZGRgkweDAxCisjZGVmaW5lICAgSU1YMjgzX1RQR19QQVRfQUxMXzU1NQkw eDAyCisjZGVmaW5lICAgSU1YMjgzX1RQR19QQVRfQUxMX0FBQQkweDAzCisjZGVmaW5lICAgSU1Y MjgzX1RQR19QQVRfSF9DT0xPUl9CQVJTCTB4MGEKKyNkZWZpbmUgICBJTVgyODNfVFBHX1BBVF9W X0NPTE9SX0JBUlMJMHgwYgorCisvKiBFeHBvc3VyZSBjb250cm9sICovCisjZGVmaW5lIElNWDI4 M19FWFBPU1VSRV9NSU4JCTUyCisjZGVmaW5lIElNWDI4M19FWFBPU1VSRV9TVEVQCQkxCisjZGVm aW5lIElNWDI4M19FWFBPU1VSRV9ERUZBVUxUCQkxMDAwCisjZGVmaW5lIElNWDI4M19FWFBPU1VS RV9NQVgJCTQ5ODY1CisKKy8qIEVtYmVkZGVkIG1ldGFkYXRhIHN0cmVhbSBzdHJ1Y3R1cmUgKi8K KyNkZWZpbmUgSU1YMjgzX0VNQkVEREVEX0xJTkVfV0lEVEggMTYzODQKKyNkZWZpbmUgSU1YMjgz X05VTV9FTUJFRERFRF9MSU5FUyAxCisKKyNkZWZpbmUgTUhaKHgpCQkJCSgoeCkgKiAxMDAwICog MTAwMCkKKyNkZWZpbmUgSU1BR0VfUEFECQkJMAorCisjZGVmaW5lIGlteDI4M19YQ0xSX01JTl9E RUxBWV9VUwkxMDAwCisjZGVmaW5lIGlteDI4M19YQ0xSX0RFTEFZX1JBTkdFX1VTCTEwMDAKKwor LyogSU1YMjgzIG5hdGl2ZSBhbmQgYWN0aXZlIHBpeGVsIGFycmF5IHNpemUuICovCitzdGF0aWMg Y29uc3Qgc3RydWN0IHY0bDJfcmVjdCBpbXgyODNfbmF0aXZlX2FyZWEgPSB7CisJLnRvcCA9IDAs CisJLmxlZnQgPSAwLAorCS53aWR0aCA9IDU1OTIsCisJLmhlaWdodCA9IDM3MTAsCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCBpbXgyODNfYWN0aXZlX2FyZWEgPSB7CisJLnRv cCA9IDQwLAorCS5sZWZ0ID0gMTA4LAorCS53aWR0aCA9IDU0NzIsCisJLmhlaWdodCA9IDM2NDgs Cit9OworCitzdHJ1Y3QgSU1YMjgzX3JlZ19saXN0IHsKKwl1bnNpZ25lZCBpbnQgbnVtX29mX3Jl Z3M7CisJY29uc3Qgc3RydWN0IGNjaV9yZWdfc2VxdWVuY2UgKnJlZ3M7Cit9OworCisvKiBNb2Rl IDogcmVzb2x1dGlvbiBhbmQgcmVsYXRlZCBjb25maWcgdmFsdWVzICovCitzdHJ1Y3QgaW14Mjgz X21vZGUgeworCXVuc2lnbmVkIGludCBtb2RlOworCisJLyogQml0cyBwZXIgcGl4ZWwgKi8KKwl1 bnNpZ25lZCBpbnQgYnBwOworCisJLyogRnJhbWUgd2lkdGggKi8KKwl1bnNpZ25lZCBpbnQgd2lk dGg7CisKKwkvKiBGcmFtZSBoZWlnaHQgKi8KKwl1bnNpZ25lZCBpbnQgaGVpZ2h0OworCisJLyoK KwkgKiBNaW5pbXVtIGhvcml6b250YWwgdGltaW5nIGluIHBpeGVsLXVuaXRzCisJICoKKwkgKiBO b3RlIHRoYXQgSE1BWCBpcyB3cml0dGVuIGluIDcyTUh6IHVuaXRzLCBhbmQgdGhlIGRhdGFzaGVl dCBhc3N1bWVzIGEKKwkgKiA3MjBNSHogbGluayBmcmVxdWVuY3kuIENvbnZlcnQgZGF0YXNoZWV0 IHZhbHVlcyB3aXRoIHRoZSBmb2xsb3dpbmc6CisJICoKKwkgKiBGb3IgMTIgYnBwIG1vZGVzICg0 ODBNYnBzKSBjb252ZXJ0IHdpdGg6CisJICogICBobWF4ID0gW2htYXggaW4gNzJNSHogdW5pdHNd ICogNDgwIC8gNzIKKwkgKgorCSAqIEZvciAxMCBicHAgbW9kZXMgKDU3Nk1icHMpIGNvbnZlcnQg d2l0aDoKKwkgKiAgIGhtYXggPSBbaG1heCBpbiA3Mk1IeiB1bml0c10gKiA1NzYgLyA3MgorCSAq LworCXU2NCBtaW5faG1heDsKKworCS8qIG1pbmltdW0gVi10aW1pbmcgaW4gbGluZXMgKi8KKwl1 NjQgbWluX3ZtYXg7CisKKwkvKiBkZWZhdWx0IEgtdGltaW5nICovCisJdTY0IGRlZmF1bHRfaG1h eDsKKworCS8qIGRlZmF1bHQgVi10aW1pbmcgKi8KKwl1NjQgZGVmYXVsdF92bWF4OworCisJLyog bWluaW11bSBTSFIgKi8KKwl1NjQgbWluX3NocjsKKworCS8qIEFicml0cmFyeSB2ZXJ0aWNhbCBj cm9wcGluZyAqLworCXUzMiB2ZWZmOworCXUzMiB2c3Q7CisJdTMyIHZjdDsKKworCS8qIEhvcml6 b250YWwgYW5kIHZlcnRpY2FsIGJpbm5pbmcgcmF0aW8gKi8KKwl1OCBoYmluX3JhdGlvOworCXU4 IHZiaW5fcmF0aW87CisKKwkvKiBPcHRpY2FsIEJsYW5raW5nICovCisJdTMyIGhvcml6b250YWxf b2I7CisJdTMyIHZlcnRpY2FsX29iOworCisJLyogQW5hbG9nIGNyb3AgcmVjdGFuZ2xlLiAqLwor CXN0cnVjdCB2NGwyX3JlY3QgY3JvcDsKK307CisKK3N0cnVjdCBpbXgyODNfaW5wdXRfZnJlcXVl bmN5IHsKKwl1bnNpZ25lZCBpbnQgbWh6OworCXVuc2lnbmVkIGludCByZWdfY291bnQ7CisJc3Ry dWN0IGNjaV9yZWdfc2VxdWVuY2UgcmVnc1s0XTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aW14MjgzX2lucHV0X2ZyZXF1ZW5jeSBpbXgyODNfZnJlcXVlbmNpZXNbXSA9IHsKKwl7CisJCS5t aHogPSBNSFooNiksCisJCS5yZWdfY291bnQgPSA0LAorCQkucmVncyA9IHsKKwkJCXsgSU1YMjgz X1JFR19QTFJEMSwgMHgwMCB9LAorCQkJeyBJTVgyODNfUkVHX1BMUkQyLCAweDAwZjAgfSwKKwkJ CXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMCB9LAorCQkJeyBJTVgyODNfUkVHX1BMUkQ0LCAweGMw IH0sCisJCX0sCisJfSwKKwl7CisJCS5taHogPSBNSFooMTIpLAorCQkucmVnX2NvdW50ID0gNCwK KwkJLnJlZ3MgPSB7CisJCQl7IElNWDI4M19SRUdfUExSRDEsIDB4MDEgfSwKKwkJCXsgSU1YMjgz X1JFR19QTFJEMiwgMHgwMGYwIH0sCisJCQl7IElNWDI4M19SRUdfUExSRDMsIDB4MDEgfSwKKwkJ CXsgSU1YMjgzX1JFR19QTFJENCwgMHhjMCB9LAorCQl9LAorCX0sCisJeworCQkubWh6ID0gTUha KDE4KSwKKwkJLnJlZ19jb3VudCA9IDQsCisJCS5yZWdzID0geworCQkJeyBJTVgyODNfUkVHX1BM UkQxLCAweDAxIH0sCisJCQl7IElNWDI4M19SRUdfUExSRDIsIDB4MDBhMCB9LAorCQkJeyBJTVgy ODNfUkVHX1BMUkQzLCAweDAxIH0sCisJCQl7IElNWDI4M19SRUdfUExSRDQsIDB4ODAgfSwKKwkJ fSwKKwl9LAorCXsKKwkJLm1oeiA9IE1IWigyNCksCisJCS5yZWdfY291bnQgPSA0LAorCQkucmVn cyA9IHsKKwkJCXsgSU1YMjgzX1JFR19QTFJEMSwgMHgwMiB9LAorCQkJeyBJTVgyODNfUkVHX1BM UkQyLCAweDAwZjAgfSwKKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMiB9LAorCQkJeyBJTVgy ODNfUkVHX1BMUkQ0LCAweGMwIH0sCisJCX0sCisJfSwKK307CisKK2VudW0gaW14MjgzX21vZGVz IHsKKwlJTVgyODNfTU9ERV8wLAorCUlNWDI4M19NT0RFXzEsCisJSU1YMjgzX01PREVfMUEsCisJ SU1YMjgzX01PREVfMVMsCisJSU1YMjgzX01PREVfMiwKKwlJTVgyODNfTU9ERV8yQSwKKwlJTVgy ODNfTU9ERV8zLAorCUlNWDI4M19NT0RFXzQsCisJSU1YMjgzX01PREVfNSwKKwlJTVgyODNfTU9E RV82LAorfTsKKworc3RydWN0IGlteDI4M19yZWFkb3V0X21vZGUgeworCXU2NCBtZHNlbDE7CisJ dTY0IG1kc2VsMjsKKwl1NjQgbWRzZWwzOworCXU2NCBtZHNlbDQ7Cit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGlteDI4M19yZWFkb3V0X21vZGUgaW14MjgzX3JlYWRvdXRfbW9kZXNbXSA9IHsK KwkvKiBBbGwgcGl4ZWwgc2NhbiBtb2RlcyAqLworCVtJTVgyODNfTU9ERV8wXSA9IHsgMHgwNCwg MHgwMywgMHgxMCwgMHgwMCB9LCAvKiAxMiBiaXQgKi8KKwlbSU1YMjgzX01PREVfMV0gPSB7IDB4 MDQsIDB4MDEsIDB4MDAsIDB4MDAgfSwgLyogMTAgYml0ICovCisJW0lNWDI4M19NT0RFXzFBXSA9 IHsgMHgwNCwgMHgwMSwgMHgyMCwgMHg1MCB9LCAvKiAxMCBiaXQgKi8KKwlbSU1YMjgzX01PREVf MVNdID0geyAweDA0LCAweDQxLCAweDIwLCAweDUwIH0sIC8qIDEwIGJpdCAqLworCisJLyogSG9y aXpvbnRhbCAvIFZlcnRpY2FsIDIvMi1saW5lIGJpbm5pbmcgKi8KKwlbSU1YMjgzX01PREVfMl0g PSB7IDB4MGQsIDB4MTEsIDB4NTAsIDB4MDAgfSwgLyogMTIgYml0ICovCisJW0lNWDI4M19NT0RF XzJBXSA9IHsgMHgwZCwgMHgxMSwgMHg3MCwgMHg1MCB9LCAvKiAxMiBiaXQgKi8KKworCS8qIEhv cml6b250YWwgLyBWZXJ0aWNhbCAzLzMtbGluZSBiaW5uaW5nICovCisJW0lNWDI4M19NT0RFXzNd ID0geyAweDFlLCAweDE4LCAweDEwLCAweDAwIH0sIC8qIDEyIGJpdCAqLworCisJLyogVmVyaXRj YWwgMi85IHN1YnNhbXBsaW5nLCBob3Jpem9udGFsIDMgYmlubmluZyBjcm9wcGluZyAqLworCVtJ TVgyODNfTU9ERV80XSA9IHsgMHgyOSwgMHgxOCwgMHgzMCwgMHg1MCB9LCAvKiAxMiBiaXQgKi8K KworCS8qIFZlcnRpY2FsIDIvMTkgc3Vic2FtcGxpbmcgYmlubmluZywgaG9yaXpvbnRhbCAzIGJp bm5pbmcgKi8KKwlbSU1YMjgzX01PREVfNV0gPSB7IDB4MmQsIDB4MTgsIDB4MTAsIDB4MDAgfSwg LyogMTIgYml0ICovCisKKwkvKiBWZXJ0aWNhbCAyIGJpbm5pbmcgaG9yaXpvbnRhbCAyLzQsIHN1 YnNhbXBsaW5nIDE2OjkgY3JvcHBpbmcgKi8KKwlbSU1YMjgzX01PREVfNl0gPSB7IDB4MTgsIDB4 MjEsIDB4MDAsIDB4MDkgfSwgLyogMTAgYml0ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGNjaV9yZWdfc2VxdWVuY2UgbWlwaV9kYXRhX3JhdGVfMTQ0ME1icHNbXSA9IHsKKwkvKiBUaGUg ZGVmYXVsdCByZWdpc3RlciBzZXR0aW5ncyBwcm92aWRlIHRoZSAxNDQwTWJwcyByYXRlICovCisJ eyBDQ0lfUkVHOCgweDM2YzUpLCAweDAwIH0sIC8qIFVuZG9jdW1lbnRlZCAqLworCXsgQ0NJX1JF RzgoMHgzYWM0KSwgMHgwMCB9LCAvKiBVbmRvY3VtZW50ZWQgKi8KKworCXsgQ0NJX1JFRzgoMHgz MjBCKSwgMHgwMCB9LCAvKiBTVEJQTCAqLworCXsgQ0NJX1JFRzgoMHgzMDE4KSwgMHhhNyB9LCAv KiBUQ0xLUE9TVCAqLworCXsgQ0NJX1JFRzgoMHgzMDFBKSwgMHg2ZiB9LCAvKiBUSFNQUkVQQVJF ICovCisJeyBDQ0lfUkVHOCgweDMwMUMpLCAweDlmIH0sIC8qIFRIU1pFUk8gKi8KKwl7IENDSV9S RUc4KDB4MzAxRSksIDB4NWYgfSwgLyogVEhTVFJBSUwgKi8KKwl7IENDSV9SRUc4KDB4MzAyMCks IDB4NWYgfSwgLyogVENMS1RSQUlMICovCisJeyBDQ0lfUkVHOCgweDMwMjIpLCAweDZmIH0sIC8q IFRDTEtQUkVQQVJFICovCisJeyBDQ0lfUkVHOCgweDMwMjQpLCAweDdmIH0sIC8qIFRDTEtaRVJP Wzc6MF0gKi8KKwl7IENDSV9SRUc4KDB4MzAyNSksIDB4MDEgfSwgLyogVENMS1pFUk9bOF0gKi8K Kwl7IENDSV9SRUc4KDB4MzAyNiksIDB4NGYgfSwgLyogVExQWCovCisJeyBDQ0lfUkVHOCgweDMw MjgpLCAweDQ3IH0sIC8qIFRIU0VYSVQgKi8KKwl7IENDSV9SRUc4KDB4MzAyQSksIDB4MDcgfSwg LyogVENLTFBSRSAqLworCXsgQ0NJX1JFRzgoMHgzMTA0KSwgMHgwMiB9LCAvKiBTWVNNT0RFICov Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNjaV9yZWdfc2VxdWVuY2UgbWlwaV9kYXRhX3Jh dGVfNzIwTWJwc1tdID0geworCS8qIFVuZG9jdW1lbnRlZCBBZGRpdGlvbnMgIkZvciA3MjBNQnBz IiBTZXR0aW5nICovCisJeyBDQ0lfUkVHOCgweDM2YzUpLCAweDAxIH0sIC8qIFVuZG9jdW1lbnRl ZCAqLworCXsgQ0NJX1JFRzgoMHgzYWM0KSwgMHgwMSB9LCAvKiBVbmRvY3VtZW50ZWQgKi8KKwor CXsgQ0NJX1JFRzgoMHgzMjBCKSwgMHgwMCB9LCAvKiBTVEJQTCAqLworCXsgQ0NJX1JFRzgoMHgz MDE4KSwgMHg3NyB9LCAvKiBUQ0xLUE9TVCAqLworCXsgQ0NJX1JFRzgoMHgzMDFBKSwgMHgzNyB9 LCAvKiBUSFNQUkVQQVJFICovCisJeyBDQ0lfUkVHOCgweDMwMUMpLCAweDY3IH0sIC8qIFRIU1pF Uk8gKi8KKwl7IENDSV9SRUc4KDB4MzAxRSksIDB4MzcgfSwgLyogVEhTVFJBSUwgKi8KKwl7IEND SV9SRUc4KDB4MzAyMCksIDB4MzcgfSwgLyogVENMS1RSQUlMICovCisJeyBDQ0lfUkVHOCgweDMw MjIpLCAweDM3IH0sIC8qIFRDTEtQUkVQQVJFICovCisJeyBDQ0lfUkVHOCgweDMwMjQpLCAweERG IH0sIC8qIFRDTEtaRVJPWzc6MF0gKi8KKwl7IENDSV9SRUc4KDB4MzAyNSksIDB4MDAgfSwgLyog VENMS1pFUk9bOF0gKi8KKwl7IENDSV9SRUc4KDB4MzAyNiksIDB4MkYgfSwgLyogVExQWCovCisJ eyBDQ0lfUkVHOCgweDMwMjgpLCAweDQ3IH0sIC8qIFRIU0VYSVQgKi8KKwl7IENDSV9SRUc4KDB4 MzAyQSksIDB4MEYgfSwgLyogVENLTFBSRSAqLworCXsgQ0NJX1JFRzgoMHgzMTA0KSwgMHgwMiB9 LCAvKiBTWVNNT0RFICovCit9OworCitzdGF0aWMgY29uc3QgczY0IGxpbmtfZnJlcXVlbmNpZXNb XSA9IHsKKwlNSFooNzIwKSwgLyogMTQ0MCBNYnBzIGxhbmUgZGF0YSByYXRlICovCisJTUhaKDM2 MCksIC8qIDcyMCBNYnBzIGRhdGEgbGFuZSByYXRlICovCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IElNWDI4M19yZWdfbGlzdCBsaW5rX2ZyZXFfcmVnbGlzdFtdID0geworCXsgLyogTUhaKDcy MCkqLworCQkubnVtX29mX3JlZ3MgPSBBUlJBWV9TSVpFKG1pcGlfZGF0YV9yYXRlXzE0NDBNYnBz KSwKKwkJLnJlZ3MgPSBtaXBpX2RhdGFfcmF0ZV8xNDQwTWJwcywKKwl9LAorCXsgLyogTUhaKDM2 MCkgKi8KKwkJLm51bV9vZl9yZWdzID0gQVJSQVlfU0laRShtaXBpX2RhdGFfcmF0ZV83MjBNYnBz KSwKKwkJLnJlZ3MgPSBtaXBpX2RhdGFfcmF0ZV83MjBNYnBzLAorCX0sCit9OworCisjZGVmaW5l IENFTlRFUkVEX1JFQ1RBTkdMRShyZWN0LCBfd2lkdGgsIF9oZWlnaHQpIFwKKwl7IFwKKwkJLmxl ZnQgPSByZWN0LmxlZnQgKyAoKHJlY3Qud2lkdGggLSAoX3dpZHRoKSkgLyAyKSwgXAorCQkudG9w ID0gcmVjdC50b3AgKyAoKHJlY3QuaGVpZ2h0IC0gKF9oZWlnaHQpKSAvIDIpLCBcCisJCS53aWR0 aCA9IChfd2lkdGgpLCBcCisJCS5oZWlnaHQgPSAoX2hlaWdodCksIFwKKwl9CisKKy8qIE1vZGUg Y29uZmlncyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXgyODNfbW9kZSBzdXBwb3J0ZWRfbW9k ZXNfMTJiaXRbXSA9IHsKKwl7CisJCS8qIDIwTVBpeCAyMS40MCBmcHMgcmVhZG91dCBtb2RlIDAg Ki8KKwkJLm1vZGUgPSBJTVgyODNfTU9ERV8wLAorCQkuYnBwID0gMTIsCisJCS53aWR0aCA9IDU0 NzIsCisJCS5oZWlnaHQgPSAzNjQ4LAorCQkubWluX2htYXggPSA1OTE0LCAvKiA4ODcgQCA0ODBN SHovNzJNSHogKi8KKwkJLm1pbl92bWF4ID0gMzc5MywgLyogTGluZXMgKi8KKworCQkudmVmZiA9 IDM2OTQsCisJCS52c3QgPSAwLAorCQkudmN0ID0gMCwKKworCQkuaGJpbl9yYXRpbyA9IDEsCisJ CS52YmluX3JhdGlvID0gMSwKKworCQkvKiAyMC4wMCBGUFMgKi8KKwkJLmRlZmF1bHRfaG1heCA9 IDYwMDAsIC8qIDkwMCBAIDQ4ME1Iei83Mk1IeiAqLworCQkuZGVmYXVsdF92bWF4ID0gNDAwMCwK KworCQkubWluX3NociA9IDExLAorCQkuaG9yaXpvbnRhbF9vYiA9IDk2LAorCQkudmVydGljYWxf b2IgPSAxNiwKKwkJLmNyb3AgPSBDRU5URVJFRF9SRUNUQU5HTEUoaW14MjgzX2FjdGl2ZV9hcmVh LCA1NDcyLCAzNjQ4KSwKKwl9LAorCXsKKwkJLyoKKwkJICogUmVhZG91dCBtb2RlIDIgOiAyLzIg YmlubmVkIG1vZGUgKDI3MzZ4MTgyNCkKKwkJICovCisJCS5tb2RlID0gSU1YMjgzX01PREVfMiwK KwkJLmJwcCA9IDEyLAorCQkud2lkdGggPSAyNzM2LAorCQkuaGVpZ2h0ID0gMTgyNCwKKwkJLm1p bl9obWF4ID0gMTg3MCwgLyogUGl4ZWxzICgzNjIgKiAzNjAvNzIgKyBwYWRkaW5nKSAqLworCQku bWluX3ZtYXggPSAzODQwLCAvKiBMaW5lcyAqLworCisJCS8qIDUwLjAwIEZQUyAqLworCQkuZGVm YXVsdF9obWF4ID0gMTg3MCwgLyogMzYyIEAgMzYwTUh6LzcyTUh6ICovCisJCS5kZWZhdWx0X3Zt YXggPSAzOTYwLAorCisJCS52ZWZmID0gMTgyNCwKKwkJLnZzdCA9IDAsCisJCS52Y3QgPSAwLAor CisJCS5oYmluX3JhdGlvID0gMiwKKwkJLnZiaW5fcmF0aW8gPSAyLAorCisJCS5taW5fc2hyID0g MTIsCisJCS5ob3Jpem9udGFsX29iID0gNDgsCisJCS52ZXJ0aWNhbF9vYiA9IDQsCisKKwkJLmNy b3AgPSBDRU5URVJFRF9SRUNUQU5HTEUoaW14MjgzX2FjdGl2ZV9hcmVhLCA1NDcyLCAzNjQ4KSwK Kwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXgyODNfbW9kZSBzdXBwb3J0ZWRfbW9k ZXNfMTBiaXRbXSA9IHsKKwl7CisJCS8qIDIwTVBpeCAyNS40OCBmcHMgcmVhZG91dCBtb2RlIDEg Ki8KKwkJLm1vZGUgPSBJTVgyODNfTU9ERV8xLAorCQkuYnBwID0gMTAsCisJCS53aWR0aCA9IDU0 NzIsCisJCS5oZWlnaHQgPSAzNjQ4LAorCQkubWluX2htYXggPSA1OTYwLCAvKiA3NDUgQCA1NzZN SHogLyA3Mk1IeiAqLworCQkubWluX3ZtYXggPSAzNzkzLAorCisJCS8qIDI1LjAwIEZQUyAqLwor CQkuZGVmYXVsdF9obWF4ID0gMTUwMCwgLyogNzUwIEAgNTc2TUh6IC8gNzJNSHogKi8KKwkJLmRl ZmF1bHRfdm1heCA9IDM4NDAsCisKKwkJLm1pbl9zaHIgPSAxMCwKKwkJLmhvcml6b250YWxfb2Ig PSA5NiwKKwkJLnZlcnRpY2FsX29iID0gMTYsCisJCS5jcm9wID0gQ0VOVEVSRURfUkVDVEFOR0xF KGlteDI4M19hY3RpdmVfYXJlYSwgNTQ3MiwgMzY0OCksCisJfSwKK307CisKKy8qCisgKiBUaGUg c3VwcG9ydGVkIG1idXMgZm9ybWF0cy4KKyAqLworc3RhdGljIGNvbnN0IHUzMiBjb2Rlc1tdID0g eworCS8qIDEyLWJpdCBtb2Rlcy4gKi8KKwlNRURJQV9CVVNfRk1UX1NSR0dCMTJfMVgxMiwKKwor CS8qIDEwLWJpdCBtb2Rlcy4gKi8KKwlNRURJQV9CVVNfRk1UX1NSR0dCMTBfMVgxMCwKK307CisK Ky8qIHJlZ3VsYXRvciBzdXBwbGllcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlteDI4 M19zdXBwbHlfbmFtZVtdID0geworCSJ2YW5hIiwgLyogQW5hbG9nICgyLjlWKSBzdXBwbHkgKi8K KwkidmRpZyIsIC8qIFN1cHBseSBWb2x0YWdlIDIgKDEuOFYpIHN1cHBseSAqLworCSJ2ZGRsIiwg LyogU3VwcGx5IFZvbHRhZ2UgMyAoMS4yVikgc3VwcGx5ICovCit9OworCisKK3N0cnVjdCBpbXgy ODMgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcmVnbWFwICpjY2k7CisKKwljb25z dCBzdHJ1Y3QgaW14MjgzX2lucHV0X2ZyZXF1ZW5jeSAqZnJlcTsKKworCXN0cnVjdCB2NGwyX3N1 YmRldiBzZDsKKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZDsKKworCXVuc2lnbmVkIGludCBmbXRfY29k ZTsKKworCXN0cnVjdCBjbGsgKnhjbGs7CisKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlv OworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUoaW14Mjgz X3N1cHBseV9uYW1lKV07CisKKwkvKiBWNEwyIENvbnRyb2xzICovCisJc3RydWN0IHY0bDJfY3Ry bF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsKKwlzdHJ1Y3QgdjRsMl9jdHJsICpwaXhlbF9yYXRlOwor CXN0cnVjdCB2NGwyX2N0cmwgKmxpbmtfZnJlcTsKKwlzdHJ1Y3QgdjRsMl9jdHJsICpleHBvc3Vy ZTsKKwlzdHJ1Y3QgdjRsMl9jdHJsICp2Ymxhbms7CisJc3RydWN0IHY0bDJfY3RybCAqaGJsYW5r OworCXN0cnVjdCB2NGwyX2N0cmwgKnZmbGlwOworCisJc3RydWN0IG11dGV4IG11dGV4OworCisJ LyogQ3VycmVudCBtb2RlICovCisJY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlOworCisJ dW5zaWduZWQgbG9uZyBsaW5rX2ZyZXFfYml0bWFwOworCisJdTE2IGhtYXg7CisJdTMyIHZtYXg7 Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbXgyODMgKnRvX2lteDI4MyhzdHJ1Y3QgdjRs Ml9zdWJkZXYgKl9zZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKF9zZCwgc3RydWN0IGlteDI4 Mywgc2QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X21vZGVfdGFibGUodW5zaWduZWQg aW50IGNvZGUsCisJCQkJICBjb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKiptb2RlX2xpc3QsCisJ CQkJICB1bnNpZ25lZCBpbnQgKm51bV9tb2RlcykKK3sKKwlzd2l0Y2ggKGNvZGUpIHsKKwkvKiAx Mi1iaXQgKi8KKwljYXNlIE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyOgorCWNhc2UgTUVESUFf QlVTX0ZNVF9TR1JCRzEyXzFYMTI6CisJY2FzZSBNRURJQV9CVVNfRk1UX1NHQlJHMTJfMVgxMjoK KwljYXNlIE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEyOgorCQkqbW9kZV9saXN0ID0gc3VwcG9y dGVkX21vZGVzXzEyYml0OworCQkqbnVtX21vZGVzID0gQVJSQVlfU0laRShzdXBwb3J0ZWRfbW9k ZXNfMTJiaXQpOworCQlicmVhazsKKwkvKiAxMC1iaXQgKi8KKwljYXNlIE1FRElBX0JVU19GTVRf U1JHR0IxMF8xWDEwOgorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR1JCRzEwXzFYMTA6CisJY2FzZSBN RURJQV9CVVNfRk1UX1NHQlJHMTBfMVgxMDoKKwljYXNlIE1FRElBX0JVU19GTVRfU0JHR1IxMF8x WDEwOgorCQkqbW9kZV9saXN0ID0gc3VwcG9ydGVkX21vZGVzXzEwYml0OworCQkqbnVtX21vZGVz ID0gQVJSQVlfU0laRShzdXBwb3J0ZWRfbW9kZXNfMTBiaXQpOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQkqbW9kZV9saXN0ID0gTlVMTDsKKwkJKm51bV9tb2RlcyA9IDA7CisJfQorfQorCisvKiBD YWxjdWxhdGUgdGhlIFBpeGVsIFJhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgbW9kZSAqLworc3Rh dGljIHU2NCBpbXgyODNfcGl4ZWxfcmF0ZShzdHJ1Y3QgaW14MjgzICppbXgyODMpCit7CisJY29u c3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlID0gaW14MjgzLT5tb2RlOworCXVuc2lnbmVkIGlu dCBicHAgPSBtb2RlLT5icHA7CisKKwljb25zdCB1bnNpZ25lZCBpbnQgZGRyID0gMjsgLyogRG91 YmxlIERhdGEgUmF0ZSAqLworCWNvbnN0IHVuc2lnbmVkIGludCBsYW5lcyA9IDQ7IC8qIE9ubHkg NCBsYW5lIHN1cHBvcnQgKi8KKworCXU2NCBsaW5rX2ZyZXF1ZW5jeSA9IGxpbmtfZnJlcXVlbmNp ZXNbX19mZnMoaW14MjgzLT5saW5rX2ZyZXFfYml0bWFwKV07CisJdTY0IHBpeGVsX3JhdGUgPSBs aW5rX2ZyZXF1ZW5jeSAqIGRkciAqIGxhbmVzIC8gYnBwOworCisJcmV0dXJuIHBpeGVsX3JhdGU7 Cit9CisKKy8qIENvbnZlcnQgZnJvbSBhIHZhcmlhYmxlIHBpeGVsX3JhdGUgdG8gNzIgTUh6IGNs b2NrIGN5Y2xlcyAqLworc3RhdGljIHU2NCBpbXgyODNfaW50ZXJuYWxfY2xvY2sodW5zaWduZWQg aW50IHBpeGVsX3JhdGUsIHVuc2lnbmVkIGludCBwaXhlbHMpCit7CisJLyoKKwkgKiBEZXRlcm1p bmUgdGhlIGZvbGxvd2luZyBvcGVyYXRpb24gd2l0aG91dCBvdmVyZmxvdzoKKwkgKiAgICBwaXhl bHMgKiBNSFooNzIpIC8gcGl4ZWxfcmF0ZQorCSAqCisJICogVGhlIGludGVybmFsIGNsb2NrIGF0 IDcyTUh6IGFuZCBQaXhlbCBSYXRlIChiZXR3ZWVuIDI0MCBhbmQgNTc2TUh6KQorCSAqIGNhbiBl YXNpbHkgb3ZlcmZsb3cgdGhpcyBjYWxjdWxhdGlvbiwgc28gcHJlLWRpdmlkZSB0byBzaW1wbGlm eS4KKwkgKi8KKwljb25zdCB1MzIgaWNsa19wcmUgPSBNSFooNzIpIC8gMTAwMDAwMDsKKwljb25z dCB1MzIgcGNsa19wcmUgPSBwaXhlbF9yYXRlIC8gMTAwMDAwMDsKKworCXJldHVybiBwaXhlbHMg KiBpY2xrX3ByZSAvIHBjbGtfcHJlOworfQorCisvKiBJbnRlcm5hbCBjbG9jayAoNzJNSHopIHRv IFBpeGVsIFJhdGUgY2xvY2sgKFZhcmlhYmxlKSAqLworc3RhdGljIHU2NCBpbXgyODNfaWNsa190 b19waXgodW5zaWduZWQgaW50IHBpeGVsX3JhdGUsIHVuc2lnbmVkIGludCBjeWNsZXMpCit7CisJ LyoKKwkgKiBEZXRlcm1pbmUgdGhlIGZvbGxvd2luZyBvcGVyYXRpb24gd2l0aG91dCBvdmVyZmxv dzoKKwkgKiAgICBjeWNsZXMgKiBwaXhlbF9yYXRlIC8gTUhaKDcyKQorCSAqCisJICogVGhlIGlu dGVybmFsIGNsb2NrIGF0IDcyTUh6IGFuZCBQaXhlbCBSYXRlIChiZXR3ZWVuIDI0MCBhbmQgNTc2 TUh6KQorCSAqIGNhbiBlYXNpbHkgb3ZlcmZsb3cgdGhpcyBjYWxjdWxhdGlvbiwgc28gcHJlLWRp dmlkZSB0byBzaW1wbGlmeS4KKwkgKi8KKwljb25zdCB1MzIgaWNsa19wcmUgPSBNSFooNzIpIC8g MTAwMDAwMDsKKwljb25zdCB1MzIgcGNsa19wcmUgPSBwaXhlbF9yYXRlIC8gMTAwMDAwMDsKKwor CXJldHVybiBjeWNsZXMgKiBwY2xrX3ByZSAvIGljbGtfcHJlOworfQorCisvKiBEZXRlcm1pbmUg dGhlIGV4cG9zdXJlIGJhc2VkIG9uIGN1cnJlbnQgaG1heCwgdm1heCBhbmQgYSBnaXZlbiBTSFIg Ki8KK3N0YXRpYyB1NjQgaW14MjgzX2V4cG9zdXJlKHN0cnVjdCBpbXgyODMgKmlteDI4MywgdTY0 IHNocikKK3sKKwl1MzIgc3ZyID0gMDsgLyogU1ZSIGZlYXR1cmUgaXMgbm90IGN1cnJlbnRseSBz dXBwb3J0ZWQgKi8KKwl1MzIgaG1heCA9IGlteDI4My0+aG1heDsKKwl1NjQgdm1heCA9IGlteDI4 My0+dm1heDsKKwl1MzIgb2Zmc2V0OworCXU2NCBudW1lcmF0b3I7CisKKwkvKiBOdW1iZXIgb2Yg Y2xvY2tzIHBlciBpbnRlcm5hbCBvZmZzZXQgcGVyaW9kICovCisJb2Zmc2V0ID0gaW14MjgzLT5t b2RlLT5tb2RlID09IElNWDI4M19NT0RFXzAgPyAyMDkgOiAxNTc7CisJbnVtZXJhdG9yID0gKHZt YXggKiAoc3ZyICsgMSkgLSBzaHIpICogaG1heCArIG9mZnNldDsKKworCWRvX2RpdihudW1lcmF0 b3IsIGhtYXgpOworCW51bWVyYXRvciA9IGNsYW1wX3QodTMyLCBudW1lcmF0b3IsIDAsIDB4RkZG RkZGRkYpOworCXJldHVybiBudW1lcmF0b3I7Cit9CisKK3N0YXRpYyB2b2lkIGlteDI4M19leHBv c3VyZV9saW1pdHMoc3RydWN0IGlteDI4MyAqaW14MjgzLAorCQkJCSAgIHU2NCAqbWluX2V4cG9z dXJlLCB1NjQgKm1heF9leHBvc3VyZSkKK3sKKwl1NjQgdm1heCA9IGlteDI4My0+dm1heDsKKwl1 MzIgc3ZyID0gMDsgLyogU1ZSIGZlYXR1cmUgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgKi8K Kwl1NjQgbWluX3NociA9IGlteDI4My0+bW9kZS0+bWluX3NocjsKKwl1NjQgbWF4X3NociA9IChz dnIgKyAxKSAqIHZtYXggLSA0OyAvKiBHbG9iYWwgU2h1dHRlciBpcyBub3Qgc3VwcG9ydGVkICov CisKKwltYXhfc2hyID0gbWluX3QodTY0LCBtYXhfc2hyLCAweEZGRkYpOworCisJKm1pbl9leHBv c3VyZSA9IGlteDI4M19leHBvc3VyZShpbXgyODMsIG1heF9zaHIpOworCSptYXhfZXhwb3N1cmUg PSBpbXgyODNfZXhwb3N1cmUoaW14MjgzLCBtaW5fc2hyKTsKK30KKworLyoKKyAqIEludGVncmF0 aW9uIFRpbWUgW3NdID0gW3tWTUFYIHggKFNWUiArIDEpIOKAkyAoU0hSKX0geCBITUFYICsgb2Zm c2V0XQorICogICAgICAgICAgICAgICAgICAgICAgLyAoNzIgeCAxMF42KQorICovCitzdGF0aWMg dTMyIGlteDI4M19zaHIoc3RydWN0IGlteDI4MyAqaW14MjgzLCB1MzIgZXhwb3N1cmUpCit7CisJ dTMyIHN2ciA9IDA7IC8qIFNWUiBmZWF0dXJlIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkICov CisJdTMyIGhtYXggPSBpbXgyODMtPmhtYXg7CisJdTY0IHZtYXggPSBpbXgyODMtPnZtYXg7CisJ dTMyIHNocjsKKwl1NjQgdGVtcDsKKworCS8qIE51bWJlciBvZiBjbG9ja3MgcGVyIGludGVybmFs IG9mZnNldCBwZXJpb2QgKi8KKwl1MzIgb2Zmc2V0ID0gaW14MjgzLT5tb2RlLT5tb2RlID09IElN WDI4M19NT0RFXzAgPyAyMDkgOiAxNTc7CisKKwl0ZW1wID0gKCh1NjQpZXhwb3N1cmUgKiBobWF4 IC0gb2Zmc2V0KTsKKwlkb19kaXYodGVtcCwgaG1heCk7CisJc2hyID0gKHUzMikodm1heCAqIChz dnIgKyAxKSAtIHRlbXApOworCisJcmV0dXJuIHNocjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIg KiBjb25zdCBpbXgyODNfdHBnX21lbnVbXSA9IHsKKwkiRGlzYWJsZWQiLAorCSJBbGwgMDAwaCIs CisJIkFsbCBGRkZoIiwKKwkiQWxsIDU1NWgiLAorCSJBbGwgQUFBaCIsCisJIkhvcml6b250YWwg Y29sb3IgYmFycyIsCisJIlZlcnRpY2FsIGNvbG9yIGJhcnMiLAorfTsKKworc3RhdGljIGNvbnN0 IGludCBpbXgyODNfdHBnX3ZhbFtdID0geworCUlNWDI4M19UUEdfUEFUX0FMTF8wMDAsCisJSU1Y MjgzX1RQR19QQVRfQUxMXzAwMCwKKwlJTVgyODNfVFBHX1BBVF9BTExfRkZGLAorCUlNWDI4M19U UEdfUEFUX0FMTF81NTUsCisJSU1YMjgzX1RQR19QQVRfQUxMX0FBQSwKKwlJTVgyODNfVFBHX1BB VF9IX0NPTE9SX0JBUlMsCisJSU1YMjgzX1RQR19QQVRfVl9DT0xPUl9CQVJTLAorfTsKKworc3Rh dGljIGludCBpbXgyODNfdXBkYXRlX3Rlc3RfcGF0dGVybihzdHJ1Y3QgaW14MjgzICppbXgyODMs IHUzMiBwYXR0ZXJuX2luZGV4KQoreworCWludCByZXQ7CisKKwlpZiAocGF0dGVybl9pbmRleCA+ PSBBUlJBWV9TSVpFKGlteDI4M190cGdfdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAo cGF0dGVybl9pbmRleCkgeworCQlyZXQgPSBjY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19S RUdfVFBHX1BBVCwKKwkJCQlpbXgyODNfdHBnX3ZhbFtwYXR0ZXJuX2luZGV4XSwgTlVMTCk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGNjaV93cml0ZShpbXgyODMtPmNj aSwgSU1YMjgzX1JFR19UUEdfQ1RSTCwKKwkJCQlJTVgyODNfVFBHX0NUUkxfQ0xLRU4gfCBJTVgy ODNfVFBHX0NUUkxfUEFURU4sIE5VTEwpOworCX0gZWxzZSB7CisJCXJldCA9IGNjaV93cml0ZShp bXgyODMtPmNjaSwgSU1YMjgzX1JFR19UUEdfQ1RSTCwgMHgwMCwgTlVMTCk7CisJfQorCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbXgyODNfc2V0X2N0cmwoc3RydWN0IHY0bDJfY3Ry bCAqY3RybCkKK3sKKwlzdHJ1Y3QgaW14MjgzICppbXgyODMgPSBjb250YWluZXJfb2YoY3RybC0+ aGFuZGxlciwgc3RydWN0IGlteDI4MywKKwkJCQkJICAgICBjdHJsX2hhbmRsZXIpOworCWNvbnN0 IHN0cnVjdCBpbXgyODNfbW9kZSAqbW9kZSA9IGlteDI4My0+bW9kZTsKKwl1NjQgc2hyLCBwaXhl bF9yYXRlOworCWludCByZXQgPSAwOworCisJLyoKKwkgKiBUaGUgVkJMQU5LIGNvbnRyb2wgbWF5 IGNoYW5nZSB0aGUgbGltaXRzIG9mIHVzYWJsZSBleHBvc3VyZSwgc28gY2hlY2sKKwkgKiBhbmQg YWRqdXN0IGlmIG5lY2Vzc2FyeS4KKwkgKi8KKwlpZiAoY3RybC0+aWQgPT0gVjRMMl9DSURfVkJM QU5LKSB7CisJCS8qIEhvbm91ciB0aGUgVkJMQU5LIGxpbWl0cyB3aGVuIHNldHRpbmcgZXhwb3N1 cmUuICovCisJCXU2NCBjdXJyZW50X2V4cG9zdXJlLCBtYXhfZXhwb3N1cmUsIG1pbl9leHBvc3Vy ZTsKKworCQlpbXgyODMtPnZtYXggPSBtb2RlLT5oZWlnaHQgKyBjdHJsLT52YWw7CisKKwkJaW14 MjgzX2V4cG9zdXJlX2xpbWl0cyhpbXgyODMsICZtaW5fZXhwb3N1cmUsICZtYXhfZXhwb3N1cmUp OworCisJCWN1cnJlbnRfZXhwb3N1cmUgPSBpbXgyODMtPmV4cG9zdXJlLT52YWw7CisJCWN1cnJl bnRfZXhwb3N1cmUgPSBjbGFtcF90KHUzMiwgY3VycmVudF9leHBvc3VyZSwgbWluX2V4cG9zdXJl LAorCQkJCQkgICBtYXhfZXhwb3N1cmUpOworCisJCV9fdjRsMl9jdHJsX21vZGlmeV9yYW5nZShp bXgyODMtPmV4cG9zdXJlLCBtaW5fZXhwb3N1cmUsCisJCQkJCSBtYXhfZXhwb3N1cmUsIDEsIGN1 cnJlbnRfZXhwb3N1cmUpOworCX0KKworCS8qCisJICogQXBwbHlpbmcgVjRMMiBjb250cm9sIHZh bHVlIG9ubHkgaGFwcGVucworCSAqIHdoZW4gcG93ZXIgaXMgdXAgZm9yIHN0cmVhbWluZworCSAq LworCWlmIChwbV9ydW50aW1lX2dldF9pZl9pbl91c2UoaW14MjgzLT5kZXYpID09IDApCisJCXJl dHVybiAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6 CisJCXNociA9IGlteDI4M19zaHIoaW14MjgzLCBjdHJsLT52YWwpOworCQlkZXZfZGJnKGlteDI4 My0+ZGV2LCAiVjRMMl9DSURfRVhQT1NVUkUgOiAlZCAtIFNIUjogJWxsZFxuIiwKKwkJCWN0cmwt PnZhbCwgc2hyKTsKKwkJcmV0ID0gY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1NI Uiwgc2hyLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0hCTEFOSzoKKwkJcGl4 ZWxfcmF0ZSA9IGlteDI4M19waXhlbF9yYXRlKGlteDI4Myk7CisJCWlteDI4My0+aG1heCA9IGlt eDI4M19pbnRlcm5hbF9jbG9jayhwaXhlbF9yYXRlLCBtb2RlLT53aWR0aCArIGN0cmwtPnZhbCk7 CisJCWRldl9kYmcoaW14MjgzLT5kZXYsICJWNEwyX0NJRF9IQkxBTksgOiAlZCAgSE1BWCA6ICVk XG4iLAorCQkJY3RybC0+dmFsLCBpbXgyODMtPmhtYXgpOworCQlyZXQgPSBjY2lfd3JpdGUoaW14 MjgzLT5jY2ksIElNWDI4M19SRUdfSE1BWCwgaW14MjgzLT5obWF4LCBOVUxMKTsKKwkJYnJlYWs7 CisKKwljYXNlIFY0TDJfQ0lEX1ZCTEFOSzoKKwkJaW14MjgzLT52bWF4ID0gbW9kZS0+aGVpZ2h0 ICsgY3RybC0+dmFsOworCQlkZXZfZGJnKGlteDI4My0+ZGV2LCAiVjRMMl9DSURfVkJMQU5LIDog JWQgIFZNQVggOiAlZFxuIiwKKwkJCWN0cmwtPnZhbCwgaW14MjgzLT52bWF4KTsKKwkJcmV0ID0g Y2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1ZNQVgsIGlteDI4My0+dm1heCwgTlVM TCk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOOgorCQlyZXQgPSBj Y2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfQU5BTE9HX0dBSU4sIGN0cmwtPnZhbCwg TlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9ESUdJVEFMX0dBSU46CisJCXJldCA9 IGNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19ESUdJVEFMX0dBSU4sIGN0cmwtPnZh bCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJLyoKKwkJICog VkZMSVAgaXMgbWFuYWdlZCBieSBCSVQoMCkgb2YgSU1YMjgzX1JFR19IVFJJTU1JTkcgYWRkcmVz cywgaGVuY2UKKwkJICogYm90aCBuZWVkZWQgdG8gYmUgc2V0IHNpbXVsYXRlbm91c2x5LgorCQkg Ki8KKwkJaWYgKGN0cmwtPnZhbCkgeworCQkJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNf UkVHX0hUUklNTUlORywKKwkJCQkgIElNWDI4M19IVFJJTU1JTkdfRU4gfCBJTVgyODNfTURWUkVW LCAmcmV0KTsKKwkJfSBlbHNlIHsKKwkJCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JF R19IVFJJTU1JTkcsCisJCQkJICBJTVgyODNfSFRSSU1NSU5HX0VOLCAmcmV0KTsKKwkJfQorCQli cmVhazsKKworCWNhc2UgVjRMMl9DSURfVEVTVF9QQVRURVJOOgorCQlyZXQgPSBpbXgyODNfdXBk YXRlX3Rlc3RfcGF0dGVybihpbXgyODMsIGN0cmwtPnZhbCk7CisJCWJyZWFrOworCisJZGVmYXVs dDoKKwkJZGV2X2VycihpbXgyODMtPmRldiwgImN0cmwoaWQ6MHgleCwgdmFsOjB4JXgpIGlzIG5v dCBoYW5kbGVkXG4iLAorCQkJY3RybC0+aWQsIGN0cmwtPnZhbCk7CisJCWJyZWFrOworCX0KKwor CXBtX3J1bnRpbWVfcHV0KGlteDI4My0+ZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBpbXgyODNfY3RybF9vcHMgPSB7CisJLnNfY3Ry bCA9IGlteDI4M19zZXRfY3RybCwKK307CisKK3N0YXRpYyBpbnQgaW14MjgzX2VudW1fbWJ1c19j b2RlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJIHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0 ZSAqc2Rfc3RhdGUsCisJCQkJIHN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSAqY29k ZSkKK3sKKwlpZiAoY29kZS0+aW5kZXggPj0gKEFSUkFZX1NJWkUoY29kZXMpKSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwljb2RlLT5jb2RlID0gY29kZXNbY29kZS0+aW5kZXhdOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaW14MjgzX2VudW1fZnJhbWVfc2l6ZShzdHJ1Y3QgdjRsMl9z dWJkZXYgKnNkLAorCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0ZSwKKwkJ CQkgIHN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9zaXplX2VudW0gKmZzZSkKK3sKKwljb25zdCBz dHJ1Y3QgaW14MjgzX21vZGUgKm1vZGVfbGlzdDsKKwl1bnNpZ25lZCBpbnQgbnVtX21vZGVzOwor CisJZ2V0X21vZGVfdGFibGUoZnNlLT5jb2RlLCAmbW9kZV9saXN0LCAmbnVtX21vZGVzKTsKKwor CWlmIChmc2UtPmluZGV4ID49IG51bV9tb2RlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmc2Ut Pm1pbl93aWR0aCA9IG1vZGVfbGlzdFtmc2UtPmluZGV4XS53aWR0aDsKKwlmc2UtPm1heF93aWR0 aCA9IGZzZS0+bWluX3dpZHRoOworCWZzZS0+bWluX2hlaWdodCA9IG1vZGVfbGlzdFtmc2UtPmlu ZGV4XS5oZWlnaHQ7CisJZnNlLT5tYXhfaGVpZ2h0ID0gZnNlLT5taW5faGVpZ2h0OworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlteDI4M19yZXNldF9jb2xvcnNwYWNlKHN0cnVjdCB2 NGwyX21idXNfZnJhbWVmbXQgKmZtdCkKK3sKKwlmbXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9S U1BBQ0VfUkFXOworCWZtdC0+eWNiY3JfZW5jID0gVjRMMl9NQVBfWUNCQ1JfRU5DX0RFRkFVTFQo Zm10LT5jb2xvcnNwYWNlKTsKKwlmbXQtPnF1YW50aXphdGlvbiA9IFY0TDJfTUFQX1FVQU5USVpB VElPTl9ERUZBVUxUKHRydWUsIGZtdC0+Y29sb3JzcGFjZSwKKwkJCQkJCQkgIGZtdC0+eWNiY3Jf ZW5jKTsKKwlmbXQtPnhmZXJfZnVuYyA9IFY0TDJfTUFQX1hGRVJfRlVOQ19ERUZBVUxUKGZtdC0+ Y29sb3JzcGFjZSk7Cit9CisKK3N0YXRpYyB2b2lkIGlteDI4M191cGRhdGVfaW1hZ2VfcGFkX2Zv cm1hdChzdHJ1Y3QgaW14MjgzICppbXgyODMsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbXgyODNf bW9kZSAqbW9kZSwKKwkJCQkJICAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm9ybWF0KQor eworCWZvcm1hdC0+d2lkdGggPSBtb2RlLT53aWR0aDsKKwlmb3JtYXQtPmhlaWdodCA9IG1vZGUt PmhlaWdodDsKKwlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCWlteDI4M19yZXNl dF9jb2xvcnNwYWNlKGZvcm1hdCk7Cit9CisKK3N0YXRpYyBpbnQgaW14MjgzX2luaXRfc3RhdGUo c3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRl ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgaW14MjgzICppbXgyODMgPSB0b19pbXgyODMoc2QpOworCXN0 cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdDsKKwljb25zdCBzdHJ1Y3QgaW14MjgzX21v ZGUgKm1vZGU7CisJc3RydWN0IHY0bDJfcmVjdCAqY3JvcDsKKworCS8qIEluaXRpYWxpemUgdHJ5 X2ZtdCAqLworCWZvcm1hdCA9IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9mb3JtYXQoc3RhdGUsIElN QUdFX1BBRCk7CisKKwltb2RlID0gJnN1cHBvcnRlZF9tb2Rlc18xMmJpdFswXTsKKwlpbXgyODMt Pm1vZGUgPSBtb2RlOworCWZvcm1hdC0+Y29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEy OworCWlteDI4M191cGRhdGVfaW1hZ2VfcGFkX2Zvcm1hdChpbXgyODMsIG1vZGUsIGZvcm1hdCk7 CisKKwkvKiBJbml0aWFsaXplIGNyb3AgcmVjdGFuZ2xlIHRvIG1vZGUgZGVmYXVsdCAqLworCWNy b3AgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfY3JvcChzdGF0ZSwgSU1BR0VfUEFEKTsKKwkqY3Jv cCA9IG1vZGUtPmNyb3A7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW14MjgzX3Nl dF9mcmFtaW5nX2xpbWl0cyhzdHJ1Y3QgaW14MjgzICppbXgyODMpCit7CisJY29uc3Qgc3RydWN0 IGlteDI4M19tb2RlICptb2RlID0gaW14MjgzLT5tb2RlOworCXU2NCBwaXhlbF9yYXRlID0gaW14 MjgzX3BpeGVsX3JhdGUoaW14MjgzKTsKKwl1NjQgbWluX2hibGFuaywgbWF4X2hibGFuaywgZGVm X2hibGFuazsKKworCS8qCisJICogSW5pdGlhbGlzZSBobWF4IGFuZCB2bWF4IGZvciBleHBvc3Vy ZSBjYWxjdWxhdGlvbnMKKwkgKi8KKwlpbXgyODMtPmhtYXggPSBpbXgyODNfaW50ZXJuYWxfY2xv Y2socGl4ZWxfcmF0ZSwgbW9kZS0+ZGVmYXVsdF9obWF4KTsKKwlpbXgyODMtPnZtYXggPSBtb2Rl LT5kZWZhdWx0X3ZtYXg7CisKKwkvKgorCSAqIEhvcml6b250YWwgQmxhbmtpbmcKKwkgKiBDb252 ZXJ0IHRoZSBITUFYX01BWCAoNzJNSHopIHRvIFBpeGVsIHJhdGUgdmFsdWVzIGZvciBIQkxBTktf TUFYCisJICovCisJbWluX2hibGFuayA9IG1vZGUtPm1pbl9obWF4IC0gbW9kZS0+d2lkdGg7CisJ bWF4X2hibGFuayA9IGlteDI4M19pY2xrX3RvX3BpeChwaXhlbF9yYXRlLCBJTVgyODNfSE1BWF9N QVgpIC0gbW9kZS0+d2lkdGg7CisJZGVmX2hibGFuayA9IG1vZGUtPmRlZmF1bHRfaG1heCAtIG1v ZGUtPndpZHRoOworCV9fdjRsMl9jdHJsX21vZGlmeV9yYW5nZShpbXgyODMtPmhibGFuaywgbWlu X2hibGFuaywgbWF4X2hibGFuaywgMSwKKwkJCQkgZGVmX2hibGFuayk7CisJX192NGwyX2N0cmxf c19jdHJsKGlteDI4My0+aGJsYW5rLCBkZWZfaGJsYW5rKTsKKworCS8qIFZlcnRpY2FsIEJsYW5r aW5nICovCisJX192NGwyX2N0cmxfbW9kaWZ5X3JhbmdlKGlteDI4My0+dmJsYW5rLCBtb2RlLT5t aW5fdm1heCAtIG1vZGUtPmhlaWdodCwKKwkJCQkgSU1YMjgzX1ZNQVhfTUFYIC0gbW9kZS0+aGVp Z2h0LCAxLAorCQkJCSBtb2RlLT5kZWZhdWx0X3ZtYXggLSBtb2RlLT5oZWlnaHQpOworCV9fdjRs Ml9jdHJsX3NfY3RybChpbXgyODMtPnZibGFuaywgbW9kZS0+ZGVmYXVsdF92bWF4IC0gbW9kZS0+ aGVpZ2h0KTsKK30KKworc3RhdGljIGludCBpbXgyODNfc2V0X3BhZF9mb3JtYXQoc3RydWN0IHY0 bDJfc3ViZGV2ICpzZCwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0ZSwK KwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB2NGwyX21i dXNfZnJhbWVmbXQgKmZvcm1hdDsKKwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGU7CisJ c3RydWN0IGlteDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKwljb25zdCBzdHJ1Y3QgaW14 MjgzX21vZGUgKm1vZGVfbGlzdDsKKwl1bnNpZ25lZCBpbnQgbnVtX21vZGVzOworCisJZ2V0X21v ZGVfdGFibGUoZm10LT5mb3JtYXQuY29kZSwgJm1vZGVfbGlzdCwgJm51bV9tb2Rlcyk7CisKKwlt b2RlID0gdjRsMl9maW5kX25lYXJlc3Rfc2l6ZShtb2RlX2xpc3QsIG51bV9tb2Rlcywgd2lkdGgs IGhlaWdodCwKKwkJCQkgICAgICBmbXQtPmZvcm1hdC53aWR0aCwgZm10LT5mb3JtYXQuaGVpZ2h0 KTsKKworCWlteDI4M191cGRhdGVfaW1hZ2VfcGFkX2Zvcm1hdChpbXgyODMsIG1vZGUsICZmbXQt PmZvcm1hdCk7CisKKwlmb3JtYXQgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHNkX3N0 YXRlLCAwKTsKKworCWlmIChpbXgyODMtPm1vZGUgPT0gbW9kZSAmJiBmb3JtYXQtPmNvZGUgPT0g Zm10LT5mb3JtYXQuY29kZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZm10LT53aGljaCA9PSBWNEwy X1NVQkRFVl9GT1JNQVRfQUNUSVZFKSB7CisJCWlteDI4My0+bW9kZSA9IG1vZGU7CisJCWlteDI4 My0+Zm10X2NvZGUgPSBmbXQtPmZvcm1hdC5jb2RlOworCQlpbXgyODNfc2V0X2ZyYW1pbmdfbGlt aXRzKGlteDI4Myk7CisJfQorCisJKmZvcm1hdCA9IGZtdC0+Zm9ybWF0OworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgaW14MjgzX3N0YW5kYnlfY2FuY2VsKHN0cnVjdCBpbXgyODMgKmlt eDI4MykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgbGlua19mcmVxX2lkeDsKKwor CWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19TVEFOREJZLAorCQkgIElNWDI4M19T VEJMT0dJQyB8IElNWDI4M19TVEJEViwgJnJldCk7CisKKwkvKiBDb25maWd1cmUgUExMIGNsb2Nr cyBiYXNlZCBvbiB0aGUgeGNsayAqLworCWNjaV9tdWx0aV9yZWdfd3JpdGUoaW14MjgzLT5jY2ks IGlteDI4My0+ZnJlcS0+cmVncywKKwkJCSAgICBpbXgyODMtPmZyZXEtPnJlZ19jb3VudCwgJnJl dCk7CisKKwlkZXZfZGJnKGlteDI4My0+ZGV2LCAiVXNpbmcgY2xrIGZyZXEgJWQgTUh6IiwgaW14 MjgzLT5mcmVxLT5taHogLyBNSFooMSkpOworCisJLyogSW5pdGlhbGlzZSBjb21tdW5pY2F0aW9u ICovCisJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1BMU1RNRzA4LCBJTVgyODNf UExTVE1HMDhfVkFMLCAmcmV0KTsKKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdf UExTVE1HMDIsIElNWDI4M19QTFNUTUcwMl9WQUwsICZyZXQpOworCisJLyogRW5hYmxlIFBMTCAq LworCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19TVEJQTCwgSU1YMjgzX1NUQlBM X05PUk1BTCwgJnJldCk7CisKKwkvKiBDb25maWd1cmUgdGhlIE1JUEkgbGluayBzcGVlZCAqLwor CWxpbmtfZnJlcV9pZHggPSBfX2ZmcyhpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXApOworCWNjaV9t dWx0aV9yZWdfd3JpdGUoaW14MjgzLT5jY2ksCisJCQkgICAgbGlua19mcmVxX3JlZ2xpc3RbbGlu a19mcmVxX2lkeF0ucmVncywKKwkJCSAgICBsaW5rX2ZyZXFfcmVnbGlzdFtsaW5rX2ZyZXFfaWR4 XS5udW1fb2ZfcmVncywKKwkJCSAgICAmcmV0KTsKKworCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAw KTsgLyogMXN0IFN0YWJpbGlzYXRpb24gcGVyaW9kIG9mIDEgbXMgb3IgbW9yZSAqLworCisJLyog QWN0aXZhdGUgKi8KKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1RBTkRCWSwg SU1YMjgzX0FDVElWRSwgJnJldCk7CisJdXNsZWVwX3JhbmdlKDE5MDAwLCAyMDAwMCk7IC8qIDJu ZCBTdGFiaWxpc2F0aW9uIHBlcmlvZCBvZiAxOW1zIG9yIG1vcmUgKi8KKworCWNjaV93cml0ZShp bXgyODMtPmNjaSwgSU1YMjgzX1JFR19DTEFNUCwgSU1YMjgzX0NMUFNRUlNULCAmcmV0KTsKKwlj Y2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfWE1TVEEsIDAsICZyZXQpOworCWNjaV93 cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19TWU5DRFJWLCBJTVgyODNfU1lOQ0RSVl9YSFNf WFZTLCAmcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFN0YXJ0IHN0cmVhbWluZyAqLwor c3RhdGljIGludCBpbXgyODNfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCBpbXgyODMgKmlteDI4MywK KwkJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc3RhdGUpCit7CisJY29uc3Qgc3RydWN0 IGlteDI4M19yZWFkb3V0X21vZGUgKnJlYWRvdXQ7CisJY29uc3Qgc3RydWN0IGlteDI4M19tb2Rl ICptb2RlID0gaW14MjgzLT5tb2RlOworCXUzMiB2X3dpZGN1dDsKKwlzMzIgdl9wb3M7CisJdTMy IHdyaXRlX3Zfc2l6ZTsKKwl1MzIgeV9vdXRfc2l6ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gaW14 MjgzX3N0YW5kYnlfY2FuY2VsKGlteDI4Myk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGlteDI4 My0+ZGV2LCAiZmFpbGVkIHRvIGNhbmNlbCBzdGFuZGJ5XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwkvKgorCSAqIFNldCB0aGUgcmVhZG91dCBtb2RlIHJlZ2lzdGVycy4KKwkgKiBNRFNFTDMg YW5kIE1EU0VMNCBhcmUgdXBkYXRlZCB0byBlbmFibGUgQXJiaXRyYXJ5IFZlcnRpY2FsIENyb3Bw aW5nLgorCSAqLworCXJlYWRvdXQgPSAmaW14MjgzX3JlYWRvdXRfbW9kZXNbaW14MjgzLT5tb2Rl LT5tb2RlXTsKKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfTURTRUwxLCByZWFk b3V0LT5tZHNlbDEsICZyZXQpOworCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19N RFNFTDIsIHJlYWRvdXQtPm1kc2VsMiwgJnJldCk7CisJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJ TVgyODNfUkVHX01EU0VMMywKKwkJICByZWFkb3V0LT5tZHNlbDMgfCBJTVgyODNfTURTRUwzX1ZD Uk9QX0VOLCAmcmV0KTsKKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfTURTRUw0 LAorCQkgIHJlYWRvdXQtPm1kc2VsNCB8IElNWDI4M19NRFNFTDRfVkNST1BfRU4sICZyZXQpOwor CisJLyogTW9kZSAxUyBzcGVjaWZpYyBlbnRyaWVzIGZyb20gdGhlIFJlYWRvdXQgRHJpdmUgTW9k ZSBUYWJsZXMgKi8KKwlpZiAobW9kZS0+bW9kZSA9PSBJTVgyODNfTU9ERV8xUykgeworCQljY2lf d3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfTURTRUw3LCAweDAxLCAmcmV0KTsKKwkJY2Np X3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX01EU0VMMTgsIDB4MTA5OCwgJnJldCk7CisJ fQorCisJaWYgKHJldCkgeworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiJXMgZmFpbGVkIHRvIHNl dCByZWFkb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogSW5pdGlh bGlzZSBTVlIuIFVuc3VwcG9ydGVkIGZvciBub3cgLSBBbHdheXMgMCAqLworCWNjaV93cml0ZShp bXgyODMtPmNjaSwgSU1YMjgzX1JFR19TVlIsIDB4MDAsICZyZXQpOworCisJZGV2X2RiZyhpbXgy ODMtPmRldiwgIk1vZGU6IFNpemUgJWQgeCAlZFxuIiwgbW9kZS0+d2lkdGgsIG1vZGUtPmhlaWdo dCk7CisJZGV2X2RiZyhpbXgyODMtPmRldiwgIkFuYWxvZ3VlIENyb3AgKGluIHRoZSBtb2RlKSAl ZCwlZCAlZHglZFxuIiwKKwkJbW9kZS0+Y3JvcC5sZWZ0LAorCQltb2RlLT5jcm9wLnRvcCwKKwkJ bW9kZS0+Y3JvcC53aWR0aCwKKwkJbW9kZS0+Y3JvcC5oZWlnaHQpOworCisJeV9vdXRfc2l6ZSA9 IG1vZGUtPmNyb3AuaGVpZ2h0IC8gbW9kZS0+dmJpbl9yYXRpbzsKKwl3cml0ZV92X3NpemUgPSB5 X291dF9zaXplICsgbW9kZS0+dmVydGljYWxfb2I7CisJLyoKKwkgKiBjcm9wcGluZyBzdGFydCBw b3NpdGlvbiA9IChWV0lOUE9TIOKAkyBWc3QpIMOXIDIKKwkgKiBjcm9wcGluZyB3aWR0aCA9IFZl ZmYg4oCTIChWV0lEQ1VUIOKAkyBWY3QpIMOXIDIKKwkgKi8KKwl2X3BvcyA9IGlteDI4My0+dmZs aXAtPnZhbCA/CisJCSgoLW1vZGUtPmNyb3AudG9wIC8gbW9kZS0+dmJpbl9yYXRpbykgLyAyKSAr IG1vZGUtPnZzdCA6CisJCSgobW9kZS0+Y3JvcC50b3AgLyBtb2RlLT52YmluX3JhdGlvKSAvIDIp ICArIG1vZGUtPnZzdDsKKwl2X3dpZGN1dCA9ICgobW9kZS0+dmVmZiAtIHlfb3V0X3NpemUpIC8g MikgKyBtb2RlLT52Y3Q7CisKKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfWV9P VVRfU0laRSwgeV9vdXRfc2l6ZSwgJnJldCk7CisJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgy ODNfUkVHX1dSSVRFX1ZTSVpFLCB3cml0ZV92X3NpemUsICZyZXQpOworCWNjaV93cml0ZShpbXgy ODMtPmNjaSwgSU1YMjgzX1JFR19WV0lEQ1VULCB2X3dpZGN1dCwgJnJldCk7CisJY2NpX3dyaXRl KGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1ZXSU5QT1MsIHZfcG9zLCAmcmV0KTsKKworCWNjaV93 cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19PQl9TSVpFX1YsIG1vZGUtPnZlcnRpY2FsX29i LCAmcmV0KTsKKworCS8qIFRPRE86IFZhbGlkYXRlIG1vZGUtPmNyb3AgaXMgZnVsbHkgY29udGFp bmVkIHdpdGhpbiBpbXgyODNfbmF0aXZlX2FyZWEgKi8KKwljY2lfd3JpdGUoaW14MjgzLT5jY2ks IElNWDI4M19SRUdfSFRSSU1NSU5HX1NUQVJULCBtb2RlLT5jcm9wLmxlZnQsICZyZXQpOworCWNj aV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19IVFJJTU1JTkdfRU5ELAorCQkgIG1vZGUt PmNyb3AubGVmdCArIG1vZGUtPmNyb3Aud2lkdGgsICZyZXQpOworCisJLyogRGlzYWJsZSBlbWJl ZGRlZCBkYXRhICovCisJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX0VCRF9YX09V VF9TSVpFLCAwLCAmcmV0KTsKKworCS8qIEFwcGx5IGN1c3RvbWl6ZWQgdmFsdWVzIGZyb20gY29u dHJvbHMgKEhNQVgvVk1BWC9TSFIpICovCisJcmV0ID0gIF9fdjRsMl9jdHJsX2hhbmRsZXJfc2V0 dXAoaW14MjgzLT5zZC5jdHJsX2hhbmRsZXIpOworCisJcmV0dXJuIHJldDsKK30KKworLyogU3Rv cCBzdHJlYW1pbmcgKi8KK3N0YXRpYyB2b2lkIGlteDI4M19zdG9wX3N0cmVhbWluZyhzdHJ1Y3Qg aW14MjgzICppbXgyODMpCit7CisJaW50IHJldDsKKworCXJldCA9IGNjaV93cml0ZShpbXgyODMt PmNjaSwgSU1YMjgzX1JFR19TVEFOREJZLCBJTVgyODNfU1RCTE9HSUMsIE5VTEwpOworCWlmIChy ZXQpCisJCWRldl9lcnIoaW14MjgzLT5kZXYsICIlcyBmYWlsZWQgdG8gc2V0IHN0cmVhbVxuIiwg X19mdW5jX18pOworCisJcG1fcnVudGltZV9wdXQoaW14MjgzLT5kZXYpOworfQorCitzdGF0aWMg aW50IGlteDI4M19zZXRfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUp Cit7CisJc3RydWN0IGlteDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKwlzdHJ1Y3QgdjRs Ml9zdWJkZXZfc3RhdGUgKnN0YXRlOworCWludCByZXQgPSAwOworCisJc3RhdGUgPSB2NGwyX3N1 YmRldl9sb2NrX2FuZF9nZXRfYWN0aXZlX3N0YXRlKHNkKTsKKworCWlmIChlbmFibGUpIHsKKwkJ cmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhpbXgyODMtPmRldik7CisJCWlmIChyZXQgPCAwKSB7 CisJCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoaW14MjgzLT5kZXYpOworCQkJZ290byB1bmxvY2s7 CisJCX0KKworCQkvKgorCQkgKiBBcHBseSBkZWZhdWx0ICYgY3VzdG9taXplZCB2YWx1ZXMKKwkJ ICogYW5kIHRoZW4gc3RhcnQgc3RyZWFtaW5nLgorCQkgKi8KKwkJcmV0ID0gaW14MjgzX3N0YXJ0 X3N0cmVhbWluZyhpbXgyODMsIHN0YXRlKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3JwbV9w dXQ7CisJfSBlbHNlIHsKKwkJaW14MjgzX3N0b3Bfc3RyZWFtaW5nKGlteDI4Myk7CisJfQorCisJ djRsMl9zdWJkZXZfdW5sb2NrX3N0YXRlKHN0YXRlKTsKKworCXJldHVybiByZXQ7CisKK2Vycl9y cG1fcHV0OgorCXBtX3J1bnRpbWVfcHV0KGlteDI4My0+ZGV2KTsKK3VubG9jazoKKwl2NGwyX3N1 YmRldl91bmxvY2tfc3RhdGUoc3RhdGUpOworCisJcmV0dXJuIHJldDsKK30KKworLyogUG93ZXIv Y2xvY2sgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgaW14MjgzX3Bvd2VyX29u KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9f aTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVu dGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaW14MjgzICppbXgyODMgPSB0b19pbXgyODMoc2QpOwor CWludCByZXQ7CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShpbXgy ODNfc3VwcGx5X25hbWUpLAorCQkJCSAgICBpbXgyODMtPnN1cHBsaWVzKTsKKwlpZiAocmV0KSB7 CisJCWRldl9lcnIoaW14MjgzLT5kZXYsICIlczogZmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3Jz XG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShpbXgyODMtPnhjbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihpbXgyODMt PmRldiwgIiVzOiBmYWlsZWQgdG8gZW5hYmxlIGNsb2NrXG4iLAorCQkJX19mdW5jX18pOworCQln b3RvIHJlZ19vZmY7CisJfQorCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGlteDI4My0+cmVz ZXRfZ3BpbywgMSk7CisKKwl1c2xlZXBfcmFuZ2UoaW14MjgzX1hDTFJfTUlOX0RFTEFZX1VTLAor CQkgICAgIGlteDI4M19YQ0xSX01JTl9ERUxBWV9VUyArIGlteDI4M19YQ0xSX0RFTEFZX1JBTkdF X1VTKTsKKworCXJldHVybiAwOworCityZWdfb2ZmOgorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUo QVJSQVlfU0laRShpbXgyODNfc3VwcGx5X25hbWUpLCBpbXgyODMtPnN1cHBsaWVzKTsKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlteDI4M19wb3dlcl9vZmYoc3RydWN0IGRldmljZSAq ZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7 CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwor CXN0cnVjdCBpbXgyODMgKmlteDI4MyA9IHRvX2lteDI4MyhzZCk7CisKKwlncGlvZF9zZXRfdmFs dWVfY2Fuc2xlZXAoaW14MjgzLT5yZXNldF9ncGlvLCAwKTsKKwlyZWd1bGF0b3JfYnVsa19kaXNh YmxlKEFSUkFZX1NJWkUoaW14MjgzX3N1cHBseV9uYW1lKSwgaW14MjgzLT5zdXBwbGllcyk7CisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlteDI4My0+eGNsayk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBpbXgyODNfZ2V0X3JlZ3VsYXRvcnMoc3RydWN0IGlteDI4MyAqaW14MjgzKQor eworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW14Mjgz X3N1cHBseV9uYW1lKTsgaSsrKQorCQlpbXgyODMtPnN1cHBsaWVzW2ldLnN1cHBseSA9IGlteDI4 M19zdXBwbHlfbmFtZVtpXTsKKworCXJldHVybiBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChpbXgy ODMtPmRldiwKKwkJCQkgICAgICAgQVJSQVlfU0laRShpbXgyODNfc3VwcGx5X25hbWUpLAorCQkJ CSAgICAgICBpbXgyODMtPnN1cHBsaWVzKTsKK30KKworLyogVmVyaWZ5IGNoaXAgSUQgKi8KK3N0 YXRpYyBpbnQgaW14MjgzX2lkZW50aWZ5X21vZHVsZShzdHJ1Y3QgaW14MjgzICppbXgyODMpCit7 CisJaW50IHJldDsKKwl1NjQgdmFsOworCisJcmV0ID0gY2NpX3JlYWQoaW14MjgzLT5jY2ksIElN WDI4M19SRUdfQ0hJUF9JRCwgJnZhbCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGlt eDI4My0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgY2hpcCBpZCAleCwgd2l0aCBlcnJvciAlZFxuIiwK KwkJCUlNWDI4M19DSElQX0lELCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICh2YWwg IT0gSU1YMjgzX0NISVBfSUQpIHsKKwkJZGV2X2VycihpbXgyODMtPmRldiwgImNoaXAgaWQgbWlz bWF0Y2g6ICV4IT0lbGx4XG4iLAorCQkJSU1YMjgzX0NISVBfSUQsIHZhbCk7CisJCXJldHVybiAt RUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlteDI4M19nZXRfc2VsZWN0 aW9uKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRl ICpzZF9zdGF0ZSwKKwkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfc2VsZWN0aW9uICpzZWwpCit7CisJ c3dpdGNoIChzZWwtPnRhcmdldCkgeworCWNhc2UgVjRMMl9TRUxfVEdUX0NST1A6IHsKKwkJc2Vs LT5yID0gKnY0bDJfc3ViZGV2X3N0YXRlX2dldF9jcm9wKHNkX3N0YXRlLCAwKTsKKwkJcmV0dXJu IDA7CisJfQorCisJY2FzZSBWNEwyX1NFTF9UR1RfTkFUSVZFX1NJWkU6CisJCXNlbC0+ciA9IGlt eDI4M19uYXRpdmVfYXJlYTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFY0TDJfU0VMX1RHVF9DUk9Q X0RFRkFVTFQ6CisJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUF9CT1VORFM6CisJCXNlbC0+ciA9IGlt eDI4M19hY3RpdmVfYXJlYTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgaW14MjgzX2NvcmVf b3BzID0geworCS5zdWJzY3JpYmVfZXZlbnQgPSB2NGwyX2N0cmxfc3ViZGV2X3N1YnNjcmliZV9l dmVudCwKKwkudW5zdWJzY3JpYmVfZXZlbnQgPSB2NGwyX2V2ZW50X3N1YmRldl91bnN1YnNjcmli ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGlteDI4 M192aWRlb19vcHMgPSB7CisJLnNfc3RyZWFtID0gaW14MjgzX3NldF9zdHJlYW0sCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9vcHMgaW14MjgzX3BhZF9vcHMgPSB7 CisJLmVudW1fbWJ1c19jb2RlID0gaW14MjgzX2VudW1fbWJ1c19jb2RlLAorCS5nZXRfZm10ID0g djRsMl9zdWJkZXZfZ2V0X2ZtdCwKKwkuc2V0X2ZtdCA9IGlteDI4M19zZXRfcGFkX2Zvcm1hdCwK KwkuZ2V0X3NlbGVjdGlvbiA9IGlteDI4M19nZXRfc2VsZWN0aW9uLAorCS5lbnVtX2ZyYW1lX3Np emUgPSBpbXgyODNfZW51bV9mcmFtZV9zaXplLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2 NGwyX3N1YmRldl9pbnRlcm5hbF9vcHMgaW14MjgzX2ludGVybmFsX29wcyA9IHsKKwkuaW5pdF9z dGF0ZSA9IGlteDI4M19pbml0X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X3N1YmRldl9vcHMgaW14MjgzX3N1YmRldl9vcHMgPSB7CisJLmNvcmUgPSAmaW14MjgzX2NvcmVf b3BzLAorCS52aWRlbyA9ICZpbXgyODNfdmlkZW9fb3BzLAorCS5wYWQgPSAmaW14MjgzX3BhZF9v cHMsCit9OworCisvKiBJbml0aWFsaXplIGNvbnRyb2wgaGFuZGxlcnMgKi8KK3N0YXRpYyBpbnQg aW14MjgzX2luaXRfY29udHJvbHMoc3RydWN0IGlteDI4MyAqaW14MjgzKQoreworCXN0cnVjdCB2 NGwyX2N0cmxfaGFuZGxlciAqY3RybF9oZGxyOworCXN0cnVjdCB2NGwyX2Z3bm9kZV9kZXZpY2Vf cHJvcGVydGllcyBwcm9wczsKKwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGUgPSBpbXgy ODMtPm1vZGU7CisJdTY0IG1pbl9oYmxhbmssIG1heF9oYmxhbmssIGRlZl9oYmxhbms7CisJdTY0 IHBpeGVsX3JhdGU7CisJaW50IHJldDsKKworCWN0cmxfaGRsciA9ICZpbXgyODMtPmN0cmxfaGFu ZGxlcjsKKwlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9pbml0KGN0cmxfaGRsciwgMTYpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTZXJpYWxpemUgY29udHJvbHMgd2l0aCBzZW5z b3IgZGV2aWNlICovCisJY3RybF9oZGxyLT5sb2NrID0gJmlteDI4My0+bXV0ZXg7CisKKwkvKgor CSAqIENyZWF0ZSB0aGUgY29udHJvbHMgaGVyZSwgYnV0IG1vZGUgc3BlY2lmaWMgbGltaXRzIGFy ZSBzZXR1cAorCSAqIGluIHRoZSBpbXgyODNfc2V0X2ZyYW1pbmdfbGltaXRzKCkgY2FsbCBiZWxv dy4KKwkgKi8KKworCS8qIEJ5IGRlZmF1bHQsIFBJWEVMX1JBVEUgaXMgcmVhZCBvbmx5ICovCisJ cGl4ZWxfcmF0ZSA9IGlteDI4M19waXhlbF9yYXRlKGlteDI4Myk7CisJaW14MjgzLT5waXhlbF9y YXRlID0gdjRsMl9jdHJsX25ld19zdGQoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLAorCQkJ CQkgICAgICAgVjRMMl9DSURfUElYRUxfUkFURSwgcGl4ZWxfcmF0ZSwKKwkJCQkJICAgICAgIHBp eGVsX3JhdGUsIDEsIHBpeGVsX3JhdGUpOworCisJaW14MjgzLT5saW5rX2ZyZXEgPSB2NGwyX2N0 cmxfbmV3X2ludF9tZW51KGN0cmxfaGRsciwgJmlteDI4M19jdHJsX29wcywKKwkJCQkJCSAgIFY0 TDJfQ0lEX0xJTktfRlJFUSwKKwkJCQkJCSAgIF9fZmxzKGlteDI4My0+bGlua19mcmVxX2JpdG1h cCksCisJCQkJCQkgICBfX2ZmcyhpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXApLAorCQkJCQkJICAg bGlua19mcmVxdWVuY2llcyk7CisJaWYgKGlteDI4My0+bGlua19mcmVxKQorCQlpbXgyODMtPmxp bmtfZnJlcS0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZOworCisJLyogSW5pdGlh bGlzZSB2YmxhbmsvaGJsYW5rL2V4cG9zdXJlIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1vZGUuICov CisJaW14MjgzLT52YmxhbmsgPSB2NGwyX2N0cmxfbmV3X3N0ZChjdHJsX2hkbHIsICZpbXgyODNf Y3RybF9vcHMsCisJCQkJCSAgIFY0TDJfQ0lEX1ZCTEFOSywKKwkJCQkJICAgbW9kZS0+bWluX3Zt YXggLSBtb2RlLT5oZWlnaHQsCisJCQkJCSAgIElNWDI4M19WTUFYX01BWCwgMSwKKwkJCQkJICAg bW9kZS0+ZGVmYXVsdF92bWF4IC0gbW9kZS0+aGVpZ2h0KTsKKworCW1pbl9oYmxhbmsgPSBtb2Rl LT5taW5faG1heCAtIG1vZGUtPndpZHRoOworCW1heF9oYmxhbmsgPSBpbXgyODNfaWNsa190b19w aXgocGl4ZWxfcmF0ZSwgSU1YMjgzX0hNQVhfTUFYKSAtIG1vZGUtPndpZHRoOworCWRlZl9oYmxh bmsgPSBtb2RlLT5kZWZhdWx0X2htYXggLSBtb2RlLT53aWR0aDsKKwlpbXgyODMtPmhibGFuayA9 IHY0bDJfY3RybF9uZXdfc3RkKGN0cmxfaGRsciwgJmlteDI4M19jdHJsX29wcywKKwkJCQkJICAg VjRMMl9DSURfSEJMQU5LLCBtaW5faGJsYW5rLCBtYXhfaGJsYW5rLAorCQkJCQkgICAxLCBkZWZf aGJsYW5rKTsKKworCWlteDI4My0+ZXhwb3N1cmUgPSB2NGwyX2N0cmxfbmV3X3N0ZChjdHJsX2hk bHIsICZpbXgyODNfY3RybF9vcHMsCisJCQkJCSAgICAgVjRMMl9DSURfRVhQT1NVUkUsCisJCQkJ CSAgICAgSU1YMjgzX0VYUE9TVVJFX01JTiwKKwkJCQkJICAgICBJTVgyODNfRVhQT1NVUkVfTUFY LAorCQkJCQkgICAgIElNWDI4M19FWFBPU1VSRV9TVEVQLAorCQkJCQkgICAgIElNWDI4M19FWFBP U1VSRV9ERUZBVUxUKTsKKworCXY0bDJfY3RybF9uZXdfc3RkKGN0cmxfaGRsciwgJmlteDI4M19j dHJsX29wcywgVjRMMl9DSURfQU5BTE9HVUVfR0FJTiwKKwkJCSAgSU1YMjgzX0FOQV9HQUlOX01J TiwgSU1YMjgzX0FOQV9HQUlOX01BWCwKKwkJCSAgSU1YMjgzX0FOQV9HQUlOX1NURVAsIElNWDI4 M19BTkFfR0FJTl9ERUZBVUxUKTsKKworCXY0bDJfY3RybF9uZXdfc3RkKGN0cmxfaGRsciwgJmlt eDI4M19jdHJsX29wcywgVjRMMl9DSURfRElHSVRBTF9HQUlOLAorCQkJICBJTVgyODNfREdUTF9H QUlOX01JTiwgSU1YMjgzX0RHVExfR0FJTl9NQVgsCisJCQkgIElNWDI4M19ER1RMX0dBSU5fU1RF UCwgSU1YMjgzX0RHVExfR0FJTl9ERUZBVUxUKTsKKworCWlteDI4My0+dmZsaXAgPSB2NGwyX2N0 cmxfbmV3X3N0ZChjdHJsX2hkbHIsICZpbXgyODNfY3RybF9vcHMsIFY0TDJfQ0lEX1ZGTElQLAor CQkJCQkgIDAsIDEsIDEsIDApOworCWlmIChpbXgyODMtPnZmbGlwKQorCQlpbXgyODMtPnZmbGlw LT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19NT0RJRllfTEFZT1VUOworCisJdjRsMl9jdHJsX25l d19zdGRfbWVudV9pdGVtcyhjdHJsX2hkbHIsICZpbXgyODNfY3RybF9vcHMsCisJCQkJICAgICBW NEwyX0NJRF9URVNUX1BBVFRFUk4sCisJCQkJICAgICBBUlJBWV9TSVpFKGlteDI4M190cGdfbWVu dSkgLSAxLAorCQkJCSAgICAgMCwgMCwgaW14MjgzX3RwZ19tZW51KTsKKworCWlmIChjdHJsX2hk bHItPmVycm9yKSB7CisJCXJldCA9IGN0cmxfaGRsci0+ZXJyb3I7CisJCWRldl9lcnIoaW14Mjgz LT5kZXYsICIlcyBjb250cm9sIGluaXQgZmFpbGVkICglZClcbiIsCisJCQlfX2Z1bmNfXywgcmV0 KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXQgPSB2NGwyX2Z3bm9kZV9kZXZpY2VfcGFyc2Uo aW14MjgzLT5kZXYsICZwcm9wcyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9 IHY0bDJfY3RybF9uZXdfZndub2RlX3Byb3BlcnRpZXMoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxf b3BzLAorCQkJCQkgICAgICAmcHJvcHMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlp bXgyODMtPnNkLmN0cmxfaGFuZGxlciA9IGN0cmxfaGRscjsKKworCW11dGV4X2xvY2soJmlteDI4 My0+bXV0ZXgpOworCisJcmV0ID0gX192NGwyX2N0cmxfc19jdHJsKGlteDI4My0+bGlua19mcmVx LAorCQkJCSBfX2ZmcyhpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXApKTsKKwlpZiAocmV0KQorCQln b3RvIGVycm9yOworCisJLyogU2V0dXAgZXhwb3N1cmUgYW5kIGZyYW1lL2xpbmUgbGVuZ3RoIGxp bWl0cy4gKi8KKwlpbXgyODNfc2V0X2ZyYW1pbmdfbGltaXRzKGlteDI4Myk7CisKKwltdXRleF91 bmxvY2soJmlteDI4My0+bXV0ZXgpOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXY0bDJfY3Ry bF9oYW5kbGVyX2ZyZWUoY3RybF9oZGxyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2 b2lkIGlteDI4M19mcmVlX2NvbnRyb2xzKHN0cnVjdCBpbXgyODMgKmlteDI4MykKK3sKKwl2NGwy X2N0cmxfaGFuZGxlcl9mcmVlKGlteDI4My0+c2QuY3RybF9oYW5kbGVyKTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW14MjgzX2R0X2lkc1tdID0geworCXsgLmNvbXBh dGlibGUgPSAic29ueSxpbXgyODMiLCB9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKKworc3Rh dGljIGludCBpbXgyODNfcGFyc2VfZW5kcG9pbnQoc3RydWN0IGlteDI4MyAqaW14MjgzKQorewor CXN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUgPSBkZXZfZndub2RlKGlteDI4My0+ZGV2KTsK KwlzdHJ1Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQgYnVzX2NmZyA9IHsKKwkJLmJ1c190eXBlID0g VjRMMl9NQlVTX0NTSTJfRFBIWQorCX07CisJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmVwOworCWlu dCByZXQ7CisKKwlpZiAoIWZ3bm9kZSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCWVwID0gZndub2Rl X2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGZ3bm9kZSwgTlVMTCk7CisJaWYgKCFlcCkgeworCQlk ZXZfZXJyKGlteDI4My0+ZGV2LCAiRmFpbGVkIHRvIGdldCBuZXh0IGVuZHBvaW50XG4iKTsKKwkJ cmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZXQgPSB2NGwyX2Z3bm9kZV9lbmRwb2ludF9hbGxvY19w YXJzZShlcCwgJmJ1c19jZmcpOworCWZ3bm9kZV9oYW5kbGVfcHV0KGVwKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJaWYgKGJ1c19jZmcuYnVzLm1pcGlfY3NpMi5udW1fZGF0YV9sYW5l cyAhPSA0KSB7CisJCWRldl9lcnIoaW14MjgzLT5kZXYsCisJCQkibnVtYmVyIG9mIENTSTIgZGF0 YSBsYW5lcyAlZCBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJYnVzX2NmZy5idXMubWlwaV9jc2ky Lm51bV9kYXRhX2xhbmVzKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lX2VuZHBvaW50 X2ZyZWU7CisJfQorCisJcmV0ID0gdjRsMl9saW5rX2ZyZXFfdG9fYml0bWFwKGlteDI4My0+ZGV2 LCBidXNfY2ZnLmxpbmtfZnJlcXVlbmNpZXMsCisJCQkJICAgICAgIGJ1c19jZmcubnJfb2ZfbGlu a19mcmVxdWVuY2llcywKKwkJCQkgICAgICAgbGlua19mcmVxdWVuY2llcywgQVJSQVlfU0laRShs aW5rX2ZyZXF1ZW5jaWVzKSwKKwkJCQkgICAgICAgJmlteDI4My0+bGlua19mcmVxX2JpdG1hcCk7 CisKK2RvbmVfZW5kcG9pbnRfZnJlZToKKwl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKCZidXNf Y2ZnKTsKKworCXJldHVybiByZXQ7Cit9OworCitzdGF0aWMgaW50IGlteDI4M19wcm9iZShzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBpbXgyODMgKmlteDI4MzsKKwlpbnQg cmV0OworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCB4Y2xrX2ZyZXE7CisKKwlpbXgy ODMgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKmlteDI4MyksIEdGUF9LRVJO RUwpOworCWlmICghaW14MjgzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlteDI4My0+ZGV2ID0g JmNsaWVudC0+ZGV2OworCisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJmlteDI4My0+c2QsIGNsaWVu dCwgJmlteDI4M19zdWJkZXZfb3BzKTsKKworCWlteDI4My0+Y2NpID0gZGV2bV9jY2lfcmVnbWFw X2luaXRfaTJjKGNsaWVudCwgMTYpOworCWlmIChJU19FUlIoaW14MjgzLT5jY2kpKSB7CisJCXJl dCA9IFBUUl9FUlIoaW14MjgzLT5jY2kpOworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiZmFpbGVk IHRvIGluaXRpYWxpemUgQ0NJOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkv KiBHZXQgc3lzdGVtIGNsb2NrICh4Y2xrKSAqLworCWlteDI4My0+eGNsayA9IGRldm1fY2xrX2dl dChpbXgyODMtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihpbXgyODMtPnhjbGspKSB7CisJCWRl dl9lcnIoaW14MjgzLT5kZXYsICJmYWlsZWQgdG8gZ2V0IHhjbGtcbiIpOworCQlyZXR1cm4gUFRS X0VSUihpbXgyODMtPnhjbGspOworCX0KKworCXhjbGtfZnJlcSA9IGNsa19nZXRfcmF0ZShpbXgy ODMtPnhjbGspOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlteDI4M19mcmVxdWVuY2ll cyk7IGkrKykgeworCQlpZiAoeGNsa19mcmVxID09IGlteDI4M19mcmVxdWVuY2llc1tpXS5taHop IHsKKwkJCWlteDI4My0+ZnJlcSA9ICZpbXgyODNfZnJlcXVlbmNpZXNbaV07CisJCQlicmVhazsK KwkJfQorCX0KKwlpZiAoIWlteDI4My0+ZnJlcSkgeworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAi eGNsayBmcmVxdWVuY3kgdW5zdXBwb3J0ZWQ6ICVkIEh6XG4iLCB4Y2xrX2ZyZXEpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBpbXgyODNfZ2V0X3JlZ3VsYXRvcnMoaW14MjgzKTsK KwlpZiAocmV0KSB7CisJCWRldl9lcnIoaW14MjgzLT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJlZ3Vs YXRvcnNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGlteDI4M19wYXJzZV9lbmRw b2ludChpbXgyODMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihpbXgyODMtPmRldiwgImZhaWxl ZCB0byBwYXJzZSBlbmRwb2ludCBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwkvKiBSZXF1ZXN0IG9wdGlvbmFsIGVuYWJsZSBwaW4gKi8KKwlpbXgyODMtPnJlc2V0X2dw aW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChpbXgyODMtPmRldiwgInJlc2V0IiwKKwkJCQkJ CSAgICAgR1BJT0RfT1VUX0hJR0gpOworCisJbXV0ZXhfaW5pdCgmaW14MjgzLT5tdXRleCk7CisK KwkvKgorCSAqIFRoZSBzZW5zb3IgbXVzdCBiZSBwb3dlcmVkIGZvciBpbXgyODNfaWRlbnRpZnlf bW9kdWxlKCkKKwkgKiB0byBiZSBhYmxlIHRvIHJlYWQgdGhlIENISVBfSUQgcmVnaXN0ZXIKKwkg Ki8KKwlyZXQgPSBpbXgyODNfcG93ZXJfb24oaW14MjgzLT5kZXYpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlyZXQgPSBpbXgyODNfaWRlbnRpZnlfbW9kdWxlKGlteDI4Myk7CisJaWYg KHJldCkKKwkJZ290byBlcnJvcl9wb3dlcl9vZmY7CisKKwkvKiBJbml0aWFsaXplIGRlZmF1bHQg Zm9ybWF0IGFuZCBtb2RlIHRvIG1heCByZXNvbHV0aW9uICovCisJaW14MjgzLT5tb2RlID0gJnN1 cHBvcnRlZF9tb2Rlc18xMmJpdFswXTsKKwlpbXgyODMtPmZtdF9jb2RlID0gTUVESUFfQlVTX0ZN VF9TUkdHQjEyXzFYMTI7CisKKwkvKgorCSAqIEVuYWJsZSBydW50aW1lIFBNIHdpdGggYXV0b3N1 c3BlbmQuIEFzIHRoZSBkZXZpY2UgaGFzIGJlZW4gcG93ZXJlZAorCSAqIG1hbnVhbGx5LCBtYXJr IGl0IGFzIGFjdGl2ZSwgYW5kIGluY3JlYXNlIHRoZSB1c2FnZSBjb3VudCB3aXRob3V0CisJICog cmVzdW1pbmcgdGhlIGRldmljZS4KKwkgKi8KKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoaW14Mjgz LT5kZXYpOworCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGlteDI4My0+ZGV2KTsKKwlwbV9ydW50 aW1lX2VuYWJsZShpbXgyODMtPmRldik7CisJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVs YXkoaW14MjgzLT5kZXYsIDEwMDApOworCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGlteDI4 My0+ZGV2KTsKKworCS8qIFRoaXMgbmVlZHMgdGhlIHBtIHJ1bnRpbWUgdG8gYmUgcmVnaXN0ZXJl ZC4gKi8KKwlyZXQgPSBpbXgyODNfaW5pdF9jb250cm9scyhpbXgyODMpOworCWlmIChyZXQpCisJ CWdvdG8gZXJyb3JfcG07CisKKwkvKiBJbml0aWFsaXplIHN1YmRldiAqLworCWlteDI4My0+c2Qu ZmxhZ3MgfD0gVjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREUgfAorCQkJICAgIFY0TDJfU1VCREVW X0ZMX0hBU19FVkVOVFM7CisJaW14MjgzLT5zZC5lbnRpdHkuZnVuY3Rpb24gPSBNRURJQV9FTlRf Rl9DQU1fU0VOU09SOworCWlteDI4My0+c2QuaW50ZXJuYWxfb3BzID0gJmlteDI4M19pbnRlcm5h bF9vcHM7CisKKwkvKiBJbml0aWFsaXplIHNvdXJjZSBwYWRzICovCisJaW14MjgzLT5wYWQuZmxh Z3MgPSBNRURJQV9QQURfRkxfU09VUkNFOworCisJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5p dCgmaW14MjgzLT5zZC5lbnRpdHksIDEsICZpbXgyODMtPnBhZCk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGlteDI4My0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgZW50aXR5IHBhZHM6ICVkXG4iLCBy ZXQpOworCQlnb3RvIGVycm9yX2hhbmRsZXJfZnJlZTsKKwl9CisKKwlpbXgyODMtPnNkLnN0YXRl X2xvY2sgPSBpbXgyODMtPmN0cmxfaGFuZGxlci5sb2NrOworCXJldCA9IHY0bDJfc3ViZGV2X2lu aXRfZmluYWxpemUoJmlteDI4My0+c2QpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaW14 MjgzLT5kZXYsICJzdWJkZXYgaW5pdCBlcnJvcjogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyb3Jf bWVkaWFfZW50aXR5OworCX0KKworCXJldCA9IHY0bDJfYXN5bmNfcmVnaXN0ZXJfc3ViZGV2X3Nl bnNvcigmaW14MjgzLT5zZCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihpbXgyODMtPmRl diwgImZhaWxlZCB0byByZWdpc3RlciBzZW5zb3Igc3ViLWRldmljZTogJWRcbiIsIHJldCk7CisJ CWdvdG8gZXJyb3Jfc3ViZGV2X2NsZWFudXA7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycm9yX3N1 YmRldl9jbGVhbnVwOgorCXY0bDJfc3ViZGV2X2NsZWFudXAoJmlteDI4My0+c2QpOworCitlcnJv cl9tZWRpYV9lbnRpdHk6CisJbWVkaWFfZW50aXR5X2NsZWFudXAoJmlteDI4My0+c2QuZW50aXR5 KTsKKworZXJyb3JfaGFuZGxlcl9mcmVlOgorCWlteDI4M19mcmVlX2NvbnRyb2xzKGlteDI4Myk7 CisKK2Vycm9yX3BtOgorCXBtX3J1bnRpbWVfZGlzYWJsZShpbXgyODMtPmRldik7CisJcG1fcnVu dGltZV9zZXRfc3VzcGVuZGVkKGlteDI4My0+ZGV2KTsKK2Vycm9yX3Bvd2VyX29mZjoKKwlpbXgy ODNfcG93ZXJfb2ZmKGlteDI4My0+ZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2 b2lkIGlteDI4M19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGlt eDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKworCXY0bDJfYXN5bmNfdW5yZWdpc3Rlcl9z dWJkZXYoc2QpOworCXY0bDJfc3ViZGV2X2NsZWFudXAoJmlteDI4My0+c2QpOworCW1lZGlhX2Vu dGl0eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsKKwlpbXgyODNfZnJlZV9jb250cm9scyhpbXgyODMp OworCisJcG1fcnVudGltZV9kaXNhYmxlKGlteDI4My0+ZGV2KTsKKwlpZiAoIXBtX3J1bnRpbWVf c3RhdHVzX3N1c3BlbmRlZChpbXgyODMtPmRldikpCisJCWlteDI4M19wb3dlcl9vZmYoaW14Mjgz LT5kZXYpOworCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChpbXgyODMtPmRldik7Cit9CisKK01P RFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlteDI4M19kdF9pZHMpOworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRldl9wbV9vcHMgaW14MjgzX3BtX29wcyA9IHsKKwlTRVRfUlVOVElNRV9QTV9PUFMoaW14 MjgzX3Bvd2VyX29mZiwgaW14MjgzX3Bvd2VyX29uLCBOVUxMKQorfTsKKworc3RhdGljIHN0cnVj dCBpMmNfZHJpdmVyIGlteDI4M19pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1l ID0gImlteDI4MyIsCisJCS5vZl9tYXRjaF90YWJsZQk9IGlteDI4M19kdF9pZHMsCisJCS5wbSA9 ICZpbXgyODNfcG1fb3BzLAorCX0sCisJLnByb2JlID0gaW14MjgzX3Byb2JlLAorCS5yZW1vdmUg PSBpbXgyODNfcmVtb3ZlLAorfTsKKworbW9kdWxlX2kyY19kcml2ZXIoaW14MjgzX2kyY19kcml2 ZXIpOworCitNT0RVTEVfQVVUSE9SKCJXaWxsIFdoYW5nIDx3aWxsQHdpbGx3aGFuZy5jb20+Iik7 CitNT0RVTEVfQVVUSE9SKCJLaWVyYW4gQmluZ2hhbSA8a2llcmFuLmJpbmdoYW1AaWRlYXNvbmJv YXJkLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlVtYW5nIEphaW4gPHVtYW5nLmphaW5AaWRlYXNv bmJvYXJkLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU29ueSBJTVgyODMgU2Vuc29yIERy aXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLSAKMi40My4wCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=