Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7bo3-005WTq-19 for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 16:19:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7bo1-00BIpZ-0K for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 16:19:05 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7bo0-00BIpP-2I for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2026 16:19:05 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7bny-00000002CW1-16tK for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2026 16:19:04 +0000 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b982b0889d8so716204266b.2 for ; Tue, 31 Mar 2026 09:19:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774973942; cv=none; d=google.com; s=arc-20240605; b=Bi1bPbg2yw3GLKEgrahdGWD3r7B5P+1jW46z6mimHZl78ObJeOYfRkfHhnn2Xah5sU geujMljaW6X52GEgH6ZKd+tEokBVR2NjiLRGEs6o8P80Nzlvr1Fvo0dtolOl859awTDd YgVM0MWbqdWOXmbEjnSv039Pv0Td4k5VEWyKEeWvwPmGNrDBCcEwsj2cf/DVLhgQ6UT2 6xrFxVSQSb72JJ+hcr8RTJi1wW3TsuZYNJsIERIHMyRttv+4mtHTW6NGphSwfJgl0KJc SV82SNifFA9o9jRK/P6KywKHuA9M73831g6XxqsMvipZ2YeQQT0rsNuG8ETjrxYX7EQY Zcsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=zbsAP/47n4vdnsbyLNLcP5hDlU6UbRaEUglWPYq7uco=; fh=RPtb2bA00CamRn+MEFVuvHJZBDnh+o5KQkmVxrwQjMU=; b=dhtODqJd11bM2P3ONSvoBZBFUykDD5YnapecGHzs3umGmn6j0ClkHqlb+yOjPXpfDr uAry8nJRAgQEbG64bAXyKxUu9N0EF2Cq0U3eqJ0qS84G1+L3eTqYrPd/9U/G6KB8cWir hs6MiarF7tNCM+Dj8DBTui8B5MOj9aXXDxDb/5cIgKCr4JUfCBUVOgO3rkCuOqgTjinI 7jFHCl4mP2Zt7VzYnRUIQOxl/M6Z3mpl0OXhfOivFaAzxzIVSOKv8C4xgSIWug7f8T// zsYTxf/DUJHeJCQdTUpGZbh3LJikK08zlZNbKrFOwen433Ujl5+C5GYYXLnLtuM1Co9D khhA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774973942; x=1775578742; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=zbsAP/47n4vdnsbyLNLcP5hDlU6UbRaEUglWPYq7uco=; b=LzWkluHcaUvGhg7LUxWyAPdXc7GVGyDTQEGTptDnzOTZuqu7VUqLC8vte4XI5FoEYG 1canSI4RBtgqybqqWo1XCSpNJsxNpspXmHQGCD22LGD9Bce/DazQZKL9cqd9yZUOog7q x9Bl50XyEpjwBovmyDfvmjykNsBpok952FuDCe4RWmXZyNwUvnJbKnfZZ6MCXL4aREph fdWHykUSSh1Fm2QztbZ2mVogCyyg5p9rBnnKXm8xk4GnLyPQ4EqLQcigWpjQr0/Fw/CT amYzvBMsz2az7axzc381GcBQ6ZJ+uY5bFe50YSpkpzqLd6HeIsAyaigCCOyjO8KJsBCx 6l2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774973942; x=1775578742; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=zbsAP/47n4vdnsbyLNLcP5hDlU6UbRaEUglWPYq7uco=; b=Mm00nJYu7/zJOZnjIQFbSF64CxeOFEshGwN+kPV+DAe7CjtoToNwaNgVsUQup/BtzX sMvTLzVNkgUyeGirbOgP0APVrkUWs1Mi2F9jZN38GN+KqLiEF9SI6zmai0Jki21XwVZs 1dgSgC3H98l58T3u+NgqIz5CfbHJzuWgjs3QlenDtxBQZCO9GAwJBju/JqQ3BSLkHDYI /yuVhDXGu7kIZMJ39+p6CwDw440LnEj4ntI1OFaow4+ZvQVVIZlMfQwN0tuoEXKIhraA 0kSc+GIetbMIZ9B6vIKnE21jvUBTAjzGPRVJCM0F/OE/4jR4/wJ9SMDd2q7LorAzaaww TKhg== X-Gm-Message-State: AOJu0YxlavIN4EoK/WAzFPvvEYpl4sptB3ANIvPl5ow1l6LfG4ktl1w4 sHTFTH+v4eItyToFK90k5HBFauYloy1QT3aZ2zN+ZEbdqg0nqJUWasw+grIv6AdPdHPr5lDAEMl X5Zzeh/qeSIAMNQPbU4BakV6hHBAkJ78= X-Gm-Gg: ATEYQzxA8B50nFR6FrwfXDPRLAds04p1RTM6KkPxgpBiqYoskjFZETscgtsv5CmNT8s NtjoRBMOS7MgI6vgQGlUoOlvbveb0xCjj5jgrmnCLRjkQs/3YTr09sMduwstk8LpZkaYedtd1DC sPD41IISz9QXl9m1TceSM9BNhcimWFPqc8lpeo7rY0NTZCs8yyOoQGIG4AxhMnEXP76jlme6Wot ODdq4kcrT3xphkjwR/rnWt8w4GkBvgyE9IxzvHZ5JTar3YKTQfPPQ5QhavMsLSeyJ4OHkvHsqjO +5WQgIkpOdVlWhtQQCbcGD0ndknEwlw2IurD4/o= X-Received: by 2002:a17:906:4709:b0:b98:6a8f:7916 with SMTP id a640c23a62f3a-b9c1390270bmr17495866b.15.1774973941455; Tue, 31 Mar 2026 09:19:01 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Tue, 31 Mar 2026 12:18:48 -0400 X-Gm-Features: AQROBzDTfhfnCKIH1cYfCLzJIT45MbrsfG-_p9QaDGuZzPOm3Pn4ALRdwm7Efrk Message-ID: Subject: Re: Add custom EXPLAIN options support to auto_explain To: Matheus Alcantara Cc: pgsql-hackers@lists.postgresql.org, Lukas Fittl , Tom Lane Content-Type: multipart/mixed; boundary="000000000000446bbd064e545385" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000446bbd064e545385 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 30, 2026 at 5:49=E2=80=AFPM Robert Haas = wrote: > I'm currently poking at some ideas for fixing this... more soon. Here are some patches. I got started poking at this in earnest because, on the pg_plan_advice thread, Lukas was saying that instead of adopting pg_collect_advice, we should just add an option to send advice strings for each executed query to the server log. I went to implement that and then felt like it should really be part of auto_explain rather than its own thing, which took me down a bit of a rathole. But I eventually found my way back out of it, so here's a patch set implementing auto_explain.log_extension_options. There were two main complications. One is that I didn't want to assume all options are Boolean. Right now, at least in core, they are: both pg_overexplain and pg_plan_advice only use Booleans. But, that might change in the future, or already be true in other extensions that other people have written. Also, we might at some point in the future want to consider folding the built-in options back into the same mechanism -- i.e. get rid of log_extension_options and a pile of the other parameters and just have log_options -- and then we'd need to handle FORMAT, at least. The other big complication is that right now there is no way to sanity check an EXPLAIN extension option except try to set it and see if things go boom. That would mean that if you were to configure auto_explain.log_extension_options=3D'KANGAROO', the server would basically just go down. I mean, technically it would be up, but every query would ERROR when auto_explain tried to kangaroo-ify the EXPLAIN output. That seems not so nice. So I ended up with this: - 0001 does a bit of refactoring to expose some of the logic in SplitIdentifierString and similar functions in a way that allows for reuse. - 0002 modifies the "explain extension" option mechanism so that each explain extension option has an associated GUC check handler. - 0003 then uses those things to implement the feature One thing that I suspect Tom in particular may be unhappy about (and thus I'm copying him...) is that the validation framework in 0002 means that you have to load EXPLAIN-option providers before you can use their options in the value of the new GUC. We try pretty hard to make sure that the legal values for a GUC don't depend on the values of other GUCs, and this is technically not a violation of that principle because it's making the legal values for a GUC depend on module loading, not other GUCs, so maybe it's fine. But on the other hand, maybe it isn't. I'm not quite sure what the reasonable alternative is: I guess we could instead add a "soft apply" hook for EXPLAIN options where the contract is that the EXPLAIN option provider is to do nothing if the option is not valid rather than complaining, but then setting an invalid option wouldn't ever give any kind of error -- it would just not work. That seems pretty unpleasant. Anyway, if you apply all these patches it does solve the problem that pg_collect_advice was targeting, modulo the need for some log parsing. You can do this: pg_plan_advice.always_store_advice_details =3D on auto_explain.log_min_duration =3D 0 auto_explain.log_extension_options =3D 'plan_advice' And then you get log output like this: 2026-03-31 12:16:18.784 EDT [75224] LOG: duration: 0.013 ms plan: Query Text: select 1; Result (cost=3D0.00..0.01 rows=3D1 width=3D4) Generated Plan Advice: NO_GATHER("*RESULT*") Thoughts? --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000446bbd064e545385 Content-Type: application/octet-stream; name="v1-0003-auto_explain-Add-new-GUC-auto_explain.log_extensi.patch" Content-Disposition: attachment; filename="v1-0003-auto_explain-Add-new-GUC-auto_explain.log_extensi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnesn4qz2 RnJvbSAyYTRlNzVkNjYxZjYxMjQwMDIyNmNhMjExMTRiYTE4YTMwOGE2ODhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMzEgTWFyIDIwMjYgMTE6NDg6NDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDMv M10gYXV0b19leHBsYWluOiBBZGQgbmV3IEdVQywKIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9u X29wdGlvbnMuCgpUaGUgYXNzb2NpYXRlZCB2YWx1ZSBzaG91bGQgbG9vayBsaWtlIHNvbWV0aGlu ZyB0aGF0IGNvdWxkIGJlCnBhcnQgb2YgYW4gRVhQTEFJTiBvcHRpb25zIGxpc3QsIGJ1dCByZXN0 cmljdGVkIHRvIEVYUExBSU4gb3B0aW9ucwphZGRlZCBieSBleHRlbnNpb25zLgoKRm9yIGV4YW1w bGUsIGlmIHBnX292ZXJleHBsYWluIGlzIGxvYWRlZCwgeW91IGNvdWxkIHNldAphdXRvX2V4cGxh aW4ubG9nX2V4dGVuc2lvbl9vcHRpb25zID0gJ0RFQlVHLCBSQU5HRV9UQUJMRScuCllvdSBjYW4g YWxzbyBzcGVjaWZ5IGFyZ3VtZW50cyB0byB0aGVzZSBvcHRpb25zIGluIHRoZSBzYW1lIG1hbm5l cgphcyBub3JtYWwgZS5nLiAnREVCVUcgMSwgUkFOR0VfVEFCTEUgZmFsc2UnLgotLS0KIGNvbnRy aWIvYXV0b19leHBsYWluL01ha2VmaWxlICAgICAgIHwgICAyICstCiBjb250cmliL2F1dG9fZXhw bGFpbi9hdXRvX2V4cGxhaW4uYyB8IDM3OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBj b250cmliL2F1dG9fZXhwbGFpbi9tZXNvbi5idWlsZCAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwv YXV0by1leHBsYWluLnNnbWwgICAgICB8ICAyMyArKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgfCAgIDIgKwogNSBmaWxlcyBjaGFuZ2VkLCA0MDUgaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYXV0b19leHBsYWluL01ha2VmaWxl IGIvY29udHJpYi9hdXRvX2V4cGxhaW4vTWFrZWZpbGUKaW5kZXggOTRhYjI4ZTdjMDYuLjhhZGFi YTBjM2FiIDEwMDY0NAotLS0gYS9jb250cmliL2F1dG9fZXhwbGFpbi9NYWtlZmlsZQorKysgYi9j b250cmliL2F1dG9fZXhwbGFpbi9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAgT0JKUyA9IFwKIAlh dXRvX2V4cGxhaW4ubwogUEdGSUxFREVTQyA9ICJhdXRvX2V4cGxhaW4gLSBsb2dnaW5nIGZhY2ls aXR5IGZvciBleGVjdXRpb24gcGxhbnMiCiAKLVJFR1JFU1MgPSBhbHRlcl9yZXNldAorUkVHUkVT UyA9IGFsdGVyX3Jlc2V0IGV4dGVuc2lvbl9vcHRpb25zCiAKIFRBUF9URVNUUyA9IDEKIApkaWZm IC0tZ2l0IGEvY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19leHBsYWluLmMgYi9jb250cmliL2F1 dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYwppbmRleCBlODU2Y2QzNWE2Zi4uMTMyYzMwMjVmMzMg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCisrKyBiL2Nv bnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCkBAIC0xNSwxMiArMTUsMTcgQEAKICNp bmNsdWRlIDxsaW1pdHMuaD4KIAogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIKICNp bmNsdWRlICJjb21tYW5kcy9leHBsYWluX2Zvcm1hdC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2V4 cGxhaW5fc3RhdGUuaCIKICNpbmNsdWRlICJjb21tb24vcGdfcHJuZy5oIgogI2luY2x1ZGUgImV4 ZWN1dG9yL2luc3RydW1lbnQuaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNs dWRlICJub2Rlcy92YWx1ZS5oIgorI2luY2x1ZGUgInBhcnNlci9zY2Fuc3VwLmgiCiAjaW5jbHVk ZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCiBQR19NT0RVTEVf TUFHSUNfRVhUKAogCQkJCQkubmFtZSA9ICJhdXRvX2V4cGxhaW4iLApAQCAtNDEsNiArNDYsMzEg QEAgc3RhdGljIGludAlhdXRvX2V4cGxhaW5fbG9nX2Zvcm1hdCA9IEVYUExBSU5fRk9STUFUX1RF WFQ7CiBzdGF0aWMgaW50CWF1dG9fZXhwbGFpbl9sb2dfbGV2ZWwgPSBMT0c7CiBzdGF0aWMgYm9v bCBhdXRvX2V4cGxhaW5fbG9nX25lc3RlZF9zdGF0ZW1lbnRzID0gZmFsc2U7CiBzdGF0aWMgZG91 YmxlIGF1dG9fZXhwbGFpbl9zYW1wbGVfcmF0ZSA9IDE7CitzdGF0aWMgY2hhciAqYXV0b19leHBs YWluX2xvZ19leHRlbnNpb25fb3B0aW9ucyA9IE5VTEw7CisKKy8qCisgKiBQYXJzZWQgZm9ybSBv ZiBvbmUgb3B0aW9uIGZyb20gYXV0b19leHBsYWluLmxvZ19leHRlbnNpb25fb3B0aW9ucy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgYXV0b19leHBsYWluX29wdGlvbgoreworCWNoYXIJICAgKm5hbWU7 CisJY2hhcgkgICAqdmFsdWU7CisJTm9kZVRhZwkJdHlwZTsKK30gYXV0b19leHBsYWluX29wdGlv bjsKKworLyoKKyAqIFBhcnNlZCBmb3JtIG9mIHRoZSBlbnRpcmV0eSBvZiBhdXRvX2V4cGxhaW4u bG9nX2V4dGVuc2lvbl9vcHRpb25zLCBzdG9yZWQKKyAqIGFzIEdVQyBleHRyYS4gVGhlIG9wdGlv bnNbXSBhcnJheSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0aGUgc3RyaW5nCisgKiBmb2xsb3dp bmcgdGhlIGFycmF5LgorICovCit0eXBlZGVmIHN0cnVjdCBhdXRvX2V4cGxhaW5fZXh0ZW5zaW9u X29wdGlvbnMKK3sKKwlpbnQJCQlub3B0aW9uczsKKwlhdXRvX2V4cGxhaW5fb3B0aW9uIG9wdGlv bnNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKKwkvKiBhIG51bGwtdGVybWluYXRlZCBjb3B5IG9m IHRoZSBHVUMgc3RyaW5nIGZvbGxvd3MgdGhlIGFycmF5ICovCit9IGF1dG9fZXhwbGFpbl9leHRl bnNpb25fb3B0aW9uczsKKworc3RhdGljIGF1dG9fZXhwbGFpbl9leHRlbnNpb25fb3B0aW9ucyAq ZXh0ZW5zaW9uX29wdGlvbnMgPSBOVUxMOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19l bnVtX2VudHJ5IGZvcm1hdF9vcHRpb25zW10gPSB7CiAJeyJ0ZXh0IiwgRVhQTEFJTl9GT1JNQVRf VEVYVCwgZmFsc2V9LApAQCAtODgsNiArMTE4LDE1IEBAIHN0YXRpYyB2b2lkIGV4cGxhaW5fRXhl Y3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiBzdGF0aWMgdm9pZCBleHBsYWluX0V4ZWN1 dG9yRmluaXNoKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKIHN0YXRpYyB2b2lkIGV4cGxhaW5fRXhl Y3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpOwogCitzdGF0aWMgYm9vbCBjaGVja19sb2df ZXh0ZW5zaW9uX29wdGlvbnMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJ CUd1Y1NvdXJjZSBzb3VyY2UpOworc3RhdGljIHZvaWQgYXNzaWduX2xvZ19leHRlbnNpb25fb3B0 aW9ucyhjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQgKmV4dHJhKTsKK3N0YXRpYyB2b2lkIGFwcGx5 X2V4dGVuc2lvbl9vcHRpb25zKEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQlhdXRvX2V4cGxh aW5fZXh0ZW5zaW9uX29wdGlvbnMgKmV4dCk7CitzdGF0aWMgY2hhciAqYXV0b19leHBsYWluX3Nj YW5fbGl0ZXJhbChjaGFyICoqZW5kcCwgY2hhciAqKm5leHRwKTsKK3N0YXRpYyBpbnQJYXV0b19l eHBsYWluX3NwbGl0X29wdGlvbnMoY2hhciAqcmF3c3RyaW5nLAorCQkJCQkJCQkJICAgYXV0b19l eHBsYWluX29wdGlvbiAqb3B0aW9ucywKKwkJCQkJCQkJCSAgIGludCBtYXhvcHRpb25zLCBjaGFy ICoqZXJybXNnKTsKIAogLyoKICAqIE1vZHVsZSBsb2FkIGNhbGxiYWNrCkBAIC0yMzIsNiArMjcx LDE3IEBAIF9QR19pbml0KHZvaWQpCiAJCQkJCQkJIE5VTEwsCiAJCQkJCQkJIE5VTEwpOwogCisJ RGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoImF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29w dGlvbnMiLAorCQkJCQkJCSAgICJFeHRlbnNpb24gRVhQTEFJTiBvcHRpb25zIHRvIGJlIGFkZGVk LiIsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAmYXV0b19leHBsYWluX2xvZ19leHRlbnNp b25fb3B0aW9ucywKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIFBHQ19TVVNFVCwKKwkJCQkJ CQkgICAwLAorCQkJCQkJCSAgIGNoZWNrX2xvZ19leHRlbnNpb25fb3B0aW9ucywKKwkJCQkJCQkg ICBhc3NpZ25fbG9nX2V4dGVuc2lvbl9vcHRpb25zLAorCQkJCQkJCSAgIE5VTEwpOworCiAJRGVm aW5lQ3VzdG9tUmVhbFZhcmlhYmxlKCJhdXRvX2V4cGxhaW4uc2FtcGxlX3JhdGUiLAogCQkJCQkJ CSAiRnJhY3Rpb24gb2YgcXVlcmllcyB0byBwcm9jZXNzLiIsCiAJCQkJCQkJIE5VTEwsCkBAIC00 MDQsNiArNDU0LDggQEAgZXhwbGFpbl9FeGVjdXRvckVuZChRdWVyeURlc2MgKnF1ZXJ5RGVzYykK IAkJCWVzLT5mb3JtYXQgPSBhdXRvX2V4cGxhaW5fbG9nX2Zvcm1hdDsKIAkJCWVzLT5zZXR0aW5n cyA9IGF1dG9fZXhwbGFpbl9sb2dfc2V0dGluZ3M7CiAKKwkJCWFwcGx5X2V4dGVuc2lvbl9vcHRp b25zKGVzLCBleHRlbnNpb25fb3B0aW9ucyk7CisKIAkJCUV4cGxhaW5CZWdpbk91dHB1dChlcyk7 CiAJCQlFeHBsYWluUXVlcnlUZXh0KGVzLCBxdWVyeURlc2MpOwogCQkJRXhwbGFpblF1ZXJ5UGFy YW1ldGVycyhlcywgcXVlcnlEZXNjLT5wYXJhbXMsIGF1dG9fZXhwbGFpbl9sb2dfcGFyYW1ldGVy X21heF9sZW5ndGgpOwpAQCAtNDEyLDYgKzQ2NCwxMiBAQCBleHBsYWluX0V4ZWN1dG9yRW5kKFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjKQogCQkJCUV4cGxhaW5QcmludFRyaWdnZXJzKGVzLCBxdWVyeURl c2MpOwogCQkJaWYgKGVzLT5jb3N0cykKIAkJCQlFeHBsYWluUHJpbnRKSVRTdW1tYXJ5KGVzLCBx dWVyeURlc2MpOworCQkJaWYgKGV4cGxhaW5fcGVyX3BsYW5faG9vaykKKwkJCQkoKmV4cGxhaW5f cGVyX3BsYW5faG9vaykgKHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQsCisJCQkJCQkJCQkJICBOVUxM LCBlcywKKwkJCQkJCQkJCQkgIHF1ZXJ5RGVzYy0+c291cmNlVGV4dCwKKwkJCQkJCQkJCQkgIHF1 ZXJ5RGVzYy0+cGFyYW1zLAorCQkJCQkJCQkJCSAgcXVlcnlEZXNjLT5lc3RhdGUtPmVzX3F1ZXJ5 RW52KTsKIAkJCUV4cGxhaW5FbmRPdXRwdXQoZXMpOwogCiAJCQkvKiBSZW1vdmUgbGFzdCBsaW5l IGJyZWFrICovCkBAIC00NDUsMyArNTAzLDMyMyBAQCBleHBsYWluX0V4ZWN1dG9yRW5kKFF1ZXJ5 RGVzYyAqcXVlcnlEZXNjKQogCWVsc2UKIAkJc3RhbmRhcmRfRXhlY3V0b3JFbmQocXVlcnlEZXNj KTsKIH0KKworLyoKKyAqIEdVQyBjaGVjayBob29rIGZvciBhdXRvX2V4cGxhaW4ubG9nX2V4dGVu c2lvbl9vcHRpb25zLgorICovCitzdGF0aWMgYm9vbAorY2hlY2tfbG9nX2V4dGVuc2lvbl9vcHRp b25zKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKK3sKKwlj aGFyCSAgICpyYXdzdHJpbmc7CisJYXV0b19leHBsYWluX2V4dGVuc2lvbl9vcHRpb25zICpyZXN1 bHQ7CisJYXV0b19leHBsYWluX29wdGlvbiAqb3B0aW9uczsKKwlpbnQJCQltYXhvcHRpb25zID0g ODsKKwlTaXplCQlyYXdzdHJpbmdfbGVuOworCVNpemUJCWFsbG9jc2l6ZTsKKwljaGFyCSAgICpl cnJtc2c7CisKKwkvKiBOVUxMIG9yIGVtcHR5IHN0cmluZyBtZWFucyBubyBvcHRpb25zLiAqLwor CWlmICgqbmV3dmFsID09IE5VTEwgfHwgKCpuZXd2YWwpWzBdID09ICdcMCcpCisJeworCQkqZXh0 cmEgPSBOVUxMOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyYXdzdHJpbmdfbGVuID0gc3RybGVu KCpuZXd2YWwpICsgMTsKKworcmV0cnk6CisJLyogVHJ5IHRvIGFsbG9jYXRlIGFuIGF1dG9fZXhw bGFpbl9leHRlbnNpb25fb3B0aW9ucyBvYmplY3QuICovCisJYWxsb2NzaXplID0gb2Zmc2V0b2Yo YXV0b19leHBsYWluX2V4dGVuc2lvbl9vcHRpb25zLCBvcHRpb25zKSArCisJCXNpemVvZihhdXRv X2V4cGxhaW5fb3B0aW9uKSAqIG1heG9wdGlvbnMgKworCQlyYXdzdHJpbmdfbGVuOworCXJlc3Vs dCA9IChhdXRvX2V4cGxhaW5fZXh0ZW5zaW9uX29wdGlvbnMgKikgZ3VjX21hbGxvYyhMT0csIGFs bG9jc2l6ZSk7CisJaWYgKHJlc3VsdCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBD b3B5IHRoZSBzdHJpbmcgYWZ0ZXIgdGhlIG9wdGlvbnMgYXJyYXkuICovCisJcmF3c3RyaW5nID0g KGNoYXIgKikgJnJlc3VsdC0+b3B0aW9uc1ttYXhvcHRpb25zXTsKKwltZW1jcHkocmF3c3RyaW5n LCAqbmV3dmFsLCByYXdzdHJpbmdfbGVuKTsKKworCS8qIFBhcnNlLiAqLworCW9wdGlvbnMgPSBy ZXN1bHQtPm9wdGlvbnM7CisJcmVzdWx0LT5ub3B0aW9ucyA9IGF1dG9fZXhwbGFpbl9zcGxpdF9v cHRpb25zKHJhd3N0cmluZywgb3B0aW9ucywKKwkJCQkJCQkJCQkJCSAgbWF4b3B0aW9ucywgJmVy cm1zZyk7CisJaWYgKHJlc3VsdC0+bm9wdGlvbnMgPCAwKQorCXsKKwkJR1VDX2NoZWNrX2VycmRl dGFpbCgiJXMiLCBlcnJtc2cpOworCQlndWNfZnJlZShyZXN1bHQpOworCQlyZXR1cm4gZmFsc2U7 CisJfQorCisJLyoKKwkgKiBSZXRyeSB3aXRoIGEgbGFyZ2VyIGFycmF5IGlmIG5lZWRlZC4KKwkg KgorCSAqIEl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciB0aGlzIHRvIGxvb3AgbW9yZSB0aGFu IG9uY2UsIGJlY2F1c2UKKwkgKiBhdXRvX2V4cGxhaW5fc3BsaXRfb3B0aW9ucyB0ZWxscyB1cyBo b3cgbWFueSBlbnRyaWVzIGFyZSBuZWVkZWQuCisJICovCisJaWYgKHJlc3VsdC0+bm9wdGlvbnMg PiBtYXhvcHRpb25zKQorCXsKKwkJbWF4b3B0aW9ucyA9IHJlc3VsdC0+bm9wdGlvbnM7CisJCWd1 Y19mcmVlKHJlc3VsdCk7CisJCWdvdG8gcmV0cnk7CisJfQorCisJLyogVmFsaWRhdGUgZWFjaCBv cHRpb24gYWdhaW5zdCBpdHMgcmVnaXN0ZXJlZCBjaGVjayBoYW5kbGVyLiAqLworCWZvciAoaW50 IGkgPSAwOyBpIDwgcmVzdWx0LT5ub3B0aW9uczsgaSsrKQorCXsKKwkJaWYgKCFHVUNDaGVja0V4 cGxhaW5FeHRlbnNpb25PcHRpb24ob3B0aW9uc1tpXS5uYW1lLCBvcHRpb25zW2ldLnZhbHVlLAor CQkJCQkJCQkJCQlvcHRpb25zW2ldLnR5cGUpKQorCQl7CisJCQlndWNfZnJlZShyZXN1bHQpOwor CQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJKmV4dHJhID0gcmVzdWx0OworCXJldHVybiB0 cnVlOworfQorCisvKgorICogR1VDIGFzc2lnbiBob29rIGZvciBhdXRvX2V4cGxhaW4ubG9nX2V4 dGVuc2lvbl9vcHRpb25zLgorICovCitzdGF0aWMgdm9pZAorYXNzaWduX2xvZ19leHRlbnNpb25f b3B0aW9ucyhjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQgKmV4dHJhKQoreworCWV4dGVuc2lvbl9v cHRpb25zID0gKGF1dG9fZXhwbGFpbl9leHRlbnNpb25fb3B0aW9ucyAqKSBleHRyYTsKK30KKwor LyoKKyAqIEFwcGx5IHBhcnNlZCBleHRlbnNpb24gb3B0aW9ucyB0byBhbiBFeHBsYWluU3RhdGUu CisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9leHRlbnNpb25fb3B0aW9ucyhFeHBsYWluU3RhdGUg KmVzLCBhdXRvX2V4cGxhaW5fZXh0ZW5zaW9uX29wdGlvbnMgKmV4dCkKK3sKKwlpZiAoZXh0ID09 IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgZXh0LT5ub3B0aW9uczsg aSsrKQorCXsKKwkJYXV0b19leHBsYWluX29wdGlvbiAqb3B0ID0gJmV4dC0+b3B0aW9uc1tpXTsK KwkJRGVmRWxlbSAgICAqZGVmOworCQlOb2RlCSAgICphcmc7CisKKwkJaWYgKG9wdC0+dmFsdWUg PT0gTlVMTCkKKwkJCWFyZyA9IE5VTEw7CisJCWVsc2UgaWYgKG9wdC0+dHlwZSA9PSBUX0ludGVn ZXIpCisJCQlhcmcgPSAoTm9kZSAqKSBtYWtlSW50ZWdlcihzdHJ0b2wob3B0LT52YWx1ZSwgTlVM TCwgMCkpOworCQllbHNlIGlmIChvcHQtPnR5cGUgPT0gVF9GbG9hdCkKKwkJCWFyZyA9IChOb2Rl ICopIG1ha2VGbG9hdChvcHQtPnZhbHVlKTsKKwkJZWxzZQorCQkJYXJnID0gKE5vZGUgKikgbWFr ZVN0cmluZyhvcHQtPnZhbHVlKTsKKworCQlkZWYgPSBtYWtlRGVmRWxlbShvcHQtPm5hbWUsIGFy ZywgLTEpOworCQlBcHBseUV4dGVuc2lvbkV4cGxhaW5PcHRpb24oZXMsIGRlZiwgTlVMTCk7CisJ fQorfQorCisvKgorICogYXV0b19leHBsYWluX3NjYW5fbGl0ZXJhbCAtIEluLXBsYWNlIHNjYW5u ZXIgZm9yIHNpbmdsZS1xdW90ZWQgc3RyaW5nCisgKiBsaXRlcmFscy4KKyAqCisgKiBUaGlzIGlz IHRoZSBzaW5nbGUtcXVvdGUgYW5hbG9nIG9mIHNjYW5fcXVvdGVkX2lkZW50aWZpZXIgZnJvbSB2 YXJsZW5hLmMuCisgKi8KK3N0YXRpYyBjaGFyICoKK2F1dG9fZXhwbGFpbl9zY2FuX2xpdGVyYWwo Y2hhciAqKmVuZHAsIGNoYXIgKipuZXh0cCkKK3sKKwljaGFyCSAgICp0b2tlbiA9ICpuZXh0cCAr IDE7CisKKwlmb3IgKDs7KQorCXsKKwkJKmVuZHAgPSBzdHJjaHIoKm5leHRwICsgMSwgJ1wnJyk7 CisJCWlmICgqZW5kcCA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CQkvKiBtaXNtYXRjaGVkIHF1 b3RlcyAqLworCQlpZiAoKCplbmRwKVsxXSAhPSAnXCcnKQorCQkJYnJlYWs7CQkJCS8qIGZvdW5k IGVuZCBvZiBsaXRlcmFsICovCisJCS8qIENvbGxhcHNlIGFkamFjZW50IHF1b3RlcyBpbnRvIG9u ZSBxdW90ZSwgYW5kIGxvb2sgYWdhaW4gKi8KKwkJbWVtbW92ZSgqZW5kcCwgKmVuZHAgKyAxLCBz dHJsZW4oKmVuZHApKTsKKwkJKm5leHRwID0gKmVuZHA7CisJfQorCS8qICplbmRwIG5vdyBwb2lu dHMgYXQgdGhlIHRlcm1pbmF0aW5nIHF1b3RlICovCisJKm5leHRwID0gKmVuZHAgKyAxOworCisJ cmV0dXJuIHRva2VuOworfQorCisvKgorICogYXV0b19leHBsYWluX3NwbGl0X29wdGlvbnMgLSBQ YXJzZSBhbiBvcHRpb24gc3RyaW5nIGludG8gYW4gYXJyYXkgb2YKKyAqIGF1dG9fZXhwbGFpbl9v cHRpb24gc3RydWN0cy4KKyAqCisgKiBNdWNoIG9mIHRoaXMgbG9naWMgaXMgc2ltaWxhciB0byBT cGxpdElkZW50aWZpZXJTdHJpbmcgYW5kIGZyaWVuZHMsIGJ1dCBvdXIKKyAqIG5lZWRzIGFyZSBk aWZmZXJlbnQgZW5vdWdoIHRoYXQgd2Ugcm9sbCBvdXIgb3duIHBhcnNpbmcgbG9naWMuIFRoZSBn b2FsIGhlcmUKKyAqIGlzIHRvIGFjY2VwdCB0aGUgc2FtZSBzeW50YXggdGhhdCB0aGUgbWFpbiBw YXJzZXIgd291bGQgYWNjZXB0cyBpbnNpZGUgb2YKKyAqIGFuIEVYUExBSU4gb3B0aW9uIGxpc3Qu IFdoaWxlIHdlIGNhbid0IGRvIHRoYXQgcGVyZmVjdGx5IHdpdGhvdXQgYWRkaW5nIGEKKyAqIGxv dCBtb3JlIGNvZGUsIHRoZSBnb2FsIG9mIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgdG8gYmUgY2xv c2UgZW5vdWdoIHRoYXQKKyAqIHVzZXJzIGRvbid0IHJlYWxseSBub3RpY2UgdGhlIGRpZmZlcmVu Y2VzLgorICoKKyAqIFRoZSBpbnB1dCBzdHJpbmcgaXMgbW9kaWZpZWQgaW4gcGxhY2UgKG51bGwt dGVybWluYXRlZCwgZG93bmNhc2VkLCBxdW90ZXMKKyAqIGNvbGxhcHNlZCkuICBBbGwgbmFtZSBh bmQgdmFsdWUgcG9pbnRlcnMgaW4gdGhlIG91dHB1dCBhcnJheSByZWZlciBpbnRvCisgKiB0aGlz IHN0cmluZywgc28gdGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgc3RyaW5nIG91dGxpdmVzIHRo ZSBhcnJheS4KKyAqCisgKiBSZXR1cm5zIHRoZSBmdWxsIG51bWJlciBvZiBvcHRpb25zIGluIHRo ZSBpbnB1dCBzdHJpbmcsIGJ1dCBzdG9yZXMgbm8KKyAqIG1vcmUgdGhhbiBtYXhvcHRpb25zIGlu dG8gdGhlIGNhbGxlci1wcm92aWRlZCBhcnJheS4gSWYgYSBzeW50YXggZXJyb3IKKyAqIG9jY3Vy cywgcmV0dXJucyAtMSBhbmQgc2V0cyAqZXJybXNnLgorICovCitzdGF0aWMgaW50CithdXRvX2V4 cGxhaW5fc3BsaXRfb3B0aW9ucyhjaGFyICpyYXdzdHJpbmcsIGF1dG9fZXhwbGFpbl9vcHRpb24g Km9wdGlvbnMsCisJCQkJCQkgICBpbnQgbWF4b3B0aW9ucywgY2hhciAqKmVycm1zZykKK3sKKwlj aGFyCSAgICpuZXh0cCA9IHJhd3N0cmluZzsKKwlpbnQJCQlub3B0aW9ucyA9IDA7CisJYm9vbAkJ ZG9uZSA9IGZhbHNlOworCisJKmVycm1zZyA9IE5VTEw7CisKKwl3aGlsZSAoc2Nhbm5lcl9pc3Nw YWNlKCpuZXh0cCkpCisJCW5leHRwKys7CQkJCS8qIHNraXAgbGVhZGluZyB3aGl0ZXNwYWNlICov CisKKwlpZiAoKm5leHRwID09ICdcMCcpCisJCXJldHVybiAwOwkJCQkvKiBlbXB0eSBzdHJpbmcg aXMgZmluZSAqLworCisJd2hpbGUgKCFkb25lKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJY2hh cgkgICAqbmFtZV9lbmRwOworCQljaGFyCSAgICp2YWx1ZSA9IE5VTEw7CisJCWNoYXIJICAgKnZh bHVlX2VuZHAgPSBOVUxMOworCQlOb2RlVGFnCQl0eXBlID0gVF9JbnZhbGlkOworCisJCS8qIFBh cnNlIHRoZSBvcHRpb24gbmFtZS4gKi8KKwkJbmFtZSA9IHNjYW5faWRlbnRpZmllcigmbmFtZV9l bmRwLCAmbmV4dHAsICcsJywgdHJ1ZSk7CisJCWlmIChuYW1lID09IE5VTEwgfHwgbmFtZV9lbmRw ID09IG5hbWUpCisJCXsKKwkJCSplcnJtc2cgPSAib3B0aW9uIG5hbWUgbWlzc2luZyBvciBlbXB0 eSI7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKiBTa2lwIHdoaXRlc3BhY2UgYWZ0ZXIgdGhl IG9wdGlvbiBuYW1lLiAqLworCQl3aGlsZSAoc2Nhbm5lcl9pc3NwYWNlKCpuZXh0cCkpCisJCQlu ZXh0cCsrOworCisJCS8qCisJCSAqIERldGVybWluZSB3aGV0aGVyIHdlIGhhdmUgYW4gb3B0aW9u IHZhbHVlLiAgQSBjb21tYSBvciBlbmQgb2YKKwkJICogc3RyaW5nIG1lYW5zIG5vIHZhbHVlOyBv dGhlcndpc2Ugd2UgaGF2ZSBvbmUuCisJCSAqLworCQlpZiAoKm5leHRwICE9ICdcMCcgJiYgKm5l eHRwICE9ICcsJykKKwkJeworCQkJaWYgKCpuZXh0cCA9PSAnXCcnKQorCQkJeworCQkJCS8qIFNp bmdsZS1xdW90ZWQgc3RyaW5nIGxpdGVyYWwuICovCisJCQkJdHlwZSA9IFRfU3RyaW5nOworCQkJ CXZhbHVlID0gYXV0b19leHBsYWluX3NjYW5fbGl0ZXJhbCgmdmFsdWVfZW5kcCwgJm5leHRwKTsK KwkJCQlpZiAodmFsdWUgPT0gTlVMTCkKKwkJCQl7CisJCQkJCSplcnJtc2cgPSAidW50ZXJtaW5h dGVkIHNpbmdsZS1xdW90ZWQgc3RyaW5nIjsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCX0K KwkJCWVsc2UgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpICpuZXh0cCkgfHwKKwkJCQkJICgo Km5leHRwID09ICcrJyB8fCAqbmV4dHAgPT0gJy0nKSAmJgorCQkJCQkgIGlzZGlnaXQoKHVuc2ln bmVkIGNoYXIpIG5leHRwWzFdKSkpCisJCQl7CisJCQkJY2hhcgkgICAqZW5kcHRyOworCQkJCWxv bmcJCWludHZhbDsKKwkJCQljaGFyCQlzYXZlZDsKKworCQkJCS8qIFJlbWVtYmVyIHRoZSBzdGFy dCBvZiB0aGUgbmV4dCB0b2tlbiwgYW5kIGZpbmQgdGhlIGVuZC4gKi8KKwkJCQl2YWx1ZSA9IG5l eHRwOworCQkJCXdoaWxlICgqbmV4dHAgJiYgKm5leHRwICE9ICcsJyAmJiAhc2Nhbm5lcl9pc3Nw YWNlKCpuZXh0cCkpCisJCQkJCW5leHRwKys7CisJCQkJdmFsdWVfZW5kcCA9IG5leHRwOworCisJ CQkJLyogVGVtcG9yYXJpbHkgJ1wwJy10ZXJtaW5hdGUgc28gd2UgY2FuIHVzZSBzdHJ0b2wvc3Ry dG9kLiAqLworCQkJCXNhdmVkID0gKnZhbHVlX2VuZHA7CisJCQkJKnZhbHVlX2VuZHAgPSAnXDAn OworCisJCQkJLyogSW50ZWdlciwgZmxvYXQsIG9yIG5laXRoZXI/ICovCisJCQkJZXJybm8gPSAw OworCQkJCWludHZhbCA9IHN0cnRvbCh2YWx1ZSwgJmVuZHB0ciwgMCk7CisJCQkJaWYgKGVycm5v ID09IDAgJiYgKmVuZHB0ciA9PSAnXDAnICYmIGVuZHB0ciAhPSB2YWx1ZSAmJgorCQkJCQlpbnR2 YWwgPT0gKGludCkgaW50dmFsKQorCQkJCQl0eXBlID0gVF9JbnRlZ2VyOworCQkJCWVsc2UKKwkJ CQl7CisJCQkJCXR5cGUgPSBUX0Zsb2F0OworCQkJCQkodm9pZCkgc3RydG9kKHZhbHVlLCAmZW5k cHRyKTsKKwkJCQkJaWYgKCplbmRwdHIgIT0gJ1wwJykKKwkJCQkJeworCQkJCQkJKnZhbHVlX2Vu ZHAgPSBzYXZlZDsKKwkJCQkJCSplcnJtc2cgPSAiaW52YWxpZCBudW1lcmljIHZhbHVlIjsKKwkJ CQkJCXJldHVybiAtMTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qIFJlbW92ZSB0ZW1wb3Jhcnkg dGVybWluYXRvci4gKi8KKwkJCQkqdmFsdWVfZW5kcCA9IHNhdmVkOworCQkJfQorCQkJZWxzZQor CQkJeworCQkJCS8qIElkZW50aWZpZXIsIHBvc3NpYmx5IGRvdWJsZS1xdW90ZWQuICovCisJCQkJ dHlwZSA9IFRfU3RyaW5nOworCQkJCXZhbHVlID0gc2Nhbl9pZGVudGlmaWVyKCZ2YWx1ZV9lbmRw LCAmbmV4dHAsICcsJywgdHJ1ZSk7CisJCQkJaWYgKHZhbHVlID09IE5VTEwpCisJCQkJeworCQkJ CQkvKgorCQkJCQkgKiBzY2FuX2lkZW50aWZpZXIgd2lsbCByZXR1cm4gTlVMTCBpZiBpdCBmaW5k cyBhbgorCQkJCQkgKiB1bnRlcm1pbmF0ZWQgZG91YmxlLXF1b3RlZCBpZGVudGlmaWVyIG9yIGl0 IGZpbmRzIG5vCisJCQkJCSAqIGlkZW50aWZpZXIgYXQgYWxsIGJlY2F1c2UgdGhlIG5leHQgY2hh cmFjdGVyIGlzCisJCQkJCSAqIHdoaXRlc3BhY2Ugb3IgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIs IGhlcmUgYSBjb21tYS4KKwkJCQkJICogQnV0IHRoZSBsYXR0ZXIgY2FzZSBpcyBpbXBvc3NpYmxl IGhlcmUgYmVjYXVzZSB0aGUgY29kZQorCQkJCQkgKiBhYm92ZSBoYXMgc2tpcHBlZCB3aGl0ZXNw YWNlIGFuZCBjaGVja2VkIGZvciBjb21tYXMuCisJCQkJCSAqLworCQkJCQkqZXJybXNnID0gInVu dGVybWluYXRlZCBkb3VibGUtcXVvdGVkIHN0cmluZyI7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9 CisJCQl9CisJCX0KKworCQkvKiBTa2lwIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovCisJCXdoaWxl IChzY2FubmVyX2lzc3BhY2UoKm5leHRwKSkKKwkJCW5leHRwKys7CisKKwkJLyogRXhwZWN0IGNv bW1hIG9yIGVuZCBvZiBzdHJpbmcuICovCisJCWlmICgqbmV4dHAgPT0gJywnKQorCQl7CisJCQlu ZXh0cCsrOworCQkJd2hpbGUgKHNjYW5uZXJfaXNzcGFjZSgqbmV4dHApKQorCQkJCW5leHRwKys7 CisJCQlpZiAoKm5leHRwID09ICdcMCcpCisJCQl7CisJCQkJKmVycm1zZyA9ICJ0cmFpbGluZyBj b21tYSBpbiBvcHRpb24gbGlzdCI7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWVsc2Ug aWYgKCpuZXh0cCA9PSAnXDAnKQorCQkJZG9uZSA9IHRydWU7CisJCWVsc2UKKwkJeworCQkJKmVy cm1zZyA9ICJleHBlY3RlZCBjb21tYSBvciBlbmQgb2Ygb3B0aW9uIGxpc3QiOworCQkJcmV0dXJu IC0xOworCQl9CisKKwkJLyoKKwkJICogTm93IHNhZmUgdG8gbnVsbC10ZXJtaW5hdGUgdGhlIG5h bWUgYW5kIHZhbHVlLiAgV2UgY291bGRuJ3QgZG8gdGhpcworCQkgKiBlYXJsaWVyIGJlY2F1c2Ug aW4gdGhlIHVucXVvdGVkIGNhc2UsIHRoZSBudWxsIHRlcm1pbmF0b3IgcG9zaXRpb24KKwkJICog bWF5IGNvaW5jaWRlIHdpdGggYSBjaGFyYWN0ZXIgdGhhdCB0aGUgc2Nhbm5pbmcgbG9naWMgYWJv dmUgc3RpbGwKKwkJICogbmVlZGVkIHRvIHJlYWQuCisJCSAqLworCQkqbmFtZV9lbmRwID0gJ1ww JzsKKwkJaWYgKHZhbHVlX2VuZHAgIT0gTlVMTCkKKwkJCSp2YWx1ZV9lbmRwID0gJ1wwJzsKKwor CQkvKiBBbHdheXMgY291bnQgdGhpcyBvcHRpb24sIGFuZCBzdG9yZSB0aGUgZGV0YWlscyBpZiB0 aGVyZSBpcyByb29tLiAqLworCQlpZiAobm9wdGlvbnMgPCBtYXhvcHRpb25zKQorCQl7CisJCQlv cHRpb25zW25vcHRpb25zXS5uYW1lID0gbmFtZTsKKwkJCW9wdGlvbnNbbm9wdGlvbnNdLnR5cGUg PSB0eXBlOworCQkJb3B0aW9uc1tub3B0aW9uc10udmFsdWUgPSB2YWx1ZTsKKwkJfQorCQlub3B0 aW9ucysrOworCX0KKworCXJldHVybiBub3B0aW9uczsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIv YXV0b19leHBsYWluL21lc29uLmJ1aWxkIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vbWVzb24uYnVp bGQKaW5kZXggNmY5ZDIyYmY1ZDguLmQyYjA2NTBhZjFjIDEwMDY0NAotLS0gYS9jb250cmliL2F1 dG9fZXhwbGFpbi9tZXNvbi5idWlsZAorKysgYi9jb250cmliL2F1dG9fZXhwbGFpbi9tZXNvbi5i dWlsZApAQCAtMjMsNiArMjMsNyBAQCB0ZXN0cyArPSB7CiAgICdyZWdyZXNzJzogewogICAgICdz cWwnOiBbCiAgICAgICAnYWx0ZXJfcmVzZXQnLAorICAgICAgJ2V4dGVuc2lvbl9vcHRpb25zJywK ICAgICBdLAogICB9LAogICAndGFwJzogewpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2F1dG8t ZXhwbGFpbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2F1dG8tZXhwbGFpbi5zZ21sCmluZGV4IDE1Yzg2 ODAyMWU2Li5lZTg1YTY3ZWIyZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2F1dG8tZXhwbGFp bi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9hdXRvLWV4cGxhaW4uc2dtbApAQCAtMjQ1LDYgKzI0 NSwyOSBAQCBMT0FEICdhdXRvX2V4cGxhaW4nOwogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxp c3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeSBpZD0iYXV0by1leHBsYWluLWNvbmZpZ3VyYXRp b24tcGFyYW1ldGVycy1sb2ctZXh0ZW5zaW9uLW9wdGlvbnMiPgorICAgIDx0ZXJtPgorICAgICA8 dmFybmFtZT5hdXRvX2V4cGxhaW4ubG9nX2V4dGVuc2lvbl9vcHRpb25zPC92YXJuYW1lPiAoPHR5 cGU+c3RyaW5nPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJu YW1lPmF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnM8L3Zhcm5hbWU+IGNvbmZpZ3Vy YXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+ CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIExvYWRhYmxlIG1vZHVsZXMgY2Fu IGV4dGVuZCB0aGUgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gY29tbWFuZCB3aXRoCisgICAg ICBhZGRpdGlvbmFsIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG91dHB1dCBmb3JtYXQuIFN1Y2gg b3B0aW9ucyBjYW4gYWxzbworICAgICAgYmUgc3BlY2lmaWVkIGhlcmUuIFRoZSB2YWx1ZSBvZiB0 aGlzIHBhcmFtZXRlciBpcyBhIGNvbW1hLXNlcGFyYXRlZAorICAgICAgbGlzdCBvZiBvcHRpb25z LCBlYWNoIG9mIHdoaWNoIGlzIGFuIG9wdGlvbiBuYW1lIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkK KyAgICAgIGFuIGFzc29jaWF0ZWQgdmFsdWUuIFRoZSBtb2R1bGUgdGhhdCBwcm92aWRlcyB0aGUK KyAgICAgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IG9wdGlvbiwgc3VjaCBhcworICAgICAg PGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlIj48bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0 ZXJhbD48L2xpbms+IG9yCisgICAgICA8bGluayBsaW5rZW5kPSJwZ292ZXJleHBsYWluIj48bGl0 ZXJhbD5wZ19vdmVyZXhwbGFpbjwvbGl0ZXJhbD48L2xpbms+LAorICAgICAgc2hvdWxkIGJlIGxv YWRlZCBiZWZvcmUgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0LgorICAgICAgT25seSBzdXBlcnVzZXJz IGNhbiBjaGFuZ2UgdGhpcyBzZXR0aW5nLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8dmFybGlzdGVudHJ5IGlkPSJhdXRvLWV4cGxhaW4t Y29uZmlndXJhdGlvbi1wYXJhbWV0ZXJzLWxvZy1sZXZlbCI+CiAgICAgPHRlcm0+CiAgICAgIDx2 YXJuYW1lPmF1dG9fZXhwbGFpbi5sb2dfbGV2ZWw8L3Zhcm5hbWU+ICg8dHlwZT5lbnVtPC90eXBl PikKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMmU0ZTkxMzMzMWIuLmM2MDJhZTJkNjkw IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzU2MSw2ICszNTYxLDggQEAgYXN0cmVh bWVyX3ZlcmlmeQogYXN0cmVhbWVyX3dhbGR1bXAKIGFzdHJlYW1lcl96c3RkX2ZyYW1lCiBhdXRo X3Bhc3N3b3JkX2hvb2tfdHlwCithdXRvX2V4cGxhaW5fZXh0ZW5zaW9uX29wdGlvbnMKK2F1dG9f ZXhwbGFpbl9vcHRpb24KIGF1dG92YWNfdGFibGUKIGF2X3JlbGF0aW9uCiBhdmNfY2FjaGUKLS0g CjIuNTEuMAoK --000000000000446bbd064e545385 Content-Type: application/octet-stream; name="v1-0001-Expose-helper-functions-scan_quoted_identifier-an.patch" Content-Disposition: attachment; filename="v1-0001-Expose-helper-functions-scan_quoted_identifier-an.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnesn4qj0 RnJvbSBkMzNmNmFiN2JmMDA0NjUzODNjNDE0ZTRmMGVkNTZmZjA2MmVmN2FmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMzAgTWFyIDIwMjYgMTg6NDk6NTYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDEv M10gRXhwb3NlIGhlbHBlciBmdW5jdGlvbnMgc2Nhbl9xdW90ZWRfaWRlbnRpZmllciBhbmQKIHNj YW5faWRlbnRpZmllci4KClByZXZpb3VzbHksIHRoaXMgbG9naWMgd2FzIGVtYmVkZGVkIHdpdGhp biBTcGxpdElkZW50aWZpZXJTdHJpbmcsClNwbGl0RGlyZWN0b3JpZXNTdHJpbmcsIGFuZCBTcGxp dEdVQ0xpc3QuIEZhY3RvcmluZyBpdCBvdXQgc2F2ZXMKYSBiaXQgb2YgZHVwbGljYXRlZCBjb2Rl LCBhbmQgYWxzbyBtYWtlcyBpdCBhdmFpbGFibGUgdG8gZXh0ZW5zaW9ucwp0aGF0IG1pZ2h0IHdh bnQgdG8gZG8gc2ltaWxhciB0aGluZ3Mgd2l0aG91dCBuZWNlc3NhcmlseSB3YW50aW5nIHRvCmRv IGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Zhcmxl bmEuYyB8IDE4OSArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUv dXRpbHMvdmFybGVuYS5oICAgICB8ICAgMyArCiAyIGZpbGVzIGNoYW5nZWQsIDEwMiBpbnNlcnRp b25zKCspLCA5MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwppbmRleCA3YjFl ZTYxYmRlNi4uNTgxNmRmNjU4N2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92 YXJsZW5hLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwpAQCAtMjc1MCw2 ICsyNzUwLDk2IEBAIHRleHRUb1F1YWxpZmllZE5hbWVMaXN0KHRleHQgKnRleHR2YWwpCiAJcmV0 dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIHNjYW5fcXVvdGVkX2lkZW50aWZpZXIgLSBJbi1wbGFj ZSBzY2FubmVyIGZvciBxdW90ZWQgaWRlbnRpZmllcnMuCisgKgorICogKm5leHRwIHNob3VsZCBw b2ludCB0byB0aGUgb3BlbmluZyBkb3VibGUtcXVvdGUgY2hhcmFjdGVyLCBhbmQgd2lsbCBiZQor ICogdXBkYXRlZCB0byBwb2ludCBqdXN0IHBhc3QgdGhlIGVuZC4gICplbmRwIGlzIHNldCB0byB0 aGUgcG9zaXRpb24gb2YKKyAqIHRoZSBjbG9zaW5nIHF1b3RlLiBUaGUgcmV0dXJuIHZhbHVlIGlz IHRoZSBpZGVudGlmaWVyLCBvciBOVUxMIGlmIHRoZQorICogbWF0Y2hpbmcgY2xvc2UtcXVvdGUg Y2Fubm90IGJlIGZvdW5kLgorICoKKyAqIElmIHdlIGZpbmQgdHdvIGNvbnNlY3V0aXZlIGRvdWJs ZSBxdW90ZSBjaGFyYWN0ZXJzLCB0aGF0IGRvZXNuJ3QgZW5kIHRoZQorICogaWRlbnRpZmllcjog aW5zdGVhZCwgd2UgY29sbGFwc2UgdGhlbSBpbnRvIGEgZG91YmxlIHF1b3RlIGFuZCBpbmNsdWRl IHRoZW0KKyAqIGluIHRoZSByZXN1bHRpbmcgdG9rZW4uIE5vdGUgdGhhdCB0aGlzIHJlcXVpcmVz IG92ZXJ3cml0aW5nIHRoZSByZXN0IG9mIHRoZQorICogc3RyaW5nIGluIHBsYWNlLCBpbmNsdWRp bmcgdGhlIHBvcnRpb24gYmV5b25kIHRoZSBmaW5hbCB2YWx1ZSBvZiAqbmV4dHAuCisgKi8KK2No YXIgKgorc2Nhbl9xdW90ZWRfaWRlbnRpZmllcihjaGFyICoqZW5kcCwgY2hhciAqKm5leHRwKQor eworCWNoYXIJICAgKnRva2VuID0gKm5leHRwICsgMTsKKworCWZvciAoOzspCisJeworCQkqZW5k cCA9IHN0cmNocigqbmV4dHAgKyAxLCAnIicpOworCQlpZiAoKmVuZHAgPT0gTlVMTCkKKwkJCXJl dHVybiBOVUxMOwkJLyogbWlzbWF0Y2hlZCBxdW90ZXMgKi8KKwkJaWYgKCgqZW5kcClbMV0gIT0g JyInKQorCQkJYnJlYWs7CQkJCS8qIGZvdW5kIGVuZCBvZiBxdW90ZWQgaWRlbnRpZmllciAqLwor CQkvKiBDb2xsYXBzZSBhZGphY2VudCBxdW90ZXMgaW50byBvbmUgcXVvdGUsIGFuZCBsb29rIGFn YWluICovCisJCW1lbW1vdmUoKmVuZHAsICplbmRwICsgMSwgc3RybGVuKCplbmRwKSk7CisJCSpu ZXh0cCA9ICplbmRwOworCX0KKwkvKiAqZW5kcCBub3cgcG9pbnRzIGF0IHRoZSB0ZXJtaW5hdGlu ZyBxdW90ZSAqLworCSpuZXh0cCA9ICplbmRwICsgMTsKKworCXJldHVybiB0b2tlbjsKK30KKwor LyoKKyAqIHNjYW5faWRlbnRpZmllciAtIEluLXBsYWNlIHNjYW5uZXIgZm9yIHF1b3RlZCBvciB1 bnF1b3RlZCBpZGVudGlmaWVycy4KKyAqCisgKiBPbiBzdWNjZXNzLCAqZW5kcCBpcyBzZXQgdG8g dGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBjYWxsZXIgc2hvdWxkIHdyaXRlICdcMCcKKyAqIHRvIG51 bGwtdGVybWluYXRlIHRoZSB0b2tlbiwgYW5kICpuZXh0cCBpcyBhZHZhbmNlZCBwYXN0IHRoZSB0 b2tlbiAoYW5kIHBhc3QKKyAqIHRoZSBjbG9zaW5nIHF1b3RlLCBpZiBhbnkpLiAgVGhlIHJldHVy biB2YWx1ZSBpcyB0aGUgdG9rZW4gY29udGVudCwgb3IgTlVMTAorICogaWYgdGhlcmUgaXMgYSBz eW50YXggZXJyb3IgKG1pc21hdGNoZWQgcXVvdGVzIG9yIGVtcHR5IHVucXVvdGVkIHRva2VuKS4K KyAqCisgKiBVbnF1b3RlZCBpZGVudGlmaWVycyBhcmUgdGVybWluYXRlZCBieSB3aGl0ZXNwYWNl IG9yIHRoZSBmaXJzdCBvY2N1cnJlbmNlCisgKiBvZiB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci4g QWRkaXRpb25hbGx5LCBpZiBkb3duY2FzZV91bnF1b3RlZCA9IHRydWUsCisgKiB1bnF1b3RlZCBp ZGVudGlmaWVycyBhcmUgZG93bmNhc2VkIGluIHBsYWNlLiBTZWUgc2Nhbl9xdW90ZWRfaWRlbnRp ZmllciBmb3IKKyAqIGFuIGFkZGl0aW9uYWwgd2F5IGluIHdoaWNoIHdlIG1vZGlmeSB0aGUgc3Ry aW5nIGluIHBsYWNlLgorICovCitjaGFyICoKK3NjYW5faWRlbnRpZmllcihjaGFyICoqZW5kcCwg Y2hhciAqKm5leHRwLCBjaGFyIHNlcGFyYXRvciwgYm9vbCBkb3duY2FzZV91bnF1b3RlZCkKK3sK KwljaGFyCSAgICp0b2tlbjsKKworCWlmICgqKm5leHRwID09ICciJykKKwkJcmV0dXJuIHNjYW5f cXVvdGVkX2lkZW50aWZpZXIoZW5kcCwgbmV4dHApOworCisJLyogVW5xdW90ZWQgaWRlbnRpZmll ciAtLS0gZXh0ZW5kcyB0byBzZXBhcmF0b3Igb3Igd2hpdGVzcGFjZSAqLworCXRva2VuID0gKm5l eHRwOworCisJd2hpbGUgKCoqbmV4dHAgJiYgKipuZXh0cCAhPSBzZXBhcmF0b3IgJiYgIXNjYW5u ZXJfaXNzcGFjZSgqKm5leHRwKSkKKwkJKCpuZXh0cCkrKzsKKworCWlmICgqbmV4dHAgPT0gdG9r ZW4pCisJCXJldHVybiBOVUxMOwkJCS8qIGVtcHR5IHRva2VuICovCisKKwkqZW5kcCA9ICpuZXh0 cDsKKworCWlmIChkb3duY2FzZV91bnF1b3RlZCkKKwl7CisJCS8qCisJCSAqIERvd25jYXNlIHRo ZSBpZGVudGlmaWVyLCB1c2luZyBzYW1lIGNvZGUgYXMgbWFpbiBsZXhlciBkb2VzLgorCQkgKgor CQkgKiBYWFggYmVjYXVzZSB3ZSB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgaW4tcGxhY2Us IHdlIGNhbm5vdAorCQkgKiBzdXBwb3J0IGEgZG93bmNhc2luZyB0cmFuc2Zvcm1hdGlvbiB0aGF0 IGluY3JlYXNlcyB0aGUgc3RyaW5nCisJCSAqIGxlbmd0aC4gIFRoaXMgaXMgbm90IGEgcHJvYmxl bSBnaXZlbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZgorCQkgKiBkb3duY2FzZV90cnVu Y2F0ZV9pZGVudGlmaWVyLCBidXQgd2UnbGwgcHJvYmFibHkgaGF2ZSB0byBkbworCQkgKiBzb21l dGhpbmcgYWJvdXQgdGhpcyBzb21lZGF5LgorCQkgKi8KKwkJaW50CQkJbGVuID0gKmVuZHAgLSB0 b2tlbjsKKwkJY2hhcgkgICAqZG93bm5hbWUgPSBkb3duY2FzZV90cnVuY2F0ZV9pZGVudGlmaWVy KHRva2VuLCBsZW4sIGZhbHNlKTsKKworCQlBc3NlcnQoc3RybGVuKGRvd25uYW1lKSA8PSBsZW4p OworCQlzdHJuY3B5KHRva2VuLCBkb3dubmFtZSwgbGVuKTsJLyogc3RybmNweSBpcyByZXF1aXJl ZCBoZXJlICovCisJCXBmcmVlKGRvd25uYW1lKTsKKwl9CisKKwlyZXR1cm4gdG9rZW47Cit9CisK KwogLyoKICAqIFNwbGl0SWRlbnRpZmllclN0cmluZyAtLS0gcGFyc2UgYSBzdHJpbmcgY29udGFp bmluZyBpZGVudGlmaWVycwogICoKQEAgLTI3OTQsNTMgKzI4ODQsOSBAQCBTcGxpdElkZW50aWZp ZXJTdHJpbmcoY2hhciAqcmF3c3RyaW5nLCBjaGFyIHNlcGFyYXRvciwKIAkJY2hhcgkgICAqY3Vy bmFtZTsKIAkJY2hhcgkgICAqZW5kcDsKIAotCQlpZiAoKm5leHRwID09ICciJykKLQkJewotCQkJ LyogUXVvdGVkIG5hbWUgLS0tIGNvbGxhcHNlIHF1b3RlLXF1b3RlIHBhaXJzLCBubyBkb3duY2Fz aW5nICovCi0JCQljdXJuYW1lID0gbmV4dHAgKyAxOwotCQkJZm9yICg7OykKLQkJCXsKLQkJCQll bmRwID0gc3RyY2hyKG5leHRwICsgMSwgJyInKTsKLQkJCQlpZiAoZW5kcCA9PSBOVUxMKQotCQkJ CQlyZXR1cm4gZmFsc2U7CS8qIG1pc21hdGNoZWQgcXVvdGVzICovCi0JCQkJaWYgKGVuZHBbMV0g IT0gJyInKQotCQkJCQlicmVhazsJCS8qIGZvdW5kIGVuZCBvZiBxdW90ZWQgbmFtZSAqLwotCQkJ CS8qIENvbGxhcHNlIGFkamFjZW50IHF1b3RlcyBpbnRvIG9uZSBxdW90ZSwgYW5kIGxvb2sgYWdh aW4gKi8KLQkJCQltZW1tb3ZlKGVuZHAsIGVuZHAgKyAxLCBzdHJsZW4oZW5kcCkpOwotCQkJCW5l eHRwID0gZW5kcDsKLQkJCX0KLQkJCS8qIGVuZHAgbm93IHBvaW50cyBhdCB0aGUgdGVybWluYXRp bmcgcXVvdGUgKi8KLQkJCW5leHRwID0gZW5kcCArIDE7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkv KiBVbnF1b3RlZCBuYW1lIC0tLSBleHRlbmRzIHRvIHNlcGFyYXRvciBvciB3aGl0ZXNwYWNlICov Ci0JCQljaGFyCSAgICpkb3dubmFtZTsKLQkJCWludAkJCWxlbjsKLQotCQkJY3VybmFtZSA9IG5l eHRwOwotCQkJd2hpbGUgKCpuZXh0cCAmJiAqbmV4dHAgIT0gc2VwYXJhdG9yICYmCi0JCQkJICAg IXNjYW5uZXJfaXNzcGFjZSgqbmV4dHApKQotCQkJCW5leHRwKys7Ci0JCQllbmRwID0gbmV4dHA7 Ci0JCQlpZiAoY3VybmFtZSA9PSBuZXh0cCkKLQkJCQlyZXR1cm4gZmFsc2U7CS8qIGVtcHR5IHVu cXVvdGVkIG5hbWUgbm90IGFsbG93ZWQgKi8KLQotCQkJLyoKLQkJCSAqIERvd25jYXNlIHRoZSBp ZGVudGlmaWVyLCB1c2luZyBzYW1lIGNvZGUgYXMgbWFpbiBsZXhlciBkb2VzLgotCQkJICoKLQkJ CSAqIFhYWCBiZWNhdXNlIHdlIHdhbnQgdG8gb3ZlcndyaXRlIHRoZSBpbnB1dCBpbi1wbGFjZSwg d2UgY2Fubm90Ci0JCQkgKiBzdXBwb3J0IGEgZG93bmNhc2luZyB0cmFuc2Zvcm1hdGlvbiB0aGF0 IGluY3JlYXNlcyB0aGUgc3RyaW5nCi0JCQkgKiBsZW5ndGguICBUaGlzIGlzIG5vdCBhIHByb2Js ZW0gZ2l2ZW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KLQkJCSAqIG9mIGRvd25jYXNlX3Ry dW5jYXRlX2lkZW50aWZpZXIsIGJ1dCB3ZSdsbCBwcm9iYWJseSBoYXZlIHRvIGRvCi0JCQkgKiBz b21ldGhpbmcgYWJvdXQgdGhpcyBzb21lZGF5LgotCQkJICovCi0JCQlsZW4gPSBlbmRwIC0gY3Vy bmFtZTsKLQkJCWRvd25uYW1lID0gZG93bmNhc2VfdHJ1bmNhdGVfaWRlbnRpZmllcihjdXJuYW1l LCBsZW4sIGZhbHNlKTsKLQkJCUFzc2VydChzdHJsZW4oZG93bm5hbWUpIDw9IGxlbik7Ci0JCQlz dHJuY3B5KGN1cm5hbWUsIGRvd25uYW1lLCBsZW4pOwkvKiBzdHJuY3B5IGlzIHJlcXVpcmVkIGhl cmUgKi8KLQkJCXBmcmVlKGRvd25uYW1lKTsKLQkJfQorCQljdXJuYW1lID0gc2Nhbl9pZGVudGlm aWVyKCZlbmRwLCAmbmV4dHAsIHNlcGFyYXRvciwgdHJ1ZSk7CisJCWlmIChjdXJuYW1lID09IE5V TEwpCisJCQlyZXR1cm4gZmFsc2U7CQkvKiBtaXNtYXRjaGVkIHF1b3RlcyBvciBlbXB0eSBuYW1l ICovCiAKIAkJd2hpbGUgKHNjYW5uZXJfaXNzcGFjZSgqbmV4dHApKQogCQkJbmV4dHArKzsJCQkv KiBza2lwIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KQEAgLTI5MjQsMjAgKzI5NzAsOSBAQCBTcGxp dERpcmVjdG9yaWVzU3RyaW5nKGNoYXIgKnJhd3N0cmluZywgY2hhciBzZXBhcmF0b3IsCiAJCWlm ICgqbmV4dHAgPT0gJyInKQogCQl7CiAJCQkvKiBRdW90ZWQgbmFtZSAtLS0gY29sbGFwc2UgcXVv dGUtcXVvdGUgcGFpcnMgKi8KLQkJCWN1cm5hbWUgPSBuZXh0cCArIDE7Ci0JCQlmb3IgKDs7KQot CQkJewotCQkJCWVuZHAgPSBzdHJjaHIobmV4dHAgKyAxLCAnIicpOwotCQkJCWlmIChlbmRwID09 IE5VTEwpCi0JCQkJCXJldHVybiBmYWxzZTsJLyogbWlzbWF0Y2hlZCBxdW90ZXMgKi8KLQkJCQlp ZiAoZW5kcFsxXSAhPSAnIicpCi0JCQkJCWJyZWFrOwkJLyogZm91bmQgZW5kIG9mIHF1b3RlZCBu YW1lICovCi0JCQkJLyogQ29sbGFwc2UgYWRqYWNlbnQgcXVvdGVzIGludG8gb25lIHF1b3RlLCBh bmQgbG9vayBhZ2FpbiAqLwotCQkJCW1lbW1vdmUoZW5kcCwgZW5kcCArIDEsIHN0cmxlbihlbmRw KSk7Ci0JCQkJbmV4dHAgPSBlbmRwOwotCQkJfQotCQkJLyogZW5kcCBub3cgcG9pbnRzIGF0IHRo ZSB0ZXJtaW5hdGluZyBxdW90ZSAqLwotCQkJbmV4dHAgPSBlbmRwICsgMTsKKwkJCWN1cm5hbWUg PSBzY2FuX3F1b3RlZF9pZGVudGlmaWVyKCZlbmRwLCAmbmV4dHApOworCQkJaWYgKGN1cm5hbWUg PT0gTlVMTCkKKwkJCQlyZXR1cm4gZmFsc2U7CS8qIG1pc21hdGNoZWQgcXVvdGVzICovCiAJCX0K IAkJZWxzZQogCQl7CkBAIC0zMDQyLDM1ICszMDc3LDkgQEAgU3BsaXRHVUNMaXN0KGNoYXIgKnJh d3N0cmluZywgY2hhciBzZXBhcmF0b3IsCiAJCWNoYXIJICAgKmN1cm5hbWU7CiAJCWNoYXIJICAg KmVuZHA7CiAKLQkJaWYgKCpuZXh0cCA9PSAnIicpCi0JCXsKLQkJCS8qIFF1b3RlZCBuYW1lIC0t LSBjb2xsYXBzZSBxdW90ZS1xdW90ZSBwYWlycyAqLwotCQkJY3VybmFtZSA9IG5leHRwICsgMTsK LQkJCWZvciAoOzspCi0JCQl7Ci0JCQkJZW5kcCA9IHN0cmNocihuZXh0cCArIDEsICciJyk7Ci0J CQkJaWYgKGVuZHAgPT0gTlVMTCkKLQkJCQkJcmV0dXJuIGZhbHNlOwkvKiBtaXNtYXRjaGVkIHF1 b3RlcyAqLwotCQkJCWlmIChlbmRwWzFdICE9ICciJykKLQkJCQkJYnJlYWs7CQkvKiBmb3VuZCBl bmQgb2YgcXVvdGVkIG5hbWUgKi8KLQkJCQkvKiBDb2xsYXBzZSBhZGphY2VudCBxdW90ZXMgaW50 byBvbmUgcXVvdGUsIGFuZCBsb29rIGFnYWluICovCi0JCQkJbWVtbW92ZShlbmRwLCBlbmRwICsg MSwgc3RybGVuKGVuZHApKTsKLQkJCQluZXh0cCA9IGVuZHA7Ci0JCQl9Ci0JCQkvKiBlbmRwIG5v dyBwb2ludHMgYXQgdGhlIHRlcm1pbmF0aW5nIHF1b3RlICovCi0JCQluZXh0cCA9IGVuZHAgKyAx OwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogVW5xdW90ZWQgbmFtZSAtLS0gZXh0ZW5kcyB0byBz ZXBhcmF0b3Igb3Igd2hpdGVzcGFjZSAqLwotCQkJY3VybmFtZSA9IG5leHRwOwotCQkJd2hpbGUg KCpuZXh0cCAmJiAqbmV4dHAgIT0gc2VwYXJhdG9yICYmCi0JCQkJICAgIXNjYW5uZXJfaXNzcGFj ZSgqbmV4dHApKQotCQkJCW5leHRwKys7Ci0JCQllbmRwID0gbmV4dHA7Ci0JCQlpZiAoY3VybmFt ZSA9PSBuZXh0cCkKLQkJCQlyZXR1cm4gZmFsc2U7CS8qIGVtcHR5IHVucXVvdGVkIG5hbWUgbm90 IGFsbG93ZWQgKi8KLQkJfQorCQljdXJuYW1lID0gc2Nhbl9pZGVudGlmaWVyKCZlbmRwLCAmbmV4 dHAsIHNlcGFyYXRvciwgZmFsc2UpOworCQlpZiAoY3VybmFtZSA9PSBOVUxMKQorCQkJcmV0dXJu IGZhbHNlOwkJLyogbWlzbWF0Y2hlZCBxdW90ZXMgb3IgZW1wdHkgbmFtZSAqLwogCiAJCXdoaWxl IChzY2FubmVyX2lzc3BhY2UoKm5leHRwKSkKIAkJCW5leHRwKys7CQkJLyogc2tpcCB0cmFpbGlu ZyB3aGl0ZXNwYWNlICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy92YXJsZW5hLmgg Yi9zcmMvaW5jbHVkZS91dGlscy92YXJsZW5hLmgKaW5kZXggNGIzMjU3NGEwNzUuLmZlOGQ4YTU4 OTUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy92YXJsZW5hLmgKKysrIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvdmFybGVuYS5oCkBAIC0yNyw2ICsyNyw5IEBAIGV4dGVybiBpbnQJdmFyc3Ry X2xldmVuc2h0ZWluX2xlc3NfZXF1YWwoY29uc3QgY2hhciAqc291cmNlLCBpbnQgc2xlbiwKIAkJ CQkJCQkJCQkgIGludCBpbnNfYywgaW50IGRlbF9jLCBpbnQgc3ViX2MsCiAJCQkJCQkJCQkJICBp bnQgbWF4X2QsIGJvb2wgdHJ1c3RlZCk7CiBleHRlcm4gTGlzdCAqdGV4dFRvUXVhbGlmaWVkTmFt ZUxpc3QodGV4dCAqdGV4dHZhbCk7CitleHRlcm4gY2hhciAqc2Nhbl9xdW90ZWRfaWRlbnRpZmll cihjaGFyICoqZW5kcCwgY2hhciAqKm5leHRwKTsKK2V4dGVybiBjaGFyICpzY2FuX2lkZW50aWZp ZXIoY2hhciAqKmVuZHAsIGNoYXIgKipuZXh0cCwgY2hhciBzZXBhcmF0b3IsCisJCQkJCQkJIGJv b2wgZG93bmNhc2VfdW5xdW90ZWQpOwogZXh0ZXJuIGJvb2wgU3BsaXRJZGVudGlmaWVyU3RyaW5n KGNoYXIgKnJhd3N0cmluZywgY2hhciBzZXBhcmF0b3IsCiAJCQkJCQkJCSAgTGlzdCAqKm5hbWVs aXN0KTsKIGV4dGVybiBib29sIFNwbGl0RGlyZWN0b3JpZXNTdHJpbmcoY2hhciAqcmF3c3RyaW5n LCBjaGFyIHNlcGFyYXRvciwKLS0gCjIuNTEuMAoK --000000000000446bbd064e545385 Content-Type: application/octet-stream; name="v1-0002-Add-a-guc_check_handler-to-the-EXPLAIN-extension-.patch" Content-Disposition: attachment; filename="v1-0002-Add-a-guc_check_handler-to-the-EXPLAIN-extension-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnesn4qy1 RnJvbSA3ZjY3MWM0MTAzOTE4MzkwN2UzOWI1MzAyYjZjZDU3NTE1NTNhODM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMzAgTWFyIDIwMjYgMTk6MTA6MzIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDIv M10gQWRkIGEgZ3VjX2NoZWNrX2hhbmRsZXIgdG8gdGhlIEVYUExBSU4gZXh0ZW5zaW9uCiBtZWNo YW5pc20uCgpJdCB3b3VsZCBiZSB1c2VmdWwgdG8gYmUgYWJsZSB0byB0ZWxsIGF1dG9fZXhwbGFp biB0byBzZXQgYSBjdXN0b20KRVhQTEFJTiBvcHRpb24sIGJ1dCBpdCB3b3VsZCBiZSBiYWQgaWYg aXQgdHJpZWQgdG8gZG8gc28gYW5kIHRoZQpvcHRpb24gbmFtZSBvciB2YWx1ZSB3YXNuJ3QgdmFs aWQsIGJlY2F1c2UgdGhlbnQgZXZlcnkgcXVlcnkgd291bGQgZmFpbAp3aXRoIGEgY29tcGxhaW50 IGFib3V0IHRoZSBFWFBMQUlOIG9wdGlvbi4gU28gYWRkIGEgZ3VjX2NoZWNrX2hhbmRsZXIKdGhh dCBhdXRvX2V4cGxhaW4gd2lsbCBiZSBhYmxlIHRvIHVzZSB0byBvbmx5IHRyeSB0byBzZXQgb3B0 aW9uCm5hbWUvdmFsdWUvdHlwZSBjb21iaW5hdGlvbnMgdGhhdCBoYXZlIGJlZW4gZGV0ZXJtaW5l ZCB0byBiZSBsZWdhbCwKYW5kIHRvIGVtaXQgdXNlZnVsIG1lc3NhZ2VzIGFib3V0IG9uZXMgdGhh dCBhcmVuJ3QuCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIHwg ICA2ICstCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMgfCAgIDMgKy0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuYyAgICB8IDEyMSArKysrKysrKysr KysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCAgICB8 ICAxMyArKy0KIDQgZmlsZXMgY2hhbmdlZCwgMTM1IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4IGI0ZTkwOTA5 Mjg5Li43MTVlZGE4ZGM1NiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4u YwpAQCAtNzMsOSArNzMsMTEgQEAgX1BHX2luaXQodm9pZCkKIAllc19leHRlbnNpb25faWQgPSBH ZXRFeHBsYWluRXh0ZW5zaW9uSWQoInBnX292ZXJleHBsYWluIik7CiAKIAkvKiBSZWdpc3RlciB0 aGUgbmV3IEVYUExBSU4gb3B0aW9ucyBpbXBsZW1lbnRlZCBieSB0aGlzIG1vZHVsZS4gKi8KLQlS ZWdpc3RlckV4dGVuc2lvbkV4cGxhaW5PcHRpb24oImRlYnVnIiwgb3ZlcmV4cGxhaW5fZGVidWdf aGFuZGxlcik7CisJUmVnaXN0ZXJFeHRlbnNpb25FeHBsYWluT3B0aW9uKCJkZWJ1ZyIsIG92ZXJl eHBsYWluX2RlYnVnX2hhbmRsZXIsCisJCQkJCQkJCSAgIEdVQ0NoZWNrQm9vbGVhbkV4cGxhaW5P cHRpb24pOwogCVJlZ2lzdGVyRXh0ZW5zaW9uRXhwbGFpbk9wdGlvbigicmFuZ2VfdGFibGUiLAot CQkJCQkJCQkgICBvdmVyZXhwbGFpbl9yYW5nZV90YWJsZV9oYW5kbGVyKTsKKwkJCQkJCQkJICAg b3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGVfaGFuZGxlciwKKwkJCQkJCQkJICAgR1VDQ2hlY2tCb29s ZWFuRXhwbGFpbk9wdGlvbik7CiAKIAkvKiBVc2UgdGhlIHBlci1ub2RlIGFuZCBwZXItcGxhbiBo b29rcyB0byBtYWtlIG91ciBvcHRpb25zIGRvIHNvbWV0aGluZy4gKi8KIAlwcmV2X2V4cGxhaW5f cGVyX25vZGVfaG9vayA9IGV4cGxhaW5fcGVyX25vZGVfaG9vazsKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdfcGxhbl9hZHZpY2UuYwppbmRleCAyMzkzZWQ1NTUxOC4uNTYyOTA3MGZhZjQgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYworKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKQEAgLTEyNiw3ICsxMjYsOCBAQCBf UEdfaW5pdCh2b2lkKQogCiAJLyogUmVnaXN0ZXIgdGhlIG5ldyBFWFBMQUlOIG9wdGlvbnMgaW1w bGVtZW50ZWQgYnkgdGhpcyBtb2R1bGUuICovCiAJUmVnaXN0ZXJFeHRlbnNpb25FeHBsYWluT3B0 aW9uKCJwbGFuX2FkdmljZSIsCi0JCQkJCQkJCSAgIHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0 aW9uX2hhbmRsZXIpOworCQkJCQkJCQkgICBwZ19wbGFuX2FkdmljZV9leHBsYWluX29wdGlvbl9o YW5kbGVyLAorCQkJCQkJCQkgICBHVUNDaGVja0Jvb2xlYW5FeHBsYWluT3B0aW9uKTsKIAogCS8q IEluc3RhbGwgaG9va3MgKi8KIAlwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcygpOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5jCmluZGV4IDc3ZjU5YjhlNTAwLi42NWRkNDExMTQ1OSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuYwpAQCAtMzYsNiArMzYsOCBAQAogI2lu Y2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIK ICNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKIAogLyogSG9vayB0byBwZXJmb3JtIGFk ZGl0aW9uYWwgRVhQTEFJTiBvcHRpb25zIHZhbGlkYXRpb24gKi8KIGV4cGxhaW5fdmFsaWRhdGVf b3B0aW9uc19ob29rX3R5cGUgZXhwbGFpbl92YWxpZGF0ZV9vcHRpb25zX2hvb2sgPSBOVUxMOwpA QCAtNDQsNiArNDYsNyBAQCB0eXBlZGVmIHN0cnVjdAogewogCWNvbnN0IGNoYXIgKm9wdGlvbl9u YW1lOwogCUV4cGxhaW5PcHRpb25IYW5kbGVyIG9wdGlvbl9oYW5kbGVyOworCUV4cGxhaW5PcHRp b25HVUNDaGVja0hhbmRsZXIgZ3VjX2NoZWNrX2hhbmRsZXI7CiB9IEV4cGxhaW5FeHRlbnNpb25P cHRpb247CiAKIHN0YXRpYyBjb25zdCBjaGFyICoqRXhwbGFpbkV4dGVuc2lvbk5hbWVBcnJheSA9 IE5VTEw7CkBAIC0zMDQsMjYgKzMwNywzOSBAQCBTZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoRXhw bGFpblN0YXRlICplcywgaW50IGV4dGVuc2lvbl9pZCwgdm9pZCAqb3BhcXVlKQogLyoKICAqIFJl Z2lzdGVyIGEgbmV3IEVYUExBSU4gb3B0aW9uLgogICoKKyAqIG9wdGlvbl9uYW1lIGlzIGFzc3Vt ZWQgdG8gYmUgYSBjb25zdGFudCBzdHJpbmcgb3IgYWxsb2NhdGVkIGluIHN0b3JhZ2UKKyAqIHRo YXQgd2lsbCBuZXZlciBiZSBmcmVlZC4KKyAqCiAgKiBXaGVuIG9wdGlvbl9uYW1lIGlzIHVzZWQg YXMgYW4gRVhQTEFJTiBvcHRpb24sIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgYW5kCiAgKiBzaG91 bGQgdXBkYXRlIHRoZSBFeHBsYWluU3RhdGUgcGFzc2VkIHRvIGl0LiBTZWUgY29tbWVudHMgYXQg dG9wIG9mIGZpbGUKICAqIGZvciBhIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24uCiAgKgotICog b3B0aW9uX25hbWUgaXMgYXNzdW1lZCB0byBiZSBhIGNvbnN0YW50IHN0cmluZyBvciBhbGxvY2F0 ZWQgaW4gc3RvcmFnZQotICogdGhhdCB3aWxsIG5ldmVyIGJlIGZyZWVkLgorICogZ3VjX2NoZWNr X2hhbmRsZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBzYWZlbHkgY2FsbGVkIGZyb20gYQor ICogR1VDIGNoZWNrIGhvb2sgdG8gdmFsaWRhdGUgYSBwcm9wb3NlZCB2YWx1ZSBmb3IgYSBjdXN0 b20gRVhQTEFJTiBvcHRpb24uCisgKiBCb29sZWFuLXZhbHVlZCBvcHRpb25zIGNhbiBwYXNzIEdV Q0NoZWNrQm9vbGVhbkV4cGxhaW5PcHRpb24uIFNlZSB0aGUKKyAqIGNvbW1lbnRzIGZvciBHVUND aGVja0Jvb2xlYW5FeHBsYWluT3B0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uCisgKiBo b3cgYSBndWNfY2hlY2tfaGFuZGxlciBzaG91bGQgYmVoYXZlLgogICovCiB2b2lkCiBSZWdpc3Rl ckV4dGVuc2lvbkV4cGxhaW5PcHRpb24oY29uc3QgY2hhciAqb3B0aW9uX25hbWUsCi0JCQkJCQkJ ICAgRXhwbGFpbk9wdGlvbkhhbmRsZXIgaGFuZGxlcikKKwkJCQkJCQkgICBFeHBsYWluT3B0aW9u SGFuZGxlciBoYW5kbGVyLAorCQkJCQkJCSAgIEV4cGxhaW5PcHRpb25HVUNDaGVja0hhbmRsZXIg Z3VjX2NoZWNrX2hhbmRsZXIpCiB7CiAJRXhwbGFpbkV4dGVuc2lvbk9wdGlvbiAqZXhvcHQ7CiAK KwlBc3NlcnQoaGFuZGxlciAhPSBOVUxMKTsKKwlBc3NlcnQoZ3VjX2NoZWNrX2hhbmRsZXIgIT0g TlVMTCk7CisKIAkvKiBTZWFyY2ggZm9yIGFuIGV4aXN0aW5nIG9wdGlvbiBieSB0aGlzIG5hbWU7 IGlmIGZvdW5kLCB1cGRhdGUgaGFuZGxlci4gKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IEV4cGxh aW5FeHRlbnNpb25PcHRpb25zQXNzaWduZWQ7ICsraSkKIAl7CiAJCWlmIChzdHJjbXAoRXhwbGFp bkV4dGVuc2lvbk9wdGlvbkFycmF5W2ldLm9wdGlvbl9uYW1lLAogCQkJCSAgIG9wdGlvbl9uYW1l KSA9PSAwKQogCQl7Ci0JCQlFeHBsYWluRXh0ZW5zaW9uT3B0aW9uQXJyYXlbaV0ub3B0aW9uX2hh bmRsZXIgPSBoYW5kbGVyOworCQkJZXhvcHQgPSAmRXhwbGFpbkV4dGVuc2lvbk9wdGlvbkFycmF5 W2ldOworCisJCQlleG9wdC0+b3B0aW9uX2hhbmRsZXIgPSBoYW5kbGVyOworCQkJZXhvcHQtPmd1 Y19jaGVja19oYW5kbGVyID0gZ3VjX2NoZWNrX2hhbmRsZXI7CiAJCQlyZXR1cm47CiAJCX0KIAl9 CkBAIC0zNTIsNiArMzY4LDcgQEAgUmVnaXN0ZXJFeHRlbnNpb25FeHBsYWluT3B0aW9uKGNvbnN0 IGNoYXIgKm9wdGlvbl9uYW1lLAogCWV4b3B0ID0gJkV4cGxhaW5FeHRlbnNpb25PcHRpb25BcnJh eVtFeHBsYWluRXh0ZW5zaW9uT3B0aW9uc0Fzc2lnbmVkKytdOwogCWV4b3B0LT5vcHRpb25fbmFt ZSA9IG9wdGlvbl9uYW1lOwogCWV4b3B0LT5vcHRpb25faGFuZGxlciA9IGhhbmRsZXI7CisJZXhv cHQtPmd1Y19jaGVja19oYW5kbGVyID0gZ3VjX2NoZWNrX2hhbmRsZXI7CiB9CiAKIC8qCkBAIC0z NzUsMyArMzkyLDk5IEBAIEFwcGx5RXh0ZW5zaW9uRXhwbGFpbk9wdGlvbihFeHBsYWluU3RhdGUg KmVzLCBEZWZFbGVtICpvcHQsIFBhcnNlU3RhdGUgKnBzdGF0ZSkKIAogCXJldHVybiBmYWxzZTsK IH0KKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIGFuIEVYUExBSU4gZXh0ZW5zaW9uIG9wdGlv biB3aWxsIGJlIGFjY2VwdGVkIHdpdGhvdXQKKyAqIGVycm9yLiBSZXR1cm5zIHRydWUgaWYgc28s IGFuZCBmYWxzZSBpZiBub3QuIFNlZSB0aGUgY29tbWVudHMgZm9yCisgKiBHVUNDaGVja0Jvb2xl YW5FeHBsYWluT3B0aW9uIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGNhbGxlciBuZWVk IG5vdCBrbm93IHRoYXQgdGhlIG9wdGlvbl9uYW1lIGlzIHZhbGlkOyB0aGlzIGZ1bmN0aW9uCisg KiB3aWxsIGluZGljYXRlIHRoYXQgdGhlIG9wdGlvbiBpcyB1bnJlY29nbml6ZWQgaWYgdGhhdCBp cyB0aGUgY2FzZS4KKyAqLworYm9vbAorR1VDQ2hlY2tFeHBsYWluRXh0ZW5zaW9uT3B0aW9uKGNv bnN0IGNoYXIgKm9wdGlvbl9uYW1lLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm9wdGlvbl92YWx1 ZSwKKwkJCQkJCQkgICBOb2RlVGFnIG9wdGlvbl90eXBlKQoreworCWZvciAoaW50IGkgPSAwOyBp IDwgRXhwbGFpbkV4dGVuc2lvbk9wdGlvbnNBc3NpZ25lZDsgaSsrKQorCXsKKwkJRXhwbGFpbkV4 dGVuc2lvbk9wdGlvbiAqZXhvcHQgPSAmRXhwbGFpbkV4dGVuc2lvbk9wdGlvbkFycmF5W2ldOwor CisJCWlmIChzdHJjbXAoZXhvcHQtPm9wdGlvbl9uYW1lLCBvcHRpb25fbmFtZSkgPT0gMCkKKwkJ CXJldHVybiBleG9wdC0+Z3VjX2NoZWNrX2hhbmRsZXIob3B0aW9uX25hbWUsIG9wdGlvbl92YWx1 ZSwKKwkJCQkJCQkJCQkJb3B0aW9uX3R5cGUpOworCX0KKworCS8qIFVucmVjb2duaXplZCBvcHRp b24gbmFtZS4gKi8KKwlHVUNfY2hlY2tfZXJybXNnKCJ1bnJlY29nbml6ZWQgRVhQTEFJTiBvcHRp b24gXCIlc1wiIiwgb3B0aW9uX25hbWUpOworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIGd1 Y19jaGVja19oYW5kbGVyIGZvciBCb29sZWFuLXZhbHVlZCBFWFBMQUlOIGV4dGVuc2lvbiBvcHRp b25zLgorICoKKyAqIEFmdGVyIHJlY2VpdmluZyBhICJ0cnVlIiB2YWx1ZSBmcm9tIHRoaXMgb3Ig YW55IG90aGVyIEdVQyBjaGVjayBoYW5kbGVyCisgKiBmb3IgYW4gRVhQTEFJTiBleHRlbnNpb24g b3B0aW9uLCB0aGUgY2FsbGVyIGlzIGVudGl0bGVkIHRvIGFzc3VtZSB0aGF0CisgKiBhIHN1aXRh Ymx5IGNvbnN0cnVjdGVkIERlZkVsZW0gcGFzc2VkIHRvIHRoZSBtYWluIG9wdGlvbiBoYW5kbGVy IHdpbGwKKyAqIG5vdCBjYXVzZSBhbiBlcnJvci4gVG8gY29uc3RydWN0IHRoaXMgRGVmRWxlbSwg dGhlIGNhbGxlciBzaG91bGQgc2V0CisgKiB0aGUgRGVmRWxlbSdzIGRlZm5hbWUgdG8gb3B0aW9u X25hbWUuIElmIG9wdGlvbl92YWx1ZXMgaXMgTlVMTCwgYXJnCisgKiBzaG91bGQgYmUgTlVMTC4g T3RoZXJ3aXNlLCBhcmcgc2hvdWxkIGJlIG9mIHRoZSB0eXBlIGdpdmVuIGJ5CisgKiBvcHRpb25f dHlwZSwgd2l0aCBvcHRpb25fdmFsdWUgYXMgdGhlIGFzc29jaWF0ZWQgdmFsdWUuIFRoZSBvbmx5 IG9wdGlvbgorICogdHlwZXMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIGFyZSBUX1N0cmluZywgVF9G bG9hdCwgYW5kIFRfSW50ZWdlcjsgaW4KKyAqIHRoZSBsYXN0IGNhc2UsIHRoZSBjYWxsZXIgd2ls bCBuZWVkIHRvIHBlcmZvcm0gYSBzdHJpbmctdG8taW50ZWdlcgorICogY29udmVyc2lvbi4KKyAq CisgKiBBIGd1Y19jaGVja19oYW5kbGVyIHNob3VsZCBub3QgdGhyb3cgYW4gZXJyb3IsIGFuZCBz aG91bGQgbm90IGFsbG9jYXRlCisgKiBtZW1vcnkuICBJZiBpdCByZXR1cm5zIGZhbHNlIHRvIGlu ZGljYXRlIHRoYXQgdGhlIG9wdGlvbl92YWx1ZSBpcyBub3QKKyAqIGFjY2VwdGFibGUsIGl0IG1h eSB1c2UgR1VDX2NoZWNrX2Vycm1zZygpLCBHVUNfY2hlY2tfZXJyZGV0YWlsKCksIGV0Yy4KKyAq IHRvIGNsYXJpZnkgdGhlIG5hdHVyZSBvZiB0aGUgcHJvYmxlbS4KKyAqCisgKiBTaW5jZSB3ZSdy ZSBjb25jZXJuZWQgd2l0aCBCb29sZWFuIG9wdGlvbnMgaGVyZSwgdGhlIGxvZ2ljIGJlbG93IG11 c3QKKyAqIGV4YWN0bHkgbWF0Y2ggdGhlIHNlbWFudGljcyBvZiBkZWZHZXRCb29sZWFuLgorICov Citib29sCitHVUNDaGVja0Jvb2xlYW5FeHBsYWluT3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbl9u YW1lLAorCQkJCQkJCSBjb25zdCBjaGFyICpvcHRpb25fdmFsdWUsCisJCQkJCQkJIE5vZGVUYWcg b3B0aW9uX3R5cGUpCit7CisJYm9vbAkJdmFsaWQgPSBmYWxzZTsKKworCWlmIChvcHRpb25fdmFs dWUgPT0gTlVMTCkKKwl7CisJCS8qIGRlZkdldEJvb2xlYW4gdHJlYXRzIG5vIGFyZ3VtZW50IGFz IHZhbGlkICovCisJCXZhbGlkID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAob3B0aW9uX3R5cGUgPT0g VF9TdHJpbmcpCisJeworCQkvKiBkZWZHZXRCb29sZWFuIGFjY2VwdHMgZXhhY3RseSB0aGVzZSBz dHJpbmcgdmFsdWVzICovCisJCWlmIChwZ19zdHJjYXNlY21wKG9wdGlvbl92YWx1ZSwgInRydWUi KSA9PSAwIHx8CisJCQlwZ19zdHJjYXNlY21wKG9wdGlvbl92YWx1ZSwgImZhbHNlIikgPT0gMCB8 fAorCQkJcGdfc3RyY2FzZWNtcChvcHRpb25fdmFsdWUsICJvbiIpID09IDAgfHwKKwkJCXBnX3N0 cmNhc2VjbXAob3B0aW9uX3ZhbHVlLCAib2ZmIikgPT0gMCkKKwkJCXZhbGlkID0gdHJ1ZTsKKwl9 CisJZWxzZSBpZiAob3B0aW9uX3R5cGUgPT0gVF9JbnRlZ2VyKQorCXsKKwkJbG9uZwkJdmFsdWU7 CisJCWNoYXIJICAgKmVuZDsKKworCQkvKgorCQkgKiBkZWZHZXRCb29sZWFuIGFjY2VwdHMgb25s eSAwIGFuZCAxLCBidXQgdGhvc2UgY2FuIGJlIHNwZWxsZWQgaW4KKwkJICogdmFyaW91cyB3YXlz IChlLmcuIDAxLCAweDAxKS4KKwkJICovCisJCWVycm5vID0gMDsKKwkJdmFsdWUgPSBzdHJ0b2wo b3B0aW9uX3ZhbHVlLCAmZW5kLCAwKTsKKwkJaWYgKGVycm5vID09IDAgJiYgKmVuZCA9PSAnXDAn ICYmIGVuZCAhPSBvcHRpb25fdmFsdWUgJiYKKwkJCXZhbHVlID09IChpbnQpIHZhbHVlICYmICh2 YWx1ZSA9PSAwIHx8IHZhbHVlID09IDEpKQorCQkJdmFsaWQgPSB0cnVlOworCX0KKworCWlmICgh dmFsaWQpCisJeworCQlHVUNfY2hlY2tfZXJybXNnKCJFWFBMQUlOIG9wdGlvbiBcIiVzXCIgcmVx dWlyZXMgYSBCb29sZWFuIHZhbHVlIiwKKwkJCQkJCSBvcHRpb25fbmFtZSk7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL2V4cGxhaW5fc3RhdGUuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3Rh dGUuaAppbmRleCA1YTQ4YmM2ZmJiMS4uNjI1MmZlMTFmMTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9l eHBsYWluX3N0YXRlLmgKQEAgLTc4LDYgKzc4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwbGFpblN0 YXRlCiB9IEV4cGxhaW5TdGF0ZTsKIAogdHlwZWRlZiB2b2lkICgqRXhwbGFpbk9wdGlvbkhhbmRs ZXIpIChFeHBsYWluU3RhdGUgKiwgRGVmRWxlbSAqLCBQYXJzZVN0YXRlICopOwordHlwZWRlZiBi b29sICgqRXhwbGFpbk9wdGlvbkdVQ0NoZWNrSGFuZGxlcikgKGNvbnN0IGNoYXIgKm9wdGlvbl9u YW1lLAorCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm9wdGlvbl92YWx1ZSwKKwkJCQkJCQkJCQkJ ICBOb2RlVGFnIG9wdGlvbl90eXBlKTsKIAogLyogSG9vayB0byBwZXJmb3JtIGFkZGl0aW9uYWwg RVhQTEFJTiBvcHRpb25zIHZhbGlkYXRpb24gKi8KIHR5cGVkZWYgdm9pZCAoKmV4cGxhaW5fdmFs aWRhdGVfb3B0aW9uc19ob29rX3R5cGUpIChFeHBsYWluU3RhdGUgKmVzLCBMaXN0ICpvcHRpb25z LApAQCAtOTQsOCArOTcsMTYgQEAgZXh0ZXJuIHZvaWQgU2V0RXhwbGFpbkV4dGVuc2lvblN0YXRl KEV4cGxhaW5TdGF0ZSAqZXMsIGludCBleHRlbnNpb25faWQsCiAJCQkJCQkJCQkgdm9pZCAqb3Bh cXVlKTsKIAogZXh0ZXJuIHZvaWQgUmVnaXN0ZXJFeHRlbnNpb25FeHBsYWluT3B0aW9uKGNvbnN0 IGNoYXIgKm9wdGlvbl9uYW1lLAotCQkJCQkJCQkJCSAgIEV4cGxhaW5PcHRpb25IYW5kbGVyIGhh bmRsZXIpOworCQkJCQkJCQkJCSAgIEV4cGxhaW5PcHRpb25IYW5kbGVyIGhhbmRsZXIsCisJCQkJ CQkJCQkJICAgRXhwbGFpbk9wdGlvbkdVQ0NoZWNrSGFuZGxlciBndWNfY2hlY2tfaGFuZGxlcik7 CiBleHRlcm4gYm9vbCBBcHBseUV4dGVuc2lvbkV4cGxhaW5PcHRpb24oRXhwbGFpblN0YXRlICpl cywgRGVmRWxlbSAqb3B0LAogCQkJCQkJCQkJCVBhcnNlU3RhdGUgKnBzdGF0ZSk7CitleHRlcm4g Ym9vbCBHVUNDaGVja0V4cGxhaW5FeHRlbnNpb25PcHRpb24oY29uc3QgY2hhciAqb3B0aW9uX25h bWUsCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqb3B0aW9uX3ZhbHVlLAorCQkJCQkJCQkJCSAg IE5vZGVUYWcgb3B0aW9uX3R5cGUpOworCitleHRlcm4gYm9vbCBHVUNDaGVja0Jvb2xlYW5FeHBs YWluT3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbl9uYW1lLAorCQkJCQkJCQkJCSBjb25zdCBjaGFy ICpvcHRpb25fdmFsdWUsCisJCQkJCQkJCQkJIE5vZGVUYWcgb3B0aW9uX3R5cGUpOwogCiAjZW5k aWYJCQkJCQkJLyogRVhQTEFJTl9TVEFURV9IICovCi0tIAoyLjUxLjAKCg== --000000000000446bbd064e545385--