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 1wfUF4-005TpT-1c for pgsql-bugs@arkaria.postgresql.org; Fri, 03 Jul 2026 03:07:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfUF2-004dEC-35 for pgsql-bugs@arkaria.postgresql.org; Fri, 03 Jul 2026 03:07:00 +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 1wfUF2-004dE3-2A for pgsql-bugs@lists.postgresql.org; Fri, 03 Jul 2026 03:07:00 +0000 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wfUF0-00000001Q4o-3GgY for pgsql-bugs@postgresql.org; Fri, 03 Jul 2026 03:07:00 +0000 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-448de0cc236so37015fac.2 for ; Thu, 02 Jul 2026 20:06:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783048017; cv=none; d=google.com; s=arc-20260327; b=c+3P30Tk00X0Qoy/esEOUHl2HjLT0wzUJ2PPiA1OmoQ/lDYaw3Zt4FlqWp7Y9St/Sc Aaw/bpWhLrgVYRpc4RC4ymbdpdller447QlogCLZoeiMcQyXqU5DZ1zIn/Bce2vnvKjz /EUOgTnSsIL0/0g017zJ3q9GjtsCCCTgKgpDEsUrqR0CG5Nus2tdn8FyRuvbWe4eM68J aPlcu1i7rN59v5qEMZn803eAmD6YQY5GOhFraxWJYTs41Md0cLT4Y7yyI0nJ3k19JWlG SF0GdrOL6+auhJuFpdWdatutRRzVVrRI+MrdfEDl4kiZnV1OzqH+bHNzxjnHNNVPK684 ODQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Hn4Yb9jq+KQY+0rvqq2xcEfs3bEBhYcLzNGdoOi/y0M=; fh=fNPwCKKQjS7loeG0QdVScHdB5f+5X6umzsZdLK/kF0g=; b=gsuyadDZdTQhsFPq9r79+Dn7ax8WjZml9qN/uyZ61yXJGBc8pWsjFlEAiXI3K4WNQ+ KXwDkBeAw8OYsfBo0ApN541JwWLhZnf+BZaieC6uPctrHepJqzRvU/PPXIq+gyqImEQy mSqAoj5+1pecHK7HqznpdOmNLjnkfRaQ3rPNFluYIMV+aj9d6vruVVF3MNK5vh/qP3ur jSn79qCzS8fhS41P1HrrZWLw1QeGbjVkGSvezHSJ/urw+q0CqUjkMP+EOHoUggt4GmoZ 7qV3jDw/ZqPkYV7y36e9sYEUNhzYzUodHAqBsTlJ/jfPNrysnaciTiJ95Y2tOdjj366b H5CA==; darn=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=1783048017; x=1783652817; darn=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=Hn4Yb9jq+KQY+0rvqq2xcEfs3bEBhYcLzNGdoOi/y0M=; b=gOTDJHSWOIkQe7DyrbZpXc0TxImomaSpLPfY2rjwSuMRtc+69VYoiJpa/NuV2w97/9 /HCcpXgWCEzQZR4vkg3f6K09yzvDooHU27j+aaUVAXLv3IlApdjrKjLlzO6GPVdNHNZj eiISgMji7JWHw3dr2IX+L+4apUwSKCND0AWXnYtdkykOTgdX2AX3NANGRKiNxzm3WYDx BPWpD+admCmKRV3JLAL/vMBOgz9/99oW5v9q3/JJ/0VNroNxbp16iqfxuozfYMdMoa2E lDiinFjzHMOmEvwDRe9TBhQpxvGNHJb2ziytRcALGIQNXq/ojafDa3oR4z/LLRMcPcfs c22A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783048017; x=1783652817; 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=Hn4Yb9jq+KQY+0rvqq2xcEfs3bEBhYcLzNGdoOi/y0M=; b=UnFtNa+w0dJbJc3swqRNYMYr3ID9hMHhJUNXrBJkJpqMekgjwy7VVFl+k+tfbKYMra qeFENS+qrnxaNXGpZ7Ei/Zgyb6y8Q2U7Qsm60A41xusmBKf4LZKYxUiCULm4vrifwnOR bgI7cwIZ6FyCasphJdcJX870Ywo7xJ+2T2ctBH/dKID9DfbRImksSXR8+rcaklTbTXNK vqppaVSBwIdcu5TrosrCFOORv4/waqMHo3BV6jiDBwtVgXmgB2EJjODuKB34N/WIH/Z8 +JIm9iojsi79WtCOy/dSnjP9Pxqt7TQ5zFwyyqnu8Ui+38PoGwpLNtc6WcyqNuHGPBnC v1Vw== X-Gm-Message-State: AOJu0YwOVbTuZbw4UA9IFfhvr7YtversgapsYjnHwRip0J3U8yFX9fHk 3mem1uenP+c+GvgafiY8gDps8BTtv6hZULNfiYbXgjloF275HpvHz9wJpNsiEWQ3l0HLm4pbNbo Cp7L0gII/0Pm1hNeJfe3v0Rwg9qKeBYkqcJmr X-Gm-Gg: AfdE7ckV0eWrynXCkkwn4YYLkWfu97eTsfKpnRwVTpc6HtOKCn8kgwctgBaC8pndb7O /4DAVklH/wqPlYnTcwye8y34jlSgZqJ437/FCng4pFQN88K6RToE9/Pcv2QcrbxVOiF9vzrpAsn sUV9syT3WFgormMKtqXoaomTigDZBpffMZ/JdRVVJETD/MNIWyNxw+WD105TMnGW1naMCJblTQT +3y4+Rd+rdYDWJIF2bfm9lhhYUYkCg3V0ELPK04VSbjhHwxvnZQEONZKV3M+C/UCWPW8dkVng== X-Received: by 2002:a05:6870:d04:b0:441:a287:137d with SMTP id 586e51a60fabf-44cabbe1c94mr5735210fac.29.1783048016861; Thu, 02 Jul 2026 20:06:56 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Richard Guo Date: Fri, 3 Jul 2026 12:06:45 +0900 X-Gm-Features: AVVi8CcxSQXvR_2rKdieErKVlcmmg45w2DNExbzq7laQxmrz26P6NdXQFulciYI Message-ID: Subject: Re: EXPLAIN (VERBOSE) fails with for JSON_ARRAYAGG/JSON_OBJECTAGG + window function To: Thom Brown Cc: pgsql-bugs Content-Type: multipart/mixed; boundary="000000000000a9b7a80655ac37a4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a9b7a80655ac37a4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jul 3, 2026 at 7:10=E2=80=AFAM Richard Guo = wrote: > Reproduced here. get_json_agg_constructor() expects that ctor->func > is Aggref or WindowFunc, but what it gets here is a Var. > > This is because the query has both window functions and grouped > aggregates. make_window_input_target() flattens the final tlist using > pull_var_clause, which pulls the Aggref out of its JsonConstructorExpr > wrapper. Then fix_upper_expr() matches that inner Aggref against the > Agg subplan's tlist and replaces it with an OUTER Var. Here is the patch. It's a bit annoying that the original JSON agg syntax then appears nowhere in the EXPLAIN output. All we get is the bare jsonb_agg_strict Aggref. WindowAgg Output: g, (jsonb_agg_strict(name)), row_number() OVER w1 Window: w1 AS (ROWS UNBOUNDED PRECEDING) -> HashAggregate Output: g, jsonb_agg_strict(name) The reason is that the JsonConstructorExpr wrapper and the Aggref it wraps end up in different plan nodes, and neither alone suffices to reconstruct the syntax. I had an attempt to reconstruct the JSON syntax for the WindowAgg node by leveraging resolve_special_varno(), and that works. But I don't know how to do that for the HashAggregate node, because the JsonConstructorExpr wrapper simply doesn't exist at that plan level. Maybe we can hack the planner to make make_window_input_target() keep the JsonConstructorExpr together with its Aggref. But I think that is too invasive and it changes which node evaluates the wrapper. So that attempt ended up with: WindowAgg Output: g, JSON_ARRAYAGG(name RETURNING jsonb), row_number() OVER w1 Window: w1 AS (ROWS UNBOUNDED PRECEDING) -> HashAggregate Output: g, jsonb_agg_strict(name) But I don't think this is good. It fails to state the fact that the WindowAgg doesn't compute a JSON aggregate; it passes through a value that the HashAggregate computed. So I gave up this idea. - Richard --000000000000a9b7a80655ac37a4 Content-Type: application/octet-stream; name="v1-0001-Fix-EXPLAIN-failure-when-deparsing-SQL-JSON-aggre.patch" Content-Disposition: attachment; filename="v1-0001-Fix-EXPLAIN-failure-when-deparsing-SQL-JSON-aggre.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr4cqqx20 RnJvbSBiOTE3ZTVjMmEyMGRkNDY5ZGE2YTlkZWIyNDhjYjVkYzQyYmNhNTExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzIEp1bCAyMDI2IDEwOjUyOjI5ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MV0g Rml4IEVYUExBSU4gZmFpbHVyZSB3aGVuIGRlcGFyc2luZyBTUUwvSlNPTiBhZ2dyZWdhdGVzCgpJ ZiBhbiBleHByZXNzaW9uIGNvbnRhaW5pbmcgYW4gYWdncmVnYXRlIGlzIGV2YWx1YXRlZCBhYm92 ZSB0aGUgcGxhbgpub2RlIHRoYXQgY29tcHV0ZXMgdGhlIGFnZ3JlZ2F0ZSwgYXMgaGFwcGVucyB3 aXRoIHdpbmRvdyBmdW5jdGlvbnMgb3IKd2l0aCBleHByZXNzaW9ucyBwb3N0cG9uZWQgdG8gYWJv dmUgdGhlIGZpbmFsIHNvcnQsIHNldHJlZnMuYyByZXBsYWNlcwp0aGUgQWdncmVmIG9yIFdpbmRv d0Z1bmMgd2l0aCBhIFZhciByZWZlcmVuY2luZyB0aGUgbG93ZXIgbm9kZSdzCm91dHB1dC4gIEZv ciBTUUwvSlNPTiBhZ2dyZWdhdGVzIHN1Y2ggYXMgSlNPTl9BUlJBWUFHRywgZGVwYXJzaW5nIHRo ZQpjb250YWluaW5nIEpzb25Db25zdHJ1Y3RvckV4cHIgdGhlbiBmYWlsZWQgd2l0aCAiaW52YWxp ZApKc29uQ29uc3RydWN0b3JFeHByIHVuZGVybHlpbmcgbm9kZSB0eXBlIiwgc2luY2UKZ2V0X2pz b25fYWdnX2NvbnN0cnVjdG9yKCkgZGlkIG5vdCBleHBlY3QgYSBWYXIgdGhlcmUuCgpGaXggYnkg cHJpbnRpbmcgdGhlIFZhciwgbWF0Y2hpbmcgaG93IG90aGVyIGV4cHJlc3Npb25zIGV2YWx1YXRl ZAphYm92ZSBhbiBhZ2dyZWdhdGUgYXJlIGRpc3BsYXllZC4gIEl0J3MgYSBiaXQgYW5ub3lpbmcg dGhhdCB0aGUKb3JpZ2luYWwgSlNPTiBhZ2dyZWdhdGUgc3ludGF4IHRoZW4gYXBwZWFycyBub3do ZXJlIGluIHRoZSBFWFBMQUlOCm91dHB1dCwgYnV0IHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIHBy aW50IGl0OiB0aGUgSnNvbkNvbnN0cnVjdG9yRXhwcgp3cmFwcGVyIGFuZCB0aGUgQWdncmVmIGl0 IGRlY29yYXRlcyBlbmQgdXAgaW4gZGlmZmVyZW50IHBsYW4gbm9kZXMsCmFuZCBuZWl0aGVyIGFs b25lIHN1ZmZpY2VzIHRvIHJlY29uc3RydWN0IHRoZSBzeW50YXguCi0tLQogc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICB8ICA5ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zcWxqc29uLm91dCB8IDk1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwgICAgICB8IDM1ICsrKysrKysrKysKIDMgZmlsZXMg Y2hhbmdlZCwgMTM5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5k ZXggODhkZTVjMDQ4MWMuLjA1Yjc2OWRjZTc4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j CkBAIC0xMjM4OSw2ICsxMjM4OSwxNSBAQCBnZXRfanNvbl9hZ2dfY29uc3RydWN0b3IoSnNvbkNv bnN0cnVjdG9yRXhwciAqY3RvciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQlnZXRfd2lu ZG93ZnVuY19leHByX2hlbHBlcigoV2luZG93RnVuYyAqKSBjdG9yLT5mdW5jLCBjb250ZXh0LAog CQkJCQkJCQkgICBmdW5jbmFtZSwgb3B0aW9ucy5kYXRhLAogCQkJCQkJCQkgICBpc19qc29uX29i amVjdGFnZyk7CisJZWxzZSBpZiAoSXNBKGN0b3ItPmZ1bmMsIFZhcikpCisJeworCQkvKgorCQkg KiBJZiB0aGUgYWdncmVnYXRlIGlzIGNvbXB1dGVkIGJ5IGEgbG93ZXIgcGxhbiBub2RlLCBzZXRy ZWZzLmMgd2lsbAorCQkgKiBoYXZlIHJlcGxhY2VkIHRoZSBBZ2dyZWYgb3IgV2luZG93RnVuYyB3 aXRoIGEgVmFyIHJlZmVyZW5jaW5nIHRoYXQKKwkJICogbm9kZSdzIG91dHB1dC4gIEp1c3QgcHJp bnQgdGhlIFZhci4KKwkJICovCisJCSh2b2lkKSBnZXRfdmFyaWFibGUoKFZhciAqKSBjdG9yLT5m dW5jLCAwLCBmYWxzZSwgY29udGV4dCk7CisJfQogCWVsc2UKIAkJZWxvZyhFUlJPUiwgImludmFs aWQgSnNvbkNvbnN0cnVjdG9yRXhwciB1bmRlcmx5aW5nIG5vZGUgdHlwZTogJWQiLAogCQkJIG5v ZGVUYWcoY3Rvci0+ZnVuYykpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zcWxqc29uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQKaW5k ZXggMGYzMzdiZGEzMjUuLjNlNWEwNTA4YWIwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3NxbGpzb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Fs anNvbi5vdXQKQEAgLTE3NTcsMyArMTc1Nyw5OCBAQCBTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2EnOiBK U09OX09CSkVDVEFHRygnYic6IDEgUkVUVVJOSU5HIHRleHQpIEZPUk1BVCBKU09OKTsKICgxIHJv dykKIAogRFJPUCBGVU5DVElPTiB2b2xhdGlsZV9vbmUsIHN0YWJsZV9vbmU7CistLSBUZXN0IGRl cGFyc2luZyBvZiBhIEpTT04gYWdncmVnYXRlIHRoYXQgaXMgY29tcHV0ZWQgYmVsb3cgYSBXaW5k b3dBZ2cKKy0tIG5vZGUuCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgaSAl IDIgQVMgZywKKwlKU09OX0FSUkFZQUdHKGkgUkVUVVJOSU5HIGpzb25iKSBBUyBqYSwKKwlKU09O X09CSkVDVEFHRyhpOiBpIFJFVFVSTklORyBqc29uYikgQVMgam8sCisJcm93X251bWJlcigpIE9W RVIgKE9SREVSIEJZIGkgJSAyKSBBUyBybgorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgaQor R1JPVVAgQlkgaSAlIDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIE91dHB1dDog KChpICUgMikpLCAoanNvbmJfYWdnX3N0cmljdChpKSksIChqc29uYl9vYmplY3RfYWdnKGksIGkp KSwgcm93X251bWJlcigpIE9WRVIgdzEKKyAgIFdpbmRvdzogdzEgQVMgKE9SREVSIEJZICgoaS5p ICUgMikpIFJPV1MgVU5CT1VOREVEIFBSRUNFRElORykKKyAgIC0+ICBHcm91cEFnZ3JlZ2F0ZQor ICAgICAgICAgT3V0cHV0OiAoKGkgJSAyKSksIGpzb25iX2FnZ19zdHJpY3QoaSksIGpzb25iX29i amVjdF9hZ2coaSwgaSkKKyAgICAgICAgIEdyb3VwIEtleTogKChpLmkgJSAyKSkKKyAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICBPdXRwdXQ6ICgoaSAlIDIpKSwgaQorICAgICAgICAg ICAgICAgU29ydCBLZXk6ICgoaS5pICUgMikpCisgICAgICAgICAgICAgICAtPiAgRnVuY3Rpb24g U2NhbiBvbiBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcyBpCisgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IChpICUgMiksIGkKKyAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIENhbGw6 IGdlbmVyYXRlX3NlcmllcygxLCAzKQorKDEyIHJvd3MpCisKK1NFTEVDVCBpICUgMiBBUyBnLAor CUpTT05fQVJSQVlBR0coaSBSRVRVUk5JTkcganNvbmIpIEFTIGphLAorCUpTT05fT0JKRUNUQUdH KGk6IGkgUkVUVVJOSU5HIGpzb25iKSBBUyBqbywKKwlyb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIg QlkgaSAlIDIpIEFTIHJuCitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAzKSBpCitHUk9VUCBCWSBp ICUgMjsKKyBnIHwgICBqYSAgIHwgICAgICAgIGpvICAgICAgICB8IHJuIAorLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tCisgMCB8IFsyXSAgICB8IHsiMiI6IDJ9ICAgICAgICAg fCAgMQorIDEgfCBbMSwgM10gfCB7IjEiOiAxLCAiMyI6IDN9IHwgIDIKKygyIHJvd3MpCisKKy0t IFRoZSBzYW1lLCBidXQgd2l0aCB0aGUgSlNPTiBhZ2dyZWdhdGUgdXNlZCBhcyBhIHdpbmRvdyBm dW5jdGlvbiB0aGF0IGlzCistLSBjb21wdXRlZCBiZWxvdyBhbm90aGVyIFdpbmRvd0FnZyBub2Rl LgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIEpTT05fQVJSQVlBR0coaSBS RVRVUk5JTkcganNvbmIpIE9WRVIgKE9SREVSIEJZIGkgREVTQykgQVMgamEsCisJcm93X251bWJl cigpIE9WRVIgKE9SREVSIEJZIGkpIEFTIHJuCitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAzKSBp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICBPdXRwdXQ6 IChqc29uYl9hZ2dfc3RyaWN0KGkpIE9WRVIgdzEpLCByb3dfbnVtYmVyKCkgT1ZFUiB3MiwgaQor ICAgV2luZG93OiB3MiBBUyAoT1JERVIgQlkgaS5pIFJPV1MgVU5CT1VOREVEIFBSRUNFRElORykK KyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IGksIChqc29uYl9hZ2dfc3RyaWN0KGkpIE9W RVIgdzEpCisgICAgICAgICBTb3J0IEtleTogaS5pCisgICAgICAgICAtPiAgV2luZG93QWdnCisg ICAgICAgICAgICAgICBPdXRwdXQ6IGksIGpzb25iX2FnZ19zdHJpY3QoaSkgT1ZFUiB3MQorICAg ICAgICAgICAgICAgV2luZG93OiB3MSBBUyAoT1JERVIgQlkgaS5pKQorICAgICAgICAgICAgICAg LT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogaQorICAgICAgICAgICAgICAg ICAgICAgU29ydCBLZXk6IGkuaSBERVNDCisgICAgICAgICAgICAgICAgICAgICAtPiAgRnVuY3Rp b24gU2NhbiBvbiBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcyBpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9u IENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCAzKQorKDE1IHJvd3MpCisKK1NFTEVDVCBKU09OX0FS UkFZQUdHKGkgUkVUVVJOSU5HIGpzb25iKSBPVkVSIChPUkRFUiBCWSBpIERFU0MpIEFTIGphLAor CXJvd19udW1iZXIoKSBPVkVSIChPUkRFUiBCWSBpKSBBUyBybgorRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMykgaTsKKyAgICBqYSAgICAgfCBybiAKKy0tLS0tLS0tLS0tKy0tLS0KKyBbMywgMiwg MV0gfCAgMQorIFszLCAyXSAgICB8ICAyCisgWzNdICAgICAgIHwgIDMKKygzIHJvd3MpCisKKy0t IFRoZSBzYW1lLCBidXQgd2l0aCB0aGUgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSBKU09OIGFn Z3JlZ2F0ZSBwb3N0cG9uZWQKKy0tIHRvIGFib3ZlIHRoZSBmaW5hbCBzb3J0IGR1ZSB0byBiZWlu ZyB2b2xhdGlsZS4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBpICUgMiBB UyBnLAorICAgICAgIEpTT05fQVJSQVlBR0coaSBSRVRVUk5JTkcganNvbmIpIHx8IHRvX2pzb25i KHJhbmRvbSgpKSBBUyBqYQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgaQorR1JPVVAgQlkg aSAlIDIKK09SREVSIEJZIGNvdW50KCopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPdXRwdXQ6ICgoaSAlIDIpKSwgKChqc29u Yl9hZ2dfc3RyaWN0KGkpKSB8fCB0b19qc29uYihyYW5kb20oKSkpLCAoY291bnQoKikpCisgICAt PiAgU29ydAorICAgICAgICAgT3V0cHV0OiAoKGkgJSAyKSksIChjb3VudCgqKSksIChqc29uYl9h Z2dfc3RyaWN0KGkpKQorICAgICAgICAgU29ydCBLZXk6IChjb3VudCgqKSkKKyAgICAgICAgIC0+ ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6ICgoaSAlIDIpKSwgY291bnQo KiksIGpzb25iX2FnZ19zdHJpY3QoaSkKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogKGkuaSAl IDIpCisgICAgICAgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9nLmdlbmVy YXRlX3NlcmllcyBpCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IChpICUgMiksIGkKKyAg ICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCAzKQor KDExIHJvd3MpCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwKaW5kZXggYTY4NzQ3NzMzYTEuLjNh NjY2ZWNhMTI4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uLnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uLnNxbApAQCAtNzA2LDMgKzcwNiwzOCBA QCBTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2EnOiBKU09OX09CSkVDVEFHRygnYic6IHN0YWJsZV9vbmUo KSBSRVRVUk5JTkcgdGV4dCkgRk9STUFUCiBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNF TEVDVCBKU09OX09CSkVDVCgnYSc6IEpTT05fT0JKRUNUQUdHKCdiJzogMSBSRVRVUk5JTkcgdGV4 dCkgRk9STUFUIEpTT04pOwogU0VMRUNUIEpTT05fT0JKRUNUKCdhJzogSlNPTl9PQkpFQ1RBR0co J2InOiAxIFJFVFVSTklORyB0ZXh0KSBGT1JNQVQgSlNPTik7CiBEUk9QIEZVTkNUSU9OIHZvbGF0 aWxlX29uZSwgc3RhYmxlX29uZTsKKworLS0gVGVzdCBkZXBhcnNpbmcgb2YgYSBKU09OIGFnZ3Jl Z2F0ZSB0aGF0IGlzIGNvbXB1dGVkIGJlbG93IGEgV2luZG93QWdnCistLSBub2RlLgorRVhQTEFJ TiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIGkgJSAyIEFTIGcsCisJSlNPTl9BUlJBWUFH RyhpIFJFVFVSTklORyBqc29uYikgQVMgamEsCisJSlNPTl9PQkpFQ1RBR0coaTogaSBSRVRVUk5J TkcganNvbmIpIEFTIGpvLAorCXJvd19udW1iZXIoKSBPVkVSIChPUkRFUiBCWSBpICUgMikgQVMg cm4KK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGkKK0dST1VQIEJZIGkgJSAyOworU0VMRUNU IGkgJSAyIEFTIGcsCisJSlNPTl9BUlJBWUFHRyhpIFJFVFVSTklORyBqc29uYikgQVMgamEsCisJ SlNPTl9PQkpFQ1RBR0coaTogaSBSRVRVUk5JTkcganNvbmIpIEFTIGpvLAorCXJvd19udW1iZXIo KSBPVkVSIChPUkRFUiBCWSBpICUgMikgQVMgcm4KK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMp IGkKK0dST1VQIEJZIGkgJSAyOworCistLSBUaGUgc2FtZSwgYnV0IHdpdGggdGhlIEpTT04gYWdn cmVnYXRlIHVzZWQgYXMgYSB3aW5kb3cgZnVuY3Rpb24gdGhhdCBpcworLS0gY29tcHV0ZWQgYmVs b3cgYW5vdGhlciBXaW5kb3dBZ2cgbm9kZS4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCBKU09OX0FSUkFZQUdHKGkgUkVUVVJOSU5HIGpzb25iKSBPVkVSIChPUkRFUiBCWSBp IERFU0MpIEFTIGphLAorCXJvd19udW1iZXIoKSBPVkVSIChPUkRFUiBCWSBpKSBBUyBybgorRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgaTsKK1NFTEVDVCBKU09OX0FSUkFZQUdHKGkgUkVUVVJO SU5HIGpzb25iKSBPVkVSIChPUkRFUiBCWSBpIERFU0MpIEFTIGphLAorCXJvd19udW1iZXIoKSBP VkVSIChPUkRFUiBCWSBpKSBBUyBybgorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgaTsKKwor LS0gVGhlIHNhbWUsIGJ1dCB3aXRoIHRoZSBleHByZXNzaW9uIGNvbnRhaW5pbmcgdGhlIEpTT04g YWdncmVnYXRlIHBvc3Rwb25lZAorLS0gdG8gYWJvdmUgdGhlIGZpbmFsIHNvcnQgZHVlIHRvIGJl aW5nIHZvbGF0aWxlLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIGkgJSAy IEFTIGcsCisgICAgICAgSlNPTl9BUlJBWUFHRyhpIFJFVFVSTklORyBqc29uYikgfHwgdG9fanNv bmIocmFuZG9tKCkpIEFTIGphCitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAzKSBpCitHUk9VUCBC WSBpICUgMgorT1JERVIgQlkgY291bnQoKik7Ci0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --000000000000a9b7a80655ac37a4--