Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tWaek-0007vA-5h for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Jan 2025 12:31:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tWadj-008ujN-E3 for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Jan 2025 12:30:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tWadi-008uj8-VS for pgsql-hackers@lists.postgresql.org; Sat, 11 Jan 2025 12:30:54 +0000 Received: from mail-io1-xd2e.google.com ([2607:f8b0:4864:20::d2e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tWadf-0014WL-0t for pgsql-hackers@postgresql.org; Sat, 11 Jan 2025 12:30:54 +0000 Received: by mail-io1-xd2e.google.com with SMTP id ca18e2360f4ac-844ee15d6f4so218756739f.1 for ; Sat, 11 Jan 2025 04:30:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736598649; x=1737203449; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=6zszzs2OXud0CacVR+gTp2Q0RsIYK4xXr08MKNDW3Qg=; b=k7CmWZ/ZG003QyiZdl1BycVCuNvre8DqnGRDhpmk4W9DoLgyLMZqUvUXeUnuun2hhk gnA1Tlyxp8R3nuAWl8paNLeZAjtPedtDbBJsUUxfc0LR1LUc7TjIocQz99ALhsblMvvd 3hRjv0VKYcBoBiDvqErRNyUaChYq2tI+nXdLin9WvKP+2+REbjDKCxIfYkILbd+aebYp DS9U11vz8wHbM4w5I9942kOy61MqPIp4vsBg5Xndq6GF+WwknJP9FS1ICAYpW4UIufOa F5FXGb4dsPiXul1eyKqqJqEk3Xwcg5dLJPxB6GhyiVtyfd46mhNXJdtbaezMDWsRBzBV zXCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736598649; x=1737203449; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=6zszzs2OXud0CacVR+gTp2Q0RsIYK4xXr08MKNDW3Qg=; b=PilwPWgOZ/ktsWbvlwVV+oJDElnDbK6HgVBW4t2dNx+kwtaEXrRNNeGVB5jw1OyQkx JsxJiXWobLa68PxAPNy4LaPt6W+5GT39Nkzp04FrHraDW9C43dyEm7hvWNLGIZ0LVxvc P2Gd+PY2GMwS2CCHXJ1XURplFFfuG//9tVd5iLkmV+Hm5EhFX3eHgHar+f3l4O0HT7QF Ym39aCUejD0P5fB0Winib2hlcK36AaX+rS1hBJai/P2N4LSZgLPo1gfSCcRe6r2OGgw/ h4ID8cw2qsqWyTEO0Ns2XzQQ7DegvzgNMWZkmrFrdlYQ622clhv/YwO8Q+YCHn2Vq+52 P/Lg== X-Gm-Message-State: AOJu0Yx0WwpZMkRvxv8h634l/j+aQ9iyE1LX4QORRSGSIa/exbmrookK 9OxDKwpmD+xQLZ7pPyxjmfF0JTtl2B5Jy+H8KFeqFdN/E7tC6Nf/c9paZrbxdc5uj/noAp6BbC0 Jx+OPUp755me56h5Q5JZHd5Ocj81+nABY X-Gm-Gg: ASbGncvDURR/p1sLxFCXYlBxlS+PhSrKSE1OJWnLfVtwOjFi+pelLLRnyRLrwv7NqhK o4h0ZuKivfy8fnmHbZ9RnD6p8phomn1pqPexY87YLhTT1cn5h8E1/QJLTWjlmyF42l8hK2mz2 X-Google-Smtp-Source: AGHT+IHQoBKc9e3LLmKnl/tJk9Puff1GKD5HfSnfzhI7jIQrghyvNoL8TNmAVe/96fTcQ5moTDf8AbkikpAbBeM7hqI= X-Received: by 2002:a05:6602:6a88:b0:841:9b5c:cfb3 with SMTP id ca18e2360f4ac-84ce016a840mr1084387139f.10.1736598649558; Sat, 11 Jan 2025 04:30:49 -0800 (PST) MIME-Version: 1.0 From: Dean Rasheed Date: Sat, 11 Jan 2025 12:30:38 +0000 X-Gm-Features: AbW1kvbeeL2bJ1NDo9qAE4bE4KWf-VaM00Qd5w4FPDMnTP97yNuI_p-QwU4SS-s Message-ID: Subject: Missing quotes when deparsing XMLTABLE() and SQL/JSON query functions To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000a000bb062b6d61f2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a000bb062b6d61f2 Content-Type: text/plain; charset="UTF-8" While looking over ruleutils.c, I noticed a couple of places that fail to properly quote certain outputs: 1. XML namespace names in XMLTABLE(). 2. variable names in the PASSING clause of the SQL/JSON query functions JSON_EXISTS(), JSON_QUERY(), and JSON_VALUE() (but not JSON_TABLE(), which has similar code that does quote variable names properly). I scanned the rest of ruleutils.c, and didn't find any other issues. Regards, Dean --000000000000a000bb062b6d61f2 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Fix-XMLTABLE-deparsing-to-quote-namespace-names-i.patch" Content-Disposition: attachment; filename="v1-0001-Fix-XMLTABLE-deparsing-to-quote-namespace-names-i.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5s5qiio0 RnJvbSA4NjhlYTAwM2E1NGFkZWVhZTQ3MDQwNzMyMWZlNDQ4MWM5NWRmY2NiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEZWFuIFJhc2hlZWQgPGRlYW4uYS5yYXNoZWVkQGdtYWlsLmNv bT4KRGF0ZTogU2F0LCAxMSBKYW4gMjAyNSAxMTowODo1MCArMDAwMApTdWJqZWN0OiBbUEFUQ0gg djEgMS8yXSBGaXggWE1MVEFCTEUoKSBkZXBhcnNpbmcgdG8gcXVvdGUgbmFtZXNwYWNlIG5hbWVz IGlmCiBuZWNlc3NhcnkuCgpXaGVuIGRlcGFyc2luZyBhbiBYTUxUQUJMRSgpIGV4cHJlc3Npb24s IFhNTCBuYW1lc3BhY2UgbmFtZXMgd2VyZSBub3QKcXVvdGVkLiBIb3dldmVyLCBzaW5jZSB0aGV5 IGFyZSBwYXJzZWQgYXMgQ29sTGFiZWwgdG9rZW5zLCBzb21lIG5hbWVzCnJlcXVpcmUgZG91Ymxl IHF1b3RlcyB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBwcm9wZXJseSBpbnRlcnByZXRlZC4KRml4 IGJ5IHVzaW5nIHF1b3RlX2lkZW50aWZpZXIoKSBpbiB0aGUgZGVwYXJzaW5nIGNvZGUuCgpCYWNr LXBhdGNoIHRvIGFsbCBzdXBwb3J0ZWQgdmVyc2lvbnMuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jIHwgIDMgKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3htbC5v dXQgfCAxMCArKysrKysrLS0tCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC94bWwuc3FsICAgICAgfCAg OCArKysrKy0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCAxNmQxNWY5ZWZiLi5iOTM1ODY4 NzE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0xMTgxNCw3ICsxMTgxNCw4IEBA IGdldF94bWx0YWJsZShUYWJsZUZ1bmMgKnRmLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJv b2wgc2hvd2ltcGxpY2l0KQogCQkJaWYgKG5zX25vZGUgIT0gTlVMTCkKIAkJCXsKIAkJCQlnZXRf cnVsZV9leHByKGV4cHIsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7Ci0JCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIgQVMgJXMiLCBzdHJWYWwobnNfbm9kZSkpOworCQkJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiIEFTICVzIiwKKwkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoc3RyVmFsKG5zX25v ZGUpKSk7CiAJCQl9CiAJCQllbHNlCiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3htbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3htbC5vdXQKaW5k ZXggZmI1ZjM0NTg1NS4uMmU5NjE2YWNkYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC94bWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQveG1sLm91dApA QCAtMTM3OSwxNiArMTM3OSwyMCBAQCBTRUxFQ1QgKiBGUk9NIFhNTFRBQkxFKFhNTE5BTUVTUEFD RVMoJ2h0dHA6Ly94LnknIEFTIHp6KSwKICAxMAogKDEgcm93KQogCi1DUkVBVEUgVklFVyB4bWx0 YWJsZXZpZXcyIEFTIFNFTEVDVCAqIEZST00gWE1MVEFCTEUoWE1MTkFNRVNQQUNFUygnaHR0cDov L3gueScgQVMgenopLAotICAgICAgICAgICAgICAgICAgICAgICcveno6cm93cy96ejpyb3cnCitD UkVBVEUgVklFVyB4bWx0YWJsZXZpZXcyIEFTIFNFTEVDVCAqIEZST00gWE1MVEFCTEUoWE1MTkFN RVNQQUNFUygnaHR0cDovL3gueScgQVMgIlp6IiksCisgICAgICAgICAgICAgICAgICAgICAgJy9a ejpyb3dzL1p6OnJvdycKICAgICAgICAgICAgICAgICAgICAgICBQQVNTSU5HICc8cm93cyB4bWxu cz0iaHR0cDovL3gueSI+PHJvdz48YT4xMDwvYT48L3Jvdz48L3Jvd3M+JwotICAgICAgICAgICAg ICAgICAgICAgIENPTFVNTlMgYSBpbnQgUEFUSCAneno6YScpOworICAgICAgICAgICAgICAgICAg ICAgIENPTFVNTlMgYSBpbnQgUEFUSCAnWno6YScpOwogU0VMRUNUICogRlJPTSB4bWx0YWJsZXZp ZXcyOwogIGEgIAogLS0tLQogIDEwCiAoMSByb3cpCiAKK1xzdiB4bWx0YWJsZXZpZXcyCitDUkVB VEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy54bWx0YWJsZXZpZXcyIEFTCisgU0VMRUNUIGEKKyAg IEZST00gWE1MVEFCTEUoWE1MTkFNRVNQQUNFUyAoJ2h0dHA6Ly94LnknOjp0ZXh0IEFTICJaeiIp LCAoJy9aejpyb3dzL1p6OnJvdyc6OnRleHQpIFBBU1NJTkcgKCc8cm93cyB4bWxucz0iaHR0cDov L3gueSI+PHJvdz48YT4xMDwvYT48L3Jvdz48L3Jvd3M+Jzo6eG1sKSBDT0xVTU5TIGEgaW50ZWdl ciBQQVRIICgnWno6YSc6OnRleHQpKQogU0VMRUNUICogRlJPTSBYTUxUQUJMRShYTUxOQU1FU1BB Q0VTKERFRkFVTFQgJ2h0dHA6Ly94LnknKSwKICAgICAgICAgICAgICAgICAgICAgICAnL3Jvd3Mv cm93JwogICAgICAgICAgICAgICAgICAgICAgIFBBU1NJTkcgJzxyb3dzIHhtbG5zPSJodHRwOi8v eC55Ij48cm93PjxhPjEwPC9hPjwvcm93Pjwvcm93cz4nCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC94bWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwveG1sLnNxbAppbmRleCBm NzUyZWNiMTQyLi5iYWMwMzg4YWMxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC94 bWwuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3htbC5zcWwKQEAgLTQzOSwxMyArNDM5 LDE1IEBAIFNFTEVDVCAqIEZST00gWE1MVEFCTEUoWE1MTkFNRVNQQUNFUygnaHR0cDovL3gueScg QVMgenopLAogICAgICAgICAgICAgICAgICAgICAgIFBBU1NJTkcgJzxyb3dzIHhtbG5zPSJodHRw Oi8veC55Ij48cm93PjxhPjEwPC9hPjwvcm93Pjwvcm93cz4nCiAgICAgICAgICAgICAgICAgICAg ICAgQ09MVU1OUyBhIGludCBQQVRIICd6ejphJyk7CiAKLUNSRUFURSBWSUVXIHhtbHRhYmxldmll dzIgQVMgU0VMRUNUICogRlJPTSBYTUxUQUJMRShYTUxOQU1FU1BBQ0VTKCdodHRwOi8veC55JyBB UyB6eiksCi0gICAgICAgICAgICAgICAgICAgICAgJy96ejpyb3dzL3p6OnJvdycKK0NSRUFURSBW SUVXIHhtbHRhYmxldmlldzIgQVMgU0VMRUNUICogRlJPTSBYTUxUQUJMRShYTUxOQU1FU1BBQ0VT KCdodHRwOi8veC55JyBBUyAiWnoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAnL1p6OnJvd3Mv Wno6cm93JwogICAgICAgICAgICAgICAgICAgICAgIFBBU1NJTkcgJzxyb3dzIHhtbG5zPSJodHRw Oi8veC55Ij48cm93PjxhPjEwPC9hPjwvcm93Pjwvcm93cz4nCi0gICAgICAgICAgICAgICAgICAg ICAgQ09MVU1OUyBhIGludCBQQVRIICd6ejphJyk7CisgICAgICAgICAgICAgICAgICAgICAgQ09M VU1OUyBhIGludCBQQVRIICdaejphJyk7CiAKIFNFTEVDVCAqIEZST00geG1sdGFibGV2aWV3MjsK IAorXHN2IHhtbHRhYmxldmlldzIKKwogU0VMRUNUICogRlJPTSBYTUxUQUJMRShYTUxOQU1FU1BB Q0VTKERFRkFVTFQgJ2h0dHA6Ly94LnknKSwKICAgICAgICAgICAgICAgICAgICAgICAnL3Jvd3Mv cm93JwogICAgICAgICAgICAgICAgICAgICAgIFBBU1NJTkcgJzxyb3dzIHhtbG5zPSJodHRwOi8v eC55Ij48cm93PjxhPjEwPC9hPjwvcm93Pjwvcm93cz4nCi0tIAoyLjQzLjAKCg== --000000000000a000bb062b6d61f2 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0002-Fix-JsonExpr-deparsing-to-quote-variable-names-in.patch" Content-Disposition: attachment; filename="v1-0002-Fix-JsonExpr-deparsing-to-quote-variable-names-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5s5qn5z1 RnJvbSAyNjBkNDUwNGNmNTY0OGM5MDM0Y2RmMmVmYTNmYWE0NDM2ZWVmMjk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEZWFuIFJhc2hlZWQgPGRlYW4uYS5yYXNoZWVkQGdtYWlsLmNv bT4KRGF0ZTogU2F0LCAxMSBKYW4gMjAyNSAxMTozNDozMiArMDAwMApTdWJqZWN0OiBbUEFUQ0gg djEgMi8yXSBGaXggSnNvbkV4cHIgZGVwYXJzaW5nIHRvIHF1b3RlIHZhcmlhYmxlIG5hbWVzIGlu IHRoZQogUEFTU0lORyBjbGF1c2UuCgpXaGVuIGRlcGFyc2luZyBhIEpzb25FeHByLCB2YXJpYWJs ZSBuYW1lcyBpbiB0aGUgUEFTU0lORyBjbGF1c2Ugd2VyZQpub3QgcXVvdGVkLiBIb3dldmVyLCBz aW5jZSB0aGV5IGFyZSBwYXJzZWQgYXMgQ29sTGFiZWwgdG9rZW5zLCBzb21lCnZhcmlhYmxlIG5h bWVzIHJlcXVpcmUgZG91YmxlIHF1b3RlcyB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBwcm9wZXJs eQppbnRlcnByZXRlZC4gRml4IGJ5IHVzaW5nIHF1b3RlX2lkZW50aWZpZXIoKSBpbiB0aGUgZGVw YXJzaW5nIGNvZGUuCgpUaGlzIG92ZXJzaWdodCB3YXMgbGltaXRlZCB0byB0aGUgU1FML0pTT04g cXVlcnkgZnVuY3Rpb25zCkpTT05fRVhJU1RTKCksIEpTT05fUVVFUlkoKSwgYW5kIEpTT05fVkFM VUUoKS4KCkJhY2stcGF0Y2ggdG8gdjE3LCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgd2VyZSBhZGRl ZC4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICAgICAgICAgICAgfCAg MiArLQogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbl9xdWVyeWZ1bmNzLm91dCAgIHwgMjAg KysrKysrKysrKysrKysrKy0tLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbl9xdWVyeWZ1 bmNzLnNxbCAgIHwgIDUgKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwg NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0 aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggYjkzNTg2ODcx Ni4uMmE3N2Y3MTVmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtMTA0NDMsNyAr MTA0NDMsNyBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCwKIAogCQkJCQkJZ2V0X3J1bGVfZXhwcigoTm9kZSAqKSBsZmlyc3QobGMyKSwgY29udGV4 dCwgc2hvd2ltcGxpY2l0KTsKIAkJCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEFTICVzIiwK LQkJCQkJCQkJCQkgKChTdHJpbmcgKikgbGZpcnN0X25vZGUoU3RyaW5nLCBsYzEpKS0+c3ZhbCk7 CisJCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobGZpcnN0X25vZGUoU3RyaW5nLCBsYzEpLT5z dmFsKSk7CiAJCQkJCX0KIAkJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3FsanNvbl9xdWVyeWZ1bmNzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c3FsanNvbl9xdWVyeWZ1bmNzLm91dAppbmRleCAxNzUzNDlmN2RjLi4zMjllZjY3NDk2IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fcXVlcnlmdW5jcy5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0CkBA IC0xMDg0LDcgKzEwODQsNyBAQCBDUkVBVEUgVEFCTEUgdGVzdF9qc29uYl9jb25zdHJhaW50cyAo CiAJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQxCiAJCUNIRUNLIChqcyBJUyBKU09O KQogCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50MgotCQlDSEVDSyAoSlNPTl9FWElT VFMoanM6Ompzb25iLCAnJC5hJyBQQVNTSU5HIGkgKyA1IEFTIGludCwgaTo6dGV4dCBBUyB0eHQs IGFycmF5WzEsMiwzXSBhcyBhcnIpKQorCQlDSEVDSyAoSlNPTl9FWElTVFMoanM6Ompzb25iLCAn JC5hJyBQQVNTSU5HIGkgKyA1IEFTIGludCwgaTo6dGV4dCBBUyAiVFhUIiwgYXJyYXlbMSwyLDNd IGFzIGFycikpCiAJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQzCiAJCUNIRUNLIChK U09OX1ZBTFVFKGpzOjpqc29uYiwgJyQuYScgUkVUVVJOSU5HIGludCBERUZBVUxUICcxMicgT04g RU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkKIAlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3Ry YWludDQKQEAgLTExMDEsNyArMTEwMSw3IEBAIENSRUFURSBUQUJMRSB0ZXN0X2pzb25iX2NvbnN0 cmFpbnRzICgKICB4ICAgICAgfCBqc29uYiAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCBKU09O X1FVRVJZKCdbMSwgMl0nOjpqc29uYiwgJyRbKl0nIFJFVFVSTklORyBqc29uYiBXSVRIIFVOQ09O RElUSU9OQUwgV1JBUFBFUiBLRUVQIFFVT1RFUykKIENoZWNrIGNvbnN0cmFpbnRzOgogICAgICJ0 ZXN0X2pzb25iX2NvbnN0cmFpbnQxIiBDSEVDSyAoanMgSVMgSlNPTikKLSAgICAidGVzdF9qc29u Yl9jb25zdHJhaW50MiIgQ0hFQ0sgKEpTT05fRVhJU1RTKGpzOjpqc29uYiwgJyQuImEiJyBQQVNT SU5HIGkgKyA1IEFTIGludCwgaTo6dGV4dCBBUyB0eHQsIEFSUkFZWzEsIDIsIDNdIEFTIGFycikp CisgICAgInRlc3RfanNvbmJfY29uc3RyYWludDIiIENIRUNLIChKU09OX0VYSVNUUyhqczo6anNv bmIsICckLiJhIicgUEFTU0lORyBpICsgNSBBUyAiaW50IiwgaTo6dGV4dCBBUyAiVFhUIiwgQVJS QVlbMSwgMiwgM10gQVMgYXJyKSkKICAgICAidGVzdF9qc29uYl9jb25zdHJhaW50MyIgQ0hFQ0sg KEpTT05fVkFMVUUoanM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBpbnRlZ2VyIERFRkFVTFQg MTIgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkKICAgICAidGVzdF9qc29uYl9jb25zdHJh aW50NCIgQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBqc29u YiBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgS0VFUCBRVU9URVMgRU1QVFkgT0JKRUNUIE9OIEVS Uk9SKSA9ICdbMTBdJzo6anNvbmIpCiAgICAgInRlc3RfanNvbmJfY29uc3RyYWludDUiIENIRUNL IChKU09OX1FVRVJZKGpzOjpqc29uYiwgJyQuImEiJyBSRVRVUk5JTkcgY2hhcmFjdGVyKDUpIFdJ VEhPVVQgV1JBUFBFUiBPTUlUIFFVT1RFUyBFTVBUWSBBUlJBWSBPTiBFTVBUWSkgPiAoJ2EnOjpi cGNoYXIgQ09MTEFURSAiQyIpKQpAQCAtMTExNiw3ICsxMTE2LDcgQEAgT1JERVIgQlkgMTsKICAo SlNPTl9RVUVSWSgoanMpOjpqc29uYiwgJyQuImEiJyBSRVRVUk5JTkcganNvbmIgV0lUSCBDT05E SVRJT05BTCBXUkFQUEVSIEtFRVAgUVVPVEVTIEVNUFRZIE9CSkVDVCBPTiBFUlJPUikgPSAnWzEw XSc6Ompzb25iKQogIChKU09OX1ZBTFVFKChqcyk6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBp bnRlZ2VyIERFRkFVTFQgMTIgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkKICAoanMgSVMg SlNPTikKLSBKU09OX0VYSVNUUygoanMpOjpqc29uYiwgJyQuImEiJyBQQVNTSU5HIChpICsgNSkg QVMgaW50LCAoaSk6OnRleHQgQVMgdHh0LCBBUlJBWVsxLCAyLCAzXSBBUyBhcnIpCisgSlNPTl9F WElTVFMoKGpzKTo6anNvbmIsICckLiJhIicgUEFTU0lORyAoaSArIDUpIEFTICJpbnQiLCAoaSk6 OnRleHQgQVMgIlRYVCIsIEFSUkFZWzEsIDIsIDNdIEFTIGFycikKICg1IHJvd3MpCiAKIFNFTEVD VCBwZ19nZXRfZXhwcihhZGJpbiwgYWRyZWxpZCkKQEAgLTEzNjYsNiArMTM2NiwyMCBAQCBTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckeHl6JyBQQVNTSU5HIDEgQVMgeHl6KTsKICAx CiAoMSByb3cpCiAKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyRYeXonIFBBU1NJ TkcgMSBBUyBYeXopOworRVJST1I6ICBjb3VsZCBub3QgZmluZCBqc29ucGF0aCB2YXJpYWJsZSAi WHl6IgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwnLCAnJFh5eicgUEFTU0lORyAxIEFT ICJYeXoiKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgMQorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckIlh5eiInIFBBU1NJTkcgMSBBUyAiWHl6Iik7 CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIDEKKygxIHJvdykKKwogLS0gVGVzdCBPTiBF UlJPUiAvIEVNUFRZIHZhbHVlIHZhbGlkaXR5IGZvciB0aGUgZnVuY3Rpb247IGFsbCBmYWlsLgog U0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQnIERFRkFVTFQgMSBPTiBFUlJPUik7CiBF UlJPUjogIGludmFsaWQgT04gRVJST1IgYmVoYXZpb3IKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3NxbGpzb25fcXVlcnlmdW5jcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9z cWxqc29uX3F1ZXJ5ZnVuY3Muc3FsCmluZGV4IDIxYjVkNDllY2UuLjhkN2IyMjViNjEgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fcXVlcnlmdW5jcy5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbl9xdWVyeWZ1bmNzLnNxbApAQCAtMzI3LDcgKzMy Nyw3IEBAIENSRUFURSBUQUJMRSB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzICgKIAlDT05TVFJBSU5U IHRlc3RfanNvbmJfY29uc3RyYWludDEKIAkJQ0hFQ0sgKGpzIElTIEpTT04pCiAJQ09OU1RSQUlO VCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQyCi0JCUNIRUNLIChKU09OX0VYSVNUUyhqczo6anNvbmIs ICckLmEnIFBBU1NJTkcgaSArIDUgQVMgaW50LCBpOjp0ZXh0IEFTIHR4dCwgYXJyYXlbMSwyLDNd IGFzIGFycikpCisJCUNIRUNLIChKU09OX0VYSVNUUyhqczo6anNvbmIsICckLmEnIFBBU1NJTkcg aSArIDUgQVMgaW50LCBpOjp0ZXh0IEFTICJUWFQiLCBhcnJheVsxLDIsM10gYXMgYXJyKSkKIAlD T05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDMKIAkJQ0hFQ0sgKEpTT05fVkFMVUUoanM6 Ompzb25iLCAnJC5hJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgJzEyJyBPTiBFTVBUWSBFUlJPUiBP TiBFUlJPUikgPiBpKQogCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50NApAQCAtNDY1 LDYgKzQ2NSw5IEBAIFNFTEVDVCBqc29uX3ZhbHVlKCciYWFhIicsIHBhdGggUkVUVVJOSU5HIGpz b24pIEZST00ganNvbnBhdGhzOwogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwnLCAnJHh5 eicgUEFTU0lORyAxIEFTIHh5KTsKIFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR4 eScgUEFTU0lORyAxIEFTIHh5eik7CiBTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICck eHl6JyBQQVNTSU5HIDEgQVMgeHl6KTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywg JyRYeXonIFBBU1NJTkcgMSBBUyBYeXopOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwn LCAnJFh5eicgUEFTU0lORyAxIEFTICJYeXoiKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdu dWxsJywgJyQiWHl6IicgUEFTU0lORyAxIEFTICJYeXoiKTsKIAogLS0gVGVzdCBPTiBFUlJPUiAv IEVNUFRZIHZhbHVlIHZhbGlkaXR5IGZvciB0aGUgZnVuY3Rpb247IGFsbCBmYWlsLgogU0VMRUNU IEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQnIERFRkFVTFQgMSBPTiBFUlJPUik7Ci0tIAoyLjQz LjAKCg== --000000000000a000bb062b6d61f2--