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 1vMvBt-005zLw-1F for pgsql-hackers@arkaria.postgresql.org; Sat, 22 Nov 2025 21:30:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vMvBs-00Cc5z-01 for pgsql-hackers@arkaria.postgresql.org; Sat, 22 Nov 2025 21:30:44 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vMvBq-00Cc5p-1e for pgsql-hackers@lists.postgresql.org; Sat, 22 Nov 2025 21:30:43 +0000 Received: from fout-a1-smtp.messagingengine.com ([103.168.172.144]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vMvBn-000vC3-2b for pgsql-hackers@postgresql.org; Sat, 22 Nov 2025 21:30:41 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfout.phl.internal (Postfix) with ESMTP id 1F2D0EC00B3; Sat, 22 Nov 2025 16:30:39 -0500 (EST) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-05.internal (MEProxy); Sat, 22 Nov 2025 16:30:39 -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=fm3; t=1763847039; x=1763933439; bh=j2Nec8WevI VQtGGigCubh0fL8CXgGmoAlNSuYT/AFJM=; b=pRLIjkcXu7jPAmufJYotlV+vic 06KsOy4lVtNoRBOdcq8QleJBCpFanEQPT1Ap7/GRthmsT648DKgzhgiQp0lyVEFB mc7vjU+BA0MTw/NZ0HcZxD+78sZHFHAbAbxoxCghvqFYid6k1uRKDrMJsDnYMqGq EsXh7rltpncKCnnHuKIWf9IGPZcHVMSyHO2yA9gVvgMwgmebSxJr8jeTy62XMaXg 6EefiH+sLjNATN1Yc9sr7SSwXBUcHJIkilr7zBvekzIGqplLoLcN2WJTJC/u1zAr AaY+SLhCtSSdub2o6TLdgAnzz2EgyYfeMowPqrjP6Et/REGTfIJ4QIG65vgw== 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=fm3; t= 1763847039; x=1763933439; bh=j2Nec8WevIVQtGGigCubh0fL8CXgGmoAlNS uYT/AFJM=; b=RSe/Hpr8nb61lDIEediP1dbXvZod0mOJKnrqQ1zYWAsfwlfrNr8 bvH/9BahVMpjZT17J+yt7GcqbtLPxTkgiDOVV8Fpe4XU5cWCCWoES0MA4c+KsDA9 NIJiHrqYF7NCktpdgxr8ZWyxk83947sy5QgzY37IQoIS8Gz/MmI8iluxRYpGF3kS 3K8s/KJrmH5Vs/cFuSYXJ9vPMi/ooqIK3TMpDkDhbf5yh+3U8fvzCvMWEOvE95ag KozwyTmH5qDdHutMCYk9cFxCIAv/mmyeSWmOecOX52wAa6yJzXrgubzSyKp24wtM W11l5wJoYD6mQyDqXZnf1YnEF5+oUQp+/bw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvfeefledvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepfffgleffffdvhefhieegfeeije dujedvieeuveeugefgveeukeevieethefhteeinecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnh gspghrtghpthhtohepfedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtoheplhhirdgv vhgrnhdrtghhrghosehgmhgrihhlrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgrtg hkvghrshesphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepthhglhesshhsshdr phhghhdrphgrrdhush X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id A738118E006C; Sat, 22 Nov 2025 16:30:38 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Sat, 22 Nov 2025 22:30:11 +0100 From: "Joel Jacobson" To: "Tom Lane" Cc: "Chao Li" , pgsql-hackers Message-Id: <897cb48e-fa39-4ca6-a29f-ec3bb6ce99b1@app.fastmail.com> In-Reply-To: <2067239.1763670416@sss.pgh.pa.us> 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-F22FC3!4!29AE8@gmail.com> <1547585.1760645808@sss.pgh.pa.us> <14865EB6-0BF4-462B-9072-10BDAC10C0> <2067239.1763670416@sss.pgh.pa.us> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=db2ddc30d7a144ee8775b70091dbe550 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --db2ddc30d7a144ee8775b70091dbe550 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Thu, Nov 20, 2025, at 21:26, Tom Lane wrote: > I took a brief look through the v28 patch, and I'm fairly distressed > at how much new logic has been stuffed into what's effectively a > critical section. It's totally not okay for AtCommit_Notify or > anything it calls to throw an error Right, I agree. Thanks for guidance. > So I think there needs to be a serious effort made to move as > much as we possibly can of the potentially-risky stuff into > PreCommit_Notify. In particular I think we ought to create > the shared channel hash entry then, and even insert our PID > into it. We could expand the listenersArray entries to include > both a PID and a boolean "is it REALLY listening?", and then > during Exec_ListenCommit we'd only be required to find an > entry we already added and set its boolean, so there's no OOM > hazard. Possibly do something similar with the local > listenChannelsHash, so as to remove that possibility of OOM > failure as well. Thanks for the idea, I like this approach. I've expanded the listenersArray like suggested, and moved all risky stuff from Exec_ListenCommit to PreCommit_Notify. > (An alternative design could be to go ahead and insert our > PID during PreCommit_Notify, and just tolerate the small > risk of getting signaled when we didn't need to be. But > then we'd need some mechanism for cleaning out the bogus > entry during AtAbort_Notify.) We seem to need a cleanup mechanism also with the boolean field design, since a channel could end up being added only to listenChannelsHash, but not channelHash, which would trick IsListeningOn() into falsely thinking we're listening on such channel when we're not. This could happen if successfully adding the channel to listenChannelsHash, but OOM when trying to add it to channelHash. AtAbort_Notify now handles such half-state, by reconciling all channels that had LISTEN_LISTEN actions, using the channelHash as the single source of truth, removing channels from both listenChannelsHash and channelHash, unless the active field is true (which means we were already listening to the channel due to a previous transaction). I've tested triggering the cleanup logic by adding elog ERROR that triggered after listenChannelsHash insert, and another test that triggered after channelHash insert, and it cleaned it up correctly. I haven't created a test for it in tree though, would we want that? > I'm not sure what I think about the new logic in SignalBackends > from this standpoint. Making it very-low-probability-of-error > definitely needs some consideration though. The initChannelHash call in SignalBackends is now gone, moved to PreCommit_Notify (called if there are any pendingNotifies). I also took the liberty of fixing the XXX comment, to lazily preallocate the signals arrays during PreCommit_Notify. It felt too inconsistent to just leave that unfixed, but maybe should be a separate commit? I wonder how risky the remaining new logic in SignalBackends is. For instance, I looked at dshash_find(..., false), and note it calls LWLockAcquire which in turn could elog ERROR if num locks is exceeded, but in master we're already calling LWLockAcquire in SignalBackends, so should be fine I guess? Apart from that, I don't see any new logic in SignalBackends, that could potentially be risky. /Joel --db2ddc30d7a144ee8775b70091dbe550 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v29.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v29.patch?=" Content-Transfer-Encoding: base64 RnJvbSA4MWFiMWFkM2Y2ZmU4YTExYTg4Nzc4MzgzMDNjODhiYzMzYzg3MmZkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogV2VkLCA4IE9jdCAyMDI1IDA5OjMwOjU0ICswMjAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIEltcHJvdmUgTElTVEVOL05PVElGWSB0ZXN0IGNvdmVyYWdlCgpUaGlzIGFkZHMg aXNvbGF0aW9uIHRlc3RzIHRvIGNvdmVyIHByZXZpb3VzbHkgdW50ZXN0ZWQgY29kZSBwYXRo czoKCiogQ2hlY2sgc2ltcGxlIE5PVElGWSByZXBhcmVudGluZyB3aGVuIHBhcmVudCBoYXMg bm8gYWN0aW9uCiogQ2hlY2sgTElTVEVOIHJlcGFyZW50aW5nIGluIHN1YnRyYW5zYWN0aW9u CiogQ2hlY2sgTElTVEVOIG1lcmdlIHBhdGggd2hlbiBib3RoIG91dGVyIGFuZCBpbm5lciB0 cmFuc2FjdGlvbnMgaGF2ZSBhY3Rpb25zCiogQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJP TExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpCiogQ2hlY2sg bm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2VyZWQgYnkgaGFzaCB0YWJsZSBk dXBsaWNhdGUgZGV0ZWN0aW9uKQoqIENoZWNrIHRoYXQgbm90aWZpY2F0aW9ucyBzZW50IGZy b20gYSBiYWNrZW5kIHRoYXQgaGFzIG5vdCBkb25lIExJU1RFTgogIGFyZSBwcm9wZXJseSBk ZWxpdmVyZWQgdG8gYSBsaXN0ZW5lciBpbiBhbm90aGVyIGJhY2tlbmQKClRoaXMgYWxzbyBh ZGRzIGEgdGVzdCB0byBwcmVwYXJlIGZvciB0aGUgbmV4dCBwYXRjaDoKCiogQ2hlY2sgQ2hh bm5lbEhhc2hBZGRMaXN0ZW5lciBhcnJheSBncm93dGgKLS0tCiBzcmMvdGVzdC9pc29sYXRp b24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dCB8IDExNCArKysrKysrKysrKysrKysrKyst CiBzcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvYXN5bmMtbm90aWZ5LnNwZWMgICB8ICA2OCAr KysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxODEgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9hc3lu Yy1ub3RpZnkub3V0IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlm eS5vdXQKaW5kZXggNTU2ZTE4MDU4OTMuLjQ0M2E2ZWI2NjlmIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dAorKysgYi9zcmMvdGVz dC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dApAQCAtMSw0ICsxLDQgQEAK LVBhcnNlZCB0ZXN0IHNwZWMgd2l0aCAzIHNlc3Npb25zCitQYXJzZWQgdGVzdCBzcGVjIHdp dGggNyBzZXNzaW9ucwogCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBub3RpZnkx IG5vdGlmeTIgbm90aWZ5MyBub3RpZnlmCiBzdGVwIGxpc3RlbmM6IExJU1RFTiBjMTsgTElT VEVOIGMyOwpAQCAtNDcsNiArNDcsMTA1IEBAIG5vdGlmaWVyOiBOT1RJRlkgImMyIiB3aXRo IHBheWxvYWQgInBheWxvYWQiIGZyb20gbm90aWZpZXIKIG5vdGlmaWVyOiBOT1RJRlkgImMx IiB3aXRoIHBheWxvYWQgInBheWxvYWRzIiBmcm9tIG5vdGlmaWVyCiBub3RpZmllcjogTk9U SUZZICJjMiIgd2l0aCBwYXlsb2FkICJwYXlsb2FkcyIgZnJvbSBub3RpZmllcgogCitzdGFy dGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBub3RpZnlzX3NpbXBsZQorc3RlcCBsaXN0ZW5j OiBMSVNURU4gYzE7IExJU1RFTiBjMjsKK3N0ZXAgbm90aWZ5c19zaW1wbGU6IAorCUJFR0lO OworCVNBVkVQT0lOVCBzMTsKKwlOT1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIs ICdzaW1wbGUyJzsKKwlSRUxFQVNFIFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7CisKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInNpbXBsZTEiIGZyb20gbm90aWZpZXIK K25vdGlmaWVyOiBOT1RJRlkgImMyIiB3aXRoIHBheWxvYWQgInNpbXBsZTIiIGZyb20gbm90 aWZpZXIKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGxzYmVnaW4gbHNzYXZlcG9pbnQgbHNs aXN0ZW4gbHNyZWxlYXNlIGxzY29tbWl0IGxzbm90aWZ5CitzdGVwIGxzYmVnaW46IEJFR0lO Oworc3RlcCBsc3NhdmVwb2ludDogU0FWRVBPSU5UIHMxOworc3RlcCBsc2xpc3RlbjogTElT VEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGxzcmVsZWFzZTogUkVMRUFTRSBTQVZFUE9JTlQg czE7CitzdGVwIGxzY29tbWl0OiBDT01NSVQ7CitzdGVwIGxzbm90aWZ5OiBOT1RJRlkgYzEs ICdzdWJ4YWN0X3Rlc3QnOworbGlzdGVuX3N1YnhhY3Q6IE5PVElGWSAiYzEiIHdpdGggcGF5 bG9hZCAic3VieGFjdF90ZXN0IiBmcm9tIGxpc3Rlbl9zdWJ4YWN0CisKK3N0YXJ0aW5nIHBl cm11dGF0aW9uOiBsc2JlZ2luIGxzbGlzdGVuX291dGVyIGxzc2F2ZXBvaW50IGxzbGlzdGVu IGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0 ZXAgbHNsaXN0ZW5fb3V0ZXI6IExJU1RFTiBjMzsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNBVkVQ T0lOVCBzMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBs c3JlbGVhc2U6IFJFTEVBU0UgU0FWRVBPSU5UIHMxOworc3RlcCBsc2NvbW1pdDogQ09NTUlU Oworc3RlcCBsc25vdGlmeTogTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0JzsKK2xpc3Rlbl9z dWJ4YWN0OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInN1YnhhY3RfdGVzdCIgZnJvbSBs aXN0ZW5fc3VieGFjdAorCitzdGFydGluZyBwZXJtdXRhdGlvbjogbHNiZWdpbiBsc3NhdmVw b2ludCBsc2xpc3RlbiBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5X2NoZWNrCitzdGVw IGxzYmVnaW46IEJFR0lOOworc3RlcCBsc3NhdmVwb2ludDogU0FWRVBPSU5UIHMxOworc3Rl cCBsc2xpc3RlbjogTElTVEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGxzcm9sbGJhY2s6IFJP TExCQUNLIFRPIFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNjb21taXQ6IENPTU1JVDsKK3N0ZXAg bHNub3RpZnlfY2hlY2s6IE5PVElGWSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2ZSc7CisKK3N0 YXJ0aW5nIHBlcm11dGF0aW9uOiBsaXN0ZW5jIG5vdGlmeV9tYW55X3dpdGhfZHVwCitzdGVw IGxpc3RlbmM6IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBub3RpZnlfbWFueV93aXRo X2R1cDogCisJQkVHSU47CisJU0VMRUNUIHBnX25vdGlmeSgnYzEnLCAnbXNnJyB8fCBzOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxNykgczsKKwlTRUxFQ1QgcGdfbm90aWZ5 KCdjMScsICdtc2cxJyk7CisJQ09NTUlUOworCitwZ19ub3RpZnkKKy0tLS0tLS0tLQorICAg ICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAg ICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisg ICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAor ICAgICAgICAgCisgICAgICAgICAKKygxNyByb3dzKQorCitwZ19ub3RpZnkKKy0tLS0tLS0t LQorICAgICAgICAgCisoMSByb3cpCisKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIm1zZzEiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRo IHBheWxvYWQgIm1zZzIiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3 aXRoIHBheWxvYWQgIm1zZzMiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMx IiB3aXRoIHBheWxvYWQgIm1zZzQiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkg ImMxIiB3aXRoIHBheWxvYWQgIm1zZzUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJ RlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzYiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBO T1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzciIGZyb20gbm90aWZpZXIKK25vdGlmaWVy OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzgiIGZyb20gbm90aWZpZXIKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzkiIGZyb20gbm90aWZpZXIKK25v dGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEwIiBmcm9tIG5vdGlmaWVy Citub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxMSIgZnJvbSBub3Rp Zmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTIiIGZyb20g bm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEzIiBm cm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cx NCIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAi bXNnMTUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxv YWQgIm1zZzE2IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBw YXlsb2FkICJtc2cxNyIgZnJvbSBub3RpZmllcgorCitzdGFydGluZyBwZXJtdXRhdGlvbjog bGlzdGVuYyBsbGlzdGVuIGwybGlzdGVuIGwzbGlzdGVuIGxzbGlzdGVuCitzdGVwIGxpc3Rl bmM6IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJ U1RFTiBjMjsKK3N0ZXAgbDJsaXN0ZW46IExJU1RFTiBjMTsKK3N0ZXAgbDNsaXN0ZW46IExJ U1RFTiBjMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworCiBzdGFy dGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3Rp ZnlmIGxjaGVjawogc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKIHN0ZXAg bm90aWZ5MTogTk9USUZZIGMxOwpAQCAtOTUsNiArMTk0LDggQEAgbGlzdGVuZXI6IE5PVElG WSAiYzIiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiAKIHN0YXJ0aW5nIHBlcm11 dGF0aW9uOiBsMmxpc3RlbiBsMmJlZ2luIG5vdGlmeTEgbGJlZ2lucyBsbGlzdGVuIGxjb21t aXQgbDJjb21taXQgbDJzdG9wCiBzdGVwIGwybGlzdGVuOiBMSVNURU4gYzE7CitsaXN0ZW5l cjI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCitsaXN0ZW5l cjI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiBzdGVwIGwy YmVnaW46IEJFR0lOOwogc3RlcCBub3RpZnkxOiBOT1RJRlkgYzE7CiBzdGVwIGxiZWdpbnM6 IEJFR0lOIElTT0xBVElPTiBMRVZFTCBTRVJJQUxJWkFCTEU7CkBAIC0xMDQsNiArMjA1LDE3 IEBAIHN0ZXAgbDJjb21taXQ6IENPTU1JVDsKIGxpc3RlbmVyMjogTk9USUZZICJjMSIgd2l0 aCBwYXlsb2FkICIiIGZyb20gbm90aWZpZXIKIHN0ZXAgbDJzdG9wOiBVTkxJU1RFTiAqOwog CitzdGFydGluZyBwZXJtdXRhdGlvbjogbGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVj aworc3RlcCBsY2hfbGlzdGVuOiBMSVNURU4gY2g7CitzdGVwIG5jaF9ub3RpZnk6IE5PVElG WSBjaCwgJ2FhJzsKK3N0ZXAgbGNoX2NoZWNrOiBTRUxFQ1QgMSBBUyB4OworeAorLQorMQor KDEgcm93KQorCitsaXN0ZW5lcl9jaDogTk9USUZZICJjaCIgd2l0aCBwYXlsb2FkICJhYSIg ZnJvbSBub3RpZmllcl9jaAorCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBsYmVn aW4gdXNhZ2UgYmlnbm90aWZ5IHVzYWdlCiBzdGVwIGxsaXN0ZW46IExJU1RFTiBjMTsgTElT VEVOIGMyOwogc3RlcCBsYmVnaW46IEJFR0lOOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNv bGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3Nw ZWNzL2FzeW5jLW5vdGlmeS5zcGVjCmluZGV4IDBiOGNmZDkxMDgzLi4wYTAxZTc3N2I5OCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVj CisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9hc3luYy1ub3RpZnkuc3BlYwpAQCAt MzEsNiArMzEsMjAgQEAgc3RlcCBub3RpZnlzMQl7CiAJUk9MTEJBQ0sgVE8gU0FWRVBPSU5U IHMyOwogCUNPTU1JVDsKIH0KK3N0ZXAgbm90aWZ5c19zaW1wbGUJeworCUJFR0lOOworCVNB VkVQT0lOVCBzMTsKKwlOT1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIsICdzaW1w bGUyJzsKKwlSRUxFQVNFIFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7Cit9CitzdGVwIG5vdGlm eV9tYW55X3dpdGhfZHVwCXsKKwlCRUdJTjsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdt c2cnIHx8IHM6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDE3KSBzOworCVNFTEVD VCBwZ19ub3RpZnkoJ2MxJywgJ21zZzEnKTsKKwlDT01NSVQ7Cit9CiBzdGVwIHVzYWdlCQl7 IFNFTEVDVCBwZ19ub3RpZmljYXRpb25fcXVldWVfdXNhZ2UoKSA+IDAgQVMgbm9uemVybzsg fQogc3RlcCBiaWdub3RpZnkJeyBTRUxFQ1QgY291bnQocGdfbm90aWZ5KCdjMScsIHM6OnRl eHQpKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBzOyB9CiB0ZWFyZG93bgkJeyBV TkxJU1RFTiAqOyB9CkBAIC01Myw2ICs2NywzOCBAQCBzdGVwIGwyYmVnaW4JeyBCRUdJTjsg fQogc3RlcCBsMmNvbW1pdAl7IENPTU1JVDsgfQogc3RlcCBsMnN0b3AJCXsgVU5MSVNURU4g KjsgfQogCisjIFRoaXJkIGxpc3RlbmVyIHNlc3Npb24gZm9yIHRlc3RpbmcgYXJyYXkgZ3Jv d3RoLgorCitzZXNzaW9uIGxpc3RlbmVyMworc3RlcCBsM2xpc3Rlbgl7IExJU1RFTiBjMTsg fQordGVhcmRvd24JCXsgVU5MSVNURU4gKjsgfQorCisjIExpc3RlbmVyIHNlc3Npb24gZm9y IGNyb3NzLXNlc3Npb24gbm90aWZpY2F0aW9uIHRlc3Qgd2l0aCBjaGFubmVsICdjaCcuCisK K3Nlc3Npb24gbGlzdGVuZXJfY2gKK3N0ZXAgbGNoX2xpc3Rlbgl7IExJU1RFTiBjaDsgfQor c3RlcCBsY2hfY2hlY2sJeyBTRUxFQ1QgMSBBUyB4OyB9Cit0ZWFyZG93bgkJeyBVTkxJU1RF TiAqOyB9CisKKyMgTm90aWZpZXIgc2Vzc2lvbiBmb3IgY3Jvc3Mtc2Vzc2lvbiBub3RpZmlj YXRpb24gdGVzdCB3aXRoIGNoYW5uZWwgJ2NoJy4KKworc2Vzc2lvbiBub3RpZmllcl9jaAor c3RlcCBuY2hfbm90aWZ5CXsgTk9USUZZIGNoLCAnYWEnOyB9CisKKyMgU2Vzc2lvbiBmb3Ig dGVzdGluZyBMSVNURU4gaW4gc3VidHJhbnNhY3Rpb24gd2l0aCBzZXBhcmF0ZSBzdGVwcy4K Kworc2Vzc2lvbiBsaXN0ZW5fc3VieGFjdAorc3RlcCBsc2JlZ2luCXsgQkVHSU47IH0KK3N0 ZXAgbHNsaXN0ZW5fb3V0ZXIJeyBMSVNURU4gYzM7IH0KK3N0ZXAgbHNzYXZlcG9pbnQJeyBT QVZFUE9JTlQgczE7IH0KK3N0ZXAgbHNsaXN0ZW4JeyBMSVNURU4gYzE7IExJU1RFTiBjMjsg fQorc3RlcCBsc3JlbGVhc2UJeyBSRUxFQVNFIFNBVkVQT0lOVCBzMTsgfQorc3RlcCBsc3Jv bGxiYWNrCXsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHMxOyB9CitzdGVwIGxzY29tbWl0CXsg Q09NTUlUOyB9CitzdGVwIGxzbm90aWZ5CXsgTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0Jzsg fQorc3RlcCBsc25vdGlmeV9jaGVjawl7IE5PVElGWSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2 ZSc7IH0KK3RlYXJkb3duCQl7IFVOTElTVEVOICo7IH0KKwogCiAjIFRyaXZpYWwgY2FzZXMu CiBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5MiBub3RpZnkzIG5vdGlmeWYK QEAgLTYwLDYgKzEwNiwyNCBAQCBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5 MiBub3RpZnkzIG5vdGlmeWYKICMgQ2hlY2sgc2ltcGxlIGFuZCBsZXNzLXNpbXBsZSBkZWR1 cGxpY2F0aW9uLgogcGVybXV0YXRpb24gbGlzdGVuYyBub3RpZnlkMSBub3RpZnlkMiBub3Rp ZnlzMQogCisjIENoZWNrIHNpbXBsZSBOT1RJRlkgcmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQg aGFzIG5vIGFjdGlvbi4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbm90aWZ5c19zaW1wbGUKKwor IyBDaGVjayBMSVNURU4gcmVwYXJlbnRpbmcgaW4gc3VidHJhbnNhY3Rpb24uCitwZXJtdXRh dGlvbiBsc2JlZ2luIGxzc2F2ZXBvaW50IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBs c25vdGlmeQorCisjIENoZWNrIExJU1RFTiBtZXJnZSBwYXRoIHdoZW4gYm90aCBvdXRlciBh bmQgaW5uZXIgdHJhbnNhY3Rpb25zIGhhdmUgYWN0aW9ucy4KK3Blcm11dGF0aW9uIGxzYmVn aW4gbHNsaXN0ZW5fb3V0ZXIgbHNzYXZlcG9pbnQgbHNsaXN0ZW4gbHNyZWxlYXNlIGxzY29t bWl0IGxzbm90aWZ5CisKKyMgQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJPTExCQUNLIFRP IFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpLgorcGVybXV0YXRpb24gbHNi ZWdpbiBsc3NhdmVwb2ludCBsc2xpc3RlbiBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5 X2NoZWNrCisKKyMgQ2hlY2sgbm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2Vy ZWQgYnkgaGFzaCB0YWJsZSBkdXBsaWNhdGUgZGV0ZWN0aW9uKS4KK3Blcm11dGF0aW9uIGxp c3RlbmMgbm90aWZ5X21hbnlfd2l0aF9kdXAKKworIyBDaGVjayBDaGFubmVsSGFzaEFkZExp c3RlbmVyIGFycmF5IGdyb3d0aC4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBsMmxp c3RlbiBsM2xpc3RlbiBsc2xpc3RlbgorCiAjIENyb3NzLWJhY2tlbmQgbm90aWZpY2F0aW9u IGRlbGl2ZXJ5LiAgV2UgdXNlIGEgInNlbGVjdCAxIiB0byBmb3JjZSB0aGUKICMgbGlzdGVu ZXIgc2Vzc2lvbiB0byBjaGVjayBmb3Igbm90aWZpZXMuICBJbiBwcmluY2lwbGUgd2UgY291 bGQganVzdCB3YWl0CiAjIGZvciBkZWxpdmVyeSwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBl eHRyYSBzdXBwb3J0IGluIGlzb2xhdGlvbnRlc3RlcgpAQCAtNzMsNiArMTM3LDEwIEBAIHBl cm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3Rp ZnlmIGxjaGVjawogIyBhbmQgbm90aWZ5IHF1ZXVlIGlzIG5vdCBlbXB0eQogcGVybXV0YXRp b24gbDJsaXN0ZW4gbDJiZWdpbiBub3RpZnkxIGxiZWdpbnMgbGxpc3RlbiBsY29tbWl0IGwy Y29tbWl0IGwyc3RvcAogCisjIENoZWNrIHRoYXQgbm90aWZpY2F0aW9ucyBzZW50IGZyb20g YSBiYWNrZW5kIHRoYXQgaGFzIG5vdCBkb25lIExJU1RFTgorIyBhcmUgcHJvcGVybHkgZGVs aXZlcmVkIHRvIGEgbGlzdGVuZXIgaW4gYW5vdGhlciBiYWNrZW5kLgorcGVybXV0YXRpb24g bGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVjaworCiAjIFZlcmlmeSB0aGF0IHBnX25v dGlmaWNhdGlvbl9xdWV1ZV91c2FnZSBjb3JyZWN0bHkgcmVwb3J0cyBhIG5vbi16ZXJvIHJl c3VsdCwKICMgYWZ0ZXIgc3VibWl0dGluZyBub3RpZmljYXRpb25zIHdoaWxlIGFub3RoZXIg Y29ubmVjdGlvbiBpcyBsaXN0ZW5pbmcgZm9yCiAjIHRob3NlIG5vdGlmaWNhdGlvbnMgYW5k IHdhaXRpbmcgaW5zaWRlIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbi4gIFdlIGhhdmUgdG8KLS0g CjIuNTAuMQoK --db2ddc30d7a144ee8775b70091dbe550 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v29.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v29.patch?=" Content-Transfer-Encoding: base64 RnJvbSBjOGFlNjI5NTA4NGFhMmU5NTMzM2FjNzQ0OWIwOTg0ZTZkODE5ZTQ0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU2F0LCAxNSBOb3YgMjAyNSAyMjoxODo1MCArMDEwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBPcHRpbWl6ZSBMSVNURU4vTk9USUZZIHdpdGggc2hhcmVkIGNoYW5uZWwgbWFw IGFuZCBkaXJlY3QKIGFkdmFuY2VtZW50Ck1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlw ZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n OiA4Yml0CgpUaGlzIHBhdGNoIHJld29ya3MgdGhlIExJU1RFTi9OT1RJRlkgc2lnbmFsaW5n IHBhdGggdG8gYXZvaWQgdGhlCmxvbmctc3RhbmRpbmcgaW5lZmZpY2llbmN5IHdoZXJlIGV2 ZXJ5IGNvbW1pdCB3YWtlcyBhbGwgbGlzdGVuaW5nCmJhY2tlbmRzIGluIHRoZSBzYW1lIGRh dGFiYXNlLCBldmVuIHRob3NlIHRoYXQgYXJlIGxpc3RlbmluZyBvbgpjb21wbGV0ZWx5IGRp ZmZlcmVudCBjaGFubmVscy4KClByb2JsZW0KLS0tLS0tLQoKQXQgcHJlc2VudCwgU2lnbmFs QmFja2VuZHMgaGFzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9mIHdoaWNoIGJhY2tlbmQKbGlz dGVucyBvbiB3aGljaCBjaGFubmVsLiBXaGVuIGEgYmFja2VuZCBjb21taXRzIGEgdHJhbnNh Y3Rpb24gdGhhdAppc3N1ZWQgTk9USUZZLCBpdCBzaW1wbHkgaXRlcmF0ZXMgb3ZlciBhbGwg cmVnaXN0ZXJlZCBsaXN0ZW5lcnMgaW4gdGhlCnNhbWUgZGF0YWJhc2UgYW5kIHNlbmRzIGVh Y2ggb25lIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNpZ25hbC4KClRoYXQgYmVoYXZp b3IgaXMgZmluZSB3aGVuIGFsbCBsaXN0ZW5lcnMgYXJlIG9uIHRoZSBzYW1lIGNoYW5uZWws IGJ1dAp3aGVuIG1hbnkgYmFja2VuZHMgYXJlIGxpc3RlbmluZyBvbiBkaWZmZXJlbnQgY2hh bm5lbHMsIGVhY2ggTk9USUZZCnRyaWdnZXJzIGEgc3Rvcm0gb2YgdW5uZWNlc3Nhcnkgd2Fr ZXVwcyBhbmQgY29udGV4dCBzd2l0Y2hlcy4gQXMgdGhlCm51bWJlciBvZiBpZGxlIGxpc3Rl bmVycyBncm93cywgdGhpcyBvZnRlbiBiZWNvbWVzIHRoZSBib3R0bGVuZWNrIGFuZAp0aHJv dWdocHV0IGRyb3BzIHNoYXJwbHkuCgpPdmVydmlldyBvZiB0aGUgc29sdXRpb24KLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBsYXppbHktY3Jl YXRlZCBkeW5hbWljIHNoYXJlZCBoYXNoIChkc2hhc2gpCmJhY2tlZCBieSBkeW5hbWljIHNo YXJlZCBtZW1vcnkgKERTQSkgdGhhdCBtYXBzIChkYm9pZCwgY2hhbm5lbCkgdG8KYXJyYXlz IG9mIExpc3RlbmVyRW50cnkgc3RydWN0dXJlcyAoY29udGFpbmluZyBQcm9jTnVtYmVyIGFu ZCBhY3RpdmUKZmxhZykgcmVwcmVzZW50aW5nIHRoZSBiYWNrZW5kcyBsaXN0ZW5pbmcgb24g ZWFjaCBjaGFubmVsLiBUaGlzIGFsbG93cwp0aGUgc2VuZGVyIHRvIHRhcmdldCBvbmx5IHRo b3NlIGJhY2tlbmRzIGFjdHVhbGx5IGxpc3RlbmluZyBvbiB0aGUKY2hhbm5lbHMgZm9yIHdo aWNoIGl0IGhhcyBxdWV1ZWQgbm90aWZpY2F0aW9ucy4KCkNyaXRpY2FsIHNlY3Rpb24gc2Fm ZXR5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUbyBhdm9pZCBFUlJPUuKGklBBTklDIGFm dGVyIHRyYW5zYWN0aW9uIGNvbW1pdCwgYWxsIHJpc2t5IG9wZXJhdGlvbnMKKERTQSBhbGxv Y2F0aW9ucywgZHNoYXNoIG9wZXJhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9ucykgYXJlIG1v dmVkIHRvClByZUNvbW1pdF9Ob3RpZnkgd2hlcmUgZmFpbHVyZXMgY2FuIHN0aWxsIHNhZmVs eSBhYm9ydC4KCkVhY2ggbGlzdGVuZXIgZW50cnkgaW5jbHVkZXMgYW4gJ2FjdGl2ZScgZmxh Zy4gRHVyaW5nIFByZUNvbW1pdCwgTElTVEVOCm9wZXJhdGlvbnMgaW5zZXJ0IGVudHJpZXMg d2l0aCBhY3RpdmU9ZmFsc2UgdG8gcHJlLWFsbG9jYXRlIGFsbCByZXF1aXJlZApzcGFjZS4g QWZ0ZXIgY29tbWl0IHRvIGNsb2csIEF0Q29tbWl0X05vdGlmeSBzaW1wbHkgZmxpcHMgYWN0 aXZlIGZsYWdzCnRvIHRydWXigJRhIGJvb2xlYW4gYXNzaWdubWVudCB0aGF0IGhhcyBhY2Nl cHRhYmx5IGxvdyBmYWlsdXJlIHJpc2suCgpTaW1pbGFybHksIHNpZ25hbCBhcnJheXMgKG5v dGlmeVNpZ25hbFBpZHMvbm90aWZ5U2lnbmFsUHJvY3MpIHVzZSBhCmh5YnJpZCBhbGxvY2F0 aW9uIHN0cmF0ZWd5OiBhbGxvY2F0ZWQgb25jZSBpbiBUb3BNZW1vcnlDb250ZXh0IGR1cmlu Zwp0aGUgZmlyc3QgTk9USUZZIChpbiBQcmVDb21taXQgd2hlcmUgT09NIGNhbiBzdGlsbCBh Ym9ydCksIHRoZW4gcmV1c2VkCnBlcm1hbmVudGx5IGFjcm9zcyBhbGwgdHJhbnNhY3Rpb25z LgoKQXQgY29tbWl0IHRpbWU6CgoqIEV4ZWNfTGlzdGVuUHJlQ29tbWl0IHBlcmZvcm1zIGFs bCByaXNreSBhbGxvY2F0aW9ucyB3aXRoIGFjdGl2ZT1mYWxzZQoqIEV4ZWNfTGlzdGVuQ29t bWl0IGZsaXBzIGFjdGl2ZSBmbGFncyB0byB0cnVlIChwb3N0LWNvbW1pdCkKKiBBdENvbW1p dF9Ob3RpZnkgdXBkYXRlcyB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoIHRvIHJlZmxlY3QgYW55 IExJU1RFTgogIG9yIFVOTElTVEVOIGFjdGlvbnMgcGVyZm9ybWVkIGluIHRoZSB0cmFuc2Fj dGlvbi4KKiBTaWduYWxCYWNrZW5kcyBjb25zdWx0cyB0aGlzIGhhc2ggdG8gZmluZCB0aGUg YmFja2VuZHMgdGhhdCBhcmUKICBsaXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIGJlaW5nIG5v dGlmaWVkIGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLCBhbmQKICBzaWduYWxzIG9ubHkgdGhv c2Ugd2l0aCBhY3RpdmU9dHJ1ZS4KCkVhY2ggYmFja2VuZCdzIGVudHJ5IGluIEFzeW5jUXVl dWVDb250cm9sIG5vdyBpbmNsdWRlcyBhIHdha2V1cFBlbmRpbmcKZmxhZyB0byBwcmV2ZW50 IGR1cGxpY2F0ZSBzaWduYWxzIHdoaWxlIGEgcHJldmlvdXMgd2FrZXVwIGlzIHN0aWxsIGJl aW5nCnByb2Nlc3NlZC4KCkRpcmVjdCBhZHZhbmNlbWVudAotLS0tLS0tLS0tLS0tLS0tLS0K CkEgZnVydGhlciBvcHRpbWl6YXRpb24gYXZvaWRzIHNpZ25hbGluZyBpZGxlIGJhY2tlbmRz IHRoYXQgYXJlIG5vdApsaXN0ZW5pbmcgb24gYW55IG9mIHRoZSBjaGFubmVscyBub3RpZmll ZCB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uLgoKV2hpbGUgcXVldWluZyBub3RpZmljYXRpb25z LCBQcmVDb21taXRfTm90aWZ5IHJlY29yZHMgdGhlIHF1ZXVlIGhlYWQKcG9zaXRpb24gYm90 aCBiZWZvcmUgYW5kIGFmdGVyIHdyaXRpbmcgaXRzIG5vdGlmaWNhdGlvbnMuIEJlY2F1c2Ug YWxsCndyaXRlcnMgYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIGV4aXN0aW5nIGNsdXN0ZXItd2lk ZSBoZWF2eXdlaWdodCBsb2NrIG9uCiJkYXRhYmFzZSAwIiwgbm8gYmFja2VuZCAoZnJvbSBh bnkgZGF0YWJhc2UpIGNhbiBpbnNlcnQgZW50cmllcyBiZXR3ZWVuCnRob3NlIHR3byBwb2lu dHMuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHRoZSByZWdpb24gW29sZEhlYWQsIG5ld0hlYWQp CmNvbnRhaW5zIG9ubHkgdGhlIGVudHJpZXMgd3JpdHRlbiBieSBvdXIgY29tbWl0LgoKU2ln bmFsQmFja2VuZHMgdXNlcyB0aGlzIGZhY3QgdG8gZGlyZWN0bHkgYWR2YW5jZSBhbnkgYmFj a2VuZCBzdGlsbApwb3NpdGlvbmVkIGF0IG9sZEhlYWQgdXAgdG8gbmV3SGVhZCwgYXZvaWRp bmcgYSBuZWVkbGVzcyB3YWtldXAgZm9yCmxpc3RlbmVycyB0aGF0IHdvdWxkIG90aGVyd2lz ZSBub3QgZmluZCBhbnkgbm90aWZpZXMgb2YgaW50ZXJlc3QuCgpUbyBoYW5kbGUgYWR2YW5j aW5nIGJhY2tlbmRzIGNvcnJlY3RseSwgZWFjaCBiYWNrZW5kJ3MgZW50cnkgdHJhY2tzIGJv dGgKd2hldGhlciBpdCBpcyBjdXJyZW50bHkgYWR2YW5jaW5nIChpc0FkdmFuY2luZykgYW5k IHRoZSB0YXJnZXQgcG9zaXRpb24KaXQgaXMgYWR2YW5jaW5nIHRvIChhZHZhbmNpbmdQb3Mp LiBUaGlzIGFsbG93cyBTaWduYWxCYWNrZW5kcyB0byBzaWduYWwKYWR2YW5jaW5nIGJhY2tl bmRzIG9ubHkgd2hlbiB0aGVpciB0YXJnZXQgcG9zaXRpb24gd291bGQgbGVhdmUgdGhlbQpi ZWhpbmQgdGhlIG5ldyBxdWV1ZSBoZWFkLCB3aGlsZSBzYWZlbHkgZGlyZWN0LWFkdmFuY2lu ZyBpZGxlIGJhY2tlbmRzCnRoYXQgd291bGQgbm90IGJlIGludGVyZXN0ZWQgaW4gdGhlIG5l d2x5IHdyaXR0ZW4gbm90aWZpY2F0aW9ucy4KSWRsZSBiYWNrZW5kcyB0aGF0IGFyZSBzdGF0 aW9uYXJ5IGF0IGEgcG9zaXRpb24gYmVmb3JlIHRoZSBvbGQgcXVldWUKaGVhZCBhcmUgc2ln bmFsZWQsIHNpbmNlIHRoZXkgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiB0aGUgbm90aWZpY2F0 aW9ucwppbiBiZXR3ZWVuIHRoZWlyIGN1cnJlbnQgcG9zaXRpb24gYW5kIHRoZSBvbGQgcXVl dWUgaGVhZC4KCk90aGVyIG5vdGVzCi0tLS0tLS0tLS0tCgoqIE1haW50YWlucyBkdWFsIGRh dGEgc3RydWN0dXJlczogYSBzaGFyZWQgY2hhbm5lbEhhc2ggZm9yIGRldGVybWluaW5nCiAg d2hpY2ggYmFja2VuZHMgdG8gc2lnbmFsLCBhbmQgYSBsb2NhbCBwZXItYmFja2VuZCBsaXN0 ZW5DaGFubmVscyBsaXN0CiAgZm9yIGZhc3QgbG9jay1mcmVlIGxvb2t1cHMgZHVyaW5nIG5v dGlmaWNhdGlvbiBwcm9jZXNzaW5nLiBUaGlzIGF2b2lkcwogIGNvbnRlbnRpb24gb24gdGhl IHNoYXJlZCBoYXNoIGR1cmluZyB0aGUgaGlnaC1mcmVxdWVuY3kgSXNMaXN0ZW5pbmdPbgog IGNoZWNrcyB0aGF0IG9jY3VyIGZvciBldmVyeSBub3RpZmljYXRpb24gcmVhZCBmcm9tIHRo ZSBxdWV1ZS4KKiBCYWNrZW5kcyByZW1haW4gcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGxp c3RlbmVyIGxpc3QgYXMgbG9uZyBhcwogIGxpc3RlbkNoYW5uZWxzIGlzIG5vbi1lbXB0eS4K KiBBdEFib3J0X05vdGlmeSBjbGVhbmx5IGhhbmRsZXMgYm90aCBsb2NhbCBhbmQgc2hhcmVk IGhhc2ggY2xlYW51cCwKICByZW1vdmluZyBpbmFjdGl2ZSAodW5jb21taXR0ZWQpIGVudHJp ZXMgd2hpbGUgcHJlc2VydmluZyBhY3RpdmUKICAoY29tbWl0dGVkKSBlbnRyaWVzIGZyb20g cHJldmlvdXMgdHJhbnNhY3Rpb25zLgoqIEFkZHMgTFdMb2NrIHRyYW5jaGUgTk9USUZZX0NI QU5ORUxfSEFTSCBhbmQgd2FpdCBldmVudAogIE5vdGlmeUNoYW5uZWxIYXNoIGZvciB2aXNp YmlsaXR5LgoqIE5vIHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZXM7IHRoaXMgaXMg YW4gaW50ZXJuYWwgb3B0aW1pemF0aW9uCiAgb25seS4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9hc3luYy5jICAgICAgICAgICAgICAgICAgfCAxMDg0ICsrKysrKysrKysrKystLS0t CiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgICAx ICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oICAgICAgICAgICAgICB8ICAg IDEgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwg ICAgMyArCiA0IGZpbGVzIGNoYW5nZWQsIDg3NiBpbnNlcnRpb25zKCspLCAyMTMgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggZTFjZjY1OTQ4NWEuLjJhODJmNGEw MTMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTI0LDggKzI0LDEwIEBACiAgKgkgIEFs bCBub3RpZmljYXRpb24gbWVzc2FnZXMgYXJlIHBsYWNlZCBpbiB0aGUgcXVldWUgYW5kIGxh dGVyIHJlYWQgb3V0CiAgKgkgIGJ5IGxpc3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKgkgIFRo ZXJlIGlzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9mIHdoaWNoIGJhY2tlbmQgbGlzdGVucyBv biB3aGljaCBjaGFubmVsOwotICoJICBldmVyeSBiYWNrZW5kIGhhcyBpdHMgb3duIGxpc3Qg b2YgaW50ZXJlc3RpbmcgY2hhbm5lbHMuCisgKgkgIFdlIGFsc28gbWFpbnRhaW4gYSBkeW5h bWljIHNoYXJlZCBoYXNoIHRhYmxlIChkc2hhc2gpIHRoYXQgbWFwcyBjaGFubmVsCisgKgkg IG5hbWVzIHRvIHRoZSBzZXQgb2YgYmFja2VuZHMgbGlzdGVuaW5nIG9uIGVhY2ggY2hhbm5l bC4gVGhpcyB0YWJsZSBpcworICoJICBjcmVhdGVkIGxhemlseSBvbiB0aGUgZmlyc3QgTElT VEVOIGNvbW1hbmQgYW5kIGdyb3dzIGR5bmFtaWNhbGx5IGFzCisgKgkgIG5lZWRlZC4KICAq CiAgKgkgIEFsdGhvdWdoIHRoZXJlIGlzIG9ubHkgb25lIHF1ZXVlLCBub3RpZmljYXRpb25z IGFyZSB0cmVhdGVkIGFzIGJlaW5nCiAgKgkgIGRhdGFiYXNlLWxvY2FsOyB0aGlzIGlzIGRv bmUgYnkgaW5jbHVkaW5nIHRoZSBzZW5kZXIncyBkYXRhYmFzZSBPSUQKQEAgLTY4LDE2ICs3 MCwyNCBAQAogICoJICBDb21taXRUcmFuc2FjdGlvbigpIHdoaWNoIHdpbGwgdGhlbiBkbyB0 aGUgYWN0dWFsIHRyYW5zYWN0aW9uIGNvbW1pdC4KICAqCiAgKgkgIEFmdGVyIGNvbW1pdCB3 ZSBhcmUgY2FsbGVkIGFub3RoZXIgdGltZSAoQXRDb21taXRfTm90aWZ5KCkpLiBIZXJlIHdl Ci0gKgkgIG1ha2UgYW55IGFjdHVhbCB1cGRhdGVzIHRvIHRoZSBlZmZlY3RpdmUgbGlzdGVu IHN0YXRlIChsaXN0ZW5DaGFubmVscykuCi0gKgkgIFRoZW4gd2Ugc2lnbmFsIGFueSBiYWNr ZW5kcyB0aGF0IG1heSBiZSBpbnRlcmVzdGVkIGluIG91ciBtZXNzYWdlcwotICoJICAoaW5j bHVkaW5nIG91ciBvd24gYmFja2VuZCwgaWYgbGlzdGVuaW5nKS4gIFRoaXMgaXMgZG9uZSBi eQotICoJICBTaWduYWxCYWNrZW5kcygpLCB3aGljaCBzY2FucyB0aGUgbGlzdCBvZiBsaXN0 ZW5pbmcgYmFja2VuZHMgYW5kIHNlbmRzIGEKLSAqCSAgUFJPQ1NJR19OT1RJRllfSU5URVJS VVBUIHNpZ25hbCB0byBldmVyeSBsaXN0ZW5pbmcgYmFja2VuZCAod2UgZG9uJ3QKLSAqCSAg a25vdyB3aGljaCBiYWNrZW5kIGlzIGxpc3RlbmluZyBvbiB3aGljaCBjaGFubmVsIHNvIHdl IG11c3Qgc2lnbmFsIHRoZW0KLSAqCSAgYWxsKS4gIFdlIGNhbiBleGNsdWRlIGJhY2tlbmRz IHRoYXQgYXJlIGFscmVhZHkgdXAgdG8gZGF0ZSwgdGhvdWdoLCBhbmQKLSAqCSAgd2UgY2Fu IGFsc28gZXhjbHVkZSBiYWNrZW5kcyB0aGF0IGFyZSBpbiBvdGhlciBkYXRhYmFzZXMgKHVu bGVzcyB0aGV5Ci0gKgkgIGFyZSB3YXkgYmVoaW5kIGFuZCBzaG91bGQgYmUga2lja2VkIHRv IG1ha2UgdGhlbSBhZHZhbmNlIHRoZWlyCi0gKgkgIHBvaW50ZXJzKS4KKyAqCSAgbWFrZSBh bnkgYWN0dWFsIHVwZGF0ZXMgdG8gdGhlIGxvY2FsIGxpc3RlbiBzdGF0ZSAobGlzdGVuQ2hh bm5lbHNIYXNoKSBhbmQKKyAqCSAgc2hhcmVkIGNoYW5uZWwgaGFzaCB0YWJsZSAoY2hhbm5l bEhhc2gpLiAgVGhlbiB3ZSBzaWduYWwgYW55IGJhY2tlbmRzCisgKgkgIHRoYXQgbWF5IGJl IGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2VzIChpbmNsdWRpbmcgb3VyIG93biBiYWNrZW5k LAorICoJICBpZiBsaXN0ZW5pbmcpLiAgVGhpcyBpcyBkb25lIGJ5IFNpZ25hbEJhY2tlbmRz KCksIHdoaWNoIGNvbnN1bHRzIHRoZQorICoJICBzaGFyZWQgY2hhbm5lbCBoYXNoIHRhYmxl IHRvIGlkZW50aWZ5IGxpc3RlbmVycyBmb3IgdGhlIGNoYW5uZWxzIHRoYXQKKyAqCSAgaGF2 ZSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMgaW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UuICBFYWNo IHNlbGVjdGVkCisgKgkgIGJhY2tlbmQgaXMgbWFya2VkIGFzIGhhdmluZyBhIHdha2V1cCBw ZW5kaW5nIHRvIGF2b2lkIGR1cGxpY2F0ZSBzaWduYWxzLAorICoJICBhbmQgYSBQUk9DU0lH X05PVElGWV9JTlRFUlJVUFQgc2lnbmFsIGlzIHNlbnQgdG8gaXQuCisgKgorICoJICBXaGVu IHdyaXRpbmcgbm90aWZpY2F0aW9ucywgUHJlQ29tbWl0X05vdGlmeSgpIHJlY29yZHMgdGhl IHF1ZXVlIGhlYWQKKyAqCSAgcG9zaXRpb24gYm90aCBiZWZvcmUgYW5kIGFmdGVyIHRoZSB3 cml0ZS4gIEJlY2F1c2UgYWxsIHdyaXRlcnMgc2VyaWFsaXplCisgKgkgIG9uIGEgY2x1c3Rl ci13aWRlIGhlYXZ5d2VpZ2h0IGxvY2ssIG5vIGJhY2tlbmQgY2FuIGluc2VydCBlbnRyaWVz IGJldHdlZW4KKyAqCSAgdGhlc2UgdHdvIHBvaW50cy4gIFNpZ25hbEJhY2tlbmRzKCkgdXNl cyB0aGlzIGZhY3QgdG8gZGlyZWN0bHkgYWR2YW5jZSBhbnkKKyAqCSAgYmFja2VuZCB0aGF0 IGlzIHN0aWxsIHBvc2l0aW9uZWQgYXQgdGhlIG9sZCBoZWFkLCBvciB3aXRoaW4gdGhlIHJh bmdlCisgKgkgIHdyaXR0ZW4sIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHdha2V1cHMgZm9yIGlk bGUgbGlzdGVuZXJzIHRoYXQgaGF2ZQorICoJICBub3RoaW5nIHRvIHJlYWQuICBCYWNrZW5k cyB0aGF0IGNhbm5vdCBiZSBkaXJlY3QgYWR2YW5jZWQgYXJlIHNpZ25hbGVkCisgKgkgIGlm IHRoZXkgYXJlIHN0dWNrIGJlaGluZCB0aGUgb2xkIHF1ZXVlIGhlYWQsIG9yIGFkdmFuY2lu ZyB0byBhIHBvc2l0aW9uCisgKgkgIGJlZm9yZSB0aGUgbmV3IHF1ZXVlIGhlYWQsIHNpbmNl IG90aGVyd2lzZSBub3RpZmljYXRpb25zIGNvdWxkIGJlIGRlbGF5ZWQuCiAgKgogICoJICBG aW5hbGx5LCBhZnRlciB3ZSBhcmUgb3V0IG9mIHRoZSB0cmFuc2FjdGlvbiBhbHRvZ2V0aGVy IGFuZCBhYm91dCB0byBnbwogICoJICBpZGxlLCB3ZSBzY2FuIHRoZSBxdWV1ZSBmb3IgbWVz c2FnZXMgdGhhdCBuZWVkIHRvIGJlIHNlbnQgdG8gb3VyCkBAIC0xMzcsMTQgKzE0NywxNyBA QAogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCiAjaW5jbHVkZSAiY29tbW9uL2hhc2hm bi5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIvZHNoYXNoLmgiCiAj aW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5 LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJ0Y29wL3Rj b3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGls cy9kc2EuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgpAQCAtMTYyLDYg KzE3NSw0MyBAQAogICovCiAjZGVmaW5lIE5PVElGWV9QQVlMT0FEX01BWF9MRU5HVEgJKEJM Q0tTWiAtIE5BTUVEQVRBTEVOIC0gMTI4KQogCisvKgorICogQ2hhbm5lbCBoYXNoIHRhYmxl IGRlZmluaXRpb25zCisgKgorICogVGhpcyBoYXNoIHRhYmxlIG1hcHMgKGRhdGFiYXNlIE9J RCwgY2hhbm5lbCBuYW1lKSBrZXlzIHRvIGFycmF5cyBvZgorICogTGlzdGVuZXJFbnRyeSBz dHJ1Y3RzIHJlcHJlc2VudGluZyB0aGUgYmFja2VuZHMgbGlzdGVuaW5nIG9uIGVhY2ggY2hh bm5lbC4KKyAqLworCisjZGVmaW5lIElOSVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkUgNAor Cit0eXBlZGVmIHN0cnVjdCBDaGFubmVsSGFzaEtleQoreworCU9pZAkJCWRib2lkOworCWNo YXIJCWNoYW5uZWxbTkFNRURBVEFMRU5dOworfSBDaGFubmVsSGFzaEtleTsKKworLyoKKyAq IEluZGl2aWR1YWwgbGlzdGVuZXIgZW50cnkgaW4gdGhlIGNoYW5uZWwncyBsaXN0ZW5lcnMg YXJyYXkuCisgKgorICogV2Ugc3RvcmUgYm90aCB0aGUgUHJvY051bWJlciBhbmQgYW4gYWN0 aXZlIGZsYWcuICBEdXJpbmcgUHJlQ29tbWl0LAorICogd2UgaW5zZXJ0IGVudHJpZXMgd2l0 aCBhY3RpdmU9ZmFsc2UgdG8gcHJlLWFsbG9jYXRlIHNwYWNlIGFuZCBhdm9pZAorICogT09N IGZhaWx1cmVzIGFmdGVyIHRyYW5zYWN0aW9uIGNvbW1pdC4gIFRoZW4gaW4gQXRDb21taXQs IHdlIGp1c3Qgc2V0CisgKiB0aGUgYWN0aXZlIGZsYWcgdG8gdHJ1ZSwgd2hpY2ggaGFzIGFj Y2VwdGFibHkgbG93IHJpc2sgb2YgZmFpbHVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTGlz dGVuZXJFbnRyeQoreworCVByb2NOdW1iZXIJcHJvY25vOwkJCS8qIGJhY2tlbmQncyBQcm9j TnVtYmVyICovCisJYm9vbAkJYWN0aXZlOwkJCS8qIHRydWUgaWYgYWN0dWFsbHkgbGlzdGVu aW5nICovCit9IExpc3RlbmVyRW50cnk7CisKK3R5cGVkZWYgc3RydWN0IENoYW5uZWxFbnRy eQoreworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlkc2FfcG9pbnRlciBsaXN0ZW5lcnNBcnJh eTsgLyogRFNBIHBvaW50ZXIgdG8gTGlzdGVuZXJFbnRyeSBhcnJheSAqLworCWludAkJCW51 bUxpc3RlbmVyczsJLyogTnVtYmVyIG9mIGxpc3RlbmVycyBjdXJyZW50bHkgc3RvcmVkICov CisJaW50CQkJYWxsb2NhdGVkTGlzdGVuZXJzOyAvKiBBbGxvY2F0ZWQgc2l6ZSBvZiBhcnJh eSAqLworfSBDaGFubmVsRW50cnk7CisKIC8qCiAgKiBTdHJ1Y3QgcmVwcmVzZW50aW5nIGFu IGVudHJ5IGluIHRoZSBnbG9iYWwgbm90aWZ5IHF1ZXVlCiAgKgpAQCAtMjI0LDExICsyNzQs MTQgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVQb3NpdGlvbgogCSAoeCkucGFnZSAhPSAoeSku cGFnZSA/ICh4KSA6IFwKIAkgKHgpLm9mZnNldCA+ICh5KS5vZmZzZXQgPyAoeCkgOiAoeSkp CiAKKy8qIHJldHVybnMgdHJ1ZSBpZiB4IGNvbWVzIGJlZm9yZSB5IGluIHF1ZXVlIG9yZGVy ICovCisjZGVmaW5lIFFVRVVFX1BPU19QUkVDRURFUyh4LHkpIFwKKwkoYXN5bmNRdWV1ZVBh Z2VQcmVjZWRlcygoeCkucGFnZSwgKHkpLnBhZ2UpIHx8IFwKKwkgKCh4KS5wYWdlID09ICh5 KS5wYWdlICYmICh4KS5vZmZzZXQgPCAoeSkub2Zmc2V0KSkKKwogLyoKICAqIFBhcmFtZXRl ciBkZXRlcm1pbmluZyBob3cgb2Z0ZW4gd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHRhaWwgcG9p bnRlcjoKLSAqIHdlIGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xFQU5VUF9ERUxBWSBw YWdlcyBvZiBOT1RJRlkgZGF0YS4gIFRoaXMgaXMKLSAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5 IHdoaWNoIGEgYmFja2VuZCBpbiBhbm90aGVyIGRhdGFiYXNlIG5lZWRzIHRvIGJlCi0gKiBi ZWhpbmQgYmVmb3JlIHdlJ2xsIGRlY2lkZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2 YW5jZSBpdHMgcG9pbnRlci4KKyAqIHdlIGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xF QU5VUF9ERUxBWSBwYWdlcyBvZiBOT1RJRlkgZGF0YS4KICAqCiAgKiBSZXNpc3QgdGhlIHRl bXB0YXRpb24gdG8gbWFrZSB0aGlzIHJlYWxseSBsYXJnZS4gIFdoaWxlIHRoYXQgd291bGQg c2F2ZQogICogd29yayBpbiBzb21lIHBsYWNlcywgaXQgd291bGQgYWRkIGNvc3QgaW4gb3Ro ZXJzLiAgSW4gcGFydGljdWxhciwgdGhpcwpAQCAtMjQ2LDYgKzI5OSw5IEBAIHR5cGVkZWYg c3RydWN0IFF1ZXVlQmFja2VuZFN0YXR1cwogCU9pZAkJCWRib2lkOwkJCS8qIGJhY2tlbmQn cyBkYXRhYmFzZSBPSUQsIG9yIEludmFsaWRPaWQgKi8KIAlQcm9jTnVtYmVyCW5leHRMaXN0 ZW5lcjsJLyogaWQgb2YgbmV4dCBsaXN0ZW5lciwgb3IgSU5WQUxJRF9QUk9DX05VTUJFUiAq LwogCVF1ZXVlUG9zaXRpb24gcG9zOwkJCS8qIGJhY2tlbmQgaGFzIHJlYWQgcXVldWUgdXAg dG8gaGVyZSAqLworCWJvb2wJCXdha2V1cFBlbmRpbmc7CS8qIHNpZ25hbCBzZW50IGJ1dCBu b3QgeWV0IHByb2Nlc3NlZCAqLworCWJvb2wJCWlzQWR2YW5jaW5nOwkvKiBiYWNrZW5kIGlz IGFkdmFuY2luZyBpdHMgcG9zaXRpb24gKi8KKwlRdWV1ZVBvc2l0aW9uIGFkdmFuY2luZ1Bv czsgLyogdGFyZ2V0IHBvc2l0aW9uIGJhY2tlbmQgaXMgYWR2YW5jaW5nIHRvICovCiB9IFF1 ZXVlQmFja2VuZFN0YXR1czsKIAogLyoKQEAgLTI2MCw5ICszMTYsMTAgQEAgdHlwZWRlZiBz dHJ1Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAgKiAoc2luY2Ugbm8gb3RoZXIgYmFja2VuZCB3 aWxsIGluc3BlY3QgaXQpLgogICoKICAqIFdoZW4gaG9sZGluZyBOb3RpZnlRdWV1ZUxvY2sg aW4gRVhDTFVTSVZFIG1vZGUsIGJhY2tlbmRzIGNhbiBpbnNwZWN0IHRoZQotICogZW50cmll cyBvZiBvdGhlciBiYWNrZW5kcyBhbmQgYWxzbyBjaGFuZ2UgdGhlIGhlYWQgcG9pbnRlci4g V2hlbiBob2xkaW5nCi0gKiBib3RoIE5vdGlmeVF1ZXVlTG9jayBhbmQgTm90aWZ5UXVldWVU YWlsTG9jayBpbiBFWENMVVNJVkUgbW9kZSwgYmFja2VuZHMKLSAqIGNhbiBjaGFuZ2UgdGhl IHRhaWwgcG9pbnRlcnMuCisgKiBlbnRyaWVzIG9mIG90aGVyIGJhY2tlbmRzIGFuZCBhbHNv IGNoYW5nZSB0aGUgaGVhZCBwb2ludGVyLiBUaGV5IGNhbgorICogYWxzbyBhZHZhbmNlIG90 aGVyIGJhY2tlbmRzJyBxdWV1ZSBwb3NpdGlvbnMsIHVubGVzcyB0aGV5IGFyZSBub3QKKyAq IGluIHRoZSBwcm9jZXNzIG9mIGRvaW5nIHRoYXQgdGhlbXNlbHZlcy4gV2hlbiBob2xkaW5n IGJvdGggTm90aWZ5UXVldWVMb2NrIGFuZAorICogTm90aWZ5UXVldWVUYWlsTG9jayBpbiBF WENMVVNJVkUgbW9kZSwgYmFja2VuZHMgY2FuIGNoYW5nZSB0aGUgdGFpbCBwb2ludGVycy4K ICAqCiAgKiBTTFJVIGJ1ZmZlciBwb29sIGlzIGRpdmlkZWQgaW4gYmFua3MgYW5kIGJhbmsg d2lzZSBTTFJVIGxvY2sgaXMgdXNlZCBhcwogICogdGhlIGNvbnRyb2wgbG9jayBmb3IgdGhl IHBnX25vdGlmeSBTTFJVIGJ1ZmZlcnMuCkBAIC0yODgsMTEgKzM0NSwxNiBAQCB0eXBlZGVm IHN0cnVjdCBBc3luY1F1ZXVlQ29udHJvbAogCVByb2NOdW1iZXIJZmlyc3RMaXN0ZW5lcjsJ LyogaWQgb2YgZmlyc3QgbGlzdGVuZXIsIG9yCiAJCQkJCQkJCSAqIElOVkFMSURfUFJPQ19O VU1CRVIgKi8KIAlUaW1lc3RhbXBUeiBsYXN0UXVldWVGaWxsV2FybjsJLyogdGltZSBvZiBs YXN0IHF1ZXVlLWZ1bGwgbXNnICovCisJZHNhX2hhbmRsZQljaGFubmVsSGFzaERTQTsKKwlk c2hhc2hfdGFibGVfaGFuZGxlIGNoYW5uZWxIYXNoRFNIOwogCVF1ZXVlQmFja2VuZFN0YXR1 cyBiYWNrZW5kW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IEFzeW5jUXVldWVDb250cm9s OwogCiBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwogCitz dGF0aWMgZHNhX2FyZWEgKmNoYW5uZWxEU0EgPSBOVUxMOworc3RhdGljIGRzaGFzaF90YWJs ZSAqY2hhbm5lbEhhc2ggPSBOVUxMOworCiAjZGVmaW5lIFFVRVVFX0hFQUQJCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+aGVhZCkKICNkZWZpbmUgUVVFVUVfVEFJTAkJCQkJKGFzeW5jUXVl dWVDb250cm9sLT50YWlsKQogI2RlZmluZSBRVUVVRV9TVE9QX1BBR0UJCQkJKGFzeW5jUXVl dWVDb250cm9sLT5zdG9wUGFnZSkKQEAgLTMwMSw2ICszNjMsOSBAQCBzdGF0aWMgQXN5bmNR dWV1ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwogI2RlZmluZSBRVUVVRV9CQUNLRU5E X0RCT0lEKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0uZGJvaWQpCiAjZGVm aW5lIFFVRVVFX05FWFRfTElTVEVORVIoaSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2Vu ZFtpXS5uZXh0TGlzdGVuZXIpCiAjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfUE9TKGkpCQkoYXN5 bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ucG9zKQorI2RlZmluZSBRVUVVRV9CQUNLRU5E X1dBS0VVUF9QRU5ESU5HKGkpCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS53YWtl dXBQZW5kaW5nKQorI2RlZmluZSBRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhpKQkoYXN5 bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0uaXNBZHZhbmNpbmcpCisjZGVmaW5lIFFVRVVF X0JBQ0tFTkRfQURWQU5DSU5HX1BPUyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRb aV0uYWR2YW5jaW5nUG9zKQogCiAvKgogICogVGhlIFNMUlUgYnVmZmVyIGFyZWEgdGhyb3Vn aCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG5vdGlmaWNhdGlvbiBxdWV1ZQpAQCAtMzEzLDE2ICsz NzgsMTYgQEAgc3RhdGljIFNscnVDdGxEYXRhIE5vdGlmeUN0bERhdGE7CiAjZGVmaW5lIFFV RVVFX0ZVTExfV0FSTl9JTlRFUlZBTAk1MDAwCS8qIHdhcm4gYXQgbW9zdCBvbmNlIGV2ZXJ5 IDVzICovCiAKIC8qCi0gKiBsaXN0ZW5DaGFubmVscyBpZGVudGlmaWVzIHRoZSBjaGFubmVs cyB3ZSBhcmUgYWN0dWFsbHkgbGlzdGVuaW5nIHRvCi0gKiAoaWUsIGhhdmUgY29tbWl0dGVk IGEgTElTVEVOIG9uKS4gIEl0IGlzIGEgc2ltcGxlIGxpc3Qgb2YgY2hhbm5lbCBuYW1lcywK KyAqIGxpc3RlbkNoYW5uZWxzSGFzaCBpZGVudGlmaWVzIHRoZSBjaGFubmVscyB3ZSBhcmUg YWN0dWFsbHkgbGlzdGVuaW5nIHRvCisgKiAoaWUsIGhhdmUgY29tbWl0dGVkIGEgTElTVEVO IG9uKS4gIEl0IGlzIGEgaGFzaCB0YWJsZSBvZiBjaGFubmVsIG5hbWVzLAogICogYWxsb2Nh dGVkIGluIFRvcE1lbW9yeUNvbnRleHQuCiAgKi8KLXN0YXRpYyBMaXN0ICpsaXN0ZW5DaGFu bmVscyA9IE5JTDsJLyogbGlzdCBvZiBDIHN0cmluZ3MgKi8KK3N0YXRpYyBIVEFCICpsaXN0 ZW5DaGFubmVsc0hhc2ggPSBOVUxMOwogCiAvKgogICogU3RhdGUgZm9yIHBlbmRpbmcgTElT VEVOL1VOTElTVEVOIGFjdGlvbnMgY29uc2lzdHMgb2YgYW4gb3JkZXJlZCBsaXN0IG9mCiAg KiBhbGwgYWN0aW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uICBB cyBleHBsYWluZWQgYWJvdmUsCi0gKiB3ZSBkb24ndCBhY3R1YWxseSBjaGFuZ2UgbGlzdGVu Q2hhbm5lbHMgdW50aWwgd2UgcmVhY2ggdHJhbnNhY3Rpb24gY29tbWl0LgorICogd2UgZG9u J3QgYWN0dWFsbHkgY2hhbmdlIGxpc3RlbkNoYW5uZWxzSGFzaCB1bnRpbCB3ZSByZWFjaCB0 cmFuc2FjdGlvbiBjb21taXQuCiAgKgogICogVGhlIGxpc3QgaXMga2VwdCBpbiBDdXJUcmFu c2FjdGlvbkNvbnRleHQuICBJbiBzdWJ0cmFuc2FjdGlvbnMsIGVhY2gKICAqIHN1YnRyYW5z YWN0aW9uIGhhcyBpdHMgb3duIGxpc3QgaW4gaXRzIG93biBDdXJUcmFuc2FjdGlvbkNvbnRl eHQsIGJ1dApAQCAtMzkxLDYgKzQ1Niw3IEBAIHR5cGVkZWYgc3RydWN0IE5vdGlmaWNhdGlv bkxpc3QKIAlpbnQJCQluZXN0aW5nTGV2ZWw7CS8qIGN1cnJlbnQgdHJhbnNhY3Rpb24gbmVz dGluZyBkZXB0aCAqLwogCUxpc3QJICAgKmV2ZW50czsJCQkvKiBsaXN0IG9mIE5vdGlmaWNh dGlvbiBzdHJ1Y3RzICovCiAJSFRBQgkgICAqaGFzaHRhYjsJCS8qIGhhc2ggb2YgTm90aWZp Y2F0aW9uSGFzaCBzdHJ1Y3RzLCBvciBOVUxMICovCisJSFRBQgkgICAqY2hhbm5lbEhhc2h0 YWI7IC8qIGhhc2ggb2YgdW5pcXVlIGNoYW5uZWwgbmFtZXMsIG9yIE5VTEwgKi8KIAlzdHJ1 Y3QgTm90aWZpY2F0aW9uTGlzdCAqdXBwZXI7IC8qIGRldGFpbHMgZm9yIHVwcGVyIHRyYW5z YWN0aW9uIGxldmVscyAqLwogfSBOb3RpZmljYXRpb25MaXN0OwogCkBAIC00MDEsNiArNDY3 LDExIEBAIHN0cnVjdCBOb3RpZmljYXRpb25IYXNoCiAJTm90aWZpY2F0aW9uICpldmVudDsJ CS8qID0+IHRoZSBhY3R1YWwgTm90aWZpY2F0aW9uIHN0cnVjdCAqLwogfTsKIAorc3RydWN0 IENoYW5uZWxIYXNoCit7CisJY2hhcgkJY2hhbm5lbFtOQU1FREFUQUxFTl07Cit9OworCiBz dGF0aWMgTm90aWZpY2F0aW9uTGlzdCAqcGVuZGluZ05vdGlmaWVzID0gTlVMTDsKIAogLyoK QEAgLTQxOCw2ICs0ODksMjYgQEAgc3RhdGljIGJvb2wgdW5saXN0ZW5FeGl0UmVnaXN0ZXJl ZCA9IGZhbHNlOwogLyogVHJ1ZSBpZiB3ZSdyZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBhcyBh IGxpc3RlbmVyIGluIGFzeW5jUXVldWVDb250cm9sICovCiBzdGF0aWMgYm9vbCBhbVJlZ2lz dGVyZWRMaXN0ZW5lciA9IGZhbHNlOwogCisvKgorICogUXVldWUgaGVhZCBwb3NpdGlvbnMg Zm9yIGRpcmVjdCBhZHZhbmNlbWVudC4KKyAqIFRoZXNlIGFyZSBjYXB0dXJlZCBkdXJpbmcg UHJlQ29tbWl0X05vdGlmeSB3aGlsZSBob2xkaW5nIHRoZSBoZWF2eXdlaWdodAorICogbG9j ayBvbiBkYXRhYmFzZSAwLCBlbnN1cmluZyBubyBvdGhlciBiYWNrZW5kIGNhbiBpbnNlcnQg bm90aWZpY2F0aW9ucworICogYmV0d2VlbiB0aGVtLiAgU2lnbmFsQmFja2VuZHMgdXNlcyB0 aGVzZSB0byBhZHZhbmNlIGlkbGUgYmFja2VuZHMuCisgKi8KK3N0YXRpYyBRdWV1ZVBvc2l0 aW9uIHF1ZXVlSGVhZEJlZm9yZVdyaXRlOworc3RhdGljIFF1ZXVlUG9zaXRpb24gcXVldWVI ZWFkQWZ0ZXJXcml0ZTsKKworLyoKKyAqIExpc3Qgb2YgY2hhbm5lbHMgd2l0aCBwZW5kaW5n IG5vdGlmaWNhdGlvbnMgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRp YyBMaXN0ICpwZW5kaW5nTm90aWZ5Q2hhbm5lbHMgPSBOSUw7CisKKy8qCisgKiBBcnJheXMg Zm9yIFNpZ25hbEJhY2tlbmRzLgorICovCitzdGF0aWMgaW50MzIgKm5vdGlmeVNpZ25hbFBp ZHMgPSBOVUxMOworc3RhdGljIFByb2NOdW1iZXIgKm5vdGlmeVNpZ25hbFByb2NzID0gTlVM TDsKKwogLyogaGF2ZSB3ZSBhZHZhbmNlZCB0byBhIHBhZ2UgdGhhdCdzIGEgbXVsdGlwbGUg b2YgUVVFVUVfQ0xFQU5VUF9ERUxBWT8gKi8KIHN0YXRpYyBib29sIHRyeUFkdmFuY2VUYWls ID0gZmFsc2U7CiAKQEAgLTQyOCwxMSArNTE5LDEwIEBAIGJvb2wJCVRyYWNlX25vdGlmeSA9 IGZhbHNlOwogaW50CQkJbWF4X25vdGlmeV9xdWV1ZV9wYWdlcyA9IDEwNDg1NzY7CiAKIC8q IGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50NjQgYXN5 bmNRdWV1ZVBhZ2VEaWZmKGludDY0IHAsIGludDY0IHEpOwogc3RhdGljIGlubGluZSBib29s IGFzeW5jUXVldWVQYWdlUHJlY2VkZXMoaW50NjQgcCwgaW50NjQgcSk7CiBzdGF0aWMgdm9p ZCBxdWV1ZV9saXN0ZW4oTGlzdGVuQWN0aW9uS2luZCBhY3Rpb24sIGNvbnN0IGNoYXIgKmNo YW5uZWwpOwogc3RhdGljIHZvaWQgQXN5bmNfVW5saXN0ZW5PbkV4aXQoaW50IGNvZGUsIERh dHVtIGFyZyk7Ci1zdGF0aWMgdm9pZCBFeGVjX0xpc3RlblByZUNvbW1pdCh2b2lkKTsKK3N0 YXRpYyB2b2lkIEV4ZWNfTGlzdGVuUHJlQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpOwog c3RhdGljIHZvaWQgRXhlY19MaXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hhbm5lbCk7CiBz dGF0aWMgdm9pZCBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpOwog c3RhdGljIHZvaWQgRXhlY19Vbmxpc3RlbkFsbENvbW1pdCh2b2lkKTsKQEAgLTQ1NiwxNiAr NTQ2LDkgQEAgc3RhdGljIHZvaWQgQWRkRXZlbnRUb1BlbmRpbmdOb3RpZmllcyhOb3RpZmlj YXRpb24gKm4pOwogc3RhdGljIHVpbnQzMiBub3RpZmljYXRpb25faGFzaChjb25zdCB2b2lk ICprZXksIFNpemUga2V5c2l6ZSk7CiBzdGF0aWMgaW50CW5vdGlmaWNhdGlvbl9tYXRjaChj b25zdCB2b2lkICprZXkxLCBjb25zdCB2b2lkICprZXkyLCBTaXplIGtleXNpemUpOwogc3Rh dGljIHZvaWQgQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZvaWQpOwotCi0vKgot ICogQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBxdWV1ZSBwYWdlIG51bWJl cnMuCi0gKiBQcmV2aW91c2x5IHRoaXMgZnVuY3Rpb24gYWNjb3VudGVkIGZvciBhIHdyYXBh cm91bmQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50NjQKLWFzeW5jUXVldWVQYWdlRGlmZihp bnQ2NCBwLCBpbnQ2NCBxKQotewotCXJldHVybiBwIC0gcTsKLX0KK3N0YXRpYyBpbmxpbmUg dm9pZCBDaGFubmVsSGFzaFByZXBhcmVLZXkoQ2hhbm5lbEhhc2hLZXkgKmtleSwgT2lkIGRi b2lkLCBjb25zdCBjaGFyICpjaGFubmVsKTsKK3N0YXRpYyBkc2hhc2hfaGFzaCBjaGFubmVs SGFzaEZ1bmMoY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwgdm9pZCAqYXJnKTsKK3N0 YXRpYyB2b2lkIGluaXRDaGFubmVsSGFzaCh2b2lkKTsKIAogLyoKICAqIERldGVybWluZXMg d2hldGhlciBwIHByZWNlZGVzIHEuCkBAIC00NzcsNiArNTYwLDEyNiBAQCBhc3luY1F1ZXVl UGFnZVByZWNlZGVzKGludDY0IHAsIGludDY0IHEpCiAJcmV0dXJuIHAgPCBxOwogfQogCisv KgorICogY2hhbm5lbEhhc2hGdW5jCisgKgkJSGFzaCBmdW5jdGlvbiBmb3IgY2hhbm5lbCBr ZXlzLgorICovCitzdGF0aWMgZHNoYXNoX2hhc2gKK2NoYW5uZWxIYXNoRnVuYyhjb25zdCB2 b2lkICprZXksIHNpemVfdCBzaXplLCB2b2lkICphcmcpCit7CisJY29uc3QgQ2hhbm5lbEhh c2hLZXkgKmsgPSAoY29uc3QgQ2hhbm5lbEhhc2hLZXkgKikga2V5OworCWRzaGFzaF9oYXNo IGg7CisKKwloID0gRGF0dW1HZXRVSW50MzIoaGFzaF91aW50MzIoay0+ZGJvaWQpKTsKKwlo IF49IERhdHVtR2V0VUludDMyKGhhc2hfYW55KChjb25zdCB1bnNpZ25lZCBjaGFyICopIGst PmNoYW5uZWwsCisJCQkJCQkJCSBzdHJubGVuKGstPmNoYW5uZWwsIE5BTUVEQVRBTEVOKSkp OworCisJcmV0dXJuIGg7Cit9CisKKy8qIHBhcmFtZXRlcnMgZm9yIHRoZSBjaGFubmVsIGhh c2ggdGFibGUgKi8KK3N0YXRpYyBjb25zdCBkc2hhc2hfcGFyYW1ldGVycyBjaGFubmVsRFNI UGFyYW1zID0geworCXNpemVvZihDaGFubmVsSGFzaEtleSksCisJc2l6ZW9mKENoYW5uZWxF bnRyeSksCisJZHNoYXNoX21lbWNtcCwKKwljaGFubmVsSGFzaEZ1bmMsCisJZHNoYXNoX21l bWNweSwKKwlMV1RSQU5DSEVfTk9USUZZX0NIQU5ORUxfSEFTSAorfTsKKworLyoKKyAqIGlu aXRDaGFubmVsSGFzaAorICoJCUxhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNoYW5uZWwg aGFzaCB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2luaXRDaGFubmVsSGFzaCh2b2lkKQor eworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2Ug YWxyZWFkeSBkaWQgdGhpcyAqLworCWlmIChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhh c2hEU0ggIT0gRFNIQVNIX0hBTkRMRV9JTlZBTElEICYmCisJCWNoYW5uZWxIYXNoICE9IE5V TEwpCisJCXJldHVybjsKKworCS8qIE90aGVyd2lzZSwgdXNlIGEgbG9jayB0byBlbnN1cmUg b25seSBvbmUgcHJvY2VzcyBjcmVhdGVzIHRoZSB0YWJsZSAqLworCUxXTG9ja0FjcXVpcmUo Tm90aWZ5UXVldWVMb2NrLCBMV19FWENMVVNJVkUpOworCisJLyogQmUgc3VyZSBhbnkgbG9j YWwgbWVtb3J5IGFsbG9jYXRlZCBieSBEU0Egcm91dGluZXMgaXMgcGVyc2lzdGVudCAqLwor CW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7 CisKKwlpZiAoYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNIID09IERTSEFTSF9I QU5ETEVfSU5WQUxJRCkKKwl7CisJCS8qIEluaXRpYWxpemUgZHluYW1pYyBzaGFyZWQgaGFz aCB0YWJsZSBmb3IgY2hhbm5lbCBoYXNoICovCisJCWNoYW5uZWxEU0EgPSBkc2FfY3JlYXRl KExXVFJBTkNIRV9OT1RJRllfQ0hBTk5FTF9IQVNIKTsKKwkJZHNhX3BpbihjaGFubmVsRFNB KTsKKwkJZHNhX3Bpbl9tYXBwaW5nKGNoYW5uZWxEU0EpOworCQljaGFubmVsSGFzaCA9IGRz aGFzaF9jcmVhdGUoY2hhbm5lbERTQSwgJmNoYW5uZWxEU0hQYXJhbXMsIE5VTEwpOworCisJ CS8qIFN0b3JlIGhhbmRsZXMgaW4gc2hhcmVkIG1lbW9yeSBmb3Igb3RoZXIgYmFja2VuZHMg dG8gdXNlICovCisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTQSA9IGRzYV9n ZXRfaGFuZGxlKGNoYW5uZWxEU0EpOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhh c2hEU0ggPQorCQkJZHNoYXNoX2dldF9oYXNoX3RhYmxlX2hhbmRsZShjaGFubmVsSGFzaCk7 CisJfQorCWVsc2UgaWYgKCFjaGFubmVsSGFzaCkKKwl7CisJCS8qIEF0dGFjaCB0byBleGlz dGluZyBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlICovCisJCWNoYW5uZWxEU0EgPSBkc2Ff YXR0YWNoKGFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTQSk7CisJCWRzYV9waW5f bWFwcGluZyhjaGFubmVsRFNBKTsKKwkJY2hhbm5lbEhhc2ggPSBkc2hhc2hfYXR0YWNoKGNo YW5uZWxEU0EsICZjaGFubmVsRFNIUGFyYW1zLAorCQkJCQkJCQkJYXN5bmNRdWV1ZUNvbnRy b2wtPmNoYW5uZWxIYXNoRFNILAorCQkJCQkJCQkJTlVMTCk7CisJfQorCisJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVM b2NrKTsKK30KKworLyoKKyAqIGluaXRMaXN0ZW5DaGFubmVsc0hhc2gKKyAqCQlMYXp5IGlu aXRpYWxpemF0aW9uIG9mIHRoZSBsb2NhbCBsaXN0ZW4gY2hhbm5lbHMgaGFzaCB0YWJsZS4K KyAqLworc3RhdGljIHZvaWQKK2luaXRMaXN0ZW5DaGFubmVsc0hhc2godm9pZCkKK3sKKwlI QVNIQ1RMCQloYXNoX2N0bDsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2UgYWxyZWFkeSBkaWQg dGhpcyAqLworCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggIT0gTlVMTCkKKwkJcmV0dXJuOwor CisJLyogSW5pdGlhbGl6ZSBsb2NhbCBoYXNoIHRhYmxlIGZvciB0aGlzIGJhY2tlbmQncyBs aXN0ZW5lZCBjaGFubmVscyAqLworCW1lbXNldCgmaGFzaF9jdGwsIDAsIHNpemVvZihoYXNo X2N0bCkpOworCWhhc2hfY3RsLmtleXNpemUgPSBOQU1FREFUQUxFTjsKKwloYXNoX2N0bC5l bnRyeXNpemUgPSBzaXplb2Yoc3RydWN0IENoYW5uZWxIYXNoKTsKKworCWxpc3RlbkNoYW5u ZWxzSGFzaCA9CisJCWhhc2hfY3JlYXRlKCJMaXN0ZW4gQ2hhbm5lbHMiLAorCQkJCQk2NCwK KwkJCQkJJmhhc2hfY3RsLAorCQkJCQlIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MpOworfQor CisvKgorICogaW5pdFNpZ25hbEFycmF5cworICoJCUxhenkgaW5pdGlhbGl6YXRpb24gb2Yg dGhlIHNpZ25hbCBhcnJheXMuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0U2lnbmFsQXJyYXlz KHZvaWQpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJaWYgKG5vdGlmeVNp Z25hbFByb2NzICE9IE5VTEwpCisJCXJldHVybjsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisKKwlpZiAobm90aWZ5U2lnbmFs UGlkcyA9PSBOVUxMKQorCQlub3RpZnlTaWduYWxQaWRzID0gKGludDMyICopIHBhbGxvYyhN YXhCYWNrZW5kcyAqIHNpemVvZihpbnQzMikpOworCW5vdGlmeVNpZ25hbFByb2NzID0gKFBy b2NOdW1iZXIgKikgcGFsbG9jKE1heEJhY2tlbmRzICogc2l6ZW9mKFByb2NOdW1iZXIpKTsK KworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKwogLyoKICAqIFJl cG9ydCBzcGFjZSBuZWVkZWQgZm9yIG91ciBzaGFyZWQgbWVtb3J5IGFyZWEKICAqLwpAQCAt NTIwLDEyICs3MjMsMTcgQEAgQXN5bmNTaG1lbUluaXQodm9pZCkKIAkJUVVFVUVfU1RPUF9Q QUdFID0gMDsKIAkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBJTlZBTElEX1BST0NfTlVNQkVS OwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFzdFF1ZXVlRmlsbFdhcm4gPSAwOworCQlhc3lu Y1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJ CWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9IERTSEFTSF9IQU5ETEVfSU5W QUxJRDsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBNYXhCYWNrZW5kczsgaSsrKQogCQl7CiAJ CQlRVUVVRV9CQUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7CiAJCQlRVUVVRV9CQUNLRU5E X0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05FWFRfTElTVEVORVIoaSkgPSBJ TlZBTElEX1BST0NfTlVNQkVSOwogCQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9CQUNLRU5EX1BP UyhpKSwgMCwgMCk7CisJCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfQURWQU5DSU5H X1BPUyhpKSwgMCwgMCk7CisJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0g ZmFsc2U7CisJCQlRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhpKSA9IGZhbHNlOwogCQl9 CiAJfQogCkBAIC02NTYsNiArODY0LDcgQEAgQXN5bmNfTm90aWZ5KGNvbnN0IGNoYXIgKmNo YW5uZWwsIGNvbnN0IGNoYXIgKnBheWxvYWQpCiAJCW5vdGlmaWVzLT5ldmVudHMgPSBsaXN0 X21ha2UxKG4pOwogCQkvKiBXZSBjZXJ0YWlubHkgZG9uJ3QgbmVlZCBhIGhhc2h0YWJsZSB5 ZXQgKi8KIAkJbm90aWZpZXMtPmhhc2h0YWIgPSBOVUxMOworCQlub3RpZmllcy0+Y2hhbm5l bEhhc2h0YWIgPSBOVUxMOwogCQlub3RpZmllcy0+dXBwZXIgPSBwZW5kaW5nTm90aWZpZXM7 CiAJCXBlbmRpbmdOb3RpZmllcyA9IG5vdGlmaWVzOwogCX0KQEAgLTY4Miw3ICs4OTEsNyBA QCBBc3luY19Ob3RpZnkoY29uc3QgY2hhciAqY2hhbm5lbCwgY29uc3QgY2hhciAqcGF5bG9h ZCkKICAqCQlDb21tb24gY29kZSBmb3IgbGlzdGVuLCB1bmxpc3RlbiwgdW5saXN0ZW4gYWxs IGNvbW1hbmRzLgogICoKICAqCQlBZGRzIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0IG9mIHBl bmRpbmcgYWN0aW9ucy4KLSAqCQlBY3R1YWwgdXBkYXRlIG9mIHRoZSBsaXN0ZW5DaGFubmVs cyBsaXN0IGhhcHBlbnMgZHVyaW5nIHRyYW5zYWN0aW9uCisgKgkJQWN0dWFsIHVwZGF0ZSBv ZiB0aGUgbGlzdGVuQ2hhbm5lbHNIYXNoIGhhcHBlbnMgZHVyaW5nIHRyYW5zYWN0aW9uCiAg KgkJY29tbWl0LgogICovCiBzdGF0aWMgdm9pZApAQCAtNzgyLDMwICs5OTEsNDkgQEAgQXN5 bmNfVW5saXN0ZW5BbGwodm9pZCkKICAqIFNRTCBmdW5jdGlvbjogcmV0dXJuIGEgc2V0IG9m IHRoZSBjaGFubmVsIG5hbWVzIHRoaXMgYmFja2VuZCBpcyBhY3RpdmVseQogICogbGlzdGVu aW5nIHRvLgogICoKLSAqIE5vdGU6IHRoaXMgY29kaW5nIHJlbGllcyBvbiB0aGUgZmFjdCB0 aGF0IHRoZSBsaXN0ZW5DaGFubmVscyBsaXN0IGNhbm5vdAorICogTm90ZTogdGhpcyBjb2Rp bmcgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgdGhlIGxpc3RlbkNoYW5uZWxzSGFzaCBjYW5u b3QKICAqIGNoYW5nZSB3aXRoaW4gYSB0cmFuc2FjdGlvbi4KICAqLwogRGF0dW0KIHBnX2xp c3RlbmluZ19jaGFubmVscyhQR19GVU5DVElPTl9BUkdTKQogewogCUZ1bmNDYWxsQ29udGV4 dCAqZnVuY2N0eDsKKwlIQVNIX1NFUV9TVEFUVVMgKnN0YXR1czsKIAogCS8qIHN0dWZmIGRv bmUgb25seSBvbiB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgZnVuY3Rpb24gKi8KIAlpZiAoU1JG X0lTX0ZJUlNUQ0FMTCgpKQogCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCiAJ CS8qIGNyZWF0ZSBhIGZ1bmN0aW9uIGNvbnRleHQgZm9yIGNyb3NzLWNhbGwgcGVyc2lzdGVu Y2UgKi8KIAkJZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOworCisJCS8qIEluaXRp YWxpemUgaGFzaCB0YWJsZSBpdGVyYXRpb24gaWYgd2UgaGF2ZSBhbnkgY2hhbm5lbHMgKi8K KwkJaWYgKGxpc3RlbkNoYW5uZWxzSGFzaCAhPSBOVUxMKQorCQl7CisJCQlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0 eCk7CisJCQlzdGF0dXMgPSAoSEFTSF9TRVFfU1RBVFVTICopIHBhbGxvYyhzaXplb2YoSEFT SF9TRVFfU1RBVFVTKSk7CisJCQloYXNoX3NlcV9pbml0KHN0YXR1cywgbGlzdGVuQ2hhbm5l bHNIYXNoKTsKKwkJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IHN0YXR1czsKKwkJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWZ1bmNj dHgtPnVzZXJfZmN0eCA9IE5VTEw7CisJCX0KIAl9CiAKIAkvKiBzdHVmZiBkb25lIG9uIGV2 ZXJ5IGNhbGwgb2YgdGhlIGZ1bmN0aW9uICovCiAJZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NF VFVQKCk7CisJc3RhdHVzID0gKEhBU0hfU0VRX1NUQVRVUyAqKSBmdW5jY3R4LT51c2VyX2Zj dHg7CiAKLQlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgbGlzdF9sZW5ndGgobGlzdGVuQ2hh bm5lbHMpKQorCWlmIChzdGF0dXMgIT0gTlVMTCkKIAl7Ci0JCWNoYXIJICAgKmNoYW5uZWwg PSAoY2hhciAqKSBsaXN0X250aChsaXN0ZW5DaGFubmVscywKLQkJCQkJCQkJCQkJCWZ1bmNj dHgtPmNhbGxfY250cik7CisJCXN0cnVjdCBDaGFubmVsSGFzaCAqZW50cnk7CiAKLQkJU1JG X1JFVFVSTl9ORVhUKGZ1bmNjdHgsIENTdHJpbmdHZXRUZXh0RGF0dW0oY2hhbm5lbCkpOwor CQllbnRyeSA9IChzdHJ1Y3QgQ2hhbm5lbEhhc2ggKikgaGFzaF9zZXFfc2VhcmNoKHN0YXR1 cyk7CisJCWlmIChlbnRyeSAhPSBOVUxMKQorCQkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgs IENTdHJpbmdHZXRUZXh0RGF0dW0oZW50cnktPmNoYW5uZWwpKTsKIAl9CiAKIAlTUkZfUkVU VVJOX0RPTkUoZnVuY2N0eCk7CkBAIC04NzcsNyArMTEwNSw3IEBAIFByZUNvbW1pdF9Ob3Rp Znkodm9pZCkKIAkJCXN3aXRjaCAoYWN0cmVjLT5hY3Rpb24pCiAJCQl7CiAJCQkJY2FzZSBM SVNURU5fTElTVEVOOgotCQkJCQlFeGVjX0xpc3RlblByZUNvbW1pdCgpOworCQkJCQlFeGVj X0xpc3RlblByZUNvbW1pdChhY3RyZWMtPmNoYW5uZWwpOwogCQkJCQlicmVhazsKIAkJCQlj YXNlIExJU1RFTl9VTkxJU1RFTjoKIAkJCQkJLyogdGhlcmUgaXMgbm8gRXhlY19Vbmxpc3Rl blByZUNvbW1pdCgpICovCkBAIC04OTMsNiArMTEyMSwzNiBAQCBQcmVDb21taXRfTm90aWZ5 KHZvaWQpCiAJaWYgKHBlbmRpbmdOb3RpZmllcykKIAl7CiAJCUxpc3RDZWxsICAgKm5leHRO b3RpZnk7CisJCWJvb2wJCWZpcnN0SXRlcmF0aW9uID0gdHJ1ZTsKKworCQkvKgorCQkgKiBC dWlsZCBsaXN0IG9mIHVuaXF1ZSBjaGFubmVscyBmb3IgU2lnbmFsQmFja2VuZHMoKS4KKwkJ ICoKKwkJICogSWYgd2UgaGF2ZSBhIGNoYW5uZWxIYXNodGFiLCB1c2UgaXQgdG8gZWZmaWNp ZW50bHkgZ2V0IHRoZSB1bmlxdWUKKwkJICogY2hhbm5lbHMuICBPdGhlcndpc2UsIGZhbGwg YmFjayB0byB0aGUgbGluZWFyIGFwcHJvYWNoLgorCQkgKi8KKwkJcGVuZGluZ05vdGlmeUNo YW5uZWxzID0gTklMOworCQlpZiAocGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYiAh PSBOVUxMKQorCQl7CisJCQlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOworCQkJc3RydWN0IENo YW5uZWxIYXNoICpjaGFubmVsRW50cnk7CisKKwkJCWhhc2hfc2VxX2luaXQoJnN0YXR1cywg cGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYik7CisJCQl3aGlsZSAoKGNoYW5uZWxF bnRyeSA9IChzdHJ1Y3QgQ2hhbm5lbEhhc2ggKikgaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMp KSAhPSBOVUxMKQorCQkJCXBlbmRpbmdOb3RpZnlDaGFubmVscyA9IGxhcHBlbmQocGVuZGlu Z05vdGlmeUNoYW5uZWxzLCBjaGFubmVsRW50cnktPmNoYW5uZWwpOworCQl9CisJCWVsc2UK KwkJeworCQkJLyogTGluZWFyIGFwcHJvYWNoIGZvciBzbWFsbCBudW1iZXIgb2Ygbm90aWZp Y2F0aW9ucyAqLworCQkJZm9yZWFjaF9wdHIoTm90aWZpY2F0aW9uLCBuLCBwZW5kaW5nTm90 aWZpZXMtPmV2ZW50cykKKwkJCXsKKwkJCQljaGFyCSAgICpjaGFubmVsID0gbi0+ZGF0YTsK KworCQkJCS8qIEFkZCBpZiBub3QgYWxyZWFkeSBpbiBsaXN0ICovCisJCQkJaWYgKCFsaXN0 X21lbWJlcl9wdHIocGVuZGluZ05vdGlmeUNoYW5uZWxzLCBjaGFubmVsKSkKKwkJCQkJcGVu ZGluZ05vdGlmeUNoYW5uZWxzID0gbGFwcGVuZChwZW5kaW5nTm90aWZ5Q2hhbm5lbHMsIGNo YW5uZWwpOworCQkJfQorCQl9CiAKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2 ZSBhbiBYSUQgYXNzaWduZWQgdG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCkBAIC05MDIs NiArMTE2MCwxNCBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJCSAqLwogCQkodm9pZCkg R2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKIAorCQkvKgorCQkgKiBXZSB3aWxsIGJlIGNh bGxpbmcgU2lnbmFsQmFja2VuZHMoKSBhdCBBdENvbW1pdF9Ob3RpZnkgdGltZSwgc28KKwkJ ICogbWFrZSBzdXJlIGl0cyBhdXhpbGlhcnkgZGF0YSBzdHJ1Y3R1cmVzIGV4aXN0IG5vdywg d2hlcmUgYW4gRVJST1IKKwkJICogd2lsbCBzdGlsbCBhYm9ydCB0aGUgdHJhbnNhY3Rpb24g Y2xlYW5seS4KKwkJICovCisJCWluaXRTaWduYWxBcnJheXMoKTsKKwkJaW5pdENoYW5uZWxI YXNoKCk7CisKIAkJLyoKIAkJICogU2VyaWFsaXplIHdyaXRlcnMgYnkgYWNxdWlyaW5nIGEg c3BlY2lhbCBsb2NrIHRoYXQgd2UgaG9sZCB0aWxsCiAJCSAqIGFmdGVyIGNvbW1pdC4gIFRo aXMgZW5zdXJlcyB0aGF0IHF1ZXVlIGVudHJpZXMgYXBwZWFyIGluIGNvbW1pdApAQCAtOTIx LDYgKzExODcsMjIgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCQlMb2NrU2hhcmVkT2Jq ZWN0KERhdGFiYXNlUmVsYXRpb25JZCwgSW52YWxpZE9pZCwgMCwKIAkJCQkJCSBBY2Nlc3NF eGNsdXNpdmVMb2NrKTsKIAorCQkvKgorCQkgKiBGb3IgdGhlIGRpcmVjdCBhZHZhbmNlbWVu dCBvcHRpbWl6YXRpb24gaW4gU2lnbmFsQmFja2VuZHMoKSwgd2UKKwkJICogbmVlZCB0byBl bnN1cmUgdGhhdCBubyBvdGhlciBiYWNrZW5kIGNhbiBpbnNlcnQgcXVldWUgZW50cmllcwor CQkgKiBiZXR3ZWVuIHF1ZXVlSGVhZEJlZm9yZVdyaXRlIGFuZCBxdWV1ZUhlYWRBZnRlcldy aXRlLiAgVGhlCisJCSAqIGhlYXZ5d2VpZ2h0IGxvY2sgYWJvdmUgcHJvdmlkZXMgdGhpcyBn dWFyYW50ZWUsIHNpbmNlIGl0IHNlcmlhbGl6ZXMKKwkJICogYWxsIHdyaXRlcnMuCisJCSAq CisJCSAqIE5vdGU6IGlmIHRoZSBoZWF2eXdlaWdodCBsb2NrIHdlcmUgZXZlciByZW1vdmVk IGZvciBzY2FsYWJpbGl0eQorCQkgKiByZWFzb25zLCB3ZSBjb3VsZCBhY2hpZXZlIHRoZSBz YW1lIGd1YXJhbnRlZSBieSBob2xkaW5nCisJCSAqIE5vdGlmeVF1ZXVlTG9jayBpbiBFWENM VVNJVkUgbW9kZSBhY3Jvc3MgYWxsIG91ciBpbnNlcnRpb25zLCByYXRoZXIKKwkJICogdGhh biByZWxlYXNpbmcgYW5kIHJlYWNxdWlyaW5nIGl0IGZvciBlYWNoIHBhZ2UgYXMgd2UgZG8g YmVsb3cuCisJCSAqLworCisJCS8qIEluaXRpYWxpemUgcXVldWVIZWFkQmVmb3JlV3JpdGUg dG8gYSBzYWZlIGRlZmF1bHQgKi8KKwkJU0VUX1FVRVVFX1BPUyhxdWV1ZUhlYWRCZWZvcmVX cml0ZSwgMCwgMCk7CisKIAkJLyogTm93IHB1c2ggdGhlIG5vdGlmaWNhdGlvbnMgaW50byB0 aGUgcXVldWUgKi8KIAkJbmV4dE5vdGlmeSA9IGxpc3RfaGVhZChwZW5kaW5nTm90aWZpZXMt PmV2ZW50cyk7CiAJCXdoaWxlIChuZXh0Tm90aWZ5ICE9IE5VTEwpCkBAIC05MzgsMTIgKzEy MjAsMjAgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCQkJICogcG9pbnQgaW4gdGltZSB3 ZSBjYW4gc3RpbGwgcm9sbCB0aGUgdHJhbnNhY3Rpb24gYmFjay4KIAkJCSAqLwogCQkJTFdM b2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCQlpZiAoZmly c3RJdGVyYXRpb24pCisJCQl7CisJCQkJcXVldWVIZWFkQmVmb3JlV3JpdGUgPSBRVUVVRV9I RUFEOworCQkJCWZpcnN0SXRlcmF0aW9uID0gZmFsc2U7CisJCQl9CisKIAkJCWFzeW5jUXVl dWVGaWxsV2FybmluZygpOwogCQkJaWYgKGFzeW5jUXVldWVJc0Z1bGwoKSkKIAkJCQllcmVw b3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VF REVEKSwKIAkJCQkJCSBlcnJtc2coInRvbyBtYW55IG5vdGlmaWNhdGlvbnMgaW4gdGhlIE5P VElGWSBxdWV1ZSIpKSk7CiAJCQluZXh0Tm90aWZ5ID0gYXN5bmNRdWV1ZUFkZEVudHJpZXMo bmV4dE5vdGlmeSk7CisJCQlxdWV1ZUhlYWRBZnRlcldyaXRlID0gUVVFVUVfSEVBRDsKKwog CQkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQl9CiAKQEAgLTk1Niw3ICsx MjQ2LDcgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogICoKICAqCQlUaGlzIGlzIGNhbGxl ZCBhdCB0cmFuc2FjdGlvbiBjb21taXQsIGFmdGVyIGNvbW1pdHRpbmcgdG8gY2xvZy4KICAq Ci0gKgkJVXBkYXRlIGxpc3RlbkNoYW5uZWxzIGFuZCBjbGVhciB0cmFuc2FjdGlvbi1sb2Nh bCBzdGF0ZS4KKyAqCQlVcGRhdGUgbGlzdGVuQ2hhbm5lbHNIYXNoIGFuZCBjbGVhciB0cmFu c2FjdGlvbi1sb2NhbCBzdGF0ZS4KICAqCiAgKgkJSWYgd2UgaXNzdWVkIGFueSBub3RpZmlj YXRpb25zIGluIHRoZSB0cmFuc2FjdGlvbiwgc2VuZCBzaWduYWxzIHRvCiAgKgkJbGlzdGVu aW5nIGJhY2tlbmRzIChwb3NzaWJseSBpbmNsdWRpbmcgb3Vyc2VsdmVzKSB0byBwcm9jZXNz IHRoZW0uCkBAIC0xMDAxLDcgKzEyOTEsOCBAQCBBdENvbW1pdF9Ob3RpZnkodm9pZCkKIAl9 CiAKIAkvKiBJZiBubyBsb25nZXIgbGlzdGVuaW5nIHRvIGFueXRoaW5nLCBnZXQgb3V0IG9m IGxpc3RlbmVyIGFycmF5ICovCi0JaWYgKGFtUmVnaXN0ZXJlZExpc3RlbmVyICYmIGxpc3Rl bkNoYW5uZWxzID09IE5JTCkKKwlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIgJiYKKwkJKGxp c3RlbkNoYW5uZWxzSGFzaCA9PSBOVUxMIHx8IGhhc2hfZ2V0X251bV9lbnRyaWVzKGxpc3Rl bkNoYW5uZWxzSGFzaCkgPT0gMCkpCiAJCWFzeW5jUXVldWVVbnJlZ2lzdGVyKCk7CiAKIAkv KgpAQCAtMTAzNywxNDcgKzEzMjgsMjcwIEBAIEF0Q29tbWl0X05vdGlmeSh2b2lkKQogICog VGhpcyBmdW5jdGlvbiBtdXN0IG1ha2Ugc3VyZSB3ZSBhcmUgcmVhZHkgdG8gY2F0Y2ggYW55 IGluY29taW5nIG1lc3NhZ2VzLgogICovCiBzdGF0aWMgdm9pZAotRXhlY19MaXN0ZW5QcmVD b21taXQodm9pZCkKK0V4ZWNfTGlzdGVuUHJlQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwp CiB7Ci0JUXVldWVQb3NpdGlvbiBoZWFkOwotCVF1ZXVlUG9zaXRpb24gbWF4OwotCVByb2NO dW1iZXIJcHJldkxpc3RlbmVyOworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlDaGFubmVsRW50 cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOworCUxpc3RlbmVyRW50cnkgKmxpc3RlbmVyczsK IAogCS8qCi0JICogTm90aGluZyB0byBkbyBpZiB3ZSBhcmUgYWxyZWFkeSBsaXN0ZW5pbmcg dG8gc29tZXRoaW5nLCBub3IgaWYgd2UKLQkgKiBhbHJlYWR5IHJhbiB0aGlzIHJvdXRpbmUg aW4gdGhpcyB0cmFuc2FjdGlvbi4KKwkgKiBJZiB0aGlzIGlzIG91ciBmaXJzdCBMSVNURU4g aW4gdGhpcyB0cmFuc2FjdGlvbiwgcmVnaXN0ZXIgYXMgYQorCSAqIGxpc3RlbmVyLgogCSAq LwotCWlmIChhbVJlZ2lzdGVyZWRMaXN0ZW5lcikKLQkJcmV0dXJuOwotCi0JaWYgKFRyYWNl X25vdGlmeSkKLQkJZWxvZyhERUJVRzEsICJFeGVjX0xpc3RlblByZUNvbW1pdCglZCkiLCBN eVByb2NQaWQpOwotCi0JLyoKLQkgKiBCZWZvcmUgcmVnaXN0ZXJpbmcsIG1ha2Ugc3VyZSB3 ZSB3aWxsIHVubGlzdGVuIGJlZm9yZSBkeWluZy4gKE5vdGU6Ci0JICogdGhpcyBhY3Rpb24g ZG9lcyBub3QgZ2V0IHVuZG9uZSBpZiB3ZSBhYm9ydCBsYXRlci4pCi0JICovCi0JaWYgKCF1 bmxpc3RlbkV4aXRSZWdpc3RlcmVkKQorCWlmICghYW1SZWdpc3RlcmVkTGlzdGVuZXIpCiAJ ewotCQliZWZvcmVfc2htZW1fZXhpdChBc3luY19Vbmxpc3Rlbk9uRXhpdCwgMCk7Ci0JCXVu bGlzdGVuRXhpdFJlZ2lzdGVyZWQgPSB0cnVlOwotCX0KKwkJUXVldWVQb3NpdGlvbiBoZWFk OworCQlRdWV1ZVBvc2l0aW9uIG1heDsKKwkJUHJvY051bWJlcglwcmV2TGlzdGVuZXI7CiAK LQkvKgotCSAqIFRoaXMgaXMgb3VyIGZpcnN0IExJU1RFTiwgc28gZXN0YWJsaXNoIG91ciBw b2ludGVyLgotCSAqCi0JICogV2Ugc2V0IG91ciBwb2ludGVyIHRvIHRoZSBnbG9iYWwgdGFp bCBwb2ludGVyIGFuZCB0aGVuIG1vdmUgaXQgZm9yd2FyZAotCSAqIG92ZXIgYWxyZWFkeS1j b21taXR0ZWQgbm90aWZpY2F0aW9ucy4gIFRoaXMgZW5zdXJlcyB3ZSBjYW5ub3QgbWlzcyBh bnkKLQkgKiBub3QteWV0LWNvbW1pdHRlZCBub3RpZmljYXRpb25zLiAgV2UgbWlnaHQgZ2V0 IGEgZmV3IG1vcmUgYnV0IHRoYXQKLQkgKiBkb2Vzbid0IGh1cnQuCi0JICoKLQkgKiBJbiBz b21lIHNjZW5hcmlvcyB0aGVyZSBtaWdodCBiZSBhIGxvdCBvZiBjb21taXR0ZWQgbm90aWZp Y2F0aW9ucyB0aGF0Ci0JICogaGF2ZSBub3QgeWV0IGJlZW4gcHJ1bmVkIGF3YXkgKGJlY2F1 c2Ugc29tZSBiYWNrZW5kIGlzIGJlaW5nIGxhenkgYWJvdXQKLQkgKiByZWFkaW5nIHRoZW0p LiAgVG8gcmVkdWNlIG91ciBzdGFydHVwIHRpbWUsIHdlIGNhbiBsb29rIGF0IG90aGVyCi0J ICogYmFja2VuZHMgYW5kIGFkb3B0IHRoZSBtYXhpbXVtICJwb3MiIHBvaW50ZXIgb2YgYW55 IGJhY2tlbmQgdGhhdCdzIGluCi0JICogb3VyIGRhdGFiYXNlOyBhbnkgbm90aWZpY2F0aW9u cyBpdCdzIGFscmVhZHkgYWR2YW5jZWQgb3ZlciBhcmUgc3VyZWx5Ci0JICogY29tbWl0dGVk IGFuZCBuZWVkIG5vdCBiZSByZS1leGFtaW5lZCBieSB1cy4gIChXZSBtdXN0IGNvbnNpZGVy IG9ubHkKLQkgKiBiYWNrZW5kcyBjb25uZWN0ZWQgdG8gb3VyIERCLCBiZWNhdXNlIG90aGVy cyB3aWxsIG5vdCBoYXZlIGJvdGhlcmVkIHRvCi0JICogY2hlY2sgY29tbWl0dGVkLW5lc3Mg b2Ygbm90aWZpY2F0aW9ucyBpbiBvdXIgREIuKQotCSAqCi0JICogV2UgbmVlZCBleGNsdXNp dmUgbG9jayBoZXJlIHNvIHdlIGNhbiBsb29rIGF0IG90aGVyIGJhY2tlbmRzJyBlbnRyaWVz Ci0JICogYW5kIG1hbmlwdWxhdGUgdGhlIGxpc3QgbGlua3MuCi0JICovCi0JTFdMb2NrQWNx dWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JaGVhZCA9IFFVRVVFX0hF QUQ7Ci0JbWF4ID0gUVVFVUVfVEFJTDsKLQlwcmV2TGlzdGVuZXIgPSBJTlZBTElEX1BST0Nf TlVNQkVSOwotCWZvciAoUHJvY051bWJlciBpID0gUVVFVUVfRklSU1RfTElTVEVORVI7IGkg IT0gSU5WQUxJRF9QUk9DX05VTUJFUjsgaSA9IFFVRVVFX05FWFRfTElTVEVORVIoaSkpCi0J ewotCQlpZiAoUVVFVUVfQkFDS0VORF9EQk9JRChpKSA9PSBNeURhdGFiYXNlSWQpCi0JCQlt YXggPSBRVUVVRV9QT1NfTUFYKG1heCwgUVVFVUVfQkFDS0VORF9QT1MoaSkpOwotCQkvKiBB bHNvIGZpbmQgbGFzdCBsaXN0ZW5pbmcgYmFja2VuZCBiZWZvcmUgdGhpcyBvbmUgKi8KLQkJ aWYgKGkgPCBNeVByb2NOdW1iZXIpCi0JCQlwcmV2TGlzdGVuZXIgPSBpOwotCX0KLQlRVUVV RV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gbWF4OwotCVFVRVVFX0JBQ0tFTkRfUElE KE15UHJvY051bWJlcikgPSBNeVByb2NQaWQ7Ci0JUVVFVUVfQkFDS0VORF9EQk9JRChNeVBy b2NOdW1iZXIpID0gTXlEYXRhYmFzZUlkOwotCS8qIEluc2VydCBiYWNrZW5kIGludG8gbGlz dCBvZiBsaXN0ZW5lcnMgYXQgY29ycmVjdCBwb3NpdGlvbiAqLwotCWlmIChwcmV2TGlzdGVu ZXIgIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKLQl7Ci0JCVFVRVVFX05FWFRfTElTVEVORVIo TXlQcm9jTnVtYmVyKSA9IFFVRVVFX05FWFRfTElTVEVORVIocHJldkxpc3RlbmVyKTsKLQkJ UVVFVUVfTkVYVF9MSVNURU5FUihwcmV2TGlzdGVuZXIpID0gTXlQcm9jTnVtYmVyOwotCX0K LQllbHNlCi0JewotCQlRVUVVRV9ORVhUX0xJU1RFTkVSKE15UHJvY051bWJlcikgPSBRVUVV RV9GSVJTVF9MSVNURU5FUjsKLQkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBNeVByb2NOdW1i ZXI7Ci0JfQotCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKKwkJaWYgKFRyYWNl X25vdGlmeSkKKwkJCWVsb2coREVCVUcxLCAiRXhlY19MaXN0ZW5QcmVDb21taXQoJXMsJWQp IiwgY2hhbm5lbCwgTXlQcm9jUGlkKTsKIAotCS8qIE5vdyB3ZSBhcmUgbGlzdGVkIGluIHRo ZSBnbG9iYWwgYXJyYXksIHNvIHJlbWVtYmVyIHdlJ3JlIGxpc3RlbmluZyAqLwotCWFtUmVn aXN0ZXJlZExpc3RlbmVyID0gdHJ1ZTsKKwkJLyoKKwkJICogQmVmb3JlIHJlZ2lzdGVyaW5n LCBtYWtlIHN1cmUgd2Ugd2lsbCB1bmxpc3RlbiBiZWZvcmUgZHlpbmcuIChOb3RlOgorCQkg KiB0aGlzIGFjdGlvbiBkb2VzIG5vdCBnZXQgdW5kb25lIGlmIHdlIGFib3J0IGxhdGVyLikK KwkJICovCisJCWlmICghdW5saXN0ZW5FeGl0UmVnaXN0ZXJlZCkKKwkJeworCQkJYmVmb3Jl X3NobWVtX2V4aXQoQXN5bmNfVW5saXN0ZW5PbkV4aXQsIDApOworCQkJdW5saXN0ZW5FeGl0 UmVnaXN0ZXJlZCA9IHRydWU7CisJCX0KIAotCS8qCi0JICogVHJ5IHRvIG1vdmUgb3VyIHBv aW50ZXIgZm9yd2FyZCBhcyBmYXIgYXMgcG9zc2libGUuICBUaGlzIHdpbGwgc2tpcAotCSAq IG92ZXIgYWxyZWFkeS1jb21taXR0ZWQgbm90aWZpY2F0aW9ucywgd2hpY2ggd2Ugd2FudCB0 byBkbyBiZWNhdXNlIHRoZXkKLQkgKiBtaWdodCBiZSBxdWl0ZSBzdGFsZS4gIE5vdGUgdGhh dCB3ZSBhcmUgbm90IHlldCBsaXN0ZW5pbmcgb24gYW55dGhpbmcsCi0JICogc28gd2Ugd29u J3QgZGVsaXZlciBzdWNoIG5vdGlmaWNhdGlvbnMgdG8gb3VyIGZyb250ZW5kLiAgQWxzbywg YWx0aG91Z2gKLQkgKiBvdXIgdHJhbnNhY3Rpb24gbWlnaHQgaGF2ZSBleGVjdXRlZCBOT1RJ RlksIHRob3NlIG1lc3NhZ2UocykgYXJlbid0Ci0JICogcXVldWVkIHlldCBzbyB3ZSB3b24n dCBza2lwIHRoZW0gaGVyZS4KLQkgKi8KLQlpZiAoIVFVRVVFX1BPU19FUVVBTChtYXgsIGhl YWQpKQotCQlhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnMoKTsKLX0KKwkJLyoKKwkJ ICogVGhpcyBpcyBvdXIgZmlyc3QgTElTVEVOLCBzbyBlc3RhYmxpc2ggb3VyIHBvaW50ZXIu CisJCSAqCisJCSAqIFdlIHNldCBvdXIgcG9pbnRlciB0byB0aGUgZ2xvYmFsIHRhaWwgcG9p bnRlciBhbmQgdGhlbiBtb3ZlIGl0CisJCSAqIGZvcndhcmQgb3ZlciBhbHJlYWR5LWNvbW1p dHRlZCBub3RpZmljYXRpb25zLiAgVGhpcyBlbnN1cmVzIHdlCisJCSAqIGNhbm5vdCBtaXNz IGFueSBub3QteWV0LWNvbW1pdHRlZCBub3RpZmljYXRpb25zLiAgV2UgbWlnaHQgZ2V0IGEK KwkJICogZmV3IG1vcmUgYnV0IHRoYXQgZG9lc24ndCBodXJ0LgorCQkgKgorCQkgKiBJbiBz b21lIHNjZW5hcmlvcyB0aGVyZSBtaWdodCBiZSBhIGxvdCBvZiBjb21taXR0ZWQgbm90aWZp Y2F0aW9ucworCQkgKiB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHBydW5lZCBhd2F5IChiZWNh dXNlIHNvbWUgYmFja2VuZCBpcyBiZWluZworCQkgKiBsYXp5IGFib3V0IHJlYWRpbmcgdGhl bSkuICBUbyByZWR1Y2Ugb3VyIHN0YXJ0dXAgdGltZSwgd2UgY2FuIGxvb2sKKwkJICogYXQg b3RoZXIgYmFja2VuZHMgYW5kIGFkb3B0IHRoZSBtYXhpbXVtICJwb3MiIHBvaW50ZXIgb2Yg YW55CisJCSAqIGJhY2tlbmQgdGhhdCdzIGluIG91ciBkYXRhYmFzZTsgYW55IG5vdGlmaWNh dGlvbnMgaXQncyBhbHJlYWR5CisJCSAqIGFkdmFuY2VkIG92ZXIgYXJlIHN1cmVseSBjb21t aXR0ZWQgYW5kIG5lZWQgbm90IGJlIHJlLWV4YW1pbmVkIGJ5CisJCSAqIHVzLiAgKFdlIG11 c3QgY29uc2lkZXIgb25seSBiYWNrZW5kcyBjb25uZWN0ZWQgdG8gb3VyIERCLCBiZWNhdXNl CisJCSAqIG90aGVycyB3aWxsIG5vdCBoYXZlIGJvdGhlcmVkIHRvIGNoZWNrIGNvbW1pdHRl ZC1uZXNzIG9mCisJCSAqIG5vdGlmaWNhdGlvbnMgaW4gb3VyIERCLikKKwkJICoKKwkJICog V2UgbmVlZCBleGNsdXNpdmUgbG9jayBoZXJlIHNvIHdlIGNhbiBsb29rIGF0IG90aGVyIGJh Y2tlbmRzJworCQkgKiBlbnRyaWVzIGFuZCBtYW5pcHVsYXRlIHRoZSBsaXN0IGxpbmtzLgor CQkgKi8KKwkJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7 CisJCWhlYWQgPSBRVUVVRV9IRUFEOworCQltYXggPSBRVUVVRV9UQUlMOworCQlwcmV2TGlz dGVuZXIgPSBJTlZBTElEX1BST0NfTlVNQkVSOworCQlmb3IgKFByb2NOdW1iZXIgaSA9IFFV RVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVV RV9ORVhUX0xJU1RFTkVSKGkpKQorCQl7CisJCQlpZiAoUVVFVUVfQkFDS0VORF9EQk9JRChp KSA9PSBNeURhdGFiYXNlSWQpCisJCQkJbWF4ID0gUVVFVUVfUE9TX01BWChtYXgsIFFVRVVF X0JBQ0tFTkRfUE9TKGkpKTsKKwkJCS8qIEFsc28gZmluZCBsYXN0IGxpc3RlbmluZyBiYWNr ZW5kIGJlZm9yZSB0aGlzIG9uZSAqLworCQkJaWYgKGkgPCBNeVByb2NOdW1iZXIpCisJCQkJ cHJldkxpc3RlbmVyID0gaTsKKwkJfQorCQlRVUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1i ZXIpID0gbWF4OworCQlRVUVVRV9CQUNLRU5EX1BJRChNeVByb2NOdW1iZXIpID0gTXlQcm9j UGlkOworCQlRVUVVRV9CQUNLRU5EX0RCT0lEKE15UHJvY051bWJlcikgPSBNeURhdGFiYXNl SWQ7CisJCS8qIEluc2VydCBiYWNrZW5kIGludG8gbGlzdCBvZiBsaXN0ZW5lcnMgYXQgY29y cmVjdCBwb3NpdGlvbiAqLworCQlpZiAocHJldkxpc3RlbmVyICE9IElOVkFMSURfUFJPQ19O VU1CRVIpCisJCXsKKwkJCVFVRVVFX05FWFRfTElTVEVORVIoTXlQcm9jTnVtYmVyKSA9IFFV RVVFX05FWFRfTElTVEVORVIocHJldkxpc3RlbmVyKTsKKwkJCVFVRVVFX05FWFRfTElTVEVO RVIocHJldkxpc3RlbmVyKSA9IE15UHJvY051bWJlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJ CVFVRVVFX05FWFRfTElTVEVORVIoTXlQcm9jTnVtYmVyKSA9IFFVRVVFX0ZJUlNUX0xJU1RF TkVSOworCQkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBNeVByb2NOdW1iZXI7CisJCX0KKwkJ TFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCi0vKgotICogRXhlY19MaXN0ZW5D b21taXQgLS0tIHN1YnJvdXRpbmUgZm9yIEF0Q29tbWl0X05vdGlmeQotICoKLSAqIEFkZCB0 aGUgY2hhbm5lbCB0byB0aGUgbGlzdCBvZiBjaGFubmVscyB3ZSBhcmUgbGlzdGVuaW5nIG9u LgotICovCi1zdGF0aWMgdm9pZAotRXhlY19MaXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hh bm5lbCkKLXsKLQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJCS8qIE5vdyB3ZSBhcmUg bGlzdGVkIGluIHRoZSBnbG9iYWwgYXJyYXksIHNvIHJlbWVtYmVyIHdlJ3JlIGxpc3Rlbmlu ZyAqLworCQlhbVJlZ2lzdGVyZWRMaXN0ZW5lciA9IHRydWU7CisKKwkJLyoKKwkJICogVHJ5 IHRvIG1vdmUgb3VyIHBvaW50ZXIgZm9yd2FyZCBhcyBmYXIgYXMgcG9zc2libGUuICBUaGlz IHdpbGwgc2tpcAorCQkgKiBvdmVyIGFscmVhZHktY29tbWl0dGVkIG5vdGlmaWNhdGlvbnMs IHdoaWNoIHdlIHdhbnQgdG8gZG8gYmVjYXVzZQorCQkgKiB0aGV5IG1pZ2h0IGJlIHF1aXRl IHN0YWxlLiAgTm90ZSB0aGF0IHdlIGFyZSBub3QgeWV0IGxpc3RlbmluZyBvbgorCQkgKiBh bnl0aGluZywgc28gd2Ugd29uJ3QgZGVsaXZlciBzdWNoIG5vdGlmaWNhdGlvbnMgdG8gb3Vy IGZyb250ZW5kLgorCQkgKiBBbHNvLCBhbHRob3VnaCBvdXIgdHJhbnNhY3Rpb24gbWlnaHQg aGF2ZSBleGVjdXRlZCBOT1RJRlksIHRob3NlCisJCSAqIG1lc3NhZ2UocykgYXJlbid0IHF1 ZXVlZCB5ZXQgc28gd2Ugd29uJ3Qgc2tpcCB0aGVtIGhlcmUuCisJCSAqLworCQlpZiAoIVFV RVVFX1BPU19FUVVBTChtYXgsIGhlYWQpKQorCQkJYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmlj YXRpb25zKCk7CisJfQogCiAJLyogRG8gbm90aGluZyBpZiB3ZSBhcmUgYWxyZWFkeSBsaXN0 ZW5pbmcgb24gdGhpcyBjaGFubmVsICovCiAJaWYgKElzTGlzdGVuaW5nT24oY2hhbm5lbCkp CiAJCXJldHVybjsKIAogCS8qCi0JICogQWRkIHRoZSBuZXcgY2hhbm5lbCBuYW1lIHRvIGxp c3RlbkNoYW5uZWxzLgotCSAqCi0JICogWFhYIEl0IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2li bGUgdG8gZ2V0IGFuIG91dC1vZi1tZW1vcnkgZmFpbHVyZSBoZXJlLAotCSAqIHdoaWNoIHdv dWxkIGJlIGJhZCBiZWNhdXNlIHdlIGFscmVhZHkgY29tbWl0dGVkLiAgRm9yIHRoZSBtb21l bnQgaXQKLQkgKiBkb2Vzbid0IHNlZW0gd29ydGggdHJ5aW5nIHRvIGd1YXJkIGFnYWluc3Qg dGhhdCwgYnV0IG1heWJlIGltcHJvdmUgdGhpcwotCSAqIGxhdGVyLgotCSAqLwotCW9sZGNv bnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7Ci0JbGlz dGVuQ2hhbm5lbHMgPSBsYXBwZW5kKGxpc3RlbkNoYW5uZWxzLCBwc3RyZHVwKGNoYW5uZWwp KTsKLQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJICogQWRkIHRoZSBj aGFubmVsIHRvIGxpc3RlbkNoYW5uZWxzSGFzaC4gIFRoaXMgY2FuIE9PTSwgYnV0IHdlJ3Jl IHN0aWxsCisJICogaW4gUHJlQ29tbWl0IHNvIHRoZSB0cmFuc2FjdGlvbiBjYW4gYWJvcnQg c2FmZWx5LgorCSAqLworCWluaXRMaXN0ZW5DaGFubmVsc0hhc2goKTsKKwkodm9pZCkgaGFz aF9zZWFyY2gobGlzdGVuQ2hhbm5lbHNIYXNoLCBjaGFubmVsLCBIQVNIX0VOVEVSLCBOVUxM KTsKKworCS8qCisJICogTm93IHVwZGF0ZSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoLiAgV2Ug aW5zZXJ0IGFuIGVudHJ5IHdpdGgKKwkgKiBhY3RpdmU9ZmFsc2UsIHdoaWNoIHdpbGwgYmUg ZmxpcHBlZCB0byB0cnVlIGluIEV4ZWNfTGlzdGVuQ29tbWl0LgorCSAqLworCWluaXRDaGFu bmVsSGFzaCgpOworCisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJ ZCwgY2hhbm5lbCk7CisKKwkvKgorCSAqIEZpbmQgb3IgY3JlYXRlIHRoZSBjaGFubmVsIGVu dHJ5LiAgRm9yIG5ldyBlbnRyaWVzLCB3ZSBpbml0aWFsaXplCisJICogbGlzdGVuZXJzQXJy YXkgdG8gSW52YWxpZERzYVBvaW50ZXIgYXMgYSBtYXJrZXIuCisJICovCisJZW50cnkgPSBk c2hhc2hfZmluZF9vcl9pbnNlcnQoY2hhbm5lbEhhc2gsICZrZXksICZmb3VuZCk7CisKKwlp ZiAoIWZvdW5kKQorCQllbnRyeS0+bGlzdGVuZXJzQXJyYXkgPSBJbnZhbGlkRHNhUG9pbnRl cjsKKworCWlmICghRHNhUG9pbnRlcklzVmFsaWQoZW50cnktPmxpc3RlbmVyc0FycmF5KSkK Kwl7CisJCS8qIEZpcnN0IGxpc3RlbmVyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwkJZW50cnkt Pmxpc3RlbmVyc0FycmF5ID0gZHNhX2FsbG9jYXRlKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJ CSBzaXplb2YoTGlzdGVuZXJFbnRyeSkgKiBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpF KTsKKwkJZW50cnktPm51bUxpc3RlbmVycyA9IDA7CisJCWVudHJ5LT5hbGxvY2F0ZWRMaXN0 ZW5lcnMgPSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFOworCX0KKworCWxpc3RlbmVy cyA9IChMaXN0ZW5lckVudHJ5ICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJ CQkJCQkJCQkJICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJaWYgKGVudHJ5LT5udW1M aXN0ZW5lcnMgPj0gZW50cnktPmFsbG9jYXRlZExpc3RlbmVycykKKwl7CisJCWludAkJCW5l d19zaXplID0gZW50cnktPmFsbG9jYXRlZExpc3RlbmVycyAqIDI7CisJCWRzYV9wb2ludGVy IG5ld19hcnJheSA9IGRzYV9hbGxvY2F0ZShjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkgc2l6 ZW9mKExpc3RlbmVyRW50cnkpICogbmV3X3NpemUpOworCQlMaXN0ZW5lckVudHJ5ICpuZXdf bGlzdGVuZXJzID0gKExpc3RlbmVyRW50cnkgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxE U0EsCisJCQkJCQkJCQkJCQkJCQkJCQkgbmV3X2FycmF5KTsKKworCQltZW1jcHkobmV3X2xp c3RlbmVycywgbGlzdGVuZXJzLAorCQkJICAgc2l6ZW9mKExpc3RlbmVyRW50cnkpICogZW50 cnktPm51bUxpc3RlbmVycyk7CisKKwkJZHNhX2ZyZWUoY2hhbm5lbERTQSwgZW50cnktPmxp c3RlbmVyc0FycmF5KTsKKwkJZW50cnktPmxpc3RlbmVyc0FycmF5ID0gbmV3X2FycmF5Owor CQllbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzID0gbmV3X3NpemU7CisJCWxpc3RlbmVycyA9 IG5ld19saXN0ZW5lcnM7CisJfQorCisJbGlzdGVuZXJzW2VudHJ5LT5udW1MaXN0ZW5lcnNd LnByb2NubyA9IE15UHJvY051bWJlcjsKKwlsaXN0ZW5lcnNbZW50cnktPm51bUxpc3RlbmVy c10uYWN0aXZlID0gZmFsc2U7CisJZW50cnktPm51bUxpc3RlbmVycysrOworCisJZHNoYXNo X3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOworfQorCisvKgorICogRXhlY19M aXN0ZW5Db21taXQgLS0tIHN1YnJvdXRpbmUgZm9yIEF0Q29tbWl0X05vdGlmeQorICoKKyAq IEFjdGl2YXRlIHRoZSBjaGFubmVsIGVudHJ5IHRoYXQgd2FzIHByZS1hbGxvY2F0ZWQgaW4g RXhlY19MaXN0ZW5QcmVDb21taXQuCisgKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBjb21taXQg dG8gY2xvZywgc28gaXQncyBpbXBvcnRhbnQgdG8gaGF2ZSB2ZXJ5IGxvdworICogcHJvYmFi aWxpdHkgb2YgZmFpbHVyZS4gIEJ5IGRlc2lnbiwgYWxsIHdlIGRvIGhlcmUgaXMgc2V0IHRo ZSBhY3RpdmUKKyAqIGZsYWcuCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjX0xpc3RlbkNvbW1p dChjb25zdCBjaGFyICpjaGFubmVsKQoreworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlDaGFu bmVsRW50cnkgKmVudHJ5OworCUxpc3RlbmVyRW50cnkgKmxpc3RlbmVyczsKKwlpbnQJCQlp OworCisJaWYgKFRyYWNlX25vdGlmeSkKKwkJZWxvZyhERUJVRzEsICJFeGVjX0xpc3RlbkNv bW1pdCglcywlZCkiLCBjaGFubmVsLCBNeVByb2NQaWQpOworCisJLyoKKwkgKiBUaGUgZW50 cnkgaGFzIGJlZW4gY3JlYXRlZCBpbiBFeGVjX0xpc3RlblByZUNvbW1pdC4gSWYgd2UgZ2V0 CisJICogaGVyZSwgY2hhbm5lbEhhc2ggYW5kIHRoZSBlbnRyeSBtdXN0IGV4aXN0LgorCSAq LworCUFzc2VydChjaGFubmVsSGFzaCAhPSBOVUxMKTsKKwlDaGFubmVsSGFzaFByZXBhcmVL ZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKwllbnRyeSA9IGRzaGFzaF9maW5k KGNoYW5uZWxIYXNoLCAma2V5LCB0cnVlKTsKKwlBc3NlcnQoZW50cnkgIT0gTlVMTCk7CisK KwlsaXN0ZW5lcnMgPSAoTGlzdGVuZXJFbnRyeSAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5l bERTQSwKKwkJCQkJCQkJCQkJCSAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCWZvciAo aSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCisJeworCQlpZiAobGlzdGVu ZXJzW2ldLnByb2NubyA9PSBNeVByb2NOdW1iZXIpCisJCXsKKwkJCWxpc3RlbmVyc1tpXS5h Y3RpdmUgPSB0cnVlOworCQkJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50 cnkpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogSWYgdGhlIGVudHJ5IGlzIG5vdCBm b3VuZCwgaXQncyBhIGJ1Zy4gKi8KKwlBc3NlcnQoZmFsc2UpOworCWRzaGFzaF9yZWxlYXNl X2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKIH0KIAogLyoKICAqIEV4ZWNfVW5saXN0ZW5D b21taXQgLS0tIHN1YnJvdXRpbmUgZm9yIEF0Q29tbWl0X05vdGlmeQogICoKLSAqIFJlbW92 ZSB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgbmFtZSBmcm9tIGxpc3RlbkNoYW5uZWxzLgorICoJ CVVubGlzdGVuIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBmb3IgdGhpcyBiYWNrZW5kLgogICov CiBzdGF0aWMgdm9pZAogRXhlY19Vbmxpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVs KQogewotCUxpc3RDZWxsICAgKnE7CisJQ2hhbm5lbEhhc2hLZXkga2V5OworCUNoYW5uZWxF bnRyeSAqZW50cnk7CisJTGlzdGVuZXJFbnRyeSAqbGlzdGVuZXJzOworCWludAkJCWk7CiAK IAlpZiAoVHJhY2Vfbm90aWZ5KQogCQllbG9nKERFQlVHMSwgIkV4ZWNfVW5saXN0ZW5Db21t aXQoJXMsJWQpIiwgY2hhbm5lbCwgTXlQcm9jUGlkKTsKIAotCWZvcmVhY2gocSwgbGlzdGVu Q2hhbm5lbHMpCisJLyogUmVtb3ZlIGZyb20gb3VyIGxvY2FsIGNhY2hlICovCisJaWYgKGxp c3RlbkNoYW5uZWxzSGFzaCAhPSBOVUxMKQorCQkodm9pZCkgaGFzaF9zZWFyY2gobGlzdGVu Q2hhbm5lbHNIYXNoLCBjaGFubmVsLCBIQVNIX1JFTU9WRSwgTlVMTCk7CisKKwkvKiBOb3cg cmVtb3ZlIGZyb20gdGhlIHNoYXJlZCBjaGFubmVsSGFzaCAqLworCWlmIChjaGFubmVsSGFz aCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwg TXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKworCS8qIExvb2sgdXAgdGhlIGNoYW5uZWwgd2l0 aCBleGNsdXNpdmUgbG9jayBzbyB3ZSBjYW4gbW9kaWZ5IGl0ICovCisJZW50cnkgPSBkc2hh c2hfZmluZChjaGFubmVsSGFzaCwgJmtleSwgdHJ1ZSk7CisJaWYgKGVudHJ5ID09IE5VTEwp CisJCXJldHVybjsKKworCWxpc3RlbmVycyA9IChMaXN0ZW5lckVudHJ5ICopIGRzYV9nZXRf YWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkJICBlbnRyeS0+bGlzdGVuZXJzQXJy YXkpOworCisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkrKykKIAl7 Ci0JCWNoYXIJICAgKmxjaGFuID0gKGNoYXIgKikgbGZpcnN0KHEpOwotCi0JCWlmIChzdHJj bXAobGNoYW4sIGNoYW5uZWwpID09IDApCisJCWlmIChsaXN0ZW5lcnNbaV0ucHJvY25vID09 IE15UHJvY051bWJlcikKIAkJewotCQkJbGlzdGVuQ2hhbm5lbHMgPSBmb3JlYWNoX2RlbGV0 ZV9jdXJyZW50KGxpc3RlbkNoYW5uZWxzLCBxKTsKLQkJCXBmcmVlKGxjaGFuKTsKLQkJCWJy ZWFrOworCQkJZW50cnktPm51bUxpc3RlbmVycy0tOworCQkJaWYgKGkgPCBlbnRyeS0+bnVt TGlzdGVuZXJzKQorCQkJCW1lbW1vdmUoJmxpc3RlbmVyc1tpXSwgJmxpc3RlbmVyc1tpICsg MV0sCisJCQkJCQlzaXplb2YoTGlzdGVuZXJFbnRyeSkgKiAoZW50cnktPm51bUxpc3RlbmVy cyAtIGkpKTsKKworCQkJaWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0gMCkKKwkJCXsKKwkJ CQkvKiBMYXN0IGxpc3RlbmVyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwkJCQlkc2FfZnJlZShj aGFubmVsRFNBLCBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCQkJCWRzaGFzaF9kZWxldGVf ZW50cnkoY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlk c2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQl9CisKKwkJCXJl dHVybjsKIAkJfQogCX0KIAorCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVu dHJ5KTsKKwogCS8qCiAJICogV2UgZG8gbm90IGNvbXBsYWluIGFib3V0IHVubGlzdGVuaW5n IHNvbWV0aGluZyBub3QgYmVpbmcgbGlzdGVuZWQ7CiAJICogc2hvdWxkIHdlPwpAQCAtMTE5 MiwzNCArMTYwNiw2OCBAQCBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5u ZWwpCiBzdGF0aWMgdm9pZAogRXhlY19Vbmxpc3RlbkFsbENvbW1pdCh2b2lkKQogeworCWRz aGFzaF9zZXFfc3RhdHVzIHN0YXR1czsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCiAJaWYg KFRyYWNlX25vdGlmeSkKIAkJZWxvZyhERUJVRzEsICJFeGVjX1VubGlzdGVuQWxsQ29tbWl0 KCVkKSIsIE15UHJvY1BpZCk7CiAKLQlsaXN0X2ZyZWVfZGVlcChsaXN0ZW5DaGFubmVscyk7 Ci0JbGlzdGVuQ2hhbm5lbHMgPSBOSUw7CisJLyogQ2xlYXIgb3VyIGxvY2FsIGNhY2hlICov CisJaWYgKGxpc3RlbkNoYW5uZWxzSGFzaCAhPSBOVUxMKQorCXsKKwkJaGFzaF9kZXN0cm95 KGxpc3RlbkNoYW5uZWxzSGFzaCk7CisJCWxpc3RlbkNoYW5uZWxzSGFzaCA9IE5VTEw7CisJ fQorCisJLyogTm93IHJlbW92ZSBmcm9tIHRoZSBzaGFyZWQgY2hhbm5lbEhhc2ggKi8KKwlp ZiAoY2hhbm5lbEhhc2ggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHNoYXNoX3NlcV9pbml0 KCZzdGF0dXMsIGNoYW5uZWxIYXNoLCB0cnVlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNo X3NlcV9uZXh0KCZzdGF0dXMpKSAhPSBOVUxMKQorCXsKKwkJaWYgKGVudHJ5LT5rZXkuZGJv aWQgPT0gTXlEYXRhYmFzZUlkKQorCQl7CisJCQlMaXN0ZW5lckVudHJ5ICpsaXN0ZW5lcnM7 CisJCQlpbnQJCQlpOworCisJCQlsaXN0ZW5lcnMgPSAoTGlzdGVuZXJFbnRyeSAqKSBkc2Ff Z2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJCQkJICBlbnRyeS0+bGlzdGVu ZXJzQXJyYXkpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsg aSsrKQorCQkJeworCQkJCWlmIChsaXN0ZW5lcnNbaV0ucHJvY25vID09IE15UHJvY051bWJl cikKKwkJCQl7CisJCQkJCWVudHJ5LT5udW1MaXN0ZW5lcnMtLTsKKwkJCQkJaWYgKGkgPCBl bnRyeS0+bnVtTGlzdGVuZXJzKQorCQkJCQkJbWVtbW92ZSgmbGlzdGVuZXJzW2ldLCAmbGlz dGVuZXJzW2kgKyAxXSwKKwkJCQkJCQkJc2l6ZW9mKExpc3RlbmVyRW50cnkpICogKGVudHJ5 LT5udW1MaXN0ZW5lcnMgLSBpKSk7CisKKwkJCQkJaWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMg PT0gMCkKKwkJCQkJeworCQkJCQkJZHNhX2ZyZWUoY2hhbm5lbERTQSwgZW50cnktPmxpc3Rl bmVyc0FycmF5KTsKKwkJCQkJCWRzaGFzaF9kZWxldGVfY3VycmVudCgmc3RhdHVzKTsKKwkJ CQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZHNoYXNoX3NlcV90 ZXJtKCZzdGF0dXMpOwogfQogCiAvKgogICogVGVzdCB3aGV0aGVyIHdlIGFyZSBhY3RpdmVs eSBsaXN0ZW5pbmcgb24gdGhlIGdpdmVuIGNoYW5uZWwgbmFtZS4KICAqCiAgKiBOb3RlOiB0 aGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBldmVyeSBub3RpZmljYXRpb24gZm91bmQg aW4gdGhlIHF1ZXVlLgotICogUGVyaGFwcyBpdCBpcyB3b3J0aCBmdXJ0aGVyIG9wdGltaXph dGlvbiwgZWcgY29udmVydCB0aGUgbGlzdCB0byBhIHNvcnRlZAotICogYXJyYXkgc28gd2Ug Y2FuIGJpbmFyeS1zZWFyY2ggaXQuICBJbiBwcmFjdGljZSB0aGUgbGlzdCBpcyBsaWtlbHkg dG8gYmUKLSAqIGZhaXJseSBzaG9ydCwgdGhvdWdoLgogICovCiBzdGF0aWMgYm9vbAogSXNM aXN0ZW5pbmdPbihjb25zdCBjaGFyICpjaGFubmVsKQogewotCUxpc3RDZWxsICAgKnA7CisJ aWYgKGxpc3RlbkNoYW5uZWxzSGFzaCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CiAKLQlm b3JlYWNoKHAsIGxpc3RlbkNoYW5uZWxzKQotCXsKLQkJY2hhcgkgICAqbGNoYW4gPSAoY2hh ciAqKSBsZmlyc3QocCk7Ci0KLQkJaWYgKHN0cmNtcChsY2hhbiwgY2hhbm5lbCkgPT0gMCkK LQkJCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIChoYXNoX3Nl YXJjaChsaXN0ZW5DaGFubmVsc0hhc2gsIGNoYW5uZWwsIEhBU0hfRklORCwgTlVMTCkgIT0g TlVMTCk7CiB9CiAKIC8qCkBAIC0xMjI5LDcgKzE2NzcsNyBAQCBJc0xpc3RlbmluZ09uKGNv bnN0IGNoYXIgKmNoYW5uZWwpCiBzdGF0aWMgdm9pZAogYXN5bmNRdWV1ZVVucmVnaXN0ZXIo dm9pZCkKIHsKLQlBc3NlcnQobGlzdGVuQ2hhbm5lbHMgPT0gTklMKTsJLyogZWxzZSBjYWxs ZXIgZXJyb3IgKi8KKwlBc3NlcnQobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFz aF9nZXRfbnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKTsJLyogZWxzZSBj YWxsZXIgZXJyb3IgKi8KIAogCWlmICghYW1SZWdpc3RlcmVkTGlzdGVuZXIpCS8qIG5vdGhp bmcgdG8gZG8gKi8KIAkJcmV0dXJuOwpAQCAtMTI0MSw2ICsxNjg5LDcgQEAgYXN5bmNRdWV1 ZVVucmVnaXN0ZXIodm9pZCkKIAkvKiBNYXJrIG91ciBlbnRyeSBhcyBpbnZhbGlkICovCiAJ UVVFVUVfQkFDS0VORF9QSUQoTXlQcm9jTnVtYmVyKSA9IEludmFsaWRQaWQ7CiAJUVVFVUVf QkFDS0VORF9EQk9JRChNeVByb2NOdW1iZXIpID0gSW52YWxpZE9pZDsKKwlRVUVVRV9CQUNL RU5EX1dBS0VVUF9QRU5ESU5HKE15UHJvY051bWJlcikgPSBmYWxzZTsKIAkvKiBhbmQgcmVt b3ZlIGl0IGZyb20gdGhlIGxpc3QgKi8KIAlpZiAoUVVFVUVfRklSU1RfTElTVEVORVIgPT0g TXlQcm9jTnVtYmVyKQogCQlRVUVVRV9GSVJTVF9MSVNURU5FUiA9IFFVRVVFX05FWFRfTElT VEVORVIoTXlQcm9jTnVtYmVyKTsKQEAgLTE1NjUsMTIgKzIwMTQsMjEgQEAgYXN5bmNRdWV1 ZUZpbGxXYXJuaW5nKHZvaWQpCiAvKgogICogU2VuZCBzaWduYWxzIHRvIGxpc3RlbmluZyBi YWNrZW5kcy4KICAqCi0gKiBOb3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNrZW5kcyBpbiBv dXIgb3duIGRhdGFiYXNlLCBzaW5jZSBvbmx5IHRob3NlCi0gKiBiYWNrZW5kcyBjb3VsZCBi ZSBpbnRlcmVzdGVkIGluIG5vdGlmaWVzIHdlIHNlbmQuICBIb3dldmVyLCBpZiB0aGVyZSdz Ci0gKiBub3RpZnkgdHJhZmZpYyBpbiBvdXIgZGF0YWJhc2UgYnV0IG5vIHRyYWZmaWMgaW4g YW5vdGhlciBkYXRhYmFzZSB0aGF0Ci0gKiBkb2VzIGhhdmUgbGlzdGVuZXIocyksIHRob3Nl IGxpc3RlbmVycyB3aWxsIGZhbGwgZnVydGhlciBhbmQgZnVydGhlcgotICogYmVoaW5kLiAg V2FrZW4gdGhlbSBhbnl3YXkgaWYgdGhleSdyZSBmYXIgZW5vdWdoIGJlaGluZCwgc28gdGhh dCB0aGV5J2xsCi0gKiBhZHZhbmNlIHRoZWlyIHF1ZXVlIHBvc2l0aW9uIHBvaW50ZXJzLCBh bGxvd2luZyB0aGUgZ2xvYmFsIHRhaWwgdG8gYWR2YW5jZS4KKyAqIE5vcm1hbGx5IHdlIHNp Z25hbCBvbmx5IGJhY2tlbmRzIGluIG91ciBvd24gZGF0YWJhc2UsIHRoYXQgYXJlCisgKiBs aXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIHdpdGggcGVuZGluZyBub3RpZmllcywgc2luY2Ug b25seSB0aG9zZQorICogYmFja2VuZHMgYXJlIGludGVyZXN0ZWQgaW4gbm90aWZpZXMgd2Ug c2VuZC4KKyAqCisgKiBCYWNrZW5kcyB0aGF0IGFyZSBub3QgaW50ZXJlc3RlZCBpbiBvdXIg bm90aWZpZXMsIHRoYXQgYXJlIGtub3duCisgKiB0byBzdGlsbCBiZSBwb3NpdGlvbmVkIGF0 IHRoZSBvbGQgcXVldWUgaGVhZCwgb3IgYW55d2hlcmUgaW4gdGhlCisgKiBxdWV1ZSByZWdp b24gd2UganVzdCB3cm90ZSwgY2FuIGJlIHNhZmVseSBhZHZhbmNlZCBkaXJlY3RseSB0byB0 aGUKKyAqIG5ldyBoZWFkLCBzaW5jZSB0aGF0IHJlZ2lvbiBpcyBrbm93biB0byBjb250YWlu IG9ubHkgb3VyIG93bgorICogbm90aWZpY2F0aW9ucy4gIFRoaXMgYXZvaWRzIHVubmVjZXNz YXJ5IHdha2V1cHMgd2hlbiB0aGVyZSBpcworICogbm90aGluZyBvZiBpbnRlcmVzdCB0byB0 aGVtLgorICoKKyAqIEJhY2tlbmRzIHRoYXQgYXJlIG5vdCBpbnRlcmVzdGVkIGluIG91ciBu b3RpZmllcywgdGhhdCBhcmUgYWR2YW5jaW5nCisgKiB0byBhIHRhcmdldCBwb3NpdGlvbiBi ZWZvcmUgdGhlIG5ldyBxdWV1ZSBoZWFkLCBvciB0aGF0IGFyZSBub3QKKyAqIGFkdmFuY2lu ZyBhbmQgYXJlIHN0YXRpb25hcnkgYXQgYSBwb3NpdGlvbiBiZWZvcmUgdGhlIG9sZCBxdWV1 ZSBoZWFkCisgKiBuZWVkcyB0byBiZSBzaWduYWxlZCBzaW5jZSBub3RpZmljYXRpb25zIGNv dWxkIG90aGVyd2lzZSBiZSBkZWxheWVkLgogICoKICAqIFNpbmNlIHdlIGtub3cgdGhlIFBy b2NOdW1iZXIgYW5kIHRoZSBQaWQgdGhlIHNpZ25hbGluZyBpcyBxdWl0ZSBjaGVhcC4KICAq CkBAIC0xNTgwLDYwICsyMDM4LDExOCBAQCBhc3luY1F1ZXVlRmlsbFdhcm5pbmcodm9pZCkK IHN0YXRpYyB2b2lkCiBTaWduYWxCYWNrZW5kcyh2b2lkKQogewotCWludDMyCSAgICpwaWRz OwotCVByb2NOdW1iZXIgKnByb2Nub3M7CiAJaW50CQkJY291bnQ7CisJTGlzdENlbGwgICAq bGM7CiAKKwlBc3NlcnQoY2hhbm5lbEhhc2ggIT0gTlVMTCB8fCBwZW5kaW5nTm90aWZ5Q2hh bm5lbHMgPT0gTklMKTsKKwlBc3NlcnQobm90aWZ5U2lnbmFsUGlkcyAhPSBOVUxMKTsKKwlB c3NlcnQobm90aWZ5U2lnbmFsUHJvY3MgIT0gTlVMTCk7CiAJLyoKIAkgKiBJZGVudGlmeSBi YWNrZW5kcyB0aGF0IHdlIG5lZWQgdG8gc2lnbmFsLiAgV2UgZG9uJ3Qgd2FudCB0byBzZW5k CiAJICogc2lnbmFscyB3aGlsZSBob2xkaW5nIHRoZSBOb3RpZnlRdWV1ZUxvY2ssIHNvIHRo aXMgbG9vcCBqdXN0IGJ1aWxkcyBhCiAJICogbGlzdCBvZiB0YXJnZXQgUElEcy4KLQkgKgot CSAqIFhYWCBpbiBwcmluY2lwbGUgdGhlc2UgcGFsbG9jcyBjb3VsZCBmYWlsLCB3aGljaCB3 b3VsZCBiZSBiYWQuIE1heWJlCi0JICogcHJlYWxsb2NhdGUgdGhlIGFycmF5cz8gIFRoZXkn cmUgbm90IHRoYXQgbGFyZ2UsIHRob3VnaC4KIAkgKi8KLQlwaWRzID0gKGludDMyICopIHBh bGxvYyhNYXhCYWNrZW5kcyAqIHNpemVvZihpbnQzMikpOwotCXByb2Nub3MgPSAoUHJvY051 bWJlciAqKSBwYWxsb2MoTWF4QmFja2VuZHMgKiBzaXplb2YoUHJvY051bWJlcikpOwogCWNv dW50ID0gMDsKIAogCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19FWENMVVNJ VkUpOwotCWZvciAoUHJvY051bWJlciBpID0gUVVFVUVfRklSU1RfTElTVEVORVI7IGkgIT0g SU5WQUxJRF9QUk9DX05VTUJFUjsgaSA9IFFVRVVFX05FWFRfTElTVEVORVIoaSkpCisJZm9y ZWFjaChsYywgcGVuZGluZ05vdGlmeUNoYW5uZWxzKQogCXsKLQkJaW50MzIJCXBpZCA9IFFV RVVFX0JBQ0tFTkRfUElEKGkpOwotCQlRdWV1ZVBvc2l0aW9uIHBvczsKKwkJY2hhcgkgICAq Y2hhbm5lbCA9IChjaGFyICopIGxmaXJzdChsYyk7CisJCUNoYW5uZWxFbnRyeSAqZW50cnkg PSBOVUxMOworCQlMaXN0ZW5lckVudHJ5ICpsaXN0ZW5lcnM7CiAKLQkJQXNzZXJ0KHBpZCAh PSBJbnZhbGlkUGlkKTsKLQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7Ci0JCWlmIChR VUVVRV9CQUNLRU5EX0RCT0lEKGkpID09IE15RGF0YWJhc2VJZCkKKwkJaWYgKGNoYW5uZWxI YXNoICE9IE5VTEwpCiAJCXsKKwkJCUNoYW5uZWxIYXNoS2V5IGtleTsKKworCQkJQ2hhbm5l bEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisJCQllbnRy eSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5LCBmYWxzZSk7CisJCX0KKworCQlp ZiAoZW50cnkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwkJCS8qIE5vIGxpc3RlbmVycyByZWdp c3RlcmVkIGZvciB0aGlzIGNoYW5uZWwgKi8KKworCQlsaXN0ZW5lcnMgPSAoTGlzdGVuZXJF bnRyeSAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJCQkgIGVu dHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBlbnRyeS0+ bnVtTGlzdGVuZXJzOyBqKyspCisJCXsKKwkJCVByb2NOdW1iZXIJaTsKKwkJCWludDMyCQlw aWQ7CisJCQlRdWV1ZVBvc2l0aW9uIHBvczsKKwogCQkJLyoKLQkJCSAqIEFsd2F5cyBzaWdu YWwgbGlzdGVuZXJzIGluIG91ciBvd24gZGF0YWJhc2UsIHVubGVzcyB0aGV5J3JlCi0JCQkg KiBhbHJlYWR5IGNhdWdodCB1cCAodW5saWtlbHksIGJ1dCBwb3NzaWJsZSkuCisJCQkgKiBP bmx5IHNpZ25hbCBiYWNrZW5kcyB0aGF0IGhhdmUgYWN0aXZlPXRydWUuICBCYWNrZW5kcyB3 aXRoCisJCQkgKiBhY3RpdmU9ZmFsc2UgaGF2ZSBkb25lIExJU1RFTiBpbiBQcmVDb21taXQg YnV0IG5vdCB5ZXQKKwkJCSAqIGNvbW1pdHRlZCwgc28gdGhleSdyZSBub3QgcmVhbGx5IGxp c3RlbmluZyB5ZXQuCiAJCQkgKi8KKwkJCWlmICghbGlzdGVuZXJzW2pdLmFjdGl2ZSkKKwkJ CQljb250aW51ZTsKKworCQkJaSA9IGxpc3RlbmVyc1tqXS5wcm9jbm87CisKKwkJCWlmIChR VUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpKQorCQkJCWNvbnRpbnVlOworCisJCQlw b3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsKKwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElE KGkpOworCisJCQkvKiBTa2lwIGlmIGNhdWdodCB1cCAqLwogCQkJaWYgKFFVRVVFX1BPU19F UVVBTChwb3MsIFFVRVVFX0hFQUQpKQogCQkJCWNvbnRpbnVlOworCisJCQlBc3NlcnQocGlk ICE9IEludmFsaWRQaWQpOworCisJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkp ID0gdHJ1ZTsKKwkJCW5vdGlmeVNpZ25hbFBpZHNbY291bnRdID0gcGlkOworCQkJbm90aWZ5 U2lnbmFsUHJvY3NbY291bnRdID0gaTsKKwkJCWNvdW50Kys7CiAJCX0KLQkJZWxzZQorCisJ CWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwl9CisKKwlpZiAo cGVuZGluZ05vdGlmaWVzICE9IE5VTEwpCisJeworCQlmb3IgKFByb2NOdW1iZXIgaSA9IFFV RVVFX0ZJUlNUX0xJU1RFTkVSOworCQkJIGkgIT0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwkJ CSBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKIAkJewotCQkJLyoKLQkJCSAqIExpc3Rl bmVycyBpbiBvdGhlciBkYXRhYmFzZXMgc2hvdWxkIGJlIHNpZ25hbGVkIG9ubHkgaWYgdGhl eQotCQkJICogYXJlIGZhciBiZWhpbmQuCi0JCQkgKi8KLQkJCWlmIChhc3luY1F1ZXVlUGFn ZURpZmYoUVVFVUVfUE9TX1BBR0UoUVVFVUVfSEVBRCksCi0JCQkJCQkJCSAgIFFVRVVFX1BP U19QQUdFKHBvcykpIDwgUVVFVUVfQ0xFQU5VUF9ERUxBWSkKKwkJCVF1ZXVlUG9zaXRpb24g cG9zOworCQkJaW50MzIJCXBpZDsKKworCQkJaWYgKFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BF TkRJTkcoaSkpCiAJCQkJY29udGludWU7CisKKwkJCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9T KGkpOworCQkJcGlkID0gUVVFVUVfQkFDS0VORF9QSUQoaSk7CisKKwkJCWlmIChRVUVVRV9C QUNLRU5EX0lTX0FEVkFOQ0lORyhpKSA/CisJCQkJUVVFVUVfUE9TX1BSRUNFREVTKFFVRVVF X0JBQ0tFTkRfQURWQU5DSU5HX1BPUyhpKSwgcXVldWVIZWFkQWZ0ZXJXcml0ZSkgOgorCQkJ CVFVRVVFX1BPU19QUkVDRURFUyhwb3MsIHF1ZXVlSGVhZEJlZm9yZVdyaXRlKSkKKwkJCXsK KwkJCQlBc3NlcnQocGlkICE9IEludmFsaWRQaWQpOworCisJCQkJUVVFVUVfQkFDS0VORF9X QUtFVVBfUEVORElORyhpKSA9IHRydWU7CisJCQkJbm90aWZ5U2lnbmFsUGlkc1tjb3VudF0g PSBwaWQ7CisJCQkJbm90aWZ5U2lnbmFsUHJvY3NbY291bnRdID0gaTsKKwkJCQljb3VudCsr OworCQkJfQorCQkJZWxzZSBpZiAoIVFVRVVFX0JBQ0tFTkRfSVNfQURWQU5DSU5HKGkpICYm CisJCQkJCSBRVUVVRV9QT1NfUFJFQ0VERVMocG9zLCBxdWV1ZUhlYWRBZnRlcldyaXRlKSkK KwkJCXsKKwkJCQlBc3NlcnQoIVFVRVVFX1BPU19QUkVDRURFUyhwb3MsIHF1ZXVlSGVhZEJl Zm9yZVdyaXRlKSk7CisKKwkJCQlRVUVVRV9CQUNLRU5EX1BPUyhpKSA9IHF1ZXVlSGVhZEFm dGVyV3JpdGU7CisJCQl9CiAJCX0KLQkJLyogT0ssIG5lZWQgdG8gc2lnbmFsIHRoaXMgb25l ICovCi0JCXBpZHNbY291bnRdID0gcGlkOwotCQlwcm9jbm9zW2NvdW50XSA9IGk7Ci0JCWNv dW50Kys7CiAJfQogCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKIAogCS8qIE5v dyBzZW5kIHNpZ25hbHMgKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAJ ewotCQlpbnQzMgkJcGlkID0gcGlkc1tpXTsKKwkJaW50MzIJCXBpZCA9IG5vdGlmeVNpZ25h bFBpZHNbaV07CiAKIAkJLyoKIAkJICogSWYgd2UgYXJlIHNpZ25hbGluZyBvdXIgb3duIHBy b2Nlc3MsIG5vIG5lZWQgdG8gaW52b2x2ZSB0aGUga2VybmVsOwpAQCAtMTY1MSwxMiArMjE2 NywxMCBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogCQkgKiBOb3RpZnlRdWV1ZUxvY2s7IHdo aWNoIGlzIHVubGlrZWx5IGJ1dCBjZXJ0YWlubHkgcG9zc2libGUuIFNvIHdlCiAJCSAqIGp1 c3QgbG9nIGEgbG93LWxldmVsIGRlYnVnIG1lc3NhZ2UgaWYgaXQgaGFwcGVucy4KIAkJICov Ci0JCWlmIChTZW5kUHJvY1NpZ25hbChwaWQsIFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCwg cHJvY25vc1tpXSkgPCAwKQorCQlpZiAoU2VuZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX05P VElGWV9JTlRFUlJVUFQsIG5vdGlmeVNpZ25hbFByb2NzW2ldKSA8IDApCiAJCQllbG9nKERF QlVHMywgImNvdWxkIG5vdCBzaWduYWwgYmFja2VuZCB3aXRoIFBJRCAlZDogJW0iLCBwaWQp OwogCX0KIAotCXBmcmVlKHBpZHMpOwotCXBmcmVlKHByb2Nub3MpOwogfQogCiAvKgpAQCAt MTY3MywxMiArMjE4Nyw5NyBAQCBBdEFib3J0X05vdGlmeSh2b2lkKQogCS8qCiAJICogSWYg d2UgTElTVEVOIGJ1dCB0aGVuIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24gYWZ0ZXIgUHJl Q29tbWl0X05vdGlmeSwKIAkgKiB3ZSBoYXZlIHJlZ2lzdGVyZWQgYXMgYSBsaXN0ZW5lciBi dXQgaGF2ZSBub3QgbWFkZSBhbnkgZW50cnkgaW4KLQkgKiBsaXN0ZW5DaGFubmVscy4gIElu IHRoYXQgY2FzZSwgZGVyZWdpc3RlciBhZ2Fpbi4KKwkgKiBsaXN0ZW5DaGFubmVsc0hhc2gu ICBJbiB0aGF0IGNhc2UsIGRlcmVnaXN0ZXIgYWdhaW4uCiAJICovCi0JaWYgKGFtUmVnaXN0 ZXJlZExpc3RlbmVyICYmIGxpc3RlbkNoYW5uZWxzID09IE5JTCkKKwlpZiAoYW1SZWdpc3Rl cmVkTGlzdGVuZXIgJiYKKwkJKGxpc3RlbkNoYW5uZWxzSGFzaCA9PSBOVUxMIHx8IGhhc2hf Z2V0X251bV9lbnRyaWVzKGxpc3RlbkNoYW5uZWxzSGFzaCkgPT0gMCkpCiAJCWFzeW5jUXVl dWVVbnJlZ2lzdGVyKCk7CiAKLQkvKiBBbmQgY2xlYW4gdXAgKi8KKwkvKgorCSAqIFJlbW92 ZSBhbnkgY2hhbm5lbHMgd2UgYWRkZWQgZHVyaW5nIEV4ZWNfTGlzdGVuUHJlQ29tbWl0LiAg V2UgbmVlZCB0bworCSAqIGNsZWFuIHVwIGJvdGggdGhlIGxvY2FsIGxpc3RlbkNoYW5uZWxz SGFzaCBhbmQgYW55IGluYWN0aXZlIGVudHJpZXMgaW4KKwkgKiB0aGUgc2hhcmVkIGNoYW5u ZWxIYXNoIHRvIGF2b2lkIGFjY3VtdWxhdGluZyBzdGFsZSBkYXRhLgorCSAqLworCWlmIChw ZW5kaW5nQWN0aW9ucyAhPSBOVUxMKQorCXsKKwkJTGlzdENlbGwgICAqcDsKKworCQlmb3Jl YWNoKHAsIHBlbmRpbmdBY3Rpb25zLT5hY3Rpb25zKQorCQl7CisJCQlMaXN0ZW5BY3Rpb24g KmFjdHJlYyA9IChMaXN0ZW5BY3Rpb24gKikgbGZpcnN0KHApOworCQkJQ2hhbm5lbEhhc2hL ZXkga2V5OworCQkJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwkJCUxpc3RlbmVyRW50cnkgKmxp c3RlbmVyczsKKwkJCWJvb2wJCXJlbW92ZUZyb21Mb2NhbDsKKwkJCWJvb2wJCWZvdW5kOwor CQkJaW50CQkJaTsKKworCQkJaWYgKGFjdHJlYy0+YWN0aW9uICE9IExJU1RFTl9MSVNURU4p CisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBGb3IgZWFjaCBMSVNURU4gYWN0aW9u LCBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGNsZWFuIHVwIHRoZQorCQkJICogbG9jYWwgYW5k L29yIHNoYXJlZCBoYXNoIGVudHJpZXMuICBJZiB3ZSBoYXZlIGFuIGFjdGl2ZT10cnVlCisJ CQkgKiBlbnRyeSBpbiB0aGUgc2hhcmVkIGhhc2gsIHdlIHdlcmUgYWxyZWFkeSBsaXN0ZW5p bmcgZnJvbSBhCisJCQkgKiBwcmV2aW91cyB0cmFuc2FjdGlvbiwgc28gbGVhdmUgZXZlcnl0 aGluZyBhbG9uZS4gIE90aGVyd2lzZSwKKwkJCSAqIGNsZWFuIHVwIHdoYXQgdGhpcyB0cmFu c2FjdGlvbiBhZGRlZC4KKwkJCSAqLworCQkJcmVtb3ZlRnJvbUxvY2FsID0gdHJ1ZTsKKwkJ CWZvdW5kID0gZmFsc2U7CisKKwkJCWlmIChjaGFubmVsSGFzaCAhPSBOVUxMKQorCQkJewor CQkJCUNoYW5uZWxIYXNoUHJlcGFyZUtleSgma2V5LCBNeURhdGFiYXNlSWQsIGFjdHJlYy0+ Y2hhbm5lbCk7CisJCQkJZW50cnkgPSBkc2hhc2hfZmluZChjaGFubmVsSGFzaCwgJmtleSwg dHJ1ZSk7CisKKwkJCQlpZiAoZW50cnkgIT0gTlVMTCkKKwkJCQl7CisJCQkJCWxpc3RlbmVy cyA9IChMaXN0ZW5lckVudHJ5ICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJ CQkJCQkJCQkJCQkJCSAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQkJCQlmb3IgKGkg PSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsgaSsrKQorCQkJCQl7CisJCQkJCQlpZiAo bGlzdGVuZXJzW2ldLnByb2NubyA9PSBNeVByb2NOdW1iZXIpCisJCQkJCQl7CisJCQkJCQkJ Zm91bmQgPSB0cnVlOworCisJCQkJCQkJaWYgKGxpc3RlbmVyc1tpXS5hY3RpdmUpCisJCQkJ CQkJeworCQkJCQkJCQkvKiBBbHJlYWR5IGNvbW1pdHRlZCAtIGxlYXZlIGJvdGggaGFzaGVz IGFsb25lICovCisJCQkJCQkJCXJlbW92ZUZyb21Mb2NhbCA9IGZhbHNlOworCQkJCQkJCX0K KwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQkvKiBJbmFjdGl2ZSAtIHJlbW92ZSBm cm9tIHNoYXJlZCBoYXNoICovCisJCQkJCQkJCWVudHJ5LT5udW1MaXN0ZW5lcnMtLTsKKwkJ CQkJCQkJaWYgKGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzKQorCQkJCQkJCQkJbWVtbW92ZSgm bGlzdGVuZXJzW2ldLCAmbGlzdGVuZXJzW2kgKyAxXSwKKwkJCQkJCQkJCQkJc2l6ZW9mKExp c3RlbmVyRW50cnkpICogKGVudHJ5LT5udW1MaXN0ZW5lcnMgLSBpKSk7CisKKwkJCQkJCQkJ aWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0gMCkKKwkJCQkJCQkJeworCQkJCQkJCQkJZHNh X2ZyZWUoY2hhbm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKwkJCQkJCQkJCWRz aGFzaF9kZWxldGVfZW50cnkoY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCQkJCQkJfQorCQkJ CQkJCQllbHNlCisJCQkJCQkJCQlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBl bnRyeSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisKKwkJ CQkJaWYgKCFmb3VuZCkKKwkJCQkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gs IGVudHJ5KTsKKwkJCQl9CisJCQl9CisKKwkJCS8qIFJlbW92ZSBmcm9tIGxvY2FsIGhhc2gg aWYgYXBwcm9wcmlhdGUgKi8KKwkJCWlmIChyZW1vdmVGcm9tTG9jYWwgJiYgbGlzdGVuQ2hh bm5lbHNIYXNoICE9IE5VTEwpCisJCQkJKHZvaWQpIGhhc2hfc2VhcmNoKGxpc3RlbkNoYW5u ZWxzSGFzaCwgYWN0cmVjLT5jaGFubmVsLAorCQkJCQkJCQkgICBIQVNIX1JFTU9WRSwgTlVM TCk7CisJCX0KKwl9CisKIAlDbGVhclBlbmRpbmdBY3Rpb25zQW5kTm90aWZpZXMoKTsKIH0K IApAQCAtMTg1NCwyMCArMjQ1MywyOSBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlv bnModm9pZCkKIAlRdWV1ZVBvc2l0aW9uIGhlYWQ7CiAJU25hcHNob3QJc25hcHNob3Q7CiAK LQkvKiBGZXRjaCBjdXJyZW50IHN0YXRlICovCisJLyoKKwkgKiBGZXRjaCBjdXJyZW50IHN0 YXRlLCBpbmRpY2F0ZSB0byBvdGhlcnMgdGhhdCB3ZSBoYXZlIHdva2VuIHVwLCBhbmQgdGhh dAorCSAqIHdlIG5vdyB3aWxsIGJlIGFkdmFuY2luZyBvdXIgcG9zaXRpb24uCisJICovCiAJ TFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX1NIQVJFRCk7CiAJLyogQXNzZXJ0 IGNoZWNrcyB0aGF0IHdlIGhhdmUgYSB2YWxpZCBzdGF0ZSBlbnRyeSAqLwogCUFzc2VydChN eVByb2NQaWQgPT0gUVVFVUVfQkFDS0VORF9QSUQoTXlQcm9jTnVtYmVyKSk7CisJUVVFVUVf QkFDS0VORF9XQUtFVVBfUEVORElORyhNeVByb2NOdW1iZXIpID0gZmFsc2U7CisJaGVhZCA9 IFFVRVVFX0hFQUQ7CiAJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKTsK LQloZWFkID0gUVVFVUVfSEVBRDsKLQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7 CiAKIAlpZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgaGVhZCkpCiAJewogCQkvKiBOb3RoaW5n IHRvIGRvLCB3ZSBoYXZlIHJlYWQgYWxsIG5vdGlmaWNhdGlvbnMgYWxyZWFkeS4gKi8KKwkJ TFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQlyZXR1cm47CiAJfQogCisJUVVF VUVfQkFDS0VORF9JU19BRFZBTkNJTkcoTXlQcm9jTnVtYmVyKSA9IHRydWU7CisJUVVFVUVf QkFDS0VORF9BRFZBTkNJTkdfUE9TKE15UHJvY051bWJlcikgPSBoZWFkOworCisJTFdMb2Nr UmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOworCiAJLyotLS0tLS0tLS0tCiAJICogR2V0IHNu YXBzaG90IHdlJ2xsIHVzZSB0byBkZWNpZGUgd2hpY2ggeGFjdHMgYXJlIHN0aWxsIGluIHBy b2dyZXNzLgogCSAqIFRoaXMgaXMgdHJpY2tpZXIgdGhhbiBpdCBtaWdodCBzZWVtLCBiZWNh dXNlIG9mIHJhY2UgY29uZGl0aW9ucy4KQEAgLTE5NTQsNiArMjU2Miw4IEBAIGFzeW5jUXVl dWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lkKQogCiAJCS8qIFVwZGF0ZSBzaGFyZWQgc3Rh dGUgKi8KIAkJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX1NIQVJFRCk7CisK KwkJUVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoTXlQcm9jTnVtYmVyKSA9IGZhbHNlOwog CQlRVUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gcG9zOwogCQlMV0xvY2tSZWxl YXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAKQEAgLTIwNTUsNyArMjY2NSw3IEBAIGFzeW5jUXVl dWVQcm9jZXNzUGFnZUVudHJpZXMoUXVldWVQb3NpdGlvbiAqY3VycmVudCwKIAkJCSAqIG92 ZXIgaXQgb24gdGhlIGZpcnN0IExJU1RFTiBpbiBhIHNlc3Npb24sIGFuZCBub3QgZ2V0IHN0 dWNrIG9uCiAJCQkgKiBpdCBpbmRlZmluaXRlbHkuCiAJCQkgKi8KLQkJCWlmIChsaXN0ZW5D aGFubmVscyA9PSBOSUwpCisJCQlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwg aGFzaF9nZXRfbnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKQogCQkJCWNv bnRpbnVlOwogCiAJCQlpZiAoVHJhbnNhY3Rpb25JZERpZENvbW1pdChxZS0+eGlkKSkKQEAg LTIzMTAsNyArMjkyMCw3IEBAIFByb2Nlc3NJbmNvbWluZ05vdGlmeShib29sIGZsdXNoKQog CW5vdGlmeUludGVycnVwdFBlbmRpbmcgPSBmYWxzZTsKIAogCS8qIERvIG5vdGhpbmcgZWxz ZSBpZiB3ZSBhcmVuJ3QgYWN0aXZlbHkgbGlzdGVuaW5nICovCi0JaWYgKGxpc3RlbkNoYW5u ZWxzID09IE5JTCkKKwlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9n ZXRfbnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKQogCQlyZXR1cm47CiAK IAlpZiAoVHJhY2Vfbm90aWZ5KQpAQCAtMjQxNCwxMyArMzAyNCwxNSBAQCBBZGRFdmVudFRv UGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbikKIHsKIAlBc3NlcnQocGVuZGluZ05v dGlmaWVzLT5ldmVudHMgIT0gTklMKTsKIAotCS8qIENyZWF0ZSB0aGUgaGFzaCB0YWJsZSBp ZiBpdCdzIHRpbWUgdG8gKi8KKwkvKiBDcmVhdGUgdGhlIGhhc2ggdGFibGVzIGlmIGl0J3Mg dGltZSB0byAqLwogCWlmIChsaXN0X2xlbmd0aChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cykg Pj0gTUlOX0hBU0hBQkxFX05PVElGSUVTICYmCiAJCXBlbmRpbmdOb3RpZmllcy0+aGFzaHRh YiA9PSBOVUxMKQogCXsKIAkJSEFTSENUTAkJaGFzaF9jdGw7CiAJCUxpc3RDZWxsICAgKmw7 CiAKKwkJQXNzZXJ0KHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgPT0gTlVMTCk7 CisKIAkJLyogQ3JlYXRlIHRoZSBoYXNoIHRhYmxlICovCiAJCWhhc2hfY3RsLmtleXNpemUg PSBzaXplb2YoTm90aWZpY2F0aW9uICopOwogCQloYXNoX2N0bC5lbnRyeXNpemUgPSBzaXpl b2Yoc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gpOwpAQCAtMjQzMywxMCArMzA0NSwyMiBAQCBB ZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbikKIAkJCQkJCSZoYXNo X2N0bCwKIAkJCQkJCUhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNIX0NPTVBBUkUg fCBIQVNIX0NPTlRFWFQpOwogCisJCS8qIENyZWF0ZSB0aGUgY2hhbm5lbCBoYXNoIHRhYmxl ICovCisJCW1lbXNldCgmaGFzaF9jdGwsIDAsIHNpemVvZihoYXNoX2N0bCkpOworCQloYXNo X2N0bC5rZXlzaXplID0gTkFNRURBVEFMRU47CisJCWhhc2hfY3RsLmVudHJ5c2l6ZSA9IHNp emVvZihzdHJ1Y3QgQ2hhbm5lbEhhc2gpOworCQloYXNoX2N0bC5oY3h0ID0gQ3VyVHJhbnNh Y3Rpb25Db250ZXh0OworCQlwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxIYXNodGFiID0KKwkJ CWhhc2hfY3JlYXRlKCJQZW5kaW5nIE5vdGlmeSBDaGFubmVscyIsCisJCQkJCQk2NEwsCisJ CQkJCQkmaGFzaF9jdGwsCisJCQkJCQlIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MgfCBIQVNI X0NPTlRFWFQpOworCiAJCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3RpbmcgZXZl bnRzICovCiAJCWZvcmVhY2gobCwgcGVuZGluZ05vdGlmaWVzLT5ldmVudHMpCiAJCXsKIAkJ CU5vdGlmaWNhdGlvbiAqb2xkbiA9IChOb3RpZmljYXRpb24gKikgbGZpcnN0KGwpOworCQkJ Y2hhcgkgICAqY2hhbm5lbCA9IG9sZG4tPmRhdGE7CiAJCQlib29sCQlmb3VuZDsKIAogCQkJ KHZvaWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiwKQEAgLTI0NDQs MjIgKzMwNjgsNDIgQEAgQWRkRXZlbnRUb1BlbmRpbmdOb3RpZmllcyhOb3RpZmljYXRpb24g Km4pCiAJCQkJCQkJICAgSEFTSF9FTlRFUiwKIAkJCQkJCQkgICAmZm91bmQpOwogCQkJQXNz ZXJ0KCFmb3VuZCk7CisKKwkJCS8qIEluc2VydCBjaGFubmVsIGludG8gY2hhbm5lbEhhc2h0 YWIgKi8KKwkJCSh2b2lkKSBoYXNoX3NlYXJjaChwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxI YXNodGFiLAorCQkJCQkJCSAgIGNoYW5uZWwsCisJCQkJCQkJICAgSEFTSF9FTlRFUiwKKwkJ CQkJCQkgICAmZm91bmQpOworCQkJLyogZm91bmQgbWF5IGJlIHRydWUgaWYgbXVsdGlwbGUg ZXZlbnRzIG9uIHNhbWUgY2hhbm5lbCAqLwogCQl9CiAJfQogCiAJLyogQWRkIG5ldyBldmVu dCB0byB0aGUgbGlzdCwgaW4gb3JkZXIgKi8KIAlwZW5kaW5nTm90aWZpZXMtPmV2ZW50cyA9 IGxhcHBlbmQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMsIG4pOwogCi0JLyogQWRkIGV2ZW50 IHRvIHRoZSBoYXNoIHRhYmxlIGlmIG5lZWRlZCAqLworCS8qIEFkZCBldmVudCB0byB0aGUg aGFzaCB0YWJsZXMgaWYgbmVlZGVkICovCiAJaWYgKHBlbmRpbmdOb3RpZmllcy0+aGFzaHRh YiAhPSBOVUxMKQogCXsKIAkJYm9vbAkJZm91bmQ7CiAKKwkJQXNzZXJ0KHBlbmRpbmdOb3Rp Zmllcy0+Y2hhbm5lbEhhc2h0YWIgIT0gTlVMTCk7CisKIAkJKHZvaWQpIGhhc2hfc2VhcmNo KHBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiwKIAkJCQkJCSAgICZuLAogCQkJCQkJICAgSEFT SF9FTlRFUiwKIAkJCQkJCSAgICZmb3VuZCk7CiAJCUFzc2VydCghZm91bmQpOworCisJCS8q IEFkZCBjaGFubmVsIHRvIGNoYW5uZWxIYXNodGFiICovCisJCXsKKwkJCWNoYXIJICAgKmNo YW5uZWwgPSBuLT5kYXRhOworCisJCQkodm9pZCkgaGFzaF9zZWFyY2gocGVuZGluZ05vdGlm aWVzLT5jaGFubmVsSGFzaHRhYiwKKwkJCQkJCQkgICBjaGFubmVsLAorCQkJCQkJCSAgIEhB U0hfRU5URVIsCisJCQkJCQkJICAgJmZvdW5kKTsKKwkJCS8qIGZvdW5kIG1heSBiZSB0cnVl IGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBldmVudCBvbiB0aGlzIGNoYW5uZWwgKi8KKwkJfQog CX0KIH0KIApAQCAtMjQ5Nyw3ICszMTQxLDcgQEAgbm90aWZpY2F0aW9uX21hdGNoKGNvbnN0 IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSkKIAlyZXR1cm4g MTsJCQkJCS8qIG5vdCBlcXVhbCAqLwogfQogCi0vKiBDbGVhciB0aGUgcGVuZGluZ0FjdGlv bnMgYW5kIHBlbmRpbmdOb3RpZmllcyBsaXN0cy4gKi8KKy8qIENsZWFyIHRoZSBwZW5kaW5n QWN0aW9ucywgcGVuZGluZ05vdGlmaWVzLCBhbmQgcGVuZGluZ05vdGlmeUNoYW5uZWxzIGxp c3RzLiAqLwogc3RhdGljIHZvaWQKIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2 b2lkKQogewpAQCAtMjUwOSw2ICszMTUzLDcgQEAgQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5v dGlmaWVzKHZvaWQpCiAJICovCiAJcGVuZGluZ0FjdGlvbnMgPSBOVUxMOwogCXBlbmRpbmdO b3RpZmllcyA9IE5VTEw7CisJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOwogfQogCiAv KgpAQCAtMjUxOSwzICszMTY0LDE2IEBAIGNoZWNrX25vdGlmeV9idWZmZXJzKGludCAqbmV3 dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiB7CiAJcmV0dXJuIGNoZWNr X3NscnVfYnVmZmVycygibm90aWZ5X2J1ZmZlcnMiLCBuZXd2YWwpOwogfQorCisKKy8qCisg KiBDaGFubmVsSGFzaFByZXBhcmVLZXkKKyAqCQlQcmVwYXJlIGEgY2hhbm5lbCBrZXkgZm9y IHVzZSBhcyBhIGhhc2gga2V5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK0NoYW5uZWxI YXNoUHJlcGFyZUtleShDaGFubmVsSGFzaEtleSAqa2V5LCBPaWQgZGJvaWQsIGNvbnN0IGNo YXIgKmNoYW5uZWwpCit7CisJbWVtc2V0KGtleSwgMCwgc2l6ZW9mKENoYW5uZWxIYXNoS2V5 KSk7CisJa2V5LT5kYm9pZCA9IGRib2lkOworCXN0cmxjcHkoa2V5LT5jaGFubmVsLCBjaGFu bmVsLCBOQU1FREFUQUxFTik7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2 aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4IGMxYWM3MWZmN2YyLi43YzJjZjk2MDA5 MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9u YW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9u YW1lcy50eHQKQEAgLTM2OSw2ICszNjksNyBAQCBTdWJ0cmFuc0J1ZmZlcgkiV2FpdGluZyBm b3IgSS9PIG9uIGEgc3ViLXRyYW5zYWN0aW9uIFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE9m ZnNldEJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG9mZnNldCBTTFJV IGJ1ZmZlci4iCiBNdWx0aVhhY3RNZW1iZXJCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBh IG11bHRpeGFjdCBtZW1iZXIgU0xSVSBidWZmZXIuIgogTm90aWZ5QnVmZmVyCSJXYWl0aW5n IGZvciBJL08gb24gYSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IG1lc3NhZ2UgU0xSVSBi dWZmZXIuIgorTm90aWZ5Q2hhbm5lbEhhc2gJIldhaXRpbmcgdG8gYWNjZXNzIHRoZSA8Y29t bWFuZD5OT1RJRlk8L2NvbW1hbmQ+IGNoYW5uZWwgaGFzaCB0YWJsZS4iCiBTZXJpYWxCdWZm ZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbiBjb25m bGljdCBTTFJVIGJ1ZmZlci4iCiBXQUxJbnNlcnQJIldhaXRpbmcgdG8gaW5zZXJ0IFdBTCBk YXRhIGludG8gYSBtZW1vcnkgYnVmZmVyLiIKIEJ1ZmZlckNvbnRlbnQJIldhaXRpbmcgdG8g YWNjZXNzIGEgZGF0YSBwYWdlIGluIG1lbW9yeS4iCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlz dC5oCmluZGV4IDViMGNlMzgzNDA4Li40MjM2OTY1ZTcyYSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9s d2xvY2tsaXN0LmgKQEAgLTEwMSw2ICsxMDEsNyBAQCBQR19MV0xPQ0tUUkFOQ0hFKFNVQlRS QU5TX0JVRkZFUiwgU3VidHJhbnNCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE1VTFRJWEFD VE9GRlNFVF9CVUZGRVIsIE11bHRpWGFjdE9mZnNldEJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5D SEUoTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwgTXVsdGlYYWN0TWVtYmVyQnVmZmVyKQogUEdf TFdMT0NLVFJBTkNIRShOT1RJRllfQlVGRkVSLCBOb3RpZnlCdWZmZXIpCitQR19MV0xPQ0tU UkFOQ0hFKE5PVElGWV9DSEFOTkVMX0hBU0gsIE5vdGlmeUNoYW5uZWxIYXNoKQogUEdfTFdM T0NLVFJBTkNIRShTRVJJQUxfQlVGRkVSLCBTZXJpYWxCdWZmZXIpCiBQR19MV0xPQ0tUUkFO Q0hFKFdBTF9JTlNFUlQsIFdBTEluc2VydCkKIFBHX0xXTE9DS1RSQU5DSEUoQlVGRkVSX0NP TlRFTlQsIEJ1ZmZlckNvbnRlbnQpCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4 IGM3NTFjMjVhMDRkLi4zZDM3MWMyODA4ZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTQxMiw2ICs0MTIsOCBAQCBDYXRhbG9nSWRNYXBFbnRyeQogQ2F0YWxvZ0luZGV4 U3RhdGUKIENoYW5nZVZhck5vZGVzX2NhbGxiYWNrCiBDaGFuZ2VWYXJOb2Rlc19jb250ZXh0 CitDaGFubmVsRW50cnkKK0NoYW5uZWxIYXNoS2V5CiBDaGVja1BvaW50CiBDaGVja1BvaW50 U3RtdAogQ2hlY2twb2ludFN0YXRzRGF0YQpAQCAtMTU2NCw2ICsxNTY2LDcgQEAgTGlzdERp Y3Rpb25hcnkKIExpc3RQYXJzZWRMZXgKIExpc3RlbkFjdGlvbgogTGlzdGVuQWN0aW9uS2lu ZAorTGlzdGVuZXJFbnRyeQogTGlzdGVuU3RtdAogTG9JbmZvCiBMb2FkU3RtdAotLSAKMi41 MC4xCgo= --db2ddc30d7a144ee8775b70091dbe550--