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 1wVq5s-002DqN-0U for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Jun 2026 12:25:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wVq5o-00Fudz-2F for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Jun 2026 12:25:36 +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 1wVq5o-00Fudr-0f for pgsql-hackers@lists.postgresql.org; Sat, 06 Jun 2026 12:25:36 +0000 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wVq5m-00000001OJx-0imk for pgsql-hackers@lists.postgresql.org; Sat, 06 Jun 2026 12:25:35 +0000 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2bf22c18ad3so217895ad.0 for ; Sat, 06 Jun 2026 05:25:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780748733; cv=none; d=google.com; s=arc-20240605; b=FO38Vxj1SIsMLqQNFrR3CJxXqYLV8jXzL6yJPXkLnw3L4702jidiQQIu5izQoa/yNW V5Hf5kBM+AaP7Ym/QhHSOi44OaqghrwzUdfN2nCSv7XUkQyvkUKHwn/TtzVa0Ww8K8DX 8hCVTzQzYUd4TCHeaq/YfILyiubqBHT1YAX1qR6YpA7CpM/UiH5y5QAckmiDtyg+8+Kf 9C6XPmUxTW2Zx8QVy1uD1v+naY32V+NPlMwluDLweFQBXW8kqA2KzF9OFcd9OXdgdxP/ JKaz8xOx174X4C7jn2Ywwrc3OCbsb+mXOdaiXS1D6jxGUl111l3CkSxt+/DRFzuBy4Re GoGA== 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=tjbX8QepynkaCyDKTEQ4CVN+Brnqzd+KkBNk5b9VQbA=; fh=2D9b4JlESED19vmm0apBOtYiyutliqwe6Pj4a9mxmb8=; b=Is5bj4WDJD5iIoTLWgLJPUYeDIFG2LFI0dkxKZNMJA2xGVtLcHM9Qx1l0I2/o8xDfh IzXW0Wx0923jIjIjpf93hIMiswmOsoq5noxgQvMvlGGAW1GmgTn6Lnaj/Zhi5pMfvsiI GCRntKOMUj33vi+C5HbiqzLqcQMeDhbWlFpfH8OZ+NOBvSp1DWm+MnIrKInypn3ring8 vY/GD8KmuBGsBAbYCRwl74zCTQFIZVOlw+vIRmee010Pae1/UXEBHvzAwo3q0auCMh5G o8qEahMjfd01uelg5KFWQdmHhOckPJCIpzmztB7QnSElVBJ28bNnzfHjP85zaz/u5nI+ bnyQ==; 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=google.com; s=20251104; t=1780748733; x=1781353533; 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=tjbX8QepynkaCyDKTEQ4CVN+Brnqzd+KkBNk5b9VQbA=; b=iq9lpoEfKjHwaX8xUxJp/4Krl1I44JNvvvseSaqXqmQwEOdaD/wQYJmwQFW9mzgyob jpq8+Jj3GvVWJAG7VmosTnKWWMpTAamOj35gvuVx/pCnIK3oMtyF5kXVL0VSVdibP/nG mE56NGGKln3RdbJtj38BJqzlc9yqohm3KwALajRngkqUhdGGyH4B2IWW3lg+VXK73Cvh qfhjALeBnu+4GTqz2gTWJEkOHjEUiCCl7tAoWYXWMqEPpbHd/wI/CaXOYs5GWsAWxkYJ jiD/LkaExzTqm6HwD1Ng0jzEiPiaZx3hu/b6daiSWzExhmmjZgMBaMqk7WwIyynUfTMI 6gag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780748733; x=1781353533; 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=tjbX8QepynkaCyDKTEQ4CVN+Brnqzd+KkBNk5b9VQbA=; b=AUbhvepUr32/GSLZlOiUOmFvHJ3+6eryvsMjgT31t27B0lvczh3l9HKtcjUOKRRH3F nRN/DQkFHc3k/LqpoJAebkm3K/opEmPMJDDXlnQFN47yvY1SzcZDRN1STy9SWQGCGIkb QhVdhBFUp/DhK/+H8RpaPC3Qpu0n8r9gUw0YKKNSMdmfpfm+oBMWv8Bi8FB6dhXKdOWj 7Bpfb6Wzk8iA7+Ei+jRsgYIbX8k2WQm22heyIWi6HAUce9Pd9SjwK/FiNbggwilwghOj UExN9c0HV9Q4rYASsfx9EtYpJP8Z1jRt3478YuwvXhfBbqY6uk2kvWiirm+E4jK8UiYv mlSg== X-Forwarded-Encrypted: i=1; AFNElJ+j3FzyxKUxs/ocXv3e1HMZUrBwwJdcHv/E6dwwpUuEwEeWMpxbdBAbJakBrJb2bKFESsuc4MFKIuclyWyK@lists.postgresql.org X-Gm-Message-State: AOJu0Ywy0hGN9fdlSuY27v4FEz4ZkfCgYcJ0t6XZfLslZZ0yvTl+irZV zXXHL+WWcgbfmwXKP+k6uow1ISyij3/zL7AHO5vB1ipId/CC7CEyRW6VAd9s0e5RVkZlfalucbI 4OZJ0JAeoPlN6TFmDSw4j1Ija2/OJT3+lAicRwvMj X-Gm-Gg: Acq92OHiqmiLC9ZeXMXjWSgbkQ2O5x6zBk0dNt7hYz847Iq/xF8P/YxFEPDhDOzikG3 hsrMaCtuh8qG5W6MVIqKJ0LxPWnFMaXbjSfAOdP5aM6EjaqaoRhvggsvggEcM6NHIi9gPvq89WR tzUXaLUBxSfZ5dBwFScI+f4XS66Udn5U4Aa0j9ZahRYhqRhhDHTGXdqIzPE7n5yrHKnIwmEZPlp rtFxnXlC3NdhbLcY4euxBAgNZSwqYDUF7v8NGDy+pfzQzXwDkl/NJEHkV7mByceeo8xRNAhT3HP JcqlbNdVKs3CC6B3Exsc0eT2+TrQrKp0D3L4456Hh1j+iYCCjHwkBMUW3cch X-Received: by 2002:a17:903:fa5:b0:2c1:ee6e:4e4c with SMTP id d9443c01a7336-2c1ee6e51e8mr3163865ad.29.1780748732218; Sat, 06 Jun 2026 05:25:32 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Nitin Motiani Date: Sat, 6 Jun 2026 17:55:20 +0530 X-Gm-Features: AVVi8Ce2Za-5e0j8-xJH4-YjuKVBSbU1hlQ-LLVwOcZ6lk5xQOyAl2nN22TCLa8 Message-ID: Subject: Re: [PATCH] Fix for bug #19474: LIKE fails to match literal backslashes with nondeterministic collations To: Ewan Young Cc: Zsolt Parragi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000009f646e065394df87" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009f646e065394df87 Content-Type: text/plain; charset="UTF-8" > I reviewed the v2 patch. > Thanks for the feedback. > > 1. The commit message describes the symptom as "an incorrect match > failure", but the bug also causes incorrect matches in the other > direction. Since the unescaping logic dropped the literal backslash > from the pattern, a text *without* a backslash could wrongly match a > pattern that requires one: > > SELECT 'backslash' COLLATE ignore_accents LIKE 'back\\slash%'; > -- unpatched: t (wrong), patched: f (correct) > > I think it's worth mentioning this false-positive side of the bug in > the commit message, since silently-too-permissive LIKE filters are > arguably the more dangerous symptom for applications. > I have updated the commit message. I also added another test for this scenario in v3. > 2. A small typo in the new comment in like_match.c: > "occurences" should be "occurrences". > Fixed the typo. Thanks, Nitin Motiani Google --0000000000009f646e065394df87 Content-Type: application/x-patch; name="v3-0001-Fix-LIKE-matching-with-nondeterministic-collation.patch" Content-Disposition: attachment; filename="v3-0001-Fix-LIKE-matching-with-nondeterministic-collation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq2bqli00 RnJvbSA3ZTk1MTc4MzYwMmUxZDBlNTBlZTA2YzNiZTRlMTQyNjkxYTdhZjk0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOaXRpbiBNb3RpYW5pIDxuaXRpbm1vdGlhbmlAZ29vZ2xlLmNv bT4KRGF0ZTogVGh1LCAxNCBNYXkgMjAyNiAxMDo0OTo1NCArMDAwMApTdWJqZWN0OiBbUEFUQ0gg djNdIEZpeCBMSUtFIG1hdGNoaW5nIHdpdGggbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFu ZAogYmFja3NsYXNoZXMKCkNvbW1pdCA4NWI3ZWZhMWNkIGFkZGVkIHN1cHBvcnQgZm9yIExJS0Ug d2l0aCBub25kZXRlcm1pbmlzdGljCmNvbGxhdGlvbnMsIGJ1dCBpdCBpbmNsdWRlZCBhIGJ1ZyBp biB0aGUgdW5lc2NhcGluZyBsb2dpYyBmb3IgcGF0dGVybgpwYXJ0aXRpb25zLiBXaGVuIHRoZSBw YXR0ZXJuIGNvbnRhaW5lZCBhIGxpdGVyYWwgYmFja3NsYXNoICh3aGljaCBpcwpyZXByZXNlbnRl ZCBhcyAnXFwnIGluIHRoZSBpbnRlcm5hbCBwYXR0ZXJuKSwgdGhlIGNvZGUgd291bGQgc2tpcCBi b3RoCmJhY2tzbGFzaGVzLCByZXN1bHRpbmcgaW4gYW4gaW5jb3JyZWN0IG1hdGNoIGZhaWx1cmUg YWdhaW5zdCB0aGUKb3JpZ2luYWwgdGV4dC4KClRoaXMgbG9naWMgYWxzbyBjYW4gY2F1c2UgYSBm YWxzZSBwb3NpdGl2ZSBtYXRjaC4gSWYgdGhlIHBhdHRlcm4KaGFzIGEgbGl0ZXJhbCBiYWNrc2xh c2ggYnV0IHRoZSB0ZXh0IGRvZXNuJ3QgaGF2ZSBvbmUsIHNraXBwaW5nIHRoZQpiYWNrc2xhc2hl cyB3b3VsZCBsZWFkIHRvIGEgZmFsc2UgcG9zaXRpdmUuCgpUaGlzIGZpeCBlbnN1cmVzIHRoYXQg YW4gZXNjYXBlIGJhY2tzbGFzaCBjb3JyZWN0bHkgY2F1c2VzIHRoZSBmb2xsb3dpbmcKY2hhcmFj dGVyIHRvIGJlIGNvcGllZCBsaXRlcmFsbHkgaW50byB0aGUgc3VicGF0dGVybiBiZWZvcmUgY29t cGFyaXNvbi4KCkEgZmV3IHJlZ3Jlc3Npb24gdGVzdHMgYXJlIGFkZGVkIHRvIHZlcmlmeSB0aGUg Zml4IGFuZCBwcmV2ZW50IGZ1dHVyZQpyZWdyZXNzaW9ucy4KClJlcG9ydGVkLWJ5OiBiLzE5NDc0 IG9uIHBnc3FsLWJ1Z3MKLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9tYXRjaC5jICAg ICAgICAgICAgfCAzNyArKysrKysrKysrKysrKysrLS0tCiAuLi4vcmVncmVzcy9leHBlY3RlZC9j b2xsYXRlLmljdS51dGY4Lm91dCAgICAgfCAzMSArKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9jb2xsYXRlLmljdS51dGY4LnNxbCAgICAgfCAgNyArKysrCiAzIGZpbGVzIGNo YW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2xpa2VfbWF0Y2guYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9s aWtlX21hdGNoLmMKaW5kZXggZjVmNzJiODJlMjEuLjVlYWUyYjhhMDNlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9tYXRjaC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9saWtlX21hdGNoLmMKQEAgLTI1MiwxNCArMjUyLDM5IEBAIE1hdGNoVGV4dChjb25zdCBj aGFyICp0LCBpbnQgdGxlbiwgY29uc3QgY2hhciAqcCwgaW50IHBsZW4sIHBnX2xvY2FsZV90IGxv Y2FsZSkKIAkJCWlmIChmb3VuZF9lc2NhcGUpCiAJCQl7CiAJCQkJY2hhcgkgICAqYjsKKwkJCQlj b25zdCBjaGFyICpjID0gcDsKKwkJCQljb25zdCBjaGFyICpzdGFydDsJLyogdXNlZCBpbiB0aGUg bG9vcCB3aGVuZXZlciB3ZSBhcmUgY29weWluZyBhCisJCQkJCQkJCQkgKiBtdWx0aWJ5dGUgY2hh cmFjdGVyICovCisJCQkJaW50CQkJY2xlbiA9IHAxIC0gcDsKKwkJCQlib29sCQlhZnRlcmVzY2Fw ZSA9IGZhbHNlOwogCi0JCQkJYiA9IGJ1ZiA9IHBhbGxvYyhwMSAtIHApOwotCQkJCWZvciAoY29u c3QgY2hhciAqYyA9IHA7IGMgPCBwMTsgYysrKQorCQkJCWIgPSBidWYgPSBwYWxsb2MoY2xlbik7 CisKKwkJCQkvKgorCQkJCSAqIFJlbW92ZSBvY2N1cnJlbmNlcyBvZiBhIHNpbmdsZSAnXCcuIEFu ZCBpZiB3ZSBoYXZlIGEgJ1xcJywKKwkJCQkgKiBrZWVwIG9uZSAnXCcuCisJCQkJICovCisJCQkJ d2hpbGUgKGNsZW4gPiAwKQogCQkJCXsKLQkJCQkJaWYgKCpjID09ICdcXCcpCi0JCQkJCQk7Ci0J CQkJCWVsc2UKLQkJCQkJCSooYisrKSA9ICpjOworCQkJCQlpZiAoKmMgPT0gJ1xcJyAmJiAhYWZ0 ZXJlc2NhcGUpCisJCQkJCXsKKwkJCQkJCWFmdGVyZXNjYXBlID0gdHJ1ZTsKKwkJCQkJCU5leHRC eXRlKGMsIGNsZW4pOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkg KiBDb3B5IHRoZSBlbnRpcmUgY2hhcmFjdGVyICgxLTQgYnl0ZXMpIGFuZCBhZHZhbmNlLiBUaGlz CisJCQkJCSAqIGVuc3VyZXMgd2Ugc3RheSBhbGlnbmVkIG9uIGNoYXJhY3RlciBib3VuZGFyaWVz IGZvcgorCQkJCQkgKiBtdWx0aWJ5dGUgZW5jb2RpbmdzLgorCQkJCQkgKi8KKwkJCQkJc3RhcnQg PSBjOworCisJCQkJCU5leHRDaGFyKGMsIGNsZW4pOworCQkJCQl3aGlsZSAoc3RhcnQgPCBjKQor CQkJCQkJKihiKyspID0gKihzdGFydCsrKTsKKworCQkJCQlhZnRlcmVzY2FwZSA9IGZhbHNlOwog CQkJCX0KIAogCQkJCXN1YnBhdCA9IGJ1ZjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY29sbGF0ZS5pY3UudXRmOC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2NvbGxhdGUuaWN1LnV0Zjgub3V0CmluZGV4IDA0ZTJmNmRmMDM3Li4yZjAwZmRiOWI1MiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUuaWN1LnV0Zjgub3V0CkBAIC0y NzQxLDYgKzI3NDEsMzcgQEAgU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJidfXDAwZTRi YycgQ09MTEFURSBpZ25vcmVfYWNjZW50czsKIC0tIGVzY2FwZSBjaGFyYWN0ZXIgYXQgZW5kIG9m IHBhdHRlcm4KIFNFTEVDVCAnZm9veCcgTElLRSAnZm9vXCcgQ09MTEFURSBpZ25vcmVfYWNjZW50 czsKIEVSUk9SOiAgTElLRSBwYXR0ZXJuIG11c3Qgbm90IGVuZCB3aXRoIGVzY2FwZSBjaGFyYWN0 ZXIKKy0tIGxpdGVyYWwgYmFja3NsYXNoIHdpdGggbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb24g KGJ1ZyAjMTk0NzQpCitTRUxFQ1QgJ2JhY2tcc2xhc2gnIENPTExBVEUgaWdub3JlX2FjY2VudHMg TElLRSAnYmFja1xzbGFzaCUnIEVTQ0FQRSAnIyc7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisg dAorKDEgcm93KQorCitTRUxFQ1QgJ2HDpGInIENPTExBVEUgaWdub3JlX2FjY2VudHMgTElLRSAn YSPDpGInIEVTQ0FQRSAnIycgQVMgbXVsdGlieXRlX2VzY2FwZTsKKyBtdWx0aWJ5dGVfZXNjYXBl IAorLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgJ2Fcw6RiJyBDT0xM QVRFIGlnbm9yZV9hY2NlbnRzIExJS0UgJ2Fcw6RiJScgRVNDQVBFICcjJyBBUyBiYWNrc2xhc2hf bXVsdGlieXRlOworIGJhY2tzbGFzaF9tdWx0aWJ5dGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKK1NFTEVDVCAnYVxiJWMnIENPTExBVEUgaWdub3JlX2FjY2VudHMgTElL RSAnYSNcYiMlJWMnIEVTQ0FQRSAnIycgQVMgbWl4ZWRfZXNjYXBlczsKKyBtaXhlZF9lc2NhcGVz IAorLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgJ2JhY2tzbGFzaCcgQ09M TEFURSBpZ25vcmVfYWNjZW50cyBMSUtFICdiYWNrXFxzbGFzaCUnOworID9jb2x1bW4/IAorLS0t LS0tLS0tLQorIGYKKygxIHJvdykKKwogLS0gZm9yZWlnbiBrZXlzIChtaXhpbmcgZGlmZmVyZW50 IG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucyBub3QgYWxsb3dlZCkKIENSRUFURSBUQUJMRSB0 ZXN0MTBwayAoeCB0ZXh0IENPTExBVEUgY2FzZV9zZW5zaXRpdmUgUFJJTUFSWSBLRVkpOwogQ1JF QVRFIFRBQkxFIHRlc3QxMGZrICh4IHRleHQgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlIFJFRkVS RU5DRVMgdGVzdDEwcGsgKHgpIE9OIFVQREFURSBDQVNDQURFIE9OIERFTEVURSBDQVNDQURFKTsg IC0tIGVycm9yCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb2xsYXRlLmljdS51 dGY4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCmluZGV4 IDE4YzQ3ZTZlMDVhLi45ZjBhYjk4Y2Y2NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvY29sbGF0ZS5pY3UudXRmOC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0 ZS5pY3UudXRmOC5zcWwKQEAgLTk2MCw2ICs5NjAsMTMgQEAgU0VMRUNUIFUmJ1wwMDYxXDAzMDhi YycgTElLRSBVJidfXDAwZTRiYycgQ09MTEFURSBpZ25vcmVfYWNjZW50czsKIC0tIGVzY2FwZSBj aGFyYWN0ZXIgYXQgZW5kIG9mIHBhdHRlcm4KIFNFTEVDVCAnZm9veCcgTElLRSAnZm9vXCcgQ09M TEFURSBpZ25vcmVfYWNjZW50czsKIAorLS0gbGl0ZXJhbCBiYWNrc2xhc2ggd2l0aCBub25kZXRl cm1pbmlzdGljIGNvbGxhdGlvbiAoYnVnICMxOTQ3NCkKK1NFTEVDVCAnYmFja1xzbGFzaCcgQ09M TEFURSBpZ25vcmVfYWNjZW50cyBMSUtFICdiYWNrXHNsYXNoJScgRVNDQVBFICcjJzsKK1NFTEVD VCAnYcOkYicgQ09MTEFURSBpZ25vcmVfYWNjZW50cyBMSUtFICdhI8OkYicgRVNDQVBFICcjJyBB UyBtdWx0aWJ5dGVfZXNjYXBlOworU0VMRUNUICdhXMOkYicgQ09MTEFURSBpZ25vcmVfYWNjZW50 cyBMSUtFICdhXMOkYiUnIEVTQ0FQRSAnIycgQVMgYmFja3NsYXNoX211bHRpYnl0ZTsKK1NFTEVD VCAnYVxiJWMnIENPTExBVEUgaWdub3JlX2FjY2VudHMgTElLRSAnYSNcYiMlJWMnIEVTQ0FQRSAn IycgQVMgbWl4ZWRfZXNjYXBlczsKK1NFTEVDVCAnYmFja3NsYXNoJyBDT0xMQVRFIGlnbm9yZV9h Y2NlbnRzIExJS0UgJ2JhY2tcXHNsYXNoJSc7CisKIC0tIGZvcmVpZ24ga2V5cyAobWl4aW5nIGRp ZmZlcmVudCBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgbm90IGFsbG93ZWQpCiBDUkVBVEUg VEFCTEUgdGVzdDEwcGsgKHggdGV4dCBDT0xMQVRFIGNhc2Vfc2Vuc2l0aXZlIFBSSU1BUlkgS0VZ KTsKIENSRUFURSBUQUJMRSB0ZXN0MTBmayAoeCB0ZXh0IENPTExBVEUgY2FzZV9pbnNlbnNpdGl2 ZSBSRUZFUkVOQ0VTIHRlc3QxMHBrICh4KSBPTiBVUERBVEUgQ0FTQ0FERSBPTiBERUxFVEUgQ0FT Q0FERSk7ICAtLSBlcnJvcgotLSAKMi41NC4wLjEwMzIuZzJmODU2NWUxZDEtZ29vZwoK --0000000000009f646e065394df87--