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.94.2) (envelope-from ) id 1v5rjE-00D7fK-Uj for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Oct 2025 20:22:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v5rjC-00Ay4K-QR for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Oct 2025 20:22:39 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v5rjC-00Ay46-Ee for pgsql-hackers@lists.postgresql.org; Mon, 06 Oct 2025 20:22:39 +0000 Received: from flow-b3-smtp.messagingengine.com ([202.12.124.138]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v5rjA-000jqk-2z for pgsql-hackers@postgresql.org; Mon, 06 Oct 2025 20:22:39 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailflow.stl.internal (Postfix) with ESMTP id 691F61300024; Mon, 6 Oct 2025 16:22:34 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-04.internal (MEProxy); Mon, 06 Oct 2025 16:22:34 -0400 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=1759782154; x=1759789354; bh=HuGODsx4Qe ajbRbOt40sIDhpQakQFeFrkqrCkIJRYPc=; b=iva8ao4JABxPJef3+Tm5LFMb8B Zx37zrEUuWiVG5i/yviu5KIrAAb6zrS36C4zv4T3CdFJaeDsiA4XFrihB+zUeMR6 5+ySotaFgb8MQV5K82l4olMkyaAxK1pDlMGRPMDGbKhIlB/a3ujw8MpAoLiXBdol XfOvKZ3kMjEADXp88pgTUS1P/zWwf73CubfCbQZ857BLhMUpGIdtMWpzAq0Q7lHV +XqI5Dti5Y3LzII1xmpCu3u0e5IxHxlGCKX8QwAzIT0kQ2pxRNTuHfd1uv1oVRMV uvNgo/i6/lfI5aN57Acexp1K6A2ddB5FRi2QQx5QHfQ++rlUdLI3OYYKckaw== 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= 1759782154; x=1759789354; bh=HuGODsx4QeajbRbOt40sIDhpQakQFeFrkqr CkIJRYPc=; b=OqI7guf2Xp6TKnLiEbbmg28W++9DGZ9sJQljhFJ2X3X0ZttWEDo 4nl3VuhxggP2xnpQoz4Rt89lzdx6G08NQ3YYh2ITRdJcTda1wIMolLyNzwmRZ+f+ p4SVxXnkznCFnV6/dO8CxzWmSii4eiXtlAm1sD+SGr2s4NudDcRFBz6Lj65qw2d+ fxLOcCLvW5/o5YkqpCbVHzMkFHg0RDHgOpO49p7Dh3EJGGY/G9sNYr4mytxgGR1M kFtS2uh8MEueA2OrPZTgaB5OtIvGjymyAN1+e7k0Xq9eQDIJfb8rlkwP4rNwjF5Q DW1NXX4DTdCPlKiBOT5QjdIuTlGkE7yHgIg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdelkeeglecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecunecujfgurhepofggfffhvfevkfgjfhfutgesmhdtreerre dttdenucfhrhhomhepfdflohgvlhculfgrtghosghsohhnfdcuoehjohgvlhestghomhhp ihhlvghrrdhorhhgqeenucggtffrrghtthgvrhhnpeffgfelffffvdehhfeigeefieejud ejvdeiueevueeggfevueekveeiteehhfetieenucevlhhushhtvghrufhiiigvpedtnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehjohgvlhestghomhhpihhlvghrrdhorhhgpdhnsg gprhgtphhtthhopedvpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehpghhsqhhl qdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrghdprhgtphhtthhopehtghhlse hsshhsrdhpghhhrdhprgdruhhs X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id EFF1218E0054; Mon, 6 Oct 2025 16:22:33 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AZ7XRsRLdGms Date: Mon, 06 Oct 2025 22:22:05 +0200 From: "Joel Jacobson" To: "Tom Lane" Cc: pgsql-hackers Message-Id: In-Reply-To: <4bd5e6c4-6fa7-44bb-869d-59a32a331fa8@app.fastmail.com> References: <6899c044-4a82-49be-8117-e6f669765f7e@app.fastmail.com> <165530.1752362320@sss.pgh.pa.us> <02a7cd37-e2fc-4212-8b19-f8c239c95fb8@app.fastmail.com> <96f00bf1-cc9d-4520-9d02-9e14e7767c88@app.fastmail.com> <30c2aa7d-dd6c-4b68-a2e4-f217a1a34acf@app.fastmail.com> <0b4d402a-9ac2-4aa8-acf8-8231dbe579ea@app.fastmail.com> <3095599.1758644879@sss.pgh.pa.us> <0dc6a2cc-5216-4dc1-9dd2-430cafc6095b@app.fastmail.com> <52CC167F-763B-4ECA-B0B4-DAB381816828@gmail.com> <9186C6D0-F7A9-482A-9183-89E530B57E36@gmail.com> <1073593.1759423179@sss.pgh.pa.us> <4bd5e6c4-6fa7-44bb-869d-59a32a331fa8@app.fastmail.com> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=5d8febe1578a480abe926659d4e99a38 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --5d8febe1578a480abe926659d4e99a38 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Mon, Oct 6, 2025, at 22:11, Joel Jacobson wrote: > The patch is now using dshash. I've been looking at code in launcher.c > when implementing it. The function init_channel_hash() ended up being > very similar to launcher.c's logicalrep_launcher_attach_dshmem(). Noticed a mistake on one line just after pressing send. Sorry about that, new version attached. /Joel --5d8febe1578a480abe926659d4e99a38 Content-Disposition: attachment; filename="optimize_listen_notify-v8.patch" Content-Type: application/octet-stream; name="optimize_listen_notify-v8.patch" Content-Transfer-Encoding: base64 RnJvbSA3NmEyODlkYzI1ZTJkMDk4N2JiMjcwN2E0ZDgzOTJkMmUyOWFhOGE3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU3VuLCAyOCBTZXAgMjAyNSAxNDo1Mzo1NyArMDIwMApTdWJqZWN0OiBbUEFU Q0hdIE9wdGltaXplIExJU1RFTi9OT1RJRlkgd2l0aCBjaGFubmVsLXNwZWNpZmljIGxpc3Rl bmVyCiB0cmFja2luZwoKQ3VycmVudGx5LCBpZGxlIGxpc3RlbmluZyBiYWNrZW5kcyBjYXVz ZSBhIGRyYW1hdGljIHNsb3dkb3duIGR1ZSB0bwpjb250ZXh0IHN3aXRjaGluZyB3aGVuIHRo ZXkgYXJlIHNpZ25hbGVkIGFuZCB3YWtlIHVwLiBUaGlzIGlzIHdhc3RlZnVsCndoZW4gdGhl eSBhcmUgbm90IGxpc3RlbmluZyB0byB0aGUgY2hhbm5lbCBiZWluZyBub3RpZmllZC4KCkp1 c3QgMTAgZXh0cmEgaWRsZSBsaXN0ZW5pbmcgY29ubmVjdGlvbnMgY2F1c2UgYSBzbG93ZG93 biBmcm9tIDg3MDAgVFBTCnRvIDYxMDAgVFBTLCAxMDAgZXh0cmEgY2F1c2UgaXQgdG8gZHJv cCB0byAyMDAwIFRQUywgYW5kIGF0IDEwMDAgZXh0cmEKaXQgZmFsbHMgdG8gMjUwIFRQUy4K ClRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0YXJnZXRlZCBzaWduYWxpbmcgZm9yIExJU1RFTi9O T1RJRlksIGltcHJvdmluZwpzY2FsYWJpbGl0eSBpbiB3b3JrbG9hZHMgd2l0aCBtYW55IGlk bGUgbGlzdGVuZXJzLgoKQSBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlIG5vdyB0cmFja3Mg d2hpY2ggYmFja2VuZHMgbGlzdGVuIG9uIGVhY2gKKGRhdGFiYXNlLCBjaGFubmVsKSBwYWly LCB3aGljaCBTaWduYWxCYWNrZW5kcygpIHVzZXMgdG8gcGVyZm9ybQp0YXJnZXRlZCBzaWdu YWxpbmcuICBJbiBhZGRpdGlvbiwgaXQgc3RhZ2dlcnMgd2FrZXVwcyBieSBzaWduYWxpbmcg b25lCmJhY2tlbmQgYXQgdGhlIGdsb2JhbCB0YWlsIHRvIGhlbHAgaXQgYWR2YW5jZSBncmFk dWFsbHksIGFuZCBmb3JjZXMgYW55CmV4Y2Vzc2l2ZWx5IGxhZ2dpbmcgYmFja2VuZHMgdG8g Y2F0Y2ggdXAuICBBIHBlci1iYWNrZW5kIHdha2V1cF9wZW5kaW5nCmZsYWcgYXZvaWRzIHJl ZHVuZGFudCBzaWduYWxzLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAg ICAgICAgICAgICAgICB8IDUwMCArKysrKysrKysrKysrKysrLS0KIC4uLi91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9z dG9yYWdlL2x3bG9ja2xpc3QuaCAgICAgICAgICAgICAgfCAgIDEgKwogMyBmaWxlcyBjaGFu Z2VkLCA0NjQgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMKaW5kZXggNGJkMzdkNWJlYjUuLjY4MWI5NTFjZTY1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMKQEAgLTI0LDggKzI0LDEwIEBACiAgKgkgIEFsbCBub3RpZmljYXRpb24gbWVzc2Fn ZXMgYXJlIHBsYWNlZCBpbiB0aGUgcXVldWUgYW5kIGxhdGVyIHJlYWQgb3V0CiAgKgkgIGJ5 IGxpc3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKgkgIFRoZXJlIGlzIG5vIGNlbnRyYWwga25v d2xlZGdlIG9mIHdoaWNoIGJhY2tlbmQgbGlzdGVucyBvbiB3aGljaCBjaGFubmVsOwotICoJ ICBldmVyeSBiYWNrZW5kIGhhcyBpdHMgb3duIGxpc3Qgb2YgaW50ZXJlc3RpbmcgY2hhbm5l bHMuCisgKgkgIFdlIGFsc28gbWFpbnRhaW4gYSBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxl IChkc2hhc2gpIHRoYXQgbWFwcyBjaGFubmVsCisgKgkgIG5hbWVzIHRvIHRoZSBzZXQgb2Yg YmFja2VuZHMgbGlzdGVuaW5nIG9uIGVhY2ggY2hhbm5lbC4gVGhpcyB0YWJsZSBpcworICoJ ICBjcmVhdGVkIGxhemlseSBvbiB0aGUgZmlyc3QgTElTVEVOIGNvbW1hbmQgYW5kIGdyb3dz IGR5bmFtaWNhbGx5IGFzCisgKgkgIG5lZWRlZC4KICAqCiAgKgkgIEFsdGhvdWdoIHRoZXJl IGlzIG9ubHkgb25lIHF1ZXVlLCBub3RpZmljYXRpb25zIGFyZSB0cmVhdGVkIGFzIGJlaW5n CiAgKgkgIGRhdGFiYXNlLWxvY2FsOyB0aGlzIGlzIGRvbmUgYnkgaW5jbHVkaW5nIHRoZSBz ZW5kZXIncyBkYXRhYmFzZSBPSUQKQEAgLTcxLDEzICs3MywxNyBAQAogICoJICBtYWtlIGFu eSBhY3R1YWwgdXBkYXRlcyB0byB0aGUgZWZmZWN0aXZlIGxpc3RlbiBzdGF0ZSAobGlzdGVu Q2hhbm5lbHMpLgogICoJICBUaGVuIHdlIHNpZ25hbCBhbnkgYmFja2VuZHMgdGhhdCBtYXkg YmUgaW50ZXJlc3RlZCBpbiBvdXIgbWVzc2FnZXMKICAqCSAgKGluY2x1ZGluZyBvdXIgb3du IGJhY2tlbmQsIGlmIGxpc3RlbmluZykuICBUaGlzIGlzIGRvbmUgYnkKLSAqCSAgU2lnbmFs QmFja2VuZHMoKSwgd2hpY2ggc2NhbnMgdGhlIGxpc3Qgb2YgbGlzdGVuaW5nIGJhY2tlbmRz IGFuZCBzZW5kcyBhCi0gKgkgIFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCBzaWduYWwgdG8g ZXZlcnkgbGlzdGVuaW5nIGJhY2tlbmQgKHdlIGRvbid0Ci0gKgkgIGtub3cgd2hpY2ggYmFj a2VuZCBpcyBsaXN0ZW5pbmcgb24gd2hpY2ggY2hhbm5lbCBzbyB3ZSBtdXN0IHNpZ25hbCB0 aGVtCi0gKgkgIGFsbCkuICBXZSBjYW4gZXhjbHVkZSBiYWNrZW5kcyB0aGF0IGFyZSBhbHJl YWR5IHVwIHRvIGRhdGUsIHRob3VnaCwgYW5kCi0gKgkgIHdlIGNhbiBhbHNvIGV4Y2x1ZGUg YmFja2VuZHMgdGhhdCBhcmUgaW4gb3RoZXIgZGF0YWJhc2VzICh1bmxlc3MgdGhleQotICoJ ICBhcmUgd2F5IGJlaGluZCBhbmQgc2hvdWxkIGJlIGtpY2tlZCB0byBtYWtlIHRoZW0gYWR2 YW5jZSB0aGVpcgotICoJICBwb2ludGVycykuCisgKgkgIFNpZ25hbEJhY2tlbmRzKCksIHdo aWNoIGNvbnN1bHRzIHRoZSBzaGFyZWQgY2hhbm5lbCBoYXNoIHRhYmxlIHRvCisgKgkgIGlk ZW50aWZ5IGxpc3RlbmVycyBmb3IgdGhlIGNoYW5uZWxzIHRoYXQgaGF2ZSBwZW5kaW5nIG5v dGlmaWNhdGlvbnMKKyAqCSAgaW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UuICBFYWNoIHNlbGVj dGVkIGJhY2tlbmQgaXMgbWFya2VkIGFzIGhhdmluZyBhCisgKgkgIHdha2V1cCBwZW5kaW5n IHRvIGF2b2lkIGR1cGxpY2F0ZSBzaWduYWxzLCBhbmQgYSBQUk9DU0lHX05PVElGWV9JTlRF UlJVUFQKKyAqCSAgc2lnbmFsIGlzIHNlbnQgdG8gaXQuCisgKgorICoJICBUbyBtYWludGFp biBxdWV1ZSBoZWFsdGgsIFNpZ25hbEJhY2tlbmRzKCkgYWxzbyB3YWtlcyBvbmUgYmFja2Vu ZAorICoJICBwb3NpdGlvbmVkIGF0IHRoZSBnbG9iYWwgcXVldWUgdGFpbCB0byBoZWxwIGFk dmFuY2UgaXQsIGFuZCBzaWduYWxzCisgKgkgIGFueSBiYWNrZW5kIHRoYXQgaGFzIGZhbGxl biB0b28gZmFyIGJlaGluZCB0byBjYXRjaCB1cC4gIFRoZXNlIG1lYXN1cmVzCisgKgkgIHBy ZXZlbnQgdGhlIG5vdGlmaWNhdGlvbiBxdWV1ZSBmcm9tIGdyb3dpbmcgaW5kZWZpbml0ZWx5 LCB3aGlsZSBtb3N0bHkKKyAqCSAgbGltaXRpbmcgd2FrZXVwcyB0byB0aGUgYmFja2VuZHMg dGhhdCBhY3R1YWxseSBuZWVkIHRoZW0uCiAgKgogICoJICBGaW5hbGx5LCBhZnRlciB3ZSBh cmUgb3V0IG9mIHRoZSB0cmFuc2FjdGlvbiBhbHRvZ2V0aGVyIGFuZCBhYm91dCB0byBnbwog ICoJICBpZGxlLCB3ZSBzY2FuIHRoZSBxdWV1ZSBmb3IgbWVzc2FnZXMgdGhhdCBuZWVkIHRv IGJlIHNlbnQgdG8gb3VyCkBAIC0xMjgsNiArMTM0LDcgQEAKICNpbmNsdWRlIDxsaW1pdHMu aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRl IDxzdHJpbmcuaD4KIAogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2luY2x1ZGUg ImFjY2Vzcy9zbHJ1LmgiCkBAIC0xMzcsMTQgKzE0NCwxNyBAQAogI2luY2x1ZGUgImNvbW1h bmRzL2FzeW5jLmgiCiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgogI2luY2x1ZGUgImZ1 bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIvZHNoYXNoLmgiCiAjaW5jbHVkZSAibGlicHEvbGli cHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9y YWdlL3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9kc2EuaCIKICNpbmNsdWRl ICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2lu Y2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgpAQCAtMTYyLDYgKzE3MiwyOSBAQAogICovCiAj ZGVmaW5lIE5PVElGWV9QQVlMT0FEX01BWF9MRU5HVEgJKEJMQ0tTWiAtIE5BTUVEQVRBTEVO IC0gMTI4KQogCisvKgorICogQ2hhbm5lbCBoYXNoIHRhYmxlIGRlZmluaXRpb25zCisgKgor ICogVGhpcyBoYXNoIHRhYmxlIG1hcHMgKGRhdGFiYXNlIE9JRCwgY2hhbm5lbCBuYW1lKSBr ZXlzIHRvIGFycmF5cyBvZgorICogUHJvY051bWJlcnMgcmVwcmVzZW50aW5nIHRoZSBiYWNr ZW5kcyBsaXN0ZW5pbmcgb24gZWFjaCBjaGFubmVsLgorICovCisKKyNkZWZpbmUgSU5JVElB TF9MSVNURU5FUlNfQVJSQVlfU0laRSA0CisKK3R5cGVkZWYgc3RydWN0IENoYW5uZWxIYXNo S2V5Cit7CisJT2lkCQkJZGJvaWQ7CisJY2hhcgkJY2hhbm5lbFtOQU1FREFUQUxFTl07Cit9 CQkJQ2hhbm5lbEhhc2hLZXk7CisKK3R5cGVkZWYgc3RydWN0IENoYW5uZWxFbnRyeQorewor CUNoYW5uZWxIYXNoS2V5IGtleTsKKwlkc2FfcG9pbnRlciBsaXN0ZW5lcnNfYXJyYXk7CS8q IERTQSBwb2ludGVyIHRvIFByb2NOdW1iZXIgYXJyYXkgKi8KKwlpbnQJCQludW1fbGlzdGVu ZXJzOwkvKiBOdW1iZXIgb2YgbGlzdGVuZXJzIGN1cnJlbnRseSBzdG9yZWQgKi8KKwlpbnQJ CQlhbGxvY2F0ZWRfbGlzdGVuZXJzOwkvKiBBbGxvY2F0ZWQgc2l6ZSBvZiBhcnJheSAqLwor fQkJCUNoYW5uZWxFbnRyeTsKKwogLyoKICAqIFN0cnVjdCByZXByZXNlbnRpbmcgYW4gZW50 cnkgaW4gdGhlIGdsb2JhbCBub3RpZnkgcXVldWUKICAqCkBAIC0yMjcsOCArMjYwLDggQEAg dHlwZWRlZiBzdHJ1Y3QgUXVldWVQb3NpdGlvbgogLyoKICAqIFBhcmFtZXRlciBkZXRlcm1p bmluZyBob3cgb2Z0ZW4gd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHRhaWwgcG9pbnRlcjoKICAq IHdlIGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xFQU5VUF9ERUxBWSBwYWdlcyBvZiBO T1RJRlkgZGF0YS4gIFRoaXMgaXMKLSAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEg YmFja2VuZCBpbiBhbm90aGVyIGRhdGFiYXNlIG5lZWRzIHRvIGJlCi0gKiBiZWhpbmQgYmVm b3JlIHdlJ2xsIGRlY2lkZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2YW5jZSBpdHMg cG9pbnRlci4KKyAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEgYmFja2VuZCBuZWVk cyB0byBiZSBiZWhpbmQgYmVmb3JlIHdlJ2xsCisgKiBkZWNpZGUgd2UgbmVlZCB0byB3YWtl IGl0IHVwIHRvIGFkdmFuY2UgaXRzIHBvaW50ZXIuCiAgKgogICogUmVzaXN0IHRoZSB0ZW1w dGF0aW9uIHRvIG1ha2UgdGhpcyByZWFsbHkgbGFyZ2UuICBXaGlsZSB0aGF0IHdvdWxkIHNh dmUKICAqIHdvcmsgaW4gc29tZSBwbGFjZXMsIGl0IHdvdWxkIGFkZCBjb3N0IGluIG90aGVy cy4gIEluIHBhcnRpY3VsYXIsIHRoaXMKQEAgLTI0Niw2ICsyNzksNyBAQCB0eXBlZGVmIHN0 cnVjdCBRdWV1ZUJhY2tlbmRTdGF0dXMKIAlPaWQJCQlkYm9pZDsJCQkvKiBiYWNrZW5kJ3Mg ZGF0YWJhc2UgT0lELCBvciBJbnZhbGlkT2lkICovCiAJUHJvY051bWJlcgluZXh0TGlzdGVu ZXI7CS8qIGlkIG9mIG5leHQgbGlzdGVuZXIsIG9yIElOVkFMSURfUFJPQ19OVU1CRVIgKi8K IAlRdWV1ZVBvc2l0aW9uIHBvczsJCQkvKiBiYWNrZW5kIGhhcyByZWFkIHF1ZXVlIHVwIHRv IGhlcmUgKi8KKwlib29sCQl3YWtldXBfcGVuZGluZzsgLyogc2lnbmFsIHNlbnQgYnV0IG5v dCB5ZXQgcHJvY2Vzc2VkICovCiB9IFF1ZXVlQmFja2VuZFN0YXR1czsKIAogLyoKQEAgLTI4 OCwxMSArMzIyLDkxIEBAIHR5cGVkZWYgc3RydWN0IEFzeW5jUXVldWVDb250cm9sCiAJUHJv Y051bWJlcglmaXJzdExpc3RlbmVyOwkvKiBpZCBvZiBmaXJzdCBsaXN0ZW5lciwgb3IKIAkJ CQkJCQkJICogSU5WQUxJRF9QUk9DX05VTUJFUiAqLwogCVRpbWVzdGFtcFR6IGxhc3RRdWV1 ZUZpbGxXYXJuOwkvKiB0aW1lIG9mIGxhc3QgcXVldWUtZnVsbCBtc2cgKi8KKwlkc2FfaGFu ZGxlCWNoYW5uZWxfaGFzaF9kc2E7CisJZHNoYXNoX3RhYmxlX2hhbmRsZSBjaGFubmVsX2hh c2hfZHNoOwogCVF1ZXVlQmFja2VuZFN0YXR1cyBiYWNrZW5kW0ZMRVhJQkxFX0FSUkFZX01F TUJFUl07CiB9IEFzeW5jUXVldWVDb250cm9sOwogCiBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRy b2wgKmFzeW5jUXVldWVDb250cm9sOwogCitzdGF0aWMgZHNhX2FyZWEgKmNoYW5uZWxfZHNh ID0gTlVMTDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKmNoYW5uZWxfaGFzaCA9IE5VTEw7Citz dGF0aWMgZHNoYXNoX2hhc2ggY2hhbm5lbF9oYXNoX2Z1bmMoY29uc3Qgdm9pZCAqa2V5LCBz aXplX3Qgc2l6ZSwgdm9pZCAqYXJnKTsKKworLyogcGFyYW1ldGVycyBmb3IgdGhlIGNoYW5u ZWwgaGFzaCB0YWJsZSAqLworc3RhdGljIGNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJzIGNoYW5u ZWxfZHNoX3BhcmFtcyA9IHsKKwlzaXplb2YoQ2hhbm5lbEhhc2hLZXkpLAorCXNpemVvZihD aGFubmVsRW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJY2hhbm5lbF9oYXNoX2Z1bmMsCisJ ZHNoYXNoX21lbWNweSwKKwlMV1RSQU5DSEVfTk9USUZZX0NIQU5ORUxfSEFTSAorfTsKKwor LyoKKyAqIGNoYW5uZWxfaGFzaF9mdW5jCisgKgkJSGFzaCBmdW5jdGlvbiBmb3IgY2hhbm5l bCBrZXlzLgorICovCitzdGF0aWMgZHNoYXNoX2hhc2gKK2NoYW5uZWxfaGFzaF9mdW5jKGNv bnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZykKK3sKKwljb25zdAkJQ2hh bm5lbEhhc2hLZXkgKmsgPSAoY29uc3QgQ2hhbm5lbEhhc2hLZXkgKikga2V5OworCWRzaGFz aF9oYXNoIGg7CisKKwloID0gRGF0dW1HZXRVSW50MzIoaGFzaF91aW50MzIoay0+ZGJvaWQp KTsKKwloIF49IERhdHVtR2V0VUludDMyKGhhc2hfYW55KChjb25zdCB1bnNpZ25lZCBjaGFy ICopIGstPmNoYW5uZWwsCisJCQkJCQkJCSBzdHJubGVuKGstPmNoYW5uZWwsIE5BTUVEQVRB TEVOKSkpOworCisJcmV0dXJuIGg7Cit9CisKKy8qCisgKiBpbml0X2NoYW5uZWxfaGFzaAor ICoJCUxhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNoYW5uZWwgaGFzaCB0YWJsZS4KKyAq Lworc3RhdGljIHZvaWQKK2luaXRfY2hhbm5lbF9oYXNoKHZvaWQpCit7CisJTWVtb3J5Q29u dGV4dCBvbGRjb250ZXh0OworCisJLyogUXVpY2sgZXhpdCBpZiB3ZSBhbHJlYWR5IGRpZCB0 aGlzICovCisJaWYgKGFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsX2hhc2hfZHNoICE9IERT SEFTSF9IQU5ETEVfSU5WQUxJRCAmJgorCQljaGFubmVsX2hhc2ggIT0gTlVMTCkKKwkJcmV0 dXJuOworCisJLyogT3RoZXJ3aXNlLCB1c2UgYSBsb2NrIHRvIGVuc3VyZSBvbmx5IG9uZSBw cm9jZXNzIGNyZWF0ZXMgdGhlIHRhYmxlICovCisJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1 ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKiBCZSBzdXJlIGFueSBsb2NhbCBtZW1vcnkg YWxsb2NhdGVkIGJ5IERTQSByb3V0aW5lcyBpcyBwZXJzaXN0ZW50ICovCisJb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKKworCWlmIChh c3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbF9oYXNoX2RzaCA9PSBEU0hBU0hfSEFORExFX0lO VkFMSUQpCisJeworCQkvKiBJbml0aWFsaXplIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUg Zm9yIGNoYW5uZWwgaGFzaCAqLworCQljaGFubmVsX2RzYSA9IGRzYV9jcmVhdGUoTFdUUkFO Q0hFX05PVElGWV9DSEFOTkVMX0hBU0gpOworCQlkc2FfcGluKGNoYW5uZWxfZHNhKTsKKwkJ ZHNhX3Bpbl9tYXBwaW5nKGNoYW5uZWxfZHNhKTsKKwkJY2hhbm5lbF9oYXNoID0gZHNoYXNo X2NyZWF0ZShjaGFubmVsX2RzYSwgJmNoYW5uZWxfZHNoX3BhcmFtcywgTlVMTCk7CisKKwkJ LyogU3RvcmUgaGFuZGxlcyBpbiBzaGFyZWQgbWVtb3J5IGZvciBvdGhlciBiYWNrZW5kcyB0 byB1c2UgKi8KKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxfaGFzaF9kc2EgPSBkc2Ff Z2V0X2hhbmRsZShjaGFubmVsX2RzYSk7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVs X2hhc2hfZHNoID0KKwkJCWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUoY2hhbm5lbF9o YXNoKTsKKwl9CisJZWxzZSBpZiAoIWNoYW5uZWxfaGFzaCkKKwl7CisJCS8qIEF0dGFjaCB0 byBleGlzdGluZyBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlICovCisJCWNoYW5uZWxfZHNh ID0gZHNhX2F0dGFjaChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbF9oYXNoX2RzYSk7CisJ CWRzYV9waW5fbWFwcGluZyhjaGFubmVsX2RzYSk7CisJCWNoYW5uZWxfaGFzaCA9IGRzaGFz aF9hdHRhY2goY2hhbm5lbF9kc2EsICZjaGFubmVsX2RzaF9wYXJhbXMsCisJCQkJCQkJCQkg YXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxfaGFzaF9kc2gsCisJCQkJCQkJCQkgTlVMTCk7 CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCUxXTG9ja1Jl bGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKK30KKwogI2RlZmluZSBRVUVVRV9IRUFECQkJCQko YXN5bmNRdWV1ZUNvbnRyb2wtPmhlYWQpCiAjZGVmaW5lIFFVRVVFX1RBSUwJCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+dGFpbCkKICNkZWZpbmUgUVVFVUVfU1RPUF9QQUdFCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+c3RvcFBhZ2UpCkBAIC0zMDEsNiArNDE1LDcgQEAgc3RhdGljIEFz eW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKICNkZWZpbmUgUVVFVUVfQkFD S0VORF9EQk9JRChpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmRib2lkKQog I2RlZmluZSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJh Y2tlbmRbaV0ubmV4dExpc3RlbmVyKQogI2RlZmluZSBRVUVVRV9CQUNLRU5EX1BPUyhpKQkJ KGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLnBvcykKKyNkZWZpbmUgUVVFVUVfQkFD S0VORF9XQUtFVVBfUEVORElORyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0u d2FrZXVwX3BlbmRpbmcpCiAKIC8qCiAgKiBUaGUgU0xSVSBidWZmZXIgYXJlYSB0aHJvdWdo IHdoaWNoIHdlIGFjY2VzcyB0aGUgbm90aWZpY2F0aW9uIHF1ZXVlCkBAIC00NTcsNiArNTcy LDExIEBAIHN0YXRpYyB2b2lkIEFkZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMoTm90aWZpY2F0 aW9uICpuKTsKIHN0YXRpYyB1aW50MzIgbm90aWZpY2F0aW9uX2hhc2goY29uc3Qgdm9pZCAq a2V5LCBTaXplIGtleXNpemUpOwogc3RhdGljIGludAlub3RpZmljYXRpb25fbWF0Y2goY29u c3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXplKTsKIHN0YXRp YyB2b2lkIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKTsKK3N0YXRpYyBp bmxpbmUgdm9pZCBDaGFubmVsSGFzaFByZXBhcmVLZXkoQ2hhbm5lbEhhc2hLZXkgKiBrZXks IE9pZCBkYm9pZCwgY29uc3QgY2hhciAqY2hhbm5lbCk7CitzdGF0aWMgdm9pZCBDaGFubmVs SGFzaEFkZExpc3RlbmVyKGNvbnN0IGNoYXIgKmNoYW5uZWwpOworc3RhdGljIHZvaWQgQ2hh bm5lbEhhc2hSZW1vdmVMaXN0ZW5lcihjb25zdCBjaGFyICpjaGFubmVsKTsKK3N0YXRpYyBD aGFubmVsRW50cnkgKiBDaGFubmVsSGFzaExvb2t1cChjb25zdCBjaGFyICpjaGFubmVsKTsK K3N0YXRpYyBMaXN0ICpHZXRQZW5kaW5nTm90aWZ5Q2hhbm5lbHModm9pZCk7CiAKIC8qCiAg KiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHF1ZXVlIHBhZ2UgbnVtYmVy cy4KQEAgLTUyMSwxMiArNjQxLDE2IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQpCiAJCVFVRVVF X1NUT1BfUEFHRSA9IDA7CiAJCVFVRVVFX0ZJUlNUX0xJU1RFTkVSID0gSU5WQUxJRF9QUk9D X05VTUJFUjsKIAkJYXN5bmNRdWV1ZUNvbnRyb2wtPmxhc3RRdWV1ZUZpbGxXYXJuID0gMDsK KwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxfaGFzaF9kc2EgPSBEU0FfSEFORExFX0lO VkFMSUQ7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsX2hhc2hfZHNoID0gRFNIQVNI X0hBTkRMRV9JTlZBTElEOworCiAJCWZvciAoaW50IGkgPSAwOyBpIDwgTWF4QmFja2VuZHM7 IGkrKykKIAkJewogCQkJUVVFVUVfQkFDS0VORF9QSUQoaSkgPSBJbnZhbGlkUGlkOwogCQkJ UVVFVUVfQkFDS0VORF9EQk9JRChpKSA9IEludmFsaWRPaWQ7CiAJCQlRVUVVRV9ORVhUX0xJ U1RFTkVSKGkpID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAkJCVNFVF9RVUVVRV9QT1MoUVVF VUVfQkFDS0VORF9QT1MoaSksIDAsIDApOworCQkJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVO RElORyhpKSA9IGZhbHNlOwogCQl9CiAJfQogCkBAIC0xMTUyLDYgKzEyNzYsNyBAQCBFeGVj X0xpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKQogCW9sZGNvbnRleHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CiAJbGlzdGVuQ2hhbm5lbHMg PSBsYXBwZW5kKGxpc3RlbkNoYW5uZWxzLCBwc3RyZHVwKGNoYW5uZWwpKTsKIAlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJQ2hhbm5lbEhhc2hBZGRMaXN0ZW5lcihj aGFubmVsKTsKIH0KIAogLyoKQEAgLTExNzUsNiArMTMwMCw3IEBAIEV4ZWNfVW5saXN0ZW5D b21taXQoY29uc3QgY2hhciAqY2hhbm5lbCkKIAkJewogCQkJbGlzdGVuQ2hhbm5lbHMgPSBm b3JlYWNoX2RlbGV0ZV9jdXJyZW50KGxpc3RlbkNoYW5uZWxzLCBxKTsKIAkJCXBmcmVlKGxj aGFuKTsKKwkJCUNoYW5uZWxIYXNoUmVtb3ZlTGlzdGVuZXIoY2hhbm5lbCk7CiAJCQlicmVh azsKIAkJfQogCX0KQEAgLTExOTMsOSArMTMxOSwxOCBAQCBFeGVjX1VubGlzdGVuQ29tbWl0 KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiBzdGF0aWMgdm9pZAogRXhlY19Vbmxpc3RlbkFsbENv bW1pdCh2b2lkKQogeworCUxpc3RDZWxsICAgKnA7CisKIAlpZiAoVHJhY2Vfbm90aWZ5KQog CQllbG9nKERFQlVHMSwgIkV4ZWNfVW5saXN0ZW5BbGxDb21taXQoJWQpIiwgTXlQcm9jUGlk KTsKIAorCWZvcmVhY2gocCwgbGlzdGVuQ2hhbm5lbHMpCisJeworCQljaGFyCSAgICpjaGFu bmVsID0gKGNoYXIgKikgbGZpcnN0KHApOworCisJCUNoYW5uZWxIYXNoUmVtb3ZlTGlzdGVu ZXIoY2hhbm5lbCk7CisJfQorCiAJbGlzdF9mcmVlX2RlZXAobGlzdGVuQ2hhbm5lbHMpOwog CWxpc3RlbkNoYW5uZWxzID0gTklMOwogfQpAQCAtMTU2NSwxMiArMTcwMCwxNiBAQCBhc3lu Y1F1ZXVlRmlsbFdhcm5pbmcodm9pZCkKIC8qCiAgKiBTZW5kIHNpZ25hbHMgdG8gbGlzdGVu aW5nIGJhY2tlbmRzLgogICoKLSAqIE5vcm1hbGx5IHdlIHNpZ25hbCBvbmx5IGJhY2tlbmRz IGluIG91ciBvd24gZGF0YWJhc2UsIHNpbmNlIG9ubHkgdGhvc2UKLSAqIGJhY2tlbmRzIGNv dWxkIGJlIGludGVyZXN0ZWQgaW4gbm90aWZpZXMgd2Ugc2VuZC4gIEhvd2V2ZXIsIGlmIHRo ZXJlJ3MKLSAqIG5vdGlmeSB0cmFmZmljIGluIG91ciBkYXRhYmFzZSBidXQgbm8gdHJhZmZp YyBpbiBhbm90aGVyIGRhdGFiYXNlIHRoYXQKLSAqIGRvZXMgaGF2ZSBsaXN0ZW5lcihzKSwg dGhvc2UgbGlzdGVuZXJzIHdpbGwgZmFsbCBmdXJ0aGVyIGFuZCBmdXJ0aGVyCi0gKiBiZWhp bmQuICBXYWtlbiB0aGVtIGFueXdheSBpZiB0aGV5J3JlIGZhciBlbm91Z2ggYmVoaW5kLCBz byB0aGF0IHRoZXknbGwKLSAqIGFkdmFuY2UgdGhlaXIgcXVldWUgcG9zaXRpb24gcG9pbnRl cnMsIGFsbG93aW5nIHRoZSBnbG9iYWwgdGFpbCB0byBhZHZhbmNlLgorICogTm9ybWFsbHkg d2Ugc2lnbmFsIG9ubHkgYmFja2VuZHMgcmVnaXN0ZXJlZCBhcyBsaXN0ZW5lcnMgZm9yIGNo YW5uZWxzCisgKiB3aXRoIHBlbmRpbmcgbm90aWZpY2F0aW9ucy4gIEhvd2V2ZXIsIHdoZW4g dGhlcmUgaXMgbm8gdHJhZmZpYyBvbiBzb21lCisgKiBjaGFubmVscywgbGlzdGVuZXJzIG9u IHN1Y2ggY2hhbm5lbHMgd2lsbCBmYWxsIGZ1cnRoZXIgYW5kIGZ1cnRoZXIKKyAqIGJlaGlu ZC4gIFdha2VuIHRoZW0gaWYgdGhleSBhcmUgdG9vIGZhciBiZWhpbmQsIHNvIHRoYXQgdGhl eSdsbAorICogYWR2YW5jZSB0aGVpciBxdWV1ZSBwb3NpdGlvbiBwb2ludGVycywgYWxsb3dp bmcgdGhlIGdsb2JhbCB0YWlsIHRvCisgKiBhZHZhbmNlLgorICoKKyAqIFRvIHN0YWdnZXIg d2FrZXVwcyBvZiBsYWdnaW5nIGJhY2tlbmRzLCB3YWtlIHRoZSBiYWNrZW5kIGZ1cnRoZXN0 CisgKiBiZWhpbmQgKGF0IHRoZSB0YWlsKSwgYW1vcnRpemluZyB0aGUgY29udGV4dC1zd2l0 Y2hpbmcgY29zdCBhY3Jvc3MKKyAqIHN1Y2Nlc3NpdmUgbm90aWZpY2F0aW9ucyBpbnN0ZWFk IG9mIHBheWluZyBpdCBhbGwgYXQgb25jZS4KICAqCiAgKiBTaW5jZSB3ZSBrbm93IHRoZSBQ cm9jTnVtYmVyIGFuZCB0aGUgUGlkIHRoZSBzaWduYWxpbmcgaXMgcXVpdGUgY2hlYXAuCiAg KgpAQCAtMTU4Myw2ICsxNzIyLDEwIEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJaW50MzIJ ICAgKnBpZHM7CiAJUHJvY051bWJlciAqcHJvY25vczsKIAlpbnQJCQljb3VudDsKKwlMaXN0 CSAgICpjaGFubmVsczsKKwlMaXN0Q2VsbCAgICpwOworCWJvb2wJICAgKnNpZ25hbGVkOwor CWludDY0CQlxdWV1ZV9sZW5ndGg7CiAKIAkvKgogCSAqIElkZW50aWZ5IGJhY2tlbmRzIHRo YXQgd2UgbmVlZCB0byBzaWduYWwuICBXZSBkb24ndCB3YW50IHRvIHNlbmQKQEAgLTE1OTQs MzkgKzE3MzcsMTEwIEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJICovCiAJcGlkcyA9IChp bnQzMiAqKSBwYWxsb2MoTWF4QmFja2VuZHMgKiBzaXplb2YoaW50MzIpKTsKIAlwcm9jbm9z ID0gKFByb2NOdW1iZXIgKikgcGFsbG9jKE1heEJhY2tlbmRzICogc2l6ZW9mKFByb2NOdW1i ZXIpKTsKKwlzaWduYWxlZCA9IChib29sICopIHBhbGxvYzAoTWF4QmFja2VuZHMgKiBzaXpl b2YoYm9vbCkpOwogCWNvdW50ID0gMDsKIAorCWNoYW5uZWxzID0gR2V0UGVuZGluZ05vdGlm eUNoYW5uZWxzKCk7CisKIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhD TFVTSVZFKTsKLQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBp ICE9IElOVkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQor CWZvcmVhY2gocCwgY2hhbm5lbHMpCiAJewotCQlpbnQzMgkJcGlkID0gUVVFVUVfQkFDS0VO RF9QSUQoaSk7Ci0JCVF1ZXVlUG9zaXRpb24gcG9zOworCQljaGFyCSAgICpjaGFubmVsID0g KGNoYXIgKikgbGZpcnN0KHApOworCQlDaGFubmVsRW50cnkgKmVudHJ5OworCQlQcm9jTnVt YmVyICpsaXN0ZW5lcnM7CiAKLQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKLQkJcG9z ID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7Ci0JCWlmIChRVUVVRV9CQUNLRU5EX0RCT0lEKGkp ID09IE15RGF0YWJhc2VJZCkKKwkJZW50cnkgPSBDaGFubmVsSGFzaExvb2t1cChjaGFubmVs KTsKKwkJaWYgKGVudHJ5ID09IE5VTEwpCisJCQljb250aW51ZTsJCQkvKiBObyBsaXN0ZW5l cnMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBjaGFubmVsICovCisKKwkJLyogR2V0IHRoZSBsaXN0 ZW5lciBhcnJheSBmcm9tIERTQSAqLworCQlsaXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBk c2FfZ2V0X2FkZHJlc3MoY2hhbm5lbF9kc2EsCisJCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlz dGVuZXJzX2FycmF5KTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IGVudHJ5LT5udW1fbGlz dGVuZXJzOyBqKyspCiAJCXsKLQkJCS8qCi0JCQkgKiBBbHdheXMgc2lnbmFsIGxpc3RlbmVy cyBpbiBvdXIgb3duIGRhdGFiYXNlLCB1bmxlc3MgdGhleSdyZQotCQkJICogYWxyZWFkeSBj YXVnaHQgdXAgKHVubGlrZWx5LCBidXQgcG9zc2libGUpLgotCQkJICovCisJCQlQcm9jTnVt YmVyCWkgPSBsaXN0ZW5lcnNbal07CisJCQlpbnQzMgkJcGlkOworCQkJUXVldWVQb3NpdGlv biBwb3M7CisKKwkJCWlmIChzaWduYWxlZFtpXSB8fCBRVUVVRV9CQUNLRU5EX1dBS0VVUF9Q RU5ESU5HKGkpKQorCQkJCWNvbnRpbnVlOworCisJCQlwb3MgPSBRVUVVRV9CQUNLRU5EX1BP UyhpKTsKKwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCisJCQkvKiBTa2lwIGlm IGNhdWdodCB1cCBvciB3cm9uZyBkYXRhYmFzZSAqLwogCQkJaWYgKFFVRVVFX1BPU19FUVVB TChwb3MsIFFVRVVFX0hFQUQpKQogCQkJCWNvbnRpbnVlOworCQkJaWYgKFFVRVVFX0JBQ0tF TkRfREJPSUQoaSkgIT0gTXlEYXRhYmFzZUlkKQorCQkJCWNvbnRpbnVlOworCisJCQlBc3Nl cnQocGlkICE9IEludmFsaWRQaWQpOworCisJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5E SU5HKGkpID0gdHJ1ZTsKKworCQkJcGlkc1tjb3VudF0gPSBwaWQ7CisJCQlwcm9jbm9zW2Nv dW50XSA9IGk7CisJCQlzaWduYWxlZFtpXSA9IHRydWU7CisJCQljb3VudCsrOwogCQl9Ci0J CWVsc2UKKworCQlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxfaGFzaCwgZW50cnkpOwor CX0KKworCXF1ZXVlX2xlbmd0aCA9IGFzeW5jUXVldWVQYWdlRGlmZihRVUVVRV9QT1NfUEFH RShRVUVVRV9IRUFEKSwKKwkJCQkJCQkJCSAgUVVFVUVfUE9TX1BBR0UoUVVFVUVfVEFJTCkp OworCisJLyogQ2hlY2sgZm9yIGxhZ2dpbmcgYmFja2VuZHMgd2hlbiB0aGUgcXVldWUgc3Bh bnMgbXVsdGlwbGUgcGFnZXMgKi8KKwlpZiAocXVldWVfbGVuZ3RoID4gMCkKKwl7CisJCWJv b2wJCXRhaWxfd29rZW4gPSBmYWxzZTsKKworCQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVF X0ZJUlNUX0xJU1RFTkVSOworCQkJIGkgIT0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwkJCSBp ID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKIAkJewotCQkJLyoKLQkJCSAqIExpc3RlbmVy cyBpbiBvdGhlciBkYXRhYmFzZXMgc2hvdWxkIGJlIHNpZ25hbGVkIG9ubHkgaWYgdGhleQot CQkJICogYXJlIGZhciBiZWhpbmQuCi0JCQkgKi8KLQkJCWlmIChhc3luY1F1ZXVlUGFnZURp ZmYoUVVFVUVfUE9TX1BBR0UoUVVFVUVfSEVBRCksCi0JCQkJCQkJCSAgIFFVRVVFX1BPU19Q QUdFKHBvcykpIDwgUVVFVUVfQ0xFQU5VUF9ERUxBWSkKKwkJCVF1ZXVlUG9zaXRpb24gcG9z OworCQkJaW50NjQJCWxhZzsKKwkJCWludDMyCQlwaWQ7CisKKwkJCWlmIChzaWduYWxlZFtp XSB8fCBRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpKQogCQkJCWNvbnRpbnVlOwor CisJCQlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsKKworCQkJLyogU2lnbmFsIG9uZSBi YWNrZW5kIHBvc2l0aW9uZWQgYXQgdGhlIGdsb2JhbCB0YWlsICovCisJCQlpZiAoIXRhaWxf d29rZW4gJiYgYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFVRVVFX1RBSUwp LAorCQkJCQkJCQkJCQkJICBRVUVVRV9QT1NfUEFHRShwb3MpKSA9PSAwKQorCQkJeworCQkJ CXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCQkJCUFzc2VydChwaWQgIT0gSW52YWxp ZFBpZCk7CisKKwkJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gdHJ1ZTsK KwkJCQlwaWRzW2NvdW50XSA9IHBpZDsKKwkJCQlwcm9jbm9zW2NvdW50XSA9IGk7CisJCQkJ c2lnbmFsZWRbaV0gPSB0cnVlOworCQkJCWNvdW50Kys7CisJCQkJdGFpbF93b2tlbiA9IHRy dWU7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWxhZyA9IGFzeW5jUXVldWVQYWdlRGlm ZihRVUVVRV9QT1NfUEFHRShRVUVVRV9IRUFEKSwKKwkJCQkJCQkJCSBRVUVVRV9QT1NfUEFH RShwb3MpKTsKKworCQkJLyogTmVlZCB0byBzaWduYWwgaWYgYSBiYWNrZW5kIGhhcyBmYWxs ZW4gdG9vIGZhciBiZWluZCAqLworCQkJaWYgKGxhZyA+PSBRVUVVRV9DTEVBTlVQX0RFTEFZ KQorCQkJeworCQkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCQkJCUFzc2VydChw aWQgIT0gSW52YWxpZFBpZCk7CisKKwkJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5H KGkpID0gdHJ1ZTsKKwkJCQlwaWRzW2NvdW50XSA9IHBpZDsKKwkJCQlwcm9jbm9zW2NvdW50 XSA9IGk7CisJCQkJc2lnbmFsZWRbaV0gPSB0cnVlOworCQkJCWNvdW50Kys7CisJCQl9CiAJ CX0KLQkJLyogT0ssIG5lZWQgdG8gc2lnbmFsIHRoaXMgb25lICovCi0JCXBpZHNbY291bnRd ID0gcGlkOwotCQlwcm9jbm9zW2NvdW50XSA9IGk7Ci0JCWNvdW50Kys7CiAJfQogCUxXTG9j a1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKIApAQCAtMTY1Nyw2ICsxODcxLDcgQEAgU2ln bmFsQmFja2VuZHModm9pZCkKIAogCXBmcmVlKHBpZHMpOwogCXBmcmVlKHByb2Nub3MpOwor CXBmcmVlKHNpZ25hbGVkKTsKIH0KIAogLyoKQEAgLTE4NjUsNiArMjA4MCw3IEBAIGFzeW5j UXVldWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lkKQogCUxXTG9ja0FjcXVpcmUoTm90aWZ5 UXVldWVMb2NrLCBMV19TSEFSRUQpOwogCS8qIEFzc2VydCBjaGVja3MgdGhhdCB3ZSBoYXZl IGEgdmFsaWQgc3RhdGUgZW50cnkgKi8KIAlBc3NlcnQoTXlQcm9jUGlkID09IFFVRVVFX0JB Q0tFTkRfUElEKE15UHJvY051bWJlcikpOworCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJ TkcoTXlQcm9jTnVtYmVyKSA9IGZhbHNlOwogCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKE15 UHJvY051bWJlcik7CiAJaGVhZCA9IFFVRVVFX0hFQUQ7CiAJTFdMb2NrUmVsZWFzZShOb3Rp ZnlRdWV1ZUxvY2spOwpAQCAtMjM5NSwzICsyNjExLDIxMSBAQCBjaGVja19ub3RpZnlfYnVm ZmVycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogewog CXJldHVybiBjaGVja19zbHJ1X2J1ZmZlcnMoIm5vdGlmeV9idWZmZXJzIiwgbmV3dmFsKTsK IH0KKworCisvKgorICogQ2hhbm5lbEhhc2hQcmVwYXJlS2V5CisgKgkJUHJlcGFyZSBhIGNo YW5uZWwga2V5IGZvciB1c2UgYXMgYSBoYXNoIGtleS4KKyAqLworc3RhdGljIGlubGluZSB2 b2lkCitDaGFubmVsSGFzaFByZXBhcmVLZXkoQ2hhbm5lbEhhc2hLZXkgKiBrZXksIE9pZCBk Ym9pZCwgY29uc3QgY2hhciAqY2hhbm5lbCkKK3sKKwltZW1zZXQoa2V5LCAwLCBzaXplb2Yo Q2hhbm5lbEhhc2hLZXkpKTsKKwlrZXktPmRib2lkID0gZGJvaWQ7CisJc3RybGNweShrZXkt PmNoYW5uZWwsIGNoYW5uZWwsIE5BTUVEQVRBTEVOKTsKK30KKworLyoKKyAqIENoYW5uZWxI YXNoQWRkTGlzdGVuZXIKKyAqICAgICBSZWdpc3RlciBhcyBhIGxpc3RlbmVyIGZvciB0aGUg c3BlY2lmaWVkIGNoYW5uZWwuCisgKi8KK3N0YXRpYyB2b2lkCitDaGFubmVsSGFzaEFkZExp c3RlbmVyKGNvbnN0IGNoYXIgKmNoYW5uZWwpCit7CisJQ2hhbm5lbEhhc2hLZXkga2V5Owor CUNoYW5uZWxFbnRyeSAqZW50cnk7CisJYm9vbAkJZm91bmQ7CisJUHJvY051bWJlciAqbGlz dGVuZXJzOworCisJaW5pdF9jaGFubmVsX2hhc2goKTsKKworCUNoYW5uZWxIYXNoUHJlcGFy ZUtleSgma2V5LCBNeURhdGFiYXNlSWQsIGNoYW5uZWwpOworCisJLyoKKwkgKiBGb3IgbmV3 IGVudHJpZXMsIHdlIGluaXRpYWxpemUgbGlzdGVuZXJzX2FycmF5IHRvIEludmFsaWREc2FQ b2ludGVyIGFzCisJICogYSBtYXJrZXIuIFRoaXMgaGFuZGxlcyBib3RoIHRoZSBpbml0aWFs IGNyZWF0aW9uIGFuZCBwb3RlbnRpYWwgcmV0cnkKKwkgKiBhZnRlciBPT00uCisJICovCisJ ZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQoY2hhbm5lbF9oYXNoLCAma2V5LCAmZm91 bmQpOworCisJaWYgKCFmb3VuZCkKKwkJZW50cnktPmxpc3RlbmVyc19hcnJheSA9IEludmFs aWREc2FQb2ludGVyOworCisJaWYgKCFEc2FQb2ludGVySXNWYWxpZChlbnRyeS0+bGlzdGVu ZXJzX2FycmF5KSkKKwl7CisJCS8qIEZpcnN0IGxpc3RlbmVyIGZvciB0aGlzIGNoYW5uZWwg Ki8KKwkJZW50cnktPmxpc3RlbmVyc19hcnJheSA9IGRzYV9hbGxvY2F0ZShjaGFubmVsX2Rz YSwKKwkJCQkJCQkJCQkJICBzaXplb2YoUHJvY051bWJlcikgKiBJTklUSUFMX0xJU1RFTkVS U19BUlJBWV9TSVpFKTsKKwkJZW50cnktPm51bV9saXN0ZW5lcnMgPSAwOworCQllbnRyeS0+ YWxsb2NhdGVkX2xpc3RlbmVycyA9IElOSVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkU7CisJ fQorCisJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5u ZWxfZHNhLAorCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzX2FycmF5KTsKKworCWZv ciAoaW50IGkgPSAwOyBpIDwgZW50cnktPm51bV9saXN0ZW5lcnM7IGkrKykKKwl7CisJCWlm IChsaXN0ZW5lcnNbaV0gPT0gTXlQcm9jTnVtYmVyKQorCQl7CisJCQlkc2hhc2hfcmVsZWFz ZV9sb2NrKGNoYW5uZWxfaGFzaCwgZW50cnkpOworCQkJcmV0dXJuOwkJCQkvKiBBbHJlYWR5 IHJlZ2lzdGVyZWQgKi8KKwkJfQorCX0KKworCS8qIE5lZWQgdG8gYWRkIHRoaXMgbGlzdGVu ZXIgKi8KKwlpZiAoZW50cnktPm51bV9saXN0ZW5lcnMgPj0gZW50cnktPmFsbG9jYXRlZF9s aXN0ZW5lcnMpCisJeworCQkvKiBHcm93IHRoZSBhcnJheSAoZG91YmxlIHRoZSBzaXplKSAq LworCQlpbnQJCQluZXdfc2l6ZSA9IGVudHJ5LT5hbGxvY2F0ZWRfbGlzdGVuZXJzICogMjsK KwkJZHNhX3BvaW50ZXIgbmV3X2FycmF5ID0gZHNhX2FsbG9jYXRlKGNoYW5uZWxfZHNhLAor CQkJCQkJCQkJCQkgc2l6ZW9mKFByb2NOdW1iZXIpICogbmV3X3NpemUpOworCQlQcm9jTnVt YmVyICpuZXdfbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNzKGNo YW5uZWxfZHNhLAorCQkJCQkJCQkJCQkJCQkJCSAgIG5ld19hcnJheSk7CisKKwkJLyogQ29w eSBleGlzdGluZyBsaXN0ZW5lcnMgKi8KKwkJbWVtY3B5KG5ld19saXN0ZW5lcnMsIGxpc3Rl bmVycywKKwkJCSAgIHNpemVvZihQcm9jTnVtYmVyKSAqIGVudHJ5LT5udW1fbGlzdGVuZXJz KTsKKworCQkvKiBGcmVlIG9sZCBhcnJheSBhbmQgdXBkYXRlIGVudHJ5ICovCisJCWRzYV9m cmVlKGNoYW5uZWxfZHNhLCBlbnRyeS0+bGlzdGVuZXJzX2FycmF5KTsKKwkJZW50cnktPmxp c3RlbmVyc19hcnJheSA9IG5ld19hcnJheTsKKwkJZW50cnktPmFsbG9jYXRlZF9saXN0ZW5l cnMgPSBuZXdfc2l6ZTsKKwkJbGlzdGVuZXJzID0gbmV3X2xpc3RlbmVyczsKKwl9CisKKwkv KiBBZGQgdGhlIG5ldyBsaXN0ZW5lciAqLworCWxpc3RlbmVyc1tlbnRyeS0+bnVtX2xpc3Rl bmVyc10gPSBNeVByb2NOdW1iZXI7CisJZW50cnktPm51bV9saXN0ZW5lcnMrKzsKKworCWRz aGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbF9oYXNoLCBlbnRyeSk7Cit9CisKKy8qCisgKiBD aGFubmVsSGFzaFJlbW92ZUxpc3RlbmVyCisgKgkJVW5yZWdpc3RlciBhcyBhIGxpc3RlbmVy IGZvciB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCisgKi8KK3N0YXRpYyB2b2lkCitDaGFubmVs SGFzaFJlbW92ZUxpc3RlbmVyKGNvbnN0IGNoYXIgKmNoYW5uZWwpCit7CisJQ2hhbm5lbEhh c2hLZXkga2V5OworCUNoYW5uZWxFbnRyeSAqZW50cnk7CisJUHJvY051bWJlciAqbGlzdGVu ZXJzOworCWludAkJCWk7CisKKwlpZiAoY2hhbm5lbF9oYXNoID09IE5VTEwpCisJCXJldHVy bjsKKworCWluaXRfY2hhbm5lbF9oYXNoKCk7CisKKwlDaGFubmVsSGFzaFByZXBhcmVLZXko JmtleSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKworCWVudHJ5ID0gZHNoYXNoX2ZpbmQo Y2hhbm5lbF9oYXNoLCAma2V5LCB0cnVlKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJcmV0 dXJuOworCisJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNzKGNo YW5uZWxfZHNhLAorCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzX2FycmF5KTsKKwor CWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bnVtX2xpc3RlbmVyczsgaSsrKQorCXsKKwkJaWYg KGxpc3RlbmVyc1tpXSA9PSBNeVByb2NOdW1iZXIpCisJCXsKKwkJCS8qIEZvdW5kIGl0LCBy ZW1vdmUgYnkgc2hpZnRpbmcgcmVtYWluaW5nIGVsZW1lbnRzICovCisJCQllbnRyeS0+bnVt X2xpc3RlbmVycy0tOworCQkJaWYgKGkgPCBlbnRyeS0+bnVtX2xpc3RlbmVycykKKwkJCXsK KwkJCQltZW1tb3ZlKCZsaXN0ZW5lcnNbaV0sICZsaXN0ZW5lcnNbaSArIDFdLAorCQkJCQkJ c2l6ZW9mKFByb2NOdW1iZXIpICogKGVudHJ5LT5udW1fbGlzdGVuZXJzIC0gaSkpOworCQkJ fQorCisJCQlpZiAoZW50cnktPm51bV9saXN0ZW5lcnMgPT0gMCkKKwkJCXsKKwkJCQlkc2Ff ZnJlZShjaGFubmVsX2RzYSwgZW50cnktPmxpc3RlbmVyc19hcnJheSk7CisJCQkJZHNoYXNo X2RlbGV0ZV9lbnRyeShjaGFubmVsX2hhc2gsIGVudHJ5KTsKKwkJCX0KKwkJCWVsc2UKKwkJ CXsKKwkJCQlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxfaGFzaCwgZW50cnkpOworCQkJ fQorCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogTm90IGZvdW5kIGluIGxpc3QgKi8KKwlk c2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxfaGFzaCwgZW50cnkpOworfQorCisvKgorICog Q2hhbm5lbEhhc2hMb29rdXAKKyAqCQlGaW5kIHRoZSBoYXNoIGVudHJ5IGZvciBhIGNoYW5u ZWwuCisgKgorICogUmV0dXJucyBOVUxMIGlmIG5vIGhhc2ggZW50cnkgZXhpc3RzIGZvciB0 aGUgY2hhbm5lbC4KKyAqIENhbGxlciBtdXN0IGNhbGwgZHNoYXNoX3JlbGVhc2VfbG9jaygp IHdoZW4gZG9uZSB3aXRoIHRoZSBlbnRyeS4KKyAqLworc3RhdGljIENoYW5uZWxFbnRyeSAq CitDaGFubmVsSGFzaExvb2t1cChjb25zdCBjaGFyICpjaGFubmVsKQoreworCUNoYW5uZWxI YXNoS2V5IGtleTsKKwlDaGFubmVsRW50cnkgKnJlc3VsdDsKKworCS8qIEhhc2ggbWF5IG5v dCBiZSBpbml0aWFsaXplZCAqLworCWlmIChjaGFubmVsX2hhc2ggPT0gTlVMTCkKKwkJcmV0 dXJuIE5VTEw7CisKKwlpbml0X2NoYW5uZWxfaGFzaCgpOworCisJQ2hhbm5lbEhhc2hQcmVw YXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisKKwlyZXN1bHQgPSBkc2hh c2hfZmluZChjaGFubmVsX2hhc2gsICZrZXksIGZhbHNlKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBHZXRQZW5kaW5nTm90aWZ5Q2hhbm5lbHMKKyAqCQlHZXQgbGlzdCBv ZiB1bmlxdWUgY2hhbm5lbCBuYW1lcyBmcm9tIHBlbmRpbmcgbm90aWZpY2F0aW9ucy4KKyAq Lworc3RhdGljIExpc3QgKgorR2V0UGVuZGluZ05vdGlmeUNoYW5uZWxzKHZvaWQpCit7CisJ TGlzdAkgICAqY2hhbm5lbHMgPSBOSUw7CisJTGlzdENlbGwgICAqcDsKKwlMaXN0Q2VsbCAg ICpxOworCWJvb2wJCWZvdW5kOworCisJaWYgKCFwZW5kaW5nTm90aWZpZXMpCisJCXJldHVy biBOSUw7CisKKwlmb3JlYWNoKHAsIHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzKQorCXsKKwkJ Tm90aWZpY2F0aW9uICpuID0gKE5vdGlmaWNhdGlvbiAqKSBsZmlyc3QocCk7CisJCWNoYXIJ ICAgKmNoYW5uZWwgPSBuLT5kYXRhOworCisJCWZvdW5kID0gZmFsc2U7CisJCWZvcmVhY2go cSwgY2hhbm5lbHMpCisJCXsKKwkJCWNoYXIJICAgKmV4aXN0aW5nID0gKGNoYXIgKikgbGZp cnN0KHEpOworCisJCQlpZiAoc3RyY21wKGV4aXN0aW5nLCBjaGFubmVsKSA9PSAwKQorCQkJ eworCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICgh Zm91bmQpCisJCQljaGFubmVscyA9IGxhcHBlbmQoY2hhbm5lbHMsIGNoYW5uZWwpOworCX0K KworCXJldHVybiBjaGFubmVsczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKaW5kZXggNzU1M2Y2ZWFjZWYuLmE0ZmFkYmQw NzY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50 X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50 X25hbWVzLnR4dApAQCAtMzY2LDYgKzM2Niw3IEBAIFN1YnRyYW5zQnVmZmVyCSJXYWl0aW5n IGZvciBJL08gb24gYSBzdWItdHJhbnNhY3Rpb24gU0xSVSBidWZmZXIuIgogTXVsdGlYYWN0 T2Zmc2V0QnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBtdWx0aXhhY3Qgb2Zmc2V0IFNM UlUgYnVmZmVyLiIKIE11bHRpWGFjdE1lbWJlckJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9u IGEgbXVsdGl4YWN0IG1lbWJlciBTTFJVIGJ1ZmZlci4iCiBOb3RpZnlCdWZmZXIJIldhaXRp bmcgZm9yIEkvTyBvbiBhIDxjb21tYW5kPk5PVElGWTwvY29tbWFuZD4gbWVzc2FnZSBTTFJV IGJ1ZmZlci4iCitOb3RpZnlDaGFubmVsSGFzaAkiV2FpdGluZyB0byBhY2Nlc3MgdGhlIDxj b21tYW5kPk5PVElGWTwvY29tbWFuZD4gY2hhbm5lbCBoYXNoIHRhYmxlLiIKIFNlcmlhbEJ1 ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgc2VyaWFsaXphYmxlIHRyYW5zYWN0aW9uIGNv bmZsaWN0IFNMUlUgYnVmZmVyLiIKIFdBTEluc2VydAkiV2FpdGluZyB0byBpbnNlcnQgV0FM IGRhdGEgaW50byBhIG1lbW9yeSBidWZmZXIuIgogQnVmZmVyQ29udGVudAkiV2FpdGluZyB0 byBhY2Nlc3MgYSBkYXRhIHBhZ2UgaW4gbWVtb3J5LiIKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2ts aXN0LmgKaW5kZXggMDZhMWZmZDRiMDguLjI3NjhkZGY0NDE0IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2x3bG9ja2xpc3QuaApAQCAtMTAwLDYgKzEwMCw3IEBAIFBHX0xXTE9DS1RSQU5DSEUoU1VC VFJBTlNfQlVGRkVSLCBTdWJ0cmFuc0J1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTVVMVElY QUNUT0ZGU0VUX0JVRkZFUiwgTXVsdGlYYWN0T2Zmc2V0QnVmZmVyKQogUEdfTFdMT0NLVFJB TkNIRShNVUxUSVhBQ1RNRU1CRVJfQlVGRkVSLCBNdWx0aVhhY3RNZW1iZXJCdWZmZXIpCiBQ R19MV0xPQ0tUUkFOQ0hFKE5PVElGWV9CVUZGRVIsIE5vdGlmeUJ1ZmZlcikKK1BHX0xXTE9D S1RSQU5DSEUoTk9USUZZX0NIQU5ORUxfSEFTSCwgTm90aWZ5Q2hhbm5lbEhhc2gpCiBQR19M V0xPQ0tUUkFOQ0hFKFNFUklBTF9CVUZGRVIsIFNlcmlhbEJ1ZmZlcikKIFBHX0xXTE9DS1RS QU5DSEUoV0FMX0lOU0VSVCwgV0FMSW5zZXJ0KQogUEdfTFdMT0NLVFJBTkNIRShCVUZGRVJf Q09OVEVOVCwgQnVmZmVyQ29udGVudCkKLS0gCjIuNTAuMQoK --5d8febe1578a480abe926659d4e99a38--