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 7E3F4C83F25 for ; Mon, 21 Jul 2025 14:38:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:References :In-Reply-To:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=dOHxTK8AMkQICe8tx8gNgR/aUYpXs24lvmJi1zl0h4M=; b=dvAn3K2AefQmdz OqXsaLc91DRxaGK/sULv3m2tJ5I/PKfvWqS0Eb9ndMHXNhjVPR0+zpOR6OvDBpEViLyn/p5pTZaPv Bia2bCykmmG97eD2/0OYAX8iE9dX+m+7pquBxdbudaKeSzcD0WSYlmLtin11NvogVqJRbm/Fh4pa5 n9dkndX2USAON1hc7lHkr/U0cRnrbc/p2QDJiDnJbXWDbcqJ7+s4sgil4gKWxwLPj/jHgV50Yk4of bfgUH0iIbN5IBhYubeZmow5KW5Gs3Ordj+Tzljq+5XEQA+l9TNz5Ml1lcBYtehKoc/TA9u9uKr33e HqnJdg6JGp46z87F4P0Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1udreY-0000000HYUv-2VlT; Mon, 21 Jul 2025 14:38:06 +0000 Received: from ni.piap.pl ([195.187.100.5]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1udqNh-0000000HMkM-25Qa; Mon, 21 Jul 2025 13:16:40 +0000 Received: from t19.piap.pl (OSB1819.piap.pl [10.0.9.19]) by ni.piap.pl (Postfix) with ESMTPS id 8320AC3EEAD7; Mon, 21 Jul 2025 15:16:28 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 ni.piap.pl 8320AC3EEAD7 From: =?utf-8?Q?Krzysztof_Ha=C5=82asa?= To: Stefan Klug Cc: Dafna Hirschfeld , Laurent Pinchart , Heiko Stuebner , Paul Elder , Jacopo Mondi , Ondrej Jirman , linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: FYI: i.MX8MP ISP (RKISP1) MI registers corruption In-Reply-To: <175308758352.3134829.9472501038683860006@localhost> (Stefan Klug's message of "Mon, 21 Jul 2025 10:46:23 +0200") References: <175308758352.3134829.9472501038683860006@localhost> Date: Mon, 21 Jul 2025 15:16:28 +0200 Message-ID: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250721_061637_877239_223E373D X-CRM114-Status: GOOD ( 25.35 ) 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 SGkgU3RlZmFuLAoKU3RlZmFuIEtsdWcgPHN0ZWZhbi5rbHVnQGlkZWFzb25ib2FyZC5jb20+IHdy aXRlczoKCj4+ID4gVGhlIHByb2JsZW1zIHNob3cgdGhlbXNlbHZlcyBtYXliZSBpbiA1JSBvciAx MCUgb2YgYm9vdHMuCj4KPiBIb3cgZG8geW91IGRldGVjdCBpZiB0aGUgY3VycmVudCBib290IHdh cyBhICJmYXVsdHkiIG9uZT8KCkkganVzdCB0cnkgdG8gcnVuIHRoZSB0ZXN0ZXIuCgpOT1RFOiBt YWtlIHN1cmUgeW91IGRvbid0IHJ1biBpdCBhZ2FpbnN0IGEgc2xlZXBpbmcgSVNQIChjbG9jayBk aXNhYmxlZCwKcmVzZXQgZXRjKS4gSSBqdXN0IHJ1biB0aGUgY2FtZXJhIGFwcGxpY2F0aW9uIGlu IG9uZSBzZXNzaW9uIGFuZCBteQp0ZXN0ZXIgaW4gYW5vdGhlci4gQWxzbywgbWFrZSBzdXJlIHRo ZSAtbSBhcmd1bWVudCBhbmQgdGhlIGFkZHJlc3MgYXJlCmJvdGggdmFsaWQgZm9yIHRoZSBJU1Ag aW4gdXNlICgweDMyRTF4eHh4IGZvciB0aGUgZmlyc3QgTUlQSS9JU1AgYW5kCjB4MzJFMnh4eHgg Zm9yIHRoZSBzZWNvbmQpLgoKSWYgaXQgc2hvd3Mgc29tZXRoaW5nIGxpa2U6CgojIC4vYW5hbHl6 ZV9taSAtbTEgLXMxMDAwMDAwMCAtYTB4MzJFMjE0MDAgLTgKVXNpbmcgTERQIFEqLCBRKiwgW1gq XSBpbnN0cnVjdGlvbnMgKDIgKiAxMjggYml0cykKYWRkcjogIDMyRTIxNDAwIDMyRTIxNDA0IDMy RTIxNDA4IDMyRTIxNDBDIDMyRTIxNDEwIDMyRTIxNDE0IDMyRTIxNDE4IDMyRTIxNDFDCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQp2YWx1ZXMgICA3QTIwMDEgICAgICAgMjAgM0MyNDAwMDAgICAxRkE0 MDAgICAgICAgIDAgICAgICAgIDAgICAgICAgIDAgM0MyQzAwMDAgY291bnQgMjI0MjkyMgp2YWx1 ZXMgICA3QTIwMDEgICAgICAgMjAgM0MzMDAwMDAgICAxRkE0MDAgICAgICAgIDAgICAgICAgIDAg ICAgICAgIDAgM0MyQzAwMDAgY291bnQgMTI2CnZhbHVlcyAgIDdBMjAwMSAgICAgICAyMCAzQzMw MDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzM4MDAwMCBjb3VudCAy MTA2ODAxCnZhbHVlcyAgIDdBMjAwMSAgICAgICAyMCAzQzNDMDAwMCAgIDFGQTQwMCAgICAgICAg MCAgICAgICAgMCAgICAgICAgMCAzQzM4MDAwMCBjb3VudCAxMTAKdmFsdWVzICAgN0EyMDAxICAg ICAgIDIwIDNDM0MwMDAwICAgMUZBNDAwICAgICAgICAwICAgICAgICAwICAgICAgICAwIDNDNDQw MDAwIGNvdW50IDE5ODIwNTkKdmFsdWVzICAgN0EyMDAxICAgICAgIDIwIDNDMEMwMDAwICAgMUZB NDAwICAgICAgICAwICAgICAgICAwICAgICAgICAwIDNDNDQwMDAwIGNvdW50IDk0CnZhbHVlcyAg IDdBMjAwMSAgICAgICAyMCAzQzBDMDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAgMCAgICAg ICAgMCAzQzE0MDAwMCBjb3VudCAxODcxNjIzCnZhbHVlcyAgIDdBMjAwMSAgICAgICAyMCAzQzE4 MDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzE0MDAwMCBjb3VudCA2 NAp2YWx1ZXMgICA3QTIwMDEgICAgICAgMjAgM0MxODAwMDAgICAxRkE0MDAgICAgICAgIDAgICAg ICAgIDAgICAgICAgIDAgM0MyMDAwMDAgY291bnQgMTc5NjE0Mgp2YWx1ZXMgICA3QTIwMDEgICAg ICAgMjAgM0MyNDAwMDAgICAxRkE0MDAgICAgICAgIDAgICAgICAgIDAgICAgICAgIDAgM0MyMDAw MDAgY291bnQgNTkKCnRoZW4gYWxsIGlzIGdvb2QuCgpPVE9IIGlmIGl0J3M6CiMgLi9hbmFseXpl X21pIC1tMSAtczEwMDAwMDAwIC1hMHgzMkUyMTQwMCAtOApVc2luZyBMRFAgUSosIFEqLCBbWCpd IGluc3RydWN0aW9ucyAoMiAqIDEyOCBiaXRzKQphZGRyOiAgMzJFMjE0MDAgMzJFMjE0MDQgMzJF MjE0MDggMzJFMjE0MEMgMzJFMjE0MTAgMzJFMjE0MTQgMzJFMjE0MTggMzJFMjE0MUMKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCnZhbHVlcyAgICAgICAgMCAgICAgICAyMCAzQzMwMDAwMCAgIDFGQTQw MCAgICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzM4MDAwMCBjb3VudCAxMzkKdmFsdWVzICAg N0EyMDAxICAgICAgIDIwIDNDMzAwMDAwICAgMUZBNDAwICAgICAgICAwICAgICAgICAwICAgICAg ICAwIDNDMzgwMDAwIGNvdW50IDIyMDIyMDUKdmFsdWVzICAgN0EyMDAxICAgICAgIDIwIDNDM0Mw MDAwICAgMUZBNDAwICAgICAgICAwICAgICAgICAwICAgICAgICAwIDNDMzgwMDAwIGNvdW50IDEw OAp2YWx1ZXMgICA3QTIwMDEgICAgICAgMjAgM0MzQzAwMDAgICAxRkE0MDAgICAgICAgIDAgICAg ICAgIDAgICAgICAgIDAgM0M0NDAwMDAgY291bnQgMjEyMTAzNgp2YWx1ZXMgICAgICAgIDAgICAg ICAgMjAgM0MzQzAwMDAgICAxRkE0MDAgICAgICAgIDAgICAgICAgIDAgICAgICAgIDAgM0M0NDAw MDAgY291bnQgMTE3CnZhbHVlcyAgIDdBMjAwMSAgICAgICAyMCAzQzBDMDAwMCAgIDFGQTQwMCAg ICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzQ0MDAwMCBjb3VudCAxMTIKdmFsdWVzICAgN0Ey MDAxICAgICAgIDIwIDNDMEMwMDAwICAgMUZBNDAwICAgICAgICAwICAgICAgICAwICAgICAgICAw IDNDMTQwMDAwIGNvdW50IDE5OTcyOTgKdmFsdWVzICAgICAgICAwICAgICAgIDIwIDNDMEMwMDAw ICAgMUZBNDAwICAgICAgICAwICAgICAgICAwICAgICAgICAwIDNDMTQwMDAwIGNvdW50IDg4CnZh bHVlcyAgIDdBMjAwMSAgICAgICAyMCAzQzE4MDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAg MCAgICAgICAgMCAzQzE0MDAwMCBjb3VudCAxMDYKdmFsdWVzICAgN0EyMDAxICAgICAgIDIwIDND MTgwMDAwICAgMUZBNDAwICAgICAgICAwICAgICAgICAwICAgICAgICAwIDNDMjAwMDAwIGNvdW50 IDE4OTM3NzUKdmFsdWVzICAgICAgICAwICAgICAgIDIwIDNDMTgwMDAwICAgMUZBNDAwICAgICAg ICAwICAgICAgICAwICAgICAgICAwIDNDMjAwMDAwIGNvdW50IDgwCnZhbHVlcyAgIDdBMjAwMSAg ICAgICAyMCAzQzI0MDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzIw MDAwMCBjb3VudCA3Mgp2YWx1ZXMgICA3QTIwMDEgICAgICAgMjAgM0MyNDAwMDAgICAxRkE0MDAg ICAgICAgIDAgICAgICAgIDAgICAgICAgIDAgM0MyQzAwMDAgY291bnQgMTc4NDY5Nwp2YWx1ZXMg ICAgICAgIDAgICAgICAgMjAgM0MyNDAwMDAgICAxRkE0MDAgICAgICAgIDAgICAgICAgIDAgICAg ICAgIDAgM0MyQzAwMDAgY291bnQgNjUKdmFsdWVzICAgN0EyMDAxICAgICAgIDIwIDNDMzAwMDAw ICAgMUZBNDAwICAgICAgICAwICAgICAgICAwICAgICAgICAwIDNDMkMwMDAwIGNvdW50IDY3CnZh bHVlcyAgICBGRDIwMCAgICAgICAyMCAzQzBDMDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAg MCAgICAgICAgMCAzQzE0MDAwMCBjb3VudCA0CnZhbHVlcyAgICBGRDIwMCAgICAgICAyMCAzQzND MDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzQ0MDAwMCBjb3VudCA1 CnZhbHVlcyAgICAxMDAwMSAgICAgICAyMCAzQzBDMDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAg ICAgMCAgICAgICAgMCAzQzE0MDAwMCBjb3VudCAzCnZhbHVlcyAgICBGRDIwMCAgICAgICAyMCAz QzE4MDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzIwMDAwMCBjb3Vu dCA2CnZhbHVlcyAgICAxMDAwMSAgICAgICAyMCAzQzE4MDAwMCAgIDFGQTQwMCAgICAgICAgMCAg ICAgICAgMCAgICAgICAgMCAzQzIwMDAwMCBjb3VudCAyCnZhbHVlcyAzQzIwMDAwMCAgICAgICAy MCAzQzE4MDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzIwMDAwMCBj b3VudCAxCnZhbHVlcyAzQzM4MDAwMCAgICAgICAyMCAzQzMwMDAwMCAgIDFGQTQwMCAgICAgICAg MCAgICAgICAgMCAgICAgICAgMCAzQzM4MDAwMCBjb3VudCAzCnZhbHVlcyAgICAxMDAwMSAgICAg ICAyMCAzQzMwMDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzM4MDAw MCBjb3VudCA1CnZhbHVlcyAgICBGRDIwMCAgICAgICAyMCAzQzI0MDAwMCAgIDFGQTQwMCAgICAg ICAgMCAgICAgICAgMCAgICAgICAgMCAzQzJDMDAwMCBjb3VudCAxCnZhbHVlcyAgICBGRDIwMCAg ICAgICAyMCAzQzMwMDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzM4 MDAwMCBjb3VudCAzCnZhbHVlcyAzQzJDMDAwMCAgICAgICAyMCAzQzI0MDAwMCAgIDFGQTQwMCAg ICAgICAgMCAgICAgICAgMCAgICAgICAgMCAzQzJDMDAwMCBjb3VudCAxCnZhbHVlcyAgICAxMDAw MSAgICAgICAyMCAzQzNDMDAwMCAgIDFGQTQwMCAgICAgICAgMCAgICAgICAgMCAgICAgICAgMCAz QzQ0MDAwMCBjb3VudCAxCgp0aGVuLCB3ZWxsLCBzb21ldGhpbmcncyBub3QgcmlnaHQgd2l0aCB0 aGUgcmVnaXN0ZXIgYXQgMHgzMkUyMTQwMC4KClRoZSBOWFAtc3VwcGxpZWQgZG9jcyBvbiB0aGUg SVNQIGFyZSBub3QgdmVyeSBoZWxwZnVsIGhlcmUsIGJ1dCBtYXliZQp0aGUgUm9ja2NoaXAgUksz Mjg4IElTUCBkb2NzIGFyZSAodGhlcmUgaXMgYSBQREYgb24gcm9ja2NoaXAuZnIpLgpJdCBzZWVt cyB0aGF0IHRoZSBwcm9ibGVtIHByb2JhYmx5IHNpdHMgaW4gdGhlIFBWQ0kvQUhCIFNsYXZlIC0+ IENUUkwgLT4KIlRvIGFsbCAoSVNQKSBtb2R1bGVzIiAoSSBkb24ndCBrbm93IGhvdyBJU1AgcmVn aXN0ZXJzIGFyZSBjb25uZWN0ZWQgdG8KdGhlIEFIQi9BWEkgb24gLk1YOE1QIGFuZCBpdCBwcm9i YWJseSBkb2Vzbid0IG1hdHRlciwgdGhlIHByb2JsZW0gaXMKc29tZXdoZXJlIGJldHdlZW4gdGhl ICJBSEIgU2xhdmUgYW5kIHRoZSAiYWxsIG1vZHVsZXMiKS4KSXQgYXBwZWFycyAib25seSIgTUkg cmVnaXN0ZXJzIGFyZSBhZmZlY3RlZCwgdGhvdWdoLgoKPiBDYW4geW91IGFsc28gc2hhcmUgdGhl IGtlcm5lbCB5b3UgYXJlIHVzaW5nPwoKSSdtIGN1cnJlbnRseSB1c2luZyB2Ni4xNSB3aXRoIHNl dmVyYWwgdW5yZWxhdGVkIHBhdGNoZXMuIEFwcGFyZW50bHkKb25seSB0aGlzIHRlc3QgcGF0Y2gg Y291bGQgYmUgcmVsZXZhbnQuIEJUVyBpdCB3b24ndCBoYXZlIG11Y2ggZWZmZWN0Cm9uIHRoZSB1 c2Vyc3BhY2UgdXRpbGl0eSAoYW5kIGl0J3Mgbm90IG5lZWRlZCBmb3IgdGhlIHV0aWxpdHksIGl0 J3MganVzdApmb3IgdGhlIGRyaXZlciBhbmQgdGhlIGNhbWVyYSBhcHBsaWNhdGlvbikuCgpIb3dl dmVyLCB0aG9zZSBwcm9ibGVtcyB3ZXJlIHByZXNlbnQgd2l0aCBOWFAtc3VwcGxpZWQga2VybmVs cywgdG9vLgoKaW5kZXggNjBjOTdiYjdiMThiLi45NTMwZTY1MzE5MWEgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvcmtpc3AxL3JraXNwMS1jb21tb24uYworKysg Yi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3JraXNwMS9ya2lzcDEtY29tbW9uLmMK QEAgLTE5MiwzICsxOTIsODAgQEAgdm9pZCBya2lzcDFfYmxzX3N3YXBfcmVncyhlbnVtIHJraXNw MV9mbXRfcmF3X3BhdF90eXBlIHBhdHRlcm4sCiAJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg PCA0OyArK2kpCiAJCW91dHB1dFtpXSA9IGlucHV0W3N3YXBbcGF0dGVybl1baV1dOwogfQorCisj ZGVmaW5lIE1JTl9NQVRDSEVTIDUKKyNkZWZpbmUgUkVBRFMgOQordTMyIHJraXNwMV9yZWFkKHN0 cnVjdCBya2lzcDFfZGV2aWNlICpya2lzcDEsIHVuc2lnbmVkIGludCBhZGRyKQoreworCWlmIChh ZGRyID49IFJLSVNQMV9DSUZfTUlfQkFTRSAmJiBhZGRyIDw9IFJLSVNQMV9DSUZfTUlfTVBfWV9Q SUNfU0laRSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgm cmtpc3AxLT5yZWdfbG9jaywgZmxhZ3MpOworCisJCXVpbnQzMl90IHZbUkVBRFNdOworCQl1bnNp Z25lZCBhLCBiLCBjbnQ7CisJCS8vIGkuTVg4TVAgSVNQIE1JIGludGVyZmFjZSBjb3JydXB0cyB0 cmFuc2ZlcnMgZnJvbSB0aW1lIHRvIHRpbWUKKwkJaWYgKGFkZHIgJSA4KSB7IC8vIDB4Li4uNCBh bmQgMHguLi5DCisJCQl1aW50MzJfdCB2YWx1ZTsKKwkJCWFkZHIgLT0gNDsKKwkJCS8vIGZpcnN0 IHZhbHVlIG1heSBiZSBjb3JydXB0ZWQsIHdlIGRpc2NhcmQgaXQgaW4gd3pyIHJlZ2lzdGVyCisJ CQlhc20gdm9sYXRpbGUgKCJsZHAgd3pyLCAldzAsIFsleDFdIiAiXG4iCisJCQkJICAgICAgOiAi PXIiICh2YWx1ZSkgLy8gb3V0cHV0CisJCQkJICAgICAgOiAiciIgKHJraXNwMS0+YmFzZV9hZGRy ICsgYWRkcikpOyAvLyBpbnB1dAorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmtpc3AxLT5y ZWdfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIHZhbHVlOworCQl9CisJCWlmIChhZGRyICUgMTYp IHsgLy8gMHguLi44CisJCQl1aW50NjRfdCB2YWx1ZTsKKwkJCWFkZHIgLT0gODsgLy8gNjQtYml0 OiB3aWxsIHJlYWQgMHguLi4wIGFuZCAweC4uLjgKKwkJCS8vIGZpcnN0IHZhbHVlIG1heSBiZSBj b3JydXB0ZWQsIHdlIGRpc2NhcmQgaXQgaW4geHpyIHJlZ2lzdGVyCisJCQlhc20gdm9sYXRpbGUg KCJsZHAgeHpyLCAleDAsIFsleDFdIiAiXG4iCisJCQkJICAgICAgOiAiPXIiICh2YWx1ZSkgLy8g b3V0cHV0CisJCQkJICAgICAgOiAiciIgKHJraXNwMS0+YmFzZV9hZGRyICsgYWRkcikpOyAvLyBp bnB1dAorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmtpc3AxLT5yZWdfbG9jaywgZmxhZ3Mp OworCQkJcmV0dXJuIHZhbHVlOyAvLyBsaXR0bGUgZW5kaWFuOiBvbmx5IGxlYXN0IHNpZ25pZmlj YW50IDMyIGJpdHMKKwkJfQorCisJCS8vIDB4Li4uMCBhZHJlc2VzIGFyZSBwcm9ibGVtYXRpYzog cmVhZCBtdWx0aXBsZSB0aW1lcworCQlmb3IgKGEgPSAwOyBhIDwgQVJSQVlfU0laRSh2KTsgYSsr KQorCQkJdlthXSA9IHJlYWRsKHJraXNwMS0+YmFzZV9hZGRyICsgYWRkcik7CisJCWZvciAoYSA9 IDA7IGEgPCBBUlJBWV9TSVpFKHYpIC0gTUlOX01BVENIRVMgKyAxOyBhKyspIHsKKwkJCWNudCA9 IDA7CisJCQlmb3IgKGIgPSBhOyBiIDwgQVJSQVlfU0laRSh2KTsgYisrKQorCQkJCWlmICh2W2Jd ID09IHZbYV0pIHsKKwkJCQkJY250Kys7CisJCQkJCWlmIChjbnQgPT0gTUlOX01BVENIRVMpIHsK KwkJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJraXNwMS0+cmVnX2xvY2ssIGZsYWdzKTsK KwkJCQkJCXJldHVybiB2W2FdOworCQkJCQl9CisJCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnJraXNwMS0+cmVnX2xvY2ssIGZsYWdzKTsKKwkJcHJfd2FybigiRXJyb3IgcmVh ZGluZyBJU1AgTUkgcmVnaXN0ZXIgMHglWCwgcmV0dXJuaW5nIHRoZSBsYXN0IHZhbHVlIDB4JVhc biIsIGFkZHIsIHZbQVJSQVlfU0laRSh2KSAtIDFdKTsKKwkJcmV0dXJuIHZbQVJSQVlfU0laRSh2 KSAtIDFdOworCX0KKworCXJldHVybiByZWFkbChya2lzcDEtPmJhc2VfYWRkciArIGFkZHIpOwor fQorCisjZGVmaW5lIE1BWF9XUklURVMgNQordm9pZCBya2lzcDFfd3JpdGUoc3RydWN0IHJraXNw MV9kZXZpY2UgKnJraXNwMSwgdW5zaWduZWQgaW50IGFkZHIsIHUzMiB2YWwpCit7CisJaWYgKGFk ZHIgPj0gUktJU1AxX0NJRl9NSV9CQVNFICYmCisJICAgIGFkZHIgPD0gUktJU1AxX0NJRl9NSV9N UF9ZX1BJQ19TSVpFICYmCisJICAgIGFkZHIgIT0gUktJU1AxX0NJRl9NSV9JQ1IgLyogd3JpdGUg b25seSAqLyAmJgorCSAgICBhZGRyICE9IFJLSVNQMV9DSUZfTUlfSU5JVCkgeworCQlmb3IgKHVu c2lnbmVkIGNudCA9IDA7IGNudCA8IE1BWF9XUklURVM7IGNudCsrKSB7CisJCQl1bnNpZ25lZCBs b25nIGZsYWdzOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJraXNwMS0+cmVnX2xvY2ssIGZsYWdz KTsKKwkJCXdyaXRlbCh2YWwsIHJraXNwMS0+YmFzZV9hZGRyICsgYWRkcik7CisJCQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZya2lzcDEtPnJlZ19sb2NrLCBmbGFncyk7CisKKwkJCWlmIChya2lz cDFfcmVhZChya2lzcDEsIGFkZHIpID09IHZhbCkKKwkJCQlyZXR1cm47IC8vIHN1Y2NlZWRlZAor CQl9CisJCXByX3dhcm4oIkVycm9yIHdyaXRpbmcgMHglWCB0byBJU1AgTUkgcmVnaXN0ZXIgMHgl WFxuIiwgdmFsLCBhZGRyKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlbCh2YWwsIHJraXNwMS0+ YmFzZV9hZGRyICsgYWRkcik7Cit9CgppbmRleCBjYTk1MmZkMDgyOWIuLjIxYmFiNGEzZTY0NyAx MDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9ya2lzcDEvcmtpc3Ax LWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvcmtpc3AxL3Jr aXNwMS1jb21tb24uaApAQCAtNTIwLDYgKzUyMCw3IEBAIHN0cnVjdCBya2lzcDFfZGV2aWNlIHsK IAlzdHJ1Y3QgbWVkaWFfcGlwZWxpbmUgcGlwZTsKIAlzdHJ1Y3QgbXV0ZXggc3RyZWFtX2xvY2s7 IC8qIHNlcmlhbGl6ZSB7c3RhcnQvc3RvcH1fc3RyZWFtaW5nIGNiIGJldHdlZW4gY2FwdHVyZSBk ZXZpY2VzICovCiAJc3RydWN0IHJraXNwMV9kZWJ1ZyBkZWJ1ZzsKKwlzcGlubG9ja190IHJlZ19s b2NrOyAvLyB1c2VkIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gTUkgcmVnaXN0ZXJzCiAJY29uc3Qg c3RydWN0IHJraXNwMV9pbmZvICppbmZvOwogCWludCBpcnFzW1JLSVNQMV9OVU1fSVJRU107CiAJ Ym9vbCBpcnFzX2VuYWJsZWQ7CkBAIC01NDcsMTYgKzU0OCw4IEBAIHN0cnVjdCBya2lzcDFfbWJ1 c19pbmZvIHsKIAl1bnNpZ25lZCBpbnQgZGlyZWN0aW9uOwogfTsKIAotc3RhdGljIGlubGluZSB2 b2lkCi1ya2lzcDFfd3JpdGUoc3RydWN0IHJraXNwMV9kZXZpY2UgKnJraXNwMSwgdW5zaWduZWQg aW50IGFkZHIsIHUzMiB2YWwpCi17Ci0Jd3JpdGVsKHZhbCwgcmtpc3AxLT5iYXNlX2FkZHIgKyBh ZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgcmtpc3AxX3JlYWQoc3RydWN0IHJraXNwMV9k ZXZpY2UgKnJraXNwMSwgdW5zaWduZWQgaW50IGFkZHIpCi17Ci0JcmV0dXJuIHJlYWRsKHJraXNw MS0+YmFzZV9hZGRyICsgYWRkcik7Ci19Cit1MzIgcmtpc3AxX3JlYWQoc3RydWN0IHJraXNwMV9k ZXZpY2UgKnJraXNwMSwgdW5zaWduZWQgaW50IGFkZHIpOwordm9pZCBya2lzcDFfd3JpdGUoc3Ry dWN0IHJraXNwMV9kZXZpY2UgKnJraXNwMSwgdW5zaWduZWQgaW50IGFkZHIsIHUzMiB2YWwpOwog CiAvKgogICogcmtpc3AxX2NhcF9lbnVtX21idXNfY29kZXMgLSBBIGhlbHBlciBmdW5jdGlvbiB0 aGF0IHJldHVybiB0aGUgaSd0aCBzdXBwb3J0ZWQgbWJ1cyBjb2RlCmRpZmYgLS1naXQgYS9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3JraXNwMS9ya2lzcDEtZGV2LmMgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3JraXNwMS9ya2lzcDEtZGV2LmMKaW5kZXggZGM2NWE3 OTI0ZjhhLi4wN2Y4N2I3MDE1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v cm9ja2NoaXAvcmtpc3AxL3JraXNwMS1kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3JvY2tjaGlwL3JraXNwMS9ya2lzcDEtZGV2LmMKQEAgLTYxMSw2ICs2MTEsNyBAQCBzdGF0aWMg aW50IHJraXNwMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlyZXR1cm4g cmV0OwogCiAJbXV0ZXhfaW5pdCgmcmtpc3AxLT5zdHJlYW1fbG9jayk7CisJc3Bpbl9sb2NrX2lu aXQoJnJraXNwMS0+cmVnX2xvY2spOwogCiAJcmtpc3AxLT5iYXNlX2FkZHIgPSBkZXZtX3BsYXRm b3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7CiAJaWYgKElTX0VSUihya2lzcDEtPmJhc2Vf YWRkcikpCgoKVGhlIChjdXJyZW50IHdvcmtpbmcgdmVyc2lvbiBvZikgYW5hbHl6ZV9taS5jLCBj b21waWxlIHdpdGggLU8yIC1scG9wdAphbmQgcGVyaGFwcyB3aXRoIC1XIC1XYWxsIC1Xbm8tc2ln bi1jb21wYXJlCi1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVduby1wb2ludGVyLXNp Z24uClRoZXJlIGlzIGFsc28gYSByZWd1bGFyIHJlYWRfdGVzdCAoYSBzaW5nbGUgcmVnaXN0ZXIg YW5kIHRoZSB3aG9sZSBJU1AKTUksIG1heSB1c2UgImFsdCByZWFkIiB3b3JrYXJvdW5kKSwgYW5k IGEgd3JpdGVfdGVzdCBmb3IgYSBzaW5nbGUKcmVnaXN0ZXIgYXMgd2VsbC4KCi8vIC0qLSBtb2Rl OiBjOyBjLWJhc2ljLW9mZnNldDogNDsgdGFiLXdpZHRoOiA0OyAtKi0KLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKLyoKICogQ29weXJpZ2h0IChDKSAyMDI1IFNpZcSHIEJhZGF3 Y3phIMWBdWthc2lld2ljegogKiAtIFByemVteXPFgm93eSBJbnN0eXR1dCBBdXRvbWF0eWtpIGkg UG9taWFyw7N3IFBJQVAKICogV3JpdHRlbiBieSBLcnp5c3p0b2YgSGHFgmFzYQogKgogKiBBbiBp Lk1YOE1QIElTUCBNSSByZWdpc3RlciB0ZXN0IHV0aWxpdHkgdjAuMQogKiBNYWtlIHN1cmUgdGhl IElTUCBpcyBhY3RpdmUgYXQgYWxsIHRpbWVzIHdoaWxlIHJ1bm5pbmcgdGhpcyBwcm9ncmFtLgog Ki8KCiNpbmNsdWRlIDxlcnIuaD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxwb3B0Lmg+ CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5n Lmg+CiNpbmNsdWRlIDxzeXMvbW1hbi5oPgoKI2RlZmluZSBJU1AxX0FERFIJCQkJMHgzMmUxMDAw MAkvLyBtdXN0IGJlIHBhZ2UtYWxpZ25lZAojZGVmaW5lIElTUDJfQUREUgkJCQkweDMyZTIwMDAw CiNkZWZpbmUgSVNQX1NJWkUJCQkJMHg0MDAwCS8vIHdpdGggaG9sZXMKI2RlZmluZSBNSV9PRkZT RVQJCQkJMHgxNDAwCiNkZWZpbmUgTUlfU0laRQkJCQkJMHgyMDAKI2RlZmluZSBNSV9SRUdTCQkJ CQkoTUlfU0laRSAvIDQgLyogMzItYml0ICovKQojZGVmaW5lIE1BWF9WQUxVRVMJCQkJMTI4IC8v IG1heCBkaWZmZXJlbnQgdmFsdWVzIGZvciBhIHJlZ2lzdGVyCgojZGVmaW5lIGVycm9yKC4uLikJ CQkJZXJyKEVYSVRfRkFJTFVSRSwgX19WQV9BUkdTX18pCiNkZWZpbmUgZXJyb3J4KC4uLikJCQkJ ZXJyeChFWElUX0ZBSUxVUkUsIF9fVkFfQVJHU19fKQojZGVmaW5lIEFSUkFZX1NJWkUoYXJyKQkJ CShzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCiNkZWZpbmUgUkVHKG9mZnNldCwgbmFt ZSwgZGVjKQlbKChvZmZzZXQpIC0gTUlfT0ZGU0VUKSAvIDRdIHsobmFtZSksIChkZWMpfQoKc3Rh dGljIGNvbnN0IHN0cnVjdCByZWcgewoJY29uc3QgY2hhciAqbmFtZTsKCWludCBkZWM7Cn0gcmVn X3RhYltNSV9SRUdTXSA9IHsKCVJFRygweDE0MDAsICJtaV9jdHJsIiwgMCksIC8vIEdsb2JhbCBj b250cm9sIHJlZ2lzdGVyCglSRUcoMHgxNDA0LCAibWlfaW5pdCIsIDApLCAvLyBDb250cm9sIHJl Z2lzdGVyIGZvciBhZGRyZXNzIGluaXQgYW5kIHNraXAgZnVuY3Rpb24gKHcpCgoJLy8gTWFpbiBw aWN0dXJlCglSRUcoMHgxNDA4LCAibWlfbXBfeV9iYXNlX2FkX2luaXQiLCAwKSwgLy8gQmFzZSBh ZGRyZXNzIGZvciBZIGNvbXBvbmVudCwgSlBFRyBvciByYXcgZGF0YQoJUkVHKDB4MTQwQywgIm1p X21wX3lfc2l6ZV9pbml0IiwgMSksIC8vIFNpemUgb2YgWSBjb21wb25lbnQsIEpQRUcgb3IgcmF3 IGRhdGEKCVJFRygweDE0MTAsICJtaV9tcF95X29mZnNfY250X2luaXQiLCAwKSwgLy8gT2Zmc2V0 IGNvdW50ZXIgaW5pdCB2YWx1ZSBmb3IgWSwgSlBFRyBvciByYXcgZGF0YQoJUkVHKDB4MTQxNCwg Im1pX21wX3lfb2Zmc19jbnRfc3RhcnQiLCAwKSwgLy8gT2Zmc2V0IGNvdW50ZXIgc3RhcnQgdmFs dWUgZm9yIFksIEpQRUcgb3IgcmF3IGRhdGEKCVJFRygweDE0MTgsICJtaV9tcF95X2lycV9vZmZz X2luaXQiLCAwKSwgLy8gRmlsbCBsZXZlbCBpbnRlcnJ1cHQgb2Zmc2V0IHZhbHVlIGZvciBZLCBK UEVHIG9yIHJhdyBkYXRhCglSRUcoMHgxNDFDLCAibWlfbXBfY2JfYmFzZV9hZF9pbml0IiwgMCks IC8vIEJhc2UgYWRkcmVzcyBmb3IgQ2IgY29tcG9uZW50IHJpbmcgYnVmZmVyCglSRUcoMHgxNDIw LCAibWlfbXBfY2Jfc2l6ZV9pbml0IiwgMSksIC8vIFNpemUgb2YgQ2IgY29tcG9uZW50IHJpbmcg YnVmZmVyCglSRUcoMHgxNDI0LCAibWlfbXBfY2Jfb2Zmc19jbnRfaW5pdCIsIDApLCAvLyBPZmZz ZXQgY291bnRlciBpbml0IHZhbHVlIGZvciBDYiBjb21wb25lbnQgcmluZyBidWZmZXIKCVJFRygw eDE0MjgsICJtaV9tcF9jYl9vZmZzX2NudF9zdGFydCIsIDApLCAvLyBPZmZzZXQgY291bnRlciBz dGFydCB2YWx1ZSBmb3IgQ2IgY29tcG9uZW50IHJpbmcgYnVmZmVyCglSRUcoMHgxNDJDLCAibWlf bXBfY3JfYmFzZV9hZF9pbml0IiwgMCksIC8vIEJhc2UgYWRkcmVzcyBmb3IgQ3IgY29tcG9uZW50 IHJpbmcgYnVmZmVyCglSRUcoMHgxNDMwLCAibWlfbXBfY3Jfc2l6ZV9pbml0IiwgMCksIC8vIFNp emUgb2YgQ3IgY29tcG9uZW50IHJpbmcgYnVmZmVyCglSRUcoMHgxNDM0LCAibWlfbXBfY3Jfb2Zm c19jbnRfaW5pdCIsIDApLCAvLyBPZmZzZXQgY291bnRlciBpbml0IHZhbHVlIGZvciBDciBjb21w b25lbnQgcmluZyBidWZmZXIKCVJFRygweDE0MzgsICJtaV9tcF9jcl9vZmZzX2NudF9zdGFydCIs IDApLCAvLyBPZmZzZXQgY291bnRlciBzdGFydCB2YWx1ZSBmb3IgQ3IgY29tcG9uZW50IHJpbmcg YnVmZmVyCgojaWYgMAoJLy8gU2VsZiBwaWN0dXJlCglSRUcoMHgxNDNDLCAibWlfc3BfeV9iYXNl X2FkX2luaXQiLCAwKSwgLy8gQmFzZSBhZGRyZXNzIGZvciBZIGNvbXBvbmVudCByaW5nIGJ1ZmZl cgoJUkVHKDB4MTQ0MCwgIm1pX3NwX3lfc2l6ZV9pbml0IiwgMSksIC8vIFNpemUgb2YgWSBjb21w b25lbnQgcmluZyBidWZmZXIKCVJFRygweDE0NDQsICJtaV9zcF95X29mZnNfY250X2luaXQiLCAw KSwgLy8gT2Zmc2V0IGNvdW50ZXIgaW5pdCB2YWx1ZSBmb3IgWSBjb21wb25lbnQgcmluZyBidWZm ZXIKCVJFRygweDE0NDgsICJtaV9zcF95X29mZnNfY250X3N0YXJ0IiwgMCksIC8vIE9mZnNldCBj b3VudGVyIHN0YXJ0IHZhbHVlIGZvciBZIGNvbXBvbmVudCByaW5nIGJ1ZmZlcgoJUkVHKDB4MTQ0 QywgIm1pX3NwX3lfbGxlbmd0aCIsIDEpLCAvLyBMaW5lIGxlbmd0aCBvZiBZIGNvbXBvbmVudAoJ UkVHKDB4MTQ1MCwgIm1pX3NwX2NiX2Jhc2VfYWRfaW5pdCIsIDApLCAvLyBCYXNlIGFkZHJlc3Mg Zm9yIENiIGNvbXBvbmVudCByaW5nIGJ1ZmZlcgoJUkVHKDB4MTQ1NCwgIm1pX3NwX2NiX3NpemVf aW5pdCIsIDEpLCAvLyBTaXplIG9mIENiIGNvbXBvbmVudCByaW5nIGJ1ZmZlcgoJUkVHKDB4MTQ1 OCwgIm1pX3NwX2NiX29mZnNfY250X2luaXQiLCAwKSwgLy8gT2Zmc2V0IGNvdW50ZXIgaW5pdCB2 YWx1ZSBmb3IgQ2IgY29tcG9uZW50IHJpbmcgYnVmZmVyCglSRUcoMHgxNDVDLCAibWlfc3BfY2Jf b2Zmc19jbnRfc3RhcnQiLCAwKSwgLy8gT2Zmc2V0IGNvdW50ZXIgc3RhcnQgdmFsdWUgZm9yIENi IGNvbXBvbmVudCByaW5nIGJ1ZmZlcgoJUkVHKDB4MTQ2MCwgIm1pX3NwX2NyX2Jhc2VfYWRfaW5p dCIsIDApLCAvLyBCYXNlIGFkZHJlc3MgZm9yIENyIGNvbXBvbmVudCByaW5nIGJ1ZmZlcgoJUkVH KDB4MTQ2NCwgIm1pX3NwX2NyX3NpemVfaW5pdCIsIDEpLCAvLyBTaXplIG9mIENyIGNvbXBvbmVu dCByaW5nIGJ1ZmZlcgoJUkVHKDB4MTQ2OCwgIm1pX3NwX2NyX29mZnNfY250X2luaXQiLCAwKSwg Ly8gT2Zmc2V0IGNvdW50ZXIgaW5pdCB2YWx1ZSBmb3IgQ3IgY29tcG9uZW50IHJpbmcgYnVmZmVy CglSRUcoMHgxNDZDLCAibWlfc3BfY3Jfb2Zmc19jbnRfc3RhcnQiLCAwKSwgLy8gT2Zmc2V0IGNv dW50ZXIgc3RhcnQgdmFsdWUgZm9yIENyIGNvbXBvbmVudCByaW5nIGJ1ZmZlcgojZW5kaWYKCglS RUcoMHgxNDcwLCAibWlfYnl0ZV9jbnQiLCAwKSwgLy8gQ291bnRlciB2YWx1ZSBvZiBKUEVHIG9y IFJBVyBkYXRhIGJ5dGVzCglSRUcoMHgxNDc0LCAibWlfY3RybF9zaGQiLCAwKSwgLy8gZ2xvYmFs IGNvbnRyb2wgaW50ZXJuYWwgc2hhZG93IHJlZ2lzdGVyCgoJLy8gTWFpbiBwaWN0dXJlCglSRUco MHgxNDc4LCAibWlfbXBfeV9iYXNlX2FkX3NoZCIsIDApLCAvLyBCYXNlIGFkZHJlc3Mgc2hhZG93 IHJlZ2lzdGVyIGZvciBZIGNvbXBvbmVudCwgSlBFRyBvciByYXcgZGF0YSByaW5nIGJ1ZmZlcgoJ UkVHKDB4MTQ3QywgIm1pX21wX3lfc2l6ZV9zaGQiLCAxKSwgLy8gU2l6ZSBzaGFkb3cgcmVnaXN0 ZXIgb2YgWSBjb21wb25lbnQsIEpQRUcgb3IgcmF3IGRhdGEKCVJFRygweDE0ODAsICJtaV9tcF95 X29mZnNfY250X3NoZCIsIDApLCAvLyBDdXJyZW50IG9mZnNldCBjb3VudGVyIG9mIFkgY29tcG9u ZW50LCBKUEVHIG9yIHJhdyBkYXRhIHJpbmcgYnVmZmVyCglSRUcoMHgxNDg0LCAibWlfbXBfeV9p cnFfb2Zmc19zaGQiLCAwKSwgLy8gU2hhZG93IHJlZ2lzdGVyIG9mIGZpbGwgbGV2ZWwgaW50ZXJy dXB0IG9mZnNldCB2YWx1ZSBmb3IgWSBjb21wb25lbnQsIEpQRUcgb3IgcmF3IGRhdGEKCVJFRygw eDE0ODgsICJtaV9tcF9jYl9iYXNlX2FkX3NoZCIsIDApLCAvLyBCYXNlIGFkZHJlc3Mgc2hhZG93 IHJlZ2lzdGVyIGZvciBDYiBjb21wb25lbnQgcmluZyBidWZmZXIKCVJFRygweDE0OEMsICJtaV9t cF9jYl9zaXplX3NoZCIsIDEpLCAvLyBTaXplIHNoYWRvdyByZWdpc3RlciBvZiBDYiBjb21wb25l bnQgcmluZyBidWZmZXIKCVJFRygweDE0OTAsICJtaV9tcF9jYl9vZmZzX2NudF9zaGQiLCAwKSwg Ly8gQ3VycmVudCBvZmZzZXQgY291bnRlciBvZiBDYiBjb21wb25lbnQgcmluZyBidWZmZXIKCVJF RygweDE0OTQsICJtaV9tcF9jcl9iYXNlX2FkX3NoZCIsIDApLCAvLyBCYXNlIGFkZHJlc3Mgc2hh ZG93IHJlZ2lzdGVyIGZvciBDciBjb21wb25lbnQgcmluZyBidWZmZXIKCVJFRygweDE0OTgsICJt aV9tcF9jcl9zaXplX3NoZCIsIDApLCAvLyBTaXplIHNoYWRvdyByZWdpc3RlciBvZiBDciBjb21w b25lbnQgcmluZyBidWZmZXIKCVJFRygweDE0OUMsICJtaV9tcF9jcl9vZmZzX2NudF9zaGQiLCAw KSwgLy8gQ3VycmVudCBvZmZzZXQgY291bnRlciBvZiBDciBjb21wb25lbnQgcmluZyBidWZmZXIK CiNpZiAwCgkvLyBTZWxmIHBpY3R1cmUKCVJFRygweDE0QTAsICJtaV9zcF95X2Jhc2VfYWRfc2hk IiwgMCksIC8vIEJhc2UgYWRkcmVzcyBzaGFkb3cgcmVnaXN0ZXIgZm9yIFkgY29tcG9uZW50IHJp bmcgYnVmZmVyCglSRUcoMHgxNEE0LCAibWlfc3BfeV9zaXplX3NoZCIsIDEpLCAvLyBTaXplIHNo YWRvdyByZWdpc3RlciBvZiBZIGNvbXBvbmVudCByaW5nIGJ1ZmZlcgoJUkVHKDB4MTRBOCwgIm1p X3NwX3lfb2Zmc19jbnRfc2hkIiwgMCksIC8vIEN1cnJlbnQgb2Zmc2V0IGNvdW50ZXIgb2YgWSBj b21wb25lbnQgcmluZyBidWZmZXIKCglSRUcoMHgxNEIwLCAibWlfc3BfY2JfYmFzZV9hZF9zaGQi LCAwKSwgLy8gQmFzZSBhZGRyZXNzIHNoYWRvdyByZWdpc3RlciBmb3IgQ2IgY29tcG9uZW50IHJp bmcgYnVmZmVyCglSRUcoMHgxNEI0LCAibWlfc3BfY2Jfc2l6ZV9zaGQiLCAxKSwgLy8gU2l6ZSBz aGFkb3cgcmVnaXN0ZXIgb2YgQ2IgY29tcG9uZW50IHJpbmcgYnVmZmVyCglSRUcoMHgxNEI4LCAi bWlfc3BfY2Jfb2Zmc19jbnRfc2hkIiwgMCksIC8vIEN1cnJlbnQgb2Zmc2V0IGNvdW50ZXIgb2Yg Q2IgY29tcG9uZW50IHJpbmcgYnVmZmVyCglSRUcoMHgxNEJDLCAibWlfc3BfY3JfYmFzZV9hZF9z aGQiLCAwKSwgLy8gQmFzZSBhZGRyZXNzIHNoYWRvdyByZWdpc3RlciBmb3IgQ3IgY29tcG9uZW50 IHJpbmcgYnVmZmVyCglSRUcoMHgxNEMwLCAibWlfc3BfY3Jfc2l6ZV9zaGQiLCAxKSwgLy8gU2l6 ZSBzaGFkb3cgcmVnaXN0ZXIgb2YgQ3IgY29tcG9uZW50IHJpbmcgYnVmZmVyCglSRUcoMHgxNEM0 LCAibWlfc3BfY3Jfb2Zmc19jbnRfc2hkIiwgMCksIC8vIEN1cnJlbnQgb2Zmc2V0IGNvdW50ZXIg b2YgQ3IgY29tcG9uZW50IHJpbmcgYnVmZmVyCiNlbmRpZgoKCVJFRygweDE0QzgsICJtaV9kbWFf eV9waWNfc3RhcnRfYWQiLCAxKSwgLy8gWSBjb21wb25lbnQgaW1hZ2Ugc3RhcnQgYWRkcmVzcwoJ UkVHKDB4MTRDQywgIm1pX2RtYV95X3BpY193aWR0aCIsIDEpLCAvLyBZIGNvbXBvbmVudCBpbWFn ZSB3aWR0aAoJUkVHKDB4MTREMCwgIm1pX2RtYV95X2xsZW5ndGgiLCAxKSwgLy8gWSBjb21wb25l bnQgb3JpZ2luYWwgbGluZSBsZW5ndGgKCVJFRygweDE0RDQsICJtaV9kbWFfeV9waWNfc2l6ZSIs IDEpLCAvLyBZIGNvbXBvbmVudCBpbWFnZSBzaXplCglSRUcoMHgxNEQ4LCAibWlfZG1hX2NiX3Bp Y19zdGFydF9hZCIsIDApLCAvLyBDYiBjb21wb25lbnQgaW1hZ2Ugc3RhcnQgYWRkcmVzcwoJUkVH KDB4MTRFOCwgIm1pX2RtYV9jcl9waWNfc3RhcnRfYWQiLCAwKSwgLy8gQ3IgY29tcG9uZW50IGlt YWdlIHN0YXJ0IGFkZHJlc3MKCglSRUcoMHgxNEY4LCAibWlfaW1zYyIsIDApLCAvLyBJbnRlcnJ1 cHQgTWFzayAoMTogaW50ZXJydXB0IGFjdGl2ZSwgMDogaW50ZXJydXB0IG1hc2tlZCkKCVJFRygw eDE0RkMsICJtaV9yaXMiLCAwKSwgLy8gUmF3IEludGVycnVwdCBTdGF0dXMKCVJFRygweDE1MDAs ICJtaV9taXMiLCAwKSwgLy8gTWFza2VkIEludGVycnVwdCBTdGF0dXMKCVJFRygweDE1MDQsICJt aV9pY3IiLCAwKSwgIC8vIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAodykKCVJFRygweDE1MDgs ICJtaV9pc3IiLCAwKSwgLy8gSW50ZXJydXB0IFNldCBSZWdpc3RlciAodykKCglSRUcoMHgxNTBD LCAibWlfc3RhdHVzIiwgMCksIC8vIE1JIFN0YXR1cyBSZWdpc3RlcgoJUkVHKDB4MTUxMCwgIm1p X3N0YXR1c19jbHIiLCAwKSwgLy8gTUkgU3RhdHVzIENsZWFyIFJlZ2lzdGVyICh3KQoJUkVHKDB4 MTUxNCwgIm1pX3NwX3lfcGljX3dpZHRoIiwgMSksIC8vIFkgY29tcG9uZW50IGltYWdlIHdpZHRo CglSRUcoMHgxNTE4LCAibWlfc3BfeV9waWNfaGVpZ2h0IiwgMSksIC8vIFkgY29tcG9uZW50IGlt YWdlIGhlaWdodAoJUkVHKDB4MTUxQywgIm1pX3NwX3lfcGljX3NpemUiLCAxKSwgLy8gWSBjb21w b25lbnQgaW1hZ2Ugc2l6ZQoJUkVHKDB4MTUyMCwgIm1pX2RtYV9jdHJsIiwgMCksIC8vIERNQSBj b250cm9sIHJlZ2lzdGVyCglSRUcoMHgxNTI0LCAibWlfZG1hX3N0YXJ0IiwgMCksIC8vIERNQSBz dGFydCByZWdpc3RlciAodykKCVJFRygweDE1MjgsICJtaV9kbWFfc3RhdHVzIiwgMCksIC8vIERN QSBzdGF0dXMgcmVnaXN0ZXIKCVJFRygweDE1MkMsICJtaV9waXhlbF9jbnQiLCAwKSwgLy8gQ291 bnRlciB2YWx1ZSBmb3IgZGVmZWN0IHBpeGVsIGxpc3QKCgkvLyBNYWluIHBpY3R1cmUKCVJFRygw eDE1MzAsICJtaV9tcF95X2Jhc2VfYWRfaW5pdDIiLCAwKSwgLy8gQmFzZSBhZGRyZXNzIDIgKHBp bmcgcG9uZykgZm9yIFkgY29tcG9uZW50LCBKUEVHIG9yIHJhdyBkYXRhCglSRUcoMHgxNTM0LCAi bWlfbXBfY2JfYmFzZV9hZF9pbml0MiIsIDApLCAvLyBCYXNlIGFkZHJlc3MgMiAocGluZ3Bvbmcp IGZvciBDYiBjb21wb25lbnQKCVJFRygweDE1MzgsICJtaV9tcF9jcl9iYXNlX2FkX2luaXQyIiwg MCksIC8vIEJhc2UgYWRkcmVzcyAyIChwaW5ncG9uZykgZm9yIENyIGNvbXBvbmVudCByaW5nIGJ1 ZmZlcgoKI2lmIDAKCS8vIFNlbGYgcGljdHVyZQoJUkVHKDB4MTUzQywgIm1pX3NwX3lfYmFzZV9h ZF9pbml0MiIsIDApLCAvLyBCYXNlIGFkZHJlc3MgMiAocGluZyBwb25nKSBmb3IgWSBjb21wb25l bnQsIEpQRUcgb3IgcmF3IGRhdGEKCVJFRygweDE1NDAsICJtaV9zcF9jYl9iYXNlX2FkX2luaXQy IiwgMCksIC8vIEJhc2UgYWRkcmVzcyAyIChwaW5ncG9uZykgZm9yIENiIGNvbXBvbmVudAoJUkVH KDB4MTU0NCwgIm1pX3NwX2NyX2Jhc2VfYWRfaW5pdDIiLCAwKSwgLy8gQmFzZSBhZGRyZXNzIDIg KHBpbmdwb25nKSBmb3IgQ3IgY29tcG9uZW50IHJpbmcgYnVmZmVyCiNlbmRpZgoKCVJFRygweDE1 NDgsICJtaV9yZXNlcnZlZF8xIiwgMCksCiNpZmRlZiBJU1BfTUlfSEFORFNIQUtFX05BTk8gLy8g bmV2ZXIgZGVmaW5lZAoJUkVHKDB4MTU0QywgIm1pX21wX2hhbmRzaGFrZSIsIDApLCAvLyBNSSBt cCBoYW5kc2hha2UgY29udHJvbCBmb3IgTmFubyBoYW5kc2hha2UKI2Vsc2UKCVJFRygweDE1NEMs ICJtaV9yZXNlcnZlZF8xXzEiLCAwKSwKI2VuZGlmCglSRUcoMHgxNTUwLCAibWlfbXBfeV9sbGVu Z3RoIiwgMSksIC8vIE1JIG1wIHkgbGxlbmd0aCBmb3IgTmFubyBoYW5kc2hha2UsCglSRUcoMHgx NTU0LCAibWlfbXBfeV9zbGljZV9vZmZzZXQiLCAwKSwgLy8gTUkgbXAgeSBzbGljZSBvZmZzZXQg Zm9yIE5hbm8gaGFuZHNoYWtlLAoJUkVHKDB4MTU1OCwgIm1pX21wX2Nfc2xpY2Vfb2Zmc2V0Iiwg MCksIC8vIE1JIG1wIGMgc2xpY2Ugb2Zmc2V0IGZvciBOYW5vIGhhbmRzaGFyZSwKCVJFRygweDE1 NUMsICJtaV9vdXRwdXRfYWxpZ25fZm9ybWF0IiwgMCksIC8vIE1JIG91dHB1dCBieXRlIHN3YXAg YW5kIExTQiBhbGlnbm1lbnQgY29udHJvbCBmb3IgTmFubwoJUkVHKDB4MTU2MCwgIm1pX21wX291 dHB1dF9maWZvX3NpemUiLCAwKSwgLy8gTUkgbXAgb3V0cHV0IGZpZm8gY29udHJvbCBmb3IgTmFu bywKCVJFRygweDE1NjQsICJtaV9tcF95X3BpY193aWR0aCIsIDEpLCAvLyBNSSBtcCB5IHdpZHRo IHBpeCBmb3IgTmFubyBoYW5kc2hha2UsCglSRUcoMHgxNTY4LCAibWlfbXBfeV9waWNfaGVpZ2h0 IiwgMSksIC8vIE1JIG1wIHkgaGVpZ2h0IHBpeCBmb3IgTmFubyBoYW5kc2hha2UsCglSRUcoMHgx NTZDLCAibWlfbXBfeV9waWNfc2l6ZSIsIDEpLCAvLyBNSSBtcCB5IHBpeCBzaXplIGZvciBOYW5v IGhhbmRzaGFyZQoKI2lmZGVmIElTUF9NSV9CUCAvLyBub3QgZGVmaW5lZAoJUkVHKDB4MTU4MCwg Im1pX2JwX2N0cmwiLCAwKSwKCVJFRygweDE1ODQsICJtaV9icF9yX2Jhc2VfYWRfc2hkIiwgMCks CglSRUcoMHgxNTg4LCAibWlfYnBfZ3JfYmFzZV9hZF9zaGQiLCAwKSwKCVJFRygweDE1OEMsICJt aV9icF9nYl9iYXNlX2FkX3NoZCIsIDApLAoJUkVHKDB4MTU5MCwgIm1pX2JwX2JfYmFzZV9hZF9z aGQiLCAwKSwKCVJFRygweDE1OTQsICJtaV9icF9yX29mZnNfY250X3NoZCIsIDApLAoJUkVHKDB4 MTU5OCwgIm1pX2JwX2dyX29mZnNfY250X3NoZCIsIDApLAoJUkVHKDB4MTU5QywgIm1pX2JwX2di X29mZnNfY250X3NoZCIsIDApLAoJUkVHKDB4MTVBMCwgIm1pX2JwX2Jfb2Zmc19jbnRfc2hkIiwg MCksCglSRUcoMHgxNUE0LCAibWlfYnBfd3Jfb2Zmc19jbnRfaW5pdCIsIDApLAoJUkVHKDB4MTVB OCwgIm1pX2JwX3dyX2lycV9vZmZzX3NoZCIsIDApLAoJUkVHKDB4MTVBQywgIm1pX2JwX3dyX2ly cV9vZmZzX2luaXQiLCAwKSwKCVJFRygweDE1QjAsICJtaV9icF93cl9zaXplX3NoZCIsIDApLAoJ UkVHKDB4MTVCNCwgIm1pX2JwX3dyX3NpemVfaW5pdCIsIDApLAoJUkVHKDB4MTVCOCwgIm1pX2Jw X3dyX2xsZW5ndGgiLCAwKSwKCVJFRygweDE1QkMsICJtaV9icF9waWNfd2lkdGgiLCAxKSwKCVJF RygweDE1QzAsICJtaV9icF9waWNfaGVpZ2h0IiwgMSksCglSRUcoMHgxNUM0LCAibWlfYnBfcGlj X3NpemUiLCAxKSwKCVJFRygweDE1QzgsICJtaV9icF9yX29mZnNfY250X3N0YXJ0IiwgMCksCglS RUcoMHgxNUNDLCAibWlfYnBfZ3Jfb2Zmc19jbnRfc3RhcnQiLCAwKSwKCVJFRygweDE1RDAsICJt aV9icF9nYl9vZmZzX2NudF9zdGFydCIsIDApLAoJUkVHKDB4MTVENCwgIm1pX2JwX2Jfb2Zmc19j bnRfc3RhcnQiLCAwKSwKCVJFRygweDE1RDgsICJtaV9icF9yX2Jhc2VfYWRfaW5pdCIsIDApLAoJ UkVHKDB4MTVEQywgIm1pX2JwX2dyX2Jhc2VfYWRfaW5pdCIsIDApLAoJUkVHKDB4MTVFMCwgIm1p X2JwX2diX2Jhc2VfYWRfaW5pdCIsIDApLAoJUkVHKDB4MTVFNCwgIm1pX2JwX2JfYmFzZV9hZF9p bml0IiwgMCksCiNlbmRpZgoJUkVHKDB4MTVFOCwgIm1pX2RtYV95X3Jhd19mbXQiLCAwKSwKCVJF RygweDE1RUMsICJtaV9kbWFfeV9yYXdfbHZhbCIsIDApCn07CgpzdHJ1Y3QgdmFsdWVzIHsKCXN0 cnVjdCB7CgkJdWludDMyX3QgdmFsdWU7CgkJdW5zaWduZWQgY291bnQ7Cgl9IGRhdGFbTUFYX1ZB TFVFU107Cgl1bnNpZ25lZCBkYXRhX2NvdW50Owp9OwoKc3RhdGljIGludCBhbHRfcmVhZCwgdmVy Ym9zZSwgZGVidWc7CgpzdGF0aWMgY29uc3Qgc3RydWN0IHJlZyAqZ2V0X3JlZyh1aW50MzJfdCBw aHlzKQp7CglwaHlzICY9IElTUF9TSVpFIC0gMTsKCWlmIChwaHlzID49IE1JX09GRlNFVCAmJiBw aHlzIDwgTUlfT0ZGU0VUICsgTUlfU0laRSAqIDIgLyogMiBjb3BpZXMgKi8pCgkJcmV0dXJuICZy ZWdfdGFiWyhwaHlzIC0gTUlfT0ZGU0VUKSAvIDQgLyogMzItYml0Ki8gJSBNSV9SRUdTIC8qIDIg Y29waWVzICovXTsKCXJldHVybiBOVUxMOwp9CgpzdGF0aWMgdm9pZCBhZGRfdmFsdWUodWludDMy X3QgcGh5cywgdWludDMyX3QgdmFsdWUsIHN0cnVjdCB2YWx1ZXMgKnZhbHVlcykKewoJdW5zaWdu ZWQgY250OwoJZm9yIChjbnQgPSAwOyBjbnQgPCB2YWx1ZXMtPmRhdGFfY291bnQ7IGNudCsrKSB7 CgkJaWYgKHZhbHVlcy0+ZGF0YVtjbnRdLnZhbHVlID09IHZhbHVlKSB7CgkJCXZhbHVlcy0+ZGF0 YVtjbnRdLmNvdW50Kys7CgkJCWJyZWFrOwoJCX0KCX0KCglpZiAoY250ID09IHZhbHVlcy0+ZGF0 YV9jb3VudCkgeyAvLyBub3QgZm91bmQgeWV0CgkJaWYgKHZhbHVlcy0+ZGF0YV9jb3VudCA9PSBN QVhfVkFMVUVTKQoJCQllcnJvcngoIlRvbyBtYW55IHJlZ2lzdGVyIDB4JTA4WCB2YWx1ZXMiLCBw aHlzKTsKCQl2YWx1ZXMtPmRhdGFbY250XS52YWx1ZSA9IHZhbHVlOwoJCXZhbHVlcy0+ZGF0YVtj bnRdLmNvdW50ID0gMTsKCQl2YWx1ZXMtPmRhdGFfY291bnQrKzsKCX0KfQoKc3RhdGljIHZvaWQg c2hvd192YWx1ZXModWludDMyX3QgcGh5cywgY29uc3Qgc3RydWN0IHZhbHVlcyAqdmFsdWVzKQp7 Cgljb25zdCBzdHJ1Y3QgcmVnICpyZWcgPSBnZXRfcmVnKHBoeXMpOwoKCWZvciAodW5zaWduZWQg Y250ID0gMDsgY250IDwgdmFsdWVzLT5kYXRhX2NvdW50OyBjbnQrKykgewoJCXByaW50ZigiUmVn aXN0ZXIgMHglMDhYICUtMjNzIiwgcGh5cywgcmVnICYmIHJlZy0+bmFtZSA/IHJlZy0+bmFtZSA6 ICIiKTsKCQlpZiAoKHJlZyAmJiByZWctPmRlYykgfHwgdmFsdWVzLT5kYXRhW2NudF0udmFsdWUg PCAxMCkKCQkJcHJpbnRmKCIgdmFsdWUgJTEwdSBjb3VudCAldVxuIiwgdmFsdWVzLT5kYXRhW2Nu dF0udmFsdWUsIHZhbHVlcy0+ZGF0YVtjbnRdLmNvdW50KTsKCQllbHNlCgkJCXByaW50ZigiIHZh bHVlIDB4JTA4WCBjb3VudCAldVxuIiwgdmFsdWVzLT5kYXRhW2NudF0udmFsdWUsIHZhbHVlcy0+ ZGF0YVtjbnRdLmNvdW50KTsKCX0KCXByaW50ZigiXG4iKTsKfQoKc3RhdGljIHVpbnQzMl90IHJl YWRfcmVnKGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90ICp2aXJ0KQp7CglpZiAoYWx0X3JlYWQpIHsK CQlpZiAoKGxvbmcpdmlydCAlIDgpIHsKCQkJLy8gMzItYml0IExEUCB3b3JrcyB3aXRoIHJlZ2lz dGVycyBhdCB4eHg0IGFuZCB4eHhDLCBidXQgY29ycnVwdHMgeHh4MCBhbmQgeHh4OCB0cmFuc2Zl cnMuCgkJCXZpcnQtLTsKCQkJdWludDMyX3QgdmFsdWU7CgkJCWFzbSB2b2xhdGlsZSAoImxkcCB3 enIsICV3MCwgWyV4MV0iICJcbiIKCQkJCQkJICA6ICI9ciIgKHZhbHVlKSAvLyBvdXRwdXQKCQkJ CQkJICA6ICJyIiAodmlydCkpOyAvLyBpbnB1dAoJCQlyZXR1cm4gdmFsdWU7CgkJfSBlbHNlIHsK CQkJdmlydCAtPSAyOwoJCQl1aW50NjRfdCB2YWx1ZTsKCQkJYXNtIHZvbGF0aWxlICgibGRwIHh6 ciwgJXgwLCBbJXgxXSIgIlxuIgoJCQkJCQkgIDogIj1yIiAodmFsdWUpIC8vIG91dHB1dAoJCQkJ CQkgIDogInIiICh2aXJ0KSk7IC8vIGlucHV0CgkJCXJldHVybiB2YWx1ZTsgLy8gbGl0dGxlIGVu ZGlhbjogb25seSBsZWFzdCBzaWduaWZpY2FudCAzMiBiaXRzCgkJfQoJfSBlbHNlCgkJcmV0dXJu ICoodm9sYXRpbGUgdWludDMyX3QgKikodmlydCk7Cn0KCnN0YXRpYyB2b2lkIF9fYXR0cmlidXRl X18oKG5vaW5saW5lKSkgcmVhZF9yZWcyKGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90ICp2aXJ0LCB2 b2lkICp2KQp7Cgl1aW50MzJfdCByLCBzOwoJYXNtIHZvbGF0aWxlICgibGRwICV3MCwgJXcxLCBb JXgyXSIgIlxuIgoJCQkJICA6ICI9ciIgKHIpLCAiPXIiIChzKSAvLyBvdXRwdXQKCQkJCSAgOiAi ciIgKHZpcnQpKTsgLy8gaW5wdXQKCW1lbWNweSh2LCAmciwgc2l6ZW9mKHIpKTsgLy8gcG9zc2li bHkgY29ycnVwdGVkCgltZW1jcHkodiArIHNpemVvZihyKSwgJnMsIHNpemVvZihzKSk7IC8vIHBv c3NpYmx5IGNvcnJ1cHRlZCBpZiB2aXJ0IHN0YXJ0cyBvbiA4LWJ5dGUgYm91bmRhcnkgKHZhbGlk IGZvciB4eHg0IGFuZCB4eHhDKQp9CgpzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChub2lubGlu ZSkpIHJlYWRfcmVnNChjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqdmlydCwgdm9pZCAqdikKewoJ dWludDY0X3QgciwgczsKCWFzbSB2b2xhdGlsZSAoImxkcCAleDAsICV4MSwgWyV4Ml0iICJcbiIK CQkJCSAgOiAiPXIiIChyKSwgIj1yIiAocykgLy8gb3V0cHV0CgkJCQkgIDogInIiICh2aXJ0KSk7 IC8vIGlucHV0CgltZW1jcHkodiwgJnIsIHNpemVvZihyKSk7IC8vIGZpcnN0IGhhbGYgcG9zc2li bHkgY29ycnVwdGVkLCBjb3JydXB0aW9uIGluIHNlY29uZCBoYWxmIGF0IHh4eEMgYWxzbyBwb3Nz aWJsZQoJbWVtY3B5KHYgKyBzaXplb2YociksICZzLCBzaXplb2YocykpOyAvLyBmaXJzdCBoYWxm IHBvc3NpYmx5IGNvcnJ1cHRlZCBpZiB2aXJ0IHN0YXJ0cyBvbiAxNi1ieXRlIGJvdW5kYXJ5ICh2 YWxpZCBmb3IgeHh4OCkKfQoKc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBy ZWFkX3JlZzgoY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgKnZpcnQsIHZvaWQgKnYpCnsKCV9GbG9h dDEyOCByLCBzOwoJYXNtIHZvbGF0aWxlICgibGRwICVxMCwgJXExLCBbJXgyXSIgIlxuIgoJCQkJ ICA6ICI9dyIgKHIpLCAiPXciIChzKSAvLyBvdXRwdXQKCQkJCSAgOiAiciIgKHZpcnQpKTsgLy8g aW5wdXQKCW1lbWNweSh2LCAmciwgc2l6ZW9mKHIpKTsgLy8gcG9zc2libHkgY29ycnVwdGVkCglt ZW1jcHkodiArIHNpemVvZihyKSwgJnMsIHNpemVvZihzKSk7IC8vIHBvc3NpYmx5IGNvcnJ1cHRl ZCBpZiB2aXJ0IHN0YXJ0cyBvbiA4LWJ5dGUgYm91bmRhcnkgKHZhbGlkIGZvciB4eHg0IGFuZCB4 eHhDKQp9CgpzdGF0aWMgdm9pZCB0ZXN0X2FsbChpbnQgc2FtcGxlcywgdWludDMyX3QgbWlfcGh5 cywgdWludDMyX3QgKm1pKQp7CglzdHJ1Y3QgdmFsdWVzIHZhbHVlc1tNSV9SRUdTXSA9IHt9OwoJ Zm9yICh1bnNpZ25lZCBjbnQgPSAwOyBjbnQgPCBzYW1wbGVzOyBjbnQrKykgewoJCWlmIChjbnQg JSAoc2FtcGxlcyAvIDEwKSA9PSAwKQoJCQlwcmludGYoIlNhbXBsZSAldVxuIiwgY250KTsKCQlm b3IgKHVuc2lnbmVkIHJlZyA9IDA7IHJlZyA8IE1JX1JFR1M7IHJlZysrKQoJCQlhZGRfdmFsdWUo TUlfT0ZGU0VUICsgcmVnICogNCwgcmVhZF9yZWcobWkgKyByZWcpLCAmdmFsdWVzW3JlZ10pOwoJ fQoJcHJpbnRmKCJcbiIpOwoKCWZvciAodW5zaWduZWQgcmVnID0gMDsgcmVnIDwgTUlfUkVHUzsg cmVnKyspIHsKCQl1aW50MzJfdCByZWdfYWRkciA9IG1pX3BoeXMgKyByZWcgKiA0OwoKCQlpZiAo dmFsdWVzW3JlZ10uZGF0YV9jb3VudCAmJiAodmVyYm9zZSB8fCB2YWx1ZXNbcmVnXS5kYXRhWzBd LnZhbHVlIHx8IHZhbHVlc1tyZWddLmRhdGFbMF0uY291bnQgIT0gc2FtcGxlcykpCgkJCXNob3df dmFsdWVzKHJlZ19hZGRyLCAmdmFsdWVzW3JlZ10pOwoJfQp9CgpzdGF0aWMgdm9pZCB0ZXN0X3Jl ZyhpbnQgc2FtcGxlcywgdWludDMyX3QgcGh5cywgdWludDMyX3QgKnZpcnQsIHVpbnQzMl90IHdy aXRlX21hc2spCnsKCWlmICghd3JpdGVfbWFzaykgewoJCXN0cnVjdCB2YWx1ZXMgdmFsdWVzID0g e307CgkJZm9yICh1bnNpZ25lZCBjbnQgPSAwOyBjbnQgPCBzYW1wbGVzOyBjbnQrKykgewoJCQlp ZiAoY250ICUgKHNhbXBsZXMgLyAxMCkgPT0gMCkKCQkJCXByaW50ZigiU2FtcGxlICV1XG4iLCBj bnQpOwoJCQlhZGRfdmFsdWUocGh5cywgcmVhZF9yZWcodmlydCksICZ2YWx1ZXMpOwoJCX0KCQlw cmludGYoIlxuIik7CgoJCXNob3dfdmFsdWVzKHBoeXMsICZ2YWx1ZXMpOwoJfSBlbHNlIHsKCQlj b25zdCBzdHJ1Y3QgcmVnICpyZWcgPSBnZXRfcmVnKHBoeXMpOwoJCWlmIChyZWcgJiYgcmVnLT5u YW1lKQoJCQlwcmludGYoIlJlZ2lzdGVyIDB4JTA4WCAlczogKGFsbCB2YWx1ZXMgaW4gaGV4KVxu IiwgcGh5cywgcmVnLT5uYW1lKTsKCQllbHNlCgkJCXByaW50ZigiUmVnaXN0ZXIgMHglMDhYOiAo YWxsIHZhbHVlcyBpbiBoZXgpXG4iLCBwaHlzKTsKCgkJdWludDMyX3QgdmFsdWUgPSAwLCBwcmV2 X3ZhbHVlID0gMDsKCQl1bnNpZ25lZCBtaXNtYXRjaF9jb3VudCA9IDA7CgkJZm9yICh1bnNpZ25l ZCBjbnQgPSAwOyBjbnQgPCBzYW1wbGVzOyBjbnQrKykgewoJCQkqdmlydCA9IHZhbHVlOwoJCQl1 aW50MzJfdCBuZXdfdmFsdWVzWzldOwoJCQl1bnNpZ25lZCBpdGVyOwoKCQkJZm9yIChpdGVyID0g MDsgaXRlciA8IEFSUkFZX1NJWkUobmV3X3ZhbHVlcyk7IGl0ZXIrKykKCQkJCW5ld192YWx1ZXNb aXRlcl0gPSByZWFkX3JlZyh2aXJ0KTsKCgkJCWZvciAoaXRlciA9IDA7IGl0ZXIgPCBBUlJBWV9T SVpFKG5ld192YWx1ZXMpOyBpdGVyKyspCgkJCQlpZiAobmV3X3ZhbHVlc1tpdGVyXSAhPSB2YWx1 ZSkKCQkJCQlicmVhazsKCgkJCWlmIChpdGVyICE9IEFSUkFZX1NJWkUobmV3X3ZhbHVlcykpIHsK CQkJCXByaW50ZigiJTh1OiIsIGNudCk7CgkJCQlwcmludGYocHJldl92YWx1ZSA8IDEwID8gIiAl OHUiIDogICIgJTA4WCIsIHByZXZfdmFsdWUpOwoJCQkJcHJpbnRmKHZhbHVlIDwgMTAgPyAiIFdS ICU4dSBSRCIgOiAiIFdSICUwOFggUkQiLCB2YWx1ZSk7CgkJCQlmb3IgKHVuc2lnbmVkIGl0ZXIg PSAwOyBpdGVyIDwgQVJSQVlfU0laRShuZXdfdmFsdWVzKTsgaXRlcisrKQoJCQkJCWlmIChuZXdf dmFsdWVzW2l0ZXJdID09IHZhbHVlKQoJCQkJCQlwcmludGYoIiAgICB2YWxpZCIpOwoJCQkJCWVs c2UgaWYgKG5ld192YWx1ZXNbaXRlcl0gPT0gcHJldl92YWx1ZSkKCQkJCQkJcHJpbnRmKCIgcHJl dmlvdXMiKTsKCQkJCQllbHNlIGlmIChpdGVyICYmIG5ld192YWx1ZXNbaXRlcl0gPT0gbmV3X3Zh bHVlc1tpdGVyIC0gMV0pCgkJCQkJCXByaW50ZigiICAgICBzYW1lIik7CgkJCQkJZWxzZQoJCQkJ CQlwcmludGYobmV3X3ZhbHVlc1tpdGVyXSA8IDEwID8gIiAlOHUiIDogIiAlMDhYIiwgbmV3X3Zh bHVlc1tpdGVyXSk7CgkJCQlwdXRjaGFyKCdcbicpOwoJCQkJbWlzbWF0Y2hfY291bnQrKzsKCQkJ fQoJCQlwcmV2X3ZhbHVlID0gdmFsdWU7CgkJCXZhbHVlID0gcmFuZG9tKCk7CgkJCXZhbHVlIF49 ICgodWludDMyX3QpcmFuZG9tKCkpIDw8IDE2OwoJCQl2YWx1ZSAmPSB3cml0ZV9tYXNrOwoJCX0K CQlpZiAobWlzbWF0Y2hfY291bnQpCgkJCXByaW50ZigiJXUgbWlzbWF0Y2hlcyBmb3VuZFxuIiwg bWlzbWF0Y2hfY291bnQpOwoJCWVsc2UKCQkJcHJpbnRmKCJObyBtaXNtYXRjaGVzIGZvdW5kXG4i KTsKCX0KfQoKc3RhdGljIHZvaWQgdGVzdF9yZWdfbGRwKGludCBzYW1wbGVzLCB1aW50MzJfdCBw aHlzLCB1aW50MzJfdCAqdmlydCwgdW5zaWduZWQgd29yZHMgLyogMzItYml0Ki8pCnsKCWlmIChw aHlzICYgKHdvcmRzICogMiAtIDEpKQoJCWVycm9yeCgiUmVnaXN0ZXIgYWRkcmVzcyAweCUwOFgg Zm9yIDIgKiAldS1iaXQgdGVzdCBpcyBpbnZhbGlkIiwgcGh5cywgd29yZHMgKiAxNik7CgoJc3Ry dWN0IHsKCQl1aW50MzJfdCB2WzhdOyAvLyBtYXgKCQl1bnNpZ25lZCBjb3VudDsKCX0gZGF0YVtN QVhfVkFMVUVTXSA9IHt9OwoJdW5zaWduZWQgZGF0YV9jb3VudCA9IDA7CgoJc3dpdGNoICh3b3Jk cykgewoJY2FzZSAyOiAgcHJpbnRmKCJVc2luZyBMRFAgVyosIFcqLCBbWCpdIGluc3RydWN0aW9u cyAoMiAqIDMyIGJpdHMpXG4iKTsgYnJlYWs7CgljYXNlIDQ6ICBwcmludGYoIlVzaW5nIExEUCBY KiwgWCosIFtYKl0gaW5zdHJ1Y3Rpb25zICgyICogNjQgYml0cylcbiIpOyBicmVhazsKCWRlZmF1 bHQ6IHByaW50ZigiVXNpbmcgTERQIFEqLCBRKiwgW1gqXSBpbnN0cnVjdGlvbnMgKDIgKiAxMjgg Yml0cylcbiIpOwoJfQoKCWZvciAodW5zaWduZWQgc2FtcGxlID0gMDsgc2FtcGxlIDwgc2FtcGxl czsgc2FtcGxlKyspIHsKCQl1aW50MzJfdCB2WzhdOwoKCQlzd2l0Y2ggKHdvcmRzKSB7CgkJY2Fz ZSAyOiAgcmVhZF9yZWcyKHZpcnQsIHYpOyBicmVhazsKCQljYXNlIDQ6ICByZWFkX3JlZzQodmly dCwgdik7IGJyZWFrOwoJCWRlZmF1bHQ6IHJlYWRfcmVnOCh2aXJ0LCB2KTsKCQl9CgoJCXVuc2ln bmVkIGNudDsKCQlmb3IgKGNudCA9IDA7IGNudCA8IGRhdGFfY291bnQ7IGNudCsrKSB7CgkJCWlm ICghbWVtY21wKGRhdGFbY250XS52LCB2LCB3b3JkcyAqIDQpKSB7CgkJCQlkYXRhW2NudF0uY291 bnQrKzsKCQkJCWJyZWFrOwoJCQl9CgkJfQoKCQlpZiAoY250ID09IGRhdGFfY291bnQpIHsgLy8g bm90IGZvdW5kIHlldAoJCQlpZiAoZGF0YV9jb3VudCA9PSBNQVhfVkFMVUVTKQoJCQkJZXJyb3J4 KCJUb28gbWFueSByZWdpc3RlciAweCUwOFggdmFsdWVzIiwgcGh5cyk7CgkJCW1lbWNweShkYXRh W2NudF0udiwgdiwgd29yZHMgKiA0KTsKCQkJZGF0YVtjbnRdLmNvdW50ID0gMTsKCQkJZGF0YV9j b3VudCsrOwoJCX0KCX0KCglwcmludGYoImFkZHI6ICIpOwoJZm9yICh1bnNpZ25lZCBpZHggPSAw OyBpZHggPCB3b3JkczsgaWR4KyspCgkJcHJpbnRmKCIgJTA4WCIsIHBoeXMgKyA0ICogaWR4KTsK CXByaW50ZigiXG4tLS0tLS0iKTsKCWZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgd29yZHM7 IGlkeCsrKQoJCXByaW50ZigiLS0tLS0tLS0tIik7CglwdXRjaGFyKCdcbicpOwoKCWZvciAodW5z aWduZWQgY250ID0gMDsgY250IDwgZGF0YV9jb3VudDsgY250KyspIHsKCQlwcmludGYoInZhbHVl cyIpOwoJCWZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgd29yZHM7IGlkeCsrKQoJCQlwcmlu dGYoIiAlOFgiLCBkYXRhW2NudF0udltpZHhdKTsKCQlwcmludGYoIiBjb3VudCAldVxuIiwgZGF0 YVtjbnRdLmNvdW50KTsKCX0KCXB1dGNoYXIoJ1xuJyk7Cn0KCmludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKewoJaW50IHNhbXBsZXMgPSAxMDAwMDAsIG1pcGkgPSAwLCByZWdfYWRkciA9 IDAsIHRlc3RfcmVhZCA9IDAsIHRlc3RfcmVhZDIgPSAwLCB0ZXN0X3JlYWQ0ID0gMCwgdGVzdF9y ZWFkOCA9IDAsIHRlc3Rfd3JpdGUgPSAwOwoJbG9uZyB3cml0ZV9tYXNrID0gMHhGRkZGRkZGRjsK CXN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbnNbXSA9IHsKCQl7InNhbXBsZXMiLCAgICAgICAncycs IFBPUFRfQVJHX0lOVCwgICZzYW1wbGVzLCAgICAgICAwLCAic2FtcGxlIGNvdW50In0sCgkJeyJt aXBpIiwgICAgICAgICAgJ20nLCBQT1BUX0FSR19JTlQsICAmbWlwaSwgICAgICAgICAgMCwgIk1J UEkgY2hhbm5lbCJ9LAoJCXsiYWRkcmVzcyIsICAgICAgICdhJywgUE9QVF9BUkdfSU5ULCAgJnJl Z19hZGRyLCAgICAgIDAsICJJU1AgcmVnaXN0ZXIgYWRkcmVzcyJ9LAoJCXsicmVhZC10ZXN0Iiwg ICAgICdyJywgUE9QVF9BUkdfTk9ORSwgJnRlc3RfcmVhZCwgICAgIDAsICJQZXJmb3JtIGEgcmVn aXN0ZXIgcmVhZCB0ZXN0In0sCgkJeyJyZWFkLXRlc3QyIiwgICAgJzInLCBQT1BUX0FSR19OT05F LCAmdGVzdF9yZWFkMiwgICAgMCwgIlBlcmZvcm0gYSAyICogMzItYml0IHJlZ2lzdGVyIHJlYWQg dGVzdCJ9LAoJCXsicmVhZC10ZXN0NCIsICAgICc0JywgUE9QVF9BUkdfTk9ORSwgJnRlc3RfcmVh ZDQsICAgIDAsICJQZXJmb3JtIGEgMiAqIDY0LWJpdCByZWdpc3RlciByZWFkIHRlc3QifSwKCQl7 InJlYWQtdGVzdDgiLCAgICAnOCcsIFBPUFRfQVJHX05PTkUsICZ0ZXN0X3JlYWQ4LCAgICAwLCAi UGVyZm9ybSBhIDIgKiAxMjgtYml0IHJlZ2lzdGVyIHJlYWQgdGVzdCJ9LAoJCXsid3JpdGUtdGVz dCIsICAgICd3JywgUE9QVF9BUkdfTk9ORSwgJnRlc3Rfd3JpdGUsICAgIDAsICJQZXJmb3JtIGEg cmVnaXN0ZXIgd3JpdGUgdGVzdCJ9LAoJCXsid3JpdGUtbWFzayIsICAgICdNJywgUE9QVF9BUkdf TE9ORywgJndyaXRlX21hc2ssICAgIDAsICJWYWx1ZSBtYXNrIGZvciB3cml0ZSB0ZXN0IiwgIk1B U0sifSwKCQl7ImFsdC1yZWFkLW1vZGUiLCAnQScsIFBPUFRfQVJHX05PTkUsICZhbHRfcmVhZCwg ICAgICAwLCAiQWx0ZXJuYXRlIHJlZ2lzdGVyIHJlYWQgbW9kZSJ9LAoJCXsidmVyYm9zZSIsICAg ICAgICd2JywgUE9QVF9BUkdfTk9ORSwgJnZlcmJvc2UsICAgICAgIDAsICJWZXJib3NlIG91dHB1 dCJ9LAoJCXsiZGVidWciLCAgICAgICAgICdkJywgUE9QVF9BUkdfTk9ORSwgJmRlYnVnLCAgICAg ICAgIDAsICJEZWJ1ZyBvdXRwdXQifSwKCQlQT1BUX0FVVE9IRUxQCgkJUE9QVF9UQUJMRUVORAoJ fTsKCglwb3B0Q29udGV4dCBjb250ZXh0ID0gcG9wdEdldENvbnRleHQoTlVMTCwgYXJnYywgKGNv bnN0IGNoYXIgKiopYXJndiwgb3B0aW9ucywgMCk7CglpbnQgaSA9IHBvcHRHZXROZXh0T3B0KGNv bnRleHQpOwoJaWYgKGkgPCAtMSkKCQllcnJvcngoIiVzOiAlc1xuIiwgcG9wdEJhZE9wdGlvbihj b250ZXh0LCBQT1BUX0JBRE9QVElPTl9OT0FMSUFTKSwgcG9wdFN0cmVycm9yKGkpKTsKCglpZiAo cG9wdFBlZWtBcmcoY29udGV4dCkpIHsKCQlwb3B0UHJpbnRVc2FnZShjb250ZXh0LCBzdGRlcnIs IDApOwoJCWV4aXQoMSk7Cgl9Cglwb3B0RnJlZUNvbnRleHQoY29udGV4dCk7CgoJaWYgKHNhbXBs ZXMgPD0gMCkKCQllcnJvcngoIkludmFsaWQgbnVtYmVyIG9mIHNhbXBsZXMiKTsKCWlmIChtaXBp ICE9IDAgJiYgbWlwaSAhPSAxKQoJCWVycm9yeCgiSW52YWxpZCBNSVBJIGludGVyZmFjZSBpbmRl eCIpOwoJaWYgKHRlc3RfcmVhZCArIHRlc3RfcmVhZDIgKyB0ZXN0X3JlYWQ0ICsgdGVzdF9yZWFk OCArIHRlc3Rfd3JpdGUgPiAxKQoJCWVycm9yeCgiTXVsdGlwbGUgdGVzdHMgcmVxdWVzdGVkIik7 CglpZiAod3JpdGVfbWFzayA8IDEgfHwgd3JpdGVfbWFzayA+IDB4RkZGRkZGRkYpCgkJZXJyb3J4 KCJJbnZhbGlkIHdyaXRlIG1hc2siKTsKCglpbnQgbWVtX2ZkID0gb3BlbigiL2Rldi9tZW0iLCBP X1JEV1IgfCBPX1NZTkMpOwoJaWYgKG1lbV9mZCA8IDApCgkJZXJyb3IoIkVycm9yIG9wZW5pbmcg L2Rldi9tZW0iKTsKCgl1aW50MzJfdCBwaHlzID0gbWlwaSA/IElTUDJfQUREUiA6IElTUDFfQURE UjsKCWlmIChkZWJ1ZykKCQlwcmludGYoIk1JUElfSVNQJXUgcmVnaXN0ZXJzIGF0IDB4JVggKHNp emUgMHglWClcbiIsIG1pcGksIHBoeXMsIElTUF9TSVpFKTsKCXZvaWQgKnZpcnQgPSBtbWFwKDAs IElTUF9TSVpFLCB0ZXN0X3dyaXRlID8gUFJPVF9SRUFEIHwgUFJPVF9XUklURSA6IFBST1RfUkVB RCwgTUFQX1NIQVJFRCwgbWVtX2ZkLCBwaHlzKTsKCWlmICh2aXJ0ID09IE1BUF9GQUlMRUQpCgkJ ZXJyb3IoIk1tYXAgZmFpbGVkIik7CgoJaWYgKGRlYnVnKQoJCXByaW50ZigiTWFwcGVkIElTUCBy ZWdpc3RlcnMgYXQgJXBcbiIsIHZpcnQpOwoJaWYgKHRlc3RfcmVhZCB8fCB0ZXN0X3JlYWQyIHx8 IHRlc3RfcmVhZDQgfHwgdGVzdF9yZWFkOCB8fCB0ZXN0X3dyaXRlKSB7CgkJaWYgKHJlZ19hZGRy ICYgMyB8fCByZWdfYWRkciA8IHBoeXMgfHwgcmVnX2FkZHIgPj0gcGh5cyArIElTUF9TSVpFKQoJ CQllcnJvcngoIkludmFsaWQgSVNQIHJlZ2lzdGVyIGFkZHJlc3MgMHglMDhYIiwgcmVnX2FkZHIp OwoJCXZpcnQgKz0gcmVnX2FkZHIgLSBwaHlzOwoJCWlmIChkZWJ1ZykKCQkJcHJpbnRmKCJSZWdp c3RlciAweCVYIG1hcHBlZCBhdCAlcFxuIiwgcmVnX2FkZHIsIHZpcnQpOwoJCWlmICh0ZXN0X3Jl YWQpCgkJCXRlc3RfcmVnKHNhbXBsZXMsIHJlZ19hZGRyLCB2aXJ0LCAwKTsKCQllbHNlIGlmICh0 ZXN0X3JlYWQyKQoJCQl0ZXN0X3JlZ19sZHAoc2FtcGxlcywgcmVnX2FkZHIsIHZpcnQsIDIpOwoJ CWVsc2UgaWYgKHRlc3RfcmVhZDQpCgkJCXRlc3RfcmVnX2xkcChzYW1wbGVzLCByZWdfYWRkciwg dmlydCwgNCk7CgkJZWxzZSBpZiAodGVzdF9yZWFkOCkKCQkJdGVzdF9yZWdfbGRwKHNhbXBsZXMs IHJlZ19hZGRyLCB2aXJ0LCA4KTsKCQllbHNlCgkJCXRlc3RfcmVnKHNhbXBsZXMsIHJlZ19hZGRy LCB2aXJ0LCB3cml0ZV9tYXNrKTsKCX0gZWxzZQoJCXRlc3RfYWxsKHNhbXBsZXMsIHBoeXMgKyBN SV9PRkZTRVQsIHZpcnQgKyBNSV9PRkZTRVQpOwoKCXJldHVybiAwOwp9CgotLSAKS3J6eXN6dG9m ICJDaHJpcyIgSGHFgmFzYQoKU2llxIcgQmFkYXdjemEgxYF1a2FzaWV3aWN6ClByemVteXPFgm93 eSBJbnN0eXR1dCBBdXRvbWF0eWtpIGkgUG9taWFyw7N3IFBJQVAKQWwuIEplcm96b2xpbXNraWUg MjAyLCAwMi00ODYgV2Fyc3phd2EKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtcm9ja2NoaXAK