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 1w8Mbq-000Sev-24 for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 18:17:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8Mbp-007Qlj-1H for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 18:17:37 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8Mbo-007Qla-26 for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 18:17:37 +0000 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8Mbm-00000000E3m-2FB8 for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 18:17:35 +0000 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-b9c3a9fe80fso149919566b.3 for ; Thu, 02 Apr 2026 11:17:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775153853; cv=none; d=google.com; s=arc-20240605; b=MEX18Q2dBF04rSiH2g3X+/0IByKIQOWP1s0bA1YowI0AEEB1XqqH4z7oFK9mNKx3se aNJC+4uC72e/YI8Aoseqpm5aBlyokIU9w7R3+rKJZOfLXz5OoihLVZ+b27cGBbLmoRpU NezMbqRG4e+aREY9AYNb+njxiNn3pnwrs6S7qOMglRA7FRjLBwS4XnU16gB2NUj4nU+m iTYCoLpr0qUCjvE8wGbEwEwj9Nk7ufJPhJnjfwU+dEUme3PLhoj3hjUSrrkf8ufcdzOe fqjld7tKop6ZfM+BOWBiI5Aozne6n2XjC73kUqsDyjC2g5kmipQO0WF8UxMKK8BXEdHp friw== 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=TlN2eomaLJqTvARuoKdW/fW82KGT+NNdjEY8uNRsfXM=; fh=RPtb2bA00CamRn+MEFVuvHJZBDnh+o5KQkmVxrwQjMU=; b=KA79QWrHRopPSq+r0R3fVzyXVQwvGzbNRcppTSKnYXKc6tJebZabIgzO1SXgc55cN/ NK4/AlPYNzWwlJT0ezhGz924N+XaTnsC1Cc6iflHto9sUds8agwM5oLLixeTb0YZ8CxO baVRHC5ihv84d0UstE9MMZCrCj0aDSIelME/oaIObemC7/sv6huQjxs26Usg1gzLFnUx kjFsCMXbvVv/YSap2a1DGtmjDn8rlEZHxqLh9dB3aWQ6IcxBguAgGM34bvKU9Z7oAieI 1fRiS05RHrKUiv9ITWWXKVRLAsSe8pO2nr/rT8M+lj5yzzwFpoVM7aKvvSkoaV3vSf8i 1pJQ==; 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=1775153853; x=1775758653; 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=TlN2eomaLJqTvARuoKdW/fW82KGT+NNdjEY8uNRsfXM=; b=l1QgY2zIOklV43CHwsbfD6B23pbLJeaPRGcchVg7im9gzSzppLFNDf+T63250jGQaf OefIYYFpU4O+c0NMMGab5fbakX2gnpUIL/q6P9Mu9/O174nzntb+gaR86DF4mpXAoekd GFBdK6ZJqQGMcLKF4O+mS6TgGUAqGAQ0rwYcb4XQU2vHQ76186uAKj/n94T6MTqPmOFV yrclXupo6GLmLeD1EISw0fSJSxRHKdQ74rPse/cchJaUGCltEIqv9qf7Mnp7iStwHyoo XcAXhYJ3c0/9xvE/Bfoa9jl31d/m3l2fy317onLKlWorQMet6+LGf2edR5ygZV6NiInj /zng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775153853; x=1775758653; 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=TlN2eomaLJqTvARuoKdW/fW82KGT+NNdjEY8uNRsfXM=; b=cfEmgUF2GsHoQFypROd7LFLChD+wMXfeis/x+a994DppjNT1HCwgtzeVIjR1UshT3q 3HKOytRoExdVHnvt6K98LTpenjYTpucb+hdY9ngnuiqZ5ADUWb2b83Y2dp2MXCiawWSM w2L6lZevC4jDYhOibHDCA1m9S9Rr9KnsQZ95JkwR4eZPRoFBkRxQBtXedQIuqjeKIgvP jr7yUwi3RN6mU+0vvQ2PQBvFSBORaZiVjBN+rIxsQSArOTIHN5n1pQnIG4GoHMWd0CA3 mBJtsZPgtKBQEItdw/WMO+o/n9MDMSl/TnP1K2KYSbBAl9n1etZBpFyJo8gzTUnGsKkI QyqA== X-Gm-Message-State: AOJu0YzR67+Yu1RbwHR1533qKYUpqMQoOQlWE22KLY+dqso84JX12pzw GokElRSBOH/2ThIjiI70ZrpIta4avgBr447/VsjySF/mUvUrpuNJtCUniUKgN3awyTegYfxJMeO +l24+9xcq0pQe3DQqmtDsj2WkaJqzos4= X-Gm-Gg: ATEYQzwKkJPEp/e52StB93tlosLIpGaYYSZLUcPG0WHTEFeGs6y3GtLgjF5DoIX4PB4 VF58Py+M5QAWooZMyxvB6hu+FEff4QHv3UMckQ6HWjuGJZtETF4y/s+7BwV5BUIBb3hqhkwDBiL y9ELUzo0Uad+0hYKzuXXqf4Bavl+2ywHSRmgQt/HwxV0uiTMVQ0yRYilDTn41df2IJsdU1Hkwrt 2PTLlMPoYDYRqRHG2XZdPW8Qhmjzn93bDvIDncVgSB+BjGigFfgKdF7vMUUciw14+YvprTOqjN7 2/L2Ac8vAYhcJWnoArWOpXYxvS+TozbqVgS83eFRT/xNqFN8Jw== X-Received: by 2002:a17:906:12d6:b0:b98:d58:f75e with SMTP id a640c23a62f3a-b9c137b4d46mr232434766b.2.1775153852844; Thu, 02 Apr 2026 11:17:32 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Thu, 2 Apr 2026 14:17:20 -0400 X-Gm-Features: AQROBzBGUG5RMIflwp5DahesvmGt9skcGN3WLMcvmCgPsCv3JPAv_DRktw-PRYg 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="000000000000d275f7064e7e3637" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d275f7064e7e3637 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 31, 2026 at 6:10=E2=80=AFPM Matheus Alcantara wrote: > I think that we are safe against overflow because on > auto_explain_split_options() it has intval =3D=3D (int) intval, but I'm > wondering if it's worth documenting this? We could add a comment here that the validity checks have already been done at an earlier stage, but I felt like that was overkill. Possibly not? > extension_options is being added to REGRESS in both Makefile and > meson.build, but the actual test files are not included. Well, that sucks. I accidentally erased that file instead of committing it. Here's a new version with mostly the same tests, plus I updated the TAP test with a related test case as well. > + an associated value. The module that provides the > + EXPLAIN option, such as > + pg_plan_advice or > + pg_overexplain<= /link>, > + should be loaded before this parameter is set. > > Wondering if this is clear enough about the shared_preload_libraries > order (auto_explain should be loaded after extensions that include > explain options) or if we should mention this explicitly. I actually thought that this might not be true until I tested it and found that it sort of is. If you don't set auto_explain.log_extension_options in postgresql.conf, then you can load the modules in either order and it's fine. But if you do set it, then you need to have the EXPLAIN option provider before auto_explain, or else you get something like this: 2026-04-02 14:03:19.282 EDT [4614] WARNING: unrecognized EXPLAIN option "d= ebug" ...because we read the whole postgresql.conf file before applying any of it, and so if auto_explain's _PG_init() runs first, the GUC value is already visible but the EXPLAIN option doesn't exist yet. That's annoying, but I'm not sure it's worth any more of a documentation reference than what I have already. "Before this parameter is set" could be read to encompass "put it earlier in shared_preload_libraries," and if someone does it wrong, it will become obvious quickly enough. If you (or someone else) doesn't agree, feel free to propose better wording -- I just don't want to expand the description so much that it becomes a distraction. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000d275f7064e7e3637 Content-Type: application/octet-stream; name="v2-0003-auto_explain-Add-new-GUC-auto_explain.log_extensi.patch" Content-Disposition: attachment; filename="v2-0003-auto_explain-Add-new-GUC-auto_explain.log_extensi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnhsqpe42 RnJvbSAwYmU5NzIzMzAzZGNlNDMzNGNhYzU5Mzg4M2U1ZTBhM2M0YTYwMTgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMiBBcHIgMjAyNiAxMzo1NjoyNiAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIgMy8z XSBhdXRvX2V4cGxhaW46IEFkZCBuZXcgR1VDLAogYXV0b19leHBsYWluLmxvZ19leHRlbnNpb25f b3B0aW9ucy4KClRoZSBhc3NvY2lhdGVkIHZhbHVlIHNob3VsZCBsb29rIGxpa2Ugc29tZXRoaW5n IHRoYXQgY291bGQgYmUKcGFydCBvZiBhbiBFWFBMQUlOIG9wdGlvbnMgbGlzdCwgYnV0IHJlc3Ry aWN0ZWQgdG8gRVhQTEFJTiBvcHRpb25zCmFkZGVkIGJ5IGV4dGVuc2lvbnMuCgpGb3IgZXhhbXBs ZSwgaWYgcGdfb3ZlcmV4cGxhaW4gaXMgbG9hZGVkLCB5b3UgY291bGQgc2V0CmF1dG9fZXhwbGFp bi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAnREVCVUcsIFJBTkdFX1RBQkxFJy4KWW91IGNhbiBh bHNvIHNwZWNpZnkgYXJndW1lbnRzIHRvIHRoZXNlIG9wdGlvbnMgaW4gdGhlIHNhbWUgbWFubmVy CmFzIG5vcm1hbCBlLmcuICdERUJVRyAxLCBSQU5HRV9UQUJMRSBmYWxzZScuCgpSZXZpZXdlZC1i eTogTWF0aGV1cyBBbGNhbnRhcmEgPG1hdGhldXNzc2lsdjk3QGdtYWlsLmNvbT4KRGlzY3Vzc2lv bjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1RnbW9iLTBXODMwNm12ckpYNVVydHF0MUFBYXN1OHBp NHlMcloxWGZ3WlUtVWoxd0BtYWlsLmdtYWlsLmNvbQotLS0KIGNvbnRyaWIvYXV0b19leHBsYWlu L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMyArLQogY29udHJpYi9hdXRvX2V4cGxhaW4v YXV0b19leHBsYWluLmMgICAgICAgICAgIHwgMzc4ICsrKysrKysrKysrKysrKysrKwogLi4uL2V4 cGVjdGVkL2V4dGVuc2lvbl9vcHRpb25zLm91dCAgICAgICAgICAgIHwgIDQ5ICsrKwogY29udHJp Yi9hdXRvX2V4cGxhaW4vbWVzb24uYnVpbGQgICAgICAgICAgICAgIHwgICAxICsKIC4uLi9hdXRv X2V4cGxhaW4vc3FsL2V4dGVuc2lvbl9vcHRpb25zLnNxbCAgICB8ICAzMyArKwogY29udHJpYi9h dXRvX2V4cGxhaW4vdC8wMDFfYXV0b19leHBsYWluLnBsICAgIHwgIDE4ICstCiBkb2Mvc3JjL3Nn bWwvYXV0by1leHBsYWluLnNnbWwgICAgICAgICAgICAgICAgfCAgMjMgKysKIHNyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArCiA4IGZpbGVzIGNoYW5n ZWQsIDUwNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvYXV0b19leHBsYWluL2V4cGVjdGVkL2V4dGVuc2lvbl9vcHRpb25zLm91dAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYXV0b19leHBsYWluL3NxbC9leHRlbnNpb25fb3B0aW9u cy5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL2F1dG9fZXhwbGFpbi9NYWtlZmlsZSBiL2NvbnRy aWIvYXV0b19leHBsYWluL01ha2VmaWxlCmluZGV4IDk0YWIyOGU3YzA2Li4xZjYwOGIxZDczMyAx MDA2NDQKLS0tIGEvY29udHJpYi9hdXRvX2V4cGxhaW4vTWFrZWZpbGUKKysrIGIvY29udHJpYi9h dXRvX2V4cGxhaW4vTWFrZWZpbGUKQEAgLTYsNyArNiw4IEBAIE9CSlMgPSBcCiAJYXV0b19leHBs YWluLm8KIFBHRklMRURFU0MgPSAiYXV0b19leHBsYWluIC0gbG9nZ2luZyBmYWNpbGl0eSBmb3Ig ZXhlY3V0aW9uIHBsYW5zIgogCi1SRUdSRVNTID0gYWx0ZXJfcmVzZXQKK0VYVFJBX0lOU1RBTEwg PSBjb250cmliL3BnX292ZXJleHBsYWluCitSRUdSRVNTID0gYWx0ZXJfcmVzZXQgZXh0ZW5zaW9u X29wdGlvbnMKIAogVEFQX1RFU1RTID0gMQogCmRpZmYgLS1naXQgYS9jb250cmliL2F1dG9fZXhw bGFpbi9hdXRvX2V4cGxhaW4uYyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5j CmluZGV4IGU4NTZjZDM1YTZmLi4xMzJjMzAyNWYzMyAxMDA2NDQKLS0tIGEvY29udHJpYi9hdXRv X2V4cGxhaW4vYXV0b19leHBsYWluLmMKKysrIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19l eHBsYWluLmMKQEAgLTE1LDEyICsxNSwxNyBAQAogI2luY2x1ZGUgPGxpbWl0cy5oPgogCiAjaW5j bHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5f Zm9ybWF0LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIgogI2luY2x1ZGUg ImNvbW1vbi9wZ19wcm5nLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgorI2lu Y2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL3ZhbHVlLmgiCisjaW5j bHVkZSAicGFyc2VyL3NjYW5zdXAuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRl ICJ1dGlscy92YXJsZW5hLmgiCiAKIFBHX01PRFVMRV9NQUdJQ19FWFQoCiAJCQkJCS5uYW1lID0g ImF1dG9fZXhwbGFpbiIsCkBAIC00MSw2ICs0NiwzMSBAQCBzdGF0aWMgaW50CWF1dG9fZXhwbGFp bl9sb2dfZm9ybWF0ID0gRVhQTEFJTl9GT1JNQVRfVEVYVDsKIHN0YXRpYyBpbnQJYXV0b19leHBs YWluX2xvZ19sZXZlbCA9IExPRzsKIHN0YXRpYyBib29sIGF1dG9fZXhwbGFpbl9sb2dfbmVzdGVk X3N0YXRlbWVudHMgPSBmYWxzZTsKIHN0YXRpYyBkb3VibGUgYXV0b19leHBsYWluX3NhbXBsZV9y YXRlID0gMTsKK3N0YXRpYyBjaGFyICphdXRvX2V4cGxhaW5fbG9nX2V4dGVuc2lvbl9vcHRpb25z ID0gTlVMTDsKKworLyoKKyAqIFBhcnNlZCBmb3JtIG9mIG9uZSBvcHRpb24gZnJvbSBhdXRvX2V4 cGxhaW4ubG9nX2V4dGVuc2lvbl9vcHRpb25zLgorICovCit0eXBlZGVmIHN0cnVjdCBhdXRvX2V4 cGxhaW5fb3B0aW9uCit7CisJY2hhcgkgICAqbmFtZTsKKwljaGFyCSAgICp2YWx1ZTsKKwlOb2Rl VGFnCQl0eXBlOworfSBhdXRvX2V4cGxhaW5fb3B0aW9uOworCisvKgorICogUGFyc2VkIGZvcm0g b2YgdGhlIGVudGlyZXR5IG9mIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMsIHN0 b3JlZAorICogYXMgR1VDIGV4dHJhLiBUaGUgb3B0aW9uc1tdIGFycmF5IHdpbGwgaGF2ZSBwb2lu dGVycyBpbnRvIHRoZSBzdHJpbmcKKyAqIGZvbGxvd2luZyB0aGUgYXJyYXkuCisgKi8KK3R5cGVk ZWYgc3RydWN0IGF1dG9fZXhwbGFpbl9leHRlbnNpb25fb3B0aW9ucworeworCWludAkJCW5vcHRp b25zOworCWF1dG9fZXhwbGFpbl9vcHRpb24gb3B0aW9uc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJd OworCS8qIGEgbnVsbC10ZXJtaW5hdGVkIGNvcHkgb2YgdGhlIEdVQyBzdHJpbmcgZm9sbG93cyB0 aGUgYXJyYXkgKi8KK30gYXV0b19leHBsYWluX2V4dGVuc2lvbl9vcHRpb25zOworCitzdGF0aWMg YXV0b19leHBsYWluX2V4dGVuc2lvbl9vcHRpb25zICpleHRlbnNpb25fb3B0aW9ucyA9IE5VTEw7 CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2VudW1fZW50cnkgZm9ybWF0X29wdGlvbnNb XSA9IHsKIAl7InRleHQiLCBFWFBMQUlOX0ZPUk1BVF9URVhULCBmYWxzZX0sCkBAIC04OCw2ICsx MTgsMTUgQEAgc3RhdGljIHZvaWQgZXhwbGFpbl9FeGVjdXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5 RGVzYywKIHN0YXRpYyB2b2lkIGV4cGxhaW5fRXhlY3V0b3JGaW5pc2goUXVlcnlEZXNjICpxdWVy eURlc2MpOwogc3RhdGljIHZvaWQgZXhwbGFpbl9FeGVjdXRvckVuZChRdWVyeURlc2MgKnF1ZXJ5 RGVzYyk7CiAKK3N0YXRpYyBib29sIGNoZWNrX2xvZ19leHRlbnNpb25fb3B0aW9ucyhjaGFyICoq bmV3dmFsLCB2b2lkICoqZXh0cmEsCisJCQkJCQkJCQkJR3VjU291cmNlIHNvdXJjZSk7CitzdGF0 aWMgdm9pZCBhc3NpZ25fbG9nX2V4dGVuc2lvbl9vcHRpb25zKGNvbnN0IGNoYXIgKm5ld3ZhbCwg dm9pZCAqZXh0cmEpOworc3RhdGljIHZvaWQgYXBwbHlfZXh0ZW5zaW9uX29wdGlvbnMoRXhwbGFp blN0YXRlICplcywKKwkJCQkJCQkJCWF1dG9fZXhwbGFpbl9leHRlbnNpb25fb3B0aW9ucyAqZXh0 KTsKK3N0YXRpYyBjaGFyICphdXRvX2V4cGxhaW5fc2Nhbl9saXRlcmFsKGNoYXIgKiplbmRwLCBj aGFyICoqbmV4dHApOworc3RhdGljIGludAlhdXRvX2V4cGxhaW5fc3BsaXRfb3B0aW9ucyhjaGFy ICpyYXdzdHJpbmcsCisJCQkJCQkJCQkgICBhdXRvX2V4cGxhaW5fb3B0aW9uICpvcHRpb25zLAor CQkJCQkJCQkJICAgaW50IG1heG9wdGlvbnMsIGNoYXIgKiplcnJtc2cpOwogCiAvKgogICogTW9k dWxlIGxvYWQgY2FsbGJhY2sKQEAgLTIzMiw2ICsyNzEsMTcgQEAgX1BHX2luaXQodm9pZCkKIAkJ CQkJCQkgTlVMTCwKIAkJCQkJCQkgTlVMTCk7CiAKKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJs ZSgiYXV0b19leHBsYWluLmxvZ19leHRlbnNpb25fb3B0aW9ucyIsCisJCQkJCQkJICAgIkV4dGVu c2lvbiBFWFBMQUlOIG9wdGlvbnMgdG8gYmUgYWRkZWQuIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJ CQkJCSAgICZhdXRvX2V4cGxhaW5fbG9nX2V4dGVuc2lvbl9vcHRpb25zLAorCQkJCQkJCSAgIE5V TEwsCisJCQkJCQkJICAgUEdDX1NVU0VULAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgY2hlY2tf bG9nX2V4dGVuc2lvbl9vcHRpb25zLAorCQkJCQkJCSAgIGFzc2lnbl9sb2dfZXh0ZW5zaW9uX29w dGlvbnMsCisJCQkJCQkJICAgTlVMTCk7CisKIAlEZWZpbmVDdXN0b21SZWFsVmFyaWFibGUoImF1 dG9fZXhwbGFpbi5zYW1wbGVfcmF0ZSIsCiAJCQkJCQkJICJGcmFjdGlvbiBvZiBxdWVyaWVzIHRv IHByb2Nlc3MuIiwKIAkJCQkJCQkgTlVMTCwKQEAgLTQwNCw2ICs0NTQsOCBAQCBleHBsYWluX0V4 ZWN1dG9yRW5kKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQogCQkJZXMtPmZvcm1hdCA9IGF1dG9fZXhw bGFpbl9sb2dfZm9ybWF0OwogCQkJZXMtPnNldHRpbmdzID0gYXV0b19leHBsYWluX2xvZ19zZXR0 aW5nczsKIAorCQkJYXBwbHlfZXh0ZW5zaW9uX29wdGlvbnMoZXMsIGV4dGVuc2lvbl9vcHRpb25z KTsKKwogCQkJRXhwbGFpbkJlZ2luT3V0cHV0KGVzKTsKIAkJCUV4cGxhaW5RdWVyeVRleHQoZXMs IHF1ZXJ5RGVzYyk7CiAJCQlFeHBsYWluUXVlcnlQYXJhbWV0ZXJzKGVzLCBxdWVyeURlc2MtPnBh cmFtcywgYXV0b19leHBsYWluX2xvZ19wYXJhbWV0ZXJfbWF4X2xlbmd0aCk7CkBAIC00MTIsNiAr NDY0LDEyIEBAIGV4cGxhaW5fRXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpCiAJCQkJ RXhwbGFpblByaW50VHJpZ2dlcnMoZXMsIHF1ZXJ5RGVzYyk7CiAJCQlpZiAoZXMtPmNvc3RzKQog CQkJCUV4cGxhaW5QcmludEpJVFN1bW1hcnkoZXMsIHF1ZXJ5RGVzYyk7CisJCQlpZiAoZXhwbGFp bl9wZXJfcGxhbl9ob29rKQorCQkJCSgqZXhwbGFpbl9wZXJfcGxhbl9ob29rKSAocXVlcnlEZXNj LT5wbGFubmVkc3RtdCwKKwkJCQkJCQkJCQkgIE5VTEwsIGVzLAorCQkJCQkJCQkJCSAgcXVlcnlE ZXNjLT5zb3VyY2VUZXh0LAorCQkJCQkJCQkJCSAgcXVlcnlEZXNjLT5wYXJhbXMsCisJCQkJCQkJ CQkJICBxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfcXVlcnlFbnYpOwogCQkJRXhwbGFpbkVuZE91dHB1 dChlcyk7CiAKIAkJCS8qIFJlbW92ZSBsYXN0IGxpbmUgYnJlYWsgKi8KQEAgLTQ0NSwzICs1MDMs MzIzIEBAIGV4cGxhaW5fRXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpCiAJZWxzZQog CQlzdGFuZGFyZF9FeGVjdXRvckVuZChxdWVyeURlc2MpOwogfQorCisvKgorICogR1VDIGNoZWNr IGhvb2sgZm9yIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMuCisgKi8KK3N0YXRp YyBib29sCitjaGVja19sb2dfZXh0ZW5zaW9uX29wdGlvbnMoY2hhciAqKm5ld3ZhbCwgdm9pZCAq KmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQoreworCWNoYXIJICAgKnJhd3N0cmluZzsKKwlhdXRv X2V4cGxhaW5fZXh0ZW5zaW9uX29wdGlvbnMgKnJlc3VsdDsKKwlhdXRvX2V4cGxhaW5fb3B0aW9u ICpvcHRpb25zOworCWludAkJCW1heG9wdGlvbnMgPSA4OworCVNpemUJCXJhd3N0cmluZ19sZW47 CisJU2l6ZQkJYWxsb2NzaXplOworCWNoYXIJICAgKmVycm1zZzsKKworCS8qIE5VTEwgb3IgZW1w dHkgc3RyaW5nIG1lYW5zIG5vIG9wdGlvbnMuICovCisJaWYgKCpuZXd2YWwgPT0gTlVMTCB8fCAo Km5ld3ZhbClbMF0gPT0gJ1wwJykKKwl7CisJCSpleHRyYSA9IE5VTEw7CisJCXJldHVybiB0cnVl OworCX0KKworCXJhd3N0cmluZ19sZW4gPSBzdHJsZW4oKm5ld3ZhbCkgKyAxOworCityZXRyeToK KwkvKiBUcnkgdG8gYWxsb2NhdGUgYW4gYXV0b19leHBsYWluX2V4dGVuc2lvbl9vcHRpb25zIG9i amVjdC4gKi8KKwlhbGxvY3NpemUgPSBvZmZzZXRvZihhdXRvX2V4cGxhaW5fZXh0ZW5zaW9uX29w dGlvbnMsIG9wdGlvbnMpICsKKwkJc2l6ZW9mKGF1dG9fZXhwbGFpbl9vcHRpb24pICogbWF4b3B0 aW9ucyArCisJCXJhd3N0cmluZ19sZW47CisJcmVzdWx0ID0gKGF1dG9fZXhwbGFpbl9leHRlbnNp b25fb3B0aW9ucyAqKSBndWNfbWFsbG9jKExPRywgYWxsb2NzaXplKTsKKwlpZiAocmVzdWx0ID09 IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCS8qIENvcHkgdGhlIHN0cmluZyBhZnRlciB0aGUg b3B0aW9ucyBhcnJheS4gKi8KKwlyYXdzdHJpbmcgPSAoY2hhciAqKSAmcmVzdWx0LT5vcHRpb25z W21heG9wdGlvbnNdOworCW1lbWNweShyYXdzdHJpbmcsICpuZXd2YWwsIHJhd3N0cmluZ19sZW4p OworCisJLyogUGFyc2UuICovCisJb3B0aW9ucyA9IHJlc3VsdC0+b3B0aW9uczsKKwlyZXN1bHQt Pm5vcHRpb25zID0gYXV0b19leHBsYWluX3NwbGl0X29wdGlvbnMocmF3c3RyaW5nLCBvcHRpb25z LAorCQkJCQkJCQkJCQkJICBtYXhvcHRpb25zLCAmZXJybXNnKTsKKwlpZiAocmVzdWx0LT5ub3B0 aW9ucyA8IDApCisJeworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCIlcyIsIGVycm1zZyk7CisJCWd1 Y19mcmVlKHJlc3VsdCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIFJldHJ5IHdp dGggYSBsYXJnZXIgYXJyYXkgaWYgbmVlZGVkLgorCSAqCisJICogSXQgc2hvdWxkIGJlIGltcG9z c2libGUgZm9yIHRoaXMgdG8gbG9vcCBtb3JlIHRoYW4gb25jZSwgYmVjYXVzZQorCSAqIGF1dG9f ZXhwbGFpbl9zcGxpdF9vcHRpb25zIHRlbGxzIHVzIGhvdyBtYW55IGVudHJpZXMgYXJlIG5lZWRl ZC4KKwkgKi8KKwlpZiAocmVzdWx0LT5ub3B0aW9ucyA+IG1heG9wdGlvbnMpCisJeworCQltYXhv cHRpb25zID0gcmVzdWx0LT5ub3B0aW9uczsKKwkJZ3VjX2ZyZWUocmVzdWx0KTsKKwkJZ290byBy ZXRyeTsKKwl9CisKKwkvKiBWYWxpZGF0ZSBlYWNoIG9wdGlvbiBhZ2FpbnN0IGl0cyByZWdpc3Rl cmVkIGNoZWNrIGhhbmRsZXIuICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQtPm5vcHRp b25zOyBpKyspCisJeworCQlpZiAoIUdVQ0NoZWNrRXhwbGFpbkV4dGVuc2lvbk9wdGlvbihvcHRp b25zW2ldLm5hbWUsIG9wdGlvbnNbaV0udmFsdWUsCisJCQkJCQkJCQkJCW9wdGlvbnNbaV0udHlw ZSkpCisJCXsKKwkJCWd1Y19mcmVlKHJlc3VsdCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9 CisKKwkqZXh0cmEgPSByZXN1bHQ7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBHVUMgYXNz aWduIGhvb2sgZm9yIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMuCisgKi8KK3N0 YXRpYyB2b2lkCithc3NpZ25fbG9nX2V4dGVuc2lvbl9vcHRpb25zKGNvbnN0IGNoYXIgKm5ld3Zh bCwgdm9pZCAqZXh0cmEpCit7CisJZXh0ZW5zaW9uX29wdGlvbnMgPSAoYXV0b19leHBsYWluX2V4 dGVuc2lvbl9vcHRpb25zICopIGV4dHJhOworfQorCisvKgorICogQXBwbHkgcGFyc2VkIGV4dGVu c2lvbiBvcHRpb25zIHRvIGFuIEV4cGxhaW5TdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGx5 X2V4dGVuc2lvbl9vcHRpb25zKEV4cGxhaW5TdGF0ZSAqZXMsIGF1dG9fZXhwbGFpbl9leHRlbnNp b25fb3B0aW9ucyAqZXh0KQoreworCWlmIChleHQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9y IChpbnQgaSA9IDA7IGkgPCBleHQtPm5vcHRpb25zOyBpKyspCisJeworCQlhdXRvX2V4cGxhaW5f b3B0aW9uICpvcHQgPSAmZXh0LT5vcHRpb25zW2ldOworCQlEZWZFbGVtICAgICpkZWY7CisJCU5v ZGUJICAgKmFyZzsKKworCQlpZiAob3B0LT52YWx1ZSA9PSBOVUxMKQorCQkJYXJnID0gTlVMTDsK KwkJZWxzZSBpZiAob3B0LT50eXBlID09IFRfSW50ZWdlcikKKwkJCWFyZyA9IChOb2RlICopIG1h a2VJbnRlZ2VyKHN0cnRvbChvcHQtPnZhbHVlLCBOVUxMLCAwKSk7CisJCWVsc2UgaWYgKG9wdC0+ dHlwZSA9PSBUX0Zsb2F0KQorCQkJYXJnID0gKE5vZGUgKikgbWFrZUZsb2F0KG9wdC0+dmFsdWUp OworCQllbHNlCisJCQlhcmcgPSAoTm9kZSAqKSBtYWtlU3RyaW5nKG9wdC0+dmFsdWUpOworCisJ CWRlZiA9IG1ha2VEZWZFbGVtKG9wdC0+bmFtZSwgYXJnLCAtMSk7CisJCUFwcGx5RXh0ZW5zaW9u RXhwbGFpbk9wdGlvbihlcywgZGVmLCBOVUxMKTsKKwl9Cit9CisKKy8qCisgKiBhdXRvX2V4cGxh aW5fc2Nhbl9saXRlcmFsIC0gSW4tcGxhY2Ugc2Nhbm5lciBmb3Igc2luZ2xlLXF1b3RlZCBzdHJp bmcKKyAqIGxpdGVyYWxzLgorICoKKyAqIFRoaXMgaXMgdGhlIHNpbmdsZS1xdW90ZSBhbmFsb2cg b2Ygc2Nhbl9xdW90ZWRfaWRlbnRpZmllciBmcm9tIHZhcmxlbmEuYy4KKyAqLworc3RhdGljIGNo YXIgKgorYXV0b19leHBsYWluX3NjYW5fbGl0ZXJhbChjaGFyICoqZW5kcCwgY2hhciAqKm5leHRw KQoreworCWNoYXIJICAgKnRva2VuID0gKm5leHRwICsgMTsKKworCWZvciAoOzspCisJeworCQkq ZW5kcCA9IHN0cmNocigqbmV4dHAgKyAxLCAnXCcnKTsKKwkJaWYgKCplbmRwID09IE5VTEwpCisJ CQlyZXR1cm4gTlVMTDsJCS8qIG1pc21hdGNoZWQgcXVvdGVzICovCisJCWlmICgoKmVuZHApWzFd ICE9ICdcJycpCisJCQlicmVhazsJCQkJLyogZm91bmQgZW5kIG9mIGxpdGVyYWwgKi8KKwkJLyog Q29sbGFwc2UgYWRqYWNlbnQgcXVvdGVzIGludG8gb25lIHF1b3RlLCBhbmQgbG9vayBhZ2FpbiAq LworCQltZW1tb3ZlKCplbmRwLCAqZW5kcCArIDEsIHN0cmxlbigqZW5kcCkpOworCQkqbmV4dHAg PSAqZW5kcDsKKwl9CisJLyogKmVuZHAgbm93IHBvaW50cyBhdCB0aGUgdGVybWluYXRpbmcgcXVv dGUgKi8KKwkqbmV4dHAgPSAqZW5kcCArIDE7CisKKwlyZXR1cm4gdG9rZW47Cit9CisKKy8qCisg KiBhdXRvX2V4cGxhaW5fc3BsaXRfb3B0aW9ucyAtIFBhcnNlIGFuIG9wdGlvbiBzdHJpbmcgaW50 byBhbiBhcnJheSBvZgorICogYXV0b19leHBsYWluX29wdGlvbiBzdHJ1Y3RzLgorICoKKyAqIE11 Y2ggb2YgdGhpcyBsb2dpYyBpcyBzaW1pbGFyIHRvIFNwbGl0SWRlbnRpZmllclN0cmluZyBhbmQg ZnJpZW5kcywgYnV0IG91cgorICogbmVlZHMgYXJlIGRpZmZlcmVudCBlbm91Z2ggdGhhdCB3ZSBy b2xsIG91ciBvd24gcGFyc2luZyBsb2dpYy4gVGhlIGdvYWwgaGVyZQorICogaXMgdG8gYWNjZXB0 IHRoZSBzYW1lIHN5bnRheCB0aGF0IHRoZSBtYWluIHBhcnNlciB3b3VsZCBhY2NlcHRzIGluc2lk ZSBvZgorICogYW4gRVhQTEFJTiBvcHRpb24gbGlzdC4gV2hpbGUgd2UgY2FuJ3QgZG8gdGhhdCBw ZXJmZWN0bHkgd2l0aG91dCBhZGRpbmcgYQorICogbG90IG1vcmUgY29kZSwgdGhlIGdvYWwgb2Yg dGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0byBiZSBjbG9zZSBlbm91Z2ggdGhhdAorICogdXNlcnMg ZG9uJ3QgcmVhbGx5IG5vdGljZSB0aGUgZGlmZmVyZW5jZXMuCisgKgorICogVGhlIGlucHV0IHN0 cmluZyBpcyBtb2RpZmllZCBpbiBwbGFjZSAobnVsbC10ZXJtaW5hdGVkLCBkb3duY2FzZWQsIHF1 b3RlcworICogY29sbGFwc2VkKS4gIEFsbCBuYW1lIGFuZCB2YWx1ZSBwb2ludGVycyBpbiB0aGUg b3V0cHV0IGFycmF5IHJlZmVyIGludG8KKyAqIHRoaXMgc3RyaW5nLCBzbyB0aGUgY2FsbGVyIG11 c3QgZW5zdXJlIHRoZSBzdHJpbmcgb3V0bGl2ZXMgdGhlIGFycmF5LgorICoKKyAqIFJldHVybnMg dGhlIGZ1bGwgbnVtYmVyIG9mIG9wdGlvbnMgaW4gdGhlIGlucHV0IHN0cmluZywgYnV0IHN0b3Jl cyBubworICogbW9yZSB0aGFuIG1heG9wdGlvbnMgaW50byB0aGUgY2FsbGVyLXByb3ZpZGVkIGFy cmF5LiBJZiBhIHN5bnRheCBlcnJvcgorICogb2NjdXJzLCByZXR1cm5zIC0xIGFuZCBzZXRzICpl cnJtc2cuCisgKi8KK3N0YXRpYyBpbnQKK2F1dG9fZXhwbGFpbl9zcGxpdF9vcHRpb25zKGNoYXIg KnJhd3N0cmluZywgYXV0b19leHBsYWluX29wdGlvbiAqb3B0aW9ucywKKwkJCQkJCSAgIGludCBt YXhvcHRpb25zLCBjaGFyICoqZXJybXNnKQoreworCWNoYXIJICAgKm5leHRwID0gcmF3c3RyaW5n OworCWludAkJCW5vcHRpb25zID0gMDsKKwlib29sCQlkb25lID0gZmFsc2U7CisKKwkqZXJybXNn ID0gTlVMTDsKKworCXdoaWxlIChzY2FubmVyX2lzc3BhY2UoKm5leHRwKSkKKwkJbmV4dHArKzsJ CQkJLyogc2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKworCWlmICgqbmV4dHAgPT0gJ1wwJykK KwkJcmV0dXJuIDA7CQkJCS8qIGVtcHR5IHN0cmluZyBpcyBmaW5lICovCisKKwl3aGlsZSAoIWRv bmUpCisJeworCQljaGFyCSAgICpuYW1lOworCQljaGFyCSAgICpuYW1lX2VuZHA7CisJCWNoYXIJ ICAgKnZhbHVlID0gTlVMTDsKKwkJY2hhcgkgICAqdmFsdWVfZW5kcCA9IE5VTEw7CisJCU5vZGVU YWcJCXR5cGUgPSBUX0ludmFsaWQ7CisKKwkJLyogUGFyc2UgdGhlIG9wdGlvbiBuYW1lLiAqLwor CQluYW1lID0gc2Nhbl9pZGVudGlmaWVyKCZuYW1lX2VuZHAsICZuZXh0cCwgJywnLCB0cnVlKTsK KwkJaWYgKG5hbWUgPT0gTlVMTCB8fCBuYW1lX2VuZHAgPT0gbmFtZSkKKwkJeworCQkJKmVycm1z ZyA9ICJvcHRpb24gbmFtZSBtaXNzaW5nIG9yIGVtcHR5IjsKKwkJCXJldHVybiAtMTsKKwkJfQor CisJCS8qIFNraXAgd2hpdGVzcGFjZSBhZnRlciB0aGUgb3B0aW9uIG5hbWUuICovCisJCXdoaWxl IChzY2FubmVyX2lzc3BhY2UoKm5leHRwKSkKKwkJCW5leHRwKys7CisKKwkJLyoKKwkJICogRGV0 ZXJtaW5lIHdoZXRoZXIgd2UgaGF2ZSBhbiBvcHRpb24gdmFsdWUuICBBIGNvbW1hIG9yIGVuZCBv ZgorCQkgKiBzdHJpbmcgbWVhbnMgbm8gdmFsdWU7IG90aGVyd2lzZSB3ZSBoYXZlIG9uZS4KKwkJ ICovCisJCWlmICgqbmV4dHAgIT0gJ1wwJyAmJiAqbmV4dHAgIT0gJywnKQorCQl7CisJCQlpZiAo Km5leHRwID09ICdcJycpCisJCQl7CisJCQkJLyogU2luZ2xlLXF1b3RlZCBzdHJpbmcgbGl0ZXJh bC4gKi8KKwkJCQl0eXBlID0gVF9TdHJpbmc7CisJCQkJdmFsdWUgPSBhdXRvX2V4cGxhaW5fc2Nh bl9saXRlcmFsKCZ2YWx1ZV9lbmRwLCAmbmV4dHApOworCQkJCWlmICh2YWx1ZSA9PSBOVUxMKQor CQkJCXsKKwkJCQkJKmVycm1zZyA9ICJ1bnRlcm1pbmF0ZWQgc2luZ2xlLXF1b3RlZCBzdHJpbmci OworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaXNkaWdpdCgodW5z aWduZWQgY2hhcikgKm5leHRwKSB8fAorCQkJCQkgKCgqbmV4dHAgPT0gJysnIHx8ICpuZXh0cCA9 PSAnLScpICYmCisJCQkJCSAgaXNkaWdpdCgodW5zaWduZWQgY2hhcikgbmV4dHBbMV0pKSkKKwkJ CXsKKwkJCQljaGFyCSAgICplbmRwdHI7CisJCQkJbG9uZwkJaW50dmFsOworCQkJCWNoYXIJCXNh dmVkOworCisJCQkJLyogUmVtZW1iZXIgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHRva2VuLCBhbmQg ZmluZCB0aGUgZW5kLiAqLworCQkJCXZhbHVlID0gbmV4dHA7CisJCQkJd2hpbGUgKCpuZXh0cCAm JiAqbmV4dHAgIT0gJywnICYmICFzY2FubmVyX2lzc3BhY2UoKm5leHRwKSkKKwkJCQkJbmV4dHAr KzsKKwkJCQl2YWx1ZV9lbmRwID0gbmV4dHA7CisKKwkJCQkvKiBUZW1wb3JhcmlseSAnXDAnLXRl cm1pbmF0ZSBzbyB3ZSBjYW4gdXNlIHN0cnRvbC9zdHJ0b2QuICovCisJCQkJc2F2ZWQgPSAqdmFs dWVfZW5kcDsKKwkJCQkqdmFsdWVfZW5kcCA9ICdcMCc7CisKKwkJCQkvKiBJbnRlZ2VyLCBmbG9h dCwgb3IgbmVpdGhlcj8gKi8KKwkJCQllcnJubyA9IDA7CisJCQkJaW50dmFsID0gc3RydG9sKHZh bHVlLCAmZW5kcHRyLCAwKTsKKwkJCQlpZiAoZXJybm8gPT0gMCAmJiAqZW5kcHRyID09ICdcMCcg JiYgZW5kcHRyICE9IHZhbHVlICYmCisJCQkJCWludHZhbCA9PSAoaW50KSBpbnR2YWwpCisJCQkJ CXR5cGUgPSBUX0ludGVnZXI7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJdHlwZSA9IFRfRmxvYXQ7 CisJCQkJCSh2b2lkKSBzdHJ0b2QodmFsdWUsICZlbmRwdHIpOworCQkJCQlpZiAoKmVuZHB0ciAh PSAnXDAnKQorCQkJCQl7CisJCQkJCQkqdmFsdWVfZW5kcCA9IHNhdmVkOworCQkJCQkJKmVycm1z ZyA9ICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiOworCQkJCQkJcmV0dXJuIC0xOworCQkJCQl9CisJ CQkJfQorCisJCQkJLyogUmVtb3ZlIHRlbXBvcmFyeSB0ZXJtaW5hdG9yLiAqLworCQkJCSp2YWx1 ZV9lbmRwID0gc2F2ZWQ7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogSWRlbnRpZmllciwg cG9zc2libHkgZG91YmxlLXF1b3RlZC4gKi8KKwkJCQl0eXBlID0gVF9TdHJpbmc7CisJCQkJdmFs dWUgPSBzY2FuX2lkZW50aWZpZXIoJnZhbHVlX2VuZHAsICZuZXh0cCwgJywnLCB0cnVlKTsKKwkJ CQlpZiAodmFsdWUgPT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIHNjYW5faWRlbnRp ZmllciB3aWxsIHJldHVybiBOVUxMIGlmIGl0IGZpbmRzIGFuCisJCQkJCSAqIHVudGVybWluYXRl ZCBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXIgb3IgaXQgZmluZHMgbm8KKwkJCQkJICogaWRlbnRp ZmllciBhdCBhbGwgYmVjYXVzZSB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMKKwkJCQkJICogd2hpdGVz cGFjZSBvciB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciwgaGVyZSBhIGNvbW1hLgorCQkJCQkgKiBC dXQgdGhlIGxhdHRlciBjYXNlIGlzIGltcG9zc2libGUgaGVyZSBiZWNhdXNlIHRoZSBjb2RlCisJ CQkJCSAqIGFib3ZlIGhhcyBza2lwcGVkIHdoaXRlc3BhY2UgYW5kIGNoZWNrZWQgZm9yIGNvbW1h cy4KKwkJCQkJICovCisJCQkJCSplcnJtc2cgPSAidW50ZXJtaW5hdGVkIGRvdWJsZS1xdW90ZWQg c3RyaW5nIjsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIFNraXAg dHJhaWxpbmcgd2hpdGVzcGFjZS4gKi8KKwkJd2hpbGUgKHNjYW5uZXJfaXNzcGFjZSgqbmV4dHAp KQorCQkJbmV4dHArKzsKKworCQkvKiBFeHBlY3QgY29tbWEgb3IgZW5kIG9mIHN0cmluZy4gKi8K KwkJaWYgKCpuZXh0cCA9PSAnLCcpCisJCXsKKwkJCW5leHRwKys7CisJCQl3aGlsZSAoc2Nhbm5l cl9pc3NwYWNlKCpuZXh0cCkpCisJCQkJbmV4dHArKzsKKwkJCWlmICgqbmV4dHAgPT0gJ1wwJykK KwkJCXsKKwkJCQkqZXJybXNnID0gInRyYWlsaW5nIGNvbW1hIGluIG9wdGlvbiBsaXN0IjsKKwkJ CQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKm5leHRwID09ICdcMCcpCisJCQlk b25lID0gdHJ1ZTsKKwkJZWxzZQorCQl7CisJCQkqZXJybXNnID0gImV4cGVjdGVkIGNvbW1hIG9y IGVuZCBvZiBvcHRpb24gbGlzdCI7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKgorCQkgKiBO b3cgc2FmZSB0byBudWxsLXRlcm1pbmF0ZSB0aGUgbmFtZSBhbmQgdmFsdWUuICBXZSBjb3VsZG4n dCBkbyB0aGlzCisJCSAqIGVhcmxpZXIgYmVjYXVzZSBpbiB0aGUgdW5xdW90ZWQgY2FzZSwgdGhl IG51bGwgdGVybWluYXRvciBwb3NpdGlvbgorCQkgKiBtYXkgY29pbmNpZGUgd2l0aCBhIGNoYXJh Y3RlciB0aGF0IHRoZSBzY2FubmluZyBsb2dpYyBhYm92ZSBzdGlsbAorCQkgKiBuZWVkZWQgdG8g cmVhZC4KKwkJICovCisJCSpuYW1lX2VuZHAgPSAnXDAnOworCQlpZiAodmFsdWVfZW5kcCAhPSBO VUxMKQorCQkJKnZhbHVlX2VuZHAgPSAnXDAnOworCisJCS8qIEFsd2F5cyBjb3VudCB0aGlzIG9w dGlvbiwgYW5kIHN0b3JlIHRoZSBkZXRhaWxzIGlmIHRoZXJlIGlzIHJvb20uICovCisJCWlmIChu b3B0aW9ucyA8IG1heG9wdGlvbnMpCisJCXsKKwkJCW9wdGlvbnNbbm9wdGlvbnNdLm5hbWUgPSBu YW1lOworCQkJb3B0aW9uc1tub3B0aW9uc10udHlwZSA9IHR5cGU7CisJCQlvcHRpb25zW25vcHRp b25zXS52YWx1ZSA9IHZhbHVlOworCQl9CisJCW5vcHRpb25zKys7CisJfQorCisJcmV0dXJuIG5v cHRpb25zOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRvX2V4cGxhaW4vZXhwZWN0ZWQvZXh0 ZW5zaW9uX29wdGlvbnMub3V0IGIvY29udHJpYi9hdXRvX2V4cGxhaW4vZXhwZWN0ZWQvZXh0ZW5z aW9uX29wdGlvbnMub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5i NWE2Njc3MjMxMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2V4cGVj dGVkL2V4dGVuc2lvbl9vcHRpb25zLm91dApAQCAtMCwwICsxLDQ5IEBACistLQorLS0gVGVzdHMg Zm9yIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMuCistLQorTE9BRCAnYXV0b19l eHBsYWluJzsKK0xPQUQgJ3BnX292ZXJleHBsYWluJzsKKy0tIFZhcmlvdXMgbGVnYWwgdmFsdWVz IHdpdGggYXNzb3J0ZWQgcXVvdGluZyBhbmQgd2hpdGVzcGFjZSBjaG9pY2VzLgorU0VUIGF1dG9f ZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAnJzsKK1NFVCBhdXRvX2V4cGxhaW4ubG9n X2V4dGVuc2lvbl9vcHRpb25zID0gJ2RlYnVnLCBSQU5HRV9UQUJMRSc7CitTRVQgYXV0b19leHBs YWluLmxvZ19leHRlbnNpb25fb3B0aW9ucyA9ICdkZWJ1ZyBUUlVFICAnOworU0VUIGF1dG9fZXhw bGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAnICAgZGVidWcgMSxSQW5nZV90YWJsZSAib2Zm Iic7CitTRVQgYXV0b19leHBsYWluLmxvZ19leHRlbnNpb25fb3B0aW9ucyA9ICQkImRlYnVnIiB0 UnVFLCByYW5nZV90YWJsZSAnZmFsc2UnJCQ7CistLSBTeW50YXggZXJyb3JzLgorU0VUIGF1dG9f ZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAnLCc7CitFUlJPUjogIGludmFsaWQgdmFs dWUgZm9yIHBhcmFtZXRlciAiYXV0b19leHBsYWluLmxvZ19leHRlbnNpb25fb3B0aW9ucyI6ICIs IgorREVUQUlMOiAgb3B0aW9uIG5hbWUgbWlzc2luZyBvciBlbXB0eQorU0VUIGF1dG9fZXhwbGFp bi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAnLCByYW5nZV90YWJsZSc7CitFUlJPUjogIGludmFs aWQgdmFsdWUgZm9yIHBhcmFtZXRlciAiYXV0b19leHBsYWluLmxvZ19leHRlbnNpb25fb3B0aW9u cyI6ICIsIHJhbmdlX3RhYmxlIgorREVUQUlMOiAgb3B0aW9uIG5hbWUgbWlzc2luZyBvciBlbXB0 eQorU0VUIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAncmFuZ2VfdGFibGUs ICc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAiYXV0b19leHBsYWluLmxv Z19leHRlbnNpb25fb3B0aW9ucyI6ICJyYW5nZV90YWJsZSwgIgorREVUQUlMOiAgdHJhaWxpbmcg Y29tbWEgaW4gb3B0aW9uIGxpc3QKK1NFVCBhdXRvX2V4cGxhaW4ubG9nX2V4dGVuc2lvbl9vcHRp b25zID0gJ3JhbmdlX3RhYmxlIHRydWUgZmFsc2UnOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZv ciBwYXJhbWV0ZXIgImF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMiOiAicmFuZ2Vf dGFibGUgdHJ1ZSBmYWxzZSIKK0RFVEFJTDogIGV4cGVjdGVkIGNvbW1hIG9yIGVuZCBvZiBvcHRp b24gbGlzdAorU0VUIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAnInJhbmdl X3RhYmxlJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJhdXRvX2V4cGxh aW4ubG9nX2V4dGVuc2lvbl9vcHRpb25zIjogIiJyYW5nZV90YWJsZSIKK0RFVEFJTDogIG9wdGlv biBuYW1lIG1pc3Npbmcgb3IgZW1wdHkKK1NFVCBhdXRvX2V4cGxhaW4ubG9nX2V4dGVuc2lvbl9v cHRpb25zID0gJ3JhbmdlX3RhYmxlIDMuMTQxNW5pbmUnOworRVJST1I6ICBpbnZhbGlkIHZhbHVl IGZvciBwYXJhbWV0ZXIgImF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMiOiAicmFu Z2VfdGFibGUgMy4xNDE1bmluZSIKK0RFVEFJTDogIGludmFsaWQgbnVtZXJpYyB2YWx1ZQorU0VU IGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAncmFuZ2VfdGFibGUgInRydWUn OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgImF1dG9fZXhwbGFpbi5sb2df ZXh0ZW5zaW9uX29wdGlvbnMiOiAicmFuZ2VfdGFibGUgInRydWUiCitERVRBSUw6ICB1bnRlcm1p bmF0ZWQgZG91YmxlLXF1b3RlZCBzdHJpbmcKK1NFVCBhdXRvX2V4cGxhaW4ubG9nX2V4dGVuc2lv bl9vcHRpb25zID0gJCRyYW5nZV90YWJsZSAndHJ1ZSQkOworRVJST1I6ICBpbnZhbGlkIHZhbHVl IGZvciBwYXJhbWV0ZXIgImF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMiOiAicmFu Z2VfdGFibGUgJ3RydWUiCitERVRBSUw6ICB1bnRlcm1pbmF0ZWQgc2luZ2xlLXF1b3RlZCBzdHJp bmcKK1NFVCBhdXRvX2V4cGxhaW4ubG9nX2V4dGVuc2lvbl9vcHRpb25zID0gJCQnJCQ7CitFUlJP UjogIHVucmVjb2duaXplZCBFWFBMQUlOIG9wdGlvbiAiJyIKKy0tIFVuYWNjZXB0YWJsZSBvcHRp b24gdmFsdWVzLgorU0VUIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAncmFu Z2VfdGFibGUgbWF5YmUnOworRVJST1I6ICBFWFBMQUlOIG9wdGlvbiAicmFuZ2VfdGFibGUiIHJl cXVpcmVzIGEgQm9vbGVhbiB2YWx1ZQorU0VUIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29w dGlvbnMgPSAncmFuZ2VfdGFibGUgMic7CitFUlJPUjogIEVYUExBSU4gb3B0aW9uICJyYW5nZV90 YWJsZSIgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlCitTRVQgYXV0b19leHBsYWluLmxvZ19leHRl bnNpb25fb3B0aW9ucyA9ICdyYW5nZV90YWJsZSAiMCInOworRVJST1I6ICBFWFBMQUlOIG9wdGlv biAicmFuZ2VfdGFibGUiIHJlcXVpcmVzIGEgQm9vbGVhbiB2YWx1ZQorU0VUIGF1dG9fZXhwbGFp bi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAncmFuZ2VfdGFibGUgMy4xNDE1OSc7CitFUlJPUjog IEVYUExBSU4gb3B0aW9uICJyYW5nZV90YWJsZSIgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlCist LSBTdXBwbHkgZW5vdWdoIG9wdGlvbnMgdG8gZm9yY2UgdGhlIG9wdGlvbiBhcnJheSB0byBiZSBy ZWFsbG9jYXRlZC4KK1NFVCBhdXRvX2V4cGxhaW4ubG9nX2V4dGVuc2lvbl9vcHRpb25zID0gJ2Rl YnVnLCBkZWJ1ZywgZGVidWcsIGRlYnVnLCBkZWJ1ZywgZGVidWcsIGRlYnVnLCBkZWJ1ZywgZGVi dWcsIGRlYnVnIGZhbHNlJzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYXV0b19leHBsYWluL21lc29u LmJ1aWxkIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vbWVzb24uYnVpbGQKaW5kZXggNmY5ZDIyYmY1 ZDguLmQyYjA2NTBhZjFjIDEwMDY0NAotLS0gYS9jb250cmliL2F1dG9fZXhwbGFpbi9tZXNvbi5i dWlsZAorKysgYi9jb250cmliL2F1dG9fZXhwbGFpbi9tZXNvbi5idWlsZApAQCAtMjMsNiArMjMs NyBAQCB0ZXN0cyArPSB7CiAgICdyZWdyZXNzJzogewogICAgICdzcWwnOiBbCiAgICAgICAnYWx0 ZXJfcmVzZXQnLAorICAgICAgJ2V4dGVuc2lvbl9vcHRpb25zJywKICAgICBdLAogICB9LAogICAn dGFwJzogewpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRvX2V4cGxhaW4vc3FsL2V4dGVuc2lvbl9v cHRpb25zLnNxbCBiL2NvbnRyaWIvYXV0b19leHBsYWluL3NxbC9leHRlbnNpb25fb3B0aW9ucy5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk4OTIwZTg4YzlmCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vc3FsL2V4dGVuc2lvbl9vcHRp b25zLnNxbApAQCAtMCwwICsxLDMzIEBACistLQorLS0gVGVzdHMgZm9yIGF1dG9fZXhwbGFpbi5s b2dfZXh0ZW5zaW9uX29wdGlvbnMuCistLQorCitMT0FEICdhdXRvX2V4cGxhaW4nOworTE9BRCAn cGdfb3ZlcmV4cGxhaW4nOworCistLSBWYXJpb3VzIGxlZ2FsIHZhbHVlcyB3aXRoIGFzc29ydGVk IHF1b3RpbmcgYW5kIHdoaXRlc3BhY2UgY2hvaWNlcy4KK1NFVCBhdXRvX2V4cGxhaW4ubG9nX2V4 dGVuc2lvbl9vcHRpb25zID0gJyc7CitTRVQgYXV0b19leHBsYWluLmxvZ19leHRlbnNpb25fb3B0 aW9ucyA9ICdkZWJ1ZywgUkFOR0VfVEFCTEUnOworU0VUIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5z aW9uX29wdGlvbnMgPSAnZGVidWcgVFJVRSAgJzsKK1NFVCBhdXRvX2V4cGxhaW4ubG9nX2V4dGVu c2lvbl9vcHRpb25zID0gJyAgIGRlYnVnIDEsUkFuZ2VfdGFibGUgIm9mZiInOworU0VUIGF1dG9f ZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAkJCJkZWJ1ZyIgdFJ1RSwgcmFuZ2VfdGFi bGUgJ2ZhbHNlJyQkOworCistLSBTeW50YXggZXJyb3JzLgorU0VUIGF1dG9fZXhwbGFpbi5sb2df ZXh0ZW5zaW9uX29wdGlvbnMgPSAnLCc7CitTRVQgYXV0b19leHBsYWluLmxvZ19leHRlbnNpb25f b3B0aW9ucyA9ICcsIHJhbmdlX3RhYmxlJzsKK1NFVCBhdXRvX2V4cGxhaW4ubG9nX2V4dGVuc2lv bl9vcHRpb25zID0gJ3JhbmdlX3RhYmxlLCAnOworU0VUIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5z aW9uX29wdGlvbnMgPSAncmFuZ2VfdGFibGUgdHJ1ZSBmYWxzZSc7CitTRVQgYXV0b19leHBsYWlu LmxvZ19leHRlbnNpb25fb3B0aW9ucyA9ICcicmFuZ2VfdGFibGUnOworU0VUIGF1dG9fZXhwbGFp bi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAncmFuZ2VfdGFibGUgMy4xNDE1bmluZSc7CitTRVQg YXV0b19leHBsYWluLmxvZ19leHRlbnNpb25fb3B0aW9ucyA9ICdyYW5nZV90YWJsZSAidHJ1ZSc7 CitTRVQgYXV0b19leHBsYWluLmxvZ19leHRlbnNpb25fb3B0aW9ucyA9ICQkcmFuZ2VfdGFibGUg J3RydWUkJDsKK1NFVCBhdXRvX2V4cGxhaW4ubG9nX2V4dGVuc2lvbl9vcHRpb25zID0gJCQnJCQ7 CisKKy0tIFVuYWNjZXB0YWJsZSBvcHRpb24gdmFsdWVzLgorU0VUIGF1dG9fZXhwbGFpbi5sb2df ZXh0ZW5zaW9uX29wdGlvbnMgPSAncmFuZ2VfdGFibGUgbWF5YmUnOworU0VUIGF1dG9fZXhwbGFp bi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAncmFuZ2VfdGFibGUgMic7CitTRVQgYXV0b19leHBs YWluLmxvZ19leHRlbnNpb25fb3B0aW9ucyA9ICdyYW5nZV90YWJsZSAiMCInOworU0VUIGF1dG9f ZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAncmFuZ2VfdGFibGUgMy4xNDE1OSc7CisK Ky0tIFN1cHBseSBlbm91Z2ggb3B0aW9ucyB0byBmb3JjZSB0aGUgb3B0aW9uIGFycmF5IHRvIGJl IHJlYWxsb2NhdGVkLgorU0VUIGF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnMgPSAn ZGVidWcsIGRlYnVnLCBkZWJ1ZywgZGVidWcsIGRlYnVnLCBkZWJ1ZywgZGVidWcsIGRlYnVnLCBk ZWJ1ZywgZGVidWcgZmFsc2UnOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRvX2V4cGxhaW4vdC8w MDFfYXV0b19leHBsYWluLnBsIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vdC8wMDFfYXV0b19leHBs YWluLnBsCmluZGV4IDVmNjczYmQxNGMxLi5iNGU4ZTRiNjVhMSAxMDA2NDQKLS0tIGEvY29udHJp Yi9hdXRvX2V4cGxhaW4vdC8wMDFfYXV0b19leHBsYWluLnBsCisrKyBiL2NvbnRyaWIvYXV0b19l eHBsYWluL3QvMDAxX2F1dG9fZXhwbGFpbi5wbApAQCAtMzAsNyArMzAsNyBAQCBzdWIgcXVlcnlf bG9nCiBteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOwog JG5vZGUtPmluaXQoYXV0aF9leHRyYSA9PiBbICctLWNyZWF0ZS1yb2xlJyA9PiAncmVncmVzc191 c2VyMScgXSk7CiAkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCi0JInNlc3Np b25fcHJlbG9hZF9saWJyYXJpZXMgPSAnYXV0b19leHBsYWluJyIpOworCSJzZXNzaW9uX3ByZWxv YWRfbGlicmFyaWVzID0gJ3BnX292ZXJleHBsYWluLGF1dG9fZXhwbGFpbiciKTsKICRub2RlLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImF1dG9fZXhwbGFpbi5sb2dfbWluX2R1cmF0 aW9uID0gMCIpOwogJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAiYXV0b19l eHBsYWluLmxvZ19hbmFseXplID0gb24iKTsKICRub2RlLT5zdGFydDsKQEAgLTE3Miw2ICsxNzIs MjIgQEAgbGlrZSgKIAlxci8iTm9kZSBUeXBlIjogIkluZGV4IFNjYW4iW159XSoiSW5kZXggTmFt ZSI6ICJwZ19jbGFzc19yZWxuYW1lX25zcF9pbmRleCIvcywKIAkiaW5kZXggc2NhbiBsb2dnZWQs IGpzb24gbW9kZSIpOwogCisjIEV4dGVuc2lvbiBvcHRpb25zLgorJGxvZ19jb250ZW50cyA9IHF1 ZXJ5X2xvZygKKwkkbm9kZSwKKwkiU0VMRUNUIDE7IiwKKwl7ICJhdXRvX2V4cGxhaW4ubG9nX2V4 dGVuc2lvbl9vcHRpb25zIiA9PiAiZGVidWciIH0pOworCitsaWtlKAorCSRsb2dfY29udGVudHMs CisJcXIvUGFyYWxsZWwgU2FmZTovLAorCSJleHRlbnNpb24gb3B0aW9uIHByb2R1Y2VzIHBlci1u b2RlIG91dHB1dCIpOworCitsaWtlKAorCSRsb2dfY29udGVudHMsCisJcXIvQ29tbWFuZCBUeXBl OiBzZWxlY3QvLAorCSJleHRlbnNpb24gb3B0aW9uIHByb2R1Y2VzIHBlci1wbGFuIG91dHB1dCIp OworCiAjIENoZWNrIHRoYXQgUEdDX1NVU0VUIHBhcmFtZXRlcnMgY2FuIGJlIHNldCBieSBub24t c3VwZXJ1c2VyIGlmIGdyYW50ZWQsCiAjIG90aGVyd2lzZSBub3QKIApkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL2F1dG8tZXhwbGFpbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2F1dG8tZXhwbGFpbi5z Z21sCmluZGV4IDE1Yzg2ODAyMWU2Li5lZTg1YTY3ZWIyZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2F1dG8tZXhwbGFpbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9hdXRvLWV4cGxhaW4uc2dt bApAQCAtMjQ1LDYgKzI0NSwyOSBAQCBMT0FEICdhdXRvX2V4cGxhaW4nOwogICAgIDwvbGlzdGl0 ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeSBpZD0iYXV0by1leHBs YWluLWNvbmZpZ3VyYXRpb24tcGFyYW1ldGVycy1sb2ctZXh0ZW5zaW9uLW9wdGlvbnMiPgorICAg IDx0ZXJtPgorICAgICA8dmFybmFtZT5hdXRvX2V4cGxhaW4ubG9nX2V4dGVuc2lvbl9vcHRpb25z PC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAg IDxwcmltYXJ5Pjx2YXJuYW1lPmF1dG9fZXhwbGFpbi5sb2dfZXh0ZW5zaW9uX29wdGlvbnM8L3Zh cm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVy bT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIExvYWRh YmxlIG1vZHVsZXMgY2FuIGV4dGVuZCB0aGUgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gY29t bWFuZCB3aXRoCisgICAgICBhZGRpdGlvbmFsIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG91dHB1 dCBmb3JtYXQuIFN1Y2ggb3B0aW9ucyBjYW4gYWxzbworICAgICAgYmUgc3BlY2lmaWVkIGhlcmUu IFRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBpcyBhIGNvbW1hLXNlcGFyYXRlZAorICAgICAg bGlzdCBvZiBvcHRpb25zLCBlYWNoIG9mIHdoaWNoIGlzIGFuIG9wdGlvbiBuYW1lIGZvbGxvd2Vk IG9wdGlvbmFsbHkgYnkKKyAgICAgIGFuIGFzc29jaWF0ZWQgdmFsdWUuIFRoZSBtb2R1bGUgdGhh dCBwcm92aWRlcyB0aGUKKyAgICAgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IG9wdGlvbiwg c3VjaCBhcworICAgICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlIj48bGl0ZXJhbD5wZ19w bGFuX2FkdmljZTwvbGl0ZXJhbD48L2xpbms+IG9yCisgICAgICA8bGluayBsaW5rZW5kPSJwZ292 ZXJleHBsYWluIj48bGl0ZXJhbD5wZ19vdmVyZXhwbGFpbjwvbGl0ZXJhbD48L2xpbms+LAorICAg ICAgc2hvdWxkIGJlIGxvYWRlZCBiZWZvcmUgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0LgorICAgICAg T25seSBzdXBlcnVzZXJzIGNhbiBjaGFuZ2UgdGhpcyBzZXR0aW5nLgorICAgICA8L3BhcmE+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8dmFybGlzdGVudHJ5IGlk PSJhdXRvLWV4cGxhaW4tY29uZmlndXJhdGlvbi1wYXJhbWV0ZXJzLWxvZy1sZXZlbCI+CiAgICAg PHRlcm0+CiAgICAgIDx2YXJuYW1lPmF1dG9fZXhwbGFpbi5sb2dfbGV2ZWw8L3Zhcm5hbWU+ICg8 dHlwZT5lbnVtPC90eXBlPikKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNWJjNTE3NjAy YjEuLmRiODNlNTJjY2M1IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzU2Niw2ICsz NTY2LDggQEAgYXN0cmVhbWVyX3ZlcmlmeQogYXN0cmVhbWVyX3dhbGR1bXAKIGFzdHJlYW1lcl96 c3RkX2ZyYW1lCiBhdXRoX3Bhc3N3b3JkX2hvb2tfdHlwCithdXRvX2V4cGxhaW5fZXh0ZW5zaW9u X29wdGlvbnMKK2F1dG9fZXhwbGFpbl9vcHRpb24KIGF1dG92YWNfdGFibGUKIGF2X3JlbGF0aW9u CiBhdmNfY2FjaGUKLS0gCjIuNTEuMAoK --000000000000d275f7064e7e3637 Content-Type: application/octet-stream; name="v2-0002-Add-a-guc_check_handler-to-the-EXPLAIN-extension-.patch" Content-Disposition: attachment; filename="v2-0002-Add-a-guc_check_handler-to-the-EXPLAIN-extension-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnhsqpe11 RnJvbSBjYWJjOWUzNWNiMTdmZWNiYjc2ODBiZjBjNWM3ZDRmMmM0NDc4NDMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMzAgTWFyIDIwMjYgMTk6MTA6MzIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyIDIv M10gQWRkIGEgZ3VjX2NoZWNrX2hhbmRsZXIgdG8gdGhlIEVYUExBSU4gZXh0ZW5zaW9uCiBtZWNo YW5pc20uCgpJdCB3b3VsZCBiZSB1c2VmdWwgdG8gYmUgYWJsZSB0byB0ZWxsIGF1dG9fZXhwbGFp biB0byBzZXQgYSBjdXN0b20KRVhQTEFJTiBvcHRpb24sIGJ1dCBpdCB3b3VsZCBiZSBiYWQgaWYg aXQgdHJpZWQgdG8gZG8gc28gYW5kIHRoZQpvcHRpb24gbmFtZSBvciB2YWx1ZSB3YXNuJ3QgdmFs aWQsIGJlY2F1c2UgdGhlbiBldmVyeSBxdWVyeSB3b3VsZCBmYWlsCndpdGggYSBjb21wbGFpbnQg YWJvdXQgdGhlIEVYUExBSU4gb3B0aW9uLiBTbyBhZGQgYSBndWNfY2hlY2tfaGFuZGxlcgp0aGF0 IGF1dG9fZXhwbGFpbiB3aWxsIGJlIGFibGUgdG8gdXNlIHRvIG9ubHkgdHJ5IHRvIHNldCBvcHRp b24KbmFtZS92YWx1ZS90eXBlIGNvbWJpbmF0aW9ucyB0aGF0IGhhdmUgYmVlbiBkZXRlcm1pbmVk IHRvIGJlIGxlZ2FsLAphbmQgdG8gZW1pdCB1c2VmdWwgbWVzc2FnZXMgYWJvdXQgb25lcyB0aGF0 IGFyZW4ndC4KClJldmlld2VkLWJ5OiBNYXRoZXVzIEFsY2FudGFyYSA8bWF0aGV1c3NzaWx2OTdA Z21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdtb2ItMFc4MzA2 bXZySlg1VXJ0cXQxQUFhc3U4cGk0eUxyWjFYZndaVS1VajF3QG1haWwuZ21haWwuY29tCi0tLQog Y29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIHwgICA2ICstCiBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW5fc3RhdGUuYyAgICB8IDEyMSArKysrKysrKysrKysrKysrKysrKysrKy0K IHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCAgICB8ICAxMyArKy0KIDQgZmls ZXMgY2hhbmdlZCwgMTM1IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIGIvY29udHJpYi9wZ19v dmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4IGI0ZTkwOTA5Mjg5Li43MTVlZGE4ZGM1 NiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCisr KyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwpAQCAtNzMsOSArNzMs MTEgQEAgX1BHX2luaXQodm9pZCkKIAllc19leHRlbnNpb25faWQgPSBHZXRFeHBsYWluRXh0ZW5z aW9uSWQoInBnX292ZXJleHBsYWluIik7CiAKIAkvKiBSZWdpc3RlciB0aGUgbmV3IEVYUExBSU4g b3B0aW9ucyBpbXBsZW1lbnRlZCBieSB0aGlzIG1vZHVsZS4gKi8KLQlSZWdpc3RlckV4dGVuc2lv bkV4cGxhaW5PcHRpb24oImRlYnVnIiwgb3ZlcmV4cGxhaW5fZGVidWdfaGFuZGxlcik7CisJUmVn aXN0ZXJFeHRlbnNpb25FeHBsYWluT3B0aW9uKCJkZWJ1ZyIsIG92ZXJleHBsYWluX2RlYnVnX2hh bmRsZXIsCisJCQkJCQkJCSAgIEdVQ0NoZWNrQm9vbGVhbkV4cGxhaW5PcHRpb24pOwogCVJlZ2lz dGVyRXh0ZW5zaW9uRXhwbGFpbk9wdGlvbigicmFuZ2VfdGFibGUiLAotCQkJCQkJCQkgICBvdmVy ZXhwbGFpbl9yYW5nZV90YWJsZV9oYW5kbGVyKTsKKwkJCQkJCQkJICAgb3ZlcmV4cGxhaW5fcmFu Z2VfdGFibGVfaGFuZGxlciwKKwkJCQkJCQkJICAgR1VDQ2hlY2tCb29sZWFuRXhwbGFpbk9wdGlv bik7CiAKIAkvKiBVc2UgdGhlIHBlci1ub2RlIGFuZCBwZXItcGxhbiBob29rcyB0byBtYWtlIG91 ciBvcHRpb25zIGRvIHNvbWV0aGluZy4gKi8KIAlwcmV2X2V4cGxhaW5fcGVyX25vZGVfaG9vayA9 IGV4cGxhaW5fcGVyX25vZGVfaG9vazsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdfcGxhbl9hZHZpY2UuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZp Y2UuYwppbmRleCAyMzkzZWQ1NTUxOC4uNTYyOTA3MGZhZjQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYworKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BnX3BsYW5fYWR2aWNlLmMKQEAgLTEyNiw3ICsxMjYsOCBAQCBfUEdfaW5pdCh2b2lkKQog CiAJLyogUmVnaXN0ZXIgdGhlIG5ldyBFWFBMQUlOIG9wdGlvbnMgaW1wbGVtZW50ZWQgYnkgdGhp cyBtb2R1bGUuICovCiAJUmVnaXN0ZXJFeHRlbnNpb25FeHBsYWluT3B0aW9uKCJwbGFuX2Fkdmlj ZSIsCi0JCQkJCQkJCSAgIHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIpOwor CQkJCQkJCQkgICBwZ19wbGFuX2FkdmljZV9leHBsYWluX29wdGlvbl9oYW5kbGVyLAorCQkJCQkJ CQkgICBHVUNDaGVja0Jvb2xlYW5FeHBsYWluT3B0aW9uKTsKIAogCS8qIEluc3RhbGwgaG9va3Mg Ki8KIAlwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcygpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bl9zdGF0ZS5jCmluZGV4IDc3ZjU5YjhlNTAwLi42NWRkNDExMTQ1OSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW5fc3RhdGUuYwpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgImNvbW1hbmRz L2RlZnJlbS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIKICNpbmNsdWRlICJjb21t YW5kcy9leHBsYWluX3N0YXRlLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy9ndWMuaCIKIAogLyogSG9vayB0byBwZXJmb3JtIGFkZGl0aW9uYWwgRVhQTEFJ TiBvcHRpb25zIHZhbGlkYXRpb24gKi8KIGV4cGxhaW5fdmFsaWRhdGVfb3B0aW9uc19ob29rX3R5 cGUgZXhwbGFpbl92YWxpZGF0ZV9vcHRpb25zX2hvb2sgPSBOVUxMOwpAQCAtNDQsNiArNDYsNyBA QCB0eXBlZGVmIHN0cnVjdAogewogCWNvbnN0IGNoYXIgKm9wdGlvbl9uYW1lOwogCUV4cGxhaW5P cHRpb25IYW5kbGVyIG9wdGlvbl9oYW5kbGVyOworCUV4cGxhaW5PcHRpb25HVUNDaGVja0hhbmRs ZXIgZ3VjX2NoZWNrX2hhbmRsZXI7CiB9IEV4cGxhaW5FeHRlbnNpb25PcHRpb247CiAKIHN0YXRp YyBjb25zdCBjaGFyICoqRXhwbGFpbkV4dGVuc2lvbk5hbWVBcnJheSA9IE5VTEw7CkBAIC0zMDQs MjYgKzMwNywzOSBAQCBTZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoRXhwbGFpblN0YXRlICplcywg aW50IGV4dGVuc2lvbl9pZCwgdm9pZCAqb3BhcXVlKQogLyoKICAqIFJlZ2lzdGVyIGEgbmV3IEVY UExBSU4gb3B0aW9uLgogICoKKyAqIG9wdGlvbl9uYW1lIGlzIGFzc3VtZWQgdG8gYmUgYSBjb25z dGFudCBzdHJpbmcgb3IgYWxsb2NhdGVkIGluIHN0b3JhZ2UKKyAqIHRoYXQgd2lsbCBuZXZlciBi ZSBmcmVlZC4KKyAqCiAgKiBXaGVuIG9wdGlvbl9uYW1lIGlzIHVzZWQgYXMgYW4gRVhQTEFJTiBv cHRpb24sIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgYW5kCiAgKiBzaG91bGQgdXBkYXRlIHRoZSBF eHBsYWluU3RhdGUgcGFzc2VkIHRvIGl0LiBTZWUgY29tbWVudHMgYXQgdG9wIG9mIGZpbGUKICAq IGZvciBhIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24uCiAgKgotICogb3B0aW9uX25hbWUgaXMg YXNzdW1lZCB0byBiZSBhIGNvbnN0YW50IHN0cmluZyBvciBhbGxvY2F0ZWQgaW4gc3RvcmFnZQot ICogdGhhdCB3aWxsIG5ldmVyIGJlIGZyZWVkLgorICogZ3VjX2NoZWNrX2hhbmRsZXIgaXMgYSBm dW5jdGlvbiB0aGF0IGNhbiBiZSBzYWZlbHkgY2FsbGVkIGZyb20gYQorICogR1VDIGNoZWNrIGhv b2sgdG8gdmFsaWRhdGUgYSBwcm9wb3NlZCB2YWx1ZSBmb3IgYSBjdXN0b20gRVhQTEFJTiBvcHRp b24uCisgKiBCb29sZWFuLXZhbHVlZCBvcHRpb25zIGNhbiBwYXNzIEdVQ0NoZWNrQm9vbGVhbkV4 cGxhaW5PcHRpb24uIFNlZSB0aGUKKyAqIGNvbW1lbnRzIGZvciBHVUNDaGVja0Jvb2xlYW5FeHBs YWluT3B0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uCisgKiBob3cgYSBndWNfY2hlY2tf aGFuZGxlciBzaG91bGQgYmVoYXZlLgogICovCiB2b2lkCiBSZWdpc3RlckV4dGVuc2lvbkV4cGxh aW5PcHRpb24oY29uc3QgY2hhciAqb3B0aW9uX25hbWUsCi0JCQkJCQkJICAgRXhwbGFpbk9wdGlv bkhhbmRsZXIgaGFuZGxlcikKKwkJCQkJCQkgICBFeHBsYWluT3B0aW9uSGFuZGxlciBoYW5kbGVy LAorCQkJCQkJCSAgIEV4cGxhaW5PcHRpb25HVUNDaGVja0hhbmRsZXIgZ3VjX2NoZWNrX2hhbmRs ZXIpCiB7CiAJRXhwbGFpbkV4dGVuc2lvbk9wdGlvbiAqZXhvcHQ7CiAKKwlBc3NlcnQoaGFuZGxl ciAhPSBOVUxMKTsKKwlBc3NlcnQoZ3VjX2NoZWNrX2hhbmRsZXIgIT0gTlVMTCk7CisKIAkvKiBT ZWFyY2ggZm9yIGFuIGV4aXN0aW5nIG9wdGlvbiBieSB0aGlzIG5hbWU7IGlmIGZvdW5kLCB1cGRh dGUgaGFuZGxlci4gKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IEV4cGxhaW5FeHRlbnNpb25PcHRp b25zQXNzaWduZWQ7ICsraSkKIAl7CiAJCWlmIChzdHJjbXAoRXhwbGFpbkV4dGVuc2lvbk9wdGlv bkFycmF5W2ldLm9wdGlvbl9uYW1lLAogCQkJCSAgIG9wdGlvbl9uYW1lKSA9PSAwKQogCQl7Ci0J CQlFeHBsYWluRXh0ZW5zaW9uT3B0aW9uQXJyYXlbaV0ub3B0aW9uX2hhbmRsZXIgPSBoYW5kbGVy OworCQkJZXhvcHQgPSAmRXhwbGFpbkV4dGVuc2lvbk9wdGlvbkFycmF5W2ldOworCisJCQlleG9w dC0+b3B0aW9uX2hhbmRsZXIgPSBoYW5kbGVyOworCQkJZXhvcHQtPmd1Y19jaGVja19oYW5kbGVy ID0gZ3VjX2NoZWNrX2hhbmRsZXI7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0zNTIsNiArMzY4 LDcgQEAgUmVnaXN0ZXJFeHRlbnNpb25FeHBsYWluT3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbl9u YW1lLAogCWV4b3B0ID0gJkV4cGxhaW5FeHRlbnNpb25PcHRpb25BcnJheVtFeHBsYWluRXh0ZW5z aW9uT3B0aW9uc0Fzc2lnbmVkKytdOwogCWV4b3B0LT5vcHRpb25fbmFtZSA9IG9wdGlvbl9uYW1l OwogCWV4b3B0LT5vcHRpb25faGFuZGxlciA9IGhhbmRsZXI7CisJZXhvcHQtPmd1Y19jaGVja19o YW5kbGVyID0gZ3VjX2NoZWNrX2hhbmRsZXI7CiB9CiAKIC8qCkBAIC0zNzUsMyArMzkyLDk5IEBA IEFwcGx5RXh0ZW5zaW9uRXhwbGFpbk9wdGlvbihFeHBsYWluU3RhdGUgKmVzLCBEZWZFbGVtICpv cHQsIFBhcnNlU3RhdGUgKnBzdGF0ZSkKIAogCXJldHVybiBmYWxzZTsKIH0KKworLyoKKyAqIERl dGVybWluZSB3aGV0aGVyIGFuIEVYUExBSU4gZXh0ZW5zaW9uIG9wdGlvbiB3aWxsIGJlIGFjY2Vw dGVkIHdpdGhvdXQKKyAqIGVycm9yLiBSZXR1cm5zIHRydWUgaWYgc28sIGFuZCBmYWxzZSBpZiBu b3QuIFNlZSB0aGUgY29tbWVudHMgZm9yCisgKiBHVUNDaGVja0Jvb2xlYW5FeHBsYWluT3B0aW9u IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGNhbGxlciBuZWVkIG5vdCBrbm93IHRoYXQg dGhlIG9wdGlvbl9uYW1lIGlzIHZhbGlkOyB0aGlzIGZ1bmN0aW9uCisgKiB3aWxsIGluZGljYXRl IHRoYXQgdGhlIG9wdGlvbiBpcyB1bnJlY29nbml6ZWQgaWYgdGhhdCBpcyB0aGUgY2FzZS4KKyAq LworYm9vbAorR1VDQ2hlY2tFeHBsYWluRXh0ZW5zaW9uT3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlv bl9uYW1lLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm9wdGlvbl92YWx1ZSwKKwkJCQkJCQkgICBO b2RlVGFnIG9wdGlvbl90eXBlKQoreworCWZvciAoaW50IGkgPSAwOyBpIDwgRXhwbGFpbkV4dGVu c2lvbk9wdGlvbnNBc3NpZ25lZDsgaSsrKQorCXsKKwkJRXhwbGFpbkV4dGVuc2lvbk9wdGlvbiAq ZXhvcHQgPSAmRXhwbGFpbkV4dGVuc2lvbk9wdGlvbkFycmF5W2ldOworCisJCWlmIChzdHJjbXAo ZXhvcHQtPm9wdGlvbl9uYW1lLCBvcHRpb25fbmFtZSkgPT0gMCkKKwkJCXJldHVybiBleG9wdC0+ Z3VjX2NoZWNrX2hhbmRsZXIob3B0aW9uX25hbWUsIG9wdGlvbl92YWx1ZSwKKwkJCQkJCQkJCQkJ b3B0aW9uX3R5cGUpOworCX0KKworCS8qIFVucmVjb2duaXplZCBvcHRpb24gbmFtZS4gKi8KKwlH VUNfY2hlY2tfZXJybXNnKCJ1bnJlY29nbml6ZWQgRVhQTEFJTiBvcHRpb24gXCIlc1wiIiwgb3B0 aW9uX25hbWUpOworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIGd1Y19jaGVja19oYW5kbGVy IGZvciBCb29sZWFuLXZhbHVlZCBFWFBMQUlOIGV4dGVuc2lvbiBvcHRpb25zLgorICoKKyAqIEFm dGVyIHJlY2VpdmluZyBhICJ0cnVlIiB2YWx1ZSBmcm9tIHRoaXMgb3IgYW55IG90aGVyIEdVQyBj aGVjayBoYW5kbGVyCisgKiBmb3IgYW4gRVhQTEFJTiBleHRlbnNpb24gb3B0aW9uLCB0aGUgY2Fs bGVyIGlzIGVudGl0bGVkIHRvIGFzc3VtZSB0aGF0CisgKiBhIHN1aXRhYmx5IGNvbnN0cnVjdGVk IERlZkVsZW0gcGFzc2VkIHRvIHRoZSBtYWluIG9wdGlvbiBoYW5kbGVyIHdpbGwKKyAqIG5vdCBj YXVzZSBhbiBlcnJvci4gVG8gY29uc3RydWN0IHRoaXMgRGVmRWxlbSwgdGhlIGNhbGxlciBzaG91 bGQgc2V0CisgKiB0aGUgRGVmRWxlbSdzIGRlZm5hbWUgdG8gb3B0aW9uX25hbWUuIElmIG9wdGlv bl92YWx1ZXMgaXMgTlVMTCwgYXJnCisgKiBzaG91bGQgYmUgTlVMTC4gT3RoZXJ3aXNlLCBhcmcg c2hvdWxkIGJlIG9mIHRoZSB0eXBlIGdpdmVuIGJ5CisgKiBvcHRpb25fdHlwZSwgd2l0aCBvcHRp b25fdmFsdWUgYXMgdGhlIGFzc29jaWF0ZWQgdmFsdWUuIFRoZSBvbmx5IG9wdGlvbgorICogdHlw ZXMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIGFyZSBUX1N0cmluZywgVF9GbG9hdCwgYW5kIFRfSW50 ZWdlcjsgaW4KKyAqIHRoZSBsYXN0IGNhc2UsIHRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZv cm0gYSBzdHJpbmctdG8taW50ZWdlcgorICogY29udmVyc2lvbi4KKyAqCisgKiBBIGd1Y19jaGVj a19oYW5kbGVyIHNob3VsZCBub3QgdGhyb3cgYW4gZXJyb3IsIGFuZCBzaG91bGQgbm90IGFsbG9j YXRlCisgKiBtZW1vcnkuICBJZiBpdCByZXR1cm5zIGZhbHNlIHRvIGluZGljYXRlIHRoYXQgdGhl IG9wdGlvbl92YWx1ZSBpcyBub3QKKyAqIGFjY2VwdGFibGUsIGl0IG1heSB1c2UgR1VDX2NoZWNr X2Vycm1zZygpLCBHVUNfY2hlY2tfZXJyZGV0YWlsKCksIGV0Yy4KKyAqIHRvIGNsYXJpZnkgdGhl IG5hdHVyZSBvZiB0aGUgcHJvYmxlbS4KKyAqCisgKiBTaW5jZSB3ZSdyZSBjb25jZXJuZWQgd2l0 aCBCb29sZWFuIG9wdGlvbnMgaGVyZSwgdGhlIGxvZ2ljIGJlbG93IG11c3QKKyAqIGV4YWN0bHkg bWF0Y2ggdGhlIHNlbWFudGljcyBvZiBkZWZHZXRCb29sZWFuLgorICovCitib29sCitHVUNDaGVj a0Jvb2xlYW5FeHBsYWluT3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbl9uYW1lLAorCQkJCQkJCSBj b25zdCBjaGFyICpvcHRpb25fdmFsdWUsCisJCQkJCQkJIE5vZGVUYWcgb3B0aW9uX3R5cGUpCit7 CisJYm9vbAkJdmFsaWQgPSBmYWxzZTsKKworCWlmIChvcHRpb25fdmFsdWUgPT0gTlVMTCkKKwl7 CisJCS8qIGRlZkdldEJvb2xlYW4gdHJlYXRzIG5vIGFyZ3VtZW50IGFzIHZhbGlkICovCisJCXZh bGlkID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAob3B0aW9uX3R5cGUgPT0gVF9TdHJpbmcpCisJewor CQkvKiBkZWZHZXRCb29sZWFuIGFjY2VwdHMgZXhhY3RseSB0aGVzZSBzdHJpbmcgdmFsdWVzICov CisJCWlmIChwZ19zdHJjYXNlY21wKG9wdGlvbl92YWx1ZSwgInRydWUiKSA9PSAwIHx8CisJCQlw Z19zdHJjYXNlY21wKG9wdGlvbl92YWx1ZSwgImZhbHNlIikgPT0gMCB8fAorCQkJcGdfc3RyY2Fz ZWNtcChvcHRpb25fdmFsdWUsICJvbiIpID09IDAgfHwKKwkJCXBnX3N0cmNhc2VjbXAob3B0aW9u X3ZhbHVlLCAib2ZmIikgPT0gMCkKKwkJCXZhbGlkID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAob3B0 aW9uX3R5cGUgPT0gVF9JbnRlZ2VyKQorCXsKKwkJbG9uZwkJdmFsdWU7CisJCWNoYXIJICAgKmVu ZDsKKworCQkvKgorCQkgKiBkZWZHZXRCb29sZWFuIGFjY2VwdHMgb25seSAwIGFuZCAxLCBidXQg dGhvc2UgY2FuIGJlIHNwZWxsZWQgaW4KKwkJICogdmFyaW91cyB3YXlzIChlLmcuIDAxLCAweDAx KS4KKwkJICovCisJCWVycm5vID0gMDsKKwkJdmFsdWUgPSBzdHJ0b2wob3B0aW9uX3ZhbHVlLCAm ZW5kLCAwKTsKKwkJaWYgKGVycm5vID09IDAgJiYgKmVuZCA9PSAnXDAnICYmIGVuZCAhPSBvcHRp b25fdmFsdWUgJiYKKwkJCXZhbHVlID09IChpbnQpIHZhbHVlICYmICh2YWx1ZSA9PSAwIHx8IHZh bHVlID09IDEpKQorCQkJdmFsaWQgPSB0cnVlOworCX0KKworCWlmICghdmFsaWQpCisJeworCQlH VUNfY2hlY2tfZXJybXNnKCJFWFBMQUlOIG9wdGlvbiBcIiVzXCIgcmVxdWlyZXMgYSBCb29sZWFu IHZhbHVlIiwKKwkJCQkJCSBvcHRpb25fbmFtZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwly ZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5f c3RhdGUuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaAppbmRleCA1YTQ4 YmM2ZmJiMS4uNjI1MmZlMTFmMTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4 cGxhaW5fc3RhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluX3N0YXRlLmgK QEAgLTc4LDYgKzc4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwbGFpblN0YXRlCiB9IEV4cGxhaW5T dGF0ZTsKIAogdHlwZWRlZiB2b2lkICgqRXhwbGFpbk9wdGlvbkhhbmRsZXIpIChFeHBsYWluU3Rh dGUgKiwgRGVmRWxlbSAqLCBQYXJzZVN0YXRlICopOwordHlwZWRlZiBib29sICgqRXhwbGFpbk9w dGlvbkdVQ0NoZWNrSGFuZGxlcikgKGNvbnN0IGNoYXIgKm9wdGlvbl9uYW1lLAorCQkJCQkJCQkJ CQkgIGNvbnN0IGNoYXIgKm9wdGlvbl92YWx1ZSwKKwkJCQkJCQkJCQkJICBOb2RlVGFnIG9wdGlv bl90eXBlKTsKIAogLyogSG9vayB0byBwZXJmb3JtIGFkZGl0aW9uYWwgRVhQTEFJTiBvcHRpb25z IHZhbGlkYXRpb24gKi8KIHR5cGVkZWYgdm9pZCAoKmV4cGxhaW5fdmFsaWRhdGVfb3B0aW9uc19o b29rX3R5cGUpIChFeHBsYWluU3RhdGUgKmVzLCBMaXN0ICpvcHRpb25zLApAQCAtOTQsOCArOTcs MTYgQEAgZXh0ZXJuIHZvaWQgU2V0RXhwbGFpbkV4dGVuc2lvblN0YXRlKEV4cGxhaW5TdGF0ZSAq ZXMsIGludCBleHRlbnNpb25faWQsCiAJCQkJCQkJCQkgdm9pZCAqb3BhcXVlKTsKIAogZXh0ZXJu IHZvaWQgUmVnaXN0ZXJFeHRlbnNpb25FeHBsYWluT3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbl9u YW1lLAotCQkJCQkJCQkJCSAgIEV4cGxhaW5PcHRpb25IYW5kbGVyIGhhbmRsZXIpOworCQkJCQkJ CQkJCSAgIEV4cGxhaW5PcHRpb25IYW5kbGVyIGhhbmRsZXIsCisJCQkJCQkJCQkJICAgRXhwbGFp bk9wdGlvbkdVQ0NoZWNrSGFuZGxlciBndWNfY2hlY2tfaGFuZGxlcik7CiBleHRlcm4gYm9vbCBB cHBseUV4dGVuc2lvbkV4cGxhaW5PcHRpb24oRXhwbGFpblN0YXRlICplcywgRGVmRWxlbSAqb3B0 LAogCQkJCQkJCQkJCVBhcnNlU3RhdGUgKnBzdGF0ZSk7CitleHRlcm4gYm9vbCBHVUNDaGVja0V4 cGxhaW5FeHRlbnNpb25PcHRpb24oY29uc3QgY2hhciAqb3B0aW9uX25hbWUsCisJCQkJCQkJCQkJ ICAgY29uc3QgY2hhciAqb3B0aW9uX3ZhbHVlLAorCQkJCQkJCQkJCSAgIE5vZGVUYWcgb3B0aW9u X3R5cGUpOworCitleHRlcm4gYm9vbCBHVUNDaGVja0Jvb2xlYW5FeHBsYWluT3B0aW9uKGNvbnN0 IGNoYXIgKm9wdGlvbl9uYW1lLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICpvcHRpb25fdmFsdWUs CisJCQkJCQkJCQkJIE5vZGVUYWcgb3B0aW9uX3R5cGUpOwogCiAjZW5kaWYJCQkJCQkJLyogRVhQ TEFJTl9TVEFURV9IICovCi0tIAoyLjUxLjAKCg== --000000000000d275f7064e7e3637 Content-Type: application/octet-stream; name="v2-0001-Expose-helper-functions-scan_quoted_identifier-an.patch" Content-Disposition: attachment; filename="v2-0001-Expose-helper-functions-scan_quoted_identifier-an.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnhsqpdt0 RnJvbSBiZjFmZTkzMDBkYjk1NjgyZTc2ZGZjNzI5Yzk2OGQ1MjZlNTVhM2JlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMzAgTWFyIDIwMjYgMTg6NDk6NTYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyIDEv M10gRXhwb3NlIGhlbHBlciBmdW5jdGlvbnMgc2Nhbl9xdW90ZWRfaWRlbnRpZmllciBhbmQKIHNj YW5faWRlbnRpZmllci4KClByZXZpb3VzbHksIHRoaXMgbG9naWMgd2FzIGVtYmVkZGVkIHdpdGhp biBTcGxpdElkZW50aWZpZXJTdHJpbmcsClNwbGl0RGlyZWN0b3JpZXNTdHJpbmcsIGFuZCBTcGxp dEdVQ0xpc3QuIEZhY3RvcmluZyBpdCBvdXQgc2F2ZXMKYSBiaXQgb2YgZHVwbGljYXRlZCBjb2Rl LCBhbmQgYWxzbyBtYWtlcyBpdCBhdmFpbGFibGUgdG8gZXh0ZW5zaW9ucwp0aGF0IG1pZ2h0IHdh bnQgdG8gZG8gc2ltaWxhciB0aGluZ3Mgd2l0aG91dCBuZWNlc3NhcmlseSB3YW50aW5nIHRvCmRv IGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcuCgpSZXZpZXdlZC1ieTogTWF0aGV1cyBBbGNhbnRhcmEg PG1hdGhldXNzc2lsdjk3QGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9t L0NBK1RnbW9iLTBXODMwNm12ckpYNVVydHF0MUFBYXN1OHBpNHlMcloxWGZ3WlUtVWoxd0BtYWls LmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgfCAxODkgKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL3ZhcmxlbmEu aCAgICAgfCAgIDMgKwogMiBmaWxlcyBjaGFuZ2VkLCAxMDIgaW5zZXJ0aW9ucygrKSwgOTAgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKaW5kZXggZWNhZDZkNjIxODQuLmMwZmY1 MWJkMmZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKQEAgLTI3NTAsNiArMjc1MCw5NiBAQCB0 ZXh0VG9RdWFsaWZpZWROYW1lTGlzdCh0ZXh0ICp0ZXh0dmFsKQogCXJldHVybiByZXN1bHQ7CiB9 CiAKKy8qCisgKiBzY2FuX3F1b3RlZF9pZGVudGlmaWVyIC0gSW4tcGxhY2Ugc2Nhbm5lciBmb3Ig cXVvdGVkIGlkZW50aWZpZXJzLgorICoKKyAqICpuZXh0cCBzaG91bGQgcG9pbnQgdG8gdGhlIG9w ZW5pbmcgZG91YmxlLXF1b3RlIGNoYXJhY3RlciwgYW5kIHdpbGwgYmUKKyAqIHVwZGF0ZWQgdG8g cG9pbnQganVzdCBwYXN0IHRoZSBlbmQuICAqZW5kcCBpcyBzZXQgdG8gdGhlIHBvc2l0aW9uIG9m CisgKiB0aGUgY2xvc2luZyBxdW90ZS4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgaWRlbnRpZmll ciwgb3IgTlVMTCBpZiB0aGUKKyAqIG1hdGNoaW5nIGNsb3NlLXF1b3RlIGNhbm5vdCBiZSBmb3Vu ZC4KKyAqCisgKiBJZiB3ZSBmaW5kIHR3byBjb25zZWN1dGl2ZSBkb3VibGUgcXVvdGUgY2hhcmFj dGVycywgdGhhdCBkb2Vzbid0IGVuZCB0aGUKKyAqIGlkZW50aWZpZXI6IGluc3RlYWQsIHdlIGNv bGxhcHNlIHRoZW0gaW50byBhIGRvdWJsZSBxdW90ZSBhbmQgaW5jbHVkZSB0aGVtCisgKiBpbiB0 aGUgcmVzdWx0aW5nIHRva2VuLiBOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyBvdmVyd3JpdGluZyB0 aGUgcmVzdCBvZiB0aGUKKyAqIHN0cmluZyBpbiBwbGFjZSwgaW5jbHVkaW5nIHRoZSBwb3J0aW9u IGJleW9uZCB0aGUgZmluYWwgdmFsdWUgb2YgKm5leHRwLgorICovCitjaGFyICoKK3NjYW5fcXVv dGVkX2lkZW50aWZpZXIoY2hhciAqKmVuZHAsIGNoYXIgKipuZXh0cCkKK3sKKwljaGFyCSAgICp0 b2tlbiA9ICpuZXh0cCArIDE7CisKKwlmb3IgKDs7KQorCXsKKwkJKmVuZHAgPSBzdHJjaHIoKm5l eHRwICsgMSwgJyInKTsKKwkJaWYgKCplbmRwID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsJCS8q IG1pc21hdGNoZWQgcXVvdGVzICovCisJCWlmICgoKmVuZHApWzFdICE9ICciJykKKwkJCWJyZWFr OwkJCQkvKiBmb3VuZCBlbmQgb2YgcXVvdGVkIGlkZW50aWZpZXIgKi8KKwkJLyogQ29sbGFwc2Ug YWRqYWNlbnQgcXVvdGVzIGludG8gb25lIHF1b3RlLCBhbmQgbG9vayBhZ2FpbiAqLworCQltZW1t b3ZlKCplbmRwLCAqZW5kcCArIDEsIHN0cmxlbigqZW5kcCkpOworCQkqbmV4dHAgPSAqZW5kcDsK Kwl9CisJLyogKmVuZHAgbm93IHBvaW50cyBhdCB0aGUgdGVybWluYXRpbmcgcXVvdGUgKi8KKwkq bmV4dHAgPSAqZW5kcCArIDE7CisKKwlyZXR1cm4gdG9rZW47Cit9CisKKy8qCisgKiBzY2FuX2lk ZW50aWZpZXIgLSBJbi1wbGFjZSBzY2FubmVyIGZvciBxdW90ZWQgb3IgdW5xdW90ZWQgaWRlbnRp ZmllcnMuCisgKgorICogT24gc3VjY2VzcywgKmVuZHAgaXMgc2V0IHRvIHRoZSBwb3NpdGlvbiB3 aGVyZSB0aGUgY2FsbGVyIHNob3VsZCB3cml0ZSAnXDAnCisgKiB0byBudWxsLXRlcm1pbmF0ZSB0 aGUgdG9rZW4sIGFuZCAqbmV4dHAgaXMgYWR2YW5jZWQgcGFzdCB0aGUgdG9rZW4gKGFuZCBwYXN0 CisgKiB0aGUgY2xvc2luZyBxdW90ZSwgaWYgYW55KS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhl IHRva2VuIGNvbnRlbnQsIG9yIE5VTEwKKyAqIGlmIHRoZXJlIGlzIGEgc3ludGF4IGVycm9yICht aXNtYXRjaGVkIHF1b3RlcyBvciBlbXB0eSB1bnF1b3RlZCB0b2tlbikuCisgKgorICogVW5xdW90 ZWQgaWRlbnRpZmllcnMgYXJlIHRlcm1pbmF0ZWQgYnkgd2hpdGVzcGFjZSBvciB0aGUgZmlyc3Qg b2NjdXJyZW5jZQorICogb2YgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuIEFkZGl0aW9uYWxseSwg aWYgZG93bmNhc2VfdW5xdW90ZWQgPSB0cnVlLAorICogdW5xdW90ZWQgaWRlbnRpZmllcnMgYXJl IGRvd25jYXNlZCBpbiBwbGFjZS4gU2VlIHNjYW5fcXVvdGVkX2lkZW50aWZpZXIgZm9yCisgKiBh biBhZGRpdGlvbmFsIHdheSBpbiB3aGljaCB3ZSBtb2RpZnkgdGhlIHN0cmluZyBpbiBwbGFjZS4K KyAqLworY2hhciAqCitzY2FuX2lkZW50aWZpZXIoY2hhciAqKmVuZHAsIGNoYXIgKipuZXh0cCwg Y2hhciBzZXBhcmF0b3IsIGJvb2wgZG93bmNhc2VfdW5xdW90ZWQpCit7CisJY2hhcgkgICAqdG9r ZW47CisKKwlpZiAoKipuZXh0cCA9PSAnIicpCisJCXJldHVybiBzY2FuX3F1b3RlZF9pZGVudGlm aWVyKGVuZHAsIG5leHRwKTsKKworCS8qIFVucXVvdGVkIGlkZW50aWZpZXIgLS0tIGV4dGVuZHMg dG8gc2VwYXJhdG9yIG9yIHdoaXRlc3BhY2UgKi8KKwl0b2tlbiA9ICpuZXh0cDsKKworCXdoaWxl ICgqKm5leHRwICYmICoqbmV4dHAgIT0gc2VwYXJhdG9yICYmICFzY2FubmVyX2lzc3BhY2UoKipu ZXh0cCkpCisJCSgqbmV4dHApKys7CisKKwlpZiAoKm5leHRwID09IHRva2VuKQorCQlyZXR1cm4g TlVMTDsJCQkvKiBlbXB0eSB0b2tlbiAqLworCisJKmVuZHAgPSAqbmV4dHA7CisKKwlpZiAoZG93 bmNhc2VfdW5xdW90ZWQpCisJeworCQkvKgorCQkgKiBEb3duY2FzZSB0aGUgaWRlbnRpZmllciwg dXNpbmcgc2FtZSBjb2RlIGFzIG1haW4gbGV4ZXIgZG9lcy4KKwkJICoKKwkJICogWFhYIGJlY2F1 c2Ugd2Ugd2FudCB0byBvdmVyd3JpdGUgdGhlIGlucHV0IGluLXBsYWNlLCB3ZSBjYW5ub3QKKwkJ ICogc3VwcG9ydCBhIGRvd25jYXNpbmcgdHJhbnNmb3JtYXRpb24gdGhhdCBpbmNyZWFzZXMgdGhl IHN0cmluZworCQkgKiBsZW5ndGguICBUaGlzIGlzIG5vdCBhIHByb2JsZW0gZ2l2ZW4gdGhlIGN1 cnJlbnQgaW1wbGVtZW50YXRpb24gb2YKKwkJICogZG93bmNhc2VfdHJ1bmNhdGVfaWRlbnRpZmll ciwgYnV0IHdlJ2xsIHByb2JhYmx5IGhhdmUgdG8gZG8KKwkJICogc29tZXRoaW5nIGFib3V0IHRo aXMgc29tZWRheS4KKwkJICovCisJCWludAkJCWxlbiA9ICplbmRwIC0gdG9rZW47CisJCWNoYXIJ ICAgKmRvd25uYW1lID0gZG93bmNhc2VfdHJ1bmNhdGVfaWRlbnRpZmllcih0b2tlbiwgbGVuLCBm YWxzZSk7CisKKwkJQXNzZXJ0KHN0cmxlbihkb3dubmFtZSkgPD0gbGVuKTsKKwkJc3RybmNweSh0 b2tlbiwgZG93bm5hbWUsIGxlbik7CS8qIHN0cm5jcHkgaXMgcmVxdWlyZWQgaGVyZSAqLworCQlw ZnJlZShkb3dubmFtZSk7CisJfQorCisJcmV0dXJuIHRva2VuOworfQorCisKIC8qCiAgKiBTcGxp dElkZW50aWZpZXJTdHJpbmcgLS0tIHBhcnNlIGEgc3RyaW5nIGNvbnRhaW5pbmcgaWRlbnRpZmll cnMKICAqCkBAIC0yNzk0LDUzICsyODg0LDkgQEAgU3BsaXRJZGVudGlmaWVyU3RyaW5nKGNoYXIg KnJhd3N0cmluZywgY2hhciBzZXBhcmF0b3IsCiAJCWNoYXIJICAgKmN1cm5hbWU7CiAJCWNoYXIJ ICAgKmVuZHA7CiAKLQkJaWYgKCpuZXh0cCA9PSAnIicpCi0JCXsKLQkJCS8qIFF1b3RlZCBuYW1l IC0tLSBjb2xsYXBzZSBxdW90ZS1xdW90ZSBwYWlycywgbm8gZG93bmNhc2luZyAqLwotCQkJY3Vy bmFtZSA9IG5leHRwICsgMTsKLQkJCWZvciAoOzspCi0JCQl7Ci0JCQkJZW5kcCA9IHN0cmNocihu ZXh0cCArIDEsICciJyk7Ci0JCQkJaWYgKGVuZHAgPT0gTlVMTCkKLQkJCQkJcmV0dXJuIGZhbHNl OwkvKiBtaXNtYXRjaGVkIHF1b3RlcyAqLwotCQkJCWlmIChlbmRwWzFdICE9ICciJykKLQkJCQkJ YnJlYWs7CQkvKiBmb3VuZCBlbmQgb2YgcXVvdGVkIG5hbWUgKi8KLQkJCQkvKiBDb2xsYXBzZSBh ZGphY2VudCBxdW90ZXMgaW50byBvbmUgcXVvdGUsIGFuZCBsb29rIGFnYWluICovCi0JCQkJbWVt bW92ZShlbmRwLCBlbmRwICsgMSwgc3RybGVuKGVuZHApKTsKLQkJCQluZXh0cCA9IGVuZHA7Ci0J CQl9Ci0JCQkvKiBlbmRwIG5vdyBwb2ludHMgYXQgdGhlIHRlcm1pbmF0aW5nIHF1b3RlICovCi0J CQluZXh0cCA9IGVuZHAgKyAxOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogVW5xdW90ZWQgbmFt ZSAtLS0gZXh0ZW5kcyB0byBzZXBhcmF0b3Igb3Igd2hpdGVzcGFjZSAqLwotCQkJY2hhcgkgICAq ZG93bm5hbWU7Ci0JCQlpbnQJCQlsZW47Ci0KLQkJCWN1cm5hbWUgPSBuZXh0cDsKLQkJCXdoaWxl ICgqbmV4dHAgJiYgKm5leHRwICE9IHNlcGFyYXRvciAmJgotCQkJCSAgICFzY2FubmVyX2lzc3Bh Y2UoKm5leHRwKSkKLQkJCQluZXh0cCsrOwotCQkJZW5kcCA9IG5leHRwOwotCQkJaWYgKGN1cm5h bWUgPT0gbmV4dHApCi0JCQkJcmV0dXJuIGZhbHNlOwkvKiBlbXB0eSB1bnF1b3RlZCBuYW1lIG5v dCBhbGxvd2VkICovCi0KLQkJCS8qCi0JCQkgKiBEb3duY2FzZSB0aGUgaWRlbnRpZmllciwgdXNp bmcgc2FtZSBjb2RlIGFzIG1haW4gbGV4ZXIgZG9lcy4KLQkJCSAqCi0JCQkgKiBYWFggYmVjYXVz ZSB3ZSB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgaW5wdXQgaW4tcGxhY2UsIHdlIGNhbm5vdAotCQkJ ICogc3VwcG9ydCBhIGRvd25jYXNpbmcgdHJhbnNmb3JtYXRpb24gdGhhdCBpbmNyZWFzZXMgdGhl IHN0cmluZwotCQkJICogbGVuZ3RoLiAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIGdpdmVuIHRoZSBj dXJyZW50IGltcGxlbWVudGF0aW9uCi0JCQkgKiBvZiBkb3duY2FzZV90cnVuY2F0ZV9pZGVudGlm aWVyLCBidXQgd2UnbGwgcHJvYmFibHkgaGF2ZSB0byBkbwotCQkJICogc29tZXRoaW5nIGFib3V0 IHRoaXMgc29tZWRheS4KLQkJCSAqLwotCQkJbGVuID0gZW5kcCAtIGN1cm5hbWU7Ci0JCQlkb3du bmFtZSA9IGRvd25jYXNlX3RydW5jYXRlX2lkZW50aWZpZXIoY3VybmFtZSwgbGVuLCBmYWxzZSk7 Ci0JCQlBc3NlcnQoc3RybGVuKGRvd25uYW1lKSA8PSBsZW4pOwotCQkJc3RybmNweShjdXJuYW1l LCBkb3dubmFtZSwgbGVuKTsJLyogc3RybmNweSBpcyByZXF1aXJlZCBoZXJlICovCi0JCQlwZnJl ZShkb3dubmFtZSk7Ci0JCX0KKwkJY3VybmFtZSA9IHNjYW5faWRlbnRpZmllcigmZW5kcCwgJm5l eHRwLCBzZXBhcmF0b3IsIHRydWUpOworCQlpZiAoY3VybmFtZSA9PSBOVUxMKQorCQkJcmV0dXJu IGZhbHNlOwkJLyogbWlzbWF0Y2hlZCBxdW90ZXMgb3IgZW1wdHkgbmFtZSAqLwogCiAJCXdoaWxl IChzY2FubmVyX2lzc3BhY2UoKm5leHRwKSkKIAkJCW5leHRwKys7CQkJLyogc2tpcCB0cmFpbGlu ZyB3aGl0ZXNwYWNlICovCkBAIC0yOTI0LDIwICsyOTcwLDkgQEAgU3BsaXREaXJlY3Rvcmllc1N0 cmluZyhjaGFyICpyYXdzdHJpbmcsIGNoYXIgc2VwYXJhdG9yLAogCQlpZiAoKm5leHRwID09ICci JykKIAkJewogCQkJLyogUXVvdGVkIG5hbWUgLS0tIGNvbGxhcHNlIHF1b3RlLXF1b3RlIHBhaXJz ICovCi0JCQljdXJuYW1lID0gbmV4dHAgKyAxOwotCQkJZm9yICg7OykKLQkJCXsKLQkJCQllbmRw ID0gc3RyY2hyKG5leHRwICsgMSwgJyInKTsKLQkJCQlpZiAoZW5kcCA9PSBOVUxMKQotCQkJCQly ZXR1cm4gZmFsc2U7CS8qIG1pc21hdGNoZWQgcXVvdGVzICovCi0JCQkJaWYgKGVuZHBbMV0gIT0g JyInKQotCQkJCQlicmVhazsJCS8qIGZvdW5kIGVuZCBvZiBxdW90ZWQgbmFtZSAqLwotCQkJCS8q IENvbGxhcHNlIGFkamFjZW50IHF1b3RlcyBpbnRvIG9uZSBxdW90ZSwgYW5kIGxvb2sgYWdhaW4g Ki8KLQkJCQltZW1tb3ZlKGVuZHAsIGVuZHAgKyAxLCBzdHJsZW4oZW5kcCkpOwotCQkJCW5leHRw ID0gZW5kcDsKLQkJCX0KLQkJCS8qIGVuZHAgbm93IHBvaW50cyBhdCB0aGUgdGVybWluYXRpbmcg cXVvdGUgKi8KLQkJCW5leHRwID0gZW5kcCArIDE7CisJCQljdXJuYW1lID0gc2Nhbl9xdW90ZWRf aWRlbnRpZmllcigmZW5kcCwgJm5leHRwKTsKKwkJCWlmIChjdXJuYW1lID09IE5VTEwpCisJCQkJ cmV0dXJuIGZhbHNlOwkvKiBtaXNtYXRjaGVkIHF1b3RlcyAqLwogCQl9CiAJCWVsc2UKIAkJewpA QCAtMzA0MiwzNSArMzA3Nyw5IEBAIFNwbGl0R1VDTGlzdChjaGFyICpyYXdzdHJpbmcsIGNoYXIg c2VwYXJhdG9yLAogCQljaGFyCSAgICpjdXJuYW1lOwogCQljaGFyCSAgICplbmRwOwogCi0JCWlm ICgqbmV4dHAgPT0gJyInKQotCQl7Ci0JCQkvKiBRdW90ZWQgbmFtZSAtLS0gY29sbGFwc2UgcXVv dGUtcXVvdGUgcGFpcnMgKi8KLQkJCWN1cm5hbWUgPSBuZXh0cCArIDE7Ci0JCQlmb3IgKDs7KQot CQkJewotCQkJCWVuZHAgPSBzdHJjaHIobmV4dHAgKyAxLCAnIicpOwotCQkJCWlmIChlbmRwID09 IE5VTEwpCi0JCQkJCXJldHVybiBmYWxzZTsJLyogbWlzbWF0Y2hlZCBxdW90ZXMgKi8KLQkJCQlp ZiAoZW5kcFsxXSAhPSAnIicpCi0JCQkJCWJyZWFrOwkJLyogZm91bmQgZW5kIG9mIHF1b3RlZCBu YW1lICovCi0JCQkJLyogQ29sbGFwc2UgYWRqYWNlbnQgcXVvdGVzIGludG8gb25lIHF1b3RlLCBh bmQgbG9vayBhZ2FpbiAqLwotCQkJCW1lbW1vdmUoZW5kcCwgZW5kcCArIDEsIHN0cmxlbihlbmRw KSk7Ci0JCQkJbmV4dHAgPSBlbmRwOwotCQkJfQotCQkJLyogZW5kcCBub3cgcG9pbnRzIGF0IHRo ZSB0ZXJtaW5hdGluZyBxdW90ZSAqLwotCQkJbmV4dHAgPSBlbmRwICsgMTsKLQkJfQotCQllbHNl Ci0JCXsKLQkJCS8qIFVucXVvdGVkIG5hbWUgLS0tIGV4dGVuZHMgdG8gc2VwYXJhdG9yIG9yIHdo aXRlc3BhY2UgKi8KLQkJCWN1cm5hbWUgPSBuZXh0cDsKLQkJCXdoaWxlICgqbmV4dHAgJiYgKm5l eHRwICE9IHNlcGFyYXRvciAmJgotCQkJCSAgICFzY2FubmVyX2lzc3BhY2UoKm5leHRwKSkKLQkJ CQluZXh0cCsrOwotCQkJZW5kcCA9IG5leHRwOwotCQkJaWYgKGN1cm5hbWUgPT0gbmV4dHApCi0J CQkJcmV0dXJuIGZhbHNlOwkvKiBlbXB0eSB1bnF1b3RlZCBuYW1lIG5vdCBhbGxvd2VkICovCi0J CX0KKwkJY3VybmFtZSA9IHNjYW5faWRlbnRpZmllcigmZW5kcCwgJm5leHRwLCBzZXBhcmF0b3Is IGZhbHNlKTsKKwkJaWYgKGN1cm5hbWUgPT0gTlVMTCkKKwkJCXJldHVybiBmYWxzZTsJCS8qIG1p c21hdGNoZWQgcXVvdGVzIG9yIGVtcHR5IG5hbWUgKi8KIAogCQl3aGlsZSAoc2Nhbm5lcl9pc3Nw YWNlKCpuZXh0cCkpCiAJCQluZXh0cCsrOwkJCS8qIHNraXAgdHJhaWxpbmcgd2hpdGVzcGFjZSAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvdmFybGVuYS5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvdmFybGVuYS5oCmluZGV4IDRiMzI1NzRhMDc1Li5mZThkOGE1ODk1MiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdXRpbHMvdmFybGVuYS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Zh cmxlbmEuaApAQCAtMjcsNiArMjcsOSBAQCBleHRlcm4gaW50CXZhcnN0cl9sZXZlbnNodGVpbl9s ZXNzX2VxdWFsKGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50IHNsZW4sCiAJCQkJCQkJCQkJICBpbnQg aW5zX2MsIGludCBkZWxfYywgaW50IHN1Yl9jLAogCQkJCQkJCQkJCSAgaW50IG1heF9kLCBib29s IHRydXN0ZWQpOwogZXh0ZXJuIExpc3QgKnRleHRUb1F1YWxpZmllZE5hbWVMaXN0KHRleHQgKnRl eHR2YWwpOworZXh0ZXJuIGNoYXIgKnNjYW5fcXVvdGVkX2lkZW50aWZpZXIoY2hhciAqKmVuZHAs IGNoYXIgKipuZXh0cCk7CitleHRlcm4gY2hhciAqc2Nhbl9pZGVudGlmaWVyKGNoYXIgKiplbmRw LCBjaGFyICoqbmV4dHAsIGNoYXIgc2VwYXJhdG9yLAorCQkJCQkJCSBib29sIGRvd25jYXNlX3Vu cXVvdGVkKTsKIGV4dGVybiBib29sIFNwbGl0SWRlbnRpZmllclN0cmluZyhjaGFyICpyYXdzdHJp bmcsIGNoYXIgc2VwYXJhdG9yLAogCQkJCQkJCQkgIExpc3QgKipuYW1lbGlzdCk7CiBleHRlcm4g Ym9vbCBTcGxpdERpcmVjdG9yaWVzU3RyaW5nKGNoYXIgKnJhd3N0cmluZywgY2hhciBzZXBhcmF0 b3IsCi0tIAoyLjUxLjAKCg== --000000000000d275f7064e7e3637--