Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vZTbO-00CP3n-2x for pgsql-hackers@arkaria.postgresql.org; Sat, 27 Dec 2025 12:41:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vZTbN-00Bez3-1b for pgsql-hackers@arkaria.postgresql.org; Sat, 27 Dec 2025 12:40:58 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vZTbM-00Beyo-1J for pgsql-hackers@lists.postgresql.org; Sat, 27 Dec 2025 12:40:57 +0000 Received: from fhigh-a8-smtp.messagingengine.com ([103.168.172.159]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vZTbI-0035I7-1j for pgsql-hackers@postgresql.org; Sat, 27 Dec 2025 12:40:56 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfhigh.phl.internal (Postfix) with ESMTP id 17A411400083; Sat, 27 Dec 2025 07:40:50 -0500 (EST) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-05.internal (MEProxy); Sat, 27 Dec 2025 07:40:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1766839250; x=1766925650; bh=piVTR0+l0K 2cPlgMlsV/57URM1L4r9tH93nb4Q3jCx0=; b=Rod+uMvzo1VXdcY3s1DnR+OJFJ LTfO2auRL+DkJMqanD9GsaZQl2It4xBz/WtRh561wqq/QcBIVg0K9nDrU58Hr6bj pKy+9wVwTWfJHmEg3ed+nDduXh27Jk6UaGMv5joBx7VX4gc4+zQVTMxY8HjUAs6K EdJkOLLAEPa+uvO0HGpuXmZIiD3IVSJ/elCaxrPcutzYLumWkj89z6U97M1FspMo JO/z03QX6BYDWBpWz/sLAB9R/+dGU2mCKlorSCuoHnz9l+fYv06EwAVA1Ixj+nuZ f4uty1QhM7w5bXsIVPMQI9g9zJAvoghDh78fg9K+mz0IwPvFiNkETHcelEJA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1766839250; x=1766925650; bh=piVTR0+l0K2cPlgMlsV/57URM1L4r9tH93n b4Q3jCx0=; b=nt/MX3gzQK+e7YW3VZyD+r0qSwlwPBWl1z878DRjflMnsabHKDB wRU6H7ITo5M1sucNdr06tYSsmEV4z0Ps1oGxy0bMug4bSML0l/z+jwcsK/+zKDT9 C93iXHv/ZYYTTOOmnz1iwMZnJ7bMtZYuSGZ7MdSjYgBjWgiWPGVDsi5lBG6/WQJl CxRpPAhSFPWKiN5nBW9pMNhePB8Uq5uwVQLpngk6zt3fwKCJ9+LXAoLDsU9AGOlN Wg8kqH0Ska/+pYVt3RlufQlcIehyH9WiqiOXwusoNfPZ5bLNZAhBo+N/T3k6Shmf no2T7Jq1tSR2U7uCr13FGjI50k8rC/+PxyQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgdejudeflecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecunecujfgurhepofggfffhvfevkfgjfhfutgesmhdtreerre dttdenucfhrhhomhepfdflohgvlhculfgrtghosghsohhnfdcuoehjohgvlhestghomhhp ihhlvghrrdhorhhgqeenucggtffrrghtthgvrhhnpeffgfelffffvdehhfeigeefieejud ejvdeiueevueeggfevueekveeiteehhfetieenucevlhhushhtvghrufhiiigvpedtnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehjohgvlhestghomhhpihhlvghrrdhorhhgpdhnsg gprhgtphhtthhopeefpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehlihdrvghv rghnrdgthhgrohesghhmrghilhdrtghomhdprhgtphhtthhopehpghhsqhhlqdhhrggtkh gvrhhssehpohhsthhgrhgvshhqlhdrohhrghdprhgtphhtthhopehtghhlsehsshhsrdhp ghhhrdhprgdruhhs X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id A09A618E0069; Sat, 27 Dec 2025 07:40:49 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Sat, 27 Dec 2025 13:40:29 +0100 From: "Joel Jacobson" To: "Tom Lane" Cc: "Chao Li" , pgsql-hackers Message-Id: In-Reply-To: <6e538502-81c8-453b-ba6d-be2a5ce85e9e@app.fastmail.com> References: <6899c044-4a82-49be-8117-e6f669765f7e@app.fastmail.com> <165530.1752362320@sss.pgh.pa.us> <02a7cd37-e2fc-4212-8b19-f8c239c95fb8@app.fastmail.com> <96f00bf1-cc9d-4520-9d02-9e14e7767c88@app.fastmail.com> <30c2aa7d-dd6c-4b68-a2e4-f217a1a34acf@app.fastmail.com> <0b4d402a-9ac2-4aa8-acf8-8231dbe579ea@app.fastmail.com> <3095599.1758644879@sss.pgh.pa.us> <0dc6a2cc-5216-4dc1-9dd2-430cafc6095b@app.fastmail.com> <52CC167F-763B-4ECA-B0B4-DAB381816828@gmail.com> <9186C6D0-F7A9-482A-9183-89E530B57E36@gmail.com> <1073593.1759423179@sss.pgh.pa.us> <4bd5e6c4-6fa7-44bb-869d-59a32a331fa8@app.fastmail.com> <85828f29-e72e-4400-94f3-9a69bc8dc239@app.fastmail.com> <2495353.1759860890@sss.pgh.pa.us> <8aeae418-92a6-4bbd-9c06-9574c79e59f7@app.fastmail.com> <2531672.1759868124@sss.pgh.pa.us> <474efa78-337c-41cd-a73a-f845a0115109@app.fastmail.com> <2749343.1759949176@sss.pgh.pa.us> <8bfca2be-1ec0-4e15-aafb-0b7b661fe936@app.fastmail.com> <9eba307f-f2fb-48f0-9507-2e197f39ef9e@app.fastmail.com> <8c71183a-0d28-4bcf-a806-78446ff95404@app.fastmail.com> <1009807.1760476747@sss.pgh.pa.us> <1F7227F5-C33D-4E2C-8511-33F1468590D0@gmail.com> <0a5a20d3-4621-46b3-b2ab-903f63a20dea@app.fastmail.com> <6F913129-ABEF-4004-AAF3-F22FC!3!4!29AE8@gmail.com> <1547585.1760645808@sss.pgh.pa.us> <14865EB6-0BF4-462B-9072-10BDAC10> <1459429.1764101848@sss.pgh.pa.us> <6e538502-81c8-453b-ba6d-be2a5ce85e9e@app.fastmail.com> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=d47125f30b1149908a534526362cf7ab List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --d47125f30b1149908a534526362cf7ab Content-Type: text/plain Content-Transfer-Encoding: 7bit On Fri, Dec 26, 2025, at 21:12, Joel Jacobson wrote: > On Tue, Nov 25, 2025, at 21:17, Tom Lane wrote: >> "Joel Jacobson" writes: >>> It looks to me like it would be best with two boolean fields; one >>> boolean to stage the updates during PreCommit_Notify, that each >>> pendingActions could flip back and forth, and another boolean that >>> represents the current value, which we would overwrite with the staged >>> value during AtCommit_Notify. >> >> +1, I had a feeling that a single boolean wouldn't quite do it. >> (There are various ways we could define the states, but what >> you say above seems pretty reasonable.) > > I've implemented the two boolean approach and think it's good. > > The signals arrays are now preallocated during PreCommit_Notify. > > More details in the patch message under "Two-phase staging pattern". New version with some fixes. I should have mentioned that v31 is based on v28 (v29 and v30 were discarded). Here is also a write-up of changes from v28 to v31: 0001: No changes. 0002: * To avoid post-commit OOM hazards, we now allocate hash table entries during PreCommit_Notify. Each listener entry has two boolean flags; staged and current. For each LISTEN/UNLISTEN action the staged flag is set/unset during PreCommit_Notify. The last action's staged value per channel is then copied from staged to current during AtCommit_Notify. * On abort, AtAbort_Notify reverts staged changes. * The signal arrays are now preallocated during PreCommit_Notify. * Renamed Exec_UnlistenAllCommit to CleanupListenersOnExit for the exit-handler path, since it has different semantics (unconditional removal rather than staged/current handling). In case someone has already started reviewing v31, these are the changes I made in v32: 0001: * Added test: Check UNLISTEN * cancels a LISTEN in the same transaction 0002: * Fixed initialization of QueueBackendStatus fields, corrected the LISTEN + UNLISTEN same-transaction case, restructured AtAbort_Notify to mirror AtCommit_Notify, and added a guard for OOM during staging. /Joel --d47125f30b1149908a534526362cf7ab Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v32.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v32.patch?=" Content-Transfer-Encoding: base64 RnJvbSA5NTUwYzk4YWYyZjI0ZmI3NjUzZTlmMThlNDUxY2YwMTMxMjI0YTcyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU2F0LCAyNyBEZWMgMjAyNSAwODowNjoyMSArMDEwMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBJbXByb3ZlIExJU1RFTi9OT1RJRlkgdGVzdCBjb3ZlcmFnZQoKVGhpcyBhZGRz IGlzb2xhdGlvbiB0ZXN0cyB0byBjb3ZlciBwcmV2aW91c2x5IHVudGVzdGVkIGNvZGUgcGF0 aHM6CgoqIENoZWNrIHNpbXBsZSBOT1RJRlkgcmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQgaGFz IG5vIGFjdGlvbgoqIENoZWNrIExJU1RFTiByZXBhcmVudGluZyBpbiBzdWJ0cmFuc2FjdGlv bgoqIENoZWNrIExJU1RFTiBtZXJnZSBwYXRoIHdoZW4gYm90aCBvdXRlciBhbmQgaW5uZXIg dHJhbnNhY3Rpb25zIGhhdmUgYWN0aW9ucwoqIENoZWNrIExJU1RFTiBhYm9ydCBwYXRoIChS T0xMQkFDSyBUTyBTQVZFUE9JTlQgZGlzY2FyZHMgcGVuZGluZyBhY3Rpb25zKQoqIENoZWNr IG5vdGlmaWNhdGlvbl9tYXRjaCBmdW5jdGlvbiAodHJpZ2dlcmVkIGJ5IGhhc2ggdGFibGUg ZHVwbGljYXRlIGRldGVjdGlvbikKKiBDaGVjayB0aGF0IG5vdGlmaWNhdGlvbnMgc2VudCBm cm9tIGEgYmFja2VuZCB0aGF0IGhhcyBub3QgZG9uZSBMSVNURU4KICBhcmUgcHJvcGVybHkg ZGVsaXZlcmVkIHRvIGEgbGlzdGVuZXIgaW4gYW5vdGhlciBiYWNrZW5kCiogQ2hlY2sgVU5M SVNURU4gKiBjYW5jZWxzIGEgTElTVEVOIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uCgpUaGlz IGFsc28gYWRkcyBhIHRlc3QgdG8gcHJlcGFyZSBmb3IgdGhlIG5leHQgcGF0Y2g6CgoqIENo ZWNrIENoYW5uZWxIYXNoQWRkTGlzdGVuZXIgYXJyYXkgZ3Jvd3RoCi0tLQogc3JjL3Rlc3Qv aXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlmeS5vdXQgfCAxMjQgKysrKysrKysrKysr KysrKysrLQogc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjICAg fCAgNzIgKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTk1IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0 ZWQvYXN5bmMtbm90aWZ5Lm91dCBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9hc3lu Yy1ub3RpZnkub3V0CmluZGV4IDU1NmUxODA1ODkzLi41ZDZiY2NlMmIwMiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlmeS5vdXQKKysrIGIv c3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlmeS5vdXQKQEAgLTEsNCAr MSw0IEBACi1QYXJzZWQgdGVzdCBzcGVjIHdpdGggMyBzZXNzaW9ucworUGFyc2VkIHRlc3Qg c3BlYyB3aXRoIDcgc2Vzc2lvbnMKIAogc3RhcnRpbmcgcGVybXV0YXRpb246IGxpc3RlbmMg bm90aWZ5MSBub3RpZnkyIG5vdGlmeTMgbm90aWZ5Zgogc3RlcCBsaXN0ZW5jOiBMSVNURU4g YzE7IExJU1RFTiBjMjsKQEAgLTQ3LDYgKzQ3LDExNSBAQCBub3RpZmllcjogTk9USUZZICJj MiIgd2l0aCBwYXlsb2FkICJwYXlsb2FkIiBmcm9tIG5vdGlmaWVyCiBub3RpZmllcjogTk9U SUZZICJjMSIgd2l0aCBwYXlsb2FkICJwYXlsb2FkcyIgZnJvbSBub3RpZmllcgogbm90aWZp ZXI6IE5PVElGWSAiYzIiIHdpdGggcGF5bG9hZCAicGF5bG9hZHMiIGZyb20gbm90aWZpZXIK IAorc3RhcnRpbmcgcGVybXV0YXRpb246IGxpc3RlbmMgbm90aWZ5c19zaW1wbGUKK3N0ZXAg bGlzdGVuYzogTElTVEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIG5vdGlmeXNfc2ltcGxlOiAK KwlCRUdJTjsKKwlTQVZFUE9JTlQgczE7CisJTk9USUZZIGMxLCAnc2ltcGxlMSc7CisJTk9U SUZZIGMyLCAnc2ltcGxlMic7CisJUkVMRUFTRSBTQVZFUE9JTlQgczE7CisJQ09NTUlUOwor Citub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJzaW1wbGUxIiBmcm9tIG5v dGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMiIgd2l0aCBwYXlsb2FkICJzaW1wbGUyIiBm cm9tIG5vdGlmaWVyCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBsc2JlZ2luIGxzc2F2ZXBv aW50IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorc3RlcCBsc2JlZ2lu OiBCRUdJTjsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNsaXN0 ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBsc3JlbGVhc2U6IFJFTEVBU0UgU0FW RVBPSU5UIHMxOworc3RlcCBsc2NvbW1pdDogQ09NTUlUOworc3RlcCBsc25vdGlmeTogTk9U SUZZIGMxLCAnc3VieGFjdF90ZXN0JzsKK2xpc3Rlbl9zdWJ4YWN0OiBOT1RJRlkgImMxIiB3 aXRoIHBheWxvYWQgInN1YnhhY3RfdGVzdCIgZnJvbSBsaXN0ZW5fc3VieGFjdAorCitzdGFy dGluZyBwZXJtdXRhdGlvbjogbHNiZWdpbiBsc2xpc3Rlbl9vdXRlciBsc3NhdmVwb2ludCBs c2xpc3RlbiBsc3JlbGVhc2UgbHNjb21taXQgbHNub3RpZnkKK3N0ZXAgbHNiZWdpbjogQkVH SU47CitzdGVwIGxzbGlzdGVuX291dGVyOiBMSVNURU4gYzM7CitzdGVwIGxzc2F2ZXBvaW50 OiBTQVZFUE9JTlQgczE7CitzdGVwIGxzbGlzdGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsK K3N0ZXAgbHNyZWxlYXNlOiBSRUxFQVNFIFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNjb21taXQ6 IENPTU1JVDsKK3N0ZXAgbHNub3RpZnk6IE5PVElGWSBjMSwgJ3N1YnhhY3RfdGVzdCc7Cits aXN0ZW5fc3VieGFjdDogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJzdWJ4YWN0X3Rlc3Qi IGZyb20gbGlzdGVuX3N1YnhhY3QKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGxzYmVnaW4g bHNzYXZlcG9pbnQgbHNsaXN0ZW4gbHNyb2xsYmFjayBsc2NvbW1pdCBsc25vdGlmeV9jaGVj aworc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNBVkVQT0lOVCBz MTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBsc3JvbGxi YWNrOiBST0xMQkFDSyBUTyBTQVZFUE9JTlQgczE7CitzdGVwIGxzY29tbWl0OiBDT01NSVQ7 CitzdGVwIGxzbm90aWZ5X2NoZWNrOiBOT1RJRlkgYzEsICdzaG91bGRfbm90X3JlY2VpdmUn OworCitzdGFydGluZyBwZXJtdXRhdGlvbjogbHVubGlzdGVuX2FsbCBub3RpZnkxIGxjaGVj aworc3RlcCBsdW5saXN0ZW5fYWxsOiBCRUdJTjsgTElTVEVOIGMxOyBVTkxJU1RFTiAqOyBD T01NSVQ7CitzdGVwIG5vdGlmeTE6IE5PVElGWSBjMTsKK3N0ZXAgbGNoZWNrOiBTRUxFQ1Qg MSBBUyB4OworeAorLQorMQorKDEgcm93KQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBs aXN0ZW5jIG5vdGlmeV9tYW55X3dpdGhfZHVwCitzdGVwIGxpc3RlbmM6IExJU1RFTiBjMTsg TElTVEVOIGMyOworc3RlcCBub3RpZnlfbWFueV93aXRoX2R1cDogCisJQkVHSU47CisJU0VM RUNUIHBnX25vdGlmeSgnYzEnLCAnbXNnJyB8fCBzOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxNykgczsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdtc2cxJyk7CisJQ09N TUlUOworCitwZ19ub3RpZnkKKy0tLS0tLS0tLQorICAgICAgICAgCisgICAgICAgICAKKyAg ICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisg ICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAor ICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAK KygxNyByb3dzKQorCitwZ19ub3RpZnkKKy0tLS0tLS0tLQorICAgICAgICAgCisoMSByb3cp CisKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEiIGZyb20gbm90 aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzIiIGZyb20g bm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzMiIGZy b20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzQi IGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1z ZzUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQg Im1zZzYiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxv YWQgIm1zZzciIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIm1zZzgiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRo IHBheWxvYWQgIm1zZzkiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3 aXRoIHBheWxvYWQgIm1zZzEwIiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJj MSIgd2l0aCBwYXlsb2FkICJtc2cxMSIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6IE5PVElG WSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTIiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBO T1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEzIiBmcm9tIG5vdGlmaWVyCitub3RpZmll cjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxNCIgZnJvbSBub3RpZmllcgorbm90 aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTUiIGZyb20gbm90aWZpZXIK K25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzE2IiBmcm9tIG5vdGlm aWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxNyIgZnJvbSBu b3RpZmllcgorCitzdGFydGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBsbGlzdGVuIGwybGlz dGVuIGwzbGlzdGVuIGxzbGlzdGVuCitzdGVwIGxpc3RlbmM6IExJU1RFTiBjMTsgTElTVEVO IGMyOworc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKK3N0ZXAgbDJsaXN0 ZW46IExJU1RFTiBjMTsKK3N0ZXAgbDNsaXN0ZW46IExJU1RFTiBjMTsKK3N0ZXAgbHNsaXN0 ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGxp c3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3RpZnlmIGxjaGVjawogc3RlcCBsbGlz dGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKIHN0ZXAgbm90aWZ5MTogTk9USUZZIGMxOwpA QCAtOTUsNiArMjA0LDggQEAgbGlzdGVuZXI6IE5PVElGWSAiYzIiIHdpdGggcGF5bG9hZCAi IiBmcm9tIG5vdGlmaWVyCiAKIHN0YXJ0aW5nIHBlcm11dGF0aW9uOiBsMmxpc3RlbiBsMmJl Z2luIG5vdGlmeTEgbGJlZ2lucyBsbGlzdGVuIGxjb21taXQgbDJjb21taXQgbDJzdG9wCiBz dGVwIGwybGlzdGVuOiBMSVNURU4gYzE7CitsaXN0ZW5lcjI6IE5PVElGWSAiYzEiIHdpdGgg cGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCitsaXN0ZW5lcjI6IE5PVElGWSAiYzEiIHdpdGgg cGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiBzdGVwIGwyYmVnaW46IEJFR0lOOwogc3RlcCBu b3RpZnkxOiBOT1RJRlkgYzE7CiBzdGVwIGxiZWdpbnM6IEJFR0lOIElTT0xBVElPTiBMRVZF TCBTRVJJQUxJWkFCTEU7CkBAIC0xMDQsNiArMjE1LDE3IEBAIHN0ZXAgbDJjb21taXQ6IENP TU1JVDsKIGxpc3RlbmVyMjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICIiIGZyb20gbm90 aWZpZXIKIHN0ZXAgbDJzdG9wOiBVTkxJU1RFTiAqOwogCitzdGFydGluZyBwZXJtdXRhdGlv bjogbGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVjaworc3RlcCBsY2hfbGlzdGVuOiBM SVNURU4gY2g7CitzdGVwIG5jaF9ub3RpZnk6IE5PVElGWSBjaCwgJ2FhJzsKK3N0ZXAgbGNo X2NoZWNrOiBTRUxFQ1QgMSBBUyB4OworeAorLQorMQorKDEgcm93KQorCitsaXN0ZW5lcl9j aDogTk9USUZZICJjaCIgd2l0aCBwYXlsb2FkICJhYSIgZnJvbSBub3RpZmllcl9jaAorCiBz dGFydGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBsYmVnaW4gdXNhZ2UgYmlnbm90aWZ5IHVz YWdlCiBzdGVwIGxsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOwogc3RlcCBsYmVnaW46 IEJFR0lOOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5v dGlmeS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVj CmluZGV4IDBiOGNmZDkxMDgzLi5kMDljMjI5N2YwOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv aXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjCisrKyBiL3NyYy90ZXN0L2lzb2xh dGlvbi9zcGVjcy9hc3luYy1ub3RpZnkuc3BlYwpAQCAtMzEsNiArMzEsMjAgQEAgc3RlcCBu b3RpZnlzMQl7CiAJUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHMyOwogCUNPTU1JVDsKIH0KK3N0 ZXAgbm90aWZ5c19zaW1wbGUJeworCUJFR0lOOworCVNBVkVQT0lOVCBzMTsKKwlOT1RJRlkg YzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIsICdzaW1wbGUyJzsKKwlSRUxFQVNFIFNBVkVQ T0lOVCBzMTsKKwlDT01NSVQ7Cit9CitzdGVwIG5vdGlmeV9tYW55X3dpdGhfZHVwCXsKKwlC RUdJTjsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdtc2cnIHx8IHM6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDE3KSBzOworCVNFTEVDVCBwZ19ub3RpZnkoJ2MxJywgJ21z ZzEnKTsKKwlDT01NSVQ7Cit9CiBzdGVwIHVzYWdlCQl7IFNFTEVDVCBwZ19ub3RpZmljYXRp b25fcXVldWVfdXNhZ2UoKSA+IDAgQVMgbm9uemVybzsgfQogc3RlcCBiaWdub3RpZnkJeyBT RUxFQ1QgY291bnQocGdfbm90aWZ5KCdjMScsIHM6OnRleHQpKSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwKSBzOyB9CiB0ZWFyZG93bgkJeyBVTkxJU1RFTiAqOyB9CkBAIC00Myw2 ICs1Nyw3IEBAIHN0ZXAgbGNoZWNrCQl7IFNFTEVDVCAxIEFTIHg7IH0KIHN0ZXAgbGJlZ2lu CQl7IEJFR0lOOyB9CiBzdGVwIGxiZWdpbnMJeyBCRUdJTiBJU09MQVRJT04gTEVWRUwgU0VS SUFMSVpBQkxFOyB9CiBzdGVwIGxjb21taXQJeyBDT01NSVQ7IH0KK3N0ZXAgbHVubGlzdGVu X2FsbAl7IEJFR0lOOyBMSVNURU4gYzE7IFVOTElTVEVOICo7IENPTU1JVDsgfQogdGVhcmRv d24JCXsgVU5MSVNURU4gKjsgfQogCiAjIEluIHNvbWUgdGVzdHMgd2UgbmVlZCBhIHNlY29u ZCBsaXN0ZW5lciwganVzdCB0byBibG9jayB0aGUgcXVldWUuCkBAIC01Myw2ICs2OCwzOCBA QCBzdGVwIGwyYmVnaW4JeyBCRUdJTjsgfQogc3RlcCBsMmNvbW1pdAl7IENPTU1JVDsgfQog c3RlcCBsMnN0b3AJCXsgVU5MSVNURU4gKjsgfQogCisjIFRoaXJkIGxpc3RlbmVyIHNlc3Np b24gZm9yIHRlc3RpbmcgYXJyYXkgZ3Jvd3RoLgorCitzZXNzaW9uIGxpc3RlbmVyMworc3Rl cCBsM2xpc3Rlbgl7IExJU1RFTiBjMTsgfQordGVhcmRvd24JCXsgVU5MSVNURU4gKjsgfQor CisjIExpc3RlbmVyIHNlc3Npb24gZm9yIGNyb3NzLXNlc3Npb24gbm90aWZpY2F0aW9uIHRl c3Qgd2l0aCBjaGFubmVsICdjaCcuCisKK3Nlc3Npb24gbGlzdGVuZXJfY2gKK3N0ZXAgbGNo X2xpc3Rlbgl7IExJU1RFTiBjaDsgfQorc3RlcCBsY2hfY2hlY2sJeyBTRUxFQ1QgMSBBUyB4 OyB9Cit0ZWFyZG93bgkJeyBVTkxJU1RFTiAqOyB9CisKKyMgTm90aWZpZXIgc2Vzc2lvbiBm b3IgY3Jvc3Mtc2Vzc2lvbiBub3RpZmljYXRpb24gdGVzdCB3aXRoIGNoYW5uZWwgJ2NoJy4K Kworc2Vzc2lvbiBub3RpZmllcl9jaAorc3RlcCBuY2hfbm90aWZ5CXsgTk9USUZZIGNoLCAn YWEnOyB9CisKKyMgU2Vzc2lvbiBmb3IgdGVzdGluZyBMSVNURU4gaW4gc3VidHJhbnNhY3Rp b24gd2l0aCBzZXBhcmF0ZSBzdGVwcy4KKworc2Vzc2lvbiBsaXN0ZW5fc3VieGFjdAorc3Rl cCBsc2JlZ2luCXsgQkVHSU47IH0KK3N0ZXAgbHNsaXN0ZW5fb3V0ZXIJeyBMSVNURU4gYzM7 IH0KK3N0ZXAgbHNzYXZlcG9pbnQJeyBTQVZFUE9JTlQgczE7IH0KK3N0ZXAgbHNsaXN0ZW4J eyBMSVNURU4gYzE7IExJU1RFTiBjMjsgfQorc3RlcCBsc3JlbGVhc2UJeyBSRUxFQVNFIFNB VkVQT0lOVCBzMTsgfQorc3RlcCBsc3JvbGxiYWNrCXsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5U IHMxOyB9CitzdGVwIGxzY29tbWl0CXsgQ09NTUlUOyB9CitzdGVwIGxzbm90aWZ5CXsgTk9U SUZZIGMxLCAnc3VieGFjdF90ZXN0JzsgfQorc3RlcCBsc25vdGlmeV9jaGVjawl7IE5PVElG WSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2ZSc7IH0KK3RlYXJkb3duCQl7IFVOTElTVEVOICo7 IH0KKwogCiAjIFRyaXZpYWwgY2FzZXMuCiBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEg bm90aWZ5MiBub3RpZnkzIG5vdGlmeWYKQEAgLTYwLDYgKzEwNywyNyBAQCBwZXJtdXRhdGlv biBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5MiBub3RpZnkzIG5vdGlmeWYKICMgQ2hlY2sgc2lt cGxlIGFuZCBsZXNzLXNpbXBsZSBkZWR1cGxpY2F0aW9uLgogcGVybXV0YXRpb24gbGlzdGVu YyBub3RpZnlkMSBub3RpZnlkMiBub3RpZnlzMQogCisjIENoZWNrIHNpbXBsZSBOT1RJRlkg cmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQgaGFzIG5vIGFjdGlvbi4KK3Blcm11dGF0aW9uIGxp c3RlbmMgbm90aWZ5c19zaW1wbGUKKworIyBDaGVjayBMSVNURU4gcmVwYXJlbnRpbmcgaW4g c3VidHJhbnNhY3Rpb24uCitwZXJtdXRhdGlvbiBsc2JlZ2luIGxzc2F2ZXBvaW50IGxzbGlz dGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorCisjIENoZWNrIExJU1RFTiBtZXJn ZSBwYXRoIHdoZW4gYm90aCBvdXRlciBhbmQgaW5uZXIgdHJhbnNhY3Rpb25zIGhhdmUgYWN0 aW9ucy4KK3Blcm11dGF0aW9uIGxzYmVnaW4gbHNsaXN0ZW5fb3V0ZXIgbHNzYXZlcG9pbnQg bHNsaXN0ZW4gbHNyZWxlYXNlIGxzY29tbWl0IGxzbm90aWZ5CisKKyMgQ2hlY2sgTElTVEVO IGFib3J0IHBhdGggKFJPTExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFj dGlvbnMpLgorcGVybXV0YXRpb24gbHNiZWdpbiBsc3NhdmVwb2ludCBsc2xpc3RlbiBsc3Jv bGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5X2NoZWNrCisKKyMgQ2hlY2sgVU5MSVNURU4gKiBj YW5jZWxzIGEgTElTVEVOIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLgorcGVybXV0YXRpb24g bHVubGlzdGVuX2FsbCBub3RpZnkxIGxjaGVjaworCisjIENoZWNrIG5vdGlmaWNhdGlvbl9t YXRjaCBmdW5jdGlvbiAodHJpZ2dlcmVkIGJ5IGhhc2ggdGFibGUgZHVwbGljYXRlIGRldGVj dGlvbikuCitwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeV9tYW55X3dpdGhfZHVwCisKKyMg Q2hlY2sgQ2hhbm5lbEhhc2hBZGRMaXN0ZW5lciBhcnJheSBncm93dGguCitwZXJtdXRhdGlv biBsaXN0ZW5jIGxsaXN0ZW4gbDJsaXN0ZW4gbDNsaXN0ZW4gbHNsaXN0ZW4KKwogIyBDcm9z cy1iYWNrZW5kIG5vdGlmaWNhdGlvbiBkZWxpdmVyeS4gIFdlIHVzZSBhICJzZWxlY3QgMSIg dG8gZm9yY2UgdGhlCiAjIGxpc3RlbmVyIHNlc3Npb24gdG8gY2hlY2sgZm9yIG5vdGlmaWVz LiAgSW4gcHJpbmNpcGxlIHdlIGNvdWxkIGp1c3Qgd2FpdAogIyBmb3IgZGVsaXZlcnksIGJ1 dCB0aGF0IHdvdWxkIHJlcXVpcmUgZXh0cmEgc3VwcG9ydCBpbiBpc29sYXRpb250ZXN0ZXIK QEAgLTczLDYgKzE0MSwxMCBAQCBwZXJtdXRhdGlvbiBsaXN0ZW5jIGxsaXN0ZW4gbm90aWZ5 MSBub3RpZnkyIG5vdGlmeTMgbm90aWZ5ZiBsY2hlY2sKICMgYW5kIG5vdGlmeSBxdWV1ZSBp cyBub3QgZW1wdHkKIHBlcm11dGF0aW9uIGwybGlzdGVuIGwyYmVnaW4gbm90aWZ5MSBsYmVn aW5zIGxsaXN0ZW4gbGNvbW1pdCBsMmNvbW1pdCBsMnN0b3AKIAorIyBDaGVjayB0aGF0IG5v dGlmaWNhdGlvbnMgc2VudCBmcm9tIGEgYmFja2VuZCB0aGF0IGhhcyBub3QgZG9uZSBMSVNU RU4KKyMgYXJlIHByb3Blcmx5IGRlbGl2ZXJlZCB0byBhIGxpc3RlbmVyIGluIGFub3RoZXIg YmFja2VuZC4KK3Blcm11dGF0aW9uIGxjaF9saXN0ZW4gbmNoX25vdGlmeSBsY2hfY2hlY2sK KwogIyBWZXJpZnkgdGhhdCBwZ19ub3RpZmljYXRpb25fcXVldWVfdXNhZ2UgY29ycmVjdGx5 IHJlcG9ydHMgYSBub24temVybyByZXN1bHQsCiAjIGFmdGVyIHN1Ym1pdHRpbmcgbm90aWZp Y2F0aW9ucyB3aGlsZSBhbm90aGVyIGNvbm5lY3Rpb24gaXMgbGlzdGVuaW5nIGZvcgogIyB0 aG9zZSBub3RpZmljYXRpb25zIGFuZCB3YWl0aW5nIGluc2lkZSBhbiBhY3RpdmUgdHJhbnNh Y3Rpb24uICBXZSBoYXZlIHRvCi0tIAoyLjUwLjEKCg== --d47125f30b1149908a534526362cf7ab Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v32.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v32.patch?=" Content-Transfer-Encoding: base64 RnJvbSA2N2VhNTQzNGU0MGI4OGU5OTZjN2NlMWM4ZjQxNzgwMWFmYWJhYmMxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU2F0LCAyNyBEZWMgMjAyNSAwODowNzowMyArMDEwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBPcHRpbWl6ZSBMSVNURU4vTk9USUZZIHdpdGggc2hhcmVkIGNoYW5uZWwgbWFw IGFuZCBkaXJlY3QKIGFkdmFuY2VtZW50CgpUaGlzIHBhdGNoIHJld29ya3MgdGhlIExJU1RF Ti9OT1RJRlkgc2lnbmFsaW5nIHBhdGggdG8gYXZvaWQgdGhlCmxvbmctc3RhbmRpbmcgaW5l ZmZpY2llbmN5IHdoZXJlIGV2ZXJ5IGNvbW1pdCB3YWtlcyBhbGwgbGlzdGVuaW5nCmJhY2tl bmRzIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBldmVuIHRob3NlIHRoYXQgYXJlIGxpc3Rlbmlu ZyBvbgpjb21wbGV0ZWx5IGRpZmZlcmVudCBjaGFubmVscy4KClByb2JsZW0KLS0tLS0tLQoK QXQgcHJlc2VudCwgU2lnbmFsQmFja2VuZHMgaGFzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9m IHdoaWNoIGJhY2tlbmQKbGlzdGVucyBvbiB3aGljaCBjaGFubmVsLiBXaGVuIGEgYmFja2Vu ZCBjb21taXRzIGEgdHJhbnNhY3Rpb24gdGhhdAppc3N1ZWQgTk9USUZZLCBpdCBzaW1wbHkg aXRlcmF0ZXMgb3ZlciBhbGwgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgaW4gdGhlCnNhbWUgZGF0 YWJhc2UgYW5kIHNlbmRzIGVhY2ggb25lIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNp Z25hbC4KClRoYXQgYmVoYXZpb3IgaXMgZmluZSB3aGVuIGFsbCBsaXN0ZW5lcnMgYXJlIG9u IHRoZSBzYW1lIGNoYW5uZWwsIGJ1dAp3aGVuIG1hbnkgYmFja2VuZHMgYXJlIGxpc3Rlbmlu ZyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMsIGVhY2ggTk9USUZZCnRyaWdnZXJzIGEgc3Rvcm0g b2YgdW5uZWNlc3Nhcnkgd2FrZXVwcyBhbmQgY29udGV4dCBzd2l0Y2hlcy4gQXMgdGhlCm51 bWJlciBvZiBpZGxlIGxpc3RlbmVycyBncm93cywgdGhpcyBvZnRlbiBiZWNvbWVzIHRoZSBi b3R0bGVuZWNrIGFuZAp0aHJvdWdocHV0IGRyb3BzIHNoYXJwbHkuCgpPdmVydmlldyBvZiB0 aGUgc29sdXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhdGNoIGludHJv ZHVjZXMgYSBsYXppbHktY3JlYXRlZCBkeW5hbWljIHNoYXJlZCBoYXNoIChkc2hhc2gpCmJh Y2tlZCBieSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgKERTQSkgdGhhdCBtYXBzIChkYm9pZCwg Y2hhbm5lbCkgdG8KYXJyYXlzIG9mIGxpc3RlbmluZyBiYWNrZW5kcyAoUHJvY051bWJlcnMp LiBUaGlzIGFsbG93cyB0aGUgc2VuZGVyIHRvCnRhcmdldCBvbmx5IHRob3NlIGJhY2tlbmRz IGFjdHVhbGx5IGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgZm9yIHdoaWNoCml0IGhhcyBx dWV1ZWQgbm90aWZpY2F0aW9ucy4KClR3by1waGFzZSBzdGFnaW5nIHBhdHRlcm4KLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKVG8gZW5zdXJlIHRyYW5zYWN0aW9uIHNhZmV0eSwgTElT VEVOL1VOTElTVEVOIG9wZXJhdGlvbnMgdXNlIGEgdHdvLXBoYXNlCnN0YWdpbmcgcGF0dGVy bi4gTWVtb3J5IGFsbG9jYXRpb24gYW5kIGhhc2ggdGFibGUgbW9kaWZpY2F0aW9ucyBoYXBw ZW4KaW4gUHJlQ29tbWl0X05vdGlmeSAoYmVmb3JlIGNvbW1pdHRpbmcgdG8gY2xvZyksIHdo ZXJlIGZhaWx1cmVzIGNhbgpzYWZlbHkgYWJvcnQgdGhlIHRyYW5zYWN0aW9uLiBBZnRlciBj b21taXR0aW5nIHRvIGNsb2csIEF0Q29tbWl0X05vdGlmeQpvbmx5IGxvb2tzIHVwIGVudHJp ZXMgdGhhdCB3ZXJlIGFscmVhZHkgYWRkZWQgZHVyaW5nIFByZUNvbW1pdF9Ob3RpZnkKYW5k IHNldHMgdGhlaXIgYm9vbGVhbiBmbGFncywgc28gdGhlcmUgaXMgbm8gT09NIGhhemFyZC4K CkVhY2ggbGlzdGVuZXIgZW50cnkgaW4gdGhlIHNoYXJlZCBoYXNoIHVzZXMgYSBMaXN0ZW5l ckVudHJ5IHN0cnVjdApjb250YWluaW5nIHRoZSBiYWNrZW5kJ3MgUHJvY051bWJlciBhbmQg dHdvIGJvb2xlYW4gZmxhZ3M6ICJzdGFnZWQiIGlzCnNldCBkdXJpbmcgUHJlQ29tbWl0X05v dGlmeSwgd2hpbGUgImN1cnJlbnQiIGlzIGNvcGllZCBmcm9tIHN0YWdlZApkdXJpbmcgQXRD b21taXRfTm90aWZ5IGFuZCBpcyB3aGF0IG90aGVyIGJhY2tlbmRzIHJlYWQuCgpGb3IgTElT VEVOLCBQcmVDb21taXRfTm90aWZ5IGFsbG9jYXRlcyBtZW1vcnkgYW5kIGFkZHMgYW4gZW50 cnkgd2l0aApzdGFnZWQ9dHJ1ZSBhbmQgY3VycmVudD1mYWxzZSwgdGhlbiBBdENvbW1pdF9O b3RpZnkgY29waWVzIHN0YWdlZCB0bwpjdXJyZW50LiBGb3IgVU5MSVNURU4sIFByZUNvbW1p dF9Ob3RpZnkgc2V0cyBzdGFnZWQ9ZmFsc2Ugb24gdGhlCmV4aXN0aW5nIGVudHJ5LCB0aGVu IEF0Q29tbWl0X05vdGlmeSBjb3BpZXMgc3RhZ2VkIHRvIGN1cnJlbnQgYW5kCnJlbW92ZXMg dGhlIGVudHJ5IGlmIGZhbHNlLgoKT24gYWJvcnQsIHN0YWdlZCBjaGFuZ2VzIGFyZSByZXZl cnRlZCB0byBtYXRjaCBjdXJyZW50LCBhbmQgZW50cmllcwp3aGVyZSBjdXJyZW50PWZhbHNl IChuZXZlciBjb21taXR0ZWQpIGFyZSByZW1vdmVkLgoKU2lnbmFsIGFycmF5cyBmb3Igc2Vu ZGluZyBub3RpZmljYXRpb25zIGFyZSBhbHNvIHByZWFsbG9jYXRlZCBpbgpQcmVDb21taXRf Tm90aWZ5IHRvIGF2b2lkIGFsbG9jYXRpb24gZmFpbHVyZXMgYWZ0ZXIgY29tbWl0dGluZyB0 byBjbG9nLgoKRGlyZWN0IGFkdmFuY2VtZW50Ci0tLS0tLS0tLS0tLS0tLS0tLQoKQSBmdXJ0 aGVyIG9wdGltaXphdGlvbiBhdm9pZHMgc2lnbmFsaW5nIGlkbGUgYmFja2VuZHMgdGhhdCBh cmUgbm90Cmxpc3RlbmluZyBvbiBhbnkgb2YgdGhlIGNoYW5uZWxzIG5vdGlmaWVkIHdpdGhp biB0aGUgdHJhbnNhY3Rpb24uCgpXaGlsZSBxdWV1aW5nIG5vdGlmaWNhdGlvbnMsIFByZUNv bW1pdF9Ob3RpZnkgcmVjb3JkcyB0aGUgcXVldWUgaGVhZApwb3NpdGlvbiBib3RoIGJlZm9y ZSBhbmQgYWZ0ZXIgd3JpdGluZyBpdHMgbm90aWZpY2F0aW9ucy4gQmVjYXVzZSBhbGwKd3Jp dGVycyBhcmUgc2VyaWFsaXplZCBieSB0aGUgZXhpc3RpbmcgY2x1c3Rlci13aWRlIGhlYXZ5 d2VpZ2h0IGxvY2sgb24KImRhdGFiYXNlIDAiLCBubyBiYWNrZW5kIChmcm9tIGFueSBkYXRh YmFzZSkgY2FuIGluc2VydCBlbnRyaWVzIGJldHdlZW4KdGhvc2UgdHdvIHBvaW50cy4gVGhp cyBndWFyYW50ZWVzIHRoYXQgdGhlIHJlZ2lvbiBbb2xkSGVhZCwgbmV3SGVhZCkKY29udGFp bnMgb25seSB0aGUgZW50cmllcyB3cml0dGVuIGJ5IG91ciBjb21taXQuCgpTaWduYWxCYWNr ZW5kcyB1c2VzIHRoaXMgZmFjdCB0byBkaXJlY3RseSBhZHZhbmNlIGFueSBiYWNrZW5kIHN0 aWxsCnBvc2l0aW9uZWQgYXQgb2xkSGVhZCB1cCB0byBuZXdIZWFkLCBhdm9pZGluZyBhIG5l ZWRsZXNzIHdha2V1cCBmb3IKbGlzdGVuZXJzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG5vdCBm aW5kIGFueSBub3RpZmllcyBvZiBpbnRlcmVzdC4KClRvIGhhbmRsZSBhZHZhbmNpbmcgYmFj a2VuZHMgY29ycmVjdGx5LCBlYWNoIGJhY2tlbmQncyBlbnRyeSB0cmFja3MgYm90aAp3aGV0 aGVyIGl0IGlzIGN1cnJlbnRseSBhZHZhbmNpbmcgKGlzQWR2YW5jaW5nKSBhbmQgdGhlIHRh cmdldCBwb3NpdGlvbgppdCBpcyBhZHZhbmNpbmcgdG8gKGFkdmFuY2luZ1BvcykuIFRoaXMg YWxsb3dzIFNpZ25hbEJhY2tlbmRzIHRvIHNpZ25hbAphZHZhbmNpbmcgYmFja2VuZHMgb25s eSB3aGVuIHRoZWlyIHRhcmdldCBwb3NpdGlvbiB3b3VsZCBsZWF2ZSB0aGVtCmJlaGluZCB0 aGUgbmV3IHF1ZXVlIGhlYWQsIHdoaWxlIHNhZmVseSBkaXJlY3QtYWR2YW5jaW5nIGlkbGUg YmFja2VuZHMKdGhhdCB3b3VsZCBub3QgYmUgaW50ZXJlc3RlZCBpbiB0aGUgbmV3bHkgd3Jp dHRlbiBub3RpZmljYXRpb25zLgpJZGxlIGJhY2tlbmRzIHRoYXQgYXJlIHN0YXRpb25hcnkg YXQgYSBwb3NpdGlvbiBiZWZvcmUgdGhlIG9sZCBxdWV1ZQpoZWFkIGFyZSBzaWduYWxlZCwg c2luY2UgdGhleSBtaWdodCBiZSBpbnRlcmVzdGVkIGluIHRoZSBub3RpZmljYXRpb25zCmlu IGJldHdlZW4gdGhlaXIgY3VycmVudCBwb3NpdGlvbiBhbmQgdGhlIG9sZCBxdWV1ZSBoZWFk LgoKT3RoZXIgbm90ZXMKLS0tLS0tLS0tLS0KClRoZSBwYXRjaCBtYWludGFpbnMgZHVhbCBk YXRhIHN0cnVjdHVyZXM6IGEgc2hhcmVkIGNoYW5uZWxIYXNoIGZvcgpkZXRlcm1pbmluZyB3 aGljaCBiYWNrZW5kcyB0byBzaWduYWwsIGFuZCBhIGxvY2FsIHBlci1iYWNrZW5kCmxpc3Rl bkNoYW5uZWxzSGFzaCBmb3IgZmFzdCBsb2NrLWZyZWUgbG9va3VwcyBkdXJpbmcgbm90aWZp Y2F0aW9uCnByb2Nlc3NpbmcuIFRoaXMgYXZvaWRzIGNvbnRlbnRpb24gb24gdGhlIHNoYXJl ZCBoYXNoIGR1cmluZyB0aGUKaGlnaC1mcmVxdWVuY3kgSXNMaXN0ZW5pbmdPbiBjaGVja3Mg dGhhdCBvY2N1ciBmb3IgZXZlcnkgbm90aWZpY2F0aW9uCnJlYWQgZnJvbSB0aGUgcXVldWUu IEJhY2tlbmRzIHJlbWFpbiByZWdpc3RlcmVkIGluIHRoZSBnbG9iYWwgbGlzdGVuZXIKbGlz dCBhcyBsb25nIGFzIGxpc3RlbkNoYW5uZWxzSGFzaCBpcyBub24tZW1wdHkuCgpUaGlzIHBh dGNoIGFkZHMgTFdMb2NrIHRyYW5jaGUgTk9USUZZX0NIQU5ORUxfSEFTSCBhbmQgd2FpdCBl dmVudApOb3RpZnlDaGFubmVsSGFzaCBmb3IgdmlzaWJpbGl0eS4KClRoZXJlIGFyZSBubyB1 c2VyLXZpc2libGUgYmVoYXZpb3JhbCBjaGFuZ2VzOyB0aGlzIGlzIGFuIGludGVybmFsCm9w dGltaXphdGlvbiBvbmx5LgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAg ICAgICAgICAgICAgICB8IDk2MCArKysrKysrKysrKysrKy0tLS0KIC4uLi91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9z dG9yYWdlL2x3bG9ja2xpc3QuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAyICsKIDQgZmlsZXMgY2hh bmdlZCwgNzg3IGluc2VydGlvbnMoKyksIDE3NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv YXN5bmMuYwppbmRleCBlYjg2NDAyY2FlNC4uYTlmYmFkYzk1YjkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv YXN5bmMuYwpAQCAtMjQsOCArMjQsMTAgQEAKICAqCSAgQWxsIG5vdGlmaWNhdGlvbiBtZXNz YWdlcyBhcmUgcGxhY2VkIGluIHRoZSBxdWV1ZSBhbmQgbGF0ZXIgcmVhZCBvdXQKICAqCSAg YnkgbGlzdGVuaW5nIGJhY2tlbmRzLgogICoKLSAqCSAgVGhlcmUgaXMgbm8gY2VudHJhbCBr bm93bGVkZ2Ugb2Ygd2hpY2ggYmFja2VuZCBsaXN0ZW5zIG9uIHdoaWNoIGNoYW5uZWw7Ci0g KgkgIGV2ZXJ5IGJhY2tlbmQgaGFzIGl0cyBvd24gbGlzdCBvZiBpbnRlcmVzdGluZyBjaGFu bmVscy4KKyAqCSAgV2UgYWxzbyBtYWludGFpbiBhIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFi bGUgKGRzaGFzaCkgdGhhdCBtYXBzIGNoYW5uZWwKKyAqCSAgbmFtZXMgdG8gdGhlIHNldCBv ZiBiYWNrZW5kcyBsaXN0ZW5pbmcgb24gZWFjaCBjaGFubmVsLiBUaGlzIHRhYmxlIGlzCisg KgkgIGNyZWF0ZWQgbGF6aWx5IG9uIHRoZSBmaXJzdCBMSVNURU4gY29tbWFuZCBhbmQgZ3Jv d3MgZHluYW1pY2FsbHkgYXMKKyAqCSAgbmVlZGVkLgogICoKICAqCSAgQWx0aG91Z2ggdGhl cmUgaXMgb25seSBvbmUgcXVldWUsIG5vdGlmaWNhdGlvbnMgYXJlIHRyZWF0ZWQgYXMgYmVp bmcKICAqCSAgZGF0YWJhc2UtbG9jYWw7IHRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcgdGhl IHNlbmRlcidzIGRhdGFiYXNlIE9JRApAQCAtNjQsMjAgKzY2LDMzIEBACiAgKgkgIG5vdGlm aWNhdGlvbnMsIHdlIGNhbiBzdGlsbCBjYWxsIGVsb2coRVJST1IsIC4uLikgYW5kIHRoZSB0 cmFuc2FjdGlvbgogICoJICB3aWxsIHJvbGwgYmFjay4KICAqCisgKgkgIFByZUNvbW1pdF9O b3RpZnkoKSBhbHNvIHN0YWdlcyBhbnkgcGVuZGluZyBMSVNURU4vVU5MSVNURU4gYWN0aW9u cyBieQorICoJICBhZGRpbmcgZW50cmllcyB0byBsaXN0ZW5DaGFubmVsc0hhc2ggYW5kIHRo ZSBzaGFyZWQgY2hhbm5lbEhhc2ggd2l0aAorICoJICBzdGFnZWQ9dHJ1ZSAoZm9yIExJU1RF Tikgb3Igc3RhZ2VkPWZhbHNlIChmb3IgVU5MSVNURU4pLiAgVGhpcyBpcyBkb25lCisgKgkg IGJlZm9yZSBjb21taXR0aW5nIHRvIGNsb2cgc28gdGhhdCBmYWlsdXJlcyBjYW4gc2FmZWx5 IGFib3J0LgorICoKICAqCSAgT25jZSB3ZSBoYXZlIHB1dCBhbGwgb2YgdGhlIG5vdGlmaWNh dGlvbnMgaW50byB0aGUgcXVldWUsIHdlIHJldHVybiB0bwogICoJICBDb21taXRUcmFuc2Fj dGlvbigpIHdoaWNoIHdpbGwgdGhlbiBkbyB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uIGNvbW1p dC4KICAqCiAgKgkgIEFmdGVyIGNvbW1pdCB3ZSBhcmUgY2FsbGVkIGFub3RoZXIgdGltZSAo QXRDb21taXRfTm90aWZ5KCkpLiBIZXJlIHdlCi0gKgkgIG1ha2UgYW55IGFjdHVhbCB1cGRh dGVzIHRvIHRoZSBlZmZlY3RpdmUgbGlzdGVuIHN0YXRlIChsaXN0ZW5DaGFubmVscykuCi0g KgkgIFRoZW4gd2Ugc2lnbmFsIGFueSBiYWNrZW5kcyB0aGF0IG1heSBiZSBpbnRlcmVzdGVk IGluIG91ciBtZXNzYWdlcwotICoJICAoaW5jbHVkaW5nIG91ciBvd24gYmFja2VuZCwgaWYg bGlzdGVuaW5nKS4gIFRoaXMgaXMgZG9uZSBieQotICoJICBTaWduYWxCYWNrZW5kcygpLCB3 aGljaCBzY2FucyB0aGUgbGlzdCBvZiBsaXN0ZW5pbmcgYmFja2VuZHMgYW5kIHNlbmRzIGEK LSAqCSAgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNpZ25hbCB0byBldmVyeSBsaXN0ZW5p bmcgYmFja2VuZCAod2UgZG9uJ3QKLSAqCSAga25vdyB3aGljaCBiYWNrZW5kIGlzIGxpc3Rl bmluZyBvbiB3aGljaCBjaGFubmVsIHNvIHdlIG11c3Qgc2lnbmFsIHRoZW0KLSAqCSAgYWxs KS4gIFdlIGNhbiBleGNsdWRlIGJhY2tlbmRzIHRoYXQgYXJlIGFscmVhZHkgdXAgdG8gZGF0 ZSwgdGhvdWdoLCBhbmQKLSAqCSAgd2UgY2FuIGFsc28gZXhjbHVkZSBiYWNrZW5kcyB0aGF0 IGFyZSBpbiBvdGhlciBkYXRhYmFzZXMgKHVubGVzcyB0aGV5Ci0gKgkgIGFyZSB3YXkgYmVo aW5kIGFuZCBzaG91bGQgYmUga2lja2VkIHRvIG1ha2UgdGhlbSBhZHZhbmNlIHRoZWlyCi0g KgkgIHBvaW50ZXJzKS4KKyAqCSAgY29tbWl0IHRoZSBzdGFnZWQgbGlzdGVuL3VubGlzdGVu IGNoYW5nZXMgYnkgY29weWluZyBzdGFnZWQgdG8gY3VycmVudCwKKyAqCSAgcmVtb3Zpbmcg ZW50cmllcyB3aGVyZSBjdXJyZW50IGJlY29tZXMgZmFsc2UuICBUaGVuIHdlIHNpZ25hbCBh bnkgYmFja2VuZHMKKyAqCSAgdGhhdCBtYXkgYmUgaW50ZXJlc3RlZCBpbiBvdXIgbWVzc2Fn ZXMgKGluY2x1ZGluZyBvdXIgb3duIGJhY2tlbmQsCisgKgkgIGlmIGxpc3RlbmluZykuICBU aGlzIGlzIGRvbmUgYnkgU2lnbmFsQmFja2VuZHMoKSwgd2hpY2ggY29uc3VsdHMgdGhlCisg KgkgIHNoYXJlZCBjaGFubmVsIGhhc2ggdGFibGUgdG8gaWRlbnRpZnkgbGlzdGVuZXJzIGZv ciB0aGUgY2hhbm5lbHMgdGhhdAorICoJICBoYXZlIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBp biB0aGUgY3VycmVudCBkYXRhYmFzZS4gIEVhY2ggc2VsZWN0ZWQKKyAqCSAgYmFja2VuZCBp cyBtYXJrZWQgYXMgaGF2aW5nIGEgd2FrZXVwIHBlbmRpbmcgdG8gYXZvaWQgZHVwbGljYXRl IHNpZ25hbHMsCisgKgkgIGFuZCBhIFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCBzaWduYWwg aXMgc2VudCB0byBpdC4KKyAqCisgKgkgIFdoZW4gd3JpdGluZyBub3RpZmljYXRpb25zLCBQ cmVDb21taXRfTm90aWZ5KCkgcmVjb3JkcyB0aGUgcXVldWUgaGVhZAorICoJICBwb3NpdGlv biBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdyaXRlLiAgQmVjYXVzZSBhbGwgd3JpdGVy cyBzZXJpYWxpemUKKyAqCSAgb24gYSBjbHVzdGVyLXdpZGUgaGVhdnl3ZWlnaHQgbG9jaywg bm8gYmFja2VuZCBjYW4gaW5zZXJ0IGVudHJpZXMgYmV0d2VlbgorICoJICB0aGVzZSB0d28g cG9pbnRzLiAgU2lnbmFsQmFja2VuZHMoKSB1c2VzIHRoaXMgZmFjdCB0byBkaXJlY3RseSBh ZHZhbmNlIGFueQorICoJICBiYWNrZW5kIHRoYXQgaXMgc3RpbGwgcG9zaXRpb25lZCBhdCB0 aGUgb2xkIGhlYWQsIG9yIHdpdGhpbiB0aGUgcmFuZ2UKKyAqCSAgd3JpdHRlbiwgYXZvaWRp bmcgdW5uZWNlc3Nhcnkgd2FrZXVwcyBmb3IgaWRsZSBsaXN0ZW5lcnMgdGhhdCBoYXZlCisg KgkgIG5vdGhpbmcgdG8gcmVhZC4gIEJhY2tlbmRzIHRoYXQgY2Fubm90IGJlIGRpcmVjdCBh ZHZhbmNlZCBhcmUgc2lnbmFsZWQKKyAqCSAgaWYgdGhleSBhcmUgc3R1Y2sgYmVoaW5kIHRo ZSBvbGQgcXVldWUgaGVhZCwgb3IgYWR2YW5jaW5nIHRvIGEgcG9zaXRpb24KKyAqCSAgYmVm b3JlIHRoZSBuZXcgcXVldWUgaGVhZCwgc2luY2Ugb3RoZXJ3aXNlIG5vdGlmaWNhdGlvbnMg Y291bGQgYmUgZGVsYXllZC4KICAqCiAgKgkgIEZpbmFsbHksIGFmdGVyIHdlIGFyZSBvdXQg b2YgdGhlIHRyYW5zYWN0aW9uIGFsdG9nZXRoZXIgYW5kIGFib3V0IHRvIGdvCiAgKgkgIGlk bGUsIHdlIHNjYW4gdGhlIHF1ZXVlIGZvciBtZXNzYWdlcyB0aGF0IG5lZWQgdG8gYmUgc2Vu dCB0byBvdXIKQEAgLTEzNywxNCArMTUyLDE3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5 bmMuaCIKICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5o IgorI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgog I2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lw Yy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJv Y3NpZ25hbC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2RzYS5oIgogI2luY2x1ZGUgInV0aWxz L2d1Y19ob29rcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAi dXRpbHMvcHNfc3RhdHVzLmgiCkBAIC0xNjIsNiArMTgwLDM3IEBACiAgKi8KICNkZWZpbmUg Tk9USUZZX1BBWUxPQURfTUFYX0xFTkdUSAkoQkxDS1NaIC0gTkFNRURBVEFMRU4gLSAxMjgp CiAKKy8qCisgKiBDaGFubmVsIGhhc2ggdGFibGUgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlz IGhhc2ggdGFibGUgbWFwcyAoZGF0YWJhc2UgT0lELCBjaGFubmVsIG5hbWUpIGtleXMgdG8g YXJyYXlzIG9mCisgKiBQcm9jTnVtYmVycyByZXByZXNlbnRpbmcgdGhlIGJhY2tlbmRzIGxp c3RlbmluZyBvbiBlYWNoIGNoYW5uZWwuCisgKi8KKworI2RlZmluZSBJTklUSUFMX0xJU1RF TkVSU19BUlJBWV9TSVpFIDQKKwordHlwZWRlZiBzdHJ1Y3QgQ2hhbm5lbEhhc2hLZXkKK3sK KwlPaWQJCQlkYm9pZDsKKwljaGFyCQljaGFubmVsW05BTUVEQVRBTEVOXTsKK30gQ2hhbm5l bEhhc2hLZXk7CisKKwordHlwZWRlZiBzdHJ1Y3QgTGlzdGVuZXJFbnRyeQoreworCVByb2NO dW1iZXIJcHJvY05vOworCWJvb2wJCXN0YWdlZDsKKwlib29sCQljdXJyZW50OworfSBMaXN0 ZW5lckVudHJ5OworCit0eXBlZGVmIHN0cnVjdCBDaGFubmVsRW50cnkKK3sKKwlDaGFubmVs SGFzaEtleSBrZXk7CisJZHNhX3BvaW50ZXIgbGlzdGVuZXJzQXJyYXk7IC8qIERTQSBwb2lu dGVyIHRvIExpc3RlbmVyRW50cnkgYXJyYXkgKi8KKwlpbnQJCQludW1MaXN0ZW5lcnM7CS8q IE51bWJlciBvZiBsaXN0ZW5lcnMgY3VycmVudGx5IHN0b3JlZCAqLworCWludAkJCWFsbG9j YXRlZExpc3RlbmVyczsgLyogQWxsb2NhdGVkIHNpemUgb2YgYXJyYXkgKi8KK30gQ2hhbm5l bEVudHJ5OworCiAvKgogICogU3RydWN0IHJlcHJlc2VudGluZyBhbiBlbnRyeSBpbiB0aGUg Z2xvYmFsIG5vdGlmeSBxdWV1ZQogICoKQEAgLTIyNCwxMSArMjczLDE0IEBAIHR5cGVkZWYg c3RydWN0IFF1ZXVlUG9zaXRpb24KIAkgKHgpLnBhZ2UgIT0gKHkpLnBhZ2UgPyAoeCkgOiBc CiAJICh4KS5vZmZzZXQgPiAoeSkub2Zmc2V0ID8gKHgpIDogKHkpKQogCisvKiByZXR1cm5z IHRydWUgaWYgeCBjb21lcyBiZWZvcmUgeSBpbiBxdWV1ZSBvcmRlciAqLworI2RlZmluZSBR VUVVRV9QT1NfUFJFQ0VERVMoeCx5KSBcCisJKGFzeW5jUXVldWVQYWdlUHJlY2VkZXMoKHgp LnBhZ2UsICh5KS5wYWdlKSB8fCBcCisJICgoeCkucGFnZSA9PSAoeSkucGFnZSAmJiAoeCku b2Zmc2V0IDwgKHkpLm9mZnNldCkpCisKIC8qCiAgKiBQYXJhbWV0ZXIgZGV0ZXJtaW5pbmcg aG93IG9mdGVuIHdlIHRyeSB0byBhZHZhbmNlIHRoZSB0YWlsIHBvaW50ZXI6Ci0gKiB3ZSBk byB0aGF0IGFmdGVyIGV2ZXJ5IFFVRVVFX0NMRUFOVVBfREVMQVkgcGFnZXMgb2YgTk9USUZZ IGRhdGEuICBUaGlzIGlzCi0gKiBhbHNvIHRoZSBkaXN0YW5jZSBieSB3aGljaCBhIGJhY2tl bmQgaW4gYW5vdGhlciBkYXRhYmFzZSBuZWVkcyB0byBiZQotICogYmVoaW5kIGJlZm9yZSB3 ZSdsbCBkZWNpZGUgd2UgbmVlZCB0byB3YWtlIGl0IHVwIHRvIGFkdmFuY2UgaXRzIHBvaW50 ZXIuCisgKiB3ZSBkbyB0aGF0IGFmdGVyIGV2ZXJ5IFFVRVVFX0NMRUFOVVBfREVMQVkgcGFn ZXMgb2YgTk9USUZZIGRhdGEuCiAgKgogICogUmVzaXN0IHRoZSB0ZW1wdGF0aW9uIHRvIG1h a2UgdGhpcyByZWFsbHkgbGFyZ2UuICBXaGlsZSB0aGF0IHdvdWxkIHNhdmUKICAqIHdvcmsg aW4gc29tZSBwbGFjZXMsIGl0IHdvdWxkIGFkZCBjb3N0IGluIG90aGVycy4gIEluIHBhcnRp Y3VsYXIsIHRoaXMKQEAgLTI0Niw2ICsyOTgsOSBAQCB0eXBlZGVmIHN0cnVjdCBRdWV1ZUJh Y2tlbmRTdGF0dXMKIAlPaWQJCQlkYm9pZDsJCQkvKiBiYWNrZW5kJ3MgZGF0YWJhc2UgT0lE LCBvciBJbnZhbGlkT2lkICovCiAJUHJvY051bWJlcgluZXh0TGlzdGVuZXI7CS8qIGlkIG9m IG5leHQgbGlzdGVuZXIsIG9yIElOVkFMSURfUFJPQ19OVU1CRVIgKi8KIAlRdWV1ZVBvc2l0 aW9uIHBvczsJCQkvKiBiYWNrZW5kIGhhcyByZWFkIHF1ZXVlIHVwIHRvIGhlcmUgKi8KKwli b29sCQl3YWtldXBQZW5kaW5nOwkvKiBzaWduYWwgc2VudCBidXQgbm90IHlldCBwcm9jZXNz ZWQgKi8KKwlib29sCQlpc0FkdmFuY2luZzsJLyogYmFja2VuZCBpcyBhZHZhbmNpbmcgaXRz IHBvc2l0aW9uICovCisJUXVldWVQb3NpdGlvbiBhZHZhbmNpbmdQb3M7IC8qIHRhcmdldCBw b3NpdGlvbiBiYWNrZW5kIGlzIGFkdmFuY2luZyB0byAqLwogfSBRdWV1ZUJhY2tlbmRTdGF0 dXM7CiAKIC8qCkBAIC0yNjAsOSArMzE1LDEwIEBAIHR5cGVkZWYgc3RydWN0IFF1ZXVlQmFj a2VuZFN0YXR1cwogICogKHNpbmNlIG5vIG90aGVyIGJhY2tlbmQgd2lsbCBpbnNwZWN0IGl0 KS4KICAqCiAgKiBXaGVuIGhvbGRpbmcgTm90aWZ5UXVldWVMb2NrIGluIEVYQ0xVU0lWRSBt b2RlLCBiYWNrZW5kcyBjYW4gaW5zcGVjdCB0aGUKLSAqIGVudHJpZXMgb2Ygb3RoZXIgYmFj a2VuZHMgYW5kIGFsc28gY2hhbmdlIHRoZSBoZWFkIHBvaW50ZXIuIFdoZW4gaG9sZGluZwot ICogYm90aCBOb3RpZnlRdWV1ZUxvY2sgYW5kIE5vdGlmeVF1ZXVlVGFpbExvY2sgaW4gRVhD TFVTSVZFIG1vZGUsIGJhY2tlbmRzCi0gKiBjYW4gY2hhbmdlIHRoZSB0YWlsIHBvaW50ZXJz LgorICogZW50cmllcyBvZiBvdGhlciBiYWNrZW5kcyBhbmQgYWxzbyBjaGFuZ2UgdGhlIGhl YWQgcG9pbnRlci4gVGhleSBjYW4KKyAqIGFsc28gYWR2YW5jZSBvdGhlciBiYWNrZW5kcycg cXVldWUgcG9zaXRpb25zLCB1bmxlc3MgdGhleSBhcmUgbm90CisgKiBpbiB0aGUgcHJvY2Vz cyBvZiBkb2luZyB0aGF0IHRoZW1zZWx2ZXMuIFdoZW4gaG9sZGluZyBib3RoIE5vdGlmeVF1 ZXVlTG9jayBhbmQKKyAqIE5vdGlmeVF1ZXVlVGFpbExvY2sgaW4gRVhDTFVTSVZFIG1vZGUs IGJhY2tlbmRzIGNhbiBjaGFuZ2UgdGhlIHRhaWwgcG9pbnRlcnMuCiAgKgogICogU0xSVSBi dWZmZXIgcG9vbCBpcyBkaXZpZGVkIGluIGJhbmtzIGFuZCBiYW5rIHdpc2UgU0xSVSBsb2Nr IGlzIHVzZWQgYXMKICAqIHRoZSBjb250cm9sIGxvY2sgZm9yIHRoZSBwZ19ub3RpZnkgU0xS VSBidWZmZXJzLgpAQCAtMjg4LDExICszNDQsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgQXN5bmNR dWV1ZUNvbnRyb2wKIAlQcm9jTnVtYmVyCWZpcnN0TGlzdGVuZXI7CS8qIGlkIG9mIGZpcnN0 IGxpc3RlbmVyLCBvcgogCQkJCQkJCQkgKiBJTlZBTElEX1BST0NfTlVNQkVSICovCiAJVGlt ZXN0YW1wVHogbGFzdFF1ZXVlRmlsbFdhcm47CS8qIHRpbWUgb2YgbGFzdCBxdWV1ZS1mdWxs IG1zZyAqLworCWRzYV9oYW5kbGUJY2hhbm5lbEhhc2hEU0E7CisJZHNoYXNoX3RhYmxlX2hh bmRsZSBjaGFubmVsSGFzaERTSDsKIAlRdWV1ZUJhY2tlbmRTdGF0dXMgYmFja2VuZFtGTEVY SUJMRV9BUlJBWV9NRU1CRVJdOwogfSBBc3luY1F1ZXVlQ29udHJvbDsKIAogc3RhdGljIEFz eW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKIAorc3RhdGljIGRzYV9hcmVh ICpjaGFubmVsRFNBID0gTlVMTDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKmNoYW5uZWxIYXNo ID0gTlVMTDsKKwogI2RlZmluZSBRVUVVRV9IRUFECQkJCQkoYXN5bmNRdWV1ZUNvbnRyb2wt PmhlYWQpCiAjZGVmaW5lIFFVRVVFX1RBSUwJCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+dGFp bCkKICNkZWZpbmUgUVVFVUVfU1RPUF9QQUdFCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+c3Rv cFBhZ2UpCkBAIC0zMDEsNiArMzYyLDkgQEAgc3RhdGljIEFzeW5jUXVldWVDb250cm9sICph c3luY1F1ZXVlQ29udHJvbDsKICNkZWZpbmUgUVVFVUVfQkFDS0VORF9EQk9JRChpKQkJKGFz eW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmRib2lkKQogI2RlZmluZSBRVUVVRV9ORVhU X0xJU1RFTkVSKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ubmV4dExpc3Rl bmVyKQogI2RlZmluZSBRVUVVRV9CQUNLRU5EX1BPUyhpKQkJKGFzeW5jUXVldWVDb250cm9s LT5iYWNrZW5kW2ldLnBvcykKKyNkZWZpbmUgUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElO RyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ud2FrZXVwUGVuZGluZykKKyNk ZWZpbmUgUVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoaSkJKGFzeW5jUXVldWVDb250cm9s LT5iYWNrZW5kW2ldLmlzQWR2YW5jaW5nKQorI2RlZmluZSBRVUVVRV9CQUNLRU5EX0FEVkFO Q0lOR19QT1MoaSkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmFkdmFuY2luZ1Bv cykKIAogLyoKICAqIFRoZSBTTFJVIGJ1ZmZlciBhcmVhIHRocm91Z2ggd2hpY2ggd2UgYWNj ZXNzIHRoZSBub3RpZmljYXRpb24gcXVldWUKQEAgLTMxMywxNiArMzc3LDE4IEBAIHN0YXRp YyBTbHJ1Q3RsRGF0YSBOb3RpZnlDdGxEYXRhOwogI2RlZmluZSBRVUVVRV9GVUxMX1dBUk5f SU5URVJWQUwJNTAwMAkvKiB3YXJuIGF0IG1vc3Qgb25jZSBldmVyeSA1cyAqLwogCiAvKgot ICogbGlzdGVuQ2hhbm5lbHMgaWRlbnRpZmllcyB0aGUgY2hhbm5lbHMgd2UgYXJlIGFjdHVh bGx5IGxpc3RlbmluZyB0bwotICogKGllLCBoYXZlIGNvbW1pdHRlZCBhIExJU1RFTiBvbiku ICBJdCBpcyBhIHNpbXBsZSBsaXN0IG9mIGNoYW5uZWwgbmFtZXMsCi0gKiBhbGxvY2F0ZWQg aW4gVG9wTWVtb3J5Q29udGV4dC4KKyAqIGxpc3RlbkNoYW5uZWxzSGFzaCBpZGVudGlmaWVz IHRoZSBjaGFubmVscyB3ZSBhcmUgbGlzdGVuaW5nIHRvLgorICogRW50cmllcyBhcmUgYWRk ZWQgZHVyaW5nIFByZUNvbW1pdF9Ob3RpZnkgKGJlZm9yZSBjb21taXR0aW5nIHRvIGNsb2cp IGFuZAorICogcmVtb3ZlZCBvbiBhYm9ydCBpZiB0aGUgTElTVEVOIHdhcyBuZXZlciBjb21t aXR0ZWQuICBJdCBpcyBhIGhhc2ggdGFibGUKKyAqIG9mIGNoYW5uZWwgbmFtZXMsIGFsbG9j YXRlZCBpbiBUb3BNZW1vcnlDb250ZXh0LgogICovCi1zdGF0aWMgTGlzdCAqbGlzdGVuQ2hh bm5lbHMgPSBOSUw7CS8qIGxpc3Qgb2YgQyBzdHJpbmdzICovCitzdGF0aWMgSFRBQiAqbGlz dGVuQ2hhbm5lbHNIYXNoID0gTlVMTDsKIAogLyoKICAqIFN0YXRlIGZvciBwZW5kaW5nIExJ U1RFTi9VTkxJU1RFTiBhY3Rpb25zIGNvbnNpc3RzIG9mIGFuIG9yZGVyZWQgbGlzdCBvZgot ICogYWxsIGFjdGlvbnMgcmVxdWVzdGVkIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiAg QXMgZXhwbGFpbmVkIGFib3ZlLAotICogd2UgZG9uJ3QgYWN0dWFsbHkgY2hhbmdlIGxpc3Rl bkNoYW5uZWxzIHVudGlsIHdlIHJlYWNoIHRyYW5zYWN0aW9uIGNvbW1pdC4KKyAqIGFsbCBh Y3Rpb25zIHJlcXVlc3RlZCBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gIER1cmluZyBQ cmVDb21taXRfTm90aWZ5LAorICogd2Ugc3RhZ2UgdGhlc2UgY2hhbmdlcyBpbiBsaXN0ZW5D aGFubmVsc0hhc2ggYW5kIHRoZSBzaGFyZWQgY2hhbm5lbEhhc2guCisgKiBPbiBhYm9ydCwg QXRBYm9ydF9Ob3RpZnkgY2xlYW5zIHVwIGFueSBzdGFnZWQtYnV0LXVuY29tbWl0dGVkIGVu dHJpZXMuCiAgKgogICogVGhlIGxpc3QgaXMga2VwdCBpbiBDdXJUcmFuc2FjdGlvbkNvbnRl eHQuICBJbiBzdWJ0cmFuc2FjdGlvbnMsIGVhY2gKICAqIHN1YnRyYW5zYWN0aW9uIGhhcyBp dHMgb3duIGxpc3QgaW4gaXRzIG93biBDdXJUcmFuc2FjdGlvbkNvbnRleHQsIGJ1dApAQCAt MzkxLDYgKzQ1Nyw3IEBAIHR5cGVkZWYgc3RydWN0IE5vdGlmaWNhdGlvbkxpc3QKIAlpbnQJ CQluZXN0aW5nTGV2ZWw7CS8qIGN1cnJlbnQgdHJhbnNhY3Rpb24gbmVzdGluZyBkZXB0aCAq LwogCUxpc3QJICAgKmV2ZW50czsJCQkvKiBsaXN0IG9mIE5vdGlmaWNhdGlvbiBzdHJ1Y3Rz ICovCiAJSFRBQgkgICAqaGFzaHRhYjsJCS8qIGhhc2ggb2YgTm90aWZpY2F0aW9uSGFzaCBz dHJ1Y3RzLCBvciBOVUxMICovCisJSFRBQgkgICAqY2hhbm5lbEhhc2h0YWI7IC8qIGhhc2gg b2YgdW5pcXVlIGNoYW5uZWwgbmFtZXMsIG9yIE5VTEwgKi8KIAlzdHJ1Y3QgTm90aWZpY2F0 aW9uTGlzdCAqdXBwZXI7IC8qIGRldGFpbHMgZm9yIHVwcGVyIHRyYW5zYWN0aW9uIGxldmVs cyAqLwogfSBOb3RpZmljYXRpb25MaXN0OwogCkBAIC00MDEsNiArNDY4LDExIEBAIHN0cnVj dCBOb3RpZmljYXRpb25IYXNoCiAJTm90aWZpY2F0aW9uICpldmVudDsJCS8qID0+IHRoZSBh Y3R1YWwgTm90aWZpY2F0aW9uIHN0cnVjdCAqLwogfTsKIAorc3RydWN0IENoYW5uZWxIYXNo Cit7CisJY2hhcgkJY2hhbm5lbFtOQU1FREFUQUxFTl07Cit9OworCiBzdGF0aWMgTm90aWZp Y2F0aW9uTGlzdCAqcGVuZGluZ05vdGlmaWVzID0gTlVMTDsKIAogLyoKQEAgLTQxOCw2ICs0 OTAsMzYgQEAgc3RhdGljIGJvb2wgdW5saXN0ZW5FeGl0UmVnaXN0ZXJlZCA9IGZhbHNlOwog LyogVHJ1ZSBpZiB3ZSdyZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBhcyBhIGxpc3RlbmVyIGlu IGFzeW5jUXVldWVDb250cm9sICovCiBzdGF0aWMgYm9vbCBhbVJlZ2lzdGVyZWRMaXN0ZW5l ciA9IGZhbHNlOwogCisvKgorICogUXVldWUgaGVhZCBwb3NpdGlvbnMgZm9yIGRpcmVjdCBh ZHZhbmNlbWVudC4KKyAqIFRoZXNlIGFyZSBjYXB0dXJlZCBkdXJpbmcgUHJlQ29tbWl0X05v dGlmeSB3aGlsZSBob2xkaW5nIHRoZSBoZWF2eXdlaWdodAorICogbG9jayBvbiBkYXRhYmFz ZSAwLCBlbnN1cmluZyBubyBvdGhlciBiYWNrZW5kIGNhbiBpbnNlcnQgbm90aWZpY2F0aW9u cworICogYmV0d2VlbiB0aGVtLiAgU2lnbmFsQmFja2VuZHMgdXNlcyB0aGVzZSB0byBhZHZh bmNlIGlkbGUgYmFja2VuZHMuCisgKi8KK3N0YXRpYyBRdWV1ZVBvc2l0aW9uIHF1ZXVlSGVh ZEJlZm9yZVdyaXRlOworc3RhdGljIFF1ZXVlUG9zaXRpb24gcXVldWVIZWFkQWZ0ZXJXcml0 ZTsKKworLyoKKyAqIExpc3Qgb2YgY2hhbm5lbHMgd2l0aCBwZW5kaW5nIG5vdGlmaWNhdGlv bnMgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRpYyBMaXN0ICpwZW5k aW5nTm90aWZ5Q2hhbm5lbHMgPSBOSUw7CisKKy8qCisgKiBMaXN0IG9mIGNoYW5uZWxzIHdp dGggc3RhZ2VkIGxpc3Rlbi91bmxpc3RlbiBjaGFuZ2VzIGluIHRoZSBjdXJyZW50CisgKiB0 cmFuc2FjdGlvbi4gIFBvcHVsYXRlZCBkdXJpbmcgUHJlQ29tbWl0X05vdGlmeSBhbmQgdXNl ZCBieSBBdENvbW1pdF9Ob3RpZnkKKyAqIHRvIGNvcHkgc3RhZ2VkIHZhbHVlcyB0byBjdXJy ZW50LgorICovCitzdGF0aWMgTGlzdCAqcGVuZGluZ0xpc3RlbkNoYW5uZWxzID0gTklMOwor CisvKgorICogUHJlYWxsb2NhdGVkIGFycmF5cyBmb3IgU2lnbmFsQmFja2VuZHMgdG8gYXZv aWQgbWVtb3J5IGFsbG9jYXRpb24gYWZ0ZXIKKyAqIGNvbW1pdHRpbmcgdG8gY2xvZy4gIEFs bG9jYXRlZCBpbiBQcmVDb21taXRfTm90aWZ5IHdoZW4gdGhlcmUgYXJlIHBlbmRpbmcKKyAq IG5vdGlmaWNhdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQzMiAqc2lnbmFsUGlkcyA9IE5VTEw7 CitzdGF0aWMgUHJvY051bWJlciAqc2lnbmFsUHJvY25vcyA9IE5VTEw7CisKKwogLyogaGF2 ZSB3ZSBhZHZhbmNlZCB0byBhIHBhZ2UgdGhhdCdzIGEgbXVsdGlwbGUgb2YgUVVFVUVfQ0xF QU5VUF9ERUxBWT8gKi8KIHN0YXRpYyBib29sIHRyeUFkdmFuY2VUYWlsID0gZmFsc2U7CiAK QEAgLTQyOCwxNCArNTMwLDE0IEBAIGJvb2wJCVRyYWNlX25vdGlmeSA9IGZhbHNlOwogaW50 CQkJbWF4X25vdGlmeV9xdWV1ZV9wYWdlcyA9IDEwNDg1NzY7CiAKIC8qIGxvY2FsIGZ1bmN0 aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50NjQgYXN5bmNRdWV1ZVBhZ2VE aWZmKGludDY0IHAsIGludDY0IHEpOwogc3RhdGljIGlubGluZSBib29sIGFzeW5jUXVldWVQ YWdlUHJlY2VkZXMoaW50NjQgcCwgaW50NjQgcSk7CiBzdGF0aWMgdm9pZCBxdWV1ZV9saXN0 ZW4oTGlzdGVuQWN0aW9uS2luZCBhY3Rpb24sIGNvbnN0IGNoYXIgKmNoYW5uZWwpOwogc3Rh dGljIHZvaWQgQXN5bmNfVW5saXN0ZW5PbkV4aXQoaW50IGNvZGUsIERhdHVtIGFyZyk7CiBz dGF0aWMgdm9pZCBFeGVjX0xpc3RlblByZUNvbW1pdCh2b2lkKTsKLXN0YXRpYyB2b2lkIEV4 ZWNfTGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpOwotc3RhdGljIHZvaWQgRXhl Y19Vbmxpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKTsKLXN0YXRpYyB2b2lkIEV4 ZWNfVW5saXN0ZW5BbGxDb21taXQodm9pZCk7CitzdGF0aWMgdm9pZCBFeGVjX0xpc3RlblBy ZUNvbW1pdFN0YWdlKGNvbnN0IGNoYXIgKmNoYW5uZWwpOworc3RhdGljIHZvaWQgRXhlY19V bmxpc3RlblByZUNvbW1pdFN0YWdlKGNvbnN0IGNoYXIgKmNoYW5uZWwpOworc3RhdGljIHZv aWQgRXhlY19Vbmxpc3RlbkFsbFByZUNvbW1pdFN0YWdlKHZvaWQpOworc3RhdGljIHZvaWQg Q2xlYW51cExpc3RlbmVyc09uRXhpdCh2b2lkKTsKIHN0YXRpYyBib29sIElzTGlzdGVuaW5n T24oY29uc3QgY2hhciAqY2hhbm5lbCk7CiBzdGF0aWMgdm9pZCBhc3luY1F1ZXVlVW5yZWdp c3Rlcih2b2lkKTsKIHN0YXRpYyBib29sIGFzeW5jUXVldWVJc0Z1bGwodm9pZCk7CkBAIC00 NTYsMTYgKzU1OCw5IEBAIHN0YXRpYyB2b2lkIEFkZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMo Tm90aWZpY2F0aW9uICpuKTsKIHN0YXRpYyB1aW50MzIgbm90aWZpY2F0aW9uX2hhc2goY29u c3Qgdm9pZCAqa2V5LCBTaXplIGtleXNpemUpOwogc3RhdGljIGludAlub3RpZmljYXRpb25f bWF0Y2goY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXpl KTsKIHN0YXRpYyB2b2lkIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKTsK LQotLyoKLSAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcXVldWUgcGFn ZSBudW1iZXJzLgotICogUHJldmlvdXNseSB0aGlzIGZ1bmN0aW9uIGFjY291bnRlZCBmb3Ig YSB3cmFwYXJvdW5kLgotICovCi1zdGF0aWMgaW5saW5lIGludDY0Ci1hc3luY1F1ZXVlUGFn ZURpZmYoaW50NjQgcCwgaW50NjQgcSkKLXsKLQlyZXR1cm4gcCAtIHE7Ci19CitzdGF0aWMg aW5saW5lIHZvaWQgQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KENoYW5uZWxIYXNoS2V5ICprZXks IE9pZCBkYm9pZCwgY29uc3QgY2hhciAqY2hhbm5lbCk7CitzdGF0aWMgZHNoYXNoX2hhc2gg Y2hhbm5lbEhhc2hGdW5jKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFy Zyk7CitzdGF0aWMgdm9pZCBpbml0Q2hhbm5lbEhhc2godm9pZCk7CiAKIC8qCiAgKiBEZXRl cm1pbmVzIHdoZXRoZXIgcCBwcmVjZWRlcyBxLgpAQCAtNDc3LDYgKzU3MiwxMDUgQEAgYXN5 bmNRdWV1ZVBhZ2VQcmVjZWRlcyhpbnQ2NCBwLCBpbnQ2NCBxKQogCXJldHVybiBwIDwgcTsK IH0KIAorLyoKKyAqIGNoYW5uZWxIYXNoRnVuYworICoJCUhhc2ggZnVuY3Rpb24gZm9yIGNo YW5uZWwga2V5cy4KKyAqLworc3RhdGljIGRzaGFzaF9oYXNoCitjaGFubmVsSGFzaEZ1bmMo Y29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwgdm9pZCAqYXJnKQoreworCWNvbnN0IENo YW5uZWxIYXNoS2V5ICprID0gKGNvbnN0IENoYW5uZWxIYXNoS2V5ICopIGtleTsKKwlkc2hh c2hfaGFzaCBoOworCisJaCA9IERhdHVtR2V0VUludDMyKGhhc2hfdWludDMyKGstPmRib2lk KSk7CisJaCBePSBEYXR1bUdldFVJbnQzMihoYXNoX2FueSgoY29uc3QgdW5zaWduZWQgY2hh ciAqKSBrLT5jaGFubmVsLAorCQkJCQkJCQkgc3RybmxlbihrLT5jaGFubmVsLCBOQU1FREFU QUxFTikpKTsKKworCXJldHVybiBoOworfQorCisvKiBwYXJhbWV0ZXJzIGZvciB0aGUgY2hh bm5lbCBoYXNoIHRhYmxlICovCitzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgY2hh bm5lbERTSFBhcmFtcyA9IHsKKwlzaXplb2YoQ2hhbm5lbEhhc2hLZXkpLAorCXNpemVvZihD aGFubmVsRW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJY2hhbm5lbEhhc2hGdW5jLAorCWRz aGFzaF9tZW1jcHksCisJTFdUUkFOQ0hFX05PVElGWV9DSEFOTkVMX0hBU0gKK307CisKKy8q CisgKiBpbml0Q2hhbm5lbEhhc2gKKyAqCQlMYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBj aGFubmVsIGhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0Q2hhbm5lbEhhc2go dm9pZCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkvKiBRdWljayBleGl0 IGlmIHdlIGFscmVhZHkgZGlkIHRoaXMgKi8KKwlpZiAoYXN5bmNRdWV1ZUNvbnRyb2wtPmNo YW5uZWxIYXNoRFNIICE9IERTSEFTSF9IQU5ETEVfSU5WQUxJRCAmJgorCQljaGFubmVsSGFz aCAhPSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBPdGhlcndpc2UsIHVzZSBhIGxvY2sgdG8g ZW5zdXJlIG9ubHkgb25lIHByb2Nlc3MgY3JlYXRlcyB0aGUgdGFibGUgKi8KKwlMV0xvY2tB Y3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qIEJlIHN1cmUg YW55IGxvY2FsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgRFNBIHJvdXRpbmVzIGlzIHBlcnNpc3Rl bnQgKi8KKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNv bnRleHQpOworCisJaWYgKGFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9PSBE U0hBU0hfSEFORExFX0lOVkFMSUQpCisJeworCQkvKiBJbml0aWFsaXplIGR5bmFtaWMgc2hh cmVkIGhhc2ggdGFibGUgZm9yIGNoYW5uZWwgaGFzaCAqLworCQljaGFubmVsRFNBID0gZHNh X2NyZWF0ZShMV1RSQU5DSEVfTk9USUZZX0NIQU5ORUxfSEFTSCk7CisJCWRzYV9waW4oY2hh bm5lbERTQSk7CisJCWRzYV9waW5fbWFwcGluZyhjaGFubmVsRFNBKTsKKwkJY2hhbm5lbEhh c2ggPSBkc2hhc2hfY3JlYXRlKGNoYW5uZWxEU0EsICZjaGFubmVsRFNIUGFyYW1zLCBOVUxM KTsKKworCQkvKiBTdG9yZSBoYW5kbGVzIGluIHNoYXJlZCBtZW1vcnkgZm9yIG90aGVyIGJh Y2tlbmRzIHRvIHVzZSAqLworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0Eg PSBkc2FfZ2V0X2hhbmRsZShjaGFubmVsRFNBKTsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNo YW5uZWxIYXNoRFNIID0KKwkJCWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUoY2hhbm5l bEhhc2gpOworCX0KKwllbHNlIGlmICghY2hhbm5lbEhhc2gpCisJeworCQkvKiBBdHRhY2gg dG8gZXhpc3RpbmcgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSAqLworCQljaGFubmVsRFNB ID0gZHNhX2F0dGFjaChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EpOworCQlk c2FfcGluX21hcHBpbmcoY2hhbm5lbERTQSk7CisJCWNoYW5uZWxIYXNoID0gZHNoYXNoX2F0 dGFjaChjaGFubmVsRFNBLCAmY2hhbm5lbERTSFBhcmFtcywKKwkJCQkJCQkJCWFzeW5jUXVl dWVDb250cm9sLT5jaGFubmVsSGFzaERTSCwKKwkJCQkJCQkJCU5VTEwpOworCX0KKworCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwlMV0xvY2tSZWxlYXNlKE5vdGlm eVF1ZXVlTG9jayk7Cit9CisKKy8qCisgKiBpbml0TGlzdGVuQ2hhbm5lbHNIYXNoCisgKgkJ TGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbG9jYWwgbGlzdGVuIGNoYW5uZWxzIGhhc2gg dGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0TGlzdGVuQ2hhbm5lbHNIYXNoKHZvaWQp Cit7CisJSEFTSENUTAkJaGFzaF9jdGw7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGFscmVh ZHkgZGlkIHRoaXMgKi8KKwlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoICE9IE5VTEwpCisJCXJl dHVybjsKKworCS8qIEluaXRpYWxpemUgbG9jYWwgaGFzaCB0YWJsZSBmb3IgdGhpcyBiYWNr ZW5kJ3MgbGlzdGVuZWQgY2hhbm5lbHMgKi8KKwltZW1zZXQoJmhhc2hfY3RsLCAwLCBzaXpl b2YoaGFzaF9jdGwpKTsKKwloYXNoX2N0bC5rZXlzaXplID0gTkFNRURBVEFMRU47CisJaGFz aF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKHN0cnVjdCBDaGFubmVsSGFzaCk7CisKKwlsaXN0 ZW5DaGFubmVsc0hhc2ggPQorCQloYXNoX2NyZWF0ZSgiTGlzdGVuIENoYW5uZWxzIiwKKwkJ CQkJNjQsCisJCQkJCSZoYXNoX2N0bCwKKwkJCQkJSEFTSF9FTEVNIHwgSEFTSF9TVFJJTkdT KTsKK30KKwogLyoKICAqIFJlcG9ydCBzcGFjZSBuZWVkZWQgZm9yIG91ciBzaGFyZWQgbWVt b3J5IGFyZWEKICAqLwpAQCAtNTIwLDEyICs3MTQsMTcgQEAgQXN5bmNTaG1lbUluaXQodm9p ZCkKIAkJUVVFVUVfU1RPUF9QQUdFID0gMDsKIAkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBJ TlZBTElEX1BST0NfTlVNQkVSOwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFzdFF1ZXVlRmls bFdhcm4gPSAwOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBEU0Ff SEFORExFX0lOVkFMSUQ7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9 IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBNYXhCYWNr ZW5kczsgaSsrKQogCQl7CiAJCQlRVUVVRV9CQUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7 CiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05F WFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQkJU0VUX1FVRVVFX1BP UyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlTRVRfUVVFVUVfUE9TKFFVRVVF X0JBQ0tFTkRfQURWQU5DSU5HX1BPUyhpKSwgMCwgMCk7CisJCQlRVUVVRV9CQUNLRU5EX1dB S0VVUF9QRU5ESU5HKGkpID0gZmFsc2U7CisJCQlRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lO RyhpKSA9IGZhbHNlOwogCQl9CiAJfQogCkBAIC02NTYsNiArODU1LDcgQEAgQXN5bmNfTm90 aWZ5KGNvbnN0IGNoYXIgKmNoYW5uZWwsIGNvbnN0IGNoYXIgKnBheWxvYWQpCiAJCW5vdGlm aWVzLT5ldmVudHMgPSBsaXN0X21ha2UxKG4pOwogCQkvKiBXZSBjZXJ0YWlubHkgZG9uJ3Qg bmVlZCBhIGhhc2h0YWJsZSB5ZXQgKi8KIAkJbm90aWZpZXMtPmhhc2h0YWIgPSBOVUxMOwor CQlub3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgPSBOVUxMOwogCQlub3RpZmllcy0+dXBwZXIg PSBwZW5kaW5nTm90aWZpZXM7CiAJCXBlbmRpbmdOb3RpZmllcyA9IG5vdGlmaWVzOwogCX0K QEAgLTY4Miw4ICs4ODIsOCBAQCBBc3luY19Ob3RpZnkoY29uc3QgY2hhciAqY2hhbm5lbCwg Y29uc3QgY2hhciAqcGF5bG9hZCkKICAqCQlDb21tb24gY29kZSBmb3IgbGlzdGVuLCB1bmxp c3RlbiwgdW5saXN0ZW4gYWxsIGNvbW1hbmRzLgogICoKICAqCQlBZGRzIHRoZSByZXF1ZXN0 IHRvIHRoZSBsaXN0IG9mIHBlbmRpbmcgYWN0aW9ucy4KLSAqCQlBY3R1YWwgdXBkYXRlIG9m IHRoZSBsaXN0ZW5DaGFubmVscyBsaXN0IGhhcHBlbnMgZHVyaW5nIHRyYW5zYWN0aW9uCi0g KgkJY29tbWl0LgorICoJCUFjdHVhbCB1cGRhdGUgb2YgbGlzdGVuQ2hhbm5lbHNIYXNoIGFu ZCBjaGFubmVsSGFzaCBoYXBwZW5zIGR1cmluZworICoJCVByZUNvbW1pdF9Ob3RpZnksIHdp dGggc3RhZ2VkIGNoYW5nZXMgY29tbWl0dGVkIGluIEF0Q29tbWl0X05vdGlmeS4KICAqLwog c3RhdGljIHZvaWQKIHF1ZXVlX2xpc3RlbihMaXN0ZW5BY3Rpb25LaW5kIGFjdGlvbiwgY29u c3QgY2hhciAqY2hhbm5lbCkKQEAgLTc4MiwzMCArOTgyLDQ5IEBAIEFzeW5jX1VubGlzdGVu QWxsKHZvaWQpCiAgKiBTUUwgZnVuY3Rpb246IHJldHVybiBhIHNldCBvZiB0aGUgY2hhbm5l bCBuYW1lcyB0aGlzIGJhY2tlbmQgaXMgYWN0aXZlbHkKICAqIGxpc3RlbmluZyB0by4KICAq Ci0gKiBOb3RlOiB0aGlzIGNvZGluZyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCB0aGUgbGlz dGVuQ2hhbm5lbHMgbGlzdCBjYW5ub3QKKyAqIE5vdGU6IHRoaXMgY29kaW5nIHJlbGllcyBv biB0aGUgZmFjdCB0aGF0IHRoZSBsaXN0ZW5DaGFubmVsc0hhc2ggY2Fubm90CiAgKiBjaGFu Z2Ugd2l0aGluIGEgdHJhbnNhY3Rpb24uCiAgKi8KIERhdHVtCiBwZ19saXN0ZW5pbmdfY2hh bm5lbHMoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7 CisJSEFTSF9TRVFfU1RBVFVTICpzdGF0dXM7CiAKIAkvKiBzdHVmZiBkb25lIG9ubHkgb24g dGhlIGZpcnN0IGNhbGwgb2YgdGhlIGZ1bmN0aW9uICovCiAJaWYgKFNSRl9JU19GSVJTVENB TEwoKSkKIAl7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwogCQkvKiBjcmVhdGUg YSBmdW5jdGlvbiBjb250ZXh0IGZvciBjcm9zcy1jYWxsIHBlcnNpc3RlbmNlICovCiAJCWZ1 bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKworCQkvKiBJbml0aWFsaXplIGhhc2gg dGFibGUgaXRlcmF0aW9uIGlmIHdlIGhhdmUgYW55IGNoYW5uZWxzICovCisJCWlmIChsaXN0 ZW5DaGFubmVsc0hhc2ggIT0gTlVMTCkKKwkJeworCQkJb2xkY29udGV4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCQkJc3Rh dHVzID0gKEhBU0hfU0VRX1NUQVRVUyAqKSBwYWxsb2Moc2l6ZW9mKEhBU0hfU0VRX1NUQVRV UykpOworCQkJaGFzaF9zZXFfaW5pdChzdGF0dXMsIGxpc3RlbkNoYW5uZWxzSGFzaCk7CisJ CQlmdW5jY3R4LT51c2VyX2ZjdHggPSBzdGF0dXM7CisJCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlmdW5jY3R4LT51c2VyX2Zj dHggPSBOVUxMOworCQl9CiAJfQogCiAJLyogc3R1ZmYgZG9uZSBvbiBldmVyeSBjYWxsIG9m IHRoZSBmdW5jdGlvbiAqLwogCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCXN0 YXR1cyA9IChIQVNIX1NFUV9TVEFUVVMgKikgZnVuY2N0eC0+dXNlcl9mY3R4OwogCi0JaWYg KGZ1bmNjdHgtPmNhbGxfY250ciA8IGxpc3RfbGVuZ3RoKGxpc3RlbkNoYW5uZWxzKSkKKwlp ZiAoc3RhdHVzICE9IE5VTEwpCiAJewotCQljaGFyCSAgICpjaGFubmVsID0gKGNoYXIgKikg bGlzdF9udGgobGlzdGVuQ2hhbm5lbHMsCi0JCQkJCQkJCQkJCQlmdW5jY3R4LT5jYWxsX2Nu dHIpOworCQlzdHJ1Y3QgQ2hhbm5lbEhhc2ggKmVudHJ5OwogCi0JCVNSRl9SRVRVUk5fTkVY VChmdW5jY3R4LCBDU3RyaW5nR2V0VGV4dERhdHVtKGNoYW5uZWwpKTsKKwkJZW50cnkgPSAo c3RydWN0IENoYW5uZWxIYXNoICopIGhhc2hfc2VxX3NlYXJjaChzdGF0dXMpOworCQlpZiAo ZW50cnkgIT0gTlVMTCkKKwkJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBDU3RyaW5nR2V0 VGV4dERhdHVtKGVudHJ5LT5jaGFubmVsKSk7CiAJfQogCiAJU1JGX1JFVFVSTl9ET05FKGZ1 bmNjdHgpOwpAQCAtODIxLDcgKzEwNDAsNyBAQCBwZ19saXN0ZW5pbmdfY2hhbm5lbHMoUEdf RlVOQ1RJT05fQVJHUykKIHN0YXRpYyB2b2lkCiBBc3luY19Vbmxpc3Rlbk9uRXhpdChpbnQg Y29kZSwgRGF0dW0gYXJnKQogewotCUV4ZWNfVW5saXN0ZW5BbGxDb21taXQoKTsKKwlDbGVh bnVwTGlzdGVuZXJzT25FeGl0KCk7CiAJYXN5bmNRdWV1ZVVucmVnaXN0ZXIoKTsKIH0KIApA QCAtODY4LDggKzEwODcsMjQgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCQllbG9nKERF QlVHMSwgIlByZUNvbW1pdF9Ob3RpZnkiKTsKIAogCS8qIFByZWZsaWdodCBmb3IgYW55IHBl bmRpbmcgbGlzdGVuL3VubGlzdGVuIGFjdGlvbnMgKi8KKwlpZiAocGVuZGluZ05vdGlmaWVz ICE9IE5VTEwgfHwgcGVuZGluZ0FjdGlvbnMgIT0gTlVMTCkKKwkJaW5pdENoYW5uZWxIYXNo KCk7CisKKwlpZiAocGVuZGluZ05vdGlmaWVzICE9IE5VTEwpCisJeworCQlpZiAoc2lnbmFs UGlkcyA9PSBOVUxMKQorCQkJc2lnbmFsUGlkcyA9IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BN ZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQlNYXhCYWNrZW5kcyAqIHNpemVvZihpbnQzMikp OworCisJCWlmIChzaWduYWxQcm9jbm9zID09IE5VTEwpCisJCQlzaWduYWxQcm9jbm9zID0g TWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQlNYXhC YWNrZW5kcyAqIHNpemVvZihQcm9jTnVtYmVyKSk7CisJfQorCiAJaWYgKHBlbmRpbmdBY3Rp b25zICE9IE5VTEwpCiAJeworCQlpbml0TGlzdGVuQ2hhbm5lbHNIYXNoKCk7CisKIAkJZm9y ZWFjaChwLCBwZW5kaW5nQWN0aW9ucy0+YWN0aW9ucykKIAkJewogCQkJTGlzdGVuQWN0aW9u ICphY3RyZWMgPSAoTGlzdGVuQWN0aW9uICopIGxmaXJzdChwKTsKQEAgLTg3OCwxMiArMTEx MywxMyBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJCQl7CiAJCQkJY2FzZSBMSVNURU5f TElTVEVOOgogCQkJCQlFeGVjX0xpc3RlblByZUNvbW1pdCgpOworCQkJCQlFeGVjX0xpc3Rl blByZUNvbW1pdFN0YWdlKGFjdHJlYy0+Y2hhbm5lbCk7CiAJCQkJCWJyZWFrOwogCQkJCWNh c2UgTElTVEVOX1VOTElTVEVOOgotCQkJCQkvKiB0aGVyZSBpcyBubyBFeGVjX1VubGlzdGVu UHJlQ29tbWl0KCkgKi8KKwkJCQkJRXhlY19Vbmxpc3RlblByZUNvbW1pdFN0YWdlKGFjdHJl Yy0+Y2hhbm5lbCk7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgTElTVEVOX1VOTElTVEVOX0FM TDoKLQkJCQkJLyogdGhlcmUgaXMgbm8gRXhlY19Vbmxpc3RlbkFsbFByZUNvbW1pdCgpICov CisJCQkJCUV4ZWNfVW5saXN0ZW5BbGxQcmVDb21taXRTdGFnZSgpOwogCQkJCQlicmVhazsK IAkJCX0KIAkJfQpAQCAtODkzLDYgKzExMjksMzYgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lk KQogCWlmIChwZW5kaW5nTm90aWZpZXMpCiAJewogCQlMaXN0Q2VsbCAgICpuZXh0Tm90aWZ5 OworCQlib29sCQlmaXJzdEl0ZXJhdGlvbiA9IHRydWU7CisKKwkJLyoKKwkJICogQnVpbGQg bGlzdCBvZiB1bmlxdWUgY2hhbm5lbHMgZm9yIFNpZ25hbEJhY2tlbmRzKCkuCisJCSAqCisJ CSAqIElmIHdlIGhhdmUgYSBjaGFubmVsSGFzaHRhYiwgdXNlIGl0IHRvIGVmZmljaWVudGx5 IGdldCB0aGUgdW5pcXVlCisJCSAqIGNoYW5uZWxzLiAgT3RoZXJ3aXNlLCBmYWxsIGJhY2sg dG8gdGhlIGxpbmVhciBhcHByb2FjaC4KKwkJICovCisJCXBlbmRpbmdOb3RpZnlDaGFubmVs cyA9IE5JTDsKKwkJaWYgKHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgIT0gTlVM TCkKKwkJeworCQkJSEFTSF9TRVFfU1RBVFVTIHN0YXR1czsKKwkJCXN0cnVjdCBDaGFubmVs SGFzaCAqY2hhbm5lbEVudHJ5OworCisJCQloYXNoX3NlcV9pbml0KCZzdGF0dXMsIHBlbmRp bmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIpOworCQkJd2hpbGUgKChjaGFubmVsRW50cnkg PSAoc3RydWN0IENoYW5uZWxIYXNoICopIGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0g TlVMTCkKKwkJCQlwZW5kaW5nTm90aWZ5Q2hhbm5lbHMgPSBsYXBwZW5kKHBlbmRpbmdOb3Rp ZnlDaGFubmVscywgY2hhbm5lbEVudHJ5LT5jaGFubmVsKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCS8qIExpbmVhciBhcHByb2FjaCBmb3Igc21hbGwgbnVtYmVyIG9mIG5vdGlmaWNhdGlv bnMgKi8KKwkJCWZvcmVhY2hfcHRyKE5vdGlmaWNhdGlvbiwgbiwgcGVuZGluZ05vdGlmaWVz LT5ldmVudHMpCisJCQl7CisJCQkJY2hhcgkgICAqY2hhbm5lbCA9IG4tPmRhdGE7CisKKwkJ CQkvKiBBZGQgaWYgbm90IGFscmVhZHkgaW4gbGlzdCAqLworCQkJCWlmICghbGlzdF9tZW1i ZXJfcHRyKHBlbmRpbmdOb3RpZnlDaGFubmVscywgY2hhbm5lbCkpCisJCQkJCXBlbmRpbmdO b3RpZnlDaGFubmVscyA9IGxhcHBlbmQocGVuZGluZ05vdGlmeUNoYW5uZWxzLCBjaGFubmVs KTsKKwkJCX0KKwkJfQogCiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYW4g WElEIGFzc2lnbmVkIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgpAQCAtOTIxLDYgKzEx ODcsMjIgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCQlMb2NrU2hhcmVkT2JqZWN0KERh dGFiYXNlUmVsYXRpb25JZCwgSW52YWxpZE9pZCwgMCwKIAkJCQkJCSBBY2Nlc3NFeGNsdXNp dmVMb2NrKTsKIAorCQkvKgorCQkgKiBGb3IgdGhlIGRpcmVjdCBhZHZhbmNlbWVudCBvcHRp bWl6YXRpb24gaW4gU2lnbmFsQmFja2VuZHMoKSwgd2UKKwkJICogbmVlZCB0byBlbnN1cmUg dGhhdCBubyBvdGhlciBiYWNrZW5kIGNhbiBpbnNlcnQgcXVldWUgZW50cmllcworCQkgKiBi ZXR3ZWVuIHF1ZXVlSGVhZEJlZm9yZVdyaXRlIGFuZCBxdWV1ZUhlYWRBZnRlcldyaXRlLiAg VGhlCisJCSAqIGhlYXZ5d2VpZ2h0IGxvY2sgYWJvdmUgcHJvdmlkZXMgdGhpcyBndWFyYW50 ZWUsIHNpbmNlIGl0IHNlcmlhbGl6ZXMKKwkJICogYWxsIHdyaXRlcnMuCisJCSAqCisJCSAq IE5vdGU6IGlmIHRoZSBoZWF2eXdlaWdodCBsb2NrIHdlcmUgZXZlciByZW1vdmVkIGZvciBz Y2FsYWJpbGl0eQorCQkgKiByZWFzb25zLCB3ZSBjb3VsZCBhY2hpZXZlIHRoZSBzYW1lIGd1 YXJhbnRlZSBieSBob2xkaW5nCisJCSAqIE5vdGlmeVF1ZXVlTG9jayBpbiBFWENMVVNJVkUg bW9kZSBhY3Jvc3MgYWxsIG91ciBpbnNlcnRpb25zLCByYXRoZXIKKwkJICogdGhhbiByZWxl YXNpbmcgYW5kIHJlYWNxdWlyaW5nIGl0IGZvciBlYWNoIHBhZ2UgYXMgd2UgZG8gYmVsb3cu CisJCSAqLworCisJCS8qIEluaXRpYWxpemUgcXVldWVIZWFkQmVmb3JlV3JpdGUgdG8gYSBz YWZlIGRlZmF1bHQgKi8KKwkJU0VUX1FVRVVFX1BPUyhxdWV1ZUhlYWRCZWZvcmVXcml0ZSwg MCwgMCk7CisKIAkJLyogTm93IHB1c2ggdGhlIG5vdGlmaWNhdGlvbnMgaW50byB0aGUgcXVl dWUgKi8KIAkJbmV4dE5vdGlmeSA9IGxpc3RfaGVhZChwZW5kaW5nTm90aWZpZXMtPmV2ZW50 cyk7CiAJCXdoaWxlIChuZXh0Tm90aWZ5ICE9IE5VTEwpCkBAIC05MzgsMTIgKzEyMjAsMjAg QEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCQkJICogcG9pbnQgaW4gdGltZSB3ZSBjYW4g c3RpbGwgcm9sbCB0aGUgdHJhbnNhY3Rpb24gYmFjay4KIAkJCSAqLwogCQkJTFdMb2NrQWNx dWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCQlpZiAoZmlyc3RJdGVy YXRpb24pCisJCQl7CisJCQkJcXVldWVIZWFkQmVmb3JlV3JpdGUgPSBRVUVVRV9IRUFEOwor CQkJCWZpcnN0SXRlcmF0aW9uID0gZmFsc2U7CisJCQl9CisKIAkJCWFzeW5jUXVldWVGaWxs V2FybmluZygpOwogCQkJaWYgKGFzeW5jUXVldWVJc0Z1bGwoKSkKIAkJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwK IAkJCQkJCSBlcnJtc2coInRvbyBtYW55IG5vdGlmaWNhdGlvbnMgaW4gdGhlIE5PVElGWSBx dWV1ZSIpKSk7CiAJCQluZXh0Tm90aWZ5ID0gYXN5bmNRdWV1ZUFkZEVudHJpZXMobmV4dE5v dGlmeSk7CisJCQlxdWV1ZUhlYWRBZnRlcldyaXRlID0gUVVFVUVfSEVBRDsKKwogCQkJTFdM b2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQl9CiAKQEAgLTk1Niw3ICsxMjQ2LDcg QEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogICoKICAqCQlUaGlzIGlzIGNhbGxlZCBhdCB0 cmFuc2FjdGlvbiBjb21taXQsIGFmdGVyIGNvbW1pdHRpbmcgdG8gY2xvZy4KICAqCi0gKgkJ VXBkYXRlIGxpc3RlbkNoYW5uZWxzIGFuZCBjbGVhciB0cmFuc2FjdGlvbi1sb2NhbCBzdGF0 ZS4KKyAqCQlVcGRhdGUgbGlzdGVuQ2hhbm5lbHNIYXNoIGFuZCBjbGVhciB0cmFuc2FjdGlv bi1sb2NhbCBzdGF0ZS4KICAqCiAgKgkJSWYgd2UgaXNzdWVkIGFueSBub3RpZmljYXRpb25z IGluIHRoZSB0cmFuc2FjdGlvbiwgc2VuZCBzaWduYWxzIHRvCiAgKgkJbGlzdGVuaW5nIGJh Y2tlbmRzIChwb3NzaWJseSBpbmNsdWRpbmcgb3Vyc2VsdmVzKSB0byBwcm9jZXNzIHRoZW0u CkBAIC05NjYsNyArMTI1Niw2IEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkKIHZvaWQKIEF0 Q29tbWl0X05vdGlmeSh2b2lkKQogewotCUxpc3RDZWxsICAgKnA7CiAKIAkvKgogCSAqIEFs bG93IHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgbm90IGV4ZWN1dGVkIExJU1RFTi9VTkxJU1RF Ti9OT1RJRlkgdG8KQEAgLTk3OCwzMCArMTI2Nyw2MiBAQCBBdENvbW1pdF9Ob3RpZnkodm9p ZCkKIAlpZiAoVHJhY2Vfbm90aWZ5KQogCQllbG9nKERFQlVHMSwgIkF0Q29tbWl0X05vdGlm eSIpOwogCi0JLyogUGVyZm9ybSBhbnkgcGVuZGluZyBsaXN0ZW4vdW5saXN0ZW4gYWN0aW9u cyAqLwotCWlmIChwZW5kaW5nQWN0aW9ucyAhPSBOVUxMKQorCS8qIENvbW1pdCBzdGFnZWQg bGlzdGVuL3VubGlzdGVuIGNoYW5nZXMgYnkgY29weWluZyBzdGFnZWQgdG8gY3VycmVudCAq LworCWlmIChwZW5kaW5nTGlzdGVuQ2hhbm5lbHMgIT0gTklMKQogCXsKLQkJZm9yZWFjaChw LCBwZW5kaW5nQWN0aW9ucy0+YWN0aW9ucykKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJZm9y ZWFjaChsYywgcGVuZGluZ0xpc3RlbkNoYW5uZWxzKQogCQl7Ci0JCQlMaXN0ZW5BY3Rpb24g KmFjdHJlYyA9IChMaXN0ZW5BY3Rpb24gKikgbGZpcnN0KHApOworCQkJY2hhcgkgICAqY2hh bm5lbCA9IChjaGFyICopIGxmaXJzdChsYyk7CisJCQlDaGFubmVsSGFzaEtleSBrZXk7CisJ CQlDaGFubmVsRW50cnkgKmVudHJ5OworCQkJTGlzdGVuZXJFbnRyeSAqbGlzdGVuZXJzOwog Ci0JCQlzd2l0Y2ggKGFjdHJlYy0+YWN0aW9uKQorCQkJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5 KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisJCQllbnRyeSA9IGRzaGFzaF9maW5k KGNoYW5uZWxIYXNoLCAma2V5LCB0cnVlKTsKKwkJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJ CWNvbnRpbnVlOworCisJCQlsaXN0ZW5lcnMgPSAoTGlzdGVuZXJFbnRyeSAqKSBkc2FfZ2V0 X2FkZHJlc3MoY2hhbm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQkJZm9y IChpbnQgaSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCiAJCQl7Ci0JCQkJ Y2FzZSBMSVNURU5fTElTVEVOOgotCQkJCQlFeGVjX0xpc3RlbkNvbW1pdChhY3RyZWMtPmNo YW5uZWwpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIExJU1RFTl9VTkxJU1RFTjoKLQkJCQkJ RXhlY19Vbmxpc3RlbkNvbW1pdChhY3RyZWMtPmNoYW5uZWwpOwotCQkJCQlicmVhazsKLQkJ CQljYXNlIExJU1RFTl9VTkxJU1RFTl9BTEw6Ci0JCQkJCUV4ZWNfVW5saXN0ZW5BbGxDb21t aXQoKTsKKwkJCQlpZiAobGlzdGVuZXJzW2ldLnByb2NObyA9PSBNeVByb2NOdW1iZXIpCisJ CQkJeworCQkJCQkvKiBDb21taXQgc3RhZ2VkIHZhbHVlIHRvIGN1cnJlbnQgKi8KKwkJCQkJ bGlzdGVuZXJzW2ldLmN1cnJlbnQgPSBsaXN0ZW5lcnNbaV0uc3RhZ2VkOworCisJCQkJCWlm ICghbGlzdGVuZXJzW2ldLmN1cnJlbnQpCisJCQkJCXsKKwkJCQkJCS8qIFVOTElTVEVOIGNv bW1pdHRlZDogcmVtb3ZlIGZyb20gbG9jYWwgYW5kIHNoYXJlZCAqLworCQkJCQkJKHZvaWQp IGhhc2hfc2VhcmNoKGxpc3RlbkNoYW5uZWxzSGFzaCwgY2hhbm5lbCwKKwkJCQkJCQkJCQkg ICBIQVNIX1JFTU9WRSwgTlVMTCk7CisKKwkJCQkJCWVudHJ5LT5udW1MaXN0ZW5lcnMtLTsK KwkJCQkJCWlmIChpIDwgZW50cnktPm51bUxpc3RlbmVycykKKwkJCQkJCQltZW1tb3ZlKCZs aXN0ZW5lcnNbaV0sICZsaXN0ZW5lcnNbaSArIDFdLAorCQkJCQkJCQkJc2l6ZW9mKExpc3Rl bmVyRW50cnkpICogKGVudHJ5LT5udW1MaXN0ZW5lcnMgLSBpKSk7CisKKwkJCQkJCWlmIChl bnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQkJCQl7CisJCQkJCQkJZHNhX2ZyZWUoY2hh bm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKwkJCQkJCQlkc2hhc2hfZGVsZXRl X2VudHJ5KGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQkJCQkJZW50cnkgPSBOVUxMOworCQkJ CQkJfQorCQkJCQl9CiAJCQkJCWJyZWFrOworCQkJCX0KIAkJCX0KKworCQkJaWYgKGVudHJ5 ICE9IE5VTEwpCisJCQkJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkp OwogCQl9CiAJfQogCiAJLyogSWYgbm8gbG9uZ2VyIGxpc3RlbmluZyB0byBhbnl0aGluZywg Z2V0IG91dCBvZiBsaXN0ZW5lciBhcnJheSAqLwotCWlmIChhbVJlZ2lzdGVyZWRMaXN0ZW5l ciAmJiBsaXN0ZW5DaGFubmVscyA9PSBOSUwpCisJaWYgKGFtUmVnaXN0ZXJlZExpc3RlbmVy ICYmCisJCShsaXN0ZW5DaGFubmVsc0hhc2ggPT0gTlVMTCB8fCBoYXNoX2dldF9udW1fZW50 cmllcyhsaXN0ZW5DaGFubmVsc0hhc2gpID09IDApKQogCQlhc3luY1F1ZXVlVW5yZWdpc3Rl cigpOwogCiAJLyoKQEAgLTEwOTgsNiArMTQxOSw5IEBAIEV4ZWNfTGlzdGVuUHJlQ29tbWl0 KHZvaWQpCiAJUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IG1heDsKIAlRVUVV RV9CQUNLRU5EX1BJRChNeVByb2NOdW1iZXIpID0gTXlQcm9jUGlkOwogCVFVRVVFX0JBQ0tF TkRfREJPSUQoTXlQcm9jTnVtYmVyKSA9IE15RGF0YWJhc2VJZDsKKwlRVUVVRV9CQUNLRU5E X1dBS0VVUF9QRU5ESU5HKE15UHJvY051bWJlcikgPSBmYWxzZTsKKwlRVUVVRV9CQUNLRU5E X0lTX0FEVkFOQ0lORyhNeVByb2NOdW1iZXIpID0gZmFsc2U7CisJUVVFVUVfQkFDS0VORF9B RFZBTkNJTkdfUE9TKE15UHJvY051bWJlcikgPSBtYXg7CiAJLyogSW5zZXJ0IGJhY2tlbmQg aW50byBsaXN0IG9mIGxpc3RlbmVycyBhdCBjb3JyZWN0IHBvc2l0aW9uICovCiAJaWYgKHBy ZXZMaXN0ZW5lciAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQogCXsKQEAgLTExMjcsOTkgKzE0 NTEsMjEzIEBAIEV4ZWNfTGlzdGVuUHJlQ29tbWl0KHZvaWQpCiB9CiAKIC8qCi0gKiBFeGVj X0xpc3RlbkNvbW1pdCAtLS0gc3Vicm91dGluZSBmb3IgQXRDb21taXRfTm90aWZ5CisgKiBF eGVjX0xpc3RlblByZUNvbW1pdFN0YWdlIC0tLSBzdWJyb3V0aW5lIGZvciBQcmVDb21taXRf Tm90aWZ5CiAgKgotICogQWRkIHRoZSBjaGFubmVsIHRvIHRoZSBsaXN0IG9mIGNoYW5uZWxz IHdlIGFyZSBsaXN0ZW5pbmcgb24uCisgKiBTdGFnZSBhIExJU1RFTiBieSBhZGRpbmcgZW50 cmllcyB0byBsaXN0ZW5DaGFubmVsc0hhc2ggYW5kIHRoZSBzaGFyZWQKKyAqIGNoYW5uZWxI YXNoIHdpdGggc3RhZ2VkPXRydWUsIGN1cnJlbnQ9ZmFsc2UuICBUaGUgc3RhZ2VkIHZhbHVl IGlzIGNvcGllZAorICogdG8gY3VycmVudCBpbiBBdENvbW1pdF9Ob3RpZnkuCiAgKi8KIHN0 YXRpYyB2b2lkCi1FeGVjX0xpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKQorRXhl Y19MaXN0ZW5QcmVDb21taXRTdGFnZShjb25zdCBjaGFyICpjaGFubmVsKQogewotCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKLQotCS8qIERvIG5vdGhpbmcgaWYgd2UgYXJlIGFscmVh ZHkgbGlzdGVuaW5nIG9uIHRoaXMgY2hhbm5lbCAqLwotCWlmIChJc0xpc3RlbmluZ09uKGNo YW5uZWwpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIEFkZCB0aGUgbmV3IGNoYW5uZWwgbmFt ZSB0byBsaXN0ZW5DaGFubmVscy4KLQkgKgotCSAqIFhYWCBJdCBpcyB0aGVvcmV0aWNhbGx5 IHBvc3NpYmxlIHRvIGdldCBhbiBvdXQtb2YtbWVtb3J5IGZhaWx1cmUgaGVyZSwKLQkgKiB3 aGljaCB3b3VsZCBiZSBiYWQgYmVjYXVzZSB3ZSBhbHJlYWR5IGNvbW1pdHRlZC4gIEZvciB0 aGUgbW9tZW50IGl0Ci0JICogZG9lc24ndCBzZWVtIHdvcnRoIHRyeWluZyB0byBndWFyZCBh Z2FpbnN0IHRoYXQsIGJ1dCBtYXliZSBpbXByb3ZlIHRoaXMKLQkgKiBsYXRlci4KLQkgKi8K LQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQp OwotCWxpc3RlbkNoYW5uZWxzID0gbGFwcGVuZChsaXN0ZW5DaGFubmVscywgcHN0cmR1cChj aGFubmVsKSk7Ci0JTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCUNoYW5u ZWxIYXNoS2V5IGtleTsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOwor CUxpc3RlbmVyRW50cnkgKmxpc3RlbmVyczsKKworCSh2b2lkKSBoYXNoX3NlYXJjaChsaXN0 ZW5DaGFubmVsc0hhc2gsIGNoYW5uZWwsIEhBU0hfRU5URVIsIE5VTEwpOworCisJcGVuZGlu Z0xpc3RlbkNoYW5uZWxzID0gbGFwcGVuZChwZW5kaW5nTGlzdGVuQ2hhbm5lbHMsIHBzdHJk dXAoY2hhbm5lbCkpOworCisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJh c2VJZCwgY2hhbm5lbCk7CisJZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQoY2hhbm5l bEhhc2gsICZrZXksICZmb3VuZCk7CisKKwlpZiAoIWZvdW5kKQorCXsKKwkJZW50cnktPmxp c3RlbmVyc0FycmF5ID0gSW52YWxpZERzYVBvaW50ZXI7CisJCWVudHJ5LT5udW1MaXN0ZW5l cnMgPSAwOworCQllbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzID0gMDsKKwl9CisKKwlpZiAo IURzYVBvaW50ZXJJc1ZhbGlkKGVudHJ5LT5saXN0ZW5lcnNBcnJheSkpCisJeworCQllbnRy eS0+bGlzdGVuZXJzQXJyYXkgPSBkc2FfYWxsb2NhdGUoY2hhbm5lbERTQSwKKwkJCQkJCQkJ CQkJIHNpemVvZihMaXN0ZW5lckVudHJ5KSAqIElOSVRJQUxfTElTVEVORVJTX0FSUkFZX1NJ WkUpOworCQllbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzID0gSU5JVElBTF9MSVNURU5FUlNf QVJSQVlfU0laRTsKKwl9CisKKwlsaXN0ZW5lcnMgPSAoTGlzdGVuZXJFbnRyeSAqKSBkc2Ff Z2V0X2FkZHJlc3MoY2hhbm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCWZv ciAoaW50IGkgPSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsgaSsrKQorCXsKKwkJaWYg KGxpc3RlbmVyc1tpXS5wcm9jTm8gPT0gTXlQcm9jTnVtYmVyKQorCQl7CisJCQlsaXN0ZW5l cnNbaV0uc3RhZ2VkID0gdHJ1ZTsKKwkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhh c2gsIGVudHJ5KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChlbnRyeS0+bnVtTGlz dGVuZXJzID49IGVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMpCisJeworCQlpbnQJCQluZXdf c2l6ZSA9IGVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgKiAyOworCQlkc2FfcG9pbnRlciBu ZXdfYXJyYXkgPSBkc2FfYWxsb2NhdGUoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJIHNpemVv ZihMaXN0ZW5lckVudHJ5KSAqIG5ld19zaXplKTsKKwkJTGlzdGVuZXJFbnRyeSAqbmV3X2xp c3RlbmVycyA9IChMaXN0ZW5lckVudHJ5ICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNB LCBuZXdfYXJyYXkpOworCisJCW1lbWNweShuZXdfbGlzdGVuZXJzLCBsaXN0ZW5lcnMsIHNp emVvZihMaXN0ZW5lckVudHJ5KSAqIGVudHJ5LT5udW1MaXN0ZW5lcnMpOworCQlkc2FfZnJl ZShjaGFubmVsRFNBLCBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCQllbnRyeS0+bGlzdGVu ZXJzQXJyYXkgPSBuZXdfYXJyYXk7CisJCWVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgPSBu ZXdfc2l6ZTsKKwkJbGlzdGVuZXJzID0gbmV3X2xpc3RlbmVyczsKKwl9CisKKwlsaXN0ZW5l cnNbZW50cnktPm51bUxpc3RlbmVyc10ucHJvY05vID0gTXlQcm9jTnVtYmVyOworCWxpc3Rl bmVyc1tlbnRyeS0+bnVtTGlzdGVuZXJzXS5zdGFnZWQgPSB0cnVlOworCWxpc3RlbmVyc1tl bnRyeS0+bnVtTGlzdGVuZXJzXS5jdXJyZW50ID0gZmFsc2U7CisJZW50cnktPm51bUxpc3Rl bmVycysrOworCisJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOwog fQogCiAvKgotICogRXhlY19Vbmxpc3RlbkNvbW1pdCAtLS0gc3Vicm91dGluZSBmb3IgQXRD b21taXRfTm90aWZ5CisgKiBFeGVjX1VubGlzdGVuUHJlQ29tbWl0U3RhZ2UgLS0tIHN1YnJv dXRpbmUgZm9yIFByZUNvbW1pdF9Ob3RpZnkKICAqCi0gKiBSZW1vdmUgdGhlIHNwZWNpZmll ZCBjaGFubmVsIG5hbWUgZnJvbSBsaXN0ZW5DaGFubmVscy4KKyAqIFN0YWdlIGFuIFVOTElT VEVOIGJ5IHNldHRpbmcgc3RhZ2VkPWZhbHNlIG9uIG91ciBlbnRyeSBpbiBjaGFubmVsSGFz aC4KKyAqIFRoZSBzdGFnZWQgdmFsdWUgaXMgY29waWVkIHRvIGN1cnJlbnQgaW4gQXRDb21t aXRfTm90aWZ5LCBhbmQgdGhlIGVudHJ5CisgKiBpcyByZW1vdmVkIGlmIGN1cnJlbnQgYmVj b21lcyBmYWxzZS4KICAqLwogc3RhdGljIHZvaWQKLUV4ZWNfVW5saXN0ZW5Db21taXQoY29u c3QgY2hhciAqY2hhbm5lbCkKK0V4ZWNfVW5saXN0ZW5QcmVDb21taXRTdGFnZShjb25zdCBj aGFyICpjaGFubmVsKQogewotCUxpc3RDZWxsICAgKnE7CisJQ2hhbm5lbEhhc2hLZXkga2V5 OworCUNoYW5uZWxFbnRyeSAqZW50cnk7CisJTGlzdGVuZXJFbnRyeSAqbGlzdGVuZXJzOwog Ci0JaWYgKFRyYWNlX25vdGlmeSkKLQkJZWxvZyhERUJVRzEsICJFeGVjX1VubGlzdGVuQ29t bWl0KCVzLCVkKSIsIGNoYW5uZWwsIE15UHJvY1BpZCk7CisJQ2hhbm5lbEhhc2hQcmVwYXJl S2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisJZW50cnkgPSBkc2hhc2hfZmlu ZChjaGFubmVsSGFzaCwgJmtleSwgdHJ1ZSk7CisJaWYgKGVudHJ5ID09IE5VTEwpCisJCXJl dHVybjsKIAotCWZvcmVhY2gocSwgbGlzdGVuQ2hhbm5lbHMpCisJbGlzdGVuZXJzID0gKExp c3RlbmVyRW50cnkgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0 ZW5lcnNBcnJheSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5l cnM7IGkrKykKIAl7Ci0JCWNoYXIJICAgKmxjaGFuID0gKGNoYXIgKikgbGZpcnN0KHEpOwot Ci0JCWlmIChzdHJjbXAobGNoYW4sIGNoYW5uZWwpID09IDApCisJCWlmIChsaXN0ZW5lcnNb aV0ucHJvY05vID09IE15UHJvY051bWJlciAmJiBsaXN0ZW5lcnNbaV0uc3RhZ2VkKQogCQl7 Ci0JCQlsaXN0ZW5DaGFubmVscyA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQobGlzdGVuQ2hh bm5lbHMsIHEpOwotCQkJcGZyZWUobGNoYW4pOworCQkJbGlzdGVuZXJzW2ldLnN0YWdlZCA9 IGZhbHNlOworCisJCQlwZW5kaW5nTGlzdGVuQ2hhbm5lbHMgPSBsYXBwZW5kKHBlbmRpbmdM aXN0ZW5DaGFubmVscywgcHN0cmR1cChjaGFubmVsKSk7CiAJCQlicmVhazsKIAkJfQogCX0K IAotCS8qCi0JICogV2UgZG8gbm90IGNvbXBsYWluIGFib3V0IHVubGlzdGVuaW5nIHNvbWV0 aGluZyBub3QgYmVpbmcgbGlzdGVuZWQ7Ci0JICogc2hvdWxkIHdlPwotCSAqLworCWRzaGFz aF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKIH0KIAogLyoKLSAqIEV4ZWNf VW5saXN0ZW5BbGxDb21taXQgLS0tIHN1YnJvdXRpbmUgZm9yIEF0Q29tbWl0X05vdGlmeQor ICogRXhlY19Vbmxpc3RlbkFsbFByZUNvbW1pdFN0YWdlIC0tLSBzdWJyb3V0aW5lIGZvciBQ cmVDb21taXRfTm90aWZ5CiAgKgotICoJCVVubGlzdGVuIG9uIGFsbCBjaGFubmVscyBmb3Ig dGhpcyBiYWNrZW5kLgorICogU3RhZ2UgVU5MSVNURU4gKiBieSBzZXR0aW5nIHN0YWdlZD1m YWxzZSBvbiBhbGwgb3VyIGVudHJpZXMgaW4gY2hhbm5lbEhhc2guCiAgKi8KIHN0YXRpYyB2 b2lkCi1FeGVjX1VubGlzdGVuQWxsQ29tbWl0KHZvaWQpCitFeGVjX1VubGlzdGVuQWxsUHJl Q29tbWl0U3RhZ2Uodm9pZCkKIHsKKwlkc2hhc2hfc2VxX3N0YXR1cyBzdGF0dXM7CisJQ2hh bm5lbEVudHJ5ICplbnRyeTsKKworCWRzaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBjaGFubmVs SGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmc3RhdHVz KSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRyeS0+a2V5LmRib2lkID09IE15RGF0YWJhc2VJ ZCkKKwkJeworCQkJTGlzdGVuZXJFbnRyeSAqbGlzdGVuZXJzID0gKExpc3RlbmVyRW50cnkg KikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCQkJCQkJCQkgZW50 cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyeS0+ bnVtTGlzdGVuZXJzOyBpKyspCisJCQl7CisJCQkJaWYgKGxpc3RlbmVyc1tpXS5wcm9jTm8g PT0gTXlQcm9jTnVtYmVyICYmIGxpc3RlbmVyc1tpXS5zdGFnZWQpCisJCQkJeworCQkJCQls aXN0ZW5lcnNbaV0uc3RhZ2VkID0gZmFsc2U7CisJCQkJCXBlbmRpbmdMaXN0ZW5DaGFubmVs cyA9IGxhcHBlbmQocGVuZGluZ0xpc3RlbkNoYW5uZWxzLAorCQkJCQkJCQkJCQkJCXBzdHJk dXAoZW50cnktPmtleS5jaGFubmVsKSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWRzaGFz aF9zZXFfdGVybSgmc3RhdHVzKTsKK30KKworLyoKKyAqIENsZWFudXBMaXN0ZW5lcnNPbkV4 aXQgLS0tIGNhbGxlZCBmcm9tIEFzeW5jX1VubGlzdGVuT25FeGl0CisgKgorICoJCVJlbW92 ZSB0aGlzIGJhY2tlbmQgZnJvbSBhbGwgY2hhbm5lbHMgaW4gdGhlIHNoYXJlZCBoYXNoLgor ICovCitzdGF0aWMgdm9pZAorQ2xlYW51cExpc3RlbmVyc09uRXhpdCh2b2lkKQoreworCWRz aGFzaF9zZXFfc3RhdHVzIHN0YXR1czsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCiAJaWYg KFRyYWNlX25vdGlmeSkKLQkJZWxvZyhERUJVRzEsICJFeGVjX1VubGlzdGVuQWxsQ29tbWl0 KCVkKSIsIE15UHJvY1BpZCk7CisJCWVsb2coREVCVUcxLCAiQ2xlYW51cExpc3RlbmVyc09u RXhpdCglZCkiLCBNeVByb2NQaWQpOwogCi0JbGlzdF9mcmVlX2RlZXAobGlzdGVuQ2hhbm5l bHMpOwotCWxpc3RlbkNoYW5uZWxzID0gTklMOworCS8qIENsZWFyIG91ciBsb2NhbCBjYWNo ZSAqLworCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggIT0gTlVMTCkKKwl7CisJCWhhc2hfZGVz dHJveShsaXN0ZW5DaGFubmVsc0hhc2gpOworCQlsaXN0ZW5DaGFubmVsc0hhc2ggPSBOVUxM OworCX0KKworCS8qIE5vdyByZW1vdmUgZnJvbSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoICov CisJaWYgKGNoYW5uZWxIYXNoID09IE5VTEwpCisJCXJldHVybjsKKworCWRzaGFzaF9zZXFf aW5pdCgmc3RhdHVzLCBjaGFubmVsSGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRz aGFzaF9zZXFfbmV4dCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRyeS0+a2V5 LmRib2lkID09IE15RGF0YWJhc2VJZCkKKwkJeworCQkJTGlzdGVuZXJFbnRyeSAqbGlzdGVu ZXJzOworCQkJaW50CQkJaTsKKworCQkJbGlzdGVuZXJzID0gKExpc3RlbmVyRW50cnkgKikg ZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCQkJCSAgZW50cnktPmxp c3RlbmVyc0FycmF5KTsKKworCQkJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5l cnM7IGkrKykKKwkJCXsKKwkJCQlpZiAobGlzdGVuZXJzW2ldLnByb2NObyA9PSBNeVByb2NO dW1iZXIpCisJCQkJeworCQkJCQllbnRyeS0+bnVtTGlzdGVuZXJzLS07CisJCQkJCWlmIChp IDwgZW50cnktPm51bUxpc3RlbmVycykKKwkJCQkJCW1lbW1vdmUoJmxpc3RlbmVyc1tpXSwg Jmxpc3RlbmVyc1tpICsgMV0sCisJCQkJCQkJCXNpemVvZihMaXN0ZW5lckVudHJ5KSAqIChl bnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkpOworCisJCQkJCWlmIChlbnRyeS0+bnVtTGlzdGVu ZXJzID09IDApCisJCQkJCXsKKwkJCQkJCWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVudHJ5LT5s aXN0ZW5lcnNBcnJheSk7CisJCQkJCQlkc2hhc2hfZGVsZXRlX2N1cnJlbnQoJnN0YXR1cyk7 CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWRzaGFzaF9z ZXFfdGVybSgmc3RhdHVzKTsKIH0KIAogLyoKICAqIFRlc3Qgd2hldGhlciB3ZSBhcmUgYWN0 aXZlbHkgbGlzdGVuaW5nIG9uIHRoZSBnaXZlbiBjaGFubmVsIG5hbWUuCiAgKgogICogTm90 ZTogdGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZXZlcnkgbm90aWZpY2F0aW9uIGZv dW5kIGluIHRoZSBxdWV1ZS4KLSAqIFBlcmhhcHMgaXQgaXMgd29ydGggZnVydGhlciBvcHRp bWl6YXRpb24sIGVnIGNvbnZlcnQgdGhlIGxpc3QgdG8gYSBzb3J0ZWQKLSAqIGFycmF5IHNv IHdlIGNhbiBiaW5hcnktc2VhcmNoIGl0LiAgSW4gcHJhY3RpY2UgdGhlIGxpc3QgaXMgbGlr ZWx5IHRvIGJlCi0gKiBmYWlybHkgc2hvcnQsIHRob3VnaC4KICAqLwogc3RhdGljIGJvb2wK IElzTGlzdGVuaW5nT24oY29uc3QgY2hhciAqY2hhbm5lbCkKIHsKLQlMaXN0Q2VsbCAgICpw OworCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOwog Ci0JZm9yZWFjaChwLCBsaXN0ZW5DaGFubmVscykKLQl7Ci0JCWNoYXIJICAgKmxjaGFuID0g KGNoYXIgKikgbGZpcnN0KHApOwotCi0JCWlmIChzdHJjbXAobGNoYW4sIGNoYW5uZWwpID09 IDApCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiAoaGFz aF9zZWFyY2gobGlzdGVuQ2hhbm5lbHNIYXNoLCBjaGFubmVsLCBIQVNIX0ZJTkQsIE5VTEwp ICE9IE5VTEwpOwogfQogCiAvKgpAQCAtMTIyOSw3ICsxNjY3LDcgQEAgSXNMaXN0ZW5pbmdP bihjb25zdCBjaGFyICpjaGFubmVsKQogc3RhdGljIHZvaWQKIGFzeW5jUXVldWVVbnJlZ2lz dGVyKHZvaWQpCiB7Ci0JQXNzZXJ0KGxpc3RlbkNoYW5uZWxzID09IE5JTCk7CS8qIGVsc2Ug Y2FsbGVyIGVycm9yICovCisJQXNzZXJ0KGxpc3RlbkNoYW5uZWxzSGFzaCA9PSBOVUxMIHx8 IGhhc2hfZ2V0X251bV9lbnRyaWVzKGxpc3RlbkNoYW5uZWxzSGFzaCkgPT0gMCk7CS8qIGVs c2UgY2FsbGVyIGVycm9yICovCiAKIAlpZiAoIWFtUmVnaXN0ZXJlZExpc3RlbmVyKQkvKiBu b3RoaW5nIHRvIGRvICovCiAJCXJldHVybjsKQEAgLTEyNDEsNiArMTY3OSw5IEBAIGFzeW5j UXVldWVVbnJlZ2lzdGVyKHZvaWQpCiAJLyogTWFyayBvdXIgZW50cnkgYXMgaW52YWxpZCAq LwogCVFVRVVFX0JBQ0tFTkRfUElEKE15UHJvY051bWJlcikgPSBJbnZhbGlkUGlkOwogCVFV RVVFX0JBQ0tFTkRfREJPSUQoTXlQcm9jTnVtYmVyKSA9IEludmFsaWRPaWQ7CisJUVVFVUVf QkFDS0VORF9XQUtFVVBfUEVORElORyhNeVByb2NOdW1iZXIpID0gZmFsc2U7CisJUVVFVUVf QkFDS0VORF9JU19BRFZBTkNJTkcoTXlQcm9jTnVtYmVyKSA9IGZhbHNlOworCVNFVF9RVUVV RV9QT1MoUVVFVUVfQkFDS0VORF9BRFZBTkNJTkdfUE9TKE15UHJvY051bWJlciksIDAsIDAp OwogCS8qIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLwogCWlmIChRVUVVRV9GSVJT VF9MSVNURU5FUiA9PSBNeVByb2NOdW1iZXIpCiAJCVFVRVVFX0ZJUlNUX0xJU1RFTkVSID0g UVVFVUVfTkVYVF9MSVNURU5FUihNeVByb2NOdW1iZXIpOwpAQCAtMTU2NSwxMiArMjAwNiwy MSBAQCBhc3luY1F1ZXVlRmlsbFdhcm5pbmcodm9pZCkKIC8qCiAgKiBTZW5kIHNpZ25hbHMg dG8gbGlzdGVuaW5nIGJhY2tlbmRzLgogICoKLSAqIE5vcm1hbGx5IHdlIHNpZ25hbCBvbmx5 IGJhY2tlbmRzIGluIG91ciBvd24gZGF0YWJhc2UsIHNpbmNlIG9ubHkgdGhvc2UKLSAqIGJh Y2tlbmRzIGNvdWxkIGJlIGludGVyZXN0ZWQgaW4gbm90aWZpZXMgd2Ugc2VuZC4gIEhvd2V2 ZXIsIGlmIHRoZXJlJ3MKLSAqIG5vdGlmeSB0cmFmZmljIGluIG91ciBkYXRhYmFzZSBidXQg bm8gdHJhZmZpYyBpbiBhbm90aGVyIGRhdGFiYXNlIHRoYXQKLSAqIGRvZXMgaGF2ZSBsaXN0 ZW5lcihzKSwgdGhvc2UgbGlzdGVuZXJzIHdpbGwgZmFsbCBmdXJ0aGVyIGFuZCBmdXJ0aGVy Ci0gKiBiZWhpbmQuICBXYWtlbiB0aGVtIGFueXdheSBpZiB0aGV5J3JlIGZhciBlbm91Z2gg YmVoaW5kLCBzbyB0aGF0IHRoZXknbGwKLSAqIGFkdmFuY2UgdGhlaXIgcXVldWUgcG9zaXRp b24gcG9pbnRlcnMsIGFsbG93aW5nIHRoZSBnbG9iYWwgdGFpbCB0byBhZHZhbmNlLgorICog Tm9ybWFsbHkgd2Ugc2lnbmFsIG9ubHkgYmFja2VuZHMgaW4gb3VyIG93biBkYXRhYmFzZSwg dGhhdCBhcmUKKyAqIGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgd2l0aCBwZW5kaW5nIG5v dGlmaWVzLCBzaW5jZSBvbmx5IHRob3NlCisgKiBiYWNrZW5kcyBhcmUgaW50ZXJlc3RlZCBp biBub3RpZmllcyB3ZSBzZW5kLgorICoKKyAqIEJhY2tlbmRzIHRoYXQgYXJlIG5vdCBpbnRl cmVzdGVkIGluIG91ciBub3RpZmllcywgdGhhdCBhcmUga25vd24KKyAqIHRvIHN0aWxsIGJl IHBvc2l0aW9uZWQgYXQgdGhlIG9sZCBxdWV1ZSBoZWFkLCBvciBhbnl3aGVyZSBpbiB0aGUK KyAqIHF1ZXVlIHJlZ2lvbiB3ZSBqdXN0IHdyb3RlLCBjYW4gYmUgc2FmZWx5IGFkdmFuY2Vk IGRpcmVjdGx5IHRvIHRoZQorICogbmV3IGhlYWQsIHNpbmNlIHRoYXQgcmVnaW9uIGlzIGtu b3duIHRvIGNvbnRhaW4gb25seSBvdXIgb3duCisgKiBub3RpZmljYXRpb25zLiAgVGhpcyBh dm9pZHMgdW5uZWNlc3Nhcnkgd2FrZXVwcyB3aGVuIHRoZXJlIGlzCisgKiBub3RoaW5nIG9m IGludGVyZXN0IHRvIHRoZW0uCisgKgorICogQmFja2VuZHMgdGhhdCBhcmUgbm90IGludGVy ZXN0ZWQgaW4gb3VyIG5vdGlmaWVzLCB0aGF0IGFyZSBhZHZhbmNpbmcKKyAqIHRvIGEgdGFy Z2V0IHBvc2l0aW9uIGJlZm9yZSB0aGUgbmV3IHF1ZXVlIGhlYWQsIG9yIHRoYXQgYXJlIG5v dAorICogYWR2YW5jaW5nIGFuZCBhcmUgc3RhdGlvbmFyeSBhdCBhIHBvc2l0aW9uIGJlZm9y ZSB0aGUgb2xkIHF1ZXVlIGhlYWQKKyAqIG5lZWRzIHRvIGJlIHNpZ25hbGVkIHNpbmNlIG5v dGlmaWNhdGlvbnMgY291bGQgb3RoZXJ3aXNlIGJlIGRlbGF5ZWQuCiAgKgogICogU2luY2Ug d2Uga25vdyB0aGUgUHJvY051bWJlciBhbmQgdGhlIFBpZCB0aGUgc2lnbmFsaW5nIGlzIHF1 aXRlIGNoZWFwLgogICoKQEAgLTE1ODAsNjAgKzIwMzAsMTA2IEBAIGFzeW5jUXVldWVGaWxs V2FybmluZyh2b2lkKQogc3RhdGljIHZvaWQKIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiB7Ci0J aW50MzIJICAgKnBpZHM7Ci0JUHJvY051bWJlciAqcHJvY25vczsKIAlpbnQJCQljb3VudDsK KwlMaXN0Q2VsbCAgICpsYzsKIAotCS8qCi0JICogSWRlbnRpZnkgYmFja2VuZHMgdGhhdCB3 ZSBuZWVkIHRvIHNpZ25hbC4gIFdlIGRvbid0IHdhbnQgdG8gc2VuZAotCSAqIHNpZ25hbHMg d2hpbGUgaG9sZGluZyB0aGUgTm90aWZ5UXVldWVMb2NrLCBzbyB0aGlzIGxvb3AganVzdCBi dWlsZHMgYQotCSAqIGxpc3Qgb2YgdGFyZ2V0IFBJRHMuCi0JICoKLQkgKiBYWFggaW4gcHJp bmNpcGxlIHRoZXNlIHBhbGxvY3MgY291bGQgZmFpbCwgd2hpY2ggd291bGQgYmUgYmFkLiBN YXliZQotCSAqIHByZWFsbG9jYXRlIHRoZSBhcnJheXM/ICBUaGV5J3JlIG5vdCB0aGF0IGxh cmdlLCB0aG91Z2guCi0JICovCi0JcGlkcyA9IChpbnQzMiAqKSBwYWxsb2MoTWF4QmFja2Vu ZHMgKiBzaXplb2YoaW50MzIpKTsKLQlwcm9jbm9zID0gKFByb2NOdW1iZXIgKikgcGFsbG9j KE1heEJhY2tlbmRzICogc2l6ZW9mKFByb2NOdW1iZXIpKTsKKwlBc3NlcnQoc2lnbmFsUGlk cyAhPSBOVUxMICYmIHNpZ25hbFByb2Nub3MgIT0gTlVMTCk7CiAJY291bnQgPSAwOwogCiAJ TFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JZm9yIChQ cm9jTnVtYmVyIGkgPSBRVUVVRV9GSVJTVF9MSVNURU5FUjsgaSAhPSBJTlZBTElEX1BST0Nf TlVNQkVSOyBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKKwlmb3JlYWNoKGxjLCBwZW5k aW5nTm90aWZ5Q2hhbm5lbHMpCiAJewotCQlpbnQzMgkJcGlkID0gUVVFVUVfQkFDS0VORF9Q SUQoaSk7Ci0JCVF1ZXVlUG9zaXRpb24gcG9zOworCQljaGFyCSAgICpjaGFubmVsID0gKGNo YXIgKikgbGZpcnN0KGxjKTsKKwkJQ2hhbm5lbEVudHJ5ICplbnRyeSA9IE5VTEw7CisJCUxp c3RlbmVyRW50cnkgKmxpc3RlbmVyczsKIAotCQlBc3NlcnQocGlkICE9IEludmFsaWRQaWQp OwotCQlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsKLQkJaWYgKFFVRVVFX0JBQ0tFTkRf REJPSUQoaSkgPT0gTXlEYXRhYmFzZUlkKQorCQlpZiAoY2hhbm5lbEhhc2ggIT0gTlVMTCkK IAkJewotCQkJLyoKLQkJCSAqIEFsd2F5cyBzaWduYWwgbGlzdGVuZXJzIGluIG91ciBvd24g ZGF0YWJhc2UsIHVubGVzcyB0aGV5J3JlCi0JCQkgKiBhbHJlYWR5IGNhdWdodCB1cCAodW5s aWtlbHksIGJ1dCBwb3NzaWJsZSkuCi0JCQkgKi8KKwkJCUNoYW5uZWxIYXNoS2V5IGtleTsK KworCQkJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5l bCk7CisJCQllbnRyeSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5LCBmYWxzZSk7 CisJCX0KKworCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWxpc3Rl bmVycyA9IChMaXN0ZW5lckVudHJ5ICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAor CQkJCQkJCQkJCQkJCSAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQlmb3IgKGludCBq ID0gMDsgaiA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGorKykKKwkJeworCQkJUHJvY051bWJl cglpOworCQkJaW50MzIJCXBpZDsKKwkJCVF1ZXVlUG9zaXRpb24gcG9zOworCisJCQlpZiAo IWxpc3RlbmVyc1tqXS5jdXJyZW50KQorCQkJCWNvbnRpbnVlOworCisJCQlpID0gbGlzdGVu ZXJzW2pdLnByb2NObzsKKworCQkJaWYgKFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkco aSkpCisJCQkJY29udGludWU7CisKKwkJCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOwor CQkJcGlkID0gUVVFVUVfQkFDS0VORF9QSUQoaSk7CisKKwkJCS8qIFNraXAgaWYgY2F1Z2h0 IHVwICovCiAJCQlpZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgUVVFVUVfSEVBRCkpCiAJCQkJ Y29udGludWU7CisKKwkJCUFzc2VydChwaWQgIT0gSW52YWxpZFBpZCk7CisKKwkJCVFVRVVF X0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOworCQkJc2lnbmFsUGlkc1tjb3Vu dF0gPSBwaWQ7CisJCQlzaWduYWxQcm9jbm9zW2NvdW50XSA9IGk7CisJCQljb3VudCsrOwog CQl9Ci0JCWVsc2UKKworCQlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRy eSk7CisJfQorCisJaWYgKHBlbmRpbmdOb3RpZmllcyAhPSBOVUxMKQorCXsKKwkJZm9yIChQ cm9jTnVtYmVyIGkgPSBRVUVVRV9GSVJTVF9MSVNURU5FUjsKKwkJCSBpICE9IElOVkFMSURf UFJPQ19OVU1CRVI7CisJCQkgaSA9IFFVRVVFX05FWFRfTElTVEVORVIoaSkpCiAJCXsKLQkJ CS8qCi0JCQkgKiBMaXN0ZW5lcnMgaW4gb3RoZXIgZGF0YWJhc2VzIHNob3VsZCBiZSBzaWdu YWxlZCBvbmx5IGlmIHRoZXkKLQkJCSAqIGFyZSBmYXIgYmVoaW5kLgotCQkJICovCi0JCQlp ZiAoYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFVRVVFX0hFQUQpLAotCQkJ CQkJCQkgICBRVUVVRV9QT1NfUEFHRShwb3MpKSA8IFFVRVVFX0NMRUFOVVBfREVMQVkpCisJ CQlRdWV1ZVBvc2l0aW9uIHBvczsKKwkJCWludDMyCQlwaWQ7CisKKwkJCWlmIChRVUVVRV9C QUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpKQogCQkJCWNvbnRpbnVlOworCisJCQlwb3MgPSBR VUVVRV9CQUNLRU5EX1BPUyhpKTsKKwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOwor CisJCQlpZiAoUVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoaSkgPworCQkJCVFVRVVFX1BP U19QUkVDRURFUyhRVUVVRV9CQUNLRU5EX0FEVkFOQ0lOR19QT1MoaSksIHF1ZXVlSGVhZEFm dGVyV3JpdGUpIDoKKwkJCQlRVUVVRV9QT1NfUFJFQ0VERVMocG9zLCBxdWV1ZUhlYWRCZWZv cmVXcml0ZSkpCisJCQl7CisJCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJ CVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOworCQkJCXNpZ25hbFBp ZHNbY291bnRdID0gcGlkOworCQkJCXNpZ25hbFByb2Nub3NbY291bnRdID0gaTsKKwkJCQlj b3VudCsrOworCQkJfQorCQkJZWxzZSBpZiAoIVFVRVVFX0JBQ0tFTkRfSVNfQURWQU5DSU5H KGkpICYmCisJCQkJCSBRVUVVRV9QT1NfUFJFQ0VERVMocG9zLCBxdWV1ZUhlYWRBZnRlcldy aXRlKSkKKwkJCXsKKwkJCQlBc3NlcnQoIVFVRVVFX1BPU19QUkVDRURFUyhwb3MsIHF1ZXVl SGVhZEJlZm9yZVdyaXRlKSk7CisKKwkJCQlRVUVVRV9CQUNLRU5EX1BPUyhpKSA9IHF1ZXVl SGVhZEFmdGVyV3JpdGU7CisJCQl9CiAJCX0KLQkJLyogT0ssIG5lZWQgdG8gc2lnbmFsIHRo aXMgb25lICovCi0JCXBpZHNbY291bnRdID0gcGlkOwotCQlwcm9jbm9zW2NvdW50XSA9IGk7 Ci0JCWNvdW50Kys7CiAJfQogCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKIAog CS8qIE5vdyBzZW5kIHNpZ25hbHMgKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp KyspCiAJewotCQlpbnQzMgkJcGlkID0gcGlkc1tpXTsKKwkJaW50MzIJCXBpZCA9IHNpZ25h bFBpZHNbaV07CiAKIAkJLyoKIAkJICogSWYgd2UgYXJlIHNpZ25hbGluZyBvdXIgb3duIHBy b2Nlc3MsIG5vIG5lZWQgdG8gaW52b2x2ZSB0aGUga2VybmVsOwpAQCAtMTY1MSwxMiArMjE0 Nyw5IEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJCSAqIE5vdGlmeVF1ZXVlTG9jazsgd2hp Y2ggaXMgdW5saWtlbHkgYnV0IGNlcnRhaW5seSBwb3NzaWJsZS4gU28gd2UKIAkJICoganVz dCBsb2cgYSBsb3ctbGV2ZWwgZGVidWcgbWVzc2FnZSBpZiBpdCBoYXBwZW5zLgogCQkgKi8K LQkJaWYgKFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBULCBw cm9jbm9zW2ldKSA8IDApCisJCWlmIChTZW5kUHJvY1NpZ25hbChwaWQsIFBST0NTSUdfTk9U SUZZX0lOVEVSUlVQVCwgc2lnbmFsUHJvY25vc1tpXSkgPCAwKQogCQkJZWxvZyhERUJVRzMs ICJjb3VsZCBub3Qgc2lnbmFsIGJhY2tlbmQgd2l0aCBQSUQgJWQ6ICVtIiwgcGlkKTsKIAl9 Ci0KLQlwZnJlZShwaWRzKTsKLQlwZnJlZShwcm9jbm9zKTsKIH0KIAogLyoKQEAgLTE2NjQs MTggKzIxNTcsNzEgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKICAqCiAgKglUaGlzIGlzIGNh bGxlZCBhdCB0cmFuc2FjdGlvbiBhYm9ydC4KICAqCi0gKglHZXRzIHJpZCBvZiBwZW5kaW5n IGFjdGlvbnMgYW5kIG91dGJvdW5kIG5vdGlmaWVzIHRoYXQgd2Ugd291bGQgaGF2ZQotICoJ ZXhlY3V0ZWQgaWYgdGhlIHRyYW5zYWN0aW9uIGdvdCBjb21taXR0ZWQuCisgKglSZXZlcnQg YW55IHN0YWdlZCBsaXN0ZW4vdW5saXN0ZW4gY2hhbmdlcyBhbmQgY2xlYW4gdXAgdHJhbnNh Y3Rpb24gc3RhdGUuCiAgKi8KIHZvaWQKIEF0QWJvcnRfTm90aWZ5KHZvaWQpCiB7CiAJLyoK LQkgKiBJZiB3ZSBMSVNURU4gYnV0IHRoZW4gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiBh ZnRlciBQcmVDb21taXRfTm90aWZ5LAotCSAqIHdlIGhhdmUgcmVnaXN0ZXJlZCBhcyBhIGxp c3RlbmVyIGJ1dCBoYXZlIG5vdCBtYWRlIGFueSBlbnRyeSBpbgotCSAqIGxpc3RlbkNoYW5u ZWxzLiAgSW4gdGhhdCBjYXNlLCBkZXJlZ2lzdGVyIGFnYWluLgorCSAqIFJldmVydCBzdGFn ZWQgbGlzdGVuL3VubGlzdGVuIGNoYW5nZXMuICBGb3IgbmV3IExJU1RFTnMgKGN1cnJlbnQ9 ZmFsc2UpLAorCSAqIHJlbW92ZSBmcm9tIGJvdGggbG9jYWwgYW5kIHNoYXJlZCBoYXNoLiAg Rm9yIFVOTElTVEVOcyAoY3VycmVudD10cnVlKSwKKwkgKiBqdXN0IHJldmVydCBzdGFnZWQg YmFjayB0byBjdXJyZW50LgogCSAqLwotCWlmIChhbVJlZ2lzdGVyZWRMaXN0ZW5lciAmJiBs aXN0ZW5DaGFubmVscyA9PSBOSUwpCisJaWYgKHBlbmRpbmdMaXN0ZW5DaGFubmVscyAhPSBO SUwgJiYgY2hhbm5lbEhhc2ggIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJ CWZvcmVhY2gobGMsIHBlbmRpbmdMaXN0ZW5DaGFubmVscykKKwkJeworCQkJY2hhcgkgICAq Y2hhbm5lbCA9IChjaGFyICopIGxmaXJzdChsYyk7CisJCQlDaGFubmVsSGFzaEtleSBrZXk7 CisJCQlDaGFubmVsRW50cnkgKmVudHJ5OworCisJCQlDaGFubmVsSGFzaFByZXBhcmVLZXko JmtleSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKwkJCWVudHJ5ID0gZHNoYXNoX2ZpbmQo Y2hhbm5lbEhhc2gsICZrZXksIHRydWUpOworCQkJaWYgKGVudHJ5ICE9IE5VTEwpCisJCQl7 CisJCQkJTGlzdGVuZXJFbnRyeSAqbGlzdGVuZXJzID0gKExpc3RlbmVyRW50cnkgKikgZHNh X2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCQkJCQkJCQkJIGVudHJ5LT5s aXN0ZW5lcnNBcnJheSk7CisKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJ5LT5udW1M aXN0ZW5lcnM7IGkrKykKKwkJCQl7CisJCQkJCWlmIChsaXN0ZW5lcnNbaV0ucHJvY05vID09 IE15UHJvY051bWJlcikKKwkJCQkJeworCQkJCQkJLyogUmV2ZXJ0IHN0YWdlZCB2YWx1ZSB0 byBjdXJyZW50ICovCisJCQkJCQlsaXN0ZW5lcnNbaV0uc3RhZ2VkID0gbGlzdGVuZXJzW2ld LmN1cnJlbnQ7CisKKwkJCQkJCWlmICghbGlzdGVuZXJzW2ldLmN1cnJlbnQpCisJCQkJCQl7 CisJCQkJCQkJLyogTmV3IExJU1RFTiBiZWluZyBhYm9ydGVkOiByZW1vdmUgZnJvbSBsb2Nh bCBhbmQgc2hhcmVkICovCisJCQkJCQkJaWYgKGxpc3RlbkNoYW5uZWxzSGFzaCAhPSBOVUxM KQorCQkJCQkJCQkodm9pZCkgaGFzaF9zZWFyY2gobGlzdGVuQ2hhbm5lbHNIYXNoLCBjaGFu bmVsLAorCQkJCQkJCQkJCQkJICAgSEFTSF9SRU1PVkUsIE5VTEwpOworCisJCQkJCQkJZW50 cnktPm51bUxpc3RlbmVycy0tOworCQkJCQkJCWlmIChpIDwgZW50cnktPm51bUxpc3RlbmVy cykKKwkJCQkJCQkJbWVtbW92ZSgmbGlzdGVuZXJzW2ldLCAmbGlzdGVuZXJzW2kgKyAxXSwK KwkJCQkJCQkJCQlzaXplb2YoTGlzdGVuZXJFbnRyeSkgKiAoZW50cnktPm51bUxpc3RlbmVy cyAtIGkpKTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCisJCQkJ aWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0gMCkKKwkJCQl7CisJCQkJCWlmIChEc2FQb2lu dGVySXNWYWxpZChlbnRyeS0+bGlzdGVuZXJzQXJyYXkpKQorCQkJCQkJZHNhX2ZyZWUoY2hh bm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKwkJCQkJZHNoYXNoX2RlbGV0ZV9l bnRyeShjaGFubmVsSGFzaCwgZW50cnkpOworCQkJCX0KKwkJCQllbHNlCisJCQkJCWRzaGFz aF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCX0KKwkJfQorCX0KKwor CisJaWYgKGFtUmVnaXN0ZXJlZExpc3RlbmVyICYmCisJCShsaXN0ZW5DaGFubmVsc0hhc2gg PT0gTlVMTCB8fCBoYXNoX2dldF9udW1fZW50cmllcyhsaXN0ZW5DaGFubmVsc0hhc2gpID09 IDApKQogCQlhc3luY1F1ZXVlVW5yZWdpc3RlcigpOwogCiAJLyogQW5kIGNsZWFuIHVwICov CkBAIC0xODU0LDIwICsyNDAwLDI5IEBAIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0aW9u cyh2b2lkKQogCVF1ZXVlUG9zaXRpb24gaGVhZDsKIAlTbmFwc2hvdAlzbmFwc2hvdDsKIAot CS8qIEZldGNoIGN1cnJlbnQgc3RhdGUgKi8KKwkvKgorCSAqIEZldGNoIGN1cnJlbnQgc3Rh dGUsIGluZGljYXRlIHRvIG90aGVycyB0aGF0IHdlIGhhdmUgd29rZW4gdXAsIGFuZCB0aGF0 CisJICogd2Ugbm93IHdpbGwgYmUgYWR2YW5jaW5nIG91ciBwb3NpdGlvbi4KKwkgKi8KIAlM V0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfU0hBUkVEKTsKIAkvKiBBc3NlcnQg Y2hlY2tzIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHN0YXRlIGVudHJ5ICovCiAJQXNzZXJ0KE15 UHJvY1BpZCA9PSBRVUVVRV9CQUNLRU5EX1BJRChNeVByb2NOdW1iZXIpKTsKKwlRVUVVRV9C QUNLRU5EX1dBS0VVUF9QRU5ESU5HKE15UHJvY051bWJlcikgPSBmYWxzZTsKKwloZWFkID0g UVVFVUVfSEVBRDsKIAlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpOwot CWhlYWQgPSBRVUVVRV9IRUFEOwotCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsK IAogCWlmIChRVUVVRV9QT1NfRVFVQUwocG9zLCBoZWFkKSkKIAl7CiAJCS8qIE5vdGhpbmcg dG8gZG8sIHdlIGhhdmUgcmVhZCBhbGwgbm90aWZpY2F0aW9ucyBhbHJlYWR5LiAqLworCQlM V0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAJCXJldHVybjsKIAl9CiAKKwlRVUVV RV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhNeVByb2NOdW1iZXIpID0gdHJ1ZTsKKwlRVUVVRV9C QUNLRU5EX0FEVkFOQ0lOR19QT1MoTXlQcm9jTnVtYmVyKSA9IGhlYWQ7CisKKwlMV0xvY2tS ZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CisKIAkvKi0tLS0tLS0tLS0KIAkgKiBHZXQgc25h cHNob3Qgd2UnbGwgdXNlIHRvIGRlY2lkZSB3aGljaCB4YWN0cyBhcmUgc3RpbGwgaW4gcHJv Z3Jlc3MuCiAJICogVGhpcyBpcyB0cmlja2llciB0aGFuIGl0IG1pZ2h0IHNlZW0sIGJlY2F1 c2Ugb2YgcmFjZSBjb25kaXRpb25zLgpAQCAtMTk1NCw2ICsyNTA5LDggQEAgYXN5bmNRdWV1 ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAKIAkJLyogVXBkYXRlIHNoYXJlZCBzdGF0 ZSAqLwogCQlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfU0hBUkVEKTsKKwor CQlRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhNeVByb2NOdW1iZXIpID0gZmFsc2U7CiAJ CVFVRVVFX0JBQ0tFTkRfUE9TKE15UHJvY051bWJlcikgPSBwb3M7CiAJCUxXTG9ja1JlbGVh c2UoTm90aWZ5UXVldWVMb2NrKTsKIApAQCAtMjA1MSw3ICsyNjA4LDcgQEAgYXN5bmNRdWV1 ZVByb2Nlc3NQYWdlRW50cmllcyhRdWV1ZVBvc2l0aW9uICpjdXJyZW50LAogCQkJICogb3Zl ciBpdCBvbiB0aGUgZmlyc3QgTElTVEVOIGluIGEgc2Vzc2lvbiwgYW5kIG5vdCBnZXQgc3R1 Y2sgb24KIAkJCSAqIGl0IGluZGVmaW5pdGVseS4KIAkJCSAqLwotCQkJaWYgKGxpc3RlbkNo YW5uZWxzID09IE5JTCkKKwkJCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggPT0gTlVMTCB8fCBo YXNoX2dldF9udW1fZW50cmllcyhsaXN0ZW5DaGFubmVsc0hhc2gpID09IDApCiAJCQkJY29u dGludWU7CiAKIAkJCWlmIChUcmFuc2FjdGlvbklkRGlkQ29tbWl0KHFlLT54aWQpKQpAQCAt MjMwNiw3ICsyODYzLDcgQEAgUHJvY2Vzc0luY29taW5nTm90aWZ5KGJvb2wgZmx1c2gpCiAJ bm90aWZ5SW50ZXJydXB0UGVuZGluZyA9IGZhbHNlOwogCiAJLyogRG8gbm90aGluZyBlbHNl IGlmIHdlIGFyZW4ndCBhY3RpdmVseSBsaXN0ZW5pbmcgKi8KLQlpZiAobGlzdGVuQ2hhbm5l bHMgPT0gTklMKQorCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggPT0gTlVMTCB8fCBoYXNoX2dl dF9udW1fZW50cmllcyhsaXN0ZW5DaGFubmVsc0hhc2gpID09IDApCiAJCXJldHVybjsKIAog CWlmIChUcmFjZV9ub3RpZnkpCkBAIC0yNDEwLDEzICsyOTY3LDE1IEBAIEFkZEV2ZW50VG9Q ZW5kaW5nTm90aWZpZXMoTm90aWZpY2F0aW9uICpuKQogewogCUFzc2VydChwZW5kaW5nTm90 aWZpZXMtPmV2ZW50cyAhPSBOSUwpOwogCi0JLyogQ3JlYXRlIHRoZSBoYXNoIHRhYmxlIGlm IGl0J3MgdGltZSB0byAqLworCS8qIENyZWF0ZSB0aGUgaGFzaCB0YWJsZXMgaWYgaXQncyB0 aW1lIHRvICovCiAJaWYgKGxpc3RfbGVuZ3RoKHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzKSA+ PSBNSU5fSEFTSEFCTEVfTk9USUZJRVMgJiYKIAkJcGVuZGluZ05vdGlmaWVzLT5oYXNodGFi ID09IE5VTEwpCiAJewogCQlIQVNIQ1RMCQloYXNoX2N0bDsKIAkJTGlzdENlbGwgICAqbDsK IAorCQlBc3NlcnQocGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYiA9PSBOVUxMKTsK KwogCQkvKiBDcmVhdGUgdGhlIGhhc2ggdGFibGUgKi8KIAkJaGFzaF9jdGwua2V5c2l6ZSA9 IHNpemVvZihOb3RpZmljYXRpb24gKik7CiAJCWhhc2hfY3RsLmVudHJ5c2l6ZSA9IHNpemVv ZihzdHJ1Y3QgTm90aWZpY2F0aW9uSGFzaCk7CkBAIC0yNDI5LDEwICsyOTg4LDIyIEBAIEFk ZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMoTm90aWZpY2F0aW9uICpuKQogCQkJCQkJJmhhc2hf Y3RsLAogCQkJCQkJSEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hfQ09NUEFSRSB8 IEhBU0hfQ09OVEVYVCk7CiAKKwkJLyogQ3JlYXRlIHRoZSBjaGFubmVsIGhhc2ggdGFibGUg Ki8KKwkJbWVtc2V0KCZoYXNoX2N0bCwgMCwgc2l6ZW9mKGhhc2hfY3RsKSk7CisJCWhhc2hf Y3RsLmtleXNpemUgPSBOQU1FREFUQUxFTjsKKwkJaGFzaF9jdGwuZW50cnlzaXplID0gc2l6 ZW9mKHN0cnVjdCBDaGFubmVsSGFzaCk7CisJCWhhc2hfY3RsLmhjeHQgPSBDdXJUcmFuc2Fj dGlvbkNvbnRleHQ7CisJCXBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgPQorCQkJ aGFzaF9jcmVhdGUoIlBlbmRpbmcgTm90aWZ5IENoYW5uZWxzIiwKKwkJCQkJCTY0TCwKKwkJ CQkJCSZoYXNoX2N0bCwKKwkJCQkJCUhBU0hfRUxFTSB8IEhBU0hfU1RSSU5HUyB8IEhBU0hf Q09OVEVYVCk7CisKIAkJLyogSW5zZXJ0IGFsbCB0aGUgYWxyZWFkeS1leGlzdGluZyBldmVu dHMgKi8KIAkJZm9yZWFjaChsLCBwZW5kaW5nTm90aWZpZXMtPmV2ZW50cykKIAkJewogCQkJ Tm90aWZpY2F0aW9uICpvbGRuID0gKE5vdGlmaWNhdGlvbiAqKSBsZmlyc3QobCk7CisJCQlj aGFyCSAgICpjaGFubmVsID0gb2xkbi0+ZGF0YTsKIAkJCWJvb2wJCWZvdW5kOwogCiAJCQko dm9pZCkgaGFzaF9zZWFyY2gocGVuZGluZ05vdGlmaWVzLT5oYXNodGFiLApAQCAtMjQ0MCwy MiArMzAxMSw0MiBAQCBBZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAq bikKIAkJCQkJCQkgICBIQVNIX0VOVEVSLAogCQkJCQkJCSAgICZmb3VuZCk7CiAJCQlBc3Nl cnQoIWZvdW5kKTsKKworCQkJLyogSW5zZXJ0IGNoYW5uZWwgaW50byBjaGFubmVsSGFzaHRh YiAqLworCQkJKHZvaWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhh c2h0YWIsCisJCQkJCQkJICAgY2hhbm5lbCwKKwkJCQkJCQkgICBIQVNIX0VOVEVSLAorCQkJ CQkJCSAgICZmb3VuZCk7CisJCQkvKiBmb3VuZCBtYXkgYmUgdHJ1ZSBpZiBtdWx0aXBsZSBl dmVudHMgb24gc2FtZSBjaGFubmVsICovCiAJCX0KIAl9CiAKIAkvKiBBZGQgbmV3IGV2ZW50 IHRvIHRoZSBsaXN0LCBpbiBvcmRlciAqLwogCXBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzID0g bGFwcGVuZChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cywgbik7CiAKLQkvKiBBZGQgZXZlbnQg dG8gdGhlIGhhc2ggdGFibGUgaWYgbmVlZGVkICovCisJLyogQWRkIGV2ZW50IHRvIHRoZSBo YXNoIHRhYmxlcyBpZiBuZWVkZWQgKi8KIAlpZiAocGVuZGluZ05vdGlmaWVzLT5oYXNodGFi ICE9IE5VTEwpCiAJewogCQlib29sCQlmb3VuZDsKIAorCQlBc3NlcnQocGVuZGluZ05vdGlm aWVzLT5jaGFubmVsSGFzaHRhYiAhPSBOVUxMKTsKKwogCQkodm9pZCkgaGFzaF9zZWFyY2go cGVuZGluZ05vdGlmaWVzLT5oYXNodGFiLAogCQkJCQkJICAgJm4sCiAJCQkJCQkgICBIQVNI X0VOVEVSLAogCQkJCQkJICAgJmZvdW5kKTsKIAkJQXNzZXJ0KCFmb3VuZCk7CisKKwkJLyog QWRkIGNoYW5uZWwgdG8gY2hhbm5lbEhhc2h0YWIgKi8KKwkJeworCQkJY2hhcgkgICAqY2hh bm5lbCA9IG4tPmRhdGE7CisKKwkJCSh2b2lkKSBoYXNoX3NlYXJjaChwZW5kaW5nTm90aWZp ZXMtPmNoYW5uZWxIYXNodGFiLAorCQkJCQkJCSAgIGNoYW5uZWwsCisJCQkJCQkJICAgSEFT SF9FTlRFUiwKKwkJCQkJCQkgICAmZm91bmQpOworCQkJLyogZm91bmQgbWF5IGJlIHRydWUg aWYgd2UgYWxyZWFkeSBoYXZlIGFuIGV2ZW50IG9uIHRoaXMgY2hhbm5lbCAqLworCQl9CiAJ fQogfQogCkBAIC0yNDkzLDcgKzMwODQsNyBAQCBub3RpZmljYXRpb25fbWF0Y2goY29uc3Qg dm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXplKQogCXJldHVybiAx OwkJCQkJLyogbm90IGVxdWFsICovCiB9CiAKLS8qIENsZWFyIHRoZSBwZW5kaW5nQWN0aW9u cyBhbmQgcGVuZGluZ05vdGlmaWVzIGxpc3RzLiAqLworLyogQ2xlYXIgdGhlIHBlbmRpbmdB Y3Rpb25zLCBwZW5kaW5nTm90aWZpZXMsIGFuZCBwZW5kaW5nTm90aWZ5Q2hhbm5lbHMgbGlz dHMuICovCiBzdGF0aWMgdm9pZAogQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZv aWQpCiB7CkBAIC0yNTA1LDYgKzMwOTYsOCBAQCBDbGVhclBlbmRpbmdBY3Rpb25zQW5kTm90 aWZpZXModm9pZCkKIAkgKi8KIAlwZW5kaW5nQWN0aW9ucyA9IE5VTEw7CiAJcGVuZGluZ05v dGlmaWVzID0gTlVMTDsKKwlwZW5kaW5nTm90aWZ5Q2hhbm5lbHMgPSBOSUw7CisJcGVuZGlu Z0xpc3RlbkNoYW5uZWxzID0gTklMOwogfQogCiAvKgpAQCAtMjUxNSwzICszMTA4LDE2IEBA IGNoZWNrX25vdGlmeV9idWZmZXJzKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1Nv dXJjZSBzb3VyY2UpCiB7CiAJcmV0dXJuIGNoZWNrX3NscnVfYnVmZmVycygibm90aWZ5X2J1 ZmZlcnMiLCBuZXd2YWwpOwogfQorCisKKy8qCisgKiBDaGFubmVsSGFzaFByZXBhcmVLZXkK KyAqCQlQcmVwYXJlIGEgY2hhbm5lbCBrZXkgZm9yIHVzZSBhcyBhIGhhc2gga2V5LgorICov CitzdGF0aWMgaW5saW5lIHZvaWQKK0NoYW5uZWxIYXNoUHJlcGFyZUtleShDaGFubmVsSGFz aEtleSAqa2V5LCBPaWQgZGJvaWQsIGNvbnN0IGNoYXIgKmNoYW5uZWwpCit7CisJbWVtc2V0 KGtleSwgMCwgc2l6ZW9mKENoYW5uZWxIYXNoS2V5KSk7CisJa2V5LT5kYm9pZCA9IGRib2lk OworCXN0cmxjcHkoa2V5LT5jaGFubmVsLCBjaGFubmVsLCBOQU1FREFUQUxFTik7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0 CmluZGV4IGRjZmFkYmQ1YWFlLi4zMmIwYjIxZjE4NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTM3MSw2ICszNzEs NyBAQCBTdWJ0cmFuc0J1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgc3ViLXRyYW5zYWN0 aW9uIFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE9mZnNldEJ1ZmZlcgkiV2FpdGluZyBmb3Ig SS9PIG9uIGEgbXVsdGl4YWN0IG9mZnNldCBTTFJVIGJ1ZmZlci4iCiBNdWx0aVhhY3RNZW1i ZXJCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIG11bHRpeGFjdCBtZW1iZXIgU0xSVSBi dWZmZXIuIgogTm90aWZ5QnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSA8Y29tbWFuZD5O T1RJRlk8L2NvbW1hbmQ+IG1lc3NhZ2UgU0xSVSBidWZmZXIuIgorTm90aWZ5Q2hhbm5lbEhh c2gJIldhaXRpbmcgdG8gYWNjZXNzIHRoZSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IGNo YW5uZWwgaGFzaCB0YWJsZS4iCiBTZXJpYWxCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBh IHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbiBjb25mbGljdCBTTFJVIGJ1ZmZlci4iCiBXQUxJ bnNlcnQJIldhaXRpbmcgdG8gaW5zZXJ0IFdBTCBkYXRhIGludG8gYSBtZW1vcnkgYnVmZmVy LiIKIEJ1ZmZlckNvbnRlbnQJIldhaXRpbmcgdG8gYWNjZXNzIGEgZGF0YSBwYWdlIGluIG1l bW9yeS4iCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IDUzMzM0NDUwOWU5Li4y NzdhNzhlNzk1NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0 LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTEwMiw2ICsx MDIsNyBAQCBQR19MV0xPQ0tUUkFOQ0hFKFNVQlRSQU5TX0JVRkZFUiwgU3VidHJhbnNCdWZm ZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE1VTFRJWEFDVE9GRlNFVF9CVUZGRVIsIE11bHRpWGFj dE9mZnNldEJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTVVMVElYQUNUTUVNQkVSX0JVRkZF UiwgTXVsdGlYYWN0TWVtYmVyQnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShOT1RJRllfQlVG RkVSLCBOb3RpZnlCdWZmZXIpCitQR19MV0xPQ0tUUkFOQ0hFKE5PVElGWV9DSEFOTkVMX0hB U0gsIE5vdGlmeUNoYW5uZWxIYXNoKQogUEdfTFdMT0NLVFJBTkNIRShTRVJJQUxfQlVGRkVS LCBTZXJpYWxCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKFdBTF9JTlNFUlQsIFdBTEluc2Vy dCkKIFBHX0xXTE9DS1RSQU5DSEUoQlVGRkVSX0NPTlRFTlQsIEJ1ZmZlckNvbnRlbnQpCmRp ZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDVjODhmYTkyZjRlLi45NzNkNGE0NDlm ZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQyMSw2ICs0MjEsOCBAQCBD YXRhbG9nSWRNYXBFbnRyeQogQ2F0YWxvZ0luZGV4U3RhdGUKIENoYW5nZVZhck5vZGVzX2Nh bGxiYWNrCiBDaGFuZ2VWYXJOb2Rlc19jb250ZXh0CitDaGFubmVsRW50cnkKK0NoYW5uZWxI YXNoS2V5CiBDaGVja1BvaW50CiBDaGVja1BvaW50U3RtdAogQ2hlY2twb2ludFN0YXRzRGF0 YQotLSAKMi41MC4xCgo= --d47125f30b1149908a534526362cf7ab--