Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oYqzj-0001li-KX for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Sep 2022 15:41:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oYqzi-0005Nn-G1 for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Sep 2022 15:41:38 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oYqzh-0005Ne-Tf for pgsql-hackers@lists.postgresql.org; Thu, 15 Sep 2022 15:41:38 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oYqze-0002sD-Al for pgsql-hackers@postgresql.org; Thu, 15 Sep 2022 15:41:36 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 616EF21C0334; Thu, 15 Sep 2022 18:41:31 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1663256491; bh=HJ2B7YofQY0MdX6rwvyaM+OnVA6xEbLZe8dscMtV1+0=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=XleMD3Ipl4Ulth/LIl7NkRBbMZSRzrguf/ALAJTky6ayrdzBniKiCg3vJgelCTYLx oaE+kHX1EL2f4cwOKndXxVoyQ52O5GF2izFpYBG/hXbmTGKO9fw3abhIlkXEyZuG+B 9v9scUYsYy28Nsb7sbx2L9yvAY2h6ngUUg8AgZZA= MIME-Version: 1.0 Date: Thu, 15 Sep 2022 18:41:31 +0300 From: Marina Polyakova To: Kyotaro Horiguchi Cc: pgsql-hackers@postgresql.org, pryzby@telsasoft.com, rjuju123@gmail.com, daniel@manitou-mail.org, AndrewBille@gmail.com, michael@paquier.xyz, peter.eisentraut@enterprisedb.com Subject: Re: ICU for global collation In-Reply-To: <20220915.155210.529619933474389138.horikyota.ntt@gmail.com> References: <1f86f120-7b02-68f6-a434-132d054afe33@enterprisedb.com> <38d2aac40a991b20adf032e509c6eff5@postgrespro.ru> <6dd6db0984d86a51b7255ba79f111971@postgrespro.ru> <20220915.155210.529619933474389138.horikyota.ntt@gmail.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <2322791a368e9ad066edd648790b5e91@postgrespro.ru> X-Sender: m.polyakova@postgrespro.ru Organization: Postgres Professional Content-Type: multipart/mixed; boundary="=_a19f1f5d23d0dfc8b2d1cb5793fff658" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_a19f1f5d23d0dfc8b2d1cb5793fff658 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2022-09-15 09:52, Kyotaro Horiguchi wrote: > If I executed initdb as follows, I would be told to specify > --icu-locale option. > >> $ initdb --encoding sql-ascii --locale-provider icu hoge >> ... >> initdb: error: ICU locale must be specified > > However, when I reran the command, it complains about incompatible > encoding this time. I think it's more user-friendly to check for the > encoding compatibility before the check for missing --icu-locale > option. > > regards. I agree with you. Here's another version of the patch. The locale/encoding checks and reports in initdb have been reordered, because now the encoding is set first and only then the ICU locale is checked. P.S. While working on the patch, I discovered that UTF8 encoding is always used for the ICU provider in initdb unless it is explicitly specified by the user: if (!encoding && locale_provider == COLLPROVIDER_ICU) encodingid = PG_UTF8; IMO this creates additional errors for locales with other encodings: $ initdb --locale de_DE.iso885915@euro --locale-provider icu --icu-locale de-DE ... initdb: error: encoding mismatch initdb: detail: The encoding you selected (UTF8) and the encoding that the selected locale uses (LATIN9) do not match. This would lead to misbehavior in various character string processing functions. initdb: hint: Rerun initdb and either do not specify an encoding explicitly, or choose a matching combination. And ICU supports many encodings, see the contents of pg_enc2icu_tbl in encnames.c... -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_a19f1f5d23d0dfc8b2d1cb5793fff658 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v2-diff_check_icu_encoding.patch Content-Disposition: attachment; filename=v2-diff_check_icu_encoding.patch; size=6520 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYwppbmRleCA2ZmY0OGJiMThmMzYzOWFlNDVkOTUyOGIz MmRmNTFhNGFlYmM2MGMwLi5mMjQ4YWQ0MmI3N2M4YzBjZjIwODk5NjNkNDM1N2IxMjA5MTRjZTIw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGJjb21tYW5kcy5jCkBAIC0xMDM0LDYgKzEwMzQsMTIgQEAgY3Jl YXRlZGIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBDcmVhdGVkYlN0bXQgKnN0bXQpCiAKIAlp ZiAoZGJsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQogCXsKKwkJaWYgKCEoaXNfZW5j b2Rpbmdfc3VwcG9ydGVkX2J5X2ljdShlbmNvZGluZykpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJt c2coImVuY29kaW5nIFwiJXNcIiBpcyBub3Qgc3VwcG9ydGVkIHdpdGggSUNVIHByb3ZpZGVyIiwK KwkJCQkJCQlwZ19lbmNvZGluZ190b19jaGFyKGVuY29kaW5nKSkpKTsKKwogCQkvKgogCQkgKiBU aGlzIHdvdWxkIGhhcHBlbiBpZiB0ZW1wbGF0ZTAgdXNlcyB0aGUgbGliYyBwcm92aWRlciBidXQg dGhlIG5ldwogCQkgKiBkYXRhYmFzZSB1c2VzIGljdS4KQEAgLTEwNDIsMTAgKzEwNDgsOSBAQCBj cmVhdGVkYihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IENyZWF0ZWRiU3RtdCAqc3RtdCkKIAkJ CWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAogCQkJCQkgZXJybXNnKCJJQ1UgbG9jYWxlIG11c3QgYmUgc3BlY2lmaWVkIikpKTsK LQl9CiAKLQlpZiAoZGJsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQogCQljaGVja19p Y3VfbG9jYWxlKGRiaWN1bG9jYWxlKTsKKwl9CiAKIAkvKgogCSAqIENoZWNrIHRoYXQgdGhlIG5l dyBlbmNvZGluZyBhbmQgbG9jYWxlIHNldHRpbmdzIG1hdGNoIHRoZSBzb3VyY2UKZGlmZiAtLWdp dCBhL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5jIGIvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKaW5k ZXggNmFlZWM4ZDQyNmM1MjQxNGI4Mjc2ODY3ODFjMjQ1MjkxZjI3ZWQxZi4uOTk5ZTdjMmJmOGRj NzA3MDYzZWRkZjE5YTVjMjdlZWQwM2QzY2EwOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9pbml0ZGIv aW5pdGRiLmMKKysrIGIvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKQEAgLTIwOTIsMjAgKzIwOTIs MzAgQEAgc2V0bG9jYWxlcyh2b2lkKQogCWNoZWNrX2xvY2FsZV9uYW1lKExDX0NUWVBFLCBsY19t ZXNzYWdlcywgJmNhbm9ubmFtZSk7CiAJbGNfbWVzc2FnZXMgPSBjYW5vbm5hbWU7CiAjZW5kaWYK K30KIAotCWlmIChsb2NhbGVfcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKK3N0YXRpYyB2 b2lkCitjaGVja19pY3VfbG9jYWxlX2VuY29kaW5nKHZvaWQpCit7CisJaWYgKCEoaXNfZW5jb2Rp bmdfc3VwcG9ydGVkX2J5X2ljdShlbmNvZGluZ2lkKSkpCiAJewotCQlpZiAoIWljdV9sb2NhbGUp Ci0JCQlwZ19mYXRhbCgiSUNVIGxvY2FsZSBtdXN0IGJlIHNwZWNpZmllZCIpOworCQlwZ19sb2df ZXJyb3IoImVuY29kaW5nIFwiJXNcIiBpcyBub3Qgc3VwcG9ydGVkIHdpdGggSUNVIHByb3ZpZGVy IiwKKwkJCQkJIHBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmdpZCkpOworCQlwZ19sb2dfZXJy b3JfaGludCgiUmVydW4gJXMgYW5kIGNob29zZSBhIG1hdGNoaW5nIGNvbWJpbmF0aW9uLiIsCisJ CQkJCQkgIHByb2duYW1lKTsKKwkJZXhpdCgxKTsKKwl9CiAKLQkJLyoKLQkJICogSW4gc3VwcG9y dGVkIGJ1aWxkcywgdGhlIElDVSBsb2NhbGUgSUQgd2lsbCBiZSBjaGVja2VkIGJ5IHRoZQotCQkg KiBiYWNrZW5kIGR1cmluZyBwb3N0LWJvb3RzdHJhcCBpbml0aWFsaXphdGlvbi4KLQkJICovCisJ aWYgKCFpY3VfbG9jYWxlKQorCQlwZ19mYXRhbCgiSUNVIGxvY2FsZSBtdXN0IGJlIHNwZWNpZmll ZCIpOworCisJLyoKKwkgKiBJbiBzdXBwb3J0ZWQgYnVpbGRzLCB0aGUgSUNVIGxvY2FsZSBJRCB3 aWxsIGJlIGNoZWNrZWQgYnkgdGhlIGJhY2tlbmQKKwkgKiBkdXJpbmcgcG9zdC1ib290c3RyYXAg aW5pdGlhbGl6YXRpb24uCisJICovCiAjaWZuZGVmIFVTRV9JQ1UKLQkJcGdfZmF0YWwoIklDVSBp cyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQiKTsKKwlwZ19mYXRhbCgiSUNVIGlzIG5vdCBz dXBwb3J0ZWQgaW4gdGhpcyBidWlsZCIpOwogI2VuZGlmCi0JfQogfQogCiAvKgpAQCAtMjI4MSwz NCArMjI5MSw2IEBAIHNldHVwX2xvY2FsZV9lbmNvZGluZyh2b2lkKQogewogCXNldGxvY2FsZXMo KTsKIAotCWlmIChsb2NhbGVfcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMgJiYKLQkJc3Ry Y21wKGxjX2N0eXBlLCBsY19jb2xsYXRlKSA9PSAwICYmCi0JCXN0cmNtcChsY19jdHlwZSwgbGNf dGltZSkgPT0gMCAmJgotCQlzdHJjbXAobGNfY3R5cGUsIGxjX251bWVyaWMpID09IDAgJiYKLQkJ c3RyY21wKGxjX2N0eXBlLCBsY19tb25ldGFyeSkgPT0gMCAmJgotCQlzdHJjbXAobGNfY3R5cGUs IGxjX21lc3NhZ2VzKSA9PSAwICYmCi0JCSghaWN1X2xvY2FsZSB8fCBzdHJjbXAobGNfY3R5cGUs IGljdV9sb2NhbGUpID09IDApKQotCQlwcmludGYoXygiVGhlIGRhdGFiYXNlIGNsdXN0ZXIgd2ls bCBiZSBpbml0aWFsaXplZCB3aXRoIGxvY2FsZSBcIiVzXCIuXG4iKSwgbGNfY3R5cGUpOwotCWVs c2UKLQl7Ci0JCXByaW50ZihfKCJUaGUgZGF0YWJhc2UgY2x1c3RlciB3aWxsIGJlIGluaXRpYWxp emVkIHdpdGggdGhpcyBsb2NhbGUgY29uZmlndXJhdGlvbjpcbiIpKTsKLQkJcHJpbnRmKF8oIiAg cHJvdmlkZXI6ICAgICVzXG4iKSwgY29sbHByb3ZpZGVyX25hbWUobG9jYWxlX3Byb3ZpZGVyKSk7 Ci0JCWlmIChpY3VfbG9jYWxlKQotCQkJcHJpbnRmKF8oIiAgSUNVIGxvY2FsZTogICVzXG4iKSwg aWN1X2xvY2FsZSk7Ci0JCXByaW50ZihfKCIgIExDX0NPTExBVEU6ICAlc1xuIgotCQkJCSAiICBM Q19DVFlQRTogICAgJXNcbiIKLQkJCQkgIiAgTENfTUVTU0FHRVM6ICVzXG4iCi0JCQkJICIgIExD X01PTkVUQVJZOiAlc1xuIgotCQkJCSAiICBMQ19OVU1FUklDOiAgJXNcbiIKLQkJCQkgIiAgTENf VElNRTogICAgICVzXG4iKSwKLQkJCSAgIGxjX2NvbGxhdGUsCi0JCQkgICBsY19jdHlwZSwKLQkJ CSAgIGxjX21lc3NhZ2VzLAotCQkJICAgbGNfbW9uZXRhcnksCi0JCQkgICBsY19udW1lcmljLAot CQkJICAgbGNfdGltZSk7Ci0JfQotCiAJaWYgKCFlbmNvZGluZyAmJiBsb2NhbGVfcHJvdmlkZXIg PT0gQ09MTFBST1ZJREVSX0lDVSkKIAkJZW5jb2RpbmdpZCA9IFBHX1VURjg7CiAJZWxzZSBpZiAo IWVuY29kaW5nKQpAQCAtMjM1MCwxMSArMjMzMiw3IEBAIHNldHVwX2xvY2FsZV9lbmNvZGluZyh2 b2lkKQogI2VuZGlmCiAJCX0KIAkJZWxzZQotCQl7CiAJCQllbmNvZGluZ2lkID0gY3R5cGVfZW5j OwotCQkJcHJpbnRmKF8oIlRoZSBkZWZhdWx0IGRhdGFiYXNlIGVuY29kaW5nIGhhcyBhY2NvcmRp bmdseSBiZWVuIHNldCB0byBcIiVzXCIuXG4iKSwKLQkJCQkgICBwZ19lbmNvZGluZ190b19jaGFy KGVuY29kaW5naWQpKTsKLQkJfQogCX0KIAllbHNlCiAJCWVuY29kaW5naWQgPSBnZXRfZW5jb2Rp bmdfaWQoZW5jb2RpbmcpOwpAQCAtMjM2Miw2ICsyMzQwLDM5IEBAIHNldHVwX2xvY2FsZV9lbmNv ZGluZyh2b2lkKQogCWlmICghY2hlY2tfbG9jYWxlX2VuY29kaW5nKGxjX2N0eXBlLCBlbmNvZGlu Z2lkKSB8fAogCQkhY2hlY2tfbG9jYWxlX2VuY29kaW5nKGxjX2NvbGxhdGUsIGVuY29kaW5naWQp KQogCQlleGl0KDEpOwkJCQkvKiBjaGVja19sb2NhbGVfZW5jb2RpbmcgcHJpbnRlZCB0aGUgZXJy b3IgKi8KKworCWlmIChsb2NhbGVfcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJY2hl Y2tfaWN1X2xvY2FsZV9lbmNvZGluZygpOworCisJaWYgKGxvY2FsZV9wcm92aWRlciA9PSBDT0xM UFJPVklERVJfTElCQyAmJgorCQlzdHJjbXAobGNfY3R5cGUsIGxjX2NvbGxhdGUpID09IDAgJiYK KwkJc3RyY21wKGxjX2N0eXBlLCBsY190aW1lKSA9PSAwICYmCisJCXN0cmNtcChsY19jdHlwZSwg bGNfbnVtZXJpYykgPT0gMCAmJgorCQlzdHJjbXAobGNfY3R5cGUsIGxjX21vbmV0YXJ5KSA9PSAw ICYmCisJCXN0cmNtcChsY19jdHlwZSwgbGNfbWVzc2FnZXMpID09IDApCisJCXByaW50ZihfKCJU aGUgZGF0YWJhc2UgY2x1c3RlciB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggbG9jYWxlIFwiJXNc Ii5cbiIpLCBsY19jdHlwZSk7CisJZWxzZQorCXsKKwkJcHJpbnRmKF8oIlRoZSBkYXRhYmFzZSBj bHVzdGVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzIGxvY2FsZSBjb25maWd1cmF0aW9u OlxuIikpOworCQlwcmludGYoXygiICBwcm92aWRlcjogICAgJXNcbiIpLCBjb2xscHJvdmlkZXJf bmFtZShsb2NhbGVfcHJvdmlkZXIpKTsKKwkJaWYgKGljdV9sb2NhbGUpCisJCQlwcmludGYoXygi ICBJQ1UgbG9jYWxlOiAgJXNcbiIpLCBpY3VfbG9jYWxlKTsKKwkJcHJpbnRmKF8oIiAgTENfQ09M TEFURTogICVzXG4iCisJCQkJICIgIExDX0NUWVBFOiAgICAlc1xuIgorCQkJCSAiICBMQ19NRVNT QUdFUzogJXNcbiIKKwkJCQkgIiAgTENfTU9ORVRBUlk6ICVzXG4iCisJCQkJICIgIExDX05VTUVS SUM6ICAlc1xuIgorCQkJCSAiICBMQ19USU1FOiAgICAgJXNcbiIpLAorCQkJICAgbGNfY29sbGF0 ZSwKKwkJCSAgIGxjX2N0eXBlLAorCQkJICAgbGNfbWVzc2FnZXMsCisJCQkgICBsY19tb25ldGFy eSwKKwkJCSAgIGxjX251bWVyaWMsCisJCQkgICBsY190aW1lKTsKKwl9CisKKwlwcmludGYoXygi VGhlIGRlZmF1bHQgZGF0YWJhc2UgZW5jb2Rpbmcgd2lsbCBiZSBzZXQgdG8gXCIlc1wiLlxuIiks CisJCSAgIHBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmdpZCkpOwogfQogCiAKZGlmZiAtLWdp dCBhL3NyYy9iaW4vaW5pdGRiL3QvMDAxX2luaXRkYi5wbCBiL3NyYy9iaW4vaW5pdGRiL3QvMDAx X2luaXRkYi5wbAppbmRleCBhMzdmNmRkOWIzMzRiNmVlMjJkOWZkZDRkNTE0MjI3OTVjYjU0YTM5 Li40MGQ2ZDYzMDVhODU4ZWMwMTU4N2QxODRjNjlkNGYyOGQwNzk2ZDc0IDEwMDY0NAotLS0gYS9z cmMvYmluL2luaXRkYi90LzAwMV9pbml0ZGIucGwKKysrIGIvc3JjL2Jpbi9pbml0ZGIvdC8wMDFf aW5pdGRiLnBsCkBAIC0xMTgsNiArMTE4LDE1IEBAIGlmICgkRU5We3dpdGhfaWN1fSBlcSAneWVz JykKIAkJXSwKIAkJcXIvRkFUQUw6ICBjb3VsZCBub3Qgb3BlbiBjb2xsYXRvciBmb3IgbG9jYWxl LywKIAkJJ2ZhaWxzIGZvciBpbnZhbGlkIElDVSBsb2NhbGUnKTsKKworCWNvbW1hbmRfZmFpbHNf bGlrZSgKKwkJWworCQkJJ2luaXRkYicsICAgICAgICAgICAgICAgICctLW5vLXN5bmMnLAorCQkJ Jy0tbG9jYWxlLXByb3ZpZGVyPWljdScsICctLWVuY29kaW5nPVNRTF9BU0NJSScsCisJCQkiJHRl bXBkaXIvZGF0YVgiCisJCV0sCisJCXFyL2Vycm9yOiBlbmNvZGluZyAiU1FMX0FTQ0lJIiBpcyBu b3Qgc3VwcG9ydGVkIHdpdGggSUNVIHByb3ZpZGVyLywKKwkJJ2VuY29kaW5nICJTUUxfQVNDSUki IGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBJQ1UgcHJvdmlkZXInKTsKIH0KIGVsc2UKIHsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vc2NyaXB0cy90LzAyMF9jcmVhdGVkYi5wbCBiL3NyYy9iaW4vc2NyaXB0 cy90LzAyMF9jcmVhdGVkYi5wbAppbmRleCBlOTFjMWQwMTNkMDhkOGJkMWUzYTkyZjJhYmE5NThj NWM3NzEzY2E2Li41NmM1NzhkM2Q4MWI4ZTYxYjY4N2E4YjUwOGIzYjc0MWQ0ZGYyNzBhIDEwMDY0 NAotLS0gYS9zcmMvYmluL3NjcmlwdHMvdC8wMjBfY3JlYXRlZGIucGwKKysrIGIvc3JjL2Jpbi9z Y3JpcHRzL3QvMDIwX2NyZWF0ZWRiLnBsCkBAIC01MCw2ICs1MCwxNSBAQCBpZiAoJEVOVnt3aXRo X2ljdX0gZXEgJ3llcycpCiAJCV0sCiAJCSdmYWlscyBmb3IgaW52YWxpZCBJQ1UgbG9jYWxlJyk7 CiAKKwkkbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCQlbCisJCQknY3JlYXRlZGInLCAgICAg ICAgICAgICAnLVQnLAorCQkJJ3RlbXBsYXRlMCcsICAgICAgICAgICAgJy0tbG9jYWxlLXByb3Zp ZGVyPWljdScsCisJCQknLS1lbmNvZGluZz1TUUxfQVNDSUknLCAnZm9vYmFyWCcKKwkJXSwKKwkJ cXIvRVJST1I6ICBlbmNvZGluZyAiU1FMX0FTQ0lJIiBpcyBub3Qgc3VwcG9ydGVkIHdpdGggSUNV IHByb3ZpZGVyLywKKwkJJ2VuY29kaW5nICJTUUxfQVNDSUkiIGlzIG5vdCBzdXBwb3J0ZWQgd2l0 aCBJQ1UgcHJvdmlkZXInKTsKKwogCSMgYWRkaXRpb25hbCBub2RlLCB3aGljaCB1c2VzIHRoZSBp Y3UgcHJvdmlkZXIKIAlteSAkbm9kZTIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J2ljdScpOwogCSRub2RlMi0+aW5pdChleHRyYSA9PiBbJy0tbG9jYWxlLXByb3ZpZGVyPWljdScs ICctLWljdS1sb2NhbGU9ZW4nXSk7Cg== --=_a19f1f5d23d0dfc8b2d1cb5793fff658--