From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FE58C433DB for ; Thu, 31 Dec 2020 14:29:44 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8AEC6207A5 for ; Thu, 31 Dec 2020 14:29:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8AEC6207A5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; 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=JCffUPgCC97CF6shhFtY85HsoSLiZ8c5YWxv0moUvMg=; b=Jl5wztQauZWCORkIX2mVgmxSp Lr3i6dWEzQoIL0a6l1gauFWPj5nLc//jAEAcXTjRsXCvYE9VrTGFpiOZmMMSh6+iNIL5T7xbUn4Os 3mH4CjLH6HFfczEhEVOVOqJkskaSlb+7dkasGRTeCZe7tNoY7OIFLboPnDgUq3/NGEd4JacB7soDl 3BsbEevOYV6USMWxJQLqsDWq5V931iEeUnT1V3vRKw7d32PVPliSM7UtQ8ZGAqeS1yps9cetD8B7J p2aA646B4OKF6ccEBtPkovTLCbM4C2r8LUQwNWEi/elH4JNNeOM4mtAyXGe4b0OT8P1NR8o+ETHh9 OpPzT57/w==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kuyva-0001t8-0f; Thu, 31 Dec 2020 14:27:46 +0000 Received: from relay7-d.mail.gandi.net ([217.70.183.200]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kuyv6-0001lh-R7 for linux-arm-kernel@lists.infradead.org; Thu, 31 Dec 2020 14:27:30 +0000 X-Originating-IP: 93.29.109.196 Received: from localhost.localdomain (196.109.29.93.rev.sfr.net [93.29.109.196]) (Authenticated sender: paul.kocialkowski@bootlin.com) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id AAA5120005; Thu, 31 Dec 2020 14:27:14 +0000 (UTC) From: Paul Kocialkowski To: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 2/3] media: i2c: Add support for the OV8865 image sensor Date: Thu, 31 Dec 2020 15:27:01 +0100 Message-Id: <20201231142702.3095260-3-paul.kocialkowski@bootlin.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201231142702.3095260-1-paul.kocialkowski@bootlin.com> References: <20201231142702.3095260-1-paul.kocialkowski@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201231_092717_389748_DAA624F4 X-CRM114-Status: GOOD ( 17.01 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?K=C3=A9vin=20L=27h=C3=B4pital?= , Hans Verkuil , Jernej Skrabec , Thomas Petazzoni , Maxime Ripard , Paul Kocialkowski , Chen-Yu Tsai , Rob Herring , Sakari Ailus , Mauro Carvalho Chehab , kevin.lhopital@hotmail.com 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 VGhlIE9WODg2NSBpcyBhIDggTXB4IENNT1MgaW1hZ2Ugc2Vuc29yIHByb2R1Y2luZyAzMjY0eDI0 NDggYXQgMzAgZnBzLgpPdGhlciBtb2RlcyAoaW5jbHVkaW5nIHNvbWUgd2l0aCBzdWItc2FtcGxp bmcpIGFyZSBhdmFpbGFibGUgdG9vLgpJdCBvdXRwdXRzIDEwLWJpdCBiYXllciBDRkEgZGF0YSB0 aHJvdWdoIGEgTUlQSSBDU0ktMiBpbnRlcmZhY2Ugd2l0aAp1cCB0byA0IGxhbmVzIHN1cHBvcnRl ZC4KClNvbWUgcmVnaXN0ZXIgaW5pdGlhbGlzYXRpb24gc2VxdWVuY2VzIGFyZSBzdGlsbCBuZWVk ZWQgZm9yIHRoaXMgZHJpdmVyLAphcyB0aGV5IGNvdmVyIHJlZ2lzdGVycyBmb3Igd2hpY2ggbm8g ZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUuCgpUaGlzIHdvcmsgaXMgYmFzZWQgb24gdGhlIGZp cnN0IHZlcnNpb24gb2YgdGhlIGRyaXZlciBzdWJtaXR0ZWQgYnkKS8OpdmluIEwnaMO0cGl0YWws IHdoaWNoIHdhcyBhZGFwdGVkIHRvIG1haW5saW5lIGZyb20gdGhlIEFsbHdpbm5lciBCU1AuClRo aXMgdmVyc2lvbiBpcyBhIHJld3JpdGUgb2YgdGhlIGZpcnN0IHZlcnNpb24gdGhhdCBtYXRjaGVz IHRoZSBzdHJ1Y3R1cmUKb2YgdGhlIE9WNTY0OCBkcml2ZXIsIHdpdGggZXhwbGljaXQgUExMIGNv bmZpZ3VyYXRpb24sIGFsbCB0aGUgbmVjZXNzYXJ5Cm1vZGUtc3BlY2lmaWMgZmllbGRzLCBhc3Nv Y2lhdGllZCByZWdpc3RlcnMgYW5kIHJlZHVjZWQgc3RhdGljIHNlcXVlbmNlcy4KCkl0IHdhcyB0 ZXN0ZWQgd2l0aCB0aGUgQmFuYW5hIFBpIENhbWVyYSBCb2FyZCB2MyBhbmQgdGhlIEJhbmFuYSBQ aSBNMy4KCkNvLWRldmVsb3BlZC1ieTogS8OpdmluIEwnaMO0cGl0YWwgPGtldmluLmxob3BpdGFs QGJvb3RsaW4uY29tPgpTaWduZWQtb2ZmLWJ5OiBLw6l2aW4gTCdow7RwaXRhbCA8a2V2aW4ubGhv cGl0YWxAYm9vdGxpbi5jb20+ClNpZ25lZC1vZmYtYnk6IFBhdWwgS29jaWFsa293c2tpIDxwYXVs LmtvY2lhbGtvd3NraUBib290bGluLmNvbT4KLS0tCiBkcml2ZXJzL21lZGlhL2kyYy9LY29uZmln ICB8ICAgMTMgKwogZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgfCAgICAxICsKIGRyaXZlcnMv bWVkaWEvaTJjL292ODg2NS5jIHwgMjk3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMjk4NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9tZWRpYS9pMmMvb3Y4ODY1LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21l ZGlhL2kyYy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZwppbmRleCBjMDQ3MGE4 YjlhODAuLjZiYzUwNWMxZjE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZp ZworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnCkBAIC0xMDQ2LDYgKzEwNDYsMTkgQEAg Y29uZmlnIFZJREVPX09WODg1NgogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVs ZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb3Y4ODU2Lgog Citjb25maWcgVklERU9fT1Y4ODY1CisJdHJpc3RhdGUgIk9tbmlWaXNpb24gT1Y4ODY1IHNlbnNv ciBzdXBwb3J0IgorCWRlcGVuZHMgb24gSTJDICYmIFBNICYmIFZJREVPX1Y0TDIKKwlzZWxlY3Qg TUVESUFfQ09OVFJPTExFUgorCXNlbGVjdCBWSURFT19WNEwyX1NVQkRFVl9BUEkKKwlzZWxlY3Qg VjRMMl9GV05PREUKKwloZWxwCisJICBUaGlzIGlzIGEgVmlkZW80TGludXgyIHNlbnNvciBkcml2 ZXIgZm9yIE9tbmlWaXNpb24KKwkgIE9WODg2NSBjYW1lcmEgc2Vuc29yLgorCisJICBUbyBjb21w aWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVs ZSB3aWxsIGJlIGNhbGxlZCBvdjg4NjUuCisKIGNvbmZpZyBWSURFT19PVjk2NDAKIAl0cmlzdGF0 ZSAiT21uaVZpc2lvbiBPVjk2NDAgc2Vuc29yIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJMkMgJiYg VklERU9fVjRMMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgYi9kcml2 ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQppbmRleCAxNWQ0ZDYzODI1ODIuLjUwNWMyMDY3ZTc4MCAx MDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRp YS9pMmMvTWFrZWZpbGUKQEAgLTgyLDYgKzgyLDcgQEAgb2JqLSQoQ09ORklHX1ZJREVPX09WNzY3 MCkgKz0gb3Y3NjcwLm8KIG9iai0kKENPTkZJR19WSURFT19PVjc3MlgpICs9IG92NzcyeC5vCiBv YmotJChDT05GSUdfVklERU9fT1Y3NzQwKSArPSBvdjc3NDAubwogb2JqLSQoQ09ORklHX1ZJREVP X09WODg1NikgKz0gb3Y4ODU2Lm8KK29iai0kKENPTkZJR19WSURFT19PVjg4NjUpICs9IG92ODg2 NS5vCiBvYmotJChDT05GSUdfVklERU9fT1Y5NjQwKSArPSBvdjk2NDAubwogb2JqLSQoQ09ORklH X1ZJREVPX09WOTY1MCkgKz0gb3Y5NjUwLm8KIG9iai0kKENPTkZJR19WSURFT19PVjEzODU4KSAr PSBvdjEzODU4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL292ODg2NS5jIGIvZHJp dmVycy9tZWRpYS9pMmMvb3Y4ODY1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5mZGE1YTU1OTc5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2ky Yy9vdjg4NjUuYwpAQCAtMCwwICsxLDI5NzIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9yLWxhdGVyCisvKgorICogQ29weXJpZ2h0IDIwMjAgS8OpdmluIEwnaMO0cGl0 YWwgPGtldmluLmxob3BpdGFsQGJvb3RsaW4uY29tPgorICogQ29weXJpZ2h0IDIwMjAgQm9vdGxp bgorICogQXV0aG9yOiBQYXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAYm9vdGxp bi5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4K KyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9y L2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVk aWEvdjRsMi1jdHJscy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVk ZSA8bWVkaWEvdjRsMi1md25vZGUuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWltYWdlLXNpemVz Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1tZWRpYWJ1cy5oPgorCisvKiBDbG9jayByYXRlICov CisKKyNkZWZpbmUgT1Y4ODY1X0VYVENMS19SQVRFCQkJMjQwMDAwMDAKKworLyogUmVnaXN0ZXIg ZGVmaW5pdGlvbnMgKi8KKworLyogU3lzdGVtICovCisKKyNkZWZpbmUgT1Y4ODY1X1NXX1NUQU5E QllfUkVHCQkJMHgxMDAKKyNkZWZpbmUgT1Y4ODY1X1NXX1NUQU5EQllfU1RSRUFNX09OCQlCSVQo MCkKKworI2RlZmluZSBPVjg4NjVfU1dfUkVTRVRfUkVHCQkJMHgxMDMKKyNkZWZpbmUgT1Y4ODY1 X1NXX1JFU0VUX1JFU0VUCQkJQklUKDApCisKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMMF9SRUcJ CQkweDMwMAorI2RlZmluZSBPVjg4NjVfUExMX0NUUkwwX1BSRV9ESVYodikJCSgodikgJiBHRU5N QVNLKDIsIDApKQorI2RlZmluZSBPVjg4NjVfUExMX0NUUkwxX1JFRwkJCTB4MzAxCisjZGVmaW5l IE9WODg2NV9QTExfQ1RSTDFfTVVMX0godikJCSgoKHYpICYgR0VOTUFTSyg5LCA4KSkgPj4gOCkK KyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMMl9SRUcJCQkweDMwMgorI2RlZmluZSBPVjg4NjVfUExM X0NUUkwyX01VTF9MKHYpCQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X1BM TF9DVFJMM19SRUcJCQkweDMwMworI2RlZmluZSBPVjg4NjVfUExMX0NUUkwzX01fRElWKHYpCQko KCh2KSAtIDEpICYgR0VOTUFTSygzLCAwKSkKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMNF9SRUcJ CQkweDMwNAorI2RlZmluZSBPVjg4NjVfUExMX0NUUkw0X01JUElfRElWKHYpCQkoKHYpICYgR0VO TUFTSygxLCAwKSkKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMNV9SRUcJCQkweDMwNQorI2RlZmlu ZSBPVjg4NjVfUExMX0NUUkw1X1NZU19QUkVfRElWKHYpCQkoKHYpICYgR0VOTUFTSygxLCAwKSkK KyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMNl9SRUcJCQkweDMwNgorI2RlZmluZSBPVjg4NjVfUExM X0NUUkw2X1NZU19ESVYodikJCSgoKHYpIC0gMSkgJiBCSVQoMCkpCisKKyNkZWZpbmUgT1Y4ODY1 X1BMTF9DVFJMOF9SRUcJCQkweDMwOAorI2RlZmluZSBPVjg4NjVfUExMX0NUUkw5X1JFRwkJCTB4 MzA5CisjZGVmaW5lIE9WODg2NV9QTExfQ1RSTEFfUkVHCQkJMHgzMGEKKyNkZWZpbmUgT1Y4ODY1 X1BMTF9DVFJMQV9QUkVfRElWX0hBTEYodikJKCgodikgLSAxKSAmIEJJVCgwKSkKKyNkZWZpbmUg T1Y4ODY1X1BMTF9DVFJMQl9SRUcJCQkweDMwYgorI2RlZmluZSBPVjg4NjVfUExMX0NUUkxCX1BS RV9ESVYodikJCSgodikgJiBHRU5NQVNLKDIsIDApKQorI2RlZmluZSBPVjg4NjVfUExMX0NUUkxD X1JFRwkJCTB4MzBjCisjZGVmaW5lIE9WODg2NV9QTExfQ1RSTENfTVVMX0godikJCSgoKHYpICYg R0VOTUFTSyg5LCA4KSkgPj4gOCkKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMRF9SRUcJCQkweDMw ZAorI2RlZmluZSBPVjg4NjVfUExMX0NUUkxEX01VTF9MKHYpCQkoKHYpICYgR0VOTUFTSyg3LCAw KSkKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMRV9SRUcJCQkweDMwZQorI2RlZmluZSBPVjg4NjVf UExMX0NUUkxFX1NZU19ESVYodikJCSgodikgJiBHRU5NQVNLKDIsIDApKQorI2RlZmluZSBPVjg4 NjVfUExMX0NUUkxGX1JFRwkJCTB4MzBmCisjZGVmaW5lIE9WODg2NV9QTExfQ1RSTEZfU1lTX1BS RV9ESVYodikJCSgoKHYpIC0gMSkgJiBHRU5NQVNLKDMsIDApKQorI2RlZmluZSBPVjg4NjVfUExM X0NUUkwxMF9SRUcJCQkweDMxMAorI2RlZmluZSBPVjg4NjVfUExMX0NUUkwxMV9SRUcJCQkweDMx MQorI2RlZmluZSBPVjg4NjVfUExMX0NUUkwxMl9SRUcJCQkweDMxMgorI2RlZmluZSBPVjg4NjVf UExMX0NUUkwxMl9QUkVfRElWX0hBTEYodikJKCgoKHYpIC0gMSkgPDwgNCkgJiBCSVQoNCkpCisj ZGVmaW5lIE9WODg2NV9QTExfQ1RSTDEyX0RBQ19ESVYodikJCSgoKHYpIC0gMSkgJiBHRU5NQVNL KDMsIDApKQorCisjZGVmaW5lIE9WODg2NV9QTExfQ1RSTDFCX1JFRwkJCTB4MzFiCisjZGVmaW5l IE9WODg2NV9QTExfQ1RSTDFDX1JFRwkJCTB4MzFjCisKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJM MUVfUkVHCQkJMHgzMWUKKyNkZWZpbmUgT1Y4ODY1X1BMTF9DVFJMMUVfUExMMV9OT19MQVQJCUJJ VCgzKQorCisjZGVmaW5lIE9WODg2NV9QQURfT0VOMF9SRUcJCQkweDMwMDAKKworI2RlZmluZSBP Vjg4NjVfUEFEX09FTjJfUkVHCQkJMHgzMDAyCisKKyNkZWZpbmUgT1Y4ODY1X0NMS19SU1Q1X1JF RwkJCTB4MzAwNQorCisjZGVmaW5lIE9WODg2NV9DSElQX0lEX0hIX1JFRwkJCTB4MzAwYQorI2Rl ZmluZSBPVjg4NjVfQ0hJUF9JRF9ISF9WQUxVRQkJCTB4MDAKKyNkZWZpbmUgT1Y4ODY1X0NISVBf SURfSF9SRUcJCQkweDMwMGIKKyNkZWZpbmUgT1Y4ODY1X0NISVBfSURfSF9WQUxVRQkJCTB4ODgK KyNkZWZpbmUgT1Y4ODY1X0NISVBfSURfTF9SRUcJCQkweDMwMGMKKyNkZWZpbmUgT1Y4ODY1X0NI SVBfSURfTF9WQUxVRQkJCTB4NjUKKyNkZWZpbmUgT1Y4ODY1X1BBRF9PVVQyX1JFRwkJCTB4MzAw ZAorCisjZGVmaW5lIE9WODg2NV9QQURfU0VMMl9SRUcJCQkweDMwMTAKKyNkZWZpbmUgT1Y4ODY1 X1BBRF9QS19SRUcJCQkweDMwMTEKKyNkZWZpbmUgT1Y4ODY1X1BBRF9QS19EUklWRV9TVFJFTkdU SF8xWAkJKDAgPDwgNSkKKyNkZWZpbmUgT1Y4ODY1X1BBRF9QS19EUklWRV9TVFJFTkdUSF8yWAkJ KDEgPDwgNSkKKyNkZWZpbmUgT1Y4ODY1X1BBRF9QS19EUklWRV9TVFJFTkdUSF8zWAkJKDIgPDwg NSkKKyNkZWZpbmUgT1Y4ODY1X1BBRF9QS19EUklWRV9TVFJFTkdUSF80WAkJKDMgPDwgNSkKKwor I2RlZmluZSBPVjg4NjVfUFVNUF9DTEtfRElWX1JFRwkJCTB4MzAxNQorI2RlZmluZSBPVjg4NjVf UFVNUF9DTEtfRElWX1BVTVBfTih2KQkJKCgodikgPDwgNCkgJiBHRU5NQVNLKDYsIDQpKQorI2Rl ZmluZSBPVjg4NjVfUFVNUF9DTEtfRElWX1BVTVBfUCh2KQkJKCh2KSAmIEdFTk1BU0soMiwgMCkp CisKKyNkZWZpbmUgT1Y4ODY1X01JUElfU0NfQ1RSTDBfUkVHCQkweDMwMTgKKyNkZWZpbmUgT1Y4 ODY1X01JUElfU0NfQ1RSTDBfTEFORVModikJCSgoKCh2KSAtIDEpIDw8IDUpICYgXAorCQkJCQkJ IEdFTk1BU0soNywgNSkpCisjZGVmaW5lIE9WODg2NV9NSVBJX1NDX0NUUkwwX01JUElfRU4JCUJJ VCg0KQorI2RlZmluZSBPVjg4NjVfTUlQSV9TQ19DVFJMMF9VTktOT1dOCQlCSVQoMSkKKyNkZWZp bmUgT1Y4ODY1X01JUElfU0NfQ1RSTDBfTEFORVNfUERfTUlQSQlCSVQoMCkKKyNkZWZpbmUgT1Y4 ODY1X01JUElfU0NfQ1RSTDFfUkVHCQkweDMwMTkKKyNkZWZpbmUgT1Y4ODY1X0NMS19SU1QwX1JF RwkJCTB4MzAxYQorI2RlZmluZSBPVjg4NjVfQ0xLX1JTVDFfUkVHCQkJMHgzMDFiCisjZGVmaW5l IE9WODg2NV9DTEtfUlNUMl9SRUcJCQkweDMwMWMKKyNkZWZpbmUgT1Y4ODY1X0NMS19SU1QzX1JF RwkJCTB4MzAxZAorI2RlZmluZSBPVjg4NjVfQ0xLX1JTVDRfUkVHCQkJMHgzMDFlCisKKyNkZWZp bmUgT1Y4ODY1X1BDTEtfU0VMX1JFRwkJCTB4MzAyMAorI2RlZmluZSBPVjg4NjVfUENMS19TRUxf UENMS19ESVZfTUFTSwkJQklUKDMpCisjZGVmaW5lIE9WODg2NV9QQ0xLX1NFTF9QQ0xLX0RJVih2 KQkJKCgoKHYpIC0gMSkgPDwgMykgJiBCSVQoMykpCisKKyNkZWZpbmUgT1Y4ODY1X01JU0NfQ1RS TF9SRUcJCQkweDMwMjEKKyNkZWZpbmUgT1Y4ODY1X01JUElfU0NfQ1RSTDJfUkVHCQkweDMwMjIK KyNkZWZpbmUgT1Y4ODY1X01JUElfU0NfQ1RSTDJfQ0xLX0xBTkVTX1BEX01JUEkJQklUKDEpCisj ZGVmaW5lIE9WODg2NV9NSVBJX1NDX0NUUkwyX1BEX01JUElfUlNUX1NZTkMJQklUKDApCisKKyNk ZWZpbmUgT1Y4ODY1X01JUElfQklUX1NFTF9SRUcJCQkweDMwMzEKKyNkZWZpbmUgT1Y4ODY1X01J UElfQklUX1NFTCh2KQkJCSgoKHYpIDw8IDApICYgR0VOTUFTSyg0LCAwKSkKKyNkZWZpbmUgT1Y4 ODY1X0NMS19TRUwwX1JFRwkJCTB4MzAzMgorI2RlZmluZSBPVjg4NjVfQ0xLX1NFTDBfUExMMV9T WVNfU0VMKHYpCQkoKCh2KSA8PCA3KSAmIEJJVCg3KSkKKyNkZWZpbmUgT1Y4ODY1X0NMS19TRUwx X1JFRwkJCTB4MzAzMworI2RlZmluZSBPVjg4NjVfQ0xLX1NFTDFfTUlQSV9FT0YJCUJJVCg1KQor I2RlZmluZSBPVjg4NjVfQ0xLX1NFTDFfVU5LTk9XTgkJCUJJVCgyKQorI2RlZmluZSBPVjg4NjVf Q0xLX1NFTDFfUExMX1NDTEtfU0VMX01BU0sJQklUKDEpCisjZGVmaW5lIE9WODg2NV9DTEtfU0VM MV9QTExfU0NMS19TRUwodikJCSgoKHYpIDw8IDEpICYgQklUKDEpKQorCisjZGVmaW5lIE9WODg2 NV9TQ0xLX0NUUkxfUkVHCQkJMHgzMTA2CisjZGVmaW5lIE9WODg2NV9TQ0xLX0NUUkxfU0NMS19E SVYodikJCSgoKHYpIDw8IDQpICYgR0VOTUFTSyg3LCA0KSkKKyNkZWZpbmUgT1Y4ODY1X1NDTEtf Q1RSTF9TQ0xLX1BSRV9ESVYodikJKCgodikgPDwgMikgJiBHRU5NQVNLKDMsIDIpKQorI2RlZmlu ZSBPVjg4NjVfU0NMS19DVFJMX1VOS05PV04JCUJJVCgwKQorCisvKiBFeHBvc3VyZS9nYWluICov CisKKyNkZWZpbmUgT1Y4ODY1X0VYUE9TVVJFX0NUUkxfSEhfUkVHCQkweDM1MDAKKyNkZWZpbmUg T1Y4ODY1X0VYUE9TVVJFX0NUUkxfSEgodikJCSgoKHYpICYgR0VOTUFTSygxOSwgMTYpKSA+PiAx NikKKyNkZWZpbmUgT1Y4ODY1X0VYUE9TVVJFX0NUUkxfSF9SRUcJCTB4MzUwMQorI2RlZmluZSBP Vjg4NjVfRVhQT1NVUkVfQ1RSTF9IKHYpCQkoKCh2KSAmIEdFTk1BU0soMTUsIDgpKSA+PiA4KQor I2RlZmluZSBPVjg4NjVfRVhQT1NVUkVfQ1RSTF9MX1JFRwkJMHgzNTAyCisjZGVmaW5lIE9WODg2 NV9FWFBPU1VSRV9DVFJMX0wodikJCSgodikgJiBHRU5NQVNLKDcsIDApKQorI2RlZmluZSBPVjg4 NjVfRVhQT1NVUkVfR0FJTl9NQU5VQUxfUkVHCQkweDM1MDMKKworI2RlZmluZSBPVjg4NjVfR0FJ Tl9DVFJMX0hfUkVHCQkJMHgzNTA4CisjZGVmaW5lIE9WODg2NV9HQUlOX0NUUkxfSCh2KQkJCSgo KHYpICYgR0VOTUFTSygxMiwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9HQUlOX0NUUkxfTF9S RUcJCQkweDM1MDkKKyNkZWZpbmUgT1Y4ODY1X0dBSU5fQ1RSTF9MKHYpCQkJKCh2KSAmIEdFTk1B U0soNywgMCkpCisKKy8qIFRpbWluZyAqLworCisjZGVmaW5lIE9WODg2NV9DUk9QX1NUQVJUX1hf SF9SRUcJCTB4MzgwMAorI2RlZmluZSBPVjg4NjVfQ1JPUF9TVEFSVF9YX0godikJCSgoKHYpICYg R0VOTUFTSygxMSwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9DUk9QX1NUQVJUX1hfTF9SRUcJ CTB4MzgwMQorI2RlZmluZSBPVjg4NjVfQ1JPUF9TVEFSVF9YX0wodikJCSgodikgJiBHRU5NQVNL KDcsIDApKQorI2RlZmluZSBPVjg4NjVfQ1JPUF9TVEFSVF9ZX0hfUkVHCQkweDM4MDIKKyNkZWZp bmUgT1Y4ODY1X0NST1BfU1RBUlRfWV9IKHYpCQkoKCh2KSAmIEdFTk1BU0soMTEsIDgpKSA+PiA4 KQorI2RlZmluZSBPVjg4NjVfQ1JPUF9TVEFSVF9ZX0xfUkVHCQkweDM4MDMKKyNkZWZpbmUgT1Y4 ODY1X0NST1BfU1RBUlRfWV9MKHYpCQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgT1Y4 ODY1X0NST1BfRU5EX1hfSF9SRUcJCQkweDM4MDQKKyNkZWZpbmUgT1Y4ODY1X0NST1BfRU5EX1hf SCh2KQkJCSgoKHYpICYgR0VOTUFTSygxMSwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9DUk9Q X0VORF9YX0xfUkVHCQkJMHgzODA1CisjZGVmaW5lIE9WODg2NV9DUk9QX0VORF9YX0wodikJCQko KHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X0NST1BfRU5EX1lfSF9SRUcJCQkw eDM4MDYKKyNkZWZpbmUgT1Y4ODY1X0NST1BfRU5EX1lfSCh2KQkJCSgoKHYpICYgR0VOTUFTSygx MSwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9DUk9QX0VORF9ZX0xfUkVHCQkJMHgzODA3Cisj ZGVmaW5lIE9WODg2NV9DUk9QX0VORF9ZX0wodikJCQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNk ZWZpbmUgT1Y4ODY1X09VVFBVVF9TSVpFX1hfSF9SRUcJCTB4MzgwOAorI2RlZmluZSBPVjg4NjVf T1VUUFVUX1NJWkVfWF9IKHYpCQkoKCh2KSAmIEdFTk1BU0soMTEsIDgpKSA+PiA4KQorI2RlZmlu ZSBPVjg4NjVfT1VUUFVUX1NJWkVfWF9MX1JFRwkJMHgzODA5CisjZGVmaW5lIE9WODg2NV9PVVRQ VVRfU0laRV9YX0wodikJCSgodikgJiBHRU5NQVNLKDcsIDApKQorI2RlZmluZSBPVjg4NjVfT1VU UFVUX1NJWkVfWV9IX1JFRwkJMHgzODBhCisjZGVmaW5lIE9WODg2NV9PVVRQVVRfU0laRV9ZX0go dikJCSgoKHYpICYgR0VOTUFTSygxMSwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9PVVRQVVRf U0laRV9ZX0xfUkVHCQkweDM4MGIKKyNkZWZpbmUgT1Y4ODY1X09VVFBVVF9TSVpFX1lfTCh2KQkJ KCh2KSAmIEdFTk1BU0soNywgMCkpCisjZGVmaW5lIE9WODg2NV9IVFNfSF9SRUcJCQkweDM4MGMK KyNkZWZpbmUgT1Y4ODY1X0hUU19IKHYpCQkJCSgoKHYpICYgR0VOTUFTSygxMSwgOCkpID4+IDgp CisjZGVmaW5lIE9WODg2NV9IVFNfTF9SRUcJCQkweDM4MGQKKyNkZWZpbmUgT1Y4ODY1X0hUU19M KHYpCQkJCSgodikgJiBHRU5NQVNLKDcsIDApKQorI2RlZmluZSBPVjg4NjVfVlRTX0hfUkVHCQkJ MHgzODBlCisjZGVmaW5lIE9WODg2NV9WVFNfSCh2KQkJCQkoKCh2KSAmIEdFTk1BU0soMTEsIDgp KSA+PiA4KQorI2RlZmluZSBPVjg4NjVfVlRTX0xfUkVHCQkJMHgzODBmCisjZGVmaW5lIE9WODg2 NV9WVFNfTCh2KQkJCQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X09GRlNF VF9YX0hfUkVHCQkJMHgzODEwCisjZGVmaW5lIE9WODg2NV9PRkZTRVRfWF9IKHYpCQkJKCgodikg JiBHRU5NQVNLKDE1LCA4KSkgPj4gOCkKKyNkZWZpbmUgT1Y4ODY1X09GRlNFVF9YX0xfUkVHCQkJ MHgzODExCisjZGVmaW5lIE9WODg2NV9PRkZTRVRfWF9MKHYpCQkJKCh2KSAmIEdFTk1BU0soNywg MCkpCisjZGVmaW5lIE9WODg2NV9PRkZTRVRfWV9IX1JFRwkJCTB4MzgxMgorI2RlZmluZSBPVjg4 NjVfT0ZGU0VUX1lfSCh2KQkJCSgoKHYpICYgR0VOTUFTSygxNCwgOCkpID4+IDgpCisjZGVmaW5l IE9WODg2NV9PRkZTRVRfWV9MX1JFRwkJCTB4MzgxMworI2RlZmluZSBPVjg4NjVfT0ZGU0VUX1lf TCh2KQkJCSgodikgJiBHRU5NQVNLKDcsIDApKQorI2RlZmluZSBPVjg4NjVfSU5DX1hfT0REX1JF RwkJCTB4MzgxNAorI2RlZmluZSBPVjg4NjVfSU5DX1hfT0REKHYpCQkJKCh2KSAmIEdFTk1BU0so NCwgMCkpCisjZGVmaW5lIE9WODg2NV9JTkNfWF9FVkVOX1JFRwkJCTB4MzgxNQorI2RlZmluZSBP Vjg4NjVfSU5DX1hfRVZFTih2KQkJCSgodikgJiBHRU5NQVNLKDQsIDApKQorI2RlZmluZSBPVjg4 NjVfVlNZTkNfU1RBUlRfSF9SRUcJCTB4MzgxNgorI2RlZmluZSBPVjg4NjVfVlNZTkNfU1RBUlRf SCh2KQkJCSgoKHYpICYgR0VOTUFTSygxNSwgOCkpID4+IDgpCisjZGVmaW5lIE9WODg2NV9WU1lO Q19TVEFSVF9MX1JFRwkJMHgzODE3CisjZGVmaW5lIE9WODg2NV9WU1lOQ19TVEFSVF9MKHYpCQkJ KCh2KSAmIEdFTk1BU0soNywgMCkpCisjZGVmaW5lIE9WODg2NV9WU1lOQ19FTkRfSF9SRUcJCQkw eDM4MTgKKyNkZWZpbmUgT1Y4ODY1X1ZTWU5DX0VORF9IKHYpCQkJKCgodikgJiBHRU5NQVNLKDE1 LCA4KSkgPj4gOCkKKyNkZWZpbmUgT1Y4ODY1X1ZTWU5DX0VORF9MX1JFRwkJCTB4MzgxOQorI2Rl ZmluZSBPVjg4NjVfVlNZTkNfRU5EX0wodikJCQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZp bmUgT1Y4ODY1X0hTWU5DX0ZJUlNUX0hfUkVHCQkweDM4MWEKKyNkZWZpbmUgT1Y4ODY1X0hTWU5D X0ZJUlNUX0godikJCQkoKCh2KSAmIEdFTk1BU0soMTUsIDgpKSA+PiA4KQorI2RlZmluZSBPVjg4 NjVfSFNZTkNfRklSU1RfTF9SRUcJCTB4MzgxYgorI2RlZmluZSBPVjg4NjVfSFNZTkNfRklSU1Rf TCh2KQkJCSgodikgJiBHRU5NQVNLKDcsIDApKQorCisjZGVmaW5lIE9WODg2NV9GT1JNQVQxX1JF RwkJCTB4MzgyMAorI2RlZmluZSBPVjg4NjVfRk9STUFUMV9GTElQX1ZFUlRfSVNQX0VOCQlCSVQo MikKKyNkZWZpbmUgT1Y4ODY1X0ZPUk1BVDFfRkxJUF9WRVJUX1NFTlNPUl9FTglCSVQoMSkKKyNk ZWZpbmUgT1Y4ODY1X0ZPUk1BVDJfUkVHCQkJMHgzODIxCisjZGVmaW5lIE9WODg2NV9GT1JNQVQy X0hTWU5DX0VOCQkJQklUKDYpCisjZGVmaW5lIE9WODg2NV9GT1JNQVQyX0ZTVF9WQklOX0VOCQlC SVQoNSkKKyNkZWZpbmUgT1Y4ODY1X0ZPUk1BVDJfRlNUX0hCSU5fRU4JCUJJVCg0KQorI2RlZmlu ZSBPVjg4NjVfRk9STUFUMl9JU1BfSE9SWl9WQVIyX0VOCQlCSVQoMykKKyNkZWZpbmUgT1Y4ODY1 X0ZPUk1BVDJfRkxJUF9IT1JaX0lTUF9FTgkJQklUKDIpCisjZGVmaW5lIE9WODg2NV9GT1JNQVQy X0ZMSVBfSE9SWl9TRU5TT1JfRU4JQklUKDEpCisjZGVmaW5lIE9WODg2NV9GT1JNQVQyX1NZTkNf SEJJTl9FTgkJQklUKDApCisKKworI2RlZmluZSBPVjg4NjVfSU5DX1lfT0REX1JFRwkJCTB4Mzgy YQorI2RlZmluZSBPVjg4NjVfSU5DX1lfT0REKHYpCQkJKCh2KSAmIEdFTk1BU0soNCwgMCkpCisj ZGVmaW5lIE9WODg2NV9JTkNfWV9FVkVOX1JFRwkJCTB4MzgyYgorI2RlZmluZSBPVjg4NjVfSU5D X1lfRVZFTih2KQkJCSgodikgJiBHRU5NQVNLKDQsIDApKQorCisjZGVmaW5lIE9WODg2NV9BQkxD X05VTV9SRUcJCQkweDM4MzAKKyNkZWZpbmUgT1Y4ODY1X0FCTENfTlVNKHYpCQkJKCh2KSAmIEdF Tk1BU0soNCwgMCkpCisKKyNkZWZpbmUgT1Y4ODY1X1pMSU5FX05VTV9SRUcJCQkweDM4MzYKKyNk ZWZpbmUgT1Y4ODY1X1pMSU5FX05VTSh2KQkJCSgodikgJiBHRU5NQVNLKDQsIDApKQorCisjZGVm aW5lIE9WODg2NV9BVVRPX1NJWkVfQ1RSTF9SRUcJCTB4Mzg0MQorI2RlZmluZSBPVjg4NjVfQVVU T19TSVpFX0NUUkxfT0ZGU0VUX1lfUkVHCUJJVCg1KQorI2RlZmluZSBPVjg4NjVfQVVUT19TSVpF X0NUUkxfT0ZGU0VUX1hfUkVHCUJJVCg0KQorI2RlZmluZSBPVjg4NjVfQVVUT19TSVpFX0NUUkxf Q1JPUF9FTkRfWV9SRUcJQklUKDMpCisjZGVmaW5lIE9WODg2NV9BVVRPX1NJWkVfQ1RSTF9DUk9Q X0VORF9YX1JFRwlCSVQoMikKKyNkZWZpbmUgT1Y4ODY1X0FVVE9fU0laRV9DVFJMX0NST1BfU1RB UlRfWV9SRUcJQklUKDEpCisjZGVmaW5lIE9WODg2NV9BVVRPX1NJWkVfQ1RSTF9DUk9QX1NUQVJU X1hfUkVHCUJJVCgwKQorI2RlZmluZSBPVjg4NjVfQVVUT19TSVpFX1hfT0ZGU0VUX0hfUkVHCQkw eDM4NDIKKyNkZWZpbmUgT1Y4ODY1X0FVVE9fU0laRV9YX09GRlNFVF9MX1JFRwkJMHgzODQzCisj ZGVmaW5lIE9WODg2NV9BVVRPX1NJWkVfWV9PRkZTRVRfSF9SRUcJCTB4Mzg0NAorI2RlZmluZSBP Vjg4NjVfQVVUT19TSVpFX1lfT0ZGU0VUX0xfUkVHCQkweDM4NDUKKyNkZWZpbmUgT1Y4ODY1X0FV VE9fU0laRV9CT1VOREFSSUVTX1JFRwkJMHgzODQ2CisjZGVmaW5lIE9WODg2NV9BVVRPX1NJWkVf Qk9VTkRBUklFU19ZKHYpCSgoKHYpIDw8IDQpICYgR0VOTUFTSyg3LCA0KSkKKyNkZWZpbmUgT1Y4 ODY1X0FVVE9fU0laRV9CT1VOREFSSUVTX1godikJKCh2KSAmIEdFTk1BU0soMywgMCkpCisKKy8q IFBTUkFNICovCisKKyNkZWZpbmUgT1Y4ODY1X1BTUkFNX0NUUkw4X1JFRwkJCTB4M2YwOAorCisv KiBCbGFjayBMZXZlbCAqLworCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDBfUkVHCQkJMHg0MDAw CisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDBfVFJJR19SQU5HRV9FTgkJQklUKDcpCisjZGVmaW5l IE9WODg2NV9CTENfQ1RSTDBfVFJJR19GT1JNQVRfRU4JCUJJVCg2KQorI2RlZmluZSBPVjg4NjVf QkxDX0NUUkwwX1RSSUdfR0FJTl9FTgkJQklUKDUpCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDBf VFJJR19FWFBPU1VSRV9FTglCSVQoNCkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMF9UUklHX01B TlVBTF9FTgkJQklUKDMpCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDBfRlJFRVpFX0VOCQlCSVQo MikKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMF9BTFdBWVNfRU4JCUJJVCgxKQorI2RlZmluZSBP Vjg4NjVfQkxDX0NUUkwwX0ZJTFRFUl9FTgkJQklUKDApCisjZGVmaW5lIE9WODg2NV9CTENfQ1RS TDFfUkVHCQkJMHg0MDAxCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDFfRElUSEVSX0VOCQlCSVQo NykKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMV9aRVJPX0xJTkVfRElGRl9FTglCSVQoNikKKyNk ZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMV9DT0xfU0hJRlRfMjU2CQkoMCA8PCA0KQorI2RlZmluZSBP Vjg4NjVfQkxDX0NUUkwxX0NPTF9TSElGVF8xMjgJCSgxIDw8IDQpCisjZGVmaW5lIE9WODg2NV9C TENfQ1RSTDFfQ09MX1NISUZUXzY0CQkoMiA8PCA0KQorI2RlZmluZSBPVjg4NjVfQkxDX0NUUkwx X0NPTF9TSElGVF8zMgkJKDMgPDwgNCkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMV9PRkZTRVRf TElNSVRfRU4JQklUKDIpCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDFfQ09MVU1OX0NBTkNFTF9F TglCSVQoMSkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMl9SRUcJCQkweDQwMDIKKyNkZWZpbmUg T1Y4ODY1X0JMQ19DVFJMM19SRUcJCQkweDQwMDMKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMNF9S RUcJCQkweDQwMDQKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMNV9SRUcJCQkweDQwMDUKKyNkZWZp bmUgT1Y4ODY1X0JMQ19DVFJMNl9SRUcJCQkweDQwMDYKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJM N19SRUcJCQkweDQwMDcKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMOF9SRUcJCQkweDQwMDgKKyNk ZWZpbmUgT1Y4ODY1X0JMQ19DVFJMOV9SRUcJCQkweDQwMDkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19D VFJMQV9SRUcJCQkweDQwMGEKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMQl9SRUcJCQkweDQwMGIK KyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMQ19SRUcJCQkweDQwMGMKKyNkZWZpbmUgT1Y4ODY1X0JM Q19DVFJMRF9SRUcJCQkweDQwMGQKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMRF9PRkZTRVRfVFJJ R0dFUih2KQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKworI2RlZmluZSBPVjg4NjVfQkxDX0NUUkwx Rl9SRUcJCQkweDQwMWYKKyNkZWZpbmUgT1Y4ODY1X0JMQ19DVFJMMUZfUkJfUkVWRVJTRQkJQklU KDMpCisjZGVmaW5lIE9WODg2NV9CTENfQ1RSTDFGX0lOVEVSUE9MX1hfRU4JCUJJVCgyKQorI2Rl ZmluZSBPVjg4NjVfQkxDX0NUUkwxRl9JTlRFUlBPTF9ZX0VOCQlCSVQoMSkKKworI2RlZmluZSBP Vjg4NjVfQkxDX0FOQ0hPUl9MRUZUX1NUQVJUX0hfUkVHCTB4NDAyMAorI2RlZmluZSBPVjg4NjVf QkxDX0FOQ0hPUl9MRUZUX1NUQVJUX0godikJKCgodikgJiBHRU5NQVNLKDExLCA4KSkgPj4gOCkK KyNkZWZpbmUgT1Y4ODY1X0JMQ19BTkNIT1JfTEVGVF9TVEFSVF9MX1JFRwkweDQwMjEKKyNkZWZp bmUgT1Y4ODY1X0JMQ19BTkNIT1JfTEVGVF9TVEFSVF9MKHYpCSgodikgJiBHRU5NQVNLKDcsIDAp KQorI2RlZmluZSBPVjg4NjVfQkxDX0FOQ0hPUl9MRUZUX0VORF9IX1JFRwkweDQwMjIKKyNkZWZp bmUgT1Y4ODY1X0JMQ19BTkNIT1JfTEVGVF9FTkRfSCh2KQkJKCgodikgJiBHRU5NQVNLKDExLCA4 KSkgPj4gOCkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19BTkNIT1JfTEVGVF9FTkRfTF9SRUcJMHg0MDIz CisjZGVmaW5lIE9WODg2NV9CTENfQU5DSE9SX0xFRlRfRU5EX0wodikJCSgodikgJiBHRU5NQVNL KDcsIDApKQorI2RlZmluZSBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9TVEFSVF9IX1JFRwkweDQw MjQKKyNkZWZpbmUgT1Y4ODY1X0JMQ19BTkNIT1JfUklHSFRfU1RBUlRfSCh2KQkoKCh2KSAmIEdF Tk1BU0soMTEsIDgpKSA+PiA4KQorI2RlZmluZSBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9TVEFS VF9MX1JFRwkweDQwMjUKKyNkZWZpbmUgT1Y4ODY1X0JMQ19BTkNIT1JfUklHSFRfU1RBUlRfTCh2 KQkoKHYpICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19BTkNIT1JfUklHSFRf RU5EX0hfUkVHCTB4NDAyNgorI2RlZmluZSBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9FTkRfSCh2 KQkoKCh2KSAmIEdFTk1BU0soMTEsIDgpKSA+PiA4KQorI2RlZmluZSBPVjg4NjVfQkxDX0FOQ0hP Ul9SSUdIVF9FTkRfTF9SRUcJMHg0MDI3CisjZGVmaW5lIE9WODg2NV9CTENfQU5DSE9SX1JJR0hU X0VORF9MKHYpCSgodikgJiBHRU5NQVNLKDcsIDApKQorCisjZGVmaW5lIE9WODg2NV9CTENfVE9Q X1pMSU5FX1NUQVJUX1JFRwkJMHg0MDI4CisjZGVmaW5lIE9WODg2NV9CTENfVE9QX1pMSU5FX1NU QVJUKHYpCQkoKHYpICYgR0VOTUFTSyg1LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19UT1BfWkxJ TkVfTlVNX1JFRwkJMHg0MDI5CisjZGVmaW5lIE9WODg2NV9CTENfVE9QX1pMSU5FX05VTSh2KQkJ KCh2KSAmIEdFTk1BU0soNCwgMCkpCisjZGVmaW5lIE9WODg2NV9CTENfVE9QX0JMS0xJTkVfU1RB UlRfUkVHCTB4NDAyYQorI2RlZmluZSBPVjg4NjVfQkxDX1RPUF9CTEtMSU5FX1NUQVJUKHYpCQko KHYpICYgR0VOTUFTSyg1LCAwKSkKKyNkZWZpbmUgT1Y4ODY1X0JMQ19UT1BfQkxLTElORV9OVU1f UkVHCQkweDQwMmIKKyNkZWZpbmUgT1Y4ODY1X0JMQ19UT1BfQkxLTElORV9OVU0odikJCSgodikg JiBHRU5NQVNLKDQsIDApKQorI2RlZmluZSBPVjg4NjVfQkxDX0JPVF9aTElORV9TVEFSVF9SRUcJ CTB4NDAyYworI2RlZmluZSBPVjg4NjVfQkxDX0JPVF9aTElORV9TVEFSVCh2KQkJKCh2KSAmIEdF Tk1BU0soNSwgMCkpCisjZGVmaW5lIE9WODg2NV9CTENfQk9UX1pMSU5FX05VTV9SRUcJCTB4NDAy ZAorI2RlZmluZSBPVjg4NjVfQkxDX0JPVF9aTElORV9OVU0odikJCSgodikgJiBHRU5NQVNLKDQs IDApKQorI2RlZmluZSBPVjg4NjVfQkxDX0JPVF9CTEtMSU5FX1NUQVJUX1JFRwkweDQwMmUKKyNk ZWZpbmUgT1Y4ODY1X0JMQ19CT1RfQkxLTElORV9TVEFSVCh2KQkJKCh2KSAmIEdFTk1BU0soNSwg MCkpCisjZGVmaW5lIE9WODg2NV9CTENfQk9UX0JMS0xJTkVfTlVNX1JFRwkJMHg0MDJmCisjZGVm aW5lIE9WODg2NV9CTENfQk9UX0JMS0xJTkVfTlVNKHYpCQkoKHYpICYgR0VOTUFTSyg0LCAwKSkK KworI2RlZmluZSBPVjg4NjVfQkxDX09GRlNFVF9MSU1JVF9SRUcJCTB4NDAzNAorI2RlZmluZSBP Vjg4NjVfQkxDX09GRlNFVF9MSU1JVCh2KQkJKCh2KSAmIEdFTk1BU0soNywgMCkpCisKKy8qIFZG SUZPICovCisKKyNkZWZpbmUgT1Y4ODY1X1ZGSUZPX1JFQURfU1RBUlRfSF9SRUcJCTB4NDYwMAor I2RlZmluZSBPVjg4NjVfVkZJRk9fUkVBRF9TVEFSVF9IKHYpCQkoKCh2KSAmIEdFTk1BU0soMTUs IDgpKSA+PiA4KQorI2RlZmluZSBPVjg4NjVfVkZJRk9fUkVBRF9TVEFSVF9MX1JFRwkJMHg0NjAx CisjZGVmaW5lIE9WODg2NV9WRklGT19SRUFEX1NUQVJUX0wodikJCSgodikgJiBHRU5NQVNLKDcs IDApKQorCisvKiBNSVBJICovCisKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ1RSTDBfUkVHCQkJMHg0 ODAwCisjZGVmaW5lIE9WODg2NV9NSVBJX0NUUkwxX1JFRwkJCTB4NDgwMQorI2RlZmluZSBPVjg4 NjVfTUlQSV9DVFJMMl9SRUcJCQkweDQ4MDIKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ1RSTDNfUkVH CQkJMHg0ODAzCisjZGVmaW5lIE9WODg2NV9NSVBJX0NUUkw0X1JFRwkJCTB4NDgwNAorI2RlZmlu ZSBPVjg4NjVfTUlQSV9DVFJMNV9SRUcJCQkweDQ4MDUKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ1RS TDZfUkVHCQkJMHg0ODA2CisjZGVmaW5lIE9WODg2NV9NSVBJX0NUUkw3X1JFRwkJCTB4NDgwNwor I2RlZmluZSBPVjg4NjVfTUlQSV9DVFJMOF9SRUcJCQkweDQ4MDgKKworI2RlZmluZSBPVjg4NjVf TUlQSV9GQ05UX01BWF9IX1JFRwkJMHg0ODEwCisjZGVmaW5lIE9WODg2NV9NSVBJX0ZDTlRfTUFY X0xfUkVHCQkweDQ4MTEKKworI2RlZmluZSBPVjg4NjVfTUlQSV9DVFJMMTNfUkVHCQkJMHg0ODEz CisjZGVmaW5lIE9WODg2NV9NSVBJX0NUUkwxNF9SRUcJCQkweDQ4MTQKKyNkZWZpbmUgT1Y4ODY1 X01JUElfQ1RSTDE1X1JFRwkJCTB4NDgxNQorI2RlZmluZSBPVjg4NjVfTUlQSV9FTUJFRERFRF9E VF9SRUcJCTB4NDgxNgorCisjZGVmaW5lIE9WODg2NV9NSVBJX0hTX1pFUk9fTUlOX0hfUkVHCQkw eDQ4MTgKKyNkZWZpbmUgT1Y4ODY1X01JUElfSFNfWkVST19NSU5fTF9SRUcJCTB4NDgxOQorI2Rl ZmluZSBPVjg4NjVfTUlQSV9IU19UUkFJTF9NSU5fSF9SRUcJCTB4NDgxYQorI2RlZmluZSBPVjg4 NjVfTUlQSV9IU19UUkFJTF9NSU5fTF9SRUcJCTB4NDgxYgorI2RlZmluZSBPVjg4NjVfTUlQSV9D TEtfWkVST19NSU5fSF9SRUcJCTB4NDgxYworI2RlZmluZSBPVjg4NjVfTUlQSV9DTEtfWkVST19N SU5fTF9SRUcJCTB4NDgxZAorI2RlZmluZSBPVjg4NjVfTUlQSV9DTEtfUFJFUEFSRV9NQVhfUkVH CQkweDQ4MWUKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ0xLX1BSRVBBUkVfTUlOX1JFRwkJMHg0ODFm CisjZGVmaW5lIE9WODg2NV9NSVBJX0NMS19QT1NUX01JTl9IX1JFRwkJMHg0ODIwCisjZGVmaW5l IE9WODg2NV9NSVBJX0NMS19QT1NUX01JTl9MX1JFRwkJMHg0ODIxCisjZGVmaW5lIE9WODg2NV9N SVBJX0NMS19UUkFJTF9NSU5fSF9SRUcJCTB4NDgyMgorI2RlZmluZSBPVjg4NjVfTUlQSV9DTEtf VFJBSUxfTUlOX0xfUkVHCQkweDQ4MjMKKyNkZWZpbmUgT1Y4ODY1X01JUElfTFBYX1BfTUlOX0hf UkVHCQkweDQ4MjQKKyNkZWZpbmUgT1Y4ODY1X01JUElfTFBYX1BfTUlOX0xfUkVHCQkweDQ4MjUK KyNkZWZpbmUgT1Y4ODY1X01JUElfSFNfUFJFUEFSRV9NSU5fUkVHCQkweDQ4MjYKKyNkZWZpbmUg T1Y4ODY1X01JUElfSFNfUFJFUEFSRV9NQVhfUkVHCQkweDQ4MjcKKyNkZWZpbmUgT1Y4ODY1X01J UElfSFNfRVhJVF9NSU5fSF9SRUcJCTB4NDgyOAorI2RlZmluZSBPVjg4NjVfTUlQSV9IU19FWElU X01JTl9MX1JFRwkJMHg0ODI5CisjZGVmaW5lIE9WODg2NV9NSVBJX1VJX0hTX1pFUk9fTUlOX1JF RwkJMHg0ODJhCisjZGVmaW5lIE9WODg2NV9NSVBJX1VJX0hTX1RSQUlMX01JTl9SRUcJCTB4NDgy YgorI2RlZmluZSBPVjg4NjVfTUlQSV9VSV9DTEtfWkVST19NSU5fUkVHCQkweDQ4MmMKKyNkZWZp bmUgT1Y4ODY1X01JUElfVUlfQ0xLX1BSRVBBUkVfUkVHCQkweDQ4MmQKKyNkZWZpbmUgT1Y4ODY1 X01JUElfVUlfQ0xLX1BPU1RfTUlOX1JFRwkJMHg0ODJlCisjZGVmaW5lIE9WODg2NV9NSVBJX1VJ X0NMS19UUkFJTF9NSU5fUkVHCTB4NDgyZgorI2RlZmluZSBPVjg4NjVfTUlQSV9VSV9MUFhfUF9N SU5fUkVHCQkweDQ4MzAKKyNkZWZpbmUgT1Y4ODY1X01JUElfVUlfSFNfUFJFUEFSRV9SRUcJCTB4 NDgzMQorI2RlZmluZSBPVjg4NjVfTUlQSV9VSV9IU19FWElUX01JTl9SRUcJCTB4NDgzMgorI2Rl ZmluZSBPVjg4NjVfTUlQSV9QS1RfU1RBUlRfU0laRV9SRUcJCTB4NDgzMworCisjZGVmaW5lIE9W ODg2NV9NSVBJX1BDTEtfUEVSSU9EX1JFRwkJMHg0ODM3CisjZGVmaW5lIE9WODg2NV9NSVBJX0xQ X0dQSU8wX1JFRwkJMHg0ODM4CisjZGVmaW5lIE9WODg2NV9NSVBJX0xQX0dQSU8xX1JFRwkJMHg0 ODM5CisKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ1RSTDNDX1JFRwkJCTB4NDgzYworI2RlZmluZSBP Vjg4NjVfTUlQSV9MUF9HUElPNF9SRUcJCTB4NDgzZAorCisjZGVmaW5lIE9WODg2NV9NSVBJX0NU Ukw0QV9SRUcJCQkweDQ4NGEKKyNkZWZpbmUgT1Y4ODY1X01JUElfQ1RSTDRCX1JFRwkJCTB4NDg0 YgorI2RlZmluZSBPVjg4NjVfTUlQSV9DVFJMNENfUkVHCQkJMHg0ODRjCisjZGVmaW5lIE9WODg2 NV9NSVBJX0xBTkVfVEVTVF9QQVRURVJOX1JFRwkweDQ4NGQKKyNkZWZpbmUgT1Y4ODY1X01JUElf RlJBTUVfRU5EX0RFTEFZX1JFRwkJMHg0ODRlCisjZGVmaW5lIE9WODg2NV9NSVBJX0NMT0NLX1RF U1RfUEFUVEVSTl9SRUcJMHg0ODRmCisjZGVmaW5lIE9WODg2NV9NSVBJX0xBTkVfU0VMMDFfUkVH CQkweDQ4NTAKKyNkZWZpbmUgT1Y4ODY1X01JUElfTEFORV9TRUwwMV9MQU5FMCh2KQkJKCgodikg PDwgMCkgJiBHRU5NQVNLKDIsIDApKQorI2RlZmluZSBPVjg4NjVfTUlQSV9MQU5FX1NFTDAxX0xB TkUxKHYpCQkoKCh2KSA8PCA0KSAmIEdFTk1BU0soNiwgNCkpCisjZGVmaW5lIE9WODg2NV9NSVBJ X0xBTkVfU0VMMjNfUkVHCQkweDQ4NTEKKyNkZWZpbmUgT1Y4ODY1X01JUElfTEFORV9TRUwyM19M QU5FMih2KQkJKCgodikgPDwgMCkgJiBHRU5NQVNLKDIsIDApKQorI2RlZmluZSBPVjg4NjVfTUlQ SV9MQU5FX1NFTDIzX0xBTkUzKHYpCQkoKCh2KSA8PCA0KSAmIEdFTk1BU0soNiwgNCkpCisKKy8q IElTUCAqLworCisjZGVmaW5lIE9WODg2NV9JU1BfQ1RSTDBfUkVHCQkJMHg1MDAwCisjZGVmaW5l IE9WODg2NV9JU1BfQ1RSTDBfTEVOQ19FTgkJQklUKDcpCisjZGVmaW5lIE9WODg2NV9JU1BfQ1RS TDBfV0hJVEVfQkFMQU5DRV9FTglCSVQoNCkKKyNkZWZpbmUgT1Y4ODY1X0lTUF9DVFJMMF9EUENf QkxBQ0tfRU4JCUJJVCgyKQorI2RlZmluZSBPVjg4NjVfSVNQX0NUUkwwX0RQQ19XSElURV9FTgkJ QklUKDEpCisjZGVmaW5lIE9WODg2NV9JU1BfQ1RSTDFfUkVHCQkJMHg1MDAxCisjZGVmaW5lIE9W ODg2NV9JU1BfQ1RSTDFfQkxDX0VOCQkJQklUKDApCisjZGVmaW5lIE9WODg2NV9JU1BfQ1RSTDJf UkVHCQkJMHg1MDAyCisjZGVmaW5lIE9WODg2NV9JU1BfQ1RSTDJfREVCVUcJCQlCSVQoMykKKyNk ZWZpbmUgT1Y4ODY1X0lTUF9DVFJMMl9WQVJJT1BJWEVMX0VOCQlCSVQoMikKKyNkZWZpbmUgT1Y4 ODY1X0lTUF9DVFJMMl9WU1lOQ19MQVRDSF9FTgkJQklUKDApCisjZGVmaW5lIE9WODg2NV9JU1Bf Q1RSTDNfUkVHCQkJMHg1MDAzCisKKyNkZWZpbmUgT1Y4ODY1X0lTUF9HQUlOX1JFRF9IX1JFRwkJ MHg1MDE4CisjZGVmaW5lIE9WODg2NV9JU1BfR0FJTl9SRURfSCh2KQkJKCgodikgJiBHRU5NQVNL KDEzLCA2KSkgPj4gNikKKyNkZWZpbmUgT1Y4ODY1X0lTUF9HQUlOX1JFRF9MX1JFRwkJMHg1MDE5 CisjZGVmaW5lIE9WODg2NV9JU1BfR0FJTl9SRURfTCh2KQkJKCh2KSAmIEdFTk1BU0soNSwgMCkp CisjZGVmaW5lIE9WODg2NV9JU1BfR0FJTl9HUkVFTl9IX1JFRwkJMHg1MDFhCisjZGVmaW5lIE9W ODg2NV9JU1BfR0FJTl9HUkVFTl9IKHYpCQkoKCh2KSAmIEdFTk1BU0soMTMsIDYpKSA+PiA2KQor I2RlZmluZSBPVjg4NjVfSVNQX0dBSU5fR1JFRU5fTF9SRUcJCTB4NTAxYgorI2RlZmluZSBPVjg4 NjVfSVNQX0dBSU5fR1JFRU5fTCh2KQkJKCh2KSAmIEdFTk1BU0soNSwgMCkpCisjZGVmaW5lIE9W ODg2NV9JU1BfR0FJTl9CTFVFX0hfUkVHCQkweDUwMWMKKyNkZWZpbmUgT1Y4ODY1X0lTUF9HQUlO X0JMVUVfSCh2KQkJKCgodikgJiBHRU5NQVNLKDEzLCA2KSkgPj4gNikKKyNkZWZpbmUgT1Y4ODY1 X0lTUF9HQUlOX0JMVUVfTF9SRUcJCTB4NTAxZAorI2RlZmluZSBPVjg4NjVfSVNQX0dBSU5fQkxV RV9MKHYpCQkoKHYpICYgR0VOTUFTSyg1LCAwKSkKKworLyogVmFyaW9QaXhlbCAqLworCisjZGVm aW5lIE9WODg2NV9WQVBfQ1RSTDBfUkVHCQkJMHg1OTAwCisjZGVmaW5lIE9WODg2NV9WQVBfQ1RS TDFfUkVHCQkJMHg1OTAxCisjZGVmaW5lIE9WODg2NV9WQVBfQ1RSTDFfSFNVQl9DT0VGKHYpCQko KCgodikgLSAxKSA8PCAyKSAmIFwKKwkJCQkJCSBHRU5NQVNLKDMsIDIpKQorI2RlZmluZSBPVjg4 NjVfVkFQX0NUUkwxX1ZTVUJfQ09FRih2KQkJKCgodikgLSAxKSAmIEdFTk1BU0soMSwgMCkpCisK Ky8qIFByZS1EU1AgKi8KKworI2RlZmluZSBPVjg4NjVfUFJFX0NUUkwwX1JFRwkJCTB4NWUwMAor I2RlZmluZSBPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fRU4JCUJJVCg3KQorI2RlZmluZSBPVjg4 NjVfUFJFX0NUUkwwX1JPTExJTkdfQkFSX0VOCQlCSVQoNikKKyNkZWZpbmUgT1Y4ODY1X1BSRV9D VFJMMF9UUkFOU1BBUkVOVF9NT0RFCUJJVCg1KQorI2RlZmluZSBPVjg4NjVfUFJFX0NUUkwwX1NR VUFSRVNfQldfTU9ERQlCSVQoNCkKKyNkZWZpbmUgT1Y4ODY1X1BSRV9DVFJMMF9QQVRURVJOX0NP TE9SX0JBUlMJMAorI2RlZmluZSBPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fUkFORE9NX0RBVEEJ MQorI2RlZmluZSBPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fQ09MT1JfU1FVQVJFUwkyCisjZGVm aW5lIE9WODg2NV9QUkVfQ1RSTDBfUEFUVEVSTl9CTEFDSwkJMworCisvKiBNYWNyb3MgKi8KKwor I2RlZmluZSBvdjg4NjVfc3ViZGV2X3NlbnNvcihzKSBcCisJY29udGFpbmVyX29mKHMsIHN0cnVj dCBvdjg4NjVfc2Vuc29yLCBzdWJkZXYpCisKKyNkZWZpbmUgb3Y4ODY1X2N0cmxfc3ViZGV2KGMp IFwKKwkoJmNvbnRhaW5lcl9vZihjLT5oYW5kbGVyLCBzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciwgY3Ry bHMuaGFuZGxlciktPnN1YmRldikKKworLyogRGF0YSBzdHJ1Y3R1cmVzICovCisKK3N0cnVjdCBv djg4NjVfcmVnaXN0ZXJfdmFsdWUgeworCXUxNiBhZGRyZXNzOworCXU4IHZhbHVlOworCXVuc2ln bmVkIGludCBkZWxheV9tczsKK307CisKKy8qCisgKiBQTEwxIENsb2NrIFRyZWU6CisgKgorICog Ky08IEVYVENMSworICogfAorICogKy0rIHBsbF9wcmVfZGl2X2hhbGYgKDB4MzBhIFswXSkKKyAq ICAgfAorICogICArLSsgcGxsX3ByZV9kaXYgKDB4MzAwIFsyOjBdLCBzcGVjaWFsIHZhbHVlczoK KyAqICAgICB8ICAgICAgICAgICAgICAwOiAxLCAxOiAxLjUsIDM6IDIuNSwgNDogMywgNTogNCwg NzogOCkKKyAqICAgICArLSsgcGxsX211bCAoMHgzMDEgWzE6MF0sIDB4MzAyIFs3OjBdKQorICog ICAgICAgfAorICogICAgICAgKy0rIG1fZGl2ICgweDMwMyBbMzowXSkKKyAqICAgICAgIHwgfAor ICogICAgICAgfCArLT4gUEhZX1NDTEsKKyAqICAgICAgIHwgfAorICogICAgICAgfCArLSsgbWlw aV9kaXYgKDB4MzA0IFsxOjBdLCBzcGVjaWFsIHZhbHVlczogMDogNCwgMTogNSwgMjogNiwgMzog OCkKKyAqICAgICAgIHwgICB8CisgKiAgICAgICB8ICAgKy0rIHBjbGtfZGl2ICgweDMwMjAgWzNd KQorICogICAgICAgfCAgICAgfAorICogICAgICAgfCAgICAgKy0+IFBDTEsKKyAqICAgICAgIHwK KyAqICAgICAgICstKyBzeXNfcHJlX2RpdiAoMHgzMDUgWzE6MF0sIHNwZWNpYWwgdmFsdWVzOiAw OiAzLCAxOiA0LCAyOiA1LCAzOiA2KQorICogICAgICAgICB8CisgKiAgICAgICAgICstKyBzeXNf ZGl2ICgweDMwNiBbMF0pCisgKiAgICAgICAgICAgfAorICogICAgICAgICAgICstKyBzeXNfc2Vs ICgweDMwMzIgWzddLCAwOiBQTEwxLCAxOiBQTEwyKQorICogICAgICAgICAgICAgfAorICogICAg ICAgICAgICAgKy0rIHNjbGtfc2VsICgweDMwMzMgWzFdLCAwOiBzeXNfc2VsLCAxOiBQTEwyIERB Q19DTEspCisgKiAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgKy0rIHNjbGtfcHJl X2RpdiAoMHgzMTA2IFszOjJdLCBzcGVjaWFsIHZhbHVlczoKKyAqICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgMDogMSwgMTogMiwgMjogNCwgMzogMSkKKyAqICAgICAgICAgICAgICAg ICB8CisgKiAgICAgICAgICAgICAgICAgKy0rIHNjbGtfZGl2ICgweDMxMDYgWzc6NF0sIHNwZWNp YWwgdmFsdWVzOiAwOiAxKQorICogICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAg ICAgICAgKy0+IFNDTEsKKyAqLworCitzdHJ1Y3Qgb3Y4ODY1X3BsbDFfY29uZmlnIHsKKwl1bnNp Z25lZCBpbnQgcGxsX3ByZV9kaXZfaGFsZjsKKwl1bnNpZ25lZCBpbnQgcGxsX3ByZV9kaXY7CisJ dW5zaWduZWQgaW50IHBsbF9tdWw7CisJdW5zaWduZWQgaW50IG1fZGl2OworCXVuc2lnbmVkIGlu dCBtaXBpX2RpdjsKKwl1bnNpZ25lZCBpbnQgcGNsa19kaXY7CisJdW5zaWduZWQgaW50IHN5c19w cmVfZGl2OworCXVuc2lnbmVkIGludCBzeXNfZGl2OworfTsKKworLyoKKyAqIFBMTDIgQ2xvY2sg VHJlZToKKyAqCisgKiArLTwgRVhUQ0xLCisgKiB8CisgKiArLSsgcGxsX3ByZV9kaXZfaGFsZiAo MHgzMTIgWzRdKQorICogICB8CisgKiAgICstKyBwbGxfcHJlX2RpdiAoMHgzMGIgWzI6MF0sIHNw ZWNpYWwgdmFsdWVzOgorICogICAgIHwgICAgICAgICAgICAgIDA6IDEsIDE6IDEuNSwgMzogMi41 LCA0OiAzLCA1OiA0LCA3OiA4KQorICogICAgICstKyBwbGxfbXVsICgweDMwYyBbMTowXSwgMHgz MGQgWzc6MF0pCisgKiAgICAgICB8CisgKiAgICAgICArLSsgZGFjX2RpdiAoMHgzMTIgWzM6MF0p CisgKiAgICAgICB8IHwKKyAqICAgICAgIHwgKy0+IERBQ19DTEsKKyAqICAgICAgIHwKKyAqICAg ICAgICstKyBzeXNfcHJlX2RpdiAoMHgzMGYgWzM6MF0pCisgKiAgICAgICAgIHwKKyAqICAgICAg ICAgKy0rIHN5c19kaXYgKDB4MzBlIFsyOjBdLCBzcGVjaWFsIHZhbHVlczoKKyAqICAgICAgICAg ICB8ICAgICAgICAgIDA6IDEsIDE6IDEuNSwgMzogMi41LCA0OiAzLCA1OiAzLjUsIDY6IDQsIDc6 NSkKKyAqICAgICAgICAgICB8CisgKiAgICAgICAgICAgKy0rIHN5c19zZWwgKDB4MzAzMiBbN10s IDA6IFBMTDEsIDE6IFBMTDIpCisgKiAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICArLSsg c2Nsa19zZWwgKDB4MzAzMyBbMV0sIDA6IHN5c19zZWwsIDE6IFBMTDIgREFDX0NMSykKKyAqICAg ICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICArLSsgc2Nsa19wcmVfZGl2ICgweDMxMDYg WzM6Ml0sIHNwZWNpYWwgdmFsdWVzOgorICogICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg ICAwOiAxLCAxOiAyLCAyOiA0LCAzOiAxKQorICogICAgICAgICAgICAgICAgIHwKKyAqICAgICAg ICAgICAgICAgICArLSsgc2Nsa19kaXYgKDB4MzEwNiBbNzo0XSwgc3BlY2lhbCB2YWx1ZXM6IDA6 IDEpCisgKiAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICArLT4gU0NM SworICovCisKK3N0cnVjdCBvdjg4NjVfcGxsMl9jb25maWcgeworCXVuc2lnbmVkIGludCBwbGxf cHJlX2Rpdl9oYWxmOworCXVuc2lnbmVkIGludCBwbGxfcHJlX2RpdjsKKwl1bnNpZ25lZCBpbnQg cGxsX211bDsKKwl1bnNpZ25lZCBpbnQgZGFjX2RpdjsKKwl1bnNpZ25lZCBpbnQgc3lzX3ByZV9k aXY7CisJdW5zaWduZWQgaW50IHN5c19kaXY7Cit9OworCitzdHJ1Y3Qgb3Y4ODY1X3NjbGtfY29u ZmlnIHsKKwl1bnNpZ25lZCBpbnQgc3lzX3NlbDsKKwl1bnNpZ25lZCBpbnQgc2Nsa19zZWw7CisJ dW5zaWduZWQgaW50IHNjbGtfcHJlX2RpdjsKKwl1bnNpZ25lZCBpbnQgc2Nsa19kaXY7Cit9Owor CisvKgorICogR2VuZXJhbCBmb3JtdWxhcyBmb3IgKGFycmF5LWNlbnRlcmVkKSBtb2RlIGNhbGN1 bGF0aW9uOgorICogLSBwaG90b19hcnJheV93aWR0aCA9IDMyOTYKKyAqIC0gY3JvcF9zdGFydF94 ID0gKHBob3RvX2FycmF5X3dpZHRoIC0gb3V0cHV0X3NpemVfeCkgLyAyCisgKiAtIGNyb3BfZW5k X3ggPSBjcm9wX3N0YXJ0X3ggKyBvZmZzZXRfeCArIG91dHB1dF9zaXplX3ggLSAxCisgKgorICog LSBwaG90b19hcnJheV9oZWlnaHQgPSAyNDgwCisgKiAtIGNyb3Bfc3RhcnRfeSA9IChwaG90b19h cnJheV9oZWlnaHQgLSBvdXRwdXRfc2l6ZV95KSAvIDIKKyAqIC0gY3JvcF9lbmRfeSA9IGNyb3Bf c3RhcnRfeSArIG9mZnNldF95ICsgb3V0cHV0X3NpemVfeSAtIDEKKyAqLworCitzdHJ1Y3Qgb3Y4 ODY1X21vZGUgeworCXVuc2lnbmVkIGludCBjcm9wX3N0YXJ0X3g7CisJdW5zaWduZWQgaW50IG9m ZnNldF94OworCXVuc2lnbmVkIGludCBvdXRwdXRfc2l6ZV94OworCXVuc2lnbmVkIGludCBjcm9w X2VuZF94OworCXVuc2lnbmVkIGludCBodHM7CisKKwl1bnNpZ25lZCBpbnQgY3JvcF9zdGFydF95 OworCXVuc2lnbmVkIGludCBvZmZzZXRfeTsKKwl1bnNpZ25lZCBpbnQgb3V0cHV0X3NpemVfeTsK Kwl1bnNpZ25lZCBpbnQgY3JvcF9lbmRfeTsKKwl1bnNpZ25lZCBpbnQgdnRzOworCisJLyogV2l0 aCBhdXRvIHNpemUsIG9ubHkgb3V0cHV0IGFuZCB0b3RhbCBzaXplcyBuZWVkIHRvIGJlIHNldC4g Ki8KKwlib29sIHNpemVfYXV0bzsKKwl1bnNpZ25lZCBpbnQgc2l6ZV9hdXRvX2JvdW5kYXJ5X3g7 CisJdW5zaWduZWQgaW50IHNpemVfYXV0b19ib3VuZGFyeV95OworCisJYm9vbCBiaW5uaW5nX3g7 CisJYm9vbCBiaW5uaW5nX3k7CisJYm9vbCB2YXJpb3BpeGVsOworCXVuc2lnbmVkIGludCB2YXJp b3BpeGVsX2hzdWJfY29lZjsKKwl1bnNpZ25lZCBpbnQgdmFyaW9waXhlbF92c3ViX2NvZWY7CisK KwkvKiBCaXRzIGZvciB0aGUgZm9ybWF0IHJlZ2lzdGVyLCB1c2VkIGZvciBiaW5uaW5nLiAqLwor CWJvb2wgc3luY19oYmluOworCWJvb2wgaG9yel92YXIyOworCisJdW5zaWduZWQgaW50IGluY194 X29kZDsKKwl1bnNpZ25lZCBpbnQgaW5jX3hfZXZlbjsKKwl1bnNpZ25lZCBpbnQgaW5jX3lfb2Rk OworCXVuc2lnbmVkIGludCBpbmNfeV9ldmVuOworCisJdW5zaWduZWQgaW50IHZmaWZvX3JlYWRf c3RhcnQ7CisKKwl1bnNpZ25lZCBpbnQgYWJsY19udW07CisJdW5zaWduZWQgaW50IHpsaW5lX251 bTsKKworCXVuc2lnbmVkIGludCBibGNfdG9wX3plcm9fbGluZV9zdGFydDsKKwl1bnNpZ25lZCBp bnQgYmxjX3RvcF96ZXJvX2xpbmVfbnVtOworCXVuc2lnbmVkIGludCBibGNfdG9wX2JsYWNrX2xp bmVfc3RhcnQ7CisJdW5zaWduZWQgaW50IGJsY190b3BfYmxhY2tfbGluZV9udW07CisKKwl1bnNp Z25lZCBpbnQgYmxjX2JvdHRvbV96ZXJvX2xpbmVfc3RhcnQ7CisJdW5zaWduZWQgaW50IGJsY19i b3R0b21femVyb19saW5lX251bTsKKwl1bnNpZ25lZCBpbnQgYmxjX2JvdHRvbV9ibGFja19saW5l X3N0YXJ0OworCXVuc2lnbmVkIGludCBibGNfYm90dG9tX2JsYWNrX2xpbmVfbnVtOworCisJdTgg YmxjX2NvbF9zaGlmdF9tYXNrOworCisJdW5zaWduZWQgaW50IGJsY19hbmNob3JfbGVmdF9zdGFy dDsKKwl1bnNpZ25lZCBpbnQgYmxjX2FuY2hvcl9sZWZ0X2VuZDsKKwl1bnNpZ25lZCBpbnQgYmxj X2FuY2hvcl9yaWdodF9zdGFydDsKKwl1bnNpZ25lZCBpbnQgYmxjX2FuY2hvcl9yaWdodF9lbmQ7 CisKKwlzdHJ1Y3QgdjRsMl9mcmFjdCBmcmFtZV9pbnRlcnZhbDsKKworCWNvbnN0IHN0cnVjdCBv djg4NjVfcGxsMV9jb25maWcgKnBsbDFfY29uZmlnOworCWNvbnN0IHN0cnVjdCBvdjg4NjVfcGxs Ml9jb25maWcgKnBsbDJfY29uZmlnOworCWNvbnN0IHN0cnVjdCBvdjg4NjVfc2Nsa19jb25maWcg KnNjbGtfY29uZmlnOworCisJY29uc3Qgc3RydWN0IG92ODg2NV9yZWdpc3Rlcl92YWx1ZSAqcmVn aXN0ZXJfdmFsdWVzOworCXVuc2lnbmVkIGludCByZWdpc3Rlcl92YWx1ZXNfY291bnQ7Cit9Owor CitzdHJ1Y3Qgb3Y4ODY1X3N0YXRlIHsKKwljb25zdCBzdHJ1Y3Qgb3Y4ODY1X21vZGUgKm1vZGU7 CisJdTMyIG1idXNfY29kZTsKKworCWJvb2wgc3RyZWFtaW5nOworfTsKKworc3RydWN0IG92ODg2 NV9jdHJscyB7CisJc3RydWN0IHY0bDJfY3RybCAqbGlua19mcmVxOworCXN0cnVjdCB2NGwyX2N0 cmwgKnBpeGVsX3JhdGU7CisKKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGFuZGxlcjsKK307 CisKK3N0cnVjdCBvdjg4NjVfc2Vuc29yIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0 IGkyY19jbGllbnQgKmkyY19jbGllbnQ7CisJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXQ7CisJc3Ry dWN0IGdwaW9fZGVzYyAqcG93ZXJkb3duOworCXN0cnVjdCByZWd1bGF0b3IgKmF2ZGQ7CisJc3Ry dWN0IHJlZ3VsYXRvciAqZHZkZDsKKwlzdHJ1Y3QgcmVndWxhdG9yICpkb3ZkZDsKKwlzdHJ1Y3Qg Y2xrICpleHRjbGs7CisKKwlzdHJ1Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQgZW5kcG9pbnQ7CisJ c3RydWN0IHY0bDJfc3ViZGV2IHN1YmRldjsKKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZDsKKworCXN0 cnVjdCBtdXRleCBtdXRleDsKKworCXN0cnVjdCBvdjg4NjVfc3RhdGUgc3RhdGU7CisJc3RydWN0 IG92ODg2NV9jdHJscyBjdHJsczsKK307CisKKy8qIFN0YXRpYyBkZWZpbml0aW9ucyAqLworCisv KgorICogRVhUQ0xLID0gMjQgTUh6CisgKiBQSFlfU0NMSyA9IDcyMCBNSHoKKyAqIE1JUElfUENM SyA9IDkwIE1IegorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG92ODg2NV9wbGwxX2NvbmZpZyBv djg4NjVfcGxsMV9jb25maWdfbmF0aXZlID0geworCS5wbGxfcHJlX2Rpdl9oYWxmCT0gMSwKKwku cGxsX3ByZV9kaXYJCT0gMCwKKwkucGxsX211bAkJPSAzMCwKKwkubV9kaXYJCQk9IDEsCisJLm1p cGlfZGl2CQk9IDMsCisJLnBjbGtfZGl2CQk9IDEsCisJLnN5c19wcmVfZGl2CQk9IDEsCisJLnN5 c19kaXYJCT0gMiwKK307CisKKy8qCisgKiBFWFRDTEsgPSAyNCBNSHoKKyAqIERBQ19DTEsgPSAz NjAgTUh6CisgKiBTQ0xLID0gMTQ0IE1IegorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y4 ODY1X3BsbDJfY29uZmlnIG92ODg2NV9wbGwyX2NvbmZpZ19uYXRpdmUgPSB7CisJLnBsbF9wcmVf ZGl2X2hhbGYJPSAxLAorCS5wbGxfcHJlX2RpdgkJPSAwLAorCS5wbGxfbXVsCQk9IDMwLAorCS5k YWNfZGl2CQk9IDIsCisJLnN5c19wcmVfZGl2CQk9IDUsCisJLnN5c19kaXYJCT0gMCwKK307CisK Ky8qCisgKiBFWFRDTEsgPSAyNCBNSHoKKyAqIERBQ19DTEsgPSAzNjAgTUh6CisgKiBTQ0xLID0g ODAgTUh6CisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvdjg4NjVfcGxsMl9jb25maWcgb3Y4 ODY1X3BsbDJfY29uZmlnX2Jpbm5pbmcgPSB7CisJLnBsbF9wcmVfZGl2X2hhbGYJPSAxLAorCS5w bGxfcHJlX2RpdgkJPSAwLAorCS5wbGxfbXVsCQk9IDMwLAorCS5kYWNfZGl2CQk9IDIsCisJLnN5 c19wcmVfZGl2CQk9IDEwLAorCS5zeXNfZGl2CQk9IDAsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG92ODg2NV9zY2xrX2NvbmZpZyBvdjg4NjVfc2Nsa19jb25maWdfbmF0aXZlID0geworCS5z eXNfc2VsCQk9IDEsCisJLnNjbGtfc2VsCQk9IDAsCisJLnNjbGtfcHJlX2RpdgkJPSAwLAorCS5z Y2xrX2RpdgkJPSAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvdjg4NjVfcmVnaXN0ZXJf dmFsdWUgb3Y4ODY1X3JlZ2lzdGVyX3ZhbHVlc19uYXRpdmVbXSA9IHsKKwkvKiBTZW5zb3IgKi8K KworCXsgMHgzNzAwLCAweDQ4IH0sCisJeyAweDM3MDEsIDB4MTggfSwKKwl7IDB4MzcwMiwgMHg1 MCB9LAorCXsgMHgzNzAzLCAweDMyIH0sCisJeyAweDM3MDQsIDB4MjggfSwKKwl7IDB4MzcwNiwg MHg3MCB9LAorCXsgMHgzNzA3LCAweDA4IH0sCisJeyAweDM3MDgsIDB4NDggfSwKKwl7IDB4Mzcw OSwgMHg4MCB9LAorCXsgMHgzNzBhLCAweDAxIH0sCisJeyAweDM3MGIsIDB4NzAgfSwKKwl7IDB4 MzcwYywgMHgwNyB9LAorCXsgMHgzNzE4LCAweDE0IH0sCisJeyAweDM3MTIsIDB4NDQgfSwKKwl7 IDB4MzcxZSwgMHgzMSB9LAorCXsgMHgzNzFmLCAweDdmIH0sCisJeyAweDM3MjAsIDB4MGEgfSwK Kwl7IDB4MzcyMSwgMHgwYSB9LAorCXsgMHgzNzI0LCAweDA0IH0sCisJeyAweDM3MjUsIDB4MDQg fSwKKwl7IDB4MzcyNiwgMHgwYyB9LAorCXsgMHgzNzI4LCAweDBhIH0sCisJeyAweDM3MjksIDB4 MDMgfSwKKwl7IDB4MzcyYSwgMHgwNiB9LAorCXsgMHgzNzJiLCAweGE2IH0sCisJeyAweDM3MmMs IDB4YTYgfSwKKwl7IDB4MzcyZCwgMHhhNiB9LAorCXsgMHgzNzJlLCAweDBjIH0sCisJeyAweDM3 MmYsIDB4MjAgfSwKKwl7IDB4MzczMCwgMHgwMiB9LAorCXsgMHgzNzMxLCAweDBjIH0sCisJeyAw eDM3MzIsIDB4MjggfSwKKwl7IDB4MzczNiwgMHgzMCB9LAorCXsgMHgzNzNhLCAweDA0IH0sCisJ eyAweDM3M2IsIDB4MTggfSwKKwl7IDB4MzczYywgMHgxNCB9LAorCXsgMHgzNzNlLCAweDA2IH0s CisJeyAweDM3NWEsIDB4MGMgfSwKKwl7IDB4Mzc1YiwgMHgyNiB9LAorCXsgMHgzNzVkLCAweDA0 IH0sCisJeyAweDM3NWYsIDB4MjggfSwKKwl7IDB4Mzc2NywgMHgxZSB9LAorCXsgMHgzNzcyLCAw eDQ2IH0sCisJeyAweDM3NzMsIDB4MDQgfSwKKwl7IDB4Mzc3NCwgMHgyYyB9LAorCXsgMHgzNzc1 LCAweDEzIH0sCisJeyAweDM3NzYsIDB4MTAgfSwKKwl7IDB4MzdhMCwgMHg4OCB9LAorCXsgMHgz N2ExLCAweDdhIH0sCisJeyAweDM3YTIsIDB4N2EgfSwKKwl7IDB4MzdhMywgMHgwMiB9LAorCXsg MHgzN2E1LCAweDA5IH0sCisJeyAweDM3YTcsIDB4ODggfSwKKwl7IDB4MzdhOCwgMHhiMCB9LAor CXsgMHgzN2E5LCAweGIwIH0sCisJeyAweDM3YWEsIDB4ODggfSwKKwl7IDB4MzdhYiwgMHg1YyB9 LAorCXsgMHgzN2FjLCAweDVjIH0sCisJeyAweDM3YWQsIDB4NTUgfSwKKwl7IDB4MzdhZSwgMHgx OSB9LAorCXsgMHgzN2FmLCAweDE5IH0sCisJeyAweDM3YjMsIDB4ODQgfSwKKwl7IDB4MzdiNCwg MHg4NCB9LAorCXsgMHgzN2I1LCAweDY2IH0sCisKKwkvKiBQU1JBTSAqLworCisJeyBPVjg4NjVf UFNSQU1fQ1RSTDhfUkVHLCAweDE2IH0sCisKKwkvKiBBREMgU3luYyAqLworCisJeyAweDQ1MDAs IDB4NjggfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y4ODY1X3JlZ2lzdGVyX3ZhbHVl IG92ODg2NV9yZWdpc3Rlcl92YWx1ZXNfYmlubmluZ1tdID0geworCS8qIFNlbnNvciAqLworCisJ eyAweDM3MDAsIDB4MjQgfSwKKwl7IDB4MzcwMSwgMHgwYyB9LAorCXsgMHgzNzAyLCAweDI4IH0s CisJeyAweDM3MDMsIDB4MTkgfSwKKwl7IDB4MzcwNCwgMHgxNCB9LAorCXsgMHgzNzA2LCAweDM4 IH0sCisJeyAweDM3MDcsIDB4MDQgfSwKKwl7IDB4MzcwOCwgMHgyNCB9LAorCXsgMHgzNzA5LCAw eDQwIH0sCisJeyAweDM3MGEsIDB4MDAgfSwKKwl7IDB4MzcwYiwgMHhiOCB9LAorCXsgMHgzNzBj LCAweDA0IH0sCisJeyAweDM3MTgsIDB4MTIgfSwKKwl7IDB4MzcxMiwgMHg0MiB9LAorCXsgMHgz NzFlLCAweDE5IH0sCisJeyAweDM3MWYsIDB4NDAgfSwKKwl7IDB4MzcyMCwgMHgwNSB9LAorCXsg MHgzNzIxLCAweDA1IH0sCisJeyAweDM3MjQsIDB4MDIgfSwKKwl7IDB4MzcyNSwgMHgwMiB9LAor CXsgMHgzNzI2LCAweDA2IH0sCisJeyAweDM3MjgsIDB4MDUgfSwKKwl7IDB4MzcyOSwgMHgwMiB9 LAorCXsgMHgzNzJhLCAweDAzIH0sCisJeyAweDM3MmIsIDB4NTMgfSwKKwl7IDB4MzcyYywgMHhh MyB9LAorCXsgMHgzNzJkLCAweDUzIH0sCisJeyAweDM3MmUsIDB4MDYgfSwKKwl7IDB4MzcyZiwg MHgxMCB9LAorCXsgMHgzNzMwLCAweDAxIH0sCisJeyAweDM3MzEsIDB4MDYgfSwKKwl7IDB4Mzcz MiwgMHgxNCB9LAorCXsgMHgzNzM2LCAweDIwIH0sCisJeyAweDM3M2EsIDB4MDIgfSwKKwl7IDB4 MzczYiwgMHgwYyB9LAorCXsgMHgzNzNjLCAweDBhIH0sCisJeyAweDM3M2UsIDB4MDMgfSwKKwl7 IDB4Mzc1YSwgMHgwNiB9LAorCXsgMHgzNzViLCAweDEzIH0sCisJeyAweDM3NWQsIDB4MDIgfSwK Kwl7IDB4Mzc1ZiwgMHgxNCB9LAorCXsgMHgzNzY3LCAweDFjIH0sCisJeyAweDM3NzIsIDB4MjMg fSwKKwl7IDB4Mzc3MywgMHgwMiB9LAorCXsgMHgzNzc0LCAweDE2IH0sCisJeyAweDM3NzUsIDB4 MTIgfSwKKwl7IDB4Mzc3NiwgMHgwOCB9LAorCXsgMHgzN2EwLCAweDQ0IH0sCisJeyAweDM3YTEs IDB4M2QgfSwKKwl7IDB4MzdhMiwgMHgzZCB9LAorCXsgMHgzN2EzLCAweDAxIH0sCisJeyAweDM3 YTUsIDB4MDggfSwKKwl7IDB4MzdhNywgMHg0NCB9LAorCXsgMHgzN2E4LCAweDU4IH0sCisJeyAw eDM3YTksIDB4NTggfSwKKwl7IDB4MzdhYSwgMHg0NCB9LAorCXsgMHgzN2FiLCAweDJlIH0sCisJ eyAweDM3YWMsIDB4MmUgfSwKKwl7IDB4MzdhZCwgMHgzMyB9LAorCXsgMHgzN2FlLCAweDBkIH0s CisJeyAweDM3YWYsIDB4MGQgfSwKKwl7IDB4MzdiMywgMHg0MiB9LAorCXsgMHgzN2I0LCAweDQy IH0sCisJeyAweDM3YjUsIDB4MzMgfSwKKworCS8qIFBTUkFNICovCisKKwl7IE9WODg2NV9QU1JB TV9DVFJMOF9SRUcsIDB4MGIgfSwKKworCS8qIEFEQyBTeW5jICovCisKKwl7IDB4NDUwMCwgMHg0 MCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvdjg4NjVfbW9kZSBvdjg4NjVfbW9kZXNb XSA9IHsKKwkvKiAzMjY0eDI0NDggKi8KKwl7CisJCS8qIEhvcml6b250YWwgKi8KKwkJLm91dHB1 dF9zaXplX3gJCQk9IDMyNjQsCisJCS5odHMJCQkJPSAxOTQ0LAorCisJCS8qIFZlcnRpY2FsICov CisJCS5vdXRwdXRfc2l6ZV95CQkJPSAyNDQ4LAorCQkudnRzCQkJCT0gMjQ3MCwKKworCQkuc2l6 ZV9hdXRvCQkJPSB0cnVlLAorCQkuc2l6ZV9hdXRvX2JvdW5kYXJ5X3gJCT0gOCwKKwkJLnNpemVf YXV0b19ib3VuZGFyeV95CQk9IDQsCisKKwkJLyogU3Vic2FtcGxlIGluY3JlYXNlICovCisJCS5p bmNfeF9vZGQJCQk9IDEsCisJCS5pbmNfeF9ldmVuCQkJPSAxLAorCQkuaW5jX3lfb2RkCQkJPSAx LAorCQkuaW5jX3lfZXZlbgkJCT0gMSwKKworCQkvKiBWRklGTyAqLworCQkudmZpZm9fcmVhZF9z dGFydAkJPSAxNiwKKworCQkuYWJsY19udW0JCQk9IDQsCisJCS56bGluZV9udW0JCQk9IDEsCisK KwkJLyogQmxhY2sgTGV2ZWwgKi8KKworCQkuYmxjX3RvcF96ZXJvX2xpbmVfc3RhcnQJPSAwLAor CQkuYmxjX3RvcF96ZXJvX2xpbmVfbnVtCQk9IDIsCisJCS5ibGNfdG9wX2JsYWNrX2xpbmVfc3Rh cnQJPSA0LAorCQkuYmxjX3RvcF9ibGFja19saW5lX251bQkJPSA0LAorCisJCS5ibGNfYm90dG9t X3plcm9fbGluZV9zdGFydAk9IDIsCisJCS5ibGNfYm90dG9tX3plcm9fbGluZV9udW0JPSAyLAor CQkuYmxjX2JvdHRvbV9ibGFja19saW5lX3N0YXJ0CT0gOCwKKwkJLmJsY19ib3R0b21fYmxhY2tf bGluZV9udW0JPSAyLAorCisJCS5ibGNfYW5jaG9yX2xlZnRfc3RhcnQJCT0gNTc2LAorCQkuYmxj X2FuY2hvcl9sZWZ0X2VuZAkJPSA4MzEsCisJCS5ibGNfYW5jaG9yX3JpZ2h0X3N0YXJ0CQk9IDE5 ODQsCisJCS5ibGNfYW5jaG9yX3JpZ2h0X2VuZAkJPSAyMjM5LAorCisJCS8qIEZyYW1lIEludGVy dmFsICovCisJCS5mcmFtZV9pbnRlcnZhbAkJCT0geyAxLCAzMCB9LAorCisJCS8qIFBMTCAqLwor CQkucGxsMV9jb25maWcJCQk9ICZvdjg4NjVfcGxsMV9jb25maWdfbmF0aXZlLAorCQkucGxsMl9j b25maWcJCQk9ICZvdjg4NjVfcGxsMl9jb25maWdfbmF0aXZlLAorCQkuc2Nsa19jb25maWcJCQk9 ICZvdjg4NjVfc2Nsa19jb25maWdfbmF0aXZlLAorCisJCS8qIFJlZ2lzdGVycyAqLworCQkucmVn aXN0ZXJfdmFsdWVzCT0gb3Y4ODY1X3JlZ2lzdGVyX3ZhbHVlc19uYXRpdmUsCisJCS5yZWdpc3Rl cl92YWx1ZXNfY291bnQJPQorCQkJQVJSQVlfU0laRShvdjg4NjVfcmVnaXN0ZXJfdmFsdWVzX25h dGl2ZSksCisJfSwKKwkvKiAzMjY0eDE4MzYgKi8KKwl7CisJCS8qIEhvcml6b250YWwgKi8KKwkJ Lm91dHB1dF9zaXplX3gJCQk9IDMyNjQsCisJCS5odHMJCQkJPSAyNTgyLAorCisJCS8qIFZlcnRp Y2FsICovCisJCS5vdXRwdXRfc2l6ZV95CQkJPSAxODM2LAorCQkudnRzCQkJCT0gMjAwMiwKKwor CQkuc2l6ZV9hdXRvCQkJPSB0cnVlLAorCQkuc2l6ZV9hdXRvX2JvdW5kYXJ5X3gJCT0gOCwKKwkJ LnNpemVfYXV0b19ib3VuZGFyeV95CQk9IDQsCisKKwkJLyogU3Vic2FtcGxlIGluY3JlYXNlICov CisJCS5pbmNfeF9vZGQJCQk9IDEsCisJCS5pbmNfeF9ldmVuCQkJPSAxLAorCQkuaW5jX3lfb2Rk CQkJPSAxLAorCQkuaW5jX3lfZXZlbgkJCT0gMSwKKworCQkvKiBWRklGTyAqLworCQkudmZpZm9f cmVhZF9zdGFydAkJPSAxNiwKKworCQkuYWJsY19udW0JCQk9IDQsCisJCS56bGluZV9udW0JCQk9 IDEsCisKKwkJLyogQmxhY2sgTGV2ZWwgKi8KKworCQkuYmxjX3RvcF96ZXJvX2xpbmVfc3RhcnQJ PSAwLAorCQkuYmxjX3RvcF96ZXJvX2xpbmVfbnVtCQk9IDIsCisJCS5ibGNfdG9wX2JsYWNrX2xp bmVfc3RhcnQJPSA0LAorCQkuYmxjX3RvcF9ibGFja19saW5lX251bQkJPSA0LAorCisJCS5ibGNf Ym90dG9tX3plcm9fbGluZV9zdGFydAk9IDIsCisJCS5ibGNfYm90dG9tX3plcm9fbGluZV9udW0J PSAyLAorCQkuYmxjX2JvdHRvbV9ibGFja19saW5lX3N0YXJ0CT0gOCwKKwkJLmJsY19ib3R0b21f YmxhY2tfbGluZV9udW0JPSAyLAorCisJCS5ibGNfYW5jaG9yX2xlZnRfc3RhcnQJCT0gNTc2LAor CQkuYmxjX2FuY2hvcl9sZWZ0X2VuZAkJPSA4MzEsCisJCS5ibGNfYW5jaG9yX3JpZ2h0X3N0YXJ0 CQk9IDE5ODQsCisJCS5ibGNfYW5jaG9yX3JpZ2h0X2VuZAkJPSAyMjM5LAorCisJCS8qIEZyYW1l IEludGVydmFsICovCisJCS5mcmFtZV9pbnRlcnZhbAkJCT0geyAxLCAzMCB9LAorCisJCS8qIFBM TCAqLworCQkucGxsMV9jb25maWcJCQk9ICZvdjg4NjVfcGxsMV9jb25maWdfbmF0aXZlLAorCQku cGxsMl9jb25maWcJCQk9ICZvdjg4NjVfcGxsMl9jb25maWdfbmF0aXZlLAorCQkuc2Nsa19jb25m aWcJCQk9ICZvdjg4NjVfc2Nsa19jb25maWdfbmF0aXZlLAorCisJCS8qIFJlZ2lzdGVycyAqLwor CQkucmVnaXN0ZXJfdmFsdWVzCT0gb3Y4ODY1X3JlZ2lzdGVyX3ZhbHVlc19uYXRpdmUsCisJCS5y ZWdpc3Rlcl92YWx1ZXNfY291bnQJPQorCQkJQVJSQVlfU0laRShvdjg4NjVfcmVnaXN0ZXJfdmFs dWVzX25hdGl2ZSksCisJfSwKKwkvKiAxNjMyeDEyMjQgKi8KKwl7CisJCS8qIEhvcml6b250YWwg Ki8KKwkJLm91dHB1dF9zaXplX3gJCQk9IDE2MzIsCisJCS5odHMJCQkJPSAxOTIzLAorCisJCS8q IFZlcnRpY2FsICovCisJCS5vdXRwdXRfc2l6ZV95CQkJPSAxMjI0LAorCQkudnRzCQkJCT0gMTI0 OCwKKworCQkuc2l6ZV9hdXRvCQkJPSB0cnVlLAorCQkuc2l6ZV9hdXRvX2JvdW5kYXJ5X3gJCT0g OCwKKwkJLnNpemVfYXV0b19ib3VuZGFyeV95CQk9IDgsCisKKwkJLyogU3Vic2FtcGxlIGluY3Jl YXNlICovCisJCS5pbmNfeF9vZGQJCQk9IDMsCisJCS5pbmNfeF9ldmVuCQkJPSAxLAorCQkuaW5j X3lfb2RkCQkJPSAzLAorCQkuaW5jX3lfZXZlbgkJCT0gMSwKKworCQkvKiBCaW5uaW5nICovCisJ CS5iaW5uaW5nX3kJCQk9IHRydWUsCisJCS5zeW5jX2hiaW4JCQk9IHRydWUsCisKKwkJLyogVkZJ Rk8gKi8KKwkJLnZmaWZvX3JlYWRfc3RhcnQJCT0gMTE2LAorCisJCS5hYmxjX251bQkJCT0gOCwK KwkJLnpsaW5lX251bQkJCT0gMiwKKworCQkvKiBCbGFjayBMZXZlbCAqLworCisJCS5ibGNfdG9w X3plcm9fbGluZV9zdGFydAk9IDAsCisJCS5ibGNfdG9wX3plcm9fbGluZV9udW0JCT0gMiwKKwkJ LmJsY190b3BfYmxhY2tfbGluZV9zdGFydAk9IDQsCisJCS5ibGNfdG9wX2JsYWNrX2xpbmVfbnVt CQk9IDQsCisKKwkJLmJsY19ib3R0b21femVyb19saW5lX3N0YXJ0CT0gMiwKKwkJLmJsY19ib3R0 b21femVyb19saW5lX251bQk9IDIsCisJCS5ibGNfYm90dG9tX2JsYWNrX2xpbmVfc3RhcnQJPSA4 LAorCQkuYmxjX2JvdHRvbV9ibGFja19saW5lX251bQk9IDIsCisKKwkJLmJsY19hbmNob3JfbGVm dF9zdGFydAkJPSAyODgsCisJCS5ibGNfYW5jaG9yX2xlZnRfZW5kCQk9IDQxNSwKKwkJLmJsY19h bmNob3JfcmlnaHRfc3RhcnQJCT0gOTkyLAorCQkuYmxjX2FuY2hvcl9yaWdodF9lbmQJCT0gMTEx OSwKKworCQkvKiBGcmFtZSBJbnRlcnZhbCAqLworCQkuZnJhbWVfaW50ZXJ2YWwJCQk9IHsgMSwg MzAgfSwKKworCQkvKiBQTEwgKi8KKwkJLnBsbDFfY29uZmlnCQkJPSAmb3Y4ODY1X3BsbDFfY29u ZmlnX25hdGl2ZSwKKwkJLnBsbDJfY29uZmlnCQkJPSAmb3Y4ODY1X3BsbDJfY29uZmlnX2Jpbm5p bmcsCisJCS5zY2xrX2NvbmZpZwkJCT0gJm92ODg2NV9zY2xrX2NvbmZpZ19uYXRpdmUsCisKKwkJ LyogUmVnaXN0ZXJzICovCisJCS5yZWdpc3Rlcl92YWx1ZXMJPSBvdjg4NjVfcmVnaXN0ZXJfdmFs dWVzX2Jpbm5pbmcsCisJCS5yZWdpc3Rlcl92YWx1ZXNfY291bnQJPQorCQkJQVJSQVlfU0laRShv djg4NjVfcmVnaXN0ZXJfdmFsdWVzX2Jpbm5pbmcpLAorCX0sCisJLyogODAweDYwMCAoU1ZHQSkg Ki8KKwl7CisJCS8qIEhvcml6b250YWwgKi8KKwkJLm91dHB1dF9zaXplX3gJCQk9IDgwMCwKKwkJ Lmh0cwkJCQk9IDEyNTAsCisKKwkJLyogVmVydGljYWwgKi8KKwkJLm91dHB1dF9zaXplX3kJCQk9 IDYwMCwKKwkJLnZ0cwkJCQk9IDY0MCwKKworCQkuc2l6ZV9hdXRvCQkJPSB0cnVlLAorCQkuc2l6 ZV9hdXRvX2JvdW5kYXJ5X3gJCT0gOCwKKwkJLnNpemVfYXV0b19ib3VuZGFyeV95CQk9IDgsCisK KwkJLyogU3Vic2FtcGxlIGluY3JlYXNlICovCisJCS5pbmNfeF9vZGQJCQk9IDMsCisJCS5pbmNf eF9ldmVuCQkJPSAxLAorCQkuaW5jX3lfb2RkCQkJPSA1LAorCQkuaW5jX3lfZXZlbgkJCT0gMywK KworCQkvKiBCaW5uaW5nICovCisJCS5iaW5uaW5nX3kJCQk9IHRydWUsCisJCS52YXJpb3BpeGVs CQkJPSB0cnVlLAorCQkudmFyaW9waXhlbF9oc3ViX2NvZWYJCT0gMiwKKwkJLnZhcmlvcGl4ZWxf dnN1Yl9jb2VmCQk9IDEsCisJCS5zeW5jX2hiaW4JCQk9IHRydWUsCisJCS5ob3J6X3ZhcjIJCQk9 IHRydWUsCisKKwkJLyogVkZJRk8gKi8KKwkJLnZmaWZvX3JlYWRfc3RhcnQJCT0gODAsCisKKwkJ LmFibGNfbnVtCQkJPSA4LAorCQkuemxpbmVfbnVtCQkJPSAyLAorCisJCS8qIEJsYWNrIExldmVs ICovCisKKwkJLmJsY190b3BfemVyb19saW5lX3N0YXJ0CT0gMCwKKwkJLmJsY190b3BfemVyb19s aW5lX251bQkJPSAyLAorCQkuYmxjX3RvcF9ibGFja19saW5lX3N0YXJ0CT0gMiwKKwkJLmJsY190 b3BfYmxhY2tfbGluZV9udW0JCT0gMiwKKworCQkuYmxjX2JvdHRvbV96ZXJvX2xpbmVfc3RhcnQJ PSAwLAorCQkuYmxjX2JvdHRvbV96ZXJvX2xpbmVfbnVtCT0gMCwKKwkJLmJsY19ib3R0b21fYmxh Y2tfbGluZV9zdGFydAk9IDQsCisJCS5ibGNfYm90dG9tX2JsYWNrX2xpbmVfbnVtCT0gMiwKKwor CQkuYmxjX2NvbF9zaGlmdF9tYXNrCT0gT1Y4ODY1X0JMQ19DVFJMMV9DT0xfU0hJRlRfMTI4LAor CisJCS5ibGNfYW5jaG9yX2xlZnRfc3RhcnQJCT0gMjg4LAorCQkuYmxjX2FuY2hvcl9sZWZ0X2Vu ZAkJPSA0MTUsCisJCS5ibGNfYW5jaG9yX3JpZ2h0X3N0YXJ0CQk9IDk5MiwKKwkJLmJsY19hbmNo b3JfcmlnaHRfZW5kCQk9IDExMTksCisKKwkJLyogRnJhbWUgSW50ZXJ2YWwgKi8KKwkJLmZyYW1l X2ludGVydmFsCQkJPSB7IDEsIDkwIH0sCisKKwkJLyogUExMICovCisJCS5wbGwxX2NvbmZpZwkJ CT0gJm92ODg2NV9wbGwxX2NvbmZpZ19uYXRpdmUsCisJCS5wbGwyX2NvbmZpZwkJCT0gJm92ODg2 NV9wbGwyX2NvbmZpZ19iaW5uaW5nLAorCQkuc2Nsa19jb25maWcJCQk9ICZvdjg4NjVfc2Nsa19j b25maWdfbmF0aXZlLAorCisJCS8qIFJlZ2lzdGVycyAqLworCQkucmVnaXN0ZXJfdmFsdWVzCT0g b3Y4ODY1X3JlZ2lzdGVyX3ZhbHVlc19iaW5uaW5nLAorCQkucmVnaXN0ZXJfdmFsdWVzX2NvdW50 CT0KKwkJCUFSUkFZX1NJWkUob3Y4ODY1X3JlZ2lzdGVyX3ZhbHVlc19iaW5uaW5nKSwKKwl9LAor fTsKKworc3RhdGljIGNvbnN0IHUzMiBvdjg4NjVfbWJ1c19jb2Rlc1tdID0geworCU1FRElBX0JV U19GTVRfU0JHR1IxMF8xWDEwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvdjg4NjVfcmVn aXN0ZXJfdmFsdWUgb3Y4ODY1X2luaXRfc2VxdWVuY2VbXSA9IHsKKwkvKiBBbmFsb2cgKi8KKwor CXsgMHgzNjA0LCAweDA0IH0sCisJeyAweDM2MDIsIDB4MzAgfSwKKwl7IDB4MzYwNSwgMHgwMCB9 LAorCXsgMHgzNjA3LCAweDIwIH0sCisJeyAweDM2MDgsIDB4MTEgfSwKKwl7IDB4MzYwOSwgMHg2 OCB9LAorCXsgMHgzNjBhLCAweDQwIH0sCisJeyAweDM2MGMsIDB4ZGQgfSwKKwl7IDB4MzYwZSwg MHgwYyB9LAorCXsgMHgzNjEwLCAweDA3IH0sCisJeyAweDM2MTIsIDB4ODYgfSwKKwl7IDB4MzYx MywgMHg1OCB9LAorCXsgMHgzNjE0LCAweDI4IH0sCisJeyAweDM2MTcsIDB4NDAgfSwKKwl7IDB4 MzYxOCwgMHg1YSB9LAorCXsgMHgzNjE5LCAweDliIH0sCisJeyAweDM2MWMsIDB4MDAgfSwKKwl7 IDB4MzYxZCwgMHg2MCB9LAorCXsgMHgzNjMxLCAweDYwIH0sCisJeyAweDM2MzMsIDB4MTAgfSwK Kwl7IDB4MzYzNCwgMHgxMCB9LAorCXsgMHgzNjM1LCAweDEwIH0sCisJeyAweDM2MzYsIDB4MTAg fSwKKwl7IDB4MzYzOCwgMHhmZiB9LAorCXsgMHgzNjQxLCAweDU1IH0sCisJeyAweDM2NDYsIDB4 ODYgfSwKKwl7IDB4MzY0NywgMHgyNyB9LAorCXsgMHgzNjRhLCAweDFiIH0sCisKKwkvKiBTZW5z b3IgKi8KKworCXsgMHgzNzAwLCAweDI0IH0sCisJeyAweDM3MDEsIDB4MGMgfSwKKwl7IDB4Mzcw MiwgMHgyOCB9LAorCXsgMHgzNzAzLCAweDE5IH0sCisJeyAweDM3MDQsIDB4MTQgfSwKKwl7IDB4 MzcwNSwgMHgwMCB9LAorCXsgMHgzNzA2LCAweDM4IH0sCisJeyAweDM3MDcsIDB4MDQgfSwKKwl7 IDB4MzcwOCwgMHgyNCB9LAorCXsgMHgzNzA5LCAweDQwIH0sCisJeyAweDM3MGEsIDB4MDAgfSwK Kwl7IDB4MzcwYiwgMHhiOCB9LAorCXsgMHgzNzBjLCAweDA0IH0sCisJeyAweDM3MTgsIDB4MTIg fSwKKwl7IDB4MzcxOSwgMHgzMSB9LAorCXsgMHgzNzEyLCAweDQyIH0sCisJeyAweDM3MTQsIDB4 MTIgfSwKKwl7IDB4MzcxZSwgMHgxOSB9LAorCXsgMHgzNzFmLCAweDQwIH0sCisJeyAweDM3MjAs IDB4MDUgfSwKKwl7IDB4MzcyMSwgMHgwNSB9LAorCXsgMHgzNzI0LCAweDAyIH0sCisJeyAweDM3 MjUsIDB4MDIgfSwKKwl7IDB4MzcyNiwgMHgwNiB9LAorCXsgMHgzNzI4LCAweDA1IH0sCisJeyAw eDM3MjksIDB4MDIgfSwKKwl7IDB4MzcyYSwgMHgwMyB9LAorCXsgMHgzNzJiLCAweDUzIH0sCisJ eyAweDM3MmMsIDB4YTMgfSwKKwl7IDB4MzcyZCwgMHg1MyB9LAorCXsgMHgzNzJlLCAweDA2IH0s CisJeyAweDM3MmYsIDB4MTAgfSwKKwl7IDB4MzczMCwgMHgwMSB9LAorCXsgMHgzNzMxLCAweDA2 IH0sCisJeyAweDM3MzIsIDB4MTQgfSwKKwl7IDB4MzczMywgMHgxMCB9LAorCXsgMHgzNzM0LCAw eDQwIH0sCisJeyAweDM3MzYsIDB4MjAgfSwKKwl7IDB4MzczYSwgMHgwMiB9LAorCXsgMHgzNzNi LCAweDBjIH0sCisJeyAweDM3M2MsIDB4MGEgfSwKKwl7IDB4MzczZSwgMHgwMyB9LAorCXsgMHgz NzU1LCAweDQwIH0sCisJeyAweDM3NTgsIDB4MDAgfSwKKwl7IDB4Mzc1OSwgMHg0YyB9LAorCXsg MHgzNzVhLCAweDA2IH0sCisJeyAweDM3NWIsIDB4MTMgfSwKKwl7IDB4Mzc1YywgMHg0MCB9LAor CXsgMHgzNzVkLCAweDAyIH0sCisJeyAweDM3NWUsIDB4MDAgfSwKKwl7IDB4Mzc1ZiwgMHgxNCB9 LAorCXsgMHgzNzY3LCAweDFjIH0sCisJeyAweDM3NjgsIDB4MDQgfSwKKwl7IDB4Mzc2OSwgMHgy MCB9LAorCXsgMHgzNzZjLCAweGMwIH0sCisJeyAweDM3NmQsIDB4YzAgfSwKKwl7IDB4Mzc2YSwg MHgwOCB9LAorCXsgMHgzNzYxLCAweDAwIH0sCisJeyAweDM3NjIsIDB4MDAgfSwKKwl7IDB4Mzc2 MywgMHgwMCB9LAorCXsgMHgzNzY2LCAweGZmIH0sCisJeyAweDM3NmIsIDB4NDIgfSwKKwl7IDB4 Mzc3MiwgMHgyMyB9LAorCXsgMHgzNzczLCAweDAyIH0sCisJeyAweDM3NzQsIDB4MTYgfSwKKwl7 IDB4Mzc3NSwgMHgxMiB9LAorCXsgMHgzNzc2LCAweDA4IH0sCisJeyAweDM3YTAsIDB4NDQgfSwK Kwl7IDB4MzdhMSwgMHgzZCB9LAorCXsgMHgzN2EyLCAweDNkIH0sCisJeyAweDM3YTMsIDB4MDEg fSwKKwl7IDB4MzdhNCwgMHgwMCB9LAorCXsgMHgzN2E1LCAweDA4IH0sCisJeyAweDM3YTYsIDB4 MDAgfSwKKwl7IDB4MzdhNywgMHg0NCB9LAorCXsgMHgzN2E4LCAweDU4IH0sCisJeyAweDM3YTks IDB4NTggfSwKKwl7IDB4Mzc2MCwgMHgwMCB9LAorCXsgMHgzNzZmLCAweDAxIH0sCisJeyAweDM3 YWEsIDB4NDQgfSwKKwl7IDB4MzdhYiwgMHgyZSB9LAorCXsgMHgzN2FjLCAweDJlIH0sCisJeyAw eDM3YWQsIDB4MzMgfSwKKwl7IDB4MzdhZSwgMHgwZCB9LAorCXsgMHgzN2FmLCAweDBkIH0sCisJ eyAweDM3YjAsIDB4MDAgfSwKKwl7IDB4MzdiMSwgMHgwMCB9LAorCXsgMHgzN2IyLCAweDAwIH0s CisJeyAweDM3YjMsIDB4NDIgfSwKKwl7IDB4MzdiNCwgMHg0MiB9LAorCXsgMHgzN2I1LCAweDMz IH0sCisJeyAweDM3YjYsIDB4MDAgfSwKKwl7IDB4MzdiNywgMHgwMCB9LAorCXsgMHgzN2I4LCAw eDAwIH0sCisJeyAweDM3YjksIDB4ZmYgfSwKKworCS8qIEFEQyBTeW5jICovCisKKwl7IDB4NDUw MywgMHgxMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHM2NCBvdjg4NjVfbGlua19mcmVxX21lbnVb XSA9IHsKKwkzNjAwMDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgb3Y4ODY1 X3Rlc3RfcGF0dGVybl9tZW51W10gPSB7CisJIkRpc2FibGVkIiwKKwkiUmFuZG9tIGRhdGEiLAor CSJDb2xvciBiYXJzIiwKKwkiQ29sb3IgYmFycyB3aXRoIHJvbGxpbmcgYmFyIiwKKwkiQ29sb3Ig c3F1YXJlcyIsCisJIkNvbG9yIHNxdWFyZXMgd2l0aCByb2xsaW5nIGJhciIKK307CisKK3N0YXRp YyBjb25zdCB1OCBvdjg4NjVfdGVzdF9wYXR0ZXJuX2JpdHNbXSA9IHsKKwkwLAorCU9WODg2NV9Q UkVfQ1RSTDBfUEFUVEVSTl9FTiB8IE9WODg2NV9QUkVfQ1RSTDBfUEFUVEVSTl9SQU5ET01fREFU QSwKKwlPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fRU4gfCBPVjg4NjVfUFJFX0NUUkwwX1BBVFRF Uk5fQ09MT1JfQkFSUywKKwlPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fRU4gfCBPVjg4NjVfUFJF X0NUUkwwX1JPTExJTkdfQkFSX0VOIHwKKwlPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fQ09MT1Jf QkFSUywKKwlPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fRU4gfCBPVjg4NjVfUFJFX0NUUkwwX1BB VFRFUk5fQ09MT1JfU1FVQVJFUywKKwlPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5fRU4gfCBPVjg4 NjVfUFJFX0NUUkwwX1JPTExJTkdfQkFSX0VOIHwKKwlPVjg4NjVfUFJFX0NUUkwwX1BBVFRFUk5f Q09MT1JfU1FVQVJFUywKK307CisKKy8qIElucHV0L091dHB1dCAqLworCitzdGF0aWMgaW50IG92 ODg2NV9yZWFkKHN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IsIHUxNiBhZGRyZXNzLCB1OCAq dmFsdWUpCit7CisJdW5zaWduZWQgY2hhciBkYXRhWzJdID0geyBhZGRyZXNzID4+IDgsIGFkZHJl c3MgJiAweGZmIH07CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNlbnNvci0+aTJjX2Ns aWVudDsKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwg c2l6ZW9mKGRhdGEpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwg ImkyYyBzZW5kIGVycm9yIGF0IGFkZHJlc3MgJSMwNHhcbiIsCisJCQlhZGRyZXNzKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCB2YWx1ZSwgMSk7 CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJpMmMgcmVjdiBlcnJv ciBhdCBhZGRyZXNzICUjMDR4XG4iLAorCQkJYWRkcmVzcyk7CisJCXJldHVybiByZXQ7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1X3dyaXRlKHN0cnVjdCBvdjg4NjVf c2Vuc29yICpzZW5zb3IsIHUxNiBhZGRyZXNzLCB1OCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFy IGRhdGFbM10gPSB7IGFkZHJlc3MgPj4gOCwgYWRkcmVzcyAmIDB4ZmYsIHZhbHVlIH07CisJc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNlbnNvci0+aTJjX2NsaWVudDsKKwlpbnQgcmV0Owor CisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwlp ZiAocmV0IDwgMCkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImkyYyBzZW5kIGVycm9yIGF0 IGFkZHJlc3MgJSMwNHhcbiIsCisJCQlhZGRyZXNzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjg4NjVfd3JpdGVfc2VxdWVuY2Uoc3RydWN0IG92 ODg2NV9zZW5zb3IgKnNlbnNvciwKKwkJCQkgY29uc3Qgc3RydWN0IG92ODg2NV9yZWdpc3Rlcl92 YWx1ZSAqc2VxdWVuY2UsCisJCQkJIHVuc2lnbmVkIGludCBzZXF1ZW5jZV9jb3VudCkKK3sKKwl1 bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzZXF1ZW5j ZV9jb3VudDsgaSsrKSB7CisJCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIHNlcXVlbmNlW2ld LmFkZHJlc3MsCisJCQkJICAgc2VxdWVuY2VbaV0udmFsdWUpOworCQlpZiAocmV0KQorCQkJYnJl YWs7CisKKwkJaWYgKHNlcXVlbmNlW2ldLmRlbGF5X21zKQorCQkJbXNsZWVwKHNlcXVlbmNlW2ld LmRlbGF5X21zKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92ODg2NV91 cGRhdGVfYml0cyhzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yLCB1MTYgYWRkcmVzcywKKwkJ CSAgICAgIHU4IG1hc2ssIHU4IGJpdHMpCit7CisJdTggdmFsdWUgPSAwOworCWludCByZXQ7CisK KwlyZXQgPSBvdjg4NjVfcmVhZChzZW5zb3IsIGFkZHJlc3MsICZ2YWx1ZSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXZhbHVlICY9IH5tYXNrOworCXZhbHVlIHw9IGJpdHM7CisKKwly ZXR1cm4gb3Y4ODY1X3dyaXRlKHNlbnNvciwgYWRkcmVzcywgdmFsdWUpOworfQorCisvKiBTZW5z b3IgKi8KKworc3RhdGljIGludCBvdjg4NjVfc3dfcmVzZXQoc3RydWN0IG92ODg2NV9zZW5zb3Ig KnNlbnNvcikKK3sKKwlyZXR1cm4gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1NXX1JFU0VU X1JFRywgT1Y4ODY1X1NXX1JFU0VUX1JFU0VUKTsKK30KKworc3RhdGljIGludCBvdjg4NjVfc3df c3RhbmRieShzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yLCBpbnQgc3RhbmRieSkKK3sKKwl1 OCB2YWx1ZSA9IDA7CisKKwlpZiAoIXN0YW5kYnkpCisJCXZhbHVlID0gT1Y4ODY1X1NXX1NUQU5E QllfU1RSRUFNX09OOworCisJcmV0dXJuIG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9TV19T VEFOREJZX1JFRywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IG92ODg2NV9jaGlwX2lkX2NoZWNr KHN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IpCit7CisJdTE2IHJlZ3NbXSA9IHsgT1Y4ODY1 X0NISVBfSURfSEhfUkVHLCBPVjg4NjVfQ0hJUF9JRF9IX1JFRywKKwkJICAgICAgIE9WODg2NV9D SElQX0lEX0xfUkVHIH07CisJdTggdmFsdWVzW10gPSB7IE9WODg2NV9DSElQX0lEX0hIX1ZBTFVF LCBPVjg4NjVfQ0hJUF9JRF9IX1ZBTFVFLAorCQkJT1Y4ODY1X0NISVBfSURfTF9WQUxVRSB9Owor CXVuc2lnbmVkIGludCBpOworCXU4IHZhbHVlOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShyZWdzKTsgaSsrKSB7CisJCXJldCA9IG92ODg2NV9yZWFkKHNlbnNvciwg cmVnc1tpXSwgJnZhbHVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlm ICh2YWx1ZSAhPSB2YWx1ZXNbaV0pIHsKKwkJCWRldl9lcnIoc2Vuc29yLT5kZXYsCisJCQkJImNo aXAgaWQgdmFsdWUgbWlzbWF0Y2g6ICUjeCBpbnN0ZWFkIG9mICUjeFxuIiwKKwkJCQl2YWx1ZSwg dmFsdWVzW2ldKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgb3Y4ODY1X2NoYXJnZV9wdW1wX2NvbmZpZ3VyZShzdHJ1Y3Qgb3Y4ODY1 X3NlbnNvciAqc2Vuc29yKQoreworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVf UFVNUF9DTEtfRElWX1JFRywKKwkJCSAgICBPVjg4NjVfUFVNUF9DTEtfRElWX1BVTVBfUCgxKSk7 Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1X21pcGlfY29uZmlndXJlKHN0cnVjdCBvdjg4NjVfc2Vu c29yICpzZW5zb3IpCit7CisJc3RydWN0IHY0bDJfZndub2RlX2J1c19taXBpX2NzaTIgKmJ1c19t aXBpX2NzaTIgPQorCQkmc2Vuc29yLT5lbmRwb2ludC5idXMubWlwaV9jc2kyOworCXVuc2lnbmVk IGludCBsYW5lc19jb3VudCA9IGJ1c19taXBpX2NzaTItPm51bV9kYXRhX2xhbmVzOworCWludCBy ZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfTUlQSV9TQ19DVFJMMF9S RUcsCisJCQkgICBPVjg4NjVfTUlQSV9TQ19DVFJMMF9MQU5FUyhsYW5lc19jb3VudCkgfAorCQkJ ICAgT1Y4ODY1X01JUElfU0NfQ1RSTDBfTUlQSV9FTiB8CisJCQkgICBPVjg4NjVfTUlQSV9TQ19D VFJMMF9VTktOT1dOKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gb3Y4ODY1 X3dyaXRlKHNlbnNvciwgT1Y4ODY1X01JUElfU0NfQ1RSTDJfUkVHLAorCQkJICAgT1Y4ODY1X01J UElfU0NfQ1RSTDJfUERfTUlQSV9SU1RfU1lOQyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCWlmIChsYW5lc19jb3VudCA+PSAyKSB7CisJCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3Is IE9WODg2NV9NSVBJX0xBTkVfU0VMMDFfUkVHLAorCQkJCSAgIE9WODg2NV9NSVBJX0xBTkVfU0VM MDFfTEFORTAoMCkgfAorCQkJCSAgIE9WODg2NV9NSVBJX0xBTkVfU0VMMDFfTEFORTEoMSkpOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAobGFuZXNfY291bnQgPj0gNCkg eworCQlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfTUlQSV9MQU5FX1NFTDIzX1JF RywKKwkJCQkgICBPVjg4NjVfTUlQSV9MQU5FX1NFTDIzX0xBTkUyKDIpIHwKKwkJCQkgICBPVjg4 NjVfTUlQSV9MQU5FX1NFTDIzX0xBTkUzKDMpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7 CisJfQorCisJcmV0ID0gb3Y4ODY1X3VwZGF0ZV9iaXRzKHNlbnNvciwgT1Y4ODY1X0NMS19TRUwx X1JFRywKKwkJCQkgT1Y4ODY1X0NMS19TRUwxX01JUElfRU9GLAorCQkJCSBPVjg4NjVfQ0xLX1NF TDFfTUlQSV9FT0YpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIFRoaXMg dmFsdWUgbWlnaHQgbmVlZCB0byBjaGFuZ2UgZGVwZW5kaW5nIG9uIFBDTEsgcmF0ZSwKKwkgKiBi dXQgaXQncyB1bmNsZWFyIGhvdy4gVGhpcyB2YWx1ZSBzZWVtcyB0byBnZW5lcmFsbHkgd29yawor CSAqIHdoaWxlIHRoZSBkZWZhdWx0IHZhbHVlIHdhcyBmb3VuZCB0byBjYXVzZSB0cmFuc21pc3Np b24gZXJyb3JzLgorCSAqLworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfTUlQ SV9QQ0xLX1BFUklPRF9SRUcsIDB4MTYpOworfQorCitzdGF0aWMgaW50IG92ODg2NV9ibGFja19s ZXZlbF9jb25maWd1cmUoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvcikKK3sKKwlpbnQgcmV0 OworCisJLyogVHJpZ2dlciBCTEMgb24gcmVsZXZhbnQgZXZlbnRzIGFuZCBlbmFibGUgZmlsdGVy LiAqLworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9CTENfQ1RSTDBfUkVHLAor CQkJICAgT1Y4ODY1X0JMQ19DVFJMMF9UUklHX1JBTkdFX0VOIHwKKwkJCSAgIE9WODg2NV9CTENf Q1RSTDBfVFJJR19GT1JNQVRfRU4gfAorCQkJICAgT1Y4ODY1X0JMQ19DVFJMMF9UUklHX0dBSU5f RU4gfAorCQkJICAgT1Y4ODY1X0JMQ19DVFJMMF9UUklHX0VYUE9TVVJFX0VOIHwKKwkJCSAgIE9W ODg2NV9CTENfQ1RSTDBfRklMVEVSX0VOKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ LyogTG93ZXIgQkxDIG9mZnNldCB0cmlnZ2VyIHRocmVzaG9sZC4gKi8KKwlyZXQgPSBvdjg4NjVf d3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxDX0NUUkxEX1JFRywKKwkJCSAgIE9WODg2NV9CTENfQ1RS TERfT0ZGU0VUX1RSSUdHRVIoMTYpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0JMQ19DVFJMMUZfUkVHLCAwKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogSW5jcmVhc2UgQkxDIG9mZnNldCBtYXhpbXVtIGxp bWl0LiAqLworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxDX09GRlNFVF9M SU1JVF9SRUcsCisJCQkgICAgT1Y4ODY1X0JMQ19PRkZTRVRfTElNSVQoNjMpKTsKK30KKworc3Rh dGljIGludCBvdjg4NjVfaXNwX2NvbmZpZ3VyZShzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29y KQoreworCWludCByZXQ7CisKKwkvKiBEaXNhYmxlIGxlbnMgY29ycmVjdGlvbi4gKi8KKwlyZXQg PSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfSVNQX0NUUkwwX1JFRywKKwkJCSAgIE9WODg2 NV9JU1BfQ1RSTDBfV0hJVEVfQkFMQU5DRV9FTiB8CisJCQkgICBPVjg4NjVfSVNQX0NUUkwwX0RQ Q19CTEFDS19FTiB8CisJCQkgICBPVjg4NjVfSVNQX0NUUkwwX0RQQ19XSElURV9FTik7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4 NjVfSVNQX0NUUkwxX1JFRywKKwkJCSAgICBPVjg4NjVfSVNQX0NUUkwxX0JMQ19FTik7Cit9CisK K3N0YXRpYyB1bnNpZ25lZCBsb25nIG92ODg2NV9tb2RlX3BsbDFfcmF0ZShzdHJ1Y3Qgb3Y4ODY1 X3NlbnNvciAqc2Vuc29yLAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgb3Y4ODY1X21vZGUgKm1vZGUp Cit7CisJY29uc3Qgc3RydWN0IG92ODg2NV9wbGwxX2NvbmZpZyAqY29uZmlnID0gbW9kZS0+cGxs MV9jb25maWc7CisJdW5zaWduZWQgbG9uZyBleHRjbGtfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIHBs bDFfcmF0ZTsKKworCWV4dGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHNlbnNvci0+ZXh0Y2xrKTsK KwlwbGwxX3JhdGUgPSBleHRjbGtfcmF0ZSAqIGNvbmZpZy0+cGxsX211bCAvIGNvbmZpZy0+cGxs X3ByZV9kaXZfaGFsZjsKKworCXN3aXRjaCAoY29uZmlnLT5wbGxfcHJlX2RpdikgeworCWNhc2Ug MDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwbGwxX3JhdGUgKj0gMzsKKwkJcGxsMV9yYXRlIC89 IDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcGxsMV9yYXRlICo9IDU7CisJCXBsbDFfcmF0ZSAv PSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXBsbDFfcmF0ZSAvPSAzOworCQlicmVhazsKKwlj YXNlIDU6CisJCXBsbDFfcmF0ZSAvPSA0OworCQlicmVhazsKKwljYXNlIDc6CisJCXBsbDFfcmF0 ZSAvPSA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwbGwxX3JhdGUgLz0gY29uZmlnLT5wbGxf cHJlX2RpdjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHBsbDFfcmF0ZTsKK30KKworc3RhdGlj IGludCBvdjg4NjVfbW9kZV9wbGwxX2NvbmZpZ3VyZShzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vu c29yLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdjg4NjVfbW9kZSAqbW9kZSwKKwkJCQkgICAg ICB1MzIgbWJ1c19jb2RlKQoreworCWNvbnN0IHN0cnVjdCBvdjg4NjVfcGxsMV9jb25maWcgKmNv bmZpZyA9IG1vZGUtPnBsbDFfY29uZmlnOworCXU4IHZhbHVlOworCWludCByZXQ7CisKKwlzd2l0 Y2ggKG1idXNfY29kZSkgeworCWNhc2UgTUVESUFfQlVTX0ZNVF9TQkdHUjEwXzFYMTA6CisJCXZh bHVlID0gT1Y4ODY1X01JUElfQklUX1NFTCgxMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9N SVBJX0JJVF9TRUxfUkVHLCB2YWx1ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJl dCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9QTExfQ1RSTEFfUkVHLAorCQkJICAgT1Y4 ODY1X1BMTF9DVFJMQV9QUkVfRElWX0hBTEYoY29uZmlnLT5wbGxfcHJlX2Rpdl9oYWxmKSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9W ODg2NV9QTExfQ1RSTDBfUkVHLAorCQkJICAgT1Y4ODY1X1BMTF9DVFJMMF9QUkVfRElWKGNvbmZp Zy0+cGxsX3ByZV9kaXYpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gb3Y4 ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1BMTF9DVFJMMV9SRUcsCisJCQkgICBPVjg4NjVfUExM X0NUUkwxX01VTF9IKGNvbmZpZy0+cGxsX211bCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfUExMX0NUUkwyX1JFRywKKwkJ CSAgIE9WODg2NV9QTExfQ1RSTDJfTVVMX0woY29uZmlnLT5wbGxfbXVsKSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9QTExf Q1RSTDNfUkVHLAorCQkJICAgT1Y4ODY1X1BMTF9DVFJMM19NX0RJVihjb25maWctPm1fZGl2KSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3Is IE9WODg2NV9QTExfQ1RSTDRfUkVHLAorCQkJICAgT1Y4ODY1X1BMTF9DVFJMNF9NSVBJX0RJVihj b25maWctPm1pcGlfZGl2KSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92 ODg2NV91cGRhdGVfYml0cyhzZW5zb3IsIE9WODg2NV9QQ0xLX1NFTF9SRUcsCisJCQkgICBPVjg4 NjVfUENMS19TRUxfUENMS19ESVZfTUFTSywKKwkJCSAgIE9WODg2NV9QQ0xLX1NFTF9QQ0xLX0RJ Vihjb25maWctPnBjbGtfZGl2KSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9 IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9QTExfQ1RSTDVfUkVHLAorCQkJICAgT1Y4ODY1 X1BMTF9DVFJMNV9TWVNfUFJFX0RJVihjb25maWctPnN5c19wcmVfZGl2KSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9QTExf Q1RSTDZfUkVHLAorCQkJICAgT1Y4ODY1X1BMTF9DVFJMNl9TWVNfRElWKGNvbmZpZy0+c3lzX2Rp dikpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gb3Y4ODY1X3VwZGF0ZV9i aXRzKHNlbnNvciwgT1Y4ODY1X1BMTF9DVFJMMUVfUkVHLAorCQkJCSAgT1Y4ODY1X1BMTF9DVFJM MUVfUExMMV9OT19MQVQsCisJCQkJICBPVjg4NjVfUExMX0NUUkwxRV9QTEwxX05PX0xBVCk7Cit9 CisKK3N0YXRpYyBpbnQgb3Y4ODY1X21vZGVfcGxsMl9jb25maWd1cmUoc3RydWN0IG92ODg2NV9z ZW5zb3IgKnNlbnNvciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3Y4ODY1X21vZGUgKm1vZGUp Cit7CisJY29uc3Qgc3RydWN0IG92ODg2NV9wbGwyX2NvbmZpZyAqY29uZmlnID0gbW9kZS0+cGxs Ml9jb25maWc7CisJaW50IHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2 NV9QTExfQ1RSTDEyX1JFRywKKwkJCSAgIE9WODg2NV9QTExfQ1RSTDEyX1BSRV9ESVZfSEFMRihj b25maWctPnBsbF9wcmVfZGl2X2hhbGYpIHwKKwkJCSAgIE9WODg2NV9QTExfQ1RSTDEyX0RBQ19E SVYoY29uZmlnLT5kYWNfZGl2KSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9 IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9QTExfQ1RSTEJfUkVHLAorCQkJICAgT1Y4ODY1 X1BMTF9DVFJMQl9QUkVfRElWKGNvbmZpZy0+cGxsX3ByZV9kaXYpKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1BMTF9DVFJM Q19SRUcsCisJCQkgICBPVjg4NjVfUExMX0NUUkxDX01VTF9IKGNvbmZpZy0+cGxsX211bCkpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBP Vjg4NjVfUExMX0NUUkxEX1JFRywKKwkJCSAgIE9WODg2NV9QTExfQ1RSTERfTVVMX0woY29uZmln LT5wbGxfbXVsKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93 cml0ZShzZW5zb3IsIE9WODg2NV9QTExfQ1RSTEZfUkVHLAorCQkJICAgT1Y4ODY1X1BMTF9DVFJM Rl9TWVNfUFJFX0RJVihjb25maWctPnN5c19wcmVfZGl2KSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfUExMX0NUUkxFX1JF RywKKwkJCSAgICBPVjg4NjVfUExMX0NUUkxFX1NZU19ESVYoY29uZmlnLT5zeXNfZGl2KSk7Cit9 CisKK3N0YXRpYyBpbnQgb3Y4ODY1X21vZGVfc2Nsa19jb25maWd1cmUoc3RydWN0IG92ODg2NV9z ZW5zb3IgKnNlbnNvciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3Y4ODY1X21vZGUgKm1vZGUp Cit7CisJY29uc3Qgc3RydWN0IG92ODg2NV9zY2xrX2NvbmZpZyAqY29uZmlnID0gbW9kZS0+c2Ns a19jb25maWc7CisJaW50IHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2 NV9DTEtfU0VMMF9SRUcsCisJCQkgICBPVjg4NjVfQ0xLX1NFTDBfUExMMV9TWVNfU0VMKGNvbmZp Zy0+c3lzX3NlbCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVf dXBkYXRlX2JpdHMoc2Vuc29yLCBPVjg4NjVfQ0xLX1NFTDFfUkVHLAorCQkJCSBPVjg4NjVfQ0xL X1NFTDFfUExMX1NDTEtfU0VMX01BU0ssCisJCQkJIE9WODg2NV9DTEtfU0VMMV9QTExfU0NMS19T RUwoY29uZmlnLT5zY2xrX3NlbCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1 cm4gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1NDTEtfQ1RSTF9SRUcsCisJCQkgICAgT1Y4 ODY1X1NDTEtfQ1RSTF9VTktOT1dOIHwKKwkJCSAgICBPVjg4NjVfU0NMS19DVFJMX1NDTEtfRElW KGNvbmZpZy0+c2Nsa19kaXYpIHwKKwkJCSAgICBPVjg4NjVfU0NMS19DVFJMX1NDTEtfUFJFX0RJ Vihjb25maWctPnNjbGtfcHJlX2RpdikpOworfQorCitzdGF0aWMgaW50IG92ODg2NV9tb2RlX2Jp bm5pbmdfY29uZmlndXJlKHN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IsCisJCQkJCSBjb25z dCBzdHJ1Y3Qgb3Y4ODY1X21vZGUgKm1vZGUpCit7CisJdW5zaWduZWQgaW50IHZhcmlvcGl4ZWxf aHN1Yl9jb2VmLCB2YXJpb3BpeGVsX3ZzdWJfY29lZjsKKwl1OCB2YWx1ZTsKKwlpbnQgcmV0Owor CisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0ZPUk1BVDFfUkVHLCAwKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsdWUgPSBPVjg4NjVfRk9STUFUMl9IU1lOQ19F TjsKKworCWlmIChtb2RlLT5iaW5uaW5nX3gpCisJCXZhbHVlIHw9IE9WODg2NV9GT1JNQVQyX0ZT VF9IQklOX0VOOworCisJaWYgKG1vZGUtPmJpbm5pbmdfeSkKKwkJdmFsdWUgfD0gT1Y4ODY1X0ZP Uk1BVDJfRlNUX1ZCSU5fRU47CisKKwlpZiAobW9kZS0+c3luY19oYmluKQorCQl2YWx1ZSB8PSBP Vjg4NjVfRk9STUFUMl9TWU5DX0hCSU5fRU47CisKKwlpZiAobW9kZS0+aG9yel92YXIyKQorCQl2 YWx1ZSB8PSBPVjg4NjVfRk9STUFUMl9JU1BfSE9SWl9WQVIyX0VOOworCisJcmV0ID0gb3Y4ODY1 X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0ZPUk1BVDJfUkVHLCB2YWx1ZSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV91cGRhdGVfYml0cyhzZW5zb3IsIE9WODg2NV9J U1BfQ1RSTDJfUkVHLAorCQkJCSBPVjg4NjVfSVNQX0NUUkwyX1ZBUklPUElYRUxfRU4sCisJCQkJ IG1vZGUtPnZhcmlvcGl4ZWwgPworCQkJCSBPVjg4NjVfSVNQX0NUUkwyX1ZBUklPUElYRUxfRU4g OiAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG1vZGUtPnZhcmlvcGl4ZWwp IHsKKwkJLyogVmFyaW9QaXhlbCBjb2VmcyBuZWVkcyB0byBiZSA+IDEuICovCisJCXZhcmlvcGl4 ZWxfaHN1Yl9jb2VmID0gbW9kZS0+dmFyaW9waXhlbF9oc3ViX2NvZWY7CisJCXZhcmlvcGl4ZWxf dnN1Yl9jb2VmID0gbW9kZS0+dmFyaW9waXhlbF92c3ViX2NvZWY7CisJfSBlbHNlIHsKKwkJdmFy aW9waXhlbF9oc3ViX2NvZWYgPSAxOworCQl2YXJpb3BpeGVsX3ZzdWJfY29lZiA9IDE7CisJfQor CisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1ZBUF9DVFJMMV9SRUcsCisJCQkg ICBPVjg4NjVfVkFQX0NUUkwxX0hTVUJfQ09FRih2YXJpb3BpeGVsX2hzdWJfY29lZikgfAorCQkJ ICAgT1Y4ODY1X1ZBUF9DVFJMMV9WU1VCX0NPRUYodmFyaW9waXhlbF92c3ViX2NvZWYpKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4 ODY1X0lOQ19YX09ERF9SRUcsCisJCQkgICBPVjg4NjVfSU5DX1hfT0REKG1vZGUtPmluY194X29k ZCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vu c29yLCBPVjg4NjVfSU5DX1hfRVZFTl9SRUcsCisJCQkgICBPVjg4NjVfSU5DX1hfRVZFTihtb2Rl LT5pbmNfeF9ldmVuKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2 NV93cml0ZShzZW5zb3IsIE9WODg2NV9JTkNfWV9PRERfUkVHLAorCQkJICAgT1Y4ODY1X0lOQ19Z X09ERChtb2RlLT5pbmNfeV9vZGQpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 dXJuIG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9JTkNfWV9FVkVOX1JFRywKKwkJCSAgICBP Vjg4NjVfSU5DX1lfRVZFTihtb2RlLT5pbmNfeV9ldmVuKSk7Cit9CisKK3N0YXRpYyBpbnQgb3Y4 ODY1X21vZGVfYmxhY2tfbGV2ZWxfY29uZmlndXJlKHN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5z b3IsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IG92ODg2NV9tb2RlICptb2RlKQoreworCWludCBy ZXQ7CisKKwkvKiBOb3RlIHRoYXQgYSB6ZXJvIHZhbHVlIGZvciBibGNfY29sX3NoaWZ0X21hc2sg aXMgdGhlIGRlZmF1bHQgMjU2LiAqLworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2 NV9CTENfQ1RSTDFfUkVHLAorCQkJICAgbW9kZS0+YmxjX2NvbF9zaGlmdF9tYXNrIHwKKwkJCSAg IE9WODg2NV9CTENfQ1RSTDFfT0ZGU0VUX0xJTUlUX0VOKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJLyogQkxDIHRvcCB6ZXJvIGxpbmUgKi8KKworCXJldCA9IG92ODg2NV93cml0ZShz ZW5zb3IsIE9WODg2NV9CTENfVE9QX1pMSU5FX1NUQVJUX1JFRywKKwkJCSAgIE9WODg2NV9CTENf VE9QX1pMSU5FX1NUQVJUKG1vZGUtPmJsY190b3BfemVyb19saW5lX3N0YXJ0KSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9C TENfVE9QX1pMSU5FX05VTV9SRUcsCisJCQkgICBPVjg4NjVfQkxDX1RPUF9aTElORV9OVU0obW9k ZS0+YmxjX3RvcF96ZXJvX2xpbmVfbnVtKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CS8qIEJMQyB0b3AgYmxhY2sgbGluZSAqLworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwg T1Y4ODY1X0JMQ19UT1BfQkxLTElORV9TVEFSVF9SRUcsCisJCQkgICBPVjg4NjVfQkxDX1RPUF9C TEtMSU5FX1NUQVJUKG1vZGUtPmJsY190b3BfYmxhY2tfbGluZV9zdGFydCkpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxD X1RPUF9CTEtMSU5FX05VTV9SRUcsCisJCQkgICBPVjg4NjVfQkxDX1RPUF9CTEtMSU5FX05VTSht b2RlLT5ibGNfdG9wX2JsYWNrX2xpbmVfbnVtKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCS8qIEJMQyBib3R0b20gemVybyBsaW5lICovCisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vu c29yLCBPVjg4NjVfQkxDX0JPVF9aTElORV9TVEFSVF9SRUcsCisJCQkgICBPVjg4NjVfQkxDX0JP VF9aTElORV9TVEFSVChtb2RlLT5ibGNfYm90dG9tX3plcm9fbGluZV9zdGFydCkpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVf QkxDX0JPVF9aTElORV9OVU1fUkVHLAorCQkJICAgT1Y4ODY1X0JMQ19CT1RfWkxJTkVfTlVNKG1v ZGUtPmJsY19ib3R0b21femVyb19saW5lX251bSkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwkvKiBCTEMgYm90dG9tIGJsYWNrIGxpbmUgKi8KKworCXJldCA9IG92ODg2NV93cml0ZShz ZW5zb3IsIE9WODg2NV9CTENfQk9UX0JMS0xJTkVfU1RBUlRfUkVHLAorCQkJICAgT1Y4ODY1X0JM Q19CT1RfQkxLTElORV9TVEFSVChtb2RlLT5ibGNfYm90dG9tX2JsYWNrX2xpbmVfc3RhcnQpKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwg T1Y4ODY1X0JMQ19CT1RfQkxLTElORV9OVU1fUkVHLAorCQkJICAgT1Y4ODY1X0JMQ19CT1RfQkxL TElORV9OVU0obW9kZS0+YmxjX2JvdHRvbV9ibGFja19saW5lX251bSkpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwkvKiBCTEMgYW5jaG9yICovCisKKwlyZXQgPSBvdjg4NjVfd3JpdGUo c2Vuc29yLCBPVjg4NjVfQkxDX0FOQ0hPUl9MRUZUX1NUQVJUX0hfUkVHLAorCQkJICAgT1Y4ODY1 X0JMQ19BTkNIT1JfTEVGVF9TVEFSVF9IKG1vZGUtPmJsY19hbmNob3JfbGVmdF9zdGFydCkpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBP Vjg4NjVfQkxDX0FOQ0hPUl9MRUZUX1NUQVJUX0xfUkVHLAorCQkJICAgT1Y4ODY1X0JMQ19BTkNI T1JfTEVGVF9TVEFSVF9MKG1vZGUtPmJsY19hbmNob3JfbGVmdF9zdGFydCkpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxD X0FOQ0hPUl9MRUZUX0VORF9IX1JFRywKKwkJCSAgIE9WODg2NV9CTENfQU5DSE9SX0xFRlRfRU5E X0gobW9kZS0+YmxjX2FuY2hvcl9sZWZ0X2VuZCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxDX0FOQ0hPUl9MRUZUX0VO RF9MX1JFRywKKwkJCSAgIE9WODg2NV9CTENfQU5DSE9SX0xFRlRfRU5EX0wobW9kZS0+YmxjX2Fu Y2hvcl9sZWZ0X2VuZCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4 NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9TVEFSVF9IX1JFRywKKwkJ CSAgIE9WODg2NV9CTENfQU5DSE9SX1JJR0hUX1NUQVJUX0gobW9kZS0+YmxjX2FuY2hvcl9yaWdo dF9zdGFydCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3Jp dGUoc2Vuc29yLCBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9TVEFSVF9MX1JFRywKKwkJCSAgIE9W ODg2NV9CTENfQU5DSE9SX1JJR0hUX1NUQVJUX0wobW9kZS0+YmxjX2FuY2hvcl9yaWdodF9zdGFy dCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vu c29yLCBPVjg4NjVfQkxDX0FOQ0hPUl9SSUdIVF9FTkRfSF9SRUcsCisJCQkgICBPVjg4NjVfQkxD X0FOQ0hPUl9SSUdIVF9FTkRfSChtb2RlLT5ibGNfYW5jaG9yX3JpZ2h0X2VuZCkpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1 X0JMQ19BTkNIT1JfUklHSFRfRU5EX0xfUkVHLAorCQkJICAgIE9WODg2NV9CTENfQU5DSE9SX1JJ R0hUX0VORF9MKG1vZGUtPmJsY19hbmNob3JfcmlnaHRfZW5kKSk7Cit9CisKK3N0YXRpYyBpbnQg b3Y4ODY1X21vZGVfY29uZmlndXJlKHN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IsCisJCQkJ IGNvbnN0IHN0cnVjdCBvdjg4NjVfbW9kZSAqbW9kZSwgdTMyIG1idXNfY29kZSkKK3sKKwlpbnQg cmV0OworCisJLyogT3V0cHV0IFNpemUgWCAqLworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNv ciwgT1Y4ODY1X09VVFBVVF9TSVpFX1hfSF9SRUcsCisJCQkgICBPVjg4NjVfT1VUUFVUX1NJWkVf WF9IKG1vZGUtPm91dHB1dF9zaXplX3gpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X09VVFBVVF9TSVpFX1hfTF9SRUcsCisJ CQkgICBPVjg4NjVfT1VUUFVUX1NJWkVfWF9MKG1vZGUtPm91dHB1dF9zaXplX3gpKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogSG9yaXpvbnRhbCBUb3RhbCBTaXplICovCisKKwly ZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfSFRTX0hfUkVHLCBPVjg4NjVfSFRTX0go bW9kZS0+aHRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93 cml0ZShzZW5zb3IsIE9WODg2NV9IVFNfTF9SRUcsIE9WODg2NV9IVFNfTChtb2RlLT5odHMpKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogT3V0cHV0IFNpemUgWSAqLworCisJcmV0 ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X09VVFBVVF9TSVpFX1lfSF9SRUcsCisJCQkg ICBPVjg4NjVfT1VUUFVUX1NJWkVfWV9IKG1vZGUtPm91dHB1dF9zaXplX3kpKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X09V VFBVVF9TSVpFX1lfTF9SRUcsCisJCQkgICBPVjg4NjVfT1VUUFVUX1NJWkVfWV9MKG1vZGUtPm91 dHB1dF9zaXplX3kpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVmVydGljYWwg VG90YWwgU2l6ZSAqLworCisJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X1ZUU19I X1JFRywgT1Y4ODY1X1ZUU19IKG1vZGUtPnZ0cykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfVlRTX0xfUkVHLCBPVjg4NjVf VlRTX0wobW9kZS0+dnRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChtb2Rl LT5zaXplX2F1dG8pIHsKKwkJLyogQXV0byBTaXplICovCisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRl KHNlbnNvciwgT1Y4ODY1X0FVVE9fU0laRV9DVFJMX1JFRywKKwkJCQkgICBPVjg4NjVfQVVUT19T SVpFX0NUUkxfT0ZGU0VUX1lfUkVHIHwKKwkJCQkgICBPVjg4NjVfQVVUT19TSVpFX0NUUkxfT0ZG U0VUX1hfUkVHIHwKKwkJCQkgICBPVjg4NjVfQVVUT19TSVpFX0NUUkxfQ1JPUF9FTkRfWV9SRUcg fAorCQkJCSAgIE9WODg2NV9BVVRPX1NJWkVfQ1RSTF9DUk9QX0VORF9YX1JFRyB8CisJCQkJICAg T1Y4ODY1X0FVVE9fU0laRV9DVFJMX0NST1BfU1RBUlRfWV9SRUcgfAorCQkJCSAgIE9WODg2NV9B VVRPX1NJWkVfQ1RSTF9DUk9QX1NUQVJUX1hfUkVHKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0FVVE9fU0laRV9CT1VO REFSSUVTX1JFRywKKwkJCQkgICBPVjg4NjVfQVVUT19TSVpFX0JPVU5EQVJJRVNfWShtb2RlLT5z aXplX2F1dG9fYm91bmRhcnlfeSkgfAorCQkJCSAgIE9WODg2NV9BVVRPX1NJWkVfQk9VTkRBUklF U19YKG1vZGUtPnNpemVfYXV0b19ib3VuZGFyeV94KSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4g cmV0OworCX0gZWxzZSB7CisJCS8qIENyb3AgU3RhcnQgWCAqLworCisJCXJldCA9IG92ODg2NV93 cml0ZShzZW5zb3IsIE9WODg2NV9DUk9QX1NUQVJUX1hfSF9SRUcsCisJCQkJICAgT1Y4ODY1X0NS T1BfU1RBUlRfWF9IKG1vZGUtPmNyb3Bfc3RhcnRfeCkpOworCQlpZiAocmV0KQorCQkJcmV0dXJu IHJldDsKKworCQlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQ1JPUF9TVEFSVF9Y X0xfUkVHLAorCQkJCSAgIE9WODg2NV9DUk9QX1NUQVJUX1hfTChtb2RlLT5jcm9wX3N0YXJ0X3gp KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogT2Zmc2V0IFggKi8KKworCQly ZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfT0ZGU0VUX1hfSF9SRUcsCisJCQkJICAg T1Y4ODY1X09GRlNFVF9YX0gobW9kZS0+b2Zmc2V0X3gpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVy biByZXQ7CisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X09GRlNFVF9YX0xf UkVHLAorCQkJCSAgIE9WODg2NV9PRkZTRVRfWF9MKG1vZGUtPm9mZnNldF94KSk7CisJCWlmIChy ZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIENyb3AgRW5kIFggKi8KKworCQlyZXQgPSBvdjg4 NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQ1JPUF9FTkRfWF9IX1JFRywKKwkJCQkgICBPVjg4NjVf Q1JPUF9FTkRfWF9IKG1vZGUtPmNyb3BfZW5kX3gpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0NST1BfRU5EX1hfTF9S RUcsCisJCQkJICAgT1Y4ODY1X0NST1BfRU5EX1hfTChtb2RlLT5jcm9wX2VuZF94KSk7CisJCWlm IChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIENyb3AgU3RhcnQgWSAqLworCisJCXJldCA9 IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9DUk9QX1NUQVJUX1lfSF9SRUcsCisJCQkJICAg T1Y4ODY1X0NST1BfU1RBUlRfWV9IKG1vZGUtPmNyb3Bfc3RhcnRfeSkpOworCQlpZiAocmV0KQor CQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQ1JP UF9TVEFSVF9ZX0xfUkVHLAorCQkJCSAgIE9WODg2NV9DUk9QX1NUQVJUX1lfTChtb2RlLT5jcm9w X3N0YXJ0X3kpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogT2Zmc2V0IFkg Ki8KKworCQlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfT0ZGU0VUX1lfSF9SRUcs CisJCQkJICAgT1Y4ODY1X09GRlNFVF9ZX0gobW9kZS0+b2Zmc2V0X3kpKTsKKwkJaWYgKHJldCkK KwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X09G RlNFVF9ZX0xfUkVHLAorCQkJCSAgIE9WODg2NV9PRkZTRVRfWV9MKG1vZGUtPm9mZnNldF95KSk7 CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIENyb3AgRW5kIFkgKi8KKworCQly ZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQ1JPUF9FTkRfWV9IX1JFRywKKwkJCQkg ICBPVjg4NjVfQ1JPUF9FTkRfWV9IKG1vZGUtPmNyb3BfZW5kX3kpKTsKKwkJaWYgKHJldCkKKwkJ CXJldHVybiByZXQ7CisKKwkJcmV0ID0gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0NST1Bf RU5EX1lfTF9SRUcsCisJCQkJICAgT1Y4ODY1X0NST1BfRU5EX1lfTChtb2RlLT5jcm9wX2VuZF95 KSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFZGSUZPICovCisKKwly ZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfVkZJRk9fUkVBRF9TVEFSVF9IX1JFRywK KwkJCSAgIE9WODg2NV9WRklGT19SRUFEX1NUQVJUX0gobW9kZS0+dmZpZm9fcmVhZF9zdGFydCkp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29y LCBPVjg4NjVfVkZJRk9fUkVBRF9TVEFSVF9MX1JFRywKKwkJCSAgIE9WODg2NV9WRklGT19SRUFE X1NUQVJUX0wobW9kZS0+dmZpZm9fcmVhZF9zdGFydCkpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfQUJMQ19OVU1fUkVHLAor CQkJICAgT1Y4ODY1X0FCTENfTlVNKG1vZGUtPmFibGNfbnVtKSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9aTElORV9OVU1f UkVHLAorCQkJICAgT1Y4ODY1X1pMSU5FX05VTShtb2RlLT56bGluZV9udW0pKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJLyogQmlubmluZyAqLworCisJcmV0ID0gb3Y4ODY1X21vZGVf YmlubmluZ19jb25maWd1cmUoc2Vuc29yLCBtb2RlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJLyogQmxhY2sgTGV2ZWwgKi8KKworCXJldCA9IG92ODg2NV9tb2RlX2JsYWNrX2xldmVs X2NvbmZpZ3VyZShzZW5zb3IsIG1vZGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkv KiBQTExzICovCisKKwlyZXQgPSBvdjg4NjVfbW9kZV9wbGwxX2NvbmZpZ3VyZShzZW5zb3IsIG1v ZGUsIG1idXNfY29kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG92ODg2 NV9tb2RlX3BsbDJfY29uZmlndXJlKHNlbnNvciwgbW9kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldCA9IG92ODg2NV9tb2RlX3NjbGtfY29uZmlndXJlKHNlbnNvciwgbW9kZSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEV4dHJhIHJlZ2lzdGVycyAqLworCisJ aWYgKG1vZGUtPnJlZ2lzdGVyX3ZhbHVlcykgeworCQlyZXQgPSBvdjg4NjVfd3JpdGVfc2VxdWVu Y2Uoc2Vuc29yLCBtb2RlLT5yZWdpc3Rlcl92YWx1ZXMsCisJCQkJCSAgICBtb2RlLT5yZWdpc3Rl cl92YWx1ZXNfY291bnQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgb3Y4ODY1X21vZGVfbWlwaV9jbGtfcmF0 ZShzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yLAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0 IG92ODg2NV9tb2RlICptb2RlKQoreworCWNvbnN0IHN0cnVjdCBvdjg4NjVfcGxsMV9jb25maWcg KmNvbmZpZyA9IG1vZGUtPnBsbDFfY29uZmlnOworCXVuc2lnbmVkIGxvbmcgcGxsMV9yYXRlOwor CisJcGxsMV9yYXRlID0gb3Y4ODY1X21vZGVfcGxsMV9yYXRlKHNlbnNvciwgbW9kZSk7CisKKwly ZXR1cm4gcGxsMV9yYXRlIC8gY29uZmlnLT5tX2RpdiAvIDI7Cit9CisKKy8qIEV4cG9zdXJlICov CisKK3N0YXRpYyBpbnQgb3Y4ODY1X2V4cG9zdXJlX2NvbmZpZ3VyZShzdHJ1Y3Qgb3Y4ODY1X3Nl bnNvciAqc2Vuc29yLCB1MzIgZXhwb3N1cmUpCit7CisJaW50IHJldDsKKworCXJldCA9IG92ODg2 NV93cml0ZShzZW5zb3IsIE9WODg2NV9FWFBPU1VSRV9DVFJMX0hIX1JFRywKKwkJCSAgIE9WODg2 NV9FWFBPU1VSRV9DVFJMX0hIKGV4cG9zdXJlKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldCA9IG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9FWFBPU1VSRV9DVFJMX0hfUkVH LAorCQkJICAgT1Y4ODY1X0VYUE9TVVJFX0NUUkxfSChleHBvc3VyZSkpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlyZXR1cm4gb3Y4ODY1X3dyaXRlKHNlbnNvciwgT1Y4ODY1X0VYUE9T VVJFX0NUUkxfTF9SRUcsCisJCQkgICAgT1Y4ODY1X0VYUE9TVVJFX0NUUkxfTChleHBvc3VyZSkp OworfQorCisvKiBHYWluICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X2dhaW5fY29uZmlndXJlKHN0 cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IsIHUzMiBnYWluKQoreworCWludCByZXQ7CisKKwly ZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfR0FJTl9DVFJMX0hfUkVHLAorCQkJICAg T1Y4ODY1X0dBSU5fQ1RSTF9IKGdhaW4pKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0dXJuIG92ODg2NV93cml0ZShzZW5zb3IsIE9WODg2NV9HQUlOX0NUUkxfTF9SRUcsCisJCQkg ICAgT1Y4ODY1X0dBSU5fQ1RSTF9MKGdhaW4pKTsKK30KKworLyogV2hpdGUgQmFsYW5jZSAqLwor CitzdGF0aWMgaW50IG92ODg2NV9yZWRfYmFsYW5jZV9jb25maWd1cmUoc3RydWN0IG92ODg2NV9z ZW5zb3IgKnNlbnNvciwKKwkJCQkJdTMyIHJlZF9iYWxhbmNlKQoreworCWludCByZXQ7CisKKwly ZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfSVNQX0dBSU5fUkVEX0hfUkVHLAorCQkJ ICAgT1Y4ODY1X0lTUF9HQUlOX1JFRF9IKHJlZF9iYWxhbmNlKSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfSVNQX0dBSU5f UkVEX0xfUkVHLAorCQkJICAgIE9WODg2NV9JU1BfR0FJTl9SRURfTChyZWRfYmFsYW5jZSkpOwor fQorCitzdGF0aWMgaW50IG92ODg2NV9ibHVlX2JhbGFuY2VfY29uZmlndXJlKHN0cnVjdCBvdjg4 NjVfc2Vuc29yICpzZW5zb3IsCisJCQkJCSB1MzIgYmx1ZV9iYWxhbmNlKQoreworCWludCByZXQ7 CisKKwlyZXQgPSBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVfSVNQX0dBSU5fQkxVRV9IX1JF RywKKwkJCSAgIE9WODg2NV9JU1BfR0FJTl9CTFVFX0goYmx1ZV9iYWxhbmNlKSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4NjVf SVNQX0dBSU5fQkxVRV9MX1JFRywKKwkJCSAgICBPVjg4NjVfSVNQX0dBSU5fQkxVRV9MKGJsdWVf YmFsYW5jZSkpOworfQorCisvKiBGbGlwICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X2ZsaXBfdmVy dF9jb25maWd1cmUoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvciwgYm9vbCBlbmFibGUpCit7 CisJdTggYml0cyA9IE9WODg2NV9GT1JNQVQxX0ZMSVBfVkVSVF9JU1BfRU4gfAorCQkgIE9WODg2 NV9GT1JNQVQxX0ZMSVBfVkVSVF9TRU5TT1JfRU47CisKKwlyZXR1cm4gb3Y4ODY1X3VwZGF0ZV9i aXRzKHNlbnNvciwgT1Y4ODY1X0ZPUk1BVDFfUkVHLCBiaXRzLAorCQkJCSAgZW5hYmxlID8gYml0 cyA6IDApOworfQorCitzdGF0aWMgaW50IG92ODg2NV9mbGlwX2hvcnpfY29uZmlndXJlKHN0cnVj dCBvdjg4NjVfc2Vuc29yICpzZW5zb3IsIGJvb2wgZW5hYmxlKQoreworCXU4IGJpdHMgPSBPVjg4 NjVfRk9STUFUMl9GTElQX0hPUlpfSVNQX0VOIHwKKwkJICBPVjg4NjVfRk9STUFUMl9GTElQX0hP UlpfU0VOU09SX0VOOworCisJcmV0dXJuIG92ODg2NV91cGRhdGVfYml0cyhzZW5zb3IsIE9WODg2 NV9GT1JNQVQyX1JFRywgYml0cywKKwkJCQkgIGVuYWJsZSA/IGJpdHMgOiAwKTsKK30KKworLyog VGVzdCBQYXR0ZXJuICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X3Rlc3RfcGF0dGVybl9jb25maWd1 cmUoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvciwKKwkJCQkJIHVuc2lnbmVkIGludCBpbmRl eCkKK3sKKwlpZiAoaW5kZXggPj0gQVJSQVlfU0laRShvdjg4NjVfdGVzdF9wYXR0ZXJuX2JpdHMp KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBvdjg4NjVfd3JpdGUoc2Vuc29yLCBPVjg4 NjVfUFJFX0NUUkwwX1JFRywKKwkJCSAgICBvdjg4NjVfdGVzdF9wYXR0ZXJuX2JpdHNbaW5kZXhd KTsKK30KKworLyogU3RhdGUgKi8KKworc3RhdGljIGludCBvdjg4NjVfc3RhdGVfbWlwaV9jb25m aWd1cmUoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvciwKKwkJCQkgICAgICAgY29uc3Qgc3Ry dWN0IG92ODg2NV9tb2RlICptb2RlLAorCQkJCSAgICAgICB1MzIgbWJ1c19jb2RlKQoreworCXN0 cnVjdCBvdjg4NjVfY3RybHMgKmN0cmxzID0gJnNlbnNvci0+Y3RybHM7CisJc3RydWN0IHY0bDJf Zndub2RlX2J1c19taXBpX2NzaTIgKmJ1c19taXBpX2NzaTIgPQorCQkmc2Vuc29yLT5lbmRwb2lu dC5idXMubWlwaV9jc2kyOworCXVuc2lnbmVkIGxvbmcgbWlwaV9jbGtfcmF0ZTsKKwl1bnNpZ25l ZCBpbnQgYml0c19wZXJfc2FtcGxlOworCXVuc2lnbmVkIGludCBsYW5lc19jb3VudDsKKwl1bnNp Z25lZCBpbnQgaSwgajsKKwlzNjQgbWlwaV9waXhlbF9yYXRlOworCisJbWlwaV9jbGtfcmF0ZSA9 IG92ODg2NV9tb2RlX21pcGlfY2xrX3JhdGUoc2Vuc29yLCBtb2RlKTsKKwlpZiAoIW1pcGlfY2xr X3JhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo b3Y4ODY1X2xpbmtfZnJlcV9tZW51KTsgaSsrKSB7CisJCXM2NCBmcmVxID0gb3Y4ODY1X2xpbmtf ZnJlcV9tZW51W2ldOworCisJCWlmIChmcmVxID09IG1pcGlfY2xrX3JhdGUpCisJCQlicmVhazsK Kwl9CisKKwlmb3IgKGogPSAwOyBqIDwgc2Vuc29yLT5lbmRwb2ludC5ucl9vZl9saW5rX2ZyZXF1 ZW5jaWVzOyBqKyspIHsKKwkJdTY0IGZyZXEgPSBzZW5zb3ItPmVuZHBvaW50LmxpbmtfZnJlcXVl bmNpZXNbal07CisKKwkJaWYgKGZyZXEgPT0gbWlwaV9jbGtfcmF0ZSkKKwkJCWJyZWFrOworCX0K KworCWlmIChpID09IEFSUkFZX1NJWkUob3Y4ODY1X2xpbmtfZnJlcV9tZW51KSkgeworCQlkZXZf ZXJyKHNlbnNvci0+ZGV2LAorCQkJImZhaWxlZCB0byBmaW5kICVsdSBjbGsgcmF0ZSBpbiBsaW5r IGZyZXFcbiIsCisJCQltaXBpX2Nsa19yYXRlKTsKKwl9IGVsc2UgaWYgKGogPT0gc2Vuc29yLT5l bmRwb2ludC5ucl9vZl9saW5rX2ZyZXF1ZW5jaWVzKSB7CisJCWRldl9lcnIoc2Vuc29yLT5kZXYs CisJCQkiZmFpbGVkIHRvIGZpbmQgJWx1IGNsayByYXRlIGluIGVuZHBvaW50IGxpbmstZnJlcXVl bmNpZXNcbiIsCisJCQltaXBpX2Nsa19yYXRlKTsKKwl9IGVsc2UgeworCQlfX3Y0bDJfY3RybF9z X2N0cmwoY3RybHMtPmxpbmtfZnJlcSwgaSk7CisJfQorCisJc3dpdGNoIChtYnVzX2NvZGUpIHsK KwljYXNlIE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwOgorCQliaXRzX3Blcl9zYW1wbGUgPSAx MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGFuZXNf Y291bnQgPSBidXNfbWlwaV9jc2kyLT5udW1fZGF0YV9sYW5lczsKKwltaXBpX3BpeGVsX3JhdGUg PSBtaXBpX2Nsa19yYXRlICogMiAqIGxhbmVzX2NvdW50IC8gYml0c19wZXJfc2FtcGxlOworCisJ X192NGwyX2N0cmxfc19jdHJsX2ludDY0KGN0cmxzLT5waXhlbF9yYXRlLCBtaXBpX3BpeGVsX3Jh dGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1X3N0YXRlX2NvbmZpZ3Vy ZShzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yLAorCQkJCSAgY29uc3Qgc3RydWN0IG92ODg2 NV9tb2RlICptb2RlLAorCQkJCSAgdTMyIG1idXNfY29kZSkKK3sKKwlpbnQgcmV0OworCisJaWYg KHNlbnNvci0+c3RhdGUuc3RyZWFtaW5nKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogU3RhdGUg d2lsbCBiZSBjb25maWd1cmVkIGF0IGZpcnN0IHBvd2VyIG9uIG90aGVyd2lzZS4gKi8KKwlpZiAo cG1fcnVudGltZV9lbmFibGVkKHNlbnNvci0+ZGV2KSAmJgorCSAgICAhcG1fcnVudGltZV9zdXNw ZW5kZWQoc2Vuc29yLT5kZXYpKSB7CisJCXJldCA9IG92ODg2NV9tb2RlX2NvbmZpZ3VyZShzZW5z b3IsIG1vZGUsIG1idXNfY29kZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwor CXJldCA9IG92ODg2NV9zdGF0ZV9taXBpX2NvbmZpZ3VyZShzZW5zb3IsIG1vZGUsIG1idXNfY29k ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNlbnNvci0+c3RhdGUubW9kZSA9IG1v ZGU7CisJc2Vuc29yLT5zdGF0ZS5tYnVzX2NvZGUgPSBtYnVzX2NvZGU7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBvdjg4NjVfc3RhdGVfaW5pdChzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAq c2Vuc29yKQoreworCXJldHVybiBvdjg4NjVfc3RhdGVfY29uZmlndXJlKHNlbnNvciwgJm92ODg2 NV9tb2Rlc1swXSwKKwkJCQkgICAgICBvdjg4NjVfbWJ1c19jb2Rlc1swXSk7Cit9CisKKy8qIFNl bnNvciBCYXNlICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X3NlbnNvcl9pbml0KHN0cnVjdCBvdjg4 NjVfc2Vuc29yICpzZW5zb3IpCit7CisJaW50IHJldDsKKworCXJldCA9IG92ODg2NV9zd19yZXNl dChzZW5zb3IpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzZW5zb3ItPmRldiwgImZhaWxlZCB0 byBwZXJmb3JtIHN3IHJlc2V0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvdjg4 NjVfc3dfc3RhbmRieShzZW5zb3IsIDEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzZW5zb3It PmRldiwgImZhaWxlZCB0byBzZXQgc2Vuc29yIHN0YW5kYnlcbiIpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXJldCA9IG92ODg2NV9jaGlwX2lkX2NoZWNrKHNlbnNvcik7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKHNlbnNvci0+ZGV2LCAiZmFpbGVkIHRvIGNoZWNrIHNlbnNvciBjaGlwIGlkXG4i KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvdjg4NjVfd3JpdGVfc2VxdWVuY2Uoc2Vu c29yLCBvdjg4NjVfaW5pdF9zZXF1ZW5jZSwKKwkJCQkgICAgQVJSQVlfU0laRShvdjg4NjVfaW5p dF9zZXF1ZW5jZSkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzZW5zb3ItPmRldiwgImZhaWxl ZCB0byB3cml0ZSBpbml0IHNlcXVlbmNlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQg PSBvdjg4NjVfY2hhcmdlX3B1bXBfY29uZmlndXJlKHNlbnNvcik7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKHNlbnNvci0+ZGV2LCAiZmFpbGVkIHRvIGNvbmZpZ3VyZSBwYWRcbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXJldCA9IG92ODg2NV9taXBpX2NvbmZpZ3VyZShzZW5zb3IpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihzZW5zb3ItPmRldiwgImZhaWxlZCB0byBjb25maWd1cmUgTUlQ SVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb3Y4ODY1X2lzcF9jb25maWd1cmUo c2Vuc29yKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoc2Vuc29yLT5kZXYsICJmYWlsZWQgdG8g Y29uZmlndXJlIElTUFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb3Y4ODY1X2Js YWNrX2xldmVsX2NvbmZpZ3VyZShzZW5zb3IpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzZW5z b3ItPmRldiwgImZhaWxlZCB0byBjb25maWd1cmUgYmxhY2sgbGV2ZWxcbiIpOworCQlyZXR1cm4g cmV0OworCX0KKworCS8qIENvbmZpZ3VyZSBjdXJyZW50IG1vZGUuICovCisJcmV0ID0gb3Y4ODY1 X3N0YXRlX2NvbmZpZ3VyZShzZW5zb3IsIHNlbnNvci0+c3RhdGUubW9kZSwKKwkJCQkgICAgIHNl bnNvci0+c3RhdGUubWJ1c19jb2RlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoc2Vuc29yLT5k ZXYsICJmYWlsZWQgdG8gY29uZmlndXJlIHN0YXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjg4NjVfc2Vuc29yX3Bvd2VyKHN0cnVjdCBv djg4NjVfc2Vuc29yICpzZW5zb3IsIGJvb2wgb24pCit7CisJLyogS2VlcCBpbml0aWFsaXplZCB0 byB6ZXJvIGZvciBkaXNhYmxlIGxhYmVsLiAqLworCWludCByZXQgPSAwOworCisJaWYgKG9uKSB7 CisJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChzZW5zb3ItPnJlc2V0LCAxKTsKKwkJZ3Bpb2Rf c2V0X3ZhbHVlX2NhbnNsZWVwKHNlbnNvci0+cG93ZXJkb3duLCAxKTsKKworCQlyZXQgPSByZWd1 bGF0b3JfZW5hYmxlKHNlbnNvci0+ZG92ZGQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKHNl bnNvci0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gZW5hYmxlIERPVkREIHJlZ3VsYXRvclxuIik7CisJ CQlnb3RvIGRpc2FibGU7CisJCX0KKworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHNlbnNvci0+ YXZkZCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoc2Vuc29yLT5kZXYsCisJCQkJImZhaWxl ZCB0byBlbmFibGUgQVZERCByZWd1bGF0b3JcbiIpOworCQkJZ290byBkaXNhYmxlOworCQl9CisK KwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShzZW5zb3ItPmR2ZGQpOworCQlpZiAocmV0KSB7CisJ CQlkZXZfZXJyKHNlbnNvci0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gZW5hYmxlIERWREQgcmVndWxh dG9yXG4iKTsKKwkJCWdvdG8gZGlzYWJsZTsKKwkJfQorCisJCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShzZW5zb3ItPmV4dGNsayk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoc2Vuc29yLT5k ZXYsICJmYWlsZWQgdG8gZW5hYmxlIEVYVENMSyBjbG9ja1xuIik7CisJCQlnb3RvIGRpc2FibGU7 CisJCX0KKworCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoc2Vuc29yLT5yZXNldCwgMCk7CisJ CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChzZW5zb3ItPnBvd2VyZG93biwgMCk7CisKKwkJLyog VGltZSB0byBlbnRlciBzdHJlYW1pbmcgbW9kZSBhY2NvcmRpbmcgdG8gcG93ZXIgdGltaW5ncy4g Ki8KKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMjAwMCk7CisJfSBlbHNlIHsKK2Rpc2FibGU6CisJ CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChzZW5zb3ItPnBvd2VyZG93biwgMSk7CisJCWdwaW9k X3NldF92YWx1ZV9jYW5zbGVlcChzZW5zb3ItPnJlc2V0LCAxKTsKKworCQljbGtfZGlzYWJsZV91 bnByZXBhcmUoc2Vuc29yLT5leHRjbGspOworCisJCXJlZ3VsYXRvcl9kaXNhYmxlKHNlbnNvci0+ ZHZkZCk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHNlbnNvci0+YXZkZCk7CisJCXJlZ3VsYXRvcl9k aXNhYmxlKHNlbnNvci0+ZG92ZGQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIENvbnRy b2xzICovCisKK3N0YXRpYyBpbnQgb3Y4ODY1X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJs KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2ID0gb3Y4ODY1X2N0cmxfc3ViZGV2KGN0 cmwpOworCXN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IgPSBvdjg4NjVfc3ViZGV2X3NlbnNv cihzdWJkZXYpOworCXVuc2lnbmVkIGludCBpbmRleDsKKwlpbnQgcmV0OworCisJLyogV2FpdCBm b3IgdGhlIHNlbnNvciB0byBiZSBvbiBiZWZvcmUgc2V0dGluZyBjb250cm9scy4gKi8KKwlpZiAo cG1fcnVudGltZV9zdXNwZW5kZWQoc2Vuc29yLT5kZXYpKQorCQlyZXR1cm4gMDsKKworCXN3aXRj aCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQlyZXQgPSBvdjg4NjVf ZXhwb3N1cmVfY29uZmlndXJlKHNlbnNvciwgY3RybC0+dmFsKTsKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJcmV0ID0gb3Y4ODY1 X2dhaW5fY29uZmlndXJlKHNlbnNvciwgY3RybC0+dmFsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVy biByZXQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCXJldHVybiBv djg4NjVfcmVkX2JhbGFuY2VfY29uZmlndXJlKHNlbnNvciwgY3RybC0+dmFsKTsKKwljYXNlIFY0 TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJcmV0dXJuIG92ODg2NV9ibHVlX2JhbGFuY2VfY29uZmln dXJlKHNlbnNvciwgY3RybC0+dmFsKTsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQlyZXR1cm4g b3Y4ODY1X2ZsaXBfaG9yel9jb25maWd1cmUoc2Vuc29yLCAhIWN0cmwtPnZhbCk7CisJY2FzZSBW NEwyX0NJRF9WRkxJUDoKKwkJcmV0dXJuIG92ODg2NV9mbGlwX3ZlcnRfY29uZmlndXJlKHNlbnNv ciwgISFjdHJsLT52YWwpOworCWNhc2UgVjRMMl9DSURfVEVTVF9QQVRURVJOOgorCQlpbmRleCA9 ICh1bnNpZ25lZCBpbnQpY3RybC0+dmFsOworCQlyZXR1cm4gb3Y4ODY1X3Rlc3RfcGF0dGVybl9j b25maWd1cmUoc2Vuc29yLCBpbmRleCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBv djg4NjVfY3RybF9vcHMgPSB7CisJLnNfY3RybAkJCT0gb3Y4ODY1X3NfY3RybCwKK307CisKK3N0 YXRpYyBpbnQgb3Y4ODY1X2N0cmxzX2luaXQoc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvcikK K3sKKwlzdHJ1Y3Qgb3Y4ODY1X2N0cmxzICpjdHJscyA9ICZzZW5zb3ItPmN0cmxzOworCXN0cnVj dCB2NGwyX2N0cmxfaGFuZGxlciAqaGFuZGxlciA9ICZjdHJscy0+aGFuZGxlcjsKKwljb25zdCBz dHJ1Y3QgdjRsMl9jdHJsX29wcyAqb3BzID0gJm92ODg2NV9jdHJsX29wczsKKwlpbnQgcmV0Owor CisJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoYW5kbGVyLCAzMik7CisKKwkvKiBVc2Ugb3VyIG11 dGV4IGZvciBjdHJsIGxvY2tpbmcuICovCisJaGFuZGxlci0+bG9jayA9ICZzZW5zb3ItPm11dGV4 OworCisJLyogRXhwb3N1cmUgKi8KKworCXY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIG9wcywg VjRMMl9DSURfRVhQT1NVUkUsIDE2LCAxMDQ4NTc1LCAxNiwKKwkJCSAgNTEyKTsKKworCS8qIEdh aW4gKi8KKworCXY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIG9wcywgVjRMMl9DSURfR0FJTiwg MTI4LCA4MTkxLCAxMjgsIDEyOCk7CisKKwkvKiBXaGl0ZSBCYWxhbmNlICovCisKKwl2NGwyX2N0 cmxfbmV3X3N0ZChoYW5kbGVyLCBvcHMsIFY0TDJfQ0lEX1JFRF9CQUxBTkNFLCAxLCAzMjc2Nywg MSwKKwkJCSAgMTAyNCk7CisKKwl2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCBvcHMsIFY0TDJf Q0lEX0JMVUVfQkFMQU5DRSwgMSwgMzI3NjcsIDEsCisJCQkgIDEwMjQpOworCisJLyogRmxpcCAq LworCisJdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwgb3BzLCBWNEwyX0NJRF9IRkxJUCwgMCwg MSwgMSwgMCk7CisJdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwgb3BzLCBWNEwyX0NJRF9WRkxJ UCwgMCwgMSwgMSwgMCk7CisKKwkvKiBUZXN0IFBhdHRlcm4gKi8KKworCXY0bDJfY3RybF9uZXdf c3RkX21lbnVfaXRlbXMoaGFuZGxlciwgb3BzLCBWNEwyX0NJRF9URVNUX1BBVFRFUk4sCisJCQkJ ICAgICBBUlJBWV9TSVpFKG92ODg2NV90ZXN0X3BhdHRlcm5fbWVudSkgLSAxLAorCQkJCSAgICAg MCwgMCwgb3Y4ODY1X3Rlc3RfcGF0dGVybl9tZW51KTsKKworCS8qIE1JUEkgQ1NJLTIgKi8KKwor CWN0cmxzLT5saW5rX2ZyZXEgPQorCQl2NGwyX2N0cmxfbmV3X2ludF9tZW51KGhhbmRsZXIsIE5V TEwsIFY0TDJfQ0lEX0xJTktfRlJFUSwKKwkJCQkgICAgICAgQVJSQVlfU0laRShvdjg4NjVfbGlu a19mcmVxX21lbnUpIC0gMSwKKwkJCQkgICAgICAgMCwgb3Y4ODY1X2xpbmtfZnJlcV9tZW51KTsK KworCWN0cmxzLT5waXhlbF9yYXRlID0KKwkJdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwgTlVM TCwgVjRMMl9DSURfUElYRUxfUkFURSwgMSwKKwkJCQkgIElOVF9NQVgsIDEsIDEpOworCisJaWYg KGhhbmRsZXItPmVycm9yKSB7CisJCXJldCA9IGhhbmRsZXItPmVycm9yOworCQlnb3RvIGVycm9y X2N0cmxzOworCX0KKworCWN0cmxzLT5saW5rX2ZyZXEtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFH X1JFQURfT05MWTsKKwljdHJscy0+cGl4ZWxfcmF0ZS0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdf UkVBRF9PTkxZOworCisJc2Vuc29yLT5zdWJkZXYuY3RybF9oYW5kbGVyID0gaGFuZGxlcjsKKwor CXJldHVybiAwOworCitlcnJvcl9jdHJsczoKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKGhhbmRs ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworLyogU3ViZGV2IFZpZGVvIE9wZXJhdGlvbnMgKi8K Kworc3RhdGljIGludCBvdjg4NjVfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYs IGludCBlbmFibGUpCit7CisJc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvciA9IG92ODg2NV9z dWJkZXZfc2Vuc29yKHN1YmRldik7CisJc3RydWN0IG92ODg2NV9zdGF0ZSAqc3RhdGUgPSAmc2Vu c29yLT5zdGF0ZTsKKwlpbnQgcmV0OworCisJaWYgKGVuYWJsZSkgeworCQlyZXQgPSBwbV9ydW50 aW1lX2dldF9zeW5jKHNlbnNvci0+ZGV2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXBtX3J1bnRp bWVfcHV0X25vaWRsZShzZW5zb3ItPmRldik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJ bXV0ZXhfbG9jaygmc2Vuc29yLT5tdXRleCk7CisJcmV0ID0gb3Y4ODY1X3N3X3N0YW5kYnkoc2Vu c29yLCAhZW5hYmxlKTsKKwltdXRleF91bmxvY2soJnNlbnNvci0+bXV0ZXgpOworCisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXN0YXRlLT5zdHJlYW1pbmcgPSAhIWVuYWJsZTsKKworCWlm ICghZW5hYmxlKQorCQlwbV9ydW50aW1lX3B1dChzZW5zb3ItPmRldik7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBvdjg4NjVfZ19mcmFtZV9pbnRlcnZhbChzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnN1YmRldiwKKwkJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfaW50ZXJ2YWwgKmlu dGVydmFsKQoreworCXN0cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IgPSBvdjg4NjVfc3ViZGV2 X3NlbnNvcihzdWJkZXYpOworCWNvbnN0IHN0cnVjdCBvdjg4NjVfbW9kZSAqbW9kZTsKKwlpbnQg cmV0ID0gMDsKKworCW11dGV4X2xvY2soJnNlbnNvci0+bXV0ZXgpOworCisJbW9kZSA9IHNlbnNv ci0+c3RhdGUubW9kZTsKKwlpbnRlcnZhbC0+aW50ZXJ2YWwgPSBtb2RlLT5mcmFtZV9pbnRlcnZh bDsKKworCW11dGV4X3VubG9jaygmc2Vuc29yLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBvdjg4NjVfc3ViZGV2 X3ZpZGVvX29wcyA9IHsKKwkuc19zdHJlYW0JCT0gb3Y4ODY1X3Nfc3RyZWFtLAorCS5nX2ZyYW1l X2ludGVydmFsCT0gb3Y4ODY1X2dfZnJhbWVfaW50ZXJ2YWwsCisJLnNfZnJhbWVfaW50ZXJ2YWwJ PSBvdjg4NjVfZ19mcmFtZV9pbnRlcnZhbCwKK307CisKKy8qIFN1YmRldiBQYWQgT3BlcmF0aW9u cyAqLworCitzdGF0aWMgaW50IG92ODg2NV9lbnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnN1YmRldiwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNvbmZpZywK KwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtICpjb2RlX2VudW0pCit7CisJ aWYgKGNvZGVfZW51bS0+aW5kZXggPj0gQVJSQVlfU0laRShvdjg4NjVfbWJ1c19jb2RlcykpCisJ CXJldHVybiAtRUlOVkFMOworCisJY29kZV9lbnVtLT5jb2RlID0gb3Y4ODY1X21idXNfY29kZXNb Y29kZV9lbnVtLT5pbmRleF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb3Y4ODY1 X21idXNfZm9ybWF0X2ZpbGwoc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWJ1c19mb3JtYXQs CisJCQkJICAgIHUzMiBtYnVzX2NvZGUsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvdjg4NjVfbW9k ZSAqbW9kZSkKK3sKKwltYnVzX2Zvcm1hdC0+d2lkdGggPSBtb2RlLT5vdXRwdXRfc2l6ZV94Owor CW1idXNfZm9ybWF0LT5oZWlnaHQgPSBtb2RlLT5vdXRwdXRfc2l6ZV95OworCW1idXNfZm9ybWF0 LT5jb2RlID0gbWJ1c19jb2RlOworCisJbWJ1c19mb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9O T05FOworCW1idXNfZm9ybWF0LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1JBVzsKKwlt YnVzX2Zvcm1hdC0+eWNiY3JfZW5jID0KKwkJVjRMMl9NQVBfWUNCQ1JfRU5DX0RFRkFVTFQobWJ1 c19mb3JtYXQtPmNvbG9yc3BhY2UpOworCW1idXNfZm9ybWF0LT5xdWFudGl6YXRpb24gPSBWNEwy X1FVQU5USVpBVElPTl9GVUxMX1JBTkdFOworCW1idXNfZm9ybWF0LT54ZmVyX2Z1bmMgPQorCQlW NEwyX01BUF9YRkVSX0ZVTkNfREVGQVVMVChtYnVzX2Zvcm1hdC0+Y29sb3JzcGFjZSk7Cit9CisK K3N0YXRpYyBpbnQgb3Y4ODY1X2dldF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCisJ CQkgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjb25maWcsCisJCQkgIHN0cnVjdCB2 NGwyX3N1YmRldl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vu c29yID0gb3Y4ODY1X3N1YmRldl9zZW5zb3Ioc3ViZGV2KTsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2Zy YW1lZm10ICptYnVzX2Zvcm1hdCA9ICZmb3JtYXQtPmZvcm1hdDsKKworCW11dGV4X2xvY2soJnNl bnNvci0+bXV0ZXgpOworCisJaWYgKGZvcm1hdC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFU X1RSWSkKKwkJKm1idXNfZm9ybWF0ID0gKnY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KHN1YmRl diwgY29uZmlnLAorCQkJCQkJCSAgIGZvcm1hdC0+cGFkKTsKKwllbHNlCisJCW92ODg2NV9tYnVz X2Zvcm1hdF9maWxsKG1idXNfZm9ybWF0LCBzZW5zb3ItPnN0YXRlLm1idXNfY29kZSwKKwkJCQkJ c2Vuc29yLT5zdGF0ZS5tb2RlKTsKKworCW11dGV4X3VubG9jaygmc2Vuc29yLT5tdXRleCk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjg4NjVfc2V0X2ZtdChzdHJ1Y3QgdjRsMl9z dWJkZXYgKnN1YmRldiwKKwkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNvbmZp ZywKKwkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0KQoreworCXN0cnVjdCBv djg4NjVfc2Vuc29yICpzZW5zb3IgPSBvdjg4NjVfc3ViZGV2X3NlbnNvcihzdWJkZXYpOworCXN0 cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1idXNfZm9ybWF0ID0gJmZvcm1hdC0+Zm9ybWF0Owor CWNvbnN0IHN0cnVjdCBvdjg4NjVfbW9kZSAqbW9kZTsKKwl1MzIgbWJ1c19jb2RlID0gMDsKKwl1 bnNpZ25lZCBpbnQgaW5kZXg7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZzZW5zb3It Pm11dGV4KTsKKworCWlmIChzZW5zb3ItPnN0YXRlLnN0cmVhbWluZykgeworCQlyZXQgPSAtRUJV U1k7CisJCWdvdG8gY29tcGxldGU7CisJfQorCisJLyogVHJ5IHRvIGZpbmQgcmVxdWVzdGVkIG1i dXMgY29kZS4gKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBBUlJBWV9TSVpFKG92ODg2NV9t YnVzX2NvZGVzKTsgaW5kZXgrKykgeworCQlpZiAob3Y4ODY1X21idXNfY29kZXNbaW5kZXhdID09 IG1idXNfZm9ybWF0LT5jb2RlKSB7CisJCQltYnVzX2NvZGUgPSBtYnVzX2Zvcm1hdC0+Y29kZTsK KwkJCWJyZWFrOworCQl9CisJfQorCisJLyogRmFsbGJhY2sgdG8gZGVmYXVsdC4gKi8KKwlpZiAo IW1idXNfY29kZSkKKwkJbWJ1c19jb2RlID0gb3Y4ODY1X21idXNfY29kZXNbMF07CisKKwkvKiBG aW5kIHRoZSBtb2RlIHdpdGggbmVhcmVzdCBkaW1lbnNpb25zLiAqLworCW1vZGUgPSB2NGwyX2Zp bmRfbmVhcmVzdF9zaXplKG92ODg2NV9tb2RlcywgQVJSQVlfU0laRShvdjg4NjVfbW9kZXMpLAor CQkJCSAgICAgIG91dHB1dF9zaXplX3gsIG91dHB1dF9zaXplX3ksCisJCQkJICAgICAgbWJ1c19m b3JtYXQtPndpZHRoLCBtYnVzX2Zvcm1hdC0+aGVpZ2h0KTsKKwlpZiAoIW1vZGUpIHsKKwkJcmV0 ID0gLUVJTlZBTDsKKwkJZ290byBjb21wbGV0ZTsKKwl9CisKKwlvdjg4NjVfbWJ1c19mb3JtYXRf ZmlsbChtYnVzX2Zvcm1hdCwgbWJ1c19jb2RlLCBtb2RlKTsKKworCWlmIChmb3JtYXQtPndoaWNo ID09IFY0TDJfU1VCREVWX0ZPUk1BVF9UUlkpCisJCSp2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1h dChzdWJkZXYsIGNvbmZpZywgZm9ybWF0LT5wYWQpID0KKwkJCSptYnVzX2Zvcm1hdDsKKwllbHNl IGlmIChzZW5zb3ItPnN0YXRlLm1vZGUgIT0gbW9kZSB8fAorCQkgc2Vuc29yLT5zdGF0ZS5tYnVz X2NvZGUgIT0gbWJ1c19jb2RlKQorCQlyZXQgPSBvdjg4NjVfc3RhdGVfY29uZmlndXJlKHNlbnNv ciwgbW9kZSwgbWJ1c19jb2RlKTsKKworY29tcGxldGU6CisJbXV0ZXhfdW5sb2NrKCZzZW5zb3It Pm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1X2VudW1fZnJh bWVfc2l6ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKKwkJCQkgIHN0cnVjdCB2NGwyX3N1 YmRldl9wYWRfY29uZmlnICpjb25maWcsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVf c2l6ZV9lbnVtICpzaXplX2VudW0pCit7CisJY29uc3Qgc3RydWN0IG92ODg2NV9tb2RlICptb2Rl OworCisJaWYgKHNpemVfZW51bS0+aW5kZXggPj0gQVJSQVlfU0laRShvdjg4NjVfbW9kZXMpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCW1vZGUgPSAmb3Y4ODY1X21vZGVzW3NpemVfZW51bS0+aW5k ZXhdOworCisJc2l6ZV9lbnVtLT5taW5fd2lkdGggPSBzaXplX2VudW0tPm1heF93aWR0aCA9IG1v ZGUtPm91dHB1dF9zaXplX3g7CisJc2l6ZV9lbnVtLT5taW5faGVpZ2h0ID0gc2l6ZV9lbnVtLT5t YXhfaGVpZ2h0ID0gbW9kZS0+b3V0cHV0X3NpemVfeTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IG92ODg2NV9lbnVtX2ZyYW1lX2ludGVydmFsKHN0cnVjdCB2NGwyX3N1YmRldiAqc3Vi ZGV2LAorCQkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjb25maWcsCisJ CQkJICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX2ludGVydmFsX2VudW0gKmludGVydmFs X2VudW0pCit7CisJY29uc3Qgc3RydWN0IG92ODg2NV9tb2RlICptb2RlID0gTlVMTDsKKwl1bnNp Z25lZCBpbnQgbW9kZV9pbmRleDsKKwl1bnNpZ25lZCBpbnQgaW50ZXJ2YWxfaW5kZXg7CisKKwlp ZiAoaW50ZXJ2YWxfZW51bS0+aW5kZXggPiAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKgorCSAq IE11bHRpcGxlIG1vZGVzIHdpdGggdGhlIHNhbWUgZGltZW5zaW9ucyBtYXkgaGF2ZSBkaWZmZXJl bnQgZnJhbWUKKwkgKiBpbnRlcnZhbHMsIHNvIGxvb2sgdXAgZWFjaCByZWxldmFudCBtb2RlLgor CSAqLworCWZvciAobW9kZV9pbmRleCA9IDAsIGludGVydmFsX2luZGV4ID0gMDsKKwkgICAgIG1v ZGVfaW5kZXggPCBBUlJBWV9TSVpFKG92ODg2NV9tb2Rlcyk7IG1vZGVfaW5kZXgrKykgeworCQlt b2RlID0gJm92ODg2NV9tb2Rlc1ttb2RlX2luZGV4XTsKKworCQlpZiAobW9kZS0+b3V0cHV0X3Np emVfeCA9PSBpbnRlcnZhbF9lbnVtLT53aWR0aCAmJgorCQkgICAgbW9kZS0+b3V0cHV0X3NpemVf eSA9PSBpbnRlcnZhbF9lbnVtLT5oZWlnaHQpIHsKKwkJCWlmIChpbnRlcnZhbF9pbmRleCA9PSBp bnRlcnZhbF9lbnVtLT5pbmRleCkKKwkJCQlicmVhazsKKworCQkJaW50ZXJ2YWxfaW5kZXgrKzsK KwkJfQorCX0KKworCWlmIChtb2RlX2luZGV4ID09IEFSUkFZX1NJWkUob3Y4ODY1X21vZGVzKSB8 fCAhbW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnRlcnZhbF9lbnVtLT5pbnRlcnZhbCA9 IG1vZGUtPmZyYW1lX2ludGVydmFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX29wcyBvdjg4NjVfc3ViZGV2X3BhZF9vcHMgPSB7CisJLmVu dW1fbWJ1c19jb2RlCQk9IG92ODg2NV9lbnVtX21idXNfY29kZSwKKwkuZ2V0X2ZtdAkJPSBvdjg4 NjVfZ2V0X2ZtdCwKKwkuc2V0X2ZtdAkJPSBvdjg4NjVfc2V0X2ZtdCwKKwkuZW51bV9mcmFtZV9z aXplCT0gb3Y4ODY1X2VudW1fZnJhbWVfc2l6ZSwKKwkuZW51bV9mcmFtZV9pbnRlcnZhbAk9IG92 ODg2NV9lbnVtX2ZyYW1lX2ludGVydmFsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X3N1YmRldl9vcHMgb3Y4ODY1X3N1YmRldl9vcHMgPSB7CisJLnZpZGVvCQk9ICZvdjg4NjVfc3Vi ZGV2X3ZpZGVvX29wcywKKwkucGFkCQk9ICZvdjg4NjVfc3ViZGV2X3BhZF9vcHMsCit9OworCitz dGF0aWMgaW50IG92ODg2NV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB2NGwyX3N1 YmRldiAqc3ViZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92ODg2 NV9zZW5zb3IgKnNlbnNvciA9IG92ODg2NV9zdWJkZXZfc2Vuc29yKHN1YmRldik7CisJc3RydWN0 IG92ODg2NV9zdGF0ZSAqc3RhdGUgPSAmc2Vuc29yLT5zdGF0ZTsKKwlpbnQgcmV0ID0gMDsKKwor CW11dGV4X2xvY2soJnNlbnNvci0+bXV0ZXgpOworCisJaWYgKHN0YXRlLT5zdHJlYW1pbmcpIHsK KwkJcmV0ID0gb3Y4ODY1X3N3X3N0YW5kYnkoc2Vuc29yLCB0cnVlKTsKKwkJaWYgKHJldCkKKwkJ CWdvdG8gY29tcGxldGU7CisJfQorCisJcmV0ID0gb3Y4ODY1X3NlbnNvcl9wb3dlcihzZW5zb3Is IGZhbHNlKTsKKwlpZiAocmV0KQorCQlvdjg4NjVfc3dfc3RhbmRieShzZW5zb3IsIGZhbHNlKTsK KworY29tcGxldGU6CisJbXV0ZXhfdW5sb2NrKCZzZW5zb3ItPm11dGV4KTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0 cnVjdCBvdjg4NjVfc2Vuc29yICpzZW5zb3IgPSBvdjg4NjVfc3ViZGV2X3NlbnNvcihzdWJkZXYp OworCXN0cnVjdCBvdjg4NjVfc3RhdGUgKnN0YXRlID0gJnNlbnNvci0+c3RhdGU7CisJaW50IHJl dCA9IDA7CisKKwltdXRleF9sb2NrKCZzZW5zb3ItPm11dGV4KTsKKworCXJldCA9IG92ODg2NV9z ZW5zb3JfcG93ZXIoc2Vuc29yLCB0cnVlKTsKKwlpZiAocmV0KQorCQlnb3RvIGNvbXBsZXRlOwor CisJcmV0ID0gb3Y4ODY1X3NlbnNvcl9pbml0KHNlbnNvcik7CisJaWYgKHJldCkKKwkJZ290byBl cnJvcl9wb3dlcjsKKworCXJldCA9IF9fdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoJnNlbnNvci0+ Y3RybHMuaGFuZGxlcik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9wb3dlcjsKKworCWlmIChz dGF0ZS0+c3RyZWFtaW5nKSB7CisJCXJldCA9IG92ODg2NV9zd19zdGFuZGJ5KHNlbnNvciwgZmFs c2UpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl9wb3dlcjsKKwl9CisKKwlnb3RvIGNvbXBs ZXRlOworCitlcnJvcl9wb3dlcjoKKwlvdjg4NjVfc2Vuc29yX3Bvd2VyKHNlbnNvciwgZmFsc2Up OworCitjb21wbGV0ZToKKwltdXRleF91bmxvY2soJnNlbnNvci0+bXV0ZXgpOworCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludCBvdjg4NjVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CisJc3RydWN0IGZ3 bm9kZV9oYW5kbGUgKmhhbmRsZTsKKwlzdHJ1Y3Qgb3Y4ODY1X3NlbnNvciAqc2Vuc29yOworCXN0 cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2OworCXN0cnVjdCBtZWRpYV9wYWQgKnBhZDsKKwl1bnNp Z25lZCBsb25nIHJhdGU7CisJaW50IHJldDsKKworCXNlbnNvciA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqc2Vuc29yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZW5zb3IpCisJCXJldHVybiAt RU5PTUVNOworCisJc2Vuc29yLT5kZXYgPSBkZXY7CisJc2Vuc29yLT5pMmNfY2xpZW50ID0gY2xp ZW50OworCisJLyogR3JhcGggRW5kcG9pbnQgKi8KKworCWhhbmRsZSA9IGZ3bm9kZV9ncmFwaF9n ZXRfbmV4dF9lbmRwb2ludChkZXZfZndub2RlKGRldiksIE5VTEwpOworCWlmICghaGFuZGxlKSB7 CisJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGZpbmQgZW5wb2ludCBub2RlXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJc2Vuc29yLT5lbmRwb2ludC5idXNfdHlwZSA9IFY0TDJfTUJV U19DU0kyX0RQSFk7CisKKwlyZXQgPSB2NGwyX2Z3bm9kZV9lbmRwb2ludF9hbGxvY19wYXJzZSho YW5kbGUsICZzZW5zb3ItPmVuZHBvaW50KTsKKwlmd25vZGVfaGFuZGxlX3B1dChoYW5kbGUpOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcGFyc2UgZW5kcG9pbnQgbm9k ZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogR1BJT3MgKi8KKworCXNlbnNvci0+cG93 ZXJkb3duID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAicG93ZXJkb3duIiwKKwkJCQkJ CSAgICBHUElPRF9PVVRfSElHSCk7CisJaWYgKElTX0VSUihzZW5zb3ItPnBvd2VyZG93bikpIHsK KwkJcmV0ID0gUFRSX0VSUihzZW5zb3ItPnBvd2VyZG93bik7CisJCWdvdG8gZXJyb3JfZW5kcG9p bnQ7CisJfQorCisJc2Vuc29yLT5yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwg InJlc2V0IiwgR1BJT0RfT1VUX0hJR0gpOworCWlmIChJU19FUlIoc2Vuc29yLT5yZXNldCkpIHsK KwkJcmV0ID0gUFRSX0VSUihzZW5zb3ItPnJlc2V0KTsKKwkJZ290byBlcnJvcl9lbmRwb2ludDsK Kwl9CisKKwkvKiBSZWd1bGF0b3JzICovCisKKwkvKiBEVkREOiBkaWdpdGFsIGNvcmUgKi8KKwlz ZW5zb3ItPmR2ZGQgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAiZHZkZCIpOworCWlmIChJU19F UlIoc2Vuc29yLT5kdmRkKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgRFZERCAoZGln aXRhbCBjb3JlKSByZWd1bGF0b3JcbiIpOworCQlyZXQgPSBQVFJfRVJSKHNlbnNvci0+ZHZkZCk7 CisJCWdvdG8gZXJyb3JfZW5kcG9pbnQ7CisJfQorCisJLyogRE9WREQ6IGRpZ2l0YWwgSS9PICov CisJc2Vuc29yLT5kb3ZkZCA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJkb3ZkZCIpOworCWlm IChJU19FUlIoc2Vuc29yLT5kdmRkKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgRE9W REQgKGRpZ2l0YWwgSS9PKSByZWd1bGF0b3JcbiIpOworCQlyZXQgPSBQVFJfRVJSKHNlbnNvci0+ ZHZkZCk7CisJCWdvdG8gZXJyb3JfZW5kcG9pbnQ7CisJfQorCisJLyogQVZERDogYW5hbG9nICov CisJc2Vuc29yLT5hdmRkID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgImF2ZGQiKTsKKwlpZiAo SVNfRVJSKHNlbnNvci0+YXZkZCkpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IEFWREQg KGFuYWxvZykgcmVndWxhdG9yXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihzZW5zb3ItPmR2ZGQpOwor CQlnb3RvIGVycm9yX2VuZHBvaW50OworCX0KKworCS8qIEV4dGVybmFsIENsb2NrICovCisKKwlz ZW5zb3ItPmV4dGNsayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOworCWlmIChJU19FUlIoc2Vu c29yLT5leHRjbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBleHRlcm5hbCBj bG9ja1xuIik7CisJCXJldCA9IFBUUl9FUlIoc2Vuc29yLT5leHRjbGspOworCQlnb3RvIGVycm9y X2VuZHBvaW50OworCX0KKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoc2Vuc29yLT5leHRjbGspOwor CWlmIChyYXRlICE9IE9WODg2NV9FWFRDTEtfUkFURSkgeworCQlkZXZfZXJyKGRldiwgImNsb2Nr IHJhdGUgJWx1IEh6IGlzIHVuc3VwcG9ydGVkXG4iLCByYXRlKTsKKwkJcmV0ID0gLUVJTlZBTDsK KwkJZ290byBlcnJvcl9lbmRwb2ludDsKKwl9CisKKwkvKiBTdWJkZXYsIGVudGl0eSBhbmQgcGFk ICovCisKKwlzdWJkZXYgPSAmc2Vuc29yLT5zdWJkZXY7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQo c3ViZGV2LCBjbGllbnQsICZvdjg4NjVfc3ViZGV2X29wcyk7CisKKwlzdWJkZXYtPmZsYWdzIHw9 IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RFOworCXN1YmRldi0+ZW50aXR5LmZ1bmN0aW9uID0g TUVESUFfRU5UX0ZfQ0FNX1NFTlNPUjsKKworCXBhZCA9ICZzZW5zb3ItPnBhZDsKKwlwYWQtPmZs YWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRTsKKworCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2lu aXQoJnN1YmRldi0+ZW50aXR5LCAxLCBwYWQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfZW50 aXR5OworCisJLyogTXV0ZXggKi8KKworCW11dGV4X2luaXQoJnNlbnNvci0+bXV0ZXgpOworCisJ LyogU2Vuc29yICovCisKKwlyZXQgPSBvdjg4NjVfY3RybHNfaW5pdChzZW5zb3IpOworCWlmIChy ZXQpCisJCWdvdG8gZXJyb3JfbXV0ZXg7CisKKwlyZXQgPSBvdjg4NjVfc3RhdGVfaW5pdChzZW5z b3IpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfY3RybHM7CisKKwkvKiBSdW50aW1lIFBNICov CisKKwlwbV9ydW50aW1lX2VuYWJsZShzZW5zb3ItPmRldik7CisJcG1fcnVudGltZV9zZXRfc3Vz cGVuZGVkKHNlbnNvci0+ZGV2KTsKKworCS8qIFY0TDIgc3ViZGV2IHJlZ2lzdGVyICovCisKKwly ZXQgPSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldl9zZW5zb3JfY29tbW9uKHN1YmRldik7CisJ aWYgKHJldCkKKwkJZ290byBlcnJvcl9wbTsKKworCXJldHVybiAwOworCitlcnJvcl9wbToKKwlw bV9ydW50aW1lX2Rpc2FibGUoc2Vuc29yLT5kZXYpOworCitlcnJvcl9jdHJsczoKKwl2NGwyX2N0 cmxfaGFuZGxlcl9mcmVlKCZzZW5zb3ItPmN0cmxzLmhhbmRsZXIpOworCitlcnJvcl9tdXRleDoK KwltdXRleF9kZXN0cm95KCZzZW5zb3ItPm11dGV4KTsKKworZXJyb3JfZW50aXR5OgorCW1lZGlh X2VudGl0eV9jbGVhbnVwKCZzZW5zb3ItPnN1YmRldi5lbnRpdHkpOworCitlcnJvcl9lbmRwb2lu dDoKKwl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKCZzZW5zb3ItPmVuZHBvaW50KTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y4ODY1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2ID0gaTJjX2dldF9jbGll bnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92ODg2NV9zZW5zb3IgKnNlbnNvciA9IG92ODg2NV9z dWJkZXZfc2Vuc29yKHN1YmRldik7CisKKwl2NGwyX2FzeW5jX3VucmVnaXN0ZXJfc3ViZGV2KHN1 YmRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKHNlbnNvci0+ZGV2KTsKKwl2NGwyX2N0cmxfaGFu ZGxlcl9mcmVlKCZzZW5zb3ItPmN0cmxzLmhhbmRsZXIpOworCW11dGV4X2Rlc3Ryb3koJnNlbnNv ci0+bXV0ZXgpOworCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZzdWJkZXYtPmVudGl0eSk7CisKKwl2 NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKCZzZW5zb3ItPmVuZHBvaW50KTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgb3Y4ODY1X3BtX29wcyA9IHsK KwlTRVRfUlVOVElNRV9QTV9PUFMob3Y4ODY1X3N1c3BlbmQsIG92ODg2NV9yZXN1bWUsIE5VTEwp Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvdjg4NjVfb2ZfbWF0Y2hb XSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm92dGksb3Y4ODY1IiB9LAorCXsgfQorfTsKK01PRFVM RV9ERVZJQ0VfVEFCTEUob2YsIG92ODg2NV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJj X2RyaXZlciBvdjg4NjVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm92ODg2 NSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG92ODg2NV9vZl9tYXRjaCwKKwkJLnBtID0gJm92ODg2 NV9wbV9vcHMsCisJfSwKKwkucHJvYmVfbmV3ID0gb3Y4ODY1X3Byb2JlLAorCS5yZW1vdmUJID0g b3Y4ODY1X3JlbW92ZSwKK307CisKK21vZHVsZV9pMmNfZHJpdmVyKG92ODg2NV9kcml2ZXIpOwor CitNT0RVTEVfQVVUSE9SKCJQYXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAYm9v dGxpbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlY0TDIgZHJpdmVyIGZvciB0aGUgT21u aVZpc2lvbiBPVjg4NjUgaW1hZ2Ugc2Vuc29yIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7 Ci0tIAoyLjI5LjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hcm0ta2VybmVsCg==