Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uM4ih-001zDg-Es for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Jun 2025 12:56:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uM4if-009n1B-W5 for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Jun 2025 12:56:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uM4if-009n12-IX for pgsql-hackers@lists.postgresql.org; Mon, 02 Jun 2025 12:56:49 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uM4ia-0002No-0U for pgsql-hackers@lists.postgresql.org; Mon, 02 Jun 2025 12:56:49 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id 024DF61974; Mon, 2 Jun 2025 21:56:39 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_e533beb4d663edc3f1e5dbeb1558d3bb" Content-Transfer-Encoding: 8bit Date: Mon, 02 Jun 2025 21:56:38 +0900 From: torikoshia To: Atsushi Torikoshi , robertmhaas@gmail.com Cc: pgsql-hackers@lists.postgresql.org, samimseih@gmail.com, destrex271@gmail.com Subject: Re: RFC: Logging plan of the running query In-Reply-To: References: <2aedcb5e8120bfdee994775e660f8718@oss.nttdata.com> <174144854199.294105.9417032645816235284.pgcf@coridan.postgresql.org> <784224198089cbe3cc3825332f195475@oss.nttdata.com> <8de51267059a43f53848c69a2bd9bc3b@oss.nttdata.com> <8f99161d84373ea46fb305ad75affa28@oss.nttdata.com> <01962a4f656356fb2899a0c4ace83019@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 --=_e533beb4d663edc3f1e5dbeb1558d3bb Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2025-05-23 17:50, Atsushi Torikoshi wrote: > Thanks for the idea and the sample patch! > Agreed. I’ll go ahead and implement a new patch based on this approach. Updated the patch. Here are some notes: As with the previous patches, this one wraps not only the currently executing plan node but also recursively wraps the left, right, and child nodes' ExecProcNode with ExecProcNodeFirst. This is because modifying only the currently executing node caused significant delays in plan logging when the left, right, or child nodes took a long time to execute. I observed the situation with the following query: SELECT count(*) FROM pgbench_accounts a CROSS JOIN pgbench_accounts b; Previous patches implemented unwrappers, but this one doesn’t. This is because once the log is output, GetProcessLogQueryPlanInterruptActive() returns false, so LogQueryPlan() will no longer be called. In the sample you previously provided, the LogQueryPlan function takes a PlanState as an argument, but in this patch, it’s defined as void. I made this change under the assumption that the plan can be obtained from ActiveQueryDesc, and that PlanState is therefore unnecessary. Please let me know if I’ve misunderstood anything. Regards, -- Atsushi Torikoshi Seconded from NTT DATA GROUP CORPORATION to SRA OSS K.K. --=_e533beb4d663edc3f1e5dbeb1558d3bb Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v45-0001-Add-function-to-log-the-plan-of-the-currently-ru.patch Content-Disposition: attachment; filename=v45-0001-Add-function-to-log-the-plan-of-the-currently-ru.patch; size=39376 RnJvbSAzNDgzZGE5MjA0NDc1ZmI5ZGM3YmRkNjdkNWRiMzI1MTBiZDMyYWI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IE1vbiwgMiBKdW4gMjAyNSAyMToxMDowNiArMDkwMApTdWJqZWN0OiBb UEFUQ0ggdjQ1XSBBZGQgZnVuY3Rpb24gdG8gbG9nIHRoZSBwbGFuIG9mIHRoZSBjdXJyZW50bHkg cnVubmluZwogcXVlcnkKCkN1cnJlbnRseSwgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgcXVlcnkg ZXhlY3V0aW9uIHRvIGZpbmlzaAp0byBrbm93IGl0cyBwbGFuIGVpdGhlciB1c2luZyBFWFBMQUlO IEFOQUxZWkUgb3IgYXV0b19leHBsYWluLgpUaGlzIGlzIG5vdCBzbyBjb252ZW5pZW50LCBmb3Ig ZXhhbXBsZSB3aGVuIGludmVzdGlnYXRpbmcKbG9uZy1ydW5uaW5nIHF1ZXJpZXMgb24gcHJvZHVj dGlvbiBlbnZpcm9ubWVudHMuClRvIGltcHJvdmUgdGhpcyBzaXR1YXRpb24sIHRoaXMgcGF0Y2gg YWRkcyBwZ19sb2dfcXVlcnlfcGxhbigpCmZ1bmN0aW9uIHRoYXQgcmVxdWVzdHMgdG8gbG9nIHRo ZSBwbGFuIG9mIHRoZSBjdXJyZW50bHkKZXhlY3V0aW5nIHF1ZXJ5LgoKT24gcmVjZWlwdCBvZiB0 aGUgcmVxdWVzdCwgRXhlY1Byb2Nub2RlcyBvZiB0aGUgY3VycmVudCBwbGFuCm5vZGUgYW5kIGl0 cyBzdWJzaWRpYXJ5IG5vZGVzIGFyZSB3cmFwcGVkIHdpdGgKRXhlY1Byb2NOb2RlRmlyc3QsIHdo aWNoIGltcGxlbGVtZW50cyBsb2dnaW5nIHF1ZXJ5IHBsYW4uCldoZW4gZXhlY3V0b3IgZXhlY3V0 ZXMgdGhlIG9uZSBvZiB0aGUgd3JhcHBlZCBub2RlcywgdGhlCnF1ZXJ5IHBsYW4gaXMgbG9nZ2Vk LgoKVXBvbiByZWNlaXZpbmcgYSByZXF1ZXN0IHRvIGxvZyB0aGUgcXVlcnkgcGxhbiwgdGhlIEV4 ZWNQcm9jTm9kZQpmdW5jdGlvbnMgb2YgdGhlIGN1cnJlbnQgcGxhbiBub2RlLCBhcyB3ZWxsIGFz IGl0cyBsZWZ0LCByaWdodCwKYW5kIG90aGVyIGNoaWxkIG5vZGVzLCBhcmUgd3JhcHBlZCB3aXRo IEV4ZWNQcm9jTm9kZUZpcnN0LCB3aGljaAppbXBsZW1lbnRzIHRoZSBsb2dnaW5nIG1lY2hhbmlz bS4gV2hlbiB0aGUgZXhlY3V0b3IgaW52b2tlcyBhbnkKb2YgdGhlIHdyYXBwZWQgbm9kZXMsIHRo ZSBxdWVyeSBwbGFuIGlzIGxvZ2dlZC4KCk91ciBpbml0aWFsIGlkZWEgd2FzIHRvIHNlbmQgYSBz aWduYWwgdG8gdGhlIHRhcmdldCBiYWNrZW5kCnByb2Nlc3MsIHdoaWNoIGludm9rZXMgRVhQTEFJ TiBsb2dpYyBhdCB0aGUgbmV4dApDSEVDS19GT1JfSU5URVJSVVBUUygpIGNhbGwuIEhvd2V2ZXIs IHdlIHJlYWxpemVkIGR1cmluZwpwcm90b3R5cGluZyB0aGF0IEVYUExBSU4gaXMgY29tcGxleCBh bmQgbWF5IG5vdCBiZSBzYWZlbHkKZXhlY3V0ZWQgYXQgYXJiaXRyYXJ5IGludGVycnVwdCBwb2lu dHMuCgpCeSBkZWZhdWx0LCBvbmx5IHN1cGVydXNlcnMgYXJlIGFsbG93ZWQgdG8gcmVxdWVzdCB0 byBsb2cgdGhlCnBsYW5zIGJlY2F1c2UgYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMg cmVxdWVzdCBhdCBhbgp1bmJvdW5kZWQgcmF0ZSB3b3VsZCBjYXVzZSBsb3RzIG9mIGxvZyBtZXNz YWdlcyBhbmQgd2hpY2ggY2FuCmxlYWQgdG8gZGVuaWFsIG9mIHNlcnZpY2UuClNxdWFzaGVkIGNv bW1pdCBvZiB0aGUgZm9sbG93aW5nOgotLS0KIGNvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhw bGFpbi5jICAgICAgICAgIHwgIDI0ICstLQogZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCAgICAgICAg ICAgICAgICAgICAgICAgfCAgNTcgKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 YWN0LmMgICAgICAgICAgICB8ICAxMyArKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVu Y3Rpb25zLnNxbCAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZHluYW1pY19leHBsYWlu LmMgICAgICAgfCAxOTUgKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXhwbGFpbi5jICAgICAgICAgICAgICAgfCAgMzggKysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv bWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y01haW4uYyAgICAgICAgICAgICAgfCAgMTcgKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQ cm9jbm9kZS5jICAgICAgICAgIHwgMTIwICsrKysrKysrKysrLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvcHJvY3NpZ25hbC5jICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jICAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9n bG9iYWxzLmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCAgICAgICAgICAgICAgfCAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZHluYW1pY19l eHBsYWluLmggICAgICAgfCAgMjkgKysrCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgg ICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluX3N0YXRl LmggICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAgICAgICAgICAg ICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggICAgICAgICAg ICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdGNvcC9wcXVlcnkuaCAgICAgICAgICAgICAgICAgICAg fCAgIDEgLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQgfCAg NTcgKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwgICAgICB8 ICA0NSArKysrLQogMjMgZmlsZXMgY2hhbmdlZCwgNTczIGluc2VydGlvbnMoKyksIDU0IGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2R5bmFtaWNf ZXhwbGFpbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvY29tbWFuZHMvZHluYW1p Y19leHBsYWluLmgKCmRpZmYgLS1naXQgYS9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxh aW4uYyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCmluZGV4IDFmNGJhZGI0 OTIuLjZjNDIxN2M5ZDEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhw bGFpbi5jCisrKyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCkBAIC0xNSw2 ICsxNSw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxs ZWwuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCIKICNpbmNsdWRlICJj b21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9mb3JtYXQuaCIK ICNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCkBAIC00MDQsMjYgKzQwNSw5IEBA IGV4cGxhaW5fRXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpCiAJCQllcy0+Zm9ybWF0 ID0gYXV0b19leHBsYWluX2xvZ19mb3JtYXQ7CiAJCQllcy0+c2V0dGluZ3MgPSBhdXRvX2V4cGxh aW5fbG9nX3NldHRpbmdzOwogCi0JCQlFeHBsYWluQmVnaW5PdXRwdXQoZXMpOwotCQkJRXhwbGFp blF1ZXJ5VGV4dChlcywgcXVlcnlEZXNjKTsKLQkJCUV4cGxhaW5RdWVyeVBhcmFtZXRlcnMoZXMs IHF1ZXJ5RGVzYy0+cGFyYW1zLCBhdXRvX2V4cGxhaW5fbG9nX3BhcmFtZXRlcl9tYXhfbGVuZ3Ro KTsKLQkJCUV4cGxhaW5QcmludFBsYW4oZXMsIHF1ZXJ5RGVzYyk7Ci0JCQlpZiAoZXMtPmFuYWx5 emUgJiYgYXV0b19leHBsYWluX2xvZ190cmlnZ2VycykKLQkJCQlFeHBsYWluUHJpbnRUcmlnZ2Vy cyhlcywgcXVlcnlEZXNjKTsKLQkJCWlmIChlcy0+Y29zdHMpCi0JCQkJRXhwbGFpblByaW50SklU U3VtbWFyeShlcywgcXVlcnlEZXNjKTsKLQkJCUV4cGxhaW5FbmRPdXRwdXQoZXMpOwotCi0JCQkv KiBSZW1vdmUgbGFzdCBsaW5lIGJyZWFrICovCi0JCQlpZiAoZXMtPnN0ci0+bGVuID4gMCAmJiBl cy0+c3RyLT5kYXRhW2VzLT5zdHItPmxlbiAtIDFdID09ICdcbicpCi0JCQkJZXMtPnN0ci0+ZGF0 YVstLWVzLT5zdHItPmxlbl0gPSAnXDAnOwotCi0JCQkvKiBGaXggSlNPTiB0byBvdXRwdXQgYW4g b2JqZWN0ICovCi0JCQlpZiAoYXV0b19leHBsYWluX2xvZ19mb3JtYXQgPT0gRVhQTEFJTl9GT1JN QVRfSlNPTikKLQkJCXsKLQkJCQllcy0+c3RyLT5kYXRhWzBdID0gJ3snOwotCQkJCWVzLT5zdHIt PmRhdGFbZXMtPnN0ci0+bGVuIC0gMV0gPSAnfSc7Ci0JCQl9CisJCQlFeHBsYWluU3RyaW5nQXNz ZW1ibGUoZXMsIHF1ZXJ5RGVzYywgYXV0b19leHBsYWluX2xvZ19mb3JtYXQsCisJCQkJCQkJCSAg YXV0b19leHBsYWluX2xvZ190cmlnZ2VycywKKwkJCQkJCQkJICBhdXRvX2V4cGxhaW5fbG9nX3Bh cmFtZXRlcl9tYXhfbGVuZ3RoKTsKIAogCQkJLyoKIAkJCSAqIE5vdGU6IHdlIHJlbHkgb24gdGhl IGV4aXN0aW5nIGxvZ2dpbmcgb2YgY29udGV4dCBvcgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggYzY3Njg4Y2JmNS4uNzVh NDhhNTc0NCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvZnVuYy5zZ21sCkBAIC0yODY4NCw2ICsyODY4NCwyOSBAQCBhY2wgICAgICB8IHtwb3N0 Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30KICAgICAgICA8L3BhcmE+PC9l bnRyeT4KICAgICAgIDwvcm93PgogCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJm dW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxp bmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19sb2dfcXVlcnlfcGxhbjwvcHJpbWFyeT4K KyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5wZ19sb2dfcXVlcnlfcGxh bjwvZnVuY3Rpb24+ICggPHBhcmFtZXRlcj5waWQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwv dHlwZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+CisgICAg ICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXF1ZXN0cyB0byBsb2cgdGhlIHBs YW4gb2YgdGhlIHF1ZXJ5IGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZQorICAgICAgICBiYWNrZW5k IHdpdGggc3BlY2lmaWVkIHByb2Nlc3MgSUQuCisgICAgICAgIEl0IHdpbGwgYmUgbG9nZ2VkIGF0 IDxsaXRlcmFsPkxPRzwvbGl0ZXJhbD4gbWVzc2FnZSBsZXZlbCBhbmQKKyAgICAgICAgd2lsbCBh cHBlYXIgaW4gdGhlIHNlcnZlciBsb2cgYmFzZWQgb24gdGhlIGxvZworICAgICAgICBjb25maWd1 cmF0aW9uIHNldCAoU2VlIDx4cmVmIGxpbmtlbmQ9InJ1bnRpbWUtY29uZmlnLWxvZ2dpbmciLz4K KyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24pLCBidXQgd2lsbCBub3QgYmUgc2VudCB0byB0 aGUgY2xpZW50CisgICAgICAgIHJlZ2FyZGxlc3Mgb2YgPHhyZWYgbGlua2VuZD0iZ3VjLWNsaWVu dC1taW4tbWVzc2FnZXMiLz4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBUaGlzIGZ1bmN0aW9uIGlzIHJlc3RyaWN0ZWQgdG8gc3VwZXJ1c2VycyBieSBkZWZhdWx0LCBi dXQgb3RoZXIKKyAgICAgICAgdXNlcnMgY2FuIGJlIGdyYW50ZWQgRVhFQ1VURSB0byBydW4gdGhl IGZ1bmN0aW9uLgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisKICAgICAg IDxyb3c+CiAgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9 ImZ1bmNfc2lnbmF0dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4KQEAgLTI4ODAyLDYgKzI4ODI1 LDQwIEBAIExPRzogIEdyYW5kIHRvdGFsOiAxNjUxOTIwIGJ5dGVzIGluIDIwMSBibG9ja3M7IDYy MjM2MCBmcmVlICg4OCBjaHVua3MpOyAxMDI5NTYwCiAgICAgYmVjYXVzZSBpdCBtYXkgZ2VuZXJh dGUgYSBsYXJnZSBudW1iZXIgb2YgbG9nIG1lc3NhZ2VzLgogICAgPC9wYXJhPgogCisgICA8cGFy YT4KKyAgICA8ZnVuY3Rpb24+cGdfbG9nX3F1ZXJ5X3BsYW48L2Z1bmN0aW9uPiBjYW4gYmUgdXNl ZAorICAgIHRvIGxvZyB0aGUgcGxhbiBvZiBhIGJhY2tlbmQgcHJvY2Vzcy4gRm9yIGV4YW1wbGU6 Cis8cHJvZ3JhbWxpc3Rpbmc+Citwb3N0Z3Jlcz0jIFNFTEVDVCBwZ19sb2dfcXVlcnlfcGxhbigy MDExMTYpOworIHBnX2xvZ19xdWVyeV9wbGFuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyB0CisoMSByb3cpCis8L3Byb2dyYW1saXN0aW5nPgorVGhlIGZvcm1hdCBvZiB0aGUgcXVlcnkg cGxhbiBpcyB0aGUgc2FtZSBhcyB3aGVuIDxsaXRlcmFsPlZFUkJPU0U8L2xpdGVyYWw+LAorPGxp dGVyYWw+Q09TVFM8L2xpdGVyYWw+LCA8bGl0ZXJhbD5TRVRUSU5HUzwvbGl0ZXJhbD4gYW5kCis8 bGl0ZXJhbD5GT1JNQVQgVEVYVDwvbGl0ZXJhbD4gYXJlIHVzZWQgaW4gdGhlIDxjb21tYW5kPkVY UExBSU48L2NvbW1hbmQ+Citjb21tYW5kLiBGb3IgZXhhbXBsZToKKzxzY3JlZW4+CitMT0c6ICBx dWVyeSBwbGFuIHJ1bm5pbmcgb24gYmFja2VuZCB3aXRoIFBJRCAyMDExMTYgaXM6CisgICAgICAg IFF1ZXJ5IFRleHQ6IFNFTEVDVCAqIEZST00gcGdiZW5jaF9hY2NvdW50czsKKyAgICAgICAgU2Vx IFNjYW4gb24gcHVibGljLnBnYmVuY2hfYWNjb3VudHMgIChjb3N0PTAuMDAuLjUyNzg3LjAwIHJv d3M9MjAwMDAwMCB3aWR0aD05NykKKyAgICAgICAgICBPdXRwdXQ6IGFpZCwgYmlkLCBhYmFsYW5j ZSwgZmlsbGVyCisgICAgICAgIFNldHRpbmdzOiB3b3JrX21lbSA9ICcxTUInCisgICAgICAgIFF1 ZXJ5IElkZW50aWZpZXI6IDg2MjEyNTU1NDY1NjA3Mzk2ODAKKzwvc2NyZWVuPgorICAgIFdoZW4g dGhlIHRhcmdldCBpcyBleGVjdXRpbmcgbmVzdGVkIHN0YXRlbWVudHMoc3RhdGVtZW50cyBleGVj dXRlZAorICAgIGluc2lkZSBhIGZ1bmN0aW9uKSwgb25seSB0aGUgaW5uZXJtb3N0IHF1ZXJ5IHBs YW4gaXMgbG9nZ2VkLgorICAgIExvZ2dpbmcgcGxhbiBtYXkgdGFrZSBzb21lIHRpbWUsIGFzIGl0 IG9jY3VycyB3aGVuIHRoZSBwbGFuIG5vZGUgaXMKKyAgICBleGVjdXRlZC4gRm9yIGV4YW1wbGUs IHdoZW4gYSBxdWVyeSBpcyBydW5uaW5nIDxmdW5jdGlvbj5wZ19zbGVlcDwvZnVuY3Rpb24+LAor ICAgIHRoZSBwbGFuIHdpbGwgbm90IGJlIGxvZ2dlZCB1bnRpbCB0aGUgZnVuY3Rpb24gZXhlY3V0 aW9uIGNvbXBsZXRlcy4KKyAgICBTaW1pbGFybHksIHdoZW4gYSBxdWVyeSBpcyBydW5uaW5nIHVu ZGVyIHRoZSBleHRlbmRlZCBxdWVyeQorICAgIHByb3RvY29sLCB0aGUgcGxhbiBpcyBsb2dnZWQg b25seSBkdXJpbmcgdGhlIGV4ZWN1dGUgc3RlcC4KKyAgICA8ZnVuY3Rpb24+cGdfbG9nX3F1ZXJ5 X3BsYW4oKTwvZnVuY3Rpb24+IG1heSByZXR1cm4gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4KKyAg ICBldmVuIGlmIG5vIHBsYW4gaXMgYWN0dWFsbHkgbG9nZ2VkLCB3aGVuIHRoZSBxdWVyeSBpcyBh bHJlYWR5IGFib3V0IHRvCisgICAgZmluaXNoIGFuZCB0aGUgcGxhbiBsb2dnaW5nIHJlcXVlc3Qg Y29tZXMgdG9vIGxhdGUuCisgICA8L3BhcmE+CisKICAgPC9zZWN0Mj4KIAogICA8c2VjdDIgaWQ9 ImZ1bmN0aW9ucy1hZG1pbi1iYWNrdXAiPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4 IDJlNjdlOTk4YWQuLjVkZjRkZDAyNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKQEAg LTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2VudW0uaCIKICNpbmNsdWRlICJj YXRhbG9nL3N0b3JhZ2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1ZGUg ImNvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21k cy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKICNpbmNsdWRlICJjb21tb24vcGdf cHJuZy5oIgpAQCAtMjkzMiw2ICsyOTMzLDEyIEBAIEFib3J0VHJhbnNhY3Rpb24odm9pZCkKIAkv KiBSZXNldCBzbmFwc2hvdCBleHBvcnQgc3RhdGUuICovCiAJU25hcEJ1aWxkUmVzZXRFeHBvcnRl ZFNuYXBzaG90U3RhdGUoKTsKIAorCS8qCisJICogQWZ0ZXIgYWJvcnQsIHNvbWUgZWxlbWVudHMg b2YgQWN0aXZlUXVlcnlEZXNjIGFyZSBmcmVlZC4gVG8gYXZvaWQKKwkgKiBhY2Nlc3NpbmcgdGhl bSwgcmVzZXQgQWN0aXZlUXVlcnlEZXNjIGhlcmUuCisJICovCisJUmVzZXRMb2dRdWVyeVBsYW5T dGF0ZSgpOworCiAJLyoKIAkgKiBJZiB0aGlzIHhhY3QgaGFzIHN0YXJ0ZWQgYW55IHVuZmluaXNo ZWQgcGFyYWxsZWwgb3BlcmF0aW9uLCBjbGVhbiB1cAogCSAqIGl0cyB3b3JrZXJzIGFuZCBleGl0 IHBhcmFsbGVsIG1vZGUuICBEb24ndCB3YXJuIGFib3V0IGxlYWtlZCByZXNvdXJjZXMuCkBAIC01 MzI0LDYgKzUzMzEsMTIgQEAgQWJvcnRTdWJUcmFuc2FjdGlvbih2b2lkKQogCS8qIFJlc2V0IGxv Z2ljYWwgc3RyZWFtaW5nIHN0YXRlLiAqLwogCVJlc2V0TG9naWNhbFN0cmVhbWluZ1N0YXRlKCk7 CiAKKwkvKgorCSAqIEFmdGVyIGFib3J0LCBzb21lIGVsZW1lbnRzIG9mIEFjdGl2ZVF1ZXJ5RGVz YyBhcmUgZnJlZWQuIFRvIGF2b2lkCisJICogYWNjZXNzaW5nIHRoZW0sIHJlc2V0IEFjdGl2ZVF1 ZXJ5RGVzYyBoZXJlLgorCSAqLworCVJlc2V0TG9nUXVlcnlQbGFuU3RhdGUoKTsKKwogCS8qCiAJ ICogTm8gbmVlZCBmb3IgU25hcEJ1aWxkUmVzZXRFeHBvcnRlZFNuYXBzaG90U3RhdGUoKSBoZXJl LCBzbmFwc2hvdAogCSAqIGV4cG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gc3VidHJhbnNhY3Rp b25zLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNx bCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKaW5kZXggNTY2ZjMw OGU0NC4uZWMyZTFjMWZkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1f ZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMu c3FsCkBAIC03NzUsNiArNzc1LDggQEAgUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbHNf bG9naWNhbG1hcGRpcigpIEZST00gUFVCTElDOwogCiBSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElP TiBwZ19sc19yZXBsc2xvdGRpcih0ZXh0KSBGUk9NIFBVQkxJQzsKIAorUkVWT0tFIEVYRUNVVEUg T04gRlVOQ1RJT04gcGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlcikgRlJPTSBQVUJMSUM7CisKIC0t CiAtLSBXZSBhbHNvIHNldCB1cCBzb21lIHRoaW5ncyBhcyBhY2Nlc3NpYmxlIHRvIHN0YW5kYXJk IHJvbGVzLgogLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKaW5kZXggY2IyZmJkYzdjNi4uNWU4MzkwN2Vi MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKQEAgLTMyLDYgKzMyLDcgQEAgT0JKUyA9IFwKIAlkZWZp bmUubyBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKKwlkeW5hbWljX2V4cGxhaW4ubyBc CiAJZXZlbnRfdHJpZ2dlci5vIFwKIAlleHBsYWluLm8gXAogCWV4cGxhaW5fZHIubyBcCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9keW5hbWljX2V4cGxhaW4uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLmNmYzEzY2UwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9keW5hbWljX2V4cGxhaW4uYwpAQCAtMCwwICsxLDE5NSBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogZHluYW1pY19leHBsYWluLmMKKyAqCSAgRXhwbGFpbiBxdWVyeSBwbGFu cyBkdXJpbmcgZXhlY3V0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQtNSwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvY29tbWFuZHMvZHluYW1p Y19leHBsYWluLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZHluYW1pY19leHBsYWluLmgiCisjaW5jbHVkZSAi Y29tbWFuZHMvZXhwbGFpbi5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fZm9ybWF0Lmgi CisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIgorI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2Fy cmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYmFja2VuZF9zdGF0dXMuaCIKKworLyogQ3VycmVudGx5 IGV4ZWN1dGluZyBxdWVyeSdzIFF1ZXJ5RGVzYyAqLworc3RhdGljIFF1ZXJ5RGVzYyAqQWN0aXZl UXVlcnlEZXNjID0gTlVMTDsKKworLyoKKyAqIEhhbmRsZSByZWNlaXB0IG9mIGFuIGludGVycnVw dCBpbmRpY2F0aW5nIGxvZ2dpbmcgdGhlIHBsYW4gb2YgdGhlIGN1cnJlbnRseQorICogcnVubmlu ZyBxdWVyeS4KKyAqCisgKiBBbGwgdGhlIGFjdHVhbCB3b3JrIGlzIGRlZmVycmVkIHRvIFByb2Nl c3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHQoKSwKKyAqIGJlY2F1c2Ugd2UgY2Fubm90IHNhZmVseSBl bWl0IGEgbG9nIG1lc3NhZ2UgaW5zaWRlIHRoZSBzaWduYWwgaGFuZGxlci4KKyAqLwordm9pZAor SGFuZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0KHZvaWQpCit7CisJSW50ZXJydXB0UGVuZGluZyA9 IHRydWU7CisJTG9nUXVlcnlQbGFuUGVuZGluZyA9IHRydWU7CisJLyogbGF0Y2ggd2lsbCBiZSBz ZXQgYnkgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIgKi8KK30KKworLyoKKyAqIENsZWFyIHBn X2xvZ19xdWVyeV9wbGFuKCkgcmVsYXRlZCBzdGF0ZSBkdXJpbmcgKHN1Yil0cmFuc2FjdGlvbiBh Ym9ydC4KKyAqLwordm9pZAorUmVzZXRMb2dRdWVyeVBsYW5TdGF0ZSh2b2lkKQoreworCUFjdGl2 ZVF1ZXJ5RGVzYyA9IE5VTEw7CisJTG9nUXVlcnlQbGFuUGVuZGluZyA9IGZhbHNlOworfQorCisv KgorICogQWN0dWFsIHBsYW4gbG9nZ2luZyBmdW5jdGlvbi4KKyAqLwordm9pZAorTG9nUXVlcnlQ bGFuKHZvaWQpCit7CisJRXhwbGFpblN0YXRlICplczsKKwlNZW1vcnlDb250ZXh0IGN4dDsKKwlN ZW1vcnlDb250ZXh0IG9sZF9jeHQ7CisKKwljeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3Vy cmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSJsb2dfcXVlcnlfcGxhbiB0ZW1wb3JhcnkgY29u dGV4dCIsCisJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJb2xkX2N4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhjeHQpOworCisJZXMgPSBOZXdFeHBsYWluU3RhdGUoKTsKKwor CWVzLT5mb3JtYXQgPSBFWFBMQUlOX0ZPUk1BVF9URVhUOworCWVzLT5zZXR0aW5ncyA9IHRydWU7 CisJZXMtPnZlcmJvc2UgPSB0cnVlOworCWVzLT5zaWduYWxlZCA9IHRydWU7CisKKwkvKgorCSAq IEFjdGl2ZVF1ZXJ5RGVzYyBpcyB2YWxpZCBvbmx5IGR1cmluZyBzdGFuZGFyZF9FeGVjdXRvclJ1 bi4gSG93ZXZlciwKKwkgKiBFeGVjUHJvY05vZGUgY2FuIGJlIGNhbGxlZCBhZnRlcndhcmQoaS5l LiwgRXhlY1Bvc3Rwcm9jZXNzUGxhbikuIFRvCisJICogaGFuZGxlIHRoZSBjYXNlLCBjaGVjayBB Y3RpdmVRdWVyeURlc2MuCisJICovCisJaWYgKEFjdGl2ZVF1ZXJ5RGVzYyA9PSBOVUxMKQorCXsK KwkJTG9nUXVlcnlQbGFuUGVuZGluZyA9IGZhbHNlOworCisJCWVyZXBvcnQoTE9HX1NFUlZFUl9P TkxZLAorCQkJCWVycm1zZygiYmFja2VuZCB3aXRoIFBJRCAlZCBpcyBmaW5pc2hpbmcgcXVlcnkg ZXhlY3V0aW9uIGFuZCBjYW5ub3QgbG9nIHRoZSBwbGFuLiIsCisJCQkJCSAgIE15UHJvY1BpZCks CisJCQkJZXJyaGlkZXN0bXQodHJ1ZSksCisJCQkJZXJyaGlkZWNvbnRleHQodHJ1ZSkpOworCX0K KworCUV4cGxhaW5TdHJpbmdBc3NlbWJsZShlcywgQWN0aXZlUXVlcnlEZXNjLCBlcy0+Zm9ybWF0 LCAwLCAtMSk7CisKKwllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCWVycm1zZygicXVlcnkg cGxhbiBydW5uaW5nIG9uIGJhY2tlbmQgd2l0aCBQSUQgJWQgaXM6XG4lcyIsCisJCQkJICAgTXlQ cm9jUGlkLCBlcy0+c3RyLT5kYXRhKSwKKwkJCWVycmhpZGVzdG10KHRydWUpLAorCQkJZXJyaGlk ZWNvbnRleHQodHJ1ZSkpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZF9jeHQpOworCU1l bW9yeUNvbnRleHREZWxldGUoY3h0KTsKKworCUxvZ1F1ZXJ5UGxhblBlbmRpbmcgPSBmYWxzZTsK K30KKworLyoKKyAqIFByb2Nlc3MgdGhlIHJlcXVlc3QgZm9yIGxvZ2dpbmcgcXVlcnkgcGxhbiBh dCBDSEVDS19GT1JfSU5URVJSVVBUUygpLgorICoKKyAqIFNpbmNlIGV4ZWN1dGluZyBFWFBMQUlO LXJlbGF0ZWQgY29kZSBhdCBhbiBhcmJpdHJhcnkgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKQorICog cG9pbnQgaXMgcG90ZW50aWFsbHkgdW5zYWZlLCB0aGlzIGZ1bmN0aW9uIGp1c3Qgd3JhcHMgdGhl IG5vZGVzIG9mCisgKiBFeGVjUHJvY05vZGUgd2l0aCBFeGVjUHJvY05vZGVGaXJzdCwgd2hpY2gg bG9ncyBjb3JyZW50IHF1ZXJ5IHBsYW4gaWYKKyAqIHJlcXVlc3RlZC4gVGhpcyB3YXkgZW5zdXJl cyB0aGF0IEVYUExBSU4gY29kZSBpcyBleGVjdXRlZCBvbmx5IGR1cmluZworICogRXhlY1Byb2NO b2RlRmlyc3QsIHdoZXJlIGl0IGlzIGNvbnNpZGVyZWQgc2FmZS4KKyAqLwordm9pZAorUHJvY2Vz c0xvZ1F1ZXJ5UGxhbkludGVycnVwdCh2b2lkKQoreworCWlmIChBY3RpdmVRdWVyeURlc2MgPT0g TlVMTCkKKwl7CisJCWVyZXBvcnQoTE9HX1NFUlZFUl9PTkxZLAorCQkJCWVycm1zZygiYmFja2Vu ZCB3aXRoIFBJRCAlZCBpcyBub3QgcnVubmluZyBhIHF1ZXJ5IG9yIGEgc3VidHJhbnNhY3Rpb24g aXMgYWJvcnRlZCIsCisJCQkJCSAgIE15UHJvY1BpZCksCisJCQkJZXJyaGlkZXN0bXQodHJ1ZSks CisJCQkJZXJyaGlkZWNvbnRleHQodHJ1ZSkpOworCisJCUxvZ1F1ZXJ5UGxhblBlbmRpbmcgPSBm YWxzZTsKKwkJcmV0dXJuOworCX0KKworCS8qIFdyYXAgRXhlY1Byb2NOb2RlcyAqLworCUV4ZWNT ZXRFeGVjUHJvY05vZGVSZWN1cnNlKEFjdGl2ZVF1ZXJ5RGVzYy0+cGxhbnN0YXRlKTsKK30KKwor LyoKKyAqIFJldHVybnMgQWN0aXZlUXVlcnlEZXNjLgorICovCitRdWVyeURlc2MgKgorR2V0QWN0 aXZlUXVlcnlEZXNjKHZvaWQpCit7CisJcmV0dXJuIEFjdGl2ZVF1ZXJ5RGVzYzsKK30KKworLyoK KyBTZXQgQWN0aXZlUXVlcnlEZXNjIHRvIHF1ZXJ5RGVzYy4KKyAqLwordm9pZAorU2V0QWN0aXZl UXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQoreworCUFjdGl2ZVF1ZXJ5RGVzYyA9IHF1 ZXJ5RGVzYzsKK30KKworLyoKKyAqIFNpZ25hbCBhIGJhY2tlbmQgcHJvY2VzcyB0byBsb2cgdGhl IHF1ZXJ5IHBsYW4gb2YgdGhlIHJ1bm5pbmcgcXVlcnkuCisgKgorICogQnkgZGVmYXVsdCwgb25s eSBzdXBlcnVzZXJzIGFyZSBhbGxvd2VkIHRvIHNpZ25hbCB0byBsb2cgdGhlIHBsYW4gYmVjYXVz ZQorICogYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMgcmVxdWVzdCBhdCBhbiB1bmJv dW5kZWQgcmF0ZSB3b3VsZAorICogY2F1c2UgbG90cyBvZiBsb2cgbWVzc2FnZXMgYW5kIHdoaWNo IGNhbiBsZWFkIHRvIGRlbmlhbCBvZiBzZXJ2aWNlLgorICogQWRkaXRpb25hbCByb2xlcyBjYW4g YmUgcGVybWl0dGVkIHdpdGggR1JBTlQuCisgKi8KK0RhdHVtCitwZ19sb2dfcXVlcnlfcGxhbihQ R19GVU5DVElPTl9BUkdTKQoreworCWludAkJCXBpZCA9IFBHX0dFVEFSR19JTlQzMigwKTsKKwlQ R1BST0MJICAgKnByb2M7CisJUGdCYWNrZW5kU3RhdHVzICpiZV9zdGF0dXM7CisKKwlwcm9jID0g QmFja2VuZFBpZEdldFByb2MocGlkKTsKKworCWlmIChwcm9jID09IE5VTEwpCisJeworCQkvKgor CQkgKiBUaGlzIGlzIGp1c3QgYSB3YXJuaW5nIHNvIGEgbG9vcC10aHJvdWdoLXJlc3VsdHNldCB3 aWxsIG5vdCBhYm9ydAorCQkgKiBpZiBvbmUgYmFja2VuZCB0ZXJtaW5hdGVkIG9uIGl0cyBvd24g ZHVyaW5nIHRoZSBydW4uCisJCSAqLworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygi UElEICVkIGlzIG5vdCBhIFBvc3RncmVTUUwgYmFja2VuZCBwcm9jZXNzIiwgcGlkKSkpOworCQlQ R19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQorCisJYmVfc3RhdHVzID0gcGdzdGF0X2dldF9iZWVu dHJ5X2J5X3Byb2NfbnVtYmVyKHByb2MtPnZ4aWQucHJvY051bWJlcik7CisJaWYgKGJlX3N0YXR1 cy0+c3RfYmFja2VuZFR5cGUgIT0gQl9CQUNLRU5EKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAor CQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQb3N0Z3JlU1FMIGNsaWVudCBiYWNrZW5kIHBy b2Nlc3MiLCBwaWQpKSk7CisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9CisKKwlpZiAoU2Vu ZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX0xPR19RVUVSWV9QTEFOLCBwcm9jLT52eGlkLnByb2NO dW1iZXIpIDwgMCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJjb3VsZCBu b3Qgc2VuZCBzaWduYWwgdG8gcHJvY2VzcyAlZDogJW0iLCBwaWQpKSk7CisJCVBHX1JFVFVSTl9C T09MKGZhbHNlKTsKKwl9CisKKwlQR19SRVRVUk5fQk9PTCh0cnVlKTsKK30KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4 cGxhaW4uYwppbmRleCA3ZTI3OTJlYWQ3Li5hNjg5NThjMWFkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jCkBAIC0xMDg0LDYgKzEwODQsMzcgQEAgRXhwbGFpblF1ZXJ5UGFyYW1ldGVycyhFeHBsYWlu U3RhdGUgKmVzLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywgaW50IG1heGxlbikKIAkJRXhwbGFpblBy b3BlcnR5VGV4dCgiUXVlcnkgUGFyYW1ldGVycyIsIHN0ciwgZXMpOwogfQogCisvKgorICogRXhw bGFpblN0cmluZ0Fzc2VtYmxlIC0KKyAqICAgIEFzc2VtYmxlIGVzLT5zdHIgZm9yIGxvZ2dpbmcg YWNjb3JkaW5nIHRvIHNwZWNpZmllZCBvcHRpb25zIGFuZCBmb3JtYXQKKyAqLworCit2b2lkCitF eHBsYWluU3RyaW5nQXNzZW1ibGUoRXhwbGFpblN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURl c2MsIGludCBsb2dGb3JtYXQsCisJCQkJCSAgYm9vbCBsb2dUcmlnZ2VycywgaW50IGxvZ1BhcmFt ZXRlck1heExlbmd0aCkKK3sKKwlFeHBsYWluQmVnaW5PdXRwdXQoZXMpOworCUV4cGxhaW5RdWVy eVRleHQoZXMsIHF1ZXJ5RGVzYyk7CisJRXhwbGFpblF1ZXJ5UGFyYW1ldGVycyhlcywgcXVlcnlE ZXNjLT5wYXJhbXMsIGxvZ1BhcmFtZXRlck1heExlbmd0aCk7CisJRXhwbGFpblByaW50UGxhbihl cywgcXVlcnlEZXNjKTsKKwlpZiAoZXMtPmFuYWx5emUgJiYgbG9nVHJpZ2dlcnMpCisJCUV4cGxh aW5QcmludFRyaWdnZXJzKGVzLCBxdWVyeURlc2MpOworCWlmIChlcy0+Y29zdHMpCisJCUV4cGxh aW5QcmludEpJVFN1bW1hcnkoZXMsIHF1ZXJ5RGVzYyk7CisJRXhwbGFpbkVuZE91dHB1dChlcyk7 CisKKwkvKiBSZW1vdmUgbGFzdCBsaW5lIGJyZWFrICovCisJaWYgKGVzLT5zdHItPmxlbiA+IDAg JiYgZXMtPnN0ci0+ZGF0YVtlcy0+c3RyLT5sZW4gLSAxXSA9PSAnXG4nKQorCQllcy0+c3RyLT5k YXRhWy0tZXMtPnN0ci0+bGVuXSA9ICdcMCc7CisKKwkvKiBGaXggSlNPTiB0byBvdXRwdXQgYW4g b2JqZWN0ICovCisJaWYgKGxvZ0Zvcm1hdCA9PSBFWFBMQUlOX0ZPUk1BVF9KU09OKQorCXsKKwkJ ZXMtPnN0ci0+ZGF0YVswXSA9ICd7JzsKKwkJZXMtPnN0ci0+ZGF0YVtlcy0+c3RyLT5sZW4gLSAx XSA9ICd9JzsKKwl9Cit9CisKIC8qCiAgKiByZXBvcnRfdHJpZ2dlcnMgLQogICoJCXJlcG9ydCBl eGVjdXRpb24gc3RhdHMgZm9yIGEgc2luZ2xlIHJlbGF0aW9uJ3MgdHJpZ2dlcnMKQEAgLTE4MTUs NyArMTg0NiwxMCBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5j ZXN0b3JzLAogCiAJLyoKIAkgKiBXZSBoYXZlIHRvIGZvcmNpYmx5IGNsZWFuIHVwIHRoZSBpbnN0 cnVtZW50YXRpb24gc3RhdGUgYmVjYXVzZSB3ZQotCSAqIGhhdmVuJ3QgZG9uZSBFeGVjdXRvckVu ZCB5ZXQuICBUaGlzIGlzIHByZXR0eSBncm90dHkgLi4uCisJICogaGF2ZW4ndCBkb25lIEV4ZWN1 dG9yRW5kIHlldC4gIFRoaXMgaXMgcHJldHR5IGdyb3R0eSAuLi4gVGhpcyBjbGVhbnVwCisJICog c2hvdWxkIG5vdCBiZSBkb25lIHdoZW4gdGhlIHF1ZXJ5IGhhcyBhbHJlYWR5IGJlZW4gZXhlY3V0 ZWQgYW5kIGV4cGxhaW4KKwkgKiBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgc2lnbmFsLCBhcyB0aGUg dGFyZ2V0IHF1ZXJ5IG1heSB1c2UgaW5zdHJ1bWVudGF0aW9uCisJICogYW5kIGNsZWFuIGl0c2Vs ZiB1cC4KIAkgKgogCSAqIE5vdGU6IGNvbnRyaWIvYXV0b19leHBsYWluIGNvdWxkIGNhdXNlIGlu c3RydW1lbnRhdGlvbiB0byBiZSBzZXQgdXAKIAkgKiBldmVuIHRob3VnaCB3ZSBkaWRuJ3QgYXNr IGZvciBpdCBoZXJlLiAgQmUgY2FyZWZ1bCBub3QgdG8gcHJpbnQgYW55CkBAIC0xODIzLDcgKzE4 NTcsNyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3Jz LAogCSAqIEluc3RyRW5kTG9vcCBjYWxsIGFueXdheSwgaWYgcG9zc2libGUsIHRvIHJlZHVjZSB0 aGUgbnVtYmVyIG9mIGNhc2VzCiAJICogYXV0b19leHBsYWluIGhhcyB0byBjb250ZW5kIHdpdGgu CiAJICovCi0JaWYgKHBsYW5zdGF0ZS0+aW5zdHJ1bWVudCkKKwlpZiAocGxhbnN0YXRlLT5pbnN0 cnVtZW50ICYmICFlcy0+c2lnbmFsZWQpCiAJCUluc3RyRW5kTG9vcChwbGFuc3RhdGUtPmluc3Ry dW1lbnQpOwogCiAJaWYgKGVzLT5hbmFseXplICYmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCmlu ZGV4IGRkNGNkZTQxZDMuLjRhNjRiOGU5ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCkBA IC0yMCw2ICsyMCw3IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2RlZmluZS5jJywK ICAgJ2Rpc2NhcmQuYycsCiAgICdkcm9wY21kcy5jJywKKyAgJ2R5bmFtaWNfZXhwbGFpbi5jJywK ICAgJ2V2ZW50X3RyaWdnZXIuYycsCiAgICdleHBsYWluLmMnLAogICAnZXhwbGFpbl9kci5jJywK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IDAzOTE3OThkZDIuLjk5NzI3ZTU1NzEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94 YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BhcnRpdGlvbi5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5oIgogI2lu Y2x1ZGUgImNvbW1hbmRzL21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgi CiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKQEAgLTMxMyw2ICszMTQsNyBAQCBzdGFu ZGFyZF9FeGVjdXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywKIAlEZXN0UmVjZWl2ZXIgKmRl c3Q7CiAJYm9vbAkJc2VuZFR1cGxlczsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJUXVl cnlEZXNjICAqb2xkQWN0aXZlUXVlcnlEZXNjOwogCiAJLyogc2FuaXR5IGNoZWNrcyAqLwogCUFz c2VydChxdWVyeURlc2MgIT0gTlVMTCk7CkBAIC0zMjUsNiArMzI3LDEzIEBAIHN0YW5kYXJkX0V4 ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAogCS8qIGNhbGxlciBtdXN0IGVuc3VyZSB0 aGUgcXVlcnkncyBzbmFwc2hvdCBpcyBhY3RpdmUgKi8KIAlBc3NlcnQoR2V0QWN0aXZlU25hcHNo b3QoKSA9PSBlc3RhdGUtPmVzX3NuYXBzaG90KTsKIAorCS8qCisJICogU2F2ZSBBY3RpdmVRdWVy eURlc2MgaGVyZSB0byBlbmFibGUgcmV0cmlldmFsIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZwor CSAqIHF1ZXJ5RGVzYyBmb3IgbmVzdGVkIHF1ZXJpZXMuCisJICovCisJb2xkQWN0aXZlUXVlcnlE ZXNjID0gR2V0QWN0aXZlUXVlcnlEZXNjKCk7CisJU2V0QWN0aXZlUXVlcnlEZXNjKHF1ZXJ5RGVz Yyk7CisKIAkvKgogCSAqIFN3aXRjaCBpbnRvIHBlci1xdWVyeSBtZW1vcnkgY29udGV4dAogCSAq LwpAQCAtMzg3LDYgKzM5NiwxNCBAQCBzdGFuZGFyZF9FeGVjdXRvclJ1bihRdWVyeURlc2MgKnF1 ZXJ5RGVzYywKIAkJSW5zdHJTdG9wTm9kZShxdWVyeURlc2MtPnRvdGFsdGltZSwgZXN0YXRlLT5l c19wcm9jZXNzZWQpOwogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCVNl dEFjdGl2ZVF1ZXJ5RGVzYyhvbGRBY3RpdmVRdWVyeURlc2MpOworCisJLyoKKwkgKiBFbnN1cmUg TG9nUXVlcnlQbGFuUGVuZGluZyBpcyBpbml0aWFsaXplZCBpbiBjYXNlIHRoZXJlIHdhcyBubyB0 aW1lIGZvcgorCSAqIGxvZ2dpbmcgdGhlIHBsYW4uIE90aGV3aXNlIHBsYW4gd2lsbCBiZSBsb2dn ZWQgYXQgdGhlIG5leHQgcXVlcnkKKwkgKiBleGVjdXRpb24gb24gdGhlIHNhbWUgc2Vzc2lvbi4K KwkgKi8KKwlMb2dRdWVyeVBsYW5QZW5kaW5nID0gZmFsc2U7CiB9CiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKaW5kZXggZjVmOWNmYmVlYS4uZTc3NDlkMTVhZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAqLwog I2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJjb21tYW5kcy9keW5hbWljX2V4cGxh aW4uaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9y L25vZGVBZ2cuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlQXBwZW5kLmgiCkBAIC00MzEsOSAr NDMyLDEwIEBAIEV4ZWNTZXRFeGVjUHJvY05vZGUoUGxhblN0YXRlICpub2RlLCBFeGVjUHJvY05v ZGVNdGQgZnVuY3Rpb24pCiB7CiAJLyoKIAkgKiBBZGQgYSB3cmFwcGVyIGFyb3VuZCB0aGUgRXhl Y1Byb2NOb2RlIGNhbGxiYWNrIHRoYXQgY2hlY2tzIHN0YWNrIGRlcHRoCi0JICogZHVyaW5nIHRo ZSBmaXJzdCBleGVjdXRpb24gYW5kIG1heWJlIGFkZHMgYW4gaW5zdHJ1bWVudGF0aW9uIHdyYXBw ZXIuCi0JICogV2hlbiB0aGUgY2FsbGJhY2sgaXMgY2hhbmdlZCBhZnRlciBleGVjdXRpb24gaGFz IGFscmVhZHkgYmVndW4gdGhhdAotCSAqIG1lYW5zIHdlJ2xsIHN1cGVyZmx1b3VzbHkgZXhlY3V0 ZSBFeGVjUHJvY05vZGVGaXJzdCwgYnV0IHRoYXQgc2VlbXMgb2suCisJICogYW5kIHF1ZXJ5IGxv Z2dpbmcgcmVxdWVzdCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgbWF5YmUgYWRkcyBhbgorCSAq IGluc3RydW1lbnRhdGlvbiB3cmFwcGVyLiBXaGVuIHRoZSBjYWxsYmFjayBpcyBjaGFuZ2VkIGFm dGVyIGV4ZWN1dGlvbgorCSAqIGhhcyBhbHJlYWR5IGJlZ3VuIHRoYXQgbWVhbnMgd2UnbGwgc3Vw ZXJmbHVvdXNseSBleGVjdXRlCisJICogRXhlY1Byb2NOb2RlRmlyc3QsIGJ1dCB0aGF0IHNlZW1z IG9rLgogCSAqLwogCW5vZGUtPkV4ZWNQcm9jTm9kZVJlYWwgPSBmdW5jdGlvbjsKIAlub2RlLT5F eGVjUHJvY05vZGUgPSBFeGVjUHJvY05vZGVGaXJzdDsKQEAgLTQ0MSwyNyArNDQzLDQzIEBAIEV4 ZWNTZXRFeGVjUHJvY05vZGUoUGxhblN0YXRlICpub2RlLCBFeGVjUHJvY05vZGVNdGQgZnVuY3Rp b24pCiAKIAogLyoKLSAqIEV4ZWNQcm9jTm9kZSB3cmFwcGVyIHRoYXQgcGVyZm9ybXMgc29tZSBv bmUtdGltZSBjaGVja3MsIGJlZm9yZSBjYWxsaW5nCisgKiBFeGVjUHJvY05vZGUgd3JhcHBlciB0 aGF0IHBlcmZvcm1zIHNvbWUgZXh0cmEgY2hlY2tzLCBiZWZvcmUgY2FsbGluZwogICogdGhlIHJl bGV2YW50IG5vZGUgbWV0aG9kIChwb3NzaWJseSB2aWEgYW4gaW5zdHJ1bWVudGF0aW9uIHdyYXBw ZXIpLgorICoKKyAqIE5vcm1hbGx5LCB0aGlzIGlzIGp1c3QgaW52b2tlZCBvbmNlIGZvciB0aGUg Zmlyc3QgY2FsbCB0byBhbnkgZ2l2ZW4gbm9kZSwKKyAqIGFuZCB0aGVyZWFmdGVyIHdlIGFycmFu Z2UgdG8gY2FsbCBFeGVjUHJvY05vZGVJbnN0ciBvciB0aGUgcmVsZXZhbnQgbm9kZQorICogbWV0 aG9kIGRpcmVjdGx5LiBIb3dldmVyLCBpdCdzIGxlZ2FsIHRvIHJlc2V0IG5vZGUtPkV4ZWNQcm9j Tm9kZSBiYWNrIHRvCisgKiB0aGlzIGZ1bmN0aW9uIGF0IGFueSB0aW1lLCBhbmQgd2UgZG8gdGhh dCB3aGVuZXZlciB0aGUgcXVlcnkgcGxhbiBtaWdodAorICogbmVlZCB0byBiZSBwcmludGVkLCBz byB0aGF0IHdlIG9ubHkgaW5jdXIgdGhlIGNvc3Qgb2YgY2hlY2tpbmcgZm9yIHRoYXQKKyAqIGNh c2Ugd2hlbiByZXF1aXJlZC4KICAqLwogc3RhdGljIFR1cGxlVGFibGVTbG90ICoKIEV4ZWNQcm9j Tm9kZUZpcnN0KFBsYW5TdGF0ZSAqbm9kZSkKIHsKIAkvKgotCSAqIFBlcmZvcm0gc3RhY2sgZGVw dGggY2hlY2sgZHVyaW5nIHRoZSBmaXJzdCBleGVjdXRpb24gb2YgdGhlIG5vZGUuICBXZQotCSAq IG9ubHkgZG8gc28gdGhlIGZpcnN0IHRpbWUgcm91bmQgYmVjYXVzZSBpdCB0dXJucyBvdXQgdG8g bm90IGJlIGNoZWFwIG9uCi0JICogc29tZSBjb21tb24gYXJjaGl0ZWN0dXJlcyAoZWcuIHg4Niku ICBUaGlzIHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbgotCSAqIHRoYXQgRXhlY1Byb2NOb2RlIGNh bGxzIGZvciBhIGdpdmVuIHBsYW4gbm9kZSB3aWxsIGFsd2F5cyBiZSBtYWRlIGF0Ci0JICogcm91 Z2hseSB0aGUgc2FtZSBzdGFjayBkZXB0aC4KKwkgKiBQZXJmb3JtIGEgc3RhY2sgZGVwdGggY2hl Y2suICBXZSBkb24ndCB3YW50IHRvIGRvIHRoaXMgYWxsIHRoZSB0aW1lCisJICogYmVjYXVzZSBp dCB0dXJucyBvdXQgdG8gbm90IGJlIGNoZWFwIG9uIHNvbWUgY29tbW9uIGFyY2hpdGVjdHVyZXMg KGVnLgorCSAqIHg4NikuICBUaGlzIHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IEV4ZWNQ cm9jTm9kZSBjYWxscyBmb3IgYQorCSAqIGdpdmVuIHBsYW4gbm9kZSB3aWxsIGFsd2F5cyBiZSBt YWRlIGF0IHJvdWdobHkgdGhlIHNhbWUgc3RhY2sgZGVwdGguCiAJICovCiAJY2hlY2tfc3RhY2tf ZGVwdGgoKTsKIAorCS8qCisJICogSWYgd2UgaGF2ZSBiZWVuIGFza2VkIHRvIHByaW50IHRoZSBx dWVyeSBwbGFuLCBkbyB0aGF0IG5vdy4gV2UgZGFyZSBub3QKKwkgKiB0cnkgdG8gZG8gdGhpcyBk aXJlY3RseSBmcm9tIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgYmVjYXVzZSB3ZSBkb24ndAorCSAq IHJlYWxseSBrbm93IHdoYXQgdGhlIGV4ZWN1dG9yIHN0YXRlIGlzIGF0IHRoYXQgcG9pbnQsIGJ1 dCB3ZSBhc3N1bWUKKwkgKiB0aGF0IHdoZW4gZW50ZXJpbmcgYSBub2RlIHRoZSBzdGF0ZSB3aWxs IGJlIHN1ZmZpY2llbnRseSBjb25zaXN0ZW50CisJICogdGhhdCB0cnlpbmcgdG8gcHJpbnQgdGhl IHBsYW4gbWFrZXMgc2Vuc2UuCisJICovCisJaWYgKExvZ1F1ZXJ5UGxhblBlbmRpbmcpCisJCUxv Z1F1ZXJ5UGxhbigpOworCiAJLyoKIAkgKiBJZiBpbnN0cnVtZW50YXRpb24gaXMgcmVxdWlyZWQs IGNoYW5nZSB0aGUgd3JhcHBlciB0byBvbmUgdGhhdCBqdXN0CiAJICogZG9lcyBpbnN0cnVtZW50 YXRpb24uICBPdGhlcndpc2Ugd2UgY2FuIGRpc3BlbnNlIHdpdGggYWxsIHdyYXBwZXJzIGFuZAog CSAqIGhhdmUgRXhlY1Byb2NOb2RlKCkgZGlyZWN0bHkgY2FsbCB0aGUgcmVsZXZhbnQgZnVuY3Rp b24gZnJvbSBub3cgb24uCiAJICovCi0JaWYgKG5vZGUtPmluc3RydW1lbnQpCisJZWxzZSBpZiAo bm9kZS0+aW5zdHJ1bWVudCkKIAkJbm9kZS0+RXhlY1Byb2NOb2RlID0gRXhlY1Byb2NOb2RlSW5z dHI7CiAJZWxzZQogCQlub2RlLT5FeGVjUHJvY05vZGUgPSBub2RlLT5FeGVjUHJvY05vZGVSZWFs OwpAQCAtNTQ2LDYgKzU2NCw4OCBAQCBNdWx0aUV4ZWNQcm9jTm9kZShQbGFuU3RhdGUgKm5vZGUp CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIFdyYXAgYXJyYXkgb2YgUGxhblN0YXRlIEV4 ZWNQcm9jTm9kZSB3aXRoIEV4ZWNQcm9jTm9kZUZpcnN0LgorICovCitzdGF0aWMgdm9pZAorRXhl Y1NldEV4ZWNQcm9jTm9kZUFycmF5KFBsYW5TdGF0ZSAqKnBsYW5zdGF0ZXMsIGludCBucGxhbnMp Cit7CisJaW50CQkJaTsKKworCWZvciAoaSA9IDA7IGkgPCBucGxhbnM7IGkrKykKKwkJRXhlY1Nl dEV4ZWNQcm9jTm9kZVJlY3Vyc2UocGxhbnN0YXRlc1tpXSk7Cit9CisKKy8qCisgKiBXcmFwIEN1 c3RvbVNjYW5TdGF0ZSBjaGlsZHJlbidzIEV4ZWNQcm9jTm9kZSB3aXRoIEV4ZWNQcm9jTm9kZUZp cnN0LgorICovCitzdGF0aWMgdm9pZAorQ1NTQ2hpbGRFeGVjU2V0RXhlY1Byb2NOb2RlQXJyYXko Q3VzdG9tU2NhblN0YXRlICpjc3MpCit7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWZvcmVhY2go Y2VsbCwgY3NzLT5jdXN0b21fcHMpCisJCUV4ZWNTZXRFeGVjUHJvY05vZGVSZWN1cnNlKChQbGFu U3RhdGUgKikgbGZpcnN0KGNlbGwpKTsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IHdyYXAgYWxs IHRoZSB1bmRlcmx5aW5nIEV4ZWNQcm9jTm9kZSB3aXRoIEV4ZWNQcm9jTm9kZUZpcnN0LgorICoK KyAqIFJlY3Vyc2lvbiBpcyB1c3VhbGx5IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBuZXh0IEV4ZWNQ cm9jTm9kZSgpIGNhbGwgbWF5IGJlCisgKiBpbnZva2VkIG5vdCBvbmx5IHRocm91Z2ggdGhlIGN1 cnJlbnQgbm9kZSwgYnV0IGFsc28gdmlhIGxlZnR0cmVlLCByaWdodHRyZWUsCisgKiBzdWJQbGFu LCBvciBvdGhlciBzcGVjaWFsIGNoaWxkIHBsYW5zLgorICovCit2b2lkCitFeGVjU2V0RXhlY1By b2NOb2RlUmVjdXJzZShQbGFuU3RhdGUgKnBzKQoreworCUV4ZWNTZXRFeGVjUHJvY05vZGUocHMs IHBzLT5FeGVjUHJvY05vZGVSZWFsKTsKKworCWlmIChwcy0+bGVmdHRyZWUgIT0gTlVMTCkKKwkJ RXhlY1NldEV4ZWNQcm9jTm9kZVJlY3Vyc2UocHMtPmxlZnR0cmVlKTsKKwlpZiAocHMtPnJpZ2h0 dHJlZSAhPSBOVUxMKQorCQlFeGVjU2V0RXhlY1Byb2NOb2RlUmVjdXJzZShwcy0+cmlnaHR0cmVl KTsKKwlpZiAocHMtPnN1YlBsYW4gIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmw7CisKKwkJ Zm9yZWFjaChsLCBwcy0+c3ViUGxhbikKKwkJeworCQkJU3ViUGxhblN0YXRlICpzc3RhdGUgPSAo U3ViUGxhblN0YXRlICopIGxmaXJzdChsKTsKKworCQkJRXhlY1NldEV4ZWNQcm9jTm9kZVJlY3Vy c2Uoc3N0YXRlLT5wbGFuc3RhdGUpOworCQl9CisJfQorCisJLyogc3BlY2lhbCBjaGlsZCBwbGFu cyAqLworCXN3aXRjaCAobm9kZVRhZyhwcy0+cGxhbikpCisJeworCQljYXNlIFRfQXBwZW5kOgor CQkJRXhlY1NldEV4ZWNQcm9jTm9kZUFycmF5KCgoQXBwZW5kU3RhdGUgKikgcHMpLT5hcHBlbmRw bGFucywKKwkJCQkJCQkJCSAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXNfbnBsYW5zKTsKKwkJCWJy ZWFrOworCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQlFeGVjU2V0RXhlY1Byb2NOb2RlQXJyYXko KChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bWVyZ2VwbGFucywKKwkJCQkJCQkJCSAoKE1lcmdl QXBwZW5kU3RhdGUgKikgcHMpLT5tc19ucGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRt YXBBbmQ6CisJCQlFeGVjU2V0RXhlY1Byb2NOb2RlQXJyYXkoKChCaXRtYXBBbmRTdGF0ZSAqKSBw cyktPmJpdG1hcHBsYW5zLAorCQkJCQkJCQkJICgoQml0bWFwQW5kU3RhdGUgKikgcHMpLT5ucGxh bnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBPcjoKKwkJCUV4ZWNTZXRFeGVjUHJvY05v ZGVBcnJheSgoKEJpdG1hcE9yU3RhdGUgKikgcHMpLT5iaXRtYXBwbGFucywKKwkJCQkJCQkJCSAo KEJpdG1hcE9yU3RhdGUgKikgcHMpLT5ucGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9TdWJx dWVyeVNjYW46CisJCQlFeGVjU2V0RXhlY1Byb2NOb2RlUmVjdXJzZSgoKFN1YnF1ZXJ5U2NhblN0 YXRlICopIHBzKS0+c3VicGxhbik7CisJCQlicmVhazsKKwkJY2FzZSBUX0N1c3RvbVNjYW46CisJ CQlDU1NDaGlsZEV4ZWNTZXRFeGVjUHJvY05vZGVBcnJheSgoQ3VzdG9tU2NhblN0YXRlICopIHBz KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqCQlFeGVjRW5kTm9kZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCmluZGV4 IGE5YmI1NDBiNTUuLjIyMjZhZDAyMTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFs LmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2lu Y2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZHluYW1pY19leHBs YWluLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5j bHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgpAQCAtNjkxLDYgKzY5Miw5IEBAIHByb2NzaWduYWxf c2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJ R19MT0dfTUVNT1JZX0NPTlRFWFQpKQogCQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0 KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTE9HX1FVRVJZX1BMQU4pKQorCQlI YW5kbGVMb2dRdWVyeVBsYW5JbnRlcnJ1cHQoKTsKKwogCWlmIChDaGVja1Byb2NTaWduYWwoUFJP Q1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFKSkKIAkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3Nh Z2VJbnRlcnJ1cHQoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j IGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDJmOGMzZDVmOTEuLjZiZGM3YmE3 N2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFj a2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJjYXRhbG9n L3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgogI2luY2x1ZGUgImNvbW1h bmRzL2V2ZW50X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9keW5hbWljX2V4cGxhaW4u aCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCiAjaW5jbHVkZSAiY29tbW9uL3BnX3By bmcuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCkBAIC0zNTMzLDYgKzM1MzQsOSBAQCBQcm9jZXNz SW50ZXJydXB0cyh2b2lkKQogCWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykKIAkJUHJvY2Vz c0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKIAorCWlmIChMb2dRdWVyeVBsYW5QZW5kaW5n KQorCQlQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0KCk7CisKIAlpZiAoUGFyYWxsZWxBcHBs eU1lc3NhZ2VQZW5kaW5nKQogCQlQcm9jZXNzUGFyYWxsZWxBcHBseU1lc3NhZ2VzKCk7CiB9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IGQzMWNiNDVhMDUuLjkyN2NjZGEwMzAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC00MCw2ICs0MCw4IEBAIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCBJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRv bWljX3QgUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRv bWljX3QgTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCBJZGxlU3RhdHNVcGRhdGVUaW1lb3V0UGVuZGluZyA9IGZhbHNlOwordm9sYXRpbGUgc2ln X2F0b21pY190IExvZ1F1ZXJ5UGxhblBlbmRpbmcgPSBmYWxzZTsKKwogdm9sYXRpbGUgdWludDMy IEludGVycnVwdEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgUXVlcnlDYW5jZWxI b2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIENyaXRTZWN0aW9uQ291bnQgPSAwOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggZDNkMjhhMjYzZi4uZTNiZjFjYjljZCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04NTcxLDYgKzg1NzEsMTIgQEAKICAgcHJvcmV0dHlwZSA9 PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdpbnQ0JywKICAgcHJvc3JjID0+ICdwZ19sb2dfYmFj a2VuZF9tZW1vcnlfY29udGV4dHMnIH0sCiAKKyMgbG9nZ2luZyBwbGFuIG9mIHRoZSBydW5uaW5n IHF1ZXJ5IG9uIHRoZSBzcGVjaWZpZWQgYmFja2VuZAoreyBvaWQgPT4gJzgwMDAnLCBkZXNjciA9 PiAnbG9nIHBsYW4gb2YgdGhlIHJ1bm5pbmcgcXVlcnkgb24gdGhlIHNwZWNpZmllZCBiYWNrZW5k JywKKyAgcHJvbmFtZSA9PiAncGdfbG9nX3F1ZXJ5X3BsYW4nLAorICBwcm92b2xhdGlsZSA9PiAn dicsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50NCcsIHByb3Ny YyA9PiAncGdfbG9nX3F1ZXJ5X3BsYW4nIH0sCisKICMgbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdl bmVyYXRvcgogeyBvaWQgPT4gJzEwNjYnLCBkZXNjciA9PiAnbm9uLXBlcnNpc3RlbnQgc2VyaWVz IGdlbmVyYXRvcicsCiAgIHByb25hbWUgPT4gJ2dlbmVyYXRlX3NlcmllcycsIHByb3Jvd3MgPT4g JzEwMDAnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZHluYW1pY19leHBsYWlu LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iZTM4N2E4Y2Y5Ci0tLSAvZGV2L251bGwKKysrIGIv c3JjL2luY2x1ZGUvY29tbWFuZHMvZHluYW1pY19leHBsYWluLmgKQEAgLTAsMCArMSwyOSBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZHluYW1pY19leHBsYWluLmgKKyAqCSAgcHJvdG90 eXBlcyBmb3IgZHluYW1pY19leHBsYWluLmMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NC01LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh bGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9jb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaAor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIERZTkFNSUNfRVhQTEFJTl9ICisj ZGVmaW5lIERZTkFNSUNfRVhQTEFJTl9ICisKKyNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5o IgorI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCIKKworZXh0ZXJuIHZvaWQgSGFu ZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUmVzZXRMb2dRdWVy eVBsYW5TdGF0ZSh2b2lkKTsKK2V4dGVybiB2b2lkIFJlc2V0UHJvY2Vzc0xvZ1F1ZXJ5UGxhbklu dGVycnVwdEFjdGl2ZSh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NMb2dRdWVyeVBsYW5JbnRl cnJ1cHQodm9pZCk7CitleHRlcm4gUXVlcnlEZXNjICpHZXRBY3RpdmVRdWVyeURlc2Modm9pZCk7 CitleHRlcm4gdm9pZCBTZXRBY3RpdmVRdWVyeURlc2MoUXVlcnlEZXNjICpxdWVyeURlc2MpOwor ZXh0ZXJuIFR1cGxlVGFibGVTbG90ICpFeGVjUHJvY05vZGVXaXRoRXhwbGFpbihQbGFuU3RhdGUg KnBzKTsKK2V4dGVybiB2b2lkIExvZ1F1ZXJ5UGxhbih2b2lkKTsKK2V4dGVybiBEYXR1bSBwZ19s b2dfcXVlcnlfcGxhbihQR19GVU5DVElPTl9BUkdTKTsKKworI2VuZGlmCQkJCQkJCS8qIERZTkFN SUNfRVhQTEFJTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWlu LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKaW5kZXggM2IxMjJmNzllZC4uNmFh ODM4NzY0ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaApAQCAtNzAsNiArNzAsOCBAQCBleHRlcm4g dm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2Ug KmludG8sCiAJCQkJCQkgICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsCiAJCQkJCQkgICBj b25zdCBNZW1vcnlDb250ZXh0Q291bnRlcnMgKm1lbV9jb3VudGVycyk7CiAKK2V4dGVybiB2b2lk IEV4cGxhaW5QcmludFBsYW4oc3RydWN0IEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5RGVzYyAqcXVl cnlEZXNjKTsKK2V4dGVybiB2b2lkIEV4cGxhaW5QcmludFRyaWdnZXJzKHN0cnVjdCBFeHBsYWlu U3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYyk7CiBleHRlcm4gdm9pZCBFeHBsYWluUHJp bnRQbGFuKHN0cnVjdCBFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYyk7CiBl eHRlcm4gdm9pZCBFeHBsYWluUHJpbnRUcmlnZ2VycyhzdHJ1Y3QgRXhwbGFpblN0YXRlICplcywK IAkJCQkJCQkJIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKQEAgLTgwLDUgKzgyLDggQEAgZXh0ZXJu IHZvaWQgRXhwbGFpblByaW50SklUU3VtbWFyeShzdHJ1Y3QgRXhwbGFpblN0YXRlICplcywKIGV4 dGVybiB2b2lkIEV4cGxhaW5RdWVyeVRleHQoc3RydWN0IEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5 RGVzYyAqcXVlcnlEZXNjKTsKIGV4dGVybiB2b2lkIEV4cGxhaW5RdWVyeVBhcmFtZXRlcnMoc3Ry dWN0IEV4cGxhaW5TdGF0ZSAqZXMsCiAJCQkJCQkJCSAgIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBp bnQgbWF4bGVuKTsKK2V4dGVybiB2b2lkIEV4cGxhaW5TdHJpbmdBc3NlbWJsZShzdHJ1Y3QgRXhw bGFpblN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURlc2MsCisJCQkJCQkJCSAgaW50IGxvZ0Zv cm1hdCwgYm9vbCBsb2dUcmlnZ2VycywKKwkJCQkJCQkJICBpbnQgbG9nUGFyYW1ldGVyTWF4TGVu Z3RoKTsKIAogI2VuZGlmCQkJCQkJCS8qIEVYUExBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhw bGFpbl9zdGF0ZS5oCmluZGV4IDMyNzI4ZjVkMWEuLmZjZWY5NTYzOTYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9jb21t YW5kcy9leHBsYWluX3N0YXRlLmgKQEAgLTcxLDYgKzcxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhw bGFpblN0YXRlCiAJCQkJCQkJCSAqIGVudHJ5ICovCiAJLyogc3RhdGUgcmVsYXRlZCB0byB0aGUg Y3VycmVudCBwbGFuIG5vZGUgKi8KIAlFeHBsYWluV29ya2Vyc1N0YXRlICp3b3JrZXJzX3N0YXRl OyAvKiBuZWVkZWQgaWYgcGFyYWxsZWwgcGxhbiAqLworCWJvb2wJCXNpZ25hbGVkOwkJLyogd2hl dGhlciBleHBsYWluIGlzIGNhbGxlZCBieSBzaWduYWwgKi8KIAkvKiBleHRlbnNpb25zICovCiAJ dm9pZAkgICoqZXh0ZW5zaW9uX3N0YXRlOwogCWludAkJCWV4dGVuc2lvbl9zdGF0ZV9hbGxvY2F0 ZWQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCAxMDRiMDU5NTQ0Li4wNWEwMjM5NDBhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTI5Miw2ICsyOTIsNyBAQCBleHRlcm4gdm9pZCBF dmFsUGxhblF1YWxFbmQoRVBRU3RhdGUgKmVwcXN0YXRlKTsKIGV4dGVybiBQbGFuU3RhdGUgKkV4 ZWNJbml0Tm9kZShQbGFuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncyk7CiBleHRl cm4gdm9pZCBFeGVjU2V0RXhlY1Byb2NOb2RlKFBsYW5TdGF0ZSAqbm9kZSwgRXhlY1Byb2NOb2Rl TXRkIGZ1bmN0aW9uKTsKIGV4dGVybiBOb2RlICpNdWx0aUV4ZWNQcm9jTm9kZShQbGFuU3RhdGUg Km5vZGUpOworZXh0ZXJuIHZvaWQgRXhlY1NldEV4ZWNQcm9jTm9kZVJlY3Vyc2UoUGxhblN0YXRl ICpwcyk7CiBleHRlcm4gdm9pZCBFeGVjRW5kTm9kZShQbGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJu IHZvaWQgRXhlY1NodXRkb3duTm9kZShQbGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhl Y1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9ub2Rl KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlz Y2FkbWluLmgKaW5kZXggMWJlZjk4NDcxYy4uYjI2ZDdiOTE5YyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTk2LDcg Kzk2LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlU2Vz c2lvblRpbWVvdXRQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRp bGUgc2lnX2F0b21pY190IExvZ01lbW9yeUNvbnRleHRQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1Q T1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlU3RhdHNVcGRhdGVUaW1lb3V0UGVuZGluZzsK LQorZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBMb2dRdWVyeVBsYW5Q ZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBDaGVja0Ns aWVudENvbm5lY3Rpb25QZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19h dG9taWNfdCBDbGllbnRDb25uZWN0aW9uTG9zdDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaApp bmRleCBhZmVlYjFjYTAxLi5lYTI2MjQyYzg2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaApA QCAtMzUsNiArMzUsOCBAQCB0eXBlZGVmIGVudW0KIAlQUk9DU0lHX1dBTFNORF9JTklUX1NUT1BQ SU5HLAkvKiBhc2sgd2Fsc2VuZGVycyB0byBwcmVwYXJlIGZvciBzaHV0ZG93biAgKi8KIAlQUk9D U0lHX0JBUlJJRVIsCQkJLyogZ2xvYmFsIGJhcnJpZXIgaW50ZXJydXB0ICAqLwogCVBST0NTSUdf TE9HX01FTU9SWV9DT05URVhULCAvKiBhc2sgYmFja2VuZCB0byBsb2cgdGhlIG1lbW9yeSBjb250 ZXh0cyAqLworCVBST0NTSUdfTE9HX1FVRVJZX1BMQU4sCQkvKiBhc2sgYmFja2VuZCB0byBsb2cg cGxhbiBvZiB0aGUgY3VycmVudAorCQkJCQkJCQkgKiBxdWVyeSAqLwogCVBST0NTSUdfUEFSQUxM RUxfQVBQTFlfTUVTU0FHRSwgLyogTWVzc2FnZSBmcm9tIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMg Ki8KIAogCS8qIFJlY292ZXJ5IGNvbmZsaWN0IHJlYXNvbnMgKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3Rjb3AvcHF1ZXJ5LmggYi9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oCmluZGV4IGZh M2NjNWYyZGYuLjc5NDlhYmY3NmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvcHF1ZXJ5 LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9wcXVlcnkuaApAQCAtMjIsNyArMjIsNiBAQCBzdHJ1 Y3QgUGxhbm5lZFN0bXQ7CQkJCS8qIGF2b2lkIGluY2x1ZGluZyBwbGFubm9kZXMuaCBoZXJlICov CiAKIGV4dGVybiBQR0RMTElNUE9SVCBQb3J0YWwgQWN0aXZlUG9ydGFsOwogCi0KIGV4dGVybiBQ b3J0YWxTdHJhdGVneSBDaG9vc2VQb3J0YWxTdHJhdGVneShMaXN0ICpzdG10cyk7CiAKIGV4dGVy biBMaXN0ICpGZXRjaFBvcnRhbFRhcmdldExpc3QoUG9ydGFsIHBvcnRhbCk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CmluZGV4IGMzYjJiOWQ4NjAuLjFh YzU4NGZhN2YgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5j dGlvbnMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMu b3V0CkBAIC0zMTYsMTQgKzMxNiwxNSBAQCBTRUxFQ1QgdGVzdF9jYW5vbmljYWxpemVfcGF0aCgn Li9hYmMvLi9kZWYvLi4vLi9naGkvLi4vLi4vLi4vamtsL21ubycpOwogIC4uL2prbC9tbm8KICgx IHJvdykKIAorLS0gVGVzdCBsb2dnaW5nIGZ1bmN0aW9ucwogLS0KLS0tIHBnX2xvZ19iYWNrZW5k X21lbW9yeV9jb250ZXh0cygpCi0tLQotLS0gTWVtb3J5IGNvbnRleHRzIGFyZSBsb2dnZWQgYW5k IHRoZXkgYXJlIG5vdCByZXR1cm5lZCB0byB0aGUgZnVuY3Rpb24uCistLSBUaGUgb3V0cHV0cyBv ZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUgbm90IHJldHVybmVkIHRv CistLSB0aGUgZnVuY3Rpb24uCiAtLSBGdXJ0aGVybW9yZSwgdGhlaXIgY29udGVudHMgY2FuIHZh cnkgZGVwZW5kaW5nIG9uIHRoZSB0aW1pbmcuIEhvd2V2ZXIsCiAtLSB3ZSBjYW4gYXQgbGVhc3Qg dmVyaWZ5IHRoYXQgdGhlIGNvZGUgZG9lc24ndCBmYWlsLCBhbmQgdGhhdCB0aGUKIC0tIHBlcm1p c3Npb25zIGFyZSBzZXQgcHJvcGVybHkuCiAtLQorLS0gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2Nv bnRleHRzKCkKIFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2Vu ZF9waWQoKSk7CiAgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIAogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMzNyw4ICszMzgsOCBAQCBTRUxFQ1QgcGdfbG9nX2Jh Y2tlbmRfbWVtb3J5X2NvbnRleHRzKHBpZCkgRlJPTSBwZ19zdGF0X2FjdGl2aXR5CiAgdAogKDEg cm93KQogCi1DUkVBVEUgUk9MRSByZWdyZXNzX2xvZ19tZW1vcnk7Ci1TRUxFQ1QgaGFzX2Z1bmN0 aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfbWVtb3J5JywKK0NSRUFURSBST0xFIHJlZ3Jlc3Nf bG9nX2Z1bmN0aW9uOworU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9n X2Z1bmN0aW9uJywKICAgJ3BnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhpbnRlZ2VyKScs ICdFWEVDVVRFJyk7IC0tIG5vCiAgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSAKIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpAQCAtMzQ2LDE1ICszNDcsMTUgQEAgU0VMRUNUIGhhc19mdW5jdGlvbl9w cml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX21lbW9yeScsCiAoMSByb3cpCiAKIEdSQU5UIEVYRUNVVEUg T04gRlVOQ1RJT04gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpCi0gIFRP IHJlZ3Jlc3NfbG9nX21lbW9yeTsKLVNFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdy ZXNzX2xvZ19tZW1vcnknLAorICBUTyByZWdyZXNzX2xvZ19mdW5jdGlvbjsKK1NFTEVDVCBoYXNf ZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlvbicsCiAgICdwZ19sb2dfYmFj a2VuZF9tZW1vcnlfY29udGV4dHMoaW50ZWdlciknLCAnRVhFQ1VURScpOyAtLSB5ZXMKICBoYXNf ZnVuY3Rpb25fcHJpdmlsZWdlIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgdAogKDEgcm93 KQogCi1TRVQgUk9MRSByZWdyZXNzX2xvZ19tZW1vcnk7CitTRVQgUk9MRSByZWdyZXNzX2xvZ19m dW5jdGlvbjsKIFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2Vu ZF9waWQoKSk7CiAgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIAogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM2Myw4ICszNjQsNDQgQEAgU0VMRUNUIHBnX2xvZ19i YWNrZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpKTsKIAogUkVTRVQgUk9MRTsK IFJFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0 cyhpbnRlZ2VyKQotICBGUk9NIHJlZ3Jlc3NfbG9nX21lbW9yeTsKLURST1AgUk9MRSByZWdyZXNz X2xvZ19tZW1vcnk7CisgIEZST00gcmVncmVzc19sb2dfZnVuY3Rpb247CistLSBwZ19sb2dfcXVl cnlfcGxhbigpCistLSBOb3RlIHRoYXQgd2UncmUgdXNpbmcgYSBzbGlnaHRseSBtb3JlIGNvbXBs ZXggcXVlcnkgaGVyZSBiZWNhdXNlCistLSBhIHNpbXBsZSAnU0VMRUNUIHBnX2xvZ19xdWVyeV9w bGFuKHBnX2JhY2tlbmRfcGlkKCkpJyB3b3VsZCBmaW5pc2gKKy0tIGJlZm9yZSBpdCByZWFjaGVz IHRoZSBjb2RlIHBhdGggdGhhdCBhY3R1YWxseSBvdXRwdXRzIHRoZSBwbGFuLgorU0VMRUNUIHJl c3VsdCBGUk9NIChTRUxFQ1QgcGdfbG9nX3F1ZXJ5X3BsYW4ocGdfYmFja2VuZF9waWQoKSkpIHJl c3VsdDsKKyByZXN1bHQgCistLS0tLS0tLQorICh0KQorKDEgcm93KQorCitTRUxFQ1QgaGFzX2Z1 bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfZnVuY3Rpb24nLAorICAncGdfbG9nX3F1ZXJ5 X3BsYW4oaW50ZWdlciknLCAnRVhFQ1VURScpOyAtLSBubworIGhhc19mdW5jdGlvbl9wcml2aWxl Z2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK0dSQU5UIEVYRUNV VEUgT04gRlVOQ1RJT04gcGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlcikKKyAgVE8gcmVncmVzc19s b2dfZnVuY3Rpb247CitTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2df ZnVuY3Rpb24nLAorICAncGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlciknLCAnRVhFQ1VURScpOyAt LSB5ZXMKKyBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgdAorKDEgcm93KQorCitTRVQgUk9MRSByZWdyZXNzX2xvZ19mdW5jdGlvbjsKK1NFTEVDVCBw Z19sb2dfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsKKyBwZ19sb2dfcXVlcnlfcGxhbiAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1JFU0VUIFJPTEU7CitSRVZPS0Ug RVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKQorICBGUk9NIHJl Z3Jlc3NfbG9nX2Z1bmN0aW9uOworRFJPUCBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOwogLS0K IC0tIFRlc3Qgc29tZSBidWlsdC1pbiBTUkZzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzY19m dW5jdGlvbnMuc3FsCmluZGV4IDIzNzkyYzQxMzIuLmQ4YzE0MTAyNGUgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwKQEAgLTEwOSwzOSArMTA5LDY0IEBAIFNFTEVDVCB0 ZXN0X2Nhbm9uaWNhbGl6ZV9wYXRoKCcuL2FiYy8uL2RlZi8uJyk7CiBTRUxFQ1QgdGVzdF9jYW5v bmljYWxpemVfcGF0aCgnLi9hYmMvLi8uL2RlZi8uJyk7CiBTRUxFQ1QgdGVzdF9jYW5vbmljYWxp emVfcGF0aCgnLi9hYmMvLi9kZWYvLi4vLi9naGkvLi4vLi4vLi4vamtsL21ubycpOwogCistLSBU ZXN0IGxvZ2dpbmcgZnVuY3Rpb25zCiAtLQotLS0gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzKCkKLS0tCi0tLSBNZW1vcnkgY29udGV4dHMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUgbm90 IHJldHVybmVkIHRvIHRoZSBmdW5jdGlvbi4KKy0tIFRoZSBvdXRwdXRzIG9mIHRoZXNlIGZ1bmN0 aW9ucyBhcmUgbG9nZ2VkIGFuZCB0aGV5IGFyZSBub3QgcmV0dXJuZWQgdG8KKy0tIHRoZSBmdW5j dGlvbi4KIC0tIEZ1cnRoZXJtb3JlLCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcg b24gdGhlIHRpbWluZy4gSG93ZXZlciwKIC0tIHdlIGNhbiBhdCBsZWFzdCB2ZXJpZnkgdGhhdCB0 aGUgY29kZSBkb2Vzbid0IGZhaWwsIGFuZCB0aGF0IHRoZQogLS0gcGVybWlzc2lvbnMgYXJlIHNl dCBwcm9wZXJseS4KIC0tCiAKKy0tIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpCisK IFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7 CiAKIFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGlkKSBGUk9NIHBnX3N0 YXRfYWN0aXZpdHkKICAgV0hFUkUgYmFja2VuZF90eXBlID0gJ2NoZWNrcG9pbnRlcic7CiAKLUNS RUFURSBST0xFIHJlZ3Jlc3NfbG9nX21lbW9yeTsKK0NSRUFURSBST0xFIHJlZ3Jlc3NfbG9nX2Z1 bmN0aW9uOwogCi1TRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfbWVt b3J5JywKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlv bicsCiAgICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoaW50ZWdlciknLCAnRVhFQ1VU RScpOyAtLSBubwogCiBHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19iYWNrZW5kX21l bW9yeV9jb250ZXh0cyhpbnRlZ2VyKQotICBUTyByZWdyZXNzX2xvZ19tZW1vcnk7CisgIFRPIHJl Z3Jlc3NfbG9nX2Z1bmN0aW9uOwogCi1TRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVn cmVzc19sb2dfbWVtb3J5JywKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNz X2xvZ19mdW5jdGlvbicsCiAgICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoaW50ZWdl ciknLCAnRVhFQ1VURScpOyAtLSB5ZXMKIAotU0VUIFJPTEUgcmVncmVzc19sb2dfbWVtb3J5Owor U0VUIFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247CiBTRUxFQ1QgcGdfbG9nX2JhY2tlbmRfbWVt b3J5X2NvbnRleHRzKHBnX2JhY2tlbmRfcGlkKCkpOwogUkVTRVQgUk9MRTsKIAogUkVWT0tFIEVY RUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIp Ci0gIEZST00gcmVncmVzc19sb2dfbWVtb3J5OworICBGUk9NIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9u OworCistLSBwZ19sb2dfcXVlcnlfcGxhbigpCistLSBOb3RlIHRoYXQgd2UncmUgdXNpbmcgYSBz bGlnaHRseSBtb3JlIGNvbXBsZXggcXVlcnkgaGVyZSBiZWNhdXNlCistLSBhIHNpbXBsZSAnU0VM RUNUIHBnX2xvZ19xdWVyeV9wbGFuKHBnX2JhY2tlbmRfcGlkKCkpJyB3b3VsZCBmaW5pc2gKKy0t IGJlZm9yZSBpdCByZWFjaGVzIHRoZSBjb2RlIHBhdGggdGhhdCBhY3R1YWxseSBvdXRwdXRzIHRo ZSBwbGFuLgorCitTRUxFQ1QgcmVzdWx0IEZST00gKFNFTEVDVCBwZ19sb2dfcXVlcnlfcGxhbihw Z19iYWNrZW5kX3BpZCgpKSkgcmVzdWx0OworCitTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVn ZSgncmVncmVzc19sb2dfZnVuY3Rpb24nLAorICAncGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlcikn LCAnRVhFQ1VURScpOyAtLSBubworCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19x dWVyeV9wbGFuKGludGVnZXIpCisgIFRPIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOworCitTRUxFQ1Qg aGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfZnVuY3Rpb24nLAorICAncGdfbG9n X3F1ZXJ5X3BsYW4oaW50ZWdlciknLCAnRVhFQ1VURScpOyAtLSB5ZXMKKworU0VUIFJPTEUgcmVn cmVzc19sb2dfZnVuY3Rpb247CitTRUxFQ1QgcGdfbG9nX3F1ZXJ5X3BsYW4ocGdfYmFja2VuZF9w aWQoKSk7CitSRVNFVCBST0xFOworCitSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sb2df cXVlcnlfcGxhbihpbnRlZ2VyKQorICBGUk9NIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOwogCi1EUk9Q IFJPTEUgcmVncmVzc19sb2dfbWVtb3J5OworRFJPUCBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9u OwogCiAtLQogLS0gVGVzdCBzb21lIGJ1aWx0LWluIFNSRnMKCmJhc2UtY29tbWl0OiBmYzMyYmUz Yzk0MWY5ZDk4ZGQ5ZjU0OTE1M2E1ZmNlYTZjM2U5YjhiCi0tIAoyLjQ4LjEKCg== --=_e533beb4d663edc3f1e5dbeb1558d3bb--