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 1wF4y0-004iyU-0Q for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Apr 2026 06:52:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wF4xz-006wQu-0N for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Apr 2026 06:52:15 +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 1wF4xy-006wQl-1p for pgsql-hackers@lists.postgresql.org; Tue, 21 Apr 2026 06:52:14 +0000 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wF4xv-000000022ny-3pBT for pgsql-hackers@lists.postgresql.org; Tue, 21 Apr 2026 06:52:13 +0000 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-488ad135063so31345845e9.0 for ; Mon, 20 Apr 2026 23:52:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776754329; cv=none; d=google.com; s=arc-20240605; b=ETI48//4fJ7ZX8nak3vzVWL6uXLiYprC5Xd51eZLlJtzofvr/A9FBPosmjV2IqdB1S AMBTowMefpQWscTcjrUfzWzNwbAe5q7e2QLdUShAGE2aPQ9jYEG6gA+rtPb9kKzJNhNB f1jpG7fJwhawzuwvQxiPAel3tk1a4qbmh4BQskpoftIVcS1xGx5CR/eJduL2SDYKNa/Z Oyi0L7iFUXJLulxVd9IPY7Gk2LCNytPJ4ZV7PdZ8GePhrK+oxRNxLeBHn2qZ+vs6IfCp w+DxQKv7EZxpbNXro9oyZd2fuIpEX3PzNABVo35JwoblkV98kFlDliblGJarGdPqz7od rglA== 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=SaGaYTfG/T2br40SCTEjnXYyj6BZHZocXyIF2nm1NT8=; fh=PDhzRmLFhJQgKl2kpY6iqaoiggk+rKjB8rXL7ERgOws=; b=h4cB6GB+X21z+h0AoIKa9lGBNSP8kkMscnsVP1dtBYby63mAf/xrH0+26tHCecAozE bHzFvAlGXlA4fXYQHMQ11l2TCyoaB+S3D+Cgjv3X7J8TvcNyIs57O5ABBQafTGwsI8Qq xY0yfOUfZL2PPYMa1osT84dI+kjx3XUtFaeztiw967XAbCfAKY7t36VUcqDNk/Zu9Aew BnKJzauui2uGjLn47QiV4k2Owtrm86z1J21NoVE1WJqXetXxvrybGxX3ZfTwYFfP9eJQ II/om2amFnOclndjvnQ4Bzj49UI8rJdqCwTQuPC8LjGiNXnuKb5PG8XYkKauqdZJ6UHu emyg==; 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=1776754329; x=1777359129; 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=SaGaYTfG/T2br40SCTEjnXYyj6BZHZocXyIF2nm1NT8=; b=mUSlfpKFqQ9NFI0r2K2L1pIYGov1sFyFPX2IpQTtLVsYXDZcs4Bha+jVVFpQIJBtf5 mTQlfvNx2Ehxm9D/lYfsO21XCNIUT2vAQCFlQLqc2MLYfCcZYK9HDMcmks6GhoWs84qY edJJrTH5NpiykxNpTurnfBqj3CG1yWap2j8WJt2ak87sXahpNSPVmiEsK6BErcKUXP1G 7BM1sB9zvSFEByfIqOkO2ZmHezLZJwvjJ11TXC9T4gajFHDCGnKv6Y1d793PYH8EMp72 zfYqCg1ebVsAh9h4ctKXDEhBPbLn62zKgiJGvgDmpOmA4Y8RXefYhYSVXqMQVLwfXi26 I6DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776754329; x=1777359129; 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=SaGaYTfG/T2br40SCTEjnXYyj6BZHZocXyIF2nm1NT8=; b=HLdijoYt6PYPTlEw3doayk1TeenUqM8m4uAvFtsgsFu4KAS4l6dkwqaMsXzA2k1SUp B774Tn7Z6E+TYslfK1wushSEwzXpUld8o++321++lvfUXcWAnp099Oc2Rx0EnNZm1hP8 pe1//Im/yKr6Kiw3kUcwx8ipbt37smGo55+0eeIzkXyggHjJFtj4MatdVuaq07SQBoDj reymX7TjWW9/L203YOgoTbWx3VVwTv+idmpqKpNGH6/IqSTJV1wWL2fNu/kCJTZOADx9 oqg/F1wcGgSRzpriAkdmDQ3Su2o2x0LiOq6GHaBL45vq6SG4PuendHv6a6ZekpiXvqOG bP9g== X-Gm-Message-State: AOJu0Yz7U7udlGQSsm4KnZu/c3lJSKck4jpJaFoHosAKSUjj5g2QEsXO hPdjq5rkk6wyVjpYL5SOR5+jRHq3i4MQu06LtvKeDAV8s7lfVPmH++xvRF8FYqPd5husHR/osb4 zM9fdGjj3bQBCLRoBo9s5ciNDbE7pZmj0tg== X-Gm-Gg: AeBDievh+uSHtSKmIjJSG4YDCA38nUIWY5NLK+PuRMxm/7sYRFBHcRZVTTzSGX8ODpz YD7xqntqq9MJ42zd8cJ7vi9fmMyqq1pAZf6FEgxKVimTcZF899kgbLm14bkegp15FUJ7r0U7PR7 YGCC0bNArruVRiTDcF4f+cmO8Ur9KNHQcjkm3uE2pum/7Ly8FQWIpAkqph8E/txD5d7sA6WzWBZ 1iyRci6Hk+eajUx8BiPnJFSTsbbYJNTA/lVp+TvBHqnzHXTYB5NA4hlLfejbLh/tq0wLZuSAbeq gINy51piEVXIwRTjFTH8k8XQ4dx986z/EiKMvZLbfI3tSlpYYMqIbKJjo7aqS1g= X-Received: by 2002:a05:600c:8587:b0:485:3f30:6250 with SMTP id 5b1f17b1804b1-488fb7856b9mr174582045e9.20.1776754328921; Mon, 20 Apr 2026 23:52:08 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ashutosh Bapat Date: Tue, 21 Apr 2026 12:21:56 +0530 X-Gm-Features: AQROBzDy_PqQ3AJJGSaINE4uwUeSkZby9aBo2ISEXcd1iKGPiropL7HNLQbi2rs Message-ID: Subject: Re: Bug: pg_get_viewdef() fails on GRAPH_TABLE views with lateral column references To: SATYANARAYANA NARLAPURAM Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000a10409064ff2da36" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a10409064ff2da36 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Apr 18, 2026 at 1:26=E2=80=AFPM SATYANARAYANA NARLAPURAM wrote: > > Hi hackers, > > pg_get_viewdef() fails with ERROR: bogus varlevelsup: 0 offset 0 for any > view containing a GRAPH_TABLE whose COLUMNS clause references an outer (l= ateral) > table. This also breaks pg_dump and \d+ for any database containing such = a > view. > > Repro: > > CREATE TABLE vtab (id int PRIMARY KEY, name text); > CREATE TABLE etab (eid int PRIMARY KEY, > src int REFERENCES vtab(id), dst int REFERENCES vtab(id)); > CREATE PROPERTY GRAPH g1 > VERTEX TABLES (vtab) > EDGE TABLES (etab KEY (eid) > SOURCE KEY (src) REFERENCES vtab(id) > DESTINATION KEY (dst) REFERENCES vtab(id)); > CREATE TABLE outer_t (val int); > > CREATE VIEW v AS > SELECT * FROM outer_t, > GRAPH_TABLE (g1 MATCH (a IS vtab) > COLUMNS (a.name AS src_name, outer_t.val AS oval)); > > pg_dump -d foo -p 5433 > pg_dump: error: query failed: ERROR: bogus varlevelsup: 0 offset 0 > pg_dump: detail: Query was: SELECT pg_catalog.pg_get_viewdef('173849'::pg= _catalog.oid) AS viewdef > > Problem: > deparse_context context variable declared in the case RTE_GRAPH_TABLE sha= dows the function's > deparse_context *context parameter. The zeroed struct has namespaces =3D = NIL, so when get_rule_expr() > reaches a Var node, get_variable() sees list_length(context->namespaces) = =3D=3D 0 and raises the error. Property > references are fine because GraphPropertyRef deparsing never touches name= spaces. > > Fix: > Remove the shadowing local variable and pass the outer context pointer to= get_rule_expr(). Attached a patch > with a fix, additionally added a test. The code doesn't explain why it adds the dummy context but it seemed intentional. But it's not used at other places like deparsing WHERE clause in element patterns or that in the graph_table itself. Since a lateral reference is allowed in COLUMNS clause as well, it doesn't make sense not to pass a context with lateral namespaces. Also there is no comment explaining the dummy context. So your fix looks good to me. I adjusted the surrounding code a bit. I adjusted an existing view for the testing instead of adding a new one with all the additional objects. Since that view definition was getting more complex, I formatted the DDL to be more readable. I also think that we should use prettyFlags to deparse all GRAPH_TABLE components in a human readable form. But that's out of the scope for this patch. PFA updated patch. --=20 Best Wishes, Ashutosh Bapat --000000000000a10409064ff2da36 Content-Type: text/x-patch; charset="US-ASCII"; name="v20260421-0001-pg_get_viewdef-and-lateral-references-in-C.patch" Content-Disposition: attachment; filename="v20260421-0001-pg_get_viewdef-and-lateral-references-in-C.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo89luv80 RnJvbSA2YjU0YjQ0MDlkZjRjZTFlOGJhNTBjNjE1ZTEwZTVjY2UzY2VhMDc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAyMSBBcHIgMjAyNiAxMTo0Mzo0MyArMDUzMApTdWJqZWN0OiBb UEFUQ0ggdjIwMjYwNDIxIDQvNF0gcGdfZ2V0X3ZpZXdkZWYoKSBhbmQgbGF0ZXJhbCByZWZlcmVu Y2VzIGluCiBDT0xVTU5TIG9mIEdSQVBIX1RBQkxFCgpFeHByZXNzaW9ucyBpbiBHUkFQSF9UQUJM RSBDT0xVTU5TIGxpc3QgbWF5IGhhdmUgbGF0ZXJhbCByZWZlcmVuY2VzLgpnZXRfcnVsZV9leHBy KCkgcmVxdWlyZXMgbGF0ZXJhbCBuYW1lc3BhY2VzIHRvIGRlcGFyc2Ugc3VjaCByZWZlcmVuY2Vz LgpnZXRfZnJvbV9jbGF1c2VfaXRlbSgpIGRvZXMgbm90IHBhc3MgdGhlbSB3aGVuIHByb2Nlc3Np bmcgdGhlCmV4cHJlc3Npb25zIGluIENPTFVNTlMgbGlzdCBjYXVzaW5nIEVSUk9SICJib2d1cyB2 YXJsZXZlbHN1cDogMCBvZmZzZXQKMCIuICBGaXggZ2V0X2Zyb21fY2xhdXNlX2l0ZW0oKSB0byBw YXNzIGlucHV0IGRlcGFyc2VfY29udGV4dCBjb250YWluaW5nCmxhdGVyYWwgbmFtZXNwYWNlcyB0 byBnZXRfcnVsZV9leHByKCkgaW5zdGVhZCBvZiB0aGUgZHVtbXkgY29udGV4dC4KClJlcG9ydGVk IEJ5OiBTQVRZQU5BUkFZQU5BIE5BUkxBUFVSQU0gPHNhdHlhbmFybGFwdXJhbUBnbWFpbC5jb20+ CkF1dGhvcjogU0FUWUFOQVJBWUFOQSBOQVJMQVBVUkFNIDxzYXR5YW5hcmxhcHVyYW1AZ21haWwu Y29tPgpSZXZpZXdlZCBCeTogQXNodXRvc2ggQmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9zc0BnbWFp bC5jb20+Ci0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAgfCAx MCArKy0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JhcGhfdGFibGUub3V0IHwg MjYgKysrKysrKysrKysrKysrKy0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyYXBoX3Rh YmxlLnNxbCAgICAgIHwgMTIgKysrKysrKysrLS0KIDMgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0 aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4 IDc4NTg3ZDIyM2NiLi5jNzgxY2RjODRkMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpA QCAtMTMwOTEsMjIgKzEzMDkxLDE2IEBAIGdldF9mcm9tX2NsYXVzZV9pdGVtKE5vZGUgKmp0bm9k ZSwgUXVlcnkgKnF1ZXJ5LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCiAJCQkJZ2V0X2dyYXBo X3BhdHRlcm5fZGVmKHJ0ZS0+Z3JhcGhfcGF0dGVybiwgY29udGV4dCk7CiAJCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICIgQ09MVU1OUyAoIik7CiAJCQkJewotCQkJCQlMaXN0Q2VsbCAg ICpsYzsKIAkJCQkJYm9vbAkJZmlyc3QgPSB0cnVlOwogCi0JCQkJCWZvcmVhY2gobGMsIHJ0ZS0+ Z3JhcGhfdGFibGVfY29sdW1ucykKKwkJCQkJZm9yZWFjaF9ub2RlKFRhcmdldEVudHJ5LCB0ZSwg cnRlLT5ncmFwaF90YWJsZV9jb2x1bW5zKQogCQkJCQl7Ci0JCQkJCQlUYXJnZXRFbnRyeSAqdGUg PSBsZmlyc3Rfbm9kZShUYXJnZXRFbnRyeSwgbGMpOwotCQkJCQkJZGVwYXJzZV9jb250ZXh0IGNv bnRleHQgPSB7MH07Ci0KIAkJCQkJCWlmICghZmlyc3QpCiAJCQkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICIsICIpOwogCQkJCQkJZWxzZQogCQkJCQkJCWZpcnN0ID0gZmFsc2U7CiAK LQkJCQkJCWNvbnRleHQuYnVmID0gYnVmOwotCi0JCQkJCQlnZXRfcnVsZV9leHByKChOb2RlICop IHRlLT5leHByLCAmY29udGV4dCwgZmFsc2UpOworCQkJCQkJZ2V0X3J1bGVfZXhwcigoTm9kZSAq KSB0ZS0+ZXhwciwgY29udGV4dCwgZmFsc2UpOwogCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICIgQVMgIik7CiAJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVf aWRlbnRpZmllcih0ZS0+cmVzbmFtZSkpOwogCQkJCQl9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2dyYXBoX3RhYmxlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvZ3JhcGhfdGFibGUub3V0CmluZGV4IDA1N2YyODNjNDNkLi4xMmI4NzA2YjVmMyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ncmFwaF90YWJsZS5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ncmFwaF90YWJsZS5vdXQKQEAgLTI2NCw3ICsyNjQsNiBA QCBTRUxFQ1QgeDEuYSwgZy4qIEZST00geDEsIEdSQVBIX1RBQkxFIChteXNob3AgTUFUQ0ggKGMg SVMgY3VzdG9tZXJzIFdIRVJFIGMuYWRkcgogRVJST1I6ICBub24tbG9jYWwgZWxlbWVudCB2YXJp YWJsZSByZWZlcmVuY2UgaXMgbm90IHN1cHBvcnRlZAogTElORSAxOiAuLi50b21lcnMgV0hFUkUg Yy5hZGRyZXNzID0gJ1VTJyBBTkQgYy5jdXN0b21lcl9pZCA9IHgxLmEpLVtJUyAuLi4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe Ci1EUk9QIFRBQkxFIHgxOwogQ1JFQVRFIFRBQkxFIHYxICgKICAgICBpZCBpbnQgUFJJTUFSWSBL RVksCiAgICAgdm5hbWUgdmFyY2hhcigxMCksCkBAIC05MjIsMTQgKzkyMSwyNSBAQCBTRUxFQ1Qg KiBGUk9NIEdSQVBIX1RBQkxFIChnNCBNQVRDSCAocyBXSEVSRSBzLmlkID0gMyktW2VdLShkKSBD T0xVTU5TIChzLnZhbCwgZQogKDIgcm93cykKIAogLS0gcnVsZXV0aWxzIHJldmVyc2UgcGFyc2lu ZwotQ1JFQVRFIFZJRVcgY3VzdG9tZXJzX3VzIEFTIFNFTEVDVCAqIEZST00gR1JBUEhfVEFCTEUg KG15c2hvcCBNQVRDSCAoYyBJUyBjdXN0b21lcnMgV0hFUkUgYy5hZGRyZXNzID0gJ1VTJyktW0lT IGN1c3RvbWVyX29yZGVycyB8IGN1c3RvbWVyX3dpc2hsaXN0cyBdLT4obCBJUyBvcmRlcnMgfCB3 aXNobGlzdHMpLVsgSVMgbGlzdF9pdGVtc10tPihwIElTIHByb2R1Y3RzKSBDT0xVTU5TIChjLm5h bWUgQVMgY3VzdG9tZXJfbmFtZSwgcC5uYW1lIEFTIHByb2R1Y3RfbmFtZSkpIE9SREVSIEJZIGN1 c3RvbWVyX25hbWUsIHByb2R1Y3RfbmFtZTsKKy0tIFRoZSBxdWVyeSBpbiB0aGUgdmlldyBkZWZp bml0aW9uIGlzIGludGVudGlvbmFsbHkgY29tcGxleCB0byB0ZXN0IG9uZSB2aWV3IHdpdGggbWFu eQorLS0gZmVhdHVyZXMgbGlrZSBsYWJlbCBkaXNqdW5jdGlvbiwgbGF0ZXJhbCByZWZlcmVuY2Vz LCBXSEVSRSBjbGF1c2VzIGluIGdyYXBoCistLSBwYXR0ZXJucy4KK0NSRUFURSBWSUVXIGN1c3Rv bWVyc191cyBBUworU0VMRUNUIGcuKiBGUk9NIHgxLAorICAgICAgICAgICAgICAgIEdSQVBIX1RB QkxFIChteXNob3AgTUFUQ0ggKGMgSVMgY3VzdG9tZXJzIFdIRVJFIGMuYWRkcmVzcyA9ICdVUycg QU5EIGMuY3VzdG9tZXJfaWQgPSB4MS5hKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLVtJUyBjdXN0b21lcl9vcmRlcnMgfCBjdXN0b21lcl93aXNobGlzdHMgXS0+ CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCBJUyBvcmRlcnMg fCB3aXNobGlzdHMpLVsgSVMgbGlzdF9pdGVtc10tPihwIElTIHByb2R1Y3RzKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25h bWUsIHAubmFtZSBBUyBwcm9kdWN0X25hbWUsIHgxLmEgQVMgYSkpIGcKKyAgICAgICAgICAgT1JE RVIgQlkgY3VzdG9tZXJfbmFtZSwgcHJvZHVjdF9uYW1lOwogU0VMRUNUIHBnX2dldF92aWV3ZGVm KCdjdXN0b21lcnNfdXMnOjpyZWdjbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdmlld2RlZiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSAgU0VMRUNUIGN1c3RvbWVyX25hbWUsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHByb2R1Y3RfbmFtZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwotICAgIEZST00gR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJUyBjdXN0b21lcnMgV0hF UkUgKChjLmFkZHJlc3MpOjp0ZXh0ID0gJ1VTJzo6dGV4dCkpLVtJUyBjdXN0b21lcl9vcmRlcnN8 Y3VzdG9tZXJfd2lzaGxpc3RzXS0+KGwgSVMgb3JkZXJzfHdpc2hsaXN0cyktW0lTIGxpc3RfaXRl bXNdLT4ocCBJUyBwcm9kdWN0cykgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25hbWUsIHAu bmFtZSBBUyBwcm9kdWN0X25hbWUpKSsKLSAgIE9SREVSIEJZIGN1c3RvbWVyX25hbWUsIHByb2R1 Y3RfbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdmlld2RlZiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgU0VMRUNUIGcuY3VzdG9tZXJfbmFtZSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgZy5wcm9kdWN0X25hbWUsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsKKyAgICAgZy5hICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKKyAgICBGUk9NIHgxLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRD SCAoYyBJUyBjdXN0b21lcnMgV0hFUkUgKCgoYy5hZGRyZXNzKTo6dGV4dCA9ICdVUyc6OnRleHQp IEFORCAoYy5jdXN0b21lcl9pZCA9IHgxLmEpKSktW0lTIGN1c3RvbWVyX29yZGVyc3xjdXN0b21l cl93aXNobGlzdHNdLT4obCBJUyBvcmRlcnN8d2lzaGxpc3RzKS1bSVMgbGlzdF9pdGVtc10tPihw IElTIHByb2R1Y3RzKSBDT0xVTU5TIChjLm5hbWUgQVMgY3VzdG9tZXJfbmFtZSwgcC5uYW1lIEFT IHByb2R1Y3RfbmFtZSwgeDEuYSBBUyBhKSkgZysKKyAgIE9SREVSIEJZIGcuY3VzdG9tZXJfbmFt ZSwgZy5wcm9kdWN0X25hbWU7CiAoMSByb3cpCiAKIC0tIHRlc3Qgdmlldy9ncmFwaCBuZXN0aW5n CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ncmFwaF90YWJsZS5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9ncmFwaF90YWJsZS5zcWwKaW5kZXggMjc4MDY0ODE4ZmYuLmE1ZGY0 NjQ3YjZhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ncmFwaF90YWJsZS5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JhcGhfdGFibGUuc3FsCkBAIC0xNjIsNyArMTYy LDYgQEAgU0VMRUNUIHgxLmEsIGcuKiBGUk9NIHgxLCBHUkFQSF9UQUJMRSAobXlzaG9wIE1BVENI ICh4MSBJUyBjdXN0b21lcnMgV0hFUkUgeDEuYWQKIC0tIHJlZmVyZW5jZSBpcyBhdmFpbGFibGUK IFNFTEVDVCB4MS5hLCBnLiogRlJPTSB4MSwgR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoeDEg SVMgY3VzdG9tZXJzKS1bSVMgY3VzdG9tZXJfb3JkZXJzXS0+KG8gSVMgb3JkZXJzIFdIRVJFIG8u b3JkZXJfaWQgPSB4MS5hKSBDT0xVTU5TICh4MS5uYW1lIEFTIGN1c3RvbWVyX25hbWUsIHgxLmN1 c3RvbWVyX2lkIEFTIGNpZCwgby5vcmRlcl9pZCkpIGc7IC0tIGVycm9yCiBTRUxFQ1QgeDEuYSwg Zy4qIEZST00geDEsIEdSQVBIX1RBQkxFIChteXNob3AgTUFUQ0ggKGMgSVMgY3VzdG9tZXJzIFdI RVJFIGMuYWRkcmVzcyA9ICdVUycgQU5EIGMuY3VzdG9tZXJfaWQgPSB4MS5hKS1bSVMgY3VzdG9t ZXJfb3JkZXJzXS0+KHgxIElTIG9yZGVycykgQ09MVU1OUyAoYy5uYW1lIEFTIGN1c3RvbWVyX25h bWUsIGMuY3VzdG9tZXJfaWQgQVMgY2lkLCB4MS5vcmRlcl9pZCkpIGc7IC0tIGVycm9yCi1EUk9Q IFRBQkxFIHgxOwogCiBDUkVBVEUgVEFCTEUgdjEgKAogICAgIGlkIGludCBQUklNQVJZIEtFWSwK QEAgLTUyNSw3ICs1MjQsMTYgQEAgU0VMRUNUICogRlJPTSBHUkFQSF9UQUJMRSAoZzQgTUFUQ0gg KHMpLVtlXS0oZCkgV0hFUkUgcy5pZCA9IDMgQ09MVU1OUyAocy52YWwsIGUKIFNFTEVDVCAqIEZS T00gR1JBUEhfVEFCTEUgKGc0IE1BVENIIChzIFdIRVJFIHMuaWQgPSAzKS1bZV0tKGQpIENPTFVN TlMgKHMudmFsLCBlLnZhbCwgZC52YWwpKSBPUkRFUiBCWSAxLCAyLCAzOwogCiAtLSBydWxldXRp bHMgcmV2ZXJzZSBwYXJzaW5nCi1DUkVBVEUgVklFVyBjdXN0b21lcnNfdXMgQVMgU0VMRUNUICog RlJPTSBHUkFQSF9UQUJMRSAobXlzaG9wIE1BVENIIChjIElTIGN1c3RvbWVycyBXSEVSRSBjLmFk ZHJlc3MgPSAnVVMnKS1bSVMgY3VzdG9tZXJfb3JkZXJzIHwgY3VzdG9tZXJfd2lzaGxpc3RzIF0t PihsIElTIG9yZGVycyB8IHdpc2hsaXN0cyktWyBJUyBsaXN0X2l0ZW1zXS0+KHAgSVMgcHJvZHVj dHMpIENPTFVNTlMgKGMubmFtZSBBUyBjdXN0b21lcl9uYW1lLCBwLm5hbWUgQVMgcHJvZHVjdF9u YW1lKSkgT1JERVIgQlkgY3VzdG9tZXJfbmFtZSwgcHJvZHVjdF9uYW1lOworLS0gVGhlIHF1ZXJ5 IGluIHRoZSB2aWV3IGRlZmluaXRpb24gaXMgaW50ZW50aW9uYWxseSBjb21wbGV4IHRvIHRlc3Qg b25lIHZpZXcgd2l0aCBtYW55CistLSBmZWF0dXJlcyBsaWtlIGxhYmVsIGRpc2p1bmN0aW9uLCBs YXRlcmFsIHJlZmVyZW5jZXMsIFdIRVJFIGNsYXVzZXMgaW4gZ3JhcGgKKy0tIHBhdHRlcm5zLgor Q1JFQVRFIFZJRVcgY3VzdG9tZXJzX3VzIEFTCitTRUxFQ1QgZy4qIEZST00geDEsCisgICAgICAg ICAgICAgICAgR1JBUEhfVEFCTEUgKG15c2hvcCBNQVRDSCAoYyBJUyBjdXN0b21lcnMgV0hFUkUg Yy5hZGRyZXNzID0gJ1VTJyBBTkQgYy5jdXN0b21lcl9pZCA9IHgxLmEpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtW0lTIGN1c3RvbWVyX29yZGVycyB8IGN1c3Rv bWVyX3dpc2hsaXN0cyBdLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsIElTIG9yZGVycyB8IHdpc2hsaXN0cyktWyBJUyBsaXN0X2l0ZW1zXS0+KHAgSVMgcHJv ZHVjdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0xVTU5TIChjLm5h bWUgQVMgY3VzdG9tZXJfbmFtZSwgcC5uYW1lIEFTIHByb2R1Y3RfbmFtZSwgeDEuYSBBUyBhKSkg ZworICAgICAgICAgICBPUkRFUiBCWSBjdXN0b21lcl9uYW1lLCBwcm9kdWN0X25hbWU7CiBTRUxF Q1QgcGdfZ2V0X3ZpZXdkZWYoJ2N1c3RvbWVyc191cyc6OnJlZ2NsYXNzKTsKIAogLS0gdGVzdCB2 aWV3L2dyYXBoIG5lc3RpbmcKLS0gCjIuMzQuMQoK --000000000000a10409064ff2da36--