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 1wVKAv-001siF-2M for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Jun 2026 02:20:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wVKAu-009bDS-21 for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Jun 2026 02:20:44 +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 1wVKAu-009bDI-0e for pgsql-hackers@lists.postgresql.org; Fri, 05 Jun 2026 02:20:44 +0000 Received: from mail-qk1-x72d.google.com ([2607:f8b0:4864:20::72d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wVKAr-00000001LJg-0zja for pgsql-hackers@postgresql.org; Fri, 05 Jun 2026 02:20:43 +0000 Received: by mail-qk1-x72d.google.com with SMTP id af79cd13be357-9157ec935c5so238811985a.2 for ; Thu, 04 Jun 2026 19:20:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780626038; cv=none; d=google.com; s=arc-20240605; b=W5bw2z6SbaCesDdcnbCCk5Nu0vieZhgWykiV0HDFevZl9k6nDY7tPbx2fIHPBtiz6r UMxK0o2ilS/BY7dmi3oDCvUDtr5CiwHP4hDpd02DRpW+sTxcGSJ62Oe4gNUN+PdKgKLM Q8looO7hbPsoQvDPZ+7HV4hlOnGD5zhUt14Bu1f0p793dlnXAgPxLSj/AiRYyYWNvzTP qK580VhgFvNVtx8Rp0EgfdjhwkYP6fotlJFIgnwyIqSjUP41aGO7vLefA6nx/St0V2gO b608WrYazwpksvkUZOUMZ2P5qqYLiG8UvIzK2ukf+PKF5v+FPUYzmwW18oV++IVrwj0l Y5mQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=OKEWSC9Dk+DGiDZt+8I/+DtJ+75U+13HeMM+YjmKJXU=; fh=izp5CzvCGSMvxJfYfSULLF+s3GU+R7sDr1Fh6aBzo2w=; b=HBqZpfA7QiTixM+9MQfsQr37OU3aeyqT8u75UsggmxDnracGWHxRuEMvVRE7yVGgOU ABK3dp+3leOW9nmJo5d18Fc8HiDOHE4mLUPFeGap02bTnzdyUVXQCs1wBOZIEGe4+RiN hs9+wuAGzVqqtxS1zH3qu+O0b0qpZJ6kn3GhRZk5ATaVYEiJw3gLKe4d8vsbZXZiaIE2 Y9k0FlKTPAg1Tj6Z7BYNdAINphbP5q/y1MzKiXa6Dk6rni7OzHdq5FWtVSyIKSUqut0o LIlrd/iv/urCR/kA/IsFVyzn/a07x1Q1CaCc5w4OqZr56hBLbWUDR2DGQHb06F2m0MHI aG+g==; 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=1780626038; x=1781230838; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=OKEWSC9Dk+DGiDZt+8I/+DtJ+75U+13HeMM+YjmKJXU=; b=Bfa1dMLerf8OI7ae7tiWttqW7KWseU5eqs2f+iN+IZioDA/DsK5jRLjjkvlUdrkhhz A2GcQ6EhkCyiArGnBGwBWQQEeWWV4xthC53HqO4D8ON2m9AeJS31wLVKbOUX7wmY9OhA arDYKxOciCjf4tSj0/4EwwcejNpJpEDyYkbrxQNCpEs5XxnYqoec4qflLzbqREToE+Ma leVzeEtt8aF8Pc9Q5/6/X2QbAKrjLfrFm4yZ5kKzzs5dBIlhNuBPP945QjZUmK61ecnK LI3OxFKATCr1V7CdwAWfV3zYItw05C9fXgffdjZXrIaevlT1XaPrUFOpXFgVKl2hj8Nz NNrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780626038; x=1781230838; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=OKEWSC9Dk+DGiDZt+8I/+DtJ+75U+13HeMM+YjmKJXU=; b=HBJvSfxQ9PsG6buKwP4JJJ/TnlJuQLZIqbPCrK8Rk26M+DiC+0fSJuh1caYRbrjdDA fXwgfHyABDNFbnn00EGD2/dvmZLcAQGg9nWLmqvxGuFpI98ao5V8UKwUBdQEEa1kku5x VGH+bxtzENLakTAiIoT4Um1m1EZlSP4aWDL2Tz7VfHndewBb4DUwaXxfkMN0i0hki3L0 NLMercmvdLYYOhUZfrEBVXPJuHxVxAUyCCu28ngD8Xp/ULhPcdn5NVc/oEww/JdWsYc5 HuA9lIcfIgcKSXtpKbkUPn0/DRDzwpuX9E1I3exusE0+MKvhMeVZh0YxLJ1ssTYloBY7 DLtQ== X-Gm-Message-State: AOJu0YyGPzZo6fGS1EsJiD7u/gS+sZf5xy9Hd9z7LqiFXv92B1RSK4uZ 9QoqDydcjOjH9f2o17H4NFGlUQOR7aAaBp2mBDyvMQpkLwAZ9h4LoCmpL436SFFQQVqNcLRPVd/ fO+4gah6Dl6CojJVChNK+kJHJLk6obH2uCuCgQEA= X-Gm-Gg: Acq92OH2yu0kV1MEioKsaV93NbgEmpLt/z/C0w/XL5FQrlJesRbAWAxW0Qfd4fZm4En 794PvxH5OvwNCzE1pBneHyg441E0LjS+lbE5IPUlk1l/mF7ggdAo+qVtYmfdL8DmDo+IL6EMz8J D2oPPRu+SiC5IBOfFqVAJZ8hg96eVbSneAME+MhKqct3/G7Z26OG+s/Dz/DhQ/uV9EJeOAyoe3Y qZWZ0nh4j0IIHVDPSZIk/Ms2uKvylyW4AbX7MnVQROXcZm4tXCbXRX/3amhyJIOzsBd/QPVLerj DU8D98u/cBQmCKiRYw== X-Received: by 2002:a05:620a:480b:b0:915:a425:3c7 with SMTP id af79cd13be357-915a9c4bd74mr340099785a.12.1780626038205; Thu, 04 Jun 2026 19:20:38 -0700 (PDT) MIME-Version: 1.0 From: =?UTF-8?B?7Jyg64+E6rG0?= Date: Fri, 5 Jun 2026 11:20:26 +0900 X-Gm-Features: AVHnY4JecWFS9EMmOW7WUJiXpDa31yU52sETNu9MaU1nEQiQkhQouDeAVjAKSwQ Message-ID: Subject: Tighten pg_uhc_verifychar() to enforce CP949 lead/trail byte ranges To: pgsql-hackers@postgresql.org, Henson Choi , Tatsuo Ishii , thomas.munro@gmail.com Content-Type: multipart/mixed; boundary="0000000000007c621d0653784ec3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007c621d0653784ec3 Content-Type: multipart/alternative; boundary="0000000000007c621b0653784ec1" --0000000000007c621b0653784ec1 Content-Type: text/plain; charset="UTF-8" Hi, Per CP949 (Windows-949), a two-byte UHC sequence requires the lead byte to be in 0x81-0xFE and the trail byte to be in 0x41-0x5A, 0x61-0x7A, or 0x81-0xFE. pg_uhc_verifychar() in src/common/wchar.c accepts any lead byte with the high bit set (0x80-0xFF) and any trail byte other than NUL, without enforcing those ranges. Out-of-range pairs such as 0x80 0x41 (invalid lead) or 0x81 0x40 (invalid trail) are accepted by the verifier and rejected only later by the conversion table, with the message: ERROR: character with byte sequence 0x80 0x41 in encoding "UHC" has no equivalent in encoding "UTF8" This is misleading -- those pairs are not unmappable, they are structurally invalid in CP949 -- and it is inconsistent with pg_euckr_verifychar() (src/common/wchar.c:1044), which already enforces lead/trail byte ranges explicitly via IS_EUC_RANGE_VALID(). The following evidence supports tightening the UHC verifier: - Microsoft CP949 (Windows-949) specifies the two-byte form as lead 0x81-0xFE, trail 0x41-0x5A | 0x61-0x7A | 0x81-0xFE. Other byte values are not valid for the two-byte form. - PostgreSQL's own UHC -> UTF-8 conversion table is already built on this assumption. The radix tree header in src/backend/utils/mb/Unicode/uhc_to_utf8.map declares: 0x81, /* b2_1_lower */ 0xfe, /* b2_1_upper */ 0x41, /* b2_2_lower */ 0xfe, /* b2_2_upper */ i.e. the conversion side already restricts the byte ranges and rejects anything outside them; the verifier is just doing the rejection in the wrong place with the wrong message. - pg_euckr_verifychar() already follows the strict shape: it validates lead/trail ranges directly rather than relying on pg_uhc_mblen() + a NUL-only trail check. This patch brings pg_uhc_verifychar() in line with it. This is split into two patches to make the change visible: 0001 -- Add a regression test for UHC. UHC is a client-only encoding, so there has been no dedicated test for pg_uhc_verifychar(). This adds src/test/regress/sql/uhc.sql, exercising the verifier through convert_from() in a UTF8 database. The expected output records the *current* behavior on master, so this patch applies cleanly and all tests pass without any code change. 0002 -- Tighten pg_uhc_verifychar() to enforce CP949 byte ranges. Rewrite pg_uhc_verifychar() to check lead range (0x81-0xFE) and trail range (0x41-0x5A, 0x61-0x7A, or 0x81-0xFE) directly, following the style of pg_euckr_verifychar(). The new trail-range check also subsumes the previous NONUTF8_INVALID sentinel check (0x8d 0x20), which is removed -- 0x20 is not in any valid trail range, so 0x8d 0x20 is still rejected. The diff in expected/uhc.out is exactly eight lines, all of the form: -ERROR: character with byte sequence 0xXX 0xYY in encoding - "UHC" has no equivalent in encoding "UTF8" +ERROR: invalid byte sequence for encoding "UHC": 0xXX 0xYY No other test result changes. This makes the user-visible effect of the fix self-evident: - the accept/reject outcome for any input is unchanged; - the error message format changes from "has no equivalent in encoding UTF8" to "invalid byte sequence for encoding UHC" for the eight previously misclassified pairs; - rejection moves from the conversion step to the verifier, which is the appropriate place for a structural check. Only client-side paths are affected since UHC is not supported as a server encoding. This issue was reported by Henson Choi in [1]. [1] https://postgr.es/m/CAAAe_zBdGXsALm%3DGkUPtPx9MLcjcM5hBg3HZU%2Bnh8gKXSjXJJw%40mail.gmail.com v1 patches attached. Regards, DoGeon Yoo --0000000000007c621b0653784ec1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Per CP949 (Windows-949), a two-byte UHC sequenc= e requires the lead
byte to be in 0x81-0xFE and the trail byte to be in = 0x41-0x5A,
0x61-0x7A, or 0x81-0xFE.

pg_uhc_verifychar() in src/co= mmon/wchar.c accepts any lead byte
with the high bit set (0x80-0xFF) and= any trail byte other than
NUL, without enforcing those ranges.=C2=A0 Ou= t-of-range pairs such as
0x80 0x41 (invalid lead) or 0x81 0x40 (invalid = trail) are accepted
by the verifier and rejected only later by the conve= rsion table,
with the message:

=C2=A0 ERROR: =C2=A0character with= byte sequence 0x80 0x41 in encoding "UHC"
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 has no equivalent in encoding "UTF8"

Thi= s is misleading -- those pairs are not unmappable, they are
structurally= invalid in CP949 -- and it is inconsistent with
pg_euckr_verifychar() (= src/common/wchar.c:1044), which already
enforces lead/trail byte ranges = explicitly via IS_EUC_RANGE_VALID().

The following evidence supports= tightening the UHC verifier:

- Microsoft CP949 (Windows-949) specif= ies the two-byte form as
=C2=A0 lead 0x81-0xFE, trail 0x41-0x5A | 0x61-0= x7A | 0x81-0xFE.
=C2=A0 Other byte values are not valid for the two-byte= form.

- PostgreSQL's own UHC -> UTF-8 conversion table is al= ready built
=C2=A0 on this assumption.=C2=A0 The radix tree header in=C2=A0 src/backend/utils/mb/Unicode/uhc_to_utf8.map declares:

=C2= =A0 =C2=A0 =C2=A0 0x81, /* b2_1_lower */
=C2=A0 =C2=A0 =C2=A0 0xfe, /* b= 2_1_upper */
=C2=A0 =C2=A0 =C2=A0 0x41, /* b2_2_lower */
=C2=A0 =C2= =A0 =C2=A0 0xfe, /* b2_2_upper */

=C2=A0 i.e. the conversion side al= ready restricts the byte ranges and
=C2=A0 rejects anything outside them= ; the verifier is just doing the
=C2=A0 rejection in the wrong place wit= h the wrong message.

- pg_euckr_verifychar() already follows the str= ict shape: it
=C2=A0 validates lead/trail ranges directly rather than re= lying on
=C2=A0 pg_uhc_mblen() + a NUL-only trail check.=C2=A0 This patc= h brings
=C2=A0 pg_uhc_verifychar() in line with it.

This is spli= t into two patches to make the change visible:

0001 -- Add a regress= ion test for UHC.

=C2=A0 UHC is a client-only encoding, so there has= been no dedicated
=C2=A0 test for pg_uhc_verifychar().=C2=A0 This adds<= br>=C2=A0 src/test/regress/sql/uhc.sql, exercising the verifier through
= =C2=A0 convert_from() in a UTF8 database.=C2=A0 The expected output records=
=C2=A0 the *current* behavior on master, so this patch applies cleanly<= br>=C2=A0 and all tests pass without any code change.

0002 -- Tighte= n pg_uhc_verifychar() to enforce CP949 byte ranges.

=C2=A0 Rewrite p= g_uhc_verifychar() to check lead range (0x81-0xFE) and
=C2=A0 trail rang= e (0x41-0x5A, 0x61-0x7A, or 0x81-0xFE) directly,
=C2=A0 following the st= yle of pg_euckr_verifychar().=C2=A0 The new
=C2=A0 trail-range check als= o subsumes the previous NONUTF8_INVALID
=C2=A0 sentinel check (0x8d 0x20= ), which is removed -- 0x20 is not in
=C2=A0 any valid trail range, so 0= x8d 0x20 is still rejected.

=C2=A0 The diff in expected/uhc.out is e= xactly eight lines, all of the
=C2=A0 form:

=C2=A0 =C2=A0 =C2=A0 = -ERROR: =C2=A0character with byte sequence 0xXX 0xYY in encoding
=C2=A0 = =C2=A0 =C2=A0 - =C2=A0 =C2=A0 =C2=A0 =C2=A0"UHC" has no equivalen= t in encoding "UTF8"
=C2=A0 =C2=A0 =C2=A0 +ERROR: =C2=A0invali= d byte sequence for encoding "UHC": 0xXX 0xYY

=C2=A0 No ot= her test result changes.=C2=A0 This makes the user-visible
=C2=A0 effect= of the fix self-evident:

=C2=A0 - the accept/reject outcome for any= input is unchanged;
=C2=A0 - the error message format changes from &quo= t;has no equivalent in
=C2=A0 =C2=A0 encoding UTF8" to "invali= d byte sequence for encoding UHC"
=C2=A0 =C2=A0 for the eight previ= ously misclassified pairs;
=C2=A0 - rejection moves from the conversion = step to the verifier,
=C2=A0 =C2=A0 which is the appropriate place for a= structural check.

Only client-side paths are affected since UHC is = not supported as
a server encoding.

This issue was reported by He= nson Choi in [1].

[1] https://postgr.e= s/m/CAAAe_zBdGXsALm%3DGkUPtPx9MLcjcM5hBg3HZU%2Bnh8gKXSjXJJw%40mail.gmail.co= m

v1 patches attached.

Regards,
DoGeon Yoo
--0000000000007c621b0653784ec1-- --0000000000007c621d0653784ec3 Content-Type: application/octet-stream; name="v1-0001-Add-regression-test-for-UHC-encoding-baseline-capture.patch" Content-Disposition: attachment; filename="v1-0001-Add-regression-test-for-UHC-encoding-baseline-capture.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq0apfvx0 RnJvbSBkZDVlYjk3NmZkZWZjNDQ3ODI2YjAzMTBhNzgyYzI4NDhjM2YyMWExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEb0dlb24gWW9vIDxlaHJqczAyM0BnbWFpbC5jb20+CkRhdGU6 IFRodSwgMTQgTWF5IDIwMjYgMTU6NDQ6MTkgKzA5MDAKU3ViamVjdDogW1BBVENIIHYxIDEvMl0g QWRkIHJlZ3Jlc3Npb24gdGVzdCBmb3IgVUhDIGVuY29kaW5nIChiYXNlbGluZQogY2FwdHVyZSkK ClVIQyBpcyBhIGNsaWVudC1vbmx5IGVuY29kaW5nLCBzbyBwZ191aGNfdmVyaWZ5Y2hhcigpIGNh biBvbmx5IGJlCmV4ZXJjaXNlZCBpbmRpcmVjdGx5IHRocm91Z2ggY29udmVydF9mcm9tKCkgaW4g YSBVVEY4IGRhdGFiYXNlLgpUaGVyZSBoYXMgYmVlbiBubyBkZWRpY2F0ZWQgcmVncmVzc2lvbiB0 ZXN0IGZvciBpdC4KClRoaXMgY29tbWl0IGFkZHMgc3JjL3Rlc3QvcmVncmVzcy9zcWwvdWhjLnNx bCBjb3ZlcmluZzoKCi0gdmFsaWQgdHdvLWJ5dGUgc2VxdWVuY2VzIGF0IHRoZSBDUDk0OSBsZWFk L3RyYWlsIGJvdW5kYXJpZXMKICAodHJhaWwgMHg0MSwgMHg1QSwgMHg2MSwgMHg3QSwgMHg4MSwg MHhGRTsgaGlnaCBsZWFkcyAweEM3LCAweEZEKQotIGludmFsaWQgbGVhZCBieXRlcyAoMHg4MCwg MHhGRikKLSBpbnZhbGlkIHRyYWlsIGJ5dGVzICgweDQwLCAweDVCLCAweDYwLCAweDdCLCAweDgw LCAweEZGKQotIHRoZSBOT05VVEY4X0lOVkFMSUQgc2VudGluZWwgcGFpciAoMHg4ZCAweDIwKQot IGEgdHJ1bmNhdGVkIHR3by1ieXRlIGNoYXJhY3RlcgoKVGhlIGV4cGVjdGVkIG91dHB1dCByZWNv cmRzIHRoZSAqY3VycmVudCogYmVoYXZpb3Igb24gbWFzdGVyLCBub3QKdGhlIGRlc2lyZWQgYmVo YXZpb3IuICBJbiBwYXJ0aWN1bGFyLCB0aGUgZWlnaHQgaW52YWxpZC1sZWFkIGFuZAppbnZhbGlk LXRyYWlsIGNhc2VzICgweDgwIDB4NDEsIDB4RkYgMHg0MSwgMHg4MSAweDQwLCAuLi4pIGFyZQpj dXJyZW50bHkgYWNjZXB0ZWQgYnkgcGdfdWhjX3ZlcmlmeWNoYXIoKSBhbmQgcmVqZWN0ZWQgb25s eSBsYXRlcgpieSB0aGUgY29udmVyc2lvbiB0YWJsZSB3aXRoICJjaGFyYWN0ZXIgd2l0aCBieXRl IHNlcXVlbmNlIC4uLiBoYXMKbm8gZXF1aXZhbGVudCBpbiBlbmNvZGluZyBVVEY4Ii4KCkNhcHR1 cmluZyB0aGlzIGJlaGF2aW9yIGhlcmUgbWFrZXMgdGhlIGZvbGxvdy11cCBwYXRjaCdzIGRpZmYK c2VsZi1ldmlkZW50OiBhIHN1YnNlcXVlbnQgY29tbWl0IHRoYXQgdGlnaHRlbnMgcGdfdWhjX3Zl cmlmeWNoYXIoKQp0byBlbmZvcmNlIHRoZSBDUDk0OSBsZWFkL3RyYWlsIGJ5dGUgcmFuZ2VzIHdp bGwgdHVybiB0aG9zZSBlaWdodAoiaGFzIG5vIGVxdWl2YWxlbnQiIGVycm9ycyBpbnRvICJpbnZh bGlkIGJ5dGUgc2VxdWVuY2UiIGVycm9ycywKd2l0aG91dCBjaGFuZ2luZyBhbnkgb3RoZXIgdGVz dCByZXN1bHQuCgp1aGNfMS5vdXQgcHJvdmlkZXMgYW4gZWFybHkgXHF1aXQgZmFsbGJhY2sgZm9y IG5vbi1VVEY4IGRhdGFiYXNlcy4KLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VoYy5v dXQgICB8IDg2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3VoY18xLm91dCB8ICA2ICsrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3Nj aGVkdWxlICB8ICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC91aGMuc3FsICAgICAgICB8IDM2 ICsrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxMjkgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdWhj Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdWhjXzEu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvdWhjLnNxbAoKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdWhjLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvdWhjLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uZDkyMmNjYTdjYWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3VoYy5vdXQKQEAgLTAsMCArMSw4NiBAQAorLS0gVGhpcyB0ZXN0IGlzIGFib3V0IFVI QyAoV2luZG93cy05NDkgLyBDUDk0OSkgZW5jb2RpbmcuICBVSEMgaXMgYQorLS0gY2xpZW50LW9u bHkgZW5jb2RpbmcsIHNvIGV4ZXJjaXNlIHBnX3VoY192ZXJpZnljaGFyKCkgdmlhIGNvbnZlcnRf ZnJvbSgpCistLSBpbiBhIFVURjggZGF0YWJhc2UuCitTRUxFQ1QgZ2V0ZGF0YWJhc2VlbmNvZGlu ZygpIDw+ICdVVEY4JyBBUyBza2lwX3Rlc3QgXGdzZXQKK1xpZiA6c2tpcF90ZXN0CitccXVpdAor XGVuZGlmCistLSB2YWxpZDogRVVDX0tSLWNvbXBhdGlibGUgSGFuZ3VsIChVK0FDMDAgIuqwgCIp CitTRUxFQ1QgZW5jb2RlKGNvbnZlcnRfdG8oY29udmVydF9mcm9tKCdceGIwYTEnLCAnVUhDJyks ICdVVEY4JyksICdoZXgnKTsKKyBlbmNvZGUgCistLS0tLS0tLQorIGVhYjA4MAorKDEgcm93KQor CistLSB2YWxpZDogQ1A5NDkgbGVhZC90cmFpbCBib3VuZGFyeSB2YWx1ZXMKK1NFTEVDVCBlbmNv ZGUoY29udmVydF90byhjb252ZXJ0X2Zyb20oJ1x4ODE0MScsICdVSEMnKSwgJ1VURjgnKSwgJ2hl eCcpOwktLSB0cmFpbCAweDQxCisgZW5jb2RlIAorLS0tLS0tLS0KKyBlYWIwODIKKygxIHJvdykK KworU0VMRUNUIGVuY29kZShjb252ZXJ0X3RvKGNvbnZlcnRfZnJvbSgnXHg4MTVhJywgJ1VIQycp LCAnVVRGOCcpLCAnaGV4Jyk7CS0tIHRyYWlsIDB4NUEKKyBlbmNvZGUgCistLS0tLS0tLQorIGVh YjBiNAorKDEgcm93KQorCitTRUxFQ1QgZW5jb2RlKGNvbnZlcnRfdG8oY29udmVydF9mcm9tKCdc eDgxNjEnLCAnVUhDJyksICdVVEY4JyksICdoZXgnKTsJLS0gdHJhaWwgMHg2MQorIGVuY29kZSAK Ky0tLS0tLS0tCisgZWFiMGI1CisoMSByb3cpCisKK1NFTEVDVCBlbmNvZGUoY29udmVydF90byhj b252ZXJ0X2Zyb20oJ1x4ODE3YScsICdVSEMnKSwgJ1VURjgnKSwgJ2hleCcpOwktLSB0cmFpbCAw eDdBCisgZW5jb2RlIAorLS0tLS0tLS0KKyBlYWIxOTUKKygxIHJvdykKKworU0VMRUNUIGVuY29k ZShjb252ZXJ0X3RvKGNvbnZlcnRfZnJvbSgnXHg4MTgxJywgJ1VIQycpLCAnVVRGOCcpLCAnaGV4 Jyk7CS0tIHRyYWlsIDB4ODEKKyBlbmNvZGUgCistLS0tLS0tLQorIGVhYjE5NgorKDEgcm93KQor CitTRUxFQ1QgZW5jb2RlKGNvbnZlcnRfdG8oY29udmVydF9mcm9tKCdceDgxZmUnLCAnVUhDJyks ICdVVEY4JyksICdoZXgnKTsJLS0gdHJhaWwgMHhGRQorIGVuY29kZSAKKy0tLS0tLS0tCisgZWFi NDkzCisoMSByb3cpCisKK1NFTEVDVCBlbmNvZGUoY29udmVydF90byhjb252ZXJ0X2Zyb20oJ1x4 YzdhMScsICdVSEMnKSwgJ1VURjgnKSwgJ2hleCcpOwktLSBoaWdoIGxlYWQgMHhDNworIGVuY29k ZSAKKy0tLS0tLS0tCisgZWQ5MDg4CisoMSByb3cpCisKK1NFTEVDVCBlbmNvZGUoY29udmVydF90 byhjb252ZXJ0X2Zyb20oJ1x4ZmRhMScsICdVSEMnKSwgJ1VURjgnKSwgJ2hleCcpOwktLSBoaWdo IGxlYWQgMHhGRAorIGVuY29kZSAKKy0tLS0tLS0tCisgZTc4OGJiCisoMSByb3cpCisKKy0tIGlu dmFsaWQgbGVhZCBieXRlICgweDgwIGFuZCAweEZGIGFyZSB1bnVzZWQgaW4gQ1A5NDkpCitTRUxF Q1QgY29udmVydF9mcm9tKCdceDgwNDEnLCAnVUhDJyk7CitFUlJPUjogIGNoYXJhY3RlciB3aXRo IGJ5dGUgc2VxdWVuY2UgMHg4MCAweDQxIGluIGVuY29kaW5nICJVSEMiIGhhcyBubyBlcXVpdmFs ZW50IGluIGVuY29kaW5nICJVVEY4IgorU0VMRUNUIGNvbnZlcnRfZnJvbSgnXHhmZjQxJywgJ1VI QycpOworRVJST1I6ICBjaGFyYWN0ZXIgd2l0aCBieXRlIHNlcXVlbmNlIDB4ZmYgMHg0MSBpbiBl bmNvZGluZyAiVUhDIiBoYXMgbm8gZXF1aXZhbGVudCBpbiBlbmNvZGluZyAiVVRGOCIKKy0tIGlu dmFsaWQgdHJhaWwgYnl0ZQorU0VMRUNUIGNvbnZlcnRfZnJvbSgnXHg4MTQwJywgJ1VIQycpOwkt LSAweDQwCitFUlJPUjogIGNoYXJhY3RlciB3aXRoIGJ5dGUgc2VxdWVuY2UgMHg4MSAweDQwIGlu IGVuY29kaW5nICJVSEMiIGhhcyBubyBlcXVpdmFsZW50IGluIGVuY29kaW5nICJVVEY4IgorU0VM RUNUIGNvbnZlcnRfZnJvbSgnXHg4MTViJywgJ1VIQycpOwktLSAweDVCCitFUlJPUjogIGNoYXJh Y3RlciB3aXRoIGJ5dGUgc2VxdWVuY2UgMHg4MSAweDViIGluIGVuY29kaW5nICJVSEMiIGhhcyBu byBlcXVpdmFsZW50IGluIGVuY29kaW5nICJVVEY4IgorU0VMRUNUIGNvbnZlcnRfZnJvbSgnXHg4 MTYwJywgJ1VIQycpOwktLSAweDYwCitFUlJPUjogIGNoYXJhY3RlciB3aXRoIGJ5dGUgc2VxdWVu Y2UgMHg4MSAweDYwIGluIGVuY29kaW5nICJVSEMiIGhhcyBubyBlcXVpdmFsZW50IGluIGVuY29k aW5nICJVVEY4IgorU0VMRUNUIGNvbnZlcnRfZnJvbSgnXHg4MTdiJywgJ1VIQycpOwktLSAweDdC CitFUlJPUjogIGNoYXJhY3RlciB3aXRoIGJ5dGUgc2VxdWVuY2UgMHg4MSAweDdiIGluIGVuY29k aW5nICJVSEMiIGhhcyBubyBlcXVpdmFsZW50IGluIGVuY29kaW5nICJVVEY4IgorU0VMRUNUIGNv bnZlcnRfZnJvbSgnXHg4MTgwJywgJ1VIQycpOwktLSAweDgwCitFUlJPUjogIGNoYXJhY3RlciB3 aXRoIGJ5dGUgc2VxdWVuY2UgMHg4MSAweDgwIGluIGVuY29kaW5nICJVSEMiIGhhcyBubyBlcXVp dmFsZW50IGluIGVuY29kaW5nICJVVEY4IgorU0VMRUNUIGNvbnZlcnRfZnJvbSgnXHg4MWZmJywg J1VIQycpOwktLSAweEZGCitFUlJPUjogIGNoYXJhY3RlciB3aXRoIGJ5dGUgc2VxdWVuY2UgMHg4 MSAweGZmIGluIGVuY29kaW5nICJVSEMiIGhhcyBubyBlcXVpdmFsZW50IGluIGVuY29kaW5nICJV VEY4IgorU0VMRUNUIGNvbnZlcnRfZnJvbSgnXHg4ZDIwJywgJ1VIQycpOwktLSBOT05VVEY4X0lO VkFMSUQgc2VudGluZWwgcGFpcgorRVJST1I6ICBpbnZhbGlkIGJ5dGUgc2VxdWVuY2UgZm9yIGVu Y29kaW5nICJVSEMiOiAweDhkIDB4MjAKKy0tIHRydW5jYXRlZCB0d28tYnl0ZSBjaGFyYWN0ZXIK K1NFTEVDVCBjb252ZXJ0X2Zyb20oJ1x4ODEnLCAnVUhDJyk7CitFUlJPUjogIGludmFsaWQgYnl0 ZSBzZXF1ZW5jZSBmb3IgZW5jb2RpbmcgIlVIQyI6IDB4ODEKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvdWhjXzEub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91 aGNfMS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlkZWI4Yjhl ZTFkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91aGNfMS5v dXQKQEAgLTAsMCArMSw2IEBACistLSBUaGlzIHRlc3QgaXMgYWJvdXQgVUhDIChXaW5kb3dzLTk0 OSAvIENQOTQ5KSBlbmNvZGluZy4gIFVIQyBpcyBhCistLSBjbGllbnQtb25seSBlbmNvZGluZywg c28gZXhlcmNpc2UgcGdfdWhjX3ZlcmlmeWNoYXIoKSB2aWEgY29udmVydF9mcm9tKCkKKy0tIGlu IGEgVVRGOCBkYXRhYmFzZS4KK1NFTEVDVCBnZXRkYXRhYmFzZWVuY29kaW5nKCkgPD4gJ1VURjgn IEFTIHNraXBfdGVzdCBcZ3NldAorXGlmIDpza2lwX3Rlc3QKK1xxdWl0CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJh bGxlbF9zY2hlZHVsZQppbmRleCA4ZmEwYTZjNDdmYi4uMTVkNWU1Mzk5NjEgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMjgsNyArMjgsNyBAQCB0ZXN0OiBzdHJpbmdzIG1kNSBu dW1lcm9sb2d5IHBvaW50IGxzZWcgbGluZSBib3ggcGF0aCBwb2x5Z29uIGNpcmNsZSBkYXRlIHRp bWUgdAogIyBnZW9tZXRyeSBkZXBlbmRzIG9uIHBvaW50LCBsc2VnLCBsaW5lLCBib3gsIHBhdGgs IHBvbHlnb24sIGNpcmNsZQogIyBob3JvbG9neSBkZXBlbmRzIG9uIGRhdGUsIHRpbWUsIHRpbWV0 eiwgdGltZXN0YW1wLCB0aW1lc3RhbXB0eiwgaW50ZXJ2YWwKICMgLS0tLS0tLS0tLQotdGVzdDog Z2VvbWV0cnkgaG9yb2xvZ3kgdHN0eXBlcyByZWdleCB0eXBlX3Nhbml0eSBvcHJfc2FuaXR5IG1p c2Nfc2FuaXR5IGNvbW1lbnRzIGV4cHJlc3Npb25zIHVuaWNvZGUgeGlkIG12Y2MgZGF0YWJhc2Ug c3RhdHNfaW1wb3J0IHBnX25kaXN0aW5jdCBwZ19kZXBlbmRlbmNpZXMgb2lkOCBlbmNvZGluZyBl dWNfa3IKK3Rlc3Q6IGdlb21ldHJ5IGhvcm9sb2d5IHRzdHlwZXMgcmVnZXggdHlwZV9zYW5pdHkg b3ByX3Nhbml0eSBtaXNjX3Nhbml0eSBjb21tZW50cyBleHByZXNzaW9ucyB1bmljb2RlIHhpZCBt dmNjIGRhdGFiYXNlIHN0YXRzX2ltcG9ydCBwZ19uZGlzdGluY3QgcGdfZGVwZW5kZW5jaWVzIG9p ZDggZW5jb2RpbmcgZXVjX2tyIHVoYwogCiAjIC0tLS0tLS0tLS0KICMgTG9hZCBodWdlIGFtb3Vu dHMgb2YgZGF0YQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdWhjLnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3VoYy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjY5MDVhZDA4NGI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvdWhjLnNxbApAQCAtMCwwICsxLDM2IEBACistLSBUaGlzIHRlc3QgaXMgYWJvdXQgVUhD IChXaW5kb3dzLTk0OSAvIENQOTQ5KSBlbmNvZGluZy4gIFVIQyBpcyBhCistLSBjbGllbnQtb25s eSBlbmNvZGluZywgc28gZXhlcmNpc2UgcGdfdWhjX3ZlcmlmeWNoYXIoKSB2aWEgY29udmVydF9m cm9tKCkKKy0tIGluIGEgVVRGOCBkYXRhYmFzZS4KK1NFTEVDVCBnZXRkYXRhYmFzZWVuY29kaW5n KCkgPD4gJ1VURjgnIEFTIHNraXBfdGVzdCBcZ3NldAorXGlmIDpza2lwX3Rlc3QKK1xxdWl0Citc ZW5kaWYKKworLS0gdmFsaWQ6IEVVQ19LUi1jb21wYXRpYmxlIEhhbmd1bCAoVStBQzAwICLqsIAi KQorU0VMRUNUIGVuY29kZShjb252ZXJ0X3RvKGNvbnZlcnRfZnJvbSgnXHhiMGExJywgJ1VIQycp LCAnVVRGOCcpLCAnaGV4Jyk7CisKKy0tIHZhbGlkOiBDUDk0OSBsZWFkL3RyYWlsIGJvdW5kYXJ5 IHZhbHVlcworU0VMRUNUIGVuY29kZShjb252ZXJ0X3RvKGNvbnZlcnRfZnJvbSgnXHg4MTQxJywg J1VIQycpLCAnVVRGOCcpLCAnaGV4Jyk7CS0tIHRyYWlsIDB4NDEKK1NFTEVDVCBlbmNvZGUoY29u dmVydF90byhjb252ZXJ0X2Zyb20oJ1x4ODE1YScsICdVSEMnKSwgJ1VURjgnKSwgJ2hleCcpOwkt LSB0cmFpbCAweDVBCitTRUxFQ1QgZW5jb2RlKGNvbnZlcnRfdG8oY29udmVydF9mcm9tKCdceDgx NjEnLCAnVUhDJyksICdVVEY4JyksICdoZXgnKTsJLS0gdHJhaWwgMHg2MQorU0VMRUNUIGVuY29k ZShjb252ZXJ0X3RvKGNvbnZlcnRfZnJvbSgnXHg4MTdhJywgJ1VIQycpLCAnVVRGOCcpLCAnaGV4 Jyk7CS0tIHRyYWlsIDB4N0EKK1NFTEVDVCBlbmNvZGUoY29udmVydF90byhjb252ZXJ0X2Zyb20o J1x4ODE4MScsICdVSEMnKSwgJ1VURjgnKSwgJ2hleCcpOwktLSB0cmFpbCAweDgxCitTRUxFQ1Qg ZW5jb2RlKGNvbnZlcnRfdG8oY29udmVydF9mcm9tKCdceDgxZmUnLCAnVUhDJyksICdVVEY4Jyks ICdoZXgnKTsJLS0gdHJhaWwgMHhGRQorU0VMRUNUIGVuY29kZShjb252ZXJ0X3RvKGNvbnZlcnRf ZnJvbSgnXHhjN2ExJywgJ1VIQycpLCAnVVRGOCcpLCAnaGV4Jyk7CS0tIGhpZ2ggbGVhZCAweEM3 CitTRUxFQ1QgZW5jb2RlKGNvbnZlcnRfdG8oY29udmVydF9mcm9tKCdceGZkYTEnLCAnVUhDJyks ICdVVEY4JyksICdoZXgnKTsJLS0gaGlnaCBsZWFkIDB4RkQKKworLS0gaW52YWxpZCBsZWFkIGJ5 dGUgKDB4ODAgYW5kIDB4RkYgYXJlIHVudXNlZCBpbiBDUDk0OSkKK1NFTEVDVCBjb252ZXJ0X2Zy b20oJ1x4ODA0MScsICdVSEMnKTsKK1NFTEVDVCBjb252ZXJ0X2Zyb20oJ1x4ZmY0MScsICdVSEMn KTsKKworLS0gaW52YWxpZCB0cmFpbCBieXRlCitTRUxFQ1QgY29udmVydF9mcm9tKCdceDgxNDAn LCAnVUhDJyk7CS0tIDB4NDAKK1NFTEVDVCBjb252ZXJ0X2Zyb20oJ1x4ODE1YicsICdVSEMnKTsJ LS0gMHg1QgorU0VMRUNUIGNvbnZlcnRfZnJvbSgnXHg4MTYwJywgJ1VIQycpOwktLSAweDYwCitT RUxFQ1QgY29udmVydF9mcm9tKCdceDgxN2InLCAnVUhDJyk7CS0tIDB4N0IKK1NFTEVDVCBjb252 ZXJ0X2Zyb20oJ1x4ODE4MCcsICdVSEMnKTsJLS0gMHg4MAorU0VMRUNUIGNvbnZlcnRfZnJvbSgn XHg4MWZmJywgJ1VIQycpOwktLSAweEZGCitTRUxFQ1QgY29udmVydF9mcm9tKCdceDhkMjAnLCAn VUhDJyk7CS0tIE5PTlVURjhfSU5WQUxJRCBzZW50aW5lbCBwYWlyCisKKy0tIHRydW5jYXRlZCB0 d28tYnl0ZSBjaGFyYWN0ZXIKK1NFTEVDVCBjb252ZXJ0X2Zyb20oJ1x4ODEnLCAnVUhDJyk7Ci0t IAoyLjQzLjAKCg== --0000000000007c621d0653784ec3 Content-Type: application/octet-stream; name="v1-0002-Tighten-pg_uhc_verifychar-to-enforce-CP949-lead-trail.patch" Content-Disposition: attachment; filename="v1-0002-Tighten-pg_uhc_verifychar-to-enforce-CP949-lead-trail.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq0apiwm1 RnJvbSA1NmYxOGE1Y2ZhYjA3ODI2MjA1ODYyYjliMTc2YTI5YjJkM2JhNGExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEb0dlb24gWW9vIDxlaHJqczAyM0BnbWFpbC5jb20+CkRhdGU6 IFRodSwgMTQgTWF5IDIwMjYgMTU6NDY6NDIgKzA5MDAKU3ViamVjdDogW1BBVENIIHYxIDIvMl0g VGlnaHRlbiBwZ191aGNfdmVyaWZ5Y2hhcigpIHRvIGVuZm9yY2UgQ1A5NDkKIGxlYWQvdHJhaWwg Ynl0ZSByYW5nZXMKClBlciBDUDk0OSAoV2luZG93cy05NDkpLCBhIHR3by1ieXRlIFVIQyBzZXF1 ZW5jZSByZXF1aXJlcyB0aGUgbGVhZApieXRlIHRvIGJlIGluIDB4ODEtMHhGRSBhbmQgdGhlIHRy YWlsIGJ5dGUgdG8gYmUgaW4gMHg0MS0weDVBLAoweDYxLTB4N0EsIG9yIDB4ODEtMHhGRS4KCnBn X3VoY192ZXJpZnljaGFyKCkgYWNjZXB0cyBhbnkgbGVhZCBieXRlIHdpdGggdGhlIGhpZ2ggYml0 IHNldAooMHg4MC0weEZGKSBhbmQgYW55IHRyYWlsIGJ5dGUgb3RoZXIgdGhhbiBOVUwsIHdpdGhv dXQgZW5mb3JjaW5nCnRob3NlIHJhbmdlcy4gIE91dC1vZi1yYW5nZSBwYWlycyBzdWNoIGFzIDB4 ODAgMHg0MSAoaW52YWxpZCBsZWFkKQpvciAweDgxIDB4NDAgKGludmFsaWQgdHJhaWwpIGFyZSBh Y2NlcHRlZCBieSB0aGUgdmVyaWZpZXI7IHRoZXkKYXJlIHJlamVjdGVkIG9ubHkgbGF0ZXIgYnkg dGhlIGNvbnZlcnNpb24gdGFibGUsIHdpdGggdGhlIG1lc3NhZ2UKImNoYXJhY3RlciB3aXRoIGJ5 dGUgc2VxdWVuY2UgLi4uIGhhcyBubyBlcXVpdmFsZW50IGluIGVuY29kaW5nClVURjgiLiAgVGhp cyBtYWtlcyB0aGUgZGlhZ25vc3RpYyBtaXNsZWFkaW5nICh0aGUgcGFpciBpcyBub3QKdW5tYXBw YWJsZSwgaXQgaXMgc3RydWN0dXJhbGx5IGludmFsaWQpIGFuZCBpcyBpbmNvbnNpc3RlbnQgd2l0 aApwZ19ldWNrcl92ZXJpZnljaGFyKCksIHdoaWNoIGFscmVhZHkgZW5mb3JjZXMgbGVhZC90cmFp bCByYW5nZXMKZXhwbGljaXRseS4KClJld3JpdGUgcGdfdWhjX3ZlcmlmeWNoYXIoKSB0byBjaGVj ayB0aGUgbGVhZCBhbmQgdHJhaWwgYnl0ZQpyYW5nZXMgZGlyZWN0bHksIGZvbGxvd2luZyB0aGUg c3R5bGUgb2YgcGdfZXVja3JfdmVyaWZ5Y2hhcigpLgpUaGUgbmV3IHRyYWlsLXJhbmdlIGNoZWNr IGFsc28gc3Vic3VtZXMgdGhlIHByZXZpb3VzCk5PTlVURjhfSU5WQUxJRCBzZW50aW5lbCBjaGVj ayAoMHg4ZCAweDIwKSwgd2hpY2ggaXMgcmVtb3ZlZCBhcwppdCBiZWNvbWVzIHJlZHVuZGFudCAt LSAweDIwIGlzIG5vdCBpbiBhbnkgdmFsaWQgdHJhaWwgcmFuZ2UsIHNvCjB4OGQgMHgyMCBpcyBz dGlsbCByZWplY3RlZC4KCkFmdGVyIHRoaXMgY2hhbmdlLCBvdXQtb2YtcmFuZ2UgcGFpcnMgYXJl IHJlamVjdGVkIGF0IHRoZSB2ZXJpZmllcgp3aXRoICJpbnZhbGlkIGJ5dGUgc2VxdWVuY2UgZm9y IGVuY29kaW5nIFVIQyIuICBUaGUgcmVncmVzc2lvbgp0ZXN0IGFkZGVkIGluIHRoZSBwcmV2aW91 cyBjb21taXQgY2FwdHVyZXMgdGhpcyBleGFjdGx5OiBlaWdodAoiaGFzIG5vIGVxdWl2YWxlbnQi IGVycm9ycyBiZWNvbWUgImludmFsaWQgYnl0ZSBzZXF1ZW5jZSIgZXJyb3JzLAphbmQgbm8gb3Ro ZXIgdGVzdCByZXN1bHQgY2hhbmdlcy4gIFRoZSB1c2VyLXZpc2libGUgZWZmZWN0IGlzIHRoZQpl cnJvciBtZXNzYWdlIGZvcm1hdCBhbmQgdGhlIHN0YWdlIGF0IHdoaWNoIHRoZSBieXRlIHNlcXVl bmNlIGlzCnJlamVjdGVkOyB0aGUgYWNjZXB0L3JlamVjdCBvdXRjb21lIGZvciBhbnkgaW5wdXQg aXMgdW5jaGFuZ2VkLgoKT25seSBjbGllbnQtc2lkZSBwYXRocyBhcmUgYWZmZWN0ZWQgc2luY2Ug VUhDIGlzIG5vdCBzdXBwb3J0ZWQgYXMKYSBzZXJ2ZXIgZW5jb2RpbmcuCgpSZXBvcnRlZC1ieTog SGVuc29uIENob2kgPGFzc2FtMjU4QGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cu cG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUFBZV96QmRHWHNBTG0lM0RHa1VQdFB4OU1MY2pj TTVoQmczSFpVJTJCbmg4Z0tYU2pYSkp3JTQwbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvY29tbW9u L3djaGFyLmMgICAgICAgICAgICAgICAgfCAzNyArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VoYy5vdXQgfCAxNiArKysrKystLS0tLS0t CiAyIGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9jb21tb24vd2NoYXIuYyBiL3NyYy9jb21tb24vd2NoYXIuYwppbmRleCA5 MjY4MjNjYWJlYy4uNWY4YjAzMzMzMjUgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vd2NoYXIuYwor KysgYi9zcmMvY29tbW9uL3djaGFyLmMKQEAgLTEzODcsMjYgKzEzODcsMzcgQEAgcGdfZ2JrX3Zl cmlmeXN0cihjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBpbnQgbGVuKQogc3RhdGljIGludAogcGdf dWhjX3ZlcmlmeWNoYXIoY29uc3QgdW5zaWduZWQgY2hhciAqcywgaW50IGxlbikKIHsKLQlpbnQJ CQlsLAotCQkJCW1ibDsKKwlpbnQJCQlsOworCXVuc2lnbmVkIGNoYXIgYzEsCisJCQkJYzI7CiAK LQlsID0gbWJsID0gcGdfdWhjX21ibGVuKHMpOworCWMxID0gKnMrKzsKIAotCWlmIChsZW4gPCBs KQotCQlyZXR1cm4gLTE7CisJaWYgKElTX0hJR0hCSVRfU0VUKGMxKSkKKwl7CisJCWwgPSAyOwor CQlpZiAobCA+IGxlbikKKwkJCXJldHVybiAtMTsKIAotCWlmIChsID09IDIgJiYKLQkJc1swXSA9 PSBOT05VVEY4X0lOVkFMSURfQllURTAgJiYKLQkJc1sxXSA9PSBOT05VVEY4X0lOVkFMSURfQllU RTEpCi0JCXJldHVybiAtMTsKKwkJYzIgPSAqcysrOwogCi0Jd2hpbGUgKC0tbCA+IDApCi0Jewot CQlpZiAoKisrcyA9PSAnXDAnKQorCQkvKiBDUDk0OSBsZWFkIGJ5dGUgbXVzdCBiZSAweDgxLTB4 RkUgKi8KKwkJaWYgKGMxIDwgMHg4MSB8fCBjMSA+IDB4ZmUpCisJCQlyZXR1cm4gLTE7CisKKwkJ LyogQ1A5NDkgdHJhaWwgYnl0ZTogMHg0MS0weDVBLCAweDYxLTB4N0EsIG9yIDB4ODEtMHhGRSAq LworCQlpZiAoISgoYzIgPj0gMHg0MSAmJiBjMiA8PSAweDVhKSB8fAorCQkJICAoYzIgPj0gMHg2 MSAmJiBjMiA8PSAweDdhKSB8fAorCQkJICAoYzIgPj0gMHg4MSAmJiBjMiA8PSAweGZlKSkpCiAJ CQlyZXR1cm4gLTE7CiAJfQorCWVsc2UKKwkJLyogbXVzdCBiZSBBU0NJSSAqLworCXsKKwkJbCA9 IDE7CisJfQogCi0JcmV0dXJuIG1ibDsKKwlyZXR1cm4gbDsKIH0KIAogc3RhdGljIGludApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91aGMub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC91aGMub3V0CmluZGV4IGQ5MjJjY2E3Y2FmLi4yMDk0OWZlYjcwMyAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91aGMub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvdWhjLm91dApAQCAtNjMsMjIgKzYzLDIyIEBAIFNFTEVDVCBlbmNv ZGUoY29udmVydF90byhjb252ZXJ0X2Zyb20oJ1x4ZmRhMScsICdVSEMnKSwgJ1VURjgnKSwgJ2hl eCcpOwktLSBoaWdoCiAKIC0tIGludmFsaWQgbGVhZCBieXRlICgweDgwIGFuZCAweEZGIGFyZSB1 bnVzZWQgaW4gQ1A5NDkpCiBTRUxFQ1QgY29udmVydF9mcm9tKCdceDgwNDEnLCAnVUhDJyk7Ci1F UlJPUjogIGNoYXJhY3RlciB3aXRoIGJ5dGUgc2VxdWVuY2UgMHg4MCAweDQxIGluIGVuY29kaW5n ICJVSEMiIGhhcyBubyBlcXVpdmFsZW50IGluIGVuY29kaW5nICJVVEY4IgorRVJST1I6ICBpbnZh bGlkIGJ5dGUgc2VxdWVuY2UgZm9yIGVuY29kaW5nICJVSEMiOiAweDgwIDB4NDEKIFNFTEVDVCBj b252ZXJ0X2Zyb20oJ1x4ZmY0MScsICdVSEMnKTsKLUVSUk9SOiAgY2hhcmFjdGVyIHdpdGggYnl0 ZSBzZXF1ZW5jZSAweGZmIDB4NDEgaW4gZW5jb2RpbmcgIlVIQyIgaGFzIG5vIGVxdWl2YWxlbnQg aW4gZW5jb2RpbmcgIlVURjgiCitFUlJPUjogIGludmFsaWQgYnl0ZSBzZXF1ZW5jZSBmb3IgZW5j b2RpbmcgIlVIQyI6IDB4ZmYgMHg0MQogLS0gaW52YWxpZCB0cmFpbCBieXRlCiBTRUxFQ1QgY29u dmVydF9mcm9tKCdceDgxNDAnLCAnVUhDJyk7CS0tIDB4NDAKLUVSUk9SOiAgY2hhcmFjdGVyIHdp dGggYnl0ZSBzZXF1ZW5jZSAweDgxIDB4NDAgaW4gZW5jb2RpbmcgIlVIQyIgaGFzIG5vIGVxdWl2 YWxlbnQgaW4gZW5jb2RpbmcgIlVURjgiCitFUlJPUjogIGludmFsaWQgYnl0ZSBzZXF1ZW5jZSBm b3IgZW5jb2RpbmcgIlVIQyI6IDB4ODEgMHg0MAogU0VMRUNUIGNvbnZlcnRfZnJvbSgnXHg4MTVi JywgJ1VIQycpOwktLSAweDVCCi1FUlJPUjogIGNoYXJhY3RlciB3aXRoIGJ5dGUgc2VxdWVuY2Ug MHg4MSAweDViIGluIGVuY29kaW5nICJVSEMiIGhhcyBubyBlcXVpdmFsZW50IGluIGVuY29kaW5n ICJVVEY4IgorRVJST1I6ICBpbnZhbGlkIGJ5dGUgc2VxdWVuY2UgZm9yIGVuY29kaW5nICJVSEMi OiAweDgxIDB4NWIKIFNFTEVDVCBjb252ZXJ0X2Zyb20oJ1x4ODE2MCcsICdVSEMnKTsJLS0gMHg2 MAotRVJST1I6ICBjaGFyYWN0ZXIgd2l0aCBieXRlIHNlcXVlbmNlIDB4ODEgMHg2MCBpbiBlbmNv ZGluZyAiVUhDIiBoYXMgbm8gZXF1aXZhbGVudCBpbiBlbmNvZGluZyAiVVRGOCIKK0VSUk9SOiAg aW52YWxpZCBieXRlIHNlcXVlbmNlIGZvciBlbmNvZGluZyAiVUhDIjogMHg4MSAweDYwCiBTRUxF Q1QgY29udmVydF9mcm9tKCdceDgxN2InLCAnVUhDJyk7CS0tIDB4N0IKLUVSUk9SOiAgY2hhcmFj dGVyIHdpdGggYnl0ZSBzZXF1ZW5jZSAweDgxIDB4N2IgaW4gZW5jb2RpbmcgIlVIQyIgaGFzIG5v IGVxdWl2YWxlbnQgaW4gZW5jb2RpbmcgIlVURjgiCitFUlJPUjogIGludmFsaWQgYnl0ZSBzZXF1 ZW5jZSBmb3IgZW5jb2RpbmcgIlVIQyI6IDB4ODEgMHg3YgogU0VMRUNUIGNvbnZlcnRfZnJvbSgn XHg4MTgwJywgJ1VIQycpOwktLSAweDgwCi1FUlJPUjogIGNoYXJhY3RlciB3aXRoIGJ5dGUgc2Vx dWVuY2UgMHg4MSAweDgwIGluIGVuY29kaW5nICJVSEMiIGhhcyBubyBlcXVpdmFsZW50IGluIGVu Y29kaW5nICJVVEY4IgorRVJST1I6ICBpbnZhbGlkIGJ5dGUgc2VxdWVuY2UgZm9yIGVuY29kaW5n ICJVSEMiOiAweDgxIDB4ODAKIFNFTEVDVCBjb252ZXJ0X2Zyb20oJ1x4ODFmZicsICdVSEMnKTsJ LS0gMHhGRgotRVJST1I6ICBjaGFyYWN0ZXIgd2l0aCBieXRlIHNlcXVlbmNlIDB4ODEgMHhmZiBp biBlbmNvZGluZyAiVUhDIiBoYXMgbm8gZXF1aXZhbGVudCBpbiBlbmNvZGluZyAiVVRGOCIKK0VS Uk9SOiAgaW52YWxpZCBieXRlIHNlcXVlbmNlIGZvciBlbmNvZGluZyAiVUhDIjogMHg4MSAweGZm CiBTRUxFQ1QgY29udmVydF9mcm9tKCdceDhkMjAnLCAnVUhDJyk7CS0tIE5PTlVURjhfSU5WQUxJ RCBzZW50aW5lbCBwYWlyCiBFUlJPUjogIGludmFsaWQgYnl0ZSBzZXF1ZW5jZSBmb3IgZW5jb2Rp bmcgIlVIQyI6IDB4OGQgMHgyMAogLS0gdHJ1bmNhdGVkIHR3by1ieXRlIGNoYXJhY3RlcgotLSAK Mi40My4wCgo= --0000000000007c621d0653784ec3--