From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9BC42C02180 for ; Wed, 15 Jan 2025 11:27:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:References:Message-Id:Cc:Date: In-Reply-To:From:Subject:Mime-Version:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=lis45f36TWK+wWxflrGll3ixLQMEUi4F1vi3noPRw6s=; b=oImlgkqR0FlU6F XzGELDEuSa7gOPmAspT/UGIZaq6I9Vtj4CSoJK5CVqT+qrWFP60lOpCjUiz9sut/t0DUFmpjZcrD9 vSrUxgN9p1mxdyZfuP7lQU/T4IElP2Me4cOCjq6RkdyNfXgFkdmFSwbWrFWm2RXFG76Wtyt3W8qdp WxylH3OPmOcRkfq6adjMcrxcxLkQTOmKSlOSVLbKH7y7u8OunIOHRW3CgNXswzZ3yExT1o2+6uFBY pInJY2r3wUs9HbcEamN3yQArZrA+8+9i8TAmDUU039T1PdtiZaUv3+pHRy9jeImdutVUvXfvnCYv4 CaHfmE3Dc//70TJEi1Kg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tY1Yl-0000000Bfur-35Zj; Wed, 15 Jan 2025 11:27:43 +0000 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tY1Vp-0000000BfR4-0i9V; Wed, 15 Jan 2025 11:24:43 +0000 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-ab2bb0822a4so1328364566b.3; Wed, 15 Jan 2025 03:24:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736940279; x=1737545079; darn=lists.infradead.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=2KyasszcFm9YvqaeX+ZrpTJ/YJFyRL5m2LQPueQMoh8=; b=NYWQ/BvKf2f+q+3fBwT2FHRdWQzs5cGioDbCv1m2iAdEz/07lhmmeTb3KvDLDPssVh FzJGpmIRqkOPlgA/08QG3V1WlE0czaZQd4sCfVL5+yjGGd7lvMQqgAVFj5IP/NSvBX6k 6u79yoiwHoDwV7rtUmXQoy1W/2IgldybDNnOegaZCVzTjxAv+Y0Cb21NcJQhcyxES/wq sxMHCfIkmaxEWk4FDRkKjm5uai8N0eiV8JxzuRvyVNsifCmGN+Y9xMaWd5ZhmeUzBF01 vQ2QP+WE28VxWRBSkB+SXpqBnE4r3ag3CcI/S3zdPaB3H6+dwEnQnQAyJ0S5YXoowoue CtBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736940279; x=1737545079; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2KyasszcFm9YvqaeX+ZrpTJ/YJFyRL5m2LQPueQMoh8=; b=iC8KbnHTZvbVe/3oT031CYBANzH1a3rA68VprL3fC27hsXjLhzAJ8iasaz9o+KNvqH YYhs8tRKkPRImwMSuyP193LinMHqhFAfvNQzgnNXCnthRPSW5B/79u/VFwMkPJZWclRh TMxw03Fd/stGeCzZw/I3n4cHIql/DKZeLoq0diL54tv/sMXLXo8OHhZPGKtD1vw4t0WR Moeh0mBKfvO4toPD9NMf2ZjroFQUPNFVO3YyJVsdwkvfufDYVZOubLjBds9AkKzjmHYc EN1JVUiCai3DYyFT/MAUQQpGkNTFPyOhQ1R08OboXDxvX3XdH8PkDs//AHIx3zTz0zIE 2j+w== X-Forwarded-Encrypted: i=1; AJvYcCVCvKcLP20ztIsp/2ehs3OU4Ozw5gUyc8olskenJQQd43J1yRGItg2rsXRb0Swd16mMFWAynU+iFho17ApjQUU=@lists.infradead.org, AJvYcCWUHq1Tlwh+tn/CZKMkEpKykGmOz6XDzZ15cMcCLd1N8l2SH1QJLRXeAga3IQcXC3R9u2Bz0XqYlvRT@lists.infradead.org, AJvYcCX1X5pqQkMozDmF+ffpX0CNNCLD+VMtYyf58P6XyjClgrqCx/mlWZrJYyA8yPfeoj0bt93i7Enm+VXAmsNGakbz@lists.infradead.org X-Gm-Message-State: AOJu0YwVOI+9uWExy2BY8Tkdr3x+8Mc98yeiyuz2tGS0hfmSeuC56rlP 4UgnqImnRHYJBuBG3LHiqSA2sEr5V9m8a6//KMtuciIzifupKG4D X-Gm-Gg: ASbGnculqbZbTdtl2uRF9H05v03qtjcvIruRxFG3dJ3zmWClYorNq47Oau4z2lDfNzy z+bXc5QTYHvAeRkECy0JksERtDxEwuK/0+oqa3XqwhfURm5voEx8izqlZ6GGmxBMfScJBKP6Fbv aL+jM3b1VtldhtpgTgDqC3Ccyo9gn1dNRnMX/1P5zuqJGAbpSrIuiItvoGt2EMuXkzOLw+JnGg3 Go3W+SmGgRgZkklmRkv6do8UiOh0rmuAj2iL6+PCv4i4euTZGRi9wjVPbq3hfEVqrD38d/yIxyR KvPQS7Z5AFouzJDdWYaggBlNxnVsimSZFJqxng== X-Google-Smtp-Source: AGHT+IG2KovCQ151vrJo8Z9Nnh7jTvQ+3WBYAWbWRzxsQoIL2lpMuzd24xgvQXbv5rOP8j7FHQ0PsA== X-Received: by 2002:a17:907:d87:b0:aa6:519c:ef9a with SMTP id a640c23a62f3a-ab2ab70ac8cmr2866401466b.53.1736940278824; Wed, 15 Jan 2025 03:24:38 -0800 (PST) Received: from smtpclient.apple (89-66-237-154.dynamic.chello.pl. [89.66.237.154]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab2c905e296sm754474066b.12.2025.01.15.03.24.36 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 15 Jan 2025 03:24:38 -0800 (PST) Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.300.87.4.3\)) Subject: Re: [RFC PATCH v1 3/6] phy: rockchip: add driver for rk3328 usb3 phy From: Piotr Oniszczuk In-Reply-To: <20250115012628.1035928-4-pgwipeout@gmail.com> Date: Wed, 15 Jan 2025 12:24:25 +0100 Cc: Heiko Stuebner , Kishon Vijay Abraham I , Algea Cao , linux-kernel@vger.kernel.org, Philipp Zabel , Arnd Bergmann , frank.wang@rock-chips.com, william.wu@rock-chips.com, kever.yang@rock-chips.com, linux-phy@lists.infradead.org, Sebastian Reichel , linux-rockchip@lists.infradead.org, Vinod Koul , Zhang Yubing , zyw@rock-chips.com, wulf@rock-chips.com, linux-arm-kernel@lists.infradead.org Message-Id: References: <20250115012628.1035928-1-pgwipeout@gmail.com> <20250115012628.1035928-4-pgwipeout@gmail.com> To: Peter Geis X-Mailer: Apple Mail (2.3826.300.87.4.3) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250115_032441_266435_68865D00 X-CRM114-Status: GOOD ( 27.47 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org Cgo+IFdpYWRvbW/Fm8SHIG5hcGlzYW5hIHByemV6IFBldGVyIEdlaXMgPHBnd2lwZW91dEBnbWFp bC5jb20+IHcgZG5pdSAxNSBzdHkgMjAyNSwgbyBnb2R6LiAwMjoyNjoKPiAKPiBUaGUgcmszMzI4 IGhhcyBhIGNvbWJpbmVkIHVzYjIgYW5kIHVzYjMgcGh5IGJsb2NrIGZvciB0aGUgdXNiMyBkd2MK PiBpbnRlcmZhY2UuIFRoZSBpbXBsZW1lbnRhdGlvbiB1cCB1bnRpbCBub3cgaGFzIGJlZW4gYnVn Z2VkLCB3aXRoCj4gbXVsdGlwbGUgaXNzdWVzIHJhbmdpbmcgZnJvbSBkaXNjb25uZWN0IGRldGVj dGlvbiBmYWlsdXJlcyB0byBsb3cKPiBwZXJmb3JtYW5jZS4gVGhpcyBkcml2ZXIgZml4ZXMgdGhl IG1ham9yaXR5IG9mIHRoZSBvcmlnaW5hbCBpc3N1ZXMgYW5kCj4gYWxsb3dzIGJldHRlciBwZXJm b3JtYW5jZSBmb3IgdGhlIHJrMzMyOCB1c2IzIHBvcnQuCj4gCj4gVGhpcyBkcml2ZXIgc291cmNl cyBkYXRhIGZyb20gbXVsdGlwbGUgc291cmNlcywgaW5jbHVkaW5nIHRoZSByazMzMjgKPiB0cm0s IHRoZSByazMyMjhoIHRybSwgZW1haWxzIGZyb20gUm9ja2NoaXAsIGFuZCBib3RoIHRoZSA0LjQg YW5kIDUuMTAKPiBkb3duc3RyZWFtIGRyaXZlcnMuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u IGFsbG93cyBmb3IgYmFzaWMgYnJpbmcgdXAKPiBvZiB0aGUgcGh5IGJsb2NrIGFuZCBmaXhlcyB0 aGUgZGV0ZWN0aW9uIGlzc3Vlcy4gSW50ZXJydXB0cyBhcmUgZW5hYmxlZCwKPiBidXQgY3VycmVu dGx5IG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nLiBGZWF0dXJlcyBtaXNzaW5nIGN1cnJlbnRseSBh cmUKPiBwb3dlciBtYW5hZ2VtZW50LCBPVEcgaGFuZGxpbmcsIGJvYXJkIHNwZWNpZmljIHR1bmlu ZywgcmVndWxhdG9yIGNvbnRyb2wsCj4gCj4gQ3VycmVudGx5IHRoZSBvbmx5IGtub3duIGJ1Z3Mg YXJlIGEgQVg4ODE3OSB1c2IzIGdpZ2FiaXQgYWRhcHRlciBjcmFzaGVzCj4gd2hlbiBvcGVyYXRp bmcgYXQgdXNiMyBzcGVlZHMgYW5kIHRyYW5zbWl0dGluZyBsYXJnZSBhbW91bnRzIG9mIGRhdGEg YW5kCj4gZnVsbCBkaXNjb25uZWN0aW9uIGRldGVjdGlvbnMgbWF5IGJlIHNsb3dlciB0aGFuIGV4 cGVjdGVkICh+NS0xMCBzZWNvbmRzKS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBQZXRlciBHZWlzIDxw Z3dpcGVvdXRAZ21haWwuY29tPgo+IC0tLQo+IAo+IGRyaXZlcnMvcGh5L3JvY2tjaGlwL0tjb25m aWcgICAgICAgICAgICAgICAgICB8ICAxMCArCj4gZHJpdmVycy9waHkvcm9ja2NoaXAvTWFrZWZp bGUgICAgICAgICAgICAgICAgIHwgICAxICsKPiBkcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9j a2NoaXAtaW5uby11c2IzLmMgfCA4NjkgKysrKysrKysrKysrKysrKysrCj4gMyBmaWxlcyBjaGFu Z2VkLCA4ODAgaW5zZXJ0aW9ucygrKQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BoeS9y b2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IzLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9waHkvcm9ja2NoaXAvS2NvbmZpZyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL0tjb25maWcKPiBp bmRleCAyZjdhMDVmMjFkYzUuLmFhYzYyM2U4NGY5NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3Bo eS9yb2NrY2hpcC9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9waHkvcm9ja2NoaXAvS2NvbmZpZwo+ IEBAIC00OCw2ICs0OCwxNiBAQCBjb25maWcgUEhZX1JPQ0tDSElQX0lOTk9fVVNCMgo+IGhlbHAK PiAgU3VwcG9ydCBmb3IgUm9ja2NoaXAgVVNCMi4wIFBIWSB3aXRoIElubm9zaWxpY29uIElQIGJs b2NrLgo+IAo+ICtjb25maWcgUEhZX1JPQ0tDSElQX0lOTk9fVVNCMwo+ICsgdHJpc3RhdGUgIlJv Y2tjaGlwIElOTk8gVVNCM1BIWSBEcml2ZXIiCj4gKyBkZXBlbmRzIG9uIChBUkNIX1JPQ0tDSElQ IHx8IENPTVBJTEVfVEVTVCkgJiYgT0YKPiArIGRlcGVuZHMgb24gQ09NTU9OX0NMSwo+ICsgZGVw ZW5kcyBvbiBVU0JfU1VQUE9SVAo+ICsgc2VsZWN0IEdFTkVSSUNfUEhZCj4gKyBzZWxlY3QgVVNC X0NPTU1PTgo+ICsgaGVscAo+ICsgIFN1cHBvcnQgZm9yIFJvY2tjaGlwIFVTQjMuMCBQSFkgd2l0 aCBJbm5vc2lsaWNvbiBJUCBibG9jay4KPiArCj4gY29uZmlnIFBIWV9ST0NLQ0hJUF9JTk5PX0NT SURQSFkKPiB0cmlzdGF0ZSAiUm9ja2NoaXAgSW5ub3NpbGljb24gTUlQSSBDU0kgUEhZIGRyaXZl ciIKPiBkZXBlbmRzIG9uIChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVCkgJiYgT0YKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcm9ja2NoaXAvTWFrZWZpbGUgYi9kcml2ZXJzL3BoeS9y b2NrY2hpcC9NYWtlZmlsZQo+IGluZGV4IDAxMGE4MjRlMzJjZS4uZWMxNWRjZjM3ZmJhIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9w aHkvcm9ja2NoaXAvTWFrZWZpbGUKPiBAQCAtNiw2ICs2LDcgQEAgb2JqLSQoQ09ORklHX1BIWV9S T0NLQ0hJUF9JTk5PX0NTSURQSFkpICs9IHBoeS1yb2NrY2hpcC1pbm5vLWNzaWRwaHkubwo+IG9i ai0kKENPTkZJR19QSFlfUk9DS0NISVBfSU5OT19EU0lEUEhZKSArPSBwaHktcm9ja2NoaXAtaW5u by1kc2lkcGh5Lm8KPiBvYmotJChDT05GSUdfUEhZX1JPQ0tDSElQX0lOTk9fSERNSSkgKz0gcGh5 LXJvY2tjaGlwLWlubm8taGRtaS5vCj4gb2JqLSQoQ09ORklHX1BIWV9ST0NLQ0hJUF9JTk5PX1VT QjIpICs9IHBoeS1yb2NrY2hpcC1pbm5vLXVzYjIubwo+ICtvYmotJChDT05GSUdfUEhZX1JPQ0tD SElQX0lOTk9fVVNCMykgKz0gcGh5LXJvY2tjaGlwLWlubm8tdXNiMy5vCj4gb2JqLSQoQ09ORklH X1BIWV9ST0NLQ0hJUF9OQU5FTkdfQ09NQk9fUEhZKSArPSBwaHktcm9ja2NoaXAtbmFuZW5nLWNv bWJwaHkubwo+IG9iai0kKENPTkZJR19QSFlfUk9DS0NISVBfUENJRSkgKz0gcGh5LXJvY2tjaGlw LXBjaWUubwo+IG9iai0kKENPTkZJR19QSFlfUk9DS0NISVBfU0FNU1VOR19IRFBUWCkgKz0gcGh5 LXJvY2tjaGlwLXNhbXN1bmctaGRwdHgubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9yb2Nr Y2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IzLmMgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHkt cm9ja2NoaXAtaW5uby11c2IzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uNTFiOWYzYjdmYmZhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvcGh5 L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjMuYwo+IEBAIC0wLDAgKzEsODY5IEBACj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+ICsKPiArLyoKPiArICogcGh5 LXJvY2tjaGlwLWlubm8tdXNiMy5jIC0gVVNCMyBQSFkgYmFzZWQgb24gSW5ub3NpbGljb24gSVAg YXMKPiArICogaW1wbGVtZW50ZWQgb24gUm9ja2NoaXAgcmszMzI4LiBUdW5pbmcgZGF0YSBtYWdp YyBiaXRzIGFyZSB0YWtlbiBhcyBpcwo+ICsgKiBmcm9tIHRoZSBkb3duc3RyZWFtIGRyaXZlci4g RG93bnN0cmVhbSBkcml2ZXIgaXMgbG9jYXRlZCBhdDoKPiArICogaHR0cHM6Ly9naXRodWIuY29t L3JvY2tjaGlwLWxpbnV4L2tlcm5lbC9ibG9iLzI0MGE1NjYwZDdjMjM4NDFjY2Y3YjdjYzQ4OTA3 OGJmNTIxYjk4MDIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMy5j Cj4gKyAqCj4gKyAqIEF1dGhvcjogUGV0ZXIgR2VpcyA8cGd3aXBlb3V0QGdtYWlsLmNvbT4KPiAr ICogVE9ETzoKPiArICogLSBGaW5kIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlciBuYW1lcyAvIGRl ZmluaXRpb25zLgo+ICsgKiAtIEltcGxlbWVudCBwbSBmdW5jdGlvbnMuCj4gKyAqIC0gSW1wbGVt ZW50IGJvYXJkIHNwZWNpZmljIHR1bmluZyBmcm9tIGR0cy4KPiArICogLSBJbXBsZW1lbnQgcmVn dWxhdG9yIGNvbnRyb2wuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ICsjaW5j bHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRm b3JtLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvcmVzZXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L3VzYi9vZi5oPgo+ICsKPiArI2RlZmluZSBSRUdfV1JJVEVfTUFTSyBHRU5N QVNLKDMxLCAxNikKPiArI2RlZmluZSBSRUdfV1JJVEVfU0hJRlQgMTYKPiArI2RlZmluZSBESVNB QkxFX0JJVFMgMHgwCj4gKwo+ICsvKiBVU0IzUEhZIEdSRiBSZWdpc3RlcnMgKi8KPiArI2RlZmlu ZSBVU0IzUEhZX1dBS0VVUF9DT05fUkVHIDB4NDAKPiArI2RlZmluZSBVU0IzUEhZX1dBS0VVUF9T VEFUX1JFRyAweDQ0Cj4gKyNkZWZpbmUgVVNCM19MSU5FU1RBVEVfSVJRX0VOIEJJVCgwKQo+ICsj ZGVmaW5lIFVTQjNfUlhERVRfSVJRX0VOIEJJVCgxKQo+ICsjZGVmaW5lIFVTQjNfQlZBTElEX1JJ U0VfSVJRX0VOIEJJVCgyKQo+ICsjZGVmaW5lIFVTQjNfQlZBTElEX0ZBTExfSVJRX0VOIEJJVCgz KQo+ICsjZGVmaW5lIFVTQjNfQlZBTElEX0NMRUFSX01BU0sgR0VOTUFTSygzLCAyKQo+ICsjZGVm aW5lIFVTQjNfSURfUklTRV9JUlFfRU4gQklUKDQpCj4gKyNkZWZpbmUgVVNCM19JRF9GQUxMX0lS UV9FTiBCSVQoNSkKPiArI2RlZmluZSBVU0IzX0lEX0NMRUFSX01BU0sgR0VOTUFTSyg1LCA0KQo+ ICsjZGVmaW5lIFVTQjNfUlhERVRfRU4gQklUKDYpCj4gKwo+ICsvKiBQSVBFIHJlZ2lzdGVycyAq Lwo+ICsvKiAweDA4IGZvciBTU0MsIGRlZmF1bHQgMHgwZSAqLwo+ICsjZGVmaW5lIFVOS05PV05f UElQRV9SRUdfMDAwIDB4MDAwCj4gKyNkZWZpbmUgVU5LTk9XTl9TU0NfMDAwX01BU0sgR0VOTUFT SygyLCAxKQo+ICsjZGVmaW5lIFVOS05PV05fU1NDXzAwMF9FTkFCTEUgKDB4MDAgPDwgMSkKPiAr Cj4gKy8qIDB4ODMgZm9yIDI0bSwgMHgwMSBmb3IgMjVtLCBkZWZhdWx0IDB4ODYgKi8KPiArI2Rl ZmluZSBQSVBFX1JFR18wMjAgMHgwMjAKPiArLyogUlggQ0RSIG11bHRpcGxpZXIgaGlnaCBiaXRz IFs3OjZdLCBhcyBQLCBkZWZhdWx0IDB4MiwgUlggZGF0YSByYXRlID0gKDIqcmVmY2xrKlApL1Eg Ki8KPiArI2RlZmluZSBQSVBFX1JYX0NEUl9NVUxUX0hJR0hfTUFTSyBHRU5NQVNLKDcsIDYpCj4g Ky8qIFRYIFBMTCBkaXZpZGVyIGJpdHMgWzQ6MF0sIGFzIE4sIGRlZmF1bHQgMHg2LCBUWCBkYXRh IHJhdGUgPSAoMipyZWZjbGsqTSkvTiAqLwo+ICsjZGVmaW5lIFBJUEVfVFhfUExMX0RJVl9NQVNL IEdFTk1BU0soNCwgMCkKPiArCj4gKy8qIDB4NzEgZm9yIDI0bSwgMHg2NCBmb3IgMjVtLCBkZWZh dWx0IDB4NzEgKi8KPiArI2RlZmluZSBQSVBFX1JFR18wMjggMHgwMjgKPiArLyogUlggQ0RSIG11 bHRpcGxpZXIgbG93IGJpdHMgWzc6MF0sIGFzIFAsIGRlZmF1bHQgMHg3MSwgUlggZGF0YSByYXRl ID0gKDIqcmVmY2xrKlApL1EgKi8KPiArI2RlZmluZSBQSVBFX1JYX0NEUl9NVUxUX0xPV19NQVNL IEdFTk1BU0soNywgMCkKPiArCj4gKy8qIDB4MjYgZm9yIDI0bT8sIDB4MjEgZm9yIDI1bSwgZGVm YXVsdCAweDI2ICovCj4gKyNkZWZpbmUgUElQRV9SRUdfMDMwIDB4MDMwCj4gKy8qIFJYIENEUiBk aXZpZGVyIGJpdHMgWzQ6MF0sIGFzIFEsIGRlZmF1bHQgMHg2LCBSWCBkYXRhIHJhdGUgPSAoMipy ZWZjbGsqUCkvUSAqLwo+ICsjZGVmaW5lIFBJUEVfUlhfQ0RSX0RJVl9NQVNLIEdFTk1BU0soNCwg MCkKPiArCj4gKy8qIDEnYjEgRGlzYWJsZSBiYW5kZ2FwIHBvd2VyLCBkZWZhdWx0IDB4MDAgKi8K PiArI2RlZmluZSBQSVBFX1JFR18wNDQgMHgwNDQKPiArI2RlZmluZSBCQU5ER0FQX1BPV0VSX0RJ U0FCTEUgQklUKDQpCj4gKwo+ICsvKiAweGUwIGZvciByeCB0dW5lPywgZGVmYXVsdCAweGUxICov Cj4gKyNkZWZpbmUgUElQRV9SRUdfMDYwIDB4MDYwCj4gKyNkZWZpbmUgUElQRV9UWF9ERVRFQ1Rf QllQQVNTX0RFQlVHIEJJVCg0KSAvKiBlbmFibGUgdG8gYWx3YXlzIGZvcmNlIGRldGVjdGlvbiAq Lwo+ICsvKiBSWCBDVExFIGZyZXF1ZW5jeSBiYW5kd2lkdGggcmVzcG9uc2UgdHVuaW5nIGJpdHMg WzE6MF0sIGRlZmF1bHQgMHgxICovCj4gKyNkZWZpbmUgUElQRV9SWF9DVExFX0ZSRVFfQldfTUFT SyBHRU5NQVNLKDEsIDApCj4gKyNkZWZpbmUgUElQRV9SWF9DVExFX0ZSRVFfQldfVFVORSAweDAK PiArCj4gKy8qIGRlZmF1bHQgMHg0OSAqLwo+ICsjZGVmaW5lIFBJUEVfUkVHXzA2NCAweDA2NAo+ ICsvKiBSWCBlcXVhbGl6ZXIgdGFpbCBjdXJyZW50IGNvbnRyb2wgYml0cyBbNjo0XSwgZGVmYXVs dCAweDQgKi8KPiArI2RlZmluZSBQSVBFX1JYX0VRX1RBSUxfQ1VSUl9NQVNLIEdFTk1BU0soNiwg NCkKPiArCj4gKy8qIDB4MDggZm9yIHJ4IHR1bmU/LCBkZWZhdWx0IDB4MDcgKi8KPiArI2RlZmlu ZSBQSVBFX1JFR18wNjggMHgwNjgKPiArLyogUlggZXF1YWxpemVyIGxvdyBmcmVxdWVuY3kgZ2Fp biBjb250cm9sIGJpdHMgWzc6NF0sIGRlZmF1bHQgMHgwICovCj4gKyNkZWZpbmUgUElQRV9SWF9F UV9MT1dfR0FJTl9NQVNLIEdFTk1BU0soNywgNCkKPiArI2RlZmluZSBQSVBFX1JYX0VRX0xPV19H QUlOX1RVTkUgKDB4MSA8PCA0KQo+ICsvKiBSWCBDVExFIGdhaW4gdHVuaW5nIGJpdHMgWzM6MF0s IGhpZ2hlciA9IG1vcmUgZ2FpbiBkZWZhdWx0IDB4NyAqLwo+ICsjZGVmaW5lIFBJUEVfUlhfQ1RM RV9HQUlOX01BU0sgR0VOTUFTSygzLCAwKQo+ICsjZGVmaW5lIFBJUEVfUlhfQ1RMRV9HQUlOX1RV TkUgMHg3IC8qIDB4NSBsb3dlc3QgZnVuY3Rpb25hbCB2YWx1ZSwgMHhmIGhpZ2hlc3QgKi8KPiAr Cj4gKy8qIFJYIE9EVCBtYW51YWwgcmVzaXN0YW5jZSBjb25maWcsIGhpZ2hlciA9IGxlc3MgcmVz aXN0YW5jZSwgZGVwZW5kcyBvbiBSRUdfMUM0IEJJVCg1KSBzZXQgKi8KPiArI2RlZmluZSBQSVBF X1JFR18wNkMgMHgwNmMKPiArLyogUlggT0RUIG1hbnVhbCByZXNpc3RhbmNlIGhpZ2ggYml0cyBb MzowXSwgZGVmYXVsdCAweDAgKi8KPiArI2RlZmluZSBQSVBFX1JYX09EVF9SRVNfSElHSF9NQVNL IEdFTk1BU0soMywgMCkKPiArI2RlZmluZSBQSVBFX1JYX09EVF9SRVNfSElHSF9UVU5FIDB4Zgo+ ICsKPiArI2RlZmluZSBQSVBFX1JFR18wNzAgMHgwNzAKPiArLyogUlggT0RUIG1hbnVhbCByZXNp c3RhbmNlIG1pZCBiaXRzIFs3OjBdLCBkZWZhdWx0IDB4MDMgKi8KPiArI2RlZmluZSBQSVBFX1JY X09EVF9SRVNfTUlEX01BU0sgR0VOTUFTSyg3LCAwKQo+ICsjZGVmaW5lIFBJUEVfUlhfT0RUX1JF U19NSURfVFVORSAweGZmCj4gKwo+ICsjZGVmaW5lIFBJUEVfUkVHXzA3NCAweDA3NAo+ICsvKiBS WCBPRFQgbWFudWFsIHJlc2lzdGFuY2UgbG93IGJpdHMgWzc6MF0sIGRlZmF1bHQgMHhmZiAqLwo+ ICsjZGVmaW5lIFBJUEVfUlhfT0RUX1JFU19MT1dfTUFTSyBHRU5NQVNLKDcsIDApCj4gKyNkZWZp bmUgUElQRV9SWF9PRFRfUkVTX0xPV19UVU5FIDB4ZmYKPiArCj4gKy8qIGRlZmF1bHQgMHgwOCAq Lwo+ICsjZGVmaW5lIFBJUEVfUkVHXzA4MCAweDA4MAo+ICsjZGVmaW5lIFBJUEVfVFhfQ09NTU9O X01PREVfRElTIEJJVCgyKSAvKiAxJ2IxIGRpc2FibGUgVFggY29tbW9uIHR5cGUgKi8KPiArCj4g Ky8qIGRlZmF1bHQgMHgzMyAqLwo+ICsjZGVmaW5lIFBJUEVfUkVHXzA4OCAweDA4OAo+ICsjZGVm aW5lIFBJUEVfVFhfRFJJVkVSX1BSRUVNUF9FTiBCSVQoNCkgLyogMSdiMSBlbmFibGUgcHJlLWVt cGhhc2lzICovCj4gKwo+ICsvKiBkZWZhdWx0IDB4MTggKi8KPiArI2RlZmluZSBQSVBFX1JFR18w QzAgMHgwYzAKPiArI2RlZmluZSBQSVBFX1JYX0NNX0VOIEJJVCgzKSAvKiAxJ2IxIGVuYWJsZSBS WCBDTSAqLwo+ICsjZGVmaW5lIFBJUEVfVFhfT0JTX0VOIEJJVCg0KSAvKiAxJ2IxIGVuYWJsZSBU WCBPQlMgKi8KPiArCj4gKy8qIDB4MTIgZm9yIHJ4IHR1bmU/LCBkZWZhdWx0IDB4MTQgKi8KPiAr I2RlZmluZSBQSVBFX1JFR18wQzggMHgwYzgKPiArLyogUlggQ0RSIGNoYXJnZSBwdW1wIGN1cnJl bnQgYml0cyBbMzoxXSwgZGVmYXVsdCAweDIgKi8KPiArI2RlZmluZSBQSVBFX1JYX0NEUl9DSEdf UFVNUF9NQVNLIEdFTk1BU0soMywgMSkKPiArI2RlZmluZSBQSVBFX1JYX0NEUl9DSEdfUFVNUF9U VU5FICgweDIgPDwgMSkKPiArCj4gKy8qIDB4MDIgZm9yIDI0bSwgMHgwNiBmb3IgMjVtLCBkZWZh dWx0IDB4MDYgKi8KPiArI2RlZmluZSBVTktOT1dOX1BJUEVfUkVHXzEwOCAweDEwOAo+ICsjZGVm aW5lIFVOS05PV05fUkVGQ0xLXzEwOF8yNE0gMHgwMgo+ICsKPiArLyogMHg4MCBmb3IgMjRtLCBk ZWZhdWx0IDB4MDAgKi8KPiArI2RlZmluZSBVTktOT1dOX1BJUEVfUkVHXzEwQyAweDEwYwo+ICsj ZGVmaW5lIFVOS05PV05fUkVGQ0xLXzEwQ18yNE0gQklUKDcpCj4gKwo+ICsvKiAweDAxIGZvciAy NG0sIDB4MDAgZm9yIDI1bSwgZGVmYXVsdCAweDAyICovCj4gKyNkZWZpbmUgUElQRV9SRUdfMTE4 IDB4MTE4Cj4gKy8qIFRYIFBMTCBtdWx0aXBsaWVyIGhpZ2ggYml0cyBbMzowXSwgYXMgTSwgZGVm YXVsdCAweDIsIFRYIGRhdGEgcmF0ZSA9ICgyKnJlZmNsaypNKS9OICovCj4gKyNkZWZpbmUgUElQ RV9UWF9QTExfTVVMX0hJR0hfTUFTSyBHRU5NQVNLKDMsIDApCj4gKwo+ICsvKiAweDM4IGZvciAy NG0sIDB4NjQgZm9yIDI1bSwgZGVmYXVsdCAweDcxICovCj4gKyNkZWZpbmUgUElQRV9SRUdfMTFD IDB4MTFjCj4gKy8qIFRYIFBMTCBtdWx0aXBsaWVyIGxvdyBiaXRzIFs3OjBdLCBhcyBNLCBkZWZh dWx0IDB4NzEsIFRYIGRhdGEgcmF0ZSA9ICgyKnJlZmNsaypNKS9OICovCj4gKyNkZWZpbmUgUElQ RV9UWF9QTExfTVVMX0xPV19NQVNLIEdFTk1BU0soNywgMCkKPiArCj4gKy8qIDB4MGMgZm9yIFNT QywgZGVmYXVsdCAweDFjICovCj4gKyNkZWZpbmUgVU5LTk9XTl9QSVBFX1JFR18xMjAgMHgxMjAK PiArI2RlZmluZSBVTktOT1dOX1NTQ18xMjBfTUFTSyBCSVQoNCkKPiArI2RlZmluZSBVTktOT1dO X1NTQ18xMjBfRU5BQkxFICgweDAgPDwgNCkKPiArCj4gKy8qIGRlZmF1bHQgMHg0MCAqLwo+ICsj ZGVmaW5lIFBJUEVfUkVHXzEyQyAweDEyYwo+ICsjZGVmaW5lIFBJUEVfVFhfUExMX0FMV0FZU19P TiBCSVQoMCkgLyogZGlzYWJsZSBmb3IgUExMIGNvbnRyb2wgYnkgcGlwZV9wZCAqLwo+ICsKPiAr LyogMHgwNSBmb3IgcnggdHVuZSwgZGVmYXVsdCAweDAxICovCj4gKyNkZWZpbmUgUElQRV9SRUdf MTQ4IDB4MTQ4Cj4gKyNkZWZpbmUgUElQRV9SWF9DSEdfUFVNUF9ESVZfMiBCSVQoMikgLyogUlgg Q0RSIGNoYXJnZSBwdW1wIGRpdi8yLCBkZWZhdWx0IDAgKi8KPiArCj4gKy8qIDB4NzAgZm9yIHJ4 IHR1bmUsIGRlZmF1bHQgMHg3MiAqLwo+ICsjZGVmaW5lIFBJUEVfUkVHXzE1MCAweDE1MAo+ICsj ZGVmaW5lIFBJUEVfVFhfQklBU19FTiBCSVQoNikgLyogMSdiMSBFbmFibGUgVFggQmlhcyAqLwo+ ICsvKiBSWCBDRFIgcGhhc2UgdHJhY2tpbmcgc3BlZWQgYml0cyBbMzowXSwgZGVmYXVsdCAweDIg Ki8KPiArI2RlZmluZSBQSVBFX1JYX0NEUl9TUEVFRF9NQVNLIEdFTk1BU0soMywgMCkKPiArI2Rl ZmluZSBQSVBFX1JYX0NEUl9TUEVFRF9UVU5FIDB4MDAKPiArCj4gKy8qIGRlZmF1bHQgMHhkNCAq Lwo+ICsjZGVmaW5lIFBJUEVfUkVHXzE2MAo+ICsvKiBSWCBjb21tb24gbW9kZSB2b2x0YWdlIHN0 cmVuZ3RoIGJpdHMgWzU6NF0sIGRlZmF1bHQgMHgxICovCj4gKyNkZWZpbmUgUElQRV9SWF9DRFJf Q09NX1ZPTFRfTUFTSyBHRU5NQVNLKDUsIDQpCj4gKyNkZWZpbmUgUElQRV9SWF9DRFJfQ09NX1ZP TFRfVFVORSAoMHgxIDw8IDQpCj4gKwo+ICsvKiBkZWZhdWx0IDB4MDAgKi8KPiArI2RlZmluZSBQ SVBFX1JFR18xODAgMHgxODAKPiArLyogVFggZHJpdmVyIGJpYXMgcmVmZXJlbmNlIHZvbHRhZ2Ug Yml0cyBbMzoyXSwgaW4gbXYgKi8KPiArI2RlZmluZSBQSVBFX1RYX0JJQVNfUkVGX1ZPTFRfTUFT SyBHRU5NQVNLKDMsIDIpCj4gKyNkZWZpbmUgUElQRV9UWF9CSUFTX1JFRl9WT0xUXzIwMCAoMHgw IDw8IDIpCj4gKyNkZWZpbmUgUElQRV9UWF9CSUFTX1JFRl9WT0xUXzE3NSAoMHgxIDw8IDIpCj4g KyNkZWZpbmUgUElQRV9UWF9CSUFTX1JFRl9WT0xUXzIyNSAoMHgyIDw8IDIpIC8qIGRvd25zdHJl YW0gNS4xMCBkcml2ZXIgc2V0dGluZyAqLwo+ICsjZGVmaW5lIFBJUEVfVFhfQklBU19SRUZfVk9M VF8yNTAgKDB4MyA8PCAyKQo+ICsKPiArLyogZGVmYXVsdCAweDAxICovCj4gKyNkZWZpbmUgUElQ RV9SRUdfMUE4IDB4MWE4Cj4gKyNkZWZpbmUgUElQRV9MRE9fUE9XRVJfRElTIEJJVCg0KSAvKiAx J2IxIERpc2FibGUgTERPIFBvd2VyICovCj4gKwo+ICsvKiBkZWZhdWx0IDB4MDcgKi8KPiArI2Rl ZmluZSBQSVBFX1JFR18xQUMgMHgxYWMKPiArLyogVFggZHJpdmVyIG91dHB1dCBjb21tb24gdm9s dGFnZSBiaXRzIFs1OjRdLCBpbiBtdiAqLwo+ICsjZGVmaW5lIFBJUEVfVFhfQ09NTU9OX1ZPTFRf TUFTSyBHRU5NQVNLKDUsIDQpCj4gKyNkZWZpbmUgUElQRV9UWF9DT01NT05fVk9MVF84MDAgKDB4 MCA8PCA0KQo+ICsjZGVmaW5lIFBJUEVfVFhfQ09NTU9OX1ZPTFRfNzUwICgweDEgPDwgNCkKPiAr I2RlZmluZSBQSVBFX1RYX0NPTU1PTl9WT0xUXzk1MCAoMHgyIDw8IDQpCj4gKyNkZWZpbmUgUElQ RV9UWF9DT01NT05fVk9MVF8xMTAwICgweDMgPDwgNCkKPiArCj4gKy8qIGRlZmF1bHQgMHhmYiAq Lwo+ICsjZGVmaW5lIFBJUEVfUkVHXzFCOCAweDFiOAo+ICsvKiBUWCBkcml2ZXIgc3dpbmcgc3Ry ZW5ndGggYml0cyBbNzo0XSwgcmFuZ2UgMHgwIHRvIDB4ZiAqLwo+ICsjZGVmaW5lIFBJUEVfVFhf RFJJVkVSX1NXSU5HX01BU0sgR0VOTUFTSyg3LCA0KSAvKiAweDIgbG93ZXN0IGZ1bmN0aW9uYWwg dmFsdWUgKi8KPiArLyogVFggZHJpdmVyIHByZS1lbXBoYXNpcyBzdHJlbmd0aCBiaXRzIFsxOjBd LCBkZWZhdWx0IDB4MywgZW5hYmxlZCBieSBSRUcgMDg4ICovCj4gKyNkZWZpbmUgUElQRV9UWF9E UklWRVJfUFJFRU1QX1NUUl9NQVNLIEdFTk1BU0soMSwgMCkKPiArCj4gKy8qIHNldCB0byAweGYw IGZvciByeCB0dW5lPywgZGVmYXVsdCAweGQwICovCj4gKyNkZWZpbmUgUElQRV9SRUdfMUM0IDB4 MWM0Cj4gKyNkZWZpbmUgUElQRV9SWF9PRFRfQVVUT19ESVMgQklUKDUpIC8qIERpc2FibGUgUlgg T0RUIGF1dG8gY29tcGVuc2F0aW9uICovCj4gKyNkZWZpbmUgUElQRV9UWF9PRFRfQVVUT19ESVMg QklUKDMpIC8qIERpc2FibGUgVFggT0RUIGF1dG8gY29tcGVuc2F0aW9uICovCj4gKwo+ICsvKiBV VE1JIHJlZ2lzdGVycyAqLwo+ICsvKiAweDBmIGZvciB1dG1pIHR1bmUsIGRlZmF1bHQgMHgwOSov Cj4gKyNkZWZpbmUgVVRNSV9SRUdfMDMwIDB4MDMwCj4gKy8qIHtiaXRzWzI6MF09MTExfTogYWx3 YXlzIGVuYWJsZSBwcmUtZW1waGFzaXMgKi8KPiArI2RlZmluZSBVVE1JX0VOQUJMRV9QUkVfRU1Q SF9NQVNLIEdFTk1BU0soMiwgMCkKPiArI2RlZmluZSBVVE1JX0VOQUJMRV9QUkVfRU1QSCAweDA3 Cj4gKwo+ICsvKiAweDQxIGZvciB1dG1pIHR1bmUsIGRlZmF1bHQgMHg0OSAqLwo+ICsjZGVmaW5l IFVUTUlfUkVHXzA0MCAweDA0MAo+ICsvKiBUWCBIUyBwcmUtZW1waGFzaXMgc3RyZW5ndGggYml0 cyBbNTozXSwgZGVmYXVsdCAweDEqLwo+ICsjZGVmaW5lIFVUTUlfVFhfUFJFX0VNUEhfU1RSX01B U0sgR0VOTUFTSyg1LCAzKQo+ICsjZGVmaW5lIFVUTUlfVFhfUFJFX0VNUEhfV0VBS0VTVCAoMHgw IDw8IDMpCj4gKwo+ICsvKiBzZXQgdG8gMHhiNSBmb3IgdXRtaSB0dW5lLCBkZWZhdWx0IDB4YjUg Ki8KPiArI2RlZmluZSBVVE1JX1JFR18xMUMgMHgxMWMKPiArLyoge2JpdHNbNDowXT0xMDEwMX06 IG9kdCA0NW9obSB0dW5pbmcgKi8KPiArI2RlZmluZSBVVE1JX09EVF80NV9PSE1fTUFTSyBHRU5N QVNLKDQsIDApCj4gKyNkZWZpbmUgVVRNSV9PRFRfNDVfT0hNX1RVTkUgMHgxNQo+ICsKPiArZW51 bSByb2NrY2hpcF91c2IzcGh5X3R5cGUgewo+ICsgVVNCM1BIWV9UWVBFX1VTQjIsCj4gKyBVU0Iz UEhZX1RZUEVfVVNCMywKPiArIFVTQjNQSFlfVFlQRV9NQVgsCj4gK307Cj4gKwo+ICsvKioKPiAr ICogc3RydWN0IHJvY2tjaGlwX3VzYjNwaHlfcG9ydCAtIHVzYi1waHkgcG9ydCBkYXRhLgo+ICsg KiBAcGh5OiBwb3J0IHVzYiBwaHkgc3RydWN0Lgo+ICsgKiBAcmVnbWFwOiBwb3J0IHJlZ21hcC4K PiArICogQHR5cGU6IHBvcnQgdXNiIHBoeSB0eXBlLgo+ICsgKi8KPiArc3RydWN0IHJvY2tjaGlw X3VzYjNwaHlfcG9ydCB7Cj4gKyBzdHJ1Y3QgcGh5ICpwaHk7Cj4gKyBzdHJ1Y3QgcmVnbWFwICpy ZWdtYXA7Cj4gKyBlbnVtIHJvY2tjaGlwX3VzYjNwaHlfdHlwZSB0eXBlOwo+ICt9Owo+ICsKPiAr c3RydWN0IHJvY2tjaGlwX3VzYjNwaHkgewo+ICsgc3RydWN0IGRldmljZSAqZGV2Owo+ICsgc3Ry dWN0IHJlZ21hcCAqcmVnbWFwOwo+ICsgc3RydWN0IGNsayAqY2xrX3BpcGU7Cj4gKyBzdHJ1Y3Qg Y2xrICpjbGtfb3RnOwo+ICsgc3RydWN0IGNsayAqY2xrX3JlZjsKPiArIHN0cnVjdCByZXNldF9j b250cm9sICp1M3Bvcl9yc3Q7Cj4gKyBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqdTJwb3JfcnN0Owo+ ICsgc3RydWN0IHJlc2V0X2NvbnRyb2wgKnBpcGVfcnN0Owo+ICsgc3RydWN0IHJlc2V0X2NvbnRy b2wgKnV0bWlfcnN0Owo+ICsgc3RydWN0IHJlc2V0X2NvbnRyb2wgKnBpcGVfYXBiX3JzdDsKPiAr IHN0cnVjdCByZXNldF9jb250cm9sICp1dG1pX2FwYl9yc3Q7Cj4gKyBzdHJ1Y3Qgcm9ja2NoaXBf dXNiM3BoeV9wb3J0IHBvcnRzW1VTQjNQSFlfVFlQRV9NQVhdOwo+ICsgaW50IGJ2YWxpZF9pcnE7 Cj4gKyBpbnQgaWRfaXJxOwo+ICsgaW50IGxzX2lycTsKPiArIGludCByeGRldF9pcnE7Cj4gK307 Cj4gKwo+ICtzdHJ1Y3QgdXNiM3BoeV9jb25maWcgewo+ICsgdW5zaWduZWQgaW50IHJlZzsKPiAr IHVuc2lnbmVkIGludCBtYXNrOwo+ICsgdTggZGVmOwo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCB1c2IzcGh5X2NvbmZpZyByazMzMjhfcnhfY29uZmlnW10gPSB7Cj4gKyB7IFBJUEVf UkVHXzE1MCwgUElQRV9SWF9DRFJfU1BFRURfTUFTSywgUElQRV9SWF9DRFJfU1BFRURfVFVORSB9 LAo+ICsgeyBQSVBFX1JFR18wQzgsIFBJUEVfUlhfQ0RSX0NIR19QVU1QX01BU0ssIFBJUEVfUlhf Q0RSX0NIR19QVU1QX1RVTkUgfSwKPiArIHsgUElQRV9SRUdfMTQ4LCBQSVBFX1JYX0NIR19QVU1Q X0RJVl8yLCBQSVBFX1JYX0NIR19QVU1QX0RJVl8yIH0sCj4gKyB7IFBJUEVfUkVHXzA2OCwgUElQ RV9SWF9DVExFX0dBSU5fTUFTSywgUElQRV9SWF9DVExFX0dBSU5fVFVORSB9LAo+ICsvLyB7IFBJ UEVfUkVHXzFDNCwgUElQRV9SWF9PRFRfQVVUT19ESVMsIFBJUEVfUlhfT0RUX0FVVE9fRElTIH0s Cj4gKyB7IFBJUEVfUkVHXzA3MCwgUElQRV9SWF9PRFRfUkVTX01JRF9NQVNLLCBQSVBFX1JYX09E VF9SRVNfTUlEX1RVTkUgfSwKPiArIHsgUElQRV9SRUdfMDZDLCBQSVBFX1JYX09EVF9SRVNfSElH SF9NQVNLLCBQSVBFX1JYX09EVF9SRVNfSElHSF9UVU5FIH0sCj4gKyB7IFBJUEVfUkVHXzA2MCwg UElQRV9SWF9DVExFX0ZSRVFfQldfTUFTSywgUElQRV9SWF9DVExFX0ZSRVFfQldfVFVORSB9LAo+ ICsgeyBVTktOT1dOX1BJUEVfUkVHXzEwQywgVU5LTk9XTl9SRUZDTEtfMTBDXzI0TSwgVU5LTk9X Tl9SRUZDTEtfMTBDXzI0TSB9LAo+ICsgeyBQSVBFX1JFR18wNjAsIFBJUEVfUlhfQ1RMRV9GUkVR X0JXX01BU0ssIFBJUEVfUlhfQ1RMRV9GUkVRX0JXX1RVTkUgfSwKPiArIHsgUElQRV9SRUdfMDY4 LCBQSVBFX1JYX0VRX0xPV19HQUlOX01BU0ssIFBJUEVfUlhfRVFfTE9XX0dBSU5fVFVORSB9LAo+ ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB1c2IzcGh5X2NvbmZpZyByazMzMjhfdHhf Y29uZmlnW10gPSB7Cj4gKyB7IFBJUEVfUkVHXzE4MCwgUElQRV9UWF9CSUFTX1JFRl9WT0xUX01B U0ssIFBJUEVfVFhfQklBU19SRUZfVk9MVF8yNTAgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgdXNiM3BoeV9jb25maWcgcmszMzI4X3NzY19jb25maWdbXSA9IHsKPiArIHsgVU5L Tk9XTl9QSVBFX1JFR18wMDAsIFVOS05PV05fU1NDXzAwMF9NQVNLLCBVTktOT1dOX1NTQ18wMDBf RU5BQkxFIH0sCj4gKyB7IFVOS05PV05fUElQRV9SRUdfMTIwLCBVTktOT1dOX1NTQ18xMjBfTUFT SywgVU5LTk9XTl9TU0NfMTIwX0VOQUJMRSB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCB1c2IzcGh5X2NvbmZpZyByazMzMjhfdXRtaV9jb25maWdbXSA9IHsKPiArIHsgVVRNSV9S RUdfMDMwLCBVVE1JX0VOQUJMRV9QUkVfRU1QSF9NQVNLLCBVVE1JX0VOQUJMRV9QUkVfRU1QSCB9 LAo+ICsgeyBVVE1JX1JFR18wNDAsIFVUTUlfVFhfUFJFX0VNUEhfU1RSX01BU0ssIFVUTUlfVFhf UFJFX0VNUEhfV0VBS0VTVCB9LAo+ICsgeyBVVE1JX1JFR18xMUMsIFVUTUlfT0RUXzQ1X09ITV9N QVNLLCBVVE1JX09EVF80NV9PSE1fVFVORSB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCB1c2IzcGh5X2NvbmZpZyByazMzMjhfcGlwZV9wd3JfZW5fY29uZmlnW10gPSB7Cj4gKyB7 IFBJUEVfUkVHXzFBOCwgUElQRV9MRE9fUE9XRVJfRElTLCBESVNBQkxFX0JJVFMgfSwKPiArIHsg UElQRV9SRUdfMDQ0LCBCQU5ER0FQX1BPV0VSX0RJU0FCTEUsIERJU0FCTEVfQklUUyB9LAo+ICsg eyBQSVBFX1JFR18xNTAsIFBJUEVfVFhfQklBU19FTiwgUElQRV9UWF9CSUFTX0VOIH0sCj4gKyB7 IFBJUEVfUkVHXzA4MCwgUElQRV9UWF9DT01NT05fTU9ERV9ESVMsIERJU0FCTEVfQklUUyB9LAo+ ICsgeyBQSVBFX1JFR18wQzAsIFBJUEVfVFhfT0JTX0VOLCBQSVBFX1RYX09CU19FTiB9LAo+ICsg eyBQSVBFX1JFR18wQzAsIFBJUEVfUlhfQ01fRU4sIFBJUEVfUlhfQ01fRU4gfSwKPiArfTsKPiAr Cj4gK3N0YXRpYyBpbnQgcm9ja2NoaXBfdXNiM3BoeV9yZXNldChzdHJ1Y3Qgcm9ja2NoaXBfdXNi M3BoeSAqdXNiM3BoeSwKPiArICBib29sIHJlc2V0LCBlbnVtIHJvY2tjaGlwX3VzYjNwaHlfdHlw ZSB0eXBlKQo+ICt7Cj4gKyBpZiAocmVzZXQpIHsKPiArIGlmICh0eXBlID09IFVTQjNQSFlfVFlQ RV9VU0IyKSB7Cj4gKyBjbGtfZGlzYWJsZV91bnByZXBhcmUodXNiM3BoeS0+Y2xrX290Zyk7Cj4g KyByZXNldF9jb250cm9sX2Fzc2VydCh1c2IzcGh5LT51dG1pX3JzdCk7Cj4gKyByZXNldF9jb250 cm9sX2Fzc2VydCh1c2IzcGh5LT51MnBvcl9yc3QpOwo+ICsgfQo+ICsgaWYgKHR5cGUgPT0gVVNC M1BIWV9UWVBFX1VTQjMpIHsKPiArIGNsa19kaXNhYmxlX3VucHJlcGFyZSh1c2IzcGh5LT5jbGtf cGlwZSk7Cj4gKyByZXNldF9jb250cm9sX2Fzc2VydCh1c2IzcGh5LT5waXBlX3JzdCk7Cj4gKyBy ZXNldF9jb250cm9sX2Fzc2VydCh1c2IzcGh5LT51M3Bvcl9yc3QpOwo+ICsgfQo+ICsgfSBlbHNl IHsKPiArIGlmICh0eXBlID09IFVTQjNQSFlfVFlQRV9VU0IyKSB7Cj4gKyByZXNldF9jb250cm9s X2RlYXNzZXJ0KHVzYjNwaHktPnUycG9yX3JzdCk7Cj4gKyBmc2xlZXAoMTAwMCk7Cj4gKyBjbGtf cHJlcGFyZV9lbmFibGUodXNiM3BoeS0+Y2xrX290Zyk7Cj4gKyBmc2xlZXAoNTAwKTsKPiArIHJl c2V0X2NvbnRyb2xfZGVhc3NlcnQodXNiM3BoeS0+dXRtaV9yc3QpOwo+ICsgZnNsZWVwKDEwMCk7 Cj4gKyB9Cj4gKyBpZiAodHlwZSA9PSBVU0IzUEhZX1RZUEVfVVNCMykgewo+ICsgcmVzZXRfY29u dHJvbF9kZWFzc2VydCh1c2IzcGh5LT51M3Bvcl9yc3QpOwo+ICsgZnNsZWVwKDUwMCk7Cj4gKyBj bGtfcHJlcGFyZV9lbmFibGUodXNiM3BoeS0+Y2xrX3BpcGUpOwo+ICsgZnNsZWVwKDEwMDApOwo+ ICsgcmVzZXRfY29udHJvbF9kZWFzc2VydCh1c2IzcGh5LT5waXBlX3JzdCk7Cj4gKyBmc2xlZXAo MTAwKTsKPiArIH0KPiArIH0KPiArIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0 dXJuX3Qgcm9ja2NoaXBfdXNiM3BoeV9saW5lc3RhdGVfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEp Cj4gK3sKPiArIHN0cnVjdCByb2NrY2hpcF91c2IzcGh5ICp1c2IzcGh5ID0gZGF0YTsKPiArIGlu dCB0bXA7Cj4gKwo+ICsgLyogY2hlY2sgaWYgdGhlIGludGVycnVwdCBpcyBlbmFibGVkICovCj4g KyByZWdtYXBfcmVhZCh1c2IzcGh5LT5yZWdtYXAsIFVTQjNQSFlfV0FLRVVQX0NPTl9SRUcsICZ0 bXApOwo+ICsgaWYgKCEodG1wICYgVVNCM19MSU5FU1RBVEVfSVJRX0VOKSkgewo+ICsgZGV2X3dh cm4odXNiM3BoeS0+ZGV2LCAiaW52YWxpZCBsaW5lc3RhdGUgaXJxIHJlY2VpdmVkXG4iKTsKPiAr IHJldHVybiBJUlFfTk9ORTsKPiArIH0KPiArCj4gKyByZWdtYXBfcmVhZCh1c2IzcGh5LT5yZWdt YXAsIFVTQjNQSFlfV0FLRVVQX1NUQVRfUkVHLCAmdG1wKTsKPiArIGlmICh0bXAgJiBVU0IzX0xJ TkVTVEFURV9JUlFfRU4pCj4gKyBkZXZfZGJnX3JhdGVsaW1pdGVkKHVzYjNwaHktPmRldiwgImxp bmVzdGF0ZSBpcnEgcmVjZWl2ZWRcbiIpOwo+ICsKPiArIC8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQg Ki8KPiArIHJlZ21hcF93cml0ZSh1c2IzcGh5LT5yZWdtYXAsIFVTQjNQSFlfV0FLRVVQX1NUQVRf UkVHLCBVU0IzX0xJTkVTVEFURV9JUlFfRU4pOwo+ICsKPiArIHJldHVybiBJUlFfSEFORExFRDsK PiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IHJvY2tjaGlwX3VzYjNwaHlfYnZhbGlkX2ly cShpbnQgaXJxLCB2b2lkICpkYXRhKQo+ICt7Cj4gKyBzdHJ1Y3Qgcm9ja2NoaXBfdXNiM3BoeSAq dXNiM3BoeSA9IGRhdGE7Cj4gKyBpbnQgdG1wOwo+ICsKPiArIC8qIGNoZWNrIGlmIHRoZSBpbnRl cnJ1cHQgaXMgZW5hYmxlZCAqLwo+ICsgcmVnbWFwX3JlYWQodXNiM3BoeS0+cmVnbWFwLCBVU0Iz UEhZX1dBS0VVUF9DT05fUkVHLCAmdG1wKTsKPiArIGlmICghKCh0bXAgJiBVU0IzX0JWQUxJRF9G QUxMX0lSUV9FTikgfCAodG1wICYgVVNCM19CVkFMSURfUklTRV9JUlFfRU4pKSkgewo+ICsgZGV2 X3dhcm5fcmF0ZWxpbWl0ZWQodXNiM3BoeS0+ZGV2LCAiaW52YWxpZCBidmFsaWQgaXJxIHJlY2Vp dmVkXG4iKTsKPiArIHJldHVybiBJUlFfTk9ORTsKPiArIH0KPiArCj4gKyByZWdtYXBfcmVhZCh1 c2IzcGh5LT5yZWdtYXAsIFVTQjNQSFlfV0FLRVVQX1NUQVRfUkVHLCAmdG1wKTsKPiArIGlmICh0 bXAgJiBVU0IzX0JWQUxJRF9GQUxMX0lSUV9FTikKPiArIGRldl9kYmcodXNiM3BoeS0+ZGV2LCAi YnZhbGlkIGZhbGxpbmcgaXJxIHJlY2VpdmVkXG4iKTsKPiArIGlmICh0bXAgJiBVU0IzX0JWQUxJ RF9SSVNFX0lSUV9FTikKPiArIGRldl9kYmcodXNiM3BoeS0+ZGV2LCAiYnZhbGlkIHJpc2luZyBp cnEgcmVjZWl2ZWRcbiIpOwo+ICsKPiArIC8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KPiArIHJl Z21hcF93cml0ZSh1c2IzcGh5LT5yZWdtYXAsIFVTQjNQSFlfV0FLRVVQX1NUQVRfUkVHLCBVU0Iz X0JWQUxJRF9DTEVBUl9NQVNLKTsKPiArCj4gKyByZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpcnFyZXR1cm5fdCByb2NrY2hpcF91c2IzcGh5X2lkX2lycShpbnQgaXJxLCB2 b2lkICpkYXRhKQo+ICt7Cj4gKyBzdHJ1Y3Qgcm9ja2NoaXBfdXNiM3BoeSAqdXNiM3BoeSA9IGRh dGE7Cj4gKyBpbnQgdG1wOwo+ICsKPiArIC8qIGNoZWNrIGlmIHRoZSBpbnRlcnJ1cHQgaXMgZW5h YmxlZCAqLwo+ICsgcmVnbWFwX3JlYWQodXNiM3BoeS0+cmVnbWFwLCBVU0IzUEhZX1dBS0VVUF9D T05fUkVHLCAmdG1wKTsKPiArIGlmICghKCh0bXAgJiBVU0IzX0lEX0ZBTExfSVJRX0VOKSB8ICh0 bXAgJiBVU0IzX0lEX1JJU0VfSVJRX0VOKSkpIHsKPiArIGRldl93YXJuKHVzYjNwaHktPmRldiwg ImludmFsaWQgaWQgaXJxIHJlY2VpdmVkXG4iKTsKPiArIHJldHVybiBJUlFfTk9ORTsKPiArIH0K PiArCj4gKyByZWdtYXBfcmVhZCh1c2IzcGh5LT5yZWdtYXAsIFVTQjNQSFlfV0FLRVVQX1NUQVRf UkVHLCAmdG1wKTsKPiArIGlmICh0bXAgJiBVU0IzX0lEX0ZBTExfSVJRX0VOKQo+ICsgZGV2X2Ri Zyh1c2IzcGh5LT5kZXYsICJpZCBmYWxsaW5nIGlycSByZWNlaXZlZFxuIik7Cj4gKyBpZiAodG1w ICYgVVNCM19JRF9SSVNFX0lSUV9FTikKPiArIGRldl9kYmcodXNiM3BoeS0+ZGV2LCAiaWQgcmlz aW5nIGlycSByZWNlaXZlZFxuIik7Cj4gKwo+ICsgLyogY2xlYXIgdGhlIGludGVycnVwdCAqLwo+ ICsgcmVnbWFwX3dyaXRlKHVzYjNwaHktPnJlZ21hcCwgVVNCM1BIWV9XQUtFVVBfU1RBVF9SRUcs IFVTQjNfSURfQ0xFQVJfTUFTSyk7Cj4gKwo+ICsgcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaXJxcmV0dXJuX3Qgcm9ja2NoaXBfdXNiM3BoeV9yeGRldF9pcnEoaW50IGly cSwgdm9pZCAqZGF0YSkKPiArewo+ICsgc3RydWN0IHJvY2tjaGlwX3VzYjNwaHkgKnVzYjNwaHkg PSBkYXRhOwo+ICsgaW50IHRtcDsKPiArCj4gKyAvKiBjaGVjayBpZiB0aGUgaW50ZXJydXB0IGlz IGVuYWJsZWQgKi8KPiArIHJlZ21hcF9yZWFkKHVzYjNwaHktPnJlZ21hcCwgVVNCM1BIWV9XQUtF VVBfQ09OX1JFRywgJnRtcCk7Cj4gKyBpZiAoISh0bXAgJiBVU0IzX1JYREVUX0lSUV9FTikpIHsK PiArIGRldl93YXJuKHVzYjNwaHktPmRldiwgImludmFsaWQgcnhkZXQgaXJxIHJlY2VpdmVkXG4i KTsKPiArIHJldHVybiBJUlFfTk9ORTsKPiArIH0KPiArCj4gKyByZWdtYXBfcmVhZCh1c2IzcGh5 LT5yZWdtYXAsIFVTQjNQSFlfV0FLRVVQX1NUQVRfUkVHLCAmdG1wKTsKPiArIGlmICh0bXAgJiBV U0IzX1JYREVUX0lSUV9FTikKPiArIGRldl9kYmdfcmF0ZWxpbWl0ZWQodXNiM3BoeS0+ZGV2LCAi cnhkZXQgaXJxIHJlY2VpdmVkXG4iKTsKPiArCj4gKyAvKiBjbGVhciB0aGUgaW50ZXJydXB0ICov Cj4gKyByZWdtYXBfd3JpdGUodXNiM3BoeS0+cmVnbWFwLCBVU0IzUEhZX1dBS0VVUF9TVEFUX1JF RywgVVNCM19SWERFVF9JUlFfRU4pOwo+ICsKPiArIHJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ ICsKPiArc3RhdGljIGludCByb2NrY2hpcF91c2IzcGh5X2J1bGtfdXBkYXRlKHN0cnVjdCByb2Nr Y2hpcF91c2IzcGh5ICp1c2IzcGh5LCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAsCj4gKyBjb25zdCBz dHJ1Y3QgdXNiM3BoeV9jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IHNpemUpCj4gK3sKPiAr IHVuc2lnbmVkIGludCBpLCB2YWwsIHRtcDsKPiArIGludCByZXQgPSAwOwo+ICsKPiArIGZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKPiArIHJldCA9IHJlZ21hcF9yZWFkKHJlZ21hcCwgY29u ZmlnW2ldLnJlZywgJnZhbCk7Cj4gKyBpZiAocmV0IDwgMCkgewo+ICsgZGV2X2Vycih1c2IzcGh5 LT5kZXYsICJmYWlsZWQgdG8gcmVhZCBhZGRyOiAweCUwMnhcbiIsIGNvbmZpZ1tpXS5yZWcpOwo+ ICsgcmV0dXJuIHJldDsKPiArIH0KPiArIHRtcCA9IHZhbCAmIH5jb25maWdbaV0ubWFzazsKPiAr IHRtcCB8PSBjb25maWdbaV0uZGVmOwo+ICsgZGV2X2RiZyh1c2IzcGh5LT5kZXYsICJ3cml0ZTog MHglMDN4IG9sZDogMHglMDJ4IG5ldzogMHglMDJ4XG4iLAo+ICsgY29uZmlnW2ldLnJlZywgdmFs LCB0bXApOwo+ICsgcmV0ID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgY29uZmlnW2ldLnJlZywgdG1w KTsKPiArIGlmIChyZXQgPCAwKSB7Cj4gKyBkZXZfZXJyKHVzYjNwaHktPmRldiwgImZhaWxlZCB0 byB3cml0ZSBhZGRyOiAweCUwMnhcbiIsIGNvbmZpZ1tpXS5yZWcpOwo+ICsgcmV0dXJuIHJldDsK PiArIH0KPiArIH0KPiArCj4gKyByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJv Y2tjaGlwX3VzYjNwaHlfY2FsY19yYXRlKHN0cnVjdCByb2NrY2hpcF91c2IzcGh5ICp1c2IzcGh5 LCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApCj4gK3sKPiArIGxvbmcgcmF0ZTsKPiArIHVuc2lnbmVk IGludCBtdWwsIGRpdiwgdGFyZ2V0ID0gKDUwMDAwMDAwMDAgLyAxMDAwMDApOwo+ICsKPiArIHJh dGUgPSBjbGtfZ2V0X3JhdGUodXNiM3BoeS0+Y2xrX3JlZikgLyAxMDAwMDA7Cj4gKyBpZiAocmF0 ZSA8IDApIHsKPiArIGRldl9lcnIodXNiM3BoeS0+ZGV2LCAiZmFpbGVkIHRvIGdldCByZWZjbGss ICVsZFxuIiwgcmF0ZSk7Cj4gKyByZXR1cm4gcmF0ZTsKPiArIC8qIGxvd2VzdCBwb3NzaWJsZSBz dXBwb3J0ZWQgY2xvY2sgaXMgNC44TUhaLCBoaWdoZXN0IHJrMzMyOCBjYW4gZG8gaXMgMS42R0ha ICovCj4gKyB9IGVsc2UgaWYgKChyYXRlIDwgNDgpIHwgKHJhdGUgPiAxNjAwMCkpIHsKPiArIGdv dG8gZXJyb3I7Cj4gKyB9Cj4gKwo+ICsgZm9yIChkaXYgPSAxOyBkaXYgPCAzMjsgZGl2KyspIHsK PiArIGZvciAobXVsID0gMTsgbXVsIDwgMTAyNDsgbXVsKyspIHsKPiArIGlmICgoKDIgKiByYXRl ICogbXVsKSAvIGRpdikgPT0gdGFyZ2V0KQo+ICsgZ290byBkb25lOwo+ICsgaWYgKCgoMiAqIHJh dGUgKiBtdWwpIC8gZGl2KSA+IHRhcmdldCkKPiArIGJyZWFrOwo+ICsgfQo+ICsgfQo+ICsKPiAr ZXJyb3I6Cj4gKyBkZXZfZXJyKHVzYjNwaHktPmRldiwgImludmFsaWQgcmVmY2xvY2sgcmF0ZSwg JWxkXG4iLCByYXRlICogMTAwMDAwKTsKPiArIHJldHVybiAtRUlOVkFMOwo+ICsKPiArZG9uZToK PiArIGRldl9kYmcodXNiM3BoeS0+ZGV2LCAicmVmY2xrIHJhdGUgbXVsOiAleCBkaXY6ICV4IHJh dGU6ICVsZFxuIiwgbXVsLCBkaXYsIChyYXRlICogMTAwMDAwKSk7Cj4gKwo+ICsgcmVnbWFwX3dy aXRlKHJlZ21hcCwgUElQRV9SRUdfMDIwLCAobXVsID4+IDIpICYgUElQRV9SWF9DRFJfTVVMVF9I SUdIX01BU0spOwo+ICsgcmVnbWFwX3dyaXRlKHJlZ21hcCwgUElQRV9SRUdfMDIwLCBkaXYgJiBQ SVBFX1RYX1BMTF9ESVZfTUFTSyk7Cj4gKyByZWdtYXBfd3JpdGUocmVnbWFwLCBQSVBFX1JFR18w MjgsIG11bCAmIFBJUEVfUlhfQ0RSX01VTFRfTE9XX01BU0spOwo+ICsgcmVnbWFwX3dyaXRlKHJl Z21hcCwgUElQRV9SRUdfMDMwLCBkaXYgJiBQSVBFX1JYX0NEUl9ESVZfTUFTSyk7Cj4gKyByZWdt YXBfd3JpdGUocmVnbWFwLCBQSVBFX1JFR18xMTgsIChtdWwgPj4gOCkgJiBQSVBFX1RYX1BMTF9N VUxfSElHSF9NQVNLKTsKPiArIHJlZ21hcF93cml0ZShyZWdtYXAsIFBJUEVfUkVHXzExQywgbXVs ICYgUElQRV9UWF9QTExfTVVMX0xPV19NQVNLKTsKPiArCj4gKyByZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCByb2NrY2hpcF91c2IzcGh5X2luaXQoc3RydWN0IHBoeSAqcGh5KQo+ICt7 Cj4gKyBzdHJ1Y3Qgcm9ja2NoaXBfdXNiM3BoeV9wb3J0ICpwb3J0ID0gcGh5X2dldF9kcnZkYXRh KHBoeSk7Cj4gKyBzdHJ1Y3Qgcm9ja2NoaXBfdXNiM3BoeSAqdXNiM3BoeSA9IGRldl9nZXRfZHJ2 ZGF0YShwaHktPmRldi5wYXJlbnQpOwo+ICsgaW50IHRtcCwgcmV0Owo+ICsKPiArIGRldl93YXJu KHVzYjNwaHktPmRldiwgInVzYjNwaHlfaW5pdCAlc1xuIiwgZGV2X25hbWUoJnBoeS0+ZGV2KSk7 Cj4gKyBjbGtfcHJlcGFyZV9lbmFibGUodXNiM3BoeS0+Y2xrX3JlZik7Cj4gKyByb2NrY2hpcF91 c2IzcGh5X3Jlc2V0KHVzYjNwaHksIGZhbHNlLCBwb3J0LT50eXBlKTsKPiArCj4gKyBpZiAocG9y dC0+dHlwZSA9PSBVU0IzUEhZX1RZUEVfVVNCMikgewo+ICsgLyoKPiArICogIkZvciBSSzMzMjgg U29DLCBwcmUtZW1waGFzaXMgYW5kIHByZS1lbXBoYXNpcyBzdHJlbmd0aCBtdXN0IGJlCj4gKyAq IHdyaXR0ZW4gYXMgb25lIGZpeGVkIHZhbHVlLiBUaGUgT0RUIDQ1b2htIHZhbHVlIHNob3VsZCBi ZSB0dW5lZAo+ICsgKiBmb3IgZGlmZmVyZW50IGJvYXJkcyB0byBhZGp1c3QgSFMgZXllIGhlaWdo dC4iCj4gKyAqLwo+ICsgZGV2X2RiZyh1c2IzcGh5LT5kZXYsICJ0dW5pbmcgVVRNSVxuIik7Cj4g KyByZXQgPSByb2NrY2hpcF91c2IzcGh5X2J1bGtfdXBkYXRlKHVzYjNwaHksIHBvcnQtPnJlZ21h cCwgcmszMzI4X3V0bWlfY29uZmlnLAo+ICsgICBBUlJBWV9TSVpFKHJrMzMyOF91dG1pX2NvbmZp ZykpOwo+ICsgfQo+ICsKPiArIGlmIChwb3J0LT50eXBlID09IFVTQjNQSFlfVFlQRV9VU0IzKSB7 Cj4gKyAvKiBFbmFibGUgaW50ZXJydXB0cyAqLwo+ICsgdG1wID0gKFVTQjNfTElORVNUQVRFX0lS UV9FTiB8IFVTQjNfSURfRkFMTF9JUlFfRU4gfCBVU0IzX0lEX1JJU0VfSVJRX0VOIHwKPiArIFVT QjNfUlhERVRfSVJRX0VOIHwgVVNCM19CVkFMSURfUklTRV9JUlFfRU4gfCBVU0IzX0JWQUxJRF9G QUxMX0lSUV9FTik7Cj4gKyB0bXAgfD0gKHRtcCA8PCBSRUdfV1JJVEVfU0hJRlQpOwo+ICsKPiAr IHJldCA9IHJlZ21hcF93cml0ZSh1c2IzcGh5LT5yZWdtYXAsIFVTQjNQSFlfV0FLRVVQX0NPTl9S RUcsIHRtcCk7Cj4gKyBpZiAocmV0IDwgMCkgewo+ICsgLyogaW50ZXJydXB0IHdyaXRlIGRldGVy bWluZXMgaWYgd2UgaGF2ZSB3cml0ZSBhY2Nlc3MgKi8KPiArIGRldl9lcnIodXNiM3BoeS0+ZGV2 LCAiZmFpbGVkIHRvIHdyaXRlIGludGVycnVwdHNcbiIpOwo+ICsgcmV0dXJuIHJldDsKPiArIH0K PiArCj4gKyAvKiBDb25maWd1cmUgZm9yIDI0TSByZWYgY2xrICovCj4gKyBkZXZfZGJnKHVzYjNw aHktPmRldiwgInNldHRpbmcgcGlwZSBmb3IgMjRNIHJlZmNsa1xuIik7Cj4gKyBpZiAocm9ja2No aXBfdXNiM3BoeV9jYWxjX3JhdGUodXNiM3BoeSwgdXNiM3BoeS0+cmVnbWFwKSkKPiArIHJldHVy biAtRUlOVkFMOwo+ICsKPiArIC8qIEVuYWJsZSBTU0MgKi8KPiArIHVkZWxheSgzKTsKPiArIGRl dl9kYmcodXNiM3BoeS0+ZGV2LCAic2V0dGluZyBwaXBlIGZvciBTU0NcbiIpOwo+ICsgcmV0ID0g cm9ja2NoaXBfdXNiM3BoeV9idWxrX3VwZGF0ZSh1c2IzcGh5LCBwb3J0LT5yZWdtYXAsIHJrMzMy OF9zc2NfY29uZmlnLAo+ICsgICBBUlJBWV9TSVpFKHJrMzMyOF9zc2NfY29uZmlnKSk7Cj4gKwo+ ICsgLyogIlR1bmluZyBSWCBmb3IgY29tcGxpYW5jZSBSSlRMIHRlc3QiICovCj4gKyBkZXZfZGJn KHVzYjNwaHktPmRldiwgInNldHRpbmcgcGlwZSBmb3IgUlggdHVuaW5nXG4iKTsKPiArIHJldCA9 IHJvY2tjaGlwX3VzYjNwaHlfYnVsa191cGRhdGUodXNiM3BoeSwgcG9ydC0+cmVnbWFwLCByazMz MjhfcnhfY29uZmlnLAo+ICsgICBBUlJBWV9TSVpFKHJrMzMyOF9yeF9jb25maWcpKTsKPiArIGlm IChyZXQpCj4gKyByZXR1cm4gcmV0Owo+ICsKPiArIC8qCj4gKyAqICJUdW5pbmcgVFggdG8gaW5j cmVhc2UgdGhlIGJpYXMgY3VycmVudCB1c2VkIGluIFRYIGRyaXZlciBhbmQgUlggRVEsCj4gKyAq IGl0IGNhbiBhbHNvIGluY3JlYXNlIHRoZSB2b2x0YWdlIG9mIExGUFMuIgo+ICsgKi8KPiArIGRl dl9kYmcodXNiM3BoeS0+ZGV2LCAic2V0dGluZyBwaXBlIGZvciBUWCB0dW5pbmdcbiIpOwo+ICsg cmV0ID0gcm9ja2NoaXBfdXNiM3BoeV9idWxrX3VwZGF0ZSh1c2IzcGh5LCBwb3J0LT5yZWdtYXAs Cj4gKyAgIHJrMzMyOF90eF9jb25maWcsIEFSUkFZX1NJWkUocmszMzI4X3R4X2NvbmZpZykpOwo+ ICsKPiArIC8qIFBvd2VyIHVwIHRoZSBwaXBlICovCj4gKyBkZXZfZGJnKHVzYjNwaHktPmRldiwg InNldHRpbmcgcGlwZSBwb3dlciBvblxuIik7Cj4gKyByZXQgPSByb2NrY2hpcF91c2IzcGh5X2J1 bGtfdXBkYXRlKHVzYjNwaHksIHBvcnQtPnJlZ21hcCwgcmszMzI4X3BpcGVfcHdyX2VuX2NvbmZp ZywKPiArICAgQVJSQVlfU0laRShyazMzMjhfcGlwZV9wd3JfZW5fY29uZmlnKSk7Cj4gKyB9Cj4g Kwo+ICsgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcm9ja2NoaXBfdXNiM3BoeV9w YXJzZV9kdChzdHJ1Y3Qgcm9ja2NoaXBfdXNiM3BoeSAqdXNiM3BoeSwgc3RydWN0IGRldmljZSAq ZGV2KQo+ICt7Cj4gKyBpbnQgcmV0Owo+ICsKPiArIHVzYjNwaHktPmNsa19waXBlID0gZGV2bV9j bGtfZ2V0KGRldiwgInVzYjNwaHktcGlwZSIpOwo+ICsgaWYgKElTX0VSUih1c2IzcGh5LT5jbGtf cGlwZSkpIHsKPiArIGRldl9lcnIoZGV2LCAiY291bGQgbm90IGdldCB1c2IzcGh5IHBpcGUgY2xv Y2tcbiIpOwo+ICsgcmV0dXJuIFBUUl9FUlIodXNiM3BoeS0+Y2xrX3BpcGUpOwo+ICsgfQo+ICsK PiArIHVzYjNwaHktPmNsa19vdGcgPSBkZXZtX2Nsa19nZXQoZGV2LCAidXNiM3BoeS1vdGciKTsK PiArIGlmIChJU19FUlIodXNiM3BoeS0+Y2xrX290ZykpIHsKPiArIGRldl9lcnIoZGV2LCAiY291 bGQgbm90IGdldCB1c2IzcGh5IG90ZyBjbG9ja1xuIik7Cj4gKyByZXR1cm4gUFRSX0VSUih1c2Iz cGh5LT5jbGtfb3RnKTsKPiArIH0KPiArCj4gKyB1c2IzcGh5LT5jbGtfcmVmID0gZGV2bV9jbGtf Z2V0KGRldiwgInJlZmNsay11c2Izb3RnIik7Cj4gKyBpZiAoSVNfRVJSKHVzYjNwaHktPmNsa19y ZWYpKSB7Cj4gKyBkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBnZXQgdXNiM3BoeSByZWYgY2xvY2tc biIpOwo+ICsgcmV0dXJuIFBUUl9FUlIodXNiM3BoeS0+Y2xrX3JlZik7Cj4gKyB9Cj4gKwo+ICsg dXNiM3BoeS0+dTJwb3JfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJ1c2IzcGh5 LXUyLXBvciIpOwo+ICsgaWYgKElTX0VSUih1c2IzcGh5LT51MnBvcl9yc3QpKSB7Cj4gKyBkZXZf ZXJyKGRldiwgIm5vIHVzYjNwaHktdTItcG9yIHJlc2V0IGNvbnRyb2wgZm91bmRcbiIpOwo+ICsg cmV0dXJuIFBUUl9FUlIodXNiM3BoeS0+dTJwb3JfcnN0KTsKPiArIH0KPiArCj4gKyB1c2IzcGh5 LT51M3Bvcl9yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGRldiwgInVzYjNwaHktdTMtcG9y Iik7Cj4gKyBpZiAoSVNfRVJSKHVzYjNwaHktPnUzcG9yX3JzdCkpIHsKPiArIGRldl9lcnIoZGV2 LCAibm8gdXNiM3BoeS11My1wb3IgcmVzZXQgY29udHJvbCBmb3VuZFxuIik7Cj4gKyByZXR1cm4g UFRSX0VSUih1c2IzcGh5LT51M3Bvcl9yc3QpOwo+ICsgfQo+ICsKPiArIHVzYjNwaHktPnBpcGVf cnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJ1c2IzcGh5LXBpcGUtbWFjIik7Cj4g KyBpZiAoSVNfRVJSKHVzYjNwaHktPnBpcGVfcnN0KSkgewo+ICsgZGV2X2VycihkZXYsICJubyB1 c2IzcGh5X3BpcGVfbWFjIHJlc2V0IGNvbnRyb2wgZm91bmRcbiIpOwo+ICsgcmV0dXJuIFBUUl9F UlIodXNiM3BoeS0+cGlwZV9yc3QpOwo+ICsgfQo+ICsKPiArIHVzYjNwaHktPnV0bWlfcnN0ID0g ZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJ1c2IzcGh5LXV0bWktbWFjIik7Cj4gKyBpZiAo SVNfRVJSKHVzYjNwaHktPnV0bWlfcnN0KSkgewo+ICsgZGV2X2VycihkZXYsICJubyB1c2IzcGh5 LXV0bWktbWFjIHJlc2V0IGNvbnRyb2wgZm91bmRcbiIpOwo+ICsgcmV0dXJuIFBUUl9FUlIodXNi M3BoeS0+dXRtaV9yc3QpOwo+ICsgfQo+ICsKPiArIHVzYjNwaHktPnBpcGVfYXBiX3JzdCA9IGRl dm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCAidXNiM3BoeS1waXBlLWFwYiIpOwo+ICsgaWYgKElT X0VSUih1c2IzcGh5LT5waXBlX2FwYl9yc3QpKSB7Cj4gKyBkZXZfZXJyKGRldiwgIm5vIHVzYjNw aHktcGlwZS1hcGIgcmVzZXQgY29udHJvbCBmb3VuZFxuIik7Cj4gKyByZXR1cm4gUFRSX0VSUih1 c2IzcGh5LT5waXBlX2FwYl9yc3QpOwo+ICsgfQo+ICsKPiArIHVzYjNwaHktPnV0bWlfYXBiX3Jz dCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCAidXNiM3BoeS11dG1pLWFwYiIpOwo+ICsg aWYgKElTX0VSUih1c2IzcGh5LT51dG1pX2FwYl9yc3QpKSB7Cj4gKyBkZXZfZXJyKGRldiwgIm5v IHVzYjNwaHktdXRtaS1hcGIgcmVzZXQgY29udHJvbCBmb3VuZFxuIik7Cj4gKyByZXR1cm4gUFRS X0VSUih1c2IzcGh5LT51dG1pX2FwYl9yc3QpOwo+ICsgfQo+ICsKPiArIHVzYjNwaHktPmxzX2ly cSA9IG9mX2lycV9nZXRfYnluYW1lKGRldi0+b2Zfbm9kZSwgImxpbmVzdGF0ZSIpOwo+ICsgaWYg KHVzYjNwaHktPmxzX2lycSA8IDApIHsKPiArIGRldl9lcnIoZGV2LCAibm8gbGluZXN0YXRlIGly cSBwcm92aWRlZFxuIik7Cj4gKyByZXR1cm4gdXNiM3BoeS0+bHNfaXJxOwo+ICsgfQo+ICsKPiAr IHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCB1c2IzcGh5LT5sc19pcnEsIE5V TEwsIHJvY2tjaGlwX3VzYjNwaHlfbGluZXN0YXRlX2lycSwKPiArIElSUUZfT05FU0hPVCwgInJv Y2tjaGlwX3VzYjNwaHlfbHMiLCB1c2IzcGh5KTsKPiArIGlmIChyZXQpIHsKPiArIGRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgbGluZXN0YXRlIGlycSBoYW5kbGVcbiIpOwo+ICsgcmV0 dXJuIHJldDsKPiArIH0KPiArCj4gKyB1c2IzcGh5LT5idmFsaWRfaXJxID0gb2ZfaXJxX2dldF9i eW5hbWUoZGV2LT5vZl9ub2RlLCAiYnZhbGlkIik7Cj4gKyBpZiAodXNiM3BoeS0+YnZhbGlkX2ly cSA8IDApIHsKPiArIGRldl9lcnIoZGV2LCAibm8gYnZhbGlkIGlycSBwcm92aWRlZFxuIik7Cj4g KyByZXR1cm4gdXNiM3BoeS0+YnZhbGlkX2lycTsKPiArIH0KPiArCj4gKyByZXQgPSBkZXZtX3Jl cXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgdXNiM3BoeS0+YnZhbGlkX2lycSwgTlVMTCwgcm9ja2No aXBfdXNiM3BoeV9idmFsaWRfaXJxLAo+ICsgSVJRRl9PTkVTSE9ULCAicm9ja2NoaXBfdXNiM3Bo eV9idmFsaWQiLCB1c2IzcGh5KTsKPiArIGlmIChyZXQpIHsKPiArIGRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIHJlcXVlc3QgYnZhbGlkIGlycSBoYW5kbGVcbiIpOwo+ICsgcmV0dXJuIHJldDsKPiAr IH0KPiArCj4gKyB1c2IzcGh5LT5pZF9pcnEgPSBvZl9pcnFfZ2V0X2J5bmFtZShkZXYtPm9mX25v ZGUsICJpZCIpOwo+ICsgaWYgKHVzYjNwaHktPmlkX2lycSA8IDApIHsKPiArIGRldl9lcnIoZGV2 LCAibm8gaWQgaXJxIHByb3ZpZGVkXG4iKTsKPiArIHJldHVybiB1c2IzcGh5LT5pZF9pcnE7Cj4g KyB9Cj4gKwo+ICsgcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIHVzYjNwaHkt PmlkX2lycSwgTlVMTCwgcm9ja2NoaXBfdXNiM3BoeV9pZF9pcnEsCj4gKyBJUlFGX09ORVNIT1Qs ICJyb2NrY2hpcF91c2IzcGh5LWlkIiwgdXNiM3BoeSk7Cj4gKyBpZiAocmV0KSB7Cj4gKyBkZXZf ZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IGlkIGlycSBoYW5kbGVcbiIpOwo+ICsgcmV0dXJu IHJldDsKPiArIH0KPiArCj4gKyB1c2IzcGh5LT5yeGRldF9pcnEgPSBvZl9pcnFfZ2V0X2J5bmFt ZShkZXYtPm9mX25vZGUsICJyeGRldCIpOwo+ICsgaWYgKHVzYjNwaHktPnJ4ZGV0X2lycSA8IDAp IHsKPiArIGRldl9lcnIoZGV2LCAibm8gcnhkZXQgaXJxIHByb3ZpZGVkXG4iKTsKPiArIHJldHVy biB1c2IzcGh5LT5yeGRldF9pcnE7Cj4gKyB9Cj4gKwo+ICsgcmV0ID0gZGV2bV9yZXF1ZXN0X3Ro cmVhZGVkX2lycShkZXYsIHVzYjNwaHktPnJ4ZGV0X2lycSwgTlVMTCwgcm9ja2NoaXBfdXNiM3Bo eV9yeGRldF9pcnEsCj4gKyBJUlFGX09ORVNIT1QsICJyb2NrY2hpcF91c2IzcGh5LXJ4ZGV0Iiwg dXNiM3BoeSk7Cj4gKyBpZiAocmV0KSB7Cj4gKyBkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1 ZXN0IHJ4ZGV0IGlycSBoYW5kbGVcbiIpOwo+ICsgcmV0dXJuIHJldDsKPiArIH0KPiArCj4gKyBy ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCByb2NrY2hpcF91c2IzcGh5X2V4aXQoc3Ry dWN0IHBoeSAqcGh5KQo+ICt7Cj4gKyBzdHJ1Y3Qgcm9ja2NoaXBfdXNiM3BoeV9wb3J0ICpwb3J0 ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gKyBzdHJ1Y3Qgcm9ja2NoaXBfdXNiM3BoeSAqdXNi M3BoeSA9IGRldl9nZXRfZHJ2ZGF0YShwaHktPmRldi5wYXJlbnQpOwo+ICsKPiArIGRldl9kYmco dXNiM3BoeS0+ZGV2LCAidXNiM3BoeV9zaHV0ZG93blxuIik7Cj4gKyByb2NrY2hpcF91c2IzcGh5 X3Jlc2V0KHVzYjNwaHksIHRydWUsIHBvcnQtPnR5cGUpOwo+ICsKPiArIHJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9vcHMgcm9ja2NoaXBfdXNiM3BoeV9vcHMg PSB7Cj4gKyAuaW5pdCA9IHJvY2tjaGlwX3VzYjNwaHlfaW5pdCwKPiArIC5leGl0ID0gcm9ja2No aXBfdXNiM3BoeV9leGl0LAo+ICsgLm93bmVyID0gVEhJU19NT0RVTEUsCj4gK307Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcm9ja2NoaXBfdXNiM3BoeV91dG1pX3Bv cnRfcmVnbWFwX2NvbmZpZyA9IHsKPiArIC5yZWdfYml0cyA9IDMyLAo+ICsgLnZhbF9iaXRzID0g MzIsCj4gKyAucmVnX3N0cmlkZSA9IDQsCj4gKyAubWF4X3JlZ2lzdGVyID0gMHg0MDAsCj4gKyAu Y2FjaGVfdHlwZSA9IFJFR0NBQ0hFX05PTkUsCj4gKyAuZmFzdF9pbyA9IHRydWUsCj4gKyAubmFt ZSA9ICJ1dG1pLXBvcnQiLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBf Y29uZmlnIHJvY2tjaGlwX3VzYjNwaHlfcGlwZV9wb3J0X3JlZ21hcF9jb25maWcgPSB7Cj4gKyAu cmVnX2JpdHMgPSAzMiwKPiArIC52YWxfYml0cyA9IDMyLAo+ICsgLnJlZ19zdHJpZGUgPSA0LAo+ ICsgLm1heF9yZWdpc3RlciA9IDB4NDAwLAo+ICsgLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9OT05F LAo+ICsgLmZhc3RfaW8gPSB0cnVlLAo+ICsgLm5hbWUgPSAicGlwZS1wb3J0IiwKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByb2NrY2hpcF91c2IzcGh5X3Jl Z21hcF9jb25maWcgPSB7Cj4gKyAucmVnX2JpdHMgPSAzMiwKPiArIC52YWxfYml0cyA9IDMyLAo+ ICsgLnJlZ19zdHJpZGUgPSA0LAo+ICsgLm1heF9yZWdpc3RlciA9IDB4NDAwLAo+ICsgLndyaXRl X2ZsYWdfbWFzayA9IFJFR19XUklURV9NQVNLLAo+ICsgLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9O T05FLAo+ICsgLmZhc3RfaW8gPSB0cnVlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCByb2NrY2hp cF91c2IzcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArIHN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKyBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w ID0gZGV2LT5vZl9ub2RlOwo+ICsgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZF9ucDsKPiArIHN0 cnVjdCBwaHlfcHJvdmlkZXIgKnByb3ZpZGVyOwo+ICsgc3RydWN0IHJvY2tjaGlwX3VzYjNwaHkg KnVzYjNwaHk7Cj4gKyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0g cm9ja2NoaXBfdXNiM3BoeV9yZWdtYXBfY29uZmlnOwo+ICsgdm9pZCBfX2lvbWVtICpiYXNlOwo+ ICsgaW50IGksIHJldDsKPiArCj4gKyBkZXZfZGJnKGRldiwgIlByb2JlIHVzYjNwaHkgbWFpbiBi bG9ja1xuIik7Cj4gKyB1c2IzcGh5ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp1c2IzcGh5 KSwgR0ZQX0tFUk5FTCk7Cj4gKyBpZiAoIXVzYjNwaHkpCj4gKyByZXR1cm4gLUVOT01FTTsKPiAr Cj4gKyByZXQgPSByb2NrY2hpcF91c2IzcGh5X3BhcnNlX2R0KHVzYjNwaHksIGRldik7Cj4gKyBp ZiAocmV0KSB7Cj4gKyBkZXZfZXJyKGRldiwgInBhcnNlIGR0IGZhaWxlZCAlaVxuIiwgcmV0KTsK PiArIHJldHVybiByZXQ7Cj4gKyB9Cj4gKwo+ICsgYmFzZSA9IGRldm1fb2ZfaW9tYXAoZGV2LCBu cCwgMCwgTlVMTCk7Cj4gKyBpZiAoSVNfRVJSKGJhc2UpKSB7Cj4gKyBkZXZfZXJyKGRldiwgImZh aWxlZCBwb3J0IGlvcmVtYXBcbiIpOwo+ICsgcmV0dXJuIFBUUl9FUlIoYmFzZSk7Cj4gKyB9Cj4g Kwo+ICsgdXNiM3BoeS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgYmFzZSwg JnJlZ21hcF9jb25maWcpOwo+ICsgaWYgKElTX0VSUih1c2IzcGh5LT5yZWdtYXApKSB7Cj4gKyBk ZXZfZXJyKGRldiwgInJlZ21hcCBpbml0IGZhaWxlZFxuIik7Cj4gKyByZXR1cm4gUFRSX0VSUih1 c2IzcGh5LT5yZWdtYXApOwo+ICsgfQo+ICsKPiArIHVzYjNwaHktPmRldiA9IGRldjsKPiArIHBs YXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHVzYjNwaHkpOwo+ICsKPiArIC8qIHBsYWNlIGJsb2Nr IGluIHJlc2V0ICovCj4gKyByZXNldF9jb250cm9sX2Fzc2VydCh1c2IzcGh5LT5waXBlX3JzdCk7 Cj4gKyByZXNldF9jb250cm9sX2Fzc2VydCh1c2IzcGh5LT51dG1pX3JzdCk7Cj4gKyByZXNldF9j b250cm9sX2Fzc2VydCh1c2IzcGh5LT51M3Bvcl9yc3QpOwo+ICsgcmVzZXRfY29udHJvbF9hc3Nl cnQodXNiM3BoeS0+dTJwb3JfcnN0KTsKPiArIHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHVzYjNwaHkt PnBpcGVfYXBiX3JzdCk7Cj4gKyByZXNldF9jb250cm9sX2Fzc2VydCh1c2IzcGh5LT51dG1pX2Fw Yl9yc3QpOwo+ICsKPiArIGZzbGVlcCgyMCk7Cj4gKwo+ICsgLyogdGFrZSBhcGIgaW50ZXJmYWNl IG91dCBvZiByZXNldCAqLwo+ICsgcmVzZXRfY29udHJvbF9kZWFzc2VydCh1c2IzcGh5LT51dG1p X2FwYl9yc3QpOwo+ICsgcmVzZXRfY29udHJvbF9kZWFzc2VydCh1c2IzcGh5LT5waXBlX2FwYl9y c3QpOwo+ICsKPiArIC8qIGVuYWJsZSB1c2IzcGh5IHJ4IGRldGVjdGlvbiB0byBmaXggZGlzY29u bmVjdGlvbiBpc3N1ZXMgKi8KPiArIHJlZ21hcF93cml0ZSh1c2IzcGh5LT5yZWdtYXAsIFVTQjNQ SFlfV0FLRVVQX0NPTl9SRUcsCj4gKyAgICAgKFVTQjNfUlhERVRfRU4gfCAoVVNCM19SWERFVF9F TiA8PCBSRUdfV1JJVEVfU0hJRlQpKSk7Cj4gKwo+ICsgZGV2X2RiZyhkZXYsICJDb21wbGV0ZWQg dXNiM3BoeSBjb3JlIHByb2JlXG4iKTsKPiArCj4gKyAvKiBwcm9iZSB0aGUgYWN0dWFsIHBvcnRz ICovCj4gKyBpID0gMDsKPiArIGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBj aGlsZF9ucCkgewo+ICsgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKnJlZ21hcF9wb3J0X2Nv bmZpZzsKPiArIHN0cnVjdCByb2NrY2hpcF91c2IzcGh5X3BvcnQgKnBvcnQgPSAmdXNiM3BoeS0+ cG9ydHNbaV07Cj4gKyBzdHJ1Y3QgcGh5ICpwaHk7Cj4gKwo+ICsgaWYgKG9mX25vZGVfbmFtZV9l cShjaGlsZF9ucCwgInV0bWktcG9ydCIpKSB7Cj4gKyBwb3J0LT50eXBlID0gVVNCM1BIWV9UWVBF X1VTQjI7Cj4gKyByZWdtYXBfcG9ydF9jb25maWcgPSAmcm9ja2NoaXBfdXNiM3BoeV91dG1pX3Bv cnRfcmVnbWFwX2NvbmZpZzsKPiArIH0gZWxzZSBpZiAob2Zfbm9kZV9uYW1lX2VxKGNoaWxkX25w LCAicGlwZS1wb3J0IikpIHsKPiArIHBvcnQtPnR5cGUgPSBVU0IzUEhZX1RZUEVfVVNCMzsKPiAr IHJlZ21hcF9wb3J0X2NvbmZpZyA9ICZyb2NrY2hpcF91c2IzcGh5X3BpcGVfcG9ydF9yZWdtYXBf Y29uZmlnOwo+ICsgfSBlbHNlIHsKPiArIGRldl9lcnIoZGV2LCAidW5rbm93biBjaGlsZCBub2Rl IHBvcnQgdHlwZSAlc1xuIiwgY2hpbGRfbnAtPm5hbWUpOwo+ICsgZ290byBlcnJfcG9ydDsKPiAr IH0KPiArCj4gKyBiYXNlID0gZGV2bV9vZl9pb21hcChkZXYsIGNoaWxkX25wLCAwLCBOVUxMKTsK PiArIGlmIChJU19FUlIoYmFzZSkpIHsKPiArIGRldl9lcnIoZGV2LCAiZmFpbGVkIHBvcnQgaW9y ZW1hcFxuIik7Cj4gKyByZXQgPSBQVFJfRVJSKGJhc2UpOwo+ICsgZ290byBlcnJfcG9ydDsKPiAr IH0KPiArCj4gKyBwb3J0LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCBiYXNl LCByZWdtYXBfcG9ydF9jb25maWcpOwo+ICsgaWYgKElTX0VSUihwb3J0LT5yZWdtYXApKSB7Cj4g KyBkZXZfZXJyKGRldiwgInJlZ21hcCBpbml0IGZhaWxlZFxuIik7Cj4gKyByZXQgPSBQVFJfRVJS KHBvcnQtPnJlZ21hcCk7Cj4gKyBnb3RvIGVycl9wb3J0Owo+ICsgfQo+ICsKPiArIHBoeSA9IGRl dm1fcGh5X2NyZWF0ZShkZXYsIGNoaWxkX25wLCAmcm9ja2NoaXBfdXNiM3BoeV9vcHMpOwo+ICsg aWYgKElTX0VSUihwaHkpKSB7Cj4gKyBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwaHkpLCAi ZmFpbGVkIHRvIGNyZWF0ZSBwaHlcbiIpOwo+ICsgcmV0ID0gUFRSX0VSUihwaHkpOwo+ICsgZ290 byBlcnJfcG9ydDsKPiArIH0KPiArCj4gKyBwb3J0LT5waHkgPSBwaHk7Cj4gKyBwaHlfc2V0X2Ry dmRhdGEocG9ydC0+cGh5LCBwb3J0KTsKPiArCj4gKyAvKiB0byBwcmV2ZW50IG91dCBvZiBib3Vu ZGFyeSAqLwo+ICsgaWYgKCsraSA+PSBVU0IzUEhZX1RZUEVfTUFYKSB7Cj4gKyBvZl9ub2RlX3B1 dChjaGlsZF9ucCk7Cj4gKyBicmVhazsKPiArIH0KPiArCj4gKyBkZXZfaW5mbyhkZXYsICJDb21w bGV0ZWQgdXNiM3BoeSAlcyBwb3J0IGluaXRcbiIsIGNoaWxkX25wLT5uYW1lKTsKPiArIH0KPiAr Cj4gKyBwcm92aWRlciA9IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgb2ZfcGh5 X3NpbXBsZV94bGF0ZSk7Cj4gKyByZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHByb3ZpZGVyKTsKPiAr Cj4gK2Vycl9wb3J0Ogo+ICsgb2Zfbm9kZV9wdXQoY2hpbGRfbnApOwo+ICsgcmV0dXJuIHJldDsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcm9ja2NoaXBfdXNi M3BoeV9kdF9pZHNbXSA9IHsKPiArIHsgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMzI4LXVz YjNwaHkiLCB9LAo+ICt9OwoKaXNu4oCZdCB7IC8qIHNlbnRpbmVsICovIH0gbWlzc2luZyBoZXJl PwogCgo+ICsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcm9ja2NoaXBfdXNiM3BoeV9kdF9p ZHMpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcm9ja2NoaXBfdXNiM3Bo eV9kcml2ZXIgPSB7Cj4gKyAucHJvYmUgPSByb2NrY2hpcF91c2IzcGh5X3Byb2JlLAo+ICsgLmRy aXZlciA9IHsKPiArIC5uYW1lID0gInJvY2tjaGlwLXVzYjMtcGh5IiwKPiArIC5vZl9tYXRjaF90 YWJsZSA9IHJvY2tjaGlwX3VzYjNwaHlfZHRfaWRzLAo+ICsgfSwKPiArfTsKPiArCj4gK21vZHVs ZV9wbGF0Zm9ybV9kcml2ZXIocm9ja2NoaXBfdXNiM3BoeV9kcml2ZXIpOwo+ICsKPiArTU9EVUxF X0FVVEhPUigiUGV0ZXIgR2VpcyA8cGd3aXBlb3V0QGdtYWlsLmNvbT4iKTsKPiArTU9EVUxFX0RF U0NSSVBUSU9OKCJSb2NrY2hpcCBJbm5vc2lsaWNvbiBVU0IzUEhZIGRyaXZlciIpOwo+ICtNT0RV TEVfTElDRU5TRSgiR1BMIik7Cj4gLS0gCj4gMi4zOS41Cj4gCj4gCj4gX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBMaW51eC1yb2NrY2hpcCBtYWlsaW5n IGxpc3QKPiBMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hpcAoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LXJvY2tjaGlwIG1h aWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcm9ja2NoaXAK