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 1vGRrY-00FMHP-Ow for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Nov 2025 00:59:00 +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 1vGRrX-00HBcD-OK for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Nov 2025 00:58:58 +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.94.2) (envelope-from ) id 1vGRrW-00HBbw-EC for pgsql-hackers@lists.postgresql.org; Wed, 05 Nov 2025 00:58:58 +0000 Received: from fout-a3-smtp.messagingengine.com ([103.168.172.146]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vGRrT-005Ui9-0Z for pgsql-hackers@postgresql.org; Wed, 05 Nov 2025 00:58:56 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfout.phl.internal (Postfix) with ESMTP id 1456BEC0580; Tue, 4 Nov 2025 19:58:54 -0500 (EST) Received: from phl-imap-16 ([10.202.2.88]) by phl-compute-05.internal (MEProxy); Tue, 04 Nov 2025 19:58:54 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1762304334; x=1762390734; bh=RCqt98/fu0 PSg3qwJf82N+0PxESwcE/P5R6ZZ3T1W28=; b=MFjmNGmZ+ZmU141Q8TSNLc1ajC RbHOpMV6lXQCAWD+kryoyeL43gE3jnasHSYDWwABJH2F2SEVhGTjnJZiL3zq0RA2 3ERzUi4Bj5Jid+KZzeuUfIwUCKDuiVhB99efIrsoLofWUJiLn0oAKg2inktDIoMd NDAdH9ZtQ7fDaUtOKcTXVeQKjaDidQalWbltNo4bnyX6uf/YNiILqAmxU7d2c8cw xKE8qTrdRpLe0Ig6Uh9h6xvDkLDIawFFN5/EYdE72y6G7qkdxEkB9yh7dSGnLMf9 Tx9eDQzs2HUbVi/HBoCbTTdDDQ+wS3z2DlmZCCrHzgEbm/4OFwOYQvHgrFxQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1762304334; x=1762390734; bh=RCqt98/fu0PSg3qwJf82N+0PxESwcE/P5R6 ZZ3T1W28=; b=mOVLxBpflyi5OmznS9NySM0eD2L+drFSEmDNr7xvNvb6/gepf4o 9RA/WHxRGBaVQ9V6oYDLcYIFCz8qf52FgF9b8SkKViSCNEmiT1YNDe8aNEWZrGUn DI+Rw4DyUGJuB6ihKYp3y0XBWNHyw+uloIhzKA6Nt43DRzelF0ogukcH2nhcBYsG 2Pj7cnKdqKlHgX2k2JW4rM+hgTU7IqaPs+zBJEVOsChRICARJunggsNlzsclZJzT bWAFy9RXHZ/ST9trrczU9ixYgYqcgVWGLAP3ctXz+99Ju4m8bQ+dGSA5qDK7J/eC WFxfQ/ddIMFTgE4YnUV4iwy+itS3rcdnm+Q== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddukedvhedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepfffgleffffdvhefhieegfeeije dujedvieeuveeugefgveeukeevieethefhteeinecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnh gspghrtghpthhtohepfedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtoheprghrshgv nhhihidrmhhukhhhihhnrdguvghvsehgmhgrihhlrdgtohhmpdhrtghpthhtoheplhhird gvvhgrnhdrtghhrghosehgmhgrihhlrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgr tghkvghrshesphhoshhtghhrvghsqhhlrdhorhhg X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 74B3F2CC0083; Tue, 4 Nov 2025 19:58:53 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Wed, 05 Nov 2025 01:58:23 +0100 From: "Joel Jacobson" To: "Arseniy Mukhin" , "Chao Li" Cc: pgsql-hackers Message-Id: <12c08e29-c21c-4a3d-a269-a48a1a26b18d@app.fastmail.com> 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-F22FC34!29AE8@gmail.com> <1547585.1760645808@sss.pgh.pa.us> <14865EB6-0BF4-462B-9072-10BDAC10C052@gmail.com> <0BCA1C2D-B92C-459E-B1A6-6D06BA4C62CF@gmail.com> <55d24cbb-e9ef-491f-a99b-b3dbd7cecdf9@app.fastmail.com> <38574cad-e90d-47b7-a015-753bb6bbc360@app.fastmail.com> <66631FB7-5BEA-4ED5-A694-9AD8B9CCFEE8@gmail.com> <4b7b49a5-5e1a-44a8-93e0-60457d15cb1d@app.fastmail.com> <82DEA2B6-6FC5-4A79-BDE3-1FD72F104A6E@gmail.com> <38de1036-d8cf-420c-b845-edb5a946b191@app.fastmail.com> <87E40BF8-8877-4DBD-9040-99AF8A4E6358@gmail.com> <7556f0d4-03fd-451a-bd34-5f62b424319a@app.fastmail.com> <290910DE-9A03-4AE6-B348-073D5DA96ACC@gmail.com> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=edfc78871cd043de954e5dc4e63935b3 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --edfc78871cd043de954e5dc4e63935b3 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sat, Nov 1, 2025, at 21:41, Arseniy Mukhin wrote: > Thank you for working on this! There are few points about 'direct > advancement' part: Thanks for reviewing! > Looks like the bug with truncating of the queue is gone, advancingPos > does the trick, great. > > Maybe I missed something, but I failed to find an example where we can > take advantage of advisoryPos: > > SignalBackends(void) > ... > > if (QUEUE_POS_EQUAL(pos, queueHeadBeforeWrite)) > { > ... > if (!QUEUE_BACKEND_ADVANCING_POS(i)) > QUEUE_BACKEND_POS(i) = queueHeadAfterWrite; > else if (QUEUE_POS_PRECEDES(advisoryPos, queueHeadAfterWrite)) > QUEUE_BACKEND_ADVISORY_POS(i) = queueHeadAfterWrite; > } > > We update advisoryPos if: > 1) listener's advancingPos is true > 2) listener's pos equals queueHeadBeforeWrite > > (1) means the listener is currently reading. (2) means notifications > that the listener is currently reading belong to us (or it's even > possible that the listener is reading notifications that were added in > the queue after ours). And since the listener is reading, it will only > see updated advancingPos in the PG_FINALLY, where listener's pos will > already be >= queueHeadAfterWrite (as result of reading). > > > This condition seems to be redundant. I would say it should always be > true, otherwise it would mean that somebody allowed the listener to > skip our notification. > > else if (QUEUE_POS_PRECEDES(advisoryPos, queueHeadAfterWrite)) Ohhh, right! I agree with your reasoning; it's dead code. This means we can remove the advisoryPos altogether, with the benefit of making the code even simpler. That's what I've done in v22, among some other changes. Changes since v22: * Optimize listening on thousands of channels per backend by replacing the listenChannels List with a local hash table, renamed to listenChannelsHash to avoid confusion. * Removed advisoryPos, since it was not actually used. We only needed advancingPos to fix the bug with truncation of the queue. It's possible that the bottleneck in some workloads is no longer the wakeups, but I'm not sure yet; I'll do some more benchmarking to get a better understanding of whether it would be worthwhile to pursue further optimization. * Removed asyncQueuePageDiff, since it's no longer used. Benchmark to demonstrate the effect of the listenChannelsHash: % gcc -Wall -Wextra -O2 -pthread -I/Users/joel/pg19/include/postgresql/server -I/Users/joel/pg19/include -o async-notify-test-4 async-notify-test-4.c -L/Users/joel/pg19/lib -lpq -pthread -lm v21: % ./async-notify-test-4 --listeners 1 --notifiers 1 --channels 1 --extra-channels=10000 10 s: 1286593 sent (130036/s), 437822 received (44121/s) 0.00-0.01ms 0 (0.0%) avg: 0.000ms 0.01-0.10ms # 1 (0.0%) avg: 0.099ms 0.10-1.00ms # 39 (0.0%) avg: 0.576ms 1.00-10.00ms # 395 (0.1%) avg: 6.005ms 10.00-100.00ms # 6186 (1.4%) avg: 52.880mss >100.00ms ######### 431214 (98.5%) avg: 3379.928ms v22: % ./async-notify-test-4 --listeners 1 --notifiers 1 --channels 1 --extra-channels=10000 10 s: 879208 sent (87704/s), 879207 received (87703/s) 0.00-0.01ms # 31 (0.0%) avg: 0.009ms 0.01-0.10ms ######### 879012 (100.0%) avg: 0.016ms 0.10-1.00ms # 157 (0.0%) avg: 0.155ms 1.00-10.00ms # 7 (0.0%) avg: 2.913ms 10.00-100.00ms # 1 (0.0%) avg: 11.457ms >100.00ms 0 (0.0%) avg: 0.000ms /Joel --edfc78871cd043de954e5dc4e63935b3 Content-Disposition: attachment; filename="async-notify-test-4.c" Content-Type: application/octet-stream; name="async-notify-test-4.c" Content-Transfer-Encoding: base64 LyoKICogUGxhdGZvcm0gZGV0ZWN0aW9uIGZvciBJL08gbXVsdGlwbGV4aW5nLgogKgogKiBU byBtYW51YWxseSBvdmVycmlkZSwgYWRkIG9uZSBvZiB0aGVzZSBhdCB0aGUgdmVyeSB0b3Ag b2YgdGhpcyBmaWxlOgogKiAgICNkZWZpbmUgVVNFX0tRVUVVRSAgICAocmVxdWlyZXMga3F1 ZXVlIHN1cHBvcnQ6IG1hY09TLCBGcmVlQlNELCBldGMuKQogKiAgICNkZWZpbmUgVVNFX1BQ T0xMICAgICAocmVxdWlyZXMgcHBvbGwgc3VwcG9ydDogTGludXgsIGV0Yy4pCiAqCiAqIE5v dGU6IEVuc3VyZSB0aGUgY2hvc2VuIG1ldGhvZCBpcyBhdmFpbGFibGUgb24geW91ciBwbGF0 Zm9ybSwgb3IgeW91J2xsCiAqIGdldCBjb21waWxhdGlvbiBlcnJvcnMuCiAqLwojaWYgIWRl ZmluZWQoVVNFX0tRVUVVRSkgJiYgIWRlZmluZWQoVVNFX1BQT0xMKQojIGlmIGRlZmluZWQo X19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJT RF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCiMgIGRlZmluZSBVU0VfS1FVRVVFCiMgZWxz ZQojICBkZWZpbmUgVVNFX1BQT0xMCiMgZW5kaWYKI2VuZGlmCgojaW5jbHVkZSA8c3RkaW8u aD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxl cnJuby5oPgojaWZkZWYgVVNFX0tRVUVVRQojaW5jbHVkZSA8c3lzL2V2ZW50Lmg+CiNlbmRp ZgojaWZkZWYgVVNFX1BQT0xMCiNpbmNsdWRlIDxwb2xsLmg+CiNlbmRpZgojaW5jbHVkZSA8 c3lzL3RpbWUuaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8dW5pc3RkLmg+ CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2luY2x1ZGUgPGdldG9wdC5oPgojaW5jbHVkZSA8cHRo cmVhZC5oPgojaW5jbHVkZSA8bWF0aC5oPgoKI2luY2x1ZGUgImxpYnBxLWZlLmgiCgojZGVm aW5lIFBHX1RJTUVfR0VUX0RPVUJMRSh0KSAoMC4wMDAwMDEgKiAodCkpCiNkZWZpbmUgQ09O TkVDVElPTl9TVFJJTkcgInBvc3RncmVzcWw6Ly8vcG9zdGdyZXMiCiNkZWZpbmUgTUFYX05P VElGSUVSUyAyNTYgIC8qIE1heGltdW0gbm90aWZpZXJzIHBlciBjaGFubmVsIGZvciBzZXF1 ZW5jZSB0cmFja2luZyAqLwoKLyogTGF0ZW5jeSBoaXN0b2dyYW0gYnVja2V0cyAqLwojZGVm aW5lIE5VTV9CVUNLRVRTIDYKc3RhdGljIHVpbnQ2NF90IGJ1Y2tldF9jb3VudHNbTlVNX0JV Q0tFVFNdOwpzdGF0aWMgdWludDY0X3QgYnVja2V0X3RvdGFsc1tOVU1fQlVDS0VUU107ICAv KiBUb3RhbCBsYXRlbmN5IGluIG1pY3Jvc2Vjb25kcyAqLwpzdGF0aWMgcHRocmVhZF9tdXRl eF90IGhpc3RvZ3JhbV9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CgpzdGF0 aWMgdWludDMyX3QgbnVtX25vdGlmaWVzX3NlbnQ7CnN0YXRpYyB1aW50MzJfdCBudW1fbm90 aWZpZXNfcmVjZWl2ZWQ7CnN0YXRpYyB2b2xhdGlsZSBpbnQgc3RhcnRfbm90aWZ5aW5nID0g MDsgIC8qIFNpZ25hbCBmb3Igbm90aWZpZXJzIHRvIHN0YXJ0ICovCgovKiBTeW5jaHJvbml6 YXRpb24gZm9yIGxpc3RlbmVyIExJU1RFTiBzZXR1cCAqLwpzdGF0aWMgaW50IGxpc3RlbmVy c19yZWFkeSA9IDA7CnN0YXRpYyBwdGhyZWFkX211dGV4X3Qgc3RhcnR1cF9tdXRleCA9IFBU SFJFQURfTVVURVhfSU5JVElBTElaRVI7CnN0YXRpYyBwdGhyZWFkX2NvbmRfdCBzdGFydHVw X2NvbmQgPSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVI7CgovKiAtLWV4dHJhLWNoYW5uZWxz IGFyZ3VtZW50ICovCnN0YXRpYyBpbnQJCQludW1fZXh0cmFfY2hhbm5lbHMgPSAwOwoKLyog VGhyZWFkIGFyZ3VtZW50cyBzdHJ1Y3R1cmUgKi8Kc3RydWN0IHRocmVhZF9hcmdzIHsKCWlu dCBjaGFubmVsX2lkOwoJaW50IG5vdGlmaWVyX2lkOyAgLyogSUQgb2Ygbm90aWZpZXIgd2l0 aGluIGNoYW5uZWwgKDAgdG8gbnVtX25vdGlmeV90aHJlYWRzLTEpICovCglpbnQgbnVtX25v dGlmaWVyczsgIC8qIFRvdGFsIG51bWJlciBvZiBub3RpZmllcnMgcGVyIGNoYW5uZWwgKi8K CWludCB0b3RhbF9saXN0ZW5lcnM7ICAvKiBUb3RhbCBudW1iZXIgb2YgbGlzdGVuZXIgdGhy ZWFkcyAoYWxsIGNoYW5uZWxzKSAqLwoJdWludDY0X3QgKnNlcV9jb3VudGVyOyAgLyogUG9p bnRlciB0byB0aGlzIG5vdGlmaWVyJ3Mgc2VxdWVuY2UgY291bnRlciAqLwp9OwoKdHlwZWRl ZiBpbnQ2NF90IHBnX3RpbWVfdXNlY190OwoKc3RhdGljIGlubGluZSBwZ190aW1lX3VzZWNf dApwZ190aW1lX25vdyh2b2lkKQp7CglzdHJ1Y3QgdGltZXZhbCB0djsKCglnZXR0aW1lb2Zk YXkoJnR2LCBOVUxMKTsKCglyZXR1cm4gKHBnX3RpbWVfdXNlY190KSAodHYudHZfc2VjICog MTAwMDAwMCArIHR2LnR2X3VzZWMpOwp9CgpzdGF0aWMgdm9pZApleGl0X25pY2VseShQR2Nv bm4gKmNvbm4pCnsKCVBRZmluaXNoKGNvbm4pOwoJZXhpdCgxKTsKfQoKc3RhdGljIGludApn ZXRfbGF0ZW5jeV9idWNrZXQoZG91YmxlIGxhdGVuY3lfbXMpCnsKCS8qIEJ1Y2tldHM6IDAt MC4wMW1zLCAwLjAxLTAuMW1zLCAwLjEtMW1zLCAxLTEwbXMsIDEwLTEwMG1zLCA+MTAwbXMg Ki8KCWlmIChsYXRlbmN5X21zIDwgMC4wMSkKCQlyZXR1cm4gMDsKCWVsc2UgaWYgKGxhdGVu Y3lfbXMgPCAwLjEpCgkJcmV0dXJuIDE7CgllbHNlIGlmIChsYXRlbmN5X21zIDwgMS4wKQoJ CXJldHVybiAyOwoJZWxzZSBpZiAobGF0ZW5jeV9tcyA8IDEwLjApCgkJcmV0dXJuIDM7Cgll bHNlIGlmIChsYXRlbmN5X21zIDwgMTAwLjApCgkJcmV0dXJuIDQ7CgllbHNlCgkJcmV0dXJu IDU7Cn0KCnN0YXRpYyB2b2lkCnVwZGF0ZV9oaXN0b2dyYW0odWludDY0X3QgbGF0ZW5jeV91 c2VjKQp7Cglkb3VibGUgbGF0ZW5jeV9tcyA9IGxhdGVuY3lfdXNlYyAvIDEwMDAuMDsKCWlu dCBidWNrZXQgPSBnZXRfbGF0ZW5jeV9idWNrZXQobGF0ZW5jeV9tcyk7CgoJcHRocmVhZF9t dXRleF9sb2NrKCZoaXN0b2dyYW1fbXV0ZXgpOwoJYnVja2V0X2NvdW50c1tidWNrZXRdKys7 CglidWNrZXRfdG90YWxzW2J1Y2tldF0gKz0gbGF0ZW5jeV91c2VjOwoJcHRocmVhZF9tdXRl eF91bmxvY2soJmhpc3RvZ3JhbV9tdXRleCk7Cn0KCnN0YXRpYyB2b2lkICoKbm90aWZ5X3Ro cmVhZF9tYWluKHZvaWQgKmFyZykKewoJc3RydWN0IHRocmVhZF9hcmdzICphcmdzID0gKHN0 cnVjdCB0aHJlYWRfYXJncyAqKWFyZzsKCWludCBjaGFubmVsX2lkID0gYXJncy0+Y2hhbm5l bF9pZDsKCWludCBub3RpZmllcl9pZCA9IGFyZ3MtPm5vdGlmaWVyX2lkOwoJdWludDY0X3Qg KnNlcV9jb3VudGVyID0gYXJncy0+c2VxX2NvdW50ZXI7CglQR2Nvbm4JICAgKmNvbm47CglQ R3Jlc3VsdCAgICpyZXM7CgljaGFyCQljaGFubmVsX25hbWVbMzJdOwoKCS8qIEdlbmVyYXRl IGNoYW5uZWwgbmFtZSBmcm9tIGNoYW5uZWxfaWQgKi8KCXNucHJpbnRmKGNoYW5uZWxfbmFt ZSwgc2l6ZW9mKGNoYW5uZWxfbmFtZSksICIlZCIsIGNoYW5uZWxfaWQpOwoKCS8qIE1ha2Ug YSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhYmFzZSAqLwoJY29ubiA9IFBRY29ubmVjdGRiKENP Tk5FQ1RJT05fU1RSSU5HKTsKCgkvKiBDaGVjayB0byBzZWUgdGhhdCB0aGUgYmFja2VuZCBj b25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLwoJaWYgKFBRc3RhdHVzKGNvbm4p ICE9IENPTk5FQ1RJT05fT0spCgl7CgkJZnByaW50ZihzdGRlcnIsICIlcyIsIFBRZXJyb3JN ZXNzYWdlKGNvbm4pKTsKCQlleGl0X25pY2VseShjb25uKTsKCX0KCgkvKiBXYWl0IGZvciBz aWduYWwgdG8gc3RhcnQgbm90aWZ5aW5nICovCgl3aGlsZSAoIXN0YXJ0X25vdGlmeWluZykK CQl1c2xlZXAoMTAwMDApOyAgLyogU2xlZXAgMTBtcyAqLwoKCWZvcig7OykKCXsKCQljaGFy IGJ1ZlsxMjhdOwoJCXBnX3RpbWVfdXNlY190IHNlbmRfdGltZTsKCQl1aW50NjRfdCBzZXE7 CgoJCS8qIEdldCB0aW1lc3RhbXAgYmVmb3JlIHNlbmRpbmcgKi8KCQlzZW5kX3RpbWUgPSBw Z190aW1lX25vdygpOwoKCQkvKiBBdG9taWNhbGx5IGdldCBhbmQgaW5jcmVtZW50IHRoaXMg bm90aWZpZXIncyBzZXF1ZW5jZSBjb3VudGVyICovCgkJc2VxID0gX19zeW5jX2ZldGNoX2Fu ZF9hZGQoc2VxX2NvdW50ZXIsIDEpOwoKCQkvKiBTZW5kIG5vdGlmaWNhdGlvbiB3aXRoIG5v dGlmaWVyX2lkLCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB0aW1lc3RhbXAgKi8KCQlzbnByaW50 ZihidWYsIHNpemVvZihidWYpLCAiTk9USUZZIFwiJXNcIiwgJyVkICVsbGQgJWxsZCciLAoJ CQkJIGNoYW5uZWxfbmFtZSwgbm90aWZpZXJfaWQsIChsb25nIGxvbmcpc2VxLCAobG9uZyBs b25nKXNlbmRfdGltZSk7CgkJcmVzID0gUFFleGVjKGNvbm4sIGJ1Zik7CgkJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKCQl7CgkJCWZwcmludGYoc3Rk ZXJyLCAiTk9USUZZIGNvbW1hbmQgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4p KTsKCQkJUFFjbGVhcihyZXMpOwoJCQlleGl0X25pY2VseShjb25uKTsKCQl9CgkJUFFjbGVh cihyZXMpOwoKCQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmbnVtX25vdGlmaWVzX3NlbnQsIDEp OwoJfQp9CgpzdGF0aWMgdm9pZCAqCmxpc3Rlbl90aHJlYWRfbWFpbih2b2lkICphcmcpCnsK CXN0cnVjdCB0aHJlYWRfYXJncyAqYXJncyA9IChzdHJ1Y3QgdGhyZWFkX2FyZ3MgKilhcmc7 CglpbnQgY2hhbm5lbF9pZCA9IGFyZ3MtPmNoYW5uZWxfaWQ7CglpbnQgbnVtX25vdGlmaWVy cyA9IGFyZ3MtPm51bV9ub3RpZmllcnM7CglQR2Nvbm4JICAgKmNvbm47CglQR3Jlc3VsdCAg ICpyZXM7CglQR25vdGlmeSAgICpub3RpZnk7Cgl1aW50NjRfdAlleHBlY3RlZF9zZXFbTUFY X05PVElGSUVSU107CgljaGFyCQljaGFubmVsX25hbWVbMzJdOwoJY2hhcgkJbGlzdGVuX2Nt ZFs2NF07CgoJLyogSW5pdGlhbGl6ZSBleHBlY3RlZCBzZXF1ZW5jZSBmb3IgZWFjaCBub3Rp ZmllciAqLwoJZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfTk9USUZJRVJTOyBpKyspCgkJZXhw ZWN0ZWRfc2VxW2ldID0gMDsKCgkvKiBHZW5lcmF0ZSBjaGFubmVsIG5hbWUgZnJvbSBjaGFu bmVsX2lkICovCglzbnByaW50ZihjaGFubmVsX25hbWUsIHNpemVvZihjaGFubmVsX25hbWUp LCAiJWQiLCBjaGFubmVsX2lkKTsKCgkvKiBNYWtlIGEgY29ubmVjdGlvbiB0byB0aGUgZGF0 YWJhc2UgKi8KCWNvbm4gPSBQUWNvbm5lY3RkYihDT05ORUNUSU9OX1NUUklORyk7CgoJLyog Q2hlY2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1 bGx5IG1hZGUgKi8KCWlmIChQUXN0YXR1cyhjb25uKSAhPSBDT05ORUNUSU9OX09LKQoJewoJ CWZwcmludGYoc3RkZXJyLCAiJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CgkJZXhpdF9u aWNlbHkoY29ubik7Cgl9CgoKCS8qCgkgKiBJc3N1ZSBMSVNURU4gY29tbWFuZCBmb3IgImV4 dHJhIiBjaGFubmVscy4gVGhlIGV4dHJhIGNoYW5uZWxzIGFyZSBuZXZlcgoJICogbm90aWZp ZWQsIHRoZXkncmUgdXNlZCBqdXN0IHRvIGJsb2F0IHRoZSBsaXN0IG9mIGNoYW5uZWxzIHRo YXQgbm90aWZ5CgkgKiBwcm9jZXNzaW5nIG5lZWRzIHRvIHRyYXZlcnNlLgoJICovCglmb3Ig KGludCBpID0gMDsgaSA8IG51bV9leHRyYV9jaGFubmVsczsgaSsrKQoJewoJCXNucHJpbnRm KGxpc3Rlbl9jbWQsIHNpemVvZihsaXN0ZW5fY21kKSwgIkxJU1RFTiBcImV4dHJhJWRcIiIs IGkpOwoJCXJlcyA9IFBRZXhlYyhjb25uLCBsaXN0ZW5fY21kKTsKCQlpZiAoUFFyZXN1bHRT dGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQoJCXsKCQkJZnByaW50ZihzdGRlcnIs ICJMSVNURU4gY29tbWFuZCBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwoJ CQlQUWNsZWFyKHJlcyk7CgkJCWV4aXRfbmljZWx5KGNvbm4pOwoJCX0KCQlQUWNsZWFyKHJl cyk7Cgl9CgoJLyoKCSAqIElzc3VlIExJU1RFTiBjb21tYW5kIHRvIGVuYWJsZSBub3RpZmlj YXRpb25zIGZyb20gdGhlIHJ1bGUncyBOT1RJRlkuCgkgKi8KCXNucHJpbnRmKGxpc3Rlbl9j bWQsIHNpemVvZihsaXN0ZW5fY21kKSwgIkxJU1RFTiBcIiVzXCIiLCBjaGFubmVsX25hbWUp OwoJcmVzID0gUFFleGVjKGNvbm4sIGxpc3Rlbl9jbWQpOwoJaWYgKFBRcmVzdWx0U3RhdHVz KHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKCXsKCQlmcHJpbnRmKHN0ZGVyciwgIkxJU1RF TiBjb21tYW5kIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CgkJUFFjbGVh cihyZXMpOwoJCWV4aXRfbmljZWx5KGNvbm4pOwoJfQoJUFFjbGVhcihyZXMpOwoKCS8qIFNp Z25hbCB0aGF0IHRoaXMgbGlzdGVuZXIgaXMgcmVhZHkgKi8KCXB0aHJlYWRfbXV0ZXhfbG9j aygmc3RhcnR1cF9tdXRleCk7CglsaXN0ZW5lcnNfcmVhZHkrKzsKCWlmIChsaXN0ZW5lcnNf cmVhZHkgPT0gYXJncy0+dG90YWxfbGlzdGVuZXJzKQoJCXB0aHJlYWRfY29uZF9zaWduYWwo JnN0YXJ0dXBfY29uZCk7ICAvKiBXYWtlIG1haW4gdGhyZWFkIGlmIHdlJ3JlIHRoZSBsYXN0 ICovCglwdGhyZWFkX211dGV4X3VubG9jaygmc3RhcnR1cF9tdXRleCk7CgoJZm9yICg7OykK CXsKCQkvKgoJCSAqIFNsZWVwIHVudGlsIHNvbWV0aGluZyBoYXBwZW5zIG9uIHRoZSBjb25u ZWN0aW9uLiAgV2UgdXNlIGtxdWV1ZSgyKQoJCSAqIG9uIG1hY09TL0JTRCBmb3IgYmV0dGVy IHBlcmZvcm1hbmNlIGFuZCBzY2FsYWJpbGl0eSwgb3IgcHBvbGwoMikgb24KCQkgKiBvdGhl ciBwbGF0Zm9ybXMuIEJvdGggYXZvaWQgdGhlIEZEX1NFVFNJWkUgbGltaXRhdGlvbiBvZiBz ZWxlY3QoKS4KCQkgKi8KCQlpbnQJCQlzb2NrOwoKCQlzb2NrID0gUFFzb2NrZXQoY29ubik7 CgoJCWlmIChzb2NrIDwgMCkKCQkJYnJlYWs7CQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8K CiNpZmRlZiBVU0VfS1FVRVVFCgkJLyogVXNlIGtxdWV1ZSBmb3IgYmV0dGVyIHBlcmZvcm1h bmNlIGFuZCBzY2FsYWJpbGl0eSAqLwoJCWludCBrcTsKCQlzdHJ1Y3Qga2V2ZW50IGtldjsK CQlzdHJ1Y3Qga2V2ZW50IGV2ZW50OwoKCQlrcSA9IGtxdWV1ZSgpOwoJCWlmIChrcSA8IDAp CgkJewoJCQlmcHJpbnRmKHN0ZGVyciwgImtxdWV1ZSgpIGZhaWxlZDogJXNcbiIsIHN0cmVy cm9yKGVycm5vKSk7CgkJCWV4aXRfbmljZWx5KGNvbm4pOwoJCX0KCgkJLyogTW9uaXRvciB0 aGUgc29ja2V0IGZvciByZWFkIGV2ZW50cyAqLwoJCUVWX1NFVCgma2V2LCBzb2NrLCBFVkZJ TFRfUkVBRCwgRVZfQUREIHwgRVZfT05FU0hPVCwgMCwgMCwgTlVMTCk7CgoJCS8qIFdhaXQg aW5kZWZpbml0ZWx5IGZvciBhbiBldmVudCAqLwoJCWlmIChrZXZlbnQoa3EsICZrZXYsIDEs ICZldmVudCwgMSwgTlVMTCkgPCAwKQoJCXsKCQkJZnByaW50ZihzdGRlcnIsICJrZXZlbnQo KSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwoJCQljbG9zZShrcSk7CgkJCWV4 aXRfbmljZWx5KGNvbm4pOwoJCX0KCgkJY2xvc2Uoa3EpOwojZWxpZiBkZWZpbmVkKFVTRV9Q UE9MTCkKCQkvKiBVc2UgcHBvbGwgKG5hbm9zZWNvbmQgcmVzb2x1dGlvbikgKi8KCQlzdHJ1 Y3QgcG9sbGZkIHBmZDsKCgkJcGZkLmZkID0gc29jazsKCQlwZmQuZXZlbnRzID0gUE9MTElO OwoJCXBmZC5yZXZlbnRzID0gMDsKCgkJaWYgKHBwb2xsKCZwZmQsIDEsIE5VTEwsIE5VTEwp IDwgMCkKCQl7CgkJCWZwcmludGYoc3RkZXJyLCAicHBvbGwoKSBmYWlsZWQ6ICVzXG4iLCBz dHJlcnJvcihlcnJubykpOwoJCQlleGl0X25pY2VseShjb25uKTsKCQl9CiNlbHNlCiMgZXJy b3IgIk5vIEkvTyBtdWx0aXBsZXhpbmcgbWV0aG9kIGRlZmluZWQuIERlZmluZSBVU0VfS1FV RVVFIG9yIFVTRV9QUE9MTC4iCiNlbmRpZgoKCQkvKiBOb3cgY2hlY2sgZm9yIGlucHV0ICov CgkJUFFjb25zdW1lSW5wdXQoY29ubik7CgkJd2hpbGUgKChub3RpZnkgPSBQUW5vdGlmaWVz KGNvbm4pKSAhPSBOVUxMKQoJCXsKCQkJcGdfdGltZV91c2VjX3QgcmVjdl90aW1lOwoJCQlw Z190aW1lX3VzZWNfdCBzZW5kX3RpbWU7CgkJCWludCBub3RpZmllcl9pZDsKCQkJdWludDY0 X3Qgc2VxOwoJCQl1aW50NjRfdCBsYXRlbmN5X3VzZWM7CgoJCQkvKiBHZXQgcmVjZWl2ZSB0 aW1lc3RhbXAgKi8KCQkJcmVjdl90aW1lID0gcGdfdGltZV9ub3coKTsKCgkJCS8qIFBhcnNl IG5vdGlmaWVyX2lkLCBzZXF1ZW5jZSBudW1iZXIsIGFuZCBzZW5kIHRpbWVzdGFtcCBmcm9t IHBheWxvYWQgKi8KCQkJaWYgKG5vdGlmeS0+ZXh0cmEgJiYgbm90aWZ5LT5leHRyYVswXSkK CQkJewoJCQkJaWYgKHNzY2FuZihub3RpZnktPmV4dHJhLCAiJWQgJWxsZCAlbGxkIiwgJm5v dGlmaWVyX2lkLCAobG9uZyBsb25nICopJnNlcSwgKGxvbmcgbG9uZyAqKSZzZW5kX3RpbWUp ID09IDMpCgkJCQl7CgkJCQkJLyogVmFsaWRhdGUgbm90aWZpZXJfaWQgKi8KCQkJCQlpZiAo bm90aWZpZXJfaWQgPCAwIHx8IG5vdGlmaWVyX2lkID49IG51bV9ub3RpZmllcnMpCgkJCQkJ ewoJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuRVJST1I6IENoYW5uZWwgJWQgcmVjZWl2ZWQg aW52YWxpZCBub3RpZmllcl9pZCAlZCAoZXhwZWN0ZWQgMC0lZClcbiIsCgkJCQkJCQkJY2hh bm5lbF9pZCwgbm90aWZpZXJfaWQsIG51bV9ub3RpZmllcnMgLSAxKTsKCQkJCQkJYWJvcnQo KTsKCQkJCQl9CgoJCQkJCS8qIFZlcmlmeSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbm90 aWZpZXIgKi8KCQkJCQlpZiAoc2VxICE9IGV4cGVjdGVkX3NlcVtub3RpZmllcl9pZF0pCgkJ CQkJewoJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuRVJST1I6IENoYW5uZWwgJWQgbm90aWZp ZXIgJWQgc2VxdWVuY2UgZ2FwISBFeHBlY3RlZCAlbGxkLCByZWNlaXZlZCAlbGxkXG4iLAoJ CQkJCQkJCWNoYW5uZWxfaWQsIG5vdGlmaWVyX2lkLCAobG9uZyBsb25nKWV4cGVjdGVkX3Nl cVtub3RpZmllcl9pZF0sIChsb25nIGxvbmcpc2VxKTsKCQkJCQkJYWJvcnQoKTsKCQkJCQl9 CgkJCQkJZXhwZWN0ZWRfc2VxW25vdGlmaWVyX2lkXSsrOwoKCQkJCQlsYXRlbmN5X3VzZWMg PSByZWN2X3RpbWUgLSBzZW5kX3RpbWU7CgoJCQkJCS8qIFVwZGF0ZSBoaXN0b2dyYW0gKi8K CQkJCQl1cGRhdGVfaGlzdG9ncmFtKGxhdGVuY3lfdXNlYyk7CgkJCQl9CgkJCX0KCgkJCVBR ZnJlZW1lbShub3RpZnkpOwoJCQlQUWNvbnN1bWVJbnB1dChjb25uKTsKCgkJCV9fc3luY19m ZXRjaF9hbmRfYWRkKCZudW1fbm90aWZpZXNfcmVjZWl2ZWQsIDEpOwoJCX0KCX0KCglyZXR1 cm4gTlVMTDsKfQoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CglpbnQJCQlu dW1fdGhyZWFkcyA9IDA7CglwdGhyZWFkX3QgICp0aHJlYWRzOwoJcGdfdGltZV91c2VjX3Qg c3RhcnQ7CglzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKCQkvKiBz eXN0ZW1hdGljIGxvbmcvc2hvcnQgbmFtZWQgb3B0aW9ucyAqLwoJCXsibGlzdGVuZXJzIiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDF9LAoJCXsibm90aWZpZXJzIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsIDJ9LAoJCXsiY2hhbm5lbHMiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgM30sCgkJeyJleHRyYS1jaGFubmVscyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCA0fSwKCQl7TlVMTCwgMCwgTlVMTCwgMH0KCX07CglpbnQJCQludW1fbGlzdGVuX3RocmVh ZHMgPSAxOwoJaW50CQkJbnVtX25vdGlmeV90aHJlYWRzID0gMTsKCWludAkJCW51bV9jaGFu bmVscyA9IDE7CglpbnQJCQlvcHRpbmRleDsKCWludAkJCWM7CgoJd2hpbGUgKChjID0gZ2V0 b3B0X2xvbmcoYXJnYywgYXJndiwgIiIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0g LTEpCgl7CgkJc3dpdGNoIChjKQoJCXsKCQkJY2FzZSAxOgkJCQkvKiBsaXN0ZW5lcnMgKi8K CQkJCW51bV9saXN0ZW5fdGhyZWFkcyA9IGF0b2kob3B0YXJnKTsKCQkJCWlmIChudW1fbGlz dGVuX3RocmVhZHMgPCAxKQoJCQkJewoJCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCAt LWxpc3RlbmVycyBhcmd1bWVudFxuIik7CgkJCQkJZXhpdCgxKTsKCQkJCX0KCQkJCWJyZWFr OwoKCQkJY2FzZSAyOgkJCQkvKiBub3RpZmllcnMgKi8KCQkJCW51bV9ub3RpZnlfdGhyZWFk cyA9IGF0b2kob3B0YXJnKTsKCQkJCWlmIChudW1fbm90aWZ5X3RocmVhZHMgPCAxKQoJCQkJ ewoJCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCAtLW5vdGlmaWVycyBhcmd1bWVudFxu Iik7CgkJCQkJZXhpdCgxKTsKCQkJCX0KCQkJCWJyZWFrOwoKCQkJY2FzZSAzOgkJCQkvKiBj aGFubmVscyAqLwoJCQkJbnVtX2NoYW5uZWxzID0gYXRvaShvcHRhcmcpOwoJCQkJaWYgKG51 bV9jaGFubmVscyA8IDEpCgkJCQl7CgkJCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIC0t Y2hhbm5lbHMgYXJndW1lbnRcbiIpOwoJCQkJCWV4aXQoMSk7CgkJCQl9CgkJCQlicmVhazsK CgkJCWNhc2UgNDoJCQkJLyogZXh0cmEtY2hhbm5lbHMgKi8KCQkJCW51bV9leHRyYV9jaGFu bmVscyA9IGF0b2kob3B0YXJnKTsKCQkJCWlmIChudW1fZXh0cmFfY2hhbm5lbHMgPCAwKQoJ CQkJewoJCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCAtLWV4dHJhLWNoYW5uZWxzIGFy Z3VtZW50XG4iKTsKCQkJCQlleGl0KDEpOwoJCQkJfQoJCQkJYnJlYWs7CgkJfQoJfQoKCWlu dCB0b3RhbF90aHJlYWRzID0gbnVtX2NoYW5uZWxzICogKG51bV9ub3RpZnlfdGhyZWFkcyAr IG51bV9saXN0ZW5fdGhyZWFkcyk7Cgl0aHJlYWRzID0gbWFsbG9jKHRvdGFsX3RocmVhZHMg KiBzaXplb2YocHRocmVhZF90KSk7CglzdHJ1Y3QgdGhyZWFkX2FyZ3MgKnRocmVhZF9hcmdz X2FycmF5ID0gbWFsbG9jKHRvdGFsX3RocmVhZHMgKiBzaXplb2Yoc3RydWN0IHRocmVhZF9h cmdzKSk7CgoJLyogQWxsb2NhdGUgc2VxdWVuY2UgY291bnRlcnMgZm9yIGVhY2ggbm90aWZp ZXIgdGhyZWFkIChpbml0aWFsaXplZCB0byAwKSAqLwoJdWludDY0X3QgKm5vdGlmaWVyX3Nl cXMgPSBjYWxsb2MobnVtX2NoYW5uZWxzICogbnVtX25vdGlmeV90aHJlYWRzLCBzaXplb2Yo dWludDY0X3QpKTsKCgkvKiBTcGF3biB0aHJlYWRzIGZvciBlYWNoIGNoYW5uZWwgKi8KCWZv ciAoaW50IGNoYW5uZWxfaWQgPSAwOyBjaGFubmVsX2lkIDwgbnVtX2NoYW5uZWxzOyBjaGFu bmVsX2lkKyspCgl7CgkJLyogU3Bhd24gbm90aWZpZXIgdGhyZWFkcyBmb3IgdGhpcyBjaGFu bmVsICovCgkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fbm90aWZ5X3RocmVhZHM7IGkrKykK CQl7CgkJCWludAkJCXM7CgkJCWludAkJCW5vdGlmaWVyX2luZGV4ID0gY2hhbm5lbF9pZCAq IG51bV9ub3RpZnlfdGhyZWFkcyArIGk7CgoJCQl0aHJlYWRfYXJnc19hcnJheVtudW1fdGhy ZWFkc10uY2hhbm5lbF9pZCA9IGNoYW5uZWxfaWQ7CgkJCXRocmVhZF9hcmdzX2FycmF5W251 bV90aHJlYWRzXS5ub3RpZmllcl9pZCA9IGk7CgkJCXRocmVhZF9hcmdzX2FycmF5W251bV90 aHJlYWRzXS5udW1fbm90aWZpZXJzID0gbnVtX25vdGlmeV90aHJlYWRzOwoJCQl0aHJlYWRf YXJnc19hcnJheVtudW1fdGhyZWFkc10udG90YWxfbGlzdGVuZXJzID0gbnVtX2NoYW5uZWxz ICogbnVtX2xpc3Rlbl90aHJlYWRzOwoJCQl0aHJlYWRfYXJnc19hcnJheVtudW1fdGhyZWFk c10uc2VxX2NvdW50ZXIgPSAmbm90aWZpZXJfc2Vxc1tub3RpZmllcl9pbmRleF07CgkJCXMg PSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tudW1fdGhyZWFkc10sIE5VTEwsCgkJCQkJCQkg ICAmbm90aWZ5X3RocmVhZF9tYWluLCAmdGhyZWFkX2FyZ3NfYXJyYXlbbnVtX3RocmVhZHNd KTsKCQkJaWYgKHMgIT0gMCkKCQkJewoJCQkJZnByaW50ZihzdGRlcnIsICJwdGhyZWFkX2Ny ZWF0ZSBmYWlsZWRcbiIpOwoJCQkJZXhpdCgxKTsKCQkJfQoJCQludW1fdGhyZWFkcysrOwoJ CX0KCgkJLyogU3Bhd24gbGlzdGVuZXIgdGhyZWFkcyBmb3IgdGhpcyBjaGFubmVsICovCgkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1fbGlzdGVuX3RocmVhZHM7IGkrKykKCQl7CgkJCWlu dAkJCXM7CgoJCQl0aHJlYWRfYXJnc19hcnJheVtudW1fdGhyZWFkc10uY2hhbm5lbF9pZCA9 IGNoYW5uZWxfaWQ7CgkJCXRocmVhZF9hcmdzX2FycmF5W251bV90aHJlYWRzXS5ub3RpZmll cl9pZCA9IC0xOyAgLyogTm90IHVzZWQgZm9yIGxpc3RlbmVycyAqLwoJCQl0aHJlYWRfYXJn c19hcnJheVtudW1fdGhyZWFkc10ubnVtX25vdGlmaWVycyA9IG51bV9ub3RpZnlfdGhyZWFk czsKCQkJdGhyZWFkX2FyZ3NfYXJyYXlbbnVtX3RocmVhZHNdLnRvdGFsX2xpc3RlbmVycyA9 IG51bV9jaGFubmVscyAqIG51bV9saXN0ZW5fdGhyZWFkczsKCQkJdGhyZWFkX2FyZ3NfYXJy YXlbbnVtX3RocmVhZHNdLnNlcV9jb3VudGVyID0gTlVMTDsgIC8qIE5vdCB1c2VkIGZvciBs aXN0ZW5lcnMgKi8KCQkJcyA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW251bV90aHJlYWRz XSwgTlVMTCwKCQkJCQkJCSAgICZsaXN0ZW5fdGhyZWFkX21haW4sICZ0aHJlYWRfYXJnc19h cnJheVtudW1fdGhyZWFkc10pOwoJCQlpZiAocyAhPSAwKQoJCQl7CgkJCQlmcHJpbnRmKHN0 ZGVyciwgInB0aHJlYWRfY3JlYXRlIGZhaWxlZFxuIik7CgkJCQlleGl0KDEpOwoJCQl9CgkJ CW51bV90aHJlYWRzKys7CgkJfQoJfQoKCS8qIFdhaXQgZm9yIGFsbCBsaXN0ZW5lcnMgdG8g ZXN0YWJsaXNoIExJU1RFTiBiZWZvcmUgbm90aWZpZXJzIHN0YXJ0IHNlbmRpbmcgKi8KCXB0 aHJlYWRfbXV0ZXhfbG9jaygmc3RhcnR1cF9tdXRleCk7Cgl3aGlsZSAobGlzdGVuZXJzX3Jl YWR5IDwgbnVtX2NoYW5uZWxzICogbnVtX2xpc3Rlbl90aHJlYWRzKQoJCXB0aHJlYWRfY29u ZF93YWl0KCZzdGFydHVwX2NvbmQsICZzdGFydHVwX211dGV4KTsKCXB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZzdGFydHVwX211dGV4KTsKCgkvKiBTaWduYWwgbm90aWZpZXJzIHRvIHN0YXJ0 ICovCglzdGFydF9ub3RpZnlpbmcgPSAxOwoKCXN0YXJ0ID0gcGdfdGltZV9ub3coKTsKCgl1 aW50MzJfdCBwcmV2X3NlbnQgPSAwOwoJdWludDMyX3QgcHJldl9yZWNlaXZlZCA9IDA7Cglp bnQgZmlyc3RfaXRlcmF0aW9uID0gMTsKCglmb3IgKDs7KQoJewoJCWRvdWJsZQkJZWxhcHNl ZF9zZWM7CgkJdWludDMyX3QJY3Vycl9zZW50OwoJCXVpbnQzMl90CWN1cnJfcmVjZWl2ZWQ7 CgkJdWludDMyX3QJc2VudF9wZXJfc2VjOwoJCXVpbnQzMl90CXJlY2VpdmVkX3Blcl9zZWM7 CgoJCXNsZWVwKDEpOwoKCQkvKiBNb3ZlIGN1cnNvciBiYWNrIHVwIGJlZm9yZSBwcmludGlu ZyAoZXhjZXB0IGZpcnN0IHRpbWUpICovCgkJaWYgKCFmaXJzdF9pdGVyYXRpb24pCgkJCWZw cmludGYoc3RkZXJyLCAiXDAzM1slZEFcciIsIE5VTV9CVUNLRVRTICsgMSk7CgkJZmlyc3Rf aXRlcmF0aW9uID0gMDsKCgkJZWxhcHNlZF9zZWMgPSBQR19USU1FX0dFVF9ET1VCTEUocGdf dGltZV9ub3coKSAtIHN0YXJ0KTsKCgkJY3Vycl9zZW50ID0gbnVtX25vdGlmaWVzX3NlbnQ7 CgkJY3Vycl9yZWNlaXZlZCA9IG51bV9ub3RpZmllc19yZWNlaXZlZDsKCQlzZW50X3Blcl9z ZWMgPSBjdXJyX3NlbnQgLSBwcmV2X3NlbnQ7CgkJcmVjZWl2ZWRfcGVyX3NlYyA9IGN1cnJf cmVjZWl2ZWQgLSBwcmV2X3JlY2VpdmVkOwoKCQkvKiBQcmludCBzdGF0cyBvbiBzYW1lIGxp bmUgKi8KCQlmcHJpbnRmKHN0ZGVyciwgIlxyJS4wZiBzOiAldSBzZW50ICgldS9zKSwgJXUg cmVjZWl2ZWQgKCV1L3MpICAgICIsCgkJCQllbGFwc2VkX3NlYywgY3Vycl9zZW50LCBzZW50 X3Blcl9zZWMsIGN1cnJfcmVjZWl2ZWQsIHJlY2VpdmVkX3Blcl9zZWMpOwoKCQkvKiBQcmlu dCBoaXN0b2dyYW0gKi8KCQlwdGhyZWFkX211dGV4X2xvY2soJmhpc3RvZ3JhbV9tdXRleCk7 CgoJCXVpbnQ2NF90IHRvdGFsX21lYXN1cmVkID0gMDsKCQlmb3IgKGludCBpID0gMDsgaSA8 IE5VTV9CVUNLRVRTOyBpKyspCgkJCXRvdGFsX21lYXN1cmVkICs9IGJ1Y2tldF9jb3VudHNb aV07CgoJCWlmICh0b3RhbF9tZWFzdXJlZCA+IDApCgkJewoJCQljb25zdCBjaGFyICpidWNr ZXRfbGFiZWxzW10gPSB7CgkJCQkiIDAuMDAtMC4wMW1zICAgIiwKCQkJCSIgMC4wMS0wLjEw bXMgICAiLAoJCQkJIiAwLjEwLTEuMDBtcyAgICIsCgkJCQkiIDEuMDAtMTAuMDBtcyAgIiwK CQkJCSIgMTAuMDAtMTAwLjAwbXMiLAoJCQkJIj4xMDAuMDBtcyAgICAgIgoJCQl9OwoKCQkJ ZnByaW50ZihzdGRlcnIsICJcbiIpOwoJCQlmb3IgKGludCBpID0gMDsgaSA8IE5VTV9CVUNL RVRTOyBpKyspCgkJCXsKCQkJCXVpbnQ2NF90IGNvdW50ID0gYnVja2V0X2NvdW50c1tpXTsK CQkJCWRvdWJsZSBwZXJjZW50YWdlID0gKGNvdW50ICogMTAwLjApIC8gdG90YWxfbWVhc3Vy ZWQ7CgkJCQlkb3VibGUgYXZnX2xhdGVuY3lfbXMgPSAwLjA7CgoJCQkJaWYgKGNvdW50ID4g MCkKCQkJCQlhdmdfbGF0ZW5jeV9tcyA9IChidWNrZXRfdG90YWxzW2ldIC8gMTAwMC4wKSAv IGNvdW50OwoKCQkJCS8qIERyYXcgYmFyIGNoYXJ0IChtYXggMTAgY2hhcnMpICovCgkJCQlp bnQgYmFyX2xlbmd0aCA9IChpbnQpKChjb3VudCAqIDEwKSAvIHRvdGFsX21lYXN1cmVkKTsK CQkJCWlmIChiYXJfbGVuZ3RoID09IDAgJiYgY291bnQgPiAwKQoJCQkJCWJhcl9sZW5ndGgg PSAxOwoKCQkJCWZwcmludGYoc3RkZXJyLCAiJXMgICIsIGJ1Y2tldF9sYWJlbHNbaV0pOwoJ CQkJZm9yIChpbnQgaiA9IDA7IGogPCBiYXJfbGVuZ3RoOyBqKyspCgkJCQkJZnByaW50Zihz dGRlcnIsICIjIik7CgkJCQlmb3IgKGludCBqID0gYmFyX2xlbmd0aDsgaiA8IDEwOyBqKysp CgkJCQkJZnByaW50ZihzdGRlcnIsICIgIik7CgoJCQkJZnByaW50ZihzdGRlcnIsICIgJWxs dSAoJS4xZiUlKSBhdmc6ICUuM2Ztc1xuIiwKCQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylj b3VudCwgcGVyY2VudGFnZSwgYXZnX2xhdGVuY3lfbXMpOwoJCQl9CgkJfQoKCQlwdGhyZWFk X211dGV4X3VubG9jaygmaGlzdG9ncmFtX211dGV4KTsKCQlmZmx1c2goc3RkZXJyKTsKCgkJ cHJldl9zZW50ID0gY3Vycl9zZW50OwoJCXByZXZfcmVjZWl2ZWQgPSBjdXJyX3JlY2VpdmVk OwoJfQoKCXJldHVybiAwOwp9Cg== --edfc78871cd043de954e5dc4e63935b3 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v23.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v23.patch?=" Content-Transfer-Encoding: base64 RnJvbSBmYjgyMjEwODE0OWVhMDFmYTI1YTQ2ZjFhNGMwYmE3MWY4NmUxYTJiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogV2VkLCA4IE9jdCAyMDI1IDA5OjMwOjU0ICswMjAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIEltcHJvdmUgTElTVEVOL05PVElGWSB0ZXN0IGNvdmVyYWdlCgpUaGlzIGFkZHMg aXNvbGF0aW9uIHRlc3RzIHRvIGNvdmVyIHByZXZpb3VzbHkgdW50ZXN0ZWQgY29kZSBwYXRo czoKCiogQ2hlY2sgc2ltcGxlIE5PVElGWSByZXBhcmVudGluZyB3aGVuIHBhcmVudCBoYXMg bm8gYWN0aW9uCiogQ2hlY2sgTElTVEVOIHJlcGFyZW50aW5nIGluIHN1YnRyYW5zYWN0aW9u CiogQ2hlY2sgTElTVEVOIG1lcmdlIHBhdGggd2hlbiBib3RoIG91dGVyIGFuZCBpbm5lciB0 cmFuc2FjdGlvbnMgaGF2ZSBhY3Rpb25zCiogQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJP TExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpCiogQ2hlY2sg bm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2VyZWQgYnkgaGFzaCB0YWJsZSBk dXBsaWNhdGUgZGV0ZWN0aW9uKQoqIENoZWNrIHRoYXQgbm90aWZpY2F0aW9ucyBzZW50IGZy b20gYSBiYWNrZW5kIHRoYXQgaGFzIG5vdCBkb25lIExJU1RFTgogIGFyZSBwcm9wZXJseSBk ZWxpdmVyZWQgdG8gYSBsaXN0ZW5lciBpbiBhbm90aGVyIGJhY2tlbmQKClRoaXMgYWxzbyBh ZGRzIGEgdGVzdCB0byBwcmVwYXJlIGZvciB0aGUgbmV4dCBwYXRjaDoKCiogQ2hlY2sgQ2hh bm5lbEhhc2hBZGRMaXN0ZW5lciBhcnJheSBncm93dGgKLS0tCiBzcmMvdGVzdC9pc29sYXRp b24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dCB8IDExNCArKysrKysrKysrKysrKysrKyst CiBzcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvYXN5bmMtbm90aWZ5LnNwZWMgICB8ICA2OCAr KysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxODEgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9hc3lu Yy1ub3RpZnkub3V0IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlm eS5vdXQKaW5kZXggNTU2ZTE4MDU4OTMuLjQ0M2E2ZWI2NjlmIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dAorKysgYi9zcmMvdGVz dC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dApAQCAtMSw0ICsxLDQgQEAK LVBhcnNlZCB0ZXN0IHNwZWMgd2l0aCAzIHNlc3Npb25zCitQYXJzZWQgdGVzdCBzcGVjIHdp dGggNyBzZXNzaW9ucwogCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBub3RpZnkx IG5vdGlmeTIgbm90aWZ5MyBub3RpZnlmCiBzdGVwIGxpc3RlbmM6IExJU1RFTiBjMTsgTElT VEVOIGMyOwpAQCAtNDcsNiArNDcsMTA1IEBAIG5vdGlmaWVyOiBOT1RJRlkgImMyIiB3aXRo IHBheWxvYWQgInBheWxvYWQiIGZyb20gbm90aWZpZXIKIG5vdGlmaWVyOiBOT1RJRlkgImMx IiB3aXRoIHBheWxvYWQgInBheWxvYWRzIiBmcm9tIG5vdGlmaWVyCiBub3RpZmllcjogTk9U SUZZICJjMiIgd2l0aCBwYXlsb2FkICJwYXlsb2FkcyIgZnJvbSBub3RpZmllcgogCitzdGFy dGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBub3RpZnlzX3NpbXBsZQorc3RlcCBsaXN0ZW5j OiBMSVNURU4gYzE7IExJU1RFTiBjMjsKK3N0ZXAgbm90aWZ5c19zaW1wbGU6IAorCUJFR0lO OworCVNBVkVQT0lOVCBzMTsKKwlOT1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIs ICdzaW1wbGUyJzsKKwlSRUxFQVNFIFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7CisKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInNpbXBsZTEiIGZyb20gbm90aWZpZXIK K25vdGlmaWVyOiBOT1RJRlkgImMyIiB3aXRoIHBheWxvYWQgInNpbXBsZTIiIGZyb20gbm90 aWZpZXIKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGxzYmVnaW4gbHNzYXZlcG9pbnQgbHNs aXN0ZW4gbHNyZWxlYXNlIGxzY29tbWl0IGxzbm90aWZ5CitzdGVwIGxzYmVnaW46IEJFR0lO Oworc3RlcCBsc3NhdmVwb2ludDogU0FWRVBPSU5UIHMxOworc3RlcCBsc2xpc3RlbjogTElT VEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGxzcmVsZWFzZTogUkVMRUFTRSBTQVZFUE9JTlQg czE7CitzdGVwIGxzY29tbWl0OiBDT01NSVQ7CitzdGVwIGxzbm90aWZ5OiBOT1RJRlkgYzEs ICdzdWJ4YWN0X3Rlc3QnOworbGlzdGVuX3N1YnhhY3Q6IE5PVElGWSAiYzEiIHdpdGggcGF5 bG9hZCAic3VieGFjdF90ZXN0IiBmcm9tIGxpc3Rlbl9zdWJ4YWN0CisKK3N0YXJ0aW5nIHBl cm11dGF0aW9uOiBsc2JlZ2luIGxzbGlzdGVuX291dGVyIGxzc2F2ZXBvaW50IGxzbGlzdGVu IGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0 ZXAgbHNsaXN0ZW5fb3V0ZXI6IExJU1RFTiBjMzsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNBVkVQ T0lOVCBzMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBs c3JlbGVhc2U6IFJFTEVBU0UgU0FWRVBPSU5UIHMxOworc3RlcCBsc2NvbW1pdDogQ09NTUlU Oworc3RlcCBsc25vdGlmeTogTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0JzsKK2xpc3Rlbl9z dWJ4YWN0OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInN1YnhhY3RfdGVzdCIgZnJvbSBs aXN0ZW5fc3VieGFjdAorCitzdGFydGluZyBwZXJtdXRhdGlvbjogbHNiZWdpbiBsc3NhdmVw b2ludCBsc2xpc3RlbiBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5X2NoZWNrCitzdGVw IGxzYmVnaW46IEJFR0lOOworc3RlcCBsc3NhdmVwb2ludDogU0FWRVBPSU5UIHMxOworc3Rl cCBsc2xpc3RlbjogTElTVEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGxzcm9sbGJhY2s6IFJP TExCQUNLIFRPIFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNjb21taXQ6IENPTU1JVDsKK3N0ZXAg bHNub3RpZnlfY2hlY2s6IE5PVElGWSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2ZSc7CisKK3N0 YXJ0aW5nIHBlcm11dGF0aW9uOiBsaXN0ZW5jIG5vdGlmeV9tYW55X3dpdGhfZHVwCitzdGVw IGxpc3RlbmM6IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBub3RpZnlfbWFueV93aXRo X2R1cDogCisJQkVHSU47CisJU0VMRUNUIHBnX25vdGlmeSgnYzEnLCAnbXNnJyB8fCBzOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxNykgczsKKwlTRUxFQ1QgcGdfbm90aWZ5 KCdjMScsICdtc2cxJyk7CisJQ09NTUlUOworCitwZ19ub3RpZnkKKy0tLS0tLS0tLQorICAg ICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAg ICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisg ICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAor ICAgICAgICAgCisgICAgICAgICAKKygxNyByb3dzKQorCitwZ19ub3RpZnkKKy0tLS0tLS0t LQorICAgICAgICAgCisoMSByb3cpCisKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIm1zZzEiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRo IHBheWxvYWQgIm1zZzIiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3 aXRoIHBheWxvYWQgIm1zZzMiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMx IiB3aXRoIHBheWxvYWQgIm1zZzQiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkg ImMxIiB3aXRoIHBheWxvYWQgIm1zZzUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJ RlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzYiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBO T1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzciIGZyb20gbm90aWZpZXIKK25vdGlmaWVy OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzgiIGZyb20gbm90aWZpZXIKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzkiIGZyb20gbm90aWZpZXIKK25v dGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEwIiBmcm9tIG5vdGlmaWVy Citub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxMSIgZnJvbSBub3Rp Zmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTIiIGZyb20g bm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEzIiBm cm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cx NCIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAi bXNnMTUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxv YWQgIm1zZzE2IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBw YXlsb2FkICJtc2cxNyIgZnJvbSBub3RpZmllcgorCitzdGFydGluZyBwZXJtdXRhdGlvbjog bGlzdGVuYyBsbGlzdGVuIGwybGlzdGVuIGwzbGlzdGVuIGxzbGlzdGVuCitzdGVwIGxpc3Rl bmM6IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJ U1RFTiBjMjsKK3N0ZXAgbDJsaXN0ZW46IExJU1RFTiBjMTsKK3N0ZXAgbDNsaXN0ZW46IExJ U1RFTiBjMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworCiBzdGFy dGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3Rp ZnlmIGxjaGVjawogc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKIHN0ZXAg bm90aWZ5MTogTk9USUZZIGMxOwpAQCAtOTUsNiArMTk0LDggQEAgbGlzdGVuZXI6IE5PVElG WSAiYzIiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiAKIHN0YXJ0aW5nIHBlcm11 dGF0aW9uOiBsMmxpc3RlbiBsMmJlZ2luIG5vdGlmeTEgbGJlZ2lucyBsbGlzdGVuIGxjb21t aXQgbDJjb21taXQgbDJzdG9wCiBzdGVwIGwybGlzdGVuOiBMSVNURU4gYzE7CitsaXN0ZW5l cjI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCitsaXN0ZW5l cjI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiBzdGVwIGwy YmVnaW46IEJFR0lOOwogc3RlcCBub3RpZnkxOiBOT1RJRlkgYzE7CiBzdGVwIGxiZWdpbnM6 IEJFR0lOIElTT0xBVElPTiBMRVZFTCBTRVJJQUxJWkFCTEU7CkBAIC0xMDQsNiArMjA1LDE3 IEBAIHN0ZXAgbDJjb21taXQ6IENPTU1JVDsKIGxpc3RlbmVyMjogTk9USUZZICJjMSIgd2l0 aCBwYXlsb2FkICIiIGZyb20gbm90aWZpZXIKIHN0ZXAgbDJzdG9wOiBVTkxJU1RFTiAqOwog CitzdGFydGluZyBwZXJtdXRhdGlvbjogbGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVj aworc3RlcCBsY2hfbGlzdGVuOiBMSVNURU4gY2g7CitzdGVwIG5jaF9ub3RpZnk6IE5PVElG WSBjaCwgJ2FhJzsKK3N0ZXAgbGNoX2NoZWNrOiBTRUxFQ1QgMSBBUyB4OworeAorLQorMQor KDEgcm93KQorCitsaXN0ZW5lcl9jaDogTk9USUZZICJjaCIgd2l0aCBwYXlsb2FkICJhYSIg ZnJvbSBub3RpZmllcl9jaAorCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBsYmVn aW4gdXNhZ2UgYmlnbm90aWZ5IHVzYWdlCiBzdGVwIGxsaXN0ZW46IExJU1RFTiBjMTsgTElT VEVOIGMyOwogc3RlcCBsYmVnaW46IEJFR0lOOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNv bGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3Nw ZWNzL2FzeW5jLW5vdGlmeS5zcGVjCmluZGV4IDBiOGNmZDkxMDgzLi4wYTAxZTc3N2I5OCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVj CisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9hc3luYy1ub3RpZnkuc3BlYwpAQCAt MzEsNiArMzEsMjAgQEAgc3RlcCBub3RpZnlzMQl7CiAJUk9MTEJBQ0sgVE8gU0FWRVBPSU5U IHMyOwogCUNPTU1JVDsKIH0KK3N0ZXAgbm90aWZ5c19zaW1wbGUJeworCUJFR0lOOworCVNB VkVQT0lOVCBzMTsKKwlOT1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIsICdzaW1w bGUyJzsKKwlSRUxFQVNFIFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7Cit9CitzdGVwIG5vdGlm eV9tYW55X3dpdGhfZHVwCXsKKwlCRUdJTjsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdt c2cnIHx8IHM6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDE3KSBzOworCVNFTEVD VCBwZ19ub3RpZnkoJ2MxJywgJ21zZzEnKTsKKwlDT01NSVQ7Cit9CiBzdGVwIHVzYWdlCQl7 IFNFTEVDVCBwZ19ub3RpZmljYXRpb25fcXVldWVfdXNhZ2UoKSA+IDAgQVMgbm9uemVybzsg fQogc3RlcCBiaWdub3RpZnkJeyBTRUxFQ1QgY291bnQocGdfbm90aWZ5KCdjMScsIHM6OnRl eHQpKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBzOyB9CiB0ZWFyZG93bgkJeyBV TkxJU1RFTiAqOyB9CkBAIC01Myw2ICs2NywzOCBAQCBzdGVwIGwyYmVnaW4JeyBCRUdJTjsg fQogc3RlcCBsMmNvbW1pdAl7IENPTU1JVDsgfQogc3RlcCBsMnN0b3AJCXsgVU5MSVNURU4g KjsgfQogCisjIFRoaXJkIGxpc3RlbmVyIHNlc3Npb24gZm9yIHRlc3RpbmcgYXJyYXkgZ3Jv d3RoLgorCitzZXNzaW9uIGxpc3RlbmVyMworc3RlcCBsM2xpc3Rlbgl7IExJU1RFTiBjMTsg fQordGVhcmRvd24JCXsgVU5MSVNURU4gKjsgfQorCisjIExpc3RlbmVyIHNlc3Npb24gZm9y IGNyb3NzLXNlc3Npb24gbm90aWZpY2F0aW9uIHRlc3Qgd2l0aCBjaGFubmVsICdjaCcuCisK K3Nlc3Npb24gbGlzdGVuZXJfY2gKK3N0ZXAgbGNoX2xpc3Rlbgl7IExJU1RFTiBjaDsgfQor c3RlcCBsY2hfY2hlY2sJeyBTRUxFQ1QgMSBBUyB4OyB9Cit0ZWFyZG93bgkJeyBVTkxJU1RF TiAqOyB9CisKKyMgTm90aWZpZXIgc2Vzc2lvbiBmb3IgY3Jvc3Mtc2Vzc2lvbiBub3RpZmlj YXRpb24gdGVzdCB3aXRoIGNoYW5uZWwgJ2NoJy4KKworc2Vzc2lvbiBub3RpZmllcl9jaAor c3RlcCBuY2hfbm90aWZ5CXsgTk9USUZZIGNoLCAnYWEnOyB9CisKKyMgU2Vzc2lvbiBmb3Ig dGVzdGluZyBMSVNURU4gaW4gc3VidHJhbnNhY3Rpb24gd2l0aCBzZXBhcmF0ZSBzdGVwcy4K Kworc2Vzc2lvbiBsaXN0ZW5fc3VieGFjdAorc3RlcCBsc2JlZ2luCXsgQkVHSU47IH0KK3N0 ZXAgbHNsaXN0ZW5fb3V0ZXIJeyBMSVNURU4gYzM7IH0KK3N0ZXAgbHNzYXZlcG9pbnQJeyBT QVZFUE9JTlQgczE7IH0KK3N0ZXAgbHNsaXN0ZW4JeyBMSVNURU4gYzE7IExJU1RFTiBjMjsg fQorc3RlcCBsc3JlbGVhc2UJeyBSRUxFQVNFIFNBVkVQT0lOVCBzMTsgfQorc3RlcCBsc3Jv bGxiYWNrCXsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHMxOyB9CitzdGVwIGxzY29tbWl0CXsg Q09NTUlUOyB9CitzdGVwIGxzbm90aWZ5CXsgTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0Jzsg fQorc3RlcCBsc25vdGlmeV9jaGVjawl7IE5PVElGWSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2 ZSc7IH0KK3RlYXJkb3duCQl7IFVOTElTVEVOICo7IH0KKwogCiAjIFRyaXZpYWwgY2FzZXMu CiBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5MiBub3RpZnkzIG5vdGlmeWYK QEAgLTYwLDYgKzEwNiwyNCBAQCBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5 MiBub3RpZnkzIG5vdGlmeWYKICMgQ2hlY2sgc2ltcGxlIGFuZCBsZXNzLXNpbXBsZSBkZWR1 cGxpY2F0aW9uLgogcGVybXV0YXRpb24gbGlzdGVuYyBub3RpZnlkMSBub3RpZnlkMiBub3Rp ZnlzMQogCisjIENoZWNrIHNpbXBsZSBOT1RJRlkgcmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQg aGFzIG5vIGFjdGlvbi4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbm90aWZ5c19zaW1wbGUKKwor IyBDaGVjayBMSVNURU4gcmVwYXJlbnRpbmcgaW4gc3VidHJhbnNhY3Rpb24uCitwZXJtdXRh dGlvbiBsc2JlZ2luIGxzc2F2ZXBvaW50IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBs c25vdGlmeQorCisjIENoZWNrIExJU1RFTiBtZXJnZSBwYXRoIHdoZW4gYm90aCBvdXRlciBh bmQgaW5uZXIgdHJhbnNhY3Rpb25zIGhhdmUgYWN0aW9ucy4KK3Blcm11dGF0aW9uIGxzYmVn aW4gbHNsaXN0ZW5fb3V0ZXIgbHNzYXZlcG9pbnQgbHNsaXN0ZW4gbHNyZWxlYXNlIGxzY29t bWl0IGxzbm90aWZ5CisKKyMgQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJPTExCQUNLIFRP IFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpLgorcGVybXV0YXRpb24gbHNi ZWdpbiBsc3NhdmVwb2ludCBsc2xpc3RlbiBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5 X2NoZWNrCisKKyMgQ2hlY2sgbm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2Vy ZWQgYnkgaGFzaCB0YWJsZSBkdXBsaWNhdGUgZGV0ZWN0aW9uKS4KK3Blcm11dGF0aW9uIGxp c3RlbmMgbm90aWZ5X21hbnlfd2l0aF9kdXAKKworIyBDaGVjayBDaGFubmVsSGFzaEFkZExp c3RlbmVyIGFycmF5IGdyb3d0aC4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBsMmxp c3RlbiBsM2xpc3RlbiBsc2xpc3RlbgorCiAjIENyb3NzLWJhY2tlbmQgbm90aWZpY2F0aW9u IGRlbGl2ZXJ5LiAgV2UgdXNlIGEgInNlbGVjdCAxIiB0byBmb3JjZSB0aGUKICMgbGlzdGVu ZXIgc2Vzc2lvbiB0byBjaGVjayBmb3Igbm90aWZpZXMuICBJbiBwcmluY2lwbGUgd2UgY291 bGQganVzdCB3YWl0CiAjIGZvciBkZWxpdmVyeSwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBl eHRyYSBzdXBwb3J0IGluIGlzb2xhdGlvbnRlc3RlcgpAQCAtNzMsNiArMTM3LDEwIEBAIHBl cm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3Rp ZnlmIGxjaGVjawogIyBhbmQgbm90aWZ5IHF1ZXVlIGlzIG5vdCBlbXB0eQogcGVybXV0YXRp b24gbDJsaXN0ZW4gbDJiZWdpbiBub3RpZnkxIGxiZWdpbnMgbGxpc3RlbiBsY29tbWl0IGwy Y29tbWl0IGwyc3RvcAogCisjIENoZWNrIHRoYXQgbm90aWZpY2F0aW9ucyBzZW50IGZyb20g YSBiYWNrZW5kIHRoYXQgaGFzIG5vdCBkb25lIExJU1RFTgorIyBhcmUgcHJvcGVybHkgZGVs aXZlcmVkIHRvIGEgbGlzdGVuZXIgaW4gYW5vdGhlciBiYWNrZW5kLgorcGVybXV0YXRpb24g bGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVjaworCiAjIFZlcmlmeSB0aGF0IHBnX25v dGlmaWNhdGlvbl9xdWV1ZV91c2FnZSBjb3JyZWN0bHkgcmVwb3J0cyBhIG5vbi16ZXJvIHJl c3VsdCwKICMgYWZ0ZXIgc3VibWl0dGluZyBub3RpZmljYXRpb25zIHdoaWxlIGFub3RoZXIg Y29ubmVjdGlvbiBpcyBsaXN0ZW5pbmcgZm9yCiAjIHRob3NlIG5vdGlmaWNhdGlvbnMgYW5k IHdhaXRpbmcgaW5zaWRlIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbi4gIFdlIGhhdmUgdG8KLS0g CjIuNTAuMQoK --edfc78871cd043de954e5dc4e63935b3 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v23.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v23.patch?=" Content-Transfer-Encoding: base64 RnJvbSA1OWVlY2VjYzUxOWRlZDQ5OGIzNTJmZTliOTFkZmQzNmYxNDk5OGMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogVHVlLCAxNCBPY3QgMjAyNSAwODowMzoxOSArMDIwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBPcHRpbWl6ZSBMSVNURU4vTk9USUZZIHdpdGggc2hhcmVkIGNoYW5uZWwgbWFw IGFuZCBkaXJlY3QKIGFkdmFuY2VtZW50CgpUaGlzIHBhdGNoIHJld29ya3MgdGhlIExJU1RF Ti9OT1RJRlkgc2lnbmFsaW5nIHBhdGggdG8gYXZvaWQgdGhlCmxvbmctc3RhbmRpbmcgaW5l ZmZpY2llbmN5IHdoZXJlIGV2ZXJ5IGNvbW1pdCB3YWtlcyBhbGwgbGlzdGVuaW5nCmJhY2tl bmRzIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBldmVuIHRob3NlIHRoYXQgYXJlIGxpc3Rlbmlu ZyBvbgpjb21wbGV0ZWx5IGRpZmZlcmVudCBjaGFubmVscy4KClByb2JsZW0KLS0tLS0tLQoK QXQgcHJlc2VudCwgU2lnbmFsQmFja2VuZHMgaGFzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9m IHdoaWNoIGJhY2tlbmQKbGlzdGVucyBvbiB3aGljaCBjaGFubmVsLiBXaGVuIGEgYmFja2Vu ZCBjb21taXRzIGEgdHJhbnNhY3Rpb24gdGhhdAppc3N1ZWQgTk9USUZZLCBpdCBzaW1wbHkg aXRlcmF0ZXMgb3ZlciBhbGwgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgaW4gdGhlCnNhbWUgZGF0 YWJhc2UgYW5kIHNlbmRzIGVhY2ggb25lIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNp Z25hbC4KClRoYXQgYmVoYXZpb3IgaXMgZmluZSB3aGVuIGFsbCBsaXN0ZW5lcnMgYXJlIG9u IHRoZSBzYW1lIGNoYW5uZWwsIGJ1dAp3aGVuIG1hbnkgYmFja2VuZHMgYXJlIGxpc3Rlbmlu ZyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMsIGVhY2ggTk9USUZZCnRyaWdnZXJzIGEgc3Rvcm0g b2YgdW5uZWNlc3Nhcnkgd2FrZXVwcyBhbmQgY29udGV4dCBzd2l0Y2hlcy4gQXMgdGhlCm51 bWJlciBvZiBpZGxlIGxpc3RlbmVycyBncm93cywgdGhpcyBvZnRlbiBiZWNvbWVzIHRoZSBi b3R0bGVuZWNrIGFuZAp0aHJvdWdocHV0IGRyb3BzIHNoYXJwbHkuCgpPdmVydmlldyBvZiB0 aGUgc29sdXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhdGNoIGludHJv ZHVjZXMgYSBsYXppbHktY3JlYXRlZCBkeW5hbWljIHNoYXJlZCBoYXNoIChkc2hhc2gpCmJh Y2tlZCBieSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgKERTQSkgdGhhdCBtYXBzIChkYm9pZCwg Y2hhbm5lbCkgdG8KYXJyYXlzIG9mIGxpc3RlbmluZyBiYWNrZW5kcyAoUHJvY051bWJlcnMp LiBUaGlzIGFsbG93cyB0aGUgc2VuZGVyIHRvCnRhcmdldCBvbmx5IHRob3NlIGJhY2tlbmRz IGFjdHVhbGx5IGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgZm9yIHdoaWNoCml0IGhhcyBx dWV1ZWQgbm90aWZpY2F0aW9ucy4KCkF0IGNvbW1pdCB0aW1lOgoKKiBBdENvbW1pdF9Ob3Rp ZnkgdXBkYXRlcyB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoIHRvIHJlZmxlY3QgYW55IExJU1RF TgogIG9yIFVOTElTVEVOIGFjdGlvbnMgcGVyZm9ybWVkIGluIHRoZSB0cmFuc2FjdGlvbi4K KiBTaWduYWxCYWNrZW5kcyBjb25zdWx0cyB0aGlzIGhhc2ggdG8gZmluZCB0aGUgYmFja2Vu ZHMgdGhhdCBhcmUKICBsaXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIGJlaW5nIG5vdGlmaWVk IGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLCBhbmQKICBzaWduYWxzIG9ubHkgdGhvc2UuCgpF YWNoIGJhY2tlbmQncyBlbnRyeSBpbiBBc3luY1F1ZXVlQ29udHJvbCBub3cgaW5jbHVkZXMg YSB3YWtldXBQZW5kaW5nCmZsYWcgdG8gcHJldmVudCBkdXBsaWNhdGUgc2lnbmFscyB3aGls ZSBhIHByZXZpb3VzIHdha2V1cCBpcyBzdGlsbCBiZWluZwpwcm9jZXNzZWQuCgpEaXJlY3Qg YWR2YW5jZW1lbnQKLS0tLS0tLS0tLS0tLS0tLS0tCgpBIGZ1cnRoZXIgb3B0aW1pemF0aW9u IGF2b2lkcyBzaWduYWxpbmcgaWRsZSBiYWNrZW5kcyB0aGF0IGFyZSBub3QKbGlzdGVuaW5n IG9uIGFueSBvZiB0aGUgY2hhbm5lbHMgbm90aWZpZWQgd2l0aGluIHRoZSB0cmFuc2FjdGlv bi4KCldoaWxlIHF1ZXVpbmcgbm90aWZpY2F0aW9ucywgUHJlQ29tbWl0X05vdGlmeSByZWNv cmRzIHRoZSBxdWV1ZSBoZWFkCnBvc2l0aW9uIGJvdGggYmVmb3JlIGFuZCBhZnRlciB3cml0 aW5nIGl0cyBub3RpZmljYXRpb25zLiBCZWNhdXNlIGFsbAp3cml0ZXJzIGFyZSBzZXJpYWxp emVkIGJ5IHRoZSBleGlzdGluZyBjbHVzdGVyLXdpZGUgaGVhdnl3ZWlnaHQgbG9jayBvbgoi ZGF0YWJhc2UgMCIsIG5vIGJhY2tlbmQgKGZyb20gYW55IGRhdGFiYXNlKSBjYW4gaW5zZXJ0 IGVudHJpZXMgYmV0d2Vlbgp0aG9zZSB0d28gcG9pbnRzLiBUaGlzIGd1YXJhbnRlZXMgdGhh dCB0aGUgcmVnaW9uIFtvbGRIZWFkLCBuZXdIZWFkKQpjb250YWlucyBvbmx5IHRoZSBlbnRy aWVzIHdyaXR0ZW4gYnkgb3VyIGNvbW1pdC4KClNpZ25hbEJhY2tlbmRzIHVzZXMgdGhpcyBm YWN0IHRvIGRpcmVjdGx5IGFkdmFuY2UgYW55IGJhY2tlbmQgc3RpbGwKcG9zaXRpb25lZCBh dCBvbGRIZWFkIHVwIHRvIG5ld0hlYWQsIGF2b2lkaW5nIGEgbmVlZGxlc3Mgd2FrZXVwIGZv cgpsaXN0ZW5lcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugbm90IGZpbmQgYW55IG5vdGlmaWVz IG9mIGludGVyZXN0LgoKT3RoZXIgbm90ZXMKLS0tLS0tLS0tLS0KCiogTWFpbnRhaW5zIGR1 YWwgZGF0YSBzdHJ1Y3R1cmVzOiBhIHNoYXJlZCBjaGFubmVsSGFzaCBmb3IgZGV0ZXJtaW5p bmcKICB3aGljaCBiYWNrZW5kcyB0byBzaWduYWwsIGFuZCBhIGxvY2FsIHBlci1iYWNrZW5k IGxpc3RlbkNoYW5uZWxzIGxpc3QKICBmb3IgZmFzdCBsb2NrLWZyZWUgbG9va3VwcyBkdXJp bmcgbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuIFRoaXMgYXZvaWRzCiAgY29udGVudGlvbiBv biB0aGUgc2hhcmVkIGhhc2ggZHVyaW5nIHRoZSBoaWdoLWZyZXF1ZW5jeSBJc0xpc3Rlbmlu Z09uCiAgY2hlY2tzIHRoYXQgb2NjdXIgZm9yIGV2ZXJ5IG5vdGlmaWNhdGlvbiByZWFkIGZy b20gdGhlIHF1ZXVlLgoqIEJhY2tlbmRzIHJlbWFpbiByZWdpc3RlcmVkIGluIHRoZSBnbG9i YWwgbGlzdGVuZXIgbGlzdCBhcyBsb25nIGFzCiAgbGlzdGVuQ2hhbm5lbHMgaXMgbm9uLWVt cHR5LgoqIEFkZHMgTFdMb2NrIHRyYW5jaGUgTk9USUZZX0NIQU5ORUxfSEFTSCBhbmQgd2Fp dCBldmVudAogIE5vdGlmeUNoYW5uZWxIYXNoIGZvciB2aXNpYmlsaXR5LgoqIE5vIHVzZXIt dmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZXM7IHRoaXMgaXMgYW4gaW50ZXJuYWwgb3B0aW1p emF0aW9uCiAgb25seS4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jICAgICAg ICAgICAgICAgICAgfCA3MTQgKysrKysrKysrKysrKysrLS0tCiAuLi4vdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3Rv cmFnZS9sd2xvY2tsaXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArCiA0IGZpbGVzIGNoYW5n ZWQsIDYxNCBpbnNlcnRpb25zKCspLCAxMDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMKaW5kZXggNGJkMzdkNWJlYjUuLjhkYWMxMmY4MTI0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMKQEAgLTI0LDggKzI0LDEwIEBACiAgKgkgIEFsbCBub3RpZmljYXRpb24gbWVzc2Fn ZXMgYXJlIHBsYWNlZCBpbiB0aGUgcXVldWUgYW5kIGxhdGVyIHJlYWQgb3V0CiAgKgkgIGJ5 IGxpc3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKgkgIFRoZXJlIGlzIG5vIGNlbnRyYWwga25v d2xlZGdlIG9mIHdoaWNoIGJhY2tlbmQgbGlzdGVucyBvbiB3aGljaCBjaGFubmVsOwotICoJ ICBldmVyeSBiYWNrZW5kIGhhcyBpdHMgb3duIGxpc3Qgb2YgaW50ZXJlc3RpbmcgY2hhbm5l bHMuCisgKgkgIFdlIGFsc28gbWFpbnRhaW4gYSBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxl IChkc2hhc2gpIHRoYXQgbWFwcyBjaGFubmVsCisgKgkgIG5hbWVzIHRvIHRoZSBzZXQgb2Yg YmFja2VuZHMgbGlzdGVuaW5nIG9uIGVhY2ggY2hhbm5lbC4gVGhpcyB0YWJsZSBpcworICoJ ICBjcmVhdGVkIGxhemlseSBvbiB0aGUgZmlyc3QgTElTVEVOIGNvbW1hbmQgYW5kIGdyb3dz IGR5bmFtaWNhbGx5IGFzCisgKgkgIG5lZWRlZC4KICAqCiAgKgkgIEFsdGhvdWdoIHRoZXJl IGlzIG9ubHkgb25lIHF1ZXVlLCBub3RpZmljYXRpb25zIGFyZSB0cmVhdGVkIGFzIGJlaW5n CiAgKgkgIGRhdGFiYXNlLWxvY2FsOyB0aGlzIGlzIGRvbmUgYnkgaW5jbHVkaW5nIHRoZSBz ZW5kZXIncyBkYXRhYmFzZSBPSUQKQEAgLTY4LDE2ICs3MCwyMSBAQAogICoJICBDb21taXRU cmFuc2FjdGlvbigpIHdoaWNoIHdpbGwgdGhlbiBkbyB0aGUgYWN0dWFsIHRyYW5zYWN0aW9u IGNvbW1pdC4KICAqCiAgKgkgIEFmdGVyIGNvbW1pdCB3ZSBhcmUgY2FsbGVkIGFub3RoZXIg dGltZSAoQXRDb21taXRfTm90aWZ5KCkpLiBIZXJlIHdlCi0gKgkgIG1ha2UgYW55IGFjdHVh bCB1cGRhdGVzIHRvIHRoZSBlZmZlY3RpdmUgbGlzdGVuIHN0YXRlIChsaXN0ZW5DaGFubmVs cykuCi0gKgkgIFRoZW4gd2Ugc2lnbmFsIGFueSBiYWNrZW5kcyB0aGF0IG1heSBiZSBpbnRl cmVzdGVkIGluIG91ciBtZXNzYWdlcwotICoJICAoaW5jbHVkaW5nIG91ciBvd24gYmFja2Vu ZCwgaWYgbGlzdGVuaW5nKS4gIFRoaXMgaXMgZG9uZSBieQotICoJICBTaWduYWxCYWNrZW5k cygpLCB3aGljaCBzY2FucyB0aGUgbGlzdCBvZiBsaXN0ZW5pbmcgYmFja2VuZHMgYW5kIHNl bmRzIGEKLSAqCSAgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNpZ25hbCB0byBldmVyeSBs aXN0ZW5pbmcgYmFja2VuZCAod2UgZG9uJ3QKLSAqCSAga25vdyB3aGljaCBiYWNrZW5kIGlz IGxpc3RlbmluZyBvbiB3aGljaCBjaGFubmVsIHNvIHdlIG11c3Qgc2lnbmFsIHRoZW0KLSAq CSAgYWxsKS4gIFdlIGNhbiBleGNsdWRlIGJhY2tlbmRzIHRoYXQgYXJlIGFscmVhZHkgdXAg dG8gZGF0ZSwgdGhvdWdoLCBhbmQKLSAqCSAgd2UgY2FuIGFsc28gZXhjbHVkZSBiYWNrZW5k cyB0aGF0IGFyZSBpbiBvdGhlciBkYXRhYmFzZXMgKHVubGVzcyB0aGV5Ci0gKgkgIGFyZSB3 YXkgYmVoaW5kIGFuZCBzaG91bGQgYmUga2lja2VkIHRvIG1ha2UgdGhlbSBhZHZhbmNlIHRo ZWlyCi0gKgkgIHBvaW50ZXJzKS4KKyAqCSAgbWFrZSBhbnkgYWN0dWFsIHVwZGF0ZXMgdG8g dGhlIGxvY2FsIGxpc3RlbiBzdGF0ZSAobGlzdGVuQ2hhbm5lbHNIYXNoKSBhbmQKKyAqCSAg c2hhcmVkIGNoYW5uZWwgaGFzaCB0YWJsZSAoY2hhbm5lbEhhc2gpLiAgVGhlbiB3ZSBzaWdu YWwgYW55IGJhY2tlbmRzCisgKgkgIHRoYXQgbWF5IGJlIGludGVyZXN0ZWQgaW4gb3VyIG1l c3NhZ2VzIChpbmNsdWRpbmcgb3VyIG93biBiYWNrZW5kLAorICoJICBpZiBsaXN0ZW5pbmcp LiAgVGhpcyBpcyBkb25lIGJ5IFNpZ25hbEJhY2tlbmRzKCksIHdoaWNoIGNvbnN1bHRzIHRo ZQorICoJICBzaGFyZWQgY2hhbm5lbCBoYXNoIHRhYmxlIHRvIGlkZW50aWZ5IGxpc3RlbmVy cyBmb3IgdGhlIGNoYW5uZWxzIHRoYXQKKyAqCSAgaGF2ZSBwZW5kaW5nIG5vdGlmaWNhdGlv bnMgaW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UuICBFYWNoIHNlbGVjdGVkCisgKgkgIGJhY2tl bmQgaXMgbWFya2VkIGFzIGhhdmluZyBhIHdha2V1cCBwZW5kaW5nIHRvIGF2b2lkIGR1cGxp Y2F0ZSBzaWduYWxzLAorICoJICBhbmQgYSBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQgc2ln bmFsIGlzIHNlbnQgdG8gaXQuCisgKgorICoJICBXaGVuIHdyaXRpbmcgbm90aWZpY2F0aW9u cywgUHJlQ29tbWl0X05vdGlmeSgpIHJlY29yZHMgdGhlIHF1ZXVlIGhlYWQKKyAqCSAgcG9z aXRpb24gYm90aCBiZWZvcmUgYW5kIGFmdGVyIHRoZSB3cml0ZS4gIEJlY2F1c2UgYWxsIHdy aXRlcnMgc2VyaWFsaXplCisgKgkgIG9uIGEgY2x1c3Rlci13aWRlIGhlYXZ5d2VpZ2h0IGxv Y2ssIG5vIGJhY2tlbmQgY2FuIGluc2VydCBlbnRyaWVzIGJldHdlZW4KKyAqCSAgdGhlc2Ug dHdvIHBvaW50cy4gIFNpZ25hbEJhY2tlbmRzKCkgdXNlcyB0aGlzIGZhY3QgdG8gZGlyZWN0 bHkgYWR2YW5jZSBhbnkKKyAqCSAgYmFja2VuZCB0aGF0IGlzIHN0aWxsIHBvc2l0aW9uZWQg YXQgdGhlIG9sZCBoZWFkLCBhdm9pZGluZyB1bm5lY2Vzc2FyeQorICoJICB3YWtldXBzIGZv ciBpZGxlIGxpc3RlbmVycyB0aGF0IGhhdmUgbm90aGluZyB0byByZWFkLgogICoKICAqCSAg RmluYWxseSwgYWZ0ZXIgd2UgYXJlIG91dCBvZiB0aGUgdHJhbnNhY3Rpb24gYWx0b2dldGhl ciBhbmQgYWJvdXQgdG8gZ28KICAqCSAgaWRsZSwgd2Ugc2NhbiB0aGUgcXVldWUgZm9yIG1l c3NhZ2VzIHRoYXQgbmVlZCB0byBiZSBzZW50IHRvIG91cgpAQCAtMTI4LDYgKzEzNSw3IEBA CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8 c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvcGFy YWxsZWwuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2xydS5oIgpAQCAtMTM3LDE0ICsxNDUsMTcg QEAKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgogI2luY2x1ZGUgImNvbW1vbi9oYXNo Zm4uaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibGliL2RzaGFzaC5oIgog I2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3Ry eS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdy LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAidGNvcC90 Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRp bHMvZHNhLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKQEAgLTE2Miw2 ICsxNzMsMjkgQEAKICAqLwogI2RlZmluZSBOT1RJRllfUEFZTE9BRF9NQVhfTEVOR1RICShC TENLU1ogLSBOQU1FREFUQUxFTiAtIDEyOCkKIAorLyoKKyAqIENoYW5uZWwgaGFzaCB0YWJs ZSBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgaGFzaCB0YWJsZSBtYXBzIChkYXRhYmFzZSBP SUQsIGNoYW5uZWwgbmFtZSkga2V5cyB0byBhcnJheXMgb2YKKyAqIFByb2NOdW1iZXJzIHJl cHJlc2VudGluZyB0aGUgYmFja2VuZHMgbGlzdGVuaW5nIG9uIGVhY2ggY2hhbm5lbC4KKyAq LworCisjZGVmaW5lIElOSVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkUgNAorCit0eXBlZGVm IHN0cnVjdCBDaGFubmVsSGFzaEtleQoreworCU9pZAkJCWRib2lkOworCWNoYXIJCWNoYW5u ZWxbTkFNRURBVEFMRU5dOworfSBDaGFubmVsSGFzaEtleTsKKwordHlwZWRlZiBzdHJ1Y3Qg Q2hhbm5lbEVudHJ5Cit7CisJQ2hhbm5lbEhhc2hLZXkga2V5OworCWRzYV9wb2ludGVyIGxp c3RlbmVyc0FycmF5OyAvKiBEU0EgcG9pbnRlciB0byBQcm9jTnVtYmVyIGFycmF5ICovCisJ aW50CQkJbnVtTGlzdGVuZXJzOwkvKiBOdW1iZXIgb2YgbGlzdGVuZXJzIGN1cnJlbnRseSBz dG9yZWQgKi8KKwlpbnQJCQlhbGxvY2F0ZWRMaXN0ZW5lcnM7IC8qIEFsbG9jYXRlZCBzaXpl IG9mIGFycmF5ICovCit9IENoYW5uZWxFbnRyeTsKKwogLyoKICAqIFN0cnVjdCByZXByZXNl bnRpbmcgYW4gZW50cnkgaW4gdGhlIGdsb2JhbCBub3RpZnkgcXVldWUKICAqCkBAIC0yMjQs MTEgKzI1OCwxNiBAQCB0eXBlZGVmIHN0cnVjdCBRdWV1ZVBvc2l0aW9uCiAJICh4KS5wYWdl ICE9ICh5KS5wYWdlID8gKHgpIDogXAogCSAoeCkub2Zmc2V0ID4gKHkpLm9mZnNldCA/ICh4 KSA6ICh5KSkKIAorLyogcmV0dXJucyB0cnVlIGlmIHggY29tZXMgYmVmb3JlIHkgaW4gcXVl dWUgb3JkZXIgKi8KKyNkZWZpbmUgUVVFVUVfUE9TX1BSRUNFREVTKHgseSkgXAorCShhc3lu Y1F1ZXVlUGFnZVByZWNlZGVzKCh4KS5wYWdlLCAoeSkucGFnZSkgfHwgXAorCSAoKHgpLnBh Z2UgPT0gKHkpLnBhZ2UgJiYgKHgpLm9mZnNldCA8ICh5KS5vZmZzZXQpKQorCiAvKgogICog UGFyYW1ldGVyIGRldGVybWluaW5nIGhvdyBvZnRlbiB3ZSB0cnkgdG8gYWR2YW5jZSB0aGUg dGFpbCBwb2ludGVyOgogICogd2UgZG8gdGhhdCBhZnRlciBldmVyeSBRVUVVRV9DTEVBTlVQ X0RFTEFZIHBhZ2VzIG9mIE5PVElGWSBkYXRhLiAgVGhpcyBpcwotICogYWxzbyB0aGUgZGlz dGFuY2UgYnkgd2hpY2ggYSBiYWNrZW5kIGluIGFub3RoZXIgZGF0YWJhc2UgbmVlZHMgdG8g YmUKLSAqIGJlaGluZCBiZWZvcmUgd2UnbGwgZGVjaWRlIHdlIG5lZWQgdG8gd2FrZSBpdCB1 cCB0byBhZHZhbmNlIGl0cyBwb2ludGVyLgorICogYWxzbyB0aGUgZGlzdGFuY2UgYnkgd2hp Y2ggYSBiYWNrZW5kIG5lZWRzIHRvIGJlIGJlaGluZCBiZWZvcmUgd2UnbGwKKyAqIGRlY2lk ZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2YW5jZSBpdHMgcG9pbnRlci4KICAqCiAg KiBSZXNpc3QgdGhlIHRlbXB0YXRpb24gdG8gbWFrZSB0aGlzIHJlYWxseSBsYXJnZS4gIFdo aWxlIHRoYXQgd291bGQgc2F2ZQogICogd29yayBpbiBzb21lIHBsYWNlcywgaXQgd291bGQg YWRkIGNvc3QgaW4gb3RoZXJzLiAgSW4gcGFydGljdWxhciwgdGhpcwpAQCAtMjQ2LDYgKzI4 NSw4IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXVlQmFja2VuZFN0YXR1cwogCU9pZAkJCWRib2lk OwkJCS8qIGJhY2tlbmQncyBkYXRhYmFzZSBPSUQsIG9yIEludmFsaWRPaWQgKi8KIAlQcm9j TnVtYmVyCW5leHRMaXN0ZW5lcjsJLyogaWQgb2YgbmV4dCBsaXN0ZW5lciwgb3IgSU5WQUxJ RF9QUk9DX05VTUJFUiAqLwogCVF1ZXVlUG9zaXRpb24gcG9zOwkJCS8qIGJhY2tlbmQgaGFz IHJlYWQgcXVldWUgdXAgdG8gaGVyZSAqLworCWJvb2wJCXdha2V1cFBlbmRpbmc7CS8qIHNp Z25hbCBzZW50IGJ1dCBub3QgeWV0IHByb2Nlc3NlZCAqLworCWJvb2wJCWFkdmFuY2luZ1Bv czsJLyogYmFja2VuZCBpcyByZWFkaW5nIHRoZSBxdWV1ZSAqLwogfSBRdWV1ZUJhY2tlbmRT dGF0dXM7CiAKIC8qCkBAIC0yNjAsOSArMzAxLDEwIEBAIHR5cGVkZWYgc3RydWN0IFF1ZXVl QmFja2VuZFN0YXR1cwogICogKHNpbmNlIG5vIG90aGVyIGJhY2tlbmQgd2lsbCBpbnNwZWN0 IGl0KS4KICAqCiAgKiBXaGVuIGhvbGRpbmcgTm90aWZ5UXVldWVMb2NrIGluIEVYQ0xVU0lW RSBtb2RlLCBiYWNrZW5kcyBjYW4gaW5zcGVjdCB0aGUKLSAqIGVudHJpZXMgb2Ygb3RoZXIg YmFja2VuZHMgYW5kIGFsc28gY2hhbmdlIHRoZSBoZWFkIHBvaW50ZXIuIFdoZW4gaG9sZGlu ZwotICogYm90aCBOb3RpZnlRdWV1ZUxvY2sgYW5kIE5vdGlmeVF1ZXVlVGFpbExvY2sgaW4g RVhDTFVTSVZFIG1vZGUsIGJhY2tlbmRzCi0gKiBjYW4gY2hhbmdlIHRoZSB0YWlsIHBvaW50 ZXJzLgorICogZW50cmllcyBvZiBvdGhlciBiYWNrZW5kcyBhbmQgYWxzbyBjaGFuZ2UgdGhl IGhlYWQgcG9pbnRlci4gVGhleSBjYW4KKyAqIGFsc28gYWR2YW5jZSBvdGhlciBiYWNrZW5k cycgcXVldWUgcG9zaXRpb25zLCB1bmxlc3MgdGhleSBhcmUgbm90CisgKiBpbiB0aGUgcHJv Y2VzcyBvZiBkb2luZyB0aGF0IHRoZW1zZWx2ZXMuIFdoZW4gaG9sZGluZyBib3RoIE5vdGlm eVF1ZXVlTG9jayBhbmQKKyAqIE5vdGlmeVF1ZXVlVGFpbExvY2sgaW4gRVhDTFVTSVZFIG1v ZGUsIGJhY2tlbmRzIGNhbiBjaGFuZ2UgdGhlIHRhaWwgcG9pbnRlcnMuCiAgKgogICogU0xS VSBidWZmZXIgcG9vbCBpcyBkaXZpZGVkIGluIGJhbmtzIGFuZCBiYW5rIHdpc2UgU0xSVSBs b2NrIGlzIHVzZWQgYXMKICAqIHRoZSBjb250cm9sIGxvY2sgZm9yIHRoZSBwZ19ub3RpZnkg U0xSVSBidWZmZXJzLgpAQCAtMjg4LDExICszMzAsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgQXN5 bmNRdWV1ZUNvbnRyb2wKIAlQcm9jTnVtYmVyCWZpcnN0TGlzdGVuZXI7CS8qIGlkIG9mIGZp cnN0IGxpc3RlbmVyLCBvcgogCQkJCQkJCQkgKiBJTlZBTElEX1BST0NfTlVNQkVSICovCiAJ VGltZXN0YW1wVHogbGFzdFF1ZXVlRmlsbFdhcm47CS8qIHRpbWUgb2YgbGFzdCBxdWV1ZS1m dWxsIG1zZyAqLworCWRzYV9oYW5kbGUJY2hhbm5lbEhhc2hEU0E7CisJZHNoYXNoX3RhYmxl X2hhbmRsZSBjaGFubmVsSGFzaERTSDsKIAlRdWV1ZUJhY2tlbmRTdGF0dXMgYmFja2VuZFtG TEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBBc3luY1F1ZXVlQ29udHJvbDsKIAogc3RhdGlj IEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKIAorc3RhdGljIGRzYV9h cmVhICpjaGFubmVsRFNBID0gTlVMTDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKmNoYW5uZWxI YXNoID0gTlVMTDsKKwogI2RlZmluZSBRVUVVRV9IRUFECQkJCQkoYXN5bmNRdWV1ZUNvbnRy b2wtPmhlYWQpCiAjZGVmaW5lIFFVRVVFX1RBSUwJCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+ dGFpbCkKICNkZWZpbmUgUVVFVUVfU1RPUF9QQUdFCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+ c3RvcFBhZ2UpCkBAIC0zMDEsNiArMzQ4LDggQEAgc3RhdGljIEFzeW5jUXVldWVDb250cm9s ICphc3luY1F1ZXVlQ29udHJvbDsKICNkZWZpbmUgUVVFVUVfQkFDS0VORF9EQk9JRChpKQkJ KGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmRib2lkKQogI2RlZmluZSBRVUVVRV9O RVhUX0xJU1RFTkVSKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ubmV4dExp c3RlbmVyKQogI2RlZmluZSBRVUVVRV9CQUNLRU5EX1BPUyhpKQkJKGFzeW5jUXVldWVDb250 cm9sLT5iYWNrZW5kW2ldLnBvcykKKyNkZWZpbmUgUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVO RElORyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ud2FrZXVwUGVuZGluZykK KyNkZWZpbmUgUVVFVUVfQkFDS0VORF9BRFZBTkNJTkdfUE9TKGkpCShhc3luY1F1ZXVlQ29u dHJvbC0+YmFja2VuZFtpXS5hZHZhbmNpbmdQb3MpCiAKIC8qCiAgKiBUaGUgU0xSVSBidWZm ZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdlIGFjY2VzcyB0aGUgbm90aWZpY2F0aW9uIHF1ZXVl CkBAIC0zMTMsMTYgKzM2MiwxNiBAQCBzdGF0aWMgU2xydUN0bERhdGEgTm90aWZ5Q3RsRGF0 YTsKICNkZWZpbmUgUVVFVUVfRlVMTF9XQVJOX0lOVEVSVkFMCTUwMDAJLyogd2FybiBhdCBt b3N0IG9uY2UgZXZlcnkgNXMgKi8KIAogLyoKLSAqIGxpc3RlbkNoYW5uZWxzIGlkZW50aWZp ZXMgdGhlIGNoYW5uZWxzIHdlIGFyZSBhY3R1YWxseSBsaXN0ZW5pbmcgdG8KLSAqIChpZSwg aGF2ZSBjb21taXR0ZWQgYSBMSVNURU4gb24pLiAgSXQgaXMgYSBzaW1wbGUgbGlzdCBvZiBj aGFubmVsIG5hbWVzLAorICogbGlzdGVuQ2hhbm5lbHNIYXNoIGlkZW50aWZpZXMgdGhlIGNo YW5uZWxzIHdlIGFyZSBhY3R1YWxseSBsaXN0ZW5pbmcgdG8KKyAqIChpZSwgaGF2ZSBjb21t aXR0ZWQgYSBMSVNURU4gb24pLiAgSXQgaXMgYSBoYXNoIHRhYmxlIG9mIGNoYW5uZWwgbmFt ZXMsCiAgKiBhbGxvY2F0ZWQgaW4gVG9wTWVtb3J5Q29udGV4dC4KICAqLwotc3RhdGljIExp c3QgKmxpc3RlbkNoYW5uZWxzID0gTklMOwkvKiBsaXN0IG9mIEMgc3RyaW5ncyAqLworc3Rh dGljIEhUQUIgKmxpc3RlbkNoYW5uZWxzSGFzaCA9IE5VTEw7CiAKIC8qCiAgKiBTdGF0ZSBm b3IgcGVuZGluZyBMSVNURU4vVU5MSVNURU4gYWN0aW9ucyBjb25zaXN0cyBvZiBhbiBvcmRl cmVkIGxpc3Qgb2YKICAqIGFsbCBhY3Rpb25zIHJlcXVlc3RlZCBpbiB0aGUgY3VycmVudCB0 cmFuc2FjdGlvbi4gIEFzIGV4cGxhaW5lZCBhYm92ZSwKLSAqIHdlIGRvbid0IGFjdHVhbGx5 IGNoYW5nZSBsaXN0ZW5DaGFubmVscyB1bnRpbCB3ZSByZWFjaCB0cmFuc2FjdGlvbiBjb21t aXQuCisgKiB3ZSBkb24ndCBhY3R1YWxseSBjaGFuZ2UgbGlzdGVuQ2hhbm5lbHNIYXNoIHVu dGlsIHdlIHJlYWNoIHRyYW5zYWN0aW9uIGNvbW1pdC4KICAqCiAgKiBUaGUgbGlzdCBpcyBr ZXB0IGluIEN1clRyYW5zYWN0aW9uQ29udGV4dC4gIEluIHN1YnRyYW5zYWN0aW9ucywgZWFj aAogICogc3VidHJhbnNhY3Rpb24gaGFzIGl0cyBvd24gbGlzdCBpbiBpdHMgb3duIEN1clRy YW5zYWN0aW9uQ29udGV4dCwgYnV0CkBAIC0zOTEsNiArNDQwLDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgTm90aWZpY2F0aW9uTGlzdAogCWludAkJCW5lc3RpbmdMZXZlbDsJLyogY3VycmVudCB0 cmFuc2FjdGlvbiBuZXN0aW5nIGRlcHRoICovCiAJTGlzdAkgICAqZXZlbnRzOwkJCS8qIGxp c3Qgb2YgTm90aWZpY2F0aW9uIHN0cnVjdHMgKi8KIAlIVEFCCSAgICpoYXNodGFiOwkJLyog aGFzaCBvZiBOb3RpZmljYXRpb25IYXNoIHN0cnVjdHMsIG9yIE5VTEwgKi8KKwlIVEFCCSAg ICpjaGFubmVsSGFzaHRhYjsgLyogaGFzaCBvZiB1bmlxdWUgY2hhbm5lbCBuYW1lcywgb3Ig TlVMTCAqLwogCXN0cnVjdCBOb3RpZmljYXRpb25MaXN0ICp1cHBlcjsgLyogZGV0YWlscyBm b3IgdXBwZXIgdHJhbnNhY3Rpb24gbGV2ZWxzICovCiB9IE5vdGlmaWNhdGlvbkxpc3Q7CiAK QEAgLTQwMSw2ICs0NTEsMTEgQEAgc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gKIAlOb3RpZmlj YXRpb24gKmV2ZW50OwkJLyogPT4gdGhlIGFjdHVhbCBOb3RpZmljYXRpb24gc3RydWN0ICov CiB9OwogCitzdHJ1Y3QgQ2hhbm5lbEhhc2gKK3sKKwljaGFyCQljaGFubmVsW05BTUVEQVRB TEVOXTsKK307CisKIHN0YXRpYyBOb3RpZmljYXRpb25MaXN0ICpwZW5kaW5nTm90aWZpZXMg PSBOVUxMOwogCiAvKgpAQCAtNDE4LDYgKzQ3MywyMCBAQCBzdGF0aWMgYm9vbCB1bmxpc3Rl bkV4aXRSZWdpc3RlcmVkID0gZmFsc2U7CiAvKiBUcnVlIGlmIHdlJ3JlIGN1cnJlbnRseSBy ZWdpc3RlcmVkIGFzIGEgbGlzdGVuZXIgaW4gYXN5bmNRdWV1ZUNvbnRyb2wgKi8KIHN0YXRp YyBib29sIGFtUmVnaXN0ZXJlZExpc3RlbmVyID0gZmFsc2U7CiAKKy8qCisgKiBRdWV1ZSBo ZWFkIHBvc2l0aW9ucyBmb3IgZGlyZWN0IGFkdmFuY2VtZW50LgorICogVGhlc2UgYXJlIGNh cHR1cmVkIGR1cmluZyBQcmVDb21taXRfTm90aWZ5IHdoaWxlIGhvbGRpbmcgdGhlIGhlYXZ5 d2VpZ2h0CisgKiBsb2NrIG9uIGRhdGFiYXNlIDAsIGVuc3VyaW5nIG5vIG90aGVyIGJhY2tl bmQgY2FuIGluc2VydCBub3RpZmljYXRpb25zCisgKiBiZXR3ZWVuIHRoZW0uICBTaWduYWxC YWNrZW5kcyB1c2VzIHRoZXNlIHRvIGFkdmFuY2UgaWRsZSBiYWNrZW5kcy4KKyAqLworc3Rh dGljIFF1ZXVlUG9zaXRpb24gcXVldWVIZWFkQmVmb3JlV3JpdGU7CitzdGF0aWMgUXVldWVQ b3NpdGlvbiBxdWV1ZUhlYWRBZnRlcldyaXRlOworCisvKgorICogTGlzdCBvZiBjaGFubmVs cyB3aXRoIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlv bi4KKyAqLworc3RhdGljIExpc3QgKnBlbmRpbmdOb3RpZnlDaGFubmVscyA9IE5JTDsKKwog LyogaGF2ZSB3ZSBhZHZhbmNlZCB0byBhIHBhZ2UgdGhhdCdzIGEgbXVsdGlwbGUgb2YgUVVF VUVfQ0xFQU5VUF9ERUxBWT8gKi8KIHN0YXRpYyBib29sIHRyeUFkdmFuY2VUYWlsID0gZmFs c2U7CiAKQEAgLTQyOCw3ICs0OTcsNiBAQCBib29sCQlUcmFjZV9ub3RpZnkgPSBmYWxzZTsK IGludAkJCW1heF9ub3RpZnlfcXVldWVfcGFnZXMgPSAxMDQ4NTc2OwogCiAvKiBsb2NhbCBm dW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW5saW5lIGludDY0IGFzeW5jUXVldWVQ YWdlRGlmZihpbnQ2NCBwLCBpbnQ2NCBxKTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBhc3luY1F1 ZXVlUGFnZVByZWNlZGVzKGludDY0IHAsIGludDY0IHEpOwogc3RhdGljIHZvaWQgcXVldWVf bGlzdGVuKExpc3RlbkFjdGlvbktpbmQgYWN0aW9uLCBjb25zdCBjaGFyICpjaGFubmVsKTsK IHN0YXRpYyB2b2lkIEFzeW5jX1VubGlzdGVuT25FeGl0KGludCBjb2RlLCBEYXR1bSBhcmcp OwpAQCAtNDU3LDE2ICs1MjUsOSBAQCBzdGF0aWMgdm9pZCBBZGRFdmVudFRvUGVuZGluZ05v dGlmaWVzKE5vdGlmaWNhdGlvbiAqbik7CiBzdGF0aWMgdWludDMyIG5vdGlmaWNhdGlvbl9o YXNoKGNvbnN0IHZvaWQgKmtleSwgU2l6ZSBrZXlzaXplKTsKIHN0YXRpYyBpbnQJbm90aWZp Y2F0aW9uX21hdGNoKGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUg a2V5c2l6ZSk7CiBzdGF0aWMgdm9pZCBDbGVhclBlbmRpbmdBY3Rpb25zQW5kTm90aWZpZXMo dm9pZCk7Ci0KLS8qCi0gKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHF1 ZXVlIHBhZ2UgbnVtYmVycy4KLSAqIFByZXZpb3VzbHkgdGhpcyBmdW5jdGlvbiBhY2NvdW50 ZWQgZm9yIGEgd3JhcGFyb3VuZC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQ2NAotYXN5bmNR dWV1ZVBhZ2VEaWZmKGludDY0IHAsIGludDY0IHEpCi17Ci0JcmV0dXJuIHAgLSBxOwotfQor c3RhdGljIGlubGluZSB2b2lkIENoYW5uZWxIYXNoUHJlcGFyZUtleShDaGFubmVsSGFzaEtl eSAqa2V5LCBPaWQgZGJvaWQsIGNvbnN0IGNoYXIgKmNoYW5uZWwpOworc3RhdGljIGRzaGFz aF9oYXNoIGNoYW5uZWxIYXNoRnVuYyhjb25zdCB2b2lkICprZXksIHNpemVfdCBzaXplLCB2 b2lkICphcmcpOworc3RhdGljIHZvaWQgaW5pdENoYW5uZWxIYXNoKHZvaWQpOwogCiAvKgog ICogRGV0ZXJtaW5lcyB3aGV0aGVyIHAgcHJlY2VkZXMgcS4KQEAgLTQ3OCw2ICs1MzksMTA1 IEBAIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMoaW50NjQgcCwgaW50NjQgcSkKIAlyZXR1cm4g cCA8IHE7CiB9CiAKKy8qCisgKiBjaGFubmVsSGFzaEZ1bmMKKyAqCQlIYXNoIGZ1bmN0aW9u IGZvciBjaGFubmVsIGtleXMuCisgKi8KK3N0YXRpYyBkc2hhc2hfaGFzaAorY2hhbm5lbEhh c2hGdW5jKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZykKK3sKKwlj b25zdCBDaGFubmVsSGFzaEtleSAqayA9IChjb25zdCBDaGFubmVsSGFzaEtleSAqKSBrZXk7 CisJZHNoYXNoX2hhc2ggaDsKKworCWggPSBEYXR1bUdldFVJbnQzMihoYXNoX3VpbnQzMihr LT5kYm9pZCkpOworCWggXj0gRGF0dW1HZXRVSW50MzIoaGFzaF9hbnkoKGNvbnN0IHVuc2ln bmVkIGNoYXIgKikgay0+Y2hhbm5lbCwKKwkJCQkJCQkJIHN0cm5sZW4oay0+Y2hhbm5lbCwg TkFNRURBVEFMRU4pKSk7CisKKwlyZXR1cm4gaDsKK30KKworLyogcGFyYW1ldGVycyBmb3Ig dGhlIGNoYW5uZWwgaGFzaCB0YWJsZSAqLworc3RhdGljIGNvbnN0IGRzaGFzaF9wYXJhbWV0 ZXJzIGNoYW5uZWxEU0hQYXJhbXMgPSB7CisJc2l6ZW9mKENoYW5uZWxIYXNoS2V5KSwKKwlz aXplb2YoQ2hhbm5lbEVudHJ5KSwKKwlkc2hhc2hfbWVtY21wLAorCWNoYW5uZWxIYXNoRnVu YywKKwlkc2hhc2hfbWVtY3B5LAorCUxXVFJBTkNIRV9OT1RJRllfQ0hBTk5FTF9IQVNICit9 OworCisvKgorICogaW5pdENoYW5uZWxIYXNoCisgKgkJTGF6eSBpbml0aWFsaXphdGlvbiBv ZiB0aGUgY2hhbm5lbCBoYXNoIHRhYmxlLgorICovCitzdGF0aWMgdm9pZAoraW5pdENoYW5u ZWxIYXNoKHZvaWQpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJLyogUXVp Y2sgZXhpdCBpZiB3ZSBhbHJlYWR5IGRpZCB0aGlzICovCisJaWYgKGFzeW5jUXVldWVDb250 cm9sLT5jaGFubmVsSGFzaERTSCAhPSBEU0hBU0hfSEFORExFX0lOVkFMSUQgJiYKKwkJY2hh bm5lbEhhc2ggIT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogT3RoZXJ3aXNlLCB1c2UgYSBs b2NrIHRvIGVuc3VyZSBvbmx5IG9uZSBwcm9jZXNzIGNyZWF0ZXMgdGhlIHRhYmxlICovCisJ TFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKiBC ZSBzdXJlIGFueSBsb2NhbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IERTQSByb3V0aW5lcyBpcyBw ZXJzaXN0ZW50ICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BN ZW1vcnlDb250ZXh0KTsKKworCWlmIChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hE U0ggPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElEKQorCXsKKwkJLyogSW5pdGlhbGl6ZSBkeW5h bWljIHNoYXJlZCBoYXNoIHRhYmxlIGZvciBjaGFubmVsIGhhc2ggKi8KKwkJY2hhbm5lbERT QSA9IGRzYV9jcmVhdGUoTFdUUkFOQ0hFX05PVElGWV9DSEFOTkVMX0hBU0gpOworCQlkc2Ff cGluKGNoYW5uZWxEU0EpOworCQlkc2FfcGluX21hcHBpbmcoY2hhbm5lbERTQSk7CisJCWNo YW5uZWxIYXNoID0gZHNoYXNoX2NyZWF0ZShjaGFubmVsRFNBLCAmY2hhbm5lbERTSFBhcmFt cywgTlVMTCk7CisKKwkJLyogU3RvcmUgaGFuZGxlcyBpbiBzaGFyZWQgbWVtb3J5IGZvciBv dGhlciBiYWNrZW5kcyB0byB1c2UgKi8KKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxI YXNoRFNBID0gZHNhX2dldF9oYW5kbGUoY2hhbm5lbERTQSk7CisJCWFzeW5jUXVldWVDb250 cm9sLT5jaGFubmVsSGFzaERTSCA9CisJCQlkc2hhc2hfZ2V0X2hhc2hfdGFibGVfaGFuZGxl KGNoYW5uZWxIYXNoKTsKKwl9CisJZWxzZSBpZiAoIWNoYW5uZWxIYXNoKQorCXsKKwkJLyog QXR0YWNoIHRvIGV4aXN0aW5nIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUgKi8KKwkJY2hh bm5lbERTQSA9IGRzYV9hdHRhY2goYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNB KTsKKwkJZHNhX3Bpbl9tYXBwaW5nKGNoYW5uZWxEU0EpOworCQljaGFubmVsSGFzaCA9IGRz aGFzaF9hdHRhY2goY2hhbm5lbERTQSwgJmNoYW5uZWxEU0hQYXJhbXMsCisJCQkJCQkJCQlh c3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0gsCisJCQkJCQkJCQlOVUxMKTsKKwl9 CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTFdMb2NrUmVsZWFz ZShOb3RpZnlRdWV1ZUxvY2spOworfQorCisvKgorICogaW5pdExpc3RlbkNoYW5uZWxzSGFz aAorICoJCUxhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxvY2FsIGxpc3RlbiBjaGFubmVs cyBoYXNoIHRhYmxlLgorICovCitzdGF0aWMgdm9pZAoraW5pdExpc3RlbkNoYW5uZWxzSGFz aCh2b2lkKQoreworCUhBU0hDVEwJCWhhc2hfY3RsOworCisJLyogUXVpY2sgZXhpdCBpZiB3 ZSBhbHJlYWR5IGRpZCB0aGlzICovCisJaWYgKGxpc3RlbkNoYW5uZWxzSGFzaCAhPSBOVUxM KQorCQlyZXR1cm47CisKKwkvKiBJbml0aWFsaXplIGxvY2FsIGhhc2ggdGFibGUgZm9yIHRo aXMgYmFja2VuZCdzIGxpc3RlbmVkIGNoYW5uZWxzICovCisJbWVtc2V0KCZoYXNoX2N0bCwg MCwgc2l6ZW9mKGhhc2hfY3RsKSk7CisJaGFzaF9jdGwua2V5c2l6ZSA9IE5BTUVEQVRBTEVO OworCWhhc2hfY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihzdHJ1Y3QgQ2hhbm5lbEhhc2gpOwor CisJbGlzdGVuQ2hhbm5lbHNIYXNoID0KKwkJaGFzaF9jcmVhdGUoIkxpc3RlbiBDaGFubmVs cyIsCisJCQkJCTY0LAorCQkJCQkmaGFzaF9jdGwsCisJCQkJCUhBU0hfRUxFTSB8IEhBU0hf U1RSSU5HUyk7Cit9CisKIC8qCiAgKiBSZXBvcnQgc3BhY2UgbmVlZGVkIGZvciBvdXIgc2hh cmVkIG1lbW9yeSBhcmVhCiAgKi8KQEAgLTUyMSwxMiArNjgxLDE3IEBAIEFzeW5jU2htZW1J bml0KHZvaWQpCiAJCVFVRVVFX1NUT1BfUEFHRSA9IDA7CiAJCVFVRVVFX0ZJUlNUX0xJU1RF TkVSID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAkJYXN5bmNRdWV1ZUNvbnRyb2wtPmxhc3RR dWV1ZUZpbGxXYXJuID0gMDsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNB ID0gRFNBX0hBTkRMRV9JTlZBTElEOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhh c2hEU0ggPSBEU0hBU0hfSEFORExFX0lOVkFMSUQ7CisKIAkJZm9yIChpbnQgaSA9IDA7IGkg PCBNYXhCYWNrZW5kczsgaSsrKQogCQl7CiAJCQlRVUVVRV9CQUNLRU5EX1BJRChpKSA9IElu dmFsaWRQaWQ7CiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJ CVFVRVVFX05FWFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQkJU0VU X1FVRVVFX1BPUyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlRVUVVRV9CQUNL RU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gZmFsc2U7CisJCQlRVUVVRV9CQUNLRU5EX0FEVkFO Q0lOR19QT1MoaSkgPSBmYWxzZTsKIAkJfQogCX0KIApAQCAtNjU3LDYgKzgyMiw3IEBAIEFz eW5jX05vdGlmeShjb25zdCBjaGFyICpjaGFubmVsLCBjb25zdCBjaGFyICpwYXlsb2FkKQog CQlub3RpZmllcy0+ZXZlbnRzID0gbGlzdF9tYWtlMShuKTsKIAkJLyogV2UgY2VydGFpbmx5 IGRvbid0IG5lZWQgYSBoYXNodGFibGUgeWV0ICovCiAJCW5vdGlmaWVzLT5oYXNodGFiID0g TlVMTDsKKwkJbm90aWZpZXMtPmNoYW5uZWxIYXNodGFiID0gTlVMTDsKIAkJbm90aWZpZXMt PnVwcGVyID0gcGVuZGluZ05vdGlmaWVzOwogCQlwZW5kaW5nTm90aWZpZXMgPSBub3RpZmll czsKIAl9CkBAIC02ODMsNyArODQ5LDcgQEAgQXN5bmNfTm90aWZ5KGNvbnN0IGNoYXIgKmNo YW5uZWwsIGNvbnN0IGNoYXIgKnBheWxvYWQpCiAgKgkJQ29tbW9uIGNvZGUgZm9yIGxpc3Rl biwgdW5saXN0ZW4sIHVubGlzdGVuIGFsbCBjb21tYW5kcy4KICAqCiAgKgkJQWRkcyB0aGUg cmVxdWVzdCB0byB0aGUgbGlzdCBvZiBwZW5kaW5nIGFjdGlvbnMuCi0gKgkJQWN0dWFsIHVw ZGF0ZSBvZiB0aGUgbGlzdGVuQ2hhbm5lbHMgbGlzdCBoYXBwZW5zIGR1cmluZyB0cmFuc2Fj dGlvbgorICoJCUFjdHVhbCB1cGRhdGUgb2YgdGhlIGxpc3RlbkNoYW5uZWxzSGFzaCBoYXBw ZW5zIGR1cmluZyB0cmFuc2FjdGlvbgogICoJCWNvbW1pdC4KICAqLwogc3RhdGljIHZvaWQK QEAgLTc4MywzMCArOTQ5LDQ5IEBAIEFzeW5jX1VubGlzdGVuQWxsKHZvaWQpCiAgKiBTUUwg ZnVuY3Rpb246IHJldHVybiBhIHNldCBvZiB0aGUgY2hhbm5lbCBuYW1lcyB0aGlzIGJhY2tl bmQgaXMgYWN0aXZlbHkKICAqIGxpc3RlbmluZyB0by4KICAqCi0gKiBOb3RlOiB0aGlzIGNv ZGluZyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCB0aGUgbGlzdGVuQ2hhbm5lbHMgbGlzdCBj YW5ub3QKKyAqIE5vdGU6IHRoaXMgY29kaW5nIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IHRo ZSBsaXN0ZW5DaGFubmVsc0hhc2ggY2Fubm90CiAgKiBjaGFuZ2Ugd2l0aGluIGEgdHJhbnNh Y3Rpb24uCiAgKi8KIERhdHVtCiBwZ19saXN0ZW5pbmdfY2hhbm5lbHMoUEdfRlVOQ1RJT05f QVJHUykKIHsKIAlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJSEFTSF9TRVFfU1RBVFVT ICpzdGF0dXM7CiAKIAkvKiBzdHVmZiBkb25lIG9ubHkgb24gdGhlIGZpcnN0IGNhbGwgb2Yg dGhlIGZ1bmN0aW9uICovCiAJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKIAl7CisJCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKwogCQkvKiBjcmVhdGUgYSBmdW5jdGlvbiBjb250ZXh0 IGZvciBjcm9zcy1jYWxsIHBlcnNpc3RlbmNlICovCiAJCWZ1bmNjdHggPSBTUkZfRklSU1RD QUxMX0lOSVQoKTsKKworCQkvKiBJbml0aWFsaXplIGhhc2ggdGFibGUgaXRlcmF0aW9uIGlm IHdlIGhhdmUgYW55IGNoYW5uZWxzICovCisJCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggIT0g TlVMTCkKKwkJeworCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5j Y3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCQkJc3RhdHVzID0gKEhBU0hfU0VRX1NU QVRVUyAqKSBwYWxsb2Moc2l6ZW9mKEhBU0hfU0VRX1NUQVRVUykpOworCQkJaGFzaF9zZXFf aW5pdChzdGF0dXMsIGxpc3RlbkNoYW5uZWxzSGFzaCk7CisJCQlmdW5jY3R4LT51c2VyX2Zj dHggPSBzdGF0dXM7CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJ CX0KKwkJZWxzZQorCQl7CisJCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBOVUxMOworCQl9CiAJ fQogCiAJLyogc3R1ZmYgZG9uZSBvbiBldmVyeSBjYWxsIG9mIHRoZSBmdW5jdGlvbiAqLwog CWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCXN0YXR1cyA9IChIQVNIX1NFUV9T VEFUVVMgKikgZnVuY2N0eC0+dXNlcl9mY3R4OwogCi0JaWYgKGZ1bmNjdHgtPmNhbGxfY250 ciA8IGxpc3RfbGVuZ3RoKGxpc3RlbkNoYW5uZWxzKSkKKwlpZiAoc3RhdHVzICE9IE5VTEwp CiAJewotCQljaGFyCSAgICpjaGFubmVsID0gKGNoYXIgKikgbGlzdF9udGgobGlzdGVuQ2hh bm5lbHMsCi0JCQkJCQkJCQkJCQlmdW5jY3R4LT5jYWxsX2NudHIpOworCQlzdHJ1Y3QgQ2hh bm5lbEhhc2ggKmVudHJ5OwogCi0JCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBDU3RyaW5n R2V0VGV4dERhdHVtKGNoYW5uZWwpKTsKKwkJZW50cnkgPSAoc3RydWN0IENoYW5uZWxIYXNo ICopIGhhc2hfc2VxX3NlYXJjaChzdGF0dXMpOworCQlpZiAoZW50cnkgIT0gTlVMTCkKKwkJ CVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBDU3RyaW5nR2V0VGV4dERhdHVtKGVudHJ5LT5j aGFubmVsKSk7CiAJfQogCiAJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOwpAQCAtODk0LDYg KzEwNzksMzYgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCWlmIChwZW5kaW5nTm90aWZp ZXMpCiAJewogCQlMaXN0Q2VsbCAgICpuZXh0Tm90aWZ5OworCQlib29sCQlmaXJzdEl0ZXJh dGlvbiA9IHRydWU7CisKKwkJLyoKKwkJICogQnVpbGQgbGlzdCBvZiB1bmlxdWUgY2hhbm5l bHMgZm9yIFNpZ25hbEJhY2tlbmRzKCkuCisJCSAqCisJCSAqIElmIHdlIGhhdmUgYSBjaGFu bmVsSGFzaHRhYiwgdXNlIGl0IHRvIGVmZmljaWVudGx5IGdldCB0aGUgdW5pcXVlCisJCSAq IGNoYW5uZWxzLiAgT3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG8gdGhlIGxpbmVhciBhcHByb2Fj aC4KKwkJICovCisJCXBlbmRpbmdOb3RpZnlDaGFubmVscyA9IE5JTDsKKwkJaWYgKHBlbmRp bmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgIT0gTlVMTCkKKwkJeworCQkJSEFTSF9TRVFf U1RBVFVTIHN0YXR1czsKKwkJCXN0cnVjdCBDaGFubmVsSGFzaCAqY2hhbm5lbEVudHJ5Owor CisJCQloYXNoX3NlcV9pbml0KCZzdGF0dXMsIHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhh c2h0YWIpOworCQkJd2hpbGUgKChjaGFubmVsRW50cnkgPSAoc3RydWN0IENoYW5uZWxIYXNo ICopIGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwkJCQlwZW5kaW5nTm90 aWZ5Q2hhbm5lbHMgPSBsYXBwZW5kKHBlbmRpbmdOb3RpZnlDaGFubmVscywgY2hhbm5lbEVu dHJ5LT5jaGFubmVsKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIExpbmVhciBhcHByb2Fj aCBmb3Igc21hbGwgbnVtYmVyIG9mIG5vdGlmaWNhdGlvbnMgKi8KKwkJCWZvcmVhY2hfcHRy KE5vdGlmaWNhdGlvbiwgbiwgcGVuZGluZ05vdGlmaWVzLT5ldmVudHMpCisJCQl7CisJCQkJ Y2hhcgkgICAqY2hhbm5lbCA9IG4tPmRhdGE7CisKKwkJCQkvKiBBZGQgaWYgbm90IGFscmVh ZHkgaW4gbGlzdCAqLworCQkJCWlmICghbGlzdF9tZW1iZXJfcHRyKHBlbmRpbmdOb3RpZnlD aGFubmVscywgY2hhbm5lbCkpCisJCQkJCXBlbmRpbmdOb3RpZnlDaGFubmVscyA9IGxhcHBl bmQocGVuZGluZ05vdGlmeUNoYW5uZWxzLCBjaGFubmVsKTsKKwkJCX0KKwkJfQogCiAJCS8q CiAJCSAqIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYW4gWElEIGFzc2lnbmVkIHRvIHRoZSBj dXJyZW50IHRyYW5zYWN0aW9uLgpAQCAtOTIxLDYgKzExMzYsMjEgQEAgUHJlQ29tbWl0X05v dGlmeSh2b2lkKQogCQkgKi8KIAkJTG9ja1NoYXJlZE9iamVjdChEYXRhYmFzZVJlbGF0aW9u SWQsIEludmFsaWRPaWQsIDAsCiAJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCS8q CisJCSAqIEZvciB0aGUgZGlyZWN0IGFkdmFuY2VtZW50IG9wdGltaXphdGlvbiBpbiBTaWdu YWxCYWNrZW5kcygpLCB3ZQorCQkgKiBuZWVkIHRvIGVuc3VyZSB0aGF0IG5vIG90aGVyIGJh Y2tlbmQgY2FuIGluc2VydCBxdWV1ZSBlbnRyaWVzCisJCSAqIGJldHdlZW4gcXVldWVIZWFk QmVmb3JlV3JpdGUgYW5kIHF1ZXVlSGVhZEFmdGVyV3JpdGUuICBUaGUKKwkJICogaGVhdnl3 ZWlnaHQgbG9jayBhYm92ZSBwcm92aWRlcyB0aGlzIGd1YXJhbnRlZSwgc2luY2UgaXQgc2Vy aWFsaXplcworCQkgKiBhbGwgd3JpdGVycy4KKwkJICoKKwkJICogTm90ZTogaWYgdGhlIGhl YXZ5d2VpZ2h0IGxvY2sgd2VyZSBldmVyIHJlbW92ZWQgZm9yIHNjYWxhYmlsaXR5CisJCSAq IHJlYXNvbnMsIHdlIGNvdWxkIGFjaGlldmUgdGhlIHNhbWUgZ3VhcmFudGVlIGJ5IGhvbGRp bmcKKwkJICogTm90aWZ5UXVldWVMb2NrIGluIEVYQ0xVU0lWRSBtb2RlIGFjcm9zcyBhbGwg b3VyIGluc2VydGlvbnMsIHJhdGhlcgorCQkgKiB0aGFuIHJlbGVhc2luZyBhbmQgcmVhY3F1 aXJpbmcgaXQgZm9yIGVhY2ggcGFnZSBhcyB3ZSBkbyBiZWxvdy4KKwkJICovCisKKwkJLyog SW5pdGlhbGl6ZSBxdWV1ZUhlYWRCZWZvcmVXcml0ZSB0byBhIHNhZmUgZGVmYXVsdCAqLwor CQlTRVRfUVVFVUVfUE9TKHF1ZXVlSGVhZEJlZm9yZVdyaXRlLCAwLCAwKTsKIAogCQkvKiBO b3cgcHVzaCB0aGUgbm90aWZpY2F0aW9ucyBpbnRvIHRoZSBxdWV1ZSAqLwogCQluZXh0Tm90 aWZ5ID0gbGlzdF9oZWFkKHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzKTsKQEAgLTkzOSwxMiAr MTE2OSwyMCBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJCQkgKiBwb2ludCBpbiB0aW1l IHdlIGNhbiBzdGlsbCByb2xsIHRoZSB0cmFuc2FjdGlvbiBiYWNrLgogCQkJICovCiAJCQlM V0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJCWlmIChm aXJzdEl0ZXJhdGlvbikKKwkJCXsKKwkJCQlxdWV1ZUhlYWRCZWZvcmVXcml0ZSA9IFFVRVVF X0hFQUQ7CisJCQkJZmlyc3RJdGVyYXRpb24gPSBmYWxzZTsKKwkJCX0KKwogCQkJYXN5bmNR dWV1ZUZpbGxXYXJuaW5nKCk7CiAJCQlpZiAoYXN5bmNRdWV1ZUlzRnVsbCgpKQogCQkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhD RUVERUQpLAogCQkJCQkJIGVycm1zZygidG9vIG1hbnkgbm90aWZpY2F0aW9ucyBpbiB0aGUg Tk9USUZZIHF1ZXVlIikpKTsKIAkJCW5leHROb3RpZnkgPSBhc3luY1F1ZXVlQWRkRW50cmll cyhuZXh0Tm90aWZ5KTsKKwkJCXF1ZXVlSGVhZEFmdGVyV3JpdGUgPSBRVUVVRV9IRUFEOwor CiAJCQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAJCX0KIApAQCAtOTU3LDcg KzExOTUsNyBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAgKgogICoJCVRoaXMgaXMgY2Fs bGVkIGF0IHRyYW5zYWN0aW9uIGNvbW1pdCwgYWZ0ZXIgY29tbWl0dGluZyB0byBjbG9nLgog ICoKLSAqCQlVcGRhdGUgbGlzdGVuQ2hhbm5lbHMgYW5kIGNsZWFyIHRyYW5zYWN0aW9uLWxv Y2FsIHN0YXRlLgorICoJCVVwZGF0ZSBsaXN0ZW5DaGFubmVsc0hhc2ggYW5kIGNsZWFyIHRy YW5zYWN0aW9uLWxvY2FsIHN0YXRlLgogICoKICAqCQlJZiB3ZSBpc3N1ZWQgYW55IG5vdGlm aWNhdGlvbnMgaW4gdGhlIHRyYW5zYWN0aW9uLCBzZW5kIHNpZ25hbHMgdG8KICAqCQlsaXN0 ZW5pbmcgYmFja2VuZHMgKHBvc3NpYmx5IGluY2x1ZGluZyBvdXJzZWx2ZXMpIHRvIHByb2Nl c3MgdGhlbS4KQEAgLTEwMDIsNyArMTI0MCw4IEBAIEF0Q29tbWl0X05vdGlmeSh2b2lkKQog CX0KIAogCS8qIElmIG5vIGxvbmdlciBsaXN0ZW5pbmcgdG8gYW55dGhpbmcsIGdldCBvdXQg b2YgbGlzdGVuZXIgYXJyYXkgKi8KLQlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIgJiYgbGlz dGVuQ2hhbm5lbHMgPT0gTklMKQorCWlmIChhbVJlZ2lzdGVyZWRMaXN0ZW5lciAmJgorCQko bGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9nZXRfbnVtX2VudHJpZXMobGlz dGVuQ2hhbm5lbHNIYXNoKSA9PSAwKSkKIAkJYXN5bmNRdWV1ZVVucmVnaXN0ZXIoKTsKIAog CS8qCkBAIC0xMTM1LDUwICsxMzc0LDE0NSBAQCBFeGVjX0xpc3RlblByZUNvbW1pdCh2b2lk KQogc3RhdGljIHZvaWQKIEV4ZWNfTGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwp CiB7Ci0JTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCUNoYW5uZWxIYXNoS2V5IGtleTsK KwlDaGFubmVsRW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOworCVByb2NOdW1iZXIgKmxp c3RlbmVyczsKIAogCS8qIERvIG5vdGhpbmcgaWYgd2UgYXJlIGFscmVhZHkgbGlzdGVuaW5n IG9uIHRoaXMgY2hhbm5lbCAqLwogCWlmIChJc0xpc3RlbmluZ09uKGNoYW5uZWwpKQogCQly ZXR1cm47CiAKIAkvKgotCSAqIEFkZCB0aGUgbmV3IGNoYW5uZWwgbmFtZSB0byBsaXN0ZW5D aGFubmVscy4KKwkgKiBBZGQgdGhlIG5ldyBjaGFubmVsIG5hbWUgdG8gbGlzdGVuQ2hhbm5l bHNIYXNoLgogCSAqCiAJICogWFhYIEl0IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdG8g Z2V0IGFuIG91dC1vZi1tZW1vcnkgZmFpbHVyZSBoZXJlLAogCSAqIHdoaWNoIHdvdWxkIGJl IGJhZCBiZWNhdXNlIHdlIGFscmVhZHkgY29tbWl0dGVkLiAgRm9yIHRoZSBtb21lbnQgaXQK IAkgKiBkb2Vzbid0IHNlZW0gd29ydGggdHJ5aW5nIHRvIGd1YXJkIGFnYWluc3QgdGhhdCwg YnV0IG1heWJlIGltcHJvdmUgdGhpcwogCSAqIGxhdGVyLgogCSAqLwotCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7Ci0JbGlzdGVuQ2hh bm5lbHMgPSBsYXBwZW5kKGxpc3RlbkNoYW5uZWxzLCBwc3RyZHVwKGNoYW5uZWwpKTsKLQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJaW5pdExpc3RlbkNoYW5uZWxz SGFzaCgpOworCSh2b2lkKSBoYXNoX3NlYXJjaChsaXN0ZW5DaGFubmVsc0hhc2gsIGNoYW5u ZWwsIEhBU0hfRU5URVIsIE5VTEwpOworCisJLyogTm93IHVwZGF0ZSB0aGUgc2hhcmVkIGNo YW5uZWxIYXNoIGZvciBTaWduYWxCYWNrZW5kcygpIHRvIHVzZSAqLworCWluaXRDaGFubmVs SGFzaCgpOworCisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwg Y2hhbm5lbCk7CisKKwkvKgorCSAqIEZvciBuZXcgZW50cmllcywgd2UgaW5pdGlhbGl6ZSBs aXN0ZW5lcnNBcnJheSB0byBJbnZhbGlkRHNhUG9pbnRlciBhcyBhCisJICogbWFya2VyLiBU aGlzIGhhbmRsZXMgYm90aCB0aGUgaW5pdGlhbCBjcmVhdGlvbiBhbmQgcG90ZW50aWFsIHJl dHJ5CisJICogYWZ0ZXIgT09NLgorCSAqLworCWVudHJ5ID0gZHNoYXNoX2ZpbmRfb3JfaW5z ZXJ0KGNoYW5uZWxIYXNoLCAma2V5LCAmZm91bmQpOworCisJaWYgKCFmb3VuZCkKKwkJZW50 cnktPmxpc3RlbmVyc0FycmF5ID0gSW52YWxpZERzYVBvaW50ZXI7CisKKwlpZiAoIURzYVBv aW50ZXJJc1ZhbGlkKGVudHJ5LT5saXN0ZW5lcnNBcnJheSkpCisJeworCQkvKiBGaXJzdCBs aXN0ZW5lciBmb3IgdGhpcyBjaGFubmVsICovCisJCWVudHJ5LT5saXN0ZW5lcnNBcnJheSA9 IGRzYV9hbGxvY2F0ZShjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkgc2l6ZW9mKFByb2NOdW1i ZXIpICogSU5JVElBTF9MSVNURU5FUlNfQVJSQVlfU0laRSk7CisJCWVudHJ5LT5udW1MaXN0 ZW5lcnMgPSAwOworCQllbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzID0gSU5JVElBTF9MSVNU RU5FUlNfQVJSQVlfU0laRTsKKwl9CisKKwlsaXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBk c2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJICAgZW50cnktPmxpc3Rl bmVyc0FycmF5KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVy czsgaSsrKQorCXsKKwkJaWYgKGxpc3RlbmVyc1tpXSA9PSBNeVByb2NOdW1iZXIpCisJCXsK KwkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCXJldHVy bjsJCQkJLyogQWxyZWFkeSByZWdpc3RlcmVkICovCisJCX0KKwl9CisKKwlpZiAoZW50cnkt Pm51bUxpc3RlbmVycyA+PSBlbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzKQorCXsKKwkJaW50 CQkJbmV3X3NpemUgPSBlbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzICogMjsKKwkJZHNhX3Bv aW50ZXIgbmV3X2FycmF5ID0gZHNhX2FsbG9jYXRlKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJ CSBzaXplb2YoUHJvY051bWJlcikgKiBuZXdfc2l6ZSk7CisJCVByb2NOdW1iZXIgKm5ld19s aXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwK KwkJCQkJCQkJCQkJCQkJCQkgICBuZXdfYXJyYXkpOworCisJCW1lbWNweShuZXdfbGlzdGVu ZXJzLCBsaXN0ZW5lcnMsCisJCQkgICBzaXplb2YoUHJvY051bWJlcikgKiBlbnRyeS0+bnVt TGlzdGVuZXJzKTsKKworCQlkc2FfZnJlZShjaGFubmVsRFNBLCBlbnRyeS0+bGlzdGVuZXJz QXJyYXkpOworCQllbnRyeS0+bGlzdGVuZXJzQXJyYXkgPSBuZXdfYXJyYXk7CisJCWVudHJ5 LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgPSBuZXdfc2l6ZTsKKwkJbGlzdGVuZXJzID0gbmV3X2xp c3RlbmVyczsKKwl9CisKKwlsaXN0ZW5lcnNbZW50cnktPm51bUxpc3RlbmVyc10gPSBNeVBy b2NOdW1iZXI7CisJZW50cnktPm51bUxpc3RlbmVycysrOworCisJZHNoYXNoX3JlbGVhc2Vf bG9jayhjaGFubmVsSGFzaCwgZW50cnkpOwogfQogCiAvKgogICogRXhlY19Vbmxpc3RlbkNv bW1pdCAtLS0gc3Vicm91dGluZSBmb3IgQXRDb21taXRfTm90aWZ5CiAgKgotICogUmVtb3Zl IHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBuYW1lIGZyb20gbGlzdGVuQ2hhbm5lbHMuCisgKgkJ VW5saXN0ZW4gdGhlIHNwZWNpZmllZCBjaGFubmVsIGZvciB0aGlzIGJhY2tlbmQuCiAgKi8K IHN0YXRpYyB2b2lkCiBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwp CiB7Ci0JTGlzdENlbGwgICAqcTsKKwlDaGFubmVsSGFzaEtleSBrZXk7CisJQ2hhbm5lbEVu dHJ5ICplbnRyeTsKKwlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisJaW50CQkJaTsKIAogCWlm IChUcmFjZV9ub3RpZnkpCiAJCWVsb2coREVCVUcxLCAiRXhlY19Vbmxpc3RlbkNvbW1pdCgl cywlZCkiLCBjaGFubmVsLCBNeVByb2NQaWQpOwogCi0JZm9yZWFjaChxLCBsaXN0ZW5DaGFu bmVscykKKwkvKiBSZW1vdmUgZnJvbSBvdXIgbG9jYWwgY2FjaGUgKi8KKwlpZiAobGlzdGVu Q2hhbm5lbHNIYXNoICE9IE5VTEwpCisJCSh2b2lkKSBoYXNoX3NlYXJjaChsaXN0ZW5DaGFu bmVsc0hhc2gsIGNoYW5uZWwsIEhBU0hfUkVNT1ZFLCBOVUxMKTsKKworCS8qIE5vdyByZW1v dmUgZnJvbSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoICovCisJaWYgKGNoYW5uZWxIYXNoID09 IE5VTEwpCisJCXJldHVybjsKKworCUNoYW5uZWxIYXNoUHJlcGFyZUtleSgma2V5LCBNeURh dGFiYXNlSWQsIGNoYW5uZWwpOworCisJLyogTG9vayB1cCB0aGUgY2hhbm5lbCB3aXRoIGV4 Y2x1c2l2ZSBsb2NrIHNvIHdlIGNhbiBtb2RpZnkgaXQgKi8KKwllbnRyeSA9IGRzaGFzaF9m aW5kKGNoYW5uZWxIYXNoLCAma2V5LCB0cnVlKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJ cmV0dXJuOworCisJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNz KGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsgaSsrKQogCXsKLQkJY2hh cgkgICAqbGNoYW4gPSAoY2hhciAqKSBsZmlyc3QocSk7Ci0KLQkJaWYgKHN0cmNtcChsY2hh biwgY2hhbm5lbCkgPT0gMCkKKwkJaWYgKGxpc3RlbmVyc1tpXSA9PSBNeVByb2NOdW1iZXIp CiAJCXsKLQkJCWxpc3RlbkNoYW5uZWxzID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChsaXN0 ZW5DaGFubmVscywgcSk7Ci0JCQlwZnJlZShsY2hhbik7Ci0JCQlicmVhazsKKwkJCWVudHJ5 LT5udW1MaXN0ZW5lcnMtLTsKKwkJCWlmIChpIDwgZW50cnktPm51bUxpc3RlbmVycykKKwkJ CQltZW1tb3ZlKCZsaXN0ZW5lcnNbaV0sICZsaXN0ZW5lcnNbaSArIDFdLAorCQkJCQkJc2l6 ZW9mKFByb2NOdW1iZXIpICogKGVudHJ5LT5udW1MaXN0ZW5lcnMgLSBpKSk7CisKKwkJCWlm IChlbnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQl7CisJCQkJLyogTGFzdCBsaXN0ZW5l ciBmb3IgdGhpcyBjaGFubmVsICovCisJCQkJZHNhX2ZyZWUoY2hhbm5lbERTQSwgZW50cnkt Pmxpc3RlbmVyc0FycmF5KTsKKwkJCQlkc2hhc2hfZGVsZXRlX2VudHJ5KGNoYW5uZWxIYXNo LCBlbnRyeSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZHNoYXNoX3JlbGVhc2VfbG9j ayhjaGFubmVsSGFzaCwgZW50cnkpOworCQkJfQorCisJCQlyZXR1cm47CiAJCX0KIAl9CiAK Kwlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CisKIAkvKgogCSAq IFdlIGRvIG5vdCBjb21wbGFpbiBhYm91dCB1bmxpc3RlbmluZyBzb21ldGhpbmcgbm90IGJl aW5nIGxpc3RlbmVkOwogCSAqIHNob3VsZCB3ZT8KQEAgLTExOTMsMzQgKzE1MjcsNjggQEAg RXhlY19Vbmxpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKQogc3RhdGljIHZvaWQK IEV4ZWNfVW5saXN0ZW5BbGxDb21taXQodm9pZCkKIHsKKwlkc2hhc2hfc2VxX3N0YXR1cyBz dGF0dXM7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwogCWlmIChUcmFjZV9ub3RpZnkpCiAJ CWVsb2coREVCVUcxLCAiRXhlY19Vbmxpc3RlbkFsbENvbW1pdCglZCkiLCBNeVByb2NQaWQp OwogCi0JbGlzdF9mcmVlX2RlZXAobGlzdGVuQ2hhbm5lbHMpOwotCWxpc3RlbkNoYW5uZWxz ID0gTklMOworCS8qIENsZWFyIG91ciBsb2NhbCBjYWNoZSAqLworCWlmIChsaXN0ZW5DaGFu bmVsc0hhc2ggIT0gTlVMTCkKKwl7CisJCWhhc2hfZGVzdHJveShsaXN0ZW5DaGFubmVsc0hh c2gpOworCQlsaXN0ZW5DaGFubmVsc0hhc2ggPSBOVUxMOworCX0KKworCS8qIE5vdyByZW1v dmUgZnJvbSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoICovCisJaWYgKGNoYW5uZWxIYXNoID09 IE5VTEwpCisJCXJldHVybjsKKworCWRzaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBjaGFubmVs SGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmc3RhdHVz KSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRyeS0+a2V5LmRib2lkID09IE15RGF0YWJhc2VJ ZCkKKwkJeworCQkJUHJvY051bWJlciAqbGlzdGVuZXJzOworCQkJaW50CQkJaTsKKworCQkJ bGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0Es CisJCQkJCQkJCQkJCQkJICAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQkJZm9yIChp ID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkrKykKKwkJCXsKKwkJCQlpZiAobGlz dGVuZXJzW2ldID09IE15UHJvY051bWJlcikKKwkJCQl7CisJCQkJCWVudHJ5LT5udW1MaXN0 ZW5lcnMtLTsKKwkJCQkJaWYgKGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzKQorCQkJCQkJbWVt bW92ZSgmbGlzdGVuZXJzW2ldLCAmbGlzdGVuZXJzW2kgKyAxXSwKKwkJCQkJCQkJc2l6ZW9m KFByb2NOdW1iZXIpICogKGVudHJ5LT5udW1MaXN0ZW5lcnMgLSBpKSk7CisKKwkJCQkJaWYg KGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0gMCkKKwkJCQkJeworCQkJCQkJZHNhX2ZyZWUoY2hh bm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKwkJCQkJCWRzaGFzaF9kZWxldGVf Y3VycmVudCgmc3RhdHVzKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJ CX0KKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZzdGF0dXMpOwogfQogCiAvKgogICogVGVzdCB3 aGV0aGVyIHdlIGFyZSBhY3RpdmVseSBsaXN0ZW5pbmcgb24gdGhlIGdpdmVuIGNoYW5uZWwg bmFtZS4KICAqCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBldmVy eSBub3RpZmljYXRpb24gZm91bmQgaW4gdGhlIHF1ZXVlLgotICogUGVyaGFwcyBpdCBpcyB3 b3J0aCBmdXJ0aGVyIG9wdGltaXphdGlvbiwgZWcgY29udmVydCB0aGUgbGlzdCB0byBhIHNv cnRlZAotICogYXJyYXkgc28gd2UgY2FuIGJpbmFyeS1zZWFyY2ggaXQuICBJbiBwcmFjdGlj ZSB0aGUgbGlzdCBpcyBsaWtlbHkgdG8gYmUKLSAqIGZhaXJseSBzaG9ydCwgdGhvdWdoLgog ICovCiBzdGF0aWMgYm9vbAogSXNMaXN0ZW5pbmdPbihjb25zdCBjaGFyICpjaGFubmVsKQog ewotCUxpc3RDZWxsICAgKnA7CisJaWYgKGxpc3RlbkNoYW5uZWxzSGFzaCA9PSBOVUxMKQor CQlyZXR1cm4gZmFsc2U7CiAKLQlmb3JlYWNoKHAsIGxpc3RlbkNoYW5uZWxzKQotCXsKLQkJ Y2hhcgkgICAqbGNoYW4gPSAoY2hhciAqKSBsZmlyc3QocCk7Ci0KLQkJaWYgKHN0cmNtcChs Y2hhbiwgY2hhbm5lbCkgPT0gMCkKLQkJCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFs c2U7CisJcmV0dXJuIChoYXNoX3NlYXJjaChsaXN0ZW5DaGFubmVsc0hhc2gsIGNoYW5uZWws IEhBU0hfRklORCwgTlVMTCkgIT0gTlVMTCk7CiB9CiAKIC8qCkBAIC0xMjMwLDcgKzE1OTgs NyBAQCBJc0xpc3RlbmluZ09uKGNvbnN0IGNoYXIgKmNoYW5uZWwpCiBzdGF0aWMgdm9pZAog YXN5bmNRdWV1ZVVucmVnaXN0ZXIodm9pZCkKIHsKLQlBc3NlcnQobGlzdGVuQ2hhbm5lbHMg PT0gTklMKTsJLyogZWxzZSBjYWxsZXIgZXJyb3IgKi8KKwlBc3NlcnQobGlzdGVuQ2hhbm5l bHNIYXNoID09IE5VTEwgfHwgaGFzaF9nZXRfbnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNI YXNoKSA9PSAwKTsJLyogZWxzZSBjYWxsZXIgZXJyb3IgKi8KIAogCWlmICghYW1SZWdpc3Rl cmVkTGlzdGVuZXIpCS8qIG5vdGhpbmcgdG8gZG8gKi8KIAkJcmV0dXJuOwpAQCAtMTI0Miw2 ICsxNjEwLDcgQEAgYXN5bmNRdWV1ZVVucmVnaXN0ZXIodm9pZCkKIAkvKiBNYXJrIG91ciBl bnRyeSBhcyBpbnZhbGlkICovCiAJUVVFVUVfQkFDS0VORF9QSUQoTXlQcm9jTnVtYmVyKSA9 IEludmFsaWRQaWQ7CiAJUVVFVUVfQkFDS0VORF9EQk9JRChNeVByb2NOdW1iZXIpID0gSW52 YWxpZE9pZDsKKwlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKE15UHJvY051bWJlcikg PSBmYWxzZTsKIAkvKiBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgKi8KIAlpZiAoUVVF VUVfRklSU1RfTElTVEVORVIgPT0gTXlQcm9jTnVtYmVyKQogCQlRVUVVRV9GSVJTVF9MSVNU RU5FUiA9IFFVRVVFX05FWFRfTElTVEVORVIoTXlQcm9jTnVtYmVyKTsKQEAgLTE1NjUsMTIg KzE5MzQsMTUgQEAgYXN5bmNRdWV1ZUZpbGxXYXJuaW5nKHZvaWQpCiAvKgogICogU2VuZCBz aWduYWxzIHRvIGxpc3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKiBOb3JtYWxseSB3ZSBzaWdu YWwgb25seSBiYWNrZW5kcyBpbiBvdXIgb3duIGRhdGFiYXNlLCBzaW5jZSBvbmx5IHRob3Nl Ci0gKiBiYWNrZW5kcyBjb3VsZCBiZSBpbnRlcmVzdGVkIGluIG5vdGlmaWVzIHdlIHNlbmQu ICBIb3dldmVyLCBpZiB0aGVyZSdzCi0gKiBub3RpZnkgdHJhZmZpYyBpbiBvdXIgZGF0YWJh c2UgYnV0IG5vIHRyYWZmaWMgaW4gYW5vdGhlciBkYXRhYmFzZSB0aGF0Ci0gKiBkb2VzIGhh dmUgbGlzdGVuZXIocyksIHRob3NlIGxpc3RlbmVycyB3aWxsIGZhbGwgZnVydGhlciBhbmQg ZnVydGhlcgotICogYmVoaW5kLiAgV2FrZW4gdGhlbSBhbnl3YXkgaWYgdGhleSdyZSBmYXIg ZW5vdWdoIGJlaGluZCwgc28gdGhhdCB0aGV5J2xsCi0gKiBhZHZhbmNlIHRoZWlyIHF1ZXVl IHBvc2l0aW9uIHBvaW50ZXJzLCBhbGxvd2luZyB0aGUgZ2xvYmFsIHRhaWwgdG8gYWR2YW5j ZS4KKyAqIE5vcm1hbGx5IHdlIHNpZ25hbCBvbmx5IGJhY2tlbmRzIGluIG91ciBvd24gZGF0 YWJhc2UsIHRoYXQgYXJlCisgKiBsaXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIHdpdGggcGVu ZGluZyBub3RpZmllcywgc2luY2Ugb25seSB0aG9zZQorICogYmFja2VuZHMgYXJlIGludGVy ZXN0ZWQgaW4gbm90aWZpZXMgd2Ugc2VuZC4KKyAqCisgKiBCYWNrZW5kcyB0aGF0IGFyZSBr bm93biB0byBzdGlsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBxdWV1ZSBoZWFkCisgKiBmcm9t IGJlZm9yZSBvdXIgY29tbWl0IGNhbiBiZSBzYWZlbHkgYWR2YW5jZWQgZGlyZWN0bHkgdG8g dGhlIG5ldworICogaGVhZCwgc2luY2UgdGhlIHF1ZXVlIHJlZ2lvbiB3ZSB3cm90ZSBpcyBr bm93biB0byBjb250YWluIG9ubHkgb3VyCisgKiBvd24gbm90aWZpY2F0aW9ucy4gIFRoaXMg YXZvaWRzIHVubmVjZXNzYXJ5IHdha2V1cHMgd2hlbiB0aGVyZSBpcworICogbm90aGluZyBv ZiBpbnRlcmVzdCB0byB0aGVtLgogICoKICAqIFNpbmNlIHdlIGtub3cgdGhlIFByb2NOdW1i ZXIgYW5kIHRoZSBQaWQgdGhlIHNpZ25hbGluZyBpcyBxdWl0ZSBjaGVhcC4KICAqCkBAIC0x NTgzLDYgKzE5NTUsMTMgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAlpbnQzMgkgICAqcGlk czsKIAlQcm9jTnVtYmVyICpwcm9jbm9zOwogCWludAkJCWNvdW50OworCUxpc3RDZWxsICAg KmxjOworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIGNoYW5uZWwgaGFzaCBpZiBuZWVkZWQu ICBXZSBtaWdodCBub3QgaGF2ZSBvbmUgaWYgdGhpcworCSAqIGJhY2tlbmQgaGFzbid0IGRv bmUgTElTVEVOLCBidXQgd2UgbmVlZCBpdCB0byBmaW5kIGxpc3RlbmVycy4KKwkgKi8KKwlp bml0Q2hhbm5lbEhhc2goKTsKIAogCS8qCiAJICogSWRlbnRpZnkgYmFja2VuZHMgdGhhdCB3 ZSBuZWVkIHRvIHNpZ25hbC4gIFdlIGRvbid0IHdhbnQgdG8gc2VuZApAQCAtMTU5NywzNiAr MTk3NiwxMDQgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAljb3VudCA9IDA7CiAKIAlMV0xv Y2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKLQlmb3IgKFByb2NO dW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IElOVkFMSURfUFJPQ19OVU1C RVI7IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQorCWZvcmVhY2gobGMsIHBlbmRpbmdO b3RpZnlDaGFubmVscykKIAl7Ci0JCWludDMyCQlwaWQgPSBRVUVVRV9CQUNLRU5EX1BJRChp KTsKLQkJUXVldWVQb3NpdGlvbiBwb3M7CisJCWNoYXIJICAgKmNoYW5uZWwgPSAoY2hhciAq KSBsZmlyc3QobGMpOworCQlDaGFubmVsRW50cnkgKmVudHJ5ID0gTlVMTDsKKwkJUHJvY051 bWJlciAqbGlzdGVuZXJzOwogCi0JCUFzc2VydChwaWQgIT0gSW52YWxpZFBpZCk7Ci0JCXBv cyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOwotCQlpZiAoUVVFVUVfQkFDS0VORF9EQk9JRChp KSA9PSBNeURhdGFiYXNlSWQpCisJCWlmIChjaGFubmVsSGFzaCAhPSBOVUxMKQogCQl7Ci0J CQkvKgotCQkJICogQWx3YXlzIHNpZ25hbCBsaXN0ZW5lcnMgaW4gb3VyIG93biBkYXRhYmFz ZSwgdW5sZXNzIHRoZXkncmUKLQkJCSAqIGFscmVhZHkgY2F1Z2h0IHVwICh1bmxpa2VseSwg YnV0IHBvc3NpYmxlKS4KLQkJCSAqLworCQkJQ2hhbm5lbEhhc2hLZXkga2V5OworCisJCQlD aGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKwkJ CWVudHJ5ID0gZHNoYXNoX2ZpbmQoY2hhbm5lbEhhc2gsICZrZXksIGZhbHNlKTsKKwkJfQor CisJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJY29udGludWU7CQkJLyogTm8gbGlzdGVuZXJz IHJlZ2lzdGVyZWQgZm9yIHRoaXMgY2hhbm5lbCAqLworCisJCWxpc3RlbmVycyA9IChQcm9j TnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkJICAg ZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IGVudHJ5 LT5udW1MaXN0ZW5lcnM7IGorKykKKwkJeworCQkJUHJvY051bWJlcglpID0gbGlzdGVuZXJz W2pdOworCQkJaW50MzIJCXBpZDsKKwkJCVF1ZXVlUG9zaXRpb24gcG9zOworCisJCQlpZiAo UVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSkKKwkJCQljb250aW51ZTsKKworCQkJ cG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CisJCQlwaWQgPSBRVUVVRV9CQUNLRU5EX1BJ RChpKTsKKworCQkJLyogU2tpcCBpZiBjYXVnaHQgdXAgKi8KIAkJCWlmIChRVUVVRV9QT1Nf RVFVQUwocG9zLCBRVUVVRV9IRUFEKSkKIAkJCQljb250aW51ZTsKKworCQkJQXNzZXJ0KHBp ZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhp KSA9IHRydWU7CisJCQlwaWRzW2NvdW50XSA9IHBpZDsKKwkJCXByb2Nub3NbY291bnRdID0g aTsKKwkJCWNvdW50Kys7CiAJCX0KLQkJZWxzZQorCisJCWRzaGFzaF9yZWxlYXNlX2xvY2so Y2hhbm5lbEhhc2gsIGVudHJ5KTsKKwl9CisKKwkvKgorCSAqIERpcmVjdCBhZHZhbmNlbWVu dDogYXZvaWQgd2FraW5nIG5vbi1jYXVnaHQgdXAgYmFja2VuZHMgdGhhdCBhcmVuJ3QKKwkg KiBpbnRlcmVzdGVkIGluIG91ciBub3RpZmljYXRpb25zLgorCSAqLworCWlmIChwZW5kaW5n Tm90aWZpZXMgIT0gTlVMTCkKKwl7CisJCWZvciAoUHJvY051bWJlciBpID0gUVVFVUVfRklS U1RfTElTVEVORVI7CisJCQkgaSAhPSBJTlZBTElEX1BST0NfTlVNQkVSOworCQkJIGkgPSBR VUVVRV9ORVhUX0xJU1RFTkVSKGkpKQogCQl7Ci0JCQkvKgotCQkJICogTGlzdGVuZXJzIGlu IG90aGVyIGRhdGFiYXNlcyBzaG91bGQgYmUgc2lnbmFsZWQgb25seSBpZiB0aGV5Ci0JCQkg KiBhcmUgZmFyIGJlaGluZC4KLQkJCSAqLwotCQkJaWYgKGFzeW5jUXVldWVQYWdlRGlmZihR VUVVRV9QT1NfUEFHRShRVUVVRV9IRUFEKSwKLQkJCQkJCQkJICAgUVVFVUVfUE9TX1BBR0Uo cG9zKSkgPCBRVUVVRV9DTEVBTlVQX0RFTEFZKQorCQkJUXVldWVQb3NpdGlvbiBwb3M7CisJ CQlpbnQzMgkJcGlkOworCisJCQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhp KSkKIAkJCQljb250aW51ZTsKKworCQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CisJ CQlwaWQgPSBRVUVVRV9CQUNLRU5EX1BJRChpKTsKKworCQkJaWYgKFFVRVVFX1BPU19FUVVB TChwb3MsIHF1ZXVlSGVhZEJlZm9yZVdyaXRlKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFNh ZmUgdG8gZGlyZWN0bHkgdXBkYXRlIGEgYmFja2VuZCdzIHNoYXJlZCBwb3MgaWYgaXQgaXNu J3QKKwkJCQkgKiBjdXJyZW50bHkgYWR2YW5jaW5nIGl0cyBwb3NpdGlvbi4KKwkJCQkgKi8K KwkJCQlpZiAoIVFVRVVFX0JBQ0tFTkRfQURWQU5DSU5HX1BPUyhpKSkKKwkJCQkJUVVFVUVf QkFDS0VORF9QT1MoaSkgPSBxdWV1ZUhlYWRBZnRlcldyaXRlOworCQkJfQorCQkJZWxzZSBp ZiAoUVVFVUVfUE9TX1BSRUNFREVTKHBvcywgcXVldWVIZWFkQmVmb3JlV3JpdGUpKQorCQkJ eworCQkJCS8qCisJCQkJICogTmVlZCB0byBzaWduYWwsIGNhbm5vdCBza2lwIG92ZXIsIHNp bmNlIHdlIGRvbid0IGtub3cgaWYKKwkJCQkgKiB0aGUgbm90aWZpY2F0aW9ucyBiZXR3ZWVu IHBvcyBhbmQgdGhlIHF1ZXVlIGhlYWQgYmVmb3JlIG91cgorCQkJCSAqIHdyaXRlIGFyZSBv ZiBpbnRlcmVzdCBmb3IgdGhpcyBiYWNrZW5kIG9yIG5vdC4KKwkJCQkgKi8KKwkJCQlBc3Nl cnQocGlkICE9IEludmFsaWRQaWQpOworCisJCQkJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVO RElORyhpKSA9IHRydWU7CisJCQkJcGlkc1tjb3VudF0gPSBwaWQ7CisJCQkJcHJvY25vc1tj b3VudF0gPSBpOworCQkJCWNvdW50Kys7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoK KwkJCQkgKiBUaGUgYmFja2VuZCBpcyBhbHJlYWR5IGFoZWFkIG9mIHRoZSBub3RpZmljYXRp b25zIHdlIHdyb3RlLgorCQkJCSAqIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcuCisJCQkJICov CisJCQkJQXNzZXJ0KFFVRVVFX1BPU19QUkVDRURFUyhxdWV1ZUhlYWRCZWZvcmVXcml0ZSwg cG9zKSk7CisJCQl9CiAJCX0KLQkJLyogT0ssIG5lZWQgdG8gc2lnbmFsIHRoaXMgb25lICov Ci0JCXBpZHNbY291bnRdID0gcGlkOwotCQlwcm9jbm9zW2NvdW50XSA9IGk7Ci0JCWNvdW50 Kys7CiAJfQogCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKIApAQCAtMTY3Myw5 ICsyMTIwLDEwIEBAIEF0QWJvcnRfTm90aWZ5KHZvaWQpCiAJLyoKIAkgKiBJZiB3ZSBMSVNU RU4gYnV0IHRoZW4gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiBhZnRlciBQcmVDb21taXRf Tm90aWZ5LAogCSAqIHdlIGhhdmUgcmVnaXN0ZXJlZCBhcyBhIGxpc3RlbmVyIGJ1dCBoYXZl IG5vdCBtYWRlIGFueSBlbnRyeSBpbgotCSAqIGxpc3RlbkNoYW5uZWxzLiAgSW4gdGhhdCBj YXNlLCBkZXJlZ2lzdGVyIGFnYWluLgorCSAqIGxpc3RlbkNoYW5uZWxzSGFzaC4gIEluIHRo YXQgY2FzZSwgZGVyZWdpc3RlciBhZ2Fpbi4KIAkgKi8KLQlpZiAoYW1SZWdpc3RlcmVkTGlz dGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0gTklMKQorCWlmIChhbVJlZ2lzdGVyZWRMaXN0 ZW5lciAmJgorCQkobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9nZXRfbnVt X2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKSkKIAkJYXN5bmNRdWV1ZVVucmVn aXN0ZXIoKTsKIAogCS8qIEFuZCBjbGVhbiB1cCAqLwpAQCAtMTg2MSwxOSArMjMwOSwyNiBA QCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAkJQXN5bmNRdWV1ZUVu dHJ5IGFsaWduOwogCX0JCQlwYWdlX2J1ZmZlcjsKIAotCS8qIEZldGNoIGN1cnJlbnQgc3Rh dGUgKi8KKwkvKgorCSAqIEZldGNoIGN1cnJlbnQgc3RhdGUsIGluZGljYXRlIHRvIG90aGVy cyB0aGF0IHdlIGhhdmUgd29rZW4gdXAsIGFuZCB0aGF0CisJICogd2Ugbm93IHdpbGwgYmUg YWR2YW5jaW5nIG91ciBwb3NpdGlvbi4KKwkgKi8KIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1 ZXVlTG9jaywgTFdfU0hBUkVEKTsKIAkvKiBBc3NlcnQgY2hlY2tzIHRoYXQgd2UgaGF2ZSBh IHZhbGlkIHN0YXRlIGVudHJ5ICovCiAJQXNzZXJ0KE15UHJvY1BpZCA9PSBRVUVVRV9CQUNL RU5EX1BJRChNeVByb2NOdW1iZXIpKTsKKwlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5H KE15UHJvY051bWJlcikgPSBmYWxzZTsKKwlRVUVVRV9CQUNLRU5EX0FEVkFOQ0lOR19QT1Mo TXlQcm9jTnVtYmVyKSA9IHRydWU7CiAJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9j TnVtYmVyKTsKIAloZWFkID0gUVVFVUVfSEVBRDsKLQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1 ZXVlTG9jayk7CiAKIAlpZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgaGVhZCkpCiAJewogCQkv KiBOb3RoaW5nIHRvIGRvLCB3ZSBoYXZlIHJlYWQgYWxsIG5vdGlmaWNhdGlvbnMgYWxyZWFk eS4gKi8KKwkJUVVFVUVfQkFDS0VORF9BRFZBTkNJTkdfUE9TKE15UHJvY051bWJlcikgPSBm YWxzZTsKKwkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQlyZXR1cm47CiAJ fQorCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKIAogCS8qLS0tLS0tLS0tLQog CSAqIEdldCBzbmFwc2hvdCB3ZSdsbCB1c2UgdG8gZGVjaWRlIHdoaWNoIHhhY3RzIGFyZSBz dGlsbCBpbiBwcm9ncmVzcy4KQEAgLTE5ODcsNyArMjQ0MiwxMCBAQCBhc3luY1F1ZXVlUmVh ZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAl7CiAJCS8qIFVwZGF0ZSBzaGFyZWQgc3RhdGUg Ki8KIAkJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX1NIQVJFRCk7CisKKwkJ UVVFVUVfQkFDS0VORF9BRFZBTkNJTkdfUE9TKE15UHJvY051bWJlcikgPSBmYWxzZTsKIAkJ UVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IHBvczsKKwogCQlMV0xvY2tSZWxl YXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAJfQogCVBHX0VORF9UUlkoKTsKQEAgLTIxODYsNyAr MjY0NCw3IEBAIFByb2Nlc3NJbmNvbWluZ05vdGlmeShib29sIGZsdXNoKQogCW5vdGlmeUlu dGVycnVwdFBlbmRpbmcgPSBmYWxzZTsKIAogCS8qIERvIG5vdGhpbmcgZWxzZSBpZiB3ZSBh cmVuJ3QgYWN0aXZlbHkgbGlzdGVuaW5nICovCi0JaWYgKGxpc3RlbkNoYW5uZWxzID09IE5J TCkKKwlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9nZXRfbnVtX2Vu dHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKQogCQlyZXR1cm47CiAKIAlpZiAoVHJh Y2Vfbm90aWZ5KQpAQCAtMjI5MCwxMyArMjc0OCwxNSBAQCBBZGRFdmVudFRvUGVuZGluZ05v dGlmaWVzKE5vdGlmaWNhdGlvbiAqbikKIHsKIAlBc3NlcnQocGVuZGluZ05vdGlmaWVzLT5l dmVudHMgIT0gTklMKTsKIAotCS8qIENyZWF0ZSB0aGUgaGFzaCB0YWJsZSBpZiBpdCdzIHRp bWUgdG8gKi8KKwkvKiBDcmVhdGUgdGhlIGhhc2ggdGFibGVzIGlmIGl0J3MgdGltZSB0byAq LwogCWlmIChsaXN0X2xlbmd0aChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cykgPj0gTUlOX0hB U0hBQkxFX05PVElGSUVTICYmCiAJCXBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiA9PSBOVUxM KQogCXsKIAkJSEFTSENUTAkJaGFzaF9jdGw7CiAJCUxpc3RDZWxsICAgKmw7CiAKKwkJQXNz ZXJ0KHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgPT0gTlVMTCk7CisKIAkJLyog Q3JlYXRlIHRoZSBoYXNoIHRhYmxlICovCiAJCWhhc2hfY3RsLmtleXNpemUgPSBzaXplb2Yo Tm90aWZpY2F0aW9uICopOwogCQloYXNoX2N0bC5lbnRyeXNpemUgPSBzaXplb2Yoc3RydWN0 IE5vdGlmaWNhdGlvbkhhc2gpOwpAQCAtMjMwOSwxMCArMjc2OSwyMiBAQCBBZGRFdmVudFRv UGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbikKIAkJCQkJCSZoYXNoX2N0bCwKIAkJ CQkJCUhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNIX0NPTVBBUkUgfCBIQVNIX0NP TlRFWFQpOwogCisJCS8qIENyZWF0ZSB0aGUgY2hhbm5lbCBoYXNoIHRhYmxlICovCisJCW1l bXNldCgmaGFzaF9jdGwsIDAsIHNpemVvZihoYXNoX2N0bCkpOworCQloYXNoX2N0bC5rZXlz aXplID0gTkFNRURBVEFMRU47CisJCWhhc2hfY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihzdHJ1 Y3QgQ2hhbm5lbEhhc2gpOworCQloYXNoX2N0bC5oY3h0ID0gQ3VyVHJhbnNhY3Rpb25Db250 ZXh0OworCQlwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxIYXNodGFiID0KKwkJCWhhc2hfY3Jl YXRlKCJQZW5kaW5nIE5vdGlmeSBDaGFubmVscyIsCisJCQkJCQk2NEwsCisJCQkJCQkmaGFz aF9jdGwsCisJCQkJCQlIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MgfCBIQVNIX0NPTlRFWFQp OworCiAJCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3RpbmcgZXZlbnRzICovCiAJ CWZvcmVhY2gobCwgcGVuZGluZ05vdGlmaWVzLT5ldmVudHMpCiAJCXsKIAkJCU5vdGlmaWNh dGlvbiAqb2xkbiA9IChOb3RpZmljYXRpb24gKikgbGZpcnN0KGwpOworCQkJY2hhcgkgICAq Y2hhbm5lbCA9IG9sZG4tPmRhdGE7CiAJCQlib29sCQlmb3VuZDsKIAogCQkJKHZvaWQpIGhh c2hfc2VhcmNoKHBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiwKQEAgLTIzMjAsMjIgKzI3OTIs NDIgQEAgQWRkRXZlbnRUb1BlbmRpbmdOb3RpZmllcyhOb3RpZmljYXRpb24gKm4pCiAJCQkJ CQkJICAgSEFTSF9FTlRFUiwKIAkJCQkJCQkgICAmZm91bmQpOwogCQkJQXNzZXJ0KCFmb3Vu ZCk7CisKKwkJCS8qIEluc2VydCBjaGFubmVsIGludG8gY2hhbm5lbEhhc2h0YWIgKi8KKwkJ CSh2b2lkKSBoYXNoX3NlYXJjaChwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxIYXNodGFiLAor CQkJCQkJCSAgIGNoYW5uZWwsCisJCQkJCQkJICAgSEFTSF9FTlRFUiwKKwkJCQkJCQkgICAm Zm91bmQpOworCQkJLyogZm91bmQgbWF5IGJlIHRydWUgaWYgbXVsdGlwbGUgZXZlbnRzIG9u IHNhbWUgY2hhbm5lbCAqLwogCQl9CiAJfQogCiAJLyogQWRkIG5ldyBldmVudCB0byB0aGUg bGlzdCwgaW4gb3JkZXIgKi8KIAlwZW5kaW5nTm90aWZpZXMtPmV2ZW50cyA9IGxhcHBlbmQo cGVuZGluZ05vdGlmaWVzLT5ldmVudHMsIG4pOwogCi0JLyogQWRkIGV2ZW50IHRvIHRoZSBo YXNoIHRhYmxlIGlmIG5lZWRlZCAqLworCS8qIEFkZCBldmVudCB0byB0aGUgaGFzaCB0YWJs ZXMgaWYgbmVlZGVkICovCiAJaWYgKHBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiAhPSBOVUxM KQogCXsKIAkJYm9vbAkJZm91bmQ7CiAKKwkJQXNzZXJ0KHBlbmRpbmdOb3RpZmllcy0+Y2hh bm5lbEhhc2h0YWIgIT0gTlVMTCk7CisKIAkJKHZvaWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdO b3RpZmllcy0+aGFzaHRhYiwKIAkJCQkJCSAgICZuLAogCQkJCQkJICAgSEFTSF9FTlRFUiwK IAkJCQkJCSAgICZmb3VuZCk7CiAJCUFzc2VydCghZm91bmQpOworCisJCS8qIEFkZCBjaGFu bmVsIHRvIGNoYW5uZWxIYXNodGFiICovCisJCXsKKwkJCWNoYXIJICAgKmNoYW5uZWwgPSBu LT5kYXRhOworCisJCQkodm9pZCkgaGFzaF9zZWFyY2gocGVuZGluZ05vdGlmaWVzLT5jaGFu bmVsSGFzaHRhYiwKKwkJCQkJCQkgICBjaGFubmVsLAorCQkJCQkJCSAgIEhBU0hfRU5URVIs CisJCQkJCQkJICAgJmZvdW5kKTsKKwkJCS8qIGZvdW5kIG1heSBiZSB0cnVlIGlmIHdlIGFs cmVhZHkgaGF2ZSBhbiBldmVudCBvbiB0aGlzIGNoYW5uZWwgKi8KKwkJfQogCX0KIH0KIApA QCAtMjM3Myw3ICsyODY1LDcgQEAgbm90aWZpY2F0aW9uX21hdGNoKGNvbnN0IHZvaWQgKmtl eTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSkKIAlyZXR1cm4gMTsJCQkJCS8q IG5vdCBlcXVhbCAqLwogfQogCi0vKiBDbGVhciB0aGUgcGVuZGluZ0FjdGlvbnMgYW5kIHBl bmRpbmdOb3RpZmllcyBsaXN0cy4gKi8KKy8qIENsZWFyIHRoZSBwZW5kaW5nQWN0aW9ucywg cGVuZGluZ05vdGlmaWVzLCBhbmQgcGVuZGluZ05vdGlmeUNoYW5uZWxzIGxpc3RzLiAqLwog c3RhdGljIHZvaWQKIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKQogewpA QCAtMjM4NSw2ICsyODc3LDcgQEAgQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZv aWQpCiAJICovCiAJcGVuZGluZ0FjdGlvbnMgPSBOVUxMOwogCXBlbmRpbmdOb3RpZmllcyA9 IE5VTEw7CisJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOwogfQogCiAvKgpAQCAtMjM5 NSwzICsyODg4LDE2IEBAIGNoZWNrX25vdGlmeV9idWZmZXJzKGludCAqbmV3dmFsLCB2b2lk ICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiB7CiAJcmV0dXJuIGNoZWNrX3NscnVfYnVm ZmVycygibm90aWZ5X2J1ZmZlcnMiLCBuZXd2YWwpOwogfQorCisKKy8qCisgKiBDaGFubmVs SGFzaFByZXBhcmVLZXkKKyAqCQlQcmVwYXJlIGEgY2hhbm5lbCBrZXkgZm9yIHVzZSBhcyBh IGhhc2gga2V5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK0NoYW5uZWxIYXNoUHJlcGFy ZUtleShDaGFubmVsSGFzaEtleSAqa2V5LCBPaWQgZGJvaWQsIGNvbnN0IGNoYXIgKmNoYW5u ZWwpCit7CisJbWVtc2V0KGtleSwgMCwgc2l6ZW9mKENoYW5uZWxIYXNoS2V5KSk7CisJa2V5 LT5kYm9pZCA9IGRib2lkOworCXN0cmxjcHkoa2V5LT5jaGFubmVsLCBjaGFubmVsLCBOQU1F REFUQUxFTik7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93 YWl0X2V2ZW50X25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRf ZXZlbnRfbmFtZXMudHh0CmluZGV4IDc1NTNmNmVhY2VmLi5hNGZhZGJkMDc2NyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQK QEAgLTM2Niw2ICszNjYsNyBAQCBTdWJ0cmFuc0J1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9u IGEgc3ViLXRyYW5zYWN0aW9uIFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE9mZnNldEJ1ZmZl cgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG9mZnNldCBTTFJVIGJ1ZmZlci4i CiBNdWx0aVhhY3RNZW1iZXJCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIG11bHRpeGFj dCBtZW1iZXIgU0xSVSBidWZmZXIuIgogTm90aWZ5QnVmZmVyCSJXYWl0aW5nIGZvciBJL08g b24gYSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IG1lc3NhZ2UgU0xSVSBidWZmZXIuIgor Tm90aWZ5Q2hhbm5lbEhhc2gJIldhaXRpbmcgdG8gYWNjZXNzIHRoZSA8Y29tbWFuZD5OT1RJ Rlk8L2NvbW1hbmQ+IGNoYW5uZWwgaGFzaCB0YWJsZS4iCiBTZXJpYWxCdWZmZXIJIldhaXRp bmcgZm9yIEkvTyBvbiBhIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbiBjb25mbGljdCBTTFJV IGJ1ZmZlci4iCiBXQUxJbnNlcnQJIldhaXRpbmcgdG8gaW5zZXJ0IFdBTCBkYXRhIGludG8g YSBtZW1vcnkgYnVmZmVyLiIKIEJ1ZmZlckNvbnRlbnQJIldhaXRpbmcgdG8gYWNjZXNzIGEg ZGF0YSBwYWdlIGluIG1lbW9yeS4iCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4 IDA2YTFmZmQ0YjA4Li4yNzY4ZGRmNDQxNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9sd2xvY2tsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0 LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBQR19MV0xPQ0tUUkFOQ0hFKFNVQlRSQU5TX0JVRkZF UiwgU3VidHJhbnNCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE1VTFRJWEFDVE9GRlNFVF9C VUZGRVIsIE11bHRpWGFjdE9mZnNldEJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTVVMVElY QUNUTUVNQkVSX0JVRkZFUiwgTXVsdGlYYWN0TWVtYmVyQnVmZmVyKQogUEdfTFdMT0NLVFJB TkNIRShOT1RJRllfQlVGRkVSLCBOb3RpZnlCdWZmZXIpCitQR19MV0xPQ0tUUkFOQ0hFKE5P VElGWV9DSEFOTkVMX0hBU0gsIE5vdGlmeUNoYW5uZWxIYXNoKQogUEdfTFdMT0NLVFJBTkNI RShTRVJJQUxfQlVGRkVSLCBTZXJpYWxCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKFdBTF9J TlNFUlQsIFdBTEluc2VydCkKIFBHX0xXTE9DS1RSQU5DSEUoQlVGRkVSX0NPTlRFTlQsIEJ1 ZmZlckNvbnRlbnQpCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDAxOGI1OTE5 Y2Y2Li5iODQ0MzcyNTM5OCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQx Miw2ICs0MTIsOCBAQCBDYXRhbG9nSWRNYXBFbnRyeQogQ2F0YWxvZ0luZGV4U3RhdGUKIENo YW5nZVZhck5vZGVzX2NhbGxiYWNrCiBDaGFuZ2VWYXJOb2Rlc19jb250ZXh0CitDaGFubmVs RW50cnkKK0NoYW5uZWxIYXNoS2V5CiBDaGVja1BvaW50CiBDaGVja1BvaW50U3RtdAogQ2hl Y2twb2ludFN0YXRzRGF0YQotLSAKMi41MC4xCgo= --edfc78871cd043de954e5dc4e63935b3--