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 3B328C25B74 for ; Mon, 27 May 2024 16:19:52 +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:Subject:Cc:To: From:Date:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=ETUCs7vl+offsccp6PaqCdx1D/jO+SRxET4Yo/1KDPQ=; b=IjiJCgIz211x/G zevN2U3fi39KOiaOaXcDWE0se9/9T52jzeSDqJ3vYTFR1CDTsfzeB2YReXIJ2YIgIfUjD5U7iNko/ mzeiOqIdDb5QVKlKsU/rK2jdM8uhlfjJPeBFTIwmyS36Q1dpIb4WuwYKFodY1AhDaZM95nFpzMXzJ 1gJV3srnkumK2tYU8Yn4sz5hyjbuyTsV1Vc74CG3Nhq67wRSw9PouPXuz5GPPHk03dWum9F5eqWU7 ASNxUr9+xHHEAQbhoKRK/B/00wqbmvhweXy8hpQOZubvrFu7aMbbwamkObm0r+kQnYhyrdJZ0ZbKE trRtsSvu7HvfdyOWLG8w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sBd4V-0000000FogV-2gcO; Mon, 27 May 2024 16:19:39 +0000 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sBd4S-0000000FoeP-0YlT for linux-arm-kernel@lists.infradead.org; Mon, 27 May 2024 16:19:38 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id A3466E0008; Mon, 27 May 2024 16:19:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1716826771; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ivr7Lv5/QaHOiNl1+Nm8U6SGLCjzfZglSZEAXAi9EvY=; b=EX56jsutXLo1XGVjnSSfguJ38LEy4rnuGeLdj/rNwnYlw9uA6/1lywfqqZ42c8ECb4wYJr H5PTfBGVudrF24TqPaRxhUZuuwRukvJ6M4Cm6E4tsifmJzarwaurod7/NeOeJTP9uBiRnV ZFh4/raWjLtspA3ajP4rUI6B0vjiZ2AV6JJszyf571+yOVOTYgdUk03tXBmZJlb4uDOr4V DJJampCsn0R/D3AW+i60ntbgRFy2b6L/y+ggl/NnYzVyxrlKwZwE1sUM9KYJvPKOqRkRM4 QaRnxH2tD/kL/g5LOJ7NCSKb06C/6EtmiuURofJgfXkcb+YR2U3/XMVg5A6m4A== Date: Mon, 27 May 2024 18:19:28 +0200 From: Miquel Raynal To: Lucas Stach , Laurent Pinchart , Marek Vasut , Stephen Boyd , Michael Turquette , Chen-Yu Tsai , linux-clk@vger.kernel.org, Ulf Hansson , "Rafael J. Wysocki" , Kevin Hilman , linux-pm@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, Fabio Estevam , Jacky Bai , Peng Fan , Shawn Guo , Shengjiu Wang , linux-imx@nxp.com, Ian Ray , Thomas Petazzoni , =?UTF-8?B?SGVydsOp?= Codina , Luca Ceresoli Subject: Clocks vs. Power Domains circular dependency Message-ID: <20240527181928.4fc6b5f0@xps-13> Organization: Bootlin X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240527_091936_491865_0D17961E X-CRM114-Status: GOOD ( 41.94 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGVsbG8gYWxsLAoKSSB3b3VsZCBsaWtlIHRvIHJlLW9wZW4gdGhlIGNsb2NrcyB2cy4gcnVudGlt ZSBQTS9wb3dlciBkb21haW5zIHRvcGljCnRoYXQgaXMgY3VycmVudGx5IHN0aWxsIHByb2JsZW1h dGljIG9uIGkuTVg4LiBJIGFtIG1lbnRpb25pbmcgYQpzcGVjaWZpYyBTb0MgaGVyZSBidXQgdGhl IHByb2JsZW0gaXMgaGFyZHdhcmUgYWdub3N0aWMgYW5kIGFueSBTb0Mgd2l0aAphIHN1ZmZpY2ll bnRseSBhZHZhbmNlZCBwb3dlciBzY2hlbWUgbWF5IHN1ZmZlciBmcm9tIHRoZSBzYW1lIGlzc3Vl cy4KV2hlbiAobWFpbmxpbmUpIExpbnV4IGlzIHJ1bm5pbmcsIHdlIGdldCBsb2NrZGVwIHdhcm5p bmdzIGJlY2F1c2Ugb2YKY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIGNsb2NrIGFu ZCBwb3dlciBkb21haW4gc3Vic3lzdGVtcywgYXMKd2VsbCBhcyByZWFsIGRlYWRsb2Nrcy4KCkkg ZG9uJ3QgaGF2ZSB0aGUgZnVsbCBoaXN0b3J5IGJ1dCBoZXJlIGlzIGFuIGludGVyZXN0aW5nIGF0 dGVtcHQgYXQKZml4aW5nIHRoaXMgYnkgTWFyZWsgZW5kIG9mIDIwMjI6Cmh0dHBzOi8vbG9yZS5r ZXJuZWwub3JnL2FsbC9ZMWNzKytUVjJHQ3VoNHRTQHBlbmRyYWdvbi5pZGVhc29uYm9hcmQuY29t LwpBbmQgaGVyZSBpcyBhbiBpbnRlcmVzdGluZyBkaXNjdXNzaW9uIHRoYXQgaGFwcGVuZWQgb24g dGhlIG1haWxpbmcgbGlzdApmb2xsb3dpbmcgYSBzZWNvbmQgYXR0ZW1wdCBmcm9tIE1hcmVrIGFz IHdlbGw6Cmh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1wbS9wYXRj aC8yMDIyMTEwODAxMzUxNy43NDk2NjUtMS1tYXJleEBkZW54LmRlCgpMb29raW5nIG1vcmUgY2xv c2VseSBhdCB0aGlzIHByb2JsZW0sIHRoZXJlIGlzIGluZGVlZCBhIHNvZnR3YXJlIGRlc2lnbgpp c3N1ZS4gQm90aCB0aGUgY2xvY2sgYW5kIHBvd2VyIGRvbWFpbiBzdWJzeXN0ZW1zIGFyZSByZWN1 cnNpdmUgYW5kCmludGVyZGVwZW5kZW50LCB0aGUgcG93ZXIgZG9tYWluIHN1YnN5c3RlbSBiZWlu ZyBzb21ldGltZXMgYWNjZXNzZWQKdGhyb3VnaCBydW50aW1lIFBNIGNhbGxzLgoKW1RMRFI6IEkn bSBkcmFmdGluZyBzb21ldGhpbmcsIGJ1dCBpc3N1ZSAjNCBhdCB0aGUgYm90dG9tIGlzIGJsb2Nr aW5nXQoKKiogVEhFIElTU1VFOiBGUk9NIEEgQ0xPQ0sgUEVSU1BFQ1RJVkUgKioKCkNsb2NrIGNo YW5nZXMgKG5vdCBvbmx5IGNsa19wcmVwYXJlKCksIGJ1dCBnZXR0aW5nL3NldHRpbmcgdGhlIHJh dGVzIGFzCndlbGwsIHJlLXBhcmVudGluZyBhbmQgc28gb24pIGludm9sdmUgcnVudGltZSByZXN1 bWluZyBwYXJ0IG9mIHRoZSBjbG9jawp0cmVlLiBFZy4gcmVnaXN0ZXJzIGZvciBhY2Nlc3Npbmcv Y29uZmlndXJpbmcgYSBjbG9jayBtaWdodCBiZSBpbiBhCnBvd2VyIGRvbWFpbiB0aGF0IG11c3Qg YmUgcmVzdW1lZC4KCkFsc28sIHRoZSBjbGsgc3Vic3lzdGVtIGlzIG1vc3RseSB3cml0dGVuIHVz aW5nIHJlY3Vyc2l2aXR5LCBzbyBmb3IKaW5zdGFuY2UgcHJlcGFyaW5nIGEgY2xvY2sgd29ya3Mg bGlrZSB0aGlzOgoKLyoKICogU2FtZSBhcHBsaWVzIHRvIHRoZSBvdGhlciBjbGsgY29uc3VtZXIg Y2FsbHMsIGJ1dCBpbnN0ZWFkIG9mIGdvaW5nCiAqIHRocm91Z2ggdGhlIHBhcmVudHMsIG90aGVy IHBhcnRzIG9mIHRoZSBjbGsgdHJlZSBhcmUgYWNjZXNzZWQgKHRoZQogKiBjaGlsZHJlbiBzdWJ0 cmVlLCB0aGUgbmV3IHBhcmVudCB0cmVlLCBvciBib3RoKS4gU28gdGhlIHByZXBhcmUKICogc2l0 dWF0aW9uIGlzIG9uZSBvZiB0aGUgc2ltcGxlc3QgaW4gdGhpcyByZWdhcmQsIGJ1dCB0aGUgZm9s bG93aW5nCiAqIGJhc2ljYWxseSBhcHBsaWVzIHRvIG1vc3QgY29uc3VtZXIgb3BlcmF0aW9ucy4K ICovCmNsa19wcmVwYXJlKGNsaykgewoJY2xrX3ByZXBhcmUoY2xrLT5wYXJlbnQpOwoJcnVudGlt ZV9yZXN1bWUoY2xrLT5kb21haW4pOwoJY2xrLT5vcHMtPnByZXBhcmUoKTsKfQoKTm93IGlmIHdl IGFkZCBhbm90aGVyIGxldmVsIG9mIGNvbXBsZXhpdHksIGFjY2Vzc2VzIHRvIHRoZSBjbG9jayB0 cmVlCmFyZSBzZXJpYWxpemVkIGJ5IHRoZSBjbGtfcHJlcGFyZSBtdXRleCwgYW5kIHJ1bnRpbWUg UE0gY2FsbHMgYXJlIGFsc28KcHJvdGVjdGVkIGJ5IGEgZ2xvYmFsIGdlbnBkIGxvY2s6CgpjbGtf cHJlcGFyZShjbGspIHsKCW11dGV4X2xvY2soY2xrX3ByZXBhcmUpOwoJY2xrX3ByZXBhcmUoY2xr LT5wYXJlbnQpOyAvKiBjbGtfcHJlcGFyZSBpcyByZWVudHJhbnQsIHNvIHRoaXMgaXMgImZpbmUi ICovCglydW50aW1lX3Jlc3VtZShjbGstPmRvbWFpbik7CgljbGstPm9wcy0+cHJlcGFyZSgpOwoJ bXV0ZXhfdW5sb2NrKGNsa19wcmVwYXJlKTsKfQoKcnVudGltZV9yZXN1bWUoZG9tYWluKSB7Cglt dXRleF9sb2NrKGdlbnBkKTsKCWRvbWFpbi0+b3BzLT5yZXN1bWUoKTsKCW11dGV4X3VubG9jayhn ZW5wZCk7Cn0KCklmIHdlIGxpc3QgdGhlIGxvY2tpbmcgZXZlbnRzIGluIG9yZGVyLCB3ZSB3aWxs OgotIGFjcXVpcmUgdGhlIGNsayBsb2NrCi0gYWNxdWlyZSB0aGUgZ2VuUEQgbG9jawotIHJlbGVh c2UgdGhlIGdlblBEIGxvY2sKLSByZWxlYXNlIHRoZSBjbGsgbG9jawoKKiogVEhFIElTU1VFOiBG Uk9NIEEgUE9XRVIgRE9NQUlOIFBFUlNQRUNUSVZFICoqCgpOb3cgbGV0J3Mgc2VlIHRoZSBvdGhl ciBzaWRlLCBmcm9tIHRoZSBwb3dlciBkb21haW4gcGVyc3BlY3RpdmUuIFdlIGNhbgppbWFnaW5l IHNldmVyYWwgc2l0dWF0aW9ucyB3aGVyZSB0aGVzZSBsb2NrcyBhcmUgYWNxdWlyZWQgaW4gdGhl IHJldmVyc2UKb3JkZXIuIEZyb20gYSBoYXJkd2FyZSBzdGFuZHBvaW50IHRoZXJlIGlzIGEgcHJl cmVxdWlzaXRlIChtZXQgaW4gdGhlCmkuTVg4IGluIHNldmVyYWwgcGxhY2VzKTogYSBwb3dlciBk b21haW4gaXMgZmVkIGJ5IGEgY2xvY2ssIGhlbmNlCmVuYWJsaW5nIHRoZSBwb3dlciBkb21haW4g YWxzbyBpbXBsaWVzIGVuYWJsaW5nIHRoZSBmZWVkaW5nIGNsb2NrLgoKICAgICMxOiBQcm9iaW5n L2VuYWJsaW5nIHBlcmlwaGVyYWxzIGludm9sdmUgYXR0YWNoaW5nIGFuZCBwb3dlcmluZyB1cAog ICAgdGhlaXIgcG93ZXIgZG9tYWluLiBJZiB0aGUgcG93ZXIgZG9tYWluIGlzIGZlZCBieSBhIGNs b2NrIHRoZSBwb3dlcgogICAgZG9tYWluIGltcGxlbWVudGF0aW9uIHdpbGwgcmVxdWVzdCBjbG9j ayBjaGFuZ2VzLgoKICAgICMyOiBTdXNwZW5kaW5nIGRldmljZXMgaGFwcGVucyBhc3luY2hyb25v dXNseSBpbiBhCiAgICB3b3JrZXIuIFN1c3BlbmRpbmcgYSBkZXZpY2UgaW1wbGllcyB0dXJuaW5n IG9mZiBpdHMgcG93ZXIgZG9tYWluLAogICAgYW5kIGhlbmNlIHBvc3NpYmx5IHJlYWNoaW5nIHNv bWUgY2xvY2sgaW50ZXJuYWxzIGFzIHdlbGwuCgpJbiB0aGVzZSBjYXNlcyB3ZSB3aWxsIHBsYXkg d2l0aCBsb2NrcyBpbiB0aGlzIG9yZGVyOgotIGFjcXVpcmUgdGhlIGdlblBEIGxvY2sKLSBhY3F1 aXJlIHRoZSBjbGsgbG9jawotIHJlbGVhc2UgdGhlIGNsayBsb2NrCi0gcmVsZWFzZSB0aGUgZ2Vu UEQgbG9jawoKSGVyZSBhcmUgdHdvIHR5cGljYWwgZXhhbXBsZXM6IHBvd2VyIGRvbWFpbnMgcGxh eWluZyB3aXRoIHVwc3RyZWFtCmNsb2NrczoKaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGlu dXgvbGF0ZXN0L3NvdXJjZS9kcml2ZXJzL3BtZG9tYWluL2lteC9pbXg4bXAtYmxrLWN0cmwuYyNM NTM4Cmh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4L2xhdGVzdC9zb3VyY2UvZHJpdmVy cy9wbWRvbWFpbi9pbXgvZ3BjdjIuYyNMMzQwCgoqKiBDVVJSRU5UIFVOREVSU1RBTkRJTkcgKioK CkNsb2NrIGNoYW5nZXMgYW5kIHJ1bnRpbWUgUE0gY2FsbHMgY2FuIGhhcHBlbiBhdCBhbnkgbW9t ZW50IGFuZCBpZiB5b3VyCmhhcmR3YXJlIGlzIGluIGEgYmFkIG1vb2QgYSBkZWFkIGxvY2sgKndp bGwqIG9jY3VyLiBJIG15c2VsZiBvbmx5CmV4cGVyaWVuY2VkIGRlYWRsb2NrcyBpbnZvbHZpbmcg dGhlIGNsb2NrIHdvcmtlciBkaXNhYmxpbmcgdW51c2VkIGNsb2NrcwphdCB0aGUgZW5kIG9mIHRo ZSBib290LCBidXQgY2hhbmNlcyBhcmUgd2F5IHRvbyBoaWdoIHRoYXQgc3lzdGVtcyB3aWxsCmxv Y2sgdXAgYXQgc29tZSBwb2ludCBpbiBwcm9kdWN0aW9uIGVudmlyb25tZW50IGJlY2F1c2Ugb2Yg dGhpcyBjaXJjdWxhcgpkZXBlbmRlbmN5IGJldHdlZW4gdGhlIGNsb2NrIGFuZCBwb3dlciBkb21h aW4gbG9ja3MuIEl0IGlzIHBvc3NpYmxlIHRvCmF2b2lkIHRoZSBkZWFkbG9jayBJIGV4cGVyaWVu Y2VkIGJ5IGRpc2FibGluZyB0aGUgY2xrX2Rpc2FibGVfdW51c2VkCndvcmtlciBhbmQga2VlcGlu ZyBhbGwgY2xvY2tzIGVuYWJsZWQsIGJ1dCB3ZSB3aWxsIGFsbCBhZ3JlZSB0aGF0IHRoaXMKaXMg YSB2ZXJ5IHN1Yi1vcHRpbWFsIGFuZCBleHRyZW1lbHkgdW5zYXRpc2Z5aW5nIHNvbHV0aW9uIGZv ciBhIFNvQwpleHBsaWNpdGx5IGRlc2lnbmVkIGZvciBvcHRpbWl6ZWQgcG93ZXIgY29uc3VtcHRp b25zLgoKVGhlcmUgaXMgbm8gbWFnaWMsIHdlIG11c3QgZGlzbWFuZ2xlIHRoZSBzaXR1YXRpb24g YW5kIHByZXZlbnQgZWl0aGVyCm9uZSBsb2NrIG9yZGVyaW5nIG9yIHRoZSBvdGhlciBmcm9tIGhh cHBlbmluZy4gU28gd2Ugc2hvdWxkIGFzawpvdXJzZWx2ZXM6IHdoYXQgbG9jayBvcmRlciBzZWVt cyB0aGUgbW9zdCBsZWdpdGltYXRlPwoKICAgICMxOiBEbyBjbG9ja3MgcmVhbGx5IGRlcGVuZCBv biBwb3dlciBkb21haW5zPwoKICAgIC0+IENsb2NrIGNvbnRyb2xsZXJzIG1heSBiZSBwYXJ0IG9m IGEgcG93ZXIgZG9tYWluLCBoZW5jZSB0aGUgcG93ZXIKICAgIGRvbWFpbiBtdXN0IGJlIGVuYWJs ZWQgaW4gb3JkZXIgdG8gYWNjZXNzIHRoZSBjbG9jayBjb250cm9sbGVyCiAgICByZWdpc3RlcnMu CgogICAgLT4gU2FtZSBhcHBsaWVzIGlmIGEgY2xvY2sgaXMgZ2VuZXJhdGVkIGJ5IGFuIGV4dGVy bmFsIGRldmljZQogICAgKGVnLiBhbiBhdWRpbyBjb2RlYykgYW5kIHRoaXMgY29kZWMgaXMgYWNj ZXNzaWJsZSB0aHJvdWdoIGEgc2VyaWFsCiAgICBidXM6IHRoZSBidXMgY29udHJvbGxlciBtdXN0 IGJlIHJlc3VtZWQgaW4gb3JkZXIgdG8gY29uZmlndXJlIHRoZQogICAgY29kZSwgYW5kIHRoZSBi dXMgY29udHJvbGxlciBtYXkgYmUgaW4gaXRzIG93biBwb3dlciBkb21haW4uCgogICAgIzI6IERv IHBvd2VyIGRvbWFpbnMgcmVhbGx5IGRlcGVuZCBvbiBjbG9ja3M/CgogICAgLT4gU29tZWhvdyB5 ZXMuIE1vc3QgcG93ZXIgZG9tYWlucyBhcmUgbm90IGV4cGxpY2l0bHkgImRyaXZlbiIgYnkKICAg IHRoZSB1cHN0cmVhbSBjbG9ja3MgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlcywgaWU6IGtlZXBp bmcgdGhlc2UKICAgIGNsb2NrcyBnYXRlZCBkb2VzIG5vdCBwcmV2ZW50IHRoZSB1c2Ugbm9yIHRo ZSBhY2Nlc3MgdG8gdGhlIHBvd2VyCiAgICBkb21haW5zIHBlci1zZS4gSG93ZXZlciwgdGhlIHBv d2VyIGRvbWFpbnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUKICAgIGNsb2NrcyB0byB0aGUgcGVyaXBo ZXJhbHMgaW5zaWRlIGFuZCBzb21laG93IGJlY29lIHRoZW1zZWx2ZXMgY2xvY2sKICAgIGNvbnRy b2xsZXJzIChldmVuIHRob3VnaCBzbyBmYXIgdGhleSBhcmUgbm90IGZsYWdnZWQgbGlrZSB0aGF0 IGluCiAgICBhbnkgRFRTKS4gSGVuY2UgaXQgYXBwZWFycyBsZWdpdGltYXRlIHRoYXQgdGhleSBt aWdodCB3YW50IHRvIHBsYXkKICAgIHdpdGggdGhlIGNsb2NrIEFQSS4KCiAgICBEVFNJIGV4YW1w bGU6CiAgICBodHRwczovL2VsaXhpci5ib290bGluLmNvbS9saW51eC9sYXRlc3Qvc291cmNlL2Fy Y2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC5kdHNpI0wxNzk5CgogICAgVFJNIGV4 dHJhY3Q6CgogICAgICAxMy4yLjEgT3ZlcnZpZXcKICAgICAgVGhlIE1FRElBTUlYIGRvbWFpbiBj b250YWlucyBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIGtub3duIGFzCiAgICAgIE1lZGlh IEJsb2NrIENvbnRyb2wgKE1FRElBIEJMS19DVFJMKS4gVGhlc2UgcmVnaXN0ZXJzIGhhdmUKICAg ICAgbWlzY2VsbGFuZW91cyB0b3AtbGV2ZWwgY29udHJvbHMgZm9yIHBlcmlwaGVyYWxzIHdpdGhp biB0aGUgTUVESUFNSVgKICAgICAgZG9tYWluLiBTb21lIG9mIHRoZXNlIGNvbnRyb2xzIGluY2x1 ZGVzIGNsb2NraW5nLCBbLi4uXQoKICAgICAgMTMuMi4yOiBDbG9ja3MgYW5kIFJlc2V0cwogICAg ICBUaGUgTWVkaWEgQkxLX0NUUkwgY29udGFpbnMgY2xvY2sgZGlzdHJpYnV0aW9uIGFuZCBnYXRp bmcgY29udHJvbHMsCiAgICAgIGFzIHdlbGwgYXMgcmVzZXQgaGFuZGxpbmcgdG8gc2V2ZXJhbCBv ZiB0aGUgTUVESUFNSVggcGVyaXBoZXJhbHMuCgogICAgLT4gT25lIHNwZWNpZmljaXR5IG9mIHRo ZSBpLk1YOCBpcyB0aGF0IG1hbnkgcG93ZXIgZG9tYWlucyBhcmUKICAgIGFsc28gZGVzY3JpYmVk IHdpdGggYSAiY2xvY2tzIiBwcm9wZXJ0eSB3aGljaCBsaXN0IGNsb2NrcyB0aGF0IGFyZQogICAg ZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBwZXJpcGhlcmFscyBpbnNpZGUgdGhlIHBvd2VyIGRv bWFpbgogICAgaW5zdGVhZC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpbmFjY3VyYXRlIGRlc2NyaXB0 aW9uIGlzOiB0b2dnbGluZyBhCiAgICBwb3dlciBkb21haW4gb24gb3Igb2ZmIHNlZW1zIHRvIGlu dm9sdmUgcHJvcGFnYXRpbmcgcmVzZXQgc2lnbmFscywKICAgIHdoaWNoIG9ubHkgaGFwcGVucyBj b3JyZWN0bHkgaWYgYSBmZXcgc3BlY2lmaWMgY2xvY2tzIGZlZWRpbmcgdGhlCiAgICB0YXJnZXRl ZCBwZXJpcGhlcmFscyBhcmUgYWN0dWFsbHkgcnVubmluZy4gVGhlbiwgYXMgcGFydCBvZiB0aGUK ICAgIG9uL29mZiBzZXF1ZW5jZSwgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGVzZSBjbG9ja3MgZ2V0 IGVuYWJsZWQgKGFuZAogICAgdGhlbiBkaXNhYmxlZCkgZWFybGllciB0aGFuIGluIHRoZWlyIHJl c3BlY3RpdmUgcHJvYmUgZnVuY3Rpb25zLAogICAgc2VlOgogICAgLSBhZTFkMmFkZDI2YTQgKCJz b2M6IGlteDogZ3BjdjI6IGhhbmRsZSByZXNldCBjbG9ja3MiKQogICAgLSBodHRwczovL2VsaXhp ci5ib290bGluLmNvbS9saW51eC9sYXRlc3Qvc291cmNlL2FyY2gvYXJtNjQvYm9vdC9kdHMvZnJl ZXNjYWxlL2lteDhtcC5kdHNpI0w3OTUKICAgIC0gaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20v bGludXgvbGF0ZXN0L3NvdXJjZS9hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAu ZHRzaSNMODU3CgpJdCBpcyBoYXJkIHRvIHRlbGwsIHdpdGhvdXQgbW9yZSBkZXRhaWxzIGZyb20g TlhQLCBob3cgZGlmZmljdWx0IGl0CndvdWxkIGJlIHRvIHN3aXRjaCBmcm9tIHRoZSAjMiAid3Jv bmciIHBvd2VyIGRvbWFpbiBEVFMgZGVzY3JpcHRpb24gdG8Kc29tZXRoaW5nIG1vcmUgYWNjdXJh dGUgYW5kIHN0aWxsIGdldCB0aGUgcHJvcGVyIGluaXQgc2VxdWVuY2UuIEFsdGhvdWdoCm1heWJl IGRvaW5nIHRoYXQgd291bGQgbm90IGJlIHZlcnkgcmVsZXZhbnQgYXMgdGhlcmUgYXJlIGFueXdh eSByZWFsCmNsb2NrIGRlcGVuZGVuY2llcyBmcm9tIHNvbWUgcG93ZXIgZG9tYWlucywgYXMgZXhw cmVzc2VkIGluIHRoZSBTb0MKbWFudWFsIHF1b3RlZCBhYm92ZS4KCiMxIGhvd2V2ZXIsIGRlc3Bp dGUgYmVpbmcgYSBwaHlzaWNhbCBjb25zdHJhaW50LCBzZWVtcyBhbHNvIHRpZ2h0bHkKcmVsYXRl ZCB0byB0aGUgc29mdHdhcmUgZGVzaWduOiBydW50aW1lIFBNIGNhbGxzIHdlcmUgaW50cm9kdWNl ZCBpbiB0aGUKY2xvY2sgc3Vic3lzdGVtIGluaXRpYWxseSBmb3IgdHdvIHJlYXNvbnM6Ci0gVGhl IGNsb2NrIGlzIGl0c2VsZiBpbiBhbiBhcmVhIG9mIHRoZSBTb0MgdGhhdCBuZWVkcyB0byBiZSBw b3dlcmVkIG9uCiAgYmVmb3JlIGFjY2Vzc2luZyBpdHMgcmVnaXN0ZXJzLgotIFRoZSBhYm92ZSBz aXR1YXRpb24gYWxzbyBhcHBsaWVzIHRvIGFsbCB0aGUgcG9zc2libGUgcGFyZW50cyBvZiB0aGUK ICBjbG9jay4KU2VlOiA5YTM0YjQ1Mzk3ZTUgKCJjbGs6IEFkZCBzdXBwb3J0IGZvciBydW50aW1l IFBNIikKaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYWxsLzE1MDMzMDI3MDMtMTM4MDEtMi1naXQt c2VuZC1lbWFpbC1tLnN6eXByb3dza2lAc2Ftc3VuZy5jb20KVGhlIGNsb2NrIGNvcmUgYmVpbmcg aGlnaGx5IHJlY3Vyc2l2ZSwgaXQgd2FzIHdheSBlYXNpZXIgKGFuZCBhbHNvCnByb2JhYmx5IGNs ZWFuZXIpIHRvIGluY2x1ZGUgbmVzdGVkIHJ1bnRpbWUgUE0gY2FsbHMgbGlrZSB0aGlzLiBCdXQg aW4KcHJhY3RpY2UsIHdlIGNvdWxkIGltYWdpbmUgbW92aW5nIHRoZSByZXN1bWUgcGF0aCBvdXRz aWRlIG9mIHRoZSBjbG9jawpsb2NrIGFuZCBhdm9pZCAiYnkgc29mdHdhcmUiIHRoZSBjb25kaXRp b25zIHVuZGVyIHdoaWNoIHRoZSB0d28gbG9ja3MKYXJlIHRha2VuLgoKTm90ZTogVGhlc2Ugc3Vn Z2VzdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gbWFkZSBieSBVbGY6Cmh0dHBzOi8vcGF0Y2h3b3Jr Lmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1wbS9wYXRjaC8yMDIyMTEwODAxMzUxNy43NDk2NjUt MS1tYXJleEBkZW54LmRlLyMyNTA5MjU1NAoKKiogQVBQUk9BQ0ggVU5ERVIgRVZBTFVBVElPTiAq KgoKQXMgaGludGVkIGFib3ZlLCBtYXliZSB3ZSBzaG91bGQgY2xhcmlmeSB0aGUgY29uZGl0aW9u cyB1bmRlciB3aGljaCBSUE0KY2FsbHMgY2FuIGJlIG1hZGUgaW4gdGhlIGNsb2NrIHN1YnN5c3Rl bSwgYW5kIGluc3RlYWQgb2YgaW5jbHVkaW5nIHRoZQpSUE0gY2FsbHMgd2l0aGluIHRoZSBjbG9j ayBzdWItY2FsbHMsIHdlIGNvdWxkIGNvbnNpZGVyLCBvbiBhCmNhc2UtYnktY2FzZSBiYXNpczoK LSBsaXN0aW5nIHdoYXQgbmVlZHMgdG8gYmUgcmVzdW1lZCBmb3IgdGhlIHdob2xlIGNsb2NrIG9w ZXJhdGlvbiB0bwogIHN1Y2NlZWQgZmlyc3QsCi0gdGhlbiBydW50aW1lIHJlc3VtZSB0aGUgbmVl ZGVkIGRvbWFpbnMgb3V0c2lkZSBvZiB0aGUgbWFpbiBzdWJzeXN0ZW0KICBsb2NrCi0gYmVmb3Jl IGNvbnRpbnVpbmcgd2l0aCB0aGUgY2xvY2sgb3BlcmF0aW9ucyBhbmQgZXZlbnR1YWxseSBhY3F1 aXJpbmcKICB0aGUgbWFpbiBjbGtfcHJlcGFyZSBsb2NrLgpJT1csIGF2b2lkaW5nIHRoZSBydW50 aW1lIFBNIGNhbGxzIHdpdGggdGhlIHN1YnN5c3RlbSBsb2NrIGFjcXVpcmVkLgoKTGV0J3MgaW1h Z2luZSB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjogY2xrQSAoaW4gcG93ZXIgZG9tYWluIEEpIGlz CnBhcmVudCBvZiBjbGtCIChpbiBwb3dlciBkb21haW4gQikuIExpa2UgYWJvdmUsIGxldCdzIHRy eSB0byBwaWN0dXJlIHRoZQpjYWxsIHN0YWNrOgoKIGNsa19wcmVwYXJlKGNsa0IpIHsKIAltdXRl eF9sb2NrKGNsa19wcmVwYXJlKTsKIAljbGtBID0gY2xrQi0+cGFyZW50OwogCWNsa19wcmVwYXJl KGNsa0EpIHsKIAkJbXV0ZXhfbG9jayhjbGtfcHJlcGFyZSk7IC8qIGZpbmUsIGl0J3MgcmVjdXJz aXZlICovCiAJCXJ1bnRpbWVfcmVzdW1lKGNsa0EtPmRvbWFpbik7IC8vIEJBTkcKIAkJY2xrQS0+ b3BzLT5wcmVwYXJlKCk7CiAJCW11dGV4X3VubG9jayhjbGtfcHJlcGFyZSk7IC8qIGRvZXMgbm90 aGluZyAqLwogCX0KIAlydW50aW1lX3Jlc3VtZShjbGtCLT5kb21haW4pOyAvLyBCQU5HIGFnYWlu CiAJY2xrQi0+b3BzLT5wcmVwYXJlKCk7CiAJbXV0ZXhfdW5sb2NrKGNsa19wcmVwYXJlKTsKIH0K Ck5vdywgbGV0J3MgaW1hZ2luZSB3ZSBrbm93IHdoYXQgY2xvY2tzIGFyZSBnb2luZyB0byBiZSBh Y2Nlc3NlZCBhbmQgdGh1cwpuZWVkIHRvIGJlIHJ1bnRpbWUgcmVzdW1lZC4gTWF5YmUgd2UgY291 bGQgZG8gdGhhdCBpbiBhZHZhbmNlLiBUaGUgbG9naWMKY291bGQgYmVjb21lOgoKIGNsa19wcmVw YXJlKGNsa0IpIHsKKwlsaXN0ID0gbGlzdF91c2VmdWxfY2xvY2tzX2Zvcl9wcmVwYXJlKGNsa0Ip OworCXJ1bnRpbWVfcmVzdW1lKGxpc3QpOwogCW11dGV4X2xvY2soY2xrX3ByZXBhcmUpOwogCWNs a0EgPSBjbGtCLT5wYXJlbnQ7CiAJY2xrX3ByZXBhcmUoY2xrQSkgewogCQltdXRleF9sb2NrKGNs a19wcmVwYXJlKTsgLyogZmluZSwgaXQncyByZWN1cnNpdmUgKi8KLQkJcnVudGltZV9yZXN1bWUo Y2xrQS0+ZG9tYWluKTsKIAkJY2xrQS0+b3BzLT5wcmVwYXJlKCk7CiAJCW11dGV4X3VubG9jayhj bGtfcHJlcGFyZSk7IC8qIGRvZXMgbm90aGluZyAqLwogCX0KLQlydW50aW1lX3Jlc3VtZShjbGtC LT5kb21haW4pOwogCWNsa0ItPm9wcy0+cHJlcGFyZSgpOwogCW11dGV4X3VubG9jayhjbGtfcHJl cGFyZSk7CiB9CgpJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlICJsaXN0X3VzZWZ1bF9jbG9ja3Nf Zm9yX3ByZXBhcmUoKSIgaXMgYSBiaXQKbXlzdGVyaW91cyBhbmQgaGFzIHR3byBhc3BlY3RzOiBm aXJzdCBpdCBuZWVkcyB0byBndWVzcyB3aGF0IGNsb2NrcyBhcmUKbmVlZGVkOiB0aGlzIGlzIGFk ZHJlc3NlZCBpbiB0aGUgbmV4dCBwYXJhZ3JhcGguIEFuZCBzZWNvbmQsIHdlIG5lZWQgdG8KbWFr ZSBzdXJlIHRoZSB0cmVlIGRvZXMgbm90IGNoYW5nZSB1bnRpbCB0aGUgbG9jayBpcyBhY3F1aXJl ZCwgdGhpcyBpcwphZGRyZXNzZWQgaW4gdGhlICIjMTogQ2xvY2sgdHJlZSBjaGFuZ2VzIiBjaGFw dGVyIGJlbG93LgoKU28sIHJlZ2FyZGluZyB0aGUgbGlzdCBpdHNlbGYsIGFueSBvcGVyYXRpb24g b24gYW55IGNsb2NrIGluIHRoZSB0cmVlCmludm9sdmVzIHRoZSBzYWlkIGNsb2NrIHBsdXMgb25l IG9yIHNldmVyYWwgY2xvY2sgImxpc3RzIiBhbW9uZyB0aGUKZm9sbG93aW5nIGNob2ljZXM6CgpB LSBBbGwgaXRzIHBhcmVudHMsIHRocm91Z2ggdGhlIGNsa19jb3JlLT5wYXJlbnQgbGluay4KICAg PT4gVHlwaWNhbGx5IGR1cmluZyBwcmVwYXJlL3VucHJlcGFyZSBvcGVyYXRpb25zLgoKQi0gQWxs IGl0cyBjaGlsZHJlbiBhbmQgc3ViIGNoaWxkcmVuLCB0aHJvdWdoIGFsbCB0aGUgc3ViCiAgIGNs a19jb3JlLT5jaGlsZHJlbiBobGlzdC4KICAgPT4gVHlwaWNhbGx5IGR1cmluZyByYXRlIG9wZXJh dGlvbnMgKGdldCBhbmQgc2V0LCBzZWUgbm90ZSBiZWxvdykuCgpDLSBQYXJlbnRzIGFuZCBjaGls ZHJlbiBvZiB0aGUgbmV3IHBhcmVudC4KICAgPT4gSW4gY2FzZSBvZiByZS1wYXJlbnRpbmcsIGV4 cGxpY2l0bHkgYXNrZWQgb3IgYXMgYSByZXN1bHQgb2YgYSByYXRlCiAgIGNoYW5nZS4KClNpZGUg bm90ZTogdGhlIGNsb2NrIGNvcmUgZG9lcyBub3QgYWx3YXlzIHJlbWVtYmVyIHRoZSByYXRlIG9m IHRoZQpjbG9ja3MgdGhhdCB3ZXJlIGFscmVhZHkgY29uZmlndXJlZC4gVEJIIEkgZGlkIG5vdCB1 bmRlcnN0YW5kIHdoeSwKYmVjYXVzZSBpdCBzZWVtcyB0cml2aWFsIHRvIGRvLiBJbnN0ZWFkIHRo ZSBjb3JlIHBoeXNpY2FsbHkgYWNjZXNzZXMgdGhlCmNsb2NrIGNvbnRyb2xsZXIgd2hpY2ggaW52 b2x2ZXMgYSBsb3Qgb2YgcnVudGltZSBQTSBoYW5kbGluZy4gSW4KcHJhY3RpY2UsIHRoaXMgaXMg bm90IGFsd2F5cyB0aGUgY2FzZSBidXQgc29tZSBjbG9jayBjb250cm9sbGVyIGRyaXZlcnMKcmVx dWVzdCB0byBiZSAiYXNrZWQiIHRvIHJlYWQgdGhlIGFjdHVhbCByYXRlIGVhY2ggdGltZS4gUHJv YmxlbSBpcywKdGhleSByZS1jYWxjdWxhdGUgdGhlIHJhdGUgYW5kIHRoZW4gYWxzbyBwcm9wYWdh dGUgdGhlIHJlc3VsdCBhY3Jvc3MgYWxsCnRoZSBjaGlsZHJlbiwgd2hpY2ggaW52b2x2ZXMgbWFz c2l2ZSBhbW91bnRzIG9mIChJTUhPKSB1c2VsZXNzCndha2UtdXBzLiBUaGlzIGhvbmVzdGx5IGZl ZWxzIGEgYml0IHN1Yi1vcHRpbWFsLCB3aXRob3V0IHVuZGVyc3RhbmRpbmcKYmV0dGVyIHdoeSB0 aGlzIGlzIGZvci4KCioqIERSQVdCQUNLUyBPRiBUSElTIEFQUFJPQUNIICoqCgojMTogQ2xvY2sg dHJlZSBjaGFuZ2VzCgpPZiBjb3Vyc2UgdGhlcmUgd2FzIGEgcG9pbnQgaW4gbWFraW5nIHRoZSBy dW50aW1lIHJlc3VtZSBjYWxscyBpbnNpZGUKdGhlIGNsa19wcmVwYXJlIGxvY2s6IHRoZSBsb2Nr IHByb3RlY3RzIGFnYWluc3QgY2xrIHRyZWUgY2hhbmdlcy4gQnV0CnNvbWVob3cgdGhpcyBpcyBz dGlsbCBtYW5hZ2VhYmxlLCB3ZSBjb3VsZDoKLSBhY3F1aXJlIHRoZSBsb2NrCi0gcGFyc2UgdGhl IGxpc3Qgb2YgcmVsZXZhbnQgY2xvY2tzL3JlZmVyZW5jZSBjb3VudGluZyB0aGVtIGFuZCBzYXZl CiAgdGhlbSBpbiBhIGxpc3QKLSByZWxlYXNlIHRoZSBsb2NrCi0gcnVudGltZSByZXN1bWUgdGhl IGNsb2NrcyBpbiB0aGUgbGlzdAotIGFjcXVpcmUgdGhlIGxvY2sgYWdhaW4KLSBjb21wYXJlIHRo ZSBhY3R1YWwgdHJlZSB3aXRoIHRoZSBsaXN0IGFuZCB0cnkgYWdhaW4gdGhlIHdob2xlCiAgb3Bl cmF0aW9uIGlmIHNvbWV0aGluZyBjaGFuZ2VkLgoKRXN0aW1hdGVkIHN0YXR1czogbWFuYWdlYWJs ZS4KCiMyOiBSZS1QYXJlbnRpbmcKCldoZW4gcGVyZm9ybWluZyBhbG1vc3QgYW55IGNsb2NrIG9w ZXJhdGlvbiwgd2UgYWxyZWFkeSBrbm93IGluIGFkdmFuY2UKd2hhdCBjbG9ja3MgaW4gdGhlIHRy ZWUgd2lsbCBiZSBpbXBhY3RlZCBhbmQgdGh1cyBjYW4gcHJlY2lzZWx5IGd1ZXNzCndoYXQgbmVl ZHMgdG8gYmUgcnVudGltZSByZXN1bWVkIGluIGFkdmFuY2UuIEJ1dCB0aGlzIGlzIG5vdCB3b3Jr aW5nCndoZW4gcmUtcGFyZW50aW5nIGlzIGludm9sdmVkLCBhcyB0aGUgcmUtcGFyZW50aW5nIG9w cG9ydHVuaXR5IGlzIG9ubHkKdHJpZWQgdmVyeSBkZWVwbHkgaW4gdGhlIGNhbGwgc3RhY2sgZmFy IGJleW9uZCBhY3F1aXJpbmcgdGhlIG1haW4gbG9jay4KCk9uZSBpZGVhIHRvIHdvcmthcm91bmQg dGhlIHNpdHVhdGlvbiB3YXMgdG8gc29tZWhvdyBzYXZlIHRoZSBuZXcgcGFyZW50CmhhbmRsZSwg cHJvcGFnYXRlIGEgc3BlY2lmaWMgZXJyb3IgdXAgdGhyb3VnaCB0aGUgY2FsbCBzdGFjayAodHlw aWNhbGx5LAotRUFHQUlOKSwgdXAgdG8gdGhlIHBvaW50IHdoZXJlIHdlIGNhbiBwcm9jZXNzIHRo aXMgZXJyb3IsIHBlcmZvcm0gYSBuZXcKcm91bmQgb2YgcnVudGltZSByZXN1bWUgY2FsbHMgb3Zl ciB0aGUgbmV3IHBhcmVudCB0cmVlIGFuZCByZXRyeSB0aGUKb3BlcmF0aW9uLgoKRXN0aW1hdGVk IHN0YXR1czogbWFuYWdlYWJsZS4KCiMzOiBEZWJ1ZyBkdW1wcyBtaWdodCBzbGlnaHRseSBnZXQg b3V0IG9mIHN5bmMKClRoZXJlIGFyZSBhIGNvdXBsZSBvZiBzaXR1YXRpb25zIHdoZXJlIGFsbCB0 aGUgY2xvY2tzIChvciBhbGwgdGhlIG9ycGhhbgpjbG9ja3MsIG9yIHRoZSByb290IGNsb2Nrcykg d2lsbCBiZSAic2hvd24vZHVtcGVkIiBieSB0aGUgdXNlci4gUHJvYmxlbQppczogaXQgaXMgZmlu ZSB0byBzaG93IGFsbCB0aGUgcGFyZW50cy9jaGlsZHJlbiBvZiBhIHNpbmdsZSBjbG9jawoodHlw aWNhbGx5IGFsbCB0aGUgY2hpbGRyZW4gb2Ygb25lIHJvb3QgY2xvY2spLCBidXQgaW52b2x2ZSBh IGxvdCBvZgpjb2RlIGR1cGxpY2F0aW9uIHRvIGNvdmVyIGVnLiBhbGwgdGhlIHJvb3QgY2xvY2tz IGF0IHRoZSBzYW1lIHRpbWUuIElmCndlIGRlY2lkZSB0aGF0IHRoaXMgaXMgb2theSwgd2UgY2Fu IGl0ZXJhdGUgb3ZlciB0aGVzZSByb290IGNsb2NrcywKcmVsZWFzaW5nIHRoZSBsb2NrIGJldHdl ZW4gdGhlbSwgd2hpY2ggaXMgb2J2aW91c2x5IHJhY3kuCgpFc3RpbWF0ZWQgc3RhdHVzOiBwcm9i YWJseSBtYW5hZ2VhYmxlLCBtYXliZSBub3Qgc28gaW1wb3J0YW50LgoKIzQ6IENsb2NrIGNvcmUg cmVjdXJzaXZpdHkgYW5kIHVucmVsYXRlZCBjbG9ja3MKClRoaXMgaXMgdGhlIG1haW4gZHJhd2Jh Y2sgd2l0aCB0aGlzIGFwcHJvYWNoLCBhbmQgdGhhdCBpcyB3aGF0Cm1vdGl2YXRlZCB0aGlzIGxl dHRlciBpbiB0aGUgZmlyc3QgcGxhY2UuCgpUaGUgY2xvY2sgY29yZSBpcyByZWN1cnNpdmUuIEF0 IGZpcnN0IEkgdGhvdWdodCBpdCB3YXMgdXNlZnVsIHRvCnNpbXBsaWZ5IHRoZSBsb2NraW5nIG1l Y2hhbmlzbSBpbnNpZGUgdGhlIGNvcmUgaXRzZWxmLCBpbiBwYXJ0aWN1bGFyCmJlY2F1c2UgdGhl IGNvcmUgaXMgbWFpbmx5IGJ1aWx0IG9mZiByZWN1cnNpdmUgZnVuY3Rpb25zLCBidXQgdGhlcmUg YXJlCnR3byBhY3R1YWwgdXNlIGNhc2VzIHRoYXQgYXJlIG11Y2ggaGFyZGVyIHRvIHNvbHZlLiBU aGV5IGFyZSBtZW50aW9uZWQKaW4gdGhlIGNvbW1pdCBpbnRyb2R1Y2luZyB0aGUgcmVlbnRyYW5j ZSBtZWNoYW5pc206CjUzM2RkZWIxZTg2ZiAoImNsazogYWxsb3cgcmVlbnRyYW50IGNhbGxzIGlu dG8gdGhlIGNsayBmcmFtZXdvcmsiKQoKQmFzaWNhbGx5LCBiZXNpZGVzIHNpbXBsaWZ5aW5nIHRo ZSBsb2NraW5nIG1lY2hhbmlzbSBpbiB0aGUgY29yZSBpdHNlbGY6CgpBOiBFbmFibGluZyBhIGNs b2NrIG1heSByZXF1aXJlIGVuYWJsaW5nIGEgInRvdGFsbHkgdW5yZWxhdGVkIiBwZXJpcGhlcmFs CiAgIGZpcnN0LiBUeXBpY2FsbHksIGFuIEkyQyBhdWRpbyBjb2RlYyB0aGF0IHdvdWxkIG5lZWQg dG8gYmUgY29uZmlndXJlZAogICBpbiBvcmRlciB0byBwcm9kdWNlIGEgY2xvY2suIEluIHRoZSAt PnByZXBhcmUoKSBob29rIGltcGxlbWVudGF0aW9uLAogICBvbmUgY2FuIGV4cGVjdCBzb21lIGtp bmQgb2YgaTJjX3hmZXIoKSBjYWxsLCB3aGljaCBpbiB0dXJucyB3aWxsCiAgIHJ1bnRpbWUgcmVz dW1lIHRoZSBJMkMgY29udHJvbGxlciB1c2VkIHRvIGFjY2VzcyB0aGUgY29kZWMuIFNvIHdlIGVu ZAogICB1cCBhY3F1aXJpbmcgYWdhaW4gdGhlIHBvd2VyIGRvbWFpbiBsb2NrIHdpdGggdGhlIGNs a19wcmVwYXJlIGxvY2sKICAgdGFrZW4uCgpCOiBUaGVyZSBpcyBvbmUgY2xvY2sgZHJpdmVyICh0 ZWdyYS9jbGstZGZsbC5jKSB3aGljaCBwZXJmb3JtcyBwaW5jdHJsCiAgIGNoYW5nZXMgaW5zaWRl IGNsb2NrIG9wZXJhdGlvbnMuIElmIHRoZSBwbGF0Zm9ybSBpcyBydW50aW1lIFBNCiAgIGVuYWJs ZWQsIHRoZSBwaW4gY29udHJvbGxlciBtYXkgcmVxdWlyZSBiZWluZyBydW50aW1lIHJlc3VtZWQg YW5kCiAgIG9uY2UgYWdhaW4gd2UgbWlnaHQgZmFsbCBpbnRvIHRoZSBzYW1lIHJlY3Vyc2l2aXR5 IGlzc3VlLgoKSSBkb24ndCBzZWUgYW55IHBvc2l0aXZlIG91dGNvbWUgaW4gdHJ5aW5nIHRvIGd1 ZXNzIG5vciBkaXNjb3ZlciB0aGVzZQpjYXNlcyBkeW5hbWljYWxseSBhbmQgaWYgd2Ugd2FudCB0 byBhZGRyZXNzIHRoYXQgSSBiZWxpZXZlIHNvbWUga2luZCBvZgpzdGF0aWMgZGVjbGFyYXRpb25z IG11c3QgYmUgZG9uZSBieSB0aGUgY2xvY2sgY29udHJvbGxlciBkcml2ZXJzIChhbmQKdHJ5aW5n IHRvIGRvIHRoYXQgbm93IHdpbGwgaW5ldml0YWJseSBsZWFkIHRvIHJlZ3Jlc3Npb25zIGlmIHdl IG1pc3MKYSBzaW5nbGUgY2FzZSkuCgpFc3RpbWF0ZWQgc3RhdHVzOiBwcm9ibGVtYXRpYy4KCioq IENPTkNMVVNJT04gQU5EIFFVRVNUSU9OUyAqKgoKSSd2ZSBhY3R1YWxseSBkcmFmdGVkIHRoZSBp ZGVhIGV4cGxhaW5lZCBhYm92ZS4gSSBuZWVkIG1vcmUgd29yayB0byBnZXQKaXQgdXAgdG8gYSB3 b3JraW5nIHN0YXRlLCBhcyB0aGUgd2hvbGUgY2xvY2sgY29yZSBtdXN0IGJlIGNvbnZlcnRlZAp0 byB0aGlzIGxvZ2ljIGluIG9yZGVyIGZvciBpdCB0byB3b3JrLiBJIGJlbGlldmUgdGhpcyBhcHBy b2FjaCBpcwpyZWxldmFudCwgYnV0IGl0IHN0aWxsIGhhcyBibGluZCBzcG90cyB3ZSBuZWVkIHRv IGZpZ3VyZSBvdXQgKCM0IGFib3ZlKQpmb3Igd2hpY2ggSSB3b3VsZCBsaWtlIHRvIGdldCBzb21l IGZlZWRiYWNrLgoKTWF5YmUgaG93ZXZlciB0aGUgYXBwcm9hY2ggd2lsbCBub3QgYmUgYWNrbm93 bGVkZ2VkIGFuZCBhbm90aGVyCmRpcmVjdGlvbiB3aWxsIGJlIHBvaW50ZWQuIEluIHRoaXMgY2Fz ZSBJIHdvdWxkIGJlIHBsZWFzZWQgdG8gZGlzY3VzcyBpdAphbmQgc2VlIHdoYXQgd2UgY2FuIGRv LiBJbiBhbGwgY2FzZXMsIHRoZSBpLk1YOCBpc3N1ZSBpcyByZWFsIGFuZCBtdXN0CmJlIGZpeGVk LiBJZiB3ZSBkb24ndCBkbyBpdCBwcm9wZXJseSwgc29vbiBhbm90aGVyIHBvd2VyLW9yaWVudGVk IFNvQwp3aWxsIGFsc28gc2hvdyBzaW1pbGFyIGRlZmVjdHMuIEJhc2ljYWxseSBhbnkgTGludXgg YmFzZWQgb3BlcmF0aW5nCnN5c3RlbSBydW5uaW5nIG9uIGhhcmR3YXJlIGZlYXR1cmluZyBzaW1p bGFyaXRpZXMgaXMgc3ViamVjdCB0byBkZWFkbG9jawphdCBhbnkgbW9tZW50LgoKSSBob3BlIHRo aXMgcmVwb3J0IHdpbGwgYmUgcHJlY2lzZSBlbm91Z2ggYW5kIHJhaXNlIGlkZWFzIHRvIGhlbHAg Z29pbmcKZm9yd2FyZCBhbmQgZmluYWxseSBhZGRyZXNzIHRoaXMgaXNzdWUgdGhhdCBoYXMgYmVl biBvcGVuZWQgc2luY2UKMjAyMiAoYXQgbGVhc3QpIGluIGEgcmF0aGVyIHNhdGlzZnlpbmcgd2F5 LgoKVGhhbmtzLApNaXF1w6hsCgpQUzogVGhlcmUgYXJlIG1heWJlIG90aGVyIHdheXMuIE9mIGNv dXJzZSBJIGhhZCB0byBwaWNrIHRoZSBvbmUgdGhhdApmZWx0IHRoZSBtb3JlIHByb21pc2luZywg ZXZlbiB0aG91Z2ggSSBpbml0aWFsbHkgY29uc2lkZXJlZCBhIGNvdXBsZQpvdGhlciBhbHRlcm5h dGl2ZXM6CiogQWRkcmVzc2luZyB0aGUgaXNzdWUgaW4gdGhlIHBvd2VyIGRvbWFpbiBzdWJzeXN0 ZW0gPyBTZWVtZWQgbGVzcwogIHJlbGV2YW50IHRoYW4gaW4gdGhlIGNsb2NrIGNvcmUsIGJlY2F1 c2Ugb2YgdGhlIHBoeXNpY2FsCiAgZGVwZW5kZW5jaWVzLiBCdXQgcGxlYXNlIGNvbnZpbmNlIG1l IDotKQoqIEkgc2F3IGNvbW1lbnRzIGFib3V0IGNoYW5naW5nIHRoZSBjbGtfcHJlcGFyZSBsb2Nr IHNlbWFudGljcywgYnV0IHdlCiAgd2lsbCBhbHdheXMgbmVlZCB0byBzZXJpYWxpemUgYWNjZXNz ZWQgdG8gdGhlIGNsb2NrIHRyZWUgYW5kIGFmdGVyCiAgZGlnZ2luZyBhIGJpdCBpbiB0aGUgY2xv Y2sgY29yZSBJIGRvbid0IHNlZSBhbnkgd2F5IG91dCB3aXRoIHRoaXMKICBzb2x1dGlvbi4KKiBQ cmV2ZW50aW5nIHBvd2VyIGRvbWFpbnMgZnJvbSBnYXRoZXJpbmcgY2xvY2tzPyBBbHNvIGEgcG9z c2libGUKICBhcHByb2FjaCBtYXliZSwgZXZlbiB0aG91Z2ggdGhlIHNpdHVhdGlvbiBsaXN0ZWQg YWJvdmUgYXJlIGZhciBmcm9tCiAgc3RyYWlnaHRmb3J3YXJkIHRvIGFkZHJlc3MgaW4gdGhpcyBj YXNlLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt YXJtLWtlcm5lbAo=