Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1waBdM-001agU-0y for pgsql-bugs@arkaria.postgresql.org; Thu, 18 Jun 2026 12:14:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1waBdK-00BDOA-2j for pgsql-bugs@arkaria.postgresql.org; Thu, 18 Jun 2026 12:14:10 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1waBdK-00BDO2-1Z for pgsql-bugs@lists.postgresql.org; Thu, 18 Jun 2026 12:14:10 +0000 Received: from mail-vk1-xa35.google.com ([2607:f8b0:4864:20::a35]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1waBdH-000000015Xj-2wvO for pgsql-bugs@lists.postgresql.org; Thu, 18 Jun 2026 12:14:10 +0000 Received: by mail-vk1-xa35.google.com with SMTP id 71dfb90a1353d-59ebcbfb2b0so251706e0c.2 for ; Thu, 18 Jun 2026 05:14:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781784842; x=1782389642; darn=lists.postgresql.org; h=in-reply-to:references:from:subject:cc:to:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=vl0CtKfXoaVfw1Dv4LRY7ZdNDw1hpSEYjLEWF+3ooHo=; b=g9HxtwRUefLPWteT/0aFF1y10EdUs7NhExITSiA2Ha8Za8Ts3Jv0+WPUiAmgVFmZ4+ yF+2xaeP00PhLae4NNYRX/Ti49rAoSZCc+4pyAnHjuUf13mTxtIfFRrEBHenQiLcJ24+ 8+IquKGGor1ufbAp7+7Lw659R3iJe459jNWKMA3WQD/3mCbnJ0La2Rw4EjCyJmrC6rg9 P95vrpg5BN6MQcVsiAQQzYfz2AzCGSUTbFSqzidf2xWqGiU5kHGkw0upj8WRQnDyX5aU KiD42cShafFQ5Qrrfd9GviYi/n40Ek1t0Ddl6XiPxTHTovvAeX8EEN+SnsSN+ott3fYP Vgng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781784842; x=1782389642; h=in-reply-to:references:from:subject:cc:to:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=vl0CtKfXoaVfw1Dv4LRY7ZdNDw1hpSEYjLEWF+3ooHo=; b=PHk1dzzqVTzUxNwfjITIa0aME1AEiRPcui6FLczC6ApjDz39lvdKQ0YFfRJK7DIrUp F+ArIUofYbj9ITDe//EIIwFwS0Ad3Z9w8fb+r/eh6Ch7337kqbM0J/skpM/5qdHgWR/O B0uQEsoeE+AJoXalt+7IxqmnxblBpGSTDDe4IVEj6gaC9Zk1MUedeLgn35VnO5eMOc5K II0LIPZfdsvfX8wXbEYfON7xvTScXF9mpZpXCTNpv+ljDT851RSSVMyibULoExSK9fK1 q7Cz+Mc/MSQvGbx+JFKkAvEz1PhKZl5xOycPnAw8b/bd3p664OkpfGAtm/od7JjohzMf 1MQw== X-Forwarded-Encrypted: i=1; AFNElJ+0isb+Qg0jE9Yo6uKUpBAvFXW0wUd0DQJn+0//BrODMc0kQs1jEmpvMSrq0OwJbyFFUkCiM07rhEva@lists.postgresql.org X-Gm-Message-State: AOJu0YxwggzQSR/v0USgpNGYoAzP3ANXZcAxfSexUVhh3TK9Aedj1gAm BBN6LU1spGeteNPy6kBYLc7lUezXBxDSSlknz8KjdAwVMNgwHei8fHqRh8sLEw== X-Gm-Gg: AfdE7cm8QFur954DR8eLykVyTrSW0UYxTW3Y+/yk6XRQHg/onEfoyIfi2KwjuenrbPM NbvbfLVao4qCLf2VNce5AgDqrMgU2MybruKQz7hyhz8E6gbcPYUsyGS1eVQjZjggQ00MY8TlPuA W3MaHH6p5cwkTbOFgvW93NBZ2Lj8csE9r+FzOWCO2v6QFJiu7h3rD3ur6doyVbtoovduU7vKPxa NTC4OdR2j4SHCSBMI3jr923Tp3g59fy3G/zMqRQAvfrF5Mm4Zy5oN3nk/hpbyADbiJ0BkVz5DV+ Gxld1FNV98mFyftC/sL4R4YKTDYleDxMUW/nScj3MSGLS8fHmrpbdVcj+PKV7dAFdVvuf2IqhOo Eu2hVFTXjNSe2ZYo8OFh7h5TdPcR8XJDFVvzh4deVyJ4tn9/SLSkz0kzTp8McGb3E9xlLdaE0MF Of+4iL3jsoyR7LqNIM903W3EKy3ZvSrfocuAI= X-Received: by 2002:a05:6122:1c04:b0:59a:e174:2e76 with SMTP id 71dfb90a1353d-5bbd41a7910mr1239099e0c.6.1781784841833; Thu, 18 Jun 2026 05:14:01 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:95f2:a179:d393:f95c]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-5bb8fd42aefsm10568973e0c.0.2026.06.18.05.13.59 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 18 Jun 2026 05:14:01 -0700 (PDT) Content-Type: multipart/mixed; boundary=4a42668fc79179bfc962194105a10bdff338f6a898ca2f527635d09a7ef0 Mime-Version: 1.0 Date: Thu, 18 Jun 2026 09:13:57 -0300 Message-Id: To: "Tom Lane" Cc: , Subject: Re: BUG #19480: PL/Python SRF crashes (SIGSEGV) when function is replaced mid-iteration: use-after-free in PLy_funct From: "Matheus Alcantara" X-Mailer: aerc 0.21.0 References: <19480-f1f9fdce30462fc4@postgresql.org> <982975.1779981146@sss.pgh.pa.us> <2868592.1780356411@sss.pgh.pa.us> <1149447.1781733399@sss.pgh.pa.us> In-Reply-To: <1149447.1781733399@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --4a42668fc79179bfc962194105a10bdff338f6a898ca2f527635d09a7ef0 Content-Type: multipart/alternative; boundary=041ba323786c123f9f764fbbaffc15b20cabeda76bbd8ff7673a0ab5c9d3 --041ba323786c123f9f764fbbaffc15b20cabeda76bbd8ff7673a0ab5c9d3 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Wed Jun 17, 2026 at 6:56 PM -03, Tom Lane wrote: > * Your refactoring to have just one PLy_procedure_get call in > plpython3_call_handler is no good. You missed the comment > block just above: > > /* > * Push execution context onto stack. It is important that this get > * popped again, so avoid putting anything that could throw error bet= ween > * here and the PG_TRY. > */ > exec_ctx =3D PLy_push_execution_context(!nonatomic); > > + proc =3D PLy_procedure_get(fcinfo, false); > + > PG_TRY(); > { > > I counsel putting those PLy_procedure_get calls back where they were. > You're right, it was a mistake, it was not my original goal to move outside of PG_TRY(). I've moved the PLy_procedure_get() call back inside the PG_TRY(). Since the new signature no longer needs a per-call-context argument, a single call at the top of the PG_TRY block now covers all three cases, and exec_ctx->curr_proc is set once right after the lookup. Let me know if I misunderstood your point. > * I also question the decision to refactor where/how is_trigger is > computed; that doesn't seem necessary to the purposes of the patch, > nor is it a clear improvement. I'd just as soon leave that > mechanism alone as much as we can. =20 I've restored PLy_procedure_is_trigger() and the validator uses it again exactly as before, instead of the inlined prorettype checks. The one unavoidable change that it seems to me is that the trigger type is now determined inside the compile callback rather than passed in as a PLyTrigType argument =E2=80=94 that's forced by the funccache API, since cached_function_compile() takes the FunctionCallInfo and the procedure is created from within the callback instead of PLy_procedure_get(). Or I'm missing something? > (Alternative thought: should we rely on the isTrigger/isEventTrigger > bools that funccache.c sets up for us? I'm not quite sure if getting > friendly with struct CachedFunctionHashKey is a good idea or not.) > I left the callback using CALLED_AS_TRIGGER() / CALLED_AS_EVENT_TRIGGER() rather than reaching into CachedFunctionHashKey. That keeps us off from funccache.c internals and matches what plpgsql_compile_callback() does, which seems to me the safer way to go. What do you think? > * I find it confusing that you called "PLyProcedureCache *" variables > "pcache" in some places and "proc" in others. The latter choice seems > poor because mostly "proc" is a PLyProcedure pointer. Using "proc" > leads to constructions like "proc->proc", which I don't find > intelligible. > Fixed. Definitely agree, oversight from my side. > * The new code could do with more comments. I realize that plpython > is poorly commented in many places, but let's see if we can leave it > better than we found it. > Added header comments to the new PLy_compile_callback and PLy_delete_callback, expanded the validator comment about why the fake fcinfo context is built, and expanded the SRF first-call-setup comment to explain the ValuePerCall model, the per-call-site cache, and the shutdown-callback handling. I've also added a regression test, not sure if there is a better way to exercise this fix but this test crash without this patch applied. --- On top of your points, I did another self-review pass over v2 and found a possible pre-existing problem in v1 in the way the patch handled SRF cleanup, which I've also fixed in v2. The patch had switched the set-returning-function cleanup from the original MemoryContextRegisterResetCallback to a RegisterExprContextCallback (ShutdownPLyFunction), modeled on what functions.c does for SQL functions. But that copies a property that I don't that apply for PL/Python: ShutdownExprContext() does not invoke ExprContext callbacks during an error abort (it only frees the callback list), and functions.c is fine with that because, as its comment notes, "transaction abort will take care of releasing executor resources." PL/Python's resource is a Python refcount, and transaction abort does not release those. So if a SETOF function was left partially iterated and the surrounding query then errored, e.g. CREATE OR REPLACE FUNCTION mysrf() RETURNS SETOF int LANGUAGE plpython3u AS= $$ return [1,2,3,4,5] $$; SELECT mysrf() / 0; the iterator's references were leaked for the life of the session. The original code didn't have this problem because a memory-context reset callback does run during abort. Rather than reintroduce a second mechanism, v2 reuses the memory-context callback that's already there for reference counting. RemovePLyProcedureCache is registered on the FmgrInfo's fn_mcxt and therefore runs on abort; it now also releases any Python state left behind by an interrupted SRF. ShutdownPLyFunction is kept for the cases it does handle correctly. --- Thanks for the review! I've tried to address all your points in the attached v2. -- Matheus Alcantara EDB: https://www.enterprisedb.com --041ba323786c123f9f764fbbaffc15b20cabeda76bbd8ff7673a0ab5c9d3-- --4a42668fc79179bfc962194105a10bdff338f6a898ca2f527635d09a7ef0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0001-plpython-Use-funccache.c-infrastructure-for-proce.patch Content-Type: text/plain; charset=utf-8; name=v2-0001-plpython-Use-funccache.c-infrastructure-for-proce.patch RnJvbSBiMTcxMThiMjE3OGNjYTE4NTViZTc4NGUyMGZiMjk3YmUyYjNjN2U0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IEZyaSwgNSBKdW4gMjAyNiAxMDo1MTo1MyAtMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIHBs cHl0aG9uOiBVc2UgZnVuY2NhY2hlLmMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHByb2NlZHVyZQogY2Fj aGluZwoKUEwvUHl0aG9uIHNldC1yZXR1cm5pbmcgZnVuY3Rpb25zIGNhbiBjcmFzaCB3aXRoIGEg dXNlLWFmdGVyLWZyZWUgd2hlbgpDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBpcyBleGVjdXRl ZCB3aGlsZSB0aGUgU1JGIGlzIG1pZC1pdGVyYXRpb24uClRoZSBjcmFzaCBvY2N1cnMgYmVjYXVz ZSBzcmZzdGF0ZS0+c2F2ZWRhcmdzIGlzIGFsbG9jYXRlZCBpbiBwcm9jLT5tY3h0LAp3aGljaCBn ZXRzIGRlbGV0ZWQgd2hlbiB0aGUgcHJvY2VkdXJlIGlzIGludmFsaWRhdGVkLCBsZWF2aW5nIGEg ZGFuZ2xpbmcKcG9pbnRlciB0aGF0IFBMeV9mdW5jdGlvbl9yZXN0b3JlX2FyZ3MoKSB0aGVuIGRl cmVmZXJlbmNlcy4KClRoZSBmaXggaXMgdG8gdXNlIHJlZmVyZW5jZSBjb3VudGluZyB0byBwcmV2 ZW50IGRlc3Ryb3lpbmcgdGhlIGZ1bmN0aW9uCnN0YXRlIHdoaWxlIGl0J3Mgc3RpbGwgaW4gdXNl LCBzaW1pbGFyIHRvIHdoYXQgUEwvcGdTUUwgaGFzIGRvbmUuIFRoaXMKY29tbWl0IGNvbnZlcnRz IFBML1B5dGhvbiB0byB1c2UgdGhlIGZ1bmNjYWNoZS5jIGluZnJhc3RydWN0dXJlCmludHJvZHVj ZWQgaW4gdjE4LgoKVGhlIG1haW4gY2hhbGxlbmdlIGlzIHRoYXQgUEwvUHl0aG9uIHVzZXMgU0ZS TV9WYWx1ZVBlckNhbGwgZm9yIFNSRnMsCndoZXJlIHRoZSBoYW5kbGVyIGlzIGNhbGxlZCBtdWx0 aXBsZSB0aW1lcyB3aXRoIHVzZV9jb3VudCBwb3RlbnRpYWxseQpyZXR1cm5pbmcgdG8gemVybyBi ZXR3ZWVuIGNhbGxzLiBTUUwgZnVuY3Rpb25zIGZhY2UgdGhlIHNhbWUgY2hhbGxlbmdlLApzbyB0 aGlzIGNvbW1pdCBmb2xsb3dzIHRoZSBzYW1lIGFwcHJvYWNoIHVzZWQgaW4gZnVuY3Rpb25zLmM6 IG1haW50YWluCmEgcGVyLWNhbGwtc2l0ZSBjYWNoZSBzdHJ1Y3QgKFBMeVByb2NlZHVyZUNhY2hl KSBpbiBmbl9leHRyYSB0aGF0IGhvbGRzCmJvdGggdGhlIHBvaW50ZXIgdG8gdGhlIGxvbmctbGl2 ZWQgUEx5UHJvY2VkdXJlIGFuZCB0aGUgU1JGIGV4ZWN1dGlvbgpzdGF0ZS4KClRoZSB1c2VfY291 bnQgaXMgaW5jcmVtZW50ZWQgd2hlbiB3ZSBmaXJzdCBvYnRhaW4gdGhlIHByb2NlZHVyZSBhbmQg aXMKZGVjcmVtZW50ZWQgdmlhIGEgTWVtb3J5Q29udGV4dENhbGxiYWNrIHJlZ2lzdGVyZWQgb24g Zm5fbWN4dCwgd2hpY2ggcnVucwpldmVuIGR1cmluZyBlcnJvciBhYm9ydHMuIENsZWFuaW5nIHVw IHRoZSBwZXItY2FsbCBTUkYgc3RhdGUgbmVlZHMgbW9yZQpjYXJlOiBhbiBFeHByQ29udGV4dENh bGxiYWNrIGhhbmRsZXMgdGhlIGluLXF1ZXJ5IGNhc2VzLCBzaW5jZSB0aGUKaXRlcmF0b3IgaXMg bm90IGd1YXJhbnRlZWQgdG8gcnVuIHRvIGNvbXBsZXRpb24gKGZvciBleGFtcGxlIGEgTElNSVQg b3IgYQpyZXNjYW4gY2FuIGFiYW5kb24gaXQgZWFybHkpLiBCdXQgdW5saWtlIFNRTCBmdW5jdGlv bnMsIHdob3NlIHJlc291cmNlcwphcmUgcmVsZWFzZWQgYnkgdHJhbnNhY3Rpb24gYWJvcnQsIFBM L1B5dGhvbiBob2xkcyBQeXRob24gcmVmZXJlbmNlIGNvdW50cwpvbiB0aGUgaXRlcmF0b3IgYW5k IHNhdmVkIGFyZ3VtZW50cyB0aGF0IGFib3J0IHdpbGwgbm90IHJlbGVhc2UsIGFuZApFeHByQ29u dGV4dENhbGxiYWNrcyBhcmUgbm90IGludm9rZWQgZHVyaW5nIGFuIGVycm9yIGFib3J0LiBUaGUK TWVtb3J5Q29udGV4dENhbGxiYWNrIG9uIGZuX21jeHQgdGhlcmVmb3JlIGRvdWJsZXMgYXMgdGhl IGJhY2tzdG9wIHRoYXQKcmVsZWFzZXMgdGhvc2UgcmVmZXJlbmNlcyB3aGVuIGEgcXVlcnkgZXJy b3JzIG91dCBtaWQtaXRlcmF0aW9uLgoKU2luY2UgZm5fZXh0cmEgaXMgbm93IHVzZWQgZm9yIFBM eVByb2NlZHVyZUNhY2hlLCB0aGlzIGNvbW1pdCByZW1vdmVzCnRoZSBTUkYgbWFjcm9zIChTUkZf SVNfRklSU1RDQUxMLCBTUkZfUkVUVVJOX05FWFQsIGV0Yy4pIGFuZCBzd2l0Y2hlcyB0bwpkaXJl Y3QgaXNEb25lIHNpZ25hbGluZyB2aWEgUmV0dXJuU2V0SW5mbywgbWF0Y2hpbmcgaG93IFNRTCBm dW5jdGlvbnMKaGFuZGxlIFZhbHVlUGVyQ2FsbCBtb2RlLgoKQXV0aG9yOiBNYXRoZXVzIEFsY2Fu dGFyYSA8bXRocy5kZXZAcG0ubWU+ClJlcG9ydGVkLWJ5OiBBbmRyemVqIERvcm9zIDxhZG9yb3NA c3RhcmZpc2hzdG9yYWdlLmNvbT4KU3VnZ2VzdGVkLWJ5OiBUb20gTGFuZSA8dGdsQHNzcy5wZ2gu cGEudXM+ClJldmlld2VkLWJ5OiBUb20gTGFuZSA8dGdsQHNzcy5wZ2gucGEudXM+CgpEaXNjdXNz aW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzE5NDgwLWYxZjlmZGNl MzA0NjJmYzQlNDBwb3N0Z3Jlc3FsLm9yZwotLS0KIHNyYy9wbC9wbHB5dGhvbi9leHBlY3RlZC9w bHB5dGhvbl9zZXRvZi5vdXQgfCAgMjMgKysKIHNyYy9wbC9wbHB5dGhvbi9wbHB5X2V4ZWMuYyAg ICAgICAgICAgICAgICAgfCAyMDUgKysrKysrLS0tLS0tCiBzcmMvcGwvcGxweXRob24vcGxweV9l eGVjLmggICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvcGwvcGxweXRob24vcGxweV9tYWlu LmMgICAgICAgICAgICAgICAgIHwgIDc1ICsrKy0tCiBzcmMvcGwvcGxweXRob24vcGxweV9wcm9j ZWR1cmUuYyAgICAgICAgICAgIHwgMzM5ICsrKysrKysrKysrKystLS0tLS0tCiBzcmMvcGwvcGxw eXRob24vcGxweV9wcm9jZWR1cmUuaCAgICAgICAgICAgIHwgIDUyICstLQogc3JjL3BsL3BscHl0 aG9uL3NxbC9wbHB5dGhvbl9zZXRvZi5zcWwgICAgICB8ICAxMyArCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgIHwgICAzICstCiA4IGZpbGVzIGNoYW5nZWQsIDQ1 MiBpbnNlcnRpb25zKCspLCAyNjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3BsL3Bs cHl0aG9uL2V4cGVjdGVkL3BscHl0aG9uX3NldG9mLm91dCBiL3NyYy9wbC9wbHB5dGhvbi9leHBl Y3RlZC9wbHB5dGhvbl9zZXRvZi5vdXQKaW5kZXggYzQ0NjFhYzI3NjIuLjY4NDU3YzhhNzRiIDEw MDY0NAotLS0gYS9zcmMvcGwvcGxweXRob24vZXhwZWN0ZWQvcGxweXRob25fc2V0b2Yub3V0Cisr KyBiL3NyYy9wbC9wbHB5dGhvbi9leHBlY3RlZC9wbHB5dGhvbl9zZXRvZi5vdXQKQEAgLTIyOCwz ICsyMjgsMjYgQEAgU0VMRUNUICogRlJPTSBnZXRfdXNlcl9yZWNvcmRzMigpOwogIHdpbGxlbSB8 IGRvZSAgIHwgd19kb2UgICAgfCAgICAgIDMKICg0IHJvd3MpCiAKKy0tIEEgc2V0LXJldHVybmlu ZyBmdW5jdGlvbiB0aGF0IGlzIGludmFsaWRhdGVkIG1pZC1pdGVyYXRpb24gbXVzdCBydW4gdG8K Ky0tIGNvbXBsZXRpb24gdXNpbmcgaXRzIG9yaWdpbmFsIGRlZmluaXRpb24gKGJ1ZyAjMTk0ODAp LgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gc2VsZl9pbnZhbGlkYXRpbmdfc3JmKHggaW50 KSBSRVRVUk5TIFNFVE9GIGludCBBUyAkJAorZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgaWYgaSA9 PSAxOgorICAgICAgICBwbHB5LmV4ZWN1dGUoIkNSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNl bGZfaW52YWxpZGF0aW5nX3NyZih4IGludCkgIgorICAgICAgICAgICAgICAgICAgICAgIlJFVFVS TlMgU0VUT0YgaW50IExBTkdVQUdFIHBscHl0aG9uM3UgQVMgJ3JldHVybiBbLTFdJyIpCisgICAg eWllbGQgeCArIGkKKyQkIExBTkdVQUdFIHBscHl0aG9uM3U7CitTRUxFQ1Qgc2VsZl9pbnZhbGlk YXRpbmdfc3JmKDEwKTsgLS0gZXhwZWN0IDEwLDExLDEyIChvcmlnaW5hbCBkZWZpbml0aW9uKQor IHNlbGZfaW52YWxpZGF0aW5nX3NyZiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg ICAgICAgICAgICAgIDEwCisgICAgICAgICAgICAgICAgICAgIDExCisgICAgICAgICAgICAgICAg ICAgIDEyCisoMyByb3dzKQorCitTRUxFQ1Qgc2VsZl9pbnZhbGlkYXRpbmdfc3JmKDEwKTsgLS0g ZXhwZWN0IC0xIChyZXBsYWNlbWVudCBub3cgaW4gZWZmZWN0KQorIHNlbGZfaW52YWxpZGF0aW5n X3NyZiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgIC0xCiso MSByb3cpCisKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHB5dGhvbi9wbHB5X2V4ZWMuYyBiL3NyYy9w bC9wbHB5dGhvbi9wbHB5X2V4ZWMuYwppbmRleCBkZTBkYWQxZjUzMy4uZTNhNzQ5N2EyZTQgMTAw NjQ0Ci0tLSBhL3NyYy9wbC9wbHB5dGhvbi9wbHB5X2V4ZWMuYworKysgYi9zcmMvcGwvcGxweXRo b24vcGxweV9leGVjLmMKQEAgLTIyLDIyICsyMiwxMyBAQAogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jw cm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAotLyogc2F2ZWQgc3RhdGUgZm9yIGEg c2V0LXJldHVybmluZyBmdW5jdGlvbiAqLwotdHlwZWRlZiBzdHJ1Y3QgUEx5U1JGU3RhdGUKLXsK LQlQeU9iamVjdCAgICppdGVyOwkJCS8qIFB5dGhvbiBpdGVyYXRvciBwcm9kdWNpbmcgcmVzdWx0 cyAqLwotCVBMeVNhdmVkQXJncyAqc2F2ZWRhcmdzOwkvKiBmdW5jdGlvbiBhcmd1bWVudCB2YWx1 ZXMgKi8KLQlNZW1vcnlDb250ZXh0Q2FsbGJhY2sgY2FsbGJhY2s7IC8qIGZvciByZWxlYXNpbmcg cmVmY291bnRzIHdoZW4gZG9uZSAqLwotfSBQTHlTUkZTdGF0ZTsKLQogc3RhdGljIFB5T2JqZWN0 ICpQTHlfZnVuY3Rpb25fYnVpbGRfYXJncyhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgUEx5UHJv Y2VkdXJlICpwcm9jKTsKLXN0YXRpYyBQTHlTYXZlZEFyZ3MgKlBMeV9mdW5jdGlvbl9zYXZlX2Fy Z3MoUEx5UHJvY2VkdXJlICpwcm9jKTsKK3N0YXRpYyBQTHlTYXZlZEFyZ3MgKlBMeV9mdW5jdGlv bl9zYXZlX2FyZ3MoTWVtb3J5Q29udGV4dCBtY3R4LCBQTHlQcm9jZWR1cmUgKnByb2MpOwogc3Rh dGljIHZvaWQgUEx5X2Z1bmN0aW9uX3Jlc3RvcmVfYXJncyhQTHlQcm9jZWR1cmUgKnByb2MsIFBM eVNhdmVkQXJncyAqc2F2ZWRhcmdzKTsKLXN0YXRpYyB2b2lkIFBMeV9mdW5jdGlvbl9kcm9wX2Fy Z3MoUEx5U2F2ZWRBcmdzICpzYXZlZGFyZ3MpOwogc3RhdGljIHZvaWQgUEx5X2dsb2JhbF9hcmdz X3B1c2goUEx5UHJvY2VkdXJlICpwcm9jKTsKIHN0YXRpYyB2b2lkIFBMeV9nbG9iYWxfYXJnc19w b3AoUEx5UHJvY2VkdXJlICpwcm9jKTsKLXN0YXRpYyB2b2lkIHBscHl0aG9uX3NyZl9jbGVhbnVw X2NhbGxiYWNrKHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCBwbHB5dGhvbl9yZXR1cm5fZXJyb3Jf Y2FsbGJhY2sodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFNodXRkb3duUEx5RnVuY3Rpb24oRGF0 dW0gYXJnKTsKIAogc3RhdGljIFB5T2JqZWN0ICpQTHlfdHJpZ2dlcl9idWlsZF9hcmdzKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLCBQTHlQcm9jZWR1cmUgKnByb2MsCiAJCQkJCQkJCQkJSGVhcFR1 cGxlICpydik7CkBAIC01MSwxNCArNDIsMTUgQEAgc3RhdGljIHZvaWQgUEx5X2Fib3J0X29wZW5f c3VidHJhbnNhY3Rpb25zKGludCBzYXZlX3N1YnhhY3RfbGV2ZWwpOwogCiAvKiBmdW5jdGlvbiBz dWJoYW5kbGVyICovCiBEYXR1bQotUEx5X2V4ZWNfZnVuY3Rpb24oRnVuY3Rpb25DYWxsSW5mbyBm Y2luZm8sIFBMeVByb2NlZHVyZSAqcHJvYykKK1BMeV9leGVjX2Z1bmN0aW9uKEZ1bmN0aW9uQ2Fs bEluZm8gZmNpbmZvLCBQTHlQcm9jZWR1cmVDYWNoZSAqcGNhY2hlKQogeworCVBMeVByb2NlZHVy ZSAqcHJvYyA9IHBjYWNoZS0+cHJvYzsKIAlib29sCQlpc19zZXRvZiA9IHByb2MtPmlzX3NldG9m OwogCURhdHVtCQlydjsKIAlQeU9iamVjdCAgICp2b2xhdGlsZSBwbGFyZ3MgPSBOVUxMOwogCVB5 T2JqZWN0ICAgKnZvbGF0aWxlIHBscnYgPSBOVUxMOwotCUZ1bmNDYWxsQ29udGV4dCAqdm9sYXRp bGUgZnVuY2N0eCA9IE5VTEw7CiAJUEx5U1JGU3RhdGUgKnZvbGF0aWxlIHNyZnN0YXRlID0gTlVM TDsKKwlSZXR1cm5TZXRJbmZvICpyc2kgPSBOVUxMOwogCUVycm9yQ29udGV4dENhbGxiYWNrIHBs ZXJyY29udGV4dDsKIAogCS8qCkBAIC03MiwyNSArNjQsNDIgQEAgUEx5X2V4ZWNfZnVuY3Rpb24o RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBMeVByb2NlZHVyZSAqcHJvYykKIAl7CiAJCWlmIChp c19zZXRvZikKIAkJewotCQkJLyogRmlyc3QgQ2FsbCBzZXR1cCAqLwotCQkJaWYgKFNSRl9JU19G SVJTVENBTEwoKSkKKwkJCXJzaSA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5m bzsKKworCQkJLyoKKwkJCSAqIFBML1B5dGhvbiByZXR1cm5zIGEgc2V0IGluIFZhbHVlUGVyQ2Fs bCBtb2RlLCBzbyB0aGUgaGFuZGxlciBpcworCQkJICogaW52b2tlZCBvbmNlIHBlciByZXN1bHQg cm93LiAgQWNyb3NzIHRob3NlIGNhbGxzIHdlIGtlZXAgdGhlCisJCQkgKiBpdGVyYXRvciBhbmQg c2F2ZWQgYXJndW1lbnRzIGluIHRoZSBwZXItY2FsbC1zaXRlIGNhY2hlCisJCQkgKiAocGNhY2hl LT5zcmZzdGF0ZSk7IGEgTlVMTCBzcmZzdGF0ZSBtZWFucyB0aGlzIGlzIHRoZSBmaXJzdAorCQkJ ICogY2FsbCBvZiBhIG5ldyBpdGVyYXRpb24sIHNvIHdlIHNldCB0aGF0IHN0YXRlIHVwIGhlcmUu CisJCQkgKi8KKwkJCWlmIChwY2FjaGUtPnNyZnN0YXRlID09IE5VTEwpCiAJCQl7Ci0JCQkJZnVu Y2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOwotCQkJCXNyZnN0YXRlID0gKFBMeVNSRlN0YXRl ICopCi0JCQkJCU1lbW9yeUNvbnRleHRBbGxvY1plcm8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1v cnlfY3R4LAotCQkJCQkJCQkJCSAgIHNpemVvZihQTHlTUkZTdGF0ZSkpOwotCQkJCS8qIEltbWVk aWF0ZWx5IHJlZ2lzdGVyIGNsZWFudXAgY2FsbGJhY2sgKi8KLQkJCQlzcmZzdGF0ZS0+Y2FsbGJh Y2suZnVuYyA9IHBscHl0aG9uX3NyZl9jbGVhbnVwX2NhbGxiYWNrOwotCQkJCXNyZnN0YXRlLT5j YWxsYmFjay5hcmcgPSBzcmZzdGF0ZTsKLQkJCQlNZW1vcnlDb250ZXh0UmVnaXN0ZXJSZXNldENh bGxiYWNrKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCwKLQkJCQkJCQkJCQkJCSAgICZz cmZzdGF0ZS0+Y2FsbGJhY2spOwotCQkJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IHNyZnN0YXRlOwor CQkJCWlmICghcnNpIHx8ICFJc0EocnNpLCBSZXR1cm5TZXRJbmZvKSB8fAorCQkJCQkocnNpLT5h bGxvd2VkTW9kZXMgJiBTRlJNX1ZhbHVlUGVyQ2FsbCkgPT0gMCkKKwkJCQl7CisJCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAorCQkJCQkJCSBlcnJtc2coInVuc3VwcG9ydGVkIHNldCBmdW5jdGlvbiByZXR1cm4gbW9kZSIp LAorCQkJCQkJCSBlcnJkZXRhaWwoIlBML1B5dGhvbiBzZXQtcmV0dXJuaW5nIGZ1bmN0aW9ucyBv bmx5IHN1cHBvcnQgcmV0dXJuaW5nIG9uZSB2YWx1ZSBwZXIgY2FsbC4iKSkpOworCQkJCX0KKwkJ CQlyc2ktPnJldHVybk1vZGUgPSBTRlJNX1ZhbHVlUGVyQ2FsbDsKKworCQkJCXBjYWNoZS0+c3Jm c3RhdGUgPSAoUEx5U1JGU3RhdGUgKikKKwkJCQkJTWVtb3J5Q29udGV4dEFsbG9jWmVybyhwY2Fj aGUtPmZjb250ZXh0LCBzaXplb2YoUEx5U1JGU3RhdGUpKTsKKworCQkJCS8qCisJCQkJICogUmVn aXN0ZXIgYSBzaHV0ZG93biBjYWxsYmFjayBzbyB0aGF0IHRoZSBpdGVyYXRvciBzdGF0ZSBpcwor CQkJCSAqIHJlbGVhc2VkIGlmIGV4ZWN1dGlvbiBpcyBhYmFuZG9uZWQgYmVmb3JlIHRoZSBpdGVy YXRvciBpcworCQkJCSAqIGV4aGF1c3RlZC4gV2UgdW5yZWdpc3RlciBpdCBhZ2FpbiBvbiBub3Jt YWwgY29tcGxldGlvbi4KKwkJCQkgKi8KKwkJCQlSZWdpc3RlckV4cHJDb250ZXh0Q2FsbGJhY2so cnNpLT5lY29udGV4dCwKKwkJCQkJCQkJCQkJU2h1dGRvd25QTHlGdW5jdGlvbiwKKwkJCQkJCQkJ CQkJUG9pbnRlckdldERhdHVtKHBjYWNoZSkpOworCQkJCXBjYWNoZS0+c2h1dGRvd25fcmVnID0g dHJ1ZTsKIAkJCX0KLQkJCS8qIEV2ZXJ5IGNhbGwgc2V0dXAgKi8KLQkJCWZ1bmNjdHggPSBTUkZf UEVSQ0FMTF9TRVRVUCgpOwotCQkJQXNzZXJ0KGZ1bmNjdHggIT0gTlVMTCk7Ci0JCQlzcmZzdGF0 ZSA9IChQTHlTUkZTdGF0ZSAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7Ci0JCQlBc3NlcnQoc3Jmc3Rh dGUgIT0gTlVMTCk7CisKKwkJCXNyZnN0YXRlID0gcGNhY2hlLT5zcmZzdGF0ZTsKIAkJfQogCiAJ CWlmIChzcmZzdGF0ZSA9PSBOVUxMIHx8IHNyZnN0YXRlLT5pdGVyID09IE5VTEwpCkBAIC0xMjcs MjAgKzEzNiw3IEBAIFBMeV9leGVjX2Z1bmN0aW9uKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBQ THlQcm9jZWR1cmUgKnByb2MpCiAJCXsKIAkJCWlmIChzcmZzdGF0ZS0+aXRlciA9PSBOVUxMKQog CQkJewotCQkJCS8qIGZpcnN0IHRpbWUgLS0gZG8gY2hlY2tzIGFuZCBzZXR1cCAqLwotCQkJCVJl dHVyblNldEluZm8gKnJzaSA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsK LQotCQkJCWlmICghcnNpIHx8ICFJc0EocnNpLCBSZXR1cm5TZXRJbmZvKSB8fAotCQkJCQkocnNp LT5hbGxvd2VkTW9kZXMgJiBTRlJNX1ZhbHVlUGVyQ2FsbCkgPT0gMCkKLQkJCQl7Ci0JCQkJCWVy ZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAotCQkJCQkJCSBlcnJtc2coInVuc3VwcG9ydGVkIHNldCBmdW5jdGlvbiByZXR1cm4gbW9k ZSIpLAotCQkJCQkJCSBlcnJkZXRhaWwoIlBML1B5dGhvbiBzZXQtcmV0dXJuaW5nIGZ1bmN0aW9u cyBvbmx5IHN1cHBvcnQgcmV0dXJuaW5nIG9uZSB2YWx1ZSBwZXIgY2FsbC4iKSkpOwotCQkJCX0K LQkJCQlyc2ktPnJldHVybk1vZGUgPSBTRlJNX1ZhbHVlUGVyQ2FsbDsKLQotCQkJCS8qIE1ha2Ug aXRlcmF0b3Igb3V0IG9mIHJldHVybmVkIG9iamVjdCAqLworCQkJCS8qIGZpcnN0IHRpbWUgLS0g bWFrZSBpdGVyYXRvciBvdXQgb2YgcmV0dXJuZWQgb2JqZWN0ICovCiAJCQkJc3Jmc3RhdGUtPml0 ZXIgPSBQeU9iamVjdF9HZXRJdGVyKHBscnYpOwogCiAJCQkJUHlfREVDUkVGKHBscnYpOwpAQCAt MTc3LDcgKzE3Myw3IEBAIFBMeV9leGVjX2Z1bmN0aW9uKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZv LCBQTHlQcm9jZWR1cmUgKnByb2MpCiAJCQkJICogdGhpcyBhZ2FpbiBlYWNoIHRpbWUgaW4gY2Fz ZSB0aGUgaXRlcmF0b3IgaXMgY2hhbmdpbmcgdGhvc2UKIAkJCQkgKiB2YWx1ZXMuCiAJCQkJICov Ci0JCQkJc3Jmc3RhdGUtPnNhdmVkYXJncyA9IFBMeV9mdW5jdGlvbl9zYXZlX2FyZ3MocHJvYyk7 CisJCQkJc3Jmc3RhdGUtPnNhdmVkYXJncyA9IFBMeV9mdW5jdGlvbl9zYXZlX2FyZ3MocGNhY2hl LT5mY29udGV4dCwgcHJvYyk7CiAJCQl9CiAJCX0KIApAQCAtMjYwLDIxICsyNTYsMTYgQEAgUEx5 X2V4ZWNfZnVuY3Rpb24oRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBMeVByb2NlZHVyZSAqcHJv YykKIAkJUHlfWERFQ1JFRihwbHJ2KTsKIAogCQkvKgotCQkgKiBJZiB0aGVyZSB3YXMgYW4gZXJy b3Igd2l0aGluIGEgU1JGLCB0aGUgaXRlcmF0b3IgbWlnaHQgbm90IGhhdmUKLQkJICogYmVlbiBl eGhhdXN0ZWQgeWV0LiAgQ2xlYXIgaXQgc28gdGhlIG5leHQgaW52b2NhdGlvbiBvZiB0aGUKLQkJ ICogZnVuY3Rpb24gd2lsbCBzdGFydCB0aGUgaXRlcmF0aW9uIGFnYWluLiAgKFRoaXMgY29kZSBp cyBwcm9iYWJseQotCQkgKiB1bm5lY2Vzc2FyeSBub3c7IHBscHl0aG9uX3NyZl9jbGVhbnVwX2Nh bGxiYWNrIHNob3VsZCB0YWtlIGNhcmUgb2YKLQkJICogY2xlYW51cC4gIEJ1dCBpdCBkb2Vzbid0 IGh1cnQgYW55dGhpbmcgdG8gZG8gaXQgaGVyZS4pCisJCSAqIElmIHRoZSBlcnJvciB3YXMgdGhy b3duIHdpdGhpbiBhIFNSRiwgY2xlYW4gdXAgaXRzIHN0YXRlIGhlcmUuIFRoaXMKKwkJICogaXMg dGhlIG9ubHkgY2xlYW51cCBob29rIHRoYXQgcnVucyBmb3IgYW4gZXJyb3IgdGhyb3duIGR1cmlu ZyB0aGUKKwkJICogZnVuY3Rpb24ncyBvd24gZXhlY3V0aW9uOiBTaHV0ZG93blBMeUZ1bmN0aW9u IGlzIG5vdCBjYWxsZWQgb24KKwkJICogYWJvcnQsIGFuZCB0aGUgbWVtb3J5LWNvbnRleHQgY2Fs bGJhY2sgb25seSBmaXJlcyBvbmNlIHRoZQorCQkgKiBGbWdySW5mbydzIGNvbnRleHQgaXMgdG9y biBkb3duLiAgUmVsZWFzaW5nIHRoZSBQeXRob24gcmVmZXJlbmNlcworCQkgKiBwcm9tcHRseSBh dm9pZHMgbGVha2luZyB0aGVtIGlmIHRlYXJkb3duIGlzIGRlbGF5ZWQsIGFuZCBjbGVhcmluZwor CQkgKiBwY2FjaGUtPnNyZnN0YXRlIGVuc3VyZXMgYSByZXVzZWQgY2FjaGUgd29uJ3QgbWlzdGFr ZSB0aGlzIGZvciBhbgorCQkgKiBpdGVyYXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3MuCiAJCSAqLwot CQlpZiAoc3Jmc3RhdGUpCi0JCXsKLQkJCVB5X1hERUNSRUYoc3Jmc3RhdGUtPml0ZXIpOwotCQkJ c3Jmc3RhdGUtPml0ZXIgPSBOVUxMOwotCQkJLyogQW5kIGRyb3AgYW55IHNhdmVkIGFyZ3M7IHdl IHdvbid0IG5lZWQgdGhlbSAqLwotCQkJaWYgKHNyZnN0YXRlLT5zYXZlZGFyZ3MpCi0JCQkJUEx5 X2Z1bmN0aW9uX2Ryb3BfYXJncyhzcmZzdGF0ZS0+c2F2ZWRhcmdzKTsKLQkJCXNyZnN0YXRlLT5z YXZlZGFyZ3MgPSBOVUxMOwotCQl9CisJCVBMeV9mdW5jdGlvbl9jbGVhbnVwX3NyZnN0YXRlKHBj YWNoZSk7CiAKIAkJUEdfUkVfVEhST1coKTsKIAl9CkBAIC0yOTAsMjIgKzI4MSw1OSBAQCBQTHlf ZXhlY19mdW5jdGlvbihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgUEx5UHJvY2VkdXJlICpwcm9j KQogCiAJaWYgKHNyZnN0YXRlKQogCXsKLQkJLyogV2UncmUgaW4gYSBTUkYsIGV4aXQgYXBwcm9w cmlhdGVseSAqLworCQkvKiBXZSdyZSBpbiBhIFNSRiwgc2lnbmFsIHZpYSByc2ktPmlzRG9uZSAq LwogCQlpZiAoc3Jmc3RhdGUtPml0ZXIgPT0gTlVMTCkKIAkJewotCQkJLyogSXRlcmF0b3IgZXho YXVzdGVkLCBzbyB3ZSdyZSBkb25lICovCi0JCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJ CQkvKgorCQkJICogSXRlcmF0b3IgZXhoYXVzdGVkLiAgVW5yZWdpc3RlciB0aGUgc2h1dGRvd24g Y2FsbGJhY2sgc2luY2UKKwkJCSAqIHdlJ3JlIGRvbmUgbm9ybWFsbHksIHRoZW4gY2xlYW4gdXAg c3Jmc3RhdGUuICAoc3Jmc3RhdGUtPml0ZXIKKwkJCSAqIGlzIGFscmVhZHkgTlVMTCBoZXJlLCBz byB0aGUgY2xlYW51cCBqdXN0IGZyZWVzIHRoZSBzdHJ1Y3QuKQorCQkJICovCisJCQlpZiAocGNh Y2hlLT5zaHV0ZG93bl9yZWcpCisJCQl7CisJCQkJVW5yZWdpc3RlckV4cHJDb250ZXh0Q2FsbGJh Y2socnNpLT5lY29udGV4dCwKKwkJCQkJCQkJCQkJICBTaHV0ZG93blBMeUZ1bmN0aW9uLAorCQkJ CQkJCQkJCQkgIFBvaW50ZXJHZXREYXR1bShwY2FjaGUpKTsKKwkJCQlwY2FjaGUtPnNodXRkb3du X3JlZyA9IGZhbHNlOworCQkJfQorCQkJUEx5X2Z1bmN0aW9uX2NsZWFudXBfc3Jmc3RhdGUocGNh Y2hlKTsKKworCQkJcnNpLT5pc0RvbmUgPSBFeHByRW5kUmVzdWx0OworCQkJZmNpbmZvLT5pc251 bGwgPSB0cnVlOworCQkJcmV0dXJuIChEYXR1bSkgMDsKIAkJfQotCQllbHNlIGlmIChmY2luZm8t PmlzbnVsbCkKLQkJCVNSRl9SRVRVUk5fTkVYVF9OVUxMKGZ1bmNjdHgpOwogCQllbHNlCi0JCQlT UkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgcnYpOworCQl7CisJCQlyc2ktPmlzRG9uZSA9IEV4cHJN dWx0aXBsZVJlc3VsdDsKKwkJCXJldHVybiBydjsKKwkJfQogCX0KIAogCS8qIFBsYWluIGZ1bmN0 aW9uLCBqdXN0IHJldHVybiB0aGUgRGF0dW0gdmFsdWUgKHBvc3NpYmx5IG51bGwpICovCiAJcmV0 dXJuIHJ2OwogfQogCisvKgorICogRXhwckNvbnRleHQgc2h1dGRvd24gY2FsbGJhY2ssIGludm9r ZWQgd2hlbiB0aGUgZXhwcmVzc2lvbiBjb250ZXh0IHRoYXQgcmFuCisgKiBhIFNSRiBpcyByZXNj YW5uZWQgb3IgZnJlZWQgYXQgZW5kIG9mIHF1ZXJ5LiAgVGhpcyBoYW5kbGVzIGluLXF1ZXJ5Cisg KiBjYW5jZWxsYXRpb24sIGUuZy4gYSBMSU1JVCB0aGF0IHN0b3BzIGZldGNoaW5nIGJlZm9yZSB0 aGUgaXRlcmF0b3IgaXMKKyAqIGV4aGF1c3RlZCwgb3IgYSByZXNjYW4gb2YgdGhlIG93bmluZyBw bGFuIG5vZGUuCisgKgorICogTkI6IHRoaXMgaXMgbm90IGNhbGxlZCBkdXJpbmcgYW4gZXJyb3Ig YWJvcnQgKHNlZSBTaHV0ZG93bkV4cHJDb250ZXh0KCkpLgorICogVGhlIGNvbXBhbmlvbiBtZW1v cnktY29udGV4dCBjYWxsYmFjayBSZW1vdmVQTHlQcm9jZWR1cmVDYWNoZSgpIGNvdmVycyB0aGF0 CisgKiBjYXNlLCBzaW5jZSBtZW1vcnktY29udGV4dCByZXNldC9kZWxldGUgY2FsbGJhY2tzIGRv IHJ1biBkdXJpbmcgYWJvcnQuCisgKi8KK3N0YXRpYyB2b2lkCitTaHV0ZG93blBMeUZ1bmN0aW9u KERhdHVtIGFyZykKK3sKKwlQTHlQcm9jZWR1cmVDYWNoZSAqcGNhY2hlID0gKFBMeVByb2NlZHVy ZUNhY2hlICopIERhdHVtR2V0UG9pbnRlcihhcmcpOworCisJLyogZXhlY1V0aWxzLmMgd2lsbCBk ZXJlZ2lzdGVyIHRoZSBjYWxsYmFjayBhZnRlciB3ZSByZXR1cm4gKi8KKwlwY2FjaGUtPnNodXRk b3duX3JlZyA9IGZhbHNlOworCisJUEx5X2Z1bmN0aW9uX2NsZWFudXBfc3Jmc3RhdGUocGNhY2hl KTsKK30KKwogLyoKICAqIHRyaWdnZXIgc3ViaGFuZGxlcgogICoKQEAgLTUzNiwxMyArNTY0LDEz IEBAIFBMeV9mdW5jdGlvbl9idWlsZF9hcmdzKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBQTHlQ cm9jZWR1cmUgKnByb2MpCiAgKiBhdmFpbGFibGUgdmlhIHRoZSBwcm9jJ3MgZ2xvYmFscyA6LSgg Li4uIGJ1dCB3ZSdyZSBzdHVjayB3aXRoIHRoYXQgbm93LgogICovCiBzdGF0aWMgUEx5U2F2ZWRB cmdzICoKLVBMeV9mdW5jdGlvbl9zYXZlX2FyZ3MoUEx5UHJvY2VkdXJlICpwcm9jKQorUEx5X2Z1 bmN0aW9uX3NhdmVfYXJncyhNZW1vcnlDb250ZXh0IG1jdHgsIFBMeVByb2NlZHVyZSAqcHJvYykK IHsKIAlQTHlTYXZlZEFyZ3MgKnJlc3VsdDsKIAogCS8qIHNhdmVkIGFyZ3MgYXJlIGFsd2F5cyBh bGxvY2F0ZWQgaW4gcHJvY2VkdXJlJ3MgY29udGV4dCAqLwogCXJlc3VsdCA9IChQTHlTYXZlZEFy Z3MgKikKLQkJTWVtb3J5Q29udGV4dEFsbG9jWmVybyhwcm9jLT5tY3h0LAorCQlNZW1vcnlDb250 ZXh0QWxsb2NaZXJvKG1jdHgsCiAJCQkJCQkJICAgb2Zmc2V0b2YoUEx5U2F2ZWRBcmdzLCBuYW1l ZGFyZ3MpICsKIAkJCQkJCQkgICBwcm9jLT5uYXJncyAqIHNpemVvZihQeU9iamVjdCAqKSk7CiAJ cmVzdWx0LT5uYXJncyA9IHByb2MtPm5hcmdzOwpAQCAtNjE4LDI4ICs2NDYsNiBAQCBQTHlfZnVu Y3Rpb25fcmVzdG9yZV9hcmdzKFBMeVByb2NlZHVyZSAqcHJvYywgUEx5U2F2ZWRBcmdzICpzYXZl ZGFyZ3MpCiAJcGZyZWUoc2F2ZWRhcmdzKTsKIH0KIAotLyoKLSAqIEZyZWUgYSBQTHlTYXZlZEFy Z3Mgc3RydWN0IHdpdGhvdXQgcmVzdG9yaW5nIHRoZSB2YWx1ZXMuCi0gKi8KLXN0YXRpYyB2b2lk Ci1QTHlfZnVuY3Rpb25fZHJvcF9hcmdzKFBMeVNhdmVkQXJncyAqc2F2ZWRhcmdzKQotewotCWlu dAkJCWk7Ci0KLQkvKiBEcm9wIHJlZmVyZW5jZXMgZm9yIG5hbWVkIGFyZ3MgKi8KLQlmb3IgKGkg PSAwOyBpIDwgc2F2ZWRhcmdzLT5uYXJnczsgaSsrKQotCXsKLQkJUHlfWERFQ1JFRihzYXZlZGFy Z3MtPm5hbWVkYXJnc1tpXSk7Ci0JfQotCi0JLyogRHJvcCByZWZzIHRvIHRoZSAiYXJncyIgYW5k ICJURCIgb2JqZWN0cywgdG9vICovCi0JUHlfWERFQ1JFRihzYXZlZGFyZ3MtPmFyZ3MpOwotCVB5 X1hERUNSRUYoc2F2ZWRhcmdzLT50ZCk7Ci0KLQkvKiBBbmQgZnJlZSB0aGUgUEx5U2F2ZWRBcmdz IHN0cnVjdCAqLwotCXBmcmVlKHNhdmVkYXJncyk7Ci19Ci0KIC8qCiAgKiBTYXZlIGF3YXkgYW55 IGV4aXN0aW5nIGFyZ3VtZW50cyBmb3IgdGhlIGdpdmVuIHByb2NlZHVyZSwgc28gdGhhdCB3ZSBj YW4KICAqIGluc3RhbGwgbmV3IHZhbHVlcyBmb3IgYSByZWN1cnNpdmUgY2FsbC4gIFRoaXMgc2hv dWxkIGJlIGludm9rZWQgYmVmb3JlCkBAIC02NTksNyArNjY1LDcgQEAgUEx5X2dsb2JhbF9hcmdz X3B1c2goUEx5UHJvY2VkdXJlICpwcm9jKQogCQlQTHlTYXZlZEFyZ3MgKm5vZGU7CiAKIAkJLyog QnVpbGQgYSBzdHJ1Y3QgY29udGFpbmluZyBjdXJyZW50IGFyZ3VtZW50IHZhbHVlcyAqLwotCQlu b2RlID0gUEx5X2Z1bmN0aW9uX3NhdmVfYXJncyhwcm9jKTsKKwkJbm9kZSA9IFBMeV9mdW5jdGlv bl9zYXZlX2FyZ3MocHJvYy0+bWN4dCwgcHJvYyk7CiAKIAkJLyoKIAkJICogUHVzaCB0aGUgc2F2 ZWQgYXJndW1lbnQgdmFsdWVzIGludG8gdGhlIHByb2NlZHVyZSdzIHN0YWNrLiAgT25jZSB3ZQpA QCAtNzEzLDI1ICs3MTksNiBAQCBQTHlfZ2xvYmFsX2FyZ3NfcG9wKFBMeVByb2NlZHVyZSAqcHJv YykKIAl9CiB9CiAKLS8qCi0gKiBNZW1vcnkgY29udGV4dCBkZWxldGlvbiBjYWxsYmFjayBmb3Ig Y2xlYW5pbmcgdXAgYSBQTHlTUkZTdGF0ZS4KLSAqIFdlIG5lZWQgdGhpcyBpbiBjYXNlIGV4ZWN1 dGlvbiBvZiB0aGUgU1JGIGlzIHRlcm1pbmF0ZWQgZWFybHksCi0gKiBkdWUgdG8gZXJyb3Igb3Ig dGhlIGNhbGxlciBzaW1wbHkgbm90IHJ1bm5pbmcgaXQgdG8gY29tcGxldGlvbi4KLSAqLwotc3Rh dGljIHZvaWQKLXBscHl0aG9uX3NyZl9jbGVhbnVwX2NhbGxiYWNrKHZvaWQgKmFyZykKLXsKLQlQ THlTUkZTdGF0ZSAqc3Jmc3RhdGUgPSAoUEx5U1JGU3RhdGUgKikgYXJnOwotCi0JLyogUmVsZWFz ZSByZWZjb3VudCBvbiB0aGUgaXRlciwgaWYgd2Ugc3RpbGwgaGF2ZSBvbmUgKi8KLQlQeV9YREVD UkVGKHNyZnN0YXRlLT5pdGVyKTsKLQlzcmZzdGF0ZS0+aXRlciA9IE5VTEw7Ci0JLyogQW5kIGRy b3AgYW55IHNhdmVkIGFyZ3M7IHdlIHdvbid0IG5lZWQgdGhlbSAqLwotCWlmIChzcmZzdGF0ZS0+ c2F2ZWRhcmdzKQotCQlQTHlfZnVuY3Rpb25fZHJvcF9hcmdzKHNyZnN0YXRlLT5zYXZlZGFyZ3Mp OwotCXNyZnN0YXRlLT5zYXZlZGFyZ3MgPSBOVUxMOwotfQotCiBzdGF0aWMgdm9pZAogcGxweXRo b25fcmV0dXJuX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKIHsKZGlmZiAtLWdpdCBhL3NyYy9w bC9wbHB5dGhvbi9wbHB5X2V4ZWMuaCBiL3NyYy9wbC9wbHB5dGhvbi9wbHB5X2V4ZWMuaAppbmRl eCBmMzVlYWJiZDhlZS4uMWFkZTFiYWUxNTEgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHB5dGhvbi9w bHB5X2V4ZWMuaAorKysgYi9zcmMvcGwvcGxweXRob24vcGxweV9leGVjLmgKQEAgLTcsNyArNyw3 IEBACiAKICNpbmNsdWRlICJwbHB5X3Byb2NlZHVyZS5oIgogCi1leHRlcm4gRGF0dW0gUEx5X2V4 ZWNfZnVuY3Rpb24oRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBMeVByb2NlZHVyZSAqcHJvYyk7 CitleHRlcm4gRGF0dW0gUEx5X2V4ZWNfZnVuY3Rpb24oRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8s IFBMeVByb2NlZHVyZUNhY2hlICpwY2FjaGUpOwogZXh0ZXJuIEhlYXBUdXBsZSBQTHlfZXhlY190 cmlnZ2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBQTHlQcm9jZWR1cmUgKnByb2MpOwogZXh0 ZXJuIHZvaWQgUEx5X2V4ZWNfZXZlbnRfdHJpZ2dlcihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg UEx5UHJvY2VkdXJlICpwcm9jKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscHl0aG9uL3BscHlf bWFpbi5jIGIvc3JjL3BsL3BscHl0aG9uL3BscHlfbWFpbi5jCmluZGV4IDlmMDdjMTE1ZjgwLi45 OGVjNmEyOGE5YiAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscHl0aG9uL3BscHlfbWFpbi5jCisrKyBi L3NyYy9wbC9wbHB5dGhvbi9wbHB5X21haW4uYwpAQCAtMTAzLDggKzEwMyw2IEBAIF9QR19pbml0 KHZvaWQpCiAKIAlQeV9ERUNSRUYobWFpbl9tb2QpOwogCi0JaW5pdF9wcm9jZWR1cmVfY2FjaGVz KCk7Ci0KIAlleHBsaWNpdF9zdWJ0cmFuc2FjdGlvbnMgPSBOSUw7CiAKIAlQTHlfZXhlY3V0aW9u X2NvbnRleHRzID0gTlVMTDsKQEAgLTExMyw5ICsxMTEsMTMgQEAgX1BHX2luaXQodm9pZCkKIERh dHVtCiBwbHB5dGhvbjNfdmFsaWRhdG9yKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CisJTE9DQUxfRkNJ TkZPKGZha2VfZmNpbmZvLCAwKTsKIAlPaWQJCQlmdW5jb2lkID0gUEdfR0VUQVJHX09JRCgwKTsK IAlIZWFwVHVwbGUJdHVwbGU7CiAJRm9ybV9wZ19wcm9jIHByb2NTdHJ1Y3Q7CisJRm1nckluZm8J ZmxpbmZvOworCVRyaWdnZXJEYXRhIHRyaWdkYXRhOworCUV2ZW50VHJpZ2dlckRhdGEgZXRyaWdk YXRhOwogCVBMeVRyaWdUeXBlIGlzX3RyaWdnZXI7CiAKIAlpZiAoIUNoZWNrRnVuY3Rpb25WYWxp ZGF0b3JBY2Nlc3MoZmNpbmZvLT5mbGluZm8tPmZuX29pZCwgZnVuY29pZCkpCkBAIC0xMzQsOCAr MTM2LDMzIEBAIHBscHl0aG9uM192YWxpZGF0b3IoUEdfRlVOQ1RJT05fQVJHUykKIAogCVJlbGVh c2VTeXNDYWNoZSh0dXBsZSk7CiAKKwkvKgorCSAqIFNldCB1cCBhIGZha2UgZmNpbmZvIHdpdGgg anVzdCBlbm91Z2ggaW5mbyB0byBzYXRpc2Z5CisJICogUEx5X3Byb2NlZHVyZV9nZXQoKS4gIFRo YXQgZnVuY3Rpb24gZGVyaXZlcyB0aGUgY2FsbCBjb250ZXh0IChwbGFpbgorCSAqIGZ1bmN0aW9u LCBETUwgdHJpZ2dlciwgb3IgZXZlbnQgdHJpZ2dlcikgZnJvbSB0aGUgZmNpbmZvLCBzbyB3ZSBo YXZlIHRvCisJICogZmFrZSB1cCB0aGUgbWF0Y2hpbmcgY29udGV4dCBub2RlIGhlcmUuCisJICov CisJTWVtU2V0KGZha2VfZmNpbmZvLCAwLCBTaXplRm9yRnVuY3Rpb25DYWxsSW5mbygwKSk7CisJ TWVtU2V0KCZmbGluZm8sIDAsIHNpemVvZihmbGluZm8pKTsKKwlmYWtlX2ZjaW5mby0+ZmxpbmZv ID0gJmZsaW5mbzsKKwlmbGluZm8uZm5fb2lkID0gZnVuY29pZDsKKwlmbGluZm8uZm5fbWN4dCA9 IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCisJaWYgKGlzX3RyaWdnZXIgPT0gUExQWV9UUklHR0VS KQorCXsKKwkJTWVtU2V0KCZ0cmlnZGF0YSwgMCwgc2l6ZW9mKHRyaWdkYXRhKSk7CisJCXRyaWdk YXRhLnR5cGUgPSBUX1RyaWdnZXJEYXRhOworCQlmYWtlX2ZjaW5mby0+Y29udGV4dCA9IChOb2Rl ICopICZ0cmlnZGF0YTsKKwl9CisJZWxzZSBpZiAoaXNfdHJpZ2dlciA9PSBQTFBZX0VWRU5UX1RS SUdHRVIpCisJeworCQlNZW1TZXQoJmV0cmlnZGF0YSwgMCwgc2l6ZW9mKGV0cmlnZGF0YSkpOwor CQlldHJpZ2RhdGEudHlwZSA9IFRfRXZlbnRUcmlnZ2VyRGF0YTsKKwkJZmFrZV9mY2luZm8tPmNv bnRleHQgPSAoTm9kZSAqKSAmZXRyaWdkYXRhOworCX0KKwogCS8qIFdlIGNhbid0IHZhbGlkYXRl IHRyaWdnZXJzIGFnYWluc3QgYW55IHBhcnRpY3VsYXIgdGFibGUgLi4uICovCi0JKHZvaWQpIFBM eV9wcm9jZWR1cmVfZ2V0KGZ1bmNvaWQsIEludmFsaWRPaWQsIGlzX3RyaWdnZXIpOworCSh2b2lk KSBQTHlfcHJvY2VkdXJlX2dldChmYWtlX2ZjaW5mbywgdHJ1ZSk7CiAKIAlQR19SRVRVUk5fVk9J RCgpOwogfQpAQCAtMTQzLDYgKzE3MCw3IEBAIHBscHl0aG9uM192YWxpZGF0b3IoUEdfRlVOQ1RJ T05fQVJHUykKIERhdHVtCiBwbHB5dGhvbjNfY2FsbF9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1Mp CiB7CisJUEx5UHJvY2VkdXJlQ2FjaGUgKnBjYWNoZTsKIAlib29sCQlub25hdG9taWM7CiAJRGF0 dW0JCXJldHZhbDsKIAlQTHlFeGVjdXRpb25Db250ZXh0ICpleGVjX2N0eDsKQEAgLTE2NCw5ICsx OTIsNiBAQCBwbHB5dGhvbjNfY2FsbF9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlQR19U UlkoKTsKIAl7Ci0JCU9pZAkJCWZ1bmNvaWQgPSBmY2luZm8tPmZsaW5mby0+Zm5fb2lkOwotCQlQ THlQcm9jZWR1cmUgKnByb2M7Ci0KIAkJLyoKIAkJICogU2V0dXAgZXJyb3IgdHJhY2ViYWNrIHN1 cHBvcnQgZm9yIGVyZXBvcnQoKS4gIE5vdGUgdGhhdCB0aGUgUEdfVFJZCiAJCSAqIHN0cnVjdHVy ZSBwb3BzIHRoaXMgZm9yIHVzIGFnYWluIGF0IGV4aXQsIHNvIHdlIG5lZWRuJ3QgZG8gdGhhdApA QCAtMTc4LDM0ICsyMDMsMzUgQEAgcGxweXRob24zX2NhbGxfaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQogCQlwbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOwogCQll cnJvcl9jb250ZXh0X3N0YWNrID0gJnBsZXJyY29udGV4dDsKIAorCQkvKgorCQkgKiBMb29rIHVw IChhbmQgaWYgbmVjZXNzYXJ5IGNvbXBpbGUpIHRoZSBwcm9jZWR1cmUuICBUaGlzIGNhbiB0aHJv dworCQkgKiBhbiBlcnJvciwgc28gaXQgbXVzdCBoYXBwZW4gaW5zaWRlIHRoZSBQR19UUlkgc28g dGhhdCB0aGUgZXhlY3V0aW9uCisJCSAqIGNvbnRleHQgZ2V0cyBwb3BwZWQgb24gdGhlIHdheSBv dXQuCisJCSAqLworCQlwY2FjaGUgPSBQTHlfcHJvY2VkdXJlX2dldChmY2luZm8sIGZhbHNlKTsK KwkJZXhlY19jdHgtPmN1cnJfcHJvYyA9IHBjYWNoZS0+cHJvYzsKKwogCQlpZiAoQ0FMTEVEX0FT X1RSSUdHRVIoZmNpbmZvKSkKIAkJewotCQkJUmVsYXRpb24JdGdyZWwgPSAoKFRyaWdnZXJEYXRh ICopIGZjaW5mby0+Y29udGV4dCktPnRnX3JlbGF0aW9uOwogCQkJSGVhcFR1cGxlCXRydjsKIAot CQkJcHJvYyA9IFBMeV9wcm9jZWR1cmVfZ2V0KGZ1bmNvaWQsIFJlbGF0aW9uR2V0UmVsaWQodGdy ZWwpLCBQTFBZX1RSSUdHRVIpOwotCQkJZXhlY19jdHgtPmN1cnJfcHJvYyA9IHByb2M7Ci0JCQl0 cnYgPSBQTHlfZXhlY190cmlnZ2VyKGZjaW5mbywgcHJvYyk7CisJCQl0cnYgPSBQTHlfZXhlY190 cmlnZ2VyKGZjaW5mbywgcGNhY2hlLT5wcm9jKTsKIAkJCXJldHZhbCA9IFBvaW50ZXJHZXREYXR1 bSh0cnYpOwogCQl9CiAJCWVsc2UgaWYgKENBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykp CiAJCXsKLQkJCXByb2MgPSBQTHlfcHJvY2VkdXJlX2dldChmdW5jb2lkLCBJbnZhbGlkT2lkLCBQ TFBZX0VWRU5UX1RSSUdHRVIpOwotCQkJZXhlY19jdHgtPmN1cnJfcHJvYyA9IHByb2M7Ci0JCQlQ THlfZXhlY19ldmVudF90cmlnZ2VyKGZjaW5mbywgcHJvYyk7CisJCQlQTHlfZXhlY19ldmVudF90 cmlnZ2VyKGZjaW5mbywgcGNhY2hlLT5wcm9jKTsKIAkJCXJldHZhbCA9IChEYXR1bSkgMDsKIAkJ fQogCQllbHNlCi0JCXsKLQkJCXByb2MgPSBQTHlfcHJvY2VkdXJlX2dldChmdW5jb2lkLCBJbnZh bGlkT2lkLCBQTFBZX05PVF9UUklHR0VSKTsKLQkJCWV4ZWNfY3R4LT5jdXJyX3Byb2MgPSBwcm9j OwotCQkJcmV0dmFsID0gUEx5X2V4ZWNfZnVuY3Rpb24oZmNpbmZvLCBwcm9jKTsKLQkJfQorCQkJ cmV0dmFsID0gUEx5X2V4ZWNfZnVuY3Rpb24oZmNpbmZvLCBwY2FjaGUpOwogCX0KIAlQR19DQVRD SCgpOwogCXsKKwkJLyogRGVzdHJveSB0aGUgZXhlY3V0aW9uIGNvbnRleHQgKi8KIAkJUEx5X3Bv cF9leGVjdXRpb25fY29udGV4dCgpOwogCQlQeUVycl9DbGVhcigpOworCiAJCVBHX1JFX1RIUk9X KCk7CiAJfQogCVBHX0VORF9UUlkoKTsKQEAgLTIyMyw2ICsyNDksNyBAQCBwbHB5dGhvbjNfaW5s aW5lX2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlJbmxpbmVDb2RlQmxvY2sgKmNvZGVibG9j ayA9IChJbmxpbmVDb2RlQmxvY2sgKikgRGF0dW1HZXRQb2ludGVyKFBHX0dFVEFSR19EQVRVTSgw KSk7CiAJRm1nckluZm8JZmxpbmZvOwogCVBMeVByb2NlZHVyZSBwcm9jOworCVBMeVByb2NlZHVy ZUNhY2hlIHBjYWNoZTsKIAlQTHlFeGVjdXRpb25Db250ZXh0ICpleGVjX2N0eDsKIAlFcnJvckNv bnRleHRDYWxsYmFjayBwbGVycmNvbnRleHQ7CiAKQEAgLTI0OCw2ICsyNzUsMTEgQEAgcGxweXRo b24zX2lubGluZV9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJICovCiAJcHJvYy5yZXN1bHQu dHlwb2lkID0gVk9JRE9JRDsKIAorCS8qIFNldCB1cCBhIG1pbmltYWwgUEx5UHJvY2VkdXJlQ2Fj aGUgZm9yIHRoZSBpbmxpbmUgYmxvY2sgKi8KKwlNZW1TZXQoJnBjYWNoZSwgMCwgc2l6ZW9mKFBM eVByb2NlZHVyZUNhY2hlKSk7CisJcGNhY2hlLnByb2MgPSAmcHJvYzsKKwlwY2FjaGUuZmNvbnRl eHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKwogCS8qCiAJICogUHVzaCBleGVjdXRpb24gY29u dGV4dCBvbnRvIHN0YWNrLiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhpcyBnZXQKIAkgKiBwb3Bw ZWQgYWdhaW4sIHNvIGF2b2lkIHB1dHRpbmcgYW55dGhpbmcgdGhhdCBjb3VsZCB0aHJvdyBlcnJv ciBiZXR3ZWVuCkBAIC0yNjksNyArMzAxLDcgQEAgcGxweXRob24zX2lubGluZV9oYW5kbGVyKFBH X0ZVTkNUSU9OX0FSR1MpCiAKIAkJUEx5X3Byb2NlZHVyZV9jb21waWxlKCZwcm9jLCBjb2RlYmxv Y2stPnNvdXJjZV90ZXh0KTsKIAkJZXhlY19jdHgtPmN1cnJfcHJvYyA9ICZwcm9jOwotCQlQTHlf ZXhlY19mdW5jdGlvbihmYWtlX2ZjaW5mbywgJnByb2MpOworCQlQTHlfZXhlY19mdW5jdGlvbihm YWtlX2ZjaW5mbywgJnBjYWNoZSk7CiAJfQogCVBHX0NBVENIKCk7CiAJewpAQCAtMjg5LDYgKzMy MSwxMSBAQCBwbHB5dGhvbjNfaW5saW5lX2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19S RVRVUk5fVk9JRCgpOwogfQogCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmdW5jdGlvbiBp cyBhIChETUwgb3IgZXZlbnQpIHRyaWdnZXIgZnJvbSBpdHMgcGdfcHJvYworICogcmVzdWx0IHR5 cGUuICBUaGlzIGlzIHVzZWQgYnkgdGhlIHZhbGlkYXRvciwgd2hpY2ggaGFzIG5vIGNhbGwgY29u dGV4dCB0bworICogaW5zcGVjdDsgdGhlIGNhbGwgaGFuZGxlciBpbnN0ZWFkIHJlbGllcyBvbiB0 aGUgZmNpbmZvJ3MgY2FsbCBjb250ZXh0LgorICovCiBzdGF0aWMgUEx5VHJpZ1R5cGUKIFBMeV9w cm9jZWR1cmVfaXNfdHJpZ2dlcihGb3JtX3BnX3Byb2MgcHJvY1N0cnVjdCkKIHsKZGlmZiAtLWdp dCBhL3NyYy9wbC9wbHB5dGhvbi9wbHB5X3Byb2NlZHVyZS5jIGIvc3JjL3BsL3BscHl0aG9uL3Bs cHlfcHJvY2VkdXJlLmMKaW5kZXggNzUwYmE1ODZlMGMuLjJhNmE1YzU0ODA5IDEwMDY0NAotLS0g YS9zcmMvcGwvcGxweXRob24vcGxweV9wcm9jZWR1cmUuYworKysgYi9zcmMvcGwvcGxweXRob24v cGxweV9wcm9jZWR1cmUuYwpAQCAtOSwzMyArOSwzMiBAQAogI2luY2x1ZGUgImFjY2Vzcy9odHVw X2RldGFpbHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCisjaW5j bHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRl ICJwbHB5X2Vsb2cuaCIKICNpbmNsdWRlICJwbHB5X21haW4uaCIKICNpbmNsdWRlICJwbHB5X3By b2NlZHVyZS5oIgogI2luY2x1ZGUgInBscHlfdXRpbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCi0jaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgorI2luY2x1ZGUgInV0aWxzL2Z1bmNj YWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVs LmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotc3RhdGljIEhUQUIgKlBMeV9wcm9j ZWR1cmVfY2FjaGUgPSBOVUxMOwotCi1zdGF0aWMgUEx5UHJvY2VkdXJlICpQTHlfcHJvY2VkdXJl X2NyZWF0ZShIZWFwVHVwbGUgcHJvY1R1cCwgT2lkIGZuX29pZCwgUEx5VHJpZ1R5cGUgaXNfdHJp Z2dlcik7Ci1zdGF0aWMgYm9vbCBQTHlfcHJvY2VkdXJlX3ZhbGlkKFBMeVByb2NlZHVyZSAqcHJv YywgSGVhcFR1cGxlIHByb2NUdXApOworc3RhdGljIHZvaWQgUEx5X3Byb2NlZHVyZV9jcmVhdGUo UEx5UHJvY2VkdXJlICpwcm9jLAorCQkJCQkJCQkgSGVhcFR1cGxlIHByb2NUdXAsCisJCQkJCQkJ CSBPaWQgZm5fb2lkLAorCQkJCQkJCQkgUEx5VHJpZ1R5cGUgaXNfdHJpZ2dlcik7CiBzdGF0aWMg Y2hhciAqUEx5X3Byb2NlZHVyZV9tdW5nZV9zb3VyY2UoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg Y2hhciAqc3JjKTsKLQotCi12b2lkCi1pbml0X3Byb2NlZHVyZV9jYWNoZXModm9pZCkKLXsKLQlI QVNIQ1RMCQloYXNoX2N0bDsKLQotCWhhc2hfY3RsLmtleXNpemUgPSBzaXplb2YoUEx5UHJvY2Vk dXJlS2V5KTsKLQloYXNoX2N0bC5lbnRyeXNpemUgPSBzaXplb2YoUEx5UHJvY2VkdXJlRW50cnkp OwotCVBMeV9wcm9jZWR1cmVfY2FjaGUgPSBoYXNoX2NyZWF0ZSgiUEwvUHl0aG9uIHByb2NlZHVy ZXMiLCAzMiwgJmhhc2hfY3RsLAotCQkJCQkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTKTsK LX0KK3N0YXRpYyB2b2lkIFBMeV9jb21waWxlX2NhbGxiYWNrKEZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvLAorCQkJCQkJCQkgSGVhcFR1cGxlIHByb2NUdXAsCisJCQkJCQkJCSBjb25zdCBDYWNoZWRG dW5jdGlvbkhhc2hLZXkgKmhhc2hrZXksCisJCQkJCQkJCSBDYWNoZWRGdW5jdGlvbiAqY2Z1bmMs CisJCQkJCQkJCSBib29sIGZvclZhbGlkYXRvcik7CitzdGF0aWMgdm9pZCBQTHlfZGVsZXRlX2Nh bGxiYWNrKENhY2hlZEZ1bmN0aW9uICpjZnVuYyk7CitzdGF0aWMgdm9pZCBSZW1vdmVQTHlQcm9j ZWR1cmVDYWNoZSh2b2lkICphcmcpOworc3RhdGljIHZvaWQgUEx5X2Z1bmN0aW9uX2Ryb3BfYXJn cyhQTHlTYXZlZEFyZ3MgKnNhdmVkYXJncyk7CiAKIC8qCiAgKiBQTHlfcHJvY2VkdXJlX25hbWU6 IGdldCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWVkIHByb2NlZHVyZS4KQEAgLTUxLDEwMyArNTAs MTA3IEBAIFBMeV9wcm9jZWR1cmVfbmFtZShQTHlQcm9jZWR1cmUgKnByb2MpCiB9CiAKIC8qCi0g KiBQTHlfcHJvY2VkdXJlX2dldDogcmV0dXJucyBhIGNhY2hlZCBQTHlQcm9jZWR1cmUsIG9yIGNy ZWF0ZXMsIHN0b3JlcyBhbmQKLSAqIHJldHVybnMgYSBuZXcgUEx5UHJvY2VkdXJlLgorICogUEx5 X3Byb2NlZHVyZV9nZXQ6IHJldHVybnMgYSBjYWNoZWQgUEx5UHJvY2VkdXJlQ2FjaGUgZm9yIHRo ZSBmdW5jdGlvbi4KICAqCi0gKiBmbl9vaWQgaXMgdGhlIE9JRCBvZiB0aGUgZnVuY3Rpb24gcmVx dWVzdGVkCi0gKiBmbl9yZWwgaXMgSW52YWxpZE9pZCBvciB0aGUgcmVsYXRpb24gdGhpcyBmdW5j dGlvbiB0cmlnZ2VycyBvbgotICogaXNfdHJpZ2dlciBkZW5vdGVzIHdoZXRoZXIgdGhlIGZ1bmN0 aW9uIGlzIGEgdHJpZ2dlciBmdW5jdGlvbgorICogVGhlIFBMeVByb2NlZHVyZUNhY2hlIGNvbnRh aW5zIGEgcG9pbnRlciB0byB0aGUgbG9uZy1saXZlZCBQTHlQcm9jZWR1cmUKKyAqIChtYW5hZ2Vk IGJ5IGZ1bmNjYWNoZS5jKSBhbmQgZXhlY3V0aW9uLXNwZWNpZmljIHN0YXRlIGxpa2UgU1JGIHN0 YXRlLgogICoKLSAqIFRoZSByZWFzb24gdGhhdCBib3RoIGZuX3JlbCBhbmQgaXNfdHJpZ2dlciBu ZWVkIHRvIGJlIHBhc3NlZCBpcyB0aGF0IHdoZW4KLSAqIHRyaWdnZXIgZnVuY3Rpb25zIGdldCB2 YWxpZGF0ZWQgd2UgZG9uJ3Qga25vdyB3aGljaCByZWxhdGlvbihzKSB0aGV5J2xsCi0gKiBiZSB1 c2VkIHdpdGgsIHNvIG5vIHNlbnNpYmxlIGZuX3JlbCBjYW4gYmUgcGFzc2VkLiAgQWxzbywgaW4g dGhhdCBjYXNlCi0gKiB3ZSBjYW4ndCBtYWtlIGEgY2FjaGUgZW50cnkgYmVjYXVzZSB3ZSBjYW4n dCBjb25zdHJ1Y3QgdGhlIHJpZ2h0IGNhY2hlIGtleS4KLSAqIFRvIGZvcmVzdGFsbCBsZWFrYWdl IG9mIHRoZSBQTHlQcm9jZWR1cmUgaW4gc3VjaCBjYXNlcywgZGVsZXRlIGl0IGFmdGVyCi0gKiBj b25zdHJ1Y3Rpb24gYW5kIHJldHVybiBOVUxMLiAgVGhhdCdzIG9rYXkgYmVjYXVzZSB0aGUgb25s eSBjYWxsZXIgdGhhdAotICogd291bGQgcGFzcyB0aGF0IHNldCBvZiB2YWx1ZXMgaXMgcGxweXRo b24zX3ZhbGlkYXRvciwgd2hpY2ggaWdub3JlcyBvdXIKLSAqIHJlc3VsdCBhbnl3YXkuCisgKiBG b3IgU1JGcywgaWYgd2UgYXJlIHJlc3VtaW5nIGV4ZWN1dGlvbiAoc3Jmc3RhdGUtPml0ZXIgIT0g TlVMTCksIHdlIHNraXAKKyAqIHJldmFsaWRhdGlvbiBhbmQgY29udGludWUgdXNpbmcgdGhlIHNh bWUgUEx5UHJvY2VkdXJlIHRvIGVuc3VyZSBjb25zaXN0ZW50CisgKiBiZWhhdmlvciB0aHJvdWdo b3V0IHRoZSBTUkYgZXhlY3V0aW9uLgogICovCi1QTHlQcm9jZWR1cmUgKgotUEx5X3Byb2NlZHVy ZV9nZXQoT2lkIGZuX29pZCwgT2lkIGZuX3JlbCwgUEx5VHJpZ1R5cGUgaXNfdHJpZ2dlcikKK1BM eVByb2NlZHVyZUNhY2hlICoKK1BMeV9wcm9jZWR1cmVfZ2V0KEZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvLCBib29sIGZvclZhbGlkYXRvcikKIHsKLQlib29sCQl1c2VfY2FjaGU7Ci0JSGVhcFR1cGxl CXByb2NUdXA7Ci0JUEx5UHJvY2VkdXJlS2V5IGtleTsKLQlQTHlQcm9jZWR1cmVFbnRyeSAqdm9s YXRpbGUgZW50cnkgPSBOVUxMOwotCVBMeVByb2NlZHVyZSAqdm9sYXRpbGUgcHJvYyA9IE5VTEw7 Ci0JYm9vbAkJZm91bmQgPSBmYWxzZTsKLQotCWlmIChpc190cmlnZ2VyID09IFBMUFlfVFJJR0dF UiAmJiBmbl9yZWwgPT0gSW52YWxpZE9pZCkKLQkJdXNlX2NhY2hlID0gZmFsc2U7Ci0JZWxzZQot CQl1c2VfY2FjaGUgPSB0cnVlOworCVBMeVByb2NlZHVyZSAqcHJvYzsKKwlQTHlQcm9jZWR1cmVD YWNoZSAqcGNhY2hlOworCUZtZ3JJbmZvICAgKmZpbmZvID0gZmNpbmZvLT5mbGluZm87CisKKwkv KgorCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IGV4ZWN1dGlvbiBmb3IgdGhpcyBGbWdySW5mbywg c2V0IHVwIGEgY2FjaGUgc3RydWN0CisJICogKGluaXRpYWxseSBjb250YWluaW5nIG51bGwgcG9p bnRlcnMpLiAgVGhlIGNhY2hlIG11c3QgbGl2ZSBhcyBsb25nIGFzCisJICogdGhlIEZtZ3JJbmZv LCBzbyBpdCBnb2VzIGluIGZuX21jeHQuICBBbHNvIHNldCB1cCBhIG1lbW9yeSBjb250ZXh0CisJ ICogY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGludm9rZWQgd2hlbiBmbl9tY3h0IGlzIGRlbGV0ZWQu CisJICovCisJcGNhY2hlID0gZmluZm8tPmZuX2V4dHJhOworCWlmIChwY2FjaGUgPT0gTlVMTCkK Kwl7CisJCXBjYWNoZSA9IChQTHlQcm9jZWR1cmVDYWNoZSAqKQorCQkJTWVtb3J5Q29udGV4dEFs bG9jWmVybyhmaW5mby0+Zm5fbWN4dCwgc2l6ZW9mKFBMeVByb2NlZHVyZUNhY2hlKSk7CiAKLQlw cm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0oZm5fb2lk KSk7Ci0JaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQotCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gJXUiLCBmbl9vaWQpOworCQlwY2FjaGUtPmZj b250ZXh0ID0gZmluZm8tPmZuX21jeHQ7CisJCXBjYWNoZS0+bWNiLmZ1bmMgPSBSZW1vdmVQTHlQ cm9jZWR1cmVDYWNoZTsKKwkJcGNhY2hlLT5tY2IuYXJnID0gcGNhY2hlOworCisJCU1lbW9yeUNv bnRleHRSZWdpc3RlclJlc2V0Q2FsbGJhY2soZmluZm8tPmZuX21jeHQsICZwY2FjaGUtPm1jYik7 CisKKwkJZmluZm8tPmZuX2V4dHJhID0gcGNhY2hlOworCX0KIAogCS8qCi0JICogTG9vayBmb3Ig dGhlIGZ1bmN0aW9uIGluIHRoZSBjYWNoZSwgdW5sZXNzIHdlIGRvbid0IGhhdmUgdGhlIG5lY2Vz c2FyeQotCSAqIGluZm9ybWF0aW9uIChlLmcuIGR1cmluZyB2YWxpZGF0aW9uKS4gSW4gdGhhdCBj YXNlIHdlIGp1c3QgZG9uJ3QgY2FjaGUKLQkgKiBhbnl0aGluZy4KKwkgKiBJZiB3ZSBhcmUgcmVz dW1pbmcgZXhlY3V0aW9uIG9mIGEgc2V0LXJldHVybmluZyBmdW5jdGlvbiwganVzdCBrZWVwCisJ ICogdXNpbmcgdGhlIHNhbWUgY2FjaGUuICBXZSBkbyBub3QgYXNrIGZ1bmNjYWNoZS5jIHRvIHJl LXZhbGlkYXRlIHRoZQorCSAqIFBMeVByb2NlZHVyZTogd2Ugd2FudCB0byBydW4gdG8gY29tcGxl dGlvbiB1c2luZyB0aGUgZnVuY3Rpb24ncyBpbml0aWFsCisJICogZGVmaW5pdGlvbi4KKwkgKgor CSAqIEEgbGl2ZSBpdGVyYXRvciAoc3Jmc3RhdGUtPml0ZXIgIT0gTlVMTCkgcmVsaWFibHkgbWVh bnMgYSBnZW51aW5lCisJICogcmVzdW1lOiB3aGVuIGFuIGl0ZXJhdGlvbiBlbmRzIGZvciBhbnkg cmVhc29uLCBzcmZzdGF0ZS0+aXRlciBpcyByZXNldAorCSAqIHRvIE5VTEwuICBOb3JtYWwgZXho YXVzdGlvbiBhbmQgaW4tcXVlcnkgY2FuY2VsbGF0aW9uIChMSU1JVCwgcmVzY2FuKQorCSAqIGdv IHRocm91Z2ggUEx5X2V4ZWNfZnVuY3Rpb24oKS9TaHV0ZG93blBMeUZ1bmN0aW9uKCk7IGFuIGVy cm9yIHRocm93bgorCSAqIGR1cmluZyB0aGUgZnVuY3Rpb24ncyBvd24gZXhlY3V0aW9uIGlzIGhh bmRsZWQgYnkgdGhlIFBHX0NBVENIIHRoZXJlOworCSAqIGFuZCBhbiBhYm9ydCB0aGF0IHRlYXJz IGRvd24gdGhlIEZtZ3JJbmZvIHJ1bnMKKwkgKiBSZW1vdmVQTHlQcm9jZWR1cmVDYWNoZSgpLiAg U28gd2UgY2FuJ3QgbWlzdGFrZSBsZWZ0b3ZlciBzdGF0ZSBmcm9tIGFuCisJICogaW50ZXJydXB0 ZWQgU1JGIGZvciBhIHJlc3VtZSBoZXJlLgogCSAqLwotCWlmICh1c2VfY2FjaGUpCisJaWYgKHBj YWNoZS0+c3Jmc3RhdGUgIT0gTlVMTCAmJiBwY2FjaGUtPnNyZnN0YXRlLT5pdGVyICE9IE5VTEwp CiAJewotCQlrZXkuZm5fb2lkID0gZm5fb2lkOwotCQlrZXkuZm5fcmVsID0gZm5fcmVsOwotCQll bnRyeSA9IGhhc2hfc2VhcmNoKFBMeV9wcm9jZWR1cmVfY2FjaGUsICZrZXksIEhBU0hfRU5URVIs ICZmb3VuZCk7Ci0JCXByb2MgPSBlbnRyeS0+cHJvYzsKKwkJQXNzZXJ0KHBjYWNoZS0+cHJvYyAh PSBOVUxMKTsKKwkJcmV0dXJuIHBjYWNoZTsKIAl9CiAKLQlQR19UUlkoKTsKKwkvKgorCSAqIExv b2sgdXAsIG9yIHJlLXZhbGlkYXRlLCB0aGUgbG9uZy1saXZlZCBoYXNoIGVudHJ5LgorCSAqLwor CXByb2MgPSAoUEx5UHJvY2VkdXJlICopCisJCWNhY2hlZF9mdW5jdGlvbl9jb21waWxlKGZjaW5m bywKKwkJCQkJCQkJKENhY2hlZEZ1bmN0aW9uICopIHBjYWNoZS0+cHJvYywKKwkJCQkJCQkJUEx5 X2NvbXBpbGVfY2FsbGJhY2ssCisJCQkJCQkJCVBMeV9kZWxldGVfY2FsbGJhY2ssCisJCQkJCQkJ CXNpemVvZihQTHlQcm9jZWR1cmUpLAorCQkJCQkJCQl0cnVlLAorCQkJCQkJCQlmb3JWYWxpZGF0 b3IpOworCisJLyoKKwkgKiBJbnN0YWxsIHRoZSBoYXNoIHBvaW50ZXIgaW4gdGhlIFBMeVByb2Nl ZHVyZUNhY2hlLCBhbmQgaW5jcmVtZW50IGl0cworCSAqIHVzZSBjb3VudCB0byByZWZsZWN0IHRo YXQuICBJZiBjYWNoZWRfZnVuY3Rpb25fY29tcGlsZSBnYXZlIHVzIGJhY2sgYQorCSAqIGRpZmZl cmVudCBoYXNoIGVudHJ5IHRoYW4gd2Ugd2VyZSB1c2luZyBiZWZvcmUsIHdlIG11c3QgZGVjcmVt ZW50IHRoYXQKKwkgKiBvbmUncyB1c2UgY291bnQuCisJICovCisJaWYgKHByb2MgIT0gcGNhY2hl LT5wcm9jKQogCXsKLQkJaWYgKCFmb3VuZCkKKwkJaWYgKHBjYWNoZS0+cHJvYyAhPSBOVUxMKQog CQl7Ci0JCQkvKiBIYXZlbid0IGZvdW5kIGl0LCBjcmVhdGUgYSBuZXcgcHJvY2VkdXJlICovCi0J CQlwcm9jID0gUEx5X3Byb2NlZHVyZV9jcmVhdGUocHJvY1R1cCwgZm5fb2lkLCBpc190cmlnZ2Vy KTsKLQkJCWlmICh1c2VfY2FjaGUpCi0JCQkJZW50cnktPnByb2MgPSBwcm9jOwotCQkJZWxzZQot CQkJewotCQkJCS8qIERlbGV0ZSB0aGUgcHJvYywgb3RoZXJ3aXNlIGl0J3MgYSBtZW1vcnkgbGVh ayAqLwotCQkJCVBMeV9wcm9jZWR1cmVfZGVsZXRlKHByb2MpOwotCQkJCXByb2MgPSBOVUxMOwot CQkJfQotCQl9Ci0JCWVsc2UgaWYgKCFQTHlfcHJvY2VkdXJlX3ZhbGlkKHByb2MsIHByb2NUdXAp KQotCQl7Ci0JCQkvKiBGb3VuZCBpdCwgYnV0IGl0J3MgaW52YWxpZCwgZnJlZSBhbmQgcmV1c2Ug dGhlIGNhY2hlIGVudHJ5ICovCi0JCQllbnRyeS0+cHJvYyA9IE5VTEw7Ci0JCQlpZiAocHJvYykK LQkJCQlQTHlfcHJvY2VkdXJlX2RlbGV0ZShwcm9jKTsKLQkJCXByb2MgPSBQTHlfcHJvY2VkdXJl X2NyZWF0ZShwcm9jVHVwLCBmbl9vaWQsIGlzX3RyaWdnZXIpOwotCQkJZW50cnktPnByb2MgPSBw cm9jOworCQkJQXNzZXJ0KHBjYWNoZS0+cHJvYy0+Y2Z1bmMudXNlX2NvdW50ID4gMCk7CisJCQlw Y2FjaGUtPnByb2MtPmNmdW5jLnVzZV9jb3VudC0tOwogCQl9Ci0JCS8qIEZvdW5kIGl0IGFuZCBp dCdzIHZhbGlkLCBpdCdzIGZpbmUgdG8gdXNlIGl0ICovCisJCXBjYWNoZS0+cHJvYyA9IHByb2M7 CisJCXByb2MtPmNmdW5jLnVzZV9jb3VudCsrOwogCX0KLQlQR19DQVRDSCgpOwotCXsKLQkJLyog RG8gbm90IGxlYXZlIGFuIHVuaW5pdGlhbGl6ZWQgZW50cnkgaW4gdGhlIGNhY2hlICovCi0JCWlm ICh1c2VfY2FjaGUpCi0JCQloYXNoX3NlYXJjaChQTHlfcHJvY2VkdXJlX2NhY2hlLCAma2V5LCBI QVNIX1JFTU9WRSwgTlVMTCk7Ci0JCVBHX1JFX1RIUk9XKCk7Ci0JfQotCVBHX0VORF9UUlkoKTsK LQotCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKIAotCXJldHVybiBwcm9jOworCXJldHVybiBw Y2FjaGU7CiB9CiAKIC8qCiAgKiBDcmVhdGUgYSBuZXcgUEx5UHJvY2VkdXJlIHN0cnVjdHVyZQog ICovCi1zdGF0aWMgUEx5UHJvY2VkdXJlICoKLVBMeV9wcm9jZWR1cmVfY3JlYXRlKEhlYXBUdXBs ZSBwcm9jVHVwLCBPaWQgZm5fb2lkLCBQTHlUcmlnVHlwZSBpc190cmlnZ2VyKQorc3RhdGljIHZv aWQKK1BMeV9wcm9jZWR1cmVfY3JlYXRlKFBMeVByb2NlZHVyZSAqcHJvYywKKwkJCQkJIEhlYXBU dXBsZSBwcm9jVHVwLAorCQkJCQkgT2lkIGZuX29pZCwKKwkJCQkJIFBMeVRyaWdUeXBlIGlzX3Ry aWdnZXIpCiB7CiAJY2hhcgkJcHJvY05hbWVbTkFNRURBVEFMRU4gKyAyNTZdOwogCUZvcm1fcGdf cHJvYyBwcm9jU3RydWN0OwotCVBMeVByb2NlZHVyZSAqdm9sYXRpbGUgcHJvYzsKIAlNZW1vcnlD b250ZXh0IGN4dDsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlpbnQJCQlydjsKQEAgLTE3Nyw3 ICsxODAsNiBAQCBQTHlfcHJvY2VkdXJlX2NyZWF0ZShIZWFwVHVwbGUgcHJvY1R1cCwgT2lkIGZu X29pZCwgUEx5VHJpZ1R5cGUgaXNfdHJpZ2dlcikKIAogCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhjeHQpOwogCi0JcHJvYyA9IHBhbGxvYzBfb2JqZWN0KFBMeVByb2NlZHVyZSk7CiAJ cHJvYy0+bWN4dCA9IGN4dDsKIAogCVBHX1RSWSgpOwpAQCAtMTkxLDggKzE5Myw2IEBAIFBMeV9w cm9jZWR1cmVfY3JlYXRlKEhlYXBUdXBsZSBwcm9jVHVwLCBPaWQgZm5fb2lkLCBQTHlUcmlnVHlw ZSBpc190cmlnZ2VyKQogCQlwcm9jLT5wcm9uYW1lID0gcHN0cmR1cChOYW1lU3RyKHByb2NTdHJ1 Y3QtPnByb25hbWUpKTsKIAkJTWVtb3J5Q29udGV4dFNldElkZW50aWZpZXIoY3h0LCBwcm9jLT5w cm9uYW1lKTsKIAkJcHJvYy0+cHluYW1lID0gcHN0cmR1cChwcm9jTmFtZSk7Ci0JCXByb2MtPmZu X3htaW4gPSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWluKHByb2NUdXAtPnRfZGF0YSk7Ci0JCXBy b2MtPmZuX3RpZCA9IHByb2NUdXAtPnRfc2VsZjsKIAkJcHJvYy0+Zm5fcmVhZG9ubHkgPSAocHJv Y1N0cnVjdC0+cHJvdm9sYXRpbGUgIT0gUFJPVk9MQVRJTEVfVk9MQVRJTEUpOwogCQlwcm9jLT5p c19zZXRvZiA9IHByb2NTdHJ1Y3QtPnByb3JldHNldDsKIAkJcHJvYy0+aXNfcHJvY2VkdXJlID0g KHByb2NTdHJ1Y3QtPnByb2tpbmQgPT0gUFJPS0lORF9QUk9DRURVUkUpOwpAQCAtMzU1LDcgKzM1 NSw2IEBAIFBMeV9wcm9jZWR1cmVfY3JlYXRlKEhlYXBUdXBsZSBwcm9jVHVwLCBPaWQgZm5fb2lk LCBQTHlUcmlnVHlwZSBpc190cmlnZ2VyKQogCVBHX0VORF9UUlkoKTsKIAogCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjeHQpOwotCXJldHVybiBwcm9jOwogfQogCiAvKgpAQCAtNDI0LDIzICs0 MjMsNiBAQCBQTHlfcHJvY2VkdXJlX2RlbGV0ZShQTHlQcm9jZWR1cmUgKnByb2MpCiAJTWVtb3J5 Q29udGV4dERlbGV0ZShwcm9jLT5tY3h0KTsKIH0KIAotLyoKLSAqIERlY2lkZSB3aGV0aGVyIGEg Y2FjaGVkIFBMeVByb2NlZHVyZSBzdHJ1Y3QgaXMgc3RpbGwgdmFsaWQKLSAqLwotc3RhdGljIGJv b2wKLVBMeV9wcm9jZWR1cmVfdmFsaWQoUEx5UHJvY2VkdXJlICpwcm9jLCBIZWFwVHVwbGUgcHJv Y1R1cCkKLXsKLQlpZiAocHJvYyA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKiBJZiB0 aGUgcGdfcHJvYyB0dXBsZSBoYXMgY2hhbmdlZCwgaXQncyBub3QgdmFsaWQgKi8KLQlpZiAoIShw cm9jLT5mbl94bWluID09IEhlYXBUdXBsZUhlYWRlckdldFJhd1htaW4ocHJvY1R1cC0+dF9kYXRh KSAmJgotCQkgIEl0ZW1Qb2ludGVyRXF1YWxzKCZwcm9jLT5mbl90aWQsICZwcm9jVHVwLT50X3Nl bGYpKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBjaGFy ICoKIFBMeV9wcm9jZWR1cmVfbXVuZ2Vfc291cmNlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo YXIgKnNyYykKIHsKQEAgLTQ4NSwzICs0NjcsMTM4IEBAIFBMeV9wcm9jZWR1cmVfbXVuZ2Vfc291 cmNlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNyYykKIAogCXJldHVybiBtcmM7CiB9 CisKKy8qCisgKiBDb21waWxlIGNhbGxiYWNrIGZvciBmdW5jY2FjaGUuYy4KKyAqCisgKiBjYWNo ZWRfZnVuY3Rpb25fY29tcGlsZSgpIGNhbGxzIHRoaXMgd2hlbiBpdCBuZWVkcyB0byAocmUpY29t cGlsZSB0aGUKKyAqIGxvbmctbGl2ZWQgUEx5UHJvY2VkdXJlIGZvciBhIGZ1bmN0aW9uLiAgVGhl IENhY2hlZEZ1bmN0aW9uIGhhbmRlZCB0byB1cyBpcworICogcHJlLXplcm9lZCB3b3Jrc3BhY2Ug b2Ygc2l6ZSBzaXplb2YoUEx5UHJvY2VkdXJlKTsgd2UganVzdCBoYXZlIHRvIGZpbGwgaW4KKyAq IHRoZSBQTC9QeXRob24tc3BlY2lmaWMgZmllbGRzLiAgV2UgZGVyaXZlIHRoZSB0cmlnZ2VyIHR5 cGUgZnJvbSB0aGUgY2FsbAorICogY29udGV4dCwgbWF0Y2hpbmcgd2hhdCBwbHB5dGhvbjNfY2Fs bF9oYW5kbGVyIGRpc3BhdGNoZXMgb24uCisgKi8KK3N0YXRpYyB2b2lkCitQTHlfY29tcGlsZV9j YWxsYmFjayhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKKwkJCQkJIEhlYXBUdXBsZSBwcm9jVHVw LAorCQkJCQkgY29uc3QgQ2FjaGVkRnVuY3Rpb25IYXNoS2V5ICpoYXNoa2V5LAorCQkJCQkgQ2Fj aGVkRnVuY3Rpb24gKmNmdW5jLAorCQkJCQkgYm9vbCBmb3JWYWxpZGF0b3IpCit7CisJUEx5UHJv Y2VkdXJlICpwcm9jID0gKFBMeVByb2NlZHVyZSAqKSBjZnVuYzsKKwlQTHlUcmlnVHlwZSBpc190 cmlnZ2VyOworCU9pZAkJCWZuX29pZCA9IGZjaW5mby0+ZmxpbmZvLT5mbl9vaWQ7CisKKwlpZiAo Q0FMTEVEX0FTX1RSSUdHRVIoZmNpbmZvKSkKKwkJaXNfdHJpZ2dlciA9IFBMUFlfVFJJR0dFUjsK KwllbHNlIGlmIChDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQlpc190cmlnZ2Vy ID0gUExQWV9FVkVOVF9UUklHR0VSOworCWVsc2UKKwkJaXNfdHJpZ2dlciA9IFBMUFlfTk9UX1RS SUdHRVI7CisKKwlQTHlfcHJvY2VkdXJlX2NyZWF0ZShwcm9jLCBwcm9jVHVwLCBmbl9vaWQsIGlz X3RyaWdnZXIpOworfQorCisvKgorICogRGVsZXRpb24gY2FsbGJhY2sgZm9yIGZ1bmNjYWNoZS5j LgorICoKKyAqIGNhY2hlZF9mdW5jdGlvbl9jb21waWxlKCkgY2FsbHMgdGhpcyB3aGVuIGl0IGRp c2NhcmRzIGEgY2FjaGUgZW50cnksIHdoaWNoCisgKiBvbmx5IGhhcHBlbnMgb25jZSB0aGUgZW50 cnkncyB1c2UgY291bnQgaGFzIGRyb3BwZWQgdG8gemVyby4gIFdlIG11c3QgZnJlZQorICogdGhl IHN1YnNpZGlhcnkgZGF0YSBidXQgbm90IHRoZSBDYWNoZWRGdW5jdGlvbiBzdHJ1Y3QgaXRzZWxm LgorICovCitzdGF0aWMgdm9pZAorUEx5X2RlbGV0ZV9jYWxsYmFjayhDYWNoZWRGdW5jdGlvbiAq Y2Z1bmMpCit7CisJUEx5UHJvY2VkdXJlICpwcm9jID0gKFBMeVByb2NlZHVyZSAqKSBjZnVuYzsK KworCUFzc2VydChwcm9jLT5jZnVuYy51c2VfY291bnQgPT0gMCk7CisJQXNzZXJ0KHByb2MtPmNh bGxkZXB0aCA9PSAwKTsKKworCVBMeV9wcm9jZWR1cmVfZGVsZXRlKHByb2MpOworfQorCisvKgor ICogTWVtb3J5Q29udGV4dCBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIFdlIHJlZ2lzdGVyIHRo aXMgaW4gdGhlIG1lbW9yeSBjb250ZXh0IHRoYXQgY29udGFpbnMgYSBQTHlQcm9jZWR1cmVDYWNo ZQorICogc3RydWN0ICh0aGF0IGlzLCB0aGUgRm1nckluZm8ncyBmbl9tY3h0KS4gIFdoZW4gdGhl IG1lbW9yeSBjb250ZXh0IGlzIHJlc2V0CisgKiBvciBkZWxldGVkLCB3ZSByZWxlYXNlIHRoZSBy ZWZlcmVuY2UgY291bnQgKGlmIGFueSkgdGhhdCB0aGUgY2FjaGUgaG9sZHMgb24KKyAqIHRoZSBs b25nLWxpdmVkIGhhc2ggZW50cnkuICBOb3RlIHRoYXQgdGhpcyB3aWxsIGhhcHBlbiBldmVuIGR1 cmluZyBlcnJvcgorICogYWJvcnRzLgorICoKKyAqIFRoaXMgaXMgYWxzbyBvdXIgb3Bwb3J0dW5p dHkgdG8gcmVsZWFzZSB0aGUgUHl0aG9uIHJlZmVyZW5jZXMgaGVsZCBieSBhbgorICogaW50ZXJy dXB0ZWQgc2V0LXJldHVybmluZyBmdW5jdGlvbi4gIFNodXRkb3duUEx5RnVuY3Rpb24oKSBoYW5k bGVzIHRoYXQgZm9yCisgKiBub3JtYWwgY29tcGxldGlvbiBhbmQgaW4tcXVlcnkgY2FuY2VsbGF0 aW9uLCBidXQgaXQgZG9lcyBub3QgcnVuIGR1cmluZyBhbgorICogZXJyb3IgYWJvcnQ7IHRoaXMg Y2FsbGJhY2sgZG9lcywgc28gaXQgaXMgdGhlIGJhY2tzdG9wIHRoYXQgcHJldmVudHMgbGVha2lu ZworICogdGhlIFNSRidzIGl0ZXJhdG9yIGFuZCBzYXZlZCBhcmd1bWVudHMgd2hlbiBhIHF1ZXJ5 IGVycm9ycyBvdXQgbWlkLWl0ZXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK1JlbW92ZVBMeVBy b2NlZHVyZUNhY2hlKHZvaWQgKmFyZykKK3sKKwlQTHlQcm9jZWR1cmVDYWNoZSAqcGNhY2hlID0g KFBMeVByb2NlZHVyZUNhY2hlICopIGFyZzsKKworCS8qIFJlbGVhc2UgYW55IFB5dGhvbiBzdGF0 ZSBsZWZ0IGJlaGluZCBieSBhbiBpbnRlcnJ1cHRlZCBTUkYgKi8KKwlQTHlfZnVuY3Rpb25fY2xl YW51cF9zcmZzdGF0ZShwY2FjaGUpOworCisJLyogUmVsZWFzZSByZWZlcmVuY2UgY291bnQgb24g UEx5UHJvY2VkdXJlICovCisJaWYgKHBjYWNoZS0+cHJvYyAhPSBOVUxMKQorCXsKKwkJQXNzZXJ0 KHBjYWNoZS0+cHJvYy0+Y2Z1bmMudXNlX2NvdW50ID4gMCk7CisJCXBjYWNoZS0+cHJvYy0+Y2Z1 bmMudXNlX2NvdW50LS07CisJCXBjYWNoZS0+cHJvYyA9IE5VTEw7CisJfQorfQorCisvKgorICog RnJlZSBhIFBMeVNhdmVkQXJncyBzdHJ1Y3Qgd2l0aG91dCByZXN0b3JpbmcgdGhlIHZhbHVlcy4K KyAqLworc3RhdGljIHZvaWQKK1BMeV9mdW5jdGlvbl9kcm9wX2FyZ3MoUEx5U2F2ZWRBcmdzICpz YXZlZGFyZ3MpCit7CisJaW50CQkJaTsKKworCS8qIERyb3AgcmVmZXJlbmNlcyBmb3IgbmFtZWQg YXJncyAqLworCWZvciAoaSA9IDA7IGkgPCBzYXZlZGFyZ3MtPm5hcmdzOyBpKyspCisJeworCQlQ eV9YREVDUkVGKHNhdmVkYXJncy0+bmFtZWRhcmdzW2ldKTsKKwl9CisKKwkvKiBEcm9wIHJlZnMg dG8gdGhlICJhcmdzIiBhbmQgIlREIiBvYmplY3RzLCB0b28gKi8KKwlQeV9YREVDUkVGKHNhdmVk YXJncy0+YXJncyk7CisJUHlfWERFQ1JFRihzYXZlZGFyZ3MtPnRkKTsKKworCS8qIEFuZCBmcmVl IHRoZSBQTHlTYXZlZEFyZ3Mgc3RydWN0ICovCisJcGZyZWUoc2F2ZWRhcmdzKTsKK30KKworLyoK KyAqIFJlbGVhc2UgdGhlIFB5dGhvbiByZWZlcmVuY2VzIGhlbGQgYnkgYW4gaW4tcHJvZ3Jlc3Mg c2V0LXJldHVybmluZworICogZnVuY3Rpb24sIGFuZCBmcmVlIHRoZSBTUkYgc3RhdGUuICBUaGlz IGlzIGEgbm8tb3AgaWYgdGhlcmUgaXMgbm8gYWN0aXZlCisgKiBTUkYgc3RhdGUsIHNvIGl0J3Mg c2FmZSB0byBjYWxsIG1vcmUgdGhhbiBvbmNlLgorICoKKyAqIFRoZSBQeXRob24gaXRlcmF0b3Ig YW5kIHRoZSBzYXZlZCBhcmd1bWVudCB2YWx1ZXMgb3duIHJlZmVyZW5jZSBjb3VudHMgb24KKyAq IFB5dGhvbiBvYmplY3RzLCB3aGljaCBhcmUgbm90IHJlbGVhc2VkIGJ5IHRyYW5zYWN0aW9uIGFi b3J0IHRoZSB3YXkgYmFja2VuZAorICogbWVtb3J5IGlzLiAgV2UgbXVzdCB0aGVyZWZvcmUgbWFr ZSBzdXJlIHRoaXMgcnVucyBvbiBldmVyeSBleGl0IHBhdGg6IGl0IGlzCisgKiBjYWxsZWQgZnJv bSB0aGUgU1JGIHBhdGhzIGluIFBMeV9leGVjX2Z1bmN0aW9uKCkgYW5kIGZyb20gaXRzIGNvbXBh bmlvbgorICogU2h1dGRvd25QTHlGdW5jdGlvbigpIGZvciBub3JtYWwgY29tcGxldGlvbiBhbmQg aW4tcXVlcnkgY2FuY2VsbGF0aW9uLCBhbmQKKyAqIGZyb20gUmVtb3ZlUEx5UHJvY2VkdXJlQ2Fj aGUoKSBhYm92ZSBhcyB0aGUgYmFja3N0b3AgZm9yIGVycm9yIGFib3J0cy4KKyAqLwordm9pZAor UEx5X2Z1bmN0aW9uX2NsZWFudXBfc3Jmc3RhdGUoUEx5UHJvY2VkdXJlQ2FjaGUgKnBjYWNoZSkK K3sKKwlQTHlTUkZTdGF0ZSAqc3Jmc3RhdGUgPSBwY2FjaGUtPnNyZnN0YXRlOworCisJaWYgKHNy ZnN0YXRlICE9IE5VTEwpCisJeworCQkvKiBSZWxlYXNlIHJlZmNvdW50IG9uIHRoZSBpdGVyLCBp ZiB3ZSBzdGlsbCBoYXZlIG9uZSAqLworCQlQeV9YREVDUkVGKHNyZnN0YXRlLT5pdGVyKTsKKwkJ c3Jmc3RhdGUtPml0ZXIgPSBOVUxMOworCisJCS8qIEFuZCBkcm9wIGFueSBzYXZlZCBhcmdzOyB3 ZSB3b24ndCBuZWVkIHRoZW0gKi8KKwkJaWYgKHNyZnN0YXRlLT5zYXZlZGFyZ3MpCisJCQlQTHlf ZnVuY3Rpb25fZHJvcF9hcmdzKHNyZnN0YXRlLT5zYXZlZGFyZ3MpOworCQlzcmZzdGF0ZS0+c2F2 ZWRhcmdzID0gTlVMTDsKKworCQlwZnJlZShzcmZzdGF0ZSk7CisJCXBjYWNoZS0+c3Jmc3RhdGUg PSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHB5dGhvbi9wbHB5X3Byb2NlZHVy ZS5oIGIvc3JjL3BsL3BscHl0aG9uL3BscHlfcHJvY2VkdXJlLmgKaW5kZXggM2VmMjI4NDRhOWIu LjZjZDYxYTk4MWZhIDEwMDY0NAotLS0gYS9zcmMvcGwvcGxweXRob24vcGxweV9wcm9jZWR1cmUu aAorKysgYi9zcmMvcGwvcGxweXRob24vcGxweV9wcm9jZWR1cmUuaApAQCAtNiw5ICs2LDcgQEAK ICNkZWZpbmUgUExQWV9QUk9DRURVUkVfSAogCiAjaW5jbHVkZSAicGxweV90eXBlaW8uaCIKLQot Ci1leHRlcm4gdm9pZCBpbml0X3Byb2NlZHVyZV9jYWNoZXModm9pZCk7CisjaW5jbHVkZSAidXRp bHMvZnVuY2NhY2hlLmgiCiAKIAogLyoKQEAgLTMxLDE1ICsyOSwyOCBAQCB0eXBlZGVmIHN0cnVj dCBQTHlTYXZlZEFyZ3MKIAlQeU9iamVjdCAgICpuYW1lZGFyZ3NbRkxFWElCTEVfQVJSQVlfTUVN QkVSXTsJLyogbmFtZWQgYXJncyAqLwogfSBQTHlTYXZlZEFyZ3M7CiAKLS8qIGNhY2hlZCBwcm9j ZWR1cmUgZGF0YSAqLworLyogc2F2ZWQgc3RhdGUgZm9yIGEgc2V0LXJldHVybmluZyBmdW5jdGlv biAqLwordHlwZWRlZiBzdHJ1Y3QgUEx5U1JGU3RhdGUKK3sKKwlQeU9iamVjdCAgICppdGVyOwkJ CS8qIFB5dGhvbiBpdGVyYXRvciBwcm9kdWNpbmcgcmVzdWx0cyAqLworCVBMeVNhdmVkQXJncyAq c2F2ZWRhcmdzOwkvKiBmdW5jdGlvbiBhcmd1bWVudCB2YWx1ZXMgKi8KK30gUEx5U1JGU3RhdGU7 CisKKy8qCisgKiBMb25nLWxpdmVkIGRhdGEgZm9yIGEgUEwvUHl0aG9uIGZ1bmN0aW9uLgorICoK KyAqIFRoaXMgc3RydWN0IGlzIG1hbmFnZWQgYnkgZnVuY2NhY2hlLmMgYW5kIGNhbiBiZSBzaGFy ZWQgYWNyb3NzIG11bHRpcGxlCisgKiBleGVjdXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uLiAg SXQgbXVzdCBjb250YWluIG5vIGV4ZWN1dGlvbi1zcGVjaWZpYworICogc3RhdGUuICBUaGUgQ2Fj aGVkRnVuY3Rpb24gc3RydWN0IG11c3QgYmUgZmlyc3Qgc28gd2UgY2FuIGNhc3QgYmV0d2VlbiB0 aGVtLgorICovCiB0eXBlZGVmIHN0cnVjdCBQTHlQcm9jZWR1cmUKIHsKKwlDYWNoZWRGdW5jdGlv biBjZnVuYzsJCS8qIGZpZWxkcyBtYW5hZ2VkIGJ5IGZ1bmNjYWNoZS5jICovCisKIAlNZW1vcnlD b250ZXh0IG1jeHQ7CQkJLyogY29udGV4dCBob2xkaW5nIHRoaXMgUEx5UHJvY2VkdXJlIGFuZCBp dHMKIAkJCQkJCQkJICogc3Vic2lkaWFyeSBkYXRhICovCiAJY2hhcgkgICAqcHJvbmFtZTsJCS8q IFNRTCBuYW1lIG9mIHByb2NlZHVyZSAqLwogCWNoYXIJICAgKnB5bmFtZTsJCQkvKiBQeXRob24g bmFtZSBvZiBwcm9jZWR1cmUgKi8KLQlUcmFuc2FjdGlvbklkIGZuX3htaW47Ci0JSXRlbVBvaW50 ZXJEYXRhIGZuX3RpZDsKIAlib29sCQlmbl9yZWFkb25seTsKIAlib29sCQlpc19zZXRvZjsJCS8q IHRydWUsIGlmIGZ1bmN0aW9uIHJldHVybnMgcmVzdWx0IHNldCAqLwogCWJvb2wJCWlzX3Byb2Nl ZHVyZTsKQEAgLTU5LDI0ICs3MCwyOSBAQCB0eXBlZGVmIHN0cnVjdCBQTHlQcm9jZWR1cmUKIAlQ THlTYXZlZEFyZ3MgKmFyZ3N0YWNrOwkJLyogc3RhY2sgb2Ygb3V0ZXItbGV2ZWwgY2FsbCBhcmd1 bWVudHMgKi8KIH0gUEx5UHJvY2VkdXJlOwogCi0vKiB0aGUgcHJvY2VkdXJlIGNhY2hlIGtleSAq LwotdHlwZWRlZiBzdHJ1Y3QgUEx5UHJvY2VkdXJlS2V5CisvKgorICogUGVyLWNhbGwtc2l0ZSBj YWNoZSBmb3IgYSBQTC9QeXRob24gZnVuY3Rpb24uCisgKgorICogVGhpcyBzdHJ1Y3QgaXMgc3Rv cmVkIGluIGZuX2V4dHJhIGFuZCBob2xkcyBleGVjdXRpb24tc3BlY2lmaWMgc3RhdGUsCisgKiBp bmNsdWRpbmcgYSBwb2ludGVyIHRvIHRoZSBsb25nLWxpdmVkIFBMeVByb2NlZHVyZS4gIFRoZSB1 c2VfY291bnQgaW4KKyAqIHRoZSBQTHlQcm9jZWR1cmUgaXMgaW5jcmVtZW50ZWQgd2hpbGUgd2Ug aG9sZCBhIHJlZmVyZW5jZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUEx5UHJvY2VkdXJlQ2FjaGUK IHsKLQlPaWQJCQlmbl9vaWQ7CQkJLyogZnVuY3Rpb24gT0lEICovCi0JT2lkCQkJZm5fcmVsOwkJ CS8qIHRyaWdnZXJlZC1vbiByZWxhdGlvbiBvciBJbnZhbGlkT2lkICovCi19IFBMeVByb2NlZHVy ZUtleTsKKwlQTHlQcm9jZWR1cmUgKnByb2M7CQkJLyogbG9uZy1saXZlZCBoYXNoIGVudHJ5ICov CisJTWVtb3J5Q29udGV4dCBmY29udGV4dDsJCS8qIGZuX21jeHQgLSBjb250ZXh0IGhvbGRpbmcg dGhpcyBzdHJ1Y3QgKi8KKwlQTHlTUkZTdGF0ZSAqc3Jmc3RhdGU7CQkvKiBTUkYgZXhlY3V0aW9u IHN0YXRlLCBOVUxMIGlmIG5vdCBpbiBTUkYgKi8KKwlib29sCQlzaHV0ZG93bl9yZWc7CS8qIHRy dWUgaWYgcmVnaXN0ZXJlZCBzaHV0ZG93biBjYWxsYmFjayAqLwogCi0vKiB0aGUgcHJvY2VkdXJl IGNhY2hlIGVudHJ5ICovCi10eXBlZGVmIHN0cnVjdCBQTHlQcm9jZWR1cmVFbnRyeQotewotCVBM eVByb2NlZHVyZUtleSBrZXk7CQkvKiBoYXNoIGtleSAqLwotCVBMeVByb2NlZHVyZSAqcHJvYzsK LX0gUEx5UHJvY2VkdXJlRW50cnk7CisJLyogQ2FsbGJhY2sgdG8gcmVsZWFzZSB1c2UtY291bnQg d2hlbiBmY29udGV4dCBpcyBkZWxldGVkICovCisJTWVtb3J5Q29udGV4dENhbGxiYWNrIG1jYjsK K30gUEx5UHJvY2VkdXJlQ2FjaGU7CiAKIC8qIFBMeVByb2NlZHVyZSBtYW5pcHVsYXRpb24gKi8K IGV4dGVybiBjaGFyICpQTHlfcHJvY2VkdXJlX25hbWUoUEx5UHJvY2VkdXJlICpwcm9jKTsKLWV4 dGVybiBQTHlQcm9jZWR1cmUgKlBMeV9wcm9jZWR1cmVfZ2V0KE9pZCBmbl9vaWQsIE9pZCBmbl9y ZWwsIFBMeVRyaWdUeXBlIGlzX3RyaWdnZXIpOworZXh0ZXJuIFBMeVByb2NlZHVyZUNhY2hlICpQ THlfcHJvY2VkdXJlX2dldChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBmb3JWYWxpZGF0 b3IpOwogZXh0ZXJuIHZvaWQgUEx5X3Byb2NlZHVyZV9jb21waWxlKFBMeVByb2NlZHVyZSAqcHJv YywgY29uc3QgY2hhciAqc3JjKTsKIGV4dGVybiB2b2lkIFBMeV9wcm9jZWR1cmVfZGVsZXRlKFBM eVByb2NlZHVyZSAqcHJvYyk7CitleHRlcm4gdm9pZCBQTHlfZnVuY3Rpb25fY2xlYW51cF9zcmZz dGF0ZShQTHlQcm9jZWR1cmVDYWNoZSAqcGNhY2hlKTsKIAogI2VuZGlmCQkJCQkJCS8qIFBMUFlf UFJPQ0VEVVJFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHB5dGhvbi9zcWwvcGxweXRob25f c2V0b2Yuc3FsIGIvc3JjL3BsL3BscHl0aG9uL3NxbC9wbHB5dGhvbl9zZXRvZi5zcWwKaW5kZXgg MWEwNDcyYjdhM2IuLmFmNzMxNTVhNzEzIDEwMDY0NAotLS0gYS9zcmMvcGwvcGxweXRob24vc3Fs L3BscHl0aG9uX3NldG9mLnNxbAorKysgYi9zcmMvcGwvcGxweXRob24vc3FsL3BscHl0aG9uX3Nl dG9mLnNxbApAQCAtMTA3LDMgKzEwNywxNiBAQCAkJCBMQU5HVUFHRSBwbHB5dGhvbjN1OwogCiBT RUxFQ1QgZ2V0X3VzZXJfcmVjb3JkczIoKTsKIFNFTEVDVCAqIEZST00gZ2V0X3VzZXJfcmVjb3Jk czIoKTsKKworLS0gQSBzZXQtcmV0dXJuaW5nIGZ1bmN0aW9uIHRoYXQgaXMgaW52YWxpZGF0ZWQg bWlkLWl0ZXJhdGlvbiBtdXN0IHJ1biB0bworLS0gY29tcGxldGlvbiB1c2luZyBpdHMgb3JpZ2lu YWwgZGVmaW5pdGlvbiAoYnVnICMxOTQ4MCkuCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBz ZWxmX2ludmFsaWRhdGluZ19zcmYoeCBpbnQpIFJFVFVSTlMgU0VUT0YgaW50IEFTICQkCitmb3Ig aSBpbiByYW5nZSgzKToKKyAgICBpZiBpID09IDE6CisgICAgICAgIHBscHkuZXhlY3V0ZSgiQ1JF QVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gc2VsZl9pbnZhbGlkYXRpbmdfc3JmKHggaW50KSAiCisg ICAgICAgICAgICAgICAgICAgICAiUkVUVVJOUyBTRVRPRiBpbnQgTEFOR1VBR0UgcGxweXRob24z dSBBUyAncmV0dXJuIFstMV0nIikKKyAgICB5aWVsZCB4ICsgaQorJCQgTEFOR1VBR0UgcGxweXRo b24zdTsKKworU0VMRUNUIHNlbGZfaW52YWxpZGF0aW5nX3NyZigxMCk7IC0tIGV4cGVjdCAxMCwx MSwxMiAob3JpZ2luYWwgZGVmaW5pdGlvbikKK1NFTEVDVCBzZWxmX2ludmFsaWRhdGluZ19zcmYo MTApOyAtLSBleHBlY3QgLTEgKHJlcGxhY2VtZW50IG5vdyBpbiBlZmZlY3QpCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IGY5ZWIyM2U1MmM5Li42OTc1YWFhMjVjNSAxMDA2NDQKLS0tIGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKQEAgLTIwNzUsOCArMjA3NSw3IEBAIFBMeU9iVG9UdXBsZQogUEx5T2Jq ZWN0X0FzU3RyaW5nX3QKIFBMeVBsYW5PYmplY3QKIFBMeVByb2NlZHVyZQotUEx5UHJvY2VkdXJl RW50cnkKLVBMeVByb2NlZHVyZUtleQorUEx5UHJvY2VkdXJlQ2FjaGUKIFBMeVJlc3VsdE9iamVj dAogUEx5U1JGU3RhdGUKIFBMeVNhdmVkQXJncwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --4a42668fc79179bfc962194105a10bdff338f6a898ca2f527635d09a7ef0--