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 1vZtMP-000rb5-1q for pgsql-hackers@arkaria.postgresql.org; Sun, 28 Dec 2025 16:11:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vZtMN-00Dj9M-1A for pgsql-hackers@arkaria.postgresql.org; Sun, 28 Dec 2025 16:11:12 +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 1vZtMM-00Dj9C-0p for pgsql-hackers@lists.postgresql.org; Sun, 28 Dec 2025 16:11:11 +0000 Received: from fout-a8-smtp.messagingengine.com ([103.168.172.151]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vZtMJ-0032eD-2w for pgsql-hackers@postgresql.org; Sun, 28 Dec 2025 16:11:10 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfout.phl.internal (Postfix) with ESMTP id 63384EC00BC; Sun, 28 Dec 2025 11:11:06 -0500 (EST) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-05.internal (MEProxy); Sun, 28 Dec 2025 11:11:06 -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=fm2; t=1766938266; x=1767024666; bh=5rdMfCHx5x h5PuQJ5nbE1tfx+Cgy5m6fkqStjgWjE84=; b=Ci+swGkQwQsJPqoDMv3goWvPBD sr2B9kvbM9WrGaA2e4fdzIlcuUC46vmYSj941IIgSBLs8gzPrnXLQFtP9yvupvLc 6EcIn4c8VieEQPU7LulSVSnYIT6TTJDYHwe2WJZ1iTOruwb0t0wPqQq6F8qlPZqM LXa1wAwrq4DfXIZp5YMNHFXgk8Z8LgrPgxT3NmcnIe+hVXdE17Cb4guA1sUo8M2g OkTn7ELq4T7Q1xFON67L+2k/QHCU3zNO4kdZRNTsuCoLFKQ7hHi/EZOgEqmV41Sn hSCsoWVhO1iJdQTeMOOiRbX/8/wgBD/EqFg5PuqqaEcCX16BD/rvTIX6S1Gg== 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=fm2; t= 1766938266; x=1767024666; bh=5rdMfCHx5xh5PuQJ5nbE1tfx+Cgy5m6fkqS tjgWjE84=; b=UGnIs79IypBs2kDMxHd1qPprHK2LxkUFrXdtZRe64qglEDsmuW+ RT8hy+tVad6xwB+RVuIb3IS1GKUTpf6PqmLdRyMSRWXZqDGxuLXjBRfcOITRoCAV bhzFrXS6xcPIIUKUJVPG+h20xT9TcVysRSGofJt22IS7U+zOpPqXUZklQh+YqjTR c9atKcAt4oFSwhNct9YTCgI4ItQElp7BTNg+Mg/ir7NaRGsqjijdvtJPmv3WpVcP 74yk62p6fQCKYkdX09d5ZJbaSHiDObVtVrNA/EReciAO3C9NPesfNrl+ktSxEShS eJDwSdjQ4Xu/qTqPoXcAnYqlMFfuC4Q+49w== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgdejgeejtdcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecunecujfgurhepofggfffhvfevkfgjfhfutgesmhdtreerre dttdenucfhrhhomhepfdflohgvlhculfgrtghosghsohhnfdcuoehjohgvlhestghomhhp ihhlvghrrdhorhhgqeenucggtffrrghtthgvrhhnpeffgfelffffvdehhfeigeefieejud ejvdeiueevueeggfevueekveeiteehhfetieenucevlhhushhtvghrufhiiigvpedtnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehjohgvlhestghomhhpihhlvghrrdhorhhgpdhnsg gprhgtphhtthhopeefpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehlihdrvghv rghnrdgthhgrohesghhmrghilhdrtghomhdprhgtphhtthhopehpghhsqhhlqdhhrggtkh gvrhhssehpohhsthhgrhgvshhqlhdrohhrghdprhgtphhtthhopehtghhlsehsshhsrdhp ghhhrdhprgdruhhs X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id C4ED218E0069; Sun, 28 Dec 2025 11:11:05 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Sun, 28 Dec 2025 17:10:24 +0100 From: "Joel Jacobson" To: "Tom Lane" Cc: "Chao Li" , pgsql-hackers Message-Id: In-Reply-To: References: <6899c044-4a82-49be-8117-e6f669765f7e@app.fastmail.com> <165530.1752362320@sss.pgh.pa.us> <02a7cd37-e2fc-4212-8b19-f8c239c95fb8@app.fastmail.com> <96f00bf1-cc9d-4520-9d02-9e14e7767c88@app.fastmail.com> <30c2aa7d-dd6c-4b68-a2e4-f217a1a34acf@app.fastmail.com> <0b4d402a-9ac2-4aa8-acf8-8231dbe579ea@app.fastmail.com> <3095599.1758644879@sss.pgh.pa.us> <0dc6a2cc-5216-4dc1-9dd2-430cafc6095b@app.fastmail.com> <52CC167F-763B-4ECA-B0B4-DAB381816828@gmail.com> <9186C6D0-F7A9-482A-9183-89E530B57E36@gmail.com> <1073593.1759423179@sss.pgh.pa.us> <4bd5e6c4-6fa7-44bb-869d-59a32a331fa8@app.fastmail.com> <85828f29-e72e-4400-94f3-9a69bc8dc239@app.fastmail.com> <2495353.1759860890@sss.pgh.pa.us> <8aeae418-92a6-4bbd-9c06-9574c79e59f7@app.fastmail.com> <2531672.1759868124@sss.pgh.pa.us> <474efa78-337c-41cd-a73a-f845a0115109@app.fastmail.com> <2749343.1759949176@sss.pgh.pa.us> <8bfca2be-1ec0-4e15-aafb-0b7b661fe936@app.fastmail.com> <9eba307f-f2fb-48f0-9507-2e197f39ef9e@app.fastmail.com> <8c71183a-0d28-4bcf-a806-78446ff95404@app.fastmail.com> <1009807.1760476747@sss.pgh.pa.us> <1F7227F5-C33D-4E2C-8511-33F1468590D0@gmail.com> <0a5a20d3-4621-46b3-b2ab-903f63a20dea@app.fastmail.com> <6F913129-ABEF-4004-AAF3-F22FC!3!4!29AE8@gmail.com> <1547585.1760645808@sss.pgh.pa.us> <14865EB6-0BF4-462B-9072-10BDAC10> <1459429.1764101848@sss.pgh.pa.us> <6e538502-81c8-453b-ba6d-be2a5ce85e9e@app.fastmail.com> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=2c19c0e3a2cb48078ad0302f39fd1755 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --2c19c0e3a2cb48078ad0302f39fd1755 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sat, Dec 27, 2025, at 13:40, Joel Jacobson wrote: > On Fri, Dec 26, 2025, at 21:12, Joel Jacobson wrote: >> On Tue, Nov 25, 2025, at 21:17, Tom Lane wrote: >>> "Joel Jacobson" writes: >>>> It looks to me like it would be best with two boolean fields; one >>>> boolean to stage the updates during PreCommit_Notify, that each >>>> pendingActions could flip back and forth, and another boolean that >>>> represents the current value, which we would overwrite with the staged >>>> value during AtCommit_Notify. >>> >>> +1, I had a feeling that a single boolean wouldn't quite do it. >>> (There are various ways we could define the states, but what >>> you say above seems pretty reasonable.) >> >> I've implemented the two boolean approach and think it's good. I've reworked the staging mechanism for LISTEN/UNLISTEN. The new design tracks LISTEN state at three levels: * pendingListenChannels: per-transaction pending changes * listenChannelsHash: per-backend committed state cache * channelHash: cluster-wide shared state The first two are local hash tables, the third is a dshash in shared memory. PreCommit_Notify updates all three (doing any allocations before clog commit for OOM safety), and AtCommit_Notify finalizes the changes. The previous version tried to track pending state in the shared ListenerEntry itself using two booleans (staged/current). This worked, but I think the three-layer approach is cleaner. The main benefit is that pendingListenChannels is now a hash table instead of a simple List. In the old design, LISTEN foo; UNLISTEN foo; LISTEN foo would create three list entries that all had to be processed at commit. The new design collapses this to one hash entry storing the final state, which we just apply at commit. A nice bonus is that UNLISTEN became simpler. In PreCommit_Notify it just records the intent in the local pending hash. The old design had to acquire an exclusive lock on the shared dshash entry to flip the staged boolean. UNLISTEN ALL is similar -- it now just scans the backend's own local hashes instead of the cluster-wide shared hash. The tradeoff is one additional local hash table per transaction that executes LISTEN/UNLISTEN. This seems like a reasonable price for the simpler logic. I also renamed a few things for clarity: ChannelEntry is now ChannelListeners (since it holds the array of listeners for a channel), and channelHashtab is now channelSet (since it's just a set of channel names, not a hash of channel-related data). /Joel --2c19c0e3a2cb48078ad0302f39fd1755 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v33.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v33.patch?=" Content-Transfer-Encoding: base64 RnJvbSBkMzFjYWE1ZGE2MzNjMGE3MDUwNDViYTE3ZTM2MzYzZjMyYmRjNWM1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU2F0LCAyNyBEZWMgMjAyNSAwODowNjoyMSArMDEwMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBJbXByb3ZlIExJU1RFTi9OT1RJRlkgdGVzdCBjb3ZlcmFnZQoKVGhpcyBhZGRz IGlzb2xhdGlvbiB0ZXN0cyB0byBjb3ZlciBwcmV2aW91c2x5IHVudGVzdGVkIGNvZGUgcGF0 aHM6CgoqIENoZWNrIHNpbXBsZSBOT1RJRlkgcmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQgaGFz IG5vIGFjdGlvbgoqIENoZWNrIExJU1RFTiByZXBhcmVudGluZyBpbiBzdWJ0cmFuc2FjdGlv bgoqIENoZWNrIExJU1RFTiBtZXJnZSBwYXRoIHdoZW4gYm90aCBvdXRlciBhbmQgaW5uZXIg dHJhbnNhY3Rpb25zIGhhdmUgYWN0aW9ucwoqIENoZWNrIExJU1RFTiBhYm9ydCBwYXRoIChS T0xMQkFDSyBUTyBTQVZFUE9JTlQgZGlzY2FyZHMgcGVuZGluZyBhY3Rpb25zKQoqIENoZWNr IG5vdGlmaWNhdGlvbl9tYXRjaCBmdW5jdGlvbiAodHJpZ2dlcmVkIGJ5IGhhc2ggdGFibGUg ZHVwbGljYXRlIGRldGVjdGlvbikKKiBDaGVjayB0aGF0IG5vdGlmaWNhdGlvbnMgc2VudCBm cm9tIGEgYmFja2VuZCB0aGF0IGhhcyBub3QgZG9uZSBMSVNURU4KICBhcmUgcHJvcGVybHkg ZGVsaXZlcmVkIHRvIGEgbGlzdGVuZXIgaW4gYW5vdGhlciBiYWNrZW5kCiogQ2hlY2sgVU5M SVNURU4gKiBjYW5jZWxzIGEgTElTVEVOIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uCgpUaGlz IGFsc28gYWRkcyBhIHRlc3QgdG8gcHJlcGFyZSBmb3IgdGhlIG5leHQgcGF0Y2g6CgoqIENo ZWNrIENoYW5uZWxIYXNoQWRkTGlzdGVuZXIgYXJyYXkgZ3Jvd3RoCi0tLQogc3JjL3Rlc3Qv aXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlmeS5vdXQgfCAxMjQgKysrKysrKysrKysr KysrKysrLQogc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjICAg fCAgNzIgKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTk1IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0 ZWQvYXN5bmMtbm90aWZ5Lm91dCBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9hc3lu Yy1ub3RpZnkub3V0CmluZGV4IDU1NmUxODA1ODkzLi41ZDZiY2NlMmIwMiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlmeS5vdXQKKysrIGIv c3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlmeS5vdXQKQEAgLTEsNCAr MSw0IEBACi1QYXJzZWQgdGVzdCBzcGVjIHdpdGggMyBzZXNzaW9ucworUGFyc2VkIHRlc3Qg c3BlYyB3aXRoIDcgc2Vzc2lvbnMKIAogc3RhcnRpbmcgcGVybXV0YXRpb246IGxpc3RlbmMg bm90aWZ5MSBub3RpZnkyIG5vdGlmeTMgbm90aWZ5Zgogc3RlcCBsaXN0ZW5jOiBMSVNURU4g YzE7IExJU1RFTiBjMjsKQEAgLTQ3LDYgKzQ3LDExNSBAQCBub3RpZmllcjogTk9USUZZICJj MiIgd2l0aCBwYXlsb2FkICJwYXlsb2FkIiBmcm9tIG5vdGlmaWVyCiBub3RpZmllcjogTk9U SUZZICJjMSIgd2l0aCBwYXlsb2FkICJwYXlsb2FkcyIgZnJvbSBub3RpZmllcgogbm90aWZp ZXI6IE5PVElGWSAiYzIiIHdpdGggcGF5bG9hZCAicGF5bG9hZHMiIGZyb20gbm90aWZpZXIK IAorc3RhcnRpbmcgcGVybXV0YXRpb246IGxpc3RlbmMgbm90aWZ5c19zaW1wbGUKK3N0ZXAg bGlzdGVuYzogTElTVEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIG5vdGlmeXNfc2ltcGxlOiAK KwlCRUdJTjsKKwlTQVZFUE9JTlQgczE7CisJTk9USUZZIGMxLCAnc2ltcGxlMSc7CisJTk9U SUZZIGMyLCAnc2ltcGxlMic7CisJUkVMRUFTRSBTQVZFUE9JTlQgczE7CisJQ09NTUlUOwor Citub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJzaW1wbGUxIiBmcm9tIG5v dGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMiIgd2l0aCBwYXlsb2FkICJzaW1wbGUyIiBm cm9tIG5vdGlmaWVyCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBsc2JlZ2luIGxzc2F2ZXBv aW50IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorc3RlcCBsc2JlZ2lu OiBCRUdJTjsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNsaXN0 ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBsc3JlbGVhc2U6IFJFTEVBU0UgU0FW RVBPSU5UIHMxOworc3RlcCBsc2NvbW1pdDogQ09NTUlUOworc3RlcCBsc25vdGlmeTogTk9U SUZZIGMxLCAnc3VieGFjdF90ZXN0JzsKK2xpc3Rlbl9zdWJ4YWN0OiBOT1RJRlkgImMxIiB3 aXRoIHBheWxvYWQgInN1YnhhY3RfdGVzdCIgZnJvbSBsaXN0ZW5fc3VieGFjdAorCitzdGFy dGluZyBwZXJtdXRhdGlvbjogbHNiZWdpbiBsc2xpc3Rlbl9vdXRlciBsc3NhdmVwb2ludCBs c2xpc3RlbiBsc3JlbGVhc2UgbHNjb21taXQgbHNub3RpZnkKK3N0ZXAgbHNiZWdpbjogQkVH SU47CitzdGVwIGxzbGlzdGVuX291dGVyOiBMSVNURU4gYzM7CitzdGVwIGxzc2F2ZXBvaW50 OiBTQVZFUE9JTlQgczE7CitzdGVwIGxzbGlzdGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsK K3N0ZXAgbHNyZWxlYXNlOiBSRUxFQVNFIFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNjb21taXQ6 IENPTU1JVDsKK3N0ZXAgbHNub3RpZnk6IE5PVElGWSBjMSwgJ3N1YnhhY3RfdGVzdCc7Cits aXN0ZW5fc3VieGFjdDogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJzdWJ4YWN0X3Rlc3Qi IGZyb20gbGlzdGVuX3N1YnhhY3QKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGxzYmVnaW4g bHNzYXZlcG9pbnQgbHNsaXN0ZW4gbHNyb2xsYmFjayBsc2NvbW1pdCBsc25vdGlmeV9jaGVj aworc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNBVkVQT0lOVCBz MTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBsc3JvbGxi YWNrOiBST0xMQkFDSyBUTyBTQVZFUE9JTlQgczE7CitzdGVwIGxzY29tbWl0OiBDT01NSVQ7 CitzdGVwIGxzbm90aWZ5X2NoZWNrOiBOT1RJRlkgYzEsICdzaG91bGRfbm90X3JlY2VpdmUn OworCitzdGFydGluZyBwZXJtdXRhdGlvbjogbHVubGlzdGVuX2FsbCBub3RpZnkxIGxjaGVj aworc3RlcCBsdW5saXN0ZW5fYWxsOiBCRUdJTjsgTElTVEVOIGMxOyBVTkxJU1RFTiAqOyBD T01NSVQ7CitzdGVwIG5vdGlmeTE6IE5PVElGWSBjMTsKK3N0ZXAgbGNoZWNrOiBTRUxFQ1Qg MSBBUyB4OworeAorLQorMQorKDEgcm93KQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBs aXN0ZW5jIG5vdGlmeV9tYW55X3dpdGhfZHVwCitzdGVwIGxpc3RlbmM6IExJU1RFTiBjMTsg TElTVEVOIGMyOworc3RlcCBub3RpZnlfbWFueV93aXRoX2R1cDogCisJQkVHSU47CisJU0VM RUNUIHBnX25vdGlmeSgnYzEnLCAnbXNnJyB8fCBzOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxNykgczsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdtc2cxJyk7CisJQ09N TUlUOworCitwZ19ub3RpZnkKKy0tLS0tLS0tLQorICAgICAgICAgCisgICAgICAgICAKKyAg ICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisg ICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAor ICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAK KygxNyByb3dzKQorCitwZ19ub3RpZnkKKy0tLS0tLS0tLQorICAgICAgICAgCisoMSByb3cp CisKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEiIGZyb20gbm90 aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzIiIGZyb20g bm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzMiIGZy b20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzQi IGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1z ZzUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQg Im1zZzYiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxv YWQgIm1zZzciIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIm1zZzgiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRo IHBheWxvYWQgIm1zZzkiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3 aXRoIHBheWxvYWQgIm1zZzEwIiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJj MSIgd2l0aCBwYXlsb2FkICJtc2cxMSIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6IE5PVElG WSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTIiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBO T1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEzIiBmcm9tIG5vdGlmaWVyCitub3RpZmll cjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxNCIgZnJvbSBub3RpZmllcgorbm90 aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTUiIGZyb20gbm90aWZpZXIK K25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzE2IiBmcm9tIG5vdGlm aWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxNyIgZnJvbSBu b3RpZmllcgorCitzdGFydGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBsbGlzdGVuIGwybGlz dGVuIGwzbGlzdGVuIGxzbGlzdGVuCitzdGVwIGxpc3RlbmM6IExJU1RFTiBjMTsgTElTVEVO IGMyOworc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKK3N0ZXAgbDJsaXN0 ZW46IExJU1RFTiBjMTsKK3N0ZXAgbDNsaXN0ZW46IExJU1RFTiBjMTsKK3N0ZXAgbHNsaXN0 ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGxp c3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3RpZnlmIGxjaGVjawogc3RlcCBsbGlz dGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKIHN0ZXAgbm90aWZ5MTogTk9USUZZIGMxOwpA QCAtOTUsNiArMjA0LDggQEAgbGlzdGVuZXI6IE5PVElGWSAiYzIiIHdpdGggcGF5bG9hZCAi IiBmcm9tIG5vdGlmaWVyCiAKIHN0YXJ0aW5nIHBlcm11dGF0aW9uOiBsMmxpc3RlbiBsMmJl Z2luIG5vdGlmeTEgbGJlZ2lucyBsbGlzdGVuIGxjb21taXQgbDJjb21taXQgbDJzdG9wCiBz dGVwIGwybGlzdGVuOiBMSVNURU4gYzE7CitsaXN0ZW5lcjI6IE5PVElGWSAiYzEiIHdpdGgg cGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCitsaXN0ZW5lcjI6IE5PVElGWSAiYzEiIHdpdGgg cGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiBzdGVwIGwyYmVnaW46IEJFR0lOOwogc3RlcCBu b3RpZnkxOiBOT1RJRlkgYzE7CiBzdGVwIGxiZWdpbnM6IEJFR0lOIElTT0xBVElPTiBMRVZF TCBTRVJJQUxJWkFCTEU7CkBAIC0xMDQsNiArMjE1LDE3IEBAIHN0ZXAgbDJjb21taXQ6IENP TU1JVDsKIGxpc3RlbmVyMjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICIiIGZyb20gbm90 aWZpZXIKIHN0ZXAgbDJzdG9wOiBVTkxJU1RFTiAqOwogCitzdGFydGluZyBwZXJtdXRhdGlv bjogbGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVjaworc3RlcCBsY2hfbGlzdGVuOiBM SVNURU4gY2g7CitzdGVwIG5jaF9ub3RpZnk6IE5PVElGWSBjaCwgJ2FhJzsKK3N0ZXAgbGNo X2NoZWNrOiBTRUxFQ1QgMSBBUyB4OworeAorLQorMQorKDEgcm93KQorCitsaXN0ZW5lcl9j aDogTk9USUZZICJjaCIgd2l0aCBwYXlsb2FkICJhYSIgZnJvbSBub3RpZmllcl9jaAorCiBz dGFydGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBsYmVnaW4gdXNhZ2UgYmlnbm90aWZ5IHVz YWdlCiBzdGVwIGxsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOwogc3RlcCBsYmVnaW46 IEJFR0lOOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5v dGlmeS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVj CmluZGV4IDBiOGNmZDkxMDgzLi5kMDljMjI5N2YwOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv aXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjCisrKyBiL3NyYy90ZXN0L2lzb2xh dGlvbi9zcGVjcy9hc3luYy1ub3RpZnkuc3BlYwpAQCAtMzEsNiArMzEsMjAgQEAgc3RlcCBu b3RpZnlzMQl7CiAJUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHMyOwogCUNPTU1JVDsKIH0KK3N0 ZXAgbm90aWZ5c19zaW1wbGUJeworCUJFR0lOOworCVNBVkVQT0lOVCBzMTsKKwlOT1RJRlkg YzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIsICdzaW1wbGUyJzsKKwlSRUxFQVNFIFNBVkVQ T0lOVCBzMTsKKwlDT01NSVQ7Cit9CitzdGVwIG5vdGlmeV9tYW55X3dpdGhfZHVwCXsKKwlC RUdJTjsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdtc2cnIHx8IHM6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDE3KSBzOworCVNFTEVDVCBwZ19ub3RpZnkoJ2MxJywgJ21z ZzEnKTsKKwlDT01NSVQ7Cit9CiBzdGVwIHVzYWdlCQl7IFNFTEVDVCBwZ19ub3RpZmljYXRp b25fcXVldWVfdXNhZ2UoKSA+IDAgQVMgbm9uemVybzsgfQogc3RlcCBiaWdub3RpZnkJeyBT RUxFQ1QgY291bnQocGdfbm90aWZ5KCdjMScsIHM6OnRleHQpKSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwKSBzOyB9CiB0ZWFyZG93bgkJeyBVTkxJU1RFTiAqOyB9CkBAIC00Myw2 ICs1Nyw3IEBAIHN0ZXAgbGNoZWNrCQl7IFNFTEVDVCAxIEFTIHg7IH0KIHN0ZXAgbGJlZ2lu CQl7IEJFR0lOOyB9CiBzdGVwIGxiZWdpbnMJeyBCRUdJTiBJU09MQVRJT04gTEVWRUwgU0VS SUFMSVpBQkxFOyB9CiBzdGVwIGxjb21taXQJeyBDT01NSVQ7IH0KK3N0ZXAgbHVubGlzdGVu X2FsbAl7IEJFR0lOOyBMSVNURU4gYzE7IFVOTElTVEVOICo7IENPTU1JVDsgfQogdGVhcmRv d24JCXsgVU5MSVNURU4gKjsgfQogCiAjIEluIHNvbWUgdGVzdHMgd2UgbmVlZCBhIHNlY29u ZCBsaXN0ZW5lciwganVzdCB0byBibG9jayB0aGUgcXVldWUuCkBAIC01Myw2ICs2OCwzOCBA QCBzdGVwIGwyYmVnaW4JeyBCRUdJTjsgfQogc3RlcCBsMmNvbW1pdAl7IENPTU1JVDsgfQog c3RlcCBsMnN0b3AJCXsgVU5MSVNURU4gKjsgfQogCisjIFRoaXJkIGxpc3RlbmVyIHNlc3Np b24gZm9yIHRlc3RpbmcgYXJyYXkgZ3Jvd3RoLgorCitzZXNzaW9uIGxpc3RlbmVyMworc3Rl cCBsM2xpc3Rlbgl7IExJU1RFTiBjMTsgfQordGVhcmRvd24JCXsgVU5MSVNURU4gKjsgfQor CisjIExpc3RlbmVyIHNlc3Npb24gZm9yIGNyb3NzLXNlc3Npb24gbm90aWZpY2F0aW9uIHRl c3Qgd2l0aCBjaGFubmVsICdjaCcuCisKK3Nlc3Npb24gbGlzdGVuZXJfY2gKK3N0ZXAgbGNo X2xpc3Rlbgl7IExJU1RFTiBjaDsgfQorc3RlcCBsY2hfY2hlY2sJeyBTRUxFQ1QgMSBBUyB4 OyB9Cit0ZWFyZG93bgkJeyBVTkxJU1RFTiAqOyB9CisKKyMgTm90aWZpZXIgc2Vzc2lvbiBm b3IgY3Jvc3Mtc2Vzc2lvbiBub3RpZmljYXRpb24gdGVzdCB3aXRoIGNoYW5uZWwgJ2NoJy4K Kworc2Vzc2lvbiBub3RpZmllcl9jaAorc3RlcCBuY2hfbm90aWZ5CXsgTk9USUZZIGNoLCAn YWEnOyB9CisKKyMgU2Vzc2lvbiBmb3IgdGVzdGluZyBMSVNURU4gaW4gc3VidHJhbnNhY3Rp b24gd2l0aCBzZXBhcmF0ZSBzdGVwcy4KKworc2Vzc2lvbiBsaXN0ZW5fc3VieGFjdAorc3Rl cCBsc2JlZ2luCXsgQkVHSU47IH0KK3N0ZXAgbHNsaXN0ZW5fb3V0ZXIJeyBMSVNURU4gYzM7 IH0KK3N0ZXAgbHNzYXZlcG9pbnQJeyBTQVZFUE9JTlQgczE7IH0KK3N0ZXAgbHNsaXN0ZW4J eyBMSVNURU4gYzE7IExJU1RFTiBjMjsgfQorc3RlcCBsc3JlbGVhc2UJeyBSRUxFQVNFIFNB VkVQT0lOVCBzMTsgfQorc3RlcCBsc3JvbGxiYWNrCXsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5U IHMxOyB9CitzdGVwIGxzY29tbWl0CXsgQ09NTUlUOyB9CitzdGVwIGxzbm90aWZ5CXsgTk9U SUZZIGMxLCAnc3VieGFjdF90ZXN0JzsgfQorc3RlcCBsc25vdGlmeV9jaGVjawl7IE5PVElG WSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2ZSc7IH0KK3RlYXJkb3duCQl7IFVOTElTVEVOICo7 IH0KKwogCiAjIFRyaXZpYWwgY2FzZXMuCiBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEg bm90aWZ5MiBub3RpZnkzIG5vdGlmeWYKQEAgLTYwLDYgKzEwNywyNyBAQCBwZXJtdXRhdGlv biBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5MiBub3RpZnkzIG5vdGlmeWYKICMgQ2hlY2sgc2lt cGxlIGFuZCBsZXNzLXNpbXBsZSBkZWR1cGxpY2F0aW9uLgogcGVybXV0YXRpb24gbGlzdGVu YyBub3RpZnlkMSBub3RpZnlkMiBub3RpZnlzMQogCisjIENoZWNrIHNpbXBsZSBOT1RJRlkg cmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQgaGFzIG5vIGFjdGlvbi4KK3Blcm11dGF0aW9uIGxp c3RlbmMgbm90aWZ5c19zaW1wbGUKKworIyBDaGVjayBMSVNURU4gcmVwYXJlbnRpbmcgaW4g c3VidHJhbnNhY3Rpb24uCitwZXJtdXRhdGlvbiBsc2JlZ2luIGxzc2F2ZXBvaW50IGxzbGlz dGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorCisjIENoZWNrIExJU1RFTiBtZXJn ZSBwYXRoIHdoZW4gYm90aCBvdXRlciBhbmQgaW5uZXIgdHJhbnNhY3Rpb25zIGhhdmUgYWN0 aW9ucy4KK3Blcm11dGF0aW9uIGxzYmVnaW4gbHNsaXN0ZW5fb3V0ZXIgbHNzYXZlcG9pbnQg bHNsaXN0ZW4gbHNyZWxlYXNlIGxzY29tbWl0IGxzbm90aWZ5CisKKyMgQ2hlY2sgTElTVEVO IGFib3J0IHBhdGggKFJPTExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFj dGlvbnMpLgorcGVybXV0YXRpb24gbHNiZWdpbiBsc3NhdmVwb2ludCBsc2xpc3RlbiBsc3Jv bGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5X2NoZWNrCisKKyMgQ2hlY2sgVU5MSVNURU4gKiBj YW5jZWxzIGEgTElTVEVOIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLgorcGVybXV0YXRpb24g bHVubGlzdGVuX2FsbCBub3RpZnkxIGxjaGVjaworCisjIENoZWNrIG5vdGlmaWNhdGlvbl9t YXRjaCBmdW5jdGlvbiAodHJpZ2dlcmVkIGJ5IGhhc2ggdGFibGUgZHVwbGljYXRlIGRldGVj dGlvbikuCitwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeV9tYW55X3dpdGhfZHVwCisKKyMg Q2hlY2sgQ2hhbm5lbEhhc2hBZGRMaXN0ZW5lciBhcnJheSBncm93dGguCitwZXJtdXRhdGlv biBsaXN0ZW5jIGxsaXN0ZW4gbDJsaXN0ZW4gbDNsaXN0ZW4gbHNsaXN0ZW4KKwogIyBDcm9z cy1iYWNrZW5kIG5vdGlmaWNhdGlvbiBkZWxpdmVyeS4gIFdlIHVzZSBhICJzZWxlY3QgMSIg dG8gZm9yY2UgdGhlCiAjIGxpc3RlbmVyIHNlc3Npb24gdG8gY2hlY2sgZm9yIG5vdGlmaWVz LiAgSW4gcHJpbmNpcGxlIHdlIGNvdWxkIGp1c3Qgd2FpdAogIyBmb3IgZGVsaXZlcnksIGJ1 dCB0aGF0IHdvdWxkIHJlcXVpcmUgZXh0cmEgc3VwcG9ydCBpbiBpc29sYXRpb250ZXN0ZXIK QEAgLTczLDYgKzE0MSwxMCBAQCBwZXJtdXRhdGlvbiBsaXN0ZW5jIGxsaXN0ZW4gbm90aWZ5 MSBub3RpZnkyIG5vdGlmeTMgbm90aWZ5ZiBsY2hlY2sKICMgYW5kIG5vdGlmeSBxdWV1ZSBp cyBub3QgZW1wdHkKIHBlcm11dGF0aW9uIGwybGlzdGVuIGwyYmVnaW4gbm90aWZ5MSBsYmVn aW5zIGxsaXN0ZW4gbGNvbW1pdCBsMmNvbW1pdCBsMnN0b3AKIAorIyBDaGVjayB0aGF0IG5v dGlmaWNhdGlvbnMgc2VudCBmcm9tIGEgYmFja2VuZCB0aGF0IGhhcyBub3QgZG9uZSBMSVNU RU4KKyMgYXJlIHByb3Blcmx5IGRlbGl2ZXJlZCB0byBhIGxpc3RlbmVyIGluIGFub3RoZXIg YmFja2VuZC4KK3Blcm11dGF0aW9uIGxjaF9saXN0ZW4gbmNoX25vdGlmeSBsY2hfY2hlY2sK KwogIyBWZXJpZnkgdGhhdCBwZ19ub3RpZmljYXRpb25fcXVldWVfdXNhZ2UgY29ycmVjdGx5 IHJlcG9ydHMgYSBub24temVybyByZXN1bHQsCiAjIGFmdGVyIHN1Ym1pdHRpbmcgbm90aWZp Y2F0aW9ucyB3aGlsZSBhbm90aGVyIGNvbm5lY3Rpb24gaXMgbGlzdGVuaW5nIGZvcgogIyB0 aG9zZSBub3RpZmljYXRpb25zIGFuZCB3YWl0aW5nIGluc2lkZSBhbiBhY3RpdmUgdHJhbnNh Y3Rpb24uICBXZSBoYXZlIHRvCi0tIAoyLjUwLjEKCg== --2c19c0e3a2cb48078ad0302f39fd1755 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v33.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v33.patch?=" Content-Transfer-Encoding: base64 RnJvbSBmZWI2NDFjYzZlNjlhZTIxZTNjODA0OTc5YjMzMzVmMWI0YzZkNmNjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU2F0LCAyNyBEZWMgMjAyNSAwODowNzowMyArMDEwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBPcHRpbWl6ZSBMSVNURU4vTk9USUZZIHdpdGggc2hhcmVkIGNoYW5uZWwgbWFw IGFuZCBkaXJlY3QKIGFkdmFuY2VtZW50CgpUaGlzIHBhdGNoIHJld29ya3MgdGhlIExJU1RF Ti9OT1RJRlkgc2lnbmFsaW5nIHBhdGggdG8gYXZvaWQgdGhlCmxvbmctc3RhbmRpbmcgaW5l ZmZpY2llbmN5IHdoZXJlIGV2ZXJ5IGNvbW1pdCB3YWtlcyBhbGwgbGlzdGVuaW5nCmJhY2tl bmRzIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBldmVuIHRob3NlIHRoYXQgYXJlIGxpc3Rlbmlu ZyBvbgpjb21wbGV0ZWx5IGRpZmZlcmVudCBjaGFubmVscy4KClByb2JsZW0KLS0tLS0tLQoK QXQgcHJlc2VudCwgU2lnbmFsQmFja2VuZHMgaGFzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9m IHdoaWNoIGJhY2tlbmQKbGlzdGVucyBvbiB3aGljaCBjaGFubmVsLiBXaGVuIGEgYmFja2Vu ZCBjb21taXRzIGEgdHJhbnNhY3Rpb24gdGhhdAppc3N1ZWQgTk9USUZZLCBpdCBzaW1wbHkg aXRlcmF0ZXMgb3ZlciBhbGwgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgaW4gdGhlCnNhbWUgZGF0 YWJhc2UgYW5kIHNlbmRzIGVhY2ggb25lIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNp Z25hbC4KClRoYXQgYmVoYXZpb3IgaXMgZmluZSB3aGVuIGFsbCBsaXN0ZW5lcnMgYXJlIG9u IHRoZSBzYW1lIGNoYW5uZWwsIGJ1dAp3aGVuIG1hbnkgYmFja2VuZHMgYXJlIGxpc3Rlbmlu ZyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMsIGVhY2ggTk9USUZZCnRyaWdnZXJzIGEgc3Rvcm0g b2YgdW5uZWNlc3Nhcnkgd2FrZXVwcyBhbmQgY29udGV4dCBzd2l0Y2hlcy4gQXMgdGhlCm51 bWJlciBvZiBpZGxlIGxpc3RlbmVycyBncm93cywgdGhpcyBvZnRlbiBiZWNvbWVzIHRoZSBi b3R0bGVuZWNrIGFuZAp0aHJvdWdocHV0IGRyb3BzIHNoYXJwbHkuCgpPdmVydmlldyBvZiB0 aGUgc29sdXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhdGNoIGludHJv ZHVjZXMgYSBsYXppbHktY3JlYXRlZCBkeW5hbWljIHNoYXJlZCBoYXNoIChkc2hhc2gpCmJh Y2tlZCBieSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgKERTQSkgdGhhdCBtYXBzIChkYm9pZCwg Y2hhbm5lbCkgdG8KYXJyYXlzIG9mIGxpc3RlbmluZyBiYWNrZW5kcyAoUHJvY051bWJlcnMp LiBUaGlzIGFsbG93cyB0aGUgc2VuZGVyIHRvCnRhcmdldCBvbmx5IHRob3NlIGJhY2tlbmRz IGFjdHVhbGx5IGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgZm9yIHdoaWNoCml0IGhhcyBx dWV1ZWQgbm90aWZpY2F0aW9ucy4KCkxJU1RFTiBzdGF0ZSB0cmFja2luZwotLS0tLS0tLS0t LS0tLS0tLS0tLS0KCkxJU1RFTiBzdGF0ZSBpcyB0cmFja2VkIGF0IHRocmVlIGxldmVsczoK CiAgLSBwZW5kaW5nTGlzdGVuQ2hhbm5lbHM6IHBlci10cmFuc2FjdGlvbiBwZW5kaW5nIGNo YW5nZXMKICAtIGxpc3RlbkNoYW5uZWxzSGFzaDogcGVyLWJhY2tlbmQgY29tbWl0dGVkIHN0 YXRlIGNhY2hlCiAgLSBjaGFubmVsSGFzaDogY2x1c3Rlci13aWRlIHNoYXJlZCBzdGF0ZQoK VGhlIGZpcnN0IHR3byBhcmUgbG9jYWwgaGFzaCB0YWJsZXMsIHRoZSB0aGlyZCBpcyBhIGRz aGFzaCBpbiBzaGFyZWQKbWVtb3J5LiBQcmVDb21taXRfTm90aWZ5IHVwZGF0ZXMgYWxsIHRo cmVlIChkb2luZyBhbnkgYWxsb2NhdGlvbnMgYmVmb3JlCmNsb2cgY29tbWl0IGZvciBPT00g c2FmZXR5KSwgYW5kIEF0Q29tbWl0X05vdGlmeSBmaW5hbGl6ZXMgdGhlIGNoYW5nZXMuCgpV c2luZyBhIGhhc2ggdGFibGUgZm9yIHBlbmRpbmdMaXN0ZW5DaGFubmVscyBwcm92aWRlcyBh dXRvbWF0aWMKZGVkdXBsaWNhdGlvbjogTElTVEVOIGZvbzsgVU5MSVNURU4gZm9vOyBMSVNU RU4gZm9vIGNvbGxhcHNlcyB0byBvbmUKZW50cnkgc3RvcmluZyB0aGUgZmluYWwgc3RhdGUs IHdoaWNoIHdlIGp1c3QgYXBwbHkgYXQgY29tbWl0LgoKRm9yIExJU1RFTiwgUHJlQ29tbWl0 X05vdGlmeSBwcmUtYWxsb2NhdGVzIGVudHJpZXMgaW4gYm90aCB0aGUgbG9jYWwKbGlzdGVu Q2hhbm5lbHNIYXNoIGFuZCB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoICh3aXRoIGxpc3Rlbmlu Zz1mYWxzZSkuCkF0Q29tbWl0X05vdGlmeSB0aGVuIHNldHMgbGlzdGVuaW5nPXRydWUuCgpG b3IgVU5MSVNURU4sIFByZUNvbW1pdF9Ob3RpZnkgb25seSByZWNvcmRzIHRoZSBpbnRlbnQg aW4KcGVuZGluZ0xpc3RlbkNoYW5uZWxzLiBBdENvbW1pdF9Ob3RpZnkgcmVtb3ZlcyB0aGUg ZW50cnkgZnJvbQpjaGFubmVsSGFzaCBhbmQgbGlzdGVuQ2hhbm5lbHNIYXNoLgoKT24gYWJv cnQsIGVudHJpZXMgd2l0aCBsaXN0ZW5pbmc9ZmFsc2UgKHN0YWdlZCBidXQgbmV2ZXIgY29t bWl0dGVkKSBhcmUKcmVtb3ZlZCBmcm9tIGNoYW5uZWxIYXNoIGFuZCBsaXN0ZW5DaGFubmVs c0hhc2guCgpTaWduYWwgYXJyYXlzIGZvciBzZW5kaW5nIG5vdGlmaWNhdGlvbnMgYXJlIGFs c28gcHJlYWxsb2NhdGVkIGluClByZUNvbW1pdF9Ob3RpZnkgdG8gYXZvaWQgYWxsb2NhdGlv biBmYWlsdXJlcyBhZnRlciBjb21taXR0aW5nIHRvIGNsb2cuCgpEaXJlY3QgYWR2YW5jZW1l bnQKLS0tLS0tLS0tLS0tLS0tLS0tCgpBIGZ1cnRoZXIgb3B0aW1pemF0aW9uIGF2b2lkcyBz aWduYWxpbmcgaWRsZSBiYWNrZW5kcyB0aGF0IGFyZSBub3QKbGlzdGVuaW5nIG9uIGFueSBv ZiB0aGUgY2hhbm5lbHMgbm90aWZpZWQgd2l0aGluIHRoZSB0cmFuc2FjdGlvbi4KCldoaWxl IHF1ZXVpbmcgbm90aWZpY2F0aW9ucywgUHJlQ29tbWl0X05vdGlmeSByZWNvcmRzIHRoZSBx dWV1ZSBoZWFkCnBvc2l0aW9uIGJvdGggYmVmb3JlIGFuZCBhZnRlciB3cml0aW5nIGl0cyBu b3RpZmljYXRpb25zLiBCZWNhdXNlIGFsbAp3cml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IHRo ZSBleGlzdGluZyBjbHVzdGVyLXdpZGUgaGVhdnl3ZWlnaHQgbG9jayBvbgoiZGF0YWJhc2Ug MCIsIG5vIGJhY2tlbmQgKGZyb20gYW55IGRhdGFiYXNlKSBjYW4gaW5zZXJ0IGVudHJpZXMg YmV0d2Vlbgp0aG9zZSB0d28gcG9pbnRzLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgcmVn aW9uIFtvbGRIZWFkLCBuZXdIZWFkKQpjb250YWlucyBvbmx5IHRoZSBlbnRyaWVzIHdyaXR0 ZW4gYnkgb3VyIGNvbW1pdC4KClNpZ25hbEJhY2tlbmRzIHVzZXMgdGhpcyBmYWN0IHRvIGRp cmVjdGx5IGFkdmFuY2UgYW55IGJhY2tlbmQgc3RpbGwKcG9zaXRpb25lZCBhdCBvbGRIZWFk IHVwIHRvIG5ld0hlYWQsIGF2b2lkaW5nIGEgbmVlZGxlc3Mgd2FrZXVwIGZvcgpsaXN0ZW5l cnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugbm90IGZpbmQgYW55IG5vdGlmaWVzIG9mIGludGVy ZXN0LgoKVG8gaGFuZGxlIGFkdmFuY2luZyBiYWNrZW5kcyBjb3JyZWN0bHksIGVhY2ggYmFj a2VuZCdzIGVudHJ5IHRyYWNrcyBib3RoCndoZXRoZXIgaXQgaXMgY3VycmVudGx5IGFkdmFu Y2luZyAoaXNBZHZhbmNpbmcpIGFuZCB0aGUgdGFyZ2V0IHBvc2l0aW9uCml0IGlzIGFkdmFu Y2luZyB0byAoYWR2YW5jaW5nUG9zKS4gVGhpcyBhbGxvd3MgU2lnbmFsQmFja2VuZHMgdG8g c2lnbmFsCmFkdmFuY2luZyBiYWNrZW5kcyBvbmx5IHdoZW4gdGhlaXIgdGFyZ2V0IHBvc2l0 aW9uIHdvdWxkIGxlYXZlIHRoZW0KYmVoaW5kIHRoZSBuZXcgcXVldWUgaGVhZCwgd2hpbGUg c2FmZWx5IGRpcmVjdC1hZHZhbmNpbmcgaWRsZSBiYWNrZW5kcwp0aGF0IHdvdWxkIG5vdCBi ZSBpbnRlcmVzdGVkIGluIHRoZSBuZXdseSB3cml0dGVuIG5vdGlmaWNhdGlvbnMuCklkbGUg YmFja2VuZHMgdGhhdCBhcmUgc3RhdGlvbmFyeSBhdCBhIHBvc2l0aW9uIGJlZm9yZSB0aGUg b2xkIHF1ZXVlCmhlYWQgYXJlIHNpZ25hbGVkLCBzaW5jZSB0aGV5IG1pZ2h0IGJlIGludGVy ZXN0ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbnMKaW4gYmV0d2VlbiB0aGVpciBjdXJyZW50IHBv c2l0aW9uIGFuZCB0aGUgb2xkIHF1ZXVlIGhlYWQuCgpPdGhlciBub3RlcwotLS0tLS0tLS0t LQoKVGhlIGxpc3RlbkNoYW5uZWxzSGFzaCBwcm92aWRlcyBmYXN0IGxvY2stZnJlZSBsb29r dXBzIGR1cmluZwpub3RpZmljYXRpb24gcHJvY2Vzc2luZywgYXZvaWRpbmcgY29udGVudGlv biBvbiB0aGUgc2hhcmVkIGhhc2ggZHVyaW5nCnRoZSBoaWdoLWZyZXF1ZW5jeSBJc0xpc3Rl bmluZ09uIGNoZWNrcyB0aGF0IG9jY3VyIGZvciBldmVyeQpub3RpZmljYXRpb24gcmVhZCBm cm9tIHRoZSBxdWV1ZS4KClRoaXMgcGF0Y2ggYWRkcyBMV0xvY2sgdHJhbmNoZSBOT1RJRllf Q0hBTk5FTF9IQVNIIGFuZCB3YWl0IGV2ZW50Ck5vdGlmeUNoYW5uZWxIYXNoIGZvciB2aXNp YmlsaXR5LgoKVGhlcmUgYXJlIG5vIHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZXM7 IHRoaXMgaXMgYW4gaW50ZXJuYWwKb3B0aW1pemF0aW9uIG9ubHkuCi0tLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAgICAgICAgIHwgMTA1NSArKysrKysrKysr KysrKy0tLQogLi4uL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0ICAgICAg IHwgICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCAgICAgICAgICAg ICAgfCAgICAxICsKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg ICAgICB8ICAgIDMgKwogNCBmaWxlcyBjaGFuZ2VkLCA4NjQgaW5zZXJ0aW9ucygrKSwgMTk2 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5j LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCmluZGV4IGViODY0MDJjYWU0Li41 MGZiMTdhZDg4NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCkBAIC0yNCw4ICsyNCwxMCBAQAog ICoJICBBbGwgbm90aWZpY2F0aW9uIG1lc3NhZ2VzIGFyZSBwbGFjZWQgaW4gdGhlIHF1ZXVl IGFuZCBsYXRlciByZWFkIG91dAogICoJICBieSBsaXN0ZW5pbmcgYmFja2VuZHMuCiAgKgot ICoJICBUaGVyZSBpcyBubyBjZW50cmFsIGtub3dsZWRnZSBvZiB3aGljaCBiYWNrZW5kIGxp c3RlbnMgb24gd2hpY2ggY2hhbm5lbDsKLSAqCSAgZXZlcnkgYmFja2VuZCBoYXMgaXRzIG93 biBsaXN0IG9mIGludGVyZXN0aW5nIGNoYW5uZWxzLgorICoJICBXZSBhbHNvIG1haW50YWlu IGEgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSAoZHNoYXNoKSB0aGF0IG1hcHMgY2hhbm5l bAorICoJICBuYW1lcyB0byB0aGUgc2V0IG9mIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNo IGNoYW5uZWwuIFRoaXMgdGFibGUgaXMKKyAqCSAgY3JlYXRlZCBsYXppbHkgb24gdGhlIGZp cnN0IExJU1RFTiBjb21tYW5kIGFuZCBncm93cyBkeW5hbWljYWxseSBhcworICoJICBuZWVk ZWQuCiAgKgogICoJICBBbHRob3VnaCB0aGVyZSBpcyBvbmx5IG9uZSBxdWV1ZSwgbm90aWZp Y2F0aW9ucyBhcmUgdHJlYXRlZCBhcyBiZWluZwogICoJICBkYXRhYmFzZS1sb2NhbDsgdGhp cyBpcyBkb25lIGJ5IGluY2x1ZGluZyB0aGUgc2VuZGVyJ3MgZGF0YWJhc2UgT0lECkBAIC02 NCwyMCArNjYsMzMgQEAKICAqCSAgbm90aWZpY2F0aW9ucywgd2UgY2FuIHN0aWxsIGNhbGwg ZWxvZyhFUlJPUiwgLi4uKSBhbmQgdGhlIHRyYW5zYWN0aW9uCiAgKgkgIHdpbGwgcm9sbCBi YWNrLgogICoKKyAqCSAgUHJlQ29tbWl0X05vdGlmeSgpIGFsc28gc3RhZ2VzIGFueSBwZW5k aW5nIExJU1RFTi9VTkxJU1RFTiBhY3Rpb25zLgorICoJICBMSVNURU4gb3BlcmF0aW9ucyBw cmUtYWxsb2NhdGUgZW50cmllcyBpbiBib3RoIHRoZSBwZXItYmFja2VuZAorICoJICBsaXN0 ZW5DaGFubmVsc0hhc2ggYW5kIHRoZSBzaGFyZWQgY2hhbm5lbEhhc2ggKHdpdGggbGlzdGVu aW5nPWZhbHNlKS4KKyAqCSAgQWxsIGFsbG9jYXRpb25zIGhhcHBlbiBiZWZvcmUgY29tbWl0 dGluZyB0byBjbG9nIHNvIGZhaWx1cmVzIHNhZmVseSBhYm9ydC4KKyAqCiAgKgkgIE9uY2Ug d2UgaGF2ZSBwdXQgYWxsIG9mIHRoZSBub3RpZmljYXRpb25zIGludG8gdGhlIHF1ZXVlLCB3 ZSByZXR1cm4gdG8KICAqCSAgQ29tbWl0VHJhbnNhY3Rpb24oKSB3aGljaCB3aWxsIHRoZW4g ZG8gdGhlIGFjdHVhbCB0cmFuc2FjdGlvbiBjb21taXQuCiAgKgogICoJICBBZnRlciBjb21t aXQgd2UgYXJlIGNhbGxlZCBhbm90aGVyIHRpbWUgKEF0Q29tbWl0X05vdGlmeSgpKS4gSGVy ZSB3ZQotICoJICBtYWtlIGFueSBhY3R1YWwgdXBkYXRlcyB0byB0aGUgZWZmZWN0aXZlIGxp c3RlbiBzdGF0ZSAobGlzdGVuQ2hhbm5lbHMpLgotICoJICBUaGVuIHdlIHNpZ25hbCBhbnkg YmFja2VuZHMgdGhhdCBtYXkgYmUgaW50ZXJlc3RlZCBpbiBvdXIgbWVzc2FnZXMKLSAqCSAg KGluY2x1ZGluZyBvdXIgb3duIGJhY2tlbmQsIGlmIGxpc3RlbmluZykuICBUaGlzIGlzIGRv bmUgYnkKLSAqCSAgU2lnbmFsQmFja2VuZHMoKSwgd2hpY2ggc2NhbnMgdGhlIGxpc3Qgb2Yg bGlzdGVuaW5nIGJhY2tlbmRzIGFuZCBzZW5kcyBhCi0gKgkgIFBST0NTSUdfTk9USUZZX0lO VEVSUlVQVCBzaWduYWwgdG8gZXZlcnkgbGlzdGVuaW5nIGJhY2tlbmQgKHdlIGRvbid0Ci0g KgkgIGtub3cgd2hpY2ggYmFja2VuZCBpcyBsaXN0ZW5pbmcgb24gd2hpY2ggY2hhbm5lbCBz byB3ZSBtdXN0IHNpZ25hbCB0aGVtCi0gKgkgIGFsbCkuICBXZSBjYW4gZXhjbHVkZSBiYWNr ZW5kcyB0aGF0IGFyZSBhbHJlYWR5IHVwIHRvIGRhdGUsIHRob3VnaCwgYW5kCi0gKgkgIHdl IGNhbiBhbHNvIGV4Y2x1ZGUgYmFja2VuZHMgdGhhdCBhcmUgaW4gb3RoZXIgZGF0YWJhc2Vz ICh1bmxlc3MgdGhleQotICoJICBhcmUgd2F5IGJlaGluZCBhbmQgc2hvdWxkIGJlIGtpY2tl ZCB0byBtYWtlIHRoZW0gYWR2YW5jZSB0aGVpcgotICoJICBwb2ludGVycykuCisgKgkgIGNv bW1pdCB0aGUgc3RhZ2VkIGxpc3Rlbi91bmxpc3RlbiBjaGFuZ2VzIGJ5IHNldHRpbmcgbGlz dGVuaW5nPXRydWUgZm9yCisgKgkgIHN0YWdlZCBMSVNURU5zLCBvciByZW1vdmluZyBlbnRy aWVzIGZvciBVTkxJU1RFTnMuICBUaGVuIHdlIHNpZ25hbCBhbnkgYmFja2VuZHMKKyAqCSAg dGhhdCBtYXkgYmUgaW50ZXJlc3RlZCBpbiBvdXIgbWVzc2FnZXMgKGluY2x1ZGluZyBvdXIg b3duIGJhY2tlbmQsCisgKgkgIGlmIGxpc3RlbmluZykuICBUaGlzIGlzIGRvbmUgYnkgU2ln bmFsQmFja2VuZHMoKSwgd2hpY2ggY29uc3VsdHMgdGhlCisgKgkgIHNoYXJlZCBjaGFubmVs IGhhc2ggdGFibGUgdG8gaWRlbnRpZnkgbGlzdGVuZXJzIGZvciB0aGUgY2hhbm5lbHMgdGhh dAorICoJICBoYXZlIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBpbiB0aGUgY3VycmVudCBkYXRh YmFzZS4gIEVhY2ggc2VsZWN0ZWQKKyAqCSAgYmFja2VuZCBpcyBtYXJrZWQgYXMgaGF2aW5n IGEgd2FrZXVwIHBlbmRpbmcgdG8gYXZvaWQgZHVwbGljYXRlIHNpZ25hbHMsCisgKgkgIGFu ZCBhIFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCBzaWduYWwgaXMgc2VudCB0byBpdC4KKyAq CisgKgkgIFdoZW4gd3JpdGluZyBub3RpZmljYXRpb25zLCBQcmVDb21taXRfTm90aWZ5KCkg cmVjb3JkcyB0aGUgcXVldWUgaGVhZAorICoJICBwb3NpdGlvbiBib3RoIGJlZm9yZSBhbmQg YWZ0ZXIgdGhlIHdyaXRlLiAgQmVjYXVzZSBhbGwgd3JpdGVycyBzZXJpYWxpemUKKyAqCSAg b24gYSBjbHVzdGVyLXdpZGUgaGVhdnl3ZWlnaHQgbG9jaywgbm8gYmFja2VuZCBjYW4gaW5z ZXJ0IGVudHJpZXMgYmV0d2VlbgorICoJICB0aGVzZSB0d28gcG9pbnRzLiAgU2lnbmFsQmFj a2VuZHMoKSB1c2VzIHRoaXMgZmFjdCB0byBkaXJlY3RseSBhZHZhbmNlIGFueQorICoJICBi YWNrZW5kIHRoYXQgaXMgc3RpbGwgcG9zaXRpb25lZCBhdCB0aGUgb2xkIGhlYWQsIG9yIHdp dGhpbiB0aGUgcmFuZ2UKKyAqCSAgd3JpdHRlbiwgYXZvaWRpbmcgdW5uZWNlc3Nhcnkgd2Fr ZXVwcyBmb3IgaWRsZSBsaXN0ZW5lcnMgdGhhdCBoYXZlCisgKgkgIG5vdGhpbmcgdG8gcmVh ZC4gIEJhY2tlbmRzIHRoYXQgY2Fubm90IGJlIGRpcmVjdCBhZHZhbmNlZCBhcmUgc2lnbmFs ZWQKKyAqCSAgaWYgdGhleSBhcmUgc3R1Y2sgYmVoaW5kIHRoZSBvbGQgcXVldWUgaGVhZCwg b3IgYWR2YW5jaW5nIHRvIGEgcG9zaXRpb24KKyAqCSAgYmVmb3JlIHRoZSBuZXcgcXVldWUg aGVhZCwgc2luY2Ugb3RoZXJ3aXNlIG5vdGlmaWNhdGlvbnMgY291bGQgYmUgZGVsYXllZC4K ICAqCiAgKgkgIEZpbmFsbHksIGFmdGVyIHdlIGFyZSBvdXQgb2YgdGhlIHRyYW5zYWN0aW9u IGFsdG9nZXRoZXIgYW5kIGFib3V0IHRvIGdvCiAgKgkgIGlkbGUsIHdlIHNjYW4gdGhlIHF1 ZXVlIGZvciBtZXNzYWdlcyB0aGF0IG5lZWQgdG8gYmUgc2VudCB0byBvdXIKQEAgLTEzNywx NCArMTUyLDE3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJj b21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9k c2hhc2guaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgogI2luY2x1ZGUgImxpYnBxL3Bx Zm9ybWF0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9k c21fcmVnaXN0cnkuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1 ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2lu Y2x1ZGUgInV0aWxzL2RzYS5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgi CkBAIC0xNjIsNiArMTgwLDM2IEBACiAgKi8KICNkZWZpbmUgTk9USUZZX1BBWUxPQURfTUFY X0xFTkdUSAkoQkxDS1NaIC0gTkFNRURBVEFMRU4gLSAxMjgpCiAKKy8qCisgKiBDaGFubmVs IGhhc2ggdGFibGUgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIGhhc2ggdGFibGUgbWFwcyAo ZGF0YWJhc2UgT0lELCBjaGFubmVsIG5hbWUpIGtleXMgdG8gYXJyYXlzIG9mCisgKiBQcm9j TnVtYmVycyByZXByZXNlbnRpbmcgdGhlIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNoIGNo YW5uZWwuCisgKi8KKworI2RlZmluZSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFIDQK KwordHlwZWRlZiBzdHJ1Y3QgQ2hhbm5lbE5hbWVLZXkKK3sKKwlPaWQJCQlkYm9pZDsKKwlj aGFyCQljaGFubmVsW05BTUVEQVRBTEVOXTsKK30gQ2hhbm5lbEhhc2hLZXk7CisKKwordHlw ZWRlZiBzdHJ1Y3QgTGlzdGVuZXJFbnRyeQoreworCVByb2NOdW1iZXIJcHJvY05vOworCWJv b2wJCWxpc3RlbmluZzsJCS8qIHRydWUgaWYgY29tbWl0dGVkIGxpc3RlbmVyICovCit9IExp c3RlbmVyRW50cnk7CisKK3R5cGVkZWYgc3RydWN0IENoYW5uZWxMaXN0ZW5lcnMKK3sKKwlD aGFubmVsSGFzaEtleSBrZXk7CisJZHNhX3BvaW50ZXIgbGlzdGVuZXJzQXJyYXk7IC8qIERT QSBwb2ludGVyIHRvIExpc3RlbmVyRW50cnkgYXJyYXkgKi8KKwlpbnQJCQludW1MaXN0ZW5l cnM7CS8qIE51bWJlciBvZiBsaXN0ZW5lcnMgY3VycmVudGx5IHN0b3JlZCAqLworCWludAkJ CWFsbG9jYXRlZExpc3RlbmVyczsgLyogQWxsb2NhdGVkIHNpemUgb2YgYXJyYXkgKi8KK30g Q2hhbm5lbExpc3RlbmVyczsKKwogLyoKICAqIFN0cnVjdCByZXByZXNlbnRpbmcgYW4gZW50 cnkgaW4gdGhlIGdsb2JhbCBub3RpZnkgcXVldWUKICAqCkBAIC0yMjQsMTEgKzI3MiwxNCBA QCB0eXBlZGVmIHN0cnVjdCBRdWV1ZVBvc2l0aW9uCiAJICh4KS5wYWdlICE9ICh5KS5wYWdl ID8gKHgpIDogXAogCSAoeCkub2Zmc2V0ID4gKHkpLm9mZnNldCA/ICh4KSA6ICh5KSkKIAor LyogcmV0dXJucyB0cnVlIGlmIHggY29tZXMgYmVmb3JlIHkgaW4gcXVldWUgb3JkZXIgKi8K KyNkZWZpbmUgUVVFVUVfUE9TX1BSRUNFREVTKHgseSkgXAorCShhc3luY1F1ZXVlUGFnZVBy ZWNlZGVzKCh4KS5wYWdlLCAoeSkucGFnZSkgfHwgXAorCSAoKHgpLnBhZ2UgPT0gKHkpLnBh Z2UgJiYgKHgpLm9mZnNldCA8ICh5KS5vZmZzZXQpKQorCiAvKgogICogUGFyYW1ldGVyIGRl dGVybWluaW5nIGhvdyBvZnRlbiB3ZSB0cnkgdG8gYWR2YW5jZSB0aGUgdGFpbCBwb2ludGVy OgotICogd2UgZG8gdGhhdCBhZnRlciBldmVyeSBRVUVVRV9DTEVBTlVQX0RFTEFZIHBhZ2Vz IG9mIE5PVElGWSBkYXRhLiAgVGhpcyBpcwotICogYWxzbyB0aGUgZGlzdGFuY2UgYnkgd2hp Y2ggYSBiYWNrZW5kIGluIGFub3RoZXIgZGF0YWJhc2UgbmVlZHMgdG8gYmUKLSAqIGJlaGlu ZCBiZWZvcmUgd2UnbGwgZGVjaWRlIHdlIG5lZWQgdG8gd2FrZSBpdCB1cCB0byBhZHZhbmNl IGl0cyBwb2ludGVyLgorICogd2UgZG8gdGhhdCBhZnRlciBldmVyeSBRVUVVRV9DTEVBTlVQ X0RFTEFZIHBhZ2VzIG9mIE5PVElGWSBkYXRhLgogICoKICAqIFJlc2lzdCB0aGUgdGVtcHRh dGlvbiB0byBtYWtlIHRoaXMgcmVhbGx5IGxhcmdlLiAgV2hpbGUgdGhhdCB3b3VsZCBzYXZl CiAgKiB3b3JrIGluIHNvbWUgcGxhY2VzLCBpdCB3b3VsZCBhZGQgY29zdCBpbiBvdGhlcnMu ICBJbiBwYXJ0aWN1bGFyLCB0aGlzCkBAIC0yNDYsNiArMjk3LDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAJT2lkCQkJZGJvaWQ7CQkJLyogYmFja2VuZCdzIGRh dGFiYXNlIE9JRCwgb3IgSW52YWxpZE9pZCAqLwogCVByb2NOdW1iZXIJbmV4dExpc3RlbmVy OwkvKiBpZCBvZiBuZXh0IGxpc3RlbmVyLCBvciBJTlZBTElEX1BST0NfTlVNQkVSICovCiAJ UXVldWVQb3NpdGlvbiBwb3M7CQkJLyogYmFja2VuZCBoYXMgcmVhZCBxdWV1ZSB1cCB0byBo ZXJlICovCisJYm9vbAkJd2FrZXVwUGVuZGluZzsJLyogc2lnbmFsIHNlbnQgYnV0IG5vdCB5 ZXQgcHJvY2Vzc2VkICovCisJYm9vbAkJaXNBZHZhbmNpbmc7CS8qIGJhY2tlbmQgaXMgYWR2 YW5jaW5nIGl0cyBwb3NpdGlvbiAqLworCVF1ZXVlUG9zaXRpb24gYWR2YW5jaW5nUG9zOyAv KiB0YXJnZXQgcG9zaXRpb24gYmFja2VuZCBpcyBhZHZhbmNpbmcgdG8gKi8KIH0gUXVldWVC YWNrZW5kU3RhdHVzOwogCiAvKgpAQCAtMjYwLDE0ICszMTQsMTYgQEAgdHlwZWRlZiBzdHJ1 Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAgKiAoc2luY2Ugbm8gb3RoZXIgYmFja2VuZCB3aWxs IGluc3BlY3QgaXQpLgogICoKICAqIFdoZW4gaG9sZGluZyBOb3RpZnlRdWV1ZUxvY2sgaW4g RVhDTFVTSVZFIG1vZGUsIGJhY2tlbmRzIGNhbiBpbnNwZWN0IHRoZQotICogZW50cmllcyBv ZiBvdGhlciBiYWNrZW5kcyBhbmQgYWxzbyBjaGFuZ2UgdGhlIGhlYWQgcG9pbnRlci4gV2hl biBob2xkaW5nCi0gKiBib3RoIE5vdGlmeVF1ZXVlTG9jayBhbmQgTm90aWZ5UXVldWVUYWls TG9jayBpbiBFWENMVVNJVkUgbW9kZSwgYmFja2VuZHMKLSAqIGNhbiBjaGFuZ2UgdGhlIHRh aWwgcG9pbnRlcnMuCisgKiBlbnRyaWVzIG9mIG90aGVyIGJhY2tlbmRzIGFuZCBhbHNvIGNo YW5nZSB0aGUgaGVhZCBwb2ludGVyLiBUaGV5IGNhbgorICogYWxzbyBhZHZhbmNlIG90aGVy IGJhY2tlbmRzJyBxdWV1ZSBwb3NpdGlvbnMsIHVubGVzcyB0aGV5IGFyZSBub3QKKyAqIGlu IHRoZSBwcm9jZXNzIG9mIGRvaW5nIHRoYXQgdGhlbXNlbHZlcy4gV2hlbiBob2xkaW5nIGJv dGggTm90aWZ5UXVldWVMb2NrIGFuZAorICogTm90aWZ5UXVldWVUYWlsTG9jayBpbiBFWENM VVNJVkUgbW9kZSwgYmFja2VuZHMgY2FuIGNoYW5nZSB0aGUgdGFpbCBwb2ludGVycy4KICAq CiAgKiBTTFJVIGJ1ZmZlciBwb29sIGlzIGRpdmlkZWQgaW4gYmFua3MgYW5kIGJhbmsgd2lz ZSBTTFJVIGxvY2sgaXMgdXNlZCBhcwogICogdGhlIGNvbnRyb2wgbG9jayBmb3IgdGhlIHBn X25vdGlmeSBTTFJVIGJ1ZmZlcnMuCiAgKiBJbiBvcmRlciB0byBhdm9pZCBkZWFkbG9ja3Ms IHdoZW5ldmVyIHdlIG5lZWQgbXVsdGlwbGUgbG9ja3MsIHdlIGZpcnN0IGdldAotICogTm90 aWZ5UXVldWVUYWlsTG9jaywgdGhlbiBOb3RpZnlRdWV1ZUxvY2ssIGFuZCBsYXN0bHkgU0xS VSBiYW5rIGxvY2suCisgKiBOb3RpZnlRdWV1ZVRhaWxMb2NrLCB0aGVuIE5vdGlmeVF1ZXVl TG9jaywgdGhlbiBTTFJVIGJhbmsgbG9jaywgYW5kIGxhc3RseQorICogY2hhbm5lbEhhc2gg cGFydGl0aW9uIGxvY2tzLgogICoKICAqIEVhY2ggYmFja2VuZCB1c2VzIHRoZSBiYWNrZW5k W10gYXJyYXkgZW50cnkgd2l0aCBpbmRleCBlcXVhbCB0byBpdHMKICAqIFByb2NOdW1iZXIu ICBXZSByZWx5IG9uIHRoaXMgdG8gbWFrZSBTZW5kUHJvY1NpZ25hbCBmYXN0LgpAQCAtMjg4 LDExICszNDQsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgQXN5bmNRdWV1ZUNvbnRyb2wKIAlQcm9j TnVtYmVyCWZpcnN0TGlzdGVuZXI7CS8qIGlkIG9mIGZpcnN0IGxpc3RlbmVyLCBvcgogCQkJ CQkJCQkgKiBJTlZBTElEX1BST0NfTlVNQkVSICovCiAJVGltZXN0YW1wVHogbGFzdFF1ZXVl RmlsbFdhcm47CS8qIHRpbWUgb2YgbGFzdCBxdWV1ZS1mdWxsIG1zZyAqLworCWRzYV9oYW5k bGUJY2hhbm5lbEhhc2hEU0E7CisJZHNoYXNoX3RhYmxlX2hhbmRsZSBjaGFubmVsSGFzaERT SDsKIAlRdWV1ZUJhY2tlbmRTdGF0dXMgYmFja2VuZFtGTEVYSUJMRV9BUlJBWV9NRU1CRVJd OwogfSBBc3luY1F1ZXVlQ29udHJvbDsKIAogc3RhdGljIEFzeW5jUXVldWVDb250cm9sICph c3luY1F1ZXVlQ29udHJvbDsKIAorc3RhdGljIGRzYV9hcmVhICpjaGFubmVsRFNBID0gTlVM TDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKmNoYW5uZWxIYXNoID0gTlVMTDsKKwogI2RlZmlu ZSBRVUVVRV9IRUFECQkJCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmhlYWQpCiAjZGVmaW5lIFFV RVVFX1RBSUwJCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+dGFpbCkKICNkZWZpbmUgUVVFVUVf U1RPUF9QQUdFCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+c3RvcFBhZ2UpCkBAIC0zMDEsNiAr MzYyLDkgQEAgc3RhdGljIEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsK ICNkZWZpbmUgUVVFVUVfQkFDS0VORF9EQk9JRChpKQkJKGFzeW5jUXVldWVDb250cm9sLT5i YWNrZW5kW2ldLmRib2lkKQogI2RlZmluZSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpCQkoYXN5 bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ubmV4dExpc3RlbmVyKQogI2RlZmluZSBRVUVV RV9CQUNLRU5EX1BPUyhpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLnBvcykK KyNkZWZpbmUgUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKQkoYXN5bmNRdWV1ZUNv bnRyb2wtPmJhY2tlbmRbaV0ud2FrZXVwUGVuZGluZykKKyNkZWZpbmUgUVVFVUVfQkFDS0VO RF9JU19BRFZBTkNJTkcoaSkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmlzQWR2 YW5jaW5nKQorI2RlZmluZSBRVUVVRV9CQUNLRU5EX0FEVkFOQ0lOR19QT1MoaSkJKGFzeW5j UXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmFkdmFuY2luZ1BvcykKIAogLyoKICAqIFRoZSBT TFJVIGJ1ZmZlciBhcmVhIHRocm91Z2ggd2hpY2ggd2UgYWNjZXNzIHRoZSBub3RpZmljYXRp b24gcXVldWUKQEAgLTMxMywxNiArMzc3LDE5IEBAIHN0YXRpYyBTbHJ1Q3RsRGF0YSBOb3Rp ZnlDdGxEYXRhOwogI2RlZmluZSBRVUVVRV9GVUxMX1dBUk5fSU5URVJWQUwJNTAwMAkvKiB3 YXJuIGF0IG1vc3Qgb25jZSBldmVyeSA1cyAqLwogCiAvKgotICogbGlzdGVuQ2hhbm5lbHMg aWRlbnRpZmllcyB0aGUgY2hhbm5lbHMgd2UgYXJlIGFjdHVhbGx5IGxpc3RlbmluZyB0bwot ICogKGllLCBoYXZlIGNvbW1pdHRlZCBhIExJU1RFTiBvbikuICBJdCBpcyBhIHNpbXBsZSBs aXN0IG9mIGNoYW5uZWwgbmFtZXMsCi0gKiBhbGxvY2F0ZWQgaW4gVG9wTWVtb3J5Q29udGV4 dC4KKyAqIGxpc3RlbkNoYW5uZWxzSGFzaCBjYWNoZXMgdGhlIGNoYW5uZWxzIHRoaXMgYmFj a2VuZCBpcyBsaXN0ZW5pbmcgb24uCisgKiBVc2VkIGJ5IElzTGlzdGVuaW5nT24oKSBmb3Ig ZmFzdCBsb29rdXBzIHdoZW4gcmVhZGluZyBub3RpZmljYXRpb25zLgorICogRW50cmllcyBh cmUgcHJlLWFsbG9jYXRlZCBkdXJpbmcgUHJlQ29tbWl0X05vdGlmeSAoYmVmb3JlIGNsb2cg Y29tbWl0KQorICogc28gYWxsb2NhdGlvbiBmYWlsdXJlcyBzYWZlbHkgYWJvcnQuICBPbiBh Ym9ydCwgc3RhZ2VkIGVudHJpZXMgYXJlIHJlbW92ZWQuCisgKiBBbGxvY2F0ZWQgaW4gVG9w TWVtb3J5Q29udGV4dCBzbyBpdCBwZXJzaXN0cyBhY3Jvc3MgdHJhbnNhY3Rpb25zLgogICov Ci1zdGF0aWMgTGlzdCAqbGlzdGVuQ2hhbm5lbHMgPSBOSUw7CS8qIGxpc3Qgb2YgQyBzdHJp bmdzICovCitzdGF0aWMgSFRBQiAqbGlzdGVuQ2hhbm5lbHNIYXNoID0gTlVMTDsKIAogLyoK ICAqIFN0YXRlIGZvciBwZW5kaW5nIExJU1RFTi9VTkxJU1RFTiBhY3Rpb25zIGNvbnNpc3Rz IG9mIGFuIG9yZGVyZWQgbGlzdCBvZgotICogYWxsIGFjdGlvbnMgcmVxdWVzdGVkIGluIHRo ZSBjdXJyZW50IHRyYW5zYWN0aW9uLiAgQXMgZXhwbGFpbmVkIGFib3ZlLAotICogd2UgZG9u J3QgYWN0dWFsbHkgY2hhbmdlIGxpc3RlbkNoYW5uZWxzIHVudGlsIHdlIHJlYWNoIHRyYW5z YWN0aW9uIGNvbW1pdC4KKyAqIGFsbCBhY3Rpb25zIHJlcXVlc3RlZCBpbiB0aGUgY3VycmVu dCB0cmFuc2FjdGlvbi4gIER1cmluZyBQcmVDb21taXRfTm90aWZ5LAorICogd2Ugc3RhZ2Ug dGhlc2UgY2hhbmdlcyBpbiBsaXN0ZW5DaGFubmVsc0hhc2ggYW5kIHRoZSBzaGFyZWQgY2hh bm5lbEhhc2guCisgKiBPbiBhYm9ydCwgQXRBYm9ydF9Ob3RpZnkgY2xlYW5zIHVwIGFueSBz dGFnZWQtYnV0LXVuY29tbWl0dGVkIGVudHJpZXMuCiAgKgogICogVGhlIGxpc3QgaXMga2Vw dCBpbiBDdXJUcmFuc2FjdGlvbkNvbnRleHQuICBJbiBzdWJ0cmFuc2FjdGlvbnMsIGVhY2gK ICAqIHN1YnRyYW5zYWN0aW9uIGhhcyBpdHMgb3duIGxpc3QgaW4gaXRzIG93biBDdXJUcmFu c2FjdGlvbkNvbnRleHQsIGJ1dApAQCAtMzkxLDYgKzQ1OCw3IEBAIHR5cGVkZWYgc3RydWN0 IE5vdGlmaWNhdGlvbkxpc3QKIAlpbnQJCQluZXN0aW5nTGV2ZWw7CS8qIGN1cnJlbnQgdHJh bnNhY3Rpb24gbmVzdGluZyBkZXB0aCAqLwogCUxpc3QJICAgKmV2ZW50czsJCQkvKiBsaXN0 IG9mIE5vdGlmaWNhdGlvbiBzdHJ1Y3RzICovCiAJSFRBQgkgICAqaGFzaHRhYjsJCS8qIGhh c2ggb2YgTm90aWZpY2F0aW9uSGFzaCBzdHJ1Y3RzLCBvciBOVUxMICovCisJSFRBQgkgICAq Y2hhbm5lbFNldDsJCS8qIGhhc2ggb2YgdW5pcXVlIGNoYW5uZWwgbmFtZXMsIG9yIE5VTEwg Ki8KIAlzdHJ1Y3QgTm90aWZpY2F0aW9uTGlzdCAqdXBwZXI7IC8qIGRldGFpbHMgZm9yIHVw cGVyIHRyYW5zYWN0aW9uIGxldmVscyAqLwogfSBOb3RpZmljYXRpb25MaXN0OwogCkBAIC00 MDEsNiArNDY5LDE4IEBAIHN0cnVjdCBOb3RpZmljYXRpb25IYXNoCiAJTm90aWZpY2F0aW9u ICpldmVudDsJCS8qID0+IHRoZSBhY3R1YWwgTm90aWZpY2F0aW9uIHN0cnVjdCAqLwogfTsK IAorc3RydWN0IENoYW5uZWxOYW1lCit7CisJY2hhcgkJY2hhbm5lbFtOQU1FREFUQUxFTl07 Cit9OworCisvKiBFbnRyeSBmb3IgcGVuZGluZ0xpc3RlbkNoYW5uZWxzIGhhc2ggdGFibGUg Ki8KK3N0cnVjdCBQZW5kaW5nTGlzdGVuRW50cnkKK3sKKwljaGFyCQljaGFubmVsW05BTUVE QVRBTEVOXTsJLyogaGFzaCBrZXkgKi8KKwlib29sCQlsaXN0ZW5pbmc7CQkvKiB0cnVlID0g TElTVEVOLCBmYWxzZSA9IFVOTElTVEVOICovCit9OworCiBzdGF0aWMgTm90aWZpY2F0aW9u TGlzdCAqcGVuZGluZ05vdGlmaWVzID0gTlVMTDsKIAogLyoKQEAgLTQxOCw2ICs0OTgsMzcg QEAgc3RhdGljIGJvb2wgdW5saXN0ZW5FeGl0UmVnaXN0ZXJlZCA9IGZhbHNlOwogLyogVHJ1 ZSBpZiB3ZSdyZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBhcyBhIGxpc3RlbmVyIGluIGFzeW5j UXVldWVDb250cm9sICovCiBzdGF0aWMgYm9vbCBhbVJlZ2lzdGVyZWRMaXN0ZW5lciA9IGZh bHNlOwogCisvKgorICogUXVldWUgaGVhZCBwb3NpdGlvbnMgZm9yIGRpcmVjdCBhZHZhbmNl bWVudC4KKyAqIFRoZXNlIGFyZSBjYXB0dXJlZCBkdXJpbmcgUHJlQ29tbWl0X05vdGlmeSB3 aGlsZSBob2xkaW5nIHRoZSBoZWF2eXdlaWdodAorICogbG9jayBvbiBkYXRhYmFzZSAwLCBl bnN1cmluZyBubyBvdGhlciBiYWNrZW5kIGNhbiBpbnNlcnQgbm90aWZpY2F0aW9ucworICog YmV0d2VlbiB0aGVtLiAgU2lnbmFsQmFja2VuZHMgdXNlcyB0aGVzZSB0byBhZHZhbmNlIGlk bGUgYmFja2VuZHMuCisgKi8KK3N0YXRpYyBRdWV1ZVBvc2l0aW9uIHF1ZXVlSGVhZEJlZm9y ZVdyaXRlOworc3RhdGljIFF1ZXVlUG9zaXRpb24gcXVldWVIZWFkQWZ0ZXJXcml0ZTsKKwor LyoKKyAqIExpc3Qgb2YgY2hhbm5lbHMgd2l0aCBwZW5kaW5nIG5vdGlmaWNhdGlvbnMgaW4g dGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRpYyBMaXN0ICpwZW5kaW5nTm90 aWZ5Q2hhbm5lbHMgPSBOSUw7CisKKy8qCisgKiBIYXNoIHRhYmxlIG9mIHBlbmRpbmcgbGlz dGVuL3VubGlzdGVuIGNoYW5nZXMgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCisgKiBL ZXkgaXMgY2hhbm5lbCBuYW1lLCB2YWx1ZSBpcyBib29sZWFuICh0cnVlID0gTElTVEVOLCBm YWxzZSA9IFVOTElTVEVOKS4KKyAqIFByb3ZpZGVzIGF1dG9tYXRpYyBkZWR1cGxpY2F0aW9u IG9mIHJlcGVhdGVkIExJU1RFTi9VTkxJU1RFTiBvbiBzYW1lIGNoYW5uZWwuCisgKiBQb3B1 bGF0ZWQgZHVyaW5nIFByZUNvbW1pdF9Ob3RpZnkgYW5kIHVzZWQgYnkgQXRDb21taXRfTm90 aWZ5L0F0QWJvcnRfTm90aWZ5LgorICovCitzdGF0aWMgSFRBQiAqcGVuZGluZ0xpc3RlbkNo YW5uZWxzID0gTlVMTDsKKworLyoKKyAqIFByZWFsbG9jYXRlZCBhcnJheXMgZm9yIFNpZ25h bEJhY2tlbmRzIHRvIGF2b2lkIG1lbW9yeSBhbGxvY2F0aW9uIGFmdGVyCisgKiBjb21taXR0 aW5nIHRvIGNsb2cuICBBbGxvY2F0ZWQgaW4gUHJlQ29tbWl0X05vdGlmeSB3aGVuIHRoZXJl IGFyZSBwZW5kaW5nCisgKiBub3RpZmljYXRpb25zLgorICovCitzdGF0aWMgaW50MzIgKnNp Z25hbFBpZHMgPSBOVUxMOworc3RhdGljIFByb2NOdW1iZXIgKnNpZ25hbFByb2Nub3MgPSBO VUxMOworCisKIC8qIGhhdmUgd2UgYWR2YW5jZWQgdG8gYSBwYWdlIHRoYXQncyBhIG11bHRp cGxlIG9mIFFVRVVFX0NMRUFOVVBfREVMQVk/ICovCiBzdGF0aWMgYm9vbCB0cnlBZHZhbmNl VGFpbCA9IGZhbHNlOwogCkBAIC00MjgsMTQgKzUzOSwxNCBAQCBib29sCQlUcmFjZV9ub3Rp ZnkgPSBmYWxzZTsKIGludAkJCW1heF9ub3RpZnlfcXVldWVfcGFnZXMgPSAxMDQ4NTc2Owog CiAvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW5saW5lIGludDY0 IGFzeW5jUXVldWVQYWdlRGlmZihpbnQ2NCBwLCBpbnQ2NCBxKTsKIHN0YXRpYyBpbmxpbmUg Ym9vbCBhc3luY1F1ZXVlUGFnZVByZWNlZGVzKGludDY0IHAsIGludDY0IHEpOwogc3RhdGlj IHZvaWQgcXVldWVfbGlzdGVuKExpc3RlbkFjdGlvbktpbmQgYWN0aW9uLCBjb25zdCBjaGFy ICpjaGFubmVsKTsKIHN0YXRpYyB2b2lkIEFzeW5jX1VubGlzdGVuT25FeGl0KGludCBjb2Rl LCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgRXhlY19MaXN0ZW5QcmVDb21taXQodm9pZCk7 Ci1zdGF0aWMgdm9pZCBFeGVjX0xpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKTsK LXN0YXRpYyB2b2lkIEV4ZWNfVW5saXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hhbm5lbCk7 Ci1zdGF0aWMgdm9pZCBFeGVjX1VubGlzdGVuQWxsQ29tbWl0KHZvaWQpOworc3RhdGljIHZv aWQgRXhlY19MaXN0ZW5QcmVDb21taXRTdGFnZShjb25zdCBjaGFyICpjaGFubmVsKTsKK3N0 YXRpYyB2b2lkIEV4ZWNfVW5saXN0ZW5QcmVDb21taXRTdGFnZShjb25zdCBjaGFyICpjaGFu bmVsKTsKK3N0YXRpYyB2b2lkIEV4ZWNfVW5saXN0ZW5BbGxQcmVDb21taXRTdGFnZSh2b2lk KTsKK3N0YXRpYyB2b2lkIENsZWFudXBMaXN0ZW5lcnNPbkV4aXQodm9pZCk7CiBzdGF0aWMg Ym9vbCBJc0xpc3RlbmluZ09uKGNvbnN0IGNoYXIgKmNoYW5uZWwpOwogc3RhdGljIHZvaWQg YXN5bmNRdWV1ZVVucmVnaXN0ZXIodm9pZCk7CiBzdGF0aWMgYm9vbCBhc3luY1F1ZXVlSXNG dWxsKHZvaWQpOwpAQCAtNDU2LDE2ICs1NjcsOSBAQCBzdGF0aWMgdm9pZCBBZGRFdmVudFRv UGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbik7CiBzdGF0aWMgdWludDMyIG5vdGlm aWNhdGlvbl9oYXNoKGNvbnN0IHZvaWQgKmtleSwgU2l6ZSBrZXlzaXplKTsKIHN0YXRpYyBp bnQJbm90aWZpY2F0aW9uX21hdGNoKGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtl eTIsIFNpemUga2V5c2l6ZSk7CiBzdGF0aWMgdm9pZCBDbGVhclBlbmRpbmdBY3Rpb25zQW5k Tm90aWZpZXModm9pZCk7Ci0KLS8qCi0gKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gdHdvIHF1ZXVlIHBhZ2UgbnVtYmVycy4KLSAqIFByZXZpb3VzbHkgdGhpcyBmdW5jdGlv biBhY2NvdW50ZWQgZm9yIGEgd3JhcGFyb3VuZC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQ2 NAotYXN5bmNRdWV1ZVBhZ2VEaWZmKGludDY0IHAsIGludDY0IHEpCi17Ci0JcmV0dXJuIHAg LSBxOwotfQorc3RhdGljIGlubGluZSB2b2lkIENoYW5uZWxIYXNoUHJlcGFyZUtleShDaGFu bmVsSGFzaEtleSAqa2V5LCBPaWQgZGJvaWQsIGNvbnN0IGNoYXIgKmNoYW5uZWwpOworc3Rh dGljIGRzaGFzaF9oYXNoIGNoYW5uZWxIYXNoRnVuYyhjb25zdCB2b2lkICprZXksIHNpemVf dCBzaXplLCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgaW5pdENoYW5uZWxIYXNoKHZvaWQp OwogCiAvKgogICogRGV0ZXJtaW5lcyB3aGV0aGVyIHAgcHJlY2VkZXMgcS4KQEAgLTQ3Nyw2 ICs1ODEsMTMxIEBAIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMoaW50NjQgcCwgaW50NjQgcSkK IAlyZXR1cm4gcCA8IHE7CiB9CiAKKy8qCisgKiBjaGFubmVsSGFzaEZ1bmMKKyAqCQlIYXNo IGZ1bmN0aW9uIGZvciBjaGFubmVsIGtleXMuCisgKi8KK3N0YXRpYyBkc2hhc2hfaGFzaAor Y2hhbm5lbEhhc2hGdW5jKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFy ZykKK3sKKwljb25zdCBDaGFubmVsSGFzaEtleSAqayA9IChjb25zdCBDaGFubmVsSGFzaEtl eSAqKSBrZXk7CisJZHNoYXNoX2hhc2ggaDsKKworCWggPSBEYXR1bUdldFVJbnQzMihoYXNo X3VpbnQzMihrLT5kYm9pZCkpOworCWggXj0gRGF0dW1HZXRVSW50MzIoaGFzaF9hbnkoKGNv bnN0IHVuc2lnbmVkIGNoYXIgKikgay0+Y2hhbm5lbCwKKwkJCQkJCQkJIHN0cm5sZW4oay0+ Y2hhbm5lbCwgTkFNRURBVEFMRU4pKSk7CisKKwlyZXR1cm4gaDsKK30KKworLyogcGFyYW1l dGVycyBmb3IgdGhlIGNoYW5uZWwgaGFzaCB0YWJsZSAqLworc3RhdGljIGNvbnN0IGRzaGFz aF9wYXJhbWV0ZXJzIGNoYW5uZWxEU0hQYXJhbXMgPSB7CisJc2l6ZW9mKENoYW5uZWxIYXNo S2V5KSwKKwlzaXplb2YoQ2hhbm5lbExpc3RlbmVycyksCisJZHNoYXNoX21lbWNtcCwKKwlj aGFubmVsSGFzaEZ1bmMsCisJZHNoYXNoX21lbWNweSwKKwlMV1RSQU5DSEVfTk9USUZZX0NI QU5ORUxfSEFTSAorfTsKKworLyoKKyAqIGluaXRDaGFubmVsSGFzaAorICoJCUxhenkgaW5p dGlhbGl6YXRpb24gb2YgdGhlIGNoYW5uZWwgaGFzaCB0YWJsZS4KKyAqLworc3RhdGljIHZv aWQKK2luaXRDaGFubmVsSGFzaCh2b2lkKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4 dDsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2UgYWxyZWFkeSBkaWQgdGhpcyAqLworCWlmIChh c3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0ggIT0gRFNIQVNIX0hBTkRMRV9JTlZB TElEICYmCisJCWNoYW5uZWxIYXNoICE9IE5VTEwpCisJCXJldHVybjsKKworCS8qIE90aGVy d2lzZSwgdXNlIGEgbG9jayB0byBlbnN1cmUgb25seSBvbmUgcHJvY2VzcyBjcmVhdGVzIHRo ZSB0YWJsZSAqLworCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19FWENMVVNJ VkUpOworCisJLyogQmUgc3VyZSBhbnkgbG9jYWwgbWVtb3J5IGFsbG9jYXRlZCBieSBEU0Eg cm91dGluZXMgaXMgcGVyc2lzdGVudCAqLworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisKKwlpZiAoYXN5bmNRdWV1ZUNvbnRyb2wt PmNoYW5uZWxIYXNoRFNIID09IERTSEFTSF9IQU5ETEVfSU5WQUxJRCkKKwl7CisJCS8qIElu aXRpYWxpemUgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSBmb3IgY2hhbm5lbCBoYXNoICov CisJCWNoYW5uZWxEU0EgPSBkc2FfY3JlYXRlKExXVFJBTkNIRV9OT1RJRllfQ0hBTk5FTF9I QVNIKTsKKwkJZHNhX3BpbihjaGFubmVsRFNBKTsKKwkJZHNhX3Bpbl9tYXBwaW5nKGNoYW5u ZWxEU0EpOworCQljaGFubmVsSGFzaCA9IGRzaGFzaF9jcmVhdGUoY2hhbm5lbERTQSwgJmNo YW5uZWxEU0hQYXJhbXMsIE5VTEwpOworCisJCS8qIFN0b3JlIGhhbmRsZXMgaW4gc2hhcmVk IG1lbW9yeSBmb3Igb3RoZXIgYmFja2VuZHMgdG8gdXNlICovCisJCWFzeW5jUXVldWVDb250 cm9sLT5jaGFubmVsSGFzaERTQSA9IGRzYV9nZXRfaGFuZGxlKGNoYW5uZWxEU0EpOworCQlh c3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0ggPQorCQkJZHNoYXNoX2dldF9oYXNo X3RhYmxlX2hhbmRsZShjaGFubmVsSGFzaCk7CisJfQorCWVsc2UgaWYgKCFjaGFubmVsSGFz aCkKKwl7CisJCS8qIEF0dGFjaCB0byBleGlzdGluZyBkeW5hbWljIHNoYXJlZCBoYXNoIHRh YmxlICovCisJCWNoYW5uZWxEU0EgPSBkc2FfYXR0YWNoKGFzeW5jUXVldWVDb250cm9sLT5j aGFubmVsSGFzaERTQSk7CisJCWRzYV9waW5fbWFwcGluZyhjaGFubmVsRFNBKTsKKwkJY2hh bm5lbEhhc2ggPSBkc2hhc2hfYXR0YWNoKGNoYW5uZWxEU0EsICZjaGFubmVsRFNIUGFyYW1z LAorCQkJCQkJCQkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNILAorCQkJCQkJ CQkJTlVMTCk7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwor CUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKK30KKworLyoKKyAqIGluaXRMaXN0 ZW5DaGFubmVsc0hhc2gKKyAqCQlMYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBsb2NhbCBs aXN0ZW4gY2hhbm5lbHMgaGFzaCB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2luaXRMaXN0 ZW5DaGFubmVsc0hhc2godm9pZCkKK3sKKwlIQVNIQ1RMCQloYXNoX2N0bDsKKworCS8qIFF1 aWNrIGV4aXQgaWYgd2UgYWxyZWFkeSBkaWQgdGhpcyAqLworCWlmIChsaXN0ZW5DaGFubmVs c0hhc2ggIT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogSW5pdGlhbGl6ZSBsb2NhbCBoYXNo IHRhYmxlIGZvciB0aGlzIGJhY2tlbmQncyBsaXN0ZW5lZCBjaGFubmVscyAqLworCW1lbXNl dCgmaGFzaF9jdGwsIDAsIHNpemVvZihoYXNoX2N0bCkpOworCWhhc2hfY3RsLmtleXNpemUg PSBOQU1FREFUQUxFTjsKKwloYXNoX2N0bC5lbnRyeXNpemUgPSBzaXplb2Yoc3RydWN0IENo YW5uZWxOYW1lKTsKKworCWxpc3RlbkNoYW5uZWxzSGFzaCA9CisJCWhhc2hfY3JlYXRlKCJM aXN0ZW4gQ2hhbm5lbHMiLAorCQkJCQk2NCwKKwkJCQkJJmhhc2hfY3RsLAorCQkJCQlIQVNI X0VMRU0gfCBIQVNIX1NUUklOR1MpOworfQorCisvKgorICogaW5pdFBlbmRpbmdMaXN0ZW5D aGFubmVscworICoJCUxhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBlbmRpbmcgbGlzdGVu IGNoYW5uZWxzIGhhc2ggdGFibGUuCisgKgkJVGhpcyBpcyBhbGxvY2F0ZWQgaW4gQ3VyVHJh bnNhY3Rpb25Db250ZXh0IGFuZCBkZXN0cm95ZWQgYXQKKyAqCQl0cmFuc2FjdGlvbiBlbmQu CisgKi8KK3N0YXRpYyB2b2lkCitpbml0UGVuZGluZ0xpc3RlbkNoYW5uZWxzKHZvaWQpCit7 CisJSEFTSENUTAkJaGFzaF9jdGw7CisKKwlpZiAocGVuZGluZ0xpc3RlbkNoYW5uZWxzICE9 IE5VTEwpCisJCXJldHVybjsKKworCW1lbXNldCgmaGFzaF9jdGwsIDAsIHNpemVvZihoYXNo X2N0bCkpOworCWhhc2hfY3RsLmtleXNpemUgPSBOQU1FREFUQUxFTjsKKwloYXNoX2N0bC5l bnRyeXNpemUgPSBzaXplb2Yoc3RydWN0IFBlbmRpbmdMaXN0ZW5FbnRyeSk7CisJaGFzaF9j dGwuaGN4dCA9IEN1clRyYW5zYWN0aW9uQ29udGV4dDsKKworCXBlbmRpbmdMaXN0ZW5DaGFu bmVscyA9CisJCWhhc2hfY3JlYXRlKCJQZW5kaW5nIExpc3RlbiBDaGFubmVscyIsCisJCQkJ CTE2LAorCQkJCQkmaGFzaF9jdGwsCisJCQkJCUhBU0hfRUxFTSB8IEhBU0hfU1RSSU5HUyB8 IEhBU0hfQ09OVEVYVCk7Cit9CisKIC8qCiAgKiBSZXBvcnQgc3BhY2UgbmVlZGVkIGZvciBv dXIgc2hhcmVkIG1lbW9yeSBhcmVhCiAgKi8KQEAgLTUyMCwxMiArNzQ5LDE3IEBAIEFzeW5j U2htZW1Jbml0KHZvaWQpCiAJCVFVRVVFX1NUT1BfUEFHRSA9IDA7CiAJCVFVRVVFX0ZJUlNU X0xJU1RFTkVSID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAkJYXN5bmNRdWV1ZUNvbnRyb2wt Pmxhc3RRdWV1ZUZpbGxXYXJuID0gMDsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxI YXNoRFNBID0gRFNBX0hBTkRMRV9JTlZBTElEOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hh bm5lbEhhc2hEU0ggPSBEU0hBU0hfSEFORExFX0lOVkFMSUQ7CiAJCWZvciAoaW50IGkgPSAw OyBpIDwgTWF4QmFja2VuZHM7IGkrKykKIAkJewogCQkJUVVFVUVfQkFDS0VORF9QSUQoaSkg PSBJbnZhbGlkUGlkOwogCQkJUVVFVUVfQkFDS0VORF9EQk9JRChpKSA9IEludmFsaWRPaWQ7 CiAJCQlRVUVVRV9ORVhUX0xJU1RFTkVSKGkpID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAkJ CVNFVF9RVUVVRV9QT1MoUVVFVUVfQkFDS0VORF9QT1MoaSksIDAsIDApOworCQkJU0VUX1FV RVVFX1BPUyhRVUVVRV9CQUNLRU5EX0FEVkFOQ0lOR19QT1MoaSksIDAsIDApOworCQkJUVVF VUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSA9IGZhbHNlOworCQkJUVVFVUVfQkFDS0VO RF9JU19BRFZBTkNJTkcoaSkgPSBmYWxzZTsKIAkJfQogCX0KIApAQCAtNjU2LDYgKzg5MCw3 IEBAIEFzeW5jX05vdGlmeShjb25zdCBjaGFyICpjaGFubmVsLCBjb25zdCBjaGFyICpwYXls b2FkKQogCQlub3RpZmllcy0+ZXZlbnRzID0gbGlzdF9tYWtlMShuKTsKIAkJLyogV2UgY2Vy dGFpbmx5IGRvbid0IG5lZWQgYSBoYXNodGFibGUgeWV0ICovCiAJCW5vdGlmaWVzLT5oYXNo dGFiID0gTlVMTDsKKwkJbm90aWZpZXMtPmNoYW5uZWxTZXQgPSBOVUxMOwogCQlub3RpZmll cy0+dXBwZXIgPSBwZW5kaW5nTm90aWZpZXM7CiAJCXBlbmRpbmdOb3RpZmllcyA9IG5vdGlm aWVzOwogCX0KQEAgLTY4Miw4ICs5MTcsOCBAQCBBc3luY19Ob3RpZnkoY29uc3QgY2hhciAq Y2hhbm5lbCwgY29uc3QgY2hhciAqcGF5bG9hZCkKICAqCQlDb21tb24gY29kZSBmb3IgbGlz dGVuLCB1bmxpc3RlbiwgdW5saXN0ZW4gYWxsIGNvbW1hbmRzLgogICoKICAqCQlBZGRzIHRo ZSByZXF1ZXN0IHRvIHRoZSBsaXN0IG9mIHBlbmRpbmcgYWN0aW9ucy4KLSAqCQlBY3R1YWwg dXBkYXRlIG9mIHRoZSBsaXN0ZW5DaGFubmVscyBsaXN0IGhhcHBlbnMgZHVyaW5nIHRyYW5z YWN0aW9uCi0gKgkJY29tbWl0LgorICoJCUFjdHVhbCB1cGRhdGUgb2YgbGlzdGVuQ2hhbm5l bHNIYXNoIGFuZCBjaGFubmVsSGFzaCBoYXBwZW5zIGR1cmluZworICoJCVByZUNvbW1pdF9O b3RpZnksIHdpdGggc3RhZ2VkIGNoYW5nZXMgY29tbWl0dGVkIGluIEF0Q29tbWl0X05vdGlm eS4KICAqLwogc3RhdGljIHZvaWQKIHF1ZXVlX2xpc3RlbihMaXN0ZW5BY3Rpb25LaW5kIGFj dGlvbiwgY29uc3QgY2hhciAqY2hhbm5lbCkKQEAgLTc4MiwzMCArMTAxNyw0OSBAQCBBc3lu Y19Vbmxpc3RlbkFsbCh2b2lkKQogICogU1FMIGZ1bmN0aW9uOiByZXR1cm4gYSBzZXQgb2Yg dGhlIGNoYW5uZWwgbmFtZXMgdGhpcyBiYWNrZW5kIGlzIGFjdGl2ZWx5CiAgKiBsaXN0ZW5p bmcgdG8uCiAgKgotICogTm90ZTogdGhpcyBjb2RpbmcgcmVsaWVzIG9uIHRoZSBmYWN0IHRo YXQgdGhlIGxpc3RlbkNoYW5uZWxzIGxpc3QgY2Fubm90CisgKiBOb3RlOiB0aGlzIGNvZGlu ZyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCB0aGUgbGlzdGVuQ2hhbm5lbHNIYXNoIGNhbm5v dAogICogY2hhbmdlIHdpdGhpbiBhIHRyYW5zYWN0aW9uLgogICovCiBEYXR1bQogcGdfbGlz dGVuaW5nX2NoYW5uZWxzKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJRnVuY0NhbGxDb250ZXh0 ICpmdW5jY3R4OworCUhBU0hfU0VRX1NUQVRVUyAqc3RhdHVzOwogCiAJLyogc3R1ZmYgZG9u ZSBvbmx5IG9uIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBmdW5jdGlvbiAqLwogCWlmIChTUkZf SVNfRklSU1RDQUxMKCkpCiAJeworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKIAkJ LyogY3JlYXRlIGEgZnVuY3Rpb24gY29udGV4dCBmb3IgY3Jvc3MtY2FsbCBwZXJzaXN0ZW5j ZSAqLwogCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJLyogSW5pdGlh bGl6ZSBoYXNoIHRhYmxlIGl0ZXJhdGlvbiBpZiB3ZSBoYXZlIGFueSBjaGFubmVscyAqLwor CQlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoICE9IE5VTEwpCisJCXsKKwkJCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4 KTsKKwkJCXN0YXR1cyA9IChIQVNIX1NFUV9TVEFUVVMgKikgcGFsbG9jKHNpemVvZihIQVNI X1NFUV9TVEFUVVMpKTsKKwkJCWhhc2hfc2VxX2luaXQoc3RhdHVzLCBsaXN0ZW5DaGFubmVs c0hhc2gpOworCQkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gc3RhdHVzOworCQkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCQl9CisJCWVsc2UKKwkJeworCQkJZnVuY2N0 eC0+dXNlcl9mY3R4ID0gTlVMTDsKKwkJfQogCX0KIAogCS8qIHN0dWZmIGRvbmUgb24gZXZl cnkgY2FsbCBvZiB0aGUgZnVuY3Rpb24gKi8KIAlmdW5jY3R4ID0gU1JGX1BFUkNBTExfU0VU VVAoKTsKKwlzdGF0dXMgPSAoSEFTSF9TRVFfU1RBVFVTICopIGZ1bmNjdHgtPnVzZXJfZmN0 eDsKIAotCWlmIChmdW5jY3R4LT5jYWxsX2NudHIgPCBsaXN0X2xlbmd0aChsaXN0ZW5DaGFu bmVscykpCisJaWYgKHN0YXR1cyAhPSBOVUxMKQogCXsKLQkJY2hhcgkgICAqY2hhbm5lbCA9 IChjaGFyICopIGxpc3RfbnRoKGxpc3RlbkNoYW5uZWxzLAotCQkJCQkJCQkJCQkJZnVuY2N0 eC0+Y2FsbF9jbnRyKTsKKwkJc3RydWN0IENoYW5uZWxOYW1lICplbnRyeTsKIAotCQlTUkZf UkVUVVJOX05FWFQoZnVuY2N0eCwgQ1N0cmluZ0dldFRleHREYXR1bShjaGFubmVsKSk7CisJ CWVudHJ5ID0gKHN0cnVjdCBDaGFubmVsTmFtZSAqKSBoYXNoX3NlcV9zZWFyY2goc3RhdHVz KTsKKwkJaWYgKGVudHJ5ICE9IE5VTEwpCisJCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwg Q1N0cmluZ0dldFRleHREYXR1bShlbnRyeS0+Y2hhbm5lbCkpOwogCX0KIAogCVNSRl9SRVRV Uk5fRE9ORShmdW5jY3R4KTsKQEAgLTgyMSw3ICsxMDc1LDcgQEAgcGdfbGlzdGVuaW5nX2No YW5uZWxzKFBHX0ZVTkNUSU9OX0FSR1MpCiBzdGF0aWMgdm9pZAogQXN5bmNfVW5saXN0ZW5P bkV4aXQoaW50IGNvZGUsIERhdHVtIGFyZykKIHsKLQlFeGVjX1VubGlzdGVuQWxsQ29tbWl0 KCk7CisJQ2xlYW51cExpc3RlbmVyc09uRXhpdCgpOwogCWFzeW5jUXVldWVVbnJlZ2lzdGVy KCk7CiB9CiAKQEAgLTg2OCw4ICsxMTIyLDI1IEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkK IAkJZWxvZyhERUJVRzEsICJQcmVDb21taXRfTm90aWZ5Iik7CiAKIAkvKiBQcmVmbGlnaHQg Zm9yIGFueSBwZW5kaW5nIGxpc3Rlbi91bmxpc3RlbiBhY3Rpb25zICovCisJaWYgKHBlbmRp bmdOb3RpZmllcyAhPSBOVUxMIHx8IHBlbmRpbmdBY3Rpb25zICE9IE5VTEwpCisJCWluaXRD aGFubmVsSGFzaCgpOworCisJaWYgKHBlbmRpbmdOb3RpZmllcyAhPSBOVUxMKQorCXsKKwkJ aWYgKHNpZ25hbFBpZHMgPT0gTlVMTCkKKwkJCXNpZ25hbFBpZHMgPSBNZW1vcnlDb250ZXh0 QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJTWF4QmFja2VuZHMgKiBzaXpl b2YoaW50MzIpKTsKKworCQlpZiAoc2lnbmFsUHJvY25vcyA9PSBOVUxMKQorCQkJc2lnbmFs UHJvY25vcyA9IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJ CQkJCQkgICBNYXhCYWNrZW5kcyAqIHNpemVvZihQcm9jTnVtYmVyKSk7CisJfQorCiAJaWYg KHBlbmRpbmdBY3Rpb25zICE9IE5VTEwpCiAJeworCQlpbml0TGlzdGVuQ2hhbm5lbHNIYXNo KCk7CisJCWluaXRQZW5kaW5nTGlzdGVuQ2hhbm5lbHMoKTsKKwogCQlmb3JlYWNoKHAsIHBl bmRpbmdBY3Rpb25zLT5hY3Rpb25zKQogCQl7CiAJCQlMaXN0ZW5BY3Rpb24gKmFjdHJlYyA9 IChMaXN0ZW5BY3Rpb24gKikgbGZpcnN0KHApOwpAQCAtODc4LDEyICsxMTQ5LDEzIEBAIFBy ZUNvbW1pdF9Ob3RpZnkodm9pZCkKIAkJCXsKIAkJCQljYXNlIExJU1RFTl9MSVNURU46CiAJ CQkJCUV4ZWNfTGlzdGVuUHJlQ29tbWl0KCk7CisJCQkJCUV4ZWNfTGlzdGVuUHJlQ29tbWl0 U3RhZ2UoYWN0cmVjLT5jaGFubmVsKTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBMSVNURU5f VU5MSVNURU46Ci0JCQkJCS8qIHRoZXJlIGlzIG5vIEV4ZWNfVW5saXN0ZW5QcmVDb21taXQo KSAqLworCQkJCQlFeGVjX1VubGlzdGVuUHJlQ29tbWl0U3RhZ2UoYWN0cmVjLT5jaGFubmVs KTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBMSVNURU5fVU5MSVNURU5fQUxMOgotCQkJCQkv KiB0aGVyZSBpcyBubyBFeGVjX1VubGlzdGVuQWxsUHJlQ29tbWl0KCkgKi8KKwkJCQkJRXhl Y19Vbmxpc3RlbkFsbFByZUNvbW1pdFN0YWdlKCk7CiAJCQkJCWJyZWFrOwogCQkJfQogCQl9 CkBAIC04OTMsNiArMTE2NSwzNiBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJaWYgKHBl bmRpbmdOb3RpZmllcykKIAl7CiAJCUxpc3RDZWxsICAgKm5leHROb3RpZnk7CisJCWJvb2wJ CWZpcnN0SXRlcmF0aW9uID0gdHJ1ZTsKKworCQkvKgorCQkgKiBCdWlsZCBsaXN0IG9mIHVu aXF1ZSBjaGFubmVscyBmb3IgU2lnbmFsQmFja2VuZHMoKS4KKwkJICoKKwkJICogSWYgd2Ug aGF2ZSBhIGNoYW5uZWxTZXQsIHVzZSBpdCB0byBlZmZpY2llbnRseSBnZXQgdGhlIHVuaXF1 ZQorCQkgKiBjaGFubmVscy4gIE90aGVyd2lzZSwgZmFsbCBiYWNrIHRvIHRoZSBsaW5lYXIg YXBwcm9hY2guCisJCSAqLworCQlwZW5kaW5nTm90aWZ5Q2hhbm5lbHMgPSBOSUw7CisJCWlm IChwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxTZXQgIT0gTlVMTCkKKwkJeworCQkJSEFTSF9T RVFfU1RBVFVTIHN0YXR1czsKKwkJCXN0cnVjdCBDaGFubmVsTmFtZSAqY2hhbm5lbEVudHJ5 OworCisJCQloYXNoX3NlcV9pbml0KCZzdGF0dXMsIHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5l bFNldCk7CisJCQl3aGlsZSAoKGNoYW5uZWxFbnRyeSA9IChzdHJ1Y3QgQ2hhbm5lbE5hbWUg KikgaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCQkJCXBlbmRpbmdOb3Rp ZnlDaGFubmVscyA9IGxhcHBlbmQocGVuZGluZ05vdGlmeUNoYW5uZWxzLCBjaGFubmVsRW50 cnktPmNoYW5uZWwpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTGluZWFyIGFwcHJvYWNo IGZvciBzbWFsbCBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyAqLworCQkJZm9yZWFjaF9wdHIo Tm90aWZpY2F0aW9uLCBuLCBwZW5kaW5nTm90aWZpZXMtPmV2ZW50cykKKwkJCXsKKwkJCQlj aGFyCSAgICpjaGFubmVsID0gbi0+ZGF0YTsKKworCQkJCS8qIEFkZCBpZiBub3QgYWxyZWFk eSBpbiBsaXN0ICovCisJCQkJaWYgKCFsaXN0X21lbWJlcl9wdHIocGVuZGluZ05vdGlmeUNo YW5uZWxzLCBjaGFubmVsKSkKKwkJCQkJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gbGFwcGVu ZChwZW5kaW5nTm90aWZ5Q2hhbm5lbHMsIGNoYW5uZWwpOworCQkJfQorCQl9CiAKIAkJLyoK IAkJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbiBYSUQgYXNzaWduZWQgdG8gdGhlIGN1 cnJlbnQgdHJhbnNhY3Rpb24uCkBAIC05MjEsNiArMTIyMywyMiBAQCBQcmVDb21taXRfTm90 aWZ5KHZvaWQpCiAJCUxvY2tTaGFyZWRPYmplY3QoRGF0YWJhc2VSZWxhdGlvbklkLCBJbnZh bGlkT2lkLCAwLAogCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOwogCisJCS8qCisJCSAq IEZvciB0aGUgZGlyZWN0IGFkdmFuY2VtZW50IG9wdGltaXphdGlvbiBpbiBTaWduYWxCYWNr ZW5kcygpLCB3ZQorCQkgKiBuZWVkIHRvIGVuc3VyZSB0aGF0IG5vIG90aGVyIGJhY2tlbmQg Y2FuIGluc2VydCBxdWV1ZSBlbnRyaWVzCisJCSAqIGJldHdlZW4gcXVldWVIZWFkQmVmb3Jl V3JpdGUgYW5kIHF1ZXVlSGVhZEFmdGVyV3JpdGUuICBUaGUKKwkJICogaGVhdnl3ZWlnaHQg bG9jayBhYm92ZSBwcm92aWRlcyB0aGlzIGd1YXJhbnRlZSwgc2luY2UgaXQgc2VyaWFsaXpl cworCQkgKiBhbGwgd3JpdGVycy4KKwkJICoKKwkJICogTm90ZTogaWYgdGhlIGhlYXZ5d2Vp Z2h0IGxvY2sgd2VyZSBldmVyIHJlbW92ZWQgZm9yIHNjYWxhYmlsaXR5CisJCSAqIHJlYXNv bnMsIHdlIGNvdWxkIGFjaGlldmUgdGhlIHNhbWUgZ3VhcmFudGVlIGJ5IGhvbGRpbmcKKwkJ ICogTm90aWZ5UXVldWVMb2NrIGluIEVYQ0xVU0lWRSBtb2RlIGFjcm9zcyBhbGwgb3VyIGlu c2VydGlvbnMsIHJhdGhlcgorCQkgKiB0aGFuIHJlbGVhc2luZyBhbmQgcmVhY3F1aXJpbmcg aXQgZm9yIGVhY2ggcGFnZSBhcyB3ZSBkbyBiZWxvdy4KKwkJICovCisKKwkJLyogSW5pdGlh bGl6ZSBxdWV1ZUhlYWRCZWZvcmVXcml0ZSB0byBhIHNhZmUgZGVmYXVsdCAqLworCQlTRVRf UVVFVUVfUE9TKHF1ZXVlSGVhZEJlZm9yZVdyaXRlLCAwLCAwKTsKKwogCQkvKiBOb3cgcHVz aCB0aGUgbm90aWZpY2F0aW9ucyBpbnRvIHRoZSBxdWV1ZSAqLwogCQluZXh0Tm90aWZ5ID0g bGlzdF9oZWFkKHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzKTsKIAkJd2hpbGUgKG5leHROb3Rp ZnkgIT0gTlVMTCkKQEAgLTkzOCwxMiArMTI1NiwyMCBAQCBQcmVDb21taXRfTm90aWZ5KHZv aWQpCiAJCQkgKiBwb2ludCBpbiB0aW1lIHdlIGNhbiBzdGlsbCByb2xsIHRoZSB0cmFuc2Fj dGlvbiBiYWNrLgogCQkJICovCiAJCQlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywg TFdfRVhDTFVTSVZFKTsKKwkJCWlmIChmaXJzdEl0ZXJhdGlvbikKKwkJCXsKKwkJCQlxdWV1 ZUhlYWRCZWZvcmVXcml0ZSA9IFFVRVVFX0hFQUQ7CisJCQkJZmlyc3RJdGVyYXRpb24gPSBm YWxzZTsKKwkJCX0KKwogCQkJYXN5bmNRdWV1ZUZpbGxXYXJuaW5nKCk7CiAJCQlpZiAoYXN5 bmNRdWV1ZUlzRnVsbCgpKQogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShF UlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAogCQkJCQkJIGVycm1zZygidG9vIG1h bnkgbm90aWZpY2F0aW9ucyBpbiB0aGUgTk9USUZZIHF1ZXVlIikpKTsKIAkJCW5leHROb3Rp ZnkgPSBhc3luY1F1ZXVlQWRkRW50cmllcyhuZXh0Tm90aWZ5KTsKKwkJCXF1ZXVlSGVhZEFm dGVyV3JpdGUgPSBRVUVVRV9IRUFEOworCiAJCQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVl TG9jayk7CiAJCX0KIApAQCAtOTU2LDcgKzEyODIsNyBAQCBQcmVDb21taXRfTm90aWZ5KHZv aWQpCiAgKgogICoJCVRoaXMgaXMgY2FsbGVkIGF0IHRyYW5zYWN0aW9uIGNvbW1pdCwgYWZ0 ZXIgY29tbWl0dGluZyB0byBjbG9nLgogICoKLSAqCQlVcGRhdGUgbGlzdGVuQ2hhbm5lbHMg YW5kIGNsZWFyIHRyYW5zYWN0aW9uLWxvY2FsIHN0YXRlLgorICoJCVVwZGF0ZSBsaXN0ZW5D aGFubmVsc0hhc2ggYW5kIGNsZWFyIHRyYW5zYWN0aW9uLWxvY2FsIHN0YXRlLgogICoKICAq CQlJZiB3ZSBpc3N1ZWQgYW55IG5vdGlmaWNhdGlvbnMgaW4gdGhlIHRyYW5zYWN0aW9uLCBz ZW5kIHNpZ25hbHMgdG8KICAqCQlsaXN0ZW5pbmcgYmFja2VuZHMgKHBvc3NpYmx5IGluY2x1 ZGluZyBvdXJzZWx2ZXMpIHRvIHByb2Nlc3MgdGhlbS4KQEAgLTk2Niw4ICsxMjkyLDYgQEAg UHJlQ29tbWl0X05vdGlmeSh2b2lkKQogdm9pZAogQXRDb21taXRfTm90aWZ5KHZvaWQpCiB7 Ci0JTGlzdENlbGwgICAqcDsKLQogCS8qCiAJICogQWxsb3cgdHJhbnNhY3Rpb25zIHRoYXQg aGF2ZSBub3QgZXhlY3V0ZWQgTElTVEVOL1VOTElTVEVOL05PVElGWSB0bwogCSAqIHJldHVy biBhcyBzb29uIGFzIHBvc3NpYmxlCkBAIC05NzgsMzAgKzEzMDIsNjkgQEAgQXRDb21taXRf Tm90aWZ5KHZvaWQpCiAJaWYgKFRyYWNlX25vdGlmeSkKIAkJZWxvZyhERUJVRzEsICJBdENv bW1pdF9Ob3RpZnkiKTsKIAotCS8qIFBlcmZvcm0gYW55IHBlbmRpbmcgbGlzdGVuL3VubGlz dGVuIGFjdGlvbnMgKi8KLQlpZiAocGVuZGluZ0FjdGlvbnMgIT0gTlVMTCkKKwkvKiBDb21t aXQgc3RhZ2VkIGxpc3Rlbi91bmxpc3RlbiBjaGFuZ2VzICovCisJaWYgKHBlbmRpbmdMaXN0 ZW5DaGFubmVscyAhPSBOVUxMKQogCXsKLQkJZm9yZWFjaChwLCBwZW5kaW5nQWN0aW9ucy0+ YWN0aW9ucykKKwkJSEFTSF9TRVFfU1RBVFVTIHNlcTsKKwkJc3RydWN0IFBlbmRpbmdMaXN0 ZW5FbnRyeSAqcGVuZGluZzsKKworCQloYXNoX3NlcV9pbml0KCZzZXEsIHBlbmRpbmdMaXN0 ZW5DaGFubmVscyk7CisJCXdoaWxlICgocGVuZGluZyA9IChzdHJ1Y3QgUGVuZGluZ0xpc3Rl bkVudHJ5ICopIGhhc2hfc2VxX3NlYXJjaCgmc2VxKSkgIT0gTlVMTCkKIAkJewotCQkJTGlz dGVuQWN0aW9uICphY3RyZWMgPSAoTGlzdGVuQWN0aW9uICopIGxmaXJzdChwKTsKKwkJCUNo YW5uZWxIYXNoS2V5IGtleTsKKwkJCUNoYW5uZWxMaXN0ZW5lcnMgKmVudHJ5OworCQkJTGlz dGVuZXJFbnRyeSAqbGlzdGVuZXJzOwogCi0JCQlzd2l0Y2ggKGFjdHJlYy0+YWN0aW9uKQor CQkJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgcGVuZGluZy0+ Y2hhbm5lbCk7CisJCQllbnRyeSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5LCB0 cnVlKTsKKwkJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlsaXN0 ZW5lcnMgPSAoTGlzdGVuZXJFbnRyeSAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwg ZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRy eS0+bnVtTGlzdGVuZXJzOyBpKyspCiAJCQl7Ci0JCQkJY2FzZSBMSVNURU5fTElTVEVOOgot CQkJCQlFeGVjX0xpc3RlbkNvbW1pdChhY3RyZWMtPmNoYW5uZWwpOwotCQkJCQlicmVhazsK LQkJCQljYXNlIExJU1RFTl9VTkxJU1RFTjoKLQkJCQkJRXhlY19Vbmxpc3RlbkNvbW1pdChh Y3RyZWMtPmNoYW5uZWwpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIExJU1RFTl9VTkxJU1RF Tl9BTEw6Ci0JCQkJCUV4ZWNfVW5saXN0ZW5BbGxDb21taXQoKTsKKwkJCQlpZiAobGlzdGVu ZXJzW2ldLnByb2NObyA9PSBNeVByb2NOdW1iZXIpCisJCQkJeworCQkJCQlpZiAocGVuZGlu Zy0+bGlzdGVuaW5nKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogTElTVEVOIGJlaW5n IGNvbW1pdHRlZDogc2V0IGxpc3RlbmluZz10cnVlLgorCQkJCQkJICogbGlzdGVuQ2hhbm5l bHNIYXNoIHdhcyBwcmUtYWxsb2NhdGVkIGluIFByZUNvbW1pdC4KKwkJCQkJCSAqLworCQkJ CQkJbGlzdGVuZXJzW2ldLmxpc3RlbmluZyA9IHRydWU7CisJCQkJCX0KKwkJCQkJZWxzZQor CQkJCQl7CisJCQkJCQkvKiBVTkxJU1RFTiBiZWluZyBjb21taXR0ZWQ6IHJlbW92ZSBmcm9t IGNoYW5uZWxIYXNoICovCisJCQkJCQllbnRyeS0+bnVtTGlzdGVuZXJzLS07CisJCQkJCQlp ZiAoaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnMpCisJCQkJCQkJbWVtbW92ZSgmbGlzdGVuZXJz W2ldLCAmbGlzdGVuZXJzW2kgKyAxXSwKKwkJCQkJCQkJCXNpemVvZihMaXN0ZW5lckVudHJ5 KSAqIChlbnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkpOworCisJCQkJCQkvKiBSZW1vdmUgZnJv bSBsb2NhbCBjYWNoZSAqLworCQkJCQkJKHZvaWQpIGhhc2hfc2VhcmNoKGxpc3RlbkNoYW5u ZWxzSGFzaCwgcGVuZGluZy0+Y2hhbm5lbCwKKwkJCQkJCQkJCQkgICBIQVNIX1JFTU9WRSwg TlVMTCk7CisKKwkJCQkJCWlmIChlbnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQkJCQl7 CisJCQkJCQkJZHNhX2ZyZWUoY2hhbm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsK KwkJCQkJCQlkc2hhc2hfZGVsZXRlX2VudHJ5KGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQkJ CQkJZW50cnkgPSBOVUxMOworCQkJCQkJfQorCQkJCQl9CiAJCQkJCWJyZWFrOworCQkJCX0K IAkJCX0KKworCQkJaWYgKGVudHJ5ICE9IE5VTEwpCisJCQkJZHNoYXNoX3JlbGVhc2VfbG9j ayhjaGFubmVsSGFzaCwgZW50cnkpOwogCQl9CiAJfQogCiAJLyogSWYgbm8gbG9uZ2VyIGxp c3RlbmluZyB0byBhbnl0aGluZywgZ2V0IG91dCBvZiBsaXN0ZW5lciBhcnJheSAqLwotCWlm IChhbVJlZ2lzdGVyZWRMaXN0ZW5lciAmJiBsaXN0ZW5DaGFubmVscyA9PSBOSUwpCisJaWYg KGFtUmVnaXN0ZXJlZExpc3RlbmVyICYmCisJCShsaXN0ZW5DaGFubmVsc0hhc2ggPT0gTlVM TCB8fCBoYXNoX2dldF9udW1fZW50cmllcyhsaXN0ZW5DaGFubmVsc0hhc2gpID09IDApKQog CQlhc3luY1F1ZXVlVW5yZWdpc3RlcigpOwogCiAJLyoKQEAgLTEwOTgsNiArMTQ2MSw5IEBA IEV4ZWNfTGlzdGVuUHJlQ29tbWl0KHZvaWQpCiAJUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9j TnVtYmVyKSA9IG1heDsKIAlRVUVVRV9CQUNLRU5EX1BJRChNeVByb2NOdW1iZXIpID0gTXlQ cm9jUGlkOwogCVFVRVVFX0JBQ0tFTkRfREJPSUQoTXlQcm9jTnVtYmVyKSA9IE15RGF0YWJh c2VJZDsKKwlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKE15UHJvY051bWJlcikgPSBm YWxzZTsKKwlRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhNeVByb2NOdW1iZXIpID0gZmFs c2U7CisJUVVFVUVfQkFDS0VORF9BRFZBTkNJTkdfUE9TKE15UHJvY051bWJlcikgPSBtYXg7 CiAJLyogSW5zZXJ0IGJhY2tlbmQgaW50byBsaXN0IG9mIGxpc3RlbmVycyBhdCBjb3JyZWN0 IHBvc2l0aW9uICovCiAJaWYgKHByZXZMaXN0ZW5lciAhPSBJTlZBTElEX1BST0NfTlVNQkVS KQogCXsKQEAgLTExMjcsOTkgKzE0OTMsMjIwIEBAIEV4ZWNfTGlzdGVuUHJlQ29tbWl0KHZv aWQpCiB9CiAKIC8qCi0gKiBFeGVjX0xpc3RlbkNvbW1pdCAtLS0gc3Vicm91dGluZSBmb3Ig QXRDb21taXRfTm90aWZ5CisgKiBFeGVjX0xpc3RlblByZUNvbW1pdFN0YWdlIC0tLSBzdWJy b3V0aW5lIGZvciBQcmVDb21taXRfTm90aWZ5CiAgKgotICogQWRkIHRoZSBjaGFubmVsIHRv IHRoZSBsaXN0IG9mIGNoYW5uZWxzIHdlIGFyZSBsaXN0ZW5pbmcgb24uCisgKiBTdGFnZSBh IExJU1RFTiBieSByZWNvcmRpbmcgaXQgaW4gcGVuZGluZ0xpc3RlbkNoYW5uZWxzLCBwcmUt YWxsb2NhdGluZworICogYW4gZW50cnkgaW4gbGlzdGVuQ2hhbm5lbHNIYXNoLCBhbmQgcHJl LWFsbG9jYXRpbmcgYW4gZW50cnkgaW4gdGhlIHNoYXJlZAorICogY2hhbm5lbEhhc2ggd2l0 aCBsaXN0ZW5pbmc9ZmFsc2UuICBUaGUgbGlzdGVuaW5nIGZsYWcgaXMgc2V0IHRvIHRydWUg aW4KKyAqIEF0Q29tbWl0X05vdGlmeS4gIE9uIGFib3J0LCB0aGUgcHJlLWFsbG9jYXRlZCBl bnRyaWVzIGFyZSByZW1vdmVkLgogICovCiBzdGF0aWMgdm9pZAotRXhlY19MaXN0ZW5Db21t aXQoY29uc3QgY2hhciAqY2hhbm5lbCkKK0V4ZWNfTGlzdGVuUHJlQ29tbWl0U3RhZ2UoY29u c3QgY2hhciAqY2hhbm5lbCkKIHsKLQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJQ2hh bm5lbEhhc2hLZXkga2V5OworCUNoYW5uZWxMaXN0ZW5lcnMgKmVudHJ5OworCWJvb2wJCWZv dW5kOworCUxpc3RlbmVyRW50cnkgKmxpc3RlbmVyczsKKwlzdHJ1Y3QgUGVuZGluZ0xpc3Rl bkVudHJ5ICpwZW5kaW5nOwogCi0JLyogRG8gbm90aGluZyBpZiB3ZSBhcmUgYWxyZWFkeSBs aXN0ZW5pbmcgb24gdGhpcyBjaGFubmVsICovCi0JaWYgKElzTGlzdGVuaW5nT24oY2hhbm5l bCkpCisJLyogUmVjb3JkIGluIGxvY2FsIHBlbmRpbmcgaGFzaCB0aGF0IHdlIHdhbnQgdG8g TElTVEVOICovCisJcGVuZGluZyA9IChzdHJ1Y3QgUGVuZGluZ0xpc3RlbkVudHJ5ICopCisJ CWhhc2hfc2VhcmNoKHBlbmRpbmdMaXN0ZW5DaGFubmVscywgY2hhbm5lbCwgSEFTSF9FTlRF UiwgJmZvdW5kKTsKKwlwZW5kaW5nLT5saXN0ZW5pbmcgPSB0cnVlOworCisJLyogUHJlLWFs bG9jYXRlIGluIGxvY2FsIGNhY2hlIChPT00tc2FmZTogYmVmb3JlIGNsb2cgY29tbWl0KSAq LworCSh2b2lkKSBoYXNoX3NlYXJjaChsaXN0ZW5DaGFubmVsc0hhc2gsIGNoYW5uZWwsIEhB U0hfRU5URVIsIE5VTEwpOworCisJLyogUHJlLWFsbG9jYXRlIGVudHJ5IGluIHNoYXJlZCBj aGFubmVsSGFzaCB3aXRoIGxpc3RlbmluZz1mYWxzZSAqLworCUNoYW5uZWxIYXNoUHJlcGFy ZUtleSgma2V5LCBNeURhdGFiYXNlSWQsIGNoYW5uZWwpOworCWVudHJ5ID0gZHNoYXNoX2Zp bmRfb3JfaW5zZXJ0KGNoYW5uZWxIYXNoLCAma2V5LCAmZm91bmQpOworCisJaWYgKCFmb3Vu ZCkKKwl7CisJCWVudHJ5LT5saXN0ZW5lcnNBcnJheSA9IEludmFsaWREc2FQb2ludGVyOwor CQllbnRyeS0+bnVtTGlzdGVuZXJzID0gMDsKKwkJZW50cnktPmFsbG9jYXRlZExpc3RlbmVy cyA9IDA7CisJfQorCisJaWYgKCFEc2FQb2ludGVySXNWYWxpZChlbnRyeS0+bGlzdGVuZXJz QXJyYXkpKQorCXsKKwkJZW50cnktPmxpc3RlbmVyc0FycmF5ID0gZHNhX2FsbG9jYXRlKGNo YW5uZWxEU0EsCisJCQkJCQkJCQkJCSBzaXplb2YoTGlzdGVuZXJFbnRyeSkgKiBJTklUSUFM X0xJU1RFTkVSU19BUlJBWV9TSVpFKTsKKwkJZW50cnktPmFsbG9jYXRlZExpc3RlbmVycyA9 IElOSVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkU7CisJfQorCisJbGlzdGVuZXJzID0gKExp c3RlbmVyRW50cnkgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0 ZW5lcnNBcnJheSk7CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBl bnRyeSAocG9zc2libHkgZnJvbSBlYXJsaWVyIGluIHRoaXMKKwkgKiB0cmFuc2FjdGlvbikK KwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkrKykK Kwl7CisJCWlmIChsaXN0ZW5lcnNbaV0ucHJvY05vID09IE15UHJvY051bWJlcikKKwkJewor CQkJLyogQWxyZWFkeSBoYXZlIGFuIGVudHJ5OyBsaXN0ZW5pbmcgZmxhZyBzdGF5cyBhcy1p cyB1bnRpbCBjb21taXQgKi8KKwkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gs IGVudHJ5KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIE5lZWQgdG8gYWRkIGEgbmV3 IGVudHJ5OyBncm93IGFycmF5IGlmIG5lY2Vzc2FyeSAqLworCWlmIChlbnRyeS0+bnVtTGlz dGVuZXJzID49IGVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMpCisJeworCQlpbnQJCQluZXdf c2l6ZSA9IGVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgKiAyOworCQlkc2FfcG9pbnRlciBu ZXdfYXJyYXkgPSBkc2FfYWxsb2NhdGUoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJIHNpemVv ZihMaXN0ZW5lckVudHJ5KSAqIG5ld19zaXplKTsKKwkJTGlzdGVuZXJFbnRyeSAqbmV3X2xp c3RlbmVycyA9IChMaXN0ZW5lckVudHJ5ICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNB LCBuZXdfYXJyYXkpOworCisJCW1lbWNweShuZXdfbGlzdGVuZXJzLCBsaXN0ZW5lcnMsIHNp emVvZihMaXN0ZW5lckVudHJ5KSAqIGVudHJ5LT5udW1MaXN0ZW5lcnMpOworCQlkc2FfZnJl ZShjaGFubmVsRFNBLCBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCQllbnRyeS0+bGlzdGVu ZXJzQXJyYXkgPSBuZXdfYXJyYXk7CisJCWVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgPSBu ZXdfc2l6ZTsKKwkJbGlzdGVuZXJzID0gbmV3X2xpc3RlbmVyczsKKwl9CisKKwlsaXN0ZW5l cnNbZW50cnktPm51bUxpc3RlbmVyc10ucHJvY05vID0gTXlQcm9jTnVtYmVyOworCWxpc3Rl bmVyc1tlbnRyeS0+bnVtTGlzdGVuZXJzXS5saXN0ZW5pbmcgPSBmYWxzZTsJLyogc3RhZ2Vk LCBub3QgeWV0CisJCQkJCQkJCQkJCQkJCSAqIGNvbW1pdHRlZCAqLworCWVudHJ5LT5udW1M aXN0ZW5lcnMrKzsKKworCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5 KTsKK30KKworLyoKKyAqIEV4ZWNfVW5saXN0ZW5QcmVDb21taXRTdGFnZSAtLS0gc3Vicm91 dGluZSBmb3IgUHJlQ29tbWl0X05vdGlmeQorICoKKyAqIFN0YWdlIGFuIFVOTElTVEVOIGJ5 IHJlY29yZGluZyBpdCBpbiBwZW5kaW5nTGlzdGVuQ2hhbm5lbHMuICBXZSBkb24ndAorICog dG91Y2ggY2hhbm5lbEhhc2ggeWV0IC0gdGhlIGxpc3RlbmVyIGtlZXBzIHJlY2VpdmluZyBz aWduYWxzIHVudGlsCisgKiBjb21taXQsIHdoZW4gdGhlIGVudHJ5IGlzIHJlbW92ZWQuCisg Ki8KK3N0YXRpYyB2b2lkCitFeGVjX1VubGlzdGVuUHJlQ29tbWl0U3RhZ2UoY29uc3QgY2hh ciAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgUGVuZGluZ0xpc3RlbkVudHJ5ICpwZW5kaW5nOwor CWJvb2wJCWZvdW5kOworCisJLyoKKwkgKiBSZWNvcmQgaW4gbG9jYWwgcGVuZGluZyBoYXNo IHRoYXQgd2Ugd2FudCB0byBVTkxJU1RFTi4gRG9uJ3QgdG91Y2gKKwkgKiBsaXN0ZW5DaGFu bmVsc0hhc2ggb3IgY2hhbm5lbEhhc2ggeWV0IC0gd2Uga2VlcCByZWNlaXZpbmcgc2lnbmFs cyB1bnRpbAorCSAqIGNvbW1pdC4KKwkgKi8KKwlwZW5kaW5nID0gKHN0cnVjdCBQZW5kaW5n TGlzdGVuRW50cnkgKikKKwkJaGFzaF9zZWFyY2gocGVuZGluZ0xpc3RlbkNoYW5uZWxzLCBj aGFubmVsLCBIQVNIX0VOVEVSLCAmZm91bmQpOworCXBlbmRpbmctPmxpc3RlbmluZyA9IGZh bHNlOworfQorCisvKgorICogRXhlY19Vbmxpc3RlbkFsbFByZUNvbW1pdFN0YWdlIC0tLSBz dWJyb3V0aW5lIGZvciBQcmVDb21taXRfTm90aWZ5CisgKgorICogU3RhZ2UgVU5MSVNURU4g KiBieSByZWNvcmRpbmcgYWxsIGxpc3RlbmVkIGNoYW5uZWxzIGluIHBlbmRpbmdMaXN0ZW5D aGFubmVscworICogd2l0aCBsaXN0ZW5pbmc9ZmFsc2UuCisgKi8KK3N0YXRpYyB2b2lkCitF eGVjX1VubGlzdGVuQWxsUHJlQ29tbWl0U3RhZ2Uodm9pZCkKK3sKKwlIQVNIX1NFUV9TVEFU VVMgc2VxOworCXN0cnVjdCBDaGFubmVsTmFtZSAqY2hhbm5lbEVudHJ5OworCXN0cnVjdCBQ ZW5kaW5nTGlzdGVuRW50cnkgKnBlbmRpbmc7CisKKwkvKgorCSAqIEZpcnN0LCBzZXQgYWxs IGV4aXN0aW5nIGVudHJpZXMgaW4gcGVuZGluZ0xpc3RlbkNoYW5uZWxzIHRvIGZhbHNlLiBU aGlzCisJICogaGFuZGxlcyB0aGUgY2FzZSBvZiBMSVNURU4gZm9vOyBVTkxJU1RFTiBBTEwg LSBmb28gbmVlZHMgdG8gYmUgbWFya2VkCisJICogYXMgdW5saXN0ZW4gZXZlbiB0aG91Z2gg aXQncyBub3QgaW4gbGlzdGVuQ2hhbm5lbHNIYXNoIHlldC4KKwkgKi8KKwloYXNoX3NlcV9p bml0KCZzZXEsIHBlbmRpbmdMaXN0ZW5DaGFubmVscyk7CisJd2hpbGUgKChwZW5kaW5nID0g KHN0cnVjdCBQZW5kaW5nTGlzdGVuRW50cnkgKikgaGFzaF9zZXFfc2VhcmNoKCZzZXEpKSAh PSBOVUxMKQorCQlwZW5kaW5nLT5saXN0ZW5pbmcgPSBmYWxzZTsKKworCS8qCisJICogVGhl biBzY2FuIGxpc3RlbkNoYW5uZWxzSGFzaCAoY29tbWl0dGVkIGNoYW5uZWxzKSBhbmQgYWRk IGFueSB0aGF0CisJICogYXJlbid0IGFscmVhZHkgaW4gcGVuZGluZ0xpc3RlbkNoYW5uZWxz LgorCSAqLworCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggIT0gTlVMTCkKKwl7CisJCWhhc2hf c2VxX2luaXQoJnNlcSwgbGlzdGVuQ2hhbm5lbHNIYXNoKTsKKwkJd2hpbGUgKChjaGFubmVs RW50cnkgPSAoc3RydWN0IENoYW5uZWxOYW1lICopIGhhc2hfc2VxX3NlYXJjaCgmc2VxKSkg IT0gTlVMTCkKKwkJeworCQkJYm9vbAkJZm91bmQ7CisKKwkJCXBlbmRpbmcgPSAoc3RydWN0 IFBlbmRpbmdMaXN0ZW5FbnRyeSAqKQorCQkJCWhhc2hfc2VhcmNoKHBlbmRpbmdMaXN0ZW5D aGFubmVscywgY2hhbm5lbEVudHJ5LT5jaGFubmVsLCBIQVNIX0VOVEVSLCAmZm91bmQpOwor CQkJcGVuZGluZy0+bGlzdGVuaW5nID0gZmFsc2U7CisJCX0KKwl9Cit9CisKKy8qCisgKiBD bGVhbnVwTGlzdGVuZXJzT25FeGl0IC0tLSBjYWxsZWQgZnJvbSBBc3luY19Vbmxpc3Rlbk9u RXhpdAorICoKKyAqCQlSZW1vdmUgdGhpcyBiYWNrZW5kIGZyb20gYWxsIGNoYW5uZWxzIGlu IHRoZSBzaGFyZWQgaGFzaC4KKyAqLworc3RhdGljIHZvaWQKK0NsZWFudXBMaXN0ZW5lcnNP bkV4aXQodm9pZCkKK3sKKwlkc2hhc2hfc2VxX3N0YXR1cyBzdGF0dXM7CisJQ2hhbm5lbExp c3RlbmVycyAqZW50cnk7CisKKwlpZiAoVHJhY2Vfbm90aWZ5KQorCQllbG9nKERFQlVHMSwg IkNsZWFudXBMaXN0ZW5lcnNPbkV4aXQoJWQpIiwgTXlQcm9jUGlkKTsKKworCS8qIENsZWFy IG91ciBsb2NhbCBjYWNoZSAqLworCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggIT0gTlVMTCkK Kwl7CisJCWhhc2hfZGVzdHJveShsaXN0ZW5DaGFubmVsc0hhc2gpOworCQlsaXN0ZW5DaGFu bmVsc0hhc2ggPSBOVUxMOworCX0KKworCS8qIE5vdyByZW1vdmUgZnJvbSB0aGUgc2hhcmVk IGNoYW5uZWxIYXNoICovCisJaWYgKGNoYW5uZWxIYXNoID09IE5VTEwpCiAJCXJldHVybjsK IAotCS8qCi0JICogQWRkIHRoZSBuZXcgY2hhbm5lbCBuYW1lIHRvIGxpc3RlbkNoYW5uZWxz LgotCSAqCi0JICogWFhYIEl0IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdG8gZ2V0IGFu IG91dC1vZi1tZW1vcnkgZmFpbHVyZSBoZXJlLAotCSAqIHdoaWNoIHdvdWxkIGJlIGJhZCBi ZWNhdXNlIHdlIGFscmVhZHkgY29tbWl0dGVkLiAgRm9yIHRoZSBtb21lbnQgaXQKLQkgKiBk b2Vzbid0IHNlZW0gd29ydGggdHJ5aW5nIHRvIGd1YXJkIGFnYWluc3QgdGhhdCwgYnV0IG1h eWJlIGltcHJvdmUgdGhpcwotCSAqIGxhdGVyLgotCSAqLwotCW9sZGNvbnRleHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7Ci0JbGlzdGVuQ2hhbm5lbHMg PSBsYXBwZW5kKGxpc3RlbkNoYW5uZWxzLCBwc3RyZHVwKGNoYW5uZWwpKTsKLQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Ci19Ci0KLS8qCi0gKiBFeGVjX1VubGlzdGVu Q29tbWl0IC0tLSBzdWJyb3V0aW5lIGZvciBBdENvbW1pdF9Ob3RpZnkKLSAqCi0gKiBSZW1v dmUgdGhlIHNwZWNpZmllZCBjaGFubmVsIG5hbWUgZnJvbSBsaXN0ZW5DaGFubmVscy4KLSAq Lwotc3RhdGljIHZvaWQKLUV4ZWNfVW5saXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hhbm5l bCkKLXsKLQlMaXN0Q2VsbCAgICpxOwotCi0JaWYgKFRyYWNlX25vdGlmeSkKLQkJZWxvZyhE RUJVRzEsICJFeGVjX1VubGlzdGVuQ29tbWl0KCVzLCVkKSIsIGNoYW5uZWwsIE15UHJvY1Bp ZCk7Ci0KLQlmb3JlYWNoKHEsIGxpc3RlbkNoYW5uZWxzKQorCWRzaGFzaF9zZXFfaW5pdCgm c3RhdHVzLCBjaGFubmVsSGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9z ZXFfbmV4dCgmc3RhdHVzKSkgIT0gTlVMTCkKIAl7Ci0JCWNoYXIJICAgKmxjaGFuID0gKGNo YXIgKikgbGZpcnN0KHEpOwotCi0JCWlmIChzdHJjbXAobGNoYW4sIGNoYW5uZWwpID09IDAp CisJCWlmIChlbnRyeS0+a2V5LmRib2lkID09IE15RGF0YWJhc2VJZCkKIAkJewotCQkJbGlz dGVuQ2hhbm5lbHMgPSBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50KGxpc3RlbkNoYW5uZWxzLCBx KTsKLQkJCXBmcmVlKGxjaGFuKTsKLQkJCWJyZWFrOworCQkJTGlzdGVuZXJFbnRyeSAqbGlz dGVuZXJzOworCQkJaW50CQkJaTsKKworCQkJbGlzdGVuZXJzID0gKExpc3RlbmVyRW50cnkg KikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCQkJCSAgZW50cnkt Pmxpc3RlbmVyc0FycmF5KTsKKworCQkJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0 ZW5lcnM7IGkrKykKKwkJCXsKKwkJCQlpZiAobGlzdGVuZXJzW2ldLnByb2NObyA9PSBNeVBy b2NOdW1iZXIpCisJCQkJeworCQkJCQllbnRyeS0+bnVtTGlzdGVuZXJzLS07CisJCQkJCWlm IChpIDwgZW50cnktPm51bUxpc3RlbmVycykKKwkJCQkJCW1lbW1vdmUoJmxpc3RlbmVyc1tp XSwgJmxpc3RlbmVyc1tpICsgMV0sCisJCQkJCQkJCXNpemVvZihMaXN0ZW5lckVudHJ5KSAq IChlbnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkpOworCisJCQkJCWlmIChlbnRyeS0+bnVtTGlz dGVuZXJzID09IDApCisJCQkJCXsKKwkJCQkJCWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVudHJ5 LT5saXN0ZW5lcnNBcnJheSk7CisJCQkJCQlkc2hhc2hfZGVsZXRlX2N1cnJlbnQoJnN0YXR1 cyk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQogCQl9CiAJfQotCi0JLyoK LQkgKiBXZSBkbyBub3QgY29tcGxhaW4gYWJvdXQgdW5saXN0ZW5pbmcgc29tZXRoaW5nIG5v dCBiZWluZyBsaXN0ZW5lZDsKLQkgKiBzaG91bGQgd2U/Ci0JICovCi19Ci0KLS8qCi0gKiBF eGVjX1VubGlzdGVuQWxsQ29tbWl0IC0tLSBzdWJyb3V0aW5lIGZvciBBdENvbW1pdF9Ob3Rp ZnkKLSAqCi0gKgkJVW5saXN0ZW4gb24gYWxsIGNoYW5uZWxzIGZvciB0aGlzIGJhY2tlbmQu Ci0gKi8KLXN0YXRpYyB2b2lkCi1FeGVjX1VubGlzdGVuQWxsQ29tbWl0KHZvaWQpCi17Ci0J aWYgKFRyYWNlX25vdGlmeSkKLQkJZWxvZyhERUJVRzEsICJFeGVjX1VubGlzdGVuQWxsQ29t bWl0KCVkKSIsIE15UHJvY1BpZCk7Ci0KLQlsaXN0X2ZyZWVfZGVlcChsaXN0ZW5DaGFubmVs cyk7Ci0JbGlzdGVuQ2hhbm5lbHMgPSBOSUw7CisJZHNoYXNoX3NlcV90ZXJtKCZzdGF0dXMp OwogfQogCiAvKgogICogVGVzdCB3aGV0aGVyIHdlIGFyZSBhY3RpdmVseSBsaXN0ZW5pbmcg b24gdGhlIGdpdmVuIGNoYW5uZWwgbmFtZS4KICAqCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9u IGlzIGV4ZWN1dGVkIGZvciBldmVyeSBub3RpZmljYXRpb24gZm91bmQgaW4gdGhlIHF1ZXVl LgotICogUGVyaGFwcyBpdCBpcyB3b3J0aCBmdXJ0aGVyIG9wdGltaXphdGlvbiwgZWcgY29u dmVydCB0aGUgbGlzdCB0byBhIHNvcnRlZAotICogYXJyYXkgc28gd2UgY2FuIGJpbmFyeS1z ZWFyY2ggaXQuICBJbiBwcmFjdGljZSB0aGUgbGlzdCBpcyBsaWtlbHkgdG8gYmUKLSAqIGZh aXJseSBzaG9ydCwgdGhvdWdoLgogICovCiBzdGF0aWMgYm9vbAogSXNMaXN0ZW5pbmdPbihj b25zdCBjaGFyICpjaGFubmVsKQogewotCUxpc3RDZWxsICAgKnA7CisJaWYgKGxpc3RlbkNo YW5uZWxzSGFzaCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CiAKLQlmb3JlYWNoKHAsIGxp c3RlbkNoYW5uZWxzKQotCXsKLQkJY2hhcgkgICAqbGNoYW4gPSAoY2hhciAqKSBsZmlyc3Qo cCk7Ci0KLQkJaWYgKHN0cmNtcChsY2hhbiwgY2hhbm5lbCkgPT0gMCkKLQkJCXJldHVybiB0 cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIChoYXNoX3NlYXJjaChsaXN0ZW5D aGFubmVsc0hhc2gsIGNoYW5uZWwsIEhBU0hfRklORCwgTlVMTCkgIT0gTlVMTCk7CiB9CiAK IC8qCkBAIC0xMjI5LDcgKzE3MTYsNyBAQCBJc0xpc3RlbmluZ09uKGNvbnN0IGNoYXIgKmNo YW5uZWwpCiBzdGF0aWMgdm9pZAogYXN5bmNRdWV1ZVVucmVnaXN0ZXIodm9pZCkKIHsKLQlB c3NlcnQobGlzdGVuQ2hhbm5lbHMgPT0gTklMKTsJLyogZWxzZSBjYWxsZXIgZXJyb3IgKi8K KwlBc3NlcnQobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9nZXRfbnVtX2Vu dHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKTsJLyogZWxzZSBjYWxsZXIgZXJyb3Ig Ki8KIAogCWlmICghYW1SZWdpc3RlcmVkTGlzdGVuZXIpCS8qIG5vdGhpbmcgdG8gZG8gKi8K IAkJcmV0dXJuOwpAQCAtMTI0MSw2ICsxNzI4LDkgQEAgYXN5bmNRdWV1ZVVucmVnaXN0ZXIo dm9pZCkKIAkvKiBNYXJrIG91ciBlbnRyeSBhcyBpbnZhbGlkICovCiAJUVVFVUVfQkFDS0VO RF9QSUQoTXlQcm9jTnVtYmVyKSA9IEludmFsaWRQaWQ7CiAJUVVFVUVfQkFDS0VORF9EQk9J RChNeVByb2NOdW1iZXIpID0gSW52YWxpZE9pZDsKKwlRVUVVRV9CQUNLRU5EX1dBS0VVUF9Q RU5ESU5HKE15UHJvY051bWJlcikgPSBmYWxzZTsKKwlRVUVVRV9CQUNLRU5EX0lTX0FEVkFO Q0lORyhNeVByb2NOdW1iZXIpID0gZmFsc2U7CisJU0VUX1FVRVVFX1BPUyhRVUVVRV9CQUNL RU5EX0FEVkFOQ0lOR19QT1MoTXlQcm9jTnVtYmVyKSwgMCwgMCk7CiAJLyogYW5kIHJlbW92 ZSBpdCBmcm9tIHRoZSBsaXN0ICovCiAJaWYgKFFVRVVFX0ZJUlNUX0xJU1RFTkVSID09IE15 UHJvY051bWJlcikKIAkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBRVUVVRV9ORVhUX0xJU1RF TkVSKE15UHJvY051bWJlcik7CkBAIC0xNTY1LDEyICsyMDU1LDIxIEBAIGFzeW5jUXVldWVG aWxsV2FybmluZyh2b2lkKQogLyoKICAqIFNlbmQgc2lnbmFscyB0byBsaXN0ZW5pbmcgYmFj a2VuZHMuCiAgKgotICogTm9ybWFsbHkgd2Ugc2lnbmFsIG9ubHkgYmFja2VuZHMgaW4gb3Vy IG93biBkYXRhYmFzZSwgc2luY2Ugb25seSB0aG9zZQotICogYmFja2VuZHMgY291bGQgYmUg aW50ZXJlc3RlZCBpbiBub3RpZmllcyB3ZSBzZW5kLiAgSG93ZXZlciwgaWYgdGhlcmUncwot ICogbm90aWZ5IHRyYWZmaWMgaW4gb3VyIGRhdGFiYXNlIGJ1dCBubyB0cmFmZmljIGluIGFu b3RoZXIgZGF0YWJhc2UgdGhhdAotICogZG9lcyBoYXZlIGxpc3RlbmVyKHMpLCB0aG9zZSBs aXN0ZW5lcnMgd2lsbCBmYWxsIGZ1cnRoZXIgYW5kIGZ1cnRoZXIKLSAqIGJlaGluZC4gIFdh a2VuIHRoZW0gYW55d2F5IGlmIHRoZXkncmUgZmFyIGVub3VnaCBiZWhpbmQsIHNvIHRoYXQg dGhleSdsbAotICogYWR2YW5jZSB0aGVpciBxdWV1ZSBwb3NpdGlvbiBwb2ludGVycywgYWxs b3dpbmcgdGhlIGdsb2JhbCB0YWlsIHRvIGFkdmFuY2UuCisgKiBOb3JtYWxseSB3ZSBzaWdu YWwgb25seSBiYWNrZW5kcyBpbiBvdXIgb3duIGRhdGFiYXNlLCB0aGF0IGFyZQorICogbGlz dGVuaW5nIG9uIHRoZSBjaGFubmVscyB3aXRoIHBlbmRpbmcgbm90aWZpZXMsIHNpbmNlIG9u bHkgdGhvc2UKKyAqIGJhY2tlbmRzIGFyZSBpbnRlcmVzdGVkIGluIG5vdGlmaWVzIHdlIHNl bmQuCisgKgorICogQmFja2VuZHMgdGhhdCBhcmUgbm90IGludGVyZXN0ZWQgaW4gb3VyIG5v dGlmaWVzLCB0aGF0IGFyZSBrbm93bgorICogdG8gc3RpbGwgYmUgcG9zaXRpb25lZCBhdCB0 aGUgb2xkIHF1ZXVlIGhlYWQsIG9yIGFueXdoZXJlIGluIHRoZQorICogcXVldWUgcmVnaW9u IHdlIGp1c3Qgd3JvdGUsIGNhbiBiZSBzYWZlbHkgYWR2YW5jZWQgZGlyZWN0bHkgdG8gdGhl CisgKiBuZXcgaGVhZCwgc2luY2UgdGhhdCByZWdpb24gaXMga25vd24gdG8gY29udGFpbiBv bmx5IG91ciBvd24KKyAqIG5vdGlmaWNhdGlvbnMuICBUaGlzIGF2b2lkcyB1bm5lY2Vzc2Fy eSB3YWtldXBzIHdoZW4gdGhlcmUgaXMKKyAqIG5vdGhpbmcgb2YgaW50ZXJlc3QgdG8gdGhl bS4KKyAqCisgKiBCYWNrZW5kcyB0aGF0IGFyZSBub3QgaW50ZXJlc3RlZCBpbiBvdXIgbm90 aWZpZXMsIHRoYXQgYXJlIGFkdmFuY2luZworICogdG8gYSB0YXJnZXQgcG9zaXRpb24gYmVm b3JlIHRoZSBuZXcgcXVldWUgaGVhZCwgb3IgdGhhdCBhcmUgbm90CisgKiBhZHZhbmNpbmcg YW5kIGFyZSBzdGF0aW9uYXJ5IGF0IGEgcG9zaXRpb24gYmVmb3JlIHRoZSBvbGQgcXVldWUg aGVhZAorICogbmVlZHMgdG8gYmUgc2lnbmFsZWQgc2luY2Ugbm90aWZpY2F0aW9ucyBjb3Vs ZCBvdGhlcndpc2UgYmUgZGVsYXllZC4KICAqCiAgKiBTaW5jZSB3ZSBrbm93IHRoZSBQcm9j TnVtYmVyIGFuZCB0aGUgUGlkIHRoZSBzaWduYWxpbmcgaXMgcXVpdGUgY2hlYXAuCiAgKgpA QCAtMTU4MCw2MCArMjA3OSwxMDYgQEAgYXN5bmNRdWV1ZUZpbGxXYXJuaW5nKHZvaWQpCiBz dGF0aWMgdm9pZAogU2lnbmFsQmFja2VuZHModm9pZCkKIHsKLQlpbnQzMgkgICAqcGlkczsK LQlQcm9jTnVtYmVyICpwcm9jbm9zOwogCWludAkJCWNvdW50OworCUxpc3RDZWxsICAgKmxj OwogCi0JLyoKLQkgKiBJZGVudGlmeSBiYWNrZW5kcyB0aGF0IHdlIG5lZWQgdG8gc2lnbmFs LiAgV2UgZG9uJ3Qgd2FudCB0byBzZW5kCi0JICogc2lnbmFscyB3aGlsZSBob2xkaW5nIHRo ZSBOb3RpZnlRdWV1ZUxvY2ssIHNvIHRoaXMgbG9vcCBqdXN0IGJ1aWxkcyBhCi0JICogbGlz dCBvZiB0YXJnZXQgUElEcy4KLQkgKgotCSAqIFhYWCBpbiBwcmluY2lwbGUgdGhlc2UgcGFs bG9jcyBjb3VsZCBmYWlsLCB3aGljaCB3b3VsZCBiZSBiYWQuIE1heWJlCi0JICogcHJlYWxs b2NhdGUgdGhlIGFycmF5cz8gIFRoZXkncmUgbm90IHRoYXQgbGFyZ2UsIHRob3VnaC4KLQkg Ki8KLQlwaWRzID0gKGludDMyICopIHBhbGxvYyhNYXhCYWNrZW5kcyAqIHNpemVvZihpbnQz MikpOwotCXByb2Nub3MgPSAoUHJvY051bWJlciAqKSBwYWxsb2MoTWF4QmFja2VuZHMgKiBz aXplb2YoUHJvY051bWJlcikpOworCUFzc2VydChzaWduYWxQaWRzICE9IE5VTEwgJiYgc2ln bmFsUHJvY25vcyAhPSBOVUxMKTsKIAljb3VudCA9IDA7CiAKIAlMV0xvY2tBY3F1aXJlKE5v dGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKLQlmb3IgKFByb2NOdW1iZXIgaSA9IFFV RVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVV RV9ORVhUX0xJU1RFTkVSKGkpKQorCWZvcmVhY2gobGMsIHBlbmRpbmdOb3RpZnlDaGFubmVs cykKIAl7Ci0JCWludDMyCQlwaWQgPSBRVUVVRV9CQUNLRU5EX1BJRChpKTsKLQkJUXVldWVQ b3NpdGlvbiBwb3M7CisJCWNoYXIJICAgKmNoYW5uZWwgPSAoY2hhciAqKSBsZmlyc3QobGMp OworCQlDaGFubmVsTGlzdGVuZXJzICplbnRyeSA9IE5VTEw7CisJCUxpc3RlbmVyRW50cnkg Kmxpc3RlbmVyczsKIAotCQlBc3NlcnQocGlkICE9IEludmFsaWRQaWQpOwotCQlwb3MgPSBR VUVVRV9CQUNLRU5EX1BPUyhpKTsKLQkJaWYgKFFVRVVFX0JBQ0tFTkRfREJPSUQoaSkgPT0g TXlEYXRhYmFzZUlkKQorCQlpZiAoY2hhbm5lbEhhc2ggIT0gTlVMTCkKIAkJewotCQkJLyoK LQkJCSAqIEFsd2F5cyBzaWduYWwgbGlzdGVuZXJzIGluIG91ciBvd24gZGF0YWJhc2UsIHVu bGVzcyB0aGV5J3JlCi0JCQkgKiBhbHJlYWR5IGNhdWdodCB1cCAodW5saWtlbHksIGJ1dCBw b3NzaWJsZSkuCi0JCQkgKi8KKwkJCUNoYW5uZWxIYXNoS2V5IGtleTsKKworCQkJQ2hhbm5l bEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisJCQllbnRy eSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5LCBmYWxzZSk7CisJCX0KKworCQlp ZiAoZW50cnkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RlbmVycyA9IChMaXN0 ZW5lckVudHJ5ICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkJ CSAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IGVu dHJ5LT5udW1MaXN0ZW5lcnM7IGorKykKKwkJeworCQkJUHJvY051bWJlcglpOworCQkJaW50 MzIJCXBpZDsKKwkJCVF1ZXVlUG9zaXRpb24gcG9zOworCisJCQlpZiAoIWxpc3RlbmVyc1tq XS5saXN0ZW5pbmcpCisJCQkJY29udGludWU7CisKKwkJCWkgPSBsaXN0ZW5lcnNbal0ucHJv Y05vOworCisJCQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSkKKwkJCQlj b250aW51ZTsKKworCQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CisJCQlwaWQgPSBR VUVVRV9CQUNLRU5EX1BJRChpKTsKKworCQkJLyogU2tpcCBpZiBjYXVnaHQgdXAgKi8KIAkJ CWlmIChRVUVVRV9QT1NfRVFVQUwocG9zLCBRVUVVRV9IRUFEKSkKIAkJCQljb250aW51ZTsK KworCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJUVVFVUVfQkFDS0VORF9X QUtFVVBfUEVORElORyhpKSA9IHRydWU7CisJCQlzaWduYWxQaWRzW2NvdW50XSA9IHBpZDsK KwkJCXNpZ25hbFByb2Nub3NbY291bnRdID0gaTsKKwkJCWNvdW50Kys7CiAJCX0KLQkJZWxz ZQorCisJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwl9CisK KwlpZiAocGVuZGluZ05vdGlmaWVzICE9IE5VTEwpCisJeworCQlmb3IgKFByb2NOdW1iZXIg aSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOworCQkJIGkgIT0gSU5WQUxJRF9QUk9DX05VTUJF UjsKKwkJCSBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKIAkJewotCQkJLyoKLQkJCSAq IExpc3RlbmVycyBpbiBvdGhlciBkYXRhYmFzZXMgc2hvdWxkIGJlIHNpZ25hbGVkIG9ubHkg aWYgdGhleQotCQkJICogYXJlIGZhciBiZWhpbmQuCi0JCQkgKi8KLQkJCWlmIChhc3luY1F1 ZXVlUGFnZURpZmYoUVVFVUVfUE9TX1BBR0UoUVVFVUVfSEVBRCksCi0JCQkJCQkJCSAgIFFV RVVFX1BPU19QQUdFKHBvcykpIDwgUVVFVUVfQ0xFQU5VUF9ERUxBWSkKKwkJCVF1ZXVlUG9z aXRpb24gcG9zOworCQkJaW50MzIJCXBpZDsKKworCQkJaWYgKFFVRVVFX0JBQ0tFTkRfV0FL RVVQX1BFTkRJTkcoaSkpCiAJCQkJY29udGludWU7CisKKwkJCXBvcyA9IFFVRVVFX0JBQ0tF TkRfUE9TKGkpOworCQkJcGlkID0gUVVFVUVfQkFDS0VORF9QSUQoaSk7CisKKwkJCWlmIChR VUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhpKSA/CisJCQkJUVVFVUVfUE9TX1BSRUNFREVT KFFVRVVFX0JBQ0tFTkRfQURWQU5DSU5HX1BPUyhpKSwgcXVldWVIZWFkQWZ0ZXJXcml0ZSkg OgorCQkJCVFVRVVFX1BPU19QUkVDRURFUyhwb3MsIHF1ZXVlSGVhZEJlZm9yZVdyaXRlKSkK KwkJCXsKKwkJCQlBc3NlcnQocGlkICE9IEludmFsaWRQaWQpOworCisJCQkJUVVFVUVfQkFD S0VORF9XQUtFVVBfUEVORElORyhpKSA9IHRydWU7CisJCQkJc2lnbmFsUGlkc1tjb3VudF0g PSBwaWQ7CisJCQkJc2lnbmFsUHJvY25vc1tjb3VudF0gPSBpOworCQkJCWNvdW50Kys7CisJ CQl9CisJCQllbHNlIGlmICghUVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoaSkgJiYKKwkJ CQkJIFFVRVVFX1BPU19QUkVDRURFUyhwb3MsIHF1ZXVlSGVhZEFmdGVyV3JpdGUpKQorCQkJ eworCQkJCUFzc2VydCghUVVFVUVfUE9TX1BSRUNFREVTKHBvcywgcXVldWVIZWFkQmVmb3Jl V3JpdGUpKTsKKworCQkJCVFVRVVFX0JBQ0tFTkRfUE9TKGkpID0gcXVldWVIZWFkQWZ0ZXJX cml0ZTsKKwkJCX0KIAkJfQotCQkvKiBPSywgbmVlZCB0byBzaWduYWwgdGhpcyBvbmUgKi8K LQkJcGlkc1tjb3VudF0gPSBwaWQ7Ci0JCXByb2Nub3NbY291bnRdID0gaTsKLQkJY291bnQr KzsKIAl9CiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCiAJLyogTm93IHNl bmQgc2lnbmFscyAqLwogCWZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKIAl7Ci0J CWludDMyCQlwaWQgPSBwaWRzW2ldOworCQlpbnQzMgkJcGlkID0gc2lnbmFsUGlkc1tpXTsK IAogCQkvKgogCQkgKiBJZiB3ZSBhcmUgc2lnbmFsaW5nIG91ciBvd24gcHJvY2Vzcywgbm8g bmVlZCB0byBpbnZvbHZlIHRoZSBrZXJuZWw7CkBAIC0xNjUxLDEyICsyMTk2LDkgQEAgU2ln bmFsQmFja2VuZHModm9pZCkKIAkJICogTm90aWZ5UXVldWVMb2NrOyB3aGljaCBpcyB1bmxp a2VseSBidXQgY2VydGFpbmx5IHBvc3NpYmxlLiBTbyB3ZQogCQkgKiBqdXN0IGxvZyBhIGxv dy1sZXZlbCBkZWJ1ZyBtZXNzYWdlIGlmIGl0IGhhcHBlbnMuCiAJCSAqLwotCQlpZiAoU2Vu ZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQsIHByb2Nub3NbaV0p IDwgMCkKKwkJaWYgKFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19OT1RJRllfSU5URVJS VVBULCBzaWduYWxQcm9jbm9zW2ldKSA8IDApCiAJCQllbG9nKERFQlVHMywgImNvdWxkIG5v dCBzaWduYWwgYmFja2VuZCB3aXRoIFBJRCAlZDogJW0iLCBwaWQpOwogCX0KLQotCXBmcmVl KHBpZHMpOwotCXBmcmVlKHByb2Nub3MpOwogfQogCiAvKgpAQCAtMTY2NCwxOCArMjIwNiw3 NSBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogICoKICAqCVRoaXMgaXMgY2FsbGVkIGF0IHRy YW5zYWN0aW9uIGFib3J0LgogICoKLSAqCUdldHMgcmlkIG9mIHBlbmRpbmcgYWN0aW9ucyBh bmQgb3V0Ym91bmQgbm90aWZpZXMgdGhhdCB3ZSB3b3VsZCBoYXZlCi0gKglleGVjdXRlZCBp ZiB0aGUgdHJhbnNhY3Rpb24gZ290IGNvbW1pdHRlZC4KKyAqCVJldmVydCBhbnkgc3RhZ2Vk IGxpc3Rlbi91bmxpc3RlbiBjaGFuZ2VzIGFuZCBjbGVhbiB1cCB0cmFuc2FjdGlvbiBzdGF0 ZS4KICAqLwogdm9pZAogQXRBYm9ydF9Ob3RpZnkodm9pZCkKIHsKIAkvKgotCSAqIElmIHdl IExJU1RFTiBidXQgdGhlbiByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uIGFmdGVyIFByZUNv bW1pdF9Ob3RpZnksCi0JICogd2UgaGF2ZSByZWdpc3RlcmVkIGFzIGEgbGlzdGVuZXIgYnV0 IGhhdmUgbm90IG1hZGUgYW55IGVudHJ5IGluCi0JICogbGlzdGVuQ2hhbm5lbHMuICBJbiB0 aGF0IGNhc2UsIGRlcmVnaXN0ZXIgYWdhaW4uCisJICogUmV2ZXJ0IHN0YWdlZCBsaXN0ZW4v dW5saXN0ZW4gY2hhbmdlcy4gIEZvciBzdGFnZWQgTElTVEVOcyAoZW50cmllcworCSAqIHdp dGggbGlzdGVuaW5nPWZhbHNlKSwgcmVtb3ZlIGZyb20gY2hhbm5lbEhhc2guICBGb3Igc3Rh Z2VkIFVOTElTVEVOcworCSAqIG9uIGNvbW1pdHRlZCBjaGFubmVscyAoZW50cmllcyB3aXRo IGxpc3RlbmluZz10cnVlKSwgbm90aGluZyB0byB1bmRvCisJICogc2luY2Ugd2UgZGlkbid0 IG1vZGlmeSBjaGFubmVsSGFzaCBkdXJpbmcgc3RhZ2luZy4KIAkgKi8KLQlpZiAoYW1SZWdp c3RlcmVkTGlzdGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0gTklMKQorCWlmIChwZW5kaW5n TGlzdGVuQ2hhbm5lbHMgIT0gTlVMTCAmJiBjaGFubmVsSGFzaCAhPSBOVUxMKQorCXsKKwkJ SEFTSF9TRVFfU1RBVFVTIHNlcTsKKwkJc3RydWN0IFBlbmRpbmdMaXN0ZW5FbnRyeSAqcGVu ZGluZzsKKworCQloYXNoX3NlcV9pbml0KCZzZXEsIHBlbmRpbmdMaXN0ZW5DaGFubmVscyk7 CisJCXdoaWxlICgocGVuZGluZyA9IChzdHJ1Y3QgUGVuZGluZ0xpc3RlbkVudHJ5ICopIGhh c2hfc2VxX3NlYXJjaCgmc2VxKSkgIT0gTlVMTCkKKwkJeworCQkJQ2hhbm5lbEhhc2hLZXkg a2V5OworCQkJQ2hhbm5lbExpc3RlbmVycyAqZW50cnk7CisJCQlMaXN0ZW5lckVudHJ5ICps aXN0ZW5lcnM7CisKKwkJCUNoYW5uZWxIYXNoUHJlcGFyZUtleSgma2V5LCBNeURhdGFiYXNl SWQsIHBlbmRpbmctPmNoYW5uZWwpOworCQkJZW50cnkgPSBkc2hhc2hfZmluZChjaGFubmVs SGFzaCwgJmtleSwgdHJ1ZSk7CisJCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCQljb250aW51 ZTsKKworCQkJbGlzdGVuZXJzID0gKExpc3RlbmVyRW50cnkgKikgZHNhX2dldF9hZGRyZXNz KGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJCWZvciAoaW50IGkg PSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsgaSsrKQorCQkJeworCQkJCWlmIChsaXN0 ZW5lcnNbaV0ucHJvY05vID09IE15UHJvY051bWJlcikKKwkJCQl7CisJCQkJCWlmICghbGlz dGVuZXJzW2ldLmxpc3RlbmluZykKKwkJCQkJeworCQkJCQkJLyogU3RhZ2VkIExJU1RFTiAo b3IgTElTVEVOK1VOTElTVEVOKSBiZWluZyBhYm9ydGVkICovCisJCQkJCQkvKiBSZW1vdmUg cHJlLWFsbG9jYXRlZCBlbnRyaWVzIGZyb20gYm90aCBoYXNoZXMgKi8KKwkJCQkJCSh2b2lk KSBoYXNoX3NlYXJjaChsaXN0ZW5DaGFubmVsc0hhc2gsIHBlbmRpbmctPmNoYW5uZWwsCisJ CQkJCQkJCQkJICAgSEFTSF9SRU1PVkUsIE5VTEwpOworCQkJCQkJZW50cnktPm51bUxpc3Rl bmVycy0tOworCQkJCQkJaWYgKGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzKQorCQkJCQkJCW1l bW1vdmUoJmxpc3RlbmVyc1tpXSwgJmxpc3RlbmVyc1tpICsgMV0sCisJCQkJCQkJCQlzaXpl b2YoTGlzdGVuZXJFbnRyeSkgKiAoZW50cnktPm51bUxpc3RlbmVycyAtIGkpKTsKKworCQkJ CQkJaWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0gMCkKKwkJCQkJCXsKKwkJCQkJCQlkc2Ff ZnJlZShjaGFubmVsRFNBLCBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCQkJCQkJCWRzaGFz aF9kZWxldGVfZW50cnkoY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCQkJCQllbnRyeSA9IE5V TEw7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkgKiBlbHNlOiBVTkxJU1RF TiBvbiBjb21taXR0ZWQgY2hhbm5lbCBiZWluZyBhYm9ydGVkIC0KKwkJCQkJICogbm90aGlu ZyB0byB1bmRvCisJCQkJCSAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlm IChlbnRyeSAhPSBOVUxMKQorCQkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gs IGVudHJ5KTsKKwkJfQorCX0KKworCS8qIElmIHdlJ3JlIG5vIGxvbmdlciBsaXN0ZW5pbmcg b24gYW55dGhpbmcsIHVucmVnaXN0ZXIgKi8KKwlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIg JiYKKwkJKGxpc3RlbkNoYW5uZWxzSGFzaCA9PSBOVUxMIHx8IGhhc2hfZ2V0X251bV9lbnRy aWVzKGxpc3RlbkNoYW5uZWxzSGFzaCkgPT0gMCkpCiAJCWFzeW5jUXVldWVVbnJlZ2lzdGVy KCk7CiAKIAkvKiBBbmQgY2xlYW4gdXAgKi8KQEAgLTE4NTQsMjAgKzI0NTMsMjkgQEAgYXN5 bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJUXVldWVQb3NpdGlvbiBoZWFk OwogCVNuYXBzaG90CXNuYXBzaG90OwogCi0JLyogRmV0Y2ggY3VycmVudCBzdGF0ZSAqLwor CS8qCisJICogRmV0Y2ggY3VycmVudCBzdGF0ZSwgaW5kaWNhdGUgdG8gb3RoZXJzIHRoYXQg d2UgaGF2ZSB3b2tlbiB1cCwgYW5kIHRoYXQKKwkgKiB3ZSBub3cgd2lsbCBiZSBhZHZhbmNp bmcgb3VyIHBvc2l0aW9uLgorCSAqLwogCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2Nr LCBMV19TSEFSRUQpOwogCS8qIEFzc2VydCBjaGVja3MgdGhhdCB3ZSBoYXZlIGEgdmFsaWQg c3RhdGUgZW50cnkgKi8KIAlBc3NlcnQoTXlQcm9jUGlkID09IFFVRVVFX0JBQ0tFTkRfUElE KE15UHJvY051bWJlcikpOworCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoTXlQcm9j TnVtYmVyKSA9IGZhbHNlOworCWhlYWQgPSBRVUVVRV9IRUFEOwogCXBvcyA9IFFVRVVFX0JB Q0tFTkRfUE9TKE15UHJvY051bWJlcik7Ci0JaGVhZCA9IFFVRVVFX0hFQUQ7Ci0JTFdMb2Nr UmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCiAJaWYgKFFVRVVFX1BPU19FUVVBTChwb3Ms IGhlYWQpKQogCXsKIAkJLyogTm90aGluZyB0byBkbywgd2UgaGF2ZSByZWFkIGFsbCBub3Rp ZmljYXRpb25zIGFscmVhZHkuICovCisJCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2Nr KTsKIAkJcmV0dXJuOwogCX0KIAorCVFVRVVFX0JBQ0tFTkRfSVNfQURWQU5DSU5HKE15UHJv Y051bWJlcikgPSB0cnVlOworCVFVRVVFX0JBQ0tFTkRfQURWQU5DSU5HX1BPUyhNeVByb2NO dW1iZXIpID0gaGVhZDsKKworCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKKwog CS8qLS0tLS0tLS0tLQogCSAqIEdldCBzbmFwc2hvdCB3ZSdsbCB1c2UgdG8gZGVjaWRlIHdo aWNoIHhhY3RzIGFyZSBzdGlsbCBpbiBwcm9ncmVzcy4KIAkgKiBUaGlzIGlzIHRyaWNraWVy IHRoYW4gaXQgbWlnaHQgc2VlbSwgYmVjYXVzZSBvZiByYWNlIGNvbmRpdGlvbnMuCkBAIC0x OTU0LDYgKzI1NjIsOCBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkK IAogCQkvKiBVcGRhdGUgc2hhcmVkIHN0YXRlICovCiAJCUxXTG9ja0FjcXVpcmUoTm90aWZ5 UXVldWVMb2NrLCBMV19TSEFSRUQpOworCisJCVFVRVVFX0JBQ0tFTkRfSVNfQURWQU5DSU5H KE15UHJvY051bWJlcikgPSBmYWxzZTsKIAkJUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVt YmVyKSA9IHBvczsKIAkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCkBAIC0y MDUxLDcgKzI2NjEsNyBAQCBhc3luY1F1ZXVlUHJvY2Vzc1BhZ2VFbnRyaWVzKFF1ZXVlUG9z aXRpb24gKmN1cnJlbnQsCiAJCQkgKiBvdmVyIGl0IG9uIHRoZSBmaXJzdCBMSVNURU4gaW4g YSBzZXNzaW9uLCBhbmQgbm90IGdldCBzdHVjayBvbgogCQkJICogaXQgaW5kZWZpbml0ZWx5 LgogCQkJICovCi0JCQlpZiAobGlzdGVuQ2hhbm5lbHMgPT0gTklMKQorCQkJaWYgKGxpc3Rl bkNoYW5uZWxzSGFzaCA9PSBOVUxMIHx8IGhhc2hfZ2V0X251bV9lbnRyaWVzKGxpc3RlbkNo YW5uZWxzSGFzaCkgPT0gMCkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKFRyYW5zYWN0aW9u SWREaWRDb21taXQocWUtPnhpZCkpCkBAIC0yMzA2LDcgKzI5MTYsNyBAQCBQcm9jZXNzSW5j b21pbmdOb3RpZnkoYm9vbCBmbHVzaCkKIAlub3RpZnlJbnRlcnJ1cHRQZW5kaW5nID0gZmFs c2U7CiAKIAkvKiBEbyBub3RoaW5nIGVsc2UgaWYgd2UgYXJlbid0IGFjdGl2ZWx5IGxpc3Rl bmluZyAqLwotCWlmIChsaXN0ZW5DaGFubmVscyA9PSBOSUwpCisJaWYgKGxpc3RlbkNoYW5u ZWxzSGFzaCA9PSBOVUxMIHx8IGhhc2hfZ2V0X251bV9lbnRyaWVzKGxpc3RlbkNoYW5uZWxz SGFzaCkgPT0gMCkKIAkJcmV0dXJuOwogCiAJaWYgKFRyYWNlX25vdGlmeSkKQEAgLTI0MTAs MTMgKzMwMjAsMTUgQEAgQWRkRXZlbnRUb1BlbmRpbmdOb3RpZmllcyhOb3RpZmljYXRpb24g Km4pCiB7CiAJQXNzZXJ0KHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzICE9IE5JTCk7CiAKLQkv KiBDcmVhdGUgdGhlIGhhc2ggdGFibGUgaWYgaXQncyB0aW1lIHRvICovCisJLyogQ3JlYXRl IHRoZSBoYXNoIHRhYmxlcyBpZiBpdCdzIHRpbWUgdG8gKi8KIAlpZiAobGlzdF9sZW5ndGgo cGVuZGluZ05vdGlmaWVzLT5ldmVudHMpID49IE1JTl9IQVNIQUJMRV9OT1RJRklFUyAmJgog CQlwZW5kaW5nTm90aWZpZXMtPmhhc2h0YWIgPT0gTlVMTCkKIAl7CiAJCUhBU0hDVEwJCWhh c2hfY3RsOwogCQlMaXN0Q2VsbCAgICpsOwogCisJCUFzc2VydChwZW5kaW5nTm90aWZpZXMt PmNoYW5uZWxTZXQgPT0gTlVMTCk7CisKIAkJLyogQ3JlYXRlIHRoZSBoYXNoIHRhYmxlICov CiAJCWhhc2hfY3RsLmtleXNpemUgPSBzaXplb2YoTm90aWZpY2F0aW9uICopOwogCQloYXNo X2N0bC5lbnRyeXNpemUgPSBzaXplb2Yoc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gpOwpAQCAt MjQyOSwxMCArMzA0MSwyMiBAQCBBZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNh dGlvbiAqbikKIAkJCQkJCSZoYXNoX2N0bCwKIAkJCQkJCUhBU0hfRUxFTSB8IEhBU0hfRlVO Q1RJT04gfCBIQVNIX0NPTVBBUkUgfCBIQVNIX0NPTlRFWFQpOwogCisJCS8qIENyZWF0ZSB0 aGUgY2hhbm5lbCBoYXNoIHRhYmxlICovCisJCW1lbXNldCgmaGFzaF9jdGwsIDAsIHNpemVv ZihoYXNoX2N0bCkpOworCQloYXNoX2N0bC5rZXlzaXplID0gTkFNRURBVEFMRU47CisJCWhh c2hfY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihzdHJ1Y3QgQ2hhbm5lbE5hbWUpOworCQloYXNo X2N0bC5oY3h0ID0gQ3VyVHJhbnNhY3Rpb25Db250ZXh0OworCQlwZW5kaW5nTm90aWZpZXMt PmNoYW5uZWxTZXQgPQorCQkJaGFzaF9jcmVhdGUoIlBlbmRpbmcgTm90aWZ5IENoYW5uZWxz IiwKKwkJCQkJCTY0TCwKKwkJCQkJCSZoYXNoX2N0bCwKKwkJCQkJCUhBU0hfRUxFTSB8IEhB U0hfU1RSSU5HUyB8IEhBU0hfQ09OVEVYVCk7CisKIAkJLyogSW5zZXJ0IGFsbCB0aGUgYWxy ZWFkeS1leGlzdGluZyBldmVudHMgKi8KIAkJZm9yZWFjaChsLCBwZW5kaW5nTm90aWZpZXMt PmV2ZW50cykKIAkJewogCQkJTm90aWZpY2F0aW9uICpvbGRuID0gKE5vdGlmaWNhdGlvbiAq KSBsZmlyc3QobCk7CisJCQljaGFyCSAgICpjaGFubmVsID0gb2xkbi0+ZGF0YTsKIAkJCWJv b2wJCWZvdW5kOwogCiAJCQkodm9pZCkgaGFzaF9zZWFyY2gocGVuZGluZ05vdGlmaWVzLT5o YXNodGFiLApAQCAtMjQ0MCwyMiArMzA2NCw0MiBAQCBBZGRFdmVudFRvUGVuZGluZ05vdGlm aWVzKE5vdGlmaWNhdGlvbiAqbikKIAkJCQkJCQkgICBIQVNIX0VOVEVSLAogCQkJCQkJCSAg ICZmb3VuZCk7CiAJCQlBc3NlcnQoIWZvdW5kKTsKKworCQkJLyogSW5zZXJ0IGNoYW5uZWwg aW50byBjaGFubmVsU2V0ICovCisJCQkodm9pZCkgaGFzaF9zZWFyY2gocGVuZGluZ05vdGlm aWVzLT5jaGFubmVsU2V0LAorCQkJCQkJCSAgIGNoYW5uZWwsCisJCQkJCQkJICAgSEFTSF9F TlRFUiwKKwkJCQkJCQkgICAmZm91bmQpOworCQkJLyogZm91bmQgbWF5IGJlIHRydWUgaWYg bXVsdGlwbGUgZXZlbnRzIG9uIHNhbWUgY2hhbm5lbCAqLwogCQl9CiAJfQogCiAJLyogQWRk IG5ldyBldmVudCB0byB0aGUgbGlzdCwgaW4gb3JkZXIgKi8KIAlwZW5kaW5nTm90aWZpZXMt PmV2ZW50cyA9IGxhcHBlbmQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMsIG4pOwogCi0JLyog QWRkIGV2ZW50IHRvIHRoZSBoYXNoIHRhYmxlIGlmIG5lZWRlZCAqLworCS8qIEFkZCBldmVu dCB0byB0aGUgaGFzaCB0YWJsZXMgaWYgbmVlZGVkICovCiAJaWYgKHBlbmRpbmdOb3RpZmll cy0+aGFzaHRhYiAhPSBOVUxMKQogCXsKIAkJYm9vbAkJZm91bmQ7CiAKKwkJQXNzZXJ0KHBl bmRpbmdOb3RpZmllcy0+Y2hhbm5lbFNldCAhPSBOVUxMKTsKKwogCQkodm9pZCkgaGFzaF9z ZWFyY2gocGVuZGluZ05vdGlmaWVzLT5oYXNodGFiLAogCQkJCQkJICAgJm4sCiAJCQkJCQkg ICBIQVNIX0VOVEVSLAogCQkJCQkJICAgJmZvdW5kKTsKIAkJQXNzZXJ0KCFmb3VuZCk7CisK KwkJLyogQWRkIGNoYW5uZWwgdG8gY2hhbm5lbFNldCAqLworCQl7CisJCQljaGFyCSAgICpj aGFubmVsID0gbi0+ZGF0YTsKKworCQkJKHZvaWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdOb3Rp Zmllcy0+Y2hhbm5lbFNldCwKKwkJCQkJCQkgICBjaGFubmVsLAorCQkJCQkJCSAgIEhBU0hf RU5URVIsCisJCQkJCQkJICAgJmZvdW5kKTsKKwkJCS8qIGZvdW5kIG1heSBiZSB0cnVlIGlm IHdlIGFscmVhZHkgaGF2ZSBhbiBldmVudCBvbiB0aGlzIGNoYW5uZWwgKi8KKwkJfQogCX0K IH0KIApAQCAtMjQ5Myw3ICszMTM3LDcgQEAgbm90aWZpY2F0aW9uX21hdGNoKGNvbnN0IHZv aWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSkKIAlyZXR1cm4gMTsJ CQkJCS8qIG5vdCBlcXVhbCAqLwogfQogCi0vKiBDbGVhciB0aGUgcGVuZGluZ0FjdGlvbnMg YW5kIHBlbmRpbmdOb3RpZmllcyBsaXN0cy4gKi8KKy8qIENsZWFyIHRoZSBwZW5kaW5nQWN0 aW9ucywgcGVuZGluZ05vdGlmaWVzLCBhbmQgcGVuZGluZ05vdGlmeUNoYW5uZWxzIGxpc3Rz LiAqLwogc3RhdGljIHZvaWQKIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lk KQogewpAQCAtMjUwNSw2ICszMTQ5LDEyIEBAIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3Rp Zmllcyh2b2lkKQogCSAqLwogCXBlbmRpbmdBY3Rpb25zID0gTlVMTDsKIAlwZW5kaW5nTm90 aWZpZXMgPSBOVUxMOworCXBlbmRpbmdOb3RpZnlDaGFubmVscyA9IE5JTDsKKwlpZiAocGVu ZGluZ0xpc3RlbkNoYW5uZWxzICE9IE5VTEwpCisJeworCQloYXNoX2Rlc3Ryb3kocGVuZGlu Z0xpc3RlbkNoYW5uZWxzKTsKKwkJcGVuZGluZ0xpc3RlbkNoYW5uZWxzID0gTlVMTDsKKwl9 CiB9CiAKIC8qCkBAIC0yNTE1LDMgKzMxNjUsMTYgQEAgY2hlY2tfbm90aWZ5X2J1ZmZlcnMo aW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKIHsKIAlyZXR1 cm4gY2hlY2tfc2xydV9idWZmZXJzKCJub3RpZnlfYnVmZmVycyIsIG5ld3ZhbCk7CiB9CisK KworLyoKKyAqIENoYW5uZWxIYXNoUHJlcGFyZUtleQorICoJCVByZXBhcmUgYSBjaGFubmVs IGtleSBmb3IgdXNlIGFzIGEgaGFzaCBrZXkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAor Q2hhbm5lbEhhc2hQcmVwYXJlS2V5KENoYW5uZWxIYXNoS2V5ICprZXksIE9pZCBkYm9pZCwg Y29uc3QgY2hhciAqY2hhbm5lbCkKK3sKKwltZW1zZXQoa2V5LCAwLCBzaXplb2YoQ2hhbm5l bEhhc2hLZXkpKTsKKwlrZXktPmRib2lkID0gZGJvaWQ7CisJc3RybGNweShrZXktPmNoYW5u ZWwsIGNoYW5uZWwsIE5BTUVEQVRBTEVOKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKaW5kZXggZGNmYWRiZDVhYWUuLjMy YjBiMjFmMTg0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0 X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0 X2V2ZW50X25hbWVzLnR4dApAQCAtMzcxLDYgKzM3MSw3IEBAIFN1YnRyYW5zQnVmZmVyCSJX YWl0aW5nIGZvciBJL08gb24gYSBzdWItdHJhbnNhY3Rpb24gU0xSVSBidWZmZXIuIgogTXVs dGlYYWN0T2Zmc2V0QnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBtdWx0aXhhY3Qgb2Zm c2V0IFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE1lbWJlckJ1ZmZlcgkiV2FpdGluZyBmb3Ig SS9PIG9uIGEgbXVsdGl4YWN0IG1lbWJlciBTTFJVIGJ1ZmZlci4iCiBOb3RpZnlCdWZmZXIJ IldhaXRpbmcgZm9yIEkvTyBvbiBhIDxjb21tYW5kPk5PVElGWTwvY29tbWFuZD4gbWVzc2Fn ZSBTTFJVIGJ1ZmZlci4iCitOb3RpZnlDaGFubmVsSGFzaAkiV2FpdGluZyB0byBhY2Nlc3Mg dGhlIDxjb21tYW5kPk5PVElGWTwvY29tbWFuZD4gY2hhbm5lbCBoYXNoIHRhYmxlLiIKIFNl cmlhbEJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgc2VyaWFsaXphYmxlIHRyYW5zYWN0 aW9uIGNvbmZsaWN0IFNMUlUgYnVmZmVyLiIKIFdBTEluc2VydAkiV2FpdGluZyB0byBpbnNl cnQgV0FMIGRhdGEgaW50byBhIG1lbW9yeSBidWZmZXIuIgogQnVmZmVyQ29udGVudAkiV2Fp dGluZyB0byBhY2Nlc3MgYSBkYXRhIHBhZ2UgaW4gbWVtb3J5LiIKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9s d2xvY2tsaXN0LmgKaW5kZXggNTMzMzQ0NTA5ZTkuLjI3N2E3OGU3OTU0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9z dG9yYWdlL2x3bG9ja2xpc3QuaApAQCAtMTAyLDYgKzEwMiw3IEBAIFBHX0xXTE9DS1RSQU5D SEUoU1VCVFJBTlNfQlVGRkVSLCBTdWJ0cmFuc0J1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUo TVVMVElYQUNUT0ZGU0VUX0JVRkZFUiwgTXVsdGlYYWN0T2Zmc2V0QnVmZmVyKQogUEdfTFdM T0NLVFJBTkNIRShNVUxUSVhBQ1RNRU1CRVJfQlVGRkVSLCBNdWx0aVhhY3RNZW1iZXJCdWZm ZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE5PVElGWV9CVUZGRVIsIE5vdGlmeUJ1ZmZlcikKK1BH X0xXTE9DS1RSQU5DSEUoTk9USUZZX0NIQU5ORUxfSEFTSCwgTm90aWZ5Q2hhbm5lbEhhc2gp CiBQR19MV0xPQ0tUUkFOQ0hFKFNFUklBTF9CVUZGRVIsIFNlcmlhbEJ1ZmZlcikKIFBHX0xX TE9DS1RSQU5DSEUoV0FMX0lOU0VSVCwgV0FMSW5zZXJ0KQogUEdfTFdMT0NLVFJBTkNIRShC VUZGRVJfQ09OVEVOVCwgQnVmZmVyQ29udGVudCkKZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggY2ViM2ZjNWQ5ODAuLmIzYjMzMTIzMjllIDEwMDY0NAotLS0gYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdApAQCAtNDIxLDYgKzQyMSw4IEBAIENhdGFsb2dJZE1hcEVudHJ5CiBDYXRh bG9nSW5kZXhTdGF0ZQogQ2hhbmdlVmFyTm9kZXNfY2FsbGJhY2sKIENoYW5nZVZhck5vZGVz X2NvbnRleHQKK0NoYW5uZWxMaXN0ZW5lcnMKK0NoYW5uZWxIYXNoS2V5CiBDaGVja1BvaW50 CiBDaGVja1BvaW50U3RtdAogQ2hlY2twb2ludFN0YXRzRGF0YQpAQCAtMTU3OCw2ICsxNTgw LDcgQEAgTGlzdFBhcnNlZExleAogTGlzdGVuQWN0aW9uCiBMaXN0ZW5BY3Rpb25LaW5kCiBM aXN0ZW5TdG10CitMaXN0ZW5lckVudHJ5CiBMb0luZm8KIExvYWRTdG10CiBMb2NhbEJ1ZmZl ckxvb2t1cEVudAotLSAKMi41MC4xCgo= --2c19c0e3a2cb48078ad0302f39fd1755--