Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mDQmY-0001VP-Dg for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Aug 2021 12:22:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mDQmX-0008FI-8l for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Aug 2021 12:22:57 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mDQmW-0008FA-OL for pgsql-hackers@lists.postgresql.org; Tue, 10 Aug 2021 12:22:57 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mDQmS-0002LG-VR for pgsql-hackers@postgresql.org; Tue, 10 Aug 2021 12:22:55 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id 0CAD760902; Tue, 10 Aug 2021 21:22:49 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_2cfd427cf82deb39850fe07d13fd51fc" Content-Transfer-Encoding: 8bit Date: Tue, 10 Aug 2021 21:22:49 +0900 From: torikoshia To: Pavel Stehule Cc: Fujii Masao , Bharath Rupireddy , Dilip Kumar , Pgsql Hackers Subject: Re: RFC: Logging plan of the running query In-Reply-To: <7958d03fffe3bafcfe8a505145c63928@oss.nttdata.com> References: <0842b5da697a03869fb50be93817e4e1@oss.nttdata.com> <1c1590d3962cea6e06621da76677b5f3@oss.nttdata.com> <64f716c44629e303b66e6c24502147cc@oss.nttdata.com> <8b53b32f-26cc-0531-4ac0-27310e0bef4b@oss.nttdata.com> <7958d03fffe3bafcfe8a505145c63928@oss.nttdata.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: X-Sender: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_2cfd427cf82deb39850fe07d13fd51fc Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2021-07-28 20:44, torikoshia wrote: > On 2021-07-28 03:45, Pavel Stehule wrote: >> Ășt 27. 7. 2021 v 20:34 odesĂ­latel Fujii Masao >> napsal: >> >>> On 2021/07/09 14:05, torikoshia wrote: >>>> On 2021-07-02 23:21, Bharath Rupireddy wrote: >>>>> On Tue, Jun 22, 2021 at 8:00 AM torikoshia >>> wrote: >>>>>> Updated the patch. >>>>> >>>>> Thanks for the patch. Here are some comments on the v4 patch: >>>> >>>> Thanks for your comments and suggestions! >>>> I agree with you and updated the patch. >>>> >>>> On Thu, Jul 1, 2021 at 3:34 PM Fujii Masao >>> wrote: >>>> >>>>> DO $$ >>>>> BEGIN >>>>> PERFORM pg_sleep(100); >>>>> END$$; >>>>> >>>>> When I called pg_log_current_query_plan() to send the signal to >>>>> the backend executing the above query, I got the following log >>> message. >>>>> I think that this is not expected message. I guess this issue >>> happened >>>>> because the information about query text and plan is retrieved >>>>> from ActivePortal. If this understanding is right, ISTM that we >>> should >>>>> implement new mechanism so that we can retrieve those information >>>>> even while nested query is being executed. >>>> >>>> I'm now working on this comment. >>> >>> One idea is to define new global pointer, e.g., "QueryDesc >>> *ActiveQueryDesc;". >>> This global pointer is set to queryDesc in ExecutorRun() >>> (also maybe ExecutorStart()). And this is reset to NULL in >>> ExecutorEnd() and >>> when an error is thrown. Then ProcessLogCurrentPlanInterrupt() can >>> get the plan of the currently running query from that global pointer >>> instead of ActivePortal, and log it. Thought? >> >> It cannot work - there can be a lot of nested queries, and at the end >> you cannot reset to null, but you should return back pointer to outer >> query. > > Thanks for your comment! > > I'm wondering if we can avoid this problem by saving one outer level > QueryDesc in addition to the current one. > I'm going to try it. I have updated the patch in this way. In this patch, getting the plan to the DO statement is as follows. --------------------------------- (pid:76608)=# DO $$ BEGIN PERFORM pg_sleep(15); END$$; (pid:74482)=# SELECT pg_log_current_query_plan(76608); LOG: 00000: plan of the query running on backend with PID 76608 is: Query Text: SELECT pg_sleep(15) Result (cost=0.00..0.01 rows=1 width=4) Output: pg_sleep('15'::double precision) -- pid:76608 finished DO statement: (pid:74482)=# SELECT pg_log_current_query_plan(76608); LOG: 00000: backend with PID 76608 is not running a query --------------------------------- Any thoughts? -- Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_2cfd427cf82deb39850fe07d13fd51fc Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v7-0001-log-running-query-plan.patch Content-Disposition: attachment; filename=v7-0001-log-running-query-plan.patch; size=22595 RnJvbSA3NGI2Y2RkNzBkZTJjNmVkMGY0YzgzNzBhZjg5MjU4NGFkOWQ5YTRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFR1ZSwgMTAgQXVnIDIwMjEgMTU6Mzg6NTcgKzA5MDAKClN1YmplY3Q6 IFtQQVRDSCB2N10gQWRkIGZ1bmN0aW9uIHRvIGxvZyB0aGUgdW50cnVuY2F0ZWQgcXVlcnkgc3Ry aW5nIGFuZCBpdHMKIHBsYW4gZm9yIHRoZSBxdWVyeSBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUg YmFja2VuZCB3aXRoIHRoZSBzcGVjaWZpZWQKIHByb2Nlc3MgSUQuCgpDdXJyZW50bHksIHdlIGhh dmUgdG8gd2FpdCBmb3IgdGhlIHF1ZXJ5IGV4ZWN1dGlvbiB0byBmaW5pc2gKYmVmb3JlIHdlIGNo ZWNrIGl0cyBwbGFuLiBUaGlzIGlzIG5vdCBzbyBjb252ZW5pZW50IHdoZW4KaW52ZXN0aWdhdGlu ZyBsb25nLXJ1bm5pbmcgcXVlcmllcyBvbiBwcm9kdWN0aW9uIGVudmlyb25tZW50cwp3aGVyZSB3 ZSBjYW5ub3QgdXNlIGRlYnVnZ2Vycy4KVG8gaW1wcm92ZSB0aGlzIHNpdHVhdGlvbiwgdGhpcyBw YXRjaCBhZGRzCnBnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW4oKSBmdW5jdGlvbiB0aGF0IHJlcXVl c3RzIHRvIGxvZyB0aGUKcGxhbiBvZiB0aGUgc3BlY2lmaWVkIGJhY2tlbmQgcHJvY2Vzcy4KCk9u bHkgc3VwZXJ1c2VycyBhcmUgYWxsb3dlZCB0byByZXF1ZXN0IHRvIGxvZyB0aGUgcGxhbnMgYmVj YXVzZQphbGxvd2luZyBhbnkgdXNlcnMgdG8gaXNzdWUgdGhpcyByZXF1ZXN0IGF0IGFuIHVuYm91 bmRlZCByYXRlCndvdWxkIGNhdXNlIGxvdHMgb2YgbG9nIG1lc3NhZ2VzIGFuZCB3aGljaCBjYW4g bGVhZCB0byBkZW5pYWwKb2Ygc2VydmljZS4KCk9uIHJlY2VpcHQgb2YgdGhlIHJlcXVlc3QsIGF0 IHRoZSBuZXh0IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCksCnRoZSB0YXJnZXQgYmFja2VuZCBsb2dz IGl0cyBwbGFuIGF0IExPR19TRVJWRVJfT05MWSBsZXZlbCwgc28KdGhhdCB0aGVzZSBwbGFucyB3 aWxsIGFwcGVhciBpbiB0aGUgc2VydmVyIGxvZyBidXQgbm90IGJlIHNlbnQKdG8gdGhlIGNsaWVu dC4KClNpbmNlIHNvbWUgY29kZXMsIHRlc3RzIGFuZCBjb21tZW50cyBvZgpwZ19sb2dfY3VycmVu dF9xdWVyeV9wbGFuKCkgYXJlIHRoZSBzYW1lIHdpdGgKcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2Nv bnRleHRzKCksIHRoaXMgcGF0Y2ggYWxzbyByZWZhY3RvcnMKdGhlbSB0byBtYWtlIHRoZW0gY29t bW9uLgoKUmV2aWV3ZWQtYnk6IEJoYXJhdGggUnVwaXJlZGR5LCBGdWppaSBNYXNhbywgRGlsaXAg S3VtYXIsIE1hc2FoaXJvIElrZWRhCi0tLQogZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCAgICAgICAg ICAgICAgICAgICAgICAgfCA0NiArKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhw bGFpbi5jICAgICAgICAgICAgICAgfCA4MyArKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgfCAxMCArKysKIHNyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAgIHwgIDQgKwogc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvc2lnbmFsZnVuY3MuYyAgICAgICAgfCA2MSArKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgfCAgNyArKwogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jICAgICAgICAgICAgfCA1NCArKy0tLS0tLS0tLS0tCiBz cmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyAgICAgICAgICAgICB8ICAxICsKIHNyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgIHwgIDYgKysKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL2V4cGxhaW4uaCAgICAgICAgICAgICAgIHwgIDIgKwogc3JjL2luY2x1ZGUv bWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBzcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NzaWduYWwuaCAgICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uv c2lnbmFsZnVuY3MuaCAgICAgICAgICAgIHwgMjIgKysrKysrCiBzcmMvaW5jbHVkZS90Y29wL3Bx dWVyeS5oICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvbWlzY19mdW5jdGlvbnMub3V0IHwgMTYgKysrLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlz Y19mdW5jdGlvbnMuc3FsICAgICAgfCAxMiArLS0KIDE2IGZpbGVzIGNoYW5nZWQsIDI3MCBpbnNl cnRpb25zKCspLCA1NyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVk ZS9zdG9yYWdlL3NpZ25hbGZ1bmNzLmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy5z Z21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA3ODgxMmIyZGJlLi4xM2I0NGI0MmNi IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9m dW5jLnNnbWwKQEAgLTI1MjgxLDYgKzI1MjgxLDI3IEBAIFNFTEVDVCBjb2xsYXRpb24gZm9yICgn Zm9vJyBDT0xMQVRFICJkZV9ERSIpOwogICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICAgPC9y b3c+CiAKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnki PjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAg ICAgIDxwcmltYXJ5PnBnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW48L3ByaW1hcnk+CisgICAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfbG9nX2N1cnJlbnRfcXVlcnlfcGxh bjwvZnVuY3Rpb24+ICggPHBhcmFtZXRlcj5waWQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwv dHlwZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+CisgICAg ICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXF1ZXN0cyB0byBsb2cgdGhlIHBs YW4gb2YgdGhlIHF1ZXJ5IGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZQorICAgICAgICBiYWNrZW5k IHdpdGggc3BlY2lmaWVkIHByb2Nlc3MgSUQgYWxvbmcgd2l0aCB0aGUgdW50cnVuY2F0ZWQKKyAg ICAgICAgcXVlcnkgc3RyaW5nLgorICAgICAgICBUaGV5IHdpbGwgYmUgbG9nZ2VkIGF0IDxsaXRl cmFsPkxPRzwvbGl0ZXJhbD4gbWVzc2FnZSBsZXZlbCBhbmQKKyAgICAgICAgd2lsbCBhcHBlYXIg aW4gdGhlIHNlcnZlciBsb2cgYmFzZWQgb24gdGhlIGxvZworICAgICAgICBjb25maWd1cmF0aW9u IHNldCAoU2VlIDx4cmVmIGxpbmtlbmQ9InJ1bnRpbWUtY29uZmlnLWxvZ2dpbmciLz4KKyAgICAg ICAgZm9yIG1vcmUgaW5mb3JtYXRpb24pLCBidXQgd2lsbCBub3QgYmUgc2VudCB0byB0aGUgY2xp ZW50CisgICAgICAgIHJlZ2FyZGxlc3Mgb2YgPHhyZWYgbGlua2VuZD0iZ3VjLWNsaWVudC1taW4t bWVzc2FnZXMiLz4uCisgICAgICAgIE9ubHkgc3VwZXJ1c2VycyBjYW4gcmVxdWVzdCB0byBsb2cg cGxhbiBvZiB0aGUgcnVubmluZyBxdWVyeS4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAg IDwvcm93PgorCiAgICAgICA8cm93PgogICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2Vu dHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CiAgICAgICAgIDxpbmRleHRlcm0+CkBA IC0yNTM5NCw2ICsyNTQxNSwzMSBAQCBMT0c6ICBHcmFuZCB0b3RhbDogMTY1MTkyMCBieXRlcyBp biAyMDEgYmxvY2tzOyA2MjIzNjAgZnJlZSAoODggY2h1bmtzKTsgMTAyOTU2MAogICAgIGJlY2F1 c2UgaXQgbWF5IGdlbmVyYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIGxvZyBtZXNzYWdlcy4KICAgIDwv cGFyYT4KIAorICAgPHBhcmE+CisgICAgPGZ1bmN0aW9uPnBnX2xvZ19jdXJyZW50X3F1ZXJ5X3Bs YW48L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZAorICAgIHRvIGxvZyB0aGUgcGxhbiBvZiBhIGJhY2tl bmQgcHJvY2Vzcy4gRm9yIGV4YW1wbGU6Cis8cHJvZ3JhbWxpc3Rpbmc+Citwb3N0Z3Jlcz0jIFNF TEVDVCBwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuKDIwMTExNik7CisgcGdfbG9nX2N1cnJlbnRf cXVlcnlfcGxhbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorPC9w cm9ncmFtbGlzdGluZz4KK1RoZSBmb3JtYXQgb2YgdGhlIHF1ZXJ5IHBsYW4gaXMgdGhlIHNhbWUg YXMgd2hlbiA8bGl0ZXJhbD5WRVJCT1NFPC9saXRlcmFsPiwKKzxsaXRlcmFsPkNPU1RTPC9saXRl cmFsPiwgPGxpdGVyYWw+U0VUVElOR1M8L2xpdGVyYWw+IGFuZAorPGxpdGVyYWw+Rk9STUFUIFRF WFQ8L2xpdGVyYWw+IGFyZSB1c2VkIGluIHRoZSA8Y29tbWFuZD5FWFBMQUlOPC9jb21tYW5kPgor Y29tbWFuZC4gRm9yIGV4YW1wbGU6Cis8c2NyZWVuPgorTE9HOiAgcGxhbiBvZiB0aGUgcXVlcnkg cnVubmluZyBvbiBiYWNrZW5kIHdpdGggUElEIDE3NzkzIGlzOgorICAgICAgICBRdWVyeSBUZXh0 OiBTRUxFQ1QgKiBGUk9NIHBnYmVuY2hfYWNjb3VudHM7CisgICAgICAgIFNlcSBTY2FuIG9uIHB1 YmxpYy5wZ2JlbmNoX2FjY291bnRzICAoY29zdD0wLjAwLi41Mjc4Ny4wMCByb3dzPTIwMDAwMDAg d2lkdGg9OTcpCisgICAgICAgICAgT3V0cHV0OiBhaWQsIGJpZCwgYWJhbGFuY2UsIGZpbGxlcgor ICAgICAgICBTZXR0aW5nczogd29ya19tZW0gPSAnMU1CJworPC9zY3JlZW4+CisgICAgTm90ZSB0 aGF0IG5lc3RlZCBzdGF0ZW1lbnRzIChzdGF0ZW1lbnRzIGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0 aW9uKSBhcmUgbm90CisgICAgY29uc2lkZXJlZCBmb3IgbG9nZ2luZy4gT25seSB0aGUgZGVlcGVz dCBuZXN0aW5nIHF1ZXJ5J3MgcGxhbiBpcyBsb2dnZWQuCisgICA8L3BhcmE+CisKICAgPC9zZWN0 Mj4KIAogICA8c2VjdDIgaWQ9ImZ1bmN0aW9ucy1hZG1pbi1iYWNrdXAiPgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhw bGFpbi5jCmluZGV4IDEwNjQ0ZGZhYzQuLjcxNTM4YzFiNmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWlu LmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSGFzaC5oIgogI2lu Y2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgorI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIKICNpbmNsdWRlICJu b2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKQEAgLTI4LDYg KzI5LDkgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAicmV3cml0 ZS9yZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NpZ25hbGZ1bmNzLmgi CisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAj aW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfdGFibGVzLmgi CkBAIC00OTIyLDMgKzQ5MjYsODIgQEAgZXNjYXBlX3lhbWwoU3RyaW5nSW5mbyBidWYsIGNvbnN0 IGNoYXIgKnN0cikKIHsKIAllc2NhcGVfanNvbihidWYsIHN0cik7CiB9CisKKy8qCisgKiBIYW5k bGVMb2dDdXJyZW50UGxhbkludGVycnVwdAorICoJCUhhbmRsZSByZWNlaXB0IG9mIGFuIGludGVy cnVwdCBpbmRpY2F0aW5nIGxvZ2dpbmcgdGhlIHBsYW4gb2YKKyAqCQl0aGUgY3VycmVudGx5IHJ1 bm5pbmcgcXVlcnkuCisgKgorICogQWxsIHRoZSBhY3R1YWwgd29yayBpcyBkZWZlcnJlZCB0byBQ cm9jZXNzTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQoKSwKKyAqIGJlY2F1c2Ugd2UgY2Fubm90IHNh ZmVseSBlbWl0IGEgbG9nIG1lc3NhZ2UgaW5zaWRlIHRoZSBzaWduYWwgaGFuZGxlci4KKyAqLwor dm9pZAorSGFuZGxlTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQodm9pZCkKK3sKKwlJbnRlcnJ1cHRQ ZW5kaW5nID0gdHJ1ZTsKKwlMb2dDdXJyZW50UGxhblBlbmRpbmcgPSB0cnVlOworCS8qIGxhdGNo IHdpbGwgYmUgc2V0IGJ5IHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyICovCit9CisKKy8qCisg KiBQcm9jZXNzTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQKKyAqIAkJUGVyZm9ybSBsb2dnaW5nIHRo ZSBwbGFuIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBxdWVyeSBvbiB0aGlzCisgKiAJCWJhY2tl bmQgcHJvY2Vzcy4KKyAqCisgKiBBbnkgYmFja2VuZCB0aGF0IHBhcnRpY2lwYXRlcyBpbiBQcm9j U2lnbmFsIHNpZ25hbGluZyBtdXN0IGFycmFuZ2UgdG8gY2FsbAorICogdGhpcyBmdW5jdGlvbiBp ZiB3ZSBzZWUgTG9nQ3VycmVudFBsYW5QZW5kaW5nIHNldC4KKyAqIEl0IGlzIGNhbGxlZCBmcm9t IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCksIHdoaWNoIGlzIGVub3VnaCBiZWNhdXNlIHRoZSB0YXJn ZXQKKyAqIHByb2Nlc3MgZm9yIGxvZ2dpbmcgcGxhbiBpcyBhIGJhY2tlbmQuCisgKi8KK3ZvaWQK K1Byb2Nlc3NMb2dDdXJyZW50UGxhbkludGVycnVwdCh2b2lkKQoreworCUV4cGxhaW5TdGF0ZSAq ZXM7CisJTG9nQ3VycmVudFBsYW5QZW5kaW5nID0gZmFsc2U7CisKKwlpZiAoQWN0aXZlUXVlcnlE ZXNjID09IE5VTEwpCisJeworCQllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCQkoZXJybXNn KCJiYWNrZW5kIHdpdGggUElEICVkIGlzIG5vdCBydW5uaW5nIGEgcXVlcnkiLAorCQkJCQlNeVBy b2NQaWQpKSk7CisJCXJldHVybjsKKwl9CisKKwllcyA9IE5ld0V4cGxhaW5TdGF0ZSgpOworCisJ ZXMtPmZvcm1hdCA9IEVYUExBSU5fRk9STUFUX1RFWFQ7CisJZXMtPnNldHRpbmdzID0gdHJ1ZTsK Kwllcy0+dmVyYm9zZSA9IHRydWU7CisKKwlFeHBsYWluQmVnaW5PdXRwdXQoZXMpOworCUV4cGxh aW5RdWVyeVRleHQoZXMsIEFjdGl2ZVF1ZXJ5RGVzYyk7CisJRXhwbGFpblByaW50UGxhbihlcywg QWN0aXZlUXVlcnlEZXNjKTsKKwlpZiAoZXMtPmNvc3RzKQorCQlFeHBsYWluUHJpbnRKSVRTdW1t YXJ5KGVzLCBBY3RpdmVRdWVyeURlc2MpOworCUV4cGxhaW5FbmRPdXRwdXQoZXMpOworCisJLyog UmVtb3ZlIGxhc3QgbGluZSBicmVhayAqLworCWlmIChlcy0+c3RyLT5sZW4gPiAwICYmIGVzLT5z dHItPmRhdGFbZXMtPnN0ci0+bGVuIC0gMV0gPT0gJ1xuJykKKwkJZXMtPnN0ci0+ZGF0YVstLWVz LT5zdHItPmxlbl0gPSAnXDAnOworCisJZXJlcG9ydChMT0dfU0VSVkVSX09OTFksCisJCQkoZXJy bXNnKCJwbGFuIG9mIHRoZSBxdWVyeSBydW5uaW5nIG9uIGJhY2tlbmQgd2l0aCBQSUQgJWQgaXM6 XG4lcyIsCisJCQkJCU15UHJvY1BpZCwgZXMtPnN0ci0+ZGF0YSksCisJCQkgZXJyaGlkZXN0bXQo dHJ1ZSkpKTsKK30KKworLyoKKyAqIHBnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW4KKyAqCQlTaWdu YWwgYSBiYWNrZW5kIHByb2Nlc3MgdG8gbG9nIHRoZSBxdWVyeSBwbGFuIG9mIHRoZSBydW5uaW5n IHF1ZXJ5LgorICovCitEYXR1bQorcGdfbG9nX2N1cnJlbnRfcXVlcnlfcGxhbihQR19GVU5DVElP Tl9BUkdTKQoreworCXBpZF90CQlwaWQ7CisJYm9vbAkJcmVzdWx0OworCisJcGlkID0gUEdfR0VU QVJHX0lOVDMyKDApOworCXJlc3VsdCA9IFNlbmRQcm9jU2lnbmFsRm9yTG9nSW5mbyhwaWQsIFBS T0NTSUdfTE9HX0NVUlJFTlRfUExBTik7CisKKwlQR19SRVRVUk5fQk9PTChyZXN1bHQpOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggYjNjZTRiYWU1My4uYzc0YWExZDA0ZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjTWFpbi5jCkBAIC03Niw2ICs3Niw5IEBAIEV4ZWN1dG9yRW5kX2hvb2tfdHlw ZSBFeGVjdXRvckVuZF9ob29rID0gTlVMTDsKIC8qIEhvb2sgZm9yIHBsdWdpbiB0byBnZXQgY29u dHJvbCBpbiBFeGVjQ2hlY2tSVFBlcm1zKCkgKi8KIEV4ZWN1dG9yQ2hlY2tQZXJtc19ob29rX3R5 cGUgRXhlY3V0b3JDaGVja1Blcm1zX2hvb2sgPSBOVUxMOwogCisvKiBDdXJyZW50bHkgZXhlY3V0 aW5nIHF1ZXJ5J3MgUXVlcnlEZXNjICovCitRdWVyeURlc2MgKkFjdGl2ZVF1ZXJ5RGVzYyA9IE5V TEw7CisKIC8qIGRlY2xzIGZvciBsb2NhbCByb3V0aW5lcyBvbmx5IHVzZWQgd2l0aGluIHRoaXMg bW9kdWxlICovCiBzdGF0aWMgdm9pZCBJbml0UGxhbihRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50 IGVmbGFncyk7CiBzdGF0aWMgdm9pZCBDaGVja1ZhbGlkUm93TWFya1JlbChSZWxhdGlvbiByZWws IFJvd01hcmtUeXBlIG1hcmtUeXBlKTsKQEAgLTI5OSwxMCArMzAyLDE3IEBAIEV4ZWN1dG9yUnVu KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAogCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIHVpbnQ2 NCBjb3VudCwKIAkJCWJvb2wgZXhlY3V0ZV9vbmNlKQogeworCVF1ZXJ5RGVzYyAqc2F2ZV9BY3Rp dmVRdWVyeURlc2M7CisKKwlzYXZlX0FjdGl2ZVF1ZXJ5RGVzYyA9IEFjdGl2ZVF1ZXJ5RGVzYzsK KwlBY3RpdmVRdWVyeURlc2MgPSBxdWVyeURlc2M7CisKIAlpZiAoRXhlY3V0b3JSdW5faG9vaykK IAkJKCpFeGVjdXRvclJ1bl9ob29rKSAocXVlcnlEZXNjLCBkaXJlY3Rpb24sIGNvdW50LCBleGVj dXRlX29uY2UpOwogCWVsc2UKIAkJc3RhbmRhcmRfRXhlY3V0b3JSdW4ocXVlcnlEZXNjLCBkaXJl Y3Rpb24sIGNvdW50LCBleGVjdXRlX29uY2UpOworCisJQWN0aXZlUXVlcnlEZXNjID0gc2F2ZV9B Y3RpdmVRdWVyeURlc2M7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwu YwppbmRleCBkZWZiNzVhYTI2Li45Yjk2NTM1NDRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJv Y3NpZ25hbC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgi CiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5j LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHNlbmRlci5o IgpAQCAtNjYxLDYgKzY2Miw5IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9B UkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQpKQog CQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2ln bmFsKFBST0NTSUdfTE9HX0NVUlJFTlRfUExBTikpCisJCUhhbmRsZUxvZ0N1cnJlbnRQbGFuSW50 ZXJydXB0KCk7CisKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfREFUQUJBU0UpKQogCQlSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZF UllfQ09ORkxJQ1RfREFUQUJBU0UpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9zaWduYWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2lnbmFsZnVuY3Mu YwppbmRleCBkZTY5ZDYwZTc5Li4xYWFkMTIwNzkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9zaWduYWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Np Z25hbGZ1bmNzLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Btc2lnbmFs LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJy YXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NpZ25hbGZ1bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMv YWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKIApAQCAtMjk4LDMgKzI5OSw2MyBA QCBwZ19yb3RhdGVfbG9nZmlsZV92MihQR19GVU5DVElPTl9BUkdTKQogCVNlbmRQb3N0bWFzdGVy U2lnbmFsKFBNU0lHTkFMX1JPVEFURV9MT0dGSUxFKTsKIAlQR19SRVRVUk5fQk9PTCh0cnVlKTsK IH0KKworLyoKKyAqIFNpZ25hbCBhIGJhY2tlbmQgcHJvY2VzcyB0byBsb2cgaXRzIGluZm9ybWF0 aW9uLgorICoKKyAqIE9ubHkgc3VwZXJ1c2VycyBhcmUgYWxsb3dlZCB0byBzaWduYWwgdG8gbG9n IGluZm9ybWF0aW9uIGJlY2F1c2UKKyAqIGFsbG93aW5nIGFueSB1c2VycyB0byBpc3N1ZSB0aGlz IHJlcXVlc3QgYXQgYW4gdW5ib3VuZGVkIHJhdGUKKyAqIHdvdWxkIGNhdXNlIGxvdHMgb2YgbG9n IG1lc3NhZ2VzIGFuZCB3aGljaCBjYW4gbGVhZCB0byBkZW5pYWwgb2YKKyAqIHNlcnZpY2UuCisg KgorICogT24gcmVjZWlwdCBvZiB0aGlzIHNpZ25hbCwgYSBiYWNrZW5kIHNldHMgdGhlIGZsYWcg aW4gdGhlIHNpZ25hbAorICogaGFuZGxlciwgd2hpY2ggY2F1c2VzIHRoZSBuZXh0IENIRUNLX0ZP Ul9JTlRFUlJVUFRTKCkgdG8gbG9nIHRoZQorICogaW5mb3JtYXRpb24uCisgKi8KK2Jvb2wKK1Nl bmRQcm9jU2lnbmFsRm9yTG9nSW5mbyhwaWRfdCBwaWQsIFByb2NTaWduYWxSZWFzb24gcmVhc29u KQoreworCVBHUFJPQwkgICAqcHJvYzsKKworCUFzc2VydChyZWFzb24gPT0gUFJPQ1NJR19MT0df TUVNT1JZX0NPTlRFWFQgfHwKKwkJICAgcmVhc29uID09IFBST0NTSUdfTE9HX0NVUlJFTlRfUExB Tik7CisKKwkvKiBPbmx5IGFsbG93IHN1cGVydXNlcnMgdG8gbG9nIGluZm9ybWF0aW9uLiAqLwor CWlmICghc3VwZXJ1c2VyKCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkgZXJybXNnKCJtdXN0IGJlIGEgc3VwZXJ1 c2VyIHRvIGxvZyBpbmZvcm1hdGlvbiBhYm91dCBzcGVjaWZpZWQgcHJvY2VzcyIpKSk7CisKKwlw cm9jID0gQmFja2VuZFBpZEdldFByb2MocGlkKTsKKworCS8qCisJICogQmFja2VuZFBpZEdldFBy b2MgcmV0dXJucyBOVUxMIGlmIHRoZSBwaWQgaXNuJ3QgdmFsaWQ7IGJ1dCBieSB0aGUgdGltZQor CSAqIHdlIHJlYWNoIGtpbGwoKSwgYSBwcm9jZXNzIGZvciB3aGljaCB3ZSBnZXQgYSB2YWxpZCBw cm9jIGhlcmUgbWlnaHQKKwkgKiBoYXZlIHRlcm1pbmF0ZWQgb24gaXRzIG93bi4gIFRoZXJlJ3Mg bm8gd2F5IHRvIGFjcXVpcmUgYSBsb2NrIG9uIGFuCisJICogYXJiaXRyYXJ5IHByb2Nlc3MgdG8g cHJldmVudCB0aGF0LiBCdXQgc2luY2UgdGhpcyBtZWNoYW5pc20gaXMgdXN1YWxseQorCSAqIHVz ZWQgdG8gYmVsb3cgcHVycG9zZXMsIGl0IG1pZ2h0IGVuZCBpdHMgb3duIGZpcnN0IGFuZCB0aGUg aW5mb3JtYXRpb24KKwkgKiBpcyBub3QgbG9nZ2VkIGlzIG5vdCBhIHByb2JsZW0uCisJICogLSBk ZWJ1ZyBhIGJhY2tlbmQgcnVubmluZyBhbmQgY29uc3VtaW5nIGxvdHMgb2YgbWVtb3J5CisJICog LSBsb29rIGludG8gdGhlIHBsYW4gb2YgdGhlIGxvbmcgcnVubmluZyBxdWVyeQorCSAqLworCWlm IChwcm9jID09IE5VTEwpCisJeworCQkvKgorCQkgKiBUaGlzIGlzIGp1c3QgYSB3YXJuaW5nIHNv IGEgbG9vcC10aHJvdWdoLXJlc3VsdHNldCB3aWxsIG5vdCBhYm9ydAorCQkgKiBpZiBvbmUgYmFj a2VuZCB0ZXJtaW5hdGVkIG9uIGl0cyBvd24gZHVyaW5nIHRoZSBydW4uCisJCSAqLworCQllcmVw b3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygiUElEICVkIGlzIG5vdCBhIFBvc3RncmVTUUwgc2Vy dmVyIHByb2Nlc3MiLCBwaWQpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoU2VuZFBy b2NTaWduYWwocGlkLCByZWFzb24sIHByb2MtPmJhY2tlbmRJZCkgPCAwKQorCXsKKwkJLyogQWdh aW4sIGp1c3QgYSB3YXJuaW5nIHRvIGFsbG93IGxvb3BzICovCisJCWVyZXBvcnQoV0FSTklORywK KwkJCQkoZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBzaWduYWwgdG8gcHJvY2VzcyAlZDogJW0iLCBw aWQpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYwppbmRleCA1OGI1OTYwZTI3Li44Yjg4MDhkYjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC00 MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1ZGUgImNvbW1h bmRzL2V4cGxhaW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgpAQCAtMzM2Niw2ICszMzY3LDkg QEAgUHJvY2Vzc0ludGVycnVwdHModm9pZCkKIAogCWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGlu ZykKIAkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKKworCWlmIChMb2dDdXJy ZW50UGxhblBlbmRpbmcpCisJCVByb2Nlc3NMb2dDdXJyZW50UGxhbkludGVycnVwdCgpOwogfQog CiAKQEAgLTQyNzgsNiArNDI4Miw5IEBAIFBvc3RncmVzTWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdLAogCQkvKiBXZSBkb24ndCBoYXZlIGEgdHJhbnNhY3Rpb24gY29tbWFuZCBvcGVuIGFueW1v cmUgKi8KIAkJeGFjdF9zdGFydGVkID0gZmFsc2U7CiAKKwkJLyogV2UgaGF2ZSBubyBydW5uaW5n IHF1ZXJ5ICovCisJCUFjdGl2ZVF1ZXJ5RGVzYyA9IE5VTEw7CisKIAkJLyoKIAkJICogSWYgYW4g ZXJyb3Igb2NjdXJyZWQgd2hpbGUgd2Ugd2VyZSByZWFkaW5nIGEgbWVzc2FnZSBmcm9tIHRoZQog CQkgKiBjbGllbnQsIHdlIGhhdmUgcG90ZW50aWFsbHkgbG9zdCB0cmFjayBvZiB3aGVyZSB0aGUg cHJldmlvdXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwppbmRleCAwZDUyNjEzYmMzLi4zMDRm MzZiZGEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jCkBAIC0xOCw4ICsxOCw4IEBACiAj aW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm1i L3BnX3djaGFyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NpZ25hbGZ1bmNzLmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKIAogLyogLS0tLS0tLS0tLQpAQCAtMTYxLDU3ICsxNjEsMTUg QEAgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAvKgog ICogcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzCiAgKgkJU2lnbmFsIGEgYmFja2VuZCBw cm9jZXNzIHRvIGxvZyBpdHMgbWVtb3J5IGNvbnRleHRzLgotICoKLSAqIE9ubHkgc3VwZXJ1c2Vy cyBhcmUgYWxsb3dlZCB0byBzaWduYWwgdG8gbG9nIHRoZSBtZW1vcnkgY29udGV4dHMKLSAqIGJl Y2F1c2UgYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMgcmVxdWVzdCBhdCBhbiB1bmJv dW5kZWQKLSAqIHJhdGUgd291bGQgY2F1c2UgbG90cyBvZiBsb2cgbWVzc2FnZXMgYW5kIHdoaWNo IGNhbiBsZWFkIHRvCi0gKiBkZW5pYWwgb2Ygc2VydmljZS4KLSAqCi0gKiBPbiByZWNlaXB0IG9m IHRoaXMgc2lnbmFsLCBhIGJhY2tlbmQgc2V0cyB0aGUgZmxhZyBpbiB0aGUgc2lnbmFsCi0gKiBo YW5kbGVyLCB3aGljaCBjYXVzZXMgdGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSB0byBs b2cgdGhlCi0gKiBtZW1vcnkgY29udGV4dHMuCiAgKi8KIERhdHVtCiBwZ19sb2dfYmFja2VuZF9t ZW1vcnlfY29udGV4dHMoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlpbnQJCQlwaWQgPSBQR19HRVRB UkdfSU5UMzIoMCk7Ci0JUEdQUk9DCSAgICpwcm9jOwotCi0JLyogT25seSBhbGxvdyBzdXBlcnVz ZXJzIHRvIGxvZyBtZW1vcnkgY29udGV4dHMuICovCi0JaWYgKCFzdXBlcnVzZXIoKSkKLQkJZXJl cG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0Up LAotCQkJCSBlcnJtc2coIm11c3QgYmUgYSBzdXBlcnVzZXIgdG8gbG9nIG1lbW9yeSBjb250ZXh0 cyIpKSk7Ci0KLQlwcm9jID0gQmFja2VuZFBpZEdldFByb2MocGlkKTsKLQotCS8qCi0JICogQmFj a2VuZFBpZEdldFByb2MgcmV0dXJucyBOVUxMIGlmIHRoZSBwaWQgaXNuJ3QgdmFsaWQ7IGJ1dCBi eSB0aGUgdGltZQotCSAqIHdlIHJlYWNoIGtpbGwoKSwgYSBwcm9jZXNzIGZvciB3aGljaCB3ZSBn ZXQgYSB2YWxpZCBwcm9jIGhlcmUgbWlnaHQKLQkgKiBoYXZlIHRlcm1pbmF0ZWQgb24gaXRzIG93 bi4gIFRoZXJlJ3Mgbm8gd2F5IHRvIGFjcXVpcmUgYSBsb2NrIG9uIGFuCi0JICogYXJiaXRyYXJ5 IHByb2Nlc3MgdG8gcHJldmVudCB0aGF0LiBCdXQgc2luY2UgdGhpcyBtZWNoYW5pc20gaXMgdXN1 YWxseQotCSAqIHVzZWQgdG8gZGVidWcgYSBiYWNrZW5kIHJ1bm5pbmcgYW5kIGNvbnN1bWluZyBs b3RzIG9mIG1lbW9yeSwgdGhhdCBpdAotCSAqIG1pZ2h0IGVuZCBvbiBpdHMgb3duIGZpcnN0IGFu ZCBpdHMgbWVtb3J5IGNvbnRleHRzIGFyZSBub3QgbG9nZ2VkIGlzCi0JICogbm90IGEgcHJvYmxl bS4KLQkgKi8KLQlpZiAocHJvYyA9PSBOVUxMKQotCXsKLQkJLyoKLQkJICogVGhpcyBpcyBqdXN0 IGEgd2FybmluZyBzbyBhIGxvb3AtdGhyb3VnaC1yZXN1bHRzZXQgd2lsbCBub3QgYWJvcnQKLQkJ ICogaWYgb25lIGJhY2tlbmQgdGVybWluYXRlZCBvbiBpdHMgb3duIGR1cmluZyB0aGUgcnVuLgot CQkgKi8KLQkJZXJlcG9ydChXQVJOSU5HLAotCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQ b3N0Z3JlU1FMIHNlcnZlciBwcm9jZXNzIiwgcGlkKSkpOwotCQlQR19SRVRVUk5fQk9PTChmYWxz ZSk7Ci0JfQorCXBpZF90CQlwaWQ7CisJYm9vbAkJcmVzdWx0OwogCi0JaWYgKFNlbmRQcm9jU2ln bmFsKHBpZCwgUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIHByb2MtPmJhY2tlbmRJZCkgPCAw KQotCXsKLQkJLyogQWdhaW4sIGp1c3QgYSB3YXJuaW5nIHRvIGFsbG93IGxvb3BzICovCi0JCWVy ZXBvcnQoV0FSTklORywKLQkJCQkoZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBzaWduYWwgdG8gcHJv Y2VzcyAlZDogJW0iLCBwaWQpKSk7Ci0JCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKLQl9CisJcGlk ID0gUEdfR0VUQVJHX0lOVDMyKDApOworCXJlc3VsdCA9IFNlbmRQcm9jU2lnbmFsRm9yTG9nSW5m byhwaWQsIFBST0NTSUdfTE9HX01FTU9SWV9DT05URVhUKTsKIAotCVBHX1JFVFVSTl9CT09MKHRy dWUpOworCVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5j CmluZGV4IDM4MWQ5ZTU0OGQuLjEyNmVkMTAzNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5j CkBAIC0zNiw2ICszNiw3IEBAIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5UcmFuc2FjdGlv blNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IElk bGVTZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQ cm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBM b2dNZW1vcnlDb250ZXh0UGVuZGluZyA9IGZhbHNlOwordm9sYXRpbGUgc2lnX2F0b21pY190IExv Z0N1cnJlbnRQbGFuUGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgdWludDMyIEludGVycnVwdEhv bGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgUXVlcnlDYW5jZWxIb2xkb2ZmQ291bnQg PSAwOwogdm9sYXRpbGUgdWludDMyIENyaXRTZWN0aW9uQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKaW5kZXggYjYwMzcwMGVkOS4uMDMyMTcyNjIyNyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CkBAIC04MDM4LDYgKzgwMzgsMTIgQEAKICAgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHBy b2FyZ3R5cGVzID0+ICdpbnQ0JywKICAgcHJvc3JjID0+ICdwZ19sb2dfYmFja2VuZF9tZW1vcnlf Y29udGV4dHMnIH0sCiAKKyMgbG9nZ2luZyBwbGFuIG9mIHRoZSBydW5uaW5nIHF1ZXJ5IG9uIHRo ZSBzcGVjaWZpZWQgYmFja2VuZAoreyBvaWQgPT4gJzQ1NDQnLCBkZXNjciA9PiAnbG9nIHBsYW4g b2YgdGhlIHJ1bm5pbmcgcXVlcnkgb24gdGhlIHNwZWNpZmllZCBiYWNrZW5kJywKKyAgcHJvbmFt ZSA9PiAncGdfbG9nX2N1cnJlbnRfcXVlcnlfcGxhbicsCisgIHByb3ZvbGF0aWxlID0+ICd2Jywg cHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnQ0JywgcHJvc3JjID0+ ICdwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuJyB9LAorCiAjIG5vbi1wZXJzaXN0ZW50IHNlcmll cyBnZW5lcmF0b3IKIHsgb2lkID0+ICcxMDY2JywgZGVzY3IgPT4gJ25vbi1wZXJzaXN0ZW50IHNl cmllcyBnZW5lcmF0b3InLAogICBwcm9uYW1lID0+ICdnZW5lcmF0ZV9zZXJpZXMnLCBwcm9yb3dz ID0+ICcxMDAwJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCBlOTRkOWU0OWNmLi5mYTgxYmVi NTUzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC0xMjQsNCArMTI0LDYgQEAgZXh0ZXJuIHZv aWQgRXhwbGFpbk9wZW5Hcm91cChjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpsYWJl bG5hbWUsCiBleHRlcm4gdm9pZCBFeHBsYWluQ2xvc2VHcm91cChjb25zdCBjaGFyICpvYmp0eXBl LCBjb25zdCBjaGFyICpsYWJlbG5hbWUsCiAJCQkJCQkJICBib29sIGxhYmVsZWQsIEV4cGxhaW5T dGF0ZSAqZXMpOwogCitleHRlcm4gdm9pZCBIYW5kbGVMb2dDdXJyZW50UGxhbkludGVycnVwdCh2 b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NMb2dDdXJyZW50UGxhbkludGVycnVwdCh2b2lkKTsK ICNlbmRpZgkJCQkJCQkvKiBFWFBMQUlOX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21p c2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggMmUyZTlhMzY0YS4uMDk3 ZWJhYTk2ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmgKQEAgLTk0LDYgKzk0LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGlu ZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Npb25U aW1lb3V0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3Qg UHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZzsKK2V4dGVybiBQR0RMTElNUE9SVCB2 b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nQ3VycmVudFBsYW5QZW5kaW5nOwogCiBleHRlcm4gUEdE TExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENoZWNrQ2xpZW50Q29ubmVjdGlvblBlbmRp bmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5l Y3Rpb25Mb3N0OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCBlZWMxODZiZTJlLi5jMWE3 MjE4ZDY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaApAQCAtMzUsNiArMzUsNyBAQCB0eXBl ZGVmIGVudW0KIAlQUk9DU0lHX1dBTFNORF9JTklUX1NUT1BQSU5HLAkvKiBhc2sgd2Fsc2VuZGVy cyB0byBwcmVwYXJlIGZvciBzaHV0ZG93biAgKi8KIAlQUk9DU0lHX0JBUlJJRVIsCQkJLyogZ2xv YmFsIGJhcnJpZXIgaW50ZXJydXB0ICAqLwogCVBST0NTSUdfTE9HX01FTU9SWV9DT05URVhULCAv KiBhc2sgYmFja2VuZCB0byBsb2cgdGhlIG1lbW9yeSBjb250ZXh0cyAqLworCVBST0NTSUdfTE9H X0NVUlJFTlRfUExBTiwgLyogYXNrIGJhY2tlbmQgdG8gbG9nIHBsYW4gb2YgdGhlIGN1cnJlbnQg cXVlcnkgKi8KIAogCS8qIFJlY292ZXJ5IGNvbmZsaWN0IHJlYXNvbnMgKi8KIAlQUk9DU0lHX1JF Q09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zaWduYWxmdW5jcy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaWduYWxmdW5jcy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjVmNmIxMjQzNzIKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NpZ25hbGZ1bmNzLmgKQEAgLTAsMCArMSwyMiBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogc2lnbmFsZnVuY3MuaAorICoJICBGdW5jdGlv bnMgZm9yIHNpZ25hbGluZyBiYWNrZW5kcworICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvc3RvcmFnZS9zaWduYWxmdW5jcy5oCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUFJPQ1NJR05BTEZVTkNfSAorI2RlZmlu ZSBQUk9DU0lHTkFMRlVOQ19ICisKKy8qCisgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4g c2lnbmFsZnVuY3MuYworICovCitleHRlcm4gYm9vbCBTZW5kUHJvY1NpZ25hbEZvckxvZ0luZm8o cGlkX3QgcGlkLCBQcm9jU2lnbmFsUmVhc29uIHJlYXNvbik7CisKKyNlbmRpZgkJCQkJCQkvKiBQ Uk9DU0lHTkFMRlVOQ19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5o IGIvc3JjL2luY2x1ZGUvdGNvcC9wcXVlcnkuaAppbmRleCAyMzE4ZjA0ZmYwLi5kMzdhNWViODM3 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oCisrKyBiL3NyYy9pbmNsdWRl L3Rjb3AvcHF1ZXJ5LmgKQEAgLTIxLDYgKzIxLDcgQEAgc3RydWN0IFBsYW5uZWRTdG10OwkJCQkv KiBhdm9pZCBpbmNsdWRpbmcgcGxhbm5vZGVzLmggaGVyZSAqLwogCiAKIGV4dGVybiBQR0RMTElN UE9SVCBQb3J0YWwgQWN0aXZlUG9ydGFsOworZXh0ZXJuIFBHRExMSU1QT1JUIFF1ZXJ5RGVzYyAq QWN0aXZlUXVlcnlEZXNjOwogCiAKIGV4dGVybiBQb3J0YWxTdHJhdGVneSBDaG9vc2VQb3J0YWxT dHJhdGVneShMaXN0ICpzdG10cyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL21pc2NfZnVuY3Rpb25zLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19m dW5jdGlvbnMub3V0CmluZGV4IGU4NDUwNDJkMzguLjk4MDE3ZjgzYTkgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CkBAIC0xMzQsMTggKzEzNCwyNiBA QCBMSU5FIDE6IFNFTEVDVCBudW1fbnVsbHMoKTsKICAgICAgICAgICAgICAgIF4KIEhJTlQ6ICBO byBmdW5jdGlvbiBtYXRjaGVzIHRoZSBnaXZlbiBuYW1lIGFuZCBhcmd1bWVudCB0eXBlcy4gWW91 IG1pZ2h0IG5lZWQgdG8gYWRkIGV4cGxpY2l0IHR5cGUgY2FzdHMuCiAtLQotLS0gcGdfbG9nX2Jh Y2tlbmRfbWVtb3J5X2NvbnRleHRzKCkKKy0tIFRlc3QgbG9nZ2luZyBmdW5jdGlvbnMKIC0tCi0t LSBNZW1vcnkgY29udGV4dHMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUgbm90IHJldHVybmVkIHRv IHRoZSBmdW5jdGlvbi4KLS0tIEZ1cnRoZXJtb3JlLCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBk ZXBlbmRpbmcgb24gdGhlIHRpbWluZy4gSG93ZXZlciwKKy0tIFRoZXNlIGZ1bmN0aW9ucyByZXR1 cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGJhY2tlbmQgaXMgc3VjY2Vzc2Z1bGx5CistLSBzaWdu YWxlZCwgb3RoZXJ3aXNlIGZhbHNlLiBVcG9uIHJlY2VpdmluZyB0aGUgc2lnbmFsLCB0aGUgYmFj a2VuZAorLS0gd2lsbCBsb2cgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBzZXJ2ZXIgbG9nLgorLS0g QWx0aG91Z2ggdGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB0aW1pbmcs CiAtLSB3ZSBjYW4gYXQgbGVhc3QgdmVyaWZ5IHRoYXQgdGhlIGNvZGUgZG9lc24ndCBmYWlsLgog LS0KLVNFTEVDVCAqIEZST00gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKHBnX2JhY2tl bmRfcGlkKCkpOworU0VMRUNUIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNr ZW5kX3BpZCgpKTsKICBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgCiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHQKICgxIHJvdykKIAorU0VMRUNUIHBnX2xvZ19jdXJy ZW50X3F1ZXJ5X3BsYW4ocGdfYmFja2VuZF9waWQoKSk7CisgcGdfbG9nX2N1cnJlbnRfcXVlcnlf cGxhbiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKwogLS0KIC0t IFRlc3Qgc29tZSBidWlsdC1pbiBTUkZzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5j dGlvbnMuc3FsCmluZGV4IGEzOTgzNDlhZmMuLjk3OWE0MThlOGUgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwKQEAgLTI5LDE1ICsyOSwxNyBAQCBTRUxFQ1QgbnVtX251 bGxzKFZBUklBRElDICd7fSc6OmludFtdKTsKIC0tIHNob3VsZCBmYWlsLCBvbmUgb3IgbW9yZSBh cmd1bWVudHMgaXMgcmVxdWlyZWQKIFNFTEVDVCBudW1fbm9ubnVsbHMoKTsKIFNFTEVDVCBudW1f bnVsbHMoKTsKLQogLS0KLS0tIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpCistLSBU ZXN0IGxvZ2dpbmcgZnVuY3Rpb25zCiAtLQotLS0gTWVtb3J5IGNvbnRleHRzIGFyZSBsb2dnZWQg YW5kIHRoZXkgYXJlIG5vdCByZXR1cm5lZCB0byB0aGUgZnVuY3Rpb24uCi0tLSBGdXJ0aGVybW9y ZSwgdGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB0aW1pbmcuIEhvd2V2 ZXIsCistLSBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRydWUgaWYgdGhlIHNwZWNpZmllZCBiYWNr ZW5kIGlzIHN1Y2Nlc3NmdWxseQorLS0gc2lnbmFsZWQsIG90aGVyd2lzZSBmYWxzZS4gVXBvbiBy ZWNlaXZpbmcgdGhlIHNpZ25hbCwgdGhlIGJhY2tlbmQKKy0tIHdpbGwgbG9nIHRoZSBpbmZvcm1h dGlvbiB0byB0aGUgc2VydmVyIGxvZy4KKy0tIEFsdGhvdWdoIHRoZWlyIGNvbnRlbnRzIGNhbiB2 YXJ5IGRlcGVuZGluZyBvbiB0aGUgdGltaW5nLAogLS0gd2UgY2FuIGF0IGxlYXN0IHZlcmlmeSB0 aGF0IHRoZSBjb2RlIGRvZXNuJ3QgZmFpbC4KIC0tCi1TRUxFQ1QgKiBGUk9NIHBnX2xvZ19iYWNr ZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpKTsKK1NFTEVDVCBwZ19sb2dfYmFj a2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7CitTRUxFQ1QgcGdfbG9nX2N1 cnJlbnRfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsKIAogLS0KIC0tIFRlc3Qgc29tZSBi dWlsdC1pbiBTUkZzCgpiYXNlLWNvbW1pdDogMTUyYzJlMGFlMWE4ZDBlZDgxMGIyZTgzM2I1MzZl NjRiOTFkYTBhNgotLSAKMi4yNy4wCgo= --=_2cfd427cf82deb39850fe07d13fd51fc--